{"version":3,"sources":["webpack:///vendor.js","webpack:///webpack/bootstrap ecd4b0bd323eb9518185","webpack:///./~/process/browser.js","webpack:///./~/setimmediate/setImmediate.js","webpack:///./~/timers-browserify/main.js","webpack:///(webpack)/buildin/global.js","webpack:///./~/vue/dist/vue.esm.js"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","i","l","call","parentJsonpFunction","window","chunkIds","moreModules","executeModules","chunkId","result","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","shift","s","1","e","onScriptComplete","script","onerror","onload","clearTimeout","timeout","chunk","Error","installedChunkData","Promise","resolve","promise","reject","head","document","getElementsByTagName","createElement","type","charset","async","nc","setAttribute","src","p","setTimeout","appendChild","m","c","value","d","name","getter","o","defineProperty","configurable","enumerable","get","n","__esModule","object","property","oe","err","console","error","273","defaultSetTimout","defaultClearTimeout","runTimeout","fun","cachedSetTimeout","this","runClearTimeout","marker","cachedClearTimeout","cleanUpNextTick","draining","currentQueue","queue","concat","queueIndex","drainQueue","len","run","Item","array","noop","process","nextTick","args","Array","arguments","apply","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","274","setImmediate","callback","Function","task","tasksByHandle","nextHandle","registerImmediate","clearImmediate","handle","undefined","runIfPresent","currentlyRunningATask","global","doc","attachTo","getPrototypeOf","toString","postMessage","importScripts","postMessageIsAsynchronous","oldOnMessage","onmessage","messagePrefix","Math","random","onGlobalMessage","event","source","data","indexOf","slice","addEventListener","attachEvent","MessageChannel","channel","port1","port2","html","documentElement","onreadystatechange","removeChild","self","275","Timeout","id","clearFn","_id","_clearFn","scope","setInterval","clearInterval","close","unref","ref","enroll","item","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","293","47","g","eval","48","__webpack_exports__","isUndef","v","isDef","isTrue","isFalse","isPrimitive","isObject","obj","isPlainObject","_toString","isRegExp","isValidArrayIndex","val","parseFloat","String","floor","isFinite","isPromise","then","catch","isArray","JSON","stringify","toNumber","isNaN","makeMap","str","expectsLowerCase","map","create","list","split","toLowerCase","remove","arr","index","splice","hasOwn","key","cached","fn","cache","polyfillBind","ctx","boundFn","a","_length","nativeBind","bind","toArray","start","ret","extend","to","_from","toObject","res","b","looseEqual","isObjectA","isObjectB","isArrayA","isArrayB","every","Date","getTime","keysA","keys","keysB","looseIndexOf","called","isReserved","charCodeAt","def","writable","parsePath","path","bailRE","test","segments","isNative","Ctor","pushTarget","target","targetStack","Dep","popTarget","pop","createTextVNode","VNode","cloneVNode","vnode","cloned","tag","children","text","elm","context","componentOptions","asyncFactory","ns","isStatic","isComment","fnContext","fnOptions","fnScopeId","asyncMeta","isCloned","toggleObserving","shouldObserve","protoAugment","__proto__","copyAugment","observe","asRootData","ob","__ob__","Observer","isServerRendering","isExtensible","_isVue","vmCount","defineReactive$$1","customSetter","shallow","dep","getOwnPropertyDescriptor","setter","set","childOb","depend","dependArray","newVal","notify","max","del","mergeData","from","toVal","fromVal","hasSymbol","Reflect","ownKeys","mergeDataOrFn","parentVal","childVal","vm","instanceData","defaultData","mergeHook","dedupeHooks","hooks","mergeAssets","normalizeProps","options","props","camelize","normalizeInject","inject","normalized","normalizeDirectives","dirs","directives","def$$1","update","mergeOptions","parent","child","mergeField","strat","strats","defaultStrat","_base","extends","mixins","resolveAsset","warnMissing","assets","camelizedId","PascalCaseId","capitalize","validateProp","propOptions","propsData","prop","absent","booleanIndex","getTypeIndex","Boolean","hyphenate","stringIndex","getPropDefaultValue","prevShouldObserve","default","$options","_props","getType","match","isSameType","expectedTypes","handleError","info","cur","$parent","errorCaptured","capture","globalHandleError","invokeWithErrorHandling","handler","_handled","config","errorHandler","logError","inBrowser","inWeex","flushCallbacks","pending","copies","callbacks","cb","_resolve","timerFunc","traverse","_traverse","seenObjects","clear","seen","isA","isFrozen","depId","has","add","createFnInvoker","fns","invoker","arguments$1","updateListeners","oldOn","remove$$1","createOnceHandler","old","normalizeEvent","passive","params","mergeVNodeHook","hookKey","hook","wrappedHook","oldHook","merged","extractPropsFromVNodeData","attrs","altKey","checkProp","hash","preserve","simpleNormalizeChildren","normalizeChildren","normalizeArrayChildren","isTextNode","node","nestedIndex","lastIndex","last","_isVList","initProvide","provide","_provided","initInjections","resolveInject","forEach","provideKey","provideDefault","resolveSlots","slots","slot","name$1","isWhitespace","normalizeScopedSlots","normalSlots","prevSlots","hasNormalSlots","isStable","$stable","$key","_normalized","emptyObject","$hasNormal","key$1","normalizeScopedSlot","key$2","proxyNormalSlot","proxy","renderList","render","Symbol","iterator","next","done","renderSlot","fallback","bindObject","nodes","scopedSlotFn","$scopedSlots","$slots","$createElement","resolveFilter","identity","isKeyNotMatch","expect","actual","checkKeyCodes","eventKeyCode","builtInKeyCode","eventKeyName","builtInKeyName","mappedKeyCode","keyCodes","bindObjectProps","asProp","isSync","isReservedAttribute","mustUseProp","domProps","camelizedKey","hyphenatedKey","$event","renderStatic","isInFor","_staticTrees","tree","staticRenderFns","_renderProxy","markStatic","markOnce","isOnce","markStaticNode","bindObjectListeners","existing","ours","resolveScopedSlots","hasDynamicKeys","contentHashKey","bindDynamicKeys","baseObj","values","prependModifier","symbol","installRenderHelpers","_o","_n","_s","_l","_t","_q","_i","_m","_f","_k","_b","_v","_e","createEmptyVNode","_u","_g","_d","_p","FunctionalRenderContext","contextVm","this$1","_original","isCompiled","_compiled","needNormalization","injections","scopedSlots","_scopeId","_c","createFunctionalComponent","mergeProps","renderContext","cloneAndMarkFunctionalResult","vnodes","clone","createComponent","baseCtor","cid","resolveAsyncComponent","createAsyncPlaceholder","resolveConstructorOptions","model","transformModel","functional","nativeOn","abstract","installComponentHooks","createComponentInstanceForVnode","_isComponent","_parentVnode","inlineTemplate","hooksToMerge","toMerge","componentVNodeHooks","_merged","mergeHook$1","f1","f2","normalizationType","alwaysNormalize","ALWAYS_NORMALIZE","_createElement","is","SIMPLE_NORMALIZE","$vnode","getTagNamespace","isReservedTag","parsePlatformTagName","pre","applyNS","registerDeepBindings","force","style","class","initRender","_vnode","parentVnode","_renderChildren","parentData","_parentListeners","ensureCtor","comp","base","toStringTag","factory","errorComp","resolved","owner","currentRenderingInstance","owners","loading","loadingComp","sync","timerLoading","timerTimeout","$on","forceRender","renderCompleted","$forceUpdate","reason","component","delay","isAsyncPlaceholder","getFirstComponentChild","initEvents","_events","_hasHookEvent","updateComponentListeners","remove$1","$off","_target","onceHandler","oldListeners","setActiveInstance","prevActiveInstance","activeInstance","initLifecycle","$children","$root","$refs","_watcher","_inactive","_directInactive","_isMounted","_isDestroyed","_isBeingDestroyed","mountComponent","el","hydrating","$el","callHook","updateComponent","_update","_render","Watcher","before","updateChildComponent","renderChildren","newScopedSlots","oldScopedSlots","hasDynamicScopedSlot","needsForceUpdate","$attrs","$listeners","propKeys","_propKeys","isInInactiveTree","activateChildComponent","direct","deactivateChildComponent","handlers","j","$emit","resetSchedulerState","activatedChildren","waiting","flushing","flushSchedulerQueue","currentFlushTimestamp","getNow","watcher","sort","activatedQueue","updatedQueue","callActivatedHooks","callUpdatedHooks","devtools","queueActivatedComponent","queueWatcher","sourceKey","sharedPropertyDefinition","initState","_watchers","opts","initProps","methods","initMethods","initData","_data","computed","initComputed","watch","nativeWatch","initWatch","propsOptions","getData","watchers","_computedWatchers","isSSR","userDef","computedWatcherOptions","defineComputed","shouldCache","createComputedGetter","createGetterInvoker","dirty","evaluate","createWatcher","expOrFn","$watch","initInternalComponent","constructor","vnodeComponentOptions","_componentTag","super","superOptions","modifiedOptions","resolveModifiedOptions","extendOptions","components","modified","latest","sealed","sealedOptions","Vue","_init","initUse","use","plugin","installedPlugins","_installedPlugins","unshift","install","initMixin$1","mixin","initExtend","Super","SuperId","cachedCtors","_Ctor","Sub","initProps$1","initComputed$1","ASSET_TYPES","Comp","initAssetRegisters","definition","getComponentName","matches","pattern","pruneCache","keepAliveInstance","filter","cachedNode","pruneCacheEntry","current","cached$$1","componentInstance","$destroy","genClassForVnode","parentNode","childNode","mergeClassData","renderClass","staticClass","dynamicClass","stringifyClass","stringifyArray","stringifyObject","stringified","isSVG","isUnknownElement","unknownElementCache","HTMLUnknownElement","HTMLElement","query","querySelector","createElement$1","tagName","multiple","createElementNS","namespace","namespaceMap","createTextNode","createComment","insertBefore","newNode","referenceNode","nextSibling","setTextContent","textContent","setStyleScope","scopeId","registerRef","isRemoval","refs","refInFor","sameVnode","sameInputType","typeA","typeB","isTextInputType","createKeyToOldIdx","beginIdx","endIdx","updateDirectives","oldVnode","oldDir","isCreate","emptyNode","isDestroy","oldDirs","normalizeDirectives$1","newDirs","dirsWithInsert","dirsWithPostpatch","oldValue","oldArg","arg","callHook$1","componentUpdated","inserted","callInsert","modifiers","emptyModifiers","getRawDirName","rawName","join","updateAttrs","inheritAttrs","oldAttrs","setAttr","isIE","isEdge","isXlink","removeAttributeNS","xlinkNS","getXlinkProp","isEnumeratedAttr","removeAttribute","baseSetAttr","isBooleanAttr","isFalsyAttrValue","convertEnumeratedValue","setAttributeNS","isIE9","__ieph","blocker","stopImmediatePropagation","removeEventListener","updateClass","oldData","cls","transitionClass","_transitionClasses","_prevClass","parseFilters","exp","pushFilter","filters","lastFilterIndex","trim","prev","expression","inSingle","inDouble","inTemplateString","inRegex","curly","square","paren","charAt","validDivisionCharRE","wrapFilter","baseWarn","msg","range","pluckModuleFunction","_","addProp","dynamic","rangeSetItem","plain","addAttr","dynamicAttrs","addRawAttr","attrsMap","attrsList","addDirective","isDynamicArg","prependModifierMarker","addHandler","important","warn","right","middle","events","native","nativeEvents","newHandler","getRawBindingAttr","rawAttrsMap","getBindingAttr","getStatic","dynamicValue","getAndRemoveAttr","staticValue","removeFromMap","getAndRemoveAttrByRegex","attr","end","genComponentModel","number","valueExpression","assignment","genAssignmentCode","parseModel","lastIndexOf","index$1","expressionPos","expressionEndPos","eof","chr","isStringStart","parseString","parseBracket","inBracket","stringQuote","_warn","warn$1","genSelect","genCheckboxModel","genRadioModel","genDefaultModel","valueBinding","trueValueBinding","falseValueBinding","selectedVal","code","lazy","needCompositionGuard","RANGE_TOKEN","normalizeEvents","CHECKBOX_RADIO_TOKEN","change","createOnceHandler$1","target$1","remove$2","add$1","useMicrotaskFix","attachedTimestamp","original","_wrapper","currentTarget","timeStamp","ownerDocument","supportsPassive","updateDOMListeners","updateDOMProps","oldProps","childNodes","_value","strCur","shouldUpdateValue","innerHTML","svgContainer","svg","firstChild","checkVal","composing","isNotInFocusAndDirty","isDirtyWithModifiers","notInFocus","activeElement","_vModifiers","normalizeStyleData","normalizeStyleBinding","staticStyle","bindingStyle","parseStyleText","getStyle","checkChild","styleData","updateStyle","oldStaticStyle","oldStyleBinding","normalizedStyle","oldStyle","newStyle","setProp","addClass","classList","whitespaceRE","getAttribute","removeClass","tar","replace","resolveTransition","css","autoCssTransition","nextFrame","raf","addTransitionClass","transitionClasses","removeTransitionClass","whenTransitionEnds","expectedType","getTransitionInfo","propCount","TRANSITION","transitionEndEvent","animationEndEvent","ended","onEnd","styles","getComputedStyle","transitionDelays","transitionProp","transitionDurations","transitionTimeout","getTimeout","animationDelays","animationProp","animationDurations","animationTimeout","ANIMATION","hasTransform","transformRE","delays","durations","toMs","Number","enter","toggleDisplay","_leaveCb","cancelled","transition","_enterCb","nodeType","enterClass","enterToClass","enterActiveClass","appearClass","appearToClass","appearActiveClass","beforeEnter","afterEnter","enterCancelled","beforeAppear","appear","afterAppear","appearCancelled","duration","transitionNode","isAppear","isRootInsert","startClass","activeClass","toClass","beforeEnterHook","enterHook","afterEnterHook","enterCancelledHook","explicitEnterDuration","expectsCSS","userWantsControl","getHookArgumentsLength","show","pendingNode","_pending","isValidDuration","leave","rm","performLeave","beforeLeave","leaveClass","leaveActiveClass","leaveToClass","explicitLeaveDuration","afterLeave","leaveCancelled","delayLeave","invokerFns","_enter","setSelected","actuallySetSelected","isMultiple","selected","option","getValue","selectedIndex","hasNoMatchingOption","onCompositionStart","onCompositionEnd","trigger","createEvent","initEvent","dispatchEvent","locateNode","getRealChild","compOptions","extractTransitionData","placeholder","h","rawChild","hasParentTransition","isSameChild","oldChild","callPendingCbs","_moveCb","recordPosition","newPos","getBoundingClientRect","applyTranslation","oldPos","pos","dx","left","dy","top","moved","transform","WebkitTransform","transitionDuration","parseText","delimiters","tagRE","buildRegex","defaultTagRE","tokenValue","tokens","rawTokens","exec","transformNode","classBinding","genData","transformNode$1","styleBinding","genData$1","decodeAttr","shouldDecodeNewlines","re","encodedAttrWithNewLines","encodedAttr","decodingMap","parseHTML","advance","substring","parseEndTag","lowerCasedTagName","stack","lowerCasedTag","lastTag","expectHTML","isUnaryTag$$1","isUnaryTag","no","canBeLeftOpenTag$$1","canBeLeftOpenTag","isPlainTextElement","endTagLength","stackedTag","reStackedTag","reCache","RegExp","rest$1","all","endTag","shouldIgnoreFirstNewline","chars","textEnd","comment","commentEnd","shouldKeepComment","conditionalComment","conditionalEnd","doctypeMatch","doctype","endTagMatch","curIndex","startTagMatch","startTagOpen","startTagClose","dynamicArgAttribute","attribute","unarySlash","isNonPhrasingTag","unary","shouldDecodeNewlinesForHref","rest","createASTElement","makeAttrsMap","parse","template","closeElement","element","trimEndingWhitespace","inVPre","processed","processElement","root","if","elseif","else","addIfCondition","block","currentParent","forbidden","processIfConditions","slotScope","slotTarget","platformIsPreTag","inPre","postTransforms","lastNode","warn$2","isPreTag","platformMustUseProp","platformGetTagNamespace","maybeComponent","transforms","preTransforms","preserveWhitespace","whitespaceOption","whitespace","comments","outputSourceRange","start$1","guardIESVGBug","isForbiddenTag","processPre","processRawAttrs","processFor","processIf","processOnce","end$1","isTextTag","decodeHTMLCached","lineBreakRE","whitespaceRE$1","processKey","processRef","processSlotContent","processSlotOutlet","processComponent","processAttrs","checkInFor","parseFor","inMatch","forAliasRE","for","alias","stripParensRE","iteratorMatch","forIteratorRE","iterator1","iterator2","findPrevElement","condition","ifConditions","slotTargetDynamic","slotBinding","slotRE","getSlotName","emptySlotScopeToken","slotBinding$1","ref$1","dynamic$1","slotContainer","dynamicArgRE","slotName","syncGen","isDynamic","dirRE","hasBindings","parseModifiers","modifierRE","bindRE","camel","onRE","argMatch","argRE","ieNSBug","ieNSPrefix","preTransformNode","typeBinding","ifCondition","ifConditionExtra","hasElse","elseIfCondition","branch0","cloneASTElement","branch1","branch2","optimize","isStaticKey","genStaticKeysCached","staticKeys","isPlatformReservedTag","markStatic$1","markStaticRoots","genStaticKeys$1","static","i$1","l$1","staticInFor","staticRoot","isBuiltInTag","isDirectChildOfTemplateFor","genHandlers","prefix","staticHandlers","dynamicHandlers","handlerCode","genHandler","isMethodPath","simplePathRE","isFunctionExpression","fnExpRE","isFunctionInvocation","fnInvokeRE","genModifierCode","modifierCode","genGuard","keyModifier","genKeyFilter","genFilterCode","keyVal","parseInt","keyCode","keyName","keyNames","wrapListeners","bind$1","wrapData","generate","ast","state","CodegenState","genElement","staticProcessed","genStatic","onceProcessed","genOnce","forProcessed","genFor","ifProcessed","genIf","genSlot","genComponent","genData$2","genChildren","originalPreState","onceId","altGen","altEmpty","genIfConditions","conditions","genTernaryExp","altHelper","genDirectives","dataGenFns","genProps","genScopedSlots","genInlineTemplate","needRuntime","hasRuntime","gen","inlineRenderFns","some","containsSlotChild","needsKey","generatedSlots","genScopedSlot","isLegacySyntax","reverseProxy","checkSkip","altGenElement","altGenNode","el$1","normalizationType$1","getNormalizationType","genNode","needsNormalization","genComment","genText","transformSpecialNewlines","bind$$1","componentName","staticProps","dynamicProps","createFunction","errors","createCompileToFunctionFn","compile","compiled","fnGenErrors","getShouldDecode","href","div","getOuterHTML","outerHTML","container","cloneNode","freeze","camelizeRE","toUpperCase","hyphenateRE","SSR_ATTR","LIFECYCLE_HOOKS","optionMergeStrategies","silent","productionTip","performance","warnHandler","ignoredElements","isReservedAttr","_lifecycleHooks","unicodeRegExp","hasProto","WXEnvironment","platform","weexPlatform","UA","navigator","userAgent","isIOS","isFF","_isServer","_Set","VUE_ENV","__VUE_DEVTOOLS_GLOBAL_HOOK__","Set","uid","subs","addSub","sub","removeSub","addDep","raw","prototypeAccessors","defineProperties","arrayProto","arrayMethods","method","observeArray","arrayKeys","getOwnPropertyNames","walk","items","isUsingMicroTask","MutationObserver","counter","observer","textNode","characterData","once$$1","init","keepAlive","mountedNode","prepatch","$mount","insert","destroy","now","uid$2","isRenderWatcher","deep","user","deps","newDeps","depIds","newDepIds","cleanupDeps","tmp","teardown","uid$3","_uid","_self","dataDef","propsDef","$set","$delete","immediate","hookRE","$once","cbs","prevEl","prevVnode","restoreActiveInstance","__patch__","__vue__","$nextTick","patternTypes","KeepAlive","include","exclude","created","destroyed","mounted","builtInComponents","configDef","util","defineReactive","delete","observable","ssrContext","emptyStyle","acceptValue","isValidContentEditableValue","math","isHTMLTag","nodeOps","baseModules","klass","cssText","listDelimiter","propertyDelimiter","cssVarRE","importantRE","setProperty","normalizedName","normalize","vendorNames","capName","hasTransition","ontransitionend","onwebkittransitionend","onanimationend","onwebkitanimationend","requestAnimationFrame","activate","platformModules","patch","backend","emptyNodeAt","createRmCb","childElm","removeNode","createElm","insertedVnodeQueue","parentElm","refElm","nested","ownerArray","setScope","createChildren","invokeCreateHooks","isReactivated","initComponent","reactivateComponent","pendingInsert","isPatchable","innerNode","ref$$1","ancestor","addVnodes","startIdx","invokeDestroyHook","removeVnodes","ch","removeAndInvokeRemoveHook","updateChildren","oldCh","newCh","removeOnly","oldKeyToIdx","idxInOld","vnodeToMove","oldStartIdx","newStartIdx","oldEndIdx","oldStartVnode","oldEndVnode","newEndIdx","newStartVnode","newEndVnode","canMove","patchVnode","findIdxInOld","hydrate","postpatch","invokeInsertHook","initial","hasChildNodes","childrenMatch","fullInvoke","isRenderedModule","isInitialPatch","isRealElement","hasAttribute","oldElm","patchable","i$2","vmodel","directive","_vOptions","prevOptions","curOptions","transition$$1","originalDisplay","__vOriginalDisplay","display","unbind","platformDirectives","transitionProps","mode","isNotTextNode","isVShowDirective","Transition","_leaving","oldRawChild","delayedLeave","moveClass","TransitionGroup","beforeMount","kept","prevChildren","rawChildren","transitionData","removed","c$1","updated","hasMove","_reflow","body","offsetHeight","propertyName","_hasMove","platformComponents","decoder","regexEscapeRE","open","klass$1","style$1","he","decode","ncname","qnameCapture","isIgnoreNewlineTag","model$1","modules$1","directives$1","baseOptions","reduce","esc","tab","space","up","down","stop","prevent","ctrl","alt","meta","baseDirectives","cloak","createCompiler","baseCompile","finalOptions","tips","tip","compileToFunctions","idToTemplate","mount"],"mappings":"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","file":"vendor.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// install a JSONP callback for chunk loading\n/******/ \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n/******/ \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n/******/ \t\t// add \"moreModules\" to the modules object,\n/******/ \t\t// then flag all \"chunkIds\" as loaded and fire callback\n/******/ \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n/******/ \t\tfor(;i < chunkIds.length; i++) {\n/******/ \t\t\tchunkId = chunkIds[i];\n/******/ \t\t\tif(installedChunks[chunkId]) {\n/******/ \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n/******/ \t\t\t}\n/******/ \t\t\tinstalledChunks[chunkId] = 0;\n/******/ \t\t}\n/******/ \t\tfor(moduleId in moreModules) {\n/******/ \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n/******/ \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n/******/ \t\twhile(resolves.length) {\n/******/ \t\t\tresolves.shift()();\n/******/ \t\t}\n/******/ \t\tif(executeModules) {\n/******/ \t\t\tfor(i=0; i < executeModules.length; i++) {\n/******/ \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t\treturn result;\n/******/ \t};\n/******/\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// objects to store loaded and loading chunks\n/******/ \tvar installedChunks = {\n/******/ \t\t1: 0\n/******/ \t};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/ \t// This file contains only the entry chunk.\n/******/ \t// The chunk loading function for additional chunks\n/******/ \t__webpack_require__.e = function requireEnsure(chunkId) {\n/******/ \t\tvar installedChunkData = installedChunks[chunkId];\n/******/ \t\tif(installedChunkData === 0) {\n/******/ \t\t\treturn new Promise(function(resolve) { resolve(); });\n/******/ \t\t}\n/******/\n/******/ \t\t// a Promise means \"currently loading\".\n/******/ \t\tif(installedChunkData) {\n/******/ \t\t\treturn installedChunkData[2];\n/******/ \t\t}\n/******/\n/******/ \t\t// setup Promise in chunk cache\n/******/ \t\tvar promise = new Promise(function(resolve, reject) {\n/******/ \t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n/******/ \t\t});\n/******/ \t\tinstalledChunkData[2] = promise;\n/******/\n/******/ \t\t// start chunk loading\n/******/ \t\tvar head = document.getElementsByTagName('head')[0];\n/******/ \t\tvar script = document.createElement('script');\n/******/ \t\tscript.type = 'text/javascript';\n/******/ \t\tscript.charset = 'utf-8';\n/******/ \t\tscript.async = true;\n/******/ \t\tscript.timeout = 120000;\n/******/\n/******/ \t\tif (__webpack_require__.nc) {\n/******/ \t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n/******/ \t\t}\n/******/ \t\tscript.src = __webpack_require__.p + \"\" + chunkId + \".js\";\n/******/ \t\tvar timeout = setTimeout(onScriptComplete, 120000);\n/******/ \t\tscript.onerror = script.onload = onScriptComplete;\n/******/ \t\tfunction onScriptComplete() {\n/******/ \t\t\t// avoid mem leaks in IE.\n/******/ \t\t\tscript.onerror = script.onload = null;\n/******/ \t\t\tclearTimeout(timeout);\n/******/ \t\t\tvar chunk = installedChunks[chunkId];\n/******/ \t\t\tif(chunk !== 0) {\n/******/ \t\t\t\tif(chunk) {\n/******/ \t\t\t\t\tchunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));\n/******/ \t\t\t\t}\n/******/ \t\t\t\tinstalledChunks[chunkId] = undefined;\n/******/ \t\t\t}\n/******/ \t\t};\n/******/ \t\thead.appendChild(script);\n/******/\n/******/ \t\treturn promise;\n/******/ \t};\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// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// on error function for async loading\n/******/ \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 293);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 273:\n/***/ (function(module, exports) {\n\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n/***/ }),\n\n/***/ 274:\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {\n    \"use strict\";\n\n    if (global.setImmediate) {\n        return;\n    }\n\n    var nextHandle = 1; // Spec says greater than zero\n    var tasksByHandle = {};\n    var currentlyRunningATask = false;\n    var doc = global.document;\n    var registerImmediate;\n\n    function setImmediate(callback) {\n      // Callback can either be a function or a string\n      if (typeof callback !== \"function\") {\n        callback = new Function(\"\" + callback);\n      }\n      // Copy function arguments\n      var args = new Array(arguments.length - 1);\n      for (var i = 0; i < args.length; i++) {\n          args[i] = arguments[i + 1];\n      }\n      // Store and register the task\n      var task = { callback: callback, args: args };\n      tasksByHandle[nextHandle] = task;\n      registerImmediate(nextHandle);\n      return nextHandle++;\n    }\n\n    function clearImmediate(handle) {\n        delete tasksByHandle[handle];\n    }\n\n    function run(task) {\n        var callback = task.callback;\n        var args = task.args;\n        switch (args.length) {\n        case 0:\n            callback();\n            break;\n        case 1:\n            callback(args[0]);\n            break;\n        case 2:\n            callback(args[0], args[1]);\n            break;\n        case 3:\n            callback(args[0], args[1], args[2]);\n            break;\n        default:\n            callback.apply(undefined, args);\n            break;\n        }\n    }\n\n    function runIfPresent(handle) {\n        // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n        // So if we're currently running a task, we'll need to delay this invocation.\n        if (currentlyRunningATask) {\n            // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n            // \"too much recursion\" error.\n            setTimeout(runIfPresent, 0, handle);\n        } else {\n            var task = tasksByHandle[handle];\n            if (task) {\n                currentlyRunningATask = true;\n                try {\n                    run(task);\n                } finally {\n                    clearImmediate(handle);\n                    currentlyRunningATask = false;\n                }\n            }\n        }\n    }\n\n    function installNextTickImplementation() {\n        registerImmediate = function(handle) {\n            process.nextTick(function () { runIfPresent(handle); });\n        };\n    }\n\n    function canUsePostMessage() {\n        // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n        // where `global.postMessage` means something completely different and can't be used for this purpose.\n        if (global.postMessage && !global.importScripts) {\n            var postMessageIsAsynchronous = true;\n            var oldOnMessage = global.onmessage;\n            global.onmessage = function() {\n                postMessageIsAsynchronous = false;\n            };\n            global.postMessage(\"\", \"*\");\n            global.onmessage = oldOnMessage;\n            return postMessageIsAsynchronous;\n        }\n    }\n\n    function installPostMessageImplementation() {\n        // Installs an event handler on `global` for the `message` event: see\n        // * https://developer.mozilla.org/en/DOM/window.postMessage\n        // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n        var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n        var onGlobalMessage = function(event) {\n            if (event.source === global &&\n                typeof event.data === \"string\" &&\n                event.data.indexOf(messagePrefix) === 0) {\n                runIfPresent(+event.data.slice(messagePrefix.length));\n            }\n        };\n\n        if (global.addEventListener) {\n            global.addEventListener(\"message\", onGlobalMessage, false);\n        } else {\n            global.attachEvent(\"onmessage\", onGlobalMessage);\n        }\n\n        registerImmediate = function(handle) {\n            global.postMessage(messagePrefix + handle, \"*\");\n        };\n    }\n\n    function installMessageChannelImplementation() {\n        var channel = new MessageChannel();\n        channel.port1.onmessage = function(event) {\n            var handle = event.data;\n            runIfPresent(handle);\n        };\n\n        registerImmediate = function(handle) {\n            channel.port2.postMessage(handle);\n        };\n    }\n\n    function installReadyStateChangeImplementation() {\n        var html = doc.documentElement;\n        registerImmediate = function(handle) {\n            // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n            // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n            var script = doc.createElement(\"script\");\n            script.onreadystatechange = function () {\n                runIfPresent(handle);\n                script.onreadystatechange = null;\n                html.removeChild(script);\n                script = null;\n            };\n            html.appendChild(script);\n        };\n    }\n\n    function installSetTimeoutImplementation() {\n        registerImmediate = function(handle) {\n            setTimeout(runIfPresent, 0, handle);\n        };\n    }\n\n    // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n    var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n    attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n    // Don't get fooled by e.g. browserify environments.\n    if ({}.toString.call(global.process) === \"[object process]\") {\n        // For Node.js before 0.9\n        installNextTickImplementation();\n\n    } else if (canUsePostMessage()) {\n        // For non-IE10 modern browsers\n        installPostMessageImplementation();\n\n    } else if (global.MessageChannel) {\n        // For web workers, where supported\n        installMessageChannelImplementation();\n\n    } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n        // For IE 6–8\n        installReadyStateChangeImplementation();\n\n    } else {\n        // For older browsers\n        installSetTimeoutImplementation();\n    }\n\n    attachTo.setImmediate = setImmediate;\n    attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(47), __webpack_require__(273)))\n\n/***/ }),\n\n/***/ 275:\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !== \"undefined\" && global) ||\n            (typeof self !== \"undefined\" && self) ||\n            window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n  return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n  return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n  if (timeout) {\n    timeout.close();\n  }\n};\n\nfunction Timeout(id, clearFn) {\n  this._id = id;\n  this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n  this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n  clearTimeout(item._idleTimeoutId);\n\n  var msecs = item._idleTimeout;\n  if (msecs >= 0) {\n    item._idleTimeoutId = setTimeout(function onTimeout() {\n      if (item._onTimeout)\n        item._onTimeout();\n    }, msecs);\n  }\n};\n\n// setimmediate attaches itself to the global object\n__webpack_require__(274);\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto.  Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n                       (typeof global !== \"undefined\" && global.setImmediate) ||\n                       (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n                         (typeof global !== \"undefined\" && global.clearImmediate) ||\n                         (this && this.clearImmediate);\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(47)))\n\n/***/ }),\n\n/***/ 293:\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(48);\n\n\n/***/ }),\n\n/***/ 47:\n/***/ (function(module, exports) {\n\nvar g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n/***/ }),\n\n/***/ 48:\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* WEBPACK VAR INJECTION */(function(global, setImmediate) {/*!\n * Vue.js v2.6.10\n * (c) 2014-2019 Evan You\n * Released under the MIT License.\n */\n/*  */\n\nvar emptyObject = Object.freeze({});\n\n// These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\nfunction isUndef (v) {\n  return v === undefined || v === null\n}\n\nfunction isDef (v) {\n  return v !== undefined && v !== null\n}\n\nfunction isTrue (v) {\n  return v === true\n}\n\nfunction isFalse (v) {\n  return v === false\n}\n\n/**\n * Check if value is primitive.\n */\nfunction isPrimitive (value) {\n  return (\n    typeof value === 'string' ||\n    typeof value === 'number' ||\n    // $flow-disable-line\n    typeof value === 'symbol' ||\n    typeof value === 'boolean'\n  )\n}\n\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject (obj) {\n  return obj !== null && typeof obj === 'object'\n}\n\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\nvar _toString = Object.prototype.toString;\n\nfunction toRawType (value) {\n  return _toString.call(value).slice(8, -1)\n}\n\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject (obj) {\n  return _toString.call(obj) === '[object Object]'\n}\n\nfunction isRegExp (v) {\n  return _toString.call(v) === '[object RegExp]'\n}\n\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex (val) {\n  var n = parseFloat(String(val));\n  return n >= 0 && Math.floor(n) === n && isFinite(val)\n}\n\nfunction isPromise (val) {\n  return (\n    isDef(val) &&\n    typeof val.then === 'function' &&\n    typeof val.catch === 'function'\n  )\n}\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString (val) {\n  return val == null\n    ? ''\n    : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n      ? JSON.stringify(val, null, 2)\n      : String(val)\n}\n\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber (val) {\n  var n = parseFloat(val);\n  return isNaN(n) ? val : n\n}\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap (\n  str,\n  expectsLowerCase\n) {\n  var map = Object.create(null);\n  var list = str.split(',');\n  for (var i = 0; i < list.length; i++) {\n    map[list[i]] = true;\n  }\n  return expectsLowerCase\n    ? function (val) { return map[val.toLowerCase()]; }\n    : function (val) { return map[val]; }\n}\n\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n\n/**\n * Check if an attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n\n/**\n * Remove an item from an array.\n */\nfunction remove (arr, item) {\n  if (arr.length) {\n    var index = arr.indexOf(item);\n    if (index > -1) {\n      return arr.splice(index, 1)\n    }\n  }\n}\n\n/**\n * Check whether an object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n  return hasOwnProperty.call(obj, key)\n}\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n  var cache = Object.create(null);\n  return (function cachedFn (str) {\n    var hit = cache[str];\n    return hit || (cache[str] = fn(str))\n  })\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n  return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n});\n\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n  return str.charAt(0).toUpperCase() + str.slice(1)\n});\n\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n  return str.replace(hyphenateRE, '-$1').toLowerCase()\n});\n\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n\n/* istanbul ignore next */\nfunction polyfillBind (fn, ctx) {\n  function boundFn (a) {\n    var l = arguments.length;\n    return l\n      ? l > 1\n        ? fn.apply(ctx, arguments)\n        : fn.call(ctx, a)\n      : fn.call(ctx)\n  }\n\n  boundFn._length = fn.length;\n  return boundFn\n}\n\nfunction nativeBind (fn, ctx) {\n  return fn.bind(ctx)\n}\n\nvar bind = Function.prototype.bind\n  ? nativeBind\n  : polyfillBind;\n\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray (list, start) {\n  start = start || 0;\n  var i = list.length - start;\n  var ret = new Array(i);\n  while (i--) {\n    ret[i] = list[i + start];\n  }\n  return ret\n}\n\n/**\n * Mix properties into target object.\n */\nfunction extend (to, _from) {\n  for (var key in _from) {\n    to[key] = _from[key];\n  }\n  return to\n}\n\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject (arr) {\n  var res = {};\n  for (var i = 0; i < arr.length; i++) {\n    if (arr[i]) {\n      extend(res, arr[i]);\n    }\n  }\n  return res\n}\n\n/* eslint-disable no-unused-vars */\n\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\nfunction noop (a, b, c) {}\n\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n\n/* eslint-enable no-unused-vars */\n\n/**\n * Return the same value.\n */\nvar identity = function (_) { return _; };\n\n/**\n * Generate a string containing static keys from compiler modules.\n */\nfunction genStaticKeys (modules) {\n  return modules.reduce(function (keys, m) {\n    return keys.concat(m.staticKeys || [])\n  }, []).join(',')\n}\n\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual (a, b) {\n  if (a === b) { return true }\n  var isObjectA = isObject(a);\n  var isObjectB = isObject(b);\n  if (isObjectA && isObjectB) {\n    try {\n      var isArrayA = Array.isArray(a);\n      var isArrayB = Array.isArray(b);\n      if (isArrayA && isArrayB) {\n        return a.length === b.length && a.every(function (e, i) {\n          return looseEqual(e, b[i])\n        })\n      } else if (a instanceof Date && b instanceof Date) {\n        return a.getTime() === b.getTime()\n      } else if (!isArrayA && !isArrayB) {\n        var keysA = Object.keys(a);\n        var keysB = Object.keys(b);\n        return keysA.length === keysB.length && keysA.every(function (key) {\n          return looseEqual(a[key], b[key])\n        })\n      } else {\n        /* istanbul ignore next */\n        return false\n      }\n    } catch (e) {\n      /* istanbul ignore next */\n      return false\n    }\n  } else if (!isObjectA && !isObjectB) {\n    return String(a) === String(b)\n  } else {\n    return false\n  }\n}\n\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\nfunction looseIndexOf (arr, val) {\n  for (var i = 0; i < arr.length; i++) {\n    if (looseEqual(arr[i], val)) { return i }\n  }\n  return -1\n}\n\n/**\n * Ensure a function is called only once.\n */\nfunction once (fn) {\n  var called = false;\n  return function () {\n    if (!called) {\n      called = true;\n      fn.apply(this, arguments);\n    }\n  }\n}\n\nvar SSR_ATTR = 'data-server-rendered';\n\nvar ASSET_TYPES = [\n  'component',\n  'directive',\n  'filter'\n];\n\nvar LIFECYCLE_HOOKS = [\n  'beforeCreate',\n  'created',\n  'beforeMount',\n  'mounted',\n  'beforeUpdate',\n  'updated',\n  'beforeDestroy',\n  'destroyed',\n  'activated',\n  'deactivated',\n  'errorCaptured',\n  'serverPrefetch'\n];\n\n/*  */\n\n\n\nvar config = ({\n  /**\n   * Option merge strategies (used in core/util/options)\n   */\n  // $flow-disable-line\n  optionMergeStrategies: Object.create(null),\n\n  /**\n   * Whether to suppress warnings.\n   */\n  silent: false,\n\n  /**\n   * Show production mode tip message on boot?\n   */\n  productionTip: \"production\" !== 'production',\n\n  /**\n   * Whether to enable devtools\n   */\n  devtools: \"production\" !== 'production',\n\n  /**\n   * Whether to record perf\n   */\n  performance: false,\n\n  /**\n   * Error handler for watcher errors\n   */\n  errorHandler: null,\n\n  /**\n   * Warn handler for watcher warns\n   */\n  warnHandler: null,\n\n  /**\n   * Ignore certain custom elements\n   */\n  ignoredElements: [],\n\n  /**\n   * Custom user key aliases for v-on\n   */\n  // $flow-disable-line\n  keyCodes: Object.create(null),\n\n  /**\n   * Check if a tag is reserved so that it cannot be registered as a\n   * component. This is platform-dependent and may be overwritten.\n   */\n  isReservedTag: no,\n\n  /**\n   * Check if an attribute is reserved so that it cannot be used as a component\n   * prop. This is platform-dependent and may be overwritten.\n   */\n  isReservedAttr: no,\n\n  /**\n   * Check if a tag is an unknown element.\n   * Platform-dependent.\n   */\n  isUnknownElement: no,\n\n  /**\n   * Get the namespace of an element\n   */\n  getTagNamespace: noop,\n\n  /**\n   * Parse the real tag name for the specific platform.\n   */\n  parsePlatformTagName: identity,\n\n  /**\n   * Check if an attribute must be bound using property, e.g. value\n   * Platform-dependent.\n   */\n  mustUseProp: no,\n\n  /**\n   * Perform updates asynchronously. Intended to be used by Vue Test Utils\n   * This will significantly reduce performance if set to false.\n   */\n  async: true,\n\n  /**\n   * Exposed for legacy reasons\n   */\n  _lifecycleHooks: LIFECYCLE_HOOKS\n});\n\n/*  */\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved (str) {\n  var c = (str + '').charCodeAt(0);\n  return c === 0x24 || c === 0x5F\n}\n\n/**\n * Define a property.\n */\nfunction def (obj, key, val, enumerable) {\n  Object.defineProperty(obj, key, {\n    value: val,\n    enumerable: !!enumerable,\n    writable: true,\n    configurable: true\n  });\n}\n\n/**\n * Parse simple path.\n */\nvar bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\nfunction parsePath (path) {\n  if (bailRE.test(path)) {\n    return\n  }\n  var segments = path.split('.');\n  return function (obj) {\n    for (var i = 0; i < segments.length; i++) {\n      if (!obj) { return }\n      obj = obj[segments[i]];\n    }\n    return obj\n  }\n}\n\n/*  */\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\nvar weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nvar isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\nvar isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\nvar isPhantomJS = UA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n\n// Firefox has a \"watch\" function on Object.prototype...\nvar nativeWatch = ({}).watch;\n\nvar supportsPassive = false;\nif (inBrowser) {\n  try {\n    var opts = {};\n    Object.defineProperty(opts, 'passive', ({\n      get: function get () {\n        /* istanbul ignore next */\n        supportsPassive = true;\n      }\n    })); // https://github.com/facebook/flow/issues/285\n    window.addEventListener('test-passive', null, opts);\n  } catch (e) {}\n}\n\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n  if (_isServer === undefined) {\n    /* istanbul ignore if */\n    if (!inBrowser && !inWeex && typeof global !== 'undefined') {\n      // detect presence of vue-server-renderer and avoid\n      // Webpack shimming the process\n      _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\n    } else {\n      _isServer = false;\n    }\n  }\n  return _isServer\n};\n\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n/* istanbul ignore next */\nfunction isNative (Ctor) {\n  return typeof Ctor === 'function' && /native code/.test(Ctor.toString())\n}\n\nvar hasSymbol =\n  typeof Symbol !== 'undefined' && isNative(Symbol) &&\n  typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n\nvar _Set;\n/* istanbul ignore if */ // $flow-disable-line\nif (typeof Set !== 'undefined' && isNative(Set)) {\n  // use native Set when available.\n  _Set = Set;\n} else {\n  // a non-standard Set polyfill that only works with primitive keys.\n  _Set = /*@__PURE__*/(function () {\n    function Set () {\n      this.set = Object.create(null);\n    }\n    Set.prototype.has = function has (key) {\n      return this.set[key] === true\n    };\n    Set.prototype.add = function add (key) {\n      this.set[key] = true;\n    };\n    Set.prototype.clear = function clear () {\n      this.set = Object.create(null);\n    };\n\n    return Set;\n  }());\n}\n\n/*  */\n\nvar warn = noop;\nvar tip = noop;\nvar generateComponentTrace = (noop); // work around flow check\nvar formatComponentName = (noop);\n\nif (false) {\n  var hasConsole = typeof console !== 'undefined';\n  var classifyRE = /(?:^|[-_])(\\w)/g;\n  var classify = function (str) { return str\n    .replace(classifyRE, function (c) { return c.toUpperCase(); })\n    .replace(/[-_]/g, ''); };\n\n  warn = function (msg, vm) {\n    var trace = vm ? generateComponentTrace(vm) : '';\n\n    if (config.warnHandler) {\n      config.warnHandler.call(null, msg, vm, trace);\n    } else if (hasConsole && (!config.silent)) {\n      console.error((\"[Vue warn]: \" + msg + trace));\n    }\n  };\n\n  tip = function (msg, vm) {\n    if (hasConsole && (!config.silent)) {\n      console.warn(\"[Vue tip]: \" + msg + (\n        vm ? generateComponentTrace(vm) : ''\n      ));\n    }\n  };\n\n  formatComponentName = function (vm, includeFile) {\n    if (vm.$root === vm) {\n      return '<Root>'\n    }\n    var options = typeof vm === 'function' && vm.cid != null\n      ? vm.options\n      : vm._isVue\n        ? vm.$options || vm.constructor.options\n        : vm;\n    var name = options.name || options._componentTag;\n    var file = options.__file;\n    if (!name && file) {\n      var match = file.match(/([^/\\\\]+)\\.vue$/);\n      name = match && match[1];\n    }\n\n    return (\n      (name ? (\"<\" + (classify(name)) + \">\") : \"<Anonymous>\") +\n      (file && includeFile !== false ? (\" at \" + file) : '')\n    )\n  };\n\n  var repeat = function (str, n) {\n    var res = '';\n    while (n) {\n      if (n % 2 === 1) { res += str; }\n      if (n > 1) { str += str; }\n      n >>= 1;\n    }\n    return res\n  };\n\n  generateComponentTrace = function (vm) {\n    if (vm._isVue && vm.$parent) {\n      var tree = [];\n      var currentRecursiveSequence = 0;\n      while (vm) {\n        if (tree.length > 0) {\n          var last = tree[tree.length - 1];\n          if (last.constructor === vm.constructor) {\n            currentRecursiveSequence++;\n            vm = vm.$parent;\n            continue\n          } else if (currentRecursiveSequence > 0) {\n            tree[tree.length - 1] = [last, currentRecursiveSequence];\n            currentRecursiveSequence = 0;\n          }\n        }\n        tree.push(vm);\n        vm = vm.$parent;\n      }\n      return '\\n\\nfound in\\n\\n' + tree\n        .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n            ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n            : formatComponentName(vm))); })\n        .join('\\n')\n    } else {\n      return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n    }\n  };\n}\n\n/*  */\n\nvar uid = 0;\n\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\nvar Dep = function Dep () {\n  this.id = uid++;\n  this.subs = [];\n};\n\nDep.prototype.addSub = function addSub (sub) {\n  this.subs.push(sub);\n};\n\nDep.prototype.removeSub = function removeSub (sub) {\n  remove(this.subs, sub);\n};\n\nDep.prototype.depend = function depend () {\n  if (Dep.target) {\n    Dep.target.addDep(this);\n  }\n};\n\nDep.prototype.notify = function notify () {\n  // stabilize the subscriber list first\n  var subs = this.subs.slice();\n  if (false) {\n    // subs aren't sorted in scheduler if not running async\n    // we need to sort them now to make sure they fire in correct\n    // order\n    subs.sort(function (a, b) { return a.id - b.id; });\n  }\n  for (var i = 0, l = subs.length; i < l; i++) {\n    subs[i].update();\n  }\n};\n\n// The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\nDep.target = null;\nvar targetStack = [];\n\nfunction pushTarget (target) {\n  targetStack.push(target);\n  Dep.target = target;\n}\n\nfunction popTarget () {\n  targetStack.pop();\n  Dep.target = targetStack[targetStack.length - 1];\n}\n\n/*  */\n\nvar VNode = function VNode (\n  tag,\n  data,\n  children,\n  text,\n  elm,\n  context,\n  componentOptions,\n  asyncFactory\n) {\n  this.tag = tag;\n  this.data = data;\n  this.children = children;\n  this.text = text;\n  this.elm = elm;\n  this.ns = undefined;\n  this.context = context;\n  this.fnContext = undefined;\n  this.fnOptions = undefined;\n  this.fnScopeId = undefined;\n  this.key = data && data.key;\n  this.componentOptions = componentOptions;\n  this.componentInstance = undefined;\n  this.parent = undefined;\n  this.raw = false;\n  this.isStatic = false;\n  this.isRootInsert = true;\n  this.isComment = false;\n  this.isCloned = false;\n  this.isOnce = false;\n  this.asyncFactory = asyncFactory;\n  this.asyncMeta = undefined;\n  this.isAsyncPlaceholder = false;\n};\n\nvar prototypeAccessors = { child: { configurable: true } };\n\n// DEPRECATED: alias for componentInstance for backwards compat.\n/* istanbul ignore next */\nprototypeAccessors.child.get = function () {\n  return this.componentInstance\n};\n\nObject.defineProperties( VNode.prototype, prototypeAccessors );\n\nvar createEmptyVNode = function (text) {\n  if ( text === void 0 ) text = '';\n\n  var node = new VNode();\n  node.text = text;\n  node.isComment = true;\n  return node\n};\n\nfunction createTextVNode (val) {\n  return new VNode(undefined, undefined, undefined, String(val))\n}\n\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode (vnode) {\n  var cloned = new VNode(\n    vnode.tag,\n    vnode.data,\n    // #7975\n    // clone children array to avoid mutating original in case of cloning\n    // a child.\n    vnode.children && vnode.children.slice(),\n    vnode.text,\n    vnode.elm,\n    vnode.context,\n    vnode.componentOptions,\n    vnode.asyncFactory\n  );\n  cloned.ns = vnode.ns;\n  cloned.isStatic = vnode.isStatic;\n  cloned.key = vnode.key;\n  cloned.isComment = vnode.isComment;\n  cloned.fnContext = vnode.fnContext;\n  cloned.fnOptions = vnode.fnOptions;\n  cloned.fnScopeId = vnode.fnScopeId;\n  cloned.asyncMeta = vnode.asyncMeta;\n  cloned.isCloned = true;\n  return cloned\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\n\nvar methodsToPatch = [\n  'push',\n  'pop',\n  'shift',\n  'unshift',\n  'splice',\n  'sort',\n  'reverse'\n];\n\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n  // cache original method\n  var original = arrayProto[method];\n  def(arrayMethods, method, function mutator () {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    var result = original.apply(this, args);\n    var ob = this.__ob__;\n    var inserted;\n    switch (method) {\n      case 'push':\n      case 'unshift':\n        inserted = args;\n        break\n      case 'splice':\n        inserted = args.slice(2);\n        break\n    }\n    if (inserted) { ob.observeArray(inserted); }\n    // notify change\n    ob.dep.notify();\n    return result\n  });\n});\n\n/*  */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\n\nfunction toggleObserving (value) {\n  shouldObserve = value;\n}\n\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = function Observer (value) {\n  this.value = value;\n  this.dep = new Dep();\n  this.vmCount = 0;\n  def(value, '__ob__', this);\n  if (Array.isArray(value)) {\n    if (hasProto) {\n      protoAugment(value, arrayMethods);\n    } else {\n      copyAugment(value, arrayMethods, arrayKeys);\n    }\n    this.observeArray(value);\n  } else {\n    this.walk(value);\n  }\n};\n\n/**\n * Walk through all properties and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\nObserver.prototype.walk = function walk (obj) {\n  var keys = Object.keys(obj);\n  for (var i = 0; i < keys.length; i++) {\n    defineReactive$$1(obj, keys[i]);\n  }\n};\n\n/**\n * Observe a list of Array items.\n */\nObserver.prototype.observeArray = function observeArray (items) {\n  for (var i = 0, l = items.length; i < l; i++) {\n    observe(items[i]);\n  }\n};\n\n// helpers\n\n/**\n * Augment a target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src) {\n  /* eslint-disable no-proto */\n  target.__proto__ = src;\n  /* eslint-enable no-proto */\n}\n\n/**\n * Augment a target Object or Array by defining\n * hidden properties.\n */\n/* istanbul ignore next */\nfunction copyAugment (target, src, keys) {\n  for (var i = 0, l = keys.length; i < l; i++) {\n    var key = keys[i];\n    def(target, key, src[key]);\n  }\n}\n\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe (value, asRootData) {\n  if (!isObject(value) || value instanceof VNode) {\n    return\n  }\n  var ob;\n  if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n    ob = value.__ob__;\n  } else if (\n    shouldObserve &&\n    !isServerRendering() &&\n    (Array.isArray(value) || isPlainObject(value)) &&\n    Object.isExtensible(value) &&\n    !value._isVue\n  ) {\n    ob = new Observer(value);\n  }\n  if (asRootData && ob) {\n    ob.vmCount++;\n  }\n  return ob\n}\n\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive$$1 (\n  obj,\n  key,\n  val,\n  customSetter,\n  shallow\n) {\n  var dep = new Dep();\n\n  var property = Object.getOwnPropertyDescriptor(obj, key);\n  if (property && property.configurable === false) {\n    return\n  }\n\n  // cater for pre-defined getter/setters\n  var getter = property && property.get;\n  var setter = property && property.set;\n  if ((!getter || setter) && arguments.length === 2) {\n    val = obj[key];\n  }\n\n  var childOb = !shallow && observe(val);\n  Object.defineProperty(obj, key, {\n    enumerable: true,\n    configurable: true,\n    get: function reactiveGetter () {\n      var value = getter ? getter.call(obj) : val;\n      if (Dep.target) {\n        dep.depend();\n        if (childOb) {\n          childOb.dep.depend();\n          if (Array.isArray(value)) {\n            dependArray(value);\n          }\n        }\n      }\n      return value\n    },\n    set: function reactiveSetter (newVal) {\n      var value = getter ? getter.call(obj) : val;\n      /* eslint-disable no-self-compare */\n      if (newVal === value || (newVal !== newVal && value !== value)) {\n        return\n      }\n      /* eslint-enable no-self-compare */\n      if (false) {\n        customSetter();\n      }\n      // #7981: for accessor properties without setter\n      if (getter && !setter) { return }\n      if (setter) {\n        setter.call(obj, newVal);\n      } else {\n        val = newVal;\n      }\n      childOb = !shallow && observe(newVal);\n      dep.notify();\n    }\n  });\n}\n\n/**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\nfunction set (target, key, val) {\n  if (false\n  ) {\n    warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\n  }\n  if (Array.isArray(target) && isValidArrayIndex(key)) {\n    target.length = Math.max(target.length, key);\n    target.splice(key, 1, val);\n    return val\n  }\n  if (key in target && !(key in Object.prototype)) {\n    target[key] = val;\n    return val\n  }\n  var ob = (target).__ob__;\n  if (target._isVue || (ob && ob.vmCount)) {\n    \"production\" !== 'production' && warn(\n      'Avoid adding reactive properties to a Vue instance or its root $data ' +\n      'at runtime - declare it upfront in the data option.'\n    );\n    return val\n  }\n  if (!ob) {\n    target[key] = val;\n    return val\n  }\n  defineReactive$$1(ob.value, key, val);\n  ob.dep.notify();\n  return val\n}\n\n/**\n * Delete a property and trigger change if necessary.\n */\nfunction del (target, key) {\n  if (false\n  ) {\n    warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\n  }\n  if (Array.isArray(target) && isValidArrayIndex(key)) {\n    target.splice(key, 1);\n    return\n  }\n  var ob = (target).__ob__;\n  if (target._isVue || (ob && ob.vmCount)) {\n    \"production\" !== 'production' && warn(\n      'Avoid deleting properties on a Vue instance or its root $data ' +\n      '- just set it to null.'\n    );\n    return\n  }\n  if (!hasOwn(target, key)) {\n    return\n  }\n  delete target[key];\n  if (!ob) {\n    return\n  }\n  ob.dep.notify();\n}\n\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray (value) {\n  for (var e = (void 0), i = 0, l = value.length; i < l; i++) {\n    e = value[i];\n    e && e.__ob__ && e.__ob__.dep.depend();\n    if (Array.isArray(e)) {\n      dependArray(e);\n    }\n  }\n}\n\n/*  */\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n\n/**\n * Options with restrictions\n */\nif (false) {\n  strats.el = strats.propsData = function (parent, child, vm, key) {\n    if (!vm) {\n      warn(\n        \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n        'creation with the `new` keyword.'\n      );\n    }\n    return defaultStrat(parent, child)\n  };\n}\n\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData (to, from) {\n  if (!from) { return to }\n  var key, toVal, fromVal;\n\n  var keys = hasSymbol\n    ? Reflect.ownKeys(from)\n    : Object.keys(from);\n\n  for (var i = 0; i < keys.length; i++) {\n    key = keys[i];\n    // in case the object is already observed...\n    if (key === '__ob__') { continue }\n    toVal = to[key];\n    fromVal = from[key];\n    if (!hasOwn(to, key)) {\n      set(to, key, fromVal);\n    } else if (\n      toVal !== fromVal &&\n      isPlainObject(toVal) &&\n      isPlainObject(fromVal)\n    ) {\n      mergeData(toVal, fromVal);\n    }\n  }\n  return to\n}\n\n/**\n * Data\n */\nfunction mergeDataOrFn (\n  parentVal,\n  childVal,\n  vm\n) {\n  if (!vm) {\n    // in a Vue.extend merge, both should be functions\n    if (!childVal) {\n      return parentVal\n    }\n    if (!parentVal) {\n      return childVal\n    }\n    // when parentVal & childVal are both present,\n    // we need to return a function that returns the\n    // merged result of both functions... no need to\n    // check if parentVal is a function here because\n    // it has to be a function to pass previous merges.\n    return function mergedDataFn () {\n      return mergeData(\n        typeof childVal === 'function' ? childVal.call(this, this) : childVal,\n        typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n      )\n    }\n  } else {\n    return function mergedInstanceDataFn () {\n      // instance merge\n      var instanceData = typeof childVal === 'function'\n        ? childVal.call(vm, vm)\n        : childVal;\n      var defaultData = typeof parentVal === 'function'\n        ? parentVal.call(vm, vm)\n        : parentVal;\n      if (instanceData) {\n        return mergeData(instanceData, defaultData)\n      } else {\n        return defaultData\n      }\n    }\n  }\n}\n\nstrats.data = function (\n  parentVal,\n  childVal,\n  vm\n) {\n  if (!vm) {\n    if (childVal && typeof childVal !== 'function') {\n      \"production\" !== 'production' && warn(\n        'The \"data\" option should be a function ' +\n        'that returns a per-instance value in component ' +\n        'definitions.',\n        vm\n      );\n\n      return parentVal\n    }\n    return mergeDataOrFn(parentVal, childVal)\n  }\n\n  return mergeDataOrFn(parentVal, childVal, vm)\n};\n\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeHook (\n  parentVal,\n  childVal\n) {\n  var res = childVal\n    ? parentVal\n      ? parentVal.concat(childVal)\n      : Array.isArray(childVal)\n        ? childVal\n        : [childVal]\n    : parentVal;\n  return res\n    ? dedupeHooks(res)\n    : res\n}\n\nfunction dedupeHooks (hooks) {\n  var res = [];\n  for (var i = 0; i < hooks.length; i++) {\n    if (res.indexOf(hooks[i]) === -1) {\n      res.push(hooks[i]);\n    }\n  }\n  return res\n}\n\nLIFECYCLE_HOOKS.forEach(function (hook) {\n  strats[hook] = mergeHook;\n});\n\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets (\n  parentVal,\n  childVal,\n  vm,\n  key\n) {\n  var res = Object.create(parentVal || null);\n  if (childVal) {\n    \"production\" !== 'production' && assertObjectType(key, childVal, vm);\n    return extend(res, childVal)\n  } else {\n    return res\n  }\n}\n\nASSET_TYPES.forEach(function (type) {\n  strats[type + 's'] = mergeAssets;\n});\n\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (\n  parentVal,\n  childVal,\n  vm,\n  key\n) {\n  // work around Firefox's Object.prototype.watch...\n  if (parentVal === nativeWatch) { parentVal = undefined; }\n  if (childVal === nativeWatch) { childVal = undefined; }\n  /* istanbul ignore if */\n  if (!childVal) { return Object.create(parentVal || null) }\n  if (false) {\n    assertObjectType(key, childVal, vm);\n  }\n  if (!parentVal) { return childVal }\n  var ret = {};\n  extend(ret, parentVal);\n  for (var key$1 in childVal) {\n    var parent = ret[key$1];\n    var child = childVal[key$1];\n    if (parent && !Array.isArray(parent)) {\n      parent = [parent];\n    }\n    ret[key$1] = parent\n      ? parent.concat(child)\n      : Array.isArray(child) ? child : [child];\n  }\n  return ret\n};\n\n/**\n * Other object hashes.\n */\nstrats.props =\nstrats.methods =\nstrats.inject =\nstrats.computed = function (\n  parentVal,\n  childVal,\n  vm,\n  key\n) {\n  if (childVal && \"production\" !== 'production') {\n    assertObjectType(key, childVal, vm);\n  }\n  if (!parentVal) { return childVal }\n  var ret = Object.create(null);\n  extend(ret, parentVal);\n  if (childVal) { extend(ret, childVal); }\n  return ret\n};\nstrats.provide = mergeDataOrFn;\n\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n  return childVal === undefined\n    ? parentVal\n    : childVal\n};\n\n/**\n * Validate component names\n */\nfunction checkComponents (options) {\n  for (var key in options.components) {\n    validateComponentName(key);\n  }\n}\n\nfunction validateComponentName (name) {\n  if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\n    warn(\n      'Invalid component name: \"' + name + '\". Component names ' +\n      'should conform to valid custom element name in html5 specification.'\n    );\n  }\n  if (isBuiltInTag(name) || config.isReservedTag(name)) {\n    warn(\n      'Do not use built-in or reserved HTML elements as component ' +\n      'id: ' + name\n    );\n  }\n}\n\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps (options, vm) {\n  var props = options.props;\n  if (!props) { return }\n  var res = {};\n  var i, val, name;\n  if (Array.isArray(props)) {\n    i = props.length;\n    while (i--) {\n      val = props[i];\n      if (typeof val === 'string') {\n        name = camelize(val);\n        res[name] = { type: null };\n      } else if (false) {\n        warn('props must be strings when using array syntax.');\n      }\n    }\n  } else if (isPlainObject(props)) {\n    for (var key in props) {\n      val = props[key];\n      name = camelize(key);\n      res[name] = isPlainObject(val)\n        ? val\n        : { type: val };\n    }\n  } else if (false) {\n    warn(\n      \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n      \"but got \" + (toRawType(props)) + \".\",\n      vm\n    );\n  }\n  options.props = res;\n}\n\n/**\n * Normalize all injections into Object-based format\n */\nfunction normalizeInject (options, vm) {\n  var inject = options.inject;\n  if (!inject) { return }\n  var normalized = options.inject = {};\n  if (Array.isArray(inject)) {\n    for (var i = 0; i < inject.length; i++) {\n      normalized[inject[i]] = { from: inject[i] };\n    }\n  } else if (isPlainObject(inject)) {\n    for (var key in inject) {\n      var val = inject[key];\n      normalized[key] = isPlainObject(val)\n        ? extend({ from: key }, val)\n        : { from: val };\n    }\n  } else if (false) {\n    warn(\n      \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n      \"but got \" + (toRawType(inject)) + \".\",\n      vm\n    );\n  }\n}\n\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives (options) {\n  var dirs = options.directives;\n  if (dirs) {\n    for (var key in dirs) {\n      var def$$1 = dirs[key];\n      if (typeof def$$1 === 'function') {\n        dirs[key] = { bind: def$$1, update: def$$1 };\n      }\n    }\n  }\n}\n\nfunction assertObjectType (name, value, vm) {\n  if (!isPlainObject(value)) {\n    warn(\n      \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\n      \"but got \" + (toRawType(value)) + \".\",\n      vm\n    );\n  }\n}\n\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions (\n  parent,\n  child,\n  vm\n) {\n  if (false) {\n    checkComponents(child);\n  }\n\n  if (typeof child === 'function') {\n    child = child.options;\n  }\n\n  normalizeProps(child, vm);\n  normalizeInject(child, vm);\n  normalizeDirectives(child);\n\n  // Apply extends and mixins on the child options,\n  // but only if it is a raw options object that isn't\n  // the result of another mergeOptions call.\n  // Only merged options has the _base property.\n  if (!child._base) {\n    if (child.extends) {\n      parent = mergeOptions(parent, child.extends, vm);\n    }\n    if (child.mixins) {\n      for (var i = 0, l = child.mixins.length; i < l; i++) {\n        parent = mergeOptions(parent, child.mixins[i], vm);\n      }\n    }\n  }\n\n  var options = {};\n  var key;\n  for (key in parent) {\n    mergeField(key);\n  }\n  for (key in child) {\n    if (!hasOwn(parent, key)) {\n      mergeField(key);\n    }\n  }\n  function mergeField (key) {\n    var strat = strats[key] || defaultStrat;\n    options[key] = strat(parent[key], child[key], vm, key);\n  }\n  return options\n}\n\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset (\n  options,\n  type,\n  id,\n  warnMissing\n) {\n  /* istanbul ignore if */\n  if (typeof id !== 'string') {\n    return\n  }\n  var assets = options[type];\n  // check local registration variations first\n  if (hasOwn(assets, id)) { return assets[id] }\n  var camelizedId = camelize(id);\n  if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n  var PascalCaseId = capitalize(camelizedId);\n  if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n  // fallback to prototype chain\n  var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n  if (false) {\n    warn(\n      'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n      options\n    );\n  }\n  return res\n}\n\n/*  */\n\n\n\nfunction validateProp (\n  key,\n  propOptions,\n  propsData,\n  vm\n) {\n  var prop = propOptions[key];\n  var absent = !hasOwn(propsData, key);\n  var value = propsData[key];\n  // boolean casting\n  var booleanIndex = getTypeIndex(Boolean, prop.type);\n  if (booleanIndex > -1) {\n    if (absent && !hasOwn(prop, 'default')) {\n      value = false;\n    } else if (value === '' || value === hyphenate(key)) {\n      // only cast empty string / same name to boolean if\n      // boolean has higher priority\n      var stringIndex = getTypeIndex(String, prop.type);\n      if (stringIndex < 0 || booleanIndex < stringIndex) {\n        value = true;\n      }\n    }\n  }\n  // check default value\n  if (value === undefined) {\n    value = getPropDefaultValue(vm, prop, key);\n    // since the default value is a fresh copy,\n    // make sure to observe it.\n    var prevShouldObserve = shouldObserve;\n    toggleObserving(true);\n    observe(value);\n    toggleObserving(prevShouldObserve);\n  }\n  if (\n    false\n  ) {\n    assertProp(prop, key, value, vm, absent);\n  }\n  return value\n}\n\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue (vm, prop, key) {\n  // no default, return undefined\n  if (!hasOwn(prop, 'default')) {\n    return undefined\n  }\n  var def = prop.default;\n  // warn against non-factory defaults for Object & Array\n  if (false) {\n    warn(\n      'Invalid default value for prop \"' + key + '\": ' +\n      'Props with type Object/Array must use a factory function ' +\n      'to return the default value.',\n      vm\n    );\n  }\n  // the raw prop value was also undefined from previous render,\n  // return previous default value to avoid unnecessary watcher trigger\n  if (vm && vm.$options.propsData &&\n    vm.$options.propsData[key] === undefined &&\n    vm._props[key] !== undefined\n  ) {\n    return vm._props[key]\n  }\n  // call factory function for non-Function types\n  // a value is Function if its prototype is function even across different execution context\n  return typeof def === 'function' && getType(prop.type) !== 'Function'\n    ? def.call(vm)\n    : def\n}\n\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp (\n  prop,\n  name,\n  value,\n  vm,\n  absent\n) {\n  if (prop.required && absent) {\n    warn(\n      'Missing required prop: \"' + name + '\"',\n      vm\n    );\n    return\n  }\n  if (value == null && !prop.required) {\n    return\n  }\n  var type = prop.type;\n  var valid = !type || type === true;\n  var expectedTypes = [];\n  if (type) {\n    if (!Array.isArray(type)) {\n      type = [type];\n    }\n    for (var i = 0; i < type.length && !valid; i++) {\n      var assertedType = assertType(value, type[i]);\n      expectedTypes.push(assertedType.expectedType || '');\n      valid = assertedType.valid;\n    }\n  }\n\n  if (!valid) {\n    warn(\n      getInvalidTypeMessage(name, value, expectedTypes),\n      vm\n    );\n    return\n  }\n  var validator = prop.validator;\n  if (validator) {\n    if (!validator(value)) {\n      warn(\n        'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n        vm\n      );\n    }\n  }\n}\n\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;\n\nfunction assertType (value, type) {\n  var valid;\n  var expectedType = getType(type);\n  if (simpleCheckRE.test(expectedType)) {\n    var t = typeof value;\n    valid = t === expectedType.toLowerCase();\n    // for primitive wrapper objects\n    if (!valid && t === 'object') {\n      valid = value instanceof type;\n    }\n  } else if (expectedType === 'Object') {\n    valid = isPlainObject(value);\n  } else if (expectedType === 'Array') {\n    valid = Array.isArray(value);\n  } else {\n    valid = value instanceof type;\n  }\n  return {\n    valid: valid,\n    expectedType: expectedType\n  }\n}\n\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType (fn) {\n  var match = fn && fn.toString().match(/^\\s*function (\\w+)/);\n  return match ? match[1] : ''\n}\n\nfunction isSameType (a, b) {\n  return getType(a) === getType(b)\n}\n\nfunction getTypeIndex (type, expectedTypes) {\n  if (!Array.isArray(expectedTypes)) {\n    return isSameType(expectedTypes, type) ? 0 : -1\n  }\n  for (var i = 0, len = expectedTypes.length; i < len; i++) {\n    if (isSameType(expectedTypes[i], type)) {\n      return i\n    }\n  }\n  return -1\n}\n\nfunction getInvalidTypeMessage (name, value, expectedTypes) {\n  var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n    \" Expected \" + (expectedTypes.map(capitalize).join(', '));\n  var expectedType = expectedTypes[0];\n  var receivedType = toRawType(value);\n  var expectedValue = styleValue(value, expectedType);\n  var receivedValue = styleValue(value, receivedType);\n  // check if we need to specify expected value\n  if (expectedTypes.length === 1 &&\n      isExplicable(expectedType) &&\n      !isBoolean(expectedType, receivedType)) {\n    message += \" with value \" + expectedValue;\n  }\n  message += \", got \" + receivedType + \" \";\n  // check if we need to specify received value\n  if (isExplicable(receivedType)) {\n    message += \"with value \" + receivedValue + \".\";\n  }\n  return message\n}\n\nfunction styleValue (value, type) {\n  if (type === 'String') {\n    return (\"\\\"\" + value + \"\\\"\")\n  } else if (type === 'Number') {\n    return (\"\" + (Number(value)))\n  } else {\n    return (\"\" + value)\n  }\n}\n\nfunction isExplicable (value) {\n  var explicitTypes = ['string', 'number', 'boolean'];\n  return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\n}\n\nfunction isBoolean () {\n  var args = [], len = arguments.length;\n  while ( len-- ) args[ len ] = arguments[ len ];\n\n  return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\n}\n\n/*  */\n\nfunction handleError (err, vm, info) {\n  // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n  // See: https://github.com/vuejs/vuex/issues/1505\n  pushTarget();\n  try {\n    if (vm) {\n      var cur = vm;\n      while ((cur = cur.$parent)) {\n        var hooks = cur.$options.errorCaptured;\n        if (hooks) {\n          for (var i = 0; i < hooks.length; i++) {\n            try {\n              var capture = hooks[i].call(cur, err, vm, info) === false;\n              if (capture) { return }\n            } catch (e) {\n              globalHandleError(e, cur, 'errorCaptured hook');\n            }\n          }\n        }\n      }\n    }\n    globalHandleError(err, vm, info);\n  } finally {\n    popTarget();\n  }\n}\n\nfunction invokeWithErrorHandling (\n  handler,\n  context,\n  args,\n  vm,\n  info\n) {\n  var res;\n  try {\n    res = args ? handler.apply(context, args) : handler.call(context);\n    if (res && !res._isVue && isPromise(res) && !res._handled) {\n      res.catch(function (e) { return handleError(e, vm, info + \" (Promise/async)\"); });\n      // issue #9511\n      // avoid catch triggering multiple times when nested calls\n      res._handled = true;\n    }\n  } catch (e) {\n    handleError(e, vm, info);\n  }\n  return res\n}\n\nfunction globalHandleError (err, vm, info) {\n  if (config.errorHandler) {\n    try {\n      return config.errorHandler.call(null, err, vm, info)\n    } catch (e) {\n      // if the user intentionally throws the original error in the handler,\n      // do not log it twice\n      if (e !== err) {\n        logError(e, null, 'config.errorHandler');\n      }\n    }\n  }\n  logError(err, vm, info);\n}\n\nfunction logError (err, vm, info) {\n  if (false) {\n    warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n  }\n  /* istanbul ignore else */\n  if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n    console.error(err);\n  } else {\n    throw err\n  }\n}\n\n/*  */\n\nvar isUsingMicroTask = false;\n\nvar callbacks = [];\nvar pending = false;\n\nfunction flushCallbacks () {\n  pending = false;\n  var copies = callbacks.slice(0);\n  callbacks.length = 0;\n  for (var i = 0; i < copies.length; i++) {\n    copies[i]();\n  }\n}\n\n// Here we have async deferring wrappers using microtasks.\n// In 2.5 we used (macro) tasks (in combination with microtasks).\n// However, it has subtle problems when state is changed right before repaint\n// (e.g. #6813, out-in transitions).\n// Also, using (macro) tasks in event handler would cause some weird behaviors\n// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n// So we now use microtasks everywhere, again.\n// A major drawback of this tradeoff is that there are some scenarios\n// where microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690, which have workarounds)\n// or even between bubbling of the same event (#6566).\nvar timerFunc;\n\n// The nextTick behavior leverages the microtask queue, which can be accessed\n// via either native Promise.then or MutationObserver.\n// MutationObserver has wider support, however it is seriously bugged in\n// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n// completely stops working after triggering a few times... so, if native\n// Promise is available, we will use it:\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n  var p = Promise.resolve();\n  timerFunc = function () {\n    p.then(flushCallbacks);\n    // In problematic UIWebViews, Promise.then doesn't completely break, but\n    // it can get stuck in a weird state where callbacks are pushed into the\n    // microtask queue but the queue isn't being flushed, until the browser\n    // needs to do some other work, e.g. handle a timer. Therefore we can\n    // \"force\" the microtask queue to be flushed by adding an empty timer.\n    if (isIOS) { setTimeout(noop); }\n  };\n  isUsingMicroTask = true;\n} else if (!isIE && typeof MutationObserver !== 'undefined' && (\n  isNative(MutationObserver) ||\n  // PhantomJS and iOS 7.x\n  MutationObserver.toString() === '[object MutationObserverConstructor]'\n)) {\n  // Use MutationObserver where native Promise is not available,\n  // e.g. PhantomJS, iOS7, Android 4.4\n  // (#6466 MutationObserver is unreliable in IE11)\n  var counter = 1;\n  var observer = new MutationObserver(flushCallbacks);\n  var textNode = document.createTextNode(String(counter));\n  observer.observe(textNode, {\n    characterData: true\n  });\n  timerFunc = function () {\n    counter = (counter + 1) % 2;\n    textNode.data = String(counter);\n  };\n  isUsingMicroTask = true;\n} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n  // Fallback to setImmediate.\n  // Techinically it leverages the (macro) task queue,\n  // but it is still a better choice than setTimeout.\n  timerFunc = function () {\n    setImmediate(flushCallbacks);\n  };\n} else {\n  // Fallback to setTimeout.\n  timerFunc = function () {\n    setTimeout(flushCallbacks, 0);\n  };\n}\n\nfunction nextTick (cb, ctx) {\n  var _resolve;\n  callbacks.push(function () {\n    if (cb) {\n      try {\n        cb.call(ctx);\n      } catch (e) {\n        handleError(e, ctx, 'nextTick');\n      }\n    } else if (_resolve) {\n      _resolve(ctx);\n    }\n  });\n  if (!pending) {\n    pending = true;\n    timerFunc();\n  }\n  // $flow-disable-line\n  if (!cb && typeof Promise !== 'undefined') {\n    return new Promise(function (resolve) {\n      _resolve = resolve;\n    })\n  }\n}\n\n/*  */\n\nvar mark;\nvar measure;\n\nif (false) {\n  var perf = inBrowser && window.performance;\n  /* istanbul ignore if */\n  if (\n    perf &&\n    perf.mark &&\n    perf.measure &&\n    perf.clearMarks &&\n    perf.clearMeasures\n  ) {\n    mark = function (tag) { return perf.mark(tag); };\n    measure = function (name, startTag, endTag) {\n      perf.measure(name, startTag, endTag);\n      perf.clearMarks(startTag);\n      perf.clearMarks(endTag);\n      // perf.clearMeasures(name)\n    };\n  }\n}\n\n/* not type checking this file because flow doesn't play well with Proxy */\n\nvar initProxy;\n\nif (false) {\n  var allowedGlobals = makeMap(\n    'Infinity,undefined,NaN,isFinite,isNaN,' +\n    'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n    'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n    'require' // for Webpack/Browserify\n  );\n\n  var warnNonPresent = function (target, key) {\n    warn(\n      \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n      'referenced during render. Make sure that this property is reactive, ' +\n      'either in the data option, or for class-based components, by ' +\n      'initializing the property. ' +\n      'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',\n      target\n    );\n  };\n\n  var warnReservedPrefix = function (target, key) {\n    warn(\n      \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\n      'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\n      'prevent conflicts with Vue internals' +\n      'See: https://vuejs.org/v2/api/#data',\n      target\n    );\n  };\n\n  var hasProxy =\n    typeof Proxy !== 'undefined' && isNative(Proxy);\n\n  if (hasProxy) {\n    var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n    config.keyCodes = new Proxy(config.keyCodes, {\n      set: function set (target, key, value) {\n        if (isBuiltInModifier(key)) {\n          warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n          return false\n        } else {\n          target[key] = value;\n          return true\n        }\n      }\n    });\n  }\n\n  var hasHandler = {\n    has: function has (target, key) {\n      var has = key in target;\n      var isAllowed = allowedGlobals(key) ||\n        (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\n      if (!has && !isAllowed) {\n        if (key in target.$data) { warnReservedPrefix(target, key); }\n        else { warnNonPresent(target, key); }\n      }\n      return has || !isAllowed\n    }\n  };\n\n  var getHandler = {\n    get: function get (target, key) {\n      if (typeof key === 'string' && !(key in target)) {\n        if (key in target.$data) { warnReservedPrefix(target, key); }\n        else { warnNonPresent(target, key); }\n      }\n      return target[key]\n    }\n  };\n\n  initProxy = function initProxy (vm) {\n    if (hasProxy) {\n      // determine which proxy handler to use\n      var options = vm.$options;\n      var handlers = options.render && options.render._withStripped\n        ? getHandler\n        : hasHandler;\n      vm._renderProxy = new Proxy(vm, handlers);\n    } else {\n      vm._renderProxy = vm;\n    }\n  };\n}\n\n/*  */\n\nvar seenObjects = new _Set();\n\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nfunction traverse (val) {\n  _traverse(val, seenObjects);\n  seenObjects.clear();\n}\n\nfunction _traverse (val, seen) {\n  var i, keys;\n  var isA = Array.isArray(val);\n  if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\n    return\n  }\n  if (val.__ob__) {\n    var depId = val.__ob__.dep.id;\n    if (seen.has(depId)) {\n      return\n    }\n    seen.add(depId);\n  }\n  if (isA) {\n    i = val.length;\n    while (i--) { _traverse(val[i], seen); }\n  } else {\n    keys = Object.keys(val);\n    i = keys.length;\n    while (i--) { _traverse(val[keys[i]], seen); }\n  }\n}\n\n/*  */\n\nvar normalizeEvent = cached(function (name) {\n  var passive = name.charAt(0) === '&';\n  name = passive ? name.slice(1) : name;\n  var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first\n  name = once$$1 ? name.slice(1) : name;\n  var capture = name.charAt(0) === '!';\n  name = capture ? name.slice(1) : name;\n  return {\n    name: name,\n    once: once$$1,\n    capture: capture,\n    passive: passive\n  }\n});\n\nfunction createFnInvoker (fns, vm) {\n  function invoker () {\n    var arguments$1 = arguments;\n\n    var fns = invoker.fns;\n    if (Array.isArray(fns)) {\n      var cloned = fns.slice();\n      for (var i = 0; i < cloned.length; i++) {\n        invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\n      }\n    } else {\n      // return handler return value for single handlers\n      return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\n    }\n  }\n  invoker.fns = fns;\n  return invoker\n}\n\nfunction updateListeners (\n  on,\n  oldOn,\n  add,\n  remove$$1,\n  createOnceHandler,\n  vm\n) {\n  var name, def$$1, cur, old, event;\n  for (name in on) {\n    def$$1 = cur = on[name];\n    old = oldOn[name];\n    event = normalizeEvent(name);\n    if (isUndef(cur)) {\n      \"production\" !== 'production' && warn(\n        \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n        vm\n      );\n    } else if (isUndef(old)) {\n      if (isUndef(cur.fns)) {\n        cur = on[name] = createFnInvoker(cur, vm);\n      }\n      if (isTrue(event.once)) {\n        cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n      }\n      add(event.name, cur, event.capture, event.passive, event.params);\n    } else if (cur !== old) {\n      old.fns = cur;\n      on[name] = old;\n    }\n  }\n  for (name in oldOn) {\n    if (isUndef(on[name])) {\n      event = normalizeEvent(name);\n      remove$$1(event.name, oldOn[name], event.capture);\n    }\n  }\n}\n\n/*  */\n\nfunction mergeVNodeHook (def, hookKey, hook) {\n  if (def instanceof VNode) {\n    def = def.data.hook || (def.data.hook = {});\n  }\n  var invoker;\n  var oldHook = def[hookKey];\n\n  function wrappedHook () {\n    hook.apply(this, arguments);\n    // important: remove merged hook to ensure it's called only once\n    // and prevent memory leak\n    remove(invoker.fns, wrappedHook);\n  }\n\n  if (isUndef(oldHook)) {\n    // no existing hook\n    invoker = createFnInvoker([wrappedHook]);\n  } else {\n    /* istanbul ignore if */\n    if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n      // already a merged invoker\n      invoker = oldHook;\n      invoker.fns.push(wrappedHook);\n    } else {\n      // existing plain hook\n      invoker = createFnInvoker([oldHook, wrappedHook]);\n    }\n  }\n\n  invoker.merged = true;\n  def[hookKey] = invoker;\n}\n\n/*  */\n\nfunction extractPropsFromVNodeData (\n  data,\n  Ctor,\n  tag\n) {\n  // we are only extracting raw values here.\n  // validation and default values are handled in the child\n  // component itself.\n  var propOptions = Ctor.options.props;\n  if (isUndef(propOptions)) {\n    return\n  }\n  var res = {};\n  var attrs = data.attrs;\n  var props = data.props;\n  if (isDef(attrs) || isDef(props)) {\n    for (var key in propOptions) {\n      var altKey = hyphenate(key);\n      if (false) {\n        var keyInLowerCase = key.toLowerCase();\n        if (\n          key !== keyInLowerCase &&\n          attrs && hasOwn(attrs, keyInLowerCase)\n        ) {\n          tip(\n            \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\n            (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\n            \" \\\"\" + key + \"\\\". \" +\n            \"Note that HTML attributes are case-insensitive and camelCased \" +\n            \"props need to use their kebab-case equivalents when using in-DOM \" +\n            \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\n          );\n        }\n      }\n      checkProp(res, props, key, altKey, true) ||\n      checkProp(res, attrs, key, altKey, false);\n    }\n  }\n  return res\n}\n\nfunction checkProp (\n  res,\n  hash,\n  key,\n  altKey,\n  preserve\n) {\n  if (isDef(hash)) {\n    if (hasOwn(hash, key)) {\n      res[key] = hash[key];\n      if (!preserve) {\n        delete hash[key];\n      }\n      return true\n    } else if (hasOwn(hash, altKey)) {\n      res[key] = hash[altKey];\n      if (!preserve) {\n        delete hash[altKey];\n      }\n      return true\n    }\n  }\n  return false\n}\n\n/*  */\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array<VNode>. There are\n// two cases where extra normalization is needed:\n\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren (children) {\n  for (var i = 0; i < children.length; i++) {\n    if (Array.isArray(children[i])) {\n      return Array.prototype.concat.apply([], children)\n    }\n  }\n  return children\n}\n\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g. <template>, <slot>, v-for, or when the children is provided by user\n// with hand-written render functions / JSX. In such cases a full normalization\n// is needed to cater to all possible types of children values.\nfunction normalizeChildren (children) {\n  return isPrimitive(children)\n    ? [createTextVNode(children)]\n    : Array.isArray(children)\n      ? normalizeArrayChildren(children)\n      : undefined\n}\n\nfunction isTextNode (node) {\n  return isDef(node) && isDef(node.text) && isFalse(node.isComment)\n}\n\nfunction normalizeArrayChildren (children, nestedIndex) {\n  var res = [];\n  var i, c, lastIndex, last;\n  for (i = 0; i < children.length; i++) {\n    c = children[i];\n    if (isUndef(c) || typeof c === 'boolean') { continue }\n    lastIndex = res.length - 1;\n    last = res[lastIndex];\n    //  nested\n    if (Array.isArray(c)) {\n      if (c.length > 0) {\n        c = normalizeArrayChildren(c, ((nestedIndex || '') + \"_\" + i));\n        // merge adjacent text nodes\n        if (isTextNode(c[0]) && isTextNode(last)) {\n          res[lastIndex] = createTextVNode(last.text + (c[0]).text);\n          c.shift();\n        }\n        res.push.apply(res, c);\n      }\n    } else if (isPrimitive(c)) {\n      if (isTextNode(last)) {\n        // merge adjacent text nodes\n        // this is necessary for SSR hydration because text nodes are\n        // essentially merged when rendered to HTML strings\n        res[lastIndex] = createTextVNode(last.text + c);\n      } else if (c !== '') {\n        // convert primitive to vnode\n        res.push(createTextVNode(c));\n      }\n    } else {\n      if (isTextNode(c) && isTextNode(last)) {\n        // merge adjacent text nodes\n        res[lastIndex] = createTextVNode(last.text + c.text);\n      } else {\n        // default key for nested array children (likely generated by v-for)\n        if (isTrue(children._isVList) &&\n          isDef(c.tag) &&\n          isUndef(c.key) &&\n          isDef(nestedIndex)) {\n          c.key = \"__vlist\" + nestedIndex + \"_\" + i + \"__\";\n        }\n        res.push(c);\n      }\n    }\n  }\n  return res\n}\n\n/*  */\n\nfunction initProvide (vm) {\n  var provide = vm.$options.provide;\n  if (provide) {\n    vm._provided = typeof provide === 'function'\n      ? provide.call(vm)\n      : provide;\n  }\n}\n\nfunction initInjections (vm) {\n  var result = resolveInject(vm.$options.inject, vm);\n  if (result) {\n    toggleObserving(false);\n    Object.keys(result).forEach(function (key) {\n      /* istanbul ignore else */\n      if (false) {\n        defineReactive$$1(vm, key, result[key], function () {\n          warn(\n            \"Avoid mutating an injected value directly since the changes will be \" +\n            \"overwritten whenever the provided component re-renders. \" +\n            \"injection being mutated: \\\"\" + key + \"\\\"\",\n            vm\n          );\n        });\n      } else {\n        defineReactive$$1(vm, key, result[key]);\n      }\n    });\n    toggleObserving(true);\n  }\n}\n\nfunction resolveInject (inject, vm) {\n  if (inject) {\n    // inject is :any because flow is not smart enough to figure out cached\n    var result = Object.create(null);\n    var keys = hasSymbol\n      ? Reflect.ownKeys(inject)\n      : Object.keys(inject);\n\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n      // #6574 in case the inject object is observed...\n      if (key === '__ob__') { continue }\n      var provideKey = inject[key].from;\n      var source = vm;\n      while (source) {\n        if (source._provided && hasOwn(source._provided, provideKey)) {\n          result[key] = source._provided[provideKey];\n          break\n        }\n        source = source.$parent;\n      }\n      if (!source) {\n        if ('default' in inject[key]) {\n          var provideDefault = inject[key].default;\n          result[key] = typeof provideDefault === 'function'\n            ? provideDefault.call(vm)\n            : provideDefault;\n        } else if (false) {\n          warn((\"Injection \\\"\" + key + \"\\\" not found\"), vm);\n        }\n      }\n    }\n    return result\n  }\n}\n\n/*  */\n\n\n\n/**\n * Runtime helper for resolving raw children VNodes into a slot object.\n */\nfunction resolveSlots (\n  children,\n  context\n) {\n  if (!children || !children.length) {\n    return {}\n  }\n  var slots = {};\n  for (var i = 0, l = children.length; i < l; i++) {\n    var child = children[i];\n    var data = child.data;\n    // remove slot attribute if the node is resolved as a Vue slot node\n    if (data && data.attrs && data.attrs.slot) {\n      delete data.attrs.slot;\n    }\n    // named slots should only be respected if the vnode was rendered in the\n    // same context.\n    if ((child.context === context || child.fnContext === context) &&\n      data && data.slot != null\n    ) {\n      var name = data.slot;\n      var slot = (slots[name] || (slots[name] = []));\n      if (child.tag === 'template') {\n        slot.push.apply(slot, child.children || []);\n      } else {\n        slot.push(child);\n      }\n    } else {\n      (slots.default || (slots.default = [])).push(child);\n    }\n  }\n  // ignore slots that contains only whitespace\n  for (var name$1 in slots) {\n    if (slots[name$1].every(isWhitespace)) {\n      delete slots[name$1];\n    }\n  }\n  return slots\n}\n\nfunction isWhitespace (node) {\n  return (node.isComment && !node.asyncFactory) || node.text === ' '\n}\n\n/*  */\n\nfunction normalizeScopedSlots (\n  slots,\n  normalSlots,\n  prevSlots\n) {\n  var res;\n  var hasNormalSlots = Object.keys(normalSlots).length > 0;\n  var isStable = slots ? !!slots.$stable : !hasNormalSlots;\n  var key = slots && slots.$key;\n  if (!slots) {\n    res = {};\n  } else if (slots._normalized) {\n    // fast path 1: child component re-render only, parent did not change\n    return slots._normalized\n  } else if (\n    isStable &&\n    prevSlots &&\n    prevSlots !== emptyObject &&\n    key === prevSlots.$key &&\n    !hasNormalSlots &&\n    !prevSlots.$hasNormal\n  ) {\n    // fast path 2: stable scoped slots w/ no normal slots to proxy,\n    // only need to normalize once\n    return prevSlots\n  } else {\n    res = {};\n    for (var key$1 in slots) {\n      if (slots[key$1] && key$1[0] !== '$') {\n        res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);\n      }\n    }\n  }\n  // expose normal slots on scopedSlots\n  for (var key$2 in normalSlots) {\n    if (!(key$2 in res)) {\n      res[key$2] = proxyNormalSlot(normalSlots, key$2);\n    }\n  }\n  // avoriaz seems to mock a non-extensible $scopedSlots object\n  // and when that is passed down this would cause an error\n  if (slots && Object.isExtensible(slots)) {\n    (slots)._normalized = res;\n  }\n  def(res, '$stable', isStable);\n  def(res, '$key', key);\n  def(res, '$hasNormal', hasNormalSlots);\n  return res\n}\n\nfunction normalizeScopedSlot(normalSlots, key, fn) {\n  var normalized = function () {\n    var res = arguments.length ? fn.apply(null, arguments) : fn({});\n    res = res && typeof res === 'object' && !Array.isArray(res)\n      ? [res] // single vnode\n      : normalizeChildren(res);\n    return res && (\n      res.length === 0 ||\n      (res.length === 1 && res[0].isComment) // #9658\n    ) ? undefined\n      : res\n  };\n  // this is a slot using the new v-slot syntax without scope. although it is\n  // compiled as a scoped slot, render fn users would expect it to be present\n  // on this.$slots because the usage is semantically a normal slot.\n  if (fn.proxy) {\n    Object.defineProperty(normalSlots, key, {\n      get: normalized,\n      enumerable: true,\n      configurable: true\n    });\n  }\n  return normalized\n}\n\nfunction proxyNormalSlot(slots, key) {\n  return function () { return slots[key]; }\n}\n\n/*  */\n\n/**\n * Runtime helper for rendering v-for lists.\n */\nfunction renderList (\n  val,\n  render\n) {\n  var ret, i, l, keys, key;\n  if (Array.isArray(val) || typeof val === 'string') {\n    ret = new Array(val.length);\n    for (i = 0, l = val.length; i < l; i++) {\n      ret[i] = render(val[i], i);\n    }\n  } else if (typeof val === 'number') {\n    ret = new Array(val);\n    for (i = 0; i < val; i++) {\n      ret[i] = render(i + 1, i);\n    }\n  } else if (isObject(val)) {\n    if (hasSymbol && val[Symbol.iterator]) {\n      ret = [];\n      var iterator = val[Symbol.iterator]();\n      var result = iterator.next();\n      while (!result.done) {\n        ret.push(render(result.value, ret.length));\n        result = iterator.next();\n      }\n    } else {\n      keys = Object.keys(val);\n      ret = new Array(keys.length);\n      for (i = 0, l = keys.length; i < l; i++) {\n        key = keys[i];\n        ret[i] = render(val[key], key, i);\n      }\n    }\n  }\n  if (!isDef(ret)) {\n    ret = [];\n  }\n  (ret)._isVList = true;\n  return ret\n}\n\n/*  */\n\n/**\n * Runtime helper for rendering <slot>\n */\nfunction renderSlot (\n  name,\n  fallback,\n  props,\n  bindObject\n) {\n  var scopedSlotFn = this.$scopedSlots[name];\n  var nodes;\n  if (scopedSlotFn) { // scoped slot\n    props = props || {};\n    if (bindObject) {\n      if (false) {\n        warn(\n          'slot v-bind without argument expects an Object',\n          this\n        );\n      }\n      props = extend(extend({}, bindObject), props);\n    }\n    nodes = scopedSlotFn(props) || fallback;\n  } else {\n    nodes = this.$slots[name] || fallback;\n  }\n\n  var target = props && props.slot;\n  if (target) {\n    return this.$createElement('template', { slot: target }, nodes)\n  } else {\n    return nodes\n  }\n}\n\n/*  */\n\n/**\n * Runtime helper for resolving filters\n */\nfunction resolveFilter (id) {\n  return resolveAsset(this.$options, 'filters', id, true) || identity\n}\n\n/*  */\n\nfunction isKeyNotMatch (expect, actual) {\n  if (Array.isArray(expect)) {\n    return expect.indexOf(actual) === -1\n  } else {\n    return expect !== actual\n  }\n}\n\n/**\n * Runtime helper for checking keyCodes from config.\n * exposed as Vue.prototype._k\n * passing in eventKeyName as last argument separately for backwards compat\n */\nfunction checkKeyCodes (\n  eventKeyCode,\n  key,\n  builtInKeyCode,\n  eventKeyName,\n  builtInKeyName\n) {\n  var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\n  if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\n    return isKeyNotMatch(builtInKeyName, eventKeyName)\n  } else if (mappedKeyCode) {\n    return isKeyNotMatch(mappedKeyCode, eventKeyCode)\n  } else if (eventKeyName) {\n    return hyphenate(eventKeyName) !== key\n  }\n}\n\n/*  */\n\n/**\n * Runtime helper for merging v-bind=\"object\" into a VNode's data.\n */\nfunction bindObjectProps (\n  data,\n  tag,\n  value,\n  asProp,\n  isSync\n) {\n  if (value) {\n    if (!isObject(value)) {\n      \"production\" !== 'production' && warn(\n        'v-bind without argument expects an Object or Array value',\n        this\n      );\n    } else {\n      if (Array.isArray(value)) {\n        value = toObject(value);\n      }\n      var hash;\n      var loop = function ( key ) {\n        if (\n          key === 'class' ||\n          key === 'style' ||\n          isReservedAttribute(key)\n        ) {\n          hash = data;\n        } else {\n          var type = data.attrs && data.attrs.type;\n          hash = asProp || config.mustUseProp(tag, type, key)\n            ? data.domProps || (data.domProps = {})\n            : data.attrs || (data.attrs = {});\n        }\n        var camelizedKey = camelize(key);\n        var hyphenatedKey = hyphenate(key);\n        if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\n          hash[key] = value[key];\n\n          if (isSync) {\n            var on = data.on || (data.on = {});\n            on[(\"update:\" + key)] = function ($event) {\n              value[key] = $event;\n            };\n          }\n        }\n      };\n\n      for (var key in value) loop( key );\n    }\n  }\n  return data\n}\n\n/*  */\n\n/**\n * Runtime helper for rendering static trees.\n */\nfunction renderStatic (\n  index,\n  isInFor\n) {\n  var cached = this._staticTrees || (this._staticTrees = []);\n  var tree = cached[index];\n  // if has already-rendered static tree and not inside v-for,\n  // we can reuse the same tree.\n  if (tree && !isInFor) {\n    return tree\n  }\n  // otherwise, render a fresh tree.\n  tree = cached[index] = this.$options.staticRenderFns[index].call(\n    this._renderProxy,\n    null,\n    this // for render fns generated for functional component templates\n  );\n  markStatic(tree, (\"__static__\" + index), false);\n  return tree\n}\n\n/**\n * Runtime helper for v-once.\n * Effectively it means marking the node as static with a unique key.\n */\nfunction markOnce (\n  tree,\n  index,\n  key\n) {\n  markStatic(tree, (\"__once__\" + index + (key ? (\"_\" + key) : \"\")), true);\n  return tree\n}\n\nfunction markStatic (\n  tree,\n  key,\n  isOnce\n) {\n  if (Array.isArray(tree)) {\n    for (var i = 0; i < tree.length; i++) {\n      if (tree[i] && typeof tree[i] !== 'string') {\n        markStaticNode(tree[i], (key + \"_\" + i), isOnce);\n      }\n    }\n  } else {\n    markStaticNode(tree, key, isOnce);\n  }\n}\n\nfunction markStaticNode (node, key, isOnce) {\n  node.isStatic = true;\n  node.key = key;\n  node.isOnce = isOnce;\n}\n\n/*  */\n\nfunction bindObjectListeners (data, value) {\n  if (value) {\n    if (!isPlainObject(value)) {\n      \"production\" !== 'production' && warn(\n        'v-on without argument expects an Object value',\n        this\n      );\n    } else {\n      var on = data.on = data.on ? extend({}, data.on) : {};\n      for (var key in value) {\n        var existing = on[key];\n        var ours = value[key];\n        on[key] = existing ? [].concat(existing, ours) : ours;\n      }\n    }\n  }\n  return data\n}\n\n/*  */\n\nfunction resolveScopedSlots (\n  fns, // see flow/vnode\n  res,\n  // the following are added in 2.6\n  hasDynamicKeys,\n  contentHashKey\n) {\n  res = res || { $stable: !hasDynamicKeys };\n  for (var i = 0; i < fns.length; i++) {\n    var slot = fns[i];\n    if (Array.isArray(slot)) {\n      resolveScopedSlots(slot, res, hasDynamicKeys);\n    } else if (slot) {\n      // marker for reverse proxying v-slot without scope on this.$slots\n      if (slot.proxy) {\n        slot.fn.proxy = true;\n      }\n      res[slot.key] = slot.fn;\n    }\n  }\n  if (contentHashKey) {\n    (res).$key = contentHashKey;\n  }\n  return res\n}\n\n/*  */\n\nfunction bindDynamicKeys (baseObj, values) {\n  for (var i = 0; i < values.length; i += 2) {\n    var key = values[i];\n    if (typeof key === 'string' && key) {\n      baseObj[values[i]] = values[i + 1];\n    } else if (false) {\n      // null is a speical value for explicitly removing a binding\n      warn(\n        (\"Invalid value for dynamic directive argument (expected string or null): \" + key),\n        this\n      );\n    }\n  }\n  return baseObj\n}\n\n// helper to dynamically append modifier runtime markers to event names.\n// ensure only append when value is already string, otherwise it will be cast\n// to string and cause the type check to miss.\nfunction prependModifier (value, symbol) {\n  return typeof value === 'string' ? symbol + value : value\n}\n\n/*  */\n\nfunction installRenderHelpers (target) {\n  target._o = markOnce;\n  target._n = toNumber;\n  target._s = toString;\n  target._l = renderList;\n  target._t = renderSlot;\n  target._q = looseEqual;\n  target._i = looseIndexOf;\n  target._m = renderStatic;\n  target._f = resolveFilter;\n  target._k = checkKeyCodes;\n  target._b = bindObjectProps;\n  target._v = createTextVNode;\n  target._e = createEmptyVNode;\n  target._u = resolveScopedSlots;\n  target._g = bindObjectListeners;\n  target._d = bindDynamicKeys;\n  target._p = prependModifier;\n}\n\n/*  */\n\nfunction FunctionalRenderContext (\n  data,\n  props,\n  children,\n  parent,\n  Ctor\n) {\n  var this$1 = this;\n\n  var options = Ctor.options;\n  // ensure the createElement function in functional components\n  // gets a unique context - this is necessary for correct named slot check\n  var contextVm;\n  if (hasOwn(parent, '_uid')) {\n    contextVm = Object.create(parent);\n    // $flow-disable-line\n    contextVm._original = parent;\n  } else {\n    // the context vm passed in is a functional context as well.\n    // in this case we want to make sure we are able to get a hold to the\n    // real context instance.\n    contextVm = parent;\n    // $flow-disable-line\n    parent = parent._original;\n  }\n  var isCompiled = isTrue(options._compiled);\n  var needNormalization = !isCompiled;\n\n  this.data = data;\n  this.props = props;\n  this.children = children;\n  this.parent = parent;\n  this.listeners = data.on || emptyObject;\n  this.injections = resolveInject(options.inject, parent);\n  this.slots = function () {\n    if (!this$1.$slots) {\n      normalizeScopedSlots(\n        data.scopedSlots,\n        this$1.$slots = resolveSlots(children, parent)\n      );\n    }\n    return this$1.$slots\n  };\n\n  Object.defineProperty(this, 'scopedSlots', ({\n    enumerable: true,\n    get: function get () {\n      return normalizeScopedSlots(data.scopedSlots, this.slots())\n    }\n  }));\n\n  // support for compiled functional template\n  if (isCompiled) {\n    // exposing $options for renderStatic()\n    this.$options = options;\n    // pre-resolve slots for renderSlot()\n    this.$slots = this.slots();\n    this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);\n  }\n\n  if (options._scopeId) {\n    this._c = function (a, b, c, d) {\n      var vnode = createElement(contextVm, a, b, c, d, needNormalization);\n      if (vnode && !Array.isArray(vnode)) {\n        vnode.fnScopeId = options._scopeId;\n        vnode.fnContext = parent;\n      }\n      return vnode\n    };\n  } else {\n    this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };\n  }\n}\n\ninstallRenderHelpers(FunctionalRenderContext.prototype);\n\nfunction createFunctionalComponent (\n  Ctor,\n  propsData,\n  data,\n  contextVm,\n  children\n) {\n  var options = Ctor.options;\n  var props = {};\n  var propOptions = options.props;\n  if (isDef(propOptions)) {\n    for (var key in propOptions) {\n      props[key] = validateProp(key, propOptions, propsData || emptyObject);\n    }\n  } else {\n    if (isDef(data.attrs)) { mergeProps(props, data.attrs); }\n    if (isDef(data.props)) { mergeProps(props, data.props); }\n  }\n\n  var renderContext = new FunctionalRenderContext(\n    data,\n    props,\n    children,\n    contextVm,\n    Ctor\n  );\n\n  var vnode = options.render.call(null, renderContext._c, renderContext);\n\n  if (vnode instanceof VNode) {\n    return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)\n  } else if (Array.isArray(vnode)) {\n    var vnodes = normalizeChildren(vnode) || [];\n    var res = new Array(vnodes.length);\n    for (var i = 0; i < vnodes.length; i++) {\n      res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\n    }\n    return res\n  }\n}\n\nfunction cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {\n  // #7817 clone node before setting fnContext, otherwise if the node is reused\n  // (e.g. it was from a cached normal slot) the fnContext causes named slots\n  // that should not be matched to match.\n  var clone = cloneVNode(vnode);\n  clone.fnContext = contextVm;\n  clone.fnOptions = options;\n  if (false) {\n    (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;\n  }\n  if (data.slot) {\n    (clone.data || (clone.data = {})).slot = data.slot;\n  }\n  return clone\n}\n\nfunction mergeProps (to, from) {\n  for (var key in from) {\n    to[camelize(key)] = from[key];\n  }\n}\n\n/*  */\n\n/*  */\n\n/*  */\n\n/*  */\n\n// inline hooks to be invoked on component VNodes during patch\nvar componentVNodeHooks = {\n  init: function init (vnode, hydrating) {\n    if (\n      vnode.componentInstance &&\n      !vnode.componentInstance._isDestroyed &&\n      vnode.data.keepAlive\n    ) {\n      // kept-alive components, treat as a patch\n      var mountedNode = vnode; // work around flow\n      componentVNodeHooks.prepatch(mountedNode, mountedNode);\n    } else {\n      var child = vnode.componentInstance = createComponentInstanceForVnode(\n        vnode,\n        activeInstance\n      );\n      child.$mount(hydrating ? vnode.elm : undefined, hydrating);\n    }\n  },\n\n  prepatch: function prepatch (oldVnode, vnode) {\n    var options = vnode.componentOptions;\n    var child = vnode.componentInstance = oldVnode.componentInstance;\n    updateChildComponent(\n      child,\n      options.propsData, // updated props\n      options.listeners, // updated listeners\n      vnode, // new parent vnode\n      options.children // new children\n    );\n  },\n\n  insert: function insert (vnode) {\n    var context = vnode.context;\n    var componentInstance = vnode.componentInstance;\n    if (!componentInstance._isMounted) {\n      componentInstance._isMounted = true;\n      callHook(componentInstance, 'mounted');\n    }\n    if (vnode.data.keepAlive) {\n      if (context._isMounted) {\n        // vue-router#1212\n        // During updates, a kept-alive component's child components may\n        // change, so directly walking the tree here may call activated hooks\n        // on incorrect children. Instead we push them into a queue which will\n        // be processed after the whole patch process ended.\n        queueActivatedComponent(componentInstance);\n      } else {\n        activateChildComponent(componentInstance, true /* direct */);\n      }\n    }\n  },\n\n  destroy: function destroy (vnode) {\n    var componentInstance = vnode.componentInstance;\n    if (!componentInstance._isDestroyed) {\n      if (!vnode.data.keepAlive) {\n        componentInstance.$destroy();\n      } else {\n        deactivateChildComponent(componentInstance, true /* direct */);\n      }\n    }\n  }\n};\n\nvar hooksToMerge = Object.keys(componentVNodeHooks);\n\nfunction createComponent (\n  Ctor,\n  data,\n  context,\n  children,\n  tag\n) {\n  if (isUndef(Ctor)) {\n    return\n  }\n\n  var baseCtor = context.$options._base;\n\n  // plain options object: turn it into a constructor\n  if (isObject(Ctor)) {\n    Ctor = baseCtor.extend(Ctor);\n  }\n\n  // if at this stage it's not a constructor or an async component factory,\n  // reject.\n  if (typeof Ctor !== 'function') {\n    if (false) {\n      warn((\"Invalid Component definition: \" + (String(Ctor))), context);\n    }\n    return\n  }\n\n  // async component\n  var asyncFactory;\n  if (isUndef(Ctor.cid)) {\n    asyncFactory = Ctor;\n    Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\n    if (Ctor === undefined) {\n      // return a placeholder node for async component, which is rendered\n      // as a comment node but preserves all the raw information for the node.\n      // the information will be used for async server-rendering and hydration.\n      return createAsyncPlaceholder(\n        asyncFactory,\n        data,\n        context,\n        children,\n        tag\n      )\n    }\n  }\n\n  data = data || {};\n\n  // resolve constructor options in case global mixins are applied after\n  // component constructor creation\n  resolveConstructorOptions(Ctor);\n\n  // transform component v-model data into props & events\n  if (isDef(data.model)) {\n    transformModel(Ctor.options, data);\n  }\n\n  // extract props\n  var propsData = extractPropsFromVNodeData(data, Ctor, tag);\n\n  // functional component\n  if (isTrue(Ctor.options.functional)) {\n    return createFunctionalComponent(Ctor, propsData, data, context, children)\n  }\n\n  // extract listeners, since these needs to be treated as\n  // child component listeners instead of DOM listeners\n  var listeners = data.on;\n  // replace with listeners with .native modifier\n  // so it gets processed during parent component patch.\n  data.on = data.nativeOn;\n\n  if (isTrue(Ctor.options.abstract)) {\n    // abstract components do not keep anything\n    // other than props & listeners & slot\n\n    // work around flow\n    var slot = data.slot;\n    data = {};\n    if (slot) {\n      data.slot = slot;\n    }\n  }\n\n  // install component management hooks onto the placeholder node\n  installComponentHooks(data);\n\n  // return a placeholder vnode\n  var name = Ctor.options.name || tag;\n  var vnode = new VNode(\n    (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\n    data, undefined, undefined, undefined, context,\n    { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },\n    asyncFactory\n  );\n\n  return vnode\n}\n\nfunction createComponentInstanceForVnode (\n  vnode, // we know it's MountedComponentVNode but flow doesn't\n  parent // activeInstance in lifecycle state\n) {\n  var options = {\n    _isComponent: true,\n    _parentVnode: vnode,\n    parent: parent\n  };\n  // check inline-template render functions\n  var inlineTemplate = vnode.data.inlineTemplate;\n  if (isDef(inlineTemplate)) {\n    options.render = inlineTemplate.render;\n    options.staticRenderFns = inlineTemplate.staticRenderFns;\n  }\n  return new vnode.componentOptions.Ctor(options)\n}\n\nfunction installComponentHooks (data) {\n  var hooks = data.hook || (data.hook = {});\n  for (var i = 0; i < hooksToMerge.length; i++) {\n    var key = hooksToMerge[i];\n    var existing = hooks[key];\n    var toMerge = componentVNodeHooks[key];\n    if (existing !== toMerge && !(existing && existing._merged)) {\n      hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;\n    }\n  }\n}\n\nfunction mergeHook$1 (f1, f2) {\n  var merged = function (a, b) {\n    // flow complains about extra args which is why we use any\n    f1(a, b);\n    f2(a, b);\n  };\n  merged._merged = true;\n  return merged\n}\n\n// transform component v-model info (value and callback) into\n// prop and event handler respectively.\nfunction transformModel (options, data) {\n  var prop = (options.model && options.model.prop) || 'value';\n  var event = (options.model && options.model.event) || 'input'\n  ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;\n  var on = data.on || (data.on = {});\n  var existing = on[event];\n  var callback = data.model.callback;\n  if (isDef(existing)) {\n    if (\n      Array.isArray(existing)\n        ? existing.indexOf(callback) === -1\n        : existing !== callback\n    ) {\n      on[event] = [callback].concat(existing);\n    }\n  } else {\n    on[event] = callback;\n  }\n}\n\n/*  */\n\nvar SIMPLE_NORMALIZE = 1;\nvar ALWAYS_NORMALIZE = 2;\n\n// wrapper function for providing a more flexible interface\n// without getting yelled at by flow\nfunction createElement (\n  context,\n  tag,\n  data,\n  children,\n  normalizationType,\n  alwaysNormalize\n) {\n  if (Array.isArray(data) || isPrimitive(data)) {\n    normalizationType = children;\n    children = data;\n    data = undefined;\n  }\n  if (isTrue(alwaysNormalize)) {\n    normalizationType = ALWAYS_NORMALIZE;\n  }\n  return _createElement(context, tag, data, children, normalizationType)\n}\n\nfunction _createElement (\n  context,\n  tag,\n  data,\n  children,\n  normalizationType\n) {\n  if (isDef(data) && isDef((data).__ob__)) {\n    \"production\" !== 'production' && warn(\n      \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\n      'Always create fresh vnode data objects in each render!',\n      context\n    );\n    return createEmptyVNode()\n  }\n  // object syntax in v-bind\n  if (isDef(data) && isDef(data.is)) {\n    tag = data.is;\n  }\n  if (!tag) {\n    // in case of component :is set to falsy value\n    return createEmptyVNode()\n  }\n  // warn against non-primitive key\n  if (false\n  ) {\n    {\n      warn(\n        'Avoid using non-primitive value as key, ' +\n        'use string/number value instead.',\n        context\n      );\n    }\n  }\n  // support single function children as default scoped slot\n  if (Array.isArray(children) &&\n    typeof children[0] === 'function'\n  ) {\n    data = data || {};\n    data.scopedSlots = { default: children[0] };\n    children.length = 0;\n  }\n  if (normalizationType === ALWAYS_NORMALIZE) {\n    children = normalizeChildren(children);\n  } else if (normalizationType === SIMPLE_NORMALIZE) {\n    children = simpleNormalizeChildren(children);\n  }\n  var vnode, ns;\n  if (typeof tag === 'string') {\n    var Ctor;\n    ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\n    if (config.isReservedTag(tag)) {\n      // platform built-in elements\n      vnode = new VNode(\n        config.parsePlatformTagName(tag), data, children,\n        undefined, undefined, context\n      );\n    } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\n      // component\n      vnode = createComponent(Ctor, data, context, children, tag);\n    } else {\n      // unknown or unlisted namespaced elements\n      // check at runtime because it may get assigned a namespace when its\n      // parent normalizes children\n      vnode = new VNode(\n        tag, data, children,\n        undefined, undefined, context\n      );\n    }\n  } else {\n    // direct component options / constructor\n    vnode = createComponent(tag, data, context, children);\n  }\n  if (Array.isArray(vnode)) {\n    return vnode\n  } else if (isDef(vnode)) {\n    if (isDef(ns)) { applyNS(vnode, ns); }\n    if (isDef(data)) { registerDeepBindings(data); }\n    return vnode\n  } else {\n    return createEmptyVNode()\n  }\n}\n\nfunction applyNS (vnode, ns, force) {\n  vnode.ns = ns;\n  if (vnode.tag === 'foreignObject') {\n    // use default namespace inside foreignObject\n    ns = undefined;\n    force = true;\n  }\n  if (isDef(vnode.children)) {\n    for (var i = 0, l = vnode.children.length; i < l; i++) {\n      var child = vnode.children[i];\n      if (isDef(child.tag) && (\n        isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\n        applyNS(child, ns, force);\n      }\n    }\n  }\n}\n\n// ref #5318\n// necessary to ensure parent re-render when deep bindings like :style and\n// :class are used on slot nodes\nfunction registerDeepBindings (data) {\n  if (isObject(data.style)) {\n    traverse(data.style);\n  }\n  if (isObject(data.class)) {\n    traverse(data.class);\n  }\n}\n\n/*  */\n\nfunction initRender (vm) {\n  vm._vnode = null; // the root of the child tree\n  vm._staticTrees = null; // v-once cached trees\n  var options = vm.$options;\n  var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree\n  var renderContext = parentVnode && parentVnode.context;\n  vm.$slots = resolveSlots(options._renderChildren, renderContext);\n  vm.$scopedSlots = emptyObject;\n  // bind the createElement fn to this instance\n  // so that we get proper render context inside it.\n  // args order: tag, data, children, normalizationType, alwaysNormalize\n  // internal version is used by render functions compiled from templates\n  vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\n  // normalization is always applied for the public version, used in\n  // user-written render functions.\n  vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\n\n  // $attrs & $listeners are exposed for easier HOC creation.\n  // they need to be reactive so that HOCs using them are always updated\n  var parentData = parentVnode && parentVnode.data;\n\n  /* istanbul ignore else */\n  if (false) {\n    defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {\n      !isUpdatingChildComponent && warn(\"$attrs is readonly.\", vm);\n    }, true);\n    defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {\n      !isUpdatingChildComponent && warn(\"$listeners is readonly.\", vm);\n    }, true);\n  } else {\n    defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, null, true);\n    defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, null, true);\n  }\n}\n\nvar currentRenderingInstance = null;\n\nfunction renderMixin (Vue) {\n  // install runtime convenience helpers\n  installRenderHelpers(Vue.prototype);\n\n  Vue.prototype.$nextTick = function (fn) {\n    return nextTick(fn, this)\n  };\n\n  Vue.prototype._render = function () {\n    var vm = this;\n    var ref = vm.$options;\n    var render = ref.render;\n    var _parentVnode = ref._parentVnode;\n\n    if (_parentVnode) {\n      vm.$scopedSlots = normalizeScopedSlots(\n        _parentVnode.data.scopedSlots,\n        vm.$slots,\n        vm.$scopedSlots\n      );\n    }\n\n    // set parent vnode. this allows render functions to have access\n    // to the data on the placeholder node.\n    vm.$vnode = _parentVnode;\n    // render self\n    var vnode;\n    try {\n      // There's no need to maintain a stack becaues all render fns are called\n      // separately from one another. Nested component's render fns are called\n      // when parent component is patched.\n      currentRenderingInstance = vm;\n      vnode = render.call(vm._renderProxy, vm.$createElement);\n    } catch (e) {\n      handleError(e, vm, \"render\");\n      // return error render result,\n      // or previous vnode to prevent render error causing blank component\n      /* istanbul ignore else */\n      if (false) {\n        try {\n          vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\n        } catch (e) {\n          handleError(e, vm, \"renderError\");\n          vnode = vm._vnode;\n        }\n      } else {\n        vnode = vm._vnode;\n      }\n    } finally {\n      currentRenderingInstance = null;\n    }\n    // if the returned array contains only a single node, allow it\n    if (Array.isArray(vnode) && vnode.length === 1) {\n      vnode = vnode[0];\n    }\n    // return empty vnode in case the render function errored out\n    if (!(vnode instanceof VNode)) {\n      if (false) {\n        warn(\n          'Multiple root nodes returned from render function. Render function ' +\n          'should return a single root node.',\n          vm\n        );\n      }\n      vnode = createEmptyVNode();\n    }\n    // set parent\n    vnode.parent = _parentVnode;\n    return vnode\n  };\n}\n\n/*  */\n\nfunction ensureCtor (comp, base) {\n  if (\n    comp.__esModule ||\n    (hasSymbol && comp[Symbol.toStringTag] === 'Module')\n  ) {\n    comp = comp.default;\n  }\n  return isObject(comp)\n    ? base.extend(comp)\n    : comp\n}\n\nfunction createAsyncPlaceholder (\n  factory,\n  data,\n  context,\n  children,\n  tag\n) {\n  var node = createEmptyVNode();\n  node.asyncFactory = factory;\n  node.asyncMeta = { data: data, context: context, children: children, tag: tag };\n  return node\n}\n\nfunction resolveAsyncComponent (\n  factory,\n  baseCtor\n) {\n  if (isTrue(factory.error) && isDef(factory.errorComp)) {\n    return factory.errorComp\n  }\n\n  if (isDef(factory.resolved)) {\n    return factory.resolved\n  }\n\n  var owner = currentRenderingInstance;\n  if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\n    // already pending\n    factory.owners.push(owner);\n  }\n\n  if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\n    return factory.loadingComp\n  }\n\n  if (owner && !isDef(factory.owners)) {\n    var owners = factory.owners = [owner];\n    var sync = true;\n    var timerLoading = null;\n    var timerTimeout = null\n\n    ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });\n\n    var forceRender = function (renderCompleted) {\n      for (var i = 0, l = owners.length; i < l; i++) {\n        (owners[i]).$forceUpdate();\n      }\n\n      if (renderCompleted) {\n        owners.length = 0;\n        if (timerLoading !== null) {\n          clearTimeout(timerLoading);\n          timerLoading = null;\n        }\n        if (timerTimeout !== null) {\n          clearTimeout(timerTimeout);\n          timerTimeout = null;\n        }\n      }\n    };\n\n    var resolve = once(function (res) {\n      // cache resolved\n      factory.resolved = ensureCtor(res, baseCtor);\n      // invoke callbacks only if this is not a synchronous resolve\n      // (async resolves are shimmed as synchronous during SSR)\n      if (!sync) {\n        forceRender(true);\n      } else {\n        owners.length = 0;\n      }\n    });\n\n    var reject = once(function (reason) {\n      \"production\" !== 'production' && warn(\n        \"Failed to resolve async component: \" + (String(factory)) +\n        (reason ? (\"\\nReason: \" + reason) : '')\n      );\n      if (isDef(factory.errorComp)) {\n        factory.error = true;\n        forceRender(true);\n      }\n    });\n\n    var res = factory(resolve, reject);\n\n    if (isObject(res)) {\n      if (isPromise(res)) {\n        // () => Promise\n        if (isUndef(factory.resolved)) {\n          res.then(resolve, reject);\n        }\n      } else if (isPromise(res.component)) {\n        res.component.then(resolve, reject);\n\n        if (isDef(res.error)) {\n          factory.errorComp = ensureCtor(res.error, baseCtor);\n        }\n\n        if (isDef(res.loading)) {\n          factory.loadingComp = ensureCtor(res.loading, baseCtor);\n          if (res.delay === 0) {\n            factory.loading = true;\n          } else {\n            timerLoading = setTimeout(function () {\n              timerLoading = null;\n              if (isUndef(factory.resolved) && isUndef(factory.error)) {\n                factory.loading = true;\n                forceRender(false);\n              }\n            }, res.delay || 200);\n          }\n        }\n\n        if (isDef(res.timeout)) {\n          timerTimeout = setTimeout(function () {\n            timerTimeout = null;\n            if (isUndef(factory.resolved)) {\n              reject(\n                 false\n                  ? (\"timeout (\" + (res.timeout) + \"ms)\")\n                  : null\n              );\n            }\n          }, res.timeout);\n        }\n      }\n    }\n\n    sync = false;\n    // return in case resolved synchronously\n    return factory.loading\n      ? factory.loadingComp\n      : factory.resolved\n  }\n}\n\n/*  */\n\nfunction isAsyncPlaceholder (node) {\n  return node.isComment && node.asyncFactory\n}\n\n/*  */\n\nfunction getFirstComponentChild (children) {\n  if (Array.isArray(children)) {\n    for (var i = 0; i < children.length; i++) {\n      var c = children[i];\n      if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\n        return c\n      }\n    }\n  }\n}\n\n/*  */\n\n/*  */\n\nfunction initEvents (vm) {\n  vm._events = Object.create(null);\n  vm._hasHookEvent = false;\n  // init parent attached events\n  var listeners = vm.$options._parentListeners;\n  if (listeners) {\n    updateComponentListeners(vm, listeners);\n  }\n}\n\nvar target;\n\nfunction add (event, fn) {\n  target.$on(event, fn);\n}\n\nfunction remove$1 (event, fn) {\n  target.$off(event, fn);\n}\n\nfunction createOnceHandler (event, fn) {\n  var _target = target;\n  return function onceHandler () {\n    var res = fn.apply(null, arguments);\n    if (res !== null) {\n      _target.$off(event, onceHandler);\n    }\n  }\n}\n\nfunction updateComponentListeners (\n  vm,\n  listeners,\n  oldListeners\n) {\n  target = vm;\n  updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);\n  target = undefined;\n}\n\nfunction eventsMixin (Vue) {\n  var hookRE = /^hook:/;\n  Vue.prototype.$on = function (event, fn) {\n    var vm = this;\n    if (Array.isArray(event)) {\n      for (var i = 0, l = event.length; i < l; i++) {\n        vm.$on(event[i], fn);\n      }\n    } else {\n      (vm._events[event] || (vm._events[event] = [])).push(fn);\n      // optimize hook:event cost by using a boolean flag marked at registration\n      // instead of a hash lookup\n      if (hookRE.test(event)) {\n        vm._hasHookEvent = true;\n      }\n    }\n    return vm\n  };\n\n  Vue.prototype.$once = function (event, fn) {\n    var vm = this;\n    function on () {\n      vm.$off(event, on);\n      fn.apply(vm, arguments);\n    }\n    on.fn = fn;\n    vm.$on(event, on);\n    return vm\n  };\n\n  Vue.prototype.$off = function (event, fn) {\n    var vm = this;\n    // all\n    if (!arguments.length) {\n      vm._events = Object.create(null);\n      return vm\n    }\n    // array of events\n    if (Array.isArray(event)) {\n      for (var i$1 = 0, l = event.length; i$1 < l; i$1++) {\n        vm.$off(event[i$1], fn);\n      }\n      return vm\n    }\n    // specific event\n    var cbs = vm._events[event];\n    if (!cbs) {\n      return vm\n    }\n    if (!fn) {\n      vm._events[event] = null;\n      return vm\n    }\n    // specific handler\n    var cb;\n    var i = cbs.length;\n    while (i--) {\n      cb = cbs[i];\n      if (cb === fn || cb.fn === fn) {\n        cbs.splice(i, 1);\n        break\n      }\n    }\n    return vm\n  };\n\n  Vue.prototype.$emit = function (event) {\n    var vm = this;\n    if (false) {\n      var lowerCaseEvent = event.toLowerCase();\n      if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\n        tip(\n          \"Event \\\"\" + lowerCaseEvent + \"\\\" is emitted in component \" +\n          (formatComponentName(vm)) + \" but the handler is registered for \\\"\" + event + \"\\\". \" +\n          \"Note that HTML attributes are case-insensitive and you cannot use \" +\n          \"v-on to listen to camelCase events when using in-DOM templates. \" +\n          \"You should probably use \\\"\" + (hyphenate(event)) + \"\\\" instead of \\\"\" + event + \"\\\".\"\n        );\n      }\n    }\n    var cbs = vm._events[event];\n    if (cbs) {\n      cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n      var args = toArray(arguments, 1);\n      var info = \"event handler for \\\"\" + event + \"\\\"\";\n      for (var i = 0, l = cbs.length; i < l; i++) {\n        invokeWithErrorHandling(cbs[i], vm, args, vm, info);\n      }\n    }\n    return vm\n  };\n}\n\n/*  */\n\nvar activeInstance = null;\nvar isUpdatingChildComponent = false;\n\nfunction setActiveInstance(vm) {\n  var prevActiveInstance = activeInstance;\n  activeInstance = vm;\n  return function () {\n    activeInstance = prevActiveInstance;\n  }\n}\n\nfunction initLifecycle (vm) {\n  var options = vm.$options;\n\n  // locate first non-abstract parent\n  var parent = options.parent;\n  if (parent && !options.abstract) {\n    while (parent.$options.abstract && parent.$parent) {\n      parent = parent.$parent;\n    }\n    parent.$children.push(vm);\n  }\n\n  vm.$parent = parent;\n  vm.$root = parent ? parent.$root : vm;\n\n  vm.$children = [];\n  vm.$refs = {};\n\n  vm._watcher = null;\n  vm._inactive = null;\n  vm._directInactive = false;\n  vm._isMounted = false;\n  vm._isDestroyed = false;\n  vm._isBeingDestroyed = false;\n}\n\nfunction lifecycleMixin (Vue) {\n  Vue.prototype._update = function (vnode, hydrating) {\n    var vm = this;\n    var prevEl = vm.$el;\n    var prevVnode = vm._vnode;\n    var restoreActiveInstance = setActiveInstance(vm);\n    vm._vnode = vnode;\n    // Vue.prototype.__patch__ is injected in entry points\n    // based on the rendering backend used.\n    if (!prevVnode) {\n      // initial render\n      vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);\n    } else {\n      // updates\n      vm.$el = vm.__patch__(prevVnode, vnode);\n    }\n    restoreActiveInstance();\n    // update __vue__ reference\n    if (prevEl) {\n      prevEl.__vue__ = null;\n    }\n    if (vm.$el) {\n      vm.$el.__vue__ = vm;\n    }\n    // if parent is an HOC, update its $el as well\n    if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\n      vm.$parent.$el = vm.$el;\n    }\n    // updated hook is called by the scheduler to ensure that children are\n    // updated in a parent's updated hook.\n  };\n\n  Vue.prototype.$forceUpdate = function () {\n    var vm = this;\n    if (vm._watcher) {\n      vm._watcher.update();\n    }\n  };\n\n  Vue.prototype.$destroy = function () {\n    var vm = this;\n    if (vm._isBeingDestroyed) {\n      return\n    }\n    callHook(vm, 'beforeDestroy');\n    vm._isBeingDestroyed = true;\n    // remove self from parent\n    var parent = vm.$parent;\n    if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n      remove(parent.$children, vm);\n    }\n    // teardown watchers\n    if (vm._watcher) {\n      vm._watcher.teardown();\n    }\n    var i = vm._watchers.length;\n    while (i--) {\n      vm._watchers[i].teardown();\n    }\n    // remove reference from data ob\n    // frozen object may not have observer.\n    if (vm._data.__ob__) {\n      vm._data.__ob__.vmCount--;\n    }\n    // call the last hook...\n    vm._isDestroyed = true;\n    // invoke destroy hooks on current rendered tree\n    vm.__patch__(vm._vnode, null);\n    // fire destroyed hook\n    callHook(vm, 'destroyed');\n    // turn off all instance listeners.\n    vm.$off();\n    // remove __vue__ reference\n    if (vm.$el) {\n      vm.$el.__vue__ = null;\n    }\n    // release circular reference (#6759)\n    if (vm.$vnode) {\n      vm.$vnode.parent = null;\n    }\n  };\n}\n\nfunction mountComponent (\n  vm,\n  el,\n  hydrating\n) {\n  vm.$el = el;\n  if (!vm.$options.render) {\n    vm.$options.render = createEmptyVNode;\n    if (false) {\n      /* istanbul ignore if */\n      if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\n        vm.$options.el || el) {\n        warn(\n          'You are using the runtime-only build of Vue where the template ' +\n          'compiler is not available. Either pre-compile the templates into ' +\n          'render functions, or use the compiler-included build.',\n          vm\n        );\n      } else {\n        warn(\n          'Failed to mount component: template or render function not defined.',\n          vm\n        );\n      }\n    }\n  }\n  callHook(vm, 'beforeMount');\n\n  var updateComponent;\n  /* istanbul ignore if */\n  if (false) {\n    updateComponent = function () {\n      var name = vm._name;\n      var id = vm._uid;\n      var startTag = \"vue-perf-start:\" + id;\n      var endTag = \"vue-perf-end:\" + id;\n\n      mark(startTag);\n      var vnode = vm._render();\n      mark(endTag);\n      measure((\"vue \" + name + \" render\"), startTag, endTag);\n\n      mark(startTag);\n      vm._update(vnode, hydrating);\n      mark(endTag);\n      measure((\"vue \" + name + \" patch\"), startTag, endTag);\n    };\n  } else {\n    updateComponent = function () {\n      vm._update(vm._render(), hydrating);\n    };\n  }\n\n  // we set this to vm._watcher inside the watcher's constructor\n  // since the watcher's initial patch may call $forceUpdate (e.g. inside child\n  // component's mounted hook), which relies on vm._watcher being already defined\n  new Watcher(vm, updateComponent, noop, {\n    before: function before () {\n      if (vm._isMounted && !vm._isDestroyed) {\n        callHook(vm, 'beforeUpdate');\n      }\n    }\n  }, true /* isRenderWatcher */);\n  hydrating = false;\n\n  // manually mounted instance, call mounted on self\n  // mounted is called for render-created child components in its inserted hook\n  if (vm.$vnode == null) {\n    vm._isMounted = true;\n    callHook(vm, 'mounted');\n  }\n  return vm\n}\n\nfunction updateChildComponent (\n  vm,\n  propsData,\n  listeners,\n  parentVnode,\n  renderChildren\n) {\n  if (false) {\n    isUpdatingChildComponent = true;\n  }\n\n  // determine whether component has slot children\n  // we need to do this before overwriting $options._renderChildren.\n\n  // check if there are dynamic scopedSlots (hand-written or compiled but with\n  // dynamic slot names). Static scoped slots compiled from template has the\n  // \"$stable\" marker.\n  var newScopedSlots = parentVnode.data.scopedSlots;\n  var oldScopedSlots = vm.$scopedSlots;\n  var hasDynamicScopedSlot = !!(\n    (newScopedSlots && !newScopedSlots.$stable) ||\n    (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||\n    (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)\n  );\n\n  // Any static slot children from the parent may have changed during parent's\n  // update. Dynamic scoped slots may also have changed. In such cases, a forced\n  // update is necessary to ensure correctness.\n  var needsForceUpdate = !!(\n    renderChildren ||               // has new static slots\n    vm.$options._renderChildren ||  // has old static slots\n    hasDynamicScopedSlot\n  );\n\n  vm.$options._parentVnode = parentVnode;\n  vm.$vnode = parentVnode; // update vm's placeholder node without re-render\n\n  if (vm._vnode) { // update child tree's parent\n    vm._vnode.parent = parentVnode;\n  }\n  vm.$options._renderChildren = renderChildren;\n\n  // update $attrs and $listeners hash\n  // these are also reactive so they may trigger child update if the child\n  // used them during render\n  vm.$attrs = parentVnode.data.attrs || emptyObject;\n  vm.$listeners = listeners || emptyObject;\n\n  // update props\n  if (propsData && vm.$options.props) {\n    toggleObserving(false);\n    var props = vm._props;\n    var propKeys = vm.$options._propKeys || [];\n    for (var i = 0; i < propKeys.length; i++) {\n      var key = propKeys[i];\n      var propOptions = vm.$options.props; // wtf flow?\n      props[key] = validateProp(key, propOptions, propsData, vm);\n    }\n    toggleObserving(true);\n    // keep a copy of raw propsData\n    vm.$options.propsData = propsData;\n  }\n\n  // update listeners\n  listeners = listeners || emptyObject;\n  var oldListeners = vm.$options._parentListeners;\n  vm.$options._parentListeners = listeners;\n  updateComponentListeners(vm, listeners, oldListeners);\n\n  // resolve slots + force update if has children\n  if (needsForceUpdate) {\n    vm.$slots = resolveSlots(renderChildren, parentVnode.context);\n    vm.$forceUpdate();\n  }\n\n  if (false) {\n    isUpdatingChildComponent = false;\n  }\n}\n\nfunction isInInactiveTree (vm) {\n  while (vm && (vm = vm.$parent)) {\n    if (vm._inactive) { return true }\n  }\n  return false\n}\n\nfunction activateChildComponent (vm, direct) {\n  if (direct) {\n    vm._directInactive = false;\n    if (isInInactiveTree(vm)) {\n      return\n    }\n  } else if (vm._directInactive) {\n    return\n  }\n  if (vm._inactive || vm._inactive === null) {\n    vm._inactive = false;\n    for (var i = 0; i < vm.$children.length; i++) {\n      activateChildComponent(vm.$children[i]);\n    }\n    callHook(vm, 'activated');\n  }\n}\n\nfunction deactivateChildComponent (vm, direct) {\n  if (direct) {\n    vm._directInactive = true;\n    if (isInInactiveTree(vm)) {\n      return\n    }\n  }\n  if (!vm._inactive) {\n    vm._inactive = true;\n    for (var i = 0; i < vm.$children.length; i++) {\n      deactivateChildComponent(vm.$children[i]);\n    }\n    callHook(vm, 'deactivated');\n  }\n}\n\nfunction callHook (vm, hook) {\n  // #7573 disable dep collection when invoking lifecycle hooks\n  pushTarget();\n  var handlers = vm.$options[hook];\n  var info = hook + \" hook\";\n  if (handlers) {\n    for (var i = 0, j = handlers.length; i < j; i++) {\n      invokeWithErrorHandling(handlers[i], vm, null, vm, info);\n    }\n  }\n  if (vm._hasHookEvent) {\n    vm.$emit('hook:' + hook);\n  }\n  popTarget();\n}\n\n/*  */\n\nvar MAX_UPDATE_COUNT = 100;\n\nvar queue = [];\nvar activatedChildren = [];\nvar has = {};\nvar circular = {};\nvar waiting = false;\nvar flushing = false;\nvar index = 0;\n\n/**\n * Reset the scheduler's state.\n */\nfunction resetSchedulerState () {\n  index = queue.length = activatedChildren.length = 0;\n  has = {};\n  if (false) {\n    circular = {};\n  }\n  waiting = flushing = false;\n}\n\n// Async edge case #6566 requires saving the timestamp when event listeners are\n// attached. However, calling performance.now() has a perf overhead especially\n// if the page has thousands of event listeners. Instead, we take a timestamp\n// every time the scheduler flushes and use that for all event listeners\n// attached during that flush.\nvar currentFlushTimestamp = 0;\n\n// Async edge case fix requires storing an event listener's attach timestamp.\nvar getNow = Date.now;\n\n// Determine what event timestamp the browser is using. Annoyingly, the\n// timestamp can either be hi-res (relative to page load) or low-res\n// (relative to UNIX epoch), so in order to compare time we have to use the\n// same timestamp type when saving the flush timestamp.\n// All IE versions use low-res event timestamps, and have problematic clock\n// implementations (#9632)\nif (inBrowser && !isIE) {\n  var performance = window.performance;\n  if (\n    performance &&\n    typeof performance.now === 'function' &&\n    getNow() > document.createEvent('Event').timeStamp\n  ) {\n    // if the event timestamp, although evaluated AFTER the Date.now(), is\n    // smaller than it, it means the event is using a hi-res timestamp,\n    // and we need to use the hi-res version for event listener timestamps as\n    // well.\n    getNow = function () { return performance.now(); };\n  }\n}\n\n/**\n * Flush both queues and run the watchers.\n */\nfunction flushSchedulerQueue () {\n  currentFlushTimestamp = getNow();\n  flushing = true;\n  var watcher, id;\n\n  // Sort queue before flush.\n  // This ensures that:\n  // 1. Components are updated from parent to child. (because parent is always\n  //    created before the child)\n  // 2. A component's user watchers are run before its render watcher (because\n  //    user watchers are created before the render watcher)\n  // 3. If a component is destroyed during a parent component's watcher run,\n  //    its watchers can be skipped.\n  queue.sort(function (a, b) { return a.id - b.id; });\n\n  // do not cache length because more watchers might be pushed\n  // as we run existing watchers\n  for (index = 0; index < queue.length; index++) {\n    watcher = queue[index];\n    if (watcher.before) {\n      watcher.before();\n    }\n    id = watcher.id;\n    has[id] = null;\n    watcher.run();\n    // in dev build, check and stop circular updates.\n    if (false) {\n      circular[id] = (circular[id] || 0) + 1;\n      if (circular[id] > MAX_UPDATE_COUNT) {\n        warn(\n          'You may have an infinite update loop ' + (\n            watcher.user\n              ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\n              : \"in a component render function.\"\n          ),\n          watcher.vm\n        );\n        break\n      }\n    }\n  }\n\n  // keep copies of post queues before resetting state\n  var activatedQueue = activatedChildren.slice();\n  var updatedQueue = queue.slice();\n\n  resetSchedulerState();\n\n  // call component updated and activated hooks\n  callActivatedHooks(activatedQueue);\n  callUpdatedHooks(updatedQueue);\n\n  // devtool hook\n  /* istanbul ignore if */\n  if (devtools && config.devtools) {\n    devtools.emit('flush');\n  }\n}\n\nfunction callUpdatedHooks (queue) {\n  var i = queue.length;\n  while (i--) {\n    var watcher = queue[i];\n    var vm = watcher.vm;\n    if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\n      callHook(vm, 'updated');\n    }\n  }\n}\n\n/**\n * Queue a kept-alive component that was activated during patch.\n * The queue will be processed after the entire tree has been patched.\n */\nfunction queueActivatedComponent (vm) {\n  // setting _inactive to false here so that a render function can\n  // rely on checking whether it's in an inactive tree (e.g. router-view)\n  vm._inactive = false;\n  activatedChildren.push(vm);\n}\n\nfunction callActivatedHooks (queue) {\n  for (var i = 0; i < queue.length; i++) {\n    queue[i]._inactive = true;\n    activateChildComponent(queue[i], true /* true */);\n  }\n}\n\n/**\n * Push a watcher into the watcher queue.\n * Jobs with duplicate IDs will be skipped unless it's\n * pushed when the queue is being flushed.\n */\nfunction queueWatcher (watcher) {\n  var id = watcher.id;\n  if (has[id] == null) {\n    has[id] = true;\n    if (!flushing) {\n      queue.push(watcher);\n    } else {\n      // if already flushing, splice the watcher based on its id\n      // if already past its id, it will be run next immediately.\n      var i = queue.length - 1;\n      while (i > index && queue[i].id > watcher.id) {\n        i--;\n      }\n      queue.splice(i + 1, 0, watcher);\n    }\n    // queue the flush\n    if (!waiting) {\n      waiting = true;\n\n      if (false) {\n        flushSchedulerQueue();\n        return\n      }\n      nextTick(flushSchedulerQueue);\n    }\n  }\n}\n\n/*  */\n\n\n\nvar uid$2 = 0;\n\n/**\n * A watcher parses an expression, collects dependencies,\n * and fires callback when the expression value changes.\n * This is used for both the $watch() api and directives.\n */\nvar Watcher = function Watcher (\n  vm,\n  expOrFn,\n  cb,\n  options,\n  isRenderWatcher\n) {\n  this.vm = vm;\n  if (isRenderWatcher) {\n    vm._watcher = this;\n  }\n  vm._watchers.push(this);\n  // options\n  if (options) {\n    this.deep = !!options.deep;\n    this.user = !!options.user;\n    this.lazy = !!options.lazy;\n    this.sync = !!options.sync;\n    this.before = options.before;\n  } else {\n    this.deep = this.user = this.lazy = this.sync = false;\n  }\n  this.cb = cb;\n  this.id = ++uid$2; // uid for batching\n  this.active = true;\n  this.dirty = this.lazy; // for lazy watchers\n  this.deps = [];\n  this.newDeps = [];\n  this.depIds = new _Set();\n  this.newDepIds = new _Set();\n  this.expression =  false\n    ? expOrFn.toString()\n    : '';\n  // parse expression for getter\n  if (typeof expOrFn === 'function') {\n    this.getter = expOrFn;\n  } else {\n    this.getter = parsePath(expOrFn);\n    if (!this.getter) {\n      this.getter = noop;\n      \"production\" !== 'production' && warn(\n        \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\n        'Watcher only accepts simple dot-delimited paths. ' +\n        'For full control, use a function instead.',\n        vm\n      );\n    }\n  }\n  this.value = this.lazy\n    ? undefined\n    : this.get();\n};\n\n/**\n * Evaluate the getter, and re-collect dependencies.\n */\nWatcher.prototype.get = function get () {\n  pushTarget(this);\n  var value;\n  var vm = this.vm;\n  try {\n    value = this.getter.call(vm, vm);\n  } catch (e) {\n    if (this.user) {\n      handleError(e, vm, (\"getter for watcher \\\"\" + (this.expression) + \"\\\"\"));\n    } else {\n      throw e\n    }\n  } finally {\n    // \"touch\" every property so they are all tracked as\n    // dependencies for deep watching\n    if (this.deep) {\n      traverse(value);\n    }\n    popTarget();\n    this.cleanupDeps();\n  }\n  return value\n};\n\n/**\n * Add a dependency to this directive.\n */\nWatcher.prototype.addDep = function addDep (dep) {\n  var id = dep.id;\n  if (!this.newDepIds.has(id)) {\n    this.newDepIds.add(id);\n    this.newDeps.push(dep);\n    if (!this.depIds.has(id)) {\n      dep.addSub(this);\n    }\n  }\n};\n\n/**\n * Clean up for dependency collection.\n */\nWatcher.prototype.cleanupDeps = function cleanupDeps () {\n  var i = this.deps.length;\n  while (i--) {\n    var dep = this.deps[i];\n    if (!this.newDepIds.has(dep.id)) {\n      dep.removeSub(this);\n    }\n  }\n  var tmp = this.depIds;\n  this.depIds = this.newDepIds;\n  this.newDepIds = tmp;\n  this.newDepIds.clear();\n  tmp = this.deps;\n  this.deps = this.newDeps;\n  this.newDeps = tmp;\n  this.newDeps.length = 0;\n};\n\n/**\n * Subscriber interface.\n * Will be called when a dependency changes.\n */\nWatcher.prototype.update = function update () {\n  /* istanbul ignore else */\n  if (this.lazy) {\n    this.dirty = true;\n  } else if (this.sync) {\n    this.run();\n  } else {\n    queueWatcher(this);\n  }\n};\n\n/**\n * Scheduler job interface.\n * Will be called by the scheduler.\n */\nWatcher.prototype.run = function run () {\n  if (this.active) {\n    var value = this.get();\n    if (\n      value !== this.value ||\n      // Deep watchers and watchers on Object/Arrays should fire even\n      // when the value is the same, because the value may\n      // have mutated.\n      isObject(value) ||\n      this.deep\n    ) {\n      // set new value\n      var oldValue = this.value;\n      this.value = value;\n      if (this.user) {\n        try {\n          this.cb.call(this.vm, value, oldValue);\n        } catch (e) {\n          handleError(e, this.vm, (\"callback for watcher \\\"\" + (this.expression) + \"\\\"\"));\n        }\n      } else {\n        this.cb.call(this.vm, value, oldValue);\n      }\n    }\n  }\n};\n\n/**\n * Evaluate the value of the watcher.\n * This only gets called for lazy watchers.\n */\nWatcher.prototype.evaluate = function evaluate () {\n  this.value = this.get();\n  this.dirty = false;\n};\n\n/**\n * Depend on all deps collected by this watcher.\n */\nWatcher.prototype.depend = function depend () {\n  var i = this.deps.length;\n  while (i--) {\n    this.deps[i].depend();\n  }\n};\n\n/**\n * Remove self from all dependencies' subscriber list.\n */\nWatcher.prototype.teardown = function teardown () {\n  if (this.active) {\n    // remove self from vm's watcher list\n    // this is a somewhat expensive operation so we skip it\n    // if the vm is being destroyed.\n    if (!this.vm._isBeingDestroyed) {\n      remove(this.vm._watchers, this);\n    }\n    var i = this.deps.length;\n    while (i--) {\n      this.deps[i].removeSub(this);\n    }\n    this.active = false;\n  }\n};\n\n/*  */\n\nvar sharedPropertyDefinition = {\n  enumerable: true,\n  configurable: true,\n  get: noop,\n  set: noop\n};\n\nfunction proxy (target, sourceKey, key) {\n  sharedPropertyDefinition.get = function proxyGetter () {\n    return this[sourceKey][key]\n  };\n  sharedPropertyDefinition.set = function proxySetter (val) {\n    this[sourceKey][key] = val;\n  };\n  Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction initState (vm) {\n  vm._watchers = [];\n  var opts = vm.$options;\n  if (opts.props) { initProps(vm, opts.props); }\n  if (opts.methods) { initMethods(vm, opts.methods); }\n  if (opts.data) {\n    initData(vm);\n  } else {\n    observe(vm._data = {}, true /* asRootData */);\n  }\n  if (opts.computed) { initComputed(vm, opts.computed); }\n  if (opts.watch && opts.watch !== nativeWatch) {\n    initWatch(vm, opts.watch);\n  }\n}\n\nfunction initProps (vm, propsOptions) {\n  var propsData = vm.$options.propsData || {};\n  var props = vm._props = {};\n  // cache prop keys so that future props updates can iterate using Array\n  // instead of dynamic object key enumeration.\n  var keys = vm.$options._propKeys = [];\n  var isRoot = !vm.$parent;\n  // root instance props should be converted\n  if (!isRoot) {\n    toggleObserving(false);\n  }\n  var loop = function ( key ) {\n    keys.push(key);\n    var value = validateProp(key, propsOptions, propsData, vm);\n    /* istanbul ignore else */\n    if (false) {\n      var hyphenatedKey = hyphenate(key);\n      if (isReservedAttribute(hyphenatedKey) ||\n          config.isReservedAttr(hyphenatedKey)) {\n        warn(\n          (\"\\\"\" + hyphenatedKey + \"\\\" is a reserved attribute and cannot be used as component prop.\"),\n          vm\n        );\n      }\n      defineReactive$$1(props, key, value, function () {\n        if (!isRoot && !isUpdatingChildComponent) {\n          warn(\n            \"Avoid mutating a prop directly since the value will be \" +\n            \"overwritten whenever the parent component re-renders. \" +\n            \"Instead, use a data or computed property based on the prop's \" +\n            \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\n            vm\n          );\n        }\n      });\n    } else {\n      defineReactive$$1(props, key, value);\n    }\n    // static props are already proxied on the component's prototype\n    // during Vue.extend(). We only need to proxy props defined at\n    // instantiation here.\n    if (!(key in vm)) {\n      proxy(vm, \"_props\", key);\n    }\n  };\n\n  for (var key in propsOptions) loop( key );\n  toggleObserving(true);\n}\n\nfunction initData (vm) {\n  var data = vm.$options.data;\n  data = vm._data = typeof data === 'function'\n    ? getData(data, vm)\n    : data || {};\n  if (!isPlainObject(data)) {\n    data = {};\n    \"production\" !== 'production' && warn(\n      'data functions should return an object:\\n' +\n      'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',\n      vm\n    );\n  }\n  // proxy data on instance\n  var keys = Object.keys(data);\n  var props = vm.$options.props;\n  var methods = vm.$options.methods;\n  var i = keys.length;\n  while (i--) {\n    var key = keys[i];\n    if (false) {\n      if (methods && hasOwn(methods, key)) {\n        warn(\n          (\"Method \\\"\" + key + \"\\\" has already been defined as a data property.\"),\n          vm\n        );\n      }\n    }\n    if (props && hasOwn(props, key)) {\n      \"production\" !== 'production' && warn(\n        \"The data property \\\"\" + key + \"\\\" is already declared as a prop. \" +\n        \"Use prop default value instead.\",\n        vm\n      );\n    } else if (!isReserved(key)) {\n      proxy(vm, \"_data\", key);\n    }\n  }\n  // observe data\n  observe(data, true /* asRootData */);\n}\n\nfunction getData (data, vm) {\n  // #7573 disable dep collection when invoking data getters\n  pushTarget();\n  try {\n    return data.call(vm, vm)\n  } catch (e) {\n    handleError(e, vm, \"data()\");\n    return {}\n  } finally {\n    popTarget();\n  }\n}\n\nvar computedWatcherOptions = { lazy: true };\n\nfunction initComputed (vm, computed) {\n  // $flow-disable-line\n  var watchers = vm._computedWatchers = Object.create(null);\n  // computed properties are just getters during SSR\n  var isSSR = isServerRendering();\n\n  for (var key in computed) {\n    var userDef = computed[key];\n    var getter = typeof userDef === 'function' ? userDef : userDef.get;\n    if (false) {\n      warn(\n        (\"Getter is missing for computed property \\\"\" + key + \"\\\".\"),\n        vm\n      );\n    }\n\n    if (!isSSR) {\n      // create internal watcher for the computed property.\n      watchers[key] = new Watcher(\n        vm,\n        getter || noop,\n        noop,\n        computedWatcherOptions\n      );\n    }\n\n    // component-defined computed properties are already defined on the\n    // component prototype. We only need to define computed properties defined\n    // at instantiation here.\n    if (!(key in vm)) {\n      defineComputed(vm, key, userDef);\n    } else if (false) {\n      if (key in vm.$data) {\n        warn((\"The computed property \\\"\" + key + \"\\\" is already defined in data.\"), vm);\n      } else if (vm.$options.props && key in vm.$options.props) {\n        warn((\"The computed property \\\"\" + key + \"\\\" is already defined as a prop.\"), vm);\n      }\n    }\n  }\n}\n\nfunction defineComputed (\n  target,\n  key,\n  userDef\n) {\n  var shouldCache = !isServerRendering();\n  if (typeof userDef === 'function') {\n    sharedPropertyDefinition.get = shouldCache\n      ? createComputedGetter(key)\n      : createGetterInvoker(userDef);\n    sharedPropertyDefinition.set = noop;\n  } else {\n    sharedPropertyDefinition.get = userDef.get\n      ? shouldCache && userDef.cache !== false\n        ? createComputedGetter(key)\n        : createGetterInvoker(userDef.get)\n      : noop;\n    sharedPropertyDefinition.set = userDef.set || noop;\n  }\n  if (false) {\n    sharedPropertyDefinition.set = function () {\n      warn(\n        (\"Computed property \\\"\" + key + \"\\\" was assigned to but it has no setter.\"),\n        this\n      );\n    };\n  }\n  Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction createComputedGetter (key) {\n  return function computedGetter () {\n    var watcher = this._computedWatchers && this._computedWatchers[key];\n    if (watcher) {\n      if (watcher.dirty) {\n        watcher.evaluate();\n      }\n      if (Dep.target) {\n        watcher.depend();\n      }\n      return watcher.value\n    }\n  }\n}\n\nfunction createGetterInvoker(fn) {\n  return function computedGetter () {\n    return fn.call(this, this)\n  }\n}\n\nfunction initMethods (vm, methods) {\n  var props = vm.$options.props;\n  for (var key in methods) {\n    if (false) {\n      if (typeof methods[key] !== 'function') {\n        warn(\n          \"Method \\\"\" + key + \"\\\" has type \\\"\" + (typeof methods[key]) + \"\\\" in the component definition. \" +\n          \"Did you reference the function correctly?\",\n          vm\n        );\n      }\n      if (props && hasOwn(props, key)) {\n        warn(\n          (\"Method \\\"\" + key + \"\\\" has already been defined as a prop.\"),\n          vm\n        );\n      }\n      if ((key in vm) && isReserved(key)) {\n        warn(\n          \"Method \\\"\" + key + \"\\\" conflicts with an existing Vue instance method. \" +\n          \"Avoid defining component methods that start with _ or $.\"\n        );\n      }\n    }\n    vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);\n  }\n}\n\nfunction initWatch (vm, watch) {\n  for (var key in watch) {\n    var handler = watch[key];\n    if (Array.isArray(handler)) {\n      for (var i = 0; i < handler.length; i++) {\n        createWatcher(vm, key, handler[i]);\n      }\n    } else {\n      createWatcher(vm, key, handler);\n    }\n  }\n}\n\nfunction createWatcher (\n  vm,\n  expOrFn,\n  handler,\n  options\n) {\n  if (isPlainObject(handler)) {\n    options = handler;\n    handler = handler.handler;\n  }\n  if (typeof handler === 'string') {\n    handler = vm[handler];\n  }\n  return vm.$watch(expOrFn, handler, options)\n}\n\nfunction stateMixin (Vue) {\n  // flow somehow has problems with directly declared definition object\n  // when using Object.defineProperty, so we have to procedurally build up\n  // the object here.\n  var dataDef = {};\n  dataDef.get = function () { return this._data };\n  var propsDef = {};\n  propsDef.get = function () { return this._props };\n  if (false) {\n    dataDef.set = function () {\n      warn(\n        'Avoid replacing instance root $data. ' +\n        'Use nested data properties instead.',\n        this\n      );\n    };\n    propsDef.set = function () {\n      warn(\"$props is readonly.\", this);\n    };\n  }\n  Object.defineProperty(Vue.prototype, '$data', dataDef);\n  Object.defineProperty(Vue.prototype, '$props', propsDef);\n\n  Vue.prototype.$set = set;\n  Vue.prototype.$delete = del;\n\n  Vue.prototype.$watch = function (\n    expOrFn,\n    cb,\n    options\n  ) {\n    var vm = this;\n    if (isPlainObject(cb)) {\n      return createWatcher(vm, expOrFn, cb, options)\n    }\n    options = options || {};\n    options.user = true;\n    var watcher = new Watcher(vm, expOrFn, cb, options);\n    if (options.immediate) {\n      try {\n        cb.call(vm, watcher.value);\n      } catch (error) {\n        handleError(error, vm, (\"callback for immediate watcher \\\"\" + (watcher.expression) + \"\\\"\"));\n      }\n    }\n    return function unwatchFn () {\n      watcher.teardown();\n    }\n  };\n}\n\n/*  */\n\nvar uid$3 = 0;\n\nfunction initMixin (Vue) {\n  Vue.prototype._init = function (options) {\n    var vm = this;\n    // a uid\n    vm._uid = uid$3++;\n\n    var startTag, endTag;\n    /* istanbul ignore if */\n    if (false) {\n      startTag = \"vue-perf-start:\" + (vm._uid);\n      endTag = \"vue-perf-end:\" + (vm._uid);\n      mark(startTag);\n    }\n\n    // a flag to avoid this being observed\n    vm._isVue = true;\n    // merge options\n    if (options && options._isComponent) {\n      // optimize internal component instantiation\n      // since dynamic options merging is pretty slow, and none of the\n      // internal component options needs special treatment.\n      initInternalComponent(vm, options);\n    } else {\n      vm.$options = mergeOptions(\n        resolveConstructorOptions(vm.constructor),\n        options || {},\n        vm\n      );\n    }\n    /* istanbul ignore else */\n    if (false) {\n      initProxy(vm);\n    } else {\n      vm._renderProxy = vm;\n    }\n    // expose real self\n    vm._self = vm;\n    initLifecycle(vm);\n    initEvents(vm);\n    initRender(vm);\n    callHook(vm, 'beforeCreate');\n    initInjections(vm); // resolve injections before data/props\n    initState(vm);\n    initProvide(vm); // resolve provide after data/props\n    callHook(vm, 'created');\n\n    /* istanbul ignore if */\n    if (false) {\n      vm._name = formatComponentName(vm, false);\n      mark(endTag);\n      measure((\"vue \" + (vm._name) + \" init\"), startTag, endTag);\n    }\n\n    if (vm.$options.el) {\n      vm.$mount(vm.$options.el);\n    }\n  };\n}\n\nfunction initInternalComponent (vm, options) {\n  var opts = vm.$options = Object.create(vm.constructor.options);\n  // doing this because it's faster than dynamic enumeration.\n  var parentVnode = options._parentVnode;\n  opts.parent = options.parent;\n  opts._parentVnode = parentVnode;\n\n  var vnodeComponentOptions = parentVnode.componentOptions;\n  opts.propsData = vnodeComponentOptions.propsData;\n  opts._parentListeners = vnodeComponentOptions.listeners;\n  opts._renderChildren = vnodeComponentOptions.children;\n  opts._componentTag = vnodeComponentOptions.tag;\n\n  if (options.render) {\n    opts.render = options.render;\n    opts.staticRenderFns = options.staticRenderFns;\n  }\n}\n\nfunction resolveConstructorOptions (Ctor) {\n  var options = Ctor.options;\n  if (Ctor.super) {\n    var superOptions = resolveConstructorOptions(Ctor.super);\n    var cachedSuperOptions = Ctor.superOptions;\n    if (superOptions !== cachedSuperOptions) {\n      // super option changed,\n      // need to resolve new options.\n      Ctor.superOptions = superOptions;\n      // check if there are any late-modified/attached options (#4976)\n      var modifiedOptions = resolveModifiedOptions(Ctor);\n      // update base extend options\n      if (modifiedOptions) {\n        extend(Ctor.extendOptions, modifiedOptions);\n      }\n      options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\n      if (options.name) {\n        options.components[options.name] = Ctor;\n      }\n    }\n  }\n  return options\n}\n\nfunction resolveModifiedOptions (Ctor) {\n  var modified;\n  var latest = Ctor.options;\n  var sealed = Ctor.sealedOptions;\n  for (var key in latest) {\n    if (latest[key] !== sealed[key]) {\n      if (!modified) { modified = {}; }\n      modified[key] = latest[key];\n    }\n  }\n  return modified\n}\n\nfunction Vue (options) {\n  if (false\n  ) {\n    warn('Vue is a constructor and should be called with the `new` keyword');\n  }\n  this._init(options);\n}\n\ninitMixin(Vue);\nstateMixin(Vue);\neventsMixin(Vue);\nlifecycleMixin(Vue);\nrenderMixin(Vue);\n\n/*  */\n\nfunction initUse (Vue) {\n  Vue.use = function (plugin) {\n    var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));\n    if (installedPlugins.indexOf(plugin) > -1) {\n      return this\n    }\n\n    // additional parameters\n    var args = toArray(arguments, 1);\n    args.unshift(this);\n    if (typeof plugin.install === 'function') {\n      plugin.install.apply(plugin, args);\n    } else if (typeof plugin === 'function') {\n      plugin.apply(null, args);\n    }\n    installedPlugins.push(plugin);\n    return this\n  };\n}\n\n/*  */\n\nfunction initMixin$1 (Vue) {\n  Vue.mixin = function (mixin) {\n    this.options = mergeOptions(this.options, mixin);\n    return this\n  };\n}\n\n/*  */\n\nfunction initExtend (Vue) {\n  /**\n   * Each instance constructor, including Vue, has a unique\n   * cid. This enables us to create wrapped \"child\n   * constructors\" for prototypal inheritance and cache them.\n   */\n  Vue.cid = 0;\n  var cid = 1;\n\n  /**\n   * Class inheritance\n   */\n  Vue.extend = function (extendOptions) {\n    extendOptions = extendOptions || {};\n    var Super = this;\n    var SuperId = Super.cid;\n    var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\n    if (cachedCtors[SuperId]) {\n      return cachedCtors[SuperId]\n    }\n\n    var name = extendOptions.name || Super.options.name;\n    if (false) {\n      validateComponentName(name);\n    }\n\n    var Sub = function VueComponent (options) {\n      this._init(options);\n    };\n    Sub.prototype = Object.create(Super.prototype);\n    Sub.prototype.constructor = Sub;\n    Sub.cid = cid++;\n    Sub.options = mergeOptions(\n      Super.options,\n      extendOptions\n    );\n    Sub['super'] = Super;\n\n    // For props and computed properties, we define the proxy getters on\n    // the Vue instances at extension time, on the extended prototype. This\n    // avoids Object.defineProperty calls for each instance created.\n    if (Sub.options.props) {\n      initProps$1(Sub);\n    }\n    if (Sub.options.computed) {\n      initComputed$1(Sub);\n    }\n\n    // allow further extension/mixin/plugin usage\n    Sub.extend = Super.extend;\n    Sub.mixin = Super.mixin;\n    Sub.use = Super.use;\n\n    // create asset registers, so extended classes\n    // can have their private assets too.\n    ASSET_TYPES.forEach(function (type) {\n      Sub[type] = Super[type];\n    });\n    // enable recursive self-lookup\n    if (name) {\n      Sub.options.components[name] = Sub;\n    }\n\n    // keep a reference to the super options at extension time.\n    // later at instantiation we can check if Super's options have\n    // been updated.\n    Sub.superOptions = Super.options;\n    Sub.extendOptions = extendOptions;\n    Sub.sealedOptions = extend({}, Sub.options);\n\n    // cache constructor\n    cachedCtors[SuperId] = Sub;\n    return Sub\n  };\n}\n\nfunction initProps$1 (Comp) {\n  var props = Comp.options.props;\n  for (var key in props) {\n    proxy(Comp.prototype, \"_props\", key);\n  }\n}\n\nfunction initComputed$1 (Comp) {\n  var computed = Comp.options.computed;\n  for (var key in computed) {\n    defineComputed(Comp.prototype, key, computed[key]);\n  }\n}\n\n/*  */\n\nfunction initAssetRegisters (Vue) {\n  /**\n   * Create asset registration methods.\n   */\n  ASSET_TYPES.forEach(function (type) {\n    Vue[type] = function (\n      id,\n      definition\n    ) {\n      if (!definition) {\n        return this.options[type + 's'][id]\n      } else {\n        /* istanbul ignore if */\n        if (false) {\n          validateComponentName(id);\n        }\n        if (type === 'component' && isPlainObject(definition)) {\n          definition.name = definition.name || id;\n          definition = this.options._base.extend(definition);\n        }\n        if (type === 'directive' && typeof definition === 'function') {\n          definition = { bind: definition, update: definition };\n        }\n        this.options[type + 's'][id] = definition;\n        return definition\n      }\n    };\n  });\n}\n\n/*  */\n\n\n\nfunction getComponentName (opts) {\n  return opts && (opts.Ctor.options.name || opts.tag)\n}\n\nfunction matches (pattern, name) {\n  if (Array.isArray(pattern)) {\n    return pattern.indexOf(name) > -1\n  } else if (typeof pattern === 'string') {\n    return pattern.split(',').indexOf(name) > -1\n  } else if (isRegExp(pattern)) {\n    return pattern.test(name)\n  }\n  /* istanbul ignore next */\n  return false\n}\n\nfunction pruneCache (keepAliveInstance, filter) {\n  var cache = keepAliveInstance.cache;\n  var keys = keepAliveInstance.keys;\n  var _vnode = keepAliveInstance._vnode;\n  for (var key in cache) {\n    var cachedNode = cache[key];\n    if (cachedNode) {\n      var name = getComponentName(cachedNode.componentOptions);\n      if (name && !filter(name)) {\n        pruneCacheEntry(cache, key, keys, _vnode);\n      }\n    }\n  }\n}\n\nfunction pruneCacheEntry (\n  cache,\n  key,\n  keys,\n  current\n) {\n  var cached$$1 = cache[key];\n  if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {\n    cached$$1.componentInstance.$destroy();\n  }\n  cache[key] = null;\n  remove(keys, key);\n}\n\nvar patternTypes = [String, RegExp, Array];\n\nvar KeepAlive = {\n  name: 'keep-alive',\n  abstract: true,\n\n  props: {\n    include: patternTypes,\n    exclude: patternTypes,\n    max: [String, Number]\n  },\n\n  created: function created () {\n    this.cache = Object.create(null);\n    this.keys = [];\n  },\n\n  destroyed: function destroyed () {\n    for (var key in this.cache) {\n      pruneCacheEntry(this.cache, key, this.keys);\n    }\n  },\n\n  mounted: function mounted () {\n    var this$1 = this;\n\n    this.$watch('include', function (val) {\n      pruneCache(this$1, function (name) { return matches(val, name); });\n    });\n    this.$watch('exclude', function (val) {\n      pruneCache(this$1, function (name) { return !matches(val, name); });\n    });\n  },\n\n  render: function render () {\n    var slot = this.$slots.default;\n    var vnode = getFirstComponentChild(slot);\n    var componentOptions = vnode && vnode.componentOptions;\n    if (componentOptions) {\n      // check pattern\n      var name = getComponentName(componentOptions);\n      var ref = this;\n      var include = ref.include;\n      var exclude = ref.exclude;\n      if (\n        // not included\n        (include && (!name || !matches(include, name))) ||\n        // excluded\n        (exclude && name && matches(exclude, name))\n      ) {\n        return vnode\n      }\n\n      var ref$1 = this;\n      var cache = ref$1.cache;\n      var keys = ref$1.keys;\n      var key = vnode.key == null\n        // same constructor may get registered as different local components\n        // so cid alone is not enough (#3269)\n        ? componentOptions.Ctor.cid + (componentOptions.tag ? (\"::\" + (componentOptions.tag)) : '')\n        : vnode.key;\n      if (cache[key]) {\n        vnode.componentInstance = cache[key].componentInstance;\n        // make current key freshest\n        remove(keys, key);\n        keys.push(key);\n      } else {\n        cache[key] = vnode;\n        keys.push(key);\n        // prune oldest entry\n        if (this.max && keys.length > parseInt(this.max)) {\n          pruneCacheEntry(cache, keys[0], keys, this._vnode);\n        }\n      }\n\n      vnode.data.keepAlive = true;\n    }\n    return vnode || (slot && slot[0])\n  }\n};\n\nvar builtInComponents = {\n  KeepAlive: KeepAlive\n};\n\n/*  */\n\nfunction initGlobalAPI (Vue) {\n  // config\n  var configDef = {};\n  configDef.get = function () { return config; };\n  if (false) {\n    configDef.set = function () {\n      warn(\n        'Do not replace the Vue.config object, set individual fields instead.'\n      );\n    };\n  }\n  Object.defineProperty(Vue, 'config', configDef);\n\n  // exposed util methods.\n  // NOTE: these are not considered part of the public API - avoid relying on\n  // them unless you are aware of the risk.\n  Vue.util = {\n    warn: warn,\n    extend: extend,\n    mergeOptions: mergeOptions,\n    defineReactive: defineReactive$$1\n  };\n\n  Vue.set = set;\n  Vue.delete = del;\n  Vue.nextTick = nextTick;\n\n  // 2.6 explicit observable API\n  Vue.observable = function (obj) {\n    observe(obj);\n    return obj\n  };\n\n  Vue.options = Object.create(null);\n  ASSET_TYPES.forEach(function (type) {\n    Vue.options[type + 's'] = Object.create(null);\n  });\n\n  // this is used to identify the \"base\" constructor to extend all plain-object\n  // components with in Weex's multi-instance scenarios.\n  Vue.options._base = Vue;\n\n  extend(Vue.options.components, builtInComponents);\n\n  initUse(Vue);\n  initMixin$1(Vue);\n  initExtend(Vue);\n  initAssetRegisters(Vue);\n}\n\ninitGlobalAPI(Vue);\n\nObject.defineProperty(Vue.prototype, '$isServer', {\n  get: isServerRendering\n});\n\nObject.defineProperty(Vue.prototype, '$ssrContext', {\n  get: function get () {\n    /* istanbul ignore next */\n    return this.$vnode && this.$vnode.ssrContext\n  }\n});\n\n// expose FunctionalRenderContext for ssr runtime helper installation\nObject.defineProperty(Vue, 'FunctionalRenderContext', {\n  value: FunctionalRenderContext\n});\n\nVue.version = '2.6.10';\n\n/*  */\n\n// these are reserved for web because they are directly compiled away\n// during template compilation\nvar isReservedAttr = makeMap('style,class');\n\n// attributes that should be using props for binding\nvar acceptValue = makeMap('input,textarea,option,select,progress');\nvar mustUseProp = function (tag, type, attr) {\n  return (\n    (attr === 'value' && acceptValue(tag)) && type !== 'button' ||\n    (attr === 'selected' && tag === 'option') ||\n    (attr === 'checked' && tag === 'input') ||\n    (attr === 'muted' && tag === 'video')\n  )\n};\n\nvar isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\n\nvar isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');\n\nvar convertEnumeratedValue = function (key, value) {\n  return isFalsyAttrValue(value) || value === 'false'\n    ? 'false'\n    // allow arbitrary string value for contenteditable\n    : key === 'contenteditable' && isValidContentEditableValue(value)\n      ? value\n      : 'true'\n};\n\nvar isBooleanAttr = makeMap(\n  'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\n  'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\n  'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\n  'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\n  'required,reversed,scoped,seamless,selected,sortable,translate,' +\n  'truespeed,typemustmatch,visible'\n);\n\nvar xlinkNS = 'http://www.w3.org/1999/xlink';\n\nvar isXlink = function (name) {\n  return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'\n};\n\nvar getXlinkProp = function (name) {\n  return isXlink(name) ? name.slice(6, name.length) : ''\n};\n\nvar isFalsyAttrValue = function (val) {\n  return val == null || val === false\n};\n\n/*  */\n\nfunction genClassForVnode (vnode) {\n  var data = vnode.data;\n  var parentNode = vnode;\n  var childNode = vnode;\n  while (isDef(childNode.componentInstance)) {\n    childNode = childNode.componentInstance._vnode;\n    if (childNode && childNode.data) {\n      data = mergeClassData(childNode.data, data);\n    }\n  }\n  while (isDef(parentNode = parentNode.parent)) {\n    if (parentNode && parentNode.data) {\n      data = mergeClassData(data, parentNode.data);\n    }\n  }\n  return renderClass(data.staticClass, data.class)\n}\n\nfunction mergeClassData (child, parent) {\n  return {\n    staticClass: concat(child.staticClass, parent.staticClass),\n    class: isDef(child.class)\n      ? [child.class, parent.class]\n      : parent.class\n  }\n}\n\nfunction renderClass (\n  staticClass,\n  dynamicClass\n) {\n  if (isDef(staticClass) || isDef(dynamicClass)) {\n    return concat(staticClass, stringifyClass(dynamicClass))\n  }\n  /* istanbul ignore next */\n  return ''\n}\n\nfunction concat (a, b) {\n  return a ? b ? (a + ' ' + b) : a : (b || '')\n}\n\nfunction stringifyClass (value) {\n  if (Array.isArray(value)) {\n    return stringifyArray(value)\n  }\n  if (isObject(value)) {\n    return stringifyObject(value)\n  }\n  if (typeof value === 'string') {\n    return value\n  }\n  /* istanbul ignore next */\n  return ''\n}\n\nfunction stringifyArray (value) {\n  var res = '';\n  var stringified;\n  for (var i = 0, l = value.length; i < l; i++) {\n    if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\n      if (res) { res += ' '; }\n      res += stringified;\n    }\n  }\n  return res\n}\n\nfunction stringifyObject (value) {\n  var res = '';\n  for (var key in value) {\n    if (value[key]) {\n      if (res) { res += ' '; }\n      res += key;\n    }\n  }\n  return res\n}\n\n/*  */\n\nvar namespaceMap = {\n  svg: 'http://www.w3.org/2000/svg',\n  math: 'http://www.w3.org/1998/Math/MathML'\n};\n\nvar isHTMLTag = makeMap(\n  'html,body,base,head,link,meta,style,title,' +\n  'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\n  'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\n  'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\n  's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\n  'embed,object,param,source,canvas,script,noscript,del,ins,' +\n  'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\n  'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\n  'output,progress,select,textarea,' +\n  'details,dialog,menu,menuitem,summary,' +\n  'content,element,shadow,template,blockquote,iframe,tfoot'\n);\n\n// this map is intentionally selective, only covering SVG elements that may\n// contain child elements.\nvar isSVG = makeMap(\n  'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\n  'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\n  'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',\n  true\n);\n\nvar isPreTag = function (tag) { return tag === 'pre'; };\n\nvar isReservedTag = function (tag) {\n  return isHTMLTag(tag) || isSVG(tag)\n};\n\nfunction getTagNamespace (tag) {\n  if (isSVG(tag)) {\n    return 'svg'\n  }\n  // basic support for MathML\n  // note it doesn't support other MathML elements being component roots\n  if (tag === 'math') {\n    return 'math'\n  }\n}\n\nvar unknownElementCache = Object.create(null);\nfunction isUnknownElement (tag) {\n  /* istanbul ignore if */\n  if (!inBrowser) {\n    return true\n  }\n  if (isReservedTag(tag)) {\n    return false\n  }\n  tag = tag.toLowerCase();\n  /* istanbul ignore if */\n  if (unknownElementCache[tag] != null) {\n    return unknownElementCache[tag]\n  }\n  var el = document.createElement(tag);\n  if (tag.indexOf('-') > -1) {\n    // http://stackoverflow.com/a/28210364/1070244\n    return (unknownElementCache[tag] = (\n      el.constructor === window.HTMLUnknownElement ||\n      el.constructor === window.HTMLElement\n    ))\n  } else {\n    return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()))\n  }\n}\n\nvar isTextInputType = makeMap('text,number,password,search,email,tel,url');\n\n/*  */\n\n/**\n * Query an element selector if it's not an element already.\n */\nfunction query (el) {\n  if (typeof el === 'string') {\n    var selected = document.querySelector(el);\n    if (!selected) {\n      \"production\" !== 'production' && warn(\n        'Cannot find element: ' + el\n      );\n      return document.createElement('div')\n    }\n    return selected\n  } else {\n    return el\n  }\n}\n\n/*  */\n\nfunction createElement$1 (tagName, vnode) {\n  var elm = document.createElement(tagName);\n  if (tagName !== 'select') {\n    return elm\n  }\n  // false or null will remove the attribute but undefined will not\n  if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {\n    elm.setAttribute('multiple', 'multiple');\n  }\n  return elm\n}\n\nfunction createElementNS (namespace, tagName) {\n  return document.createElementNS(namespaceMap[namespace], tagName)\n}\n\nfunction createTextNode (text) {\n  return document.createTextNode(text)\n}\n\nfunction createComment (text) {\n  return document.createComment(text)\n}\n\nfunction insertBefore (parentNode, newNode, referenceNode) {\n  parentNode.insertBefore(newNode, referenceNode);\n}\n\nfunction removeChild (node, child) {\n  node.removeChild(child);\n}\n\nfunction appendChild (node, child) {\n  node.appendChild(child);\n}\n\nfunction parentNode (node) {\n  return node.parentNode\n}\n\nfunction nextSibling (node) {\n  return node.nextSibling\n}\n\nfunction tagName (node) {\n  return node.tagName\n}\n\nfunction setTextContent (node, text) {\n  node.textContent = text;\n}\n\nfunction setStyleScope (node, scopeId) {\n  node.setAttribute(scopeId, '');\n}\n\nvar nodeOps = /*#__PURE__*/Object.freeze({\n  createElement: createElement$1,\n  createElementNS: createElementNS,\n  createTextNode: createTextNode,\n  createComment: createComment,\n  insertBefore: insertBefore,\n  removeChild: removeChild,\n  appendChild: appendChild,\n  parentNode: parentNode,\n  nextSibling: nextSibling,\n  tagName: tagName,\n  setTextContent: setTextContent,\n  setStyleScope: setStyleScope\n});\n\n/*  */\n\nvar ref = {\n  create: function create (_, vnode) {\n    registerRef(vnode);\n  },\n  update: function update (oldVnode, vnode) {\n    if (oldVnode.data.ref !== vnode.data.ref) {\n      registerRef(oldVnode, true);\n      registerRef(vnode);\n    }\n  },\n  destroy: function destroy (vnode) {\n    registerRef(vnode, true);\n  }\n};\n\nfunction registerRef (vnode, isRemoval) {\n  var key = vnode.data.ref;\n  if (!isDef(key)) { return }\n\n  var vm = vnode.context;\n  var ref = vnode.componentInstance || vnode.elm;\n  var refs = vm.$refs;\n  if (isRemoval) {\n    if (Array.isArray(refs[key])) {\n      remove(refs[key], ref);\n    } else if (refs[key] === ref) {\n      refs[key] = undefined;\n    }\n  } else {\n    if (vnode.data.refInFor) {\n      if (!Array.isArray(refs[key])) {\n        refs[key] = [ref];\n      } else if (refs[key].indexOf(ref) < 0) {\n        // $flow-disable-line\n        refs[key].push(ref);\n      }\n    } else {\n      refs[key] = ref;\n    }\n  }\n}\n\n/**\n * Virtual DOM patching algorithm based on Snabbdom by\n * Simon Friis Vindum (@paldepind)\n * Licensed under the MIT License\n * https://github.com/paldepind/snabbdom/blob/master/LICENSE\n *\n * modified by Evan You (@yyx990803)\n *\n * Not type-checking this because this file is perf-critical and the cost\n * of making flow understand it is not worth it.\n */\n\nvar emptyNode = new VNode('', {}, []);\n\nvar hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\n\nfunction sameVnode (a, b) {\n  return (\n    a.key === b.key && (\n      (\n        a.tag === b.tag &&\n        a.isComment === b.isComment &&\n        isDef(a.data) === isDef(b.data) &&\n        sameInputType(a, b)\n      ) || (\n        isTrue(a.isAsyncPlaceholder) &&\n        a.asyncFactory === b.asyncFactory &&\n        isUndef(b.asyncFactory.error)\n      )\n    )\n  )\n}\n\nfunction sameInputType (a, b) {\n  if (a.tag !== 'input') { return true }\n  var i;\n  var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;\n  var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;\n  return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)\n}\n\nfunction createKeyToOldIdx (children, beginIdx, endIdx) {\n  var i, key;\n  var map = {};\n  for (i = beginIdx; i <= endIdx; ++i) {\n    key = children[i].key;\n    if (isDef(key)) { map[key] = i; }\n  }\n  return map\n}\n\nfunction createPatchFunction (backend) {\n  var i, j;\n  var cbs = {};\n\n  var modules = backend.modules;\n  var nodeOps = backend.nodeOps;\n\n  for (i = 0; i < hooks.length; ++i) {\n    cbs[hooks[i]] = [];\n    for (j = 0; j < modules.length; ++j) {\n      if (isDef(modules[j][hooks[i]])) {\n        cbs[hooks[i]].push(modules[j][hooks[i]]);\n      }\n    }\n  }\n\n  function emptyNodeAt (elm) {\n    return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)\n  }\n\n  function createRmCb (childElm, listeners) {\n    function remove$$1 () {\n      if (--remove$$1.listeners === 0) {\n        removeNode(childElm);\n      }\n    }\n    remove$$1.listeners = listeners;\n    return remove$$1\n  }\n\n  function removeNode (el) {\n    var parent = nodeOps.parentNode(el);\n    // element may have already been removed due to v-html / v-text\n    if (isDef(parent)) {\n      nodeOps.removeChild(parent, el);\n    }\n  }\n\n  function isUnknownElement$$1 (vnode, inVPre) {\n    return (\n      !inVPre &&\n      !vnode.ns &&\n      !(\n        config.ignoredElements.length &&\n        config.ignoredElements.some(function (ignore) {\n          return isRegExp(ignore)\n            ? ignore.test(vnode.tag)\n            : ignore === vnode.tag\n        })\n      ) &&\n      config.isUnknownElement(vnode.tag)\n    )\n  }\n\n  var creatingElmInVPre = 0;\n\n  function createElm (\n    vnode,\n    insertedVnodeQueue,\n    parentElm,\n    refElm,\n    nested,\n    ownerArray,\n    index\n  ) {\n    if (isDef(vnode.elm) && isDef(ownerArray)) {\n      // This vnode was used in a previous render!\n      // now it's used as a new node, overwriting its elm would cause\n      // potential patch errors down the road when it's used as an insertion\n      // reference node. Instead, we clone the node on-demand before creating\n      // associated DOM element for it.\n      vnode = ownerArray[index] = cloneVNode(vnode);\n    }\n\n    vnode.isRootInsert = !nested; // for transition enter check\n    if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\n      return\n    }\n\n    var data = vnode.data;\n    var children = vnode.children;\n    var tag = vnode.tag;\n    if (isDef(tag)) {\n      if (false) {\n        if (data && data.pre) {\n          creatingElmInVPre++;\n        }\n        if (isUnknownElement$$1(vnode, creatingElmInVPre)) {\n          warn(\n            'Unknown custom element: <' + tag + '> - did you ' +\n            'register the component correctly? For recursive components, ' +\n            'make sure to provide the \"name\" option.',\n            vnode.context\n          );\n        }\n      }\n\n      vnode.elm = vnode.ns\n        ? nodeOps.createElementNS(vnode.ns, tag)\n        : nodeOps.createElement(tag, vnode);\n      setScope(vnode);\n\n      /* istanbul ignore if */\n      {\n        createChildren(vnode, children, insertedVnodeQueue);\n        if (isDef(data)) {\n          invokeCreateHooks(vnode, insertedVnodeQueue);\n        }\n        insert(parentElm, vnode.elm, refElm);\n      }\n\n      if (false) {\n        creatingElmInVPre--;\n      }\n    } else if (isTrue(vnode.isComment)) {\n      vnode.elm = nodeOps.createComment(vnode.text);\n      insert(parentElm, vnode.elm, refElm);\n    } else {\n      vnode.elm = nodeOps.createTextNode(vnode.text);\n      insert(parentElm, vnode.elm, refElm);\n    }\n  }\n\n  function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n    var i = vnode.data;\n    if (isDef(i)) {\n      var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\n      if (isDef(i = i.hook) && isDef(i = i.init)) {\n        i(vnode, false /* hydrating */);\n      }\n      // after calling the init hook, if the vnode is a child component\n      // it should've created a child instance and mounted it. the child\n      // component also has set the placeholder vnode's elm.\n      // in that case we can just return the element and be done.\n      if (isDef(vnode.componentInstance)) {\n        initComponent(vnode, insertedVnodeQueue);\n        insert(parentElm, vnode.elm, refElm);\n        if (isTrue(isReactivated)) {\n          reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\n        }\n        return true\n      }\n    }\n  }\n\n  function initComponent (vnode, insertedVnodeQueue) {\n    if (isDef(vnode.data.pendingInsert)) {\n      insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\n      vnode.data.pendingInsert = null;\n    }\n    vnode.elm = vnode.componentInstance.$el;\n    if (isPatchable(vnode)) {\n      invokeCreateHooks(vnode, insertedVnodeQueue);\n      setScope(vnode);\n    } else {\n      // empty component root.\n      // skip all element-related modules except for ref (#3455)\n      registerRef(vnode);\n      // make sure to invoke the insert hook\n      insertedVnodeQueue.push(vnode);\n    }\n  }\n\n  function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n    var i;\n    // hack for #4339: a reactivated component with inner transition\n    // does not trigger because the inner node's created hooks are not called\n    // again. It's not ideal to involve module-specific logic in here but\n    // there doesn't seem to be a better way to do it.\n    var innerNode = vnode;\n    while (innerNode.componentInstance) {\n      innerNode = innerNode.componentInstance._vnode;\n      if (isDef(i = innerNode.data) && isDef(i = i.transition)) {\n        for (i = 0; i < cbs.activate.length; ++i) {\n          cbs.activate[i](emptyNode, innerNode);\n        }\n        insertedVnodeQueue.push(innerNode);\n        break\n      }\n    }\n    // unlike a newly created component,\n    // a reactivated keep-alive component doesn't insert itself\n    insert(parentElm, vnode.elm, refElm);\n  }\n\n  function insert (parent, elm, ref$$1) {\n    if (isDef(parent)) {\n      if (isDef(ref$$1)) {\n        if (nodeOps.parentNode(ref$$1) === parent) {\n          nodeOps.insertBefore(parent, elm, ref$$1);\n        }\n      } else {\n        nodeOps.appendChild(parent, elm);\n      }\n    }\n  }\n\n  function createChildren (vnode, children, insertedVnodeQueue) {\n    if (Array.isArray(children)) {\n      if (false) {\n        checkDuplicateKeys(children);\n      }\n      for (var i = 0; i < children.length; ++i) {\n        createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);\n      }\n    } else if (isPrimitive(vnode.text)) {\n      nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\n    }\n  }\n\n  function isPatchable (vnode) {\n    while (vnode.componentInstance) {\n      vnode = vnode.componentInstance._vnode;\n    }\n    return isDef(vnode.tag)\n  }\n\n  function invokeCreateHooks (vnode, insertedVnodeQueue) {\n    for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n      cbs.create[i$1](emptyNode, vnode);\n    }\n    i = vnode.data.hook; // Reuse variable\n    if (isDef(i)) {\n      if (isDef(i.create)) { i.create(emptyNode, vnode); }\n      if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }\n    }\n  }\n\n  // set scope id attribute for scoped CSS.\n  // this is implemented as a special case to avoid the overhead\n  // of going through the normal attribute patching process.\n  function setScope (vnode) {\n    var i;\n    if (isDef(i = vnode.fnScopeId)) {\n      nodeOps.setStyleScope(vnode.elm, i);\n    } else {\n      var ancestor = vnode;\n      while (ancestor) {\n        if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {\n          nodeOps.setStyleScope(vnode.elm, i);\n        }\n        ancestor = ancestor.parent;\n      }\n    }\n    // for slot content they should also get the scopeId from the host instance.\n    if (isDef(i = activeInstance) &&\n      i !== vnode.context &&\n      i !== vnode.fnContext &&\n      isDef(i = i.$options._scopeId)\n    ) {\n      nodeOps.setStyleScope(vnode.elm, i);\n    }\n  }\n\n  function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n    for (; startIdx <= endIdx; ++startIdx) {\n      createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\n    }\n  }\n\n  function invokeDestroyHook (vnode) {\n    var i, j;\n    var data = vnode.data;\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }\n      for (i = 0; i < cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }\n    }\n    if (isDef(i = vnode.children)) {\n      for (j = 0; j < vnode.children.length; ++j) {\n        invokeDestroyHook(vnode.children[j]);\n      }\n    }\n  }\n\n  function removeVnodes (parentElm, vnodes, startIdx, endIdx) {\n    for (; startIdx <= endIdx; ++startIdx) {\n      var ch = vnodes[startIdx];\n      if (isDef(ch)) {\n        if (isDef(ch.tag)) {\n          removeAndInvokeRemoveHook(ch);\n          invokeDestroyHook(ch);\n        } else { // Text node\n          removeNode(ch.elm);\n        }\n      }\n    }\n  }\n\n  function removeAndInvokeRemoveHook (vnode, rm) {\n    if (isDef(rm) || isDef(vnode.data)) {\n      var i;\n      var listeners = cbs.remove.length + 1;\n      if (isDef(rm)) {\n        // we have a recursively passed down rm callback\n        // increase the listeners count\n        rm.listeners += listeners;\n      } else {\n        // directly removing\n        rm = createRmCb(vnode.elm, listeners);\n      }\n      // recursively invoke hooks on child component root node\n      if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {\n        removeAndInvokeRemoveHook(i, rm);\n      }\n      for (i = 0; i < cbs.remove.length; ++i) {\n        cbs.remove[i](vnode, rm);\n      }\n      if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {\n        i(vnode, rm);\n      } else {\n        rm();\n      }\n    } else {\n      removeNode(vnode.elm);\n    }\n  }\n\n  function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\n    var oldStartIdx = 0;\n    var newStartIdx = 0;\n    var oldEndIdx = oldCh.length - 1;\n    var oldStartVnode = oldCh[0];\n    var oldEndVnode = oldCh[oldEndIdx];\n    var newEndIdx = newCh.length - 1;\n    var newStartVnode = newCh[0];\n    var newEndVnode = newCh[newEndIdx];\n    var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\n\n    // removeOnly is a special flag used only by <transition-group>\n    // to ensure removed elements stay in correct relative positions\n    // during leaving transitions\n    var canMove = !removeOnly;\n\n    if (false) {\n      checkDuplicateKeys(newCh);\n    }\n\n    while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n      if (isUndef(oldStartVnode)) {\n        oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left\n      } else if (isUndef(oldEndVnode)) {\n        oldEndVnode = oldCh[--oldEndIdx];\n      } else if (sameVnode(oldStartVnode, newStartVnode)) {\n        patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n        oldStartVnode = oldCh[++oldStartIdx];\n        newStartVnode = newCh[++newStartIdx];\n      } else if (sameVnode(oldEndVnode, newEndVnode)) {\n        patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n        oldEndVnode = oldCh[--oldEndIdx];\n        newEndVnode = newCh[--newEndIdx];\n      } else if (sameVnode(oldStartVnode, newEndVnode)) { // Vnode moved right\n        patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n        canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\n        oldStartVnode = oldCh[++oldStartIdx];\n        newEndVnode = newCh[--newEndIdx];\n      } else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left\n        patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n        canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n        oldEndVnode = oldCh[--oldEndIdx];\n        newStartVnode = newCh[++newStartIdx];\n      } else {\n        if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }\n        idxInOld = isDef(newStartVnode.key)\n          ? oldKeyToIdx[newStartVnode.key]\n          : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\n        if (isUndef(idxInOld)) { // New element\n          createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n        } else {\n          vnodeToMove = oldCh[idxInOld];\n          if (sameVnode(vnodeToMove, newStartVnode)) {\n            patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n            oldCh[idxInOld] = undefined;\n            canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\n          } else {\n            // same key but different element. treat as new element\n            createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n          }\n        }\n        newStartVnode = newCh[++newStartIdx];\n      }\n    }\n    if (oldStartIdx > oldEndIdx) {\n      refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\n      addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n    } else if (newStartIdx > newEndIdx) {\n      removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\n    }\n  }\n\n  function checkDuplicateKeys (children) {\n    var seenKeys = {};\n    for (var i = 0; i < children.length; i++) {\n      var vnode = children[i];\n      var key = vnode.key;\n      if (isDef(key)) {\n        if (seenKeys[key]) {\n          warn(\n            (\"Duplicate keys detected: '\" + key + \"'. This may cause an update error.\"),\n            vnode.context\n          );\n        } else {\n          seenKeys[key] = true;\n        }\n      }\n    }\n  }\n\n  function findIdxInOld (node, oldCh, start, end) {\n    for (var i = start; i < end; i++) {\n      var c = oldCh[i];\n      if (isDef(c) && sameVnode(node, c)) { return i }\n    }\n  }\n\n  function patchVnode (\n    oldVnode,\n    vnode,\n    insertedVnodeQueue,\n    ownerArray,\n    index,\n    removeOnly\n  ) {\n    if (oldVnode === vnode) {\n      return\n    }\n\n    if (isDef(vnode.elm) && isDef(ownerArray)) {\n      // clone reused vnode\n      vnode = ownerArray[index] = cloneVNode(vnode);\n    }\n\n    var elm = vnode.elm = oldVnode.elm;\n\n    if (isTrue(oldVnode.isAsyncPlaceholder)) {\n      if (isDef(vnode.asyncFactory.resolved)) {\n        hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\n      } else {\n        vnode.isAsyncPlaceholder = true;\n      }\n      return\n    }\n\n    // reuse element for static trees.\n    // note we only do this if the vnode is cloned -\n    // if the new node is not cloned it means the render functions have been\n    // reset by the hot-reload-api and we need to do a proper re-render.\n    if (isTrue(vnode.isStatic) &&\n      isTrue(oldVnode.isStatic) &&\n      vnode.key === oldVnode.key &&\n      (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))\n    ) {\n      vnode.componentInstance = oldVnode.componentInstance;\n      return\n    }\n\n    var i;\n    var data = vnode.data;\n    if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {\n      i(oldVnode, vnode);\n    }\n\n    var oldCh = oldVnode.children;\n    var ch = vnode.children;\n    if (isDef(data) && isPatchable(vnode)) {\n      for (i = 0; i < cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }\n      if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }\n    }\n    if (isUndef(vnode.text)) {\n      if (isDef(oldCh) && isDef(ch)) {\n        if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }\n      } else if (isDef(ch)) {\n        if (false) {\n          checkDuplicateKeys(ch);\n        }\n        if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }\n        addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n      } else if (isDef(oldCh)) {\n        removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n      } else if (isDef(oldVnode.text)) {\n        nodeOps.setTextContent(elm, '');\n      }\n    } else if (oldVnode.text !== vnode.text) {\n      nodeOps.setTextContent(elm, vnode.text);\n    }\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }\n    }\n  }\n\n  function invokeInsertHook (vnode, queue, initial) {\n    // delay insert hooks for component root nodes, invoke them after the\n    // element is really inserted\n    if (isTrue(initial) && isDef(vnode.parent)) {\n      vnode.parent.data.pendingInsert = queue;\n    } else {\n      for (var i = 0; i < queue.length; ++i) {\n        queue[i].data.hook.insert(queue[i]);\n      }\n    }\n  }\n\n  var hydrationBailed = false;\n  // list of modules that can skip create hook during hydration because they\n  // are already rendered on the client or has no need for initialization\n  // Note: style is excluded because it relies on initial clone for future\n  // deep updates (#7063).\n  var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\n\n  // Note: this is a browser-only function so we can assume elms are DOM nodes.\n  function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {\n    var i;\n    var tag = vnode.tag;\n    var data = vnode.data;\n    var children = vnode.children;\n    inVPre = inVPre || (data && data.pre);\n    vnode.elm = elm;\n\n    if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\n      vnode.isAsyncPlaceholder = true;\n      return true\n    }\n    // assert node match\n    if (false) {\n      if (!assertNodeMatch(elm, vnode, inVPre)) {\n        return false\n      }\n    }\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true /* hydrating */); }\n      if (isDef(i = vnode.componentInstance)) {\n        // child component. it should have hydrated its own tree.\n        initComponent(vnode, insertedVnodeQueue);\n        return true\n      }\n    }\n    if (isDef(tag)) {\n      if (isDef(children)) {\n        // empty element, allow client to pick up and populate children\n        if (!elm.hasChildNodes()) {\n          createChildren(vnode, children, insertedVnodeQueue);\n        } else {\n          // v-html and domProps: innerHTML\n          if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {\n            if (i !== elm.innerHTML) {\n              /* istanbul ignore if */\n              if (false\n              ) {\n                hydrationBailed = true;\n                console.warn('Parent: ', elm);\n                console.warn('server innerHTML: ', i);\n                console.warn('client innerHTML: ', elm.innerHTML);\n              }\n              return false\n            }\n          } else {\n            // iterate and compare children lists\n            var childrenMatch = true;\n            var childNode = elm.firstChild;\n            for (var i$1 = 0; i$1 < children.length; i$1++) {\n              if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {\n                childrenMatch = false;\n                break\n              }\n              childNode = childNode.nextSibling;\n            }\n            // if childNode is not null, it means the actual childNodes list is\n            // longer than the virtual children list.\n            if (!childrenMatch || childNode) {\n              /* istanbul ignore if */\n              if (false\n              ) {\n                hydrationBailed = true;\n                console.warn('Parent: ', elm);\n                console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\n              }\n              return false\n            }\n          }\n        }\n      }\n      if (isDef(data)) {\n        var fullInvoke = false;\n        for (var key in data) {\n          if (!isRenderedModule(key)) {\n            fullInvoke = true;\n            invokeCreateHooks(vnode, insertedVnodeQueue);\n            break\n          }\n        }\n        if (!fullInvoke && data['class']) {\n          // ensure collecting deps for deep class bindings for future updates\n          traverse(data['class']);\n        }\n      }\n    } else if (elm.data !== vnode.text) {\n      elm.data = vnode.text;\n    }\n    return true\n  }\n\n  function assertNodeMatch (node, vnode, inVPre) {\n    if (isDef(vnode.tag)) {\n      return vnode.tag.indexOf('vue-component') === 0 || (\n        !isUnknownElement$$1(vnode, inVPre) &&\n        vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())\n      )\n    } else {\n      return node.nodeType === (vnode.isComment ? 8 : 3)\n    }\n  }\n\n  return function patch (oldVnode, vnode, hydrating, removeOnly) {\n    if (isUndef(vnode)) {\n      if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }\n      return\n    }\n\n    var isInitialPatch = false;\n    var insertedVnodeQueue = [];\n\n    if (isUndef(oldVnode)) {\n      // empty mount (likely as component), create new root element\n      isInitialPatch = true;\n      createElm(vnode, insertedVnodeQueue);\n    } else {\n      var isRealElement = isDef(oldVnode.nodeType);\n      if (!isRealElement && sameVnode(oldVnode, vnode)) {\n        // patch existing root node\n        patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);\n      } else {\n        if (isRealElement) {\n          // mounting to a real element\n          // check if this is server-rendered content and if we can perform\n          // a successful hydration.\n          if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\n            oldVnode.removeAttribute(SSR_ATTR);\n            hydrating = true;\n          }\n          if (isTrue(hydrating)) {\n            if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\n              invokeInsertHook(vnode, insertedVnodeQueue, true);\n              return oldVnode\n            } else if (false) {\n              warn(\n                'The client-side rendered virtual DOM tree is not matching ' +\n                'server-rendered content. This is likely caused by incorrect ' +\n                'HTML markup, for example nesting block-level elements inside ' +\n                '<p>, or missing <tbody>. Bailing hydration and performing ' +\n                'full client-side render.'\n              );\n            }\n          }\n          // either not server-rendered, or hydration failed.\n          // create an empty node and replace it\n          oldVnode = emptyNodeAt(oldVnode);\n        }\n\n        // replacing existing element\n        var oldElm = oldVnode.elm;\n        var parentElm = nodeOps.parentNode(oldElm);\n\n        // create new node\n        createElm(\n          vnode,\n          insertedVnodeQueue,\n          // extremely rare edge case: do not insert if old element is in a\n          // leaving transition. Only happens when combining transition +\n          // keep-alive + HOCs. (#4590)\n          oldElm._leaveCb ? null : parentElm,\n          nodeOps.nextSibling(oldElm)\n        );\n\n        // update parent placeholder node element, recursively\n        if (isDef(vnode.parent)) {\n          var ancestor = vnode.parent;\n          var patchable = isPatchable(vnode);\n          while (ancestor) {\n            for (var i = 0; i < cbs.destroy.length; ++i) {\n              cbs.destroy[i](ancestor);\n            }\n            ancestor.elm = vnode.elm;\n            if (patchable) {\n              for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n                cbs.create[i$1](emptyNode, ancestor);\n              }\n              // #6513\n              // invoke insert hooks that may have been merged by create hooks.\n              // e.g. for directives that uses the \"inserted\" hook.\n              var insert = ancestor.data.hook.insert;\n              if (insert.merged) {\n                // start at index 1 to avoid re-invoking component mounted hook\n                for (var i$2 = 1; i$2 < insert.fns.length; i$2++) {\n                  insert.fns[i$2]();\n                }\n              }\n            } else {\n              registerRef(ancestor);\n            }\n            ancestor = ancestor.parent;\n          }\n        }\n\n        // destroy old node\n        if (isDef(parentElm)) {\n          removeVnodes(parentElm, [oldVnode], 0, 0);\n        } else if (isDef(oldVnode.tag)) {\n          invokeDestroyHook(oldVnode);\n        }\n      }\n    }\n\n    invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n    return vnode.elm\n  }\n}\n\n/*  */\n\nvar directives = {\n  create: updateDirectives,\n  update: updateDirectives,\n  destroy: function unbindDirectives (vnode) {\n    updateDirectives(vnode, emptyNode);\n  }\n};\n\nfunction updateDirectives (oldVnode, vnode) {\n  if (oldVnode.data.directives || vnode.data.directives) {\n    _update(oldVnode, vnode);\n  }\n}\n\nfunction _update (oldVnode, vnode) {\n  var isCreate = oldVnode === emptyNode;\n  var isDestroy = vnode === emptyNode;\n  var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\n  var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\n\n  var dirsWithInsert = [];\n  var dirsWithPostpatch = [];\n\n  var key, oldDir, dir;\n  for (key in newDirs) {\n    oldDir = oldDirs[key];\n    dir = newDirs[key];\n    if (!oldDir) {\n      // new directive, bind\n      callHook$1(dir, 'bind', vnode, oldVnode);\n      if (dir.def && dir.def.inserted) {\n        dirsWithInsert.push(dir);\n      }\n    } else {\n      // existing directive, update\n      dir.oldValue = oldDir.value;\n      dir.oldArg = oldDir.arg;\n      callHook$1(dir, 'update', vnode, oldVnode);\n      if (dir.def && dir.def.componentUpdated) {\n        dirsWithPostpatch.push(dir);\n      }\n    }\n  }\n\n  if (dirsWithInsert.length) {\n    var callInsert = function () {\n      for (var i = 0; i < dirsWithInsert.length; i++) {\n        callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n      }\n    };\n    if (isCreate) {\n      mergeVNodeHook(vnode, 'insert', callInsert);\n    } else {\n      callInsert();\n    }\n  }\n\n  if (dirsWithPostpatch.length) {\n    mergeVNodeHook(vnode, 'postpatch', function () {\n      for (var i = 0; i < dirsWithPostpatch.length; i++) {\n        callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n      }\n    });\n  }\n\n  if (!isCreate) {\n    for (key in oldDirs) {\n      if (!newDirs[key]) {\n        // no longer present, unbind\n        callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n      }\n    }\n  }\n}\n\nvar emptyModifiers = Object.create(null);\n\nfunction normalizeDirectives$1 (\n  dirs,\n  vm\n) {\n  var res = Object.create(null);\n  if (!dirs) {\n    // $flow-disable-line\n    return res\n  }\n  var i, dir;\n  for (i = 0; i < dirs.length; i++) {\n    dir = dirs[i];\n    if (!dir.modifiers) {\n      // $flow-disable-line\n      dir.modifiers = emptyModifiers;\n    }\n    res[getRawDirName(dir)] = dir;\n    dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\n  }\n  // $flow-disable-line\n  return res\n}\n\nfunction getRawDirName (dir) {\n  return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\n}\n\nfunction callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\n  var fn = dir.def && dir.def[hook];\n  if (fn) {\n    try {\n      fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n    } catch (e) {\n      handleError(e, vnode.context, (\"directive \" + (dir.name) + \" \" + hook + \" hook\"));\n    }\n  }\n}\n\nvar baseModules = [\n  ref,\n  directives\n];\n\n/*  */\n\nfunction updateAttrs (oldVnode, vnode) {\n  var opts = vnode.componentOptions;\n  if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\n    return\n  }\n  if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\n    return\n  }\n  var key, cur, old;\n  var elm = vnode.elm;\n  var oldAttrs = oldVnode.data.attrs || {};\n  var attrs = vnode.data.attrs || {};\n  // clone observed objects, as the user probably wants to mutate it\n  if (isDef(attrs.__ob__)) {\n    attrs = vnode.data.attrs = extend({}, attrs);\n  }\n\n  for (key in attrs) {\n    cur = attrs[key];\n    old = oldAttrs[key];\n    if (old !== cur) {\n      setAttr(elm, key, cur);\n    }\n  }\n  // #4391: in IE9, setting type can reset value for input[type=radio]\n  // #6666: IE/Edge forces progress value down to 1 before setting a max\n  /* istanbul ignore if */\n  if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\n    setAttr(elm, 'value', attrs.value);\n  }\n  for (key in oldAttrs) {\n    if (isUndef(attrs[key])) {\n      if (isXlink(key)) {\n        elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n      } else if (!isEnumeratedAttr(key)) {\n        elm.removeAttribute(key);\n      }\n    }\n  }\n}\n\nfunction setAttr (el, key, value) {\n  if (el.tagName.indexOf('-') > -1) {\n    baseSetAttr(el, key, value);\n  } else if (isBooleanAttr(key)) {\n    // set attribute for blank value\n    // e.g. <option disabled>Select one</option>\n    if (isFalsyAttrValue(value)) {\n      el.removeAttribute(key);\n    } else {\n      // technically allowfullscreen is a boolean attribute for <iframe>,\n      // but Flash expects a value of \"true\" when used on <embed> tag\n      value = key === 'allowfullscreen' && el.tagName === 'EMBED'\n        ? 'true'\n        : key;\n      el.setAttribute(key, value);\n    }\n  } else if (isEnumeratedAttr(key)) {\n    el.setAttribute(key, convertEnumeratedValue(key, value));\n  } else if (isXlink(key)) {\n    if (isFalsyAttrValue(value)) {\n      el.removeAttributeNS(xlinkNS, getXlinkProp(key));\n    } else {\n      el.setAttributeNS(xlinkNS, key, value);\n    }\n  } else {\n    baseSetAttr(el, key, value);\n  }\n}\n\nfunction baseSetAttr (el, key, value) {\n  if (isFalsyAttrValue(value)) {\n    el.removeAttribute(key);\n  } else {\n    // #7138: IE10 & 11 fires input event when setting placeholder on\n    // <textarea>... block the first input event and remove the blocker\n    // immediately.\n    /* istanbul ignore if */\n    if (\n      isIE && !isIE9 &&\n      el.tagName === 'TEXTAREA' &&\n      key === 'placeholder' && value !== '' && !el.__ieph\n    ) {\n      var blocker = function (e) {\n        e.stopImmediatePropagation();\n        el.removeEventListener('input', blocker);\n      };\n      el.addEventListener('input', blocker);\n      // $flow-disable-line\n      el.__ieph = true; /* IE placeholder patched */\n    }\n    el.setAttribute(key, value);\n  }\n}\n\nvar attrs = {\n  create: updateAttrs,\n  update: updateAttrs\n};\n\n/*  */\n\nfunction updateClass (oldVnode, vnode) {\n  var el = vnode.elm;\n  var data = vnode.data;\n  var oldData = oldVnode.data;\n  if (\n    isUndef(data.staticClass) &&\n    isUndef(data.class) && (\n      isUndef(oldData) || (\n        isUndef(oldData.staticClass) &&\n        isUndef(oldData.class)\n      )\n    )\n  ) {\n    return\n  }\n\n  var cls = genClassForVnode(vnode);\n\n  // handle transition classes\n  var transitionClass = el._transitionClasses;\n  if (isDef(transitionClass)) {\n    cls = concat(cls, stringifyClass(transitionClass));\n  }\n\n  // set the class\n  if (cls !== el._prevClass) {\n    el.setAttribute('class', cls);\n    el._prevClass = cls;\n  }\n}\n\nvar klass = {\n  create: updateClass,\n  update: updateClass\n};\n\n/*  */\n\nvar validDivisionCharRE = /[\\w).+\\-_$\\]]/;\n\nfunction parseFilters (exp) {\n  var inSingle = false;\n  var inDouble = false;\n  var inTemplateString = false;\n  var inRegex = false;\n  var curly = 0;\n  var square = 0;\n  var paren = 0;\n  var lastFilterIndex = 0;\n  var c, prev, i, expression, filters;\n\n  for (i = 0; i < exp.length; i++) {\n    prev = c;\n    c = exp.charCodeAt(i);\n    if (inSingle) {\n      if (c === 0x27 && prev !== 0x5C) { inSingle = false; }\n    } else if (inDouble) {\n      if (c === 0x22 && prev !== 0x5C) { inDouble = false; }\n    } else if (inTemplateString) {\n      if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; }\n    } else if (inRegex) {\n      if (c === 0x2f && prev !== 0x5C) { inRegex = false; }\n    } else if (\n      c === 0x7C && // pipe\n      exp.charCodeAt(i + 1) !== 0x7C &&\n      exp.charCodeAt(i - 1) !== 0x7C &&\n      !curly && !square && !paren\n    ) {\n      if (expression === undefined) {\n        // first filter, end of expression\n        lastFilterIndex = i + 1;\n        expression = exp.slice(0, i).trim();\n      } else {\n        pushFilter();\n      }\n    } else {\n      switch (c) {\n        case 0x22: inDouble = true; break         // \"\n        case 0x27: inSingle = true; break         // '\n        case 0x60: inTemplateString = true; break // `\n        case 0x28: paren++; break                 // (\n        case 0x29: paren--; break                 // )\n        case 0x5B: square++; break                // [\n        case 0x5D: square--; break                // ]\n        case 0x7B: curly++; break                 // {\n        case 0x7D: curly--; break                 // }\n      }\n      if (c === 0x2f) { // /\n        var j = i - 1;\n        var p = (void 0);\n        // find first non-whitespace prev char\n        for (; j >= 0; j--) {\n          p = exp.charAt(j);\n          if (p !== ' ') { break }\n        }\n        if (!p || !validDivisionCharRE.test(p)) {\n          inRegex = true;\n        }\n      }\n    }\n  }\n\n  if (expression === undefined) {\n    expression = exp.slice(0, i).trim();\n  } else if (lastFilterIndex !== 0) {\n    pushFilter();\n  }\n\n  function pushFilter () {\n    (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());\n    lastFilterIndex = i + 1;\n  }\n\n  if (filters) {\n    for (i = 0; i < filters.length; i++) {\n      expression = wrapFilter(expression, filters[i]);\n    }\n  }\n\n  return expression\n}\n\nfunction wrapFilter (exp, filter) {\n  var i = filter.indexOf('(');\n  if (i < 0) {\n    // _f: resolveFilter\n    return (\"_f(\\\"\" + filter + \"\\\")(\" + exp + \")\")\n  } else {\n    var name = filter.slice(0, i);\n    var args = filter.slice(i + 1);\n    return (\"_f(\\\"\" + name + \"\\\")(\" + exp + (args !== ')' ? ',' + args : args))\n  }\n}\n\n/*  */\n\n\n\n/* eslint-disable no-unused-vars */\nfunction baseWarn (msg, range) {\n  console.error((\"[Vue compiler]: \" + msg));\n}\n/* eslint-enable no-unused-vars */\n\nfunction pluckModuleFunction (\n  modules,\n  key\n) {\n  return modules\n    ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; })\n    : []\n}\n\nfunction addProp (el, name, value, range, dynamic) {\n  (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\n  el.plain = false;\n}\n\nfunction addAttr (el, name, value, range, dynamic) {\n  var attrs = dynamic\n    ? (el.dynamicAttrs || (el.dynamicAttrs = []))\n    : (el.attrs || (el.attrs = []));\n  attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\n  el.plain = false;\n}\n\n// add a raw attr (use this in preTransforms)\nfunction addRawAttr (el, name, value, range) {\n  el.attrsMap[name] = value;\n  el.attrsList.push(rangeSetItem({ name: name, value: value }, range));\n}\n\nfunction addDirective (\n  el,\n  name,\n  rawName,\n  value,\n  arg,\n  isDynamicArg,\n  modifiers,\n  range\n) {\n  (el.directives || (el.directives = [])).push(rangeSetItem({\n    name: name,\n    rawName: rawName,\n    value: value,\n    arg: arg,\n    isDynamicArg: isDynamicArg,\n    modifiers: modifiers\n  }, range));\n  el.plain = false;\n}\n\nfunction prependModifierMarker (symbol, name, dynamic) {\n  return dynamic\n    ? (\"_p(\" + name + \",\\\"\" + symbol + \"\\\")\")\n    : symbol + name // mark the event as captured\n}\n\nfunction addHandler (\n  el,\n  name,\n  value,\n  modifiers,\n  important,\n  warn,\n  range,\n  dynamic\n) {\n  modifiers = modifiers || emptyObject;\n  // warn prevent and passive modifier\n  /* istanbul ignore if */\n  if (\n    false\n  ) {\n    warn(\n      'passive and prevent can\\'t be used together. ' +\n      'Passive handler can\\'t prevent default event.',\n      range\n    );\n  }\n\n  // normalize click.right and click.middle since they don't actually fire\n  // this is technically browser-specific, but at least for now browsers are\n  // the only target envs that have right/middle clicks.\n  if (modifiers.right) {\n    if (dynamic) {\n      name = \"(\" + name + \")==='click'?'contextmenu':(\" + name + \")\";\n    } else if (name === 'click') {\n      name = 'contextmenu';\n      delete modifiers.right;\n    }\n  } else if (modifiers.middle) {\n    if (dynamic) {\n      name = \"(\" + name + \")==='click'?'mouseup':(\" + name + \")\";\n    } else if (name === 'click') {\n      name = 'mouseup';\n    }\n  }\n\n  // check capture modifier\n  if (modifiers.capture) {\n    delete modifiers.capture;\n    name = prependModifierMarker('!', name, dynamic);\n  }\n  if (modifiers.once) {\n    delete modifiers.once;\n    name = prependModifierMarker('~', name, dynamic);\n  }\n  /* istanbul ignore if */\n  if (modifiers.passive) {\n    delete modifiers.passive;\n    name = prependModifierMarker('&', name, dynamic);\n  }\n\n  var events;\n  if (modifiers.native) {\n    delete modifiers.native;\n    events = el.nativeEvents || (el.nativeEvents = {});\n  } else {\n    events = el.events || (el.events = {});\n  }\n\n  var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);\n  if (modifiers !== emptyObject) {\n    newHandler.modifiers = modifiers;\n  }\n\n  var handlers = events[name];\n  /* istanbul ignore if */\n  if (Array.isArray(handlers)) {\n    important ? handlers.unshift(newHandler) : handlers.push(newHandler);\n  } else if (handlers) {\n    events[name] = important ? [newHandler, handlers] : [handlers, newHandler];\n  } else {\n    events[name] = newHandler;\n  }\n\n  el.plain = false;\n}\n\nfunction getRawBindingAttr (\n  el,\n  name\n) {\n  return el.rawAttrsMap[':' + name] ||\n    el.rawAttrsMap['v-bind:' + name] ||\n    el.rawAttrsMap[name]\n}\n\nfunction getBindingAttr (\n  el,\n  name,\n  getStatic\n) {\n  var dynamicValue =\n    getAndRemoveAttr(el, ':' + name) ||\n    getAndRemoveAttr(el, 'v-bind:' + name);\n  if (dynamicValue != null) {\n    return parseFilters(dynamicValue)\n  } else if (getStatic !== false) {\n    var staticValue = getAndRemoveAttr(el, name);\n    if (staticValue != null) {\n      return JSON.stringify(staticValue)\n    }\n  }\n}\n\n// note: this only removes the attr from the Array (attrsList) so that it\n// doesn't get processed by processAttrs.\n// By default it does NOT remove it from the map (attrsMap) because the map is\n// needed during codegen.\nfunction getAndRemoveAttr (\n  el,\n  name,\n  removeFromMap\n) {\n  var val;\n  if ((val = el.attrsMap[name]) != null) {\n    var list = el.attrsList;\n    for (var i = 0, l = list.length; i < l; i++) {\n      if (list[i].name === name) {\n        list.splice(i, 1);\n        break\n      }\n    }\n  }\n  if (removeFromMap) {\n    delete el.attrsMap[name];\n  }\n  return val\n}\n\nfunction getAndRemoveAttrByRegex (\n  el,\n  name\n) {\n  var list = el.attrsList;\n  for (var i = 0, l = list.length; i < l; i++) {\n    var attr = list[i];\n    if (name.test(attr.name)) {\n      list.splice(i, 1);\n      return attr\n    }\n  }\n}\n\nfunction rangeSetItem (\n  item,\n  range\n) {\n  if (range) {\n    if (range.start != null) {\n      item.start = range.start;\n    }\n    if (range.end != null) {\n      item.end = range.end;\n    }\n  }\n  return item\n}\n\n/*  */\n\n/**\n * Cross-platform code generation for component v-model\n */\nfunction genComponentModel (\n  el,\n  value,\n  modifiers\n) {\n  var ref = modifiers || {};\n  var number = ref.number;\n  var trim = ref.trim;\n\n  var baseValueExpression = '$$v';\n  var valueExpression = baseValueExpression;\n  if (trim) {\n    valueExpression =\n      \"(typeof \" + baseValueExpression + \" === 'string'\" +\n      \"? \" + baseValueExpression + \".trim()\" +\n      \": \" + baseValueExpression + \")\";\n  }\n  if (number) {\n    valueExpression = \"_n(\" + valueExpression + \")\";\n  }\n  var assignment = genAssignmentCode(value, valueExpression);\n\n  el.model = {\n    value: (\"(\" + value + \")\"),\n    expression: JSON.stringify(value),\n    callback: (\"function (\" + baseValueExpression + \") {\" + assignment + \"}\")\n  };\n}\n\n/**\n * Cross-platform codegen helper for generating v-model value assignment code.\n */\nfunction genAssignmentCode (\n  value,\n  assignment\n) {\n  var res = parseModel(value);\n  if (res.key === null) {\n    return (value + \"=\" + assignment)\n  } else {\n    return (\"$set(\" + (res.exp) + \", \" + (res.key) + \", \" + assignment + \")\")\n  }\n}\n\n/**\n * Parse a v-model expression into a base path and a final key segment.\n * Handles both dot-path and possible square brackets.\n *\n * Possible cases:\n *\n * - test\n * - test[key]\n * - test[test1[key]]\n * - test[\"a\"][key]\n * - xxx.test[a[a].test1[key]]\n * - test.xxx.a[\"asa\"][test1[key]]\n *\n */\n\nvar len, str, chr, index$1, expressionPos, expressionEndPos;\n\n\n\nfunction parseModel (val) {\n  // Fix https://github.com/vuejs/vue/pull/7730\n  // allow v-model=\"obj.val \" (trailing whitespace)\n  val = val.trim();\n  len = val.length;\n\n  if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {\n    index$1 = val.lastIndexOf('.');\n    if (index$1 > -1) {\n      return {\n        exp: val.slice(0, index$1),\n        key: '\"' + val.slice(index$1 + 1) + '\"'\n      }\n    } else {\n      return {\n        exp: val,\n        key: null\n      }\n    }\n  }\n\n  str = val;\n  index$1 = expressionPos = expressionEndPos = 0;\n\n  while (!eof()) {\n    chr = next();\n    /* istanbul ignore if */\n    if (isStringStart(chr)) {\n      parseString(chr);\n    } else if (chr === 0x5B) {\n      parseBracket(chr);\n    }\n  }\n\n  return {\n    exp: val.slice(0, expressionPos),\n    key: val.slice(expressionPos + 1, expressionEndPos)\n  }\n}\n\nfunction next () {\n  return str.charCodeAt(++index$1)\n}\n\nfunction eof () {\n  return index$1 >= len\n}\n\nfunction isStringStart (chr) {\n  return chr === 0x22 || chr === 0x27\n}\n\nfunction parseBracket (chr) {\n  var inBracket = 1;\n  expressionPos = index$1;\n  while (!eof()) {\n    chr = next();\n    if (isStringStart(chr)) {\n      parseString(chr);\n      continue\n    }\n    if (chr === 0x5B) { inBracket++; }\n    if (chr === 0x5D) { inBracket--; }\n    if (inBracket === 0) {\n      expressionEndPos = index$1;\n      break\n    }\n  }\n}\n\nfunction parseString (chr) {\n  var stringQuote = chr;\n  while (!eof()) {\n    chr = next();\n    if (chr === stringQuote) {\n      break\n    }\n  }\n}\n\n/*  */\n\nvar warn$1;\n\n// in some cases, the event used has to be determined at runtime\n// so we used some reserved tokens during compile.\nvar RANGE_TOKEN = '__r';\nvar CHECKBOX_RADIO_TOKEN = '__c';\n\nfunction model (\n  el,\n  dir,\n  _warn\n) {\n  warn$1 = _warn;\n  var value = dir.value;\n  var modifiers = dir.modifiers;\n  var tag = el.tag;\n  var type = el.attrsMap.type;\n\n  if (false) {\n    // inputs with type=\"file\" are read only and setting the input's\n    // value will throw an error.\n    if (tag === 'input' && type === 'file') {\n      warn$1(\n        \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" type=\\\"file\\\">:\\n\" +\n        \"File inputs are read only. Use a v-on:change listener instead.\",\n        el.rawAttrsMap['v-model']\n      );\n    }\n  }\n\n  if (el.component) {\n    genComponentModel(el, value, modifiers);\n    // component v-model doesn't need extra runtime\n    return false\n  } else if (tag === 'select') {\n    genSelect(el, value, modifiers);\n  } else if (tag === 'input' && type === 'checkbox') {\n    genCheckboxModel(el, value, modifiers);\n  } else if (tag === 'input' && type === 'radio') {\n    genRadioModel(el, value, modifiers);\n  } else if (tag === 'input' || tag === 'textarea') {\n    genDefaultModel(el, value, modifiers);\n  } else if (!config.isReservedTag(tag)) {\n    genComponentModel(el, value, modifiers);\n    // component v-model doesn't need extra runtime\n    return false\n  } else if (false) {\n    warn$1(\n      \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n      \"v-model is not supported on this element type. \" +\n      'If you are working with contenteditable, it\\'s recommended to ' +\n      'wrap a library dedicated for that purpose inside a custom component.',\n      el.rawAttrsMap['v-model']\n    );\n  }\n\n  // ensure runtime directive metadata\n  return true\n}\n\nfunction genCheckboxModel (\n  el,\n  value,\n  modifiers\n) {\n  var number = modifiers && modifiers.number;\n  var valueBinding = getBindingAttr(el, 'value') || 'null';\n  var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';\n  var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';\n  addProp(el, 'checked',\n    \"Array.isArray(\" + value + \")\" +\n    \"?_i(\" + value + \",\" + valueBinding + \")>-1\" + (\n      trueValueBinding === 'true'\n        ? (\":(\" + value + \")\")\n        : (\":_q(\" + value + \",\" + trueValueBinding + \")\")\n    )\n  );\n  addHandler(el, 'change',\n    \"var $$a=\" + value + \",\" +\n        '$$el=$event.target,' +\n        \"$$c=$$el.checked?(\" + trueValueBinding + \"):(\" + falseValueBinding + \");\" +\n    'if(Array.isArray($$a)){' +\n      \"var $$v=\" + (number ? '_n(' + valueBinding + ')' : valueBinding) + \",\" +\n          '$$i=_i($$a,$$v);' +\n      \"if($$el.checked){$$i<0&&(\" + (genAssignmentCode(value, '$$a.concat([$$v])')) + \")}\" +\n      \"else{$$i>-1&&(\" + (genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')) + \")}\" +\n    \"}else{\" + (genAssignmentCode(value, '$$c')) + \"}\",\n    null, true\n  );\n}\n\nfunction genRadioModel (\n  el,\n  value,\n  modifiers\n) {\n  var number = modifiers && modifiers.number;\n  var valueBinding = getBindingAttr(el, 'value') || 'null';\n  valueBinding = number ? (\"_n(\" + valueBinding + \")\") : valueBinding;\n  addProp(el, 'checked', (\"_q(\" + value + \",\" + valueBinding + \")\"));\n  addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);\n}\n\nfunction genSelect (\n  el,\n  value,\n  modifiers\n) {\n  var number = modifiers && modifiers.number;\n  var selectedVal = \"Array.prototype.filter\" +\n    \".call($event.target.options,function(o){return o.selected})\" +\n    \".map(function(o){var val = \\\"_value\\\" in o ? o._value : o.value;\" +\n    \"return \" + (number ? '_n(val)' : 'val') + \"})\";\n\n  var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';\n  var code = \"var $$selectedVal = \" + selectedVal + \";\";\n  code = code + \" \" + (genAssignmentCode(value, assignment));\n  addHandler(el, 'change', code, null, true);\n}\n\nfunction genDefaultModel (\n  el,\n  value,\n  modifiers\n) {\n  var type = el.attrsMap.type;\n\n  // warn if v-bind:value conflicts with v-model\n  // except for inputs with v-bind:type\n  if (false) {\n    var value$1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];\n    var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];\n    if (value$1 && !typeBinding) {\n      var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';\n      warn$1(\n        binding + \"=\\\"\" + value$1 + \"\\\" conflicts with v-model on the same element \" +\n        'because the latter already expands to a value binding internally',\n        el.rawAttrsMap[binding]\n      );\n    }\n  }\n\n  var ref = modifiers || {};\n  var lazy = ref.lazy;\n  var number = ref.number;\n  var trim = ref.trim;\n  var needCompositionGuard = !lazy && type !== 'range';\n  var event = lazy\n    ? 'change'\n    : type === 'range'\n      ? RANGE_TOKEN\n      : 'input';\n\n  var valueExpression = '$event.target.value';\n  if (trim) {\n    valueExpression = \"$event.target.value.trim()\";\n  }\n  if (number) {\n    valueExpression = \"_n(\" + valueExpression + \")\";\n  }\n\n  var code = genAssignmentCode(value, valueExpression);\n  if (needCompositionGuard) {\n    code = \"if($event.target.composing)return;\" + code;\n  }\n\n  addProp(el, 'value', (\"(\" + value + \")\"));\n  addHandler(el, event, code, null, true);\n  if (trim || number) {\n    addHandler(el, 'blur', '$forceUpdate()');\n  }\n}\n\n/*  */\n\n// normalize v-model event tokens that can only be determined at runtime.\n// it's important to place the event as the first in the array because\n// the whole point is ensuring the v-model callback gets called before\n// user-attached handlers.\nfunction normalizeEvents (on) {\n  /* istanbul ignore if */\n  if (isDef(on[RANGE_TOKEN])) {\n    // IE input[type=range] only supports `change` event\n    var event = isIE ? 'change' : 'input';\n    on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);\n    delete on[RANGE_TOKEN];\n  }\n  // This was originally intended to fix #4521 but no longer necessary\n  // after 2.5. Keeping it for backwards compat with generated code from < 2.4\n  /* istanbul ignore if */\n  if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\n    on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\n    delete on[CHECKBOX_RADIO_TOKEN];\n  }\n}\n\nvar target$1;\n\nfunction createOnceHandler$1 (event, handler, capture) {\n  var _target = target$1; // save current target element in closure\n  return function onceHandler () {\n    var res = handler.apply(null, arguments);\n    if (res !== null) {\n      remove$2(event, onceHandler, capture, _target);\n    }\n  }\n}\n\n// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp\n// implementation and does not fire microtasks in between event propagation, so\n// safe to exclude.\nvar useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);\n\nfunction add$1 (\n  name,\n  handler,\n  capture,\n  passive\n) {\n  // async edge case #6566: inner click event triggers patch, event handler\n  // attached to outer element during patch, and triggered again. This\n  // happens because browsers fire microtask ticks between event propagation.\n  // the solution is simple: we save the timestamp when a handler is attached,\n  // and the handler would only fire if the event passed to it was fired\n  // AFTER it was attached.\n  if (useMicrotaskFix) {\n    var attachedTimestamp = currentFlushTimestamp;\n    var original = handler;\n    handler = original._wrapper = function (e) {\n      if (\n        // no bubbling, should always fire.\n        // this is just a safety net in case event.timeStamp is unreliable in\n        // certain weird environments...\n        e.target === e.currentTarget ||\n        // event is fired after handler attachment\n        e.timeStamp >= attachedTimestamp ||\n        // bail for environments that have buggy event.timeStamp implementations\n        // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState\n        // #9681 QtWebEngine event.timeStamp is negative value\n        e.timeStamp <= 0 ||\n        // #9448 bail if event is fired in another document in a multi-page\n        // electron/nw.js app, since event.timeStamp will be using a different\n        // starting reference\n        e.target.ownerDocument !== document\n      ) {\n        return original.apply(this, arguments)\n      }\n    };\n  }\n  target$1.addEventListener(\n    name,\n    handler,\n    supportsPassive\n      ? { capture: capture, passive: passive }\n      : capture\n  );\n}\n\nfunction remove$2 (\n  name,\n  handler,\n  capture,\n  _target\n) {\n  (_target || target$1).removeEventListener(\n    name,\n    handler._wrapper || handler,\n    capture\n  );\n}\n\nfunction updateDOMListeners (oldVnode, vnode) {\n  if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\n    return\n  }\n  var on = vnode.data.on || {};\n  var oldOn = oldVnode.data.on || {};\n  target$1 = vnode.elm;\n  normalizeEvents(on);\n  updateListeners(on, oldOn, add$1, remove$2, createOnceHandler$1, vnode.context);\n  target$1 = undefined;\n}\n\nvar events = {\n  create: updateDOMListeners,\n  update: updateDOMListeners\n};\n\n/*  */\n\nvar svgContainer;\n\nfunction updateDOMProps (oldVnode, vnode) {\n  if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\n    return\n  }\n  var key, cur;\n  var elm = vnode.elm;\n  var oldProps = oldVnode.data.domProps || {};\n  var props = vnode.data.domProps || {};\n  // clone observed objects, as the user probably wants to mutate it\n  if (isDef(props.__ob__)) {\n    props = vnode.data.domProps = extend({}, props);\n  }\n\n  for (key in oldProps) {\n    if (!(key in props)) {\n      elm[key] = '';\n    }\n  }\n\n  for (key in props) {\n    cur = props[key];\n    // ignore children if the node has textContent or innerHTML,\n    // as these will throw away existing DOM nodes and cause removal errors\n    // on subsequent patches (#3360)\n    if (key === 'textContent' || key === 'innerHTML') {\n      if (vnode.children) { vnode.children.length = 0; }\n      if (cur === oldProps[key]) { continue }\n      // #6601 work around Chrome version <= 55 bug where single textNode\n      // replaced by innerHTML/textContent retains its parentNode property\n      if (elm.childNodes.length === 1) {\n        elm.removeChild(elm.childNodes[0]);\n      }\n    }\n\n    if (key === 'value' && elm.tagName !== 'PROGRESS') {\n      // store value as _value as well since\n      // non-string values will be stringified\n      elm._value = cur;\n      // avoid resetting cursor position when value is the same\n      var strCur = isUndef(cur) ? '' : String(cur);\n      if (shouldUpdateValue(elm, strCur)) {\n        elm.value = strCur;\n      }\n    } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) {\n      // IE doesn't support innerHTML for SVG elements\n      svgContainer = svgContainer || document.createElement('div');\n      svgContainer.innerHTML = \"<svg>\" + cur + \"</svg>\";\n      var svg = svgContainer.firstChild;\n      while (elm.firstChild) {\n        elm.removeChild(elm.firstChild);\n      }\n      while (svg.firstChild) {\n        elm.appendChild(svg.firstChild);\n      }\n    } else if (\n      // skip the update if old and new VDOM state is the same.\n      // `value` is handled separately because the DOM value may be temporarily\n      // out of sync with VDOM state due to focus, composition and modifiers.\n      // This  #4521 by skipping the unnecesarry `checked` update.\n      cur !== oldProps[key]\n    ) {\n      // some property updates can throw\n      // e.g. `value` on <progress> w/ non-finite value\n      try {\n        elm[key] = cur;\n      } catch (e) {}\n    }\n  }\n}\n\n// check platforms/web/util/attrs.js acceptValue\n\n\nfunction shouldUpdateValue (elm, checkVal) {\n  return (!elm.composing && (\n    elm.tagName === 'OPTION' ||\n    isNotInFocusAndDirty(elm, checkVal) ||\n    isDirtyWithModifiers(elm, checkVal)\n  ))\n}\n\nfunction isNotInFocusAndDirty (elm, checkVal) {\n  // return true when textbox (.number and .trim) loses focus and its value is\n  // not equal to the updated value\n  var notInFocus = true;\n  // #6157\n  // work around IE bug when accessing document.activeElement in an iframe\n  try { notInFocus = document.activeElement !== elm; } catch (e) {}\n  return notInFocus && elm.value !== checkVal\n}\n\nfunction isDirtyWithModifiers (elm, newVal) {\n  var value = elm.value;\n  var modifiers = elm._vModifiers; // injected by v-model runtime\n  if (isDef(modifiers)) {\n    if (modifiers.number) {\n      return toNumber(value) !== toNumber(newVal)\n    }\n    if (modifiers.trim) {\n      return value.trim() !== newVal.trim()\n    }\n  }\n  return value !== newVal\n}\n\nvar domProps = {\n  create: updateDOMProps,\n  update: updateDOMProps\n};\n\n/*  */\n\nvar parseStyleText = cached(function (cssText) {\n  var res = {};\n  var listDelimiter = /;(?![^(]*\\))/g;\n  var propertyDelimiter = /:(.+)/;\n  cssText.split(listDelimiter).forEach(function (item) {\n    if (item) {\n      var tmp = item.split(propertyDelimiter);\n      tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n    }\n  });\n  return res\n});\n\n// merge static and dynamic style data on the same vnode\nfunction normalizeStyleData (data) {\n  var style = normalizeStyleBinding(data.style);\n  // static style is pre-processed into an object during compilation\n  // and is always a fresh object, so it's safe to merge into it\n  return data.staticStyle\n    ? extend(data.staticStyle, style)\n    : style\n}\n\n// normalize possible array / string values into Object\nfunction normalizeStyleBinding (bindingStyle) {\n  if (Array.isArray(bindingStyle)) {\n    return toObject(bindingStyle)\n  }\n  if (typeof bindingStyle === 'string') {\n    return parseStyleText(bindingStyle)\n  }\n  return bindingStyle\n}\n\n/**\n * parent component style should be after child's\n * so that parent component's style could override it\n */\nfunction getStyle (vnode, checkChild) {\n  var res = {};\n  var styleData;\n\n  if (checkChild) {\n    var childNode = vnode;\n    while (childNode.componentInstance) {\n      childNode = childNode.componentInstance._vnode;\n      if (\n        childNode && childNode.data &&\n        (styleData = normalizeStyleData(childNode.data))\n      ) {\n        extend(res, styleData);\n      }\n    }\n  }\n\n  if ((styleData = normalizeStyleData(vnode.data))) {\n    extend(res, styleData);\n  }\n\n  var parentNode = vnode;\n  while ((parentNode = parentNode.parent)) {\n    if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\n      extend(res, styleData);\n    }\n  }\n  return res\n}\n\n/*  */\n\nvar cssVarRE = /^--/;\nvar importantRE = /\\s*!important$/;\nvar setProp = function (el, name, val) {\n  /* istanbul ignore if */\n  if (cssVarRE.test(name)) {\n    el.style.setProperty(name, val);\n  } else if (importantRE.test(val)) {\n    el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');\n  } else {\n    var normalizedName = normalize(name);\n    if (Array.isArray(val)) {\n      // Support values array created by autoprefixer, e.g.\n      // {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\n      // Set them one by one, and the browser will only set those it can recognize\n      for (var i = 0, len = val.length; i < len; i++) {\n        el.style[normalizedName] = val[i];\n      }\n    } else {\n      el.style[normalizedName] = val;\n    }\n  }\n};\n\nvar vendorNames = ['Webkit', 'Moz', 'ms'];\n\nvar emptyStyle;\nvar normalize = cached(function (prop) {\n  emptyStyle = emptyStyle || document.createElement('div').style;\n  prop = camelize(prop);\n  if (prop !== 'filter' && (prop in emptyStyle)) {\n    return prop\n  }\n  var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\n  for (var i = 0; i < vendorNames.length; i++) {\n    var name = vendorNames[i] + capName;\n    if (name in emptyStyle) {\n      return name\n    }\n  }\n});\n\nfunction updateStyle (oldVnode, vnode) {\n  var data = vnode.data;\n  var oldData = oldVnode.data;\n\n  if (isUndef(data.staticStyle) && isUndef(data.style) &&\n    isUndef(oldData.staticStyle) && isUndef(oldData.style)\n  ) {\n    return\n  }\n\n  var cur, name;\n  var el = vnode.elm;\n  var oldStaticStyle = oldData.staticStyle;\n  var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\n\n  // if static style exists, stylebinding already merged into it when doing normalizeStyleData\n  var oldStyle = oldStaticStyle || oldStyleBinding;\n\n  var style = normalizeStyleBinding(vnode.data.style) || {};\n\n  // store normalized style under a different key for next diff\n  // make sure to clone it if it's reactive, since the user likely wants\n  // to mutate it.\n  vnode.data.normalizedStyle = isDef(style.__ob__)\n    ? extend({}, style)\n    : style;\n\n  var newStyle = getStyle(vnode, true);\n\n  for (name in oldStyle) {\n    if (isUndef(newStyle[name])) {\n      setProp(el, name, '');\n    }\n  }\n  for (name in newStyle) {\n    cur = newStyle[name];\n    if (cur !== oldStyle[name]) {\n      // ie9 setting to null has no effect, must use empty string\n      setProp(el, name, cur == null ? '' : cur);\n    }\n  }\n}\n\nvar style = {\n  create: updateStyle,\n  update: updateStyle\n};\n\n/*  */\n\nvar whitespaceRE = /\\s+/;\n\n/**\n * Add class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction addClass (el, cls) {\n  /* istanbul ignore if */\n  if (!cls || !(cls = cls.trim())) {\n    return\n  }\n\n  /* istanbul ignore else */\n  if (el.classList) {\n    if (cls.indexOf(' ') > -1) {\n      cls.split(whitespaceRE).forEach(function (c) { return el.classList.add(c); });\n    } else {\n      el.classList.add(cls);\n    }\n  } else {\n    var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n    if (cur.indexOf(' ' + cls + ' ') < 0) {\n      el.setAttribute('class', (cur + cls).trim());\n    }\n  }\n}\n\n/**\n * Remove class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction removeClass (el, cls) {\n  /* istanbul ignore if */\n  if (!cls || !(cls = cls.trim())) {\n    return\n  }\n\n  /* istanbul ignore else */\n  if (el.classList) {\n    if (cls.indexOf(' ') > -1) {\n      cls.split(whitespaceRE).forEach(function (c) { return el.classList.remove(c); });\n    } else {\n      el.classList.remove(cls);\n    }\n    if (!el.classList.length) {\n      el.removeAttribute('class');\n    }\n  } else {\n    var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n    var tar = ' ' + cls + ' ';\n    while (cur.indexOf(tar) >= 0) {\n      cur = cur.replace(tar, ' ');\n    }\n    cur = cur.trim();\n    if (cur) {\n      el.setAttribute('class', cur);\n    } else {\n      el.removeAttribute('class');\n    }\n  }\n}\n\n/*  */\n\nfunction resolveTransition (def$$1) {\n  if (!def$$1) {\n    return\n  }\n  /* istanbul ignore else */\n  if (typeof def$$1 === 'object') {\n    var res = {};\n    if (def$$1.css !== false) {\n      extend(res, autoCssTransition(def$$1.name || 'v'));\n    }\n    extend(res, def$$1);\n    return res\n  } else if (typeof def$$1 === 'string') {\n    return autoCssTransition(def$$1)\n  }\n}\n\nvar autoCssTransition = cached(function (name) {\n  return {\n    enterClass: (name + \"-enter\"),\n    enterToClass: (name + \"-enter-to\"),\n    enterActiveClass: (name + \"-enter-active\"),\n    leaveClass: (name + \"-leave\"),\n    leaveToClass: (name + \"-leave-to\"),\n    leaveActiveClass: (name + \"-leave-active\")\n  }\n});\n\nvar hasTransition = inBrowser && !isIE9;\nvar TRANSITION = 'transition';\nvar ANIMATION = 'animation';\n\n// Transition property/event sniffing\nvar transitionProp = 'transition';\nvar transitionEndEvent = 'transitionend';\nvar animationProp = 'animation';\nvar animationEndEvent = 'animationend';\nif (hasTransition) {\n  /* istanbul ignore if */\n  if (window.ontransitionend === undefined &&\n    window.onwebkittransitionend !== undefined\n  ) {\n    transitionProp = 'WebkitTransition';\n    transitionEndEvent = 'webkitTransitionEnd';\n  }\n  if (window.onanimationend === undefined &&\n    window.onwebkitanimationend !== undefined\n  ) {\n    animationProp = 'WebkitAnimation';\n    animationEndEvent = 'webkitAnimationEnd';\n  }\n}\n\n// binding to window is necessary to make hot reload work in IE in strict mode\nvar raf = inBrowser\n  ? window.requestAnimationFrame\n    ? window.requestAnimationFrame.bind(window)\n    : setTimeout\n  : /* istanbul ignore next */ function (fn) { return fn(); };\n\nfunction nextFrame (fn) {\n  raf(function () {\n    raf(fn);\n  });\n}\n\nfunction addTransitionClass (el, cls) {\n  var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\n  if (transitionClasses.indexOf(cls) < 0) {\n    transitionClasses.push(cls);\n    addClass(el, cls);\n  }\n}\n\nfunction removeTransitionClass (el, cls) {\n  if (el._transitionClasses) {\n    remove(el._transitionClasses, cls);\n  }\n  removeClass(el, cls);\n}\n\nfunction whenTransitionEnds (\n  el,\n  expectedType,\n  cb\n) {\n  var ref = getTransitionInfo(el, expectedType);\n  var type = ref.type;\n  var timeout = ref.timeout;\n  var propCount = ref.propCount;\n  if (!type) { return cb() }\n  var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\n  var ended = 0;\n  var end = function () {\n    el.removeEventListener(event, onEnd);\n    cb();\n  };\n  var onEnd = function (e) {\n    if (e.target === el) {\n      if (++ended >= propCount) {\n        end();\n      }\n    }\n  };\n  setTimeout(function () {\n    if (ended < propCount) {\n      end();\n    }\n  }, timeout + 1);\n  el.addEventListener(event, onEnd);\n}\n\nvar transformRE = /\\b(transform|all)(,|$)/;\n\nfunction getTransitionInfo (el, expectedType) {\n  var styles = window.getComputedStyle(el);\n  // JSDOM may return undefined for transition properties\n  var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');\n  var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');\n  var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n  var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');\n  var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');\n  var animationTimeout = getTimeout(animationDelays, animationDurations);\n\n  var type;\n  var timeout = 0;\n  var propCount = 0;\n  /* istanbul ignore if */\n  if (expectedType === TRANSITION) {\n    if (transitionTimeout > 0) {\n      type = TRANSITION;\n      timeout = transitionTimeout;\n      propCount = transitionDurations.length;\n    }\n  } else if (expectedType === ANIMATION) {\n    if (animationTimeout > 0) {\n      type = ANIMATION;\n      timeout = animationTimeout;\n      propCount = animationDurations.length;\n    }\n  } else {\n    timeout = Math.max(transitionTimeout, animationTimeout);\n    type = timeout > 0\n      ? transitionTimeout > animationTimeout\n        ? TRANSITION\n        : ANIMATION\n      : null;\n    propCount = type\n      ? type === TRANSITION\n        ? transitionDurations.length\n        : animationDurations.length\n      : 0;\n  }\n  var hasTransform =\n    type === TRANSITION &&\n    transformRE.test(styles[transitionProp + 'Property']);\n  return {\n    type: type,\n    timeout: timeout,\n    propCount: propCount,\n    hasTransform: hasTransform\n  }\n}\n\nfunction getTimeout (delays, durations) {\n  /* istanbul ignore next */\n  while (delays.length < durations.length) {\n    delays = delays.concat(delays);\n  }\n\n  return Math.max.apply(null, durations.map(function (d, i) {\n    return toMs(d) + toMs(delays[i])\n  }))\n}\n\n// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\n// in a locale-dependent way, using a comma instead of a dot.\n// If comma is not replaced with a dot, the input will be rounded down (i.e. acting\n// as a floor function) causing unexpected behaviors\nfunction toMs (s) {\n  return Number(s.slice(0, -1).replace(',', '.')) * 1000\n}\n\n/*  */\n\nfunction enter (vnode, toggleDisplay) {\n  var el = vnode.elm;\n\n  // call leave callback now\n  if (isDef(el._leaveCb)) {\n    el._leaveCb.cancelled = true;\n    el._leaveCb();\n  }\n\n  var data = resolveTransition(vnode.data.transition);\n  if (isUndef(data)) {\n    return\n  }\n\n  /* istanbul ignore if */\n  if (isDef(el._enterCb) || el.nodeType !== 1) {\n    return\n  }\n\n  var css = data.css;\n  var type = data.type;\n  var enterClass = data.enterClass;\n  var enterToClass = data.enterToClass;\n  var enterActiveClass = data.enterActiveClass;\n  var appearClass = data.appearClass;\n  var appearToClass = data.appearToClass;\n  var appearActiveClass = data.appearActiveClass;\n  var beforeEnter = data.beforeEnter;\n  var enter = data.enter;\n  var afterEnter = data.afterEnter;\n  var enterCancelled = data.enterCancelled;\n  var beforeAppear = data.beforeAppear;\n  var appear = data.appear;\n  var afterAppear = data.afterAppear;\n  var appearCancelled = data.appearCancelled;\n  var duration = data.duration;\n\n  // activeInstance will always be the <transition> component managing this\n  // transition. One edge case to check is when the <transition> is placed\n  // as the root node of a child component. In that case we need to check\n  // <transition>'s parent for appear check.\n  var context = activeInstance;\n  var transitionNode = activeInstance.$vnode;\n  while (transitionNode && transitionNode.parent) {\n    context = transitionNode.context;\n    transitionNode = transitionNode.parent;\n  }\n\n  var isAppear = !context._isMounted || !vnode.isRootInsert;\n\n  if (isAppear && !appear && appear !== '') {\n    return\n  }\n\n  var startClass = isAppear && appearClass\n    ? appearClass\n    : enterClass;\n  var activeClass = isAppear && appearActiveClass\n    ? appearActiveClass\n    : enterActiveClass;\n  var toClass = isAppear && appearToClass\n    ? appearToClass\n    : enterToClass;\n\n  var beforeEnterHook = isAppear\n    ? (beforeAppear || beforeEnter)\n    : beforeEnter;\n  var enterHook = isAppear\n    ? (typeof appear === 'function' ? appear : enter)\n    : enter;\n  var afterEnterHook = isAppear\n    ? (afterAppear || afterEnter)\n    : afterEnter;\n  var enterCancelledHook = isAppear\n    ? (appearCancelled || enterCancelled)\n    : enterCancelled;\n\n  var explicitEnterDuration = toNumber(\n    isObject(duration)\n      ? duration.enter\n      : duration\n  );\n\n  if (false) {\n    checkDuration(explicitEnterDuration, 'enter', vnode);\n  }\n\n  var expectsCSS = css !== false && !isIE9;\n  var userWantsControl = getHookArgumentsLength(enterHook);\n\n  var cb = el._enterCb = once(function () {\n    if (expectsCSS) {\n      removeTransitionClass(el, toClass);\n      removeTransitionClass(el, activeClass);\n    }\n    if (cb.cancelled) {\n      if (expectsCSS) {\n        removeTransitionClass(el, startClass);\n      }\n      enterCancelledHook && enterCancelledHook(el);\n    } else {\n      afterEnterHook && afterEnterHook(el);\n    }\n    el._enterCb = null;\n  });\n\n  if (!vnode.data.show) {\n    // remove pending leave element on enter by injecting an insert hook\n    mergeVNodeHook(vnode, 'insert', function () {\n      var parent = el.parentNode;\n      var pendingNode = parent && parent._pending && parent._pending[vnode.key];\n      if (pendingNode &&\n        pendingNode.tag === vnode.tag &&\n        pendingNode.elm._leaveCb\n      ) {\n        pendingNode.elm._leaveCb();\n      }\n      enterHook && enterHook(el, cb);\n    });\n  }\n\n  // start enter transition\n  beforeEnterHook && beforeEnterHook(el);\n  if (expectsCSS) {\n    addTransitionClass(el, startClass);\n    addTransitionClass(el, activeClass);\n    nextFrame(function () {\n      removeTransitionClass(el, startClass);\n      if (!cb.cancelled) {\n        addTransitionClass(el, toClass);\n        if (!userWantsControl) {\n          if (isValidDuration(explicitEnterDuration)) {\n            setTimeout(cb, explicitEnterDuration);\n          } else {\n            whenTransitionEnds(el, type, cb);\n          }\n        }\n      }\n    });\n  }\n\n  if (vnode.data.show) {\n    toggleDisplay && toggleDisplay();\n    enterHook && enterHook(el, cb);\n  }\n\n  if (!expectsCSS && !userWantsControl) {\n    cb();\n  }\n}\n\nfunction leave (vnode, rm) {\n  var el = vnode.elm;\n\n  // call enter callback now\n  if (isDef(el._enterCb)) {\n    el._enterCb.cancelled = true;\n    el._enterCb();\n  }\n\n  var data = resolveTransition(vnode.data.transition);\n  if (isUndef(data) || el.nodeType !== 1) {\n    return rm()\n  }\n\n  /* istanbul ignore if */\n  if (isDef(el._leaveCb)) {\n    return\n  }\n\n  var css = data.css;\n  var type = data.type;\n  var leaveClass = data.leaveClass;\n  var leaveToClass = data.leaveToClass;\n  var leaveActiveClass = data.leaveActiveClass;\n  var beforeLeave = data.beforeLeave;\n  var leave = data.leave;\n  var afterLeave = data.afterLeave;\n  var leaveCancelled = data.leaveCancelled;\n  var delayLeave = data.delayLeave;\n  var duration = data.duration;\n\n  var expectsCSS = css !== false && !isIE9;\n  var userWantsControl = getHookArgumentsLength(leave);\n\n  var explicitLeaveDuration = toNumber(\n    isObject(duration)\n      ? duration.leave\n      : duration\n  );\n\n  if (false) {\n    checkDuration(explicitLeaveDuration, 'leave', vnode);\n  }\n\n  var cb = el._leaveCb = once(function () {\n    if (el.parentNode && el.parentNode._pending) {\n      el.parentNode._pending[vnode.key] = null;\n    }\n    if (expectsCSS) {\n      removeTransitionClass(el, leaveToClass);\n      removeTransitionClass(el, leaveActiveClass);\n    }\n    if (cb.cancelled) {\n      if (expectsCSS) {\n        removeTransitionClass(el, leaveClass);\n      }\n      leaveCancelled && leaveCancelled(el);\n    } else {\n      rm();\n      afterLeave && afterLeave(el);\n    }\n    el._leaveCb = null;\n  });\n\n  if (delayLeave) {\n    delayLeave(performLeave);\n  } else {\n    performLeave();\n  }\n\n  function performLeave () {\n    // the delayed leave may have already been cancelled\n    if (cb.cancelled) {\n      return\n    }\n    // record leaving element\n    if (!vnode.data.show && el.parentNode) {\n      (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;\n    }\n    beforeLeave && beforeLeave(el);\n    if (expectsCSS) {\n      addTransitionClass(el, leaveClass);\n      addTransitionClass(el, leaveActiveClass);\n      nextFrame(function () {\n        removeTransitionClass(el, leaveClass);\n        if (!cb.cancelled) {\n          addTransitionClass(el, leaveToClass);\n          if (!userWantsControl) {\n            if (isValidDuration(explicitLeaveDuration)) {\n              setTimeout(cb, explicitLeaveDuration);\n            } else {\n              whenTransitionEnds(el, type, cb);\n            }\n          }\n        }\n      });\n    }\n    leave && leave(el, cb);\n    if (!expectsCSS && !userWantsControl) {\n      cb();\n    }\n  }\n}\n\n// only used in dev mode\nfunction checkDuration (val, name, vnode) {\n  if (typeof val !== 'number') {\n    warn(\n      \"<transition> explicit \" + name + \" duration is not a valid number - \" +\n      \"got \" + (JSON.stringify(val)) + \".\",\n      vnode.context\n    );\n  } else if (isNaN(val)) {\n    warn(\n      \"<transition> explicit \" + name + \" duration is NaN - \" +\n      'the duration expression might be incorrect.',\n      vnode.context\n    );\n  }\n}\n\nfunction isValidDuration (val) {\n  return typeof val === 'number' && !isNaN(val)\n}\n\n/**\n * Normalize a transition hook's argument length. The hook may be:\n * - a merged hook (invoker) with the original in .fns\n * - a wrapped component method (check ._length)\n * - a plain function (.length)\n */\nfunction getHookArgumentsLength (fn) {\n  if (isUndef(fn)) {\n    return false\n  }\n  var invokerFns = fn.fns;\n  if (isDef(invokerFns)) {\n    // invoker\n    return getHookArgumentsLength(\n      Array.isArray(invokerFns)\n        ? invokerFns[0]\n        : invokerFns\n    )\n  } else {\n    return (fn._length || fn.length) > 1\n  }\n}\n\nfunction _enter (_, vnode) {\n  if (vnode.data.show !== true) {\n    enter(vnode);\n  }\n}\n\nvar transition = inBrowser ? {\n  create: _enter,\n  activate: _enter,\n  remove: function remove$$1 (vnode, rm) {\n    /* istanbul ignore else */\n    if (vnode.data.show !== true) {\n      leave(vnode, rm);\n    } else {\n      rm();\n    }\n  }\n} : {};\n\nvar platformModules = [\n  attrs,\n  klass,\n  events,\n  domProps,\n  style,\n  transition\n];\n\n/*  */\n\n// the directive module should be applied last, after all\n// built-in modules have been applied.\nvar modules = platformModules.concat(baseModules);\n\nvar patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });\n\n/**\n * Not type checking this file because flow doesn't like attaching\n * properties to Elements.\n */\n\n/* istanbul ignore if */\nif (isIE9) {\n  // http://www.matts411.com/post/internet-explorer-9-oninput/\n  document.addEventListener('selectionchange', function () {\n    var el = document.activeElement;\n    if (el && el.vmodel) {\n      trigger(el, 'input');\n    }\n  });\n}\n\nvar directive = {\n  inserted: function inserted (el, binding, vnode, oldVnode) {\n    if (vnode.tag === 'select') {\n      // #6903\n      if (oldVnode.elm && !oldVnode.elm._vOptions) {\n        mergeVNodeHook(vnode, 'postpatch', function () {\n          directive.componentUpdated(el, binding, vnode);\n        });\n      } else {\n        setSelected(el, binding, vnode.context);\n      }\n      el._vOptions = [].map.call(el.options, getValue);\n    } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\n      el._vModifiers = binding.modifiers;\n      if (!binding.modifiers.lazy) {\n        el.addEventListener('compositionstart', onCompositionStart);\n        el.addEventListener('compositionend', onCompositionEnd);\n        // Safari < 10.2 & UIWebView doesn't fire compositionend when\n        // switching focus before confirming composition choice\n        // this also fixes the issue where some browsers e.g. iOS Chrome\n        // fires \"change\" instead of \"input\" on autocomplete.\n        el.addEventListener('change', onCompositionEnd);\n        /* istanbul ignore if */\n        if (isIE9) {\n          el.vmodel = true;\n        }\n      }\n    }\n  },\n\n  componentUpdated: function componentUpdated (el, binding, vnode) {\n    if (vnode.tag === 'select') {\n      setSelected(el, binding, vnode.context);\n      // in case the options rendered by v-for have changed,\n      // it's possible that the value is out-of-sync with the rendered options.\n      // detect such cases and filter out values that no longer has a matching\n      // option in the DOM.\n      var prevOptions = el._vOptions;\n      var curOptions = el._vOptions = [].map.call(el.options, getValue);\n      if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {\n        // trigger change event if\n        // no matching option found for at least one value\n        var needReset = el.multiple\n          ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })\n          : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);\n        if (needReset) {\n          trigger(el, 'change');\n        }\n      }\n    }\n  }\n};\n\nfunction setSelected (el, binding, vm) {\n  actuallySetSelected(el, binding, vm);\n  /* istanbul ignore if */\n  if (isIE || isEdge) {\n    setTimeout(function () {\n      actuallySetSelected(el, binding, vm);\n    }, 0);\n  }\n}\n\nfunction actuallySetSelected (el, binding, vm) {\n  var value = binding.value;\n  var isMultiple = el.multiple;\n  if (isMultiple && !Array.isArray(value)) {\n    \"production\" !== 'production' && warn(\n      \"<select multiple v-model=\\\"\" + (binding.expression) + \"\\\"> \" +\n      \"expects an Array value for its binding, but got \" + (Object.prototype.toString.call(value).slice(8, -1)),\n      vm\n    );\n    return\n  }\n  var selected, option;\n  for (var i = 0, l = el.options.length; i < l; i++) {\n    option = el.options[i];\n    if (isMultiple) {\n      selected = looseIndexOf(value, getValue(option)) > -1;\n      if (option.selected !== selected) {\n        option.selected = selected;\n      }\n    } else {\n      if (looseEqual(getValue(option), value)) {\n        if (el.selectedIndex !== i) {\n          el.selectedIndex = i;\n        }\n        return\n      }\n    }\n  }\n  if (!isMultiple) {\n    el.selectedIndex = -1;\n  }\n}\n\nfunction hasNoMatchingOption (value, options) {\n  return options.every(function (o) { return !looseEqual(o, value); })\n}\n\nfunction getValue (option) {\n  return '_value' in option\n    ? option._value\n    : option.value\n}\n\nfunction onCompositionStart (e) {\n  e.target.composing = true;\n}\n\nfunction onCompositionEnd (e) {\n  // prevent triggering an input event for no reason\n  if (!e.target.composing) { return }\n  e.target.composing = false;\n  trigger(e.target, 'input');\n}\n\nfunction trigger (el, type) {\n  var e = document.createEvent('HTMLEvents');\n  e.initEvent(type, true, true);\n  el.dispatchEvent(e);\n}\n\n/*  */\n\n// recursively search for possible transition defined inside the component root\nfunction locateNode (vnode) {\n  return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\n    ? locateNode(vnode.componentInstance._vnode)\n    : vnode\n}\n\nvar show = {\n  bind: function bind (el, ref, vnode) {\n    var value = ref.value;\n\n    vnode = locateNode(vnode);\n    var transition$$1 = vnode.data && vnode.data.transition;\n    var originalDisplay = el.__vOriginalDisplay =\n      el.style.display === 'none' ? '' : el.style.display;\n    if (value && transition$$1) {\n      vnode.data.show = true;\n      enter(vnode, function () {\n        el.style.display = originalDisplay;\n      });\n    } else {\n      el.style.display = value ? originalDisplay : 'none';\n    }\n  },\n\n  update: function update (el, ref, vnode) {\n    var value = ref.value;\n    var oldValue = ref.oldValue;\n\n    /* istanbul ignore if */\n    if (!value === !oldValue) { return }\n    vnode = locateNode(vnode);\n    var transition$$1 = vnode.data && vnode.data.transition;\n    if (transition$$1) {\n      vnode.data.show = true;\n      if (value) {\n        enter(vnode, function () {\n          el.style.display = el.__vOriginalDisplay;\n        });\n      } else {\n        leave(vnode, function () {\n          el.style.display = 'none';\n        });\n      }\n    } else {\n      el.style.display = value ? el.__vOriginalDisplay : 'none';\n    }\n  },\n\n  unbind: function unbind (\n    el,\n    binding,\n    vnode,\n    oldVnode,\n    isDestroy\n  ) {\n    if (!isDestroy) {\n      el.style.display = el.__vOriginalDisplay;\n    }\n  }\n};\n\nvar platformDirectives = {\n  model: directive,\n  show: show\n};\n\n/*  */\n\nvar transitionProps = {\n  name: String,\n  appear: Boolean,\n  css: Boolean,\n  mode: String,\n  type: String,\n  enterClass: String,\n  leaveClass: String,\n  enterToClass: String,\n  leaveToClass: String,\n  enterActiveClass: String,\n  leaveActiveClass: String,\n  appearClass: String,\n  appearActiveClass: String,\n  appearToClass: String,\n  duration: [Number, String, Object]\n};\n\n// in case the child is also an abstract component, e.g. <keep-alive>\n// we want to recursively retrieve the real component to be rendered\nfunction getRealChild (vnode) {\n  var compOptions = vnode && vnode.componentOptions;\n  if (compOptions && compOptions.Ctor.options.abstract) {\n    return getRealChild(getFirstComponentChild(compOptions.children))\n  } else {\n    return vnode\n  }\n}\n\nfunction extractTransitionData (comp) {\n  var data = {};\n  var options = comp.$options;\n  // props\n  for (var key in options.propsData) {\n    data[key] = comp[key];\n  }\n  // events.\n  // extract listeners and pass them directly to the transition methods\n  var listeners = options._parentListeners;\n  for (var key$1 in listeners) {\n    data[camelize(key$1)] = listeners[key$1];\n  }\n  return data\n}\n\nfunction placeholder (h, rawChild) {\n  if (/\\d-keep-alive$/.test(rawChild.tag)) {\n    return h('keep-alive', {\n      props: rawChild.componentOptions.propsData\n    })\n  }\n}\n\nfunction hasParentTransition (vnode) {\n  while ((vnode = vnode.parent)) {\n    if (vnode.data.transition) {\n      return true\n    }\n  }\n}\n\nfunction isSameChild (child, oldChild) {\n  return oldChild.key === child.key && oldChild.tag === child.tag\n}\n\nvar isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };\n\nvar isVShowDirective = function (d) { return d.name === 'show'; };\n\nvar Transition = {\n  name: 'transition',\n  props: transitionProps,\n  abstract: true,\n\n  render: function render (h) {\n    var this$1 = this;\n\n    var children = this.$slots.default;\n    if (!children) {\n      return\n    }\n\n    // filter out text nodes (possible whitespaces)\n    children = children.filter(isNotTextNode);\n    /* istanbul ignore if */\n    if (!children.length) {\n      return\n    }\n\n    // warn multiple elements\n    if (false) {\n      warn(\n        '<transition> can only be used on a single element. Use ' +\n        '<transition-group> for lists.',\n        this.$parent\n      );\n    }\n\n    var mode = this.mode;\n\n    // warn invalid mode\n    if (false\n    ) {\n      warn(\n        'invalid <transition> mode: ' + mode,\n        this.$parent\n      );\n    }\n\n    var rawChild = children[0];\n\n    // if this is a component root node and the component's\n    // parent container node also has transition, skip.\n    if (hasParentTransition(this.$vnode)) {\n      return rawChild\n    }\n\n    // apply transition data to child\n    // use getRealChild() to ignore abstract components e.g. keep-alive\n    var child = getRealChild(rawChild);\n    /* istanbul ignore if */\n    if (!child) {\n      return rawChild\n    }\n\n    if (this._leaving) {\n      return placeholder(h, rawChild)\n    }\n\n    // ensure a key that is unique to the vnode type and to this transition\n    // component instance. This key will be used to remove pending leaving nodes\n    // during entering.\n    var id = \"__transition-\" + (this._uid) + \"-\";\n    child.key = child.key == null\n      ? child.isComment\n        ? id + 'comment'\n        : id + child.tag\n      : isPrimitive(child.key)\n        ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)\n        : child.key;\n\n    var data = (child.data || (child.data = {})).transition = extractTransitionData(this);\n    var oldRawChild = this._vnode;\n    var oldChild = getRealChild(oldRawChild);\n\n    // mark v-show\n    // so that the transition module can hand over the control to the directive\n    if (child.data.directives && child.data.directives.some(isVShowDirective)) {\n      child.data.show = true;\n    }\n\n    if (\n      oldChild &&\n      oldChild.data &&\n      !isSameChild(child, oldChild) &&\n      !isAsyncPlaceholder(oldChild) &&\n      // #6687 component root is a comment node\n      !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)\n    ) {\n      // replace old child transition data with fresh one\n      // important for dynamic transitions!\n      var oldData = oldChild.data.transition = extend({}, data);\n      // handle transition mode\n      if (mode === 'out-in') {\n        // return placeholder node and queue update when leave finishes\n        this._leaving = true;\n        mergeVNodeHook(oldData, 'afterLeave', function () {\n          this$1._leaving = false;\n          this$1.$forceUpdate();\n        });\n        return placeholder(h, rawChild)\n      } else if (mode === 'in-out') {\n        if (isAsyncPlaceholder(child)) {\n          return oldRawChild\n        }\n        var delayedLeave;\n        var performLeave = function () { delayedLeave(); };\n        mergeVNodeHook(data, 'afterEnter', performLeave);\n        mergeVNodeHook(data, 'enterCancelled', performLeave);\n        mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });\n      }\n    }\n\n    return rawChild\n  }\n};\n\n/*  */\n\nvar props = extend({\n  tag: String,\n  moveClass: String\n}, transitionProps);\n\ndelete props.mode;\n\nvar TransitionGroup = {\n  props: props,\n\n  beforeMount: function beforeMount () {\n    var this$1 = this;\n\n    var update = this._update;\n    this._update = function (vnode, hydrating) {\n      var restoreActiveInstance = setActiveInstance(this$1);\n      // force removing pass\n      this$1.__patch__(\n        this$1._vnode,\n        this$1.kept,\n        false, // hydrating\n        true // removeOnly (!important, avoids unnecessary moves)\n      );\n      this$1._vnode = this$1.kept;\n      restoreActiveInstance();\n      update.call(this$1, vnode, hydrating);\n    };\n  },\n\n  render: function render (h) {\n    var tag = this.tag || this.$vnode.data.tag || 'span';\n    var map = Object.create(null);\n    var prevChildren = this.prevChildren = this.children;\n    var rawChildren = this.$slots.default || [];\n    var children = this.children = [];\n    var transitionData = extractTransitionData(this);\n\n    for (var i = 0; i < rawChildren.length; i++) {\n      var c = rawChildren[i];\n      if (c.tag) {\n        if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\n          children.push(c);\n          map[c.key] = c\n          ;(c.data || (c.data = {})).transition = transitionData;\n        } else if (false) {\n          var opts = c.componentOptions;\n          var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;\n          warn((\"<transition-group> children must be keyed: <\" + name + \">\"));\n        }\n      }\n    }\n\n    if (prevChildren) {\n      var kept = [];\n      var removed = [];\n      for (var i$1 = 0; i$1 < prevChildren.length; i$1++) {\n        var c$1 = prevChildren[i$1];\n        c$1.data.transition = transitionData;\n        c$1.data.pos = c$1.elm.getBoundingClientRect();\n        if (map[c$1.key]) {\n          kept.push(c$1);\n        } else {\n          removed.push(c$1);\n        }\n      }\n      this.kept = h(tag, null, kept);\n      this.removed = removed;\n    }\n\n    return h(tag, null, children)\n  },\n\n  updated: function updated () {\n    var children = this.prevChildren;\n    var moveClass = this.moveClass || ((this.name || 'v') + '-move');\n    if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\n      return\n    }\n\n    // we divide the work into three loops to avoid mixing DOM reads and writes\n    // in each iteration - which helps prevent layout thrashing.\n    children.forEach(callPendingCbs);\n    children.forEach(recordPosition);\n    children.forEach(applyTranslation);\n\n    // force reflow to put everything in position\n    // assign to this to avoid being removed in tree-shaking\n    // $flow-disable-line\n    this._reflow = document.body.offsetHeight;\n\n    children.forEach(function (c) {\n      if (c.data.moved) {\n        var el = c.elm;\n        var s = el.style;\n        addTransitionClass(el, moveClass);\n        s.transform = s.WebkitTransform = s.transitionDuration = '';\n        el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {\n          if (e && e.target !== el) {\n            return\n          }\n          if (!e || /transform$/.test(e.propertyName)) {\n            el.removeEventListener(transitionEndEvent, cb);\n            el._moveCb = null;\n            removeTransitionClass(el, moveClass);\n          }\n        });\n      }\n    });\n  },\n\n  methods: {\n    hasMove: function hasMove (el, moveClass) {\n      /* istanbul ignore if */\n      if (!hasTransition) {\n        return false\n      }\n      /* istanbul ignore if */\n      if (this._hasMove) {\n        return this._hasMove\n      }\n      // Detect whether an element with the move class applied has\n      // CSS transitions. Since the element may be inside an entering\n      // transition at this very moment, we make a clone of it and remove\n      // all other transition classes applied to ensure only the move class\n      // is applied.\n      var clone = el.cloneNode();\n      if (el._transitionClasses) {\n        el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });\n      }\n      addClass(clone, moveClass);\n      clone.style.display = 'none';\n      this.$el.appendChild(clone);\n      var info = getTransitionInfo(clone);\n      this.$el.removeChild(clone);\n      return (this._hasMove = info.hasTransform)\n    }\n  }\n};\n\nfunction callPendingCbs (c) {\n  /* istanbul ignore if */\n  if (c.elm._moveCb) {\n    c.elm._moveCb();\n  }\n  /* istanbul ignore if */\n  if (c.elm._enterCb) {\n    c.elm._enterCb();\n  }\n}\n\nfunction recordPosition (c) {\n  c.data.newPos = c.elm.getBoundingClientRect();\n}\n\nfunction applyTranslation (c) {\n  var oldPos = c.data.pos;\n  var newPos = c.data.newPos;\n  var dx = oldPos.left - newPos.left;\n  var dy = oldPos.top - newPos.top;\n  if (dx || dy) {\n    c.data.moved = true;\n    var s = c.elm.style;\n    s.transform = s.WebkitTransform = \"translate(\" + dx + \"px,\" + dy + \"px)\";\n    s.transitionDuration = '0s';\n  }\n}\n\nvar platformComponents = {\n  Transition: Transition,\n  TransitionGroup: TransitionGroup\n};\n\n/*  */\n\n// install platform specific utils\nVue.config.mustUseProp = mustUseProp;\nVue.config.isReservedTag = isReservedTag;\nVue.config.isReservedAttr = isReservedAttr;\nVue.config.getTagNamespace = getTagNamespace;\nVue.config.isUnknownElement = isUnknownElement;\n\n// install platform runtime directives & components\nextend(Vue.options.directives, platformDirectives);\nextend(Vue.options.components, platformComponents);\n\n// install platform patch function\nVue.prototype.__patch__ = inBrowser ? patch : noop;\n\n// public mount method\nVue.prototype.$mount = function (\n  el,\n  hydrating\n) {\n  el = el && inBrowser ? query(el) : undefined;\n  return mountComponent(this, el, hydrating)\n};\n\n// devtools global hook\n/* istanbul ignore next */\nif (inBrowser) {\n  setTimeout(function () {\n    if (config.devtools) {\n      if (devtools) {\n        devtools.emit('init', Vue);\n      } else if (\n        false\n      ) {\n        console[console.info ? 'info' : 'log'](\n          'Download the Vue Devtools extension for a better development experience:\\n' +\n          'https://github.com/vuejs/vue-devtools'\n        );\n      }\n    }\n    if (false\n    ) {\n      console[console.info ? 'info' : 'log'](\n        \"You are running Vue in development mode.\\n\" +\n        \"Make sure to turn on production mode when deploying for production.\\n\" +\n        \"See more tips at https://vuejs.org/guide/deployment.html\"\n      );\n    }\n  }, 0);\n}\n\n/*  */\n\nvar defaultTagRE = /\\{\\{((?:.|\\r?\\n)+?)\\}\\}/g;\nvar regexEscapeRE = /[-.*+?^${}()|[\\]\\/\\\\]/g;\n\nvar buildRegex = cached(function (delimiters) {\n  var open = delimiters[0].replace(regexEscapeRE, '\\\\$&');\n  var close = delimiters[1].replace(regexEscapeRE, '\\\\$&');\n  return new RegExp(open + '((?:.|\\\\n)+?)' + close, 'g')\n});\n\n\n\nfunction parseText (\n  text,\n  delimiters\n) {\n  var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;\n  if (!tagRE.test(text)) {\n    return\n  }\n  var tokens = [];\n  var rawTokens = [];\n  var lastIndex = tagRE.lastIndex = 0;\n  var match, index, tokenValue;\n  while ((match = tagRE.exec(text))) {\n    index = match.index;\n    // push text token\n    if (index > lastIndex) {\n      rawTokens.push(tokenValue = text.slice(lastIndex, index));\n      tokens.push(JSON.stringify(tokenValue));\n    }\n    // tag token\n    var exp = parseFilters(match[1].trim());\n    tokens.push((\"_s(\" + exp + \")\"));\n    rawTokens.push({ '@binding': exp });\n    lastIndex = index + match[0].length;\n  }\n  if (lastIndex < text.length) {\n    rawTokens.push(tokenValue = text.slice(lastIndex));\n    tokens.push(JSON.stringify(tokenValue));\n  }\n  return {\n    expression: tokens.join('+'),\n    tokens: rawTokens\n  }\n}\n\n/*  */\n\nfunction transformNode (el, options) {\n  var warn = options.warn || baseWarn;\n  var staticClass = getAndRemoveAttr(el, 'class');\n  if (false) {\n    var res = parseText(staticClass, options.delimiters);\n    if (res) {\n      warn(\n        \"class=\\\"\" + staticClass + \"\\\": \" +\n        'Interpolation inside attributes has been removed. ' +\n        'Use v-bind or the colon shorthand instead. For example, ' +\n        'instead of <div class=\"{{ val }}\">, use <div :class=\"val\">.',\n        el.rawAttrsMap['class']\n      );\n    }\n  }\n  if (staticClass) {\n    el.staticClass = JSON.stringify(staticClass);\n  }\n  var classBinding = getBindingAttr(el, 'class', false /* getStatic */);\n  if (classBinding) {\n    el.classBinding = classBinding;\n  }\n}\n\nfunction genData (el) {\n  var data = '';\n  if (el.staticClass) {\n    data += \"staticClass:\" + (el.staticClass) + \",\";\n  }\n  if (el.classBinding) {\n    data += \"class:\" + (el.classBinding) + \",\";\n  }\n  return data\n}\n\nvar klass$1 = {\n  staticKeys: ['staticClass'],\n  transformNode: transformNode,\n  genData: genData\n};\n\n/*  */\n\nfunction transformNode$1 (el, options) {\n  var warn = options.warn || baseWarn;\n  var staticStyle = getAndRemoveAttr(el, 'style');\n  if (staticStyle) {\n    /* istanbul ignore if */\n    if (false) {\n      var res = parseText(staticStyle, options.delimiters);\n      if (res) {\n        warn(\n          \"style=\\\"\" + staticStyle + \"\\\": \" +\n          'Interpolation inside attributes has been removed. ' +\n          'Use v-bind or the colon shorthand instead. For example, ' +\n          'instead of <div style=\"{{ val }}\">, use <div :style=\"val\">.',\n          el.rawAttrsMap['style']\n        );\n      }\n    }\n    el.staticStyle = JSON.stringify(parseStyleText(staticStyle));\n  }\n\n  var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);\n  if (styleBinding) {\n    el.styleBinding = styleBinding;\n  }\n}\n\nfunction genData$1 (el) {\n  var data = '';\n  if (el.staticStyle) {\n    data += \"staticStyle:\" + (el.staticStyle) + \",\";\n  }\n  if (el.styleBinding) {\n    data += \"style:(\" + (el.styleBinding) + \"),\";\n  }\n  return data\n}\n\nvar style$1 = {\n  staticKeys: ['staticStyle'],\n  transformNode: transformNode$1,\n  genData: genData$1\n};\n\n/*  */\n\nvar decoder;\n\nvar he = {\n  decode: function decode (html) {\n    decoder = decoder || document.createElement('div');\n    decoder.innerHTML = html;\n    return decoder.textContent\n  }\n};\n\n/*  */\n\nvar isUnaryTag = makeMap(\n  'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +\n  'link,meta,param,source,track,wbr'\n);\n\n// Elements that you can, intentionally, leave open\n// (and which close themselves)\nvar canBeLeftOpenTag = makeMap(\n  'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'\n);\n\n// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3\n// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content\nvar isNonPhrasingTag = makeMap(\n  'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +\n  'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +\n  'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +\n  'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +\n  'title,tr,track'\n);\n\n/**\n * Not type-checking this file because it's mostly vendor code.\n */\n\n// Regular Expressions for parsing tags and attributes\nvar attribute = /^\\s*([^\\s\"'<>\\/=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/;\nvar dynamicArgAttribute = /^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+\\][^\\s\"'<>\\/=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/;\nvar ncname = \"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\" + (unicodeRegExp.source) + \"]*\";\nvar qnameCapture = \"((?:\" + ncname + \"\\\\:)?\" + ncname + \")\";\nvar startTagOpen = new RegExp((\"^<\" + qnameCapture));\nvar startTagClose = /^\\s*(\\/?)>/;\nvar endTag = new RegExp((\"^<\\\\/\" + qnameCapture + \"[^>]*>\"));\nvar doctype = /^<!DOCTYPE [^>]+>/i;\n// #7298: escape - to avoid being pased as HTML comment when inlined in page\nvar comment = /^<!\\--/;\nvar conditionalComment = /^<!\\[/;\n\n// Special Elements (can contain anything)\nvar isPlainTextElement = makeMap('script,style,textarea', true);\nvar reCache = {};\n\nvar decodingMap = {\n  '&lt;': '<',\n  '&gt;': '>',\n  '&quot;': '\"',\n  '&amp;': '&',\n  '&#10;': '\\n',\n  '&#9;': '\\t',\n  '&#39;': \"'\"\n};\nvar encodedAttr = /&(?:lt|gt|quot|amp|#39);/g;\nvar encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g;\n\n// #5992\nvar isIgnoreNewlineTag = makeMap('pre,textarea', true);\nvar shouldIgnoreFirstNewline = function (tag, html) { return tag && isIgnoreNewlineTag(tag) && html[0] === '\\n'; };\n\nfunction decodeAttr (value, shouldDecodeNewlines) {\n  var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;\n  return value.replace(re, function (match) { return decodingMap[match]; })\n}\n\nfunction parseHTML (html, options) {\n  var stack = [];\n  var expectHTML = options.expectHTML;\n  var isUnaryTag$$1 = options.isUnaryTag || no;\n  var canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no;\n  var index = 0;\n  var last, lastTag;\n  while (html) {\n    last = html;\n    // Make sure we're not in a plaintext content element like script/style\n    if (!lastTag || !isPlainTextElement(lastTag)) {\n      var textEnd = html.indexOf('<');\n      if (textEnd === 0) {\n        // Comment:\n        if (comment.test(html)) {\n          var commentEnd = html.indexOf('-->');\n\n          if (commentEnd >= 0) {\n            if (options.shouldKeepComment) {\n              options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);\n            }\n            advance(commentEnd + 3);\n            continue\n          }\n        }\n\n        // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment\n        if (conditionalComment.test(html)) {\n          var conditionalEnd = html.indexOf(']>');\n\n          if (conditionalEnd >= 0) {\n            advance(conditionalEnd + 2);\n            continue\n          }\n        }\n\n        // Doctype:\n        var doctypeMatch = html.match(doctype);\n        if (doctypeMatch) {\n          advance(doctypeMatch[0].length);\n          continue\n        }\n\n        // End tag:\n        var endTagMatch = html.match(endTag);\n        if (endTagMatch) {\n          var curIndex = index;\n          advance(endTagMatch[0].length);\n          parseEndTag(endTagMatch[1], curIndex, index);\n          continue\n        }\n\n        // Start tag:\n        var startTagMatch = parseStartTag();\n        if (startTagMatch) {\n          handleStartTag(startTagMatch);\n          if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {\n            advance(1);\n          }\n          continue\n        }\n      }\n\n      var text = (void 0), rest = (void 0), next = (void 0);\n      if (textEnd >= 0) {\n        rest = html.slice(textEnd);\n        while (\n          !endTag.test(rest) &&\n          !startTagOpen.test(rest) &&\n          !comment.test(rest) &&\n          !conditionalComment.test(rest)\n        ) {\n          // < in plain text, be forgiving and treat it as text\n          next = rest.indexOf('<', 1);\n          if (next < 0) { break }\n          textEnd += next;\n          rest = html.slice(textEnd);\n        }\n        text = html.substring(0, textEnd);\n      }\n\n      if (textEnd < 0) {\n        text = html;\n      }\n\n      if (text) {\n        advance(text.length);\n      }\n\n      if (options.chars && text) {\n        options.chars(text, index - text.length, index);\n      }\n    } else {\n      var endTagLength = 0;\n      var stackedTag = lastTag.toLowerCase();\n      var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\\\s\\\\S]*?)(</' + stackedTag + '[^>]*>)', 'i'));\n      var rest$1 = html.replace(reStackedTag, function (all, text, endTag) {\n        endTagLength = endTag.length;\n        if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {\n          text = text\n            .replace(/<!\\--([\\s\\S]*?)-->/g, '$1') // #7298\n            .replace(/<!\\[CDATA\\[([\\s\\S]*?)]]>/g, '$1');\n        }\n        if (shouldIgnoreFirstNewline(stackedTag, text)) {\n          text = text.slice(1);\n        }\n        if (options.chars) {\n          options.chars(text);\n        }\n        return ''\n      });\n      index += html.length - rest$1.length;\n      html = rest$1;\n      parseEndTag(stackedTag, index - endTagLength, index);\n    }\n\n    if (html === last) {\n      options.chars && options.chars(html);\n      if (false) {\n        options.warn((\"Mal-formatted tag at end of template: \\\"\" + html + \"\\\"\"), { start: index + html.length });\n      }\n      break\n    }\n  }\n\n  // Clean up any remaining tags\n  parseEndTag();\n\n  function advance (n) {\n    index += n;\n    html = html.substring(n);\n  }\n\n  function parseStartTag () {\n    var start = html.match(startTagOpen);\n    if (start) {\n      var match = {\n        tagName: start[1],\n        attrs: [],\n        start: index\n      };\n      advance(start[0].length);\n      var end, attr;\n      while (!(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {\n        attr.start = index;\n        advance(attr[0].length);\n        attr.end = index;\n        match.attrs.push(attr);\n      }\n      if (end) {\n        match.unarySlash = end[1];\n        advance(end[0].length);\n        match.end = index;\n        return match\n      }\n    }\n  }\n\n  function handleStartTag (match) {\n    var tagName = match.tagName;\n    var unarySlash = match.unarySlash;\n\n    if (expectHTML) {\n      if (lastTag === 'p' && isNonPhrasingTag(tagName)) {\n        parseEndTag(lastTag);\n      }\n      if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) {\n        parseEndTag(tagName);\n      }\n    }\n\n    var unary = isUnaryTag$$1(tagName) || !!unarySlash;\n\n    var l = match.attrs.length;\n    var attrs = new Array(l);\n    for (var i = 0; i < l; i++) {\n      var args = match.attrs[i];\n      var value = args[3] || args[4] || args[5] || '';\n      var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'\n        ? options.shouldDecodeNewlinesForHref\n        : options.shouldDecodeNewlines;\n      attrs[i] = {\n        name: args[1],\n        value: decodeAttr(value, shouldDecodeNewlines)\n      };\n      if (false) {\n        attrs[i].start = args.start + args[0].match(/^\\s*/).length;\n        attrs[i].end = args.end;\n      }\n    }\n\n    if (!unary) {\n      stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs, start: match.start, end: match.end });\n      lastTag = tagName;\n    }\n\n    if (options.start) {\n      options.start(tagName, attrs, unary, match.start, match.end);\n    }\n  }\n\n  function parseEndTag (tagName, start, end) {\n    var pos, lowerCasedTagName;\n    if (start == null) { start = index; }\n    if (end == null) { end = index; }\n\n    // Find the closest opened tag of the same type\n    if (tagName) {\n      lowerCasedTagName = tagName.toLowerCase();\n      for (pos = stack.length - 1; pos >= 0; pos--) {\n        if (stack[pos].lowerCasedTag === lowerCasedTagName) {\n          break\n        }\n      }\n    } else {\n      // If no tag name is provided, clean shop\n      pos = 0;\n    }\n\n    if (pos >= 0) {\n      // Close all the open elements, up the stack\n      for (var i = stack.length - 1; i >= pos; i--) {\n        if (false\n        ) {\n          options.warn(\n            (\"tag <\" + (stack[i].tag) + \"> has no matching end tag.\"),\n            { start: stack[i].start, end: stack[i].end }\n          );\n        }\n        if (options.end) {\n          options.end(stack[i].tag, start, end);\n        }\n      }\n\n      // Remove the open elements from the stack\n      stack.length = pos;\n      lastTag = pos && stack[pos - 1].tag;\n    } else if (lowerCasedTagName === 'br') {\n      if (options.start) {\n        options.start(tagName, [], true, start, end);\n      }\n    } else if (lowerCasedTagName === 'p') {\n      if (options.start) {\n        options.start(tagName, [], false, start, end);\n      }\n      if (options.end) {\n        options.end(tagName, start, end);\n      }\n    }\n  }\n}\n\n/*  */\n\nvar onRE = /^@|^v-on:/;\nvar dirRE = /^v-|^@|^:/;\nvar forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/;\nvar forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\nvar stripParensRE = /^\\(|\\)$/g;\nvar dynamicArgRE = /^\\[.*\\]$/;\n\nvar argRE = /:(.*)$/;\nvar bindRE = /^:|^\\.|^v-bind:/;\nvar modifierRE = /\\.[^.\\]]+(?=[^\\]]*$)/g;\n\nvar slotRE = /^v-slot(:|$)|^#/;\n\nvar lineBreakRE = /[\\r\\n]/;\nvar whitespaceRE$1 = /\\s+/g;\n\nvar invalidAttributeRE = /[\\s\"'<>\\/=]/;\n\nvar decodeHTMLCached = cached(he.decode);\n\nvar emptySlotScopeToken = \"_empty_\";\n\n// configurable state\nvar warn$2;\nvar delimiters;\nvar transforms;\nvar preTransforms;\nvar postTransforms;\nvar platformIsPreTag;\nvar platformMustUseProp;\nvar platformGetTagNamespace;\nvar maybeComponent;\n\nfunction createASTElement (\n  tag,\n  attrs,\n  parent\n) {\n  return {\n    type: 1,\n    tag: tag,\n    attrsList: attrs,\n    attrsMap: makeAttrsMap(attrs),\n    rawAttrsMap: {},\n    parent: parent,\n    children: []\n  }\n}\n\n/**\n * Convert HTML string to AST.\n */\nfunction parse (\n  template,\n  options\n) {\n  warn$2 = options.warn || baseWarn;\n\n  platformIsPreTag = options.isPreTag || no;\n  platformMustUseProp = options.mustUseProp || no;\n  platformGetTagNamespace = options.getTagNamespace || no;\n  var isReservedTag = options.isReservedTag || no;\n  maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\n\n  transforms = pluckModuleFunction(options.modules, 'transformNode');\n  preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');\n  postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');\n\n  delimiters = options.delimiters;\n\n  var stack = [];\n  var preserveWhitespace = options.preserveWhitespace !== false;\n  var whitespaceOption = options.whitespace;\n  var root;\n  var currentParent;\n  var inVPre = false;\n  var inPre = false;\n  var warned = false;\n\n  function warnOnce (msg, range) {\n    if (!warned) {\n      warned = true;\n      warn$2(msg, range);\n    }\n  }\n\n  function closeElement (element) {\n    trimEndingWhitespace(element);\n    if (!inVPre && !element.processed) {\n      element = processElement(element, options);\n    }\n    // tree management\n    if (!stack.length && element !== root) {\n      // allow root elements with v-if, v-else-if and v-else\n      if (root.if && (element.elseif || element.else)) {\n        if (false) {\n          checkRootConstraints(element);\n        }\n        addIfCondition(root, {\n          exp: element.elseif,\n          block: element\n        });\n      } else if (false) {\n        warnOnce(\n          \"Component template should contain exactly one root element. \" +\n          \"If you are using v-if on multiple elements, \" +\n          \"use v-else-if to chain them instead.\",\n          { start: element.start }\n        );\n      }\n    }\n    if (currentParent && !element.forbidden) {\n      if (element.elseif || element.else) {\n        processIfConditions(element, currentParent);\n      } else {\n        if (element.slotScope) {\n          // scoped slot\n          // keep it in the children list so that v-else(-if) conditions can\n          // find it as the prev node.\n          var name = element.slotTarget || '\"default\"'\n          ;(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;\n        }\n        currentParent.children.push(element);\n        element.parent = currentParent;\n      }\n    }\n\n    // final children cleanup\n    // filter out scoped slots\n    element.children = element.children.filter(function (c) { return !(c).slotScope; });\n    // remove trailing whitespace node again\n    trimEndingWhitespace(element);\n\n    // check pre state\n    if (element.pre) {\n      inVPre = false;\n    }\n    if (platformIsPreTag(element.tag)) {\n      inPre = false;\n    }\n    // apply post-transforms\n    for (var i = 0; i < postTransforms.length; i++) {\n      postTransforms[i](element, options);\n    }\n  }\n\n  function trimEndingWhitespace (el) {\n    // remove trailing whitespace node\n    if (!inPre) {\n      var lastNode;\n      while (\n        (lastNode = el.children[el.children.length - 1]) &&\n        lastNode.type === 3 &&\n        lastNode.text === ' '\n      ) {\n        el.children.pop();\n      }\n    }\n  }\n\n  function checkRootConstraints (el) {\n    if (el.tag === 'slot' || el.tag === 'template') {\n      warnOnce(\n        \"Cannot use <\" + (el.tag) + \"> as component root element because it may \" +\n        'contain multiple nodes.',\n        { start: el.start }\n      );\n    }\n    if (el.attrsMap.hasOwnProperty('v-for')) {\n      warnOnce(\n        'Cannot use v-for on stateful component root element because ' +\n        'it renders multiple elements.',\n        el.rawAttrsMap['v-for']\n      );\n    }\n  }\n\n  parseHTML(template, {\n    warn: warn$2,\n    expectHTML: options.expectHTML,\n    isUnaryTag: options.isUnaryTag,\n    canBeLeftOpenTag: options.canBeLeftOpenTag,\n    shouldDecodeNewlines: options.shouldDecodeNewlines,\n    shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,\n    shouldKeepComment: options.comments,\n    outputSourceRange: options.outputSourceRange,\n    start: function start (tag, attrs, unary, start$1, end) {\n      // check namespace.\n      // inherit parent ns if there is one\n      var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);\n\n      // handle IE svg bug\n      /* istanbul ignore if */\n      if (isIE && ns === 'svg') {\n        attrs = guardIESVGBug(attrs);\n      }\n\n      var element = createASTElement(tag, attrs, currentParent);\n      if (ns) {\n        element.ns = ns;\n      }\n\n      if (false) {\n        if (options.outputSourceRange) {\n          element.start = start$1;\n          element.end = end;\n          element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {\n            cumulated[attr.name] = attr;\n            return cumulated\n          }, {});\n        }\n        attrs.forEach(function (attr) {\n          if (invalidAttributeRE.test(attr.name)) {\n            warn$2(\n              \"Invalid dynamic argument expression: attribute names cannot contain \" +\n              \"spaces, quotes, <, >, / or =.\",\n              {\n                start: attr.start + attr.name.indexOf(\"[\"),\n                end: attr.start + attr.name.length\n              }\n            );\n          }\n        });\n      }\n\n      if (isForbiddenTag(element) && !isServerRendering()) {\n        element.forbidden = true;\n        \"production\" !== 'production' && warn$2(\n          'Templates should only be responsible for mapping the state to the ' +\n          'UI. Avoid placing tags with side-effects in your templates, such as ' +\n          \"<\" + tag + \">\" + ', as they will not be parsed.',\n          { start: element.start }\n        );\n      }\n\n      // apply pre-transforms\n      for (var i = 0; i < preTransforms.length; i++) {\n        element = preTransforms[i](element, options) || element;\n      }\n\n      if (!inVPre) {\n        processPre(element);\n        if (element.pre) {\n          inVPre = true;\n        }\n      }\n      if (platformIsPreTag(element.tag)) {\n        inPre = true;\n      }\n      if (inVPre) {\n        processRawAttrs(element);\n      } else if (!element.processed) {\n        // structural directives\n        processFor(element);\n        processIf(element);\n        processOnce(element);\n      }\n\n      if (!root) {\n        root = element;\n        if (false) {\n          checkRootConstraints(root);\n        }\n      }\n\n      if (!unary) {\n        currentParent = element;\n        stack.push(element);\n      } else {\n        closeElement(element);\n      }\n    },\n\n    end: function end (tag, start, end$1) {\n      var element = stack[stack.length - 1];\n      // pop stack\n      stack.length -= 1;\n      currentParent = stack[stack.length - 1];\n      if (false) {\n        element.end = end$1;\n      }\n      closeElement(element);\n    },\n\n    chars: function chars (text, start, end) {\n      if (!currentParent) {\n        if (false) {\n          if (text === template) {\n            warnOnce(\n              'Component template requires a root element, rather than just text.',\n              { start: start }\n            );\n          } else if ((text = text.trim())) {\n            warnOnce(\n              (\"text \\\"\" + text + \"\\\" outside root element will be ignored.\"),\n              { start: start }\n            );\n          }\n        }\n        return\n      }\n      // IE textarea placeholder bug\n      /* istanbul ignore if */\n      if (isIE &&\n        currentParent.tag === 'textarea' &&\n        currentParent.attrsMap.placeholder === text\n      ) {\n        return\n      }\n      var children = currentParent.children;\n      if (inPre || text.trim()) {\n        text = isTextTag(currentParent) ? text : decodeHTMLCached(text);\n      } else if (!children.length) {\n        // remove the whitespace-only node right after an opening tag\n        text = '';\n      } else if (whitespaceOption) {\n        if (whitespaceOption === 'condense') {\n          // in condense mode, remove the whitespace node if it contains\n          // line break, otherwise condense to a single space\n          text = lineBreakRE.test(text) ? '' : ' ';\n        } else {\n          text = ' ';\n        }\n      } else {\n        text = preserveWhitespace ? ' ' : '';\n      }\n      if (text) {\n        if (!inPre && whitespaceOption === 'condense') {\n          // condense consecutive whitespaces into single space\n          text = text.replace(whitespaceRE$1, ' ');\n        }\n        var res;\n        var child;\n        if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {\n          child = {\n            type: 2,\n            expression: res.expression,\n            tokens: res.tokens,\n            text: text\n          };\n        } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') {\n          child = {\n            type: 3,\n            text: text\n          };\n        }\n        if (child) {\n          if (false) {\n            child.start = start;\n            child.end = end;\n          }\n          children.push(child);\n        }\n      }\n    },\n    comment: function comment (text, start, end) {\n      // adding anyting as a sibling to the root node is forbidden\n      // comments should still be allowed, but ignored\n      if (currentParent) {\n        var child = {\n          type: 3,\n          text: text,\n          isComment: true\n        };\n        if (false) {\n          child.start = start;\n          child.end = end;\n        }\n        currentParent.children.push(child);\n      }\n    }\n  });\n  return root\n}\n\nfunction processPre (el) {\n  if (getAndRemoveAttr(el, 'v-pre') != null) {\n    el.pre = true;\n  }\n}\n\nfunction processRawAttrs (el) {\n  var list = el.attrsList;\n  var len = list.length;\n  if (len) {\n    var attrs = el.attrs = new Array(len);\n    for (var i = 0; i < len; i++) {\n      attrs[i] = {\n        name: list[i].name,\n        value: JSON.stringify(list[i].value)\n      };\n      if (list[i].start != null) {\n        attrs[i].start = list[i].start;\n        attrs[i].end = list[i].end;\n      }\n    }\n  } else if (!el.pre) {\n    // non root node in pre blocks with no attributes\n    el.plain = true;\n  }\n}\n\nfunction processElement (\n  element,\n  options\n) {\n  processKey(element);\n\n  // determine whether this is a plain element after\n  // removing structural attributes\n  element.plain = (\n    !element.key &&\n    !element.scopedSlots &&\n    !element.attrsList.length\n  );\n\n  processRef(element);\n  processSlotContent(element);\n  processSlotOutlet(element);\n  processComponent(element);\n  for (var i = 0; i < transforms.length; i++) {\n    element = transforms[i](element, options) || element;\n  }\n  processAttrs(element);\n  return element\n}\n\nfunction processKey (el) {\n  var exp = getBindingAttr(el, 'key');\n  if (exp) {\n    if (false) {\n      if (el.tag === 'template') {\n        warn$2(\n          \"<template> cannot be keyed. Place the key on real elements instead.\",\n          getRawBindingAttr(el, 'key')\n        );\n      }\n      if (el.for) {\n        var iterator = el.iterator2 || el.iterator1;\n        var parent = el.parent;\n        if (iterator && iterator === exp && parent && parent.tag === 'transition-group') {\n          warn$2(\n            \"Do not use v-for index as key on <transition-group> children, \" +\n            \"this is the same as not using keys.\",\n            getRawBindingAttr(el, 'key'),\n            true /* tip */\n          );\n        }\n      }\n    }\n    el.key = exp;\n  }\n}\n\nfunction processRef (el) {\n  var ref = getBindingAttr(el, 'ref');\n  if (ref) {\n    el.ref = ref;\n    el.refInFor = checkInFor(el);\n  }\n}\n\nfunction processFor (el) {\n  var exp;\n  if ((exp = getAndRemoveAttr(el, 'v-for'))) {\n    var res = parseFor(exp);\n    if (res) {\n      extend(el, res);\n    } else if (false) {\n      warn$2(\n        (\"Invalid v-for expression: \" + exp),\n        el.rawAttrsMap['v-for']\n      );\n    }\n  }\n}\n\n\n\nfunction parseFor (exp) {\n  var inMatch = exp.match(forAliasRE);\n  if (!inMatch) { return }\n  var res = {};\n  res.for = inMatch[2].trim();\n  var alias = inMatch[1].trim().replace(stripParensRE, '');\n  var iteratorMatch = alias.match(forIteratorRE);\n  if (iteratorMatch) {\n    res.alias = alias.replace(forIteratorRE, '').trim();\n    res.iterator1 = iteratorMatch[1].trim();\n    if (iteratorMatch[2]) {\n      res.iterator2 = iteratorMatch[2].trim();\n    }\n  } else {\n    res.alias = alias;\n  }\n  return res\n}\n\nfunction processIf (el) {\n  var exp = getAndRemoveAttr(el, 'v-if');\n  if (exp) {\n    el.if = exp;\n    addIfCondition(el, {\n      exp: exp,\n      block: el\n    });\n  } else {\n    if (getAndRemoveAttr(el, 'v-else') != null) {\n      el.else = true;\n    }\n    var elseif = getAndRemoveAttr(el, 'v-else-if');\n    if (elseif) {\n      el.elseif = elseif;\n    }\n  }\n}\n\nfunction processIfConditions (el, parent) {\n  var prev = findPrevElement(parent.children);\n  if (prev && prev.if) {\n    addIfCondition(prev, {\n      exp: el.elseif,\n      block: el\n    });\n  } else if (false) {\n    warn$2(\n      \"v-\" + (el.elseif ? ('else-if=\"' + el.elseif + '\"') : 'else') + \" \" +\n      \"used on element <\" + (el.tag) + \"> without corresponding v-if.\",\n      el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']\n    );\n  }\n}\n\nfunction findPrevElement (children) {\n  var i = children.length;\n  while (i--) {\n    if (children[i].type === 1) {\n      return children[i]\n    } else {\n      if (false) {\n        warn$2(\n          \"text \\\"\" + (children[i].text.trim()) + \"\\\" between v-if and v-else(-if) \" +\n          \"will be ignored.\",\n          children[i]\n        );\n      }\n      children.pop();\n    }\n  }\n}\n\nfunction addIfCondition (el, condition) {\n  if (!el.ifConditions) {\n    el.ifConditions = [];\n  }\n  el.ifConditions.push(condition);\n}\n\nfunction processOnce (el) {\n  var once$$1 = getAndRemoveAttr(el, 'v-once');\n  if (once$$1 != null) {\n    el.once = true;\n  }\n}\n\n// handle content being passed to a component as slot,\n// e.g. <template slot=\"xxx\">, <div slot-scope=\"xxx\">\nfunction processSlotContent (el) {\n  var slotScope;\n  if (el.tag === 'template') {\n    slotScope = getAndRemoveAttr(el, 'scope');\n    /* istanbul ignore if */\n    if (false) {\n      warn$2(\n        \"the \\\"scope\\\" attribute for scoped slots have been deprecated and \" +\n        \"replaced by \\\"slot-scope\\\" since 2.5. The new \\\"slot-scope\\\" attribute \" +\n        \"can also be used on plain elements in addition to <template> to \" +\n        \"denote scoped slots.\",\n        el.rawAttrsMap['scope'],\n        true\n      );\n    }\n    el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');\n  } else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {\n    /* istanbul ignore if */\n    if (false) {\n      warn$2(\n        \"Ambiguous combined usage of slot-scope and v-for on <\" + (el.tag) + \"> \" +\n        \"(v-for takes higher priority). Use a wrapper <template> for the \" +\n        \"scoped slot to make it clearer.\",\n        el.rawAttrsMap['slot-scope'],\n        true\n      );\n    }\n    el.slotScope = slotScope;\n  }\n\n  // slot=\"xxx\"\n  var slotTarget = getBindingAttr(el, 'slot');\n  if (slotTarget) {\n    el.slotTarget = slotTarget === '\"\"' ? '\"default\"' : slotTarget;\n    el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);\n    // preserve slot as an attribute for native shadow DOM compat\n    // only for non-scoped slots.\n    if (el.tag !== 'template' && !el.slotScope) {\n      addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));\n    }\n  }\n\n  // 2.6 v-slot syntax\n  {\n    if (el.tag === 'template') {\n      // v-slot on <template>\n      var slotBinding = getAndRemoveAttrByRegex(el, slotRE);\n      if (slotBinding) {\n        if (false) {\n          if (el.slotTarget || el.slotScope) {\n            warn$2(\n              \"Unexpected mixed usage of different slot syntaxes.\",\n              el\n            );\n          }\n          if (el.parent && !maybeComponent(el.parent)) {\n            warn$2(\n              \"<template v-slot> can only appear at the root level inside \" +\n              \"the receiving the component\",\n              el\n            );\n          }\n        }\n        var ref = getSlotName(slotBinding);\n        var name = ref.name;\n        var dynamic = ref.dynamic;\n        el.slotTarget = name;\n        el.slotTargetDynamic = dynamic;\n        el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf\n      }\n    } else {\n      // v-slot on component, denotes default slot\n      var slotBinding$1 = getAndRemoveAttrByRegex(el, slotRE);\n      if (slotBinding$1) {\n        if (false) {\n          if (!maybeComponent(el)) {\n            warn$2(\n              \"v-slot can only be used on components or <template>.\",\n              slotBinding$1\n            );\n          }\n          if (el.slotScope || el.slotTarget) {\n            warn$2(\n              \"Unexpected mixed usage of different slot syntaxes.\",\n              el\n            );\n          }\n          if (el.scopedSlots) {\n            warn$2(\n              \"To avoid scope ambiguity, the default slot should also use \" +\n              \"<template> syntax when there are other named slots.\",\n              slotBinding$1\n            );\n          }\n        }\n        // add the component's children to its default slot\n        var slots = el.scopedSlots || (el.scopedSlots = {});\n        var ref$1 = getSlotName(slotBinding$1);\n        var name$1 = ref$1.name;\n        var dynamic$1 = ref$1.dynamic;\n        var slotContainer = slots[name$1] = createASTElement('template', [], el);\n        slotContainer.slotTarget = name$1;\n        slotContainer.slotTargetDynamic = dynamic$1;\n        slotContainer.children = el.children.filter(function (c) {\n          if (!c.slotScope) {\n            c.parent = slotContainer;\n            return true\n          }\n        });\n        slotContainer.slotScope = slotBinding$1.value || emptySlotScopeToken;\n        // remove children as they are returned from scopedSlots now\n        el.children = [];\n        // mark el non-plain so data gets generated\n        el.plain = false;\n      }\n    }\n  }\n}\n\nfunction getSlotName (binding) {\n  var name = binding.name.replace(slotRE, '');\n  if (!name) {\n    if (binding.name[0] !== '#') {\n      name = 'default';\n    } else if (false) {\n      warn$2(\n        \"v-slot shorthand syntax requires a slot name.\",\n        binding\n      );\n    }\n  }\n  return dynamicArgRE.test(name)\n    // dynamic [name]\n    ? { name: name.slice(1, -1), dynamic: true }\n    // static name\n    : { name: (\"\\\"\" + name + \"\\\"\"), dynamic: false }\n}\n\n// handle <slot/> outlets\nfunction processSlotOutlet (el) {\n  if (el.tag === 'slot') {\n    el.slotName = getBindingAttr(el, 'name');\n    if (false) {\n      warn$2(\n        \"`key` does not work on <slot> because slots are abstract outlets \" +\n        \"and can possibly expand into multiple elements. \" +\n        \"Use the key on a wrapping element instead.\",\n        getRawBindingAttr(el, 'key')\n      );\n    }\n  }\n}\n\nfunction processComponent (el) {\n  var binding;\n  if ((binding = getBindingAttr(el, 'is'))) {\n    el.component = binding;\n  }\n  if (getAndRemoveAttr(el, 'inline-template') != null) {\n    el.inlineTemplate = true;\n  }\n}\n\nfunction processAttrs (el) {\n  var list = el.attrsList;\n  var i, l, name, rawName, value, modifiers, syncGen, isDynamic;\n  for (i = 0, l = list.length; i < l; i++) {\n    name = rawName = list[i].name;\n    value = list[i].value;\n    if (dirRE.test(name)) {\n      // mark element as dynamic\n      el.hasBindings = true;\n      // modifiers\n      modifiers = parseModifiers(name.replace(dirRE, ''));\n      // support .foo shorthand syntax for the .prop modifier\n      if (modifiers) {\n        name = name.replace(modifierRE, '');\n      }\n      if (bindRE.test(name)) { // v-bind\n        name = name.replace(bindRE, '');\n        value = parseFilters(value);\n        isDynamic = dynamicArgRE.test(name);\n        if (isDynamic) {\n          name = name.slice(1, -1);\n        }\n        if (\n          false\n        ) {\n          warn$2(\n            (\"The value for a v-bind expression cannot be empty. Found in \\\"v-bind:\" + name + \"\\\"\")\n          );\n        }\n        if (modifiers) {\n          if (modifiers.prop && !isDynamic) {\n            name = camelize(name);\n            if (name === 'innerHtml') { name = 'innerHTML'; }\n          }\n          if (modifiers.camel && !isDynamic) {\n            name = camelize(name);\n          }\n          if (modifiers.sync) {\n            syncGen = genAssignmentCode(value, \"$event\");\n            if (!isDynamic) {\n              addHandler(\n                el,\n                (\"update:\" + (camelize(name))),\n                syncGen,\n                null,\n                false,\n                warn$2,\n                list[i]\n              );\n              if (hyphenate(name) !== camelize(name)) {\n                addHandler(\n                  el,\n                  (\"update:\" + (hyphenate(name))),\n                  syncGen,\n                  null,\n                  false,\n                  warn$2,\n                  list[i]\n                );\n              }\n            } else {\n              // handler w/ dynamic event name\n              addHandler(\n                el,\n                (\"\\\"update:\\\"+(\" + name + \")\"),\n                syncGen,\n                null,\n                false,\n                warn$2,\n                list[i],\n                true // dynamic\n              );\n            }\n          }\n        }\n        if ((modifiers && modifiers.prop) || (\n          !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)\n        )) {\n          addProp(el, name, value, list[i], isDynamic);\n        } else {\n          addAttr(el, name, value, list[i], isDynamic);\n        }\n      } else if (onRE.test(name)) { // v-on\n        name = name.replace(onRE, '');\n        isDynamic = dynamicArgRE.test(name);\n        if (isDynamic) {\n          name = name.slice(1, -1);\n        }\n        addHandler(el, name, value, modifiers, false, warn$2, list[i], isDynamic);\n      } else { // normal directives\n        name = name.replace(dirRE, '');\n        // parse arg\n        var argMatch = name.match(argRE);\n        var arg = argMatch && argMatch[1];\n        isDynamic = false;\n        if (arg) {\n          name = name.slice(0, -(arg.length + 1));\n          if (dynamicArgRE.test(arg)) {\n            arg = arg.slice(1, -1);\n            isDynamic = true;\n          }\n        }\n        addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);\n        if (false) {\n          checkForAliasModel(el, value);\n        }\n      }\n    } else {\n      // literal attribute\n      if (false) {\n        var res = parseText(value, delimiters);\n        if (res) {\n          warn$2(\n            name + \"=\\\"\" + value + \"\\\": \" +\n            'Interpolation inside attributes has been removed. ' +\n            'Use v-bind or the colon shorthand instead. For example, ' +\n            'instead of <div id=\"{{ val }}\">, use <div :id=\"val\">.',\n            list[i]\n          );\n        }\n      }\n      addAttr(el, name, JSON.stringify(value), list[i]);\n      // #6887 firefox doesn't update muted state if set via attribute\n      // even immediately after element creation\n      if (!el.component &&\n          name === 'muted' &&\n          platformMustUseProp(el.tag, el.attrsMap.type, name)) {\n        addProp(el, name, 'true', list[i]);\n      }\n    }\n  }\n}\n\nfunction checkInFor (el) {\n  var parent = el;\n  while (parent) {\n    if (parent.for !== undefined) {\n      return true\n    }\n    parent = parent.parent;\n  }\n  return false\n}\n\nfunction parseModifiers (name) {\n  var match = name.match(modifierRE);\n  if (match) {\n    var ret = {};\n    match.forEach(function (m) { ret[m.slice(1)] = true; });\n    return ret\n  }\n}\n\nfunction makeAttrsMap (attrs) {\n  var map = {};\n  for (var i = 0, l = attrs.length; i < l; i++) {\n    if (\n      false\n    ) {\n      warn$2('duplicate attribute: ' + attrs[i].name, attrs[i]);\n    }\n    map[attrs[i].name] = attrs[i].value;\n  }\n  return map\n}\n\n// for script (e.g. type=\"x/template\") or style, do not decode content\nfunction isTextTag (el) {\n  return el.tag === 'script' || el.tag === 'style'\n}\n\nfunction isForbiddenTag (el) {\n  return (\n    el.tag === 'style' ||\n    (el.tag === 'script' && (\n      !el.attrsMap.type ||\n      el.attrsMap.type === 'text/javascript'\n    ))\n  )\n}\n\nvar ieNSBug = /^xmlns:NS\\d+/;\nvar ieNSPrefix = /^NS\\d+:/;\n\n/* istanbul ignore next */\nfunction guardIESVGBug (attrs) {\n  var res = [];\n  for (var i = 0; i < attrs.length; i++) {\n    var attr = attrs[i];\n    if (!ieNSBug.test(attr.name)) {\n      attr.name = attr.name.replace(ieNSPrefix, '');\n      res.push(attr);\n    }\n  }\n  return res\n}\n\nfunction checkForAliasModel (el, value) {\n  var _el = el;\n  while (_el) {\n    if (_el.for && _el.alias === value) {\n      warn$2(\n        \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n        \"You are binding v-model directly to a v-for iteration alias. \" +\n        \"This will not be able to modify the v-for source array because \" +\n        \"writing to the alias is like modifying a function local variable. \" +\n        \"Consider using an array of objects and use v-model on an object property instead.\",\n        el.rawAttrsMap['v-model']\n      );\n    }\n    _el = _el.parent;\n  }\n}\n\n/*  */\n\nfunction preTransformNode (el, options) {\n  if (el.tag === 'input') {\n    var map = el.attrsMap;\n    if (!map['v-model']) {\n      return\n    }\n\n    var typeBinding;\n    if (map[':type'] || map['v-bind:type']) {\n      typeBinding = getBindingAttr(el, 'type');\n    }\n    if (!map.type && !typeBinding && map['v-bind']) {\n      typeBinding = \"(\" + (map['v-bind']) + \").type\";\n    }\n\n    if (typeBinding) {\n      var ifCondition = getAndRemoveAttr(el, 'v-if', true);\n      var ifConditionExtra = ifCondition ? (\"&&(\" + ifCondition + \")\") : \"\";\n      var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;\n      var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);\n      // 1. checkbox\n      var branch0 = cloneASTElement(el);\n      // process for on the main node\n      processFor(branch0);\n      addRawAttr(branch0, 'type', 'checkbox');\n      processElement(branch0, options);\n      branch0.processed = true; // prevent it from double-processed\n      branch0.if = \"(\" + typeBinding + \")==='checkbox'\" + ifConditionExtra;\n      addIfCondition(branch0, {\n        exp: branch0.if,\n        block: branch0\n      });\n      // 2. add radio else-if condition\n      var branch1 = cloneASTElement(el);\n      getAndRemoveAttr(branch1, 'v-for', true);\n      addRawAttr(branch1, 'type', 'radio');\n      processElement(branch1, options);\n      addIfCondition(branch0, {\n        exp: \"(\" + typeBinding + \")==='radio'\" + ifConditionExtra,\n        block: branch1\n      });\n      // 3. other\n      var branch2 = cloneASTElement(el);\n      getAndRemoveAttr(branch2, 'v-for', true);\n      addRawAttr(branch2, ':type', typeBinding);\n      processElement(branch2, options);\n      addIfCondition(branch0, {\n        exp: ifCondition,\n        block: branch2\n      });\n\n      if (hasElse) {\n        branch0.else = true;\n      } else if (elseIfCondition) {\n        branch0.elseif = elseIfCondition;\n      }\n\n      return branch0\n    }\n  }\n}\n\nfunction cloneASTElement (el) {\n  return createASTElement(el.tag, el.attrsList.slice(), el.parent)\n}\n\nvar model$1 = {\n  preTransformNode: preTransformNode\n};\n\nvar modules$1 = [\n  klass$1,\n  style$1,\n  model$1\n];\n\n/*  */\n\nfunction text (el, dir) {\n  if (dir.value) {\n    addProp(el, 'textContent', (\"_s(\" + (dir.value) + \")\"), dir);\n  }\n}\n\n/*  */\n\nfunction html (el, dir) {\n  if (dir.value) {\n    addProp(el, 'innerHTML', (\"_s(\" + (dir.value) + \")\"), dir);\n  }\n}\n\nvar directives$1 = {\n  model: model,\n  text: text,\n  html: html\n};\n\n/*  */\n\nvar baseOptions = {\n  expectHTML: true,\n  modules: modules$1,\n  directives: directives$1,\n  isPreTag: isPreTag,\n  isUnaryTag: isUnaryTag,\n  mustUseProp: mustUseProp,\n  canBeLeftOpenTag: canBeLeftOpenTag,\n  isReservedTag: isReservedTag,\n  getTagNamespace: getTagNamespace,\n  staticKeys: genStaticKeys(modules$1)\n};\n\n/*  */\n\nvar isStaticKey;\nvar isPlatformReservedTag;\n\nvar genStaticKeysCached = cached(genStaticKeys$1);\n\n/**\n * Goal of the optimizer: walk the generated template AST tree\n * and detect sub-trees that are purely static, i.e. parts of\n * the DOM that never needs to change.\n *\n * Once we detect these sub-trees, we can:\n *\n * 1. Hoist them into constants, so that we no longer need to\n *    create fresh nodes for them on each re-render;\n * 2. Completely skip them in the patching process.\n */\nfunction optimize (root, options) {\n  if (!root) { return }\n  isStaticKey = genStaticKeysCached(options.staticKeys || '');\n  isPlatformReservedTag = options.isReservedTag || no;\n  // first pass: mark all non-static nodes.\n  markStatic$1(root);\n  // second pass: mark static roots.\n  markStaticRoots(root, false);\n}\n\nfunction genStaticKeys$1 (keys) {\n  return makeMap(\n    'type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +\n    (keys ? ',' + keys : '')\n  )\n}\n\nfunction markStatic$1 (node) {\n  node.static = isStatic(node);\n  if (node.type === 1) {\n    // do not make component slot content static. this avoids\n    // 1. components not able to mutate slot nodes\n    // 2. static slot content fails for hot-reloading\n    if (\n      !isPlatformReservedTag(node.tag) &&\n      node.tag !== 'slot' &&\n      node.attrsMap['inline-template'] == null\n    ) {\n      return\n    }\n    for (var i = 0, l = node.children.length; i < l; i++) {\n      var child = node.children[i];\n      markStatic$1(child);\n      if (!child.static) {\n        node.static = false;\n      }\n    }\n    if (node.ifConditions) {\n      for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) {\n        var block = node.ifConditions[i$1].block;\n        markStatic$1(block);\n        if (!block.static) {\n          node.static = false;\n        }\n      }\n    }\n  }\n}\n\nfunction markStaticRoots (node, isInFor) {\n  if (node.type === 1) {\n    if (node.static || node.once) {\n      node.staticInFor = isInFor;\n    }\n    // For a node to qualify as a static root, it should have children that\n    // are not just static text. Otherwise the cost of hoisting out will\n    // outweigh the benefits and it's better off to just always render it fresh.\n    if (node.static && node.children.length && !(\n      node.children.length === 1 &&\n      node.children[0].type === 3\n    )) {\n      node.staticRoot = true;\n      return\n    } else {\n      node.staticRoot = false;\n    }\n    if (node.children) {\n      for (var i = 0, l = node.children.length; i < l; i++) {\n        markStaticRoots(node.children[i], isInFor || !!node.for);\n      }\n    }\n    if (node.ifConditions) {\n      for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) {\n        markStaticRoots(node.ifConditions[i$1].block, isInFor);\n      }\n    }\n  }\n}\n\nfunction isStatic (node) {\n  if (node.type === 2) { // expression\n    return false\n  }\n  if (node.type === 3) { // text\n    return true\n  }\n  return !!(node.pre || (\n    !node.hasBindings && // no dynamic bindings\n    !node.if && !node.for && // not v-if or v-for or v-else\n    !isBuiltInTag(node.tag) && // not a built-in\n    isPlatformReservedTag(node.tag) && // not a component\n    !isDirectChildOfTemplateFor(node) &&\n    Object.keys(node).every(isStaticKey)\n  ))\n}\n\nfunction isDirectChildOfTemplateFor (node) {\n  while (node.parent) {\n    node = node.parent;\n    if (node.tag !== 'template') {\n      return false\n    }\n    if (node.for) {\n      return true\n    }\n  }\n  return false\n}\n\n/*  */\n\nvar fnExpRE = /^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*(?:[\\w$]+)?\\s*\\(/;\nvar fnInvokeRE = /\\([^)]*?\\);*$/;\nvar simplePathRE = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/;\n\n// KeyboardEvent.keyCode aliases\nvar keyCodes = {\n  esc: 27,\n  tab: 9,\n  enter: 13,\n  space: 32,\n  up: 38,\n  left: 37,\n  right: 39,\n  down: 40,\n  'delete': [8, 46]\n};\n\n// KeyboardEvent.key aliases\nvar keyNames = {\n  // #7880: IE11 and Edge use `Esc` for Escape key name.\n  esc: ['Esc', 'Escape'],\n  tab: 'Tab',\n  enter: 'Enter',\n  // #9112: IE11 uses `Spacebar` for Space key name.\n  space: [' ', 'Spacebar'],\n  // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.\n  up: ['Up', 'ArrowUp'],\n  left: ['Left', 'ArrowLeft'],\n  right: ['Right', 'ArrowRight'],\n  down: ['Down', 'ArrowDown'],\n  // #9112: IE11 uses `Del` for Delete key name.\n  'delete': ['Backspace', 'Delete', 'Del']\n};\n\n// #4868: modifiers that prevent the execution of the listener\n// need to explicitly return null so that we can determine whether to remove\n// the listener for .once\nvar genGuard = function (condition) { return (\"if(\" + condition + \")return null;\"); };\n\nvar modifierCode = {\n  stop: '$event.stopPropagation();',\n  prevent: '$event.preventDefault();',\n  self: genGuard(\"$event.target !== $event.currentTarget\"),\n  ctrl: genGuard(\"!$event.ctrlKey\"),\n  shift: genGuard(\"!$event.shiftKey\"),\n  alt: genGuard(\"!$event.altKey\"),\n  meta: genGuard(\"!$event.metaKey\"),\n  left: genGuard(\"'button' in $event && $event.button !== 0\"),\n  middle: genGuard(\"'button' in $event && $event.button !== 1\"),\n  right: genGuard(\"'button' in $event && $event.button !== 2\")\n};\n\nfunction genHandlers (\n  events,\n  isNative\n) {\n  var prefix = isNative ? 'nativeOn:' : 'on:';\n  var staticHandlers = \"\";\n  var dynamicHandlers = \"\";\n  for (var name in events) {\n    var handlerCode = genHandler(events[name]);\n    if (events[name] && events[name].dynamic) {\n      dynamicHandlers += name + \",\" + handlerCode + \",\";\n    } else {\n      staticHandlers += \"\\\"\" + name + \"\\\":\" + handlerCode + \",\";\n    }\n  }\n  staticHandlers = \"{\" + (staticHandlers.slice(0, -1)) + \"}\";\n  if (dynamicHandlers) {\n    return prefix + \"_d(\" + staticHandlers + \",[\" + (dynamicHandlers.slice(0, -1)) + \"])\"\n  } else {\n    return prefix + staticHandlers\n  }\n}\n\nfunction genHandler (handler) {\n  if (!handler) {\n    return 'function(){}'\n  }\n\n  if (Array.isArray(handler)) {\n    return (\"[\" + (handler.map(function (handler) { return genHandler(handler); }).join(',')) + \"]\")\n  }\n\n  var isMethodPath = simplePathRE.test(handler.value);\n  var isFunctionExpression = fnExpRE.test(handler.value);\n  var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));\n\n  if (!handler.modifiers) {\n    if (isMethodPath || isFunctionExpression) {\n      return handler.value\n    }\n    return (\"function($event){\" + (isFunctionInvocation ? (\"return \" + (handler.value)) : handler.value) + \"}\") // inline statement\n  } else {\n    var code = '';\n    var genModifierCode = '';\n    var keys = [];\n    for (var key in handler.modifiers) {\n      if (modifierCode[key]) {\n        genModifierCode += modifierCode[key];\n        // left/right\n        if (keyCodes[key]) {\n          keys.push(key);\n        }\n      } else if (key === 'exact') {\n        var modifiers = (handler.modifiers);\n        genModifierCode += genGuard(\n          ['ctrl', 'shift', 'alt', 'meta']\n            .filter(function (keyModifier) { return !modifiers[keyModifier]; })\n            .map(function (keyModifier) { return (\"$event.\" + keyModifier + \"Key\"); })\n            .join('||')\n        );\n      } else {\n        keys.push(key);\n      }\n    }\n    if (keys.length) {\n      code += genKeyFilter(keys);\n    }\n    // Make sure modifiers like prevent and stop get executed after key filtering\n    if (genModifierCode) {\n      code += genModifierCode;\n    }\n    var handlerCode = isMethodPath\n      ? (\"return \" + (handler.value) + \"($event)\")\n      : isFunctionExpression\n        ? (\"return (\" + (handler.value) + \")($event)\")\n        : isFunctionInvocation\n          ? (\"return \" + (handler.value))\n          : handler.value;\n    return (\"function($event){\" + code + handlerCode + \"}\")\n  }\n}\n\nfunction genKeyFilter (keys) {\n  return (\n    // make sure the key filters only apply to KeyboardEvents\n    // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake\n    // key events that do not have keyCode property...\n    \"if(!$event.type.indexOf('key')&&\" +\n    (keys.map(genFilterCode).join('&&')) + \")return null;\"\n  )\n}\n\nfunction genFilterCode (key) {\n  var keyVal = parseInt(key, 10);\n  if (keyVal) {\n    return (\"$event.keyCode!==\" + keyVal)\n  }\n  var keyCode = keyCodes[key];\n  var keyName = keyNames[key];\n  return (\n    \"_k($event.keyCode,\" +\n    (JSON.stringify(key)) + \",\" +\n    (JSON.stringify(keyCode)) + \",\" +\n    \"$event.key,\" +\n    \"\" + (JSON.stringify(keyName)) +\n    \")\"\n  )\n}\n\n/*  */\n\nfunction on (el, dir) {\n  if (false) {\n    warn(\"v-on without argument does not support modifiers.\");\n  }\n  el.wrapListeners = function (code) { return (\"_g(\" + code + \",\" + (dir.value) + \")\"); };\n}\n\n/*  */\n\nfunction bind$1 (el, dir) {\n  el.wrapData = function (code) {\n    return (\"_b(\" + code + \",'\" + (el.tag) + \"',\" + (dir.value) + \",\" + (dir.modifiers && dir.modifiers.prop ? 'true' : 'false') + (dir.modifiers && dir.modifiers.sync ? ',true' : '') + \")\")\n  };\n}\n\n/*  */\n\nvar baseDirectives = {\n  on: on,\n  bind: bind$1,\n  cloak: noop\n};\n\n/*  */\n\n\n\n\n\nvar CodegenState = function CodegenState (options) {\n  this.options = options;\n  this.warn = options.warn || baseWarn;\n  this.transforms = pluckModuleFunction(options.modules, 'transformCode');\n  this.dataGenFns = pluckModuleFunction(options.modules, 'genData');\n  this.directives = extend(extend({}, baseDirectives), options.directives);\n  var isReservedTag = options.isReservedTag || no;\n  this.maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\n  this.onceId = 0;\n  this.staticRenderFns = [];\n  this.pre = false;\n};\n\n\n\nfunction generate (\n  ast,\n  options\n) {\n  var state = new CodegenState(options);\n  var code = ast ? genElement(ast, state) : '_c(\"div\")';\n  return {\n    render: (\"with(this){return \" + code + \"}\"),\n    staticRenderFns: state.staticRenderFns\n  }\n}\n\nfunction genElement (el, state) {\n  if (el.parent) {\n    el.pre = el.pre || el.parent.pre;\n  }\n\n  if (el.staticRoot && !el.staticProcessed) {\n    return genStatic(el, state)\n  } else if (el.once && !el.onceProcessed) {\n    return genOnce(el, state)\n  } else if (el.for && !el.forProcessed) {\n    return genFor(el, state)\n  } else if (el.if && !el.ifProcessed) {\n    return genIf(el, state)\n  } else if (el.tag === 'template' && !el.slotTarget && !state.pre) {\n    return genChildren(el, state) || 'void 0'\n  } else if (el.tag === 'slot') {\n    return genSlot(el, state)\n  } else {\n    // component or element\n    var code;\n    if (el.component) {\n      code = genComponent(el.component, el, state);\n    } else {\n      var data;\n      if (!el.plain || (el.pre && state.maybeComponent(el))) {\n        data = genData$2(el, state);\n      }\n\n      var children = el.inlineTemplate ? null : genChildren(el, state, true);\n      code = \"_c('\" + (el.tag) + \"'\" + (data ? (\",\" + data) : '') + (children ? (\",\" + children) : '') + \")\";\n    }\n    // module transforms\n    for (var i = 0; i < state.transforms.length; i++) {\n      code = state.transforms[i](el, code);\n    }\n    return code\n  }\n}\n\n// hoist static sub-trees out\nfunction genStatic (el, state) {\n  el.staticProcessed = true;\n  // Some elements (templates) need to behave differently inside of a v-pre\n  // node.  All pre nodes are static roots, so we can use this as a location to\n  // wrap a state change and reset it upon exiting the pre node.\n  var originalPreState = state.pre;\n  if (el.pre) {\n    state.pre = el.pre;\n  }\n  state.staticRenderFns.push((\"with(this){return \" + (genElement(el, state)) + \"}\"));\n  state.pre = originalPreState;\n  return (\"_m(\" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + \")\")\n}\n\n// v-once\nfunction genOnce (el, state) {\n  el.onceProcessed = true;\n  if (el.if && !el.ifProcessed) {\n    return genIf(el, state)\n  } else if (el.staticInFor) {\n    var key = '';\n    var parent = el.parent;\n    while (parent) {\n      if (parent.for) {\n        key = parent.key;\n        break\n      }\n      parent = parent.parent;\n    }\n    if (!key) {\n      \"production\" !== 'production' && state.warn(\n        \"v-once can only be used inside v-for that is keyed. \",\n        el.rawAttrsMap['v-once']\n      );\n      return genElement(el, state)\n    }\n    return (\"_o(\" + (genElement(el, state)) + \",\" + (state.onceId++) + \",\" + key + \")\")\n  } else {\n    return genStatic(el, state)\n  }\n}\n\nfunction genIf (\n  el,\n  state,\n  altGen,\n  altEmpty\n) {\n  el.ifProcessed = true; // avoid recursion\n  return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty)\n}\n\nfunction genIfConditions (\n  conditions,\n  state,\n  altGen,\n  altEmpty\n) {\n  if (!conditions.length) {\n    return altEmpty || '_e()'\n  }\n\n  var condition = conditions.shift();\n  if (condition.exp) {\n    return (\"(\" + (condition.exp) + \")?\" + (genTernaryExp(condition.block)) + \":\" + (genIfConditions(conditions, state, altGen, altEmpty)))\n  } else {\n    return (\"\" + (genTernaryExp(condition.block)))\n  }\n\n  // v-if with v-once should generate code like (a)?_m(0):_m(1)\n  function genTernaryExp (el) {\n    return altGen\n      ? altGen(el, state)\n      : el.once\n        ? genOnce(el, state)\n        : genElement(el, state)\n  }\n}\n\nfunction genFor (\n  el,\n  state,\n  altGen,\n  altHelper\n) {\n  var exp = el.for;\n  var alias = el.alias;\n  var iterator1 = el.iterator1 ? (\",\" + (el.iterator1)) : '';\n  var iterator2 = el.iterator2 ? (\",\" + (el.iterator2)) : '';\n\n  if (false\n  ) {\n    state.warn(\n      \"<\" + (el.tag) + \" v-for=\\\"\" + alias + \" in \" + exp + \"\\\">: component lists rendered with \" +\n      \"v-for should have explicit keys. \" +\n      \"See https://vuejs.org/guide/list.html#key for more info.\",\n      el.rawAttrsMap['v-for'],\n      true /* tip */\n    );\n  }\n\n  el.forProcessed = true; // avoid recursion\n  return (altHelper || '_l') + \"((\" + exp + \"),\" +\n    \"function(\" + alias + iterator1 + iterator2 + \"){\" +\n      \"return \" + ((altGen || genElement)(el, state)) +\n    '})'\n}\n\nfunction genData$2 (el, state) {\n  var data = '{';\n\n  // directives first.\n  // directives may mutate the el's other properties before they are generated.\n  var dirs = genDirectives(el, state);\n  if (dirs) { data += dirs + ','; }\n\n  // key\n  if (el.key) {\n    data += \"key:\" + (el.key) + \",\";\n  }\n  // ref\n  if (el.ref) {\n    data += \"ref:\" + (el.ref) + \",\";\n  }\n  if (el.refInFor) {\n    data += \"refInFor:true,\";\n  }\n  // pre\n  if (el.pre) {\n    data += \"pre:true,\";\n  }\n  // record original tag name for components using \"is\" attribute\n  if (el.component) {\n    data += \"tag:\\\"\" + (el.tag) + \"\\\",\";\n  }\n  // module data generation functions\n  for (var i = 0; i < state.dataGenFns.length; i++) {\n    data += state.dataGenFns[i](el);\n  }\n  // attributes\n  if (el.attrs) {\n    data += \"attrs:\" + (genProps(el.attrs)) + \",\";\n  }\n  // DOM props\n  if (el.props) {\n    data += \"domProps:\" + (genProps(el.props)) + \",\";\n  }\n  // event handlers\n  if (el.events) {\n    data += (genHandlers(el.events, false)) + \",\";\n  }\n  if (el.nativeEvents) {\n    data += (genHandlers(el.nativeEvents, true)) + \",\";\n  }\n  // slot target\n  // only for non-scoped slots\n  if (el.slotTarget && !el.slotScope) {\n    data += \"slot:\" + (el.slotTarget) + \",\";\n  }\n  // scoped slots\n  if (el.scopedSlots) {\n    data += (genScopedSlots(el, el.scopedSlots, state)) + \",\";\n  }\n  // component v-model\n  if (el.model) {\n    data += \"model:{value:\" + (el.model.value) + \",callback:\" + (el.model.callback) + \",expression:\" + (el.model.expression) + \"},\";\n  }\n  // inline-template\n  if (el.inlineTemplate) {\n    var inlineTemplate = genInlineTemplate(el, state);\n    if (inlineTemplate) {\n      data += inlineTemplate + \",\";\n    }\n  }\n  data = data.replace(/,$/, '') + '}';\n  // v-bind dynamic argument wrap\n  // v-bind with dynamic arguments must be applied using the same v-bind object\n  // merge helper so that class/style/mustUseProp attrs are handled correctly.\n  if (el.dynamicAttrs) {\n    data = \"_b(\" + data + \",\\\"\" + (el.tag) + \"\\\",\" + (genProps(el.dynamicAttrs)) + \")\";\n  }\n  // v-bind data wrap\n  if (el.wrapData) {\n    data = el.wrapData(data);\n  }\n  // v-on data wrap\n  if (el.wrapListeners) {\n    data = el.wrapListeners(data);\n  }\n  return data\n}\n\nfunction genDirectives (el, state) {\n  var dirs = el.directives;\n  if (!dirs) { return }\n  var res = 'directives:[';\n  var hasRuntime = false;\n  var i, l, dir, needRuntime;\n  for (i = 0, l = dirs.length; i < l; i++) {\n    dir = dirs[i];\n    needRuntime = true;\n    var gen = state.directives[dir.name];\n    if (gen) {\n      // compile-time directive that manipulates AST.\n      // returns true if it also needs a runtime counterpart.\n      needRuntime = !!gen(el, dir, state.warn);\n    }\n    if (needRuntime) {\n      hasRuntime = true;\n      res += \"{name:\\\"\" + (dir.name) + \"\\\",rawName:\\\"\" + (dir.rawName) + \"\\\"\" + (dir.value ? (\",value:(\" + (dir.value) + \"),expression:\" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (\",arg:\" + (dir.isDynamicArg ? dir.arg : (\"\\\"\" + (dir.arg) + \"\\\"\"))) : '') + (dir.modifiers ? (\",modifiers:\" + (JSON.stringify(dir.modifiers))) : '') + \"},\";\n    }\n  }\n  if (hasRuntime) {\n    return res.slice(0, -1) + ']'\n  }\n}\n\nfunction genInlineTemplate (el, state) {\n  var ast = el.children[0];\n  if (false) {\n    state.warn(\n      'Inline-template components must have exactly one child element.',\n      { start: el.start }\n    );\n  }\n  if (ast && ast.type === 1) {\n    var inlineRenderFns = generate(ast, state.options);\n    return (\"inlineTemplate:{render:function(){\" + (inlineRenderFns.render) + \"},staticRenderFns:[\" + (inlineRenderFns.staticRenderFns.map(function (code) { return (\"function(){\" + code + \"}\"); }).join(',')) + \"]}\")\n  }\n}\n\nfunction genScopedSlots (\n  el,\n  slots,\n  state\n) {\n  // by default scoped slots are considered \"stable\", this allows child\n  // components with only scoped slots to skip forced updates from parent.\n  // but in some cases we have to bail-out of this optimization\n  // for example if the slot contains dynamic names, has v-if or v-for on them...\n  var needsForceUpdate = el.for || Object.keys(slots).some(function (key) {\n    var slot = slots[key];\n    return (\n      slot.slotTargetDynamic ||\n      slot.if ||\n      slot.for ||\n      containsSlotChild(slot) // is passing down slot from parent which may be dynamic\n    )\n  });\n\n  // #9534: if a component with scoped slots is inside a conditional branch,\n  // it's possible for the same component to be reused but with different\n  // compiled slot content. To avoid that, we generate a unique key based on\n  // the generated code of all the slot contents.\n  var needsKey = !!el.if;\n\n  // OR when it is inside another scoped slot or v-for (the reactivity may be\n  // disconnected due to the intermediate scope variable)\n  // #9438, #9506\n  // TODO: this can be further optimized by properly analyzing in-scope bindings\n  // and skip force updating ones that do not actually use scope variables.\n  if (!needsForceUpdate) {\n    var parent = el.parent;\n    while (parent) {\n      if (\n        (parent.slotScope && parent.slotScope !== emptySlotScopeToken) ||\n        parent.for\n      ) {\n        needsForceUpdate = true;\n        break\n      }\n      if (parent.if) {\n        needsKey = true;\n      }\n      parent = parent.parent;\n    }\n  }\n\n  var generatedSlots = Object.keys(slots)\n    .map(function (key) { return genScopedSlot(slots[key], state); })\n    .join(',');\n\n  return (\"scopedSlots:_u([\" + generatedSlots + \"]\" + (needsForceUpdate ? \",null,true\" : \"\") + (!needsForceUpdate && needsKey ? (\",null,false,\" + (hash(generatedSlots))) : \"\") + \")\")\n}\n\nfunction hash(str) {\n  var hash = 5381;\n  var i = str.length;\n  while(i) {\n    hash = (hash * 33) ^ str.charCodeAt(--i);\n  }\n  return hash >>> 0\n}\n\nfunction containsSlotChild (el) {\n  if (el.type === 1) {\n    if (el.tag === 'slot') {\n      return true\n    }\n    return el.children.some(containsSlotChild)\n  }\n  return false\n}\n\nfunction genScopedSlot (\n  el,\n  state\n) {\n  var isLegacySyntax = el.attrsMap['slot-scope'];\n  if (el.if && !el.ifProcessed && !isLegacySyntax) {\n    return genIf(el, state, genScopedSlot, \"null\")\n  }\n  if (el.for && !el.forProcessed) {\n    return genFor(el, state, genScopedSlot)\n  }\n  var slotScope = el.slotScope === emptySlotScopeToken\n    ? \"\"\n    : String(el.slotScope);\n  var fn = \"function(\" + slotScope + \"){\" +\n    \"return \" + (el.tag === 'template'\n      ? el.if && isLegacySyntax\n        ? (\"(\" + (el.if) + \")?\" + (genChildren(el, state) || 'undefined') + \":undefined\")\n        : genChildren(el, state) || 'undefined'\n      : genElement(el, state)) + \"}\";\n  // reverse proxy v-slot without scope on this.$slots\n  var reverseProxy = slotScope ? \"\" : \",proxy:true\";\n  return (\"{key:\" + (el.slotTarget || \"\\\"default\\\"\") + \",fn:\" + fn + reverseProxy + \"}\")\n}\n\nfunction genChildren (\n  el,\n  state,\n  checkSkip,\n  altGenElement,\n  altGenNode\n) {\n  var children = el.children;\n  if (children.length) {\n    var el$1 = children[0];\n    // optimize single v-for\n    if (children.length === 1 &&\n      el$1.for &&\n      el$1.tag !== 'template' &&\n      el$1.tag !== 'slot'\n    ) {\n      var normalizationType = checkSkip\n        ? state.maybeComponent(el$1) ? \",1\" : \",0\"\n        : \"\";\n      return (\"\" + ((altGenElement || genElement)(el$1, state)) + normalizationType)\n    }\n    var normalizationType$1 = checkSkip\n      ? getNormalizationType(children, state.maybeComponent)\n      : 0;\n    var gen = altGenNode || genNode;\n    return (\"[\" + (children.map(function (c) { return gen(c, state); }).join(',')) + \"]\" + (normalizationType$1 ? (\",\" + normalizationType$1) : ''))\n  }\n}\n\n// determine the normalization needed for the children array.\n// 0: no normalization needed\n// 1: simple normalization needed (possible 1-level deep nested array)\n// 2: full normalization needed\nfunction getNormalizationType (\n  children,\n  maybeComponent\n) {\n  var res = 0;\n  for (var i = 0; i < children.length; i++) {\n    var el = children[i];\n    if (el.type !== 1) {\n      continue\n    }\n    if (needsNormalization(el) ||\n        (el.ifConditions && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {\n      res = 2;\n      break\n    }\n    if (maybeComponent(el) ||\n        (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {\n      res = 1;\n    }\n  }\n  return res\n}\n\nfunction needsNormalization (el) {\n  return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'\n}\n\nfunction genNode (node, state) {\n  if (node.type === 1) {\n    return genElement(node, state)\n  } else if (node.type === 3 && node.isComment) {\n    return genComment(node)\n  } else {\n    return genText(node)\n  }\n}\n\nfunction genText (text) {\n  return (\"_v(\" + (text.type === 2\n    ? text.expression // no need for () because already wrapped in _s()\n    : transformSpecialNewlines(JSON.stringify(text.text))) + \")\")\n}\n\nfunction genComment (comment) {\n  return (\"_e(\" + (JSON.stringify(comment.text)) + \")\")\n}\n\nfunction genSlot (el, state) {\n  var slotName = el.slotName || '\"default\"';\n  var children = genChildren(el, state);\n  var res = \"_t(\" + slotName + (children ? (\",\" + children) : '');\n  var attrs = el.attrs || el.dynamicAttrs\n    ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({\n        // slot props are camelized\n        name: camelize(attr.name),\n        value: attr.value,\n        dynamic: attr.dynamic\n      }); }))\n    : null;\n  var bind$$1 = el.attrsMap['v-bind'];\n  if ((attrs || bind$$1) && !children) {\n    res += \",null\";\n  }\n  if (attrs) {\n    res += \",\" + attrs;\n  }\n  if (bind$$1) {\n    res += (attrs ? '' : ',null') + \",\" + bind$$1;\n  }\n  return res + ')'\n}\n\n// componentName is el.component, take it as argument to shun flow's pessimistic refinement\nfunction genComponent (\n  componentName,\n  el,\n  state\n) {\n  var children = el.inlineTemplate ? null : genChildren(el, state, true);\n  return (\"_c(\" + componentName + \",\" + (genData$2(el, state)) + (children ? (\",\" + children) : '') + \")\")\n}\n\nfunction genProps (props) {\n  var staticProps = \"\";\n  var dynamicProps = \"\";\n  for (var i = 0; i < props.length; i++) {\n    var prop = props[i];\n    var value = transformSpecialNewlines(prop.value);\n    if (prop.dynamic) {\n      dynamicProps += (prop.name) + \",\" + value + \",\";\n    } else {\n      staticProps += \"\\\"\" + (prop.name) + \"\\\":\" + value + \",\";\n    }\n  }\n  staticProps = \"{\" + (staticProps.slice(0, -1)) + \"}\";\n  if (dynamicProps) {\n    return (\"_d(\" + staticProps + \",[\" + (dynamicProps.slice(0, -1)) + \"])\")\n  } else {\n    return staticProps\n  }\n}\n\n// #3895, #4268\nfunction transformSpecialNewlines (text) {\n  return text\n    .replace(/\\u2028/g, '\\\\u2028')\n    .replace(/\\u2029/g, '\\\\u2029')\n}\n\n/*  */\n\n\n\n// these keywords should not appear inside expressions, but operators like\n// typeof, instanceof and in are allowed\nvar prohibitedKeywordRE = new RegExp('\\\\b' + (\n  'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\n  'super,throw,while,yield,delete,export,import,return,switch,default,' +\n  'extends,finally,continue,debugger,function,arguments'\n).split(',').join('\\\\b|\\\\b') + '\\\\b');\n\n// these unary operators should not be used as property/method names\nvar unaryOperatorsRE = new RegExp('\\\\b' + (\n  'delete,typeof,void'\n).split(',').join('\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b') + '\\\\s*\\\\([^\\\\)]*\\\\)');\n\n// strip strings in expressions\nvar stripStringRE = /'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g;\n\n// detect problematic expressions in a template\nfunction detectErrors (ast, warn) {\n  if (ast) {\n    checkNode(ast, warn);\n  }\n}\n\nfunction checkNode (node, warn) {\n  if (node.type === 1) {\n    for (var name in node.attrsMap) {\n      if (dirRE.test(name)) {\n        var value = node.attrsMap[name];\n        if (value) {\n          var range = node.rawAttrsMap[name];\n          if (name === 'v-for') {\n            checkFor(node, (\"v-for=\\\"\" + value + \"\\\"\"), warn, range);\n          } else if (onRE.test(name)) {\n            checkEvent(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\n          } else {\n            checkExpression(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\n          }\n        }\n      }\n    }\n    if (node.children) {\n      for (var i = 0; i < node.children.length; i++) {\n        checkNode(node.children[i], warn);\n      }\n    }\n  } else if (node.type === 2) {\n    checkExpression(node.expression, node.text, warn, node);\n  }\n}\n\nfunction checkEvent (exp, text, warn, range) {\n  var stipped = exp.replace(stripStringRE, '');\n  var keywordMatch = stipped.match(unaryOperatorsRE);\n  if (keywordMatch && stipped.charAt(keywordMatch.index - 1) !== '$') {\n    warn(\n      \"avoid using JavaScript unary operator as property name: \" +\n      \"\\\"\" + (keywordMatch[0]) + \"\\\" in expression \" + (text.trim()),\n      range\n    );\n  }\n  checkExpression(exp, text, warn, range);\n}\n\nfunction checkFor (node, text, warn, range) {\n  checkExpression(node.for || '', text, warn, range);\n  checkIdentifier(node.alias, 'v-for alias', text, warn, range);\n  checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);\n  checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);\n}\n\nfunction checkIdentifier (\n  ident,\n  type,\n  text,\n  warn,\n  range\n) {\n  if (typeof ident === 'string') {\n    try {\n      new Function((\"var \" + ident + \"=_\"));\n    } catch (e) {\n      warn((\"invalid \" + type + \" \\\"\" + ident + \"\\\" in expression: \" + (text.trim())), range);\n    }\n  }\n}\n\nfunction checkExpression (exp, text, warn, range) {\n  try {\n    new Function((\"return \" + exp));\n  } catch (e) {\n    var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE);\n    if (keywordMatch) {\n      warn(\n        \"avoid using JavaScript keyword as property name: \" +\n        \"\\\"\" + (keywordMatch[0]) + \"\\\"\\n  Raw expression: \" + (text.trim()),\n        range\n      );\n    } else {\n      warn(\n        \"invalid expression: \" + (e.message) + \" in\\n\\n\" +\n        \"    \" + exp + \"\\n\\n\" +\n        \"  Raw expression: \" + (text.trim()) + \"\\n\",\n        range\n      );\n    }\n  }\n}\n\n/*  */\n\nvar range = 2;\n\nfunction generateCodeFrame (\n  source,\n  start,\n  end\n) {\n  if ( start === void 0 ) start = 0;\n  if ( end === void 0 ) end = source.length;\n\n  var lines = source.split(/\\r?\\n/);\n  var count = 0;\n  var res = [];\n  for (var i = 0; i < lines.length; i++) {\n    count += lines[i].length + 1;\n    if (count >= start) {\n      for (var j = i - range; j <= i + range || end > count; j++) {\n        if (j < 0 || j >= lines.length) { continue }\n        res.push((\"\" + (j + 1) + (repeat$1(\" \", 3 - String(j + 1).length)) + \"|  \" + (lines[j])));\n        var lineLength = lines[j].length;\n        if (j === i) {\n          // push underline\n          var pad = start - (count - lineLength) + 1;\n          var length = end > count ? lineLength - pad : end - start;\n          res.push(\"   |  \" + repeat$1(\" \", pad) + repeat$1(\"^\", length));\n        } else if (j > i) {\n          if (end > count) {\n            var length$1 = Math.min(end - count, lineLength);\n            res.push(\"   |  \" + repeat$1(\"^\", length$1));\n          }\n          count += lineLength + 1;\n        }\n      }\n      break\n    }\n  }\n  return res.join('\\n')\n}\n\nfunction repeat$1 (str, n) {\n  var result = '';\n  if (n > 0) {\n    while (true) { // eslint-disable-line\n      if (n & 1) { result += str; }\n      n >>>= 1;\n      if (n <= 0) { break }\n      str += str;\n    }\n  }\n  return result\n}\n\n/*  */\n\n\n\nfunction createFunction (code, errors) {\n  try {\n    return new Function(code)\n  } catch (err) {\n    errors.push({ err: err, code: code });\n    return noop\n  }\n}\n\nfunction createCompileToFunctionFn (compile) {\n  var cache = Object.create(null);\n\n  return function compileToFunctions (\n    template,\n    options,\n    vm\n  ) {\n    options = extend({}, options);\n    var warn$$1 = options.warn || warn;\n    delete options.warn;\n\n    /* istanbul ignore if */\n    if (false) {\n      // detect possible CSP restriction\n      try {\n        new Function('return 1');\n      } catch (e) {\n        if (e.toString().match(/unsafe-eval|CSP/)) {\n          warn$$1(\n            'It seems you are using the standalone build of Vue.js in an ' +\n            'environment with Content Security Policy that prohibits unsafe-eval. ' +\n            'The template compiler cannot work in this environment. Consider ' +\n            'relaxing the policy to allow unsafe-eval or pre-compiling your ' +\n            'templates into render functions.'\n          );\n        }\n      }\n    }\n\n    // check cache\n    var key = options.delimiters\n      ? String(options.delimiters) + template\n      : template;\n    if (cache[key]) {\n      return cache[key]\n    }\n\n    // compile\n    var compiled = compile(template, options);\n\n    // check compilation errors/tips\n    if (false) {\n      if (compiled.errors && compiled.errors.length) {\n        if (options.outputSourceRange) {\n          compiled.errors.forEach(function (e) {\n            warn$$1(\n              \"Error compiling template:\\n\\n\" + (e.msg) + \"\\n\\n\" +\n              generateCodeFrame(template, e.start, e.end),\n              vm\n            );\n          });\n        } else {\n          warn$$1(\n            \"Error compiling template:\\n\\n\" + template + \"\\n\\n\" +\n            compiled.errors.map(function (e) { return (\"- \" + e); }).join('\\n') + '\\n',\n            vm\n          );\n        }\n      }\n      if (compiled.tips && compiled.tips.length) {\n        if (options.outputSourceRange) {\n          compiled.tips.forEach(function (e) { return tip(e.msg, vm); });\n        } else {\n          compiled.tips.forEach(function (msg) { return tip(msg, vm); });\n        }\n      }\n    }\n\n    // turn code into functions\n    var res = {};\n    var fnGenErrors = [];\n    res.render = createFunction(compiled.render, fnGenErrors);\n    res.staticRenderFns = compiled.staticRenderFns.map(function (code) {\n      return createFunction(code, fnGenErrors)\n    });\n\n    // check function generation errors.\n    // this should only happen if there is a bug in the compiler itself.\n    // mostly for codegen development use\n    /* istanbul ignore if */\n    if (false) {\n      if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {\n        warn$$1(\n          \"Failed to generate render function:\\n\\n\" +\n          fnGenErrors.map(function (ref) {\n            var err = ref.err;\n            var code = ref.code;\n\n            return ((err.toString()) + \" in\\n\\n\" + code + \"\\n\");\n        }).join('\\n'),\n          vm\n        );\n      }\n    }\n\n    return (cache[key] = res)\n  }\n}\n\n/*  */\n\nfunction createCompilerCreator (baseCompile) {\n  return function createCompiler (baseOptions) {\n    function compile (\n      template,\n      options\n    ) {\n      var finalOptions = Object.create(baseOptions);\n      var errors = [];\n      var tips = [];\n\n      var warn = function (msg, range, tip) {\n        (tip ? tips : errors).push(msg);\n      };\n\n      if (options) {\n        if (false) {\n          // $flow-disable-line\n          var leadingSpaceLength = template.match(/^\\s*/)[0].length;\n\n          warn = function (msg, range, tip) {\n            var data = { msg: msg };\n            if (range) {\n              if (range.start != null) {\n                data.start = range.start + leadingSpaceLength;\n              }\n              if (range.end != null) {\n                data.end = range.end + leadingSpaceLength;\n              }\n            }\n            (tip ? tips : errors).push(data);\n          };\n        }\n        // merge custom modules\n        if (options.modules) {\n          finalOptions.modules =\n            (baseOptions.modules || []).concat(options.modules);\n        }\n        // merge custom directives\n        if (options.directives) {\n          finalOptions.directives = extend(\n            Object.create(baseOptions.directives || null),\n            options.directives\n          );\n        }\n        // copy other options\n        for (var key in options) {\n          if (key !== 'modules' && key !== 'directives') {\n            finalOptions[key] = options[key];\n          }\n        }\n      }\n\n      finalOptions.warn = warn;\n\n      var compiled = baseCompile(template.trim(), finalOptions);\n      if (false) {\n        detectErrors(compiled.ast, warn);\n      }\n      compiled.errors = errors;\n      compiled.tips = tips;\n      return compiled\n    }\n\n    return {\n      compile: compile,\n      compileToFunctions: createCompileToFunctionFn(compile)\n    }\n  }\n}\n\n/*  */\n\n// `createCompilerCreator` allows creating compilers that use alternative\n// parser/optimizer/codegen, e.g the SSR optimizing compiler.\n// Here we just export a default compiler using the default parts.\nvar createCompiler = createCompilerCreator(function baseCompile (\n  template,\n  options\n) {\n  var ast = parse(template.trim(), options);\n  if (options.optimize !== false) {\n    optimize(ast, options);\n  }\n  var code = generate(ast, options);\n  return {\n    ast: ast,\n    render: code.render,\n    staticRenderFns: code.staticRenderFns\n  }\n});\n\n/*  */\n\nvar ref$1 = createCompiler(baseOptions);\nvar compile = ref$1.compile;\nvar compileToFunctions = ref$1.compileToFunctions;\n\n/*  */\n\n// check whether current browser encodes a char inside attribute values\nvar div;\nfunction getShouldDecode (href) {\n  div = div || document.createElement('div');\n  div.innerHTML = href ? \"<a href=\\\"\\n\\\"/>\" : \"<div a=\\\"\\n\\\"/>\";\n  return div.innerHTML.indexOf('&#10;') > 0\n}\n\n// #3663: IE encodes newlines inside attribute values while other browsers don't\nvar shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;\n// #6828: chrome encodes content in a[href]\nvar shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false;\n\n/*  */\n\nvar idToTemplate = cached(function (id) {\n  var el = query(id);\n  return el && el.innerHTML\n});\n\nvar mount = Vue.prototype.$mount;\nVue.prototype.$mount = function (\n  el,\n  hydrating\n) {\n  el = el && query(el);\n\n  /* istanbul ignore if */\n  if (el === document.body || el === document.documentElement) {\n    \"production\" !== 'production' && warn(\n      \"Do not mount Vue to <html> or <body> - mount to normal elements instead.\"\n    );\n    return this\n  }\n\n  var options = this.$options;\n  // resolve template/el and convert to render function\n  if (!options.render) {\n    var template = options.template;\n    if (template) {\n      if (typeof template === 'string') {\n        if (template.charAt(0) === '#') {\n          template = idToTemplate(template);\n          /* istanbul ignore if */\n          if (false) {\n            warn(\n              (\"Template element not found or is empty: \" + (options.template)),\n              this\n            );\n          }\n        }\n      } else if (template.nodeType) {\n        template = template.innerHTML;\n      } else {\n        if (false) {\n          warn('invalid template option:' + template, this);\n        }\n        return this\n      }\n    } else if (el) {\n      template = getOuterHTML(el);\n    }\n    if (template) {\n      /* istanbul ignore if */\n      if (false) {\n        mark('compile');\n      }\n\n      var ref = compileToFunctions(template, {\n        outputSourceRange: \"production\" !== 'production',\n        shouldDecodeNewlines: shouldDecodeNewlines,\n        shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,\n        delimiters: options.delimiters,\n        comments: options.comments\n      }, this);\n      var render = ref.render;\n      var staticRenderFns = ref.staticRenderFns;\n      options.render = render;\n      options.staticRenderFns = staticRenderFns;\n\n      /* istanbul ignore if */\n      if (false) {\n        mark('compile end');\n        measure((\"vue \" + (this._name) + \" compile\"), 'compile', 'compile end');\n      }\n    }\n  }\n  return mount.call(this, el, hydrating)\n};\n\n/**\n * Get outerHTML of elements, taking care\n * of SVG elements in IE as well.\n */\nfunction getOuterHTML (el) {\n  if (el.outerHTML) {\n    return el.outerHTML\n  } else {\n    var container = document.createElement('div');\n    container.appendChild(el.cloneNode(true));\n    return container.innerHTML\n  }\n}\n\nVue.compile = compileToFunctions;\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (Vue);\n\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(47), __webpack_require__(275).setImmediate))\n\n/***/ })\n\n/******/ });\n\n\n// WEBPACK FOOTER //\n// vendor.js"," \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n \t\tif(executeModules) {\n \t\t\tfor(i=0; i < executeModules.length; i++) {\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t1: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData === 0) {\n \t\t\treturn new Promise(function(resolve) { resolve(); });\n \t\t}\n\n \t\t// a Promise means \"currently loading\".\n \t\tif(installedChunkData) {\n \t\t\treturn installedChunkData[2];\n \t\t}\n\n \t\t// setup Promise in chunk cache\n \t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t});\n \t\tinstalledChunkData[2] = promise;\n\n \t\t// start chunk loading\n \t\tvar head = document.getElementsByTagName('head')[0];\n \t\tvar script = document.createElement('script');\n \t\tscript.type = 'text/javascript';\n \t\tscript.charset = 'utf-8';\n \t\tscript.async = true;\n \t\tscript.timeout = 120000;\n\n \t\tif (__webpack_require__.nc) {\n \t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t}\n \t\tscript.src = __webpack_require__.p + \"\" + chunkId + \".js\";\n \t\tvar timeout = setTimeout(onScriptComplete, 120000);\n \t\tscript.onerror = script.onload = onScriptComplete;\n \t\tfunction onScriptComplete() {\n \t\t\t// avoid mem leaks in IE.\n \t\t\tscript.onerror = script.onload = null;\n \t\t\tclearTimeout(timeout);\n \t\t\tvar chunk = installedChunks[chunkId];\n \t\t\tif(chunk !== 0) {\n \t\t\t\tif(chunk) {\n \t\t\t\t\tchunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));\n \t\t\t\t}\n \t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t}\n \t\t};\n \t\thead.appendChild(script);\n\n \t\treturn promise;\n \t};\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// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 293);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap ecd4b0bd323eb9518185","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/process/browser.js\n// module id = 273\n// module chunks = 1","(function (global, undefined) {\n    \"use strict\";\n\n    if (global.setImmediate) {\n        return;\n    }\n\n    var nextHandle = 1; // Spec says greater than zero\n    var tasksByHandle = {};\n    var currentlyRunningATask = false;\n    var doc = global.document;\n    var registerImmediate;\n\n    function setImmediate(callback) {\n      // Callback can either be a function or a string\n      if (typeof callback !== \"function\") {\n        callback = new Function(\"\" + callback);\n      }\n      // Copy function arguments\n      var args = new Array(arguments.length - 1);\n      for (var i = 0; i < args.length; i++) {\n          args[i] = arguments[i + 1];\n      }\n      // Store and register the task\n      var task = { callback: callback, args: args };\n      tasksByHandle[nextHandle] = task;\n      registerImmediate(nextHandle);\n      return nextHandle++;\n    }\n\n    function clearImmediate(handle) {\n        delete tasksByHandle[handle];\n    }\n\n    function run(task) {\n        var callback = task.callback;\n        var args = task.args;\n        switch (args.length) {\n        case 0:\n            callback();\n            break;\n        case 1:\n            callback(args[0]);\n            break;\n        case 2:\n            callback(args[0], args[1]);\n            break;\n        case 3:\n            callback(args[0], args[1], args[2]);\n            break;\n        default:\n            callback.apply(undefined, args);\n            break;\n        }\n    }\n\n    function runIfPresent(handle) {\n        // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n        // So if we're currently running a task, we'll need to delay this invocation.\n        if (currentlyRunningATask) {\n            // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n            // \"too much recursion\" error.\n            setTimeout(runIfPresent, 0, handle);\n        } else {\n            var task = tasksByHandle[handle];\n            if (task) {\n                currentlyRunningATask = true;\n                try {\n                    run(task);\n                } finally {\n                    clearImmediate(handle);\n                    currentlyRunningATask = false;\n                }\n            }\n        }\n    }\n\n    function installNextTickImplementation() {\n        registerImmediate = function(handle) {\n            process.nextTick(function () { runIfPresent(handle); });\n        };\n    }\n\n    function canUsePostMessage() {\n        // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n        // where `global.postMessage` means something completely different and can't be used for this purpose.\n        if (global.postMessage && !global.importScripts) {\n            var postMessageIsAsynchronous = true;\n            var oldOnMessage = global.onmessage;\n            global.onmessage = function() {\n                postMessageIsAsynchronous = false;\n            };\n            global.postMessage(\"\", \"*\");\n            global.onmessage = oldOnMessage;\n            return postMessageIsAsynchronous;\n        }\n    }\n\n    function installPostMessageImplementation() {\n        // Installs an event handler on `global` for the `message` event: see\n        // * https://developer.mozilla.org/en/DOM/window.postMessage\n        // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n        var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n        var onGlobalMessage = function(event) {\n            if (event.source === global &&\n                typeof event.data === \"string\" &&\n                event.data.indexOf(messagePrefix) === 0) {\n                runIfPresent(+event.data.slice(messagePrefix.length));\n            }\n        };\n\n        if (global.addEventListener) {\n            global.addEventListener(\"message\", onGlobalMessage, false);\n        } else {\n            global.attachEvent(\"onmessage\", onGlobalMessage);\n        }\n\n        registerImmediate = function(handle) {\n            global.postMessage(messagePrefix + handle, \"*\");\n        };\n    }\n\n    function installMessageChannelImplementation() {\n        var channel = new MessageChannel();\n        channel.port1.onmessage = function(event) {\n            var handle = event.data;\n            runIfPresent(handle);\n        };\n\n        registerImmediate = function(handle) {\n            channel.port2.postMessage(handle);\n        };\n    }\n\n    function installReadyStateChangeImplementation() {\n        var html = doc.documentElement;\n        registerImmediate = function(handle) {\n            // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n            // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n            var script = doc.createElement(\"script\");\n            script.onreadystatechange = function () {\n                runIfPresent(handle);\n                script.onreadystatechange = null;\n                html.removeChild(script);\n                script = null;\n            };\n            html.appendChild(script);\n        };\n    }\n\n    function installSetTimeoutImplementation() {\n        registerImmediate = function(handle) {\n            setTimeout(runIfPresent, 0, handle);\n        };\n    }\n\n    // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n    var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n    attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n    // Don't get fooled by e.g. browserify environments.\n    if ({}.toString.call(global.process) === \"[object process]\") {\n        // For Node.js before 0.9\n        installNextTickImplementation();\n\n    } else if (canUsePostMessage()) {\n        // For non-IE10 modern browsers\n        installPostMessageImplementation();\n\n    } else if (global.MessageChannel) {\n        // For web workers, where supported\n        installMessageChannelImplementation();\n\n    } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n        // For IE 6–8\n        installReadyStateChangeImplementation();\n\n    } else {\n        // For older browsers\n        installSetTimeoutImplementation();\n    }\n\n    attachTo.setImmediate = setImmediate;\n    attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/setimmediate/setImmediate.js\n// module id = 274\n// module chunks = 1","var scope = (typeof global !== \"undefined\" && global) ||\n            (typeof self !== \"undefined\" && self) ||\n            window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n  return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n  return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n  if (timeout) {\n    timeout.close();\n  }\n};\n\nfunction Timeout(id, clearFn) {\n  this._id = id;\n  this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n  this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n  clearTimeout(item._idleTimeoutId);\n\n  var msecs = item._idleTimeout;\n  if (msecs >= 0) {\n    item._idleTimeoutId = setTimeout(function onTimeout() {\n      if (item._onTimeout)\n        item._onTimeout();\n    }, msecs);\n  }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto.  Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n                       (typeof global !== \"undefined\" && global.setImmediate) ||\n                       (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n                         (typeof global !== \"undefined\" && global.clearImmediate) ||\n                         (this && this.clearImmediate);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/timers-browserify/main.js\n// module id = 275\n// module chunks = 1","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 47\n// module chunks = 1","/*!\n * Vue.js v2.6.10\n * (c) 2014-2019 Evan You\n * Released under the MIT License.\n */\n/*  */\n\nvar emptyObject = Object.freeze({});\n\n// These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\nfunction isUndef (v) {\n  return v === undefined || v === null\n}\n\nfunction isDef (v) {\n  return v !== undefined && v !== null\n}\n\nfunction isTrue (v) {\n  return v === true\n}\n\nfunction isFalse (v) {\n  return v === false\n}\n\n/**\n * Check if value is primitive.\n */\nfunction isPrimitive (value) {\n  return (\n    typeof value === 'string' ||\n    typeof value === 'number' ||\n    // $flow-disable-line\n    typeof value === 'symbol' ||\n    typeof value === 'boolean'\n  )\n}\n\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject (obj) {\n  return obj !== null && typeof obj === 'object'\n}\n\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\nvar _toString = Object.prototype.toString;\n\nfunction toRawType (value) {\n  return _toString.call(value).slice(8, -1)\n}\n\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject (obj) {\n  return _toString.call(obj) === '[object Object]'\n}\n\nfunction isRegExp (v) {\n  return _toString.call(v) === '[object RegExp]'\n}\n\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex (val) {\n  var n = parseFloat(String(val));\n  return n >= 0 && Math.floor(n) === n && isFinite(val)\n}\n\nfunction isPromise (val) {\n  return (\n    isDef(val) &&\n    typeof val.then === 'function' &&\n    typeof val.catch === 'function'\n  )\n}\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString (val) {\n  return val == null\n    ? ''\n    : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n      ? JSON.stringify(val, null, 2)\n      : String(val)\n}\n\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber (val) {\n  var n = parseFloat(val);\n  return isNaN(n) ? val : n\n}\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap (\n  str,\n  expectsLowerCase\n) {\n  var map = Object.create(null);\n  var list = str.split(',');\n  for (var i = 0; i < list.length; i++) {\n    map[list[i]] = true;\n  }\n  return expectsLowerCase\n    ? function (val) { return map[val.toLowerCase()]; }\n    : function (val) { return map[val]; }\n}\n\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n\n/**\n * Check if an attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n\n/**\n * Remove an item from an array.\n */\nfunction remove (arr, item) {\n  if (arr.length) {\n    var index = arr.indexOf(item);\n    if (index > -1) {\n      return arr.splice(index, 1)\n    }\n  }\n}\n\n/**\n * Check whether an object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n  return hasOwnProperty.call(obj, key)\n}\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n  var cache = Object.create(null);\n  return (function cachedFn (str) {\n    var hit = cache[str];\n    return hit || (cache[str] = fn(str))\n  })\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n  return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n});\n\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n  return str.charAt(0).toUpperCase() + str.slice(1)\n});\n\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n  return str.replace(hyphenateRE, '-$1').toLowerCase()\n});\n\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n\n/* istanbul ignore next */\nfunction polyfillBind (fn, ctx) {\n  function boundFn (a) {\n    var l = arguments.length;\n    return l\n      ? l > 1\n        ? fn.apply(ctx, arguments)\n        : fn.call(ctx, a)\n      : fn.call(ctx)\n  }\n\n  boundFn._length = fn.length;\n  return boundFn\n}\n\nfunction nativeBind (fn, ctx) {\n  return fn.bind(ctx)\n}\n\nvar bind = Function.prototype.bind\n  ? nativeBind\n  : polyfillBind;\n\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray (list, start) {\n  start = start || 0;\n  var i = list.length - start;\n  var ret = new Array(i);\n  while (i--) {\n    ret[i] = list[i + start];\n  }\n  return ret\n}\n\n/**\n * Mix properties into target object.\n */\nfunction extend (to, _from) {\n  for (var key in _from) {\n    to[key] = _from[key];\n  }\n  return to\n}\n\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject (arr) {\n  var res = {};\n  for (var i = 0; i < arr.length; i++) {\n    if (arr[i]) {\n      extend(res, arr[i]);\n    }\n  }\n  return res\n}\n\n/* eslint-disable no-unused-vars */\n\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\nfunction noop (a, b, c) {}\n\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n\n/* eslint-enable no-unused-vars */\n\n/**\n * Return the same value.\n */\nvar identity = function (_) { return _; };\n\n/**\n * Generate a string containing static keys from compiler modules.\n */\nfunction genStaticKeys (modules) {\n  return modules.reduce(function (keys, m) {\n    return keys.concat(m.staticKeys || [])\n  }, []).join(',')\n}\n\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual (a, b) {\n  if (a === b) { return true }\n  var isObjectA = isObject(a);\n  var isObjectB = isObject(b);\n  if (isObjectA && isObjectB) {\n    try {\n      var isArrayA = Array.isArray(a);\n      var isArrayB = Array.isArray(b);\n      if (isArrayA && isArrayB) {\n        return a.length === b.length && a.every(function (e, i) {\n          return looseEqual(e, b[i])\n        })\n      } else if (a instanceof Date && b instanceof Date) {\n        return a.getTime() === b.getTime()\n      } else if (!isArrayA && !isArrayB) {\n        var keysA = Object.keys(a);\n        var keysB = Object.keys(b);\n        return keysA.length === keysB.length && keysA.every(function (key) {\n          return looseEqual(a[key], b[key])\n        })\n      } else {\n        /* istanbul ignore next */\n        return false\n      }\n    } catch (e) {\n      /* istanbul ignore next */\n      return false\n    }\n  } else if (!isObjectA && !isObjectB) {\n    return String(a) === String(b)\n  } else {\n    return false\n  }\n}\n\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\nfunction looseIndexOf (arr, val) {\n  for (var i = 0; i < arr.length; i++) {\n    if (looseEqual(arr[i], val)) { return i }\n  }\n  return -1\n}\n\n/**\n * Ensure a function is called only once.\n */\nfunction once (fn) {\n  var called = false;\n  return function () {\n    if (!called) {\n      called = true;\n      fn.apply(this, arguments);\n    }\n  }\n}\n\nvar SSR_ATTR = 'data-server-rendered';\n\nvar ASSET_TYPES = [\n  'component',\n  'directive',\n  'filter'\n];\n\nvar LIFECYCLE_HOOKS = [\n  'beforeCreate',\n  'created',\n  'beforeMount',\n  'mounted',\n  'beforeUpdate',\n  'updated',\n  'beforeDestroy',\n  'destroyed',\n  'activated',\n  'deactivated',\n  'errorCaptured',\n  'serverPrefetch'\n];\n\n/*  */\n\n\n\nvar config = ({\n  /**\n   * Option merge strategies (used in core/util/options)\n   */\n  // $flow-disable-line\n  optionMergeStrategies: Object.create(null),\n\n  /**\n   * Whether to suppress warnings.\n   */\n  silent: false,\n\n  /**\n   * Show production mode tip message on boot?\n   */\n  productionTip: process.env.NODE_ENV !== 'production',\n\n  /**\n   * Whether to enable devtools\n   */\n  devtools: process.env.NODE_ENV !== 'production',\n\n  /**\n   * Whether to record perf\n   */\n  performance: false,\n\n  /**\n   * Error handler for watcher errors\n   */\n  errorHandler: null,\n\n  /**\n   * Warn handler for watcher warns\n   */\n  warnHandler: null,\n\n  /**\n   * Ignore certain custom elements\n   */\n  ignoredElements: [],\n\n  /**\n   * Custom user key aliases for v-on\n   */\n  // $flow-disable-line\n  keyCodes: Object.create(null),\n\n  /**\n   * Check if a tag is reserved so that it cannot be registered as a\n   * component. This is platform-dependent and may be overwritten.\n   */\n  isReservedTag: no,\n\n  /**\n   * Check if an attribute is reserved so that it cannot be used as a component\n   * prop. This is platform-dependent and may be overwritten.\n   */\n  isReservedAttr: no,\n\n  /**\n   * Check if a tag is an unknown element.\n   * Platform-dependent.\n   */\n  isUnknownElement: no,\n\n  /**\n   * Get the namespace of an element\n   */\n  getTagNamespace: noop,\n\n  /**\n   * Parse the real tag name for the specific platform.\n   */\n  parsePlatformTagName: identity,\n\n  /**\n   * Check if an attribute must be bound using property, e.g. value\n   * Platform-dependent.\n   */\n  mustUseProp: no,\n\n  /**\n   * Perform updates asynchronously. Intended to be used by Vue Test Utils\n   * This will significantly reduce performance if set to false.\n   */\n  async: true,\n\n  /**\n   * Exposed for legacy reasons\n   */\n  _lifecycleHooks: LIFECYCLE_HOOKS\n});\n\n/*  */\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved (str) {\n  var c = (str + '').charCodeAt(0);\n  return c === 0x24 || c === 0x5F\n}\n\n/**\n * Define a property.\n */\nfunction def (obj, key, val, enumerable) {\n  Object.defineProperty(obj, key, {\n    value: val,\n    enumerable: !!enumerable,\n    writable: true,\n    configurable: true\n  });\n}\n\n/**\n * Parse simple path.\n */\nvar bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\nfunction parsePath (path) {\n  if (bailRE.test(path)) {\n    return\n  }\n  var segments = path.split('.');\n  return function (obj) {\n    for (var i = 0; i < segments.length; i++) {\n      if (!obj) { return }\n      obj = obj[segments[i]];\n    }\n    return obj\n  }\n}\n\n/*  */\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\nvar weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nvar isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\nvar isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\nvar isPhantomJS = UA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n\n// Firefox has a \"watch\" function on Object.prototype...\nvar nativeWatch = ({}).watch;\n\nvar supportsPassive = false;\nif (inBrowser) {\n  try {\n    var opts = {};\n    Object.defineProperty(opts, 'passive', ({\n      get: function get () {\n        /* istanbul ignore next */\n        supportsPassive = true;\n      }\n    })); // https://github.com/facebook/flow/issues/285\n    window.addEventListener('test-passive', null, opts);\n  } catch (e) {}\n}\n\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n  if (_isServer === undefined) {\n    /* istanbul ignore if */\n    if (!inBrowser && !inWeex && typeof global !== 'undefined') {\n      // detect presence of vue-server-renderer and avoid\n      // Webpack shimming the process\n      _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\n    } else {\n      _isServer = false;\n    }\n  }\n  return _isServer\n};\n\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n/* istanbul ignore next */\nfunction isNative (Ctor) {\n  return typeof Ctor === 'function' && /native code/.test(Ctor.toString())\n}\n\nvar hasSymbol =\n  typeof Symbol !== 'undefined' && isNative(Symbol) &&\n  typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n\nvar _Set;\n/* istanbul ignore if */ // $flow-disable-line\nif (typeof Set !== 'undefined' && isNative(Set)) {\n  // use native Set when available.\n  _Set = Set;\n} else {\n  // a non-standard Set polyfill that only works with primitive keys.\n  _Set = /*@__PURE__*/(function () {\n    function Set () {\n      this.set = Object.create(null);\n    }\n    Set.prototype.has = function has (key) {\n      return this.set[key] === true\n    };\n    Set.prototype.add = function add (key) {\n      this.set[key] = true;\n    };\n    Set.prototype.clear = function clear () {\n      this.set = Object.create(null);\n    };\n\n    return Set;\n  }());\n}\n\n/*  */\n\nvar warn = noop;\nvar tip = noop;\nvar generateComponentTrace = (noop); // work around flow check\nvar formatComponentName = (noop);\n\nif (process.env.NODE_ENV !== 'production') {\n  var hasConsole = typeof console !== 'undefined';\n  var classifyRE = /(?:^|[-_])(\\w)/g;\n  var classify = function (str) { return str\n    .replace(classifyRE, function (c) { return c.toUpperCase(); })\n    .replace(/[-_]/g, ''); };\n\n  warn = function (msg, vm) {\n    var trace = vm ? generateComponentTrace(vm) : '';\n\n    if (config.warnHandler) {\n      config.warnHandler.call(null, msg, vm, trace);\n    } else if (hasConsole && (!config.silent)) {\n      console.error((\"[Vue warn]: \" + msg + trace));\n    }\n  };\n\n  tip = function (msg, vm) {\n    if (hasConsole && (!config.silent)) {\n      console.warn(\"[Vue tip]: \" + msg + (\n        vm ? generateComponentTrace(vm) : ''\n      ));\n    }\n  };\n\n  formatComponentName = function (vm, includeFile) {\n    if (vm.$root === vm) {\n      return '<Root>'\n    }\n    var options = typeof vm === 'function' && vm.cid != null\n      ? vm.options\n      : vm._isVue\n        ? vm.$options || vm.constructor.options\n        : vm;\n    var name = options.name || options._componentTag;\n    var file = options.__file;\n    if (!name && file) {\n      var match = file.match(/([^/\\\\]+)\\.vue$/);\n      name = match && match[1];\n    }\n\n    return (\n      (name ? (\"<\" + (classify(name)) + \">\") : \"<Anonymous>\") +\n      (file && includeFile !== false ? (\" at \" + file) : '')\n    )\n  };\n\n  var repeat = function (str, n) {\n    var res = '';\n    while (n) {\n      if (n % 2 === 1) { res += str; }\n      if (n > 1) { str += str; }\n      n >>= 1;\n    }\n    return res\n  };\n\n  generateComponentTrace = function (vm) {\n    if (vm._isVue && vm.$parent) {\n      var tree = [];\n      var currentRecursiveSequence = 0;\n      while (vm) {\n        if (tree.length > 0) {\n          var last = tree[tree.length - 1];\n          if (last.constructor === vm.constructor) {\n            currentRecursiveSequence++;\n            vm = vm.$parent;\n            continue\n          } else if (currentRecursiveSequence > 0) {\n            tree[tree.length - 1] = [last, currentRecursiveSequence];\n            currentRecursiveSequence = 0;\n          }\n        }\n        tree.push(vm);\n        vm = vm.$parent;\n      }\n      return '\\n\\nfound in\\n\\n' + tree\n        .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n            ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n            : formatComponentName(vm))); })\n        .join('\\n')\n    } else {\n      return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n    }\n  };\n}\n\n/*  */\n\nvar uid = 0;\n\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\nvar Dep = function Dep () {\n  this.id = uid++;\n  this.subs = [];\n};\n\nDep.prototype.addSub = function addSub (sub) {\n  this.subs.push(sub);\n};\n\nDep.prototype.removeSub = function removeSub (sub) {\n  remove(this.subs, sub);\n};\n\nDep.prototype.depend = function depend () {\n  if (Dep.target) {\n    Dep.target.addDep(this);\n  }\n};\n\nDep.prototype.notify = function notify () {\n  // stabilize the subscriber list first\n  var subs = this.subs.slice();\n  if (process.env.NODE_ENV !== 'production' && !config.async) {\n    // subs aren't sorted in scheduler if not running async\n    // we need to sort them now to make sure they fire in correct\n    // order\n    subs.sort(function (a, b) { return a.id - b.id; });\n  }\n  for (var i = 0, l = subs.length; i < l; i++) {\n    subs[i].update();\n  }\n};\n\n// The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\nDep.target = null;\nvar targetStack = [];\n\nfunction pushTarget (target) {\n  targetStack.push(target);\n  Dep.target = target;\n}\n\nfunction popTarget () {\n  targetStack.pop();\n  Dep.target = targetStack[targetStack.length - 1];\n}\n\n/*  */\n\nvar VNode = function VNode (\n  tag,\n  data,\n  children,\n  text,\n  elm,\n  context,\n  componentOptions,\n  asyncFactory\n) {\n  this.tag = tag;\n  this.data = data;\n  this.children = children;\n  this.text = text;\n  this.elm = elm;\n  this.ns = undefined;\n  this.context = context;\n  this.fnContext = undefined;\n  this.fnOptions = undefined;\n  this.fnScopeId = undefined;\n  this.key = data && data.key;\n  this.componentOptions = componentOptions;\n  this.componentInstance = undefined;\n  this.parent = undefined;\n  this.raw = false;\n  this.isStatic = false;\n  this.isRootInsert = true;\n  this.isComment = false;\n  this.isCloned = false;\n  this.isOnce = false;\n  this.asyncFactory = asyncFactory;\n  this.asyncMeta = undefined;\n  this.isAsyncPlaceholder = false;\n};\n\nvar prototypeAccessors = { child: { configurable: true } };\n\n// DEPRECATED: alias for componentInstance for backwards compat.\n/* istanbul ignore next */\nprototypeAccessors.child.get = function () {\n  return this.componentInstance\n};\n\nObject.defineProperties( VNode.prototype, prototypeAccessors );\n\nvar createEmptyVNode = function (text) {\n  if ( text === void 0 ) text = '';\n\n  var node = new VNode();\n  node.text = text;\n  node.isComment = true;\n  return node\n};\n\nfunction createTextVNode (val) {\n  return new VNode(undefined, undefined, undefined, String(val))\n}\n\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode (vnode) {\n  var cloned = new VNode(\n    vnode.tag,\n    vnode.data,\n    // #7975\n    // clone children array to avoid mutating original in case of cloning\n    // a child.\n    vnode.children && vnode.children.slice(),\n    vnode.text,\n    vnode.elm,\n    vnode.context,\n    vnode.componentOptions,\n    vnode.asyncFactory\n  );\n  cloned.ns = vnode.ns;\n  cloned.isStatic = vnode.isStatic;\n  cloned.key = vnode.key;\n  cloned.isComment = vnode.isComment;\n  cloned.fnContext = vnode.fnContext;\n  cloned.fnOptions = vnode.fnOptions;\n  cloned.fnScopeId = vnode.fnScopeId;\n  cloned.asyncMeta = vnode.asyncMeta;\n  cloned.isCloned = true;\n  return cloned\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\n\nvar methodsToPatch = [\n  'push',\n  'pop',\n  'shift',\n  'unshift',\n  'splice',\n  'sort',\n  'reverse'\n];\n\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n  // cache original method\n  var original = arrayProto[method];\n  def(arrayMethods, method, function mutator () {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    var result = original.apply(this, args);\n    var ob = this.__ob__;\n    var inserted;\n    switch (method) {\n      case 'push':\n      case 'unshift':\n        inserted = args;\n        break\n      case 'splice':\n        inserted = args.slice(2);\n        break\n    }\n    if (inserted) { ob.observeArray(inserted); }\n    // notify change\n    ob.dep.notify();\n    return result\n  });\n});\n\n/*  */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\n\nfunction toggleObserving (value) {\n  shouldObserve = value;\n}\n\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = function Observer (value) {\n  this.value = value;\n  this.dep = new Dep();\n  this.vmCount = 0;\n  def(value, '__ob__', this);\n  if (Array.isArray(value)) {\n    if (hasProto) {\n      protoAugment(value, arrayMethods);\n    } else {\n      copyAugment(value, arrayMethods, arrayKeys);\n    }\n    this.observeArray(value);\n  } else {\n    this.walk(value);\n  }\n};\n\n/**\n * Walk through all properties and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\nObserver.prototype.walk = function walk (obj) {\n  var keys = Object.keys(obj);\n  for (var i = 0; i < keys.length; i++) {\n    defineReactive$$1(obj, keys[i]);\n  }\n};\n\n/**\n * Observe a list of Array items.\n */\nObserver.prototype.observeArray = function observeArray (items) {\n  for (var i = 0, l = items.length; i < l; i++) {\n    observe(items[i]);\n  }\n};\n\n// helpers\n\n/**\n * Augment a target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src) {\n  /* eslint-disable no-proto */\n  target.__proto__ = src;\n  /* eslint-enable no-proto */\n}\n\n/**\n * Augment a target Object or Array by defining\n * hidden properties.\n */\n/* istanbul ignore next */\nfunction copyAugment (target, src, keys) {\n  for (var i = 0, l = keys.length; i < l; i++) {\n    var key = keys[i];\n    def(target, key, src[key]);\n  }\n}\n\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe (value, asRootData) {\n  if (!isObject(value) || value instanceof VNode) {\n    return\n  }\n  var ob;\n  if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n    ob = value.__ob__;\n  } else if (\n    shouldObserve &&\n    !isServerRendering() &&\n    (Array.isArray(value) || isPlainObject(value)) &&\n    Object.isExtensible(value) &&\n    !value._isVue\n  ) {\n    ob = new Observer(value);\n  }\n  if (asRootData && ob) {\n    ob.vmCount++;\n  }\n  return ob\n}\n\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive$$1 (\n  obj,\n  key,\n  val,\n  customSetter,\n  shallow\n) {\n  var dep = new Dep();\n\n  var property = Object.getOwnPropertyDescriptor(obj, key);\n  if (property && property.configurable === false) {\n    return\n  }\n\n  // cater for pre-defined getter/setters\n  var getter = property && property.get;\n  var setter = property && property.set;\n  if ((!getter || setter) && arguments.length === 2) {\n    val = obj[key];\n  }\n\n  var childOb = !shallow && observe(val);\n  Object.defineProperty(obj, key, {\n    enumerable: true,\n    configurable: true,\n    get: function reactiveGetter () {\n      var value = getter ? getter.call(obj) : val;\n      if (Dep.target) {\n        dep.depend();\n        if (childOb) {\n          childOb.dep.depend();\n          if (Array.isArray(value)) {\n            dependArray(value);\n          }\n        }\n      }\n      return value\n    },\n    set: function reactiveSetter (newVal) {\n      var value = getter ? getter.call(obj) : val;\n      /* eslint-disable no-self-compare */\n      if (newVal === value || (newVal !== newVal && value !== value)) {\n        return\n      }\n      /* eslint-enable no-self-compare */\n      if (process.env.NODE_ENV !== 'production' && customSetter) {\n        customSetter();\n      }\n      // #7981: for accessor properties without setter\n      if (getter && !setter) { return }\n      if (setter) {\n        setter.call(obj, newVal);\n      } else {\n        val = newVal;\n      }\n      childOb = !shallow && observe(newVal);\n      dep.notify();\n    }\n  });\n}\n\n/**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\nfunction set (target, key, val) {\n  if (process.env.NODE_ENV !== 'production' &&\n    (isUndef(target) || isPrimitive(target))\n  ) {\n    warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\n  }\n  if (Array.isArray(target) && isValidArrayIndex(key)) {\n    target.length = Math.max(target.length, key);\n    target.splice(key, 1, val);\n    return val\n  }\n  if (key in target && !(key in Object.prototype)) {\n    target[key] = val;\n    return val\n  }\n  var ob = (target).__ob__;\n  if (target._isVue || (ob && ob.vmCount)) {\n    process.env.NODE_ENV !== 'production' && warn(\n      'Avoid adding reactive properties to a Vue instance or its root $data ' +\n      'at runtime - declare it upfront in the data option.'\n    );\n    return val\n  }\n  if (!ob) {\n    target[key] = val;\n    return val\n  }\n  defineReactive$$1(ob.value, key, val);\n  ob.dep.notify();\n  return val\n}\n\n/**\n * Delete a property and trigger change if necessary.\n */\nfunction del (target, key) {\n  if (process.env.NODE_ENV !== 'production' &&\n    (isUndef(target) || isPrimitive(target))\n  ) {\n    warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\n  }\n  if (Array.isArray(target) && isValidArrayIndex(key)) {\n    target.splice(key, 1);\n    return\n  }\n  var ob = (target).__ob__;\n  if (target._isVue || (ob && ob.vmCount)) {\n    process.env.NODE_ENV !== 'production' && warn(\n      'Avoid deleting properties on a Vue instance or its root $data ' +\n      '- just set it to null.'\n    );\n    return\n  }\n  if (!hasOwn(target, key)) {\n    return\n  }\n  delete target[key];\n  if (!ob) {\n    return\n  }\n  ob.dep.notify();\n}\n\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray (value) {\n  for (var e = (void 0), i = 0, l = value.length; i < l; i++) {\n    e = value[i];\n    e && e.__ob__ && e.__ob__.dep.depend();\n    if (Array.isArray(e)) {\n      dependArray(e);\n    }\n  }\n}\n\n/*  */\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n\n/**\n * Options with restrictions\n */\nif (process.env.NODE_ENV !== 'production') {\n  strats.el = strats.propsData = function (parent, child, vm, key) {\n    if (!vm) {\n      warn(\n        \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n        'creation with the `new` keyword.'\n      );\n    }\n    return defaultStrat(parent, child)\n  };\n}\n\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData (to, from) {\n  if (!from) { return to }\n  var key, toVal, fromVal;\n\n  var keys = hasSymbol\n    ? Reflect.ownKeys(from)\n    : Object.keys(from);\n\n  for (var i = 0; i < keys.length; i++) {\n    key = keys[i];\n    // in case the object is already observed...\n    if (key === '__ob__') { continue }\n    toVal = to[key];\n    fromVal = from[key];\n    if (!hasOwn(to, key)) {\n      set(to, key, fromVal);\n    } else if (\n      toVal !== fromVal &&\n      isPlainObject(toVal) &&\n      isPlainObject(fromVal)\n    ) {\n      mergeData(toVal, fromVal);\n    }\n  }\n  return to\n}\n\n/**\n * Data\n */\nfunction mergeDataOrFn (\n  parentVal,\n  childVal,\n  vm\n) {\n  if (!vm) {\n    // in a Vue.extend merge, both should be functions\n    if (!childVal) {\n      return parentVal\n    }\n    if (!parentVal) {\n      return childVal\n    }\n    // when parentVal & childVal are both present,\n    // we need to return a function that returns the\n    // merged result of both functions... no need to\n    // check if parentVal is a function here because\n    // it has to be a function to pass previous merges.\n    return function mergedDataFn () {\n      return mergeData(\n        typeof childVal === 'function' ? childVal.call(this, this) : childVal,\n        typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n      )\n    }\n  } else {\n    return function mergedInstanceDataFn () {\n      // instance merge\n      var instanceData = typeof childVal === 'function'\n        ? childVal.call(vm, vm)\n        : childVal;\n      var defaultData = typeof parentVal === 'function'\n        ? parentVal.call(vm, vm)\n        : parentVal;\n      if (instanceData) {\n        return mergeData(instanceData, defaultData)\n      } else {\n        return defaultData\n      }\n    }\n  }\n}\n\nstrats.data = function (\n  parentVal,\n  childVal,\n  vm\n) {\n  if (!vm) {\n    if (childVal && typeof childVal !== 'function') {\n      process.env.NODE_ENV !== 'production' && warn(\n        'The \"data\" option should be a function ' +\n        'that returns a per-instance value in component ' +\n        'definitions.',\n        vm\n      );\n\n      return parentVal\n    }\n    return mergeDataOrFn(parentVal, childVal)\n  }\n\n  return mergeDataOrFn(parentVal, childVal, vm)\n};\n\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeHook (\n  parentVal,\n  childVal\n) {\n  var res = childVal\n    ? parentVal\n      ? parentVal.concat(childVal)\n      : Array.isArray(childVal)\n        ? childVal\n        : [childVal]\n    : parentVal;\n  return res\n    ? dedupeHooks(res)\n    : res\n}\n\nfunction dedupeHooks (hooks) {\n  var res = [];\n  for (var i = 0; i < hooks.length; i++) {\n    if (res.indexOf(hooks[i]) === -1) {\n      res.push(hooks[i]);\n    }\n  }\n  return res\n}\n\nLIFECYCLE_HOOKS.forEach(function (hook) {\n  strats[hook] = mergeHook;\n});\n\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets (\n  parentVal,\n  childVal,\n  vm,\n  key\n) {\n  var res = Object.create(parentVal || null);\n  if (childVal) {\n    process.env.NODE_ENV !== 'production' && assertObjectType(key, childVal, vm);\n    return extend(res, childVal)\n  } else {\n    return res\n  }\n}\n\nASSET_TYPES.forEach(function (type) {\n  strats[type + 's'] = mergeAssets;\n});\n\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (\n  parentVal,\n  childVal,\n  vm,\n  key\n) {\n  // work around Firefox's Object.prototype.watch...\n  if (parentVal === nativeWatch) { parentVal = undefined; }\n  if (childVal === nativeWatch) { childVal = undefined; }\n  /* istanbul ignore if */\n  if (!childVal) { return Object.create(parentVal || null) }\n  if (process.env.NODE_ENV !== 'production') {\n    assertObjectType(key, childVal, vm);\n  }\n  if (!parentVal) { return childVal }\n  var ret = {};\n  extend(ret, parentVal);\n  for (var key$1 in childVal) {\n    var parent = ret[key$1];\n    var child = childVal[key$1];\n    if (parent && !Array.isArray(parent)) {\n      parent = [parent];\n    }\n    ret[key$1] = parent\n      ? parent.concat(child)\n      : Array.isArray(child) ? child : [child];\n  }\n  return ret\n};\n\n/**\n * Other object hashes.\n */\nstrats.props =\nstrats.methods =\nstrats.inject =\nstrats.computed = function (\n  parentVal,\n  childVal,\n  vm,\n  key\n) {\n  if (childVal && process.env.NODE_ENV !== 'production') {\n    assertObjectType(key, childVal, vm);\n  }\n  if (!parentVal) { return childVal }\n  var ret = Object.create(null);\n  extend(ret, parentVal);\n  if (childVal) { extend(ret, childVal); }\n  return ret\n};\nstrats.provide = mergeDataOrFn;\n\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n  return childVal === undefined\n    ? parentVal\n    : childVal\n};\n\n/**\n * Validate component names\n */\nfunction checkComponents (options) {\n  for (var key in options.components) {\n    validateComponentName(key);\n  }\n}\n\nfunction validateComponentName (name) {\n  if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\n    warn(\n      'Invalid component name: \"' + name + '\". Component names ' +\n      'should conform to valid custom element name in html5 specification.'\n    );\n  }\n  if (isBuiltInTag(name) || config.isReservedTag(name)) {\n    warn(\n      'Do not use built-in or reserved HTML elements as component ' +\n      'id: ' + name\n    );\n  }\n}\n\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps (options, vm) {\n  var props = options.props;\n  if (!props) { return }\n  var res = {};\n  var i, val, name;\n  if (Array.isArray(props)) {\n    i = props.length;\n    while (i--) {\n      val = props[i];\n      if (typeof val === 'string') {\n        name = camelize(val);\n        res[name] = { type: null };\n      } else if (process.env.NODE_ENV !== 'production') {\n        warn('props must be strings when using array syntax.');\n      }\n    }\n  } else if (isPlainObject(props)) {\n    for (var key in props) {\n      val = props[key];\n      name = camelize(key);\n      res[name] = isPlainObject(val)\n        ? val\n        : { type: val };\n    }\n  } else if (process.env.NODE_ENV !== 'production') {\n    warn(\n      \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n      \"but got \" + (toRawType(props)) + \".\",\n      vm\n    );\n  }\n  options.props = res;\n}\n\n/**\n * Normalize all injections into Object-based format\n */\nfunction normalizeInject (options, vm) {\n  var inject = options.inject;\n  if (!inject) { return }\n  var normalized = options.inject = {};\n  if (Array.isArray(inject)) {\n    for (var i = 0; i < inject.length; i++) {\n      normalized[inject[i]] = { from: inject[i] };\n    }\n  } else if (isPlainObject(inject)) {\n    for (var key in inject) {\n      var val = inject[key];\n      normalized[key] = isPlainObject(val)\n        ? extend({ from: key }, val)\n        : { from: val };\n    }\n  } else if (process.env.NODE_ENV !== 'production') {\n    warn(\n      \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n      \"but got \" + (toRawType(inject)) + \".\",\n      vm\n    );\n  }\n}\n\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives (options) {\n  var dirs = options.directives;\n  if (dirs) {\n    for (var key in dirs) {\n      var def$$1 = dirs[key];\n      if (typeof def$$1 === 'function') {\n        dirs[key] = { bind: def$$1, update: def$$1 };\n      }\n    }\n  }\n}\n\nfunction assertObjectType (name, value, vm) {\n  if (!isPlainObject(value)) {\n    warn(\n      \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\n      \"but got \" + (toRawType(value)) + \".\",\n      vm\n    );\n  }\n}\n\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions (\n  parent,\n  child,\n  vm\n) {\n  if (process.env.NODE_ENV !== 'production') {\n    checkComponents(child);\n  }\n\n  if (typeof child === 'function') {\n    child = child.options;\n  }\n\n  normalizeProps(child, vm);\n  normalizeInject(child, vm);\n  normalizeDirectives(child);\n\n  // Apply extends and mixins on the child options,\n  // but only if it is a raw options object that isn't\n  // the result of another mergeOptions call.\n  // Only merged options has the _base property.\n  if (!child._base) {\n    if (child.extends) {\n      parent = mergeOptions(parent, child.extends, vm);\n    }\n    if (child.mixins) {\n      for (var i = 0, l = child.mixins.length; i < l; i++) {\n        parent = mergeOptions(parent, child.mixins[i], vm);\n      }\n    }\n  }\n\n  var options = {};\n  var key;\n  for (key in parent) {\n    mergeField(key);\n  }\n  for (key in child) {\n    if (!hasOwn(parent, key)) {\n      mergeField(key);\n    }\n  }\n  function mergeField (key) {\n    var strat = strats[key] || defaultStrat;\n    options[key] = strat(parent[key], child[key], vm, key);\n  }\n  return options\n}\n\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset (\n  options,\n  type,\n  id,\n  warnMissing\n) {\n  /* istanbul ignore if */\n  if (typeof id !== 'string') {\n    return\n  }\n  var assets = options[type];\n  // check local registration variations first\n  if (hasOwn(assets, id)) { return assets[id] }\n  var camelizedId = camelize(id);\n  if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n  var PascalCaseId = capitalize(camelizedId);\n  if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n  // fallback to prototype chain\n  var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n  if (process.env.NODE_ENV !== 'production' && warnMissing && !res) {\n    warn(\n      'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n      options\n    );\n  }\n  return res\n}\n\n/*  */\n\n\n\nfunction validateProp (\n  key,\n  propOptions,\n  propsData,\n  vm\n) {\n  var prop = propOptions[key];\n  var absent = !hasOwn(propsData, key);\n  var value = propsData[key];\n  // boolean casting\n  var booleanIndex = getTypeIndex(Boolean, prop.type);\n  if (booleanIndex > -1) {\n    if (absent && !hasOwn(prop, 'default')) {\n      value = false;\n    } else if (value === '' || value === hyphenate(key)) {\n      // only cast empty string / same name to boolean if\n      // boolean has higher priority\n      var stringIndex = getTypeIndex(String, prop.type);\n      if (stringIndex < 0 || booleanIndex < stringIndex) {\n        value = true;\n      }\n    }\n  }\n  // check default value\n  if (value === undefined) {\n    value = getPropDefaultValue(vm, prop, key);\n    // since the default value is a fresh copy,\n    // make sure to observe it.\n    var prevShouldObserve = shouldObserve;\n    toggleObserving(true);\n    observe(value);\n    toggleObserving(prevShouldObserve);\n  }\n  if (\n    process.env.NODE_ENV !== 'production' &&\n    // skip validation for weex recycle-list child component props\n    !(false)\n  ) {\n    assertProp(prop, key, value, vm, absent);\n  }\n  return value\n}\n\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue (vm, prop, key) {\n  // no default, return undefined\n  if (!hasOwn(prop, 'default')) {\n    return undefined\n  }\n  var def = prop.default;\n  // warn against non-factory defaults for Object & Array\n  if (process.env.NODE_ENV !== 'production' && isObject(def)) {\n    warn(\n      'Invalid default value for prop \"' + key + '\": ' +\n      'Props with type Object/Array must use a factory function ' +\n      'to return the default value.',\n      vm\n    );\n  }\n  // the raw prop value was also undefined from previous render,\n  // return previous default value to avoid unnecessary watcher trigger\n  if (vm && vm.$options.propsData &&\n    vm.$options.propsData[key] === undefined &&\n    vm._props[key] !== undefined\n  ) {\n    return vm._props[key]\n  }\n  // call factory function for non-Function types\n  // a value is Function if its prototype is function even across different execution context\n  return typeof def === 'function' && getType(prop.type) !== 'Function'\n    ? def.call(vm)\n    : def\n}\n\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp (\n  prop,\n  name,\n  value,\n  vm,\n  absent\n) {\n  if (prop.required && absent) {\n    warn(\n      'Missing required prop: \"' + name + '\"',\n      vm\n    );\n    return\n  }\n  if (value == null && !prop.required) {\n    return\n  }\n  var type = prop.type;\n  var valid = !type || type === true;\n  var expectedTypes = [];\n  if (type) {\n    if (!Array.isArray(type)) {\n      type = [type];\n    }\n    for (var i = 0; i < type.length && !valid; i++) {\n      var assertedType = assertType(value, type[i]);\n      expectedTypes.push(assertedType.expectedType || '');\n      valid = assertedType.valid;\n    }\n  }\n\n  if (!valid) {\n    warn(\n      getInvalidTypeMessage(name, value, expectedTypes),\n      vm\n    );\n    return\n  }\n  var validator = prop.validator;\n  if (validator) {\n    if (!validator(value)) {\n      warn(\n        'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n        vm\n      );\n    }\n  }\n}\n\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;\n\nfunction assertType (value, type) {\n  var valid;\n  var expectedType = getType(type);\n  if (simpleCheckRE.test(expectedType)) {\n    var t = typeof value;\n    valid = t === expectedType.toLowerCase();\n    // for primitive wrapper objects\n    if (!valid && t === 'object') {\n      valid = value instanceof type;\n    }\n  } else if (expectedType === 'Object') {\n    valid = isPlainObject(value);\n  } else if (expectedType === 'Array') {\n    valid = Array.isArray(value);\n  } else {\n    valid = value instanceof type;\n  }\n  return {\n    valid: valid,\n    expectedType: expectedType\n  }\n}\n\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType (fn) {\n  var match = fn && fn.toString().match(/^\\s*function (\\w+)/);\n  return match ? match[1] : ''\n}\n\nfunction isSameType (a, b) {\n  return getType(a) === getType(b)\n}\n\nfunction getTypeIndex (type, expectedTypes) {\n  if (!Array.isArray(expectedTypes)) {\n    return isSameType(expectedTypes, type) ? 0 : -1\n  }\n  for (var i = 0, len = expectedTypes.length; i < len; i++) {\n    if (isSameType(expectedTypes[i], type)) {\n      return i\n    }\n  }\n  return -1\n}\n\nfunction getInvalidTypeMessage (name, value, expectedTypes) {\n  var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n    \" Expected \" + (expectedTypes.map(capitalize).join(', '));\n  var expectedType = expectedTypes[0];\n  var receivedType = toRawType(value);\n  var expectedValue = styleValue(value, expectedType);\n  var receivedValue = styleValue(value, receivedType);\n  // check if we need to specify expected value\n  if (expectedTypes.length === 1 &&\n      isExplicable(expectedType) &&\n      !isBoolean(expectedType, receivedType)) {\n    message += \" with value \" + expectedValue;\n  }\n  message += \", got \" + receivedType + \" \";\n  // check if we need to specify received value\n  if (isExplicable(receivedType)) {\n    message += \"with value \" + receivedValue + \".\";\n  }\n  return message\n}\n\nfunction styleValue (value, type) {\n  if (type === 'String') {\n    return (\"\\\"\" + value + \"\\\"\")\n  } else if (type === 'Number') {\n    return (\"\" + (Number(value)))\n  } else {\n    return (\"\" + value)\n  }\n}\n\nfunction isExplicable (value) {\n  var explicitTypes = ['string', 'number', 'boolean'];\n  return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\n}\n\nfunction isBoolean () {\n  var args = [], len = arguments.length;\n  while ( len-- ) args[ len ] = arguments[ len ];\n\n  return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\n}\n\n/*  */\n\nfunction handleError (err, vm, info) {\n  // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n  // See: https://github.com/vuejs/vuex/issues/1505\n  pushTarget();\n  try {\n    if (vm) {\n      var cur = vm;\n      while ((cur = cur.$parent)) {\n        var hooks = cur.$options.errorCaptured;\n        if (hooks) {\n          for (var i = 0; i < hooks.length; i++) {\n            try {\n              var capture = hooks[i].call(cur, err, vm, info) === false;\n              if (capture) { return }\n            } catch (e) {\n              globalHandleError(e, cur, 'errorCaptured hook');\n            }\n          }\n        }\n      }\n    }\n    globalHandleError(err, vm, info);\n  } finally {\n    popTarget();\n  }\n}\n\nfunction invokeWithErrorHandling (\n  handler,\n  context,\n  args,\n  vm,\n  info\n) {\n  var res;\n  try {\n    res = args ? handler.apply(context, args) : handler.call(context);\n    if (res && !res._isVue && isPromise(res) && !res._handled) {\n      res.catch(function (e) { return handleError(e, vm, info + \" (Promise/async)\"); });\n      // issue #9511\n      // avoid catch triggering multiple times when nested calls\n      res._handled = true;\n    }\n  } catch (e) {\n    handleError(e, vm, info);\n  }\n  return res\n}\n\nfunction globalHandleError (err, vm, info) {\n  if (config.errorHandler) {\n    try {\n      return config.errorHandler.call(null, err, vm, info)\n    } catch (e) {\n      // if the user intentionally throws the original error in the handler,\n      // do not log it twice\n      if (e !== err) {\n        logError(e, null, 'config.errorHandler');\n      }\n    }\n  }\n  logError(err, vm, info);\n}\n\nfunction logError (err, vm, info) {\n  if (process.env.NODE_ENV !== 'production') {\n    warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n  }\n  /* istanbul ignore else */\n  if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n    console.error(err);\n  } else {\n    throw err\n  }\n}\n\n/*  */\n\nvar isUsingMicroTask = false;\n\nvar callbacks = [];\nvar pending = false;\n\nfunction flushCallbacks () {\n  pending = false;\n  var copies = callbacks.slice(0);\n  callbacks.length = 0;\n  for (var i = 0; i < copies.length; i++) {\n    copies[i]();\n  }\n}\n\n// Here we have async deferring wrappers using microtasks.\n// In 2.5 we used (macro) tasks (in combination with microtasks).\n// However, it has subtle problems when state is changed right before repaint\n// (e.g. #6813, out-in transitions).\n// Also, using (macro) tasks in event handler would cause some weird behaviors\n// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n// So we now use microtasks everywhere, again.\n// A major drawback of this tradeoff is that there are some scenarios\n// where microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690, which have workarounds)\n// or even between bubbling of the same event (#6566).\nvar timerFunc;\n\n// The nextTick behavior leverages the microtask queue, which can be accessed\n// via either native Promise.then or MutationObserver.\n// MutationObserver has wider support, however it is seriously bugged in\n// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n// completely stops working after triggering a few times... so, if native\n// Promise is available, we will use it:\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n  var p = Promise.resolve();\n  timerFunc = function () {\n    p.then(flushCallbacks);\n    // In problematic UIWebViews, Promise.then doesn't completely break, but\n    // it can get stuck in a weird state where callbacks are pushed into the\n    // microtask queue but the queue isn't being flushed, until the browser\n    // needs to do some other work, e.g. handle a timer. Therefore we can\n    // \"force\" the microtask queue to be flushed by adding an empty timer.\n    if (isIOS) { setTimeout(noop); }\n  };\n  isUsingMicroTask = true;\n} else if (!isIE && typeof MutationObserver !== 'undefined' && (\n  isNative(MutationObserver) ||\n  // PhantomJS and iOS 7.x\n  MutationObserver.toString() === '[object MutationObserverConstructor]'\n)) {\n  // Use MutationObserver where native Promise is not available,\n  // e.g. PhantomJS, iOS7, Android 4.4\n  // (#6466 MutationObserver is unreliable in IE11)\n  var counter = 1;\n  var observer = new MutationObserver(flushCallbacks);\n  var textNode = document.createTextNode(String(counter));\n  observer.observe(textNode, {\n    characterData: true\n  });\n  timerFunc = function () {\n    counter = (counter + 1) % 2;\n    textNode.data = String(counter);\n  };\n  isUsingMicroTask = true;\n} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n  // Fallback to setImmediate.\n  // Techinically it leverages the (macro) task queue,\n  // but it is still a better choice than setTimeout.\n  timerFunc = function () {\n    setImmediate(flushCallbacks);\n  };\n} else {\n  // Fallback to setTimeout.\n  timerFunc = function () {\n    setTimeout(flushCallbacks, 0);\n  };\n}\n\nfunction nextTick (cb, ctx) {\n  var _resolve;\n  callbacks.push(function () {\n    if (cb) {\n      try {\n        cb.call(ctx);\n      } catch (e) {\n        handleError(e, ctx, 'nextTick');\n      }\n    } else if (_resolve) {\n      _resolve(ctx);\n    }\n  });\n  if (!pending) {\n    pending = true;\n    timerFunc();\n  }\n  // $flow-disable-line\n  if (!cb && typeof Promise !== 'undefined') {\n    return new Promise(function (resolve) {\n      _resolve = resolve;\n    })\n  }\n}\n\n/*  */\n\nvar mark;\nvar measure;\n\nif (process.env.NODE_ENV !== 'production') {\n  var perf = inBrowser && window.performance;\n  /* istanbul ignore if */\n  if (\n    perf &&\n    perf.mark &&\n    perf.measure &&\n    perf.clearMarks &&\n    perf.clearMeasures\n  ) {\n    mark = function (tag) { return perf.mark(tag); };\n    measure = function (name, startTag, endTag) {\n      perf.measure(name, startTag, endTag);\n      perf.clearMarks(startTag);\n      perf.clearMarks(endTag);\n      // perf.clearMeasures(name)\n    };\n  }\n}\n\n/* not type checking this file because flow doesn't play well with Proxy */\n\nvar initProxy;\n\nif (process.env.NODE_ENV !== 'production') {\n  var allowedGlobals = makeMap(\n    'Infinity,undefined,NaN,isFinite,isNaN,' +\n    'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n    'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n    'require' // for Webpack/Browserify\n  );\n\n  var warnNonPresent = function (target, key) {\n    warn(\n      \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n      'referenced during render. Make sure that this property is reactive, ' +\n      'either in the data option, or for class-based components, by ' +\n      'initializing the property. ' +\n      'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',\n      target\n    );\n  };\n\n  var warnReservedPrefix = function (target, key) {\n    warn(\n      \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\n      'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\n      'prevent conflicts with Vue internals' +\n      'See: https://vuejs.org/v2/api/#data',\n      target\n    );\n  };\n\n  var hasProxy =\n    typeof Proxy !== 'undefined' && isNative(Proxy);\n\n  if (hasProxy) {\n    var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n    config.keyCodes = new Proxy(config.keyCodes, {\n      set: function set (target, key, value) {\n        if (isBuiltInModifier(key)) {\n          warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n          return false\n        } else {\n          target[key] = value;\n          return true\n        }\n      }\n    });\n  }\n\n  var hasHandler = {\n    has: function has (target, key) {\n      var has = key in target;\n      var isAllowed = allowedGlobals(key) ||\n        (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\n      if (!has && !isAllowed) {\n        if (key in target.$data) { warnReservedPrefix(target, key); }\n        else { warnNonPresent(target, key); }\n      }\n      return has || !isAllowed\n    }\n  };\n\n  var getHandler = {\n    get: function get (target, key) {\n      if (typeof key === 'string' && !(key in target)) {\n        if (key in target.$data) { warnReservedPrefix(target, key); }\n        else { warnNonPresent(target, key); }\n      }\n      return target[key]\n    }\n  };\n\n  initProxy = function initProxy (vm) {\n    if (hasProxy) {\n      // determine which proxy handler to use\n      var options = vm.$options;\n      var handlers = options.render && options.render._withStripped\n        ? getHandler\n        : hasHandler;\n      vm._renderProxy = new Proxy(vm, handlers);\n    } else {\n      vm._renderProxy = vm;\n    }\n  };\n}\n\n/*  */\n\nvar seenObjects = new _Set();\n\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nfunction traverse (val) {\n  _traverse(val, seenObjects);\n  seenObjects.clear();\n}\n\nfunction _traverse (val, seen) {\n  var i, keys;\n  var isA = Array.isArray(val);\n  if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\n    return\n  }\n  if (val.__ob__) {\n    var depId = val.__ob__.dep.id;\n    if (seen.has(depId)) {\n      return\n    }\n    seen.add(depId);\n  }\n  if (isA) {\n    i = val.length;\n    while (i--) { _traverse(val[i], seen); }\n  } else {\n    keys = Object.keys(val);\n    i = keys.length;\n    while (i--) { _traverse(val[keys[i]], seen); }\n  }\n}\n\n/*  */\n\nvar normalizeEvent = cached(function (name) {\n  var passive = name.charAt(0) === '&';\n  name = passive ? name.slice(1) : name;\n  var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first\n  name = once$$1 ? name.slice(1) : name;\n  var capture = name.charAt(0) === '!';\n  name = capture ? name.slice(1) : name;\n  return {\n    name: name,\n    once: once$$1,\n    capture: capture,\n    passive: passive\n  }\n});\n\nfunction createFnInvoker (fns, vm) {\n  function invoker () {\n    var arguments$1 = arguments;\n\n    var fns = invoker.fns;\n    if (Array.isArray(fns)) {\n      var cloned = fns.slice();\n      for (var i = 0; i < cloned.length; i++) {\n        invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\n      }\n    } else {\n      // return handler return value for single handlers\n      return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\n    }\n  }\n  invoker.fns = fns;\n  return invoker\n}\n\nfunction updateListeners (\n  on,\n  oldOn,\n  add,\n  remove$$1,\n  createOnceHandler,\n  vm\n) {\n  var name, def$$1, cur, old, event;\n  for (name in on) {\n    def$$1 = cur = on[name];\n    old = oldOn[name];\n    event = normalizeEvent(name);\n    if (isUndef(cur)) {\n      process.env.NODE_ENV !== 'production' && warn(\n        \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n        vm\n      );\n    } else if (isUndef(old)) {\n      if (isUndef(cur.fns)) {\n        cur = on[name] = createFnInvoker(cur, vm);\n      }\n      if (isTrue(event.once)) {\n        cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n      }\n      add(event.name, cur, event.capture, event.passive, event.params);\n    } else if (cur !== old) {\n      old.fns = cur;\n      on[name] = old;\n    }\n  }\n  for (name in oldOn) {\n    if (isUndef(on[name])) {\n      event = normalizeEvent(name);\n      remove$$1(event.name, oldOn[name], event.capture);\n    }\n  }\n}\n\n/*  */\n\nfunction mergeVNodeHook (def, hookKey, hook) {\n  if (def instanceof VNode) {\n    def = def.data.hook || (def.data.hook = {});\n  }\n  var invoker;\n  var oldHook = def[hookKey];\n\n  function wrappedHook () {\n    hook.apply(this, arguments);\n    // important: remove merged hook to ensure it's called only once\n    // and prevent memory leak\n    remove(invoker.fns, wrappedHook);\n  }\n\n  if (isUndef(oldHook)) {\n    // no existing hook\n    invoker = createFnInvoker([wrappedHook]);\n  } else {\n    /* istanbul ignore if */\n    if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {\n      // already a merged invoker\n      invoker = oldHook;\n      invoker.fns.push(wrappedHook);\n    } else {\n      // existing plain hook\n      invoker = createFnInvoker([oldHook, wrappedHook]);\n    }\n  }\n\n  invoker.merged = true;\n  def[hookKey] = invoker;\n}\n\n/*  */\n\nfunction extractPropsFromVNodeData (\n  data,\n  Ctor,\n  tag\n) {\n  // we are only extracting raw values here.\n  // validation and default values are handled in the child\n  // component itself.\n  var propOptions = Ctor.options.props;\n  if (isUndef(propOptions)) {\n    return\n  }\n  var res = {};\n  var attrs = data.attrs;\n  var props = data.props;\n  if (isDef(attrs) || isDef(props)) {\n    for (var key in propOptions) {\n      var altKey = hyphenate(key);\n      if (process.env.NODE_ENV !== 'production') {\n        var keyInLowerCase = key.toLowerCase();\n        if (\n          key !== keyInLowerCase &&\n          attrs && hasOwn(attrs, keyInLowerCase)\n        ) {\n          tip(\n            \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\n            (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\n            \" \\\"\" + key + \"\\\". \" +\n            \"Note that HTML attributes are case-insensitive and camelCased \" +\n            \"props need to use their kebab-case equivalents when using in-DOM \" +\n            \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\n          );\n        }\n      }\n      checkProp(res, props, key, altKey, true) ||\n      checkProp(res, attrs, key, altKey, false);\n    }\n  }\n  return res\n}\n\nfunction checkProp (\n  res,\n  hash,\n  key,\n  altKey,\n  preserve\n) {\n  if (isDef(hash)) {\n    if (hasOwn(hash, key)) {\n      res[key] = hash[key];\n      if (!preserve) {\n        delete hash[key];\n      }\n      return true\n    } else if (hasOwn(hash, altKey)) {\n      res[key] = hash[altKey];\n      if (!preserve) {\n        delete hash[altKey];\n      }\n      return true\n    }\n  }\n  return false\n}\n\n/*  */\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array<VNode>. There are\n// two cases where extra normalization is needed:\n\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren (children) {\n  for (var i = 0; i < children.length; i++) {\n    if (Array.isArray(children[i])) {\n      return Array.prototype.concat.apply([], children)\n    }\n  }\n  return children\n}\n\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g. <template>, <slot>, v-for, or when the children is provided by user\n// with hand-written render functions / JSX. In such cases a full normalization\n// is needed to cater to all possible types of children values.\nfunction normalizeChildren (children) {\n  return isPrimitive(children)\n    ? [createTextVNode(children)]\n    : Array.isArray(children)\n      ? normalizeArrayChildren(children)\n      : undefined\n}\n\nfunction isTextNode (node) {\n  return isDef(node) && isDef(node.text) && isFalse(node.isComment)\n}\n\nfunction normalizeArrayChildren (children, nestedIndex) {\n  var res = [];\n  var i, c, lastIndex, last;\n  for (i = 0; i < children.length; i++) {\n    c = children[i];\n    if (isUndef(c) || typeof c === 'boolean') { continue }\n    lastIndex = res.length - 1;\n    last = res[lastIndex];\n    //  nested\n    if (Array.isArray(c)) {\n      if (c.length > 0) {\n        c = normalizeArrayChildren(c, ((nestedIndex || '') + \"_\" + i));\n        // merge adjacent text nodes\n        if (isTextNode(c[0]) && isTextNode(last)) {\n          res[lastIndex] = createTextVNode(last.text + (c[0]).text);\n          c.shift();\n        }\n        res.push.apply(res, c);\n      }\n    } else if (isPrimitive(c)) {\n      if (isTextNode(last)) {\n        // merge adjacent text nodes\n        // this is necessary for SSR hydration because text nodes are\n        // essentially merged when rendered to HTML strings\n        res[lastIndex] = createTextVNode(last.text + c);\n      } else if (c !== '') {\n        // convert primitive to vnode\n        res.push(createTextVNode(c));\n      }\n    } else {\n      if (isTextNode(c) && isTextNode(last)) {\n        // merge adjacent text nodes\n        res[lastIndex] = createTextVNode(last.text + c.text);\n      } else {\n        // default key for nested array children (likely generated by v-for)\n        if (isTrue(children._isVList) &&\n          isDef(c.tag) &&\n          isUndef(c.key) &&\n          isDef(nestedIndex)) {\n          c.key = \"__vlist\" + nestedIndex + \"_\" + i + \"__\";\n        }\n        res.push(c);\n      }\n    }\n  }\n  return res\n}\n\n/*  */\n\nfunction initProvide (vm) {\n  var provide = vm.$options.provide;\n  if (provide) {\n    vm._provided = typeof provide === 'function'\n      ? provide.call(vm)\n      : provide;\n  }\n}\n\nfunction initInjections (vm) {\n  var result = resolveInject(vm.$options.inject, vm);\n  if (result) {\n    toggleObserving(false);\n    Object.keys(result).forEach(function (key) {\n      /* istanbul ignore else */\n      if (process.env.NODE_ENV !== 'production') {\n        defineReactive$$1(vm, key, result[key], function () {\n          warn(\n            \"Avoid mutating an injected value directly since the changes will be \" +\n            \"overwritten whenever the provided component re-renders. \" +\n            \"injection being mutated: \\\"\" + key + \"\\\"\",\n            vm\n          );\n        });\n      } else {\n        defineReactive$$1(vm, key, result[key]);\n      }\n    });\n    toggleObserving(true);\n  }\n}\n\nfunction resolveInject (inject, vm) {\n  if (inject) {\n    // inject is :any because flow is not smart enough to figure out cached\n    var result = Object.create(null);\n    var keys = hasSymbol\n      ? Reflect.ownKeys(inject)\n      : Object.keys(inject);\n\n    for (var i = 0; i < keys.length; i++) {\n      var key = keys[i];\n      // #6574 in case the inject object is observed...\n      if (key === '__ob__') { continue }\n      var provideKey = inject[key].from;\n      var source = vm;\n      while (source) {\n        if (source._provided && hasOwn(source._provided, provideKey)) {\n          result[key] = source._provided[provideKey];\n          break\n        }\n        source = source.$parent;\n      }\n      if (!source) {\n        if ('default' in inject[key]) {\n          var provideDefault = inject[key].default;\n          result[key] = typeof provideDefault === 'function'\n            ? provideDefault.call(vm)\n            : provideDefault;\n        } else if (process.env.NODE_ENV !== 'production') {\n          warn((\"Injection \\\"\" + key + \"\\\" not found\"), vm);\n        }\n      }\n    }\n    return result\n  }\n}\n\n/*  */\n\n\n\n/**\n * Runtime helper for resolving raw children VNodes into a slot object.\n */\nfunction resolveSlots (\n  children,\n  context\n) {\n  if (!children || !children.length) {\n    return {}\n  }\n  var slots = {};\n  for (var i = 0, l = children.length; i < l; i++) {\n    var child = children[i];\n    var data = child.data;\n    // remove slot attribute if the node is resolved as a Vue slot node\n    if (data && data.attrs && data.attrs.slot) {\n      delete data.attrs.slot;\n    }\n    // named slots should only be respected if the vnode was rendered in the\n    // same context.\n    if ((child.context === context || child.fnContext === context) &&\n      data && data.slot != null\n    ) {\n      var name = data.slot;\n      var slot = (slots[name] || (slots[name] = []));\n      if (child.tag === 'template') {\n        slot.push.apply(slot, child.children || []);\n      } else {\n        slot.push(child);\n      }\n    } else {\n      (slots.default || (slots.default = [])).push(child);\n    }\n  }\n  // ignore slots that contains only whitespace\n  for (var name$1 in slots) {\n    if (slots[name$1].every(isWhitespace)) {\n      delete slots[name$1];\n    }\n  }\n  return slots\n}\n\nfunction isWhitespace (node) {\n  return (node.isComment && !node.asyncFactory) || node.text === ' '\n}\n\n/*  */\n\nfunction normalizeScopedSlots (\n  slots,\n  normalSlots,\n  prevSlots\n) {\n  var res;\n  var hasNormalSlots = Object.keys(normalSlots).length > 0;\n  var isStable = slots ? !!slots.$stable : !hasNormalSlots;\n  var key = slots && slots.$key;\n  if (!slots) {\n    res = {};\n  } else if (slots._normalized) {\n    // fast path 1: child component re-render only, parent did not change\n    return slots._normalized\n  } else if (\n    isStable &&\n    prevSlots &&\n    prevSlots !== emptyObject &&\n    key === prevSlots.$key &&\n    !hasNormalSlots &&\n    !prevSlots.$hasNormal\n  ) {\n    // fast path 2: stable scoped slots w/ no normal slots to proxy,\n    // only need to normalize once\n    return prevSlots\n  } else {\n    res = {};\n    for (var key$1 in slots) {\n      if (slots[key$1] && key$1[0] !== '$') {\n        res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);\n      }\n    }\n  }\n  // expose normal slots on scopedSlots\n  for (var key$2 in normalSlots) {\n    if (!(key$2 in res)) {\n      res[key$2] = proxyNormalSlot(normalSlots, key$2);\n    }\n  }\n  // avoriaz seems to mock a non-extensible $scopedSlots object\n  // and when that is passed down this would cause an error\n  if (slots && Object.isExtensible(slots)) {\n    (slots)._normalized = res;\n  }\n  def(res, '$stable', isStable);\n  def(res, '$key', key);\n  def(res, '$hasNormal', hasNormalSlots);\n  return res\n}\n\nfunction normalizeScopedSlot(normalSlots, key, fn) {\n  var normalized = function () {\n    var res = arguments.length ? fn.apply(null, arguments) : fn({});\n    res = res && typeof res === 'object' && !Array.isArray(res)\n      ? [res] // single vnode\n      : normalizeChildren(res);\n    return res && (\n      res.length === 0 ||\n      (res.length === 1 && res[0].isComment) // #9658\n    ) ? undefined\n      : res\n  };\n  // this is a slot using the new v-slot syntax without scope. although it is\n  // compiled as a scoped slot, render fn users would expect it to be present\n  // on this.$slots because the usage is semantically a normal slot.\n  if (fn.proxy) {\n    Object.defineProperty(normalSlots, key, {\n      get: normalized,\n      enumerable: true,\n      configurable: true\n    });\n  }\n  return normalized\n}\n\nfunction proxyNormalSlot(slots, key) {\n  return function () { return slots[key]; }\n}\n\n/*  */\n\n/**\n * Runtime helper for rendering v-for lists.\n */\nfunction renderList (\n  val,\n  render\n) {\n  var ret, i, l, keys, key;\n  if (Array.isArray(val) || typeof val === 'string') {\n    ret = new Array(val.length);\n    for (i = 0, l = val.length; i < l; i++) {\n      ret[i] = render(val[i], i);\n    }\n  } else if (typeof val === 'number') {\n    ret = new Array(val);\n    for (i = 0; i < val; i++) {\n      ret[i] = render(i + 1, i);\n    }\n  } else if (isObject(val)) {\n    if (hasSymbol && val[Symbol.iterator]) {\n      ret = [];\n      var iterator = val[Symbol.iterator]();\n      var result = iterator.next();\n      while (!result.done) {\n        ret.push(render(result.value, ret.length));\n        result = iterator.next();\n      }\n    } else {\n      keys = Object.keys(val);\n      ret = new Array(keys.length);\n      for (i = 0, l = keys.length; i < l; i++) {\n        key = keys[i];\n        ret[i] = render(val[key], key, i);\n      }\n    }\n  }\n  if (!isDef(ret)) {\n    ret = [];\n  }\n  (ret)._isVList = true;\n  return ret\n}\n\n/*  */\n\n/**\n * Runtime helper for rendering <slot>\n */\nfunction renderSlot (\n  name,\n  fallback,\n  props,\n  bindObject\n) {\n  var scopedSlotFn = this.$scopedSlots[name];\n  var nodes;\n  if (scopedSlotFn) { // scoped slot\n    props = props || {};\n    if (bindObject) {\n      if (process.env.NODE_ENV !== 'production' && !isObject(bindObject)) {\n        warn(\n          'slot v-bind without argument expects an Object',\n          this\n        );\n      }\n      props = extend(extend({}, bindObject), props);\n    }\n    nodes = scopedSlotFn(props) || fallback;\n  } else {\n    nodes = this.$slots[name] || fallback;\n  }\n\n  var target = props && props.slot;\n  if (target) {\n    return this.$createElement('template', { slot: target }, nodes)\n  } else {\n    return nodes\n  }\n}\n\n/*  */\n\n/**\n * Runtime helper for resolving filters\n */\nfunction resolveFilter (id) {\n  return resolveAsset(this.$options, 'filters', id, true) || identity\n}\n\n/*  */\n\nfunction isKeyNotMatch (expect, actual) {\n  if (Array.isArray(expect)) {\n    return expect.indexOf(actual) === -1\n  } else {\n    return expect !== actual\n  }\n}\n\n/**\n * Runtime helper for checking keyCodes from config.\n * exposed as Vue.prototype._k\n * passing in eventKeyName as last argument separately for backwards compat\n */\nfunction checkKeyCodes (\n  eventKeyCode,\n  key,\n  builtInKeyCode,\n  eventKeyName,\n  builtInKeyName\n) {\n  var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;\n  if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {\n    return isKeyNotMatch(builtInKeyName, eventKeyName)\n  } else if (mappedKeyCode) {\n    return isKeyNotMatch(mappedKeyCode, eventKeyCode)\n  } else if (eventKeyName) {\n    return hyphenate(eventKeyName) !== key\n  }\n}\n\n/*  */\n\n/**\n * Runtime helper for merging v-bind=\"object\" into a VNode's data.\n */\nfunction bindObjectProps (\n  data,\n  tag,\n  value,\n  asProp,\n  isSync\n) {\n  if (value) {\n    if (!isObject(value)) {\n      process.env.NODE_ENV !== 'production' && warn(\n        'v-bind without argument expects an Object or Array value',\n        this\n      );\n    } else {\n      if (Array.isArray(value)) {\n        value = toObject(value);\n      }\n      var hash;\n      var loop = function ( key ) {\n        if (\n          key === 'class' ||\n          key === 'style' ||\n          isReservedAttribute(key)\n        ) {\n          hash = data;\n        } else {\n          var type = data.attrs && data.attrs.type;\n          hash = asProp || config.mustUseProp(tag, type, key)\n            ? data.domProps || (data.domProps = {})\n            : data.attrs || (data.attrs = {});\n        }\n        var camelizedKey = camelize(key);\n        var hyphenatedKey = hyphenate(key);\n        if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {\n          hash[key] = value[key];\n\n          if (isSync) {\n            var on = data.on || (data.on = {});\n            on[(\"update:\" + key)] = function ($event) {\n              value[key] = $event;\n            };\n          }\n        }\n      };\n\n      for (var key in value) loop( key );\n    }\n  }\n  return data\n}\n\n/*  */\n\n/**\n * Runtime helper for rendering static trees.\n */\nfunction renderStatic (\n  index,\n  isInFor\n) {\n  var cached = this._staticTrees || (this._staticTrees = []);\n  var tree = cached[index];\n  // if has already-rendered static tree and not inside v-for,\n  // we can reuse the same tree.\n  if (tree && !isInFor) {\n    return tree\n  }\n  // otherwise, render a fresh tree.\n  tree = cached[index] = this.$options.staticRenderFns[index].call(\n    this._renderProxy,\n    null,\n    this // for render fns generated for functional component templates\n  );\n  markStatic(tree, (\"__static__\" + index), false);\n  return tree\n}\n\n/**\n * Runtime helper for v-once.\n * Effectively it means marking the node as static with a unique key.\n */\nfunction markOnce (\n  tree,\n  index,\n  key\n) {\n  markStatic(tree, (\"__once__\" + index + (key ? (\"_\" + key) : \"\")), true);\n  return tree\n}\n\nfunction markStatic (\n  tree,\n  key,\n  isOnce\n) {\n  if (Array.isArray(tree)) {\n    for (var i = 0; i < tree.length; i++) {\n      if (tree[i] && typeof tree[i] !== 'string') {\n        markStaticNode(tree[i], (key + \"_\" + i), isOnce);\n      }\n    }\n  } else {\n    markStaticNode(tree, key, isOnce);\n  }\n}\n\nfunction markStaticNode (node, key, isOnce) {\n  node.isStatic = true;\n  node.key = key;\n  node.isOnce = isOnce;\n}\n\n/*  */\n\nfunction bindObjectListeners (data, value) {\n  if (value) {\n    if (!isPlainObject(value)) {\n      process.env.NODE_ENV !== 'production' && warn(\n        'v-on without argument expects an Object value',\n        this\n      );\n    } else {\n      var on = data.on = data.on ? extend({}, data.on) : {};\n      for (var key in value) {\n        var existing = on[key];\n        var ours = value[key];\n        on[key] = existing ? [].concat(existing, ours) : ours;\n      }\n    }\n  }\n  return data\n}\n\n/*  */\n\nfunction resolveScopedSlots (\n  fns, // see flow/vnode\n  res,\n  // the following are added in 2.6\n  hasDynamicKeys,\n  contentHashKey\n) {\n  res = res || { $stable: !hasDynamicKeys };\n  for (var i = 0; i < fns.length; i++) {\n    var slot = fns[i];\n    if (Array.isArray(slot)) {\n      resolveScopedSlots(slot, res, hasDynamicKeys);\n    } else if (slot) {\n      // marker for reverse proxying v-slot without scope on this.$slots\n      if (slot.proxy) {\n        slot.fn.proxy = true;\n      }\n      res[slot.key] = slot.fn;\n    }\n  }\n  if (contentHashKey) {\n    (res).$key = contentHashKey;\n  }\n  return res\n}\n\n/*  */\n\nfunction bindDynamicKeys (baseObj, values) {\n  for (var i = 0; i < values.length; i += 2) {\n    var key = values[i];\n    if (typeof key === 'string' && key) {\n      baseObj[values[i]] = values[i + 1];\n    } else if (process.env.NODE_ENV !== 'production' && key !== '' && key !== null) {\n      // null is a speical value for explicitly removing a binding\n      warn(\n        (\"Invalid value for dynamic directive argument (expected string or null): \" + key),\n        this\n      );\n    }\n  }\n  return baseObj\n}\n\n// helper to dynamically append modifier runtime markers to event names.\n// ensure only append when value is already string, otherwise it will be cast\n// to string and cause the type check to miss.\nfunction prependModifier (value, symbol) {\n  return typeof value === 'string' ? symbol + value : value\n}\n\n/*  */\n\nfunction installRenderHelpers (target) {\n  target._o = markOnce;\n  target._n = toNumber;\n  target._s = toString;\n  target._l = renderList;\n  target._t = renderSlot;\n  target._q = looseEqual;\n  target._i = looseIndexOf;\n  target._m = renderStatic;\n  target._f = resolveFilter;\n  target._k = checkKeyCodes;\n  target._b = bindObjectProps;\n  target._v = createTextVNode;\n  target._e = createEmptyVNode;\n  target._u = resolveScopedSlots;\n  target._g = bindObjectListeners;\n  target._d = bindDynamicKeys;\n  target._p = prependModifier;\n}\n\n/*  */\n\nfunction FunctionalRenderContext (\n  data,\n  props,\n  children,\n  parent,\n  Ctor\n) {\n  var this$1 = this;\n\n  var options = Ctor.options;\n  // ensure the createElement function in functional components\n  // gets a unique context - this is necessary for correct named slot check\n  var contextVm;\n  if (hasOwn(parent, '_uid')) {\n    contextVm = Object.create(parent);\n    // $flow-disable-line\n    contextVm._original = parent;\n  } else {\n    // the context vm passed in is a functional context as well.\n    // in this case we want to make sure we are able to get a hold to the\n    // real context instance.\n    contextVm = parent;\n    // $flow-disable-line\n    parent = parent._original;\n  }\n  var isCompiled = isTrue(options._compiled);\n  var needNormalization = !isCompiled;\n\n  this.data = data;\n  this.props = props;\n  this.children = children;\n  this.parent = parent;\n  this.listeners = data.on || emptyObject;\n  this.injections = resolveInject(options.inject, parent);\n  this.slots = function () {\n    if (!this$1.$slots) {\n      normalizeScopedSlots(\n        data.scopedSlots,\n        this$1.$slots = resolveSlots(children, parent)\n      );\n    }\n    return this$1.$slots\n  };\n\n  Object.defineProperty(this, 'scopedSlots', ({\n    enumerable: true,\n    get: function get () {\n      return normalizeScopedSlots(data.scopedSlots, this.slots())\n    }\n  }));\n\n  // support for compiled functional template\n  if (isCompiled) {\n    // exposing $options for renderStatic()\n    this.$options = options;\n    // pre-resolve slots for renderSlot()\n    this.$slots = this.slots();\n    this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);\n  }\n\n  if (options._scopeId) {\n    this._c = function (a, b, c, d) {\n      var vnode = createElement(contextVm, a, b, c, d, needNormalization);\n      if (vnode && !Array.isArray(vnode)) {\n        vnode.fnScopeId = options._scopeId;\n        vnode.fnContext = parent;\n      }\n      return vnode\n    };\n  } else {\n    this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };\n  }\n}\n\ninstallRenderHelpers(FunctionalRenderContext.prototype);\n\nfunction createFunctionalComponent (\n  Ctor,\n  propsData,\n  data,\n  contextVm,\n  children\n) {\n  var options = Ctor.options;\n  var props = {};\n  var propOptions = options.props;\n  if (isDef(propOptions)) {\n    for (var key in propOptions) {\n      props[key] = validateProp(key, propOptions, propsData || emptyObject);\n    }\n  } else {\n    if (isDef(data.attrs)) { mergeProps(props, data.attrs); }\n    if (isDef(data.props)) { mergeProps(props, data.props); }\n  }\n\n  var renderContext = new FunctionalRenderContext(\n    data,\n    props,\n    children,\n    contextVm,\n    Ctor\n  );\n\n  var vnode = options.render.call(null, renderContext._c, renderContext);\n\n  if (vnode instanceof VNode) {\n    return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)\n  } else if (Array.isArray(vnode)) {\n    var vnodes = normalizeChildren(vnode) || [];\n    var res = new Array(vnodes.length);\n    for (var i = 0; i < vnodes.length; i++) {\n      res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);\n    }\n    return res\n  }\n}\n\nfunction cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {\n  // #7817 clone node before setting fnContext, otherwise if the node is reused\n  // (e.g. it was from a cached normal slot) the fnContext causes named slots\n  // that should not be matched to match.\n  var clone = cloneVNode(vnode);\n  clone.fnContext = contextVm;\n  clone.fnOptions = options;\n  if (process.env.NODE_ENV !== 'production') {\n    (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;\n  }\n  if (data.slot) {\n    (clone.data || (clone.data = {})).slot = data.slot;\n  }\n  return clone\n}\n\nfunction mergeProps (to, from) {\n  for (var key in from) {\n    to[camelize(key)] = from[key];\n  }\n}\n\n/*  */\n\n/*  */\n\n/*  */\n\n/*  */\n\n// inline hooks to be invoked on component VNodes during patch\nvar componentVNodeHooks = {\n  init: function init (vnode, hydrating) {\n    if (\n      vnode.componentInstance &&\n      !vnode.componentInstance._isDestroyed &&\n      vnode.data.keepAlive\n    ) {\n      // kept-alive components, treat as a patch\n      var mountedNode = vnode; // work around flow\n      componentVNodeHooks.prepatch(mountedNode, mountedNode);\n    } else {\n      var child = vnode.componentInstance = createComponentInstanceForVnode(\n        vnode,\n        activeInstance\n      );\n      child.$mount(hydrating ? vnode.elm : undefined, hydrating);\n    }\n  },\n\n  prepatch: function prepatch (oldVnode, vnode) {\n    var options = vnode.componentOptions;\n    var child = vnode.componentInstance = oldVnode.componentInstance;\n    updateChildComponent(\n      child,\n      options.propsData, // updated props\n      options.listeners, // updated listeners\n      vnode, // new parent vnode\n      options.children // new children\n    );\n  },\n\n  insert: function insert (vnode) {\n    var context = vnode.context;\n    var componentInstance = vnode.componentInstance;\n    if (!componentInstance._isMounted) {\n      componentInstance._isMounted = true;\n      callHook(componentInstance, 'mounted');\n    }\n    if (vnode.data.keepAlive) {\n      if (context._isMounted) {\n        // vue-router#1212\n        // During updates, a kept-alive component's child components may\n        // change, so directly walking the tree here may call activated hooks\n        // on incorrect children. Instead we push them into a queue which will\n        // be processed after the whole patch process ended.\n        queueActivatedComponent(componentInstance);\n      } else {\n        activateChildComponent(componentInstance, true /* direct */);\n      }\n    }\n  },\n\n  destroy: function destroy (vnode) {\n    var componentInstance = vnode.componentInstance;\n    if (!componentInstance._isDestroyed) {\n      if (!vnode.data.keepAlive) {\n        componentInstance.$destroy();\n      } else {\n        deactivateChildComponent(componentInstance, true /* direct */);\n      }\n    }\n  }\n};\n\nvar hooksToMerge = Object.keys(componentVNodeHooks);\n\nfunction createComponent (\n  Ctor,\n  data,\n  context,\n  children,\n  tag\n) {\n  if (isUndef(Ctor)) {\n    return\n  }\n\n  var baseCtor = context.$options._base;\n\n  // plain options object: turn it into a constructor\n  if (isObject(Ctor)) {\n    Ctor = baseCtor.extend(Ctor);\n  }\n\n  // if at this stage it's not a constructor or an async component factory,\n  // reject.\n  if (typeof Ctor !== 'function') {\n    if (process.env.NODE_ENV !== 'production') {\n      warn((\"Invalid Component definition: \" + (String(Ctor))), context);\n    }\n    return\n  }\n\n  // async component\n  var asyncFactory;\n  if (isUndef(Ctor.cid)) {\n    asyncFactory = Ctor;\n    Ctor = resolveAsyncComponent(asyncFactory, baseCtor);\n    if (Ctor === undefined) {\n      // return a placeholder node for async component, which is rendered\n      // as a comment node but preserves all the raw information for the node.\n      // the information will be used for async server-rendering and hydration.\n      return createAsyncPlaceholder(\n        asyncFactory,\n        data,\n        context,\n        children,\n        tag\n      )\n    }\n  }\n\n  data = data || {};\n\n  // resolve constructor options in case global mixins are applied after\n  // component constructor creation\n  resolveConstructorOptions(Ctor);\n\n  // transform component v-model data into props & events\n  if (isDef(data.model)) {\n    transformModel(Ctor.options, data);\n  }\n\n  // extract props\n  var propsData = extractPropsFromVNodeData(data, Ctor, tag);\n\n  // functional component\n  if (isTrue(Ctor.options.functional)) {\n    return createFunctionalComponent(Ctor, propsData, data, context, children)\n  }\n\n  // extract listeners, since these needs to be treated as\n  // child component listeners instead of DOM listeners\n  var listeners = data.on;\n  // replace with listeners with .native modifier\n  // so it gets processed during parent component patch.\n  data.on = data.nativeOn;\n\n  if (isTrue(Ctor.options.abstract)) {\n    // abstract components do not keep anything\n    // other than props & listeners & slot\n\n    // work around flow\n    var slot = data.slot;\n    data = {};\n    if (slot) {\n      data.slot = slot;\n    }\n  }\n\n  // install component management hooks onto the placeholder node\n  installComponentHooks(data);\n\n  // return a placeholder vnode\n  var name = Ctor.options.name || tag;\n  var vnode = new VNode(\n    (\"vue-component-\" + (Ctor.cid) + (name ? (\"-\" + name) : '')),\n    data, undefined, undefined, undefined, context,\n    { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },\n    asyncFactory\n  );\n\n  return vnode\n}\n\nfunction createComponentInstanceForVnode (\n  vnode, // we know it's MountedComponentVNode but flow doesn't\n  parent // activeInstance in lifecycle state\n) {\n  var options = {\n    _isComponent: true,\n    _parentVnode: vnode,\n    parent: parent\n  };\n  // check inline-template render functions\n  var inlineTemplate = vnode.data.inlineTemplate;\n  if (isDef(inlineTemplate)) {\n    options.render = inlineTemplate.render;\n    options.staticRenderFns = inlineTemplate.staticRenderFns;\n  }\n  return new vnode.componentOptions.Ctor(options)\n}\n\nfunction installComponentHooks (data) {\n  var hooks = data.hook || (data.hook = {});\n  for (var i = 0; i < hooksToMerge.length; i++) {\n    var key = hooksToMerge[i];\n    var existing = hooks[key];\n    var toMerge = componentVNodeHooks[key];\n    if (existing !== toMerge && !(existing && existing._merged)) {\n      hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;\n    }\n  }\n}\n\nfunction mergeHook$1 (f1, f2) {\n  var merged = function (a, b) {\n    // flow complains about extra args which is why we use any\n    f1(a, b);\n    f2(a, b);\n  };\n  merged._merged = true;\n  return merged\n}\n\n// transform component v-model info (value and callback) into\n// prop and event handler respectively.\nfunction transformModel (options, data) {\n  var prop = (options.model && options.model.prop) || 'value';\n  var event = (options.model && options.model.event) || 'input'\n  ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;\n  var on = data.on || (data.on = {});\n  var existing = on[event];\n  var callback = data.model.callback;\n  if (isDef(existing)) {\n    if (\n      Array.isArray(existing)\n        ? existing.indexOf(callback) === -1\n        : existing !== callback\n    ) {\n      on[event] = [callback].concat(existing);\n    }\n  } else {\n    on[event] = callback;\n  }\n}\n\n/*  */\n\nvar SIMPLE_NORMALIZE = 1;\nvar ALWAYS_NORMALIZE = 2;\n\n// wrapper function for providing a more flexible interface\n// without getting yelled at by flow\nfunction createElement (\n  context,\n  tag,\n  data,\n  children,\n  normalizationType,\n  alwaysNormalize\n) {\n  if (Array.isArray(data) || isPrimitive(data)) {\n    normalizationType = children;\n    children = data;\n    data = undefined;\n  }\n  if (isTrue(alwaysNormalize)) {\n    normalizationType = ALWAYS_NORMALIZE;\n  }\n  return _createElement(context, tag, data, children, normalizationType)\n}\n\nfunction _createElement (\n  context,\n  tag,\n  data,\n  children,\n  normalizationType\n) {\n  if (isDef(data) && isDef((data).__ob__)) {\n    process.env.NODE_ENV !== 'production' && warn(\n      \"Avoid using observed data object as vnode data: \" + (JSON.stringify(data)) + \"\\n\" +\n      'Always create fresh vnode data objects in each render!',\n      context\n    );\n    return createEmptyVNode()\n  }\n  // object syntax in v-bind\n  if (isDef(data) && isDef(data.is)) {\n    tag = data.is;\n  }\n  if (!tag) {\n    // in case of component :is set to falsy value\n    return createEmptyVNode()\n  }\n  // warn against non-primitive key\n  if (process.env.NODE_ENV !== 'production' &&\n    isDef(data) && isDef(data.key) && !isPrimitive(data.key)\n  ) {\n    {\n      warn(\n        'Avoid using non-primitive value as key, ' +\n        'use string/number value instead.',\n        context\n      );\n    }\n  }\n  // support single function children as default scoped slot\n  if (Array.isArray(children) &&\n    typeof children[0] === 'function'\n  ) {\n    data = data || {};\n    data.scopedSlots = { default: children[0] };\n    children.length = 0;\n  }\n  if (normalizationType === ALWAYS_NORMALIZE) {\n    children = normalizeChildren(children);\n  } else if (normalizationType === SIMPLE_NORMALIZE) {\n    children = simpleNormalizeChildren(children);\n  }\n  var vnode, ns;\n  if (typeof tag === 'string') {\n    var Ctor;\n    ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);\n    if (config.isReservedTag(tag)) {\n      // platform built-in elements\n      vnode = new VNode(\n        config.parsePlatformTagName(tag), data, children,\n        undefined, undefined, context\n      );\n    } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {\n      // component\n      vnode = createComponent(Ctor, data, context, children, tag);\n    } else {\n      // unknown or unlisted namespaced elements\n      // check at runtime because it may get assigned a namespace when its\n      // parent normalizes children\n      vnode = new VNode(\n        tag, data, children,\n        undefined, undefined, context\n      );\n    }\n  } else {\n    // direct component options / constructor\n    vnode = createComponent(tag, data, context, children);\n  }\n  if (Array.isArray(vnode)) {\n    return vnode\n  } else if (isDef(vnode)) {\n    if (isDef(ns)) { applyNS(vnode, ns); }\n    if (isDef(data)) { registerDeepBindings(data); }\n    return vnode\n  } else {\n    return createEmptyVNode()\n  }\n}\n\nfunction applyNS (vnode, ns, force) {\n  vnode.ns = ns;\n  if (vnode.tag === 'foreignObject') {\n    // use default namespace inside foreignObject\n    ns = undefined;\n    force = true;\n  }\n  if (isDef(vnode.children)) {\n    for (var i = 0, l = vnode.children.length; i < l; i++) {\n      var child = vnode.children[i];\n      if (isDef(child.tag) && (\n        isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {\n        applyNS(child, ns, force);\n      }\n    }\n  }\n}\n\n// ref #5318\n// necessary to ensure parent re-render when deep bindings like :style and\n// :class are used on slot nodes\nfunction registerDeepBindings (data) {\n  if (isObject(data.style)) {\n    traverse(data.style);\n  }\n  if (isObject(data.class)) {\n    traverse(data.class);\n  }\n}\n\n/*  */\n\nfunction initRender (vm) {\n  vm._vnode = null; // the root of the child tree\n  vm._staticTrees = null; // v-once cached trees\n  var options = vm.$options;\n  var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree\n  var renderContext = parentVnode && parentVnode.context;\n  vm.$slots = resolveSlots(options._renderChildren, renderContext);\n  vm.$scopedSlots = emptyObject;\n  // bind the createElement fn to this instance\n  // so that we get proper render context inside it.\n  // args order: tag, data, children, normalizationType, alwaysNormalize\n  // internal version is used by render functions compiled from templates\n  vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };\n  // normalization is always applied for the public version, used in\n  // user-written render functions.\n  vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };\n\n  // $attrs & $listeners are exposed for easier HOC creation.\n  // they need to be reactive so that HOCs using them are always updated\n  var parentData = parentVnode && parentVnode.data;\n\n  /* istanbul ignore else */\n  if (process.env.NODE_ENV !== 'production') {\n    defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {\n      !isUpdatingChildComponent && warn(\"$attrs is readonly.\", vm);\n    }, true);\n    defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {\n      !isUpdatingChildComponent && warn(\"$listeners is readonly.\", vm);\n    }, true);\n  } else {\n    defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, null, true);\n    defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, null, true);\n  }\n}\n\nvar currentRenderingInstance = null;\n\nfunction renderMixin (Vue) {\n  // install runtime convenience helpers\n  installRenderHelpers(Vue.prototype);\n\n  Vue.prototype.$nextTick = function (fn) {\n    return nextTick(fn, this)\n  };\n\n  Vue.prototype._render = function () {\n    var vm = this;\n    var ref = vm.$options;\n    var render = ref.render;\n    var _parentVnode = ref._parentVnode;\n\n    if (_parentVnode) {\n      vm.$scopedSlots = normalizeScopedSlots(\n        _parentVnode.data.scopedSlots,\n        vm.$slots,\n        vm.$scopedSlots\n      );\n    }\n\n    // set parent vnode. this allows render functions to have access\n    // to the data on the placeholder node.\n    vm.$vnode = _parentVnode;\n    // render self\n    var vnode;\n    try {\n      // There's no need to maintain a stack becaues all render fns are called\n      // separately from one another. Nested component's render fns are called\n      // when parent component is patched.\n      currentRenderingInstance = vm;\n      vnode = render.call(vm._renderProxy, vm.$createElement);\n    } catch (e) {\n      handleError(e, vm, \"render\");\n      // return error render result,\n      // or previous vnode to prevent render error causing blank component\n      /* istanbul ignore else */\n      if (process.env.NODE_ENV !== 'production' && vm.$options.renderError) {\n        try {\n          vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);\n        } catch (e) {\n          handleError(e, vm, \"renderError\");\n          vnode = vm._vnode;\n        }\n      } else {\n        vnode = vm._vnode;\n      }\n    } finally {\n      currentRenderingInstance = null;\n    }\n    // if the returned array contains only a single node, allow it\n    if (Array.isArray(vnode) && vnode.length === 1) {\n      vnode = vnode[0];\n    }\n    // return empty vnode in case the render function errored out\n    if (!(vnode instanceof VNode)) {\n      if (process.env.NODE_ENV !== 'production' && Array.isArray(vnode)) {\n        warn(\n          'Multiple root nodes returned from render function. Render function ' +\n          'should return a single root node.',\n          vm\n        );\n      }\n      vnode = createEmptyVNode();\n    }\n    // set parent\n    vnode.parent = _parentVnode;\n    return vnode\n  };\n}\n\n/*  */\n\nfunction ensureCtor (comp, base) {\n  if (\n    comp.__esModule ||\n    (hasSymbol && comp[Symbol.toStringTag] === 'Module')\n  ) {\n    comp = comp.default;\n  }\n  return isObject(comp)\n    ? base.extend(comp)\n    : comp\n}\n\nfunction createAsyncPlaceholder (\n  factory,\n  data,\n  context,\n  children,\n  tag\n) {\n  var node = createEmptyVNode();\n  node.asyncFactory = factory;\n  node.asyncMeta = { data: data, context: context, children: children, tag: tag };\n  return node\n}\n\nfunction resolveAsyncComponent (\n  factory,\n  baseCtor\n) {\n  if (isTrue(factory.error) && isDef(factory.errorComp)) {\n    return factory.errorComp\n  }\n\n  if (isDef(factory.resolved)) {\n    return factory.resolved\n  }\n\n  var owner = currentRenderingInstance;\n  if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {\n    // already pending\n    factory.owners.push(owner);\n  }\n\n  if (isTrue(factory.loading) && isDef(factory.loadingComp)) {\n    return factory.loadingComp\n  }\n\n  if (owner && !isDef(factory.owners)) {\n    var owners = factory.owners = [owner];\n    var sync = true;\n    var timerLoading = null;\n    var timerTimeout = null\n\n    ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });\n\n    var forceRender = function (renderCompleted) {\n      for (var i = 0, l = owners.length; i < l; i++) {\n        (owners[i]).$forceUpdate();\n      }\n\n      if (renderCompleted) {\n        owners.length = 0;\n        if (timerLoading !== null) {\n          clearTimeout(timerLoading);\n          timerLoading = null;\n        }\n        if (timerTimeout !== null) {\n          clearTimeout(timerTimeout);\n          timerTimeout = null;\n        }\n      }\n    };\n\n    var resolve = once(function (res) {\n      // cache resolved\n      factory.resolved = ensureCtor(res, baseCtor);\n      // invoke callbacks only if this is not a synchronous resolve\n      // (async resolves are shimmed as synchronous during SSR)\n      if (!sync) {\n        forceRender(true);\n      } else {\n        owners.length = 0;\n      }\n    });\n\n    var reject = once(function (reason) {\n      process.env.NODE_ENV !== 'production' && warn(\n        \"Failed to resolve async component: \" + (String(factory)) +\n        (reason ? (\"\\nReason: \" + reason) : '')\n      );\n      if (isDef(factory.errorComp)) {\n        factory.error = true;\n        forceRender(true);\n      }\n    });\n\n    var res = factory(resolve, reject);\n\n    if (isObject(res)) {\n      if (isPromise(res)) {\n        // () => Promise\n        if (isUndef(factory.resolved)) {\n          res.then(resolve, reject);\n        }\n      } else if (isPromise(res.component)) {\n        res.component.then(resolve, reject);\n\n        if (isDef(res.error)) {\n          factory.errorComp = ensureCtor(res.error, baseCtor);\n        }\n\n        if (isDef(res.loading)) {\n          factory.loadingComp = ensureCtor(res.loading, baseCtor);\n          if (res.delay === 0) {\n            factory.loading = true;\n          } else {\n            timerLoading = setTimeout(function () {\n              timerLoading = null;\n              if (isUndef(factory.resolved) && isUndef(factory.error)) {\n                factory.loading = true;\n                forceRender(false);\n              }\n            }, res.delay || 200);\n          }\n        }\n\n        if (isDef(res.timeout)) {\n          timerTimeout = setTimeout(function () {\n            timerTimeout = null;\n            if (isUndef(factory.resolved)) {\n              reject(\n                process.env.NODE_ENV !== 'production'\n                  ? (\"timeout (\" + (res.timeout) + \"ms)\")\n                  : null\n              );\n            }\n          }, res.timeout);\n        }\n      }\n    }\n\n    sync = false;\n    // return in case resolved synchronously\n    return factory.loading\n      ? factory.loadingComp\n      : factory.resolved\n  }\n}\n\n/*  */\n\nfunction isAsyncPlaceholder (node) {\n  return node.isComment && node.asyncFactory\n}\n\n/*  */\n\nfunction getFirstComponentChild (children) {\n  if (Array.isArray(children)) {\n    for (var i = 0; i < children.length; i++) {\n      var c = children[i];\n      if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {\n        return c\n      }\n    }\n  }\n}\n\n/*  */\n\n/*  */\n\nfunction initEvents (vm) {\n  vm._events = Object.create(null);\n  vm._hasHookEvent = false;\n  // init parent attached events\n  var listeners = vm.$options._parentListeners;\n  if (listeners) {\n    updateComponentListeners(vm, listeners);\n  }\n}\n\nvar target;\n\nfunction add (event, fn) {\n  target.$on(event, fn);\n}\n\nfunction remove$1 (event, fn) {\n  target.$off(event, fn);\n}\n\nfunction createOnceHandler (event, fn) {\n  var _target = target;\n  return function onceHandler () {\n    var res = fn.apply(null, arguments);\n    if (res !== null) {\n      _target.$off(event, onceHandler);\n    }\n  }\n}\n\nfunction updateComponentListeners (\n  vm,\n  listeners,\n  oldListeners\n) {\n  target = vm;\n  updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);\n  target = undefined;\n}\n\nfunction eventsMixin (Vue) {\n  var hookRE = /^hook:/;\n  Vue.prototype.$on = function (event, fn) {\n    var vm = this;\n    if (Array.isArray(event)) {\n      for (var i = 0, l = event.length; i < l; i++) {\n        vm.$on(event[i], fn);\n      }\n    } else {\n      (vm._events[event] || (vm._events[event] = [])).push(fn);\n      // optimize hook:event cost by using a boolean flag marked at registration\n      // instead of a hash lookup\n      if (hookRE.test(event)) {\n        vm._hasHookEvent = true;\n      }\n    }\n    return vm\n  };\n\n  Vue.prototype.$once = function (event, fn) {\n    var vm = this;\n    function on () {\n      vm.$off(event, on);\n      fn.apply(vm, arguments);\n    }\n    on.fn = fn;\n    vm.$on(event, on);\n    return vm\n  };\n\n  Vue.prototype.$off = function (event, fn) {\n    var vm = this;\n    // all\n    if (!arguments.length) {\n      vm._events = Object.create(null);\n      return vm\n    }\n    // array of events\n    if (Array.isArray(event)) {\n      for (var i$1 = 0, l = event.length; i$1 < l; i$1++) {\n        vm.$off(event[i$1], fn);\n      }\n      return vm\n    }\n    // specific event\n    var cbs = vm._events[event];\n    if (!cbs) {\n      return vm\n    }\n    if (!fn) {\n      vm._events[event] = null;\n      return vm\n    }\n    // specific handler\n    var cb;\n    var i = cbs.length;\n    while (i--) {\n      cb = cbs[i];\n      if (cb === fn || cb.fn === fn) {\n        cbs.splice(i, 1);\n        break\n      }\n    }\n    return vm\n  };\n\n  Vue.prototype.$emit = function (event) {\n    var vm = this;\n    if (process.env.NODE_ENV !== 'production') {\n      var lowerCaseEvent = event.toLowerCase();\n      if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {\n        tip(\n          \"Event \\\"\" + lowerCaseEvent + \"\\\" is emitted in component \" +\n          (formatComponentName(vm)) + \" but the handler is registered for \\\"\" + event + \"\\\". \" +\n          \"Note that HTML attributes are case-insensitive and you cannot use \" +\n          \"v-on to listen to camelCase events when using in-DOM templates. \" +\n          \"You should probably use \\\"\" + (hyphenate(event)) + \"\\\" instead of \\\"\" + event + \"\\\".\"\n        );\n      }\n    }\n    var cbs = vm._events[event];\n    if (cbs) {\n      cbs = cbs.length > 1 ? toArray(cbs) : cbs;\n      var args = toArray(arguments, 1);\n      var info = \"event handler for \\\"\" + event + \"\\\"\";\n      for (var i = 0, l = cbs.length; i < l; i++) {\n        invokeWithErrorHandling(cbs[i], vm, args, vm, info);\n      }\n    }\n    return vm\n  };\n}\n\n/*  */\n\nvar activeInstance = null;\nvar isUpdatingChildComponent = false;\n\nfunction setActiveInstance(vm) {\n  var prevActiveInstance = activeInstance;\n  activeInstance = vm;\n  return function () {\n    activeInstance = prevActiveInstance;\n  }\n}\n\nfunction initLifecycle (vm) {\n  var options = vm.$options;\n\n  // locate first non-abstract parent\n  var parent = options.parent;\n  if (parent && !options.abstract) {\n    while (parent.$options.abstract && parent.$parent) {\n      parent = parent.$parent;\n    }\n    parent.$children.push(vm);\n  }\n\n  vm.$parent = parent;\n  vm.$root = parent ? parent.$root : vm;\n\n  vm.$children = [];\n  vm.$refs = {};\n\n  vm._watcher = null;\n  vm._inactive = null;\n  vm._directInactive = false;\n  vm._isMounted = false;\n  vm._isDestroyed = false;\n  vm._isBeingDestroyed = false;\n}\n\nfunction lifecycleMixin (Vue) {\n  Vue.prototype._update = function (vnode, hydrating) {\n    var vm = this;\n    var prevEl = vm.$el;\n    var prevVnode = vm._vnode;\n    var restoreActiveInstance = setActiveInstance(vm);\n    vm._vnode = vnode;\n    // Vue.prototype.__patch__ is injected in entry points\n    // based on the rendering backend used.\n    if (!prevVnode) {\n      // initial render\n      vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);\n    } else {\n      // updates\n      vm.$el = vm.__patch__(prevVnode, vnode);\n    }\n    restoreActiveInstance();\n    // update __vue__ reference\n    if (prevEl) {\n      prevEl.__vue__ = null;\n    }\n    if (vm.$el) {\n      vm.$el.__vue__ = vm;\n    }\n    // if parent is an HOC, update its $el as well\n    if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {\n      vm.$parent.$el = vm.$el;\n    }\n    // updated hook is called by the scheduler to ensure that children are\n    // updated in a parent's updated hook.\n  };\n\n  Vue.prototype.$forceUpdate = function () {\n    var vm = this;\n    if (vm._watcher) {\n      vm._watcher.update();\n    }\n  };\n\n  Vue.prototype.$destroy = function () {\n    var vm = this;\n    if (vm._isBeingDestroyed) {\n      return\n    }\n    callHook(vm, 'beforeDestroy');\n    vm._isBeingDestroyed = true;\n    // remove self from parent\n    var parent = vm.$parent;\n    if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {\n      remove(parent.$children, vm);\n    }\n    // teardown watchers\n    if (vm._watcher) {\n      vm._watcher.teardown();\n    }\n    var i = vm._watchers.length;\n    while (i--) {\n      vm._watchers[i].teardown();\n    }\n    // remove reference from data ob\n    // frozen object may not have observer.\n    if (vm._data.__ob__) {\n      vm._data.__ob__.vmCount--;\n    }\n    // call the last hook...\n    vm._isDestroyed = true;\n    // invoke destroy hooks on current rendered tree\n    vm.__patch__(vm._vnode, null);\n    // fire destroyed hook\n    callHook(vm, 'destroyed');\n    // turn off all instance listeners.\n    vm.$off();\n    // remove __vue__ reference\n    if (vm.$el) {\n      vm.$el.__vue__ = null;\n    }\n    // release circular reference (#6759)\n    if (vm.$vnode) {\n      vm.$vnode.parent = null;\n    }\n  };\n}\n\nfunction mountComponent (\n  vm,\n  el,\n  hydrating\n) {\n  vm.$el = el;\n  if (!vm.$options.render) {\n    vm.$options.render = createEmptyVNode;\n    if (process.env.NODE_ENV !== 'production') {\n      /* istanbul ignore if */\n      if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||\n        vm.$options.el || el) {\n        warn(\n          'You are using the runtime-only build of Vue where the template ' +\n          'compiler is not available. Either pre-compile the templates into ' +\n          'render functions, or use the compiler-included build.',\n          vm\n        );\n      } else {\n        warn(\n          'Failed to mount component: template or render function not defined.',\n          vm\n        );\n      }\n    }\n  }\n  callHook(vm, 'beforeMount');\n\n  var updateComponent;\n  /* istanbul ignore if */\n  if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n    updateComponent = function () {\n      var name = vm._name;\n      var id = vm._uid;\n      var startTag = \"vue-perf-start:\" + id;\n      var endTag = \"vue-perf-end:\" + id;\n\n      mark(startTag);\n      var vnode = vm._render();\n      mark(endTag);\n      measure((\"vue \" + name + \" render\"), startTag, endTag);\n\n      mark(startTag);\n      vm._update(vnode, hydrating);\n      mark(endTag);\n      measure((\"vue \" + name + \" patch\"), startTag, endTag);\n    };\n  } else {\n    updateComponent = function () {\n      vm._update(vm._render(), hydrating);\n    };\n  }\n\n  // we set this to vm._watcher inside the watcher's constructor\n  // since the watcher's initial patch may call $forceUpdate (e.g. inside child\n  // component's mounted hook), which relies on vm._watcher being already defined\n  new Watcher(vm, updateComponent, noop, {\n    before: function before () {\n      if (vm._isMounted && !vm._isDestroyed) {\n        callHook(vm, 'beforeUpdate');\n      }\n    }\n  }, true /* isRenderWatcher */);\n  hydrating = false;\n\n  // manually mounted instance, call mounted on self\n  // mounted is called for render-created child components in its inserted hook\n  if (vm.$vnode == null) {\n    vm._isMounted = true;\n    callHook(vm, 'mounted');\n  }\n  return vm\n}\n\nfunction updateChildComponent (\n  vm,\n  propsData,\n  listeners,\n  parentVnode,\n  renderChildren\n) {\n  if (process.env.NODE_ENV !== 'production') {\n    isUpdatingChildComponent = true;\n  }\n\n  // determine whether component has slot children\n  // we need to do this before overwriting $options._renderChildren.\n\n  // check if there are dynamic scopedSlots (hand-written or compiled but with\n  // dynamic slot names). Static scoped slots compiled from template has the\n  // \"$stable\" marker.\n  var newScopedSlots = parentVnode.data.scopedSlots;\n  var oldScopedSlots = vm.$scopedSlots;\n  var hasDynamicScopedSlot = !!(\n    (newScopedSlots && !newScopedSlots.$stable) ||\n    (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||\n    (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)\n  );\n\n  // Any static slot children from the parent may have changed during parent's\n  // update. Dynamic scoped slots may also have changed. In such cases, a forced\n  // update is necessary to ensure correctness.\n  var needsForceUpdate = !!(\n    renderChildren ||               // has new static slots\n    vm.$options._renderChildren ||  // has old static slots\n    hasDynamicScopedSlot\n  );\n\n  vm.$options._parentVnode = parentVnode;\n  vm.$vnode = parentVnode; // update vm's placeholder node without re-render\n\n  if (vm._vnode) { // update child tree's parent\n    vm._vnode.parent = parentVnode;\n  }\n  vm.$options._renderChildren = renderChildren;\n\n  // update $attrs and $listeners hash\n  // these are also reactive so they may trigger child update if the child\n  // used them during render\n  vm.$attrs = parentVnode.data.attrs || emptyObject;\n  vm.$listeners = listeners || emptyObject;\n\n  // update props\n  if (propsData && vm.$options.props) {\n    toggleObserving(false);\n    var props = vm._props;\n    var propKeys = vm.$options._propKeys || [];\n    for (var i = 0; i < propKeys.length; i++) {\n      var key = propKeys[i];\n      var propOptions = vm.$options.props; // wtf flow?\n      props[key] = validateProp(key, propOptions, propsData, vm);\n    }\n    toggleObserving(true);\n    // keep a copy of raw propsData\n    vm.$options.propsData = propsData;\n  }\n\n  // update listeners\n  listeners = listeners || emptyObject;\n  var oldListeners = vm.$options._parentListeners;\n  vm.$options._parentListeners = listeners;\n  updateComponentListeners(vm, listeners, oldListeners);\n\n  // resolve slots + force update if has children\n  if (needsForceUpdate) {\n    vm.$slots = resolveSlots(renderChildren, parentVnode.context);\n    vm.$forceUpdate();\n  }\n\n  if (process.env.NODE_ENV !== 'production') {\n    isUpdatingChildComponent = false;\n  }\n}\n\nfunction isInInactiveTree (vm) {\n  while (vm && (vm = vm.$parent)) {\n    if (vm._inactive) { return true }\n  }\n  return false\n}\n\nfunction activateChildComponent (vm, direct) {\n  if (direct) {\n    vm._directInactive = false;\n    if (isInInactiveTree(vm)) {\n      return\n    }\n  } else if (vm._directInactive) {\n    return\n  }\n  if (vm._inactive || vm._inactive === null) {\n    vm._inactive = false;\n    for (var i = 0; i < vm.$children.length; i++) {\n      activateChildComponent(vm.$children[i]);\n    }\n    callHook(vm, 'activated');\n  }\n}\n\nfunction deactivateChildComponent (vm, direct) {\n  if (direct) {\n    vm._directInactive = true;\n    if (isInInactiveTree(vm)) {\n      return\n    }\n  }\n  if (!vm._inactive) {\n    vm._inactive = true;\n    for (var i = 0; i < vm.$children.length; i++) {\n      deactivateChildComponent(vm.$children[i]);\n    }\n    callHook(vm, 'deactivated');\n  }\n}\n\nfunction callHook (vm, hook) {\n  // #7573 disable dep collection when invoking lifecycle hooks\n  pushTarget();\n  var handlers = vm.$options[hook];\n  var info = hook + \" hook\";\n  if (handlers) {\n    for (var i = 0, j = handlers.length; i < j; i++) {\n      invokeWithErrorHandling(handlers[i], vm, null, vm, info);\n    }\n  }\n  if (vm._hasHookEvent) {\n    vm.$emit('hook:' + hook);\n  }\n  popTarget();\n}\n\n/*  */\n\nvar MAX_UPDATE_COUNT = 100;\n\nvar queue = [];\nvar activatedChildren = [];\nvar has = {};\nvar circular = {};\nvar waiting = false;\nvar flushing = false;\nvar index = 0;\n\n/**\n * Reset the scheduler's state.\n */\nfunction resetSchedulerState () {\n  index = queue.length = activatedChildren.length = 0;\n  has = {};\n  if (process.env.NODE_ENV !== 'production') {\n    circular = {};\n  }\n  waiting = flushing = false;\n}\n\n// Async edge case #6566 requires saving the timestamp when event listeners are\n// attached. However, calling performance.now() has a perf overhead especially\n// if the page has thousands of event listeners. Instead, we take a timestamp\n// every time the scheduler flushes and use that for all event listeners\n// attached during that flush.\nvar currentFlushTimestamp = 0;\n\n// Async edge case fix requires storing an event listener's attach timestamp.\nvar getNow = Date.now;\n\n// Determine what event timestamp the browser is using. Annoyingly, the\n// timestamp can either be hi-res (relative to page load) or low-res\n// (relative to UNIX epoch), so in order to compare time we have to use the\n// same timestamp type when saving the flush timestamp.\n// All IE versions use low-res event timestamps, and have problematic clock\n// implementations (#9632)\nif (inBrowser && !isIE) {\n  var performance = window.performance;\n  if (\n    performance &&\n    typeof performance.now === 'function' &&\n    getNow() > document.createEvent('Event').timeStamp\n  ) {\n    // if the event timestamp, although evaluated AFTER the Date.now(), is\n    // smaller than it, it means the event is using a hi-res timestamp,\n    // and we need to use the hi-res version for event listener timestamps as\n    // well.\n    getNow = function () { return performance.now(); };\n  }\n}\n\n/**\n * Flush both queues and run the watchers.\n */\nfunction flushSchedulerQueue () {\n  currentFlushTimestamp = getNow();\n  flushing = true;\n  var watcher, id;\n\n  // Sort queue before flush.\n  // This ensures that:\n  // 1. Components are updated from parent to child. (because parent is always\n  //    created before the child)\n  // 2. A component's user watchers are run before its render watcher (because\n  //    user watchers are created before the render watcher)\n  // 3. If a component is destroyed during a parent component's watcher run,\n  //    its watchers can be skipped.\n  queue.sort(function (a, b) { return a.id - b.id; });\n\n  // do not cache length because more watchers might be pushed\n  // as we run existing watchers\n  for (index = 0; index < queue.length; index++) {\n    watcher = queue[index];\n    if (watcher.before) {\n      watcher.before();\n    }\n    id = watcher.id;\n    has[id] = null;\n    watcher.run();\n    // in dev build, check and stop circular updates.\n    if (process.env.NODE_ENV !== 'production' && has[id] != null) {\n      circular[id] = (circular[id] || 0) + 1;\n      if (circular[id] > MAX_UPDATE_COUNT) {\n        warn(\n          'You may have an infinite update loop ' + (\n            watcher.user\n              ? (\"in watcher with expression \\\"\" + (watcher.expression) + \"\\\"\")\n              : \"in a component render function.\"\n          ),\n          watcher.vm\n        );\n        break\n      }\n    }\n  }\n\n  // keep copies of post queues before resetting state\n  var activatedQueue = activatedChildren.slice();\n  var updatedQueue = queue.slice();\n\n  resetSchedulerState();\n\n  // call component updated and activated hooks\n  callActivatedHooks(activatedQueue);\n  callUpdatedHooks(updatedQueue);\n\n  // devtool hook\n  /* istanbul ignore if */\n  if (devtools && config.devtools) {\n    devtools.emit('flush');\n  }\n}\n\nfunction callUpdatedHooks (queue) {\n  var i = queue.length;\n  while (i--) {\n    var watcher = queue[i];\n    var vm = watcher.vm;\n    if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {\n      callHook(vm, 'updated');\n    }\n  }\n}\n\n/**\n * Queue a kept-alive component that was activated during patch.\n * The queue will be processed after the entire tree has been patched.\n */\nfunction queueActivatedComponent (vm) {\n  // setting _inactive to false here so that a render function can\n  // rely on checking whether it's in an inactive tree (e.g. router-view)\n  vm._inactive = false;\n  activatedChildren.push(vm);\n}\n\nfunction callActivatedHooks (queue) {\n  for (var i = 0; i < queue.length; i++) {\n    queue[i]._inactive = true;\n    activateChildComponent(queue[i], true /* true */);\n  }\n}\n\n/**\n * Push a watcher into the watcher queue.\n * Jobs with duplicate IDs will be skipped unless it's\n * pushed when the queue is being flushed.\n */\nfunction queueWatcher (watcher) {\n  var id = watcher.id;\n  if (has[id] == null) {\n    has[id] = true;\n    if (!flushing) {\n      queue.push(watcher);\n    } else {\n      // if already flushing, splice the watcher based on its id\n      // if already past its id, it will be run next immediately.\n      var i = queue.length - 1;\n      while (i > index && queue[i].id > watcher.id) {\n        i--;\n      }\n      queue.splice(i + 1, 0, watcher);\n    }\n    // queue the flush\n    if (!waiting) {\n      waiting = true;\n\n      if (process.env.NODE_ENV !== 'production' && !config.async) {\n        flushSchedulerQueue();\n        return\n      }\n      nextTick(flushSchedulerQueue);\n    }\n  }\n}\n\n/*  */\n\n\n\nvar uid$2 = 0;\n\n/**\n * A watcher parses an expression, collects dependencies,\n * and fires callback when the expression value changes.\n * This is used for both the $watch() api and directives.\n */\nvar Watcher = function Watcher (\n  vm,\n  expOrFn,\n  cb,\n  options,\n  isRenderWatcher\n) {\n  this.vm = vm;\n  if (isRenderWatcher) {\n    vm._watcher = this;\n  }\n  vm._watchers.push(this);\n  // options\n  if (options) {\n    this.deep = !!options.deep;\n    this.user = !!options.user;\n    this.lazy = !!options.lazy;\n    this.sync = !!options.sync;\n    this.before = options.before;\n  } else {\n    this.deep = this.user = this.lazy = this.sync = false;\n  }\n  this.cb = cb;\n  this.id = ++uid$2; // uid for batching\n  this.active = true;\n  this.dirty = this.lazy; // for lazy watchers\n  this.deps = [];\n  this.newDeps = [];\n  this.depIds = new _Set();\n  this.newDepIds = new _Set();\n  this.expression = process.env.NODE_ENV !== 'production'\n    ? expOrFn.toString()\n    : '';\n  // parse expression for getter\n  if (typeof expOrFn === 'function') {\n    this.getter = expOrFn;\n  } else {\n    this.getter = parsePath(expOrFn);\n    if (!this.getter) {\n      this.getter = noop;\n      process.env.NODE_ENV !== 'production' && warn(\n        \"Failed watching path: \\\"\" + expOrFn + \"\\\" \" +\n        'Watcher only accepts simple dot-delimited paths. ' +\n        'For full control, use a function instead.',\n        vm\n      );\n    }\n  }\n  this.value = this.lazy\n    ? undefined\n    : this.get();\n};\n\n/**\n * Evaluate the getter, and re-collect dependencies.\n */\nWatcher.prototype.get = function get () {\n  pushTarget(this);\n  var value;\n  var vm = this.vm;\n  try {\n    value = this.getter.call(vm, vm);\n  } catch (e) {\n    if (this.user) {\n      handleError(e, vm, (\"getter for watcher \\\"\" + (this.expression) + \"\\\"\"));\n    } else {\n      throw e\n    }\n  } finally {\n    // \"touch\" every property so they are all tracked as\n    // dependencies for deep watching\n    if (this.deep) {\n      traverse(value);\n    }\n    popTarget();\n    this.cleanupDeps();\n  }\n  return value\n};\n\n/**\n * Add a dependency to this directive.\n */\nWatcher.prototype.addDep = function addDep (dep) {\n  var id = dep.id;\n  if (!this.newDepIds.has(id)) {\n    this.newDepIds.add(id);\n    this.newDeps.push(dep);\n    if (!this.depIds.has(id)) {\n      dep.addSub(this);\n    }\n  }\n};\n\n/**\n * Clean up for dependency collection.\n */\nWatcher.prototype.cleanupDeps = function cleanupDeps () {\n  var i = this.deps.length;\n  while (i--) {\n    var dep = this.deps[i];\n    if (!this.newDepIds.has(dep.id)) {\n      dep.removeSub(this);\n    }\n  }\n  var tmp = this.depIds;\n  this.depIds = this.newDepIds;\n  this.newDepIds = tmp;\n  this.newDepIds.clear();\n  tmp = this.deps;\n  this.deps = this.newDeps;\n  this.newDeps = tmp;\n  this.newDeps.length = 0;\n};\n\n/**\n * Subscriber interface.\n * Will be called when a dependency changes.\n */\nWatcher.prototype.update = function update () {\n  /* istanbul ignore else */\n  if (this.lazy) {\n    this.dirty = true;\n  } else if (this.sync) {\n    this.run();\n  } else {\n    queueWatcher(this);\n  }\n};\n\n/**\n * Scheduler job interface.\n * Will be called by the scheduler.\n */\nWatcher.prototype.run = function run () {\n  if (this.active) {\n    var value = this.get();\n    if (\n      value !== this.value ||\n      // Deep watchers and watchers on Object/Arrays should fire even\n      // when the value is the same, because the value may\n      // have mutated.\n      isObject(value) ||\n      this.deep\n    ) {\n      // set new value\n      var oldValue = this.value;\n      this.value = value;\n      if (this.user) {\n        try {\n          this.cb.call(this.vm, value, oldValue);\n        } catch (e) {\n          handleError(e, this.vm, (\"callback for watcher \\\"\" + (this.expression) + \"\\\"\"));\n        }\n      } else {\n        this.cb.call(this.vm, value, oldValue);\n      }\n    }\n  }\n};\n\n/**\n * Evaluate the value of the watcher.\n * This only gets called for lazy watchers.\n */\nWatcher.prototype.evaluate = function evaluate () {\n  this.value = this.get();\n  this.dirty = false;\n};\n\n/**\n * Depend on all deps collected by this watcher.\n */\nWatcher.prototype.depend = function depend () {\n  var i = this.deps.length;\n  while (i--) {\n    this.deps[i].depend();\n  }\n};\n\n/**\n * Remove self from all dependencies' subscriber list.\n */\nWatcher.prototype.teardown = function teardown () {\n  if (this.active) {\n    // remove self from vm's watcher list\n    // this is a somewhat expensive operation so we skip it\n    // if the vm is being destroyed.\n    if (!this.vm._isBeingDestroyed) {\n      remove(this.vm._watchers, this);\n    }\n    var i = this.deps.length;\n    while (i--) {\n      this.deps[i].removeSub(this);\n    }\n    this.active = false;\n  }\n};\n\n/*  */\n\nvar sharedPropertyDefinition = {\n  enumerable: true,\n  configurable: true,\n  get: noop,\n  set: noop\n};\n\nfunction proxy (target, sourceKey, key) {\n  sharedPropertyDefinition.get = function proxyGetter () {\n    return this[sourceKey][key]\n  };\n  sharedPropertyDefinition.set = function proxySetter (val) {\n    this[sourceKey][key] = val;\n  };\n  Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction initState (vm) {\n  vm._watchers = [];\n  var opts = vm.$options;\n  if (opts.props) { initProps(vm, opts.props); }\n  if (opts.methods) { initMethods(vm, opts.methods); }\n  if (opts.data) {\n    initData(vm);\n  } else {\n    observe(vm._data = {}, true /* asRootData */);\n  }\n  if (opts.computed) { initComputed(vm, opts.computed); }\n  if (opts.watch && opts.watch !== nativeWatch) {\n    initWatch(vm, opts.watch);\n  }\n}\n\nfunction initProps (vm, propsOptions) {\n  var propsData = vm.$options.propsData || {};\n  var props = vm._props = {};\n  // cache prop keys so that future props updates can iterate using Array\n  // instead of dynamic object key enumeration.\n  var keys = vm.$options._propKeys = [];\n  var isRoot = !vm.$parent;\n  // root instance props should be converted\n  if (!isRoot) {\n    toggleObserving(false);\n  }\n  var loop = function ( key ) {\n    keys.push(key);\n    var value = validateProp(key, propsOptions, propsData, vm);\n    /* istanbul ignore else */\n    if (process.env.NODE_ENV !== 'production') {\n      var hyphenatedKey = hyphenate(key);\n      if (isReservedAttribute(hyphenatedKey) ||\n          config.isReservedAttr(hyphenatedKey)) {\n        warn(\n          (\"\\\"\" + hyphenatedKey + \"\\\" is a reserved attribute and cannot be used as component prop.\"),\n          vm\n        );\n      }\n      defineReactive$$1(props, key, value, function () {\n        if (!isRoot && !isUpdatingChildComponent) {\n          warn(\n            \"Avoid mutating a prop directly since the value will be \" +\n            \"overwritten whenever the parent component re-renders. \" +\n            \"Instead, use a data or computed property based on the prop's \" +\n            \"value. Prop being mutated: \\\"\" + key + \"\\\"\",\n            vm\n          );\n        }\n      });\n    } else {\n      defineReactive$$1(props, key, value);\n    }\n    // static props are already proxied on the component's prototype\n    // during Vue.extend(). We only need to proxy props defined at\n    // instantiation here.\n    if (!(key in vm)) {\n      proxy(vm, \"_props\", key);\n    }\n  };\n\n  for (var key in propsOptions) loop( key );\n  toggleObserving(true);\n}\n\nfunction initData (vm) {\n  var data = vm.$options.data;\n  data = vm._data = typeof data === 'function'\n    ? getData(data, vm)\n    : data || {};\n  if (!isPlainObject(data)) {\n    data = {};\n    process.env.NODE_ENV !== 'production' && warn(\n      'data functions should return an object:\\n' +\n      'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',\n      vm\n    );\n  }\n  // proxy data on instance\n  var keys = Object.keys(data);\n  var props = vm.$options.props;\n  var methods = vm.$options.methods;\n  var i = keys.length;\n  while (i--) {\n    var key = keys[i];\n    if (process.env.NODE_ENV !== 'production') {\n      if (methods && hasOwn(methods, key)) {\n        warn(\n          (\"Method \\\"\" + key + \"\\\" has already been defined as a data property.\"),\n          vm\n        );\n      }\n    }\n    if (props && hasOwn(props, key)) {\n      process.env.NODE_ENV !== 'production' && warn(\n        \"The data property \\\"\" + key + \"\\\" is already declared as a prop. \" +\n        \"Use prop default value instead.\",\n        vm\n      );\n    } else if (!isReserved(key)) {\n      proxy(vm, \"_data\", key);\n    }\n  }\n  // observe data\n  observe(data, true /* asRootData */);\n}\n\nfunction getData (data, vm) {\n  // #7573 disable dep collection when invoking data getters\n  pushTarget();\n  try {\n    return data.call(vm, vm)\n  } catch (e) {\n    handleError(e, vm, \"data()\");\n    return {}\n  } finally {\n    popTarget();\n  }\n}\n\nvar computedWatcherOptions = { lazy: true };\n\nfunction initComputed (vm, computed) {\n  // $flow-disable-line\n  var watchers = vm._computedWatchers = Object.create(null);\n  // computed properties are just getters during SSR\n  var isSSR = isServerRendering();\n\n  for (var key in computed) {\n    var userDef = computed[key];\n    var getter = typeof userDef === 'function' ? userDef : userDef.get;\n    if (process.env.NODE_ENV !== 'production' && getter == null) {\n      warn(\n        (\"Getter is missing for computed property \\\"\" + key + \"\\\".\"),\n        vm\n      );\n    }\n\n    if (!isSSR) {\n      // create internal watcher for the computed property.\n      watchers[key] = new Watcher(\n        vm,\n        getter || noop,\n        noop,\n        computedWatcherOptions\n      );\n    }\n\n    // component-defined computed properties are already defined on the\n    // component prototype. We only need to define computed properties defined\n    // at instantiation here.\n    if (!(key in vm)) {\n      defineComputed(vm, key, userDef);\n    } else if (process.env.NODE_ENV !== 'production') {\n      if (key in vm.$data) {\n        warn((\"The computed property \\\"\" + key + \"\\\" is already defined in data.\"), vm);\n      } else if (vm.$options.props && key in vm.$options.props) {\n        warn((\"The computed property \\\"\" + key + \"\\\" is already defined as a prop.\"), vm);\n      }\n    }\n  }\n}\n\nfunction defineComputed (\n  target,\n  key,\n  userDef\n) {\n  var shouldCache = !isServerRendering();\n  if (typeof userDef === 'function') {\n    sharedPropertyDefinition.get = shouldCache\n      ? createComputedGetter(key)\n      : createGetterInvoker(userDef);\n    sharedPropertyDefinition.set = noop;\n  } else {\n    sharedPropertyDefinition.get = userDef.get\n      ? shouldCache && userDef.cache !== false\n        ? createComputedGetter(key)\n        : createGetterInvoker(userDef.get)\n      : noop;\n    sharedPropertyDefinition.set = userDef.set || noop;\n  }\n  if (process.env.NODE_ENV !== 'production' &&\n      sharedPropertyDefinition.set === noop) {\n    sharedPropertyDefinition.set = function () {\n      warn(\n        (\"Computed property \\\"\" + key + \"\\\" was assigned to but it has no setter.\"),\n        this\n      );\n    };\n  }\n  Object.defineProperty(target, key, sharedPropertyDefinition);\n}\n\nfunction createComputedGetter (key) {\n  return function computedGetter () {\n    var watcher = this._computedWatchers && this._computedWatchers[key];\n    if (watcher) {\n      if (watcher.dirty) {\n        watcher.evaluate();\n      }\n      if (Dep.target) {\n        watcher.depend();\n      }\n      return watcher.value\n    }\n  }\n}\n\nfunction createGetterInvoker(fn) {\n  return function computedGetter () {\n    return fn.call(this, this)\n  }\n}\n\nfunction initMethods (vm, methods) {\n  var props = vm.$options.props;\n  for (var key in methods) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (typeof methods[key] !== 'function') {\n        warn(\n          \"Method \\\"\" + key + \"\\\" has type \\\"\" + (typeof methods[key]) + \"\\\" in the component definition. \" +\n          \"Did you reference the function correctly?\",\n          vm\n        );\n      }\n      if (props && hasOwn(props, key)) {\n        warn(\n          (\"Method \\\"\" + key + \"\\\" has already been defined as a prop.\"),\n          vm\n        );\n      }\n      if ((key in vm) && isReserved(key)) {\n        warn(\n          \"Method \\\"\" + key + \"\\\" conflicts with an existing Vue instance method. \" +\n          \"Avoid defining component methods that start with _ or $.\"\n        );\n      }\n    }\n    vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);\n  }\n}\n\nfunction initWatch (vm, watch) {\n  for (var key in watch) {\n    var handler = watch[key];\n    if (Array.isArray(handler)) {\n      for (var i = 0; i < handler.length; i++) {\n        createWatcher(vm, key, handler[i]);\n      }\n    } else {\n      createWatcher(vm, key, handler);\n    }\n  }\n}\n\nfunction createWatcher (\n  vm,\n  expOrFn,\n  handler,\n  options\n) {\n  if (isPlainObject(handler)) {\n    options = handler;\n    handler = handler.handler;\n  }\n  if (typeof handler === 'string') {\n    handler = vm[handler];\n  }\n  return vm.$watch(expOrFn, handler, options)\n}\n\nfunction stateMixin (Vue) {\n  // flow somehow has problems with directly declared definition object\n  // when using Object.defineProperty, so we have to procedurally build up\n  // the object here.\n  var dataDef = {};\n  dataDef.get = function () { return this._data };\n  var propsDef = {};\n  propsDef.get = function () { return this._props };\n  if (process.env.NODE_ENV !== 'production') {\n    dataDef.set = function () {\n      warn(\n        'Avoid replacing instance root $data. ' +\n        'Use nested data properties instead.',\n        this\n      );\n    };\n    propsDef.set = function () {\n      warn(\"$props is readonly.\", this);\n    };\n  }\n  Object.defineProperty(Vue.prototype, '$data', dataDef);\n  Object.defineProperty(Vue.prototype, '$props', propsDef);\n\n  Vue.prototype.$set = set;\n  Vue.prototype.$delete = del;\n\n  Vue.prototype.$watch = function (\n    expOrFn,\n    cb,\n    options\n  ) {\n    var vm = this;\n    if (isPlainObject(cb)) {\n      return createWatcher(vm, expOrFn, cb, options)\n    }\n    options = options || {};\n    options.user = true;\n    var watcher = new Watcher(vm, expOrFn, cb, options);\n    if (options.immediate) {\n      try {\n        cb.call(vm, watcher.value);\n      } catch (error) {\n        handleError(error, vm, (\"callback for immediate watcher \\\"\" + (watcher.expression) + \"\\\"\"));\n      }\n    }\n    return function unwatchFn () {\n      watcher.teardown();\n    }\n  };\n}\n\n/*  */\n\nvar uid$3 = 0;\n\nfunction initMixin (Vue) {\n  Vue.prototype._init = function (options) {\n    var vm = this;\n    // a uid\n    vm._uid = uid$3++;\n\n    var startTag, endTag;\n    /* istanbul ignore if */\n    if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n      startTag = \"vue-perf-start:\" + (vm._uid);\n      endTag = \"vue-perf-end:\" + (vm._uid);\n      mark(startTag);\n    }\n\n    // a flag to avoid this being observed\n    vm._isVue = true;\n    // merge options\n    if (options && options._isComponent) {\n      // optimize internal component instantiation\n      // since dynamic options merging is pretty slow, and none of the\n      // internal component options needs special treatment.\n      initInternalComponent(vm, options);\n    } else {\n      vm.$options = mergeOptions(\n        resolveConstructorOptions(vm.constructor),\n        options || {},\n        vm\n      );\n    }\n    /* istanbul ignore else */\n    if (process.env.NODE_ENV !== 'production') {\n      initProxy(vm);\n    } else {\n      vm._renderProxy = vm;\n    }\n    // expose real self\n    vm._self = vm;\n    initLifecycle(vm);\n    initEvents(vm);\n    initRender(vm);\n    callHook(vm, 'beforeCreate');\n    initInjections(vm); // resolve injections before data/props\n    initState(vm);\n    initProvide(vm); // resolve provide after data/props\n    callHook(vm, 'created');\n\n    /* istanbul ignore if */\n    if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n      vm._name = formatComponentName(vm, false);\n      mark(endTag);\n      measure((\"vue \" + (vm._name) + \" init\"), startTag, endTag);\n    }\n\n    if (vm.$options.el) {\n      vm.$mount(vm.$options.el);\n    }\n  };\n}\n\nfunction initInternalComponent (vm, options) {\n  var opts = vm.$options = Object.create(vm.constructor.options);\n  // doing this because it's faster than dynamic enumeration.\n  var parentVnode = options._parentVnode;\n  opts.parent = options.parent;\n  opts._parentVnode = parentVnode;\n\n  var vnodeComponentOptions = parentVnode.componentOptions;\n  opts.propsData = vnodeComponentOptions.propsData;\n  opts._parentListeners = vnodeComponentOptions.listeners;\n  opts._renderChildren = vnodeComponentOptions.children;\n  opts._componentTag = vnodeComponentOptions.tag;\n\n  if (options.render) {\n    opts.render = options.render;\n    opts.staticRenderFns = options.staticRenderFns;\n  }\n}\n\nfunction resolveConstructorOptions (Ctor) {\n  var options = Ctor.options;\n  if (Ctor.super) {\n    var superOptions = resolveConstructorOptions(Ctor.super);\n    var cachedSuperOptions = Ctor.superOptions;\n    if (superOptions !== cachedSuperOptions) {\n      // super option changed,\n      // need to resolve new options.\n      Ctor.superOptions = superOptions;\n      // check if there are any late-modified/attached options (#4976)\n      var modifiedOptions = resolveModifiedOptions(Ctor);\n      // update base extend options\n      if (modifiedOptions) {\n        extend(Ctor.extendOptions, modifiedOptions);\n      }\n      options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);\n      if (options.name) {\n        options.components[options.name] = Ctor;\n      }\n    }\n  }\n  return options\n}\n\nfunction resolveModifiedOptions (Ctor) {\n  var modified;\n  var latest = Ctor.options;\n  var sealed = Ctor.sealedOptions;\n  for (var key in latest) {\n    if (latest[key] !== sealed[key]) {\n      if (!modified) { modified = {}; }\n      modified[key] = latest[key];\n    }\n  }\n  return modified\n}\n\nfunction Vue (options) {\n  if (process.env.NODE_ENV !== 'production' &&\n    !(this instanceof Vue)\n  ) {\n    warn('Vue is a constructor and should be called with the `new` keyword');\n  }\n  this._init(options);\n}\n\ninitMixin(Vue);\nstateMixin(Vue);\neventsMixin(Vue);\nlifecycleMixin(Vue);\nrenderMixin(Vue);\n\n/*  */\n\nfunction initUse (Vue) {\n  Vue.use = function (plugin) {\n    var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));\n    if (installedPlugins.indexOf(plugin) > -1) {\n      return this\n    }\n\n    // additional parameters\n    var args = toArray(arguments, 1);\n    args.unshift(this);\n    if (typeof plugin.install === 'function') {\n      plugin.install.apply(plugin, args);\n    } else if (typeof plugin === 'function') {\n      plugin.apply(null, args);\n    }\n    installedPlugins.push(plugin);\n    return this\n  };\n}\n\n/*  */\n\nfunction initMixin$1 (Vue) {\n  Vue.mixin = function (mixin) {\n    this.options = mergeOptions(this.options, mixin);\n    return this\n  };\n}\n\n/*  */\n\nfunction initExtend (Vue) {\n  /**\n   * Each instance constructor, including Vue, has a unique\n   * cid. This enables us to create wrapped \"child\n   * constructors\" for prototypal inheritance and cache them.\n   */\n  Vue.cid = 0;\n  var cid = 1;\n\n  /**\n   * Class inheritance\n   */\n  Vue.extend = function (extendOptions) {\n    extendOptions = extendOptions || {};\n    var Super = this;\n    var SuperId = Super.cid;\n    var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});\n    if (cachedCtors[SuperId]) {\n      return cachedCtors[SuperId]\n    }\n\n    var name = extendOptions.name || Super.options.name;\n    if (process.env.NODE_ENV !== 'production' && name) {\n      validateComponentName(name);\n    }\n\n    var Sub = function VueComponent (options) {\n      this._init(options);\n    };\n    Sub.prototype = Object.create(Super.prototype);\n    Sub.prototype.constructor = Sub;\n    Sub.cid = cid++;\n    Sub.options = mergeOptions(\n      Super.options,\n      extendOptions\n    );\n    Sub['super'] = Super;\n\n    // For props and computed properties, we define the proxy getters on\n    // the Vue instances at extension time, on the extended prototype. This\n    // avoids Object.defineProperty calls for each instance created.\n    if (Sub.options.props) {\n      initProps$1(Sub);\n    }\n    if (Sub.options.computed) {\n      initComputed$1(Sub);\n    }\n\n    // allow further extension/mixin/plugin usage\n    Sub.extend = Super.extend;\n    Sub.mixin = Super.mixin;\n    Sub.use = Super.use;\n\n    // create asset registers, so extended classes\n    // can have their private assets too.\n    ASSET_TYPES.forEach(function (type) {\n      Sub[type] = Super[type];\n    });\n    // enable recursive self-lookup\n    if (name) {\n      Sub.options.components[name] = Sub;\n    }\n\n    // keep a reference to the super options at extension time.\n    // later at instantiation we can check if Super's options have\n    // been updated.\n    Sub.superOptions = Super.options;\n    Sub.extendOptions = extendOptions;\n    Sub.sealedOptions = extend({}, Sub.options);\n\n    // cache constructor\n    cachedCtors[SuperId] = Sub;\n    return Sub\n  };\n}\n\nfunction initProps$1 (Comp) {\n  var props = Comp.options.props;\n  for (var key in props) {\n    proxy(Comp.prototype, \"_props\", key);\n  }\n}\n\nfunction initComputed$1 (Comp) {\n  var computed = Comp.options.computed;\n  for (var key in computed) {\n    defineComputed(Comp.prototype, key, computed[key]);\n  }\n}\n\n/*  */\n\nfunction initAssetRegisters (Vue) {\n  /**\n   * Create asset registration methods.\n   */\n  ASSET_TYPES.forEach(function (type) {\n    Vue[type] = function (\n      id,\n      definition\n    ) {\n      if (!definition) {\n        return this.options[type + 's'][id]\n      } else {\n        /* istanbul ignore if */\n        if (process.env.NODE_ENV !== 'production' && type === 'component') {\n          validateComponentName(id);\n        }\n        if (type === 'component' && isPlainObject(definition)) {\n          definition.name = definition.name || id;\n          definition = this.options._base.extend(definition);\n        }\n        if (type === 'directive' && typeof definition === 'function') {\n          definition = { bind: definition, update: definition };\n        }\n        this.options[type + 's'][id] = definition;\n        return definition\n      }\n    };\n  });\n}\n\n/*  */\n\n\n\nfunction getComponentName (opts) {\n  return opts && (opts.Ctor.options.name || opts.tag)\n}\n\nfunction matches (pattern, name) {\n  if (Array.isArray(pattern)) {\n    return pattern.indexOf(name) > -1\n  } else if (typeof pattern === 'string') {\n    return pattern.split(',').indexOf(name) > -1\n  } else if (isRegExp(pattern)) {\n    return pattern.test(name)\n  }\n  /* istanbul ignore next */\n  return false\n}\n\nfunction pruneCache (keepAliveInstance, filter) {\n  var cache = keepAliveInstance.cache;\n  var keys = keepAliveInstance.keys;\n  var _vnode = keepAliveInstance._vnode;\n  for (var key in cache) {\n    var cachedNode = cache[key];\n    if (cachedNode) {\n      var name = getComponentName(cachedNode.componentOptions);\n      if (name && !filter(name)) {\n        pruneCacheEntry(cache, key, keys, _vnode);\n      }\n    }\n  }\n}\n\nfunction pruneCacheEntry (\n  cache,\n  key,\n  keys,\n  current\n) {\n  var cached$$1 = cache[key];\n  if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {\n    cached$$1.componentInstance.$destroy();\n  }\n  cache[key] = null;\n  remove(keys, key);\n}\n\nvar patternTypes = [String, RegExp, Array];\n\nvar KeepAlive = {\n  name: 'keep-alive',\n  abstract: true,\n\n  props: {\n    include: patternTypes,\n    exclude: patternTypes,\n    max: [String, Number]\n  },\n\n  created: function created () {\n    this.cache = Object.create(null);\n    this.keys = [];\n  },\n\n  destroyed: function destroyed () {\n    for (var key in this.cache) {\n      pruneCacheEntry(this.cache, key, this.keys);\n    }\n  },\n\n  mounted: function mounted () {\n    var this$1 = this;\n\n    this.$watch('include', function (val) {\n      pruneCache(this$1, function (name) { return matches(val, name); });\n    });\n    this.$watch('exclude', function (val) {\n      pruneCache(this$1, function (name) { return !matches(val, name); });\n    });\n  },\n\n  render: function render () {\n    var slot = this.$slots.default;\n    var vnode = getFirstComponentChild(slot);\n    var componentOptions = vnode && vnode.componentOptions;\n    if (componentOptions) {\n      // check pattern\n      var name = getComponentName(componentOptions);\n      var ref = this;\n      var include = ref.include;\n      var exclude = ref.exclude;\n      if (\n        // not included\n        (include && (!name || !matches(include, name))) ||\n        // excluded\n        (exclude && name && matches(exclude, name))\n      ) {\n        return vnode\n      }\n\n      var ref$1 = this;\n      var cache = ref$1.cache;\n      var keys = ref$1.keys;\n      var key = vnode.key == null\n        // same constructor may get registered as different local components\n        // so cid alone is not enough (#3269)\n        ? componentOptions.Ctor.cid + (componentOptions.tag ? (\"::\" + (componentOptions.tag)) : '')\n        : vnode.key;\n      if (cache[key]) {\n        vnode.componentInstance = cache[key].componentInstance;\n        // make current key freshest\n        remove(keys, key);\n        keys.push(key);\n      } else {\n        cache[key] = vnode;\n        keys.push(key);\n        // prune oldest entry\n        if (this.max && keys.length > parseInt(this.max)) {\n          pruneCacheEntry(cache, keys[0], keys, this._vnode);\n        }\n      }\n\n      vnode.data.keepAlive = true;\n    }\n    return vnode || (slot && slot[0])\n  }\n};\n\nvar builtInComponents = {\n  KeepAlive: KeepAlive\n};\n\n/*  */\n\nfunction initGlobalAPI (Vue) {\n  // config\n  var configDef = {};\n  configDef.get = function () { return config; };\n  if (process.env.NODE_ENV !== 'production') {\n    configDef.set = function () {\n      warn(\n        'Do not replace the Vue.config object, set individual fields instead.'\n      );\n    };\n  }\n  Object.defineProperty(Vue, 'config', configDef);\n\n  // exposed util methods.\n  // NOTE: these are not considered part of the public API - avoid relying on\n  // them unless you are aware of the risk.\n  Vue.util = {\n    warn: warn,\n    extend: extend,\n    mergeOptions: mergeOptions,\n    defineReactive: defineReactive$$1\n  };\n\n  Vue.set = set;\n  Vue.delete = del;\n  Vue.nextTick = nextTick;\n\n  // 2.6 explicit observable API\n  Vue.observable = function (obj) {\n    observe(obj);\n    return obj\n  };\n\n  Vue.options = Object.create(null);\n  ASSET_TYPES.forEach(function (type) {\n    Vue.options[type + 's'] = Object.create(null);\n  });\n\n  // this is used to identify the \"base\" constructor to extend all plain-object\n  // components with in Weex's multi-instance scenarios.\n  Vue.options._base = Vue;\n\n  extend(Vue.options.components, builtInComponents);\n\n  initUse(Vue);\n  initMixin$1(Vue);\n  initExtend(Vue);\n  initAssetRegisters(Vue);\n}\n\ninitGlobalAPI(Vue);\n\nObject.defineProperty(Vue.prototype, '$isServer', {\n  get: isServerRendering\n});\n\nObject.defineProperty(Vue.prototype, '$ssrContext', {\n  get: function get () {\n    /* istanbul ignore next */\n    return this.$vnode && this.$vnode.ssrContext\n  }\n});\n\n// expose FunctionalRenderContext for ssr runtime helper installation\nObject.defineProperty(Vue, 'FunctionalRenderContext', {\n  value: FunctionalRenderContext\n});\n\nVue.version = '2.6.10';\n\n/*  */\n\n// these are reserved for web because they are directly compiled away\n// during template compilation\nvar isReservedAttr = makeMap('style,class');\n\n// attributes that should be using props for binding\nvar acceptValue = makeMap('input,textarea,option,select,progress');\nvar mustUseProp = function (tag, type, attr) {\n  return (\n    (attr === 'value' && acceptValue(tag)) && type !== 'button' ||\n    (attr === 'selected' && tag === 'option') ||\n    (attr === 'checked' && tag === 'input') ||\n    (attr === 'muted' && tag === 'video')\n  )\n};\n\nvar isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');\n\nvar isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');\n\nvar convertEnumeratedValue = function (key, value) {\n  return isFalsyAttrValue(value) || value === 'false'\n    ? 'false'\n    // allow arbitrary string value for contenteditable\n    : key === 'contenteditable' && isValidContentEditableValue(value)\n      ? value\n      : 'true'\n};\n\nvar isBooleanAttr = makeMap(\n  'allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +\n  'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +\n  'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +\n  'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +\n  'required,reversed,scoped,seamless,selected,sortable,translate,' +\n  'truespeed,typemustmatch,visible'\n);\n\nvar xlinkNS = 'http://www.w3.org/1999/xlink';\n\nvar isXlink = function (name) {\n  return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink'\n};\n\nvar getXlinkProp = function (name) {\n  return isXlink(name) ? name.slice(6, name.length) : ''\n};\n\nvar isFalsyAttrValue = function (val) {\n  return val == null || val === false\n};\n\n/*  */\n\nfunction genClassForVnode (vnode) {\n  var data = vnode.data;\n  var parentNode = vnode;\n  var childNode = vnode;\n  while (isDef(childNode.componentInstance)) {\n    childNode = childNode.componentInstance._vnode;\n    if (childNode && childNode.data) {\n      data = mergeClassData(childNode.data, data);\n    }\n  }\n  while (isDef(parentNode = parentNode.parent)) {\n    if (parentNode && parentNode.data) {\n      data = mergeClassData(data, parentNode.data);\n    }\n  }\n  return renderClass(data.staticClass, data.class)\n}\n\nfunction mergeClassData (child, parent) {\n  return {\n    staticClass: concat(child.staticClass, parent.staticClass),\n    class: isDef(child.class)\n      ? [child.class, parent.class]\n      : parent.class\n  }\n}\n\nfunction renderClass (\n  staticClass,\n  dynamicClass\n) {\n  if (isDef(staticClass) || isDef(dynamicClass)) {\n    return concat(staticClass, stringifyClass(dynamicClass))\n  }\n  /* istanbul ignore next */\n  return ''\n}\n\nfunction concat (a, b) {\n  return a ? b ? (a + ' ' + b) : a : (b || '')\n}\n\nfunction stringifyClass (value) {\n  if (Array.isArray(value)) {\n    return stringifyArray(value)\n  }\n  if (isObject(value)) {\n    return stringifyObject(value)\n  }\n  if (typeof value === 'string') {\n    return value\n  }\n  /* istanbul ignore next */\n  return ''\n}\n\nfunction stringifyArray (value) {\n  var res = '';\n  var stringified;\n  for (var i = 0, l = value.length; i < l; i++) {\n    if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {\n      if (res) { res += ' '; }\n      res += stringified;\n    }\n  }\n  return res\n}\n\nfunction stringifyObject (value) {\n  var res = '';\n  for (var key in value) {\n    if (value[key]) {\n      if (res) { res += ' '; }\n      res += key;\n    }\n  }\n  return res\n}\n\n/*  */\n\nvar namespaceMap = {\n  svg: 'http://www.w3.org/2000/svg',\n  math: 'http://www.w3.org/1998/Math/MathML'\n};\n\nvar isHTMLTag = makeMap(\n  'html,body,base,head,link,meta,style,title,' +\n  'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +\n  'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +\n  'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +\n  's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +\n  'embed,object,param,source,canvas,script,noscript,del,ins,' +\n  'caption,col,colgroup,table,thead,tbody,td,th,tr,' +\n  'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +\n  'output,progress,select,textarea,' +\n  'details,dialog,menu,menuitem,summary,' +\n  'content,element,shadow,template,blockquote,iframe,tfoot'\n);\n\n// this map is intentionally selective, only covering SVG elements that may\n// contain child elements.\nvar isSVG = makeMap(\n  'svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +\n  'foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +\n  'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view',\n  true\n);\n\nvar isPreTag = function (tag) { return tag === 'pre'; };\n\nvar isReservedTag = function (tag) {\n  return isHTMLTag(tag) || isSVG(tag)\n};\n\nfunction getTagNamespace (tag) {\n  if (isSVG(tag)) {\n    return 'svg'\n  }\n  // basic support for MathML\n  // note it doesn't support other MathML elements being component roots\n  if (tag === 'math') {\n    return 'math'\n  }\n}\n\nvar unknownElementCache = Object.create(null);\nfunction isUnknownElement (tag) {\n  /* istanbul ignore if */\n  if (!inBrowser) {\n    return true\n  }\n  if (isReservedTag(tag)) {\n    return false\n  }\n  tag = tag.toLowerCase();\n  /* istanbul ignore if */\n  if (unknownElementCache[tag] != null) {\n    return unknownElementCache[tag]\n  }\n  var el = document.createElement(tag);\n  if (tag.indexOf('-') > -1) {\n    // http://stackoverflow.com/a/28210364/1070244\n    return (unknownElementCache[tag] = (\n      el.constructor === window.HTMLUnknownElement ||\n      el.constructor === window.HTMLElement\n    ))\n  } else {\n    return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()))\n  }\n}\n\nvar isTextInputType = makeMap('text,number,password,search,email,tel,url');\n\n/*  */\n\n/**\n * Query an element selector if it's not an element already.\n */\nfunction query (el) {\n  if (typeof el === 'string') {\n    var selected = document.querySelector(el);\n    if (!selected) {\n      process.env.NODE_ENV !== 'production' && warn(\n        'Cannot find element: ' + el\n      );\n      return document.createElement('div')\n    }\n    return selected\n  } else {\n    return el\n  }\n}\n\n/*  */\n\nfunction createElement$1 (tagName, vnode) {\n  var elm = document.createElement(tagName);\n  if (tagName !== 'select') {\n    return elm\n  }\n  // false or null will remove the attribute but undefined will not\n  if (vnode.data && vnode.data.attrs && vnode.data.attrs.multiple !== undefined) {\n    elm.setAttribute('multiple', 'multiple');\n  }\n  return elm\n}\n\nfunction createElementNS (namespace, tagName) {\n  return document.createElementNS(namespaceMap[namespace], tagName)\n}\n\nfunction createTextNode (text) {\n  return document.createTextNode(text)\n}\n\nfunction createComment (text) {\n  return document.createComment(text)\n}\n\nfunction insertBefore (parentNode, newNode, referenceNode) {\n  parentNode.insertBefore(newNode, referenceNode);\n}\n\nfunction removeChild (node, child) {\n  node.removeChild(child);\n}\n\nfunction appendChild (node, child) {\n  node.appendChild(child);\n}\n\nfunction parentNode (node) {\n  return node.parentNode\n}\n\nfunction nextSibling (node) {\n  return node.nextSibling\n}\n\nfunction tagName (node) {\n  return node.tagName\n}\n\nfunction setTextContent (node, text) {\n  node.textContent = text;\n}\n\nfunction setStyleScope (node, scopeId) {\n  node.setAttribute(scopeId, '');\n}\n\nvar nodeOps = /*#__PURE__*/Object.freeze({\n  createElement: createElement$1,\n  createElementNS: createElementNS,\n  createTextNode: createTextNode,\n  createComment: createComment,\n  insertBefore: insertBefore,\n  removeChild: removeChild,\n  appendChild: appendChild,\n  parentNode: parentNode,\n  nextSibling: nextSibling,\n  tagName: tagName,\n  setTextContent: setTextContent,\n  setStyleScope: setStyleScope\n});\n\n/*  */\n\nvar ref = {\n  create: function create (_, vnode) {\n    registerRef(vnode);\n  },\n  update: function update (oldVnode, vnode) {\n    if (oldVnode.data.ref !== vnode.data.ref) {\n      registerRef(oldVnode, true);\n      registerRef(vnode);\n    }\n  },\n  destroy: function destroy (vnode) {\n    registerRef(vnode, true);\n  }\n};\n\nfunction registerRef (vnode, isRemoval) {\n  var key = vnode.data.ref;\n  if (!isDef(key)) { return }\n\n  var vm = vnode.context;\n  var ref = vnode.componentInstance || vnode.elm;\n  var refs = vm.$refs;\n  if (isRemoval) {\n    if (Array.isArray(refs[key])) {\n      remove(refs[key], ref);\n    } else if (refs[key] === ref) {\n      refs[key] = undefined;\n    }\n  } else {\n    if (vnode.data.refInFor) {\n      if (!Array.isArray(refs[key])) {\n        refs[key] = [ref];\n      } else if (refs[key].indexOf(ref) < 0) {\n        // $flow-disable-line\n        refs[key].push(ref);\n      }\n    } else {\n      refs[key] = ref;\n    }\n  }\n}\n\n/**\n * Virtual DOM patching algorithm based on Snabbdom by\n * Simon Friis Vindum (@paldepind)\n * Licensed under the MIT License\n * https://github.com/paldepind/snabbdom/blob/master/LICENSE\n *\n * modified by Evan You (@yyx990803)\n *\n * Not type-checking this because this file is perf-critical and the cost\n * of making flow understand it is not worth it.\n */\n\nvar emptyNode = new VNode('', {}, []);\n\nvar hooks = ['create', 'activate', 'update', 'remove', 'destroy'];\n\nfunction sameVnode (a, b) {\n  return (\n    a.key === b.key && (\n      (\n        a.tag === b.tag &&\n        a.isComment === b.isComment &&\n        isDef(a.data) === isDef(b.data) &&\n        sameInputType(a, b)\n      ) || (\n        isTrue(a.isAsyncPlaceholder) &&\n        a.asyncFactory === b.asyncFactory &&\n        isUndef(b.asyncFactory.error)\n      )\n    )\n  )\n}\n\nfunction sameInputType (a, b) {\n  if (a.tag !== 'input') { return true }\n  var i;\n  var typeA = isDef(i = a.data) && isDef(i = i.attrs) && i.type;\n  var typeB = isDef(i = b.data) && isDef(i = i.attrs) && i.type;\n  return typeA === typeB || isTextInputType(typeA) && isTextInputType(typeB)\n}\n\nfunction createKeyToOldIdx (children, beginIdx, endIdx) {\n  var i, key;\n  var map = {};\n  for (i = beginIdx; i <= endIdx; ++i) {\n    key = children[i].key;\n    if (isDef(key)) { map[key] = i; }\n  }\n  return map\n}\n\nfunction createPatchFunction (backend) {\n  var i, j;\n  var cbs = {};\n\n  var modules = backend.modules;\n  var nodeOps = backend.nodeOps;\n\n  for (i = 0; i < hooks.length; ++i) {\n    cbs[hooks[i]] = [];\n    for (j = 0; j < modules.length; ++j) {\n      if (isDef(modules[j][hooks[i]])) {\n        cbs[hooks[i]].push(modules[j][hooks[i]]);\n      }\n    }\n  }\n\n  function emptyNodeAt (elm) {\n    return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm)\n  }\n\n  function createRmCb (childElm, listeners) {\n    function remove$$1 () {\n      if (--remove$$1.listeners === 0) {\n        removeNode(childElm);\n      }\n    }\n    remove$$1.listeners = listeners;\n    return remove$$1\n  }\n\n  function removeNode (el) {\n    var parent = nodeOps.parentNode(el);\n    // element may have already been removed due to v-html / v-text\n    if (isDef(parent)) {\n      nodeOps.removeChild(parent, el);\n    }\n  }\n\n  function isUnknownElement$$1 (vnode, inVPre) {\n    return (\n      !inVPre &&\n      !vnode.ns &&\n      !(\n        config.ignoredElements.length &&\n        config.ignoredElements.some(function (ignore) {\n          return isRegExp(ignore)\n            ? ignore.test(vnode.tag)\n            : ignore === vnode.tag\n        })\n      ) &&\n      config.isUnknownElement(vnode.tag)\n    )\n  }\n\n  var creatingElmInVPre = 0;\n\n  function createElm (\n    vnode,\n    insertedVnodeQueue,\n    parentElm,\n    refElm,\n    nested,\n    ownerArray,\n    index\n  ) {\n    if (isDef(vnode.elm) && isDef(ownerArray)) {\n      // This vnode was used in a previous render!\n      // now it's used as a new node, overwriting its elm would cause\n      // potential patch errors down the road when it's used as an insertion\n      // reference node. Instead, we clone the node on-demand before creating\n      // associated DOM element for it.\n      vnode = ownerArray[index] = cloneVNode(vnode);\n    }\n\n    vnode.isRootInsert = !nested; // for transition enter check\n    if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {\n      return\n    }\n\n    var data = vnode.data;\n    var children = vnode.children;\n    var tag = vnode.tag;\n    if (isDef(tag)) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (data && data.pre) {\n          creatingElmInVPre++;\n        }\n        if (isUnknownElement$$1(vnode, creatingElmInVPre)) {\n          warn(\n            'Unknown custom element: <' + tag + '> - did you ' +\n            'register the component correctly? For recursive components, ' +\n            'make sure to provide the \"name\" option.',\n            vnode.context\n          );\n        }\n      }\n\n      vnode.elm = vnode.ns\n        ? nodeOps.createElementNS(vnode.ns, tag)\n        : nodeOps.createElement(tag, vnode);\n      setScope(vnode);\n\n      /* istanbul ignore if */\n      {\n        createChildren(vnode, children, insertedVnodeQueue);\n        if (isDef(data)) {\n          invokeCreateHooks(vnode, insertedVnodeQueue);\n        }\n        insert(parentElm, vnode.elm, refElm);\n      }\n\n      if (process.env.NODE_ENV !== 'production' && data && data.pre) {\n        creatingElmInVPre--;\n      }\n    } else if (isTrue(vnode.isComment)) {\n      vnode.elm = nodeOps.createComment(vnode.text);\n      insert(parentElm, vnode.elm, refElm);\n    } else {\n      vnode.elm = nodeOps.createTextNode(vnode.text);\n      insert(parentElm, vnode.elm, refElm);\n    }\n  }\n\n  function createComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n    var i = vnode.data;\n    if (isDef(i)) {\n      var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;\n      if (isDef(i = i.hook) && isDef(i = i.init)) {\n        i(vnode, false /* hydrating */);\n      }\n      // after calling the init hook, if the vnode is a child component\n      // it should've created a child instance and mounted it. the child\n      // component also has set the placeholder vnode's elm.\n      // in that case we can just return the element and be done.\n      if (isDef(vnode.componentInstance)) {\n        initComponent(vnode, insertedVnodeQueue);\n        insert(parentElm, vnode.elm, refElm);\n        if (isTrue(isReactivated)) {\n          reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);\n        }\n        return true\n      }\n    }\n  }\n\n  function initComponent (vnode, insertedVnodeQueue) {\n    if (isDef(vnode.data.pendingInsert)) {\n      insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);\n      vnode.data.pendingInsert = null;\n    }\n    vnode.elm = vnode.componentInstance.$el;\n    if (isPatchable(vnode)) {\n      invokeCreateHooks(vnode, insertedVnodeQueue);\n      setScope(vnode);\n    } else {\n      // empty component root.\n      // skip all element-related modules except for ref (#3455)\n      registerRef(vnode);\n      // make sure to invoke the insert hook\n      insertedVnodeQueue.push(vnode);\n    }\n  }\n\n  function reactivateComponent (vnode, insertedVnodeQueue, parentElm, refElm) {\n    var i;\n    // hack for #4339: a reactivated component with inner transition\n    // does not trigger because the inner node's created hooks are not called\n    // again. It's not ideal to involve module-specific logic in here but\n    // there doesn't seem to be a better way to do it.\n    var innerNode = vnode;\n    while (innerNode.componentInstance) {\n      innerNode = innerNode.componentInstance._vnode;\n      if (isDef(i = innerNode.data) && isDef(i = i.transition)) {\n        for (i = 0; i < cbs.activate.length; ++i) {\n          cbs.activate[i](emptyNode, innerNode);\n        }\n        insertedVnodeQueue.push(innerNode);\n        break\n      }\n    }\n    // unlike a newly created component,\n    // a reactivated keep-alive component doesn't insert itself\n    insert(parentElm, vnode.elm, refElm);\n  }\n\n  function insert (parent, elm, ref$$1) {\n    if (isDef(parent)) {\n      if (isDef(ref$$1)) {\n        if (nodeOps.parentNode(ref$$1) === parent) {\n          nodeOps.insertBefore(parent, elm, ref$$1);\n        }\n      } else {\n        nodeOps.appendChild(parent, elm);\n      }\n    }\n  }\n\n  function createChildren (vnode, children, insertedVnodeQueue) {\n    if (Array.isArray(children)) {\n      if (process.env.NODE_ENV !== 'production') {\n        checkDuplicateKeys(children);\n      }\n      for (var i = 0; i < children.length; ++i) {\n        createElm(children[i], insertedVnodeQueue, vnode.elm, null, true, children, i);\n      }\n    } else if (isPrimitive(vnode.text)) {\n      nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));\n    }\n  }\n\n  function isPatchable (vnode) {\n    while (vnode.componentInstance) {\n      vnode = vnode.componentInstance._vnode;\n    }\n    return isDef(vnode.tag)\n  }\n\n  function invokeCreateHooks (vnode, insertedVnodeQueue) {\n    for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n      cbs.create[i$1](emptyNode, vnode);\n    }\n    i = vnode.data.hook; // Reuse variable\n    if (isDef(i)) {\n      if (isDef(i.create)) { i.create(emptyNode, vnode); }\n      if (isDef(i.insert)) { insertedVnodeQueue.push(vnode); }\n    }\n  }\n\n  // set scope id attribute for scoped CSS.\n  // this is implemented as a special case to avoid the overhead\n  // of going through the normal attribute patching process.\n  function setScope (vnode) {\n    var i;\n    if (isDef(i = vnode.fnScopeId)) {\n      nodeOps.setStyleScope(vnode.elm, i);\n    } else {\n      var ancestor = vnode;\n      while (ancestor) {\n        if (isDef(i = ancestor.context) && isDef(i = i.$options._scopeId)) {\n          nodeOps.setStyleScope(vnode.elm, i);\n        }\n        ancestor = ancestor.parent;\n      }\n    }\n    // for slot content they should also get the scopeId from the host instance.\n    if (isDef(i = activeInstance) &&\n      i !== vnode.context &&\n      i !== vnode.fnContext &&\n      isDef(i = i.$options._scopeId)\n    ) {\n      nodeOps.setStyleScope(vnode.elm, i);\n    }\n  }\n\n  function addVnodes (parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {\n    for (; startIdx <= endIdx; ++startIdx) {\n      createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);\n    }\n  }\n\n  function invokeDestroyHook (vnode) {\n    var i, j;\n    var data = vnode.data;\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.destroy)) { i(vnode); }\n      for (i = 0; i < cbs.destroy.length; ++i) { cbs.destroy[i](vnode); }\n    }\n    if (isDef(i = vnode.children)) {\n      for (j = 0; j < vnode.children.length; ++j) {\n        invokeDestroyHook(vnode.children[j]);\n      }\n    }\n  }\n\n  function removeVnodes (parentElm, vnodes, startIdx, endIdx) {\n    for (; startIdx <= endIdx; ++startIdx) {\n      var ch = vnodes[startIdx];\n      if (isDef(ch)) {\n        if (isDef(ch.tag)) {\n          removeAndInvokeRemoveHook(ch);\n          invokeDestroyHook(ch);\n        } else { // Text node\n          removeNode(ch.elm);\n        }\n      }\n    }\n  }\n\n  function removeAndInvokeRemoveHook (vnode, rm) {\n    if (isDef(rm) || isDef(vnode.data)) {\n      var i;\n      var listeners = cbs.remove.length + 1;\n      if (isDef(rm)) {\n        // we have a recursively passed down rm callback\n        // increase the listeners count\n        rm.listeners += listeners;\n      } else {\n        // directly removing\n        rm = createRmCb(vnode.elm, listeners);\n      }\n      // recursively invoke hooks on child component root node\n      if (isDef(i = vnode.componentInstance) && isDef(i = i._vnode) && isDef(i.data)) {\n        removeAndInvokeRemoveHook(i, rm);\n      }\n      for (i = 0; i < cbs.remove.length; ++i) {\n        cbs.remove[i](vnode, rm);\n      }\n      if (isDef(i = vnode.data.hook) && isDef(i = i.remove)) {\n        i(vnode, rm);\n      } else {\n        rm();\n      }\n    } else {\n      removeNode(vnode.elm);\n    }\n  }\n\n  function updateChildren (parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {\n    var oldStartIdx = 0;\n    var newStartIdx = 0;\n    var oldEndIdx = oldCh.length - 1;\n    var oldStartVnode = oldCh[0];\n    var oldEndVnode = oldCh[oldEndIdx];\n    var newEndIdx = newCh.length - 1;\n    var newStartVnode = newCh[0];\n    var newEndVnode = newCh[newEndIdx];\n    var oldKeyToIdx, idxInOld, vnodeToMove, refElm;\n\n    // removeOnly is a special flag used only by <transition-group>\n    // to ensure removed elements stay in correct relative positions\n    // during leaving transitions\n    var canMove = !removeOnly;\n\n    if (process.env.NODE_ENV !== 'production') {\n      checkDuplicateKeys(newCh);\n    }\n\n    while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n      if (isUndef(oldStartVnode)) {\n        oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left\n      } else if (isUndef(oldEndVnode)) {\n        oldEndVnode = oldCh[--oldEndIdx];\n      } else if (sameVnode(oldStartVnode, newStartVnode)) {\n        patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n        oldStartVnode = oldCh[++oldStartIdx];\n        newStartVnode = newCh[++newStartIdx];\n      } else if (sameVnode(oldEndVnode, newEndVnode)) {\n        patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n        oldEndVnode = oldCh[--oldEndIdx];\n        newEndVnode = newCh[--newEndIdx];\n      } else if (sameVnode(oldStartVnode, newEndVnode)) { // Vnode moved right\n        patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);\n        canMove && nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));\n        oldStartVnode = oldCh[++oldStartIdx];\n        newEndVnode = newCh[--newEndIdx];\n      } else if (sameVnode(oldEndVnode, newStartVnode)) { // Vnode moved left\n        patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n        canMove && nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);\n        oldEndVnode = oldCh[--oldEndIdx];\n        newStartVnode = newCh[++newStartIdx];\n      } else {\n        if (isUndef(oldKeyToIdx)) { oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx); }\n        idxInOld = isDef(newStartVnode.key)\n          ? oldKeyToIdx[newStartVnode.key]\n          : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);\n        if (isUndef(idxInOld)) { // New element\n          createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n        } else {\n          vnodeToMove = oldCh[idxInOld];\n          if (sameVnode(vnodeToMove, newStartVnode)) {\n            patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);\n            oldCh[idxInOld] = undefined;\n            canMove && nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);\n          } else {\n            // same key but different element. treat as new element\n            createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);\n          }\n        }\n        newStartVnode = newCh[++newStartIdx];\n      }\n    }\n    if (oldStartIdx > oldEndIdx) {\n      refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;\n      addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);\n    } else if (newStartIdx > newEndIdx) {\n      removeVnodes(parentElm, oldCh, oldStartIdx, oldEndIdx);\n    }\n  }\n\n  function checkDuplicateKeys (children) {\n    var seenKeys = {};\n    for (var i = 0; i < children.length; i++) {\n      var vnode = children[i];\n      var key = vnode.key;\n      if (isDef(key)) {\n        if (seenKeys[key]) {\n          warn(\n            (\"Duplicate keys detected: '\" + key + \"'. This may cause an update error.\"),\n            vnode.context\n          );\n        } else {\n          seenKeys[key] = true;\n        }\n      }\n    }\n  }\n\n  function findIdxInOld (node, oldCh, start, end) {\n    for (var i = start; i < end; i++) {\n      var c = oldCh[i];\n      if (isDef(c) && sameVnode(node, c)) { return i }\n    }\n  }\n\n  function patchVnode (\n    oldVnode,\n    vnode,\n    insertedVnodeQueue,\n    ownerArray,\n    index,\n    removeOnly\n  ) {\n    if (oldVnode === vnode) {\n      return\n    }\n\n    if (isDef(vnode.elm) && isDef(ownerArray)) {\n      // clone reused vnode\n      vnode = ownerArray[index] = cloneVNode(vnode);\n    }\n\n    var elm = vnode.elm = oldVnode.elm;\n\n    if (isTrue(oldVnode.isAsyncPlaceholder)) {\n      if (isDef(vnode.asyncFactory.resolved)) {\n        hydrate(oldVnode.elm, vnode, insertedVnodeQueue);\n      } else {\n        vnode.isAsyncPlaceholder = true;\n      }\n      return\n    }\n\n    // reuse element for static trees.\n    // note we only do this if the vnode is cloned -\n    // if the new node is not cloned it means the render functions have been\n    // reset by the hot-reload-api and we need to do a proper re-render.\n    if (isTrue(vnode.isStatic) &&\n      isTrue(oldVnode.isStatic) &&\n      vnode.key === oldVnode.key &&\n      (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))\n    ) {\n      vnode.componentInstance = oldVnode.componentInstance;\n      return\n    }\n\n    var i;\n    var data = vnode.data;\n    if (isDef(data) && isDef(i = data.hook) && isDef(i = i.prepatch)) {\n      i(oldVnode, vnode);\n    }\n\n    var oldCh = oldVnode.children;\n    var ch = vnode.children;\n    if (isDef(data) && isPatchable(vnode)) {\n      for (i = 0; i < cbs.update.length; ++i) { cbs.update[i](oldVnode, vnode); }\n      if (isDef(i = data.hook) && isDef(i = i.update)) { i(oldVnode, vnode); }\n    }\n    if (isUndef(vnode.text)) {\n      if (isDef(oldCh) && isDef(ch)) {\n        if (oldCh !== ch) { updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly); }\n      } else if (isDef(ch)) {\n        if (process.env.NODE_ENV !== 'production') {\n          checkDuplicateKeys(ch);\n        }\n        if (isDef(oldVnode.text)) { nodeOps.setTextContent(elm, ''); }\n        addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);\n      } else if (isDef(oldCh)) {\n        removeVnodes(elm, oldCh, 0, oldCh.length - 1);\n      } else if (isDef(oldVnode.text)) {\n        nodeOps.setTextContent(elm, '');\n      }\n    } else if (oldVnode.text !== vnode.text) {\n      nodeOps.setTextContent(elm, vnode.text);\n    }\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.postpatch)) { i(oldVnode, vnode); }\n    }\n  }\n\n  function invokeInsertHook (vnode, queue, initial) {\n    // delay insert hooks for component root nodes, invoke them after the\n    // element is really inserted\n    if (isTrue(initial) && isDef(vnode.parent)) {\n      vnode.parent.data.pendingInsert = queue;\n    } else {\n      for (var i = 0; i < queue.length; ++i) {\n        queue[i].data.hook.insert(queue[i]);\n      }\n    }\n  }\n\n  var hydrationBailed = false;\n  // list of modules that can skip create hook during hydration because they\n  // are already rendered on the client or has no need for initialization\n  // Note: style is excluded because it relies on initial clone for future\n  // deep updates (#7063).\n  var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');\n\n  // Note: this is a browser-only function so we can assume elms are DOM nodes.\n  function hydrate (elm, vnode, insertedVnodeQueue, inVPre) {\n    var i;\n    var tag = vnode.tag;\n    var data = vnode.data;\n    var children = vnode.children;\n    inVPre = inVPre || (data && data.pre);\n    vnode.elm = elm;\n\n    if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {\n      vnode.isAsyncPlaceholder = true;\n      return true\n    }\n    // assert node match\n    if (process.env.NODE_ENV !== 'production') {\n      if (!assertNodeMatch(elm, vnode, inVPre)) {\n        return false\n      }\n    }\n    if (isDef(data)) {\n      if (isDef(i = data.hook) && isDef(i = i.init)) { i(vnode, true /* hydrating */); }\n      if (isDef(i = vnode.componentInstance)) {\n        // child component. it should have hydrated its own tree.\n        initComponent(vnode, insertedVnodeQueue);\n        return true\n      }\n    }\n    if (isDef(tag)) {\n      if (isDef(children)) {\n        // empty element, allow client to pick up and populate children\n        if (!elm.hasChildNodes()) {\n          createChildren(vnode, children, insertedVnodeQueue);\n        } else {\n          // v-html and domProps: innerHTML\n          if (isDef(i = data) && isDef(i = i.domProps) && isDef(i = i.innerHTML)) {\n            if (i !== elm.innerHTML) {\n              /* istanbul ignore if */\n              if (process.env.NODE_ENV !== 'production' &&\n                typeof console !== 'undefined' &&\n                !hydrationBailed\n              ) {\n                hydrationBailed = true;\n                console.warn('Parent: ', elm);\n                console.warn('server innerHTML: ', i);\n                console.warn('client innerHTML: ', elm.innerHTML);\n              }\n              return false\n            }\n          } else {\n            // iterate and compare children lists\n            var childrenMatch = true;\n            var childNode = elm.firstChild;\n            for (var i$1 = 0; i$1 < children.length; i$1++) {\n              if (!childNode || !hydrate(childNode, children[i$1], insertedVnodeQueue, inVPre)) {\n                childrenMatch = false;\n                break\n              }\n              childNode = childNode.nextSibling;\n            }\n            // if childNode is not null, it means the actual childNodes list is\n            // longer than the virtual children list.\n            if (!childrenMatch || childNode) {\n              /* istanbul ignore if */\n              if (process.env.NODE_ENV !== 'production' &&\n                typeof console !== 'undefined' &&\n                !hydrationBailed\n              ) {\n                hydrationBailed = true;\n                console.warn('Parent: ', elm);\n                console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);\n              }\n              return false\n            }\n          }\n        }\n      }\n      if (isDef(data)) {\n        var fullInvoke = false;\n        for (var key in data) {\n          if (!isRenderedModule(key)) {\n            fullInvoke = true;\n            invokeCreateHooks(vnode, insertedVnodeQueue);\n            break\n          }\n        }\n        if (!fullInvoke && data['class']) {\n          // ensure collecting deps for deep class bindings for future updates\n          traverse(data['class']);\n        }\n      }\n    } else if (elm.data !== vnode.text) {\n      elm.data = vnode.text;\n    }\n    return true\n  }\n\n  function assertNodeMatch (node, vnode, inVPre) {\n    if (isDef(vnode.tag)) {\n      return vnode.tag.indexOf('vue-component') === 0 || (\n        !isUnknownElement$$1(vnode, inVPre) &&\n        vnode.tag.toLowerCase() === (node.tagName && node.tagName.toLowerCase())\n      )\n    } else {\n      return node.nodeType === (vnode.isComment ? 8 : 3)\n    }\n  }\n\n  return function patch (oldVnode, vnode, hydrating, removeOnly) {\n    if (isUndef(vnode)) {\n      if (isDef(oldVnode)) { invokeDestroyHook(oldVnode); }\n      return\n    }\n\n    var isInitialPatch = false;\n    var insertedVnodeQueue = [];\n\n    if (isUndef(oldVnode)) {\n      // empty mount (likely as component), create new root element\n      isInitialPatch = true;\n      createElm(vnode, insertedVnodeQueue);\n    } else {\n      var isRealElement = isDef(oldVnode.nodeType);\n      if (!isRealElement && sameVnode(oldVnode, vnode)) {\n        // patch existing root node\n        patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);\n      } else {\n        if (isRealElement) {\n          // mounting to a real element\n          // check if this is server-rendered content and if we can perform\n          // a successful hydration.\n          if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {\n            oldVnode.removeAttribute(SSR_ATTR);\n            hydrating = true;\n          }\n          if (isTrue(hydrating)) {\n            if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {\n              invokeInsertHook(vnode, insertedVnodeQueue, true);\n              return oldVnode\n            } else if (process.env.NODE_ENV !== 'production') {\n              warn(\n                'The client-side rendered virtual DOM tree is not matching ' +\n                'server-rendered content. This is likely caused by incorrect ' +\n                'HTML markup, for example nesting block-level elements inside ' +\n                '<p>, or missing <tbody>. Bailing hydration and performing ' +\n                'full client-side render.'\n              );\n            }\n          }\n          // either not server-rendered, or hydration failed.\n          // create an empty node and replace it\n          oldVnode = emptyNodeAt(oldVnode);\n        }\n\n        // replacing existing element\n        var oldElm = oldVnode.elm;\n        var parentElm = nodeOps.parentNode(oldElm);\n\n        // create new node\n        createElm(\n          vnode,\n          insertedVnodeQueue,\n          // extremely rare edge case: do not insert if old element is in a\n          // leaving transition. Only happens when combining transition +\n          // keep-alive + HOCs. (#4590)\n          oldElm._leaveCb ? null : parentElm,\n          nodeOps.nextSibling(oldElm)\n        );\n\n        // update parent placeholder node element, recursively\n        if (isDef(vnode.parent)) {\n          var ancestor = vnode.parent;\n          var patchable = isPatchable(vnode);\n          while (ancestor) {\n            for (var i = 0; i < cbs.destroy.length; ++i) {\n              cbs.destroy[i](ancestor);\n            }\n            ancestor.elm = vnode.elm;\n            if (patchable) {\n              for (var i$1 = 0; i$1 < cbs.create.length; ++i$1) {\n                cbs.create[i$1](emptyNode, ancestor);\n              }\n              // #6513\n              // invoke insert hooks that may have been merged by create hooks.\n              // e.g. for directives that uses the \"inserted\" hook.\n              var insert = ancestor.data.hook.insert;\n              if (insert.merged) {\n                // start at index 1 to avoid re-invoking component mounted hook\n                for (var i$2 = 1; i$2 < insert.fns.length; i$2++) {\n                  insert.fns[i$2]();\n                }\n              }\n            } else {\n              registerRef(ancestor);\n            }\n            ancestor = ancestor.parent;\n          }\n        }\n\n        // destroy old node\n        if (isDef(parentElm)) {\n          removeVnodes(parentElm, [oldVnode], 0, 0);\n        } else if (isDef(oldVnode.tag)) {\n          invokeDestroyHook(oldVnode);\n        }\n      }\n    }\n\n    invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);\n    return vnode.elm\n  }\n}\n\n/*  */\n\nvar directives = {\n  create: updateDirectives,\n  update: updateDirectives,\n  destroy: function unbindDirectives (vnode) {\n    updateDirectives(vnode, emptyNode);\n  }\n};\n\nfunction updateDirectives (oldVnode, vnode) {\n  if (oldVnode.data.directives || vnode.data.directives) {\n    _update(oldVnode, vnode);\n  }\n}\n\nfunction _update (oldVnode, vnode) {\n  var isCreate = oldVnode === emptyNode;\n  var isDestroy = vnode === emptyNode;\n  var oldDirs = normalizeDirectives$1(oldVnode.data.directives, oldVnode.context);\n  var newDirs = normalizeDirectives$1(vnode.data.directives, vnode.context);\n\n  var dirsWithInsert = [];\n  var dirsWithPostpatch = [];\n\n  var key, oldDir, dir;\n  for (key in newDirs) {\n    oldDir = oldDirs[key];\n    dir = newDirs[key];\n    if (!oldDir) {\n      // new directive, bind\n      callHook$1(dir, 'bind', vnode, oldVnode);\n      if (dir.def && dir.def.inserted) {\n        dirsWithInsert.push(dir);\n      }\n    } else {\n      // existing directive, update\n      dir.oldValue = oldDir.value;\n      dir.oldArg = oldDir.arg;\n      callHook$1(dir, 'update', vnode, oldVnode);\n      if (dir.def && dir.def.componentUpdated) {\n        dirsWithPostpatch.push(dir);\n      }\n    }\n  }\n\n  if (dirsWithInsert.length) {\n    var callInsert = function () {\n      for (var i = 0; i < dirsWithInsert.length; i++) {\n        callHook$1(dirsWithInsert[i], 'inserted', vnode, oldVnode);\n      }\n    };\n    if (isCreate) {\n      mergeVNodeHook(vnode, 'insert', callInsert);\n    } else {\n      callInsert();\n    }\n  }\n\n  if (dirsWithPostpatch.length) {\n    mergeVNodeHook(vnode, 'postpatch', function () {\n      for (var i = 0; i < dirsWithPostpatch.length; i++) {\n        callHook$1(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);\n      }\n    });\n  }\n\n  if (!isCreate) {\n    for (key in oldDirs) {\n      if (!newDirs[key]) {\n        // no longer present, unbind\n        callHook$1(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);\n      }\n    }\n  }\n}\n\nvar emptyModifiers = Object.create(null);\n\nfunction normalizeDirectives$1 (\n  dirs,\n  vm\n) {\n  var res = Object.create(null);\n  if (!dirs) {\n    // $flow-disable-line\n    return res\n  }\n  var i, dir;\n  for (i = 0; i < dirs.length; i++) {\n    dir = dirs[i];\n    if (!dir.modifiers) {\n      // $flow-disable-line\n      dir.modifiers = emptyModifiers;\n    }\n    res[getRawDirName(dir)] = dir;\n    dir.def = resolveAsset(vm.$options, 'directives', dir.name, true);\n  }\n  // $flow-disable-line\n  return res\n}\n\nfunction getRawDirName (dir) {\n  return dir.rawName || ((dir.name) + \".\" + (Object.keys(dir.modifiers || {}).join('.')))\n}\n\nfunction callHook$1 (dir, hook, vnode, oldVnode, isDestroy) {\n  var fn = dir.def && dir.def[hook];\n  if (fn) {\n    try {\n      fn(vnode.elm, dir, vnode, oldVnode, isDestroy);\n    } catch (e) {\n      handleError(e, vnode.context, (\"directive \" + (dir.name) + \" \" + hook + \" hook\"));\n    }\n  }\n}\n\nvar baseModules = [\n  ref,\n  directives\n];\n\n/*  */\n\nfunction updateAttrs (oldVnode, vnode) {\n  var opts = vnode.componentOptions;\n  if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {\n    return\n  }\n  if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {\n    return\n  }\n  var key, cur, old;\n  var elm = vnode.elm;\n  var oldAttrs = oldVnode.data.attrs || {};\n  var attrs = vnode.data.attrs || {};\n  // clone observed objects, as the user probably wants to mutate it\n  if (isDef(attrs.__ob__)) {\n    attrs = vnode.data.attrs = extend({}, attrs);\n  }\n\n  for (key in attrs) {\n    cur = attrs[key];\n    old = oldAttrs[key];\n    if (old !== cur) {\n      setAttr(elm, key, cur);\n    }\n  }\n  // #4391: in IE9, setting type can reset value for input[type=radio]\n  // #6666: IE/Edge forces progress value down to 1 before setting a max\n  /* istanbul ignore if */\n  if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {\n    setAttr(elm, 'value', attrs.value);\n  }\n  for (key in oldAttrs) {\n    if (isUndef(attrs[key])) {\n      if (isXlink(key)) {\n        elm.removeAttributeNS(xlinkNS, getXlinkProp(key));\n      } else if (!isEnumeratedAttr(key)) {\n        elm.removeAttribute(key);\n      }\n    }\n  }\n}\n\nfunction setAttr (el, key, value) {\n  if (el.tagName.indexOf('-') > -1) {\n    baseSetAttr(el, key, value);\n  } else if (isBooleanAttr(key)) {\n    // set attribute for blank value\n    // e.g. <option disabled>Select one</option>\n    if (isFalsyAttrValue(value)) {\n      el.removeAttribute(key);\n    } else {\n      // technically allowfullscreen is a boolean attribute for <iframe>,\n      // but Flash expects a value of \"true\" when used on <embed> tag\n      value = key === 'allowfullscreen' && el.tagName === 'EMBED'\n        ? 'true'\n        : key;\n      el.setAttribute(key, value);\n    }\n  } else if (isEnumeratedAttr(key)) {\n    el.setAttribute(key, convertEnumeratedValue(key, value));\n  } else if (isXlink(key)) {\n    if (isFalsyAttrValue(value)) {\n      el.removeAttributeNS(xlinkNS, getXlinkProp(key));\n    } else {\n      el.setAttributeNS(xlinkNS, key, value);\n    }\n  } else {\n    baseSetAttr(el, key, value);\n  }\n}\n\nfunction baseSetAttr (el, key, value) {\n  if (isFalsyAttrValue(value)) {\n    el.removeAttribute(key);\n  } else {\n    // #7138: IE10 & 11 fires input event when setting placeholder on\n    // <textarea>... block the first input event and remove the blocker\n    // immediately.\n    /* istanbul ignore if */\n    if (\n      isIE && !isIE9 &&\n      el.tagName === 'TEXTAREA' &&\n      key === 'placeholder' && value !== '' && !el.__ieph\n    ) {\n      var blocker = function (e) {\n        e.stopImmediatePropagation();\n        el.removeEventListener('input', blocker);\n      };\n      el.addEventListener('input', blocker);\n      // $flow-disable-line\n      el.__ieph = true; /* IE placeholder patched */\n    }\n    el.setAttribute(key, value);\n  }\n}\n\nvar attrs = {\n  create: updateAttrs,\n  update: updateAttrs\n};\n\n/*  */\n\nfunction updateClass (oldVnode, vnode) {\n  var el = vnode.elm;\n  var data = vnode.data;\n  var oldData = oldVnode.data;\n  if (\n    isUndef(data.staticClass) &&\n    isUndef(data.class) && (\n      isUndef(oldData) || (\n        isUndef(oldData.staticClass) &&\n        isUndef(oldData.class)\n      )\n    )\n  ) {\n    return\n  }\n\n  var cls = genClassForVnode(vnode);\n\n  // handle transition classes\n  var transitionClass = el._transitionClasses;\n  if (isDef(transitionClass)) {\n    cls = concat(cls, stringifyClass(transitionClass));\n  }\n\n  // set the class\n  if (cls !== el._prevClass) {\n    el.setAttribute('class', cls);\n    el._prevClass = cls;\n  }\n}\n\nvar klass = {\n  create: updateClass,\n  update: updateClass\n};\n\n/*  */\n\nvar validDivisionCharRE = /[\\w).+\\-_$\\]]/;\n\nfunction parseFilters (exp) {\n  var inSingle = false;\n  var inDouble = false;\n  var inTemplateString = false;\n  var inRegex = false;\n  var curly = 0;\n  var square = 0;\n  var paren = 0;\n  var lastFilterIndex = 0;\n  var c, prev, i, expression, filters;\n\n  for (i = 0; i < exp.length; i++) {\n    prev = c;\n    c = exp.charCodeAt(i);\n    if (inSingle) {\n      if (c === 0x27 && prev !== 0x5C) { inSingle = false; }\n    } else if (inDouble) {\n      if (c === 0x22 && prev !== 0x5C) { inDouble = false; }\n    } else if (inTemplateString) {\n      if (c === 0x60 && prev !== 0x5C) { inTemplateString = false; }\n    } else if (inRegex) {\n      if (c === 0x2f && prev !== 0x5C) { inRegex = false; }\n    } else if (\n      c === 0x7C && // pipe\n      exp.charCodeAt(i + 1) !== 0x7C &&\n      exp.charCodeAt(i - 1) !== 0x7C &&\n      !curly && !square && !paren\n    ) {\n      if (expression === undefined) {\n        // first filter, end of expression\n        lastFilterIndex = i + 1;\n        expression = exp.slice(0, i).trim();\n      } else {\n        pushFilter();\n      }\n    } else {\n      switch (c) {\n        case 0x22: inDouble = true; break         // \"\n        case 0x27: inSingle = true; break         // '\n        case 0x60: inTemplateString = true; break // `\n        case 0x28: paren++; break                 // (\n        case 0x29: paren--; break                 // )\n        case 0x5B: square++; break                // [\n        case 0x5D: square--; break                // ]\n        case 0x7B: curly++; break                 // {\n        case 0x7D: curly--; break                 // }\n      }\n      if (c === 0x2f) { // /\n        var j = i - 1;\n        var p = (void 0);\n        // find first non-whitespace prev char\n        for (; j >= 0; j--) {\n          p = exp.charAt(j);\n          if (p !== ' ') { break }\n        }\n        if (!p || !validDivisionCharRE.test(p)) {\n          inRegex = true;\n        }\n      }\n    }\n  }\n\n  if (expression === undefined) {\n    expression = exp.slice(0, i).trim();\n  } else if (lastFilterIndex !== 0) {\n    pushFilter();\n  }\n\n  function pushFilter () {\n    (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());\n    lastFilterIndex = i + 1;\n  }\n\n  if (filters) {\n    for (i = 0; i < filters.length; i++) {\n      expression = wrapFilter(expression, filters[i]);\n    }\n  }\n\n  return expression\n}\n\nfunction wrapFilter (exp, filter) {\n  var i = filter.indexOf('(');\n  if (i < 0) {\n    // _f: resolveFilter\n    return (\"_f(\\\"\" + filter + \"\\\")(\" + exp + \")\")\n  } else {\n    var name = filter.slice(0, i);\n    var args = filter.slice(i + 1);\n    return (\"_f(\\\"\" + name + \"\\\")(\" + exp + (args !== ')' ? ',' + args : args))\n  }\n}\n\n/*  */\n\n\n\n/* eslint-disable no-unused-vars */\nfunction baseWarn (msg, range) {\n  console.error((\"[Vue compiler]: \" + msg));\n}\n/* eslint-enable no-unused-vars */\n\nfunction pluckModuleFunction (\n  modules,\n  key\n) {\n  return modules\n    ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; })\n    : []\n}\n\nfunction addProp (el, name, value, range, dynamic) {\n  (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\n  el.plain = false;\n}\n\nfunction addAttr (el, name, value, range, dynamic) {\n  var attrs = dynamic\n    ? (el.dynamicAttrs || (el.dynamicAttrs = []))\n    : (el.attrs || (el.attrs = []));\n  attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));\n  el.plain = false;\n}\n\n// add a raw attr (use this in preTransforms)\nfunction addRawAttr (el, name, value, range) {\n  el.attrsMap[name] = value;\n  el.attrsList.push(rangeSetItem({ name: name, value: value }, range));\n}\n\nfunction addDirective (\n  el,\n  name,\n  rawName,\n  value,\n  arg,\n  isDynamicArg,\n  modifiers,\n  range\n) {\n  (el.directives || (el.directives = [])).push(rangeSetItem({\n    name: name,\n    rawName: rawName,\n    value: value,\n    arg: arg,\n    isDynamicArg: isDynamicArg,\n    modifiers: modifiers\n  }, range));\n  el.plain = false;\n}\n\nfunction prependModifierMarker (symbol, name, dynamic) {\n  return dynamic\n    ? (\"_p(\" + name + \",\\\"\" + symbol + \"\\\")\")\n    : symbol + name // mark the event as captured\n}\n\nfunction addHandler (\n  el,\n  name,\n  value,\n  modifiers,\n  important,\n  warn,\n  range,\n  dynamic\n) {\n  modifiers = modifiers || emptyObject;\n  // warn prevent and passive modifier\n  /* istanbul ignore if */\n  if (\n    process.env.NODE_ENV !== 'production' && warn &&\n    modifiers.prevent && modifiers.passive\n  ) {\n    warn(\n      'passive and prevent can\\'t be used together. ' +\n      'Passive handler can\\'t prevent default event.',\n      range\n    );\n  }\n\n  // normalize click.right and click.middle since they don't actually fire\n  // this is technically browser-specific, but at least for now browsers are\n  // the only target envs that have right/middle clicks.\n  if (modifiers.right) {\n    if (dynamic) {\n      name = \"(\" + name + \")==='click'?'contextmenu':(\" + name + \")\";\n    } else if (name === 'click') {\n      name = 'contextmenu';\n      delete modifiers.right;\n    }\n  } else if (modifiers.middle) {\n    if (dynamic) {\n      name = \"(\" + name + \")==='click'?'mouseup':(\" + name + \")\";\n    } else if (name === 'click') {\n      name = 'mouseup';\n    }\n  }\n\n  // check capture modifier\n  if (modifiers.capture) {\n    delete modifiers.capture;\n    name = prependModifierMarker('!', name, dynamic);\n  }\n  if (modifiers.once) {\n    delete modifiers.once;\n    name = prependModifierMarker('~', name, dynamic);\n  }\n  /* istanbul ignore if */\n  if (modifiers.passive) {\n    delete modifiers.passive;\n    name = prependModifierMarker('&', name, dynamic);\n  }\n\n  var events;\n  if (modifiers.native) {\n    delete modifiers.native;\n    events = el.nativeEvents || (el.nativeEvents = {});\n  } else {\n    events = el.events || (el.events = {});\n  }\n\n  var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);\n  if (modifiers !== emptyObject) {\n    newHandler.modifiers = modifiers;\n  }\n\n  var handlers = events[name];\n  /* istanbul ignore if */\n  if (Array.isArray(handlers)) {\n    important ? handlers.unshift(newHandler) : handlers.push(newHandler);\n  } else if (handlers) {\n    events[name] = important ? [newHandler, handlers] : [handlers, newHandler];\n  } else {\n    events[name] = newHandler;\n  }\n\n  el.plain = false;\n}\n\nfunction getRawBindingAttr (\n  el,\n  name\n) {\n  return el.rawAttrsMap[':' + name] ||\n    el.rawAttrsMap['v-bind:' + name] ||\n    el.rawAttrsMap[name]\n}\n\nfunction getBindingAttr (\n  el,\n  name,\n  getStatic\n) {\n  var dynamicValue =\n    getAndRemoveAttr(el, ':' + name) ||\n    getAndRemoveAttr(el, 'v-bind:' + name);\n  if (dynamicValue != null) {\n    return parseFilters(dynamicValue)\n  } else if (getStatic !== false) {\n    var staticValue = getAndRemoveAttr(el, name);\n    if (staticValue != null) {\n      return JSON.stringify(staticValue)\n    }\n  }\n}\n\n// note: this only removes the attr from the Array (attrsList) so that it\n// doesn't get processed by processAttrs.\n// By default it does NOT remove it from the map (attrsMap) because the map is\n// needed during codegen.\nfunction getAndRemoveAttr (\n  el,\n  name,\n  removeFromMap\n) {\n  var val;\n  if ((val = el.attrsMap[name]) != null) {\n    var list = el.attrsList;\n    for (var i = 0, l = list.length; i < l; i++) {\n      if (list[i].name === name) {\n        list.splice(i, 1);\n        break\n      }\n    }\n  }\n  if (removeFromMap) {\n    delete el.attrsMap[name];\n  }\n  return val\n}\n\nfunction getAndRemoveAttrByRegex (\n  el,\n  name\n) {\n  var list = el.attrsList;\n  for (var i = 0, l = list.length; i < l; i++) {\n    var attr = list[i];\n    if (name.test(attr.name)) {\n      list.splice(i, 1);\n      return attr\n    }\n  }\n}\n\nfunction rangeSetItem (\n  item,\n  range\n) {\n  if (range) {\n    if (range.start != null) {\n      item.start = range.start;\n    }\n    if (range.end != null) {\n      item.end = range.end;\n    }\n  }\n  return item\n}\n\n/*  */\n\n/**\n * Cross-platform code generation for component v-model\n */\nfunction genComponentModel (\n  el,\n  value,\n  modifiers\n) {\n  var ref = modifiers || {};\n  var number = ref.number;\n  var trim = ref.trim;\n\n  var baseValueExpression = '$$v';\n  var valueExpression = baseValueExpression;\n  if (trim) {\n    valueExpression =\n      \"(typeof \" + baseValueExpression + \" === 'string'\" +\n      \"? \" + baseValueExpression + \".trim()\" +\n      \": \" + baseValueExpression + \")\";\n  }\n  if (number) {\n    valueExpression = \"_n(\" + valueExpression + \")\";\n  }\n  var assignment = genAssignmentCode(value, valueExpression);\n\n  el.model = {\n    value: (\"(\" + value + \")\"),\n    expression: JSON.stringify(value),\n    callback: (\"function (\" + baseValueExpression + \") {\" + assignment + \"}\")\n  };\n}\n\n/**\n * Cross-platform codegen helper for generating v-model value assignment code.\n */\nfunction genAssignmentCode (\n  value,\n  assignment\n) {\n  var res = parseModel(value);\n  if (res.key === null) {\n    return (value + \"=\" + assignment)\n  } else {\n    return (\"$set(\" + (res.exp) + \", \" + (res.key) + \", \" + assignment + \")\")\n  }\n}\n\n/**\n * Parse a v-model expression into a base path and a final key segment.\n * Handles both dot-path and possible square brackets.\n *\n * Possible cases:\n *\n * - test\n * - test[key]\n * - test[test1[key]]\n * - test[\"a\"][key]\n * - xxx.test[a[a].test1[key]]\n * - test.xxx.a[\"asa\"][test1[key]]\n *\n */\n\nvar len, str, chr, index$1, expressionPos, expressionEndPos;\n\n\n\nfunction parseModel (val) {\n  // Fix https://github.com/vuejs/vue/pull/7730\n  // allow v-model=\"obj.val \" (trailing whitespace)\n  val = val.trim();\n  len = val.length;\n\n  if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {\n    index$1 = val.lastIndexOf('.');\n    if (index$1 > -1) {\n      return {\n        exp: val.slice(0, index$1),\n        key: '\"' + val.slice(index$1 + 1) + '\"'\n      }\n    } else {\n      return {\n        exp: val,\n        key: null\n      }\n    }\n  }\n\n  str = val;\n  index$1 = expressionPos = expressionEndPos = 0;\n\n  while (!eof()) {\n    chr = next();\n    /* istanbul ignore if */\n    if (isStringStart(chr)) {\n      parseString(chr);\n    } else if (chr === 0x5B) {\n      parseBracket(chr);\n    }\n  }\n\n  return {\n    exp: val.slice(0, expressionPos),\n    key: val.slice(expressionPos + 1, expressionEndPos)\n  }\n}\n\nfunction next () {\n  return str.charCodeAt(++index$1)\n}\n\nfunction eof () {\n  return index$1 >= len\n}\n\nfunction isStringStart (chr) {\n  return chr === 0x22 || chr === 0x27\n}\n\nfunction parseBracket (chr) {\n  var inBracket = 1;\n  expressionPos = index$1;\n  while (!eof()) {\n    chr = next();\n    if (isStringStart(chr)) {\n      parseString(chr);\n      continue\n    }\n    if (chr === 0x5B) { inBracket++; }\n    if (chr === 0x5D) { inBracket--; }\n    if (inBracket === 0) {\n      expressionEndPos = index$1;\n      break\n    }\n  }\n}\n\nfunction parseString (chr) {\n  var stringQuote = chr;\n  while (!eof()) {\n    chr = next();\n    if (chr === stringQuote) {\n      break\n    }\n  }\n}\n\n/*  */\n\nvar warn$1;\n\n// in some cases, the event used has to be determined at runtime\n// so we used some reserved tokens during compile.\nvar RANGE_TOKEN = '__r';\nvar CHECKBOX_RADIO_TOKEN = '__c';\n\nfunction model (\n  el,\n  dir,\n  _warn\n) {\n  warn$1 = _warn;\n  var value = dir.value;\n  var modifiers = dir.modifiers;\n  var tag = el.tag;\n  var type = el.attrsMap.type;\n\n  if (process.env.NODE_ENV !== 'production') {\n    // inputs with type=\"file\" are read only and setting the input's\n    // value will throw an error.\n    if (tag === 'input' && type === 'file') {\n      warn$1(\n        \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\" type=\\\"file\\\">:\\n\" +\n        \"File inputs are read only. Use a v-on:change listener instead.\",\n        el.rawAttrsMap['v-model']\n      );\n    }\n  }\n\n  if (el.component) {\n    genComponentModel(el, value, modifiers);\n    // component v-model doesn't need extra runtime\n    return false\n  } else if (tag === 'select') {\n    genSelect(el, value, modifiers);\n  } else if (tag === 'input' && type === 'checkbox') {\n    genCheckboxModel(el, value, modifiers);\n  } else if (tag === 'input' && type === 'radio') {\n    genRadioModel(el, value, modifiers);\n  } else if (tag === 'input' || tag === 'textarea') {\n    genDefaultModel(el, value, modifiers);\n  } else if (!config.isReservedTag(tag)) {\n    genComponentModel(el, value, modifiers);\n    // component v-model doesn't need extra runtime\n    return false\n  } else if (process.env.NODE_ENV !== 'production') {\n    warn$1(\n      \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n      \"v-model is not supported on this element type. \" +\n      'If you are working with contenteditable, it\\'s recommended to ' +\n      'wrap a library dedicated for that purpose inside a custom component.',\n      el.rawAttrsMap['v-model']\n    );\n  }\n\n  // ensure runtime directive metadata\n  return true\n}\n\nfunction genCheckboxModel (\n  el,\n  value,\n  modifiers\n) {\n  var number = modifiers && modifiers.number;\n  var valueBinding = getBindingAttr(el, 'value') || 'null';\n  var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';\n  var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';\n  addProp(el, 'checked',\n    \"Array.isArray(\" + value + \")\" +\n    \"?_i(\" + value + \",\" + valueBinding + \")>-1\" + (\n      trueValueBinding === 'true'\n        ? (\":(\" + value + \")\")\n        : (\":_q(\" + value + \",\" + trueValueBinding + \")\")\n    )\n  );\n  addHandler(el, 'change',\n    \"var $$a=\" + value + \",\" +\n        '$$el=$event.target,' +\n        \"$$c=$$el.checked?(\" + trueValueBinding + \"):(\" + falseValueBinding + \");\" +\n    'if(Array.isArray($$a)){' +\n      \"var $$v=\" + (number ? '_n(' + valueBinding + ')' : valueBinding) + \",\" +\n          '$$i=_i($$a,$$v);' +\n      \"if($$el.checked){$$i<0&&(\" + (genAssignmentCode(value, '$$a.concat([$$v])')) + \")}\" +\n      \"else{$$i>-1&&(\" + (genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))')) + \")}\" +\n    \"}else{\" + (genAssignmentCode(value, '$$c')) + \"}\",\n    null, true\n  );\n}\n\nfunction genRadioModel (\n  el,\n  value,\n  modifiers\n) {\n  var number = modifiers && modifiers.number;\n  var valueBinding = getBindingAttr(el, 'value') || 'null';\n  valueBinding = number ? (\"_n(\" + valueBinding + \")\") : valueBinding;\n  addProp(el, 'checked', (\"_q(\" + value + \",\" + valueBinding + \")\"));\n  addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);\n}\n\nfunction genSelect (\n  el,\n  value,\n  modifiers\n) {\n  var number = modifiers && modifiers.number;\n  var selectedVal = \"Array.prototype.filter\" +\n    \".call($event.target.options,function(o){return o.selected})\" +\n    \".map(function(o){var val = \\\"_value\\\" in o ? o._value : o.value;\" +\n    \"return \" + (number ? '_n(val)' : 'val') + \"})\";\n\n  var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';\n  var code = \"var $$selectedVal = \" + selectedVal + \";\";\n  code = code + \" \" + (genAssignmentCode(value, assignment));\n  addHandler(el, 'change', code, null, true);\n}\n\nfunction genDefaultModel (\n  el,\n  value,\n  modifiers\n) {\n  var type = el.attrsMap.type;\n\n  // warn if v-bind:value conflicts with v-model\n  // except for inputs with v-bind:type\n  if (process.env.NODE_ENV !== 'production') {\n    var value$1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];\n    var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];\n    if (value$1 && !typeBinding) {\n      var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';\n      warn$1(\n        binding + \"=\\\"\" + value$1 + \"\\\" conflicts with v-model on the same element \" +\n        'because the latter already expands to a value binding internally',\n        el.rawAttrsMap[binding]\n      );\n    }\n  }\n\n  var ref = modifiers || {};\n  var lazy = ref.lazy;\n  var number = ref.number;\n  var trim = ref.trim;\n  var needCompositionGuard = !lazy && type !== 'range';\n  var event = lazy\n    ? 'change'\n    : type === 'range'\n      ? RANGE_TOKEN\n      : 'input';\n\n  var valueExpression = '$event.target.value';\n  if (trim) {\n    valueExpression = \"$event.target.value.trim()\";\n  }\n  if (number) {\n    valueExpression = \"_n(\" + valueExpression + \")\";\n  }\n\n  var code = genAssignmentCode(value, valueExpression);\n  if (needCompositionGuard) {\n    code = \"if($event.target.composing)return;\" + code;\n  }\n\n  addProp(el, 'value', (\"(\" + value + \")\"));\n  addHandler(el, event, code, null, true);\n  if (trim || number) {\n    addHandler(el, 'blur', '$forceUpdate()');\n  }\n}\n\n/*  */\n\n// normalize v-model event tokens that can only be determined at runtime.\n// it's important to place the event as the first in the array because\n// the whole point is ensuring the v-model callback gets called before\n// user-attached handlers.\nfunction normalizeEvents (on) {\n  /* istanbul ignore if */\n  if (isDef(on[RANGE_TOKEN])) {\n    // IE input[type=range] only supports `change` event\n    var event = isIE ? 'change' : 'input';\n    on[event] = [].concat(on[RANGE_TOKEN], on[event] || []);\n    delete on[RANGE_TOKEN];\n  }\n  // This was originally intended to fix #4521 but no longer necessary\n  // after 2.5. Keeping it for backwards compat with generated code from < 2.4\n  /* istanbul ignore if */\n  if (isDef(on[CHECKBOX_RADIO_TOKEN])) {\n    on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);\n    delete on[CHECKBOX_RADIO_TOKEN];\n  }\n}\n\nvar target$1;\n\nfunction createOnceHandler$1 (event, handler, capture) {\n  var _target = target$1; // save current target element in closure\n  return function onceHandler () {\n    var res = handler.apply(null, arguments);\n    if (res !== null) {\n      remove$2(event, onceHandler, capture, _target);\n    }\n  }\n}\n\n// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp\n// implementation and does not fire microtasks in between event propagation, so\n// safe to exclude.\nvar useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);\n\nfunction add$1 (\n  name,\n  handler,\n  capture,\n  passive\n) {\n  // async edge case #6566: inner click event triggers patch, event handler\n  // attached to outer element during patch, and triggered again. This\n  // happens because browsers fire microtask ticks between event propagation.\n  // the solution is simple: we save the timestamp when a handler is attached,\n  // and the handler would only fire if the event passed to it was fired\n  // AFTER it was attached.\n  if (useMicrotaskFix) {\n    var attachedTimestamp = currentFlushTimestamp;\n    var original = handler;\n    handler = original._wrapper = function (e) {\n      if (\n        // no bubbling, should always fire.\n        // this is just a safety net in case event.timeStamp is unreliable in\n        // certain weird environments...\n        e.target === e.currentTarget ||\n        // event is fired after handler attachment\n        e.timeStamp >= attachedTimestamp ||\n        // bail for environments that have buggy event.timeStamp implementations\n        // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState\n        // #9681 QtWebEngine event.timeStamp is negative value\n        e.timeStamp <= 0 ||\n        // #9448 bail if event is fired in another document in a multi-page\n        // electron/nw.js app, since event.timeStamp will be using a different\n        // starting reference\n        e.target.ownerDocument !== document\n      ) {\n        return original.apply(this, arguments)\n      }\n    };\n  }\n  target$1.addEventListener(\n    name,\n    handler,\n    supportsPassive\n      ? { capture: capture, passive: passive }\n      : capture\n  );\n}\n\nfunction remove$2 (\n  name,\n  handler,\n  capture,\n  _target\n) {\n  (_target || target$1).removeEventListener(\n    name,\n    handler._wrapper || handler,\n    capture\n  );\n}\n\nfunction updateDOMListeners (oldVnode, vnode) {\n  if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {\n    return\n  }\n  var on = vnode.data.on || {};\n  var oldOn = oldVnode.data.on || {};\n  target$1 = vnode.elm;\n  normalizeEvents(on);\n  updateListeners(on, oldOn, add$1, remove$2, createOnceHandler$1, vnode.context);\n  target$1 = undefined;\n}\n\nvar events = {\n  create: updateDOMListeners,\n  update: updateDOMListeners\n};\n\n/*  */\n\nvar svgContainer;\n\nfunction updateDOMProps (oldVnode, vnode) {\n  if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {\n    return\n  }\n  var key, cur;\n  var elm = vnode.elm;\n  var oldProps = oldVnode.data.domProps || {};\n  var props = vnode.data.domProps || {};\n  // clone observed objects, as the user probably wants to mutate it\n  if (isDef(props.__ob__)) {\n    props = vnode.data.domProps = extend({}, props);\n  }\n\n  for (key in oldProps) {\n    if (!(key in props)) {\n      elm[key] = '';\n    }\n  }\n\n  for (key in props) {\n    cur = props[key];\n    // ignore children if the node has textContent or innerHTML,\n    // as these will throw away existing DOM nodes and cause removal errors\n    // on subsequent patches (#3360)\n    if (key === 'textContent' || key === 'innerHTML') {\n      if (vnode.children) { vnode.children.length = 0; }\n      if (cur === oldProps[key]) { continue }\n      // #6601 work around Chrome version <= 55 bug where single textNode\n      // replaced by innerHTML/textContent retains its parentNode property\n      if (elm.childNodes.length === 1) {\n        elm.removeChild(elm.childNodes[0]);\n      }\n    }\n\n    if (key === 'value' && elm.tagName !== 'PROGRESS') {\n      // store value as _value as well since\n      // non-string values will be stringified\n      elm._value = cur;\n      // avoid resetting cursor position when value is the same\n      var strCur = isUndef(cur) ? '' : String(cur);\n      if (shouldUpdateValue(elm, strCur)) {\n        elm.value = strCur;\n      }\n    } else if (key === 'innerHTML' && isSVG(elm.tagName) && isUndef(elm.innerHTML)) {\n      // IE doesn't support innerHTML for SVG elements\n      svgContainer = svgContainer || document.createElement('div');\n      svgContainer.innerHTML = \"<svg>\" + cur + \"</svg>\";\n      var svg = svgContainer.firstChild;\n      while (elm.firstChild) {\n        elm.removeChild(elm.firstChild);\n      }\n      while (svg.firstChild) {\n        elm.appendChild(svg.firstChild);\n      }\n    } else if (\n      // skip the update if old and new VDOM state is the same.\n      // `value` is handled separately because the DOM value may be temporarily\n      // out of sync with VDOM state due to focus, composition and modifiers.\n      // This  #4521 by skipping the unnecesarry `checked` update.\n      cur !== oldProps[key]\n    ) {\n      // some property updates can throw\n      // e.g. `value` on <progress> w/ non-finite value\n      try {\n        elm[key] = cur;\n      } catch (e) {}\n    }\n  }\n}\n\n// check platforms/web/util/attrs.js acceptValue\n\n\nfunction shouldUpdateValue (elm, checkVal) {\n  return (!elm.composing && (\n    elm.tagName === 'OPTION' ||\n    isNotInFocusAndDirty(elm, checkVal) ||\n    isDirtyWithModifiers(elm, checkVal)\n  ))\n}\n\nfunction isNotInFocusAndDirty (elm, checkVal) {\n  // return true when textbox (.number and .trim) loses focus and its value is\n  // not equal to the updated value\n  var notInFocus = true;\n  // #6157\n  // work around IE bug when accessing document.activeElement in an iframe\n  try { notInFocus = document.activeElement !== elm; } catch (e) {}\n  return notInFocus && elm.value !== checkVal\n}\n\nfunction isDirtyWithModifiers (elm, newVal) {\n  var value = elm.value;\n  var modifiers = elm._vModifiers; // injected by v-model runtime\n  if (isDef(modifiers)) {\n    if (modifiers.number) {\n      return toNumber(value) !== toNumber(newVal)\n    }\n    if (modifiers.trim) {\n      return value.trim() !== newVal.trim()\n    }\n  }\n  return value !== newVal\n}\n\nvar domProps = {\n  create: updateDOMProps,\n  update: updateDOMProps\n};\n\n/*  */\n\nvar parseStyleText = cached(function (cssText) {\n  var res = {};\n  var listDelimiter = /;(?![^(]*\\))/g;\n  var propertyDelimiter = /:(.+)/;\n  cssText.split(listDelimiter).forEach(function (item) {\n    if (item) {\n      var tmp = item.split(propertyDelimiter);\n      tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());\n    }\n  });\n  return res\n});\n\n// merge static and dynamic style data on the same vnode\nfunction normalizeStyleData (data) {\n  var style = normalizeStyleBinding(data.style);\n  // static style is pre-processed into an object during compilation\n  // and is always a fresh object, so it's safe to merge into it\n  return data.staticStyle\n    ? extend(data.staticStyle, style)\n    : style\n}\n\n// normalize possible array / string values into Object\nfunction normalizeStyleBinding (bindingStyle) {\n  if (Array.isArray(bindingStyle)) {\n    return toObject(bindingStyle)\n  }\n  if (typeof bindingStyle === 'string') {\n    return parseStyleText(bindingStyle)\n  }\n  return bindingStyle\n}\n\n/**\n * parent component style should be after child's\n * so that parent component's style could override it\n */\nfunction getStyle (vnode, checkChild) {\n  var res = {};\n  var styleData;\n\n  if (checkChild) {\n    var childNode = vnode;\n    while (childNode.componentInstance) {\n      childNode = childNode.componentInstance._vnode;\n      if (\n        childNode && childNode.data &&\n        (styleData = normalizeStyleData(childNode.data))\n      ) {\n        extend(res, styleData);\n      }\n    }\n  }\n\n  if ((styleData = normalizeStyleData(vnode.data))) {\n    extend(res, styleData);\n  }\n\n  var parentNode = vnode;\n  while ((parentNode = parentNode.parent)) {\n    if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {\n      extend(res, styleData);\n    }\n  }\n  return res\n}\n\n/*  */\n\nvar cssVarRE = /^--/;\nvar importantRE = /\\s*!important$/;\nvar setProp = function (el, name, val) {\n  /* istanbul ignore if */\n  if (cssVarRE.test(name)) {\n    el.style.setProperty(name, val);\n  } else if (importantRE.test(val)) {\n    el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');\n  } else {\n    var normalizedName = normalize(name);\n    if (Array.isArray(val)) {\n      // Support values array created by autoprefixer, e.g.\n      // {display: [\"-webkit-box\", \"-ms-flexbox\", \"flex\"]}\n      // Set them one by one, and the browser will only set those it can recognize\n      for (var i = 0, len = val.length; i < len; i++) {\n        el.style[normalizedName] = val[i];\n      }\n    } else {\n      el.style[normalizedName] = val;\n    }\n  }\n};\n\nvar vendorNames = ['Webkit', 'Moz', 'ms'];\n\nvar emptyStyle;\nvar normalize = cached(function (prop) {\n  emptyStyle = emptyStyle || document.createElement('div').style;\n  prop = camelize(prop);\n  if (prop !== 'filter' && (prop in emptyStyle)) {\n    return prop\n  }\n  var capName = prop.charAt(0).toUpperCase() + prop.slice(1);\n  for (var i = 0; i < vendorNames.length; i++) {\n    var name = vendorNames[i] + capName;\n    if (name in emptyStyle) {\n      return name\n    }\n  }\n});\n\nfunction updateStyle (oldVnode, vnode) {\n  var data = vnode.data;\n  var oldData = oldVnode.data;\n\n  if (isUndef(data.staticStyle) && isUndef(data.style) &&\n    isUndef(oldData.staticStyle) && isUndef(oldData.style)\n  ) {\n    return\n  }\n\n  var cur, name;\n  var el = vnode.elm;\n  var oldStaticStyle = oldData.staticStyle;\n  var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};\n\n  // if static style exists, stylebinding already merged into it when doing normalizeStyleData\n  var oldStyle = oldStaticStyle || oldStyleBinding;\n\n  var style = normalizeStyleBinding(vnode.data.style) || {};\n\n  // store normalized style under a different key for next diff\n  // make sure to clone it if it's reactive, since the user likely wants\n  // to mutate it.\n  vnode.data.normalizedStyle = isDef(style.__ob__)\n    ? extend({}, style)\n    : style;\n\n  var newStyle = getStyle(vnode, true);\n\n  for (name in oldStyle) {\n    if (isUndef(newStyle[name])) {\n      setProp(el, name, '');\n    }\n  }\n  for (name in newStyle) {\n    cur = newStyle[name];\n    if (cur !== oldStyle[name]) {\n      // ie9 setting to null has no effect, must use empty string\n      setProp(el, name, cur == null ? '' : cur);\n    }\n  }\n}\n\nvar style = {\n  create: updateStyle,\n  update: updateStyle\n};\n\n/*  */\n\nvar whitespaceRE = /\\s+/;\n\n/**\n * Add class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction addClass (el, cls) {\n  /* istanbul ignore if */\n  if (!cls || !(cls = cls.trim())) {\n    return\n  }\n\n  /* istanbul ignore else */\n  if (el.classList) {\n    if (cls.indexOf(' ') > -1) {\n      cls.split(whitespaceRE).forEach(function (c) { return el.classList.add(c); });\n    } else {\n      el.classList.add(cls);\n    }\n  } else {\n    var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n    if (cur.indexOf(' ' + cls + ' ') < 0) {\n      el.setAttribute('class', (cur + cls).trim());\n    }\n  }\n}\n\n/**\n * Remove class with compatibility for SVG since classList is not supported on\n * SVG elements in IE\n */\nfunction removeClass (el, cls) {\n  /* istanbul ignore if */\n  if (!cls || !(cls = cls.trim())) {\n    return\n  }\n\n  /* istanbul ignore else */\n  if (el.classList) {\n    if (cls.indexOf(' ') > -1) {\n      cls.split(whitespaceRE).forEach(function (c) { return el.classList.remove(c); });\n    } else {\n      el.classList.remove(cls);\n    }\n    if (!el.classList.length) {\n      el.removeAttribute('class');\n    }\n  } else {\n    var cur = \" \" + (el.getAttribute('class') || '') + \" \";\n    var tar = ' ' + cls + ' ';\n    while (cur.indexOf(tar) >= 0) {\n      cur = cur.replace(tar, ' ');\n    }\n    cur = cur.trim();\n    if (cur) {\n      el.setAttribute('class', cur);\n    } else {\n      el.removeAttribute('class');\n    }\n  }\n}\n\n/*  */\n\nfunction resolveTransition (def$$1) {\n  if (!def$$1) {\n    return\n  }\n  /* istanbul ignore else */\n  if (typeof def$$1 === 'object') {\n    var res = {};\n    if (def$$1.css !== false) {\n      extend(res, autoCssTransition(def$$1.name || 'v'));\n    }\n    extend(res, def$$1);\n    return res\n  } else if (typeof def$$1 === 'string') {\n    return autoCssTransition(def$$1)\n  }\n}\n\nvar autoCssTransition = cached(function (name) {\n  return {\n    enterClass: (name + \"-enter\"),\n    enterToClass: (name + \"-enter-to\"),\n    enterActiveClass: (name + \"-enter-active\"),\n    leaveClass: (name + \"-leave\"),\n    leaveToClass: (name + \"-leave-to\"),\n    leaveActiveClass: (name + \"-leave-active\")\n  }\n});\n\nvar hasTransition = inBrowser && !isIE9;\nvar TRANSITION = 'transition';\nvar ANIMATION = 'animation';\n\n// Transition property/event sniffing\nvar transitionProp = 'transition';\nvar transitionEndEvent = 'transitionend';\nvar animationProp = 'animation';\nvar animationEndEvent = 'animationend';\nif (hasTransition) {\n  /* istanbul ignore if */\n  if (window.ontransitionend === undefined &&\n    window.onwebkittransitionend !== undefined\n  ) {\n    transitionProp = 'WebkitTransition';\n    transitionEndEvent = 'webkitTransitionEnd';\n  }\n  if (window.onanimationend === undefined &&\n    window.onwebkitanimationend !== undefined\n  ) {\n    animationProp = 'WebkitAnimation';\n    animationEndEvent = 'webkitAnimationEnd';\n  }\n}\n\n// binding to window is necessary to make hot reload work in IE in strict mode\nvar raf = inBrowser\n  ? window.requestAnimationFrame\n    ? window.requestAnimationFrame.bind(window)\n    : setTimeout\n  : /* istanbul ignore next */ function (fn) { return fn(); };\n\nfunction nextFrame (fn) {\n  raf(function () {\n    raf(fn);\n  });\n}\n\nfunction addTransitionClass (el, cls) {\n  var transitionClasses = el._transitionClasses || (el._transitionClasses = []);\n  if (transitionClasses.indexOf(cls) < 0) {\n    transitionClasses.push(cls);\n    addClass(el, cls);\n  }\n}\n\nfunction removeTransitionClass (el, cls) {\n  if (el._transitionClasses) {\n    remove(el._transitionClasses, cls);\n  }\n  removeClass(el, cls);\n}\n\nfunction whenTransitionEnds (\n  el,\n  expectedType,\n  cb\n) {\n  var ref = getTransitionInfo(el, expectedType);\n  var type = ref.type;\n  var timeout = ref.timeout;\n  var propCount = ref.propCount;\n  if (!type) { return cb() }\n  var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;\n  var ended = 0;\n  var end = function () {\n    el.removeEventListener(event, onEnd);\n    cb();\n  };\n  var onEnd = function (e) {\n    if (e.target === el) {\n      if (++ended >= propCount) {\n        end();\n      }\n    }\n  };\n  setTimeout(function () {\n    if (ended < propCount) {\n      end();\n    }\n  }, timeout + 1);\n  el.addEventListener(event, onEnd);\n}\n\nvar transformRE = /\\b(transform|all)(,|$)/;\n\nfunction getTransitionInfo (el, expectedType) {\n  var styles = window.getComputedStyle(el);\n  // JSDOM may return undefined for transition properties\n  var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');\n  var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');\n  var transitionTimeout = getTimeout(transitionDelays, transitionDurations);\n  var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');\n  var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');\n  var animationTimeout = getTimeout(animationDelays, animationDurations);\n\n  var type;\n  var timeout = 0;\n  var propCount = 0;\n  /* istanbul ignore if */\n  if (expectedType === TRANSITION) {\n    if (transitionTimeout > 0) {\n      type = TRANSITION;\n      timeout = transitionTimeout;\n      propCount = transitionDurations.length;\n    }\n  } else if (expectedType === ANIMATION) {\n    if (animationTimeout > 0) {\n      type = ANIMATION;\n      timeout = animationTimeout;\n      propCount = animationDurations.length;\n    }\n  } else {\n    timeout = Math.max(transitionTimeout, animationTimeout);\n    type = timeout > 0\n      ? transitionTimeout > animationTimeout\n        ? TRANSITION\n        : ANIMATION\n      : null;\n    propCount = type\n      ? type === TRANSITION\n        ? transitionDurations.length\n        : animationDurations.length\n      : 0;\n  }\n  var hasTransform =\n    type === TRANSITION &&\n    transformRE.test(styles[transitionProp + 'Property']);\n  return {\n    type: type,\n    timeout: timeout,\n    propCount: propCount,\n    hasTransform: hasTransform\n  }\n}\n\nfunction getTimeout (delays, durations) {\n  /* istanbul ignore next */\n  while (delays.length < durations.length) {\n    delays = delays.concat(delays);\n  }\n\n  return Math.max.apply(null, durations.map(function (d, i) {\n    return toMs(d) + toMs(delays[i])\n  }))\n}\n\n// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers\n// in a locale-dependent way, using a comma instead of a dot.\n// If comma is not replaced with a dot, the input will be rounded down (i.e. acting\n// as a floor function) causing unexpected behaviors\nfunction toMs (s) {\n  return Number(s.slice(0, -1).replace(',', '.')) * 1000\n}\n\n/*  */\n\nfunction enter (vnode, toggleDisplay) {\n  var el = vnode.elm;\n\n  // call leave callback now\n  if (isDef(el._leaveCb)) {\n    el._leaveCb.cancelled = true;\n    el._leaveCb();\n  }\n\n  var data = resolveTransition(vnode.data.transition);\n  if (isUndef(data)) {\n    return\n  }\n\n  /* istanbul ignore if */\n  if (isDef(el._enterCb) || el.nodeType !== 1) {\n    return\n  }\n\n  var css = data.css;\n  var type = data.type;\n  var enterClass = data.enterClass;\n  var enterToClass = data.enterToClass;\n  var enterActiveClass = data.enterActiveClass;\n  var appearClass = data.appearClass;\n  var appearToClass = data.appearToClass;\n  var appearActiveClass = data.appearActiveClass;\n  var beforeEnter = data.beforeEnter;\n  var enter = data.enter;\n  var afterEnter = data.afterEnter;\n  var enterCancelled = data.enterCancelled;\n  var beforeAppear = data.beforeAppear;\n  var appear = data.appear;\n  var afterAppear = data.afterAppear;\n  var appearCancelled = data.appearCancelled;\n  var duration = data.duration;\n\n  // activeInstance will always be the <transition> component managing this\n  // transition. One edge case to check is when the <transition> is placed\n  // as the root node of a child component. In that case we need to check\n  // <transition>'s parent for appear check.\n  var context = activeInstance;\n  var transitionNode = activeInstance.$vnode;\n  while (transitionNode && transitionNode.parent) {\n    context = transitionNode.context;\n    transitionNode = transitionNode.parent;\n  }\n\n  var isAppear = !context._isMounted || !vnode.isRootInsert;\n\n  if (isAppear && !appear && appear !== '') {\n    return\n  }\n\n  var startClass = isAppear && appearClass\n    ? appearClass\n    : enterClass;\n  var activeClass = isAppear && appearActiveClass\n    ? appearActiveClass\n    : enterActiveClass;\n  var toClass = isAppear && appearToClass\n    ? appearToClass\n    : enterToClass;\n\n  var beforeEnterHook = isAppear\n    ? (beforeAppear || beforeEnter)\n    : beforeEnter;\n  var enterHook = isAppear\n    ? (typeof appear === 'function' ? appear : enter)\n    : enter;\n  var afterEnterHook = isAppear\n    ? (afterAppear || afterEnter)\n    : afterEnter;\n  var enterCancelledHook = isAppear\n    ? (appearCancelled || enterCancelled)\n    : enterCancelled;\n\n  var explicitEnterDuration = toNumber(\n    isObject(duration)\n      ? duration.enter\n      : duration\n  );\n\n  if (process.env.NODE_ENV !== 'production' && explicitEnterDuration != null) {\n    checkDuration(explicitEnterDuration, 'enter', vnode);\n  }\n\n  var expectsCSS = css !== false && !isIE9;\n  var userWantsControl = getHookArgumentsLength(enterHook);\n\n  var cb = el._enterCb = once(function () {\n    if (expectsCSS) {\n      removeTransitionClass(el, toClass);\n      removeTransitionClass(el, activeClass);\n    }\n    if (cb.cancelled) {\n      if (expectsCSS) {\n        removeTransitionClass(el, startClass);\n      }\n      enterCancelledHook && enterCancelledHook(el);\n    } else {\n      afterEnterHook && afterEnterHook(el);\n    }\n    el._enterCb = null;\n  });\n\n  if (!vnode.data.show) {\n    // remove pending leave element on enter by injecting an insert hook\n    mergeVNodeHook(vnode, 'insert', function () {\n      var parent = el.parentNode;\n      var pendingNode = parent && parent._pending && parent._pending[vnode.key];\n      if (pendingNode &&\n        pendingNode.tag === vnode.tag &&\n        pendingNode.elm._leaveCb\n      ) {\n        pendingNode.elm._leaveCb();\n      }\n      enterHook && enterHook(el, cb);\n    });\n  }\n\n  // start enter transition\n  beforeEnterHook && beforeEnterHook(el);\n  if (expectsCSS) {\n    addTransitionClass(el, startClass);\n    addTransitionClass(el, activeClass);\n    nextFrame(function () {\n      removeTransitionClass(el, startClass);\n      if (!cb.cancelled) {\n        addTransitionClass(el, toClass);\n        if (!userWantsControl) {\n          if (isValidDuration(explicitEnterDuration)) {\n            setTimeout(cb, explicitEnterDuration);\n          } else {\n            whenTransitionEnds(el, type, cb);\n          }\n        }\n      }\n    });\n  }\n\n  if (vnode.data.show) {\n    toggleDisplay && toggleDisplay();\n    enterHook && enterHook(el, cb);\n  }\n\n  if (!expectsCSS && !userWantsControl) {\n    cb();\n  }\n}\n\nfunction leave (vnode, rm) {\n  var el = vnode.elm;\n\n  // call enter callback now\n  if (isDef(el._enterCb)) {\n    el._enterCb.cancelled = true;\n    el._enterCb();\n  }\n\n  var data = resolveTransition(vnode.data.transition);\n  if (isUndef(data) || el.nodeType !== 1) {\n    return rm()\n  }\n\n  /* istanbul ignore if */\n  if (isDef(el._leaveCb)) {\n    return\n  }\n\n  var css = data.css;\n  var type = data.type;\n  var leaveClass = data.leaveClass;\n  var leaveToClass = data.leaveToClass;\n  var leaveActiveClass = data.leaveActiveClass;\n  var beforeLeave = data.beforeLeave;\n  var leave = data.leave;\n  var afterLeave = data.afterLeave;\n  var leaveCancelled = data.leaveCancelled;\n  var delayLeave = data.delayLeave;\n  var duration = data.duration;\n\n  var expectsCSS = css !== false && !isIE9;\n  var userWantsControl = getHookArgumentsLength(leave);\n\n  var explicitLeaveDuration = toNumber(\n    isObject(duration)\n      ? duration.leave\n      : duration\n  );\n\n  if (process.env.NODE_ENV !== 'production' && isDef(explicitLeaveDuration)) {\n    checkDuration(explicitLeaveDuration, 'leave', vnode);\n  }\n\n  var cb = el._leaveCb = once(function () {\n    if (el.parentNode && el.parentNode._pending) {\n      el.parentNode._pending[vnode.key] = null;\n    }\n    if (expectsCSS) {\n      removeTransitionClass(el, leaveToClass);\n      removeTransitionClass(el, leaveActiveClass);\n    }\n    if (cb.cancelled) {\n      if (expectsCSS) {\n        removeTransitionClass(el, leaveClass);\n      }\n      leaveCancelled && leaveCancelled(el);\n    } else {\n      rm();\n      afterLeave && afterLeave(el);\n    }\n    el._leaveCb = null;\n  });\n\n  if (delayLeave) {\n    delayLeave(performLeave);\n  } else {\n    performLeave();\n  }\n\n  function performLeave () {\n    // the delayed leave may have already been cancelled\n    if (cb.cancelled) {\n      return\n    }\n    // record leaving element\n    if (!vnode.data.show && el.parentNode) {\n      (el.parentNode._pending || (el.parentNode._pending = {}))[(vnode.key)] = vnode;\n    }\n    beforeLeave && beforeLeave(el);\n    if (expectsCSS) {\n      addTransitionClass(el, leaveClass);\n      addTransitionClass(el, leaveActiveClass);\n      nextFrame(function () {\n        removeTransitionClass(el, leaveClass);\n        if (!cb.cancelled) {\n          addTransitionClass(el, leaveToClass);\n          if (!userWantsControl) {\n            if (isValidDuration(explicitLeaveDuration)) {\n              setTimeout(cb, explicitLeaveDuration);\n            } else {\n              whenTransitionEnds(el, type, cb);\n            }\n          }\n        }\n      });\n    }\n    leave && leave(el, cb);\n    if (!expectsCSS && !userWantsControl) {\n      cb();\n    }\n  }\n}\n\n// only used in dev mode\nfunction checkDuration (val, name, vnode) {\n  if (typeof val !== 'number') {\n    warn(\n      \"<transition> explicit \" + name + \" duration is not a valid number - \" +\n      \"got \" + (JSON.stringify(val)) + \".\",\n      vnode.context\n    );\n  } else if (isNaN(val)) {\n    warn(\n      \"<transition> explicit \" + name + \" duration is NaN - \" +\n      'the duration expression might be incorrect.',\n      vnode.context\n    );\n  }\n}\n\nfunction isValidDuration (val) {\n  return typeof val === 'number' && !isNaN(val)\n}\n\n/**\n * Normalize a transition hook's argument length. The hook may be:\n * - a merged hook (invoker) with the original in .fns\n * - a wrapped component method (check ._length)\n * - a plain function (.length)\n */\nfunction getHookArgumentsLength (fn) {\n  if (isUndef(fn)) {\n    return false\n  }\n  var invokerFns = fn.fns;\n  if (isDef(invokerFns)) {\n    // invoker\n    return getHookArgumentsLength(\n      Array.isArray(invokerFns)\n        ? invokerFns[0]\n        : invokerFns\n    )\n  } else {\n    return (fn._length || fn.length) > 1\n  }\n}\n\nfunction _enter (_, vnode) {\n  if (vnode.data.show !== true) {\n    enter(vnode);\n  }\n}\n\nvar transition = inBrowser ? {\n  create: _enter,\n  activate: _enter,\n  remove: function remove$$1 (vnode, rm) {\n    /* istanbul ignore else */\n    if (vnode.data.show !== true) {\n      leave(vnode, rm);\n    } else {\n      rm();\n    }\n  }\n} : {};\n\nvar platformModules = [\n  attrs,\n  klass,\n  events,\n  domProps,\n  style,\n  transition\n];\n\n/*  */\n\n// the directive module should be applied last, after all\n// built-in modules have been applied.\nvar modules = platformModules.concat(baseModules);\n\nvar patch = createPatchFunction({ nodeOps: nodeOps, modules: modules });\n\n/**\n * Not type checking this file because flow doesn't like attaching\n * properties to Elements.\n */\n\n/* istanbul ignore if */\nif (isIE9) {\n  // http://www.matts411.com/post/internet-explorer-9-oninput/\n  document.addEventListener('selectionchange', function () {\n    var el = document.activeElement;\n    if (el && el.vmodel) {\n      trigger(el, 'input');\n    }\n  });\n}\n\nvar directive = {\n  inserted: function inserted (el, binding, vnode, oldVnode) {\n    if (vnode.tag === 'select') {\n      // #6903\n      if (oldVnode.elm && !oldVnode.elm._vOptions) {\n        mergeVNodeHook(vnode, 'postpatch', function () {\n          directive.componentUpdated(el, binding, vnode);\n        });\n      } else {\n        setSelected(el, binding, vnode.context);\n      }\n      el._vOptions = [].map.call(el.options, getValue);\n    } else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {\n      el._vModifiers = binding.modifiers;\n      if (!binding.modifiers.lazy) {\n        el.addEventListener('compositionstart', onCompositionStart);\n        el.addEventListener('compositionend', onCompositionEnd);\n        // Safari < 10.2 & UIWebView doesn't fire compositionend when\n        // switching focus before confirming composition choice\n        // this also fixes the issue where some browsers e.g. iOS Chrome\n        // fires \"change\" instead of \"input\" on autocomplete.\n        el.addEventListener('change', onCompositionEnd);\n        /* istanbul ignore if */\n        if (isIE9) {\n          el.vmodel = true;\n        }\n      }\n    }\n  },\n\n  componentUpdated: function componentUpdated (el, binding, vnode) {\n    if (vnode.tag === 'select') {\n      setSelected(el, binding, vnode.context);\n      // in case the options rendered by v-for have changed,\n      // it's possible that the value is out-of-sync with the rendered options.\n      // detect such cases and filter out values that no longer has a matching\n      // option in the DOM.\n      var prevOptions = el._vOptions;\n      var curOptions = el._vOptions = [].map.call(el.options, getValue);\n      if (curOptions.some(function (o, i) { return !looseEqual(o, prevOptions[i]); })) {\n        // trigger change event if\n        // no matching option found for at least one value\n        var needReset = el.multiple\n          ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions); })\n          : binding.value !== binding.oldValue && hasNoMatchingOption(binding.value, curOptions);\n        if (needReset) {\n          trigger(el, 'change');\n        }\n      }\n    }\n  }\n};\n\nfunction setSelected (el, binding, vm) {\n  actuallySetSelected(el, binding, vm);\n  /* istanbul ignore if */\n  if (isIE || isEdge) {\n    setTimeout(function () {\n      actuallySetSelected(el, binding, vm);\n    }, 0);\n  }\n}\n\nfunction actuallySetSelected (el, binding, vm) {\n  var value = binding.value;\n  var isMultiple = el.multiple;\n  if (isMultiple && !Array.isArray(value)) {\n    process.env.NODE_ENV !== 'production' && warn(\n      \"<select multiple v-model=\\\"\" + (binding.expression) + \"\\\"> \" +\n      \"expects an Array value for its binding, but got \" + (Object.prototype.toString.call(value).slice(8, -1)),\n      vm\n    );\n    return\n  }\n  var selected, option;\n  for (var i = 0, l = el.options.length; i < l; i++) {\n    option = el.options[i];\n    if (isMultiple) {\n      selected = looseIndexOf(value, getValue(option)) > -1;\n      if (option.selected !== selected) {\n        option.selected = selected;\n      }\n    } else {\n      if (looseEqual(getValue(option), value)) {\n        if (el.selectedIndex !== i) {\n          el.selectedIndex = i;\n        }\n        return\n      }\n    }\n  }\n  if (!isMultiple) {\n    el.selectedIndex = -1;\n  }\n}\n\nfunction hasNoMatchingOption (value, options) {\n  return options.every(function (o) { return !looseEqual(o, value); })\n}\n\nfunction getValue (option) {\n  return '_value' in option\n    ? option._value\n    : option.value\n}\n\nfunction onCompositionStart (e) {\n  e.target.composing = true;\n}\n\nfunction onCompositionEnd (e) {\n  // prevent triggering an input event for no reason\n  if (!e.target.composing) { return }\n  e.target.composing = false;\n  trigger(e.target, 'input');\n}\n\nfunction trigger (el, type) {\n  var e = document.createEvent('HTMLEvents');\n  e.initEvent(type, true, true);\n  el.dispatchEvent(e);\n}\n\n/*  */\n\n// recursively search for possible transition defined inside the component root\nfunction locateNode (vnode) {\n  return vnode.componentInstance && (!vnode.data || !vnode.data.transition)\n    ? locateNode(vnode.componentInstance._vnode)\n    : vnode\n}\n\nvar show = {\n  bind: function bind (el, ref, vnode) {\n    var value = ref.value;\n\n    vnode = locateNode(vnode);\n    var transition$$1 = vnode.data && vnode.data.transition;\n    var originalDisplay = el.__vOriginalDisplay =\n      el.style.display === 'none' ? '' : el.style.display;\n    if (value && transition$$1) {\n      vnode.data.show = true;\n      enter(vnode, function () {\n        el.style.display = originalDisplay;\n      });\n    } else {\n      el.style.display = value ? originalDisplay : 'none';\n    }\n  },\n\n  update: function update (el, ref, vnode) {\n    var value = ref.value;\n    var oldValue = ref.oldValue;\n\n    /* istanbul ignore if */\n    if (!value === !oldValue) { return }\n    vnode = locateNode(vnode);\n    var transition$$1 = vnode.data && vnode.data.transition;\n    if (transition$$1) {\n      vnode.data.show = true;\n      if (value) {\n        enter(vnode, function () {\n          el.style.display = el.__vOriginalDisplay;\n        });\n      } else {\n        leave(vnode, function () {\n          el.style.display = 'none';\n        });\n      }\n    } else {\n      el.style.display = value ? el.__vOriginalDisplay : 'none';\n    }\n  },\n\n  unbind: function unbind (\n    el,\n    binding,\n    vnode,\n    oldVnode,\n    isDestroy\n  ) {\n    if (!isDestroy) {\n      el.style.display = el.__vOriginalDisplay;\n    }\n  }\n};\n\nvar platformDirectives = {\n  model: directive,\n  show: show\n};\n\n/*  */\n\nvar transitionProps = {\n  name: String,\n  appear: Boolean,\n  css: Boolean,\n  mode: String,\n  type: String,\n  enterClass: String,\n  leaveClass: String,\n  enterToClass: String,\n  leaveToClass: String,\n  enterActiveClass: String,\n  leaveActiveClass: String,\n  appearClass: String,\n  appearActiveClass: String,\n  appearToClass: String,\n  duration: [Number, String, Object]\n};\n\n// in case the child is also an abstract component, e.g. <keep-alive>\n// we want to recursively retrieve the real component to be rendered\nfunction getRealChild (vnode) {\n  var compOptions = vnode && vnode.componentOptions;\n  if (compOptions && compOptions.Ctor.options.abstract) {\n    return getRealChild(getFirstComponentChild(compOptions.children))\n  } else {\n    return vnode\n  }\n}\n\nfunction extractTransitionData (comp) {\n  var data = {};\n  var options = comp.$options;\n  // props\n  for (var key in options.propsData) {\n    data[key] = comp[key];\n  }\n  // events.\n  // extract listeners and pass them directly to the transition methods\n  var listeners = options._parentListeners;\n  for (var key$1 in listeners) {\n    data[camelize(key$1)] = listeners[key$1];\n  }\n  return data\n}\n\nfunction placeholder (h, rawChild) {\n  if (/\\d-keep-alive$/.test(rawChild.tag)) {\n    return h('keep-alive', {\n      props: rawChild.componentOptions.propsData\n    })\n  }\n}\n\nfunction hasParentTransition (vnode) {\n  while ((vnode = vnode.parent)) {\n    if (vnode.data.transition) {\n      return true\n    }\n  }\n}\n\nfunction isSameChild (child, oldChild) {\n  return oldChild.key === child.key && oldChild.tag === child.tag\n}\n\nvar isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };\n\nvar isVShowDirective = function (d) { return d.name === 'show'; };\n\nvar Transition = {\n  name: 'transition',\n  props: transitionProps,\n  abstract: true,\n\n  render: function render (h) {\n    var this$1 = this;\n\n    var children = this.$slots.default;\n    if (!children) {\n      return\n    }\n\n    // filter out text nodes (possible whitespaces)\n    children = children.filter(isNotTextNode);\n    /* istanbul ignore if */\n    if (!children.length) {\n      return\n    }\n\n    // warn multiple elements\n    if (process.env.NODE_ENV !== 'production' && children.length > 1) {\n      warn(\n        '<transition> can only be used on a single element. Use ' +\n        '<transition-group> for lists.',\n        this.$parent\n      );\n    }\n\n    var mode = this.mode;\n\n    // warn invalid mode\n    if (process.env.NODE_ENV !== 'production' &&\n      mode && mode !== 'in-out' && mode !== 'out-in'\n    ) {\n      warn(\n        'invalid <transition> mode: ' + mode,\n        this.$parent\n      );\n    }\n\n    var rawChild = children[0];\n\n    // if this is a component root node and the component's\n    // parent container node also has transition, skip.\n    if (hasParentTransition(this.$vnode)) {\n      return rawChild\n    }\n\n    // apply transition data to child\n    // use getRealChild() to ignore abstract components e.g. keep-alive\n    var child = getRealChild(rawChild);\n    /* istanbul ignore if */\n    if (!child) {\n      return rawChild\n    }\n\n    if (this._leaving) {\n      return placeholder(h, rawChild)\n    }\n\n    // ensure a key that is unique to the vnode type and to this transition\n    // component instance. This key will be used to remove pending leaving nodes\n    // during entering.\n    var id = \"__transition-\" + (this._uid) + \"-\";\n    child.key = child.key == null\n      ? child.isComment\n        ? id + 'comment'\n        : id + child.tag\n      : isPrimitive(child.key)\n        ? (String(child.key).indexOf(id) === 0 ? child.key : id + child.key)\n        : child.key;\n\n    var data = (child.data || (child.data = {})).transition = extractTransitionData(this);\n    var oldRawChild = this._vnode;\n    var oldChild = getRealChild(oldRawChild);\n\n    // mark v-show\n    // so that the transition module can hand over the control to the directive\n    if (child.data.directives && child.data.directives.some(isVShowDirective)) {\n      child.data.show = true;\n    }\n\n    if (\n      oldChild &&\n      oldChild.data &&\n      !isSameChild(child, oldChild) &&\n      !isAsyncPlaceholder(oldChild) &&\n      // #6687 component root is a comment node\n      !(oldChild.componentInstance && oldChild.componentInstance._vnode.isComment)\n    ) {\n      // replace old child transition data with fresh one\n      // important for dynamic transitions!\n      var oldData = oldChild.data.transition = extend({}, data);\n      // handle transition mode\n      if (mode === 'out-in') {\n        // return placeholder node and queue update when leave finishes\n        this._leaving = true;\n        mergeVNodeHook(oldData, 'afterLeave', function () {\n          this$1._leaving = false;\n          this$1.$forceUpdate();\n        });\n        return placeholder(h, rawChild)\n      } else if (mode === 'in-out') {\n        if (isAsyncPlaceholder(child)) {\n          return oldRawChild\n        }\n        var delayedLeave;\n        var performLeave = function () { delayedLeave(); };\n        mergeVNodeHook(data, 'afterEnter', performLeave);\n        mergeVNodeHook(data, 'enterCancelled', performLeave);\n        mergeVNodeHook(oldData, 'delayLeave', function (leave) { delayedLeave = leave; });\n      }\n    }\n\n    return rawChild\n  }\n};\n\n/*  */\n\nvar props = extend({\n  tag: String,\n  moveClass: String\n}, transitionProps);\n\ndelete props.mode;\n\nvar TransitionGroup = {\n  props: props,\n\n  beforeMount: function beforeMount () {\n    var this$1 = this;\n\n    var update = this._update;\n    this._update = function (vnode, hydrating) {\n      var restoreActiveInstance = setActiveInstance(this$1);\n      // force removing pass\n      this$1.__patch__(\n        this$1._vnode,\n        this$1.kept,\n        false, // hydrating\n        true // removeOnly (!important, avoids unnecessary moves)\n      );\n      this$1._vnode = this$1.kept;\n      restoreActiveInstance();\n      update.call(this$1, vnode, hydrating);\n    };\n  },\n\n  render: function render (h) {\n    var tag = this.tag || this.$vnode.data.tag || 'span';\n    var map = Object.create(null);\n    var prevChildren = this.prevChildren = this.children;\n    var rawChildren = this.$slots.default || [];\n    var children = this.children = [];\n    var transitionData = extractTransitionData(this);\n\n    for (var i = 0; i < rawChildren.length; i++) {\n      var c = rawChildren[i];\n      if (c.tag) {\n        if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {\n          children.push(c);\n          map[c.key] = c\n          ;(c.data || (c.data = {})).transition = transitionData;\n        } else if (process.env.NODE_ENV !== 'production') {\n          var opts = c.componentOptions;\n          var name = opts ? (opts.Ctor.options.name || opts.tag || '') : c.tag;\n          warn((\"<transition-group> children must be keyed: <\" + name + \">\"));\n        }\n      }\n    }\n\n    if (prevChildren) {\n      var kept = [];\n      var removed = [];\n      for (var i$1 = 0; i$1 < prevChildren.length; i$1++) {\n        var c$1 = prevChildren[i$1];\n        c$1.data.transition = transitionData;\n        c$1.data.pos = c$1.elm.getBoundingClientRect();\n        if (map[c$1.key]) {\n          kept.push(c$1);\n        } else {\n          removed.push(c$1);\n        }\n      }\n      this.kept = h(tag, null, kept);\n      this.removed = removed;\n    }\n\n    return h(tag, null, children)\n  },\n\n  updated: function updated () {\n    var children = this.prevChildren;\n    var moveClass = this.moveClass || ((this.name || 'v') + '-move');\n    if (!children.length || !this.hasMove(children[0].elm, moveClass)) {\n      return\n    }\n\n    // we divide the work into three loops to avoid mixing DOM reads and writes\n    // in each iteration - which helps prevent layout thrashing.\n    children.forEach(callPendingCbs);\n    children.forEach(recordPosition);\n    children.forEach(applyTranslation);\n\n    // force reflow to put everything in position\n    // assign to this to avoid being removed in tree-shaking\n    // $flow-disable-line\n    this._reflow = document.body.offsetHeight;\n\n    children.forEach(function (c) {\n      if (c.data.moved) {\n        var el = c.elm;\n        var s = el.style;\n        addTransitionClass(el, moveClass);\n        s.transform = s.WebkitTransform = s.transitionDuration = '';\n        el.addEventListener(transitionEndEvent, el._moveCb = function cb (e) {\n          if (e && e.target !== el) {\n            return\n          }\n          if (!e || /transform$/.test(e.propertyName)) {\n            el.removeEventListener(transitionEndEvent, cb);\n            el._moveCb = null;\n            removeTransitionClass(el, moveClass);\n          }\n        });\n      }\n    });\n  },\n\n  methods: {\n    hasMove: function hasMove (el, moveClass) {\n      /* istanbul ignore if */\n      if (!hasTransition) {\n        return false\n      }\n      /* istanbul ignore if */\n      if (this._hasMove) {\n        return this._hasMove\n      }\n      // Detect whether an element with the move class applied has\n      // CSS transitions. Since the element may be inside an entering\n      // transition at this very moment, we make a clone of it and remove\n      // all other transition classes applied to ensure only the move class\n      // is applied.\n      var clone = el.cloneNode();\n      if (el._transitionClasses) {\n        el._transitionClasses.forEach(function (cls) { removeClass(clone, cls); });\n      }\n      addClass(clone, moveClass);\n      clone.style.display = 'none';\n      this.$el.appendChild(clone);\n      var info = getTransitionInfo(clone);\n      this.$el.removeChild(clone);\n      return (this._hasMove = info.hasTransform)\n    }\n  }\n};\n\nfunction callPendingCbs (c) {\n  /* istanbul ignore if */\n  if (c.elm._moveCb) {\n    c.elm._moveCb();\n  }\n  /* istanbul ignore if */\n  if (c.elm._enterCb) {\n    c.elm._enterCb();\n  }\n}\n\nfunction recordPosition (c) {\n  c.data.newPos = c.elm.getBoundingClientRect();\n}\n\nfunction applyTranslation (c) {\n  var oldPos = c.data.pos;\n  var newPos = c.data.newPos;\n  var dx = oldPos.left - newPos.left;\n  var dy = oldPos.top - newPos.top;\n  if (dx || dy) {\n    c.data.moved = true;\n    var s = c.elm.style;\n    s.transform = s.WebkitTransform = \"translate(\" + dx + \"px,\" + dy + \"px)\";\n    s.transitionDuration = '0s';\n  }\n}\n\nvar platformComponents = {\n  Transition: Transition,\n  TransitionGroup: TransitionGroup\n};\n\n/*  */\n\n// install platform specific utils\nVue.config.mustUseProp = mustUseProp;\nVue.config.isReservedTag = isReservedTag;\nVue.config.isReservedAttr = isReservedAttr;\nVue.config.getTagNamespace = getTagNamespace;\nVue.config.isUnknownElement = isUnknownElement;\n\n// install platform runtime directives & components\nextend(Vue.options.directives, platformDirectives);\nextend(Vue.options.components, platformComponents);\n\n// install platform patch function\nVue.prototype.__patch__ = inBrowser ? patch : noop;\n\n// public mount method\nVue.prototype.$mount = function (\n  el,\n  hydrating\n) {\n  el = el && inBrowser ? query(el) : undefined;\n  return mountComponent(this, el, hydrating)\n};\n\n// devtools global hook\n/* istanbul ignore next */\nif (inBrowser) {\n  setTimeout(function () {\n    if (config.devtools) {\n      if (devtools) {\n        devtools.emit('init', Vue);\n      } else if (\n        process.env.NODE_ENV !== 'production' &&\n        process.env.NODE_ENV !== 'test'\n      ) {\n        console[console.info ? 'info' : 'log'](\n          'Download the Vue Devtools extension for a better development experience:\\n' +\n          'https://github.com/vuejs/vue-devtools'\n        );\n      }\n    }\n    if (process.env.NODE_ENV !== 'production' &&\n      process.env.NODE_ENV !== 'test' &&\n      config.productionTip !== false &&\n      typeof console !== 'undefined'\n    ) {\n      console[console.info ? 'info' : 'log'](\n        \"You are running Vue in development mode.\\n\" +\n        \"Make sure to turn on production mode when deploying for production.\\n\" +\n        \"See more tips at https://vuejs.org/guide/deployment.html\"\n      );\n    }\n  }, 0);\n}\n\n/*  */\n\nvar defaultTagRE = /\\{\\{((?:.|\\r?\\n)+?)\\}\\}/g;\nvar regexEscapeRE = /[-.*+?^${}()|[\\]\\/\\\\]/g;\n\nvar buildRegex = cached(function (delimiters) {\n  var open = delimiters[0].replace(regexEscapeRE, '\\\\$&');\n  var close = delimiters[1].replace(regexEscapeRE, '\\\\$&');\n  return new RegExp(open + '((?:.|\\\\n)+?)' + close, 'g')\n});\n\n\n\nfunction parseText (\n  text,\n  delimiters\n) {\n  var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;\n  if (!tagRE.test(text)) {\n    return\n  }\n  var tokens = [];\n  var rawTokens = [];\n  var lastIndex = tagRE.lastIndex = 0;\n  var match, index, tokenValue;\n  while ((match = tagRE.exec(text))) {\n    index = match.index;\n    // push text token\n    if (index > lastIndex) {\n      rawTokens.push(tokenValue = text.slice(lastIndex, index));\n      tokens.push(JSON.stringify(tokenValue));\n    }\n    // tag token\n    var exp = parseFilters(match[1].trim());\n    tokens.push((\"_s(\" + exp + \")\"));\n    rawTokens.push({ '@binding': exp });\n    lastIndex = index + match[0].length;\n  }\n  if (lastIndex < text.length) {\n    rawTokens.push(tokenValue = text.slice(lastIndex));\n    tokens.push(JSON.stringify(tokenValue));\n  }\n  return {\n    expression: tokens.join('+'),\n    tokens: rawTokens\n  }\n}\n\n/*  */\n\nfunction transformNode (el, options) {\n  var warn = options.warn || baseWarn;\n  var staticClass = getAndRemoveAttr(el, 'class');\n  if (process.env.NODE_ENV !== 'production' && staticClass) {\n    var res = parseText(staticClass, options.delimiters);\n    if (res) {\n      warn(\n        \"class=\\\"\" + staticClass + \"\\\": \" +\n        'Interpolation inside attributes has been removed. ' +\n        'Use v-bind or the colon shorthand instead. For example, ' +\n        'instead of <div class=\"{{ val }}\">, use <div :class=\"val\">.',\n        el.rawAttrsMap['class']\n      );\n    }\n  }\n  if (staticClass) {\n    el.staticClass = JSON.stringify(staticClass);\n  }\n  var classBinding = getBindingAttr(el, 'class', false /* getStatic */);\n  if (classBinding) {\n    el.classBinding = classBinding;\n  }\n}\n\nfunction genData (el) {\n  var data = '';\n  if (el.staticClass) {\n    data += \"staticClass:\" + (el.staticClass) + \",\";\n  }\n  if (el.classBinding) {\n    data += \"class:\" + (el.classBinding) + \",\";\n  }\n  return data\n}\n\nvar klass$1 = {\n  staticKeys: ['staticClass'],\n  transformNode: transformNode,\n  genData: genData\n};\n\n/*  */\n\nfunction transformNode$1 (el, options) {\n  var warn = options.warn || baseWarn;\n  var staticStyle = getAndRemoveAttr(el, 'style');\n  if (staticStyle) {\n    /* istanbul ignore if */\n    if (process.env.NODE_ENV !== 'production') {\n      var res = parseText(staticStyle, options.delimiters);\n      if (res) {\n        warn(\n          \"style=\\\"\" + staticStyle + \"\\\": \" +\n          'Interpolation inside attributes has been removed. ' +\n          'Use v-bind or the colon shorthand instead. For example, ' +\n          'instead of <div style=\"{{ val }}\">, use <div :style=\"val\">.',\n          el.rawAttrsMap['style']\n        );\n      }\n    }\n    el.staticStyle = JSON.stringify(parseStyleText(staticStyle));\n  }\n\n  var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);\n  if (styleBinding) {\n    el.styleBinding = styleBinding;\n  }\n}\n\nfunction genData$1 (el) {\n  var data = '';\n  if (el.staticStyle) {\n    data += \"staticStyle:\" + (el.staticStyle) + \",\";\n  }\n  if (el.styleBinding) {\n    data += \"style:(\" + (el.styleBinding) + \"),\";\n  }\n  return data\n}\n\nvar style$1 = {\n  staticKeys: ['staticStyle'],\n  transformNode: transformNode$1,\n  genData: genData$1\n};\n\n/*  */\n\nvar decoder;\n\nvar he = {\n  decode: function decode (html) {\n    decoder = decoder || document.createElement('div');\n    decoder.innerHTML = html;\n    return decoder.textContent\n  }\n};\n\n/*  */\n\nvar isUnaryTag = makeMap(\n  'area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +\n  'link,meta,param,source,track,wbr'\n);\n\n// Elements that you can, intentionally, leave open\n// (and which close themselves)\nvar canBeLeftOpenTag = makeMap(\n  'colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source'\n);\n\n// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3\n// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content\nvar isNonPhrasingTag = makeMap(\n  'address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +\n  'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +\n  'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +\n  'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +\n  'title,tr,track'\n);\n\n/**\n * Not type-checking this file because it's mostly vendor code.\n */\n\n// Regular Expressions for parsing tags and attributes\nvar attribute = /^\\s*([^\\s\"'<>\\/=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/;\nvar dynamicArgAttribute = /^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+\\][^\\s\"'<>\\/=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/;\nvar ncname = \"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\" + (unicodeRegExp.source) + \"]*\";\nvar qnameCapture = \"((?:\" + ncname + \"\\\\:)?\" + ncname + \")\";\nvar startTagOpen = new RegExp((\"^<\" + qnameCapture));\nvar startTagClose = /^\\s*(\\/?)>/;\nvar endTag = new RegExp((\"^<\\\\/\" + qnameCapture + \"[^>]*>\"));\nvar doctype = /^<!DOCTYPE [^>]+>/i;\n// #7298: escape - to avoid being pased as HTML comment when inlined in page\nvar comment = /^<!\\--/;\nvar conditionalComment = /^<!\\[/;\n\n// Special Elements (can contain anything)\nvar isPlainTextElement = makeMap('script,style,textarea', true);\nvar reCache = {};\n\nvar decodingMap = {\n  '&lt;': '<',\n  '&gt;': '>',\n  '&quot;': '\"',\n  '&amp;': '&',\n  '&#10;': '\\n',\n  '&#9;': '\\t',\n  '&#39;': \"'\"\n};\nvar encodedAttr = /&(?:lt|gt|quot|amp|#39);/g;\nvar encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g;\n\n// #5992\nvar isIgnoreNewlineTag = makeMap('pre,textarea', true);\nvar shouldIgnoreFirstNewline = function (tag, html) { return tag && isIgnoreNewlineTag(tag) && html[0] === '\\n'; };\n\nfunction decodeAttr (value, shouldDecodeNewlines) {\n  var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;\n  return value.replace(re, function (match) { return decodingMap[match]; })\n}\n\nfunction parseHTML (html, options) {\n  var stack = [];\n  var expectHTML = options.expectHTML;\n  var isUnaryTag$$1 = options.isUnaryTag || no;\n  var canBeLeftOpenTag$$1 = options.canBeLeftOpenTag || no;\n  var index = 0;\n  var last, lastTag;\n  while (html) {\n    last = html;\n    // Make sure we're not in a plaintext content element like script/style\n    if (!lastTag || !isPlainTextElement(lastTag)) {\n      var textEnd = html.indexOf('<');\n      if (textEnd === 0) {\n        // Comment:\n        if (comment.test(html)) {\n          var commentEnd = html.indexOf('-->');\n\n          if (commentEnd >= 0) {\n            if (options.shouldKeepComment) {\n              options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);\n            }\n            advance(commentEnd + 3);\n            continue\n          }\n        }\n\n        // http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment\n        if (conditionalComment.test(html)) {\n          var conditionalEnd = html.indexOf(']>');\n\n          if (conditionalEnd >= 0) {\n            advance(conditionalEnd + 2);\n            continue\n          }\n        }\n\n        // Doctype:\n        var doctypeMatch = html.match(doctype);\n        if (doctypeMatch) {\n          advance(doctypeMatch[0].length);\n          continue\n        }\n\n        // End tag:\n        var endTagMatch = html.match(endTag);\n        if (endTagMatch) {\n          var curIndex = index;\n          advance(endTagMatch[0].length);\n          parseEndTag(endTagMatch[1], curIndex, index);\n          continue\n        }\n\n        // Start tag:\n        var startTagMatch = parseStartTag();\n        if (startTagMatch) {\n          handleStartTag(startTagMatch);\n          if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {\n            advance(1);\n          }\n          continue\n        }\n      }\n\n      var text = (void 0), rest = (void 0), next = (void 0);\n      if (textEnd >= 0) {\n        rest = html.slice(textEnd);\n        while (\n          !endTag.test(rest) &&\n          !startTagOpen.test(rest) &&\n          !comment.test(rest) &&\n          !conditionalComment.test(rest)\n        ) {\n          // < in plain text, be forgiving and treat it as text\n          next = rest.indexOf('<', 1);\n          if (next < 0) { break }\n          textEnd += next;\n          rest = html.slice(textEnd);\n        }\n        text = html.substring(0, textEnd);\n      }\n\n      if (textEnd < 0) {\n        text = html;\n      }\n\n      if (text) {\n        advance(text.length);\n      }\n\n      if (options.chars && text) {\n        options.chars(text, index - text.length, index);\n      }\n    } else {\n      var endTagLength = 0;\n      var stackedTag = lastTag.toLowerCase();\n      var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\\\s\\\\S]*?)(</' + stackedTag + '[^>]*>)', 'i'));\n      var rest$1 = html.replace(reStackedTag, function (all, text, endTag) {\n        endTagLength = endTag.length;\n        if (!isPlainTextElement(stackedTag) && stackedTag !== 'noscript') {\n          text = text\n            .replace(/<!\\--([\\s\\S]*?)-->/g, '$1') // #7298\n            .replace(/<!\\[CDATA\\[([\\s\\S]*?)]]>/g, '$1');\n        }\n        if (shouldIgnoreFirstNewline(stackedTag, text)) {\n          text = text.slice(1);\n        }\n        if (options.chars) {\n          options.chars(text);\n        }\n        return ''\n      });\n      index += html.length - rest$1.length;\n      html = rest$1;\n      parseEndTag(stackedTag, index - endTagLength, index);\n    }\n\n    if (html === last) {\n      options.chars && options.chars(html);\n      if (process.env.NODE_ENV !== 'production' && !stack.length && options.warn) {\n        options.warn((\"Mal-formatted tag at end of template: \\\"\" + html + \"\\\"\"), { start: index + html.length });\n      }\n      break\n    }\n  }\n\n  // Clean up any remaining tags\n  parseEndTag();\n\n  function advance (n) {\n    index += n;\n    html = html.substring(n);\n  }\n\n  function parseStartTag () {\n    var start = html.match(startTagOpen);\n    if (start) {\n      var match = {\n        tagName: start[1],\n        attrs: [],\n        start: index\n      };\n      advance(start[0].length);\n      var end, attr;\n      while (!(end = html.match(startTagClose)) && (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {\n        attr.start = index;\n        advance(attr[0].length);\n        attr.end = index;\n        match.attrs.push(attr);\n      }\n      if (end) {\n        match.unarySlash = end[1];\n        advance(end[0].length);\n        match.end = index;\n        return match\n      }\n    }\n  }\n\n  function handleStartTag (match) {\n    var tagName = match.tagName;\n    var unarySlash = match.unarySlash;\n\n    if (expectHTML) {\n      if (lastTag === 'p' && isNonPhrasingTag(tagName)) {\n        parseEndTag(lastTag);\n      }\n      if (canBeLeftOpenTag$$1(tagName) && lastTag === tagName) {\n        parseEndTag(tagName);\n      }\n    }\n\n    var unary = isUnaryTag$$1(tagName) || !!unarySlash;\n\n    var l = match.attrs.length;\n    var attrs = new Array(l);\n    for (var i = 0; i < l; i++) {\n      var args = match.attrs[i];\n      var value = args[3] || args[4] || args[5] || '';\n      var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'\n        ? options.shouldDecodeNewlinesForHref\n        : options.shouldDecodeNewlines;\n      attrs[i] = {\n        name: args[1],\n        value: decodeAttr(value, shouldDecodeNewlines)\n      };\n      if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {\n        attrs[i].start = args.start + args[0].match(/^\\s*/).length;\n        attrs[i].end = args.end;\n      }\n    }\n\n    if (!unary) {\n      stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs, start: match.start, end: match.end });\n      lastTag = tagName;\n    }\n\n    if (options.start) {\n      options.start(tagName, attrs, unary, match.start, match.end);\n    }\n  }\n\n  function parseEndTag (tagName, start, end) {\n    var pos, lowerCasedTagName;\n    if (start == null) { start = index; }\n    if (end == null) { end = index; }\n\n    // Find the closest opened tag of the same type\n    if (tagName) {\n      lowerCasedTagName = tagName.toLowerCase();\n      for (pos = stack.length - 1; pos >= 0; pos--) {\n        if (stack[pos].lowerCasedTag === lowerCasedTagName) {\n          break\n        }\n      }\n    } else {\n      // If no tag name is provided, clean shop\n      pos = 0;\n    }\n\n    if (pos >= 0) {\n      // Close all the open elements, up the stack\n      for (var i = stack.length - 1; i >= pos; i--) {\n        if (process.env.NODE_ENV !== 'production' &&\n          (i > pos || !tagName) &&\n          options.warn\n        ) {\n          options.warn(\n            (\"tag <\" + (stack[i].tag) + \"> has no matching end tag.\"),\n            { start: stack[i].start, end: stack[i].end }\n          );\n        }\n        if (options.end) {\n          options.end(stack[i].tag, start, end);\n        }\n      }\n\n      // Remove the open elements from the stack\n      stack.length = pos;\n      lastTag = pos && stack[pos - 1].tag;\n    } else if (lowerCasedTagName === 'br') {\n      if (options.start) {\n        options.start(tagName, [], true, start, end);\n      }\n    } else if (lowerCasedTagName === 'p') {\n      if (options.start) {\n        options.start(tagName, [], false, start, end);\n      }\n      if (options.end) {\n        options.end(tagName, start, end);\n      }\n    }\n  }\n}\n\n/*  */\n\nvar onRE = /^@|^v-on:/;\nvar dirRE = /^v-|^@|^:/;\nvar forAliasRE = /([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/;\nvar forIteratorRE = /,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/;\nvar stripParensRE = /^\\(|\\)$/g;\nvar dynamicArgRE = /^\\[.*\\]$/;\n\nvar argRE = /:(.*)$/;\nvar bindRE = /^:|^\\.|^v-bind:/;\nvar modifierRE = /\\.[^.\\]]+(?=[^\\]]*$)/g;\n\nvar slotRE = /^v-slot(:|$)|^#/;\n\nvar lineBreakRE = /[\\r\\n]/;\nvar whitespaceRE$1 = /\\s+/g;\n\nvar invalidAttributeRE = /[\\s\"'<>\\/=]/;\n\nvar decodeHTMLCached = cached(he.decode);\n\nvar emptySlotScopeToken = \"_empty_\";\n\n// configurable state\nvar warn$2;\nvar delimiters;\nvar transforms;\nvar preTransforms;\nvar postTransforms;\nvar platformIsPreTag;\nvar platformMustUseProp;\nvar platformGetTagNamespace;\nvar maybeComponent;\n\nfunction createASTElement (\n  tag,\n  attrs,\n  parent\n) {\n  return {\n    type: 1,\n    tag: tag,\n    attrsList: attrs,\n    attrsMap: makeAttrsMap(attrs),\n    rawAttrsMap: {},\n    parent: parent,\n    children: []\n  }\n}\n\n/**\n * Convert HTML string to AST.\n */\nfunction parse (\n  template,\n  options\n) {\n  warn$2 = options.warn || baseWarn;\n\n  platformIsPreTag = options.isPreTag || no;\n  platformMustUseProp = options.mustUseProp || no;\n  platformGetTagNamespace = options.getTagNamespace || no;\n  var isReservedTag = options.isReservedTag || no;\n  maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\n\n  transforms = pluckModuleFunction(options.modules, 'transformNode');\n  preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');\n  postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');\n\n  delimiters = options.delimiters;\n\n  var stack = [];\n  var preserveWhitespace = options.preserveWhitespace !== false;\n  var whitespaceOption = options.whitespace;\n  var root;\n  var currentParent;\n  var inVPre = false;\n  var inPre = false;\n  var warned = false;\n\n  function warnOnce (msg, range) {\n    if (!warned) {\n      warned = true;\n      warn$2(msg, range);\n    }\n  }\n\n  function closeElement (element) {\n    trimEndingWhitespace(element);\n    if (!inVPre && !element.processed) {\n      element = processElement(element, options);\n    }\n    // tree management\n    if (!stack.length && element !== root) {\n      // allow root elements with v-if, v-else-if and v-else\n      if (root.if && (element.elseif || element.else)) {\n        if (process.env.NODE_ENV !== 'production') {\n          checkRootConstraints(element);\n        }\n        addIfCondition(root, {\n          exp: element.elseif,\n          block: element\n        });\n      } else if (process.env.NODE_ENV !== 'production') {\n        warnOnce(\n          \"Component template should contain exactly one root element. \" +\n          \"If you are using v-if on multiple elements, \" +\n          \"use v-else-if to chain them instead.\",\n          { start: element.start }\n        );\n      }\n    }\n    if (currentParent && !element.forbidden) {\n      if (element.elseif || element.else) {\n        processIfConditions(element, currentParent);\n      } else {\n        if (element.slotScope) {\n          // scoped slot\n          // keep it in the children list so that v-else(-if) conditions can\n          // find it as the prev node.\n          var name = element.slotTarget || '\"default\"'\n          ;(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element;\n        }\n        currentParent.children.push(element);\n        element.parent = currentParent;\n      }\n    }\n\n    // final children cleanup\n    // filter out scoped slots\n    element.children = element.children.filter(function (c) { return !(c).slotScope; });\n    // remove trailing whitespace node again\n    trimEndingWhitespace(element);\n\n    // check pre state\n    if (element.pre) {\n      inVPre = false;\n    }\n    if (platformIsPreTag(element.tag)) {\n      inPre = false;\n    }\n    // apply post-transforms\n    for (var i = 0; i < postTransforms.length; i++) {\n      postTransforms[i](element, options);\n    }\n  }\n\n  function trimEndingWhitespace (el) {\n    // remove trailing whitespace node\n    if (!inPre) {\n      var lastNode;\n      while (\n        (lastNode = el.children[el.children.length - 1]) &&\n        lastNode.type === 3 &&\n        lastNode.text === ' '\n      ) {\n        el.children.pop();\n      }\n    }\n  }\n\n  function checkRootConstraints (el) {\n    if (el.tag === 'slot' || el.tag === 'template') {\n      warnOnce(\n        \"Cannot use <\" + (el.tag) + \"> as component root element because it may \" +\n        'contain multiple nodes.',\n        { start: el.start }\n      );\n    }\n    if (el.attrsMap.hasOwnProperty('v-for')) {\n      warnOnce(\n        'Cannot use v-for on stateful component root element because ' +\n        'it renders multiple elements.',\n        el.rawAttrsMap['v-for']\n      );\n    }\n  }\n\n  parseHTML(template, {\n    warn: warn$2,\n    expectHTML: options.expectHTML,\n    isUnaryTag: options.isUnaryTag,\n    canBeLeftOpenTag: options.canBeLeftOpenTag,\n    shouldDecodeNewlines: options.shouldDecodeNewlines,\n    shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,\n    shouldKeepComment: options.comments,\n    outputSourceRange: options.outputSourceRange,\n    start: function start (tag, attrs, unary, start$1, end) {\n      // check namespace.\n      // inherit parent ns if there is one\n      var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);\n\n      // handle IE svg bug\n      /* istanbul ignore if */\n      if (isIE && ns === 'svg') {\n        attrs = guardIESVGBug(attrs);\n      }\n\n      var element = createASTElement(tag, attrs, currentParent);\n      if (ns) {\n        element.ns = ns;\n      }\n\n      if (process.env.NODE_ENV !== 'production') {\n        if (options.outputSourceRange) {\n          element.start = start$1;\n          element.end = end;\n          element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {\n            cumulated[attr.name] = attr;\n            return cumulated\n          }, {});\n        }\n        attrs.forEach(function (attr) {\n          if (invalidAttributeRE.test(attr.name)) {\n            warn$2(\n              \"Invalid dynamic argument expression: attribute names cannot contain \" +\n              \"spaces, quotes, <, >, / or =.\",\n              {\n                start: attr.start + attr.name.indexOf(\"[\"),\n                end: attr.start + attr.name.length\n              }\n            );\n          }\n        });\n      }\n\n      if (isForbiddenTag(element) && !isServerRendering()) {\n        element.forbidden = true;\n        process.env.NODE_ENV !== 'production' && warn$2(\n          'Templates should only be responsible for mapping the state to the ' +\n          'UI. Avoid placing tags with side-effects in your templates, such as ' +\n          \"<\" + tag + \">\" + ', as they will not be parsed.',\n          { start: element.start }\n        );\n      }\n\n      // apply pre-transforms\n      for (var i = 0; i < preTransforms.length; i++) {\n        element = preTransforms[i](element, options) || element;\n      }\n\n      if (!inVPre) {\n        processPre(element);\n        if (element.pre) {\n          inVPre = true;\n        }\n      }\n      if (platformIsPreTag(element.tag)) {\n        inPre = true;\n      }\n      if (inVPre) {\n        processRawAttrs(element);\n      } else if (!element.processed) {\n        // structural directives\n        processFor(element);\n        processIf(element);\n        processOnce(element);\n      }\n\n      if (!root) {\n        root = element;\n        if (process.env.NODE_ENV !== 'production') {\n          checkRootConstraints(root);\n        }\n      }\n\n      if (!unary) {\n        currentParent = element;\n        stack.push(element);\n      } else {\n        closeElement(element);\n      }\n    },\n\n    end: function end (tag, start, end$1) {\n      var element = stack[stack.length - 1];\n      // pop stack\n      stack.length -= 1;\n      currentParent = stack[stack.length - 1];\n      if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {\n        element.end = end$1;\n      }\n      closeElement(element);\n    },\n\n    chars: function chars (text, start, end) {\n      if (!currentParent) {\n        if (process.env.NODE_ENV !== 'production') {\n          if (text === template) {\n            warnOnce(\n              'Component template requires a root element, rather than just text.',\n              { start: start }\n            );\n          } else if ((text = text.trim())) {\n            warnOnce(\n              (\"text \\\"\" + text + \"\\\" outside root element will be ignored.\"),\n              { start: start }\n            );\n          }\n        }\n        return\n      }\n      // IE textarea placeholder bug\n      /* istanbul ignore if */\n      if (isIE &&\n        currentParent.tag === 'textarea' &&\n        currentParent.attrsMap.placeholder === text\n      ) {\n        return\n      }\n      var children = currentParent.children;\n      if (inPre || text.trim()) {\n        text = isTextTag(currentParent) ? text : decodeHTMLCached(text);\n      } else if (!children.length) {\n        // remove the whitespace-only node right after an opening tag\n        text = '';\n      } else if (whitespaceOption) {\n        if (whitespaceOption === 'condense') {\n          // in condense mode, remove the whitespace node if it contains\n          // line break, otherwise condense to a single space\n          text = lineBreakRE.test(text) ? '' : ' ';\n        } else {\n          text = ' ';\n        }\n      } else {\n        text = preserveWhitespace ? ' ' : '';\n      }\n      if (text) {\n        if (!inPre && whitespaceOption === 'condense') {\n          // condense consecutive whitespaces into single space\n          text = text.replace(whitespaceRE$1, ' ');\n        }\n        var res;\n        var child;\n        if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {\n          child = {\n            type: 2,\n            expression: res.expression,\n            tokens: res.tokens,\n            text: text\n          };\n        } else if (text !== ' ' || !children.length || children[children.length - 1].text !== ' ') {\n          child = {\n            type: 3,\n            text: text\n          };\n        }\n        if (child) {\n          if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {\n            child.start = start;\n            child.end = end;\n          }\n          children.push(child);\n        }\n      }\n    },\n    comment: function comment (text, start, end) {\n      // adding anyting as a sibling to the root node is forbidden\n      // comments should still be allowed, but ignored\n      if (currentParent) {\n        var child = {\n          type: 3,\n          text: text,\n          isComment: true\n        };\n        if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {\n          child.start = start;\n          child.end = end;\n        }\n        currentParent.children.push(child);\n      }\n    }\n  });\n  return root\n}\n\nfunction processPre (el) {\n  if (getAndRemoveAttr(el, 'v-pre') != null) {\n    el.pre = true;\n  }\n}\n\nfunction processRawAttrs (el) {\n  var list = el.attrsList;\n  var len = list.length;\n  if (len) {\n    var attrs = el.attrs = new Array(len);\n    for (var i = 0; i < len; i++) {\n      attrs[i] = {\n        name: list[i].name,\n        value: JSON.stringify(list[i].value)\n      };\n      if (list[i].start != null) {\n        attrs[i].start = list[i].start;\n        attrs[i].end = list[i].end;\n      }\n    }\n  } else if (!el.pre) {\n    // non root node in pre blocks with no attributes\n    el.plain = true;\n  }\n}\n\nfunction processElement (\n  element,\n  options\n) {\n  processKey(element);\n\n  // determine whether this is a plain element after\n  // removing structural attributes\n  element.plain = (\n    !element.key &&\n    !element.scopedSlots &&\n    !element.attrsList.length\n  );\n\n  processRef(element);\n  processSlotContent(element);\n  processSlotOutlet(element);\n  processComponent(element);\n  for (var i = 0; i < transforms.length; i++) {\n    element = transforms[i](element, options) || element;\n  }\n  processAttrs(element);\n  return element\n}\n\nfunction processKey (el) {\n  var exp = getBindingAttr(el, 'key');\n  if (exp) {\n    if (process.env.NODE_ENV !== 'production') {\n      if (el.tag === 'template') {\n        warn$2(\n          \"<template> cannot be keyed. Place the key on real elements instead.\",\n          getRawBindingAttr(el, 'key')\n        );\n      }\n      if (el.for) {\n        var iterator = el.iterator2 || el.iterator1;\n        var parent = el.parent;\n        if (iterator && iterator === exp && parent && parent.tag === 'transition-group') {\n          warn$2(\n            \"Do not use v-for index as key on <transition-group> children, \" +\n            \"this is the same as not using keys.\",\n            getRawBindingAttr(el, 'key'),\n            true /* tip */\n          );\n        }\n      }\n    }\n    el.key = exp;\n  }\n}\n\nfunction processRef (el) {\n  var ref = getBindingAttr(el, 'ref');\n  if (ref) {\n    el.ref = ref;\n    el.refInFor = checkInFor(el);\n  }\n}\n\nfunction processFor (el) {\n  var exp;\n  if ((exp = getAndRemoveAttr(el, 'v-for'))) {\n    var res = parseFor(exp);\n    if (res) {\n      extend(el, res);\n    } else if (process.env.NODE_ENV !== 'production') {\n      warn$2(\n        (\"Invalid v-for expression: \" + exp),\n        el.rawAttrsMap['v-for']\n      );\n    }\n  }\n}\n\n\n\nfunction parseFor (exp) {\n  var inMatch = exp.match(forAliasRE);\n  if (!inMatch) { return }\n  var res = {};\n  res.for = inMatch[2].trim();\n  var alias = inMatch[1].trim().replace(stripParensRE, '');\n  var iteratorMatch = alias.match(forIteratorRE);\n  if (iteratorMatch) {\n    res.alias = alias.replace(forIteratorRE, '').trim();\n    res.iterator1 = iteratorMatch[1].trim();\n    if (iteratorMatch[2]) {\n      res.iterator2 = iteratorMatch[2].trim();\n    }\n  } else {\n    res.alias = alias;\n  }\n  return res\n}\n\nfunction processIf (el) {\n  var exp = getAndRemoveAttr(el, 'v-if');\n  if (exp) {\n    el.if = exp;\n    addIfCondition(el, {\n      exp: exp,\n      block: el\n    });\n  } else {\n    if (getAndRemoveAttr(el, 'v-else') != null) {\n      el.else = true;\n    }\n    var elseif = getAndRemoveAttr(el, 'v-else-if');\n    if (elseif) {\n      el.elseif = elseif;\n    }\n  }\n}\n\nfunction processIfConditions (el, parent) {\n  var prev = findPrevElement(parent.children);\n  if (prev && prev.if) {\n    addIfCondition(prev, {\n      exp: el.elseif,\n      block: el\n    });\n  } else if (process.env.NODE_ENV !== 'production') {\n    warn$2(\n      \"v-\" + (el.elseif ? ('else-if=\"' + el.elseif + '\"') : 'else') + \" \" +\n      \"used on element <\" + (el.tag) + \"> without corresponding v-if.\",\n      el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']\n    );\n  }\n}\n\nfunction findPrevElement (children) {\n  var i = children.length;\n  while (i--) {\n    if (children[i].type === 1) {\n      return children[i]\n    } else {\n      if (process.env.NODE_ENV !== 'production' && children[i].text !== ' ') {\n        warn$2(\n          \"text \\\"\" + (children[i].text.trim()) + \"\\\" between v-if and v-else(-if) \" +\n          \"will be ignored.\",\n          children[i]\n        );\n      }\n      children.pop();\n    }\n  }\n}\n\nfunction addIfCondition (el, condition) {\n  if (!el.ifConditions) {\n    el.ifConditions = [];\n  }\n  el.ifConditions.push(condition);\n}\n\nfunction processOnce (el) {\n  var once$$1 = getAndRemoveAttr(el, 'v-once');\n  if (once$$1 != null) {\n    el.once = true;\n  }\n}\n\n// handle content being passed to a component as slot,\n// e.g. <template slot=\"xxx\">, <div slot-scope=\"xxx\">\nfunction processSlotContent (el) {\n  var slotScope;\n  if (el.tag === 'template') {\n    slotScope = getAndRemoveAttr(el, 'scope');\n    /* istanbul ignore if */\n    if (process.env.NODE_ENV !== 'production' && slotScope) {\n      warn$2(\n        \"the \\\"scope\\\" attribute for scoped slots have been deprecated and \" +\n        \"replaced by \\\"slot-scope\\\" since 2.5. The new \\\"slot-scope\\\" attribute \" +\n        \"can also be used on plain elements in addition to <template> to \" +\n        \"denote scoped slots.\",\n        el.rawAttrsMap['scope'],\n        true\n      );\n    }\n    el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');\n  } else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {\n    /* istanbul ignore if */\n    if (process.env.NODE_ENV !== 'production' && el.attrsMap['v-for']) {\n      warn$2(\n        \"Ambiguous combined usage of slot-scope and v-for on <\" + (el.tag) + \"> \" +\n        \"(v-for takes higher priority). Use a wrapper <template> for the \" +\n        \"scoped slot to make it clearer.\",\n        el.rawAttrsMap['slot-scope'],\n        true\n      );\n    }\n    el.slotScope = slotScope;\n  }\n\n  // slot=\"xxx\"\n  var slotTarget = getBindingAttr(el, 'slot');\n  if (slotTarget) {\n    el.slotTarget = slotTarget === '\"\"' ? '\"default\"' : slotTarget;\n    el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);\n    // preserve slot as an attribute for native shadow DOM compat\n    // only for non-scoped slots.\n    if (el.tag !== 'template' && !el.slotScope) {\n      addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));\n    }\n  }\n\n  // 2.6 v-slot syntax\n  {\n    if (el.tag === 'template') {\n      // v-slot on <template>\n      var slotBinding = getAndRemoveAttrByRegex(el, slotRE);\n      if (slotBinding) {\n        if (process.env.NODE_ENV !== 'production') {\n          if (el.slotTarget || el.slotScope) {\n            warn$2(\n              \"Unexpected mixed usage of different slot syntaxes.\",\n              el\n            );\n          }\n          if (el.parent && !maybeComponent(el.parent)) {\n            warn$2(\n              \"<template v-slot> can only appear at the root level inside \" +\n              \"the receiving the component\",\n              el\n            );\n          }\n        }\n        var ref = getSlotName(slotBinding);\n        var name = ref.name;\n        var dynamic = ref.dynamic;\n        el.slotTarget = name;\n        el.slotTargetDynamic = dynamic;\n        el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf\n      }\n    } else {\n      // v-slot on component, denotes default slot\n      var slotBinding$1 = getAndRemoveAttrByRegex(el, slotRE);\n      if (slotBinding$1) {\n        if (process.env.NODE_ENV !== 'production') {\n          if (!maybeComponent(el)) {\n            warn$2(\n              \"v-slot can only be used on components or <template>.\",\n              slotBinding$1\n            );\n          }\n          if (el.slotScope || el.slotTarget) {\n            warn$2(\n              \"Unexpected mixed usage of different slot syntaxes.\",\n              el\n            );\n          }\n          if (el.scopedSlots) {\n            warn$2(\n              \"To avoid scope ambiguity, the default slot should also use \" +\n              \"<template> syntax when there are other named slots.\",\n              slotBinding$1\n            );\n          }\n        }\n        // add the component's children to its default slot\n        var slots = el.scopedSlots || (el.scopedSlots = {});\n        var ref$1 = getSlotName(slotBinding$1);\n        var name$1 = ref$1.name;\n        var dynamic$1 = ref$1.dynamic;\n        var slotContainer = slots[name$1] = createASTElement('template', [], el);\n        slotContainer.slotTarget = name$1;\n        slotContainer.slotTargetDynamic = dynamic$1;\n        slotContainer.children = el.children.filter(function (c) {\n          if (!c.slotScope) {\n            c.parent = slotContainer;\n            return true\n          }\n        });\n        slotContainer.slotScope = slotBinding$1.value || emptySlotScopeToken;\n        // remove children as they are returned from scopedSlots now\n        el.children = [];\n        // mark el non-plain so data gets generated\n        el.plain = false;\n      }\n    }\n  }\n}\n\nfunction getSlotName (binding) {\n  var name = binding.name.replace(slotRE, '');\n  if (!name) {\n    if (binding.name[0] !== '#') {\n      name = 'default';\n    } else if (process.env.NODE_ENV !== 'production') {\n      warn$2(\n        \"v-slot shorthand syntax requires a slot name.\",\n        binding\n      );\n    }\n  }\n  return dynamicArgRE.test(name)\n    // dynamic [name]\n    ? { name: name.slice(1, -1), dynamic: true }\n    // static name\n    : { name: (\"\\\"\" + name + \"\\\"\"), dynamic: false }\n}\n\n// handle <slot/> outlets\nfunction processSlotOutlet (el) {\n  if (el.tag === 'slot') {\n    el.slotName = getBindingAttr(el, 'name');\n    if (process.env.NODE_ENV !== 'production' && el.key) {\n      warn$2(\n        \"`key` does not work on <slot> because slots are abstract outlets \" +\n        \"and can possibly expand into multiple elements. \" +\n        \"Use the key on a wrapping element instead.\",\n        getRawBindingAttr(el, 'key')\n      );\n    }\n  }\n}\n\nfunction processComponent (el) {\n  var binding;\n  if ((binding = getBindingAttr(el, 'is'))) {\n    el.component = binding;\n  }\n  if (getAndRemoveAttr(el, 'inline-template') != null) {\n    el.inlineTemplate = true;\n  }\n}\n\nfunction processAttrs (el) {\n  var list = el.attrsList;\n  var i, l, name, rawName, value, modifiers, syncGen, isDynamic;\n  for (i = 0, l = list.length; i < l; i++) {\n    name = rawName = list[i].name;\n    value = list[i].value;\n    if (dirRE.test(name)) {\n      // mark element as dynamic\n      el.hasBindings = true;\n      // modifiers\n      modifiers = parseModifiers(name.replace(dirRE, ''));\n      // support .foo shorthand syntax for the .prop modifier\n      if (modifiers) {\n        name = name.replace(modifierRE, '');\n      }\n      if (bindRE.test(name)) { // v-bind\n        name = name.replace(bindRE, '');\n        value = parseFilters(value);\n        isDynamic = dynamicArgRE.test(name);\n        if (isDynamic) {\n          name = name.slice(1, -1);\n        }\n        if (\n          process.env.NODE_ENV !== 'production' &&\n          value.trim().length === 0\n        ) {\n          warn$2(\n            (\"The value for a v-bind expression cannot be empty. Found in \\\"v-bind:\" + name + \"\\\"\")\n          );\n        }\n        if (modifiers) {\n          if (modifiers.prop && !isDynamic) {\n            name = camelize(name);\n            if (name === 'innerHtml') { name = 'innerHTML'; }\n          }\n          if (modifiers.camel && !isDynamic) {\n            name = camelize(name);\n          }\n          if (modifiers.sync) {\n            syncGen = genAssignmentCode(value, \"$event\");\n            if (!isDynamic) {\n              addHandler(\n                el,\n                (\"update:\" + (camelize(name))),\n                syncGen,\n                null,\n                false,\n                warn$2,\n                list[i]\n              );\n              if (hyphenate(name) !== camelize(name)) {\n                addHandler(\n                  el,\n                  (\"update:\" + (hyphenate(name))),\n                  syncGen,\n                  null,\n                  false,\n                  warn$2,\n                  list[i]\n                );\n              }\n            } else {\n              // handler w/ dynamic event name\n              addHandler(\n                el,\n                (\"\\\"update:\\\"+(\" + name + \")\"),\n                syncGen,\n                null,\n                false,\n                warn$2,\n                list[i],\n                true // dynamic\n              );\n            }\n          }\n        }\n        if ((modifiers && modifiers.prop) || (\n          !el.component && platformMustUseProp(el.tag, el.attrsMap.type, name)\n        )) {\n          addProp(el, name, value, list[i], isDynamic);\n        } else {\n          addAttr(el, name, value, list[i], isDynamic);\n        }\n      } else if (onRE.test(name)) { // v-on\n        name = name.replace(onRE, '');\n        isDynamic = dynamicArgRE.test(name);\n        if (isDynamic) {\n          name = name.slice(1, -1);\n        }\n        addHandler(el, name, value, modifiers, false, warn$2, list[i], isDynamic);\n      } else { // normal directives\n        name = name.replace(dirRE, '');\n        // parse arg\n        var argMatch = name.match(argRE);\n        var arg = argMatch && argMatch[1];\n        isDynamic = false;\n        if (arg) {\n          name = name.slice(0, -(arg.length + 1));\n          if (dynamicArgRE.test(arg)) {\n            arg = arg.slice(1, -1);\n            isDynamic = true;\n          }\n        }\n        addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);\n        if (process.env.NODE_ENV !== 'production' && name === 'model') {\n          checkForAliasModel(el, value);\n        }\n      }\n    } else {\n      // literal attribute\n      if (process.env.NODE_ENV !== 'production') {\n        var res = parseText(value, delimiters);\n        if (res) {\n          warn$2(\n            name + \"=\\\"\" + value + \"\\\": \" +\n            'Interpolation inside attributes has been removed. ' +\n            'Use v-bind or the colon shorthand instead. For example, ' +\n            'instead of <div id=\"{{ val }}\">, use <div :id=\"val\">.',\n            list[i]\n          );\n        }\n      }\n      addAttr(el, name, JSON.stringify(value), list[i]);\n      // #6887 firefox doesn't update muted state if set via attribute\n      // even immediately after element creation\n      if (!el.component &&\n          name === 'muted' &&\n          platformMustUseProp(el.tag, el.attrsMap.type, name)) {\n        addProp(el, name, 'true', list[i]);\n      }\n    }\n  }\n}\n\nfunction checkInFor (el) {\n  var parent = el;\n  while (parent) {\n    if (parent.for !== undefined) {\n      return true\n    }\n    parent = parent.parent;\n  }\n  return false\n}\n\nfunction parseModifiers (name) {\n  var match = name.match(modifierRE);\n  if (match) {\n    var ret = {};\n    match.forEach(function (m) { ret[m.slice(1)] = true; });\n    return ret\n  }\n}\n\nfunction makeAttrsMap (attrs) {\n  var map = {};\n  for (var i = 0, l = attrs.length; i < l; i++) {\n    if (\n      process.env.NODE_ENV !== 'production' &&\n      map[attrs[i].name] && !isIE && !isEdge\n    ) {\n      warn$2('duplicate attribute: ' + attrs[i].name, attrs[i]);\n    }\n    map[attrs[i].name] = attrs[i].value;\n  }\n  return map\n}\n\n// for script (e.g. type=\"x/template\") or style, do not decode content\nfunction isTextTag (el) {\n  return el.tag === 'script' || el.tag === 'style'\n}\n\nfunction isForbiddenTag (el) {\n  return (\n    el.tag === 'style' ||\n    (el.tag === 'script' && (\n      !el.attrsMap.type ||\n      el.attrsMap.type === 'text/javascript'\n    ))\n  )\n}\n\nvar ieNSBug = /^xmlns:NS\\d+/;\nvar ieNSPrefix = /^NS\\d+:/;\n\n/* istanbul ignore next */\nfunction guardIESVGBug (attrs) {\n  var res = [];\n  for (var i = 0; i < attrs.length; i++) {\n    var attr = attrs[i];\n    if (!ieNSBug.test(attr.name)) {\n      attr.name = attr.name.replace(ieNSPrefix, '');\n      res.push(attr);\n    }\n  }\n  return res\n}\n\nfunction checkForAliasModel (el, value) {\n  var _el = el;\n  while (_el) {\n    if (_el.for && _el.alias === value) {\n      warn$2(\n        \"<\" + (el.tag) + \" v-model=\\\"\" + value + \"\\\">: \" +\n        \"You are binding v-model directly to a v-for iteration alias. \" +\n        \"This will not be able to modify the v-for source array because \" +\n        \"writing to the alias is like modifying a function local variable. \" +\n        \"Consider using an array of objects and use v-model on an object property instead.\",\n        el.rawAttrsMap['v-model']\n      );\n    }\n    _el = _el.parent;\n  }\n}\n\n/*  */\n\nfunction preTransformNode (el, options) {\n  if (el.tag === 'input') {\n    var map = el.attrsMap;\n    if (!map['v-model']) {\n      return\n    }\n\n    var typeBinding;\n    if (map[':type'] || map['v-bind:type']) {\n      typeBinding = getBindingAttr(el, 'type');\n    }\n    if (!map.type && !typeBinding && map['v-bind']) {\n      typeBinding = \"(\" + (map['v-bind']) + \").type\";\n    }\n\n    if (typeBinding) {\n      var ifCondition = getAndRemoveAttr(el, 'v-if', true);\n      var ifConditionExtra = ifCondition ? (\"&&(\" + ifCondition + \")\") : \"\";\n      var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;\n      var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);\n      // 1. checkbox\n      var branch0 = cloneASTElement(el);\n      // process for on the main node\n      processFor(branch0);\n      addRawAttr(branch0, 'type', 'checkbox');\n      processElement(branch0, options);\n      branch0.processed = true; // prevent it from double-processed\n      branch0.if = \"(\" + typeBinding + \")==='checkbox'\" + ifConditionExtra;\n      addIfCondition(branch0, {\n        exp: branch0.if,\n        block: branch0\n      });\n      // 2. add radio else-if condition\n      var branch1 = cloneASTElement(el);\n      getAndRemoveAttr(branch1, 'v-for', true);\n      addRawAttr(branch1, 'type', 'radio');\n      processElement(branch1, options);\n      addIfCondition(branch0, {\n        exp: \"(\" + typeBinding + \")==='radio'\" + ifConditionExtra,\n        block: branch1\n      });\n      // 3. other\n      var branch2 = cloneASTElement(el);\n      getAndRemoveAttr(branch2, 'v-for', true);\n      addRawAttr(branch2, ':type', typeBinding);\n      processElement(branch2, options);\n      addIfCondition(branch0, {\n        exp: ifCondition,\n        block: branch2\n      });\n\n      if (hasElse) {\n        branch0.else = true;\n      } else if (elseIfCondition) {\n        branch0.elseif = elseIfCondition;\n      }\n\n      return branch0\n    }\n  }\n}\n\nfunction cloneASTElement (el) {\n  return createASTElement(el.tag, el.attrsList.slice(), el.parent)\n}\n\nvar model$1 = {\n  preTransformNode: preTransformNode\n};\n\nvar modules$1 = [\n  klass$1,\n  style$1,\n  model$1\n];\n\n/*  */\n\nfunction text (el, dir) {\n  if (dir.value) {\n    addProp(el, 'textContent', (\"_s(\" + (dir.value) + \")\"), dir);\n  }\n}\n\n/*  */\n\nfunction html (el, dir) {\n  if (dir.value) {\n    addProp(el, 'innerHTML', (\"_s(\" + (dir.value) + \")\"), dir);\n  }\n}\n\nvar directives$1 = {\n  model: model,\n  text: text,\n  html: html\n};\n\n/*  */\n\nvar baseOptions = {\n  expectHTML: true,\n  modules: modules$1,\n  directives: directives$1,\n  isPreTag: isPreTag,\n  isUnaryTag: isUnaryTag,\n  mustUseProp: mustUseProp,\n  canBeLeftOpenTag: canBeLeftOpenTag,\n  isReservedTag: isReservedTag,\n  getTagNamespace: getTagNamespace,\n  staticKeys: genStaticKeys(modules$1)\n};\n\n/*  */\n\nvar isStaticKey;\nvar isPlatformReservedTag;\n\nvar genStaticKeysCached = cached(genStaticKeys$1);\n\n/**\n * Goal of the optimizer: walk the generated template AST tree\n * and detect sub-trees that are purely static, i.e. parts of\n * the DOM that never needs to change.\n *\n * Once we detect these sub-trees, we can:\n *\n * 1. Hoist them into constants, so that we no longer need to\n *    create fresh nodes for them on each re-render;\n * 2. Completely skip them in the patching process.\n */\nfunction optimize (root, options) {\n  if (!root) { return }\n  isStaticKey = genStaticKeysCached(options.staticKeys || '');\n  isPlatformReservedTag = options.isReservedTag || no;\n  // first pass: mark all non-static nodes.\n  markStatic$1(root);\n  // second pass: mark static roots.\n  markStaticRoots(root, false);\n}\n\nfunction genStaticKeys$1 (keys) {\n  return makeMap(\n    'type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +\n    (keys ? ',' + keys : '')\n  )\n}\n\nfunction markStatic$1 (node) {\n  node.static = isStatic(node);\n  if (node.type === 1) {\n    // do not make component slot content static. this avoids\n    // 1. components not able to mutate slot nodes\n    // 2. static slot content fails for hot-reloading\n    if (\n      !isPlatformReservedTag(node.tag) &&\n      node.tag !== 'slot' &&\n      node.attrsMap['inline-template'] == null\n    ) {\n      return\n    }\n    for (var i = 0, l = node.children.length; i < l; i++) {\n      var child = node.children[i];\n      markStatic$1(child);\n      if (!child.static) {\n        node.static = false;\n      }\n    }\n    if (node.ifConditions) {\n      for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) {\n        var block = node.ifConditions[i$1].block;\n        markStatic$1(block);\n        if (!block.static) {\n          node.static = false;\n        }\n      }\n    }\n  }\n}\n\nfunction markStaticRoots (node, isInFor) {\n  if (node.type === 1) {\n    if (node.static || node.once) {\n      node.staticInFor = isInFor;\n    }\n    // For a node to qualify as a static root, it should have children that\n    // are not just static text. Otherwise the cost of hoisting out will\n    // outweigh the benefits and it's better off to just always render it fresh.\n    if (node.static && node.children.length && !(\n      node.children.length === 1 &&\n      node.children[0].type === 3\n    )) {\n      node.staticRoot = true;\n      return\n    } else {\n      node.staticRoot = false;\n    }\n    if (node.children) {\n      for (var i = 0, l = node.children.length; i < l; i++) {\n        markStaticRoots(node.children[i], isInFor || !!node.for);\n      }\n    }\n    if (node.ifConditions) {\n      for (var i$1 = 1, l$1 = node.ifConditions.length; i$1 < l$1; i$1++) {\n        markStaticRoots(node.ifConditions[i$1].block, isInFor);\n      }\n    }\n  }\n}\n\nfunction isStatic (node) {\n  if (node.type === 2) { // expression\n    return false\n  }\n  if (node.type === 3) { // text\n    return true\n  }\n  return !!(node.pre || (\n    !node.hasBindings && // no dynamic bindings\n    !node.if && !node.for && // not v-if or v-for or v-else\n    !isBuiltInTag(node.tag) && // not a built-in\n    isPlatformReservedTag(node.tag) && // not a component\n    !isDirectChildOfTemplateFor(node) &&\n    Object.keys(node).every(isStaticKey)\n  ))\n}\n\nfunction isDirectChildOfTemplateFor (node) {\n  while (node.parent) {\n    node = node.parent;\n    if (node.tag !== 'template') {\n      return false\n    }\n    if (node.for) {\n      return true\n    }\n  }\n  return false\n}\n\n/*  */\n\nvar fnExpRE = /^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*(?:[\\w$]+)?\\s*\\(/;\nvar fnInvokeRE = /\\([^)]*?\\);*$/;\nvar simplePathRE = /^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/;\n\n// KeyboardEvent.keyCode aliases\nvar keyCodes = {\n  esc: 27,\n  tab: 9,\n  enter: 13,\n  space: 32,\n  up: 38,\n  left: 37,\n  right: 39,\n  down: 40,\n  'delete': [8, 46]\n};\n\n// KeyboardEvent.key aliases\nvar keyNames = {\n  // #7880: IE11 and Edge use `Esc` for Escape key name.\n  esc: ['Esc', 'Escape'],\n  tab: 'Tab',\n  enter: 'Enter',\n  // #9112: IE11 uses `Spacebar` for Space key name.\n  space: [' ', 'Spacebar'],\n  // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.\n  up: ['Up', 'ArrowUp'],\n  left: ['Left', 'ArrowLeft'],\n  right: ['Right', 'ArrowRight'],\n  down: ['Down', 'ArrowDown'],\n  // #9112: IE11 uses `Del` for Delete key name.\n  'delete': ['Backspace', 'Delete', 'Del']\n};\n\n// #4868: modifiers that prevent the execution of the listener\n// need to explicitly return null so that we can determine whether to remove\n// the listener for .once\nvar genGuard = function (condition) { return (\"if(\" + condition + \")return null;\"); };\n\nvar modifierCode = {\n  stop: '$event.stopPropagation();',\n  prevent: '$event.preventDefault();',\n  self: genGuard(\"$event.target !== $event.currentTarget\"),\n  ctrl: genGuard(\"!$event.ctrlKey\"),\n  shift: genGuard(\"!$event.shiftKey\"),\n  alt: genGuard(\"!$event.altKey\"),\n  meta: genGuard(\"!$event.metaKey\"),\n  left: genGuard(\"'button' in $event && $event.button !== 0\"),\n  middle: genGuard(\"'button' in $event && $event.button !== 1\"),\n  right: genGuard(\"'button' in $event && $event.button !== 2\")\n};\n\nfunction genHandlers (\n  events,\n  isNative\n) {\n  var prefix = isNative ? 'nativeOn:' : 'on:';\n  var staticHandlers = \"\";\n  var dynamicHandlers = \"\";\n  for (var name in events) {\n    var handlerCode = genHandler(events[name]);\n    if (events[name] && events[name].dynamic) {\n      dynamicHandlers += name + \",\" + handlerCode + \",\";\n    } else {\n      staticHandlers += \"\\\"\" + name + \"\\\":\" + handlerCode + \",\";\n    }\n  }\n  staticHandlers = \"{\" + (staticHandlers.slice(0, -1)) + \"}\";\n  if (dynamicHandlers) {\n    return prefix + \"_d(\" + staticHandlers + \",[\" + (dynamicHandlers.slice(0, -1)) + \"])\"\n  } else {\n    return prefix + staticHandlers\n  }\n}\n\nfunction genHandler (handler) {\n  if (!handler) {\n    return 'function(){}'\n  }\n\n  if (Array.isArray(handler)) {\n    return (\"[\" + (handler.map(function (handler) { return genHandler(handler); }).join(',')) + \"]\")\n  }\n\n  var isMethodPath = simplePathRE.test(handler.value);\n  var isFunctionExpression = fnExpRE.test(handler.value);\n  var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));\n\n  if (!handler.modifiers) {\n    if (isMethodPath || isFunctionExpression) {\n      return handler.value\n    }\n    return (\"function($event){\" + (isFunctionInvocation ? (\"return \" + (handler.value)) : handler.value) + \"}\") // inline statement\n  } else {\n    var code = '';\n    var genModifierCode = '';\n    var keys = [];\n    for (var key in handler.modifiers) {\n      if (modifierCode[key]) {\n        genModifierCode += modifierCode[key];\n        // left/right\n        if (keyCodes[key]) {\n          keys.push(key);\n        }\n      } else if (key === 'exact') {\n        var modifiers = (handler.modifiers);\n        genModifierCode += genGuard(\n          ['ctrl', 'shift', 'alt', 'meta']\n            .filter(function (keyModifier) { return !modifiers[keyModifier]; })\n            .map(function (keyModifier) { return (\"$event.\" + keyModifier + \"Key\"); })\n            .join('||')\n        );\n      } else {\n        keys.push(key);\n      }\n    }\n    if (keys.length) {\n      code += genKeyFilter(keys);\n    }\n    // Make sure modifiers like prevent and stop get executed after key filtering\n    if (genModifierCode) {\n      code += genModifierCode;\n    }\n    var handlerCode = isMethodPath\n      ? (\"return \" + (handler.value) + \"($event)\")\n      : isFunctionExpression\n        ? (\"return (\" + (handler.value) + \")($event)\")\n        : isFunctionInvocation\n          ? (\"return \" + (handler.value))\n          : handler.value;\n    return (\"function($event){\" + code + handlerCode + \"}\")\n  }\n}\n\nfunction genKeyFilter (keys) {\n  return (\n    // make sure the key filters only apply to KeyboardEvents\n    // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake\n    // key events that do not have keyCode property...\n    \"if(!$event.type.indexOf('key')&&\" +\n    (keys.map(genFilterCode).join('&&')) + \")return null;\"\n  )\n}\n\nfunction genFilterCode (key) {\n  var keyVal = parseInt(key, 10);\n  if (keyVal) {\n    return (\"$event.keyCode!==\" + keyVal)\n  }\n  var keyCode = keyCodes[key];\n  var keyName = keyNames[key];\n  return (\n    \"_k($event.keyCode,\" +\n    (JSON.stringify(key)) + \",\" +\n    (JSON.stringify(keyCode)) + \",\" +\n    \"$event.key,\" +\n    \"\" + (JSON.stringify(keyName)) +\n    \")\"\n  )\n}\n\n/*  */\n\nfunction on (el, dir) {\n  if (process.env.NODE_ENV !== 'production' && dir.modifiers) {\n    warn(\"v-on without argument does not support modifiers.\");\n  }\n  el.wrapListeners = function (code) { return (\"_g(\" + code + \",\" + (dir.value) + \")\"); };\n}\n\n/*  */\n\nfunction bind$1 (el, dir) {\n  el.wrapData = function (code) {\n    return (\"_b(\" + code + \",'\" + (el.tag) + \"',\" + (dir.value) + \",\" + (dir.modifiers && dir.modifiers.prop ? 'true' : 'false') + (dir.modifiers && dir.modifiers.sync ? ',true' : '') + \")\")\n  };\n}\n\n/*  */\n\nvar baseDirectives = {\n  on: on,\n  bind: bind$1,\n  cloak: noop\n};\n\n/*  */\n\n\n\n\n\nvar CodegenState = function CodegenState (options) {\n  this.options = options;\n  this.warn = options.warn || baseWarn;\n  this.transforms = pluckModuleFunction(options.modules, 'transformCode');\n  this.dataGenFns = pluckModuleFunction(options.modules, 'genData');\n  this.directives = extend(extend({}, baseDirectives), options.directives);\n  var isReservedTag = options.isReservedTag || no;\n  this.maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };\n  this.onceId = 0;\n  this.staticRenderFns = [];\n  this.pre = false;\n};\n\n\n\nfunction generate (\n  ast,\n  options\n) {\n  var state = new CodegenState(options);\n  var code = ast ? genElement(ast, state) : '_c(\"div\")';\n  return {\n    render: (\"with(this){return \" + code + \"}\"),\n    staticRenderFns: state.staticRenderFns\n  }\n}\n\nfunction genElement (el, state) {\n  if (el.parent) {\n    el.pre = el.pre || el.parent.pre;\n  }\n\n  if (el.staticRoot && !el.staticProcessed) {\n    return genStatic(el, state)\n  } else if (el.once && !el.onceProcessed) {\n    return genOnce(el, state)\n  } else if (el.for && !el.forProcessed) {\n    return genFor(el, state)\n  } else if (el.if && !el.ifProcessed) {\n    return genIf(el, state)\n  } else if (el.tag === 'template' && !el.slotTarget && !state.pre) {\n    return genChildren(el, state) || 'void 0'\n  } else if (el.tag === 'slot') {\n    return genSlot(el, state)\n  } else {\n    // component or element\n    var code;\n    if (el.component) {\n      code = genComponent(el.component, el, state);\n    } else {\n      var data;\n      if (!el.plain || (el.pre && state.maybeComponent(el))) {\n        data = genData$2(el, state);\n      }\n\n      var children = el.inlineTemplate ? null : genChildren(el, state, true);\n      code = \"_c('\" + (el.tag) + \"'\" + (data ? (\",\" + data) : '') + (children ? (\",\" + children) : '') + \")\";\n    }\n    // module transforms\n    for (var i = 0; i < state.transforms.length; i++) {\n      code = state.transforms[i](el, code);\n    }\n    return code\n  }\n}\n\n// hoist static sub-trees out\nfunction genStatic (el, state) {\n  el.staticProcessed = true;\n  // Some elements (templates) need to behave differently inside of a v-pre\n  // node.  All pre nodes are static roots, so we can use this as a location to\n  // wrap a state change and reset it upon exiting the pre node.\n  var originalPreState = state.pre;\n  if (el.pre) {\n    state.pre = el.pre;\n  }\n  state.staticRenderFns.push((\"with(this){return \" + (genElement(el, state)) + \"}\"));\n  state.pre = originalPreState;\n  return (\"_m(\" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + \")\")\n}\n\n// v-once\nfunction genOnce (el, state) {\n  el.onceProcessed = true;\n  if (el.if && !el.ifProcessed) {\n    return genIf(el, state)\n  } else if (el.staticInFor) {\n    var key = '';\n    var parent = el.parent;\n    while (parent) {\n      if (parent.for) {\n        key = parent.key;\n        break\n      }\n      parent = parent.parent;\n    }\n    if (!key) {\n      process.env.NODE_ENV !== 'production' && state.warn(\n        \"v-once can only be used inside v-for that is keyed. \",\n        el.rawAttrsMap['v-once']\n      );\n      return genElement(el, state)\n    }\n    return (\"_o(\" + (genElement(el, state)) + \",\" + (state.onceId++) + \",\" + key + \")\")\n  } else {\n    return genStatic(el, state)\n  }\n}\n\nfunction genIf (\n  el,\n  state,\n  altGen,\n  altEmpty\n) {\n  el.ifProcessed = true; // avoid recursion\n  return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty)\n}\n\nfunction genIfConditions (\n  conditions,\n  state,\n  altGen,\n  altEmpty\n) {\n  if (!conditions.length) {\n    return altEmpty || '_e()'\n  }\n\n  var condition = conditions.shift();\n  if (condition.exp) {\n    return (\"(\" + (condition.exp) + \")?\" + (genTernaryExp(condition.block)) + \":\" + (genIfConditions(conditions, state, altGen, altEmpty)))\n  } else {\n    return (\"\" + (genTernaryExp(condition.block)))\n  }\n\n  // v-if with v-once should generate code like (a)?_m(0):_m(1)\n  function genTernaryExp (el) {\n    return altGen\n      ? altGen(el, state)\n      : el.once\n        ? genOnce(el, state)\n        : genElement(el, state)\n  }\n}\n\nfunction genFor (\n  el,\n  state,\n  altGen,\n  altHelper\n) {\n  var exp = el.for;\n  var alias = el.alias;\n  var iterator1 = el.iterator1 ? (\",\" + (el.iterator1)) : '';\n  var iterator2 = el.iterator2 ? (\",\" + (el.iterator2)) : '';\n\n  if (process.env.NODE_ENV !== 'production' &&\n    state.maybeComponent(el) &&\n    el.tag !== 'slot' &&\n    el.tag !== 'template' &&\n    !el.key\n  ) {\n    state.warn(\n      \"<\" + (el.tag) + \" v-for=\\\"\" + alias + \" in \" + exp + \"\\\">: component lists rendered with \" +\n      \"v-for should have explicit keys. \" +\n      \"See https://vuejs.org/guide/list.html#key for more info.\",\n      el.rawAttrsMap['v-for'],\n      true /* tip */\n    );\n  }\n\n  el.forProcessed = true; // avoid recursion\n  return (altHelper || '_l') + \"((\" + exp + \"),\" +\n    \"function(\" + alias + iterator1 + iterator2 + \"){\" +\n      \"return \" + ((altGen || genElement)(el, state)) +\n    '})'\n}\n\nfunction genData$2 (el, state) {\n  var data = '{';\n\n  // directives first.\n  // directives may mutate the el's other properties before they are generated.\n  var dirs = genDirectives(el, state);\n  if (dirs) { data += dirs + ','; }\n\n  // key\n  if (el.key) {\n    data += \"key:\" + (el.key) + \",\";\n  }\n  // ref\n  if (el.ref) {\n    data += \"ref:\" + (el.ref) + \",\";\n  }\n  if (el.refInFor) {\n    data += \"refInFor:true,\";\n  }\n  // pre\n  if (el.pre) {\n    data += \"pre:true,\";\n  }\n  // record original tag name for components using \"is\" attribute\n  if (el.component) {\n    data += \"tag:\\\"\" + (el.tag) + \"\\\",\";\n  }\n  // module data generation functions\n  for (var i = 0; i < state.dataGenFns.length; i++) {\n    data += state.dataGenFns[i](el);\n  }\n  // attributes\n  if (el.attrs) {\n    data += \"attrs:\" + (genProps(el.attrs)) + \",\";\n  }\n  // DOM props\n  if (el.props) {\n    data += \"domProps:\" + (genProps(el.props)) + \",\";\n  }\n  // event handlers\n  if (el.events) {\n    data += (genHandlers(el.events, false)) + \",\";\n  }\n  if (el.nativeEvents) {\n    data += (genHandlers(el.nativeEvents, true)) + \",\";\n  }\n  // slot target\n  // only for non-scoped slots\n  if (el.slotTarget && !el.slotScope) {\n    data += \"slot:\" + (el.slotTarget) + \",\";\n  }\n  // scoped slots\n  if (el.scopedSlots) {\n    data += (genScopedSlots(el, el.scopedSlots, state)) + \",\";\n  }\n  // component v-model\n  if (el.model) {\n    data += \"model:{value:\" + (el.model.value) + \",callback:\" + (el.model.callback) + \",expression:\" + (el.model.expression) + \"},\";\n  }\n  // inline-template\n  if (el.inlineTemplate) {\n    var inlineTemplate = genInlineTemplate(el, state);\n    if (inlineTemplate) {\n      data += inlineTemplate + \",\";\n    }\n  }\n  data = data.replace(/,$/, '') + '}';\n  // v-bind dynamic argument wrap\n  // v-bind with dynamic arguments must be applied using the same v-bind object\n  // merge helper so that class/style/mustUseProp attrs are handled correctly.\n  if (el.dynamicAttrs) {\n    data = \"_b(\" + data + \",\\\"\" + (el.tag) + \"\\\",\" + (genProps(el.dynamicAttrs)) + \")\";\n  }\n  // v-bind data wrap\n  if (el.wrapData) {\n    data = el.wrapData(data);\n  }\n  // v-on data wrap\n  if (el.wrapListeners) {\n    data = el.wrapListeners(data);\n  }\n  return data\n}\n\nfunction genDirectives (el, state) {\n  var dirs = el.directives;\n  if (!dirs) { return }\n  var res = 'directives:[';\n  var hasRuntime = false;\n  var i, l, dir, needRuntime;\n  for (i = 0, l = dirs.length; i < l; i++) {\n    dir = dirs[i];\n    needRuntime = true;\n    var gen = state.directives[dir.name];\n    if (gen) {\n      // compile-time directive that manipulates AST.\n      // returns true if it also needs a runtime counterpart.\n      needRuntime = !!gen(el, dir, state.warn);\n    }\n    if (needRuntime) {\n      hasRuntime = true;\n      res += \"{name:\\\"\" + (dir.name) + \"\\\",rawName:\\\"\" + (dir.rawName) + \"\\\"\" + (dir.value ? (\",value:(\" + (dir.value) + \"),expression:\" + (JSON.stringify(dir.value))) : '') + (dir.arg ? (\",arg:\" + (dir.isDynamicArg ? dir.arg : (\"\\\"\" + (dir.arg) + \"\\\"\"))) : '') + (dir.modifiers ? (\",modifiers:\" + (JSON.stringify(dir.modifiers))) : '') + \"},\";\n    }\n  }\n  if (hasRuntime) {\n    return res.slice(0, -1) + ']'\n  }\n}\n\nfunction genInlineTemplate (el, state) {\n  var ast = el.children[0];\n  if (process.env.NODE_ENV !== 'production' && (\n    el.children.length !== 1 || ast.type !== 1\n  )) {\n    state.warn(\n      'Inline-template components must have exactly one child element.',\n      { start: el.start }\n    );\n  }\n  if (ast && ast.type === 1) {\n    var inlineRenderFns = generate(ast, state.options);\n    return (\"inlineTemplate:{render:function(){\" + (inlineRenderFns.render) + \"},staticRenderFns:[\" + (inlineRenderFns.staticRenderFns.map(function (code) { return (\"function(){\" + code + \"}\"); }).join(',')) + \"]}\")\n  }\n}\n\nfunction genScopedSlots (\n  el,\n  slots,\n  state\n) {\n  // by default scoped slots are considered \"stable\", this allows child\n  // components with only scoped slots to skip forced updates from parent.\n  // but in some cases we have to bail-out of this optimization\n  // for example if the slot contains dynamic names, has v-if or v-for on them...\n  var needsForceUpdate = el.for || Object.keys(slots).some(function (key) {\n    var slot = slots[key];\n    return (\n      slot.slotTargetDynamic ||\n      slot.if ||\n      slot.for ||\n      containsSlotChild(slot) // is passing down slot from parent which may be dynamic\n    )\n  });\n\n  // #9534: if a component with scoped slots is inside a conditional branch,\n  // it's possible for the same component to be reused but with different\n  // compiled slot content. To avoid that, we generate a unique key based on\n  // the generated code of all the slot contents.\n  var needsKey = !!el.if;\n\n  // OR when it is inside another scoped slot or v-for (the reactivity may be\n  // disconnected due to the intermediate scope variable)\n  // #9438, #9506\n  // TODO: this can be further optimized by properly analyzing in-scope bindings\n  // and skip force updating ones that do not actually use scope variables.\n  if (!needsForceUpdate) {\n    var parent = el.parent;\n    while (parent) {\n      if (\n        (parent.slotScope && parent.slotScope !== emptySlotScopeToken) ||\n        parent.for\n      ) {\n        needsForceUpdate = true;\n        break\n      }\n      if (parent.if) {\n        needsKey = true;\n      }\n      parent = parent.parent;\n    }\n  }\n\n  var generatedSlots = Object.keys(slots)\n    .map(function (key) { return genScopedSlot(slots[key], state); })\n    .join(',');\n\n  return (\"scopedSlots:_u([\" + generatedSlots + \"]\" + (needsForceUpdate ? \",null,true\" : \"\") + (!needsForceUpdate && needsKey ? (\",null,false,\" + (hash(generatedSlots))) : \"\") + \")\")\n}\n\nfunction hash(str) {\n  var hash = 5381;\n  var i = str.length;\n  while(i) {\n    hash = (hash * 33) ^ str.charCodeAt(--i);\n  }\n  return hash >>> 0\n}\n\nfunction containsSlotChild (el) {\n  if (el.type === 1) {\n    if (el.tag === 'slot') {\n      return true\n    }\n    return el.children.some(containsSlotChild)\n  }\n  return false\n}\n\nfunction genScopedSlot (\n  el,\n  state\n) {\n  var isLegacySyntax = el.attrsMap['slot-scope'];\n  if (el.if && !el.ifProcessed && !isLegacySyntax) {\n    return genIf(el, state, genScopedSlot, \"null\")\n  }\n  if (el.for && !el.forProcessed) {\n    return genFor(el, state, genScopedSlot)\n  }\n  var slotScope = el.slotScope === emptySlotScopeToken\n    ? \"\"\n    : String(el.slotScope);\n  var fn = \"function(\" + slotScope + \"){\" +\n    \"return \" + (el.tag === 'template'\n      ? el.if && isLegacySyntax\n        ? (\"(\" + (el.if) + \")?\" + (genChildren(el, state) || 'undefined') + \":undefined\")\n        : genChildren(el, state) || 'undefined'\n      : genElement(el, state)) + \"}\";\n  // reverse proxy v-slot without scope on this.$slots\n  var reverseProxy = slotScope ? \"\" : \",proxy:true\";\n  return (\"{key:\" + (el.slotTarget || \"\\\"default\\\"\") + \",fn:\" + fn + reverseProxy + \"}\")\n}\n\nfunction genChildren (\n  el,\n  state,\n  checkSkip,\n  altGenElement,\n  altGenNode\n) {\n  var children = el.children;\n  if (children.length) {\n    var el$1 = children[0];\n    // optimize single v-for\n    if (children.length === 1 &&\n      el$1.for &&\n      el$1.tag !== 'template' &&\n      el$1.tag !== 'slot'\n    ) {\n      var normalizationType = checkSkip\n        ? state.maybeComponent(el$1) ? \",1\" : \",0\"\n        : \"\";\n      return (\"\" + ((altGenElement || genElement)(el$1, state)) + normalizationType)\n    }\n    var normalizationType$1 = checkSkip\n      ? getNormalizationType(children, state.maybeComponent)\n      : 0;\n    var gen = altGenNode || genNode;\n    return (\"[\" + (children.map(function (c) { return gen(c, state); }).join(',')) + \"]\" + (normalizationType$1 ? (\",\" + normalizationType$1) : ''))\n  }\n}\n\n// determine the normalization needed for the children array.\n// 0: no normalization needed\n// 1: simple normalization needed (possible 1-level deep nested array)\n// 2: full normalization needed\nfunction getNormalizationType (\n  children,\n  maybeComponent\n) {\n  var res = 0;\n  for (var i = 0; i < children.length; i++) {\n    var el = children[i];\n    if (el.type !== 1) {\n      continue\n    }\n    if (needsNormalization(el) ||\n        (el.ifConditions && el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {\n      res = 2;\n      break\n    }\n    if (maybeComponent(el) ||\n        (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {\n      res = 1;\n    }\n  }\n  return res\n}\n\nfunction needsNormalization (el) {\n  return el.for !== undefined || el.tag === 'template' || el.tag === 'slot'\n}\n\nfunction genNode (node, state) {\n  if (node.type === 1) {\n    return genElement(node, state)\n  } else if (node.type === 3 && node.isComment) {\n    return genComment(node)\n  } else {\n    return genText(node)\n  }\n}\n\nfunction genText (text) {\n  return (\"_v(\" + (text.type === 2\n    ? text.expression // no need for () because already wrapped in _s()\n    : transformSpecialNewlines(JSON.stringify(text.text))) + \")\")\n}\n\nfunction genComment (comment) {\n  return (\"_e(\" + (JSON.stringify(comment.text)) + \")\")\n}\n\nfunction genSlot (el, state) {\n  var slotName = el.slotName || '\"default\"';\n  var children = genChildren(el, state);\n  var res = \"_t(\" + slotName + (children ? (\",\" + children) : '');\n  var attrs = el.attrs || el.dynamicAttrs\n    ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({\n        // slot props are camelized\n        name: camelize(attr.name),\n        value: attr.value,\n        dynamic: attr.dynamic\n      }); }))\n    : null;\n  var bind$$1 = el.attrsMap['v-bind'];\n  if ((attrs || bind$$1) && !children) {\n    res += \",null\";\n  }\n  if (attrs) {\n    res += \",\" + attrs;\n  }\n  if (bind$$1) {\n    res += (attrs ? '' : ',null') + \",\" + bind$$1;\n  }\n  return res + ')'\n}\n\n// componentName is el.component, take it as argument to shun flow's pessimistic refinement\nfunction genComponent (\n  componentName,\n  el,\n  state\n) {\n  var children = el.inlineTemplate ? null : genChildren(el, state, true);\n  return (\"_c(\" + componentName + \",\" + (genData$2(el, state)) + (children ? (\",\" + children) : '') + \")\")\n}\n\nfunction genProps (props) {\n  var staticProps = \"\";\n  var dynamicProps = \"\";\n  for (var i = 0; i < props.length; i++) {\n    var prop = props[i];\n    var value = transformSpecialNewlines(prop.value);\n    if (prop.dynamic) {\n      dynamicProps += (prop.name) + \",\" + value + \",\";\n    } else {\n      staticProps += \"\\\"\" + (prop.name) + \"\\\":\" + value + \",\";\n    }\n  }\n  staticProps = \"{\" + (staticProps.slice(0, -1)) + \"}\";\n  if (dynamicProps) {\n    return (\"_d(\" + staticProps + \",[\" + (dynamicProps.slice(0, -1)) + \"])\")\n  } else {\n    return staticProps\n  }\n}\n\n// #3895, #4268\nfunction transformSpecialNewlines (text) {\n  return text\n    .replace(/\\u2028/g, '\\\\u2028')\n    .replace(/\\u2029/g, '\\\\u2029')\n}\n\n/*  */\n\n\n\n// these keywords should not appear inside expressions, but operators like\n// typeof, instanceof and in are allowed\nvar prohibitedKeywordRE = new RegExp('\\\\b' + (\n  'do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +\n  'super,throw,while,yield,delete,export,import,return,switch,default,' +\n  'extends,finally,continue,debugger,function,arguments'\n).split(',').join('\\\\b|\\\\b') + '\\\\b');\n\n// these unary operators should not be used as property/method names\nvar unaryOperatorsRE = new RegExp('\\\\b' + (\n  'delete,typeof,void'\n).split(',').join('\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b') + '\\\\s*\\\\([^\\\\)]*\\\\)');\n\n// strip strings in expressions\nvar stripStringRE = /'(?:[^'\\\\]|\\\\.)*'|\"(?:[^\"\\\\]|\\\\.)*\"|`(?:[^`\\\\]|\\\\.)*\\$\\{|\\}(?:[^`\\\\]|\\\\.)*`|`(?:[^`\\\\]|\\\\.)*`/g;\n\n// detect problematic expressions in a template\nfunction detectErrors (ast, warn) {\n  if (ast) {\n    checkNode(ast, warn);\n  }\n}\n\nfunction checkNode (node, warn) {\n  if (node.type === 1) {\n    for (var name in node.attrsMap) {\n      if (dirRE.test(name)) {\n        var value = node.attrsMap[name];\n        if (value) {\n          var range = node.rawAttrsMap[name];\n          if (name === 'v-for') {\n            checkFor(node, (\"v-for=\\\"\" + value + \"\\\"\"), warn, range);\n          } else if (onRE.test(name)) {\n            checkEvent(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\n          } else {\n            checkExpression(value, (name + \"=\\\"\" + value + \"\\\"\"), warn, range);\n          }\n        }\n      }\n    }\n    if (node.children) {\n      for (var i = 0; i < node.children.length; i++) {\n        checkNode(node.children[i], warn);\n      }\n    }\n  } else if (node.type === 2) {\n    checkExpression(node.expression, node.text, warn, node);\n  }\n}\n\nfunction checkEvent (exp, text, warn, range) {\n  var stipped = exp.replace(stripStringRE, '');\n  var keywordMatch = stipped.match(unaryOperatorsRE);\n  if (keywordMatch && stipped.charAt(keywordMatch.index - 1) !== '$') {\n    warn(\n      \"avoid using JavaScript unary operator as property name: \" +\n      \"\\\"\" + (keywordMatch[0]) + \"\\\" in expression \" + (text.trim()),\n      range\n    );\n  }\n  checkExpression(exp, text, warn, range);\n}\n\nfunction checkFor (node, text, warn, range) {\n  checkExpression(node.for || '', text, warn, range);\n  checkIdentifier(node.alias, 'v-for alias', text, warn, range);\n  checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);\n  checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);\n}\n\nfunction checkIdentifier (\n  ident,\n  type,\n  text,\n  warn,\n  range\n) {\n  if (typeof ident === 'string') {\n    try {\n      new Function((\"var \" + ident + \"=_\"));\n    } catch (e) {\n      warn((\"invalid \" + type + \" \\\"\" + ident + \"\\\" in expression: \" + (text.trim())), range);\n    }\n  }\n}\n\nfunction checkExpression (exp, text, warn, range) {\n  try {\n    new Function((\"return \" + exp));\n  } catch (e) {\n    var keywordMatch = exp.replace(stripStringRE, '').match(prohibitedKeywordRE);\n    if (keywordMatch) {\n      warn(\n        \"avoid using JavaScript keyword as property name: \" +\n        \"\\\"\" + (keywordMatch[0]) + \"\\\"\\n  Raw expression: \" + (text.trim()),\n        range\n      );\n    } else {\n      warn(\n        \"invalid expression: \" + (e.message) + \" in\\n\\n\" +\n        \"    \" + exp + \"\\n\\n\" +\n        \"  Raw expression: \" + (text.trim()) + \"\\n\",\n        range\n      );\n    }\n  }\n}\n\n/*  */\n\nvar range = 2;\n\nfunction generateCodeFrame (\n  source,\n  start,\n  end\n) {\n  if ( start === void 0 ) start = 0;\n  if ( end === void 0 ) end = source.length;\n\n  var lines = source.split(/\\r?\\n/);\n  var count = 0;\n  var res = [];\n  for (var i = 0; i < lines.length; i++) {\n    count += lines[i].length + 1;\n    if (count >= start) {\n      for (var j = i - range; j <= i + range || end > count; j++) {\n        if (j < 0 || j >= lines.length) { continue }\n        res.push((\"\" + (j + 1) + (repeat$1(\" \", 3 - String(j + 1).length)) + \"|  \" + (lines[j])));\n        var lineLength = lines[j].length;\n        if (j === i) {\n          // push underline\n          var pad = start - (count - lineLength) + 1;\n          var length = end > count ? lineLength - pad : end - start;\n          res.push(\"   |  \" + repeat$1(\" \", pad) + repeat$1(\"^\", length));\n        } else if (j > i) {\n          if (end > count) {\n            var length$1 = Math.min(end - count, lineLength);\n            res.push(\"   |  \" + repeat$1(\"^\", length$1));\n          }\n          count += lineLength + 1;\n        }\n      }\n      break\n    }\n  }\n  return res.join('\\n')\n}\n\nfunction repeat$1 (str, n) {\n  var result = '';\n  if (n > 0) {\n    while (true) { // eslint-disable-line\n      if (n & 1) { result += str; }\n      n >>>= 1;\n      if (n <= 0) { break }\n      str += str;\n    }\n  }\n  return result\n}\n\n/*  */\n\n\n\nfunction createFunction (code, errors) {\n  try {\n    return new Function(code)\n  } catch (err) {\n    errors.push({ err: err, code: code });\n    return noop\n  }\n}\n\nfunction createCompileToFunctionFn (compile) {\n  var cache = Object.create(null);\n\n  return function compileToFunctions (\n    template,\n    options,\n    vm\n  ) {\n    options = extend({}, options);\n    var warn$$1 = options.warn || warn;\n    delete options.warn;\n\n    /* istanbul ignore if */\n    if (process.env.NODE_ENV !== 'production') {\n      // detect possible CSP restriction\n      try {\n        new Function('return 1');\n      } catch (e) {\n        if (e.toString().match(/unsafe-eval|CSP/)) {\n          warn$$1(\n            'It seems you are using the standalone build of Vue.js in an ' +\n            'environment with Content Security Policy that prohibits unsafe-eval. ' +\n            'The template compiler cannot work in this environment. Consider ' +\n            'relaxing the policy to allow unsafe-eval or pre-compiling your ' +\n            'templates into render functions.'\n          );\n        }\n      }\n    }\n\n    // check cache\n    var key = options.delimiters\n      ? String(options.delimiters) + template\n      : template;\n    if (cache[key]) {\n      return cache[key]\n    }\n\n    // compile\n    var compiled = compile(template, options);\n\n    // check compilation errors/tips\n    if (process.env.NODE_ENV !== 'production') {\n      if (compiled.errors && compiled.errors.length) {\n        if (options.outputSourceRange) {\n          compiled.errors.forEach(function (e) {\n            warn$$1(\n              \"Error compiling template:\\n\\n\" + (e.msg) + \"\\n\\n\" +\n              generateCodeFrame(template, e.start, e.end),\n              vm\n            );\n          });\n        } else {\n          warn$$1(\n            \"Error compiling template:\\n\\n\" + template + \"\\n\\n\" +\n            compiled.errors.map(function (e) { return (\"- \" + e); }).join('\\n') + '\\n',\n            vm\n          );\n        }\n      }\n      if (compiled.tips && compiled.tips.length) {\n        if (options.outputSourceRange) {\n          compiled.tips.forEach(function (e) { return tip(e.msg, vm); });\n        } else {\n          compiled.tips.forEach(function (msg) { return tip(msg, vm); });\n        }\n      }\n    }\n\n    // turn code into functions\n    var res = {};\n    var fnGenErrors = [];\n    res.render = createFunction(compiled.render, fnGenErrors);\n    res.staticRenderFns = compiled.staticRenderFns.map(function (code) {\n      return createFunction(code, fnGenErrors)\n    });\n\n    // check function generation errors.\n    // this should only happen if there is a bug in the compiler itself.\n    // mostly for codegen development use\n    /* istanbul ignore if */\n    if (process.env.NODE_ENV !== 'production') {\n      if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {\n        warn$$1(\n          \"Failed to generate render function:\\n\\n\" +\n          fnGenErrors.map(function (ref) {\n            var err = ref.err;\n            var code = ref.code;\n\n            return ((err.toString()) + \" in\\n\\n\" + code + \"\\n\");\n        }).join('\\n'),\n          vm\n        );\n      }\n    }\n\n    return (cache[key] = res)\n  }\n}\n\n/*  */\n\nfunction createCompilerCreator (baseCompile) {\n  return function createCompiler (baseOptions) {\n    function compile (\n      template,\n      options\n    ) {\n      var finalOptions = Object.create(baseOptions);\n      var errors = [];\n      var tips = [];\n\n      var warn = function (msg, range, tip) {\n        (tip ? tips : errors).push(msg);\n      };\n\n      if (options) {\n        if (process.env.NODE_ENV !== 'production' && options.outputSourceRange) {\n          // $flow-disable-line\n          var leadingSpaceLength = template.match(/^\\s*/)[0].length;\n\n          warn = function (msg, range, tip) {\n            var data = { msg: msg };\n            if (range) {\n              if (range.start != null) {\n                data.start = range.start + leadingSpaceLength;\n              }\n              if (range.end != null) {\n                data.end = range.end + leadingSpaceLength;\n              }\n            }\n            (tip ? tips : errors).push(data);\n          };\n        }\n        // merge custom modules\n        if (options.modules) {\n          finalOptions.modules =\n            (baseOptions.modules || []).concat(options.modules);\n        }\n        // merge custom directives\n        if (options.directives) {\n          finalOptions.directives = extend(\n            Object.create(baseOptions.directives || null),\n            options.directives\n          );\n        }\n        // copy other options\n        for (var key in options) {\n          if (key !== 'modules' && key !== 'directives') {\n            finalOptions[key] = options[key];\n          }\n        }\n      }\n\n      finalOptions.warn = warn;\n\n      var compiled = baseCompile(template.trim(), finalOptions);\n      if (process.env.NODE_ENV !== 'production') {\n        detectErrors(compiled.ast, warn);\n      }\n      compiled.errors = errors;\n      compiled.tips = tips;\n      return compiled\n    }\n\n    return {\n      compile: compile,\n      compileToFunctions: createCompileToFunctionFn(compile)\n    }\n  }\n}\n\n/*  */\n\n// `createCompilerCreator` allows creating compilers that use alternative\n// parser/optimizer/codegen, e.g the SSR optimizing compiler.\n// Here we just export a default compiler using the default parts.\nvar createCompiler = createCompilerCreator(function baseCompile (\n  template,\n  options\n) {\n  var ast = parse(template.trim(), options);\n  if (options.optimize !== false) {\n    optimize(ast, options);\n  }\n  var code = generate(ast, options);\n  return {\n    ast: ast,\n    render: code.render,\n    staticRenderFns: code.staticRenderFns\n  }\n});\n\n/*  */\n\nvar ref$1 = createCompiler(baseOptions);\nvar compile = ref$1.compile;\nvar compileToFunctions = ref$1.compileToFunctions;\n\n/*  */\n\n// check whether current browser encodes a char inside attribute values\nvar div;\nfunction getShouldDecode (href) {\n  div = div || document.createElement('div');\n  div.innerHTML = href ? \"<a href=\\\"\\n\\\"/>\" : \"<div a=\\\"\\n\\\"/>\";\n  return div.innerHTML.indexOf('&#10;') > 0\n}\n\n// #3663: IE encodes newlines inside attribute values while other browsers don't\nvar shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;\n// #6828: chrome encodes content in a[href]\nvar shouldDecodeNewlinesForHref = inBrowser ? getShouldDecode(true) : false;\n\n/*  */\n\nvar idToTemplate = cached(function (id) {\n  var el = query(id);\n  return el && el.innerHTML\n});\n\nvar mount = Vue.prototype.$mount;\nVue.prototype.$mount = function (\n  el,\n  hydrating\n) {\n  el = el && query(el);\n\n  /* istanbul ignore if */\n  if (el === document.body || el === document.documentElement) {\n    process.env.NODE_ENV !== 'production' && warn(\n      \"Do not mount Vue to <html> or <body> - mount to normal elements instead.\"\n    );\n    return this\n  }\n\n  var options = this.$options;\n  // resolve template/el and convert to render function\n  if (!options.render) {\n    var template = options.template;\n    if (template) {\n      if (typeof template === 'string') {\n        if (template.charAt(0) === '#') {\n          template = idToTemplate(template);\n          /* istanbul ignore if */\n          if (process.env.NODE_ENV !== 'production' && !template) {\n            warn(\n              (\"Template element not found or is empty: \" + (options.template)),\n              this\n            );\n          }\n        }\n      } else if (template.nodeType) {\n        template = template.innerHTML;\n      } else {\n        if (process.env.NODE_ENV !== 'production') {\n          warn('invalid template option:' + template, this);\n        }\n        return this\n      }\n    } else if (el) {\n      template = getOuterHTML(el);\n    }\n    if (template) {\n      /* istanbul ignore if */\n      if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n        mark('compile');\n      }\n\n      var ref = compileToFunctions(template, {\n        outputSourceRange: process.env.NODE_ENV !== 'production',\n        shouldDecodeNewlines: shouldDecodeNewlines,\n        shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,\n        delimiters: options.delimiters,\n        comments: options.comments\n      }, this);\n      var render = ref.render;\n      var staticRenderFns = ref.staticRenderFns;\n      options.render = render;\n      options.staticRenderFns = staticRenderFns;\n\n      /* istanbul ignore if */\n      if (process.env.NODE_ENV !== 'production' && config.performance && mark) {\n        mark('compile end');\n        measure((\"vue \" + (this._name) + \" compile\"), 'compile', 'compile end');\n      }\n    }\n  }\n  return mount.call(this, el, hydrating)\n};\n\n/**\n * Get outerHTML of elements, taking care\n * of SVG elements in IE as well.\n */\nfunction getOuterHTML (el) {\n  if (el.outerHTML) {\n    return el.outerHTML\n  } else {\n    var container = document.createElement('div');\n    container.appendChild(el.cloneNode(true));\n    return container.innerHTML\n  }\n}\n\nVue.compile = compileToFunctions;\n\nexport default Vue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/vue/dist/vue.esm.js\n// module id = 48\n// module chunks = 1"],"sourceRoot":""}