MOON
Server: Apache
System: Linux res.emeff.ca 3.10.0-962.3.2.lve1.5.24.10.el7.x86_64 #1 SMP Wed Mar 20 07:36:02 EDT 2019 x86_64
User: accemeff (1004)
PHP: 7.0.33
Disabled: NONE
Upload Files
File: /home/accemeff/vendor/craftcms/cms/lib/vue-router/vue-router.js.map
{"version":3,"sources":["vue-router.js"],"names":["global","factory","exports","module","define","amd","VueRouter","this","assert","condition","message","Error","warn","console","isError","err","Object","prototype","toString","call","indexOf","View","name","functional","props","type","String","default","render","_","ref","children","parent","data","routerView","h","$createElement","route","$route","cache","_routerViewCache","depth","inactive","_routerRoot","$vnode","_inactive","$parent","routerViewDepth","matched","component","components","registerRouteInstance","vm","val","current","instances","hook","prepatch","vnode","componentInstance","propsToPass","config","params","undefined","resolveProps","to","from","key","extend","attrs","encodeReserveRE","encodeReserveReplacer","c","charCodeAt","commaRE","encode","str","encodeURIComponent","replace","decode","decodeURIComponent","parseQuery","query","res","trim","split","forEach","param","parts","shift","length","join","Array","isArray","push","stringifyQuery","obj","keys","map","result","val2","filter","x","trailingSlashRE","createRoute","record","location","redirectedFrom","router","stringifyQuery$$1","options","clone","e","meta","path","hash","fullPath","getFullPath","unshift","formatMatch","freeze","value","START","_stringifyQuery","isSameRoute","a","b","isObjectEqual","aKeys","bKeys","every","aVal","bVal","_Vue","toTypes","eventTypes","Link","required","tag","exact","Boolean","append","activeClass","exactActiveClass","event","target","this$1","$router","resolve","href","classes","globalActiveClass","linkActiveClass","globalExactActiveClass","linkExactActiveClass","activeClassFallback","exactActiveClassFallback","compareTarget","queryIncludes","handler","guardEvent","on","click","class","findAnchor","child","i","$slots","isStatic","util","metaKey","altKey","ctrlKey","shiftKey","defaultPrevented","button","currentTarget","getAttribute","test","preventDefault","install","Vue","installed","isDef","v","registerInstance","callVal","$options","_parentVnode","mixin","beforeCreate","_router","init","defineReactive","history","destroyed","defineProperty","get","_route","strats","optionMergeStrategies","beforeRouteEnter","beforeRouteLeave","beforeRouteUpdate","created","inBrowser","window","resolvePath","relative","base","firstChar","charAt","stack","pop","segments","segment","cleanPath","isarray","arr","pathToRegexp_1","pathToRegexp","parse_1","parse","compile_1","tokensToFunction","tokensToFunction_1","tokensToRegExp_1","tokensToRegExp","PATH_REGEXP","RegExp","group","tokens","index","defaultDelimiter","delimiter","exec","m","escaped","offset","slice","next","prefix","capture","modifier","asterisk","partial","repeat","optional","pattern","escapeString","substr","encodeURIComponentPretty","encodeURI","toUpperCase","matches","opts","pretty","token","TypeError","JSON","stringify","j","attachKeys","re","flags","sensitive","strict","end","endsWithDelimiter","groups","source","match","regexpToRegexp","arrayToRegexp","compile","regexpCompileCache","create","fillParams","routeMsg","createRouteMap","routes","oldPathList","oldPathMap","oldNameMap","pathList","pathMap","nameMap","addRouteRecord","matchAs","pathToRegexpOptions","normalizedPath","normalizePath","caseSensitive","regex","compileRouteRegex","redirect","beforeEnter","some","childMatchAs","alias","aliases","aliasRoute","l","splice","normalizeLocation","raw","_normalized","assign","rawPath","parsedPath","hashIndex","queryIndex","parsePath","basePath","extraQuery","_parseQuery","parsedQuery","resolveQuery","createMatcher","currentRoute","_createRoute","paramNames","record$1","matchRoute","originalRedirect","hasOwnProperty","aliasedMatch","aliasedRecord","addRoutes","len","positionStore","setupScroll","replaceState","getStateKey","addEventListener","saveScrollPosition","state","_key","handleScroll","isPop","app","behavior","scrollBehavior","$nextTick","position","getScrollPosition","shouldScroll","then","scrollToPosition","catch","pageXOffset","y","pageYOffset","isValidPosition","isNumber","normalizePosition","el","docRect","elRect","isObject","selector","document","querySelector","documentElement","getBoundingClientRect","left","top","scrollTo","ua","supportsPushState","navigator","userAgent","Time","performance","now","Date","genKey","toFixed","pushState","url","runQueue","queue","fn","cb","step","resolveAsyncComponents","hasAsync","pending","error","flatMapComponents","def","cid","once","resolvedDef","__esModule","hasSymbol","Symbol","toStringTag","resolved","reject","reason","msg","comp","flatten","concat","apply","called","args","arguments","History","baseEl","normalizeBase","ready","readyCbs","readyErrorCbs","errorCbs","extractGuards","records","bind","reverse","guards","instance","guard","extractGuard","bindGuard","listen","onReady","errorCb","onError","transitionTo","onComplete","onAbort","confirmTransition","updateRoute","ensureURL","abort","max","Math","updated","activated","deactivated","resolveQueue","beforeHooks","iterator","cbs","isValid","postEnterCbs","poll","setTimeout","resolveHooks","prev","afterHooks","HTML5History","History$$1","expectScroll","initLocation","getLocation","__proto__","constructor","go","n","fromRoute","getCurrentLocation","pathname","search","HashHistory","fallback","checkFallback","ensureSlash","setupListeners","supportsScroll","getHash","replaceHash","pushHash","getUrl","AbstractHistory","targetIndex","apps","matcher","mode","prototypeAccessors","configurable","registerHook","list","setupHashListener","beforeEach","beforeResolve","afterEach","back","forward","getMatchedComponents","normalizedTo","defineProperties","version","use"],"mappings":"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","file":"vue-router.js","sourcesContent":["/**\n  * vue-router v3.0.1\n  * (c) 2017 Evan You\n  * @license MIT\n  */\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.VueRouter = factory());\n}(this, (function () { 'use strict';\n\n/*  */\n\nfunction assert (condition, message) {\n  if (!condition) {\n    throw new Error((\"[vue-router] \" + message))\n  }\n}\n\nfunction warn (condition, message) {\n  if (\"development\" !== 'production' && !condition) {\n    typeof console !== 'undefined' && console.warn((\"[vue-router] \" + message));\n  }\n}\n\nfunction isError (err) {\n  return Object.prototype.toString.call(err).indexOf('Error') > -1\n}\n\nvar View = {\n  name: 'router-view',\n  functional: true,\n  props: {\n    name: {\n      type: String,\n      default: 'default'\n    }\n  },\n  render: function render (_, ref) {\n    var props = ref.props;\n    var children = ref.children;\n    var parent = ref.parent;\n    var data = ref.data;\n\n    data.routerView = true;\n\n    // directly use parent context's createElement() function\n    // so that components rendered by router-view can resolve named slots\n    var h = parent.$createElement;\n    var name = props.name;\n    var route = parent.$route;\n    var cache = parent._routerViewCache || (parent._routerViewCache = {});\n\n    // determine current view depth, also check to see if the tree\n    // has been toggled inactive but kept-alive.\n    var depth = 0;\n    var inactive = false;\n    while (parent && parent._routerRoot !== parent) {\n      if (parent.$vnode && parent.$vnode.data.routerView) {\n        depth++;\n      }\n      if (parent._inactive) {\n        inactive = true;\n      }\n      parent = parent.$parent;\n    }\n    data.routerViewDepth = depth;\n\n    // render previous view if the tree is inactive and kept-alive\n    if (inactive) {\n      return h(cache[name], data, children)\n    }\n\n    var matched = route.matched[depth];\n    // render empty node if no matched route\n    if (!matched) {\n      cache[name] = null;\n      return h()\n    }\n\n    var component = cache[name] = matched.components[name];\n\n    // attach instance registration hook\n    // this will be called in the instance's injected lifecycle hooks\n    data.registerRouteInstance = function (vm, val) {\n      // val could be undefined for unregistration\n      var current = matched.instances[name];\n      if (\n        (val && current !== vm) ||\n        (!val && current === vm)\n      ) {\n        matched.instances[name] = val;\n      }\n    }\n\n    // also register instance in prepatch hook\n    // in case the same component instance is reused across different routes\n    ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) {\n      matched.instances[name] = vnode.componentInstance;\n    };\n\n    // resolve props\n    var propsToPass = data.props = resolveProps(route, matched.props && matched.props[name]);\n    if (propsToPass) {\n      // clone to prevent mutation\n      propsToPass = data.props = extend({}, propsToPass);\n      // pass non-declared props as attrs\n      var attrs = data.attrs = data.attrs || {};\n      for (var key in propsToPass) {\n        if (!component.props || !(key in component.props)) {\n          attrs[key] = propsToPass[key];\n          delete propsToPass[key];\n        }\n      }\n    }\n\n    return h(component, data, children)\n  }\n};\n\nfunction resolveProps (route, config) {\n  switch (typeof config) {\n    case 'undefined':\n      return\n    case 'object':\n      return config\n    case 'function':\n      return config(route)\n    case 'boolean':\n      return config ? route.params : undefined\n    default:\n      {\n        warn(\n          false,\n          \"props in \\\"\" + (route.path) + \"\\\" is a \" + (typeof config) + \", \" +\n          \"expecting an object, function or boolean.\"\n        );\n      }\n  }\n}\n\nfunction extend (to, from) {\n  for (var key in from) {\n    to[key] = from[key];\n  }\n  return to\n}\n\n/*  */\n\nvar encodeReserveRE = /[!'()*]/g;\nvar encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); };\nvar commaRE = /%2C/g;\n\n// fixed encodeURIComponent which is more conformant to RFC3986:\n// - escapes [!'()*]\n// - preserve commas\nvar encode = function (str) { return encodeURIComponent(str)\n  .replace(encodeReserveRE, encodeReserveReplacer)\n  .replace(commaRE, ','); };\n\nvar decode = decodeURIComponent;\n\nfunction resolveQuery (\n  query,\n  extraQuery,\n  _parseQuery\n) {\n  if ( extraQuery === void 0 ) extraQuery = {};\n\n  var parse = _parseQuery || parseQuery;\n  var parsedQuery;\n  try {\n    parsedQuery = parse(query || '');\n  } catch (e) {\n    \"development\" !== 'production' && warn(false, e.message);\n    parsedQuery = {};\n  }\n  for (var key in extraQuery) {\n    parsedQuery[key] = extraQuery[key];\n  }\n  return parsedQuery\n}\n\nfunction parseQuery (query) {\n  var res = {};\n\n  query = query.trim().replace(/^(\\?|#|&)/, '');\n\n  if (!query) {\n    return res\n  }\n\n  query.split('&').forEach(function (param) {\n    var parts = param.replace(/\\+/g, ' ').split('=');\n    var key = decode(parts.shift());\n    var val = parts.length > 0\n      ? decode(parts.join('='))\n      : null;\n\n    if (res[key] === undefined) {\n      res[key] = val;\n    } else if (Array.isArray(res[key])) {\n      res[key].push(val);\n    } else {\n      res[key] = [res[key], val];\n    }\n  });\n\n  return res\n}\n\nfunction stringifyQuery (obj) {\n  var res = obj ? Object.keys(obj).map(function (key) {\n    var val = obj[key];\n\n    if (val === undefined) {\n      return ''\n    }\n\n    if (val === null) {\n      return encode(key)\n    }\n\n    if (Array.isArray(val)) {\n      var result = [];\n      val.forEach(function (val2) {\n        if (val2 === undefined) {\n          return\n        }\n        if (val2 === null) {\n          result.push(encode(key));\n        } else {\n          result.push(encode(key) + '=' + encode(val2));\n        }\n      });\n      return result.join('&')\n    }\n\n    return encode(key) + '=' + encode(val)\n  }).filter(function (x) { return x.length > 0; }).join('&') : null;\n  return res ? (\"?\" + res) : ''\n}\n\n/*  */\n\n\nvar trailingSlashRE = /\\/?$/;\n\nfunction createRoute (\n  record,\n  location,\n  redirectedFrom,\n  router\n) {\n  var stringifyQuery$$1 = router && router.options.stringifyQuery;\n\n  var query = location.query || {};\n  try {\n    query = clone(query);\n  } catch (e) {}\n\n  var route = {\n    name: location.name || (record && record.name),\n    meta: (record && record.meta) || {},\n    path: location.path || '/',\n    hash: location.hash || '',\n    query: query,\n    params: location.params || {},\n    fullPath: getFullPath(location, stringifyQuery$$1),\n    matched: record ? formatMatch(record) : []\n  };\n  if (redirectedFrom) {\n    route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery$$1);\n  }\n  return Object.freeze(route)\n}\n\nfunction clone (value) {\n  if (Array.isArray(value)) {\n    return value.map(clone)\n  } else if (value && typeof value === 'object') {\n    var res = {};\n    for (var key in value) {\n      res[key] = clone(value[key]);\n    }\n    return res\n  } else {\n    return value\n  }\n}\n\n// the starting route that represents the initial state\nvar START = createRoute(null, {\n  path: '/'\n});\n\nfunction formatMatch (record) {\n  var res = [];\n  while (record) {\n    res.unshift(record);\n    record = record.parent;\n  }\n  return res\n}\n\nfunction getFullPath (\n  ref,\n  _stringifyQuery\n) {\n  var path = ref.path;\n  var query = ref.query; if ( query === void 0 ) query = {};\n  var hash = ref.hash; if ( hash === void 0 ) hash = '';\n\n  var stringify = _stringifyQuery || stringifyQuery;\n  return (path || '/') + stringify(query) + hash\n}\n\nfunction isSameRoute (a, b) {\n  if (b === START) {\n    return a === b\n  } else if (!b) {\n    return false\n  } else if (a.path && b.path) {\n    return (\n      a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') &&\n      a.hash === b.hash &&\n      isObjectEqual(a.query, b.query)\n    )\n  } else if (a.name && b.name) {\n    return (\n      a.name === b.name &&\n      a.hash === b.hash &&\n      isObjectEqual(a.query, b.query) &&\n      isObjectEqual(a.params, b.params)\n    )\n  } else {\n    return false\n  }\n}\n\nfunction isObjectEqual (a, b) {\n  if ( a === void 0 ) a = {};\n  if ( b === void 0 ) b = {};\n\n  // handle null value #1566\n  if (!a || !b) { return a === b }\n  var aKeys = Object.keys(a);\n  var bKeys = Object.keys(b);\n  if (aKeys.length !== bKeys.length) {\n    return false\n  }\n  return aKeys.every(function (key) {\n    var aVal = a[key];\n    var bVal = b[key];\n    // check nested equality\n    if (typeof aVal === 'object' && typeof bVal === 'object') {\n      return isObjectEqual(aVal, bVal)\n    }\n    return String(aVal) === String(bVal)\n  })\n}\n\nfunction isIncludedRoute (current, target) {\n  return (\n    current.path.replace(trailingSlashRE, '/').indexOf(\n      target.path.replace(trailingSlashRE, '/')\n    ) === 0 &&\n    (!target.hash || current.hash === target.hash) &&\n    queryIncludes(current.query, target.query)\n  )\n}\n\nfunction queryIncludes (current, target) {\n  for (var key in target) {\n    if (!(key in current)) {\n      return false\n    }\n  }\n  return true\n}\n\n/*  */\n\n// work around weird flow bug\nvar toTypes = [String, Object];\nvar eventTypes = [String, Array];\n\nvar Link = {\n  name: 'router-link',\n  props: {\n    to: {\n      type: toTypes,\n      required: true\n    },\n    tag: {\n      type: String,\n      default: 'a'\n    },\n    exact: Boolean,\n    append: Boolean,\n    replace: Boolean,\n    activeClass: String,\n    exactActiveClass: String,\n    event: {\n      type: eventTypes,\n      default: 'click'\n    }\n  },\n  render: function render (h) {\n    var this$1 = this;\n\n    var router = this.$router;\n    var current = this.$route;\n    var ref = router.resolve(this.to, current, this.append);\n    var location = ref.location;\n    var route = ref.route;\n    var href = ref.href;\n\n    var classes = {};\n    var globalActiveClass = router.options.linkActiveClass;\n    var globalExactActiveClass = router.options.linkExactActiveClass;\n    // Support global empty active class\n    var activeClassFallback = globalActiveClass == null\n            ? 'router-link-active'\n            : globalActiveClass;\n    var exactActiveClassFallback = globalExactActiveClass == null\n            ? 'router-link-exact-active'\n            : globalExactActiveClass;\n    var activeClass = this.activeClass == null\n            ? activeClassFallback\n            : this.activeClass;\n    var exactActiveClass = this.exactActiveClass == null\n            ? exactActiveClassFallback\n            : this.exactActiveClass;\n    var compareTarget = location.path\n      ? createRoute(null, location, null, router)\n      : route;\n\n    classes[exactActiveClass] = isSameRoute(current, compareTarget);\n    classes[activeClass] = this.exact\n      ? classes[exactActiveClass]\n      : isIncludedRoute(current, compareTarget);\n\n    var handler = function (e) {\n      if (guardEvent(e)) {\n        if (this$1.replace) {\n          router.replace(location);\n        } else {\n          router.push(location);\n        }\n      }\n    };\n\n    var on = { click: guardEvent };\n    if (Array.isArray(this.event)) {\n      this.event.forEach(function (e) { on[e] = handler; });\n    } else {\n      on[this.event] = handler;\n    }\n\n    var data = {\n      class: classes\n    };\n\n    if (this.tag === 'a') {\n      data.on = on;\n      data.attrs = { href: href };\n    } else {\n      // find the first <a> child and apply listener and href\n      var a = findAnchor(this.$slots.default);\n      if (a) {\n        // in case the <a> is a static node\n        a.isStatic = false;\n        var extend = _Vue.util.extend;\n        var aData = a.data = extend({}, a.data);\n        aData.on = on;\n        var aAttrs = a.data.attrs = extend({}, a.data.attrs);\n        aAttrs.href = href;\n      } else {\n        // doesn't have <a> child, apply listener to self\n        data.on = on;\n      }\n    }\n\n    return h(this.tag, data, this.$slots.default)\n  }\n};\n\nfunction guardEvent (e) {\n  // don't redirect with control keys\n  if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return }\n  // don't redirect when preventDefault called\n  if (e.defaultPrevented) { return }\n  // don't redirect on right click\n  if (e.button !== undefined && e.button !== 0) { return }\n  // don't redirect if `target=\"_blank\"`\n  if (e.currentTarget && e.currentTarget.getAttribute) {\n    var target = e.currentTarget.getAttribute('target');\n    if (/\\b_blank\\b/i.test(target)) { return }\n  }\n  // this may be a Weex event which doesn't have this method\n  if (e.preventDefault) {\n    e.preventDefault();\n  }\n  return true\n}\n\nfunction findAnchor (children) {\n  if (children) {\n    var child;\n    for (var i = 0; i < children.length; i++) {\n      child = children[i];\n      if (child.tag === 'a') {\n        return child\n      }\n      if (child.children && (child = findAnchor(child.children))) {\n        return child\n      }\n    }\n  }\n}\n\nvar _Vue;\n\nfunction install (Vue) {\n  if (install.installed && _Vue === Vue) { return }\n  install.installed = true;\n\n  _Vue = Vue;\n\n  var isDef = function (v) { return v !== undefined; };\n\n  var registerInstance = function (vm, callVal) {\n    var i = vm.$options._parentVnode;\n    if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {\n      i(vm, callVal);\n    }\n  };\n\n  Vue.mixin({\n    beforeCreate: function beforeCreate () {\n      if (isDef(this.$options.router)) {\n        this._routerRoot = this;\n        this._router = this.$options.router;\n        this._router.init(this);\n        Vue.util.defineReactive(this, '_route', this._router.history.current);\n      } else {\n        this._routerRoot = (this.$parent && this.$parent._routerRoot) || this;\n      }\n      registerInstance(this, this);\n    },\n    destroyed: function destroyed () {\n      registerInstance(this);\n    }\n  });\n\n  Object.defineProperty(Vue.prototype, '$router', {\n    get: function get () { return this._routerRoot._router }\n  });\n\n  Object.defineProperty(Vue.prototype, '$route', {\n    get: function get () { return this._routerRoot._route }\n  });\n\n  Vue.component('router-view', View);\n  Vue.component('router-link', Link);\n\n  var strats = Vue.config.optionMergeStrategies;\n  // use the same hook merging strategy for route hooks\n  strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created;\n}\n\n/*  */\n\nvar inBrowser = typeof window !== 'undefined';\n\n/*  */\n\nfunction resolvePath (\n  relative,\n  base,\n  append\n) {\n  var firstChar = relative.charAt(0);\n  if (firstChar === '/') {\n    return relative\n  }\n\n  if (firstChar === '?' || firstChar === '#') {\n    return base + relative\n  }\n\n  var stack = base.split('/');\n\n  // remove trailing segment if:\n  // - not appending\n  // - appending to trailing slash (last segment is empty)\n  if (!append || !stack[stack.length - 1]) {\n    stack.pop();\n  }\n\n  // resolve relative path\n  var segments = relative.replace(/^\\//, '').split('/');\n  for (var i = 0; i < segments.length; i++) {\n    var segment = segments[i];\n    if (segment === '..') {\n      stack.pop();\n    } else if (segment !== '.') {\n      stack.push(segment);\n    }\n  }\n\n  // ensure leading slash\n  if (stack[0] !== '') {\n    stack.unshift('');\n  }\n\n  return stack.join('/')\n}\n\nfunction parsePath (path) {\n  var hash = '';\n  var query = '';\n\n  var hashIndex = path.indexOf('#');\n  if (hashIndex >= 0) {\n    hash = path.slice(hashIndex);\n    path = path.slice(0, hashIndex);\n  }\n\n  var queryIndex = path.indexOf('?');\n  if (queryIndex >= 0) {\n    query = path.slice(queryIndex + 1);\n    path = path.slice(0, queryIndex);\n  }\n\n  return {\n    path: path,\n    query: query,\n    hash: hash\n  }\n}\n\nfunction cleanPath (path) {\n  return path.replace(/\\/\\//g, '/')\n}\n\nvar isarray = Array.isArray || function (arr) {\n  return Object.prototype.toString.call(arr) == '[object Array]';\n};\n\n/**\n * Expose `pathToRegexp`.\n */\nvar pathToRegexp_1 = pathToRegexp;\nvar parse_1 = parse;\nvar compile_1 = compile;\nvar tokensToFunction_1 = tokensToFunction;\nvar tokensToRegExp_1 = tokensToRegExp;\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n  // Match escaped characters that would otherwise appear in future matches.\n  // This allows the user to escape special characters that won't transform.\n  '(\\\\\\\\.)',\n  // Match Express-style parameters and un-named parameters with a prefix\n  // and optional suffixes. Matches appear as:\n  //\n  // \"/:test(\\\\d+)?\" => [\"/\", \"test\", \"\\d+\", undefined, \"?\", undefined]\n  // \"/route(\\\\d+)\"  => [undefined, undefined, undefined, \"\\d+\", undefined, undefined]\n  // \"/*\"            => [\"/\", undefined, undefined, undefined, undefined, \"*\"]\n  '([\\\\/.])?(?:(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?|(\\\\*))'\n].join('|'), 'g');\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param  {string}  str\n * @param  {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n  var tokens = [];\n  var key = 0;\n  var index = 0;\n  var path = '';\n  var defaultDelimiter = options && options.delimiter || '/';\n  var res;\n\n  while ((res = PATH_REGEXP.exec(str)) != null) {\n    var m = res[0];\n    var escaped = res[1];\n    var offset = res.index;\n    path += str.slice(index, offset);\n    index = offset + m.length;\n\n    // Ignore already escaped sequences.\n    if (escaped) {\n      path += escaped[1];\n      continue\n    }\n\n    var next = str[index];\n    var prefix = res[2];\n    var name = res[3];\n    var capture = res[4];\n    var group = res[5];\n    var modifier = res[6];\n    var asterisk = res[7];\n\n    // Push the current path onto the tokens.\n    if (path) {\n      tokens.push(path);\n      path = '';\n    }\n\n    var partial = prefix != null && next != null && next !== prefix;\n    var repeat = modifier === '+' || modifier === '*';\n    var optional = modifier === '?' || modifier === '*';\n    var delimiter = res[2] || defaultDelimiter;\n    var pattern = capture || group;\n\n    tokens.push({\n      name: name || key++,\n      prefix: prefix || '',\n      delimiter: delimiter,\n      optional: optional,\n      repeat: repeat,\n      partial: partial,\n      asterisk: !!asterisk,\n      pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')\n    });\n  }\n\n  // Match any characters still remaining.\n  if (index < str.length) {\n    path += str.substr(index);\n  }\n\n  // If the path exists, push it onto the end.\n  if (path) {\n    tokens.push(path);\n  }\n\n  return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param  {string}             str\n * @param  {Object=}            options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n  return tokensToFunction(parse(str, options))\n}\n\n/**\n * Prettier encoding of URI path segments.\n *\n * @param  {string}\n * @return {string}\n */\nfunction encodeURIComponentPretty (str) {\n  return encodeURI(str).replace(/[\\/?#]/g, function (c) {\n    return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n  })\n}\n\n/**\n * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.\n *\n * @param  {string}\n * @return {string}\n */\nfunction encodeAsterisk (str) {\n  return encodeURI(str).replace(/[?#]/g, function (c) {\n    return '%' + c.charCodeAt(0).toString(16).toUpperCase()\n  })\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens) {\n  // Compile all the tokens into regexps.\n  var matches = new Array(tokens.length);\n\n  // Compile all the patterns before compilation.\n  for (var i = 0; i < tokens.length; i++) {\n    if (typeof tokens[i] === 'object') {\n      matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$');\n    }\n  }\n\n  return function (obj, opts) {\n    var path = '';\n    var data = obj || {};\n    var options = opts || {};\n    var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;\n\n    for (var i = 0; i < tokens.length; i++) {\n      var token = tokens[i];\n\n      if (typeof token === 'string') {\n        path += token;\n\n        continue\n      }\n\n      var value = data[token.name];\n      var segment;\n\n      if (value == null) {\n        if (token.optional) {\n          // Prepend partial segment prefixes.\n          if (token.partial) {\n            path += token.prefix;\n          }\n\n          continue\n        } else {\n          throw new TypeError('Expected \"' + token.name + '\" to be defined')\n        }\n      }\n\n      if (isarray(value)) {\n        if (!token.repeat) {\n          throw new TypeError('Expected \"' + token.name + '\" to not repeat, but received `' + JSON.stringify(value) + '`')\n        }\n\n        if (value.length === 0) {\n          if (token.optional) {\n            continue\n          } else {\n            throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n          }\n        }\n\n        for (var j = 0; j < value.length; j++) {\n          segment = encode(value[j]);\n\n          if (!matches[i].test(segment)) {\n            throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\", but received `' + JSON.stringify(segment) + '`')\n          }\n\n          path += (j === 0 ? token.prefix : token.delimiter) + segment;\n        }\n\n        continue\n      }\n\n      segment = token.asterisk ? encodeAsterisk(value) : encode(value);\n\n      if (!matches[i].test(segment)) {\n        throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but received \"' + segment + '\"')\n      }\n\n      path += token.prefix + segment;\n    }\n\n    return path\n  }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param  {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n  return str.replace(/([.+*?=^!:${}()[\\]|\\/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param  {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n  return group.replace(/([=!:$\\/()])/g, '\\\\$1')\n}\n\n/**\n * Attach the keys as a property of the regexp.\n *\n * @param  {!RegExp} re\n * @param  {Array}   keys\n * @return {!RegExp}\n */\nfunction attachKeys (re, keys) {\n  re.keys = keys;\n  return re\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param  {Object} options\n * @return {string}\n */\nfunction flags (options) {\n  return options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param  {!RegExp} path\n * @param  {!Array}  keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n  // Use a negative lookahead to match only capturing groups.\n  var groups = path.source.match(/\\((?!\\?)/g);\n\n  if (groups) {\n    for (var i = 0; i < groups.length; i++) {\n      keys.push({\n        name: i,\n        prefix: null,\n        delimiter: null,\n        optional: false,\n        repeat: false,\n        partial: false,\n        asterisk: false,\n        pattern: null\n      });\n    }\n  }\n\n  return attachKeys(path, keys)\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param  {!Array}  path\n * @param  {Array}   keys\n * @param  {!Object} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n  var parts = [];\n\n  for (var i = 0; i < path.length; i++) {\n    parts.push(pathToRegexp(path[i], keys, options).source);\n  }\n\n  var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));\n\n  return attachKeys(regexp, keys)\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param  {string}  path\n * @param  {!Array}  keys\n * @param  {!Object} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n  return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param  {!Array}          tokens\n * @param  {(Array|Object)=} keys\n * @param  {Object=}         options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n  if (!isarray(keys)) {\n    options = /** @type {!Object} */ (keys || options);\n    keys = [];\n  }\n\n  options = options || {};\n\n  var strict = options.strict;\n  var end = options.end !== false;\n  var route = '';\n\n  // Iterate over the tokens and create our regexp string.\n  for (var i = 0; i < tokens.length; i++) {\n    var token = tokens[i];\n\n    if (typeof token === 'string') {\n      route += escapeString(token);\n    } else {\n      var prefix = escapeString(token.prefix);\n      var capture = '(?:' + token.pattern + ')';\n\n      keys.push(token);\n\n      if (token.repeat) {\n        capture += '(?:' + prefix + capture + ')*';\n      }\n\n      if (token.optional) {\n        if (!token.partial) {\n          capture = '(?:' + prefix + '(' + capture + '))?';\n        } else {\n          capture = prefix + '(' + capture + ')?';\n        }\n      } else {\n        capture = prefix + '(' + capture + ')';\n      }\n\n      route += capture;\n    }\n  }\n\n  var delimiter = escapeString(options.delimiter || '/');\n  var endsWithDelimiter = route.slice(-delimiter.length) === delimiter;\n\n  // In non-strict mode we allow a slash at the end of match. If the path to\n  // match already ends with a slash, we remove it for consistency. The slash\n  // is valid at the end of a path match, not in the middle. This is important\n  // in non-ending mode, where \"/test/\" shouldn't match \"/test//route\".\n  if (!strict) {\n    route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?';\n  }\n\n  if (end) {\n    route += '$';\n  } else {\n    // In non-ending mode, we need the capturing groups to match as much as\n    // possible by using a positive lookahead to the end or next path segment.\n    route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)';\n  }\n\n  return attachKeys(new RegExp('^' + route, flags(options)), keys)\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param  {(string|RegExp|Array)} path\n * @param  {(Array|Object)=}       keys\n * @param  {Object=}               options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n  if (!isarray(keys)) {\n    options = /** @type {!Object} */ (keys || options);\n    keys = [];\n  }\n\n  options = options || {};\n\n  if (path instanceof RegExp) {\n    return regexpToRegexp(path, /** @type {!Array} */ (keys))\n  }\n\n  if (isarray(path)) {\n    return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)\n  }\n\n  return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)\n}\n\npathToRegexp_1.parse = parse_1;\npathToRegexp_1.compile = compile_1;\npathToRegexp_1.tokensToFunction = tokensToFunction_1;\npathToRegexp_1.tokensToRegExp = tokensToRegExp_1;\n\n/*  */\n\n// $flow-disable-line\nvar regexpCompileCache = Object.create(null);\n\nfunction fillParams (\n  path,\n  params,\n  routeMsg\n) {\n  try {\n    var filler =\n      regexpCompileCache[path] ||\n      (regexpCompileCache[path] = pathToRegexp_1.compile(path));\n    return filler(params || {}, { pretty: true })\n  } catch (e) {\n    {\n      warn(false, (\"missing param for \" + routeMsg + \": \" + (e.message)));\n    }\n    return ''\n  }\n}\n\n/*  */\n\nfunction createRouteMap (\n  routes,\n  oldPathList,\n  oldPathMap,\n  oldNameMap\n) {\n  // the path list is used to control path matching priority\n  var pathList = oldPathList || [];\n  // $flow-disable-line\n  var pathMap = oldPathMap || Object.create(null);\n  // $flow-disable-line\n  var nameMap = oldNameMap || Object.create(null);\n\n  routes.forEach(function (route) {\n    addRouteRecord(pathList, pathMap, nameMap, route);\n  });\n\n  // ensure wildcard routes are always at the end\n  for (var i = 0, l = pathList.length; i < l; i++) {\n    if (pathList[i] === '*') {\n      pathList.push(pathList.splice(i, 1)[0]);\n      l--;\n      i--;\n    }\n  }\n\n  return {\n    pathList: pathList,\n    pathMap: pathMap,\n    nameMap: nameMap\n  }\n}\n\nfunction addRouteRecord (\n  pathList,\n  pathMap,\n  nameMap,\n  route,\n  parent,\n  matchAs\n) {\n  var path = route.path;\n  var name = route.name;\n  {\n    assert(path != null, \"\\\"path\\\" is required in a route configuration.\");\n    assert(\n      typeof route.component !== 'string',\n      \"route config \\\"component\\\" for path: \" + (String(path || name)) + \" cannot be a \" +\n      \"string id. Use an actual component instead.\"\n    );\n  }\n\n  var pathToRegexpOptions = route.pathToRegexpOptions || {};\n  var normalizedPath = normalizePath(\n    path,\n    parent,\n    pathToRegexpOptions.strict\n  );\n\n  if (typeof route.caseSensitive === 'boolean') {\n    pathToRegexpOptions.sensitive = route.caseSensitive;\n  }\n\n  var record = {\n    path: normalizedPath,\n    regex: compileRouteRegex(normalizedPath, pathToRegexpOptions),\n    components: route.components || { default: route.component },\n    instances: {},\n    name: name,\n    parent: parent,\n    matchAs: matchAs,\n    redirect: route.redirect,\n    beforeEnter: route.beforeEnter,\n    meta: route.meta || {},\n    props: route.props == null\n      ? {}\n      : route.components\n        ? route.props\n        : { default: route.props }\n  };\n\n  if (route.children) {\n    // Warn if route is named, does not redirect and has a default child route.\n    // If users navigate to this route by name, the default child will\n    // not be rendered (GH Issue #629)\n    {\n      if (route.name && !route.redirect && route.children.some(function (child) { return /^\\/?$/.test(child.path); })) {\n        warn(\n          false,\n          \"Named Route '\" + (route.name) + \"' has a default child route. \" +\n          \"When navigating to this named route (:to=\\\"{name: '\" + (route.name) + \"'\\\"), \" +\n          \"the default child route will not be rendered. Remove the name from \" +\n          \"this route and use the name of the default child route for named \" +\n          \"links instead.\"\n        );\n      }\n    }\n    route.children.forEach(function (child) {\n      var childMatchAs = matchAs\n        ? cleanPath((matchAs + \"/\" + (child.path)))\n        : undefined;\n      addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs);\n    });\n  }\n\n  if (route.alias !== undefined) {\n    var aliases = Array.isArray(route.alias)\n      ? route.alias\n      : [route.alias];\n\n    aliases.forEach(function (alias) {\n      var aliasRoute = {\n        path: alias,\n        children: route.children\n      };\n      addRouteRecord(\n        pathList,\n        pathMap,\n        nameMap,\n        aliasRoute,\n        parent,\n        record.path || '/' // matchAs\n      );\n    });\n  }\n\n  if (!pathMap[record.path]) {\n    pathList.push(record.path);\n    pathMap[record.path] = record;\n  }\n\n  if (name) {\n    if (!nameMap[name]) {\n      nameMap[name] = record;\n    } else if (\"development\" !== 'production' && !matchAs) {\n      warn(\n        false,\n        \"Duplicate named routes definition: \" +\n        \"{ name: \\\"\" + name + \"\\\", path: \\\"\" + (record.path) + \"\\\" }\"\n      );\n    }\n  }\n}\n\nfunction compileRouteRegex (path, pathToRegexpOptions) {\n  var regex = pathToRegexp_1(path, [], pathToRegexpOptions);\n  {\n    var keys = Object.create(null);\n    regex.keys.forEach(function (key) {\n      warn(!keys[key.name], (\"Duplicate param keys in route with path: \\\"\" + path + \"\\\"\"));\n      keys[key.name] = true;\n    });\n  }\n  return regex\n}\n\nfunction normalizePath (path, parent, strict) {\n  if (!strict) { path = path.replace(/\\/$/, ''); }\n  if (path[0] === '/') { return path }\n  if (parent == null) { return path }\n  return cleanPath(((parent.path) + \"/\" + path))\n}\n\n/*  */\n\n\nfunction normalizeLocation (\n  raw,\n  current,\n  append,\n  router\n) {\n  var next = typeof raw === 'string' ? { path: raw } : raw;\n  // named target\n  if (next.name || next._normalized) {\n    return next\n  }\n\n  // relative params\n  if (!next.path && next.params && current) {\n    next = assign({}, next);\n    next._normalized = true;\n    var params = assign(assign({}, current.params), next.params);\n    if (current.name) {\n      next.name = current.name;\n      next.params = params;\n    } else if (current.matched.length) {\n      var rawPath = current.matched[current.matched.length - 1].path;\n      next.path = fillParams(rawPath, params, (\"path \" + (current.path)));\n    } else {\n      warn(false, \"relative params navigation requires a current route.\");\n    }\n    return next\n  }\n\n  var parsedPath = parsePath(next.path || '');\n  var basePath = (current && current.path) || '/';\n  var path = parsedPath.path\n    ? resolvePath(parsedPath.path, basePath, append || next.append)\n    : basePath;\n\n  var query = resolveQuery(\n    parsedPath.query,\n    next.query,\n    router && router.options.parseQuery\n  );\n\n  var hash = next.hash || parsedPath.hash;\n  if (hash && hash.charAt(0) !== '#') {\n    hash = \"#\" + hash;\n  }\n\n  return {\n    _normalized: true,\n    path: path,\n    query: query,\n    hash: hash\n  }\n}\n\nfunction assign (a, b) {\n  for (var key in b) {\n    a[key] = b[key];\n  }\n  return a\n}\n\n/*  */\n\n\nfunction createMatcher (\n  routes,\n  router\n) {\n  var ref = createRouteMap(routes);\n  var pathList = ref.pathList;\n  var pathMap = ref.pathMap;\n  var nameMap = ref.nameMap;\n\n  function addRoutes (routes) {\n    createRouteMap(routes, pathList, pathMap, nameMap);\n  }\n\n  function match (\n    raw,\n    currentRoute,\n    redirectedFrom\n  ) {\n    var location = normalizeLocation(raw, currentRoute, false, router);\n    var name = location.name;\n\n    if (name) {\n      var record = nameMap[name];\n      {\n        warn(record, (\"Route with name '\" + name + \"' does not exist\"));\n      }\n      if (!record) { return _createRoute(null, location) }\n      var paramNames = record.regex.keys\n        .filter(function (key) { return !key.optional; })\n        .map(function (key) { return key.name; });\n\n      if (typeof location.params !== 'object') {\n        location.params = {};\n      }\n\n      if (currentRoute && typeof currentRoute.params === 'object') {\n        for (var key in currentRoute.params) {\n          if (!(key in location.params) && paramNames.indexOf(key) > -1) {\n            location.params[key] = currentRoute.params[key];\n          }\n        }\n      }\n\n      if (record) {\n        location.path = fillParams(record.path, location.params, (\"named route \\\"\" + name + \"\\\"\"));\n        return _createRoute(record, location, redirectedFrom)\n      }\n    } else if (location.path) {\n      location.params = {};\n      for (var i = 0; i < pathList.length; i++) {\n        var path = pathList[i];\n        var record$1 = pathMap[path];\n        if (matchRoute(record$1.regex, location.path, location.params)) {\n          return _createRoute(record$1, location, redirectedFrom)\n        }\n      }\n    }\n    // no match\n    return _createRoute(null, location)\n  }\n\n  function redirect (\n    record,\n    location\n  ) {\n    var originalRedirect = record.redirect;\n    var redirect = typeof originalRedirect === 'function'\n        ? originalRedirect(createRoute(record, location, null, router))\n        : originalRedirect;\n\n    if (typeof redirect === 'string') {\n      redirect = { path: redirect };\n    }\n\n    if (!redirect || typeof redirect !== 'object') {\n      {\n        warn(\n          false, (\"invalid redirect option: \" + (JSON.stringify(redirect)))\n        );\n      }\n      return _createRoute(null, location)\n    }\n\n    var re = redirect;\n    var name = re.name;\n    var path = re.path;\n    var query = location.query;\n    var hash = location.hash;\n    var params = location.params;\n    query = re.hasOwnProperty('query') ? re.query : query;\n    hash = re.hasOwnProperty('hash') ? re.hash : hash;\n    params = re.hasOwnProperty('params') ? re.params : params;\n\n    if (name) {\n      // resolved named direct\n      var targetRecord = nameMap[name];\n      {\n        assert(targetRecord, (\"redirect failed: named route \\\"\" + name + \"\\\" not found.\"));\n      }\n      return match({\n        _normalized: true,\n        name: name,\n        query: query,\n        hash: hash,\n        params: params\n      }, undefined, location)\n    } else if (path) {\n      // 1. resolve relative redirect\n      var rawPath = resolveRecordPath(path, record);\n      // 2. resolve params\n      var resolvedPath = fillParams(rawPath, params, (\"redirect route with path \\\"\" + rawPath + \"\\\"\"));\n      // 3. rematch with existing query and hash\n      return match({\n        _normalized: true,\n        path: resolvedPath,\n        query: query,\n        hash: hash\n      }, undefined, location)\n    } else {\n      {\n        warn(false, (\"invalid redirect option: \" + (JSON.stringify(redirect))));\n      }\n      return _createRoute(null, location)\n    }\n  }\n\n  function alias (\n    record,\n    location,\n    matchAs\n  ) {\n    var aliasedPath = fillParams(matchAs, location.params, (\"aliased route with path \\\"\" + matchAs + \"\\\"\"));\n    var aliasedMatch = match({\n      _normalized: true,\n      path: aliasedPath\n    });\n    if (aliasedMatch) {\n      var matched = aliasedMatch.matched;\n      var aliasedRecord = matched[matched.length - 1];\n      location.params = aliasedMatch.params;\n      return _createRoute(aliasedRecord, location)\n    }\n    return _createRoute(null, location)\n  }\n\n  function _createRoute (\n    record,\n    location,\n    redirectedFrom\n  ) {\n    if (record && record.redirect) {\n      return redirect(record, redirectedFrom || location)\n    }\n    if (record && record.matchAs) {\n      return alias(record, location, record.matchAs)\n    }\n    return createRoute(record, location, redirectedFrom, router)\n  }\n\n  return {\n    match: match,\n    addRoutes: addRoutes\n  }\n}\n\nfunction matchRoute (\n  regex,\n  path,\n  params\n) {\n  var m = path.match(regex);\n\n  if (!m) {\n    return false\n  } else if (!params) {\n    return true\n  }\n\n  for (var i = 1, len = m.length; i < len; ++i) {\n    var key = regex.keys[i - 1];\n    var val = typeof m[i] === 'string' ? decodeURIComponent(m[i]) : m[i];\n    if (key) {\n      params[key.name] = val;\n    }\n  }\n\n  return true\n}\n\nfunction resolveRecordPath (path, record) {\n  return resolvePath(path, record.parent ? record.parent.path : '/', true)\n}\n\n/*  */\n\n\nvar positionStore = Object.create(null);\n\nfunction setupScroll () {\n  // Fix for #1585 for Firefox\n  window.history.replaceState({ key: getStateKey() }, '');\n  window.addEventListener('popstate', function (e) {\n    saveScrollPosition();\n    if (e.state && e.state.key) {\n      setStateKey(e.state.key);\n    }\n  });\n}\n\nfunction handleScroll (\n  router,\n  to,\n  from,\n  isPop\n) {\n  if (!router.app) {\n    return\n  }\n\n  var behavior = router.options.scrollBehavior;\n  if (!behavior) {\n    return\n  }\n\n  {\n    assert(typeof behavior === 'function', \"scrollBehavior must be a function\");\n  }\n\n  // wait until re-render finishes before scrolling\n  router.app.$nextTick(function () {\n    var position = getScrollPosition();\n    var shouldScroll = behavior(to, from, isPop ? position : null);\n\n    if (!shouldScroll) {\n      return\n    }\n\n    if (typeof shouldScroll.then === 'function') {\n      shouldScroll.then(function (shouldScroll) {\n        scrollToPosition((shouldScroll), position);\n      }).catch(function (err) {\n        {\n          assert(false, err.toString());\n        }\n      });\n    } else {\n      scrollToPosition(shouldScroll, position);\n    }\n  });\n}\n\nfunction saveScrollPosition () {\n  var key = getStateKey();\n  if (key) {\n    positionStore[key] = {\n      x: window.pageXOffset,\n      y: window.pageYOffset\n    };\n  }\n}\n\nfunction getScrollPosition () {\n  var key = getStateKey();\n  if (key) {\n    return positionStore[key]\n  }\n}\n\nfunction getElementPosition (el, offset) {\n  var docEl = document.documentElement;\n  var docRect = docEl.getBoundingClientRect();\n  var elRect = el.getBoundingClientRect();\n  return {\n    x: elRect.left - docRect.left - offset.x,\n    y: elRect.top - docRect.top - offset.y\n  }\n}\n\nfunction isValidPosition (obj) {\n  return isNumber(obj.x) || isNumber(obj.y)\n}\n\nfunction normalizePosition (obj) {\n  return {\n    x: isNumber(obj.x) ? obj.x : window.pageXOffset,\n    y: isNumber(obj.y) ? obj.y : window.pageYOffset\n  }\n}\n\nfunction normalizeOffset (obj) {\n  return {\n    x: isNumber(obj.x) ? obj.x : 0,\n    y: isNumber(obj.y) ? obj.y : 0\n  }\n}\n\nfunction isNumber (v) {\n  return typeof v === 'number'\n}\n\nfunction scrollToPosition (shouldScroll, position) {\n  var isObject = typeof shouldScroll === 'object';\n  if (isObject && typeof shouldScroll.selector === 'string') {\n    var el = document.querySelector(shouldScroll.selector);\n    if (el) {\n      var offset = shouldScroll.offset && typeof shouldScroll.offset === 'object' ? shouldScroll.offset : {};\n      offset = normalizeOffset(offset);\n      position = getElementPosition(el, offset);\n    } else if (isValidPosition(shouldScroll)) {\n      position = normalizePosition(shouldScroll);\n    }\n  } else if (isObject && isValidPosition(shouldScroll)) {\n    position = normalizePosition(shouldScroll);\n  }\n\n  if (position) {\n    window.scrollTo(position.x, position.y);\n  }\n}\n\n/*  */\n\nvar supportsPushState = inBrowser && (function () {\n  var ua = window.navigator.userAgent;\n\n  if (\n    (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&\n    ua.indexOf('Mobile Safari') !== -1 &&\n    ua.indexOf('Chrome') === -1 &&\n    ua.indexOf('Windows Phone') === -1\n  ) {\n    return false\n  }\n\n  return window.history && 'pushState' in window.history\n})();\n\n// use User Timing api (if present) for more accurate key precision\nvar Time = inBrowser && window.performance && window.performance.now\n  ? window.performance\n  : Date;\n\nvar _key = genKey();\n\nfunction genKey () {\n  return Time.now().toFixed(3)\n}\n\nfunction getStateKey () {\n  return _key\n}\n\nfunction setStateKey (key) {\n  _key = key;\n}\n\nfunction pushState (url, replace) {\n  saveScrollPosition();\n  // try...catch the pushState call to get around Safari\n  // DOM Exception 18 where it limits to 100 pushState calls\n  var history = window.history;\n  try {\n    if (replace) {\n      history.replaceState({ key: _key }, '', url);\n    } else {\n      _key = genKey();\n      history.pushState({ key: _key }, '', url);\n    }\n  } catch (e) {\n    window.location[replace ? 'replace' : 'assign'](url);\n  }\n}\n\nfunction replaceState (url) {\n  pushState(url, true);\n}\n\n/*  */\n\nfunction runQueue (queue, fn, cb) {\n  var step = function (index) {\n    if (index >= queue.length) {\n      cb();\n    } else {\n      if (queue[index]) {\n        fn(queue[index], function () {\n          step(index + 1);\n        });\n      } else {\n        step(index + 1);\n      }\n    }\n  };\n  step(0);\n}\n\n/*  */\n\nfunction resolveAsyncComponents (matched) {\n  return function (to, from, next) {\n    var hasAsync = false;\n    var pending = 0;\n    var error = null;\n\n    flatMapComponents(matched, function (def, _, match, key) {\n      // if it's a function and doesn't have cid attached,\n      // assume it's an async component resolve function.\n      // we are not using Vue's default async resolving mechanism because\n      // we want to halt the navigation until the incoming component has been\n      // resolved.\n      if (typeof def === 'function' && def.cid === undefined) {\n        hasAsync = true;\n        pending++;\n\n        var resolve = once(function (resolvedDef) {\n          if (isESModule(resolvedDef)) {\n            resolvedDef = resolvedDef.default;\n          }\n          // save resolved on async factory in case it's used elsewhere\n          def.resolved = typeof resolvedDef === 'function'\n            ? resolvedDef\n            : _Vue.extend(resolvedDef);\n          match.components[key] = resolvedDef;\n          pending--;\n          if (pending <= 0) {\n            next();\n          }\n        });\n\n        var reject = once(function (reason) {\n          var msg = \"Failed to resolve async component \" + key + \": \" + reason;\n          \"development\" !== 'production' && warn(false, msg);\n          if (!error) {\n            error = isError(reason)\n              ? reason\n              : new Error(msg);\n            next(error);\n          }\n        });\n\n        var res;\n        try {\n          res = def(resolve, reject);\n        } catch (e) {\n          reject(e);\n        }\n        if (res) {\n          if (typeof res.then === 'function') {\n            res.then(resolve, reject);\n          } else {\n            // new syntax in Vue 2.3\n            var comp = res.component;\n            if (comp && typeof comp.then === 'function') {\n              comp.then(resolve, reject);\n            }\n          }\n        }\n      }\n    });\n\n    if (!hasAsync) { next(); }\n  }\n}\n\nfunction flatMapComponents (\n  matched,\n  fn\n) {\n  return flatten(matched.map(function (m) {\n    return Object.keys(m.components).map(function (key) { return fn(\n      m.components[key],\n      m.instances[key],\n      m, key\n    ); })\n  }))\n}\n\nfunction flatten (arr) {\n  return Array.prototype.concat.apply([], arr)\n}\n\nvar hasSymbol =\n  typeof Symbol === 'function' &&\n  typeof Symbol.toStringTag === 'symbol';\n\nfunction isESModule (obj) {\n  return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module')\n}\n\n// in Webpack 2, require.ensure now also returns a Promise\n// so the resolve/reject functions may get called an extra time\n// if the user uses an arrow function shorthand that happens to\n// return that Promise.\nfunction once (fn) {\n  var called = false;\n  return function () {\n    var args = [], len = arguments.length;\n    while ( len-- ) args[ len ] = arguments[ len ];\n\n    if (called) { return }\n    called = true;\n    return fn.apply(this, args)\n  }\n}\n\n/*  */\n\nvar History = function History (router, base) {\n  this.router = router;\n  this.base = normalizeBase(base);\n  // start with a route object that stands for \"nowhere\"\n  this.current = START;\n  this.pending = null;\n  this.ready = false;\n  this.readyCbs = [];\n  this.readyErrorCbs = [];\n  this.errorCbs = [];\n};\n\nHistory.prototype.listen = function listen (cb) {\n  this.cb = cb;\n};\n\nHistory.prototype.onReady = function onReady (cb, errorCb) {\n  if (this.ready) {\n    cb();\n  } else {\n    this.readyCbs.push(cb);\n    if (errorCb) {\n      this.readyErrorCbs.push(errorCb);\n    }\n  }\n};\n\nHistory.prototype.onError = function onError (errorCb) {\n  this.errorCbs.push(errorCb);\n};\n\nHistory.prototype.transitionTo = function transitionTo (location, onComplete, onAbort) {\n    var this$1 = this;\n\n  var route = this.router.match(location, this.current);\n  this.confirmTransition(route, function () {\n    this$1.updateRoute(route);\n    onComplete && onComplete(route);\n    this$1.ensureURL();\n\n    // fire ready cbs once\n    if (!this$1.ready) {\n      this$1.ready = true;\n      this$1.readyCbs.forEach(function (cb) { cb(route); });\n    }\n  }, function (err) {\n    if (onAbort) {\n      onAbort(err);\n    }\n    if (err && !this$1.ready) {\n      this$1.ready = true;\n      this$1.readyErrorCbs.forEach(function (cb) { cb(err); });\n    }\n  });\n};\n\nHistory.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) {\n    var this$1 = this;\n\n  var current = this.current;\n  var abort = function (err) {\n    if (isError(err)) {\n      if (this$1.errorCbs.length) {\n        this$1.errorCbs.forEach(function (cb) { cb(err); });\n      } else {\n        warn(false, 'uncaught error during route navigation:');\n        console.error(err);\n      }\n    }\n    onAbort && onAbort(err);\n  };\n  if (\n    isSameRoute(route, current) &&\n    // in the case the route map has been dynamically appended to\n    route.matched.length === current.matched.length\n  ) {\n    this.ensureURL();\n    return abort()\n  }\n\n  var ref = resolveQueue(this.current.matched, route.matched);\n    var updated = ref.updated;\n    var deactivated = ref.deactivated;\n    var activated = ref.activated;\n\n  var queue = [].concat(\n    // in-component leave guards\n    extractLeaveGuards(deactivated),\n    // global before hooks\n    this.router.beforeHooks,\n    // in-component update hooks\n    extractUpdateHooks(updated),\n    // in-config enter guards\n    activated.map(function (m) { return m.beforeEnter; }),\n    // async components\n    resolveAsyncComponents(activated)\n  );\n\n  this.pending = route;\n  var iterator = function (hook, next) {\n    if (this$1.pending !== route) {\n      return abort()\n    }\n    try {\n      hook(route, current, function (to) {\n        if (to === false || isError(to)) {\n          // next(false) -> abort navigation, ensure current URL\n          this$1.ensureURL(true);\n          abort(to);\n        } else if (\n          typeof to === 'string' ||\n          (typeof to === 'object' && (\n            typeof to.path === 'string' ||\n            typeof to.name === 'string'\n          ))\n        ) {\n          // next('/') or next({ path: '/' }) -> redirect\n          abort();\n          if (typeof to === 'object' && to.replace) {\n            this$1.replace(to);\n          } else {\n            this$1.push(to);\n          }\n        } else {\n          // confirm transition and pass on the value\n          next(to);\n        }\n      });\n    } catch (e) {\n      abort(e);\n    }\n  };\n\n  runQueue(queue, iterator, function () {\n    var postEnterCbs = [];\n    var isValid = function () { return this$1.current === route; };\n    // wait until async components are resolved before\n    // extracting in-component enter guards\n    var enterGuards = extractEnterGuards(activated, postEnterCbs, isValid);\n    var queue = enterGuards.concat(this$1.router.resolveHooks);\n    runQueue(queue, iterator, function () {\n      if (this$1.pending !== route) {\n        return abort()\n      }\n      this$1.pending = null;\n      onComplete(route);\n      if (this$1.router.app) {\n        this$1.router.app.$nextTick(function () {\n          postEnterCbs.forEach(function (cb) { cb(); });\n        });\n      }\n    });\n  });\n};\n\nHistory.prototype.updateRoute = function updateRoute (route) {\n  var prev = this.current;\n  this.current = route;\n  this.cb && this.cb(route);\n  this.router.afterHooks.forEach(function (hook) {\n    hook && hook(route, prev);\n  });\n};\n\nfunction normalizeBase (base) {\n  if (!base) {\n    if (inBrowser) {\n      // respect <base> tag\n      var baseEl = document.querySelector('base');\n      base = (baseEl && baseEl.getAttribute('href')) || '/';\n      // strip full URL origin\n      base = base.replace(/^https?:\\/\\/[^\\/]+/, '');\n    } else {\n      base = '/';\n    }\n  }\n  // make sure there's the starting slash\n  if (base.charAt(0) !== '/') {\n    base = '/' + base;\n  }\n  // remove trailing slash\n  return base.replace(/\\/$/, '')\n}\n\nfunction resolveQueue (\n  current,\n  next\n) {\n  var i;\n  var max = Math.max(current.length, next.length);\n  for (i = 0; i < max; i++) {\n    if (current[i] !== next[i]) {\n      break\n    }\n  }\n  return {\n    updated: next.slice(0, i),\n    activated: next.slice(i),\n    deactivated: current.slice(i)\n  }\n}\n\nfunction extractGuards (\n  records,\n  name,\n  bind,\n  reverse\n) {\n  var guards = flatMapComponents(records, function (def, instance, match, key) {\n    var guard = extractGuard(def, name);\n    if (guard) {\n      return Array.isArray(guard)\n        ? guard.map(function (guard) { return bind(guard, instance, match, key); })\n        : bind(guard, instance, match, key)\n    }\n  });\n  return flatten(reverse ? guards.reverse() : guards)\n}\n\nfunction extractGuard (\n  def,\n  key\n) {\n  if (typeof def !== 'function') {\n    // extend now so that global mixins are applied.\n    def = _Vue.extend(def);\n  }\n  return def.options[key]\n}\n\nfunction extractLeaveGuards (deactivated) {\n  return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true)\n}\n\nfunction extractUpdateHooks (updated) {\n  return extractGuards(updated, 'beforeRouteUpdate', bindGuard)\n}\n\nfunction bindGuard (guard, instance) {\n  if (instance) {\n    return function boundRouteGuard () {\n      return guard.apply(instance, arguments)\n    }\n  }\n}\n\nfunction extractEnterGuards (\n  activated,\n  cbs,\n  isValid\n) {\n  return extractGuards(activated, 'beforeRouteEnter', function (guard, _, match, key) {\n    return bindEnterGuard(guard, match, key, cbs, isValid)\n  })\n}\n\nfunction bindEnterGuard (\n  guard,\n  match,\n  key,\n  cbs,\n  isValid\n) {\n  return function routeEnterGuard (to, from, next) {\n    return guard(to, from, function (cb) {\n      next(cb);\n      if (typeof cb === 'function') {\n        cbs.push(function () {\n          // #750\n          // if a router-view is wrapped with an out-in transition,\n          // the instance may not have been registered at this time.\n          // we will need to poll for registration until current route\n          // is no longer valid.\n          poll(cb, match.instances, key, isValid);\n        });\n      }\n    })\n  }\n}\n\nfunction poll (\n  cb, // somehow flow cannot infer this is a function\n  instances,\n  key,\n  isValid\n) {\n  if (instances[key]) {\n    cb(instances[key]);\n  } else if (isValid()) {\n    setTimeout(function () {\n      poll(cb, instances, key, isValid);\n    }, 16);\n  }\n}\n\n/*  */\n\n\nvar HTML5History = (function (History$$1) {\n  function HTML5History (router, base) {\n    var this$1 = this;\n\n    History$$1.call(this, router, base);\n\n    var expectScroll = router.options.scrollBehavior;\n\n    if (expectScroll) {\n      setupScroll();\n    }\n\n    var initLocation = getLocation(this.base);\n    window.addEventListener('popstate', function (e) {\n      var current = this$1.current;\n\n      // Avoiding first `popstate` event dispatched in some browsers but first\n      // history route not updated since async guard at the same time.\n      var location = getLocation(this$1.base);\n      if (this$1.current === START && location === initLocation) {\n        return\n      }\n\n      this$1.transitionTo(location, function (route) {\n        if (expectScroll) {\n          handleScroll(router, route, current, true);\n        }\n      });\n    });\n  }\n\n  if ( History$$1 ) HTML5History.__proto__ = History$$1;\n  HTML5History.prototype = Object.create( History$$1 && History$$1.prototype );\n  HTML5History.prototype.constructor = HTML5History;\n\n  HTML5History.prototype.go = function go (n) {\n    window.history.go(n);\n  };\n\n  HTML5History.prototype.push = function push (location, onComplete, onAbort) {\n    var this$1 = this;\n\n    var ref = this;\n    var fromRoute = ref.current;\n    this.transitionTo(location, function (route) {\n      pushState(cleanPath(this$1.base + route.fullPath));\n      handleScroll(this$1.router, route, fromRoute, false);\n      onComplete && onComplete(route);\n    }, onAbort);\n  };\n\n  HTML5History.prototype.replace = function replace (location, onComplete, onAbort) {\n    var this$1 = this;\n\n    var ref = this;\n    var fromRoute = ref.current;\n    this.transitionTo(location, function (route) {\n      replaceState(cleanPath(this$1.base + route.fullPath));\n      handleScroll(this$1.router, route, fromRoute, false);\n      onComplete && onComplete(route);\n    }, onAbort);\n  };\n\n  HTML5History.prototype.ensureURL = function ensureURL (push) {\n    if (getLocation(this.base) !== this.current.fullPath) {\n      var current = cleanPath(this.base + this.current.fullPath);\n      push ? pushState(current) : replaceState(current);\n    }\n  };\n\n  HTML5History.prototype.getCurrentLocation = function getCurrentLocation () {\n    return getLocation(this.base)\n  };\n\n  return HTML5History;\n}(History));\n\nfunction getLocation (base) {\n  var path = window.location.pathname;\n  if (base && path.indexOf(base) === 0) {\n    path = path.slice(base.length);\n  }\n  return (path || '/') + window.location.search + window.location.hash\n}\n\n/*  */\n\n\nvar HashHistory = (function (History$$1) {\n  function HashHistory (router, base, fallback) {\n    History$$1.call(this, router, base);\n    // check history fallback deeplinking\n    if (fallback && checkFallback(this.base)) {\n      return\n    }\n    ensureSlash();\n  }\n\n  if ( History$$1 ) HashHistory.__proto__ = History$$1;\n  HashHistory.prototype = Object.create( History$$1 && History$$1.prototype );\n  HashHistory.prototype.constructor = HashHistory;\n\n  // this is delayed until the app mounts\n  // to avoid the hashchange listener being fired too early\n  HashHistory.prototype.setupListeners = function setupListeners () {\n    var this$1 = this;\n\n    var router = this.router;\n    var expectScroll = router.options.scrollBehavior;\n    var supportsScroll = supportsPushState && expectScroll;\n\n    if (supportsScroll) {\n      setupScroll();\n    }\n\n    window.addEventListener(supportsPushState ? 'popstate' : 'hashchange', function () {\n      var current = this$1.current;\n      if (!ensureSlash()) {\n        return\n      }\n      this$1.transitionTo(getHash(), function (route) {\n        if (supportsScroll) {\n          handleScroll(this$1.router, route, current, true);\n        }\n        if (!supportsPushState) {\n          replaceHash(route.fullPath);\n        }\n      });\n    });\n  };\n\n  HashHistory.prototype.push = function push (location, onComplete, onAbort) {\n    var this$1 = this;\n\n    var ref = this;\n    var fromRoute = ref.current;\n    this.transitionTo(location, function (route) {\n      pushHash(route.fullPath);\n      handleScroll(this$1.router, route, fromRoute, false);\n      onComplete && onComplete(route);\n    }, onAbort);\n  };\n\n  HashHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n    var this$1 = this;\n\n    var ref = this;\n    var fromRoute = ref.current;\n    this.transitionTo(location, function (route) {\n      replaceHash(route.fullPath);\n      handleScroll(this$1.router, route, fromRoute, false);\n      onComplete && onComplete(route);\n    }, onAbort);\n  };\n\n  HashHistory.prototype.go = function go (n) {\n    window.history.go(n);\n  };\n\n  HashHistory.prototype.ensureURL = function ensureURL (push) {\n    var current = this.current.fullPath;\n    if (getHash() !== current) {\n      push ? pushHash(current) : replaceHash(current);\n    }\n  };\n\n  HashHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n    return getHash()\n  };\n\n  return HashHistory;\n}(History));\n\nfunction checkFallback (base) {\n  var location = getLocation(base);\n  if (!/^\\/#/.test(location)) {\n    window.location.replace(\n      cleanPath(base + '/#' + location)\n    );\n    return true\n  }\n}\n\nfunction ensureSlash () {\n  var path = getHash();\n  if (path.charAt(0) === '/') {\n    return true\n  }\n  replaceHash('/' + path);\n  return false\n}\n\nfunction getHash () {\n  // We can't use window.location.hash here because it's not\n  // consistent across browsers - Firefox will pre-decode it!\n  var href = window.location.href;\n  var index = href.indexOf('#');\n  return index === -1 ? '' : href.slice(index + 1)\n}\n\nfunction getUrl (path) {\n  var href = window.location.href;\n  var i = href.indexOf('#');\n  var base = i >= 0 ? href.slice(0, i) : href;\n  return (base + \"#\" + path)\n}\n\nfunction pushHash (path) {\n  if (supportsPushState) {\n    pushState(getUrl(path));\n  } else {\n    window.location.hash = path;\n  }\n}\n\nfunction replaceHash (path) {\n  if (supportsPushState) {\n    replaceState(getUrl(path));\n  } else {\n    window.location.replace(getUrl(path));\n  }\n}\n\n/*  */\n\n\nvar AbstractHistory = (function (History$$1) {\n  function AbstractHistory (router, base) {\n    History$$1.call(this, router, base);\n    this.stack = [];\n    this.index = -1;\n  }\n\n  if ( History$$1 ) AbstractHistory.__proto__ = History$$1;\n  AbstractHistory.prototype = Object.create( History$$1 && History$$1.prototype );\n  AbstractHistory.prototype.constructor = AbstractHistory;\n\n  AbstractHistory.prototype.push = function push (location, onComplete, onAbort) {\n    var this$1 = this;\n\n    this.transitionTo(location, function (route) {\n      this$1.stack = this$1.stack.slice(0, this$1.index + 1).concat(route);\n      this$1.index++;\n      onComplete && onComplete(route);\n    }, onAbort);\n  };\n\n  AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) {\n    var this$1 = this;\n\n    this.transitionTo(location, function (route) {\n      this$1.stack = this$1.stack.slice(0, this$1.index).concat(route);\n      onComplete && onComplete(route);\n    }, onAbort);\n  };\n\n  AbstractHistory.prototype.go = function go (n) {\n    var this$1 = this;\n\n    var targetIndex = this.index + n;\n    if (targetIndex < 0 || targetIndex >= this.stack.length) {\n      return\n    }\n    var route = this.stack[targetIndex];\n    this.confirmTransition(route, function () {\n      this$1.index = targetIndex;\n      this$1.updateRoute(route);\n    });\n  };\n\n  AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () {\n    var current = this.stack[this.stack.length - 1];\n    return current ? current.fullPath : '/'\n  };\n\n  AbstractHistory.prototype.ensureURL = function ensureURL () {\n    // noop\n  };\n\n  return AbstractHistory;\n}(History));\n\n/*  */\n\nvar VueRouter = function VueRouter (options) {\n  if ( options === void 0 ) options = {};\n\n  this.app = null;\n  this.apps = [];\n  this.options = options;\n  this.beforeHooks = [];\n  this.resolveHooks = [];\n  this.afterHooks = [];\n  this.matcher = createMatcher(options.routes || [], this);\n\n  var mode = options.mode || 'hash';\n  this.fallback = mode === 'history' && !supportsPushState && options.fallback !== false;\n  if (this.fallback) {\n    mode = 'hash';\n  }\n  if (!inBrowser) {\n    mode = 'abstract';\n  }\n  this.mode = mode;\n\n  switch (mode) {\n    case 'history':\n      this.history = new HTML5History(this, options.base);\n      break\n    case 'hash':\n      this.history = new HashHistory(this, options.base, this.fallback);\n      break\n    case 'abstract':\n      this.history = new AbstractHistory(this, options.base);\n      break\n    default:\n      {\n        assert(false, (\"invalid mode: \" + mode));\n      }\n  }\n};\n\nvar prototypeAccessors = { currentRoute: { configurable: true } };\n\nVueRouter.prototype.match = function match (\n  raw,\n  current,\n  redirectedFrom\n) {\n  return this.matcher.match(raw, current, redirectedFrom)\n};\n\nprototypeAccessors.currentRoute.get = function () {\n  return this.history && this.history.current\n};\n\nVueRouter.prototype.init = function init (app /* Vue component instance */) {\n    var this$1 = this;\n\n  \"development\" !== 'production' && assert(\n    install.installed,\n    \"not installed. Make sure to call `Vue.use(VueRouter)` \" +\n    \"before creating root instance.\"\n  );\n\n  this.apps.push(app);\n\n  // main app already initialized.\n  if (this.app) {\n    return\n  }\n\n  this.app = app;\n\n  var history = this.history;\n\n  if (history instanceof HTML5History) {\n    history.transitionTo(history.getCurrentLocation());\n  } else if (history instanceof HashHistory) {\n    var setupHashListener = function () {\n      history.setupListeners();\n    };\n    history.transitionTo(\n      history.getCurrentLocation(),\n      setupHashListener,\n      setupHashListener\n    );\n  }\n\n  history.listen(function (route) {\n    this$1.apps.forEach(function (app) {\n      app._route = route;\n    });\n  });\n};\n\nVueRouter.prototype.beforeEach = function beforeEach (fn) {\n  return registerHook(this.beforeHooks, fn)\n};\n\nVueRouter.prototype.beforeResolve = function beforeResolve (fn) {\n  return registerHook(this.resolveHooks, fn)\n};\n\nVueRouter.prototype.afterEach = function afterEach (fn) {\n  return registerHook(this.afterHooks, fn)\n};\n\nVueRouter.prototype.onReady = function onReady (cb, errorCb) {\n  this.history.onReady(cb, errorCb);\n};\n\nVueRouter.prototype.onError = function onError (errorCb) {\n  this.history.onError(errorCb);\n};\n\nVueRouter.prototype.push = function push (location, onComplete, onAbort) {\n  this.history.push(location, onComplete, onAbort);\n};\n\nVueRouter.prototype.replace = function replace (location, onComplete, onAbort) {\n  this.history.replace(location, onComplete, onAbort);\n};\n\nVueRouter.prototype.go = function go (n) {\n  this.history.go(n);\n};\n\nVueRouter.prototype.back = function back () {\n  this.go(-1);\n};\n\nVueRouter.prototype.forward = function forward () {\n  this.go(1);\n};\n\nVueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) {\n  var route = to\n    ? to.matched\n      ? to\n      : this.resolve(to).route\n    : this.currentRoute;\n  if (!route) {\n    return []\n  }\n  return [].concat.apply([], route.matched.map(function (m) {\n    return Object.keys(m.components).map(function (key) {\n      return m.components[key]\n    })\n  }))\n};\n\nVueRouter.prototype.resolve = function resolve (\n  to,\n  current,\n  append\n) {\n  var location = normalizeLocation(\n    to,\n    current || this.history.current,\n    append,\n    this\n  );\n  var route = this.match(location, current);\n  var fullPath = route.redirectedFrom || route.fullPath;\n  var base = this.history.base;\n  var href = createHref(base, fullPath, this.mode);\n  return {\n    location: location,\n    route: route,\n    href: href,\n    // for backwards compat\n    normalizedTo: location,\n    resolved: route\n  }\n};\n\nVueRouter.prototype.addRoutes = function addRoutes (routes) {\n  this.matcher.addRoutes(routes);\n  if (this.history.current !== START) {\n    this.history.transitionTo(this.history.getCurrentLocation());\n  }\n};\n\nObject.defineProperties( VueRouter.prototype, prototypeAccessors );\n\nfunction registerHook (list, fn) {\n  list.push(fn);\n  return function () {\n    var i = list.indexOf(fn);\n    if (i > -1) { list.splice(i, 1); }\n  }\n}\n\nfunction createHref (base, fullPath, mode) {\n  var path = mode === 'hash' ? '#' + fullPath : fullPath;\n  return base ? cleanPath(base + '/' + path) : path\n}\n\nVueRouter.install = install;\nVueRouter.version = '3.0.1';\n\nif (inBrowser && window.Vue) {\n  window.Vue.use(VueRouter);\n}\n\nreturn VueRouter;\n\n})));\n"]}