{"version":3,"sources":["webpack:///./node_modules/react-router/es/Router.js","webpack:///./node_modules/react-router-dom/es/Router.js","webpack:///./node_modules/react-router-dom/es/BrowserRouter.js","webpack:///./node_modules/react-router/node_modules/resolve-pathname/index.js","webpack:///./node_modules/react-router/node_modules/value-equal/index.js","webpack:///./node_modules/react-router/node_modules/history/es/LocationUtils.js","webpack:///./node_modules/react-router/node_modules/history/es/PathUtils.js","webpack:///./node_modules/react-router/node_modules/history/es/DOMUtils.js","webpack:///./node_modules/react-router/node_modules/history/es/createBrowserHistory.js","webpack:///./node_modules/react-router/node_modules/history/es/createHashHistory.js","webpack:///./node_modules/react-router/node_modules/history/es/createMemoryHistory.js","webpack:///./node_modules/react-router/es/generatePath.js","webpack:///./node_modules/react-router/es/Redirect.js","webpack:///./node_modules/react-router-dom/es/Redirect.js","webpack:///./app/javascript/mastodon/features/ui/components/column_loading.js","webpack:///./app/javascript/mastodon/features/ui/components/bundle_column_error.js","webpack:///./app/javascript/mastodon/features/ui/util/react_router_helpers.js","webpack:///./app/javascript/mastodon/features/ui/components/upload_area.js","webpack:///./app/javascript/mastodon/features/ui/components/drawer_loading.js","webpack:///./app/javascript/mastodon/components/server_banner.js","webpack:///./app/javascript/mastodon/features/ui/components/compose_panel.js","webpack:///./app/javascript/mastodon/components/logo.js","webpack:///./app/javascript/mastodon/features/ui/components/disabled_account_banner.js","webpack:///./app/javascript/mastodon/features/ui/components/follow_requests_column_link.js","webpack:///./app/javascript/mastodon/features/ui/components/list_panel.js","webpack:///./app/javascript/mastodon/features/ui/components/notifications_counter_icon.js","webpack:///./app/javascript/mastodon/features/ui/components/sign_in_banner.js","webpack:///./app/javascript/mastodon/features/account/components/featured_tags.js","webpack:///./app/javascript/mastodon/features/account/containers/featured_tags_container.js","webpack:///./app/javascript/mastodon/features/account/navigation.js","webpack:///./app/javascript/mastodon/components/navigation_portal.js","webpack:///./app/javascript/mastodon/features/ui/components/navigation_panel.js","webpack:///./app/javascript/mastodon/features/ui/components/columns_area.js","webpack:///./app/javascript/mastodon/features/ui/containers/columns_area_container.js","webpack:///./app/javascript/mastodon/features/picture_in_picture/components/header.js","webpack:///./app/javascript/mastodon/features/picture_in_picture/index.js","webpack:///./app/javascript/mastodon/actions/onboarding.js","webpack:///./app/javascript/mastodon/features/ui/components/header.js","webpack:///./app/javascript/mastodon/features/ui/index.js","webpack:///./app/javascript/mastodon/components/error_boundary.js","webpack:///./app/javascript/mastodon/containers/mastodon.js","webpack:///./app/javascript/mastodon/main.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/util.js","webpack:///./node_modules/react-router/node_modules/history/node_modules/warning/browser.js","webpack:///./node_modules/stackframe/stackframe.js","webpack:///./node_modules/stacktrace-js/stacktrace.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/source-map-generator.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/base64-vlq.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/array-set.js","webpack:///./node_modules/error-stack-parser/error-stack-parser.js","webpack:///./node_modules/stack-generator/stack-generator.js","webpack:///./node_modules/stacktrace-gps/stacktrace-gps.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/source-map.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/base64.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/mapping-list.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/source-map-consumer.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/binary-search.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/quick-sort.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/source-node.js","webpack:///./app/javascript/mastodon/performance.js"],"names":["_extends","Object","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","_classCallCheck","instance","Constructor","TypeError","_possibleConstructorReturn","self","ReferenceError","_React$Component","Router","_temp","_this","this","_len","args","Array","_key","apply","concat","state","match","computeMatch","props","history","location","pathname","subClass","superClass","create","constructor","value","enumerable","writable","configurable","setPrototypeOf","__proto__","_inherits","getChildContext","router","context","route","path","url","params","isExact","componentWillMount","_this2","_props","children","Children","count","unlisten","listen","setState","componentWillReceiveProps","nextProps","componentWillUnmount","render","only","Component","propTypes","object","isRequired","node","contextTypes","childContextTypes","BrowserRouter","createElement","isAbsolute","charAt","spliceOne","list","index","k","n","pop","to","from","undefined","toParts","split","fromParts","isToAbs","isFromAbs","mustEndAbs","hasTrailingSlash","last","up","part","unshift","result","join","substr","_typeof","Symbol","iterator","obj","valueEqual","a","b","isArray","every","item","aType","aValue","valueOf","bValue","aKeys","keys","bKeys","currentLocation","search","hash","hashIndex","indexOf","searchIndex","parsePath","decodeURI","e","URIError","window","document","patternCache","cacheCount","pattern","cacheKey","cache","compiledGenerator","compile","generator","pretty","Redirect","isStatic","staticContext","perform","componentDidMount","componentDidUpdate","prevProps","prevTo","nextTo","computeTo","_ref","computedMatch","push","replace","bool","string","oneOfType","defaultProps","shape","func","ColumnLoading","ImmutablePureComponent","title","icon","multiColumn","focusable","placeholder","className","PropTypes","GIF","React","PureComponent","hovering","handleMouseEnter","animate","handleMouseLeave","src","staticSrc","alt","role","onMouseEnter","onMouseLeave","autoPlayGif","CopyButton","copied","handleClick","navigator","clipboard","writeText","timeout","setTimeout","clearTimeout","onClick","id","defaultMessage","BundleColumnError","injectIntl","handleRetry","onRetry","errorType","stacktrace","body","bindToDocument","Link","classNames","Helmet","name","content","WrappedSwitch","Switch","map","child","cloneElement","WrappedRoute","hasError","renderComponent","component","componentParams","fetchComponent","loading","renderLoading","error","renderError","componentDidCatch","StackTrace","fromError","then","stackframes","toString","frame","catch","err","console","rest","Route","UploadArea","handleKeyUp","keyCode","active","preventDefault","stopPropagation","onClose","addEventListener","removeEventListener","defaultStyle","backgroundOpacity","backgroundScale","style","spring","stiffness","damping","visibility","opacity","transform","DrawerLoading","messages","defineMessages","aboutActiveUsers","ServerBanner","connect","server","getIn","dispatch","fetchServer","intl","isLoading","get","values","domain","mastodon","href","blurhash","width","size","formatMessage","ComposePanel","onFocus","changeComposing","onBlur","mountCompose","unmountCompose","signedIn","identity","openInRoute","Fragment","singleColumn","Logo","viewBox","xlinkHref","logoutMessage","logoutConfirm","DisabledAccountBanner","disabledAcct","disabledAccountId","movedToAcct","movedToAccountId","onLogout","openModal","message","confirm","closeWhenConfirm","onConfirm","logOut","handleLogOutClick","disabledAccountLink","disabledAccount","movedToAccount","includes","type","text","FollowRequestsColumnLink","ImmutableList","fetchFollowRequests","transparent","getOrderedLists","createSelector","lists","toList","filter","sort","localeCompare","take","ListPanel","withRouter","fetchLists","isEmpty","strict","ImmutablePropTypes","IconWithBadge","SignInBanner","useDispatch","openClosedRegistrationsModal","useCallback","signupButton","registrationsOpen","lastStatusAt","empty","FeaturedTags","account","featuredTags","dangerouslySetInnerHTML","__html","featuredTag","uses","withGraph","description","date","formatDate","month","day","tagged","getAccount","makeGetAccount","accountId","AccountNavigation","acct","normalizeForLookup","DefaultNavigation","showTrends","NavigationPortal","exact","home","notifications","explore","local","federated","direct","favourites","bookmarks","preferences","followsAndFollowers","about","NavigationPanel","timelinePreview","componentMap","Compose","HomeTimeline","Notifications","PublicTimeline","CommunityTimeline","HashtagTimeline","DirectTimeline","FavouritedStatuses","BookmarkedStatuses","ListTimeline","Directory","ColumnsArea","mediaQuery","matchMedia","renderComposePanel","matches","handleLayoutChange","handleWheel","_interruptScrollAnimation","setRef","columnId","supportsPassiveEvents","passive","addListener","isRtlLayout","getElementsByTagName","classList","contains","componentWillUpdate","removeListener","handleLayouteChange","handleChildrenContentChange","modifier","scrollRight","scrollWidth","innerWidth","columns","isModalOpen","ref","column","toJS","other","SpecificComponent","modalType","forwardRef","close","Header","statusId","PictureInPicture","handleClose","removePictureInPicture","currentTime","player","volume","muted","autoPlay","inline","alwaysVisible","poster","backgroundColor","foregroundColor","accentColor","INTRODUCTION_VERSION","Account","me","beforeUnload","keyMap","help","new","forceNew","toggleComposeSpoilers","focusColumn","reply","favourite","boost","mention","open","openProfile","moveDown","moveUp","back","goToHome","goToNotifications","goToLocal","goToFederated","goToDirect","goToStart","goToFavourites","goToPinned","goToProfile","goToBlocked","goToMuted","goToRequests","toggleHidden","toggleSensitive","openMedia","SwitchingColumnsArea","c","mobile","toggle","redirect","singleUserMode","owner","initialState","accounts","username","GettingStarted","KeyboardShortcuts","About","PrivacyPolicy","PinnedStatuses","FollowRecommendations","Explore","AccountTimeline","withReplies","Followers","Following","AccountGallery","Status","Reblogs","Favourites","FollowRequests","Blocks","DomainBlocks","Mutes","Lists","UI","layout","isComposing","hasComposingText","trim","hasMediaAttachments","canUploadMore","some","x","dropdownMenuIsOpen","firstLaunch","draggingOver","handleBeforeUnload","synchronouslySubmitMarkers","returnValue","handleWindowFocus","focusApp","submitMarkers","immediate","handleWindowBlur","unfocusApp","handleDragEnter","dragTargets","dataTransfer","types","handleDragOver","dataTransferIsText","dropEffect","handleDrop","files","uploadCompose","handleDragLeave","el","closeUploadModal","handleServiceWorkerPostMessage","data","warn","clearHeight","trailing","handleResize","layoutFromWindow","cancel","changeLayout","handleHotkeyNew","element","querySelector","focus","handleHotkeySearch","handleHotkeyForceNew","resetCompose","handleHotkeyToggleComposeSpoilers","changeComposeSpoilerness","handleHotkeyFocusColumn","container","status","scrollTop","offsetTop","scrollIntoView","handleHotkeyBack","goBack","setHotkeysRef","hotkeys","handleHotkeyToggleHelp","handleHotkeyGoToHome","handleHotkeyGoToNotifications","handleHotkeyGoToLocal","handleHotkeyGoToFederated","handleHotkeyGoToDirect","handleHotkeyGoToStart","handleHotkeyGoToFavourites","handleHotkeyGoToPinned","handleHotkeyGoToProfile","handleHotkeyGoToBlocked","handleHotkeyGoToMuted","handleHotkeyGoToRequests","handleDragEnd","serviceWorker","changeSetting","saveSettings","fetchMarkers","expandHomeTimeline","expandNotifications","__mousetrap__","stopCallback","tagName","handlers","attach","focused","pointerEvents","ErrorBoundary","errorMessage","stackTrace","mappedStackTrace","componentStack","handleCopyStackTrace","textarea","contents","textContent","position","appendChild","select","execCommand","removeChild","info","stack","sf","likelyBrowserAddonIssue","version","source_url","rel","localeData","getLocale","addLocaleData","siteTitle","store","configureStore","hydrateAction","hydrateStore","fetchCustomEmojis","Mastodon","meta","disabled_account_id","accessToken","access_token","permissions","disconnect","connectUserStream","shouldUpdateScroll","prevRouterProps","mastodonModalKey","locale","defaultTitle","titleTemplate","perf","require","main","start","ready","async","mountNode","getElementById","JSON","parse","getAttribute","ReactDOM","setupBrowserNotifications","Workbox","wb","registration","register","registerPushNotifications","stop","exports","getArg","aArgs","aName","aDefaultValue","Error","urlRegexp","dataUrlRegexp","urlParse","aUrl","scheme","auth","host","port","urlGenerate","aParsedUrl","normalize","aPath","parts","splice","aRoot","aPathUrl","aRootUrl","joined","relative","level","lastIndexOf","slice","supportsNullProto","s","isProtoString","charCodeAt","strcmp","aStr1","aStr2","toSetString","aStr","fromSetString","compareByOriginalPositions","mappingA","mappingB","onlyCompareOriginal","cmp","originalLine","originalColumn","generatedColumn","generatedLine","compareByGeneratedPositionsDeflated","onlyCompareGenerated","compareByGeneratedPositionsInflated","module","_isNumber","isNaN","parseFloat","isFinite","_capitalize","str","toUpperCase","substring","_getter","p","booleanProps","numericProps","stringProps","arrayProps","objectProps","StackFrame","getArgs","setArgs","v","getEvalOrigin","evalOrigin","setEvalOrigin","fileName","getFileName","lineNumber","getLineNumber","columnNumber","getColumnNumber","functionName","getFunctionName","getIsEval","fromString","argsStartIndex","argsEndIndex","locationString","exec","Boolean","j","Number","String","ErrorStackParser","StackGenerator","StackTraceGPS","_options","stackframe","sourceCache","_generateError","_merge","first","second","forEach","prop","_isShapedLikeParsableError","_filtered","opts","generateArtificially","getSync","backtrace","gps","Promise","resolve","all","resolveOriginal","pinpoint","bind","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","deinstrument","report","errorMsg","requestOptions","reject","req","XMLHttpRequest","onerror","onreadystatechange","readyState","responseText","setRequestHeader","headers","header","reportPayload","send","stringify","base64VLQ","util","ArraySet","MappingList","SourceMapGenerator","_file","_sourceRoot","_skipValidation","_sources","_names","_mappings","_sourcesContents","_version","fromSourceMap","aSourceMapConsumer","sourceRoot","file","eachMapping","mapping","newMapping","generated","line","original","addMapping","sources","sourceFile","sourceContentFor","setSourceContent","_validateMapping","has","add","aSourceFile","aSourceContent","applySourceMap","aSourceMapPath","newSources","newNames","unsortedForEach","originalPositionFor","aGenerated","aOriginal","aSource","_serializeMappings","next","nameIdx","sourceIdx","previousGeneratedColumn","previousGeneratedLine","previousOriginalColumn","previousOriginalLine","previousName","previousSource","mappings","toArray","len","encode","_generateSourcesContent","aSources","aSourceRoot","toJSON","names","sourcesContent","base64","digit","encoded","vlq","toVLQSigned","VLQ_BASE","decode","aIndex","aOutParam","continuation","shifted","strLen","shift","_array","_set","fromArray","aArray","aAllowDuplicates","set","getOwnPropertyNames","sStr","isDuplicate","idx","at","aIdx","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","sanitizedLine","tokens","locationParts","functionNameRegex","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","functionCall","maxStackSize","curr","callee","test","RegExp","$1","caller","SourceMap","_xdr","_atob","b64str","atob","_parseJson","_findFunctionName","syntaxes","code","maxLines","Math","min","commentPos","m","_ensureSupportedEnvironment","defineProperty","_ensureStackFrameIsLegit","_findSourceMappingURL","lastSourceMappingUrl","matchSourceMappingUrl","sourceMappingUrlRegExp","_extractLocationInfoFromSourceMapSource","sourceMapConsumer","loc","mappedSource","sourceMapConsumerCache","ajax","_get","isDataUrl","offline","supportedEncodingRegexp","sourceMapStart","encodedSource","xhrPromise","method","_getSourceMapConsumer","sourceMappingURL","defaultSourceRoot","sourceMapConsumerPromise","sourceMapSource","SourceMapConsumer","getMappedLocation","mappedStackFrame","resolveMappedStackFrame","findFunctionName","guessedFunctionName","SourceNode","intToCharMap","number","charCode","_sorted","_last","aCallback","aThisArg","aMapping","lineA","lineB","columnA","columnB","binarySearch","quickSort","aSourceMap","sourceMap","sections","IndexedSourceMapConsumer","BasicSourceMapConsumer","Mapping","lastOffset","_sections","offset","offsetLine","offsetColumn","generatedOffset","consumer","__generatedMappings","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","aContext","aOrder","_generatedMappings","_originalMappings","allGeneratedPositionsFor","needle","_findMapping","lastColumn","smc","generatedMappings","destGeneratedMappings","destOriginalMappings","srcMapping","destMapping","segment","end","cachedSegments","temp","originalMappings","aNeedle","aMappings","aLineName","aColumnName","aComparator","aBias","computeColumnSpans","nextMapping","lastGeneratedColumn","Infinity","hasContentsOfAllSources","sc","nullOnMissing","fileUriAbsPath","generatedPositionFor","sectionIndex","section","bias","generatedPosition","sectionMappings","adjustedMapping","recursiveSearch","aLow","aHigh","aHaystack","aCompare","mid","floor","swap","ary","y","doQuickSort","comparator","r","low","high","round","random","pivot","q","REGEX_NEWLINE","isSourceNode","aLine","aColumn","aChunks","sourceContents","fromStringWithSourceMap","aGeneratedCode","aRelativePath","remainingLines","shiftNextLine","lastGeneratedLine","lastMapping","nextLine","addMappingWithCode","aChunk","chunk","prepend","walk","aFn","aSep","newChildren","replaceRight","aPattern","aReplacement","lastChild","walkSourceContents","toStringWithSourceMap","sourceMappingActive","lastOriginalSource","lastOriginalLine","lastOriginalColumn","lastOriginalName","sourceContent","process"],"mappings":"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","file":"js/156-21d62b8c854453dc8e80.chunk.js","sourcesContent":["var _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n  return target;\n};\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\nfunction _possibleConstructorReturn(self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\nimport warning from \"warning\";\nimport invariant from \"invariant\";\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\n/**\n * The public API for putting history on context.\n */\n\nvar Router = function (_React$Component) {\n  _inherits(Router, _React$Component);\n  function Router() {\n    var _temp, _this, _ret;\n    _classCallCheck(this, Router);\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = {\n      match: _this.computeMatch(_this.props.history.location.pathname)\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n  Router.prototype.getChildContext = function getChildContext() {\n    return {\n      router: _extends({}, this.context.router, {\n        history: this.props.history,\n        route: {\n          location: this.props.history.location,\n          match: this.state.match\n        }\n      })\n    };\n  };\n  Router.prototype.computeMatch = function computeMatch(pathname) {\n    return {\n      path: \"/\",\n      url: \"/\",\n      params: {},\n      isExact: pathname === \"/\"\n    };\n  };\n  Router.prototype.componentWillMount = function componentWillMount() {\n    var _this2 = this;\n    var _props = this.props,\n      children = _props.children,\n      history = _props.history;\n    invariant(children == null || React.Children.count(children) === 1, \"A <Router> may have only one child element\");\n\n    // Do this here so we can setState when a <Redirect> changes the\n    // location in componentWillMount. This happens e.g. when doing\n    // server rendering using a <StaticRouter>.\n    this.unlisten = history.listen(function () {\n      _this2.setState({\n        match: _this2.computeMatch(history.location.pathname)\n      });\n    });\n  };\n  Router.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n    warning(this.props.history === nextProps.history, \"You cannot change <Router history>\");\n  };\n  Router.prototype.componentWillUnmount = function componentWillUnmount() {\n    this.unlisten();\n  };\n  Router.prototype.render = function render() {\n    var children = this.props.children;\n    return children ? React.Children.only(children) : null;\n  };\n  return Router;\n}(React.Component);\nRouter.propTypes = {\n  history: PropTypes.object.isRequired,\n  children: PropTypes.node\n};\nRouter.contextTypes = {\n  router: PropTypes.object\n};\nRouter.childContextTypes = {\n  router: PropTypes.object.isRequired\n};\nexport default Router;","// Written in this round about way for babel-transform-imports\nimport Router from \"react-router/es/Router\";\nexport default Router;","function _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\nfunction _possibleConstructorReturn(self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\nimport warning from \"warning\";\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { createBrowserHistory as createHistory } from \"history\";\nimport Router from \"./Router\";\n\n/**\n * The public API for a <Router> that uses HTML5 history.\n */\n\nvar BrowserRouter = function (_React$Component) {\n  _inherits(BrowserRouter, _React$Component);\n  function BrowserRouter() {\n    var _temp, _this, _ret;\n    _classCallCheck(this, BrowserRouter);\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.history = createHistory(_this.props), _temp), _possibleConstructorReturn(_this, _ret);\n  }\n  BrowserRouter.prototype.componentWillMount = function componentWillMount() {\n    warning(!this.props.history, \"<BrowserRouter> ignores the history prop. To use a custom history, \" + \"use `import { Router }` instead of `import { BrowserRouter as Router }`.\");\n  };\n  BrowserRouter.prototype.render = function render() {\n    return /*#__PURE__*/React.createElement(Router, {\n      history: this.history,\n      children: this.props.children\n    });\n  };\n  return BrowserRouter;\n}(React.Component);\nexport default BrowserRouter;","function isAbsolute(pathname) {\n  return pathname.charAt(0) === '/';\n}\n\n// About 1.5x faster than the two-arg version of Array#splice()\nfunction spliceOne(list, index) {\n  for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {\n    list[i] = list[k];\n  }\n  list.pop();\n}\n\n// This implementation is based heavily on node's url.parse\nfunction resolvePathname(to) {\n  var from = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n  var toParts = to && to.split('/') || [];\n  var fromParts = from && from.split('/') || [];\n  var isToAbs = to && isAbsolute(to);\n  var isFromAbs = from && isAbsolute(from);\n  var mustEndAbs = isToAbs || isFromAbs;\n  if (to && isAbsolute(to)) {\n    // to is absolute\n    fromParts = toParts;\n  } else if (toParts.length) {\n    // to is relative, drop the filename\n    fromParts.pop();\n    fromParts = fromParts.concat(toParts);\n  }\n  if (!fromParts.length) return '/';\n  var hasTrailingSlash = void 0;\n  if (fromParts.length) {\n    var last = fromParts[fromParts.length - 1];\n    hasTrailingSlash = last === '.' || last === '..' || last === '';\n  } else {\n    hasTrailingSlash = false;\n  }\n  var up = 0;\n  for (var i = fromParts.length; i >= 0; i--) {\n    var part = fromParts[i];\n    if (part === '.') {\n      spliceOne(fromParts, i);\n    } else if (part === '..') {\n      spliceOne(fromParts, i);\n      up++;\n    } else if (up) {\n      spliceOne(fromParts, i);\n      up--;\n    }\n  }\n  if (!mustEndAbs) for (; up--; up) {\n    fromParts.unshift('..');\n  }\n  if (mustEndAbs && fromParts[0] !== '' && (!fromParts[0] || !isAbsolute(fromParts[0]))) fromParts.unshift('');\n  var result = fromParts.join('/');\n  if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';\n  return result;\n}\nexport default resolvePathname;","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n  return typeof obj;\n} : function (obj) {\n  return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\nfunction valueEqual(a, b) {\n  if (a === b) return true;\n  if (a == null || b == null) return false;\n  if (Array.isArray(a)) {\n    return Array.isArray(b) && a.length === b.length && a.every(function (item, index) {\n      return valueEqual(item, b[index]);\n    });\n  }\n  var aType = typeof a === 'undefined' ? 'undefined' : _typeof(a);\n  var bType = typeof b === 'undefined' ? 'undefined' : _typeof(b);\n  if (aType !== bType) return false;\n  if (aType === 'object') {\n    var aValue = a.valueOf();\n    var bValue = b.valueOf();\n    if (aValue !== a || bValue !== b) return valueEqual(aValue, bValue);\n    var aKeys = Object.keys(a);\n    var bKeys = Object.keys(b);\n    if (aKeys.length !== bKeys.length) return false;\n    return aKeys.every(function (key) {\n      return valueEqual(a[key], b[key]);\n    });\n  }\n  return false;\n}\nexport default valueEqual;","var _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n  return target;\n};\nimport resolvePathname from 'resolve-pathname';\nimport valueEqual from 'value-equal';\nimport { parsePath } from './PathUtils';\nexport var createLocation = function createLocation(path, state, key, currentLocation) {\n  var location = void 0;\n  if (typeof path === 'string') {\n    // Two-arg form: push(path, state)\n    location = parsePath(path);\n    location.state = state;\n  } else {\n    // One-arg form: push(location)\n    location = _extends({}, path);\n    if (location.pathname === undefined) location.pathname = '';\n    if (location.search) {\n      if (location.search.charAt(0) !== '?') location.search = '?' + location.search;\n    } else {\n      location.search = '';\n    }\n    if (location.hash) {\n      if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;\n    } else {\n      location.hash = '';\n    }\n    if (state !== undefined && location.state === undefined) location.state = state;\n  }\n  try {\n    location.pathname = decodeURI(location.pathname);\n  } catch (e) {\n    if (e instanceof URIError) {\n      throw new URIError('Pathname \"' + location.pathname + '\" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');\n    } else {\n      throw e;\n    }\n  }\n  if (key) location.key = key;\n  if (currentLocation) {\n    // Resolve incomplete/relative pathname relative to current location.\n    if (!location.pathname) {\n      location.pathname = currentLocation.pathname;\n    } else if (location.pathname.charAt(0) !== '/') {\n      location.pathname = resolvePathname(location.pathname, currentLocation.pathname);\n    }\n  } else {\n    // When there is no prior location and pathname is empty, set it to /\n    if (!location.pathname) {\n      location.pathname = '/';\n    }\n  }\n  return location;\n};\nexport var locationsAreEqual = function locationsAreEqual(a, b) {\n  return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && valueEqual(a.state, b.state);\n};","export var addLeadingSlash = function addLeadingSlash(path) {\n  return path.charAt(0) === '/' ? path : '/' + path;\n};\nexport var stripLeadingSlash = function stripLeadingSlash(path) {\n  return path.charAt(0) === '/' ? path.substr(1) : path;\n};\nexport var hasBasename = function hasBasename(path, prefix) {\n  return new RegExp('^' + prefix + '(\\\\/|\\\\?|#|$)', 'i').test(path);\n};\nexport var stripBasename = function stripBasename(path, prefix) {\n  return hasBasename(path, prefix) ? path.substr(prefix.length) : path;\n};\nexport var stripTrailingSlash = function stripTrailingSlash(path) {\n  return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;\n};\nexport var parsePath = function parsePath(path) {\n  var pathname = path || '/';\n  var search = '';\n  var hash = '';\n  var hashIndex = pathname.indexOf('#');\n  if (hashIndex !== -1) {\n    hash = pathname.substr(hashIndex);\n    pathname = pathname.substr(0, hashIndex);\n  }\n  var searchIndex = pathname.indexOf('?');\n  if (searchIndex !== -1) {\n    search = pathname.substr(searchIndex);\n    pathname = pathname.substr(0, searchIndex);\n  }\n  return {\n    pathname: pathname,\n    search: search === '?' ? '' : search,\n    hash: hash === '#' ? '' : hash\n  };\n};\nexport var createPath = function createPath(location) {\n  var pathname = location.pathname,\n    search = location.search,\n    hash = location.hash;\n  var path = pathname || '/';\n  if (search && search !== '?') path += search.charAt(0) === '?' ? search : '?' + search;\n  if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : '#' + hash;\n  return path;\n};","export var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\nexport var addEventListener = function addEventListener(node, event, listener) {\n  return node.addEventListener ? node.addEventListener(event, listener, false) : node.attachEvent('on' + event, listener);\n};\nexport var removeEventListener = function removeEventListener(node, event, listener) {\n  return node.removeEventListener ? node.removeEventListener(event, listener, false) : node.detachEvent('on' + event, listener);\n};\nexport var getConfirmation = function getConfirmation(message, callback) {\n  return callback(window.confirm(message));\n}; // eslint-disable-line no-alert\n\n/**\n * Returns true if the HTML5 history API is supported. Taken from Modernizr.\n *\n * https://github.com/Modernizr/Modernizr/blob/master/LICENSE\n * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js\n * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586\n */\nexport var supportsHistory = function supportsHistory() {\n  var ua = window.navigator.userAgent;\n  if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;\n  return window.history && 'pushState' in window.history;\n};\n\n/**\n * Returns true if browser fires popstate on hash change.\n * IE10 and IE11 do not.\n */\nexport var supportsPopStateOnHashChange = function supportsPopStateOnHashChange() {\n  return window.navigator.userAgent.indexOf('Trident') === -1;\n};\n\n/**\n * Returns false if using go(n) with hash history causes a full page reload.\n */\nexport var supportsGoWithoutReloadUsingHash = function supportsGoWithoutReloadUsingHash() {\n  return window.navigator.userAgent.indexOf('Firefox') === -1;\n};\n\n/**\n * Returns true if a given popstate event is an extraneous WebKit event.\n * Accounts for the fact that Chrome on iOS fires real popstate events\n * containing undefined state when pressing the back button.\n */\nexport var isExtraneousPopstateEvent = function isExtraneousPopstateEvent(event) {\n  return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;\n};","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n  return typeof obj;\n} : function (obj) {\n  return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n  return target;\n};\nimport warning from 'warning';\nimport invariant from 'invariant';\nimport { createLocation } from './LocationUtils';\nimport { addLeadingSlash, stripTrailingSlash, hasBasename, stripBasename, createPath } from './PathUtils';\nimport createTransitionManager from './createTransitionManager';\nimport { canUseDOM, addEventListener, removeEventListener, getConfirmation, supportsHistory, supportsPopStateOnHashChange, isExtraneousPopstateEvent } from './DOMUtils';\nvar PopStateEvent = 'popstate';\nvar HashChangeEvent = 'hashchange';\nvar getHistoryState = function getHistoryState() {\n  try {\n    return window.history.state || {};\n  } catch (e) {\n    // IE 11 sometimes throws when accessing window.history.state\n    // See https://github.com/ReactTraining/history/pull/289\n    return {};\n  }\n};\n\n/**\n * Creates a history object that uses the HTML5 history API including\n * pushState, replaceState, and the popstate event.\n */\nvar createBrowserHistory = function createBrowserHistory() {\n  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  invariant(canUseDOM, 'Browser history needs a DOM');\n  var globalHistory = window.history;\n  var canUseHistory = supportsHistory();\n  var needsHashChangeListener = !supportsPopStateOnHashChange();\n  var _props$forceRefresh = props.forceRefresh,\n    forceRefresh = _props$forceRefresh === undefined ? false : _props$forceRefresh,\n    _props$getUserConfirm = props.getUserConfirmation,\n    getUserConfirmation = _props$getUserConfirm === undefined ? getConfirmation : _props$getUserConfirm,\n    _props$keyLength = props.keyLength,\n    keyLength = _props$keyLength === undefined ? 6 : _props$keyLength;\n  var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n  var getDOMLocation = function getDOMLocation(historyState) {\n    var _ref = historyState || {},\n      key = _ref.key,\n      state = _ref.state;\n    var _window$location = window.location,\n      pathname = _window$location.pathname,\n      search = _window$location.search,\n      hash = _window$location.hash;\n    var path = pathname + search + hash;\n    warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".');\n    if (basename) path = stripBasename(path, basename);\n    return createLocation(path, state, key);\n  };\n  var createKey = function createKey() {\n    return Math.random().toString(36).substr(2, keyLength);\n  };\n  var transitionManager = createTransitionManager();\n  var setState = function setState(nextState) {\n    _extends(history, nextState);\n    history.length = globalHistory.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  };\n  var handlePopState = function handlePopState(event) {\n    // Ignore extraneous popstate events in WebKit.\n    if (isExtraneousPopstateEvent(event)) return;\n    handlePop(getDOMLocation(event.state));\n  };\n  var handleHashChange = function handleHashChange() {\n    handlePop(getDOMLocation(getHistoryState()));\n  };\n  var forceNextPop = false;\n  var handlePop = function handlePop(location) {\n    if (forceNextPop) {\n      forceNextPop = false;\n      setState();\n    } else {\n      var action = 'POP';\n      transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n        if (ok) {\n          setState({\n            action: action,\n            location: location\n          });\n        } else {\n          revertPop(location);\n        }\n      });\n    }\n  };\n  var revertPop = function revertPop(fromLocation) {\n    var toLocation = history.location;\n\n    // TODO: We could probably make this more reliable by\n    // keeping a list of keys we've seen in sessionStorage.\n    // Instead, we just default to 0 for keys we don't know.\n\n    var toIndex = allKeys.indexOf(toLocation.key);\n    if (toIndex === -1) toIndex = 0;\n    var fromIndex = allKeys.indexOf(fromLocation.key);\n    if (fromIndex === -1) fromIndex = 0;\n    var delta = toIndex - fromIndex;\n    if (delta) {\n      forceNextPop = true;\n      go(delta);\n    }\n  };\n  var initialLocation = getDOMLocation(getHistoryState());\n  var allKeys = [initialLocation.key];\n\n  // Public interface\n\n  var createHref = function createHref(location) {\n    return basename + createPath(location);\n  };\n  var push = function push(path, state) {\n    warning(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n    var action = 'PUSH';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var href = createHref(location);\n      var key = location.key,\n        state = location.state;\n      if (canUseHistory) {\n        globalHistory.pushState({\n          key: key,\n          state: state\n        }, null, href);\n        if (forceRefresh) {\n          window.location.href = href;\n        } else {\n          var prevIndex = allKeys.indexOf(history.location.key);\n          var nextKeys = allKeys.slice(0, prevIndex === -1 ? 0 : prevIndex + 1);\n          nextKeys.push(location.key);\n          allKeys = nextKeys;\n          setState({\n            action: action,\n            location: location\n          });\n        }\n      } else {\n        warning(state === undefined, 'Browser history cannot push state in browsers that do not support HTML5 history');\n        window.location.href = href;\n      }\n    });\n  };\n  var replace = function replace(path, state) {\n    warning(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n    var action = 'REPLACE';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var href = createHref(location);\n      var key = location.key,\n        state = location.state;\n      if (canUseHistory) {\n        globalHistory.replaceState({\n          key: key,\n          state: state\n        }, null, href);\n        if (forceRefresh) {\n          window.location.replace(href);\n        } else {\n          var prevIndex = allKeys.indexOf(history.location.key);\n          if (prevIndex !== -1) allKeys[prevIndex] = location.key;\n          setState({\n            action: action,\n            location: location\n          });\n        }\n      } else {\n        warning(state === undefined, 'Browser history cannot replace state in browsers that do not support HTML5 history');\n        window.location.replace(href);\n      }\n    });\n  };\n  var go = function go(n) {\n    globalHistory.go(n);\n  };\n  var goBack = function goBack() {\n    return go(-1);\n  };\n  var goForward = function goForward() {\n    return go(1);\n  };\n  var listenerCount = 0;\n  var checkDOMListeners = function checkDOMListeners(delta) {\n    listenerCount += delta;\n    if (listenerCount === 1) {\n      addEventListener(window, PopStateEvent, handlePopState);\n      if (needsHashChangeListener) addEventListener(window, HashChangeEvent, handleHashChange);\n    } else if (listenerCount === 0) {\n      removeEventListener(window, PopStateEvent, handlePopState);\n      if (needsHashChangeListener) removeEventListener(window, HashChangeEvent, handleHashChange);\n    }\n  };\n  var isBlocked = false;\n  var block = function block() {\n    var prompt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    var unblock = transitionManager.setPrompt(prompt);\n    if (!isBlocked) {\n      checkDOMListeners(1);\n      isBlocked = true;\n    }\n    return function () {\n      if (isBlocked) {\n        isBlocked = false;\n        checkDOMListeners(-1);\n      }\n      return unblock();\n    };\n  };\n  var listen = function listen(listener) {\n    var unlisten = transitionManager.appendListener(listener);\n    checkDOMListeners(1);\n    return function () {\n      checkDOMListeners(-1);\n      unlisten();\n    };\n  };\n  var history = {\n    length: globalHistory.length,\n    action: 'POP',\n    location: initialLocation,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    block: block,\n    listen: listen\n  };\n  return history;\n};\nexport default createBrowserHistory;","var _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n  return target;\n};\nimport warning from 'warning';\nimport invariant from 'invariant';\nimport { createLocation, locationsAreEqual } from './LocationUtils';\nimport { addLeadingSlash, stripLeadingSlash, stripTrailingSlash, hasBasename, stripBasename, createPath } from './PathUtils';\nimport createTransitionManager from './createTransitionManager';\nimport { canUseDOM, addEventListener, removeEventListener, getConfirmation, supportsGoWithoutReloadUsingHash } from './DOMUtils';\nvar HashChangeEvent = 'hashchange';\nvar HashPathCoders = {\n  hashbang: {\n    encodePath: function encodePath(path) {\n      return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);\n    },\n    decodePath: function decodePath(path) {\n      return path.charAt(0) === '!' ? path.substr(1) : path;\n    }\n  },\n  noslash: {\n    encodePath: stripLeadingSlash,\n    decodePath: addLeadingSlash\n  },\n  slash: {\n    encodePath: addLeadingSlash,\n    decodePath: addLeadingSlash\n  }\n};\nvar getHashPath = function getHashPath() {\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 hashIndex = href.indexOf('#');\n  return hashIndex === -1 ? '' : href.substring(hashIndex + 1);\n};\nvar pushHashPath = function pushHashPath(path) {\n  return window.location.hash = path;\n};\nvar replaceHashPath = function replaceHashPath(path) {\n  var hashIndex = window.location.href.indexOf('#');\n  window.location.replace(window.location.href.slice(0, hashIndex >= 0 ? hashIndex : 0) + '#' + path);\n};\nvar createHashHistory = function createHashHistory() {\n  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  invariant(canUseDOM, 'Hash history needs a DOM');\n  var globalHistory = window.history;\n  var canGoWithoutReload = supportsGoWithoutReloadUsingHash();\n  var _props$getUserConfirm = props.getUserConfirmation,\n    getUserConfirmation = _props$getUserConfirm === undefined ? getConfirmation : _props$getUserConfirm,\n    _props$hashType = props.hashType,\n    hashType = _props$hashType === undefined ? 'slash' : _props$hashType;\n  var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';\n  var _HashPathCoders$hashT = HashPathCoders[hashType],\n    encodePath = _HashPathCoders$hashT.encodePath,\n    decodePath = _HashPathCoders$hashT.decodePath;\n  var getDOMLocation = function getDOMLocation() {\n    var path = decodePath(getHashPath());\n    warning(!basename || hasBasename(path, basename), 'You are attempting to use a basename on a page whose URL path does not begin ' + 'with the basename. Expected path \"' + path + '\" to begin with \"' + basename + '\".');\n    if (basename) path = stripBasename(path, basename);\n    return createLocation(path);\n  };\n  var transitionManager = createTransitionManager();\n  var setState = function setState(nextState) {\n    _extends(history, nextState);\n    history.length = globalHistory.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  };\n  var forceNextPop = false;\n  var ignorePath = null;\n  var handleHashChange = function handleHashChange() {\n    var path = getHashPath();\n    var encodedPath = encodePath(path);\n    if (path !== encodedPath) {\n      // Ensure we always have a properly-encoded hash.\n      replaceHashPath(encodedPath);\n    } else {\n      var location = getDOMLocation();\n      var prevLocation = history.location;\n      if (!forceNextPop && locationsAreEqual(prevLocation, location)) return; // A hashchange doesn't always == location change.\n\n      if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.\n\n      ignorePath = null;\n      handlePop(location);\n    }\n  };\n  var handlePop = function handlePop(location) {\n    if (forceNextPop) {\n      forceNextPop = false;\n      setState();\n    } else {\n      var action = 'POP';\n      transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n        if (ok) {\n          setState({\n            action: action,\n            location: location\n          });\n        } else {\n          revertPop(location);\n        }\n      });\n    }\n  };\n  var revertPop = function revertPop(fromLocation) {\n    var toLocation = history.location;\n\n    // TODO: We could probably make this more reliable by\n    // keeping a list of paths we've seen in sessionStorage.\n    // Instead, we just default to 0 for paths we don't know.\n\n    var toIndex = allPaths.lastIndexOf(createPath(toLocation));\n    if (toIndex === -1) toIndex = 0;\n    var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));\n    if (fromIndex === -1) fromIndex = 0;\n    var delta = toIndex - fromIndex;\n    if (delta) {\n      forceNextPop = true;\n      go(delta);\n    }\n  };\n\n  // Ensure the hash is encoded properly before doing anything else.\n  var path = getHashPath();\n  var encodedPath = encodePath(path);\n  if (path !== encodedPath) replaceHashPath(encodedPath);\n  var initialLocation = getDOMLocation();\n  var allPaths = [createPath(initialLocation)];\n\n  // Public interface\n\n  var createHref = function createHref(location) {\n    return '#' + encodePath(basename + createPath(location));\n  };\n  var push = function push(path, state) {\n    warning(state === undefined, 'Hash history cannot push state; it is ignored');\n    var action = 'PUSH';\n    var location = createLocation(path, undefined, undefined, history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var path = createPath(location);\n      var encodedPath = encodePath(basename + path);\n      var hashChanged = getHashPath() !== encodedPath;\n      if (hashChanged) {\n        // We cannot tell if a hashchange was caused by a PUSH, so we'd\n        // rather setState here and ignore the hashchange. The caveat here\n        // is that other hash histories in the page will consider it a POP.\n        ignorePath = path;\n        pushHashPath(encodedPath);\n        var prevIndex = allPaths.lastIndexOf(createPath(history.location));\n        var nextPaths = allPaths.slice(0, prevIndex === -1 ? 0 : prevIndex + 1);\n        nextPaths.push(path);\n        allPaths = nextPaths;\n        setState({\n          action: action,\n          location: location\n        });\n      } else {\n        warning(false, 'Hash history cannot PUSH the same path; a new entry will not be added to the history stack');\n        setState();\n      }\n    });\n  };\n  var replace = function replace(path, state) {\n    warning(state === undefined, 'Hash history cannot replace state; it is ignored');\n    var action = 'REPLACE';\n    var location = createLocation(path, undefined, undefined, history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var path = createPath(location);\n      var encodedPath = encodePath(basename + path);\n      var hashChanged = getHashPath() !== encodedPath;\n      if (hashChanged) {\n        // We cannot tell if a hashchange was caused by a REPLACE, so we'd\n        // rather setState here and ignore the hashchange. The caveat here\n        // is that other hash histories in the page will consider it a POP.\n        ignorePath = path;\n        replaceHashPath(encodedPath);\n      }\n      var prevIndex = allPaths.indexOf(createPath(history.location));\n      if (prevIndex !== -1) allPaths[prevIndex] = path;\n      setState({\n        action: action,\n        location: location\n      });\n    });\n  };\n  var go = function go(n) {\n    warning(canGoWithoutReload, 'Hash history go(n) causes a full page reload in this browser');\n    globalHistory.go(n);\n  };\n  var goBack = function goBack() {\n    return go(-1);\n  };\n  var goForward = function goForward() {\n    return go(1);\n  };\n  var listenerCount = 0;\n  var checkDOMListeners = function checkDOMListeners(delta) {\n    listenerCount += delta;\n    if (listenerCount === 1) {\n      addEventListener(window, HashChangeEvent, handleHashChange);\n    } else if (listenerCount === 0) {\n      removeEventListener(window, HashChangeEvent, handleHashChange);\n    }\n  };\n  var isBlocked = false;\n  var block = function block() {\n    var prompt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    var unblock = transitionManager.setPrompt(prompt);\n    if (!isBlocked) {\n      checkDOMListeners(1);\n      isBlocked = true;\n    }\n    return function () {\n      if (isBlocked) {\n        isBlocked = false;\n        checkDOMListeners(-1);\n      }\n      return unblock();\n    };\n  };\n  var listen = function listen(listener) {\n    var unlisten = transitionManager.appendListener(listener);\n    checkDOMListeners(1);\n    return function () {\n      checkDOMListeners(-1);\n      unlisten();\n    };\n  };\n  var history = {\n    length: globalHistory.length,\n    action: 'POP',\n    location: initialLocation,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    block: block,\n    listen: listen\n  };\n  return history;\n};\nexport default createHashHistory;","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n  return typeof obj;\n} : function (obj) {\n  return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n  return target;\n};\nimport warning from 'warning';\nimport { createPath } from './PathUtils';\nimport { createLocation } from './LocationUtils';\nimport createTransitionManager from './createTransitionManager';\nvar clamp = function clamp(n, lowerBound, upperBound) {\n  return Math.min(Math.max(n, lowerBound), upperBound);\n};\n\n/**\n * Creates a history object that stores locations in memory.\n */\nvar createMemoryHistory = function createMemoryHistory() {\n  var props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  var getUserConfirmation = props.getUserConfirmation,\n    _props$initialEntries = props.initialEntries,\n    initialEntries = _props$initialEntries === undefined ? ['/'] : _props$initialEntries,\n    _props$initialIndex = props.initialIndex,\n    initialIndex = _props$initialIndex === undefined ? 0 : _props$initialIndex,\n    _props$keyLength = props.keyLength,\n    keyLength = _props$keyLength === undefined ? 6 : _props$keyLength;\n  var transitionManager = createTransitionManager();\n  var setState = function setState(nextState) {\n    _extends(history, nextState);\n    history.length = history.entries.length;\n    transitionManager.notifyListeners(history.location, history.action);\n  };\n  var createKey = function createKey() {\n    return Math.random().toString(36).substr(2, keyLength);\n  };\n  var index = clamp(initialIndex, 0, initialEntries.length - 1);\n  var entries = initialEntries.map(function (entry) {\n    return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());\n  });\n\n  // Public interface\n\n  var createHref = createPath;\n  var push = function push(path, state) {\n    warning(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to push when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n    var action = 'PUSH';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      var prevIndex = history.index;\n      var nextIndex = prevIndex + 1;\n      var nextEntries = history.entries.slice(0);\n      if (nextEntries.length > nextIndex) {\n        nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);\n      } else {\n        nextEntries.push(location);\n      }\n      setState({\n        action: action,\n        location: location,\n        index: nextIndex,\n        entries: nextEntries\n      });\n    });\n  };\n  var replace = function replace(path, state) {\n    warning(!((typeof path === 'undefined' ? 'undefined' : _typeof(path)) === 'object' && path.state !== undefined && state !== undefined), 'You should avoid providing a 2nd state argument to replace when the 1st ' + 'argument is a location-like object that already has state; it is ignored');\n    var action = 'REPLACE';\n    var location = createLocation(path, state, createKey(), history.location);\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (!ok) return;\n      history.entries[history.index] = location;\n      setState({\n        action: action,\n        location: location\n      });\n    });\n  };\n  var go = function go(n) {\n    var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);\n    var action = 'POP';\n    var location = history.entries[nextIndex];\n    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {\n      if (ok) {\n        setState({\n          action: action,\n          location: location,\n          index: nextIndex\n        });\n      } else {\n        // Mimic the behavior of DOM histories by\n        // causing a render after a cancelled POP.\n        setState();\n      }\n    });\n  };\n  var goBack = function goBack() {\n    return go(-1);\n  };\n  var goForward = function goForward() {\n    return go(1);\n  };\n  var canGo = function canGo(n) {\n    var nextIndex = history.index + n;\n    return nextIndex >= 0 && nextIndex < history.entries.length;\n  };\n  var block = function block() {\n    var prompt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    return transitionManager.setPrompt(prompt);\n  };\n  var listen = function listen(listener) {\n    return transitionManager.appendListener(listener);\n  };\n  var history = {\n    length: entries.length,\n    action: 'POP',\n    location: entries[index],\n    index: index,\n    entries: entries,\n    createHref: createHref,\n    push: push,\n    replace: replace,\n    go: go,\n    goBack: goBack,\n    goForward: goForward,\n    canGo: canGo,\n    block: block,\n    listen: listen\n  };\n  return history;\n};\nexport default createMemoryHistory;","import pathToRegexp from \"path-to-regexp\";\nvar patternCache = {};\nvar cacheLimit = 10000;\nvar cacheCount = 0;\nvar compileGenerator = function compileGenerator(pattern) {\n  var cacheKey = pattern;\n  var cache = patternCache[cacheKey] || (patternCache[cacheKey] = {});\n  if (cache[pattern]) return cache[pattern];\n  var compiledGenerator = pathToRegexp.compile(pattern);\n  if (cacheCount < cacheLimit) {\n    cache[pattern] = compiledGenerator;\n    cacheCount++;\n  }\n  return compiledGenerator;\n};\n\n/**\n * Public API for generating a URL pathname from a pattern and parameters.\n */\nvar generatePath = function generatePath() {\n  var pattern = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"/\";\n  var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  if (pattern === \"/\") {\n    return pattern;\n  }\n  var generator = compileGenerator(pattern);\n  return generator(params, {\n    pretty: true\n  });\n};\nexport default generatePath;","var _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n  return target;\n};\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\nfunction _possibleConstructorReturn(self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport warning from \"warning\";\nimport invariant from \"invariant\";\nimport { createLocation, locationsAreEqual } from \"history\";\nimport generatePath from \"./generatePath\";\n\n/**\n * The public API for updating the location programmatically\n * with a component.\n */\n\nvar Redirect = function (_React$Component) {\n  _inherits(Redirect, _React$Component);\n  function Redirect() {\n    _classCallCheck(this, Redirect);\n    return _possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n  }\n  Redirect.prototype.isStatic = function isStatic() {\n    return this.context.router && this.context.router.staticContext;\n  };\n  Redirect.prototype.componentWillMount = function componentWillMount() {\n    invariant(this.context.router, \"You should not use <Redirect> outside a <Router>\");\n    if (this.isStatic()) this.perform();\n  };\n  Redirect.prototype.componentDidMount = function componentDidMount() {\n    if (!this.isStatic()) this.perform();\n  };\n  Redirect.prototype.componentDidUpdate = function componentDidUpdate(prevProps) {\n    var prevTo = createLocation(prevProps.to);\n    var nextTo = createLocation(this.props.to);\n    if (locationsAreEqual(prevTo, nextTo)) {\n      warning(false, \"You tried to redirect to the same route you're currently on: \" + (\"\\\"\" + nextTo.pathname + nextTo.search + \"\\\"\"));\n      return;\n    }\n    this.perform();\n  };\n  Redirect.prototype.computeTo = function computeTo(_ref) {\n    var computedMatch = _ref.computedMatch,\n      to = _ref.to;\n    if (computedMatch) {\n      if (typeof to === \"string\") {\n        return generatePath(to, computedMatch.params);\n      } else {\n        return _extends({}, to, {\n          pathname: generatePath(to.pathname, computedMatch.params)\n        });\n      }\n    }\n    return to;\n  };\n  Redirect.prototype.perform = function perform() {\n    var history = this.context.router.history;\n    var push = this.props.push;\n    var to = this.computeTo(this.props);\n    if (push) {\n      history.push(to);\n    } else {\n      history.replace(to);\n    }\n  };\n  Redirect.prototype.render = function render() {\n    return null;\n  };\n  return Redirect;\n}(React.Component);\nRedirect.propTypes = {\n  computedMatch: PropTypes.object,\n  // private, from <Switch>\n  push: PropTypes.bool,\n  from: PropTypes.string,\n  to: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired\n};\nRedirect.defaultProps = {\n  push: false\n};\nRedirect.contextTypes = {\n  router: PropTypes.shape({\n    history: PropTypes.shape({\n      push: PropTypes.func.isRequired,\n      replace: PropTypes.func.isRequired\n    }).isRequired,\n    staticContext: PropTypes.object\n  }).isRequired\n};\nexport default Redirect;","// Written in this round about way for babel-transform-imports\nimport Redirect from \"react-router/es/Redirect\";\nexport default Redirect;","import React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Column from '../../../components/column';\nimport ColumnHeader from '../../../components/column_header';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nexport default class ColumnLoading extends ImmutablePureComponent {\n\n  static propTypes = {\n    title: PropTypes.oneOfType([PropTypes.node, PropTypes.string]),\n    icon: PropTypes.string,\n    multiColumn: PropTypes.bool,\n  };\n\n  static defaultProps = {\n    title: '',\n    icon: '',\n  };\n\n  render() {\n    let { title, icon, multiColumn } = this.props;\n\n    return (\n      <Column>\n        <ColumnHeader icon={icon} title={title} multiColumn={multiColumn} focusable={false} placeholder />\n        <div className='scrollable' />\n      </Column>\n    );\n  }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { injectIntl, FormattedMessage } from 'react-intl';\nimport Column from 'mastodon/components/column';\nimport Button from 'mastodon/components/button';\nimport { Helmet } from 'react-helmet';\nimport { Link } from 'react-router-dom';\nimport classNames from 'classnames';\nimport { autoPlayGif } from 'mastodon/initial_state';\n\nclass GIF extends React.PureComponent {\n\n  static propTypes = {\n    src: PropTypes.string.isRequired,\n    staticSrc: PropTypes.string.isRequired,\n    className: PropTypes.string,\n    animate: PropTypes.bool,\n  };\n\n  static defaultProps = {\n    animate: autoPlayGif,\n  };\n\n  state = {\n    hovering: false,\n  };\n\n  handleMouseEnter = () => {\n    const { animate } = this.props;\n\n    if (!animate) {\n      this.setState({ hovering: true });\n    }\n  }\n\n  handleMouseLeave = () => {\n    const { animate } = this.props;\n\n    if (!animate) {\n      this.setState({ hovering: false });\n    }\n  }\n\n  render () {\n    const { src, staticSrc, className, animate } = this.props;\n    const { hovering } = this.state;\n\n    return (\n      <img\n        className={className}\n        src={(hovering || animate) ? src : staticSrc}\n        alt=''\n        role='presentation'\n        onMouseEnter={this.handleMouseEnter}\n        onMouseLeave={this.handleMouseLeave}\n      />\n    );\n  }\n\n}\n\nclass CopyButton extends React.PureComponent {\n\n  static propTypes = {\n    children: PropTypes.node.isRequired,\n    value: PropTypes.string.isRequired,\n  };\n\n  state = {\n    copied: false,\n  };\n\n  handleClick = () => {\n    const { value } = this.props;\n    navigator.clipboard.writeText(value);\n    this.setState({ copied: true });\n    this.timeout = setTimeout(() => this.setState({ copied: false }), 700);\n  }\n\n  componentWillUnmount () {\n    if (this.timeout) clearTimeout(this.timeout);\n  }\n\n  render () {\n    const { children } = this.props;\n    const { copied } = this.state;\n\n    return (\n      <Button onClick={this.handleClick} className={copied ? 'copied' : 'copyable'}>{copied ? <FormattedMessage id='copypaste.copied' defaultMessage='Copied' /> : children}</Button>\n    );\n  }\n\n}\n\nexport default @injectIntl\nclass BundleColumnError extends React.PureComponent {\n\n  static propTypes = {\n    errorType: PropTypes.oneOf(['routing', 'network', 'error']),\n    onRetry: PropTypes.func,\n    intl: PropTypes.object.isRequired,\n    multiColumn: PropTypes.bool,\n    stacktrace: PropTypes.string,\n  };\n\n  static defaultProps = {\n    errorType: 'routing',\n  };\n\n  handleRetry = () => {\n    const { onRetry } = this.props;\n\n    if (onRetry) {\n      onRetry();\n    }\n  }\n\n  render () {\n    const { errorType, multiColumn, stacktrace } = this.props;\n\n    let title, body;\n\n    switch(errorType) {\n    case 'routing':\n      title = <FormattedMessage id='bundle_column_error.routing.title' defaultMessage='404' />;\n      body = <FormattedMessage id='bundle_column_error.routing.body' defaultMessage='The requested page could not be found. Are you sure the URL in the address bar is correct?' />;\n      break;\n    case 'network':\n      title = <FormattedMessage id='bundle_column_error.network.title' defaultMessage='Network error' />;\n      body = <FormattedMessage id='bundle_column_error.network.body' defaultMessage='There was an error when trying to load this page. This could be due to a temporary problem with your internet connection or this server.' />;\n      break;\n    case 'error':\n      title = <FormattedMessage id='bundle_column_error.error.title' defaultMessage='Oh, no!' />;\n      body = <FormattedMessage id='bundle_column_error.error.body' defaultMessage='The requested page could not be rendered. It could be due to a bug in our code, or a browser compatibility issue.' />;\n      break;\n    }\n\n    return (\n      <Column bindToDocument={!multiColumn}>\n        <div className='error-column'>\n          <GIF src='/oops.gif' staticSrc='/oops.png' className='error-column__image' />\n\n          <div className='error-column__message'>\n            <h1>{title}</h1>\n            <p>{body}</p>\n\n            <div className='error-column__message__actions'>\n              {errorType === 'network' && <Button onClick={this.handleRetry}><FormattedMessage id='bundle_column_error.retry' defaultMessage='Try again' /></Button>}\n              {errorType === 'error' && <CopyButton value={stacktrace}><FormattedMessage id='bundle_column_error.copy_stacktrace' defaultMessage='Copy error report' /></CopyButton>}\n              <Link to='/' className={classNames('button', { 'button-tertiary': errorType !== 'routing' })}><FormattedMessage id='bundle_column_error.return' defaultMessage='Go back home' /></Link>\n            </div>\n          </div>\n        </div>\n\n        <Helmet>\n          <meta name='robots' content='noindex' />\n        </Helmet>\n      </Column>\n    );\n  }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Switch, Route } from 'react-router-dom';\nimport StackTrace from 'stacktrace-js';\nimport ColumnLoading from '../components/column_loading';\nimport BundleColumnError from '../components/bundle_column_error';\nimport BundleContainer from '../containers/bundle_container';\n\n// Small wrapper to pass multiColumn to the route components\nexport class WrappedSwitch extends React.PureComponent {\n\n  render () {\n    const { multiColumn, children } = this.props;\n\n    return (\n      <Switch>\n        {React.Children.map(children, child => React.cloneElement(child, { multiColumn }))}\n      </Switch>\n    );\n  }\n\n}\n\nWrappedSwitch.propTypes = {\n  multiColumn: PropTypes.bool,\n  children: PropTypes.node,\n};\n\n// Small Wrapper to extract the params from the route and pass\n// them to the rendered component, together with the content to\n// be rendered inside (the children)\nexport class WrappedRoute extends React.Component {\n\n  static propTypes = {\n    component: PropTypes.func.isRequired,\n    content: PropTypes.node,\n    multiColumn: PropTypes.bool,\n    componentParams: PropTypes.object,\n  };\n\n  static defaultProps = {\n    componentParams: {},\n  };\n\n  static getDerivedStateFromError () {\n    return {\n      hasError: true,\n    };\n  };\n\n  state = {\n    hasError: false,\n    stacktrace: '',\n  };\n\n  componentDidCatch (error) {\n    StackTrace.fromError(error).then(stackframes => {\n      this.setState({ stacktrace: error.toString() + '\\n' + stackframes.map(frame => frame.toString()).join('\\n') });\n    }).catch(err => {\n      console.error(err);\n    });\n  }\n\n  renderComponent = ({ match }) => {\n    const { component, content, multiColumn, componentParams } = this.props;\n    const { hasError, stacktrace } = this.state;\n\n    if (hasError) {\n      return (\n        <BundleColumnError\n          stacktrace={stacktrace}\n          multiColumn={multiColumn}\n          errorType='error'\n        />\n      );\n    }\n\n    return (\n      <BundleContainer fetchComponent={component} loading={this.renderLoading} error={this.renderError}>\n        {Component => <Component params={match.params} multiColumn={multiColumn} {...componentParams}>{content}</Component>}\n      </BundleContainer>\n    );\n  }\n\n  renderLoading = () => {\n    const { multiColumn } = this.props;\n\n    return <ColumnLoading multiColumn={multiColumn} />;\n  }\n\n  renderError = (props) => {\n    return <BundleColumnError {...props} errorType='network' />;\n  }\n\n  render () {\n    const { component: Component, content, ...rest } = this.props;\n\n    return <Route {...rest} render={this.renderComponent} />;\n  }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Motion from '../../ui/util/optional_motion';\nimport spring from 'react-motion/lib/spring';\nimport { FormattedMessage } from 'react-intl';\n\nexport default class UploadArea extends React.PureComponent {\n\n  static propTypes = {\n    active: PropTypes.bool,\n    onClose: PropTypes.func,\n  };\n\n  handleKeyUp = (e) => {\n    const keyCode = e.keyCode;\n    if (this.props.active) {\n      switch(keyCode) {\n      case 27:\n        e.preventDefault();\n        e.stopPropagation();\n        this.props.onClose();\n        break;\n      }\n    }\n  }\n\n  componentDidMount () {\n    window.addEventListener('keyup', this.handleKeyUp, false);\n  }\n\n  componentWillUnmount () {\n    window.removeEventListener('keyup', this.handleKeyUp);\n  }\n\n  render () {\n    const { active } = this.props;\n\n    return (\n      <Motion defaultStyle={{ backgroundOpacity: 0, backgroundScale: 0.95 }} style={{ backgroundOpacity: spring(active ? 1 : 0, { stiffness: 150, damping: 15 }), backgroundScale: spring(active ? 1 : 0.95, { stiffness: 200, damping: 3 }) }}>\n        {({ backgroundOpacity, backgroundScale }) => (\n          <div className='upload-area' style={{ visibility: active ? 'visible' : 'hidden', opacity: backgroundOpacity }}>\n            <div className='upload-area__drop'>\n              <div className='upload-area__background' style={{ transform: `scale(${backgroundScale})` }} />\n              <div className='upload-area__content'><FormattedMessage id='upload_area.title' defaultMessage='Drag & drop to upload' /></div>\n            </div>\n          </div>\n        )}\n      </Motion>\n    );\n  }\n\n}\n","import React from 'react';\n\nconst DrawerLoading = () => (\n  <div className='drawer'>\n    <div className='drawer__pager'>\n      <div className='drawer__inner' />\n    </div>\n  </div>\n);\n\nexport default DrawerLoading;\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\nimport { connect } from 'react-redux';\nimport { fetchServer } from 'mastodon/actions/server';\nimport ShortNumber from 'mastodon/components/short_number';\nimport Skeleton from 'mastodon/components/skeleton';\nimport Account from 'mastodon/containers/account_container';\nimport { domain } from 'mastodon/initial_state';\nimport Image from 'mastodon/components/image';\nimport { Link } from 'react-router-dom';\n\nconst messages = defineMessages({\n  aboutActiveUsers: { id: 'server_banner.about_active_users', defaultMessage: 'People using this server during the last 30 days (Monthly Active Users)' },\n});\n\nconst mapStateToProps = state => ({\n  server: state.getIn(['server', 'server']),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass ServerBanner extends React.PureComponent {\n\n  static propTypes = {\n    server: PropTypes.object,\n    dispatch: PropTypes.func,\n    intl: PropTypes.object,\n  };\n\n  componentDidMount () {\n    const { dispatch } = this.props;\n    dispatch(fetchServer());\n  }\n\n  render () {\n    const { server, intl } = this.props;\n    const isLoading = server.get('isLoading');\n\n    return (\n      <div className='server-banner'>\n        <div className='server-banner__introduction'>\n          <FormattedMessage id='server_banner.introduction' defaultMessage='{domain} is part of the decentralized social network powered by {mastodon}.' values={{ domain: <strong>{domain}</strong>, mastodon: <a href='https://joinmastodon.org' target='_blank'>Mastodon</a> }} />\n        </div>\n\n        <Image blurhash={server.getIn(['thumbnail', 'blurhash'])} src={server.getIn(['thumbnail', 'url'])} className='server-banner__hero' />\n\n        <div className='server-banner__description'>\n          {isLoading ? (\n            <>\n              <Skeleton width='100%' />\n              <br />\n              <Skeleton width='100%' />\n              <br />\n              <Skeleton width='70%' />\n            </>\n          ) : server.get('description')}\n        </div>\n\n        <div className='server-banner__meta'>\n          <div className='server-banner__meta__column'>\n            <h4><FormattedMessage id='server_banner.administered_by' defaultMessage='Administered by:' /></h4>\n\n            <Account id={server.getIn(['contact', 'account', 'id'])} size={36} />\n          </div>\n\n          <div className='server-banner__meta__column'>\n            <h4><FormattedMessage id='server_banner.server_stats' defaultMessage='Server stats:' /></h4>\n\n            {isLoading ? (\n              <>\n                <strong className='server-banner__number'><Skeleton width='10ch' /></strong>\n                <br />\n                <span className='server-banner__number-label'><Skeleton width='5ch' /></span>\n              </>\n            ) : (\n              <>\n                <strong className='server-banner__number'><ShortNumber value={server.getIn(['usage', 'users', 'active_month'])} /></strong>\n                <br />\n                <span className='server-banner__number-label' title={intl.formatMessage(messages.aboutActiveUsers)}><FormattedMessage id='server_banner.active_users' defaultMessage='active users' /></span>\n              </>\n            )}\n          </div>\n        </div>\n\n        <hr className='spacer' />\n\n        <Link className='button button--block button-secondary' to='/about'><FormattedMessage id='server_banner.learn_more' defaultMessage='Learn more' /></Link>\n      </div>\n    );\n  }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport SearchContainer from 'mastodon/features/compose/containers/search_container';\nimport ComposeFormContainer from 'mastodon/features/compose/containers/compose_form_container';\nimport NavigationContainer from 'mastodon/features/compose/containers/navigation_container';\nimport LinkFooter from './link_footer';\nimport ServerBanner from 'mastodon/components/server_banner';\nimport { changeComposing, mountCompose, unmountCompose } from 'mastodon/actions/compose';\n\nexport default @connect()\nclass ComposePanel extends React.PureComponent {\n\n  static contextTypes = {\n    identity: PropTypes.object.isRequired,\n  };\n\n  static propTypes = {\n    dispatch: PropTypes.func.isRequired,\n  };\n\n  onFocus = () => {\n    const { dispatch } = this.props;\n    dispatch(changeComposing(true));\n  }\n\n  onBlur = () => {\n    const { dispatch } = this.props;\n    dispatch(changeComposing(false));\n  }\n\n  componentDidMount () {\n    const { dispatch } = this.props;\n    dispatch(mountCompose());\n  }\n\n  componentWillUnmount () {\n    const { dispatch } = this.props;\n    dispatch(unmountCompose());\n  }\n\n  render() {\n    const { signedIn } = this.context.identity;\n\n    return (\n      <div className='compose-panel' onFocus={this.onFocus}>\n        <SearchContainer openInRoute />\n\n        {!signedIn && (\n          <React.Fragment>\n            <ServerBanner />\n            <div className='flex-spacer' />\n          </React.Fragment>\n        )}\n\n        {signedIn && (\n          <React.Fragment>\n            <NavigationContainer onClose={this.onBlur} />\n            <ComposeFormContainer singleColumn />\n          </React.Fragment>\n        )}\n\n        <LinkFooter />\n      </div>\n    );\n  }\n\n}\n","import React from 'react';\n\nconst Logo = () => (\n  <svg viewBox='0 0 261 66' className='logo' role='img'>\n    <title>Mastodon</title>\n    <use xlinkHref='#logo-symbol-wordmark' />\n  </svg>\n);\n\nexport default Logo;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport { Link } from 'react-router-dom';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\nimport { disabledAccountId, movedToAccountId, domain } from 'mastodon/initial_state';\nimport { openModal } from 'mastodon/actions/modal';\nimport { logOut } from 'mastodon/utils/log_out';\n\nconst messages = defineMessages({\n  logoutMessage: { id: 'confirmations.logout.message', defaultMessage: 'Are you sure you want to log out?' },\n  logoutConfirm: { id: 'confirmations.logout.confirm', defaultMessage: 'Log out' },\n});\n\nconst mapStateToProps = (state) => ({\n  disabledAcct: state.getIn(['accounts', disabledAccountId, 'acct']),\n  movedToAcct: movedToAccountId ? state.getIn(['accounts', movedToAccountId, 'acct']) : undefined,\n});\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n  onLogout () {\n    dispatch(openModal('CONFIRM', {\n      message: intl.formatMessage(messages.logoutMessage),\n      confirm: intl.formatMessage(messages.logoutConfirm),\n      closeWhenConfirm: false,\n      onConfirm: () => logOut(),\n    }));\n  },\n});\n\nexport default @injectIntl\n@connect(mapStateToProps, mapDispatchToProps)\nclass DisabledAccountBanner extends React.PureComponent {\n\n  static propTypes = {\n    disabledAcct: PropTypes.string.isRequired,\n    movedToAcct: PropTypes.string,\n    onLogout: PropTypes.func.isRequired,\n    intl: PropTypes.object.isRequired,\n  };\n\n  handleLogOutClick = e => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    this.props.onLogout();\n\n    return false;\n  }\n\n  render () {\n    const { disabledAcct, movedToAcct } = this.props;\n\n    const disabledAccountLink = (\n      <Link to={`/@${disabledAcct}`}>\n        {disabledAcct}@{domain}\n      </Link>\n    );\n\n    return (\n      <div className='sign-in-banner'>\n        <p>\n          {movedToAcct ? (\n            <FormattedMessage\n              id='moved_to_account_banner.text'\n              defaultMessage='Your account {disabledAccount} is currently disabled because you moved to {movedToAccount}.'\n              values={{\n                disabledAccount: disabledAccountLink,\n                movedToAccount: <Link to={`/@${movedToAcct}`}>{movedToAcct.includes('@') ? movedToAcct : `${movedToAcct}@${domain}`}</Link>,\n              }}\n            />\n          ) : (\n            <FormattedMessage\n              id='disabled_account_banner.text'\n              defaultMessage='Your account {disabledAccount} is currently disabled.'\n              values={{\n                disabledAccount: disabledAccountLink,\n              }}\n            />\n          )}\n        </p>\n        <a href='/auth/edit' className='button button--block'>\n          <FormattedMessage id='disabled_account_banner.account_settings' defaultMessage='Account settings' />\n        </a>\n        <button type='button' className='button button--block button-tertiary' onClick={this.handleLogOutClick}>\n          <FormattedMessage id='confirmations.logout.confirm' defaultMessage='Log out' />\n        </button>\n      </div>\n    );\n  }\n\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { fetchFollowRequests } from 'mastodon/actions/accounts';\nimport { connect } from 'react-redux';\nimport ColumnLink from 'mastodon/features/ui/components/column_link';\nimport IconWithBadge from 'mastodon/components/icon_with_badge';\nimport { List as ImmutableList } from 'immutable';\nimport { injectIntl, defineMessages } from 'react-intl';\n\nconst messages = defineMessages({\n  text: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },\n});\n\nconst mapStateToProps = state => ({\n  count: state.getIn(['user_lists', 'follow_requests', 'items'], ImmutableList()).size,\n});\n\nexport default @injectIntl\n@connect(mapStateToProps)\nclass FollowRequestsColumnLink extends React.Component {\n\n  static propTypes = {\n    dispatch: PropTypes.func.isRequired,\n    count: PropTypes.number.isRequired,\n    intl: PropTypes.object.isRequired,\n  };\n\n  componentDidMount () {\n    const { dispatch } = this.props;\n\n    dispatch(fetchFollowRequests());\n  }\n\n  render () {\n    const { count, intl } = this.props;\n\n    if (count === 0) {\n      return null;\n    }\n\n    return (\n      <ColumnLink\n        transparent\n        to='/follow_requests'\n        icon={<IconWithBadge className='column-link__icon' id='user-plus' count={count} />}\n        text={intl.formatMessage(messages.text)}\n      />\n    );\n  }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { createSelector } from 'reselect';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { connect } from 'react-redux';\nimport { withRouter } from 'react-router-dom';\nimport { fetchLists } from 'mastodon/actions/lists';\nimport ColumnLink from './column_link';\n\nconst getOrderedLists = createSelector([state => state.get('lists')], lists => {\n  if (!lists) {\n    return lists;\n  }\n\n  return lists.toList().filter(item => !!item).sort((a, b) => a.get('title').localeCompare(b.get('title'))).take(4);\n});\n\nconst mapStateToProps = state => ({\n  lists: getOrderedLists(state),\n});\n\nexport default @withRouter\n@connect(mapStateToProps)\nclass ListPanel extends ImmutablePureComponent {\n\n  static propTypes = {\n    dispatch: PropTypes.func.isRequired,\n    lists: ImmutablePropTypes.list,\n  };\n\n  componentDidMount () {\n    const { dispatch } = this.props;\n    dispatch(fetchLists());\n  }\n\n  render () {\n    const { lists } = this.props;\n\n    if (!lists || lists.isEmpty()) {\n      return null;\n    }\n\n    return (\n      <div className='list-panel'>\n        <hr />\n\n        {lists.map(list => (\n          <ColumnLink icon='list-ul' key={list.get('id')} strict text={list.get('title')} to={`/lists/${list.get('id')}`} transparent />\n        ))}\n      </div>\n    );\n  }\n\n}\n","import { connect } from 'react-redux';\nimport IconWithBadge from 'mastodon/components/icon_with_badge';\n\nconst mapStateToProps = state => ({\n  count: state.getIn(['notifications', 'unread']),\n  id: 'bell',\n});\n\nexport default connect(mapStateToProps)(IconWithBadge);\n","import React, { useCallback } from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport { useDispatch } from 'react-redux';\nimport { registrationsOpen } from 'mastodon/initial_state';\nimport { openModal } from 'mastodon/actions/modal';\n\nconst SignInBanner = () => {\n  const dispatch = useDispatch();\n\n  const openClosedRegistrationsModal = useCallback(\n    () => dispatch(openModal('CLOSED_REGISTRATIONS')),\n    [dispatch],\n  );\n\n  let signupButton;\n\n  if (registrationsOpen) {\n    signupButton = (\n      <a href='/auth/sign_up' className='button button--block button-tertiary'>\n        <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />\n      </a>\n    );\n  } else {\n    signupButton = (\n      <button className='button button--block button-tertiary' onClick={openClosedRegistrationsModal}>\n        <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />\n      </button>\n    );\n  }\n\n  return (\n    <div className='sign-in-banner'>\n      <p><FormattedMessage id='sign_in_banner.text' defaultMessage='Sign in to follow profiles or hashtags, favourite, share and reply to posts, or interact from your account on a different server.' /></p>\n      <a href='/auth/sign_in' className='button button--block'><FormattedMessage id='sign_in_banner.sign_in' defaultMessage='Sign in' /></a>\n      {signupButton}\n    </div>\n  );\n};\n\nexport default SignInBanner;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\nimport Hashtag from 'mastodon/components/hashtag';\n\nconst messages = defineMessages({\n  lastStatusAt: { id: 'account.featured_tags.last_status_at', defaultMessage: 'Last post on {date}' },\n  empty: { id: 'account.featured_tags.last_status_never', defaultMessage: 'No posts' },\n});\n\nexport default @injectIntl\nclass FeaturedTags extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  static propTypes = {\n    account: ImmutablePropTypes.map,\n    featuredTags: ImmutablePropTypes.list,\n    tagged: PropTypes.string,\n    intl: PropTypes.object.isRequired,\n  };\n\n  render () {\n    const { account, featuredTags, intl } = this.props;\n\n    if (!account || account.get('suspended') || featuredTags.isEmpty()) {\n      return null;\n    }\n\n    return (\n      <div className='getting-started__trends'>\n        <h4><FormattedMessage id='account.featured_tags.title' defaultMessage=\"{name}'s featured hashtags\" values={{ name: <bdi dangerouslySetInnerHTML={{ __html: account.get('display_name_html') }} /> }} /></h4>\n\n        {featuredTags.take(3).map(featuredTag => (\n          <Hashtag\n            key={featuredTag.get('name')}\n            name={featuredTag.get('name')}\n            to={`/@${account.get('acct')}/tagged/${featuredTag.get('name')}`}\n            uses={featuredTag.get('statuses_count') * 1}\n            withGraph={false}\n            description={((featuredTag.get('statuses_count') * 1) > 0) ? intl.formatMessage(messages.lastStatusAt, { date: intl.formatDate(featuredTag.get('last_status_at'), { month: 'short', day: '2-digit' }) }) : intl.formatMessage(messages.empty)}\n          />\n        ))}\n      </div>\n    );\n  }\n\n}\n","import { connect } from 'react-redux';\nimport FeaturedTags from '../components/featured_tags';\nimport { makeGetAccount } from 'mastodon/selectors';\nimport { List as ImmutableList } from 'immutable';\n\nconst mapStateToProps = () => {\n  const getAccount = makeGetAccount();\n\n  return (state, { accountId }) => ({\n    account: getAccount(state, accountId),\n    featuredTags: state.getIn(['user_lists', 'featured_tags', accountId, 'items'], ImmutableList()),\n  });\n};\n\nexport default connect(mapStateToProps)(FeaturedTags);\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport FeaturedTags from 'mastodon/features/account/containers/featured_tags_container';\nimport { normalizeForLookup } from 'mastodon/reducers/accounts_map';\n\nconst mapStateToProps = (state, { match: { params: { acct } } }) => {\n  const accountId = state.getIn(['accounts_map', normalizeForLookup(acct)]);\n\n  if (!accountId) {\n    return {\n      isLoading: true,\n    };\n  }\n\n  return {\n    accountId,\n    isLoading: false,\n  };\n};\n\nexport default @connect(mapStateToProps)\nclass AccountNavigation extends React.PureComponent {\n\n  static propTypes = {\n    match: PropTypes.shape({\n      params: PropTypes.shape({\n        acct: PropTypes.string,\n        tagged: PropTypes.string,\n      }).isRequired,\n    }).isRequired,\n\n    accountId: PropTypes.string,\n    isLoading: PropTypes.bool,\n  };\n\n  render () {\n    const { accountId, isLoading, match: { params: { tagged } } } = this.props;\n\n    if (isLoading) {\n      return null;\n    }\n\n    return (\n      <>\n        <div className='flex-spacer' />\n        <FeaturedTags accountId={accountId} tagged={tagged} />\n      </>\n    );\n  }\n\n}\n","import React from 'react';\nimport { Switch, Route, withRouter } from 'react-router-dom';\nimport { showTrends } from 'mastodon/initial_state';\nimport Trends from 'mastodon/features/getting_started/containers/trends_container';\nimport AccountNavigation from 'mastodon/features/account/navigation';\n\nconst DefaultNavigation = () => (\n  <>\n    {showTrends && (\n      <>\n        <div className='flex-spacer' />\n        <Trends />\n      </>\n    )}\n  </>\n);\n\nexport default @withRouter\nclass NavigationPortal extends React.PureComponent {\n\n  render () {\n    return (\n      <Switch>\n        <Route path='/@:acct' exact component={AccountNavigation} />\n        <Route path='/@:acct/tagged/:tagged?' exact component={AccountNavigation} />\n        <Route path='/@:acct/with_replies' exact component={AccountNavigation} />\n        <Route path='/@:acct/followers' exact component={AccountNavigation} />\n        <Route path='/@:acct/following' exact component={AccountNavigation} />\n        <Route path='/@:acct/media' exact component={AccountNavigation} />\n        <Route component={DefaultNavigation} />\n      </Switch>\n    );\n  }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { Link } from 'react-router-dom';\nimport Logo from 'mastodon/components/logo';\nimport { timelinePreview, showTrends } from 'mastodon/initial_state';\nimport ColumnLink from './column_link';\nimport DisabledAccountBanner from './disabled_account_banner';\nimport FollowRequestsColumnLink from './follow_requests_column_link';\nimport ListPanel from './list_panel';\nimport NotificationsCounterIcon from './notifications_counter_icon';\nimport SignInBanner from './sign_in_banner';\nimport NavigationPortal from 'mastodon/components/navigation_portal';\n\nconst messages = defineMessages({\n  home: { id: 'tabs_bar.home', defaultMessage: 'Home' },\n  notifications: { id: 'tabs_bar.notifications', defaultMessage: 'Notifications' },\n  explore: { id: 'explore.title', defaultMessage: 'Explore' },\n  local: { id: 'tabs_bar.local_timeline', defaultMessage: 'Local' },\n  federated: { id: 'tabs_bar.federated_timeline', defaultMessage: 'Federated' },\n  direct: { id: 'navigation_bar.direct', defaultMessage: 'Direct messages' },\n  favourites: { id: 'navigation_bar.favourites', defaultMessage: 'Favourites' },\n  bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' },\n  lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' },\n  preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },\n  followsAndFollowers: { id: 'navigation_bar.follows_and_followers', defaultMessage: 'Follows and followers' },\n  about: { id: 'navigation_bar.about', defaultMessage: 'About' },\n  search: { id: 'navigation_bar.search', defaultMessage: 'Search' },\n});\n\nexport default @injectIntl\nclass NavigationPanel extends React.Component {\n\n  static contextTypes = {\n    router: PropTypes.object.isRequired,\n    identity: PropTypes.object.isRequired,\n  };\n\n  static propTypes = {\n    intl: PropTypes.object.isRequired,\n  };\n\n  render () {\n    const { intl } = this.props;\n    const { signedIn, disabledAccountId } = this.context.identity;\n\n    return (\n      <div className='navigation-panel'>\n        <div className='navigation-panel__logo'>\n          <Link to='/' className='column-link column-link--logo'><Logo /></Link>\n          <hr />\n        </div>\n\n        {signedIn && (\n          <React.Fragment>\n            <ColumnLink transparent to='/home' icon='home' text={intl.formatMessage(messages.home)} />\n            <ColumnLink transparent to='/notifications' icon={<NotificationsCounterIcon className='column-link__icon' />} text={intl.formatMessage(messages.notifications)} />\n            <FollowRequestsColumnLink />\n          </React.Fragment>\n        )}\n\n        {showTrends ? (\n          <ColumnLink transparent to='/explore' icon='hashtag' text={intl.formatMessage(messages.explore)} />\n        ) : (\n          <ColumnLink transparent to='/search' icon='search' text={intl.formatMessage(messages.search)} />\n        )}\n\n        {(signedIn || timelinePreview) && (\n          <>\n            <ColumnLink transparent to='/public/local' icon='users' text={intl.formatMessage(messages.local)} />\n            <ColumnLink transparent exact to='/public' icon='globe' text={intl.formatMessage(messages.federated)} />\n          </>\n        )}\n\n        {!signedIn && (\n          <div className='navigation-panel__sign-in-banner'>\n            <hr />\n            { disabledAccountId ? <DisabledAccountBanner /> : <SignInBanner /> }\n          </div>\n        )}\n\n        {signedIn && (\n          <React.Fragment>\n            <ColumnLink transparent to='/conversations' icon='at' text={intl.formatMessage(messages.direct)} />\n            <ColumnLink transparent to='/favourites' icon='star' text={intl.formatMessage(messages.favourites)} />\n            <ColumnLink transparent to='/bookmarks' icon='bookmark' text={intl.formatMessage(messages.bookmarks)} />\n            <ColumnLink transparent to='/lists' icon='list-ul' text={intl.formatMessage(messages.lists)} />\n\n            <ListPanel />\n\n            <hr />\n\n            <ColumnLink transparent href='/settings/preferences' icon='cog' text={intl.formatMessage(messages.preferences)} />\n          </React.Fragment>\n        )}\n\n        <div className='navigation-panel__legal'>\n          <hr />\n          <ColumnLink transparent to='/about' icon='ellipsis-h' text={intl.formatMessage(messages.about)} />\n        </div>\n\n        <NavigationPortal />\n      </div>\n    );\n  }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport BundleContainer from '../containers/bundle_container';\nimport ColumnLoading from './column_loading';\nimport DrawerLoading from './drawer_loading';\nimport BundleColumnError from './bundle_column_error';\nimport {\n  Compose,\n  Notifications,\n  HomeTimeline,\n  CommunityTimeline,\n  PublicTimeline,\n  HashtagTimeline,\n  DirectTimeline,\n  FavouritedStatuses,\n  BookmarkedStatuses,\n  ListTimeline,\n  Directory,\n} from '../../ui/util/async-components';\nimport ComposePanel from './compose_panel';\nimport NavigationPanel from './navigation_panel';\nimport { supportsPassiveEvents } from 'detect-passive-events';\nimport { scrollRight } from '../../../scroll';\n\nconst componentMap = {\n  'COMPOSE': Compose,\n  'HOME': HomeTimeline,\n  'NOTIFICATIONS': Notifications,\n  'PUBLIC': PublicTimeline,\n  'REMOTE': PublicTimeline,\n  'COMMUNITY': CommunityTimeline,\n  'HASHTAG': HashtagTimeline,\n  'DIRECT': DirectTimeline,\n  'FAVOURITES': FavouritedStatuses,\n  'BOOKMARKS': BookmarkedStatuses,\n  'LIST': ListTimeline,\n  'DIRECTORY': Directory,\n};\n\nexport default class ColumnsArea extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object.isRequired,\n  };\n\n  static propTypes = {\n    columns: ImmutablePropTypes.list.isRequired,\n    isModalOpen: PropTypes.bool.isRequired,\n    singleColumn: PropTypes.bool,\n    children: PropTypes.node,\n  };\n\n  // Corresponds to (max-width: $no-gap-breakpoint + 285px - 1px) in SCSS\n  mediaQuery = 'matchMedia' in window && window.matchMedia('(max-width: 1174px)');\n\n  state = {\n    renderComposePanel: !(this.mediaQuery && this.mediaQuery.matches),\n  }\n\n  componentDidMount() {\n    if (!this.props.singleColumn) {\n      this.node.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false);\n    }\n\n    if (this.mediaQuery) {\n      if (this.mediaQuery.addEventListener) {\n        this.mediaQuery.addEventListener('change', this.handleLayoutChange);\n      } else {\n        this.mediaQuery.addListener(this.handleLayoutChange);\n      }\n      this.setState({ renderComposePanel: !this.mediaQuery.matches });\n    }\n\n    this.isRtlLayout = document.getElementsByTagName('body')[0].classList.contains('rtl');\n  }\n\n  componentWillUpdate(nextProps) {\n    if (this.props.singleColumn !== nextProps.singleColumn && nextProps.singleColumn) {\n      this.node.removeEventListener('wheel', this.handleWheel);\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    if (this.props.singleColumn !== prevProps.singleColumn && !this.props.singleColumn) {\n      this.node.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false);\n    }\n  }\n\n  componentWillUnmount () {\n    if (!this.props.singleColumn) {\n      this.node.removeEventListener('wheel', this.handleWheel);\n    }\n\n    if (this.mediaQuery) {\n      if (this.mediaQuery.removeEventListener) {\n        this.mediaQuery.removeEventListener('change', this.handleLayoutChange);\n      } else {\n        this.mediaQuery.removeListener(this.handleLayouteChange);\n      }\n    }\n  }\n\n  handleChildrenContentChange() {\n    if (!this.props.singleColumn) {\n      const modifier = this.isRtlLayout ? -1 : 1;\n      this._interruptScrollAnimation = scrollRight(this.node, (this.node.scrollWidth - window.innerWidth) * modifier);\n    }\n  }\n\n  handleLayoutChange = (e) => {\n    this.setState({ renderComposePanel: !e.matches });\n  }\n\n  handleWheel = () => {\n    if (typeof this._interruptScrollAnimation !== 'function') {\n      return;\n    }\n\n    this._interruptScrollAnimation();\n  }\n\n  setRef = (node) => {\n    this.node = node;\n  }\n\n  renderLoading = columnId => () => {\n    return columnId === 'COMPOSE' ? <DrawerLoading /> : <ColumnLoading multiColumn />;\n  }\n\n  renderError = (props) => {\n    return <BundleColumnError multiColumn errorType='network' {...props} />;\n  }\n\n  render () {\n    const { columns, children, singleColumn, isModalOpen } = this.props;\n    const { renderComposePanel } = this.state;\n\n    if (singleColumn) {\n      return (\n        <div className='columns-area__panels'>\n          <div className='columns-area__panels__pane columns-area__panels__pane--compositional'>\n            <div className='columns-area__panels__pane__inner'>\n              {renderComposePanel && <ComposePanel />}\n            </div>\n          </div>\n\n          <div className='columns-area__panels__main'>\n            <div className='tabs-bar__wrapper'><div id='tabs-bar__portal' /></div>\n            <div className='columns-area columns-area--mobile'>{children}</div>\n          </div>\n\n          <div className='columns-area__panels__pane columns-area__panels__pane--start columns-area__panels__pane--navigational'>\n            <div className='columns-area__panels__pane__inner'>\n              <NavigationPanel />\n            </div>\n          </div>\n        </div>\n      );\n    }\n\n    return (\n      <div className={`columns-area ${ isModalOpen ? 'unscrollable' : '' }`} ref={this.setRef}>\n        {columns.map(column => {\n          const params = column.get('params', null) === null ? null : column.get('params').toJS();\n          const other  = params && params.other ? params.other : {};\n\n          return (\n            <BundleContainer key={column.get('uuid')} fetchComponent={componentMap[column.get('id')]} loading={this.renderLoading(column.get('id'))} error={this.renderError}>\n              {SpecificComponent => <SpecificComponent columnId={column.get('uuid')} params={params} multiColumn {...other} />}\n            </BundleContainer>\n          );\n        })}\n\n        {React.Children.map(children, child => React.cloneElement(child, { multiColumn: true }))}\n      </div>\n    );\n  }\n\n}\n","import { connect } from 'react-redux';\nimport ColumnsArea from '../components/columns_area';\n\nconst mapStateToProps = state => ({\n  columns: state.getIn(['settings', 'columns']),\n  isModalOpen: !!state.get('modal').modalType,\n});\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(ColumnsArea);\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport PropTypes from 'prop-types';\nimport IconButton from 'mastodon/components/icon_button';\nimport { Link } from 'react-router-dom';\nimport Avatar from 'mastodon/components/avatar';\nimport DisplayName from 'mastodon/components/display_name';\nimport { defineMessages, injectIntl } from 'react-intl';\n\nconst messages = defineMessages({\n  close: { id: 'lightbox.close', defaultMessage: 'Close' },\n});\n\nconst mapStateToProps = (state, { accountId }) => ({\n  account: state.getIn(['accounts', accountId]),\n});\n\nexport default @connect(mapStateToProps)\n@injectIntl\nclass Header extends ImmutablePureComponent {\n\n  static propTypes = {\n    accountId: PropTypes.string.isRequired,\n    statusId: PropTypes.string.isRequired,\n    account: ImmutablePropTypes.map.isRequired,\n    onClose: PropTypes.func.isRequired,\n    intl: PropTypes.object.isRequired,\n  };\n\n  render () {\n    const { account, statusId, onClose, intl } = this.props;\n\n    return (\n      <div className='picture-in-picture__header'>\n        <Link to={`/@${account.get('acct')}/${statusId}`} className='picture-in-picture__header__account'>\n          <Avatar account={account} size={36} />\n          <DisplayName account={account} />\n        </Link>\n\n        <IconButton icon='times' onClick={onClose} title={intl.formatMessage(messages.close)} />\n      </div>\n    );\n  }\n\n}\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport Video from 'mastodon/features/video';\nimport Audio from 'mastodon/features/audio';\nimport { removePictureInPicture } from 'mastodon/actions/picture_in_picture';\nimport Header from './components/header';\nimport Footer from './components/footer';\n\nconst mapStateToProps = state => ({\n  ...state.get('picture_in_picture'),\n});\n\nexport default @connect(mapStateToProps)\nclass PictureInPicture extends React.Component {\n\n  static propTypes = {\n    statusId: PropTypes.string,\n    accountId: PropTypes.string,\n    type: PropTypes.string,\n    src: PropTypes.string,\n    muted: PropTypes.bool,\n    volume: PropTypes.number,\n    currentTime: PropTypes.number,\n    poster: PropTypes.string,\n    backgroundColor: PropTypes.string,\n    foregroundColor: PropTypes.string,\n    accentColor: PropTypes.string,\n    dispatch: PropTypes.func.isRequired,\n  };\n\n  handleClose = () => {\n    const { dispatch } = this.props;\n    dispatch(removePictureInPicture());\n  }\n\n  render () {\n    const { type, src, currentTime, accountId, statusId } = this.props;\n\n    if (!currentTime) {\n      return null;\n    }\n\n    let player;\n\n    if (type === 'video') {\n      player = (\n        <Video\n          src={src}\n          currentTime={this.props.currentTime}\n          volume={this.props.volume}\n          muted={this.props.muted}\n          autoPlay\n          inline\n          alwaysVisible\n        />\n      );\n    } else if (type === 'audio') {\n      player = (\n        <Audio\n          src={src}\n          currentTime={this.props.currentTime}\n          volume={this.props.volume}\n          muted={this.props.muted}\n          poster={this.props.poster}\n          backgroundColor={this.props.backgroundColor}\n          foregroundColor={this.props.foregroundColor}\n          accentColor={this.props.accentColor}\n          autoPlay\n        />\n      );\n    }\n\n    return (\n      <div className='picture-in-picture'>\n        <Header accountId={accountId} statusId={statusId} onClose={this.handleClose} />\n\n        {player}\n\n        <Footer statusId={statusId} />\n      </div>\n    );\n  }\n\n}\n","import { changeSetting, saveSettings } from './settings';\n\nexport const INTRODUCTION_VERSION = 20181216044202;\n\nexport const closeOnboarding = () => dispatch => {\n  dispatch(changeSetting(['introductionVersion'], INTRODUCTION_VERSION));\n  dispatch(saveSettings());\n};\n","import React from 'react';\nimport Logo from 'mastodon/components/logo';\nimport { Link, withRouter } from 'react-router-dom';\nimport { FormattedMessage } from 'react-intl';\nimport { registrationsOpen, me } from 'mastodon/initial_state';\nimport Avatar from 'mastodon/components/avatar';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\n\nconst Account = connect(state => ({\n  account: state.getIn(['accounts', me]),\n}))(({ account }) => (\n  <Link to={`/@${account.get('acct')}`} title={account.get('acct')}>\n    <Avatar account={account} size={35} />\n  </Link>\n));\n\nexport default @withRouter\nclass Header extends React.PureComponent {\n\n  static contextTypes = {\n    identity: PropTypes.object,\n  };\n\n  static propTypes = {\n    location: PropTypes.object,\n  };\n\n  render () {\n    const { signedIn } = this.context.identity;\n    const { location } = this.props;\n\n    let content;\n\n    if (signedIn) {\n      content = (\n        <>\n          {location.pathname !== '/publish' && <Link to='/publish' className='button'><FormattedMessage id='compose_form.publish' defaultMessage='Publish' /></Link>}\n          <Account />\n        </>\n      );\n    } else {\n      content = (\n        <>\n          <a href='/auth/sign_in' className='button'><FormattedMessage id='sign_in_banner.sign_in' defaultMessage='Sign in' /></a>\n          <a href={registrationsOpen ? '/auth/sign_up' : 'https://joinmastodon.org/servers'} className='button button-tertiary'><FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' /></a>\n        </>\n      );\n    }\n\n    return (\n      <div className='ui__header'>\n        <Link to='/' className='ui__header__logo'><Logo /></Link>\n\n        <div className='ui__header__links'>\n          {content}\n        </div>\n      </div>\n    );\n  }\n\n}\n","import classNames from 'classnames';\nimport React from 'react';\nimport { HotKeys } from 'react-hotkeys';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { connect } from 'react-redux';\nimport { Redirect, Route, withRouter } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport NotificationsContainer from './containers/notifications_container';\nimport LoadingBarContainer from './containers/loading_bar_container';\nimport ModalContainer from './containers/modal_container';\nimport { layoutFromWindow } from 'mastodon/is_mobile';\nimport { debounce } from 'lodash';\nimport { uploadCompose, resetCompose, changeComposeSpoilerness } from '../../actions/compose';\nimport { expandHomeTimeline } from '../../actions/timelines';\nimport { expandNotifications } from '../../actions/notifications';\nimport { fetchServer } from '../../actions/server';\nimport { clearHeight } from '../../actions/height_cache';\nimport { focusApp, unfocusApp, changeLayout } from 'mastodon/actions/app';\nimport { synchronouslySubmitMarkers, submitMarkers, fetchMarkers } from 'mastodon/actions/markers';\nimport { WrappedSwitch, WrappedRoute } from './util/react_router_helpers';\nimport BundleColumnError from './components/bundle_column_error';\nimport UploadArea from './components/upload_area';\nimport ColumnsAreaContainer from './containers/columns_area_container';\nimport PictureInPicture from 'mastodon/features/picture_in_picture';\nimport {\n  Compose,\n  Status,\n  GettingStarted,\n  KeyboardShortcuts,\n  PublicTimeline,\n  CommunityTimeline,\n  AccountTimeline,\n  AccountGallery,\n  HomeTimeline,\n  Followers,\n  Following,\n  Reblogs,\n  Favourites,\n  DirectTimeline,\n  HashtagTimeline,\n  Notifications,\n  FollowRequests,\n  FavouritedStatuses,\n  BookmarkedStatuses,\n  ListTimeline,\n  Blocks,\n  DomainBlocks,\n  Mutes,\n  PinnedStatuses,\n  Lists,\n  Directory,\n  Explore,\n  FollowRecommendations,\n  About,\n  PrivacyPolicy,\n} from './util/async-components';\nimport initialState, { me, owner, singleUserMode, showTrends } from '../../initial_state';\nimport { closeOnboarding, INTRODUCTION_VERSION } from 'mastodon/actions/onboarding';\nimport Header from './components/header';\n\n// Dummy import, to make sure that <Status /> ends up in the application bundle.\n// Without this it ends up in ~8 very commonly used bundles.\nimport '../../components/status';\n\nconst messages = defineMessages({\n  beforeUnload: { id: 'ui.beforeunload', defaultMessage: 'Your draft will be lost if you leave Mastodon.' },\n});\n\nconst mapStateToProps = state => ({\n  layout: state.getIn(['meta', 'layout']),\n  isComposing: state.getIn(['compose', 'is_composing']),\n  hasComposingText: state.getIn(['compose', 'text']).trim().length !== 0,\n  hasMediaAttachments: state.getIn(['compose', 'media_attachments']).size > 0,\n  canUploadMore: !state.getIn(['compose', 'media_attachments']).some(x => ['audio', 'video'].includes(x.get('type'))) && state.getIn(['compose', 'media_attachments']).size < 4,\n  dropdownMenuIsOpen: state.getIn(['dropdown_menu', 'openId']) !== null,\n  firstLaunch: state.getIn(['settings', 'introductionVersion'], 0) < INTRODUCTION_VERSION,\n  username: state.getIn(['accounts', me, 'username']),\n});\n\nconst keyMap = {\n  help: '?',\n  new: 'n',\n  search: 's',\n  forceNew: 'option+n',\n  toggleComposeSpoilers: 'option+x',\n  focusColumn: ['1', '2', '3', '4', '5', '6', '7', '8', '9'],\n  reply: 'r',\n  favourite: 'f',\n  boost: 'b',\n  mention: 'm',\n  open: ['enter', 'o'],\n  openProfile: 'p',\n  moveDown: ['down', 'j'],\n  moveUp: ['up', 'k'],\n  back: 'backspace',\n  goToHome: 'g h',\n  goToNotifications: 'g n',\n  goToLocal: 'g l',\n  goToFederated: 'g t',\n  goToDirect: 'g d',\n  goToStart: 'g s',\n  goToFavourites: 'g f',\n  goToPinned: 'g p',\n  goToProfile: 'g u',\n  goToBlocked: 'g b',\n  goToMuted: 'g m',\n  goToRequests: 'g r',\n  toggleHidden: 'x',\n  toggleSensitive: 'h',\n  openMedia: 'e',\n};\n\nclass SwitchingColumnsArea extends React.PureComponent {\n\n  static contextTypes = {\n    identity: PropTypes.object,\n  };\n\n  static propTypes = {\n    children: PropTypes.node,\n    location: PropTypes.object,\n    mobile: PropTypes.bool,\n  };\n\n  componentWillMount () {\n    if (this.props.mobile) {\n      document.body.classList.toggle('layout-single-column', true);\n      document.body.classList.toggle('layout-multiple-columns', false);\n    } else {\n      document.body.classList.toggle('layout-single-column', false);\n      document.body.classList.toggle('layout-multiple-columns', true);\n    }\n  }\n\n  componentDidUpdate (prevProps) {\n    if (![this.props.location.pathname, '/'].includes(prevProps.location.pathname)) {\n      this.node.handleChildrenContentChange();\n    }\n\n    if (prevProps.mobile !== this.props.mobile) {\n      document.body.classList.toggle('layout-single-column', this.props.mobile);\n      document.body.classList.toggle('layout-multiple-columns', !this.props.mobile);\n    }\n  }\n\n  setRef = c => {\n    if (c) {\n      this.node = c;\n    }\n  }\n\n  render () {\n    const { children, mobile } = this.props;\n    const { signedIn } = this.context.identity;\n\n    let redirect;\n\n    if (signedIn) {\n      if (mobile) {\n        redirect = <Redirect from='/' to='/home' exact />;\n      } else {\n        redirect = <Redirect from='/' to='/getting-started' exact />;\n      }\n    } else if (singleUserMode && owner && initialState?.accounts[owner]) {\n      redirect = <Redirect from='/' to={`/@${initialState.accounts[owner].username}`} exact />;\n    } else if (showTrends) {\n      redirect = <Redirect from='/' to='/explore' exact />;\n    } else {\n      redirect = <Redirect from='/' to='/about' exact />;\n    }\n\n    return (\n      <ColumnsAreaContainer ref={this.setRef} singleColumn={mobile}>\n        <WrappedSwitch>\n          {redirect}\n\n          <WrappedRoute path='/getting-started' component={GettingStarted} content={children} />\n          <WrappedRoute path='/keyboard-shortcuts' component={KeyboardShortcuts} content={children} />\n          <WrappedRoute path='/about' component={About} content={children} />\n          <WrappedRoute path='/privacy-policy' component={PrivacyPolicy} content={children} />\n\n          <WrappedRoute path={['/home', '/timelines/home']} component={HomeTimeline} content={children} />\n          <WrappedRoute path={['/public', '/timelines/public']} exact component={PublicTimeline} content={children} />\n          <WrappedRoute path={['/public/local', '/timelines/public/local']} exact component={CommunityTimeline} content={children} />\n          <WrappedRoute path={['/conversations', '/timelines/direct']} component={DirectTimeline} content={children} />\n          <WrappedRoute path='/tags/:id' component={HashtagTimeline} content={children} />\n          <WrappedRoute path='/lists/:id' component={ListTimeline} content={children} />\n          <WrappedRoute path='/notifications' component={Notifications} content={children} />\n          <WrappedRoute path='/favourites' component={FavouritedStatuses} content={children} />\n\n          <WrappedRoute path='/bookmarks' component={BookmarkedStatuses} content={children} />\n          <WrappedRoute path='/pinned' component={PinnedStatuses} content={children} />\n\n          <WrappedRoute path='/start' component={FollowRecommendations} content={children} />\n          <WrappedRoute path='/directory' component={Directory} content={children} />\n          <WrappedRoute path={['/explore', '/search']} component={Explore} content={children} />\n          <WrappedRoute path={['/publish', '/statuses/new']} component={Compose} content={children} />\n\n          <WrappedRoute path={['/@:acct', '/accounts/:id']} exact component={AccountTimeline} content={children} />\n          <WrappedRoute path='/@:acct/tagged/:tagged?' exact component={AccountTimeline} content={children} />\n          <WrappedRoute path={['/@:acct/with_replies', '/accounts/:id/with_replies']} component={AccountTimeline} content={children} componentParams={{ withReplies: true }} />\n          <WrappedRoute path={['/accounts/:id/followers', '/users/:acct/followers', '/@:acct/followers']} component={Followers} content={children} />\n          <WrappedRoute path={['/accounts/:id/following', '/users/:acct/following', '/@:acct/following']} component={Following} content={children} />\n          <WrappedRoute path={['/@:acct/media', '/accounts/:id/media']} component={AccountGallery} content={children} />\n          <WrappedRoute path='/@:acct/:statusId' exact component={Status} content={children} />\n          <WrappedRoute path='/@:acct/:statusId/reblogs' component={Reblogs} content={children} />\n          <WrappedRoute path='/@:acct/:statusId/favourites' component={Favourites} content={children} />\n\n          {/* Legacy routes, cannot be easily factored with other routes because they share a param name */}\n          <WrappedRoute path='/timelines/tag/:id' component={HashtagTimeline} content={children} />\n          <WrappedRoute path='/timelines/list/:id' component={ListTimeline} content={children} />\n          <WrappedRoute path='/statuses/:statusId' exact component={Status} content={children} />\n          <WrappedRoute path='/statuses/:statusId/reblogs' component={Reblogs} content={children} />\n          <WrappedRoute path='/statuses/:statusId/favourites' component={Favourites} content={children} />\n\n          <WrappedRoute path='/follow_requests' component={FollowRequests} content={children} />\n          <WrappedRoute path='/blocks' component={Blocks} content={children} />\n          <WrappedRoute path='/domain_blocks' component={DomainBlocks} content={children} />\n          <WrappedRoute path='/mutes' component={Mutes} content={children} />\n          <WrappedRoute path='/lists' component={Lists} content={children} />\n\n          <Route component={BundleColumnError} />\n        </WrappedSwitch>\n      </ColumnsAreaContainer>\n    );\n  }\n\n}\n\nexport default @connect(mapStateToProps)\n@injectIntl\n@withRouter\nclass UI extends React.PureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object.isRequired,\n    identity: PropTypes.object.isRequired,\n  };\n\n  static propTypes = {\n    dispatch: PropTypes.func.isRequired,\n    children: PropTypes.node,\n    isComposing: PropTypes.bool,\n    hasComposingText: PropTypes.bool,\n    hasMediaAttachments: PropTypes.bool,\n    canUploadMore: PropTypes.bool,\n    location: PropTypes.object,\n    intl: PropTypes.object.isRequired,\n    dropdownMenuIsOpen: PropTypes.bool,\n    layout: PropTypes.string.isRequired,\n    firstLaunch: PropTypes.bool,\n    username: PropTypes.string,\n  };\n\n  state = {\n    draggingOver: false,\n  };\n\n  handleBeforeUnload = e => {\n    const { intl, dispatch, isComposing, hasComposingText, hasMediaAttachments } = this.props;\n\n    dispatch(synchronouslySubmitMarkers());\n\n    if (isComposing && (hasComposingText || hasMediaAttachments)) {\n      e.preventDefault();\n      // Setting returnValue to any string causes confirmation dialog.\n      // Many browsers no longer display this text to users,\n      // but we set user-friendly message for other browsers, e.g. Edge.\n      e.returnValue = intl.formatMessage(messages.beforeUnload);\n    }\n  }\n\n  handleWindowFocus = () => {\n    this.props.dispatch(focusApp());\n    this.props.dispatch(submitMarkers({ immediate: true }));\n  }\n\n  handleWindowBlur = () => {\n    this.props.dispatch(unfocusApp());\n  }\n\n  handleDragEnter = (e) => {\n    e.preventDefault();\n\n    if (!this.dragTargets) {\n      this.dragTargets = [];\n    }\n\n    if (this.dragTargets.indexOf(e.target) === -1) {\n      this.dragTargets.push(e.target);\n    }\n\n    if (e.dataTransfer && Array.from(e.dataTransfer.types).includes('Files') && this.props.canUploadMore && this.context.identity.signedIn) {\n      this.setState({ draggingOver: true });\n    }\n  }\n\n  handleDragOver = (e) => {\n    if (this.dataTransferIsText(e.dataTransfer)) return false;\n\n    e.preventDefault();\n    e.stopPropagation();\n\n    try {\n      e.dataTransfer.dropEffect = 'copy';\n    } catch (err) {\n\n    }\n\n    return false;\n  }\n\n  handleDrop = (e) => {\n    if (this.dataTransferIsText(e.dataTransfer)) return;\n\n    e.preventDefault();\n\n    this.setState({ draggingOver: false });\n    this.dragTargets = [];\n\n    if (e.dataTransfer && e.dataTransfer.files.length >= 1 && this.props.canUploadMore && this.context.identity.signedIn) {\n      this.props.dispatch(uploadCompose(e.dataTransfer.files));\n    }\n  }\n\n  handleDragLeave = (e) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    this.dragTargets = this.dragTargets.filter(el => el !== e.target && this.node.contains(el));\n\n    if (this.dragTargets.length > 0) {\n      return;\n    }\n\n    this.setState({ draggingOver: false });\n  }\n\n  dataTransferIsText = (dataTransfer) => {\n    return (dataTransfer && Array.from(dataTransfer.types).filter((type) => type === 'text/plain').length === 1);\n  }\n\n  closeUploadModal = () => {\n    this.setState({ draggingOver: false });\n  }\n\n  handleServiceWorkerPostMessage = ({ data }) => {\n    if (data.type === 'navigate') {\n      this.context.router.history.push(data.path);\n    } else {\n      console.warn('Unknown message type:', data.type);\n    }\n  }\n\n  handleLayoutChange = debounce(() => {\n    this.props.dispatch(clearHeight()); // The cached heights are no longer accurate, invalidate\n  }, 500, {\n    trailing: true,\n  });\n\n  handleResize = () => {\n    const layout = layoutFromWindow();\n\n    if (layout !== this.props.layout) {\n      this.handleLayoutChange.cancel();\n      this.props.dispatch(changeLayout(layout));\n    } else {\n      this.handleLayoutChange();\n    }\n  }\n\n  componentDidMount () {\n    const { signedIn } = this.context.identity;\n\n    window.addEventListener('focus', this.handleWindowFocus, false);\n    window.addEventListener('blur', this.handleWindowBlur, false);\n    window.addEventListener('beforeunload', this.handleBeforeUnload, false);\n    window.addEventListener('resize', this.handleResize, { passive: true });\n\n    document.addEventListener('dragenter', this.handleDragEnter, false);\n    document.addEventListener('dragover', this.handleDragOver, false);\n    document.addEventListener('drop', this.handleDrop, false);\n    document.addEventListener('dragleave', this.handleDragLeave, false);\n    document.addEventListener('dragend', this.handleDragEnd, false);\n\n    if ('serviceWorker' in  navigator) {\n      navigator.serviceWorker.addEventListener('message', this.handleServiceWorkerPostMessage);\n    }\n\n    // On first launch, redirect to the follow recommendations page\n    if (signedIn && this.props.firstLaunch) {\n      this.context.router.history.replace('/start');\n      this.props.dispatch(closeOnboarding());\n    }\n\n    if (signedIn) {\n      this.props.dispatch(fetchMarkers());\n      this.props.dispatch(expandHomeTimeline());\n      this.props.dispatch(expandNotifications());\n\n      setTimeout(() => this.props.dispatch(fetchServer()), 3000);\n    }\n\n    this.hotkeys.__mousetrap__.stopCallback = (e, element) => {\n      return ['TEXTAREA', 'SELECT', 'INPUT'].includes(element.tagName);\n    };\n  }\n\n  componentWillUnmount () {\n    window.removeEventListener('focus', this.handleWindowFocus);\n    window.removeEventListener('blur', this.handleWindowBlur);\n    window.removeEventListener('beforeunload', this.handleBeforeUnload);\n    window.removeEventListener('resize', this.handleResize);\n\n    document.removeEventListener('dragenter', this.handleDragEnter);\n    document.removeEventListener('dragover', this.handleDragOver);\n    document.removeEventListener('drop', this.handleDrop);\n    document.removeEventListener('dragleave', this.handleDragLeave);\n    document.removeEventListener('dragend', this.handleDragEnd);\n  }\n\n  setRef = c => {\n    this.node = c;\n  }\n\n  handleHotkeyNew = e => {\n    e.preventDefault();\n\n    const element = this.node.querySelector('.compose-form__autosuggest-wrapper textarea');\n\n    if (element) {\n      element.focus();\n    }\n  }\n\n  handleHotkeySearch = e => {\n    e.preventDefault();\n\n    const element = this.node.querySelector('.search__input');\n\n    if (element) {\n      element.focus();\n    }\n  }\n\n  handleHotkeyForceNew = e => {\n    this.handleHotkeyNew(e);\n    this.props.dispatch(resetCompose());\n  }\n\n  handleHotkeyToggleComposeSpoilers = e => {\n    e.preventDefault();\n    this.props.dispatch(changeComposeSpoilerness());\n  }\n\n  handleHotkeyFocusColumn = e => {\n    const index  = (e.key * 1) + 1; // First child is drawer, skip that\n    const column = this.node.querySelector(`.column:nth-child(${index})`);\n    if (!column) return;\n    const container = column.querySelector('.scrollable');\n\n    if (container) {\n      const status = container.querySelector('.focusable');\n\n      if (status) {\n        if (container.scrollTop > status.offsetTop) {\n          status.scrollIntoView(true);\n        }\n        status.focus();\n      }\n    }\n  }\n\n  handleHotkeyBack = () => {\n    if (window.history && window.history.length === 1) {\n      this.context.router.history.push('/');\n    } else {\n      this.context.router.history.goBack();\n    }\n  }\n\n  setHotkeysRef = c => {\n    this.hotkeys = c;\n  }\n\n  handleHotkeyToggleHelp = () => {\n    if (this.props.location.pathname === '/keyboard-shortcuts') {\n      this.context.router.history.goBack();\n    } else {\n      this.context.router.history.push('/keyboard-shortcuts');\n    }\n  }\n\n  handleHotkeyGoToHome = () => {\n    this.context.router.history.push('/home');\n  }\n\n  handleHotkeyGoToNotifications = () => {\n    this.context.router.history.push('/notifications');\n  }\n\n  handleHotkeyGoToLocal = () => {\n    this.context.router.history.push('/public/local');\n  }\n\n  handleHotkeyGoToFederated = () => {\n    this.context.router.history.push('/public');\n  }\n\n  handleHotkeyGoToDirect = () => {\n    this.context.router.history.push('/conversations');\n  }\n\n  handleHotkeyGoToStart = () => {\n    this.context.router.history.push('/getting-started');\n  }\n\n  handleHotkeyGoToFavourites = () => {\n    this.context.router.history.push('/favourites');\n  }\n\n  handleHotkeyGoToPinned = () => {\n    this.context.router.history.push('/pinned');\n  }\n\n  handleHotkeyGoToProfile = () => {\n    this.context.router.history.push(`/@${this.props.username}`);\n  }\n\n  handleHotkeyGoToBlocked = () => {\n    this.context.router.history.push('/blocks');\n  }\n\n  handleHotkeyGoToMuted = () => {\n    this.context.router.history.push('/mutes');\n  }\n\n  handleHotkeyGoToRequests = () => {\n    this.context.router.history.push('/follow_requests');\n  }\n\n  render () {\n    const { draggingOver } = this.state;\n    const { children, isComposing, location, dropdownMenuIsOpen, layout } = this.props;\n\n    const handlers = {\n      help: this.handleHotkeyToggleHelp,\n      new: this.handleHotkeyNew,\n      search: this.handleHotkeySearch,\n      forceNew: this.handleHotkeyForceNew,\n      toggleComposeSpoilers: this.handleHotkeyToggleComposeSpoilers,\n      focusColumn: this.handleHotkeyFocusColumn,\n      back: this.handleHotkeyBack,\n      goToHome: this.handleHotkeyGoToHome,\n      goToNotifications: this.handleHotkeyGoToNotifications,\n      goToLocal: this.handleHotkeyGoToLocal,\n      goToFederated: this.handleHotkeyGoToFederated,\n      goToDirect: this.handleHotkeyGoToDirect,\n      goToStart: this.handleHotkeyGoToStart,\n      goToFavourites: this.handleHotkeyGoToFavourites,\n      goToPinned: this.handleHotkeyGoToPinned,\n      goToProfile: this.handleHotkeyGoToProfile,\n      goToBlocked: this.handleHotkeyGoToBlocked,\n      goToMuted: this.handleHotkeyGoToMuted,\n      goToRequests: this.handleHotkeyGoToRequests,\n    };\n\n    return (\n      <HotKeys keyMap={keyMap} handlers={handlers} ref={this.setHotkeysRef} attach={window} focused>\n        <div className={classNames('ui', { 'is-composing': isComposing })} ref={this.setRef} style={{ pointerEvents: dropdownMenuIsOpen ? 'none' : null }}>\n          <Header />\n\n          <SwitchingColumnsArea location={location} mobile={layout === 'mobile' || layout === 'single-column'}>\n            {children}\n          </SwitchingColumnsArea>\n\n          {layout !== 'mobile' && <PictureInPicture />}\n          <NotificationsContainer />\n          <LoadingBarContainer className='loading-bar' />\n          <ModalContainer />\n          <UploadArea active={draggingOver} onClose={this.closeUploadModal} />\n        </div>\n      </HotKeys>\n    );\n  }\n\n}\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { FormattedMessage } from 'react-intl';\nimport { version, source_url } from 'mastodon/initial_state';\nimport StackTrace from 'stacktrace-js';\nimport { Helmet } from 'react-helmet';\n\nexport default class ErrorBoundary extends React.PureComponent {\n\n  static propTypes = {\n    children: PropTypes.node,\n  };\n\n  state = {\n    hasError: false,\n    errorMessage: undefined,\n    stackTrace: undefined,\n    mappedStackTrace: undefined,\n    componentStack: undefined,\n  };\n\n  componentDidCatch (error, info) {\n    this.setState({\n      hasError: true,\n      errorMessage: error.toString(),\n      stackTrace: error.stack,\n      componentStack: info && info.componentStack,\n      mappedStackTrace: undefined,\n    });\n\n    StackTrace.fromError(error).then((stackframes) => {\n      this.setState({\n        mappedStackTrace: stackframes.map((sf) => sf.toString()).join('\\n'),\n      });\n    }).catch(() => {\n      this.setState({\n        mappedStackTrace: undefined,\n      });\n    });\n  }\n\n  handleCopyStackTrace = () => {\n    const { errorMessage, stackTrace, mappedStackTrace } = this.state;\n    const textarea = document.createElement('textarea');\n\n    let contents = [errorMessage, stackTrace];\n    if (mappedStackTrace) {\n      contents.push(mappedStackTrace);\n    }\n\n    textarea.textContent    = contents.join('\\n\\n\\n');\n    textarea.style.position = 'fixed';\n\n    document.body.appendChild(textarea);\n\n    try {\n      textarea.select();\n      document.execCommand('copy');\n    } catch (e) {\n\n    } finally {\n      document.body.removeChild(textarea);\n    }\n\n    this.setState({ copied: true });\n    setTimeout(() => this.setState({ copied: false }), 700);\n  }\n\n  render() {\n    const { hasError, copied, errorMessage } = this.state;\n\n    if (!hasError) {\n      return this.props.children;\n    }\n\n    const likelyBrowserAddonIssue = errorMessage && errorMessage.includes('NotFoundError');\n\n    return (\n      <div className='error-boundary'>\n        <div>\n          <p className='error-boundary__error'>\n            { likelyBrowserAddonIssue ? (\n              <FormattedMessage id='error.unexpected_crash.explanation_addons' defaultMessage='This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.' />\n            ) : (\n              <FormattedMessage id='error.unexpected_crash.explanation' defaultMessage='Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.' />\n            )}\n          </p>\n\n          <p>\n            { likelyBrowserAddonIssue ? (\n              <FormattedMessage id='error.unexpected_crash.next_steps_addons' defaultMessage='Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.' />\n            ) : (\n              <FormattedMessage id='error.unexpected_crash.next_steps' defaultMessage='Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.' />\n            )}\n          </p>\n\n          <p className='error-boundary__footer'>Mastodon v{version} · <a href={source_url} rel='noopener noreferrer' target='_blank'><FormattedMessage id='errors.unexpected_crash.report_issue' defaultMessage='Report issue' /></a> · <button onClick={this.handleCopyStackTrace} className={copied ? 'copied' : ''}><FormattedMessage id='errors.unexpected_crash.copy_stacktrace' defaultMessage='Copy stacktrace to clipboard' /></button></p>\n        </div>\n\n        <Helmet>\n          <meta name='robots' content='noindex' />\n        </Helmet>\n      </div>\n    );\n  }\n\n}\n","import PropTypes from 'prop-types';\nimport React from 'react';\nimport { Helmet } from 'react-helmet';\nimport { IntlProvider, addLocaleData } from 'react-intl';\nimport { Provider as ReduxProvider } from 'react-redux';\nimport { BrowserRouter, Route } from 'react-router-dom';\nimport { ScrollContext } from 'react-router-scroll-4';\nimport configureStore from 'mastodon/store/configureStore';\nimport UI from 'mastodon/features/ui';\nimport { fetchCustomEmojis } from 'mastodon/actions/custom_emojis';\nimport { hydrateStore } from 'mastodon/actions/store';\nimport { connectUserStream } from 'mastodon/actions/streaming';\nimport ErrorBoundary from 'mastodon/components/error_boundary';\nimport initialState, { title as siteTitle } from 'mastodon/initial_state';\nimport { getLocale } from 'mastodon/locales';\n\nconst { localeData, messages } = getLocale();\naddLocaleData(localeData);\n\nconst title = process.env.NODE_ENV === 'production' ? siteTitle : `${siteTitle} (Dev)`;\n\nexport const store = configureStore();\nconst hydrateAction = hydrateStore(initialState);\n\nstore.dispatch(hydrateAction);\nstore.dispatch(fetchCustomEmojis());\n\nconst createIdentityContext = state => ({\n  signedIn: !!state.meta.me,\n  accountId: state.meta.me,\n  disabledAccountId: state.meta.disabled_account_id,\n  accessToken: state.meta.access_token,\n  permissions: state.role ? state.role.permissions : 0,\n});\n\nexport default class Mastodon extends React.PureComponent {\n\n  static propTypes = {\n    locale: PropTypes.string.isRequired,\n  };\n\n  static childContextTypes = {\n    identity: PropTypes.shape({\n      signedIn: PropTypes.bool.isRequired,\n      accountId: PropTypes.string,\n      disabledAccountId: PropTypes.string,\n      accessToken: PropTypes.string,\n    }).isRequired,\n  };\n\n  identity = createIdentityContext(initialState);\n\n  getChildContext() {\n    return {\n      identity: this.identity,\n    };\n  }\n\n  componentDidMount() {\n    if (this.identity.signedIn) {\n      this.disconnect = store.dispatch(connectUserStream());\n    }\n  }\n\n  componentWillUnmount () {\n    if (this.disconnect) {\n      this.disconnect();\n      this.disconnect = null;\n    }\n  }\n\n  shouldUpdateScroll (prevRouterProps, { location }) {\n    return !(location.state?.mastodonModalKey && location.state?.mastodonModalKey !== prevRouterProps?.location?.state?.mastodonModalKey);\n  }\n\n  render () {\n    const { locale } = this.props;\n\n    return (\n      <IntlProvider locale={locale} messages={messages}>\n        <ReduxProvider store={store}>\n          <ErrorBoundary>\n            <BrowserRouter>\n              <ScrollContext shouldUpdateScroll={this.shouldUpdateScroll}>\n                <Route path='/' component={UI} />\n              </ScrollContext>\n            </BrowserRouter>\n\n            <Helmet defaultTitle={title} titleTemplate={`%s - ${title}`} />\n          </ErrorBoundary>\n        </ReduxProvider>\n      </IntlProvider>\n    );\n  }\n\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { setupBrowserNotifications } from 'mastodon/actions/notifications';\nimport Mastodon, { store } from 'mastodon/containers/mastodon';\nimport { me } from 'mastodon/initial_state';\nimport ready from 'mastodon/ready';\n\nconst perf = require('mastodon/performance');\n\n/**\n * @returns {Promise<void>}\n */\nfunction main() {\n  perf.start('main()');\n\n  return ready(async () => {\n    const mountNode = document.getElementById('mastodon');\n    const props = JSON.parse(mountNode.getAttribute('data-props'));\n\n    ReactDOM.render(<Mastodon {...props} />, mountNode);\n    store.dispatch(setupBrowserNotifications());\n\n    if (process.env.NODE_ENV === 'production' && me && 'serviceWorker' in navigator) {\n      const { Workbox } = await import('workbox-window');\n      const wb = new Workbox('/sw.js');\n      /** @type {ServiceWorkerRegistration} */\n      let registration;\n\n      try {\n        registration = await wb.register();\n      } catch (err) {\n        console.error(err);\n      }\n\n      if (registration) {\n        const registerPushNotifications = await import('mastodon/actions/push_notifications');\n\n        store.dispatch(registerPushNotifications.register());\n      }\n    }\n\n    perf.stop('main()');\n  });\n}\n\nexport default main;\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n  if (aName in aArgs) {\n    return aArgs[aName];\n  } else if (arguments.length === 3) {\n    return aDefaultValue;\n  } else {\n    throw new Error('\"' + aName + '\" is a required argument.');\n  }\n}\nexports.getArg = getArg;\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\nfunction urlParse(aUrl) {\n  var match = aUrl.match(urlRegexp);\n  if (!match) {\n    return null;\n  }\n  return {\n    scheme: match[1],\n    auth: match[2],\n    host: match[3],\n    port: match[4],\n    path: match[5]\n  };\n}\nexports.urlParse = urlParse;\nfunction urlGenerate(aParsedUrl) {\n  var url = '';\n  if (aParsedUrl.scheme) {\n    url += aParsedUrl.scheme + ':';\n  }\n  url += '//';\n  if (aParsedUrl.auth) {\n    url += aParsedUrl.auth + '@';\n  }\n  if (aParsedUrl.host) {\n    url += aParsedUrl.host;\n  }\n  if (aParsedUrl.port) {\n    url += \":\" + aParsedUrl.port;\n  }\n  if (aParsedUrl.path) {\n    url += aParsedUrl.path;\n  }\n  return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n  var path = aPath;\n  var url = urlParse(aPath);\n  if (url) {\n    if (!url.path) {\n      return aPath;\n    }\n    path = url.path;\n  }\n  var isAbsolute = exports.isAbsolute(path);\n  var parts = path.split(/\\/+/);\n  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n    part = parts[i];\n    if (part === '.') {\n      parts.splice(i, 1);\n    } else if (part === '..') {\n      up++;\n    } else if (up > 0) {\n      if (part === '') {\n        // The first part is blank if the path is absolute. Trying to go\n        // above the root is a no-op. Therefore we can remove all '..' parts\n        // directly after the root.\n        parts.splice(i + 1, up);\n        up = 0;\n      } else {\n        parts.splice(i, 2);\n        up--;\n      }\n    }\n  }\n  path = parts.join('/');\n  if (path === '') {\n    path = isAbsolute ? '/' : '.';\n  }\n  if (url) {\n    url.path = path;\n    return urlGenerate(url);\n  }\n  return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n *   first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n *   is updated with the result and aRoot is returned. Otherwise the result\n *   is returned.\n *   - If aPath is absolute, the result is aPath.\n *   - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n  if (aPath === \"\") {\n    aPath = \".\";\n  }\n  var aPathUrl = urlParse(aPath);\n  var aRootUrl = urlParse(aRoot);\n  if (aRootUrl) {\n    aRoot = aRootUrl.path || '/';\n  }\n\n  // `join(foo, '//www.example.org')`\n  if (aPathUrl && !aPathUrl.scheme) {\n    if (aRootUrl) {\n      aPathUrl.scheme = aRootUrl.scheme;\n    }\n    return urlGenerate(aPathUrl);\n  }\n  if (aPathUrl || aPath.match(dataUrlRegexp)) {\n    return aPath;\n  }\n\n  // `join('http://', 'www.example.com')`\n  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n    aRootUrl.host = aPath;\n    return urlGenerate(aRootUrl);\n  }\n  var joined = aPath.charAt(0) === '/' ? aPath : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n  if (aRootUrl) {\n    aRootUrl.path = joined;\n    return urlGenerate(aRootUrl);\n  }\n  return joined;\n}\nexports.join = join;\nexports.isAbsolute = function (aPath) {\n  return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n  aRoot = aRoot.replace(/\\/$/, '');\n\n  // It is possible for the path to be above the root. In this case, simply\n  // checking whether the root is a prefix of the path won't work. Instead, we\n  // need to remove components from the root one by one, until either we find\n  // a prefix that fits, or we run out of components to remove.\n  var level = 0;\n  while (aPath.indexOf(aRoot + '/') !== 0) {\n    var index = aRoot.lastIndexOf(\"/\");\n    if (index < 0) {\n      return aPath;\n    }\n\n    // If the only part of the root that is left is the scheme (i.e. http://,\n    // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n    // have exhausted all components, so the path is not relative to the root.\n    aRoot = aRoot.slice(0, index);\n    if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n      return aPath;\n    }\n    ++level;\n  }\n\n  // Make sure we add a \"../\" for each component we removed from the root.\n  return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\nvar supportsNullProto = function () {\n  var obj = Object.create(null);\n  return !('__proto__' in obj);\n}();\nfunction identity(s) {\n  return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return '$' + aStr;\n  }\n  return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\nfunction fromSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return aStr.slice(1);\n  }\n  return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\nfunction isProtoString(s) {\n  if (!s) {\n    return false;\n  }\n  var length = s.length;\n  if (length < 9 /* \"__proto__\".length */) {\n    return false;\n  }\n  if (s.charCodeAt(length - 1) !== 95 /* '_' */ || s.charCodeAt(length - 2) !== 95 /* '_' */ || s.charCodeAt(length - 3) !== 111 /* 'o' */ || s.charCodeAt(length - 4) !== 116 /* 't' */ || s.charCodeAt(length - 5) !== 111 /* 'o' */ || s.charCodeAt(length - 6) !== 114 /* 'r' */ || s.charCodeAt(length - 7) !== 112 /* 'p' */ || s.charCodeAt(length - 8) !== 95 /* '_' */ || s.charCodeAt(length - 9) !== 95 /* '_' */) {\n    return false;\n  }\n  for (var i = length - 10; i >= 0; i--) {\n    if (s.charCodeAt(i) !== 36 /* '$' */) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp = mappingA.source - mappingB.source;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  return mappingA.name - mappingB.name;\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n  cmp = mappingA.source - mappingB.source;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  return mappingA.name - mappingB.name;\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\nfunction strcmp(aStr1, aStr2) {\n  if (aStr1 === aStr2) {\n    return 0;\n  }\n  if (aStr1 > aStr2) {\n    return 1;\n  }\n  return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;","/**\n * Copyright 2014-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n */\n\n'use strict';\n\n/**\n * Similar to invariant but only logs a warning if the condition is not met.\n * This can be used to log issues in development environments in critical\n * paths. Removing the logging code for production environments will keep the\n * same logic and follow the same code paths.\n */\nvar warning = function () {};\nif (process.env.NODE_ENV !== 'production') {\n  warning = function (condition, format, args) {\n    var len = arguments.length;\n    args = new Array(len > 2 ? len - 2 : 0);\n    for (var key = 2; key < len; key++) {\n      args[key - 2] = arguments[key];\n    }\n    if (format === undefined) {\n      throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');\n    }\n    if (format.length < 10 || /^[s\\W]*$/.test(format)) {\n      throw new Error('The warning format should be able to uniquely identify this ' + 'warning. Please, use a more descriptive format than: ' + format);\n    }\n    if (!condition) {\n      var argIndex = 0;\n      var message = 'Warning: ' + format.replace(/%s/g, function () {\n        return args[argIndex++];\n      });\n      if (typeof console !== 'undefined') {\n        console.error(message);\n      }\n      try {\n        // This error was thrown as a convenience so that you can use this stack\n        // to find the callsite that caused this warning to fire.\n        throw new Error(message);\n      } catch (x) {}\n    }\n  };\n}\nmodule.exports = warning;","(function (root, factory) {\n  'use strict';\n\n  // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n  /* istanbul ignore next */\n  if (typeof define === 'function' && define.amd) {\n    define('stackframe', [], factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory();\n  } else {\n    root.StackFrame = factory();\n  }\n})(this, function () {\n  'use strict';\n\n  function _isNumber(n) {\n    return !isNaN(parseFloat(n)) && isFinite(n);\n  }\n  function _capitalize(str) {\n    return str.charAt(0).toUpperCase() + str.substring(1);\n  }\n  function _getter(p) {\n    return function () {\n      return this[p];\n    };\n  }\n  var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel'];\n  var numericProps = ['columnNumber', 'lineNumber'];\n  var stringProps = ['fileName', 'functionName', 'source'];\n  var arrayProps = ['args'];\n  var objectProps = ['evalOrigin'];\n  var props = booleanProps.concat(numericProps, stringProps, arrayProps, objectProps);\n  function StackFrame(obj) {\n    if (!obj) return;\n    for (var i = 0; i < props.length; i++) {\n      if (obj[props[i]] !== undefined) {\n        this['set' + _capitalize(props[i])](obj[props[i]]);\n      }\n    }\n  }\n  StackFrame.prototype = {\n    getArgs: function () {\n      return this.args;\n    },\n    setArgs: function (v) {\n      if (Object.prototype.toString.call(v) !== '[object Array]') {\n        throw new TypeError('Args must be an Array');\n      }\n      this.args = v;\n    },\n    getEvalOrigin: function () {\n      return this.evalOrigin;\n    },\n    setEvalOrigin: function (v) {\n      if (v instanceof StackFrame) {\n        this.evalOrigin = v;\n      } else if (v instanceof Object) {\n        this.evalOrigin = new StackFrame(v);\n      } else {\n        throw new TypeError('Eval Origin must be an Object or StackFrame');\n      }\n    },\n    toString: function () {\n      var fileName = this.getFileName() || '';\n      var lineNumber = this.getLineNumber() || '';\n      var columnNumber = this.getColumnNumber() || '';\n      var functionName = this.getFunctionName() || '';\n      if (this.getIsEval()) {\n        if (fileName) {\n          return '[eval] (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n        }\n        return '[eval]:' + lineNumber + ':' + columnNumber;\n      }\n      if (functionName) {\n        return functionName + ' (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n      }\n      return fileName + ':' + lineNumber + ':' + columnNumber;\n    }\n  };\n  StackFrame.fromString = function StackFrame$$fromString(str) {\n    var argsStartIndex = str.indexOf('(');\n    var argsEndIndex = str.lastIndexOf(')');\n    var functionName = str.substring(0, argsStartIndex);\n    var args = str.substring(argsStartIndex + 1, argsEndIndex).split(',');\n    var locationString = str.substring(argsEndIndex + 1);\n    if (locationString.indexOf('@') === 0) {\n      var parts = /@(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(locationString, '');\n      var fileName = parts[1];\n      var lineNumber = parts[2];\n      var columnNumber = parts[3];\n    }\n    return new StackFrame({\n      functionName: functionName,\n      args: args || undefined,\n      fileName: fileName,\n      lineNumber: lineNumber || undefined,\n      columnNumber: columnNumber || undefined\n    });\n  };\n  for (var i = 0; i < booleanProps.length; i++) {\n    StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]);\n    StackFrame.prototype['set' + _capitalize(booleanProps[i])] = function (p) {\n      return function (v) {\n        this[p] = Boolean(v);\n      };\n    }(booleanProps[i]);\n  }\n  for (var j = 0; j < numericProps.length; j++) {\n    StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]);\n    StackFrame.prototype['set' + _capitalize(numericProps[j])] = function (p) {\n      return function (v) {\n        if (!_isNumber(v)) {\n          throw new TypeError(p + ' must be a Number');\n        }\n        this[p] = Number(v);\n      };\n    }(numericProps[j]);\n  }\n  for (var k = 0; k < stringProps.length; k++) {\n    StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]);\n    StackFrame.prototype['set' + _capitalize(stringProps[k])] = function (p) {\n      return function (v) {\n        this[p] = String(v);\n      };\n    }(stringProps[k]);\n  }\n  return StackFrame;\n});","(function (root, factory) {\n  'use strict';\n\n  // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n  /* istanbul ignore next */\n  if (typeof define === 'function' && define.amd) {\n    define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n  } else {\n    root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n  }\n})(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n  var _options = {\n    filter: function (stackframe) {\n      // Filter out stackframes for this library by default\n      return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 && (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 && (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 && (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n    },\n    sourceCache: {}\n  };\n  var _generateError = function StackTrace$$GenerateError() {\n    try {\n      // Error must be thrown to get stack in IE\n      throw new Error();\n    } catch (err) {\n      return err;\n    }\n  };\n\n  /**\n   * Merge 2 given Objects. If a conflict occurs the second object wins.\n   * Does not do deep merges.\n   *\n   * @param {Object} first base object\n   * @param {Object} second overrides\n   * @returns {Object} merged first and second\n   * @private\n   */\n  function _merge(first, second) {\n    var target = {};\n    [first, second].forEach(function (obj) {\n      for (var prop in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n          target[prop] = obj[prop];\n        }\n      }\n      return target;\n    });\n    return target;\n  }\n  function _isShapedLikeParsableError(err) {\n    return err.stack || err['opera#sourceloc'];\n  }\n  function _filtered(stackframes, filter) {\n    if (typeof filter === 'function') {\n      return stackframes.filter(filter);\n    }\n    return stackframes;\n  }\n  return {\n    /**\n     * Get a backtrace from invocation point.\n     *\n     * @param {Object} opts\n     * @returns {Array} of StackFrame\n     */\n    get: function StackTrace$$get(opts) {\n      var err = _generateError();\n      return _isShapedLikeParsableError(err) ? this.fromError(err, opts) : this.generateArtificially(opts);\n    },\n    /**\n     * Get a backtrace from invocation point.\n     * IMPORTANT: Does not handle source maps or guess function names!\n     *\n     * @param {Object} opts\n     * @returns {Array} of StackFrame\n     */\n    getSync: function StackTrace$$getSync(opts) {\n      opts = _merge(_options, opts);\n      var err = _generateError();\n      var stack = _isShapedLikeParsableError(err) ? ErrorStackParser.parse(err) : StackGenerator.backtrace(opts);\n      return _filtered(stack, opts.filter);\n    },\n    /**\n     * Given an error object, parse it.\n     *\n     * @param {Error} error object\n     * @param {Object} opts\n     * @returns {Promise} for Array[StackFrame}\n     */\n    fromError: function StackTrace$$fromError(error, opts) {\n      opts = _merge(_options, opts);\n      var gps = new StackTraceGPS(opts);\n      return new Promise(function (resolve) {\n        var stackframes = _filtered(ErrorStackParser.parse(error), opts.filter);\n        resolve(Promise.all(stackframes.map(function (sf) {\n          return new Promise(function (resolve) {\n            function resolveOriginal() {\n              resolve(sf);\n            }\n            gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n          });\n        })));\n      }.bind(this));\n    },\n    /**\n     * Use StackGenerator to generate a backtrace.\n     *\n     * @param {Object} opts\n     * @returns {Promise} of Array[StackFrame]\n     */\n    generateArtificially: function StackTrace$$generateArtificially(opts) {\n      opts = _merge(_options, opts);\n      var stackFrames = StackGenerator.backtrace(opts);\n      if (typeof opts.filter === 'function') {\n        stackFrames = stackFrames.filter(opts.filter);\n      }\n      return Promise.resolve(stackFrames);\n    },\n    /**\n     * Given a function, wrap it such that invocations trigger a callback that\n     * is called with a stack trace.\n     *\n     * @param {Function} fn to be instrumented\n     * @param {Function} callback function to call with a stack trace on invocation\n     * @param {Function} errback optional function to call with error if unable to get stack trace.\n     * @param {Object} thisArg optional context object (e.g. window)\n     */\n    instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n      if (typeof fn !== 'function') {\n        throw new Error('Cannot instrument non-function object');\n      } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n        // Already instrumented, return given Function\n        return fn;\n      }\n      var instrumented = function StackTrace$$instrumented() {\n        try {\n          this.get().then(callback, errback)['catch'](errback);\n          return fn.apply(thisArg || this, arguments);\n        } catch (e) {\n          if (_isShapedLikeParsableError(e)) {\n            this.fromError(e).then(callback, errback)['catch'](errback);\n          }\n          throw e;\n        }\n      }.bind(this);\n      instrumented.__stacktraceOriginalFn = fn;\n      return instrumented;\n    },\n    /**\n     * Given a function that has been instrumented,\n     * revert the function to it's original (non-instrumented) state.\n     *\n     * @param {Function} fn to de-instrument\n     */\n    deinstrument: function StackTrace$$deinstrument(fn) {\n      if (typeof fn !== 'function') {\n        throw new Error('Cannot de-instrument non-function object');\n      } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n        return fn.__stacktraceOriginalFn;\n      } else {\n        // Function not instrumented, return original\n        return fn;\n      }\n    },\n    /**\n     * Given an error message and Array of StackFrames, serialize and POST to given URL.\n     *\n     * @param {Array} stackframes\n     * @param {String} url\n     * @param {String} errorMsg\n     * @param {Object} requestOptions\n     */\n    report: function StackTrace$$report(stackframes, url, errorMsg, requestOptions) {\n      return new Promise(function (resolve, reject) {\n        var req = new XMLHttpRequest();\n        req.onerror = reject;\n        req.onreadystatechange = function onreadystatechange() {\n          if (req.readyState === 4) {\n            if (req.status >= 200 && req.status < 400) {\n              resolve(req.responseText);\n            } else {\n              reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n            }\n          }\n        };\n        req.open('post', url);\n\n        // Set request headers\n        req.setRequestHeader('Content-Type', 'application/json');\n        if (requestOptions && typeof requestOptions.headers === 'object') {\n          var headers = requestOptions.headers;\n          for (var header in headers) {\n            if (Object.prototype.hasOwnProperty.call(headers, header)) {\n              req.setRequestHeader(header, headers[header]);\n            }\n          }\n        }\n        var reportPayload = {\n          stack: stackframes\n        };\n        if (errorMsg !== undefined && errorMsg !== null) {\n          reportPayload.message = errorMsg;\n        }\n        req.send(JSON.stringify(reportPayload));\n      });\n    }\n  };\n});","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n *   - file: The filename of the generated source.\n *   - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n  if (!aArgs) {\n    aArgs = {};\n  }\n  this._file = util.getArg(aArgs, 'file', null);\n  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n  this._mappings = new MappingList();\n  this._sourcesContents = null;\n}\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap = function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n  var sourceRoot = aSourceMapConsumer.sourceRoot;\n  var generator = new SourceMapGenerator({\n    file: aSourceMapConsumer.file,\n    sourceRoot: sourceRoot\n  });\n  aSourceMapConsumer.eachMapping(function (mapping) {\n    var newMapping = {\n      generated: {\n        line: mapping.generatedLine,\n        column: mapping.generatedColumn\n      }\n    };\n    if (mapping.source != null) {\n      newMapping.source = mapping.source;\n      if (sourceRoot != null) {\n        newMapping.source = util.relative(sourceRoot, newMapping.source);\n      }\n      newMapping.original = {\n        line: mapping.originalLine,\n        column: mapping.originalColumn\n      };\n      if (mapping.name != null) {\n        newMapping.name = mapping.name;\n      }\n    }\n    generator.addMapping(newMapping);\n  });\n  aSourceMapConsumer.sources.forEach(function (sourceFile) {\n    var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n    if (content != null) {\n      generator.setSourceContent(sourceFile, content);\n    }\n  });\n  return generator;\n};\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n *   - generated: An object with the generated line and column positions.\n *   - original: An object with the original line and column positions.\n *   - source: The original source file (relative to the sourceRoot).\n *   - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping = function SourceMapGenerator_addMapping(aArgs) {\n  var generated = util.getArg(aArgs, 'generated');\n  var original = util.getArg(aArgs, 'original', null);\n  var source = util.getArg(aArgs, 'source', null);\n  var name = util.getArg(aArgs, 'name', null);\n  if (!this._skipValidation) {\n    this._validateMapping(generated, original, source, name);\n  }\n  if (source != null) {\n    source = String(source);\n    if (!this._sources.has(source)) {\n      this._sources.add(source);\n    }\n  }\n  if (name != null) {\n    name = String(name);\n    if (!this._names.has(name)) {\n      this._names.add(name);\n    }\n  }\n  this._mappings.add({\n    generatedLine: generated.line,\n    generatedColumn: generated.column,\n    originalLine: original != null && original.line,\n    originalColumn: original != null && original.column,\n    source: source,\n    name: name\n  });\n};\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent = function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n  var source = aSourceFile;\n  if (this._sourceRoot != null) {\n    source = util.relative(this._sourceRoot, source);\n  }\n  if (aSourceContent != null) {\n    // Add the source content to the _sourcesContents map.\n    // Create a new _sourcesContents map if the property is null.\n    if (!this._sourcesContents) {\n      this._sourcesContents = Object.create(null);\n    }\n    this._sourcesContents[util.toSetString(source)] = aSourceContent;\n  } else if (this._sourcesContents) {\n    // Remove the source file from the _sourcesContents map.\n    // If the _sourcesContents map is empty, set the property to null.\n    delete this._sourcesContents[util.toSetString(source)];\n    if (Object.keys(this._sourcesContents).length === 0) {\n      this._sourcesContents = null;\n    }\n  }\n};\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n *        If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n *        to be applied. If relative, it is relative to the SourceMapConsumer.\n *        This parameter is needed when the two source maps aren't in the same\n *        directory, and the source map to be applied contains relative source\n *        paths. If so, those relative source paths need to be rewritten\n *        relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap = function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n  var sourceFile = aSourceFile;\n  // If aSourceFile is omitted, we will use the file property of the SourceMap\n  if (aSourceFile == null) {\n    if (aSourceMapConsumer.file == null) {\n      throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + 'or the source map\\'s \"file\" property. Both were omitted.');\n    }\n    sourceFile = aSourceMapConsumer.file;\n  }\n  var sourceRoot = this._sourceRoot;\n  // Make \"sourceFile\" relative if an absolute Url is passed.\n  if (sourceRoot != null) {\n    sourceFile = util.relative(sourceRoot, sourceFile);\n  }\n  // Applying the SourceMap can add and remove items from the sources and\n  // the names array.\n  var newSources = new ArraySet();\n  var newNames = new ArraySet();\n\n  // Find mappings for the \"sourceFile\"\n  this._mappings.unsortedForEach(function (mapping) {\n    if (mapping.source === sourceFile && mapping.originalLine != null) {\n      // Check if it can be mapped by the source map, then update the mapping.\n      var original = aSourceMapConsumer.originalPositionFor({\n        line: mapping.originalLine,\n        column: mapping.originalColumn\n      });\n      if (original.source != null) {\n        // Copy mapping\n        mapping.source = original.source;\n        if (aSourceMapPath != null) {\n          mapping.source = util.join(aSourceMapPath, mapping.source);\n        }\n        if (sourceRoot != null) {\n          mapping.source = util.relative(sourceRoot, mapping.source);\n        }\n        mapping.originalLine = original.line;\n        mapping.originalColumn = original.column;\n        if (original.name != null) {\n          mapping.name = original.name;\n        }\n      }\n    }\n    var source = mapping.source;\n    if (source != null && !newSources.has(source)) {\n      newSources.add(source);\n    }\n    var name = mapping.name;\n    if (name != null && !newNames.has(name)) {\n      newNames.add(name);\n    }\n  }, this);\n  this._sources = newSources;\n  this._names = newNames;\n\n  // Copy sourcesContents of applied map.\n  aSourceMapConsumer.sources.forEach(function (sourceFile) {\n    var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n    if (content != null) {\n      if (aSourceMapPath != null) {\n        sourceFile = util.join(aSourceMapPath, sourceFile);\n      }\n      if (sourceRoot != null) {\n        sourceFile = util.relative(sourceRoot, sourceFile);\n      }\n      this.setSourceContent(sourceFile, content);\n    }\n  }, this);\n};\n\n/**\n * A mapping can have one of the three levels of data:\n *\n *   1. Just the generated position.\n *   2. The Generated position, original position, and original source.\n *   3. Generated and original position, original source, as well as a name\n *      token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping = function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, aName) {\n  if (aGenerated && 'line' in aGenerated && 'column' in aGenerated && aGenerated.line > 0 && aGenerated.column >= 0 && !aOriginal && !aSource && !aName) {\n    // Case 1.\n    return;\n  } else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated && aOriginal && 'line' in aOriginal && 'column' in aOriginal && aGenerated.line > 0 && aGenerated.column >= 0 && aOriginal.line > 0 && aOriginal.column >= 0 && aSource) {\n    // Cases 2 and 3.\n    return;\n  } else {\n    throw new Error('Invalid mapping: ' + JSON.stringify({\n      generated: aGenerated,\n      source: aSource,\n      original: aOriginal,\n      name: aName\n    }));\n  }\n};\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings = function SourceMapGenerator_serializeMappings() {\n  var previousGeneratedColumn = 0;\n  var previousGeneratedLine = 1;\n  var previousOriginalColumn = 0;\n  var previousOriginalLine = 0;\n  var previousName = 0;\n  var previousSource = 0;\n  var result = '';\n  var next;\n  var mapping;\n  var nameIdx;\n  var sourceIdx;\n  var mappings = this._mappings.toArray();\n  for (var i = 0, len = mappings.length; i < len; i++) {\n    mapping = mappings[i];\n    next = '';\n    if (mapping.generatedLine !== previousGeneratedLine) {\n      previousGeneratedColumn = 0;\n      while (mapping.generatedLine !== previousGeneratedLine) {\n        next += ';';\n        previousGeneratedLine++;\n      }\n    } else {\n      if (i > 0) {\n        if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n          continue;\n        }\n        next += ',';\n      }\n    }\n    next += base64VLQ.encode(mapping.generatedColumn - previousGeneratedColumn);\n    previousGeneratedColumn = mapping.generatedColumn;\n    if (mapping.source != null) {\n      sourceIdx = this._sources.indexOf(mapping.source);\n      next += base64VLQ.encode(sourceIdx - previousSource);\n      previousSource = sourceIdx;\n\n      // lines are stored 0-based in SourceMap spec version 3\n      next += base64VLQ.encode(mapping.originalLine - 1 - previousOriginalLine);\n      previousOriginalLine = mapping.originalLine - 1;\n      next += base64VLQ.encode(mapping.originalColumn - previousOriginalColumn);\n      previousOriginalColumn = mapping.originalColumn;\n      if (mapping.name != null) {\n        nameIdx = this._names.indexOf(mapping.name);\n        next += base64VLQ.encode(nameIdx - previousName);\n        previousName = nameIdx;\n      }\n    }\n    result += next;\n  }\n  return result;\n};\nSourceMapGenerator.prototype._generateSourcesContent = function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n  return aSources.map(function (source) {\n    if (!this._sourcesContents) {\n      return null;\n    }\n    if (aSourceRoot != null) {\n      source = util.relative(aSourceRoot, source);\n    }\n    var key = util.toSetString(source);\n    return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) ? this._sourcesContents[key] : null;\n  }, this);\n};\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON = function SourceMapGenerator_toJSON() {\n  var map = {\n    version: this._version,\n    sources: this._sources.toArray(),\n    names: this._names.toArray(),\n    mappings: this._serializeMappings()\n  };\n  if (this._file != null) {\n    map.file = this._file;\n  }\n  if (this._sourceRoot != null) {\n    map.sourceRoot = this._sourceRoot;\n  }\n  if (this._sourcesContents) {\n    map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n  }\n  return map;\n};\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString = function SourceMapGenerator_toString() {\n  return JSON.stringify(this.toJSON());\n};\nexports.SourceMapGenerator = SourceMapGenerator;","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above\n *    copyright notice, this list of conditions and the following\n *    disclaimer in the documentation and/or other materials provided\n *    with the distribution.\n *  * Neither the name of Google Inc. nor the names of its\n *    contributors may be used to endorse or promote products derived\n *    from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n//   Continuation\n//   |    Sign\n//   |    |\n//   V    V\n//   101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n  return aValue < 0 ? (-aValue << 1) + 1 : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n  var isNegative = (aValue & 1) === 1;\n  var shifted = aValue >> 1;\n  return isNegative ? -shifted : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n  var encoded = \"\";\n  var digit;\n  var vlq = toVLQSigned(aValue);\n  do {\n    digit = vlq & VLQ_BASE_MASK;\n    vlq >>>= VLQ_BASE_SHIFT;\n    if (vlq > 0) {\n      // There are still more digits in this value, so we must make sure the\n      // continuation bit is marked.\n      digit |= VLQ_CONTINUATION_BIT;\n    }\n    encoded += base64.encode(digit);\n  } while (vlq > 0);\n  return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n  var strLen = aStr.length;\n  var result = 0;\n  var shift = 0;\n  var continuation, digit;\n  do {\n    if (aIndex >= strLen) {\n      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n    }\n    digit = base64.decode(aStr.charCodeAt(aIndex++));\n    if (digit === -1) {\n      throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n    }\n    continuation = !!(digit & VLQ_CONTINUATION_BIT);\n    digit &= VLQ_BASE_MASK;\n    result = result + (digit << shift);\n    shift += VLQ_BASE_SHIFT;\n  } while (continuation);\n  aOutParam.value = fromVLQSigned(result);\n  aOutParam.rest = aIndex;\n};","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n  this._array = [];\n  this._set = Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n  var set = new ArraySet();\n  for (var i = 0, len = aArray.length; i < len; i++) {\n    set.add(aArray[i], aAllowDuplicates);\n  }\n  return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n  return Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n  var sStr = util.toSetString(aStr);\n  var isDuplicate = has.call(this._set, sStr);\n  var idx = this._array.length;\n  if (!isDuplicate || aAllowDuplicates) {\n    this._array.push(aStr);\n  }\n  if (!isDuplicate) {\n    this._set[sStr] = idx;\n  }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n  var sStr = util.toSetString(aStr);\n  return has.call(this._set, sStr);\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n  var sStr = util.toSetString(aStr);\n  if (has.call(this._set, sStr)) {\n    return this._set[sStr];\n  }\n  throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n  if (aIdx >= 0 && aIdx < this._array.length) {\n    return this._array[aIdx];\n  }\n  throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n  return this._array.slice();\n};\nexports.ArraySet = ArraySet;","(function (root, factory) {\n  'use strict';\n\n  // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n  /* istanbul ignore next */\n  if (typeof define === 'function' && define.amd) {\n    define('error-stack-parser', ['stackframe'], factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory(require('stackframe'));\n  } else {\n    root.ErrorStackParser = factory(root.StackFrame);\n  }\n})(this, function ErrorStackParser(StackFrame) {\n  'use strict';\n\n  var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+:\\d+/;\n  var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+:\\d+|\\(native\\))/m;\n  var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code])?$/;\n  return {\n    /**\n     * Given an Error object, extract the most information from it.\n     *\n     * @param {Error} error object\n     * @return {Array} of StackFrames\n     */\n    parse: function ErrorStackParser$$parse(error) {\n      if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n        return this.parseOpera(error);\n      } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n        return this.parseV8OrIE(error);\n      } else if (error.stack) {\n        return this.parseFFOrSafari(error);\n      } else {\n        throw new Error('Cannot parse given Error object');\n      }\n    },\n    // Separate line and column numbers from a string of the form: (URI:Line:Column)\n    extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n      // Fail-fast but return locations like \"(native)\"\n      if (urlLike.indexOf(':') === -1) {\n        return [urlLike];\n      }\n      var regExp = /(.+?)(?::(\\d+))?(?::(\\d+))?$/;\n      var parts = regExp.exec(urlLike.replace(/[()]/g, ''));\n      return [parts[1], parts[2] || undefined, parts[3] || undefined];\n    },\n    parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n      var filtered = error.stack.split('\\n').filter(function (line) {\n        return !!line.match(CHROME_IE_STACK_REGEXP);\n      }, this);\n      return filtered.map(function (line) {\n        if (line.indexOf('(eval ') > -1) {\n          // Throw away eval information until we implement stacktrace.js/stackframe#8\n          line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^()]*)|(\\),.*$)/g, '');\n        }\n        var sanitizedLine = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(');\n\n        // capture and preseve the parenthesized location \"(/foo/my bar.js:12:87)\" in\n        // case it has spaces in it, as the string is split on \\s+ later on\n        var location = sanitizedLine.match(/ (\\((.+):(\\d+):(\\d+)\\)$)/);\n\n        // remove the parenthesized location from the line, if it was matched\n        sanitizedLine = location ? sanitizedLine.replace(location[0], '') : sanitizedLine;\n        var tokens = sanitizedLine.split(/\\s+/).slice(1);\n        // if a location was matched, pass it to extractLocation() otherwise pop the last token\n        var locationParts = this.extractLocation(location ? location[1] : tokens.pop());\n        var functionName = tokens.join(' ') || undefined;\n        var fileName = ['eval', '<anonymous>'].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n        return new StackFrame({\n          functionName: functionName,\n          fileName: fileName,\n          lineNumber: locationParts[1],\n          columnNumber: locationParts[2],\n          source: line\n        });\n      }, this);\n    },\n    parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n      var filtered = error.stack.split('\\n').filter(function (line) {\n        return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n      }, this);\n      return filtered.map(function (line) {\n        // Throw away eval information until we implement stacktrace.js/stackframe#8\n        if (line.indexOf(' > eval') > -1) {\n          line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, ':$1');\n        }\n        if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n          // Safari eval frames only have function names and nothing else\n          return new StackFrame({\n            functionName: line\n          });\n        } else {\n          var functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n          var matches = line.match(functionNameRegex);\n          var functionName = matches && matches[1] ? matches[1] : undefined;\n          var locationParts = this.extractLocation(line.replace(functionNameRegex, ''));\n          return new StackFrame({\n            functionName: functionName,\n            fileName: locationParts[0],\n            lineNumber: locationParts[1],\n            columnNumber: locationParts[2],\n            source: line\n          });\n        }\n      }, this);\n    },\n    parseOpera: function ErrorStackParser$$parseOpera(e) {\n      if (!e.stacktrace || e.message.indexOf('\\n') > -1 && e.message.split('\\n').length > e.stacktrace.split('\\n').length) {\n        return this.parseOpera9(e);\n      } else if (!e.stack) {\n        return this.parseOpera10(e);\n      } else {\n        return this.parseOpera11(e);\n      }\n    },\n    parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n      var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n      var lines = e.message.split('\\n');\n      var result = [];\n      for (var i = 2, len = lines.length; i < len; i += 2) {\n        var match = lineRE.exec(lines[i]);\n        if (match) {\n          result.push(new StackFrame({\n            fileName: match[2],\n            lineNumber: match[1],\n            source: lines[i]\n          }));\n        }\n      }\n      return result;\n    },\n    parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n      var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n      var lines = e.stacktrace.split('\\n');\n      var result = [];\n      for (var i = 0, len = lines.length; i < len; i += 2) {\n        var match = lineRE.exec(lines[i]);\n        if (match) {\n          result.push(new StackFrame({\n            functionName: match[3] || undefined,\n            fileName: match[2],\n            lineNumber: match[1],\n            source: lines[i]\n          }));\n        }\n      }\n      return result;\n    },\n    // Opera 10.65+ Error.stack very similar to FF/Safari\n    parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n      var filtered = error.stack.split('\\n').filter(function (line) {\n        return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n      }, this);\n      return filtered.map(function (line) {\n        var tokens = line.split('@');\n        var locationParts = this.extractLocation(tokens.pop());\n        var functionCall = tokens.shift() || '';\n        var functionName = functionCall.replace(/<anonymous function(: (\\w+))?>/, '$2').replace(/\\([^)]*\\)/g, '') || undefined;\n        var argsRaw;\n        if (functionCall.match(/\\(([^)]*)\\)/)) {\n          argsRaw = functionCall.replace(/^[^(]+\\(([^)]*)\\)$/, '$1');\n        }\n        var args = argsRaw === undefined || argsRaw === '[arguments not available]' ? undefined : argsRaw.split(',');\n        return new StackFrame({\n          functionName: functionName,\n          args: args,\n          fileName: locationParts[0],\n          lineNumber: locationParts[1],\n          columnNumber: locationParts[2],\n          source: line\n        });\n      }, this);\n    }\n  };\n});","(function (root, factory) {\n  'use strict';\n\n  // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n  /* istanbul ignore next */\n  if (typeof define === 'function' && define.amd) {\n    define('stack-generator', ['stackframe'], factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory(require('stackframe'));\n  } else {\n    root.StackGenerator = factory(root.StackFrame);\n  }\n})(this, function (StackFrame) {\n  return {\n    backtrace: function StackGenerator$$backtrace(opts) {\n      var stack = [];\n      var maxStackSize = 10;\n      if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n        maxStackSize = opts.maxStackSize;\n      }\n      var curr = arguments.callee;\n      while (curr && stack.length < maxStackSize && curr['arguments']) {\n        // Allow V8 optimizations\n        var args = new Array(curr['arguments'].length);\n        for (var i = 0; i < args.length; ++i) {\n          args[i] = curr['arguments'][i];\n        }\n        if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n          stack.push(new StackFrame({\n            functionName: RegExp.$1 || undefined,\n            args: args\n          }));\n        } else {\n          stack.push(new StackFrame({\n            args: args\n          }));\n        }\n        try {\n          curr = curr.caller;\n        } catch (e) {\n          break;\n        }\n      }\n      return stack;\n    }\n  };\n});","(function (root, factory) {\n  'use strict';\n\n  // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n  /* istanbul ignore next */\n  if (typeof define === 'function' && define.amd) {\n    define('stacktrace-gps', ['source-map', 'stackframe'], factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory(require('source-map/lib/source-map-consumer'), require('stackframe'));\n  } else {\n    root.StackTraceGPS = factory(root.SourceMap || root.sourceMap, root.StackFrame);\n  }\n})(this, function (SourceMap, StackFrame) {\n  'use strict';\n\n  /**\n   * Make a X-Domain request to url and callback.\n   *\n   * @param {String} url\n   * @returns {Promise} with response text if fulfilled\n   */\n  function _xdr(url) {\n    return new Promise(function (resolve, reject) {\n      var req = new XMLHttpRequest();\n      req.open('get', url);\n      req.onerror = reject;\n      req.onreadystatechange = function onreadystatechange() {\n        if (req.readyState === 4) {\n          if (req.status >= 200 && req.status < 300 || url.substr(0, 7) === 'file://' && req.responseText) {\n            resolve(req.responseText);\n          } else {\n            reject(new Error('HTTP status: ' + req.status + ' retrieving ' + url));\n          }\n        }\n      };\n      req.send();\n    });\n  }\n\n  /**\n   * Convert a Base64-encoded string into its original representation.\n   * Used for inline sourcemaps.\n   *\n   * @param {String} b64str Base-64 encoded string\n   * @returns {String} original representation of the base64-encoded string.\n   */\n  function _atob(b64str) {\n    if (typeof window !== 'undefined' && window.atob) {\n      return window.atob(b64str);\n    } else {\n      throw new Error('You must supply a polyfill for window.atob in this environment');\n    }\n  }\n  function _parseJson(string) {\n    if (typeof JSON !== 'undefined' && JSON.parse) {\n      return JSON.parse(string);\n    } else {\n      throw new Error('You must supply a polyfill for JSON.parse in this environment');\n    }\n  }\n  function _findFunctionName(source, lineNumber /*, columnNumber*/) {\n    var syntaxes = [\n    // {name} = function ({args}) TODO args capture\n    /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,\n    // function {name}({args}) m[1]=name m[2]=args\n    /function\\s+([^('\"`]*?)\\s*\\(([^)]*)\\)/,\n    // {name} = eval()\n    /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,\n    // fn_name() {\n    /\\b(?!(?:if|for|switch|while|with|catch)\\b)(?:(?:static)\\s+)?(\\S+)\\s*\\(.*?\\)\\s*\\{/,\n    // {name} = () => {\n    /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*\\(.*?\\)\\s*=>/];\n    var lines = source.split('\\n');\n\n    // Walk backwards in the source lines until we find the line which matches one of the patterns above\n    var code = '';\n    var maxLines = Math.min(lineNumber, 20);\n    for (var i = 0; i < maxLines; ++i) {\n      // lineNo is 1-based, source[] is 0-based\n      var line = lines[lineNumber - i - 1];\n      var commentPos = line.indexOf('//');\n      if (commentPos >= 0) {\n        line = line.substr(0, commentPos);\n      }\n      if (line) {\n        code = line + code;\n        var len = syntaxes.length;\n        for (var index = 0; index < len; index++) {\n          var m = syntaxes[index].exec(code);\n          if (m && m[1]) {\n            return m[1];\n          }\n        }\n      }\n    }\n    return undefined;\n  }\n  function _ensureSupportedEnvironment() {\n    if (typeof Object.defineProperty !== 'function' || typeof Object.create !== 'function') {\n      throw new Error('Unable to consume source maps in older browsers');\n    }\n  }\n  function _ensureStackFrameIsLegit(stackframe) {\n    if (typeof stackframe !== 'object') {\n      throw new TypeError('Given StackFrame is not an object');\n    } else if (typeof stackframe.fileName !== 'string') {\n      throw new TypeError('Given file name is not a String');\n    } else if (typeof stackframe.lineNumber !== 'number' || stackframe.lineNumber % 1 !== 0 || stackframe.lineNumber < 1) {\n      throw new TypeError('Given line number must be a positive integer');\n    } else if (typeof stackframe.columnNumber !== 'number' || stackframe.columnNumber % 1 !== 0 || stackframe.columnNumber < 0) {\n      throw new TypeError('Given column number must be a non-negative integer');\n    }\n    return true;\n  }\n  function _findSourceMappingURL(source) {\n    var sourceMappingUrlRegExp = /\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/mg;\n    var lastSourceMappingUrl;\n    var matchSourceMappingUrl;\n    // eslint-disable-next-line no-cond-assign\n    while (matchSourceMappingUrl = sourceMappingUrlRegExp.exec(source)) {\n      lastSourceMappingUrl = matchSourceMappingUrl[1];\n    }\n    if (lastSourceMappingUrl) {\n      return lastSourceMappingUrl;\n    } else {\n      throw new Error('sourceMappingURL not found');\n    }\n  }\n  function _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache) {\n    return new Promise(function (resolve, reject) {\n      var loc = sourceMapConsumer.originalPositionFor({\n        line: stackframe.lineNumber,\n        column: stackframe.columnNumber\n      });\n      if (loc.source) {\n        // cache mapped sources\n        var mappedSource = sourceMapConsumer.sourceContentFor(loc.source);\n        if (mappedSource) {\n          sourceCache[loc.source] = mappedSource;\n        }\n        resolve(\n        // given stackframe and source location, update stackframe\n        new StackFrame({\n          functionName: loc.name || stackframe.functionName,\n          args: stackframe.args,\n          fileName: loc.source,\n          lineNumber: loc.line,\n          columnNumber: loc.column\n        }));\n      } else {\n        reject(new Error('Could not get original source for given stackframe and source map'));\n      }\n    });\n  }\n\n  /**\n   * @constructor\n   * @param {Object} opts\n   *      opts.sourceCache = {url: \"Source String\"} => preload source cache\n   *      opts.sourceMapConsumerCache = {/path/file.js.map: SourceMapConsumer}\n   *      opts.offline = True to prevent network requests.\n   *              Best effort without sources or source maps.\n   *      opts.ajax = Promise returning function to make X-Domain requests\n   */\n  return function StackTraceGPS(opts) {\n    if (!(this instanceof StackTraceGPS)) {\n      return new StackTraceGPS(opts);\n    }\n    opts = opts || {};\n    this.sourceCache = opts.sourceCache || {};\n    this.sourceMapConsumerCache = opts.sourceMapConsumerCache || {};\n    this.ajax = opts.ajax || _xdr;\n    this._atob = opts.atob || _atob;\n    this._get = function _get(location) {\n      return new Promise(function (resolve, reject) {\n        var isDataUrl = location.substr(0, 5) === 'data:';\n        if (this.sourceCache[location]) {\n          resolve(this.sourceCache[location]);\n        } else if (opts.offline && !isDataUrl) {\n          reject(new Error('Cannot make network requests in offline mode'));\n        } else {\n          if (isDataUrl) {\n            // data URLs can have parameters.\n            // see http://tools.ietf.org/html/rfc2397\n            var supportedEncodingRegexp = /^data:application\\/json;([\\w=:\"-]+;)*base64,/;\n            var match = location.match(supportedEncodingRegexp);\n            if (match) {\n              var sourceMapStart = match[0].length;\n              var encodedSource = location.substr(sourceMapStart);\n              var source = this._atob(encodedSource);\n              this.sourceCache[location] = source;\n              resolve(source);\n            } else {\n              reject(new Error('The encoding of the inline sourcemap is not supported'));\n            }\n          } else {\n            var xhrPromise = this.ajax(location, {\n              method: 'get'\n            });\n            // Cache the Promise to prevent duplicate in-flight requests\n            this.sourceCache[location] = xhrPromise;\n            xhrPromise.then(resolve, reject);\n          }\n        }\n      }.bind(this));\n    };\n\n    /**\n     * Creating SourceMapConsumers is expensive, so this wraps the creation of a\n     * SourceMapConsumer in a per-instance cache.\n     *\n     * @param {String} sourceMappingURL = URL to fetch source map from\n     * @param {String} defaultSourceRoot = Default source root for source map if undefined\n     * @returns {Promise} that resolves a SourceMapConsumer\n     */\n    this._getSourceMapConsumer = function _getSourceMapConsumer(sourceMappingURL, defaultSourceRoot) {\n      return new Promise(function (resolve) {\n        if (this.sourceMapConsumerCache[sourceMappingURL]) {\n          resolve(this.sourceMapConsumerCache[sourceMappingURL]);\n        } else {\n          var sourceMapConsumerPromise = new Promise(function (resolve, reject) {\n            return this._get(sourceMappingURL).then(function (sourceMapSource) {\n              if (typeof sourceMapSource === 'string') {\n                sourceMapSource = _parseJson(sourceMapSource.replace(/^\\)\\]\\}'/, ''));\n              }\n              if (typeof sourceMapSource.sourceRoot === 'undefined') {\n                sourceMapSource.sourceRoot = defaultSourceRoot;\n              }\n              resolve(new SourceMap.SourceMapConsumer(sourceMapSource));\n            }, reject);\n          }.bind(this));\n          this.sourceMapConsumerCache[sourceMappingURL] = sourceMapConsumerPromise;\n          resolve(sourceMapConsumerPromise);\n        }\n      }.bind(this));\n    };\n\n    /**\n     * Given a StackFrame, enhance function name and use source maps for a\n     * better StackFrame.\n     *\n     * @param {StackFrame} stackframe object\n     * @returns {Promise} that resolves with with source-mapped StackFrame\n     */\n    this.pinpoint = function StackTraceGPS$$pinpoint(stackframe) {\n      return new Promise(function (resolve, reject) {\n        this.getMappedLocation(stackframe).then(function (mappedStackFrame) {\n          function resolveMappedStackFrame() {\n            resolve(mappedStackFrame);\n          }\n          this.findFunctionName(mappedStackFrame).then(resolve, resolveMappedStackFrame)\n          // eslint-disable-next-line no-unexpected-multiline\n          ['catch'](resolveMappedStackFrame);\n        }.bind(this), reject);\n      }.bind(this));\n    };\n\n    /**\n     * Given a StackFrame, guess function name from location information.\n     *\n     * @param {StackFrame} stackframe\n     * @returns {Promise} that resolves with enhanced StackFrame.\n     */\n    this.findFunctionName = function StackTraceGPS$$findFunctionName(stackframe) {\n      return new Promise(function (resolve, reject) {\n        _ensureStackFrameIsLegit(stackframe);\n        this._get(stackframe.fileName).then(function getSourceCallback(source) {\n          var lineNumber = stackframe.lineNumber;\n          var columnNumber = stackframe.columnNumber;\n          var guessedFunctionName = _findFunctionName(source, lineNumber, columnNumber);\n          // Only replace functionName if we found something\n          if (guessedFunctionName) {\n            resolve(new StackFrame({\n              functionName: guessedFunctionName,\n              args: stackframe.args,\n              fileName: stackframe.fileName,\n              lineNumber: lineNumber,\n              columnNumber: columnNumber\n            }));\n          } else {\n            resolve(stackframe);\n          }\n        }, reject)['catch'](reject);\n      }.bind(this));\n    };\n\n    /**\n     * Given a StackFrame, seek source-mapped location and return new enhanced StackFrame.\n     *\n     * @param {StackFrame} stackframe\n     * @returns {Promise} that resolves with enhanced StackFrame.\n     */\n    this.getMappedLocation = function StackTraceGPS$$getMappedLocation(stackframe) {\n      return new Promise(function (resolve, reject) {\n        _ensureSupportedEnvironment();\n        _ensureStackFrameIsLegit(stackframe);\n        var sourceCache = this.sourceCache;\n        var fileName = stackframe.fileName;\n        this._get(fileName).then(function (source) {\n          var sourceMappingURL = _findSourceMappingURL(source);\n          var isDataUrl = sourceMappingURL.substr(0, 5) === 'data:';\n          var defaultSourceRoot = fileName.substring(0, fileName.lastIndexOf('/') + 1);\n          if (sourceMappingURL[0] !== '/' && !isDataUrl && !/^https?:\\/\\/|^\\/\\//i.test(sourceMappingURL)) {\n            sourceMappingURL = defaultSourceRoot + sourceMappingURL;\n          }\n          return this._getSourceMapConsumer(sourceMappingURL, defaultSourceRoot).then(function (sourceMapConsumer) {\n            return _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache).then(resolve)['catch'](function () {\n              resolve(stackframe);\n            });\n          });\n        }.bind(this), reject)['catch'](reject);\n      }.bind(this));\n    };\n  };\n});","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n  if (0 <= number && number < intToCharMap.length) {\n    return intToCharMap[number];\n  }\n  throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n  var bigA = 65; // 'A'\n  var bigZ = 90; // 'Z'\n\n  var littleA = 97; // 'a'\n  var littleZ = 122; // 'z'\n\n  var zero = 48; // '0'\n  var nine = 57; // '9'\n\n  var plus = 43; // '+'\n  var slash = 47; // '/'\n\n  var littleOffset = 26;\n  var numberOffset = 52;\n\n  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n  if (bigA <= charCode && charCode <= bigZ) {\n    return charCode - bigA;\n  }\n\n  // 26 - 51: abcdefghijklmnopqrstuvwxyz\n  if (littleA <= charCode && charCode <= littleZ) {\n    return charCode - littleA + littleOffset;\n  }\n\n  // 52 - 61: 0123456789\n  if (zero <= charCode && charCode <= nine) {\n    return charCode - zero + numberOffset;\n  }\n\n  // 62: +\n  if (charCode == plus) {\n    return 62;\n  }\n\n  // 63: /\n  if (charCode == slash) {\n    return 63;\n  }\n\n  // Invalid base64 digit.\n  return -1;\n};","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n  // Optimized for most common case\n  var lineA = mappingA.generatedLine;\n  var lineB = mappingB.generatedLine;\n  var columnA = mappingA.generatedColumn;\n  var columnB = mappingB.generatedColumn;\n  return lineB > lineA || lineB == lineA && columnB >= columnA || util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n  this._array = [];\n  this._sorted = true;\n  // Serves as infimum\n  this._last = {\n    generatedLine: -1,\n    generatedColumn: 0\n  };\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach = function MappingList_forEach(aCallback, aThisArg) {\n  this._array.forEach(aCallback, aThisArg);\n};\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n  if (generatedPositionAfter(this._last, aMapping)) {\n    this._last = aMapping;\n    this._array.push(aMapping);\n  } else {\n    this._sorted = false;\n    this._array.push(aMapping);\n  }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n  if (!this._sorted) {\n    this._array.sort(util.compareByGeneratedPositionsInflated);\n    this._sorted = true;\n  }\n  return this._array;\n};\nexports.MappingList = MappingList;","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\nfunction SourceMapConsumer(aSourceMap) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n  }\n  return sourceMap.sections != null ? new IndexedSourceMapConsumer(sourceMap) : new BasicSourceMapConsumer(sourceMap);\n}\nSourceMapConsumer.fromSourceMap = function (aSourceMap) {\n  return BasicSourceMapConsumer.fromSourceMap(aSourceMap);\n};\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n//     {\n//       generatedLine: The line number in the generated code,\n//       generatedColumn: The column number in the generated code,\n//       source: The path to the original source file that generated this\n//               chunk of code,\n//       originalLine: The line number in the original source that\n//                     corresponds to this chunk of generated code,\n//       originalColumn: The column number in the original source that\n//                       corresponds to this chunk of generated code,\n//       name: The name of the original symbol which generated this chunk of\n//             code.\n//     }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n  get: function () {\n    if (!this.__generatedMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n    return this.__generatedMappings;\n  }\n});\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n  get: function () {\n    if (!this.__originalMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n    return this.__originalMappings;\n  }\n});\nSourceMapConsumer.prototype._charIsMappingSeparator = function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n  var c = aStr.charAt(index);\n  return c === \";\" || c === \",\";\n};\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n  throw new Error(\"Subclasses must implement _parseMappings\");\n};\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n *        The function that is called with each mapping.\n * @param Object aContext\n *        Optional. If specified, this object will be the value of `this` every\n *        time that `aCallback` is called.\n * @param aOrder\n *        Either `SourceMapConsumer.GENERATED_ORDER` or\n *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n *        iterate over the mappings sorted by the generated file's line/column\n *        order or the original's source/line/column order, respectively. Defaults to\n *        `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping = function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n  var context = aContext || null;\n  var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n  var mappings;\n  switch (order) {\n    case SourceMapConsumer.GENERATED_ORDER:\n      mappings = this._generatedMappings;\n      break;\n    case SourceMapConsumer.ORIGINAL_ORDER:\n      mappings = this._originalMappings;\n      break;\n    default:\n      throw new Error(\"Unknown order of iteration.\");\n  }\n  var sourceRoot = this.sourceRoot;\n  mappings.map(function (mapping) {\n    var source = mapping.source === null ? null : this._sources.at(mapping.source);\n    if (source != null && sourceRoot != null) {\n      source = util.join(sourceRoot, source);\n    }\n    return {\n      source: source,\n      generatedLine: mapping.generatedLine,\n      generatedColumn: mapping.generatedColumn,\n      originalLine: mapping.originalLine,\n      originalColumn: mapping.originalColumn,\n      name: mapping.name === null ? null : this._names.at(mapping.name)\n    };\n  }, this).forEach(aCallback, context);\n};\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.\n *   - column: Optional. the column number in the original source.\n *\n * and an array of objects is returned, each with the following properties:\n *\n *   - line: The line number in the generated source, or null.\n *   - column: The column number in the generated source, or null.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor = function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n  var line = util.getArg(aArgs, 'line');\n\n  // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n  // returns the index of the closest mapping less than the needle. By\n  // setting needle.originalColumn to 0, we thus find the last mapping for\n  // the given line, provided such a mapping exists.\n  var needle = {\n    source: util.getArg(aArgs, 'source'),\n    originalLine: line,\n    originalColumn: util.getArg(aArgs, 'column', 0)\n  };\n  if (this.sourceRoot != null) {\n    needle.source = util.relative(this.sourceRoot, needle.source);\n  }\n  if (!this._sources.has(needle.source)) {\n    return [];\n  }\n  needle.source = this._sources.indexOf(needle.source);\n  var mappings = [];\n  var index = this._findMapping(needle, this._originalMappings, \"originalLine\", \"originalColumn\", util.compareByOriginalPositions, binarySearch.LEAST_UPPER_BOUND);\n  if (index >= 0) {\n    var mapping = this._originalMappings[index];\n    if (aArgs.column === undefined) {\n      var originalLine = mapping.originalLine;\n\n      // Iterate until either we run out of mappings, or we run into\n      // a mapping for a different line than the one we found. Since\n      // mappings are sorted, this is guaranteed to find all mappings for\n      // the line we found.\n      while (mapping && mapping.originalLine === originalLine) {\n        mappings.push({\n          line: util.getArg(mapping, 'generatedLine', null),\n          column: util.getArg(mapping, 'generatedColumn', null),\n          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n        });\n        mapping = this._originalMappings[++index];\n      }\n    } else {\n      var originalColumn = mapping.originalColumn;\n\n      // Iterate until either we run out of mappings, or we run into\n      // a mapping for a different line than the one we were searching for.\n      // Since mappings are sorted, this is guaranteed to find all mappings for\n      // the line we are searching for.\n      while (mapping && mapping.originalLine === line && mapping.originalColumn == originalColumn) {\n        mappings.push({\n          line: util.getArg(mapping, 'generatedLine', null),\n          column: util.getArg(mapping, 'generatedColumn', null),\n          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n        });\n        mapping = this._originalMappings[++index];\n      }\n    }\n  }\n  return mappings;\n};\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The only parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - sources: An array of URLs to the original source files.\n *   - names: An array of identifiers which can be referrenced by individual mappings.\n *   - sourceRoot: Optional. The URL root from which all sources are relative.\n *   - sourcesContent: Optional. An array of contents of the original source files.\n *   - mappings: A string of base64 VLQs which contain the actual mappings.\n *   - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n *     {\n *       version : 3,\n *       file: \"out.js\",\n *       sourceRoot : \"\",\n *       sources: [\"foo.js\", \"bar.js\"],\n *       names: [\"src\", \"maps\", \"are\", \"fun\"],\n *       mappings: \"AA,AB;;ABCDE;\"\n *     }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n  }\n  var version = util.getArg(sourceMap, 'version');\n  var sources = util.getArg(sourceMap, 'sources');\n  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n  // requires the array) to play nice here.\n  var names = util.getArg(sourceMap, 'names', []);\n  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n  var mappings = util.getArg(sourceMap, 'mappings');\n  var file = util.getArg(sourceMap, 'file', null);\n\n  // Once again, Sass deviates from the spec and supplies the version as a\n  // string rather than a number, so we use loose equality checking here.\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n  sources = sources.map(String)\n  // Some source maps produce relative source paths like \"./foo.js\" instead of\n  // \"foo.js\".  Normalize these first so that future comparisons will succeed.\n  // See bugzil.la/1090768.\n  .map(util.normalize)\n  // Always ensure that absolute sources are internally stored relative to\n  // the source root, if the source root is absolute. Not doing this would\n  // be particularly problematic when the source root is a prefix of the\n  // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n  .map(function (source) {\n    return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) ? util.relative(sourceRoot, source) : source;\n  });\n\n  // Pass `true` below to allow duplicate names and sources. While source maps\n  // are intended to be compressed and deduplicated, the TypeScript compiler\n  // sometimes generates source maps with duplicates in them. See Github issue\n  // #72 and bugzil.la/889492.\n  this._names = ArraySet.fromArray(names.map(String), true);\n  this._sources = ArraySet.fromArray(sources, true);\n  this.sourceRoot = sourceRoot;\n  this.sourcesContent = sourcesContent;\n  this._mappings = mappings;\n  this.file = file;\n}\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n *        The source map that will be consumed.\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap = function SourceMapConsumer_fromSourceMap(aSourceMap) {\n  var smc = Object.create(BasicSourceMapConsumer.prototype);\n  var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n  var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n  smc.sourceRoot = aSourceMap._sourceRoot;\n  smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), smc.sourceRoot);\n  smc.file = aSourceMap._file;\n\n  // Because we are modifying the entries (by converting string sources and\n  // names to indices into the sources and names ArraySets), we have to make\n  // a copy of the entry or else bad things happen. Shared mutable state\n  // strikes again! See github issue #191.\n\n  var generatedMappings = aSourceMap._mappings.toArray().slice();\n  var destGeneratedMappings = smc.__generatedMappings = [];\n  var destOriginalMappings = smc.__originalMappings = [];\n  for (var i = 0, length = generatedMappings.length; i < length; i++) {\n    var srcMapping = generatedMappings[i];\n    var destMapping = new Mapping();\n    destMapping.generatedLine = srcMapping.generatedLine;\n    destMapping.generatedColumn = srcMapping.generatedColumn;\n    if (srcMapping.source) {\n      destMapping.source = sources.indexOf(srcMapping.source);\n      destMapping.originalLine = srcMapping.originalLine;\n      destMapping.originalColumn = srcMapping.originalColumn;\n      if (srcMapping.name) {\n        destMapping.name = names.indexOf(srcMapping.name);\n      }\n      destOriginalMappings.push(destMapping);\n    }\n    destGeneratedMappings.push(destMapping);\n  }\n  quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n  return smc;\n};\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    return this._sources.toArray().map(function (s) {\n      return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;\n    }, this);\n  }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n  this.generatedLine = 0;\n  this.generatedColumn = 0;\n  this.source = null;\n  this.originalLine = null;\n  this.originalColumn = null;\n  this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n  var generatedLine = 1;\n  var previousGeneratedColumn = 0;\n  var previousOriginalLine = 0;\n  var previousOriginalColumn = 0;\n  var previousSource = 0;\n  var previousName = 0;\n  var length = aStr.length;\n  var index = 0;\n  var cachedSegments = {};\n  var temp = {};\n  var originalMappings = [];\n  var generatedMappings = [];\n  var mapping, str, segment, end, value;\n  while (index < length) {\n    if (aStr.charAt(index) === ';') {\n      generatedLine++;\n      index++;\n      previousGeneratedColumn = 0;\n    } else if (aStr.charAt(index) === ',') {\n      index++;\n    } else {\n      mapping = new Mapping();\n      mapping.generatedLine = generatedLine;\n\n      // Because each offset is encoded relative to the previous one,\n      // many segments often have the same encoding. We can exploit this\n      // fact by caching the parsed variable length fields of each segment,\n      // allowing us to avoid a second parse if we encounter the same\n      // segment again.\n      for (end = index; end < length; end++) {\n        if (this._charIsMappingSeparator(aStr, end)) {\n          break;\n        }\n      }\n      str = aStr.slice(index, end);\n      segment = cachedSegments[str];\n      if (segment) {\n        index += str.length;\n      } else {\n        segment = [];\n        while (index < end) {\n          base64VLQ.decode(aStr, index, temp);\n          value = temp.value;\n          index = temp.rest;\n          segment.push(value);\n        }\n        if (segment.length === 2) {\n          throw new Error('Found a source, but no line and column');\n        }\n        if (segment.length === 3) {\n          throw new Error('Found a source and line, but no column');\n        }\n        cachedSegments[str] = segment;\n      }\n\n      // Generated column.\n      mapping.generatedColumn = previousGeneratedColumn + segment[0];\n      previousGeneratedColumn = mapping.generatedColumn;\n      if (segment.length > 1) {\n        // Original source.\n        mapping.source = previousSource + segment[1];\n        previousSource += segment[1];\n\n        // Original line.\n        mapping.originalLine = previousOriginalLine + segment[2];\n        previousOriginalLine = mapping.originalLine;\n        // Lines are stored 0-based\n        mapping.originalLine += 1;\n\n        // Original column.\n        mapping.originalColumn = previousOriginalColumn + segment[3];\n        previousOriginalColumn = mapping.originalColumn;\n        if (segment.length > 4) {\n          // Original name.\n          mapping.name = previousName + segment[4];\n          previousName += segment[4];\n        }\n      }\n      generatedMappings.push(mapping);\n      if (typeof mapping.originalLine === 'number') {\n        originalMappings.push(mapping);\n      }\n    }\n  }\n  quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n  this.__generatedMappings = generatedMappings;\n  quickSort(originalMappings, util.compareByOriginalPositions);\n  this.__originalMappings = originalMappings;\n};\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping = function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, aColumnName, aComparator, aBias) {\n  // To return the position we are searching for, we must first find the\n  // mapping for the given position and then return the opposite position it\n  // points to. Because the mappings are sorted, we can use binary search to\n  // find the best mapping.\n\n  if (aNeedle[aLineName] <= 0) {\n    throw new TypeError('Line must be greater than or equal to 1, got ' + aNeedle[aLineName]);\n  }\n  if (aNeedle[aColumnName] < 0) {\n    throw new TypeError('Column must be greater than or equal to 0, got ' + aNeedle[aColumnName]);\n  }\n  return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n};\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans = function SourceMapConsumer_computeColumnSpans() {\n  for (var index = 0; index < this._generatedMappings.length; ++index) {\n    var mapping = this._generatedMappings[index];\n\n    // Mappings do not contain a field for the last generated columnt. We\n    // can come up with an optimistic estimate, however, by assuming that\n    // mappings are contiguous (i.e. given two consecutive mappings, the\n    // first mapping ends where the second one starts).\n    if (index + 1 < this._generatedMappings.length) {\n      var nextMapping = this._generatedMappings[index + 1];\n      if (mapping.generatedLine === nextMapping.generatedLine) {\n        mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n        continue;\n      }\n    }\n\n    // The last mapping for each line spans the entire line.\n    mapping.lastGeneratedColumn = Infinity;\n  }\n};\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.\n *   - column: The column number in the generated source.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.\n *   - column: The column number in the original source, or null.\n *   - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor = function SourceMapConsumer_originalPositionFor(aArgs) {\n  var needle = {\n    generatedLine: util.getArg(aArgs, 'line'),\n    generatedColumn: util.getArg(aArgs, 'column')\n  };\n  var index = this._findMapping(needle, this._generatedMappings, \"generatedLine\", \"generatedColumn\", util.compareByGeneratedPositionsDeflated, util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND));\n  if (index >= 0) {\n    var mapping = this._generatedMappings[index];\n    if (mapping.generatedLine === needle.generatedLine) {\n      var source = util.getArg(mapping, 'source', null);\n      if (source !== null) {\n        source = this._sources.at(source);\n        if (this.sourceRoot != null) {\n          source = util.join(this.sourceRoot, source);\n        }\n      }\n      var name = util.getArg(mapping, 'name', null);\n      if (name !== null) {\n        name = this._names.at(name);\n      }\n      return {\n        source: source,\n        line: util.getArg(mapping, 'originalLine', null),\n        column: util.getArg(mapping, 'originalColumn', null),\n        name: name\n      };\n    }\n  }\n  return {\n    source: null,\n    line: null,\n    column: null,\n    name: null\n  };\n};\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources = function BasicSourceMapConsumer_hasContentsOfAllSources() {\n  if (!this.sourcesContent) {\n    return false;\n  }\n  return this.sourcesContent.length >= this._sources.size() && !this.sourcesContent.some(function (sc) {\n    return sc == null;\n  });\n};\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor = function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n  if (!this.sourcesContent) {\n    return null;\n  }\n  if (this.sourceRoot != null) {\n    aSource = util.relative(this.sourceRoot, aSource);\n  }\n  if (this._sources.has(aSource)) {\n    return this.sourcesContent[this._sources.indexOf(aSource)];\n  }\n  var url;\n  if (this.sourceRoot != null && (url = util.urlParse(this.sourceRoot))) {\n    // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n    // many users. We can help them out when they expect file:// URIs to\n    // behave like it would if they were running a local HTTP server. See\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n    var fileUriAbsPath = aSource.replace(/^file:\\/\\//, \"\");\n    if (url.scheme == \"file\" && this._sources.has(fileUriAbsPath)) {\n      return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)];\n    }\n    if ((!url.path || url.path == \"/\") && this._sources.has(\"/\" + aSource)) {\n      return this.sourcesContent[this._sources.indexOf(\"/\" + aSource)];\n    }\n  }\n\n  // This function is used recursively from\n  // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n  // don't want to throw if we can't find the source - we just want to\n  // return null, so we provide a flag to exit gracefully.\n  if (nullOnMissing) {\n    return null;\n  } else {\n    throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n  }\n};\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.\n *   - column: The column number in the original source.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.\n *   - column: The column number in the generated source, or null.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor = function SourceMapConsumer_generatedPositionFor(aArgs) {\n  var source = util.getArg(aArgs, 'source');\n  if (this.sourceRoot != null) {\n    source = util.relative(this.sourceRoot, source);\n  }\n  if (!this._sources.has(source)) {\n    return {\n      line: null,\n      column: null,\n      lastColumn: null\n    };\n  }\n  source = this._sources.indexOf(source);\n  var needle = {\n    source: source,\n    originalLine: util.getArg(aArgs, 'line'),\n    originalColumn: util.getArg(aArgs, 'column')\n  };\n  var index = this._findMapping(needle, this._originalMappings, \"originalLine\", \"originalColumn\", util.compareByOriginalPositions, util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND));\n  if (index >= 0) {\n    var mapping = this._originalMappings[index];\n    if (mapping.source === needle.source) {\n      return {\n        line: util.getArg(mapping, 'generatedLine', null),\n        column: util.getArg(mapping, 'generatedColumn', null),\n        lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n      };\n    }\n  }\n  return {\n    line: null,\n    column: null,\n    lastColumn: null\n  };\n};\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The only parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - file: Optional. The generated file this source map is associated with.\n *   - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n *   - offset: The offset into the original specified at which this section\n *       begins to apply, defined as an object with a \"line\" and \"column\"\n *       field.\n *   - map: A source map definition. This source map could also be indexed,\n *       but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n *  {\n *    version : 3,\n *    file: \"app.js\",\n *    sections: [{\n *      offset: {line:100, column:10},\n *      map: {\n *        version : 3,\n *        file: \"section.js\",\n *        sources: [\"foo.js\", \"bar.js\"],\n *        names: [\"src\", \"maps\", \"are\", \"fun\"],\n *        mappings: \"AAAA,E;;ABCDE;\"\n *      }\n *    }],\n *  }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n  }\n  var version = util.getArg(sourceMap, 'version');\n  var sections = util.getArg(sourceMap, 'sections');\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n  var lastOffset = {\n    line: -1,\n    column: 0\n  };\n  this._sections = sections.map(function (s) {\n    if (s.url) {\n      // The url field will require support for asynchronicity.\n      // See https://github.com/mozilla/source-map/issues/16\n      throw new Error('Support for url field in sections not implemented.');\n    }\n    var offset = util.getArg(s, 'offset');\n    var offsetLine = util.getArg(offset, 'line');\n    var offsetColumn = util.getArg(offset, 'column');\n    if (offsetLine < lastOffset.line || offsetLine === lastOffset.line && offsetColumn < lastOffset.column) {\n      throw new Error('Section offsets must be ordered and non-overlapping.');\n    }\n    lastOffset = offset;\n    return {\n      generatedOffset: {\n        // The offset fields are 0-based, but we use 1-based indices when\n        // encoding/decoding from VLQ.\n        generatedLine: offsetLine + 1,\n        generatedColumn: offsetColumn + 1\n      },\n      consumer: new SourceMapConsumer(util.getArg(s, 'map'))\n    };\n  });\n}\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    var sources = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n        sources.push(this._sections[i].consumer.sources[j]);\n      }\n    }\n    return sources;\n  }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.\n *   - column: The column number in the generated source.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.\n *   - column: The column number in the original source, or null.\n *   - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor = function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n  var needle = {\n    generatedLine: util.getArg(aArgs, 'line'),\n    generatedColumn: util.getArg(aArgs, 'column')\n  };\n\n  // Find the section containing the generated position we're trying to map\n  // to an original position.\n  var sectionIndex = binarySearch.search(needle, this._sections, function (needle, section) {\n    var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n    if (cmp) {\n      return cmp;\n    }\n    return needle.generatedColumn - section.generatedOffset.generatedColumn;\n  });\n  var section = this._sections[sectionIndex];\n  if (!section) {\n    return {\n      source: null,\n      line: null,\n      column: null,\n      name: null\n    };\n  }\n  return section.consumer.originalPositionFor({\n    line: needle.generatedLine - (section.generatedOffset.generatedLine - 1),\n    column: needle.generatedColumn - (section.generatedOffset.generatedLine === needle.generatedLine ? section.generatedOffset.generatedColumn - 1 : 0),\n    bias: aArgs.bias\n  });\n};\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources = function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n  return this._sections.every(function (s) {\n    return s.consumer.hasContentsOfAllSources();\n  });\n};\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor = function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n  for (var i = 0; i < this._sections.length; i++) {\n    var section = this._sections[i];\n    var content = section.consumer.sourceContentFor(aSource, true);\n    if (content) {\n      return content;\n    }\n  }\n  if (nullOnMissing) {\n    return null;\n  } else {\n    throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n  }\n};\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.\n *   - column: The column number in the original source.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.\n *   - column: The column number in the generated source, or null.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor = function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n  for (var i = 0; i < this._sections.length; i++) {\n    var section = this._sections[i];\n\n    // Only consider this section if the requested source is in the list of\n    // sources of the consumer.\n    if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {\n      continue;\n    }\n    var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n    if (generatedPosition) {\n      var ret = {\n        line: generatedPosition.line + (section.generatedOffset.generatedLine - 1),\n        column: generatedPosition.column + (section.generatedOffset.generatedLine === generatedPosition.line ? section.generatedOffset.generatedColumn - 1 : 0)\n      };\n      return ret;\n    }\n  }\n  return {\n    line: null,\n    column: null\n  };\n};\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings = function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n  this.__generatedMappings = [];\n  this.__originalMappings = [];\n  for (var i = 0; i < this._sections.length; i++) {\n    var section = this._sections[i];\n    var sectionMappings = section.consumer._generatedMappings;\n    for (var j = 0; j < sectionMappings.length; j++) {\n      var mapping = sectionMappings[j];\n      var source = section.consumer._sources.at(mapping.source);\n      if (section.consumer.sourceRoot !== null) {\n        source = util.join(section.consumer.sourceRoot, source);\n      }\n      this._sources.add(source);\n      source = this._sources.indexOf(source);\n      var name = section.consumer._names.at(mapping.name);\n      this._names.add(name);\n      name = this._names.indexOf(name);\n\n      // The mappings coming from the consumer for the section have\n      // generated positions relative to the start of the section, so we\n      // need to offset them to be relative to the start of the concatenated\n      // generated file.\n      var adjustedMapping = {\n        source: source,\n        generatedLine: mapping.generatedLine + (section.generatedOffset.generatedLine - 1),\n        generatedColumn: mapping.generatedColumn + (section.generatedOffset.generatedLine === mapping.generatedLine ? section.generatedOffset.generatedColumn - 1 : 0),\n        originalLine: mapping.originalLine,\n        originalColumn: mapping.originalColumn,\n        name: name\n      };\n      this.__generatedMappings.push(adjustedMapping);\n      if (typeof adjustedMapping.originalLine === 'number') {\n        this.__originalMappings.push(adjustedMapping);\n      }\n    }\n  }\n  quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n  quickSort(this.__originalMappings, util.compareByOriginalPositions);\n};\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n  // This function terminates when one of the following is true:\n  //\n  //   1. We find the exact element we are looking for.\n  //\n  //   2. We did not find the exact element, but we can return the index of\n  //      the next-closest element.\n  //\n  //   3. We did not find the exact element, and there is no next-closest\n  //      element than the one we are searching for, so we return -1.\n  var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n  var cmp = aCompare(aNeedle, aHaystack[mid], true);\n  if (cmp === 0) {\n    // Found the element we are looking for.\n    return mid;\n  } else if (cmp > 0) {\n    // Our needle is greater than aHaystack[mid].\n    if (aHigh - mid > 1) {\n      // The element is in the upper half.\n      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // The exact needle element was not found in this haystack. Determine if\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return aHigh < aHaystack.length ? aHigh : -1;\n    } else {\n      return mid;\n    }\n  } else {\n    // Our needle is less than aHaystack[mid].\n    if (mid - aLow > 1) {\n      // The element is in the lower half.\n      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return mid;\n    } else {\n      return aLow < 0 ? -1 : aLow;\n    }\n  }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n *     array and returns -1, 0, or 1 depending on whether the needle is less\n *     than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n  if (aHaystack.length === 0) {\n    return -1;\n  }\n  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n  if (index < 0) {\n    return -1;\n  }\n\n  // We have found either the exact element, or the next-closest element than\n  // the one we are searching for. However, there may be more than one such\n  // element. Make sure we always return the smallest of these.\n  while (index - 1 >= 0) {\n    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n      break;\n    }\n    --index;\n  }\n  return index;\n};","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n *        The array.\n * @param {Number} x\n *        The index of the first item.\n * @param {Number} y\n *        The index of the second item.\n */\nfunction swap(ary, x, y) {\n  var temp = ary[x];\n  ary[x] = ary[y];\n  ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n *        The lower bound on the range.\n * @param {Number} high\n *        The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n  return Math.round(low + Math.random() * (high - low));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n * @param {Number} p\n *        Start index of the array\n * @param {Number} r\n *        End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n  // If our lower bound is less than our upper bound, we (1) partition the\n  // array into two pieces and (2) recurse on each half. If it is not, this is\n  // the empty array and our base case.\n\n  if (p < r) {\n    // (1) Partitioning.\n    //\n    // The partitioning chooses a pivot between `p` and `r` and moves all\n    // elements that are less than or equal to the pivot to the before it, and\n    // all the elements that are greater than it after it. The effect is that\n    // once partition is done, the pivot is in the exact place it will be when\n    // the array is put in sorted order, and it will not need to be moved\n    // again. This runs in O(n) time.\n\n    // Always choose a random pivot so that an input array which is reverse\n    // sorted does not cause O(n^2) running time.\n    var pivotIndex = randomIntInRange(p, r);\n    var i = p - 1;\n    swap(ary, pivotIndex, r);\n    var pivot = ary[r];\n\n    // Immediately after `j` is incremented in this loop, the following hold\n    // true:\n    //\n    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.\n    //\n    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n    for (var j = p; j < r; j++) {\n      if (comparator(ary[j], pivot) <= 0) {\n        i += 1;\n        swap(ary, i, j);\n      }\n    }\n    swap(ary, i + 1, j);\n    var q = i + 1;\n\n    // (2) Recurse on each half.\n\n    doQuickSort(ary, comparator, p, q - 1);\n    doQuickSort(ary, comparator, q + 1, r);\n  }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n  doQuickSort(ary, comparator, 0, ary.length - 1);\n};","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n *        generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n  this.children = [];\n  this.sourceContents = {};\n  this.line = aLine == null ? null : aLine;\n  this.column = aColumn == null ? null : aColumn;\n  this.source = aSource == null ? null : aSource;\n  this.name = aName == null ? null : aName;\n  this[isSourceNode] = true;\n  if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n *        SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap = function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n  // The SourceNode we want to fill with the generated code\n  // and the SourceMap\n  var node = new SourceNode();\n\n  // All even indices of this array are one line of the generated code,\n  // while all odd indices are the newlines between two adjacent lines\n  // (since `REGEX_NEWLINE` captures its match).\n  // Processed fragments are removed from this array, by calling `shiftNextLine`.\n  var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n  var shiftNextLine = function () {\n    var lineContents = remainingLines.shift();\n    // The last line of a file might not have a newline.\n    var newLine = remainingLines.shift() || \"\";\n    return lineContents + newLine;\n  };\n\n  // We need to remember the position of \"remainingLines\"\n  var lastGeneratedLine = 1,\n    lastGeneratedColumn = 0;\n\n  // The generate SourceNodes we need a code range.\n  // To extract it current and last mapping is used.\n  // Here we store the last mapping.\n  var lastMapping = null;\n  aSourceMapConsumer.eachMapping(function (mapping) {\n    if (lastMapping !== null) {\n      // We add the code from \"lastMapping\" to \"mapping\":\n      // First check if there is a new line in between.\n      if (lastGeneratedLine < mapping.generatedLine) {\n        // Associate first line with \"lastMapping\"\n        addMappingWithCode(lastMapping, shiftNextLine());\n        lastGeneratedLine++;\n        lastGeneratedColumn = 0;\n        // The remaining code is added without mapping\n      } else {\n        // There is no new line in between.\n        // Associate the code between \"lastGeneratedColumn\" and\n        // \"mapping.generatedColumn\" with \"lastMapping\"\n        var nextLine = remainingLines[0];\n        var code = nextLine.substr(0, mapping.generatedColumn - lastGeneratedColumn);\n        remainingLines[0] = nextLine.substr(mapping.generatedColumn - lastGeneratedColumn);\n        lastGeneratedColumn = mapping.generatedColumn;\n        addMappingWithCode(lastMapping, code);\n        // No more remaining code, continue\n        lastMapping = mapping;\n        return;\n      }\n    }\n    // We add the generated code until the first mapping\n    // to the SourceNode without any mapping.\n    // Each line is added as separate string.\n    while (lastGeneratedLine < mapping.generatedLine) {\n      node.add(shiftNextLine());\n      lastGeneratedLine++;\n    }\n    if (lastGeneratedColumn < mapping.generatedColumn) {\n      var nextLine = remainingLines[0];\n      node.add(nextLine.substr(0, mapping.generatedColumn));\n      remainingLines[0] = nextLine.substr(mapping.generatedColumn);\n      lastGeneratedColumn = mapping.generatedColumn;\n    }\n    lastMapping = mapping;\n  }, this);\n  // We have processed all mappings.\n  if (remainingLines.length > 0) {\n    if (lastMapping) {\n      // Associate the remaining code in the current line with \"lastMapping\"\n      addMappingWithCode(lastMapping, shiftNextLine());\n    }\n    // and add the remaining lines without any mapping\n    node.add(remainingLines.join(\"\"));\n  }\n\n  // Copy sourcesContent into SourceNode\n  aSourceMapConsumer.sources.forEach(function (sourceFile) {\n    var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n    if (content != null) {\n      if (aRelativePath != null) {\n        sourceFile = util.join(aRelativePath, sourceFile);\n      }\n      node.setSourceContent(sourceFile, content);\n    }\n  });\n  return node;\n  function addMappingWithCode(mapping, code) {\n    if (mapping === null || mapping.source === undefined) {\n      node.add(code);\n    } else {\n      var source = aRelativePath ? util.join(aRelativePath, mapping.source) : mapping.source;\n      node.add(new SourceNode(mapping.originalLine, mapping.originalColumn, source, code, mapping.name));\n    }\n  }\n};\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n  if (Array.isArray(aChunk)) {\n    aChunk.forEach(function (chunk) {\n      this.add(chunk);\n    }, this);\n  } else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    if (aChunk) {\n      this.children.push(aChunk);\n    }\n  } else {\n    throw new TypeError(\"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk);\n  }\n  return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n  if (Array.isArray(aChunk)) {\n    for (var i = aChunk.length - 1; i >= 0; i--) {\n      this.prepend(aChunk[i]);\n    }\n  } else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    this.children.unshift(aChunk);\n  } else {\n    throw new TypeError(\"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk);\n  }\n  return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n  var chunk;\n  for (var i = 0, len = this.children.length; i < len; i++) {\n    chunk = this.children[i];\n    if (chunk[isSourceNode]) {\n      chunk.walk(aFn);\n    } else {\n      if (chunk !== '') {\n        aFn(chunk, {\n          source: this.source,\n          line: this.line,\n          column: this.column,\n          name: this.name\n        });\n      }\n    }\n  }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n  var newChildren;\n  var i;\n  var len = this.children.length;\n  if (len > 0) {\n    newChildren = [];\n    for (i = 0; i < len - 1; i++) {\n      newChildren.push(this.children[i]);\n      newChildren.push(aSep);\n    }\n    newChildren.push(this.children[i]);\n    this.children = newChildren;\n  }\n  return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n  var lastChild = this.children[this.children.length - 1];\n  if (lastChild[isSourceNode]) {\n    lastChild.replaceRight(aPattern, aReplacement);\n  } else if (typeof lastChild === 'string') {\n    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n  } else {\n    this.children.push(''.replace(aPattern, aReplacement));\n  }\n  return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent = function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n  this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n};\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents = function SourceNode_walkSourceContents(aFn) {\n  for (var i = 0, len = this.children.length; i < len; i++) {\n    if (this.children[i][isSourceNode]) {\n      this.children[i].walkSourceContents(aFn);\n    }\n  }\n  var sources = Object.keys(this.sourceContents);\n  for (var i = 0, len = sources.length; i < len; i++) {\n    aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n  }\n};\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n  var str = \"\";\n  this.walk(function (chunk) {\n    str += chunk;\n  });\n  return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n  var generated = {\n    code: \"\",\n    line: 1,\n    column: 0\n  };\n  var map = new SourceMapGenerator(aArgs);\n  var sourceMappingActive = false;\n  var lastOriginalSource = null;\n  var lastOriginalLine = null;\n  var lastOriginalColumn = null;\n  var lastOriginalName = null;\n  this.walk(function (chunk, original) {\n    generated.code += chunk;\n    if (original.source !== null && original.line !== null && original.column !== null) {\n      if (lastOriginalSource !== original.source || lastOriginalLine !== original.line || lastOriginalColumn !== original.column || lastOriginalName !== original.name) {\n        map.addMapping({\n          source: original.source,\n          original: {\n            line: original.line,\n            column: original.column\n          },\n          generated: {\n            line: generated.line,\n            column: generated.column\n          },\n          name: original.name\n        });\n      }\n      lastOriginalSource = original.source;\n      lastOriginalLine = original.line;\n      lastOriginalColumn = original.column;\n      lastOriginalName = original.name;\n      sourceMappingActive = true;\n    } else if (sourceMappingActive) {\n      map.addMapping({\n        generated: {\n          line: generated.line,\n          column: generated.column\n        }\n      });\n      lastOriginalSource = null;\n      sourceMappingActive = false;\n    }\n    for (var idx = 0, length = chunk.length; idx < length; idx++) {\n      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n        generated.line++;\n        generated.column = 0;\n        // Mappings end at eol\n        if (idx + 1 === length) {\n          lastOriginalSource = null;\n          sourceMappingActive = false;\n        } else if (sourceMappingActive) {\n          map.addMapping({\n            source: original.source,\n            original: {\n              line: original.line,\n              column: original.column\n            },\n            generated: {\n              line: generated.line,\n              column: generated.column\n            },\n            name: original.name\n          });\n        }\n      } else {\n        generated.column++;\n      }\n    }\n  });\n  this.walkSourceContents(function (sourceFile, sourceContent) {\n    map.setSourceContent(sourceFile, sourceContent);\n  });\n  return {\n    code: generated.code,\n    map: map\n  };\n};\nexports.SourceNode = SourceNode;","//\n// Tools for performance debugging, only enabled in development mode.\n// Open up Chrome Dev Tools, then Timeline, then User Timing to see output.\n// Also see config/webpack/loaders/mark.js for the webpack loader marks.\n//\n\nlet marky;\n\nif (process.env.NODE_ENV === 'development') {\n  if (typeof performance !== 'undefined' && performance.setResourceTimingBufferSize) {\n    // Increase Firefox's performance entry limit; otherwise it's capped to 150.\n    // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1331135\n    performance.setResourceTimingBufferSize(Infinity);\n  }\n  marky = require('marky');\n  // allows us to easily do e.g. ReactPerf.printWasted() while debugging\n  //window.ReactPerf = require('react-addons-perf');\n  //window.ReactPerf.start();\n}\n\nexport function start(name) {\n  if (process.env.NODE_ENV === 'development') {\n    marky.mark(name);\n  }\n}\n\nexport function stop(name) {\n  if (process.env.NODE_ENV === 'development') {\n    marky.stop(name);\n  }\n}\n"],"sourceRoot":""}