runway-cli 1.1.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,37 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
37
  };
@@ -124,6 +157,12 @@ async function deployCommand(options) {
124
157
  logger_1.logger.error('CLI not configured. Run "runway init" first.');
125
158
  return;
126
159
  }
160
+ // Check token validity before proceeding
161
+ if ((0, config_1.isTokenExpired)()) {
162
+ logger_1.logger.error('Your authentication token has expired.');
163
+ logger_1.logger.info('Run "runway login" to re-authenticate.');
164
+ return;
165
+ }
127
166
  const config = (0, config_1.getConfig)();
128
167
  logger_1.logger.dim(`Server: ${config.serverUrl}`);
129
168
  logger_1.logger.blank();
@@ -139,8 +178,13 @@ async function deployCommand(options) {
139
178
  logger_1.logger.error(error instanceof Error ? error.message : 'Unknown error');
140
179
  return;
141
180
  }
142
- // Determine project name
143
- let projectName = options.name || detectedProject.name;
181
+ // Determine project name — sanitize from package.json
182
+ const suggestedName = (detectedProject.name || path_1.default.basename(process.cwd()))
183
+ .replace(/^@[^/]+\//, '') // Remove npm scope (@scope/name → name)
184
+ .replace(/[^a-zA-Z0-9-_]/g, '-') // Replace invalid chars with hyphens
185
+ .replace(/^-+|-+$/g, '') // Trim leading/trailing hyphens
186
+ .toLowerCase();
187
+ let projectName = options.name || suggestedName;
144
188
  // Interactive mode if name not provided
145
189
  if (!options.name) {
146
190
  const answers = await inquirer_1.default.prompt([
@@ -249,6 +293,12 @@ async function deployCommand(options) {
249
293
  let buildOutputDir = detectedProject.buildOutputDir;
250
294
  if (buildMode === 'local') {
251
295
  logger_1.logger.step(1, 4, 'Building project...');
296
+ // Patch React Router basename before build (if applicable)
297
+ let didPatch = false;
298
+ if (projectType === 'react') {
299
+ const { ReactPatcher } = await Promise.resolve().then(() => __importStar(require('../services/reactPatcher')));
300
+ didPatch = await ReactPatcher.patch(process.cwd());
301
+ }
252
302
  const buildResult = await buildService_1.buildService.build({
253
303
  projectPath: process.cwd(),
254
304
  projectType,
@@ -256,6 +306,11 @@ async function deployCommand(options) {
256
306
  packageManager: detectedProject.packageManager,
257
307
  envFile: envFilePath,
258
308
  });
309
+ // Revert patch after build (keep user's source clean)
310
+ if (didPatch) {
311
+ const { ReactPatcher } = await Promise.resolve().then(() => __importStar(require('../services/reactPatcher')));
312
+ await ReactPatcher.revert(process.cwd());
313
+ }
259
314
  if (!buildResult.success) {
260
315
  logger_1.logger.error(`Build failed: ${buildResult.error}`);
261
316
  return;
@@ -382,6 +437,11 @@ async function deployCommand(options) {
382
437
  logger_1.logger.blank();
383
438
  logger_1.logger.info(`Your app is available at: ${config.serverUrl}/app/${safeName}`);
384
439
  }
440
+ // Show health warning if service didn't respond on its allocated port
441
+ if (finalStatus.healthWarning) {
442
+ logger_1.logger.blank();
443
+ logger_1.logger.warn(`⚠ Health check: ${finalStatus.healthWarning}`);
444
+ }
385
445
  }
386
446
  else {
387
447
  logger_1.logger.error(`Deployment failed: ${finalStatus.error || 'Unknown error'}`);
@@ -404,4 +464,4 @@ async function deployCommand(options) {
404
464
  }
405
465
  logger_1.logger.blank();
406
466
  }
407
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2RlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQXlJQSxzQ0FnVUM7QUF6Y0Qsd0RBQWdDO0FBQ2hDLDhDQUFzQjtBQUN0Qiw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLGtEQUEwQjtBQUUxQixpRUFBNEQ7QUFDNUQsMkRBQXdEO0FBQ3hELCtEQUE0RDtBQUM1RCw2REFBZ0U7QUFDaEUsNENBQTBEO0FBQzFELDRDQUF5QztBQVl6Qzs7R0FFRztBQUNILFNBQVMsWUFBWSxDQUFDLFFBQWdCO0lBQ3BDLE1BQU0sT0FBTyxHQUFHLFlBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELE1BQU0sSUFBSSxHQUEyQixFQUFFLENBQUM7SUFFeEMsS0FBSyxNQUFNLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQUUsU0FBUztRQUVsRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlDLHVDQUF1QztZQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUs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LE1BQU0sQ0FBQyxTQUFTLFFBQVEsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDL0UsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixlQUFNLENBQUMsS0FBSyxDQUFDLHNCQUFzQixXQUFXLENBQUMsS0FBSyxJQUFJLGVBQWUsRUFBRSxDQUFDLENBQUM7Z0JBQzNFLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNyQixlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2YsZUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixlQUFNLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7WUFDakQsZUFBTSxDQUFDLEdBQUcsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNOLGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNmLGVBQU0sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNyQyxlQUFNLENBQUMsR0FBRyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlucXVpcmVyIGZyb20gJ2lucXVpcmVyJztcbmltcG9ydCBvcmEgZnJvbSAnb3JhJztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBQcm9qZWN0VHlwZSwgQnVpbGRNb2RlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZGV0ZWN0UHJvamVjdCB9IGZyb20gJy4uL3NlcnZpY2VzL3Byb2plY3REZXRlY3Rvcic7XG5pbXBvcnQgeyBidWlsZFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9idWlsZFNlcnZpY2UnO1xuaW1wb3J0IHsgcGFja2FnZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wYWNrYWdlU2VydmljZSc7XG5pbXBvcnQgeyBjcmVhdGVVcGxvYWRTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdXBsb2FkU2VydmljZSc7XG5pbXBvcnQgeyBpc0NvbmZpZ3VyZWQsIGdldENvbmZpZyB9IGZyb20gJy4uL3V0aWxzL2NvbmZpZyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXInO1xuXG5pbnRlcmZhY2UgRGVwbG95T3B0aW9ucyB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBQcm9qZWN0VHlwZTtcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgYnVpbGRMb2NhbD86IGJvb2xlYW47XG4gIGJ1aWxkU2VydmVyPzogYm9vbGVhbjtcbiAgZW52RmlsZT86IHN0cmluZztcbiAgc2tpcEVudlByb21wdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyc2UgYSAuZW52IGZpbGUgaW50byBhIFJlY29yZFxuICovXG5mdW5jdGlvbiBwYXJzZUVudkZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGZvciAoY29uc3QgbGluZSBvZiBjb250ZW50LnNwbGl0KCdcXG4nKSkge1xuICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcbiAgICAvLyBTa2lwIGVtcHR5IGxpbmVzIGFuZCBjb21tZW50c1xuICAgIGlmICghdHJpbW1lZCB8fCB0cmltbWVkLnN0YXJ0c1dpdGgoJyMnKSkgY29udGludWU7XG5cbiAgICBjb25zdCBlcUluZGV4ID0gdHJpbW1lZC5pbmRleE9mKCc9Jyk7XG4gICAgaWYgKGVxSW5kZXggPiAwKSB7XG4gICAgICBjb25zdCBrZXkgPSB0cmltbWVkLnNsaWNlKDAsIGVxSW5kZXgpLnRyaW0oKTtcbiAgICAgIGxldCB2YWx1ZSA9IHRyaW1tZWQuc2xpY2UoZXFJbmRleCArIDEpLnRyaW0oKTtcbiAgICAgIC8vIFJlbW92ZSBzdXJyb3VuZGluZyBxdW90ZXMgaWYgcHJlc2VudFxuICAgICAgaWYgKCh2YWx1ZS5zdGFydHNXaXRoKCdcIicpICYmIHZhbHVlLmVuZHNXaXRoKCdcIicpKSB8fFxuICAgICAgICAgICh2YWx1ZS5zdGFydHNXaXRoKFwiJ1wiKSAmJiB2YWx1ZS5lbmRzV2l0aChcIidcIikpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSwgLTEpO1xuICAgICAgfVxuICAgICAgdmFyc1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhcnM7XG59XG5cbi8qKlxuICogUHJvbXB0IHVzZXIgZm9yIG1hbnVhbCBFTlYgdmFyaWFibGUgZW50cnlcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvbXB0TWFudWFsRW52VmFycygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGxvZ2dlci5kaW0oJ0VudGVyIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZW1wdHkgbmFtZSB0byBmaW5pc2gpOicpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeyBrZXkgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICdrZXknLFxuICAgICAgICBtZXNzYWdlOiAnVmFyaWFibGUgbmFtZTonLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIGlmICgha2V5IHx8ICFrZXkudHJpbSgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb25zdCB7IHZhbHVlIH0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICBtZXNzYWdlOiBgVmFsdWUgZm9yICR7a2V5fTpgLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIHZhcnNba2V5LnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvW15BLVowLTlfXS9nLCAnJyldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdmFycztcbn1cblxuLyoqXG4gKiBQcm9tcHQgdXNlciBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgb3B0aW9ucyB3aGVuIG5vIC5lbnYgZmlsZSBleGlzdHNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvbXB0RW52T3B0aW9ucygpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IGVudkNob2ljZSB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBuYW1lOiAnZW52Q2hvaWNlJyxcbiAgICAgIG1lc3NhZ2U6ICdIb3cgd291bGQgeW91IGxpa2UgdG8gcHJvdmlkZSBlbnZpcm9ubWVudCB2YXJpYWJsZXM/JyxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgeyBuYW1lOiAnU3BlY2lmeSBwYXRoIHRvIC5lbnYgZmlsZScsIHZhbHVlOiAncGF0aCcgfSxcbiAgICAgICAgeyBuYW1lOiAnRW50ZXIgdmFyaWFibGVzIG1hbnVhbGx5IChjcmVhdGVzIC5lbnYpJywgdmFsdWU6ICdtYW51YWwnIH0sXG4gICAgICAgIHsgbmFtZTogJ0NvbnRpbnVlIHdpdGhvdXQgZW52aXJvbm1lbnQgdmFyaWFibGVzJywgdmFsdWU6ICdza2lwJyB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdKTtcblxuICBpZiAoZW52Q2hvaWNlID09PSAncGF0aCcpIHtcbiAgICBjb25zdCB7IGVudlBhdGggfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICdlbnZQYXRoJyxcbiAgICAgICAgbWVzc2FnZTogJ1BhdGggdG8gZW52IGZpbGU6JyxcbiAgICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKCFpbnB1dC50cmltKCkpIHJldHVybiAnUGxlYXNlIGVudGVyIGEgcGF0aCc7XG4gICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGlucHV0KSkgcmV0dXJuICdGaWxlIG5vdCBmb3VuZCc7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICAgIGxvZ2dlci5zdWNjZXNzKGBVc2luZyBlbnYgZmlsZTogJHtlbnZQYXRofWApO1xuICAgIHJldHVybiBlbnZQYXRoO1xuICB9XG5cbiAgaWYgKGVudkNob2ljZSA9PT0gJ21hbnVhbCcpIHtcbiAgICBjb25zdCB2YXJzID0gYXdhaXQgcHJvbXB0TWFudWFsRW52VmFycygpO1xuICAgIGlmIChPYmplY3Qua2V5cyh2YXJzKS5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBXcml0ZSB0byAuZW52IGZpbGUgaW4gcHJvamVjdFxuICAgICAgY29uc3QgZW52Q29udGVudCA9IE9iamVjdC5lbnRyaWVzKHZhcnMpXG4gICAgICAgIC5tYXAoKFtrLCB2XSkgPT4gYCR7a309JHt2fWApXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgIGNvbnN0IGVudlBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJy5lbnYnKTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoZW52UGF0aCwgZW52Q29udGVudCk7XG4gICAgICBsb2dnZXIuc3VjY2VzcyhgQ3JlYXRlZCAuZW52IHdpdGggJHtPYmplY3Qua2V5cyh2YXJzKS5sZW5ndGh9IHZhcmlhYmxlc2ApO1xuICAgICAgcmV0dXJuIGVudlBhdGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlcGxveUNvbW1hbmQob3B0aW9uczogRGVwbG95T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBsb2dnZXIuaGVhZGVyKCdSdW53YXkgRGVwbG95Jyk7XG5cbiAgLy8gQ2hlY2sgY29uZmlndXJhdGlvblxuICBpZiAoIWlzQ29uZmlndXJlZCgpKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdDTEkgbm90IGNvbmZpZ3VyZWQuIFJ1biBcInJ1bndheSBpbml0XCIgZmlyc3QuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGxvZ2dlci5kaW0oYFNlcnZlcjogJHtjb25maWcuc2VydmVyVXJsfWApO1xuICBsb2dnZXIuYmxhbmsoKTtcblxuICAvLyBEZXRlY3QgcHJvamVjdFxuICBjb25zdCBzcGlubmVyID0gb3JhKCdEZXRlY3RpbmcgcHJvamVjdC4uLicpLnN0YXJ0KCk7XG4gIGxldCBkZXRlY3RlZFByb2plY3Q7XG5cbiAgdHJ5IHtcbiAgICBkZXRlY3RlZFByb2plY3QgPSBhd2FpdCBkZXRlY3RQcm9qZWN0KCk7XG4gICAgc3Bpbm5lci5zdWNjZWVkKGBEZXRlY3RlZDogJHtkZXRlY3RlZFByb2plY3QudHlwZX0gcHJvamVjdCAoJHtkZXRlY3RlZFByb2plY3QucGFja2FnZU1hbmFnZXJ9KWApO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHNwaW5uZXIuZmFpbCgnRmFpbGVkIHRvIGRldGVjdCBwcm9qZWN0Jyk7XG4gICAgbG9nZ2VyLmVycm9yKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBEZXRlcm1pbmUgcHJvamVjdCBuYW1lXG4gIGxldCBwcm9qZWN0TmFtZSA9IG9wdGlvbnMubmFtZSB8fCBkZXRlY3RlZFByb2plY3QubmFtZTtcblxuICAvLyBJbnRlcmFjdGl2ZSBtb2RlIGlmIG5hbWUgbm90IHByb3ZpZGVkXG4gIGlmICghb3B0aW9ucy5uYW1lKSB7XG4gICAgY29uc3QgYW5zd2VycyA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICduYW1lJyxcbiAgICAgICAgbWVzc2FnZTogJ1Byb2plY3QgbmFtZTonLFxuICAgICAgICBkZWZhdWx0OiBwcm9qZWN0TmFtZSxcbiAgICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA8IDIpIHJldHVybiAnTmFtZSBtdXN0IGJlIGF0IGxlYXN0IDIgY2hhcmFjdGVycyc7XG4gICAgICAgICAgaWYgKCEvXlthLXpBLVowLTktX10rJC8udGVzdChpbnB1dCkpIHJldHVybiAnTmFtZSBjYW4gb25seSBjb250YWluIGxldHRlcnMsIG51bWJlcnMsIGh5cGhlbnMsIGFuZCB1bmRlcnNjb3Jlcyc7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICAgIHByb2plY3ROYW1lID0gYW5zd2Vycy5uYW1lO1xuICB9XG5cbiAgLy8gQXNrIGlmIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgcmVxdWlyZWRcbiAgY29uc3QgeyBuZWVkc0VudiB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBuYW1lOiAnbmVlZHNFbnYnLFxuICAgICAgbWVzc2FnZTogJ0RvZXMgdGhpcyBwcm9qZWN0IHJlcXVpcmUgZW52aXJvbm1lbnQgdmFyaWFibGVzPycsXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICB9LFxuICBdKTtcblxuICBsZXQgZW52RmlsZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbGV0IGVudlZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgbGV0IGVudkluamVjdGVkID0gZmFsc2U7XG5cbiAgaWYgKG5lZWRzRW52KSB7XG4gICAgY29uc3QgZGVmYXVsdEVudlBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJy5lbnYnKTtcbiAgICBjb25zdCBoYXNFbnZGaWxlID0gZnMuZXhpc3RzU3luYyhkZWZhdWx0RW52UGF0aCk7XG5cbiAgICBpZiAoaGFzRW52RmlsZSkge1xuICAgICAgLy8gLmVudiBmb3VuZCAtIGNvbmZpcm0gd2l0aCB1c2VyXG4gICAgICBjb25zdCB7IHVzZUV4aXN0aW5nIH0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgICAgIG5hbWU6ICd1c2VFeGlzdGluZycsXG4gICAgICAgICAgbWVzc2FnZTogJ0ZvdW5kIC5lbnYgZmlsZSBpbiBwcm9qZWN0LiBVc2UgaXQ/JyxcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgXSk7XG5cbiAgICAgIGlmICh1c2VFeGlzdGluZykge1xuICAgICAgICBlbnZGaWxlUGF0aCA9IGRlZmF1bHRFbnZQYXRoO1xuICAgICAgICBlbnZWYXJzID0gcGFyc2VFbnZGaWxlKGRlZmF1bHRFbnZQYXRoKTtcbiAgICAgICAgZW52SW5qZWN0ZWQgPSBPYmplY3Qua2V5cyhlbnZWYXJzKS5sZW5ndGggPiAwO1xuICAgICAgICBsb2dnZXIuc3VjY2VzcyhgTG9hZGVkICR7T2JqZWN0LmtleXMoZW52VmFycykubGVuZ3RofSB2YXJpYWJsZXMgZnJvbSAuZW52YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBVc2VyIGRlY2xpbmVkIGV4aXN0aW5nIC5lbnYgLSBzaG93IG90aGVyIG9wdGlvbnNcbiAgICAgICAgZW52RmlsZVBhdGggPSBhd2FpdCBwcm9tcHRFbnZPcHRpb25zKCk7XG4gICAgICAgIGlmIChlbnZGaWxlUGF0aCkge1xuICAgICAgICAgIGVudlZhcnMgPSBwYXJzZUVudkZpbGUoZW52RmlsZVBhdGgpO1xuICAgICAgICAgIGVudkluamVjdGVkID0gT2JqZWN0LmtleXMoZW52VmFycykubGVuZ3RoID4gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyAuZW52IGZvdW5kIC0gc2hvdyBvcHRpb25zXG4gICAgICBsb2dnZXIud2FybignTm8gLmVudiBmaWxlIGZvdW5kIGluIHByb2plY3QgZGlyZWN0b3J5LicpO1xuICAgICAgZW52RmlsZVBhdGggPSBhd2FpdCBwcm9tcHRFbnZPcHRpb25zKCk7XG4gICAgICBpZiAoZW52RmlsZVBhdGgpIHtcbiAgICAgICAgZW52VmFycyA9IHBhcnNlRW52RmlsZShlbnZGaWxlUGF0aCk7XG4gICAgICAgIGVudkluamVjdGVkID0gT2JqZWN0LmtleXMoZW52VmFycykubGVuZ3RoID4gMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBEZXRlcm1pbmUgcHJvamVjdCB0eXBlXG4gIGNvbnN0IHByb2plY3RUeXBlID0gb3B0aW9ucy50eXBlIHx8IGRldGVjdGVkUHJvamVjdC50eXBlO1xuXG4gIC8vIERldGVybWluZSBidWlsZCBtb2RlXG4gIGxldCBidWlsZE1vZGU6IEJ1aWxkTW9kZTtcbiAgaWYgKG9wdGlvbnMuYnVpbGRTZXJ2ZXIpIHtcbiAgICBidWlsZE1vZGUgPSAnc2VydmVyJztcbiAgfSBlbHNlIGlmIChvcHRpb25zLmJ1aWxkTG9jYWwpIHtcbiAgICBidWlsZE1vZGUgPSAnbG9jYWwnO1xuICB9IGVsc2Uge1xuICAgIGJ1aWxkTW9kZSA9IGNvbmZpZy5kZWZhdWx0QnVpbGRNb2RlIHx8ICdsb2NhbCc7XG4gIH1cblxuICBsb2dnZXIuYmxhbmsoKTtcbiAgbG9nZ2VyLmluZm8oYFByb2plY3Q6ICR7cHJvamVjdE5hbWV9YCk7XG4gIGxvZ2dlci5pbmZvKGBUeXBlOiAke3Byb2plY3RUeXBlfWApO1xuICBsb2dnZXIuaW5mbyhgQnVpbGQgbW9kZTogJHtidWlsZE1vZGV9YCk7XG4gIGlmIChvcHRpb25zLnZlcnNpb24pIHtcbiAgICBsb2dnZXIuaW5mbyhgVmVyc2lvbjogJHtvcHRpb25zLnZlcnNpb259YCk7XG4gIH1cbiAgbG9nZ2VyLmJsYW5rKCk7XG5cbiAgLy8gQ29uZmlybSBkZXBsb3ltZW50XG4gIGNvbnN0IHsgY29uZmlybSB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICBuYW1lOiAnY29uZmlybScsXG4gICAgICBtZXNzYWdlOiAnUHJvY2VlZCB3aXRoIGRlcGxveW1lbnQ/JyxcbiAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgfSxcbiAgXSk7XG5cbiAgaWYgKCFjb25maXJtKSB7XG4gICAgbG9nZ2VyLndhcm4oJ0RlcGxveW1lbnQgY2FuY2VsbGVkLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZ2dlci5ibGFuaygpO1xuXG4gIC8vIFN0ZXAgMTogQnVpbGQgKGZvciBsb2NhbC1idWlsZCBtb2RlKVxuICBsZXQgYnVpbGRPdXRwdXREaXIgPSBkZXRlY3RlZFByb2plY3QuYnVpbGRPdXRwdXREaXI7XG5cbiAgaWYgKGJ1aWxkTW9kZSA9PT0gJ2xvY2FsJykge1xuICAgIGxvZ2dlci5zdGVwKDEsIDQsICdCdWlsZGluZyBwcm9qZWN0Li4uJyk7XG5cbiAgICBjb25zdCBidWlsZFJlc3VsdCA9IGF3YWl0IGJ1aWxkU2VydmljZS5idWlsZCh7XG4gICAgICBwcm9qZWN0UGF0aDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgIHByb2plY3RUeXBlLFxuICAgICAgcHJvamVjdE5hbWUsXG4gICAgICBwYWNrYWdlTWFuYWdlcjogZGV0ZWN0ZWRQcm9qZWN0LnBhY2thZ2VNYW5hZ2VyLFxuICAgICAgZW52RmlsZTogZW52RmlsZVBhdGgsXG4gICAgfSk7XG5cbiAgICBpZiAoIWJ1aWxkUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgQnVpbGQgZmFpbGVkOiAke2J1aWxkUmVzdWx0LmVycm9yfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGJ1aWxkT3V0cHV0RGlyID0gYnVpbGRSZXN1bHQub3V0cHV0RGlyO1xuICAgIGxvZ2dlci5zdWNjZXNzKGBCdWlsZCBjb21wbGV0ZWQgaW4gJHsoYnVpbGRSZXN1bHQuZHVyYXRpb24gLyAxMDAwKS50b0ZpeGVkKDEpfXNgKTtcbiAgICBsb2dnZXIuYmxhbmsoKTtcbiAgfVxuXG4gIC8vIFN0ZXAgMjogUGFja2FnZVxuICBjb25zdCBwYWNrYWdlU3RlcCA9IGJ1aWxkTW9kZSA9PT0gJ2xvY2FsJyA/IDIgOiAxO1xuICBjb25zdCB0b3RhbFN0ZXBzID0gYnVpbGRNb2RlID09PSAnbG9jYWwnID8gNCA6IDM7XG5cbiAgbG9nZ2VyLnN0ZXAocGFja2FnZVN0ZXAsIHRvdGFsU3RlcHMsICdDcmVhdGluZyBkZXBsb3ltZW50IHBhY2thZ2UuLi4nKTtcblxuICBsZXQgcGFja2FnZVJlc3VsdDtcbiAgdHJ5IHtcbiAgICBwYWNrYWdlUmVzdWx0ID0gYXdhaXQgcGFja2FnZVNlcnZpY2UucGFja2FnZSh7XG4gICAgICBwcm9qZWN0UGF0aDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgIHByb2plY3RUeXBlLFxuICAgICAgYnVpbGRPdXRwdXREaXIsXG4gICAgICBpbmNsdWRlU291cmNlOiBidWlsZE1vZGUgPT09ICdzZXJ2ZXInLFxuICAgICAgZW52RmlsZTogcHJvamVjdFR5cGUgPT09ICdub2RlJyA/IGVudkZpbGVQYXRoIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcihgUGFja2FnaW5nIGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuYmxhbmsoKTtcblxuICAvLyBTdGVwIDM6IEFuYWx5emUgJiBVcGxvYWRcbiAgbG9nZ2VyLnN0ZXAocGFja2FnZVN0ZXAgKyAxLCB0b3RhbFN0ZXBzLCAnQW5hbHl6aW5nIGFuZCB1cGxvYWRpbmcgdG8gc2VydmVyLi4uJyk7XG5cbiAgbGV0IHVwbG9hZFNlcnZpY2U7XG4gIHRyeSB7XG4gICAgdXBsb2FkU2VydmljZSA9IGNyZWF0ZVVwbG9hZFNlcnZpY2UoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgIHBhY2thZ2VTZXJ2aWNlLmNsZWFudXAocGFja2FnZVJlc3VsdC56aXBQYXRoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBBbmFseXplIHBhY2thZ2UgZmlyc3QgKGZvciBzZXJ2ZXItYnVpbGQgbW9kZSB0byBnZXQgd2FybmluZ3MpXG4gIGxldCBjb25maXJtU2VydmVyQnVpbGQgPSBmYWxzZTtcbiAgaWYgKGJ1aWxkTW9kZSA9PT0gJ3NlcnZlcicpIHtcbiAgICBjb25zdCBhbmFseXplUmVzdWx0ID0gYXdhaXQgdXBsb2FkU2VydmljZS5hbmFseXplUGFja2FnZShwYWNrYWdlUmVzdWx0LnppcFBhdGgsIHByb2plY3RUeXBlKTtcblxuICAgIGlmIChhbmFseXplUmVzdWx0LnN1Y2Nlc3MgJiYgYW5hbHl6ZVJlc3VsdC5hbmFseXNpcykge1xuICAgICAgY29uc3QgYW5hbHlzaXMgPSBhbmFseXplUmVzdWx0LmFuYWx5c2lzO1xuXG4gICAgICAvLyBEaXNwbGF5IHdhcm5pbmdzXG4gICAgICBpZiAoYW5hbHlzaXMud2FybmluZ3MgJiYgYW5hbHlzaXMud2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1NlcnZlciBBbmFseXNpczonKTtcbiAgICAgICAgZm9yIChjb25zdCB3YXJuaW5nIG9mIGFuYWx5c2lzLndhcm5pbmdzKSB7XG4gICAgICAgICAgY29uc3QgcHJlZml4ID0gd2FybmluZy5sZXZlbCA9PT0gJ2NyaXRpY2FsJyA/ICfinYwnIDogd2FybmluZy5sZXZlbCA9PT0gJ3dhcm5pbmcnID8gJ+KaoO+4jycgOiAn4oS577iPJztcbiAgICAgICAgICBsb2dnZXIuZGltKGAgICR7cHJlZml4fSAke3dhcm5pbmcubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGNvbmZpcm1hdGlvbiBmb3Igc2VydmVyLXNpZGUgYnVpbGRcbiAgICAgIGlmIChhbmFseXNpcy5yZXF1aXJlc0NvbmZpcm1hdGlvbikge1xuICAgICAgICBjb25zdCB7IGNvbmZpcm1CdWlsZCB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICAgICAgICBuYW1lOiAnY29uZmlybUJ1aWxkJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGAke2FuYWx5c2lzLmNvbmZpcm1hdGlvblJlYXNvbiB8fCAnU2VydmVyLXNpZGUgYnVpbGQgcmVxdWlyZWQnfS4gVGhpcyBtYXkgY29uc3VtZSBzaWduaWZpY2FudCByZXNvdXJjZXMuIENvbnRpbnVlP2AsXG4gICAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGlmICghY29uZmlybUJ1aWxkKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oJ0RlcGxveW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXIuJyk7XG4gICAgICAgICAgcGFja2FnZVNlcnZpY2UuY2xlYW51cChwYWNrYWdlUmVzdWx0LnppcFBhdGgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25maXJtU2VydmVyQnVpbGQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHVwbG9hZFJlc3VsdCA9IGF3YWl0IHVwbG9hZFNlcnZpY2UudXBsb2FkKHtcbiAgICB6aXBQYXRoOiBwYWNrYWdlUmVzdWx0LnppcFBhdGgsXG4gICAgcHJvamVjdE5hbWUsXG4gICAgcHJvamVjdFR5cGUsXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uLFxuICAgIGJ1aWxkTW9kZSxcbiAgICBjb25maXJtU2VydmVyQnVpbGQsXG4gICAgLy8gRU5WIG11dGFiaWxpdHkgdHJhY2tpbmdcbiAgICBkZXBsb3ltZW50U291cmNlOiAnY2xpJyxcbiAgICBlbnZJbmplY3RlZCxcbiAgfSk7XG5cbiAgLy8gQ2xlYW51cCB6aXAgZmlsZVxuICBwYWNrYWdlU2VydmljZS5jbGVhbnVwKHBhY2thZ2VSZXN1bHQuemlwUGF0aCk7XG5cbiAgaWYgKCF1cGxvYWRSZXN1bHQuc3VjY2Vzcykge1xuICAgIGxvZ2dlci5lcnJvcihgVXBsb2FkIGZhaWxlZDogJHt1cGxvYWRSZXN1bHQuZXJyb3J9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nZ2VyLnN1Y2Nlc3MoJ1VwbG9hZCBjb21wbGV0ZScpO1xuICBsb2dnZXIuYmxhbmsoKTtcblxuICAvLyBTdGVwIDQ6IFdhaXQgZm9yIGRlcGxveW1lbnQgKGlmIGRlcGxveW1lbnQgSUQgYXZhaWxhYmxlKVxuICBpZiAodXBsb2FkUmVzdWx0LmRlcGxveW1lbnRJZCkge1xuICAgIGxvZ2dlci5zdGVwKHBhY2thZ2VTdGVwICsgMiwgdG90YWxTdGVwcywgJ1dhaXRpbmcgZm9yIGRlcGxveW1lbnQgdG8gY29tcGxldGUuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaW5hbFN0YXR1cyA9IGF3YWl0IHVwbG9hZFNlcnZpY2UucG9sbERlcGxveW1lbnRTdGF0dXMoXG4gICAgICAgIHVwbG9hZFJlc3VsdC5kZXBsb3ltZW50SWQsXG4gICAgICAgIChzdGF0dXMpID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzLnByb2dyZXNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBcXHIgIFByb2dyZXNzOiAke3N0YXR1cy5wcm9ncmVzc30lYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnXFxuJyk7XG5cbiAgICAgIGlmIChmaW5hbFN0YXR1cy5zdGF0dXMgPT09ICdzdWNjZXNzJykge1xuICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgICAgbG9nZ2VyLnN1Y2Nlc3MoJ0RlcGxveW1lbnQgc3VjY2Vzc2Z1bCEnKTtcblxuICAgICAgICBjb25zdCBzYWZlTmFtZSA9IHByb2plY3ROYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTldL2csICctJyk7XG5cbiAgICAgICAgLy8gRmV0Y2ggZG9tYWluIGNvbmZpZyB0byBzaG93IHByb3BlciBVUkxcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkb21haW5SZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChgJHtjb25maWcuc2VydmVyVXJsfS9hcGkvZG9tYWluYCwge1xuICAgICAgICAgICAgaGVhZGVyczogY29uZmlnLnRva2VuID8geyBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7Y29uZmlnLnRva2VufWAgfSA6IHt9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGRvbWFpbkNvbmZpZyA9IGRvbWFpblJlc3BvbnNlLmRhdGE7XG5cbiAgICAgICAgICBpZiAoZG9tYWluQ29uZmlnLmRvbWFpbj8uYWN0aXZlICYmIGRvbWFpbkNvbmZpZy5zZWN1cml0eU1vZGUgPT09ICdkb21haW4taHR0cHMnKSB7XG4gICAgICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBZb3VyIGFwcCBpcyBhdmFpbGFibGUgYXQ6IGh0dHBzOi8vJHtkb21haW5Db25maWcuZG9tYWluLmRvbWFpbn0vYXBwLyR7c2FmZU5hbWV9YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5ibGFuaygpO1xuICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFlvdXIgYXBwIGlzIGF2YWlsYWJsZSBhdDogJHtjb25maWcuc2VydmVyVXJsfS9hcHAvJHtzYWZlTmFtZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHNlcnZlciBVUkwgaWYgZG9tYWluIGZldGNoIGZhaWxzXG4gICAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYFlvdXIgYXBwIGlzIGF2YWlsYWJsZSBhdDogJHtjb25maWcuc2VydmVyVXJsfS9hcHAvJHtzYWZlTmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBEZXBsb3ltZW50IGZhaWxlZDogJHtmaW5hbFN0YXR1cy5lcnJvciB8fCAnVW5rbm93biBlcnJvcid9YCk7XG4gICAgICAgIGlmIChmaW5hbFN0YXR1cy5sb2dzKSB7XG4gICAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgICAgbG9nZ2VyLmRpbSgnTG9nczonKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhmaW5hbFN0YXR1cy5sb2dzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignQ291bGQgbm90IHRyYWNrIGRlcGxveW1lbnQgc3RhdHVzJyk7XG4gICAgICBsb2dnZXIuZGltKCdDaGVjayB0aGUgd2ViIFVJIGZvciBkZXBsb3ltZW50IHN0YXR1cycpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICBsb2dnZXIuc3VjY2VzcygnVXBsb2FkIHN1Y2Nlc3NmdWwhJyk7XG4gICAgbG9nZ2VyLmRpbSgnRGVwbG95bWVudCBpcyBiZWluZyBwcm9jZXNzZWQuIENoZWNrIHRoZSB3ZWIgVUkgZm9yIHN0YXR1cy4nKTtcbiAgfVxuXG4gIGxvZ2dlci5ibGFuaygpO1xufVxuIl19
467
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2RlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlJQSxzQ0ErVkM7QUF4ZUQsd0RBQWdDO0FBQ2hDLDhDQUFzQjtBQUN0Qiw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLGtEQUEwQjtBQUUxQixpRUFBNEQ7QUFDNUQsMkRBQXdEO0FBQ3hELCtEQUE0RDtBQUM1RCw2REFBZ0U7QUFDaEUsNENBQTBFO0FBQzFFLDRDQUF5QztBQVl6Qzs7R0FFRztBQUNILFNBQVMsWUFBWSxDQUFDLFFBQWdCO0lBQ3BDLE1BQU0sT0FBTyxHQUFHLFlBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELE1BQU0sSUFBSSxHQUEyQixFQUFFLENBQUM7SUFFeEMsS0FBSyxNQUFNLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQUUsU0FBUztRQUVsRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlDLHVDQUF1QztZQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ25ELEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLENBQUM7WUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxLQUFLLFVBQVUsbUJBQW1CO0lBQ2hDLE1BQU0sSUFBSSxHQUEyQixFQUFFLENBQUM7SUFFeEMsZUFBTSxDQUFDLEdBQUcsQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0lBRWxFLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDWixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxrQkFBUSxDQUFDLE1BQU0sQ0FBQztZQUNwQztnQkFDRSxJQUFJLEVBQUUsT0FBTztnQkFDYixJQUFJLEVBQUUsS0FBSztnQkFDWCxPQUFPLEVBQUUsZ0JBQWdCO2FBQzFCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3hCLE1BQU07UUFDUixDQUFDO1FBRUQsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sa0JBQVEsQ0FBQyxNQUFNLENBQUM7WUFDdEM7Z0JBQ0UsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsT0FBTyxFQUFFLGFBQWEsR0FBRyxHQUFHO2FBQzdCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzdELENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7R0FFRztBQUNILEtBQUssVUFBVSxnQkFBZ0I7SUFDN0IsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sa0JBQVEsQ0FBQyxNQUFNLENBQUM7UUFDMUM7WUFDRSxJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxXQUFXO1lBQ2pCLE9BQU8sRUFBRSxzREFBc0Q7WUFDL0QsT0FBTyxFQUFFO2dCQUNQLEVBQUUsSUFBSSxFQUFFLDJCQUEyQixFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7Z0JBQ3BELEVBQUUsSUFBSSxFQUFFLHlDQUF5QyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7Z0JBQ3BFLEVBQUUsSUFBSSxFQUFFLHdDQUF3QyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7YUFDbEU7U0FDRjtLQUNGLENBQUMsQ0FBQztJQUVILElBQUksU0FBUyxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3pCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLGtCQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3hDO2dCQUNFLElBQUksRUFBRSxPQUFPO2dCQUNiLElBQUksRUFBRSxTQUFTO2dCQUNmLE9BQU8sRUFBRSxtQkFBbUI7Z0JBQzVCLFFBQVEsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFO29CQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTt3QkFBRSxPQUFPLHFCQUFxQixDQUFDO29CQUNoRCxJQUFJLENBQUMsWUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7d0JBQUUsT0FBTyxnQkFBZ0IsQ0FBQztvQkFDbkQsT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQzthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsZUFBTSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM3QyxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsSUFBSSxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDM0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxtQkFBbUIsRUFBRSxDQUFDO1FBQ3pDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakMsZ0NBQWdDO1lBQ2hDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO2lCQUNwQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7aUJBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNkLE1BQU0sT0FBTyxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2pELFlBQUUsQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ3RDLGVBQU0sQ0FBQyxPQUFPLENBQUMscUJBQXFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxZQUFZLENBQUMsQ0FBQztZQUMxRSxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFTSxLQUFLLFVBQVUsYUFBYSxDQUFDLE9BQXNCO0lBQ3hELGVBQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7SUFFL0Isc0JBQXNCO0lBQ3RCLElBQUksQ0FBQyxJQUFBLHFCQUFZLEdBQUUsRUFBRSxDQUFDO1FBQ3BCLGVBQU0sQ0FBQyxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztRQUM3RCxPQUFPO0lBQ1QsQ0FBQztJQUVELHlDQUF5QztJQUN6QyxJQUFJLElBQUEsdUJBQWMsR0FBRSxFQUFFLENBQUM7UUFDckIsZUFBTSxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQ3ZELGVBQU0sQ0FBQyxJQUFJLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUN0RCxPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sTUFBTSxHQUFHLElBQUEsa0JBQVMsR0FBRSxDQUFDO0lBQzNCLGVBQU0sQ0FBQyxHQUFHLENBQUMsV0FBVyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUMxQyxlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFZixpQkFBaUI7SUFDakIsTUFBTSxPQUFPLEdBQUcsSUFBQSxhQUFHLEVBQUMsc0JBQXNCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNwRCxJQUFJLGVBQWUsQ0FBQztJQUVwQixJQUFJLENBQUM7UUFDSCxlQUFlLEdBQUcsTUFBTSxJQUFBLCtCQUFhLEdBQUUsQ0FBQztRQUN4QyxPQUFPLENBQUMsT0FBTyxDQUFDLGFBQWEsZUFBZSxDQUFDLElBQUksYUFBYSxlQUFlLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUN6QyxlQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZFLE9BQU87SUFDVCxDQUFDO0lBRUQsc0RBQXNEO0lBQ3RELE1BQU0sYUFBYSxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksSUFBSSxjQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQ3pFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQVEsd0NBQXdDO1NBQ3hFLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLENBQUMsQ0FBRSxxQ0FBcUM7U0FDdEUsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBVSxnQ0FBZ0M7U0FDakUsV0FBVyxFQUFFLENBQUM7SUFDakIsSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxhQUFhLENBQUM7SUFFaEQsd0NBQXdDO0lBQ3hDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbEIsTUFBTSxPQUFPLEdBQUcsTUFBTSxrQkFBUSxDQUFDLE1BQU0sQ0FBQztZQUNwQztnQkFDRSxJQUFJLEVBQUUsT0FBTztnQkFDYixJQUFJLEVBQUUsTUFBTTtnQkFDWixPQUFPLEVBQUUsZUFBZTtnQkFDeEIsT0FBTyxFQUFFLFdBQVc7Z0JBQ3BCLFFBQVEsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFO29CQUMxQixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQzt3QkFBRSxPQUFPLG9DQUFvQyxDQUFDO29CQUNsRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzt3QkFBRSxPQUFPLGtFQUFrRSxDQUFDO29CQUMvRyxPQUFPLElBQUksQ0FBQztnQkFDZCxDQUFDO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFDSCxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztJQUM3QixDQUFDO0lBRUQsNENBQTRDO0lBQzVDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLGtCQUFRLENBQUMsTUFBTSxDQUFDO1FBQ3pDO1lBQ0UsSUFBSSxFQUFFLFNBQVM7WUFDZixJQUFJLEVBQUUsVUFBVTtZQUNoQixPQUFPLEVBQUUsa0RBQWtEO1lBQzNELE9BQU8sRUFBRSxLQUFLO1NBQ2Y7S0FDRixDQUFDLENBQUM7SUFFSCxJQUFJLFdBQStCLENBQUM7SUFDcEMsSUFBSSxPQUFPLEdBQTJCLEVBQUUsQ0FBQztJQUN6QyxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFFeEIsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNiLE1BQU0sY0FBYyxHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3hELE1BQU0sVUFBVSxHQUFHLFlBQUUsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFakQsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNmLGlDQUFpQztZQUNqQyxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxrQkFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDNUM7b0JBQ0UsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsSUFBSSxFQUFFLGFBQWE7b0JBQ25CLE9BQU8sRUFBRSxxQ0FBcUM7b0JBQzlDLE9BQU8sRUFBRSxJQUFJO2lCQUNkO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsV0FBVyxHQUFHLGNBQWMsQ0FBQztnQkFDN0IsT0FBTyxHQUFHLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDdkMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDOUMsZUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUFVLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxzQkFBc0IsQ0FBQyxDQUFDO1lBQzlFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixtREFBbUQ7Z0JBQ25ELFdBQVcsR0FBRyxNQUFNLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3ZDLElBQUksV0FBVyxFQUFFLENBQUM7b0JBQ2hCLE9BQU8sR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ3BDLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ2hELENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTiwrQkFBK0I7WUFDL0IsZUFBTSxDQUFDLElBQUksQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1lBQ3hELFdBQVcsR0FBRyxNQUFNLGdCQUFnQixFQUFFLENBQUM7WUFDdkMsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDcEMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNoRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCx5QkFBeUI7SUFDekIsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDO0lBRXpELHVCQUF1QjtJQUN2QixJQUFJLFNBQW9CLENBQUM7SUFDekIsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDeEIsU0FBUyxHQUFHLFFBQVEsQ0FBQztJQUN2QixDQUFDO1NBQU0sSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDOUIsU0FBUyxHQUFHLE9BQU8sQ0FBQztJQUN0QixDQUFDO1NBQU0sQ0FBQztRQUNOLFNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLElBQUksT0FBTyxDQUFDO0lBQ2pELENBQUM7SUFFRCxlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixlQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksV0FBVyxFQUFFLENBQUMsQ0FBQztJQUN2QyxlQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNwQyxlQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUN4QyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixlQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUVmLHFCQUFxQjtJQUNyQixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxrQkFBUSxDQUFDLE1BQU0sQ0FBQztRQUN4QztZQUNFLElBQUksRUFBRSxTQUFTO1lBQ2YsSUFBSSxFQUFFLFNBQVM7WUFDZixPQUFPLEVBQUUsMEJBQTBCO1lBQ25DLE9BQU8sRUFBRSxJQUFJO1NBQ2Q7S0FDRixDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDYixlQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDckMsT0FBTztJQUNULENBQUM7SUFFRCxlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFZix1Q0FBdUM7SUFDdkMsSUFBSSxjQUFjLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQztJQUVwRCxJQUFJLFNBQVMsS0FBSyxPQUFPLEVBQUUsQ0FBQztRQUMxQixlQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztRQUV6QywyREFBMkQ7UUFDM0QsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksV0FBVyxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQzVCLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyx3REFBYSwwQkFBMEIsR0FBQyxDQUFDO1lBQ2xFLFFBQVEsR0FBRyxNQUFNLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLE1BQU0sMkJBQVksQ0FBQyxLQUFLLENBQUM7WUFDM0MsV0FBVyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDMUIsV0FBVztZQUNYLFdBQVc7WUFDWCxjQUFjLEVBQUUsZUFBZSxDQUFDLGNBQWM7WUFDOUMsT0FBTyxFQUFFLFdBQVc7U0FDckIsQ0FBQyxDQUFDO1FBRUgsc0RBQXNEO1FBQ3RELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsd0RBQWEsMEJBQTBCLEdBQUMsQ0FBQztZQUNsRSxNQUFNLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekIsZUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDbkQsT0FBTztRQUNULENBQUM7UUFFRCxjQUFjLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUN2QyxlQUFNLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsRixlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixNQUFNLFdBQVcsR0FBRyxTQUFTLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRCxNQUFNLFVBQVUsR0FBRyxTQUFTLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVqRCxlQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztJQUV2RSxJQUFJLGFBQWEsQ0FBQztJQUNsQixJQUFJLENBQUM7UUFDSCxhQUFhLEdBQUcsTUFBTSwrQkFBYyxDQUFDLE9BQU8sQ0FBQztZQUMzQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUMxQixXQUFXO1lBQ1gsY0FBYztZQUNkLGFBQWEsRUFBRSxTQUFTLEtBQUssUUFBUTtZQUNyQyxPQUFPLEVBQUUsV0FBVyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQzFELENBQUMsQ0FBQztJQUNMLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsZUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUM5RixPQUFPO0lBQ1QsQ0FBQztJQUVELGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUVmLDJCQUEyQjtJQUMzQixlQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLHNDQUFzQyxDQUFDLENBQUM7SUFFakYsSUFBSSxhQUFhLENBQUM7SUFDbEIsSUFBSSxDQUFDO1FBQ0gsYUFBYSxHQUFHLElBQUEsbUNBQW1CLEdBQUUsQ0FBQztJQUN4QyxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLGVBQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDdkUsK0JBQWMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLE9BQU87SUFDVCxDQUFDO0lBRUQsZ0VBQWdFO0lBQ2hFLElBQUksa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBQy9CLElBQUksU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzNCLE1BQU0sYUFBYSxHQUFHLE1BQU0sYUFBYSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRTdGLElBQUksYUFBYSxDQUFDLE9BQU8sSUFBSSxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEQsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQztZQUV4QyxtQkFBbUI7WUFDbkIsSUFBSSxRQUFRLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2YsZUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUNoQyxLQUFLLE1BQU0sT0FBTyxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDeEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUM5RixlQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQyxDQUFDO2dCQUNELGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNqQixDQUFDO1lBRUQsNENBQTRDO1lBQzVDLElBQUksUUFBUSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQ2xDLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxNQUFNLGtCQUFRLENBQUMsTUFBTSxDQUFDO29CQUM3Qzt3QkFDRSxJQUFJLEVBQUUsU0FBUzt3QkFDZixJQUFJLEVBQUUsY0FBYzt3QkFDcEIsT0FBTyxFQUFFLEdBQUcsUUFBUSxDQUFDLGtCQUFrQixJQUFJLDRCQUE0QixxREFBcUQ7d0JBQzVILE9BQU8sRUFBRSxJQUFJO3FCQUNkO2lCQUNGLENBQUMsQ0FBQztnQkFFSCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ2xCLGVBQU0sQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsQ0FBQztvQkFDN0MsK0JBQWMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUM5QyxPQUFPO2dCQUNULENBQUM7Z0JBQ0Qsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUM5QyxPQUFPLEVBQUUsYUFBYSxDQUFDLE9BQU87UUFDOUIsV0FBVztRQUNYLFdBQVc7UUFDWCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87UUFDeEIsU0FBUztRQUNULGtCQUFrQjtRQUNsQiwwQkFBMEI7UUFDMUIsZ0JBQWdCLEVBQUUsS0FBSztRQUN2QixXQUFXO0tBQ1osQ0FBQyxDQUFDO0lBRUgsbUJBQW1CO0lBQ25CLCtCQUFjLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUU5QyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFCLGVBQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELE9BQU87SUFDVCxDQUFDO0lBRUQsZUFBTSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2xDLGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUVmLDJEQUEyRDtJQUMzRCxJQUFJLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM5QixlQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLHVDQUF1QyxDQUFDLENBQUM7UUFFbEYsSUFBSSxDQUFDO1lBQ0gsTUFBTSxXQUFXLEdBQUcsTUFBTSxhQUFhLENBQUMsb0JBQW9CLENBQzFELFlBQVksQ0FBQyxZQUFZLEVBQ3pCLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0JBQ1QsSUFBSSxNQUFNLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUNsQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7Z0JBQzVELENBQUM7WUFDSCxDQUFDLENBQ0YsQ0FBQztZQUVGLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTNCLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDckMsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNmLGVBQU0sQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQztnQkFFekMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBRXRFLHlDQUF5QztnQkFDekMsSUFBSSxDQUFDO29CQUNILE1BQU0sY0FBYyxHQUFHLE1BQU0sZUFBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLGFBQWEsRUFBRTt3QkFDdkUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLFVBQVUsTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7cUJBQ3pFLENBQUMsQ0FBQztvQkFDSCxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDO29CQUV6QyxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxJQUFJLFlBQVksQ0FBQyxZQUFZLEtBQUssY0FBYyxFQUFFLENBQUM7d0JBQ2hGLGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDZixlQUFNLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sUUFBUSxRQUFRLEVBQUUsQ0FBQyxDQUFDO29CQUNqRyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO3dCQUNmLGVBQU0sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLE1BQU0sQ0FBQyxTQUFTLFFBQVEsUUFBUSxFQUFFLENBQUMsQ0FBQztvQkFDL0UsQ0FBQztnQkFDSCxDQUFDO2dCQUFDLE1BQU0sQ0FBQztvQkFDUCwrQ0FBK0M7b0JBQy9DLGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDZixlQUFNLENBQUMsSUFBSSxDQUFDLDZCQUE2QixNQUFNLENBQUMsU0FBUyxRQUFRLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQy9FLENBQUM7Z0JBRUQsc0VBQXNFO2dCQUN0RSxJQUFJLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDOUIsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNmLGVBQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGVBQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLFdBQVcsQ0FBQyxLQUFLLElBQUksZUFBZSxFQUFFLENBQUMsQ0FBQztnQkFDM0UsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3JCLGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDZixlQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLGVBQU0sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLENBQUMsQ0FBQztZQUNqRCxlQUFNLENBQUMsR0FBRyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUM7U0FBTSxDQUFDO1FBQ04sZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsZUFBTSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3JDLGVBQU0sQ0FBQyxHQUFHLENBQUMsNkRBQTZELENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5xdWlyZXIgZnJvbSAnaW5xdWlyZXInO1xuaW1wb3J0IG9yYSBmcm9tICdvcmEnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IFByb2plY3RUeXBlLCBCdWlsZE1vZGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBkZXRlY3RQcm9qZWN0IH0gZnJvbSAnLi4vc2VydmljZXMvcHJvamVjdERldGVjdG9yJztcbmltcG9ydCB7IGJ1aWxkU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2J1aWxkU2VydmljZSc7XG5pbXBvcnQgeyBwYWNrYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3BhY2thZ2VTZXJ2aWNlJztcbmltcG9ydCB7IGNyZWF0ZVVwbG9hZFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy91cGxvYWRTZXJ2aWNlJztcbmltcG9ydCB7IGlzQ29uZmlndXJlZCwgZ2V0Q29uZmlnLCBpc1Rva2VuRXhwaXJlZCB9IGZyb20gJy4uL3V0aWxzL2NvbmZpZyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXInO1xuXG5pbnRlcmZhY2UgRGVwbG95T3B0aW9ucyB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBQcm9qZWN0VHlwZTtcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgYnVpbGRMb2NhbD86IGJvb2xlYW47XG4gIGJ1aWxkU2VydmVyPzogYm9vbGVhbjtcbiAgZW52RmlsZT86IHN0cmluZztcbiAgc2tpcEVudlByb21wdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyc2UgYSAuZW52IGZpbGUgaW50byBhIFJlY29yZFxuICovXG5mdW5jdGlvbiBwYXJzZUVudkZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGZvciAoY29uc3QgbGluZSBvZiBjb250ZW50LnNwbGl0KCdcXG4nKSkge1xuICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcbiAgICAvLyBTa2lwIGVtcHR5IGxpbmVzIGFuZCBjb21tZW50c1xuICAgIGlmICghdHJpbW1lZCB8fCB0cmltbWVkLnN0YXJ0c1dpdGgoJyMnKSkgY29udGludWU7XG5cbiAgICBjb25zdCBlcUluZGV4ID0gdHJpbW1lZC5pbmRleE9mKCc9Jyk7XG4gICAgaWYgKGVxSW5kZXggPiAwKSB7XG4gICAgICBjb25zdCBrZXkgPSB0cmltbWVkLnNsaWNlKDAsIGVxSW5kZXgpLnRyaW0oKTtcbiAgICAgIGxldCB2YWx1ZSA9IHRyaW1tZWQuc2xpY2UoZXFJbmRleCArIDEpLnRyaW0oKTtcbiAgICAgIC8vIFJlbW92ZSBzdXJyb3VuZGluZyBxdW90ZXMgaWYgcHJlc2VudFxuICAgICAgaWYgKCh2YWx1ZS5zdGFydHNXaXRoKCdcIicpICYmIHZhbHVlLmVuZHNXaXRoKCdcIicpKSB8fFxuICAgICAgICAgICh2YWx1ZS5zdGFydHNXaXRoKFwiJ1wiKSAmJiB2YWx1ZS5lbmRzV2l0aChcIidcIikpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSwgLTEpO1xuICAgICAgfVxuICAgICAgdmFyc1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhcnM7XG59XG5cbi8qKlxuICogUHJvbXB0IHVzZXIgZm9yIG1hbnVhbCBFTlYgdmFyaWFibGUgZW50cnlcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvbXB0TWFudWFsRW52VmFycygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGxvZ2dlci5kaW0oJ0VudGVyIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZW1wdHkgbmFtZSB0byBmaW5pc2gpOicpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeyBrZXkgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICdrZXknLFxuICAgICAgICBtZXNzYWdlOiAnVmFyaWFibGUgbmFtZTonLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIGlmICgha2V5IHx8ICFrZXkudHJpbSgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb25zdCB7IHZhbHVlIH0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICBtZXNzYWdlOiBgVmFsdWUgZm9yICR7a2V5fTpgLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIHZhcnNba2V5LnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvW15BLVowLTlfXS9nLCAnJyldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdmFycztcbn1cblxuLyoqXG4gKiBQcm9tcHQgdXNlciBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgb3B0aW9ucyB3aGVuIG5vIC5lbnYgZmlsZSBleGlzdHNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvbXB0RW52T3B0aW9ucygpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IGVudkNob2ljZSB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBuYW1lOiAnZW52Q2hvaWNlJyxcbiAgICAgIG1lc3NhZ2U6ICdIb3cgd291bGQgeW91IGxpa2UgdG8gcHJvdmlkZSBlbnZpcm9ubWVudCB2YXJpYWJsZXM/JyxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgeyBuYW1lOiAnU3BlY2lmeSBwYXRoIHRvIC5lbnYgZmlsZScsIHZhbHVlOiAncGF0aCcgfSxcbiAgICAgICAgeyBuYW1lOiAnRW50ZXIgdmFyaWFibGVzIG1hbnVhbGx5IChjcmVhdGVzIC5lbnYpJywgdmFsdWU6ICdtYW51YWwnIH0sXG4gICAgICAgIHsgbmFtZTogJ0NvbnRpbnVlIHdpdGhvdXQgZW52aXJvbm1lbnQgdmFyaWFibGVzJywgdmFsdWU6ICdza2lwJyB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdKTtcblxuICBpZiAoZW52Q2hvaWNlID09PSAncGF0aCcpIHtcbiAgICBjb25zdCB7IGVudlBhdGggfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICdlbnZQYXRoJyxcbiAgICAgICAgbWVzc2FnZTogJ1BhdGggdG8gZW52IGZpbGU6JyxcbiAgICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKCFpbnB1dC50cmltKCkpIHJldHVybiAnUGxlYXNlIGVudGVyIGEgcGF0aCc7XG4gICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGlucHV0KSkgcmV0dXJuICdGaWxlIG5vdCBmb3VuZCc7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICAgIGxvZ2dlci5zdWNjZXNzKGBVc2luZyBlbnYgZmlsZTogJHtlbnZQYXRofWApO1xuICAgIHJldHVybiBlbnZQYXRoO1xuICB9XG5cbiAgaWYgKGVudkNob2ljZSA9PT0gJ21hbnVhbCcpIHtcbiAgICBjb25zdCB2YXJzID0gYXdhaXQgcHJvbXB0TWFudWFsRW52VmFycygpO1xuICAgIGlmIChPYmplY3Qua2V5cyh2YXJzKS5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBXcml0ZSB0byAuZW52IGZpbGUgaW4gcHJvamVjdFxuICAgICAgY29uc3QgZW52Q29udGVudCA9IE9iamVjdC5lbnRyaWVzKHZhcnMpXG4gICAgICAgIC5tYXAoKFtrLCB2XSkgPT4gYCR7a309JHt2fWApXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgIGNvbnN0IGVudlBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJy5lbnYnKTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoZW52UGF0aCwgZW52Q29udGVudCk7XG4gICAgICBsb2dnZXIuc3VjY2VzcyhgQ3JlYXRlZCAuZW52IHdpdGggJHtPYmplY3Qua2V5cyh2YXJzKS5sZW5ndGh9IHZhcmlhYmxlc2ApO1xuICAgICAgcmV0dXJuIGVudlBhdGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlcGxveUNvbW1hbmQob3B0aW9uczogRGVwbG95T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBsb2dnZXIuaGVhZGVyKCdSdW53YXkgRGVwbG95Jyk7XG5cbiAgLy8gQ2hlY2sgY29uZmlndXJhdGlvblxuICBpZiAoIWlzQ29uZmlndXJlZCgpKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdDTEkgbm90IGNvbmZpZ3VyZWQuIFJ1biBcInJ1bndheSBpbml0XCIgZmlyc3QuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQ2hlY2sgdG9rZW4gdmFsaWRpdHkgYmVmb3JlIHByb2NlZWRpbmdcbiAgaWYgKGlzVG9rZW5FeHBpcmVkKCkpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ1lvdXIgYXV0aGVudGljYXRpb24gdG9rZW4gaGFzIGV4cGlyZWQuJyk7XG4gICAgbG9nZ2VyLmluZm8oJ1J1biBcInJ1bndheSBsb2dpblwiIHRvIHJlLWF1dGhlbnRpY2F0ZS4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgbG9nZ2VyLmRpbShgU2VydmVyOiAke2NvbmZpZy5zZXJ2ZXJVcmx9YCk7XG4gIGxvZ2dlci5ibGFuaygpO1xuXG4gIC8vIERldGVjdCBwcm9qZWN0XG4gIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ0RldGVjdGluZyBwcm9qZWN0Li4uJykuc3RhcnQoKTtcbiAgbGV0IGRldGVjdGVkUHJvamVjdDtcblxuICB0cnkge1xuICAgIGRldGVjdGVkUHJvamVjdCA9IGF3YWl0IGRldGVjdFByb2plY3QoKTtcbiAgICBzcGlubmVyLnN1Y2NlZWQoYERldGVjdGVkOiAke2RldGVjdGVkUHJvamVjdC50eXBlfSBwcm9qZWN0ICgke2RldGVjdGVkUHJvamVjdC5wYWNrYWdlTWFuYWdlcn0pYCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gZGV0ZWN0IHByb2plY3QnKTtcbiAgICBsb2dnZXIuZXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERldGVybWluZSBwcm9qZWN0IG5hbWUg4oCUIHNhbml0aXplIGZyb20gcGFja2FnZS5qc29uXG4gIGNvbnN0IHN1Z2dlc3RlZE5hbWUgPSAoZGV0ZWN0ZWRQcm9qZWN0Lm5hbWUgfHwgcGF0aC5iYXNlbmFtZShwcm9jZXNzLmN3ZCgpKSlcbiAgICAucmVwbGFjZSgvXkBbXi9dK1xcLy8sICcnKSAgICAgICAgLy8gUmVtb3ZlIG5wbSBzY29wZSAoQHNjb3BlL25hbWUg4oaSIG5hbWUpXG4gICAgLnJlcGxhY2UoL1teYS16QS1aMC05LV9dL2csICctJykgIC8vIFJlcGxhY2UgaW52YWxpZCBjaGFycyB3aXRoIGh5cGhlbnNcbiAgICAucmVwbGFjZSgvXi0rfC0rJC9nLCAnJykgICAgICAgICAgLy8gVHJpbSBsZWFkaW5nL3RyYWlsaW5nIGh5cGhlbnNcbiAgICAudG9Mb3dlckNhc2UoKTtcbiAgbGV0IHByb2plY3ROYW1lID0gb3B0aW9ucy5uYW1lIHx8IHN1Z2dlc3RlZE5hbWU7XG5cbiAgLy8gSW50ZXJhY3RpdmUgbW9kZSBpZiBuYW1lIG5vdCBwcm92aWRlZFxuICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgIGNvbnN0IGFuc3dlcnMgPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgIG1lc3NhZ2U6ICdQcm9qZWN0IG5hbWU6JyxcbiAgICAgICAgZGVmYXVsdDogcHJvamVjdE5hbWUsXG4gICAgICAgIHZhbGlkYXRlOiAoaW5wdXQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPCAyKSByZXR1cm4gJ05hbWUgbXVzdCBiZSBhdCBsZWFzdCAyIGNoYXJhY3RlcnMnO1xuICAgICAgICAgIGlmICghL15bYS16QS1aMC05LV9dKyQvLnRlc3QoaW5wdXQpKSByZXR1cm4gJ05hbWUgY2FuIG9ubHkgY29udGFpbiBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW5zLCBhbmQgdW5kZXJzY29yZXMnO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgICBwcm9qZWN0TmFtZSA9IGFuc3dlcnMubmFtZTtcbiAgfVxuXG4gIC8vIEFzayBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHJlcXVpcmVkXG4gIGNvbnN0IHsgbmVlZHNFbnYgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAge1xuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgbmFtZTogJ25lZWRzRW52JyxcbiAgICAgIG1lc3NhZ2U6ICdEb2VzIHRoaXMgcHJvamVjdCByZXF1aXJlIGVudmlyb25tZW50IHZhcmlhYmxlcz8nLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgfSxcbiAgXSk7XG5cbiAgbGV0IGVudkZpbGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGxldCBlbnZWYXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGxldCBlbnZJbmplY3RlZCA9IGZhbHNlO1xuXG4gIGlmIChuZWVkc0Vudikge1xuICAgIGNvbnN0IGRlZmF1bHRFbnZQYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICcuZW52Jyk7XG4gICAgY29uc3QgaGFzRW52RmlsZSA9IGZzLmV4aXN0c1N5bmMoZGVmYXVsdEVudlBhdGgpO1xuXG4gICAgaWYgKGhhc0VudkZpbGUpIHtcbiAgICAgIC8vIC5lbnYgZm91bmQgLSBjb25maXJtIHdpdGggdXNlclxuICAgICAgY29uc3QgeyB1c2VFeGlzdGluZyB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgICAgICBuYW1lOiAndXNlRXhpc3RpbmcnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdGb3VuZCAuZW52IGZpbGUgaW4gcHJvamVjdC4gVXNlIGl0PycsXG4gICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuXG4gICAgICBpZiAodXNlRXhpc3RpbmcpIHtcbiAgICAgICAgZW52RmlsZVBhdGggPSBkZWZhdWx0RW52UGF0aDtcbiAgICAgICAgZW52VmFycyA9IHBhcnNlRW52RmlsZShkZWZhdWx0RW52UGF0aCk7XG4gICAgICAgIGVudkluamVjdGVkID0gT2JqZWN0LmtleXMoZW52VmFycykubGVuZ3RoID4gMDtcbiAgICAgICAgbG9nZ2VyLnN1Y2Nlc3MoYExvYWRlZCAke09iamVjdC5rZXlzKGVudlZhcnMpLmxlbmd0aH0gdmFyaWFibGVzIGZyb20gLmVudmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVXNlciBkZWNsaW5lZCBleGlzdGluZyAuZW52IC0gc2hvdyBvdGhlciBvcHRpb25zXG4gICAgICAgIGVudkZpbGVQYXRoID0gYXdhaXQgcHJvbXB0RW52T3B0aW9ucygpO1xuICAgICAgICBpZiAoZW52RmlsZVBhdGgpIHtcbiAgICAgICAgICBlbnZWYXJzID0gcGFyc2VFbnZGaWxlKGVudkZpbGVQYXRoKTtcbiAgICAgICAgICBlbnZJbmplY3RlZCA9IE9iamVjdC5rZXlzKGVudlZhcnMpLmxlbmd0aCA+IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gLmVudiBmb3VuZCAtIHNob3cgb3B0aW9uc1xuICAgICAgbG9nZ2VyLndhcm4oJ05vIC5lbnYgZmlsZSBmb3VuZCBpbiBwcm9qZWN0IGRpcmVjdG9yeS4nKTtcbiAgICAgIGVudkZpbGVQYXRoID0gYXdhaXQgcHJvbXB0RW52T3B0aW9ucygpO1xuICAgICAgaWYgKGVudkZpbGVQYXRoKSB7XG4gICAgICAgIGVudlZhcnMgPSBwYXJzZUVudkZpbGUoZW52RmlsZVBhdGgpO1xuICAgICAgICBlbnZJbmplY3RlZCA9IE9iamVjdC5rZXlzKGVudlZhcnMpLmxlbmd0aCA+IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRGV0ZXJtaW5lIHByb2plY3QgdHlwZVxuICBjb25zdCBwcm9qZWN0VHlwZSA9IG9wdGlvbnMudHlwZSB8fCBkZXRlY3RlZFByb2plY3QudHlwZTtcblxuICAvLyBEZXRlcm1pbmUgYnVpbGQgbW9kZVxuICBsZXQgYnVpbGRNb2RlOiBCdWlsZE1vZGU7XG4gIGlmIChvcHRpb25zLmJ1aWxkU2VydmVyKSB7XG4gICAgYnVpbGRNb2RlID0gJ3NlcnZlcic7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5idWlsZExvY2FsKSB7XG4gICAgYnVpbGRNb2RlID0gJ2xvY2FsJztcbiAgfSBlbHNlIHtcbiAgICBidWlsZE1vZGUgPSBjb25maWcuZGVmYXVsdEJ1aWxkTW9kZSB8fCAnbG9jYWwnO1xuICB9XG5cbiAgbG9nZ2VyLmJsYW5rKCk7XG4gIGxvZ2dlci5pbmZvKGBQcm9qZWN0OiAke3Byb2plY3ROYW1lfWApO1xuICBsb2dnZXIuaW5mbyhgVHlwZTogJHtwcm9qZWN0VHlwZX1gKTtcbiAgbG9nZ2VyLmluZm8oYEJ1aWxkIG1vZGU6ICR7YnVpbGRNb2RlfWApO1xuICBpZiAob3B0aW9ucy52ZXJzaW9uKSB7XG4gICAgbG9nZ2VyLmluZm8oYFZlcnNpb246ICR7b3B0aW9ucy52ZXJzaW9ufWApO1xuICB9XG4gIGxvZ2dlci5ibGFuaygpO1xuXG4gIC8vIENvbmZpcm0gZGVwbG95bWVudFxuICBjb25zdCB7IGNvbmZpcm0gfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAge1xuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgbmFtZTogJ2NvbmZpcm0nLFxuICAgICAgbWVzc2FnZTogJ1Byb2NlZWQgd2l0aCBkZXBsb3ltZW50PycsXG4gICAgICBkZWZhdWx0OiB0cnVlLFxuICAgIH0sXG4gIF0pO1xuXG4gIGlmICghY29uZmlybSkge1xuICAgIGxvZ2dlci53YXJuKCdEZXBsb3ltZW50IGNhbmNlbGxlZC4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuYmxhbmsoKTtcblxuICAvLyBTdGVwIDE6IEJ1aWxkIChmb3IgbG9jYWwtYnVpbGQgbW9kZSlcbiAgbGV0IGJ1aWxkT3V0cHV0RGlyID0gZGV0ZWN0ZWRQcm9qZWN0LmJ1aWxkT3V0cHV0RGlyO1xuXG4gIGlmIChidWlsZE1vZGUgPT09ICdsb2NhbCcpIHtcbiAgICBsb2dnZXIuc3RlcCgxLCA0LCAnQnVpbGRpbmcgcHJvamVjdC4uLicpO1xuXG4gICAgLy8gUGF0Y2ggUmVhY3QgUm91dGVyIGJhc2VuYW1lIGJlZm9yZSBidWlsZCAoaWYgYXBwbGljYWJsZSlcbiAgICBsZXQgZGlkUGF0Y2ggPSBmYWxzZTtcbiAgICBpZiAocHJvamVjdFR5cGUgPT09ICdyZWFjdCcpIHtcbiAgICAgIGNvbnN0IHsgUmVhY3RQYXRjaGVyIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3NlcnZpY2VzL3JlYWN0UGF0Y2hlcicpO1xuICAgICAgZGlkUGF0Y2ggPSBhd2FpdCBSZWFjdFBhdGNoZXIucGF0Y2gocHJvY2Vzcy5jd2QoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgYnVpbGRSZXN1bHQgPSBhd2FpdCBidWlsZFNlcnZpY2UuYnVpbGQoe1xuICAgICAgcHJvamVjdFBhdGg6IHByb2Nlc3MuY3dkKCksXG4gICAgICBwcm9qZWN0VHlwZSxcbiAgICAgIHByb2plY3ROYW1lLFxuICAgICAgcGFja2FnZU1hbmFnZXI6IGRldGVjdGVkUHJvamVjdC5wYWNrYWdlTWFuYWdlcixcbiAgICAgIGVudkZpbGU6IGVudkZpbGVQYXRoLFxuICAgIH0pO1xuXG4gICAgLy8gUmV2ZXJ0IHBhdGNoIGFmdGVyIGJ1aWxkIChrZWVwIHVzZXIncyBzb3VyY2UgY2xlYW4pXG4gICAgaWYgKGRpZFBhdGNoKSB7XG4gICAgICBjb25zdCB7IFJlYWN0UGF0Y2hlciB9ID0gYXdhaXQgaW1wb3J0KCcuLi9zZXJ2aWNlcy9yZWFjdFBhdGNoZXInKTtcbiAgICAgIGF3YWl0IFJlYWN0UGF0Y2hlci5yZXZlcnQocHJvY2Vzcy5jd2QoKSk7XG4gICAgfVxuXG4gICAgaWYgKCFidWlsZFJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEJ1aWxkIGZhaWxlZDogJHtidWlsZFJlc3VsdC5lcnJvcn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBidWlsZE91dHB1dERpciA9IGJ1aWxkUmVzdWx0Lm91dHB1dERpcjtcbiAgICBsb2dnZXIuc3VjY2VzcyhgQnVpbGQgY29tcGxldGVkIGluICR7KGJ1aWxkUmVzdWx0LmR1cmF0aW9uIC8gMTAwMCkudG9GaXhlZCgxKX1zYCk7XG4gICAgbG9nZ2VyLmJsYW5rKCk7XG4gIH1cblxuICAvLyBTdGVwIDI6IFBhY2thZ2VcbiAgY29uc3QgcGFja2FnZVN0ZXAgPSBidWlsZE1vZGUgPT09ICdsb2NhbCcgPyAyIDogMTtcbiAgY29uc3QgdG90YWxTdGVwcyA9IGJ1aWxkTW9kZSA9PT0gJ2xvY2FsJyA/IDQgOiAzO1xuXG4gIGxvZ2dlci5zdGVwKHBhY2thZ2VTdGVwLCB0b3RhbFN0ZXBzLCAnQ3JlYXRpbmcgZGVwbG95bWVudCBwYWNrYWdlLi4uJyk7XG5cbiAgbGV0IHBhY2thZ2VSZXN1bHQ7XG4gIHRyeSB7XG4gICAgcGFja2FnZVJlc3VsdCA9IGF3YWl0IHBhY2thZ2VTZXJ2aWNlLnBhY2thZ2Uoe1xuICAgICAgcHJvamVjdFBhdGg6IHByb2Nlc3MuY3dkKCksXG4gICAgICBwcm9qZWN0VHlwZSxcbiAgICAgIGJ1aWxkT3V0cHV0RGlyLFxuICAgICAgaW5jbHVkZVNvdXJjZTogYnVpbGRNb2RlID09PSAnc2VydmVyJyxcbiAgICAgIGVudkZpbGU6IHByb2plY3RUeXBlID09PSAnbm9kZScgPyBlbnZGaWxlUGF0aCA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoYFBhY2thZ2luZyBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nZ2VyLmJsYW5rKCk7XG5cbiAgLy8gU3RlcCAzOiBBbmFseXplICYgVXBsb2FkXG4gIGxvZ2dlci5zdGVwKHBhY2thZ2VTdGVwICsgMSwgdG90YWxTdGVwcywgJ0FuYWx5emluZyBhbmQgdXBsb2FkaW5nIHRvIHNlcnZlci4uLicpO1xuXG4gIGxldCB1cGxvYWRTZXJ2aWNlO1xuICB0cnkge1xuICAgIHVwbG9hZFNlcnZpY2UgPSBjcmVhdGVVcGxvYWRTZXJ2aWNlKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICBwYWNrYWdlU2VydmljZS5jbGVhbnVwKHBhY2thZ2VSZXN1bHQuemlwUGF0aCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQW5hbHl6ZSBwYWNrYWdlIGZpcnN0IChmb3Igc2VydmVyLWJ1aWxkIG1vZGUgdG8gZ2V0IHdhcm5pbmdzKVxuICBsZXQgY29uZmlybVNlcnZlckJ1aWxkID0gZmFsc2U7XG4gIGlmIChidWlsZE1vZGUgPT09ICdzZXJ2ZXInKSB7XG4gICAgY29uc3QgYW5hbHl6ZVJlc3VsdCA9IGF3YWl0IHVwbG9hZFNlcnZpY2UuYW5hbHl6ZVBhY2thZ2UocGFja2FnZVJlc3VsdC56aXBQYXRoLCBwcm9qZWN0VHlwZSk7XG5cbiAgICBpZiAoYW5hbHl6ZVJlc3VsdC5zdWNjZXNzICYmIGFuYWx5emVSZXN1bHQuYW5hbHlzaXMpIHtcbiAgICAgIGNvbnN0IGFuYWx5c2lzID0gYW5hbHl6ZVJlc3VsdC5hbmFseXNpcztcblxuICAgICAgLy8gRGlzcGxheSB3YXJuaW5nc1xuICAgICAgaWYgKGFuYWx5c2lzLndhcm5pbmdzICYmIGFuYWx5c2lzLndhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgIGxvZ2dlci53YXJuKCdTZXJ2ZXIgQW5hbHlzaXM6Jyk7XG4gICAgICAgIGZvciAoY29uc3Qgd2FybmluZyBvZiBhbmFseXNpcy53YXJuaW5ncykge1xuICAgICAgICAgIGNvbnN0IHByZWZpeCA9IHdhcm5pbmcubGV2ZWwgPT09ICdjcml0aWNhbCcgPyAn4p2MJyA6IHdhcm5pbmcubGV2ZWwgPT09ICd3YXJuaW5nJyA/ICfimqDvuI8nIDogJ+KEue+4jyc7XG4gICAgICAgICAgbG9nZ2VyLmRpbShgICAke3ByZWZpeH0gJHt3YXJuaW5nLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBjb25maXJtYXRpb24gZm9yIHNlcnZlci1zaWRlIGJ1aWxkXG4gICAgICBpZiAoYW5hbHlzaXMucmVxdWlyZXNDb25maXJtYXRpb24pIHtcbiAgICAgICAgY29uc3QgeyBjb25maXJtQnVpbGQgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgICAgICAgbmFtZTogJ2NvbmZpcm1CdWlsZCcsXG4gICAgICAgICAgICBtZXNzYWdlOiBgJHthbmFseXNpcy5jb25maXJtYXRpb25SZWFzb24gfHwgJ1NlcnZlci1zaWRlIGJ1aWxkIHJlcXVpcmVkJ30uIFRoaXMgbWF5IGNvbnN1bWUgc2lnbmlmaWNhbnQgcmVzb3VyY2VzLiBDb250aW51ZT9gLFxuICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAoIWNvbmZpcm1CdWlsZCkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKCdEZXBsb3ltZW50IGNhbmNlbGxlZCBieSB1c2VyLicpO1xuICAgICAgICAgIHBhY2thZ2VTZXJ2aWNlLmNsZWFudXAocGFja2FnZVJlc3VsdC56aXBQYXRoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlybVNlcnZlckJ1aWxkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCB1cGxvYWRSZXN1bHQgPSBhd2FpdCB1cGxvYWRTZXJ2aWNlLnVwbG9hZCh7XG4gICAgemlwUGF0aDogcGFja2FnZVJlc3VsdC56aXBQYXRoLFxuICAgIHByb2plY3ROYW1lLFxuICAgIHByb2plY3RUeXBlLFxuICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbixcbiAgICBidWlsZE1vZGUsXG4gICAgY29uZmlybVNlcnZlckJ1aWxkLFxuICAgIC8vIEVOViBtdXRhYmlsaXR5IHRyYWNraW5nXG4gICAgZGVwbG95bWVudFNvdXJjZTogJ2NsaScsXG4gICAgZW52SW5qZWN0ZWQsXG4gIH0pO1xuXG4gIC8vIENsZWFudXAgemlwIGZpbGVcbiAgcGFja2FnZVNlcnZpY2UuY2xlYW51cChwYWNrYWdlUmVzdWx0LnppcFBhdGgpO1xuXG4gIGlmICghdXBsb2FkUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBsb2dnZXIuZXJyb3IoYFVwbG9hZCBmYWlsZWQ6ICR7dXBsb2FkUmVzdWx0LmVycm9yfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZ2dlci5zdWNjZXNzKCdVcGxvYWQgY29tcGxldGUnKTtcbiAgbG9nZ2VyLmJsYW5rKCk7XG5cbiAgLy8gU3RlcCA0OiBXYWl0IGZvciBkZXBsb3ltZW50IChpZiBkZXBsb3ltZW50IElEIGF2YWlsYWJsZSlcbiAgaWYgKHVwbG9hZFJlc3VsdC5kZXBsb3ltZW50SWQpIHtcbiAgICBsb2dnZXIuc3RlcChwYWNrYWdlU3RlcCArIDIsIHRvdGFsU3RlcHMsICdXYWl0aW5nIGZvciBkZXBsb3ltZW50IHRvIGNvbXBsZXRlLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZmluYWxTdGF0dXMgPSBhd2FpdCB1cGxvYWRTZXJ2aWNlLnBvbGxEZXBsb3ltZW50U3RhdHVzKFxuICAgICAgICB1cGxvYWRSZXN1bHQuZGVwbG95bWVudElkLFxuICAgICAgICAoc3RhdHVzKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cy5wcm9ncmVzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgXFxyICBQcm9ncmVzczogJHtzdGF0dXMucHJvZ3Jlc3N9JWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJ1xcbicpO1xuXG4gICAgICBpZiAoZmluYWxTdGF0dXMuc3RhdHVzID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgIGxvZ2dlci5zdWNjZXNzKCdEZXBsb3ltZW50IHN1Y2Nlc3NmdWwhJyk7XG5cbiAgICAgICAgY29uc3Qgc2FmZU5hbWUgPSBwcm9qZWN0TmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05XS9nLCAnLScpO1xuXG4gICAgICAgIC8vIEZldGNoIGRvbWFpbiBjb25maWcgdG8gc2hvdyBwcm9wZXIgVVJMXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZG9tYWluUmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoYCR7Y29uZmlnLnNlcnZlclVybH0vYXBpL2RvbWFpbmAsIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IGNvbmZpZy50b2tlbiA/IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2NvbmZpZy50b2tlbn1gIH0gOiB7fSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBkb21haW5Db25maWcgPSBkb21haW5SZXNwb25zZS5kYXRhO1xuXG4gICAgICAgICAgaWYgKGRvbWFpbkNvbmZpZy5kb21haW4/LmFjdGl2ZSAmJiBkb21haW5Db25maWcuc2VjdXJpdHlNb2RlID09PSAnZG9tYWluLWh0dHBzJykge1xuICAgICAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhgWW91ciBhcHAgaXMgYXZhaWxhYmxlIGF0OiBodHRwczovLyR7ZG9tYWluQ29uZmlnLmRvbWFpbi5kb21haW59L2FwcC8ke3NhZmVOYW1lfWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBZb3VyIGFwcCBpcyBhdmFpbGFibGUgYXQ6ICR7Y29uZmlnLnNlcnZlclVybH0vYXBwLyR7c2FmZU5hbWV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBGYWxsYmFjayB0byBzZXJ2ZXIgVVJMIGlmIGRvbWFpbiBmZXRjaCBmYWlsc1xuICAgICAgICAgIGxvZ2dlci5ibGFuaygpO1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGBZb3VyIGFwcCBpcyBhdmFpbGFibGUgYXQ6ICR7Y29uZmlnLnNlcnZlclVybH0vYXBwLyR7c2FmZU5hbWV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTaG93IGhlYWx0aCB3YXJuaW5nIGlmIHNlcnZpY2UgZGlkbid0IHJlc3BvbmQgb24gaXRzIGFsbG9jYXRlZCBwb3J0XG4gICAgICAgIGlmIChmaW5hbFN0YXR1cy5oZWFsdGhXYXJuaW5nKSB7XG4gICAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oYOKaoCAgSGVhbHRoIGNoZWNrOiAke2ZpbmFsU3RhdHVzLmhlYWx0aFdhcm5pbmd9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihgRGVwbG95bWVudCBmYWlsZWQ6ICR7ZmluYWxTdGF0dXMuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InfWApO1xuICAgICAgICBpZiAoZmluYWxTdGF0dXMubG9ncykge1xuICAgICAgICAgIGxvZ2dlci5ibGFuaygpO1xuICAgICAgICAgIGxvZ2dlci5kaW0oJ0xvZ3M6Jyk7XG4gICAgICAgICAgY29uc29sZS5sb2coZmluYWxTdGF0dXMubG9ncyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ0NvdWxkIG5vdCB0cmFjayBkZXBsb3ltZW50IHN0YXR1cycpO1xuICAgICAgbG9nZ2VyLmRpbSgnQ2hlY2sgdGhlIHdlYiBVSSBmb3IgZGVwbG95bWVudCBzdGF0dXMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgbG9nZ2VyLnN1Y2Nlc3MoJ1VwbG9hZCBzdWNjZXNzZnVsIScpO1xuICAgIGxvZ2dlci5kaW0oJ0RlcGxveW1lbnQgaXMgYmVpbmcgcHJvY2Vzc2VkLiBDaGVjayB0aGUgd2ViIFVJIGZvciBzdGF0dXMuJyk7XG4gIH1cblxuICBsb2dnZXIuYmxhbmsoKTtcbn1cbiJdfQ==
@@ -127,11 +127,37 @@ async function initCommand(options) {
127
127
  logger_1.logger.info('Authenticating...');
128
128
  try {
129
129
  const authResult = await authService.authenticate(credentials.username, credentials.password);
130
- // Save configuration with all auth data
131
- (0, config_1.setServerUrl)(serverUrl);
132
- (0, config_1.setAuthData)(authResult.token, authResult.expiresAt, authResult.securityMode);
133
- logger_1.logger.blank();
134
- logger_1.logger.success('Configuration saved successfully!');
130
+ // Check if password reset is required
131
+ if (authResult.mustResetPassword) {
132
+ logger_1.logger.blank();
133
+ logger_1.logger.warn('⚠️ Password reset required');
134
+ logger_1.logger.info('You are using the default password. Please set a new password to continue.');
135
+ logger_1.logger.blank();
136
+ // Prompt for new password
137
+ const resetResult = await promptPasswordReset(authService, credentials.password);
138
+ if (resetResult) {
139
+ // Save configuration with new token
140
+ (0, config_1.setServerUrl)(serverUrl);
141
+ (0, config_1.setAuthData)(resetResult.token, resetResult.expiresAt, resetResult.securityMode);
142
+ logger_1.logger.blank();
143
+ logger_1.logger.success('Password updated and configuration saved!');
144
+ }
145
+ else {
146
+ // User skipped password reset, save with current token but warn
147
+ (0, config_1.setServerUrl)(serverUrl);
148
+ (0, config_1.setAuthData)(authResult.token, authResult.expiresAt, authResult.securityMode);
149
+ logger_1.logger.blank();
150
+ logger_1.logger.warn('Configuration saved, but password reset is still required.');
151
+ logger_1.logger.dim('You will be prompted to reset your password on next login.');
152
+ }
153
+ }
154
+ else {
155
+ // Save configuration with all auth data
156
+ (0, config_1.setServerUrl)(serverUrl);
157
+ (0, config_1.setAuthData)(authResult.token, authResult.expiresAt, authResult.securityMode);
158
+ logger_1.logger.blank();
159
+ logger_1.logger.success('Configuration saved successfully!');
160
+ }
135
161
  logger_1.logger.blank();
136
162
  logger_1.logger.info('You can now deploy projects with:');
137
163
  logger_1.logger.dim(' runway deploy');
@@ -148,6 +174,60 @@ async function initCommand(options) {
148
174
  logger_1.logger.dim('Check your credentials and try again.');
149
175
  }
150
176
  }
177
+ /**
178
+ * Prompt user to reset their password
179
+ */
180
+ async function promptPasswordReset(authService, currentPassword) {
181
+ const { resetNow } = await inquirer_1.default.prompt([
182
+ {
183
+ type: 'confirm',
184
+ name: 'resetNow',
185
+ message: 'Would you like to reset your password now?',
186
+ default: true,
187
+ },
188
+ ]);
189
+ if (!resetNow) {
190
+ return null;
191
+ }
192
+ // Get new password with confirmation
193
+ const newPasswordAnswers = await inquirer_1.default.prompt([
194
+ {
195
+ type: 'password',
196
+ name: 'newPassword',
197
+ message: 'Enter new password (min. 6 characters):',
198
+ validate: (input) => {
199
+ if (input.length < 6) {
200
+ return 'Password must be at least 6 characters';
201
+ }
202
+ return true;
203
+ },
204
+ },
205
+ {
206
+ type: 'password',
207
+ name: 'confirmPassword',
208
+ message: 'Confirm new password:',
209
+ validate: (input, answers) => {
210
+ if (input !== answers?.newPassword) {
211
+ return 'Passwords do not match';
212
+ }
213
+ return true;
214
+ },
215
+ },
216
+ ]);
217
+ logger_1.logger.info('Updating password...');
218
+ try {
219
+ const resetResult = await authService.resetPassword(currentPassword, newPasswordAnswers.newPassword);
220
+ return {
221
+ token: resetResult.token,
222
+ expiresAt: resetResult.expiresAt,
223
+ securityMode: resetResult.securityMode,
224
+ };
225
+ }
226
+ catch (error) {
227
+ logger_1.logger.error('Failed to reset password. Please try again later.');
228
+ return null;
229
+ }
230
+ }
151
231
  /**
152
232
  * Legacy authentication for servers without CLI auth support
153
233
  */
@@ -193,4 +273,4 @@ async function legacyAuth(serverUrl) {
193
273
  }
194
274
  }
195
275
  }
196
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9pbml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBVUEsa0NBeUpDO0FBbktELHdEQUFnQztBQUNoQyxrREFBMEI7QUFDMUIsNENBQXFGO0FBQ3JGLDRDQUF5QztBQUN6Qyx5REFBc0Q7QUFNL0MsS0FBSyxVQUFVLFdBQVcsQ0FBQyxPQUFvQjtJQUNwRCxlQUFNLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFFbEMsOEJBQThCO0lBQzlCLElBQUksSUFBQSxxQkFBWSxHQUFFLEVBQUUsQ0FBQztRQUNuQixNQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFTLEdBQUUsQ0FBQztRQUMzQixlQUFNLENBQUMsSUFBSSxDQUFDLDRCQUE0QixNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUM1RCxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixlQUFNLENBQUMsR0FBRyxDQUFDLGtCQUFrQixNQUFNLENBQUMsWUFBWSxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUMvRyxDQUFDO1FBRUQsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sa0JBQVEsQ0FBQyxNQUFNLENBQUM7WUFDNUM7Z0JBQ0UsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLE9BQU8sRUFBRSw2QkFBNkI7Z0JBQ3RDLE9BQU8sRUFBRSxLQUFLO2FBQ2Y7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsZUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQ3hDLE9BQU87UUFDVCxDQUFDO0lBQ0gsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixJQUFJLFNBQVMsR0FBRyxPQUFPLENB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QyxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMzRixDQUFDO2FBQU0sQ0FBQztZQUNOLGVBQU0sQ0FBQyxLQUFLLENBQUMseUJBQXlCLEdBQUcsQ0FBQyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQ3ZHLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbnF1aXJlciBmcm9tICdpbnF1aXJlcic7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgc2V0U2VydmVyVXJsLCBzZXRBdXRoRGF0YSwgZ2V0Q29uZmlnLCBpc0NvbmZpZ3VyZWQgfSBmcm9tICcuLi91dGlscy9jb25maWcnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXV0aFNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSW5pdE9wdGlvbnMge1xuICBzZXJ2ZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0Q29tbWFuZChvcHRpb25zOiBJbml0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBsb2dnZXIuaGVhZGVyKCdSdW53YXkgQ0xJIFNldHVwJyk7XG5cbiAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBjb25maWd1cmVkXG4gIGlmIChpc0NvbmZpZ3VyZWQoKSkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICAgIGxvZ2dlci5pbmZvKGBDdXJyZW50bHkgY29uZmlndXJlZCB0bzogJHtjb25maWcuc2VydmVyVXJsfWApO1xuICAgIGlmIChjb25maWcuc2VjdXJpdHlNb2RlKSB7XG4gICAgICBsb2dnZXIuZGltKGBTZWN1cml0eSBtb2RlOiAke2NvbmZpZy5zZWN1cml0eU1vZGUgPT09ICdkb21haW4taHR0cHMnID8gJ0hUVFBTIChzZWN1cmUpJyA6ICdIVFRQIChsaW1pdGVkKSd9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyByZWNvbmZpZ3VyZSB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgICBuYW1lOiAncmVjb25maWd1cmUnLFxuICAgICAgICBtZXNzYWdlOiAnRG8geW91IHdhbnQgdG8gcmVjb25maWd1cmU/JyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB9LFxuICAgIF0pO1xuXG4gICAgaWYgKCFyZWNvbmZpZ3VyZSkge1xuICAgICAgbG9nZ2VyLmluZm8oJ0NvbmZpZ3VyYXRpb24gdW5jaGFuZ2VkLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldCBzZXJ2ZXIgVVJMXG4gIGxldCBzZXJ2ZXJVcmwgPSBvcHRpb25zLnNlcnZlcjtcblxuICBpZiAoIXNlcnZlclVybCkge1xuICAgIGNvbnN0IGFuc3dlcnMgPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBuYW1lOiAnc2VydmVyVXJsJyxcbiAgICAgICAgbWVzc2FnZTogJ0VudGVyIHlvdXIgUnVud2F5IHNlcnZlciBVUkw6JyxcbiAgICAgICAgZGVmYXVsdDogJ2h0dHBzOi8vZGVwbG95LmV4YW1wbGUuY29tJyxcbiAgICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyBVUkwoaW5wdXQpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFVSTCc7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgICBzZXJ2ZXJVcmwgPSBhbnN3ZXJzLnNlcnZlclVybCBhcyBzdHJpbmc7XG4gIH1cblxuICAvLyBOb3JtYWxpemUgVVJMXG4gIHNlcnZlclVybCA9IHNlcnZlclVybCEucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG5cbiAgLy8gVGVzdCBjb25uZWN0aW9uXG4gIGxvZ2dlci5pbmZvKCdUZXN0aW5nIGNvbm5lY3Rpb24uLi4nKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBheGlvcy5nZXQoYCR7c2VydmVyVXJsfS9oZWFsdGhgLCB7IHRpbWVvdXQ6IDEwMDAwIH0pO1xuICAgIGxvZ2dlci5zdWNjZXNzKCdTZXJ2ZXIgaXMgcmVhY2hhYmxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKGBDYW5ub3QgcmVhY2ggc2VydmVyIGF0ICR7c2VydmVyVXJsfWApO1xuICAgIGxvZ2dlci5kaW0oJ01ha2Ugc3VyZSB0aGUgc2VydmVyIGlzIHJ1bm5pbmcgYW5kIHRoZSBVUkwgaXMgY29ycmVjdC4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBJbml0aWFsaXplIGF1dGggc2VydmljZVxuICBjb25zdCBhdXRoU2VydmljZSA9IG5ldyBBdXRoU2VydmljZShzZXJ2ZXJVcmwpO1xuXG4gIC8vIENoZWNrIHNlY3VyaXR5IG1vZGVcbiAgbG9nZ2VyLmluZm8oJ0NoZWNraW5nIHNlcnZlciBzZWN1cml0eSBtb2RlLi4uJyk7XG4gIGxldCBzZWN1cml0eUluZm87XG4gIHRyeSB7XG4gICAgc2VjdXJpdHlJbmZvID0gYXdhaXQgYXV0aFNlcnZpY2UuZ2V0U2VjdXJpdHlNb2RlKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZ2V0IHNlcnZlciBzZWN1cml0eSBtb2RlJyk7XG4gICAgbG9nZ2VyLmRpbSgnVGhlIHNlcnZlciBtYXkgYmUgcnVubmluZyBhbiBvbGRlciB2ZXJzaW9uIHdpdGhvdXQgQ0xJIGF1dGggc3VwcG9ydC4nKTtcbiAgICBsb2dnZXIuZGltKCdGYWxsaW5nIGJhY2sgdG8gbGVnYWN5IGF1dGhlbnRpY2F0aW9uLi4uJyk7XG4gICAgYXdhaXQgbGVnYWN5QXV0aChzZXJ2ZXJVcmwpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERpc3BsYXkgc2VjdXJpdHkgaW5mb1xuICBpZiAoc2VjdXJpdHlJbmZvLnNlY3VyaXR5TW9kZSA9PT0gJ2RvbWFpbi1odHRwcycpIHtcbiAgICBsb2dnZXIuc3VjY2VzcyhgU2VydmVyIGhhcyBIVFRQUyBlbmFibGVkOiAke3NlY3VyaXR5SW5mby5kb21haW59YCk7XG4gICAgbG9nZ2VyLmRpbSgnQXV0aGVudGljYXRpb24gd2lsbCB1c2Ugc2VjdXJlIFRMUyBjb25uZWN0aW9uLicpO1xuICB9IGVsc2Uge1xuICAgIGxvZ2dlci53YXJuKCdTZXJ2ZXIgaXMgcnVubmluZyBpbiBIVFRQIG1vZGUgKG5vIGRvbWFpbiBjb25maWd1cmVkKScpO1xuICAgIGxvZ2dlci5kaW0oJ0F1dGhlbnRpY2F0aW9uIHdpbGwgdXNlIFJTQSBrZXkgZXhjaGFuZ2UgKE1JVE0gdnVsbmVyYWJsZSkuJyk7XG4gICAgbG9nZ2VyLmJsYW5rKCk7XG5cbiAgICBjb25zdCB7IHByb2NlZWQgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgICAgbmFtZTogJ3Byb2NlZWQnLFxuICAgICAgICBtZXNzYWdlOiAnQ29udGludWUgd2l0aCBSU0EgYXV0aGVudGljYXRpb24/JyxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgXSk7XG5cbiAgICBpZiAoIXByb2NlZWQpIHtcbiAgICAgIGxvZ2dlci5ibGFuaygpO1xuICAgICAgbG9nZ2VyLmluZm8oJ1RvIGVuYWJsZSBzZWN1cmUgYXV0aGVudGljYXRpb246Jyk7XG4gICAgICBsb2dnZXIuZGltKCcgIDEuIENvbmZpZ3VyZSBhIGRvbWFpbiBvbiB5b3VyIFJ1bndheSBzZXJ2ZXInKTtcbiAgICAgIGxvZ2dlci5kaW0oJyAgMi4gRW5hYmxlIEhUVFBTIHRocm91Z2ggdGhlIFNldHRpbmdzIHBhZ2UnKTtcbiAgICAgIGxvZ2dlci5kaW0oJyAgMy4gUnVuIGBydW53YXkgaW5pdGAgYWdhaW4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICAvLyBHZXQgY3JlZGVudGlhbHNcbiAgbG9nZ2VyLmJsYW5rKCk7XG4gIGNvbnN0IGNyZWRlbnRpYWxzID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcbiAgICAgIG1lc3NhZ2U6ICdVc2VybmFtZTonLFxuICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiBpbnB1dC5sZW5ndGggPiAwIHx8ICdVc2VybmFtZSBpcyByZXF1aXJlZCcsXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiAncGFzc3dvcmQnLFxuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcbiAgICAgIG1lc3NhZ2U6ICdQYXNzd29yZDonLFxuICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiBpbnB1dC5sZW5ndGggPiAwIHx8ICdQYXNzd29yZCBpcyByZXF1aXJlZCcsXG4gICAgfSxcbiAgXSk7XG5cbiAgLy8gQXV0aGVudGljYXRlIHVzaW5nIHRoZSBhdXRoIHNlcnZpY2VcbiAgbG9nZ2VyLmluZm8oJ0F1dGhlbnRpY2F0aW5nLi4uJyk7XG4gIHRyeSB7XG4gICAgY29uc3QgYXV0aFJlc3VsdCA9IGF3YWl0IGF1dGhTZXJ2aWNlLmF1dGhlbnRpY2F0ZShcbiAgICAgIGNyZWRlbnRpYWxzLnVzZXJuYW1lLFxuICAgICAgY3JlZGVudGlhbHMucGFzc3dvcmRcbiAgICApO1xuXG4gICAgLy8gU2F2ZSBjb25maWd1cmF0aW9uIHdpdGggYWxsIGF1dGggZGF0YVxuICAgIHNldFNlcnZlclVybChzZXJ2ZXJVcmwpO1xuICAgIHNldEF1dGhEYXRhKGF1dGhSZXN1bHQudG9rZW4sIGF1dGhSZXN1bHQuZXhwaXJlc0F0LCBhdXRoUmVzdWx0LnNlY3VyaXR5TW9kZSk7XG5cbiAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICBsb2dnZXIuc3VjY2VzcygnQ29uZmlndXJhdGlvbiBzYXZlZCBzdWNjZXNzZnVsbHkhJyk7XG4gICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgbG9nZ2VyLmluZm8oJ1lvdSBjYW4gbm93IGRlcGxveSBwcm9qZWN0cyB3aXRoOicpO1xuICAgIGxvZ2dlci5kaW0oJyAgcnVud2F5IGRlcGxveScpO1xuICAgIGxvZ2dlci5ibGFuaygpO1xuXG4gICAgLy8gU2hvdyB0b2tlbiBleHBpcnkgd2FybmluZyBmb3IgSFRUUCBtb2RlXG4gICAgaWYgKGF1dGhSZXN1bHQuc2VjdXJpdHlNb2RlID09PSAnaXAtaHR0cCcpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdOb3RlOiBUb2tlbiBleHBpcmVzIGluIDE1IG1pbnV0ZXMgZHVlIHRvIEhUVFAgbW9kZS4nKTtcbiAgICAgIGxvZ2dlci5kaW0oJ1J1biBgcnVud2F5IGluaXRgIHRvIHJlLWF1dGhlbnRpY2F0ZSB3aGVuIG5lZWRlZC4nKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gRXJyb3IgYWxyZWFkeSBsb2dnZWQgYnkgQXV0aFNlcnZpY2VcbiAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICBsb2dnZXIuZGltKCdDaGVjayB5b3VyIGNyZWRlbnRpYWxzIGFuZCB0cnkgYWdhaW4uJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBMZWdhY3kgYXV0aGVudGljYXRpb24gZm9yIHNlcnZlcnMgd2l0aG91dCBDTEkgYXV0aCBzdXBwb3J0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxlZ2FjeUF1dGgoc2VydmVyVXJsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY3JlZGVudGlhbHMgPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgIHtcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBuYW1lOiAndXNlcm5hbWUnLFxuICAgICAgbWVzc2FnZTogJ1VzZXJuYW1lOicsXG4gICAgICB2YWxpZGF0ZTogKGlucHV0OiBzdHJpbmcpID0+IGlucHV0Lmxlbmd0aCA+IDAgfHwgJ1VzZXJuYW1lIGlzIHJlcXVpcmVkJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6ICdwYXNzd29yZCcsXG4gICAgICBuYW1lOiAncGFzc3dvcmQnLFxuICAgICAgbWVzc2FnZTogJ1Bhc3N3b3JkOicsXG4gICAgICB2YWxpZGF0ZTogKGlucHV0OiBzdHJpbmcpID0+IGlucHV0Lmxlbmd0aCA+IDAgfHwgJ1Bhc3N3b3JkIGlzIHJlcXVpcmVkJyxcbiAgICB9LFxuICBdKTtcblxuICBsb2dnZXIuaW5mbygnQXV0aGVudGljYXRpbmcuLi4nKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3QoXG4gICAgICBgJHtzZXJ2ZXJVcmx9L2FwaS9hdXRoL2xvZ2luYCxcbiAgICAgIGNyZWRlbnRpYWxzLFxuICAgICAgeyB0aW1lb3V0OiAxMDAwMCB9XG4gICAgKTtcblxuICAgIGlmIChyZXNwb25zZS5kYXRhLnN1Y2Nlc3MgJiYgcmVzcG9uc2UuZGF0YT8udG9rZW4pIHtcbiAgICAgIC8vIFNhdmUgY29uZmlndXJhdGlvbiAobGVnYWN5IG1vZGUgd2l0aG91dCBleHBpcnkgdHJhY2tpbmcpXG4gICAgICBzZXRTZXJ2ZXJVcmwoc2VydmVyVXJsKTtcbiAgICAgIHNldEF1dGhEYXRhKHJlc3BvbnNlLmRhdGEudG9rZW4sICcnLCAnaXAtaHR0cCcpO1xuXG4gICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgIGxvZ2dlci5zdWNjZXNzKCdDb25maWd1cmF0aW9uIHNhdmVkIHN1Y2Nlc3NmdWxseSEnKTtcbiAgICAgIGxvZ2dlci5ibGFuaygpO1xuICAgICAgbG9nZ2VyLmluZm8oJ1lvdSBjYW4gbm93IGRlcGxveSBwcm9qZWN0cyB3aXRoOicpO1xuICAgICAgbG9nZ2VyLmRpbSgnICBydW53YXkgZGVwbG95Jyk7XG4gICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmVycm9yKCdBdXRoZW50aWNhdGlvbiBmYWlsZWQ6ICcgKyAocmVzcG9uc2UuZGF0YS5lcnJvciB8fCAnVW5rbm93biBlcnJvcicpKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGF4aW9zLmlzQXhpb3NFcnJvcihlcnJvcikpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignQXV0aGVudGljYXRpb24gZmFpbGVkOiAnICsgKGVycm9yLnJlc3BvbnNlPy5kYXRhPy5lcnJvciB8fCBlcnJvci5tZXNzYWdlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5lcnJvcignQXV0aGVudGljYXRpb24gZmFpbGVkOiAnICsgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKSk7XG4gICAgfVxuICB9XG59XG4iXX0=
276
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9pbml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBVUEsa0NBc0xDO0FBaE1ELHdEQUFnQztBQUNoQyxrREFBMEI7QUFDMUIsNENBQXFGO0FBQ3JGLDRDQUF5QztBQUN6Qyx5REFBc0Q7QUFNL0MsS0FBSyxVQUFVLFdBQVcsQ0FBQyxPQUFvQjtJQUNwRCxlQUFNLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFFbEMsOEJBQThCO0lBQzlCLElBQUksSUFBQSxxQkFBWSxHQUFFLEVBQUUsQ0FBQztRQUNuQixNQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFTLEdBQUUsQ0FBQztRQUMzQixlQUFNLENBQUMsSUFBSSxDQUFDLDRCQUE0QixNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUM1RCxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixlQUFNLENBQUMsR0FBRyxDQUFDLGtCQUFrQixNQUFNLENBQUMsWUFBWSxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUMvRyxDQUFDO1FBRUQsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sa0JBQVEsQ0FBQyxNQUFNLENBQUM7WUFDNUM7Z0JBQ0UsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLE9BQU8sRUFBRSw2QkFBNkI7Z0JBQ3RDLE9BQU8sRUFBRSxLQUFLO2FBQ2Y7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsZUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQ3hDLE9BQU87UUFDVCxDQUFDO0lBQ0gsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixJQUFJLFNBQVMsR0FBRyxPQUFPLENB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WUFDTixlQUFNLENBQUMsS0FBSyxDQUFDLHlCQUF5QixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQztRQUNyRixDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLGVBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5QixlQUFNLENBQUMsS0FBSyxDQUFDLHlCQUF5QixHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzNGLENBQUM7YUFBTSxDQUFDO1lBQ04sZUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDdkcsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlucXVpcmVyIGZyb20gJ2lucXVpcmVyJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBzZXRTZXJ2ZXJVcmwsIHNldEF1dGhEYXRhLCBnZXRDb25maWcsIGlzQ29uZmlndXJlZCB9IGZyb20gJy4uL3V0aWxzL2NvbmZpZyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXInO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hdXRoU2VydmljZSc7XG5cbmludGVyZmFjZSBJbml0T3B0aW9ucyB7XG4gIHNlcnZlcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRDb21tYW5kKG9wdGlvbnM6IEluaXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxvZ2dlci5oZWFkZXIoJ1J1bndheSBDTEkgU2V0dXAnKTtcblxuICAvLyBDaGVjayBpZiBhbHJlYWR5IGNvbmZpZ3VyZWRcbiAgaWYgKGlzQ29uZmlndXJlZCgpKSB7XG4gICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gICAgbG9nZ2VyLmluZm8oYEN1cnJlbnRseSBjb25maWd1cmVkIHRvOiAke2NvbmZpZy5zZXJ2ZXJVcmx9YCk7XG4gICAgaWYgKGNvbmZpZy5zZWN1cml0eU1vZGUpIHtcbiAgICAgIGxvZ2dlci5kaW0oYFNlY3VyaXR5IG1vZGU6ICR7Y29uZmlnLnNlY3VyaXR5TW9kZSA9PT0gJ2RvbWFpbi1odHRwcycgPyAnSFRUUFMgKHNlY3VyZSknIDogJ0hUVFAgKGxpbWl0ZWQpJ31gKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHJlY29uZmlndXJlIH0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICAgIG5hbWU6ICdyZWNvbmZpZ3VyZScsXG4gICAgICAgIG1lc3NhZ2U6ICdEbyB5b3Ugd2FudCB0byByZWNvbmZpZ3VyZT8nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSk7XG5cbiAgICBpZiAoIXJlY29uZmlndXJlKSB7XG4gICAgICBsb2dnZXIuaW5mbygnQ29uZmlndXJhdGlvbiB1bmNoYW5nZWQuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLy8gR2V0IHNlcnZlciBVUkxcbiAgbGV0IHNlcnZlclVybCA9IG9wdGlvbnMuc2VydmVyO1xuXG4gIGlmICghc2VydmVyVXJsKSB7XG4gICAgY29uc3QgYW5zd2VycyA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICdzZXJ2ZXJVcmwnLFxuICAgICAgICBtZXNzYWdlOiAnRW50ZXIgeW91ciBSdW53YXkgc2VydmVyIFVSTDonLFxuICAgICAgICBkZWZhdWx0OiAnaHR0cHM6Ly9kZXBsb3kuZXhhbXBsZS5jb20nLFxuICAgICAgICB2YWxpZGF0ZTogKGlucHV0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IFVSTChpbnB1dCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgVVJMJztcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICAgIHNlcnZlclVybCA9IGFuc3dlcnMuc2VydmVyVXJsIGFzIHN0cmluZztcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBVUkxcbiAgc2VydmVyVXJsID0gc2VydmVyVXJsIS5yZXBsYWNlKC9cXC8rJC8sICcnKTtcblxuICAvLyBUZXN0IGNvbm5lY3Rpb25cbiAgbG9nZ2VyLmluZm8oJ1Rlc3RpbmcgY29ubmVjdGlvbi4uLicpO1xuICB0cnkge1xuICAgIGF3YWl0IGF4aW9zLmdldChgJHtzZXJ2ZXJVcmx9L2hlYWx0aGAsIHsgdGltZW91dDogMTAwMDAgfSk7XG4gICAgbG9nZ2VyLnN1Y2Nlc3MoJ1NlcnZlciBpcyByZWFjaGFibGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoYENhbm5vdCByZWFjaCBzZXJ2ZXIgYXQgJHtzZXJ2ZXJVcmx9YCk7XG4gICAgbG9nZ2VyLmRpbSgnTWFrZSBzdXJlIHRoZSBzZXJ2ZXIgaXMgcnVubmluZyBhbmQgdGhlIFVSTCBpcyBjb3JyZWN0LicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEluaXRpYWxpemUgYXV0aCBzZXJ2aWNlXG4gIGNvbnN0IGF1dGhTZXJ2aWNlID0gbmV3IEF1dGhTZXJ2aWNlKHNlcnZlclVybCk7XG5cbiAgLy8gQ2hlY2sgc2VjdXJpdHkgbW9kZVxuICBsb2dnZXIuaW5mbygnQ2hlY2tpbmcgc2VydmVyIHNlY3VyaXR5IG1vZGUuLi4nKTtcbiAgbGV0IHNlY3VyaXR5SW5mbztcbiAgdHJ5IHtcbiAgICBzZWN1cml0eUluZm8gPSBhd2FpdCBhdXRoU2VydmljZS5nZXRTZWN1cml0eU1vZGUoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgc2VydmVyIHNlY3VyaXR5IG1vZGUnKTtcbiAgICBsb2dnZXIuZGltKCdUaGUgc2VydmVyIG1heSBiZSBydW5uaW5nIGFuIG9sZGVyIHZlcnNpb24gd2l0aG91dCBDTEkgYXV0aCBzdXBwb3J0LicpO1xuICAgIGxvZ2dlci5kaW0oJ0ZhbGxpbmcgYmFjayB0byBsZWdhY3kgYXV0aGVudGljYXRpb24uLi4nKTtcbiAgICBhd2FpdCBsZWdhY3lBdXRoKHNlcnZlclVybCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGlzcGxheSBzZWN1cml0eSBpbmZvXG4gIGlmIChzZWN1cml0eUluZm8uc2VjdXJpdHlNb2RlID09PSAnZG9tYWluLWh0dHBzJykge1xuICAgIGxvZ2dlci5zdWNjZXNzKGBTZXJ2ZXIgaGFzIEhUVFBTIGVuYWJsZWQ6ICR7c2VjdXJpdHlJbmZvLmRvbWFpbn1gKTtcbiAgICBsb2dnZXIuZGltKCdBdXRoZW50aWNhdGlvbiB3aWxsIHVzZSBzZWN1cmUgVExTIGNvbm5lY3Rpb24uJyk7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLndhcm4oJ1NlcnZlciBpcyBydW5uaW5nIGluIEhUVFAgbW9kZSAobm8gZG9tYWluIGNvbmZpZ3VyZWQpJyk7XG4gICAgbG9nZ2VyLmRpbSgnQXV0aGVudGljYXRpb24gd2lsbCB1c2UgUlNBIGtleSBleGNoYW5nZSAoTUlUTSB2dWxuZXJhYmxlKS4nKTtcbiAgICBsb2dnZXIuYmxhbmsoKTtcblxuICAgIGNvbnN0IHsgcHJvY2VlZCB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgICBuYW1lOiAncHJvY2VlZCcsXG4gICAgICAgIG1lc3NhZ2U6ICdDb250aW51ZSB3aXRoIFJTQSBhdXRoZW50aWNhdGlvbj8nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIGlmICghcHJvY2VlZCkge1xuICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICBsb2dnZXIuaW5mbygnVG8gZW5hYmxlIHNlY3VyZSBhdXRoZW50aWNhdGlvbjonKTtcbiAgICAgIGxvZ2dlci5kaW0oJyAgMS4gQ29uZmlndXJlIGEgZG9tYWluIG9uIHlvdXIgUnVud2F5IHNlcnZlcicpO1xuICAgICAgbG9nZ2VyLmRpbSgnICAyLiBFbmFibGUgSFRUUFMgdGhyb3VnaCB0aGUgU2V0dGluZ3MgcGFnZScpO1xuICAgICAgbG9nZ2VyLmRpbSgnICAzLiBSdW4gYHJ1bndheSBpbml0YCBhZ2FpbicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldCBjcmVkZW50aWFsc1xuICBsb2dnZXIuYmxhbmsoKTtcbiAgY29uc3QgY3JlZGVudGlhbHMgPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgIHtcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBuYW1lOiAndXNlcm5hbWUnLFxuICAgICAgbWVzc2FnZTogJ1VzZXJuYW1lOicsXG4gICAgICB2YWxpZGF0ZTogKGlucHV0OiBzdHJpbmcpID0+IGlucHV0Lmxlbmd0aCA+IDAgfHwgJ1VzZXJuYW1lIGlzIHJlcXVpcmVkJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6ICdwYXNzd29yZCcsXG4gICAgICBuYW1lOiAncGFzc3dvcmQnLFxuICAgICAgbWVzc2FnZTogJ1Bhc3N3b3JkOicsXG4gICAgICB2YWxpZGF0ZTogKGlucHV0OiBzdHJpbmcpID0+IGlucHV0Lmxlbmd0aCA+IDAgfHwgJ1Bhc3N3b3JkIGlzIHJlcXVpcmVkJyxcbiAgICB9LFxuICBdKTtcblxuICAvLyBBdXRoZW50aWNhdGUgdXNpbmcgdGhlIGF1dGggc2VydmljZVxuICBsb2dnZXIuaW5mbygnQXV0aGVudGljYXRpbmcuLi4nKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBhdXRoUmVzdWx0ID0gYXdhaXQgYXV0aFNlcnZpY2UuYXV0aGVudGljYXRlKFxuICAgICAgY3JlZGVudGlhbHMudXNlcm5hbWUsXG4gICAgICBjcmVkZW50aWFscy5wYXNzd29yZFxuICAgICk7XG5cbiAgICAvLyBDaGVjayBpZiBwYXNzd29yZCByZXNldCBpcyByZXF1aXJlZFxuICAgIGlmIChhdXRoUmVzdWx0Lm11c3RSZXNldFBhc3N3b3JkKSB7XG4gICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgIGxvZ2dlci53YXJuKCfimqDvuI8gIFBhc3N3b3JkIHJlc2V0IHJlcXVpcmVkJyk7XG4gICAgICBsb2dnZXIuaW5mbygnWW91IGFyZSB1c2luZyB0aGUgZGVmYXVsdCBwYXNzd29yZC4gUGxlYXNlIHNldCBhIG5ldyBwYXNzd29yZCB0byBjb250aW51ZS4nKTtcbiAgICAgIGxvZ2dlci5ibGFuaygpO1xuXG4gICAgICAvLyBQcm9tcHQgZm9yIG5ldyBwYXNzd29yZFxuICAgICAgY29uc3QgcmVzZXRSZXN1bHQgPSBhd2FpdCBwcm9tcHRQYXNzd29yZFJlc2V0KGF1dGhTZXJ2aWNlLCBjcmVkZW50aWFscy5wYXNzd29yZCk7XG5cbiAgICAgIGlmIChyZXNldFJlc3VsdCkge1xuICAgICAgICAvLyBTYXZlIGNvbmZpZ3VyYXRpb24gd2l0aCBuZXcgdG9rZW5cbiAgICAgICAgc2V0U2VydmVyVXJsKHNlcnZlclVybCk7XG4gICAgICAgIHNldEF1dGhEYXRhKHJlc2V0UmVzdWx0LnRva2VuLCByZXNldFJlc3VsdC5leHBpcmVzQXQsIHJlc2V0UmVzdWx0LnNlY3VyaXR5TW9kZSk7XG5cbiAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgIGxvZ2dlci5zdWNjZXNzKCdQYXNzd29yZCB1cGRhdGVkIGFuZCBjb25maWd1cmF0aW9uIHNhdmVkIScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVXNlciBza2lwcGVkIHBhc3N3b3JkIHJlc2V0LCBzYXZlIHdpdGggY3VycmVudCB0b2tlbiBidXQgd2FyblxuICAgICAgICBzZXRTZXJ2ZXJVcmwoc2VydmVyVXJsKTtcbiAgICAgICAgc2V0QXV0aERhdGEoYXV0aFJlc3VsdC50b2tlbiwgYXV0aFJlc3VsdC5leHBpcmVzQXQsIGF1dGhSZXN1bHQuc2VjdXJpdHlNb2RlKTtcblxuICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0NvbmZpZ3VyYXRpb24gc2F2ZWQsIGJ1dCBwYXNzd29yZCByZXNldCBpcyBzdGlsbCByZXF1aXJlZC4nKTtcbiAgICAgICAgbG9nZ2VyLmRpbSgnWW91IHdpbGwgYmUgcHJvbXB0ZWQgdG8gcmVzZXQgeW91ciBwYXNzd29yZCBvbiBuZXh0IGxvZ2luLicpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTYXZlIGNvbmZpZ3VyYXRpb24gd2l0aCBhbGwgYXV0aCBkYXRhXG4gICAgICBzZXRTZXJ2ZXJVcmwoc2VydmVyVXJsKTtcbiAgICAgIHNldEF1dGhEYXRhKGF1dGhSZXN1bHQudG9rZW4sIGF1dGhSZXN1bHQuZXhwaXJlc0F0LCBhdXRoUmVzdWx0LnNlY3VyaXR5TW9kZSk7XG5cbiAgICAgIGxvZ2dlci5ibGFuaygpO1xuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoJ0NvbmZpZ3VyYXRpb24gc2F2ZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICAgIH1cblxuICAgIGxvZ2dlci5ibGFuaygpO1xuICAgIGxvZ2dlci5pbmZvKCdZb3UgY2FuIG5vdyBkZXBsb3kgcHJvamVjdHMgd2l0aDonKTtcbiAgICBsb2dnZXIuZGltKCcgIHJ1bndheSBkZXBsb3knKTtcbiAgICBsb2dnZXIuYmxhbmsoKTtcblxuICAgIC8vIFNob3cgdG9rZW4gZXhwaXJ5IHdhcm5pbmcgZm9yIEhUVFAgbW9kZVxuICAgIGlmIChhdXRoUmVzdWx0LnNlY3VyaXR5TW9kZSA9PT0gJ2lwLWh0dHAnKSB7XG4gICAgICBsb2dnZXIud2FybignTm90ZTogVG9rZW4gZXhwaXJlcyBpbiAxNSBtaW51dGVzIGR1ZSB0byBIVFRQIG1vZGUuJyk7XG4gICAgICBsb2dnZXIuZGltKCdSdW4gYHJ1bndheSBpbml0YCB0byByZS1hdXRoZW50aWNhdGUgd2hlbiBuZWVkZWQuJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIEVycm9yIGFscmVhZHkgbG9nZ2VkIGJ5IEF1dGhTZXJ2aWNlXG4gICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgbG9nZ2VyLmRpbSgnQ2hlY2sgeW91ciBjcmVkZW50aWFscyBhbmQgdHJ5IGFnYWluLicpO1xuICB9XG59XG5cbi8qKlxuICogUHJvbXB0IHVzZXIgdG8gcmVzZXQgdGhlaXIgcGFzc3dvcmRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvbXB0UGFzc3dvcmRSZXNldChcbiAgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICBjdXJyZW50UGFzc3dvcmQ6IHN0cmluZ1xuKTogUHJvbWlzZTx7IHRva2VuOiBzdHJpbmc7IGV4cGlyZXNBdDogc3RyaW5nOyBzZWN1cml0eU1vZGU6ICdpcC1odHRwJyB8ICdkb21haW4taHR0cHMnIH0gfCBudWxsPiB7XG4gIGNvbnN0IHsgcmVzZXROb3cgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAge1xuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgbmFtZTogJ3Jlc2V0Tm93JyxcbiAgICAgIG1lc3NhZ2U6ICdXb3VsZCB5b3UgbGlrZSB0byByZXNldCB5b3VyIHBhc3N3b3JkIG5vdz8nLFxuICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB9LFxuICBdKTtcblxuICBpZiAoIXJlc2V0Tm93KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBHZXQgbmV3IHBhc3N3b3JkIHdpdGggY29uZmlybWF0aW9uXG4gIGNvbnN0IG5ld1Bhc3N3b3JkQW5zd2VycyA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAge1xuICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcbiAgICAgIG5hbWU6ICduZXdQYXNzd29yZCcsXG4gICAgICBtZXNzYWdlOiAnRW50ZXIgbmV3IHBhc3N3b3JkIChtaW4uIDYgY2hhcmFjdGVycyk6JyxcbiAgICAgIHZhbGlkYXRlOiAoaW5wdXQ6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoaW5wdXQubGVuZ3RoIDwgNikge1xuICAgICAgICAgIHJldHVybiAnUGFzc3dvcmQgbXVzdCBiZSBhdCBsZWFzdCA2IGNoYXJhY3RlcnMnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6ICdwYXNzd29yZCcsXG4gICAgICBuYW1lOiAnY29uZmlybVBhc3N3b3JkJyxcbiAgICAgIG1lc3NhZ2U6ICdDb25maXJtIG5ldyBwYXNzd29yZDonLFxuICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nLCBhbnN3ZXJzOiB7IG5ld1Bhc3N3b3JkPzogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgaWYgKGlucHV0ICE9PSBhbnN3ZXJzPy5uZXdQYXNzd29yZCkge1xuICAgICAgICAgIHJldHVybiAnUGFzc3dvcmRzIGRvIG5vdCBtYXRjaCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LFxuICAgIH0sXG4gIF0pO1xuXG4gIGxvZ2dlci5pbmZvKCdVcGRhdGluZyBwYXNzd29yZC4uLicpO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc2V0UmVzdWx0ID0gYXdhaXQgYXV0aFNlcnZpY2UucmVzZXRQYXNzd29yZChcbiAgICAgIGN1cnJlbnRQYXNzd29yZCxcbiAgICAgIG5ld1Bhc3N3b3JkQW5zd2Vycy5uZXdQYXNzd29yZFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW46IHJlc2V0UmVzdWx0LnRva2VuLFxuICAgICAgZXhwaXJlc0F0OiByZXNldFJlc3VsdC5leHBpcmVzQXQsXG4gICAgICBzZWN1cml0eU1vZGU6IHJlc2V0UmVzdWx0LnNlY3VyaXR5TW9kZSxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlc2V0IHBhc3N3b3JkLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLicpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogTGVnYWN5IGF1dGhlbnRpY2F0aW9uIGZvciBzZXJ2ZXJzIHdpdGhvdXQgQ0xJIGF1dGggc3VwcG9ydFxuICovXG5hc3luYyBmdW5jdGlvbiBsZWdhY3lBdXRoKHNlcnZlclVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNyZWRlbnRpYWxzID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcbiAgICAgIG1lc3NhZ2U6ICdVc2VybmFtZTonLFxuICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiBpbnB1dC5sZW5ndGggPiAwIHx8ICdVc2VybmFtZSBpcyByZXF1aXJlZCcsXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiAncGFzc3dvcmQnLFxuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcbiAgICAgIG1lc3NhZ2U6ICdQYXNzd29yZDonLFxuICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiBpbnB1dC5sZW5ndGggPiAwIHx8ICdQYXNzd29yZCBpcyByZXF1aXJlZCcsXG4gICAgfSxcbiAgXSk7XG5cbiAgbG9nZ2VyLmluZm8oJ0F1dGhlbnRpY2F0aW5nLi4uJyk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KFxuICAgICAgYCR7c2VydmVyVXJsfS9hcGkvYXV0aC9sb2dpbmAsXG4gICAgICBjcmVkZW50aWFscyxcbiAgICAgIHsgdGltZW91dDogMTAwMDAgfVxuICAgICk7XG5cbiAgICBpZiAocmVzcG9uc2UuZGF0YS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGE/LnRva2VuKSB7XG4gICAgICAvLyBTYXZlIGNvbmZpZ3VyYXRpb24gKGxlZ2FjeSBtb2RlIHdpdGhvdXQgZXhwaXJ5IHRyYWNraW5nKVxuICAgICAgc2V0U2VydmVyVXJsKHNlcnZlclVybCk7XG4gICAgICBzZXRBdXRoRGF0YShyZXNwb25zZS5kYXRhLnRva2VuLCAnJywgJ2lwLWh0dHAnKTtcblxuICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICBsb2dnZXIuc3VjY2VzcygnQ29uZmlndXJhdGlvbiBzYXZlZCBzdWNjZXNzZnVsbHkhJyk7XG4gICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgIGxvZ2dlci5pbmZvKCdZb3UgY2FuIG5vdyBkZXBsb3kgcHJvamVjdHMgd2l0aDonKTtcbiAgICAgIGxvZ2dlci5kaW0oJyAgcnVud2F5IGRlcGxveScpO1xuICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5lcnJvcignQXV0aGVudGljYXRpb24gZmFpbGVkOiAnICsgKHJlc3BvbnNlLmRhdGEuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InKSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChheGlvcy5pc0F4aW9zRXJyb3IoZXJyb3IpKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZDogJyArIChlcnJvci5yZXNwb25zZT8uZGF0YT8uZXJyb3IgfHwgZXJyb3IubWVzc2FnZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZDogJyArIChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJykpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1 @@
1
+ export declare function loginCommand(): Promise<void>;
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loginCommand = loginCommand;
7
+ const inquirer_1 = __importDefault(require("inquirer"));
8
+ const config_1 = require("../utils/config");
9
+ const logger_1 = require("../utils/logger");
10
+ const authService_1 = require("../services/authService");
11
+ async function loginCommand() {
12
+ logger_1.logger.header('Runway Login');
13
+ // Check if init has been run (we need a server URL at minimum)
14
+ const config = (0, config_1.getConfig)();
15
+ if (!config.serverUrl) {
16
+ logger_1.logger.error('CLI not configured. Run "runway init" first to set up your server URL.');
17
+ return;
18
+ }
19
+ logger_1.logger.dim(`Server: ${config.serverUrl}`);
20
+ logger_1.logger.blank();
21
+ // Initialize auth service
22
+ const authService = new authService_1.AuthService(config.serverUrl);
23
+ // Check security mode
24
+ let securityInfo;
25
+ try {
26
+ securityInfo = await authService.getSecurityMode();
27
+ }
28
+ catch (error) {
29
+ logger_1.logger.error('Failed to connect to server. Make sure it is running.');
30
+ return;
31
+ }
32
+ if (securityInfo.securityMode === 'domain-https') {
33
+ logger_1.logger.success(`Server has HTTPS enabled: ${securityInfo.domain}`);
34
+ }
35
+ else {
36
+ logger_1.logger.warn('Server is running in HTTP mode.');
37
+ }
38
+ // Get credentials
39
+ logger_1.logger.blank();
40
+ const credentials = await inquirer_1.default.prompt([
41
+ {
42
+ type: 'input',
43
+ name: 'username',
44
+ message: 'Username:',
45
+ validate: (input) => input.length > 0 || 'Username is required',
46
+ },
47
+ {
48
+ type: 'password',
49
+ name: 'password',
50
+ message: 'Password:',
51
+ validate: (input) => input.length > 0 || 'Password is required',
52
+ },
53
+ ]);
54
+ // Authenticate
55
+ logger_1.logger.info('Authenticating...');
56
+ try {
57
+ const authResult = await authService.authenticate(credentials.username, credentials.password);
58
+ // Save new auth data (keep existing server URL)
59
+ (0, config_1.setAuthData)(authResult.token, authResult.expiresAt, authResult.securityMode);
60
+ logger_1.logger.blank();
61
+ logger_1.logger.success('Authentication successful! Token updated.');
62
+ // Show token expiry warning for HTTP mode
63
+ if (authResult.securityMode === 'ip-http') {
64
+ logger_1.logger.warn('Note: Token expires in 15 minutes due to HTTP mode.');
65
+ }
66
+ }
67
+ catch (error) {
68
+ logger_1.logger.blank();
69
+ logger_1.logger.dim('Check your credentials and try again.');
70
+ }
71
+ logger_1.logger.blank();
72
+ }
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvbG9naW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFLQSxvQ0F3RUM7QUE3RUQsd0RBQWdDO0FBQ2hDLDRDQUF1RTtBQUN2RSw0Q0FBeUM7QUFDekMseURBQXNEO0FBRS9DLEtBQUssVUFBVSxZQUFZO0lBQ2hDLGVBQU0sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFFOUIsK0RBQStEO0lBQy9ELE1BQU0sTUFBTSxHQUFHLElBQUEsa0JBQVMsR0FBRSxDQUFDO0lBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEIsZUFBTSxDQUFDLEtBQUssQ0FBQyx3RUFBd0UsQ0FBQyxDQUFDO1FBQ3ZGLE9BQU87SUFDVCxDQUFDO0lBRUQsZUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUVmLDBCQUEwQjtJQUMxQixNQUFNLFdBQVcsR0FBRyxJQUFJLHlCQUFXLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRXRELHNCQUFzQjtJQUN0QixJQUFJLFlBQVksQ0FBQztJQUNqQixJQUFJLENBQUM7UUFDSCxZQUFZLEdBQUcsTUFBTSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixlQUFNLENBQUMsS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7UUFDdEUsT0FBTztJQUNULENBQUM7SUFFRCxJQUFJLFlBQVksQ0FBQyxZQUFZLEtBQUssY0FBYyxFQUFFLENBQUM7UUFDakQsZUFBTSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDckUsQ0FBQztTQUFNLENBQUM7UUFDTixlQUFNLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixNQUFNLFdBQVcsR0FBRyxNQUFNLGtCQUFRLENBQUMsTUFBTSxDQUFDO1FBQ3hDO1lBQ0UsSUFBSSxFQUFFLE9BQU87WUFDYixJQUFJLEVBQUUsVUFBVTtZQUNoQixPQUFPLEVBQUUsV0FBVztZQUNwQixRQUFRLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLHNCQUFzQjtTQUN4RTtRQUNEO1lBQ0UsSUFBSSxFQUFFLFVBQVU7WUFDaEIsSUFBSSxFQUFFLFVBQVU7WUFDaEIsT0FBTyxFQUFFLFdBQVc7WUFDcEIsUUFBUSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxzQkFBc0I7U0FDeEU7S0FDRixDQUFDLENBQUM7SUFFSCxlQUFlO0lBQ2YsZUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQztRQUNILE1BQU0sVUFBVSxHQUFHLE1BQU0sV0FBVyxDQUFDLFlBQVksQ0FDL0MsV0FBVyxDQUFDLFFBQVEsRUFDcEIsV0FBVyxDQUFDLFFBQVEsQ0FDckIsQ0FBQztRQUVGLGdEQUFnRDtRQUNoRCxJQUFBLG9CQUFXLEVBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU3RSxlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZixlQUFNLENBQUMsT0FBTyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7UUFFNUQsMENBQTBDO1FBQzFDLElBQUksVUFBVSxDQUFDLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMxQyxlQUFNLENBQUMsSUFBSSxDQUFDLHFEQUFxRCxDQUFDLENBQUM7UUFDckUsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsZUFBTSxDQUFDLEdBQUcsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbnF1aXJlciBmcm9tICdpbnF1aXJlcic7XG5pbXBvcnQgeyBnZXRDb25maWcsIHNldEF1dGhEYXRhLCBpc0NvbmZpZ3VyZWQgfSBmcm9tICcuLi91dGlscy9jb25maWcnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXV0aFNlcnZpY2UnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9naW5Db21tYW5kKCk6IFByb21pc2U8dm9pZD4ge1xuICBsb2dnZXIuaGVhZGVyKCdSdW53YXkgTG9naW4nKTtcblxuICAvLyBDaGVjayBpZiBpbml0IGhhcyBiZWVuIHJ1biAod2UgbmVlZCBhIHNlcnZlciBVUkwgYXQgbWluaW11bSlcbiAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gIGlmICghY29uZmlnLnNlcnZlclVybCkge1xuICAgIGxvZ2dlci5lcnJvcignQ0xJIG5vdCBjb25maWd1cmVkLiBSdW4gXCJydW53YXkgaW5pdFwiIGZpcnN0IHRvIHNldCB1cCB5b3VyIHNlcnZlciBVUkwuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nZ2VyLmRpbShgU2VydmVyOiAke2NvbmZpZy5zZXJ2ZXJVcmx9YCk7XG4gIGxvZ2dlci5ibGFuaygpO1xuXG4gIC8vIEluaXRpYWxpemUgYXV0aCBzZXJ2aWNlXG4gIGNvbnN0IGF1dGhTZXJ2aWNlID0gbmV3IEF1dGhTZXJ2aWNlKGNvbmZpZy5zZXJ2ZXJVcmwpO1xuXG4gIC8vIENoZWNrIHNlY3VyaXR5IG1vZGVcbiAgbGV0IHNlY3VyaXR5SW5mbztcbiAgdHJ5IHtcbiAgICBzZWN1cml0eUluZm8gPSBhd2FpdCBhdXRoU2VydmljZS5nZXRTZWN1cml0eU1vZGUoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBjb25uZWN0IHRvIHNlcnZlci4gTWFrZSBzdXJlIGl0IGlzIHJ1bm5pbmcuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHNlY3VyaXR5SW5mby5zZWN1cml0eU1vZGUgPT09ICdkb21haW4taHR0cHMnKSB7XG4gICAgbG9nZ2VyLnN1Y2Nlc3MoYFNlcnZlciBoYXMgSFRUUFMgZW5hYmxlZDogJHtzZWN1cml0eUluZm8uZG9tYWlufWApO1xuICB9IGVsc2Uge1xuICAgIGxvZ2dlci53YXJuKCdTZXJ2ZXIgaXMgcnVubmluZyBpbiBIVFRQIG1vZGUuJyk7XG4gIH1cblxuICAvLyBHZXQgY3JlZGVudGlhbHNcbiAgbG9nZ2VyLmJsYW5rKCk7XG4gIGNvbnN0IGNyZWRlbnRpYWxzID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcbiAgICAgIG1lc3NhZ2U6ICdVc2VybmFtZTonLFxuICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiBpbnB1dC5sZW5ndGggPiAwIHx8ICdVc2VybmFtZSBpcyByZXF1aXJlZCcsXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiAncGFzc3dvcmQnLFxuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcbiAgICAgIG1lc3NhZ2U6ICdQYXNzd29yZDonLFxuICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiBpbnB1dC5sZW5ndGggPiAwIHx8ICdQYXNzd29yZCBpcyByZXF1aXJlZCcsXG4gICAgfSxcbiAgXSk7XG5cbiAgLy8gQXV0aGVudGljYXRlXG4gIGxvZ2dlci5pbmZvKCdBdXRoZW50aWNhdGluZy4uLicpO1xuICB0cnkge1xuICAgIGNvbnN0IGF1dGhSZXN1bHQgPSBhd2FpdCBhdXRoU2VydmljZS5hdXRoZW50aWNhdGUoXG4gICAgICBjcmVkZW50aWFscy51c2VybmFtZSxcbiAgICAgIGNyZWRlbnRpYWxzLnBhc3N3b3JkXG4gICAgKTtcblxuICAgIC8vIFNhdmUgbmV3IGF1dGggZGF0YSAoa2VlcCBleGlzdGluZyBzZXJ2ZXIgVVJMKVxuICAgIHNldEF1dGhEYXRhKGF1dGhSZXN1bHQudG9rZW4sIGF1dGhSZXN1bHQuZXhwaXJlc0F0LCBhdXRoUmVzdWx0LnNlY3VyaXR5TW9kZSk7XG5cbiAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICBsb2dnZXIuc3VjY2VzcygnQXV0aGVudGljYXRpb24gc3VjY2Vzc2Z1bCEgVG9rZW4gdXBkYXRlZC4nKTtcblxuICAgIC8vIFNob3cgdG9rZW4gZXhwaXJ5IHdhcm5pbmcgZm9yIEhUVFAgbW9kZVxuICAgIGlmIChhdXRoUmVzdWx0LnNlY3VyaXR5TW9kZSA9PT0gJ2lwLWh0dHAnKSB7XG4gICAgICBsb2dnZXIud2FybignTm90ZTogVG9rZW4gZXhwaXJlcyBpbiAxNSBtaW51dGVzIGR1ZSB0byBIVFRQIG1vZGUuJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5ibGFuaygpO1xuICAgIGxvZ2dlci5kaW0oJ0NoZWNrIHlvdXIgY3JlZGVudGlhbHMgYW5kIHRyeSBhZ2Fpbi4nKTtcbiAgfVxuXG4gIGxvZ2dlci5ibGFuaygpO1xufVxuIl19
@@ -0,0 +1,6 @@
1
+ interface LogsOptions {
2
+ lines?: string;
3
+ type?: string;
4
+ }
5
+ export declare function logsCommand(project?: string, options?: LogsOptions): Promise<void>;
6
+ export {};