From f35fc846ec97a6e3eaec1e986aa9e93252cf84dc Mon Sep 17 00:00:00 2001 From: Eugene Pankov Date: Mon, 25 Feb 2019 10:25:13 +0100 Subject: [PATCH] fonts --- dist/app.bundle.js | 14 +- dist/fonts/SourceSansPro-Black.eot | Bin 0 -> 289854 bytes dist/fonts/SourceSansPro-Black.otf | Bin 0 -> 238112 bytes dist/fonts/SourceSansPro-Black.otf.woff | Bin 0 -> 132224 bytes dist/fonts/SourceSansPro-Black.ttf | Bin 0 -> 289528 bytes dist/fonts/SourceSansPro-BlackIt.eot | Bin 0 -> 103094 bytes dist/fonts/SourceSansPro-BlackIt.otf | Bin 0 -> 83512 bytes dist/fonts/SourceSansPro-BlackIt.otf.woff | Bin 0 -> 54204 bytes dist/fonts/SourceSansPro-BlackIt.ttf | Bin 0 -> 102756 bytes dist/fonts/SourceSansPro-Bold.eot | Bin 0 -> 291890 bytes dist/fonts/SourceSansPro-Bold.otf | Bin 0 -> 239148 bytes dist/fonts/SourceSansPro-Bold.otf.woff | Bin 0 -> 135828 bytes dist/fonts/SourceSansPro-Bold.ttf | Bin 0 -> 291584 bytes dist/fonts/SourceSansPro-BoldIt.eot | Bin 0 -> 103342 bytes dist/fonts/SourceSansPro-BoldIt.otf | Bin 0 -> 82472 bytes dist/fonts/SourceSansPro-BoldIt.otf.woff | Bin 0 -> 54292 bytes dist/fonts/SourceSansPro-BoldIt.ttf | Bin 0 -> 103008 bytes dist/fonts/SourceSansPro-ExtraLight.eot | Bin 0 -> 291994 bytes dist/fonts/SourceSansPro-ExtraLight.otf | Bin 0 -> 226624 bytes dist/fonts/SourceSansPro-ExtraLight.otf.woff | Bin 0 -> 124560 bytes dist/fonts/SourceSansPro-ExtraLight.ttf | Bin 0 -> 291648 bytes dist/fonts/SourceSansPro-ExtraLightIt.eot | Bin 0 -> 104482 bytes dist/fonts/SourceSansPro-ExtraLightIt.otf | Bin 0 -> 78704 bytes .../fonts/SourceSansPro-ExtraLightIt.otf.woff | Bin 0 -> 50064 bytes dist/fonts/SourceSansPro-ExtraLightIt.ttf | Bin 0 -> 104124 bytes dist/fonts/SourceSansPro-It.eot | Bin 0 -> 103934 bytes dist/fonts/SourceSansPro-It.otf | Bin 0 -> 81672 bytes dist/fonts/SourceSansPro-It.otf.woff | Bin 0 -> 53852 bytes dist/fonts/SourceSansPro-It.ttf | Bin 0 -> 103620 bytes dist/fonts/SourceSansPro-Light.eot | Bin 0 -> 293630 bytes dist/fonts/SourceSansPro-Light.otf | Bin 0 -> 230688 bytes dist/fonts/SourceSansPro-Light.otf.woff | Bin 0 -> 129732 bytes dist/fonts/SourceSansPro-Light.ttf | Bin 0 -> 293304 bytes dist/fonts/SourceSansPro-LightIt.eot | Bin 0 -> 104334 bytes dist/fonts/SourceSansPro-LightIt.otf | Bin 0 -> 79728 bytes dist/fonts/SourceSansPro-LightIt.otf.woff | Bin 0 -> 52320 bytes dist/fonts/SourceSansPro-LightIt.ttf | Bin 0 -> 103996 bytes dist/fonts/SourceSansPro-Regular.eot | Bin 0 -> 294262 bytes dist/fonts/SourceSansPro-Regular.otf | Bin 0 -> 234960 bytes dist/fonts/SourceSansPro-Regular.otf.woff | Bin 0 -> 133352 bytes dist/fonts/SourceSansPro-Regular.ttf | Bin 0 -> 293960 bytes dist/fonts/SourceSansPro-Semibold.eot | Bin 0 -> 292794 bytes dist/fonts/SourceSansPro-Semibold.otf | Bin 0 -> 238044 bytes dist/fonts/SourceSansPro-Semibold.otf.woff | Bin 0 -> 134540 bytes dist/fonts/SourceSansPro-Semibold.ttf | Bin 0 -> 292456 bytes dist/fonts/SourceSansPro-SemiboldIt.eot | Bin 0 -> 103686 bytes dist/fonts/SourceSansPro-SemiboldIt.otf | Bin 0 -> 82620 bytes dist/fonts/SourceSansPro-SemiboldIt.otf.woff | Bin 0 -> 54260 bytes dist/fonts/SourceSansPro-SemiboldIt.ttf | Bin 0 -> 103336 bytes dist/index.js | 6 +- dist/terminal.js | 735 ++++++++++++------ dist/terminal.js.map | 2 +- package.json | 1 + terminal.d.ts | 1 + terminal.ts | 1 + yarn.lock | 5 + 56 files changed, 533 insertions(+), 232 deletions(-) create mode 100644 dist/fonts/SourceSansPro-Black.eot create mode 100644 dist/fonts/SourceSansPro-Black.otf create mode 100644 dist/fonts/SourceSansPro-Black.otf.woff create mode 100644 dist/fonts/SourceSansPro-Black.ttf create mode 100644 dist/fonts/SourceSansPro-BlackIt.eot create mode 100644 dist/fonts/SourceSansPro-BlackIt.otf create mode 100644 dist/fonts/SourceSansPro-BlackIt.otf.woff create mode 100644 dist/fonts/SourceSansPro-BlackIt.ttf create mode 100644 dist/fonts/SourceSansPro-Bold.eot create mode 100644 dist/fonts/SourceSansPro-Bold.otf create mode 100644 dist/fonts/SourceSansPro-Bold.otf.woff create mode 100644 dist/fonts/SourceSansPro-Bold.ttf create mode 100644 dist/fonts/SourceSansPro-BoldIt.eot create mode 100644 dist/fonts/SourceSansPro-BoldIt.otf create mode 100644 dist/fonts/SourceSansPro-BoldIt.otf.woff create mode 100644 dist/fonts/SourceSansPro-BoldIt.ttf create mode 100644 dist/fonts/SourceSansPro-ExtraLight.eot create mode 100644 dist/fonts/SourceSansPro-ExtraLight.otf create mode 100644 dist/fonts/SourceSansPro-ExtraLight.otf.woff create mode 100644 dist/fonts/SourceSansPro-ExtraLight.ttf create mode 100644 dist/fonts/SourceSansPro-ExtraLightIt.eot create mode 100644 dist/fonts/SourceSansPro-ExtraLightIt.otf create mode 100644 dist/fonts/SourceSansPro-ExtraLightIt.otf.woff create mode 100644 dist/fonts/SourceSansPro-ExtraLightIt.ttf create mode 100644 dist/fonts/SourceSansPro-It.eot create mode 100644 dist/fonts/SourceSansPro-It.otf create mode 100644 dist/fonts/SourceSansPro-It.otf.woff create mode 100644 dist/fonts/SourceSansPro-It.ttf create mode 100644 dist/fonts/SourceSansPro-Light.eot create mode 100644 dist/fonts/SourceSansPro-Light.otf create mode 100644 dist/fonts/SourceSansPro-Light.otf.woff create mode 100644 dist/fonts/SourceSansPro-Light.ttf create mode 100644 dist/fonts/SourceSansPro-LightIt.eot create mode 100644 dist/fonts/SourceSansPro-LightIt.otf create mode 100644 dist/fonts/SourceSansPro-LightIt.otf.woff create mode 100644 dist/fonts/SourceSansPro-LightIt.ttf create mode 100644 dist/fonts/SourceSansPro-Regular.eot create mode 100644 dist/fonts/SourceSansPro-Regular.otf create mode 100644 dist/fonts/SourceSansPro-Regular.otf.woff create mode 100644 dist/fonts/SourceSansPro-Regular.ttf create mode 100644 dist/fonts/SourceSansPro-Semibold.eot create mode 100644 dist/fonts/SourceSansPro-Semibold.otf create mode 100644 dist/fonts/SourceSansPro-Semibold.otf.woff create mode 100644 dist/fonts/SourceSansPro-Semibold.ttf create mode 100644 dist/fonts/SourceSansPro-SemiboldIt.eot create mode 100644 dist/fonts/SourceSansPro-SemiboldIt.otf create mode 100644 dist/fonts/SourceSansPro-SemiboldIt.otf.woff create mode 100644 dist/fonts/SourceSansPro-SemiboldIt.ttf diff --git a/dist/app.bundle.js b/dist/app.bundle.js index 019c2c64..1076fd15 100644 --- a/dist/app.bundle.js +++ b/dist/app.bundle.js @@ -1,40 +1,40 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{729: +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{778: /*!***********************************************!*\ !*** ../terminus/terminus-core/dist/index.js ***! \***********************************************/ /*! no static exports found */ /*! all exports used */ -/*! ModuleConcatenation bailout: Module is not an ECMAScript module */function(e,n){e.exports='(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === \'object\' && typeof module === \'object\')\n\t\tmodule.exports = factory(require("@angular/core"), require("rxjs"), require("rxjs/operators"), require("@angular/common"), require("fs"), require("path"), require("@ng-bootstrap/ng-bootstrap"), require("@angular/forms"), require("os"), require("@angular/platform-browser"), require("@angular/platform-browser/animations"), require("js-yaml"), require("electron"), require("winston"), require("deepmerge"), require("@angular/animations"), require("rxjs/internal/observable/fromEvent"), require("rxjs/internal/observable/merge"));\n\telse if(typeof define === \'function\' && define.amd)\n\t\tdefine(["@angular/core", "rxjs", "rxjs/operators", "@angular/common", "fs", "path", "@ng-bootstrap/ng-bootstrap", "@angular/forms", "os", "@angular/platform-browser", "@angular/platform-browser/animations", "js-yaml", "electron", "winston", "deepmerge", "@angular/animations", "rxjs/internal/observable/fromEvent", "rxjs/internal/observable/merge"], factory);\n\telse {\n\t\tvar a = typeof exports === \'object\' ? factory(require("@angular/core"), require("rxjs"), require("rxjs/operators"), require("@angular/common"), require("fs"), require("path"), require("@ng-bootstrap/ng-bootstrap"), require("@angular/forms"), require("os"), require("@angular/platform-browser"), require("@angular/platform-browser/animations"), require("js-yaml"), require("electron"), require("winston"), require("deepmerge"), require("@angular/animations"), require("rxjs/internal/observable/fromEvent"), require("rxjs/internal/observable/merge")) : factory(root["@angular/core"], root["rxjs"], root["rxjs/operators"], root["@angular/common"], root["fs"], root["path"], root["@ng-bootstrap/ng-bootstrap"], root["@angular/forms"], root["os"], root["@angular/platform-browser"], root["@angular/platform-browser/animations"], root["js-yaml"], root["electron"], root["winston"], root["deepmerge"], root["@angular/animations"], root["rxjs/internal/observable/fromEvent"], root["rxjs/internal/observable/merge"]);\n\t\tfor(var i in a) (typeof exports === \'object\' ? exports : root)[i] = a[i];\n\t}\n})(global, function(__WEBPACK_EXTERNAL_MODULE__0__, __WEBPACK_EXTERNAL_MODULE__5__, __WEBPACK_EXTERNAL_MODULE__10__, __WEBPACK_EXTERNAL_MODULE__17__, __WEBPACK_EXTERNAL_MODULE__22__, __WEBPACK_EXTERNAL_MODULE__29__, __WEBPACK_EXTERNAL_MODULE__35__, __WEBPACK_EXTERNAL_MODULE__46__, __WEBPACK_EXTERNAL_MODULE__57__, __WEBPACK_EXTERNAL_MODULE__76__, __WEBPACK_EXTERNAL_MODULE__141__, __WEBPACK_EXTERNAL_MODULE__143__, __WEBPACK_EXTERNAL_MODULE__144__, __WEBPACK_EXTERNAL_MODULE__146__, __WEBPACK_EXTERNAL_MODULE__147__, __WEBPACK_EXTERNAL_MODULE__149__, __WEBPACK_EXTERNAL_MODULE__355__, __WEBPACK_EXTERNAL_MODULE__356__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \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 = 140);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/*!********************************!*\\\n !*** external "@angular/core" ***!\n \\********************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__0__;\n\n/***/ }),\n/* 1 */\n/*!********************************************!*\\\n !*** ./node_modules/assert-plus/assert.js ***!\n \\********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright (c) 2012, Mark Cavage. All rights reserved.\n// Copyright 2015 Joyent, Inc.\n\nvar assert = __webpack_require__(/*! assert */ 23);\nvar Stream = __webpack_require__(/*! stream */ 24).Stream;\nvar util = __webpack_require__(/*! util */ 4);\n\n\n///--- Globals\n\n/* JSSTYLED */\nvar UUID_REGEXP = /^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/;\n\n\n///--- Internal\n\nfunction _capitalize(str) {\n return (str.charAt(0).toUpperCase() + str.slice(1));\n}\n\nfunction _toss(name, expected, oper, arg, actual) {\n throw new assert.AssertionError({\n message: util.format(\'%s (%s) is required\', name, expected),\n actual: (actual === undefined) ? typeof (arg) : actual(arg),\n expected: expected,\n operator: oper || \'===\',\n stackStartFunction: _toss.caller\n });\n}\n\nfunction _getClass(arg) {\n return (Object.prototype.toString.call(arg).slice(8, -1));\n}\n\nfunction noop() {\n // Why even bother with asserts?\n}\n\n\n///--- Exports\n\nvar types = {\n bool: {\n check: function (arg) { return typeof (arg) === \'boolean\'; }\n },\n func: {\n check: function (arg) { return typeof (arg) === \'function\'; }\n },\n string: {\n check: function (arg) { return typeof (arg) === \'string\'; }\n },\n object: {\n check: function (arg) {\n return typeof (arg) === \'object\' && arg !== null;\n }\n },\n number: {\n check: function (arg) {\n return typeof (arg) === \'number\' && !isNaN(arg);\n }\n },\n finite: {\n check: function (arg) {\n return typeof (arg) === \'number\' && !isNaN(arg) && isFinite(arg);\n }\n },\n buffer: {\n check: function (arg) { return Buffer.isBuffer(arg); },\n operator: \'Buffer.isBuffer\'\n },\n array: {\n check: function (arg) { return Array.isArray(arg); },\n operator: \'Array.isArray\'\n },\n stream: {\n check: function (arg) { return arg instanceof Stream; },\n operator: \'instanceof\',\n actual: _getClass\n },\n date: {\n check: function (arg) { return arg instanceof Date; },\n operator: \'instanceof\',\n actual: _getClass\n },\n regexp: {\n check: function (arg) { return arg instanceof RegExp; },\n operator: \'instanceof\',\n actual: _getClass\n },\n uuid: {\n check: function (arg) {\n return typeof (arg) === \'string\' && UUID_REGEXP.test(arg);\n },\n operator: \'isUUID\'\n }\n};\n\nfunction _setExports(ndebug) {\n var keys = Object.keys(types);\n var out;\n\n /* re-export standard assert */\n if (process.env.NODE_NDEBUG) {\n out = noop;\n } else {\n out = function (arg, msg) {\n if (!arg) {\n _toss(msg, \'true\', arg);\n }\n };\n }\n\n /* standard checks */\n keys.forEach(function (k) {\n if (ndebug) {\n out[k] = noop;\n return;\n }\n var type = types[k];\n out[k] = function (arg, msg) {\n if (!type.check(arg)) {\n _toss(msg, k, type.operator, arg, type.actual);\n }\n };\n });\n\n /* optional checks */\n keys.forEach(function (k) {\n var name = \'optional\' + _capitalize(k);\n if (ndebug) {\n out[name] = noop;\n return;\n }\n var type = types[k];\n out[name] = function (arg, msg) {\n if (arg === undefined || arg === null) {\n return;\n }\n if (!type.check(arg)) {\n _toss(msg, k, type.operator, arg, type.actual);\n }\n };\n });\n\n /* arrayOf checks */\n keys.forEach(function (k) {\n var name = \'arrayOf\' + _capitalize(k);\n if (ndebug) {\n out[name] = noop;\n return;\n }\n var type = types[k];\n var expected = \'[\' + k + \']\';\n out[name] = function (arg, msg) {\n if (!Array.isArray(arg)) {\n _toss(msg, expected, type.operator, arg, type.actual);\n }\n var i;\n for (i = 0; i < arg.length; i++) {\n if (!type.check(arg[i])) {\n _toss(msg, expected, type.operator, arg, type.actual);\n }\n }\n };\n });\n\n /* optionalArrayOf checks */\n keys.forEach(function (k) {\n var name = \'optionalArrayOf\' + _capitalize(k);\n if (ndebug) {\n out[name] = noop;\n return;\n }\n var type = types[k];\n var expected = \'[\' + k + \']\';\n out[name] = function (arg, msg) {\n if (arg === undefined || arg === null) {\n return;\n }\n if (!Array.isArray(arg)) {\n _toss(msg, expected, type.operator, arg, type.actual);\n }\n var i;\n for (i = 0; i < arg.length; i++) {\n if (!type.check(arg[i])) {\n _toss(msg, expected, type.operator, arg, type.actual);\n }\n }\n };\n });\n\n /* re-export built-in assertions */\n Object.keys(assert).forEach(function (k) {\n if (k === \'AssertionError\') {\n out[k] = assert[k];\n return;\n }\n if (ndebug) {\n out[k] = noop;\n return;\n }\n out[k] = assert[k];\n });\n\n /* export ourselves (for unit tests _only_) */\n out._setExports = _setExports;\n\n return out;\n}\n\nmodule.exports = _setExports(process.env.NODE_NDEBUG);\n\n\n/***/ }),\n/* 2 */\n/*!*************************!*\\\n !*** external "crypto" ***!\n \\*************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = require("crypto");\n\n/***/ }),\n/* 3 */\n/*!********************************************!*\\\n !*** ./node_modules/safer-buffer/safer.js ***!\n \\********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n/* eslint-disable node/no-deprecated-api */\n\n\n\nvar buffer = __webpack_require__(/*! buffer */ 98)\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n if (!buffer.hasOwnProperty(key)) continue\n if (key === \'SlowBuffer\' || key === \'Buffer\') continue\n safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n if (!Buffer.hasOwnProperty(key)) continue\n if (key === \'allocUnsafe\' || key === \'allocUnsafeSlow\') continue\n Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n Safer.from = function (value, encodingOrOffset, length) {\n if (typeof value === \'number\') {\n throw new TypeError(\'The "value" argument must not be of type number. Received type \' + typeof value)\n }\n if (value && typeof value.length === \'undefined\') {\n throw new TypeError(\'The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \' + typeof value)\n }\n return Buffer(value, encodingOrOffset, length)\n }\n}\n\nif (!Safer.alloc) {\n Safer.alloc = function (size, fill, encoding) {\n if (typeof size !== \'number\') {\n throw new TypeError(\'The "size" argument must be of type number. Received type \' + typeof size)\n }\n if (size < 0 || size >= 2 * (1 << 30)) {\n throw new RangeError(\'The value "\' + size + \'" is invalid for option "size"\')\n }\n var buf = Buffer(size)\n if (!fill || fill.length === 0) {\n buf.fill(0)\n } else if (typeof encoding === \'string\') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n return buf\n }\n}\n\nif (!safer.kStringMaxLength) {\n try {\n safer.kStringMaxLength = process.binding(\'buffer\').kStringMaxLength\n } catch (e) {\n // we can\'t determine kStringMaxLength in environments where process.binding\n // is unsupported, so let\'s not set it\n }\n}\n\nif (!safer.constants) {\n safer.constants = {\n MAX_LENGTH: safer.kMaxLength\n }\n if (safer.kStringMaxLength) {\n safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n }\n}\n\nmodule.exports = safer\n\n\n/***/ }),\n/* 4 */\n/*!***********************!*\\\n !*** external "util" ***!\n \\***********************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = require("util");\n\n/***/ }),\n/* 5 */\n/*!***********************!*\\\n !*** external "rxjs" ***!\n \\***********************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__5__;\n\n/***/ }),\n/* 6 */\n/*!*****************************************!*\\\n !*** ./node_modules/sshpk/lib/utils.js ***!\n \\*****************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tbufferSplit: bufferSplit,\n\taddRSAMissing: addRSAMissing,\n\tcalculateDSAPublic: calculateDSAPublic,\n\tcalculateED25519Public: calculateED25519Public,\n\tcalculateX25519Public: calculateX25519Public,\n\tmpNormalize: mpNormalize,\n\tmpDenormalize: mpDenormalize,\n\tecNormalize: ecNormalize,\n\tcountZeros: countZeros,\n\tassertCompatible: assertCompatible,\n\tisCompatible: isCompatible,\n\topensslKeyDeriv: opensslKeyDeriv,\n\topensshCipherInfo: opensshCipherInfo,\n\tpublicFromPrivateECDSA: publicFromPrivateECDSA,\n\tzeroPadToLength: zeroPadToLength,\n\twriteBitString: writeBitString,\n\treadBitString: readBitString\n};\n\nvar assert = __webpack_require__(/*! assert-plus */ 1);\nvar Buffer = __webpack_require__(/*! safer-buffer */ 3).Buffer;\nvar PrivateKey = __webpack_require__(/*! ./private-key */ 9);\nvar Key = __webpack_require__(/*! ./key */ 7);\nvar crypto = __webpack_require__(/*! crypto */ 2);\nvar algs = __webpack_require__(/*! ./algs */ 8);\nvar asn1 = __webpack_require__(/*! asn1 */ 21);\n\nvar ec, jsbn;\nvar nacl;\n\nvar MAX_CLASS_DEPTH = 3;\n\nfunction isCompatible(obj, klass, needVer) {\n\tif (obj === null || typeof (obj) !== \'object\')\n\t\treturn (false);\n\tif (needVer === undefined)\n\t\tneedVer = klass.prototype._sshpkApiVersion;\n\tif (obj instanceof klass &&\n\t klass.prototype._sshpkApiVersion[0] == needVer[0])\n\t\treturn (true);\n\tvar proto = Object.getPrototypeOf(obj);\n\tvar depth = 0;\n\twhile (proto.constructor.name !== klass.name) {\n\t\tproto = Object.getPrototypeOf(proto);\n\t\tif (!proto || ++depth > MAX_CLASS_DEPTH)\n\t\t\treturn (false);\n\t}\n\tif (proto.constructor.name !== klass.name)\n\t\treturn (false);\n\tvar ver = proto._sshpkApiVersion;\n\tif (ver === undefined)\n\t\tver = klass._oldVersionDetect(obj);\n\tif (ver[0] != needVer[0] || ver[1] < needVer[1])\n\t\treturn (false);\n\treturn (true);\n}\n\nfunction assertCompatible(obj, klass, needVer, name) {\n\tif (name === undefined)\n\t\tname = \'object\';\n\tassert.ok(obj, name + \' must not be null\');\n\tassert.object(obj, name + \' must be an object\');\n\tif (needVer === undefined)\n\t\tneedVer = klass.prototype._sshpkApiVersion;\n\tif (obj instanceof klass &&\n\t klass.prototype._sshpkApiVersion[0] == needVer[0])\n\t\treturn;\n\tvar proto = Object.getPrototypeOf(obj);\n\tvar depth = 0;\n\twhile (proto.constructor.name !== klass.name) {\n\t\tproto = Object.getPrototypeOf(proto);\n\t\tassert.ok(proto && ++depth <= MAX_CLASS_DEPTH,\n\t\t name + \' must be a \' + klass.name + \' instance\');\n\t}\n\tassert.strictEqual(proto.constructor.name, klass.name,\n\t name + \' must be a \' + klass.name + \' instance\');\n\tvar ver = proto._sshpkApiVersion;\n\tif (ver === undefined)\n\t\tver = klass._oldVersionDetect(obj);\n\tassert.ok(ver[0] == needVer[0] && ver[1] >= needVer[1],\n\t name + \' must be compatible with \' + klass.name + \' klass \' +\n\t \'version \' + needVer[0] + \'.\' + needVer[1]);\n}\n\nvar CIPHER_LEN = {\n\t\'des-ede3-cbc\': { key: 7, iv: 8 },\n\t\'aes-128-cbc\': { key: 16, iv: 16 }\n};\nvar PKCS5_SALT_LEN = 8;\n\nfunction opensslKeyDeriv(cipher, salt, passphrase, count) {\n\tassert.buffer(salt, \'salt\');\n\tassert.buffer(passphrase, \'passphrase\');\n\tassert.number(count, \'iteration count\');\n\n\tvar clen = CIPHER_LEN[cipher];\n\tassert.object(clen, \'supported cipher\');\n\n\tsalt = salt.slice(0, PKCS5_SALT_LEN);\n\n\tvar D, D_prev, bufs;\n\tvar material = Buffer.alloc(0);\n\twhile (material.length < clen.key + clen.iv) {\n\t\tbufs = [];\n\t\tif (D_prev)\n\t\t\tbufs.push(D_prev);\n\t\tbufs.push(passphrase);\n\t\tbufs.push(salt);\n\t\tD = Buffer.concat(bufs);\n\t\tfor (var j = 0; j < count; ++j)\n\t\t\tD = crypto.createHash(\'md5\').update(D).digest();\n\t\tmaterial = Buffer.concat([material, D]);\n\t\tD_prev = D;\n\t}\n\n\treturn ({\n\t key: material.slice(0, clen.key),\n\t iv: material.slice(clen.key, clen.key + clen.iv)\n\t});\n}\n\n/* Count leading zero bits on a buffer */\nfunction countZeros(buf) {\n\tvar o = 0, obit = 8;\n\twhile (o < buf.length) {\n\t\tvar mask = (1 << obit);\n\t\tif ((buf[o] & mask) === mask)\n\t\t\tbreak;\n\t\tobit--;\n\t\tif (obit < 0) {\n\t\t\to++;\n\t\t\tobit = 8;\n\t\t}\n\t}\n\treturn (o*8 + (8 - obit) - 1);\n}\n\nfunction bufferSplit(buf, chr) {\n\tassert.buffer(buf);\n\tassert.string(chr);\n\n\tvar parts = [];\n\tvar lastPart = 0;\n\tvar matches = 0;\n\tfor (var i = 0; i < buf.length; ++i) {\n\t\tif (buf[i] === chr.charCodeAt(matches))\n\t\t\t++matches;\n\t\telse if (buf[i] === chr.charCodeAt(0))\n\t\t\tmatches = 1;\n\t\telse\n\t\t\tmatches = 0;\n\n\t\tif (matches >= chr.length) {\n\t\t\tvar newPart = i + 1;\n\t\t\tparts.push(buf.slice(lastPart, newPart - matches));\n\t\t\tlastPart = newPart;\n\t\t\tmatches = 0;\n\t\t}\n\t}\n\tif (lastPart <= buf.length)\n\t\tparts.push(buf.slice(lastPart, buf.length));\n\n\treturn (parts);\n}\n\nfunction ecNormalize(buf, addZero) {\n\tassert.buffer(buf);\n\tif (buf[0] === 0x00 && buf[1] === 0x04) {\n\t\tif (addZero)\n\t\t\treturn (buf);\n\t\treturn (buf.slice(1));\n\t} else if (buf[0] === 0x04) {\n\t\tif (!addZero)\n\t\t\treturn (buf);\n\t} else {\n\t\twhile (buf[0] === 0x00)\n\t\t\tbuf = buf.slice(1);\n\t\tif (buf[0] === 0x02 || buf[0] === 0x03)\n\t\t\tthrow (new Error(\'Compressed elliptic curve points \' +\n\t\t\t \'are not supported\'));\n\t\tif (buf[0] !== 0x04)\n\t\t\tthrow (new Error(\'Not a valid elliptic curve point\'));\n\t\tif (!addZero)\n\t\t\treturn (buf);\n\t}\n\tvar b = Buffer.alloc(buf.length + 1);\n\tb[0] = 0x0;\n\tbuf.copy(b, 1);\n\treturn (b);\n}\n\nfunction readBitString(der, tag) {\n\tif (tag === undefined)\n\t\ttag = asn1.Ber.BitString;\n\tvar buf = der.readString(tag, true);\n\tassert.strictEqual(buf[0], 0x00, \'bit strings with unused bits are \' +\n\t \'not supported (0x\' + buf[0].toString(16) + \')\');\n\treturn (buf.slice(1));\n}\n\nfunction writeBitString(der, buf, tag) {\n\tif (tag === undefined)\n\t\ttag = asn1.Ber.BitString;\n\tvar b = Buffer.alloc(buf.length + 1);\n\tb[0] = 0x00;\n\tbuf.copy(b, 1);\n\tder.writeBuffer(b, tag);\n}\n\nfunction mpNormalize(buf) {\n\tassert.buffer(buf);\n\twhile (buf.length > 1 && buf[0] === 0x00 && (buf[1] & 0x80) === 0x00)\n\t\tbuf = buf.slice(1);\n\tif ((buf[0] & 0x80) === 0x80) {\n\t\tvar b = Buffer.alloc(buf.length + 1);\n\t\tb[0] = 0x00;\n\t\tbuf.copy(b, 1);\n\t\tbuf = b;\n\t}\n\treturn (buf);\n}\n\nfunction mpDenormalize(buf) {\n\tassert.buffer(buf);\n\twhile (buf.length > 1 && buf[0] === 0x00)\n\t\tbuf = buf.slice(1);\n\treturn (buf);\n}\n\nfunction zeroPadToLength(buf, len) {\n\tassert.buffer(buf);\n\tassert.number(len);\n\twhile (buf.length > len) {\n\t\tassert.equal(buf[0], 0x00);\n\t\tbuf = buf.slice(1);\n\t}\n\twhile (buf.length < len) {\n\t\tvar b = Buffer.alloc(buf.length + 1);\n\t\tb[0] = 0x00;\n\t\tbuf.copy(b, 1);\n\t\tbuf = b;\n\t}\n\treturn (buf);\n}\n\nfunction bigintToMpBuf(bigint) {\n\tvar buf = Buffer.from(bigint.toByteArray());\n\tbuf = mpNormalize(buf);\n\treturn (buf);\n}\n\nfunction calculateDSAPublic(g, p, x) {\n\tassert.buffer(g);\n\tassert.buffer(p);\n\tassert.buffer(x);\n\ttry {\n\t\tvar bigInt = __webpack_require__(/*! jsbn */ 25).BigInteger;\n\t} catch (e) {\n\t\tthrow (new Error(\'To load a PKCS#8 format DSA private key, \' +\n\t\t \'the node jsbn library is required.\'));\n\t}\n\tg = new bigInt(g);\n\tp = new bigInt(p);\n\tx = new bigInt(x);\n\tvar y = g.modPow(x, p);\n\tvar ybuf = bigintToMpBuf(y);\n\treturn (ybuf);\n}\n\nfunction calculateED25519Public(k) {\n\tassert.buffer(k);\n\n\tif (nacl === undefined)\n\t\tnacl = __webpack_require__(/*! tweetnacl */ 20);\n\n\tvar kp = nacl.sign.keyPair.fromSeed(new Uint8Array(k));\n\treturn (Buffer.from(kp.publicKey));\n}\n\nfunction calculateX25519Public(k) {\n\tassert.buffer(k);\n\n\tif (nacl === undefined)\n\t\tnacl = __webpack_require__(/*! tweetnacl */ 20);\n\n\tvar kp = nacl.box.keyPair.fromSeed(new Uint8Array(k));\n\treturn (Buffer.from(kp.publicKey));\n}\n\nfunction addRSAMissing(key) {\n\tassert.object(key);\n\tassertCompatible(key, PrivateKey, [1, 1]);\n\ttry {\n\t\tvar bigInt = __webpack_require__(/*! jsbn */ 25).BigInteger;\n\t} catch (e) {\n\t\tthrow (new Error(\'To write a PEM private key from \' +\n\t\t \'this source, the node jsbn lib is required.\'));\n\t}\n\n\tvar d = new bigInt(key.part.d.data);\n\tvar buf;\n\n\tif (!key.part.dmodp) {\n\t\tvar p = new bigInt(key.part.p.data);\n\t\tvar dmodp = d.mod(p.subtract(1));\n\n\t\tbuf = bigintToMpBuf(dmodp);\n\t\tkey.part.dmodp = {name: \'dmodp\', data: buf};\n\t\tkey.parts.push(key.part.dmodp);\n\t}\n\tif (!key.part.dmodq) {\n\t\tvar q = new bigInt(key.part.q.data);\n\t\tvar dmodq = d.mod(q.subtract(1));\n\n\t\tbuf = bigintToMpBuf(dmodq);\n\t\tkey.part.dmodq = {name: \'dmodq\', data: buf};\n\t\tkey.parts.push(key.part.dmodq);\n\t}\n}\n\nfunction publicFromPrivateECDSA(curveName, priv) {\n\tassert.string(curveName, \'curveName\');\n\tassert.buffer(priv);\n\tif (ec === undefined)\n\t\tec = __webpack_require__(/*! ecc-jsbn/lib/ec */ 42);\n\tif (jsbn === undefined)\n\t\tjsbn = __webpack_require__(/*! jsbn */ 25).BigInteger;\n\tvar params = algs.curves[curveName];\n\tvar p = new jsbn(params.p);\n\tvar a = new jsbn(params.a);\n\tvar b = new jsbn(params.b);\n\tvar curve = new ec.ECCurveFp(p, a, b);\n\tvar G = curve.decodePointHex(params.G.toString(\'hex\'));\n\n\tvar d = new jsbn(mpNormalize(priv));\n\tvar pub = G.multiply(d);\n\tpub = Buffer.from(curve.encodePointHex(pub), \'hex\');\n\n\tvar parts = [];\n\tparts.push({name: \'curve\', data: Buffer.from(curveName)});\n\tparts.push({name: \'Q\', data: pub});\n\n\tvar key = new Key({type: \'ecdsa\', curve: curve, parts: parts});\n\treturn (key);\n}\n\nfunction opensshCipherInfo(cipher) {\n\tvar inf = {};\n\tswitch (cipher) {\n\tcase \'3des-cbc\':\n\t\tinf.keySize = 24;\n\t\tinf.blockSize = 8;\n\t\tinf.opensslName = \'des-ede3-cbc\';\n\t\tbreak;\n\tcase \'blowfish-cbc\':\n\t\tinf.keySize = 16;\n\t\tinf.blockSize = 8;\n\t\tinf.opensslName = \'bf-cbc\';\n\t\tbreak;\n\tcase \'aes128-cbc\':\n\tcase \'aes128-ctr\':\n\tcase \'aes128-gcm@openssh.com\':\n\t\tinf.keySize = 16;\n\t\tinf.blockSize = 16;\n\t\tinf.opensslName = \'aes-128-\' + cipher.slice(7, 10);\n\t\tbreak;\n\tcase \'aes192-cbc\':\n\tcase \'aes192-ctr\':\n\tcase \'aes192-gcm@openssh.com\':\n\t\tinf.keySize = 24;\n\t\tinf.blockSize = 16;\n\t\tinf.opensslName = \'aes-192-\' + cipher.slice(7, 10);\n\t\tbreak;\n\tcase \'aes256-cbc\':\n\tcase \'aes256-ctr\':\n\tcase \'aes256-gcm@openssh.com\':\n\t\tinf.keySize = 32;\n\t\tinf.blockSize = 16;\n\t\tinf.opensslName = \'aes-256-\' + cipher.slice(7, 10);\n\t\tbreak;\n\tdefault:\n\t\tthrow (new Error(\n\t\t \'Unsupported openssl cipher "\' + cipher + \'"\'));\n\t}\n\treturn (inf);\n}\n\n\n/***/ }),\n/* 7 */\n/*!***************************************!*\\\n !*** ./node_modules/sshpk/lib/key.js ***!\n \\***************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2017 Joyent, Inc.\n\nmodule.exports = Key;\n\nvar assert = __webpack_require__(/*! assert-plus */ 1);\nvar algs = __webpack_require__(/*! ./algs */ 8);\nvar crypto = __webpack_require__(/*! crypto */ 2);\nvar Fingerprint = __webpack_require__(/*! ./fingerprint */ 40);\nvar Signature = __webpack_require__(/*! ./signature */ 19);\nvar DiffieHellman = __webpack_require__(/*! ./dhe */ 67).DiffieHellman;\nvar errs = __webpack_require__(/*! ./errors */ 18);\nvar utils = __webpack_require__(/*! ./utils */ 6);\nvar PrivateKey = __webpack_require__(/*! ./private-key */ 9);\nvar edCompat;\n\ntry {\n\tedCompat = __webpack_require__(/*! ./ed-compat */ 102);\n} catch (e) {\n\t/* Just continue through, and bail out if we try to use it. */\n}\n\nvar InvalidAlgorithmError = errs.InvalidAlgorithmError;\nvar KeyParseError = errs.KeyParseError;\n\nvar formats = {};\nformats[\'auto\'] = __webpack_require__(/*! ./formats/auto */ 103);\nformats[\'pem\'] = __webpack_require__(/*! ./formats/pem */ 26);\nformats[\'pkcs1\'] = __webpack_require__(/*! ./formats/pkcs1 */ 70);\nformats[\'pkcs8\'] = __webpack_require__(/*! ./formats/pkcs8 */ 43);\nformats[\'rfc4253\'] = __webpack_require__(/*! ./formats/rfc4253 */ 31);\nformats[\'ssh\'] = __webpack_require__(/*! ./formats/ssh */ 105);\nformats[\'ssh-private\'] = __webpack_require__(/*! ./formats/ssh-private */ 54);\nformats[\'openssh\'] = formats[\'ssh-private\'];\nformats[\'dnssec\'] = __webpack_require__(/*! ./formats/dnssec */ 71);\n\nfunction Key(opts) {\n\tassert.object(opts, \'options\');\n\tassert.arrayOfObject(opts.parts, \'options.parts\');\n\tassert.string(opts.type, \'options.type\');\n\tassert.optionalString(opts.comment, \'options.comment\');\n\n\tvar algInfo = algs.info[opts.type];\n\tif (typeof (algInfo) !== \'object\')\n\t\tthrow (new InvalidAlgorithmError(opts.type));\n\n\tvar partLookup = {};\n\tfor (var i = 0; i < opts.parts.length; ++i) {\n\t\tvar part = opts.parts[i];\n\t\tpartLookup[part.name] = part;\n\t}\n\n\tthis.type = opts.type;\n\tthis.parts = opts.parts;\n\tthis.part = partLookup;\n\tthis.comment = undefined;\n\tthis.source = opts.source;\n\n\t/* for speeding up hashing/fingerprint operations */\n\tthis._rfc4253Cache = opts._rfc4253Cache;\n\tthis._hashCache = {};\n\n\tvar sz;\n\tthis.curve = undefined;\n\tif (this.type === \'ecdsa\') {\n\t\tvar curve = this.part.curve.data.toString();\n\t\tthis.curve = curve;\n\t\tsz = algs.curves[curve].size;\n\t} else if (this.type === \'ed25519\' || this.type === \'curve25519\') {\n\t\tsz = 256;\n\t\tthis.curve = \'curve25519\';\n\t} else {\n\t\tvar szPart = this.part[algInfo.sizePart];\n\t\tsz = szPart.data.length;\n\t\tsz = sz * 8 - utils.countZeros(szPart.data);\n\t}\n\tthis.size = sz;\n}\n\nKey.formats = formats;\n\nKey.prototype.toBuffer = function (format, options) {\n\tif (format === undefined)\n\t\tformat = \'ssh\';\n\tassert.string(format, \'format\');\n\tassert.object(formats[format], \'formats[format]\');\n\tassert.optionalObject(options, \'options\');\n\n\tif (format === \'rfc4253\') {\n\t\tif (this._rfc4253Cache === undefined)\n\t\t\tthis._rfc4253Cache = formats[\'rfc4253\'].write(this);\n\t\treturn (this._rfc4253Cache);\n\t}\n\n\treturn (formats[format].write(this, options));\n};\n\nKey.prototype.toString = function (format, options) {\n\treturn (this.toBuffer(format, options).toString());\n};\n\nKey.prototype.hash = function (algo) {\n\tassert.string(algo, \'algorithm\');\n\talgo = algo.toLowerCase();\n\tif (algs.hashAlgs[algo] === undefined)\n\t\tthrow (new InvalidAlgorithmError(algo));\n\n\tif (this._hashCache[algo])\n\t\treturn (this._hashCache[algo]);\n\tvar hash = crypto.createHash(algo).\n\t update(this.toBuffer(\'rfc4253\')).digest();\n\tthis._hashCache[algo] = hash;\n\treturn (hash);\n};\n\nKey.prototype.fingerprint = function (algo) {\n\tif (algo === undefined)\n\t\talgo = \'sha256\';\n\tassert.string(algo, \'algorithm\');\n\tvar opts = {\n\t\ttype: \'key\',\n\t\thash: this.hash(algo),\n\t\talgorithm: algo\n\t};\n\treturn (new Fingerprint(opts));\n};\n\nKey.prototype.defaultHashAlgorithm = function () {\n\tvar hashAlgo = \'sha1\';\n\tif (this.type === \'rsa\')\n\t\thashAlgo = \'sha256\';\n\tif (this.type === \'dsa\' && this.size > 1024)\n\t\thashAlgo = \'sha256\';\n\tif (this.type === \'ed25519\')\n\t\thashAlgo = \'sha512\';\n\tif (this.type === \'ecdsa\') {\n\t\tif (this.size <= 256)\n\t\t\thashAlgo = \'sha256\';\n\t\telse if (this.size <= 384)\n\t\t\thashAlgo = \'sha384\';\n\t\telse\n\t\t\thashAlgo = \'sha512\';\n\t}\n\treturn (hashAlgo);\n};\n\nKey.prototype.createVerify = function (hashAlgo) {\n\tif (hashAlgo === undefined)\n\t\thashAlgo = this.defaultHashAlgorithm();\n\tassert.string(hashAlgo, \'hash algorithm\');\n\n\t/* ED25519 is not supported by OpenSSL, use a javascript impl. */\n\tif (this.type === \'ed25519\' && edCompat !== undefined)\n\t\treturn (new edCompat.Verifier(this, hashAlgo));\n\tif (this.type === \'curve25519\')\n\t\tthrow (new Error(\'Curve25519 keys are not suitable for \' +\n\t\t \'signing or verification\'));\n\n\tvar v, nm, err;\n\ttry {\n\t\tnm = hashAlgo.toUpperCase();\n\t\tv = crypto.createVerify(nm);\n\t} catch (e) {\n\t\terr = e;\n\t}\n\tif (v === undefined || (err instanceof Error &&\n\t err.message.match(/Unknown message digest/))) {\n\t\tnm = \'RSA-\';\n\t\tnm += hashAlgo.toUpperCase();\n\t\tv = crypto.createVerify(nm);\n\t}\n\tassert.ok(v, \'failed to create verifier\');\n\tvar oldVerify = v.verify.bind(v);\n\tvar key = this.toBuffer(\'pkcs8\');\n\tvar curve = this.curve;\n\tvar self = this;\n\tv.verify = function (signature, fmt) {\n\t\tif (Signature.isSignature(signature, [2, 0])) {\n\t\t\tif (signature.type !== self.type)\n\t\t\t\treturn (false);\n\t\t\tif (signature.hashAlgorithm &&\n\t\t\t signature.hashAlgorithm !== hashAlgo)\n\t\t\t\treturn (false);\n\t\t\tif (signature.curve && self.type === \'ecdsa\' &&\n\t\t\t signature.curve !== curve)\n\t\t\t\treturn (false);\n\t\t\treturn (oldVerify(key, signature.toBuffer(\'asn1\')));\n\n\t\t} else if (typeof (signature) === \'string\' ||\n\t\t Buffer.isBuffer(signature)) {\n\t\t\treturn (oldVerify(key, signature, fmt));\n\n\t\t/*\n\t\t * Avoid doing this on valid arguments, walking the prototype\n\t\t * chain can be quite slow.\n\t\t */\n\t\t} else if (Signature.isSignature(signature, [1, 0])) {\n\t\t\tthrow (new Error(\'signature was created by too old \' +\n\t\t\t \'a version of sshpk and cannot be verified\'));\n\n\t\t} else {\n\t\t\tthrow (new TypeError(\'signature must be a string, \' +\n\t\t\t \'Buffer, or Signature object\'));\n\t\t}\n\t};\n\treturn (v);\n};\n\nKey.prototype.createDiffieHellman = function () {\n\tif (this.type === \'rsa\')\n\t\tthrow (new Error(\'RSA keys do not support Diffie-Hellman\'));\n\n\treturn (new DiffieHellman(this));\n};\nKey.prototype.createDH = Key.prototype.createDiffieHellman;\n\nKey.parse = function (data, format, options) {\n\tif (typeof (data) !== \'string\')\n\t\tassert.buffer(data, \'data\');\n\tif (format === undefined)\n\t\tformat = \'auto\';\n\tassert.string(format, \'format\');\n\tif (typeof (options) === \'string\')\n\t\toptions = { filename: options };\n\tassert.optionalObject(options, \'options\');\n\tif (options === undefined)\n\t\toptions = {};\n\tassert.optionalString(options.filename, \'options.filename\');\n\tif (options.filename === undefined)\n\t\toptions.filename = \'(unnamed)\';\n\n\tassert.object(formats[format], \'formats[format]\');\n\n\ttry {\n\t\tvar k = formats[format].read(data, options);\n\t\tif (k instanceof PrivateKey)\n\t\t\tk = k.toPublic();\n\t\tif (!k.comment)\n\t\t\tk.comment = options.filename;\n\t\treturn (k);\n\t} catch (e) {\n\t\tif (e.name === \'KeyEncryptedError\')\n\t\t\tthrow (e);\n\t\tthrow (new KeyParseError(options.filename, format, e));\n\t}\n};\n\nKey.isKey = function (obj, ver) {\n\treturn (utils.isCompatible(obj, Key, ver));\n};\n\n/*\n * API versions for Key:\n * [1,0] -- initial ver, may take Signature for createVerify or may not\n * [1,1] -- added pkcs1, pkcs8 formats\n * [1,2] -- added auto, ssh-private, openssh formats\n * [1,3] -- added defaultHashAlgorithm\n * [1,4] -- added ed support, createDH\n * [1,5] -- first explicitly tagged version\n * [1,6] -- changed ed25519 part names\n */\nKey.prototype._sshpkApiVersion = [1, 6];\n\nKey._oldVersionDetect = function (obj) {\n\tassert.func(obj.toBuffer);\n\tassert.func(obj.fingerprint);\n\tif (obj.createDH)\n\t\treturn ([1, 4]);\n\tif (obj.defaultHashAlgorithm)\n\t\treturn ([1, 3]);\n\tif (obj.formats[\'auto\'])\n\t\treturn ([1, 2]);\n\tif (obj.formats[\'pkcs1\'])\n\t\treturn ([1, 1]);\n\treturn ([1, 0]);\n};\n\n\n/***/ }),\n/* 8 */\n/*!****************************************!*\\\n !*** ./node_modules/sshpk/lib/algs.js ***!\n \\****************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2015 Joyent, Inc.\n\nvar Buffer = __webpack_require__(/*! safer-buffer */ 3).Buffer;\n\nvar algInfo = {\n\t\'dsa\': {\n\t\tparts: [\'p\', \'q\', \'g\', \'y\'],\n\t\tsizePart: \'p\'\n\t},\n\t\'rsa\': {\n\t\tparts: [\'e\', \'n\'],\n\t\tsizePart: \'n\'\n\t},\n\t\'ecdsa\': {\n\t\tparts: [\'curve\', \'Q\'],\n\t\tsizePart: \'Q\'\n\t},\n\t\'ed25519\': {\n\t\tparts: [\'A\'],\n\t\tsizePart: \'A\'\n\t}\n};\nalgInfo[\'curve25519\'] = algInfo[\'ed25519\'];\n\nvar algPrivInfo = {\n\t\'dsa\': {\n\t\tparts: [\'p\', \'q\', \'g\', \'y\', \'x\']\n\t},\n\t\'rsa\': {\n\t\tparts: [\'n\', \'e\', \'d\', \'iqmp\', \'p\', \'q\']\n\t},\n\t\'ecdsa\': {\n\t\tparts: [\'curve\', \'Q\', \'d\']\n\t},\n\t\'ed25519\': {\n\t\tparts: [\'A\', \'k\']\n\t}\n};\nalgPrivInfo[\'curve25519\'] = algPrivInfo[\'ed25519\'];\n\nvar hashAlgs = {\n\t\'md5\': true,\n\t\'sha1\': true,\n\t\'sha256\': true,\n\t\'sha384\': true,\n\t\'sha512\': true\n};\n\n/*\n * Taken from\n * http://csrc.nist.gov/groups/ST/toolkit/documents/dss/NISTReCur.pdf\n */\nvar curves = {\n\t\'nistp256\': {\n\t\tsize: 256,\n\t\tpkcs8oid: \'1.2.840.10045.3.1.7\',\n\t\tp: Buffer.from((\'00\' +\n\t\t \'ffffffff 00000001 00000000 00000000\' +\n\t\t \'00000000 ffffffff ffffffff ffffffff\').\n\t\t replace(/ /g, \'\'), \'hex\'),\n\t\ta: Buffer.from((\'00\' +\n\t\t \'FFFFFFFF 00000001 00000000 00000000\' +\n\t\t \'00000000 FFFFFFFF FFFFFFFF FFFFFFFC\').\n\t\t replace(/ /g, \'\'), \'hex\'),\n\t\tb: Buffer.from((\n\t\t \'5ac635d8 aa3a93e7 b3ebbd55 769886bc\' +\n\t\t \'651d06b0 cc53b0f6 3bce3c3e 27d2604b\').\n\t\t replace(/ /g, \'\'), \'hex\'),\n\t\ts: Buffer.from((\'00\' +\n\t\t \'c49d3608 86e70493 6a6678e1 139d26b7\' +\n\t\t \'819f7e90\').\n\t\t replace(/ /g, \'\'), \'hex\'),\n\t\tn: Buffer.from((\'00\' +\n\t\t \'ffffffff 00000000 ffffffff ffffffff\' +\n\t\t \'bce6faad a7179e84 f3b9cac2 fc632551\').\n\t\t replace(/ /g, \'\'), \'hex\'),\n\t\tG: Buffer.from((\'04\' +\n\t\t \'6b17d1f2 e12c4247 f8bce6e5 63a440f2\' +\n\t\t \'77037d81 2deb33a0 f4a13945 d898c296\' +\n\t\t \'4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16\' +\n\t\t \'2bce3357 6b315ece cbb64068 37bf51f5\').\n\t\t replace(/ /g, \'\'), \'hex\')\n\t},\n\t\'nistp384\': {\n\t\tsize: 384,\n\t\tpkcs8oid: \'1.3.132.0.34\',\n\t\tp: Buffer.from((\'00\' +\n\t\t \'ffffffff ffffffff ffffffff ffffffff\' +\n\t\t \'ffffffff ffffffff ffffffff fffffffe\' +\n\t\t \'ffffffff 00000000 00000000 ffffffff\').\n\t\t replace(/ /g, \'\'), \'hex\'),\n\t\ta: Buffer.from((\'00\' +\n\t\t \'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF\' +\n\t\t \'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE\' +\n\t\t \'FFFFFFFF 00000000 00000000 FFFFFFFC\').\n\t\t replace(/ /g, \'\'), \'hex\'),\n\t\tb: Buffer.from((\n\t\t \'b3312fa7 e23ee7e4 988e056b e3f82d19\' +\n\t\t \'181d9c6e fe814112 0314088f 5013875a\' +\n\t\t \'c656398d 8a2ed19d 2a85c8ed d3ec2aef\').\n\t\t replace(/ /g, \'\'), \'hex\'),\n\t\ts: Buffer.from((\'00\' +\n\t\t \'a335926a a319a27a 1d00896a 6773a482\' +\n\t\t \'7acdac73\').\n\t\t replace(/ /g, \'\'), \'hex\'),\n\t\tn: Buffer.from((\'00\' +\n\t\t \'ffffffff ffffffff ffffffff ffffffff\' +\n\t\t \'ffffffff ffffffff c7634d81 f4372ddf\' +\n\t\t \'581a0db2 48b0a77a ecec196a ccc52973\').\n\t\t replace(/ /g, \'\'), \'hex\'),\n\t\tG: Buffer.from((\'04\' +\n\t\t \'aa87ca22 be8b0537 8eb1c71e f320ad74\' +\n\t\t \'6e1d3b62 8ba79b98 59f741e0 82542a38\' +\n\t\t \'5502f25d bf55296c 3a545e38 72760ab7\' +\n\t\t \'3617de4a 96262c6f 5d9e98bf 9292dc29\' +\n\t\t \'f8f41dbd 289a147c e9da3113 b5f0b8c0\' +\n\t\t \'0a60b1ce 1d7e819d 7a431d7c 90ea0e5f\').\n\t\t replace(/ /g, \'\'), \'hex\')\n\t},\n\t\'nistp521\': {\n\t\tsize: 521,\n\t\tpkcs8oid: \'1.3.132.0.35\',\n\t\tp: Buffer.from((\n\t\t \'01ffffff ffffffff ffffffff ffffffff\' +\n\t\t \'ffffffff ffffffff ffffffff ffffffff\' +\n\t\t \'ffffffff ffffffff ffffffff ffffffff\' +\n\t\t \'ffffffff ffffffff ffffffff ffffffff\' +\n\t\t \'ffff\').replace(/ /g, \'\'), \'hex\'),\n\t\ta: Buffer.from((\'01FF\' +\n\t\t \'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF\' +\n\t\t \'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF\' +\n\t\t \'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF\' +\n\t\t \'FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFC\').\n\t\t replace(/ /g, \'\'), \'hex\'),\n\t\tb: Buffer.from((\'51\' +\n\t\t \'953eb961 8e1c9a1f 929a21a0 b68540ee\' +\n\t\t \'a2da725b 99b315f3 b8b48991 8ef109e1\' +\n\t\t \'56193951 ec7e937b 1652c0bd 3bb1bf07\' +\n\t\t \'3573df88 3d2c34f1 ef451fd4 6b503f00\').\n\t\t replace(/ /g, \'\'), \'hex\'),\n\t\ts: Buffer.from((\'00\' +\n\t\t \'d09e8800 291cb853 96cc6717 393284aa\' +\n\t\t \'a0da64ba\').replace(/ /g, \'\'), \'hex\'),\n\t\tn: Buffer.from((\'01ff\' +\n\t\t \'ffffffff ffffffff ffffffff ffffffff\' +\n\t\t \'ffffffff ffffffff ffffffff fffffffa\' +\n\t\t \'51868783 bf2f966b 7fcc0148 f709a5d0\' +\n\t\t \'3bb5c9b8 899c47ae bb6fb71e 91386409\').\n\t\t replace(/ /g, \'\'), \'hex\'),\n\t\tG: Buffer.from((\'04\' +\n\t\t \'00c6 858e06b7 0404e9cd 9e3ecb66 2395b442\' +\n\t\t \'9c648139 053fb521 f828af60 6b4d3dba\' +\n\t\t \'a14b5e77 efe75928 fe1dc127 a2ffa8de\' +\n\t\t \'3348b3c1 856a429b f97e7e31 c2e5bd66\' +\n\t\t \'0118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9\' +\n\t\t \'98f54449 579b4468 17afbd17 273e662c\' +\n\t\t \'97ee7299 5ef42640 c550b901 3fad0761\' +\n\t\t \'353c7086 a272c240 88be9476 9fd16650\').\n\t\t replace(/ /g, \'\'), \'hex\')\n\t}\n};\n\nmodule.exports = {\n\tinfo: algInfo,\n\tprivInfo: algPrivInfo,\n\thashAlgs: hashAlgs,\n\tcurves: curves\n};\n\n\n/***/ }),\n/* 9 */\n/*!***********************************************!*\\\n !*** ./node_modules/sshpk/lib/private-key.js ***!\n \\***********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2017 Joyent, Inc.\n\nmodule.exports = PrivateKey;\n\nvar assert = __webpack_require__(/*! assert-plus */ 1);\nvar Buffer = __webpack_require__(/*! safer-buffer */ 3).Buffer;\nvar algs = __webpack_require__(/*! ./algs */ 8);\nvar crypto = __webpack_require__(/*! crypto */ 2);\nvar Fingerprint = __webpack_require__(/*! ./fingerprint */ 40);\nvar Signature = __webpack_require__(/*! ./signature */ 19);\nvar errs = __webpack_require__(/*! ./errors */ 18);\nvar util = __webpack_require__(/*! util */ 4);\nvar utils = __webpack_require__(/*! ./utils */ 6);\nvar dhe = __webpack_require__(/*! ./dhe */ 67);\nvar generateECDSA = dhe.generateECDSA;\nvar generateED25519 = dhe.generateED25519;\nvar edCompat;\nvar nacl;\n\ntry {\n\tedCompat = __webpack_require__(/*! ./ed-compat */ 102);\n} catch (e) {\n\t/* Just continue through, and bail out if we try to use it. */\n}\n\nvar Key = __webpack_require__(/*! ./key */ 7);\n\nvar InvalidAlgorithmError = errs.InvalidAlgorithmError;\nvar KeyParseError = errs.KeyParseError;\nvar KeyEncryptedError = errs.KeyEncryptedError;\n\nvar formats = {};\nformats[\'auto\'] = __webpack_require__(/*! ./formats/auto */ 103);\nformats[\'pem\'] = __webpack_require__(/*! ./formats/pem */ 26);\nformats[\'pkcs1\'] = __webpack_require__(/*! ./formats/pkcs1 */ 70);\nformats[\'pkcs8\'] = __webpack_require__(/*! ./formats/pkcs8 */ 43);\nformats[\'rfc4253\'] = __webpack_require__(/*! ./formats/rfc4253 */ 31);\nformats[\'ssh-private\'] = __webpack_require__(/*! ./formats/ssh-private */ 54);\nformats[\'openssh\'] = formats[\'ssh-private\'];\nformats[\'ssh\'] = formats[\'ssh-private\'];\nformats[\'dnssec\'] = __webpack_require__(/*! ./formats/dnssec */ 71);\n\nfunction PrivateKey(opts) {\n\tassert.object(opts, \'options\');\n\tKey.call(this, opts);\n\n\tthis._pubCache = undefined;\n}\nutil.inherits(PrivateKey, Key);\n\nPrivateKey.formats = formats;\n\nPrivateKey.prototype.toBuffer = function (format, options) {\n\tif (format === undefined)\n\t\tformat = \'pkcs1\';\n\tassert.string(format, \'format\');\n\tassert.object(formats[format], \'formats[format]\');\n\tassert.optionalObject(options, \'options\');\n\n\treturn (formats[format].write(this, options));\n};\n\nPrivateKey.prototype.hash = function (algo) {\n\treturn (this.toPublic().hash(algo));\n};\n\nPrivateKey.prototype.toPublic = function () {\n\tif (this._pubCache)\n\t\treturn (this._pubCache);\n\n\tvar algInfo = algs.info[this.type];\n\tvar pubParts = [];\n\tfor (var i = 0; i < algInfo.parts.length; ++i) {\n\t\tvar p = algInfo.parts[i];\n\t\tpubParts.push(this.part[p]);\n\t}\n\n\tthis._pubCache = new Key({\n\t\ttype: this.type,\n\t\tsource: this,\n\t\tparts: pubParts\n\t});\n\tif (this.comment)\n\t\tthis._pubCache.comment = this.comment;\n\treturn (this._pubCache);\n};\n\nPrivateKey.prototype.derive = function (newType) {\n\tassert.string(newType, \'type\');\n\tvar priv, pub, pair;\n\n\tif (this.type === \'ed25519\' && newType === \'curve25519\') {\n\t\tif (nacl === undefined)\n\t\t\tnacl = __webpack_require__(/*! tweetnacl */ 20);\n\n\t\tpriv = this.part.k.data;\n\t\tif (priv[0] === 0x00)\n\t\t\tpriv = priv.slice(1);\n\n\t\tpair = nacl.box.keyPair.fromSecretKey(new Uint8Array(priv));\n\t\tpub = Buffer.from(pair.publicKey);\n\n\t\treturn (new PrivateKey({\n\t\t\ttype: \'curve25519\',\n\t\t\tparts: [\n\t\t\t\t{ name: \'A\', data: utils.mpNormalize(pub) },\n\t\t\t\t{ name: \'k\', data: utils.mpNormalize(priv) }\n\t\t\t]\n\t\t}));\n\t} else if (this.type === \'curve25519\' && newType === \'ed25519\') {\n\t\tif (nacl === undefined)\n\t\t\tnacl = __webpack_require__(/*! tweetnacl */ 20);\n\n\t\tpriv = this.part.k.data;\n\t\tif (priv[0] === 0x00)\n\t\t\tpriv = priv.slice(1);\n\n\t\tpair = nacl.sign.keyPair.fromSeed(new Uint8Array(priv));\n\t\tpub = Buffer.from(pair.publicKey);\n\n\t\treturn (new PrivateKey({\n\t\t\ttype: \'ed25519\',\n\t\t\tparts: [\n\t\t\t\t{ name: \'A\', data: utils.mpNormalize(pub) },\n\t\t\t\t{ name: \'k\', data: utils.mpNormalize(priv) }\n\t\t\t]\n\t\t}));\n\t}\n\tthrow (new Error(\'Key derivation not supported from \' + this.type +\n\t \' to \' + newType));\n};\n\nPrivateKey.prototype.createVerify = function (hashAlgo) {\n\treturn (this.toPublic().createVerify(hashAlgo));\n};\n\nPrivateKey.prototype.createSign = function (hashAlgo) {\n\tif (hashAlgo === undefined)\n\t\thashAlgo = this.defaultHashAlgorithm();\n\tassert.string(hashAlgo, \'hash algorithm\');\n\n\t/* ED25519 is not supported by OpenSSL, use a javascript impl. */\n\tif (this.type === \'ed25519\' && edCompat !== undefined)\n\t\treturn (new edCompat.Signer(this, hashAlgo));\n\tif (this.type === \'curve25519\')\n\t\tthrow (new Error(\'Curve25519 keys are not suitable for \' +\n\t\t \'signing or verification\'));\n\n\tvar v, nm, err;\n\ttry {\n\t\tnm = hashAlgo.toUpperCase();\n\t\tv = crypto.createSign(nm);\n\t} catch (e) {\n\t\terr = e;\n\t}\n\tif (v === undefined || (err instanceof Error &&\n\t err.message.match(/Unknown message digest/))) {\n\t\tnm = \'RSA-\';\n\t\tnm += hashAlgo.toUpperCase();\n\t\tv = crypto.createSign(nm);\n\t}\n\tassert.ok(v, \'failed to create verifier\');\n\tvar oldSign = v.sign.bind(v);\n\tvar key = this.toBuffer(\'pkcs1\');\n\tvar type = this.type;\n\tvar curve = this.curve;\n\tv.sign = function () {\n\t\tvar sig = oldSign(key);\n\t\tif (typeof (sig) === \'string\')\n\t\t\tsig = Buffer.from(sig, \'binary\');\n\t\tsig = Signature.parse(sig, type, \'asn1\');\n\t\tsig.hashAlgorithm = hashAlgo;\n\t\tsig.curve = curve;\n\t\treturn (sig);\n\t};\n\treturn (v);\n};\n\nPrivateKey.parse = function (data, format, options) {\n\tif (typeof (data) !== \'string\')\n\t\tassert.buffer(data, \'data\');\n\tif (format === undefined)\n\t\tformat = \'auto\';\n\tassert.string(format, \'format\');\n\tif (typeof (options) === \'string\')\n\t\toptions = { filename: options };\n\tassert.optionalObject(options, \'options\');\n\tif (options === undefined)\n\t\toptions = {};\n\tassert.optionalString(options.filename, \'options.filename\');\n\tif (options.filename === undefined)\n\t\toptions.filename = \'(unnamed)\';\n\n\tassert.object(formats[format], \'formats[format]\');\n\n\ttry {\n\t\tvar k = formats[format].read(data, options);\n\t\tassert.ok(k instanceof PrivateKey, \'key is not a private key\');\n\t\tif (!k.comment)\n\t\t\tk.comment = options.filename;\n\t\treturn (k);\n\t} catch (e) {\n\t\tif (e.name === \'KeyEncryptedError\')\n\t\t\tthrow (e);\n\t\tthrow (new KeyParseError(options.filename, format, e));\n\t}\n};\n\nPrivateKey.isPrivateKey = function (obj, ver) {\n\treturn (utils.isCompatible(obj, PrivateKey, ver));\n};\n\nPrivateKey.generate = function (type, options) {\n\tif (options === undefined)\n\t\toptions = {};\n\tassert.object(options, \'options\');\n\n\tswitch (type) {\n\tcase \'ecdsa\':\n\t\tif (options.curve === undefined)\n\t\t\toptions.curve = \'nistp256\';\n\t\tassert.string(options.curve, \'options.curve\');\n\t\treturn (generateECDSA(options.curve));\n\tcase \'ed25519\':\n\t\treturn (generateED25519());\n\tdefault:\n\t\tthrow (new Error(\'Key generation not supported with key \' +\n\t\t \'type "\' + type + \'"\'));\n\t}\n};\n\n/*\n * API versions for PrivateKey:\n * [1,0] -- initial ver\n * [1,1] -- added auto, pkcs[18], openssh/ssh-private formats\n * [1,2] -- added defaultHashAlgorithm\n * [1,3] -- added derive, ed, createDH\n * [1,4] -- first tagged version\n * [1,5] -- changed ed25519 part names and format\n */\nPrivateKey.prototype._sshpkApiVersion = [1, 5];\n\nPrivateKey._oldVersionDetect = function (obj) {\n\tassert.func(obj.toPublic);\n\tassert.func(obj.createSign);\n\tif (obj.derive)\n\t\treturn ([1, 3]);\n\tif (obj.defaultHashAlgorithm)\n\t\treturn ([1, 2]);\n\tif (obj.formats[\'auto\'])\n\t\treturn ([1, 1]);\n\treturn ([1, 0]);\n};\n\n\n/***/ }),\n/* 10 */\n/*!*********************************!*\\\n !*** external "rxjs/operators" ***!\n \\*********************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__10__;\n\n/***/ }),\n/* 11 */\n/*!**********************!*\\\n !*** external "url" ***!\n \\**********************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = require("url");\n\n/***/ }),\n/* 12 */\n/*!**************************************************!*\\\n !*** ../node_modules/css-loader/lib/css-base.js ***!\n \\**************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\nmodule.exports = function(useSourceMap) {\n\tvar list = [];\n\n\t// return the list of modules as css string\n\tlist.toString = function toString() {\n\t\treturn this.map(function (item) {\n\t\t\tvar content = cssWithMappingToString(item, useSourceMap);\n\t\t\tif(item[2]) {\n\t\t\t\treturn "@media " + item[2] + "{" + content + "}";\n\t\t\t} else {\n\t\t\t\treturn content;\n\t\t\t}\n\t\t}).join("");\n\t};\n\n\t// import a list of modules into the list\n\tlist.i = function(modules, mediaQuery) {\n\t\tif(typeof modules === "string")\n\t\t\tmodules = [[null, modules, ""]];\n\t\tvar alreadyImportedModules = {};\n\t\tfor(var i = 0; i < this.length; i++) {\n\t\t\tvar id = this[i][0];\n\t\t\tif(typeof id === "number")\n\t\t\t\talreadyImportedModules[id] = true;\n\t\t}\n\t\tfor(i = 0; i < modules.length; i++) {\n\t\t\tvar item = modules[i];\n\t\t\t// skip already imported module\n\t\t\t// this implementation is not 100% perfect for weird media query combinations\n\t\t\t// when a module is imported multiple times with different media queries.\n\t\t\t// I hope this will never occur (Hey this way we have smaller bundles)\n\t\t\tif(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) {\n\t\t\t\tif(mediaQuery && !item[2]) {\n\t\t\t\t\titem[2] = mediaQuery;\n\t\t\t\t} else if(mediaQuery) {\n\t\t\t\t\titem[2] = "(" + item[2] + ") and (" + mediaQuery + ")";\n\t\t\t\t}\n\t\t\t\tlist.push(item);\n\t\t\t}\n\t\t}\n\t};\n\treturn list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n\tvar content = item[1] || \'\';\n\tvar cssMapping = item[3];\n\tif (!cssMapping) {\n\t\treturn content;\n\t}\n\n\tif (useSourceMap) {\n\t\tvar sourceMapping = toComment(cssMapping);\n\t\tvar sourceURLs = cssMapping.sources.map(function (source) {\n\t\t\treturn \'/*# sourceURL=\' + cssMapping.sourceRoot + source + \' */\'\n\t\t});\n\n\t\treturn [content].concat(sourceURLs).concat([sourceMapping]).join(\'\\n\');\n\t}\n\n\treturn [content].join(\'\\n\');\n}\n\n// Adapted from convert-source-map (MIT)\nfunction toComment(sourceMap) {\n var base64 = new Buffer(JSON.stringify(sourceMap)).toString(\'base64\');\n var data = \'sourceMappingURL=data:application/json;charset=utf-8;base64,\' + base64;\n\n return \'/*# \' + data + \' */\';\n}\n\n\n/***/ }),\n/* 13 */\n/*!*****************************************!*\\\n !*** ./node_modules/axios/lib/utils.js ***!\n \\*****************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\nvar bind = __webpack_require__(/*! ./helpers/bind */ 80);\nvar isBuffer = __webpack_require__(/*! is-buffer */ 153);\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === \'[object Array]\';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === \'[object ArrayBuffer]\';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== \'undefined\') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== \'undefined\') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === \'string\';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === \'number\';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === \'undefined\';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === \'object\';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === \'[object Date]\';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === \'[object File]\';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === \'[object Blob]\';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === \'[object Function]\';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== \'undefined\' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, \'\').replace(/\\s*$/, \'\');\n}\n\n/**\n * Determine if we\'re running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> \'ReactNative\'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== \'undefined\' && navigator.product === \'ReactNative\') {\n return false;\n }\n return (\n typeof window !== \'undefined\' &&\n typeof document !== \'undefined\'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If \'obj\' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don\'t bother if no value provided\n if (obj === null || typeof obj === \'undefined\') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== \'object\') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === \'object\' && typeof val === \'object\') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === \'function\') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim\n};\n\n\n/***/ }),\n/* 14 */\n/*!******************************************!*\\\n !*** ./src/services/electron.service.ts ***!\n \\******************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, "__esModule", { value: true });\nconst core_1 = __webpack_require__(/*! @angular/core */ 0);\nlet ElectronService = class ElectronService {\n constructor() {\n this.electron = __webpack_require__(/*! electron */ 144);\n this.remote = this.electron.remote;\n this.app = this.remote.app;\n this.screen = this.remote.screen;\n this.dialog = this.remote.dialog;\n this.shell = this.electron.shell;\n this.clipboard = this.electron.clipboard;\n this.ipcRenderer = this.electron.ipcRenderer;\n this.globalShortcut = this.remote.globalShortcut;\n this.nativeImage = this.remote.nativeImage;\n this.autoUpdater = this.remote.autoUpdater;\n this.TouchBar = this.remote.TouchBar;\n this.BrowserWindow = this.remote.BrowserWindow;\n this.Menu = this.remote.Menu;\n this.MenuItem = this.remote.MenuItem;\n }\n remoteRequire(name) {\n return this.remote.require(name);\n }\n remoteRequirePluginModule(plugin, module, globals) {\n return this.remoteRequire(this.remoteResolvePluginModule(plugin, module, globals));\n }\n remoteResolvePluginModule(plugin, module, globals) {\n return globals.require.resolve(`${plugin}/node_modules/${module}`);\n }\n loseFocus() {\n if (process.platform === \'darwin\') {\n this.remote.Menu.sendActionToFirstResponder(\'hide:\');\n }\n }\n showMessageBox(browserWindow, options) {\n return new Promise(resolve => {\n this.dialog.showMessageBox(browserWindow, options, (response, checkboxChecked) => {\n resolve({ response, checkboxChecked });\n });\n });\n }\n};\nElectronService = __decorate([\n core_1.Injectable({ providedIn: \'root\' }),\n __metadata("design:paramtypes", [])\n], ElectronService);\nexports.ElectronService = ElectronService;\n\n\n/***/ }),\n/* 15 */\n/*!****************************************!*\\\n !*** ./src/services/config.service.ts ***!\n \\****************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result["default"] = mod;\n return result;\n};\nObject.defineProperty(exports, "__esModule", { value: true });\nconst rxjs_1 = __webpack_require__(/*! rxjs */ 5);\nconst yaml = __importStar(__webpack_require__(/*! js-yaml */ 143));\nconst path = __importStar(__webpack_require__(/*! path */ 29));\nconst fs = __importStar(__webpack_require__(/*! fs */ 22));\nconst core_1 = __webpack_require__(/*! @angular/core */ 0);\nconst configProvider_1 = __webpack_require__(/*! ../api/configProvider */ 48);\nconst electron_service_1 = __webpack_require__(/*! ./electron.service */ 14);\nconst hostApp_service_1 = __webpack_require__(/*! ./hostApp.service */ 16);\nconst configMerge = (a, b) => __webpack_require__(/*! deepmerge */ 147)(a, b, { arrayMerge: (_d, s) => s });\nfunction isStructuralMember(v) {\n return v instanceof Object && !(v instanceof Array) &&\n Object.keys(v).length > 0 && !v.__nonStructural;\n}\nfunction isNonStructuralObjectMember(v) {\n return v instanceof Object && !(v instanceof Array) && v.__nonStructural;\n}\nclass ConfigProxy {\n constructor(real, defaults) {\n for (let key in defaults) {\n if (isStructuralMember(defaults[key])) {\n if (!real[key]) {\n real[key] = {};\n }\n let proxy = new ConfigProxy(real[key], defaults[key]);\n Object.defineProperty(this, key, {\n enumerable: true,\n configurable: false,\n get: () => proxy,\n });\n }\n else {\n Object.defineProperty(this, key, {\n enumerable: true,\n configurable: false,\n get: () => this.getValue(key),\n set: (value) => {\n this.setValue(key, value);\n }\n });\n }\n }\n this.getValue = (key) => {\n if (real[key] !== undefined) {\n return real[key];\n }\n else {\n if (isNonStructuralObjectMember(defaults[key])) {\n real[key] = Object.assign({}, defaults[key]);\n delete real[key].__nonStructural;\n return real[key];\n }\n else {\n return defaults[key];\n }\n }\n };\n this.setValue = (key, value) => {\n real[key] = value;\n };\n }\n getValue(key) { } // tslint:disable-line\n setValue(key, value) { } // tslint:disable-line\n}\nexports.ConfigProxy = ConfigProxy;\nlet ConfigService = class ConfigService {\n constructor(electron, hostApp, configProviders) {\n this.hostApp = hostApp;\n this.changed = new rxjs_1.Subject();\n this.servicesCache = null;\n this.path = path.join(electron.app.getPath(\'userData\'), \'config.yaml\');\n this.defaults = configProviders.map(provider => {\n let defaults = {};\n if (provider.platformDefaults) {\n defaults = configMerge(defaults, provider.platformDefaults[hostApp.platform] || {});\n }\n if (provider.defaults) {\n defaults = configMerge(defaults, provider.defaults);\n }\n return defaults;\n }).reduce(configMerge);\n this.load();\n hostApp.configChangeBroadcast$.subscribe(() => {\n this.load();\n this.emitChange();\n });\n }\n get changed$() { return this.changed; }\n getDefaults() {\n return this.defaults;\n }\n load() {\n if (fs.existsSync(this.path)) {\n this._store = yaml.safeLoad(fs.readFileSync(this.path, \'utf8\'));\n }\n else {\n this._store = {};\n }\n this.store = new ConfigProxy(this._store, this.defaults);\n }\n save() {\n fs.writeFileSync(this.path, yaml.safeDump(this._store), \'utf8\');\n this.emitChange();\n this.hostApp.broadcastConfigChange();\n }\n readRaw() {\n return yaml.safeDump(this._store);\n }\n writeRaw(data) {\n this._store = yaml.safeLoad(data);\n this.save();\n this.load();\n this.emitChange();\n }\n emitChange() {\n this.changed.next();\n }\n requestRestart() {\n this.restartRequested = true;\n }\n enabledServices(services) {\n if (!this.servicesCache) {\n this.servicesCache = {};\n let ngModule = window[\'rootModule\'].ngInjectorDef;\n for (let imp of ngModule.imports) {\n let module = (imp[\'ngModule\'] || imp);\n if (module.ngInjectorDef && module.ngInjectorDef.providers) {\n this.servicesCache[module[\'pluginName\']] = module.ngInjectorDef.providers.map(provider => {\n return provider[\'useClass\'] || provider;\n });\n }\n }\n }\n return services.filter(service => {\n for (let pluginName in this.servicesCache) {\n if (this.servicesCache[pluginName].includes(service.constructor)) {\n return !this.store.pluginBlacklist.includes(pluginName);\n }\n }\n return true;\n });\n }\n};\nConfigService = __decorate([\n core_1.Injectable({ providedIn: \'root\' }),\n __param(2, core_1.Inject(configProvider_1.ConfigProvider)),\n __metadata("design:paramtypes", [electron_service_1.ElectronService,\n hostApp_service_1.HostAppService, Array])\n], ConfigService);\nexports.ConfigService = ConfigService;\n\n\n/***/ }),\n/* 16 */\n/*!*****************************************!*\\\n !*** ./src/services/hostApp.service.ts ***!\n \\*****************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result["default"] = mod;\n return result;\n};\nObject.defineProperty(exports, "__esModule", { value: true });\nconst path = __importStar(__webpack_require__(/*! path */ 29));\nconst shellEscape = __webpack_require__(/*! shell-escape */ 145);\nconst rxjs_1 = __webpack_require__(/*! rxjs */ 5);\nconst core_1 = __webpack_require__(/*! @angular/core */ 0);\nconst electron_service_1 = __webpack_require__(/*! ./electron.service */ 14);\nconst log_service_1 = __webpack_require__(/*! ./log.service */ 32);\nvar Platform;\n(function (Platform) {\n Platform[Platform["Linux"] = 0] = "Linux";\n Platform[Platform["macOS"] = 1] = "macOS";\n Platform[Platform["Windows"] = 2] = "Windows";\n})(Platform = exports.Platform || (exports.Platform = {}));\nlet HostAppService = class HostAppService {\n constructor(zone, electron, log) {\n this.zone = zone;\n this.electron = electron;\n this.shown = new core_1.EventEmitter();\n this.isFullScreen = false;\n this.preferencesMenu = new rxjs_1.Subject();\n this.secondInstance = new rxjs_1.Subject();\n this.cliOpenDirectory = new rxjs_1.Subject();\n this.cliRunCommand = new rxjs_1.Subject();\n this.cliPaste = new rxjs_1.Subject();\n this.cliOpenProfile = new rxjs_1.Subject();\n this.configChangeBroadcast = new rxjs_1.Subject();\n this.windowCloseRequest = new rxjs_1.Subject();\n this.windowMoved = new rxjs_1.Subject();\n this.displayMetricsChanged = new rxjs_1.Subject();\n this.logger = log.create(\'hostApp\');\n this.nodePlatform = __webpack_require__(/*! os */ 57).platform();\n this.platform = {\n win32: Platform.Windows,\n darwin: Platform.macOS,\n linux: Platform.Linux\n }[this.nodePlatform];\n this.windowId = parseInt(location.search.substring(1));\n this.logger.info(\'Window ID:\', this.windowId);\n electron.ipcRenderer.on(\'host:preferences-menu\', () => this.zone.run(() => this.preferencesMenu.next()));\n electron.ipcRenderer.on(\'uncaughtException\', (_$event, err) => {\n this.logger.error(\'Unhandled exception:\', err);\n });\n electron.ipcRenderer.on(\'host:window-enter-full-screen\', () => this.zone.run(() => {\n this.isFullScreen = true;\n }));\n electron.ipcRenderer.on(\'host:window-leave-full-screen\', () => this.zone.run(() => {\n this.isFullScreen = false;\n }));\n electron.ipcRenderer.on(\'host:window-shown\', () => {\n this.zone.run(() => this.shown.emit());\n });\n electron.ipcRenderer.on(\'host:window-close-request\', () => {\n this.zone.run(() => this.windowCloseRequest.next());\n });\n electron.ipcRenderer.on(\'host:window-moved\', () => {\n this.zone.run(() => this.windowMoved.next());\n });\n electron.ipcRenderer.on(\'host:display-metrics-changed\', () => {\n this.zone.run(() => this.displayMetricsChanged.next());\n });\n electron.ipcRenderer.on(\'host:second-instance\', (_$event, argv, cwd) => this.zone.run(() => {\n this.logger.info(\'Second instance\', argv);\n const op = argv._[0];\n if (op === \'open\') {\n this.cliOpenDirectory.next(path.resolve(cwd, argv.directory));\n }\n else if (op === \'run\') {\n this.cliRunCommand.next(argv.command);\n }\n else if (op === \'paste\') {\n let text = argv.text;\n if (argv.escape) {\n text = shellEscape([text]);\n }\n this.cliPaste.next(text);\n }\n else if (op === \'profile\') {\n this.cliOpenProfile.next(argv.profileName);\n }\n else {\n this.secondInstance.next();\n }\n }));\n electron.ipcRenderer.on(\'host:config-change\', () => this.zone.run(() => {\n this.configChangeBroadcast.next();\n }));\n }\n get preferencesMenu$() { return this.preferencesMenu; }\n get secondInstance$() { return this.secondInstance; }\n get cliOpenDirectory$() { return this.cliOpenDirectory; }\n get cliRunCommand$() { return this.cliRunCommand; }\n get cliPaste$() { return this.cliPaste; }\n get cliOpenProfile$() { return this.cliOpenProfile; }\n get configChangeBroadcast$() { return this.configChangeBroadcast; }\n get windowCloseRequest$() { return this.windowCloseRequest; }\n get windowMoved$() { return this.windowMoved; }\n get displayMetricsChanged$() { return this.displayMetricsChanged; }\n getWindow() {\n return this.electron.BrowserWindow.fromId(this.windowId);\n }\n newWindow() {\n this.electron.ipcRenderer.send(\'app:new-window\');\n }\n getShell() {\n return this.electron.shell;\n }\n getAppPath() {\n return this.electron.app.getAppPath();\n }\n getPath(type) {\n return this.electron.app.getPath(type);\n }\n toggleFullscreen() {\n let window = this.getWindow();\n window.setFullScreen(!this.isFullScreen);\n }\n openDevTools() {\n this.getWindow().webContents.openDevTools({ mode: \'undocked\' });\n }\n focusWindow() {\n this.electron.ipcRenderer.send(\'window-focus\');\n }\n minimize() {\n this.electron.ipcRenderer.send(\'window-minimize\');\n }\n maximize() {\n this.electron.ipcRenderer.send(\'window-maximize\');\n }\n unmaximize() {\n this.electron.ipcRenderer.send(\'window-unmaximize\');\n }\n toggleMaximize() {\n this.electron.ipcRenderer.send(\'window-toggle-maximize\');\n }\n setBounds(bounds) {\n this.electron.ipcRenderer.send(\'window-set-bounds\', bounds);\n }\n setAlwaysOnTop(flag) {\n this.electron.ipcRenderer.send(\'window-set-always-on-top\', flag);\n }\n setVibrancy(enable, type) {\n document.body.classList.toggle(\'vibrant\', enable);\n if (this.platform === Platform.macOS) {\n this.getWindow().setVibrancy(enable ? \'dark\' : null);\n }\n if (this.platform === Platform.Windows) {\n this.electron.ipcRenderer.send(\'window-set-vibrancy\', enable, type);\n }\n }\n setTitle(title) {\n this.electron.ipcRenderer.send(\'window-set-title\', title);\n }\n setTouchBar(touchBar) {\n this.getWindow().setTouchBar(touchBar);\n }\n popupContextMenu(menuDefinition) {\n this.electron.Menu.buildFromTemplate(menuDefinition).popup({});\n }\n broadcastConfigChange() {\n this.electron.ipcRenderer.send(\'app:config-change\');\n }\n emitReady() {\n this.electron.ipcRenderer.send(\'app:ready\');\n }\n bringToFront() {\n this.electron.ipcRenderer.send(\'window-bring-to-front\');\n }\n closeWindow() {\n this.electron.ipcRenderer.send(\'window-close\');\n }\n quit() {\n this.logger.info(\'Quitting\');\n this.electron.app.quit();\n }\n};\nHostAppService = __decorate([\n core_1.Injectable({ providedIn: \'root\' }),\n __metadata("design:paramtypes", [core_1.NgZone,\n electron_service_1.ElectronService,\n log_service_1.LogService])\n], HostAppService);\nexports.HostAppService = HostAppService;\n\n\n/***/ }),\n/* 17 */\n/*!**********************************!*\\\n !*** external "@angular/common" ***!\n \\**********************************/\n/*! no static exports found */\n/*! exports used: CommonModule, isPlatformBrowser */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__17__;\n\n/***/ }),\n/* 18 */\n/*!******************************************!*\\\n !*** ./node_modules/sshpk/lib/errors.js ***!\n \\******************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2015 Joyent, Inc.\n\nvar assert = __webpack_require__(/*! assert-plus */ 1);\nvar util = __webpack_require__(/*! util */ 4);\n\nfunction FingerprintFormatError(fp, format) {\n\tif (Error.captureStackTrace)\n\t\tError.captureStackTrace(this, FingerprintFormatError);\n\tthis.name = \'FingerprintFormatError\';\n\tthis.fingerprint = fp;\n\tthis.format = format;\n\tthis.message = \'Fingerprint format is not supported, or is invalid: \';\n\tif (fp !== undefined)\n\t\tthis.message += \' fingerprint = \' + fp;\n\tif (format !== undefined)\n\t\tthis.message += \' format = \' + format;\n}\nutil.inherits(FingerprintFormatError, Error);\n\nfunction InvalidAlgorithmError(alg) {\n\tif (Error.captureStackTrace)\n\t\tError.captureStackTrace(this, InvalidAlgorithmError);\n\tthis.name = \'InvalidAlgorithmError\';\n\tthis.algorithm = alg;\n\tthis.message = \'Algorithm "\' + alg + \'" is not supported\';\n}\nutil.inherits(InvalidAlgorithmError, Error);\n\nfunction KeyParseError(name, format, innerErr) {\n\tif (Error.captureStackTrace)\n\t\tError.captureStackTrace(this, KeyParseError);\n\tthis.name = \'KeyParseError\';\n\tthis.format = format;\n\tthis.keyName = name;\n\tthis.innerErr = innerErr;\n\tthis.message = \'Failed to parse \' + name + \' as a valid \' + format +\n\t \' format key: \' + innerErr.message;\n}\nutil.inherits(KeyParseError, Error);\n\nfunction SignatureParseError(type, format, innerErr) {\n\tif (Error.captureStackTrace)\n\t\tError.captureStackTrace(this, SignatureParseError);\n\tthis.name = \'SignatureParseError\';\n\tthis.type = type;\n\tthis.format = format;\n\tthis.innerErr = innerErr;\n\tthis.message = \'Failed to parse the given data as a \' + type +\n\t \' signature in \' + format + \' format: \' + innerErr.message;\n}\nutil.inherits(SignatureParseError, Error);\n\nfunction CertificateParseError(name, format, innerErr) {\n\tif (Error.captureStackTrace)\n\t\tError.captureStackTrace(this, CertificateParseError);\n\tthis.name = \'CertificateParseError\';\n\tthis.format = format;\n\tthis.certName = name;\n\tthis.innerErr = innerErr;\n\tthis.message = \'Failed to parse \' + name + \' as a valid \' + format +\n\t \' format certificate: \' + innerErr.message;\n}\nutil.inherits(CertificateParseError, Error);\n\nfunction KeyEncryptedError(name, format) {\n\tif (Error.captureStackTrace)\n\t\tError.captureStackTrace(this, KeyEncryptedError);\n\tthis.name = \'KeyEncryptedError\';\n\tthis.format = format;\n\tthis.keyName = name;\n\tthis.message = \'The \' + format + \' format key \' + name + \' is \' +\n\t \'encrypted (password-protected), and no passphrase was \' +\n\t \'provided in `options`\';\n}\nutil.inherits(KeyEncryptedError, Error);\n\nmodule.exports = {\n\tFingerprintFormatError: FingerprintFormatError,\n\tInvalidAlgorithmError: InvalidAlgorithmError,\n\tKeyParseError: KeyParseError,\n\tSignatureParseError: SignatureParseError,\n\tKeyEncryptedError: KeyEncryptedError,\n\tCertificateParseError: CertificateParseError\n};\n\n\n/***/ }),\n/* 19 */\n/*!*********************************************!*\\\n !*** ./node_modules/sshpk/lib/signature.js ***!\n \\*********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2015 Joyent, Inc.\n\nmodule.exports = Signature;\n\nvar assert = __webpack_require__(/*! assert-plus */ 1);\nvar Buffer = __webpack_require__(/*! safer-buffer */ 3).Buffer;\nvar algs = __webpack_require__(/*! ./algs */ 8);\nvar crypto = __webpack_require__(/*! crypto */ 2);\nvar errs = __webpack_require__(/*! ./errors */ 18);\nvar utils = __webpack_require__(/*! ./utils */ 6);\nvar asn1 = __webpack_require__(/*! asn1 */ 21);\nvar SSHBuffer = __webpack_require__(/*! ./ssh-buffer */ 44);\n\nvar InvalidAlgorithmError = errs.InvalidAlgorithmError;\nvar SignatureParseError = errs.SignatureParseError;\n\nfunction Signature(opts) {\n\tassert.object(opts, \'options\');\n\tassert.arrayOfObject(opts.parts, \'options.parts\');\n\tassert.string(opts.type, \'options.type\');\n\n\tvar partLookup = {};\n\tfor (var i = 0; i < opts.parts.length; ++i) {\n\t\tvar part = opts.parts[i];\n\t\tpartLookup[part.name] = part;\n\t}\n\n\tthis.type = opts.type;\n\tthis.hashAlgorithm = opts.hashAlgo;\n\tthis.curve = opts.curve;\n\tthis.parts = opts.parts;\n\tthis.part = partLookup;\n}\n\nSignature.prototype.toBuffer = function (format) {\n\tif (format === undefined)\n\t\tformat = \'asn1\';\n\tassert.string(format, \'format\');\n\n\tvar buf;\n\tvar stype = \'ssh-\' + this.type;\n\n\tswitch (this.type) {\n\tcase \'rsa\':\n\t\tswitch (this.hashAlgorithm) {\n\t\tcase \'sha256\':\n\t\t\tstype = \'rsa-sha2-256\';\n\t\t\tbreak;\n\t\tcase \'sha512\':\n\t\t\tstype = \'rsa-sha2-512\';\n\t\t\tbreak;\n\t\tcase \'sha1\':\n\t\tcase undefined:\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow (new Error(\'SSH signature \' +\n\t\t\t \'format does not support hash \' +\n\t\t\t \'algorithm \' + this.hashAlgorithm));\n\t\t}\n\t\tif (format === \'ssh\') {\n\t\t\tbuf = new SSHBuffer({});\n\t\t\tbuf.writeString(stype);\n\t\t\tbuf.writePart(this.part.sig);\n\t\t\treturn (buf.toBuffer());\n\t\t} else {\n\t\t\treturn (this.part.sig.data);\n\t\t}\n\t\tbreak;\n\n\tcase \'ed25519\':\n\t\tif (format === \'ssh\') {\n\t\t\tbuf = new SSHBuffer({});\n\t\t\tbuf.writeString(stype);\n\t\t\tbuf.writePart(this.part.sig);\n\t\t\treturn (buf.toBuffer());\n\t\t} else {\n\t\t\treturn (this.part.sig.data);\n\t\t}\n\t\tbreak;\n\n\tcase \'dsa\':\n\tcase \'ecdsa\':\n\t\tvar r, s;\n\t\tif (format === \'asn1\') {\n\t\t\tvar der = new asn1.BerWriter();\n\t\t\tder.startSequence();\n\t\t\tr = utils.mpNormalize(this.part.r.data);\n\t\t\ts = utils.mpNormalize(this.part.s.data);\n\t\t\tder.writeBuffer(r, asn1.Ber.Integer);\n\t\t\tder.writeBuffer(s, asn1.Ber.Integer);\n\t\t\tder.endSequence();\n\t\t\treturn (der.buffer);\n\t\t} else if (format === \'ssh\' && this.type === \'dsa\') {\n\t\t\tbuf = new SSHBuffer({});\n\t\t\tbuf.writeString(\'ssh-dss\');\n\t\t\tr = this.part.r.data;\n\t\t\tif (r.length > 20 && r[0] === 0x00)\n\t\t\t\tr = r.slice(1);\n\t\t\ts = this.part.s.data;\n\t\t\tif (s.length > 20 && s[0] === 0x00)\n\t\t\t\ts = s.slice(1);\n\t\t\tif ((this.hashAlgorithm &&\n\t\t\t this.hashAlgorithm !== \'sha1\') ||\n\t\t\t r.length + s.length !== 40) {\n\t\t\t\tthrow (new Error(\'OpenSSH only supports \' +\n\t\t\t\t \'DSA signatures with SHA1 hash\'));\n\t\t\t}\n\t\t\tbuf.writeBuffer(Buffer.concat([r, s]));\n\t\t\treturn (buf.toBuffer());\n\t\t} else if (format === \'ssh\' && this.type === \'ecdsa\') {\n\t\t\tvar inner = new SSHBuffer({});\n\t\t\tr = this.part.r.data;\n\t\t\tinner.writeBuffer(r);\n\t\t\tinner.writePart(this.part.s);\n\n\t\t\tbuf = new SSHBuffer({});\n\t\t\t/* XXX: find a more proper way to do this? */\n\t\t\tvar curve;\n\t\t\tif (r[0] === 0x00)\n\t\t\t\tr = r.slice(1);\n\t\t\tvar sz = r.length * 8;\n\t\t\tif (sz === 256)\n\t\t\t\tcurve = \'nistp256\';\n\t\t\telse if (sz === 384)\n\t\t\t\tcurve = \'nistp384\';\n\t\t\telse if (sz === 528)\n\t\t\t\tcurve = \'nistp521\';\n\t\t\tbuf.writeString(\'ecdsa-sha2-\' + curve);\n\t\t\tbuf.writeBuffer(inner.toBuffer());\n\t\t\treturn (buf.toBuffer());\n\t\t}\n\t\tthrow (new Error(\'Invalid signature format\'));\n\tdefault:\n\t\tthrow (new Error(\'Invalid signature data\'));\n\t}\n};\n\nSignature.prototype.toString = function (format) {\n\tassert.optionalString(format, \'format\');\n\treturn (this.toBuffer(format).toString(\'base64\'));\n};\n\nSignature.parse = function (data, type, format) {\n\tif (typeof (data) === \'string\')\n\t\tdata = Buffer.from(data, \'base64\');\n\tassert.buffer(data, \'data\');\n\tassert.string(format, \'format\');\n\tassert.string(type, \'type\');\n\n\tvar opts = {};\n\topts.type = type.toLowerCase();\n\topts.parts = [];\n\n\ttry {\n\t\tassert.ok(data.length > 0, \'signature must not be empty\');\n\t\tswitch (opts.type) {\n\t\tcase \'rsa\':\n\t\t\treturn (parseOneNum(data, type, format, opts));\n\t\tcase \'ed25519\':\n\t\t\treturn (parseOneNum(data, type, format, opts));\n\n\t\tcase \'dsa\':\n\t\tcase \'ecdsa\':\n\t\t\tif (format === \'asn1\')\n\t\t\t\treturn (parseDSAasn1(data, type, format, opts));\n\t\t\telse if (opts.type === \'dsa\')\n\t\t\t\treturn (parseDSA(data, type, format, opts));\n\t\t\telse\n\t\t\t\treturn (parseECDSA(data, type, format, opts));\n\n\t\tdefault:\n\t\t\tthrow (new InvalidAlgorithmError(type));\n\t\t}\n\n\t} catch (e) {\n\t\tif (e instanceof InvalidAlgorithmError)\n\t\t\tthrow (e);\n\t\tthrow (new SignatureParseError(type, format, e));\n\t}\n};\n\nfunction parseOneNum(data, type, format, opts) {\n\tif (format === \'ssh\') {\n\t\ttry {\n\t\t\tvar buf = new SSHBuffer({buffer: data});\n\t\t\tvar head = buf.readString();\n\t\t} catch (e) {\n\t\t\t/* fall through */\n\t\t}\n\t\tif (buf !== undefined) {\n\t\t\tvar msg = \'SSH signature does not match expected \' +\n\t\t\t \'type (expected \' + type + \', got \' + head + \')\';\n\t\t\tswitch (head) {\n\t\t\tcase \'ssh-rsa\':\n\t\t\t\tassert.strictEqual(type, \'rsa\', msg);\n\t\t\t\topts.hashAlgo = \'sha1\';\n\t\t\t\tbreak;\n\t\t\tcase \'rsa-sha2-256\':\n\t\t\t\tassert.strictEqual(type, \'rsa\', msg);\n\t\t\t\topts.hashAlgo = \'sha256\';\n\t\t\t\tbreak;\n\t\t\tcase \'rsa-sha2-512\':\n\t\t\t\tassert.strictEqual(type, \'rsa\', msg);\n\t\t\t\topts.hashAlgo = \'sha512\';\n\t\t\t\tbreak;\n\t\t\tcase \'ssh-ed25519\':\n\t\t\t\tassert.strictEqual(type, \'ed25519\', msg);\n\t\t\t\topts.hashAlgo = \'sha512\';\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow (new Error(\'Unknown SSH signature \' +\n\t\t\t\t \'type: \' + head));\n\t\t\t}\n\t\t\tvar sig = buf.readPart();\n\t\t\tassert.ok(buf.atEnd(), \'extra trailing bytes\');\n\t\t\tsig.name = \'sig\';\n\t\t\topts.parts.push(sig);\n\t\t\treturn (new Signature(opts));\n\t\t}\n\t}\n\topts.parts.push({name: \'sig\', data: data});\n\treturn (new Signature(opts));\n}\n\nfunction parseDSAasn1(data, type, format, opts) {\n\tvar der = new asn1.BerReader(data);\n\tder.readSequence();\n\tvar r = der.readString(asn1.Ber.Integer, true);\n\tvar s = der.readString(asn1.Ber.Integer, true);\n\n\topts.parts.push({name: \'r\', data: utils.mpNormalize(r)});\n\topts.parts.push({name: \'s\', data: utils.mpNormalize(s)});\n\n\treturn (new Signature(opts));\n}\n\nfunction parseDSA(data, type, format, opts) {\n\tif (data.length != 40) {\n\t\tvar buf = new SSHBuffer({buffer: data});\n\t\tvar d = buf.readBuffer();\n\t\tif (d.toString(\'ascii\') === \'ssh-dss\')\n\t\t\td = buf.readBuffer();\n\t\tassert.ok(buf.atEnd(), \'extra trailing bytes\');\n\t\tassert.strictEqual(d.length, 40, \'invalid inner length\');\n\t\tdata = d;\n\t}\n\topts.parts.push({name: \'r\', data: data.slice(0, 20)});\n\topts.parts.push({name: \'s\', data: data.slice(20, 40)});\n\treturn (new Signature(opts));\n}\n\nfunction parseECDSA(data, type, format, opts) {\n\tvar buf = new SSHBuffer({buffer: data});\n\n\tvar r, s;\n\tvar inner = buf.readBuffer();\n\tvar stype = inner.toString(\'ascii\');\n\tif (stype.slice(0, 6) === \'ecdsa-\') {\n\t\tvar parts = stype.split(\'-\');\n\t\tassert.strictEqual(parts[0], \'ecdsa\');\n\t\tassert.strictEqual(parts[1], \'sha2\');\n\t\topts.curve = parts[2];\n\t\tswitch (opts.curve) {\n\t\tcase \'nistp256\':\n\t\t\topts.hashAlgo = \'sha256\';\n\t\t\tbreak;\n\t\tcase \'nistp384\':\n\t\t\topts.hashAlgo = \'sha384\';\n\t\t\tbreak;\n\t\tcase \'nistp521\':\n\t\t\topts.hashAlgo = \'sha512\';\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow (new Error(\'Unsupported ECDSA curve: \' +\n\t\t\t opts.curve));\n\t\t}\n\t\tinner = buf.readBuffer();\n\t\tassert.ok(buf.atEnd(), \'extra trailing bytes on outer\');\n\t\tbuf = new SSHBuffer({buffer: inner});\n\t\tr = buf.readPart();\n\t} else {\n\t\tr = {data: inner};\n\t}\n\n\ts = buf.readPart();\n\tassert.ok(buf.atEnd(), \'extra trailing bytes\');\n\n\tr.name = \'r\';\n\ts.name = \'s\';\n\n\topts.parts.push(r);\n\topts.parts.push(s);\n\treturn (new Signature(opts));\n}\n\nSignature.isSignature = function (obj, ver) {\n\treturn (utils.isCompatible(obj, Signature, ver));\n};\n\n/*\n * API versions for Signature:\n * [1,0] -- initial ver\n * [2,0] -- support for rsa in full ssh format, compat with sshpk-agent\n * hashAlgorithm property\n * [2,1] -- first tagged version\n */\nSignature.prototype._sshpkApiVersion = [2, 1];\n\nSignature._oldVersionDetect = function (obj) {\n\tassert.func(obj.toBuffer);\n\tif (obj.hasOwnProperty(\'hashAlgorithm\'))\n\t\treturn ([2, 0]);\n\treturn ([1, 0]);\n};\n\n\n/***/ }),\n/* 20 */\n/*!*********************************************!*\\\n !*** ./node_modules/tweetnacl/nacl-fast.js ***!\n \\*********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n(function(nacl) {\n\'use strict\';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error(\'no PRNG\'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // "expand 32-byte k"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon\'s Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = (x[j] + 128) >> 8;\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i, mlen;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n mlen = -1;\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n mlen = n;\n return mlen;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error(\'bad key size\');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error(\'bad nonce size\');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error(\'bad public key size\');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error(\'bad secret key size\');\n}\n\nfunction checkArrayTypes() {\n var t, i;\n for (i = 0; i < arguments.length; i++) {\n if ((t = Object.prototype.toString.call(arguments[i])) !== \'[object Uint8Array]\')\n throw new TypeError(\'unexpected type \' + t + \', use Uint8Array\');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\n// TODO: Completely remove this in v0.15.\nif (!nacl.util) {\n nacl.util = {};\n nacl.util.decodeUTF8 = nacl.util.encodeUTF8 = nacl.util.encodeBase64 = nacl.util.decodeBase64 = function() {\n throw new Error(\'nacl.util moved into separate package: https://github.com/dchest/tweetnacl-util-js\');\n };\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return false;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return false;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error(\'bad n size\');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error(\'bad p size\');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error(\'bad n size\');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error(\'bad secret key size\');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error(\'bad secret key size\');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n if (arguments.length !== 2)\n throw new Error(\'nacl.sign.open accepts 2 arguments; did you mean to use nacl.sign.detached.verify?\');\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error(\'bad public key size\');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error(\'bad signature size\');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error(\'bad public key size\');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error(\'bad secret key size\');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error(\'bad seed size\');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== \'undefined\' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (true) {\n // Node.js.\n crypto = __webpack_require__(/*! crypto */ 2);\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})( true && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n\n\n/***/ }),\n/* 21 */\n/*!****************************************!*\\\n !*** ./node_modules/asn1/lib/index.js ***!\n \\****************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2011 Mark Cavage All rights reserved.\n\n// If you have no idea what ASN.1 or BER is, see this:\n// ftp://ftp.rsa.com/pub/pkcs/ascii/layman.asc\n\nvar Ber = __webpack_require__(/*! ./ber/index */ 198);\n\n\n\n// --- Exported API\n\nmodule.exports = {\n\n Ber: Ber,\n\n BerReader: Ber.Reader,\n\n BerWriter: Ber.Writer\n\n};\n\n\n/***/ }),\n/* 22 */\n/*!*********************!*\\\n !*** external "fs" ***!\n \\*********************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__22__;\n\n/***/ }),\n/* 23 */\n/*!*************************!*\\\n !*** external "assert" ***!\n \\*************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = require("assert");\n\n/***/ }),\n/* 24 */\n/*!*************************!*\\\n !*** external "stream" ***!\n \\*************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = require("stream");\n\n/***/ }),\n/* 25 */\n/*!************************************!*\\\n !*** ./node_modules/jsbn/index.js ***!\n \\************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n(function(){\n\n // Copyright (c) 2005 Tom Wu\n // All Rights Reserved.\n // See "LICENSE" for details.\n\n // Basic JavaScript BN library - subset useful for RSA encryption.\n\n // Bits per digit\n var dbits;\n\n // JavaScript engine analysis\n var canary = 0xdeadbeefcafe;\n var j_lm = ((canary&0xffffff)==0xefcafe);\n\n // (public) Constructor\n function BigInteger(a,b,c) {\n if(a != null)\n if("number" == typeof a) this.fromNumber(a,b,c);\n else if(b == null && "string" != typeof a) this.fromString(a,256);\n else this.fromString(a,b);\n }\n\n // return new, unset BigInteger\n function nbi() { return new BigInteger(null); }\n\n // am: Compute w_j += (x*this_i), propagate carries,\n // c is initial carry, returns final carry.\n // c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n // We need to select the fastest one that works in this environment.\n\n // am1: use a single mult and divide to get the high bits,\n // max digit bits should be 26 because\n // max internal value = 2*dvalue^2-2*dvalue (< 2^53)\n function am1(i,x,w,j,c,n) {\n while(--n >= 0) {\n var v = x*this[i++]+w[j]+c;\n c = Math.floor(v/0x4000000);\n w[j++] = v&0x3ffffff;\n }\n return c;\n }\n // am2 avoids a big mult-and-extract completely.\n // Max digit bits should be <= 30 because we do bitwise ops\n // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\n function am2(i,x,w,j,c,n) {\n var xl = x&0x7fff, xh = x>>15;\n while(--n >= 0) {\n var l = this[i]&0x7fff;\n var h = this[i++]>>15;\n var m = xh*l+h*xl;\n l = xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff);\n c = (l>>>30)+(m>>>15)+xh*h+(c>>>30);\n w[j++] = l&0x3fffffff;\n }\n return c;\n }\n // Alternately, set max digit bits to 28 since some\n // browsers slow down when dealing with 32-bit numbers.\n function am3(i,x,w,j,c,n) {\n var xl = x&0x3fff, xh = x>>14;\n while(--n >= 0) {\n var l = this[i]&0x3fff;\n var h = this[i++]>>14;\n var m = xh*l+h*xl;\n l = xl*l+((m&0x3fff)<<14)+w[j]+c;\n c = (l>>28)+(m>>14)+xh*h;\n w[j++] = l&0xfffffff;\n }\n return c;\n }\n var inBrowser = typeof navigator !== "undefined";\n if(inBrowser && j_lm && (navigator.appName == "Microsoft Internet Explorer")) {\n BigInteger.prototype.am = am2;\n dbits = 30;\n }\n else if(inBrowser && j_lm && (navigator.appName != "Netscape")) {\n BigInteger.prototype.am = am1;\n dbits = 26;\n }\n else { // Mozilla/Netscape seems to prefer am3\n BigInteger.prototype.am = am3;\n dbits = 28;\n }\n\n BigInteger.prototype.DB = dbits;\n BigInteger.prototype.DM = ((1<= 0; --i) r[i] = this[i];\n r.t = this.t;\n r.s = this.s;\n }\n\n // (protected) set from integer value x, -DV <= x < DV\n function bnpFromInt(x) {\n this.t = 1;\n this.s = (x<0)?-1:0;\n if(x > 0) this[0] = x;\n else if(x < -1) this[0] = x+this.DV;\n else this.t = 0;\n }\n\n // return bigint initialized to value\n function nbv(i) { var r = nbi(); r.fromInt(i); return r; }\n\n // (protected) set from string and radix\n function bnpFromString(s,b) {\n var k;\n if(b == 16) k = 4;\n else if(b == 8) k = 3;\n else if(b == 256) k = 8; // byte array\n else if(b == 2) k = 1;\n else if(b == 32) k = 5;\n else if(b == 4) k = 2;\n else { this.fromRadix(s,b); return; }\n this.t = 0;\n this.s = 0;\n var i = s.length, mi = false, sh = 0;\n while(--i >= 0) {\n var x = (k==8)?s[i]&0xff:intAt(s,i);\n if(x < 0) {\n if(s.charAt(i) == "-") mi = true;\n continue;\n }\n mi = false;\n if(sh == 0)\n this[this.t++] = x;\n else if(sh+k > this.DB) {\n this[this.t-1] |= (x&((1<<(this.DB-sh))-1))<>(this.DB-sh));\n }\n else\n this[this.t-1] |= x<= this.DB) sh -= this.DB;\n }\n if(k == 8 && (s[0]&0x80) != 0) {\n this.s = -1;\n if(sh > 0) this[this.t-1] |= ((1<<(this.DB-sh))-1)< 0 && this[this.t-1] == c) --this.t;\n }\n\n // (public) return string representation in given radix\n function bnToString(b) {\n if(this.s < 0) return "-"+this.negate().toString(b);\n var k;\n if(b == 16) k = 4;\n else if(b == 8) k = 3;\n else if(b == 2) k = 1;\n else if(b == 32) k = 5;\n else if(b == 4) k = 2;\n else return this.toRadix(b);\n var km = (1< 0) {\n if(p < this.DB && (d = this[i]>>p) > 0) { m = true; r = int2char(d); }\n while(i >= 0) {\n if(p < k) {\n d = (this[i]&((1<>(p+=this.DB-k);\n }\n else {\n d = (this[i]>>(p-=k))&km;\n if(p <= 0) { p += this.DB; --i; }\n }\n if(d > 0) m = true;\n if(m) r += int2char(d);\n }\n }\n return m?r:"0";\n }\n\n // (public) -this\n function bnNegate() { var r = nbi(); BigInteger.ZERO.subTo(this,r); return r; }\n\n // (public) |this|\n function bnAbs() { return (this.s<0)?this.negate():this; }\n\n // (public) return + if this > a, - if this < a, 0 if equal\n function bnCompareTo(a) {\n var r = this.s-a.s;\n if(r != 0) return r;\n var i = this.t;\n r = i-a.t;\n if(r != 0) return (this.s<0)?-r:r;\n while(--i >= 0) if((r=this[i]-a[i]) != 0) return r;\n return 0;\n }\n\n // returns bit length of the integer x\n function nbits(x) {\n var r = 1, t;\n if((t=x>>>16) != 0) { x = t; r += 16; }\n if((t=x>>8) != 0) { x = t; r += 8; }\n if((t=x>>4) != 0) { x = t; r += 4; }\n if((t=x>>2) != 0) { x = t; r += 2; }\n if((t=x>>1) != 0) { x = t; r += 1; }\n return r;\n }\n\n // (public) return the number of bits in "this"\n function bnBitLength() {\n if(this.t <= 0) return 0;\n return this.DB*(this.t-1)+nbits(this[this.t-1]^(this.s&this.DM));\n }\n\n // (protected) r = this << n*DB\n function bnpDLShiftTo(n,r) {\n var i;\n for(i = this.t-1; i >= 0; --i) r[i+n] = this[i];\n for(i = n-1; i >= 0; --i) r[i] = 0;\n r.t = this.t+n;\n r.s = this.s;\n }\n\n // (protected) r = this >> n*DB\n function bnpDRShiftTo(n,r) {\n for(var i = n; i < this.t; ++i) r[i-n] = this[i];\n r.t = Math.max(this.t-n,0);\n r.s = this.s;\n }\n\n // (protected) r = this << n\n function bnpLShiftTo(n,r) {\n var bs = n%this.DB;\n var cbs = this.DB-bs;\n var bm = (1<= 0; --i) {\n r[i+ds+1] = (this[i]>>cbs)|c;\n c = (this[i]&bm)<= 0; --i) r[i] = 0;\n r[ds] = c;\n r.t = this.t+ds+1;\n r.s = this.s;\n r.clamp();\n }\n\n // (protected) r = this >> n\n function bnpRShiftTo(n,r) {\n r.s = this.s;\n var ds = Math.floor(n/this.DB);\n if(ds >= this.t) { r.t = 0; return; }\n var bs = n%this.DB;\n var cbs = this.DB-bs;\n var bm = (1<>bs;\n for(var i = ds+1; i < this.t; ++i) {\n r[i-ds-1] |= (this[i]&bm)<>bs;\n }\n if(bs > 0) r[this.t-ds-1] |= (this.s&bm)<>= this.DB;\n }\n if(a.t < this.t) {\n c -= a.s;\n while(i < this.t) {\n c += this[i];\n r[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while(i < a.t) {\n c -= a[i];\n r[i++] = c&this.DM;\n c >>= this.DB;\n }\n c -= a.s;\n }\n r.s = (c<0)?-1:0;\n if(c < -1) r[i++] = this.DV+c;\n else if(c > 0) r[i++] = c;\n r.t = i;\n r.clamp();\n }\n\n // (protected) r = this * a, r != this,a (HAC 14.12)\n // "this" should be the larger one if appropriate.\n function bnpMultiplyTo(a,r) {\n var x = this.abs(), y = a.abs();\n var i = x.t;\n r.t = i+y.t;\n while(--i >= 0) r[i] = 0;\n for(i = 0; i < y.t; ++i) r[i+x.t] = x.am(0,y[i],r,i,0,x.t);\n r.s = 0;\n r.clamp();\n if(this.s != a.s) BigInteger.ZERO.subTo(r,r);\n }\n\n // (protected) r = this^2, r != this (HAC 14.16)\n function bnpSquareTo(r) {\n var x = this.abs();\n var i = r.t = 2*x.t;\n while(--i >= 0) r[i] = 0;\n for(i = 0; i < x.t-1; ++i) {\n var c = x.am(i,x[i],r,2*i,0,1);\n if((r[i+x.t]+=x.am(i+1,2*x[i],r,2*i+1,c,x.t-i-1)) >= x.DV) {\n r[i+x.t] -= x.DV;\n r[i+x.t+1] = 1;\n }\n }\n if(r.t > 0) r[r.t-1] += x.am(i,x[i],r,2*i,0,1);\n r.s = 0;\n r.clamp();\n }\n\n // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n // r != q, this != m. q or r may be null.\n function bnpDivRemTo(m,q,r) {\n var pm = m.abs();\n if(pm.t <= 0) return;\n var pt = this.abs();\n if(pt.t < pm.t) {\n if(q != null) q.fromInt(0);\n if(r != null) this.copyTo(r);\n return;\n }\n if(r == null) r = nbi();\n var y = nbi(), ts = this.s, ms = m.s;\n var nsh = this.DB-nbits(pm[pm.t-1]); // normalize modulus\n if(nsh > 0) { pm.lShiftTo(nsh,y); pt.lShiftTo(nsh,r); }\n else { pm.copyTo(y); pt.copyTo(r); }\n var ys = y.t;\n var y0 = y[ys-1];\n if(y0 == 0) return;\n var yt = y0*(1<1)?y[ys-2]>>this.F2:0);\n var d1 = this.FV/yt, d2 = (1<= 0) {\n r[r.t++] = 1;\n r.subTo(t,r);\n }\n BigInteger.ONE.dlShiftTo(ys,t);\n t.subTo(y,y); // "negative" y so we can replace sub with am later\n while(y.t < ys) y[y.t++] = 0;\n while(--j >= 0) {\n // Estimate quotient digit\n var qd = (r[--i]==y0)?this.DM:Math.floor(r[i]*d1+(r[i-1]+e)*d2);\n if((r[i]+=y.am(0,qd,r,j,0,ys)) < qd) { // Try it out\n y.dlShiftTo(j,t);\n r.subTo(t,r);\n while(r[i] < --qd) r.subTo(t,r);\n }\n }\n if(q != null) {\n r.drShiftTo(ys,q);\n if(ts != ms) BigInteger.ZERO.subTo(q,q);\n }\n r.t = ys;\n r.clamp();\n if(nsh > 0) r.rShiftTo(nsh,r); // Denormalize remainder\n if(ts < 0) BigInteger.ZERO.subTo(r,r);\n }\n\n // (public) this mod a\n function bnMod(a) {\n var r = nbi();\n this.abs().divRemTo(a,null,r);\n if(this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r,r);\n return r;\n }\n\n // Modular reduction using "classic" algorithm\n function Classic(m) { this.m = m; }\n function cConvert(x) {\n if(x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m);\n else return x;\n }\n function cRevert(x) { return x; }\n function cReduce(x) { x.divRemTo(this.m,null,x); }\n function cMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n function cSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n Classic.prototype.convert = cConvert;\n Classic.prototype.revert = cRevert;\n Classic.prototype.reduce = cReduce;\n Classic.prototype.mulTo = cMulTo;\n Classic.prototype.sqrTo = cSqrTo;\n\n // (protected) return "-1/this % 2^DB"; useful for Mont. reduction\n // justification:\n // xy == 1 (mod m)\n // xy = 1+km\n // xy(2-xy) = (1+km)(1-km)\n // x[y(2-xy)] = 1-k^2m^2\n // x[y(2-xy)] == 1 (mod m^2)\n // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n // JS multiply "overflows" differently from C/C++, so care is needed here.\n function bnpInvDigit() {\n if(this.t < 1) return 0;\n var x = this[0];\n if((x&1) == 0) return 0;\n var y = x&3; // y == 1/x mod 2^2\n y = (y*(2-(x&0xf)*y))&0xf; // y == 1/x mod 2^4\n y = (y*(2-(x&0xff)*y))&0xff; // y == 1/x mod 2^8\n y = (y*(2-(((x&0xffff)*y)&0xffff)))&0xffff; // y == 1/x mod 2^16\n // last step - calculate inverse mod DV directly;\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n y = (y*(2-x*y%this.DV))%this.DV; // y == 1/x mod 2^dbits\n // we really want the negative inverse, and -DV < y < DV\n return (y>0)?this.DV-y:-y;\n }\n\n // Montgomery reduction\n function Montgomery(m) {\n this.m = m;\n this.mp = m.invDigit();\n this.mpl = this.mp&0x7fff;\n this.mph = this.mp>>15;\n this.um = (1<<(m.DB-15))-1;\n this.mt2 = 2*m.t;\n }\n\n // xR mod m\n function montConvert(x) {\n var r = nbi();\n x.abs().dlShiftTo(this.m.t,r);\n r.divRemTo(this.m,null,r);\n if(x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r,r);\n return r;\n }\n\n // x/R mod m\n function montRevert(x) {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n }\n\n // x = x/R mod m (HAC 14.32)\n function montReduce(x) {\n while(x.t <= this.mt2) // pad x so am has enough room later\n x[x.t++] = 0;\n for(var i = 0; i < this.m.t; ++i) {\n // faster way of calculating u0 = x[i]*mp mod DV\n var j = x[i]&0x7fff;\n var u0 = (j*this.mpl+(((j*this.mph+(x[i]>>15)*this.mpl)&this.um)<<15))&x.DM;\n // use am to combine the multiply-shift-add into one call\n j = i+this.m.t;\n x[j] += this.m.am(0,u0,x,i,0,this.m.t);\n // propagate carry\n while(x[j] >= x.DV) { x[j] -= x.DV; x[++j]++; }\n }\n x.clamp();\n x.drShiftTo(this.m.t,x);\n if(x.compareTo(this.m) >= 0) x.subTo(this.m,x);\n }\n\n // r = "x^2/R mod m"; x != r\n function montSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n // r = "xy/R mod m"; x,y != r\n function montMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n\n Montgomery.prototype.convert = montConvert;\n Montgomery.prototype.revert = montRevert;\n Montgomery.prototype.reduce = montReduce;\n Montgomery.prototype.mulTo = montMulTo;\n Montgomery.prototype.sqrTo = montSqrTo;\n\n // (protected) true iff this is even\n function bnpIsEven() { return ((this.t>0)?(this[0]&1):this.s) == 0; }\n\n // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)\n function bnpExp(e,z) {\n if(e > 0xffffffff || e < 1) return BigInteger.ONE;\n var r = nbi(), r2 = nbi(), g = z.convert(this), i = nbits(e)-1;\n g.copyTo(r);\n while(--i >= 0) {\n z.sqrTo(r,r2);\n if((e&(1< 0) z.mulTo(r2,g,r);\n else { var t = r; r = r2; r2 = t; }\n }\n return z.revert(r);\n }\n\n // (public) this^e % m, 0 <= e < 2^32\n function bnModPowInt(e,m) {\n var z;\n if(e < 256 || m.isEven()) z = new Classic(m); else z = new Montgomery(m);\n return this.exp(e,z);\n }\n\n // protected\n BigInteger.prototype.copyTo = bnpCopyTo;\n BigInteger.prototype.fromInt = bnpFromInt;\n BigInteger.prototype.fromString = bnpFromString;\n BigInteger.prototype.clamp = bnpClamp;\n BigInteger.prototype.dlShiftTo = bnpDLShiftTo;\n BigInteger.prototype.drShiftTo = bnpDRShiftTo;\n BigInteger.prototype.lShiftTo = bnpLShiftTo;\n BigInteger.prototype.rShiftTo = bnpRShiftTo;\n BigInteger.prototype.subTo = bnpSubTo;\n BigInteger.prototype.multiplyTo = bnpMultiplyTo;\n BigInteger.prototype.squareTo = bnpSquareTo;\n BigInteger.prototype.divRemTo = bnpDivRemTo;\n BigInteger.prototype.invDigit = bnpInvDigit;\n BigInteger.prototype.isEven = bnpIsEven;\n BigInteger.prototype.exp = bnpExp;\n\n // public\n BigInteger.prototype.toString = bnToString;\n BigInteger.prototype.negate = bnNegate;\n BigInteger.prototype.abs = bnAbs;\n BigInteger.prototype.compareTo = bnCompareTo;\n BigInteger.prototype.bitLength = bnBitLength;\n BigInteger.prototype.mod = bnMod;\n BigInteger.prototype.modPowInt = bnModPowInt;\n\n // "constants"\n BigInteger.ZERO = nbv(0);\n BigInteger.ONE = nbv(1);\n\n // Copyright (c) 2005-2009 Tom Wu\n // All Rights Reserved.\n // See "LICENSE" for details.\n\n // Extended JavaScript BN functions, required for RSA private ops.\n\n // Version 1.1: new BigInteger("0", 10) returns "proper" zero\n // Version 1.2: square() API, isProbablePrime fix\n\n // (public)\n function bnClone() { var r = nbi(); this.copyTo(r); return r; }\n\n // (public) return value as integer\n function bnIntValue() {\n if(this.s < 0) {\n if(this.t == 1) return this[0]-this.DV;\n else if(this.t == 0) return -1;\n }\n else if(this.t == 1) return this[0];\n else if(this.t == 0) return 0;\n // assumes 16 < DB < 32\n return ((this[1]&((1<<(32-this.DB))-1))<>24; }\n\n // (public) return value as short (assumes DB>=16)\n function bnShortValue() { return (this.t==0)?this.s:(this[0]<<16)>>16; }\n\n // (protected) return x s.t. r^x < DV\n function bnpChunkSize(r) { return Math.floor(Math.LN2*this.DB/Math.log(r)); }\n\n // (public) 0 if this == 0, 1 if this > 0\n function bnSigNum() {\n if(this.s < 0) return -1;\n else if(this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0;\n else return 1;\n }\n\n // (protected) convert to radix string\n function bnpToRadix(b) {\n if(b == null) b = 10;\n if(this.signum() == 0 || b < 2 || b > 36) return "0";\n var cs = this.chunkSize(b);\n var a = Math.pow(b,cs);\n var d = nbv(a), y = nbi(), z = nbi(), r = "";\n this.divRemTo(d,y,z);\n while(y.signum() > 0) {\n r = (a+z.intValue()).toString(b).substr(1) + r;\n y.divRemTo(d,y,z);\n }\n return z.intValue().toString(b) + r;\n }\n\n // (protected) convert from radix string\n function bnpFromRadix(s,b) {\n this.fromInt(0);\n if(b == null) b = 10;\n var cs = this.chunkSize(b);\n var d = Math.pow(b,cs), mi = false, j = 0, w = 0;\n for(var i = 0; i < s.length; ++i) {\n var x = intAt(s,i);\n if(x < 0) {\n if(s.charAt(i) == "-" && this.signum() == 0) mi = true;\n continue;\n }\n w = b*w+x;\n if(++j >= cs) {\n this.dMultiply(d);\n this.dAddOffset(w,0);\n j = 0;\n w = 0;\n }\n }\n if(j > 0) {\n this.dMultiply(Math.pow(b,j));\n this.dAddOffset(w,0);\n }\n if(mi) BigInteger.ZERO.subTo(this,this);\n }\n\n // (protected) alternate constructor\n function bnpFromNumber(a,b,c) {\n if("number" == typeof b) {\n // new BigInteger(int,int,RNG)\n if(a < 2) this.fromInt(1);\n else {\n this.fromNumber(a,c);\n if(!this.testBit(a-1))\t// force MSB set\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a-1),op_or,this);\n if(this.isEven()) this.dAddOffset(1,0); // force odd\n while(!this.isProbablePrime(b)) {\n this.dAddOffset(2,0);\n if(this.bitLength() > a) this.subTo(BigInteger.ONE.shiftLeft(a-1),this);\n }\n }\n }\n else {\n // new BigInteger(int,RNG)\n var x = new Array(), t = a&7;\n x.length = (a>>3)+1;\n b.nextBytes(x);\n if(t > 0) x[0] &= ((1< 0) {\n if(p < this.DB && (d = this[i]>>p) != (this.s&this.DM)>>p)\n r[k++] = d|(this.s<<(this.DB-p));\n while(i >= 0) {\n if(p < 8) {\n d = (this[i]&((1<>(p+=this.DB-8);\n }\n else {\n d = (this[i]>>(p-=8))&0xff;\n if(p <= 0) { p += this.DB; --i; }\n }\n if((d&0x80) != 0) d |= -256;\n if(k == 0 && (this.s&0x80) != (d&0x80)) ++k;\n if(k > 0 || d != this.s) r[k++] = d;\n }\n }\n return r;\n }\n\n function bnEquals(a) { return(this.compareTo(a)==0); }\n function bnMin(a) { return(this.compareTo(a)<0)?this:a; }\n function bnMax(a) { return(this.compareTo(a)>0)?this:a; }\n\n // (protected) r = this op a (bitwise)\n function bnpBitwiseTo(a,op,r) {\n var i, f, m = Math.min(a.t,this.t);\n for(i = 0; i < m; ++i) r[i] = op(this[i],a[i]);\n if(a.t < this.t) {\n f = a.s&this.DM;\n for(i = m; i < this.t; ++i) r[i] = op(this[i],f);\n r.t = this.t;\n }\n else {\n f = this.s&this.DM;\n for(i = m; i < a.t; ++i) r[i] = op(f,a[i]);\n r.t = a.t;\n }\n r.s = op(this.s,a.s);\n r.clamp();\n }\n\n // (public) this & a\n function op_and(x,y) { return x&y; }\n function bnAnd(a) { var r = nbi(); this.bitwiseTo(a,op_and,r); return r; }\n\n // (public) this | a\n function op_or(x,y) { return x|y; }\n function bnOr(a) { var r = nbi(); this.bitwiseTo(a,op_or,r); return r; }\n\n // (public) this ^ a\n function op_xor(x,y) { return x^y; }\n function bnXor(a) { var r = nbi(); this.bitwiseTo(a,op_xor,r); return r; }\n\n // (public) this & ~a\n function op_andnot(x,y) { return x&~y; }\n function bnAndNot(a) { var r = nbi(); this.bitwiseTo(a,op_andnot,r); return r; }\n\n // (public) ~this\n function bnNot() {\n var r = nbi();\n for(var i = 0; i < this.t; ++i) r[i] = this.DM&~this[i];\n r.t = this.t;\n r.s = ~this.s;\n return r;\n }\n\n // (public) this << n\n function bnShiftLeft(n) {\n var r = nbi();\n if(n < 0) this.rShiftTo(-n,r); else this.lShiftTo(n,r);\n return r;\n }\n\n // (public) this >> n\n function bnShiftRight(n) {\n var r = nbi();\n if(n < 0) this.lShiftTo(-n,r); else this.rShiftTo(n,r);\n return r;\n }\n\n // return index of lowest 1-bit in x, x < 2^31\n function lbit(x) {\n if(x == 0) return -1;\n var r = 0;\n if((x&0xffff) == 0) { x >>= 16; r += 16; }\n if((x&0xff) == 0) { x >>= 8; r += 8; }\n if((x&0xf) == 0) { x >>= 4; r += 4; }\n if((x&3) == 0) { x >>= 2; r += 2; }\n if((x&1) == 0) ++r;\n return r;\n }\n\n // (public) returns index of lowest 1-bit (or -1 if none)\n function bnGetLowestSetBit() {\n for(var i = 0; i < this.t; ++i)\n if(this[i] != 0) return i*this.DB+lbit(this[i]);\n if(this.s < 0) return this.t*this.DB;\n return -1;\n }\n\n // return number of 1 bits in x\n function cbit(x) {\n var r = 0;\n while(x != 0) { x &= x-1; ++r; }\n return r;\n }\n\n // (public) return number of set bits\n function bnBitCount() {\n var r = 0, x = this.s&this.DM;\n for(var i = 0; i < this.t; ++i) r += cbit(this[i]^x);\n return r;\n }\n\n // (public) true iff nth bit is set\n function bnTestBit(n) {\n var j = Math.floor(n/this.DB);\n if(j >= this.t) return(this.s!=0);\n return((this[j]&(1<<(n%this.DB)))!=0);\n }\n\n // (protected) this op (1<>= this.DB;\n }\n if(a.t < this.t) {\n c += a.s;\n while(i < this.t) {\n c += this[i];\n r[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while(i < a.t) {\n c += a[i];\n r[i++] = c&this.DM;\n c >>= this.DB;\n }\n c += a.s;\n }\n r.s = (c<0)?-1:0;\n if(c > 0) r[i++] = c;\n else if(c < -1) r[i++] = this.DV+c;\n r.t = i;\n r.clamp();\n }\n\n // (public) this + a\n function bnAdd(a) { var r = nbi(); this.addTo(a,r); return r; }\n\n // (public) this - a\n function bnSubtract(a) { var r = nbi(); this.subTo(a,r); return r; }\n\n // (public) this * a\n function bnMultiply(a) { var r = nbi(); this.multiplyTo(a,r); return r; }\n\n // (public) this^2\n function bnSquare() { var r = nbi(); this.squareTo(r); return r; }\n\n // (public) this / a\n function bnDivide(a) { var r = nbi(); this.divRemTo(a,r,null); return r; }\n\n // (public) this % a\n function bnRemainder(a) { var r = nbi(); this.divRemTo(a,null,r); return r; }\n\n // (public) [this/a,this%a]\n function bnDivideAndRemainder(a) {\n var q = nbi(), r = nbi();\n this.divRemTo(a,q,r);\n return new Array(q,r);\n }\n\n // (protected) this *= n, this >= 0, 1 < n < DV\n function bnpDMultiply(n) {\n this[this.t] = this.am(0,n-1,this,0,0,this.t);\n ++this.t;\n this.clamp();\n }\n\n // (protected) this += n << w words, this >= 0\n function bnpDAddOffset(n,w) {\n if(n == 0) return;\n while(this.t <= w) this[this.t++] = 0;\n this[w] += n;\n while(this[w] >= this.DV) {\n this[w] -= this.DV;\n if(++w >= this.t) this[this.t++] = 0;\n ++this[w];\n }\n }\n\n // A "null" reducer\n function NullExp() {}\n function nNop(x) { return x; }\n function nMulTo(x,y,r) { x.multiplyTo(y,r); }\n function nSqrTo(x,r) { x.squareTo(r); }\n\n NullExp.prototype.convert = nNop;\n NullExp.prototype.revert = nNop;\n NullExp.prototype.mulTo = nMulTo;\n NullExp.prototype.sqrTo = nSqrTo;\n\n // (public) this^e\n function bnPow(e) { return this.exp(e,new NullExp()); }\n\n // (protected) r = lower n words of "this * a", a.t <= n\n // "this" should be the larger one if appropriate.\n function bnpMultiplyLowerTo(a,n,r) {\n var i = Math.min(this.t+a.t,n);\n r.s = 0; // assumes a,this >= 0\n r.t = i;\n while(i > 0) r[--i] = 0;\n var j;\n for(j = r.t-this.t; i < j; ++i) r[i+this.t] = this.am(0,a[i],r,i,0,this.t);\n for(j = Math.min(a.t,n); i < j; ++i) this.am(0,a[i],r,i,0,n-i);\n r.clamp();\n }\n\n // (protected) r = "this * a" without lower n words, n > 0\n // "this" should be the larger one if appropriate.\n function bnpMultiplyUpperTo(a,n,r) {\n --n;\n var i = r.t = this.t+a.t-n;\n r.s = 0; // assumes a,this >= 0\n while(--i >= 0) r[i] = 0;\n for(i = Math.max(n-this.t,0); i < a.t; ++i)\n r[this.t+i-n] = this.am(n-i,a[i],r,0,0,this.t+i-n);\n r.clamp();\n r.drShiftTo(1,r);\n }\n\n // Barrett modular reduction\n function Barrett(m) {\n // setup Barrett\n this.r2 = nbi();\n this.q3 = nbi();\n BigInteger.ONE.dlShiftTo(2*m.t,this.r2);\n this.mu = this.r2.divide(m);\n this.m = m;\n }\n\n function barrettConvert(x) {\n if(x.s < 0 || x.t > 2*this.m.t) return x.mod(this.m);\n else if(x.compareTo(this.m) < 0) return x;\n else { var r = nbi(); x.copyTo(r); this.reduce(r); return r; }\n }\n\n function barrettRevert(x) { return x; }\n\n // x = x mod m (HAC 14.42)\n function barrettReduce(x) {\n x.drShiftTo(this.m.t-1,this.r2);\n if(x.t > this.m.t+1) { x.t = this.m.t+1; x.clamp(); }\n this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3);\n this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);\n while(x.compareTo(this.r2) < 0) x.dAddOffset(1,this.m.t+1);\n x.subTo(this.r2,x);\n while(x.compareTo(this.m) >= 0) x.subTo(this.m,x);\n }\n\n // r = x^2 mod m; x != r\n function barrettSqrTo(x,r) { x.squareTo(r); this.reduce(r); }\n\n // r = x*y mod m; x,y != r\n function barrettMulTo(x,y,r) { x.multiplyTo(y,r); this.reduce(r); }\n\n Barrett.prototype.convert = barrettConvert;\n Barrett.prototype.revert = barrettRevert;\n Barrett.prototype.reduce = barrettReduce;\n Barrett.prototype.mulTo = barrettMulTo;\n Barrett.prototype.sqrTo = barrettSqrTo;\n\n // (public) this^e % m (HAC 14.85)\n function bnModPow(e,m) {\n var i = e.bitLength(), k, r = nbv(1), z;\n if(i <= 0) return r;\n else if(i < 18) k = 1;\n else if(i < 48) k = 3;\n else if(i < 144) k = 4;\n else if(i < 768) k = 5;\n else k = 6;\n if(i < 8)\n z = new Classic(m);\n else if(m.isEven())\n z = new Barrett(m);\n else\n z = new Montgomery(m);\n\n // precomputation\n var g = new Array(), n = 3, k1 = k-1, km = (1< 1) {\n var g2 = nbi();\n z.sqrTo(g[1],g2);\n while(n <= km) {\n g[n] = nbi();\n z.mulTo(g2,g[n-2],g[n]);\n n += 2;\n }\n }\n\n var j = e.t-1, w, is1 = true, r2 = nbi(), t;\n i = nbits(e[j])-1;\n while(j >= 0) {\n if(i >= k1) w = (e[j]>>(i-k1))&km;\n else {\n w = (e[j]&((1<<(i+1))-1))<<(k1-i);\n if(j > 0) w |= e[j-1]>>(this.DB+i-k1);\n }\n\n n = k;\n while((w&1) == 0) { w >>= 1; --n; }\n if((i -= n) < 0) { i += this.DB; --j; }\n if(is1) {\t// ret == 1, don\'t bother squaring or multiplying it\n g[w].copyTo(r);\n is1 = false;\n }\n else {\n while(n > 1) { z.sqrTo(r,r2); z.sqrTo(r2,r); n -= 2; }\n if(n > 0) z.sqrTo(r,r2); else { t = r; r = r2; r2 = t; }\n z.mulTo(r2,g[w],r);\n }\n\n while(j >= 0 && (e[j]&(1< 0) {\n x.rShiftTo(g,x);\n y.rShiftTo(g,y);\n }\n while(x.signum() > 0) {\n if((i = x.getLowestSetBit()) > 0) x.rShiftTo(i,x);\n if((i = y.getLowestSetBit()) > 0) y.rShiftTo(i,y);\n if(x.compareTo(y) >= 0) {\n x.subTo(y,x);\n x.rShiftTo(1,x);\n }\n else {\n y.subTo(x,y);\n y.rShiftTo(1,y);\n }\n }\n if(g > 0) y.lShiftTo(g,y);\n return y;\n }\n\n // (protected) this % n, n < 2^26\n function bnpModInt(n) {\n if(n <= 0) return 0;\n var d = this.DV%n, r = (this.s<0)?n-1:0;\n if(this.t > 0)\n if(d == 0) r = this[0]%n;\n else for(var i = this.t-1; i >= 0; --i) r = (d*r+this[i])%n;\n return r;\n }\n\n // (public) 1/this % m (HAC 14.61)\n function bnModInverse(m) {\n var ac = m.isEven();\n if((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO;\n var u = m.clone(), v = this.clone();\n var a = nbv(1), b = nbv(0), c = nbv(0), d = nbv(1);\n while(u.signum() != 0) {\n while(u.isEven()) {\n u.rShiftTo(1,u);\n if(ac) {\n if(!a.isEven() || !b.isEven()) { a.addTo(this,a); b.subTo(m,b); }\n a.rShiftTo(1,a);\n }\n else if(!b.isEven()) b.subTo(m,b);\n b.rShiftTo(1,b);\n }\n while(v.isEven()) {\n v.rShiftTo(1,v);\n if(ac) {\n if(!c.isEven() || !d.isEven()) { c.addTo(this,c); d.subTo(m,d); }\n c.rShiftTo(1,c);\n }\n else if(!d.isEven()) d.subTo(m,d);\n d.rShiftTo(1,d);\n }\n if(u.compareTo(v) >= 0) {\n u.subTo(v,u);\n if(ac) a.subTo(c,a);\n b.subTo(d,b);\n }\n else {\n v.subTo(u,v);\n if(ac) c.subTo(a,c);\n d.subTo(b,d);\n }\n }\n if(v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO;\n if(d.compareTo(m) >= 0) return d.subtract(m);\n if(d.signum() < 0) d.addTo(m,d); else return d;\n if(d.signum() < 0) return d.add(m); else return d;\n }\n\n var lowprimes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997];\n var lplim = (1<<26)/lowprimes[lowprimes.length-1];\n\n // (public) test primality with certainty >= 1-.5^t\n function bnIsProbablePrime(t) {\n var i, x = this.abs();\n if(x.t == 1 && x[0] <= lowprimes[lowprimes.length-1]) {\n for(i = 0; i < lowprimes.length; ++i)\n if(x[0] == lowprimes[i]) return true;\n return false;\n }\n if(x.isEven()) return false;\n i = 1;\n while(i < lowprimes.length) {\n var m = lowprimes[i], j = i+1;\n while(j < lowprimes.length && m < lplim) m *= lowprimes[j++];\n m = x.modInt(m);\n while(i < j) if(m%lowprimes[i++] == 0) return false;\n }\n return x.millerRabin(t);\n }\n\n // (protected) true if probably prime (HAC 4.24, Miller-Rabin)\n function bnpMillerRabin(t) {\n var n1 = this.subtract(BigInteger.ONE);\n var k = n1.getLowestSetBit();\n if(k <= 0) return false;\n var r = n1.shiftRight(k);\n t = (t+1)>>1;\n if(t > lowprimes.length) t = lowprimes.length;\n var a = nbi();\n for(var i = 0; i < t; ++i) {\n //Pick bases at random, instead of starting at 2\n a.fromInt(lowprimes[Math.floor(Math.random()*lowprimes.length)]);\n var y = a.modPow(r,this);\n if(y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {\n var j = 1;\n while(j++ < k && y.compareTo(n1) != 0) {\n y = y.modPowInt(2,this);\n if(y.compareTo(BigInteger.ONE) == 0) return false;\n }\n if(y.compareTo(n1) != 0) return false;\n }\n }\n return true;\n }\n\n // protected\n BigInteger.prototype.chunkSize = bnpChunkSize;\n BigInteger.prototype.toRadix = bnpToRadix;\n BigInteger.prototype.fromRadix = bnpFromRadix;\n BigInteger.prototype.fromNumber = bnpFromNumber;\n BigInteger.prototype.bitwiseTo = bnpBitwiseTo;\n BigInteger.prototype.changeBit = bnpChangeBit;\n BigInteger.prototype.addTo = bnpAddTo;\n BigInteger.prototype.dMultiply = bnpDMultiply;\n BigInteger.prototype.dAddOffset = bnpDAddOffset;\n BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\n BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\n BigInteger.prototype.modInt = bnpModInt;\n BigInteger.prototype.millerRabin = bnpMillerRabin;\n\n // public\n BigInteger.prototype.clone = bnClone;\n BigInteger.prototype.intValue = bnIntValue;\n BigInteger.prototype.byteValue = bnByteValue;\n BigInteger.prototype.shortValue = bnShortValue;\n BigInteger.prototype.signum = bnSigNum;\n BigInteger.prototype.toByteArray = bnToByteArray;\n BigInteger.prototype.equals = bnEquals;\n BigInteger.prototype.min = bnMin;\n BigInteger.prototype.max = bnMax;\n BigInteger.prototype.and = bnAnd;\n BigInteger.prototype.or = bnOr;\n BigInteger.prototype.xor = bnXor;\n BigInteger.prototype.andNot = bnAndNot;\n BigInteger.prototype.not = bnNot;\n BigInteger.prototype.shiftLeft = bnShiftLeft;\n BigInteger.prototype.shiftRight = bnShiftRight;\n BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\n BigInteger.prototype.bitCount = bnBitCount;\n BigInteger.prototype.testBit = bnTestBit;\n BigInteger.prototype.setBit = bnSetBit;\n BigInteger.prototype.clearBit = bnClearBit;\n BigInteger.prototype.flipBit = bnFlipBit;\n BigInteger.prototype.add = bnAdd;\n BigInteger.prototype.subtract = bnSubtract;\n BigInteger.prototype.multiply = bnMultiply;\n BigInteger.prototype.divide = bnDivide;\n BigInteger.prototype.remainder = bnRemainder;\n BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;\n BigInteger.prototype.modPow = bnModPow;\n BigInteger.prototype.modInverse = bnModInverse;\n BigInteger.prototype.pow = bnPow;\n BigInteger.prototype.gcd = bnGCD;\n BigInteger.prototype.isProbablePrime = bnIsProbablePrime;\n\n // JSBN-specific extension\n BigInteger.prototype.square = bnSquare;\n\n // Expose the Barrett function\n BigInteger.prototype.Barrett = Barrett\n\n // BigInteger interfaces not implemented in jsbn:\n\n // BigInteger(int signum, byte[] magnitude)\n // double doubleValue()\n // float floatValue()\n // int hashCode()\n // long longValue()\n // static BigInteger valueOf(long val)\n\n\t// Random number generator - requires a PRNG backend, e.g. prng4.js\n\n\t// For best results, put code like\n\t// \n\t// in your main HTML document.\n\n\tvar rng_state;\n\tvar rng_pool;\n\tvar rng_pptr;\n\n\t// Mix in a 32-bit integer into the pool\n\tfunction rng_seed_int(x) {\n\t rng_pool[rng_pptr++] ^= x & 255;\n\t rng_pool[rng_pptr++] ^= (x >> 8) & 255;\n\t rng_pool[rng_pptr++] ^= (x >> 16) & 255;\n\t rng_pool[rng_pptr++] ^= (x >> 24) & 255;\n\t if(rng_pptr >= rng_psize) rng_pptr -= rng_psize;\n\t}\n\n\t// Mix in the current time (w/milliseconds) into the pool\n\tfunction rng_seed_time() {\n\t rng_seed_int(new Date().getTime());\n\t}\n\n\t// Initialize the pool with junk if needed.\n\tif(rng_pool == null) {\n\t rng_pool = new Array();\n\t rng_pptr = 0;\n\t var t;\n\t if(typeof window !== "undefined" && window.crypto) {\n\t\tif (window.crypto.getRandomValues) {\n\t\t // Use webcrypto if available\n\t\t var ua = new Uint8Array(32);\n\t\t window.crypto.getRandomValues(ua);\n\t\t for(t = 0; t < 32; ++t)\n\t\t\trng_pool[rng_pptr++] = ua[t];\n\t\t}\n\t\telse if(navigator.appName == "Netscape" && navigator.appVersion < "5") {\n\t\t // Extract entropy (256 bits) from NS4 RNG if available\n\t\t var z = window.crypto.random(32);\n\t\t for(t = 0; t < z.length; ++t)\n\t\t\trng_pool[rng_pptr++] = z.charCodeAt(t) & 255;\n\t\t}\n\t }\n\t while(rng_pptr < rng_psize) { // extract some randomness from Math.random()\n\t\tt = Math.floor(65536 * Math.random());\n\t\trng_pool[rng_pptr++] = t >>> 8;\n\t\trng_pool[rng_pptr++] = t & 255;\n\t }\n\t rng_pptr = 0;\n\t rng_seed_time();\n\t //rng_seed_int(window.screenX);\n\t //rng_seed_int(window.screenY);\n\t}\n\n\tfunction rng_get_byte() {\n\t if(rng_state == null) {\n\t\trng_seed_time();\n\t\trng_state = prng_newstate();\n\t\trng_state.init(rng_pool);\n\t\tfor(rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr)\n\t\t rng_pool[rng_pptr] = 0;\n\t\trng_pptr = 0;\n\t\t//rng_pool = null;\n\t }\n\t // TODO: allow reseeding after first request\n\t return rng_state.next();\n\t}\n\n\tfunction rng_get_bytes(ba) {\n\t var i;\n\t for(i = 0; i < ba.length; ++i) ba[i] = rng_get_byte();\n\t}\n\n\tfunction SecureRandom() {}\n\n\tSecureRandom.prototype.nextBytes = rng_get_bytes;\n\n\t// prng4.js - uses Arcfour as a PRNG\n\n\tfunction Arcfour() {\n\t this.i = 0;\n\t this.j = 0;\n\t this.S = new Array();\n\t}\n\n\t// Initialize arcfour context from key, an array of ints, each from [0..255]\n\tfunction ARC4init(key) {\n\t var i, j, t;\n\t for(i = 0; i < 256; ++i)\n\t\tthis.S[i] = i;\n\t j = 0;\n\t for(i = 0; i < 256; ++i) {\n\t\tj = (j + this.S[i] + key[i % key.length]) & 255;\n\t\tt = this.S[i];\n\t\tthis.S[i] = this.S[j];\n\t\tthis.S[j] = t;\n\t }\n\t this.i = 0;\n\t this.j = 0;\n\t}\n\n\tfunction ARC4next() {\n\t var t;\n\t this.i = (this.i + 1) & 255;\n\t this.j = (this.j + this.S[this.i]) & 255;\n\t t = this.S[this.i];\n\t this.S[this.i] = this.S[this.j];\n\t this.S[this.j] = t;\n\t return this.S[(t + this.S[this.i]) & 255];\n\t}\n\n\tArcfour.prototype.init = ARC4init;\n\tArcfour.prototype.next = ARC4next;\n\n\t// Plug in your RNG constructor here\n\tfunction prng_newstate() {\n\t return new Arcfour();\n\t}\n\n\t// Pool size must be a multiple of 4 and greater than 32.\n\t// An array of bytes the size of the pool will be passed to init()\n\tvar rng_psize = 256;\n\n BigInteger.SecureRandom = SecureRandom;\n BigInteger.BigInteger = BigInteger;\n if (true) {\n exports = module.exports = BigInteger;\n } else {}\n\n}).call(this);\n\n\n/***/ }),\n/* 26 */\n/*!***********************************************!*\\\n !*** ./node_modules/sshpk/lib/formats/pem.js ***!\n \\***********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\twrite: write\n};\n\nvar assert = __webpack_require__(/*! assert-plus */ 1);\nvar asn1 = __webpack_require__(/*! asn1 */ 21);\nvar crypto = __webpack_require__(/*! crypto */ 2);\nvar Buffer = __webpack_require__(/*! safer-buffer */ 3).Buffer;\nvar algs = __webpack_require__(/*! ../algs */ 8);\nvar utils = __webpack_require__(/*! ../utils */ 6);\nvar Key = __webpack_require__(/*! ../key */ 7);\nvar PrivateKey = __webpack_require__(/*! ../private-key */ 9);\n\nvar pkcs1 = __webpack_require__(/*! ./pkcs1 */ 70);\nvar pkcs8 = __webpack_require__(/*! ./pkcs8 */ 43);\nvar sshpriv = __webpack_require__(/*! ./ssh-private */ 54);\nvar rfc4253 = __webpack_require__(/*! ./rfc4253 */ 31);\n\nvar errors = __webpack_require__(/*! ../errors */ 18);\n\n/*\n * For reading we support both PKCS#1 and PKCS#8. If we find a private key,\n * we just take the public component of it and use that.\n */\nfunction read(buf, options, forceType) {\n\tvar input = buf;\n\tif (typeof (buf) !== \'string\') {\n\t\tassert.buffer(buf, \'buf\');\n\t\tbuf = buf.toString(\'ascii\');\n\t}\n\n\tvar lines = buf.trim().split(\'\\n\');\n\n\tvar m = lines[0].match(/*JSSTYLED*/\n\t /[-]+[ ]*BEGIN ([A-Z0-9][A-Za-z0-9]+ )?(PUBLIC|PRIVATE) KEY[ ]*[-]+/);\n\tassert.ok(m, \'invalid PEM header\');\n\n\tvar m2 = lines[lines.length - 1].match(/*JSSTYLED*/\n\t /[-]+[ ]*END ([A-Z0-9][A-Za-z0-9]+ )?(PUBLIC|PRIVATE) KEY[ ]*[-]+/);\n\tassert.ok(m2, \'invalid PEM footer\');\n\n\t/* Begin and end banners must match key type */\n\tassert.equal(m[2], m2[2]);\n\tvar type = m[2].toLowerCase();\n\n\tvar alg;\n\tif (m[1]) {\n\t\t/* They also must match algorithms, if given */\n\t\tassert.equal(m[1], m2[1], \'PEM header and footer mismatch\');\n\t\talg = m[1].trim();\n\t}\n\n\tvar headers = {};\n\twhile (true) {\n\t\tlines = lines.slice(1);\n\t\tm = lines[0].match(/*JSSTYLED*/\n\t\t /^([A-Za-z0-9-]+): (.+)$/);\n\t\tif (!m)\n\t\t\tbreak;\n\t\theaders[m[1].toLowerCase()] = m[2];\n\t}\n\n\tvar cipher, key, iv;\n\tif (headers[\'proc-type\']) {\n\t\tvar parts = headers[\'proc-type\'].split(\',\');\n\t\tif (parts[0] === \'4\' && parts[1] === \'ENCRYPTED\') {\n\t\t\tif (typeof (options.passphrase) === \'string\') {\n\t\t\t\toptions.passphrase = Buffer.from(\n\t\t\t\t options.passphrase, \'utf-8\');\n\t\t\t}\n\t\t\tif (!Buffer.isBuffer(options.passphrase)) {\n\t\t\t\tthrow (new errors.KeyEncryptedError(\n\t\t\t\t options.filename, \'PEM\'));\n\t\t\t} else {\n\t\t\t\tparts = headers[\'dek-info\'].split(\',\');\n\t\t\t\tassert.ok(parts.length === 2);\n\t\t\t\tcipher = parts[0].toLowerCase();\n\t\t\t\tiv = Buffer.from(parts[1], \'hex\');\n\t\t\t\tkey = utils.opensslKeyDeriv(cipher, iv,\n\t\t\t\t options.passphrase, 1).key;\n\t\t\t}\n\t\t}\n\t}\n\n\t/* Chop off the first and last lines */\n\tlines = lines.slice(0, -1).join(\'\');\n\tbuf = Buffer.from(lines, \'base64\');\n\n\tif (cipher && key && iv) {\n\t\tvar cipherStream = crypto.createDecipheriv(cipher, key, iv);\n\t\tvar chunk, chunks = [];\n\t\tcipherStream.once(\'error\', function (e) {\n\t\t\tif (e.toString().indexOf(\'bad decrypt\') !== -1) {\n\t\t\t\tthrow (new Error(\'Incorrect passphrase \' +\n\t\t\t\t \'supplied, could not decrypt key\'));\n\t\t\t}\n\t\t\tthrow (e);\n\t\t});\n\t\tcipherStream.write(buf);\n\t\tcipherStream.end();\n\t\twhile ((chunk = cipherStream.read()) !== null)\n\t\t\tchunks.push(chunk);\n\t\tbuf = Buffer.concat(chunks);\n\t}\n\n\t/* The new OpenSSH internal format abuses PEM headers */\n\tif (alg && alg.toLowerCase() === \'openssh\')\n\t\treturn (sshpriv.readSSHPrivate(type, buf, options));\n\tif (alg && alg.toLowerCase() === \'ssh2\')\n\t\treturn (rfc4253.readType(type, buf, options));\n\n\tvar der = new asn1.BerReader(buf);\n\tder.originalInput = input;\n\n\t/*\n\t * All of the PEM file types start with a sequence tag, so chop it\n\t * off here\n\t */\n\tder.readSequence();\n\n\t/* PKCS#1 type keys name an algorithm in the banner explicitly */\n\tif (alg) {\n\t\tif (forceType)\n\t\t\tassert.strictEqual(forceType, \'pkcs1\');\n\t\treturn (pkcs1.readPkcs1(alg, type, der));\n\t} else {\n\t\tif (forceType)\n\t\t\tassert.strictEqual(forceType, \'pkcs8\');\n\t\treturn (pkcs8.readPkcs8(alg, type, der));\n\t}\n}\n\nfunction write(key, options, type) {\n\tassert.object(key);\n\n\tvar alg = {\n\t \'ecdsa\': \'EC\',\n\t \'rsa\': \'RSA\',\n\t \'dsa\': \'DSA\',\n\t \'ed25519\': \'EdDSA\'\n\t}[key.type];\n\tvar header;\n\n\tvar der = new asn1.BerWriter();\n\n\tif (PrivateKey.isPrivateKey(key)) {\n\t\tif (type && type === \'pkcs8\') {\n\t\t\theader = \'PRIVATE KEY\';\n\t\t\tpkcs8.writePkcs8(der, key);\n\t\t} else {\n\t\t\tif (type)\n\t\t\t\tassert.strictEqual(type, \'pkcs1\');\n\t\t\theader = alg + \' PRIVATE KEY\';\n\t\t\tpkcs1.writePkcs1(der, key);\n\t\t}\n\n\t} else if (Key.isKey(key)) {\n\t\tif (type && type === \'pkcs1\') {\n\t\t\theader = alg + \' PUBLIC KEY\';\n\t\t\tpkcs1.writePkcs1(der, key);\n\t\t} else {\n\t\t\tif (type)\n\t\t\t\tassert.strictEqual(type, \'pkcs8\');\n\t\t\theader = \'PUBLIC KEY\';\n\t\t\tpkcs8.writePkcs8(der, key);\n\t\t}\n\n\t} else {\n\t\tthrow (new Error(\'key is not a Key or PrivateKey\'));\n\t}\n\n\tvar tmp = der.buffer.toString(\'base64\');\n\tvar len = tmp.length + (tmp.length / 64) +\n\t 18 + 16 + header.length*2 + 10;\n\tvar buf = Buffer.alloc(len);\n\tvar o = 0;\n\to += buf.write(\'-----BEGIN \' + header + \'-----\\n\', o);\n\tfor (var i = 0; i < tmp.length; ) {\n\t\tvar limit = i + 64;\n\t\tif (limit > tmp.length)\n\t\t\tlimit = tmp.length;\n\t\to += buf.write(tmp.slice(i, limit), o);\n\t\tbuf[o++] = 10;\n\t\ti = limit;\n\t}\n\to += buf.write(\'-----END \' + header + \'-----\\n\', o);\n\n\treturn (buf.slice(0, o));\n}\n\n\n/***/ }),\n/* 27 */\n/*!*************************************************!*\\\n !*** ../node_modules/webpack/buildin/module.js ***!\n \\*************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, "loaded", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, "id", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n\n\n/***/ }),\n/* 28 */\n/*!********************************************!*\\\n !*** ../node_modules/pug-runtime/index.js ***!\n \\********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\nvar pug_has_own_property = Object.prototype.hasOwnProperty;\n\n/**\n * Merge two attribute objects giving precedence\n * to values in object `b`. Classes are special-cased\n * allowing for arrays and merging/joining appropriately\n * resulting in a string.\n *\n * @param {Object} a\n * @param {Object} b\n * @return {Object} a\n * @api private\n */\n\nexports.merge = pug_merge;\nfunction pug_merge(a, b) {\n if (arguments.length === 1) {\n var attrs = a[0];\n for (var i = 1; i < a.length; i++) {\n attrs = pug_merge(attrs, a[i]);\n }\n return attrs;\n }\n\n for (var key in b) {\n if (key === \'class\') {\n var valA = a[key] || [];\n a[key] = (Array.isArray(valA) ? valA : [valA]).concat(b[key] || []);\n } else if (key === \'style\') {\n var valA = pug_style(a[key]);\n valA = valA && valA[valA.length - 1] !== \';\' ? valA + \';\' : valA;\n var valB = pug_style(b[key]);\n valB = valB && valB[valB.length - 1] !== \';\' ? valB + \';\' : valB;\n a[key] = valA + valB;\n } else {\n a[key] = b[key];\n }\n }\n\n return a;\n};\n\n/**\n * Process array, object, or string as a string of classes delimited by a space.\n *\n * If `val` is an array, all members of it and its subarrays are counted as\n * classes. If `escaping` is an array, then whether or not the item in `val` is\n * escaped depends on the corresponding item in `escaping`. If `escaping` is\n * not an array, no escaping is done.\n *\n * If `val` is an object, all the keys whose value is truthy are counted as\n * classes. No escaping is done.\n *\n * If `val` is a string, it is counted as a class. No escaping is done.\n *\n * @param {(Array.|Object.|string)} val\n * @param {?Array.} escaping\n * @return {String}\n */\nexports.classes = pug_classes;\nfunction pug_classes_array(val, escaping) {\n var classString = \'\', className, padding = \'\', escapeEnabled = Array.isArray(escaping);\n for (var i = 0; i < val.length; i++) {\n className = pug_classes(val[i]);\n if (!className) continue;\n escapeEnabled && escaping[i] && (className = pug_escape(className));\n classString = classString + padding + className;\n padding = \' \';\n }\n return classString;\n}\nfunction pug_classes_object(val) {\n var classString = \'\', padding = \'\';\n for (var key in val) {\n if (key && val[key] && pug_has_own_property.call(val, key)) {\n classString = classString + padding + key;\n padding = \' \';\n }\n }\n return classString;\n}\nfunction pug_classes(val, escaping) {\n if (Array.isArray(val)) {\n return pug_classes_array(val, escaping);\n } else if (val && typeof val === \'object\') {\n return pug_classes_object(val);\n } else {\n return val || \'\';\n }\n}\n\n/**\n * Convert object or string to a string of CSS styles delimited by a semicolon.\n *\n * @param {(Object.|string)} val\n * @return {String}\n */\n\nexports.style = pug_style;\nfunction pug_style(val) {\n if (!val) return \'\';\n if (typeof val === \'object\') {\n var out = \'\';\n for (var style in val) {\n /* istanbul ignore else */\n if (pug_has_own_property.call(val, style)) {\n out = out + style + \':\' + val[style] + \';\';\n }\n }\n return out;\n } else {\n return val + \'\';\n }\n};\n\n/**\n * Render the given attribute.\n *\n * @param {String} key\n * @param {String} val\n * @param {Boolean} escaped\n * @param {Boolean} terse\n * @return {String}\n */\nexports.attr = pug_attr;\nfunction pug_attr(key, val, escaped, terse) {\n if (val === false || val == null || !val && (key === \'class\' || key === \'style\')) {\n return \'\';\n }\n if (val === true) {\n return \' \' + (terse ? key : key + \'="\' + key + \'"\');\n }\n if (typeof val.toJSON === \'function\') {\n val = val.toJSON();\n }\n if (typeof val !== \'string\') {\n val = JSON.stringify(val);\n if (!escaped && val.indexOf(\'"\') !== -1) {\n return \' \' + key + \'=\\\'\' + val.replace(/\'/g, \''\') + \'\\\'\';\n }\n }\n if (escaped) val = pug_escape(val);\n return \' \' + key + \'="\' + val + \'"\';\n};\n\n/**\n * Render the given attributes object.\n *\n * @param {Object} obj\n * @param {Object} terse whether to use HTML5 terse boolean attributes\n * @return {String}\n */\nexports.attrs = pug_attrs;\nfunction pug_attrs(obj, terse){\n var attrs = \'\';\n\n for (var key in obj) {\n if (pug_has_own_property.call(obj, key)) {\n var val = obj[key];\n\n if (\'class\' === key) {\n val = pug_classes(val);\n attrs = pug_attr(key, val, false, terse) + attrs;\n continue;\n }\n if (\'style\' === key) {\n val = pug_style(val);\n }\n attrs += pug_attr(key, val, false, terse);\n }\n }\n\n return attrs;\n};\n\n/**\n * Escape the given string of `html`.\n *\n * @param {String} html\n * @return {String}\n * @api private\n */\n\nvar pug_match_html = /["&<>]/;\nexports.escape = pug_escape;\nfunction pug_escape(_html){\n var html = \'\' + _html;\n var regexResult = pug_match_html.exec(html);\n if (!regexResult) return _html;\n\n var result = \'\';\n var i, lastIndex, escape;\n for (i = regexResult.index, lastIndex = 0; i < html.length; i++) {\n switch (html.charCodeAt(i)) {\n case 34: escape = \'"\'; break;\n case 38: escape = \'&\'; break;\n case 60: escape = \'<\'; break;\n case 62: escape = \'>\'; break;\n default: continue;\n }\n if (lastIndex !== i) result += html.substring(lastIndex, i);\n lastIndex = i + 1;\n result += escape;\n }\n if (lastIndex !== i) return result + html.substring(lastIndex, i);\n else return result;\n};\n\n/**\n * Re-throw the given `err` in context to the\n * the pug in `filename` at the given `lineno`.\n *\n * @param {Error} err\n * @param {String} filename\n * @param {String} lineno\n * @param {String} str original source\n * @api private\n */\n\nexports.rethrow = pug_rethrow;\nfunction pug_rethrow(err, filename, lineno, str){\n if (!(err instanceof Error)) throw err;\n if ((typeof window != \'undefined\' || !filename) && !str) {\n err.message += \' on line \' + lineno;\n throw err;\n }\n try {\n str = str || __webpack_require__(/*! fs */ 22).readFileSync(filename, \'utf8\')\n } catch (ex) {\n pug_rethrow(err, null, lineno)\n }\n var context = 3\n , lines = str.split(\'\\n\')\n , start = Math.max(lineno - context, 0)\n , end = Math.min(lines.length, lineno + context);\n\n // Error context\n var context = lines.slice(start, end).map(function(line, i){\n var curr = i + start + 1;\n return (curr == lineno ? \' > \' : \' \')\n + curr\n + \'| \'\n + line;\n }).join(\'\\n\');\n\n // Alter exception message\n err.path = filename;\n err.message = (filename || \'Pug\') + \':\' + lineno\n + \'\\n\' + context + \'\\n\\n\' + err.message;\n throw err;\n};\n\n\n/***/ }),\n/* 29 */\n/*!***********************!*\\\n !*** external "path" ***!\n \\***********************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__29__;\n\n/***/ }),\n/* 30 */\n/*!***********************!*\\\n !*** external "http" ***!\n \\***********************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = require("http");\n\n/***/ }),\n/* 31 */\n/*!***************************************************!*\\\n !*** ./node_modules/sshpk/lib/formats/rfc4253.js ***!\n \\***************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tread: read.bind(undefined, false, undefined),\n\treadType: read.bind(undefined, false),\n\twrite: write,\n\t/* semi-private api, used by sshpk-agent */\n\treadPartial: read.bind(undefined, true),\n\n\t/* shared with ssh format */\n\treadInternal: read,\n\tkeyTypeToAlg: keyTypeToAlg,\n\talgToKeyType: algToKeyType\n};\n\nvar assert = __webpack_require__(/*! assert-plus */ 1);\nvar Buffer = __webpack_require__(/*! safer-buffer */ 3).Buffer;\nvar algs = __webpack_require__(/*! ../algs */ 8);\nvar utils = __webpack_require__(/*! ../utils */ 6);\nvar Key = __webpack_require__(/*! ../key */ 7);\nvar PrivateKey = __webpack_require__(/*! ../private-key */ 9);\nvar SSHBuffer = __webpack_require__(/*! ../ssh-buffer */ 44);\n\nfunction algToKeyType(alg) {\n\tassert.string(alg);\n\tif (alg === \'ssh-dss\')\n\t\treturn (\'dsa\');\n\telse if (alg === \'ssh-rsa\')\n\t\treturn (\'rsa\');\n\telse if (alg === \'ssh-ed25519\')\n\t\treturn (\'ed25519\');\n\telse if (alg === \'ssh-curve25519\')\n\t\treturn (\'curve25519\');\n\telse if (alg.match(/^ecdsa-sha2-/))\n\t\treturn (\'ecdsa\');\n\telse\n\t\tthrow (new Error(\'Unknown algorithm \' + alg));\n}\n\nfunction keyTypeToAlg(key) {\n\tassert.object(key);\n\tif (key.type === \'dsa\')\n\t\treturn (\'ssh-dss\');\n\telse if (key.type === \'rsa\')\n\t\treturn (\'ssh-rsa\');\n\telse if (key.type === \'ed25519\')\n\t\treturn (\'ssh-ed25519\');\n\telse if (key.type === \'curve25519\')\n\t\treturn (\'ssh-curve25519\');\n\telse if (key.type === \'ecdsa\')\n\t\treturn (\'ecdsa-sha2-\' + key.part.curve.data.toString());\n\telse\n\t\tthrow (new Error(\'Unknown key type \' + key.type));\n}\n\nfunction read(partial, type, buf, options) {\n\tif (typeof (buf) === \'string\')\n\t\tbuf = Buffer.from(buf);\n\tassert.buffer(buf, \'buf\');\n\n\tvar key = {};\n\n\tvar parts = key.parts = [];\n\tvar sshbuf = new SSHBuffer({buffer: buf});\n\n\tvar alg = sshbuf.readString();\n\tassert.ok(!sshbuf.atEnd(), \'key must have at least one part\');\n\n\tkey.type = algToKeyType(alg);\n\n\tvar partCount = algs.info[key.type].parts.length;\n\tif (type && type === \'private\')\n\t\tpartCount = algs.privInfo[key.type].parts.length;\n\n\twhile (!sshbuf.atEnd() && parts.length < partCount)\n\t\tparts.push(sshbuf.readPart());\n\twhile (!partial && !sshbuf.atEnd())\n\t\tparts.push(sshbuf.readPart());\n\n\tassert.ok(parts.length >= 1,\n\t \'key must have at least one part\');\n\tassert.ok(partial || sshbuf.atEnd(),\n\t \'leftover bytes at end of key\');\n\n\tvar Constructor = Key;\n\tvar algInfo = algs.info[key.type];\n\tif (type === \'private\' || algInfo.parts.length !== parts.length) {\n\t\talgInfo = algs.privInfo[key.type];\n\t\tConstructor = PrivateKey;\n\t}\n\tassert.strictEqual(algInfo.parts.length, parts.length);\n\n\tif (key.type === \'ecdsa\') {\n\t\tvar res = /^ecdsa-sha2-(.+)$/.exec(alg);\n\t\tassert.ok(res !== null);\n\t\tassert.strictEqual(res[1], parts[0].data.toString());\n\t}\n\n\tvar normalized = true;\n\tfor (var i = 0; i < algInfo.parts.length; ++i) {\n\t\tvar p = parts[i];\n\t\tp.name = algInfo.parts[i];\n\t\t/*\n\t\t * OpenSSH stores ed25519 "private" keys as seed + public key\n\t\t * concat\'d together (k followed by A). We want to keep them\n\t\t * separate for other formats that don\'t do this.\n\t\t */\n\t\tif (key.type === \'ed25519\' && p.name === \'k\')\n\t\t\tp.data = p.data.slice(0, 32);\n\n\t\tif (p.name !== \'curve\' && algInfo.normalize !== false) {\n\t\t\tvar nd;\n\t\t\tif (key.type === \'ed25519\') {\n\t\t\t\tnd = utils.zeroPadToLength(p.data, 32);\n\t\t\t} else {\n\t\t\t\tnd = utils.mpNormalize(p.data);\n\t\t\t}\n\t\t\tif (nd.toString(\'binary\') !==\n\t\t\t p.data.toString(\'binary\')) {\n\t\t\t\tp.data = nd;\n\t\t\t\tnormalized = false;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (normalized)\n\t\tkey._rfc4253Cache = sshbuf.toBuffer();\n\n\tif (partial && typeof (partial) === \'object\') {\n\t\tpartial.remainder = sshbuf.remainder();\n\t\tpartial.consumed = sshbuf._offset;\n\t}\n\n\treturn (new Constructor(key));\n}\n\nfunction write(key, options) {\n\tassert.object(key);\n\n\tvar alg = keyTypeToAlg(key);\n\tvar i;\n\n\tvar algInfo = algs.info[key.type];\n\tif (PrivateKey.isPrivateKey(key))\n\t\talgInfo = algs.privInfo[key.type];\n\tvar parts = algInfo.parts;\n\n\tvar buf = new SSHBuffer({});\n\n\tbuf.writeString(alg);\n\n\tfor (i = 0; i < parts.length; ++i) {\n\t\tvar data = key.part[parts[i]].data;\n\t\tif (algInfo.normalize !== false) {\n\t\t\tif (key.type === \'ed25519\')\n\t\t\t\tdata = utils.zeroPadToLength(data, 32);\n\t\t\telse\n\t\t\t\tdata = utils.mpNormalize(data);\n\t\t}\n\t\tif (key.type === \'ed25519\' && parts[i] === \'k\')\n\t\t\tdata = Buffer.concat([data, key.part.A.data]);\n\t\tbuf.writeBuffer(data);\n\t}\n\n\treturn (buf.toBuffer());\n}\n\n\n/***/ }),\n/* 32 */\n/*!*************************************!*\\\n !*** ./src/services/log.service.ts ***!\n \\*************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result["default"] = mod;\n return result;\n};\nObject.defineProperty(exports, "__esModule", { value: true });\nconst core_1 = __webpack_require__(/*! @angular/core */ 0);\nconst electron_service_1 = __webpack_require__(/*! ./electron.service */ 14);\nconst winston = __importStar(__webpack_require__(/*! winston */ 146));\nconst fs = __importStar(__webpack_require__(/*! fs */ 22));\nconst path = __importStar(__webpack_require__(/*! path */ 29));\nconst initializeWinston = (electron) => {\n const logDirectory = electron.app.getPath(\'userData\');\n if (!fs.existsSync(logDirectory)) {\n fs.mkdirSync(logDirectory);\n }\n return new winston.Logger({\n transports: [\n new winston.transports.File({\n level: \'debug\',\n filename: path.join(logDirectory, \'log.txt\'),\n handleExceptions: false,\n json: false,\n maxsize: 5242880,\n maxFiles: 5,\n colorize: false\n }),\n new winston.transports.Console({\n level: \'debug\',\n handleExceptions: false,\n json: false,\n colorize: true\n })\n ],\n exitOnError: false\n });\n};\nclass Logger {\n constructor(winstonLogger, name) {\n this.winstonLogger = winstonLogger;\n this.name = name;\n }\n doLog(level, ...args) {\n console[level](`%c[${this.name}]`, \'color: #aaa\', ...args);\n if (this.winstonLogger) {\n this.winstonLogger[level](...args);\n }\n }\n debug(...args) { this.doLog(\'debug\', ...args); }\n info(...args) { this.doLog(\'info\', ...args); }\n warn(...args) { this.doLog(\'warn\', ...args); }\n error(...args) { this.doLog(\'error\', ...args); }\n log(...args) { this.doLog(\'log\', ...args); }\n}\nexports.Logger = Logger;\nlet LogService = class LogService {\n constructor(electron) {\n this.log = initializeWinston(electron);\n }\n create(name) {\n return new Logger(this.log, name);\n }\n};\nLogService = __decorate([\n core_1.Injectable({ providedIn: \'root\' }),\n __metadata("design:paramtypes", [electron_service_1.ElectronService])\n], LogService);\nexports.LogService = LogService;\n\n\n/***/ }),\n/* 33 */\n/*!************************!*\\\n !*** external "https" ***!\n \\************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = require("https");\n\n/***/ }),\n/* 34 */\n/*!**********************************************!*\\\n !*** ./node_modules/ajv/lib/compile/util.js ***!\n \\**********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\n\nmodule.exports = {\n copy: copy,\n checkDataType: checkDataType,\n checkDataTypes: checkDataTypes,\n coerceToTypes: coerceToTypes,\n toHash: toHash,\n getProperty: getProperty,\n escapeQuotes: escapeQuotes,\n equal: __webpack_require__(/*! fast-deep-equal */ 74),\n ucs2length: __webpack_require__(/*! ./ucs2length */ 229),\n varOccurences: varOccurences,\n varReplace: varReplace,\n cleanUpCode: cleanUpCode,\n finalCleanUpCode: finalCleanUpCode,\n schemaHasRules: schemaHasRules,\n schemaHasRulesExcept: schemaHasRulesExcept,\n toQuotedString: toQuotedString,\n getPathExpr: getPathExpr,\n getPath: getPath,\n getData: getData,\n unescapeFragment: unescapeFragment,\n unescapeJsonPointer: unescapeJsonPointer,\n escapeFragment: escapeFragment,\n escapeJsonPointer: escapeJsonPointer\n};\n\n\nfunction copy(o, to) {\n to = to || {};\n for (var key in o) to[key] = o[key];\n return to;\n}\n\n\nfunction checkDataType(dataType, data, negate) {\n var EQUAL = negate ? \' !== \' : \' === \'\n , AND = negate ? \' || \' : \' && \'\n , OK = negate ? \'!\' : \'\'\n , NOT = negate ? \'\' : \'!\';\n switch (dataType) {\n case \'null\': return data + EQUAL + \'null\';\n case \'array\': return OK + \'Array.isArray(\' + data + \')\';\n case \'object\': return \'(\' + OK + data + AND +\n \'typeof \' + data + EQUAL + \'"object"\' + AND +\n NOT + \'Array.isArray(\' + data + \'))\';\n case \'integer\': return \'(typeof \' + data + EQUAL + \'"number"\' + AND +\n NOT + \'(\' + data + \' % 1)\' +\n AND + data + EQUAL + data + \')\';\n default: return \'typeof \' + data + EQUAL + \'"\' + dataType + \'"\';\n }\n}\n\n\nfunction checkDataTypes(dataTypes, data) {\n switch (dataTypes.length) {\n case 1: return checkDataType(dataTypes[0], data, true);\n default:\n var code = \'\';\n var types = toHash(dataTypes);\n if (types.array && types.object) {\n code = types.null ? \'(\': \'(!\' + data + \' || \';\n code += \'typeof \' + data + \' !== "object")\';\n delete types.null;\n delete types.array;\n delete types.object;\n }\n if (types.number) delete types.integer;\n for (var t in types)\n code += (code ? \' && \' : \'\' ) + checkDataType(t, data, true);\n\n return code;\n }\n}\n\n\nvar COERCE_TO_TYPES = toHash([ \'string\', \'number\', \'integer\', \'boolean\', \'null\' ]);\nfunction coerceToTypes(optionCoerceTypes, dataTypes) {\n if (Array.isArray(dataTypes)) {\n var types = [];\n for (var i=0; i= lvl) throw new Error(\'Cannot access property/index \' + up + \' levels up, current level is \' + lvl);\n return paths[lvl - up];\n }\n\n if (up > lvl) throw new Error(\'Cannot access data \' + up + \' levels up, current level is \' + lvl);\n data = \'data\' + ((lvl - up) || \'\');\n if (!jsonPointer) return data;\n }\n\n var expr = data;\n var segments = jsonPointer.split(\'/\');\n for (var i=0; i= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, "__esModule", { value: true });\nconst rxjs_1 = __webpack_require__(/*! rxjs */ 5);\nconst operators_1 = __webpack_require__(/*! rxjs/operators */ 10);\nconst core_1 = __webpack_require__(/*! @angular/core */ 0);\nconst log_service_1 = __webpack_require__(/*! ./log.service */ 32);\nconst config_service_1 = __webpack_require__(/*! ./config.service */ 15);\nconst hostApp_service_1 = __webpack_require__(/*! ./hostApp.service */ 16);\nconst tabRecovery_service_1 = __webpack_require__(/*! ./tabRecovery.service */ 175);\nclass CompletionObserver {\n constructor(tab) {\n this.tab = tab;\n this.done = new rxjs_1.AsyncSubject();\n this.destroyed = new rxjs_1.AsyncSubject();\n this.interval = setInterval(() => this.tick(), 1000);\n this.tab.destroyed$.pipe(operators_1.takeUntil(this.destroyed$)).subscribe(() => this.stop());\n }\n get done$() { return this.done; }\n get destroyed$() { return this.destroyed; }\n tick() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!(yield this.tab.getCurrentProcess())) {\n this.done.next(null);\n this.stop();\n }\n });\n }\n stop() {\n clearInterval(this.interval);\n this.destroyed.next(null);\n this.destroyed.complete();\n this.done.complete();\n }\n}\nlet AppService = class AppService {\n constructor(componentFactoryResolver, config, hostApp, injector, tabRecovery, log) {\n this.componentFactoryResolver = componentFactoryResolver;\n this.config = config;\n this.hostApp = hostApp;\n this.injector = injector;\n this.tabRecovery = tabRecovery;\n this.tabs = [];\n this.lastTabIndex = 0;\n this.activeTabChange = new rxjs_1.Subject();\n this.tabsChanged = new rxjs_1.Subject();\n this.tabOpened = new rxjs_1.Subject();\n this.tabClosed = new rxjs_1.Subject();\n this.ready = new rxjs_1.AsyncSubject();\n this.completionObservers = new Map();\n this.logger = log.create(\'app\');\n this.hostApp.windowCloseRequest$.subscribe(() => this.closeWindow());\n this.tabRecovery.recoverTabs().then(tabs => {\n for (let tab of tabs) {\n this.openNewTab(tab.type, tab.options);\n }\n this.tabsChanged$.subscribe(() => {\n tabRecovery.saveTabs(this.tabs);\n });\n setInterval(() => {\n tabRecovery.saveTabs(this.tabs);\n }, 30000);\n });\n }\n get activeTabChange$() { return this.activeTabChange; }\n get tabOpened$() { return this.tabOpened; }\n get tabsChanged$() { return this.tabsChanged; }\n get tabClosed$() { return this.tabClosed; }\n get ready$() { return this.ready; }\n openNewTab(type, inputs) {\n let componentFactory = this.componentFactoryResolver.resolveComponentFactory(type);\n let componentRef = componentFactory.create(this.injector);\n let tab = componentRef.instance;\n tab.hostView = componentRef.hostView;\n Object.assign(tab, inputs || {});\n this.tabs.push(tab);\n this.selectTab(tab);\n this.tabsChanged.next();\n this.tabOpened.next(tab);\n tab.titleChange$.subscribe(title => {\n if (tab === this.activeTab) {\n this.hostApp.setTitle(title);\n }\n });\n return tab;\n }\n selectTab(tab) {\n if (this.activeTab === tab) {\n this.activeTab.emitFocused();\n return;\n }\n if (this.tabs.includes(this.activeTab)) {\n this.lastTabIndex = this.tabs.indexOf(this.activeTab);\n }\n else {\n this.lastTabIndex = null;\n }\n if (this.activeTab) {\n this.activeTab.clearActivity();\n this.activeTab.emitBlurred();\n }\n this.activeTab = tab;\n this.activeTabChange.next(tab);\n if (this.activeTab) {\n setImmediate(() => {\n this.activeTab.emitFocused();\n });\n this.hostApp.setTitle(this.activeTab.title);\n }\n }\n toggleLastTab() {\n if (!this.lastTabIndex || this.lastTabIndex >= this.tabs.length) {\n this.lastTabIndex = 0;\n }\n this.selectTab(this.tabs[this.lastTabIndex]);\n }\n nextTab() {\n if (this.tabs.length > 1) {\n let tabIndex = this.tabs.indexOf(this.activeTab);\n if (tabIndex < this.tabs.length - 1) {\n this.selectTab(this.tabs[tabIndex + 1]);\n }\n else if (this.config.store.appearance.cycleTabs) {\n this.selectTab(this.tabs[0]);\n }\n }\n }\n previousTab() {\n if (this.tabs.length > 1) {\n let tabIndex = this.tabs.indexOf(this.activeTab);\n if (tabIndex > 0) {\n this.selectTab(this.tabs[tabIndex - 1]);\n }\n else if (this.config.store.appearance.cycleTabs) {\n this.selectTab(this.tabs[this.tabs.length - 1]);\n }\n }\n }\n emitTabsChanged() {\n this.tabsChanged.next();\n }\n closeTab(tab, checkCanClose) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.tabs.includes(tab)) {\n return;\n }\n if (checkCanClose && !(yield tab.canClose())) {\n return;\n }\n let newIndex = Math.max(0, this.tabs.indexOf(tab) - 1);\n this.tabs = this.tabs.filter((x) => x !== tab);\n tab.destroy();\n if (tab === this.activeTab) {\n this.selectTab(this.tabs[newIndex]);\n }\n this.tabsChanged.next();\n this.tabClosed.next(tab);\n });\n }\n duplicateTab(tab) {\n return __awaiter(this, void 0, void 0, function* () {\n let token = yield tab.getRecoveryToken();\n if (!token) {\n return;\n }\n let recoveredTab = yield this.tabRecovery.recoverTab(token);\n if (recoveredTab) {\n this.openNewTab(recoveredTab.type, recoveredTab.options);\n }\n });\n }\n closeWindow() {\n return __awaiter(this, void 0, void 0, function* () {\n for (let tab of this.tabs) {\n if (!(yield tab.canClose())) {\n return;\n }\n }\n for (let tab of this.tabs) {\n tab.destroy();\n }\n this.hostApp.closeWindow();\n });\n }\n emitReady() {\n this.ready.next(null);\n this.ready.complete();\n this.hostApp.emitReady();\n }\n observeTabCompletion(tab) {\n if (!this.completionObservers.has(tab)) {\n let observer = new CompletionObserver(tab);\n observer.destroyed$.subscribe(() => {\n this.stopObservingTabCompletion(tab);\n });\n this.completionObservers.set(tab, observer);\n }\n return this.completionObservers.get(tab).done$;\n }\n stopObservingTabCompletion(tab) {\n this.completionObservers.delete(tab);\n }\n};\nAppService = __decorate([\n core_1.Injectable({ providedIn: \'root\' }),\n __metadata("design:paramtypes", [core_1.ComponentFactoryResolver,\n config_service_1.ConfigService,\n hostApp_service_1.HostAppService,\n core_1.Injector,\n tabRecovery_service_1.TabRecoveryService,\n log_service_1.LogService])\n], AppService);\nexports.AppService = AppService;\n\n\n/***/ }),\n/* 37 */\n/*!**************************!*\\\n !*** ./src/api/index.ts ***!\n \\**************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nObject.defineProperty(exports, "__esModule", { value: true });\nvar baseTab_component_1 = __webpack_require__(/*! ../components/baseTab.component */ 61);\nexports.BaseTabComponent = baseTab_component_1.BaseTabComponent;\nvar tabRecovery_1 = __webpack_require__(/*! ./tabRecovery */ 90);\nexports.TabRecoveryProvider = tabRecovery_1.TabRecoveryProvider;\nvar toolbarButtonProvider_1 = __webpack_require__(/*! ./toolbarButtonProvider */ 176);\nexports.ToolbarButtonProvider = toolbarButtonProvider_1.ToolbarButtonProvider;\nvar configProvider_1 = __webpack_require__(/*! ./configProvider */ 48);\nexports.ConfigProvider = configProvider_1.ConfigProvider;\nvar hotkeyProvider_1 = __webpack_require__(/*! ./hotkeyProvider */ 56);\nexports.HotkeyProvider = hotkeyProvider_1.HotkeyProvider;\nvar theme_1 = __webpack_require__(/*! ./theme */ 58);\nexports.Theme = theme_1.Theme;\nvar tabContextMenuProvider_1 = __webpack_require__(/*! ./tabContextMenuProvider */ 49);\nexports.TabContextMenuItemProvider = tabContextMenuProvider_1.TabContextMenuItemProvider;\nvar app_service_1 = __webpack_require__(/*! ../services/app.service */ 36);\nexports.AppService = app_service_1.AppService;\nvar config_service_1 = __webpack_require__(/*! ../services/config.service */ 15);\nexports.ConfigService = config_service_1.ConfigService;\nvar docking_service_1 = __webpack_require__(/*! ../services/docking.service */ 78);\nexports.DockingService = docking_service_1.DockingService;\nvar electron_service_1 = __webpack_require__(/*! ../services/electron.service */ 14);\nexports.ElectronService = electron_service_1.ElectronService;\nvar log_service_1 = __webpack_require__(/*! ../services/log.service */ 32);\nexports.Logger = log_service_1.Logger;\nexports.LogService = log_service_1.LogService;\nvar homeBase_service_1 = __webpack_require__(/*! ../services/homeBase.service */ 91);\nexports.HomeBaseService = homeBase_service_1.HomeBaseService;\nvar hotkeys_service_1 = __webpack_require__(/*! ../services/hotkeys.service */ 47);\nexports.HotkeysService = hotkeys_service_1.HotkeysService;\nvar hostApp_service_1 = __webpack_require__(/*! ../services/hostApp.service */ 16);\nexports.HostAppService = hostApp_service_1.HostAppService;\nexports.Platform = hostApp_service_1.Platform;\nvar shellIntegration_service_1 = __webpack_require__(/*! ../services/shellIntegration.service */ 291);\nexports.ShellIntegrationService = shellIntegration_service_1.ShellIntegrationService;\nvar themes_service_1 = __webpack_require__(/*! ../services/themes.service */ 79);\nexports.ThemesService = themes_service_1.ThemesService;\n\n\n/***/ }),\n/* 38 */\n/*!*******************************************!*\\\n !*** ./node_modules/safe-buffer/index.js ***!\n \\*******************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* eslint-disable node/no-deprecated-api */\nvar buffer = __webpack_require__(/*! buffer */ 98)\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require(\'buffer\')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === \'number\') {\n throw new TypeError(\'Argument must not be a number\')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== \'number\') {\n throw new TypeError(\'Argument must be a number\')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === \'string\') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== \'number\') {\n throw new TypeError(\'Argument must be a number\')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== \'number\') {\n throw new TypeError(\'Argument must be a number\')\n }\n return buffer.SlowBuffer(size)\n}\n\n\n/***/ }),\n/* 39 */\n/*!******************************!*\\\n !*** external "querystring" ***!\n \\******************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = require("querystring");\n\n/***/ }),\n/* 40 */\n/*!***********************************************!*\\\n !*** ./node_modules/sshpk/lib/fingerprint.js ***!\n \\***********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2015 Joyent, Inc.\n\nmodule.exports = Fingerprint;\n\nvar assert = __webpack_require__(/*! assert-plus */ 1);\nvar Buffer = __webpack_require__(/*! safer-buffer */ 3).Buffer;\nvar algs = __webpack_require__(/*! ./algs */ 8);\nvar crypto = __webpack_require__(/*! crypto */ 2);\nvar errs = __webpack_require__(/*! ./errors */ 18);\nvar Key = __webpack_require__(/*! ./key */ 7);\nvar Certificate = __webpack_require__(/*! ./certificate */ 41);\nvar utils = __webpack_require__(/*! ./utils */ 6);\n\nvar FingerprintFormatError = errs.FingerprintFormatError;\nvar InvalidAlgorithmError = errs.InvalidAlgorithmError;\n\nfunction Fingerprint(opts) {\n\tassert.object(opts, \'options\');\n\tassert.string(opts.type, \'options.type\');\n\tassert.buffer(opts.hash, \'options.hash\');\n\tassert.string(opts.algorithm, \'options.algorithm\');\n\n\tthis.algorithm = opts.algorithm.toLowerCase();\n\tif (algs.hashAlgs[this.algorithm] !== true)\n\t\tthrow (new InvalidAlgorithmError(this.algorithm));\n\n\tthis.hash = opts.hash;\n\tthis.type = opts.type;\n}\n\nFingerprint.prototype.toString = function (format) {\n\tif (format === undefined) {\n\t\tif (this.algorithm === \'md5\')\n\t\t\tformat = \'hex\';\n\t\telse\n\t\t\tformat = \'base64\';\n\t}\n\tassert.string(format);\n\n\tswitch (format) {\n\tcase \'hex\':\n\t\treturn (addColons(this.hash.toString(\'hex\')));\n\tcase \'base64\':\n\t\treturn (sshBase64Format(this.algorithm,\n\t\t this.hash.toString(\'base64\')));\n\tdefault:\n\t\tthrow (new FingerprintFormatError(undefined, format));\n\t}\n};\n\nFingerprint.prototype.matches = function (other) {\n\tassert.object(other, \'key or certificate\');\n\tif (this.type === \'key\') {\n\t\tutils.assertCompatible(other, Key, [1, 0], \'key\');\n\t} else {\n\t\tutils.assertCompatible(other, Certificate, [1, 0],\n\t\t \'certificate\');\n\t}\n\n\tvar theirHash = other.hash(this.algorithm);\n\tvar theirHash2 = crypto.createHash(this.algorithm).\n\t update(theirHash).digest(\'base64\');\n\n\tif (this.hash2 === undefined)\n\t\tthis.hash2 = crypto.createHash(this.algorithm).\n\t\t update(this.hash).digest(\'base64\');\n\n\treturn (this.hash2 === theirHash2);\n};\n\nFingerprint.parse = function (fp, options) {\n\tassert.string(fp, \'fingerprint\');\n\n\tvar alg, hash, enAlgs;\n\tif (Array.isArray(options)) {\n\t\tenAlgs = options;\n\t\toptions = {};\n\t}\n\tassert.optionalObject(options, \'options\');\n\tif (options === undefined)\n\t\toptions = {};\n\tif (options.enAlgs !== undefined)\n\t\tenAlgs = options.enAlgs;\n\tassert.optionalArrayOfString(enAlgs, \'algorithms\');\n\n\tvar parts = fp.split(\':\');\n\tif (parts.length == 2) {\n\t\talg = parts[0].toLowerCase();\n\t\t/*JSSTYLED*/\n\t\tvar base64RE = /^[A-Za-z0-9+\\/=]+$/;\n\t\tif (!base64RE.test(parts[1]))\n\t\t\tthrow (new FingerprintFormatError(fp));\n\t\ttry {\n\t\t\thash = Buffer.from(parts[1], \'base64\');\n\t\t} catch (e) {\n\t\t\tthrow (new FingerprintFormatError(fp));\n\t\t}\n\t} else if (parts.length > 2) {\n\t\talg = \'md5\';\n\t\tif (parts[0].toLowerCase() === \'md5\')\n\t\t\tparts = parts.slice(1);\n\t\tparts = parts.join(\'\');\n\t\t/*JSSTYLED*/\n\t\tvar md5RE = /^[a-fA-F0-9]+$/;\n\t\tif (!md5RE.test(parts))\n\t\t\tthrow (new FingerprintFormatError(fp));\n\t\ttry {\n\t\t\thash = Buffer.from(parts, \'hex\');\n\t\t} catch (e) {\n\t\t\tthrow (new FingerprintFormatError(fp));\n\t\t}\n\t}\n\n\tif (alg === undefined)\n\t\tthrow (new FingerprintFormatError(fp));\n\n\tif (algs.hashAlgs[alg] === undefined)\n\t\tthrow (new InvalidAlgorithmError(alg));\n\n\tif (enAlgs !== undefined) {\n\t\tenAlgs = enAlgs.map(function (a) { return a.toLowerCase(); });\n\t\tif (enAlgs.indexOf(alg) === -1)\n\t\t\tthrow (new InvalidAlgorithmError(alg));\n\t}\n\n\treturn (new Fingerprint({\n\t\talgorithm: alg,\n\t\thash: hash,\n\t\ttype: options.type || \'key\'\n\t}));\n};\n\nfunction addColons(s) {\n\t/*JSSTYLED*/\n\treturn (s.replace(/(.{2})(?=.)/g, \'$1:\'));\n}\n\nfunction base64Strip(s) {\n\t/*JSSTYLED*/\n\treturn (s.replace(/=*$/, \'\'));\n}\n\nfunction sshBase64Format(alg, h) {\n\treturn (alg.toUpperCase() + \':\' + base64Strip(h));\n}\n\nFingerprint.isFingerprint = function (obj, ver) {\n\treturn (utils.isCompatible(obj, Fingerprint, ver));\n};\n\n/*\n * API versions for Fingerprint:\n * [1,0] -- initial ver\n * [1,1] -- first tagged ver\n */\nFingerprint.prototype._sshpkApiVersion = [1, 1];\n\nFingerprint._oldVersionDetect = function (obj) {\n\tassert.func(obj.toString);\n\tassert.func(obj.matches);\n\treturn ([1, 0]);\n};\n\n\n/***/ }),\n/* 41 */\n/*!***********************************************!*\\\n !*** ./node_modules/sshpk/lib/certificate.js ***!\n \\***********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2016 Joyent, Inc.\n\nmodule.exports = Certificate;\n\nvar assert = __webpack_require__(/*! assert-plus */ 1);\nvar Buffer = __webpack_require__(/*! safer-buffer */ 3).Buffer;\nvar algs = __webpack_require__(/*! ./algs */ 8);\nvar crypto = __webpack_require__(/*! crypto */ 2);\nvar Fingerprint = __webpack_require__(/*! ./fingerprint */ 40);\nvar Signature = __webpack_require__(/*! ./signature */ 19);\nvar errs = __webpack_require__(/*! ./errors */ 18);\nvar util = __webpack_require__(/*! util */ 4);\nvar utils = __webpack_require__(/*! ./utils */ 6);\nvar Key = __webpack_require__(/*! ./key */ 7);\nvar PrivateKey = __webpack_require__(/*! ./private-key */ 9);\nvar Identity = __webpack_require__(/*! ./identity */ 45);\n\nvar formats = {};\nformats[\'openssh\'] = __webpack_require__(/*! ./formats/openssh-cert */ 201);\nformats[\'x509\'] = __webpack_require__(/*! ./formats/x509 */ 106);\nformats[\'pem\'] = __webpack_require__(/*! ./formats/x509-pem */ 202);\n\nvar CertificateParseError = errs.CertificateParseError;\nvar InvalidAlgorithmError = errs.InvalidAlgorithmError;\n\nfunction Certificate(opts) {\n\tassert.object(opts, \'options\');\n\tassert.arrayOfObject(opts.subjects, \'options.subjects\');\n\tutils.assertCompatible(opts.subjects[0], Identity, [1, 0],\n\t \'options.subjects\');\n\tutils.assertCompatible(opts.subjectKey, Key, [1, 0],\n\t \'options.subjectKey\');\n\tutils.assertCompatible(opts.issuer, Identity, [1, 0], \'options.issuer\');\n\tif (opts.issuerKey !== undefined) {\n\t\tutils.assertCompatible(opts.issuerKey, Key, [1, 0],\n\t\t \'options.issuerKey\');\n\t}\n\tassert.object(opts.signatures, \'options.signatures\');\n\tassert.buffer(opts.serial, \'options.serial\');\n\tassert.date(opts.validFrom, \'options.validFrom\');\n\tassert.date(opts.validUntil, \'optons.validUntil\');\n\n\tassert.optionalArrayOfString(opts.purposes, \'options.purposes\');\n\n\tthis._hashCache = {};\n\n\tthis.subjects = opts.subjects;\n\tthis.issuer = opts.issuer;\n\tthis.subjectKey = opts.subjectKey;\n\tthis.issuerKey = opts.issuerKey;\n\tthis.signatures = opts.signatures;\n\tthis.serial = opts.serial;\n\tthis.validFrom = opts.validFrom;\n\tthis.validUntil = opts.validUntil;\n\tthis.purposes = opts.purposes;\n}\n\nCertificate.formats = formats;\n\nCertificate.prototype.toBuffer = function (format, options) {\n\tif (format === undefined)\n\t\tformat = \'x509\';\n\tassert.string(format, \'format\');\n\tassert.object(formats[format], \'formats[format]\');\n\tassert.optionalObject(options, \'options\');\n\n\treturn (formats[format].write(this, options));\n};\n\nCertificate.prototype.toString = function (format, options) {\n\tif (format === undefined)\n\t\tformat = \'pem\';\n\treturn (this.toBuffer(format, options).toString());\n};\n\nCertificate.prototype.fingerprint = function (algo) {\n\tif (algo === undefined)\n\t\talgo = \'sha256\';\n\tassert.string(algo, \'algorithm\');\n\tvar opts = {\n\t\ttype: \'certificate\',\n\t\thash: this.hash(algo),\n\t\talgorithm: algo\n\t};\n\treturn (new Fingerprint(opts));\n};\n\nCertificate.prototype.hash = function (algo) {\n\tassert.string(algo, \'algorithm\');\n\talgo = algo.toLowerCase();\n\tif (algs.hashAlgs[algo] === undefined)\n\t\tthrow (new InvalidAlgorithmError(algo));\n\n\tif (this._hashCache[algo])\n\t\treturn (this._hashCache[algo]);\n\n\tvar hash = crypto.createHash(algo).\n\t update(this.toBuffer(\'x509\')).digest();\n\tthis._hashCache[algo] = hash;\n\treturn (hash);\n};\n\nCertificate.prototype.isExpired = function (when) {\n\tif (when === undefined)\n\t\twhen = new Date();\n\treturn (!((when.getTime() >= this.validFrom.getTime()) &&\n\t\t(when.getTime() < this.validUntil.getTime())));\n};\n\nCertificate.prototype.isSignedBy = function (issuerCert) {\n\tutils.assertCompatible(issuerCert, Certificate, [1, 0], \'issuer\');\n\n\tif (!this.issuer.equals(issuerCert.subjects[0]))\n\t\treturn (false);\n\tif (this.issuer.purposes && this.issuer.purposes.length > 0 &&\n\t this.issuer.purposes.indexOf(\'ca\') === -1) {\n\t\treturn (false);\n\t}\n\n\treturn (this.isSignedByKey(issuerCert.subjectKey));\n};\n\nCertificate.prototype.isSignedByKey = function (issuerKey) {\n\tutils.assertCompatible(issuerKey, Key, [1, 2], \'issuerKey\');\n\n\tif (this.issuerKey !== undefined) {\n\t\treturn (this.issuerKey.\n\t\t fingerprint(\'sha512\').matches(issuerKey));\n\t}\n\n\tvar fmt = Object.keys(this.signatures)[0];\n\tvar valid = formats[fmt].verify(this, issuerKey);\n\tif (valid)\n\t\tthis.issuerKey = issuerKey;\n\treturn (valid);\n};\n\nCertificate.prototype.signWith = function (key) {\n\tutils.assertCompatible(key, PrivateKey, [1, 2], \'key\');\n\tvar fmts = Object.keys(formats);\n\tvar didOne = false;\n\tfor (var i = 0; i < fmts.length; ++i) {\n\t\tif (fmts[i] !== \'pem\') {\n\t\t\tvar ret = formats[fmts[i]].sign(this, key);\n\t\t\tif (ret === true)\n\t\t\t\tdidOne = true;\n\t\t}\n\t}\n\tif (!didOne) {\n\t\tthrow (new Error(\'Failed to sign the certificate for any \' +\n\t\t \'available certificate formats\'));\n\t}\n};\n\nCertificate.createSelfSigned = function (subjectOrSubjects, key, options) {\n\tvar subjects;\n\tif (Array.isArray(subjectOrSubjects))\n\t\tsubjects = subjectOrSubjects;\n\telse\n\t\tsubjects = [subjectOrSubjects];\n\n\tassert.arrayOfObject(subjects);\n\tsubjects.forEach(function (subject) {\n\t\tutils.assertCompatible(subject, Identity, [1, 0], \'subject\');\n\t});\n\n\tutils.assertCompatible(key, PrivateKey, [1, 2], \'private key\');\n\n\tassert.optionalObject(options, \'options\');\n\tif (options === undefined)\n\t\toptions = {};\n\tassert.optionalObject(options.validFrom, \'options.validFrom\');\n\tassert.optionalObject(options.validUntil, \'options.validUntil\');\n\tvar validFrom = options.validFrom;\n\tvar validUntil = options.validUntil;\n\tif (validFrom === undefined)\n\t\tvalidFrom = new Date();\n\tif (validUntil === undefined) {\n\t\tassert.optionalNumber(options.lifetime, \'options.lifetime\');\n\t\tvar lifetime = options.lifetime;\n\t\tif (lifetime === undefined)\n\t\t\tlifetime = 10*365*24*3600;\n\t\tvalidUntil = new Date();\n\t\tvalidUntil.setTime(validUntil.getTime() + lifetime*1000);\n\t}\n\tassert.optionalBuffer(options.serial, \'options.serial\');\n\tvar serial = options.serial;\n\tif (serial === undefined)\n\t\tserial = Buffer.from(\'0000000000000001\', \'hex\');\n\n\tvar purposes = options.purposes;\n\tif (purposes === undefined)\n\t\tpurposes = [];\n\n\tif (purposes.indexOf(\'signature\') === -1)\n\t\tpurposes.push(\'signature\');\n\n\t/* Self-signed certs are always CAs. */\n\tif (purposes.indexOf(\'ca\') === -1)\n\t\tpurposes.push(\'ca\');\n\tif (purposes.indexOf(\'crl\') === -1)\n\t\tpurposes.push(\'crl\');\n\n\t/*\n\t * If we weren\'t explicitly given any other purposes, do the sensible\n\t * thing and add some basic ones depending on the subject type.\n\t */\n\tif (purposes.length <= 3) {\n\t\tvar hostSubjects = subjects.filter(function (subject) {\n\t\t\treturn (subject.type === \'host\');\n\t\t});\n\t\tvar userSubjects = subjects.filter(function (subject) {\n\t\t\treturn (subject.type === \'user\');\n\t\t});\n\t\tif (hostSubjects.length > 0) {\n\t\t\tif (purposes.indexOf(\'serverAuth\') === -1)\n\t\t\t\tpurposes.push(\'serverAuth\');\n\t\t}\n\t\tif (userSubjects.length > 0) {\n\t\t\tif (purposes.indexOf(\'clientAuth\') === -1)\n\t\t\t\tpurposes.push(\'clientAuth\');\n\t\t}\n\t\tif (userSubjects.length > 0 || hostSubjects.length > 0) {\n\t\t\tif (purposes.indexOf(\'keyAgreement\') === -1)\n\t\t\t\tpurposes.push(\'keyAgreement\');\n\t\t\tif (key.type === \'rsa\' &&\n\t\t\t purposes.indexOf(\'encryption\') === -1)\n\t\t\t\tpurposes.push(\'encryption\');\n\t\t}\n\t}\n\n\tvar cert = new Certificate({\n\t\tsubjects: subjects,\n\t\tissuer: subjects[0],\n\t\tsubjectKey: key.toPublic(),\n\t\tissuerKey: key.toPublic(),\n\t\tsignatures: {},\n\t\tserial: serial,\n\t\tvalidFrom: validFrom,\n\t\tvalidUntil: validUntil,\n\t\tpurposes: purposes\n\t});\n\tcert.signWith(key);\n\n\treturn (cert);\n};\n\nCertificate.create =\n function (subjectOrSubjects, key, issuer, issuerKey, options) {\n\tvar subjects;\n\tif (Array.isArray(subjectOrSubjects))\n\t\tsubjects = subjectOrSubjects;\n\telse\n\t\tsubjects = [subjectOrSubjects];\n\n\tassert.arrayOfObject(subjects);\n\tsubjects.forEach(function (subject) {\n\t\tutils.assertCompatible(subject, Identity, [1, 0], \'subject\');\n\t});\n\n\tutils.assertCompatible(key, Key, [1, 0], \'key\');\n\tif (PrivateKey.isPrivateKey(key))\n\t\tkey = key.toPublic();\n\tutils.assertCompatible(issuer, Identity, [1, 0], \'issuer\');\n\tutils.assertCompatible(issuerKey, PrivateKey, [1, 2], \'issuer key\');\n\n\tassert.optionalObject(options, \'options\');\n\tif (options === undefined)\n\t\toptions = {};\n\tassert.optionalObject(options.validFrom, \'options.validFrom\');\n\tassert.optionalObject(options.validUntil, \'options.validUntil\');\n\tvar validFrom = options.validFrom;\n\tvar validUntil = options.validUntil;\n\tif (validFrom === undefined)\n\t\tvalidFrom = new Date();\n\tif (validUntil === undefined) {\n\t\tassert.optionalNumber(options.lifetime, \'options.lifetime\');\n\t\tvar lifetime = options.lifetime;\n\t\tif (lifetime === undefined)\n\t\t\tlifetime = 10*365*24*3600;\n\t\tvalidUntil = new Date();\n\t\tvalidUntil.setTime(validUntil.getTime() + lifetime*1000);\n\t}\n\tassert.optionalBuffer(options.serial, \'options.serial\');\n\tvar serial = options.serial;\n\tif (serial === undefined)\n\t\tserial = Buffer.from(\'0000000000000001\', \'hex\');\n\n\tvar purposes = options.purposes;\n\tif (purposes === undefined)\n\t\tpurposes = [];\n\n\tif (purposes.indexOf(\'signature\') === -1)\n\t\tpurposes.push(\'signature\');\n\n\tif (options.ca === true) {\n\t\tif (purposes.indexOf(\'ca\') === -1)\n\t\t\tpurposes.push(\'ca\');\n\t\tif (purposes.indexOf(\'crl\') === -1)\n\t\t\tpurposes.push(\'crl\');\n\t}\n\n\tvar hostSubjects = subjects.filter(function (subject) {\n\t\treturn (subject.type === \'host\');\n\t});\n\tvar userSubjects = subjects.filter(function (subject) {\n\t\treturn (subject.type === \'user\');\n\t});\n\tif (hostSubjects.length > 0) {\n\t\tif (purposes.indexOf(\'serverAuth\') === -1)\n\t\t\tpurposes.push(\'serverAuth\');\n\t}\n\tif (userSubjects.length > 0) {\n\t\tif (purposes.indexOf(\'clientAuth\') === -1)\n\t\t\tpurposes.push(\'clientAuth\');\n\t}\n\tif (userSubjects.length > 0 || hostSubjects.length > 0) {\n\t\tif (purposes.indexOf(\'keyAgreement\') === -1)\n\t\t\tpurposes.push(\'keyAgreement\');\n\t\tif (key.type === \'rsa\' &&\n\t\t purposes.indexOf(\'encryption\') === -1)\n\t\t\tpurposes.push(\'encryption\');\n\t}\n\n\tvar cert = new Certificate({\n\t\tsubjects: subjects,\n\t\tissuer: issuer,\n\t\tsubjectKey: key,\n\t\tissuerKey: issuerKey.toPublic(),\n\t\tsignatures: {},\n\t\tserial: serial,\n\t\tvalidFrom: validFrom,\n\t\tvalidUntil: validUntil,\n\t\tpurposes: purposes\n\t});\n\tcert.signWith(issuerKey);\n\n\treturn (cert);\n};\n\nCertificate.parse = function (data, format, options) {\n\tif (typeof (data) !== \'string\')\n\t\tassert.buffer(data, \'data\');\n\tif (format === undefined)\n\t\tformat = \'auto\';\n\tassert.string(format, \'format\');\n\tif (typeof (options) === \'string\')\n\t\toptions = { filename: options };\n\tassert.optionalObject(options, \'options\');\n\tif (options === undefined)\n\t\toptions = {};\n\tassert.optionalString(options.filename, \'options.filename\');\n\tif (options.filename === undefined)\n\t\toptions.filename = \'(unnamed)\';\n\n\tassert.object(formats[format], \'formats[format]\');\n\n\ttry {\n\t\tvar k = formats[format].read(data, options);\n\t\treturn (k);\n\t} catch (e) {\n\t\tthrow (new CertificateParseError(options.filename, format, e));\n\t}\n};\n\nCertificate.isCertificate = function (obj, ver) {\n\treturn (utils.isCompatible(obj, Certificate, ver));\n};\n\n/*\n * API versions for Certificate:\n * [1,0] -- initial ver\n */\nCertificate.prototype._sshpkApiVersion = [1, 0];\n\nCertificate._oldVersionDetect = function (obj) {\n\treturn ([1, 0]);\n};\n\n\n/***/ }),\n/* 42 */\n/*!*****************************************!*\\\n !*** ./node_modules/ecc-jsbn/lib/ec.js ***!\n \\*****************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Basic Javascript Elliptic Curve implementation\n// Ported loosely from BouncyCastle\'s Java EC code\n// Only Fp curves implemented for now\n\n// Requires jsbn.js and jsbn2.js\nvar BigInteger = __webpack_require__(/*! jsbn */ 25).BigInteger\nvar Barrett = BigInteger.prototype.Barrett\n\n// ----------------\n// ECFieldElementFp\n\n// constructor\nfunction ECFieldElementFp(q,x) {\n this.x = x;\n // TODO if(x.compareTo(q) >= 0) error\n this.q = q;\n}\n\nfunction feFpEquals(other) {\n if(other == this) return true;\n return (this.q.equals(other.q) && this.x.equals(other.x));\n}\n\nfunction feFpToBigInteger() {\n return this.x;\n}\n\nfunction feFpNegate() {\n return new ECFieldElementFp(this.q, this.x.negate().mod(this.q));\n}\n\nfunction feFpAdd(b) {\n return new ECFieldElementFp(this.q, this.x.add(b.toBigInteger()).mod(this.q));\n}\n\nfunction feFpSubtract(b) {\n return new ECFieldElementFp(this.q, this.x.subtract(b.toBigInteger()).mod(this.q));\n}\n\nfunction feFpMultiply(b) {\n return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger()).mod(this.q));\n}\n\nfunction feFpSquare() {\n return new ECFieldElementFp(this.q, this.x.square().mod(this.q));\n}\n\nfunction feFpDivide(b) {\n return new ECFieldElementFp(this.q, this.x.multiply(b.toBigInteger().modInverse(this.q)).mod(this.q));\n}\n\nECFieldElementFp.prototype.equals = feFpEquals;\nECFieldElementFp.prototype.toBigInteger = feFpToBigInteger;\nECFieldElementFp.prototype.negate = feFpNegate;\nECFieldElementFp.prototype.add = feFpAdd;\nECFieldElementFp.prototype.subtract = feFpSubtract;\nECFieldElementFp.prototype.multiply = feFpMultiply;\nECFieldElementFp.prototype.square = feFpSquare;\nECFieldElementFp.prototype.divide = feFpDivide;\n\n// ----------------\n// ECPointFp\n\n// constructor\nfunction ECPointFp(curve,x,y,z) {\n this.curve = curve;\n this.x = x;\n this.y = y;\n // Projective coordinates: either zinv == null or z * zinv == 1\n // z and zinv are just BigIntegers, not fieldElements\n if(z == null) {\n this.z = BigInteger.ONE;\n }\n else {\n this.z = z;\n }\n this.zinv = null;\n //TODO: compression flag\n}\n\nfunction pointFpGetX() {\n if(this.zinv == null) {\n this.zinv = this.z.modInverse(this.curve.q);\n }\n var r = this.x.toBigInteger().multiply(this.zinv);\n this.curve.reduce(r);\n return this.curve.fromBigInteger(r);\n}\n\nfunction pointFpGetY() {\n if(this.zinv == null) {\n this.zinv = this.z.modInverse(this.curve.q);\n }\n var r = this.y.toBigInteger().multiply(this.zinv);\n this.curve.reduce(r);\n return this.curve.fromBigInteger(r);\n}\n\nfunction pointFpEquals(other) {\n if(other == this) return true;\n if(this.isInfinity()) return other.isInfinity();\n if(other.isInfinity()) return this.isInfinity();\n var u, v;\n // u = Y2 * Z1 - Y1 * Z2\n u = other.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(other.z)).mod(this.curve.q);\n if(!u.equals(BigInteger.ZERO)) return false;\n // v = X2 * Z1 - X1 * Z2\n v = other.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(other.z)).mod(this.curve.q);\n return v.equals(BigInteger.ZERO);\n}\n\nfunction pointFpIsInfinity() {\n if((this.x == null) && (this.y == null)) return true;\n return this.z.equals(BigInteger.ZERO) && !this.y.toBigInteger().equals(BigInteger.ZERO);\n}\n\nfunction pointFpNegate() {\n return new ECPointFp(this.curve, this.x, this.y.negate(), this.z);\n}\n\nfunction pointFpAdd(b) {\n if(this.isInfinity()) return b;\n if(b.isInfinity()) return this;\n\n // u = Y2 * Z1 - Y1 * Z2\n var u = b.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(b.z)).mod(this.curve.q);\n // v = X2 * Z1 - X1 * Z2\n var v = b.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(b.z)).mod(this.curve.q);\n\n if(BigInteger.ZERO.equals(v)) {\n if(BigInteger.ZERO.equals(u)) {\n return this.twice(); // this == b, so double\n }\n\treturn this.curve.getInfinity(); // this = -b, so infinity\n }\n\n var THREE = new BigInteger("3");\n var x1 = this.x.toBigInteger();\n var y1 = this.y.toBigInteger();\n var x2 = b.x.toBigInteger();\n var y2 = b.y.toBigInteger();\n\n var v2 = v.square();\n var v3 = v2.multiply(v);\n var x1v2 = x1.multiply(v2);\n var zu2 = u.square().multiply(this.z);\n\n // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)\n var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.q);\n // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3\n var y3 = x1v2.multiply(THREE).multiply(u).subtract(y1.multiply(v3)).subtract(zu2.multiply(u)).multiply(b.z).add(u.multiply(v3)).mod(this.curve.q);\n // z3 = v^3 * z1 * z2\n var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.q);\n\n return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3);\n}\n\nfunction pointFpTwice() {\n if(this.isInfinity()) return this;\n if(this.y.toBigInteger().signum() == 0) return this.curve.getInfinity();\n\n // TODO: optimized handling of constants\n var THREE = new BigInteger("3");\n var x1 = this.x.toBigInteger();\n var y1 = this.y.toBigInteger();\n\n var y1z1 = y1.multiply(this.z);\n var y1sqz1 = y1z1.multiply(y1).mod(this.curve.q);\n var a = this.curve.a.toBigInteger();\n\n // w = 3 * x1^2 + a * z1^2\n var w = x1.square().multiply(THREE);\n if(!BigInteger.ZERO.equals(a)) {\n w = w.add(this.z.square().multiply(a));\n }\n w = w.mod(this.curve.q);\n //this.curve.reduce(w);\n // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)\n var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.q);\n // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3\n var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.square().multiply(w)).mod(this.curve.q);\n // z3 = 8 * (y1 * z1)^3\n var z3 = y1z1.square().multiply(y1z1).shiftLeft(3).mod(this.curve.q);\n\n return new ECPointFp(this.curve, this.curve.fromBigInteger(x3), this.curve.fromBigInteger(y3), z3);\n}\n\n// Simple NAF (Non-Adjacent Form) multiplication algorithm\n// TODO: modularize the multiplication algorithm\nfunction pointFpMultiply(k) {\n if(this.isInfinity()) return this;\n if(k.signum() == 0) return this.curve.getInfinity();\n\n var e = k;\n var h = e.multiply(new BigInteger("3"));\n\n var neg = this.negate();\n var R = this;\n\n var i;\n for(i = h.bitLength() - 2; i > 0; --i) {\n\tR = R.twice();\n\n\tvar hBit = h.testBit(i);\n\tvar eBit = e.testBit(i);\n\n\tif (hBit != eBit) {\n\t R = R.add(hBit ? this : neg);\n\t}\n }\n\n return R;\n}\n\n// Compute this*j + x*k (simultaneous multiplication)\nfunction pointFpMultiplyTwo(j,x,k) {\n var i;\n if(j.bitLength() > k.bitLength())\n i = j.bitLength() - 1;\n else\n i = k.bitLength() - 1;\n\n var R = this.curve.getInfinity();\n var both = this.add(x);\n while(i >= 0) {\n R = R.twice();\n if(j.testBit(i)) {\n if(k.testBit(i)) {\n R = R.add(both);\n }\n else {\n R = R.add(this);\n }\n }\n else {\n if(k.testBit(i)) {\n R = R.add(x);\n }\n }\n --i;\n }\n\n return R;\n}\n\nECPointFp.prototype.getX = pointFpGetX;\nECPointFp.prototype.getY = pointFpGetY;\nECPointFp.prototype.equals = pointFpEquals;\nECPointFp.prototype.isInfinity = pointFpIsInfinity;\nECPointFp.prototype.negate = pointFpNegate;\nECPointFp.prototype.add = pointFpAdd;\nECPointFp.prototype.twice = pointFpTwice;\nECPointFp.prototype.multiply = pointFpMultiply;\nECPointFp.prototype.multiplyTwo = pointFpMultiplyTwo;\n\n// ----------------\n// ECCurveFp\n\n// constructor\nfunction ECCurveFp(q,a,b) {\n this.q = q;\n this.a = this.fromBigInteger(a);\n this.b = this.fromBigInteger(b);\n this.infinity = new ECPointFp(this, null, null);\n this.reducer = new Barrett(this.q);\n}\n\nfunction curveFpGetQ() {\n return this.q;\n}\n\nfunction curveFpGetA() {\n return this.a;\n}\n\nfunction curveFpGetB() {\n return this.b;\n}\n\nfunction curveFpEquals(other) {\n if(other == this) return true;\n return(this.q.equals(other.q) && this.a.equals(other.a) && this.b.equals(other.b));\n}\n\nfunction curveFpGetInfinity() {\n return this.infinity;\n}\n\nfunction curveFpFromBigInteger(x) {\n return new ECFieldElementFp(this.q, x);\n}\n\nfunction curveReduce(x) {\n this.reducer.reduce(x);\n}\n\n// for now, work with hex strings because they\'re easier in JS\nfunction curveFpDecodePointHex(s) {\n switch(parseInt(s.substr(0,2), 16)) { // first byte\n case 0:\n\treturn this.infinity;\n case 2:\n case 3:\n\t// point compression not supported yet\n\treturn null;\n case 4:\n case 6:\n case 7:\n\tvar len = (s.length - 2) / 2;\n\tvar xHex = s.substr(2, len);\n\tvar yHex = s.substr(len+2, len);\n\n\treturn new ECPointFp(this,\n\t\t\t this.fromBigInteger(new BigInteger(xHex, 16)),\n\t\t\t this.fromBigInteger(new BigInteger(yHex, 16)));\n\n default: // unsupported\n\treturn null;\n }\n}\n\nfunction curveFpEncodePointHex(p) {\n\tif (p.isInfinity()) return "00";\n\tvar xHex = p.getX().toBigInteger().toString(16);\n\tvar yHex = p.getY().toBigInteger().toString(16);\n\tvar oLen = this.getQ().toString(16).length;\n\tif ((oLen % 2) != 0) oLen++;\n\twhile (xHex.length < oLen) {\n\t\txHex = "0" + xHex;\n\t}\n\twhile (yHex.length < oLen) {\n\t\tyHex = "0" + yHex;\n\t}\n\treturn "04" + xHex + yHex;\n}\n\nECCurveFp.prototype.getQ = curveFpGetQ;\nECCurveFp.prototype.getA = curveFpGetA;\nECCurveFp.prototype.getB = curveFpGetB;\nECCurveFp.prototype.equals = curveFpEquals;\nECCurveFp.prototype.getInfinity = curveFpGetInfinity;\nECCurveFp.prototype.fromBigInteger = curveFpFromBigInteger;\nECCurveFp.prototype.reduce = curveReduce;\n//ECCurveFp.prototype.decodePointHex = curveFpDecodePointHex;\nECCurveFp.prototype.encodePointHex = curveFpEncodePointHex;\n\n// from: https://github.com/kaielvin/jsbn-ec-point-compression\nECCurveFp.prototype.decodePointHex = function(s)\n{\n\tvar yIsEven;\n switch(parseInt(s.substr(0,2), 16)) { // first byte\n case 0:\n\treturn this.infinity;\n case 2:\n\tyIsEven = false;\n case 3:\n\tif(yIsEven == undefined) yIsEven = true;\n\tvar len = s.length - 2;\n\tvar xHex = s.substr(2, len);\n\tvar x = this.fromBigInteger(new BigInteger(xHex,16));\n\tvar alpha = x.multiply(x.square().add(this.getA())).add(this.getB());\n\tvar beta = alpha.sqrt();\n\n if (beta == null) throw "Invalid point compression";\n\n var betaValue = beta.toBigInteger();\n if (betaValue.testBit(0) != yIsEven)\n {\n // Use the other root\n beta = this.fromBigInteger(this.getQ().subtract(betaValue));\n }\n return new ECPointFp(this,x,beta);\n case 4:\n case 6:\n case 7:\n\tvar len = (s.length - 2) / 2;\n\tvar xHex = s.substr(2, len);\n\tvar yHex = s.substr(len+2, len);\n\n\treturn new ECPointFp(this,\n\t\t\t this.fromBigInteger(new BigInteger(xHex, 16)),\n\t\t\t this.fromBigInteger(new BigInteger(yHex, 16)));\n\n default: // unsupported\n\treturn null;\n }\n}\nECCurveFp.prototype.encodeCompressedPointHex = function(p)\n{\n\tif (p.isInfinity()) return "00";\n\tvar xHex = p.getX().toBigInteger().toString(16);\n\tvar oLen = this.getQ().toString(16).length;\n\tif ((oLen % 2) != 0) oLen++;\n\twhile (xHex.length < oLen)\n\t\txHex = "0" + xHex;\n\tvar yPrefix;\n\tif(p.getY().toBigInteger().isEven()) yPrefix = "02";\n\telse yPrefix = "03";\n\n\treturn yPrefix + xHex;\n}\n\n\nECFieldElementFp.prototype.getR = function()\n{\n\tif(this.r != undefined) return this.r;\n\n this.r = null;\n var bitLength = this.q.bitLength();\n if (bitLength > 128)\n {\n var firstWord = this.q.shiftRight(bitLength - 64);\n if (firstWord.intValue() == -1)\n {\n this.r = BigInteger.ONE.shiftLeft(bitLength).subtract(this.q);\n }\n }\n return this.r;\n}\nECFieldElementFp.prototype.modMult = function(x1,x2)\n{\n return this.modReduce(x1.multiply(x2));\n}\nECFieldElementFp.prototype.modReduce = function(x)\n{\n if (this.getR() != null)\n {\n var qLen = q.bitLength();\n while (x.bitLength() > (qLen + 1))\n {\n var u = x.shiftRight(qLen);\n var v = x.subtract(u.shiftLeft(qLen));\n if (!this.getR().equals(BigInteger.ONE))\n {\n u = u.multiply(this.getR());\n }\n x = u.add(v); \n }\n while (x.compareTo(q) >= 0)\n {\n x = x.subtract(q);\n }\n }\n else\n {\n x = x.mod(q);\n }\n return x;\n}\nECFieldElementFp.prototype.sqrt = function()\n{\n if (!this.q.testBit(0)) throw "unsupported";\n\n // p mod 4 == 3\n if (this.q.testBit(1))\n {\n \tvar z = new ECFieldElementFp(this.q,this.x.modPow(this.q.shiftRight(2).add(BigInteger.ONE),this.q));\n \treturn z.square().equals(this) ? z : null;\n }\n\n // p mod 4 == 1\n var qMinusOne = this.q.subtract(BigInteger.ONE);\n\n var legendreExponent = qMinusOne.shiftRight(1);\n if (!(this.x.modPow(legendreExponent, this.q).equals(BigInteger.ONE)))\n {\n return null;\n }\n\n var u = qMinusOne.shiftRight(2);\n var k = u.shiftLeft(1).add(BigInteger.ONE);\n\n var Q = this.x;\n var fourQ = modDouble(modDouble(Q));\n\n var U, V;\n do\n {\n var P;\n do\n {\n P = new BigInteger(this.q.bitLength(), new SecureRandom());\n }\n while (P.compareTo(this.q) >= 0\n || !(P.multiply(P).subtract(fourQ).modPow(legendreExponent, this.q).equals(qMinusOne)));\n\n var result = this.lucasSequence(P, Q, k);\n U = result[0];\n V = result[1];\n\n if (this.modMult(V, V).equals(fourQ))\n {\n // Integer division by 2, mod q\n if (V.testBit(0))\n {\n V = V.add(q);\n }\n\n V = V.shiftRight(1);\n\n return new ECFieldElementFp(q,V);\n }\n }\n while (U.equals(BigInteger.ONE) || U.equals(qMinusOne));\n\n return null;\n}\nECFieldElementFp.prototype.lucasSequence = function(P,Q,k)\n{\n var n = k.bitLength();\n var s = k.getLowestSetBit();\n\n var Uh = BigInteger.ONE;\n var Vl = BigInteger.TWO;\n var Vh = P;\n var Ql = BigInteger.ONE;\n var Qh = BigInteger.ONE;\n\n for (var j = n - 1; j >= s + 1; --j)\n {\n Ql = this.modMult(Ql, Qh);\n\n if (k.testBit(j))\n {\n Qh = this.modMult(Ql, Q);\n Uh = this.modMult(Uh, Vh);\n Vl = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql)));\n Vh = this.modReduce(Vh.multiply(Vh).subtract(Qh.shiftLeft(1)));\n }\n else\n {\n Qh = Ql;\n Uh = this.modReduce(Uh.multiply(Vl).subtract(Ql));\n Vh = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql)));\n Vl = this.modReduce(Vl.multiply(Vl).subtract(Ql.shiftLeft(1)));\n }\n }\n\n Ql = this.modMult(Ql, Qh);\n Qh = this.modMult(Ql, Q);\n Uh = this.modReduce(Uh.multiply(Vl).subtract(Ql));\n Vl = this.modReduce(Vh.multiply(Vl).subtract(P.multiply(Ql)));\n Ql = this.modMult(Ql, Qh);\n\n for (var j = 1; j <= s; ++j)\n {\n Uh = this.modMult(Uh, Vl);\n Vl = this.modReduce(Vl.multiply(Vl).subtract(Ql.shiftLeft(1)));\n Ql = this.modMult(Ql, Ql);\n }\n\n return [ Uh, Vl ];\n}\n\nvar exports = {\n ECCurveFp: ECCurveFp,\n ECPointFp: ECPointFp,\n ECFieldElementFp: ECFieldElementFp\n}\n\nmodule.exports = exports\n\n\n/***/ }),\n/* 43 */\n/*!*************************************************!*\\\n !*** ./node_modules/sshpk/lib/formats/pkcs8.js ***!\n \\*************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\treadPkcs8: readPkcs8,\n\twrite: write,\n\twritePkcs8: writePkcs8,\n\n\treadECDSACurve: readECDSACurve,\n\twriteECDSACurve: writeECDSACurve\n};\n\nvar assert = __webpack_require__(/*! assert-plus */ 1);\nvar asn1 = __webpack_require__(/*! asn1 */ 21);\nvar Buffer = __webpack_require__(/*! safer-buffer */ 3).Buffer;\nvar algs = __webpack_require__(/*! ../algs */ 8);\nvar utils = __webpack_require__(/*! ../utils */ 6);\nvar Key = __webpack_require__(/*! ../key */ 7);\nvar PrivateKey = __webpack_require__(/*! ../private-key */ 9);\nvar pem = __webpack_require__(/*! ./pem */ 26);\n\nfunction read(buf, options) {\n\treturn (pem.read(buf, options, \'pkcs8\'));\n}\n\nfunction write(key, options) {\n\treturn (pem.write(key, options, \'pkcs8\'));\n}\n\n/* Helper to read in a single mpint */\nfunction readMPInt(der, nm) {\n\tassert.strictEqual(der.peek(), asn1.Ber.Integer,\n\t nm + \' is not an Integer\');\n\treturn (utils.mpNormalize(der.readString(asn1.Ber.Integer, true)));\n}\n\nfunction readPkcs8(alg, type, der) {\n\t/* Private keys in pkcs#8 format have a weird extra int */\n\tif (der.peek() === asn1.Ber.Integer) {\n\t\tassert.strictEqual(type, \'private\',\n\t\t \'unexpected Integer at start of public key\');\n\t\tder.readString(asn1.Ber.Integer, true);\n\t}\n\n\tder.readSequence();\n\tvar next = der.offset + der.length;\n\n\tvar oid = der.readOID();\n\tswitch (oid) {\n\tcase \'1.2.840.113549.1.1.1\':\n\t\tder._offset = next;\n\t\tif (type === \'public\')\n\t\t\treturn (readPkcs8RSAPublic(der));\n\t\telse\n\t\t\treturn (readPkcs8RSAPrivate(der));\n\tcase \'1.2.840.10040.4.1\':\n\t\tif (type === \'public\')\n\t\t\treturn (readPkcs8DSAPublic(der));\n\t\telse\n\t\t\treturn (readPkcs8DSAPrivate(der));\n\tcase \'1.2.840.10045.2.1\':\n\t\tif (type === \'public\')\n\t\t\treturn (readPkcs8ECDSAPublic(der));\n\t\telse\n\t\t\treturn (readPkcs8ECDSAPrivate(der));\n\tcase \'1.3.101.112\':\n\t\tif (type === \'public\') {\n\t\t\treturn (readPkcs8EdDSAPublic(der));\n\t\t} else {\n\t\t\treturn (readPkcs8EdDSAPrivate(der));\n\t\t}\n\tcase \'1.3.101.110\':\n\t\tif (type === \'public\') {\n\t\t\treturn (readPkcs8X25519Public(der));\n\t\t} else {\n\t\t\treturn (readPkcs8X25519Private(der));\n\t\t}\n\tdefault:\n\t\tthrow (new Error(\'Unknown key type OID \' + oid));\n\t}\n}\n\nfunction readPkcs8RSAPublic(der) {\n\t// bit string sequence\n\tder.readSequence(asn1.Ber.BitString);\n\tder.readByte();\n\tder.readSequence();\n\n\t// modulus\n\tvar n = readMPInt(der, \'modulus\');\n\tvar e = readMPInt(der, \'exponent\');\n\n\t// now, make the key\n\tvar key = {\n\t\ttype: \'rsa\',\n\t\tsource: der.originalInput,\n\t\tparts: [\n\t\t\t{ name: \'e\', data: e },\n\t\t\t{ name: \'n\', data: n }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs8RSAPrivate(der) {\n\tder.readSequence(asn1.Ber.OctetString);\n\tder.readSequence();\n\n\tvar ver = readMPInt(der, \'version\');\n\tassert.equal(ver[0], 0x0, \'unknown RSA private key version\');\n\n\t// modulus then public exponent\n\tvar n = readMPInt(der, \'modulus\');\n\tvar e = readMPInt(der, \'public exponent\');\n\tvar d = readMPInt(der, \'private exponent\');\n\tvar p = readMPInt(der, \'prime1\');\n\tvar q = readMPInt(der, \'prime2\');\n\tvar dmodp = readMPInt(der, \'exponent1\');\n\tvar dmodq = readMPInt(der, \'exponent2\');\n\tvar iqmp = readMPInt(der, \'iqmp\');\n\n\t// now, make the key\n\tvar key = {\n\t\ttype: \'rsa\',\n\t\tparts: [\n\t\t\t{ name: \'n\', data: n },\n\t\t\t{ name: \'e\', data: e },\n\t\t\t{ name: \'d\', data: d },\n\t\t\t{ name: \'iqmp\', data: iqmp },\n\t\t\t{ name: \'p\', data: p },\n\t\t\t{ name: \'q\', data: q },\n\t\t\t{ name: \'dmodp\', data: dmodp },\n\t\t\t{ name: \'dmodq\', data: dmodq }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readPkcs8DSAPublic(der) {\n\tder.readSequence();\n\n\tvar p = readMPInt(der, \'p\');\n\tvar q = readMPInt(der, \'q\');\n\tvar g = readMPInt(der, \'g\');\n\n\t// bit string sequence\n\tder.readSequence(asn1.Ber.BitString);\n\tder.readByte();\n\n\tvar y = readMPInt(der, \'y\');\n\n\t// now, make the key\n\tvar key = {\n\t\ttype: \'dsa\',\n\t\tparts: [\n\t\t\t{ name: \'p\', data: p },\n\t\t\t{ name: \'q\', data: q },\n\t\t\t{ name: \'g\', data: g },\n\t\t\t{ name: \'y\', data: y }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs8DSAPrivate(der) {\n\tder.readSequence();\n\n\tvar p = readMPInt(der, \'p\');\n\tvar q = readMPInt(der, \'q\');\n\tvar g = readMPInt(der, \'g\');\n\n\tder.readSequence(asn1.Ber.OctetString);\n\tvar x = readMPInt(der, \'x\');\n\n\t/* The pkcs#8 format does not include the public key */\n\tvar y = utils.calculateDSAPublic(g, p, x);\n\n\tvar key = {\n\t\ttype: \'dsa\',\n\t\tparts: [\n\t\t\t{ name: \'p\', data: p },\n\t\t\t{ name: \'q\', data: q },\n\t\t\t{ name: \'g\', data: g },\n\t\t\t{ name: \'y\', data: y },\n\t\t\t{ name: \'x\', data: x }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readECDSACurve(der) {\n\tvar curveName, curveNames;\n\tvar j, c, cd;\n\n\tif (der.peek() === asn1.Ber.OID) {\n\t\tvar oid = der.readOID();\n\n\t\tcurveNames = Object.keys(algs.curves);\n\t\tfor (j = 0; j < curveNames.length; ++j) {\n\t\t\tc = curveNames[j];\n\t\t\tcd = algs.curves[c];\n\t\t\tif (cd.pkcs8oid === oid) {\n\t\t\t\tcurveName = c;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t} else {\n\t\t// ECParameters sequence\n\t\tder.readSequence();\n\t\tvar version = der.readString(asn1.Ber.Integer, true);\n\t\tassert.strictEqual(version[0], 1, \'ECDSA key not version 1\');\n\n\t\tvar curve = {};\n\n\t\t// FieldID sequence\n\t\tder.readSequence();\n\t\tvar fieldTypeOid = der.readOID();\n\t\tassert.strictEqual(fieldTypeOid, \'1.2.840.10045.1.1\',\n\t\t \'ECDSA key is not from a prime-field\');\n\t\tvar p = curve.p = utils.mpNormalize(\n\t\t der.readString(asn1.Ber.Integer, true));\n\t\t/*\n\t\t * p always starts with a 1 bit, so count the zeros to get its\n\t\t * real size.\n\t\t */\n\t\tcurve.size = p.length * 8 - utils.countZeros(p);\n\n\t\t// Curve sequence\n\t\tder.readSequence();\n\t\tcurve.a = utils.mpNormalize(\n\t\t der.readString(asn1.Ber.OctetString, true));\n\t\tcurve.b = utils.mpNormalize(\n\t\t der.readString(asn1.Ber.OctetString, true));\n\t\tif (der.peek() === asn1.Ber.BitString)\n\t\t\tcurve.s = der.readString(asn1.Ber.BitString, true);\n\n\t\t// Combined Gx and Gy\n\t\tcurve.G = der.readString(asn1.Ber.OctetString, true);\n\t\tassert.strictEqual(curve.G[0], 0x4,\n\t\t \'uncompressed G is required\');\n\n\t\tcurve.n = utils.mpNormalize(\n\t\t der.readString(asn1.Ber.Integer, true));\n\t\tcurve.h = utils.mpNormalize(\n\t\t der.readString(asn1.Ber.Integer, true));\n\t\tassert.strictEqual(curve.h[0], 0x1, \'a cofactor=1 curve is \' +\n\t\t \'required\');\n\n\t\tcurveNames = Object.keys(algs.curves);\n\t\tvar ks = Object.keys(curve);\n\t\tfor (j = 0; j < curveNames.length; ++j) {\n\t\t\tc = curveNames[j];\n\t\t\tcd = algs.curves[c];\n\t\t\tvar equal = true;\n\t\t\tfor (var i = 0; i < ks.length; ++i) {\n\t\t\t\tvar k = ks[i];\n\t\t\t\tif (cd[k] === undefined)\n\t\t\t\t\tcontinue;\n\t\t\t\tif (typeof (cd[k]) === \'object\' &&\n\t\t\t\t cd[k].equals !== undefined) {\n\t\t\t\t\tif (!cd[k].equals(curve[k])) {\n\t\t\t\t\t\tequal = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else if (Buffer.isBuffer(cd[k])) {\n\t\t\t\t\tif (cd[k].toString(\'binary\')\n\t\t\t\t\t !== curve[k].toString(\'binary\')) {\n\t\t\t\t\t\tequal = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (cd[k] !== curve[k]) {\n\t\t\t\t\t\tequal = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (equal) {\n\t\t\t\tcurveName = c;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn (curveName);\n}\n\nfunction readPkcs8ECDSAPrivate(der) {\n\tvar curveName = readECDSACurve(der);\n\tassert.string(curveName, \'a known elliptic curve\');\n\n\tder.readSequence(asn1.Ber.OctetString);\n\tder.readSequence();\n\n\tvar version = readMPInt(der, \'version\');\n\tassert.equal(version[0], 1, \'unknown version of ECDSA key\');\n\n\tvar d = der.readString(asn1.Ber.OctetString, true);\n\tder.readSequence(0xa1);\n\n\tvar Q = der.readString(asn1.Ber.BitString, true);\n\tQ = utils.ecNormalize(Q);\n\n\tvar key = {\n\t\ttype: \'ecdsa\',\n\t\tparts: [\n\t\t\t{ name: \'curve\', data: Buffer.from(curveName) },\n\t\t\t{ name: \'Q\', data: Q },\n\t\t\t{ name: \'d\', data: d }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readPkcs8ECDSAPublic(der) {\n\tvar curveName = readECDSACurve(der);\n\tassert.string(curveName, \'a known elliptic curve\');\n\n\tvar Q = der.readString(asn1.Ber.BitString, true);\n\tQ = utils.ecNormalize(Q);\n\n\tvar key = {\n\t\ttype: \'ecdsa\',\n\t\tparts: [\n\t\t\t{ name: \'curve\', data: Buffer.from(curveName) },\n\t\t\t{ name: \'Q\', data: Q }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs8EdDSAPublic(der) {\n\tif (der.peek() === 0x00)\n\t\tder.readByte();\n\n\tvar A = utils.readBitString(der);\n\n\tvar key = {\n\t\ttype: \'ed25519\',\n\t\tparts: [\n\t\t\t{ name: \'A\', data: utils.zeroPadToLength(A, 32) }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs8X25519Public(der) {\n\tvar A = utils.readBitString(der);\n\n\tvar key = {\n\t\ttype: \'curve25519\',\n\t\tparts: [\n\t\t\t{ name: \'A\', data: utils.zeroPadToLength(A, 32) }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs8EdDSAPrivate(der) {\n\tif (der.peek() === 0x00)\n\t\tder.readByte();\n\n\tder.readSequence(asn1.Ber.OctetString);\n\tvar k = der.readString(asn1.Ber.OctetString, true);\n\tk = utils.zeroPadToLength(k, 32);\n\n\tvar A;\n\tif (der.peek() === asn1.Ber.BitString) {\n\t\tA = utils.readBitString(der);\n\t\tA = utils.zeroPadToLength(A, 32);\n\t} else {\n\t\tA = utils.calculateED25519Public(k);\n\t}\n\n\tvar key = {\n\t\ttype: \'ed25519\',\n\t\tparts: [\n\t\t\t{ name: \'A\', data: utils.zeroPadToLength(A, 32) },\n\t\t\t{ name: \'k\', data: utils.zeroPadToLength(k, 32) }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readPkcs8X25519Private(der) {\n\tif (der.peek() === 0x00)\n\t\tder.readByte();\n\n\tder.readSequence(asn1.Ber.OctetString);\n\tvar k = der.readString(asn1.Ber.OctetString, true);\n\tk = utils.zeroPadToLength(k, 32);\n\n\tvar A = utils.calculateX25519Public(k);\n\n\tvar key = {\n\t\ttype: \'curve25519\',\n\t\tparts: [\n\t\t\t{ name: \'A\', data: utils.zeroPadToLength(A, 32) },\n\t\t\t{ name: \'k\', data: utils.zeroPadToLength(k, 32) }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction writePkcs8(der, key) {\n\tder.startSequence();\n\n\tif (PrivateKey.isPrivateKey(key)) {\n\t\tvar sillyInt = Buffer.from([0]);\n\t\tder.writeBuffer(sillyInt, asn1.Ber.Integer);\n\t}\n\n\tder.startSequence();\n\tswitch (key.type) {\n\tcase \'rsa\':\n\t\tder.writeOID(\'1.2.840.113549.1.1.1\');\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs8RSAPrivate(key, der);\n\t\telse\n\t\t\twritePkcs8RSAPublic(key, der);\n\t\tbreak;\n\tcase \'dsa\':\n\t\tder.writeOID(\'1.2.840.10040.4.1\');\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs8DSAPrivate(key, der);\n\t\telse\n\t\t\twritePkcs8DSAPublic(key, der);\n\t\tbreak;\n\tcase \'ecdsa\':\n\t\tder.writeOID(\'1.2.840.10045.2.1\');\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs8ECDSAPrivate(key, der);\n\t\telse\n\t\t\twritePkcs8ECDSAPublic(key, der);\n\t\tbreak;\n\tcase \'ed25519\':\n\t\tder.writeOID(\'1.3.101.112\');\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\tthrow (new Error(\'Ed25519 private keys in pkcs8 \' +\n\t\t\t \'format are not supported\'));\n\t\twritePkcs8EdDSAPublic(key, der);\n\t\tbreak;\n\tdefault:\n\t\tthrow (new Error(\'Unsupported key type: \' + key.type));\n\t}\n\n\tder.endSequence();\n}\n\nfunction writePkcs8RSAPrivate(key, der) {\n\tder.writeNull();\n\tder.endSequence();\n\n\tder.startSequence(asn1.Ber.OctetString);\n\tder.startSequence();\n\n\tvar version = Buffer.from([0]);\n\tder.writeBuffer(version, asn1.Ber.Integer);\n\n\tder.writeBuffer(key.part.n.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.e.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.d.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n\tif (!key.part.dmodp || !key.part.dmodq)\n\t\tutils.addRSAMissing(key);\n\tder.writeBuffer(key.part.dmodp.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.dmodq.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.iqmp.data, asn1.Ber.Integer);\n\n\tder.endSequence();\n\tder.endSequence();\n}\n\nfunction writePkcs8RSAPublic(key, der) {\n\tder.writeNull();\n\tder.endSequence();\n\n\tder.startSequence(asn1.Ber.BitString);\n\tder.writeByte(0x00);\n\n\tder.startSequence();\n\tder.writeBuffer(key.part.n.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.e.data, asn1.Ber.Integer);\n\tder.endSequence();\n\n\tder.endSequence();\n}\n\nfunction writePkcs8DSAPrivate(key, der) {\n\tder.startSequence();\n\tder.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.g.data, asn1.Ber.Integer);\n\tder.endSequence();\n\n\tder.endSequence();\n\n\tder.startSequence(asn1.Ber.OctetString);\n\tder.writeBuffer(key.part.x.data, asn1.Ber.Integer);\n\tder.endSequence();\n}\n\nfunction writePkcs8DSAPublic(key, der) {\n\tder.startSequence();\n\tder.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.g.data, asn1.Ber.Integer);\n\tder.endSequence();\n\tder.endSequence();\n\n\tder.startSequence(asn1.Ber.BitString);\n\tder.writeByte(0x00);\n\tder.writeBuffer(key.part.y.data, asn1.Ber.Integer);\n\tder.endSequence();\n}\n\nfunction writeECDSACurve(key, der) {\n\tvar curve = algs.curves[key.curve];\n\tif (curve.pkcs8oid) {\n\t\t/* This one has a name in pkcs#8, so just write the oid */\n\t\tder.writeOID(curve.pkcs8oid);\n\n\t} else {\n\t\t// ECParameters sequence\n\t\tder.startSequence();\n\n\t\tvar version = Buffer.from([1]);\n\t\tder.writeBuffer(version, asn1.Ber.Integer);\n\n\t\t// FieldID sequence\n\t\tder.startSequence();\n\t\tder.writeOID(\'1.2.840.10045.1.1\'); // prime-field\n\t\tder.writeBuffer(curve.p, asn1.Ber.Integer);\n\t\tder.endSequence();\n\n\t\t// Curve sequence\n\t\tder.startSequence();\n\t\tvar a = curve.p;\n\t\tif (a[0] === 0x0)\n\t\t\ta = a.slice(1);\n\t\tder.writeBuffer(a, asn1.Ber.OctetString);\n\t\tder.writeBuffer(curve.b, asn1.Ber.OctetString);\n\t\tder.writeBuffer(curve.s, asn1.Ber.BitString);\n\t\tder.endSequence();\n\n\t\tder.writeBuffer(curve.G, asn1.Ber.OctetString);\n\t\tder.writeBuffer(curve.n, asn1.Ber.Integer);\n\t\tvar h = curve.h;\n\t\tif (!h) {\n\t\t\th = Buffer.from([1]);\n\t\t}\n\t\tder.writeBuffer(h, asn1.Ber.Integer);\n\n\t\t// ECParameters\n\t\tder.endSequence();\n\t}\n}\n\nfunction writePkcs8ECDSAPublic(key, der) {\n\twriteECDSACurve(key, der);\n\tder.endSequence();\n\n\tvar Q = utils.ecNormalize(key.part.Q.data, true);\n\tder.writeBuffer(Q, asn1.Ber.BitString);\n}\n\nfunction writePkcs8ECDSAPrivate(key, der) {\n\twriteECDSACurve(key, der);\n\tder.endSequence();\n\n\tder.startSequence(asn1.Ber.OctetString);\n\tder.startSequence();\n\n\tvar version = Buffer.from([1]);\n\tder.writeBuffer(version, asn1.Ber.Integer);\n\n\tder.writeBuffer(key.part.d.data, asn1.Ber.OctetString);\n\n\tder.startSequence(0xa1);\n\tvar Q = utils.ecNormalize(key.part.Q.data, true);\n\tder.writeBuffer(Q, asn1.Ber.BitString);\n\tder.endSequence();\n\n\tder.endSequence();\n\tder.endSequence();\n}\n\nfunction writePkcs8EdDSAPublic(key, der) {\n\tder.endSequence();\n\n\tutils.writeBitString(der, key.part.A.data);\n}\n\nfunction writePkcs8EdDSAPrivate(key, der) {\n\tder.endSequence();\n\n\tvar k = utils.mpNormalize(key.part.k.data, true);\n\tder.startSequence(asn1.Ber.OctetString);\n\tder.writeBuffer(k, asn1.Ber.OctetString);\n\tder.endSequence();\n}\n\n\n/***/ }),\n/* 44 */\n/*!**********************************************!*\\\n !*** ./node_modules/sshpk/lib/ssh-buffer.js ***!\n \\**********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2015 Joyent, Inc.\n\nmodule.exports = SSHBuffer;\n\nvar assert = __webpack_require__(/*! assert-plus */ 1);\nvar Buffer = __webpack_require__(/*! safer-buffer */ 3).Buffer;\n\nfunction SSHBuffer(opts) {\n\tassert.object(opts, \'options\');\n\tif (opts.buffer !== undefined)\n\t\tassert.buffer(opts.buffer, \'options.buffer\');\n\n\tthis._size = opts.buffer ? opts.buffer.length : 1024;\n\tthis._buffer = opts.buffer || Buffer.alloc(this._size);\n\tthis._offset = 0;\n}\n\nSSHBuffer.prototype.toBuffer = function () {\n\treturn (this._buffer.slice(0, this._offset));\n};\n\nSSHBuffer.prototype.atEnd = function () {\n\treturn (this._offset >= this._buffer.length);\n};\n\nSSHBuffer.prototype.remainder = function () {\n\treturn (this._buffer.slice(this._offset));\n};\n\nSSHBuffer.prototype.skip = function (n) {\n\tthis._offset += n;\n};\n\nSSHBuffer.prototype.expand = function () {\n\tthis._size *= 2;\n\tvar buf = Buffer.alloc(this._size);\n\tthis._buffer.copy(buf, 0);\n\tthis._buffer = buf;\n};\n\nSSHBuffer.prototype.readPart = function () {\n\treturn ({data: this.readBuffer()});\n};\n\nSSHBuffer.prototype.readBuffer = function () {\n\tvar len = this._buffer.readUInt32BE(this._offset);\n\tthis._offset += 4;\n\tassert.ok(this._offset + len <= this._buffer.length,\n\t \'length out of bounds at +0x\' + this._offset.toString(16) +\n\t \' (data truncated?)\');\n\tvar buf = this._buffer.slice(this._offset, this._offset + len);\n\tthis._offset += len;\n\treturn (buf);\n};\n\nSSHBuffer.prototype.readString = function () {\n\treturn (this.readBuffer().toString());\n};\n\nSSHBuffer.prototype.readCString = function () {\n\tvar offset = this._offset;\n\twhile (offset < this._buffer.length &&\n\t this._buffer[offset] !== 0x00)\n\t\toffset++;\n\tassert.ok(offset < this._buffer.length, \'c string does not terminate\');\n\tvar str = this._buffer.slice(this._offset, offset).toString();\n\tthis._offset = offset + 1;\n\treturn (str);\n};\n\nSSHBuffer.prototype.readInt = function () {\n\tvar v = this._buffer.readUInt32BE(this._offset);\n\tthis._offset += 4;\n\treturn (v);\n};\n\nSSHBuffer.prototype.readInt64 = function () {\n\tassert.ok(this._offset + 8 < this._buffer.length,\n\t \'buffer not long enough to read Int64\');\n\tvar v = this._buffer.slice(this._offset, this._offset + 8);\n\tthis._offset += 8;\n\treturn (v);\n};\n\nSSHBuffer.prototype.readChar = function () {\n\tvar v = this._buffer[this._offset++];\n\treturn (v);\n};\n\nSSHBuffer.prototype.writeBuffer = function (buf) {\n\twhile (this._offset + 4 + buf.length > this._size)\n\t\tthis.expand();\n\tthis._buffer.writeUInt32BE(buf.length, this._offset);\n\tthis._offset += 4;\n\tbuf.copy(this._buffer, this._offset);\n\tthis._offset += buf.length;\n};\n\nSSHBuffer.prototype.writeString = function (str) {\n\tthis.writeBuffer(Buffer.from(str, \'utf8\'));\n};\n\nSSHBuffer.prototype.writeCString = function (str) {\n\twhile (this._offset + 1 + str.length > this._size)\n\t\tthis.expand();\n\tthis._buffer.write(str, this._offset);\n\tthis._offset += str.length;\n\tthis._buffer[this._offset++] = 0;\n};\n\nSSHBuffer.prototype.writeInt = function (v) {\n\twhile (this._offset + 4 > this._size)\n\t\tthis.expand();\n\tthis._buffer.writeUInt32BE(v, this._offset);\n\tthis._offset += 4;\n};\n\nSSHBuffer.prototype.writeInt64 = function (v) {\n\tassert.buffer(v, \'value\');\n\tif (v.length > 8) {\n\t\tvar lead = v.slice(0, v.length - 8);\n\t\tfor (var i = 0; i < lead.length; ++i) {\n\t\t\tassert.strictEqual(lead[i], 0,\n\t\t\t \'must fit in 64 bits of precision\');\n\t\t}\n\t\tv = v.slice(v.length - 8, v.length);\n\t}\n\twhile (this._offset + 8 > this._size)\n\t\tthis.expand();\n\tv.copy(this._buffer, this._offset);\n\tthis._offset += 8;\n};\n\nSSHBuffer.prototype.writeChar = function (v) {\n\twhile (this._offset + 1 > this._size)\n\t\tthis.expand();\n\tthis._buffer[this._offset++] = v;\n};\n\nSSHBuffer.prototype.writePart = function (p) {\n\tthis.writeBuffer(p.data);\n};\n\nSSHBuffer.prototype.write = function (buf) {\n\twhile (this._offset + buf.length > this._size)\n\t\tthis.expand();\n\tbuf.copy(this._buffer, this._offset);\n\tthis._offset += buf.length;\n};\n\n\n/***/ }),\n/* 45 */\n/*!********************************************!*\\\n !*** ./node_modules/sshpk/lib/identity.js ***!\n \\********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2017 Joyent, Inc.\n\nmodule.exports = Identity;\n\nvar assert = __webpack_require__(/*! assert-plus */ 1);\nvar algs = __webpack_require__(/*! ./algs */ 8);\nvar crypto = __webpack_require__(/*! crypto */ 2);\nvar Fingerprint = __webpack_require__(/*! ./fingerprint */ 40);\nvar Signature = __webpack_require__(/*! ./signature */ 19);\nvar errs = __webpack_require__(/*! ./errors */ 18);\nvar util = __webpack_require__(/*! util */ 4);\nvar utils = __webpack_require__(/*! ./utils */ 6);\nvar asn1 = __webpack_require__(/*! asn1 */ 21);\nvar Buffer = __webpack_require__(/*! safer-buffer */ 3).Buffer;\n\n/*JSSTYLED*/\nvar DNS_NAME_RE = /^([*]|[a-z0-9][a-z0-9\\-]{0,62})(?:\\.([*]|[a-z0-9][a-z0-9\\-]{0,62}))*$/i;\n\nvar oids = {};\noids.cn = \'2.5.4.3\';\noids.o = \'2.5.4.10\';\noids.ou = \'2.5.4.11\';\noids.l = \'2.5.4.7\';\noids.s = \'2.5.4.8\';\noids.c = \'2.5.4.6\';\noids.sn = \'2.5.4.4\';\noids.dc = \'0.9.2342.19200300.100.1.25\';\noids.uid = \'0.9.2342.19200300.100.1.1\';\noids.mail = \'0.9.2342.19200300.100.1.3\';\n\nvar unoids = {};\nObject.keys(oids).forEach(function (k) {\n\tunoids[oids[k]] = k;\n});\n\nfunction Identity(opts) {\n\tvar self = this;\n\tassert.object(opts, \'options\');\n\tassert.arrayOfObject(opts.components, \'options.components\');\n\tthis.components = opts.components;\n\tthis.componentLookup = {};\n\tthis.components.forEach(function (c) {\n\t\tif (c.name && !c.oid)\n\t\t\tc.oid = oids[c.name];\n\t\tif (c.oid && !c.name)\n\t\t\tc.name = unoids[c.oid];\n\t\tif (self.componentLookup[c.name] === undefined)\n\t\t\tself.componentLookup[c.name] = [];\n\t\tself.componentLookup[c.name].push(c);\n\t});\n\tif (this.componentLookup.cn && this.componentLookup.cn.length > 0) {\n\t\tthis.cn = this.componentLookup.cn[0].value;\n\t}\n\tassert.optionalString(opts.type, \'options.type\');\n\tif (opts.type === undefined) {\n\t\tif (this.components.length === 1 &&\n\t\t this.componentLookup.cn &&\n\t\t this.componentLookup.cn.length === 1 &&\n\t\t this.componentLookup.cn[0].value.match(DNS_NAME_RE)) {\n\t\t\tthis.type = \'host\';\n\t\t\tthis.hostname = this.componentLookup.cn[0].value;\n\n\t\t} else if (this.componentLookup.dc &&\n\t\t this.components.length === this.componentLookup.dc.length) {\n\t\t\tthis.type = \'host\';\n\t\t\tthis.hostname = this.componentLookup.dc.map(\n\t\t\t function (c) {\n\t\t\t\treturn (c.value);\n\t\t\t}).join(\'.\');\n\n\t\t} else if (this.componentLookup.uid &&\n\t\t this.components.length ===\n\t\t this.componentLookup.uid.length) {\n\t\t\tthis.type = \'user\';\n\t\t\tthis.uid = this.componentLookup.uid[0].value;\n\n\t\t} else if (this.componentLookup.cn &&\n\t\t this.componentLookup.cn.length === 1 &&\n\t\t this.componentLookup.cn[0].value.match(DNS_NAME_RE)) {\n\t\t\tthis.type = \'host\';\n\t\t\tthis.hostname = this.componentLookup.cn[0].value;\n\n\t\t} else if (this.componentLookup.uid &&\n\t\t this.componentLookup.uid.length === 1) {\n\t\t\tthis.type = \'user\';\n\t\t\tthis.uid = this.componentLookup.uid[0].value;\n\n\t\t} else if (this.componentLookup.mail &&\n\t\t this.componentLookup.mail.length === 1) {\n\t\t\tthis.type = \'email\';\n\t\t\tthis.email = this.componentLookup.mail[0].value;\n\n\t\t} else if (this.componentLookup.cn &&\n\t\t this.componentLookup.cn.length === 1) {\n\t\t\tthis.type = \'user\';\n\t\t\tthis.uid = this.componentLookup.cn[0].value;\n\n\t\t} else {\n\t\t\tthis.type = \'unknown\';\n\t\t}\n\t} else {\n\t\tthis.type = opts.type;\n\t\tif (this.type === \'host\')\n\t\t\tthis.hostname = opts.hostname;\n\t\telse if (this.type === \'user\')\n\t\t\tthis.uid = opts.uid;\n\t\telse if (this.type === \'email\')\n\t\t\tthis.email = opts.email;\n\t\telse\n\t\t\tthrow (new Error(\'Unknown type \' + this.type));\n\t}\n}\n\nIdentity.prototype.toString = function () {\n\treturn (this.components.map(function (c) {\n\t\treturn (c.name.toUpperCase() + \'=\' + c.value);\n\t}).join(\', \'));\n};\n\n/*\n * These are from X.680 -- PrintableString allowed chars are in section 37.4\n * table 8. Spec for IA5Strings is "1,6 + SPACE + DEL" where 1 refers to\n * ISO IR #001 (standard ASCII control characters) and 6 refers to ISO IR #006\n * (the basic ASCII character set).\n */\n/* JSSTYLED */\nvar NOT_PRINTABLE = /[^a-zA-Z0-9 \'(),+.\\/:=?-]/;\n/* JSSTYLED */\nvar NOT_IA5 = /[^\\x00-\\x7f]/;\n\nIdentity.prototype.toAsn1 = function (der, tag) {\n\tder.startSequence(tag);\n\tthis.components.forEach(function (c) {\n\t\tder.startSequence(asn1.Ber.Constructor | asn1.Ber.Set);\n\t\tder.startSequence();\n\t\tder.writeOID(c.oid);\n\t\t/*\n\t\t * If we fit in a PrintableString, use that. Otherwise use an\n\t\t * IA5String or UTF8String.\n\t\t *\n\t\t * If this identity was parsed from a DN, use the ASN.1 types\n\t\t * from the original representation (otherwise this might not\n\t\t * be a full match for the original in some validators).\n\t\t */\n\t\tif (c.asn1type === asn1.Ber.Utf8String ||\n\t\t c.value.match(NOT_IA5)) {\n\t\t\tvar v = Buffer.from(c.value, \'utf8\');\n\t\t\tder.writeBuffer(v, asn1.Ber.Utf8String);\n\n\t\t} else if (c.asn1type === asn1.Ber.IA5String ||\n\t\t c.value.match(NOT_PRINTABLE)) {\n\t\t\tder.writeString(c.value, asn1.Ber.IA5String);\n\n\t\t} else {\n\t\t\tvar type = asn1.Ber.PrintableString;\n\t\t\tif (c.asn1type !== undefined)\n\t\t\t\ttype = c.asn1type;\n\t\t\tder.writeString(c.value, type);\n\t\t}\n\t\tder.endSequence();\n\t\tder.endSequence();\n\t});\n\tder.endSequence();\n};\n\nfunction globMatch(a, b) {\n\tif (a === \'**\' || b === \'**\')\n\t\treturn (true);\n\tvar aParts = a.split(\'.\');\n\tvar bParts = b.split(\'.\');\n\tif (aParts.length !== bParts.length)\n\t\treturn (false);\n\tfor (var i = 0; i < aParts.length; ++i) {\n\t\tif (aParts[i] === \'*\' || bParts[i] === \'*\')\n\t\t\tcontinue;\n\t\tif (aParts[i] !== bParts[i])\n\t\t\treturn (false);\n\t}\n\treturn (true);\n}\n\nIdentity.prototype.equals = function (other) {\n\tif (!Identity.isIdentity(other, [1, 0]))\n\t\treturn (false);\n\tif (other.components.length !== this.components.length)\n\t\treturn (false);\n\tfor (var i = 0; i < this.components.length; ++i) {\n\t\tif (this.components[i].oid !== other.components[i].oid)\n\t\t\treturn (false);\n\t\tif (!globMatch(this.components[i].value,\n\t\t other.components[i].value)) {\n\t\t\treturn (false);\n\t\t}\n\t}\n\treturn (true);\n};\n\nIdentity.forHost = function (hostname) {\n\tassert.string(hostname, \'hostname\');\n\treturn (new Identity({\n\t\ttype: \'host\',\n\t\thostname: hostname,\n\t\tcomponents: [ { name: \'cn\', value: hostname } ]\n\t}));\n};\n\nIdentity.forUser = function (uid) {\n\tassert.string(uid, \'uid\');\n\treturn (new Identity({\n\t\ttype: \'user\',\n\t\tuid: uid,\n\t\tcomponents: [ { name: \'uid\', value: uid } ]\n\t}));\n};\n\nIdentity.forEmail = function (email) {\n\tassert.string(email, \'email\');\n\treturn (new Identity({\n\t\ttype: \'email\',\n\t\temail: email,\n\t\tcomponents: [ { name: \'mail\', value: email } ]\n\t}));\n};\n\nIdentity.parseDN = function (dn) {\n\tassert.string(dn, \'dn\');\n\tvar parts = dn.split(\',\');\n\tvar cmps = parts.map(function (c) {\n\t\tc = c.trim();\n\t\tvar eqPos = c.indexOf(\'=\');\n\t\tvar name = c.slice(0, eqPos).toLowerCase();\n\t\tvar value = c.slice(eqPos + 1);\n\t\treturn ({ name: name, value: value });\n\t});\n\treturn (new Identity({ components: cmps }));\n};\n\nIdentity.parseAsn1 = function (der, top) {\n\tvar components = [];\n\tder.readSequence(top);\n\tvar end = der.offset + der.length;\n\twhile (der.offset < end) {\n\t\tder.readSequence(asn1.Ber.Constructor | asn1.Ber.Set);\n\t\tvar after = der.offset + der.length;\n\t\tder.readSequence();\n\t\tvar oid = der.readOID();\n\t\tvar type = der.peek();\n\t\tvar value;\n\t\tswitch (type) {\n\t\tcase asn1.Ber.PrintableString:\n\t\tcase asn1.Ber.IA5String:\n\t\tcase asn1.Ber.OctetString:\n\t\tcase asn1.Ber.T61String:\n\t\t\tvalue = der.readString(type);\n\t\t\tbreak;\n\t\tcase asn1.Ber.Utf8String:\n\t\t\tvalue = der.readString(type, true);\n\t\t\tvalue = value.toString(\'utf8\');\n\t\t\tbreak;\n\t\tcase asn1.Ber.CharacterString:\n\t\tcase asn1.Ber.BMPString:\n\t\t\tvalue = der.readString(type, true);\n\t\t\tvalue = value.toString(\'utf16le\');\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tthrow (new Error(\'Unknown asn1 type \' + type));\n\t\t}\n\t\tcomponents.push({ oid: oid, asn1type: type, value: value });\n\t\tder._offset = after;\n\t}\n\tder._offset = end;\n\treturn (new Identity({\n\t\tcomponents: components\n\t}));\n};\n\nIdentity.isIdentity = function (obj, ver) {\n\treturn (utils.isCompatible(obj, Identity, ver));\n};\n\n/*\n * API versions for Identity:\n * [1,0] -- initial ver\n */\nIdentity.prototype._sshpkApiVersion = [1, 0];\n\nIdentity._oldVersionDetect = function (obj) {\n\treturn ([1, 0]);\n};\n\n\n/***/ }),\n/* 46 */\n/*!*********************************!*\\\n !*** external "@angular/forms" ***!\n \\*********************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__46__;\n\n/***/ }),\n/* 47 */\n/*!*****************************************!*\\\n !*** ./src/services/hotkeys.service.ts ***!\n \\*****************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, "__esModule", { value: true });\nconst core_1 = __webpack_require__(/*! @angular/core */ 0);\nconst hotkeyProvider_1 = __webpack_require__(/*! ../api/hotkeyProvider */ 56);\nconst hotkeys_util_1 = __webpack_require__(/*! ./hotkeys.util */ 142);\nconst config_service_1 = __webpack_require__(/*! ../services/config.service */ 15);\nconst electron_service_1 = __webpack_require__(/*! ../services/electron.service */ 14);\nconst KEY_TIMEOUT = 2000;\nlet HotkeysService = class HotkeysService {\n constructor(zone, electron, config, hotkeyProviders) {\n this.zone = zone;\n this.electron = electron;\n this.config = config;\n this.hotkeyProviders = hotkeyProviders;\n this.key = new core_1.EventEmitter();\n this.matchedHotkey = new core_1.EventEmitter();\n this.globalHotkey = new core_1.EventEmitter();\n this.currentKeystrokes = [];\n this.disabledLevel = 0;\n this.hotkeyDescriptions = [];\n let events = [\'keydown\', \'keyup\'];\n events.forEach((event) => {\n document.addEventListener(event, (nativeEvent) => {\n if (document.querySelectorAll(\'input:focus\').length === 0) {\n this.pushKeystroke(event, nativeEvent);\n this.processKeystrokes();\n this.emitKeyEvent(nativeEvent);\n }\n });\n });\n this.config.changed$.subscribe(() => {\n this.registerGlobalHotkey();\n });\n this.registerGlobalHotkey();\n this.getHotkeyDescriptions().then(hotkeys => {\n this.hotkeyDescriptions = hotkeys;\n });\n }\n pushKeystroke(name, nativeEvent) {\n nativeEvent.event = name;\n this.currentKeystrokes.push({ event: nativeEvent, time: performance.now() });\n }\n processKeystrokes() {\n if (this.isEnabled()) {\n this.zone.run(() => {\n let matched = this.getCurrentFullyMatchedHotkey();\n if (matched) {\n console.log(\'Matched hotkey\', matched);\n this.matchedHotkey.emit(matched);\n this.clearCurrentKeystrokes();\n }\n });\n }\n }\n emitKeyEvent(nativeEvent) {\n this.zone.run(() => {\n this.key.emit(nativeEvent);\n });\n }\n clearCurrentKeystrokes() {\n this.currentKeystrokes = [];\n }\n getCurrentKeystrokes() {\n this.currentKeystrokes = this.currentKeystrokes.filter(x => performance.now() - x.time < KEY_TIMEOUT);\n return hotkeys_util_1.stringifyKeySequence(this.currentKeystrokes.map(x => x.event));\n }\n registerGlobalHotkey() {\n this.electron.globalShortcut.unregisterAll();\n let value = this.config.store.hotkeys[\'toggle-window\'] || [];\n if (typeof value === \'string\') {\n value = [value];\n }\n value.forEach(item => {\n item = (typeof item === \'string\') ? [item] : item;\n try {\n this.electron.globalShortcut.register(item[0].replace(/-/g, \'+\'), () => {\n this.globalHotkey.emit();\n });\n }\n catch (err) {\n console.error(\'Could not register the global hotkey:\', err);\n }\n });\n }\n getHotkeysConfig() {\n return this.getHotkeysConfigRecursive(this.config.store.hotkeys);\n }\n getHotkeysConfigRecursive(branch) {\n let keys = {};\n for (let key in branch) {\n let value = branch[key];\n if (value instanceof Object && !(value instanceof Array)) {\n let subkeys = this.getHotkeysConfigRecursive(value);\n for (let subkey in subkeys) {\n keys[key + \'.\' + subkey] = subkeys[subkey];\n }\n }\n else {\n if (typeof value === \'string\') {\n value = [value];\n }\n if (value) {\n value = value.map((item) => (typeof item === \'string\') ? [item] : item);\n keys[key] = value;\n }\n }\n }\n return keys;\n }\n getCurrentFullyMatchedHotkey() {\n let currentStrokes = this.getCurrentKeystrokes();\n let config = this.getHotkeysConfig();\n for (let id in config) {\n for (let sequence of config[id]) {\n if (currentStrokes.length < sequence.length) {\n continue;\n }\n if (sequence.every((x, index) => x.toLowerCase() ===\n currentStrokes[currentStrokes.length - sequence.length + index].toLowerCase())) {\n return id;\n }\n }\n }\n return null;\n }\n getCurrentPartiallyMatchedHotkeys() {\n let currentStrokes = this.getCurrentKeystrokes();\n let config = this.getHotkeysConfig();\n let result = [];\n for (let id in config) {\n for (let sequence of config[id]) {\n for (let matchLength = Math.min(currentStrokes.length, sequence.length); matchLength > 0; matchLength--) {\n if (sequence.slice(0, matchLength).every((x, index) => x.toLowerCase() ===\n currentStrokes[currentStrokes.length - matchLength + index].toLowerCase())) {\n result.push({\n matchedLength: matchLength,\n id,\n strokes: sequence\n });\n break;\n }\n }\n }\n }\n return result;\n }\n getHotkeyDescription(id) {\n return this.hotkeyDescriptions.filter((x) => x.id === id)[0];\n }\n enable() {\n this.disabledLevel--;\n }\n disable() {\n this.disabledLevel++;\n }\n isEnabled() {\n return this.disabledLevel === 0;\n }\n getHotkeyDescriptions() {\n return __awaiter(this, void 0, void 0, function* () {\n return (yield Promise.all(this.config.enabledServices(this.hotkeyProviders)\n .map((x) => __awaiter(this, void 0, void 0, function* () { return x.provide ? x.provide() : x.hotkeys; })))).reduce((a, b) => a.concat(b));\n });\n }\n};\nHotkeysService = __decorate([\n core_1.Injectable({ providedIn: \'root\' }),\n __param(3, core_1.Inject(hotkeyProvider_1.HotkeyProvider)),\n __metadata("design:paramtypes", [core_1.NgZone,\n electron_service_1.ElectronService,\n config_service_1.ConfigService, Array])\n], HotkeysService);\nexports.HotkeysService = HotkeysService;\nlet AppHotkeyProvider = class AppHotkeyProvider extends hotkeyProvider_1.HotkeyProvider {\n constructor() {\n super(...arguments);\n this.hotkeys = [\n {\n id: \'new-window\',\n name: \'New window\',\n },\n {\n id: \'toggle-window\',\n name: \'Toggle terminal window\',\n },\n {\n id: \'toggle-fullscreen\',\n name: \'Toggle fullscreen mode\',\n },\n {\n id: \'rename-tab\',\n name: \'Rename Tab\',\n },\n {\n id: \'close-tab\',\n name: \'Close tab\',\n },\n {\n id: \'toggle-last-tab\',\n name: \'Toggle last tab\',\n },\n {\n id: \'next-tab\',\n name: \'Next tab\',\n },\n {\n id: \'previous-tab\',\n name: \'Previous tab\',\n },\n {\n id: \'tab-1\',\n name: \'Tab 1\',\n },\n {\n id: \'tab-2\',\n name: \'Tab 2\',\n },\n {\n id: \'tab-3\',\n name: \'Tab 3\',\n },\n {\n id: \'tab-4\',\n name: \'Tab 4\',\n },\n {\n id: \'tab-5\',\n name: \'Tab 5\',\n },\n {\n id: \'tab-6\',\n name: \'Tab 6\',\n },\n {\n id: \'tab-7\',\n name: \'Tab 7\',\n },\n {\n id: \'tab-8\',\n name: \'Tab 8\',\n },\n {\n id: \'tab-9\',\n name: \'Tab 9\',\n },\n {\n id: \'tab-10\',\n name: \'Tab 10\',\n },\n ];\n }\n provide() {\n return __awaiter(this, void 0, void 0, function* () {\n return this.hotkeys;\n });\n }\n};\nAppHotkeyProvider = __decorate([\n core_1.Injectable()\n], AppHotkeyProvider);\nexports.AppHotkeyProvider = AppHotkeyProvider;\n\n\n/***/ }),\n/* 48 */\n/*!***********************************!*\\\n !*** ./src/api/configProvider.ts ***!\n \\***********************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nObject.defineProperty(exports, "__esModule", { value: true });\nclass ConfigProvider {\n constructor() {\n this.defaults = {};\n this.platformDefaults = {};\n }\n}\nexports.ConfigProvider = ConfigProvider;\n\n\n/***/ }),\n/* 49 */\n/*!*******************************************!*\\\n !*** ./src/api/tabContextMenuProvider.ts ***!\n \\*******************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nObject.defineProperty(exports, "__esModule", { value: true });\nclass TabContextMenuItemProvider {\n constructor() {\n this.weight = 0;\n }\n}\nexports.TabContextMenuItemProvider = TabContextMenuItemProvider;\n\n\n/***/ }),\n/* 50 */\n/*!****************************************!*\\\n !*** ./node_modules/boom/lib/index.js ***!\n \\****************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\n// Load modules\n\nconst Hoek = __webpack_require__(/*! hoek */ 51);\n\n\n// Declare internals\n\nconst internals = {\n STATUS_CODES: Object.setPrototypeOf({\n \'100\': \'Continue\',\n \'101\': \'Switching Protocols\',\n \'102\': \'Processing\',\n \'200\': \'OK\',\n \'201\': \'Created\',\n \'202\': \'Accepted\',\n \'203\': \'Non-Authoritative Information\',\n \'204\': \'No Content\',\n \'205\': \'Reset Content\',\n \'206\': \'Partial Content\',\n \'207\': \'Multi-Status\',\n \'300\': \'Multiple Choices\',\n \'301\': \'Moved Permanently\',\n \'302\': \'Moved Temporarily\',\n \'303\': \'See Other\',\n \'304\': \'Not Modified\',\n \'305\': \'Use Proxy\',\n \'307\': \'Temporary Redirect\',\n \'400\': \'Bad Request\',\n \'401\': \'Unauthorized\',\n \'402\': \'Payment Required\',\n \'403\': \'Forbidden\',\n \'404\': \'Not Found\',\n \'405\': \'Method Not Allowed\',\n \'406\': \'Not Acceptable\',\n \'407\': \'Proxy Authentication Required\',\n \'408\': \'Request Time-out\',\n \'409\': \'Conflict\',\n \'410\': \'Gone\',\n \'411\': \'Length Required\',\n \'412\': \'Precondition Failed\',\n \'413\': \'Request Entity Too Large\',\n \'414\': \'Request-URI Too Large\',\n \'415\': \'Unsupported Media Type\',\n \'416\': \'Requested Range Not Satisfiable\',\n \'417\': \'Expectation Failed\',\n \'418\': \'I\\\'m a teapot\',\n \'422\': \'Unprocessable Entity\',\n \'423\': \'Locked\',\n \'424\': \'Failed Dependency\',\n \'425\': \'Unordered Collection\',\n \'426\': \'Upgrade Required\',\n \'428\': \'Precondition Required\',\n \'429\': \'Too Many Requests\',\n \'431\': \'Request Header Fields Too Large\',\n \'451\': \'Unavailable For Legal Reasons\',\n \'500\': \'Internal Server Error\',\n \'501\': \'Not Implemented\',\n \'502\': \'Bad Gateway\',\n \'503\': \'Service Unavailable\',\n \'504\': \'Gateway Time-out\',\n \'505\': \'HTTP Version Not Supported\',\n \'506\': \'Variant Also Negotiates\',\n \'507\': \'Insufficient Storage\',\n \'509\': \'Bandwidth Limit Exceeded\',\n \'510\': \'Not Extended\',\n \'511\': \'Network Authentication Required\'\n }, null)\n};\n\n\nexports.wrap = function (error, statusCode, message) {\n\n Hoek.assert(error instanceof Error, \'Cannot wrap non-Error object\');\n Hoek.assert(!error.isBoom || (!statusCode && !message), \'Cannot provide statusCode or message with boom error\');\n\n return (error.isBoom ? error : internals.initialize(error, statusCode || 500, message));\n};\n\n\nexports.create = function (statusCode, message, data) {\n\n return internals.create(statusCode, message, data, exports.create);\n};\n\n\ninternals.create = function (statusCode, message, data, ctor) {\n\n if (message instanceof Error) {\n if (data) {\n message.data = data;\n }\n return exports.wrap(message, statusCode);\n }\n\n const error = new Error(message ? message : undefined); // Avoids settings null message\n Error.captureStackTrace(error, ctor); // Filter the stack to our external API\n error.data = data || null;\n internals.initialize(error, statusCode);\n return error;\n};\n\n\ninternals.initialize = function (error, statusCode, message) {\n\n const numberCode = parseInt(statusCode, 10);\n Hoek.assert(!isNaN(numberCode) && numberCode >= 400, \'First argument must be a number (400+):\', statusCode);\n\n error.isBoom = true;\n error.isServer = numberCode >= 500;\n\n if (!error.hasOwnProperty(\'data\')) {\n error.data = null;\n }\n\n error.output = {\n statusCode: numberCode,\n payload: {},\n headers: {}\n };\n\n error.reformat = internals.reformat;\n error.reformat();\n\n if (!message &&\n !error.message) {\n\n message = error.output.payload.error;\n }\n\n if (message) {\n error.message = (message + (error.message ? \': \' + error.message : \'\'));\n }\n\n return error;\n};\n\n\ninternals.reformat = function () {\n\n this.output.payload.statusCode = this.output.statusCode;\n this.output.payload.error = internals.STATUS_CODES[this.output.statusCode] || \'Unknown\';\n\n if (this.output.statusCode === 500) {\n this.output.payload.message = \'An internal server error occurred\'; // Hide actual error from user\n }\n else if (this.message) {\n this.output.payload.message = this.message;\n }\n};\n\n\n// 4xx Client Errors\n\nexports.badRequest = function (message, data) {\n\n return internals.create(400, message, data, exports.badRequest);\n};\n\n\nexports.unauthorized = function (message, scheme, attributes) { // Or function (message, wwwAuthenticate[])\n\n const err = internals.create(401, message, undefined, exports.unauthorized);\n\n if (!scheme) {\n return err;\n }\n\n let wwwAuthenticate = \'\';\n\n if (typeof scheme === \'string\') {\n\n // function (message, scheme, attributes)\n\n wwwAuthenticate = scheme;\n\n if (attributes || message) {\n err.output.payload.attributes = {};\n }\n\n if (attributes) {\n if (typeof attributes === \'string\') {\n wwwAuthenticate = wwwAuthenticate + \' \' + Hoek.escapeHeaderAttribute(attributes);\n err.output.payload.attributes = attributes;\n }\n else {\n const names = Object.keys(attributes);\n for (let i = 0; i < names.length; ++i) {\n const name = names[i];\n if (i) {\n wwwAuthenticate = wwwAuthenticate + \',\';\n }\n\n let value = attributes[name];\n if (value === null ||\n value === undefined) { // Value can be zero\n\n value = \'\';\n }\n wwwAuthenticate = wwwAuthenticate + \' \' + name + \'="\' + Hoek.escapeHeaderAttribute(value.toString()) + \'"\';\n err.output.payload.attributes[name] = value;\n }\n }\n }\n\n\n if (message) {\n if (attributes) {\n wwwAuthenticate = wwwAuthenticate + \',\';\n }\n wwwAuthenticate = wwwAuthenticate + \' error="\' + Hoek.escapeHeaderAttribute(message) + \'"\';\n err.output.payload.attributes.error = message;\n }\n else {\n err.isMissing = true;\n }\n }\n else {\n\n // function (message, wwwAuthenticate[])\n\n const wwwArray = scheme;\n for (let i = 0; i < wwwArray.length; ++i) {\n if (i) {\n wwwAuthenticate = wwwAuthenticate + \', \';\n }\n\n wwwAuthenticate = wwwAuthenticate + wwwArray[i];\n }\n }\n\n err.output.headers[\'WWW-Authenticate\'] = wwwAuthenticate;\n\n return err;\n};\n\n\nexports.paymentRequired = function (message, data) {\n\n return internals.create(402, message, data, exports.paymentRequired);\n};\n\n\nexports.forbidden = function (message, data) {\n\n return internals.create(403, message, data, exports.forbidden);\n};\n\n\nexports.notFound = function (message, data) {\n\n return internals.create(404, message, data, exports.notFound);\n};\n\n\nexports.methodNotAllowed = function (message, data, allow) {\n\n const err = internals.create(405, message, data, exports.methodNotAllowed);\n\n if (typeof allow === \'string\') {\n allow = [allow];\n }\n\n if (Array.isArray(allow)) {\n err.output.headers.Allow = allow.join(\', \');\n }\n\n return err;\n};\n\n\nexports.notAcceptable = function (message, data) {\n\n return internals.create(406, message, data, exports.notAcceptable);\n};\n\n\nexports.proxyAuthRequired = function (message, data) {\n\n return internals.create(407, message, data, exports.proxyAuthRequired);\n};\n\n\nexports.clientTimeout = function (message, data) {\n\n return internals.create(408, message, data, exports.clientTimeout);\n};\n\n\nexports.conflict = function (message, data) {\n\n return internals.create(409, message, data, exports.conflict);\n};\n\n\nexports.resourceGone = function (message, data) {\n\n return internals.create(410, message, data, exports.resourceGone);\n};\n\n\nexports.lengthRequired = function (message, data) {\n\n return internals.create(411, message, data, exports.lengthRequired);\n};\n\n\nexports.preconditionFailed = function (message, data) {\n\n return internals.create(412, message, data, exports.preconditionFailed);\n};\n\n\nexports.entityTooLarge = function (message, data) {\n\n return internals.create(413, message, data, exports.entityTooLarge);\n};\n\n\nexports.uriTooLong = function (message, data) {\n\n return internals.create(414, message, data, exports.uriTooLong);\n};\n\n\nexports.unsupportedMediaType = function (message, data) {\n\n return internals.create(415, message, data, exports.unsupportedMediaType);\n};\n\n\nexports.rangeNotSatisfiable = function (message, data) {\n\n return internals.create(416, message, data, exports.rangeNotSatisfiable);\n};\n\n\nexports.expectationFailed = function (message, data) {\n\n return internals.create(417, message, data, exports.expectationFailed);\n};\n\n\nexports.teapot = function (message, data) {\n\n return internals.create(418, message, data, exports.teapot);\n};\n\n\nexports.badData = function (message, data) {\n\n return internals.create(422, message, data, exports.badData);\n};\n\n\nexports.locked = function (message, data) {\n\n return internals.create(423, message, data, exports.locked);\n};\n\n\nexports.preconditionRequired = function (message, data) {\n\n return internals.create(428, message, data, exports.preconditionRequired);\n};\n\n\nexports.tooManyRequests = function (message, data) {\n\n return internals.create(429, message, data, exports.tooManyRequests);\n};\n\n\nexports.illegal = function (message, data) {\n\n return internals.create(451, message, data, exports.illegal);\n};\n\n\n// 5xx Server Errors\n\nexports.internal = function (message, data, statusCode) {\n\n return internals.serverError(message, data, statusCode, exports.internal);\n};\n\n\ninternals.serverError = function (message, data, statusCode, ctor) {\n\n let error;\n if (data instanceof Error) {\n error = exports.wrap(data, statusCode, message);\n }\n else {\n error = internals.create(statusCode || 500, message, undefined, ctor);\n error.data = data;\n }\n\n return error;\n};\n\n\nexports.notImplemented = function (message, data) {\n\n return internals.serverError(message, data, 501, exports.notImplemented);\n};\n\n\nexports.badGateway = function (message, data) {\n\n return internals.serverError(message, data, 502, exports.badGateway);\n};\n\n\nexports.serverUnavailable = function (message, data) {\n\n return internals.serverError(message, data, 503, exports.serverUnavailable);\n};\n\n\nexports.gatewayTimeout = function (message, data) {\n\n return internals.serverError(message, data, 504, exports.gatewayTimeout);\n};\n\n\nexports.badImplementation = function (message, data) {\n\n const err = internals.serverError(message, data, 500, exports.badImplementation);\n err.isDeveloperError = true;\n return err;\n};\n\n\n/***/ }),\n/* 51 */\n/*!****************************************!*\\\n !*** ./node_modules/hoek/lib/index.js ***!\n \\****************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\n// Load modules\n\nconst Crypto = __webpack_require__(/*! crypto */ 2);\nconst Path = __webpack_require__(/*! path */ 29);\nconst Util = __webpack_require__(/*! util */ 4);\nconst Escape = __webpack_require__(/*! ./escape */ 186);\n\n\n// Declare internals\n\nconst internals = {};\n\n\n// Clone object or array\n\nexports.clone = function (obj, seen) {\n\n if (typeof obj !== \'object\' ||\n obj === null) {\n\n return obj;\n }\n\n seen = seen || new Map();\n\n const lookup = seen.get(obj);\n if (lookup) {\n return lookup;\n }\n\n let newObj;\n let cloneDeep = false;\n\n if (!Array.isArray(obj)) {\n if (Buffer.isBuffer(obj)) {\n newObj = new Buffer(obj);\n }\n else if (obj instanceof Date) {\n newObj = new Date(obj.getTime());\n }\n else if (obj instanceof RegExp) {\n newObj = new RegExp(obj);\n }\n else {\n const proto = Object.getPrototypeOf(obj);\n if (proto &&\n proto.isImmutable) {\n\n newObj = obj;\n }\n else {\n newObj = Object.create(proto);\n cloneDeep = true;\n }\n }\n }\n else {\n newObj = [];\n cloneDeep = true;\n }\n\n seen.set(obj, newObj);\n\n if (cloneDeep) {\n const keys = Object.getOwnPropertyNames(obj);\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n const descriptor = Object.getOwnPropertyDescriptor(obj, key);\n if (descriptor &&\n (descriptor.get ||\n descriptor.set)) {\n\n Object.defineProperty(newObj, key, descriptor);\n }\n else {\n newObj[key] = exports.clone(obj[key], seen);\n }\n }\n }\n\n return newObj;\n};\n\n\n// Merge all the properties of source into target, source wins in conflict, and by default null and undefined from source are applied\n\n/*eslint-disable */\nexports.merge = function (target, source, isNullOverride /* = true */, isMergeArrays /* = true */) {\n/*eslint-enable */\n\n exports.assert(target && typeof target === \'object\', \'Invalid target value: must be an object\');\n exports.assert(source === null || source === undefined || typeof source === \'object\', \'Invalid source value: must be null, undefined, or an object\');\n\n if (!source) {\n return target;\n }\n\n if (Array.isArray(source)) {\n exports.assert(Array.isArray(target), \'Cannot merge array onto an object\');\n if (isMergeArrays === false) { // isMergeArrays defaults to true\n target.length = 0; // Must not change target assignment\n }\n\n for (let i = 0; i < source.length; ++i) {\n target.push(exports.clone(source[i]));\n }\n\n return target;\n }\n\n const keys = Object.keys(source);\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n if (key === \'__proto__\') {\n continue;\n }\n\n const value = source[key];\n if (value &&\n typeof value === \'object\') {\n\n if (!target[key] ||\n typeof target[key] !== \'object\' ||\n (Array.isArray(target[key]) !== Array.isArray(value)) ||\n value instanceof Date ||\n Buffer.isBuffer(value) ||\n value instanceof RegExp) {\n\n target[key] = exports.clone(value);\n }\n else {\n exports.merge(target[key], value, isNullOverride, isMergeArrays);\n }\n }\n else {\n if (value !== null &&\n value !== undefined) { // Explicit to preserve empty strings\n\n target[key] = value;\n }\n else if (isNullOverride !== false) { // Defaults to true\n target[key] = value;\n }\n }\n }\n\n return target;\n};\n\n\n// Apply options to a copy of the defaults\n\nexports.applyToDefaults = function (defaults, options, isNullOverride) {\n\n exports.assert(defaults && typeof defaults === \'object\', \'Invalid defaults value: must be an object\');\n exports.assert(!options || options === true || typeof options === \'object\', \'Invalid options value: must be true, falsy or an object\');\n\n if (!options) { // If no options, return null\n return null;\n }\n\n const copy = exports.clone(defaults);\n\n if (options === true) { // If options is set to true, use defaults\n return copy;\n }\n\n return exports.merge(copy, options, isNullOverride === true, false);\n};\n\n\n// Clone an object except for the listed keys which are shallow copied\n\nexports.cloneWithShallow = function (source, keys) {\n\n if (!source ||\n typeof source !== \'object\') {\n\n return source;\n }\n\n const storage = internals.store(source, keys); // Move shallow copy items to storage\n const copy = exports.clone(source); // Deep copy the rest\n internals.restore(copy, source, storage); // Shallow copy the stored items and restore\n return copy;\n};\n\n\ninternals.store = function (source, keys) {\n\n const storage = {};\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n const value = exports.reach(source, key);\n if (value !== undefined) {\n storage[key] = value;\n internals.reachSet(source, key, undefined);\n }\n }\n\n return storage;\n};\n\n\ninternals.restore = function (copy, source, storage) {\n\n const keys = Object.keys(storage);\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n internals.reachSet(copy, key, storage[key]);\n internals.reachSet(source, key, storage[key]);\n }\n};\n\n\ninternals.reachSet = function (obj, key, value) {\n\n const path = key.split(\'.\');\n let ref = obj;\n for (let i = 0; i < path.length; ++i) {\n const segment = path[i];\n if (i + 1 === path.length) {\n ref[segment] = value;\n }\n\n ref = ref[segment];\n }\n};\n\n\n// Apply options to defaults except for the listed keys which are shallow copied from option without merging\n\nexports.applyToDefaultsWithShallow = function (defaults, options, keys) {\n\n exports.assert(defaults && typeof defaults === \'object\', \'Invalid defaults value: must be an object\');\n exports.assert(!options || options === true || typeof options === \'object\', \'Invalid options value: must be true, falsy or an object\');\n exports.assert(keys && Array.isArray(keys), \'Invalid keys\');\n\n if (!options) { // If no options, return null\n return null;\n }\n\n const copy = exports.cloneWithShallow(defaults, keys);\n\n if (options === true) { // If options is set to true, use defaults\n return copy;\n }\n\n const storage = internals.store(options, keys); // Move shallow copy items to storage\n exports.merge(copy, options, false, false); // Deep copy the rest\n internals.restore(copy, options, storage); // Shallow copy the stored items and restore\n return copy;\n};\n\n\n// Deep object or array comparison\n\nexports.deepEqual = function (obj, ref, options, seen) {\n\n options = options || { prototype: true };\n\n const type = typeof obj;\n\n if (type !== typeof ref) {\n return false;\n }\n\n if (type !== \'object\' ||\n obj === null ||\n ref === null) {\n\n if (obj === ref) { // Copied from Deep-eql, copyright(c) 2013 Jake Luer, jake@alogicalparadox.com, MIT Licensed, https://github.com/chaijs/deep-eql\n return obj !== 0 || 1 / obj === 1 / ref; // -0 / +0\n }\n\n return obj !== obj && ref !== ref; // NaN\n }\n\n seen = seen || [];\n if (seen.indexOf(obj) !== -1) {\n return true; // If previous comparison failed, it would have stopped execution\n }\n\n seen.push(obj);\n\n if (Array.isArray(obj)) {\n if (!Array.isArray(ref)) {\n return false;\n }\n\n if (!options.part && obj.length !== ref.length) {\n return false;\n }\n\n for (let i = 0; i < obj.length; ++i) {\n if (options.part) {\n let found = false;\n for (let j = 0; j < ref.length; ++j) {\n if (exports.deepEqual(obj[i], ref[j], options)) {\n found = true;\n break;\n }\n }\n\n return found;\n }\n\n if (!exports.deepEqual(obj[i], ref[i], options)) {\n return false;\n }\n }\n\n return true;\n }\n\n if (Buffer.isBuffer(obj)) {\n if (!Buffer.isBuffer(ref)) {\n return false;\n }\n\n if (obj.length !== ref.length) {\n return false;\n }\n\n for (let i = 0; i < obj.length; ++i) {\n if (obj[i] !== ref[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n if (obj instanceof Date) {\n return (ref instanceof Date && obj.getTime() === ref.getTime());\n }\n\n if (obj instanceof RegExp) {\n return (ref instanceof RegExp && obj.toString() === ref.toString());\n }\n\n if (options.prototype) {\n if (Object.getPrototypeOf(obj) !== Object.getPrototypeOf(ref)) {\n return false;\n }\n }\n\n const keys = Object.getOwnPropertyNames(obj);\n\n if (!options.part && keys.length !== Object.getOwnPropertyNames(ref).length) {\n return false;\n }\n\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n const descriptor = Object.getOwnPropertyDescriptor(obj, key);\n if (descriptor.get) {\n if (!exports.deepEqual(descriptor, Object.getOwnPropertyDescriptor(ref, key), options, seen)) {\n return false;\n }\n }\n else if (!exports.deepEqual(obj[key], ref[key], options, seen)) {\n return false;\n }\n }\n\n return true;\n};\n\n\n// Remove duplicate items from array\n\nexports.unique = (array, key) => {\n\n let result;\n if (key) {\n result = [];\n const index = new Set();\n array.forEach((item) => {\n\n const identifier = item[key];\n if (!index.has(identifier)) {\n index.add(identifier);\n result.push(item);\n }\n });\n }\n else {\n result = Array.from(new Set(array));\n }\n\n return result;\n};\n\n\n// Convert array into object\n\nexports.mapToObject = function (array, key) {\n\n if (!array) {\n return null;\n }\n\n const obj = {};\n for (let i = 0; i < array.length; ++i) {\n if (key) {\n if (array[i][key]) {\n obj[array[i][key]] = true;\n }\n }\n else {\n obj[array[i]] = true;\n }\n }\n\n return obj;\n};\n\n\n// Find the common unique items in two arrays\n\nexports.intersect = function (array1, array2, justFirst) {\n\n if (!array1 || !array2) {\n return [];\n }\n\n const common = [];\n const hash = (Array.isArray(array1) ? exports.mapToObject(array1) : array1);\n const found = {};\n for (let i = 0; i < array2.length; ++i) {\n if (hash[array2[i]] && !found[array2[i]]) {\n if (justFirst) {\n return array2[i];\n }\n\n common.push(array2[i]);\n found[array2[i]] = true;\n }\n }\n\n return (justFirst ? null : common);\n};\n\n\n// Test if the reference contains the values\n\nexports.contain = function (ref, values, options) {\n\n /*\n string -> string(s)\n array -> item(s)\n object -> key(s)\n object -> object (key:value)\n */\n\n let valuePairs = null;\n if (typeof ref === \'object\' &&\n typeof values === \'object\' &&\n !Array.isArray(ref) &&\n !Array.isArray(values)) {\n\n valuePairs = values;\n values = Object.keys(values);\n }\n else {\n values = [].concat(values);\n }\n\n options = options || {}; // deep, once, only, part\n\n exports.assert(arguments.length >= 2, \'Insufficient arguments\');\n exports.assert(typeof ref === \'string\' || typeof ref === \'object\', \'Reference must be string or an object\');\n exports.assert(values.length, \'Values array cannot be empty\');\n\n let compare;\n let compareFlags;\n if (options.deep) {\n compare = exports.deepEqual;\n\n const hasOnly = options.hasOwnProperty(\'only\');\n const hasPart = options.hasOwnProperty(\'part\');\n\n compareFlags = {\n prototype: hasOnly ? options.only : hasPart ? !options.part : false,\n part: hasOnly ? !options.only : hasPart ? options.part : true\n };\n }\n else {\n compare = (a, b) => a === b;\n }\n\n let misses = false;\n const matches = new Array(values.length);\n for (let i = 0; i < matches.length; ++i) {\n matches[i] = 0;\n }\n\n if (typeof ref === \'string\') {\n let pattern = \'(\';\n for (let i = 0; i < values.length; ++i) {\n const value = values[i];\n exports.assert(typeof value === \'string\', \'Cannot compare string reference to non-string value\');\n pattern += (i ? \'|\' : \'\') + exports.escapeRegex(value);\n }\n\n const regex = new RegExp(pattern + \')\', \'g\');\n const leftovers = ref.replace(regex, ($0, $1) => {\n\n const index = values.indexOf($1);\n ++matches[index];\n return \'\'; // Remove from string\n });\n\n misses = !!leftovers;\n }\n else if (Array.isArray(ref)) {\n for (let i = 0; i < ref.length; ++i) {\n let matched = false;\n for (let j = 0; j < values.length && matched === false; ++j) {\n matched = compare(values[j], ref[i], compareFlags) && j;\n }\n\n if (matched !== false) {\n ++matches[matched];\n }\n else {\n misses = true;\n }\n }\n }\n else {\n const keys = Object.getOwnPropertyNames(ref);\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n const pos = values.indexOf(key);\n if (pos !== -1) {\n if (valuePairs &&\n !compare(valuePairs[key], ref[key], compareFlags)) {\n\n return false;\n }\n\n ++matches[pos];\n }\n else {\n misses = true;\n }\n }\n }\n\n let result = false;\n for (let i = 0; i < matches.length; ++i) {\n result = result || !!matches[i];\n if ((options.once && matches[i] > 1) ||\n (!options.part && !matches[i])) {\n\n return false;\n }\n }\n\n if (options.only &&\n misses) {\n\n return false;\n }\n\n return result;\n};\n\n\n// Flatten array\n\nexports.flatten = function (array, target) {\n\n const result = target || [];\n\n for (let i = 0; i < array.length; ++i) {\n if (Array.isArray(array[i])) {\n exports.flatten(array[i], result);\n }\n else {\n result.push(array[i]);\n }\n }\n\n return result;\n};\n\n\n// Convert an object key chain string (\'a.b.c\') to reference (object[a][b][c])\n\nexports.reach = function (obj, chain, options) {\n\n if (chain === false ||\n chain === null ||\n typeof chain === \'undefined\') {\n\n return obj;\n }\n\n options = options || {};\n if (typeof options === \'string\') {\n options = { separator: options };\n }\n\n const path = chain.split(options.separator || \'.\');\n let ref = obj;\n for (let i = 0; i < path.length; ++i) {\n let key = path[i];\n if (key[0] === \'-\' && Array.isArray(ref)) {\n key = key.slice(1, key.length);\n key = ref.length - key;\n }\n\n if (!ref ||\n !((typeof ref === \'object\' || typeof ref === \'function\') && key in ref) ||\n (typeof ref !== \'object\' && options.functions === false)) { // Only object and function can have properties\n\n exports.assert(!options.strict || i + 1 === path.length, \'Missing segment\', key, \'in reach path \', chain);\n exports.assert(typeof ref === \'object\' || options.functions === true || typeof ref !== \'function\', \'Invalid segment\', key, \'in reach path \', chain);\n ref = options.default;\n break;\n }\n\n ref = ref[key];\n }\n\n return ref;\n};\n\n\nexports.reachTemplate = function (obj, template, options) {\n\n return template.replace(/{([^}]+)}/g, ($0, chain) => {\n\n const value = exports.reach(obj, chain, options);\n return (value === undefined || value === null ? \'\' : value);\n });\n};\n\n\nexports.formatStack = function (stack) {\n\n const trace = [];\n for (let i = 0; i < stack.length; ++i) {\n const item = stack[i];\n trace.push([item.getFileName(), item.getLineNumber(), item.getColumnNumber(), item.getFunctionName(), item.isConstructor()]);\n }\n\n return trace;\n};\n\n\nexports.formatTrace = function (trace) {\n\n const display = [];\n\n for (let i = 0; i < trace.length; ++i) {\n const row = trace[i];\n display.push((row[4] ? \'new \' : \'\') + row[3] + \' (\' + row[0] + \':\' + row[1] + \':\' + row[2] + \')\');\n }\n\n return display;\n};\n\n\nexports.callStack = function (slice) {\n\n // http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi\n\n const v8 = Error.prepareStackTrace;\n Error.prepareStackTrace = function (_, stack) {\n\n return stack;\n };\n\n const capture = {};\n Error.captureStackTrace(capture, this); // arguments.callee is not supported in strict mode so we use this and slice the trace of this off the result\n const stack = capture.stack;\n\n Error.prepareStackTrace = v8;\n\n const trace = exports.formatStack(stack);\n\n return trace.slice(1 + slice);\n};\n\n\nexports.displayStack = function (slice) {\n\n const trace = exports.callStack(slice === undefined ? 1 : slice + 1);\n\n return exports.formatTrace(trace);\n};\n\n\nexports.abortThrow = false;\n\n\nexports.abort = function (message, hideStack) {\n\n if ( false || exports.abortThrow === true) {\n throw new Error(message || \'Unknown error\');\n }\n\n let stack = \'\';\n if (!hideStack) {\n stack = exports.displayStack(1).join(\'\\n\\t\');\n }\n console.log(\'ABORT: \' + message + \'\\n\\t\' + stack);\n process.exit(1);\n};\n\n\nexports.assert = function (condition /*, msg1, msg2, msg3 */) {\n\n if (condition) {\n return;\n }\n\n if (arguments.length === 2 && arguments[1] instanceof Error) {\n throw arguments[1];\n }\n\n let msgs = [];\n for (let i = 1; i < arguments.length; ++i) {\n if (arguments[i] !== \'\') {\n msgs.push(arguments[i]); // Avoids Array.slice arguments leak, allowing for V8 optimizations\n }\n }\n\n msgs = msgs.map((msg) => {\n\n return typeof msg === \'string\' ? msg : msg instanceof Error ? msg.message : exports.stringify(msg);\n });\n\n throw new Error(msgs.join(\' \') || \'Unknown error\');\n};\n\n\nexports.Timer = function () {\n\n this.ts = 0;\n this.reset();\n};\n\n\nexports.Timer.prototype.reset = function () {\n\n this.ts = Date.now();\n};\n\n\nexports.Timer.prototype.elapsed = function () {\n\n return Date.now() - this.ts;\n};\n\n\nexports.Bench = function () {\n\n this.ts = 0;\n this.reset();\n};\n\n\nexports.Bench.prototype.reset = function () {\n\n this.ts = exports.Bench.now();\n};\n\n\nexports.Bench.prototype.elapsed = function () {\n\n return exports.Bench.now() - this.ts;\n};\n\n\nexports.Bench.now = function () {\n\n const ts = process.hrtime();\n return (ts[0] * 1e3) + (ts[1] / 1e6);\n};\n\n\n// Escape string for Regex construction\n\nexports.escapeRegex = function (string) {\n\n // Escape ^$.*+-?=!:|\\/()[]{},\n return string.replace(/[\\^\\$\\.\\*\\+\\-\\?\\=\\!\\:\\|\\\\\\/\\(\\)\\[\\]\\{\\}\\,]/g, \'\\\\$&\');\n};\n\n\n// Base64url (RFC 4648) encode\n\nexports.base64urlEncode = function (value, encoding) {\n\n exports.assert(typeof value === \'string\' || Buffer.isBuffer(value), \'value must be string or buffer\');\n const buf = (Buffer.isBuffer(value) ? value : new Buffer(value, encoding || \'binary\'));\n return buf.toString(\'base64\').replace(/\\+/g, \'-\').replace(/\\//g, \'_\').replace(/\\=/g, \'\');\n};\n\n\n// Base64url (RFC 4648) decode\n\nexports.base64urlDecode = function (value, encoding) {\n\n if (typeof value !== \'string\') {\n\n return new Error(\'Value not a string\');\n }\n\n if (!/^[\\w\\-]*$/.test(value)) {\n\n return new Error(\'Invalid character\');\n }\n\n const buf = new Buffer(value, \'base64\');\n return (encoding === \'buffer\' ? buf : buf.toString(encoding || \'binary\'));\n};\n\n\n// Escape attribute value for use in HTTP header\n\nexports.escapeHeaderAttribute = function (attribute) {\n\n // Allowed value characters: !#$%&\'()*+,-./:;<=>?@[]^_`{|}~ and space, a-z, A-Z, 0-9, \\, "\n\n exports.assert(/^[ \\w\\!#\\$%&\'\\(\\)\\*\\+,\\-\\.\\/\\:;<\\=>\\?@\\[\\]\\^`\\{\\|\\}~\\"\\\\]*$/.test(attribute), \'Bad attribute value (\' + attribute + \')\');\n\n return attribute.replace(/\\\\/g, \'\\\\\\\\\').replace(/\\"/g, \'\\\\"\'); // Escape quotes and slash\n};\n\n\nexports.escapeHtml = function (string) {\n\n return Escape.escapeHtml(string);\n};\n\n\nexports.escapeJavaScript = function (string) {\n\n return Escape.escapeJavaScript(string);\n};\n\nexports.escapeJson = function (string) {\n\n return Escape.escapeJson(string);\n};\n\nexports.nextTick = function (callback) {\n\n return function () {\n\n const args = arguments;\n process.nextTick(() => {\n\n callback.apply(null, args);\n });\n };\n};\n\n\nexports.once = function (method) {\n\n if (method._hoekOnce) {\n return method;\n }\n\n let once = false;\n const wrapped = function () {\n\n if (!once) {\n once = true;\n method.apply(null, arguments);\n }\n };\n\n wrapped._hoekOnce = true;\n\n return wrapped;\n};\n\n\nexports.isInteger = Number.isSafeInteger;\n\n\nexports.ignore = function () { };\n\n\nexports.inherits = Util.inherits;\n\n\nexports.format = Util.format;\n\n\nexports.transform = function (source, transform, options) {\n\n exports.assert(source === null || source === undefined || typeof source === \'object\' || Array.isArray(source), \'Invalid source object: must be null, undefined, an object, or an array\');\n const separator = (typeof options === \'object\' && options !== null) ? (options.separator || \'.\') : \'.\';\n\n if (Array.isArray(source)) {\n const results = [];\n for (let i = 0; i < source.length; ++i) {\n results.push(exports.transform(source[i], transform, options));\n }\n return results;\n }\n\n const result = {};\n const keys = Object.keys(transform);\n\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n const path = key.split(separator);\n const sourcePath = transform[key];\n\n exports.assert(typeof sourcePath === \'string\', \'All mappings must be "." delineated strings\');\n\n let segment;\n let res = result;\n\n while (path.length > 1) {\n segment = path.shift();\n if (!res[segment]) {\n res[segment] = {};\n }\n res = res[segment];\n }\n segment = path.shift();\n res[segment] = exports.reach(source, sourcePath, options);\n }\n\n return result;\n};\n\n\nexports.uniqueFilename = function (path, extension) {\n\n if (extension) {\n extension = extension[0] !== \'.\' ? \'.\' + extension : extension;\n }\n else {\n extension = \'\';\n }\n\n path = Path.resolve(path);\n const name = [Date.now(), process.pid, Crypto.randomBytes(8).toString(\'hex\')].join(\'-\') + extension;\n return Path.join(path, name);\n};\n\n\nexports.stringify = function () {\n\n try {\n return JSON.stringify.apply(null, arguments);\n }\n catch (err) {\n return \'[Cannot display object: \' + err.message + \']\';\n }\n};\n\n\nexports.shallow = function (source) {\n\n const target = {};\n const keys = Object.keys(source);\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n target[key] = source[key];\n }\n\n return target;\n};\n\n\n/***/ }),\n/* 52 */\n/*!****************************************!*\\\n !*** ./node_modules/hawk/lib/utils.js ***!\n \\****************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\n// Load modules\n\nconst Sntp = __webpack_require__(/*! sntp */ 99);\nconst Boom = __webpack_require__(/*! boom */ 50);\n\n\n// Declare internals\n\nconst internals = {};\n\n\nexports.version = function () {\n\n return __webpack_require__(/*! ../package.json */ 190).version;\n};\n\n\nexports.limits = {\n maxMatchLength: 4096 // Limit the length of uris and headers to avoid a DoS attack on string matching\n};\n\n\n// Extract host and port from request\n\n// $1 $2\ninternals.hostHeaderRegex = /^(?:(?:\\r\\n)?\\s)*((?:[^:]+)|(?:\\[[^\\]]+\\]))(?::(\\d+))?(?:(?:\\r\\n)?\\s)*$/; // (IPv4, hostname)|(IPv6)\n\n\nexports.parseHost = function (req, hostHeaderName) {\n\n hostHeaderName = (hostHeaderName ? hostHeaderName.toLowerCase() : \'host\');\n const hostHeader = req.headers[hostHeaderName];\n if (!hostHeader) {\n return null;\n }\n\n if (hostHeader.length > exports.limits.maxMatchLength) {\n return null;\n }\n\n const hostParts = hostHeader.match(internals.hostHeaderRegex);\n if (!hostParts) {\n return null;\n }\n\n return {\n name: hostParts[1],\n port: (hostParts[2] ? hostParts[2] : (req.connection && req.connection.encrypted ? 443 : 80))\n };\n};\n\n\n// Parse Content-Type header content\n\nexports.parseContentType = function (header) {\n\n if (!header) {\n return \'\';\n }\n\n return header.split(\';\')[0].trim().toLowerCase();\n};\n\n\n// Convert node\'s to request configuration object\n\nexports.parseRequest = function (req, options) {\n\n if (!req.headers) {\n return req;\n }\n\n // Obtain host and port information\n\n let host;\n if (!options.host ||\n !options.port) {\n\n host = exports.parseHost(req, options.hostHeaderName);\n if (!host) {\n return new Error(\'Invalid Host header\');\n }\n }\n\n const request = {\n method: req.method,\n url: req.url,\n host: options.host || host.name,\n port: options.port || host.port,\n authorization: req.headers.authorization,\n contentType: req.headers[\'content-type\'] || \'\'\n };\n\n return request;\n};\n\n\nexports.now = function (localtimeOffsetMsec) {\n\n return Sntp.now() + (localtimeOffsetMsec || 0);\n};\n\n\nexports.nowSecs = function (localtimeOffsetMsec) {\n\n return Math.floor(exports.now(localtimeOffsetMsec) / 1000);\n};\n\n\ninternals.authHeaderRegex = /^(\\w+)(?:\\s+(.*))?$/; // Header: scheme[ something]\ninternals.attributeRegex = /^[ \\w\\!#\\$%&\'\\(\\)\\*\\+,\\-\\.\\/\\:;<\\=>\\?@\\[\\]\\^`\\{\\|\\}~]+$/; // !#$%&\'()*+,-./:;<=>?@[]^_`{|}~ and space, a-z, A-Z, 0-9\n\n\n// Parse Hawk HTTP Authorization header\n\nexports.parseAuthorizationHeader = function (header, keys) {\n\n keys = keys || [\'id\', \'ts\', \'nonce\', \'hash\', \'ext\', \'mac\', \'app\', \'dlg\'];\n\n if (!header) {\n return Boom.unauthorized(null, \'Hawk\');\n }\n\n if (header.length > exports.limits.maxMatchLength) {\n return Boom.badRequest(\'Header length too long\');\n }\n\n const headerParts = header.match(internals.authHeaderRegex);\n if (!headerParts) {\n return Boom.badRequest(\'Invalid header syntax\');\n }\n\n const scheme = headerParts[1];\n if (scheme.toLowerCase() !== \'hawk\') {\n return Boom.unauthorized(null, \'Hawk\');\n }\n\n const attributesString = headerParts[2];\n if (!attributesString) {\n return Boom.badRequest(\'Invalid header syntax\');\n }\n\n const attributes = {};\n let errorMessage = \'\';\n const verify = attributesString.replace(/(\\w+)="([^"\\\\]*)"\\s*(?:,\\s*|$)/g, ($0, $1, $2) => {\n\n // Check valid attribute names\n\n if (keys.indexOf($1) === -1) {\n errorMessage = \'Unknown attribute: \' + $1;\n return;\n }\n\n // Allowed attribute value characters\n\n if ($2.match(internals.attributeRegex) === null) {\n errorMessage = \'Bad attribute value: \' + $1;\n return;\n }\n\n // Check for duplicates\n\n if (attributes.hasOwnProperty($1)) {\n errorMessage = \'Duplicate attribute: \' + $1;\n return;\n }\n\n attributes[$1] = $2;\n return \'\';\n });\n\n if (verify !== \'\') {\n return Boom.badRequest(errorMessage || \'Bad header format\');\n }\n\n return attributes;\n};\n\n\nexports.unauthorized = function (message, attributes) {\n\n return Boom.unauthorized(message || null, \'Hawk\', attributes);\n};\n\n\n\n/***/ }),\n/* 53 */\n/*!**************************************************!*\\\n !*** ./node_modules/http-signature/lib/utils.js ***!\n \\**************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2012 Joyent, Inc. All rights reserved.\n\nvar assert = __webpack_require__(/*! assert-plus */ 1);\nvar sshpk = __webpack_require__(/*! sshpk */ 66);\nvar util = __webpack_require__(/*! util */ 4);\n\nvar HASH_ALGOS = {\n \'sha1\': true,\n \'sha256\': true,\n \'sha512\': true\n};\n\nvar PK_ALGOS = {\n \'rsa\': true,\n \'dsa\': true,\n \'ecdsa\': true\n};\n\nfunction HttpSignatureError(message, caller) {\n if (Error.captureStackTrace)\n Error.captureStackTrace(this, caller || HttpSignatureError);\n\n this.message = message;\n this.name = caller.name;\n}\nutil.inherits(HttpSignatureError, Error);\n\nfunction InvalidAlgorithmError(message) {\n HttpSignatureError.call(this, message, InvalidAlgorithmError);\n}\nutil.inherits(InvalidAlgorithmError, HttpSignatureError);\n\nfunction validateAlgorithm(algorithm) {\n var alg = algorithm.toLowerCase().split(\'-\');\n\n if (alg.length !== 2) {\n throw (new InvalidAlgorithmError(alg[0].toUpperCase() + \' is not a \' +\n \'valid algorithm\'));\n }\n\n if (alg[0] !== \'hmac\' && !PK_ALGOS[alg[0]]) {\n throw (new InvalidAlgorithmError(alg[0].toUpperCase() + \' type keys \' +\n \'are not supported\'));\n }\n\n if (!HASH_ALGOS[alg[1]]) {\n throw (new InvalidAlgorithmError(alg[1].toUpperCase() + \' is not a \' +\n \'supported hash algorithm\'));\n }\n\n return (alg);\n}\n\n///--- API\n\nmodule.exports = {\n\n HASH_ALGOS: HASH_ALGOS,\n PK_ALGOS: PK_ALGOS,\n\n HttpSignatureError: HttpSignatureError,\n InvalidAlgorithmError: InvalidAlgorithmError,\n\n validateAlgorithm: validateAlgorithm,\n\n /**\n * Converts an OpenSSH public key (rsa only) to a PKCS#8 PEM file.\n *\n * The intent of this module is to interoperate with OpenSSL only,\n * specifically the node crypto module\'s `verify` method.\n *\n * @param {String} key an OpenSSH public key.\n * @return {String} PEM encoded form of the RSA public key.\n * @throws {TypeError} on bad input.\n * @throws {Error} on invalid ssh key formatted data.\n */\n sshKeyToPEM: function sshKeyToPEM(key) {\n assert.string(key, \'ssh_key\');\n\n var k = sshpk.parseKey(key, \'ssh\');\n return (k.toString(\'pem\'));\n },\n\n\n /**\n * Generates an OpenSSH fingerprint from an ssh public key.\n *\n * @param {String} key an OpenSSH public key.\n * @return {String} key fingerprint.\n * @throws {TypeError} on bad input.\n * @throws {Error} if what you passed doesn\'t look like an ssh public key.\n */\n fingerprint: function fingerprint(key) {\n assert.string(key, \'ssh_key\');\n\n var k = sshpk.parseKey(key, \'ssh\');\n return (k.fingerprint(\'md5\').toString(\'hex\'));\n },\n\n /**\n * Converts a PKGCS#8 PEM file to an OpenSSH public key (rsa)\n *\n * The reverse of the above function.\n */\n pemToRsaSSHKey: function pemToRsaSSHKey(pem, comment) {\n assert.equal(\'string\', typeof (pem), \'typeof pem\');\n\n var k = sshpk.parseKey(pem, \'pem\');\n k.comment = comment;\n return (k.toString(\'ssh\'));\n }\n};\n\n\n/***/ }),\n/* 54 */\n/*!*******************************************************!*\\\n !*** ./node_modules/sshpk/lib/formats/ssh-private.js ***!\n \\*******************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\treadSSHPrivate: readSSHPrivate,\n\twrite: write\n};\n\nvar assert = __webpack_require__(/*! assert-plus */ 1);\nvar asn1 = __webpack_require__(/*! asn1 */ 21);\nvar Buffer = __webpack_require__(/*! safer-buffer */ 3).Buffer;\nvar algs = __webpack_require__(/*! ../algs */ 8);\nvar utils = __webpack_require__(/*! ../utils */ 6);\nvar crypto = __webpack_require__(/*! crypto */ 2);\n\nvar Key = __webpack_require__(/*! ../key */ 7);\nvar PrivateKey = __webpack_require__(/*! ../private-key */ 9);\nvar pem = __webpack_require__(/*! ./pem */ 26);\nvar rfc4253 = __webpack_require__(/*! ./rfc4253 */ 31);\nvar SSHBuffer = __webpack_require__(/*! ../ssh-buffer */ 44);\nvar errors = __webpack_require__(/*! ../errors */ 18);\n\nvar bcrypt;\n\nfunction read(buf, options) {\n\treturn (pem.read(buf, options));\n}\n\nvar MAGIC = \'openssh-key-v1\';\n\nfunction readSSHPrivate(type, buf, options) {\n\tbuf = new SSHBuffer({buffer: buf});\n\n\tvar magic = buf.readCString();\n\tassert.strictEqual(magic, MAGIC, \'bad magic string\');\n\n\tvar cipher = buf.readString();\n\tvar kdf = buf.readString();\n\tvar kdfOpts = buf.readBuffer();\n\n\tvar nkeys = buf.readInt();\n\tif (nkeys !== 1) {\n\t\tthrow (new Error(\'OpenSSH-format key file contains \' +\n\t\t \'multiple keys: this is unsupported.\'));\n\t}\n\n\tvar pubKey = buf.readBuffer();\n\n\tif (type === \'public\') {\n\t\tassert.ok(buf.atEnd(), \'excess bytes left after key\');\n\t\treturn (rfc4253.read(pubKey));\n\t}\n\n\tvar privKeyBlob = buf.readBuffer();\n\tassert.ok(buf.atEnd(), \'excess bytes left after key\');\n\n\tvar kdfOptsBuf = new SSHBuffer({ buffer: kdfOpts });\n\tswitch (kdf) {\n\tcase \'none\':\n\t\tif (cipher !== \'none\') {\n\t\t\tthrow (new Error(\'OpenSSH-format key uses KDF "none" \' +\n\t\t\t \'but specifies a cipher other than "none"\'));\n\t\t}\n\t\tbreak;\n\tcase \'bcrypt\':\n\t\tvar salt = kdfOptsBuf.readBuffer();\n\t\tvar rounds = kdfOptsBuf.readInt();\n\t\tvar cinf = utils.opensshCipherInfo(cipher);\n\t\tif (bcrypt === undefined) {\n\t\t\tbcrypt = __webpack_require__(/*! bcrypt-pbkdf */ 104);\n\t\t}\n\n\t\tif (typeof (options.passphrase) === \'string\') {\n\t\t\toptions.passphrase = Buffer.from(options.passphrase,\n\t\t\t \'utf-8\');\n\t\t}\n\t\tif (!Buffer.isBuffer(options.passphrase)) {\n\t\t\tthrow (new errors.KeyEncryptedError(\n\t\t\t options.filename, \'OpenSSH\'));\n\t\t}\n\n\t\tvar pass = new Uint8Array(options.passphrase);\n\t\tvar salti = new Uint8Array(salt);\n\t\t/* Use the pbkdf to derive both the key and the IV. */\n\t\tvar out = new Uint8Array(cinf.keySize + cinf.blockSize);\n\t\tvar res = bcrypt.pbkdf(pass, pass.length, salti, salti.length,\n\t\t out, out.length, rounds);\n\t\tif (res !== 0) {\n\t\t\tthrow (new Error(\'bcrypt_pbkdf function returned \' +\n\t\t\t \'failure, parameters invalid\'));\n\t\t}\n\t\tout = Buffer.from(out);\n\t\tvar ckey = out.slice(0, cinf.keySize);\n\t\tvar iv = out.slice(cinf.keySize, cinf.keySize + cinf.blockSize);\n\t\tvar cipherStream = crypto.createDecipheriv(cinf.opensslName,\n\t\t ckey, iv);\n\t\tcipherStream.setAutoPadding(false);\n\t\tvar chunk, chunks = [];\n\t\tcipherStream.once(\'error\', function (e) {\n\t\t\tif (e.toString().indexOf(\'bad decrypt\') !== -1) {\n\t\t\t\tthrow (new Error(\'Incorrect passphrase \' +\n\t\t\t\t \'supplied, could not decrypt key\'));\n\t\t\t}\n\t\t\tthrow (e);\n\t\t});\n\t\tcipherStream.write(privKeyBlob);\n\t\tcipherStream.end();\n\t\twhile ((chunk = cipherStream.read()) !== null)\n\t\t\tchunks.push(chunk);\n\t\tprivKeyBlob = Buffer.concat(chunks);\n\t\tbreak;\n\tdefault:\n\t\tthrow (new Error(\n\t\t \'OpenSSH-format key uses unknown KDF "\' + kdf + \'"\'));\n\t}\n\n\tbuf = new SSHBuffer({buffer: privKeyBlob});\n\n\tvar checkInt1 = buf.readInt();\n\tvar checkInt2 = buf.readInt();\n\tif (checkInt1 !== checkInt2) {\n\t\tthrow (new Error(\'Incorrect passphrase supplied, could not \' +\n\t\t \'decrypt key\'));\n\t}\n\n\tvar ret = {};\n\tvar key = rfc4253.readInternal(ret, \'private\', buf.remainder());\n\n\tbuf.skip(ret.consumed);\n\n\tvar comment = buf.readString();\n\tkey.comment = comment;\n\n\treturn (key);\n}\n\nfunction write(key, options) {\n\tvar pubKey;\n\tif (PrivateKey.isPrivateKey(key))\n\t\tpubKey = key.toPublic();\n\telse\n\t\tpubKey = key;\n\n\tvar cipher = \'none\';\n\tvar kdf = \'none\';\n\tvar kdfopts = Buffer.alloc(0);\n\tvar cinf = { blockSize: 8 };\n\tvar passphrase;\n\tif (options !== undefined) {\n\t\tpassphrase = options.passphrase;\n\t\tif (typeof (passphrase) === \'string\')\n\t\t\tpassphrase = Buffer.from(passphrase, \'utf-8\');\n\t\tif (passphrase !== undefined) {\n\t\t\tassert.buffer(passphrase, \'options.passphrase\');\n\t\t\tassert.optionalString(options.cipher, \'options.cipher\');\n\t\t\tcipher = options.cipher;\n\t\t\tif (cipher === undefined)\n\t\t\t\tcipher = \'aes128-ctr\';\n\t\t\tcinf = utils.opensshCipherInfo(cipher);\n\t\t\tkdf = \'bcrypt\';\n\t\t}\n\t}\n\n\tvar privBuf;\n\tif (PrivateKey.isPrivateKey(key)) {\n\t\tprivBuf = new SSHBuffer({});\n\t\tvar checkInt = crypto.randomBytes(4).readUInt32BE(0);\n\t\tprivBuf.writeInt(checkInt);\n\t\tprivBuf.writeInt(checkInt);\n\t\tprivBuf.write(key.toBuffer(\'rfc4253\'));\n\t\tprivBuf.writeString(key.comment || \'\');\n\n\t\tvar n = 1;\n\t\twhile (privBuf._offset % cinf.blockSize !== 0)\n\t\t\tprivBuf.writeChar(n++);\n\t\tprivBuf = privBuf.toBuffer();\n\t}\n\n\tswitch (kdf) {\n\tcase \'none\':\n\t\tbreak;\n\tcase \'bcrypt\':\n\t\tvar salt = crypto.randomBytes(16);\n\t\tvar rounds = 16;\n\t\tvar kdfssh = new SSHBuffer({});\n\t\tkdfssh.writeBuffer(salt);\n\t\tkdfssh.writeInt(rounds);\n\t\tkdfopts = kdfssh.toBuffer();\n\n\t\tif (bcrypt === undefined) {\n\t\t\tbcrypt = __webpack_require__(/*! bcrypt-pbkdf */ 104);\n\t\t}\n\t\tvar pass = new Uint8Array(passphrase);\n\t\tvar salti = new Uint8Array(salt);\n\t\t/* Use the pbkdf to derive both the key and the IV. */\n\t\tvar out = new Uint8Array(cinf.keySize + cinf.blockSize);\n\t\tvar res = bcrypt.pbkdf(pass, pass.length, salti, salti.length,\n\t\t out, out.length, rounds);\n\t\tif (res !== 0) {\n\t\t\tthrow (new Error(\'bcrypt_pbkdf function returned \' +\n\t\t\t \'failure, parameters invalid\'));\n\t\t}\n\t\tout = Buffer.from(out);\n\t\tvar ckey = out.slice(0, cinf.keySize);\n\t\tvar iv = out.slice(cinf.keySize, cinf.keySize + cinf.blockSize);\n\n\t\tvar cipherStream = crypto.createCipheriv(cinf.opensslName,\n\t\t ckey, iv);\n\t\tcipherStream.setAutoPadding(false);\n\t\tvar chunk, chunks = [];\n\t\tcipherStream.once(\'error\', function (e) {\n\t\t\tthrow (e);\n\t\t});\n\t\tcipherStream.write(privBuf);\n\t\tcipherStream.end();\n\t\twhile ((chunk = cipherStream.read()) !== null)\n\t\t\tchunks.push(chunk);\n\t\tprivBuf = Buffer.concat(chunks);\n\t\tbreak;\n\tdefault:\n\t\tthrow (new Error(\'Unsupported kdf \' + kdf));\n\t}\n\n\tvar buf = new SSHBuffer({});\n\n\tbuf.writeCString(MAGIC);\n\tbuf.writeString(cipher);\t/* cipher */\n\tbuf.writeString(kdf);\t\t/* kdf */\n\tbuf.writeBuffer(kdfopts);\t/* kdfoptions */\n\n\tbuf.writeInt(1);\t\t/* nkeys */\n\tbuf.writeBuffer(pubKey.toBuffer(\'rfc4253\'));\n\n\tif (privBuf)\n\t\tbuf.writeBuffer(privBuf);\n\n\tbuf = buf.toBuffer();\n\n\tvar header;\n\tif (PrivateKey.isPrivateKey(key))\n\t\theader = \'OPENSSH PRIVATE KEY\';\n\telse\n\t\theader = \'OPENSSH PUBLIC KEY\';\n\n\tvar tmp = buf.toString(\'base64\');\n\tvar len = tmp.length + (tmp.length / 70) +\n\t 18 + 16 + header.length*2 + 10;\n\tbuf = Buffer.alloc(len);\n\tvar o = 0;\n\to += buf.write(\'-----BEGIN \' + header + \'-----\\n\', o);\n\tfor (var i = 0; i < tmp.length; ) {\n\t\tvar limit = i + 70;\n\t\tif (limit > tmp.length)\n\t\t\tlimit = tmp.length;\n\t\to += buf.write(tmp.slice(i, limit), o);\n\t\tbuf[o++] = 10;\n\t\ti = limit;\n\t}\n\to += buf.write(\'-----END \' + header + \'-----\\n\', o);\n\n\treturn (buf.slice(0, o));\n}\n\n\n/***/ }),\n/* 55 */\n/*!************************************!*\\\n !*** ./node_modules/uuid/index.js ***!\n \\************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar v1 = __webpack_require__(/*! ./v1 */ 280);\nvar v4 = __webpack_require__(/*! ./v4 */ 131);\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\n\nmodule.exports = uuid;\n\n\n/***/ }),\n/* 56 */\n/*!***********************************!*\\\n !*** ./src/api/hotkeyProvider.ts ***!\n \\***********************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nObject.defineProperty(exports, "__esModule", { value: true });\nclass HotkeyProvider {\n constructor() {\n this.hotkeys = [];\n }\n}\nexports.HotkeyProvider = HotkeyProvider;\n\n\n/***/ }),\n/* 57 */\n/*!*********************!*\\\n !*** external "os" ***!\n \\*********************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE__57__;\n\n/***/ }),\n/* 58 */\n/*!**************************!*\\\n !*** ./src/api/theme.ts ***!\n \\**************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nObject.defineProperty(exports, "__esModule", { value: true });\nclass Theme {\n}\nexports.Theme = Theme;\n\n\n/***/ }),\n/* 59 */\n/*!********************************************!*\\\n !*** ./node_modules/axios/lib/defaults.js ***!\n \\********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\nvar utils = __webpack_require__(/*! ./utils */ 13);\nvar normalizeHeaderName = __webpack_require__(/*! ./helpers/normalizeHeaderName */ 155);\n\nvar DEFAULT_CONTENT_TYPE = {\n \'Content-Type\': \'application/x-www-form-urlencoded\'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers[\'Content-Type\'])) {\n headers[\'Content-Type\'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== \'undefined\') {\n // For browsers use XHR adapter\n adapter = __webpack_require__(/*! ./adapters/xhr */ 156);\n } else if (typeof process !== \'undefined\') {\n // For node use HTTP adapter\n adapter = __webpack_require__(/*! ./adapters/http */ 161);\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, \'Content-Type\');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, \'application/x-www-form-urlencoded;charset=utf-8\');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, \'application/json;charset=utf-8\');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === \'string\') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: \'XSRF-TOKEN\',\n xsrfHeaderName: \'X-XSRF-TOKEN\',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n \'Accept\': \'application/json, text/plain, */*\'\n }\n};\n\nutils.forEach([\'delete\', \'get\', \'head\'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach([\'post\', \'put\', \'patch\'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n\n\n/***/ }),\n/* 60 */\n/*!****************************************************!*\\\n !*** ./node_modules/axios/lib/core/createError.js ***!\n \\****************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\nvar enhanceError = __webpack_require__(/*! ./enhanceError */ 82);\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, \'ECONNABORTED\').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n\n\n/***/ }),\n/* 61 */\n/*!*********************************************!*\\\n !*** ./src/components/baseTab.component.ts ***!\n \\*********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nObject.defineProperty(exports, "__esModule", { value: true });\nconst rxjs_1 = __webpack_require__(/*! rxjs */ 5);\nclass BaseTabComponent {\n constructor() {\n this.hasFocus = false;\n this.hasActivity = false;\n this.color = null;\n this.titleChange = new rxjs_1.Subject();\n this.focused = new rxjs_1.Subject();\n this.blurred = new rxjs_1.Subject();\n this.progress = new rxjs_1.Subject();\n this.activity = new rxjs_1.Subject();\n this.destroyed = new rxjs_1.Subject();\n this.id = BaseTabComponent.lastTabID++;\n this.focused$.subscribe(() => {\n this.hasFocus = true;\n });\n this.blurred$.subscribe(() => {\n this.hasFocus = false;\n });\n }\n get focused$() { return this.focused; }\n get blurred$() { return this.blurred; }\n get titleChange$() { return this.titleChange; }\n get progress$() { return this.progress; }\n get activity$() { return this.activity; }\n get destroyed$() { return this.destroyed; }\n setTitle(title) {\n this.title = title;\n if (!this.customTitle) {\n this.titleChange.next(title);\n }\n }\n setProgress(progress) {\n this.progress.next(progress);\n if (progress) {\n if (this.progressClearTimeout) {\n clearTimeout(this.progressClearTimeout);\n }\n this.progressClearTimeout = setTimeout(() => {\n this.setProgress(null);\n }, 5000);\n }\n }\n displayActivity() {\n this.hasActivity = true;\n this.activity.next(true);\n }\n clearActivity() {\n this.hasActivity = false;\n this.activity.next(false);\n }\n getRecoveryToken() {\n return __awaiter(this, void 0, void 0, function* () {\n return null;\n });\n }\n getCurrentProcess() {\n return __awaiter(this, void 0, void 0, function* () {\n return null;\n });\n }\n canClose() {\n return __awaiter(this, void 0, void 0, function* () {\n return true;\n });\n }\n emitFocused() {\n this.focused.next();\n }\n emitBlurred() {\n this.blurred.next();\n }\n destroy() {\n this.focused.complete();\n this.blurred.complete();\n this.titleChange.complete();\n this.progress.complete();\n this.destroyed.next();\n this.destroyed.complete();\n }\n}\nBaseTabComponent.lastTabID = 0;\nexports.BaseTabComponent = BaseTabComponent;\n\n\n/***/ }),\n/* 62 */\n/*!**************************************!*\\\n !*** ./node_modules/extend/index.js ***!\n \\**************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === \'function\') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === \'[object Array]\';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== \'[object Object]\') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, \'constructor\');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, \'isPrototypeOf\');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === \'undefined\' || hasOwn.call(obj, key);\n};\n\n// If name is \'__proto__\', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === \'__proto__\') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if \'__proto__\' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === \'__proto__\') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj[\'__proto__\'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === \'boolean\') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== \'object\' && typeof target !== \'function\')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we\'re merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don\'t bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== \'undefined\') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n/***/ }),\n/* 63 */\n/*!**********************!*\\\n !*** external "net" ***!\n \\**********************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = require("net");\n\n/***/ }),\n/* 64 */\n/*!*********************************************!*\\\n !*** ./node_modules/request/lib/helpers.js ***!\n \\*********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\nvar jsonSafeStringify = __webpack_require__(/*! json-stringify-safe */ 183)\nvar crypto = __webpack_require__(/*! crypto */ 2)\nvar Buffer = __webpack_require__(/*! safe-buffer */ 38).Buffer\n\nvar defer = typeof setImmediate === \'undefined\'\n ? process.nextTick\n : setImmediate\n\nfunction paramsHaveRequestBody (params) {\n return (\n params.body ||\n params.requestBodyStream ||\n (params.json && typeof params.json !== \'boolean\') ||\n params.multipart\n )\n}\n\nfunction safeStringify (obj, replacer) {\n var ret\n try {\n ret = JSON.stringify(obj, replacer)\n } catch (e) {\n ret = jsonSafeStringify(obj, replacer)\n }\n return ret\n}\n\nfunction md5 (str) {\n return crypto.createHash(\'md5\').update(str).digest(\'hex\')\n}\n\nfunction isReadStream (rs) {\n return rs.readable && rs.path && rs.mode\n}\n\nfunction toBase64 (str) {\n return Buffer.from(str || \'\', \'utf8\').toString(\'base64\')\n}\n\nfunction copy (obj) {\n var o = {}\n Object.keys(obj).forEach(function (i) {\n o[i] = obj[i]\n })\n return o\n}\n\nfunction version () {\n var numbers = process.version.replace(\'v\', \'\').split(\'.\')\n return {\n major: parseInt(numbers[0], 10),\n minor: parseInt(numbers[1], 10),\n patch: parseInt(numbers[2], 10)\n }\n}\n\nexports.paramsHaveRequestBody = paramsHaveRequestBody\nexports.safeStringify = safeStringify\nexports.md5 = md5\nexports.isReadStream = isReadStream\nexports.toBase64 = toBase64\nexports.copy = copy\nexports.version = version\nexports.defer = defer\n\n\n/***/ }),\n/* 65 */\n/*!*****************************************!*\\\n !*** ./node_modules/hawk/lib/crypto.js ***!\n \\*****************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\n// Load modules\n\nconst Crypto = __webpack_require__(/*! crypto */ 2);\nconst Url = __webpack_require__(/*! url */ 11);\nconst Utils = __webpack_require__(/*! ./utils */ 52);\n\n\n// Declare internals\n\nconst internals = {};\n\n\n// MAC normalization format version\n\nexports.headerVersion = \'1\'; // Prevent comparison of mac values generated with different normalized string formats\n\n\n// Supported HMAC algorithms\n\nexports.algorithms = [\'sha1\', \'sha256\'];\n\n\n// Calculate the request MAC\n\n/*\n type: \'header\', // \'header\', \'bewit\', \'response\'\n credentials: {\n key: \'aoijedoaijsdlaksjdl\',\n algorithm: \'sha256\' // \'sha1\', \'sha256\'\n },\n options: {\n method: \'GET\',\n resource: \'/resource?a=1&b=2\',\n host: \'example.com\',\n port: 8080,\n ts: 1357718381034,\n nonce: \'d3d345f\',\n hash: \'U4MKKSmiVxk37JCCrAVIjV/OhB3y+NdwoCr6RShbVkE=\',\n ext: \'app-specific-data\',\n app: \'hf48hd83qwkj\', // Application id (Oz)\n dlg: \'d8djwekds9cj\' // Delegated by application id (Oz), requires options.app\n }\n*/\n\nexports.calculateMac = function (type, credentials, options) {\n\n const normalized = exports.generateNormalizedString(type, options);\n\n const hmac = Crypto.createHmac(credentials.algorithm, credentials.key).update(normalized);\n const digest = hmac.digest(\'base64\');\n return digest;\n};\n\n\nexports.generateNormalizedString = function (type, options) {\n\n let resource = options.resource || \'\';\n if (resource &&\n resource[0] !== \'/\') {\n\n const url = Url.parse(resource, false);\n resource = url.path; // Includes query\n }\n\n let normalized = \'hawk.\' + exports.headerVersion + \'.\' + type + \'\\n\' +\n options.ts + \'\\n\' +\n options.nonce + \'\\n\' +\n (options.method || \'\').toUpperCase() + \'\\n\' +\n resource + \'\\n\' +\n options.host.toLowerCase() + \'\\n\' +\n options.port + \'\\n\' +\n (options.hash || \'\') + \'\\n\';\n\n if (options.ext) {\n normalized = normalized + options.ext.replace(\'\\\\\', \'\\\\\\\\\').replace(\'\\n\', \'\\\\n\');\n }\n\n normalized = normalized + \'\\n\';\n\n if (options.app) {\n normalized = normalized + options.app + \'\\n\' +\n (options.dlg || \'\') + \'\\n\';\n }\n\n return normalized;\n};\n\n\nexports.calculatePayloadHash = function (payload, algorithm, contentType) {\n\n const hash = exports.initializePayloadHash(algorithm, contentType);\n hash.update(payload || \'\');\n return exports.finalizePayloadHash(hash);\n};\n\n\nexports.initializePayloadHash = function (algorithm, contentType) {\n\n const hash = Crypto.createHash(algorithm);\n hash.update(\'hawk.\' + exports.headerVersion + \'.payload\\n\');\n hash.update(Utils.parseContentType(contentType) + \'\\n\');\n return hash;\n};\n\n\nexports.finalizePayloadHash = function (hash) {\n\n hash.update(\'\\n\');\n return hash.digest(\'base64\');\n};\n\n\nexports.calculateTsMac = function (ts, credentials) {\n\n const hmac = Crypto.createHmac(credentials.algorithm, credentials.key);\n hmac.update(\'hawk.\' + exports.headerVersion + \'.ts\\n\' + ts + \'\\n\');\n return hmac.digest(\'base64\');\n};\n\n\nexports.timestampMessage = function (credentials, localtimeOffsetMsec) {\n\n const now = Utils.nowSecs(localtimeOffsetMsec);\n const tsm = exports.calculateTsMac(now, credentials);\n return { ts: now, tsm };\n};\n\n\n/***/ }),\n/* 66 */\n/*!*****************************************!*\\\n !*** ./node_modules/sshpk/lib/index.js ***!\n \\*****************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2015 Joyent, Inc.\n\nvar Key = __webpack_require__(/*! ./key */ 7);\nvar Fingerprint = __webpack_require__(/*! ./fingerprint */ 40);\nvar Signature = __webpack_require__(/*! ./signature */ 19);\nvar PrivateKey = __webpack_require__(/*! ./private-key */ 9);\nvar Certificate = __webpack_require__(/*! ./certificate */ 41);\nvar Identity = __webpack_require__(/*! ./identity */ 45);\nvar errs = __webpack_require__(/*! ./errors */ 18);\n\nmodule.exports = {\n\t/* top-level classes */\n\tKey: Key,\n\tparseKey: Key.parse,\n\tFingerprint: Fingerprint,\n\tparseFingerprint: Fingerprint.parse,\n\tSignature: Signature,\n\tparseSignature: Signature.parse,\n\tPrivateKey: PrivateKey,\n\tparsePrivateKey: PrivateKey.parse,\n\tgeneratePrivateKey: PrivateKey.generate,\n\tCertificate: Certificate,\n\tparseCertificate: Certificate.parse,\n\tcreateSelfSignedCertificate: Certificate.createSelfSigned,\n\tcreateCertificate: Certificate.create,\n\tIdentity: Identity,\n\tidentityFromDN: Identity.parseDN,\n\tidentityForHost: Identity.forHost,\n\tidentityForUser: Identity.forUser,\n\tidentityForEmail: Identity.forEmail,\n\n\t/* errors */\n\tFingerprintFormatError: errs.FingerprintFormatError,\n\tInvalidAlgorithmError: errs.InvalidAlgorithmError,\n\tKeyParseError: errs.KeyParseError,\n\tSignatureParseError: errs.SignatureParseError,\n\tKeyEncryptedError: errs.KeyEncryptedError,\n\tCertificateParseError: errs.CertificateParseError\n};\n\n\n/***/ }),\n/* 67 */\n/*!***************************************!*\\\n !*** ./node_modules/sshpk/lib/dhe.js ***!\n \\***************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2017 Joyent, Inc.\n\nmodule.exports = {\n\tDiffieHellman: DiffieHellman,\n\tgenerateECDSA: generateECDSA,\n\tgenerateED25519: generateED25519\n};\n\nvar assert = __webpack_require__(/*! assert-plus */ 1);\nvar crypto = __webpack_require__(/*! crypto */ 2);\nvar Buffer = __webpack_require__(/*! safer-buffer */ 3).Buffer;\nvar algs = __webpack_require__(/*! ./algs */ 8);\nvar utils = __webpack_require__(/*! ./utils */ 6);\nvar nacl;\n\nvar Key = __webpack_require__(/*! ./key */ 7);\nvar PrivateKey = __webpack_require__(/*! ./private-key */ 9);\n\nvar CRYPTO_HAVE_ECDH = (crypto.createECDH !== undefined);\n\nvar ecdh, ec, jsbn;\n\nfunction DiffieHellman(key) {\n\tutils.assertCompatible(key, Key, [1, 4], \'key\');\n\tthis._isPriv = PrivateKey.isPrivateKey(key, [1, 3]);\n\tthis._algo = key.type;\n\tthis._curve = key.curve;\n\tthis._key = key;\n\tif (key.type === \'dsa\') {\n\t\tif (!CRYPTO_HAVE_ECDH) {\n\t\t\tthrow (new Error(\'Due to bugs in the node 0.10 \' +\n\t\t\t \'crypto API, node 0.12.x or later is required \' +\n\t\t\t \'to use DH\'));\n\t\t}\n\t\tthis._dh = crypto.createDiffieHellman(\n\t\t key.part.p.data, undefined,\n\t\t key.part.g.data, undefined);\n\t\tthis._p = key.part.p;\n\t\tthis._g = key.part.g;\n\t\tif (this._isPriv)\n\t\t\tthis._dh.setPrivateKey(key.part.x.data);\n\t\tthis._dh.setPublicKey(key.part.y.data);\n\n\t} else if (key.type === \'ecdsa\') {\n\t\tif (!CRYPTO_HAVE_ECDH) {\n\t\t\tif (ecdh === undefined)\n\t\t\t\tecdh = __webpack_require__(/*! ecc-jsbn */ 101);\n\t\t\tif (ec === undefined)\n\t\t\t\tec = __webpack_require__(/*! ecc-jsbn/lib/ec */ 42);\n\t\t\tif (jsbn === undefined)\n\t\t\t\tjsbn = __webpack_require__(/*! jsbn */ 25).BigInteger;\n\n\t\t\tthis._ecParams = new X9ECParameters(this._curve);\n\n\t\t\tif (this._isPriv) {\n\t\t\t\tthis._priv = new ECPrivate(\n\t\t\t\t this._ecParams, key.part.d.data);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tvar curve = {\n\t\t\t\'nistp256\': \'prime256v1\',\n\t\t\t\'nistp384\': \'secp384r1\',\n\t\t\t\'nistp521\': \'secp521r1\'\n\t\t}[key.curve];\n\t\tthis._dh = crypto.createECDH(curve);\n\t\tif (typeof (this._dh) !== \'object\' ||\n\t\t typeof (this._dh.setPrivateKey) !== \'function\') {\n\t\t\tCRYPTO_HAVE_ECDH = false;\n\t\t\tDiffieHellman.call(this, key);\n\t\t\treturn;\n\t\t}\n\t\tif (this._isPriv)\n\t\t\tthis._dh.setPrivateKey(key.part.d.data);\n\t\tthis._dh.setPublicKey(key.part.Q.data);\n\n\t} else if (key.type === \'curve25519\') {\n\t\tif (nacl === undefined)\n\t\t\tnacl = __webpack_require__(/*! tweetnacl */ 20);\n\n\t\tif (this._isPriv) {\n\t\t\tutils.assertCompatible(key, PrivateKey, [1, 5], \'key\');\n\t\t\tthis._priv = key.part.k.data;\n\t\t}\n\n\t} else {\n\t\tthrow (new Error(\'DH not supported for \' + key.type + \' keys\'));\n\t}\n}\n\nDiffieHellman.prototype.getPublicKey = function () {\n\tif (this._isPriv)\n\t\treturn (this._key.toPublic());\n\treturn (this._key);\n};\n\nDiffieHellman.prototype.getPrivateKey = function () {\n\tif (this._isPriv)\n\t\treturn (this._key);\n\telse\n\t\treturn (undefined);\n};\nDiffieHellman.prototype.getKey = DiffieHellman.prototype.getPrivateKey;\n\nDiffieHellman.prototype._keyCheck = function (pk, isPub) {\n\tassert.object(pk, \'key\');\n\tif (!isPub)\n\t\tutils.assertCompatible(pk, PrivateKey, [1, 3], \'key\');\n\tutils.assertCompatible(pk, Key, [1, 4], \'key\');\n\n\tif (pk.type !== this._algo) {\n\t\tthrow (new Error(\'A \' + pk.type + \' key cannot be used in \' +\n\t\t this._algo + \' Diffie-Hellman\'));\n\t}\n\n\tif (pk.curve !== this._curve) {\n\t\tthrow (new Error(\'A key from the \' + pk.curve + \' curve \' +\n\t\t \'cannot be used with a \' + this._curve +\n\t\t \' Diffie-Hellman\'));\n\t}\n\n\tif (pk.type === \'dsa\') {\n\t\tassert.deepEqual(pk.part.p, this._p,\n\t\t \'DSA key prime does not match\');\n\t\tassert.deepEqual(pk.part.g, this._g,\n\t\t \'DSA key generator does not match\');\n\t}\n};\n\nDiffieHellman.prototype.setKey = function (pk) {\n\tthis._keyCheck(pk);\n\n\tif (pk.type === \'dsa\') {\n\t\tthis._dh.setPrivateKey(pk.part.x.data);\n\t\tthis._dh.setPublicKey(pk.part.y.data);\n\n\t} else if (pk.type === \'ecdsa\') {\n\t\tif (CRYPTO_HAVE_ECDH) {\n\t\t\tthis._dh.setPrivateKey(pk.part.d.data);\n\t\t\tthis._dh.setPublicKey(pk.part.Q.data);\n\t\t} else {\n\t\t\tthis._priv = new ECPrivate(\n\t\t\t this._ecParams, pk.part.d.data);\n\t\t}\n\n\t} else if (pk.type === \'curve25519\') {\n\t\tvar k = pk.part.k;\n\t\tif (!pk.part.k)\n\t\t\tk = pk.part.r;\n\t\tthis._priv = k.data;\n\t\tif (this._priv[0] === 0x00)\n\t\t\tthis._priv = this._priv.slice(1);\n\t\tthis._priv = this._priv.slice(0, 32);\n\t}\n\tthis._key = pk;\n\tthis._isPriv = true;\n};\nDiffieHellman.prototype.setPrivateKey = DiffieHellman.prototype.setKey;\n\nDiffieHellman.prototype.computeSecret = function (otherpk) {\n\tthis._keyCheck(otherpk, true);\n\tif (!this._isPriv)\n\t\tthrow (new Error(\'DH exchange has not been initialized with \' +\n\t\t \'a private key yet\'));\n\n\tvar pub;\n\tif (this._algo === \'dsa\') {\n\t\treturn (this._dh.computeSecret(\n\t\t otherpk.part.y.data));\n\n\t} else if (this._algo === \'ecdsa\') {\n\t\tif (CRYPTO_HAVE_ECDH) {\n\t\t\treturn (this._dh.computeSecret(\n\t\t\t otherpk.part.Q.data));\n\t\t} else {\n\t\t\tpub = new ECPublic(\n\t\t\t this._ecParams, otherpk.part.Q.data);\n\t\t\treturn (this._priv.deriveSharedSecret(pub));\n\t\t}\n\n\t} else if (this._algo === \'curve25519\') {\n\t\tpub = otherpk.part.A.data;\n\t\twhile (pub[0] === 0x00 && pub.length > 32)\n\t\t\tpub = pub.slice(1);\n\t\tvar priv = this._priv;\n\t\tassert.strictEqual(pub.length, 32);\n\t\tassert.strictEqual(priv.length, 32);\n\n\t\tvar secret = nacl.box.before(new Uint8Array(pub),\n\t\t new Uint8Array(priv));\n\n\t\treturn (Buffer.from(secret));\n\t}\n\n\tthrow (new Error(\'Invalid algorithm: \' + this._algo));\n};\n\nDiffieHellman.prototype.generateKey = function () {\n\tvar parts = [];\n\tvar priv, pub;\n\tif (this._algo === \'dsa\') {\n\t\tthis._dh.generateKeys();\n\n\t\tparts.push({name: \'p\', data: this._p.data});\n\t\tparts.push({name: \'q\', data: this._key.part.q.data});\n\t\tparts.push({name: \'g\', data: this._g.data});\n\t\tparts.push({name: \'y\', data: this._dh.getPublicKey()});\n\t\tparts.push({name: \'x\', data: this._dh.getPrivateKey()});\n\t\tthis._key = new PrivateKey({\n\t\t\ttype: \'dsa\',\n\t\t\tparts: parts\n\t\t});\n\t\tthis._isPriv = true;\n\t\treturn (this._key);\n\n\t} else if (this._algo === \'ecdsa\') {\n\t\tif (CRYPTO_HAVE_ECDH) {\n\t\t\tthis._dh.generateKeys();\n\n\t\t\tparts.push({name: \'curve\',\n\t\t\t data: Buffer.from(this._curve)});\n\t\t\tparts.push({name: \'Q\', data: this._dh.getPublicKey()});\n\t\t\tparts.push({name: \'d\', data: this._dh.getPrivateKey()});\n\t\t\tthis._key = new PrivateKey({\n\t\t\t\ttype: \'ecdsa\',\n\t\t\t\tcurve: this._curve,\n\t\t\t\tparts: parts\n\t\t\t});\n\t\t\tthis._isPriv = true;\n\t\t\treturn (this._key);\n\n\t\t} else {\n\t\t\tvar n = this._ecParams.getN();\n\t\t\tvar r = new jsbn(crypto.randomBytes(n.bitLength()));\n\t\t\tvar n1 = n.subtract(jsbn.ONE);\n\t\t\tpriv = r.mod(n1).add(jsbn.ONE);\n\t\t\tpub = this._ecParams.getG().multiply(priv);\n\n\t\t\tpriv = Buffer.from(priv.toByteArray());\n\t\t\tpub = Buffer.from(this._ecParams.getCurve().\n\t\t\t encodePointHex(pub), \'hex\');\n\n\t\t\tthis._priv = new ECPrivate(this._ecParams, priv);\n\n\t\t\tparts.push({name: \'curve\',\n\t\t\t data: Buffer.from(this._curve)});\n\t\t\tparts.push({name: \'Q\', data: pub});\n\t\t\tparts.push({name: \'d\', data: priv});\n\n\t\t\tthis._key = new PrivateKey({\n\t\t\t\ttype: \'ecdsa\',\n\t\t\t\tcurve: this._curve,\n\t\t\t\tparts: parts\n\t\t\t});\n\t\t\tthis._isPriv = true;\n\t\t\treturn (this._key);\n\t\t}\n\n\t} else if (this._algo === \'curve25519\') {\n\t\tvar pair = nacl.box.keyPair();\n\t\tpriv = Buffer.from(pair.secretKey);\n\t\tpub = Buffer.from(pair.publicKey);\n\t\tpriv = Buffer.concat([priv, pub]);\n\t\tassert.strictEqual(priv.length, 64);\n\t\tassert.strictEqual(pub.length, 32);\n\n\t\tparts.push({name: \'A\', data: pub});\n\t\tparts.push({name: \'k\', data: priv});\n\t\tthis._key = new PrivateKey({\n\t\t\ttype: \'curve25519\',\n\t\t\tparts: parts\n\t\t});\n\t\tthis._isPriv = true;\n\t\treturn (this._key);\n\t}\n\n\tthrow (new Error(\'Invalid algorithm: \' + this._algo));\n};\nDiffieHellman.prototype.generateKeys = DiffieHellman.prototype.generateKey;\n\n/* These are helpers for using ecc-jsbn (for node 0.10 compatibility). */\n\nfunction X9ECParameters(name) {\n\tvar params = algs.curves[name];\n\tassert.object(params);\n\n\tvar p = new jsbn(params.p);\n\tvar a = new jsbn(params.a);\n\tvar b = new jsbn(params.b);\n\tvar n = new jsbn(params.n);\n\tvar h = jsbn.ONE;\n\tvar curve = new ec.ECCurveFp(p, a, b);\n\tvar G = curve.decodePointHex(params.G.toString(\'hex\'));\n\n\tthis.curve = curve;\n\tthis.g = G;\n\tthis.n = n;\n\tthis.h = h;\n}\nX9ECParameters.prototype.getCurve = function () { return (this.curve); };\nX9ECParameters.prototype.getG = function () { return (this.g); };\nX9ECParameters.prototype.getN = function () { return (this.n); };\nX9ECParameters.prototype.getH = function () { return (this.h); };\n\nfunction ECPublic(params, buffer) {\n\tthis._params = params;\n\tif (buffer[0] === 0x00)\n\t\tbuffer = buffer.slice(1);\n\tthis._pub = params.getCurve().decodePointHex(buffer.toString(\'hex\'));\n}\n\nfunction ECPrivate(params, buffer) {\n\tthis._params = params;\n\tthis._priv = new jsbn(utils.mpNormalize(buffer));\n}\nECPrivate.prototype.deriveSharedSecret = function (pubKey) {\n\tassert.ok(pubKey instanceof ECPublic);\n\tvar S = pubKey._pub.multiply(this._priv);\n\treturn (Buffer.from(S.getX().toBigInteger().toByteArray()));\n};\n\nfunction generateED25519() {\n\tif (nacl === undefined)\n\t\tnacl = __webpack_require__(/*! tweetnacl */ 20);\n\n\tvar pair = nacl.sign.keyPair();\n\tvar priv = Buffer.from(pair.secretKey);\n\tvar pub = Buffer.from(pair.publicKey);\n\tassert.strictEqual(priv.length, 64);\n\tassert.strictEqual(pub.length, 32);\n\n\tvar parts = [];\n\tparts.push({name: \'A\', data: pub});\n\tparts.push({name: \'k\', data: priv.slice(0, 32)});\n\tvar key = new PrivateKey({\n\t\ttype: \'ed25519\',\n\t\tparts: parts\n\t});\n\treturn (key);\n}\n\n/* Generates a new ECDSA private key on a given curve. */\nfunction generateECDSA(curve) {\n\tvar parts = [];\n\tvar key;\n\n\tif (CRYPTO_HAVE_ECDH) {\n\t\t/*\n\t\t * Node crypto doesn\'t expose key generation directly, but the\n\t\t * ECDH instances can generate keys. It turns out this just\n\t\t * calls into the OpenSSL generic key generator, and we can\n\t\t * read its output happily without doing an actual DH. So we\n\t\t * use that here.\n\t\t */\n\t\tvar osCurve = {\n\t\t\t\'nistp256\': \'prime256v1\',\n\t\t\t\'nistp384\': \'secp384r1\',\n\t\t\t\'nistp521\': \'secp521r1\'\n\t\t}[curve];\n\n\t\tvar dh = crypto.createECDH(osCurve);\n\t\tdh.generateKeys();\n\n\t\tparts.push({name: \'curve\',\n\t\t data: Buffer.from(curve)});\n\t\tparts.push({name: \'Q\', data: dh.getPublicKey()});\n\t\tparts.push({name: \'d\', data: dh.getPrivateKey()});\n\n\t\tkey = new PrivateKey({\n\t\t\ttype: \'ecdsa\',\n\t\t\tcurve: curve,\n\t\t\tparts: parts\n\t\t});\n\t\treturn (key);\n\t} else {\n\t\tif (ecdh === undefined)\n\t\t\tecdh = __webpack_require__(/*! ecc-jsbn */ 101);\n\t\tif (ec === undefined)\n\t\t\tec = __webpack_require__(/*! ecc-jsbn/lib/ec */ 42);\n\t\tif (jsbn === undefined)\n\t\t\tjsbn = __webpack_require__(/*! jsbn */ 25).BigInteger;\n\n\t\tvar ecParams = new X9ECParameters(curve);\n\n\t\t/* This algorithm taken from FIPS PUB 186-4 (section B.4.1) */\n\t\tvar n = ecParams.getN();\n\t\t/*\n\t\t * The crypto.randomBytes() function can only give us whole\n\t\t * bytes, so taking a nod from X9.62, we round up.\n\t\t */\n\t\tvar cByteLen = Math.ceil((n.bitLength() + 64) / 8);\n\t\tvar c = new jsbn(crypto.randomBytes(cByteLen));\n\n\t\tvar n1 = n.subtract(jsbn.ONE);\n\t\tvar priv = c.mod(n1).add(jsbn.ONE);\n\t\tvar pub = ecParams.getG().multiply(priv);\n\n\t\tpriv = Buffer.from(priv.toByteArray());\n\t\tpub = Buffer.from(ecParams.getCurve().\n\t\t encodePointHex(pub), \'hex\');\n\n\t\tparts.push({name: \'curve\', data: Buffer.from(curve)});\n\t\tparts.push({name: \'Q\', data: pub});\n\t\tparts.push({name: \'d\', data: priv});\n\n\t\tkey = new PrivateKey({\n\t\t\ttype: \'ecdsa\',\n\t\t\tcurve: curve,\n\t\t\tparts: parts\n\t\t});\n\t\treturn (key);\n\t}\n}\n\n\n/***/ }),\n/* 68 */\n/*!*********************************************!*\\\n !*** ./node_modules/asn1/lib/ber/errors.js ***!\n \\*********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\n// Copyright 2011 Mark Cavage All rights reserved.\n\n\nmodule.exports = {\n\n newInvalidAsn1Error: function (msg) {\n var e = new Error();\n e.name = \'InvalidAsn1Error\';\n e.message = msg || \'\';\n return e;\n }\n\n};\n\n\n/***/ }),\n/* 69 */\n/*!********************************************!*\\\n !*** ./node_modules/asn1/lib/ber/types.js ***!\n \\********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\n// Copyright 2011 Mark Cavage All rights reserved.\n\n\nmodule.exports = {\n EOC: 0,\n Boolean: 1,\n Integer: 2,\n BitString: 3,\n OctetString: 4,\n Null: 5,\n OID: 6,\n ObjectDescriptor: 7,\n External: 8,\n Real: 9, // float\n Enumeration: 10,\n PDV: 11,\n Utf8String: 12,\n RelativeOID: 13,\n Sequence: 16,\n Set: 17,\n NumericString: 18,\n PrintableString: 19,\n T61String: 20,\n VideotexString: 21,\n IA5String: 22,\n UTCTime: 23,\n GeneralizedTime: 24,\n GraphicString: 25,\n VisibleString: 26,\n GeneralString: 28,\n UniversalString: 29,\n CharacterString: 30,\n BMPString: 31,\n Constructor: 32,\n Context: 128\n};\n\n\n/***/ }),\n/* 70 */\n/*!*************************************************!*\\\n !*** ./node_modules/sshpk/lib/formats/pkcs1.js ***!\n \\*************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\treadPkcs1: readPkcs1,\n\twrite: write,\n\twritePkcs1: writePkcs1\n};\n\nvar assert = __webpack_require__(/*! assert-plus */ 1);\nvar asn1 = __webpack_require__(/*! asn1 */ 21);\nvar Buffer = __webpack_require__(/*! safer-buffer */ 3).Buffer;\nvar algs = __webpack_require__(/*! ../algs */ 8);\nvar utils = __webpack_require__(/*! ../utils */ 6);\n\nvar Key = __webpack_require__(/*! ../key */ 7);\nvar PrivateKey = __webpack_require__(/*! ../private-key */ 9);\nvar pem = __webpack_require__(/*! ./pem */ 26);\n\nvar pkcs8 = __webpack_require__(/*! ./pkcs8 */ 43);\nvar readECDSACurve = pkcs8.readECDSACurve;\n\nfunction read(buf, options) {\n\treturn (pem.read(buf, options, \'pkcs1\'));\n}\n\nfunction write(key, options) {\n\treturn (pem.write(key, options, \'pkcs1\'));\n}\n\n/* Helper to read in a single mpint */\nfunction readMPInt(der, nm) {\n\tassert.strictEqual(der.peek(), asn1.Ber.Integer,\n\t nm + \' is not an Integer\');\n\treturn (utils.mpNormalize(der.readString(asn1.Ber.Integer, true)));\n}\n\nfunction readPkcs1(alg, type, der) {\n\tswitch (alg) {\n\tcase \'RSA\':\n\t\tif (type === \'public\')\n\t\t\treturn (readPkcs1RSAPublic(der));\n\t\telse if (type === \'private\')\n\t\t\treturn (readPkcs1RSAPrivate(der));\n\t\tthrow (new Error(\'Unknown key type: \' + type));\n\tcase \'DSA\':\n\t\tif (type === \'public\')\n\t\t\treturn (readPkcs1DSAPublic(der));\n\t\telse if (type === \'private\')\n\t\t\treturn (readPkcs1DSAPrivate(der));\n\t\tthrow (new Error(\'Unknown key type: \' + type));\n\tcase \'EC\':\n\tcase \'ECDSA\':\n\t\tif (type === \'private\')\n\t\t\treturn (readPkcs1ECDSAPrivate(der));\n\t\telse if (type === \'public\')\n\t\t\treturn (readPkcs1ECDSAPublic(der));\n\t\tthrow (new Error(\'Unknown key type: \' + type));\n\tcase \'EDDSA\':\n\tcase \'EdDSA\':\n\t\tif (type === \'private\')\n\t\t\treturn (readPkcs1EdDSAPrivate(der));\n\t\tthrow (new Error(type + \' keys not supported with EdDSA\'));\n\tdefault:\n\t\tthrow (new Error(\'Unknown key algo: \' + alg));\n\t}\n}\n\nfunction readPkcs1RSAPublic(der) {\n\t// modulus and exponent\n\tvar n = readMPInt(der, \'modulus\');\n\tvar e = readMPInt(der, \'exponent\');\n\n\t// now, make the key\n\tvar key = {\n\t\ttype: \'rsa\',\n\t\tparts: [\n\t\t\t{ name: \'e\', data: e },\n\t\t\t{ name: \'n\', data: n }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs1RSAPrivate(der) {\n\tvar version = readMPInt(der, \'version\');\n\tassert.strictEqual(version[0], 0);\n\n\t// modulus then public exponent\n\tvar n = readMPInt(der, \'modulus\');\n\tvar e = readMPInt(der, \'public exponent\');\n\tvar d = readMPInt(der, \'private exponent\');\n\tvar p = readMPInt(der, \'prime1\');\n\tvar q = readMPInt(der, \'prime2\');\n\tvar dmodp = readMPInt(der, \'exponent1\');\n\tvar dmodq = readMPInt(der, \'exponent2\');\n\tvar iqmp = readMPInt(der, \'iqmp\');\n\n\t// now, make the key\n\tvar key = {\n\t\ttype: \'rsa\',\n\t\tparts: [\n\t\t\t{ name: \'n\', data: n },\n\t\t\t{ name: \'e\', data: e },\n\t\t\t{ name: \'d\', data: d },\n\t\t\t{ name: \'iqmp\', data: iqmp },\n\t\t\t{ name: \'p\', data: p },\n\t\t\t{ name: \'q\', data: q },\n\t\t\t{ name: \'dmodp\', data: dmodp },\n\t\t\t{ name: \'dmodq\', data: dmodq }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readPkcs1DSAPrivate(der) {\n\tvar version = readMPInt(der, \'version\');\n\tassert.strictEqual(version.readUInt8(0), 0);\n\n\tvar p = readMPInt(der, \'p\');\n\tvar q = readMPInt(der, \'q\');\n\tvar g = readMPInt(der, \'g\');\n\tvar y = readMPInt(der, \'y\');\n\tvar x = readMPInt(der, \'x\');\n\n\t// now, make the key\n\tvar key = {\n\t\ttype: \'dsa\',\n\t\tparts: [\n\t\t\t{ name: \'p\', data: p },\n\t\t\t{ name: \'q\', data: q },\n\t\t\t{ name: \'g\', data: g },\n\t\t\t{ name: \'y\', data: y },\n\t\t\t{ name: \'x\', data: x }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readPkcs1EdDSAPrivate(der) {\n\tvar version = readMPInt(der, \'version\');\n\tassert.strictEqual(version.readUInt8(0), 1);\n\n\t// private key\n\tvar k = der.readString(asn1.Ber.OctetString, true);\n\n\tder.readSequence(0xa0);\n\tvar oid = der.readOID();\n\tassert.strictEqual(oid, \'1.3.101.112\', \'the ed25519 curve identifier\');\n\n\tder.readSequence(0xa1);\n\tvar A = utils.readBitString(der);\n\n\tvar key = {\n\t\ttype: \'ed25519\',\n\t\tparts: [\n\t\t\t{ name: \'A\', data: utils.zeroPadToLength(A, 32) },\n\t\t\t{ name: \'k\', data: k }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction readPkcs1DSAPublic(der) {\n\tvar y = readMPInt(der, \'y\');\n\tvar p = readMPInt(der, \'p\');\n\tvar q = readMPInt(der, \'q\');\n\tvar g = readMPInt(der, \'g\');\n\n\tvar key = {\n\t\ttype: \'dsa\',\n\t\tparts: [\n\t\t\t{ name: \'y\', data: y },\n\t\t\t{ name: \'p\', data: p },\n\t\t\t{ name: \'q\', data: q },\n\t\t\t{ name: \'g\', data: g }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs1ECDSAPublic(der) {\n\tder.readSequence();\n\n\tvar oid = der.readOID();\n\tassert.strictEqual(oid, \'1.2.840.10045.2.1\', \'must be ecPublicKey\');\n\n\tvar curveOid = der.readOID();\n\n\tvar curve;\n\tvar curves = Object.keys(algs.curves);\n\tfor (var j = 0; j < curves.length; ++j) {\n\t\tvar c = curves[j];\n\t\tvar cd = algs.curves[c];\n\t\tif (cd.pkcs8oid === curveOid) {\n\t\t\tcurve = c;\n\t\t\tbreak;\n\t\t}\n\t}\n\tassert.string(curve, \'a known ECDSA named curve\');\n\n\tvar Q = der.readString(asn1.Ber.BitString, true);\n\tQ = utils.ecNormalize(Q);\n\n\tvar key = {\n\t\ttype: \'ecdsa\',\n\t\tparts: [\n\t\t\t{ name: \'curve\', data: Buffer.from(curve) },\n\t\t\t{ name: \'Q\', data: Q }\n\t\t]\n\t};\n\n\treturn (new Key(key));\n}\n\nfunction readPkcs1ECDSAPrivate(der) {\n\tvar version = readMPInt(der, \'version\');\n\tassert.strictEqual(version.readUInt8(0), 1);\n\n\t// private key\n\tvar d = der.readString(asn1.Ber.OctetString, true);\n\n\tder.readSequence(0xa0);\n\tvar curve = readECDSACurve(der);\n\tassert.string(curve, \'a known elliptic curve\');\n\n\tder.readSequence(0xa1);\n\tvar Q = der.readString(asn1.Ber.BitString, true);\n\tQ = utils.ecNormalize(Q);\n\n\tvar key = {\n\t\ttype: \'ecdsa\',\n\t\tparts: [\n\t\t\t{ name: \'curve\', data: Buffer.from(curve) },\n\t\t\t{ name: \'Q\', data: Q },\n\t\t\t{ name: \'d\', data: d }\n\t\t]\n\t};\n\n\treturn (new PrivateKey(key));\n}\n\nfunction writePkcs1(der, key) {\n\tder.startSequence();\n\n\tswitch (key.type) {\n\tcase \'rsa\':\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs1RSAPrivate(der, key);\n\t\telse\n\t\t\twritePkcs1RSAPublic(der, key);\n\t\tbreak;\n\tcase \'dsa\':\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs1DSAPrivate(der, key);\n\t\telse\n\t\t\twritePkcs1DSAPublic(der, key);\n\t\tbreak;\n\tcase \'ecdsa\':\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs1ECDSAPrivate(der, key);\n\t\telse\n\t\t\twritePkcs1ECDSAPublic(der, key);\n\t\tbreak;\n\tcase \'ed25519\':\n\t\tif (PrivateKey.isPrivateKey(key))\n\t\t\twritePkcs1EdDSAPrivate(der, key);\n\t\telse\n\t\t\twritePkcs1EdDSAPublic(der, key);\n\t\tbreak;\n\tdefault:\n\t\tthrow (new Error(\'Unknown key algo: \' + key.type));\n\t}\n\n\tder.endSequence();\n}\n\nfunction writePkcs1RSAPublic(der, key) {\n\tder.writeBuffer(key.part.n.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.e.data, asn1.Ber.Integer);\n}\n\nfunction writePkcs1RSAPrivate(der, key) {\n\tvar ver = Buffer.from([0]);\n\tder.writeBuffer(ver, asn1.Ber.Integer);\n\n\tder.writeBuffer(key.part.n.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.e.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.d.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n\tif (!key.part.dmodp || !key.part.dmodq)\n\t\tutils.addRSAMissing(key);\n\tder.writeBuffer(key.part.dmodp.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.dmodq.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.iqmp.data, asn1.Ber.Integer);\n}\n\nfunction writePkcs1DSAPrivate(der, key) {\n\tvar ver = Buffer.from([0]);\n\tder.writeBuffer(ver, asn1.Ber.Integer);\n\n\tder.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.g.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.y.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.x.data, asn1.Ber.Integer);\n}\n\nfunction writePkcs1DSAPublic(der, key) {\n\tder.writeBuffer(key.part.y.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.p.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.q.data, asn1.Ber.Integer);\n\tder.writeBuffer(key.part.g.data, asn1.Ber.Integer);\n}\n\nfunction writePkcs1ECDSAPublic(der, key) {\n\tder.startSequence();\n\n\tder.writeOID(\'1.2.840.10045.2.1\'); /* ecPublicKey */\n\tvar curve = key.part.curve.data.toString();\n\tvar curveOid = algs.curves[curve].pkcs8oid;\n\tassert.string(curveOid, \'a known ECDSA named curve\');\n\tder.writeOID(curveOid);\n\n\tder.endSequence();\n\n\tvar Q = utils.ecNormalize(key.part.Q.data, true);\n\tder.writeBuffer(Q, asn1.Ber.BitString);\n}\n\nfunction writePkcs1ECDSAPrivate(der, key) {\n\tvar ver = Buffer.from([1]);\n\tder.writeBuffer(ver, asn1.Ber.Integer);\n\n\tder.writeBuffer(key.part.d.data, asn1.Ber.OctetString);\n\n\tder.startSequence(0xa0);\n\tvar curve = key.part.curve.data.toString();\n\tvar curveOid = algs.curves[curve].pkcs8oid;\n\tassert.string(curveOid, \'a known ECDSA named curve\');\n\tder.writeOID(curveOid);\n\tder.endSequence();\n\n\tder.startSequence(0xa1);\n\tvar Q = utils.ecNormalize(key.part.Q.data, true);\n\tder.writeBuffer(Q, asn1.Ber.BitString);\n\tder.endSequence();\n}\n\nfunction writePkcs1EdDSAPrivate(der, key) {\n\tvar ver = Buffer.from([1]);\n\tder.writeBuffer(ver, asn1.Ber.Integer);\n\n\tder.writeBuffer(key.part.k.data, asn1.Ber.OctetString);\n\n\tder.startSequence(0xa0);\n\tder.writeOID(\'1.3.101.112\');\n\tder.endSequence();\n\n\tder.startSequence(0xa1);\n\tutils.writeBitString(der, key.part.A.data);\n\tder.endSequence();\n}\n\nfunction writePkcs1EdDSAPublic(der, key) {\n\tthrow (new Error(\'Public keys are not supported for EdDSA PKCS#1\'));\n}\n\n\n/***/ }),\n/* 71 */\n/*!**************************************************!*\\\n !*** ./node_modules/sshpk/lib/formats/dnssec.js ***!\n \\**************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2017 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\twrite: write\n};\n\nvar assert = __webpack_require__(/*! assert-plus */ 1);\nvar Buffer = __webpack_require__(/*! safer-buffer */ 3).Buffer;\nvar Key = __webpack_require__(/*! ../key */ 7);\nvar PrivateKey = __webpack_require__(/*! ../private-key */ 9);\nvar utils = __webpack_require__(/*! ../utils */ 6);\nvar SSHBuffer = __webpack_require__(/*! ../ssh-buffer */ 44);\nvar Dhe = __webpack_require__(/*! ../dhe */ 67);\n\nvar supportedAlgos = {\n\t\'rsa-sha1\' : 5,\n\t\'rsa-sha256\' : 8,\n\t\'rsa-sha512\' : 10,\n\t\'ecdsa-p256-sha256\' : 13,\n\t\'ecdsa-p384-sha384\' : 14\n\t/*\n\t * ed25519 is hypothetically supported with id 15\n\t * but the common tools available don\'t appear to be\n\t * capable of generating/using ed25519 keys\n\t */\n};\n\nvar supportedAlgosById = {};\nObject.keys(supportedAlgos).forEach(function (k) {\n\tsupportedAlgosById[supportedAlgos[k]] = k.toUpperCase();\n});\n\nfunction read(buf, options) {\n\tif (typeof (buf) !== \'string\') {\n\t\tassert.buffer(buf, \'buf\');\n\t\tbuf = buf.toString(\'ascii\');\n\t}\n\tvar lines = buf.split(\'\\n\');\n\tif (lines[0].match(/^Private-key-format\\: v1/)) {\n\t\tvar algElems = lines[1].split(\' \');\n\t\tvar algoNum = parseInt(algElems[1], 10);\n\t\tvar algoName = algElems[2];\n\t\tif (!supportedAlgosById[algoNum])\n\t\t\tthrow (new Error(\'Unsupported algorithm: \' + algoName));\n\t\treturn (readDNSSECPrivateKey(algoNum, lines.slice(2)));\n\t}\n\n\t// skip any comment-lines\n\tvar line = 0;\n\t/* JSSTYLED */\n\twhile (lines[line].match(/^\\;/))\n\t\tline++;\n\t// we should now have *one single* line left with our KEY on it.\n\tif ((lines[line].match(/\\. IN KEY /) ||\n\t lines[line].match(/\\. IN DNSKEY /)) && lines[line+1].length === 0) {\n\t\treturn (readRFC3110(lines[line]));\n\t}\n\tthrow (new Error(\'Cannot parse dnssec key\'));\n}\n\nfunction readRFC3110(keyString) {\n\tvar elems = keyString.split(\' \');\n\t//unused var flags = parseInt(elems[3], 10);\n\t//unused var protocol = parseInt(elems[4], 10);\n\tvar algorithm = parseInt(elems[5], 10);\n\tif (!supportedAlgosById[algorithm])\n\t\tthrow (new Error(\'Unsupported algorithm: \' + algorithm));\n\tvar base64key = elems.slice(6, elems.length).join();\n\tvar keyBuffer = Buffer.from(base64key, \'base64\');\n\tif (supportedAlgosById[algorithm].match(/^RSA-/)) {\n\t\t// join the rest of the body into a single base64-blob\n\t\tvar publicExponentLen = keyBuffer.readUInt8(0);\n\t\tif (publicExponentLen != 3 && publicExponentLen != 1)\n\t\t\tthrow (new Error(\'Cannot parse dnssec key: \' +\n\t\t\t \'unsupported exponent length\'));\n\n\t\tvar publicExponent = keyBuffer.slice(1, publicExponentLen+1);\n\t\tpublicExponent = utils.mpNormalize(publicExponent);\n\t\tvar modulus = keyBuffer.slice(1+publicExponentLen);\n\t\tmodulus = utils.mpNormalize(modulus);\n\t\t// now, make the key\n\t\tvar rsaKey = {\n\t\t\ttype: \'rsa\',\n\t\t\tparts: []\n\t\t};\n\t\trsaKey.parts.push({ name: \'e\', data: publicExponent});\n\t\trsaKey.parts.push({ name: \'n\', data: modulus});\n\t\treturn (new Key(rsaKey));\n\t}\n\tif (supportedAlgosById[algorithm] === \'ECDSA-P384-SHA384\' ||\n\t supportedAlgosById[algorithm] === \'ECDSA-P256-SHA256\') {\n\t\tvar curve = \'nistp384\';\n\t\tvar size = 384;\n\t\tif (supportedAlgosById[algorithm].match(/^ECDSA-P256-SHA256/)) {\n\t\t\tcurve = \'nistp256\';\n\t\t\tsize = 256;\n\t\t}\n\n\t\tvar ecdsaKey = {\n\t\t\ttype: \'ecdsa\',\n\t\t\tcurve: curve,\n\t\t\tsize: size,\n\t\t\tparts: [\n\t\t\t\t{name: \'curve\', data: Buffer.from(curve) },\n\t\t\t\t{name: \'Q\', data: utils.ecNormalize(keyBuffer) }\n\t\t\t]\n\t\t};\n\t\treturn (new Key(ecdsaKey));\n\t}\n\tthrow (new Error(\'Unsupported algorithm: \' +\n\t supportedAlgosById[algorithm]));\n}\n\nfunction elementToBuf(e) {\n\treturn (Buffer.from(e.split(\' \')[1], \'base64\'));\n}\n\nfunction readDNSSECRSAPrivateKey(elements) {\n\tvar rsaParams = {};\n\telements.forEach(function (element) {\n\t\tif (element.split(\' \')[0] === \'Modulus:\')\n\t\t\trsaParams[\'n\'] = elementToBuf(element);\n\t\telse if (element.split(\' \')[0] === \'PublicExponent:\')\n\t\t\trsaParams[\'e\'] = elementToBuf(element);\n\t\telse if (element.split(\' \')[0] === \'PrivateExponent:\')\n\t\t\trsaParams[\'d\'] = elementToBuf(element);\n\t\telse if (element.split(\' \')[0] === \'Prime1:\')\n\t\t\trsaParams[\'p\'] = elementToBuf(element);\n\t\telse if (element.split(\' \')[0] === \'Prime2:\')\n\t\t\trsaParams[\'q\'] = elementToBuf(element);\n\t\telse if (element.split(\' \')[0] === \'Exponent1:\')\n\t\t\trsaParams[\'dmodp\'] = elementToBuf(element);\n\t\telse if (element.split(\' \')[0] === \'Exponent2:\')\n\t\t\trsaParams[\'dmodq\'] = elementToBuf(element);\n\t\telse if (element.split(\' \')[0] === \'Coefficient:\')\n\t\t\trsaParams[\'iqmp\'] = elementToBuf(element);\n\t});\n\t// now, make the key\n\tvar key = {\n\t\ttype: \'rsa\',\n\t\tparts: [\n\t\t\t{ name: \'e\', data: utils.mpNormalize(rsaParams[\'e\'])},\n\t\t\t{ name: \'n\', data: utils.mpNormalize(rsaParams[\'n\'])},\n\t\t\t{ name: \'d\', data: utils.mpNormalize(rsaParams[\'d\'])},\n\t\t\t{ name: \'p\', data: utils.mpNormalize(rsaParams[\'p\'])},\n\t\t\t{ name: \'q\', data: utils.mpNormalize(rsaParams[\'q\'])},\n\t\t\t{ name: \'dmodp\',\n\t\t\t data: utils.mpNormalize(rsaParams[\'dmodp\'])},\n\t\t\t{ name: \'dmodq\',\n\t\t\t data: utils.mpNormalize(rsaParams[\'dmodq\'])},\n\t\t\t{ name: \'iqmp\',\n\t\t\t data: utils.mpNormalize(rsaParams[\'iqmp\'])}\n\t\t]\n\t};\n\treturn (new PrivateKey(key));\n}\n\nfunction readDNSSECPrivateKey(alg, elements) {\n\tif (supportedAlgosById[alg].match(/^RSA-/)) {\n\t\treturn (readDNSSECRSAPrivateKey(elements));\n\t}\n\tif (supportedAlgosById[alg] === \'ECDSA-P384-SHA384\' ||\n\t supportedAlgosById[alg] === \'ECDSA-P256-SHA256\') {\n\t\tvar d = Buffer.from(elements[0].split(\' \')[1], \'base64\');\n\t\tvar curve = \'nistp384\';\n\t\tvar size = 384;\n\t\tif (supportedAlgosById[alg] === \'ECDSA-P256-SHA256\') {\n\t\t\tcurve = \'nistp256\';\n\t\t\tsize = 256;\n\t\t}\n\t\t// DNSSEC generates the public-key on the fly (go calculate it)\n\t\tvar publicKey = utils.publicFromPrivateECDSA(curve, d);\n\t\tvar Q = publicKey.part[\'Q\'].data;\n\t\tvar ecdsaKey = {\n\t\t\ttype: \'ecdsa\',\n\t\t\tcurve: curve,\n\t\t\tsize: size,\n\t\t\tparts: [\n\t\t\t\t{name: \'curve\', data: Buffer.from(curve) },\n\t\t\t\t{name: \'d\', data: d },\n\t\t\t\t{name: \'Q\', data: Q }\n\t\t\t]\n\t\t};\n\t\treturn (new PrivateKey(ecdsaKey));\n\t}\n\tthrow (new Error(\'Unsupported algorithm: \' + supportedAlgosById[alg]));\n}\n\nfunction dnssecTimestamp(date) {\n\tvar year = date.getFullYear() + \'\'; //stringify\n\tvar month = (date.getMonth() + 1);\n\tvar timestampStr = year + month + date.getUTCDate();\n\ttimestampStr += \'\' + date.getUTCHours() + date.getUTCMinutes();\n\ttimestampStr += date.getUTCSeconds();\n\treturn (timestampStr);\n}\n\nfunction rsaAlgFromOptions(opts) {\n\tif (!opts || !opts.hashAlgo || opts.hashAlgo === \'sha1\')\n\t\treturn (\'5 (RSASHA1)\');\n\telse if (opts.hashAlgo === \'sha256\')\n\t\treturn (\'8 (RSASHA256)\');\n\telse if (opts.hashAlgo === \'sha512\')\n\t\treturn (\'10 (RSASHA512)\');\n\telse\n\t\tthrow (new Error(\'Unknown or unsupported hash: \' +\n\t\t opts.hashAlgo));\n}\n\nfunction writeRSA(key, options) {\n\t// if we\'re missing parts, add them.\n\tif (!key.part.dmodp || !key.part.dmodq) {\n\t\tutils.addRSAMissing(key);\n\t}\n\n\tvar out = \'\';\n\tout += \'Private-key-format: v1.3\\n\';\n\tout += \'Algorithm: \' + rsaAlgFromOptions(options) + \'\\n\';\n\tvar n = utils.mpDenormalize(key.part[\'n\'].data);\n\tout += \'Modulus: \' + n.toString(\'base64\') + \'\\n\';\n\tvar e = utils.mpDenormalize(key.part[\'e\'].data);\n\tout += \'PublicExponent: \' + e.toString(\'base64\') + \'\\n\';\n\tvar d = utils.mpDenormalize(key.part[\'d\'].data);\n\tout += \'PrivateExponent: \' + d.toString(\'base64\') + \'\\n\';\n\tvar p = utils.mpDenormalize(key.part[\'p\'].data);\n\tout += \'Prime1: \' + p.toString(\'base64\') + \'\\n\';\n\tvar q = utils.mpDenormalize(key.part[\'q\'].data);\n\tout += \'Prime2: \' + q.toString(\'base64\') + \'\\n\';\n\tvar dmodp = utils.mpDenormalize(key.part[\'dmodp\'].data);\n\tout += \'Exponent1: \' + dmodp.toString(\'base64\') + \'\\n\';\n\tvar dmodq = utils.mpDenormalize(key.part[\'dmodq\'].data);\n\tout += \'Exponent2: \' + dmodq.toString(\'base64\') + \'\\n\';\n\tvar iqmp = utils.mpDenormalize(key.part[\'iqmp\'].data);\n\tout += \'Coefficient: \' + iqmp.toString(\'base64\') + \'\\n\';\n\t// Assume that we\'re valid as-of now\n\tvar timestamp = new Date();\n\tout += \'Created: \' + dnssecTimestamp(timestamp) + \'\\n\';\n\tout += \'Publish: \' + dnssecTimestamp(timestamp) + \'\\n\';\n\tout += \'Activate: \' + dnssecTimestamp(timestamp) + \'\\n\';\n\treturn (Buffer.from(out, \'ascii\'));\n}\n\nfunction writeECDSA(key, options) {\n\tvar out = \'\';\n\tout += \'Private-key-format: v1.3\\n\';\n\n\tif (key.curve === \'nistp256\') {\n\t\tout += \'Algorithm: 13 (ECDSAP256SHA256)\\n\';\n\t} else if (key.curve === \'nistp384\') {\n\t\tout += \'Algorithm: 14 (ECDSAP384SHA384)\\n\';\n\t} else {\n\t\tthrow (new Error(\'Unsupported curve\'));\n\t}\n\tvar base64Key = key.part[\'d\'].data.toString(\'base64\');\n\tout += \'PrivateKey: \' + base64Key + \'\\n\';\n\n\t// Assume that we\'re valid as-of now\n\tvar timestamp = new Date();\n\tout += \'Created: \' + dnssecTimestamp(timestamp) + \'\\n\';\n\tout += \'Publish: \' + dnssecTimestamp(timestamp) + \'\\n\';\n\tout += \'Activate: \' + dnssecTimestamp(timestamp) + \'\\n\';\n\n\treturn (Buffer.from(out, \'ascii\'));\n}\n\nfunction write(key, options) {\n\tif (PrivateKey.isPrivateKey(key)) {\n\t\tif (key.type === \'rsa\') {\n\t\t\treturn (writeRSA(key, options));\n\t\t} else if (key.type === \'ecdsa\') {\n\t\t\treturn (writeECDSA(key, options));\n\t\t} else {\n\t\t\tthrow (new Error(\'Unsupported algorithm: \' + key.type));\n\t\t}\n\t} else if (Key.isKey(key)) {\n\t\t/*\n\t\t * RFC3110 requires a keyname, and a keytype, which we\n\t\t * don\'t really have a mechanism for specifying such\n\t\t * additional metadata.\n\t\t */\n\t\tthrow (new Error(\'Format "dnssec" only supports \' +\n\t\t \'writing private keys\'));\n\t} else {\n\t\tthrow (new Error(\'key is not a Key or PrivateKey\'));\n\t}\n}\n\n\n/***/ }),\n/* 72 */\n/*!****************************************!*\\\n !*** ./node_modules/caseless/index.js ***!\n \\****************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nfunction Caseless (dict) {\n this.dict = dict || {}\n}\nCaseless.prototype.set = function (name, value, clobber) {\n if (typeof name === \'object\') {\n for (var i in name) {\n this.set(i, name[i], value)\n }\n } else {\n if (typeof clobber === \'undefined\') clobber = true\n var has = this.has(name)\n\n if (!clobber && has) this.dict[has] = this.dict[has] + \',\' + value\n else this.dict[has || name] = value\n return has\n }\n}\nCaseless.prototype.has = function (name) {\n var keys = Object.keys(this.dict)\n , name = name.toLowerCase()\n ;\n for (var i=0;i= 0; i--)\n if (d = decorators[i])\n r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (undefined && undefined.__metadata) || function (k, v) {\n if (typeof Reflect === "object" && typeof Reflect.metadata === "function")\n return Reflect.metadata(k, v);\n};\nvar DragDropData = /** @class */ (function () {\n function DragDropData() {\n }\n return DragDropData;\n}());\nfunction dragDropServiceFactory() {\n return new DragDropService();\n}\nvar DragDropService = /** @class */ (function () {\n function DragDropService() {\n this.allowedDropZones = [];\n }\n return DragDropService;\n}());\nDragDropService = __decorate$1([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"])()\n], DragDropService);\nfunction dragDropSortableServiceFactory(config) {\n return new DragDropSortableService(config);\n}\nvar DragDropSortableService = /** @class */ (function () {\n function DragDropSortableService(_config) {\n this._config = _config;\n }\n Object.defineProperty(DragDropSortableService.prototype, "elem", {\n get: function () {\n return this._elem;\n },\n enumerable: true,\n configurable: true\n });\n DragDropSortableService.prototype.markSortable = function (elem) {\n if (isPresent(this._elem)) {\n this._elem.classList.remove(this._config.onSortableDragClass);\n }\n if (isPresent(elem)) {\n this._elem = elem;\n this._elem.classList.add(this._config.onSortableDragClass);\n }\n };\n return DragDropSortableService;\n}());\nDragDropSortableService = __decorate$1([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"])(),\n __metadata("design:paramtypes", [DragDropConfig])\n], DragDropSortableService);\n// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\nvar __decorate$3 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === "object" && typeof Reflect.decorate === "function")\n r = Reflect.decorate(decorators, target, key, desc);\n else\n for (var i = decorators.length - 1; i >= 0; i--)\n if (d = decorators[i])\n r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata$2 = (undefined && undefined.__metadata) || function (k, v) {\n if (typeof Reflect === "object" && typeof Reflect.metadata === "function")\n return Reflect.metadata(k, v);\n};\nvar AbstractComponent = /** @class */ (function () {\n function AbstractComponent(elemRef, _dragDropService, _config, _cdr) {\n var _this = this;\n this._dragDropService = _dragDropService;\n this._config = _config;\n this._cdr = _cdr;\n /**\n * Whether the object is draggable. Default is true.\n */\n this._dragEnabled = false;\n /**\n * Allows drop on this element\n */\n this.dropEnabled = false;\n this.dropZones = [];\n this.cloneItem = false;\n // Assign default cursor unless overridden\n this._defaultCursor = _config.defaultCursor;\n this._elem = elemRef.nativeElement;\n this._elem.style.cursor = this._defaultCursor; // set default cursor on our element\n //\n // DROP events\n //\n this._elem.ondragenter = function (event) {\n _this._onDragEnter(event);\n };\n this._elem.ondragover = function (event) {\n _this._onDragOver(event);\n //\n if (event.dataTransfer != null) {\n event.dataTransfer.dropEffect = _this._config.dropEffect.name;\n }\n return false;\n };\n this._elem.ondragleave = function (event) {\n _this._onDragLeave(event);\n };\n this._elem.ondrop = function (event) {\n _this._onDrop(event);\n };\n //\n // Drag events\n //\n this._elem.onmousedown = function (event) {\n _this._target = event.target;\n };\n this._elem.ondragstart = function (event) {\n if (_this._dragHandle) {\n if (!_this._dragHandle.contains(_this._target)) {\n event.preventDefault();\n return;\n }\n }\n _this._onDragStart(event);\n //\n if (event.dataTransfer != null) {\n event.dataTransfer.setData(\'text\', \'\');\n // Change drag effect\n event.dataTransfer.effectAllowed = _this.effectAllowed || _this._config.dragEffect.name;\n // Change drag image\n if (isPresent(_this.dragImage)) {\n if (isString(_this.dragImage)) {\n event.dataTransfer.setDragImage(createImage(_this.dragImage));\n }\n else if (isFunction(_this.dragImage)) {\n event.dataTransfer.setDragImage(callFun(_this.dragImage));\n }\n else {\n var img = _this.dragImage;\n event.dataTransfer.setDragImage(img.imageElement, img.x_offset, img.y_offset);\n }\n }\n else if (isPresent(_this._config.dragImage)) {\n var dragImage = _this._config.dragImage;\n event.dataTransfer.setDragImage(dragImage.imageElement, dragImage.x_offset, dragImage.y_offset);\n }\n else if (_this.cloneItem) {\n _this._dragHelper = _this._elem.cloneNode(true);\n _this._dragHelper.classList.add(\'dnd-drag-item\');\n _this._dragHelper.style.position = "absolute";\n _this._dragHelper.style.top = "0px";\n _this._dragHelper.style.left = "-1000px";\n _this._elem.parentElement.appendChild(_this._dragHelper);\n event.dataTransfer.setDragImage(_this._dragHelper, event.offsetX, event.offsetY);\n }\n // Change drag cursor\n var cursorelem = (_this._dragHandle) ? _this._dragHandle : _this._elem;\n if (_this._dragEnabled) {\n cursorelem.style.cursor = _this.effectCursor ? _this.effectCursor : _this._config.dragCursor;\n }\n else {\n cursorelem.style.cursor = _this._defaultCursor;\n }\n }\n };\n this._elem.ondragend = function (event) {\n if (_this._elem.parentElement && _this._dragHelper) {\n _this._elem.parentElement.removeChild(_this._dragHelper);\n }\n // console.log(\'ondragend\', event.target);\n _this._onDragEnd(event);\n // Restore style of dragged element\n var cursorelem = (_this._dragHandle) ? _this._dragHandle : _this._elem;\n cursorelem.style.cursor = _this._defaultCursor;\n };\n }\n Object.defineProperty(AbstractComponent.prototype, "dragEnabled", {\n get: function () {\n return this._dragEnabled;\n },\n set: function (enabled) {\n this._dragEnabled = !!enabled;\n this._elem.draggable = this._dragEnabled;\n },\n enumerable: true,\n configurable: true\n });\n AbstractComponent.prototype.setDragHandle = function (elem) {\n this._dragHandle = elem;\n };\n /******* Change detection ******/\n AbstractComponent.prototype.detectChanges = function () {\n var _this = this;\n // Programmatically run change detection to fix issue in Safari\n setTimeout(function () {\n if (_this._cdr && !_this._cdr.destroyed) {\n _this._cdr.detectChanges();\n }\n }, 250);\n };\n //****** Droppable *******//\n AbstractComponent.prototype._onDragEnter = function (event) {\n // console.log(\'ondragenter._isDropAllowed\', this._isDropAllowed);\n if (this._isDropAllowed(event)) {\n // event.preventDefault();\n this._onDragEnterCallback(event);\n }\n };\n AbstractComponent.prototype._onDragOver = function (event) {\n // // console.log(\'ondragover._isDropAllowed\', this._isDropAllowed);\n if (this._isDropAllowed(event)) {\n // The element is over the same source element - do nothing\n if (event.preventDefault) {\n // Necessary. Allows us to drop.\n event.preventDefault();\n }\n this._onDragOverCallback(event);\n }\n };\n AbstractComponent.prototype._onDragLeave = function (event) {\n // console.log(\'ondragleave._isDropAllowed\', this._isDropAllowed);\n if (this._isDropAllowed(event)) {\n // event.preventDefault();\n this._onDragLeaveCallback(event);\n }\n };\n AbstractComponent.prototype._onDrop = function (event) {\n // console.log(\'ondrop._isDropAllowed\', this._isDropAllowed);\n if (this._isDropAllowed(event)) {\n // Necessary. Allows us to drop.\n this._preventAndStop(event);\n this._onDropCallback(event);\n this.detectChanges();\n }\n };\n AbstractComponent.prototype._isDropAllowed = function (event) {\n if ((this._dragDropService.isDragged || (event.dataTransfer && event.dataTransfer.files)) && this.dropEnabled) {\n // First, if `allowDrop` is set, call it to determine whether the\n // dragged element can be dropped here.\n if (this.allowDrop) {\n return this.allowDrop(this._dragDropService.dragData);\n }\n // Otherwise, use dropZones if they are set.\n if (this.dropZones.length === 0 && this._dragDropService.allowedDropZones.length === 0) {\n return true;\n }\n for (var i = 0; i < this._dragDropService.allowedDropZones.length; i++) {\n var dragZone = this._dragDropService.allowedDropZones[i];\n if (this.dropZones.indexOf(dragZone) !== -1) {\n return true;\n }\n }\n }\n return false;\n };\n AbstractComponent.prototype._preventAndStop = function (event) {\n if (event.preventDefault) {\n event.preventDefault();\n }\n if (event.stopPropagation) {\n event.stopPropagation();\n }\n };\n //*********** Draggable **********//\n AbstractComponent.prototype._onDragStart = function (event) {\n //console.log(\'ondragstart.dragEnabled\', this._dragEnabled);\n if (this._dragEnabled) {\n this._dragDropService.allowedDropZones = this.dropZones;\n // console.log(\'ondragstart.allowedDropZones\', this._dragDropService.allowedDropZones);\n this._onDragStartCallback(event);\n }\n };\n AbstractComponent.prototype._onDragEnd = function (event) {\n this._dragDropService.allowedDropZones = [];\n // console.log(\'ondragend.allowedDropZones\', this._dragDropService.allowedDropZones);\n this._onDragEndCallback(event);\n };\n //**** Drop Callbacks ****//\n AbstractComponent.prototype._onDragEnterCallback = function (event) { };\n AbstractComponent.prototype._onDragOverCallback = function (event) { };\n AbstractComponent.prototype._onDragLeaveCallback = function (event) { };\n AbstractComponent.prototype._onDropCallback = function (event) { };\n //**** Drag Callbacks ****//\n AbstractComponent.prototype._onDragStartCallback = function (event) { };\n AbstractComponent.prototype._onDragEndCallback = function (event) { };\n return AbstractComponent;\n}());\nAbstractComponent = __decorate$3([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Injectable"])(),\n __metadata$2("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], DragDropService, DragDropConfig,\n _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]])\n], AbstractComponent);\nvar AbstractHandleComponent = /** @class */ (function () {\n function AbstractHandleComponent(elemRef, _dragDropService, _config, _Component, _cdr) {\n this._dragDropService = _dragDropService;\n this._config = _config;\n this._Component = _Component;\n this._cdr = _cdr;\n this._elem = elemRef.nativeElement;\n this._Component.setDragHandle(this._elem);\n }\n return AbstractHandleComponent;\n}());\n// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\nvar __decorate$2 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === "object" && typeof Reflect.decorate === "function")\n r = Reflect.decorate(decorators, target, key, desc);\n else\n for (var i = decorators.length - 1; i >= 0; i--)\n if (d = decorators[i])\n r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata$1 = (undefined && undefined.__metadata) || function (k, v) {\n if (typeof Reflect === "object" && typeof Reflect.metadata === "function")\n return Reflect.metadata(k, v);\n};\nvar DraggableComponent = /** @class */ (function (_super) {\n __extends(DraggableComponent, _super);\n function DraggableComponent(elemRef, dragDropService, config, cdr) {\n var _this = _super.call(this, elemRef, dragDropService, config, cdr) || this;\n /**\n * Callback function called when the drag actions happened.\n */\n _this.onDragStart = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();\n _this.onDragEnd = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();\n /**\n * Callback function called when the drag action ends with a valid drop action.\n * It is activated after the on-drop-success callback\n */\n _this.onDragSuccessCallback = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();\n _this._defaultCursor = _this._elem.style.cursor;\n _this.dragEnabled = true;\n return _this;\n }\n Object.defineProperty(DraggableComponent.prototype, "draggable", {\n set: function (value) {\n this.dragEnabled = !!value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DraggableComponent.prototype, "dropzones", {\n set: function (value) {\n this.dropZones = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DraggableComponent.prototype, "effectallowed", {\n /**\n * Drag allowed effect\n */\n set: function (value) {\n this.effectAllowed = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DraggableComponent.prototype, "effectcursor", {\n /**\n * Drag effect cursor\n */\n set: function (value) {\n this.effectCursor = value;\n },\n enumerable: true,\n configurable: true\n });\n DraggableComponent.prototype._onDragStartCallback = function (event) {\n this._dragDropService.isDragged = true;\n this._dragDropService.dragData = this.dragData;\n this._dragDropService.onDragSuccessCallback = this.onDragSuccessCallback;\n this._elem.classList.add(this._config.onDragStartClass);\n //\n this.onDragStart.emit({ dragData: this.dragData, mouseEvent: event });\n };\n DraggableComponent.prototype._onDragEndCallback = function (event) {\n this._dragDropService.isDragged = false;\n this._dragDropService.dragData = null;\n this._dragDropService.onDragSuccessCallback = null;\n this._elem.classList.remove(this._config.onDragStartClass);\n //\n this.onDragEnd.emit({ dragData: this.dragData, mouseEvent: event });\n };\n return DraggableComponent;\n}(AbstractComponent));\n__decorate$2([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])("dragEnabled"),\n __metadata$1("design:type", Boolean),\n __metadata$1("design:paramtypes", [Boolean])\n], DraggableComponent.prototype, "draggable", null);\n__decorate$2([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(),\n __metadata$1("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"])\n], DraggableComponent.prototype, "onDragStart", void 0);\n__decorate$2([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(),\n __metadata$1("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"])\n], DraggableComponent.prototype, "onDragEnd", void 0);\n__decorate$2([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(),\n __metadata$1("design:type", Object)\n], DraggableComponent.prototype, "dragData", void 0);\n__decorate$2([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])("onDragSuccess"),\n __metadata$1("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"])\n], DraggableComponent.prototype, "onDragSuccessCallback", void 0);\n__decorate$2([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])("dropZones"),\n __metadata$1("design:type", Array),\n __metadata$1("design:paramtypes", [Array])\n], DraggableComponent.prototype, "dropzones", null);\n__decorate$2([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])("effectAllowed"),\n __metadata$1("design:type", String),\n __metadata$1("design:paramtypes", [String])\n], DraggableComponent.prototype, "effectallowed", null);\n__decorate$2([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])("effectCursor"),\n __metadata$1("design:type", String),\n __metadata$1("design:paramtypes", [String])\n], DraggableComponent.prototype, "effectcursor", null);\n__decorate$2([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(),\n __metadata$1("design:type", Object)\n], DraggableComponent.prototype, "dragImage", void 0);\n__decorate$2([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(),\n __metadata$1("design:type", Boolean)\n], DraggableComponent.prototype, "cloneItem", void 0);\nDraggableComponent = __decorate$2([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"])({ selector: \'[dnd-draggable]\' }),\n __metadata$1("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], DragDropService, DragDropConfig,\n _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]])\n], DraggableComponent);\nvar DraggableHandleComponent = /** @class */ (function (_super) {\n __extends(DraggableHandleComponent, _super);\n function DraggableHandleComponent(elemRef, dragDropService, config, _Component, cdr) {\n return _super.call(this, elemRef, dragDropService, config, _Component, cdr) || this;\n }\n return DraggableHandleComponent;\n}(AbstractHandleComponent));\nDraggableHandleComponent = __decorate$2([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"])({ selector: \'[dnd-draggable-handle]\' }),\n __metadata$1("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], DragDropService, DragDropConfig, DraggableComponent,\n _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]])\n], DraggableHandleComponent);\n// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\nvar __decorate$4 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === "object" && typeof Reflect.decorate === "function")\n r = Reflect.decorate(decorators, target, key, desc);\n else\n for (var i = decorators.length - 1; i >= 0; i--)\n if (d = decorators[i])\n r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata$3 = (undefined && undefined.__metadata) || function (k, v) {\n if (typeof Reflect === "object" && typeof Reflect.metadata === "function")\n return Reflect.metadata(k, v);\n};\nvar DroppableComponent = /** @class */ (function (_super) {\n __extends(DroppableComponent, _super);\n function DroppableComponent(elemRef, dragDropService, config, cdr) {\n var _this = _super.call(this, elemRef, dragDropService, config, cdr) || this;\n /**\n * Callback function called when the drop action completes correctly.\n * It is activated before the on-drag-success callback.\n */\n _this.onDropSuccess = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();\n _this.onDragEnter = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();\n _this.onDragOver = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();\n _this.onDragLeave = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();\n _this.dropEnabled = true;\n return _this;\n }\n Object.defineProperty(DroppableComponent.prototype, "droppable", {\n set: function (value) {\n this.dropEnabled = !!value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DroppableComponent.prototype, "allowdrop", {\n set: function (value) {\n this.allowDrop = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DroppableComponent.prototype, "dropzones", {\n set: function (value) {\n this.dropZones = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DroppableComponent.prototype, "effectallowed", {\n /**\n * Drag allowed effect\n */\n set: function (value) {\n this.effectAllowed = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(DroppableComponent.prototype, "effectcursor", {\n /**\n * Drag effect cursor\n */\n set: function (value) {\n this.effectCursor = value;\n },\n enumerable: true,\n configurable: true\n });\n DroppableComponent.prototype._onDragEnterCallback = function (event) {\n if (this._dragDropService.isDragged) {\n this._elem.classList.add(this._config.onDragEnterClass);\n this.onDragEnter.emit({ dragData: this._dragDropService.dragData, mouseEvent: event });\n }\n };\n DroppableComponent.prototype._onDragOverCallback = function (event) {\n if (this._dragDropService.isDragged) {\n this._elem.classList.add(this._config.onDragOverClass);\n this.onDragOver.emit({ dragData: this._dragDropService.dragData, mouseEvent: event });\n }\n };\n ;\n DroppableComponent.prototype._onDragLeaveCallback = function (event) {\n if (this._dragDropService.isDragged) {\n this._elem.classList.remove(this._config.onDragOverClass);\n this._elem.classList.remove(this._config.onDragEnterClass);\n this.onDragLeave.emit({ dragData: this._dragDropService.dragData, mouseEvent: event });\n }\n };\n ;\n DroppableComponent.prototype._onDropCallback = function (event) {\n var dataTransfer = event.dataTransfer;\n if (this._dragDropService.isDragged || (dataTransfer && dataTransfer.files)) {\n this.onDropSuccess.emit({ dragData: this._dragDropService.dragData, mouseEvent: event });\n if (this._dragDropService.onDragSuccessCallback) {\n this._dragDropService.onDragSuccessCallback.emit({ dragData: this._dragDropService.dragData, mouseEvent: event });\n }\n this._elem.classList.remove(this._config.onDragOverClass);\n this._elem.classList.remove(this._config.onDragEnterClass);\n }\n };\n return DroppableComponent;\n}(AbstractComponent));\n__decorate$4([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])("dropEnabled"),\n __metadata$3("design:type", Boolean),\n __metadata$3("design:paramtypes", [Boolean])\n], DroppableComponent.prototype, "droppable", null);\n__decorate$4([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(),\n __metadata$3("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"])\n], DroppableComponent.prototype, "onDropSuccess", void 0);\n__decorate$4([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(),\n __metadata$3("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"])\n], DroppableComponent.prototype, "onDragEnter", void 0);\n__decorate$4([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(),\n __metadata$3("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"])\n], DroppableComponent.prototype, "onDragOver", void 0);\n__decorate$4([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])(),\n __metadata$3("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"])\n], DroppableComponent.prototype, "onDragLeave", void 0);\n__decorate$4([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])("allowDrop"),\n __metadata$3("design:type", Function),\n __metadata$3("design:paramtypes", [Function])\n], DroppableComponent.prototype, "allowdrop", null);\n__decorate$4([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])("dropZones"),\n __metadata$3("design:type", Array),\n __metadata$3("design:paramtypes", [Array])\n], DroppableComponent.prototype, "dropzones", null);\n__decorate$4([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])("effectAllowed"),\n __metadata$3("design:type", String),\n __metadata$3("design:paramtypes", [String])\n], DroppableComponent.prototype, "effectallowed", null);\n__decorate$4([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])("effectCursor"),\n __metadata$3("design:type", String),\n __metadata$3("design:paramtypes", [String])\n], DroppableComponent.prototype, "effectcursor", null);\nDroppableComponent = __decorate$4([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"])({ selector: \'[dnd-droppable]\' }),\n __metadata$3("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], DragDropService, DragDropConfig,\n _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]])\n], DroppableComponent);\n// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\nvar __decorate$5 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === "object" && typeof Reflect.decorate === "function")\n r = Reflect.decorate(decorators, target, key, desc);\n else\n for (var i = decorators.length - 1; i >= 0; i--)\n if (d = decorators[i])\n r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata$4 = (undefined && undefined.__metadata) || function (k, v) {\n if (typeof Reflect === "object" && typeof Reflect.metadata === "function")\n return Reflect.metadata(k, v);\n};\nvar SortableContainer = /** @class */ (function (_super) {\n __extends(SortableContainer, _super);\n function SortableContainer(elemRef, dragDropService, config, cdr, _sortableDataService) {\n var _this = _super.call(this, elemRef, dragDropService, config, cdr) || this;\n _this._sortableDataService = _sortableDataService;\n _this._sortableData = [];\n _this.dragEnabled = false;\n return _this;\n }\n Object.defineProperty(SortableContainer.prototype, "draggable", {\n set: function (value) {\n this.dragEnabled = !!value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SortableContainer.prototype, "sortableData", {\n get: function () {\n return this._sortableData;\n },\n set: function (sortableData) {\n this._sortableData = sortableData;\n if (sortableData instanceof _angular_forms__WEBPACK_IMPORTED_MODULE_1__["FormArray"]) {\n this.sortableHandler = new SortableFormArrayHandler();\n }\n else {\n this.sortableHandler = new SortableArrayHandler();\n }\n //\n this.dropEnabled = !!this._sortableData;\n // console.log("collection is changed, drop enabled: " + this.dropEnabled);\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SortableContainer.prototype, "dropzones", {\n set: function (value) {\n this.dropZones = value;\n },\n enumerable: true,\n configurable: true\n });\n SortableContainer.prototype._onDragEnterCallback = function (event) {\n if (this._sortableDataService.isDragged) {\n var item = this._sortableDataService.sortableContainer.getItemAt(this._sortableDataService.index);\n // Check does element exist in sortableData of this Container\n if (this.indexOf(item) === -1) {\n // Let\'s add it\n // console.log(\'Container._onDragEnterCallback. drag node [\' + this._sortableDataService.index.toString() + \'] over parent node\');\n // Remove item from previouse list\n this._sortableDataService.sortableContainer.removeItemAt(this._sortableDataService.index);\n if (this._sortableDataService.sortableContainer._sortableData.length === 0) {\n this._sortableDataService.sortableContainer.dropEnabled = true;\n }\n // Add item to new list\n this.insertItemAt(item, 0);\n this._sortableDataService.sortableContainer = this;\n this._sortableDataService.index = 0;\n }\n // Refresh changes in properties of container component\n this.detectChanges();\n }\n };\n SortableContainer.prototype.getItemAt = function (index) {\n return this.sortableHandler.getItemAt(this._sortableData, index);\n };\n SortableContainer.prototype.indexOf = function (item) {\n return this.sortableHandler.indexOf(this._sortableData, item);\n };\n SortableContainer.prototype.removeItemAt = function (index) {\n this.sortableHandler.removeItemAt(this._sortableData, index);\n };\n SortableContainer.prototype.insertItemAt = function (item, index) {\n this.sortableHandler.insertItemAt(this._sortableData, item, index);\n };\n return SortableContainer;\n}(AbstractComponent));\n__decorate$5([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])("dragEnabled"),\n __metadata$4("design:type", Boolean),\n __metadata$4("design:paramtypes", [Boolean])\n], SortableContainer.prototype, "draggable", null);\n__decorate$5([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(),\n __metadata$4("design:type", Object),\n __metadata$4("design:paramtypes", [Object])\n], SortableContainer.prototype, "sortableData", null);\n__decorate$5([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])("dropZones"),\n __metadata$4("design:type", Array),\n __metadata$4("design:paramtypes", [Array])\n], SortableContainer.prototype, "dropzones", null);\nSortableContainer = __decorate$5([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"])({ selector: \'[dnd-sortable-container]\' }),\n __metadata$4("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], DragDropService, DragDropConfig, _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"],\n DragDropSortableService])\n], SortableContainer);\nvar SortableArrayHandler = /** @class */ (function () {\n function SortableArrayHandler() {\n }\n SortableArrayHandler.prototype.getItemAt = function (sortableData, index) {\n return sortableData[index];\n };\n SortableArrayHandler.prototype.indexOf = function (sortableData, item) {\n return sortableData.indexOf(item);\n };\n SortableArrayHandler.prototype.removeItemAt = function (sortableData, index) {\n sortableData.splice(index, 1);\n };\n SortableArrayHandler.prototype.insertItemAt = function (sortableData, item, index) {\n sortableData.splice(index, 0, item);\n };\n return SortableArrayHandler;\n}());\nvar SortableFormArrayHandler = /** @class */ (function () {\n function SortableFormArrayHandler() {\n }\n SortableFormArrayHandler.prototype.getItemAt = function (sortableData, index) {\n return sortableData.at(index);\n };\n SortableFormArrayHandler.prototype.indexOf = function (sortableData, item) {\n return sortableData.controls.indexOf(item);\n };\n SortableFormArrayHandler.prototype.removeItemAt = function (sortableData, index) {\n sortableData.removeAt(index);\n };\n SortableFormArrayHandler.prototype.insertItemAt = function (sortableData, item, index) {\n sortableData.insert(index, item);\n };\n return SortableFormArrayHandler;\n}());\nvar SortableComponent = /** @class */ (function (_super) {\n __extends(SortableComponent, _super);\n function SortableComponent(elemRef, dragDropService, config, _sortableContainer, _sortableDataService, cdr) {\n var _this = _super.call(this, elemRef, dragDropService, config, cdr) || this;\n _this._sortableContainer = _sortableContainer;\n _this._sortableDataService = _sortableDataService;\n /**\n * Callback function called when the drag action ends with a valid drop action.\n * It is activated after the on-drop-success callback\n */\n _this.onDragSuccessCallback = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();\n _this.onDragStartCallback = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();\n _this.onDragOverCallback = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();\n _this.onDragEndCallback = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();\n _this.onDropSuccessCallback = new _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"]();\n _this.dropZones = _this._sortableContainer.dropZones;\n _this.dragEnabled = true;\n _this.dropEnabled = true;\n return _this;\n }\n Object.defineProperty(SortableComponent.prototype, "draggable", {\n set: function (value) {\n this.dragEnabled = !!value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SortableComponent.prototype, "droppable", {\n set: function (value) {\n this.dropEnabled = !!value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SortableComponent.prototype, "effectallowed", {\n /**\n * Drag allowed effect\n */\n set: function (value) {\n this.effectAllowed = value;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(SortableComponent.prototype, "effectcursor", {\n /**\n * Drag effect cursor\n */\n set: function (value) {\n this.effectCursor = value;\n },\n enumerable: true,\n configurable: true\n });\n SortableComponent.prototype._onDragStartCallback = function (event) {\n // console.log(\'_onDragStartCallback. dragging elem with index \' + this.index);\n this._sortableDataService.isDragged = true;\n this._sortableDataService.sortableContainer = this._sortableContainer;\n this._sortableDataService.index = this.index;\n this._sortableDataService.markSortable(this._elem);\n // Add dragData\n this._dragDropService.isDragged = true;\n this._dragDropService.dragData = this.dragData;\n this._dragDropService.onDragSuccessCallback = this.onDragSuccessCallback;\n //\n this.onDragStartCallback.emit(this._dragDropService.dragData);\n };\n SortableComponent.prototype._onDragOverCallback = function (event) {\n if (this._sortableDataService.isDragged && this._elem !== this._sortableDataService.elem) {\n // console.log(\'_onDragOverCallback. dragging elem with index \' + this.index);\n this._sortableDataService.sortableContainer = this._sortableContainer;\n this._sortableDataService.index = this.index;\n this._sortableDataService.markSortable(this._elem);\n this.onDragOverCallback.emit(this._dragDropService.dragData);\n }\n };\n SortableComponent.prototype._onDragEndCallback = function (event) {\n // console.log(\'_onDragEndCallback. end dragging elem with index \' + this.index);\n this._sortableDataService.isDragged = false;\n this._sortableDataService.sortableContainer = null;\n this._sortableDataService.index = null;\n this._sortableDataService.markSortable(null);\n // Add dragGata\n this._dragDropService.isDragged = false;\n this._dragDropService.dragData = null;\n this._dragDropService.onDragSuccessCallback = null;\n //\n this.onDragEndCallback.emit(this._dragDropService.dragData);\n };\n SortableComponent.prototype._onDragEnterCallback = function (event) {\n if (this._sortableDataService.isDragged) {\n this._sortableDataService.markSortable(this._elem);\n if ((this.index !== this._sortableDataService.index) ||\n (this._sortableDataService.sortableContainer.sortableData !== this._sortableContainer.sortableData)) {\n // console.log(\'Component._onDragEnterCallback. drag node [\' + this.index + \'] over node [\' + this._sortableDataService.index + \']\');\n // Get item\n var item = this._sortableDataService.sortableContainer.getItemAt(this._sortableDataService.index);\n // Remove item from previouse list\n this._sortableDataService.sortableContainer.removeItemAt(this._sortableDataService.index);\n if (this._sortableDataService.sortableContainer.sortableData.length === 0) {\n this._sortableDataService.sortableContainer.dropEnabled = true;\n }\n // Add item to new list\n this._sortableContainer.insertItemAt(item, this.index);\n if (this._sortableContainer.dropEnabled) {\n this._sortableContainer.dropEnabled = false;\n }\n this._sortableDataService.sortableContainer = this._sortableContainer;\n this._sortableDataService.index = this.index;\n this.detectChanges();\n }\n }\n };\n SortableComponent.prototype._onDropCallback = function (event) {\n if (this._sortableDataService.isDragged) {\n // console.log(\'onDropCallback.onDropSuccessCallback.dragData\', this._dragDropService.dragData);\n this.onDropSuccessCallback.emit(this._dragDropService.dragData);\n if (this._dragDropService.onDragSuccessCallback) {\n // console.log(\'onDropCallback.onDragSuccessCallback.dragData\', this._dragDropService.dragData);\n this._dragDropService.onDragSuccessCallback.emit(this._dragDropService.dragData);\n }\n // Refresh changes in properties of container component\n this._sortableContainer.detectChanges();\n }\n };\n return SortableComponent;\n}(AbstractComponent));\n__decorate$5([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(\'sortableIndex\'),\n __metadata$4("design:type", Number)\n], SortableComponent.prototype, "index", void 0);\n__decorate$5([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])("dragEnabled"),\n __metadata$4("design:type", Boolean),\n __metadata$4("design:paramtypes", [Boolean])\n], SortableComponent.prototype, "draggable", null);\n__decorate$5([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])("dropEnabled"),\n __metadata$4("design:type", Boolean),\n __metadata$4("design:paramtypes", [Boolean])\n], SortableComponent.prototype, "droppable", null);\n__decorate$5([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])(),\n __metadata$4("design:type", Object)\n], SortableComponent.prototype, "dragData", void 0);\n__decorate$5([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])("effectAllowed"),\n __metadata$4("design:type", String),\n __metadata$4("design:paramtypes", [String])\n], SortableComponent.prototype, "effectallowed", null);\n__decorate$5([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Input"])("effectCursor"),\n __metadata$4("design:type", String),\n __metadata$4("design:paramtypes", [String])\n], SortableComponent.prototype, "effectcursor", null);\n__decorate$5([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])("onDragSuccess"),\n __metadata$4("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"])\n], SortableComponent.prototype, "onDragSuccessCallback", void 0);\n__decorate$5([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])("onDragStart"),\n __metadata$4("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"])\n], SortableComponent.prototype, "onDragStartCallback", void 0);\n__decorate$5([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])("onDragOver"),\n __metadata$4("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"])\n], SortableComponent.prototype, "onDragOverCallback", void 0);\n__decorate$5([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])("onDragEnd"),\n __metadata$4("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"])\n], SortableComponent.prototype, "onDragEndCallback", void 0);\n__decorate$5([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Output"])("onDropSuccess"),\n __metadata$4("design:type", _angular_core__WEBPACK_IMPORTED_MODULE_0__["EventEmitter"])\n], SortableComponent.prototype, "onDropSuccessCallback", void 0);\nSortableComponent = __decorate$5([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"])({ selector: \'[dnd-sortable]\' }),\n __metadata$4("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], DragDropService, DragDropConfig,\n SortableContainer,\n DragDropSortableService,\n _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]])\n], SortableComponent);\nvar SortableHandleComponent = /** @class */ (function (_super) {\n __extends(SortableHandleComponent, _super);\n function SortableHandleComponent(elemRef, dragDropService, config, _Component, cdr) {\n return _super.call(this, elemRef, dragDropService, config, _Component, cdr) || this;\n }\n return SortableHandleComponent;\n}(AbstractHandleComponent));\nSortableHandleComponent = __decorate$5([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["Directive"])({ selector: \'[dnd-sortable-handle]\' }),\n __metadata$4("design:paramtypes", [_angular_core__WEBPACK_IMPORTED_MODULE_0__["ElementRef"], DragDropService, DragDropConfig, SortableComponent,\n _angular_core__WEBPACK_IMPORTED_MODULE_0__["ChangeDetectorRef"]])\n], SortableHandleComponent);\n// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === "object" && typeof Reflect.decorate === "function")\n r = Reflect.decorate(decorators, target, key, desc);\n else\n for (var i = decorators.length - 1; i >= 0; i--)\n if (d = decorators[i])\n r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar providers = [\n DragDropConfig,\n { provide: DragDropService, useFactory: dragDropServiceFactory },\n { provide: DragDropSortableService, useFactory: dragDropSortableServiceFactory, deps: [DragDropConfig] }\n];\nvar DndModule = DndModule_1 = /** @class */ (function () {\n function DndModule() {\n }\n DndModule.forRoot = function () {\n return {\n ngModule: DndModule_1,\n providers: providers\n };\n };\n return DndModule;\n}());\nDndModule = DndModule_1 = __decorate([\n Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["NgModule"])({\n declarations: [DraggableComponent, DraggableHandleComponent, DroppableComponent, SortableContainer, SortableComponent, SortableHandleComponent],\n exports: [DraggableComponent, DraggableHandleComponent, DroppableComponent, SortableContainer, SortableComponent, SortableHandleComponent],\n })\n], DndModule);\nvar DndModule_1;\n// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\n/**\n * Generated bundle index. Do not edit.\n */\n\n//# sourceMappingURL=ng2-dnd.es5.js.map\n\n\n/***/ }),\n/* 78 */\n/*!*****************************************!*\\\n !*** ./src/services/docking.service.ts ***!\n \\*****************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, "__esModule", { value: true });\nconst core_1 = __webpack_require__(/*! @angular/core */ 0);\nconst config_service_1 = __webpack_require__(/*! ../services/config.service */ 15);\nconst electron_service_1 = __webpack_require__(/*! ../services/electron.service */ 14);\nconst hostApp_service_1 = __webpack_require__(/*! ../services/hostApp.service */ 16);\nlet DockingService = class DockingService {\n constructor(electron, config, hostApp) {\n this.electron = electron;\n this.config = config;\n this.hostApp = hostApp;\n electron.screen.on(\'display-removed\', () => this.repositionWindow());\n electron.screen.on(\'display-metrics-changed\', () => this.repositionWindow());\n }\n dock() {\n let dockSide = this.config.store.appearance.dock;\n if (dockSide === \'off\') {\n this.hostApp.setAlwaysOnTop(false);\n return;\n }\n let display = this.electron.screen.getAllDisplays()\n .filter((x) => x.id === this.config.store.appearance.dockScreen)[0];\n if (!display) {\n display = this.getCurrentScreen();\n }\n let newBounds = { x: 0, y: 0, width: 0, height: 0 };\n let fill = this.config.store.appearance.dockFill;\n let [minWidth, minHeight] = this.hostApp.getWindow().getMinimumSize();\n if (dockSide === \'left\' || dockSide === \'right\') {\n newBounds.width = Math.max(minWidth, Math.round(fill * display.bounds.width));\n newBounds.height = display.bounds.height;\n }\n if (dockSide === \'top\' || dockSide === \'bottom\') {\n newBounds.width = display.bounds.width;\n newBounds.height = Math.max(minHeight, Math.round(fill * display.bounds.height));\n }\n if (dockSide === \'right\') {\n newBounds.x = display.bounds.x + display.bounds.width - newBounds.width;\n }\n else {\n newBounds.x = display.bounds.x;\n }\n if (dockSide === \'bottom\') {\n newBounds.y = display.bounds.y + display.bounds.height - newBounds.height;\n }\n else {\n newBounds.y = display.bounds.y;\n }\n this.hostApp.setAlwaysOnTop(true);\n setImmediate(() => {\n this.hostApp.setBounds(newBounds);\n });\n }\n getCurrentScreen() {\n return this.electron.screen.getDisplayNearestPoint(this.electron.screen.getCursorScreenPoint());\n }\n getScreens() {\n return this.electron.screen.getAllDisplays().map((display, index) => {\n return {\n id: display.id,\n name: {\n 0: \'Primary display\',\n 1: \'Secondary display\',\n }[index] || `Display ${index + 1}`\n };\n });\n }\n repositionWindow() {\n let [x, y] = this.hostApp.getWindow().getPosition();\n for (let screen of this.electron.screen.getAllDisplays()) {\n let bounds = screen.bounds;\n if (x >= bounds.x && x <= bounds.x + bounds.width && y >= bounds.y && y <= bounds.y + bounds.height) {\n return;\n }\n }\n let screen = this.electron.screen.getPrimaryDisplay();\n this.hostApp.getWindow().setPosition(screen.bounds.x, screen.bounds.y);\n }\n};\nDockingService = __decorate([\n core_1.Injectable({ providedIn: \'root\' }),\n __metadata("design:paramtypes", [electron_service_1.ElectronService,\n config_service_1.ConfigService,\n hostApp_service_1.HostAppService])\n], DockingService);\nexports.DockingService = DockingService;\n\n\n/***/ }),\n/* 79 */\n/*!****************************************!*\\\n !*** ./src/services/themes.service.ts ***!\n \\****************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, "__esModule", { value: true });\nconst core_1 = __webpack_require__(/*! @angular/core */ 0);\nconst config_service_1 = __webpack_require__(/*! ../services/config.service */ 15);\nconst theme_1 = __webpack_require__(/*! ../api/theme */ 58);\nlet ThemesService = class ThemesService {\n constructor(config, themes) {\n this.config = config;\n this.themes = themes;\n this.styleElement = null;\n this.applyCurrentTheme();\n config.changed$.subscribe(() => {\n this.applyCurrentTheme();\n });\n }\n findTheme(name) {\n return this.config.enabledServices(this.themes).find(x => x.name === name);\n }\n findCurrentTheme() {\n return this.findTheme(this.config.store.appearance.theme) || this.findTheme(\'Standard\');\n }\n applyTheme(theme) {\n if (!this.styleElement) {\n this.styleElement = document.createElement(\'style\');\n this.styleElement.setAttribute(\'id\', \'theme\');\n document.querySelector(\'head\').appendChild(this.styleElement);\n }\n this.styleElement.textContent = theme.css;\n document.querySelector(\'style#custom-css\').innerHTML = this.config.store.appearance.css;\n }\n applyCurrentTheme() {\n this.applyTheme(this.findCurrentTheme());\n }\n};\nThemesService = __decorate([\n core_1.Injectable({ providedIn: \'root\' }),\n __param(1, core_1.Inject(theme_1.Theme)),\n __metadata("design:paramtypes", [config_service_1.ConfigService, Array])\n], ThemesService);\nexports.ThemesService = ThemesService;\n\n\n/***/ }),\n/* 80 */\n/*!************************************************!*\\\n !*** ./node_modules/axios/lib/helpers/bind.js ***!\n \\************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n\n\n/***/ }),\n/* 81 */\n/*!***********************************************!*\\\n !*** ./node_modules/axios/lib/core/settle.js ***!\n \\***********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\nvar createError = __webpack_require__(/*! ./createError */ 60);\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n // Note: status is not exposed by XDomainRequest\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n \'Request failed with status code \' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n\n\n/***/ }),\n/* 82 */\n/*!*****************************************************!*\\\n !*** ./node_modules/axios/lib/core/enhanceError.js ***!\n \\*****************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, \'ECONNABORTED\').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n error.request = request;\n error.response = response;\n return error;\n};\n\n\n/***/ }),\n/* 83 */\n/*!****************************************************!*\\\n !*** ./node_modules/axios/lib/helpers/buildURL.js ***!\n \\****************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\nvar utils = __webpack_require__(/*! ./../utils */ 13);\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, \'@\').\n replace(/%3A/gi, \':\').\n replace(/%24/g, \'$\').\n replace(/%2C/gi, \',\').\n replace(/%20/g, \'+\').\n replace(/%5B/gi, \'[\').\n replace(/%5D/gi, \']\');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === \'undefined\') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + \'[]\';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + \'=\' + encode(v));\n });\n });\n\n serializedParams = parts.join(\'&\');\n }\n\n if (serializedParams) {\n url += (url.indexOf(\'?\') === -1 ? \'?\' : \'&\') + serializedParams;\n }\n\n return url;\n};\n\n\n/***/ }),\n/* 84 */\n/*!************************************************!*\\\n !*** ./node_modules/follow-redirects/index.js ***!\n \\************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar url = __webpack_require__(/*! url */ 11);\nvar http = __webpack_require__(/*! http */ 30);\nvar https = __webpack_require__(/*! https */ 33);\nvar assert = __webpack_require__(/*! assert */ 23);\nvar Writable = __webpack_require__(/*! stream */ 24).Writable;\nvar debug = __webpack_require__(/*! debug */ 85)("follow-redirects");\n\n// RFC7231§4.2.1: Of the request methods defined by this specification,\n// the GET, HEAD, OPTIONS, and TRACE methods are defined to be safe.\nvar SAFE_METHODS = { GET: true, HEAD: true, OPTIONS: true, TRACE: true };\n\n// Create handlers that pass events from native requests\nvar eventHandlers = Object.create(null);\n["abort", "aborted", "error", "socket", "timeout"].forEach(function (event) {\n eventHandlers[event] = function (arg) {\n this._redirectable.emit(event, arg);\n };\n});\n\n// An HTTP(S) request that can be redirected\nfunction RedirectableRequest(options, responseCallback) {\n // Initialize the request\n Writable.call(this);\n options.headers = options.headers || {};\n this._options = options;\n this._redirectCount = 0;\n this._redirects = [];\n this._requestBodyLength = 0;\n this._requestBodyBuffers = [];\n\n // Since http.request treats host as an alias of hostname,\n // but the url module interprets host as hostname plus port,\n // eliminate the host property to avoid confusion.\n if (options.host) {\n // Use hostname if set, because it has precedence\n if (!options.hostname) {\n options.hostname = options.host;\n }\n delete options.host;\n }\n\n // Attach a callback if passed\n if (responseCallback) {\n this.on("response", responseCallback);\n }\n\n // React to responses of native requests\n var self = this;\n this._onNativeResponse = function (response) {\n self._processResponse(response);\n };\n\n // Complete the URL object when necessary\n if (!options.pathname && options.path) {\n var searchPos = options.path.indexOf("?");\n if (searchPos < 0) {\n options.pathname = options.path;\n }\n else {\n options.pathname = options.path.substring(0, searchPos);\n options.search = options.path.substring(searchPos);\n }\n }\n\n // Perform the first request\n this._performRequest();\n}\nRedirectableRequest.prototype = Object.create(Writable.prototype);\n\n// Writes buffered data to the current native request\nRedirectableRequest.prototype.write = function (data, encoding, callback) {\n // Validate input and shift parameters if necessary\n if (!(typeof data === "string" || typeof data === "object" && ("length" in data))) {\n throw new Error("data should be a string, Buffer or Uint8Array");\n }\n if (typeof encoding === "function") {\n callback = encoding;\n encoding = null;\n }\n\n // Ignore empty buffers, since writing them doesn\'t invoke the callback\n // https://github.com/nodejs/node/issues/22066\n if (data.length === 0) {\n if (callback) {\n callback();\n }\n return;\n }\n // Only write when we don\'t exceed the maximum body length\n if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {\n this._requestBodyLength += data.length;\n this._requestBodyBuffers.push({ data: data, encoding: encoding });\n this._currentRequest.write(data, encoding, callback);\n }\n // Error when we exceed the maximum body length\n else {\n this.emit("error", new Error("Request body larger than maxBodyLength limit"));\n this.abort();\n }\n};\n\n// Ends the current native request\nRedirectableRequest.prototype.end = function (data, encoding, callback) {\n // Shift parameters if necessary\n if (typeof data === "function") {\n callback = data;\n data = encoding = null;\n }\n else if (typeof encoding === "function") {\n callback = encoding;\n encoding = null;\n }\n\n // Write data and end\n var currentRequest = this._currentRequest;\n this.write(data || "", encoding, function () {\n currentRequest.end(null, null, callback);\n });\n};\n\n// Sets a header value on the current native request\nRedirectableRequest.prototype.setHeader = function (name, value) {\n this._options.headers[name] = value;\n this._currentRequest.setHeader(name, value);\n};\n\n// Clears a header value on the current native request\nRedirectableRequest.prototype.removeHeader = function (name) {\n delete this._options.headers[name];\n this._currentRequest.removeHeader(name);\n};\n\n// Proxy all other public ClientRequest methods\n[\n "abort", "flushHeaders", "getHeader",\n "setNoDelay", "setSocketKeepAlive", "setTimeout",\n].forEach(function (method) {\n RedirectableRequest.prototype[method] = function (a, b) {\n return this._currentRequest[method](a, b);\n };\n});\n\n// Proxy all public ClientRequest properties\n["aborted", "connection", "socket"].forEach(function (property) {\n Object.defineProperty(RedirectableRequest.prototype, property, {\n get: function () { return this._currentRequest[property]; },\n });\n});\n\n// Executes the next native request (initial or redirect)\nRedirectableRequest.prototype._performRequest = function () {\n // Load the native protocol\n var protocol = this._options.protocol;\n var nativeProtocol = this._options.nativeProtocols[protocol];\n if (!nativeProtocol) {\n this.emit("error", new Error("Unsupported protocol " + protocol));\n return;\n }\n\n // If specified, use the agent corresponding to the protocol\n // (HTTP and HTTPS use different types of agents)\n if (this._options.agents) {\n var scheme = protocol.substr(0, protocol.length - 1);\n this._options.agent = this._options.agents[scheme];\n }\n\n // Create the native request\n var request = this._currentRequest =\n nativeProtocol.request(this._options, this._onNativeResponse);\n this._currentUrl = url.format(this._options);\n\n // Set up event handlers\n request._redirectable = this;\n for (var event in eventHandlers) {\n /* istanbul ignore else */\n if (event) {\n request.on(event, eventHandlers[event]);\n }\n }\n\n // End a redirected request\n // (The first request must be ended explicitly with RedirectableRequest#end)\n if (this._isRedirect) {\n // Write the request entity and end.\n var i = 0;\n var buffers = this._requestBodyBuffers;\n (function writeNext() {\n if (i < buffers.length) {\n var buffer = buffers[i++];\n request.write(buffer.data, buffer.encoding, writeNext);\n }\n else {\n request.end();\n }\n }());\n }\n};\n\n// Processes a response from the current native request\nRedirectableRequest.prototype._processResponse = function (response) {\n // Store the redirected response\n if (this._options.trackRedirects) {\n this._redirects.push({\n url: this._currentUrl,\n headers: response.headers,\n statusCode: response.statusCode,\n });\n }\n\n // RFC7231§6.4: The 3xx (Redirection) class of status code indicates\n // that further action needs to be taken by the user agent in order to\n // fulfill the request. If a Location header field is provided,\n // the user agent MAY automatically redirect its request to the URI\n // referenced by the Location field value,\n // even if the specific status code is not understood.\n var location = response.headers.location;\n if (location && this._options.followRedirects !== false &&\n response.statusCode >= 300 && response.statusCode < 400) {\n // RFC7231§6.4: A client SHOULD detect and intervene\n // in cyclical redirections (i.e., "infinite" redirection loops).\n if (++this._redirectCount > this._options.maxRedirects) {\n this.emit("error", new Error("Max redirects exceeded."));\n return;\n }\n\n // RFC7231§6.4: Automatic redirection needs to done with\n // care for methods not known to be safe […],\n // since the user might not wish to redirect an unsafe request.\n // RFC7231§6.4.7: The 307 (Temporary Redirect) status code indicates\n // that the target resource resides temporarily under a different URI\n // and the user agent MUST NOT change the request method\n // if it performs an automatic redirection to that URI.\n var header;\n var headers = this._options.headers;\n if (response.statusCode !== 307 && !(this._options.method in SAFE_METHODS)) {\n this._options.method = "GET";\n // Drop a possible entity and headers related to it\n this._requestBodyBuffers = [];\n for (header in headers) {\n if (/^content-/i.test(header)) {\n delete headers[header];\n }\n }\n }\n\n // Drop the Host header, as the redirect might lead to a different host\n if (!this._isRedirect) {\n for (header in headers) {\n if (/^host$/i.test(header)) {\n delete headers[header];\n }\n }\n }\n\n // Perform the redirected request\n var redirectUrl = url.resolve(this._currentUrl, location);\n debug("redirecting to", redirectUrl);\n Object.assign(this._options, url.parse(redirectUrl));\n this._isRedirect = true;\n this._performRequest();\n\n // Discard the remainder of the response to avoid waiting for data\n response.destroy();\n }\n else {\n // The response is not a redirect; return it as-is\n response.responseUrl = this._currentUrl;\n response.redirects = this._redirects;\n this.emit("response", response);\n\n // Clean up\n this._requestBodyBuffers = [];\n }\n};\n\n// Wraps the key/value object of protocols with redirect functionality\nfunction wrap(protocols) {\n // Default settings\n var exports = {\n maxRedirects: 21,\n maxBodyLength: 10 * 1024 * 1024,\n };\n\n // Wrap each protocol\n var nativeProtocols = {};\n Object.keys(protocols).forEach(function (scheme) {\n var protocol = scheme + ":";\n var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];\n var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol);\n\n // Executes a request, following redirects\n wrappedProtocol.request = function (options, callback) {\n if (typeof options === "string") {\n options = url.parse(options);\n options.maxRedirects = exports.maxRedirects;\n }\n else {\n options = Object.assign({\n protocol: protocol,\n maxRedirects: exports.maxRedirects,\n maxBodyLength: exports.maxBodyLength,\n }, options);\n }\n options.nativeProtocols = nativeProtocols;\n assert.equal(options.protocol, protocol, "protocol mismatch");\n debug("options", options);\n return new RedirectableRequest(options, callback);\n };\n\n // Executes a GET request, following redirects\n wrappedProtocol.get = function (options, callback) {\n var request = wrappedProtocol.request(options, callback);\n request.end();\n return request;\n };\n });\n return exports;\n}\n\n// Exports\nmodule.exports = wrap({ http: http, https: https });\nmodule.exports.wrap = wrap;\n\n\n/***/ }),\n/* 85 */\n/*!*****************************************!*\\\n !*** ./node_modules/debug/src/index.js ***!\n \\*****************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n/**\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 = __webpack_require__(/*! ./browser.js */ 162);\n} else {\n module.exports = __webpack_require__(/*! ./node.js */ 164);\n}\n\n\n/***/ }),\n/* 86 */\n/*!*****************************************!*\\\n !*** ./node_modules/debug/src/debug.js ***!\n \\*****************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\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 = __webpack_require__(/*! ms */ 163);\n\n/**\n * Active `debug` instances.\n */\nexports.instances = [];\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 * 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 var prevTime;\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 debug.destroy = destroy;\n\n // env-specific initialization logic for debug instances\n if (\'function\' === typeof exports.init) {\n exports.init(debug);\n }\n\n exports.instances.push(debug);\n\n return debug;\n}\n\nfunction destroy () {\n var index = exports.instances.indexOf(this);\n if (index !== -1) {\n exports.instances.splice(index, 1);\n return true;\n } else {\n return false;\n }\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 i;\n var split = (typeof namespaces === \'string\' ? namespaces : \'\').split(/[\\s,]+/);\n var len = split.length;\n\n for (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 for (i = 0; i < exports.instances.length; i++) {\n var instance = exports.instances[i];\n instance.enabled = exports.enabled(instance.namespace);\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 if (name[name.length - 1] === \'*\') {\n return true;\n }\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\n/***/ }),\n/* 87 */\n/*!***********************!*\\\n !*** external "zlib" ***!\n \\***********************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = require("zlib");\n\n/***/ }),\n/* 88 */\n/*!***************************************************!*\\\n !*** ./node_modules/axios/lib/cancel/isCancel.js ***!\n \\***************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n\n\n/***/ }),\n/* 89 */\n/*!*************************************************!*\\\n !*** ./node_modules/axios/lib/cancel/Cancel.js ***!\n \\*************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return \'Cancel\' + (this.message ? \': \' + this.message : \'\');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n\n\n/***/ }),\n/* 90 */\n/*!********************************!*\\\n !*** ./src/api/tabRecovery.ts ***!\n \\********************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nObject.defineProperty(exports, "__esModule", { value: true });\nclass TabRecoveryProvider {\n}\nexports.TabRecoveryProvider = TabRecoveryProvider;\n\n\n/***/ }),\n/* 91 */\n/*!******************************************!*\\\n !*** ./src/services/homeBase.service.ts ***!\n \\******************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\n};\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\n result["default"] = mod;\n return result;\n};\nObject.defineProperty(exports, "__esModule", { value: true });\nconst os = __importStar(__webpack_require__(/*! os */ 57));\nconst core_1 = __webpack_require__(/*! @angular/core */ 0);\nconst electron_service_1 = __webpack_require__(/*! ./electron.service */ 14);\nconst config_service_1 = __webpack_require__(/*! ./config.service */ 15);\nconst ua = __webpack_require__(/*! universal-analytics */ 177);\nconst uuidv4 = __webpack_require__(/*! uuid/v4 */ 131);\nlet HomeBaseService = class HomeBaseService {\n constructor(electron, config) {\n this.electron = electron;\n this.config = config;\n this.appVersion = electron.app.getVersion();\n if (this.config.store.enableAnalytics) {\n this.enableAnalytics();\n }\n }\n openGitHub() {\n this.electron.shell.openExternal(\'https://github.com/eugeny/terminus\');\n }\n reportBug() {\n let body = `Version: ${this.appVersion}\\n`;\n body += `Platform: ${os.platform()} ${os.release()}\\n`;\n let label = {\n darwin: \'OS: macOS\',\n windows: \'OS: Windows\',\n linux: \'OS: Linux\',\n }[os.platform()];\n let plugins = window.installedPlugins.filter(x => !x.isBuiltin).map(x => x.name);\n body += `Plugins: ${plugins.join(\', \') || \'none\'}\\n\\n`;\n this.electron.shell.openExternal(`https://github.com/eugeny/terminus/issues/new?body=${encodeURIComponent(body)}&labels=${label}`);\n }\n enableAnalytics() {\n if (!window.localStorage.analyticsUserID) {\n window.localStorage.analyticsUserID = uuidv4();\n }\n const session = ua(\'UA-3278102-20\', window.localStorage.analyticsUserID);\n session.set(\'cd1\', this.appVersion);\n session.set(\'cd2\', process.platform);\n session.pageview(\'/\').send();\n }\n};\nHomeBaseService = __decorate([\n core_1.Injectable({ providedIn: \'root\' }),\n __metadata("design:paramtypes", [electron_service_1.ElectronService,\n config_service_1.ConfigService])\n], HomeBaseService);\nexports.HomeBaseService = HomeBaseService;\n\n\n/***/ }),\n/* 92 */\n/*!*********************************************!*\\\n !*** ./node_modules/request/lib/cookies.js ***!\n \\*********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\nvar tough = __webpack_require__(/*! tough-cookie */ 180)\n\nvar Cookie = tough.Cookie\nvar CookieJar = tough.CookieJar\n\nexports.parse = function (str) {\n if (str && str.uri) {\n str = str.uri\n }\n if (typeof str !== \'string\') {\n throw new Error(\'The cookie function only accepts STRING as param\')\n }\n return Cookie.parse(str, {loose: true})\n}\n\n// Adapt the sometimes-Async api of tough.CookieJar to our requirements\nfunction RequestJar (store) {\n var self = this\n self._jar = new CookieJar(store, {looseMode: true})\n}\nRequestJar.prototype.setCookie = function (cookieOrStr, uri, options) {\n var self = this\n return self._jar.setCookieSync(cookieOrStr, uri, options || {})\n}\nRequestJar.prototype.getCookieString = function (uri) {\n var self = this\n return self._jar.getCookieStringSync(uri)\n}\nRequestJar.prototype.getCookies = function (uri) {\n var self = this\n return self._jar.getCookiesSync(uri)\n}\n\nexports.jar = function (store) {\n return new RequestJar(store)\n}\n\n\n/***/ }),\n/* 93 */\n/*!****************************************************!*\\\n !*** ./node_modules/tough-cookie/lib/pubsuffix.js ***!\n \\****************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n/****************************************************\n * AUTOMATICALLY GENERATED by generate-pubsuffix.js *\n * DO NOT EDIT! *\n ****************************************************/\n\n\n\nvar punycode = __webpack_require__(/*! punycode */ 94);\n\nmodule.exports.getPublicSuffix = function getPublicSuffix(domain) {\n /*!\n * Copyright (c) 2015, Salesforce.com, Inc.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of Salesforce.com nor the names of its contributors may\n * be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n if (!domain) {\n return null;\n }\n if (domain.match(/^\\./)) {\n return null;\n }\n var asciiDomain = punycode.toASCII(domain);\n var converted = false;\n if (asciiDomain !== domain) {\n domain = asciiDomain;\n converted = true;\n }\n if (index[domain]) {\n return null;\n }\n\n domain = domain.toLowerCase();\n var parts = domain.split(\'.\').reverse();\n\n var suffix = \'\';\n var suffixLen = 0;\n for (var i=0; i suffixLen) {\n var publicSuffix = parts.slice(0,suffixLen+1).reverse().join(\'.\');\n return converted ? punycode.toUnicode(publicSuffix) : publicSuffix;\n }\n\n return null;\n};\n\n// The following generated structure is used under the MPL version 2.0\n// See public-suffix.txt for more information\n\nvar index = module.exports.index = Object.freeze(\n{"ac":true,"com.ac":true,"edu.ac":true,"gov.ac":true,"net.ac":true,"mil.ac":true,"org.ac":true,"ad":true,"nom.ad":true,"ae":true,"co.ae":true,"net.ae":true,"org.ae":true,"sch.ae":true,"ac.ae":true,"gov.ae":true,"mil.ae":true,"aero":true,"accident-investigation.aero":true,"accident-prevention.aero":true,"aerobatic.aero":true,"aeroclub.aero":true,"aerodrome.aero":true,"agents.aero":true,"aircraft.aero":true,"airline.aero":true,"airport.aero":true,"air-surveillance.aero":true,"airtraffic.aero":true,"air-traffic-control.aero":true,"ambulance.aero":true,"amusement.aero":true,"association.aero":true,"author.aero":true,"ballooning.aero":true,"broker.aero":true,"caa.aero":true,"cargo.aero":true,"catering.aero":true,"certification.aero":true,"championship.aero":true,"charter.aero":true,"civilaviation.aero":true,"club.aero":true,"conference.aero":true,"consultant.aero":true,"consulting.aero":true,"control.aero":true,"council.aero":true,"crew.aero":true,"design.aero":true,"dgca.aero":true,"educator.aero":true,"emergency.aero":true,"engine.aero":true,"engineer.aero":true,"entertainment.aero":true,"equipment.aero":true,"exchange.aero":true,"express.aero":true,"federation.aero":true,"flight.aero":true,"freight.aero":true,"fuel.aero":true,"gliding.aero":true,"government.aero":true,"groundhandling.aero":true,"group.aero":true,"hanggliding.aero":true,"homebuilt.aero":true,"insurance.aero":true,"journal.aero":true,"journalist.aero":true,"leasing.aero":true,"logistics.aero":true,"magazine.aero":true,"maintenance.aero":true,"media.aero":true,"microlight.aero":true,"modelling.aero":true,"navigation.aero":true,"parachuting.aero":true,"paragliding.aero":true,"passenger-association.aero":true,"pilot.aero":true,"press.aero":true,"production.aero":true,"recreation.aero":true,"repbody.aero":true,"res.aero":true,"research.aero":true,"rotorcraft.aero":true,"safety.aero":true,"scientist.aero":true,"services.aero":true,"show.aero":true,"skydiving.aero":true,"software.aero":true,"student.aero":true,"trader.aero":true,"trading.aero":true,"trainer.aero":true,"union.aero":true,"workinggroup.aero":true,"works.aero":true,"af":true,"gov.af":true,"com.af":true,"org.af":true,"net.af":true,"edu.af":true,"ag":true,"com.ag":true,"org.ag":true,"net.ag":true,"co.ag":true,"nom.ag":true,"ai":true,"off.ai":true,"com.ai":true,"net.ai":true,"org.ai":true,"al":true,"com.al":true,"edu.al":true,"gov.al":true,"mil.al":true,"net.al":true,"org.al":true,"am":true,"ao":true,"ed.ao":true,"gv.ao":true,"og.ao":true,"co.ao":true,"pb.ao":true,"it.ao":true,"aq":true,"ar":true,"com.ar":true,"edu.ar":true,"gob.ar":true,"gov.ar":true,"int.ar":true,"mil.ar":true,"musica.ar":true,"net.ar":true,"org.ar":true,"tur.ar":true,"arpa":true,"e164.arpa":true,"in-addr.arpa":true,"ip6.arpa":true,"iris.arpa":true,"uri.arpa":true,"urn.arpa":true,"as":true,"gov.as":true,"asia":true,"at":true,"ac.at":true,"co.at":true,"gv.at":true,"or.at":true,"au":true,"com.au":true,"net.au":true,"org.au":true,"edu.au":true,"gov.au":true,"asn.au":true,"id.au":true,"info.au":true,"conf.au":true,"oz.au":true,"act.au":true,"nsw.au":true,"nt.au":true,"qld.au":true,"sa.au":true,"tas.au":true,"vic.au":true,"wa.au":true,"act.edu.au":true,"nsw.edu.au":true,"nt.edu.au":true,"qld.edu.au":true,"sa.edu.au":true,"tas.edu.au":true,"vic.edu.au":true,"wa.edu.au":true,"qld.gov.au":true,"sa.gov.au":true,"tas.gov.au":true,"vic.gov.au":true,"wa.gov.au":true,"aw":true,"com.aw":true,"ax":true,"az":true,"com.az":true,"net.az":true,"int.az":true,"gov.az":true,"org.az":true,"edu.az":true,"info.az":true,"pp.az":true,"mil.az":true,"name.az":true,"pro.az":true,"biz.az":true,"ba":true,"com.ba":true,"edu.ba":true,"gov.ba":true,"mil.ba":true,"net.ba":true,"org.ba":true,"bb":true,"biz.bb":true,"co.bb":true,"com.bb":true,"edu.bb":true,"gov.bb":true,"info.bb":true,"net.bb":true,"org.bb":true,"store.bb":true,"tv.bb":true,"*.bd":true,"be":true,"ac.be":true,"bf":true,"gov.bf":true,"bg":true,"a.bg":true,"b.bg":true,"c.bg":true,"d.bg":true,"e.bg":true,"f.bg":true,"g.bg":true,"h.bg":true,"i.bg":true,"j.bg":true,"k.bg":true,"l.bg":true,"m.bg":true,"n.bg":true,"o.bg":true,"p.bg":true,"q.bg":true,"r.bg":true,"s.bg":true,"t.bg":true,"u.bg":true,"v.bg":true,"w.bg":true,"x.bg":true,"y.bg":true,"z.bg":true,"0.bg":true,"1.bg":true,"2.bg":true,"3.bg":true,"4.bg":true,"5.bg":true,"6.bg":true,"7.bg":true,"8.bg":true,"9.bg":true,"bh":true,"com.bh":true,"edu.bh":true,"net.bh":true,"org.bh":true,"gov.bh":true,"bi":true,"co.bi":true,"com.bi":true,"edu.bi":true,"or.bi":true,"org.bi":true,"biz":true,"bj":true,"asso.bj":true,"barreau.bj":true,"gouv.bj":true,"bm":true,"com.bm":true,"edu.bm":true,"gov.bm":true,"net.bm":true,"org.bm":true,"*.bn":true,"bo":true,"com.bo":true,"edu.bo":true,"gob.bo":true,"int.bo":true,"org.bo":true,"net.bo":true,"mil.bo":true,"tv.bo":true,"web.bo":true,"academia.bo":true,"agro.bo":true,"arte.bo":true,"blog.bo":true,"bolivia.bo":true,"ciencia.bo":true,"cooperativa.bo":true,"democracia.bo":true,"deporte.bo":true,"ecologia.bo":true,"economia.bo":true,"empresa.bo":true,"indigena.bo":true,"industria.bo":true,"info.bo":true,"medicina.bo":true,"movimiento.bo":true,"musica.bo":true,"natural.bo":true,"nombre.bo":true,"noticias.bo":true,"patria.bo":true,"politica.bo":true,"profesional.bo":true,"plurinacional.bo":true,"pueblo.bo":true,"revista.bo":true,"salud.bo":true,"tecnologia.bo":true,"tksat.bo":true,"transporte.bo":true,"wiki.bo":true,"br":true,"9guacu.br":true,"abc.br":true,"adm.br":true,"adv.br":true,"agr.br":true,"aju.br":true,"am.br":true,"anani.br":true,"aparecida.br":true,"arq.br":true,"art.br":true,"ato.br":true,"b.br":true,"belem.br":true,"bhz.br":true,"bio.br":true,"blog.br":true,"bmd.br":true,"boavista.br":true,"bsb.br":true,"campinagrande.br":true,"campinas.br":true,"caxias.br":true,"cim.br":true,"cng.br":true,"cnt.br":true,"com.br":true,"contagem.br":true,"coop.br":true,"cri.br":true,"cuiaba.br":true,"curitiba.br":true,"def.br":true,"ecn.br":true,"eco.br":true,"edu.br":true,"emp.br":true,"eng.br":true,"esp.br":true,"etc.br":true,"eti.br":true,"far.br":true,"feira.br":true,"flog.br":true,"floripa.br":true,"fm.br":true,"fnd.br":true,"fortal.br":true,"fot.br":true,"foz.br":true,"fst.br":true,"g12.br":true,"ggf.br":true,"goiania.br":true,"gov.br":true,"ac.gov.br":true,"al.gov.br":true,"am.gov.br":true,"ap.gov.br":true,"ba.gov.br":true,"ce.gov.br":true,"df.gov.br":true,"es.gov.br":true,"go.gov.br":true,"ma.gov.br":true,"mg.gov.br":true,"ms.gov.br":true,"mt.gov.br":true,"pa.gov.br":true,"pb.gov.br":true,"pe.gov.br":true,"pi.gov.br":true,"pr.gov.br":true,"rj.gov.br":true,"rn.gov.br":true,"ro.gov.br":true,"rr.gov.br":true,"rs.gov.br":true,"sc.gov.br":true,"se.gov.br":true,"sp.gov.br":true,"to.gov.br":true,"gru.br":true,"imb.br":true,"ind.br":true,"inf.br":true,"jab.br":true,"jampa.br":true,"jdf.br":true,"joinville.br":true,"jor.br":true,"jus.br":true,"leg.br":true,"lel.br":true,"londrina.br":true,"macapa.br":true,"maceio.br":true,"manaus.br":true,"maringa.br":true,"mat.br":true,"med.br":true,"mil.br":true,"morena.br":true,"mp.br":true,"mus.br":true,"natal.br":true,"net.br":true,"niteroi.br":true,"*.nom.br":true,"not.br":true,"ntr.br":true,"odo.br":true,"org.br":true,"osasco.br":true,"palmas.br":true,"poa.br":true,"ppg.br":true,"pro.br":true,"psc.br":true,"psi.br":true,"pvh.br":true,"qsl.br":true,"radio.br":true,"rec.br":true,"recife.br":true,"ribeirao.br":true,"rio.br":true,"riobranco.br":true,"riopreto.br":true,"salvador.br":true,"sampa.br":true,"santamaria.br":true,"santoandre.br":true,"saobernardo.br":true,"saogonca.br":true,"sjc.br":true,"slg.br":true,"slz.br":true,"sorocaba.br":true,"srv.br":true,"taxi.br":true,"teo.br":true,"the.br":true,"tmp.br":true,"trd.br":true,"tur.br":true,"tv.br":true,"udi.br":true,"vet.br":true,"vix.br":true,"vlog.br":true,"wiki.br":true,"zlg.br":true,"bs":true,"com.bs":true,"net.bs":true,"org.bs":true,"edu.bs":true,"gov.bs":true,"bt":true,"com.bt":true,"edu.bt":true,"gov.bt":true,"net.bt":true,"org.bt":true,"bv":true,"bw":true,"co.bw":true,"org.bw":true,"by":true,"gov.by":true,"mil.by":true,"com.by":true,"of.by":true,"bz":true,"com.bz":true,"net.bz":true,"org.bz":true,"edu.bz":true,"gov.bz":true,"ca":true,"ab.ca":true,"bc.ca":true,"mb.ca":true,"nb.ca":true,"nf.ca":true,"nl.ca":true,"ns.ca":true,"nt.ca":true,"nu.ca":true,"on.ca":true,"pe.ca":true,"qc.ca":true,"sk.ca":true,"yk.ca":true,"gc.ca":true,"cat":true,"cc":true,"cd":true,"gov.cd":true,"cf":true,"cg":true,"ch":true,"ci":true,"org.ci":true,"or.ci":true,"com.ci":true,"co.ci":true,"edu.ci":true,"ed.ci":true,"ac.ci":true,"net.ci":true,"go.ci":true,"asso.ci":true,"xn--aroport-bya.ci":true,"int.ci":true,"presse.ci":true,"md.ci":true,"gouv.ci":true,"*.ck":true,"www.ck":false,"cl":true,"gov.cl":true,"gob.cl":true,"co.cl":true,"mil.cl":true,"cm":true,"co.cm":true,"com.cm":true,"gov.cm":true,"net.cm":true,"cn":true,"ac.cn":true,"com.cn":true,"edu.cn":true,"gov.cn":true,"net.cn":true,"org.cn":true,"mil.cn":true,"xn--55qx5d.cn":true,"xn--io0a7i.cn":true,"xn--od0alg.cn":true,"ah.cn":true,"bj.cn":true,"cq.cn":true,"fj.cn":true,"gd.cn":true,"gs.cn":true,"gz.cn":true,"gx.cn":true,"ha.cn":true,"hb.cn":true,"he.cn":true,"hi.cn":true,"hl.cn":true,"hn.cn":true,"jl.cn":true,"js.cn":true,"jx.cn":true,"ln.cn":true,"nm.cn":true,"nx.cn":true,"qh.cn":true,"sc.cn":true,"sd.cn":true,"sh.cn":true,"sn.cn":true,"sx.cn":true,"tj.cn":true,"xj.cn":true,"xz.cn":true,"yn.cn":true,"zj.cn":true,"hk.cn":true,"mo.cn":true,"tw.cn":true,"co":true,"arts.co":true,"com.co":true,"edu.co":true,"firm.co":true,"gov.co":true,"info.co":true,"int.co":true,"mil.co":true,"net.co":true,"nom.co":true,"org.co":true,"rec.co":true,"web.co":true,"com":true,"coop":true,"cr":true,"ac.cr":true,"co.cr":true,"ed.cr":true,"fi.cr":true,"go.cr":true,"or.cr":true,"sa.cr":true,"cu":true,"com.cu":true,"edu.cu":true,"org.cu":true,"net.cu":true,"gov.cu":true,"inf.cu":true,"cv":true,"cw":true,"com.cw":true,"edu.cw":true,"net.cw":true,"org.cw":true,"cx":true,"gov.cx":true,"cy":true,"ac.cy":true,"biz.cy":true,"com.cy":true,"ekloges.cy":true,"gov.cy":true,"ltd.cy":true,"name.cy":true,"net.cy":true,"org.cy":true,"parliament.cy":true,"press.cy":true,"pro.cy":true,"tm.cy":true,"cz":true,"de":true,"dj":true,"dk":true,"dm":true,"com.dm":true,"net.dm":true,"org.dm":true,"edu.dm":true,"gov.dm":true,"do":true,"art.do":true,"com.do":true,"edu.do":true,"gob.do":true,"gov.do":true,"mil.do":true,"net.do":true,"org.do":true,"sld.do":true,"web.do":true,"dz":true,"com.dz":true,"org.dz":true,"net.dz":true,"gov.dz":true,"edu.dz":true,"asso.dz":true,"pol.dz":true,"art.dz":true,"ec":true,"com.ec":true,"info.ec":true,"net.ec":true,"fin.ec":true,"k12.ec":true,"med.ec":true,"pro.ec":true,"org.ec":true,"edu.ec":true,"gov.ec":true,"gob.ec":true,"mil.ec":true,"edu":true,"ee":true,"edu.ee":true,"gov.ee":true,"riik.ee":true,"lib.ee":true,"med.ee":true,"com.ee":true,"pri.ee":true,"aip.ee":true,"org.ee":true,"fie.ee":true,"eg":true,"com.eg":true,"edu.eg":true,"eun.eg":true,"gov.eg":true,"mil.eg":true,"name.eg":true,"net.eg":true,"org.eg":true,"sci.eg":true,"*.er":true,"es":true,"com.es":true,"nom.es":true,"org.es":true,"gob.es":true,"edu.es":true,"et":true,"com.et":true,"gov.et":true,"org.et":true,"edu.et":true,"biz.et":true,"name.et":true,"info.et":true,"net.et":true,"eu":true,"fi":true,"aland.fi":true,"*.fj":true,"*.fk":true,"fm":true,"fo":true,"fr":true,"com.fr":true,"asso.fr":true,"nom.fr":true,"prd.fr":true,"presse.fr":true,"tm.fr":true,"aeroport.fr":true,"assedic.fr":true,"avocat.fr":true,"avoues.fr":true,"cci.fr":true,"chambagri.fr":true,"chirurgiens-dentistes.fr":true,"experts-comptables.fr":true,"geometre-expert.fr":true,"gouv.fr":true,"greta.fr":true,"huissier-justice.fr":true,"medecin.fr":true,"notaires.fr":true,"pharmacien.fr":true,"port.fr":true,"veterinaire.fr":true,"ga":true,"gb":true,"gd":true,"ge":true,"com.ge":true,"edu.ge":true,"gov.ge":true,"org.ge":true,"mil.ge":true,"net.ge":true,"pvt.ge":true,"gf":true,"gg":true,"co.gg":true,"net.gg":true,"org.gg":true,"gh":true,"com.gh":true,"edu.gh":true,"gov.gh":true,"org.gh":true,"mil.gh":true,"gi":true,"com.gi":true,"ltd.gi":true,"gov.gi":true,"mod.gi":true,"edu.gi":true,"org.gi":true,"gl":true,"co.gl":true,"com.gl":true,"edu.gl":true,"net.gl":true,"org.gl":true,"gm":true,"gn":true,"ac.gn":true,"com.gn":true,"edu.gn":true,"gov.gn":true,"org.gn":true,"net.gn":true,"gov":true,"gp":true,"com.gp":true,"net.gp":true,"mobi.gp":true,"edu.gp":true,"org.gp":true,"asso.gp":true,"gq":true,"gr":true,"com.gr":true,"edu.gr":true,"net.gr":true,"org.gr":true,"gov.gr":true,"gs":true,"gt":true,"com.gt":true,"edu.gt":true,"gob.gt":true,"ind.gt":true,"mil.gt":true,"net.gt":true,"org.gt":true,"*.gu":true,"gw":true,"gy":true,"co.gy":true,"com.gy":true,"edu.gy":true,"gov.gy":true,"net.gy":true,"org.gy":true,"hk":true,"com.hk":true,"edu.hk":true,"gov.hk":true,"idv.hk":true,"net.hk":true,"org.hk":true,"xn--55qx5d.hk":true,"xn--wcvs22d.hk":true,"xn--lcvr32d.hk":true,"xn--mxtq1m.hk":true,"xn--gmqw5a.hk":true,"xn--ciqpn.hk":true,"xn--gmq050i.hk":true,"xn--zf0avx.hk":true,"xn--io0a7i.hk":true,"xn--mk0axi.hk":true,"xn--od0alg.hk":true,"xn--od0aq3b.hk":true,"xn--tn0ag.hk":true,"xn--uc0atv.hk":true,"xn--uc0ay4a.hk":true,"hm":true,"hn":true,"com.hn":true,"edu.hn":true,"org.hn":true,"net.hn":true,"mil.hn":true,"gob.hn":true,"hr":true,"iz.hr":true,"from.hr":true,"name.hr":true,"com.hr":true,"ht":true,"com.ht":true,"shop.ht":true,"firm.ht":true,"info.ht":true,"adult.ht":true,"net.ht":true,"pro.ht":true,"org.ht":true,"med.ht":true,"art.ht":true,"coop.ht":true,"pol.ht":true,"asso.ht":true,"edu.ht":true,"rel.ht":true,"gouv.ht":true,"perso.ht":true,"hu":true,"co.hu":true,"info.hu":true,"org.hu":true,"priv.hu":true,"sport.hu":true,"tm.hu":true,"2000.hu":true,"agrar.hu":true,"bolt.hu":true,"casino.hu":true,"city.hu":true,"erotica.hu":true,"erotika.hu":true,"film.hu":true,"forum.hu":true,"games.hu":true,"hotel.hu":true,"ingatlan.hu":true,"jogasz.hu":true,"konyvelo.hu":true,"lakas.hu":true,"media.hu":true,"news.hu":true,"reklam.hu":true,"sex.hu":true,"shop.hu":true,"suli.hu":true,"szex.hu":true,"tozsde.hu":true,"utazas.hu":true,"video.hu":true,"id":true,"ac.id":true,"biz.id":true,"co.id":true,"desa.id":true,"go.id":true,"mil.id":true,"my.id":true,"net.id":true,"or.id":true,"sch.id":true,"web.id":true,"ie":true,"gov.ie":true,"il":true,"ac.il":true,"co.il":true,"gov.il":true,"idf.il":true,"k12.il":true,"muni.il":true,"net.il":true,"org.il":true,"im":true,"ac.im":true,"co.im":true,"com.im":true,"ltd.co.im":true,"net.im":true,"org.im":true,"plc.co.im":true,"tt.im":true,"tv.im":true,"in":true,"co.in":true,"firm.in":true,"net.in":true,"org.in":true,"gen.in":true,"ind.in":true,"nic.in":true,"ac.in":true,"edu.in":true,"res.in":true,"gov.in":true,"mil.in":true,"info":true,"int":true,"eu.int":true,"io":true,"com.io":true,"iq":true,"gov.iq":true,"edu.iq":true,"mil.iq":true,"com.iq":true,"org.iq":true,"net.iq":true,"ir":true,"ac.ir":true,"co.ir":true,"gov.ir":true,"id.ir":true,"net.ir":true,"org.ir":true,"sch.ir":true,"xn--mgba3a4f16a.ir":true,"xn--mgba3a4fra.ir":true,"is":true,"net.is":true,"com.is":true,"edu.is":true,"gov.is":true,"org.is":true,"int.is":true,"it":true,"gov.it":true,"edu.it":true,"abr.it":true,"abruzzo.it":true,"aosta-valley.it":true,"aostavalley.it":true,"bas.it":true,"basilicata.it":true,"cal.it":true,"calabria.it":true,"cam.it":true,"campania.it":true,"emilia-romagna.it":true,"emiliaromagna.it":true,"emr.it":true,"friuli-v-giulia.it":true,"friuli-ve-giulia.it":true,"friuli-vegiulia.it":true,"friuli-venezia-giulia.it":true,"friuli-veneziagiulia.it":true,"friuli-vgiulia.it":true,"friuliv-giulia.it":true,"friulive-giulia.it":true,"friulivegiulia.it":true,"friulivenezia-giulia.it":true,"friuliveneziagiulia.it":true,"friulivgiulia.it":true,"fvg.it":true,"laz.it":true,"lazio.it":true,"lig.it":true,"liguria.it":true,"lom.it":true,"lombardia.it":true,"lombardy.it":true,"lucania.it":true,"mar.it":true,"marche.it":true,"mol.it":true,"molise.it":true,"piedmont.it":true,"piemonte.it":true,"pmn.it":true,"pug.it":true,"puglia.it":true,"sar.it":true,"sardegna.it":true,"sardinia.it":true,"sic.it":true,"sicilia.it":true,"sicily.it":true,"taa.it":true,"tos.it":true,"toscana.it":true,"trentino-a-adige.it":true,"trentino-aadige.it":true,"trentino-alto-adige.it":true,"trentino-altoadige.it":true,"trentino-s-tirol.it":true,"trentino-stirol.it":true,"trentino-sud-tirol.it":true,"trentino-sudtirol.it":true,"trentino-sued-tirol.it":true,"trentino-suedtirol.it":true,"trentinoa-adige.it":true,"trentinoaadige.it":true,"trentinoalto-adige.it":true,"trentinoaltoadige.it":true,"trentinos-tirol.it":true,"trentinostirol.it":true,"trentinosud-tirol.it":true,"trentinosudtirol.it":true,"trentinosued-tirol.it":true,"trentinosuedtirol.it":true,"tuscany.it":true,"umb.it":true,"umbria.it":true,"val-d-aosta.it":true,"val-daosta.it":true,"vald-aosta.it":true,"valdaosta.it":true,"valle-aosta.it":true,"valle-d-aosta.it":true,"valle-daosta.it":true,"valleaosta.it":true,"valled-aosta.it":true,"valledaosta.it":true,"vallee-aoste.it":true,"valleeaoste.it":true,"vao.it":true,"vda.it":true,"ven.it":true,"veneto.it":true,"ag.it":true,"agrigento.it":true,"al.it":true,"alessandria.it":true,"alto-adige.it":true,"altoadige.it":true,"an.it":true,"ancona.it":true,"andria-barletta-trani.it":true,"andria-trani-barletta.it":true,"andriabarlettatrani.it":true,"andriatranibarletta.it":true,"ao.it":true,"aosta.it":true,"aoste.it":true,"ap.it":true,"aq.it":true,"aquila.it":true,"ar.it":true,"arezzo.it":true,"ascoli-piceno.it":true,"ascolipiceno.it":true,"asti.it":true,"at.it":true,"av.it":true,"avellino.it":true,"ba.it":true,"balsan.it":true,"bari.it":true,"barletta-trani-andria.it":true,"barlettatraniandria.it":true,"belluno.it":true,"benevento.it":true,"bergamo.it":true,"bg.it":true,"bi.it":true,"biella.it":true,"bl.it":true,"bn.it":true,"bo.it":true,"bologna.it":true,"bolzano.it":true,"bozen.it":true,"br.it":true,"brescia.it":true,"brindisi.it":true,"bs.it":true,"bt.it":true,"bz.it":true,"ca.it":true,"cagliari.it":true,"caltanissetta.it":true,"campidano-medio.it":true,"campidanomedio.it":true,"campobasso.it":true,"carbonia-iglesias.it":true,"carboniaiglesias.it":true,"carrara-massa.it":true,"carraramassa.it":true,"caserta.it":true,"catania.it":true,"catanzaro.it":true,"cb.it":true,"ce.it":true,"cesena-forli.it":true,"cesenaforli.it":true,"ch.it":true,"chieti.it":true,"ci.it":true,"cl.it":true,"cn.it":true,"co.it":true,"como.it":true,"cosenza.it":true,"cr.it":true,"cremona.it":true,"crotone.it":true,"cs.it":true,"ct.it":true,"cuneo.it":true,"cz.it":true,"dell-ogliastra.it":true,"dellogliastra.it":true,"en.it":true,"enna.it":true,"fc.it":true,"fe.it":true,"fermo.it":true,"ferrara.it":true,"fg.it":true,"fi.it":true,"firenze.it":true,"florence.it":true,"fm.it":true,"foggia.it":true,"forli-cesena.it":true,"forlicesena.it":true,"fr.it":true,"frosinone.it":true,"ge.it":true,"genoa.it":true,"genova.it":true,"go.it":true,"gorizia.it":true,"gr.it":true,"grosseto.it":true,"iglesias-carbonia.it":true,"iglesiascarbonia.it":true,"im.it":true,"imperia.it":true,"is.it":true,"isernia.it":true,"kr.it":true,"la-spezia.it":true,"laquila.it":true,"laspezia.it":true,"latina.it":true,"lc.it":true,"le.it":true,"lecce.it":true,"lecco.it":true,"li.it":true,"livorno.it":true,"lo.it":true,"lodi.it":true,"lt.it":true,"lu.it":true,"lucca.it":true,"macerata.it":true,"mantova.it":true,"massa-carrara.it":true,"massacarrara.it":true,"matera.it":true,"mb.it":true,"mc.it":true,"me.it":true,"medio-campidano.it":true,"mediocampidano.it":true,"messina.it":true,"mi.it":true,"milan.it":true,"milano.it":true,"mn.it":true,"mo.it":true,"modena.it":true,"monza-brianza.it":true,"monza-e-della-brianza.it":true,"monza.it":true,"monzabrianza.it":true,"monzaebrianza.it":true,"monzaedellabrianza.it":true,"ms.it":true,"mt.it":true,"na.it":true,"naples.it":true,"napoli.it":true,"no.it":true,"novara.it":true,"nu.it":true,"nuoro.it":true,"og.it":true,"ogliastra.it":true,"olbia-tempio.it":true,"olbiatempio.it":true,"or.it":true,"oristano.it":true,"ot.it":true,"pa.it":true,"padova.it":true,"padua.it":true,"palermo.it":true,"parma.it":true,"pavia.it":true,"pc.it":true,"pd.it":true,"pe.it":true,"perugia.it":true,"pesaro-urbino.it":true,"pesarourbino.it":true,"pescara.it":true,"pg.it":true,"pi.it":true,"piacenza.it":true,"pisa.it":true,"pistoia.it":true,"pn.it":true,"po.it":true,"pordenone.it":true,"potenza.it":true,"pr.it":true,"prato.it":true,"pt.it":true,"pu.it":true,"pv.it":true,"pz.it":true,"ra.it":true,"ragusa.it":true,"ravenna.it":true,"rc.it":true,"re.it":true,"reggio-calabria.it":true,"reggio-emilia.it":true,"reggiocalabria.it":true,"reggioemilia.it":true,"rg.it":true,"ri.it":true,"rieti.it":true,"rimini.it":true,"rm.it":true,"rn.it":true,"ro.it":true,"roma.it":true,"rome.it":true,"rovigo.it":true,"sa.it":true,"salerno.it":true,"sassari.it":true,"savona.it":true,"si.it":true,"siena.it":true,"siracusa.it":true,"so.it":true,"sondrio.it":true,"sp.it":true,"sr.it":true,"ss.it":true,"suedtirol.it":true,"sv.it":true,"ta.it":true,"taranto.it":true,"te.it":true,"tempio-olbia.it":true,"tempioolbia.it":true,"teramo.it":true,"terni.it":true,"tn.it":true,"to.it":true,"torino.it":true,"tp.it":true,"tr.it":true,"trani-andria-barletta.it":true,"trani-barletta-andria.it":true,"traniandriabarletta.it":true,"tranibarlettaandria.it":true,"trapani.it":true,"trentino.it":true,"trento.it":true,"treviso.it":true,"trieste.it":true,"ts.it":true,"turin.it":true,"tv.it":true,"ud.it":true,"udine.it":true,"urbino-pesaro.it":true,"urbinopesaro.it":true,"va.it":true,"varese.it":true,"vb.it":true,"vc.it":true,"ve.it":true,"venezia.it":true,"venice.it":true,"verbania.it":true,"vercelli.it":true,"verona.it":true,"vi.it":true,"vibo-valentia.it":true,"vibovalentia.it":true,"vicenza.it":true,"viterbo.it":true,"vr.it":true,"vs.it":true,"vt.it":true,"vv.it":true,"je":true,"co.je":true,"net.je":true,"org.je":true,"*.jm":true,"jo":true,"com.jo":true,"org.jo":true,"net.jo":true,"edu.jo":true,"sch.jo":true,"gov.jo":true,"mil.jo":true,"name.jo":true,"jobs":true,"jp":true,"ac.jp":true,"ad.jp":true,"co.jp":true,"ed.jp":true,"go.jp":true,"gr.jp":true,"lg.jp":true,"ne.jp":true,"or.jp":true,"aichi.jp":true,"akita.jp":true,"aomori.jp":true,"chiba.jp":true,"ehime.jp":true,"fukui.jp":true,"fukuoka.jp":true,"fukushima.jp":true,"gifu.jp":true,"gunma.jp":true,"hiroshima.jp":true,"hokkaido.jp":true,"hyogo.jp":true,"ibaraki.jp":true,"ishikawa.jp":true,"iwate.jp":true,"kagawa.jp":true,"kagoshima.jp":true,"kanagawa.jp":true,"kochi.jp":true,"kumamoto.jp":true,"kyoto.jp":true,"mie.jp":true,"miyagi.jp":true,"miyazaki.jp":true,"nagano.jp":true,"nagasaki.jp":true,"nara.jp":true,"niigata.jp":true,"oita.jp":true,"okayama.jp":true,"okinawa.jp":true,"osaka.jp":true,"saga.jp":true,"saitama.jp":true,"shiga.jp":true,"shimane.jp":true,"shizuoka.jp":true,"tochigi.jp":true,"tokushima.jp":true,"tokyo.jp":true,"tottori.jp":true,"toyama.jp":true,"wakayama.jp":true,"yamagata.jp":true,"yamaguchi.jp":true,"yamanashi.jp":true,"xn--4pvxs.jp":true,"xn--vgu402c.jp":true,"xn--c3s14m.jp":true,"xn--f6qx53a.jp":true,"xn--8pvr4u.jp":true,"xn--uist22h.jp":true,"xn--djrs72d6uy.jp":true,"xn--mkru45i.jp":true,"xn--0trq7p7nn.jp":true,"xn--8ltr62k.jp":true,"xn--2m4a15e.jp":true,"xn--efvn9s.jp":true,"xn--32vp30h.jp":true,"xn--4it797k.jp":true,"xn--1lqs71d.jp":true,"xn--5rtp49c.jp":true,"xn--5js045d.jp":true,"xn--ehqz56n.jp":true,"xn--1lqs03n.jp":true,"xn--qqqt11m.jp":true,"xn--kbrq7o.jp":true,"xn--pssu33l.jp":true,"xn--ntsq17g.jp":true,"xn--uisz3g.jp":true,"xn--6btw5a.jp":true,"xn--1ctwo.jp":true,"xn--6orx2r.jp":true,"xn--rht61e.jp":true,"xn--rht27z.jp":true,"xn--djty4k.jp":true,"xn--nit225k.jp":true,"xn--rht3d.jp":true,"xn--klty5x.jp":true,"xn--kltx9a.jp":true,"xn--kltp7d.jp":true,"xn--uuwu58a.jp":true,"xn--zbx025d.jp":true,"xn--ntso0iqx3a.jp":true,"xn--elqq16h.jp":true,"xn--4it168d.jp":true,"xn--klt787d.jp":true,"xn--rny31h.jp":true,"xn--7t0a264c.jp":true,"xn--5rtq34k.jp":true,"xn--k7yn95e.jp":true,"xn--tor131o.jp":true,"xn--d5qv7z876c.jp":true,"*.kawasaki.jp":true,"*.kitakyushu.jp":true,"*.kobe.jp":true,"*.nagoya.jp":true,"*.sapporo.jp":true,"*.sendai.jp":true,"*.yokohama.jp":true,"city.kawasaki.jp":false,"city.kitakyushu.jp":false,"city.kobe.jp":false,"city.nagoya.jp":false,"city.sapporo.jp":false,"city.sendai.jp":false,"city.yokohama.jp":false,"aisai.aichi.jp":true,"ama.aichi.jp":true,"anjo.aichi.jp":true,"asuke.aichi.jp":true,"chiryu.aichi.jp":true,"chita.aichi.jp":true,"fuso.aichi.jp":true,"gamagori.aichi.jp":true,"handa.aichi.jp":true,"hazu.aichi.jp":true,"hekinan.aichi.jp":true,"higashiura.aichi.jp":true,"ichinomiya.aichi.jp":true,"inazawa.aichi.jp":true,"inuyama.aichi.jp":true,"isshiki.aichi.jp":true,"iwakura.aichi.jp":true,"kanie.aichi.jp":true,"kariya.aichi.jp":true,"kasugai.aichi.jp":true,"kira.aichi.jp":true,"kiyosu.aichi.jp":true,"komaki.aichi.jp":true,"konan.aichi.jp":true,"kota.aichi.jp":true,"mihama.aichi.jp":true,"miyoshi.aichi.jp":true,"nishio.aichi.jp":true,"nisshin.aichi.jp":true,"obu.aichi.jp":true,"oguchi.aichi.jp":true,"oharu.aichi.jp":true,"okazaki.aichi.jp":true,"owariasahi.aichi.jp":true,"seto.aichi.jp":true,"shikatsu.aichi.jp":true,"shinshiro.aichi.jp":true,"shitara.aichi.jp":true,"tahara.aichi.jp":true,"takahama.aichi.jp":true,"tobishima.aichi.jp":true,"toei.aichi.jp":true,"togo.aichi.jp":true,"tokai.aichi.jp":true,"tokoname.aichi.jp":true,"toyoake.aichi.jp":true,"toyohashi.aichi.jp":true,"toyokawa.aichi.jp":true,"toyone.aichi.jp":true,"toyota.aichi.jp":true,"tsushima.aichi.jp":true,"yatomi.aichi.jp":true,"akita.akita.jp":true,"daisen.akita.jp":true,"fujisato.akita.jp":true,"gojome.akita.jp":true,"hachirogata.akita.jp":true,"happou.akita.jp":true,"higashinaruse.akita.jp":true,"honjo.akita.jp":true,"honjyo.akita.jp":true,"ikawa.akita.jp":true,"kamikoani.akita.jp":true,"kamioka.akita.jp":true,"katagami.akita.jp":true,"kazuno.akita.jp":true,"kitaakita.akita.jp":true,"kosaka.akita.jp":true,"kyowa.akita.jp":true,"misato.akita.jp":true,"mitane.akita.jp":true,"moriyoshi.akita.jp":true,"nikaho.akita.jp":true,"noshiro.akita.jp":true,"odate.akita.jp":true,"oga.akita.jp":true,"ogata.akita.jp":true,"semboku.akita.jp":true,"yokote.akita.jp":true,"yurihonjo.akita.jp":true,"aomori.aomori.jp":true,"gonohe.aomori.jp":true,"hachinohe.aomori.jp":true,"hashikami.aomori.jp":true,"hiranai.aomori.jp":true,"hirosaki.aomori.jp":true,"itayanagi.aomori.jp":true,"kuroishi.aomori.jp":true,"misawa.aomori.jp":true,"mutsu.aomori.jp":true,"nakadomari.aomori.jp":true,"noheji.aomori.jp":true,"oirase.aomori.jp":true,"owani.aomori.jp":true,"rokunohe.aomori.jp":true,"sannohe.aomori.jp":true,"shichinohe.aomori.jp":true,"shingo.aomori.jp":true,"takko.aomori.jp":true,"towada.aomori.jp":true,"tsugaru.aomori.jp":true,"tsuruta.aomori.jp":true,"abiko.chiba.jp":true,"asahi.chiba.jp":true,"chonan.chiba.jp":true,"chosei.chiba.jp":true,"choshi.chiba.jp":true,"chuo.chiba.jp":true,"funabashi.chiba.jp":true,"futtsu.chiba.jp":true,"hanamigawa.chiba.jp":true,"ichihara.chiba.jp":true,"ichikawa.chiba.jp":true,"ichinomiya.chiba.jp":true,"inzai.chiba.jp":true,"isumi.chiba.jp":true,"kamagaya.chiba.jp":true,"kamogawa.chiba.jp":true,"kashiwa.chiba.jp":true,"katori.chiba.jp":true,"katsuura.chiba.jp":true,"kimitsu.chiba.jp":true,"kisarazu.chiba.jp":true,"kozaki.chiba.jp":true,"kujukuri.chiba.jp":true,"kyonan.chiba.jp":true,"matsudo.chiba.jp":true,"midori.chiba.jp":true,"mihama.chiba.jp":true,"minamiboso.chiba.jp":true,"mobara.chiba.jp":true,"mutsuzawa.chiba.jp":true,"nagara.chiba.jp":true,"nagareyama.chiba.jp":true,"narashino.chiba.jp":true,"narita.chiba.jp":true,"noda.chiba.jp":true,"oamishirasato.chiba.jp":true,"omigawa.chiba.jp":true,"onjuku.chiba.jp":true,"otaki.chiba.jp":true,"sakae.chiba.jp":true,"sakura.chiba.jp":true,"shimofusa.chiba.jp":true,"shirako.chiba.jp":true,"shiroi.chiba.jp":true,"shisui.chiba.jp":true,"sodegaura.chiba.jp":true,"sosa.chiba.jp":true,"tako.chiba.jp":true,"tateyama.chiba.jp":true,"togane.chiba.jp":true,"tohnosho.chiba.jp":true,"tomisato.chiba.jp":true,"urayasu.chiba.jp":true,"yachimata.chiba.jp":true,"yachiyo.chiba.jp":true,"yokaichiba.chiba.jp":true,"yokoshibahikari.chiba.jp":true,"yotsukaido.chiba.jp":true,"ainan.ehime.jp":true,"honai.ehime.jp":true,"ikata.ehime.jp":true,"imabari.ehime.jp":true,"iyo.ehime.jp":true,"kamijima.ehime.jp":true,"kihoku.ehime.jp":true,"kumakogen.ehime.jp":true,"masaki.ehime.jp":true,"matsuno.ehime.jp":true,"matsuyama.ehime.jp":true,"namikata.ehime.jp":true,"niihama.ehime.jp":true,"ozu.ehime.jp":true,"saijo.ehime.jp":true,"seiyo.ehime.jp":true,"shikokuchuo.ehime.jp":true,"tobe.ehime.jp":true,"toon.ehime.jp":true,"uchiko.ehime.jp":true,"uwajima.ehime.jp":true,"yawatahama.ehime.jp":true,"echizen.fukui.jp":true,"eiheiji.fukui.jp":true,"fukui.fukui.jp":true,"ikeda.fukui.jp":true,"katsuyama.fukui.jp":true,"mihama.fukui.jp":true,"minamiechizen.fukui.jp":true,"obama.fukui.jp":true,"ohi.fukui.jp":true,"ono.fukui.jp":true,"sabae.fukui.jp":true,"sakai.fukui.jp":true,"takahama.fukui.jp":true,"tsuruga.fukui.jp":true,"wakasa.fukui.jp":true,"ashiya.fukuoka.jp":true,"buzen.fukuoka.jp":true,"chikugo.fukuoka.jp":true,"chikuho.fukuoka.jp":true,"chikujo.fukuoka.jp":true,"chikushino.fukuoka.jp":true,"chikuzen.fukuoka.jp":true,"chuo.fukuoka.jp":true,"dazaifu.fukuoka.jp":true,"fukuchi.fukuoka.jp":true,"hakata.fukuoka.jp":true,"higashi.fukuoka.jp":true,"hirokawa.fukuoka.jp":true,"hisayama.fukuoka.jp":true,"iizuka.fukuoka.jp":true,"inatsuki.fukuoka.jp":true,"kaho.fukuoka.jp":true,"kasuga.fukuoka.jp":true,"kasuya.fukuoka.jp":true,"kawara.fukuoka.jp":true,"keisen.fukuoka.jp":true,"koga.fukuoka.jp":true,"kurate.fukuoka.jp":true,"kurogi.fukuoka.jp":true,"kurume.fukuoka.jp":true,"minami.fukuoka.jp":true,"miyako.fukuoka.jp":true,"miyama.fukuoka.jp":true,"miyawaka.fukuoka.jp":true,"mizumaki.fukuoka.jp":true,"munakata.fukuoka.jp":true,"nakagawa.fukuoka.jp":true,"nakama.fukuoka.jp":true,"nishi.fukuoka.jp":true,"nogata.fukuoka.jp":true,"ogori.fukuoka.jp":true,"okagaki.fukuoka.jp":true,"okawa.fukuoka.jp":true,"oki.fukuoka.jp":true,"omuta.fukuoka.jp":true,"onga.fukuoka.jp":true,"onojo.fukuoka.jp":true,"oto.fukuoka.jp":true,"saigawa.fukuoka.jp":true,"sasaguri.fukuoka.jp":true,"shingu.fukuoka.jp":true,"shinyoshitomi.fukuoka.jp":true,"shonai.fukuoka.jp":true,"soeda.fukuoka.jp":true,"sue.fukuoka.jp":true,"tachiarai.fukuoka.jp":true,"tagawa.fukuoka.jp":true,"takata.fukuoka.jp":true,"toho.fukuoka.jp":true,"toyotsu.fukuoka.jp":true,"tsuiki.fukuoka.jp":true,"ukiha.fukuoka.jp":true,"umi.fukuoka.jp":true,"usui.fukuoka.jp":true,"yamada.fukuoka.jp":true,"yame.fukuoka.jp":true,"yanagawa.fukuoka.jp":true,"yukuhashi.fukuoka.jp":true,"aizubange.fukushima.jp":true,"aizumisato.fukushima.jp":true,"aizuwakamatsu.fukushima.jp":true,"asakawa.fukushima.jp":true,"bandai.fukushima.jp":true,"date.fukushima.jp":true,"fukushima.fukushima.jp":true,"furudono.fukushima.jp":true,"futaba.fukushima.jp":true,"hanawa.fukushima.jp":true,"higashi.fukushima.jp":true,"hirata.fukushima.jp":true,"hirono.fukushima.jp":true,"iitate.fukushima.jp":true,"inawashiro.fukushima.jp":true,"ishikawa.fukushima.jp":true,"iwaki.fukushima.jp":true,"izumizaki.fukushima.jp":true,"kagamiishi.fukushima.jp":true,"kaneyama.fukushima.jp":true,"kawamata.fukushima.jp":true,"kitakata.fukushima.jp":true,"kitashiobara.fukushima.jp":true,"koori.fukushima.jp":true,"koriyama.fukushima.jp":true,"kunimi.fukushima.jp":true,"miharu.fukushima.jp":true,"mishima.fukushima.jp":true,"namie.fukushima.jp":true,"nango.fukushima.jp":true,"nishiaizu.fukushima.jp":true,"nishigo.fukushima.jp":true,"okuma.fukushima.jp":true,"omotego.fukushima.jp":true,"ono.fukushima.jp":true,"otama.fukushima.jp":true,"samegawa.fukushima.jp":true,"shimogo.fukushima.jp":true,"shirakawa.fukushima.jp":true,"showa.fukushima.jp":true,"soma.fukushima.jp":true,"sukagawa.fukushima.jp":true,"taishin.fukushima.jp":true,"tamakawa.fukushima.jp":true,"tanagura.fukushima.jp":true,"tenei.fukushima.jp":true,"yabuki.fukushima.jp":true,"yamato.fukushima.jp":true,"yamatsuri.fukushima.jp":true,"yanaizu.fukushima.jp":true,"yugawa.fukushima.jp":true,"anpachi.gifu.jp":true,"ena.gifu.jp":true,"gifu.gifu.jp":true,"ginan.gifu.jp":true,"godo.gifu.jp":true,"gujo.gifu.jp":true,"hashima.gifu.jp":true,"hichiso.gifu.jp":true,"hida.gifu.jp":true,"higashishirakawa.gifu.jp":true,"ibigawa.gifu.jp":true,"ikeda.gifu.jp":true,"kakamigahara.gifu.jp":true,"kani.gifu.jp":true,"kasahara.gifu.jp":true,"kasamatsu.gifu.jp":true,"kawaue.gifu.jp":true,"kitagata.gifu.jp":true,"mino.gifu.jp":true,"minokamo.gifu.jp":true,"mitake.gifu.jp":true,"mizunami.gifu.jp":true,"motosu.gifu.jp":true,"nakatsugawa.gifu.jp":true,"ogaki.gifu.jp":true,"sakahogi.gifu.jp":true,"seki.gifu.jp":true,"sekigahara.gifu.jp":true,"shirakawa.gifu.jp":true,"tajimi.gifu.jp":true,"takayama.gifu.jp":true,"tarui.gifu.jp":true,"toki.gifu.jp":true,"tomika.gifu.jp":true,"wanouchi.gifu.jp":true,"yamagata.gifu.jp":true,"yaotsu.gifu.jp":true,"yoro.gifu.jp":true,"annaka.gunma.jp":true,"chiyoda.gunma.jp":true,"fujioka.gunma.jp":true,"higashiagatsuma.gunma.jp":true,"isesaki.gunma.jp":true,"itakura.gunma.jp":true,"kanna.gunma.jp":true,"kanra.gunma.jp":true,"katashina.gunma.jp":true,"kawaba.gunma.jp":true,"kiryu.gunma.jp":true,"kusatsu.gunma.jp":true,"maebashi.gunma.jp":true,"meiwa.gunma.jp":true,"midori.gunma.jp":true,"minakami.gunma.jp":true,"naganohara.gunma.jp":true,"nakanojo.gunma.jp":true,"nanmoku.gunma.jp":true,"numata.gunma.jp":true,"oizumi.gunma.jp":true,"ora.gunma.jp":true,"ota.gunma.jp":true,"shibukawa.gunma.jp":true,"shimonita.gunma.jp":true,"shinto.gunma.jp":true,"showa.gunma.jp":true,"takasaki.gunma.jp":true,"takayama.gunma.jp":true,"tamamura.gunma.jp":true,"tatebayashi.gunma.jp":true,"tomioka.gunma.jp":true,"tsukiyono.gunma.jp":true,"tsumagoi.gunma.jp":true,"ueno.gunma.jp":true,"yoshioka.gunma.jp":true,"asaminami.hiroshima.jp":true,"daiwa.hiroshima.jp":true,"etajima.hiroshima.jp":true,"fuchu.hiroshima.jp":true,"fukuyama.hiroshima.jp":true,"hatsukaichi.hiroshima.jp":true,"higashihiroshima.hiroshima.jp":true,"hongo.hiroshima.jp":true,"jinsekikogen.hiroshima.jp":true,"kaita.hiroshima.jp":true,"kui.hiroshima.jp":true,"kumano.hiroshima.jp":true,"kure.hiroshima.jp":true,"mihara.hiroshima.jp":true,"miyoshi.hiroshima.jp":true,"naka.hiroshima.jp":true,"onomichi.hiroshima.jp":true,"osakikamijima.hiroshima.jp":true,"otake.hiroshima.jp":true,"saka.hiroshima.jp":true,"sera.hiroshima.jp":true,"seranishi.hiroshima.jp":true,"shinichi.hiroshima.jp":true,"shobara.hiroshima.jp":true,"takehara.hiroshima.jp":true,"abashiri.hokkaido.jp":true,"abira.hokkaido.jp":true,"aibetsu.hokkaido.jp":true,"akabira.hokkaido.jp":true,"akkeshi.hokkaido.jp":true,"asahikawa.hokkaido.jp":true,"ashibetsu.hokkaido.jp":true,"ashoro.hokkaido.jp":true,"assabu.hokkaido.jp":true,"atsuma.hokkaido.jp":true,"bibai.hokkaido.jp":true,"biei.hokkaido.jp":true,"bifuka.hokkaido.jp":true,"bihoro.hokkaido.jp":true,"biratori.hokkaido.jp":true,"chippubetsu.hokkaido.jp":true,"chitose.hokkaido.jp":true,"date.hokkaido.jp":true,"ebetsu.hokkaido.jp":true,"embetsu.hokkaido.jp":true,"eniwa.hokkaido.jp":true,"erimo.hokkaido.jp":true,"esan.hokkaido.jp":true,"esashi.hokkaido.jp":true,"fukagawa.hokkaido.jp":true,"fukushima.hokkaido.jp":true,"furano.hokkaido.jp":true,"furubira.hokkaido.jp":true,"haboro.hokkaido.jp":true,"hakodate.hokkaido.jp":true,"hamatonbetsu.hokkaido.jp":true,"hidaka.hokkaido.jp":true,"higashikagura.hokkaido.jp":true,"higashikawa.hokkaido.jp":true,"hiroo.hokkaido.jp":true,"hokuryu.hokkaido.jp":true,"hokuto.hokkaido.jp":true,"honbetsu.hokkaido.jp":true,"horokanai.hokkaido.jp":true,"horonobe.hokkaido.jp":true,"ikeda.hokkaido.jp":true,"imakane.hokkaido.jp":true,"ishikari.hokkaido.jp":true,"iwamizawa.hokkaido.jp":true,"iwanai.hokkaido.jp":true,"kamifurano.hokkaido.jp":true,"kamikawa.hokkaido.jp":true,"kamishihoro.hokkaido.jp":true,"kamisunagawa.hokkaido.jp":true,"kamoenai.hokkaido.jp":true,"kayabe.hokkaido.jp":true,"kembuchi.hokkaido.jp":true,"kikonai.hokkaido.jp":true,"kimobetsu.hokkaido.jp":true,"kitahiroshima.hokkaido.jp":true,"kitami.hokkaido.jp":true,"kiyosato.hokkaido.jp":true,"koshimizu.hokkaido.jp":true,"kunneppu.hokkaido.jp":true,"kuriyama.hokkaido.jp":true,"kuromatsunai.hokkaido.jp":true,"kushiro.hokkaido.jp":true,"kutchan.hokkaido.jp":true,"kyowa.hokkaido.jp":true,"mashike.hokkaido.jp":true,"matsumae.hokkaido.jp":true,"mikasa.hokkaido.jp":true,"minamifurano.hokkaido.jp":true,"mombetsu.hokkaido.jp":true,"moseushi.hokkaido.jp":true,"mukawa.hokkaido.jp":true,"muroran.hokkaido.jp":true,"naie.hokkaido.jp":true,"nakagawa.hokkaido.jp":true,"nakasatsunai.hokkaido.jp":true,"nakatombetsu.hokkaido.jp":true,"nanae.hokkaido.jp":true,"nanporo.hokkaido.jp":true,"nayoro.hokkaido.jp":true,"nemuro.hokkaido.jp":true,"niikappu.hokkaido.jp":true,"niki.hokkaido.jp":true,"nishiokoppe.hokkaido.jp":true,"noboribetsu.hokkaido.jp":true,"numata.hokkaido.jp":true,"obihiro.hokkaido.jp":true,"obira.hokkaido.jp":true,"oketo.hokkaido.jp":true,"okoppe.hokkaido.jp":true,"otaru.hokkaido.jp":true,"otobe.hokkaido.jp":true,"otofuke.hokkaido.jp":true,"otoineppu.hokkaido.jp":true,"oumu.hokkaido.jp":true,"ozora.hokkaido.jp":true,"pippu.hokkaido.jp":true,"rankoshi.hokkaido.jp":true,"rebun.hokkaido.jp":true,"rikubetsu.hokkaido.jp":true,"rishiri.hokkaido.jp":true,"rishirifuji.hokkaido.jp":true,"saroma.hokkaido.jp":true,"sarufutsu.hokkaido.jp":true,"shakotan.hokkaido.jp":true,"shari.hokkaido.jp":true,"shibecha.hokkaido.jp":true,"shibetsu.hokkaido.jp":true,"shikabe.hokkaido.jp":true,"shikaoi.hokkaido.jp":true,"shimamaki.hokkaido.jp":true,"shimizu.hokkaido.jp":true,"shimokawa.hokkaido.jp":true,"shinshinotsu.hokkaido.jp":true,"shintoku.hokkaido.jp":true,"shiranuka.hokkaido.jp":true,"shiraoi.hokkaido.jp":true,"shiriuchi.hokkaido.jp":true,"sobetsu.hokkaido.jp":true,"sunagawa.hokkaido.jp":true,"taiki.hokkaido.jp":true,"takasu.hokkaido.jp":true,"takikawa.hokkaido.jp":true,"takinoue.hokkaido.jp":true,"teshikaga.hokkaido.jp":true,"tobetsu.hokkaido.jp":true,"tohma.hokkaido.jp":true,"tomakomai.hokkaido.jp":true,"tomari.hokkaido.jp":true,"toya.hokkaido.jp":true,"toyako.hokkaido.jp":true,"toyotomi.hokkaido.jp":true,"toyoura.hokkaido.jp":true,"tsubetsu.hokkaido.jp":true,"tsukigata.hokkaido.jp":true,"urakawa.hokkaido.jp":true,"urausu.hokkaido.jp":true,"uryu.hokkaido.jp":true,"utashinai.hokkaido.jp":true,"wakkanai.hokkaido.jp":true,"wassamu.hokkaido.jp":true,"yakumo.hokkaido.jp":true,"yoichi.hokkaido.jp":true,"aioi.hyogo.jp":true,"akashi.hyogo.jp":true,"ako.hyogo.jp":true,"amagasaki.hyogo.jp":true,"aogaki.hyogo.jp":true,"asago.hyogo.jp":true,"ashiya.hyogo.jp":true,"awaji.hyogo.jp":true,"fukusaki.hyogo.jp":true,"goshiki.hyogo.jp":true,"harima.hyogo.jp":true,"himeji.hyogo.jp":true,"ichikawa.hyogo.jp":true,"inagawa.hyogo.jp":true,"itami.hyogo.jp":true,"kakogawa.hyogo.jp":true,"kamigori.hyogo.jp":true,"kamikawa.hyogo.jp":true,"kasai.hyogo.jp":true,"kasuga.hyogo.jp":true,"kawanishi.hyogo.jp":true,"miki.hyogo.jp":true,"minamiawaji.hyogo.jp":true,"nishinomiya.hyogo.jp":true,"nishiwaki.hyogo.jp":true,"ono.hyogo.jp":true,"sanda.hyogo.jp":true,"sannan.hyogo.jp":true,"sasayama.hyogo.jp":true,"sayo.hyogo.jp":true,"shingu.hyogo.jp":true,"shinonsen.hyogo.jp":true,"shiso.hyogo.jp":true,"sumoto.hyogo.jp":true,"taishi.hyogo.jp":true,"taka.hyogo.jp":true,"takarazuka.hyogo.jp":true,"takasago.hyogo.jp":true,"takino.hyogo.jp":true,"tamba.hyogo.jp":true,"tatsuno.hyogo.jp":true,"toyooka.hyogo.jp":true,"yabu.hyogo.jp":true,"yashiro.hyogo.jp":true,"yoka.hyogo.jp":true,"yokawa.hyogo.jp":true,"ami.ibaraki.jp":true,"asahi.ibaraki.jp":true,"bando.ibaraki.jp":true,"chikusei.ibaraki.jp":true,"daigo.ibaraki.jp":true,"fujishiro.ibaraki.jp":true,"hitachi.ibaraki.jp":true,"hitachinaka.ibaraki.jp":true,"hitachiomiya.ibaraki.jp":true,"hitachiota.ibaraki.jp":true,"ibaraki.ibaraki.jp":true,"ina.ibaraki.jp":true,"inashiki.ibaraki.jp":true,"itako.ibaraki.jp":true,"iwama.ibaraki.jp":true,"joso.ibaraki.jp":true,"kamisu.ibaraki.jp":true,"kasama.ibaraki.jp":true,"kashima.ibaraki.jp":true,"kasumigaura.ibaraki.jp":true,"koga.ibaraki.jp":true,"miho.ibaraki.jp":true,"mito.ibaraki.jp":true,"moriya.ibaraki.jp":true,"naka.ibaraki.jp":true,"namegata.ibaraki.jp":true,"oarai.ibaraki.jp":true,"ogawa.ibaraki.jp":true,"omitama.ibaraki.jp":true,"ryugasaki.ibaraki.jp":true,"sakai.ibaraki.jp":true,"sakuragawa.ibaraki.jp":true,"shimodate.ibaraki.jp":true,"shimotsuma.ibaraki.jp":true,"shirosato.ibaraki.jp":true,"sowa.ibaraki.jp":true,"suifu.ibaraki.jp":true,"takahagi.ibaraki.jp":true,"tamatsukuri.ibaraki.jp":true,"tokai.ibaraki.jp":true,"tomobe.ibaraki.jp":true,"tone.ibaraki.jp":true,"toride.ibaraki.jp":true,"tsuchiura.ibaraki.jp":true,"tsukuba.ibaraki.jp":true,"uchihara.ibaraki.jp":true,"ushiku.ibaraki.jp":true,"yachiyo.ibaraki.jp":true,"yamagata.ibaraki.jp":true,"yawara.ibaraki.jp":true,"yuki.ibaraki.jp":true,"anamizu.ishikawa.jp":true,"hakui.ishikawa.jp":true,"hakusan.ishikawa.jp":true,"kaga.ishikawa.jp":true,"kahoku.ishikawa.jp":true,"kanazawa.ishikawa.jp":true,"kawakita.ishikawa.jp":true,"komatsu.ishikawa.jp":true,"nakanoto.ishikawa.jp":true,"nanao.ishikawa.jp":true,"nomi.ishikawa.jp":true,"nonoichi.ishikawa.jp":true,"noto.ishikawa.jp":true,"shika.ishikawa.jp":true,"suzu.ishikawa.jp":true,"tsubata.ishikawa.jp":true,"tsurugi.ishikawa.jp":true,"uchinada.ishikawa.jp":true,"wajima.ishikawa.jp":true,"fudai.iwate.jp":true,"fujisawa.iwate.jp":true,"hanamaki.iwate.jp":true,"hiraizumi.iwate.jp":true,"hirono.iwate.jp":true,"ichinohe.iwate.jp":true,"ichinoseki.iwate.jp":true,"iwaizumi.iwate.jp":true,"iwate.iwate.jp":true,"joboji.iwate.jp":true,"kamaishi.iwate.jp":true,"kanegasaki.iwate.jp":true,"karumai.iwate.jp":true,"kawai.iwate.jp":true,"kitakami.iwate.jp":true,"kuji.iwate.jp":true,"kunohe.iwate.jp":true,"kuzumaki.iwate.jp":true,"miyako.iwate.jp":true,"mizusawa.iwate.jp":true,"morioka.iwate.jp":true,"ninohe.iwate.jp":true,"noda.iwate.jp":true,"ofunato.iwate.jp":true,"oshu.iwate.jp":true,"otsuchi.iwate.jp":true,"rikuzentakata.iwate.jp":true,"shiwa.iwate.jp":true,"shizukuishi.iwate.jp":true,"sumita.iwate.jp":true,"tanohata.iwate.jp":true,"tono.iwate.jp":true,"yahaba.iwate.jp":true,"yamada.iwate.jp":true,"ayagawa.kagawa.jp":true,"higashikagawa.kagawa.jp":true,"kanonji.kagawa.jp":true,"kotohira.kagawa.jp":true,"manno.kagawa.jp":true,"marugame.kagawa.jp":true,"mitoyo.kagawa.jp":true,"naoshima.kagawa.jp":true,"sanuki.kagawa.jp":true,"tadotsu.kagawa.jp":true,"takamatsu.kagawa.jp":true,"tonosho.kagawa.jp":true,"uchinomi.kagawa.jp":true,"utazu.kagawa.jp":true,"zentsuji.kagawa.jp":true,"akune.kagoshima.jp":true,"amami.kagoshima.jp":true,"hioki.kagoshima.jp":true,"isa.kagoshima.jp":true,"isen.kagoshima.jp":true,"izumi.kagoshima.jp":true,"kagoshima.kagoshima.jp":true,"kanoya.kagoshima.jp":true,"kawanabe.kagoshima.jp":true,"kinko.kagoshima.jp":true,"kouyama.kagoshima.jp":true,"makurazaki.kagoshima.jp":true,"matsumoto.kagoshima.jp":true,"minamitane.kagoshima.jp":true,"nakatane.kagoshima.jp":true,"nishinoomote.kagoshima.jp":true,"satsumasendai.kagoshima.jp":true,"soo.kagoshima.jp":true,"tarumizu.kagoshima.jp":true,"yusui.kagoshima.jp":true,"aikawa.kanagawa.jp":true,"atsugi.kanagawa.jp":true,"ayase.kanagawa.jp":true,"chigasaki.kanagawa.jp":true,"ebina.kanagawa.jp":true,"fujisawa.kanagawa.jp":true,"hadano.kanagawa.jp":true,"hakone.kanagawa.jp":true,"hiratsuka.kanagawa.jp":true,"isehara.kanagawa.jp":true,"kaisei.kanagawa.jp":true,"kamakura.kanagawa.jp":true,"kiyokawa.kanagawa.jp":true,"matsuda.kanagawa.jp":true,"minamiashigara.kanagawa.jp":true,"miura.kanagawa.jp":true,"nakai.kanagawa.jp":true,"ninomiya.kanagawa.jp":true,"odawara.kanagawa.jp":true,"oi.kanagawa.jp":true,"oiso.kanagawa.jp":true,"sagamihara.kanagawa.jp":true,"samukawa.kanagawa.jp":true,"tsukui.kanagawa.jp":true,"yamakita.kanagawa.jp":true,"yamato.kanagawa.jp":true,"yokosuka.kanagawa.jp":true,"yugawara.kanagawa.jp":true,"zama.kanagawa.jp":true,"zushi.kanagawa.jp":true,"aki.kochi.jp":true,"geisei.kochi.jp":true,"hidaka.kochi.jp":true,"higashitsuno.kochi.jp":true,"ino.kochi.jp":true,"kagami.kochi.jp":true,"kami.kochi.jp":true,"kitagawa.kochi.jp":true,"kochi.kochi.jp":true,"mihara.kochi.jp":true,"motoyama.kochi.jp":true,"muroto.kochi.jp":true,"nahari.kochi.jp":true,"nakamura.kochi.jp":true,"nankoku.kochi.jp":true,"nishitosa.kochi.jp":true,"niyodogawa.kochi.jp":true,"ochi.kochi.jp":true,"okawa.kochi.jp":true,"otoyo.kochi.jp":true,"otsuki.kochi.jp":true,"sakawa.kochi.jp":true,"sukumo.kochi.jp":true,"susaki.kochi.jp":true,"tosa.kochi.jp":true,"tosashimizu.kochi.jp":true,"toyo.kochi.jp":true,"tsuno.kochi.jp":true,"umaji.kochi.jp":true,"yasuda.kochi.jp":true,"yusuhara.kochi.jp":true,"amakusa.kumamoto.jp":true,"arao.kumamoto.jp":true,"aso.kumamoto.jp":true,"choyo.kumamoto.jp":true,"gyokuto.kumamoto.jp":true,"kamiamakusa.kumamoto.jp":true,"kikuchi.kumamoto.jp":true,"kumamoto.kumamoto.jp":true,"mashiki.kumamoto.jp":true,"mifune.kumamoto.jp":true,"minamata.kumamoto.jp":true,"minamioguni.kumamoto.jp":true,"nagasu.kumamoto.jp":true,"nishihara.kumamoto.jp":true,"oguni.kumamoto.jp":true,"ozu.kumamoto.jp":true,"sumoto.kumamoto.jp":true,"takamori.kumamoto.jp":true,"uki.kumamoto.jp":true,"uto.kumamoto.jp":true,"yamaga.kumamoto.jp":true,"yamato.kumamoto.jp":true,"yatsushiro.kumamoto.jp":true,"ayabe.kyoto.jp":true,"fukuchiyama.kyoto.jp":true,"higashiyama.kyoto.jp":true,"ide.kyoto.jp":true,"ine.kyoto.jp":true,"joyo.kyoto.jp":true,"kameoka.kyoto.jp":true,"kamo.kyoto.jp":true,"kita.kyoto.jp":true,"kizu.kyoto.jp":true,"kumiyama.kyoto.jp":true,"kyotamba.kyoto.jp":true,"kyotanabe.kyoto.jp":true,"kyotango.kyoto.jp":true,"maizuru.kyoto.jp":true,"minami.kyoto.jp":true,"minamiyamashiro.kyoto.jp":true,"miyazu.kyoto.jp":true,"muko.kyoto.jp":true,"nagaokakyo.kyoto.jp":true,"nakagyo.kyoto.jp":true,"nantan.kyoto.jp":true,"oyamazaki.kyoto.jp":true,"sakyo.kyoto.jp":true,"seika.kyoto.jp":true,"tanabe.kyoto.jp":true,"uji.kyoto.jp":true,"ujitawara.kyoto.jp":true,"wazuka.kyoto.jp":true,"yamashina.kyoto.jp":true,"yawata.kyoto.jp":true,"asahi.mie.jp":true,"inabe.mie.jp":true,"ise.mie.jp":true,"kameyama.mie.jp":true,"kawagoe.mie.jp":true,"kiho.mie.jp":true,"kisosaki.mie.jp":true,"kiwa.mie.jp":true,"komono.mie.jp":true,"kumano.mie.jp":true,"kuwana.mie.jp":true,"matsusaka.mie.jp":true,"meiwa.mie.jp":true,"mihama.mie.jp":true,"minamiise.mie.jp":true,"misugi.mie.jp":true,"miyama.mie.jp":true,"nabari.mie.jp":true,"shima.mie.jp":true,"suzuka.mie.jp":true,"tado.mie.jp":true,"taiki.mie.jp":true,"taki.mie.jp":true,"tamaki.mie.jp":true,"toba.mie.jp":true,"tsu.mie.jp":true,"udono.mie.jp":true,"ureshino.mie.jp":true,"watarai.mie.jp":true,"yokkaichi.mie.jp":true,"furukawa.miyagi.jp":true,"higashimatsushima.miyagi.jp":true,"ishinomaki.miyagi.jp":true,"iwanuma.miyagi.jp":true,"kakuda.miyagi.jp":true,"kami.miyagi.jp":true,"kawasaki.miyagi.jp":true,"marumori.miyagi.jp":true,"matsushima.miyagi.jp":true,"minamisanriku.miyagi.jp":true,"misato.miyagi.jp":true,"murata.miyagi.jp":true,"natori.miyagi.jp":true,"ogawara.miyagi.jp":true,"ohira.miyagi.jp":true,"onagawa.miyagi.jp":true,"osaki.miyagi.jp":true,"rifu.miyagi.jp":true,"semine.miyagi.jp":true,"shibata.miyagi.jp":true,"shichikashuku.miyagi.jp":true,"shikama.miyagi.jp":true,"shiogama.miyagi.jp":true,"shiroishi.miyagi.jp":true,"tagajo.miyagi.jp":true,"taiwa.miyagi.jp":true,"tome.miyagi.jp":true,"tomiya.miyagi.jp":true,"wakuya.miyagi.jp":true,"watari.miyagi.jp":true,"yamamoto.miyagi.jp":true,"zao.miyagi.jp":true,"aya.miyazaki.jp":true,"ebino.miyazaki.jp":true,"gokase.miyazaki.jp":true,"hyuga.miyazaki.jp":true,"kadogawa.miyazaki.jp":true,"kawaminami.miyazaki.jp":true,"kijo.miyazaki.jp":true,"kitagawa.miyazaki.jp":true,"kitakata.miyazaki.jp":true,"kitaura.miyazaki.jp":true,"kobayashi.miyazaki.jp":true,"kunitomi.miyazaki.jp":true,"kushima.miyazaki.jp":true,"mimata.miyazaki.jp":true,"miyakonojo.miyazaki.jp":true,"miyazaki.miyazaki.jp":true,"morotsuka.miyazaki.jp":true,"nichinan.miyazaki.jp":true,"nishimera.miyazaki.jp":true,"nobeoka.miyazaki.jp":true,"saito.miyazaki.jp":true,"shiiba.miyazaki.jp":true,"shintomi.miyazaki.jp":true,"takaharu.miyazaki.jp":true,"takanabe.miyazaki.jp":true,"takazaki.miyazaki.jp":true,"tsuno.miyazaki.jp":true,"achi.nagano.jp":true,"agematsu.nagano.jp":true,"anan.nagano.jp":true,"aoki.nagano.jp":true,"asahi.nagano.jp":true,"azumino.nagano.jp":true,"chikuhoku.nagano.jp":true,"chikuma.nagano.jp":true,"chino.nagano.jp":true,"fujimi.nagano.jp":true,"hakuba.nagano.jp":true,"hara.nagano.jp":true,"hiraya.nagano.jp":true,"iida.nagano.jp":true,"iijima.nagano.jp":true,"iiyama.nagano.jp":true,"iizuna.nagano.jp":true,"ikeda.nagano.jp":true,"ikusaka.nagano.jp":true,"ina.nagano.jp":true,"karuizawa.nagano.jp":true,"kawakami.nagano.jp":true,"kiso.nagano.jp":true,"kisofukushima.nagano.jp":true,"kitaaiki.nagano.jp":true,"komagane.nagano.jp":true,"komoro.nagano.jp":true,"matsukawa.nagano.jp":true,"matsumoto.nagano.jp":true,"miasa.nagano.jp":true,"minamiaiki.nagano.jp":true,"minamimaki.nagano.jp":true,"minamiminowa.nagano.jp":true,"minowa.nagano.jp":true,"miyada.nagano.jp":true,"miyota.nagano.jp":true,"mochizuki.nagano.jp":true,"nagano.nagano.jp":true,"nagawa.nagano.jp":true,"nagiso.nagano.jp":true,"nakagawa.nagano.jp":true,"nakano.nagano.jp":true,"nozawaonsen.nagano.jp":true,"obuse.nagano.jp":true,"ogawa.nagano.jp":true,"okaya.nagano.jp":true,"omachi.nagano.jp":true,"omi.nagano.jp":true,"ookuwa.nagano.jp":true,"ooshika.nagano.jp":true,"otaki.nagano.jp":true,"otari.nagano.jp":true,"sakae.nagano.jp":true,"sakaki.nagano.jp":true,"saku.nagano.jp":true,"sakuho.nagano.jp":true,"shimosuwa.nagano.jp":true,"shinanomachi.nagano.jp":true,"shiojiri.nagano.jp":true,"suwa.nagano.jp":true,"suzaka.nagano.jp":true,"takagi.nagano.jp":true,"takamori.nagano.jp":true,"takayama.nagano.jp":true,"tateshina.nagano.jp":true,"tatsuno.nagano.jp":true,"togakushi.nagano.jp":true,"togura.nagano.jp":true,"tomi.nagano.jp":true,"ueda.nagano.jp":true,"wada.nagano.jp":true,"yamagata.nagano.jp":true,"yamanouchi.nagano.jp":true,"yasaka.nagano.jp":true,"yasuoka.nagano.jp":true,"chijiwa.nagasaki.jp":true,"futsu.nagasaki.jp":true,"goto.nagasaki.jp":true,"hasami.nagasaki.jp":true,"hirado.nagasaki.jp":true,"iki.nagasaki.jp":true,"isahaya.nagasaki.jp":true,"kawatana.nagasaki.jp":true,"kuchinotsu.nagasaki.jp":true,"matsuura.nagasaki.jp":true,"nagasaki.nagasaki.jp":true,"obama.nagasaki.jp":true,"omura.nagasaki.jp":true,"oseto.nagasaki.jp":true,"saikai.nagasaki.jp":true,"sasebo.nagasaki.jp":true,"seihi.nagasaki.jp":true,"shimabara.nagasaki.jp":true,"shinkamigoto.nagasaki.jp":true,"togitsu.nagasaki.jp":true,"tsushima.nagasaki.jp":true,"unzen.nagasaki.jp":true,"ando.nara.jp":true,"gose.nara.jp":true,"heguri.nara.jp":true,"higashiyoshino.nara.jp":true,"ikaruga.nara.jp":true,"ikoma.nara.jp":true,"kamikitayama.nara.jp":true,"kanmaki.nara.jp":true,"kashiba.nara.jp":true,"kashihara.nara.jp":true,"katsuragi.nara.jp":true,"kawai.nara.jp":true,"kawakami.nara.jp":true,"kawanishi.nara.jp":true,"koryo.nara.jp":true,"kurotaki.nara.jp":true,"mitsue.nara.jp":true,"miyake.nara.jp":true,"nara.nara.jp":true,"nosegawa.nara.jp":true,"oji.nara.jp":true,"ouda.nara.jp":true,"oyodo.nara.jp":true,"sakurai.nara.jp":true,"sango.nara.jp":true,"shimoichi.nara.jp":true,"shimokitayama.nara.jp":true,"shinjo.nara.jp":true,"soni.nara.jp":true,"takatori.nara.jp":true,"tawaramoto.nara.jp":true,"tenkawa.nara.jp":true,"tenri.nara.jp":true,"uda.nara.jp":true,"yamatokoriyama.nara.jp":true,"yamatotakada.nara.jp":true,"yamazoe.nara.jp":true,"yoshino.nara.jp":true,"aga.niigata.jp":true,"agano.niigata.jp":true,"gosen.niigata.jp":true,"itoigawa.niigata.jp":true,"izumozaki.niigata.jp":true,"joetsu.niigata.jp":true,"kamo.niigata.jp":true,"kariwa.niigata.jp":true,"kashiwazaki.niigata.jp":true,"minamiuonuma.niigata.jp":true,"mitsuke.niigata.jp":true,"muika.niigata.jp":true,"murakami.niigata.jp":true,"myoko.niigata.jp":true,"nagaoka.niigata.jp":true,"niigata.niigata.jp":true,"ojiya.niigata.jp":true,"omi.niigata.jp":true,"sado.niigata.jp":true,"sanjo.niigata.jp":true,"seiro.niigata.jp":true,"seirou.niigata.jp":true,"sekikawa.niigata.jp":true,"shibata.niigata.jp":true,"tagami.niigata.jp":true,"tainai.niigata.jp":true,"tochio.niigata.jp":true,"tokamachi.niigata.jp":true,"tsubame.niigata.jp":true,"tsunan.niigata.jp":true,"uonuma.niigata.jp":true,"yahiko.niigata.jp":true,"yoita.niigata.jp":true,"yuzawa.niigata.jp":true,"beppu.oita.jp":true,"bungoono.oita.jp":true,"bungotakada.oita.jp":true,"hasama.oita.jp":true,"hiji.oita.jp":true,"himeshima.oita.jp":true,"hita.oita.jp":true,"kamitsue.oita.jp":true,"kokonoe.oita.jp":true,"kuju.oita.jp":true,"kunisaki.oita.jp":true,"kusu.oita.jp":true,"oita.oita.jp":true,"saiki.oita.jp":true,"taketa.oita.jp":true,"tsukumi.oita.jp":true,"usa.oita.jp":true,"usuki.oita.jp":true,"yufu.oita.jp":true,"akaiwa.okayama.jp":true,"asakuchi.okayama.jp":true,"bizen.okayama.jp":true,"hayashima.okayama.jp":true,"ibara.okayama.jp":true,"kagamino.okayama.jp":true,"kasaoka.okayama.jp":true,"kibichuo.okayama.jp":true,"kumenan.okayama.jp":true,"kurashiki.okayama.jp":true,"maniwa.okayama.jp":true,"misaki.okayama.jp":true,"nagi.okayama.jp":true,"niimi.okayama.jp":true,"nishiawakura.okayama.jp":true,"okayama.okayama.jp":true,"satosho.okayama.jp":true,"setouchi.okayama.jp":true,"shinjo.okayama.jp":true,"shoo.okayama.jp":true,"soja.okayama.jp":true,"takahashi.okayama.jp":true,"tamano.okayama.jp":true,"tsuyama.okayama.jp":true,"wake.okayama.jp":true,"yakage.okayama.jp":true,"aguni.okinawa.jp":true,"ginowan.okinawa.jp":true,"ginoza.okinawa.jp":true,"gushikami.okinawa.jp":true,"haebaru.okinawa.jp":true,"higashi.okinawa.jp":true,"hirara.okinawa.jp":true,"iheya.okinawa.jp":true,"ishigaki.okinawa.jp":true,"ishikawa.okinawa.jp":true,"itoman.okinawa.jp":true,"izena.okinawa.jp":true,"kadena.okinawa.jp":true,"kin.okinawa.jp":true,"kitadaito.okinawa.jp":true,"kitanakagusuku.okinawa.jp":true,"kumejima.okinawa.jp":true,"kunigami.okinawa.jp":true,"minamidaito.okinawa.jp":true,"motobu.okinawa.jp":true,"nago.okinawa.jp":true,"naha.okinawa.jp":true,"nakagusuku.okinawa.jp":true,"nakijin.okinawa.jp":true,"nanjo.okinawa.jp":true,"nishihara.okinawa.jp":true,"ogimi.okinawa.jp":true,"okinawa.okinawa.jp":true,"onna.okinawa.jp":true,"shimoji.okinawa.jp":true,"taketomi.okinawa.jp":true,"tarama.okinawa.jp":true,"tokashiki.okinawa.jp":true,"tomigusuku.okinawa.jp":true,"tonaki.okinawa.jp":true,"urasoe.okinawa.jp":true,"uruma.okinawa.jp":true,"yaese.okinawa.jp":true,"yomitan.okinawa.jp":true,"yonabaru.okinawa.jp":true,"yonaguni.okinawa.jp":true,"zamami.okinawa.jp":true,"abeno.osaka.jp":true,"chihayaakasaka.osaka.jp":true,"chuo.osaka.jp":true,"daito.osaka.jp":true,"fujiidera.osaka.jp":true,"habikino.osaka.jp":true,"hannan.osaka.jp":true,"higashiosaka.osaka.jp":true,"higashisumiyoshi.osaka.jp":true,"higashiyodogawa.osaka.jp":true,"hirakata.osaka.jp":true,"ibaraki.osaka.jp":true,"ikeda.osaka.jp":true,"izumi.osaka.jp":true,"izumiotsu.osaka.jp":true,"izumisano.osaka.jp":true,"kadoma.osaka.jp":true,"kaizuka.osaka.jp":true,"kanan.osaka.jp":true,"kashiwara.osaka.jp":true,"katano.osaka.jp":true,"kawachinagano.osaka.jp":true,"kishiwada.osaka.jp":true,"kita.osaka.jp":true,"kumatori.osaka.jp":true,"matsubara.osaka.jp":true,"minato.osaka.jp":true,"minoh.osaka.jp":true,"misaki.osaka.jp":true,"moriguchi.osaka.jp":true,"neyagawa.osaka.jp":true,"nishi.osaka.jp":true,"nose.osaka.jp":true,"osakasayama.osaka.jp":true,"sakai.osaka.jp":true,"sayama.osaka.jp":true,"sennan.osaka.jp":true,"settsu.osaka.jp":true,"shijonawate.osaka.jp":true,"shimamoto.osaka.jp":true,"suita.osaka.jp":true,"tadaoka.osaka.jp":true,"taishi.osaka.jp":true,"tajiri.osaka.jp":true,"takaishi.osaka.jp":true,"takatsuki.osaka.jp":true,"tondabayashi.osaka.jp":true,"toyonaka.osaka.jp":true,"toyono.osaka.jp":true,"yao.osaka.jp":true,"ariake.saga.jp":true,"arita.saga.jp":true,"fukudomi.saga.jp":true,"genkai.saga.jp":true,"hamatama.saga.jp":true,"hizen.saga.jp":true,"imari.saga.jp":true,"kamimine.saga.jp":true,"kanzaki.saga.jp":true,"karatsu.saga.jp":true,"kashima.saga.jp":true,"kitagata.saga.jp":true,"kitahata.saga.jp":true,"kiyama.saga.jp":true,"kouhoku.saga.jp":true,"kyuragi.saga.jp":true,"nishiarita.saga.jp":true,"ogi.saga.jp":true,"omachi.saga.jp":true,"ouchi.saga.jp":true,"saga.saga.jp":true,"shiroishi.saga.jp":true,"taku.saga.jp":true,"tara.saga.jp":true,"tosu.saga.jp":true,"yoshinogari.saga.jp":true,"arakawa.saitama.jp":true,"asaka.saitama.jp":true,"chichibu.saitama.jp":true,"fujimi.saitama.jp":true,"fujimino.saitama.jp":true,"fukaya.saitama.jp":true,"hanno.saitama.jp":true,"hanyu.saitama.jp":true,"hasuda.saitama.jp":true,"hatogaya.saitama.jp":true,"hatoyama.saitama.jp":true,"hidaka.saitama.jp":true,"higashichichibu.saitama.jp":true,"higashimatsuyama.saitama.jp":true,"honjo.saitama.jp":true,"ina.saitama.jp":true,"iruma.saitama.jp":true,"iwatsuki.saitama.jp":true,"kamiizumi.saitama.jp":true,"kamikawa.saitama.jp":true,"kamisato.saitama.jp":true,"kasukabe.saitama.jp":true,"kawagoe.saitama.jp":true,"kawaguchi.saitama.jp":true,"kawajima.saitama.jp":true,"kazo.saitama.jp":true,"kitamoto.saitama.jp":true,"koshigaya.saitama.jp":true,"kounosu.saitama.jp":true,"kuki.saitama.jp":true,"kumagaya.saitama.jp":true,"matsubushi.saitama.jp":true,"minano.saitama.jp":true,"misato.saitama.jp":true,"miyashiro.saitama.jp":true,"miyoshi.saitama.jp":true,"moroyama.saitama.jp":true,"nagatoro.saitama.jp":true,"namegawa.saitama.jp":true,"niiza.saitama.jp":true,"ogano.saitama.jp":true,"ogawa.saitama.jp":true,"ogose.saitama.jp":true,"okegawa.saitama.jp":true,"omiya.saitama.jp":true,"otaki.saitama.jp":true,"ranzan.saitama.jp":true,"ryokami.saitama.jp":true,"saitama.saitama.jp":true,"sakado.saitama.jp":true,"satte.saitama.jp":true,"sayama.saitama.jp":true,"shiki.saitama.jp":true,"shiraoka.saitama.jp":true,"soka.saitama.jp":true,"sugito.saitama.jp":true,"toda.saitama.jp":true,"tokigawa.saitama.jp":true,"tokorozawa.saitama.jp":true,"tsurugashima.saitama.jp":true,"urawa.saitama.jp":true,"warabi.saitama.jp":true,"yashio.saitama.jp":true,"yokoze.saitama.jp":true,"yono.saitama.jp":true,"yorii.saitama.jp":true,"yoshida.saitama.jp":true,"yoshikawa.saitama.jp":true,"yoshimi.saitama.jp":true,"aisho.shiga.jp":true,"gamo.shiga.jp":true,"higashiomi.shiga.jp":true,"hikone.shiga.jp":true,"koka.shiga.jp":true,"konan.shiga.jp":true,"kosei.shiga.jp":true,"koto.shiga.jp":true,"kusatsu.shiga.jp":true,"maibara.shiga.jp":true,"moriyama.shiga.jp":true,"nagahama.shiga.jp":true,"nishiazai.shiga.jp":true,"notogawa.shiga.jp":true,"omihachiman.shiga.jp":true,"otsu.shiga.jp":true,"ritto.shiga.jp":true,"ryuoh.shiga.jp":true,"takashima.shiga.jp":true,"takatsuki.shiga.jp":true,"torahime.shiga.jp":true,"toyosato.shiga.jp":true,"yasu.shiga.jp":true,"akagi.shimane.jp":true,"ama.shimane.jp":true,"gotsu.shimane.jp":true,"hamada.shimane.jp":true,"higashiizumo.shimane.jp":true,"hikawa.shimane.jp":true,"hikimi.shimane.jp":true,"izumo.shimane.jp":true,"kakinoki.shimane.jp":true,"masuda.shimane.jp":true,"matsue.shimane.jp":true,"misato.shimane.jp":true,"nishinoshima.shimane.jp":true,"ohda.shimane.jp":true,"okinoshima.shimane.jp":true,"okuizumo.shimane.jp":true,"shimane.shimane.jp":true,"tamayu.shimane.jp":true,"tsuwano.shimane.jp":true,"unnan.shimane.jp":true,"yakumo.shimane.jp":true,"yasugi.shimane.jp":true,"yatsuka.shimane.jp":true,"arai.shizuoka.jp":true,"atami.shizuoka.jp":true,"fuji.shizuoka.jp":true,"fujieda.shizuoka.jp":true,"fujikawa.shizuoka.jp":true,"fujinomiya.shizuoka.jp":true,"fukuroi.shizuoka.jp":true,"gotemba.shizuoka.jp":true,"haibara.shizuoka.jp":true,"hamamatsu.shizuoka.jp":true,"higashiizu.shizuoka.jp":true,"ito.shizuoka.jp":true,"iwata.shizuoka.jp":true,"izu.shizuoka.jp":true,"izunokuni.shizuoka.jp":true,"kakegawa.shizuoka.jp":true,"kannami.shizuoka.jp":true,"kawanehon.shizuoka.jp":true,"kawazu.shizuoka.jp":true,"kikugawa.shizuoka.jp":true,"kosai.shizuoka.jp":true,"makinohara.shizuoka.jp":true,"matsuzaki.shizuoka.jp":true,"minamiizu.shizuoka.jp":true,"mishima.shizuoka.jp":true,"morimachi.shizuoka.jp":true,"nishiizu.shizuoka.jp":true,"numazu.shizuoka.jp":true,"omaezaki.shizuoka.jp":true,"shimada.shizuoka.jp":true,"shimizu.shizuoka.jp":true,"shimoda.shizuoka.jp":true,"shizuoka.shizuoka.jp":true,"susono.shizuoka.jp":true,"yaizu.shizuoka.jp":true,"yoshida.shizuoka.jp":true,"ashikaga.tochigi.jp":true,"bato.tochigi.jp":true,"haga.tochigi.jp":true,"ichikai.tochigi.jp":true,"iwafune.tochigi.jp":true,"kaminokawa.tochigi.jp":true,"kanuma.tochigi.jp":true,"karasuyama.tochigi.jp":true,"kuroiso.tochigi.jp":true,"mashiko.tochigi.jp":true,"mibu.tochigi.jp":true,"moka.tochigi.jp":true,"motegi.tochigi.jp":true,"nasu.tochigi.jp":true,"nasushiobara.tochigi.jp":true,"nikko.tochigi.jp":true,"nishikata.tochigi.jp":true,"nogi.tochigi.jp":true,"ohira.tochigi.jp":true,"ohtawara.tochigi.jp":true,"oyama.tochigi.jp":true,"sakura.tochigi.jp":true,"sano.tochigi.jp":true,"shimotsuke.tochigi.jp":true,"shioya.tochigi.jp":true,"takanezawa.tochigi.jp":true,"tochigi.tochigi.jp":true,"tsuga.tochigi.jp":true,"ujiie.tochigi.jp":true,"utsunomiya.tochigi.jp":true,"yaita.tochigi.jp":true,"aizumi.tokushima.jp":true,"anan.tokushima.jp":true,"ichiba.tokushima.jp":true,"itano.tokushima.jp":true,"kainan.tokushima.jp":true,"komatsushima.tokushima.jp":true,"matsushige.tokushima.jp":true,"mima.tokushima.jp":true,"minami.tokushima.jp":true,"miyoshi.tokushima.jp":true,"mugi.tokushima.jp":true,"nakagawa.tokushima.jp":true,"naruto.tokushima.jp":true,"sanagochi.tokushima.jp":true,"shishikui.tokushima.jp":true,"tokushima.tokushima.jp":true,"wajiki.tokushima.jp":true,"adachi.tokyo.jp":true,"akiruno.tokyo.jp":true,"akishima.tokyo.jp":true,"aogashima.tokyo.jp":true,"arakawa.tokyo.jp":true,"bunkyo.tokyo.jp":true,"chiyoda.tokyo.jp":true,"chofu.tokyo.jp":true,"chuo.tokyo.jp":true,"edogawa.tokyo.jp":true,"fuchu.tokyo.jp":true,"fussa.tokyo.jp":true,"hachijo.tokyo.jp":true,"hachioji.tokyo.jp":true,"hamura.tokyo.jp":true,"higashikurume.tokyo.jp":true,"higashimurayama.tokyo.jp":true,"higashiyamato.tokyo.jp":true,"hino.tokyo.jp":true,"hinode.tokyo.jp":true,"hinohara.tokyo.jp":true,"inagi.tokyo.jp":true,"itabashi.tokyo.jp":true,"katsushika.tokyo.jp":true,"kita.tokyo.jp":true,"kiyose.tokyo.jp":true,"kodaira.tokyo.jp":true,"koganei.tokyo.jp":true,"kokubunji.tokyo.jp":true,"komae.tokyo.jp":true,"koto.tokyo.jp":true,"kouzushima.tokyo.jp":true,"kunitachi.tokyo.jp":true,"machida.tokyo.jp":true,"meguro.tokyo.jp":true,"minato.tokyo.jp":true,"mitaka.tokyo.jp":true,"mizuho.tokyo.jp":true,"musashimurayama.tokyo.jp":true,"musashino.tokyo.jp":true,"nakano.tokyo.jp":true,"nerima.tokyo.jp":true,"ogasawara.tokyo.jp":true,"okutama.tokyo.jp":true,"ome.tokyo.jp":true,"oshima.tokyo.jp":true,"ota.tokyo.jp":true,"setagaya.tokyo.jp":true,"shibuya.tokyo.jp":true,"shinagawa.tokyo.jp":true,"shinjuku.tokyo.jp":true,"suginami.tokyo.jp":true,"sumida.tokyo.jp":true,"tachikawa.tokyo.jp":true,"taito.tokyo.jp":true,"tama.tokyo.jp":true,"toshima.tokyo.jp":true,"chizu.tottori.jp":true,"hino.tottori.jp":true,"kawahara.tottori.jp":true,"koge.tottori.jp":true,"kotoura.tottori.jp":true,"misasa.tottori.jp":true,"nanbu.tottori.jp":true,"nichinan.tottori.jp":true,"sakaiminato.tottori.jp":true,"tottori.tottori.jp":true,"wakasa.tottori.jp":true,"yazu.tottori.jp":true,"yonago.tottori.jp":true,"asahi.toyama.jp":true,"fuchu.toyama.jp":true,"fukumitsu.toyama.jp":true,"funahashi.toyama.jp":true,"himi.toyama.jp":true,"imizu.toyama.jp":true,"inami.toyama.jp":true,"johana.toyama.jp":true,"kamiichi.toyama.jp":true,"kurobe.toyama.jp":true,"nakaniikawa.toyama.jp":true,"namerikawa.toyama.jp":true,"nanto.toyama.jp":true,"nyuzen.toyama.jp":true,"oyabe.toyama.jp":true,"taira.toyama.jp":true,"takaoka.toyama.jp":true,"tateyama.toyama.jp":true,"toga.toyama.jp":true,"tonami.toyama.jp":true,"toyama.toyama.jp":true,"unazuki.toyama.jp":true,"uozu.toyama.jp":true,"yamada.toyama.jp":true,"arida.wakayama.jp":true,"aridagawa.wakayama.jp":true,"gobo.wakayama.jp":true,"hashimoto.wakayama.jp":true,"hidaka.wakayama.jp":true,"hirogawa.wakayama.jp":true,"inami.wakayama.jp":true,"iwade.wakayama.jp":true,"kainan.wakayama.jp":true,"kamitonda.wakayama.jp":true,"katsuragi.wakayama.jp":true,"kimino.wakayama.jp":true,"kinokawa.wakayama.jp":true,"kitayama.wakayama.jp":true,"koya.wakayama.jp":true,"koza.wakayama.jp":true,"kozagawa.wakayama.jp":true,"kudoyama.wakayama.jp":true,"kushimoto.wakayama.jp":true,"mihama.wakayama.jp":true,"misato.wakayama.jp":true,"nachikatsuura.wakayama.jp":true,"shingu.wakayama.jp":true,"shirahama.wakayama.jp":true,"taiji.wakayama.jp":true,"tanabe.wakayama.jp":true,"wakayama.wakayama.jp":true,"yuasa.wakayama.jp":true,"yura.wakayama.jp":true,"asahi.yamagata.jp":true,"funagata.yamagata.jp":true,"higashine.yamagata.jp":true,"iide.yamagata.jp":true,"kahoku.yamagata.jp":true,"kaminoyama.yamagata.jp":true,"kaneyama.yamagata.jp":true,"kawanishi.yamagata.jp":true,"mamurogawa.yamagata.jp":true,"mikawa.yamagata.jp":true,"murayama.yamagata.jp":true,"nagai.yamagata.jp":true,"nakayama.yamagata.jp":true,"nanyo.yamagata.jp":true,"nishikawa.yamagata.jp":true,"obanazawa.yamagata.jp":true,"oe.yamagata.jp":true,"oguni.yamagata.jp":true,"ohkura.yamagata.jp":true,"oishida.yamagata.jp":true,"sagae.yamagata.jp":true,"sakata.yamagata.jp":true,"sakegawa.yamagata.jp":true,"shinjo.yamagata.jp":true,"shirataka.yamagata.jp":true,"shonai.yamagata.jp":true,"takahata.yamagata.jp":true,"tendo.yamagata.jp":true,"tozawa.yamagata.jp":true,"tsuruoka.yamagata.jp":true,"yamagata.yamagata.jp":true,"yamanobe.yamagata.jp":true,"yonezawa.yamagata.jp":true,"yuza.yamagata.jp":true,"abu.yamaguchi.jp":true,"hagi.yamaguchi.jp":true,"hikari.yamaguchi.jp":true,"hofu.yamaguchi.jp":true,"iwakuni.yamaguchi.jp":true,"kudamatsu.yamaguchi.jp":true,"mitou.yamaguchi.jp":true,"nagato.yamaguchi.jp":true,"oshima.yamaguchi.jp":true,"shimonoseki.yamaguchi.jp":true,"shunan.yamaguchi.jp":true,"tabuse.yamaguchi.jp":true,"tokuyama.yamaguchi.jp":true,"toyota.yamaguchi.jp":true,"ube.yamaguchi.jp":true,"yuu.yamaguchi.jp":true,"chuo.yamanashi.jp":true,"doshi.yamanashi.jp":true,"fuefuki.yamanashi.jp":true,"fujikawa.yamanashi.jp":true,"fujikawaguchiko.yamanashi.jp":true,"fujiyoshida.yamanashi.jp":true,"hayakawa.yamanashi.jp":true,"hokuto.yamanashi.jp":true,"ichikawamisato.yamanashi.jp":true,"kai.yamanashi.jp":true,"kofu.yamanashi.jp":true,"koshu.yamanashi.jp":true,"kosuge.yamanashi.jp":true,"minami-alps.yamanashi.jp":true,"minobu.yamanashi.jp":true,"nakamichi.yamanashi.jp":true,"nanbu.yamanashi.jp":true,"narusawa.yamanashi.jp":true,"nirasaki.yamanashi.jp":true,"nishikatsura.yamanashi.jp":true,"oshino.yamanashi.jp":true,"otsuki.yamanashi.jp":true,"showa.yamanashi.jp":true,"tabayama.yamanashi.jp":true,"tsuru.yamanashi.jp":true,"uenohara.yamanashi.jp":true,"yamanakako.yamanashi.jp":true,"yamanashi.yamanashi.jp":true,"ke":true,"ac.ke":true,"co.ke":true,"go.ke":true,"info.ke":true,"me.ke":true,"mobi.ke":true,"ne.ke":true,"or.ke":true,"sc.ke":true,"kg":true,"org.kg":true,"net.kg":true,"com.kg":true,"edu.kg":true,"gov.kg":true,"mil.kg":true,"*.kh":true,"ki":true,"edu.ki":true,"biz.ki":true,"net.ki":true,"org.ki":true,"gov.ki":true,"info.ki":true,"com.ki":true,"km":true,"org.km":true,"nom.km":true,"gov.km":true,"prd.km":true,"tm.km":true,"edu.km":true,"mil.km":true,"ass.km":true,"com.km":true,"coop.km":true,"asso.km":true,"presse.km":true,"medecin.km":true,"notaires.km":true,"pharmaciens.km":true,"veterinaire.km":true,"gouv.km":true,"kn":true,"net.kn":true,"org.kn":true,"edu.kn":true,"gov.kn":true,"kp":true,"com.kp":true,"edu.kp":true,"gov.kp":true,"org.kp":true,"rep.kp":true,"tra.kp":true,"kr":true,"ac.kr":true,"co.kr":true,"es.kr":true,"go.kr":true,"hs.kr":true,"kg.kr":true,"mil.kr":true,"ms.kr":true,"ne.kr":true,"or.kr":true,"pe.kr":true,"re.kr":true,"sc.kr":true,"busan.kr":true,"chungbuk.kr":true,"chungnam.kr":true,"daegu.kr":true,"daejeon.kr":true,"gangwon.kr":true,"gwangju.kr":true,"gyeongbuk.kr":true,"gyeonggi.kr":true,"gyeongnam.kr":true,"incheon.kr":true,"jeju.kr":true,"jeonbuk.kr":true,"jeonnam.kr":true,"seoul.kr":true,"ulsan.kr":true,"*.kw":true,"ky":true,"edu.ky":true,"gov.ky":true,"com.ky":true,"org.ky":true,"net.ky":true,"kz":true,"org.kz":true,"edu.kz":true,"net.kz":true,"gov.kz":true,"mil.kz":true,"com.kz":true,"la":true,"int.la":true,"net.la":true,"info.la":true,"edu.la":true,"gov.la":true,"per.la":true,"com.la":true,"org.la":true,"lb":true,"com.lb":true,"edu.lb":true,"gov.lb":true,"net.lb":true,"org.lb":true,"lc":true,"com.lc":true,"net.lc":true,"co.lc":true,"org.lc":true,"edu.lc":true,"gov.lc":true,"li":true,"lk":true,"gov.lk":true,"sch.lk":true,"net.lk":true,"int.lk":true,"com.lk":true,"org.lk":true,"edu.lk":true,"ngo.lk":true,"soc.lk":true,"web.lk":true,"ltd.lk":true,"assn.lk":true,"grp.lk":true,"hotel.lk":true,"ac.lk":true,"lr":true,"com.lr":true,"edu.lr":true,"gov.lr":true,"org.lr":true,"net.lr":true,"ls":true,"co.ls":true,"org.ls":true,"lt":true,"gov.lt":true,"lu":true,"lv":true,"com.lv":true,"edu.lv":true,"gov.lv":true,"org.lv":true,"mil.lv":true,"id.lv":true,"net.lv":true,"asn.lv":true,"conf.lv":true,"ly":true,"com.ly":true,"net.ly":true,"gov.ly":true,"plc.ly":true,"edu.ly":true,"sch.ly":true,"med.ly":true,"org.ly":true,"id.ly":true,"ma":true,"co.ma":true,"net.ma":true,"gov.ma":true,"org.ma":true,"ac.ma":true,"press.ma":true,"mc":true,"tm.mc":true,"asso.mc":true,"md":true,"me":true,"co.me":true,"net.me":true,"org.me":true,"edu.me":true,"ac.me":true,"gov.me":true,"its.me":true,"priv.me":true,"mg":true,"org.mg":true,"nom.mg":true,"gov.mg":true,"prd.mg":true,"tm.mg":true,"edu.mg":true,"mil.mg":true,"com.mg":true,"co.mg":true,"mh":true,"mil":true,"mk":true,"com.mk":true,"org.mk":true,"net.mk":true,"edu.mk":true,"gov.mk":true,"inf.mk":true,"name.mk":true,"ml":true,"com.ml":true,"edu.ml":true,"gouv.ml":true,"gov.ml":true,"net.ml":true,"org.ml":true,"presse.ml":true,"*.mm":true,"mn":true,"gov.mn":true,"edu.mn":true,"org.mn":true,"mo":true,"com.mo":true,"net.mo":true,"org.mo":true,"edu.mo":true,"gov.mo":true,"mobi":true,"mp":true,"mq":true,"mr":true,"gov.mr":true,"ms":true,"com.ms":true,"edu.ms":true,"gov.ms":true,"net.ms":true,"org.ms":true,"mt":true,"com.mt":true,"edu.mt":true,"net.mt":true,"org.mt":true,"mu":true,"com.mu":true,"net.mu":true,"org.mu":true,"gov.mu":true,"ac.mu":true,"co.mu":true,"or.mu":true,"museum":true,"academy.museum":true,"agriculture.museum":true,"air.museum":true,"airguard.museum":true,"alabama.museum":true,"alaska.museum":true,"amber.museum":true,"ambulance.museum":true,"american.museum":true,"americana.museum":true,"americanantiques.museum":true,"americanart.museum":true,"amsterdam.museum":true,"and.museum":true,"annefrank.museum":true,"anthro.museum":true,"anthropology.museum":true,"antiques.museum":true,"aquarium.museum":true,"arboretum.museum":true,"archaeological.museum":true,"archaeology.museum":true,"architecture.museum":true,"art.museum":true,"artanddesign.museum":true,"artcenter.museum":true,"artdeco.museum":true,"arteducation.museum":true,"artgallery.museum":true,"arts.museum":true,"artsandcrafts.museum":true,"asmatart.museum":true,"assassination.museum":true,"assisi.museum":true,"association.museum":true,"astronomy.museum":true,"atlanta.museum":true,"austin.museum":true,"australia.museum":true,"automotive.museum":true,"aviation.museum":true,"axis.museum":true,"badajoz.museum":true,"baghdad.museum":true,"bahn.museum":true,"bale.museum":true,"baltimore.museum":true,"barcelona.museum":true,"baseball.museum":true,"basel.museum":true,"baths.museum":true,"bauern.museum":true,"beauxarts.museum":true,"beeldengeluid.museum":true,"bellevue.museum":true,"bergbau.museum":true,"berkeley.museum":true,"berlin.museum":true,"bern.museum":true,"bible.museum":true,"bilbao.museum":true,"bill.museum":true,"birdart.museum":true,"birthplace.museum":true,"bonn.museum":true,"boston.museum":true,"botanical.museum":true,"botanicalgarden.museum":true,"botanicgarden.museum":true,"botany.museum":true,"brandywinevalley.museum":true,"brasil.museum":true,"bristol.museum":true,"british.museum":true,"britishcolumbia.museum":true,"broadcast.museum":true,"brunel.museum":true,"brussel.museum":true,"brussels.museum":true,"bruxelles.museum":true,"building.museum":true,"burghof.museum":true,"bus.museum":true,"bushey.museum":true,"cadaques.museum":true,"california.museum":true,"cambridge.museum":true,"can.museum":true,"canada.museum":true,"capebreton.museum":true,"carrier.museum":true,"cartoonart.museum":true,"casadelamoneda.museum":true,"castle.museum":true,"castres.museum":true,"celtic.museum":true,"center.museum":true,"chattanooga.museum":true,"cheltenham.museum":true,"chesapeakebay.museum":true,"chicago.museum":true,"children.museum":true,"childrens.museum":true,"childrensgarden.museum":true,"chiropractic.museum":true,"chocolate.museum":true,"christiansburg.museum":true,"cincinnati.museum":true,"cinema.museum":true,"circus.museum":true,"civilisation.museum":true,"civilization.museum":true,"civilwar.museum":true,"clinton.museum":true,"clock.museum":true,"coal.museum":true,"coastaldefence.museum":true,"cody.museum":true,"coldwar.museum":true,"collection.museum":true,"colonialwilliamsburg.museum":true,"coloradoplateau.museum":true,"columbia.museum":true,"columbus.museum":true,"communication.museum":true,"communications.museum":true,"community.museum":true,"computer.museum":true,"computerhistory.museum":true,"xn--comunicaes-v6a2o.museum":true,"contemporary.museum":true,"contemporaryart.museum":true,"convent.museum":true,"copenhagen.museum":true,"corporation.museum":true,"xn--correios-e-telecomunicaes-ghc29a.museum":true,"corvette.museum":true,"costume.museum":true,"countryestate.museum":true,"county.museum":true,"crafts.museum":true,"cranbrook.museum":true,"creation.museum":true,"cultural.museum":true,"culturalcenter.museum":true,"culture.museum":true,"cyber.museum":true,"cymru.museum":true,"dali.museum":true,"dallas.museum":true,"database.museum":true,"ddr.museum":true,"decorativearts.museum":true,"delaware.museum":true,"delmenhorst.museum":true,"denmark.museum":true,"depot.museum":true,"design.museum":true,"detroit.museum":true,"dinosaur.museum":true,"discovery.museum":true,"dolls.museum":true,"donostia.museum":true,"durham.museum":true,"eastafrica.museum":true,"eastcoast.museum":true,"education.museum":true,"educational.museum":true,"egyptian.museum":true,"eisenbahn.museum":true,"elburg.museum":true,"elvendrell.museum":true,"embroidery.museum":true,"encyclopedic.museum":true,"england.museum":true,"entomology.museum":true,"environment.museum":true,"environmentalconservation.museum":true,"epilepsy.museum":true,"essex.museum":true,"estate.museum":true,"ethnology.museum":true,"exeter.museum":true,"exhibition.museum":true,"family.museum":true,"farm.museum":true,"farmequipment.museum":true,"farmers.museum":true,"farmstead.museum":true,"field.museum":true,"figueres.museum":true,"filatelia.museum":true,"film.museum":true,"fineart.museum":true,"finearts.museum":true,"finland.museum":true,"flanders.museum":true,"florida.museum":true,"force.museum":true,"fortmissoula.museum":true,"fortworth.museum":true,"foundation.museum":true,"francaise.museum":true,"frankfurt.museum":true,"franziskaner.museum":true,"freemasonry.museum":true,"freiburg.museum":true,"fribourg.museum":true,"frog.museum":true,"fundacio.museum":true,"furniture.museum":true,"gallery.museum":true,"garden.museum":true,"gateway.museum":true,"geelvinck.museum":true,"gemological.museum":true,"geology.museum":true,"georgia.museum":true,"giessen.museum":true,"glas.museum":true,"glass.museum":true,"gorge.museum":true,"grandrapids.museum":true,"graz.museum":true,"guernsey.museum":true,"halloffame.museum":true,"hamburg.museum":true,"handson.museum":true,"harvestcelebration.museum":true,"hawaii.museum":true,"health.museum":true,"heimatunduhren.museum":true,"hellas.museum":true,"helsinki.museum":true,"hembygdsforbund.museum":true,"heritage.museum":true,"histoire.museum":true,"historical.museum":true,"historicalsociety.museum":true,"historichouses.museum":true,"historisch.museum":true,"historisches.museum":true,"history.museum":true,"historyofscience.museum":true,"horology.museum":true,"house.museum":true,"humanities.museum":true,"illustration.museum":true,"imageandsound.museum":true,"indian.museum":true,"indiana.museum":true,"indianapolis.museum":true,"indianmarket.museum":true,"intelligence.museum":true,"interactive.museum":true,"iraq.museum":true,"iron.museum":true,"isleofman.museum":true,"jamison.museum":true,"jefferson.museum":true,"jerusalem.museum":true,"jewelry.museum":true,"jewish.museum":true,"jewishart.museum":true,"jfk.museum":true,"journalism.museum":true,"judaica.museum":true,"judygarland.museum":true,"juedisches.museum":true,"juif.museum":true,"karate.museum":true,"karikatur.museum":true,"kids.museum":true,"koebenhavn.museum":true,"koeln.museum":true,"kunst.museum":true,"kunstsammlung.museum":true,"kunstunddesign.museum":true,"labor.museum":true,"labour.museum":true,"lajolla.museum":true,"lancashire.museum":true,"landes.museum":true,"lans.museum":true,"xn--lns-qla.museum":true,"larsson.museum":true,"lewismiller.museum":true,"lincoln.museum":true,"linz.museum":true,"living.museum":true,"livinghistory.museum":true,"localhistory.museum":true,"london.museum":true,"losangeles.museum":true,"louvre.museum":true,"loyalist.museum":true,"lucerne.museum":true,"luxembourg.museum":true,"luzern.museum":true,"mad.museum":true,"madrid.museum":true,"mallorca.museum":true,"manchester.museum":true,"mansion.museum":true,"mansions.museum":true,"manx.museum":true,"marburg.museum":true,"maritime.museum":true,"maritimo.museum":true,"maryland.museum":true,"marylhurst.museum":true,"media.museum":true,"medical.museum":true,"medizinhistorisches.museum":true,"meeres.museum":true,"memorial.museum":true,"mesaverde.museum":true,"michigan.museum":true,"midatlantic.museum":true,"military.museum":true,"mill.museum":true,"miners.museum":true,"mining.museum":true,"minnesota.museum":true,"missile.museum":true,"missoula.museum":true,"modern.museum":true,"moma.museum":true,"money.museum":true,"monmouth.museum":true,"monticello.museum":true,"montreal.museum":true,"moscow.museum":true,"motorcycle.museum":true,"muenchen.museum":true,"muenster.museum":true,"mulhouse.museum":true,"muncie.museum":true,"museet.museum":true,"museumcenter.museum":true,"museumvereniging.museum":true,"music.museum":true,"national.museum":true,"nationalfirearms.museum":true,"nationalheritage.museum":true,"nativeamerican.museum":true,"naturalhistory.museum":true,"naturalhistorymuseum.museum":true,"naturalsciences.museum":true,"nature.museum":true,"naturhistorisches.museum":true,"natuurwetenschappen.museum":true,"naumburg.museum":true,"naval.museum":true,"nebraska.museum":true,"neues.museum":true,"newhampshire.museum":true,"newjersey.museum":true,"newmexico.museum":true,"newport.museum":true,"newspaper.museum":true,"newyork.museum":true,"niepce.museum":true,"norfolk.museum":true,"north.museum":true,"nrw.museum":true,"nuernberg.museum":true,"nuremberg.museum":true,"nyc.museum":true,"nyny.museum":true,"oceanographic.museum":true,"oceanographique.museum":true,"omaha.museum":true,"online.museum":true,"ontario.museum":true,"openair.museum":true,"oregon.museum":true,"oregontrail.museum":true,"otago.museum":true,"oxford.museum":true,"pacific.museum":true,"paderborn.museum":true,"palace.museum":true,"paleo.museum":true,"palmsprings.museum":true,"panama.museum":true,"paris.museum":true,"pasadena.museum":true,"pharmacy.museum":true,"philadelphia.museum":true,"philadelphiaarea.museum":true,"philately.museum":true,"phoenix.museum":true,"photography.museum":true,"pilots.museum":true,"pittsburgh.museum":true,"planetarium.museum":true,"plantation.museum":true,"plants.museum":true,"plaza.museum":true,"portal.museum":true,"portland.museum":true,"portlligat.museum":true,"posts-and-telecommunications.museum":true,"preservation.museum":true,"presidio.museum":true,"press.museum":true,"project.museum":true,"public.museum":true,"pubol.museum":true,"quebec.museum":true,"railroad.museum":true,"railway.museum":true,"research.museum":true,"resistance.museum":true,"riodejaneiro.museum":true,"rochester.museum":true,"rockart.museum":true,"roma.museum":true,"russia.museum":true,"saintlouis.museum":true,"salem.museum":true,"salvadordali.museum":true,"salzburg.museum":true,"sandiego.museum":true,"sanfrancisco.museum":true,"santabarbara.museum":true,"santacruz.museum":true,"santafe.museum":true,"saskatchewan.museum":true,"satx.museum":true,"savannahga.museum":true,"schlesisches.museum":true,"schoenbrunn.museum":true,"schokoladen.museum":true,"school.museum":true,"schweiz.museum":true,"science.museum":true,"scienceandhistory.museum":true,"scienceandindustry.museum":true,"sciencecenter.museum":true,"sciencecenters.museum":true,"science-fiction.museum":true,"sciencehistory.museum":true,"sciences.museum":true,"sciencesnaturelles.museum":true,"scotland.museum":true,"seaport.museum":true,"settlement.museum":true,"settlers.museum":true,"shell.museum":true,"sherbrooke.museum":true,"sibenik.museum":true,"silk.museum":true,"ski.museum":true,"skole.museum":true,"society.museum":true,"sologne.museum":true,"soundandvision.museum":true,"southcarolina.museum":true,"southwest.museum":true,"space.museum":true,"spy.museum":true,"square.museum":true,"stadt.museum":true,"stalbans.museum":true,"starnberg.museum":true,"state.museum":true,"stateofdelaware.museum":true,"station.museum":true,"steam.museum":true,"steiermark.museum":true,"stjohn.museum":true,"stockholm.museum":true,"stpetersburg.museum":true,"stuttgart.museum":true,"suisse.museum":true,"surgeonshall.museum":true,"surrey.museum":true,"svizzera.museum":true,"sweden.museum":true,"sydney.museum":true,"tank.museum":true,"tcm.museum":true,"technology.museum":true,"telekommunikation.museum":true,"television.museum":true,"texas.museum":true,"textile.museum":true,"theater.museum":true,"time.museum":true,"timekeeping.museum":true,"topology.museum":true,"torino.museum":true,"touch.museum":true,"town.museum":true,"transport.museum":true,"tree.museum":true,"trolley.museum":true,"trust.museum":true,"trustee.museum":true,"uhren.museum":true,"ulm.museum":true,"undersea.museum":true,"university.museum":true,"usa.museum":true,"usantiques.museum":true,"usarts.museum":true,"uscountryestate.museum":true,"usculture.museum":true,"usdecorativearts.museum":true,"usgarden.museum":true,"ushistory.museum":true,"ushuaia.museum":true,"uslivinghistory.museum":true,"utah.museum":true,"uvic.museum":true,"valley.museum":true,"vantaa.museum":true,"versailles.museum":true,"viking.museum":true,"village.museum":true,"virginia.museum":true,"virtual.museum":true,"virtuel.museum":true,"vlaanderen.museum":true,"volkenkunde.museum":true,"wales.museum":true,"wallonie.museum":true,"war.museum":true,"washingtondc.museum":true,"watchandclock.museum":true,"watch-and-clock.museum":true,"western.museum":true,"westfalen.museum":true,"whaling.museum":true,"wildlife.museum":true,"williamsburg.museum":true,"windmill.museum":true,"workshop.museum":true,"york.museum":true,"yorkshire.museum":true,"yosemite.museum":true,"youth.museum":true,"zoological.museum":true,"zoology.museum":true,"xn--9dbhblg6di.museum":true,"xn--h1aegh.museum":true,"mv":true,"aero.mv":true,"biz.mv":true,"com.mv":true,"coop.mv":true,"edu.mv":true,"gov.mv":true,"info.mv":true,"int.mv":true,"mil.mv":true,"museum.mv":true,"name.mv":true,"net.mv":true,"org.mv":true,"pro.mv":true,"mw":true,"ac.mw":true,"biz.mw":true,"co.mw":true,"com.mw":true,"coop.mw":true,"edu.mw":true,"gov.mw":true,"int.mw":true,"museum.mw":true,"net.mw":true,"org.mw":true,"mx":true,"com.mx":true,"org.mx":true,"gob.mx":true,"edu.mx":true,"net.mx":true,"my":true,"com.my":true,"net.my":true,"org.my":true,"gov.my":true,"edu.my":true,"mil.my":true,"name.my":true,"mz":true,"ac.mz":true,"adv.mz":true,"co.mz":true,"edu.mz":true,"gov.mz":true,"mil.mz":true,"net.mz":true,"org.mz":true,"na":true,"info.na":true,"pro.na":true,"name.na":true,"school.na":true,"or.na":true,"dr.na":true,"us.na":true,"mx.na":true,"ca.na":true,"in.na":true,"cc.na":true,"tv.na":true,"ws.na":true,"mobi.na":true,"co.na":true,"com.na":true,"org.na":true,"name":true,"nc":true,"asso.nc":true,"nom.nc":true,"ne":true,"net":true,"nf":true,"com.nf":true,"net.nf":true,"per.nf":true,"rec.nf":true,"web.nf":true,"arts.nf":true,"firm.nf":true,"info.nf":true,"other.nf":true,"store.nf":true,"ng":true,"com.ng":true,"edu.ng":true,"gov.ng":true,"i.ng":true,"mil.ng":true,"mobi.ng":true,"name.ng":true,"net.ng":true,"org.ng":true,"sch.ng":true,"ni":true,"ac.ni":true,"biz.ni":true,"co.ni":true,"com.ni":true,"edu.ni":true,"gob.ni":true,"in.ni":true,"info.ni":true,"int.ni":true,"mil.ni":true,"net.ni":true,"nom.ni":true,"org.ni":true,"web.ni":true,"nl":true,"bv.nl":true,"no":true,"fhs.no":true,"vgs.no":true,"fylkesbibl.no":true,"folkebibl.no":true,"museum.no":true,"idrett.no":true,"priv.no":true,"mil.no":true,"stat.no":true,"dep.no":true,"kommune.no":true,"herad.no":true,"aa.no":true,"ah.no":true,"bu.no":true,"fm.no":true,"hl.no":true,"hm.no":true,"jan-mayen.no":true,"mr.no":true,"nl.no":true,"nt.no":true,"of.no":true,"ol.no":true,"oslo.no":true,"rl.no":true,"sf.no":true,"st.no":true,"svalbard.no":true,"tm.no":true,"tr.no":true,"va.no":true,"vf.no":true,"gs.aa.no":true,"gs.ah.no":true,"gs.bu.no":true,"gs.fm.no":true,"gs.hl.no":true,"gs.hm.no":true,"gs.jan-mayen.no":true,"gs.mr.no":true,"gs.nl.no":true,"gs.nt.no":true,"gs.of.no":true,"gs.ol.no":true,"gs.oslo.no":true,"gs.rl.no":true,"gs.sf.no":true,"gs.st.no":true,"gs.svalbard.no":true,"gs.tm.no":true,"gs.tr.no":true,"gs.va.no":true,"gs.vf.no":true,"akrehamn.no":true,"xn--krehamn-dxa.no":true,"algard.no":true,"xn--lgrd-poac.no":true,"arna.no":true,"brumunddal.no":true,"bryne.no":true,"bronnoysund.no":true,"xn--brnnysund-m8ac.no":true,"drobak.no":true,"xn--drbak-wua.no":true,"egersund.no":true,"fetsund.no":true,"floro.no":true,"xn--flor-jra.no":true,"fredrikstad.no":true,"hokksund.no":true,"honefoss.no":true,"xn--hnefoss-q1a.no":true,"jessheim.no":true,"jorpeland.no":true,"xn--jrpeland-54a.no":true,"kirkenes.no":true,"kopervik.no":true,"krokstadelva.no":true,"langevag.no":true,"xn--langevg-jxa.no":true,"leirvik.no":true,"mjondalen.no":true,"xn--mjndalen-64a.no":true,"mo-i-rana.no":true,"mosjoen.no":true,"xn--mosjen-eya.no":true,"nesoddtangen.no":true,"orkanger.no":true,"osoyro.no":true,"xn--osyro-wua.no":true,"raholt.no":true,"xn--rholt-mra.no":true,"sandnessjoen.no":true,"xn--sandnessjen-ogb.no":true,"skedsmokorset.no":true,"slattum.no":true,"spjelkavik.no":true,"stathelle.no":true,"stavern.no":true,"stjordalshalsen.no":true,"xn--stjrdalshalsen-sqb.no":true,"tananger.no":true,"tranby.no":true,"vossevangen.no":true,"afjord.no":true,"xn--fjord-lra.no":true,"agdenes.no":true,"al.no":true,"xn--l-1fa.no":true,"alesund.no":true,"xn--lesund-hua.no":true,"alstahaug.no":true,"alta.no":true,"xn--lt-liac.no":true,"alaheadju.no":true,"xn--laheadju-7ya.no":true,"alvdal.no":true,"amli.no":true,"xn--mli-tla.no":true,"amot.no":true,"xn--mot-tla.no":true,"andebu.no":true,"andoy.no":true,"xn--andy-ira.no":true,"andasuolo.no":true,"ardal.no":true,"xn--rdal-poa.no":true,"aremark.no":true,"arendal.no":true,"xn--s-1fa.no":true,"aseral.no":true,"xn--seral-lra.no":true,"asker.no":true,"askim.no":true,"askvoll.no":true,"askoy.no":true,"xn--asky-ira.no":true,"asnes.no":true,"xn--snes-poa.no":true,"audnedaln.no":true,"aukra.no":true,"aure.no":true,"aurland.no":true,"aurskog-holand.no":true,"xn--aurskog-hland-jnb.no":true,"austevoll.no":true,"austrheim.no":true,"averoy.no":true,"xn--avery-yua.no":true,"balestrand.no":true,"ballangen.no":true,"balat.no":true,"xn--blt-elab.no":true,"balsfjord.no":true,"bahccavuotna.no":true,"xn--bhccavuotna-k7a.no":true,"bamble.no":true,"bardu.no":true,"beardu.no":true,"beiarn.no":true,"bajddar.no":true,"xn--bjddar-pta.no":true,"baidar.no":true,"xn--bidr-5nac.no":true,"berg.no":true,"bergen.no":true,"berlevag.no":true,"xn--berlevg-jxa.no":true,"bearalvahki.no":true,"xn--bearalvhki-y4a.no":true,"bindal.no":true,"birkenes.no":true,"bjarkoy.no":true,"xn--bjarky-fya.no":true,"bjerkreim.no":true,"bjugn.no":true,"bodo.no":true,"xn--bod-2na.no":true,"badaddja.no":true,"xn--bdddj-mrabd.no":true,"budejju.no":true,"bokn.no":true,"bremanger.no":true,"bronnoy.no":true,"xn--brnny-wuac.no":true,"bygland.no":true,"bykle.no":true,"barum.no":true,"xn--brum-voa.no":true,"bo.telemark.no":true,"xn--b-5ga.telemark.no":true,"bo.nordland.no":true,"xn--b-5ga.nordland.no":true,"bievat.no":true,"xn--bievt-0qa.no":true,"bomlo.no":true,"xn--bmlo-gra.no":true,"batsfjord.no":true,"xn--btsfjord-9za.no":true,"bahcavuotna.no":true,"xn--bhcavuotna-s4a.no":true,"dovre.no":true,"drammen.no":true,"drangedal.no":true,"dyroy.no":true,"xn--dyry-ira.no":true,"donna.no":true,"xn--dnna-gra.no":true,"eid.no":true,"eidfjord.no":true,"eidsberg.no":true,"eidskog.no":true,"eidsvoll.no":true,"eigersund.no":true,"elverum.no":true,"enebakk.no":true,"engerdal.no":true,"etne.no":true,"etnedal.no":true,"evenes.no":true,"evenassi.no":true,"xn--eveni-0qa01ga.no":true,"evje-og-hornnes.no":true,"farsund.no":true,"fauske.no":true,"fuossko.no":true,"fuoisku.no":true,"fedje.no":true,"fet.no":true,"finnoy.no":true,"xn--finny-yua.no":true,"fitjar.no":true,"fjaler.no":true,"fjell.no":true,"flakstad.no":true,"flatanger.no":true,"flekkefjord.no":true,"flesberg.no":true,"flora.no":true,"fla.no":true,"xn--fl-zia.no":true,"folldal.no":true,"forsand.no":true,"fosnes.no":true,"frei.no":true,"frogn.no":true,"froland.no":true,"frosta.no":true,"frana.no":true,"xn--frna-woa.no":true,"froya.no":true,"xn--frya-hra.no":true,"fusa.no":true,"fyresdal.no":true,"forde.no":true,"xn--frde-gra.no":true,"gamvik.no":true,"gangaviika.no":true,"xn--ggaviika-8ya47h.no":true,"gaular.no":true,"gausdal.no":true,"gildeskal.no":true,"xn--gildeskl-g0a.no":true,"giske.no":true,"gjemnes.no":true,"gjerdrum.no":true,"gjerstad.no":true,"gjesdal.no":true,"gjovik.no":true,"xn--gjvik-wua.no":true,"gloppen.no":true,"gol.no":true,"gran.no":true,"grane.no":true,"granvin.no":true,"gratangen.no":true,"grimstad.no":true,"grong.no":true,"kraanghke.no":true,"xn--kranghke-b0a.no":true,"grue.no":true,"gulen.no":true,"hadsel.no":true,"halden.no":true,"halsa.no":true,"hamar.no":true,"hamaroy.no":true,"habmer.no":true,"xn--hbmer-xqa.no":true,"hapmir.no":true,"xn--hpmir-xqa.no":true,"hammerfest.no":true,"hammarfeasta.no":true,"xn--hmmrfeasta-s4ac.no":true,"haram.no":true,"hareid.no":true,"harstad.no":true,"hasvik.no":true,"aknoluokta.no":true,"xn--koluokta-7ya57h.no":true,"hattfjelldal.no":true,"aarborte.no":true,"haugesund.no":true,"hemne.no":true,"hemnes.no":true,"hemsedal.no":true,"heroy.more-og-romsdal.no":true,"xn--hery-ira.xn--mre-og-romsdal-qqb.no":true,"heroy.nordland.no":true,"xn--hery-ira.nordland.no":true,"hitra.no":true,"hjartdal.no":true,"hjelmeland.no":true,"hobol.no":true,"xn--hobl-ira.no":true,"hof.no":true,"hol.no":true,"hole.no":true,"holmestrand.no":true,"holtalen.no":true,"xn--holtlen-hxa.no":true,"hornindal.no":true,"horten.no":true,"hurdal.no":true,"hurum.no":true,"hvaler.no":true,"hyllestad.no":true,"hagebostad.no":true,"xn--hgebostad-g3a.no":true,"hoyanger.no":true,"xn--hyanger-q1a.no":true,"hoylandet.no":true,"xn--hylandet-54a.no":true,"ha.no":true,"xn--h-2fa.no":true,"ibestad.no":true,"inderoy.no":true,"xn--indery-fya.no":true,"iveland.no":true,"jevnaker.no":true,"jondal.no":true,"jolster.no":true,"xn--jlster-bya.no":true,"karasjok.no":true,"karasjohka.no":true,"xn--krjohka-hwab49j.no":true,"karlsoy.no":true,"galsa.no":true,"xn--gls-elac.no":true,"karmoy.no":true,"xn--karmy-yua.no":true,"kautokeino.no":true,"guovdageaidnu.no":true,"klepp.no":true,"klabu.no":true,"xn--klbu-woa.no":true,"kongsberg.no":true,"kongsvinger.no":true,"kragero.no":true,"xn--krager-gya.no":true,"kristiansand.no":true,"kristiansund.no":true,"krodsherad.no":true,"xn--krdsherad-m8a.no":true,"kvalsund.no":true,"rahkkeravju.no":true,"xn--rhkkervju-01af.no":true,"kvam.no":true,"kvinesdal.no":true,"kvinnherad.no":true,"kviteseid.no":true,"kvitsoy.no":true,"xn--kvitsy-fya.no":true,"kvafjord.no":true,"xn--kvfjord-nxa.no":true,"giehtavuoatna.no":true,"kvanangen.no":true,"xn--kvnangen-k0a.no":true,"navuotna.no":true,"xn--nvuotna-hwa.no":true,"kafjord.no":true,"xn--kfjord-iua.no":true,"gaivuotna.no":true,"xn--givuotna-8ya.no":true,"larvik.no":true,"lavangen.no":true,"lavagis.no":true,"loabat.no":true,"xn--loabt-0qa.no":true,"lebesby.no":true,"davvesiida.no":true,"leikanger.no":true,"leirfjord.no":true,"leka.no":true,"leksvik.no":true,"lenvik.no":true,"leangaviika.no":true,"xn--leagaviika-52b.no":true,"lesja.no":true,"levanger.no":true,"lier.no":true,"lierne.no":true,"lillehammer.no":true,"lillesand.no":true,"lindesnes.no":true,"lindas.no":true,"xn--linds-pra.no":true,"lom.no":true,"loppa.no":true,"lahppi.no":true,"xn--lhppi-xqa.no":true,"lund.no":true,"lunner.no":true,"luroy.no":true,"xn--lury-ira.no":true,"luster.no":true,"lyngdal.no":true,"lyngen.no":true,"ivgu.no":true,"lardal.no":true,"lerdal.no":true,"xn--lrdal-sra.no":true,"lodingen.no":true,"xn--ldingen-q1a.no":true,"lorenskog.no":true,"xn--lrenskog-54a.no":true,"loten.no":true,"xn--lten-gra.no":true,"malvik.no":true,"masoy.no":true,"xn--msy-ula0h.no":true,"muosat.no":true,"xn--muost-0qa.no":true,"mandal.no":true,"marker.no":true,"marnardal.no":true,"masfjorden.no":true,"meland.no":true,"meldal.no":true,"melhus.no":true,"meloy.no":true,"xn--mely-ira.no":true,"meraker.no":true,"xn--merker-kua.no":true,"moareke.no":true,"xn--moreke-jua.no":true,"midsund.no":true,"midtre-gauldal.no":true,"modalen.no":true,"modum.no":true,"molde.no":true,"moskenes.no":true,"moss.no":true,"mosvik.no":true,"malselv.no":true,"xn--mlselv-iua.no":true,"malatvuopmi.no":true,"xn--mlatvuopmi-s4a.no":true,"namdalseid.no":true,"aejrie.no":true,"namsos.no":true,"namsskogan.no":true,"naamesjevuemie.no":true,"xn--nmesjevuemie-tcba.no":true,"laakesvuemie.no":true,"nannestad.no":true,"narvik.no":true,"narviika.no":true,"naustdal.no":true,"nedre-eiker.no":true,"nes.akershus.no":true,"nes.buskerud.no":true,"nesna.no":true,"nesodden.no":true,"nesseby.no":true,"unjarga.no":true,"xn--unjrga-rta.no":true,"nesset.no":true,"nissedal.no":true,"nittedal.no":true,"nord-aurdal.no":true,"nord-fron.no":true,"nord-odal.no":true,"norddal.no":true,"nordkapp.no":true,"davvenjarga.no":true,"xn--davvenjrga-y4a.no":true,"nordre-land.no":true,"nordreisa.no":true,"raisa.no":true,"xn--risa-5na.no":true,"nore-og-uvdal.no":true,"notodden.no":true,"naroy.no":true,"xn--nry-yla5g.no":true,"notteroy.no":true,"xn--nttery-byae.no":true,"odda.no":true,"oksnes.no":true,"xn--ksnes-uua.no":true,"oppdal.no":true,"oppegard.no":true,"xn--oppegrd-ixa.no":true,"orkdal.no":true,"orland.no":true,"xn--rland-uua.no":true,"orskog.no":true,"xn--rskog-uua.no":true,"orsta.no":true,"xn--rsta-fra.no":true,"os.hedmark.no":true,"os.hordaland.no":true,"osen.no":true,"osteroy.no":true,"xn--ostery-fya.no":true,"ostre-toten.no":true,"xn--stre-toten-zcb.no":true,"overhalla.no":true,"ovre-eiker.no":true,"xn--vre-eiker-k8a.no":true,"oyer.no":true,"xn--yer-zna.no":true,"oygarden.no":true,"xn--ygarden-p1a.no":true,"oystre-slidre.no":true,"xn--ystre-slidre-ujb.no":true,"porsanger.no":true,"porsangu.no":true,"xn--porsgu-sta26f.no":true,"porsgrunn.no":true,"radoy.no":true,"xn--rady-ira.no":true,"rakkestad.no":true,"rana.no":true,"ruovat.no":true,"randaberg.no":true,"rauma.no":true,"rendalen.no":true,"rennebu.no":true,"rennesoy.no":true,"xn--rennesy-v1a.no":true,"rindal.no":true,"ringebu.no":true,"ringerike.no":true,"ringsaker.no":true,"rissa.no":true,"risor.no":true,"xn--risr-ira.no":true,"roan.no":true,"rollag.no":true,"rygge.no":true,"ralingen.no":true,"xn--rlingen-mxa.no":true,"rodoy.no":true,"xn--rdy-0nab.no":true,"romskog.no":true,"xn--rmskog-bya.no":true,"roros.no":true,"xn--rros-gra.no":true,"rost.no":true,"xn--rst-0na.no":true,"royken.no":true,"xn--ryken-vua.no":true,"royrvik.no":true,"xn--ryrvik-bya.no":true,"rade.no":true,"xn--rde-ula.no":true,"salangen.no":true,"siellak.no":true,"saltdal.no":true,"salat.no":true,"xn--slt-elab.no":true,"xn--slat-5na.no":true,"samnanger.no":true,"sande.more-og-romsdal.no":true,"sande.xn--mre-og-romsdal-qqb.no":true,"sande.vestfold.no":true,"sandefjord.no":true,"sandnes.no":true,"sandoy.no":true,"xn--sandy-yua.no":true,"sarpsborg.no":true,"sauda.no":true,"sauherad.no":true,"sel.no":true,"selbu.no":true,"selje.no":true,"seljord.no":true,"sigdal.no":true,"siljan.no":true,"sirdal.no":true,"skaun.no":true,"skedsmo.no":true,"ski.no":true,"skien.no":true,"skiptvet.no":true,"skjervoy.no":true,"xn--skjervy-v1a.no":true,"skierva.no":true,"xn--skierv-uta.no":true,"skjak.no":true,"xn--skjk-soa.no":true,"skodje.no":true,"skanland.no":true,"xn--sknland-fxa.no":true,"skanit.no":true,"xn--sknit-yqa.no":true,"smola.no":true,"xn--smla-hra.no":true,"snillfjord.no":true,"snasa.no":true,"xn--snsa-roa.no":true,"snoasa.no":true,"snaase.no":true,"xn--snase-nra.no":true,"sogndal.no":true,"sokndal.no":true,"sola.no":true,"solund.no":true,"songdalen.no":true,"sortland.no":true,"spydeberg.no":true,"stange.no":true,"stavanger.no":true,"steigen.no":true,"steinkjer.no":true,"stjordal.no":true,"xn--stjrdal-s1a.no":true,"stokke.no":true,"stor-elvdal.no":true,"stord.no":true,"stordal.no":true,"storfjord.no":true,"omasvuotna.no":true,"strand.no":true,"stranda.no":true,"stryn.no":true,"sula.no":true,"suldal.no":true,"sund.no":true,"sunndal.no":true,"surnadal.no":true,"sveio.no":true,"svelvik.no":true,"sykkylven.no":true,"sogne.no":true,"xn--sgne-gra.no":true,"somna.no":true,"xn--smna-gra.no":true,"sondre-land.no":true,"xn--sndre-land-0cb.no":true,"sor-aurdal.no":true,"xn--sr-aurdal-l8a.no":true,"sor-fron.no":true,"xn--sr-fron-q1a.no":true,"sor-odal.no":true,"xn--sr-odal-q1a.no":true,"sor-varanger.no":true,"xn--sr-varanger-ggb.no":true,"matta-varjjat.no":true,"xn--mtta-vrjjat-k7af.no":true,"sorfold.no":true,"xn--srfold-bya.no":true,"sorreisa.no":true,"xn--srreisa-q1a.no":true,"sorum.no":true,"xn--srum-gra.no":true,"tana.no":true,"deatnu.no":true,"time.no":true,"tingvoll.no":true,"tinn.no":true,"tjeldsund.no":true,"dielddanuorri.no":true,"tjome.no":true,"xn--tjme-hra.no":true,"tokke.no":true,"tolga.no":true,"torsken.no":true,"tranoy.no":true,"xn--trany-yua.no":true,"tromso.no":true,"xn--troms-zua.no":true,"tromsa.no":true,"romsa.no":true,"trondheim.no":true,"troandin.no":true,"trysil.no":true,"trana.no":true,"xn--trna-woa.no":true,"trogstad.no":true,"xn--trgstad-r1a.no":true,"tvedestrand.no":true,"tydal.no":true,"tynset.no":true,"tysfjord.no":true,"divtasvuodna.no":true,"divttasvuotna.no":true,"tysnes.no":true,"tysvar.no":true,"xn--tysvr-vra.no":true,"tonsberg.no":true,"xn--tnsberg-q1a.no":true,"ullensaker.no":true,"ullensvang.no":true,"ulvik.no":true,"utsira.no":true,"vadso.no":true,"xn--vads-jra.no":true,"cahcesuolo.no":true,"xn--hcesuolo-7ya35b.no":true,"vaksdal.no":true,"valle.no":true,"vang.no":true,"vanylven.no":true,"vardo.no":true,"xn--vard-jra.no":true,"varggat.no":true,"xn--vrggt-xqad.no":true,"vefsn.no":true,"vaapste.no":true,"vega.no":true,"vegarshei.no":true,"xn--vegrshei-c0a.no":true,"vennesla.no":true,"verdal.no":true,"verran.no":true,"vestby.no":true,"vestnes.no":true,"vestre-slidre.no":true,"vestre-toten.no":true,"vestvagoy.no":true,"xn--vestvgy-ixa6o.no":true,"vevelstad.no":true,"vik.no":true,"vikna.no":true,"vindafjord.no":true,"volda.no":true,"voss.no":true,"varoy.no":true,"xn--vry-yla5g.no":true,"vagan.no":true,"xn--vgan-qoa.no":true,"voagat.no":true,"vagsoy.no":true,"xn--vgsy-qoa0j.no":true,"vaga.no":true,"xn--vg-yiab.no":true,"valer.ostfold.no":true,"xn--vler-qoa.xn--stfold-9xa.no":true,"valer.hedmark.no":true,"xn--vler-qoa.hedmark.no":true,"*.np":true,"nr":true,"biz.nr":true,"info.nr":true,"gov.nr":true,"edu.nr":true,"org.nr":true,"net.nr":true,"com.nr":true,"nu":true,"nz":true,"ac.nz":true,"co.nz":true,"cri.nz":true,"geek.nz":true,"gen.nz":true,"govt.nz":true,"health.nz":true,"iwi.nz":true,"kiwi.nz":true,"maori.nz":true,"mil.nz":true,"xn--mori-qsa.nz":true,"net.nz":true,"org.nz":true,"parliament.nz":true,"school.nz":true,"om":true,"co.om":true,"com.om":true,"edu.om":true,"gov.om":true,"med.om":true,"museum.om":true,"net.om":true,"org.om":true,"pro.om":true,"onion":true,"org":true,"pa":true,"ac.pa":true,"gob.pa":true,"com.pa":true,"org.pa":true,"sld.pa":true,"edu.pa":true,"net.pa":true,"ing.pa":true,"abo.pa":true,"med.pa":true,"nom.pa":true,"pe":true,"edu.pe":true,"gob.pe":true,"nom.pe":true,"mil.pe":true,"org.pe":true,"com.pe":true,"net.pe":true,"pf":true,"com.pf":true,"org.pf":true,"edu.pf":true,"*.pg":true,"ph":true,"com.ph":true,"net.ph":true,"org.ph":true,"gov.ph":true,"edu.ph":true,"ngo.ph":true,"mil.ph":true,"i.ph":true,"pk":true,"com.pk":true,"net.pk":true,"edu.pk":true,"org.pk":true,"fam.pk":true,"biz.pk":true,"web.pk":true,"gov.pk":true,"gob.pk":true,"gok.pk":true,"gon.pk":true,"gop.pk":true,"gos.pk":true,"info.pk":true,"pl":true,"com.pl":true,"net.pl":true,"org.pl":true,"aid.pl":true,"agro.pl":true,"atm.pl":true,"auto.pl":true,"biz.pl":true,"edu.pl":true,"gmina.pl":true,"gsm.pl":true,"info.pl":true,"mail.pl":true,"miasta.pl":true,"media.pl":true,"mil.pl":true,"nieruchomosci.pl":true,"nom.pl":true,"pc.pl":true,"powiat.pl":true,"priv.pl":true,"realestate.pl":true,"rel.pl":true,"sex.pl":true,"shop.pl":true,"sklep.pl":true,"sos.pl":true,"szkola.pl":true,"targi.pl":true,"tm.pl":true,"tourism.pl":true,"travel.pl":true,"turystyka.pl":true,"gov.pl":true,"ap.gov.pl":true,"ic.gov.pl":true,"is.gov.pl":true,"us.gov.pl":true,"kmpsp.gov.pl":true,"kppsp.gov.pl":true,"kwpsp.gov.pl":true,"psp.gov.pl":true,"wskr.gov.pl":true,"kwp.gov.pl":true,"mw.gov.pl":true,"ug.gov.pl":true,"um.gov.pl":true,"umig.gov.pl":true,"ugim.gov.pl":true,"upow.gov.pl":true,"uw.gov.pl":true,"starostwo.gov.pl":true,"pa.gov.pl":true,"po.gov.pl":true,"psse.gov.pl":true,"pup.gov.pl":true,"rzgw.gov.pl":true,"sa.gov.pl":true,"so.gov.pl":true,"sr.gov.pl":true,"wsa.gov.pl":true,"sko.gov.pl":true,"uzs.gov.pl":true,"wiih.gov.pl":true,"winb.gov.pl":true,"pinb.gov.pl":true,"wios.gov.pl":true,"witd.gov.pl":true,"wzmiuw.gov.pl":true,"piw.gov.pl":true,"wiw.gov.pl":true,"griw.gov.pl":true,"wif.gov.pl":true,"oum.gov.pl":true,"sdn.gov.pl":true,"zp.gov.pl":true,"uppo.gov.pl":true,"mup.gov.pl":true,"wuoz.gov.pl":true,"konsulat.gov.pl":true,"oirm.gov.pl":true,"augustow.pl":true,"babia-gora.pl":true,"bedzin.pl":true,"beskidy.pl":true,"bialowieza.pl":true,"bialystok.pl":true,"bielawa.pl":true,"bieszczady.pl":true,"boleslawiec.pl":true,"bydgoszcz.pl":true,"bytom.pl":true,"cieszyn.pl":true,"czeladz.pl":true,"czest.pl":true,"dlugoleka.pl":true,"elblag.pl":true,"elk.pl":true,"glogow.pl":true,"gniezno.pl":true,"gorlice.pl":true,"grajewo.pl":true,"ilawa.pl":true,"jaworzno.pl":true,"jelenia-gora.pl":true,"jgora.pl":true,"kalisz.pl":true,"kazimierz-dolny.pl":true,"karpacz.pl":true,"kartuzy.pl":true,"kaszuby.pl":true,"katowice.pl":true,"kepno.pl":true,"ketrzyn.pl":true,"klodzko.pl":true,"kobierzyce.pl":true,"kolobrzeg.pl":true,"konin.pl":true,"konskowola.pl":true,"kutno.pl":true,"lapy.pl":true,"lebork.pl":true,"legnica.pl":true,"lezajsk.pl":true,"limanowa.pl":true,"lomza.pl":true,"lowicz.pl":true,"lubin.pl":true,"lukow.pl":true,"malbork.pl":true,"malopolska.pl":true,"mazowsze.pl":true,"mazury.pl":true,"mielec.pl":true,"mielno.pl":true,"mragowo.pl":true,"naklo.pl":true,"nowaruda.pl":true,"nysa.pl":true,"olawa.pl":true,"olecko.pl":true,"olkusz.pl":true,"olsztyn.pl":true,"opoczno.pl":true,"opole.pl":true,"ostroda.pl":true,"ostroleka.pl":true,"ostrowiec.pl":true,"ostrowwlkp.pl":true,"pila.pl":true,"pisz.pl":true,"podhale.pl":true,"podlasie.pl":true,"polkowice.pl":true,"pomorze.pl":true,"pomorskie.pl":true,"prochowice.pl":true,"pruszkow.pl":true,"przeworsk.pl":true,"pulawy.pl":true,"radom.pl":true,"rawa-maz.pl":true,"rybnik.pl":true,"rzeszow.pl":true,"sanok.pl":true,"sejny.pl":true,"slask.pl":true,"slupsk.pl":true,"sosnowiec.pl":true,"stalowa-wola.pl":true,"skoczow.pl":true,"starachowice.pl":true,"stargard.pl":true,"suwalki.pl":true,"swidnica.pl":true,"swiebodzin.pl":true,"swinoujscie.pl":true,"szczecin.pl":true,"szczytno.pl":true,"tarnobrzeg.pl":true,"tgory.pl":true,"turek.pl":true,"tychy.pl":true,"ustka.pl":true,"walbrzych.pl":true,"warmia.pl":true,"warszawa.pl":true,"waw.pl":true,"wegrow.pl":true,"wielun.pl":true,"wlocl.pl":true,"wloclawek.pl":true,"wodzislaw.pl":true,"wolomin.pl":true,"wroclaw.pl":true,"zachpomor.pl":true,"zagan.pl":true,"zarow.pl":true,"zgora.pl":true,"zgorzelec.pl":true,"pm":true,"pn":true,"gov.pn":true,"co.pn":true,"org.pn":true,"edu.pn":true,"net.pn":true,"post":true,"pr":true,"com.pr":true,"net.pr":true,"org.pr":true,"gov.pr":true,"edu.pr":true,"isla.pr":true,"pro.pr":true,"biz.pr":true,"info.pr":true,"name.pr":true,"est.pr":true,"prof.pr":true,"ac.pr":true,"pro":true,"aaa.pro":true,"aca.pro":true,"acct.pro":true,"avocat.pro":true,"bar.pro":true,"cpa.pro":true,"eng.pro":true,"jur.pro":true,"law.pro":true,"med.pro":true,"recht.pro":true,"ps":true,"edu.ps":true,"gov.ps":true,"sec.ps":true,"plo.ps":true,"com.ps":true,"org.ps":true,"net.ps":true,"pt":true,"net.pt":true,"gov.pt":true,"org.pt":true,"edu.pt":true,"int.pt":true,"publ.pt":true,"com.pt":true,"nome.pt":true,"pw":true,"co.pw":true,"ne.pw":true,"or.pw":true,"ed.pw":true,"go.pw":true,"belau.pw":true,"py":true,"com.py":true,"coop.py":true,"edu.py":true,"gov.py":true,"mil.py":true,"net.py":true,"org.py":true,"qa":true,"com.qa":true,"edu.qa":true,"gov.qa":true,"mil.qa":true,"name.qa":true,"net.qa":true,"org.qa":true,"sch.qa":true,"re":true,"asso.re":true,"com.re":true,"nom.re":true,"ro":true,"arts.ro":true,"com.ro":true,"firm.ro":true,"info.ro":true,"nom.ro":true,"nt.ro":true,"org.ro":true,"rec.ro":true,"store.ro":true,"tm.ro":true,"www.ro":true,"rs":true,"ac.rs":true,"co.rs":true,"edu.rs":true,"gov.rs":true,"in.rs":true,"org.rs":true,"ru":true,"ac.ru":true,"edu.ru":true,"gov.ru":true,"int.ru":true,"mil.ru":true,"test.ru":true,"rw":true,"gov.rw":true,"net.rw":true,"edu.rw":true,"ac.rw":true,"com.rw":true,"co.rw":true,"int.rw":true,"mil.rw":true,"gouv.rw":true,"sa":true,"com.sa":true,"net.sa":true,"org.sa":true,"gov.sa":true,"med.sa":true,"pub.sa":true,"edu.sa":true,"sch.sa":true,"sb":true,"com.sb":true,"edu.sb":true,"gov.sb":true,"net.sb":true,"org.sb":true,"sc":true,"com.sc":true,"gov.sc":true,"net.sc":true,"org.sc":true,"edu.sc":true,"sd":true,"com.sd":true,"net.sd":true,"org.sd":true,"edu.sd":true,"med.sd":true,"tv.sd":true,"gov.sd":true,"info.sd":true,"se":true,"a.se":true,"ac.se":true,"b.se":true,"bd.se":true,"brand.se":true,"c.se":true,"d.se":true,"e.se":true,"f.se":true,"fh.se":true,"fhsk.se":true,"fhv.se":true,"g.se":true,"h.se":true,"i.se":true,"k.se":true,"komforb.se":true,"kommunalforbund.se":true,"komvux.se":true,"l.se":true,"lanbib.se":true,"m.se":true,"n.se":true,"naturbruksgymn.se":true,"o.se":true,"org.se":true,"p.se":true,"parti.se":true,"pp.se":true,"press.se":true,"r.se":true,"s.se":true,"t.se":true,"tm.se":true,"u.se":true,"w.se":true,"x.se":true,"y.se":true,"z.se":true,"sg":true,"com.sg":true,"net.sg":true,"org.sg":true,"gov.sg":true,"edu.sg":true,"per.sg":true,"sh":true,"com.sh":true,"net.sh":true,"gov.sh":true,"org.sh":true,"mil.sh":true,"si":true,"sj":true,"sk":true,"sl":true,"com.sl":true,"net.sl":true,"edu.sl":true,"gov.sl":true,"org.sl":true,"sm":true,"sn":true,"art.sn":true,"com.sn":true,"edu.sn":true,"gouv.sn":true,"org.sn":true,"perso.sn":true,"univ.sn":true,"so":true,"com.so":true,"net.so":true,"org.so":true,"sr":true,"st":true,"co.st":true,"com.st":true,"consulado.st":true,"edu.st":true,"embaixada.st":true,"gov.st":true,"mil.st":true,"net.st":true,"org.st":true,"principe.st":true,"saotome.st":true,"store.st":true,"su":true,"sv":true,"com.sv":true,"edu.sv":true,"gob.sv":true,"org.sv":true,"red.sv":true,"sx":true,"gov.sx":true,"sy":true,"edu.sy":true,"gov.sy":true,"net.sy":true,"mil.sy":true,"com.sy":true,"org.sy":true,"sz":true,"co.sz":true,"ac.sz":true,"org.sz":true,"tc":true,"td":true,"tel":true,"tf":true,"tg":true,"th":true,"ac.th":true,"co.th":true,"go.th":true,"in.th":true,"mi.th":true,"net.th":true,"or.th":true,"tj":true,"ac.tj":true,"biz.tj":true,"co.tj":true,"com.tj":true,"edu.tj":true,"go.tj":true,"gov.tj":true,"int.tj":true,"mil.tj":true,"name.tj":true,"net.tj":true,"nic.tj":true,"org.tj":true,"test.tj":true,"web.tj":true,"tk":true,"tl":true,"gov.tl":true,"tm":true,"com.tm":true,"co.tm":true,"org.tm":true,"net.tm":true,"nom.tm":true,"gov.tm":true,"mil.tm":true,"edu.tm":true,"tn":true,"com.tn":true,"ens.tn":true,"fin.tn":true,"gov.tn":true,"ind.tn":true,"intl.tn":true,"nat.tn":true,"net.tn":true,"org.tn":true,"info.tn":true,"perso.tn":true,"tourism.tn":true,"edunet.tn":true,"rnrt.tn":true,"rns.tn":true,"rnu.tn":true,"mincom.tn":true,"agrinet.tn":true,"defense.tn":true,"turen.tn":true,"to":true,"com.to":true,"gov.to":true,"net.to":true,"org.to":true,"edu.to":true,"mil.to":true,"tr":true,"com.tr":true,"info.tr":true,"biz.tr":true,"net.tr":true,"org.tr":true,"web.tr":true,"gen.tr":true,"tv.tr":true,"av.tr":true,"dr.tr":true,"bbs.tr":true,"name.tr":true,"tel.tr":true,"gov.tr":true,"bel.tr":true,"pol.tr":true,"mil.tr":true,"k12.tr":true,"edu.tr":true,"kep.tr":true,"nc.tr":true,"gov.nc.tr":true,"travel":true,"tt":true,"co.tt":true,"com.tt":true,"org.tt":true,"net.tt":true,"biz.tt":true,"info.tt":true,"pro.tt":true,"int.tt":true,"coop.tt":true,"jobs.tt":true,"mobi.tt":true,"travel.tt":true,"museum.tt":true,"aero.tt":true,"name.tt":true,"gov.tt":true,"edu.tt":true,"tv":true,"tw":true,"edu.tw":true,"gov.tw":true,"mil.tw":true,"com.tw":true,"net.tw":true,"org.tw":true,"idv.tw":true,"game.tw":true,"ebiz.tw":true,"club.tw":true,"xn--zf0ao64a.tw":true,"xn--uc0atv.tw":true,"xn--czrw28b.tw":true,"tz":true,"ac.tz":true,"co.tz":true,"go.tz":true,"hotel.tz":true,"info.tz":true,"me.tz":true,"mil.tz":true,"mobi.tz":true,"ne.tz":true,"or.tz":true,"sc.tz":true,"tv.tz":true,"ua":true,"com.ua":true,"edu.ua":true,"gov.ua":true,"in.ua":true,"net.ua":true,"org.ua":true,"cherkassy.ua":true,"cherkasy.ua":true,"chernigov.ua":true,"chernihiv.ua":true,"chernivtsi.ua":true,"chernovtsy.ua":true,"ck.ua":true,"cn.ua":true,"cr.ua":true,"crimea.ua":true,"cv.ua":true,"dn.ua":true,"dnepropetrovsk.ua":true,"dnipropetrovsk.ua":true,"dominic.ua":true,"donetsk.ua":true,"dp.ua":true,"if.ua":true,"ivano-frankivsk.ua":true,"kh.ua":true,"kharkiv.ua":true,"kharkov.ua":true,"kherson.ua":true,"khmelnitskiy.ua":true,"khmelnytskyi.ua":true,"kiev.ua":true,"kirovograd.ua":true,"km.ua":true,"kr.ua":true,"krym.ua":true,"ks.ua":true,"kv.ua":true,"kyiv.ua":true,"lg.ua":true,"lt.ua":true,"lugansk.ua":true,"lutsk.ua":true,"lv.ua":true,"lviv.ua":true,"mk.ua":true,"mykolaiv.ua":true,"nikolaev.ua":true,"od.ua":true,"odesa.ua":true,"odessa.ua":true,"pl.ua":true,"poltava.ua":true,"rivne.ua":true,"rovno.ua":true,"rv.ua":true,"sb.ua":true,"sebastopol.ua":true,"sevastopol.ua":true,"sm.ua":true,"sumy.ua":true,"te.ua":true,"ternopil.ua":true,"uz.ua":true,"uzhgorod.ua":true,"vinnica.ua":true,"vinnytsia.ua":true,"vn.ua":true,"volyn.ua":true,"yalta.ua":true,"zaporizhzhe.ua":true,"zaporizhzhia.ua":true,"zhitomir.ua":true,"zhytomyr.ua":true,"zp.ua":true,"zt.ua":true,"ug":true,"co.ug":true,"or.ug":true,"ac.ug":true,"sc.ug":true,"go.ug":true,"ne.ug":true,"com.ug":true,"org.ug":true,"uk":true,"ac.uk":true,"co.uk":true,"gov.uk":true,"ltd.uk":true,"me.uk":true,"net.uk":true,"nhs.uk":true,"org.uk":true,"plc.uk":true,"police.uk":true,"*.sch.uk":true,"us":true,"dni.us":true,"fed.us":true,"isa.us":true,"kids.us":true,"nsn.us":true,"ak.us":true,"al.us":true,"ar.us":true,"as.us":true,"az.us":true,"ca.us":true,"co.us":true,"ct.us":true,"dc.us":true,"de.us":true,"fl.us":true,"ga.us":true,"gu.us":true,"hi.us":true,"ia.us":true,"id.us":true,"il.us":true,"in.us":true,"ks.us":true,"ky.us":true,"la.us":true,"ma.us":true,"md.us":true,"me.us":true,"mi.us":true,"mn.us":true,"mo.us":true,"ms.us":true,"mt.us":true,"nc.us":true,"nd.us":true,"ne.us":true,"nh.us":true,"nj.us":true,"nm.us":true,"nv.us":true,"ny.us":true,"oh.us":true,"ok.us":true,"or.us":true,"pa.us":true,"pr.us":true,"ri.us":true,"sc.us":true,"sd.us":true,"tn.us":true,"tx.us":true,"ut.us":true,"vi.us":true,"vt.us":true,"va.us":true,"wa.us":true,"wi.us":true,"wv.us":true,"wy.us":true,"k12.ak.us":true,"k12.al.us":true,"k12.ar.us":true,"k12.as.us":true,"k12.az.us":true,"k12.ca.us":true,"k12.co.us":true,"k12.ct.us":true,"k12.dc.us":true,"k12.de.us":true,"k12.fl.us":true,"k12.ga.us":true,"k12.gu.us":true,"k12.ia.us":true,"k12.id.us":true,"k12.il.us":true,"k12.in.us":true,"k12.ks.us":true,"k12.ky.us":true,"k12.la.us":true,"k12.ma.us":true,"k12.md.us":true,"k12.me.us":true,"k12.mi.us":true,"k12.mn.us":true,"k12.mo.us":true,"k12.ms.us":true,"k12.mt.us":true,"k12.nc.us":true,"k12.ne.us":true,"k12.nh.us":true,"k12.nj.us":true,"k12.nm.us":true,"k12.nv.us":true,"k12.ny.us":true,"k12.oh.us":true,"k12.ok.us":true,"k12.or.us":true,"k12.pa.us":true,"k12.pr.us":true,"k12.ri.us":true,"k12.sc.us":true,"k12.tn.us":true,"k12.tx.us":true,"k12.ut.us":true,"k12.vi.us":true,"k12.vt.us":true,"k12.va.us":true,"k12.wa.us":true,"k12.wi.us":true,"k12.wy.us":true,"cc.ak.us":true,"cc.al.us":true,"cc.ar.us":true,"cc.as.us":true,"cc.az.us":true,"cc.ca.us":true,"cc.co.us":true,"cc.ct.us":true,"cc.dc.us":true,"cc.de.us":true,"cc.fl.us":true,"cc.ga.us":true,"cc.gu.us":true,"cc.hi.us":true,"cc.ia.us":true,"cc.id.us":true,"cc.il.us":true,"cc.in.us":true,"cc.ks.us":true,"cc.ky.us":true,"cc.la.us":true,"cc.ma.us":true,"cc.md.us":true,"cc.me.us":true,"cc.mi.us":true,"cc.mn.us":true,"cc.mo.us":true,"cc.ms.us":true,"cc.mt.us":true,"cc.nc.us":true,"cc.nd.us":true,"cc.ne.us":true,"cc.nh.us":true,"cc.nj.us":true,"cc.nm.us":true,"cc.nv.us":true,"cc.ny.us":true,"cc.oh.us":true,"cc.ok.us":true,"cc.or.us":true,"cc.pa.us":true,"cc.pr.us":true,"cc.ri.us":true,"cc.sc.us":true,"cc.sd.us":true,"cc.tn.us":true,"cc.tx.us":true,"cc.ut.us":true,"cc.vi.us":true,"cc.vt.us":true,"cc.va.us":true,"cc.wa.us":true,"cc.wi.us":true,"cc.wv.us":true,"cc.wy.us":true,"lib.ak.us":true,"lib.al.us":true,"lib.ar.us":true,"lib.as.us":true,"lib.az.us":true,"lib.ca.us":true,"lib.co.us":true,"lib.ct.us":true,"lib.dc.us":true,"lib.fl.us":true,"lib.ga.us":true,"lib.gu.us":true,"lib.hi.us":true,"lib.ia.us":true,"lib.id.us":true,"lib.il.us":true,"lib.in.us":true,"lib.ks.us":true,"lib.ky.us":true,"lib.la.us":true,"lib.ma.us":true,"lib.md.us":true,"lib.me.us":true,"lib.mi.us":true,"lib.mn.us":true,"lib.mo.us":true,"lib.ms.us":true,"lib.mt.us":true,"lib.nc.us":true,"lib.nd.us":true,"lib.ne.us":true,"lib.nh.us":true,"lib.nj.us":true,"lib.nm.us":true,"lib.nv.us":true,"lib.ny.us":true,"lib.oh.us":true,"lib.ok.us":true,"lib.or.us":true,"lib.pa.us":true,"lib.pr.us":true,"lib.ri.us":true,"lib.sc.us":true,"lib.sd.us":true,"lib.tn.us":true,"lib.tx.us":true,"lib.ut.us":true,"lib.vi.us":true,"lib.vt.us":true,"lib.va.us":true,"lib.wa.us":true,"lib.wi.us":true,"lib.wy.us":true,"pvt.k12.ma.us":true,"chtr.k12.ma.us":true,"paroch.k12.ma.us":true,"ann-arbor.mi.us":true,"cog.mi.us":true,"dst.mi.us":true,"eaton.mi.us":true,"gen.mi.us":true,"mus.mi.us":true,"tec.mi.us":true,"washtenaw.mi.us":true,"uy":true,"com.uy":true,"edu.uy":true,"gub.uy":true,"mil.uy":true,"net.uy":true,"org.uy":true,"uz":true,"co.uz":true,"com.uz":true,"net.uz":true,"org.uz":true,"va":true,"vc":true,"com.vc":true,"net.vc":true,"org.vc":true,"gov.vc":true,"mil.vc":true,"edu.vc":true,"ve":true,"arts.ve":true,"co.ve":true,"com.ve":true,"e12.ve":true,"edu.ve":true,"firm.ve":true,"gob.ve":true,"gov.ve":true,"info.ve":true,"int.ve":true,"mil.ve":true,"net.ve":true,"org.ve":true,"rec.ve":true,"store.ve":true,"tec.ve":true,"web.ve":true,"vg":true,"vi":true,"co.vi":true,"com.vi":true,"k12.vi":true,"net.vi":true,"org.vi":true,"vn":true,"com.vn":true,"net.vn":true,"org.vn":true,"edu.vn":true,"gov.vn":true,"int.vn":true,"ac.vn":true,"biz.vn":true,"info.vn":true,"name.vn":true,"pro.vn":true,"health.vn":true,"vu":true,"com.vu":true,"edu.vu":true,"net.vu":true,"org.vu":true,"wf":true,"ws":true,"com.ws":true,"net.ws":true,"org.ws":true,"gov.ws":true,"edu.ws":true,"yt":true,"xn--mgbaam7a8h":true,"xn--y9a3aq":true,"xn--54b7fta0cc":true,"xn--90ae":true,"xn--90ais":true,"xn--fiqs8s":true,"xn--fiqz9s":true,"xn--lgbbat1ad8j":true,"xn--wgbh1c":true,"xn--e1a4c":true,"xn--node":true,"xn--qxam":true,"xn--j6w193g":true,"xn--2scrj9c":true,"xn--3hcrj9c":true,"xn--45br5cyl":true,"xn--h2breg3eve":true,"xn--h2brj9c8c":true,"xn--mgbgu82a":true,"xn--rvc1e0am3e":true,"xn--h2brj9c":true,"xn--mgbbh1a71e":true,"xn--fpcrj9c3d":true,"xn--gecrj9c":true,"xn--s9brj9c":true,"xn--45brj9c":true,"xn--xkc2dl3a5ee0h":true,"xn--mgba3a4f16a":true,"xn--mgba3a4fra":true,"xn--mgbtx2b":true,"xn--mgbayh7gpa":true,"xn--3e0b707e":true,"xn--80ao21a":true,"xn--fzc2c9e2c":true,"xn--xkc2al3hye2a":true,"xn--mgbc0a9azcg":true,"xn--d1alf":true,"xn--l1acc":true,"xn--mix891f":true,"xn--mix082f":true,"xn--mgbx4cd0ab":true,"xn--mgb9awbf":true,"xn--mgbai9azgqp6j":true,"xn--mgbai9a5eva00b":true,"xn--ygbi2ammx":true,"xn--90a3ac":true,"xn--o1ac.xn--90a3ac":true,"xn--c1avg.xn--90a3ac":true,"xn--90azh.xn--90a3ac":true,"xn--d1at.xn--90a3ac":true,"xn--o1ach.xn--90a3ac":true,"xn--80au.xn--90a3ac":true,"xn--p1ai":true,"xn--wgbl6a":true,"xn--mgberp4a5d4ar":true,"xn--mgberp4a5d4a87g":true,"xn--mgbqly7c0a67fbc":true,"xn--mgbqly7cvafr":true,"xn--mgbpl2fh":true,"xn--yfro4i67o":true,"xn--clchc0ea0b2g2a9gcd":true,"xn--ogbpf8fl":true,"xn--mgbtf8fl":true,"xn--o3cw4h":true,"xn--12c1fe0br.xn--o3cw4h":true,"xn--12co0c3b4eva.xn--o3cw4h":true,"xn--h3cuzk1di.xn--o3cw4h":true,"xn--o3cyx2a.xn--o3cw4h":true,"xn--m3ch0j3a.xn--o3cw4h":true,"xn--12cfi8ixb8l.xn--o3cw4h":true,"xn--pgbs0dh":true,"xn--kpry57d":true,"xn--kprw13d":true,"xn--nnx388a":true,"xn--j1amh":true,"xn--mgb2ddes":true,"xxx":true,"*.ye":true,"ac.za":true,"agric.za":true,"alt.za":true,"co.za":true,"edu.za":true,"gov.za":true,"grondar.za":true,"law.za":true,"mil.za":true,"net.za":true,"ngo.za":true,"nis.za":true,"nom.za":true,"org.za":true,"school.za":true,"tm.za":true,"web.za":true,"zm":true,"ac.zm":true,"biz.zm":true,"co.zm":true,"com.zm":true,"edu.zm":true,"gov.zm":true,"info.zm":true,"mil.zm":true,"net.zm":true,"org.zm":true,"sch.zm":true,"zw":true,"ac.zw":true,"co.zw":true,"gov.zw":true,"mil.zw":true,"org.zw":true,"aaa":true,"aarp":true,"abarth":true,"abb":true,"abbott":true,"abbvie":true,"abc":true,"able":true,"abogado":true,"abudhabi":true,"academy":true,"accenture":true,"accountant":true,"accountants":true,"aco":true,"active":true,"actor":true,"adac":true,"ads":true,"adult":true,"aeg":true,"aetna":true,"afamilycompany":true,"afl":true,"africa":true,"agakhan":true,"agency":true,"aig":true,"aigo":true,"airbus":true,"airforce":true,"airtel":true,"akdn":true,"alfaromeo":true,"alibaba":true,"alipay":true,"allfinanz":true,"allstate":true,"ally":true,"alsace":true,"alstom":true,"americanexpress":true,"americanfamily":true,"amex":true,"amfam":true,"amica":true,"amsterdam":true,"analytics":true,"android":true,"anquan":true,"anz":true,"aol":true,"apartments":true,"app":true,"apple":true,"aquarelle":true,"arab":true,"aramco":true,"archi":true,"army":true,"art":true,"arte":true,"asda":true,"associates":true,"athleta":true,"attorney":true,"auction":true,"audi":true,"audible":true,"audio":true,"auspost":true,"author":true,"auto":true,"autos":true,"avianca":true,"aws":true,"axa":true,"azure":true,"baby":true,"baidu":true,"banamex":true,"bananarepublic":true,"band":true,"bank":true,"bar":true,"barcelona":true,"barclaycard":true,"barclays":true,"barefoot":true,"bargains":true,"baseball":true,"basketball":true,"bauhaus":true,"bayern":true,"bbc":true,"bbt":true,"bbva":true,"bcg":true,"bcn":true,"beats":true,"beauty":true,"beer":true,"bentley":true,"berlin":true,"best":true,"bestbuy":true,"bet":true,"bharti":true,"bible":true,"bid":true,"bike":true,"bing":true,"bingo":true,"bio":true,"black":true,"blackfriday":true,"blanco":true,"blockbuster":true,"blog":true,"bloomberg":true,"blue":true,"bms":true,"bmw":true,"bnl":true,"bnpparibas":true,"boats":true,"boehringer":true,"bofa":true,"bom":true,"bond":true,"boo":true,"book":true,"booking":true,"boots":true,"bosch":true,"bostik":true,"boston":true,"bot":true,"boutique":true,"box":true,"bradesco":true,"bridgestone":true,"broadway":true,"broker":true,"brother":true,"brussels":true,"budapest":true,"bugatti":true,"build":true,"builders":true,"business":true,"buy":true,"buzz":true,"bzh":true,"cab":true,"cafe":true,"cal":true,"call":true,"calvinklein":true,"cam":true,"camera":true,"camp":true,"cancerresearch":true,"canon":true,"capetown":true,"capital":true,"capitalone":true,"car":true,"caravan":true,"cards":true,"care":true,"career":true,"careers":true,"cars":true,"cartier":true,"casa":true,"case":true,"caseih":true,"cash":true,"casino":true,"catering":true,"catholic":true,"cba":true,"cbn":true,"cbre":true,"cbs":true,"ceb":true,"center":true,"ceo":true,"cern":true,"cfa":true,"cfd":true,"chanel":true,"channel":true,"chase":true,"chat":true,"cheap":true,"chintai":true,"christmas":true,"chrome":true,"chrysler":true,"church":true,"cipriani":true,"circle":true,"cisco":true,"citadel":true,"citi":true,"citic":true,"city":true,"cityeats":true,"claims":true,"cleaning":true,"click":true,"clinic":true,"clinique":true,"clothing":true,"cloud":true,"club":true,"clubmed":true,"coach":true,"codes":true,"coffee":true,"college":true,"cologne":true,"comcast":true,"commbank":true,"community":true,"company":true,"compare":true,"computer":true,"comsec":true,"condos":true,"construction":true,"consulting":true,"contact":true,"contractors":true,"cooking":true,"cookingchannel":true,"cool":true,"corsica":true,"country":true,"coupon":true,"coupons":true,"courses":true,"credit":true,"creditcard":true,"creditunion":true,"cricket":true,"crown":true,"crs":true,"cruise":true,"cruises":true,"csc":true,"cuisinella":true,"cymru":true,"cyou":true,"dabur":true,"dad":true,"dance":true,"data":true,"date":true,"dating":true,"datsun":true,"day":true,"dclk":true,"dds":true,"deal":true,"dealer":true,"deals":true,"degree":true,"delivery":true,"dell":true,"deloitte":true,"delta":true,"democrat":true,"dental":true,"dentist":true,"desi":true,"design":true,"dev":true,"dhl":true,"diamonds":true,"diet":true,"digital":true,"direct":true,"directory":true,"discount":true,"discover":true,"dish":true,"diy":true,"dnp":true,"docs":true,"doctor":true,"dodge":true,"dog":true,"doha":true,"domains":true,"dot":true,"download":true,"drive":true,"dtv":true,"dubai":true,"duck":true,"dunlop":true,"duns":true,"dupont":true,"durban":true,"dvag":true,"dvr":true,"earth":true,"eat":true,"eco":true,"edeka":true,"education":true,"email":true,"emerck":true,"energy":true,"engineer":true,"engineering":true,"enterprises":true,"epost":true,"epson":true,"equipment":true,"ericsson":true,"erni":true,"esq":true,"estate":true,"esurance":true,"etisalat":true,"eurovision":true,"eus":true,"events":true,"everbank":true,"exchange":true,"expert":true,"exposed":true,"express":true,"extraspace":true,"fage":true,"fail":true,"fairwinds":true,"faith":true,"family":true,"fan":true,"fans":true,"farm":true,"farmers":true,"fashion":true,"fast":true,"fedex":true,"feedback":true,"ferrari":true,"ferrero":true,"fiat":true,"fidelity":true,"fido":true,"film":true,"final":true,"finance":true,"financial":true,"fire":true,"firestone":true,"firmdale":true,"fish":true,"fishing":true,"fit":true,"fitness":true,"flickr":true,"flights":true,"flir":true,"florist":true,"flowers":true,"fly":true,"foo":true,"food":true,"foodnetwork":true,"football":true,"ford":true,"forex":true,"forsale":true,"forum":true,"foundation":true,"fox":true,"free":true,"fresenius":true,"frl":true,"frogans":true,"frontdoor":true,"frontier":true,"ftr":true,"fujitsu":true,"fujixerox":true,"fun":true,"fund":true,"furniture":true,"futbol":true,"fyi":true,"gal":true,"gallery":true,"gallo":true,"gallup":true,"game":true,"games":true,"gap":true,"garden":true,"gbiz":true,"gdn":true,"gea":true,"gent":true,"genting":true,"george":true,"ggee":true,"gift":true,"gifts":true,"gives":true,"giving":true,"glade":true,"glass":true,"gle":true,"global":true,"globo":true,"gmail":true,"gmbh":true,"gmo":true,"gmx":true,"godaddy":true,"gold":true,"goldpoint":true,"golf":true,"goo":true,"goodhands":true,"goodyear":true,"goog":true,"google":true,"gop":true,"got":true,"grainger":true,"graphics":true,"gratis":true,"green":true,"gripe":true,"grocery":true,"group":true,"guardian":true,"gucci":true,"guge":true,"guide":true,"guitars":true,"guru":true,"hair":true,"hamburg":true,"hangout":true,"haus":true,"hbo":true,"hdfc":true,"hdfcbank":true,"health":true,"healthcare":true,"help":true,"helsinki":true,"here":true,"hermes":true,"hgtv":true,"hiphop":true,"hisamitsu":true,"hitachi":true,"hiv":true,"hkt":true,"hockey":true,"holdings":true,"holiday":true,"homedepot":true,"homegoods":true,"homes":true,"homesense":true,"honda":true,"honeywell":true,"horse":true,"hospital":true,"host":true,"hosting":true,"hot":true,"hoteles":true,"hotels":true,"hotmail":true,"house":true,"how":true,"hsbc":true,"hughes":true,"hyatt":true,"hyundai":true,"ibm":true,"icbc":true,"ice":true,"icu":true,"ieee":true,"ifm":true,"ikano":true,"imamat":true,"imdb":true,"immo":true,"immobilien":true,"industries":true,"infiniti":true,"ing":true,"ink":true,"institute":true,"insurance":true,"insure":true,"intel":true,"international":true,"intuit":true,"investments":true,"ipiranga":true,"irish":true,"iselect":true,"ismaili":true,"ist":true,"istanbul":true,"itau":true,"itv":true,"iveco":true,"iwc":true,"jaguar":true,"java":true,"jcb":true,"jcp":true,"jeep":true,"jetzt":true,"jewelry":true,"jio":true,"jlc":true,"jll":true,"jmp":true,"jnj":true,"joburg":true,"jot":true,"joy":true,"jpmorgan":true,"jprs":true,"juegos":true,"juniper":true,"kaufen":true,"kddi":true,"kerryhotels":true,"kerrylogistics":true,"kerryproperties":true,"kfh":true,"kia":true,"kim":true,"kinder":true,"kindle":true,"kitchen":true,"kiwi":true,"koeln":true,"komatsu":true,"kosher":true,"kpmg":true,"kpn":true,"krd":true,"kred":true,"kuokgroup":true,"kyoto":true,"lacaixa":true,"ladbrokes":true,"lamborghini":true,"lamer":true,"lancaster":true,"lancia":true,"lancome":true,"land":true,"landrover":true,"lanxess":true,"lasalle":true,"lat":true,"latino":true,"latrobe":true,"law":true,"lawyer":true,"lds":true,"lease":true,"leclerc":true,"lefrak":true,"legal":true,"lego":true,"lexus":true,"lgbt":true,"liaison":true,"lidl":true,"life":true,"lifeinsurance":true,"lifestyle":true,"lighting":true,"like":true,"lilly":true,"limited":true,"limo":true,"lincoln":true,"linde":true,"link":true,"lipsy":true,"live":true,"living":true,"lixil":true,"loan":true,"loans":true,"locker":true,"locus":true,"loft":true,"lol":true,"london":true,"lotte":true,"lotto":true,"love":true,"lpl":true,"lplfinancial":true,"ltd":true,"ltda":true,"lundbeck":true,"lupin":true,"luxe":true,"luxury":true,"macys":true,"madrid":true,"maif":true,"maison":true,"makeup":true,"man":true,"management":true,"mango":true,"map":true,"market":true,"marketing":true,"markets":true,"marriott":true,"marshalls":true,"maserati":true,"mattel":true,"mba":true,"mckinsey":true,"med":true,"media":true,"meet":true,"melbourne":true,"meme":true,"memorial":true,"men":true,"menu":true,"meo":true,"merckmsd":true,"metlife":true,"miami":true,"microsoft":true,"mini":true,"mint":true,"mit":true,"mitsubishi":true,"mlb":true,"mls":true,"mma":true,"mobile":true,"mobily":true,"moda":true,"moe":true,"moi":true,"mom":true,"monash":true,"money":true,"monster":true,"mopar":true,"mormon":true,"mortgage":true,"moscow":true,"moto":true,"motorcycles":true,"mov":true,"movie":true,"movistar":true,"msd":true,"mtn":true,"mtpc":true,"mtr":true,"mutual":true,"nab":true,"nadex":true,"nagoya":true,"nationwide":true,"natura":true,"navy":true,"nba":true,"nec":true,"netbank":true,"netflix":true,"network":true,"neustar":true,"new":true,"newholland":true,"news":true,"next":true,"nextdirect":true,"nexus":true,"nfl":true,"ngo":true,"nhk":true,"nico":true,"nike":true,"nikon":true,"ninja":true,"nissan":true,"nissay":true,"nokia":true,"northwesternmutual":true,"norton":true,"now":true,"nowruz":true,"nowtv":true,"nra":true,"nrw":true,"ntt":true,"nyc":true,"obi":true,"observer":true,"off":true,"office":true,"okinawa":true,"olayan":true,"olayangroup":true,"oldnavy":true,"ollo":true,"omega":true,"one":true,"ong":true,"onl":true,"online":true,"onyourside":true,"ooo":true,"open":true,"oracle":true,"orange":true,"organic":true,"origins":true,"osaka":true,"otsuka":true,"ott":true,"ovh":true,"page":true,"panasonic":true,"panerai":true,"paris":true,"pars":true,"partners":true,"parts":true,"party":true,"passagens":true,"pay":true,"pccw":true,"pet":true,"pfizer":true,"pharmacy":true,"phd":true,"philips":true,"phone":true,"photo":true,"photography":true,"photos":true,"physio":true,"piaget":true,"pics":true,"pictet":true,"pictures":true,"pid":true,"pin":true,"ping":true,"pink":true,"pioneer":true,"pizza":true,"place":true,"play":true,"playstation":true,"plumbing":true,"plus":true,"pnc":true,"pohl":true,"poker":true,"politie":true,"porn":true,"pramerica":true,"praxi":true,"press":true,"prime":true,"prod":true,"productions":true,"prof":true,"progressive":true,"promo":true,"properties":true,"property":true,"protection":true,"pru":true,"prudential":true,"pub":true,"pwc":true,"qpon":true,"quebec":true,"quest":true,"qvc":true,"racing":true,"radio":true,"raid":true,"read":true,"realestate":true,"realtor":true,"realty":true,"recipes":true,"red":true,"redstone":true,"redumbrella":true,"rehab":true,"reise":true,"reisen":true,"reit":true,"reliance":true,"ren":true,"rent":true,"rentals":true,"repair":true,"report":true,"republican":true,"rest":true,"restaurant":true,"review":true,"reviews":true,"rexroth":true,"rich":true,"richardli":true,"ricoh":true,"rightathome":true,"ril":true,"rio":true,"rip":true,"rmit":true,"rocher":true,"rocks":true,"rodeo":true,"rogers":true,"room":true,"rsvp":true,"rugby":true,"ruhr":true,"run":true,"rwe":true,"ryukyu":true,"saarland":true,"safe":true,"safety":true,"sakura":true,"sale":true,"salon":true,"samsclub":true,"samsung":true,"sandvik":true,"sandvikcoromant":true,"sanofi":true,"sap":true,"sapo":true,"sarl":true,"sas":true,"save":true,"saxo":true,"sbi":true,"sbs":true,"sca":true,"scb":true,"schaeffler":true,"schmidt":true,"scholarships":true,"school":true,"schule":true,"schwarz":true,"science":true,"scjohnson":true,"scor":true,"scot":true,"search":true,"seat":true,"secure":true,"security":true,"seek":true,"select":true,"sener":true,"services":true,"ses":true,"seven":true,"sew":true,"sex":true,"sexy":true,"sfr":true,"shangrila":true,"sharp":true,"shaw":true,"shell":true,"shia":true,"shiksha":true,"shoes":true,"shop":true,"shopping":true,"shouji":true,"show":true,"showtime":true,"shriram":true,"silk":true,"sina":true,"singles":true,"site":true,"ski":true,"skin":true,"sky":true,"skype":true,"sling":true,"smart":true,"smile":true,"sncf":true,"soccer":true,"social":true,"softbank":true,"software":true,"sohu":true,"solar":true,"solutions":true,"song":true,"sony":true,"soy":true,"space":true,"spiegel":true,"spot":true,"spreadbetting":true,"srl":true,"srt":true,"stada":true,"staples":true,"star":true,"starhub":true,"statebank":true,"statefarm":true,"statoil":true,"stc":true,"stcgroup":true,"stockholm":true,"storage":true,"store":true,"stream":true,"studio":true,"study":true,"style":true,"sucks":true,"supplies":true,"supply":true,"support":true,"surf":true,"surgery":true,"suzuki":true,"swatch":true,"swiftcover":true,"swiss":true,"sydney":true,"symantec":true,"systems":true,"tab":true,"taipei":true,"talk":true,"taobao":true,"target":true,"tatamotors":true,"tatar":true,"tattoo":true,"tax":true,"taxi":true,"tci":true,"tdk":true,"team":true,"tech":true,"technology":true,"telecity":true,"telefonica":true,"temasek":true,"tennis":true,"teva":true,"thd":true,"theater":true,"theatre":true,"tiaa":true,"tickets":true,"tienda":true,"tiffany":true,"tips":true,"tires":true,"tirol":true,"tjmaxx":true,"tjx":true,"tkmaxx":true,"tmall":true,"today":true,"tokyo":true,"tools":true,"top":true,"toray":true,"toshiba":true,"total":true,"tours":true,"town":true,"toyota":true,"toys":true,"trade":true,"trading":true,"training":true,"travelchannel":true,"travelers":true,"travelersinsurance":true,"trust":true,"trv":true,"tube":true,"tui":true,"tunes":true,"tushu":true,"tvs":true,"ubank":true,"ubs":true,"uconnect":true,"unicom":true,"university":true,"uno":true,"uol":true,"ups":true,"vacations":true,"vana":true,"vanguard":true,"vegas":true,"ventures":true,"verisign":true,"versicherung":true,"vet":true,"viajes":true,"video":true,"vig":true,"viking":true,"villas":true,"vin":true,"vip":true,"virgin":true,"visa":true,"vision":true,"vista":true,"vistaprint":true,"viva":true,"vivo":true,"vlaanderen":true,"vodka":true,"volkswagen":true,"volvo":true,"vote":true,"voting":true,"voto":true,"voyage":true,"vuelos":true,"wales":true,"walmart":true,"walter":true,"wang":true,"wanggou":true,"warman":true,"watch":true,"watches":true,"weather":true,"weatherchannel":true,"webcam":true,"weber":true,"website":true,"wed":true,"wedding":true,"weibo":true,"weir":true,"whoswho":true,"wien":true,"wiki":true,"williamhill":true,"win":true,"windows":true,"wine":true,"winners":true,"wme":true,"wolterskluwer":true,"woodside":true,"work":true,"works":true,"world":true,"wow":true,"wtc":true,"wtf":true,"xbox":true,"xerox":true,"xfinity":true,"xihuan":true,"xin":true,"xn--11b4c3d":true,"xn--1ck2e1b":true,"xn--1qqw23a":true,"xn--30rr7y":true,"xn--3bst00m":true,"xn--3ds443g":true,"xn--3oq18vl8pn36a":true,"xn--3pxu8k":true,"xn--42c2d9a":true,"xn--45q11c":true,"xn--4gbrim":true,"xn--55qw42g":true,"xn--55qx5d":true,"xn--5su34j936bgsg":true,"xn--5tzm5g":true,"xn--6frz82g":true,"xn--6qq986b3xl":true,"xn--80adxhks":true,"xn--80aqecdr1a":true,"xn--80asehdb":true,"xn--80aswg":true,"xn--8y0a063a":true,"xn--9dbq2a":true,"xn--9et52u":true,"xn--9krt00a":true,"xn--b4w605ferd":true,"xn--bck1b9a5dre4c":true,"xn--c1avg":true,"xn--c2br7g":true,"xn--cck2b3b":true,"xn--cg4bki":true,"xn--czr694b":true,"xn--czrs0t":true,"xn--czru2d":true,"xn--d1acj3b":true,"xn--eckvdtc9d":true,"xn--efvy88h":true,"xn--estv75g":true,"xn--fct429k":true,"xn--fhbei":true,"xn--fiq228c5hs":true,"xn--fiq64b":true,"xn--fjq720a":true,"xn--flw351e":true,"xn--fzys8d69uvgm":true,"xn--g2xx48c":true,"xn--gckr3f0f":true,"xn--gk3at1e":true,"xn--hxt814e":true,"xn--i1b6b1a6a2e":true,"xn--imr513n":true,"xn--io0a7i":true,"xn--j1aef":true,"xn--jlq61u9w7b":true,"xn--jvr189m":true,"xn--kcrx77d1x4a":true,"xn--kpu716f":true,"xn--kput3i":true,"xn--mgba3a3ejt":true,"xn--mgba7c0bbn0a":true,"xn--mgbaakc7dvf":true,"xn--mgbab2bd":true,"xn--mgbb9fbpob":true,"xn--mgbca7dzdo":true,"xn--mgbi4ecexp":true,"xn--mgbt3dhd":true,"xn--mk1bu44c":true,"xn--mxtq1m":true,"xn--ngbc5azd":true,"xn--ngbe9e0a":true,"xn--ngbrx":true,"xn--nqv7f":true,"xn--nqv7fs00ema":true,"xn--nyqy26a":true,"xn--p1acf":true,"xn--pbt977c":true,"xn--pssy2u":true,"xn--q9jyb4c":true,"xn--qcka1pmc":true,"xn--rhqv96g":true,"xn--rovu88b":true,"xn--ses554g":true,"xn--t60b56a":true,"xn--tckwe":true,"xn--tiq49xqyj":true,"xn--unup4y":true,"xn--vermgensberater-ctb":true,"xn--vermgensberatung-pwb":true,"xn--vhquv":true,"xn--vuq861b":true,"xn--w4r85el8fhu5dnra":true,"xn--w4rs40l":true,"xn--xhq521b":true,"xn--zfr164b":true,"xperia":true,"xyz":true,"yachts":true,"yahoo":true,"yamaxun":true,"yandex":true,"yodobashi":true,"yoga":true,"yokohama":true,"you":true,"youtube":true,"yun":true,"zappos":true,"zara":true,"zero":true,"zip":true,"zippo":true,"zone":true,"zuerich":true,"cc.ua":true,"inf.ua":true,"ltd.ua":true,"1password.ca":true,"1password.com":true,"1password.eu":true,"beep.pl":true,"*.compute.estate":true,"*.alces.network":true,"alwaysdata.net":true,"cloudfront.net":true,"*.compute.amazonaws.com":true,"*.compute-1.amazonaws.com":true,"*.compute.amazonaws.com.cn":true,"us-east-1.amazonaws.com":true,"cn-north-1.eb.amazonaws.com.cn":true,"elasticbeanstalk.com":true,"ap-northeast-1.elasticbeanstalk.com":true,"ap-northeast-2.elasticbeanstalk.com":true,"ap-south-1.elasticbeanstalk.com":true,"ap-southeast-1.elasticbeanstalk.com":true,"ap-southeast-2.elasticbeanstalk.com":true,"ca-central-1.elasticbeanstalk.com":true,"eu-central-1.elasticbeanstalk.com":true,"eu-west-1.elasticbeanstalk.com":true,"eu-west-2.elasticbeanstalk.com":true,"eu-west-3.elasticbeanstalk.com":true,"sa-east-1.elasticbeanstalk.com":true,"us-east-1.elasticbeanstalk.com":true,"us-east-2.elasticbeanstalk.com":true,"us-gov-west-1.elasticbeanstalk.com":true,"us-west-1.elasticbeanstalk.com":true,"us-west-2.elasticbeanstalk.com":true,"*.elb.amazonaws.com":true,"*.elb.amazonaws.com.cn":true,"s3.amazonaws.com":true,"s3-ap-northeast-1.amazonaws.com":true,"s3-ap-northeast-2.amazonaws.com":true,"s3-ap-south-1.amazonaws.com":true,"s3-ap-southeast-1.amazonaws.com":true,"s3-ap-southeast-2.amazonaws.com":true,"s3-ca-central-1.amazonaws.com":true,"s3-eu-central-1.amazonaws.com":true,"s3-eu-west-1.amazonaws.com":true,"s3-eu-west-2.amazonaws.com":true,"s3-eu-west-3.amazonaws.com":true,"s3-external-1.amazonaws.com":true,"s3-fips-us-gov-west-1.amazonaws.com":true,"s3-sa-east-1.amazonaws.com":true,"s3-us-gov-west-1.amazonaws.com":true,"s3-us-east-2.amazonaws.com":true,"s3-us-west-1.amazonaws.com":true,"s3-us-west-2.amazonaws.com":true,"s3.ap-northeast-2.amazonaws.com":true,"s3.ap-south-1.amazonaws.com":true,"s3.cn-north-1.amazonaws.com.cn":true,"s3.ca-central-1.amazonaws.com":true,"s3.eu-central-1.amazonaws.com":true,"s3.eu-west-2.amazonaws.com":true,"s3.eu-west-3.amazonaws.com":true,"s3.us-east-2.amazonaws.com":true,"s3.dualstack.ap-northeast-1.amazonaws.com":true,"s3.dualstack.ap-northeast-2.amazonaws.com":true,"s3.dualstack.ap-south-1.amazonaws.com":true,"s3.dualstack.ap-southeast-1.amazonaws.com":true,"s3.dualstack.ap-southeast-2.amazonaws.com":true,"s3.dualstack.ca-central-1.amazonaws.com":true,"s3.dualstack.eu-central-1.amazonaws.com":true,"s3.dualstack.eu-west-1.amazonaws.com":true,"s3.dualstack.eu-west-2.amazonaws.com":true,"s3.dualstack.eu-west-3.amazonaws.com":true,"s3.dualstack.sa-east-1.amazonaws.com":true,"s3.dualstack.us-east-1.amazonaws.com":true,"s3.dualstack.us-east-2.amazonaws.com":true,"s3-website-us-east-1.amazonaws.com":true,"s3-website-us-west-1.amazonaws.com":true,"s3-website-us-west-2.amazonaws.com":true,"s3-website-ap-northeast-1.amazonaws.com":true,"s3-website-ap-southeast-1.amazonaws.com":true,"s3-website-ap-southeast-2.amazonaws.com":true,"s3-website-eu-west-1.amazonaws.com":true,"s3-website-sa-east-1.amazonaws.com":true,"s3-website.ap-northeast-2.amazonaws.com":true,"s3-website.ap-south-1.amazonaws.com":true,"s3-website.ca-central-1.amazonaws.com":true,"s3-website.eu-central-1.amazonaws.com":true,"s3-website.eu-west-2.amazonaws.com":true,"s3-website.eu-west-3.amazonaws.com":true,"s3-website.us-east-2.amazonaws.com":true,"t3l3p0rt.net":true,"tele.amune.org":true,"on-aptible.com":true,"user.party.eus":true,"pimienta.org":true,"poivron.org":true,"potager.org":true,"sweetpepper.org":true,"myasustor.com":true,"myfritz.net":true,"*.awdev.ca":true,"*.advisor.ws":true,"backplaneapp.io":true,"betainabox.com":true,"bnr.la":true,"boomla.net":true,"boxfuse.io":true,"square7.ch":true,"bplaced.com":true,"bplaced.de":true,"square7.de":true,"bplaced.net":true,"square7.net":true,"browsersafetymark.io":true,"mycd.eu":true,"ae.org":true,"ar.com":true,"br.com":true,"cn.com":true,"com.de":true,"com.se":true,"de.com":true,"eu.com":true,"gb.com":true,"gb.net":true,"hu.com":true,"hu.net":true,"jp.net":true,"jpn.com":true,"kr.com":true,"mex.com":true,"no.com":true,"qc.com":true,"ru.com":true,"sa.com":true,"se.com":true,"se.net":true,"uk.com":true,"uk.net":true,"us.com":true,"uy.com":true,"za.bz":true,"za.com":true,"africa.com":true,"gr.com":true,"in.net":true,"us.org":true,"co.com":true,"c.la":true,"certmgr.org":true,"xenapponazure.com":true,"virtueeldomein.nl":true,"c66.me":true,"cloud66.ws":true,"jdevcloud.com":true,"wpdevcloud.com":true,"cloudaccess.host":true,"freesite.host":true,"cloudaccess.net":true,"cloudcontrolled.com":true,"cloudcontrolapp.com":true,"co.ca":true,"co.cz":true,"c.cdn77.org":true,"cdn77-ssl.net":true,"r.cdn77.net":true,"rsc.cdn77.org":true,"ssl.origin.cdn77-secure.org":true,"cloudns.asia":true,"cloudns.biz":true,"cloudns.club":true,"cloudns.cc":true,"cloudns.eu":true,"cloudns.in":true,"cloudns.info":true,"cloudns.org":true,"cloudns.pro":true,"cloudns.pw":true,"cloudns.us":true,"co.nl":true,"co.no":true,"webhosting.be":true,"hosting-cluster.nl":true,"dyn.cosidns.de":true,"dynamisches-dns.de":true,"dnsupdater.de":true,"internet-dns.de":true,"l-o-g-i-n.de":true,"dynamic-dns.info":true,"feste-ip.net":true,"knx-server.net":true,"static-access.net":true,"realm.cz":true,"*.cryptonomic.net":true,"cupcake.is":true,"cyon.link":true,"cyon.site":true,"daplie.me":true,"localhost.daplie.me":true,"biz.dk":true,"co.dk":true,"firm.dk":true,"reg.dk":true,"store.dk":true,"debian.net":true,"dedyn.io":true,"dnshome.de":true,"drayddns.com":true,"dreamhosters.com":true,"mydrobo.com":true,"drud.io":true,"drud.us":true,"duckdns.org":true,"dy.fi":true,"tunk.org":true,"dyndns-at-home.com":true,"dyndns-at-work.com":true,"dyndns-blog.com":true,"dyndns-free.com":true,"dyndns-home.com":true,"dyndns-ip.com":true,"dyndns-mail.com":true,"dyndns-office.com":true,"dyndns-pics.com":true,"dyndns-remote.com":true,"dyndns-server.com":true,"dyndns-web.com":true,"dyndns-wiki.com":true,"dyndns-work.com":true,"dyndns.biz":true,"dyndns.info":true,"dyndns.org":true,"dyndns.tv":true,"at-band-camp.net":true,"ath.cx":true,"barrel-of-knowledge.info":true,"barrell-of-knowledge.info":true,"better-than.tv":true,"blogdns.com":true,"blogdns.net":true,"blogdns.org":true,"blogsite.org":true,"boldlygoingnowhere.org":true,"broke-it.net":true,"buyshouses.net":true,"cechire.com":true,"dnsalias.com":true,"dnsalias.net":true,"dnsalias.org":true,"dnsdojo.com":true,"dnsdojo.net":true,"dnsdojo.org":true,"does-it.net":true,"doesntexist.com":true,"doesntexist.org":true,"dontexist.com":true,"dontexist.net":true,"dontexist.org":true,"doomdns.com":true,"doomdns.org":true,"dvrdns.org":true,"dyn-o-saur.com":true,"dynalias.com":true,"dynalias.net":true,"dynalias.org":true,"dynathome.net":true,"dyndns.ws":true,"endofinternet.net":true,"endofinternet.org":true,"endoftheinternet.org":true,"est-a-la-maison.com":true,"est-a-la-masion.com":true,"est-le-patron.com":true,"est-mon-blogueur.com":true,"for-better.biz":true,"for-more.biz":true,"for-our.info":true,"for-some.biz":true,"for-the.biz":true,"forgot.her.name":true,"forgot.his.name":true,"from-ak.com":true,"from-al.com":true,"from-ar.com":true,"from-az.net":true,"from-ca.com":true,"from-co.net":true,"from-ct.com":true,"from-dc.com":true,"from-de.com":true,"from-fl.com":true,"from-ga.com":true,"from-hi.com":true,"from-ia.com":true,"from-id.com":true,"from-il.com":true,"from-in.com":true,"from-ks.com":true,"from-ky.com":true,"from-la.net":true,"from-ma.com":true,"from-md.com":true,"from-me.org":true,"from-mi.com":true,"from-mn.com":true,"from-mo.com":true,"from-ms.com":true,"from-mt.com":true,"from-nc.com":true,"from-nd.com":true,"from-ne.com":true,"from-nh.com":true,"from-nj.com":true,"from-nm.com":true,"from-nv.com":true,"from-ny.net":true,"from-oh.com":true,"from-ok.com":true,"from-or.com":true,"from-pa.com":true,"from-pr.com":true,"from-ri.com":true,"from-sc.com":true,"from-sd.com":true,"from-tn.com":true,"from-tx.com":true,"from-ut.com":true,"from-va.com":true,"from-vt.com":true,"from-wa.com":true,"from-wi.com":true,"from-wv.com":true,"from-wy.com":true,"ftpaccess.cc":true,"fuettertdasnetz.de":true,"game-host.org":true,"game-server.cc":true,"getmyip.com":true,"gets-it.net":true,"go.dyndns.org":true,"gotdns.com":true,"gotdns.org":true,"groks-the.info":true,"groks-this.info":true,"ham-radio-op.net":true,"here-for-more.info":true,"hobby-site.com":true,"hobby-site.org":true,"home.dyndns.org":true,"homedns.org":true,"homeftp.net":true,"homeftp.org":true,"homeip.net":true,"homelinux.com":true,"homelinux.net":true,"homelinux.org":true,"homeunix.com":true,"homeunix.net":true,"homeunix.org":true,"iamallama.com":true,"in-the-band.net":true,"is-a-anarchist.com":true,"is-a-blogger.com":true,"is-a-bookkeeper.com":true,"is-a-bruinsfan.org":true,"is-a-bulls-fan.com":true,"is-a-candidate.org":true,"is-a-caterer.com":true,"is-a-celticsfan.org":true,"is-a-chef.com":true,"is-a-chef.net":true,"is-a-chef.org":true,"is-a-conservative.com":true,"is-a-cpa.com":true,"is-a-cubicle-slave.com":true,"is-a-democrat.com":true,"is-a-designer.com":true,"is-a-doctor.com":true,"is-a-financialadvisor.com":true,"is-a-geek.com":true,"is-a-geek.net":true,"is-a-geek.org":true,"is-a-green.com":true,"is-a-guru.com":true,"is-a-hard-worker.com":true,"is-a-hunter.com":true,"is-a-knight.org":true,"is-a-landscaper.com":true,"is-a-lawyer.com":true,"is-a-liberal.com":true,"is-a-libertarian.com":true,"is-a-linux-user.org":true,"is-a-llama.com":true,"is-a-musician.com":true,"is-a-nascarfan.com":true,"is-a-nurse.com":true,"is-a-painter.com":true,"is-a-patsfan.org":true,"is-a-personaltrainer.com":true,"is-a-photographer.com":true,"is-a-player.com":true,"is-a-republican.com":true,"is-a-rockstar.com":true,"is-a-socialist.com":true,"is-a-soxfan.org":true,"is-a-student.com":true,"is-a-teacher.com":true,"is-a-techie.com":true,"is-a-therapist.com":true,"is-an-accountant.com":true,"is-an-actor.com":true,"is-an-actress.com":true,"is-an-anarchist.com":true,"is-an-artist.com":true,"is-an-engineer.com":true,"is-an-entertainer.com":true,"is-by.us":true,"is-certified.com":true,"is-found.org":true,"is-gone.com":true,"is-into-anime.com":true,"is-into-cars.com":true,"is-into-cartoons.com":true,"is-into-games.com":true,"is-leet.com":true,"is-lost.org":true,"is-not-certified.com":true,"is-saved.org":true,"is-slick.com":true,"is-uberleet.com":true,"is-very-bad.org":true,"is-very-evil.org":true,"is-very-good.org":true,"is-very-nice.org":true,"is-very-sweet.org":true,"is-with-theband.com":true,"isa-geek.com":true,"isa-geek.net":true,"isa-geek.org":true,"isa-hockeynut.com":true,"issmarterthanyou.com":true,"isteingeek.de":true,"istmein.de":true,"kicks-ass.net":true,"kicks-ass.org":true,"knowsitall.info":true,"land-4-sale.us":true,"lebtimnetz.de":true,"leitungsen.de":true,"likes-pie.com":true,"likescandy.com":true,"merseine.nu":true,"mine.nu":true,"misconfused.org":true,"mypets.ws":true,"myphotos.cc":true,"neat-url.com":true,"office-on-the.net":true,"on-the-web.tv":true,"podzone.net":true,"podzone.org":true,"readmyblog.org":true,"saves-the-whales.com":true,"scrapper-site.net":true,"scrapping.cc":true,"selfip.biz":true,"selfip.com":true,"selfip.info":true,"selfip.net":true,"selfip.org":true,"sells-for-less.com":true,"sells-for-u.com":true,"sells-it.net":true,"sellsyourhome.org":true,"servebbs.com":true,"servebbs.net":true,"servebbs.org":true,"serveftp.net":true,"serveftp.org":true,"servegame.org":true,"shacknet.nu":true,"simple-url.com":true,"space-to-rent.com":true,"stuff-4-sale.org":true,"stuff-4-sale.us":true,"teaches-yoga.com":true,"thruhere.net":true,"traeumtgerade.de":true,"webhop.biz":true,"webhop.info":true,"webhop.net":true,"webhop.org":true,"worse-than.tv":true,"writesthisblog.com":true,"ddnss.de":true,"dyn.ddnss.de":true,"dyndns.ddnss.de":true,"dyndns1.de":true,"dyn-ip24.de":true,"home-webserver.de":true,"dyn.home-webserver.de":true,"myhome-server.de":true,"ddnss.org":true,"definima.net":true,"definima.io":true,"ddnsfree.com":true,"ddnsgeek.com":true,"giize.com":true,"gleeze.com":true,"kozow.com":true,"loseyourip.com":true,"ooguy.com":true,"theworkpc.com":true,"casacam.net":true,"dynu.net":true,"accesscam.org":true,"camdvr.org":true,"freeddns.org":true,"mywire.org":true,"webredirect.org":true,"myddns.rocks":true,"blogsite.xyz":true,"dynv6.net":true,"e4.cz":true,"mytuleap.com":true,"enonic.io":true,"customer.enonic.io":true,"eu.org":true,"al.eu.org":true,"asso.eu.org":true,"at.eu.org":true,"au.eu.org":true,"be.eu.org":true,"bg.eu.org":true,"ca.eu.org":true,"cd.eu.org":true,"ch.eu.org":true,"cn.eu.org":true,"cy.eu.org":true,"cz.eu.org":true,"de.eu.org":true,"dk.eu.org":true,"edu.eu.org":true,"ee.eu.org":true,"es.eu.org":true,"fi.eu.org":true,"fr.eu.org":true,"gr.eu.org":true,"hr.eu.org":true,"hu.eu.org":true,"ie.eu.org":true,"il.eu.org":true,"in.eu.org":true,"int.eu.org":true,"is.eu.org":true,"it.eu.org":true,"jp.eu.org":true,"kr.eu.org":true,"lt.eu.org":true,"lu.eu.org":true,"lv.eu.org":true,"mc.eu.org":true,"me.eu.org":true,"mk.eu.org":true,"mt.eu.org":true,"my.eu.org":true,"net.eu.org":true,"ng.eu.org":true,"nl.eu.org":true,"no.eu.org":true,"nz.eu.org":true,"paris.eu.org":true,"pl.eu.org":true,"pt.eu.org":true,"q-a.eu.org":true,"ro.eu.org":true,"ru.eu.org":true,"se.eu.org":true,"si.eu.org":true,"sk.eu.org":true,"tr.eu.org":true,"uk.eu.org":true,"us.eu.org":true,"eu-1.evennode.com":true,"eu-2.evennode.com":true,"eu-3.evennode.com":true,"eu-4.evennode.com":true,"us-1.evennode.com":true,"us-2.evennode.com":true,"us-3.evennode.com":true,"us-4.evennode.com":true,"twmail.cc":true,"twmail.net":true,"twmail.org":true,"mymailer.com.tw":true,"url.tw":true,"apps.fbsbx.com":true,"ru.net":true,"adygeya.ru":true,"bashkiria.ru":true,"bir.ru":true,"cbg.ru":true,"com.ru":true,"dagestan.ru":true,"grozny.ru":true,"kalmykia.ru":true,"kustanai.ru":true,"marine.ru":true,"mordovia.ru":true,"msk.ru":true,"mytis.ru":true,"nalchik.ru":true,"nov.ru":true,"pyatigorsk.ru":true,"spb.ru":true,"vladikavkaz.ru":true,"vladimir.ru":true,"abkhazia.su":true,"adygeya.su":true,"aktyubinsk.su":true,"arkhangelsk.su":true,"armenia.su":true,"ashgabad.su":true,"azerbaijan.su":true,"balashov.su":true,"bashkiria.su":true,"bryansk.su":true,"bukhara.su":true,"chimkent.su":true,"dagestan.su":true,"east-kazakhstan.su":true,"exnet.su":true,"georgia.su":true,"grozny.su":true,"ivanovo.su":true,"jambyl.su":true,"kalmykia.su":true,"kaluga.su":true,"karacol.su":true,"karaganda.su":true,"karelia.su":true,"khakassia.su":true,"krasnodar.su":true,"kurgan.su":true,"kustanai.su":true,"lenug.su":true,"mangyshlak.su":true,"mordovia.su":true,"msk.su":true,"murmansk.su":true,"nalchik.su":true,"navoi.su":true,"north-kazakhstan.su":true,"nov.su":true,"obninsk.su":true,"penza.su":true,"pokrovsk.su":true,"sochi.su":true,"spb.su":true,"tashkent.su":true,"termez.su":true,"togliatti.su":true,"troitsk.su":true,"tselinograd.su":true,"tula.su":true,"tuva.su":true,"vladikavkaz.su":true,"vladimir.su":true,"vologda.su":true,"channelsdvr.net":true,"fastlylb.net":true,"map.fastlylb.net":true,"freetls.fastly.net":true,"map.fastly.net":true,"a.prod.fastly.net":true,"global.prod.fastly.net":true,"a.ssl.fastly.net":true,"b.ssl.fastly.net":true,"global.ssl.fastly.net":true,"fhapp.xyz":true,"fedorainfracloud.org":true,"fedorapeople.org":true,"cloud.fedoraproject.org":true,"app.os.fedoraproject.org":true,"app.os.stg.fedoraproject.org":true,"filegear.me":true,"firebaseapp.com":true,"flynnhub.com":true,"flynnhosting.net":true,"freebox-os.com":true,"freeboxos.com":true,"fbx-os.fr":true,"fbxos.fr":true,"freebox-os.fr":true,"freeboxos.fr":true,"*.futurecms.at":true,"futurehosting.at":true,"futuremailing.at":true,"*.ex.ortsinfo.at":true,"*.kunden.ortsinfo.at":true,"*.statics.cloud":true,"service.gov.uk":true,"github.io":true,"githubusercontent.com":true,"gitlab.io":true,"homeoffice.gov.uk":true,"ro.im":true,"shop.ro":true,"goip.de":true,"*.0emm.com":true,"appspot.com":true,"blogspot.ae":true,"blogspot.al":true,"blogspot.am":true,"blogspot.ba":true,"blogspot.be":true,"blogspot.bg":true,"blogspot.bj":true,"blogspot.ca":true,"blogspot.cf":true,"blogspot.ch":true,"blogspot.cl":true,"blogspot.co.at":true,"blogspot.co.id":true,"blogspot.co.il":true,"blogspot.co.ke":true,"blogspot.co.nz":true,"blogspot.co.uk":true,"blogspot.co.za":true,"blogspot.com":true,"blogspot.com.ar":true,"blogspot.com.au":true,"blogspot.com.br":true,"blogspot.com.by":true,"blogspot.com.co":true,"blogspot.com.cy":true,"blogspot.com.ee":true,"blogspot.com.eg":true,"blogspot.com.es":true,"blogspot.com.mt":true,"blogspot.com.ng":true,"blogspot.com.tr":true,"blogspot.com.uy":true,"blogspot.cv":true,"blogspot.cz":true,"blogspot.de":true,"blogspot.dk":true,"blogspot.fi":true,"blogspot.fr":true,"blogspot.gr":true,"blogspot.hk":true,"blogspot.hr":true,"blogspot.hu":true,"blogspot.ie":true,"blogspot.in":true,"blogspot.is":true,"blogspot.it":true,"blogspot.jp":true,"blogspot.kr":true,"blogspot.li":true,"blogspot.lt":true,"blogspot.lu":true,"blogspot.md":true,"blogspot.mk":true,"blogspot.mr":true,"blogspot.mx":true,"blogspot.my":true,"blogspot.nl":true,"blogspot.no":true,"blogspot.pe":true,"blogspot.pt":true,"blogspot.qa":true,"blogspot.re":true,"blogspot.ro":true,"blogspot.rs":true,"blogspot.ru":true,"blogspot.se":true,"blogspot.sg":true,"blogspot.si":true,"blogspot.sk":true,"blogspot.sn":true,"blogspot.td":true,"blogspot.tw":true,"blogspot.ug":true,"blogspot.vn":true,"cloudfunctions.net":true,"cloud.goog":true,"codespot.com":true,"googleapis.com":true,"googlecode.com":true,"pagespeedmobilizer.com":true,"publishproxy.com":true,"withgoogle.com":true,"withyoutube.com":true,"hashbang.sh":true,"hasura-app.io":true,"hepforge.org":true,"herokuapp.com":true,"herokussl.com":true,"moonscale.net":true,"iki.fi":true,"biz.at":true,"info.at":true,"info.cx":true,"ac.leg.br":true,"al.leg.br":true,"am.leg.br":true,"ap.leg.br":true,"ba.leg.br":true,"ce.leg.br":true,"df.leg.br":true,"es.leg.br":true,"go.leg.br":true,"ma.leg.br":true,"mg.leg.br":true,"ms.leg.br":true,"mt.leg.br":true,"pa.leg.br":true,"pb.leg.br":true,"pe.leg.br":true,"pi.leg.br":true,"pr.leg.br":true,"rj.leg.br":true,"rn.leg.br":true,"ro.leg.br":true,"rr.leg.br":true,"rs.leg.br":true,"sc.leg.br":true,"se.leg.br":true,"sp.leg.br":true,"to.leg.br":true,"pixolino.com":true,"ipifony.net":true,"*.triton.zone":true,"*.cns.joyent.com":true,"js.org":true,"keymachine.de":true,"knightpoint.systems":true,"co.krd":true,"edu.krd":true,"git-repos.de":true,"lcube-server.de":true,"svn-repos.de":true,"linkyard.cloud":true,"linkyard-cloud.ch":true,"we.bs":true,"barsy.bg":true,"barsyonline.com":true,"barsy.de":true,"barsy.eu":true,"barsy.in":true,"barsy.net":true,"barsy.online":true,"barsy.support":true,"*.magentosite.cloud":true,"hb.cldmail.ru":true,"cloud.metacentrum.cz":true,"custom.metacentrum.cz":true,"meteorapp.com":true,"eu.meteorapp.com":true,"co.pl":true,"azurewebsites.net":true,"azure-mobile.net":true,"cloudapp.net":true,"mozilla-iot.org":true,"bmoattachments.org":true,"net.ru":true,"org.ru":true,"pp.ru":true,"bitballoon.com":true,"netlify.com":true,"4u.com":true,"ngrok.io":true,"nh-serv.co.uk":true,"nfshost.com":true,"nsupdate.info":true,"nerdpol.ovh":true,"blogsyte.com":true,"brasilia.me":true,"cable-modem.org":true,"ciscofreak.com":true,"collegefan.org":true,"couchpotatofries.org":true,"damnserver.com":true,"ddns.me":true,"ditchyourip.com":true,"dnsfor.me":true,"dnsiskinky.com":true,"dvrcam.info":true,"dynns.com":true,"eating-organic.net":true,"fantasyleague.cc":true,"geekgalaxy.com":true,"golffan.us":true,"health-carereform.com":true,"homesecuritymac.com":true,"homesecuritypc.com":true,"hopto.me":true,"ilovecollege.info":true,"loginto.me":true,"mlbfan.org":true,"mmafan.biz":true,"myactivedirectory.com":true,"mydissent.net":true,"myeffect.net":true,"mymediapc.net":true,"mypsx.net":true,"mysecuritycamera.com":true,"mysecuritycamera.net":true,"mysecuritycamera.org":true,"net-freaks.com":true,"nflfan.org":true,"nhlfan.net":true,"no-ip.ca":true,"no-ip.co.uk":true,"no-ip.net":true,"noip.us":true,"onthewifi.com":true,"pgafan.net":true,"point2this.com":true,"pointto.us":true,"privatizehealthinsurance.net":true,"quicksytes.com":true,"read-books.org":true,"securitytactics.com":true,"serveexchange.com":true,"servehumour.com":true,"servep2p.com":true,"servesarcasm.com":true,"stufftoread.com":true,"ufcfan.org":true,"unusualperson.com":true,"workisboring.com":true,"3utilities.com":true,"bounceme.net":true,"ddns.net":true,"ddnsking.com":true,"gotdns.ch":true,"hopto.org":true,"myftp.biz":true,"myftp.org":true,"myvnc.com":true,"no-ip.biz":true,"no-ip.info":true,"no-ip.org":true,"noip.me":true,"redirectme.net":true,"servebeer.com":true,"serveblog.net":true,"servecounterstrike.com":true,"serveftp.com":true,"servegame.com":true,"servehalflife.com":true,"servehttp.com":true,"serveirc.com":true,"serveminecraft.net":true,"servemp3.com":true,"servepics.com":true,"servequake.com":true,"sytes.net":true,"webhop.me":true,"zapto.org":true,"stage.nodeart.io":true,"nodum.co":true,"nodum.io":true,"nyc.mn":true,"nom.ae":true,"nom.ai":true,"nom.al":true,"nym.by":true,"nym.bz":true,"nom.cl":true,"nom.gd":true,"nom.gl":true,"nym.gr":true,"nom.gt":true,"nom.hn":true,"nom.im":true,"nym.kz":true,"nym.la":true,"nom.li":true,"nym.li":true,"nym.lt":true,"nym.lu":true,"nym.me":true,"nom.mk":true,"nym.mx":true,"nom.nu":true,"nym.nz":true,"nym.pe":true,"nym.pt":true,"nom.pw":true,"nom.qa":true,"nom.rs":true,"nom.si":true,"nym.sk":true,"nym.su":true,"nym.sx":true,"nym.tw":true,"nom.ug":true,"nom.uy":true,"nom.vc":true,"nom.vg":true,"cya.gg":true,"nid.io":true,"opencraft.hosting":true,"operaunite.com":true,"outsystemscloud.com":true,"ownprovider.com":true,"oy.lc":true,"pgfog.com":true,"pagefrontapp.com":true,"art.pl":true,"gliwice.pl":true,"krakow.pl":true,"poznan.pl":true,"wroc.pl":true,"zakopane.pl":true,"pantheonsite.io":true,"gotpantheon.com":true,"mypep.link":true,"on-web.fr":true,"*.platform.sh":true,"*.platformsh.site":true,"xen.prgmr.com":true,"priv.at":true,"protonet.io":true,"chirurgiens-dentistes-en-france.fr":true,"byen.site":true,"qa2.com":true,"dev-myqnapcloud.com":true,"alpha-myqnapcloud.com":true,"myqnapcloud.com":true,"*.quipelements.com":true,"vapor.cloud":true,"vaporcloud.io":true,"rackmaze.com":true,"rackmaze.net":true,"rhcloud.com":true,"resindevice.io":true,"devices.resinstaging.io":true,"hzc.io":true,"wellbeingzone.eu":true,"ptplus.fit":true,"wellbeingzone.co.uk":true,"sandcats.io":true,"logoip.de":true,"logoip.com":true,"schokokeks.net":true,"scrysec.com":true,"firewall-gateway.com":true,"firewall-gateway.de":true,"my-gateway.de":true,"my-router.de":true,"spdns.de":true,"spdns.eu":true,"firewall-gateway.net":true,"my-firewall.org":true,"myfirewall.org":true,"spdns.org":true,"*.s5y.io":true,"*.sensiosite.cloud":true,"biz.ua":true,"co.ua":true,"pp.ua":true,"shiftedit.io":true,"myshopblocks.com":true,"1kapp.com":true,"appchizi.com":true,"applinzi.com":true,"sinaapp.com":true,"vipsinaapp.com":true,"bounty-full.com":true,"alpha.bounty-full.com":true,"beta.bounty-full.com":true,"static.land":true,"dev.static.land":true,"sites.static.land":true,"apps.lair.io":true,"*.stolos.io":true,"spacekit.io":true,"stackspace.space":true,"storj.farm":true,"temp-dns.com":true,"diskstation.me":true,"dscloud.biz":true,"dscloud.me":true,"dscloud.mobi":true,"dsmynas.com":true,"dsmynas.net":true,"dsmynas.org":true,"familyds.com":true,"familyds.net":true,"familyds.org":true,"i234.me":true,"myds.me":true,"synology.me":true,"vpnplus.to":true,"taifun-dns.de":true,"gda.pl":true,"gdansk.pl":true,"gdynia.pl":true,"med.pl":true,"sopot.pl":true,"cust.dev.thingdust.io":true,"cust.disrec.thingdust.io":true,"cust.prod.thingdust.io":true,"cust.testing.thingdust.io":true,"bloxcms.com":true,"townnews-staging.com":true,"12hp.at":true,"2ix.at":true,"4lima.at":true,"lima-city.at":true,"12hp.ch":true,"2ix.ch":true,"4lima.ch":true,"lima-city.ch":true,"trafficplex.cloud":true,"de.cool":true,"12hp.de":true,"2ix.de":true,"4lima.de":true,"lima-city.de":true,"1337.pictures":true,"clan.rip":true,"lima-city.rocks":true,"webspace.rocks":true,"lima.zone":true,"*.transurl.be":true,"*.transurl.eu":true,"*.transurl.nl":true,"tuxfamily.org":true,"dd-dns.de":true,"diskstation.eu":true,"diskstation.org":true,"dray-dns.de":true,"draydns.de":true,"dyn-vpn.de":true,"dynvpn.de":true,"mein-vigor.de":true,"my-vigor.de":true,"my-wan.de":true,"syno-ds.de":true,"synology-diskstation.de":true,"synology-ds.de":true,"uber.space":true,"hk.com":true,"hk.org":true,"ltd.hk":true,"inc.hk":true,"lib.de.us":true,"2038.io":true,"router.management":true,"v-info.info":true,"wedeploy.io":true,"wedeploy.me":true,"wedeploy.sh":true,"remotewd.com":true,"wmflabs.org":true,"cistron.nl":true,"demon.nl":true,"xs4all.space":true,"official.academy":true,"yolasite.com":true,"ybo.faith":true,"yombo.me":true,"homelink.one":true,"ybo.party":true,"ybo.review":true,"ybo.science":true,"ybo.trade":true,"za.net":true,"za.org":true,"now.sh":true});\n\n// END of automatically generated file\n\n\n/***/ }),\n/* 94 */\n/*!***************************!*\\\n !*** external "punycode" ***!\n \\***************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = require("punycode");\n\n/***/ }),\n/* 95 */\n/*!************************************************!*\\\n !*** ./node_modules/tough-cookie/lib/store.js ***!\n \\************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n/*!\n * Copyright (c) 2015, Salesforce.com, Inc.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of Salesforce.com nor the names of its contributors may\n * be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/*jshint unused:false */\n\nfunction Store() {\n}\nexports.Store = Store;\n\n// Stores may be synchronous, but are still required to use a\n// Continuation-Passing Style API. The CookieJar itself will expose a "*Sync"\n// API that converts from synchronous-callbacks to imperative style.\nStore.prototype.synchronous = false;\n\nStore.prototype.findCookie = function(domain, path, key, cb) {\n throw new Error(\'findCookie is not implemented\');\n};\n\nStore.prototype.findCookies = function(domain, path, cb) {\n throw new Error(\'findCookies is not implemented\');\n};\n\nStore.prototype.putCookie = function(cookie, cb) {\n throw new Error(\'putCookie is not implemented\');\n};\n\nStore.prototype.updateCookie = function(oldCookie, newCookie, cb) {\n // recommended default implementation:\n // return this.putCookie(newCookie, cb);\n throw new Error(\'updateCookie is not implemented\');\n};\n\nStore.prototype.removeCookie = function(domain, path, key, cb) {\n throw new Error(\'removeCookie is not implemented\');\n};\n\nStore.prototype.removeCookies = function(domain, path, cb) {\n throw new Error(\'removeCookies is not implemented\');\n};\n\nStore.prototype.getAllCookies = function(cb) {\n throw new Error(\'getAllCookies is not implemented (therefore jar cannot be serialized)\');\n};\n\n\n/***/ }),\n/* 96 */\n/*!********************************************************!*\\\n !*** ./node_modules/tough-cookie/lib/permuteDomain.js ***!\n \\********************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n/*!\n * Copyright (c) 2015, Salesforce.com, Inc.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of Salesforce.com nor the names of its contributors may\n * be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar pubsuffix = __webpack_require__(/*! ./pubsuffix */ 93);\n\n// Gives the permutation of all possible domainMatch()es of a given domain. The\n// array is in shortest-to-longest order. Handy for indexing.\nfunction permuteDomain (domain) {\n var pubSuf = pubsuffix.getPublicSuffix(domain);\n if (!pubSuf) {\n return null;\n }\n if (pubSuf == domain) {\n return [domain];\n }\n\n var prefix = domain.slice(0, -(pubSuf.length + 1)); // ".example.com"\n var parts = prefix.split(\'.\').reverse();\n var cur = pubSuf;\n var permutations = [cur];\n while (parts.length) {\n cur = parts.shift() + \'.\' + cur;\n permutations.push(cur);\n }\n return permutations;\n}\n\nexports.permuteDomain = permuteDomain;\n\n\n/***/ }),\n/* 97 */\n/*!****************************************************!*\\\n !*** ./node_modules/tough-cookie/lib/pathMatch.js ***!\n \\****************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n/*!\n * Copyright (c) 2015, Salesforce.com, Inc.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are met:\n *\n * 1. Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n *\n * 3. Neither the name of Salesforce.com nor the names of its contributors may\n * be used to endorse or promote products derived from this software without\n * specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n\n/*\n * "A request-path path-matches a given cookie-path if at least one of the\n * following conditions holds:"\n */\nfunction pathMatch (reqPath, cookiePath) {\n // "o The cookie-path and the request-path are identical."\n if (cookiePath === reqPath) {\n return true;\n }\n\n var idx = reqPath.indexOf(cookiePath);\n if (idx === 0) {\n // "o The cookie-path is a prefix of the request-path, and the last\n // character of the cookie-path is %x2F ("/")."\n if (cookiePath.substr(-1) === "/") {\n return true;\n }\n\n // " o The cookie-path is a prefix of the request-path, and the first\n // character of the request-path that is not included in the cookie- path\n // is a %x2F ("/") character."\n if (reqPath.substr(cookiePath.length, 1) === "/") {\n return true;\n }\n }\n\n return false;\n}\n\nexports.pathMatch = pathMatch;\n\n\n/***/ }),\n/* 98 */\n/*!*************************!*\\\n !*** external "buffer" ***!\n \\*************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = require("buffer");\n\n/***/ }),\n/* 99 */\n/*!****************************************!*\\\n !*** ./node_modules/sntp/lib/index.js ***!\n \\****************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\n// Load modules\n\nconst Dgram = __webpack_require__(/*! dgram */ 187);\nconst Dns = __webpack_require__(/*! dns */ 188);\n\nconst Hoek = __webpack_require__(/*! hoek */ 51);\n\n\n// Declare internals\n\nconst internals = {};\n\n\nexports.time = function (options, callback) {\n\n if (arguments.length !== 2) {\n callback = arguments[0];\n options = {};\n }\n\n const settings = Hoek.clone(options);\n settings.host = settings.host || \'time.google.com\';\n settings.port = settings.port || 123;\n settings.resolveReference = settings.resolveReference || false;\n\n // Declare variables used by callback\n\n let timeoutId = null;\n let sent = 0;\n\n // Ensure callback is only called once\n\n const finish = Hoek.once((err, result) => {\n\n clearTimeout(timeoutId);\n\n socket.removeAllListeners();\n socket.once(\'error\', Hoek.ignore);\n\n try {\n socket.close();\n }\n catch (ignoreErr) { } // Ignore errors if the socket is already closed\n\n return callback(err, result);\n });\n\n // Set timeout\n\n if (settings.timeout) {\n timeoutId = setTimeout(() => {\n\n return finish(new Error(\'Timeout\'));\n }, settings.timeout);\n }\n\n // Create UDP socket\n\n const socket = Dgram.createSocket(\'udp4\');\n\n socket.once(\'error\', (err) => finish(err));\n\n // Listen to incoming messages\n\n socket.on(\'message\', (buffer, rinfo) => {\n\n const received = Date.now();\n\n const message = new internals.NtpMessage(buffer);\n if (!message.isValid) {\n return finish(new Error(\'Invalid server response\'), message);\n }\n\n if (message.originateTimestamp !== sent) {\n return finish(new Error(\'Wrong originate timestamp\'), message);\n }\n\n // Timestamp Name ID When Generated\n // ------------------------------------------------------------\n // Originate Timestamp T1 time request sent by client\n // Receive Timestamp T2 time request received by server\n // Transmit Timestamp T3 time reply sent by server\n // Destination Timestamp T4 time reply received by client\n //\n // The roundtrip delay d and system clock offset t are defined as:\n //\n // d = (T4 - T1) - (T3 - T2) t = ((T2 - T1) + (T3 - T4)) / 2\n\n const T1 = message.originateTimestamp;\n const T2 = message.receiveTimestamp;\n const T3 = message.transmitTimestamp;\n const T4 = received;\n\n message.d = (T4 - T1) - (T3 - T2);\n message.t = ((T2 - T1) + (T3 - T4)) / 2;\n message.receivedLocally = received;\n\n if (!settings.resolveReference ||\n message.stratum !== \'secondary\') {\n\n return finish(null, message);\n }\n\n // Resolve reference IP address\n\n Dns.reverse(message.referenceId, (err, domains) => {\n\n if (/* $lab:coverage:off$ */ !err /* $lab:coverage:on$ */) {\n message.referenceHost = domains[0];\n }\n\n return finish(null, message);\n });\n });\n\n // Construct NTP message\n\n const message = new Buffer(48);\n for (let i = 0; i < 48; ++i) { // Zero message\n message[i] = 0;\n }\n\n message[0] = (0 << 6) + (4 << 3) + (3 << 0); // Set version number to 4 and Mode to 3 (client)\n sent = Date.now();\n internals.fromMsecs(sent, message, 40); // Set transmit timestamp (returns as originate)\n\n // Send NTP request\n\n socket.send(message, 0, message.length, settings.port, settings.host, (err, bytes) => {\n\n if (err ||\n bytes !== 48) {\n\n return finish(err || new Error(\'Could not send entire message\'));\n }\n });\n};\n\n\ninternals.NtpMessage = function (buffer) {\n\n this.isValid = false;\n\n // Validate\n\n if (buffer.length !== 48) {\n return;\n }\n\n // Leap indicator\n\n const li = (buffer[0] >> 6);\n switch (li) {\n case 0: this.leapIndicator = \'no-warning\'; break;\n case 1: this.leapIndicator = \'last-minute-61\'; break;\n case 2: this.leapIndicator = \'last-minute-59\'; break;\n case 3: this.leapIndicator = \'alarm\'; break;\n }\n\n // Version\n\n const vn = ((buffer[0] & 0x38) >> 3);\n this.version = vn;\n\n // Mode\n\n const mode = (buffer[0] & 0x7);\n switch (mode) {\n case 1: this.mode = \'symmetric-active\'; break;\n case 2: this.mode = \'symmetric-passive\'; break;\n case 3: this.mode = \'client\'; break;\n case 4: this.mode = \'server\'; break;\n case 5: this.mode = \'broadcast\'; break;\n case 0:\n case 6:\n case 7: this.mode = \'reserved\'; break;\n }\n\n // Stratum\n\n const stratum = buffer[1];\n if (stratum === 0) {\n this.stratum = \'death\';\n }\n else if (stratum === 1) {\n this.stratum = \'primary\';\n }\n else if (stratum <= 15) {\n this.stratum = \'secondary\';\n }\n else {\n this.stratum = \'reserved\';\n }\n\n // Poll interval (msec)\n\n this.pollInterval = Math.round(Math.pow(2, buffer[2])) * 1000;\n\n // Precision (msecs)\n\n this.precision = Math.pow(2, buffer[3]) * 1000;\n\n // Root delay (msecs)\n\n const rootDelay = 256 * (256 * (256 * buffer[4] + buffer[5]) + buffer[6]) + buffer[7];\n this.rootDelay = 1000 * (rootDelay / 0x10000);\n\n // Root dispersion (msecs)\n\n this.rootDispersion = ((buffer[8] << 8) + buffer[9] + ((buffer[10] << 8) + buffer[11]) / Math.pow(2, 16)) * 1000;\n\n // Reference identifier\n\n this.referenceId = \'\';\n switch (this.stratum) {\n case \'death\':\n case \'primary\':\n this.referenceId = String.fromCharCode(buffer[12]) + String.fromCharCode(buffer[13]) + String.fromCharCode(buffer[14]) + String.fromCharCode(buffer[15]);\n break;\n case \'secondary\':\n this.referenceId = \'\' + buffer[12] + \'.\' + buffer[13] + \'.\' + buffer[14] + \'.\' + buffer[15];\n break;\n }\n\n // Reference timestamp\n\n this.referenceTimestamp = internals.toMsecs(buffer, 16);\n\n // Originate timestamp\n\n this.originateTimestamp = internals.toMsecs(buffer, 24);\n\n // Receive timestamp\n\n this.receiveTimestamp = internals.toMsecs(buffer, 32);\n\n // Transmit timestamp\n\n this.transmitTimestamp = internals.toMsecs(buffer, 40);\n\n // Validate\n\n if (this.version === 4 &&\n this.stratum !== \'reserved\' &&\n this.mode === \'server\' &&\n this.originateTimestamp &&\n this.receiveTimestamp &&\n this.transmitTimestamp) {\n\n this.isValid = true;\n }\n\n return this;\n};\n\n\ninternals.toMsecs = function (buffer, offset) {\n\n let seconds = 0;\n let fraction = 0;\n\n for (let i = 0; i < 4; ++i) {\n seconds = (seconds * 256) + buffer[offset + i];\n }\n\n for (let i = 4; i < 8; ++i) {\n fraction = (fraction * 256) + buffer[offset + i];\n }\n\n return ((seconds - 2208988800 + (fraction / Math.pow(2, 32))) * 1000);\n};\n\n\ninternals.fromMsecs = function (ts, buffer, offset) {\n\n const seconds = Math.floor(ts / 1000) + 2208988800;\n const fraction = Math.round((ts % 1000) / 1000 * Math.pow(2, 32));\n\n buffer[offset + 0] = (seconds & 0xFF000000) >> 24;\n buffer[offset + 1] = (seconds & 0x00FF0000) >> 16;\n buffer[offset + 2] = (seconds & 0x0000FF00) >> 8;\n buffer[offset + 3] = (seconds & 0x000000FF);\n\n buffer[offset + 4] = (fraction & 0xFF000000) >> 24;\n buffer[offset + 5] = (fraction & 0x00FF0000) >> 16;\n buffer[offset + 6] = (fraction & 0x0000FF00) >> 8;\n buffer[offset + 7] = (fraction & 0x000000FF);\n};\n\n\n// Offset singleton\n\ninternals.last = {\n offset: 0,\n expires: 0,\n host: \'\',\n port: 0\n};\n\n\nexports.offset = function (options, callback) {\n\n if (arguments.length !== 2) {\n callback = arguments[0];\n options = {};\n }\n\n const now = Date.now();\n const clockSyncRefresh = options.clockSyncRefresh || 24 * 60 * 60 * 1000; // Daily\n\n if (internals.last.offset &&\n internals.last.host === options.host &&\n internals.last.port === options.port &&\n now < internals.last.expires) {\n\n process.nextTick(() => callback(null, internals.last.offset));\n return;\n }\n\n exports.time(options, (err, time) => {\n\n if (err) {\n return callback(err, 0);\n }\n\n internals.last = {\n offset: Math.round(time.t),\n expires: now + clockSyncRefresh,\n host: options.host,\n port: options.port\n };\n\n return callback(null, internals.last.offset);\n });\n};\n\n\n// Now singleton\n\ninternals.now = {\n started: false,\n intervalId: null\n};\n\n\nexports.start = function (options, callback) {\n\n if (arguments.length !== 2) {\n callback = arguments[0];\n options = {};\n }\n\n if (internals.now.started) {\n process.nextTick(() => callback());\n return;\n }\n\n const report = (err) => {\n\n if (err &&\n options.onError) {\n\n options.onError(err);\n }\n };\n\n internals.now.started = true;\n exports.offset(options, (err, offset) => {\n\n report(err);\n\n internals.now.intervalId = setInterval(() => {\n\n exports.offset(options, report);\n }, options.clockSyncRefresh || 24 * 60 * 60 * 1000); // Daily\n\n return callback();\n });\n};\n\n\nexports.stop = function () {\n\n if (!internals.now.started) {\n return;\n }\n\n clearInterval(internals.now.intervalId);\n internals.now.started = false;\n internals.now.intervalId = null;\n};\n\n\nexports.isLive = function () {\n\n return internals.now.started;\n};\n\n\nexports.now = function () {\n\n const now = Date.now();\n if (!exports.isLive() ||\n now >= internals.last.expires) {\n\n return now;\n }\n\n return now + internals.last.offset;\n};\n\n\n/***/ }),\n/* 100 */\n/*!*********************************************!*\\\n !*** ./node_modules/cryptiles/lib/index.js ***!\n \\*********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\n// Load modules\n\nconst Crypto = __webpack_require__(/*! crypto */ 2);\nconst Boom = __webpack_require__(/*! boom */ 50);\n\n\n// Declare internals\n\nconst internals = {};\n\n\n// Generate a cryptographically strong pseudo-random data\n\nexports.randomString = function (size) {\n\n const buffer = exports.randomBits((size + 1) * 6);\n if (buffer instanceof Error) {\n return buffer;\n }\n\n const string = buffer.toString(\'base64\').replace(/\\+/g, \'-\').replace(/\\//g, \'_\').replace(/\\=/g, \'\');\n return string.slice(0, size);\n};\n\n\n// Return a random string of digits\n\nexports.randomDigits = function (size) {\n\n const buffer = exports.randomBits(size * 8);\n if (buffer instanceof Error) {\n return buffer;\n }\n\n const digits = [];\n for (let i = 0; i < buffer.length; ++i) {\n digits.push(Math.floor(buffer[i] / 25.6));\n }\n\n return digits.join(\'\');\n};\n\n\n// Generate a buffer of random bits\n\nexports.randomBits = function (bits) {\n\n if (!bits ||\n bits < 0) {\n\n return Boom.internal(\'Invalid random bits count\');\n }\n\n const bytes = Math.ceil(bits / 8);\n try {\n return Crypto.randomBytes(bytes);\n }\n catch (err) {\n return Boom.internal(\'Failed generating random bits: \' + err.message);\n }\n};\n\n\n// Compare two strings using fixed time algorithm (to prevent time-based analysis of MAC digest match)\n\nexports.fixedTimeComparison = function (a, b) {\n\n if (typeof a !== \'string\' ||\n typeof b !== \'string\') {\n\n return false;\n }\n\n let mismatch = (a.length === b.length ? 0 : 1);\n if (mismatch) {\n b = a;\n }\n\n for (let i = 0; i < a.length; ++i) {\n const ac = a.charCodeAt(i);\n const bc = b.charCodeAt(i);\n mismatch |= (ac ^ bc);\n }\n\n return (mismatch === 0);\n};\n\n\n/***/ }),\n/* 101 */\n/*!****************************************!*\\\n !*** ./node_modules/ecc-jsbn/index.js ***!\n \\****************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar crypto = __webpack_require__(/*! crypto */ 2);\nvar BigInteger = __webpack_require__(/*! jsbn */ 25).BigInteger;\nvar ECPointFp = __webpack_require__(/*! ./lib/ec.js */ 42).ECPointFp;\nvar Buffer = __webpack_require__(/*! safer-buffer */ 3).Buffer;\nexports.ECCurves = __webpack_require__(/*! ./lib/sec.js */ 197);\n\n// zero prepad\nfunction unstupid(hex,len)\n{\n\treturn (hex.length >= len) ? hex : unstupid("0"+hex,len);\n}\n\nexports.ECKey = function(curve, key, isPublic)\n{\n var priv;\n\tvar c = curve();\n\tvar n = c.getN();\n var bytes = Math.floor(n.bitLength()/8);\n\n if(key)\n {\n if(isPublic)\n {\n var curve = c.getCurve();\n// var x = key.slice(1,bytes+1); // skip the 04 for uncompressed format\n// var y = key.slice(bytes+1);\n// this.P = new ECPointFp(curve,\n// curve.fromBigInteger(new BigInteger(x.toString("hex"), 16)),\n// curve.fromBigInteger(new BigInteger(y.toString("hex"), 16))); \n this.P = curve.decodePointHex(key.toString("hex"));\n }else{\n if(key.length != bytes) return false;\n priv = new BigInteger(key.toString("hex"), 16); \n }\n }else{\n var n1 = n.subtract(BigInteger.ONE);\n var r = new BigInteger(crypto.randomBytes(n.bitLength()));\n priv = r.mod(n1).add(BigInteger.ONE);\n this.P = c.getG().multiply(priv);\n }\n if(this.P)\n {\n// var pubhex = unstupid(this.P.getX().toBigInteger().toString(16),bytes*2)+unstupid(this.P.getY().toBigInteger().toString(16),bytes*2);\n// this.PublicKey = Buffer.from("04"+pubhex,"hex");\n this.PublicKey = Buffer.from(c.getCurve().encodeCompressedPointHex(this.P),"hex");\n }\n if(priv)\n {\n this.PrivateKey = Buffer.from(unstupid(priv.toString(16),bytes*2),"hex");\n this.deriveSharedSecret = function(key)\n {\n if(!key || !key.P) return false;\n var S = key.P.multiply(priv);\n return Buffer.from(unstupid(S.getX().toBigInteger().toString(16),bytes*2),"hex");\n } \n }\n}\n\n\n\n/***/ }),\n/* 102 */\n/*!*********************************************!*\\\n !*** ./node_modules/sshpk/lib/ed-compat.js ***!\n \\*********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tVerifier: Verifier,\n\tSigner: Signer\n};\n\nvar nacl;\nvar stream = __webpack_require__(/*! stream */ 24);\nvar util = __webpack_require__(/*! util */ 4);\nvar assert = __webpack_require__(/*! assert-plus */ 1);\nvar Buffer = __webpack_require__(/*! safer-buffer */ 3).Buffer;\nvar Signature = __webpack_require__(/*! ./signature */ 19);\n\nfunction Verifier(key, hashAlgo) {\n\tif (nacl === undefined)\n\t\tnacl = __webpack_require__(/*! tweetnacl */ 20);\n\n\tif (hashAlgo.toLowerCase() !== \'sha512\')\n\t\tthrow (new Error(\'ED25519 only supports the use of \' +\n\t\t \'SHA-512 hashes\'));\n\n\tthis.key = key;\n\tthis.chunks = [];\n\n\tstream.Writable.call(this, {});\n}\nutil.inherits(Verifier, stream.Writable);\n\nVerifier.prototype._write = function (chunk, enc, cb) {\n\tthis.chunks.push(chunk);\n\tcb();\n};\n\nVerifier.prototype.update = function (chunk) {\n\tif (typeof (chunk) === \'string\')\n\t\tchunk = Buffer.from(chunk, \'binary\');\n\tthis.chunks.push(chunk);\n};\n\nVerifier.prototype.verify = function (signature, fmt) {\n\tvar sig;\n\tif (Signature.isSignature(signature, [2, 0])) {\n\t\tif (signature.type !== \'ed25519\')\n\t\t\treturn (false);\n\t\tsig = signature.toBuffer(\'raw\');\n\n\t} else if (typeof (signature) === \'string\') {\n\t\tsig = Buffer.from(signature, \'base64\');\n\n\t} else if (Signature.isSignature(signature, [1, 0])) {\n\t\tthrow (new Error(\'signature was created by too old \' +\n\t\t \'a version of sshpk and cannot be verified\'));\n\t}\n\n\tassert.buffer(sig);\n\treturn (nacl.sign.detached.verify(\n\t new Uint8Array(Buffer.concat(this.chunks)),\n\t new Uint8Array(sig),\n\t new Uint8Array(this.key.part.A.data)));\n};\n\nfunction Signer(key, hashAlgo) {\n\tif (nacl === undefined)\n\t\tnacl = __webpack_require__(/*! tweetnacl */ 20);\n\n\tif (hashAlgo.toLowerCase() !== \'sha512\')\n\t\tthrow (new Error(\'ED25519 only supports the use of \' +\n\t\t \'SHA-512 hashes\'));\n\n\tthis.key = key;\n\tthis.chunks = [];\n\n\tstream.Writable.call(this, {});\n}\nutil.inherits(Signer, stream.Writable);\n\nSigner.prototype._write = function (chunk, enc, cb) {\n\tthis.chunks.push(chunk);\n\tcb();\n};\n\nSigner.prototype.update = function (chunk) {\n\tif (typeof (chunk) === \'string\')\n\t\tchunk = Buffer.from(chunk, \'binary\');\n\tthis.chunks.push(chunk);\n};\n\nSigner.prototype.sign = function () {\n\tvar sig = nacl.sign.detached(\n\t new Uint8Array(Buffer.concat(this.chunks)),\n\t new Uint8Array(Buffer.concat([\n\t\tthis.key.part.k.data, this.key.part.A.data])));\n\tvar sigBuf = Buffer.from(sig);\n\tvar sigObj = Signature.parse(sigBuf, \'ed25519\', \'raw\');\n\tsigObj.hashAlgorithm = \'sha512\';\n\treturn (sigObj);\n};\n\n\n/***/ }),\n/* 103 */\n/*!************************************************!*\\\n !*** ./node_modules/sshpk/lib/formats/auto.js ***!\n \\************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\twrite: write\n};\n\nvar assert = __webpack_require__(/*! assert-plus */ 1);\nvar Buffer = __webpack_require__(/*! safer-buffer */ 3).Buffer;\nvar utils = __webpack_require__(/*! ../utils */ 6);\nvar Key = __webpack_require__(/*! ../key */ 7);\nvar PrivateKey = __webpack_require__(/*! ../private-key */ 9);\n\nvar pem = __webpack_require__(/*! ./pem */ 26);\nvar ssh = __webpack_require__(/*! ./ssh */ 105);\nvar rfc4253 = __webpack_require__(/*! ./rfc4253 */ 31);\nvar dnssec = __webpack_require__(/*! ./dnssec */ 71);\n\nvar DNSSEC_PRIVKEY_HEADER_PREFIX = \'Private-key-format: v1\';\n\nfunction read(buf, options) {\n\tif (typeof (buf) === \'string\') {\n\t\tif (buf.trim().match(/^[-]+[ ]*BEGIN/))\n\t\t\treturn (pem.read(buf, options));\n\t\tif (buf.match(/^\\s*ssh-[a-z]/))\n\t\t\treturn (ssh.read(buf, options));\n\t\tif (buf.match(/^\\s*ecdsa-/))\n\t\t\treturn (ssh.read(buf, options));\n\t\tif (findDNSSECHeader(buf))\n\t\t\treturn (dnssec.read(buf, options));\n\t\tbuf = Buffer.from(buf, \'binary\');\n\t} else {\n\t\tassert.buffer(buf);\n\t\tif (findPEMHeader(buf))\n\t\t\treturn (pem.read(buf, options));\n\t\tif (findSSHHeader(buf))\n\t\t\treturn (ssh.read(buf, options));\n\t\tif (findDNSSECHeader(buf))\n\t\t\treturn (dnssec.read(buf, options));\n\t}\n\tif (buf.readUInt32BE(0) < buf.length)\n\t\treturn (rfc4253.read(buf, options));\n\tthrow (new Error(\'Failed to auto-detect format of key\'));\n}\n\nfunction findSSHHeader(buf) {\n\tvar offset = 0;\n\twhile (offset < buf.length &&\n\t (buf[offset] === 32 || buf[offset] === 10 || buf[offset] === 9))\n\t\t++offset;\n\tif (offset + 4 <= buf.length &&\n\t buf.slice(offset, offset + 4).toString(\'ascii\') === \'ssh-\')\n\t\treturn (true);\n\tif (offset + 6 <= buf.length &&\n\t buf.slice(offset, offset + 6).toString(\'ascii\') === \'ecdsa-\')\n\t\treturn (true);\n\treturn (false);\n}\n\nfunction findPEMHeader(buf) {\n\tvar offset = 0;\n\twhile (offset < buf.length &&\n\t (buf[offset] === 32 || buf[offset] === 10))\n\t\t++offset;\n\tif (buf[offset] !== 45)\n\t\treturn (false);\n\twhile (offset < buf.length &&\n\t (buf[offset] === 45))\n\t\t++offset;\n\twhile (offset < buf.length &&\n\t (buf[offset] === 32))\n\t\t++offset;\n\tif (offset + 5 > buf.length ||\n\t buf.slice(offset, offset + 5).toString(\'ascii\') !== \'BEGIN\')\n\t\treturn (false);\n\treturn (true);\n}\n\nfunction findDNSSECHeader(buf) {\n\t// private case first\n\tif (buf.length <= DNSSEC_PRIVKEY_HEADER_PREFIX.length)\n\t\treturn (false);\n\tvar headerCheck = buf.slice(0, DNSSEC_PRIVKEY_HEADER_PREFIX.length);\n\tif (headerCheck.toString(\'ascii\') === DNSSEC_PRIVKEY_HEADER_PREFIX)\n\t\treturn (true);\n\n\t// public-key RFC3110 ?\n\t// \'domain.com. IN KEY ...\' or \'domain.com. IN DNSKEY ...\'\n\t// skip any comment-lines\n\tif (typeof (buf) !== \'string\') {\n\t\tbuf = buf.toString(\'ascii\');\n\t}\n\tvar lines = buf.split(\'\\n\');\n\tvar line = 0;\n\t/* JSSTYLED */\n\twhile (lines[line].match(/^\\;/))\n\t\tline++;\n\tif (lines[line].toString(\'ascii\').match(/\\. IN KEY /))\n\t\treturn (true);\n\tif (lines[line].toString(\'ascii\').match(/\\. IN DNSKEY /))\n\t\treturn (true);\n\treturn (false);\n}\n\nfunction write(key, options) {\n\tthrow (new Error(\'"auto" format cannot be used for writing\'));\n}\n\n\n/***/ }),\n/* 104 */\n/*!********************************************!*\\\n !*** ./node_modules/bcrypt-pbkdf/index.js ***!\n \\********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\nvar crypto_hash_sha512 = __webpack_require__(/*! tweetnacl */ 20).lowlevel.crypto_hash;\n\n/*\n * This file is a 1:1 port from the OpenBSD blowfish.c and bcrypt_pbkdf.c. As a\n * result, it retains the original copyright and license. The two files are\n * under slightly different (but compatible) licenses, and are here combined in\n * one file.\n *\n * Credit for the actual porting work goes to:\n * Devi Mandiri \n */\n\n/*\n * The Blowfish portions are under the following license:\n *\n * Blowfish block cipher for OpenBSD\n * Copyright 1997 Niels Provos \n * All rights reserved.\n *\n * Implementation advice by David Mazieres .\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n * 3. The name of the author may not be used to endorse or promote products\n * derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS\'\' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT 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 OF\n * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/*\n * The bcrypt_pbkdf portions are under the following license:\n *\n * Copyright (c) 2013 Ted Unangst \n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\n/*\n * Performance improvements (Javascript-specific):\n *\n * Copyright 2016, Joyent Inc\n * Author: Alex Wilson \n *\n * Permission to use, copy, modify, and distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n */\n\n// Ported from OpenBSD bcrypt_pbkdf.c v1.9\n\nvar BLF_J = 0;\n\nvar Blowfish = function() {\n this.S = [\n new Uint32Array([\n 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7,\n 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,\n 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,\n 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,\n 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee,\n 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,\n 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef,\n 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,\n 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,\n 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,\n 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce,\n 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,\n 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e,\n 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,\n 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,\n 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,\n 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88,\n 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,\n 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e,\n 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,\n 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,\n 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,\n 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88,\n 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,\n 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6,\n 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,\n 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,\n 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,\n 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba,\n 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,\n 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f,\n 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,\n 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,\n 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,\n 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279,\n 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,\n 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab,\n 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,\n 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,\n 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,\n 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0,\n 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,\n 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790,\n 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,\n 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,\n 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,\n 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7,\n 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,\n 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad,\n 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,\n 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,\n 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,\n 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477,\n 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,\n 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49,\n 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,\n 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,\n 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,\n 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41,\n 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,\n 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400,\n 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,\n 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,\n 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a]),\n new Uint32Array([\n 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623,\n 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,\n 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1,\n 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,\n 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6,\n 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,\n 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e,\n 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,\n 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737,\n 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,\n 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,\n 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,\n 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701,\n 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,\n 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41,\n 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,\n 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf,\n 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,\n 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e,\n 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,\n 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c,\n 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,\n 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16,\n 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,\n 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b,\n 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,\n 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e,\n 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,\n 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f,\n 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,\n 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4,\n 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,\n 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66,\n 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,\n 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802,\n 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,\n 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510,\n 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,\n 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14,\n 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,\n 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,\n 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,\n 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8,\n 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,\n 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99,\n 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,\n 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128,\n 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,\n 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0,\n 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,\n 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105,\n 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,\n 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3,\n 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,\n 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00,\n 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,\n 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb,\n 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,\n 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735,\n 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,\n 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9,\n 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,\n 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20,\n 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7]),\n new Uint32Array([\n 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934,\n 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,\n 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af,\n 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,\n 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45,\n 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,\n 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,\n 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,\n 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee,\n 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,\n 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42,\n 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,\n 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2,\n 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,\n 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527,\n 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,\n 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33,\n 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,\n 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3,\n 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,\n 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17,\n 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,\n 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b,\n 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,\n 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922,\n 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,\n 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0,\n 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,\n 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37,\n 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,\n 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804,\n 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,\n 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3,\n 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,\n 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d,\n 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,\n 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,\n 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,\n 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a,\n 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,\n 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d,\n 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,\n 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f,\n 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,\n 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2,\n 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,\n 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2,\n 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,\n 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e,\n 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,\n 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10,\n 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,\n 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52,\n 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,\n 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5,\n 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,\n 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634,\n 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,\n 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24,\n 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,\n 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4,\n 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,\n 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837,\n 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0]),\n new Uint32Array([\n 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b,\n 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,\n 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,\n 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,\n 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8,\n 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,\n 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304,\n 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,\n 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,\n 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,\n 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9,\n 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,\n 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593,\n 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,\n 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,\n 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,\n 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b,\n 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,\n 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c,\n 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,\n 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,\n 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,\n 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb,\n 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,\n 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991,\n 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,\n 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,\n 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,\n 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae,\n 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,\n 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5,\n 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,\n 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,\n 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,\n 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84,\n 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,\n 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8,\n 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,\n 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,\n 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,\n 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38,\n 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,\n 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,\n 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,\n 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,\n 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,\n 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964,\n 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,\n 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8,\n 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,\n 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,\n 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,\n 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,\n 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,\n 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614,\n 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,\n 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,\n 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,\n 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0,\n 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,\n 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e,\n 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,\n 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,\n 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6])\n ];\n this.P = new Uint32Array([\n 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344,\n 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,\n 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,\n 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,\n 0x9216d5d9, 0x8979fb1b]);\n};\n\nfunction F(S, x8, i) {\n return (((S[0][x8[i+3]] +\n S[1][x8[i+2]]) ^\n S[2][x8[i+1]]) +\n S[3][x8[i]]);\n};\n\nBlowfish.prototype.encipher = function(x, x8) {\n if (x8 === undefined) {\n x8 = new Uint8Array(x.buffer);\n if (x.byteOffset !== 0)\n x8 = x8.subarray(x.byteOffset);\n }\n x[0] ^= this.P[0];\n for (var i = 1; i < 16; i += 2) {\n x[1] ^= F(this.S, x8, 0) ^ this.P[i];\n x[0] ^= F(this.S, x8, 4) ^ this.P[i+1];\n }\n var t = x[0];\n x[0] = x[1] ^ this.P[17];\n x[1] = t;\n};\n\nBlowfish.prototype.decipher = function(x) {\n var x8 = new Uint8Array(x.buffer);\n if (x.byteOffset !== 0)\n x8 = x8.subarray(x.byteOffset);\n x[0] ^= this.P[17];\n for (var i = 16; i > 0; i -= 2) {\n x[1] ^= F(this.S, x8, 0) ^ this.P[i];\n x[0] ^= F(this.S, x8, 4) ^ this.P[i-1];\n }\n var t = x[0];\n x[0] = x[1] ^ this.P[0];\n x[1] = t;\n};\n\nfunction stream2word(data, databytes){\n var i, temp = 0;\n for (i = 0; i < 4; i++, BLF_J++) {\n if (BLF_J >= databytes) BLF_J = 0;\n temp = (temp << 8) | data[BLF_J];\n }\n return temp;\n};\n\nBlowfish.prototype.expand0state = function(key, keybytes) {\n var d = new Uint32Array(2), i, k;\n var d8 = new Uint8Array(d.buffer);\n\n for (i = 0, BLF_J = 0; i < 18; i++) {\n this.P[i] ^= stream2word(key, keybytes);\n }\n BLF_J = 0;\n\n for (i = 0; i < 18; i += 2) {\n this.encipher(d, d8);\n this.P[i] = d[0];\n this.P[i+1] = d[1];\n }\n\n for (i = 0; i < 4; i++) {\n for (k = 0; k < 256; k += 2) {\n this.encipher(d, d8);\n this.S[i][k] = d[0];\n this.S[i][k+1] = d[1];\n }\n }\n};\n\nBlowfish.prototype.expandstate = function(data, databytes, key, keybytes) {\n var d = new Uint32Array(2), i, k;\n\n for (i = 0, BLF_J = 0; i < 18; i++) {\n this.P[i] ^= stream2word(key, keybytes);\n }\n\n for (i = 0, BLF_J = 0; i < 18; i += 2) {\n d[0] ^= stream2word(data, databytes);\n d[1] ^= stream2word(data, databytes);\n this.encipher(d);\n this.P[i] = d[0];\n this.P[i+1] = d[1];\n }\n\n for (i = 0; i < 4; i++) {\n for (k = 0; k < 256; k += 2) {\n d[0] ^= stream2word(data, databytes);\n d[1] ^= stream2word(data, databytes);\n this.encipher(d);\n this.S[i][k] = d[0];\n this.S[i][k+1] = d[1];\n }\n }\n BLF_J = 0;\n};\n\nBlowfish.prototype.enc = function(data, blocks) {\n for (var i = 0; i < blocks; i++) {\n this.encipher(data.subarray(i*2));\n }\n};\n\nBlowfish.prototype.dec = function(data, blocks) {\n for (var i = 0; i < blocks; i++) {\n this.decipher(data.subarray(i*2));\n }\n};\n\nvar BCRYPT_BLOCKS = 8,\n BCRYPT_HASHSIZE = 32;\n\nfunction bcrypt_hash(sha2pass, sha2salt, out) {\n var state = new Blowfish(),\n cdata = new Uint32Array(BCRYPT_BLOCKS), i,\n ciphertext = new Uint8Array([79,120,121,99,104,114,111,109,97,116,105,\n 99,66,108,111,119,102,105,115,104,83,119,97,116,68,121,110,97,109,\n 105,116,101]); //"OxychromaticBlowfishSwatDynamite"\n\n state.expandstate(sha2salt, 64, sha2pass, 64);\n for (i = 0; i < 64; i++) {\n state.expand0state(sha2salt, 64);\n state.expand0state(sha2pass, 64);\n }\n\n for (i = 0; i < BCRYPT_BLOCKS; i++)\n cdata[i] = stream2word(ciphertext, ciphertext.byteLength);\n for (i = 0; i < 64; i++)\n state.enc(cdata, cdata.byteLength / 8);\n\n for (i = 0; i < BCRYPT_BLOCKS; i++) {\n out[4*i+3] = cdata[i] >>> 24;\n out[4*i+2] = cdata[i] >>> 16;\n out[4*i+1] = cdata[i] >>> 8;\n out[4*i+0] = cdata[i];\n }\n};\n\nfunction bcrypt_pbkdf(pass, passlen, salt, saltlen, key, keylen, rounds) {\n var sha2pass = new Uint8Array(64),\n sha2salt = new Uint8Array(64),\n out = new Uint8Array(BCRYPT_HASHSIZE),\n tmpout = new Uint8Array(BCRYPT_HASHSIZE),\n countsalt = new Uint8Array(saltlen+4),\n i, j, amt, stride, dest, count,\n origkeylen = keylen;\n\n if (rounds < 1)\n return -1;\n if (passlen === 0 || saltlen === 0 || keylen === 0 ||\n keylen > (out.byteLength * out.byteLength) || saltlen > (1<<20))\n return -1;\n\n stride = Math.floor((keylen + out.byteLength - 1) / out.byteLength);\n amt = Math.floor((keylen + stride - 1) / stride);\n\n for (i = 0; i < saltlen; i++)\n countsalt[i] = salt[i];\n\n crypto_hash_sha512(sha2pass, pass, passlen);\n\n for (count = 1; keylen > 0; count++) {\n countsalt[saltlen+0] = count >>> 24;\n countsalt[saltlen+1] = count >>> 16;\n countsalt[saltlen+2] = count >>> 8;\n countsalt[saltlen+3] = count;\n\n crypto_hash_sha512(sha2salt, countsalt, saltlen + 4);\n bcrypt_hash(sha2pass, sha2salt, tmpout);\n for (i = out.byteLength; i--;)\n out[i] = tmpout[i];\n\n for (i = 1; i < rounds; i++) {\n crypto_hash_sha512(sha2salt, tmpout, tmpout.byteLength);\n bcrypt_hash(sha2pass, sha2salt, tmpout);\n for (j = 0; j < out.byteLength; j++)\n out[j] ^= tmpout[j];\n }\n\n amt = Math.min(amt, keylen);\n for (i = 0; i < amt; i++) {\n dest = i * stride + (count - 1);\n if (dest >= origkeylen)\n break;\n key[dest] = out[i];\n }\n keylen -= i;\n }\n\n return 0;\n};\n\nmodule.exports = {\n BLOCKS: BCRYPT_BLOCKS,\n HASHSIZE: BCRYPT_HASHSIZE,\n hash: bcrypt_hash,\n pbkdf: bcrypt_pbkdf\n};\n\n\n/***/ }),\n/* 105 */\n/*!***********************************************!*\\\n !*** ./node_modules/sshpk/lib/formats/ssh.js ***!\n \\***********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2015 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\twrite: write\n};\n\nvar assert = __webpack_require__(/*! assert-plus */ 1);\nvar Buffer = __webpack_require__(/*! safer-buffer */ 3).Buffer;\nvar rfc4253 = __webpack_require__(/*! ./rfc4253 */ 31);\nvar utils = __webpack_require__(/*! ../utils */ 6);\nvar Key = __webpack_require__(/*! ../key */ 7);\nvar PrivateKey = __webpack_require__(/*! ../private-key */ 9);\n\nvar sshpriv = __webpack_require__(/*! ./ssh-private */ 54);\n\n/*JSSTYLED*/\nvar SSHKEY_RE = /^([a-z0-9-]+)[ \\t]+([a-zA-Z0-9+\\/]+[=]*)([ \\t]+([^ \\t][^\\n]*[\\n]*)?)?$/;\n/*JSSTYLED*/\nvar SSHKEY_RE2 = /^([a-z0-9-]+)[ \\t\\n]+([a-zA-Z0-9+\\/][a-zA-Z0-9+\\/ \\t\\n=]*)([^a-zA-Z0-9+\\/ \\t\\n=].*)?$/;\n\nfunction read(buf, options) {\n\tif (typeof (buf) !== \'string\') {\n\t\tassert.buffer(buf, \'buf\');\n\t\tbuf = buf.toString(\'ascii\');\n\t}\n\n\tvar trimmed = buf.trim().replace(/[\\\\\\r]/g, \'\');\n\tvar m = trimmed.match(SSHKEY_RE);\n\tif (!m)\n\t\tm = trimmed.match(SSHKEY_RE2);\n\tassert.ok(m, \'key must match regex\');\n\n\tvar type = rfc4253.algToKeyType(m[1]);\n\tvar kbuf = Buffer.from(m[2], \'base64\');\n\n\t/*\n\t * This is a bit tricky. If we managed to parse the key and locate the\n\t * key comment with the regex, then do a non-partial read and assert\n\t * that we have consumed all bytes. If we couldn\'t locate the key\n\t * comment, though, there may be whitespace shenanigans going on that\n\t * have conjoined the comment to the rest of the key. We do a partial\n\t * read in this case to try to make the best out of a sorry situation.\n\t */\n\tvar key;\n\tvar ret = {};\n\tif (m[4]) {\n\t\ttry {\n\t\t\tkey = rfc4253.read(kbuf);\n\n\t\t} catch (e) {\n\t\t\tm = trimmed.match(SSHKEY_RE2);\n\t\t\tassert.ok(m, \'key must match regex\');\n\t\t\tkbuf = Buffer.from(m[2], \'base64\');\n\t\t\tkey = rfc4253.readInternal(ret, \'public\', kbuf);\n\t\t}\n\t} else {\n\t\tkey = rfc4253.readInternal(ret, \'public\', kbuf);\n\t}\n\n\tassert.strictEqual(type, key.type);\n\n\tif (m[4] && m[4].length > 0) {\n\t\tkey.comment = m[4];\n\n\t} else if (ret.consumed) {\n\t\t/*\n\t\t * Now the magic: trying to recover the key comment when it\'s\n\t\t * gotten conjoined to the key or otherwise shenanigan\'d.\n\t\t *\n\t\t * Work out how much base64 we used, then drop all non-base64\n\t\t * chars from the beginning up to this point in the the string.\n\t\t * Then offset in this and try to make up for missing = chars.\n\t\t */\n\t\tvar data = m[2] + (m[3] ? m[3] : \'\');\n\t\tvar realOffset = Math.ceil(ret.consumed / 3) * 4;\n\t\tdata = data.slice(0, realOffset - 2). /*JSSTYLED*/\n\t\t replace(/[^a-zA-Z0-9+\\/=]/g, \'\') +\n\t\t data.slice(realOffset - 2);\n\n\t\tvar padding = ret.consumed % 3;\n\t\tif (padding > 0 &&\n\t\t data.slice(realOffset - 1, realOffset) !== \'=\')\n\t\t\trealOffset--;\n\t\twhile (data.slice(realOffset, realOffset + 1) === \'=\')\n\t\t\trealOffset++;\n\n\t\t/* Finally, grab what we think is the comment & clean it up. */\n\t\tvar trailer = data.slice(realOffset);\n\t\ttrailer = trailer.replace(/[\\r\\n]/g, \' \').\n\t\t replace(/^\\s+/, \'\');\n\t\tif (trailer.match(/^[a-zA-Z0-9]/))\n\t\t\tkey.comment = trailer;\n\t}\n\n\treturn (key);\n}\n\nfunction write(key, options) {\n\tassert.object(key);\n\tif (!Key.isKey(key))\n\t\tthrow (new Error(\'Must be a public key\'));\n\n\tvar parts = [];\n\tvar alg = rfc4253.keyTypeToAlg(key);\n\tparts.push(alg);\n\n\tvar buf = rfc4253.write(key);\n\tparts.push(buf.toString(\'base64\'));\n\n\tif (key.comment)\n\t\tparts.push(key.comment);\n\n\treturn (Buffer.from(parts.join(\' \')));\n}\n\n\n/***/ }),\n/* 106 */\n/*!************************************************!*\\\n !*** ./node_modules/sshpk/lib/formats/x509.js ***!\n \\************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Copyright 2017 Joyent, Inc.\n\nmodule.exports = {\n\tread: read,\n\tverify: verify,\n\tsign: sign,\n\tsignAsync: signAsync,\n\twrite: write\n};\n\nvar assert = __webpack_require__(/*! assert-plus */ 1);\nvar asn1 = __webpack_require__(/*! asn1 */ 21);\nvar Buffer = __webpack_require__(/*! safer-buffer */ 3).Buffer;\nvar algs = __webpack_require__(/*! ../algs */ 8);\nvar utils = __webpack_require__(/*! ../utils */ 6);\nvar Key = __webpack_require__(/*! ../key */ 7);\nvar PrivateKey = __webpack_require__(/*! ../private-key */ 9);\nvar pem = __webpack_require__(/*! ./pem */ 26);\nvar Identity = __webpack_require__(/*! ../identity */ 45);\nvar Signature = __webpack_require__(/*! ../signature */ 19);\nvar Certificate = __webpack_require__(/*! ../certificate */ 41);\nvar pkcs8 = __webpack_require__(/*! ./pkcs8 */ 43);\n\n/*\n * This file is based on RFC5280 (X.509).\n */\n\n/* Helper to read in a single mpint */\nfunction readMPInt(der, nm) {\n\tassert.strictEqual(der.peek(), asn1.Ber.Integer,\n\t nm + \' is not an Integer\');\n\treturn (utils.mpNormalize(der.readString(asn1.Ber.Integer, true)));\n}\n\nfunction verify(cert, key) {\n\tvar sig = cert.signatures.x509;\n\tassert.object(sig, \'x509 signature\');\n\n\tvar algParts = sig.algo.split(\'-\');\n\tif (algParts[0] !== key.type)\n\t\treturn (false);\n\n\tvar blob = sig.cache;\n\tif (blob === undefined) {\n\t\tvar der = new asn1.BerWriter();\n\t\twriteTBSCert(cert, der);\n\t\tblob = der.buffer;\n\t}\n\n\tvar verifier = key.createVerify(algParts[1]);\n\tverifier.write(blob);\n\treturn (verifier.verify(sig.signature));\n}\n\nfunction Local(i) {\n\treturn (asn1.Ber.Context | asn1.Ber.Constructor | i);\n}\n\nfunction Context(i) {\n\treturn (asn1.Ber.Context | i);\n}\n\nvar SIGN_ALGS = {\n\t\'rsa-md5\': \'1.2.840.113549.1.1.4\',\n\t\'rsa-sha1\': \'1.2.840.113549.1.1.5\',\n\t\'rsa-sha256\': \'1.2.840.113549.1.1.11\',\n\t\'rsa-sha384\': \'1.2.840.113549.1.1.12\',\n\t\'rsa-sha512\': \'1.2.840.113549.1.1.13\',\n\t\'dsa-sha1\': \'1.2.840.10040.4.3\',\n\t\'dsa-sha256\': \'2.16.840.1.101.3.4.3.2\',\n\t\'ecdsa-sha1\': \'1.2.840.10045.4.1\',\n\t\'ecdsa-sha256\': \'1.2.840.10045.4.3.2\',\n\t\'ecdsa-sha384\': \'1.2.840.10045.4.3.3\',\n\t\'ecdsa-sha512\': \'1.2.840.10045.4.3.4\',\n\t\'ed25519-sha512\': \'1.3.101.112\'\n};\nObject.keys(SIGN_ALGS).forEach(function (k) {\n\tSIGN_ALGS[SIGN_ALGS[k]] = k;\n});\nSIGN_ALGS[\'1.3.14.3.2.3\'] = \'rsa-md5\';\nSIGN_ALGS[\'1.3.14.3.2.29\'] = \'rsa-sha1\';\n\nvar EXTS = {\n\t\'issuerKeyId\': \'2.5.29.35\',\n\t\'altName\': \'2.5.29.17\',\n\t\'basicConstraints\': \'2.5.29.19\',\n\t\'keyUsage\': \'2.5.29.15\',\n\t\'extKeyUsage\': \'2.5.29.37\'\n};\n\nfunction read(buf, options) {\n\tif (typeof (buf) === \'string\') {\n\t\tbuf = Buffer.from(buf, \'binary\');\n\t}\n\tassert.buffer(buf, \'buf\');\n\n\tvar der = new asn1.BerReader(buf);\n\n\tder.readSequence();\n\tif (Math.abs(der.length - der.remain) > 1) {\n\t\tthrow (new Error(\'DER sequence does not contain whole byte \' +\n\t\t \'stream\'));\n\t}\n\n\tvar tbsStart = der.offset;\n\tder.readSequence();\n\tvar sigOffset = der.offset + der.length;\n\tvar tbsEnd = sigOffset;\n\n\tif (der.peek() === Local(0)) {\n\t\tder.readSequence(Local(0));\n\t\tvar version = der.readInt();\n\t\tassert.ok(version <= 3,\n\t\t \'only x.509 versions up to v3 supported\');\n\t}\n\n\tvar cert = {};\n\tcert.signatures = {};\n\tvar sig = (cert.signatures.x509 = {});\n\tsig.extras = {};\n\n\tcert.serial = readMPInt(der, \'serial\');\n\n\tder.readSequence();\n\tvar after = der.offset + der.length;\n\tvar certAlgOid = der.readOID();\n\tvar certAlg = SIGN_ALGS[certAlgOid];\n\tif (certAlg === undefined)\n\t\tthrow (new Error(\'unknown signature algorithm \' + certAlgOid));\n\n\tder._offset = after;\n\tcert.issuer = Identity.parseAsn1(der);\n\n\tder.readSequence();\n\tcert.validFrom = readDate(der);\n\tcert.validUntil = readDate(der);\n\n\tcert.subjects = [Identity.parseAsn1(der)];\n\n\tder.readSequence();\n\tafter = der.offset + der.length;\n\tcert.subjectKey = pkcs8.readPkcs8(undefined, \'public\', der);\n\tder._offset = after;\n\n\t/* issuerUniqueID */\n\tif (der.peek() === Local(1)) {\n\t\tder.readSequence(Local(1));\n\t\tsig.extras.issuerUniqueID =\n\t\t buf.slice(der.offset, der.offset + der.length);\n\t\tder._offset += der.length;\n\t}\n\n\t/* subjectUniqueID */\n\tif (der.peek() === Local(2)) {\n\t\tder.readSequence(Local(2));\n\t\tsig.extras.subjectUniqueID =\n\t\t buf.slice(der.offset, der.offset + der.length);\n\t\tder._offset += der.length;\n\t}\n\n\t/* extensions */\n\tif (der.peek() === Local(3)) {\n\t\tder.readSequence(Local(3));\n\t\tvar extEnd = der.offset + der.length;\n\t\tder.readSequence();\n\n\t\twhile (der.offset < extEnd)\n\t\t\treadExtension(cert, buf, der);\n\n\t\tassert.strictEqual(der.offset, extEnd);\n\t}\n\n\tassert.strictEqual(der.offset, sigOffset);\n\n\tder.readSequence();\n\tafter = der.offset + der.length;\n\tvar sigAlgOid = der.readOID();\n\tvar sigAlg = SIGN_ALGS[sigAlgOid];\n\tif (sigAlg === undefined)\n\t\tthrow (new Error(\'unknown signature algorithm \' + sigAlgOid));\n\tder._offset = after;\n\n\tvar sigData = der.readString(asn1.Ber.BitString, true);\n\tif (sigData[0] === 0)\n\t\tsigData = sigData.slice(1);\n\tvar algParts = sigAlg.split(\'-\');\n\n\tsig.signature = Signature.parse(sigData, algParts[0], \'asn1\');\n\tsig.signature.hashAlgorithm = algParts[1];\n\tsig.algo = sigAlg;\n\tsig.cache = buf.slice(tbsStart, tbsEnd);\n\n\treturn (new Certificate(cert));\n}\n\nfunction readDate(der) {\n\tif (der.peek() === asn1.Ber.UTCTime) {\n\t\treturn (utcTimeToDate(der.readString(asn1.Ber.UTCTime)));\n\t} else if (der.peek() === asn1.Ber.GeneralizedTime) {\n\t\treturn (gTimeToDate(der.readString(asn1.Ber.GeneralizedTime)));\n\t} else {\n\t\tthrow (new Error(\'Unsupported date format\'));\n\t}\n}\n\n/* RFC5280, section 4.2.1.6 (GeneralName type) */\nvar ALTNAME = {\n\tOtherName: Local(0),\n\tRFC822Name: Context(1),\n\tDNSName: Context(2),\n\tX400Address: Local(3),\n\tDirectoryName: Local(4),\n\tEDIPartyName: Local(5),\n\tURI: Context(6),\n\tIPAddress: Context(7),\n\tOID: Context(8)\n};\n\n/* RFC5280, section 4.2.1.12 (KeyPurposeId) */\nvar EXTPURPOSE = {\n\t\'serverAuth\': \'1.3.6.1.5.5.7.3.1\',\n\t\'clientAuth\': \'1.3.6.1.5.5.7.3.2\',\n\t\'codeSigning\': \'1.3.6.1.5.5.7.3.3\',\n\n\t/* See https://github.com/joyent/oid-docs/blob/master/root.md */\n\t\'joyentDocker\': \'1.3.6.1.4.1.38678.1.4.1\',\n\t\'joyentCmon\': \'1.3.6.1.4.1.38678.1.4.2\'\n};\nvar EXTPURPOSE_REV = {};\nObject.keys(EXTPURPOSE).forEach(function (k) {\n\tEXTPURPOSE_REV[EXTPURPOSE[k]] = k;\n});\n\nvar KEYUSEBITS = [\n\t\'signature\', \'identity\', \'keyEncryption\',\n\t\'encryption\', \'keyAgreement\', \'ca\', \'crl\'\n];\n\nfunction readExtension(cert, buf, der) {\n\tder.readSequence();\n\tvar after = der.offset + der.length;\n\tvar extId = der.readOID();\n\tvar id;\n\tvar sig = cert.signatures.x509;\n\tsig.extras.exts = [];\n\n\tvar critical;\n\tif (der.peek() === asn1.Ber.Boolean)\n\t\tcritical = der.readBoolean();\n\n\tswitch (extId) {\n\tcase (EXTS.basicConstraints):\n\t\tder.readSequence(asn1.Ber.OctetString);\n\t\tder.readSequence();\n\t\tvar bcEnd = der.offset + der.length;\n\t\tvar ca = false;\n\t\tif (der.peek() === asn1.Ber.Boolean)\n\t\t\tca = der.readBoolean();\n\t\tif (cert.purposes === undefined)\n\t\t\tcert.purposes = [];\n\t\tif (ca === true)\n\t\t\tcert.purposes.push(\'ca\');\n\t\tvar bc = { oid: extId, critical: critical };\n\t\tif (der.offset < bcEnd && der.peek() === asn1.Ber.Integer)\n\t\t\tbc.pathLen = der.readInt();\n\t\tsig.extras.exts.push(bc);\n\t\tbreak;\n\tcase (EXTS.extKeyUsage):\n\t\tder.readSequence(asn1.Ber.OctetString);\n\t\tder.readSequence();\n\t\tif (cert.purposes === undefined)\n\t\t\tcert.purposes = [];\n\t\tvar ekEnd = der.offset + der.length;\n\t\twhile (der.offset < ekEnd) {\n\t\t\tvar oid = der.readOID();\n\t\t\tcert.purposes.push(EXTPURPOSE_REV[oid] || oid);\n\t\t}\n\t\t/*\n\t\t * This is a bit of a hack: in the case where we have a cert\n\t\t * that\'s only allowed to do serverAuth or clientAuth (and not\n\t\t * the other), we want to make sure all our Subjects are of\n\t\t * the right type. But we already parsed our Subjects and\n\t\t * decided if they were hosts or users earlier (since it appears\n\t\t * first in the cert).\n\t\t *\n\t\t * So we go through and mutate them into the right kind here if\n\t\t * it doesn\'t match. This might not be hugely beneficial, as it\n\t\t * seems that single-purpose certs are not often seen in the\n\t\t * wild.\n\t\t */\n\t\tif (cert.purposes.indexOf(\'serverAuth\') !== -1 &&\n\t\t cert.purposes.indexOf(\'clientAuth\') === -1) {\n\t\t\tcert.subjects.forEach(function (ide) {\n\t\t\t\tif (ide.type !== \'host\') {\n\t\t\t\t\tide.type = \'host\';\n\t\t\t\t\tide.hostname = ide.uid ||\n\t\t\t\t\t ide.email ||\n\t\t\t\t\t ide.components[0].value;\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (cert.purposes.indexOf(\'clientAuth\') !== -1 &&\n\t\t cert.purposes.indexOf(\'serverAuth\') === -1) {\n\t\t\tcert.subjects.forEach(function (ide) {\n\t\t\t\tif (ide.type !== \'user\') {\n\t\t\t\t\tide.type = \'user\';\n\t\t\t\t\tide.uid = ide.hostname ||\n\t\t\t\t\t ide.email ||\n\t\t\t\t\t ide.components[0].value;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tsig.extras.exts.push({ oid: extId, critical: critical });\n\t\tbreak;\n\tcase (EXTS.keyUsage):\n\t\tder.readSequence(asn1.Ber.OctetString);\n\t\tvar bits = der.readString(asn1.Ber.BitString, true);\n\t\tvar setBits = readBitField(bits, KEYUSEBITS);\n\t\tsetBits.forEach(function (bit) {\n\t\t\tif (cert.purposes === undefined)\n\t\t\t\tcert.purposes = [];\n\t\t\tif (cert.purposes.indexOf(bit) === -1)\n\t\t\t\tcert.purposes.push(bit);\n\t\t});\n\t\tsig.extras.exts.push({ oid: extId, critical: critical,\n\t\t bits: bits });\n\t\tbreak;\n\tcase (EXTS.altName):\n\t\tder.readSequence(asn1.Ber.OctetString);\n\t\tder.readSequence();\n\t\tvar aeEnd = der.offset + der.length;\n\t\twhile (der.offset < aeEnd) {\n\t\t\tswitch (der.peek()) {\n\t\t\tcase ALTNAME.OtherName:\n\t\t\tcase ALTNAME.EDIPartyName:\n\t\t\t\tder.readSequence();\n\t\t\t\tder._offset += der.length;\n\t\t\t\tbreak;\n\t\t\tcase ALTNAME.OID:\n\t\t\t\tder.readOID(ALTNAME.OID);\n\t\t\t\tbreak;\n\t\t\tcase ALTNAME.RFC822Name:\n\t\t\t\t/* RFC822 specifies email addresses */\n\t\t\t\tvar email = der.readString(ALTNAME.RFC822Name);\n\t\t\t\tid = Identity.forEmail(email);\n\t\t\t\tif (!cert.subjects[0].equals(id))\n\t\t\t\t\tcert.subjects.push(id);\n\t\t\t\tbreak;\n\t\t\tcase ALTNAME.DirectoryName:\n\t\t\t\tder.readSequence(ALTNAME.DirectoryName);\n\t\t\t\tid = Identity.parseAsn1(der);\n\t\t\t\tif (!cert.subjects[0].equals(id))\n\t\t\t\t\tcert.subjects.push(id);\n\t\t\t\tbreak;\n\t\t\tcase ALTNAME.DNSName:\n\t\t\t\tvar host = der.readString(\n\t\t\t\t ALTNAME.DNSName);\n\t\t\t\tid = Identity.forHost(host);\n\t\t\t\tif (!cert.subjects[0].equals(id))\n\t\t\t\t\tcert.subjects.push(id);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tder.readString(der.peek());\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tsig.extras.exts.push({ oid: extId, critical: critical });\n\t\tbreak;\n\tdefault:\n\t\tsig.extras.exts.push({\n\t\t\toid: extId,\n\t\t\tcritical: critical,\n\t\t\tdata: der.readString(asn1.Ber.OctetString, true)\n\t\t});\n\t\tbreak;\n\t}\n\n\tder._offset = after;\n}\n\nvar UTCTIME_RE =\n /^([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})?Z$/;\nfunction utcTimeToDate(t) {\n\tvar m = t.match(UTCTIME_RE);\n\tassert.ok(m, \'timestamps must be in UTC\');\n\tvar d = new Date();\n\n\tvar thisYear = d.getUTCFullYear();\n\tvar century = Math.floor(thisYear / 100) * 100;\n\n\tvar year = parseInt(m[1], 10);\n\tif (thisYear % 100 < 50 && year >= 60)\n\t\tyear += (century - 1);\n\telse\n\t\tyear += century;\n\td.setUTCFullYear(year, parseInt(m[2], 10) - 1, parseInt(m[3], 10));\n\td.setUTCHours(parseInt(m[4], 10), parseInt(m[5], 10));\n\tif (m[6] && m[6].length > 0)\n\t\td.setUTCSeconds(parseInt(m[6], 10));\n\treturn (d);\n}\n\nvar GTIME_RE =\n /^([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})?Z$/;\nfunction gTimeToDate(t) {\n\tvar m = t.match(GTIME_RE);\n\tassert.ok(m);\n\tvar d = new Date();\n\n\td.setUTCFullYear(parseInt(m[1], 10), parseInt(m[2], 10) - 1,\n\t parseInt(m[3], 10));\n\td.setUTCHours(parseInt(m[4], 10), parseInt(m[5], 10));\n\tif (m[6] && m[6].length > 0)\n\t\td.setUTCSeconds(parseInt(m[6], 10));\n\treturn (d);\n}\n\nfunction zeroPad(n) {\n\tvar s = \'\' + n;\n\twhile (s.length < 2)\n\t\ts = \'0\' + s;\n\treturn (s);\n}\n\nfunction dateToUTCTime(d) {\n\tvar s = \'\';\n\ts += zeroPad(d.getUTCFullYear() % 100);\n\ts += zeroPad(d.getUTCMonth() + 1);\n\ts += zeroPad(d.getUTCDate());\n\ts += zeroPad(d.getUTCHours());\n\ts += zeroPad(d.getUTCMinutes());\n\ts += zeroPad(d.getUTCSeconds());\n\ts += \'Z\';\n\treturn (s);\n}\n\nfunction sign(cert, key) {\n\tif (cert.signatures.x509 === undefined)\n\t\tcert.signatures.x509 = {};\n\tvar sig = cert.signatures.x509;\n\n\tsig.algo = key.type + \'-\' + key.defaultHashAlgorithm();\n\tif (SIGN_ALGS[sig.algo] === undefined)\n\t\treturn (false);\n\n\tvar der = new asn1.BerWriter();\n\twriteTBSCert(cert, der);\n\tvar blob = der.buffer;\n\tsig.cache = blob;\n\n\tvar signer = key.createSign();\n\tsigner.write(blob);\n\tcert.signatures.x509.signature = signer.sign();\n\n\treturn (true);\n}\n\nfunction signAsync(cert, signer, done) {\n\tif (cert.signatures.x509 === undefined)\n\t\tcert.signatures.x509 = {};\n\tvar sig = cert.signatures.x509;\n\n\tvar der = new asn1.BerWriter();\n\twriteTBSCert(cert, der);\n\tvar blob = der.buffer;\n\tsig.cache = blob;\n\n\tsigner(blob, function (err, signature) {\n\t\tif (err) {\n\t\t\tdone(err);\n\t\t\treturn;\n\t\t}\n\t\tsig.algo = signature.type + \'-\' + signature.hashAlgorithm;\n\t\tif (SIGN_ALGS[sig.algo] === undefined) {\n\t\t\tdone(new Error(\'Invalid signing algorithm "\' +\n\t\t\t sig.algo + \'"\'));\n\t\t\treturn;\n\t\t}\n\t\tsig.signature = signature;\n\t\tdone();\n\t});\n}\n\nfunction write(cert, options) {\n\tvar sig = cert.signatures.x509;\n\tassert.object(sig, \'x509 signature\');\n\n\tvar der = new asn1.BerWriter();\n\tder.startSequence();\n\tif (sig.cache) {\n\t\tder._ensure(sig.cache.length);\n\t\tsig.cache.copy(der._buf, der._offset);\n\t\tder._offset += sig.cache.length;\n\t} else {\n\t\twriteTBSCert(cert, der);\n\t}\n\n\tder.startSequence();\n\tder.writeOID(SIGN_ALGS[sig.algo]);\n\tif (sig.algo.match(/^rsa-/))\n\t\tder.writeNull();\n\tder.endSequence();\n\n\tvar sigData = sig.signature.toBuffer(\'asn1\');\n\tvar data = Buffer.alloc(sigData.length + 1);\n\tdata[0] = 0;\n\tsigData.copy(data, 1);\n\tder.writeBuffer(data, asn1.Ber.BitString);\n\tder.endSequence();\n\n\treturn (der.buffer);\n}\n\nfunction writeTBSCert(cert, der) {\n\tvar sig = cert.signatures.x509;\n\tassert.object(sig, \'x509 signature\');\n\n\tder.startSequence();\n\n\tder.startSequence(Local(0));\n\tder.writeInt(2);\n\tder.endSequence();\n\n\tder.writeBuffer(utils.mpNormalize(cert.serial), asn1.Ber.Integer);\n\n\tder.startSequence();\n\tder.writeOID(SIGN_ALGS[sig.algo]);\n\tif (sig.algo.match(/^rsa-/))\n\t\tder.writeNull();\n\tder.endSequence();\n\n\tcert.issuer.toAsn1(der);\n\n\tder.startSequence();\n\tder.writeString(dateToUTCTime(cert.validFrom), asn1.Ber.UTCTime);\n\tder.writeString(dateToUTCTime(cert.validUntil), asn1.Ber.UTCTime);\n\tder.endSequence();\n\n\tvar subject = cert.subjects[0];\n\tvar altNames = cert.subjects.slice(1);\n\tsubject.toAsn1(der);\n\n\tpkcs8.writePkcs8(der, cert.subjectKey);\n\n\tif (sig.extras && sig.extras.issuerUniqueID) {\n\t\tder.writeBuffer(sig.extras.issuerUniqueID, Local(1));\n\t}\n\n\tif (sig.extras && sig.extras.subjectUniqueID) {\n\t\tder.writeBuffer(sig.extras.subjectUniqueID, Local(2));\n\t}\n\n\tif (altNames.length > 0 || subject.type === \'host\' ||\n\t (cert.purposes !== undefined && cert.purposes.length > 0) ||\n\t (sig.extras && sig.extras.exts)) {\n\t\tder.startSequence(Local(3));\n\t\tder.startSequence();\n\n\t\tvar exts = [];\n\t\tif (cert.purposes !== undefined && cert.purposes.length > 0) {\n\t\t\texts.push({\n\t\t\t\toid: EXTS.basicConstraints,\n\t\t\t\tcritical: true\n\t\t\t});\n\t\t\texts.push({\n\t\t\t\toid: EXTS.keyUsage,\n\t\t\t\tcritical: true\n\t\t\t});\n\t\t\texts.push({\n\t\t\t\toid: EXTS.extKeyUsage,\n\t\t\t\tcritical: true\n\t\t\t});\n\t\t}\n\t\texts.push({ oid: EXTS.altName });\n\t\tif (sig.extras && sig.extras.exts)\n\t\t\texts = sig.extras.exts;\n\n\t\tfor (var i = 0; i < exts.length; ++i) {\n\t\t\tder.startSequence();\n\t\t\tder.writeOID(exts[i].oid);\n\n\t\t\tif (exts[i].critical !== undefined)\n\t\t\t\tder.writeBoolean(exts[i].critical);\n\n\t\t\tif (exts[i].oid === EXTS.altName) {\n\t\t\t\tder.startSequence(asn1.Ber.OctetString);\n\t\t\t\tder.startSequence();\n\t\t\t\tif (subject.type === \'host\') {\n\t\t\t\t\tder.writeString(subject.hostname,\n\t\t\t\t\t Context(2));\n\t\t\t\t}\n\t\t\t\tfor (var j = 0; j < altNames.length; ++j) {\n\t\t\t\t\tif (altNames[j].type === \'host\') {\n\t\t\t\t\t\tder.writeString(\n\t\t\t\t\t\t altNames[j].hostname,\n\t\t\t\t\t\t ALTNAME.DNSName);\n\t\t\t\t\t} else if (altNames[j].type ===\n\t\t\t\t\t \'email\') {\n\t\t\t\t\t\tder.writeString(\n\t\t\t\t\t\t altNames[j].email,\n\t\t\t\t\t\t ALTNAME.RFC822Name);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * Encode anything else as a\n\t\t\t\t\t\t * DN style name for now.\n\t\t\t\t\t\t */\n\t\t\t\t\t\tder.startSequence(\n\t\t\t\t\t\t ALTNAME.DirectoryName);\n\t\t\t\t\t\taltNames[j].toAsn1(der);\n\t\t\t\t\t\tder.endSequence();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tder.endSequence();\n\t\t\t\tder.endSequence();\n\t\t\t} else if (exts[i].oid === EXTS.basicConstraints) {\n\t\t\t\tder.startSequence(asn1.Ber.OctetString);\n\t\t\t\tder.startSequence();\n\t\t\t\tvar ca = (cert.purposes.indexOf(\'ca\') !== -1);\n\t\t\t\tvar pathLen = exts[i].pathLen;\n\t\t\t\tder.writeBoolean(ca);\n\t\t\t\tif (pathLen !== undefined)\n\t\t\t\t\tder.writeInt(pathLen);\n\t\t\t\tder.endSequence();\n\t\t\t\tder.endSequence();\n\t\t\t} else if (exts[i].oid === EXTS.extKeyUsage) {\n\t\t\t\tder.startSequence(asn1.Ber.OctetString);\n\t\t\t\tder.startSequence();\n\t\t\t\tcert.purposes.forEach(function (purpose) {\n\t\t\t\t\tif (purpose === \'ca\')\n\t\t\t\t\t\treturn;\n\t\t\t\t\tif (KEYUSEBITS.indexOf(purpose) !== -1)\n\t\t\t\t\t\treturn;\n\t\t\t\t\tvar oid = purpose;\n\t\t\t\t\tif (EXTPURPOSE[purpose] !== undefined)\n\t\t\t\t\t\toid = EXTPURPOSE[purpose];\n\t\t\t\t\tder.writeOID(oid);\n\t\t\t\t});\n\t\t\t\tder.endSequence();\n\t\t\t\tder.endSequence();\n\t\t\t} else if (exts[i].oid === EXTS.keyUsage) {\n\t\t\t\tder.startSequence(asn1.Ber.OctetString);\n\t\t\t\t/*\n\t\t\t\t * If we parsed this certificate from a byte\n\t\t\t\t * stream (i.e. we didn\'t generate it in sshpk)\n\t\t\t\t * then we\'ll have a ".bits" property on the\n\t\t\t\t * ext with the original raw byte contents.\n\t\t\t\t *\n\t\t\t\t * If we have this, use it here instead of\n\t\t\t\t * regenerating it. This guarantees we output\n\t\t\t\t * the same data we parsed, so signatures still\n\t\t\t\t * validate.\n\t\t\t\t */\n\t\t\t\tif (exts[i].bits !== undefined) {\n\t\t\t\t\tder.writeBuffer(exts[i].bits,\n\t\t\t\t\t asn1.Ber.BitString);\n\t\t\t\t} else {\n\t\t\t\t\tvar bits = writeBitField(cert.purposes,\n\t\t\t\t\t KEYUSEBITS);\n\t\t\t\t\tder.writeBuffer(bits,\n\t\t\t\t\t asn1.Ber.BitString);\n\t\t\t\t}\n\t\t\t\tder.endSequence();\n\t\t\t} else {\n\t\t\t\tder.writeBuffer(exts[i].data,\n\t\t\t\t asn1.Ber.OctetString);\n\t\t\t}\n\n\t\t\tder.endSequence();\n\t\t}\n\n\t\tder.endSequence();\n\t\tder.endSequence();\n\t}\n\n\tder.endSequence();\n}\n\n/*\n * Reads an ASN.1 BER bitfield out of the Buffer produced by doing\n * `BerReader#readString(asn1.Ber.BitString)`. That function gives us the raw\n * contents of the BitString tag, which is a count of unused bits followed by\n * the bits as a right-padded byte string.\n *\n * `bits` is the Buffer, `bitIndex` should contain an array of string names\n * for the bits in the string, ordered starting with bit #0 in the ASN.1 spec.\n *\n * Returns an array of Strings, the names of the bits that were set to 1.\n */\nfunction readBitField(bits, bitIndex) {\n\tvar bitLen = 8 * (bits.length - 1) - bits[0];\n\tvar setBits = {};\n\tfor (var i = 0; i < bitLen; ++i) {\n\t\tvar byteN = 1 + Math.floor(i / 8);\n\t\tvar bit = 7 - (i % 8);\n\t\tvar mask = 1 << bit;\n\t\tvar bitVal = ((bits[byteN] & mask) !== 0);\n\t\tvar name = bitIndex[i];\n\t\tif (bitVal && typeof (name) === \'string\') {\n\t\t\tsetBits[name] = true;\n\t\t}\n\t}\n\treturn (Object.keys(setBits));\n}\n\n/*\n * `setBits` is an array of strings, containing the names for each bit that\n * sould be set to 1. `bitIndex` is same as in `readBitField()`.\n *\n * Returns a Buffer, ready to be written out with `BerWriter#writeString()`.\n */\nfunction writeBitField(setBits, bitIndex) {\n\tvar bitLen = bitIndex.length;\n\tvar blen = Math.ceil(bitLen / 8);\n\tvar unused = blen * 8 - bitLen;\n\tvar bits = Buffer.alloc(1 + blen); // zero-filled\n\tbits[0] = unused;\n\tfor (var i = 0; i < bitLen; ++i) {\n\t\tvar byteN = 1 + Math.floor(i / 8);\n\t\tvar bit = 7 - (i % 8);\n\t\tvar mask = 1 << bit;\n\t\tvar name = bitIndex[i];\n\t\tif (name === undefined)\n\t\t\tcontinue;\n\t\tvar bitVal = (setBits.indexOf(name) !== -1);\n\t\tif (bitVal) {\n\t\t\tbits[byteN] |= mask;\n\t\t}\n\t}\n\treturn (bits);\n}\n\n\n/***/ }),\n/* 107 */\n/*!***************************************************!*\\\n !*** ./node_modules/extsprintf/lib/extsprintf.js ***!\n \\***************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\n * extsprintf.js: extended POSIX-style sprintf\n */\n\nvar mod_assert = __webpack_require__(/*! assert */ 23);\nvar mod_util = __webpack_require__(/*! util */ 4);\n\n/*\n * Public interface\n */\nexports.sprintf = jsSprintf;\nexports.printf = jsPrintf;\nexports.fprintf = jsFprintf;\n\n/*\n * Stripped down version of s[n]printf(3c). We make a best effort to throw an\n * exception when given a format string we don\'t understand, rather than\n * ignoring it, so that we won\'t break existing programs if/when we go implement\n * the rest of this.\n *\n * This implementation currently supports specifying\n *\t- field alignment (\'-\' flag),\n * \t- zero-pad (\'0\' flag)\n *\t- always show numeric sign (\'+\' flag),\n *\t- field width\n *\t- conversions for strings, decimal integers, and floats (numbers).\n *\t- argument size specifiers. These are all accepted but ignored, since\n *\t Javascript has no notion of the physical size of an argument.\n *\n * Everything else is currently unsupported, most notably precision, unsigned\n * numbers, non-decimal numbers, and characters.\n */\nfunction jsSprintf(fmt)\n{\n\tvar regex = [\n\t \'([^%]*)\',\t\t\t\t/* normal text */\n\t \'%\',\t\t\t\t/* start of format */\n\t \'([\\\'\\\\-+ #0]*?)\',\t\t\t/* flags (optional) */\n\t \'([1-9]\\\\d*)?\',\t\t\t/* width (optional) */\n\t \'(\\\\.([1-9]\\\\d*))?\',\t\t/* precision (optional) */\n\t \'[lhjztL]*?\',\t\t\t/* length mods (ignored) */\n\t \'([diouxXfFeEgGaAcCsSp%jr])\'\t/* conversion */\n\t].join(\'\');\n\n\tvar re = new RegExp(regex);\n\tvar args = Array.prototype.slice.call(arguments, 1);\n\tvar flags, width, precision, conversion;\n\tvar left, pad, sign, arg, match;\n\tvar ret = \'\';\n\tvar argn = 1;\n\n\tmod_assert.equal(\'string\', typeof (fmt));\n\n\twhile ((match = re.exec(fmt)) !== null) {\n\t\tret += match[1];\n\t\tfmt = fmt.substring(match[0].length);\n\n\t\tflags = match[2] || \'\';\n\t\twidth = match[3] || 0;\n\t\tprecision = match[4] || \'\';\n\t\tconversion = match[6];\n\t\tleft = false;\n\t\tsign = false;\n\t\tpad = \' \';\n\n\t\tif (conversion == \'%\') {\n\t\t\tret += \'%\';\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (args.length === 0)\n\t\t\tthrow (new Error(\'too few args to sprintf\'));\n\n\t\targ = args.shift();\n\t\targn++;\n\n\t\tif (flags.match(/[\\\' #]/))\n\t\t\tthrow (new Error(\n\t\t\t \'unsupported flags: \' + flags));\n\n\t\tif (precision.length > 0)\n\t\t\tthrow (new Error(\n\t\t\t \'non-zero precision not supported\'));\n\n\t\tif (flags.match(/-/))\n\t\t\tleft = true;\n\n\t\tif (flags.match(/0/))\n\t\t\tpad = \'0\';\n\n\t\tif (flags.match(/\\+/))\n\t\t\tsign = true;\n\n\t\tswitch (conversion) {\n\t\tcase \'s\':\n\t\t\tif (arg === undefined || arg === null)\n\t\t\t\tthrow (new Error(\'argument \' + argn +\n\t\t\t\t \': attempted to print undefined or null \' +\n\t\t\t\t \'as a string\'));\n\t\t\tret += doPad(pad, width, left, arg.toString());\n\t\t\tbreak;\n\n\t\tcase \'d\':\n\t\t\targ = Math.floor(arg);\n\t\t\t/*jsl:fallthru*/\n\t\tcase \'f\':\n\t\t\tsign = sign && arg > 0 ? \'+\' : \'\';\n\t\t\tret += sign + doPad(pad, width, left,\n\t\t\t arg.toString());\n\t\t\tbreak;\n\n\t\tcase \'x\':\n\t\t\tret += doPad(pad, width, left, arg.toString(16));\n\t\t\tbreak;\n\n\t\tcase \'j\': /* non-standard */\n\t\t\tif (width === 0)\n\t\t\t\twidth = 10;\n\t\t\tret += mod_util.inspect(arg, false, width);\n\t\t\tbreak;\n\n\t\tcase \'r\': /* non-standard */\n\t\t\tret += dumpException(arg);\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\tthrow (new Error(\'unsupported conversion: \' +\n\t\t\t conversion));\n\t\t}\n\t}\n\n\tret += fmt;\n\treturn (ret);\n}\n\nfunction jsPrintf() {\n\tvar args = Array.prototype.slice.call(arguments);\n\targs.unshift(process.stdout);\n\tjsFprintf.apply(null, args);\n}\n\nfunction jsFprintf(stream) {\n\tvar args = Array.prototype.slice.call(arguments, 1);\n\treturn (stream.write(jsSprintf.apply(this, args)));\n}\n\nfunction doPad(chr, width, left, str)\n{\n\tvar ret = str;\n\n\twhile (ret.length < width) {\n\t\tif (left)\n\t\t\tret += chr;\n\t\telse\n\t\t\tret = chr + ret;\n\t}\n\n\treturn (ret);\n}\n\n/*\n * This function dumps long stack traces for exceptions having a cause() method.\n * See node-verror for an example.\n */\nfunction dumpException(ex)\n{\n\tvar ret;\n\n\tif (!(ex instanceof Error))\n\t\tthrow (new Error(jsSprintf(\'invalid type for %%r: %j\', ex)));\n\n\t/* Note that V8 prepends "ex.stack" with ex.toString(). */\n\tret = \'EXCEPTION: \' + ex.constructor.name + \': \' + ex.stack;\n\n\tif (ex.cause && typeof (ex.cause) === \'function\') {\n\t\tvar cex = ex.cause();\n\t\tif (cex) {\n\t\t\tret += \'\\nCaused by: \' + dumpException(cex);\n\t\t}\n\t}\n\n\treturn (ret);\n}\n\n\n/***/ }),\n/* 108 */\n/*!******************************************!*\\\n !*** ./node_modules/mime-types/index.js ***!\n \\******************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n/*!\n * mime-types\n * Copyright(c) 2014 Jonathan Ong\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n\n\n/**\n * Module dependencies.\n * @private\n */\n\nvar db = __webpack_require__(/*! mime-db */ 209)\nvar extname = __webpack_require__(/*! path */ 29).extname\n\n/**\n * Module variables.\n * @private\n */\n\nvar EXTRACT_TYPE_REGEXP = /^\\s*([^;\\s]*)(?:;|\\s|$)/\nvar TEXT_TYPE_REGEXP = /^text\\//i\n\n/**\n * Module exports.\n * @public\n */\n\nexports.charset = charset\nexports.charsets = { lookup: charset }\nexports.contentType = contentType\nexports.extension = extension\nexports.extensions = Object.create(null)\nexports.lookup = lookup\nexports.types = Object.create(null)\n\n// Populate the extensions/types maps\npopulateMaps(exports.extensions, exports.types)\n\n/**\n * Get the default charset for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction charset (type) {\n if (!type || typeof type !== \'string\') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n var mime = match && db[match[1].toLowerCase()]\n\n if (mime && mime.charset) {\n return mime.charset\n }\n\n // default text/* to utf-8\n if (match && TEXT_TYPE_REGEXP.test(match[1])) {\n return \'UTF-8\'\n }\n\n return false\n}\n\n/**\n * Create a full Content-Type header given a MIME type or extension.\n *\n * @param {string} str\n * @return {boolean|string}\n */\n\nfunction contentType (str) {\n // TODO: should this even be in this module?\n if (!str || typeof str !== \'string\') {\n return false\n }\n\n var mime = str.indexOf(\'/\') === -1\n ? exports.lookup(str)\n : str\n\n if (!mime) {\n return false\n }\n\n // TODO: use content-type or other module\n if (mime.indexOf(\'charset\') === -1) {\n var charset = exports.charset(mime)\n if (charset) mime += \'; charset=\' + charset.toLowerCase()\n }\n\n return mime\n}\n\n/**\n * Get the default extension for a MIME type.\n *\n * @param {string} type\n * @return {boolean|string}\n */\n\nfunction extension (type) {\n if (!type || typeof type !== \'string\') {\n return false\n }\n\n // TODO: use media-typer\n var match = EXTRACT_TYPE_REGEXP.exec(type)\n\n // get extensions\n var exts = match && exports.extensions[match[1].toLowerCase()]\n\n if (!exts || !exts.length) {\n return false\n }\n\n return exts[0]\n}\n\n/**\n * Lookup the MIME type for a file path/extension.\n *\n * @param {string} path\n * @return {boolean|string}\n */\n\nfunction lookup (path) {\n if (!path || typeof path !== \'string\') {\n return false\n }\n\n // get the extension ("ext" or ".ext" or full path)\n var extension = extname(\'x.\' + path)\n .toLowerCase()\n .substr(1)\n\n if (!extension) {\n return false\n }\n\n return exports.types[extension] || false\n}\n\n/**\n * Populate the extensions and types maps.\n * @private\n */\n\nfunction populateMaps (extensions, types) {\n // source preference (least -> most)\n var preference = [\'nginx\', \'apache\', undefined, \'iana\']\n\n Object.keys(db).forEach(function forEachMimeType (type) {\n var mime = db[type]\n var exts = mime.extensions\n\n if (!exts || !exts.length) {\n return\n }\n\n // mime -> extensions\n extensions[type] = exts\n\n // extension -> mime\n for (var i = 0; i < exts.length; i++) {\n var extension = exts[i]\n\n if (types[extension]) {\n var from = preference.indexOf(db[types[extension]].source)\n var to = preference.indexOf(mime.source)\n\n if (types[extension] !== \'application/octet-stream\' &&\n (from > to || (from === to && types[extension].substr(0, 12) === \'application/\'))) {\n // skip the remapping\n continue\n }\n }\n\n // set the extension -> mime\n types[extension] = type\n }\n })\n}\n\n\n/***/ }),\n/* 109 */\n/*!**********************!*\\\n !*** external "tls" ***!\n \\**********************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = require("tls");\n\n/***/ }),\n/* 110 */\n/*!*************************************************************!*\\\n !*** ./node_modules/combined-stream/lib/combined_stream.js ***!\n \\*************************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar util = __webpack_require__(/*! util */ 4);\nvar Stream = __webpack_require__(/*! stream */ 24).Stream;\nvar DelayedStream = __webpack_require__(/*! delayed-stream */ 213);\nvar defer = __webpack_require__(/*! ./defer.js */ 214);\n\nmodule.exports = CombinedStream;\nfunction CombinedStream() {\n this.writable = false;\n this.readable = true;\n this.dataSize = 0;\n this.maxDataSize = 2 * 1024 * 1024;\n this.pauseStreams = true;\n\n this._released = false;\n this._streams = [];\n this._currentStream = null;\n}\nutil.inherits(CombinedStream, Stream);\n\nCombinedStream.create = function(options) {\n var combinedStream = new this();\n\n options = options || {};\n for (var option in options) {\n combinedStream[option] = options[option];\n }\n\n return combinedStream;\n};\n\nCombinedStream.isStreamLike = function(stream) {\n return (typeof stream !== \'function\')\n && (typeof stream !== \'string\')\n && (typeof stream !== \'boolean\')\n && (typeof stream !== \'number\')\n && (!Buffer.isBuffer(stream));\n};\n\nCombinedStream.prototype.append = function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n\n if (isStreamLike) {\n if (!(stream instanceof DelayedStream)) {\n var newStream = DelayedStream.create(stream, {\n maxDataSize: Infinity,\n pauseStream: this.pauseStreams,\n });\n stream.on(\'data\', this._checkDataSize.bind(this));\n stream = newStream;\n }\n\n this._handleErrors(stream);\n\n if (this.pauseStreams) {\n stream.pause();\n }\n }\n\n this._streams.push(stream);\n return this;\n};\n\nCombinedStream.prototype.pipe = function(dest, options) {\n Stream.prototype.pipe.call(this, dest, options);\n this.resume();\n return dest;\n};\n\nCombinedStream.prototype._getNext = function() {\n this._currentStream = null;\n var stream = this._streams.shift();\n\n\n if (typeof stream == \'undefined\') {\n this.end();\n return;\n }\n\n if (typeof stream !== \'function\') {\n this._pipeNext(stream);\n return;\n }\n\n var getStream = stream;\n getStream(function(stream) {\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on(\'data\', this._checkDataSize.bind(this));\n this._handleErrors(stream);\n }\n\n defer(this._pipeNext.bind(this, stream));\n }.bind(this));\n};\n\nCombinedStream.prototype._pipeNext = function(stream) {\n this._currentStream = stream;\n\n var isStreamLike = CombinedStream.isStreamLike(stream);\n if (isStreamLike) {\n stream.on(\'end\', this._getNext.bind(this));\n stream.pipe(this, {end: false});\n return;\n }\n\n var value = stream;\n this.write(value);\n this._getNext();\n};\n\nCombinedStream.prototype._handleErrors = function(stream) {\n var self = this;\n stream.on(\'error\', function(err) {\n self._emitError(err);\n });\n};\n\nCombinedStream.prototype.write = function(data) {\n this.emit(\'data\', data);\n};\n\nCombinedStream.prototype.pause = function() {\n if (!this.pauseStreams) {\n return;\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == \'function\') this._currentStream.pause();\n this.emit(\'pause\');\n};\n\nCombinedStream.prototype.resume = function() {\n if (!this._released) {\n this._released = true;\n this.writable = true;\n this._getNext();\n }\n\n if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == \'function\') this._currentStream.resume();\n this.emit(\'resume\');\n};\n\nCombinedStream.prototype.end = function() {\n this._reset();\n this.emit(\'end\');\n};\n\nCombinedStream.prototype.destroy = function() {\n this._reset();\n this.emit(\'close\');\n};\n\nCombinedStream.prototype._reset = function() {\n this.writable = false;\n this._streams = [];\n this._currentStream = null;\n};\n\nCombinedStream.prototype._checkDataSize = function() {\n this._updateDataSize();\n if (this.dataSize <= this.maxDataSize) {\n return;\n }\n\n var message =\n \'DelayedStream#maxDataSize of \' + this.maxDataSize + \' bytes exceeded.\';\n this._emitError(new Error(message));\n};\n\nCombinedStream.prototype._updateDataSize = function() {\n this.dataSize = 0;\n\n var self = this;\n this._streams.forEach(function(stream) {\n if (!stream.dataSize) {\n return;\n }\n\n self.dataSize += stream.dataSize;\n });\n\n if (this._currentStream && this._currentStream.dataSize) {\n this.dataSize += this._currentStream.dataSize;\n }\n};\n\nCombinedStream.prototype._emitError = function(err) {\n this._reset();\n this.emit(\'error\', err);\n};\n\n\n/***/ }),\n/* 111 */\n/*!**********************************************!*\\\n !*** ./node_modules/asynckit/lib/iterate.js ***!\n \\**********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar async = __webpack_require__(/*! ./async.js */ 112)\n , abort = __webpack_require__(/*! ./abort.js */ 113)\n ;\n\n// API\nmodule.exports = iterate;\n\n/**\n * Iterates over each job object\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {object} state - current job status\n * @param {function} callback - invoked when all elements processed\n */\nfunction iterate(list, iterator, state, callback)\n{\n // store current index\n var key = state[\'keyedList\'] ? state[\'keyedList\'][state.index] : state.index;\n\n state.jobs[key] = runJob(iterator, key, list[key], function(error, output)\n {\n // don\'t repeat yourself\n // skip secondary callbacks\n if (!(key in state.jobs))\n {\n return;\n }\n\n // clean up jobs\n delete state.jobs[key];\n\n if (error)\n {\n // don\'t process rest of the results\n // stop still active jobs\n // and reset the list\n abort(state);\n }\n else\n {\n state.results[key] = output;\n }\n\n // return salvaged results\n callback(error, state.results);\n });\n}\n\n/**\n * Runs iterator over provided job element\n *\n * @param {function} iterator - iterator to invoke\n * @param {string|number} key - key/index of the element in the list of jobs\n * @param {mixed} item - job description\n * @param {function} callback - invoked after iterator is done with the job\n * @returns {function|mixed} - job abort function or something else\n */\nfunction runJob(iterator, key, item, callback)\n{\n var aborter;\n\n // allow shortcut if iterator expects only two arguments\n if (iterator.length == 2)\n {\n aborter = iterator(item, async(callback));\n }\n // otherwise go with full three arguments\n else\n {\n aborter = iterator(item, key, async(callback));\n }\n\n return aborter;\n}\n\n\n/***/ }),\n/* 112 */\n/*!********************************************!*\\\n !*** ./node_modules/asynckit/lib/async.js ***!\n \\********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar defer = __webpack_require__(/*! ./defer.js */ 217);\n\n// API\nmodule.exports = async;\n\n/**\n * Runs provided callback asynchronously\n * even if callback itself is not\n *\n * @param {function} callback - callback to invoke\n * @returns {function} - augmented callback\n */\nfunction async(callback)\n{\n var isAsync = false;\n\n // check if async happened\n defer(function() { isAsync = true; });\n\n return function async_callback(err, result)\n {\n if (isAsync)\n {\n callback(err, result);\n }\n else\n {\n defer(function nextTick_callback()\n {\n callback(err, result);\n });\n }\n };\n}\n\n\n/***/ }),\n/* 113 */\n/*!********************************************!*\\\n !*** ./node_modules/asynckit/lib/abort.js ***!\n \\********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\n// API\nmodule.exports = abort;\n\n/**\n * Aborts leftover active jobs\n *\n * @param {object} state - current state object\n */\nfunction abort(state)\n{\n Object.keys(state.jobs).forEach(clean.bind(state));\n\n // reset leftover jobs\n state.jobs = {};\n}\n\n/**\n * Cleans up leftover job by invoking abort function for the provided job id\n *\n * @this state\n * @param {string|number} key - job id to abort\n */\nfunction clean(key)\n{\n if (typeof this.jobs[key] == \'function\')\n {\n this.jobs[key]();\n }\n}\n\n\n/***/ }),\n/* 114 */\n/*!********************************************!*\\\n !*** ./node_modules/asynckit/lib/state.js ***!\n \\********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\n// API\nmodule.exports = state;\n\n/**\n * Creates initial state object\n * for iteration over list\n *\n * @param {array|object} list - list to iterate over\n * @param {function|null} sortMethod - function to use for keys sort,\n * or `null` to keep them as is\n * @returns {object} - initial state object\n */\nfunction state(list, sortMethod)\n{\n var isNamedList = !Array.isArray(list)\n , initState =\n {\n index : 0,\n keyedList: isNamedList || sortMethod ? Object.keys(list) : null,\n jobs : {},\n results : isNamedList ? {} : [],\n size : isNamedList ? Object.keys(list).length : list.length\n }\n ;\n\n if (sortMethod)\n {\n // sort array keys based on it\'s values\n // sort object\'s keys just on own merit\n initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)\n {\n return sortMethod(list[a], list[b]);\n });\n }\n\n return initState;\n}\n\n\n/***/ }),\n/* 115 */\n/*!*************************************************!*\\\n !*** ./node_modules/asynckit/lib/terminator.js ***!\n \\*************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar abort = __webpack_require__(/*! ./abort.js */ 113)\n , async = __webpack_require__(/*! ./async.js */ 112)\n ;\n\n// API\nmodule.exports = terminator;\n\n/**\n * Terminates jobs in the attached state context\n *\n * @this AsyncKitState#\n * @param {function} callback - final callback to invoke after termination\n */\nfunction terminator(callback)\n{\n if (!Object.keys(this.jobs).length)\n {\n return;\n }\n\n // fast forward iteration index\n this.index = this.size;\n\n // abort jobs\n abort(this);\n\n // send back results we have so far\n async(callback)(null, this.results);\n}\n\n\n/***/ }),\n/* 116 */\n/*!************************************************!*\\\n !*** ./node_modules/asynckit/serialOrdered.js ***!\n \\************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar iterate = __webpack_require__(/*! ./lib/iterate.js */ 111)\n , initState = __webpack_require__(/*! ./lib/state.js */ 114)\n , terminator = __webpack_require__(/*! ./lib/terminator.js */ 115)\n ;\n\n// Public API\nmodule.exports = serialOrdered;\n// sorting helpers\nmodule.exports.ascending = ascending;\nmodule.exports.descending = descending;\n\n/**\n * Runs iterator over provided sorted array elements in series\n *\n * @param {array|object} list - array or object (named list) to iterate over\n * @param {function} iterator - iterator to run\n * @param {function} sortMethod - custom sort function\n * @param {function} callback - invoked when all elements processed\n * @returns {function} - jobs terminator\n */\nfunction serialOrdered(list, iterator, sortMethod, callback)\n{\n var state = initState(list, sortMethod);\n\n iterate(list, iterator, state, function iteratorHandler(error, result)\n {\n if (error)\n {\n callback(error, result);\n return;\n }\n\n state.index++;\n\n // are we there yet?\n if (state.index < (state[\'keyedList\'] || list).length)\n {\n iterate(list, iterator, state, iteratorHandler);\n return;\n }\n\n // done here\n callback(null, state.results);\n });\n\n return terminator.bind(state, callback);\n}\n\n/*\n * -- Sort methods\n */\n\n/**\n * sort helper to sort array elements in ascending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction ascending(a, b)\n{\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\n/**\n * sort helper to sort array elements in descending order\n *\n * @param {mixed} a - an item to compare\n * @param {mixed} b - an item to compare\n * @returns {number} - comparison result\n */\nfunction descending(a, b)\n{\n return -1 * ascending(a, b);\n}\n\n\n/***/ }),\n/* 117 */\n/*!*******************************************!*\\\n !*** ./node_modules/isstream/isstream.js ***!\n \\*******************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar stream = __webpack_require__(/*! stream */ 24)\n\n\nfunction isStream (obj) {\n return obj instanceof stream.Stream\n}\n\n\nfunction isReadable (obj) {\n return isStream(obj) && typeof obj._read == \'function\' && typeof obj._readableState == \'object\'\n}\n\n\nfunction isWritable (obj) {\n return isStream(obj) && typeof obj._write == \'function\' && typeof obj._writableState == \'object\'\n}\n\n\nfunction isDuplex (obj) {\n return isReadable(obj) && isWritable(obj)\n}\n\n\nmodule.exports = isStream\nmodule.exports.isReadable = isReadable\nmodule.exports.isWritable = isWritable\nmodule.exports.isDuplex = isDuplex\n\n\n/***/ }),\n/* 118 */\n/*!**************************************!*\\\n !*** ./node_modules/qs/lib/index.js ***!\n \\**************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\nvar stringify = __webpack_require__(/*! ./stringify */ 223);\nvar parse = __webpack_require__(/*! ./parse */ 224);\nvar formats = __webpack_require__(/*! ./formats */ 120);\n\nmodule.exports = {\n formats: formats,\n parse: parse,\n stringify: stringify\n};\n\n\n/***/ }),\n/* 119 */\n/*!**************************************!*\\\n !*** ./node_modules/qs/lib/utils.js ***!\n \\**************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\nvar has = Object.prototype.hasOwnProperty;\n\nvar hexTable = (function () {\n var array = [];\n for (var i = 0; i < 256; ++i) {\n array.push(\'%\' + ((i < 16 ? \'0\' : \'\') + i.toString(16)).toUpperCase());\n }\n\n return array;\n}());\n\nvar compactQueue = function compactQueue(queue) {\n var obj;\n\n while (queue.length) {\n var item = queue.pop();\n obj = item.obj[item.prop];\n\n if (Array.isArray(obj)) {\n var compacted = [];\n\n for (var j = 0; j < obj.length; ++j) {\n if (typeof obj[j] !== \'undefined\') {\n compacted.push(obj[j]);\n }\n }\n\n item.obj[item.prop] = compacted;\n }\n }\n\n return obj;\n};\n\nvar arrayToObject = function arrayToObject(source, options) {\n var obj = options && options.plainObjects ? Object.create(null) : {};\n for (var i = 0; i < source.length; ++i) {\n if (typeof source[i] !== \'undefined\') {\n obj[i] = source[i];\n }\n }\n\n return obj;\n};\n\nvar merge = function merge(target, source, options) {\n if (!source) {\n return target;\n }\n\n if (typeof source !== \'object\') {\n if (Array.isArray(target)) {\n target.push(source);\n } else if (typeof target === \'object\') {\n if (options.plainObjects || options.allowPrototypes || !has.call(Object.prototype, source)) {\n target[source] = true;\n }\n } else {\n return [target, source];\n }\n\n return target;\n }\n\n if (typeof target !== \'object\') {\n return [target].concat(source);\n }\n\n var mergeTarget = target;\n if (Array.isArray(target) && !Array.isArray(source)) {\n mergeTarget = arrayToObject(target, options);\n }\n\n if (Array.isArray(target) && Array.isArray(source)) {\n source.forEach(function (item, i) {\n if (has.call(target, i)) {\n if (target[i] && typeof target[i] === \'object\') {\n target[i] = merge(target[i], item, options);\n } else {\n target.push(item);\n }\n } else {\n target[i] = item;\n }\n });\n return target;\n }\n\n return Object.keys(source).reduce(function (acc, key) {\n var value = source[key];\n\n if (has.call(acc, key)) {\n acc[key] = merge(acc[key], value, options);\n } else {\n acc[key] = value;\n }\n return acc;\n }, mergeTarget);\n};\n\nvar assign = function assignSingleSource(target, source) {\n return Object.keys(source).reduce(function (acc, key) {\n acc[key] = source[key];\n return acc;\n }, target);\n};\n\nvar decode = function (str) {\n try {\n return decodeURIComponent(str.replace(/\\+/g, \' \'));\n } catch (e) {\n return str;\n }\n};\n\nvar encode = function encode(str) {\n // This code was originally written by Brian White (mscdex) for the io.js core querystring library.\n // It has been adapted here for stricter adherence to RFC 3986\n if (str.length === 0) {\n return str;\n }\n\n var string = typeof str === \'string\' ? str : String(str);\n\n var out = \'\';\n for (var i = 0; i < string.length; ++i) {\n var c = string.charCodeAt(i);\n\n if (\n c === 0x2D // -\n || c === 0x2E // .\n || c === 0x5F // _\n || c === 0x7E // ~\n || (c >= 0x30 && c <= 0x39) // 0-9\n || (c >= 0x41 && c <= 0x5A) // a-z\n || (c >= 0x61 && c <= 0x7A) // A-Z\n ) {\n out += string.charAt(i);\n continue;\n }\n\n if (c < 0x80) {\n out = out + hexTable[c];\n continue;\n }\n\n if (c < 0x800) {\n out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);\n continue;\n }\n\n if (c < 0xD800 || c >= 0xE000) {\n out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);\n continue;\n }\n\n i += 1;\n c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));\n out += hexTable[0xF0 | (c >> 18)]\n + hexTable[0x80 | ((c >> 12) & 0x3F)]\n + hexTable[0x80 | ((c >> 6) & 0x3F)]\n + hexTable[0x80 | (c & 0x3F)];\n }\n\n return out;\n};\n\nvar compact = function compact(value) {\n var queue = [{ obj: { o: value }, prop: \'o\' }];\n var refs = [];\n\n for (var i = 0; i < queue.length; ++i) {\n var item = queue[i];\n var obj = item.obj[item.prop];\n\n var keys = Object.keys(obj);\n for (var j = 0; j < keys.length; ++j) {\n var key = keys[j];\n var val = obj[key];\n if (typeof val === \'object\' && val !== null && refs.indexOf(val) === -1) {\n queue.push({ obj: obj, prop: key });\n refs.push(val);\n }\n }\n }\n\n return compactQueue(queue);\n};\n\nvar isRegExp = function isRegExp(obj) {\n return Object.prototype.toString.call(obj) === \'[object RegExp]\';\n};\n\nvar isBuffer = function isBuffer(obj) {\n if (obj === null || typeof obj === \'undefined\') {\n return false;\n }\n\n return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));\n};\n\nmodule.exports = {\n arrayToObject: arrayToObject,\n assign: assign,\n compact: compact,\n decode: decode,\n encode: encode,\n isBuffer: isBuffer,\n isRegExp: isRegExp,\n merge: merge\n};\n\n\n/***/ }),\n/* 120 */\n/*!****************************************!*\\\n !*** ./node_modules/qs/lib/formats.js ***!\n \\****************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\nvar replace = String.prototype.replace;\nvar percentTwenties = /%20/g;\n\nmodule.exports = {\n \'default\': \'RFC3986\',\n formatters: {\n RFC1738: function (value) {\n return replace.call(value, percentTwenties, \'+\');\n },\n RFC3986: function (value) {\n return value;\n }\n },\n RFC1738: \'RFC1738\',\n RFC3986: \'RFC3986\'\n};\n\n\n/***/ }),\n/* 121 */\n/*!****************************************************!*\\\n !*** ./node_modules/ajv/lib/compile/schema_obj.js ***!\n \\****************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\nvar util = __webpack_require__(/*! ./util */ 34);\n\nmodule.exports = SchemaObject;\n\nfunction SchemaObject(obj) {\n util.copy(obj, this);\n}\n\n\n/***/ }),\n/* 122 */\n/*!**********************************************************!*\\\n !*** ./node_modules/fast-json-stable-stringify/index.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\nmodule.exports = function (data, opts) {\n if (!opts) opts = {};\n if (typeof opts === \'function\') opts = { cmp: opts };\n var cycles = (typeof opts.cycles === \'boolean\') ? opts.cycles : false;\n\n var cmp = opts.cmp && (function (f) {\n return function (node) {\n return function (a, b) {\n var aobj = { key: a, value: node[a] };\n var bobj = { key: b, value: node[b] };\n return f(aobj, bobj);\n };\n };\n })(opts.cmp);\n\n var seen = [];\n return (function stringify (node) {\n if (node && node.toJSON && typeof node.toJSON === \'function\') {\n node = node.toJSON();\n }\n\n if (node === undefined) return;\n if (typeof node == \'number\') return isFinite(node) ? \'\' + node : \'null\';\n if (typeof node !== \'object\') return JSON.stringify(node);\n\n var i, out;\n if (Array.isArray(node)) {\n out = \'[\';\n for (i = 0; i < node.length; i++) {\n if (i) out += \',\';\n out += stringify(node[i]) || \'null\';\n }\n return out + \']\';\n }\n\n if (node === null) return \'null\';\n\n if (seen.indexOf(node) !== -1) {\n if (cycles) return JSON.stringify(\'__cycle__\');\n throw new TypeError(\'Converting circular structure to JSON\');\n }\n\n var seenIndex = seen.push(node) - 1;\n var keys = Object.keys(node).sort(cmp && cmp(node));\n out = \'\';\n for (i = 0; i < keys.length; i++) {\n var key = keys[i];\n var value = stringify(node[key]);\n\n if (!value) continue;\n if (out) out += \',\';\n out += JSON.stringify(key) + \':\' + value;\n }\n seen.splice(seenIndex, 1);\n return \'{\' + out + \'}\';\n })(data);\n};\n\n\n/***/ }),\n/* 123 */\n/*!************************************************!*\\\n !*** ./node_modules/ajv/lib/dotjs/validate.js ***!\n \\************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nmodule.exports = function generate_validate(it, $keyword, $ruleType) {\n var out = \'\';\n var $async = it.schema.$async === true,\n $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, \'$ref\'),\n $id = it.self._getId(it.schema);\n if (it.isTop) {\n if ($async) {\n it.async = true;\n var $es7 = it.opts.async == \'es7\';\n it.yieldAwait = $es7 ? \'await\' : \'yield\';\n }\n out += \' var validate = \';\n if ($async) {\n if ($es7) {\n out += \' (async function \';\n } else {\n if (it.opts.async != \'*\') {\n out += \'co.wrap\';\n }\n out += \'(function* \';\n }\n } else {\n out += \' (function \';\n }\n out += \' (data, dataPath, parentData, parentDataProperty, rootData) { \\\'use strict\\\'; \';\n if ($id && (it.opts.sourceCode || it.opts.processCode)) {\n out += \' \' + (\'/\\*# sourceURL=\' + $id + \' */\') + \' \';\n }\n }\n if (typeof it.schema == \'boolean\' || !($refKeywords || it.schema.$ref)) {\n var $keyword = \'false schema\';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + \'/\' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = \'data\' + ($dataLvl || \'\');\n var $valid = \'valid\' + $lvl;\n if (it.schema === false) {\n if (it.isTop) {\n $breakOnError = true;\n } else {\n out += \' var \' + ($valid) + \' = false; \';\n }\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = \'\'; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += \' { keyword: \\\'\' + ($errorKeyword || \'false schema\') + \'\\\' , dataPath: (dataPath || \\\'\\\') + \' + (it.errorPath) + \' , schemaPath: \' + (it.util.toQuotedString($errSchemaPath)) + \' , params: {} \';\n if (it.opts.messages !== false) {\n out += \' , message: \\\'boolean schema is false\\\' \';\n }\n if (it.opts.verbose) {\n out += \' , schema: false , parentSchema: validate.schema\' + (it.schemaPath) + \' , data: \' + ($data) + \' \';\n }\n out += \' } \';\n } else {\n out += \' {} \';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\n if (it.async) {\n out += \' throw new ValidationError([\' + (__err) + \']); \';\n } else {\n out += \' validate.errors = [\' + (__err) + \']; return false; \';\n }\n } else {\n out += \' var err = \' + (__err) + \'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \';\n }\n } else {\n if (it.isTop) {\n if ($async) {\n out += \' return data; \';\n } else {\n out += \' validate.errors = null; return true; \';\n }\n } else {\n out += \' var \' + ($valid) + \' = true; \';\n }\n }\n if (it.isTop) {\n out += \' }); return validate; \';\n }\n return out;\n }\n if (it.isTop) {\n var $top = it.isTop,\n $lvl = it.level = 0,\n $dataLvl = it.dataLevel = 0,\n $data = \'data\';\n it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema));\n it.baseId = it.baseId || it.rootId;\n delete it.isTop;\n it.dataPathArr = [undefined];\n out += \' var vErrors = null; \';\n out += \' var errors = 0; \';\n out += \' if (rootData === undefined) rootData = data; \';\n } else {\n var $lvl = it.level,\n $dataLvl = it.dataLevel,\n $data = \'data\' + ($dataLvl || \'\');\n if ($id) it.baseId = it.resolve.url(it.baseId, $id);\n if ($async && !it.async) throw new Error(\'async schema in sync schema\');\n out += \' var errs_\' + ($lvl) + \' = errors;\';\n }\n var $valid = \'valid\' + $lvl,\n $breakOnError = !it.opts.allErrors,\n $closingBraces1 = \'\',\n $closingBraces2 = \'\';\n var $errorKeyword;\n var $typeSchema = it.schema.type,\n $typeIsArray = Array.isArray($typeSchema);\n if ($typeIsArray && $typeSchema.length == 1) {\n $typeSchema = $typeSchema[0];\n $typeIsArray = false;\n }\n if (it.schema.$ref && $refKeywords) {\n if (it.opts.extendRefs == \'fail\') {\n throw new Error(\'$ref: validation keywords used in schema at path "\' + it.errSchemaPath + \'" (see option extendRefs)\');\n } else if (it.opts.extendRefs !== true) {\n $refKeywords = false;\n it.logger.warn(\'$ref: keywords ignored in schema at path "\' + it.errSchemaPath + \'"\');\n }\n }\n if ($typeSchema) {\n if (it.opts.coerceTypes) {\n var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema);\n }\n var $rulesGroup = it.RULES.types[$typeSchema];\n if ($coerceToTypes || $typeIsArray || $rulesGroup === true || ($rulesGroup && !$shouldUseGroup($rulesGroup))) {\n var $schemaPath = it.schemaPath + \'.type\',\n $errSchemaPath = it.errSchemaPath + \'/type\';\n var $schemaPath = it.schemaPath + \'.type\',\n $errSchemaPath = it.errSchemaPath + \'/type\',\n $method = $typeIsArray ? \'checkDataTypes\' : \'checkDataType\';\n out += \' if (\' + (it.util[$method]($typeSchema, $data, true)) + \') { \';\n if ($coerceToTypes) {\n var $dataType = \'dataType\' + $lvl,\n $coerced = \'coerced\' + $lvl;\n out += \' var \' + ($dataType) + \' = typeof \' + ($data) + \'; \';\n if (it.opts.coerceTypes == \'array\') {\n out += \' if (\' + ($dataType) + \' == \\\'object\\\' && Array.isArray(\' + ($data) + \')) \' + ($dataType) + \' = \\\'array\\\'; \';\n }\n out += \' var \' + ($coerced) + \' = undefined; \';\n var $bracesCoercion = \'\';\n var arr1 = $coerceToTypes;\n if (arr1) {\n var $type, $i = -1,\n l1 = arr1.length - 1;\n while ($i < l1) {\n $type = arr1[$i += 1];\n if ($i) {\n out += \' if (\' + ($coerced) + \' === undefined) { \';\n $bracesCoercion += \'}\';\n }\n if (it.opts.coerceTypes == \'array\' && $type != \'array\') {\n out += \' if (\' + ($dataType) + \' == \\\'array\\\' && \' + ($data) + \'.length == 1) { \' + ($coerced) + \' = \' + ($data) + \' = \' + ($data) + \'[0]; \' + ($dataType) + \' = typeof \' + ($data) + \'; } \';\n }\n if ($type == \'string\') {\n out += \' if (\' + ($dataType) + \' == \\\'number\\\' || \' + ($dataType) + \' == \\\'boolean\\\') \' + ($coerced) + \' = \\\'\\\' + \' + ($data) + \'; else if (\' + ($data) + \' === null) \' + ($coerced) + \' = \\\'\\\'; \';\n } else if ($type == \'number\' || $type == \'integer\') {\n out += \' if (\' + ($dataType) + \' == \\\'boolean\\\' || \' + ($data) + \' === null || (\' + ($dataType) + \' == \\\'string\\\' && \' + ($data) + \' && \' + ($data) + \' == +\' + ($data) + \' \';\n if ($type == \'integer\') {\n out += \' && !(\' + ($data) + \' % 1)\';\n }\n out += \')) \' + ($coerced) + \' = +\' + ($data) + \'; \';\n } else if ($type == \'boolean\') {\n out += \' if (\' + ($data) + \' === \\\'false\\\' || \' + ($data) + \' === 0 || \' + ($data) + \' === null) \' + ($coerced) + \' = false; else if (\' + ($data) + \' === \\\'true\\\' || \' + ($data) + \' === 1) \' + ($coerced) + \' = true; \';\n } else if ($type == \'null\') {\n out += \' if (\' + ($data) + \' === \\\'\\\' || \' + ($data) + \' === 0 || \' + ($data) + \' === false) \' + ($coerced) + \' = null; \';\n } else if (it.opts.coerceTypes == \'array\' && $type == \'array\') {\n out += \' if (\' + ($dataType) + \' == \\\'string\\\' || \' + ($dataType) + \' == \\\'number\\\' || \' + ($dataType) + \' == \\\'boolean\\\' || \' + ($data) + \' == null) \' + ($coerced) + \' = [\' + ($data) + \']; \';\n }\n }\n }\n out += \' \' + ($bracesCoercion) + \' if (\' + ($coerced) + \' === undefined) { \';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = \'\'; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += \' { keyword: \\\'\' + ($errorKeyword || \'type\') + \'\\\' , dataPath: (dataPath || \\\'\\\') + \' + (it.errorPath) + \' , schemaPath: \' + (it.util.toQuotedString($errSchemaPath)) + \' , params: { type: \\\'\';\n if ($typeIsArray) {\n out += \'\' + ($typeSchema.join(","));\n } else {\n out += \'\' + ($typeSchema);\n }\n out += \'\\\' } \';\n if (it.opts.messages !== false) {\n out += \' , message: \\\'should be \';\n if ($typeIsArray) {\n out += \'\' + ($typeSchema.join(","));\n } else {\n out += \'\' + ($typeSchema);\n }\n out += \'\\\' \';\n }\n if (it.opts.verbose) {\n out += \' , schema: validate.schema\' + ($schemaPath) + \' , parentSchema: validate.schema\' + (it.schemaPath) + \' , data: \' + ($data) + \' \';\n }\n out += \' } \';\n } else {\n out += \' {} \';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\n if (it.async) {\n out += \' throw new ValidationError([\' + (__err) + \']); \';\n } else {\n out += \' validate.errors = [\' + (__err) + \']; return false; \';\n }\n } else {\n out += \' var err = \' + (__err) + \'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \';\n }\n out += \' } else { \';\n var $parentData = $dataLvl ? \'data\' + (($dataLvl - 1) || \'\') : \'parentData\',\n $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : \'parentDataProperty\';\n out += \' \' + ($data) + \' = \' + ($coerced) + \'; \';\n if (!$dataLvl) {\n out += \'if (\' + ($parentData) + \' !== undefined)\';\n }\n out += \' \' + ($parentData) + \'[\' + ($parentDataProperty) + \'] = \' + ($coerced) + \'; } \';\n } else {\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = \'\'; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += \' { keyword: \\\'\' + ($errorKeyword || \'type\') + \'\\\' , dataPath: (dataPath || \\\'\\\') + \' + (it.errorPath) + \' , schemaPath: \' + (it.util.toQuotedString($errSchemaPath)) + \' , params: { type: \\\'\';\n if ($typeIsArray) {\n out += \'\' + ($typeSchema.join(","));\n } else {\n out += \'\' + ($typeSchema);\n }\n out += \'\\\' } \';\n if (it.opts.messages !== false) {\n out += \' , message: \\\'should be \';\n if ($typeIsArray) {\n out += \'\' + ($typeSchema.join(","));\n } else {\n out += \'\' + ($typeSchema);\n }\n out += \'\\\' \';\n }\n if (it.opts.verbose) {\n out += \' , schema: validate.schema\' + ($schemaPath) + \' , parentSchema: validate.schema\' + (it.schemaPath) + \' , data: \' + ($data) + \' \';\n }\n out += \' } \';\n } else {\n out += \' {} \';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\n if (it.async) {\n out += \' throw new ValidationError([\' + (__err) + \']); \';\n } else {\n out += \' validate.errors = [\' + (__err) + \']; return false; \';\n }\n } else {\n out += \' var err = \' + (__err) + \'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \';\n }\n }\n out += \' } \';\n }\n }\n if (it.schema.$ref && !$refKeywords) {\n out += \' \' + (it.RULES.all.$ref.code(it, \'$ref\')) + \' \';\n if ($breakOnError) {\n out += \' } if (errors === \';\n if ($top) {\n out += \'0\';\n } else {\n out += \'errs_\' + ($lvl);\n }\n out += \') { \';\n $closingBraces2 += \'}\';\n }\n } else {\n if (it.opts.v5 && it.schema.patternGroups) {\n it.logger.warn(\'keyword "patternGroups" is deprecated and disabled. Use option patternGroups: true to enable.\');\n }\n var arr2 = it.RULES;\n if (arr2) {\n var $rulesGroup, i2 = -1,\n l2 = arr2.length - 1;\n while (i2 < l2) {\n $rulesGroup = arr2[i2 += 1];\n if ($shouldUseGroup($rulesGroup)) {\n if ($rulesGroup.type) {\n out += \' if (\' + (it.util.checkDataType($rulesGroup.type, $data)) + \') { \';\n }\n if (it.opts.useDefaults && !it.compositeRule) {\n if ($rulesGroup.type == \'object\' && it.schema.properties) {\n var $schema = it.schema.properties,\n $schemaKeys = Object.keys($schema);\n var arr3 = $schemaKeys;\n if (arr3) {\n var $propertyKey, i3 = -1,\n l3 = arr3.length - 1;\n while (i3 < l3) {\n $propertyKey = arr3[i3 += 1];\n var $sch = $schema[$propertyKey];\n if ($sch.default !== undefined) {\n var $passData = $data + it.util.getProperty($propertyKey);\n out += \' if (\' + ($passData) + \' === undefined) \' + ($passData) + \' = \';\n if (it.opts.useDefaults == \'shared\') {\n out += \' \' + (it.useDefault($sch.default)) + \' \';\n } else {\n out += \' \' + (JSON.stringify($sch.default)) + \' \';\n }\n out += \'; \';\n }\n }\n }\n } else if ($rulesGroup.type == \'array\' && Array.isArray(it.schema.items)) {\n var arr4 = it.schema.items;\n if (arr4) {\n var $sch, $i = -1,\n l4 = arr4.length - 1;\n while ($i < l4) {\n $sch = arr4[$i += 1];\n if ($sch.default !== undefined) {\n var $passData = $data + \'[\' + $i + \']\';\n out += \' if (\' + ($passData) + \' === undefined) \' + ($passData) + \' = \';\n if (it.opts.useDefaults == \'shared\') {\n out += \' \' + (it.useDefault($sch.default)) + \' \';\n } else {\n out += \' \' + (JSON.stringify($sch.default)) + \' \';\n }\n out += \'; \';\n }\n }\n }\n }\n }\n var arr5 = $rulesGroup.rules;\n if (arr5) {\n var $rule, i5 = -1,\n l5 = arr5.length - 1;\n while (i5 < l5) {\n $rule = arr5[i5 += 1];\n if ($shouldUseRule($rule)) {\n var $code = $rule.code(it, $rule.keyword, $rulesGroup.type);\n if ($code) {\n out += \' \' + ($code) + \' \';\n if ($breakOnError) {\n $closingBraces1 += \'}\';\n }\n }\n }\n }\n }\n if ($breakOnError) {\n out += \' \' + ($closingBraces1) + \' \';\n $closingBraces1 = \'\';\n }\n if ($rulesGroup.type) {\n out += \' } \';\n if ($typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes) {\n out += \' else { \';\n var $schemaPath = it.schemaPath + \'.type\',\n $errSchemaPath = it.errSchemaPath + \'/type\';\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = \'\'; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += \' { keyword: \\\'\' + ($errorKeyword || \'type\') + \'\\\' , dataPath: (dataPath || \\\'\\\') + \' + (it.errorPath) + \' , schemaPath: \' + (it.util.toQuotedString($errSchemaPath)) + \' , params: { type: \\\'\';\n if ($typeIsArray) {\n out += \'\' + ($typeSchema.join(","));\n } else {\n out += \'\' + ($typeSchema);\n }\n out += \'\\\' } \';\n if (it.opts.messages !== false) {\n out += \' , message: \\\'should be \';\n if ($typeIsArray) {\n out += \'\' + ($typeSchema.join(","));\n } else {\n out += \'\' + ($typeSchema);\n }\n out += \'\\\' \';\n }\n if (it.opts.verbose) {\n out += \' , schema: validate.schema\' + ($schemaPath) + \' , parentSchema: validate.schema\' + (it.schemaPath) + \' , data: \' + ($data) + \' \';\n }\n out += \' } \';\n } else {\n out += \' {} \';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\n if (it.async) {\n out += \' throw new ValidationError([\' + (__err) + \']); \';\n } else {\n out += \' validate.errors = [\' + (__err) + \']; return false; \';\n }\n } else {\n out += \' var err = \' + (__err) + \'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \';\n }\n out += \' } \';\n }\n }\n if ($breakOnError) {\n out += \' if (errors === \';\n if ($top) {\n out += \'0\';\n } else {\n out += \'errs_\' + ($lvl);\n }\n out += \') { \';\n $closingBraces2 += \'}\';\n }\n }\n }\n }\n }\n if ($breakOnError) {\n out += \' \' + ($closingBraces2) + \' \';\n }\n if ($top) {\n if ($async) {\n out += \' if (errors === 0) return data; \';\n out += \' else throw new ValidationError(vErrors); \';\n } else {\n out += \' validate.errors = vErrors; \';\n out += \' return errors === 0; \';\n }\n out += \' }); return validate;\';\n } else {\n out += \' var \' + ($valid) + \' = errors === errs_\' + ($lvl) + \';\';\n }\n out = it.util.cleanUpCode(out);\n if ($top) {\n out = it.util.finalCleanUpCode(out, $async);\n }\n\n function $shouldUseGroup($rulesGroup) {\n var rules = $rulesGroup.rules;\n for (var i = 0; i < rules.length; i++)\n if ($shouldUseRule(rules[i])) return true;\n }\n\n function $shouldUseRule($rule) {\n return it.schema[$rule.keyword] !== undefined || ($rule.implements && $ruleImplementsSomeKeyword($rule));\n }\n\n function $ruleImplementsSomeKeyword($rule) {\n var impl = $rule.implements;\n for (var i = 0; i < impl.length; i++)\n if (it.schema[impl[i]] !== undefined) return true;\n }\n return out;\n}\n\n\n/***/ }),\n/* 124 */\n/*!**********************************!*\\\n !*** ./node_modules/co/index.js ***!\n \\**********************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\n\n/**\n * slice() reference.\n */\n\nvar slice = Array.prototype.slice;\n\n/**\n * Expose `co`.\n */\n\nmodule.exports = co[\'default\'] = co.co = co;\n\n/**\n * Wrap the given generator `fn` into a\n * function that returns a promise.\n * This is a separate function so that\n * every `co()` call doesn\'t create a new,\n * unnecessary closure.\n *\n * @param {GeneratorFunction} fn\n * @return {Function}\n * @api public\n */\n\nco.wrap = function (fn) {\n createPromise.__generatorFunction__ = fn;\n return createPromise;\n function createPromise() {\n return co.call(this, fn.apply(this, arguments));\n }\n};\n\n/**\n * Execute the generator function or a generator\n * and return a promise.\n *\n * @param {Function} fn\n * @return {Promise}\n * @api public\n */\n\nfunction co(gen) {\n var ctx = this;\n var args = slice.call(arguments, 1)\n\n // we wrap everything in a promise to avoid promise chaining,\n // which leads to memory leak errors.\n // see https://github.com/tj/co/issues/180\n return new Promise(function(resolve, reject) {\n if (typeof gen === \'function\') gen = gen.apply(ctx, args);\n if (!gen || typeof gen.next !== \'function\') return resolve(gen);\n\n onFulfilled();\n\n /**\n * @param {Mixed} res\n * @return {Promise}\n * @api private\n */\n\n function onFulfilled(res) {\n var ret;\n try {\n ret = gen.next(res);\n } catch (e) {\n return reject(e);\n }\n next(ret);\n }\n\n /**\n * @param {Error} err\n * @return {Promise}\n * @api private\n */\n\n function onRejected(err) {\n var ret;\n try {\n ret = gen.throw(err);\n } catch (e) {\n return reject(e);\n }\n next(ret);\n }\n\n /**\n * Get the next value in the generator,\n * return a promise.\n *\n * @param {Object} ret\n * @return {Promise}\n * @api private\n */\n\n function next(ret) {\n if (ret.done) return resolve(ret.value);\n var value = toPromise.call(ctx, ret.value);\n if (value && isPromise(value)) return value.then(onFulfilled, onRejected);\n return onRejected(new TypeError(\'You may only yield a function, promise, generator, array, or object, \'\n + \'but the following object was passed: "\' + String(ret.value) + \'"\'));\n }\n });\n}\n\n/**\n * Convert a `yield`ed value into a promise.\n *\n * @param {Mixed} obj\n * @return {Promise}\n * @api private\n */\n\nfunction toPromise(obj) {\n if (!obj) return obj;\n if (isPromise(obj)) return obj;\n if (isGeneratorFunction(obj) || isGenerator(obj)) return co.call(this, obj);\n if (\'function\' == typeof obj) return thunkToPromise.call(this, obj);\n if (Array.isArray(obj)) return arrayToPromise.call(this, obj);\n if (isObject(obj)) return objectToPromise.call(this, obj);\n return obj;\n}\n\n/**\n * Convert a thunk to a promise.\n *\n * @param {Function}\n * @return {Promise}\n * @api private\n */\n\nfunction thunkToPromise(fn) {\n var ctx = this;\n return new Promise(function (resolve, reject) {\n fn.call(ctx, function (err, res) {\n if (err) return reject(err);\n if (arguments.length > 2) res = slice.call(arguments, 1);\n resolve(res);\n });\n });\n}\n\n/**\n * Convert an array of "yieldables" to a promise.\n * Uses `Promise.all()` internally.\n *\n * @param {Array} obj\n * @return {Promise}\n * @api private\n */\n\nfunction arrayToPromise(obj) {\n return Promise.all(obj.map(toPromise, this));\n}\n\n/**\n * Convert an object of "yieldables" to a promise.\n * Uses `Promise.all()` internally.\n *\n * @param {Object} obj\n * @return {Promise}\n * @api private\n */\n\nfunction objectToPromise(obj){\n var results = new obj.constructor();\n var keys = Object.keys(obj);\n var promises = [];\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var promise = toPromise.call(this, obj[key]);\n if (promise && isPromise(promise)) defer(promise, key);\n else results[key] = obj[key];\n }\n return Promise.all(promises).then(function () {\n return results;\n });\n\n function defer(promise, key) {\n // predefine the key in the result\n results[key] = undefined;\n promises.push(promise.then(function (res) {\n results[key] = res;\n }));\n }\n}\n\n/**\n * Check if `obj` is a promise.\n *\n * @param {Object} obj\n * @return {Boolean}\n * @api private\n */\n\nfunction isPromise(obj) {\n return \'function\' == typeof obj.then;\n}\n\n/**\n * Check if `obj` is a generator.\n *\n * @param {Mixed} obj\n * @return {Boolean}\n * @api private\n */\n\nfunction isGenerator(obj) {\n return \'function\' == typeof obj.next && \'function\' == typeof obj.throw;\n}\n\n/**\n * Check if `obj` is a generator function.\n *\n * @param {Mixed} obj\n * @return {Boolean}\n * @api private\n */\nfunction isGeneratorFunction(obj) {\n var constructor = obj.constructor;\n if (!constructor) return false;\n if (\'GeneratorFunction\' === constructor.name || \'GeneratorFunction\' === constructor.displayName) return true;\n return isGenerator(constructor.prototype);\n}\n\n/**\n * Check for plain object.\n *\n * @param {Mixed} val\n * @return {Boolean}\n * @api private\n */\n\nfunction isObject(val) {\n return Object == val.constructor;\n}\n\n\n/***/ }),\n/* 125 */\n/*!**********************************************!*\\\n !*** ./node_modules/ajv/lib/dotjs/_limit.js ***!\n \\**********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nmodule.exports = function generate__limit(it, $keyword, $ruleType) {\n var out = \' \';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + \'/\' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = \'data\' + ($dataLvl || \'\');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += \' var schema\' + ($lvl) + \' = \' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + \'; \';\n $schemaValue = \'schema\' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $isMax = $keyword == \'maximum\',\n $exclusiveKeyword = $isMax ? \'exclusiveMaximum\' : \'exclusiveMinimum\',\n $schemaExcl = it.schema[$exclusiveKeyword],\n $isDataExcl = it.opts.$data && $schemaExcl && $schemaExcl.$data,\n $op = $isMax ? \'<\' : \'>\',\n $notOp = $isMax ? \'>\' : \'<\',\n $errorKeyword = undefined;\n if ($isDataExcl) {\n var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr),\n $exclusive = \'exclusive\' + $lvl,\n $exclType = \'exclType\' + $lvl,\n $exclIsNumber = \'exclIsNumber\' + $lvl,\n $opExpr = \'op\' + $lvl,\n $opStr = \'\\\' + \' + $opExpr + \' + \\\'\';\n out += \' var schemaExcl\' + ($lvl) + \' = \' + ($schemaValueExcl) + \'; \';\n $schemaValueExcl = \'schemaExcl\' + $lvl;\n out += \' var \' + ($exclusive) + \'; var \' + ($exclType) + \' = typeof \' + ($schemaValueExcl) + \'; if (\' + ($exclType) + \' != \\\'boolean\\\' && \' + ($exclType) + \' != \\\'undefined\\\' && \' + ($exclType) + \' != \\\'number\\\') { \';\n var $errorKeyword = $exclusiveKeyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = \'\'; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += \' { keyword: \\\'\' + ($errorKeyword || \'_exclusiveLimit\') + \'\\\' , dataPath: (dataPath || \\\'\\\') + \' + (it.errorPath) + \' , schemaPath: \' + (it.util.toQuotedString($errSchemaPath)) + \' , params: {} \';\n if (it.opts.messages !== false) {\n out += \' , message: \\\'\' + ($exclusiveKeyword) + \' should be boolean\\\' \';\n }\n if (it.opts.verbose) {\n out += \' , schema: validate.schema\' + ($schemaPath) + \' , parentSchema: validate.schema\' + (it.schemaPath) + \' , data: \' + ($data) + \' \';\n }\n out += \' } \';\n } else {\n out += \' {} \';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\n if (it.async) {\n out += \' throw new ValidationError([\' + (__err) + \']); \';\n } else {\n out += \' validate.errors = [\' + (__err) + \']; return false; \';\n }\n } else {\n out += \' var err = \' + (__err) + \'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \';\n }\n out += \' } else if ( \';\n if ($isData) {\n out += \' (\' + ($schemaValue) + \' !== undefined && typeof \' + ($schemaValue) + \' != \\\'number\\\') || \';\n }\n out += \' \' + ($exclType) + \' == \\\'number\\\' ? ( (\' + ($exclusive) + \' = \' + ($schemaValue) + \' === undefined || \' + ($schemaValueExcl) + \' \' + ($op) + \'= \' + ($schemaValue) + \') ? \' + ($data) + \' \' + ($notOp) + \'= \' + ($schemaValueExcl) + \' : \' + ($data) + \' \' + ($notOp) + \' \' + ($schemaValue) + \' ) : ( (\' + ($exclusive) + \' = \' + ($schemaValueExcl) + \' === true) ? \' + ($data) + \' \' + ($notOp) + \'= \' + ($schemaValue) + \' : \' + ($data) + \' \' + ($notOp) + \' \' + ($schemaValue) + \' ) || \' + ($data) + \' !== \' + ($data) + \') { var op\' + ($lvl) + \' = \' + ($exclusive) + \' ? \\\'\' + ($op) + \'\\\' : \\\'\' + ($op) + \'=\\\';\';\n } else {\n var $exclIsNumber = typeof $schemaExcl == \'number\',\n $opStr = $op;\n if ($exclIsNumber && $isData) {\n var $opExpr = \'\\\'\' + $opStr + \'\\\'\';\n out += \' if ( \';\n if ($isData) {\n out += \' (\' + ($schemaValue) + \' !== undefined && typeof \' + ($schemaValue) + \' != \\\'number\\\') || \';\n }\n out += \' ( \' + ($schemaValue) + \' === undefined || \' + ($schemaExcl) + \' \' + ($op) + \'= \' + ($schemaValue) + \' ? \' + ($data) + \' \' + ($notOp) + \'= \' + ($schemaExcl) + \' : \' + ($data) + \' \' + ($notOp) + \' \' + ($schemaValue) + \' ) || \' + ($data) + \' !== \' + ($data) + \') { \';\n } else {\n if ($exclIsNumber && $schema === undefined) {\n $exclusive = true;\n $errorKeyword = $exclusiveKeyword;\n $errSchemaPath = it.errSchemaPath + \'/\' + $exclusiveKeyword;\n $schemaValue = $schemaExcl;\n $notOp += \'=\';\n } else {\n if ($exclIsNumber) $schemaValue = Math[$isMax ? \'min\' : \'max\']($schemaExcl, $schema);\n if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) {\n $exclusive = true;\n $errorKeyword = $exclusiveKeyword;\n $errSchemaPath = it.errSchemaPath + \'/\' + $exclusiveKeyword;\n $notOp += \'=\';\n } else {\n $exclusive = false;\n $opStr += \'=\';\n }\n }\n var $opExpr = \'\\\'\' + $opStr + \'\\\'\';\n out += \' if ( \';\n if ($isData) {\n out += \' (\' + ($schemaValue) + \' !== undefined && typeof \' + ($schemaValue) + \' != \\\'number\\\') || \';\n }\n out += \' \' + ($data) + \' \' + ($notOp) + \' \' + ($schemaValue) + \' || \' + ($data) + \' !== \' + ($data) + \') { \';\n }\n }\n $errorKeyword = $errorKeyword || $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = \'\'; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += \' { keyword: \\\'\' + ($errorKeyword || \'_limit\') + \'\\\' , dataPath: (dataPath || \\\'\\\') + \' + (it.errorPath) + \' , schemaPath: \' + (it.util.toQuotedString($errSchemaPath)) + \' , params: { comparison: \' + ($opExpr) + \', limit: \' + ($schemaValue) + \', exclusive: \' + ($exclusive) + \' } \';\n if (it.opts.messages !== false) {\n out += \' , message: \\\'should be \' + ($opStr) + \' \';\n if ($isData) {\n out += \'\\\' + \' + ($schemaValue);\n } else {\n out += \'\' + ($schemaValue) + \'\\\'\';\n }\n }\n if (it.opts.verbose) {\n out += \' , schema: \';\n if ($isData) {\n out += \'validate.schema\' + ($schemaPath);\n } else {\n out += \'\' + ($schema);\n }\n out += \' , parentSchema: validate.schema\' + (it.schemaPath) + \' , data: \' + ($data) + \' \';\n }\n out += \' } \';\n } else {\n out += \' {} \';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\n if (it.async) {\n out += \' throw new ValidationError([\' + (__err) + \']); \';\n } else {\n out += \' validate.errors = [\' + (__err) + \']; return false; \';\n }\n } else {\n out += \' var err = \' + (__err) + \'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \';\n }\n out += \' } \';\n if ($breakOnError) {\n out += \' else { \';\n }\n return out;\n}\n\n\n/***/ }),\n/* 126 */\n/*!***************************************************!*\\\n !*** ./node_modules/ajv/lib/dotjs/_limitItems.js ***!\n \\***************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nmodule.exports = function generate__limitItems(it, $keyword, $ruleType) {\n var out = \' \';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + \'/\' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = \'data\' + ($dataLvl || \'\');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += \' var schema\' + ($lvl) + \' = \' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + \'; \';\n $schemaValue = \'schema\' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $op = $keyword == \'maxItems\' ? \'>\' : \'<\';\n out += \'if ( \';\n if ($isData) {\n out += \' (\' + ($schemaValue) + \' !== undefined && typeof \' + ($schemaValue) + \' != \\\'number\\\') || \';\n }\n out += \' \' + ($data) + \'.length \' + ($op) + \' \' + ($schemaValue) + \') { \';\n var $errorKeyword = $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = \'\'; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += \' { keyword: \\\'\' + ($errorKeyword || \'_limitItems\') + \'\\\' , dataPath: (dataPath || \\\'\\\') + \' + (it.errorPath) + \' , schemaPath: \' + (it.util.toQuotedString($errSchemaPath)) + \' , params: { limit: \' + ($schemaValue) + \' } \';\n if (it.opts.messages !== false) {\n out += \' , message: \\\'should NOT have \';\n if ($keyword == \'maxItems\') {\n out += \'more\';\n } else {\n out += \'less\';\n }\n out += \' than \';\n if ($isData) {\n out += \'\\\' + \' + ($schemaValue) + \' + \\\'\';\n } else {\n out += \'\' + ($schema);\n }\n out += \' items\\\' \';\n }\n if (it.opts.verbose) {\n out += \' , schema: \';\n if ($isData) {\n out += \'validate.schema\' + ($schemaPath);\n } else {\n out += \'\' + ($schema);\n }\n out += \' , parentSchema: validate.schema\' + (it.schemaPath) + \' , data: \' + ($data) + \' \';\n }\n out += \' } \';\n } else {\n out += \' {} \';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\n if (it.async) {\n out += \' throw new ValidationError([\' + (__err) + \']); \';\n } else {\n out += \' validate.errors = [\' + (__err) + \']; return false; \';\n }\n } else {\n out += \' var err = \' + (__err) + \'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \';\n }\n out += \'} \';\n if ($breakOnError) {\n out += \' else { \';\n }\n return out;\n}\n\n\n/***/ }),\n/* 127 */\n/*!****************************************************!*\\\n !*** ./node_modules/ajv/lib/dotjs/_limitLength.js ***!\n \\****************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nmodule.exports = function generate__limitLength(it, $keyword, $ruleType) {\n var out = \' \';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + \'/\' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = \'data\' + ($dataLvl || \'\');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += \' var schema\' + ($lvl) + \' = \' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + \'; \';\n $schemaValue = \'schema\' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $op = $keyword == \'maxLength\' ? \'>\' : \'<\';\n out += \'if ( \';\n if ($isData) {\n out += \' (\' + ($schemaValue) + \' !== undefined && typeof \' + ($schemaValue) + \' != \\\'number\\\') || \';\n }\n if (it.opts.unicode === false) {\n out += \' \' + ($data) + \'.length \';\n } else {\n out += \' ucs2length(\' + ($data) + \') \';\n }\n out += \' \' + ($op) + \' \' + ($schemaValue) + \') { \';\n var $errorKeyword = $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = \'\'; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += \' { keyword: \\\'\' + ($errorKeyword || \'_limitLength\') + \'\\\' , dataPath: (dataPath || \\\'\\\') + \' + (it.errorPath) + \' , schemaPath: \' + (it.util.toQuotedString($errSchemaPath)) + \' , params: { limit: \' + ($schemaValue) + \' } \';\n if (it.opts.messages !== false) {\n out += \' , message: \\\'should NOT be \';\n if ($keyword == \'maxLength\') {\n out += \'longer\';\n } else {\n out += \'shorter\';\n }\n out += \' than \';\n if ($isData) {\n out += \'\\\' + \' + ($schemaValue) + \' + \\\'\';\n } else {\n out += \'\' + ($schema);\n }\n out += \' characters\\\' \';\n }\n if (it.opts.verbose) {\n out += \' , schema: \';\n if ($isData) {\n out += \'validate.schema\' + ($schemaPath);\n } else {\n out += \'\' + ($schema);\n }\n out += \' , parentSchema: validate.schema\' + (it.schemaPath) + \' , data: \' + ($data) + \' \';\n }\n out += \' } \';\n } else {\n out += \' {} \';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\n if (it.async) {\n out += \' throw new ValidationError([\' + (__err) + \']); \';\n } else {\n out += \' validate.errors = [\' + (__err) + \']; return false; \';\n }\n } else {\n out += \' var err = \' + (__err) + \'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \';\n }\n out += \'} \';\n if ($breakOnError) {\n out += \' else { \';\n }\n return out;\n}\n\n\n/***/ }),\n/* 128 */\n/*!********************************************************!*\\\n !*** ./node_modules/ajv/lib/dotjs/_limitProperties.js ***!\n \\********************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nmodule.exports = function generate__limitProperties(it, $keyword, $ruleType) {\n var out = \' \';\n var $lvl = it.level;\n var $dataLvl = it.dataLevel;\n var $schema = it.schema[$keyword];\n var $schemaPath = it.schemaPath + it.util.getProperty($keyword);\n var $errSchemaPath = it.errSchemaPath + \'/\' + $keyword;\n var $breakOnError = !it.opts.allErrors;\n var $errorKeyword;\n var $data = \'data\' + ($dataLvl || \'\');\n var $isData = it.opts.$data && $schema && $schema.$data,\n $schemaValue;\n if ($isData) {\n out += \' var schema\' + ($lvl) + \' = \' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + \'; \';\n $schemaValue = \'schema\' + $lvl;\n } else {\n $schemaValue = $schema;\n }\n var $op = $keyword == \'maxProperties\' ? \'>\' : \'<\';\n out += \'if ( \';\n if ($isData) {\n out += \' (\' + ($schemaValue) + \' !== undefined && typeof \' + ($schemaValue) + \' != \\\'number\\\') || \';\n }\n out += \' Object.keys(\' + ($data) + \').length \' + ($op) + \' \' + ($schemaValue) + \') { \';\n var $errorKeyword = $keyword;\n var $$outStack = $$outStack || [];\n $$outStack.push(out);\n out = \'\'; /* istanbul ignore else */\n if (it.createErrors !== false) {\n out += \' { keyword: \\\'\' + ($errorKeyword || \'_limitProperties\') + \'\\\' , dataPath: (dataPath || \\\'\\\') + \' + (it.errorPath) + \' , schemaPath: \' + (it.util.toQuotedString($errSchemaPath)) + \' , params: { limit: \' + ($schemaValue) + \' } \';\n if (it.opts.messages !== false) {\n out += \' , message: \\\'should NOT have \';\n if ($keyword == \'maxProperties\') {\n out += \'more\';\n } else {\n out += \'less\';\n }\n out += \' than \';\n if ($isData) {\n out += \'\\\' + \' + ($schemaValue) + \' + \\\'\';\n } else {\n out += \'\' + ($schema);\n }\n out += \' properties\\\' \';\n }\n if (it.opts.verbose) {\n out += \' , schema: \';\n if ($isData) {\n out += \'validate.schema\' + ($schemaPath);\n } else {\n out += \'\' + ($schema);\n }\n out += \' , parentSchema: validate.schema\' + (it.schemaPath) + \' , data: \' + ($data) + \' \';\n }\n out += \' } \';\n } else {\n out += \' {} \';\n }\n var __err = out;\n out = $$outStack.pop();\n if (!it.compositeRule && $breakOnError) { /* istanbul ignore if */\n if (it.async) {\n out += \' throw new ValidationError([\' + (__err) + \']); \';\n } else {\n out += \' validate.errors = [\' + (__err) + \']; return false; \';\n }\n } else {\n out += \' var err = \' + (__err) + \'; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; \';\n }\n out += \'} \';\n if ($breakOnError) {\n out += \' else { \';\n }\n return out;\n}\n\n\n/***/ }),\n/* 129 */\n/*!**************************************!*\\\n !*** ./node_modules/uuid/lib/rng.js ***!\n \\**************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n// Unique ID creation requires a high quality random # generator. In node.js\n// this is pretty straight-forward - we use the crypto API.\n\nvar crypto = __webpack_require__(/*! crypto */ 2);\n\nmodule.exports = function nodeRNG() {\n return crypto.randomBytes(16);\n};\n\n\n/***/ }),\n/* 130 */\n/*!**********************************************!*\\\n !*** ./node_modules/uuid/lib/bytesToUuid.js ***!\n \\**********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n return ([bth[buf[i++]], bth[buf[i++]], \n\tbth[buf[i++]], bth[buf[i++]], \'-\',\n\tbth[buf[i++]], bth[buf[i++]], \'-\',\n\tbth[buf[i++]], bth[buf[i++]], \'-\',\n\tbth[buf[i++]], bth[buf[i++]], \'-\',\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]],\n\tbth[buf[i++]], bth[buf[i++]]]).join(\'\');\n}\n\nmodule.exports = bytesToUuid;\n\n\n/***/ }),\n/* 131 */\n/*!*********************************!*\\\n !*** ./node_modules/uuid/v4.js ***!\n \\*********************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar rng = __webpack_require__(/*! ./lib/rng */ 129);\nvar bytesToUuid = __webpack_require__(/*! ./lib/bytesToUuid */ 130);\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof(options) == \'string\') {\n buf = options === \'binary\' ? new Array(16) : null;\n options = null;\n }\n options = options || {};\n\n var rnds = options.random || (options.rng || rng)();\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n rnds[6] = (rnds[6] & 0x0f) | 0x40;\n rnds[8] = (rnds[8] & 0x3f) | 0x80;\n\n // Copy bytes to buffer, if provided\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;\n\n\n/***/ }),\n/* 132 */\n/*!************************************************!*\\\n !*** ../app/node_modules/any-promise/index.js ***!\n \\************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(/*! ./register */ 293)().Promise\n\n\n/***/ }),\n/* 133 */\n/*!****************************************!*\\\n !*** ./node_modules/graceful-fs/fs.js ***!\n \\****************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\n\nvar fs = __webpack_require__(/*! fs */ 22)\n\nmodule.exports = clone(fs)\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\n\n/***/ }),\n/* 134 */\n/*!************************************************!*\\\n !*** ../app/node_modules/thenify-all/index.js ***!\n \\************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n\nvar thenify = __webpack_require__(/*! thenify */ 300)\n\nmodule.exports = thenifyAll\nthenifyAll.withCallback = withCallback\nthenifyAll.thenify = thenify\n\n/**\n * Promisifies all the selected functions in an object.\n *\n * @param {Object} source the source object for the async functions\n * @param {Object} [destination] the destination to set all the promisified methods\n * @param {Array} [methods] an array of method names of `source`\n * @return {Object}\n * @api public\n */\n\nfunction thenifyAll(source, destination, methods) {\n return promisifyAll(source, destination, methods, thenify)\n}\n\n/**\n * Promisifies all the selected functions in an object and backward compatible with callback.\n *\n * @param {Object} source the source object for the async functions\n * @param {Object} [destination] the destination to set all the promisified methods\n * @param {Array} [methods] an array of method names of `source`\n * @return {Object}\n * @api public\n */\n\nfunction withCallback(source, destination, methods) {\n return promisifyAll(source, destination, methods, thenify.withCallback)\n}\n\nfunction promisifyAll(source, destination, methods, promisify) {\n if (!destination) {\n destination = {};\n methods = Object.keys(source)\n }\n\n if (Array.isArray(destination)) {\n methods = destination\n destination = {}\n }\n\n if (!methods) {\n methods = Object.keys(source)\n }\n\n if (typeof source === \'function\') destination = promisify(source)\n\n methods.forEach(function (name) {\n // promisify only if it\'s a function\n if (typeof source[name] === \'function\') destination[name] = promisify(source[name])\n })\n\n // proxy the rest\n Object.keys(source).forEach(function (name) {\n if (deprecated(source, name)) return\n if (destination[name]) return\n destination[name] = source[name]\n })\n\n return destination\n}\n\nfunction deprecated(source, name) {\n var desc = Object.getOwnPropertyDescriptor(source, name)\n if (!desc || !desc.get) return false\n if (desc.get.name === \'deprecated\') return true\n return false\n}\n\n\n/***/ }),\n/* 135 */\n/*!********************************!*\\\n !*** external "child_process" ***!\n \\********************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports) {\n\nmodule.exports = require("child_process");\n\n/***/ }),\n/* 136 */\n/*!***************************************************!*\\\n !*** ./src/components/safeModeModal.component.ts ***!\n \\***************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, "__esModule", { value: true });\nconst core_1 = __webpack_require__(/*! @angular/core */ 0);\nconst ng_bootstrap_1 = __webpack_require__(/*! @ng-bootstrap/ng-bootstrap */ 35);\nlet SafeModeModalComponent = class SafeModeModalComponent {\n constructor(modalInstance) {\n this.modalInstance = modalInstance;\n this.error = window[\'safeModeReason\'];\n }\n close() {\n this.modalInstance.dismiss();\n }\n};\n__decorate([\n core_1.Input(),\n __metadata("design:type", Error)\n], SafeModeModalComponent.prototype, "error", void 0);\nSafeModeModalComponent = __decorate([\n core_1.Component({\n template: __webpack_require__(/*! ./safeModeModal.component.pug */ 303),\n }),\n __metadata("design:paramtypes", [ng_bootstrap_1.NgbActiveModal])\n], SafeModeModalComponent);\nexports.SafeModeModalComponent = SafeModeModalComponent;\n\n\n/***/ }),\n/* 137 */\n/*!**********************************************!*\\\n !*** ./src/components/checkbox.component.ts ***!\n \\**********************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, "__esModule", { value: true });\nvar CheckboxComponent_1;\nconst core_1 = __webpack_require__(/*! @angular/core */ 0);\nconst forms_1 = __webpack_require__(/*! @angular/forms */ 46);\nlet CheckboxComponent = CheckboxComponent_1 = class CheckboxComponent {\n constructor() {\n this.changed = new Array();\n }\n click() {\n core_1.NgZone.assertInAngularZone();\n if (this.disabled) {\n return;\n }\n this.model = !this.model;\n for (let fx of this.changed) {\n fx(this.model);\n }\n }\n writeValue(obj) {\n this.model = obj;\n }\n registerOnChange(fn) {\n this.changed.push(fn);\n }\n registerOnTouched(fn) {\n this.changed.push(fn);\n }\n setDisabledState(isDisabled) {\n this.disabled = isDisabled;\n }\n};\n__decorate([\n core_1.HostBinding(\'class.active\'), core_1.Input(),\n __metadata("design:type", Boolean)\n], CheckboxComponent.prototype, "model", void 0);\n__decorate([\n core_1.Input(),\n __metadata("design:type", Boolean)\n], CheckboxComponent.prototype, "disabled", void 0);\n__decorate([\n core_1.Input(),\n __metadata("design:type", String)\n], CheckboxComponent.prototype, "text", void 0);\n__decorate([\n core_1.HostListener(\'click\'),\n __metadata("design:type", Function),\n __metadata("design:paramtypes", []),\n __metadata("design:returntype", void 0)\n], CheckboxComponent.prototype, "click", null);\nCheckboxComponent = CheckboxComponent_1 = __decorate([\n core_1.Component({\n selector: \'checkbox\',\n template: __webpack_require__(/*! ./checkbox.component.pug */ 308),\n styles: [__webpack_require__(/*! ./checkbox.component.scss */ 309)],\n providers: [\n { provide: forms_1.NG_VALUE_ACCESSOR, useExisting: CheckboxComponent_1, multi: true },\n ]\n })\n], CheckboxComponent);\nexports.CheckboxComponent = CheckboxComponent;\n\n\n/***/ }),\n/* 138 */\n/*!****************************************************!*\\\n !*** ./src/components/renameTabModal.component.ts ***!\n \\****************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n"use strict";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, "__esModule", { value: true });\nconst core_1 = __webpack_require__(/*! @angular/core */ 0);\nconst ng_bootstrap_1 = __webpack_require__(/*! @ng-bootstrap/ng-bootstrap */ 35);\nlet RenameTabModalComponent = class RenameTabModalComponent {\n constructor(modalInstance) {\n this.modalInstance = modalInstance;\n }\n ngOnInit() {\n setTimeout(() => {\n this.input.nativeElement.focus();\n this.input.nativeElement.select();\n }, 250);\n }\n save() {\n this.modalInstance.close(this.value);\n }\n close() {\n this.modalInstance.dismiss();\n }\n};\n__decorate([\n core_1.Input(),\n __metadata("design:type", String)\n], RenameTabModalComponent.prototype, "value", void 0);\n__decorate([\n core_1.ViewChild(\'input\'),\n __metadata("design:type", core_1.ElementRef)\n], RenameTabModalComponent.prototype, "input", void 0);\nRenameTabModalComponent = __decorate([\n core_1.Component({\n selector: \'rename-tab-modal\',\n template: __webpack_require__(/*! ./renameTabModal.component.pug */ 321),\n }),\n __metadata("design:paramtypes", [ng_bootstrap_1.NgbActiveModal])\n], RenameTabModalComponent);\nexports.RenameTabModalComponent = RenameTabModalComponent;\n\n\n/***/ }),\n/* 139 */\n/*!*****************************************************!*\\\n !*** ../node_modules/style-loader/lib/addStyles.js ***!\n \\*****************************************************/\n/*! no static exports found */\n/*! all exports used */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/*! ModuleConcatenation bailout: Module is not an ECMAScript module */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\n\tMIT License http://www.opensource.org/licenses/mit-license.php\n\tAuthor Tobias Koppers @sokra\n*/\n\nvar stylesInDom = {};\n\nvar\tmemoize = function (fn) {\n\tvar memo;\n\n\treturn function () {\n\t\tif (typeof memo === "undefined") memo = fn.apply(this, arguments);\n\t\treturn memo;\n\t};\n};\n\nvar isOldIE = memoize(function () {\n\t// Test for IE <= 9 as proposed by Browserhacks\n\t// @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n\t// Tests for existence of standard globals is to allow style-loader\n\t// to operate correctly into non-standard environments\n\t// @see https://github.com/webpack-contrib/style-loader/issues/177\n\treturn window && document && document.all && !window.atob;\n});\n\nvar getTarget = function (target, parent) {\n if (parent){\n return parent.querySelector(target);\n }\n return document.querySelector(target);\n};\n\nvar getElement = (function (fn) {\n\tvar memo = {};\n\n\treturn function(target, parent) {\n // If passing function in options, then use it for resolve "head" element.\n // Useful for Shadow Root style i.e\n // {\n // insertInto: function () { return document.querySelector("#foo").shadowRoot }\n // }\n if (typeof target === \'function\') {\n return target();\n }\n if (typeof memo[target] === "undefined") {\n\t\t\tvar styleTarget = getTarget.call(this, target, parent);\n\t\t\t// Special case to return head of iframe instead of iframe itself\n\t\t\tif (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n\t\t\t\ttry {\n\t\t\t\t\t// This will throw an exception if access to iframe is blocked\n\t\t\t\t\t// due to cross-origin restrictions\n\t\t\t\t\tstyleTarget = styleTarget.contentDocument.head;\n\t\t\t\t} catch(e) {\n\t\t\t\t\tstyleTarget = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tmemo[target] = styleTarget;\n\t\t}\n\t\treturn memo[target]\n\t};\n})();\n\nvar singleton = null;\nvar\tsingletonCounter = 0;\nvar\tstylesInsertedAtTop = [];\n\nvar\tfixUrls = __webpack_require__(/*! ./urls */ 352);\n\nmodule.exports = function(list, options) {\n\tif (typeof DEBUG !== "undefined" && DEBUG) {\n\t\tif (typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment");\n\t}\n\n\toptions = options || {};\n\n\toptions.attrs = typeof options.attrs === "object" ? options.attrs : {};\n\n\t// Force single-tag solution on IE6-9, which has a hard limit on the # of ';\n if (this.inertBodyElement.querySelector && this.inertBodyElement.querySelector('svg img')) {\n // We just hit the Firefox bug - which prevents the inner img JS from being sanitized\n // so use the DOMParser strategy, if it is available.\n // If the DOMParser is not available then we are not in Firefox (Server/WebWorker?) so we\n // fall through to the default strategy below.\n if (isDOMParserAvailable()) {\n this.getInertBodyElement = this.getInertBodyElement_DOMParser;\n return;\n }\n }\n // None of the bugs were hit so it is safe for us to use the default InertDocument strategy\n this.getInertBodyElement = this.getInertBodyElement_InertDocument;\n }\n /**\n * Use XHR to create and fill an inert body element (on Safari 10.1)\n * See\n * https://github.com/cure53/DOMPurify/blob/a992d3a75031cb8bb032e5ea8399ba972bdf9a65/src/purify.js#L439-L449\n */\n InertBodyHelper.prototype.getInertBodyElement_XHR = function (html) {\n // We add these extra elements to ensure that the rest of the content is parsed as expected\n // e.g. leading whitespace is maintained and tags like `` do not get hoisted to the\n // `` tag.\n html = '' + html + '';\n try {\n html = encodeURI(html);\n }\n catch (e) {\n return null;\n }\n var xhr = new XMLHttpRequest();\n xhr.responseType = 'document';\n xhr.open('GET', 'data:text/html;charset=utf-8,' + html, false);\n xhr.send(undefined);\n var body = xhr.response.body;\n body.removeChild(body.firstChild);\n return body;\n };\n /**\n * Use DOMParser to create and fill an inert body element (on Firefox)\n * See https://github.com/cure53/DOMPurify/releases/tag/0.6.7\n *\n */\n InertBodyHelper.prototype.getInertBodyElement_DOMParser = function (html) {\n // We add these extra elements to ensure that the rest of the content is parsed as expected\n // e.g. leading whitespace is maintained and tags like `` do not get hoisted to the\n // `` tag.\n html = '' + html + '';\n try {\n var body = new window\n .DOMParser()\n .parseFromString(html, 'text/html')\n .body;\n body.removeChild(body.firstChild);\n return body;\n }\n catch (e) {\n return null;\n }\n };\n /**\n * Use an HTML5 `template` element, if supported, or an inert body element created via\n * `createHtmlDocument` to create and fill an inert DOM element.\n * This is the default sane strategy to use if the browser does not require one of the specialised\n * strategies above.\n */\n InertBodyHelper.prototype.getInertBodyElement_InertDocument = function (html) {\n // Prefer using