summary refs log tree commit diff
path: root/resources/app/lib/main.js.map
diff options
context:
space:
mode:
Diffstat (limited to 'resources/app/lib/main.js.map')
-rw-r--r--resources/app/lib/main.js.map1
1 files changed, 1 insertions, 0 deletions
diff --git a/resources/app/lib/main.js.map b/resources/app/lib/main.js.map
new file mode 100644
index 0000000..d396513
--- /dev/null
+++ b/resources/app/lib/main.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/src/main.js","webpack:///./app/node_modules/source-map-support/register.js","webpack:///./app/node_modules/source-map-support/source-map-support.js","webpack:///./app/node_modules/source-map/source-map.js","webpack:///./app/node_modules/source-map/lib/source-map-generator.js","webpack:///./app/node_modules/source-map/lib/base64-vlq.js","webpack:///./app/node_modules/source-map/lib/base64.js","webpack:///./app/node_modules/source-map/lib/util.js","webpack:///./app/node_modules/source-map/lib/array-set.js","webpack:///./app/node_modules/source-map/lib/mapping-list.js","webpack:///./app/node_modules/source-map/lib/source-map-consumer.js","webpack:///./app/node_modules/source-map/lib/binary-search.js","webpack:///./app/node_modules/source-map/lib/quick-sort.js","webpack:///./app/node_modules/source-map/lib/source-node.js","webpack:///external \"path\"","webpack:///external \"fs\"","webpack:///./app/node_modules/buffer-from/index.js","webpack:///external \"module\"","webpack:///external \"electron\"","webpack:///./app/node_modules/electron-dl/index.js","webpack:///./app/node_modules/unused-filename/index.js","webpack:///./app/node_modules/path-exists/index.js","webpack:///./app/node_modules/modify-filename/index.js","webpack:///./app/node_modules/pupa/index.js","webpack:///./app/node_modules/ext-name/index.js","webpack:///./app/node_modules/ext-list/index.js","webpack:///./app/node_modules/mime-db/index.js","webpack:///./app/node_modules/sort-keys-length/index.js","webpack:///./app/node_modules/sort-keys/index.js","webpack:///./app/node_modules/is-plain-obj/index.js","webpack:///./app/src/components/login/loginWindow.js","webpack:///./app/src/components/mainWindow/mainWindow.js","webpack:///./app/node_modules/electron-window-state/index.js","webpack:///./app/node_modules/jsonfile/index.js","webpack:///./app/node_modules/graceful-fs/graceful-fs.js","webpack:///./app/node_modules/graceful-fs/polyfills.js","webpack:///external \"constants\"","webpack:///./app/node_modules/graceful-fs/legacy-streams.js","webpack:///external \"stream\"","webpack:///./app/node_modules/graceful-fs/clone.js","webpack:///external \"util\"","webpack:///external \"assert\"","webpack:///./app/node_modules/mkdirp/index.js","webpack:///./app/node_modules/deep-equal/index.js","webpack:///./app/node_modules/deep-equal/lib/keys.js","webpack:///./app/node_modules/deep-equal/lib/is_arguments.js","webpack:///./app/src/components/mainWindow/mainWindowHelpers.js","webpack:///./app/src/helpers/helpers.js","webpack:///./app/node_modules/wurl/wurl.js","webpack:///external \"os\"","webpack:///./app/node_modules/loglevel/lib/loglevel.js","webpack:///./app/src/components/menu/menu.js","webpack:///./app/src/components/contextMenu/contextMenu.js","webpack:///./app/node_modules/electron-context-menu/index.js","webpack:///./app/node_modules/electron-is-dev/index.js","webpack:///./app/src/components/trayIcon/trayIcon.js","webpack:///./app/src/helpers/inferFlash.js","webpack:///./app/node_modules/electron-squirrel-startup/index.js","webpack:///external \"child_process\"","webpack:///./app/node_modules/debug/src/index.js","webpack:///./app/node_modules/debug/src/browser.js","webpack:///./app/node_modules/debug/src/debug.js","webpack:///./app/node_modules/ms/index.js","webpack:///./app/node_modules/debug/src/node.js","webpack:///external \"tty\"","webpack:///external \"net\""],"names":["electronSquirrelStartup","require","app","quit","isOSX","helpers","APP_ARGS_FILE_PATH","path","join","__dirname","appArgs","JSON","parse","fs","readFileSync","fileDownloadOptions","Object","assign","processEnvs","keys","forEach","key","process","env","mainWindow","flashPluginDir","commandLine","appendSwitch","flashPath","ignoreCertificate","disableGpu","disableHardwareAcceleration","ignoreGpuBlacklist","enableEs3Apis","diskCacheSize","basicAuthUsername","basicAuthPassword","setDockBadge","currentBadgeCount","count","bounce","dock","setBadge","on","fastQuit","event","hasVisibleWindows","show","exit","crashReporter","start","companyName","productName","name","submitURL","uploadToServer","shouldQuit","singleInstance","requestSingleInstanceLock","isVisible","isMinimized","restore","focus","globalShortcuts","shortcut","globalShortcut","register","inputEvents","inputEvent","webContents","sendInputEvent","emit","request","authInfo","callback","preventDefault","createLoginWindow","loginCallback","loginWindow","BrowserWindow","width","height","frame","resizable","loadURL","ipcMain","once","usernameAndPassword","close","linkIsInternal","getCssToInject","shouldInjectCss","getAppIcon","nativeTabsSupported","getCounterValue","onNewWindowHelper","mainWindowHelpers","ZOOM_INTERVAL","maybeHideWindow","window","tray","hide","maybeInjectCss","browserWindow","cssToInject","injectCss","insertCSS","onHeadersReceived","details","cancel","responseHeaders","session","webRequest","clearCache","targetUrl","clearStorageData","createMainWindow","inpOptions","onAppQuit","options","mainWindowState","defaultWidth","defaultHeight","DEFAULT_WINDOW_OPTIONS","title","tabbingIdentifier","undefined","webPreferences","javascript","plugins","nodeIntegration","webSecurity","insecure","preload","zoomFactor","zoom","hideWindowFrame","minWidth","minHeight","maxWidth","maxHeight","x","y","autoHideMenuBar","showMenuBar","icon","fullscreen","fullScreen","alwaysOnTop","titleBarStyle","manage","maximize","writeFileSync","stringify","withFocusedWindow","block","focusedWindow","getFocusedWindow","adjustWindowZoom","adjustment","getZoomFactor","setZoomFactor","onZoomIn","onZoomOut","onZoomReset","clearAppData","dialog","showMessageBox","type","buttons","defaultId","message","response","onGoBack","goBack","onGoForward","goForward","getCurrentUrl","getURL","onWillNavigate","urlToGo","internalUrls","shell","openExternal","createNewWindow","createNewTab","url","foreground","newTab","addTabbedWindow","createAboutBlankWindow","onNewWindow","_","disposition","newGuest","sendParamsOnDidFinishLoad","send","userAgent","setUserAgent","menuOptions","nativefierVersion","appQuit","zoomIn","zoomOut","zoomReset","zoomBuildTimeValue","disableDevTools","disableContextMenu","counter","e","counterValue","isFocused","isFullScreen","moveTabToNewWindow","setFullScreen","bind","newWindow","INJECT_CSS_PATH","log","os","platform","isLinux","isWindows","currentUrl","newUrl","internalUrlRegex","regex","RegExp","test","currentDomain","newDomain","accessSync","F_OK","toString","debugLog","setTimeout","info","itemCountRegex","match","exec","createMenu","Menu","getApplicationMenu","zoomResetLabel","template","label","submenu","accelerator","role","click","currentURL","clipboard","writeText","item","reload","toggleDevTools","splice","length","unshift","push","menu","buildFromTemplate","setApplicationMenu","initContextMenu","prepend","params","items","linkURL","Tray","nativeImage","createTrayIcon","iconPath","nimage","createFromPath","appIcon","onClick","contextMenu","setHighlightMode","setToolTip","setContextMenu","findSync","pattern","basePath","findDir","matches","findSyncRecurse","base","children","readdirSync","exception","code","child","childPath","childIsDirectory","lstatSync","isDirectory","patternMatches","linuxMatch","windowsMatch","darwinMatch","inferFlash","warn"],"mappings":"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;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM;AACN;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,6BAA6B,YAAY,kBAAkB;AAC3D;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,2BAA2B;AAC3B;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,0DAA0D,gCAAgC,EAAE;AAC5F,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,wCAAwC,gDAAgD;AACxF,oCAAoC,wBAAwB;AAC5D,sCAAsC,sBAAsB;AAC5D,wCAAwC,4BAA4B;AACpE,iDAAiD,wBAAwB;AACzE;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sCAAsC,eAAe;AACrD;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,2FAA2F,oBAAoB;AAC/G;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,eAAe,mBAAO,CAAC,EAAQ;AAC/B,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;;;;;ACljBA;AACA;AACA;AACA;AACA;AACA,6BAA6B,mBAAO,CAAC,CAA4B;AACjE,4BAA4B,mBAAO,CAAC,EAA2B;AAC/D,qBAAqB,mBAAO,CAAC,EAAmB;;;;;;;ACPhD,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA,gBAAgB,mBAAO,CAAC,CAAc;AACtC,WAAW,mBAAO,CAAC,CAAQ;AAC3B,eAAe,mBAAO,CAAC,CAAa;AACpC,kBAAkB,mBAAO,CAAC,CAAgB;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,SAAS;AACnD;AACA;;AAEA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACxaA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D,oBAAoB;AACpB;AACA;AACA;AACA;;AAEA,aAAa,mBAAO,CAAC,CAAU;;AAE/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;;;;;;AC3IA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,gBAAgB;;AAEhB,mBAAmB;AACnB,oBAAoB;;AAEpB,gBAAgB;AAChB,gBAAgB;;AAEhB,gBAAgB;AAChB,iBAAiB;;AAEjB;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AClEA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,8CAA8C,QAAQ;AACtD;AACA;AACA;AACA,KAAK;AACL;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B,QAAQ;AACnC;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,aAAa;AACb;;AAEA;AACA,cAAc;AACd;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACveA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA,WAAW,mBAAO,CAAC,CAAQ;AAC3B;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,sCAAsC,SAAS;AAC/C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACxHA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA,WAAW,mBAAO,CAAC,CAAQ;;AAE3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;AC9EA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA,WAAW,mBAAO,CAAC,CAAQ;AAC3B,mBAAmB,mBAAO,CAAC,EAAiB;AAC5C,eAAe,mBAAO,CAAC,CAAa;AACpC,gBAAgB,mBAAO,CAAC,CAAc;AACtC,gBAAgB,mBAAO,CAAC,EAAc;;AAEtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,mBAAmB;AACnB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,MAAM;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,kCAAkC;AAC/C;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,sDAAsD,YAAY;AAClE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,yBAAyB,cAAc;AACvC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,wCAAwC;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,mBAAmB,EAAE;AACpE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,oBAAoB;AACrC;AACA;AACA;AACA;AACA;AACA,6BAA6B,MAAM;AACnC;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,2BAA2B;AAC9C,qBAAqB,+CAA+C;AACpE;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,2BAA2B;AAC9C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,2BAA2B;AAC9C;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,2BAA2B;AAC9C;AACA;AACA,qBAAqB,4BAA4B;AACjD;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACxnCA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;AC9GA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA,WAAW,OAAO;AAClB;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA,WAAW,SAAS;AACpB;AACA,WAAW,OAAO;AAClB;AACA,WAAW,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,OAAO;AAC1B;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB;AACA,WAAW,SAAS;AACpB;AACA;AACA;AACA;AACA;;;;;;;ACjHA,gBAAgB,oBAAoB;AACpC;AACA;AACA;AACA;AACA;;AAEA,yBAAyB,mBAAO,CAAC,CAAwB;AACzD,WAAW,mBAAO,CAAC,CAAQ;;AAE3B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,QAAQ;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6CAA6C,SAAS;AACtD;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,WAAW;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C,SAAS;AACxD;AACA;AACA;AACA;;AAEA;AACA,yCAAyC,SAAS;AAClD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA,WAAW;AACX;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,4CAA4C,cAAc;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA,aAAa;AACb;AACA,WAAW;AACX;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;;AAEH,UAAU;AACV;;AAEA;;;;;;;AC5ZA,iC;;;;;;ACAA,+B;;;;;;ACAA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;;;;;;ACpEA,mC;;;;;;ACAA,qC;;;;;;;ACAa;AACb,aAAa,mBAAO,CAAC,EAAM;AAC3B,OAAO,kCAAkC,GAAG,mBAAO,CAAC,EAAU;AAC9D,uBAAuB,mBAAO,CAAC,EAAiB;AAChD,aAAa,mBAAO,CAAC,EAAM;AAC3B,gBAAgB,mBAAO,CAAC,EAAU;;AAElC;AACA;;AAEA;AACA;AACA;;AAEA,WAAW,KAAK,GAAG,YAAY;AAC/B;;AAEA,yDAAyD;AACzD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,EAAE;;AAEF;AACA;AACA;;AAEA;AACA;AACA,KAAK,gBAAgB;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA,iEAAiE,SAAS;AAC1E;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,IAAI;AACJ,wCAAwC,6BAA6B;AACrE;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;;AAE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B,EAAuCqB,KAAvC,EAA8C0E,QAAQ3E,QAAtD,CAFF;AAID;AACDsD,oBAAgB1E,UAAhB,EAA4BqB,KAA5B,EAAmC0E,QAAQ3E,QAA3C,EAAqD2E,QAAQnB,IAA7D;;AAEA,QAAImB,QAAQN,UAAZ,EAAwB;AACtBA,iBAAWzF,UAAX;AACD;AACF,GAhBD;;AAkBA,SAAOA,UAAP;AACD;;kBAEc4F,gB;;;;;;;ACnXF;;AAEb,WAAW,mBAAO,CAAC,EAAM;AACzB,eAAe,mBAAO,CAAC,EAAU;AACjC,eAAe,mBAAO,CAAC,EAAU;AACjC,aAAa,mBAAO,CAAC,EAAQ;AAC7B,gBAAgB,mBAAO,CAAC,EAAY;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,sEAAsE,aAAa;AACnF;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA,aAAa,gBAAgB,EAAE;AAC/B,aAAa,gBAAgB,EAAE;AAC/B,iBAAiB,oBAAoB,EAAE;AACvC,kBAAkB,qBAAqB,EAAE;AACzC,uBAAuB,0BAA0B,EAAE;AACnD,wBAAwB,2BAA2B,EAAE;AACrD;AACA;AACA;AACA;AACA;;;;;;;AC7KA;AACA;AACA,QAAQ,mBAAO,CAAC,EAAa;AAC7B,CAAC;AACD,QAAQ,mBAAO,CAAC,EAAI;AACpB;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe;AACf;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,eAAe;AACf;;AAEA;;AAEA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACpIA,SAAS,mBAAO,CAAC,EAAI;AACrB,gBAAgB,mBAAO,CAAC,EAAgB;AACxC,aAAa,mBAAO,CAAC,EAAqB;AAC1C,YAAY,mBAAO,CAAC,EAAY;;AAEhC;;AAEA,WAAW,mBAAO,CAAC,EAAM;;AAEzB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI,mBAAO,CAAC,EAAQ;AACpB,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6CAA6C;AAC7C;AACA;AACA;;AAEA;AACA;AACA,GAAG;AACH,EAAE;;AAEF,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA,EAAE;;AAEF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACtRA,gBAAgB,mBAAO,CAAC,EAAW;;AAEnC;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,MAAM;AACN;;AAEA;AACA,iCAAiC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ,yCAAyC;AACzC;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,WAAW;AACX,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX,SAAS;AACT;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,aAAa;AACb,WAAW;AACX;AACA;AACA;AACA;AACA;;AAEA,KAAK;AACL,8CAA8C;AAC9C;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;ACxUA,sC;;;;;;ACAA,aAAa,mBAAO,CAAC,EAAQ;;AAE7B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB;AACpB;;AAEA;;AAEA;AACA;AACA,6CAA6C,gBAAgB;AAC7D;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,OAAO;AACP;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,oBAAoB;AACpB;;AAEA;;AAEA;AACA;AACA,6CAA6C,gBAAgB;AAC7D;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACrHA,mC;;;;;;;ACAY;;AAEZ;;AAEA;AACA;AACA;;AAEA;AACA,gBAAgB;AAChB;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;;;;;;;AClBA,iC;;;;;;ACAA,mC;;;;;;ACAA,WAAW,mBAAO,CAAC,EAAM;AACzB,SAAS,mBAAO,CAAC,EAAI;AACrB;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA,gBAAgB;AAChB;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;;;;;;ACjGA;AACA,iBAAiB,mBAAO,CAAC,EAAe;AACxC,kBAAkB,mBAAO,CAAC,EAAuB;;AAEjD;AACA;AACA;AACA;AACA;;AAEA,GAAG;AACH;;AAEA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,cAAc;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG,YAAY;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA;AACA;AACA,yBAAyB,QAAQ;AACjC;AACA;AACA;AACA;AACA;;;;;;;AC7FA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACRA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;ACnBA;;;;;;IAEQ3B,c,GAAmBpF,iB,CAAnBoF,c;;;AAER,SAASM,iBAAT,CACEqF,OADF,EAEEa,WAFF,EAGE/E,SAHF,EAIEmE,YAJF,EAKE1G,cAL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e;;AAE1C;AACA;;AAEA,eAAe;;AAEf,yBAAyB,aAAa;;AAEtC;;AAEA,iBAAiB,YAAY;;AAE7B;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA,yCAAyC,yBAAyB;;AAElE;AACA;AACA;AACA;AACA;;AAEA;AACA,2CAA2C,0BAA0B;;AAErE;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,sCAAsC,sCAAsC;AAC5E,+BAA+B,sCAAsC;;AAErE;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,oCAAoC,6BAA6B;;AAEjE;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,oBAAoB,gBAAgB;;AAEpC;AACA,mBAAmB,IAAI,WAAW;;AAElC;AACA;AACA,E;;;;;;ACnLA,+B;;;;;;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAA0C;AAClD,QAAQ,oCAAO,UAAU;AAAA;AAAA;AAAA;AAAA,oGAAC;AAC1B,KAAK,MAAM,EAIN;AACL,CAAC;AACD;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB,SAAS;AACT;AACA,SAAS;AACT;AACA,SAAS;AACT;AACA;AACA;;AAEA;;AAEA;AACA;AACA,uBAAuB,uBAAuB;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA,qEAAqE;AACrE,WAAW;AACX;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW;;AAEX;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C;AAC1C;AACA,eAAe;AACf;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,qBAAqB;AACrB;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,CAAC;;;;;;;;;;;;;;ACzPD;;AAEA;;;;;;;;;;;;;AAaA,SAASkJ,UAAT,OAYG;AAAA,MAXDxC,iBAWC,QAXDA,iBAWC;AAAA,MAVDC,OAUC,QAVDA,OAUC;AAAA,MATDC,MASC,QATDA,MASC;AAAA,MARDC,OAQC,QARDA,OAQC;AAAA,MAPDC,SAOC,QAPDA,SAOC;AAAA,MANDC,kBAMC,QANDA,kBAMC;AAAA,MALD/B,MAKC,QALDA,MAKC;AAAA,MAJDE,SAIC,QAJDA,SAIC;AAAA,MAHDC,aAGC,QAHDA,aAGC;AAAA,MAFDZ,YAEC,QAFDA,YAEC;AAAA,MADDyC,eACC,QADDA,eACC;;AACD,MAAImC,eAAKC,kBAAL,EAAJ,EAA+B;AAC7B;AACD;AACD,MAAMC,iBACJtC,uBAAuB,GAAvB,GACI,YADJ,GAEK,kBAAiBA,qBAAqB,GAAI,uBAHjD;;AAK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;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;;;;ACnCA,0C;;;;;;ACAA;AACA;AACA;AACA;;AAEA;AACA,mBAAmB,mBAAO,CAAC,EAAc;AACzC,CAAC;AACD,mBAAmB,mBAAO,CAAC,EAAW;AACtC;;;;;;;ACTA;AACA;AACA;AACA;AACA;;AAEA,2BAA2B,mBAAO,CAAC,EAAS;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;;;;;;;;ACvLA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,mBAAO,CAAC,EAAI;;AAE/B;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;;AAEA;AACA;AACA,cAAc;AACd;;AAEA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,iBAAiB,SAAS;AAC1B,4BAA4B;AAC5B;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA,yCAAyC,SAAS;AAClD;AACA;AACA;AACA;AACA,yCAAyC,SAAS;AAClD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,MAAM;AACjB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;;;;;;;ACzMA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW,cAAc;AACzB,WAAW,OAAO;AAClB,YAAY,MAAM;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB,YAAY;AACZ;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;ACvJA;AACA;AACA;;AAEA,UAAU,mBAAO,CAAC,EAAK;AACvB,WAAW,mBAAO,CAAC,EAAM;;AAEzB;AACA;AACA;AACA;AACA;;AAEA,2BAA2B,mBAAO,CAAC,EAAS;AAC5C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA,2CAA2C,yBAAyB;;AAEpE;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC,IAAI;;AAEL;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,6BAA6B;AAC7B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,sCAAsC;;AAEtC;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,WAAW,OAAO;AAClB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA,YAAY,OAAO;AACnB;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,eAAe,mBAAO,CAAC,EAAI;AAC3B,2CAA2C,mBAAmB;AAC9D;AACA;;AAEA;AACA;AACA,gBAAgB,mBAAO,CAAC,EAAK;AAC7B;AACA;AACA;AACA;AACA,OAAO;;AAEP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;;;;;;ACvPA,gC;;;;;;ACAA,gC","file":"main.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","import 'source-map-support/register';\nimport fs from 'fs';\nimport path from 'path';\nimport { app, crashReporter, globalShortcut } from 'electron';\nimport electronDownload from 'electron-dl';\n\nimport createLoginWindow from './components/login/loginWindow';\nimport createMainWindow from './components/mainWindow/mainWindow';\nimport createTrayIcon from './components/trayIcon/trayIcon';\nimport helpers from './helpers/helpers';\nimport inferFlash from './helpers/inferFlash';\n\nconst electronSquirrelStartup = require('electron-squirrel-startup');\n\n// Entrypoint for electron-squirrel-startup.\n// See https://github.com/jiahaog/nativefier/pull/744 for sample use case\nif (electronSquirrelStartup) {\n  app.quit();\n}\n\nconst { isOSX } = helpers;\n\nconst APP_ARGS_FILE_PATH = path.join(__dirname, '..', 'nativefier.json');\nconst appArgs = JSON.parse(fs.readFileSync(APP_ARGS_FILE_PATH, 'utf8'));\n\nconst fileDownloadOptions = Object.assign({}, appArgs.fileDownloadOptions);\nelectronDownload(fileDownloadOptions);\n\nif (appArgs.processEnvs) {\n  Object.keys(appArgs.processEnvs).forEach((key) => {\n    /* eslint-env node */\n    process.env[key] = appArgs.processEnvs[key];\n  });\n}\n\nlet mainWindow;\n\nif (typeof appArgs.flashPluginDir === 'string') {\n  app.commandLine.appendSwitch('ppapi-flash-path', appArgs.flashPluginDir);\n} else if (appArgs.flashPluginDir) {\n  const flashPath = inferFlash();\n  app.commandLine.appendSwitch('ppapi-flash-path', flashPath);\n}\n\nif (appArgs.ignoreCertificate) {\n  app.commandLine.appendSwitch('ignore-certificate-errors');\n}\n\nif (appArgs.disableGpu) {\n  app.disableHardwareAcceleration();\n}\n\nif (appArgs.ignoreGpuBlacklist) {\n  app.commandLine.appendSwitch('ignore-gpu-blacklist');\n}\n\nif (appArgs.enableEs3Apis) {\n  app.commandLine.appendSwitch('enable-es3-apis');\n}\n\nif (appArgs.diskCacheSize) {\n  app.commandLine.appendSwitch('disk-cache-size', appArgs.diskCacheSize);\n}\n\nif (appArgs.basicAuthUsername) {\n  app.commandLine.appendSwitch(\n    'basic-auth-username',\n    appArgs.basicAuthUsername,\n  );\n}\n\nif (appArgs.basicAuthPassword) {\n  app.commandLine.appendSwitch(\n    'basic-auth-password',\n    appArgs.basicAuthPassword,\n  );\n}\n\n// do nothing for setDockBadge if not OSX\nlet setDockBadge = () => {};\n\nif (isOSX()) {\n  let currentBadgeCount = 0;\n\n  setDockBadge = (count, bounce = false) => {\n    app.dock.setBadge(count);\n    if (bounce && count > currentBadgeCount) app.dock.bounce();\n    currentBadgeCount = count;\n  };\n}\n\napp.on('window-all-closed', () => {\n  if (!isOSX() || appArgs.fastQuit) {\n    app.quit();\n  }\n});\n\napp.on('activate', (event, hasVisibleWindows) => {\n  if (isOSX()) {\n    // this is called when the dock is clicked\n    if (!hasVisibleWindows) {\n      mainWindow.show();\n    }\n  }\n});\n\napp.on('before-quit', () => {\n  // not fired when the close button on the window is clicked\n  if (isOSX()) {\n    // need to force a quit as a workaround here to simulate the osx app hiding behaviour\n    // Somehow sokution at https://github.com/atom/electron/issues/444#issuecomment-76492576 does not work,\n    // e.prevent default appears to persist\n\n    // might cause issues in the future as before-quit and will-quit events are not called\n    app.exit(0);\n  }\n});\n\nif (appArgs.crashReporter) {\n  app.on('will-finish-launching', () => {\n    crashReporter.start({\n      companyName: appArgs.companyName || '',\n      productName: appArgs.name,\n      submitURL: appArgs.crashReporter,\n      uploadToServer: true,\n    });\n  });\n}\n\n// quit if singleInstance mode and there's already another instance running\nconst shouldQuit = appArgs.singleInstance && !app.requestSingleInstanceLock();\nif (shouldQuit) {\n  app.quit();\n} else {\n  app.on('second-instance', () => {\n    if (mainWindow) {\n      if (!mainWindow.isVisible()) {\n        // try\n        mainWindow.show();\n      }\n      if (mainWindow.isMinimized()) {\n        // minimized\n        mainWindow.restore();\n      }\n      mainWindow.focus();\n    }\n  });\n\n  app.on('ready', () => {\n    mainWindow = createMainWindow(appArgs, app.quit, setDockBadge);\n    createTrayIcon(appArgs, mainWindow);\n\n    // Register global shortcuts\n    if (appArgs.globalShortcuts) {\n      appArgs.globalShortcuts.forEach((shortcut) => {\n        globalShortcut.register(shortcut.key, () => {\n          shortcut.inputEvents.forEach((inputEvent) => {\n            mainWindow.webContents.sendInputEvent(inputEvent);\n          });\n        });\n      });\n    }\n  });\n}\n\napp.on('new-window-for-tab', () => {\n  mainWindow.emit('new-tab');\n});\n\napp.on('login', (event, webContents, request, authInfo, callback) => {\n  // for http authentication\n  event.preventDefault();\n\n  if (\n    appArgs.basicAuthUsername !== null &&\n    appArgs.basicAuthPassword !== null\n  ) {\n    callback(appArgs.basicAuthUsername, appArgs.basicAuthPassword);\n  } else {\n    createLoginWindow(callback);\n  }\n});\n","require('./').install();\n","var SourceMapConsumer = require('source-map').SourceMapConsumer;\nvar path = require('path');\n\nvar fs;\ntry {\n  fs = require('fs');\n  if (!fs.existsSync || !fs.readFileSync) {\n    // fs doesn't have all methods we need\n    fs = null;\n  }\n} catch (err) {\n  /* nop */\n}\n\nvar bufferFrom = require('buffer-from');\n\n// Only install once if called multiple times\nvar errorFormatterInstalled = false;\nvar uncaughtShimInstalled = false;\n\n// If true, the caches are reset before a stack trace formatting operation\nvar emptyCacheBetweenOperations = false;\n\n// Supports {browser, node, auto}\nvar environment = \"auto\";\n\n// Maps a file path to a string containing the file contents\nvar fileContentsCache = {};\n\n// Maps a file path to a source map for that file\nvar sourceMapCache = {};\n\n// Regex for detecting source maps\nvar reSourceMap = /^data:application\\/json[^,]+base64,/;\n\n// Priority list of retrieve handlers\nvar retrieveFileHandlers = [];\nvar retrieveMapHandlers = [];\n\nfunction isInBrowser() {\n  if (environment === \"browser\")\n    return true;\n  if (environment === \"node\")\n    return false;\n  return ((typeof window !== 'undefined') && (typeof XMLHttpRequest === 'function') && !(window.require && window.module && window.process && window.process.type === \"renderer\"));\n}\n\nfunction hasGlobalProcessEventEmitter() {\n  return ((typeof process === 'object') && (process !== null) && (typeof process.on === 'function'));\n}\n\nfunction handlerExec(list) {\n  return function(arg) {\n    for (var i = 0; i < list.length; i++) {\n      var ret = list[i](arg);\n      if (ret) {\n        return ret;\n      }\n    }\n    return null;\n  };\n}\n\nvar retrieveFile = handlerExec(retrieveFileHandlers);\n\nretrieveFileHandlers.push(function(path) {\n  // Trim the path to make sure there is no extra whitespace.\n  path = path.trim();\n  if (/^file:/.test(path)) {\n    // existsSync/readFileSync can't handle file protocol, but once stripped, it works\n    path = path.replace(/file:\\/\\/\\/(\\w:)?/, function(protocol, drive) {\n      return drive ?\n        '' : // file:///C:/dir/file -> C:/dir/file\n        '/'; // file:///root-dir/file -> /root-dir/file\n    });\n  }\n  if (path in fileContentsCache) {\n    return fileContentsCache[path];\n  }\n\n  var contents = '';\n  try {\n    if (!fs) {\n      // Use SJAX if we are in the browser\n      var xhr = new XMLHttpRequest();\n      xhr.open('GET', path, /** async */ false);\n      xhr.send(null);\n      if (xhr.readyState === 4 && xhr.status === 200) {\n        contents = xhr.responseText;\n      }\n    } else if (fs.existsSync(path)) {\n      // Otherwise, use the filesystem\n      contents = fs.readFileSync(path, 'utf8');\n    }\n  } catch (er) {\n    /* ignore any errors */\n  }\n\n  return fileContentsCache[path] = contents;\n});\n\n// Support URLs relative to a directory, but be careful about a protocol prefix\n// in case we are in the browser (i.e. directories may start with \"http://\" or \"file:///\")\nfunction supportRelativeURL(file, url) {\n  if (!file) return url;\n  var dir = path.dirname(file);\n  var match = /^\\w+:\\/\\/[^\\/]*/.exec(dir);\n  var protocol = match ? match[0] : '';\n  var startPath = dir.slice(protocol.length);\n  if (protocol && /^\\/\\w\\:/.test(startPath)) {\n    // handle file:///C:/ paths\n    protocol += '/';\n    return protocol + path.resolve(dir.slice(protocol.length), url).replace(/\\\\/g, '/');\n  }\n  return protocol + path.resolve(dir.slice(protocol.length), url);\n}\n\nfunction retrieveSourceMapURL(source) {\n  var fileData;\n\n  if (isInBrowser()) {\n     try {\n       var xhr = new XMLHttpRequest();\n       xhr.open('GET', source, false);\n       xhr.send(null);\n       fileData = xhr.readyState === 4 ? xhr.responseText : null;\n\n       // Support providing a sourceMappingURL via the SourceMap header\n       var sourceMapHeader = xhr.getResponseHeader(\"SourceMap\") ||\n                             xhr.getResponseHeader(\"X-SourceMap\");\n       if (sourceMapHeader) {\n         return sourceMapHeader;\n       }\n     } catch (e) {\n     }\n  }\n\n  // Get the URL of the source map\n  fileData = retrieveFile(source);\n  var re = /(?:\\/\\/[@#][ \\t]+sourceMappingURL=([^\\s'\"]+?)[ \\t]*$)|(?:\\/\\*[@#][ \\t]+sourceMappingURL=([^\\*]+?)[ \\t]*(?:\\*\\/)[ \\t]*$)/mg;\n  // Keep executing the search to find the *last* sourceMappingURL to avoid\n  // picking up sourceMappingURLs from comments, strings, etc.\n  var lastMatch, match;\n  while (match = re.exec(fileData)) lastMatch = match;\n  if (!lastMatch) return null;\n  return lastMatch[1];\n};\n\n// Can be overridden by the retrieveSourceMap option to install. Takes a\n// generated source filename; returns a {map, optional url} object, or null if\n// there is no source map.  The map field may be either a string or the parsed\n// JSON object (ie, it must be a valid argument to the SourceMapConsumer\n// constructor).\nvar retrieveSourceMap = handlerExec(retrieveMapHandlers);\nretrieveMapHandlers.push(function(source) {\n  var sourceMappingURL = retrieveSourceMapURL(source);\n  if (!sourceMappingURL) return null;\n\n  // Read the contents of the source map\n  var sourceMapData;\n  if (reSourceMap.test(sourceMappingURL)) {\n    // Support source map URL as a data url\n    var rawData = sourceMappingURL.slice(sourceMappingURL.indexOf(',') + 1);\n    sourceMapData = bufferFrom(rawData, \"base64\").toString();\n    sourceMappingURL = source;\n  } else {\n    // Support source map URLs relative to the source URL\n    sourceMappingURL = supportRelativeURL(source, sourceMappingURL);\n    sourceMapData = retrieveFile(sourceMappingURL);\n  }\n\n  if (!sourceMapData) {\n    return null;\n  }\n\n  return {\n    url: sourceMappingURL,\n    map: sourceMapData\n  };\n});\n\nfunction mapSourcePosition(position) {\n  var sourceMap = sourceMapCache[position.source];\n  if (!sourceMap) {\n    // Call the (overrideable) retrieveSourceMap function to get the source map.\n    var urlAndMap = retrieveSourceMap(position.source);\n    if (urlAndMap) {\n      sourceMap = sourceMapCache[position.source] = {\n        url: urlAndMap.url,\n        map: new SourceMapConsumer(urlAndMap.map)\n      };\n\n      // Load all sources stored inline with the source map into the file cache\n      // to pretend like they are already loaded. They may not exist on disk.\n      if (sourceMap.map.sourcesContent) {\n        sourceMap.map.sources.forEach(function(source, i) {\n          var contents = sourceMap.map.sourcesContent[i];\n          if (contents) {\n            var url = supportRelativeURL(sourceMap.url, source);\n            fileContentsCache[url] = contents;\n          }\n        });\n      }\n    } else {\n      sourceMap = sourceMapCache[position.source] = {\n        url: null,\n        map: null\n      };\n    }\n  }\n\n  // Resolve the source URL relative to the URL of the source map\n  if (sourceMap && sourceMap.map && typeof sourceMap.map.originalPositionFor === 'function') {\n    var originalPosition = sourceMap.map.originalPositionFor(position);\n\n    // Only return the original position if a matching line was found. If no\n    // matching line is found then we return position instead, which will cause\n    // the stack trace to print the path and line for the compiled file. It is\n    // better to give a precise location in the compiled file than a vague\n    // location in the original file.\n    if (originalPosition.source !== null) {\n      originalPosition.source = supportRelativeURL(\n        sourceMap.url, originalPosition.source);\n      return originalPosition;\n    }\n  }\n\n  return position;\n}\n\n// Parses code generated by FormatEvalOrigin(), a function inside V8:\n// https://code.google.com/p/v8/source/browse/trunk/src/messages.js\nfunction mapEvalOrigin(origin) {\n  // Most eval() calls are in this format\n  var match = /^eval at ([^(]+) \\((.+):(\\d+):(\\d+)\\)$/.exec(origin);\n  if (match) {\n    var position = mapSourcePosition({\n      source: match[2],\n      line: +match[3],\n      column: match[4] - 1\n    });\n    return 'eval at ' + match[1] + ' (' + position.source + ':' +\n      position.line + ':' + (position.column + 1) + ')';\n  }\n\n  // Parse nested eval() calls using recursion\n  match = /^eval at ([^(]+) \\((.+)\\)$/.exec(origin);\n  if (match) {\n    return 'eval at ' + match[1] + ' (' + mapEvalOrigin(match[2]) + ')';\n  }\n\n  // Make sure we still return useful information if we didn't find anything\n  return origin;\n}\n\n// This is copied almost verbatim from the V8 source code at\n// https://code.google.com/p/v8/source/browse/trunk/src/messages.js. The\n// implementation of wrapCallSite() used to just forward to the actual source\n// code of CallSite.prototype.toString but unfortunately a new release of V8\n// did something to the prototype chain and broke the shim. The only fix I\n// could find was copy/paste.\nfunction CallSiteToString() {\n  var fileName;\n  var fileLocation = \"\";\n  if (this.isNative()) {\n    fileLocation = \"native\";\n  } else {\n    fileName = this.getScriptNameOrSourceURL();\n    if (!fileName && this.isEval()) {\n      fileLocation = this.getEvalOrigin();\n      fileLocation += \", \";  // Expecting source position to follow.\n    }\n\n    if (fileName) {\n      fileLocation += fileName;\n    } else {\n      // Source code does not originate from a file and is not native, but we\n      // can still get the source position inside the source string, e.g. in\n      // an eval string.\n      fileLocation += \"<anonymous>\";\n    }\n    var lineNumber = this.getLineNumber();\n    if (lineNumber != null) {\n      fileLocation += \":\" + lineNumber;\n      var columnNumber = this.getColumnNumber();\n      if (columnNumber) {\n        fileLocation += \":\" + columnNumber;\n      }\n    }\n  }\n\n  var line = \"\";\n  var functionName = this.getFunctionName();\n  var addSuffix = true;\n  var isConstructor = this.isConstructor();\n  var isMethodCall = !(this.isToplevel() || isConstructor);\n  if (isMethodCall) {\n    var typeName = this.getTypeName();\n    // Fixes shim to be backward compatable with Node v0 to v4\n    if (typeName === \"[object Object]\") {\n      typeName = \"null\";\n    }\n    var methodName = this.getMethodName();\n    if (functionName) {\n      if (typeName && functionName.indexOf(typeName) != 0) {\n        line += typeName + \".\";\n      }\n      line += functionName;\n      if (methodName && functionName.indexOf(\".\" + methodName) != functionName.length - methodName.length - 1) {\n        line += \" [as \" + methodName + \"]\";\n      }\n    } else {\n      line += typeName + \".\" + (methodName || \"<anonymous>\");\n    }\n  } else if (isConstructor) {\n    line += \"new \" + (functionName || \"<anonymous>\");\n  } else if (functionName) {\n    line += functionName;\n  } else {\n    line += fileLocation;\n    addSuffix = false;\n  }\n  if (addSuffix) {\n    line += \" (\" + fileLocation + \")\";\n  }\n  return line;\n}\n\nfunction cloneCallSite(frame) {\n  var object = {};\n  Object.getOwnPropertyNames(Object.getPrototypeOf(frame)).forEach(function(name) {\n    object[name] = /^(?:is|get)/.test(name) ? function() { return frame[name].call(frame); } : frame[name];\n  });\n  object.toString = CallSiteToString;\n  return object;\n}\n\nfunction wrapCallSite(frame) {\n  if(frame.isNative()) {\n    return frame;\n  }\n\n  // Most call sites will return the source file from getFileName(), but code\n  // passed to eval() ending in \"//# sourceURL=...\" will return the source file\n  // from getScriptNameOrSourceURL() instead\n  var source = frame.getFileName() || frame.getScriptNameOrSourceURL();\n  if (source) {\n    var line = frame.getLineNumber();\n    var column = frame.getColumnNumber() - 1;\n\n    // Fix position in Node where some (internal) code is prepended.\n    // See https://github.com/evanw/node-source-map-support/issues/36\n    var headerLength = 62;\n    if (line === 1 && column > headerLength && !isInBrowser() && !frame.isEval()) {\n      column -= headerLength;\n    }\n\n    var position = mapSourcePosition({\n      source: source,\n      line: line,\n      column: column\n    });\n    frame = cloneCallSite(frame);\n    var originalFunctionName = frame.getFunctionName;\n    frame.getFunctionName = function() { return position.name || originalFunctionName(); };\n    frame.getFileName = function() { return position.source; };\n    frame.getLineNumber = function() { return position.line; };\n    frame.getColumnNumber = function() { return position.column + 1; };\n    frame.getScriptNameOrSourceURL = function() { return position.source; };\n    return frame;\n  }\n\n  // Code called using eval() needs special handling\n  var origin = frame.isEval() && frame.getEvalOrigin();\n  if (origin) {\n    origin = mapEvalOrigin(origin);\n    frame = cloneCallSite(frame);\n    frame.getEvalOrigin = function() { return origin; };\n    return frame;\n  }\n\n  // If we get here then we were unable to change the source position\n  return frame;\n}\n\n// This function is part of the V8 stack trace API, for more info see:\n// http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi\nfunction prepareStackTrace(error, stack) {\n  if (emptyCacheBetweenOperations) {\n    fileContentsCache = {};\n    sourceMapCache = {};\n  }\n\n  return error + stack.map(function(frame) {\n    return '\\n    at ' + wrapCallSite(frame);\n  }).join('');\n}\n\n// Generate position and snippet of original source with pointer\nfunction getErrorSource(error) {\n  var match = /\\n    at [^(]+ \\((.*):(\\d+):(\\d+)\\)/.exec(error.stack);\n  if (match) {\n    var source = match[1];\n    var line = +match[2];\n    var column = +match[3];\n\n    // Support the inline sourceContents inside the source map\n    var contents = fileContentsCache[source];\n\n    // Support files on disk\n    if (!contents && fs && fs.existsSync(source)) {\n      try {\n        contents = fs.readFileSync(source, 'utf8');\n      } catch (er) {\n        contents = '';\n      }\n    }\n\n    // Format the line from the original source code like node does\n    if (contents) {\n      var code = contents.split(/(?:\\r\\n|\\r|\\n)/)[line - 1];\n      if (code) {\n        return source + ':' + line + '\\n' + code + '\\n' +\n          new Array(column).join(' ') + '^';\n      }\n    }\n  }\n  return null;\n}\n\nfunction printErrorAndExit (error) {\n  var source = getErrorSource(error);\n\n  // Ensure error is printed synchronously and not truncated\n  if (process.stderr._handle && process.stderr._handle.setBlocking) {\n    process.stderr._handle.setBlocking(true);\n  }\n\n  if (source) {\n    console.error();\n    console.error(source);\n  }\n\n  console.error(error.stack);\n  process.exit(1);\n}\n\nfunction shimEmitUncaughtException () {\n  var origEmit = process.emit;\n\n  process.emit = function (type) {\n    if (type === 'uncaughtException') {\n      var hasStack = (arguments[1] && arguments[1].stack);\n      var hasListeners = (this.listeners(type).length > 0);\n\n      if (hasStack && !hasListeners) {\n        return printErrorAndExit(arguments[1]);\n      }\n    }\n\n    return origEmit.apply(this, arguments);\n  };\n}\n\nvar originalRetrieveFileHandlers = retrieveFileHandlers.slice(0);\nvar originalRetrieveMapHandlers = retrieveMapHandlers.slice(0);\n\nexports.wrapCallSite = wrapCallSite;\nexports.getErrorSource = getErrorSource;\nexports.mapSourcePosition = mapSourcePosition;\nexports.retrieveSourceMap = retrieveSourceMap;\n\nexports.install = function(options) {\n  options = options || {};\n\n  if (options.environment) {\n    environment = options.environment;\n    if ([\"node\", \"browser\", \"auto\"].indexOf(environment) === -1) {\n      throw new Error(\"environment \" + environment + \" was unknown. Available options are {auto, browser, node}\")\n    }\n  }\n\n  // Allow sources to be found by methods other than reading the files\n  // directly from disk.\n  if (options.retrieveFile) {\n    if (options.overrideRetrieveFile) {\n      retrieveFileHandlers.length = 0;\n    }\n\n    retrieveFileHandlers.unshift(options.retrieveFile);\n  }\n\n  // Allow source maps to be found by methods other than reading the files\n  // directly from disk.\n  if (options.retrieveSourceMap) {\n    if (options.overrideRetrieveSourceMap) {\n      retrieveMapHandlers.length = 0;\n    }\n\n    retrieveMapHandlers.unshift(options.retrieveSourceMap);\n  }\n\n  // Support runtime transpilers that include inline source maps\n  if (options.hookRequire && !isInBrowser()) {\n    var Module;\n    try {\n      Module = require('module');\n    } catch (err) {\n      // NOP: Loading in catch block to convert webpack error to warning.\n    }\n    var $compile = Module.prototype._compile;\n\n    if (!$compile.__sourceMapSupport) {\n      Module.prototype._compile = function(content, filename) {\n        fileContentsCache[filename] = content;\n        sourceMapCache[filename] = undefined;\n        return $compile.call(this, content, filename);\n      };\n\n      Module.prototype._compile.__sourceMapSupport = true;\n    }\n  }\n\n  // Configure options\n  if (!emptyCacheBetweenOperations) {\n    emptyCacheBetweenOperations = 'emptyCacheBetweenOperations' in options ?\n      options.emptyCacheBetweenOperations : false;\n  }\n\n  // Install the error reformatter\n  if (!errorFormatterInstalled) {\n    errorFormatterInstalled = true;\n    Error.prepareStackTrace = prepareStackTrace;\n  }\n\n  if (!uncaughtShimInstalled) {\n    var installHandler = 'handleUncaughtExceptions' in options ?\n      options.handleUncaughtExceptions : true;\n\n    // Provide the option to not install the uncaught exception handler. This is\n    // to support other uncaught exception handlers (in test frameworks, for\n    // example). If this handler is not installed and there are no other uncaught\n    // exception handlers, uncaught exceptions will be caught by node's built-in\n    // exception handler and the process will still be terminated. However, the\n    // generated JavaScript code will be shown above the stack trace instead of\n    // the original source code.\n    if (installHandler && hasGlobalProcessEventEmitter()) {\n      uncaughtShimInstalled = true;\n      shimEmitUncaughtException();\n    }\n  }\n};\n\nexports.resetRetrieveHandlers = function() {\n  retrieveFileHandlers.length = 0;\n  retrieveMapHandlers.length = 0;\n\n  retrieveFileHandlers = originalRetrieveFileHandlers.slice(0);\n  retrieveMapHandlers = originalRetrieveMapHandlers.slice(0);\n  \n  retrieveSourceMap = handlerExec(retrieveMapHandlers);\n  retrieveFile = handlerExec(retrieveFileHandlers);\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;\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}\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 =\n  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\n      if (mapping.source != null) {\n        newMapping.source = mapping.source;\n        if (sourceRoot != null) {\n          newMapping.source = util.relative(sourceRoot, newMapping.source);\n        }\n\n        newMapping.original = {\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        };\n\n        if (mapping.name != null) {\n          newMapping.name = mapping.name;\n        }\n      }\n\n      generator.addMapping(newMapping);\n    });\n    aSourceMapConsumer.sources.forEach(function (sourceFile) {\n      var sourceRelative = sourceFile;\n      if (sourceRoot !== null) {\n        sourceRelative = util.relative(sourceRoot, sourceFile);\n      }\n\n      if (!generator._sources.has(sourceRelative)) {\n        generator._sources.add(sourceRelative);\n      }\n\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 =\n  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\n    if (!this._skipValidation) {\n      this._validateMapping(generated, original, source, name);\n    }\n\n    if (source != null) {\n      source = String(source);\n      if (!this._sources.has(source)) {\n        this._sources.add(source);\n      }\n    }\n\n    if (name != null) {\n      name = String(name);\n      if (!this._names.has(name)) {\n        this._names.add(name);\n      }\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 =\n  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n    var source = aSourceFile;\n    if (this._sourceRoot != null) {\n      source = util.relative(this._sourceRoot, source);\n    }\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 =\n  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(\n          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n          'or the source map\\'s \"file\" property. Both were omitted.'\n        );\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\n      var source = mapping.source;\n      if (source != null && !newSources.has(source)) {\n        newSources.add(source);\n      }\n\n      var name = mapping.name;\n      if (name != null && !newNames.has(name)) {\n        newNames.add(name);\n      }\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 =\n  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n                                              aName) {\n    // When aOriginal is truthy but has empty values for .line and .column,\n    // it is most likely a programmer error. In this case we throw a very\n    // specific error message to try to guide them the right way.\n    // For example: https://github.com/Polymer/polymer-bundler/pull/519\n    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n        throw new Error(\n            'original.line and original.column are not numbers -- you probably meant to omit ' +\n            'the original mapping entirely and only map the generated position. If so, pass ' +\n            'null for the original mapping instead of an object with empty or null values.'\n        );\n    }\n\n    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n        && aGenerated.line > 0 && aGenerated.column >= 0\n        && !aOriginal && !aSource && !aName) {\n      // Case 1.\n      return;\n    }\n    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n             && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n             && aGenerated.line > 0 && aGenerated.column >= 0\n             && aOriginal.line > 0 && aOriginal.column >= 0\n             && aSource) {\n      // Cases 2 and 3.\n      return;\n    }\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 =\n  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\n    var mappings = this._mappings.toArray();\n    for (var i = 0, len = mappings.length; i < len; i++) {\n      mapping = mappings[i];\n      next = ''\n\n      if (mapping.generatedLine !== previousGeneratedLine) {\n        previousGeneratedColumn = 0;\n        while (mapping.generatedLine !== previousGeneratedLine) {\n          next += ';';\n          previousGeneratedLine++;\n        }\n      }\n      else {\n        if (i > 0) {\n          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n            continue;\n          }\n          next += ',';\n        }\n      }\n\n      next += base64VLQ.encode(mapping.generatedColumn\n                                 - previousGeneratedColumn);\n      previousGeneratedColumn = mapping.generatedColumn;\n\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\n                                   - previousOriginalLine);\n        previousOriginalLine = mapping.originalLine - 1;\n\n        next += base64VLQ.encode(mapping.originalColumn\n                                   - previousOriginalColumn);\n        previousOriginalColumn = mapping.originalColumn;\n\n        if (mapping.name != null) {\n          nameIdx = this._names.indexOf(mapping.name);\n          next += base64VLQ.encode(nameIdx - previousName);\n          previousName = nameIdx;\n        }\n      }\n\n      result += next;\n    }\n\n    return result;\n  };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n  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)\n        ? this._sourcesContents[key]\n        : null;\n    }, this);\n  };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n  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\n    return map;\n  };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n  function SourceMapGenerator_toString() {\n    return JSON.stringify(this.toJSON());\n  };\n\nexports.SourceMapGenerator = SourceMapGenerator;\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 * 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\n    ? ((-aValue) << 1) + 1\n    : (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\n    ? -shifted\n    : 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\n  var vlq = toVLQSigned(aValue);\n\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\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\n  do {\n    if (aIndex >= strLen) {\n      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n    }\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\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\n  aOutParam.value = fromVLQSigned(result);\n  aOutParam.rest = aIndex;\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 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};\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;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\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;\n\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\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\n  if (path === '') {\n    path = isAbsolute ? '/' : '.';\n  }\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\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\n  var joined = aPath.charAt(0) === '/'\n    ? aPath\n    : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n  if (aRootUrl) {\n    aRootUrl.path = joined;\n    return urlGenerate(aRootUrl);\n  }\n  return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\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\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\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;\n\nvar supportsNullProto = (function () {\n  var obj = Object.create(null);\n  return !('__proto__' in obj);\n}());\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\n  return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return aStr.slice(1);\n  }\n\n  return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n  if (!s) {\n    return false;\n  }\n\n  var length = s.length;\n\n  if (length < 9 /* \"__proto__\".length */) {\n    return false;\n  }\n\n  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 2) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n      s.charCodeAt(length - 8) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 9) !== 95  /* '_' */) {\n    return false;\n  }\n\n  for (var i = length - 10; i >= 0; i--) {\n    if (s.charCodeAt(i) !== 36 /* '$' */) {\n      return false;\n    }\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 = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(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\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n  if (aStr1 === aStr2) {\n    return 0;\n  }\n\n  if (aStr1 === null) {\n    return 1; // aStr2 !== null\n  }\n\n  if (aStr2 === null) {\n    return -1; // aStr1 !== null\n  }\n\n  if (aStr1 > aStr2) {\n    return 1;\n  }\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\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented\n * in the source maps specification), and then parse the string as\n * JSON.\n */\nfunction parseSourceMapInput(str) {\n  return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n}\nexports.parseSourceMapInput = parseSourceMapInput;\n\n/**\n * Compute the URL of a source given the the source root, the source's\n * URL, and the source map's URL.\n */\nfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n  sourceURL = sourceURL || '';\n\n  if (sourceRoot) {\n    // This follows what Chrome does.\n    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n      sourceRoot += '/';\n    }\n    // The spec says:\n    //   Line 4: An optional source root, useful for relocating source\n    //   files on a server or removing repeated values in the\n    //   “sources” entry.  This value is prepended to the individual\n    //   entries in the “source” field.\n    sourceURL = sourceRoot + sourceURL;\n  }\n\n  // Historically, SourceMapConsumer did not take the sourceMapURL as\n  // a parameter.  This mode is still somewhat supported, which is why\n  // this code block is conditional.  However, it's preferable to pass\n  // the source map URL to SourceMapConsumer, so that this function\n  // can implement the source URL resolution algorithm as outlined in\n  // the spec.  This block is basically the equivalent of:\n  //    new URL(sourceURL, sourceMapURL).toString()\n  // ... except it avoids using URL, which wasn't available in the\n  // older releases of node still supported by this library.\n  //\n  // The spec says:\n  //   If the sources are not absolute URLs after prepending of the\n  //   “sourceRoot”, the sources are resolved relative to the\n  //   SourceMap (like resolving script src in a html document).\n  if (sourceMapURL) {\n    var parsed = urlParse(sourceMapURL);\n    if (!parsed) {\n      throw new Error(\"sourceMapURL could not be parsed\");\n    }\n    if (parsed.path) {\n      // Strip the last path component, but keep the \"/\".\n      var index = parsed.path.lastIndexOf('/');\n      if (index >= 0) {\n        parsed.path = parsed.path.substring(0, index + 1);\n      }\n    }\n    sourceURL = join(urlGenerate(parsed), sourceURL);\n  }\n\n  return normalize(sourceURL);\n}\nexports.computeSourceURL = computeSourceURL;\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;\nvar hasNativeMap = typeof Map !== \"undefined\";\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 = hasNativeMap ? new Map() : 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 hasNativeMap ? this._set.size : 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 = hasNativeMap ? aStr : util.toSetString(aStr);\n  var isDuplicate = hasNativeMap ? this.has(aStr) : 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    if (hasNativeMap) {\n      this._set.set(aStr, idx);\n    } else {\n      this._set[sStr] = idx;\n    }\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  if (hasNativeMap) {\n    return this._set.has(aStr);\n  } else {\n    var sStr = util.toSetString(aStr);\n    return has.call(this._set, sStr);\n  }\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  if (hasNativeMap) {\n    var idx = this._set.get(aStr);\n    if (idx >= 0) {\n        return idx;\n    }\n  } else {\n    var sStr = util.toSetString(aStr);\n    if (has.call(this._set, sStr)) {\n      return this._set[sStr];\n    }\n  }\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};\n\nexports.ArraySet = ArraySet;\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 ||\n         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 = {generatedLine: -1, generatedColumn: 0};\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 =\n  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};\n\nexports.MappingList = MappingList;\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 binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  return sourceMap.sections != null\n    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\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  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__generatedMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__generatedMappings;\n  }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n  configurable: true,\n  enumerable: true,\n  get: function () {\n    if (!this.__originalMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n\n    return this.__originalMappings;\n  }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n  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 =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    throw new Error(\"Subclasses must implement _parseMappings\");\n  };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\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 =\n  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n    var context = aContext || null;\n    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\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\n    var sourceRoot = this.sourceRoot;\n    mappings.map(function (mapping) {\n      var source = mapping.source === null ? null : this._sources.at(mapping.source);\n      source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);\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.  The line number is 1-based.\n *   - column: Optional. the column number in the original source.\n *    The column number is 0-based.\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.  The\n *    line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *    The column number is 0-based.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n  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\n    needle.source = this._findSourceIndex(needle.source);\n    if (needle.source < 0) {\n      return [];\n    }\n\n    var mappings = [];\n\n    var index = this._findMapping(needle,\n                                  this._originalMappings,\n                                  \"originalLine\",\n                                  \"originalColumn\",\n                                  util.compareByOriginalPositions,\n                                  binarySearch.LEAST_UPPER_BOUND);\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\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\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 &&\n               mapping.originalLine === line &&\n               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\n          mapping = this._originalMappings[++index];\n        }\n      }\n    }\n\n    return mappings;\n  };\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 first 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 * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\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\n  if (sourceRoot) {\n    sourceRoot = util.normalize(sourceRoot);\n  }\n\n  sources = sources\n    .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)\n        ? util.relative(sourceRoot, source)\n        : 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\n  this._absoluteSources = this._sources.toArray().map(function (s) {\n    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n  });\n\n  this.sourceRoot = sourceRoot;\n  this.sourcesContent = sourcesContent;\n  this._mappings = mappings;\n  this._sourceMapURL = aSourceMapURL;\n  this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Utility function to find the index of a source.  Returns -1 if not\n * found.\n */\nBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n  var relativeSource = aSource;\n  if (this.sourceRoot != null) {\n    relativeSource = util.relative(this.sourceRoot, relativeSource);\n  }\n\n  if (this._sources.has(relativeSource)) {\n    return this._sources.indexOf(relativeSource);\n  }\n\n  // Maybe aSource is an absolute URL as returned by |sources|.  In\n  // this case we can't simply undo the transform.\n  var i;\n  for (i = 0; i < this._absoluteSources.length; ++i) {\n    if (this._absoluteSources[i] == aSource) {\n      return i;\n    }\n  }\n\n  return -1;\n};\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n *        The source map that will be consumed.\n * @param String aSourceMapURL\n *        The URL at which the source map can be found (optional)\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n    var smc = Object.create(BasicSourceMapConsumer.prototype);\n\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(),\n                                                            smc.sourceRoot);\n    smc.file = aSourceMap._file;\n    smc._sourceMapURL = aSourceMapURL;\n    smc._absoluteSources = smc._sources.toArray().map(function (s) {\n      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n    });\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\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\n      if (srcMapping.source) {\n        destMapping.source = sources.indexOf(srcMapping.source);\n        destMapping.originalLine = srcMapping.originalLine;\n        destMapping.originalColumn = srcMapping.originalColumn;\n\n        if (srcMapping.name) {\n          destMapping.name = names.indexOf(srcMapping.name);\n        }\n\n        destOriginalMappings.push(destMapping);\n      }\n\n      destGeneratedMappings.push(destMapping);\n    }\n\n    quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\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._absoluteSources.slice();\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 =\n  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\n    while (index < length) {\n      if (aStr.charAt(index) === ';') {\n        generatedLine++;\n        index++;\n        previousGeneratedColumn = 0;\n      }\n      else if (aStr.charAt(index) === ',') {\n        index++;\n      }\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\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\n          if (segment.length === 2) {\n            throw new Error('Found a source, but no line and column');\n          }\n\n          if (segment.length === 3) {\n            throw new Error('Found a source and line, but no column');\n          }\n\n          cachedSegments[str] = segment;\n        }\n\n        // Generated column.\n        mapping.generatedColumn = previousGeneratedColumn + segment[0];\n        previousGeneratedColumn = mapping.generatedColumn;\n\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\n          if (segment.length > 4) {\n            // Original name.\n            mapping.name = previousName + segment[4];\n            previousName += segment[4];\n          }\n        }\n\n        generatedMappings.push(mapping);\n        if (typeof mapping.originalLine === 'number') {\n          originalMappings.push(mapping);\n        }\n      }\n    }\n\n    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n    this.__generatedMappings = generatedMappings;\n\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 =\n  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n                                         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 '\n                          + aNeedle[aLineName]);\n    }\n    if (aNeedle[aColumnName] < 0) {\n      throw new TypeError('Column must be greater than or equal to 0, got '\n                          + aNeedle[aColumnName]);\n    }\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 =\n  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\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.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\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.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n  function SourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._generatedMappings,\n      \"generatedLine\",\n      \"generatedColumn\",\n      util.compareByGeneratedPositionsDeflated,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._generatedMappings[index];\n\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          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\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\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 =\n  function BasicSourceMapConsumer_hasContentsOfAllSources() {\n    if (!this.sourcesContent) {\n      return false;\n    }\n    return this.sourcesContent.length >= this._sources.size() &&\n      !this.sourcesContent.some(function (sc) { return sc == null; });\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 =\n  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    if (!this.sourcesContent) {\n      return null;\n    }\n\n    var index = this._findSourceIndex(aSource);\n    if (index >= 0) {\n      return this.sourcesContent[index];\n    }\n\n    var relativeSource = aSource;\n    if (this.sourceRoot != null) {\n      relativeSource = util.relative(this.sourceRoot, relativeSource);\n    }\n\n    var url;\n    if (this.sourceRoot != null\n        && (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 = relativeSource.replace(/^file:\\/\\//, \"\");\n      if (url.scheme == \"file\"\n          && this._sources.has(fileUriAbsPath)) {\n        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n      }\n\n      if ((!url.path || url.path == \"/\")\n          && this._sources.has(\"/\" + relativeSource)) {\n        return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\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    }\n    else {\n      throw new Error('\"' + relativeSource + '\" 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.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\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.  The\n *     line number is 1-based.\n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n  function SourceMapConsumer_generatedPositionFor(aArgs) {\n    var source = util.getArg(aArgs, 'source');\n    source = this._findSourceIndex(source);\n    if (source < 0) {\n      return {\n        line: null,\n        column: null,\n        lastColumn: null\n      };\n    }\n\n    var needle = {\n      source: source,\n      originalLine: util.getArg(aArgs, 'line'),\n      originalColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._originalMappings,\n      \"originalLine\",\n      \"originalColumn\",\n      util.compareByOriginalPositions,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\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\n    return {\n      line: null,\n      column: null,\n      lastColumn: null\n    };\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 first 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 * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found.  This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = util.parseSourceMapInput(aSourceMap);\n  }\n\n  var version = util.getArg(sourceMap, 'version');\n  var sections = util.getArg(sourceMap, 'sections');\n\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n\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\n    if (offsetLine < lastOffset.line ||\n        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n      throw new Error('Section offsets must be ordered and non-overlapping.');\n    }\n    lastOffset = offset;\n\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'), aSourceMapURL)\n    }\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.  The line number\n *     is 1-based.\n *   - column: The column number in the generated source.  The column\n *     number is 0-based.\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.  The\n *     line number is 1-based.\n *   - column: The column number in the original source, or null.  The\n *     column number is 0-based.\n *   - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n  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,\n      function(needle, section) {\n        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n        if (cmp) {\n          return cmp;\n        }\n\n        return (needle.generatedColumn -\n                section.generatedOffset.generatedColumn);\n      });\n    var section = this._sections[sectionIndex];\n\n    if (!section) {\n      return {\n        source: null,\n        line: null,\n        column: null,\n        name: null\n      };\n    }\n\n    return section.consumer.originalPositionFor({\n      line: needle.generatedLine -\n        (section.generatedOffset.generatedLine - 1),\n      column: needle.generatedColumn -\n        (section.generatedOffset.generatedLine === needle.generatedLine\n         ? section.generatedOffset.generatedColumn - 1\n         : 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 =\n  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 =\n  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      var content = section.consumer.sourceContentFor(aSource, true);\n      if (content) {\n        return content;\n      }\n    }\n    if (nullOnMissing) {\n      return null;\n    }\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.  The line number\n *     is 1-based.\n *   - column: The column number in the original source.  The column\n *     number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.  The\n *     line number is 1-based. \n *   - column: The column number in the generated source, or null.\n *     The column number is 0-based.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n  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._findSourceIndex(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 +\n            (section.generatedOffset.generatedLine - 1),\n          column: generatedPosition.column +\n            (section.generatedOffset.generatedLine === generatedPosition.line\n             ? section.generatedOffset.generatedColumn - 1\n             : 0)\n        };\n        return ret;\n      }\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 =\n  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\n        var source = section.consumer._sources.at(mapping.source);\n        source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n        this._sources.add(source);\n        source = this._sources.indexOf(source);\n\n        var name = null;\n        if (mapping.name) {\n          name = section.consumer._names.at(mapping.name);\n          this._names.add(name);\n          name = this._names.indexOf(name);\n        }\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 +\n            (section.generatedOffset.generatedLine - 1),\n          generatedColumn: mapping.generatedColumn +\n            (section.generatedOffset.generatedLine === mapping.generatedLine\n            ? section.generatedOffset.generatedColumn - 1\n            : 0),\n          originalLine: mapping.originalLine,\n          originalColumn: mapping.originalColumn,\n          name: name\n        };\n\n        this.__generatedMappings.push(adjustedMapping);\n        if (typeof adjustedMapping.originalLine === 'number') {\n          this.__originalMappings.push(adjustedMapping);\n        }\n      }\n    }\n\n    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n    quickSort(this.__originalMappings, util.compareByOriginalPositions);\n  };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\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\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  }\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  }\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\n  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n                              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\n  return index;\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\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\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\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};\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 =\n  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 accessed by calling `shiftNextLine`.\n    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n    var remainingLinesIndex = 0;\n    var shiftNextLine = function() {\n      var lineContents = getNextLine();\n      // The last line of a file might not have a newline.\n      var newLine = getNextLine() || \"\";\n      return lineContents + newLine;\n\n      function getNextLine() {\n        return remainingLinesIndex < remainingLines.length ?\n            remainingLines[remainingLinesIndex++] : undefined;\n      }\n    };\n\n    // We need to remember the position of \"remainingLines\"\n    var lastGeneratedLine = 1, 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\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[remainingLinesIndex] || '';\n          var code = nextLine.substr(0, mapping.generatedColumn -\n                                        lastGeneratedColumn);\n          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n                                              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[remainingLinesIndex] || '';\n        node.add(nextLine.substr(0, mapping.generatedColumn));\n        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n        lastGeneratedColumn = mapping.generatedColumn;\n      }\n      lastMapping = mapping;\n    }, this);\n    // We have processed all mappings.\n    if (remainingLinesIndex < remainingLines.length) {\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.splice(remainingLinesIndex).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\n    return node;\n\n    function addMappingWithCode(mapping, code) {\n      if (mapping === null || mapping.source === undefined) {\n        node.add(code);\n      } else {\n        var source = aRelativePath\n          ? util.join(aRelativePath, mapping.source)\n          : mapping.source;\n        node.add(new SourceNode(mapping.originalLine,\n                                mapping.originalColumn,\n                                source,\n                                code,\n                                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  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    if (aChunk) {\n      this.children.push(aChunk);\n    }\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\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  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    this.children.unshift(aChunk);\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\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    }\n    else {\n      if (chunk !== '') {\n        aFn(chunk, { source: this.source,\n                     line: this.line,\n                     column: this.column,\n                     name: this.name });\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  }\n  else if (typeof lastChild === 'string') {\n    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n  }\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 =\n  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 =\n  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\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\n        && original.line !== null\n        && original.column !== null) {\n      if(lastOriginalSource !== original.source\n         || lastOriginalLine !== original.line\n         || lastOriginalColumn !== original.column\n         || 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\n  return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n","module.exports = require(\"path\");","module.exports = require(\"fs\");","var toString = Object.prototype.toString\n\nvar isModern = (\n  typeof Buffer.alloc === 'function' &&\n  typeof Buffer.allocUnsafe === 'function' &&\n  typeof Buffer.from === 'function'\n)\n\nfunction isArrayBuffer (input) {\n  return toString.call(input).slice(8, -1) === 'ArrayBuffer'\n}\n\nfunction fromArrayBuffer (obj, byteOffset, length) {\n  byteOffset >>>= 0\n\n  var maxLength = obj.byteLength - byteOffset\n\n  if (maxLength < 0) {\n    throw new RangeError(\"'offset' is out of bounds\")\n  }\n\n  if (length === undefined) {\n    length = maxLength\n  } else {\n    length >>>= 0\n\n    if (length > maxLength) {\n      throw new RangeError(\"'length' is out of bounds\")\n    }\n  }\n\n  return isModern\n    ? Buffer.from(obj.slice(byteOffset, byteOffset + length))\n    : new Buffer(new Uint8Array(obj.slice(byteOffset, byteOffset + length)))\n}\n\nfunction fromString (string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  return isModern\n    ? Buffer.from(string, encoding)\n    : new Buffer(string, encoding)\n}\n\nfunction bufferFrom (value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (isArrayBuffer(value)) {\n    return fromArrayBuffer(value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(value, encodingOrOffset)\n  }\n\n  return isModern\n    ? Buffer.from(value)\n    : new Buffer(value)\n}\n\nmodule.exports = bufferFrom\n","module.exports = require(\"module\");","module.exports = require(\"electron\");","'use strict';\nconst path = require('path');\nconst {app, BrowserWindow, shell, dialog} = require('electron');\nconst unusedFilename = require('unused-filename');\nconst pupa = require('pupa');\nconst extName = require('ext-name');\n\nfunction getFilenameFromMime(name, mime) {\n\tconst exts = extName.mime(mime);\n\n\tif (exts.length !== 1) {\n\t\treturn name;\n\t}\n\n\treturn `${name}.${exts[0].ext}`;\n}\n\nfunction registerListener(session, options, cb = () => {}) {\n\tconst downloadItems = new Set();\n\tlet receivedBytes = 0;\n\tlet completedBytes = 0;\n\tlet totalBytes = 0;\n\tconst activeDownloadItems = () => downloadItems.size;\n\tconst progressDownloadItems = () => receivedBytes / totalBytes;\n\n\toptions = Object.assign({\n\t\tshowBadge: true\n\t}, options);\n\n\tconst listener = (e, item, webContents) => {\n\t\tdownloadItems.add(item);\n\t\ttotalBytes += item.getTotalBytes();\n\n\t\tlet hostWebContents = webContents;\n\t\tif (webContents.getType() === 'webview') {\n\t\t\t({hostWebContents} = webContents);\n\t\t}\n\n\t\tconst win = BrowserWindow.fromWebContents(hostWebContents);\n\n\t\tconst dir = options.directory || app.getPath('downloads');\n\t\tlet filePath;\n\t\tif (options.filename) {\n\t\t\tfilePath = path.join(dir, options.filename);\n\t\t} else {\n\t\t\tconst filename = item.getFilename();\n\t\t\tconst name = path.extname(filename) ? filename : getFilenameFromMime(filename, item.getMimeType());\n\n\t\t\tfilePath = unusedFilename.sync(path.join(dir, name));\n\t\t}\n\n\t\tconst errorMessage = options.errorMessage || 'The download of {filename} was interrupted';\n\t\tconst errorTitle = options.errorTitle || 'Download Error';\n\n\t\tif (!options.saveAs) {\n\t\t\titem.setSavePath(filePath);\n\t\t}\n\n\t\tif (typeof options.onStarted === 'function') {\n\t\t\toptions.onStarted(item);\n\t\t}\n\n\t\titem.on('updated', () => {\n\t\t\treceivedBytes = [...downloadItems].reduce((receivedBytes, item) => {\n\t\t\t\treceivedBytes += item.getReceivedBytes();\n\t\t\t\treturn receivedBytes;\n\t\t\t}, completedBytes);\n\n\t\t\tif (options.showBadge && ['darwin', 'linux'].includes(process.platform)) {\n\t\t\t\tapp.setBadgeCount(activeDownloadItems());\n\t\t\t}\n\n\t\t\tif (!win.isDestroyed()) {\n\t\t\t\twin.setProgressBar(progressDownloadItems());\n\t\t\t}\n\n\t\t\tif (typeof options.onProgress === 'function') {\n\t\t\t\toptions.onProgress(progressDownloadItems());\n\t\t\t}\n\t\t});\n\n\t\titem.on('done', (event, state) => {\n\t\t\tcompletedBytes += item.getTotalBytes();\n\t\t\tdownloadItems.delete(item);\n\n\t\t\tif (options.showBadge && ['darwin', 'linux'].includes(process.platform)) {\n\t\t\t\tapp.setBadgeCount(activeDownloadItems());\n\t\t\t}\n\n\t\t\tif (!win.isDestroyed() && !activeDownloadItems()) {\n\t\t\t\twin.setProgressBar(-1);\n\t\t\t\treceivedBytes = 0;\n\t\t\t\tcompletedBytes = 0;\n\t\t\t\ttotalBytes = 0;\n\t\t\t}\n\n\t\t\tif (options.unregisterWhenDone) {\n\t\t\t\tsession.removeListener('will-download', listener);\n\t\t\t}\n\n\t\t\tif (state === 'cancelled') {\n\t\t\t\tif (typeof options.onCancel === 'function') {\n\t\t\t\t\toptions.onCancel(item);\n\t\t\t\t}\n\t\t\t} else if (state === 'interrupted') {\n\t\t\t\tconst message = pupa(errorMessage, {filename: item.getFilename()});\n\t\t\t\tdialog.showErrorBox(errorTitle, message);\n\t\t\t\tcb(new Error(message));\n\t\t\t} else if (state === 'completed') {\n\t\t\t\tif (process.platform === 'darwin') {\n\t\t\t\t\tapp.dock.downloadFinished(filePath);\n\t\t\t\t}\n\n\t\t\t\tif (options.openFolderWhenDone) {\n\t\t\t\t\tshell.showItemInFolder(path.join(dir, item.getFilename()));\n\t\t\t\t}\n\n\t\t\t\tcb(null, item);\n\t\t\t}\n\t\t});\n\t};\n\n\tsession.on('will-download', listener);\n}\n\nmodule.exports = (options = {}) => {\n\tapp.on('session-created', session => {\n\t\tregisterListener(session, options);\n\t});\n};\n\nmodule.exports.default = module.exports;\n\nmodule.exports.download = (win, url, options) => new Promise((resolve, reject) => {\n\toptions = Object.assign({}, options, {unregisterWhenDone: true});\n\n\tregisterListener(win.webContents.session, options, (err, item) => {\n\t\tif (err) {\n\t\t\treject(err);\n\t\t} else {\n\t\t\tresolve(item);\n\t\t}\n\t});\n\n\twin.webContents.downloadURL(url);\n});\n","'use strict';\nconst pathExists = require('path-exists');\nconst modifyFilename = require('modify-filename');\n\nconst incrementer = fp => {\n\tlet i = 0;\n\treturn () => modifyFilename(fp, (filename, ext) => `${filename} (${++i})${ext}`);\n};\n\nmodule.exports = fp => {\n\tconst getFp = incrementer(fp);\n\tconst find = newFp => pathExists(newFp).then(x => x ? find(getFp()) : newFp);\n\treturn find(fp);\n};\n\nmodule.exports.sync = fp => {\n\tconst getFp = incrementer(fp);\n\tconst find = newFp => pathExists.sync(newFp) ? find(getFp()) : newFp;\n\treturn find(fp);\n};\n","'use strict';\nconst fs = require('fs');\n\nmodule.exports = fp => new Promise(resolve => {\n\tfs.access(fp, err => {\n\t\tresolve(!err);\n\t});\n});\n\nmodule.exports.sync = fp => {\n\ttry {\n\t\tfs.accessSync(fp);\n\t\treturn true;\n\t} catch (err) {\n\t\treturn false;\n\t}\n};\n","'use strict';\nvar path = require('path');\n\nmodule.exports = function modifyFilename(pth, modifier) {\n\tif (arguments.length !== 2) {\n\t\tthrow new Error('`path` and `modifier` required');\n\t}\n\n\tif (Array.isArray(pth)) {\n\t\treturn pth.map(function (el) {\n\t\t\treturn modifyFilename(el, modifier);\n\t\t});\n\t}\n\n\tvar ext = path.extname(pth);\n\treturn path.join(path.dirname(pth), modifier(path.basename(pth, ext), ext));\n};\n","'use strict';\nmodule.exports = (tpl, data) => {\n\tif (typeof tpl !== 'string') {\n\t\tthrow new TypeError(`Expected a string in the first argument, got ${typeof tpl}`);\n\t}\n\n\tif (typeof data !== 'object') {\n\t\tthrow new TypeError(`Expected an Object/Array in the second argument, got ${typeof data}`);\n\t}\n\n\tconst re = /{(.*?)}/g;\n\n\treturn tpl.replace(re, (_, key) => {\n\t\tlet ret = data;\n\n\t\tfor (const prop of key.split('.')) {\n\t\t\tret = ret ? ret[prop] : '';\n\t\t}\n\n\t\treturn ret || '';\n\t});\n};\n","'use strict';\nconst extList = require('ext-list');\nconst sortKeysLength = require('sort-keys-length');\n\nmodule.exports = str => {\n\tconst obj = sortKeysLength.desc(extList());\n\tconst exts = Object.keys(obj).filter(x => str.endsWith(x));\n\n\tif (exts.length === 0) {\n\t\treturn [];\n\t}\n\n\treturn exts.map(x => ({\n\t\text: x,\n\t\tmime: obj[x]\n\t}));\n};\n\nmodule.exports.mime = str => {\n\tconst obj = sortKeysLength.desc(extList());\n\tconst exts = Object.keys(obj).filter(x => obj[x] === str);\n\n\tif (exts.length === 0) {\n\t\treturn [];\n\t}\n\n\treturn exts.map(x => ({\n\t\text: x,\n\t\tmime: obj[x]\n\t}));\n};\n","'use strict';\nvar mimeDb = require('mime-db');\n\nmodule.exports = function () {\n\tvar ret = {};\n\n\tObject.keys(mimeDb).forEach(function (x) {\n\t\tvar val = mimeDb[x];\n\n\t\tif (val.extensions && val.extensions.length > 0) {\n\t\t\tval.extensions.forEach(function (y) {\n\t\t\t\tret[y] = x;\n\t\t\t});\n\t\t}\n\t});\n\n\treturn ret;\n};\n","/*!\n * mime-db\n * Copyright(c) 2014 Jonathan Ong\n * MIT Licensed\n */\n\n/**\n * Module exports.\n */\n\nmodule.exports = require('./db.json')\n","'use strict';\n\nvar sortKeys = require('sort-keys');\n\n/**\n * Sort object keys by length\n *\n * @param obj\n * @api public\n */\n\nmodule.exports.desc = function (obj) {\n\treturn sortKeys(obj, function (a, b) {\n\t\treturn b.length - a.length;\n\t});\n}\n\nmodule.exports.asc = function (obj) {\n\treturn sortKeys(obj, function (a, b) {\n\t\treturn a.length - b.length;\n\t});\n}\n","'use strict';\nvar isPlainObj = require('is-plain-obj');\n\nmodule.exports = function (obj, opts) {\n\tif (!isPlainObj(obj)) {\n\t\tthrow new TypeError('Expected a plain object');\n\t}\n\n\topts = opts || {};\n\n\t// DEPRECATED\n\tif (typeof opts === 'function') {\n\t\topts = {compare: opts};\n\t}\n\n\tvar deep = opts.deep;\n\tvar seenInput = [];\n\tvar seenOutput = [];\n\n\tvar sortKeys = function (x) {\n\t\tvar seenIndex = seenInput.indexOf(x);\n\n\t\tif (seenIndex !== -1) {\n\t\t\treturn seenOutput[seenIndex];\n\t\t}\n\n\t\tvar ret = {};\n\t\tvar keys = Object.keys(x).sort(opts.compare);\n\n\t\tseenInput.push(x);\n\t\tseenOutput.push(ret);\n\n\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\tvar key = keys[i];\n\t\t\tvar val = x[key];\n\n\t\t\tret[key] = deep && isPlainObj(val) ? sortKeys(val) : val;\n\t\t}\n\n\t\treturn ret;\n\t};\n\n\treturn sortKeys(obj);\n};\n","'use strict';\nvar toString = Object.prototype.toString;\n\nmodule.exports = function (x) {\n\tvar prototype;\n\treturn toString.call(x) === '[object Object]' && (prototype = Object.getPrototypeOf(x), prototype === null || prototype === Object.getPrototypeOf({}));\n};\n","import { BrowserWindow, ipcMain } from 'electron';\nimport path from 'path';\n\nfunction createLoginWindow(loginCallback) {\n  const loginWindow = new BrowserWindow({\n    width: 300,\n    height: 400,\n    frame: false,\n    resizable: false,\n  });\n  loginWindow.loadURL(\n    `file://${path.join(__dirname, '/static/login/login.html')}`,\n  );\n\n  ipcMain.once('login-message', (event, usernameAndPassword) => {\n    loginCallback(usernameAndPassword[0], usernameAndPassword[1]);\n    loginWindow.close();\n  });\n  return loginWindow;\n}\n\nexport default createLoginWindow;\n","import fs from 'fs';\nimport path from 'path';\nimport { BrowserWindow, shell, ipcMain, dialog } from 'electron';\nimport windowStateKeeper from 'electron-window-state';\nimport mainWindowHelpers from './mainWindowHelpers';\nimport helpers from '../../helpers/helpers';\nimport createMenu from '../menu/menu';\nimport initContextMenu from '../contextMenu/contextMenu';\n\nconst {\n  isOSX,\n  linkIsInternal,\n  getCssToInject,\n  shouldInjectCss,\n  getAppIcon,\n  nativeTabsSupported,\n  getCounterValue,\n} = helpers;\n\nconst { onNewWindowHelper } = mainWindowHelpers;\n\nconst ZOOM_INTERVAL = 0.1;\n\nfunction maybeHideWindow(window, event, fastQuit, tray) {\n  if (isOSX() && !fastQuit) {\n    // this is called when exiting from clicking the cross button on the window\n    event.preventDefault();\n    window.hide();\n  } else if (!fastQuit && tray) {\n    event.preventDefault();\n    window.hide();\n  }\n  // will close the window on other platforms\n}\n\nfunction maybeInjectCss(browserWindow) {\n  if (!shouldInjectCss()) {\n    return;\n  }\n\n  const cssToInject = getCssToInject();\n\n  const injectCss = () => {\n    browserWindow.webContents.insertCSS(cssToInject);\n  };\n  const onHeadersReceived = (details, callback) => {\n    injectCss();\n    callback({ cancel: false, responseHeaders: details.responseHeaders });\n  };\n\n  browserWindow.webContents.on('did-finish-load', () => {\n    // remove the injection of css the moment the page is loaded\n    browserWindow.webContents.session.webRequest.onHeadersReceived(null);\n  });\n\n  // on every page navigation inject the css\n  browserWindow.webContents.on('did-navigate', () => {\n    // we have to inject the css in onHeadersReceived so they're early enough\n    // will run multiple times, so did-finish-load will remove this handler\n    browserWindow.webContents.session.webRequest.onHeadersReceived(\n      [], // Pass an empty filter list; null will not match _any_ urls\n      onHeadersReceived,\n    );\n  });\n}\n\nfunction clearCache(browserWindow, targetUrl = null) {\n  const { session } = browserWindow.webContents;\n  session.clearStorageData(() => {\n    session.clearCache(() => {\n      if (targetUrl) {\n        browserWindow.loadURL(targetUrl);\n      }\n    });\n  });\n}\n\n/**\n *\n * @param {{}} inpOptions AppArgs from nativefier.json\n * @param {function} onAppQuit\n * @param {function} setDockBadge\n * @returns {electron.BrowserWindow}\n */\nfunction createMainWindow(inpOptions, onAppQuit, setDockBadge) {\n  const options = Object.assign({}, inpOptions);\n  const mainWindowState = windowStateKeeper({\n    defaultWidth: options.width || 1280,\n    defaultHeight: options.height || 800,\n  });\n\n  const DEFAULT_WINDOW_OPTIONS = {\n    // Convert dashes to spaces because on linux the app name is joined with dashes\n    title: options.name,\n    tabbingIdentifier: nativeTabsSupported() ? options.name : undefined,\n    webPreferences: {\n      javascript: true,\n      plugins: true,\n      // node globals causes problems with sites like messenger.com\n      nodeIntegration: false,\n      webSecurity: !options.insecure,\n      preload: path.join(__dirname, 'static', 'preload.js'),\n      zoomFactor: options.zoom,\n    },\n  };\n\n  const mainWindow = new BrowserWindow(\n    Object.assign(\n      {\n        frame: !options.hideWindowFrame,\n        width: mainWindowState.width,\n        height: mainWindowState.height,\n        minWidth: options.minWidth,\n        minHeight: options.minHeight,\n        maxWidth: options.maxWidth,\n        maxHeight: options.maxHeight,\n        x: options.x,\n        y: options.y,\n        autoHideMenuBar: !options.showMenuBar,\n        // after webpack path here should reference `resources/app/`\n        icon: getAppIcon(),\n        // set to undefined and not false because explicitly setting to false will disable full screen\n        fullscreen: options.fullScreen || undefined,\n        // Whether the window should always stay on top of other windows. Default is false.\n        alwaysOnTop: options.alwaysOnTop,\n        titleBarStyle: options.titleBarStyle,\n        show: options.tray !== 'start-in-tray',\n      },\n      DEFAULT_WINDOW_OPTIONS,\n    ),\n  );\n\n  mainWindowState.manage(mainWindow);\n\n  // after first run, no longer force maximize to be true\n  if (options.maximize) {\n    mainWindow.maximize();\n    options.maximize = undefined;\n    fs.writeFileSync(\n      path.join(__dirname, '..', 'nativefier.json'),\n      JSON.stringify(options),\n    );\n  }\n\n  const withFocusedWindow = (block) => {\n    const focusedWindow = BrowserWindow.getFocusedWindow();\n    if (focusedWindow) {\n      return block(focusedWindow);\n    }\n    return undefined;\n  };\n\n  const adjustWindowZoom = (window, adjustment) => {\n    window.webContents.getZoomFactor((zoomFactor) => {\n      window.webContents.setZoomFactor(zoomFactor + adjustment);\n    });\n  };\n\n  const onZoomIn = () => {\n    withFocusedWindow((focusedWindow) =>\n      adjustWindowZoom(focusedWindow, ZOOM_INTERVAL),\n    );\n  };\n\n  const onZoomOut = () => {\n    withFocusedWindow((focusedWindow) =>\n      adjustWindowZoom(focusedWindow, -ZOOM_INTERVAL),\n    );\n  };\n\n  const onZoomReset = () => {\n    withFocusedWindow((focusedWindow) => {\n      focusedWindow.webContents.setZoomFactor(options.zoom);\n    });\n  };\n\n  const clearAppData = () => {\n    dialog.showMessageBox(\n      mainWindow,\n      {\n        type: 'warning',\n        buttons: ['Yes', 'Cancel'],\n        defaultId: 1,\n        title: 'Clear cache confirmation',\n        message:\n          'This will clear all data (cookies, local storage etc) from this app. Are you sure you wish to proceed?',\n      },\n      (response) => {\n        if (response !== 0) {\n          return;\n        }\n        clearCache(mainWindow, options.targetUrl);\n      },\n    );\n  };\n\n  const onGoBack = () => {\n    withFocusedWindow((focusedWindow) => {\n      focusedWindow.webContents.goBack();\n    });\n  };\n\n  const onGoForward = () => {\n    withFocusedWindow((focusedWindow) => {\n      focusedWindow.webContents.goForward();\n    });\n  };\n\n  const getCurrentUrl = () =>\n    withFocusedWindow((focusedWindow) => focusedWindow.webContents.getURL());\n\n  const onWillNavigate = (event, urlToGo) => {\n    if (!linkIsInternal(options.targetUrl, urlToGo, options.internalUrls)) {\n      event.preventDefault();\n      shell.openExternal(urlToGo);\n    }\n  };\n\n  let createNewWindow;\n\n  const createNewTab = (url, foreground) => {\n    withFocusedWindow((focusedWindow) => {\n      const newTab = createNewWindow(url);\n      focusedWindow.addTabbedWindow(newTab);\n      if (!foreground) {\n        focusedWindow.focus();\n      }\n      return newTab;\n    });\n    return undefined;\n  };\n\n  const createAboutBlankWindow = () => {\n    const window = createNewWindow('about:blank');\n    window.hide();\n    window.webContents.once('did-stop-loading', () => {\n      if (window.webContents.getURL() === 'about:blank') {\n        window.close();\n      } else {\n        window.show();\n      }\n    });\n    return window;\n  };\n\n  const onNewWindow = (event, urlToGo, _, disposition) => {\n    const preventDefault = (newGuest) => {\n      event.preventDefault();\n      if (newGuest) {\n        // eslint-disable-next-line no-param-reassign\n        event.newGuest = newGuest;\n      }\n    };\n    onNewWindowHelper(\n      urlToGo,\n      disposition,\n      options.targetUrl,\n      options.internalUrls,\n      preventDefault,\n      shell.openExternal,\n      createAboutBlankWindow,\n      nativeTabsSupported,\n      createNewTab,\n    );\n  };\n\n  const sendParamsOnDidFinishLoad = (window) => {\n    window.webContents.on('did-finish-load', () => {\n      window.webContents.send('params', JSON.stringify(options));\n    });\n  };\n\n  createNewWindow = (url) => {\n    const window = new BrowserWindow(DEFAULT_WINDOW_OPTIONS);\n    if (options.userAgent) {\n      window.webContents.setUserAgent(options.userAgent);\n    }\n    maybeInjectCss(window);\n    sendParamsOnDidFinishLoad(window);\n    window.webContents.on('new-window', onNewWindow);\n    window.webContents.on('will-navigate', onWillNavigate);\n    window.loadURL(url);\n    return window;\n  };\n\n  const menuOptions = {\n    nativefierVersion: options.nativefierVersion,\n    appQuit: onAppQuit,\n    zoomIn: onZoomIn,\n    zoomOut: onZoomOut,\n    zoomReset: onZoomReset,\n    zoomBuildTimeValue: options.zoom,\n    goBack: onGoBack,\n    goForward: onGoForward,\n    getCurrentUrl,\n    clearAppData,\n    disableDevTools: options.disableDevTools,\n  };\n\n  createMenu(menuOptions);\n  if (!options.disableContextMenu) {\n    initContextMenu(\n      createNewWindow,\n      nativeTabsSupported() ? createNewTab : undefined,\n    );\n  }\n\n  if (options.userAgent) {\n    mainWindow.webContents.setUserAgent(options.userAgent);\n  }\n\n  maybeInjectCss(mainWindow);\n  sendParamsOnDidFinishLoad(mainWindow);\n\n  if (options.counter) {\n    mainWindow.on('page-title-updated', (e, title) => {\n      const counterValue = getCounterValue(title);\n      if (counterValue) {\n        setDockBadge(counterValue, options.bounce);\n      } else {\n        setDockBadge('');\n      }\n    });\n  } else {\n    ipcMain.on('notification', () => {\n      if (!isOSX() || mainWindow.isFocused()) {\n        return;\n      }\n      setDockBadge('•', options.bounce);\n    });\n    mainWindow.on('focus', () => {\n      setDockBadge('');\n    });\n  }\n\n  ipcMain.on('notification-click', () => {\n    mainWindow.show();\n  });\n\n  mainWindow.webContents.on('new-window', onNewWindow);\n  mainWindow.webContents.on('will-navigate', onWillNavigate);\n\n  if (options.clearCache) {\n    clearCache(mainWindow);\n  }\n\n  mainWindow.loadURL(options.targetUrl);\n\n  mainWindow.on('new-tab', () => createNewTab(options.targetUrl, true));\n\n  mainWindow.on('close', (event) => {\n    if (mainWindow.isFullScreen()) {\n      if (nativeTabsSupported()) {\n        mainWindow.moveTabToNewWindow();\n      }\n      mainWindow.setFullScreen(false);\n      mainWindow.once(\n        'leave-full-screen',\n        maybeHideWindow.bind(this, mainWindow, event, options.fastQuit),\n      );\n    }\n    maybeHideWindow(mainWindow, event, options.fastQuit, options.tray);\n\n    if (options.clearCache) {\n      clearCache(mainWindow);\n    }\n  });\n\n  return mainWindow;\n}\n\nexport default createMainWindow;\n","'use strict';\n\nvar path = require('path');\nvar electron = require('electron');\nvar jsonfile = require('jsonfile');\nvar mkdirp = require('mkdirp');\nvar deepEqual = require('deep-equal');\n\nmodule.exports = function (options) {\n  var app = electron.app || electron.remote.app;\n  var screen = electron.screen || electron.remote.screen;\n  var state;\n  var winRef;\n  var stateChangeTimer;\n  var eventHandlingDelay = 100;\n  var config = Object.assign({\n    file: 'window-state.json',\n    path: app.getPath('userData'),\n    maximize: true,\n    fullScreen: true\n  }, options);\n  var fullStoreFileName = path.join(config.path, config.file);\n\n  function isNormal(win) {\n    return !win.isMaximized() && !win.isMinimized() && !win.isFullScreen();\n  }\n\n  function hasBounds() {\n    return state &&\n      Number.isInteger(state.x) &&\n      Number.isInteger(state.y) &&\n      Number.isInteger(state.width) && state.width > 0 &&\n      Number.isInteger(state.height) && state.height > 0;\n  }\n\n  function validateState() {\n    var isValid = state && (hasBounds() || state.isMaximized || state.isFullScreen);\n    if (!isValid) {\n      state = null;\n      return;\n    }\n\n    if (hasBounds() && state.displayBounds) {\n      // Check if the display where the window was last open is still available\n      var displayBounds = screen.getDisplayMatching(state).bounds;\n      var sameBounds = deepEqual(state.displayBounds, displayBounds, {strict: true});\n      if (!sameBounds) {\n        if (displayBounds.width < state.displayBounds.width) {\n          if (state.x > displayBounds.width) {\n            state.x = 0;\n          }\n\n          if (state.width > displayBounds.width) {\n            state.width = displayBounds.width;\n          }\n        }\n\n        if (displayBounds.height < state.displayBounds.height) {\n          if (state.y > displayBounds.height) {\n            state.y = 0;\n          }\n\n          if (state.height > displayBounds.height) {\n            state.height = displayBounds.height;\n          }\n        }\n      }\n    }\n  }\n\n  function updateState(win) {\n    win = win || winRef;\n    if (!win) {\n      return;\n    }\n    // don't throw an error when window was closed\n    try {\n      var winBounds = win.getBounds();\n      if (isNormal(win)) {\n        state.x = winBounds.x;\n        state.y = winBounds.y;\n        state.width = winBounds.width;\n        state.height = winBounds.height;\n      }\n      state.isMaximized = win.isMaximized();\n      state.isFullScreen = win.isFullScreen();\n      state.displayBounds = screen.getDisplayMatching(winBounds).bounds;\n    } catch (err) {}\n  }\n\n  function saveState(win) {\n    // Update window state only if it was provided\n    if (win) {\n      updateState(win);\n    }\n\n    // Save state\n    try {\n      mkdirp.sync(path.dirname(fullStoreFileName));\n      jsonfile.writeFileSync(fullStoreFileName, state);\n    } catch (err) {\n      // Don't care\n    }\n  }\n\n  function stateChangeHandler() {\n    // Handles both 'resize' and 'move'\n    clearTimeout(stateChangeTimer);\n    stateChangeTimer = setTimeout(updateState, eventHandlingDelay);\n  }\n\n  function closeHandler() {\n    updateState();\n  }\n\n  function closedHandler() {\n    // Unregister listeners and save state\n    unmanage();\n    saveState();\n  }\n\n  function manage(win) {\n    if (config.maximize && state.isMaximized) {\n      win.maximize();\n    }\n    if (config.fullScreen && state.isFullScreen) {\n      win.setFullScreen(true);\n    }\n    win.on('resize', stateChangeHandler);\n    win.on('move', stateChangeHandler);\n    win.on('close', closeHandler);\n    win.on('closed', closedHandler);\n    winRef = win;\n  }\n\n  function unmanage() {\n    if (winRef) {\n      winRef.removeListener('resize', stateChangeHandler);\n      winRef.removeListener('move', stateChangeHandler);\n      clearTimeout(stateChangeTimer);\n      winRef.removeListener('close', closeHandler);\n      winRef.removeListener('closed', closedHandler);\n      winRef = null;\n    }\n  }\n\n  // Load previous state\n  try {\n    state = jsonfile.readFileSync(fullStoreFileName);\n  } catch (err) {\n    // Don't care\n  }\n\n  // Check state validity\n  validateState();\n\n  // Set state fallback values\n  state = Object.assign({\n    width: config.defaultWidth || 800,\n    height: config.defaultHeight || 600\n  }, state);\n\n  return {\n    get x() { return state.x; },\n    get y() { return state.y; },\n    get width() { return state.width; },\n    get height() { return state.height; },\n    get isMaximized() { return state.isMaximized; },\n    get isFullScreen() { return state.isFullScreen; },\n    saveState: saveState,\n    unmanage: unmanage,\n    manage: manage\n  };\n};\n","var _fs\ntry {\n  _fs = require('graceful-fs')\n} catch (_) {\n  _fs = require('fs')\n}\n\nfunction readFile (file, options, callback) {\n  if (callback == null) {\n    callback = options\n    options = {}\n  }\n\n  if (typeof options === 'string') {\n    options = {encoding: options}\n  }\n\n  options = options || {}\n  var fs = options.fs || _fs\n\n  var shouldThrow = true\n  // DO NOT USE 'passParsingErrors' THE NAME WILL CHANGE!!!, use 'throws' instead\n  if ('passParsingErrors' in options) {\n    shouldThrow = options.passParsingErrors\n  } else if ('throws' in options) {\n    shouldThrow = options.throws\n  }\n\n  fs.readFile(file, options, function (err, data) {\n    if (err) return callback(err)\n\n    data = stripBom(data)\n\n    var obj\n    try {\n      obj = JSON.parse(data, options ? options.reviver : null)\n    } catch (err2) {\n      if (shouldThrow) {\n        err2.message = file + ': ' + err2.message\n        return callback(err2)\n      } else {\n        return callback(null, null)\n      }\n    }\n\n    callback(null, obj)\n  })\n}\n\nfunction readFileSync (file, options) {\n  options = options || {}\n  if (typeof options === 'string') {\n    options = {encoding: options}\n  }\n\n  var fs = options.fs || _fs\n\n  var shouldThrow = true\n  // DO NOT USE 'passParsingErrors' THE NAME WILL CHANGE!!!, use 'throws' instead\n  if ('passParsingErrors' in options) {\n    shouldThrow = options.passParsingErrors\n  } else if ('throws' in options) {\n    shouldThrow = options.throws\n  }\n\n  var content = fs.readFileSync(file, options)\n  content = stripBom(content)\n\n  try {\n    return JSON.parse(content, options.reviver)\n  } catch (err) {\n    if (shouldThrow) {\n      err.message = file + ': ' + err.message\n      throw err\n    } else {\n      return null\n    }\n  }\n}\n\nfunction writeFile (file, obj, options, callback) {\n  if (callback == null) {\n    callback = options\n    options = {}\n  }\n  options = options || {}\n  var fs = options.fs || _fs\n\n  var spaces = typeof options === 'object' && options !== null\n    ? 'spaces' in options\n    ? options.spaces : this.spaces\n    : this.spaces\n\n  var str = ''\n  try {\n    str = JSON.stringify(obj, options ? options.replacer : null, spaces) + '\\n'\n  } catch (err) {\n    if (callback) return callback(err, null)\n  }\n\n  fs.writeFile(file, str, options, callback)\n}\n\nfunction writeFileSync (file, obj, options) {\n  options = options || {}\n  var fs = options.fs || _fs\n\n  var spaces = typeof options === 'object' && options !== null\n    ? 'spaces' in options\n    ? options.spaces : this.spaces\n    : this.spaces\n\n  var str = JSON.stringify(obj, options.replacer, spaces) + '\\n'\n  // not sure if fs.writeFileSync returns anything, but just in case\n  return fs.writeFileSync(file, str, options)\n}\n\nfunction stripBom (content) {\n  // we do this because JSON.parse would convert it to a utf8 string if encoding wasn't specified\n  if (Buffer.isBuffer(content)) content = content.toString('utf8')\n  content = content.replace(/^\\uFEFF/, '')\n  return content\n}\n\nvar jsonfile = {\n  spaces: null,\n  readFile: readFile,\n  readFileSync: readFileSync,\n  writeFile: writeFile,\n  writeFileSync: writeFileSync\n}\n\nmodule.exports = jsonfile\n","var fs = require('fs')\nvar polyfills = require('./polyfills.js')\nvar legacy = require('./legacy-streams.js')\nvar clone = require('./clone.js')\n\nvar queue = []\n\nvar util = require('util')\n\nfunction noop () {}\n\nvar debug = noop\nif (util.debuglog)\n  debug = util.debuglog('gfs4')\nelse if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || ''))\n  debug = function() {\n    var m = util.format.apply(util, arguments)\n    m = 'GFS4: ' + m.split(/\\n/).join('\\nGFS4: ')\n    console.error(m)\n  }\n\nif (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || '')) {\n  process.on('exit', function() {\n    debug(queue)\n    require('assert').equal(queue.length, 0)\n  })\n}\n\nmodule.exports = patch(clone(fs))\nif (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) {\n    module.exports = patch(fs)\n    fs.__patched = true;\n}\n\n// Always patch fs.close/closeSync, because we want to\n// retry() whenever a close happens *anywhere* in the program.\n// This is essential when multiple graceful-fs instances are\n// in play at the same time.\nmodule.exports.close = (function (fs$close) { return function (fd, cb) {\n  return fs$close.call(fs, fd, function (err) {\n    if (!err)\n      retry()\n\n    if (typeof cb === 'function')\n      cb.apply(this, arguments)\n  })\n}})(fs.close)\n\nmodule.exports.closeSync = (function (fs$closeSync) { return function (fd) {\n  // Note that graceful-fs also retries when fs.closeSync() fails.\n  // Looks like a bug to me, although it's probably a harmless one.\n  var rval = fs$closeSync.apply(fs, arguments)\n  retry()\n  return rval\n}})(fs.closeSync)\n\n// Only patch fs once, otherwise we'll run into a memory leak if\n// graceful-fs is loaded multiple times, such as in test environments that\n// reset the loaded modules between tests.\n// We look for the string `graceful-fs` from the comment above. This\n// way we are not adding any extra properties and it will detect if older\n// versions of graceful-fs are installed.\nif (!/\\bgraceful-fs\\b/.test(fs.closeSync.toString())) {\n  fs.closeSync = module.exports.closeSync;\n  fs.close = module.exports.close;\n}\n\nfunction patch (fs) {\n  // Everything that references the open() function needs to be in here\n  polyfills(fs)\n  fs.gracefulify = patch\n  fs.FileReadStream = ReadStream;  // Legacy name.\n  fs.FileWriteStream = WriteStream;  // Legacy name.\n  fs.createReadStream = createReadStream\n  fs.createWriteStream = createWriteStream\n  var fs$readFile = fs.readFile\n  fs.readFile = readFile\n  function readFile (path, options, cb) {\n    if (typeof options === 'function')\n      cb = options, options = null\n\n    return go$readFile(path, options, cb)\n\n    function go$readFile (path, options, cb) {\n      return fs$readFile(path, options, function (err) {\n        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n          enqueue([go$readFile, [path, options, cb]])\n        else {\n          if (typeof cb === 'function')\n            cb.apply(this, arguments)\n          retry()\n        }\n      })\n    }\n  }\n\n  var fs$writeFile = fs.writeFile\n  fs.writeFile = writeFile\n  function writeFile (path, data, options, cb) {\n    if (typeof options === 'function')\n      cb = options, options = null\n\n    return go$writeFile(path, data, options, cb)\n\n    function go$writeFile (path, data, options, cb) {\n      return fs$writeFile(path, data, options, function (err) {\n        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n          enqueue([go$writeFile, [path, data, options, cb]])\n        else {\n          if (typeof cb === 'function')\n            cb.apply(this, arguments)\n          retry()\n        }\n      })\n    }\n  }\n\n  var fs$appendFile = fs.appendFile\n  if (fs$appendFile)\n    fs.appendFile = appendFile\n  function appendFile (path, data, options, cb) {\n    if (typeof options === 'function')\n      cb = options, options = null\n\n    return go$appendFile(path, data, options, cb)\n\n    function go$appendFile (path, data, options, cb) {\n      return fs$appendFile(path, data, options, function (err) {\n        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n          enqueue([go$appendFile, [path, data, options, cb]])\n        else {\n          if (typeof cb === 'function')\n            cb.apply(this, arguments)\n          retry()\n        }\n      })\n    }\n  }\n\n  var fs$readdir = fs.readdir\n  fs.readdir = readdir\n  function readdir (path, options, cb) {\n    var args = [path]\n    if (typeof options !== 'function') {\n      args.push(options)\n    } else {\n      cb = options\n    }\n    args.push(go$readdir$cb)\n\n    return go$readdir(args)\n\n    function go$readdir$cb (err, files) {\n      if (files && files.sort)\n        files.sort()\n\n      if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n        enqueue([go$readdir, [args]])\n\n      else {\n        if (typeof cb === 'function')\n          cb.apply(this, arguments)\n        retry()\n      }\n    }\n  }\n\n  function go$readdir (args) {\n    return fs$readdir.apply(fs, args)\n  }\n\n  if (process.version.substr(0, 4) === 'v0.8') {\n    var legStreams = legacy(fs)\n    ReadStream = legStreams.ReadStream\n    WriteStream = legStreams.WriteStream\n  }\n\n  var fs$ReadStream = fs.ReadStream\n  if (fs$ReadStream) {\n    ReadStream.prototype = Object.create(fs$ReadStream.prototype)\n    ReadStream.prototype.open = ReadStream$open\n  }\n\n  var fs$WriteStream = fs.WriteStream\n  if (fs$WriteStream) {\n    WriteStream.prototype = Object.create(fs$WriteStream.prototype)\n    WriteStream.prototype.open = WriteStream$open\n  }\n\n  fs.ReadStream = ReadStream\n  fs.WriteStream = WriteStream\n\n  function ReadStream (path, options) {\n    if (this instanceof ReadStream)\n      return fs$ReadStream.apply(this, arguments), this\n    else\n      return ReadStream.apply(Object.create(ReadStream.prototype), arguments)\n  }\n\n  function ReadStream$open () {\n    var that = this\n    open(that.path, that.flags, that.mode, function (err, fd) {\n      if (err) {\n        if (that.autoClose)\n          that.destroy()\n\n        that.emit('error', err)\n      } else {\n        that.fd = fd\n        that.emit('open', fd)\n        that.read()\n      }\n    })\n  }\n\n  function WriteStream (path, options) {\n    if (this instanceof WriteStream)\n      return fs$WriteStream.apply(this, arguments), this\n    else\n      return WriteStream.apply(Object.create(WriteStream.prototype), arguments)\n  }\n\n  function WriteStream$open () {\n    var that = this\n    open(that.path, that.flags, that.mode, function (err, fd) {\n      if (err) {\n        that.destroy()\n        that.emit('error', err)\n      } else {\n        that.fd = fd\n        that.emit('open', fd)\n      }\n    })\n  }\n\n  function createReadStream (path, options) {\n    return new ReadStream(path, options)\n  }\n\n  function createWriteStream (path, options) {\n    return new WriteStream(path, options)\n  }\n\n  var fs$open = fs.open\n  fs.open = open\n  function open (path, flags, mode, cb) {\n    if (typeof mode === 'function')\n      cb = mode, mode = null\n\n    return go$open(path, flags, mode, cb)\n\n    function go$open (path, flags, mode, cb) {\n      return fs$open(path, flags, mode, function (err, fd) {\n        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n          enqueue([go$open, [path, flags, mode, cb]])\n        else {\n          if (typeof cb === 'function')\n            cb.apply(this, arguments)\n          retry()\n        }\n      })\n    }\n  }\n\n  return fs\n}\n\nfunction enqueue (elem) {\n  debug('ENQUEUE', elem[0].name, elem[1])\n  queue.push(elem)\n}\n\nfunction retry () {\n  var elem = queue.shift()\n  if (elem) {\n    debug('RETRY', elem[0].name, elem[1])\n    elem[0].apply(null, elem[1])\n  }\n}\n","var constants = require('constants')\n\nvar origCwd = process.cwd\nvar cwd = null\n\nvar platform = process.env.GRACEFUL_FS_PLATFORM || process.platform\n\nprocess.cwd = function() {\n  if (!cwd)\n    cwd = origCwd.call(process)\n  return cwd\n}\ntry {\n  process.cwd()\n} catch (er) {}\n\nvar chdir = process.chdir\nprocess.chdir = function(d) {\n  cwd = null\n  chdir.call(process, d)\n}\n\nmodule.exports = patch\n\nfunction patch (fs) {\n  // (re-)implement some things that are known busted or missing.\n\n  // lchmod, broken prior to 0.6.2\n  // back-port the fix here.\n  if (constants.hasOwnProperty('O_SYMLINK') &&\n      process.version.match(/^v0\\.6\\.[0-2]|^v0\\.5\\./)) {\n    patchLchmod(fs)\n  }\n\n  // lutimes implementation, or no-op\n  if (!fs.lutimes) {\n    patchLutimes(fs)\n  }\n\n  // https://github.com/isaacs/node-graceful-fs/issues/4\n  // Chown should not fail on einval or eperm if non-root.\n  // It should not fail on enosys ever, as this just indicates\n  // that a fs doesn't support the intended operation.\n\n  fs.chown = chownFix(fs.chown)\n  fs.fchown = chownFix(fs.fchown)\n  fs.lchown = chownFix(fs.lchown)\n\n  fs.chmod = chmodFix(fs.chmod)\n  fs.fchmod = chmodFix(fs.fchmod)\n  fs.lchmod = chmodFix(fs.lchmod)\n\n  fs.chownSync = chownFixSync(fs.chownSync)\n  fs.fchownSync = chownFixSync(fs.fchownSync)\n  fs.lchownSync = chownFixSync(fs.lchownSync)\n\n  fs.chmodSync = chmodFixSync(fs.chmodSync)\n  fs.fchmodSync = chmodFixSync(fs.fchmodSync)\n  fs.lchmodSync = chmodFixSync(fs.lchmodSync)\n\n  fs.stat = statFix(fs.stat)\n  fs.fstat = statFix(fs.fstat)\n  fs.lstat = statFix(fs.lstat)\n\n  fs.statSync = statFixSync(fs.statSync)\n  fs.fstatSync = statFixSync(fs.fstatSync)\n  fs.lstatSync = statFixSync(fs.lstatSync)\n\n  // if lchmod/lchown do not exist, then make them no-ops\n  if (!fs.lchmod) {\n    fs.lchmod = function (path, mode, cb) {\n      if (cb) process.nextTick(cb)\n    }\n    fs.lchmodSync = function () {}\n  }\n  if (!fs.lchown) {\n    fs.lchown = function (path, uid, gid, cb) {\n      if (cb) process.nextTick(cb)\n    }\n    fs.lchownSync = function () {}\n  }\n\n  // on Windows, A/V software can lock the directory, causing this\n  // to fail with an EACCES or EPERM if the directory contains newly\n  // created files.  Try again on failure, for up to 60 seconds.\n\n  // Set the timeout this long because some Windows Anti-Virus, such as Parity\n  // bit9, may lock files for up to a minute, causing npm package install\n  // failures. Also, take care to yield the scheduler. Windows scheduling gives\n  // CPU to a busy looping process, which can cause the program causing the lock\n  // contention to be starved of CPU by node, so the contention doesn't resolve.\n  if (platform === \"win32\") {\n    fs.rename = (function (fs$rename) { return function (from, to, cb) {\n      var start = Date.now()\n      var backoff = 0;\n      fs$rename(from, to, function CB (er) {\n        if (er\n            && (er.code === \"EACCES\" || er.code === \"EPERM\")\n            && Date.now() - start < 60000) {\n          setTimeout(function() {\n            fs.stat(to, function (stater, st) {\n              if (stater && stater.code === \"ENOENT\")\n                fs$rename(from, to, CB);\n              else\n                cb(er)\n            })\n          }, backoff)\n          if (backoff < 100)\n            backoff += 10;\n          return;\n        }\n        if (cb) cb(er)\n      })\n    }})(fs.rename)\n  }\n\n  // if read() returns EAGAIN, then just try it again.\n  fs.read = (function (fs$read) { return function (fd, buffer, offset, length, position, callback_) {\n    var callback\n    if (callback_ && typeof callback_ === 'function') {\n      var eagCounter = 0\n      callback = function (er, _, __) {\n        if (er && er.code === 'EAGAIN' && eagCounter < 10) {\n          eagCounter ++\n          return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n        }\n        callback_.apply(this, arguments)\n      }\n    }\n    return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n  }})(fs.read)\n\n  fs.readSync = (function (fs$readSync) { return function (fd, buffer, offset, length, position) {\n    var eagCounter = 0\n    while (true) {\n      try {\n        return fs$readSync.call(fs, fd, buffer, offset, length, position)\n      } catch (er) {\n        if (er.code === 'EAGAIN' && eagCounter < 10) {\n          eagCounter ++\n          continue\n        }\n        throw er\n      }\n    }\n  }})(fs.readSync)\n\n  function patchLchmod (fs) {\n    fs.lchmod = function (path, mode, callback) {\n      fs.open( path\n             , constants.O_WRONLY | constants.O_SYMLINK\n             , mode\n             , function (err, fd) {\n        if (err) {\n          if (callback) callback(err)\n          return\n        }\n        // prefer to return the chmod error, if one occurs,\n        // but still try to close, and report closing errors if they occur.\n        fs.fchmod(fd, mode, function (err) {\n          fs.close(fd, function(err2) {\n            if (callback) callback(err || err2)\n          })\n        })\n      })\n    }\n\n    fs.lchmodSync = function (path, mode) {\n      var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)\n\n      // prefer to return the chmod error, if one occurs,\n      // but still try to close, and report closing errors if they occur.\n      var threw = true\n      var ret\n      try {\n        ret = fs.fchmodSync(fd, mode)\n        threw = false\n      } finally {\n        if (threw) {\n          try {\n            fs.closeSync(fd)\n          } catch (er) {}\n        } else {\n          fs.closeSync(fd)\n        }\n      }\n      return ret\n    }\n  }\n\n  function patchLutimes (fs) {\n    if (constants.hasOwnProperty(\"O_SYMLINK\")) {\n      fs.lutimes = function (path, at, mt, cb) {\n        fs.open(path, constants.O_SYMLINK, function (er, fd) {\n          if (er) {\n            if (cb) cb(er)\n            return\n          }\n          fs.futimes(fd, at, mt, function (er) {\n            fs.close(fd, function (er2) {\n              if (cb) cb(er || er2)\n            })\n          })\n        })\n      }\n\n      fs.lutimesSync = function (path, at, mt) {\n        var fd = fs.openSync(path, constants.O_SYMLINK)\n        var ret\n        var threw = true\n        try {\n          ret = fs.futimesSync(fd, at, mt)\n          threw = false\n        } finally {\n          if (threw) {\n            try {\n              fs.closeSync(fd)\n            } catch (er) {}\n          } else {\n            fs.closeSync(fd)\n          }\n        }\n        return ret\n      }\n\n    } else {\n      fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }\n      fs.lutimesSync = function () {}\n    }\n  }\n\n  function chmodFix (orig) {\n    if (!orig) return orig\n    return function (target, mode, cb) {\n      return orig.call(fs, target, mode, function (er) {\n        if (chownErOk(er)) er = null\n        if (cb) cb.apply(this, arguments)\n      })\n    }\n  }\n\n  function chmodFixSync (orig) {\n    if (!orig) return orig\n    return function (target, mode) {\n      try {\n        return orig.call(fs, target, mode)\n      } catch (er) {\n        if (!chownErOk(er)) throw er\n      }\n    }\n  }\n\n\n  function chownFix (orig) {\n    if (!orig) return orig\n    return function (target, uid, gid, cb) {\n      return orig.call(fs, target, uid, gid, function (er) {\n        if (chownErOk(er)) er = null\n        if (cb) cb.apply(this, arguments)\n      })\n    }\n  }\n\n  function chownFixSync (orig) {\n    if (!orig) return orig\n    return function (target, uid, gid) {\n      try {\n        return orig.call(fs, target, uid, gid)\n      } catch (er) {\n        if (!chownErOk(er)) throw er\n      }\n    }\n  }\n\n\n  function statFix (orig) {\n    if (!orig) return orig\n    // Older versions of Node erroneously returned signed integers for\n    // uid + gid.\n    return function (target, cb) {\n      return orig.call(fs, target, function (er, stats) {\n        if (!stats) return cb.apply(this, arguments)\n        if (stats.uid < 0) stats.uid += 0x100000000\n        if (stats.gid < 0) stats.gid += 0x100000000\n        if (cb) cb.apply(this, arguments)\n      })\n    }\n  }\n\n  function statFixSync (orig) {\n    if (!orig) return orig\n    // Older versions of Node erroneously returned signed integers for\n    // uid + gid.\n    return function (target) {\n      var stats = orig.call(fs, target)\n      if (stats.uid < 0) stats.uid += 0x100000000\n      if (stats.gid < 0) stats.gid += 0x100000000\n      return stats;\n    }\n  }\n\n  // ENOSYS means that the fs doesn't support the op. Just ignore\n  // that, because it doesn't matter.\n  //\n  // if there's no getuid, or if getuid() is something other\n  // than 0, and the error is EINVAL or EPERM, then just ignore\n  // it.\n  //\n  // This specific case is a silent failure in cp, install, tar,\n  // and most other unix tools that manage permissions.\n  //\n  // When running as root, or if other types of errors are\n  // encountered, then it's strict.\n  function chownErOk (er) {\n    if (!er)\n      return true\n\n    if (er.code === \"ENOSYS\")\n      return true\n\n    var nonroot = !process.getuid || process.getuid() !== 0\n    if (nonroot) {\n      if (er.code === \"EINVAL\" || er.code === \"EPERM\")\n        return true\n    }\n\n    return false\n  }\n}\n","module.exports = require(\"constants\");","var Stream = require('stream').Stream\n\nmodule.exports = legacy\n\nfunction legacy (fs) {\n  return {\n    ReadStream: ReadStream,\n    WriteStream: WriteStream\n  }\n\n  function ReadStream (path, options) {\n    if (!(this instanceof ReadStream)) return new ReadStream(path, options);\n\n    Stream.call(this);\n\n    var self = this;\n\n    this.path = path;\n    this.fd = null;\n    this.readable = true;\n    this.paused = false;\n\n    this.flags = 'r';\n    this.mode = 438; /*=0666*/\n    this.bufferSize = 64 * 1024;\n\n    options = options || {};\n\n    // Mixin options into this\n    var keys = Object.keys(options);\n    for (var index = 0, length = keys.length; index < length; index++) {\n      var key = keys[index];\n      this[key] = options[key];\n    }\n\n    if (this.encoding) this.setEncoding(this.encoding);\n\n    if (this.start !== undefined) {\n      if ('number' !== typeof this.start) {\n        throw TypeError('start must be a Number');\n      }\n      if (this.end === undefined) {\n        this.end = Infinity;\n      } else if ('number' !== typeof this.end) {\n        throw TypeError('end must be a Number');\n      }\n\n      if (this.start > this.end) {\n        throw new Error('start must be <= end');\n      }\n\n      this.pos = this.start;\n    }\n\n    if (this.fd !== null) {\n      process.nextTick(function() {\n        self._read();\n      });\n      return;\n    }\n\n    fs.open(this.path, this.flags, this.mode, function (err, fd) {\n      if (err) {\n        self.emit('error', err);\n        self.readable = false;\n        return;\n      }\n\n      self.fd = fd;\n      self.emit('open', fd);\n      self._read();\n    })\n  }\n\n  function WriteStream (path, options) {\n    if (!(this instanceof WriteStream)) return new WriteStream(path, options);\n\n    Stream.call(this);\n\n    this.path = path;\n    this.fd = null;\n    this.writable = true;\n\n    this.flags = 'w';\n    this.encoding = 'binary';\n    this.mode = 438; /*=0666*/\n    this.bytesWritten = 0;\n\n    options = options || {};\n\n    // Mixin options into this\n    var keys = Object.keys(options);\n    for (var index = 0, length = keys.length; index < length; index++) {\n      var key = keys[index];\n      this[key] = options[key];\n    }\n\n    if (this.start !== undefined) {\n      if ('number' !== typeof this.start) {\n        throw TypeError('start must be a Number');\n      }\n      if (this.start < 0) {\n        throw new Error('start must be >= zero');\n      }\n\n      this.pos = this.start;\n    }\n\n    this.busy = false;\n    this._queue = [];\n\n    if (this.fd === null) {\n      this._open = fs.open;\n      this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);\n      this.flush();\n    }\n  }\n}\n","module.exports = require(\"stream\");","'use strict'\n\nmodule.exports = clone\n\nfunction clone (obj) {\n  if (obj === null || typeof obj !== 'object')\n    return obj\n\n  if (obj instanceof Object)\n    var copy = { __proto__: obj.__proto__ }\n  else\n    var copy = Object.create(null)\n\n  Object.getOwnPropertyNames(obj).forEach(function (key) {\n    Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key))\n  })\n\n  return copy\n}\n","module.exports = require(\"util\");","module.exports = require(\"assert\");","var path = require('path');\nvar fs = require('fs');\nvar _0777 = parseInt('0777', 8);\n\nmodule.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP;\n\nfunction mkdirP (p, opts, f, made) {\n    if (typeof opts === 'function') {\n        f = opts;\n        opts = {};\n    }\n    else if (!opts || typeof opts !== 'object') {\n        opts = { mode: opts };\n    }\n    \n    var mode = opts.mode;\n    var xfs = opts.fs || fs;\n    \n    if (mode === undefined) {\n        mode = _0777 & (~process.umask());\n    }\n    if (!made) made = null;\n    \n    var cb = f || function () {};\n    p = path.resolve(p);\n    \n    xfs.mkdir(p, mode, function (er) {\n        if (!er) {\n            made = made || p;\n            return cb(null, made);\n        }\n        switch (er.code) {\n            case 'ENOENT':\n                mkdirP(path.dirname(p), opts, function (er, made) {\n                    if (er) cb(er, made);\n                    else mkdirP(p, opts, cb, made);\n                });\n                break;\n\n            // In the case of any other error, just see if there's a dir\n            // there already.  If so, then hooray!  If not, then something\n            // is borked.\n            default:\n                xfs.stat(p, function (er2, stat) {\n                    // if the stat fails, then that's super weird.\n                    // let the original error be the failure reason.\n                    if (er2 || !stat.isDirectory()) cb(er, made)\n                    else cb(null, made);\n                });\n                break;\n        }\n    });\n}\n\nmkdirP.sync = function sync (p, opts, made) {\n    if (!opts || typeof opts !== 'object') {\n        opts = { mode: opts };\n    }\n    \n    var mode = opts.mode;\n    var xfs = opts.fs || fs;\n    \n    if (mode === undefined) {\n        mode = _0777 & (~process.umask());\n    }\n    if (!made) made = null;\n\n    p = path.resolve(p);\n\n    try {\n        xfs.mkdirSync(p, mode);\n        made = made || p;\n    }\n    catch (err0) {\n        switch (err0.code) {\n            case 'ENOENT' :\n                made = sync(path.dirname(p), opts, made);\n                sync(p, opts, made);\n                break;\n\n            // In the case of any other error, just see if there's a dir\n            // there already.  If so, then hooray!  If not, then something\n            // is borked.\n            default:\n                var stat;\n                try {\n                    stat = xfs.statSync(p);\n                }\n                catch (err1) {\n                    throw err0;\n                }\n                if (!stat.isDirectory()) throw err0;\n                break;\n        }\n    }\n\n    return made;\n};\n","var pSlice = Array.prototype.slice;\nvar objectKeys = require('./lib/keys.js');\nvar isArguments = require('./lib/is_arguments.js');\n\nvar deepEqual = module.exports = function (actual, expected, opts) {\n  if (!opts) opts = {};\n  // 7.1. All identical values are equivalent, as determined by ===.\n  if (actual === expected) {\n    return true;\n\n  } else if (actual instanceof Date && expected instanceof Date) {\n    return actual.getTime() === expected.getTime();\n\n  // 7.3. Other pairs that do not both pass typeof value == 'object',\n  // equivalence is determined by ==.\n  } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {\n    return opts.strict ? actual === expected : actual == expected;\n\n  // 7.4. For all other Object pairs, including Array objects, equivalence is\n  // determined by having the same number of owned properties (as verified\n  // with Object.prototype.hasOwnProperty.call), the same set of keys\n  // (although not necessarily the same order), equivalent values for every\n  // corresponding key, and an identical 'prototype' property. Note: this\n  // accounts for both named and indexed properties on Arrays.\n  } else {\n    return objEquiv(actual, expected, opts);\n  }\n}\n\nfunction isUndefinedOrNull(value) {\n  return value === null || value === undefined;\n}\n\nfunction isBuffer (x) {\n  if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;\n  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n    return false;\n  }\n  if (x.length > 0 && typeof x[0] !== 'number') return false;\n  return true;\n}\n\nfunction objEquiv(a, b, opts) {\n  var i, key;\n  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\n    return false;\n  // an identical 'prototype' property.\n  if (a.prototype !== b.prototype) return false;\n  //~~~I've managed to break Object.keys through screwy arguments passing.\n  //   Converting to array solves the problem.\n  if (isArguments(a)) {\n    if (!isArguments(b)) {\n      return false;\n    }\n    a = pSlice.call(a);\n    b = pSlice.call(b);\n    return deepEqual(a, b, opts);\n  }\n  if (isBuffer(a)) {\n    if (!isBuffer(b)) {\n      return false;\n    }\n    if (a.length !== b.length) return false;\n    for (i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) return false;\n    }\n    return true;\n  }\n  try {\n    var ka = objectKeys(a),\n        kb = objectKeys(b);\n  } catch (e) {//happens when one is a string literal and the other isn't\n    return false;\n  }\n  // having the same number of owned properties (keys incorporates\n  // hasOwnProperty)\n  if (ka.length != kb.length)\n    return false;\n  //the same set of keys (although not necessarily the same order),\n  ka.sort();\n  kb.sort();\n  //~~~cheap key test\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i])\n      return false;\n  }\n  //equivalent values for every corresponding key, and\n  //~~~possibly expensive deep test\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!deepEqual(a[key], b[key], opts)) return false;\n  }\n  return typeof a === typeof b;\n}\n","exports = module.exports = typeof Object.keys === 'function'\n  ? Object.keys : shim;\n\nexports.shim = shim;\nfunction shim (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n}\n","var supportsArgumentsClass = (function(){\n  return Object.prototype.toString.call(arguments)\n})() == '[object Arguments]';\n\nexports = module.exports = supportsArgumentsClass ? supported : unsupported;\n\nexports.supported = supported;\nfunction supported(object) {\n  return Object.prototype.toString.call(object) == '[object Arguments]';\n};\n\nexports.unsupported = unsupported;\nfunction unsupported(object){\n  return object &&\n    typeof object == 'object' &&\n    typeof object.length == 'number' &&\n    Object.prototype.hasOwnProperty.call(object, 'callee') &&\n    !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||\n    false;\n};\n","import helpers from '../../helpers/helpers';\n\nconst { linkIsInternal } = helpers;\n\nfunction onNewWindowHelper(\n  urlToGo,\n  disposition,\n  targetUrl,\n  internalUrls,\n  preventDefault,\n  openExternal,\n  createAboutBlankWindow,\n  nativeTabsSupported,\n  createNewTab,\n) {\n  if (!linkIsInternal(targetUrl, urlToGo, internalUrls)) {\n    openExternal(urlToGo);\n    preventDefault();\n  } else if (urlToGo === 'about:blank') {\n    const newWindow = createAboutBlankWindow();\n    preventDefault(newWindow);\n  } else if (nativeTabsSupported()) {\n    if (disposition === 'background-tab') {\n      const newTab = createNewTab(urlToGo, false);\n      preventDefault(newTab);\n    } else if (disposition === 'foreground-tab') {\n      const newTab = createNewTab(urlToGo, true);\n      preventDefault(newTab);\n    }\n  }\n}\n\nexport default { onNewWindowHelper };\n","import wurl from 'wurl';\nimport os from 'os';\nimport fs from 'fs';\nimport path from 'path';\n\nconst INJECT_CSS_PATH = path.join(__dirname, '..', 'inject/inject.css');\nconst log = require('loglevel');\n\nfunction isOSX() {\n  return os.platform() === 'darwin';\n}\n\nfunction isLinux() {\n  return os.platform() === 'linux';\n}\n\nfunction isWindows() {\n  return os.platform() === 'win32';\n}\n\nfunction linkIsInternal(currentUrl, newUrl, internalUrlRegex) {\n  if (newUrl === 'about:blank') {\n    return true;\n  }\n\n  if (internalUrlRegex) {\n    const regex = RegExp(internalUrlRegex);\n    return regex.test(newUrl);\n  }\n\n  const currentDomain = wurl('domain', currentUrl);\n  const newDomain = wurl('domain', newUrl);\n  return currentDomain === newDomain;\n}\n\nfunction shouldInjectCss() {\n  try {\n    fs.accessSync(INJECT_CSS_PATH, fs.F_OK);\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction getCssToInject() {\n  return fs.readFileSync(INJECT_CSS_PATH).toString();\n}\n\n/**\n * Helper method to print debug messages from the main process in the browser window\n * @param {BrowserWindow} browserWindow\n * @param message\n */\nfunction debugLog(browserWindow, message) {\n  // need the timeout as it takes time for the preload javascript to be loaded in the window\n  setTimeout(() => {\n    browserWindow.webContents.send('debug', message);\n  }, 3000);\n  log.info(message);\n}\n\nfunction getAppIcon() {\n  return path.join(__dirname, '../', `/icon.${isWindows() ? 'ico' : 'png'}`);\n}\n\nfunction nativeTabsSupported() {\n  return isOSX();\n}\n\nfunction getCounterValue(title) {\n  const itemCountRegex = /[([{]([\\d.,]*)\\+?[}\\])]/;\n  const match = itemCountRegex.exec(title);\n  return match ? match[1] : undefined;\n}\n\nexport default {\n  isOSX,\n  isLinux,\n  isWindows,\n  linkIsInternal,\n  getCssToInject,\n  debugLog,\n  shouldInjectCss,\n  getAppIcon,\n  nativeTabsSupported,\n  getCounterValue,\n};\n","module.exports = function (arg, url) {\r\n\r\n    function _t() {\r\n        return new RegExp(/(.*?)\\.?([^\\.]*?)\\.(gl|com|net|org|biz|ws|in|me|co\\.uk|co|org\\.uk|ltd\\.uk|plc\\.uk|me\\.uk|edu|mil|br\\.com|cn\\.com|eu\\.com|hu\\.com|no\\.com|qc\\.com|sa\\.com|se\\.com|se\\.net|us\\.com|uy\\.com|ac|co\\.ac|gv\\.ac|or\\.ac|ac\\.ac|af|am|as|at|ac\\.at|co\\.at|gv\\.at|or\\.at|asn\\.au|com\\.au|edu\\.au|org\\.au|net\\.au|id\\.au|be|ac\\.be|adm\\.br|adv\\.br|am\\.br|arq\\.br|art\\.br|bio\\.br|cng\\.br|cnt\\.br|com\\.br|ecn\\.br|eng\\.br|esp\\.br|etc\\.br|eti\\.br|fm\\.br|fot\\.br|fst\\.br|g12\\.br|gov\\.br|ind\\.br|inf\\.br|jor\\.br|lel\\.br|med\\.br|mil\\.br|net\\.br|nom\\.br|ntr\\.br|odo\\.br|org\\.br|ppg\\.br|pro\\.br|psc\\.br|psi\\.br|rec\\.br|slg\\.br|tmp\\.br|tur\\.br|tv\\.br|vet\\.br|zlg\\.br|br|ab\\.ca|bc\\.ca|mb\\.ca|nb\\.ca|nf\\.ca|ns\\.ca|nt\\.ca|on\\.ca|pe\\.ca|qc\\.ca|sk\\.ca|yk\\.ca|ca|cc|ac\\.cn|com\\.cn|edu\\.cn|gov\\.cn|org\\.cn|bj\\.cn|sh\\.cn|tj\\.cn|cq\\.cn|he\\.cn|nm\\.cn|ln\\.cn|jl\\.cn|hl\\.cn|js\\.cn|zj\\.cn|ah\\.cn|gd\\.cn|gx\\.cn|hi\\.cn|sc\\.cn|gz\\.cn|yn\\.cn|xz\\.cn|sn\\.cn|gs\\.cn|qh\\.cn|nx\\.cn|xj\\.cn|tw\\.cn|hk\\.cn|mo\\.cn|cn|cx|cz|de|dk|fo|com\\.ec|tm\\.fr|com\\.fr|asso\\.fr|presse\\.fr|fr|gf|gs|co\\.il|net\\.il|ac\\.il|k12\\.il|gov\\.il|muni\\.il|ac\\.in|co\\.in|org\\.in|ernet\\.in|gov\\.in|net\\.in|res\\.in|is|it|ac\\.jp|co\\.jp|go\\.jp|or\\.jp|ne\\.jp|ac\\.kr|co\\.kr|go\\.kr|ne\\.kr|nm\\.kr|or\\.kr|li|lt|lu|asso\\.mc|tm\\.mc|com\\.mm|org\\.mm|net\\.mm|edu\\.mm|gov\\.mm|ms|nl|no|nu|pl|ro|org\\.ro|store\\.ro|tm\\.ro|firm\\.ro|www\\.ro|arts\\.ro|rec\\.ro|info\\.ro|nom\\.ro|nt\\.ro|se|si|com\\.sg|org\\.sg|net\\.sg|gov\\.sg|sk|st|tf|ac\\.th|co\\.th|go\\.th|mi\\.th|net\\.th|or\\.th|tm|to|com\\.tr|edu\\.tr|gov\\.tr|k12\\.tr|net\\.tr|org\\.tr|com\\.tw|org\\.tw|net\\.tw|ac\\.uk|uk\\.com|uk\\.net|gb\\.com|gb\\.net|vg|sh|kz|ch|info|ua|gov|name|pro|ie|hk|com\\.hk|org\\.hk|net\\.hk|edu\\.hk|us|tk|cd|by|ad|lv|eu\\.lv|bz|es|jp|cl|ag|mobi|eu|co\\.nz|org\\.nz|net\\.nz|maori\\.nz|iwi\\.nz|io|la|md|sc|sg|vc|tw|travel|my|se|tv|pt|com\\.pt|edu\\.pt|asia|fi|com\\.ve|net\\.ve|fi|org\\.ve|web\\.ve|info\\.ve|co\\.ve|tel|im|gr|ru|net\\.ru|org\\.ru|hr|com\\.hr|ly|xyz)$/);\r\n    }\r\n\r\n    function _d(s) {\r\n      return decodeURIComponent(s.replace(/\\+/g, ' '));\r\n    }\r\n\r\n    function _i(arg, str) {\r\n        var sptr = arg.charAt(0),\r\n            split = str.split(sptr);\r\n\r\n        if (sptr === arg) { return split; }\r\n\r\n        arg = parseInt(arg.substring(1), 10);\r\n\r\n        return split[arg < 0 ? split.length + arg : arg - 1];\r\n    }\r\n\r\n    function _f(arg, str) {\r\n        var sptr = arg.charAt(0),\r\n            split = str.split('&'),\r\n            field = [],\r\n            params = {},\r\n            tmp = [],\r\n            arg2 = arg.substring(1);\r\n\r\n        for (var i = 0, ii = split.length; i < ii; i++) {\r\n            field = split[i].match(/(.*?)=(.*)/);\r\n\r\n            // TODO: regex should be able to handle this.\r\n            if ( ! field) {\r\n                field = [split[i], split[i], ''];\r\n            }\r\n\r\n            if (field[1].replace(/\\s/g, '') !== '') {\r\n                field[2] = _d(field[2] || '');\r\n\r\n                // If we have a match just return it right away.\r\n                if (arg2 === field[1]) { return field[2]; }\r\n\r\n                // Check for array pattern.\r\n                tmp = field[1].match(/(.*)\\[([0-9]+)\\]/);\r\n\r\n                if (tmp) {\r\n                    params[tmp[1]] = params[tmp[1]] || [];\r\n                \r\n                    params[tmp[1]][tmp[2]] = field[2];\r\n                }\r\n                else {\r\n                    params[field[1]] = field[2];\r\n                }\r\n            }\r\n        }\r\n\r\n        if (sptr === arg) { return params; }\r\n\r\n        return params[arg2];\r\n    }\r\n\r\n    var _l = {}, tmp, tmp2;\r\n\r\n    if (arg === 'tld?') { return _t(); }\r\n\r\n    url = url || window.location.toString();\r\n\r\n    if ( ! arg) { return url; }\r\n\r\n    arg = arg.toString();\r\n\r\n    if (tmp = url.match(/^mailto:([^\\/].+)/)) {\r\n        _l.protocol = 'mailto';\r\n        _l.email = tmp[1];\r\n    }\r\n    else {\r\n\r\n        // Ignore Hashbangs.\r\n        if (tmp = url.match(/(.*?)\\/#\\!(.*)/)) {\r\n            url = tmp[1] + tmp[2];\r\n        }\r\n\r\n        // Hash.\r\n        if (tmp = url.match(/(.*?)#(.*)/)) {\r\n            _l.hash = tmp[2];\r\n            url = tmp[1];\r\n        }\r\n\r\n        // Return hash parts.\r\n        if (_l.hash && arg.match(/^#/)) { return _f(arg, _l.hash); }\r\n\r\n        // Query\r\n        if (tmp = url.match(/(.*?)\\?(.*)/)) {\r\n            _l.query = tmp[2];\r\n            url = tmp[1];\r\n        }\r\n\r\n        // Return query parts.\r\n        if (_l.query && arg.match(/^\\?/)) { return _f(arg, _l.query); }\r\n\r\n        // Protocol.\r\n        if (tmp = url.match(/(.*?)\\:?\\/\\/(.*)/)) {\r\n            _l.protocol = tmp[1].toLowerCase();\r\n            url = tmp[2];\r\n        }\r\n\r\n        // Path.\r\n        if (tmp = url.match(/(.*?)(\\/.*)/)) {\r\n            _l.path = tmp[2];\r\n            url = tmp[1];\r\n        }\r\n\r\n        // Clean up path.\r\n        _l.path = (_l.path || '').replace(/^([^\\/])/, '/$1');\r\n\r\n        // Return path parts.\r\n        if (arg.match(/^[\\-0-9]+$/)) { arg = arg.replace(/^([^\\/])/, '/$1'); }\r\n        if (arg.match(/^\\//)) { return _i(arg, _l.path.substring(1)); }\r\n\r\n        // File.\r\n        tmp = _i('/-1', _l.path.substring(1));\r\n        \r\n        if (tmp && (tmp = tmp.match(/(.*?)\\.([^.]+)$/))) {\r\n            _l.file = tmp[0];\r\n            _l.filename = tmp[1];\r\n            _l.fileext = tmp[2];\r\n        }\r\n\r\n        // Port.\r\n        if (tmp = url.match(/(.*)\\:([0-9]+)$/)) {\r\n            _l.port = tmp[2];\r\n            url = tmp[1];\r\n        }\r\n\r\n        // Auth.\r\n        if (tmp = url.match(/(.*?)@(.*)/)) {\r\n            _l.auth = tmp[1];\r\n            url = tmp[2];\r\n        }\r\n\r\n        // User and pass.\r\n        if (_l.auth) {\r\n            tmp = _l.auth.match(/(.*)\\:(.*)/);\r\n\r\n            _l.user = tmp ? tmp[1] : _l.auth;\r\n            _l.pass = tmp ? tmp[2] : undefined;\r\n        }\r\n\r\n        // Hostname.\r\n        _l.hostname = url.toLowerCase();\r\n\r\n        // Return hostname parts.\r\n        if (arg.charAt(0) === '.') { return _i(arg, _l.hostname); }\r\n\r\n        // Domain, tld and sub domain.\r\n        if (_t()) {\r\n            tmp = _l.hostname.match(_t());\r\n\r\n            if (tmp) {\r\n                _l.tld = tmp[3];\r\n                _l.domain = tmp[2] ? tmp[2] + '.' + tmp[3] : undefined;\r\n                _l.sub = tmp[1] || undefined;\r\n            }\r\n        }\r\n\r\n        // Set port and protocol defaults if not set.\r\n        _l.port = _l.port || (_l.protocol === 'https' ? '443' : '80');\r\n        _l.protocol = _l.protocol || (_l.port === '443' ? 'https' : 'http');\r\n    }\r\n\r\n    // Return arg.\r\n    if (arg in _l) { return _l[arg]; }\r\n\r\n    // Return everything.\r\n    if (arg === '{}') { return _l; }\r\n\r\n    // Default to undefined for no match.\r\n    return undefined;\r\n};","module.exports = require(\"os\");","/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\n(function (root, definition) {\n    \"use strict\";\n    if (typeof define === 'function' && define.amd) {\n        define(definition);\n    } else if (typeof module === 'object' && module.exports) {\n        module.exports = definition();\n    } else {\n        root.log = definition();\n    }\n}(this, function () {\n    \"use strict\";\n\n    // Slightly dubious tricks to cut down minimized file size\n    var noop = function() {};\n    var undefinedType = \"undefined\";\n\n    var logMethods = [\n        \"trace\",\n        \"debug\",\n        \"info\",\n        \"warn\",\n        \"error\"\n    ];\n\n    // Cross-browser bind equivalent that works at least back to IE6\n    function bindMethod(obj, methodName) {\n        var method = obj[methodName];\n        if (typeof method.bind === 'function') {\n            return method.bind(obj);\n        } else {\n            try {\n                return Function.prototype.bind.call(method, obj);\n            } catch (e) {\n                // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n                return function() {\n                    return Function.prototype.apply.apply(method, [obj, arguments]);\n                };\n            }\n        }\n    }\n\n    // Build the best logging method possible for this env\n    // Wherever possible we want to bind, not wrap, to preserve stack traces\n    function realMethod(methodName) {\n        if (methodName === 'debug') {\n            methodName = 'log';\n        }\n\n        if (typeof console === undefinedType) {\n            return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n        } else if (console[methodName] !== undefined) {\n            return bindMethod(console, methodName);\n        } else if (console.log !== undefined) {\n            return bindMethod(console, 'log');\n        } else {\n            return noop;\n        }\n    }\n\n    // These private functions always need `this` to be set properly\n\n    function replaceLoggingMethods(level, loggerName) {\n        /*jshint validthis:true */\n        for (var i = 0; i < logMethods.length; i++) {\n            var methodName = logMethods[i];\n            this[methodName] = (i < level) ?\n                noop :\n                this.methodFactory(methodName, level, loggerName);\n        }\n\n        // Define log.log as an alias for log.debug\n        this.log = this.debug;\n    }\n\n    // In old IE versions, the console isn't present until you first open it.\n    // We build realMethod() replacements here that regenerate logging methods\n    function enableLoggingWhenConsoleArrives(methodName, level, loggerName) {\n        return function () {\n            if (typeof console !== undefinedType) {\n                replaceLoggingMethods.call(this, level, loggerName);\n                this[methodName].apply(this, arguments);\n            }\n        };\n    }\n\n    // By default, we use closely bound real methods wherever possible, and\n    // otherwise we wait for a console to appear, and then try again.\n    function defaultMethodFactory(methodName, level, loggerName) {\n        /*jshint validthis:true */\n        return realMethod(methodName) ||\n               enableLoggingWhenConsoleArrives.apply(this, arguments);\n    }\n\n    function Logger(name, defaultLevel, factory) {\n      var self = this;\n      var currentLevel;\n      var storageKey = \"loglevel\";\n      if (name) {\n        storageKey += \":\" + name;\n      }\n\n      function persistLevelIfPossible(levelNum) {\n          var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n\n          if (typeof window === undefinedType) return;\n\n          // Use localStorage if available\n          try {\n              window.localStorage[storageKey] = levelName;\n              return;\n          } catch (ignore) {}\n\n          // Use session cookie as fallback\n          try {\n              window.document.cookie =\n                encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n          } catch (ignore) {}\n      }\n\n      function getPersistedLevel() {\n          var storedLevel;\n\n          if (typeof window === undefinedType) return;\n\n          try {\n              storedLevel = window.localStorage[storageKey];\n          } catch (ignore) {}\n\n          // Fallback to cookies if local storage gives us nothing\n          if (typeof storedLevel === undefinedType) {\n              try {\n                  var cookie = window.document.cookie;\n                  var location = cookie.indexOf(\n                      encodeURIComponent(storageKey) + \"=\");\n                  if (location !== -1) {\n                      storedLevel = /^([^;]+)/.exec(cookie.slice(location))[1];\n                  }\n              } catch (ignore) {}\n          }\n\n          // If the stored level is not valid, treat it as if nothing was stored.\n          if (self.levels[storedLevel] === undefined) {\n              storedLevel = undefined;\n          }\n\n          return storedLevel;\n      }\n\n      /*\n       *\n       * Public logger API - see https://github.com/pimterry/loglevel for details\n       *\n       */\n\n      self.name = name;\n\n      self.levels = { \"TRACE\": 0, \"DEBUG\": 1, \"INFO\": 2, \"WARN\": 3,\n          \"ERROR\": 4, \"SILENT\": 5};\n\n      self.methodFactory = factory || defaultMethodFactory;\n\n      self.getLevel = function () {\n          return currentLevel;\n      };\n\n      self.setLevel = function (level, persist) {\n          if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n              level = self.levels[level.toUpperCase()];\n          }\n          if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n              currentLevel = level;\n              if (persist !== false) {  // defaults to true\n                  persistLevelIfPossible(level);\n              }\n              replaceLoggingMethods.call(self, level, name);\n              if (typeof console === undefinedType && level < self.levels.SILENT) {\n                  return \"No console available for logging\";\n              }\n          } else {\n              throw \"log.setLevel() called with invalid level: \" + level;\n          }\n      };\n\n      self.setDefaultLevel = function (level) {\n          if (!getPersistedLevel()) {\n              self.setLevel(level, false);\n          }\n      };\n\n      self.enableAll = function(persist) {\n          self.setLevel(self.levels.TRACE, persist);\n      };\n\n      self.disableAll = function(persist) {\n          self.setLevel(self.levels.SILENT, persist);\n      };\n\n      // Initialize with the right level\n      var initialLevel = getPersistedLevel();\n      if (initialLevel == null) {\n          initialLevel = defaultLevel == null ? \"WARN\" : defaultLevel;\n      }\n      self.setLevel(initialLevel, false);\n    }\n\n    /*\n     *\n     * Top-level API\n     *\n     */\n\n    var defaultLogger = new Logger();\n\n    var _loggersByName = {};\n    defaultLogger.getLogger = function getLogger(name) {\n        if (typeof name !== \"string\" || name === \"\") {\n          throw new TypeError(\"You must supply a name when creating a logger.\");\n        }\n\n        var logger = _loggersByName[name];\n        if (!logger) {\n          logger = _loggersByName[name] = new Logger(\n            name, defaultLogger.getLevel(), defaultLogger.methodFactory);\n        }\n        return logger;\n    };\n\n    // Grab the current global log variable in case of overwrite\n    var _log = (typeof window !== undefinedType) ? window.log : undefined;\n    defaultLogger.noConflict = function() {\n        if (typeof window !== undefinedType &&\n               window.log === defaultLogger) {\n            window.log = _log;\n        }\n\n        return defaultLogger;\n    };\n\n    defaultLogger.getLoggers = function getLoggers() {\n        return _loggersByName;\n    };\n\n    return defaultLogger;\n}));\n","import { Menu, shell, clipboard } from 'electron';\n\n/**\n * @param nativefierVersion\n * @param appQuit\n * @param zoomIn\n * @param zoomOut\n * @param zoomReset\n * @param zoomBuildTimeValue\n * @param goBack\n * @param goForward\n * @param getCurrentUrl\n * @param clearAppData\n * @param disableDevTools\n */\nfunction createMenu({\n  nativefierVersion,\n  appQuit,\n  zoomIn,\n  zoomOut,\n  zoomReset,\n  zoomBuildTimeValue,\n  goBack,\n  goForward,\n  getCurrentUrl,\n  clearAppData,\n  disableDevTools,\n}) {\n  if (Menu.getApplicationMenu()) {\n    return;\n  }\n  const zoomResetLabel =\n    zoomBuildTimeValue === 1.0\n      ? 'Reset Zoom'\n      : `Reset Zoom (to ${zoomBuildTimeValue * 100}%, set at build time)`;\n\n  const template = [\n    {\n      label: '&Edit',\n      submenu: [\n        {\n          label: 'Undo',\n          accelerator: 'CmdOrCtrl+Z',\n          role: 'undo',\n        },\n        {\n          label: 'Redo',\n          accelerator: 'Shift+CmdOrCtrl+Z',\n          role: 'redo',\n        },\n        {\n          type: 'separator',\n        },\n        {\n          label: 'Cut',\n          accelerator: 'CmdOrCtrl+X',\n          role: 'cut',\n        },\n        {\n          label: 'Copy',\n          accelerator: 'CmdOrCtrl+C',\n          role: 'copy',\n        },\n        {\n          label: 'Copy Current URL',\n          accelerator: 'CmdOrCtrl+L',\n          click: () => {\n            const currentURL = getCurrentUrl();\n            clipboard.writeText(currentURL);\n          },\n        },\n        {\n          label: 'Paste',\n          accelerator: 'CmdOrCtrl+V',\n          role: 'paste',\n        },\n        {\n          label: 'Paste and Match Style',\n          accelerator: 'CmdOrCtrl+Shift+V',\n          role: 'pasteandmatchstyle',\n        },\n        {\n          label: 'Select All',\n          accelerator: 'CmdOrCtrl+A',\n          role: 'selectall',\n        },\n        {\n          label: 'Clear App Data',\n          click: () => {\n            clearAppData();\n          },\n        },\n      ],\n    },\n    {\n      label: '&View',\n      submenu: [\n        {\n          label: 'Back',\n          accelerator: 'CmdOrCtrl+[',\n          click: () => {\n            goBack();\n          },\n        },\n        {\n          label: 'Forward',\n          accelerator: 'CmdOrCtrl+]',\n          click: () => {\n            goForward();\n          },\n        },\n        {\n          label: 'Reload',\n          accelerator: 'CmdOrCtrl+R',\n          click: (item, focusedWindow) => {\n            if (focusedWindow) {\n              focusedWindow.reload();\n            }\n          },\n        },\n        {\n          type: 'separator',\n        },\n        {\n          label: 'Toggle Full Screen',\n          accelerator: (() => {\n            if (process.platform === 'darwin') {\n              return 'Ctrl+Command+F';\n            }\n            return 'F11';\n          })(),\n          click: (item, focusedWindow) => {\n            if (focusedWindow) {\n              focusedWindow.setFullScreen(!focusedWindow.isFullScreen());\n            }\n          },\n        },\n        {\n          label: 'Zoom In',\n          accelerator: (() => {\n            if (process.platform === 'darwin') {\n              return 'Command+=';\n            }\n            return 'Ctrl+=';\n          })(),\n          click: () => {\n            zoomIn();\n          },\n        },\n        {\n          label: 'Zoom Out',\n          accelerator: (() => {\n            if (process.platform === 'darwin') {\n              return 'Command+-';\n            }\n            return 'Ctrl+-';\n          })(),\n          click: () => {\n            zoomOut();\n          },\n        },\n        {\n          label: zoomResetLabel,\n          accelerator: (() => {\n            if (process.platform === 'darwin') {\n              return 'Command+0';\n            }\n            return 'Ctrl+0';\n          })(),\n          click: () => {\n            zoomReset();\n          },\n        },\n        {\n          label: 'Toggle Developer Tools',\n          accelerator: (() => {\n            if (process.platform === 'darwin') {\n              return 'Alt+Command+I';\n            }\n            return 'Ctrl+Shift+I';\n          })(),\n          click: (item, focusedWindow) => {\n            if (focusedWindow) {\n              focusedWindow.toggleDevTools();\n            }\n          },\n        },\n      ],\n    },\n    {\n      label: '&Window',\n      role: 'window',\n      submenu: [\n        {\n          label: 'Minimize',\n          accelerator: 'CmdOrCtrl+M',\n          role: 'minimize',\n        },\n        {\n          label: 'Close',\n          accelerator: 'CmdOrCtrl+W',\n          role: 'close',\n        },\n      ],\n    },\n    {\n      label: '&Help',\n      role: 'help',\n      submenu: [\n        {\n          label: `Built with Nativefier v${nativefierVersion}`,\n          click: () => {\n            shell.openExternal('https://github.com/jiahaog/nativefier');\n          },\n        },\n        {\n          label: 'Report an Issue',\n          click: () => {\n            shell.openExternal('https://github.com/jiahaog/nativefier/issues');\n          },\n        },\n      ],\n    },\n  ];\n\n  if (disableDevTools) {\n    // remove last item (dev tools) from menu > view\n    const { submenu } = template[1];\n    submenu.splice(submenu.length - 1, 1);\n  }\n\n  if (process.platform === 'darwin') {\n    template.unshift({\n      label: 'E&lectron',\n      submenu: [\n        {\n          label: 'Services',\n          role: 'services',\n          submenu: [],\n        },\n        {\n          type: 'separator',\n        },\n        {\n          label: 'Hide App',\n          accelerator: 'Command+H',\n          role: 'hide',\n        },\n        {\n          label: 'Hide Others',\n          accelerator: 'Command+Shift+H',\n          role: 'hideothers',\n        },\n        {\n          label: 'Show All',\n          role: 'unhide',\n        },\n        {\n          type: 'separator',\n        },\n        {\n          label: 'Quit',\n          accelerator: 'Command+Q',\n          click: () => {\n            appQuit();\n          },\n        },\n      ],\n    });\n    template[3].submenu.push(\n      {\n        type: 'separator',\n      },\n      {\n        label: 'Bring All to Front',\n        role: 'front',\n      },\n    );\n  }\n\n  const menu = Menu.buildFromTemplate(template);\n  Menu.setApplicationMenu(menu);\n}\n\nexport default createMenu;\n","import { shell } from 'electron';\nimport contextMenu from 'electron-context-menu';\n\nfunction initContextMenu(createNewWindow, createNewTab) {\n  contextMenu({\n    prepend: (params) => {\n      const items = [];\n      if (params.linkURL) {\n        items.push({\n          label: 'Open Link in Default Browser',\n          click: () => {\n            shell.openExternal(params.linkURL);\n          },\n        });\n        items.push({\n          label: 'Open Link in New Window',\n          click: () => {\n            createNewWindow(params.linkURL);\n          },\n        });\n        if (createNewTab) {\n          items.push({\n            label: 'Open Link in New Tab',\n            click: () => {\n              createNewTab(params.linkURL, false);\n            },\n          });\n        }\n      }\n      return items;\n    },\n  });\n}\n\nexport default initContextMenu;\n","'use strict';\nconst electron = require('electron');\nconst {download} = require('electron-dl');\nconst isDev = require('electron-is-dev');\n\nconst webContents = win => win.webContents || win.getWebContents();\n\nfunction create(win, options) {\n\twebContents(win).on('context-menu', (event, props) => {\n\t\tif (typeof options.shouldShowMenu === 'function' && options.shouldShowMenu(event, props) === false) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst {editFlags} = props;\n\t\tconst hasText = props.selectionText.trim().length > 0;\n\t\tconst can = type => editFlags[`can${type}`] && hasText;\n\n\t\tlet menuTpl = [{\n\t\t\ttype: 'separator'\n\t\t}, {\n\t\t\tid: 'cut',\n\t\t\tlabel: 'Cut',\n\t\t\t// Needed because of macOS limitation:\n\t\t\t// https://github.com/electron/electron/issues/5860\n\t\t\trole: can('Cut') ? 'cut' : '',\n\t\t\tenabled: can('Cut'),\n\t\t\tvisible: props.isEditable\n\t\t}, {\n\t\t\tid: 'copy',\n\t\t\tlabel: 'Copy',\n\t\t\trole: can('Copy') ? 'copy' : '',\n\t\t\tenabled: can('Copy'),\n\t\t\tvisible: props.isEditable || hasText\n\t\t}, {\n\t\t\tid: 'paste',\n\t\t\tlabel: 'Paste',\n\t\t\trole: editFlags.canPaste ? 'paste' : '',\n\t\t\tenabled: editFlags.canPaste,\n\t\t\tvisible: props.isEditable\n\t\t}, {\n\t\t\ttype: 'separator'\n\t\t}];\n\n\t\tif (props.mediaType === 'image') {\n\t\t\tmenuTpl = [{\n\t\t\t\ttype: 'separator'\n\t\t\t}, {\n\t\t\t\tid: 'save',\n\t\t\t\tlabel: 'Save Image',\n\t\t\t\tclick(item, win) {\n\t\t\t\t\tdownload(win, props.srcURL);\n\t\t\t\t}\n\t\t\t}];\n\n\t\t\tif (options.showSaveImageAs) {\n\t\t\t\tmenuTpl.push({\n\t\t\t\t\tid: 'saveImageAs',\n\t\t\t\t\tlabel: 'Save Image As…',\n\t\t\t\t\tclick(item, win) {\n\t\t\t\t\t\tdownload(win, props.srcURL, {saveAs: true});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tmenuTpl.push({\n\t\t\t\ttype: 'separator'\n\t\t\t});\n\t\t}\n\n\t\tif (props.linkURL && props.mediaType === 'none') {\n\t\t\tmenuTpl = [{\n\t\t\t\ttype: 'separator'\n\t\t\t}, {\n\t\t\t\tid: 'copyLink',\n\t\t\t\tlabel: 'Copy Link',\n\t\t\t\tclick() {\n\t\t\t\t\telectron.clipboard.write({\n\t\t\t\t\t\tbookmark: props.linkText,\n\t\t\t\t\t\ttext: props.linkURL\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttype: 'separator'\n\t\t\t}];\n\t\t}\n\n\t\tif (options.showCopyImageAddress && props.mediaType === 'image') {\n\t\t\tmenuTpl.push({\n\t\t\t\ttype: 'separator'\n\t\t\t}, {\n\t\t\t\tid: 'copyImageAddress',\n\t\t\t\tlabel: 'Copy Image Address',\n\t\t\t\tclick() {\n\t\t\t\t\telectron.clipboard.write({\n\t\t\t\t\t\tbookmark: props.srcURL,\n\t\t\t\t\t\ttext: props.srcURL\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttype: 'separator'\n\t\t\t});\n\t\t}\n\n\t\tif (options.prepend) {\n\t\t\tconst result = options.prepend(props, win);\n\n\t\t\tif (Array.isArray(result)) {\n\t\t\t\tmenuTpl.unshift(...result);\n\t\t\t}\n\t\t}\n\n\t\tif (options.append) {\n\t\t\tconst result = options.append(props, win);\n\n\t\t\tif (Array.isArray(result)) {\n\t\t\t\tmenuTpl.push(...result);\n\t\t\t}\n\t\t}\n\n\t\tif (options.showInspectElement || (options.showInspectElement !== false && isDev)) {\n\t\t\tmenuTpl.push({\n\t\t\t\ttype: 'separator'\n\t\t\t}, {\n\t\t\t\tid: 'inspect',\n\t\t\t\tlabel: 'Inspect Element',\n\t\t\t\tclick() {\n\t\t\t\t\twin.inspectElement(props.x, props.y);\n\n\t\t\t\t\tif (webContents(win).isDevToolsOpened()) {\n\t\t\t\t\t\twebContents(win).devToolsWebContents.focus();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttype: 'separator'\n\t\t\t});\n\t\t}\n\n\t\t// Apply custom labels for default menu items\n\t\tif (options.labels) {\n\t\t\tfor (const menuItem of menuTpl) {\n\t\t\t\tif (options.labels[menuItem.id]) {\n\t\t\t\t\tmenuItem.label = options.labels[menuItem.id];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Filter out leading/trailing separators\n\t\t// TODO: https://github.com/electron/electron/issues/5869\n\t\tmenuTpl = delUnusedElements(menuTpl);\n\n\t\tif (menuTpl.length > 0) {\n\t\t\tconst menu = (electron.remote ? electron.remote.Menu : electron.Menu).buildFromTemplate(menuTpl);\n\n\t\t\t/*\n\t\t\t * When electron.remote is not available this runs in the browser process.\n\t\t\t * We can safely use win in this case as it refers to the window the\n\t\t\t * context-menu should open in.\n\t\t\t * When this is being called from a webView, we can't use win as this\n\t\t\t * would refere to the webView which is not allowed to render a popup menu.\n\t\t\t */\n\t\t\tmenu.popup(electron.remote ? electron.remote.getCurrentWindow() : win);\n\t\t}\n\t});\n}\n\nfunction delUnusedElements(menuTpl) {\n\tlet notDeletedPrevEl;\n\treturn menuTpl.filter(el => el.visible !== false).filter((el, i, array) => {\n\t\tconst toDelete = el.type === 'separator' && (!notDeletedPrevEl || i === array.length - 1 || array[i + 1].type === 'separator');\n\t\tnotDeletedPrevEl = toDelete ? notDeletedPrevEl : el;\n\t\treturn !toDelete;\n\t});\n}\n\nmodule.exports = (options = {}) => {\n\tif (options.window) {\n\t\tconst win = options.window;\n\t\tconst wc = webContents(win);\n\n\t\t// When window is a webview that has not yet finished loading webContents is not available\n\t\tif (wc === undefined) {\n\t\t\twin.addEventListener('dom-ready', () => {\n\t\t\t\tcreate(win, options);\n\t\t\t}, {once: true});\n\t\t\treturn;\n\t\t}\n\n\t\treturn create(win, options);\n\t}\n\n\tfor (const win of (electron.BrowserWindow || electron.remote.BrowserWindow).getAllWindows()) {\n\t\tcreate(win, options);\n\t}\n\n\t(electron.app || electron.remote.app).on('browser-window-created', (event, win) => {\n\t\tcreate(win, options);\n\t});\n};\n","'use strict';\nconst electron = require('electron');\n\nconst app = electron.app || electron.remote.app;\n\nconst isEnvSet = 'ELECTRON_IS_DEV' in process.env;\nconst getFromEnv = parseInt(process.env.ELECTRON_IS_DEV, 10) === 1;\n\nmodule.exports = isEnvSet ? getFromEnv : !app.isPackaged;\n","import helpers from '../../helpers/helpers';\n\nconst { app, Tray, Menu, ipcMain, nativeImage } = require('electron');\n\nconst { getAppIcon, getCounterValue } = helpers;\n\n/**\n *\n * @param {{}} inpOptions AppArgs from nativefier.json\n * @param {electron.BrowserWindow} mainWindow MainWindow created from main.js\n * @returns {electron.Tray}\n */\nfunction createTrayIcon(inpOptions, mainWindow) {\n  const options = Object.assign({}, inpOptions);\n\n  if (options.tray) {\n    const iconPath = getAppIcon();\n    const nimage = nativeImage.createFromPath(iconPath);\n    const appIcon = new Tray(nimage);\n\n    const onClick = () => {\n      if (mainWindow.isVisible()) {\n        mainWindow.hide();\n      } else {\n        mainWindow.show();\n      }\n    };\n\n    const contextMenu = Menu.buildFromTemplate([\n      {\n        label: options.name,\n        click: onClick,\n      },\n      {\n        label: 'Quit',\n        click: app.exit,\n      },\n    ]);\n\n    appIcon.on('click', onClick);\n\n    mainWindow.on('show', () => {\n      appIcon.setHighlightMode('always');\n    });\n\n    mainWindow.on('hide', () => {\n      appIcon.setHighlightMode('never');\n    });\n\n    if (options.counter) {\n      mainWindow.on('page-title-updated', (e, title) => {\n        const counterValue = getCounterValue(title);\n        if (counterValue) {\n          appIcon.setToolTip(`(${counterValue})  ${options.name}`);\n        } else {\n          appIcon.setToolTip(options.name);\n        }\n      });\n    } else {\n      ipcMain.on('notification', () => {\n        if (mainWindow.isFocused()) {\n          return;\n        }\n        appIcon.setToolTip(`•  ${options.name}`);\n      });\n\n      mainWindow.on('focus', () => {\n        appIcon.setToolTip(options.name);\n      });\n    }\n\n    appIcon.setToolTip(options.name);\n    appIcon.setContextMenu(contextMenu);\n\n    return appIcon;\n  }\n\n  return null;\n}\n\nexport default createTrayIcon;\n","import fs from 'fs';\nimport path from 'path';\nimport helpers from './helpers';\n\nconst { isOSX, isWindows, isLinux } = helpers;\nconst log = require('loglevel');\n/**\n * Synchronously find a file or directory\n * @param {RegExp} pattern regex\n * @param {string} base path\n * @param {boolean} [findDir] if true, search results will be limited to only directories\n * @returns {Array}\n */\nfunction findSync(pattern, basePath, findDir) {\n  const matches = [];\n\n  (function findSyncRecurse(base) {\n    let children;\n    try {\n      children = fs.readdirSync(base);\n    } catch (exception) {\n      if (exception.code === 'ENOENT') {\n        return;\n      }\n      throw exception;\n    }\n\n    children.forEach((child) => {\n      const childPath = path.join(base, child);\n      const childIsDirectory = fs.lstatSync(childPath).isDirectory();\n      const patternMatches = pattern.test(childPath);\n\n      if (!patternMatches) {\n        if (!childIsDirectory) {\n          return;\n        }\n        findSyncRecurse(childPath);\n        return;\n      }\n\n      if (!findDir) {\n        matches.push(childPath);\n        return;\n      }\n\n      if (childIsDirectory) {\n        matches.push(childPath);\n      }\n    });\n  })(basePath);\n  return matches;\n}\n\nfunction linuxMatch() {\n  return findSync(/libpepflashplayer\\.so/, '/opt/google/chrome')[0];\n}\n\nfunction windowsMatch() {\n  return findSync(\n    /pepflashplayer\\.dll/,\n    'C:\\\\Program Files (x86)\\\\Google\\\\Chrome',\n  )[0];\n}\n\nfunction darwinMatch() {\n  return findSync(\n    /PepperFlashPlayer.plugin/,\n    '/Applications/Google Chrome.app/',\n    true,\n  )[0];\n}\n\nfunction inferFlash() {\n  if (isOSX()) {\n    return darwinMatch();\n  }\n\n  if (isWindows()) {\n    return windowsMatch();\n  }\n\n  if (isLinux()) {\n    return linuxMatch();\n  }\n\n  log.warn('Unable to determine OS to infer flash player');\n  return null;\n}\nexport default inferFlash;\n","var path = require('path');\nvar spawn = require('child_process').spawn;\nvar debug = require('debug')('electron-squirrel-startup');\nvar app = require('electron').app;\n\nvar run = function(args, done) {\n  var updateExe = path.resolve(path.dirname(process.execPath), '..', 'Update.exe');\n  debug('Spawning `%s` with args `%s`', updateExe, args);\n  spawn(updateExe, args, {\n    detached: true\n  }).on('close', done);\n};\n\nvar check = function() {\n  if (process.platform === 'win32') {\n    var cmd = process.argv[1];\n    debug('processing squirrel command `%s`', cmd);\n    var target = path.basename(process.execPath);\n\n    if (cmd === '--squirrel-install' || cmd === '--squirrel-updated') {\n      run(['--createShortcut=' + target + ''], app.quit);\n      return true;\n    }\n    if (cmd === '--squirrel-uninstall') {\n      run(['--removeShortcut=' + target + ''], app.quit);\n      return true;\n    }\n    if (cmd === '--squirrel-obsolete') {\n      app.quit();\n      return true;\n    }\n  }\n  return false;\n};\n\nmodule.exports = check();\n","module.exports = require(\"child_process\");","/**\n * Detect Electron renderer process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process !== 'undefined' && process.type === 'renderer') {\n  module.exports = require('./browser.js');\n} else {\n  module.exports = require('./node.js');\n}\n","/**\n * This is the web browser implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = 'undefined' != typeof chrome\n               && 'undefined' != typeof chrome.storage\n                  ? chrome.storage.local\n                  : localstorage();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n  'lightseagreen',\n  'forestgreen',\n  'goldenrod',\n  'dodgerblue',\n  'darkorchid',\n  'crimson'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\nfunction useColors() {\n  // NB: In an Electron preload script, document will be defined but not fully\n  // initialized. Since we know we're in Chrome, we'll just detect this case\n  // explicitly\n  if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {\n    return true;\n  }\n\n  // is webkit? http://stackoverflow.com/a/16459606/376773\n  // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n  return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n    // is firebug? http://stackoverflow.com/a/398120/376773\n    (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n    // is firefox >= v31?\n    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n    // double check webkit in userAgent just in case we are in a worker\n    (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nexports.formatters.j = function(v) {\n  try {\n    return JSON.stringify(v);\n  } catch (err) {\n    return '[UnexpectedJSONParseError]: ' + err.message;\n  }\n};\n\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var useColors = this.useColors;\n\n  args[0] = (useColors ? '%c' : '')\n    + this.namespace\n    + (useColors ? ' %c' : ' ')\n    + args[0]\n    + (useColors ? '%c ' : ' ')\n    + '+' + exports.humanize(this.diff);\n\n  if (!useColors) return;\n\n  var c = 'color: ' + this.color;\n  args.splice(1, 0, c, 'color: inherit')\n\n  // the final \"%c\" is somewhat tricky, because there could be other\n  // arguments passed either before or after the %c, so we need to\n  // figure out the correct index to insert the CSS into\n  var index = 0;\n  var lastC = 0;\n  args[0].replace(/%[a-zA-Z%]/g, function(match) {\n    if ('%%' === match) return;\n    index++;\n    if ('%c' === match) {\n      // we only are interested in the *last* %c\n      // (the user may have provided their own)\n      lastC = index;\n    }\n  });\n\n  args.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.log()` when available.\n * No-op when `console.log` is not a \"function\".\n *\n * @api public\n */\n\nfunction log() {\n  // this hackery is required for IE8/9, where\n  // the `console.log` function doesn't have 'apply'\n  return 'object' === typeof console\n    && console.log\n    && Function.prototype.apply.call(console.log, console, arguments);\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  try {\n    if (null == namespaces) {\n      exports.storage.removeItem('debug');\n    } else {\n      exports.storage.debug = namespaces;\n    }\n  } catch(e) {}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  var r;\n  try {\n    r = exports.storage.debug;\n  } catch(e) {}\n\n  // If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n  if (!r && typeof process !== 'undefined' && 'env' in process) {\n    r = process.env.DEBUG;\n  }\n\n  return r;\n}\n\n/**\n * Enable namespaces listed in `localStorage.debug` initially.\n */\n\nexports.enable(load());\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n  try {\n    return window.localStorage;\n  } catch (e) {}\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = createDebug.debug = createDebug['default'] = createDebug;\nexports.coerce = coerce;\nexports.disable = disable;\nexports.enable = enable;\nexports.enabled = enabled;\nexports.humanize = require('ms');\n\n/**\n * The currently active debug mode names, and names to skip.\n */\n\nexports.names = [];\nexports.skips = [];\n\n/**\n * Map of special \"%n\" handling functions, for the debug \"format\" argument.\n *\n * Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n */\n\nexports.formatters = {};\n\n/**\n * Previous log timestamp.\n */\n\nvar prevTime;\n\n/**\n * Select a color.\n * @param {String} namespace\n * @return {Number}\n * @api private\n */\n\nfunction selectColor(namespace) {\n  var hash = 0, i;\n\n  for (i in namespace) {\n    hash  = ((hash << 5) - hash) + namespace.charCodeAt(i);\n    hash |= 0; // Convert to 32bit integer\n  }\n\n  return exports.colors[Math.abs(hash) % exports.colors.length];\n}\n\n/**\n * Create a debugger with the given `namespace`.\n *\n * @param {String} namespace\n * @return {Function}\n * @api public\n */\n\nfunction createDebug(namespace) {\n\n  function debug() {\n    // disabled?\n    if (!debug.enabled) return;\n\n    var self = debug;\n\n    // set `diff` timestamp\n    var curr = +new Date();\n    var ms = curr - (prevTime || curr);\n    self.diff = ms;\n    self.prev = prevTime;\n    self.curr = curr;\n    prevTime = curr;\n\n    // turn the `arguments` into a proper Array\n    var args = new Array(arguments.length);\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i];\n    }\n\n    args[0] = exports.coerce(args[0]);\n\n    if ('string' !== typeof args[0]) {\n      // anything else let's inspect with %O\n      args.unshift('%O');\n    }\n\n    // apply any `formatters` transformations\n    var index = 0;\n    args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {\n      // if we encounter an escaped % then don't increase the array index\n      if (match === '%%') return match;\n      index++;\n      var formatter = exports.formatters[format];\n      if ('function' === typeof formatter) {\n        var val = args[index];\n        match = formatter.call(self, val);\n\n        // now we need to remove `args[index]` since it's inlined in the `format`\n        args.splice(index, 1);\n        index--;\n      }\n      return match;\n    });\n\n    // apply env-specific formatting (colors, etc.)\n    exports.formatArgs.call(self, args);\n\n    var logFn = debug.log || exports.log || console.log.bind(console);\n    logFn.apply(self, args);\n  }\n\n  debug.namespace = namespace;\n  debug.enabled = exports.enabled(namespace);\n  debug.useColors = exports.useColors();\n  debug.color = selectColor(namespace);\n\n  // env-specific initialization logic for debug instances\n  if ('function' === typeof exports.init) {\n    exports.init(debug);\n  }\n\n  return debug;\n}\n\n/**\n * Enables a debug mode by namespaces. This can include modes\n * separated by a colon and wildcards.\n *\n * @param {String} namespaces\n * @api public\n */\n\nfunction enable(namespaces) {\n  exports.save(namespaces);\n\n  exports.names = [];\n  exports.skips = [];\n\n  var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n  var len = split.length;\n\n  for (var i = 0; i < len; i++) {\n    if (!split[i]) continue; // ignore empty strings\n    namespaces = split[i].replace(/\\*/g, '.*?');\n    if (namespaces[0] === '-') {\n      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));\n    } else {\n      exports.names.push(new RegExp('^' + namespaces + '$'));\n    }\n  }\n}\n\n/**\n * Disable debug output.\n *\n * @api public\n */\n\nfunction disable() {\n  exports.enable('');\n}\n\n/**\n * Returns true if the given mode name is enabled, false otherwise.\n *\n * @param {String} name\n * @return {Boolean}\n * @api public\n */\n\nfunction enabled(name) {\n  var i, len;\n  for (i = 0, len = exports.skips.length; i < len; i++) {\n    if (exports.skips[i].test(name)) {\n      return false;\n    }\n  }\n  for (i = 0, len = exports.names.length; i < len; i++) {\n    if (exports.names[i].test(name)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * Coerce `val`.\n *\n * @param {Mixed} val\n * @return {Mixed}\n * @api private\n */\n\nfunction coerce(val) {\n  if (val instanceof Error) return val.stack || val.message;\n  return val;\n}\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isNaN(val) === false) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  if (ms >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (ms >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (ms >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (ms >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  return plural(ms, d, 'day') ||\n    plural(ms, h, 'hour') ||\n    plural(ms, m, 'minute') ||\n    plural(ms, s, 'second') ||\n    ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, n, name) {\n  if (ms < n) {\n    return;\n  }\n  if (ms < n * 1.5) {\n    return Math.floor(ms / n) + ' ' + name;\n  }\n  return Math.ceil(ms / n) + ' ' + name + 's';\n}\n","/**\n * Module dependencies.\n */\n\nvar tty = require('tty');\nvar util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n *\n * Expose `debug()` as the module.\n */\n\nexports = module.exports = require('./debug');\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(function (key) {\n  return /^debug_/i.test(key);\n}).reduce(function (obj, key) {\n  // camel-case\n  var prop = key\n    .substring(6)\n    .toLowerCase()\n    .replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });\n\n  // coerce string value into JS value\n  var val = process.env[key];\n  if (/^(yes|on|true|enabled)$/i.test(val)) val = true;\n  else if (/^(no|off|false|disabled)$/i.test(val)) val = false;\n  else if (val === 'null') val = null;\n  else val = Number(val);\n\n  obj[prop] = val;\n  return obj;\n}, {});\n\n/**\n * The file descriptor to write the `debug()` calls to.\n * Set the `DEBUG_FD` env variable to override with another value. i.e.:\n *\n *   $ DEBUG_FD=3 node script.js 3>debug.log\n */\n\nvar fd = parseInt(process.env.DEBUG_FD, 10) || 2;\n\nif (1 !== fd && 2 !== fd) {\n  util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()\n}\n\nvar stream = 1 === fd ? process.stdout :\n             2 === fd ? process.stderr :\n             createWritableStdioStream(fd);\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n  return 'colors' in exports.inspectOpts\n    ? Boolean(exports.inspectOpts.colors)\n    : tty.isatty(fd);\n}\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nexports.formatters.o = function(v) {\n  this.inspectOpts.colors = this.useColors;\n  return util.inspect(v, this.inspectOpts)\n    .split('\\n').map(function(str) {\n      return str.trim()\n    }).join(' ');\n};\n\n/**\n * Map %o to `util.inspect()`, allowing multiple lines if needed.\n */\n\nexports.formatters.O = function(v) {\n  this.inspectOpts.colors = this.useColors;\n  return util.inspect(v, this.inspectOpts);\n};\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n  var name = this.namespace;\n  var useColors = this.useColors;\n\n  if (useColors) {\n    var c = this.color;\n    var prefix = '  \\u001b[3' + c + ';1m' + name + ' ' + '\\u001b[0m';\n\n    args[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n    args.push('\\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\\u001b[0m');\n  } else {\n    args[0] = new Date().toUTCString()\n      + ' ' + name + ' ' + args[0];\n  }\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to `stream`.\n */\n\nfunction log() {\n  return stream.write(util.format.apply(util, arguments) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\n\nfunction save(namespaces) {\n  if (null == namespaces) {\n    // If you set a process.env field to null or undefined, it gets cast to the\n    // string 'null' or 'undefined'. Just delete instead.\n    delete process.env.DEBUG;\n  } else {\n    process.env.DEBUG = namespaces;\n  }\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n  return process.env.DEBUG;\n}\n\n/**\n * Copied from `node/src/node.js`.\n *\n * XXX: It's lame that node doesn't expose this API out-of-the-box. It also\n * relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.\n */\n\nfunction createWritableStdioStream (fd) {\n  var stream;\n  var tty_wrap = process.binding('tty_wrap');\n\n  // Note stream._type is used for test-module-load-list.js\n\n  switch (tty_wrap.guessHandleType(fd)) {\n    case 'TTY':\n      stream = new tty.WriteStream(fd);\n      stream._type = 'tty';\n\n      // Hack to have stream not keep the event loop alive.\n      // See https://github.com/joyent/node/issues/1726\n      if (stream._handle && stream._handle.unref) {\n        stream._handle.unref();\n      }\n      break;\n\n    case 'FILE':\n      var fs = require('fs');\n      stream = new fs.SyncWriteStream(fd, { autoClose: false });\n      stream._type = 'fs';\n      break;\n\n    case 'PIPE':\n    case 'TCP':\n      var net = require('net');\n      stream = new net.Socket({\n        fd: fd,\n        readable: false,\n        writable: true\n      });\n\n      // FIXME Should probably have an option in net.Socket to create a\n      // stream from an existing fd which is writable only. But for now\n      // we'll just add this hack and set the `readable` member to false.\n      // Test: ./node test/fixtures/echo.js < /etc/passwd\n      stream.readable = false;\n      stream.read = null;\n      stream._type = 'pipe';\n\n      // FIXME Hack to have stream not keep the event loop alive.\n      // See https://github.com/joyent/node/issues/1726\n      if (stream._handle && stream._handle.unref) {\n        stream._handle.unref();\n      }\n      break;\n\n    default:\n      // Probably an error on in uv_guess_handle()\n      throw new Error('Implement me. Unknown stream file type!');\n  }\n\n  // For supporting legacy API we put the FD here.\n  stream.fd = fd;\n\n  stream._isStdio = true;\n\n  return stream;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init (debug) {\n  debug.inspectOpts = {};\n\n  var keys = Object.keys(exports.inspectOpts);\n  for (var i = 0; i < keys.length; i++) {\n    debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n  }\n}\n\n/**\n * Enable namespaces listed in `process.env.DEBUG` initially.\n */\n\nexports.enable(load());\n","module.exports = require(\"tty\");","module.exports = require(\"net\");"],"sourceRoot":""}
\ No newline at end of file