runway-cli 1.3.1 → 1.4.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.
@@ -293,23 +293,37 @@ async function deployCommand(options) {
293
293
  let buildOutputDir = detectedProject.buildOutputDir;
294
294
  if (buildMode === 'local') {
295
295
  logger_1.logger.step(1, 4, 'Building project...');
296
- // Patch React Router basename before build (if applicable)
297
- let didPatch = false;
296
+ // Patch framework configs before build (inject basePath for subpath routing)
297
+ let didPatchReact = false;
298
+ let didPatchNext = false;
298
299
  if (projectType === 'react') {
299
300
  const { ReactPatcher } = await Promise.resolve().then(() => __importStar(require('../services/reactPatcher')));
300
- didPatch = await ReactPatcher.patch(process.cwd());
301
+ didPatchReact = await ReactPatcher.patch(process.cwd());
301
302
  }
302
- const buildResult = await buildService_1.buildService.build({
303
- projectPath: process.cwd(),
304
- projectType,
305
- projectName,
306
- packageManager: detectedProject.packageManager,
307
- envFile: envFilePath,
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());
303
+ else if (projectType === 'next') {
304
+ const { NextPatcher } = await Promise.resolve().then(() => __importStar(require('../services/nextPatcher')));
305
+ didPatchNext = await NextPatcher.patch(process.cwd(), projectName);
306
+ }
307
+ let buildResult;
308
+ try {
309
+ buildResult = await buildService_1.buildService.build({
310
+ projectPath: process.cwd(),
311
+ projectType,
312
+ projectName,
313
+ packageManager: detectedProject.packageManager,
314
+ envFile: envFilePath,
315
+ });
316
+ }
317
+ finally {
318
+ // Always revert patches after build (keep user's source clean)
319
+ if (didPatchReact) {
320
+ const { ReactPatcher } = await Promise.resolve().then(() => __importStar(require('../services/reactPatcher')));
321
+ await ReactPatcher.revert(process.cwd());
322
+ }
323
+ if (didPatchNext) {
324
+ const { NextPatcher } = await Promise.resolve().then(() => __importStar(require('../services/nextPatcher')));
325
+ await NextPatcher.revert(process.cwd());
326
+ }
313
327
  }
314
328
  if (!buildResult.success) {
315
329
  logger_1.logger.error(`Build failed: ${buildResult.error}`);
@@ -458,10 +472,26 @@ async function deployCommand(options) {
458
472
  }
459
473
  }
460
474
  else {
475
+ // No deploymentId means synchronous deploy (prebuilt) — already complete
461
476
  logger_1.logger.blank();
462
- logger_1.logger.success('Upload successful!');
463
- logger_1.logger.dim('Deployment is being processed. Check the web UI for status.');
477
+ logger_1.logger.success('Deployment successful!');
478
+ const safeName = projectName.toLowerCase().replace(/[^a-z0-9]/g, '-');
479
+ try {
480
+ const domainResponse = await axios_1.default.get(`${config.serverUrl}/api/domain`, {
481
+ headers: config.token ? { Authorization: `Bearer ${config.token}` } : {},
482
+ });
483
+ const domainConfig = domainResponse.data;
484
+ if (domainConfig.domain?.active && domainConfig.securityMode === 'domain-https') {
485
+ logger_1.logger.info(`Your app is available at: https://${domainConfig.domain.domain}/app/${safeName}`);
486
+ }
487
+ else {
488
+ logger_1.logger.info(`Your app is available at: ${config.serverUrl}/app/${safeName}`);
489
+ }
490
+ }
491
+ catch {
492
+ logger_1.logger.info(`Your app is available at: ${config.serverUrl}/app/${safeName}`);
493
+ }
464
494
  }
465
495
  logger_1.logger.blank();
466
496
  }
467
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2RlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlJQSxzQ0ErVkM7QUF4ZUQsd0RBQWdDO0FBQ2hDLDhDQUFzQjtBQUN0Qiw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLGtEQUEwQjtBQUUxQixpRUFBNEQ7QUFDNUQsMkRBQXdEO0FBQ3hELCtEQUE0RDtBQUM1RCw2REFBZ0U7QUFDaEUsNENBQTBFO0FBQzFFLDRDQUF5QztBQVl6Qzs7R0FFRztBQUNILFNBQVMsWUFBWSxDQUFDLFFBQWdCO0lBQ3BDLE1BQU0sT0FBTyxHQUFHLFlBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25ELE1BQU0sSUFBSSxHQUEyQixFQUFFLENBQUM7SUFFeEMsS0FBSyxNQUFNLElBQUksSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzVCLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1lBQUUsU0FBUztRQUVsRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdDLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzlDLHVDQUF1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QVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDOUIsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNmLGVBQU0sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGVBQU0sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLFdBQVcsQ0FBQyxLQUFLLElBQUksZUFBZSxFQUFFLENBQUMsQ0FBQztnQkFDM0UsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3JCLGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDZixlQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDaEMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLGVBQU0sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLENBQUMsQ0FBQztZQUNqRCxlQUFNLENBQUMsR0FBRyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUM7U0FBTSxDQUFDO1FBQ04sZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsZUFBTSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3JDLGVBQU0sQ0FBQyxHQUFHLENBQUMsNkRBQTZELENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5xdWlyZXIgZnJvbSAnaW5xdWlyZXInO1xuaW1wb3J0IG9yYSBmcm9tICdvcmEnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IFByb2plY3RUeXBlLCBCdWlsZE1vZGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBkZXRlY3RQcm9qZWN0IH0gZnJvbSAnLi4vc2VydmljZXMvcHJvamVjdERldGVjdG9yJztcbmltcG9ydCB7IGJ1aWxkU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2J1aWxkU2VydmljZSc7XG5pbXBvcnQgeyBwYWNrYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3BhY2thZ2VTZXJ2aWNlJztcbmltcG9ydCB7IGNyZWF0ZVVwbG9hZFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy91cGxvYWRTZXJ2aWNlJztcbmltcG9ydCB7IGlzQ29uZmlndXJlZCwgZ2V0Q29uZmlnLCBpc1Rva2VuRXhwaXJlZCB9IGZyb20gJy4uL3V0aWxzL2NvbmZpZyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXInO1xuXG5pbnRlcmZhY2UgRGVwbG95T3B0aW9ucyB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBQcm9qZWN0VHlwZTtcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgYnVpbGRMb2NhbD86IGJvb2xlYW47XG4gIGJ1aWxkU2VydmVyPzogYm9vbGVhbjtcbiAgZW52RmlsZT86IHN0cmluZztcbiAgc2tpcEVudlByb21wdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyc2UgYSAuZW52IGZpbGUgaW50byBhIFJlY29yZFxuICovXG5mdW5jdGlvbiBwYXJzZUVudkZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGZvciAoY29uc3QgbGluZSBvZiBjb250ZW50LnNwbGl0KCdcXG4nKSkge1xuICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcbiAgICAvLyBTa2lwIGVtcHR5IGxpbmVzIGFuZCBjb21tZW50c1xuICAgIGlmICghdHJpbW1lZCB8fCB0cmltbWVkLnN0YXJ0c1dpdGgoJyMnKSkgY29udGludWU7XG5cbiAgICBjb25zdCBlcUluZGV4ID0gdHJpbW1lZC5pbmRleE9mKCc9Jyk7XG4gICAgaWYgKGVxSW5kZXggPiAwKSB7XG4gICAgICBjb25zdCBrZXkgPSB0cmltbWVkLnNsaWNlKDAsIGVxSW5kZXgpLnRyaW0oKTtcbiAgICAgIGxldCB2YWx1ZSA9IHRyaW1tZWQuc2xpY2UoZXFJbmRleCArIDEpLnRyaW0oKTtcbiAgICAgIC8vIFJlbW92ZSBzdXJyb3VuZGluZyBxdW90ZXMgaWYgcHJlc2VudFxuICAgICAgaWYgKCh2YWx1ZS5zdGFydHNXaXRoKCdcIicpICYmIHZhbHVlLmVuZHNXaXRoKCdcIicpKSB8fFxuICAgICAgICAgICh2YWx1ZS5zdGFydHNXaXRoKFwiJ1wiKSAmJiB2YWx1ZS5lbmRzV2l0aChcIidcIikpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSwgLTEpO1xuICAgICAgfVxuICAgICAgdmFyc1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhcnM7XG59XG5cbi8qKlxuICogUHJvbXB0IHVzZXIgZm9yIG1hbnVhbCBFTlYgdmFyaWFibGUgZW50cnlcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvbXB0TWFudWFsRW52VmFycygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGxvZ2dlci5kaW0oJ0VudGVyIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZW1wdHkgbmFtZSB0byBmaW5pc2gpOicpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeyBrZXkgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICdrZXknLFxuICAgICAgICBtZXNzYWdlOiAnVmFyaWFibGUgbmFtZTonLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIGlmICgha2V5IHx8ICFrZXkudHJpbSgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb25zdCB7IHZhbHVlIH0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICBtZXNzYWdlOiBgVmFsdWUgZm9yICR7a2V5fTpgLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIHZhcnNba2V5LnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvW15BLVowLTlfXS9nLCAnJyldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdmFycztcbn1cblxuLyoqXG4gKiBQcm9tcHQgdXNlciBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgb3B0aW9ucyB3aGVuIG5vIC5lbnYgZmlsZSBleGlzdHNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvbXB0RW52T3B0aW9ucygpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IGVudkNob2ljZSB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBuYW1lOiAnZW52Q2hvaWNlJyxcbiAgICAgIG1lc3NhZ2U6ICdIb3cgd291bGQgeW91IGxpa2UgdG8gcHJvdmlkZSBlbnZpcm9ubWVudCB2YXJpYWJsZXM/JyxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgeyBuYW1lOiAnU3BlY2lmeSBwYXRoIHRvIC5lbnYgZmlsZScsIHZhbHVlOiAncGF0aCcgfSxcbiAgICAgICAgeyBuYW1lOiAnRW50ZXIgdmFyaWFibGVzIG1hbnVhbGx5IChjcmVhdGVzIC5lbnYpJywgdmFsdWU6ICdtYW51YWwnIH0sXG4gICAgICAgIHsgbmFtZTogJ0NvbnRpbnVlIHdpdGhvdXQgZW52aXJvbm1lbnQgdmFyaWFibGVzJywgdmFsdWU6ICdza2lwJyB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdKTtcblxuICBpZiAoZW52Q2hvaWNlID09PSAncGF0aCcpIHtcbiAgICBjb25zdCB7IGVudlBhdGggfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICdlbnZQYXRoJyxcbiAgICAgICAgbWVzc2FnZTogJ1BhdGggdG8gZW52IGZpbGU6JyxcbiAgICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKCFpbnB1dC50cmltKCkpIHJldHVybiAnUGxlYXNlIGVudGVyIGEgcGF0aCc7XG4gICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGlucHV0KSkgcmV0dXJuICdGaWxlIG5vdCBmb3VuZCc7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICAgIGxvZ2dlci5zdWNjZXNzKGBVc2luZyBlbnYgZmlsZTogJHtlbnZQYXRofWApO1xuICAgIHJldHVybiBlbnZQYXRoO1xuICB9XG5cbiAgaWYgKGVudkNob2ljZSA9PT0gJ21hbnVhbCcpIHtcbiAgICBjb25zdCB2YXJzID0gYXdhaXQgcHJvbXB0TWFudWFsRW52VmFycygpO1xuICAgIGlmIChPYmplY3Qua2V5cyh2YXJzKS5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBXcml0ZSB0byAuZW52IGZpbGUgaW4gcHJvamVjdFxuICAgICAgY29uc3QgZW52Q29udGVudCA9IE9iamVjdC5lbnRyaWVzKHZhcnMpXG4gICAgICAgIC5tYXAoKFtrLCB2XSkgPT4gYCR7a309JHt2fWApXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgIGNvbnN0IGVudlBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJy5lbnYnKTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoZW52UGF0aCwgZW52Q29udGVudCk7XG4gICAgICBsb2dnZXIuc3VjY2VzcyhgQ3JlYXRlZCAuZW52IHdpdGggJHtPYmplY3Qua2V5cyh2YXJzKS5sZW5ndGh9IHZhcmlhYmxlc2ApO1xuICAgICAgcmV0dXJuIGVudlBhdGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlcGxveUNvbW1hbmQob3B0aW9uczogRGVwbG95T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBsb2dnZXIuaGVhZGVyKCdSdW53YXkgRGVwbG95Jyk7XG5cbiAgLy8gQ2hlY2sgY29uZmlndXJhdGlvblxuICBpZiAoIWlzQ29uZmlndXJlZCgpKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdDTEkgbm90IGNvbmZpZ3VyZWQuIFJ1biBcInJ1bndheSBpbml0XCIgZmlyc3QuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQ2hlY2sgdG9rZW4gdmFsaWRpdHkgYmVmb3JlIHByb2NlZWRpbmdcbiAgaWYgKGlzVG9rZW5FeHBpcmVkKCkpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ1lvdXIgYXV0aGVudGljYXRpb24gdG9rZW4gaGFzIGV4cGlyZWQuJyk7XG4gICAgbG9nZ2VyLmluZm8oJ1J1biBcInJ1bndheSBsb2dpblwiIHRvIHJlLWF1dGhlbnRpY2F0ZS4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgbG9nZ2VyLmRpbShgU2VydmVyOiAke2NvbmZpZy5zZXJ2ZXJVcmx9YCk7XG4gIGxvZ2dlci5ibGFuaygpO1xuXG4gIC8vIERldGVjdCBwcm9qZWN0XG4gIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ0RldGVjdGluZyBwcm9qZWN0Li4uJykuc3RhcnQoKTtcbiAgbGV0IGRldGVjdGVkUHJvamVjdDtcblxuICB0cnkge1xuICAgIGRldGVjdGVkUHJvamVjdCA9IGF3YWl0IGRldGVjdFByb2plY3QoKTtcbiAgICBzcGlubmVyLnN1Y2NlZWQoYERldGVjdGVkOiAke2RldGVjdGVkUHJvamVjdC50eXBlfSBwcm9qZWN0ICgke2RldGVjdGVkUHJvamVjdC5wYWNrYWdlTWFuYWdlcn0pYCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gZGV0ZWN0IHByb2plY3QnKTtcbiAgICBsb2dnZXIuZXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERldGVybWluZSBwcm9qZWN0IG5hbWUg4oCUIHNhbml0aXplIGZyb20gcGFja2FnZS5qc29uXG4gIGNvbnN0IHN1Z2dlc3RlZE5hbWUgPSAoZGV0ZWN0ZWRQcm9qZWN0Lm5hbWUgfHwgcGF0aC5iYXNlbmFtZShwcm9jZXNzLmN3ZCgpKSlcbiAgICAucmVwbGFjZSgvXkBbXi9dK1xcLy8sICcnKSAgICAgICAgLy8gUmVtb3ZlIG5wbSBzY29wZSAoQHNjb3BlL25hbWUg4oaSIG5hbWUpXG4gICAgLnJlcGxhY2UoL1teYS16QS1aMC05LV9dL2csICctJykgIC8vIFJlcGxhY2UgaW52YWxpZCBjaGFycyB3aXRoIGh5cGhlbnNcbiAgICAucmVwbGFjZSgvXi0rfC0rJC9nLCAnJykgICAgICAgICAgLy8gVHJpbSBsZWFkaW5nL3RyYWlsaW5nIGh5cGhlbnNcbiAgICAudG9Mb3dlckNhc2UoKTtcbiAgbGV0IHByb2plY3ROYW1lID0gb3B0aW9ucy5uYW1lIHx8IHN1Z2dlc3RlZE5hbWU7XG5cbiAgLy8gSW50ZXJhY3RpdmUgbW9kZSBpZiBuYW1lIG5vdCBwcm92aWRlZFxuICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgIGNvbnN0IGFuc3dlcnMgPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgIG1lc3NhZ2U6ICdQcm9qZWN0IG5hbWU6JyxcbiAgICAgICAgZGVmYXVsdDogcHJvamVjdE5hbWUsXG4gICAgICAgIHZhbGlkYXRlOiAoaW5wdXQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPCAyKSByZXR1cm4gJ05hbWUgbXVzdCBiZSBhdCBsZWFzdCAyIGNoYXJhY3RlcnMnO1xuICAgICAgICAgIGlmICghL15bYS16QS1aMC05LV9dKyQvLnRlc3QoaW5wdXQpKSByZXR1cm4gJ05hbWUgY2FuIG9ubHkgY29udGFpbiBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW5zLCBhbmQgdW5kZXJzY29yZXMnO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgICBwcm9qZWN0TmFtZSA9IGFuc3dlcnMubmFtZTtcbiAgfVxuXG4gIC8vIEFzayBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHJlcXVpcmVkXG4gIGNvbnN0IHsgbmVlZHNFbnYgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAge1xuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgbmFtZTogJ25lZWRzRW52JyxcbiAgICAgIG1lc3NhZ2U6ICdEb2VzIHRoaXMgcHJvamVjdCByZXF1aXJlIGVudmlyb25tZW50IHZhcmlhYmxlcz8nLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgfSxcbiAgXSk7XG5cbiAgbGV0IGVudkZpbGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGxldCBlbnZWYXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGxldCBlbnZJbmplY3RlZCA9IGZhbHNlO1xuXG4gIGlmIChuZWVkc0Vudikge1xuICAgIGNvbnN0IGRlZmF1bHRFbnZQYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICcuZW52Jyk7XG4gICAgY29uc3QgaGFzRW52RmlsZSA9IGZzLmV4aXN0c1N5bmMoZGVmYXVsdEVudlBhdGgpO1xuXG4gICAgaWYgKGhhc0VudkZpbGUpIHtcbiAgICAgIC8vIC5lbnYgZm91bmQgLSBjb25maXJtIHdpdGggdXNlclxuICAgICAgY29uc3QgeyB1c2VFeGlzdGluZyB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgICAgICBuYW1lOiAndXNlRXhpc3RpbmcnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdGb3VuZCAuZW52IGZpbGUgaW4gcHJvamVjdC4gVXNlIGl0PycsXG4gICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuXG4gICAgICBpZiAodXNlRXhpc3RpbmcpIHtcbiAgICAgICAgZW52RmlsZVBhdGggPSBkZWZhdWx0RW52UGF0aDtcbiAgICAgICAgZW52VmFycyA9IHBhcnNlRW52RmlsZShkZWZhdWx0RW52UGF0aCk7XG4gICAgICAgIGVudkluamVjdGVkID0gT2JqZWN0LmtleXMoZW52VmFycykubGVuZ3RoID4gMDtcbiAgICAgICAgbG9nZ2VyLnN1Y2Nlc3MoYExvYWRlZCAke09iamVjdC5rZXlzKGVudlZhcnMpLmxlbmd0aH0gdmFyaWFibGVzIGZyb20gLmVudmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVXNlciBkZWNsaW5lZCBleGlzdGluZyAuZW52IC0gc2hvdyBvdGhlciBvcHRpb25zXG4gICAgICAgIGVudkZpbGVQYXRoID0gYXdhaXQgcHJvbXB0RW52T3B0aW9ucygpO1xuICAgICAgICBpZiAoZW52RmlsZVBhdGgpIHtcbiAgICAgICAgICBlbnZWYXJzID0gcGFyc2VFbnZGaWxlKGVudkZpbGVQYXRoKTtcbiAgICAgICAgICBlbnZJbmplY3RlZCA9IE9iamVjdC5rZXlzKGVudlZhcnMpLmxlbmd0aCA+IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gLmVudiBmb3VuZCAtIHNob3cgb3B0aW9uc1xuICAgICAgbG9nZ2VyLndhcm4oJ05vIC5lbnYgZmlsZSBmb3VuZCBpbiBwcm9qZWN0IGRpcmVjdG9yeS4nKTtcbiAgICAgIGVudkZpbGVQYXRoID0gYXdhaXQgcHJvbXB0RW52T3B0aW9ucygpO1xuICAgICAgaWYgKGVudkZpbGVQYXRoKSB7XG4gICAgICAgIGVudlZhcnMgPSBwYXJzZUVudkZpbGUoZW52RmlsZVBhdGgpO1xuICAgICAgICBlbnZJbmplY3RlZCA9IE9iamVjdC5rZXlzKGVudlZhcnMpLmxlbmd0aCA+IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRGV0ZXJtaW5lIHByb2plY3QgdHlwZVxuICBjb25zdCBwcm9qZWN0VHlwZSA9IG9wdGlvbnMudHlwZSB8fCBkZXRlY3RlZFByb2plY3QudHlwZTtcblxuICAvLyBEZXRlcm1pbmUgYnVpbGQgbW9kZVxuICBsZXQgYnVpbGRNb2RlOiBCdWlsZE1vZGU7XG4gIGlmIChvcHRpb25zLmJ1aWxkU2VydmVyKSB7XG4gICAgYnVpbGRNb2RlID0gJ3NlcnZlcic7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5idWlsZExvY2FsKSB7XG4gICAgYnVpbGRNb2RlID0gJ2xvY2FsJztcbiAgfSBlbHNlIHtcbiAgICBidWlsZE1vZGUgPSBjb25maWcuZGVmYXVsdEJ1aWxkTW9kZSB8fCAnbG9jYWwnO1xuICB9XG5cbiAgbG9nZ2VyLmJsYW5rKCk7XG4gIGxvZ2dlci5pbmZvKGBQcm9qZWN0OiAke3Byb2plY3ROYW1lfWApO1xuICBsb2dnZXIuaW5mbyhgVHlwZTogJHtwcm9qZWN0VHlwZX1gKTtcbiAgbG9nZ2VyLmluZm8oYEJ1aWxkIG1vZGU6ICR7YnVpbGRNb2RlfWApO1xuICBpZiAob3B0aW9ucy52ZXJzaW9uKSB7XG4gICAgbG9nZ2VyLmluZm8oYFZlcnNpb246ICR7b3B0aW9ucy52ZXJzaW9ufWApO1xuICB9XG4gIGxvZ2dlci5ibGFuaygpO1xuXG4gIC8vIENvbmZpcm0gZGVwbG95bWVudFxuICBjb25zdCB7IGNvbmZpcm0gfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAge1xuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgbmFtZTogJ2NvbmZpcm0nLFxuICAgICAgbWVzc2FnZTogJ1Byb2NlZWQgd2l0aCBkZXBsb3ltZW50PycsXG4gICAgICBkZWZhdWx0OiB0cnVlLFxuICAgIH0sXG4gIF0pO1xuXG4gIGlmICghY29uZmlybSkge1xuICAgIGxvZ2dlci53YXJuKCdEZXBsb3ltZW50IGNhbmNlbGxlZC4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuYmxhbmsoKTtcblxuICAvLyBTdGVwIDE6IEJ1aWxkIChmb3IgbG9jYWwtYnVpbGQgbW9kZSlcbiAgbGV0IGJ1aWxkT3V0cHV0RGlyID0gZGV0ZWN0ZWRQcm9qZWN0LmJ1aWxkT3V0cHV0RGlyO1xuXG4gIGlmIChidWlsZE1vZGUgPT09ICdsb2NhbCcpIHtcbiAgICBsb2dnZXIuc3RlcCgxLCA0LCAnQnVpbGRpbmcgcHJvamVjdC4uLicpO1xuXG4gICAgLy8gUGF0Y2ggUmVhY3QgUm91dGVyIGJhc2VuYW1lIGJlZm9yZSBidWlsZCAoaWYgYXBwbGljYWJsZSlcbiAgICBsZXQgZGlkUGF0Y2ggPSBmYWxzZTtcbiAgICBpZiAocHJvamVjdFR5cGUgPT09ICdyZWFjdCcpIHtcbiAgICAgIGNvbnN0IHsgUmVhY3RQYXRjaGVyIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3NlcnZpY2VzL3JlYWN0UGF0Y2hlcicpO1xuICAgICAgZGlkUGF0Y2ggPSBhd2FpdCBSZWFjdFBhdGNoZXIucGF0Y2gocHJvY2Vzcy5jd2QoKSk7XG4gICAgfVxuXG4gICAgY29uc3QgYnVpbGRSZXN1bHQgPSBhd2FpdCBidWlsZFNlcnZpY2UuYnVpbGQoe1xuICAgICAgcHJvamVjdFBhdGg6IHByb2Nlc3MuY3dkKCksXG4gICAgICBwcm9qZWN0VHlwZSxcbiAgICAgIHByb2plY3ROYW1lLFxuICAgICAgcGFja2FnZU1hbmFnZXI6IGRldGVjdGVkUHJvamVjdC5wYWNrYWdlTWFuYWdlcixcbiAgICAgIGVudkZpbGU6IGVudkZpbGVQYXRoLFxuICAgIH0pO1xuXG4gICAgLy8gUmV2ZXJ0IHBhdGNoIGFmdGVyIGJ1aWxkIChrZWVwIHVzZXIncyBzb3VyY2UgY2xlYW4pXG4gICAgaWYgKGRpZFBhdGNoKSB7XG4gICAgICBjb25zdCB7IFJlYWN0UGF0Y2hlciB9ID0gYXdhaXQgaW1wb3J0KCcuLi9zZXJ2aWNlcy9yZWFjdFBhdGNoZXInKTtcbiAgICAgIGF3YWl0IFJlYWN0UGF0Y2hlci5yZXZlcnQocHJvY2Vzcy5jd2QoKSk7XG4gICAgfVxuXG4gICAgaWYgKCFidWlsZFJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEJ1aWxkIGZhaWxlZDogJHtidWlsZFJlc3VsdC5lcnJvcn1gKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBidWlsZE91dHB1dERpciA9IGJ1aWxkUmVzdWx0Lm91dHB1dERpcjtcbiAgICBsb2dnZXIuc3VjY2VzcyhgQnVpbGQgY29tcGxldGVkIGluICR7KGJ1aWxkUmVzdWx0LmR1cmF0aW9uIC8gMTAwMCkudG9GaXhlZCgxKX1zYCk7XG4gICAgbG9nZ2VyLmJsYW5rKCk7XG4gIH1cblxuICAvLyBTdGVwIDI6IFBhY2thZ2VcbiAgY29uc3QgcGFja2FnZVN0ZXAgPSBidWlsZE1vZGUgPT09ICdsb2NhbCcgPyAyIDogMTtcbiAgY29uc3QgdG90YWxTdGVwcyA9IGJ1aWxkTW9kZSA9PT0gJ2xvY2FsJyA/IDQgOiAzO1xuXG4gIGxvZ2dlci5zdGVwKHBhY2thZ2VTdGVwLCB0b3RhbFN0ZXBzLCAnQ3JlYXRpbmcgZGVwbG95bWVudCBwYWNrYWdlLi4uJyk7XG5cbiAgbGV0IHBhY2thZ2VSZXN1bHQ7XG4gIHRyeSB7XG4gICAgcGFja2FnZVJlc3VsdCA9IGF3YWl0IHBhY2thZ2VTZXJ2aWNlLnBhY2thZ2Uoe1xuICAgICAgcHJvamVjdFBhdGg6IHByb2Nlc3MuY3dkKCksXG4gICAgICBwcm9qZWN0VHlwZSxcbiAgICAgIGJ1aWxkT3V0cHV0RGlyLFxuICAgICAgaW5jbHVkZVNvdXJjZTogYnVpbGRNb2RlID09PSAnc2VydmVyJyxcbiAgICAgIGVudkZpbGU6IHByb2plY3RUeXBlID09PSAnbm9kZScgPyBlbnZGaWxlUGF0aCA6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoYFBhY2thZ2luZyBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nZ2VyLmJsYW5rKCk7XG5cbiAgLy8gU3RlcCAzOiBBbmFseXplICYgVXBsb2FkXG4gIGxvZ2dlci5zdGVwKHBhY2thZ2VTdGVwICsgMSwgdG90YWxTdGVwcywgJ0FuYWx5emluZyBhbmQgdXBsb2FkaW5nIHRvIHNlcnZlci4uLicpO1xuXG4gIGxldCB1cGxvYWRTZXJ2aWNlO1xuICB0cnkge1xuICAgIHVwbG9hZFNlcnZpY2UgPSBjcmVhdGVVcGxvYWRTZXJ2aWNlKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InKTtcbiAgICBwYWNrYWdlU2VydmljZS5jbGVhbnVwKHBhY2thZ2VSZXN1bHQuemlwUGF0aCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQW5hbHl6ZSBwYWNrYWdlIGZpcnN0IChmb3Igc2VydmVyLWJ1aWxkIG1vZGUgdG8gZ2V0IHdhcm5pbmdzKVxuICBsZXQgY29uZmlybVNlcnZlckJ1aWxkID0gZmFsc2U7XG4gIGlmIChidWlsZE1vZGUgPT09ICdzZXJ2ZXInKSB7XG4gICAgY29uc3QgYW5hbHl6ZVJlc3VsdCA9IGF3YWl0IHVwbG9hZFNlcnZpY2UuYW5hbHl6ZVBhY2thZ2UocGFja2FnZVJlc3VsdC56aXBQYXRoLCBwcm9qZWN0VHlwZSk7XG5cbiAgICBpZiAoYW5hbHl6ZVJlc3VsdC5zdWNjZXNzICYmIGFuYWx5emVSZXN1bHQuYW5hbHlzaXMpIHtcbiAgICAgIGNvbnN0IGFuYWx5c2lzID0gYW5hbHl6ZVJlc3VsdC5hbmFseXNpcztcblxuICAgICAgLy8gRGlzcGxheSB3YXJuaW5nc1xuICAgICAgaWYgKGFuYWx5c2lzLndhcm5pbmdzICYmIGFuYWx5c2lzLndhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgIGxvZ2dlci53YXJuKCdTZXJ2ZXIgQW5hbHlzaXM6Jyk7XG4gICAgICAgIGZvciAoY29uc3Qgd2FybmluZyBvZiBhbmFseXNpcy53YXJuaW5ncykge1xuICAgICAgICAgIGNvbnN0IHByZWZpeCA9IHdhcm5pbmcubGV2ZWwgPT09ICdjcml0aWNhbCcgPyAn4p2MJyA6IHdhcm5pbmcubGV2ZWwgPT09ICd3YXJuaW5nJyA/ICfimqDvuI8nIDogJ+KEue+4jyc7XG4gICAgICAgICAgbG9nZ2VyLmRpbShgICAke3ByZWZpeH0gJHt3YXJuaW5nLm1lc3NhZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBjb25maXJtYXRpb24gZm9yIHNlcnZlci1zaWRlIGJ1aWxkXG4gICAgICBpZiAoYW5hbHlzaXMucmVxdWlyZXNDb25maXJtYXRpb24pIHtcbiAgICAgICAgY29uc3QgeyBjb25maXJtQnVpbGQgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgICAgICAgbmFtZTogJ2NvbmZpcm1CdWlsZCcsXG4gICAgICAgICAgICBtZXNzYWdlOiBgJHthbmFseXNpcy5jb25maXJtYXRpb25SZWFzb24gfHwgJ1NlcnZlci1zaWRlIGJ1aWxkIHJlcXVpcmVkJ30uIFRoaXMgbWF5IGNvbnN1bWUgc2lnbmlmaWNhbnQgcmVzb3VyY2VzLiBDb250aW51ZT9gLFxuICAgICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICBdKTtcblxuICAgICAgICBpZiAoIWNvbmZpcm1CdWlsZCkge1xuICAgICAgICAgIGxvZ2dlci53YXJuKCdEZXBsb3ltZW50IGNhbmNlbGxlZCBieSB1c2VyLicpO1xuICAgICAgICAgIHBhY2thZ2VTZXJ2aWNlLmNsZWFudXAocGFja2FnZVJlc3VsdC56aXBQYXRoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlybVNlcnZlckJ1aWxkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCB1cGxvYWRSZXN1bHQgPSBhd2FpdCB1cGxvYWRTZXJ2aWNlLnVwbG9hZCh7XG4gICAgemlwUGF0aDogcGFja2FnZVJlc3VsdC56aXBQYXRoLFxuICAgIHByb2plY3ROYW1lLFxuICAgIHByb2plY3RUeXBlLFxuICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbixcbiAgICBidWlsZE1vZGUsXG4gICAgY29uZmlybVNlcnZlckJ1aWxkLFxuICAgIC8vIEVOViBtdXRhYmlsaXR5IHRyYWNraW5nXG4gICAgZGVwbG95bWVudFNvdXJjZTogJ2NsaScsXG4gICAgZW52SW5qZWN0ZWQsXG4gIH0pO1xuXG4gIC8vIENsZWFudXAgemlwIGZpbGVcbiAgcGFja2FnZVNlcnZpY2UuY2xlYW51cChwYWNrYWdlUmVzdWx0LnppcFBhdGgpO1xuXG4gIGlmICghdXBsb2FkUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBsb2dnZXIuZXJyb3IoYFVwbG9hZCBmYWlsZWQ6ICR7dXBsb2FkUmVzdWx0LmVycm9yfWApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZ2dlci5zdWNjZXNzKCdVcGxvYWQgY29tcGxldGUnKTtcbiAgbG9nZ2VyLmJsYW5rKCk7XG5cbiAgLy8gU3RlcCA0OiBXYWl0IGZvciBkZXBsb3ltZW50IChpZiBkZXBsb3ltZW50IElEIGF2YWlsYWJsZSlcbiAgaWYgKHVwbG9hZFJlc3VsdC5kZXBsb3ltZW50SWQpIHtcbiAgICBsb2dnZXIuc3RlcChwYWNrYWdlU3RlcCArIDIsIHRvdGFsU3RlcHMsICdXYWl0aW5nIGZvciBkZXBsb3ltZW50IHRvIGNvbXBsZXRlLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZmluYWxTdGF0dXMgPSBhd2FpdCB1cGxvYWRTZXJ2aWNlLnBvbGxEZXBsb3ltZW50U3RhdHVzKFxuICAgICAgICB1cGxvYWRSZXN1bHQuZGVwbG95bWVudElkLFxuICAgICAgICAoc3RhdHVzKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cy5wcm9ncmVzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgXFxyICBQcm9ncmVzczogJHtzdGF0dXMucHJvZ3Jlc3N9JWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoJ1xcbicpO1xuXG4gICAgICBpZiAoZmluYWxTdGF0dXMuc3RhdHVzID09PSAnc3VjY2VzcycpIHtcbiAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgIGxvZ2dlci5zdWNjZXNzKCdEZXBsb3ltZW50IHN1Y2Nlc3NmdWwhJyk7XG5cbiAgICAgICAgY29uc3Qgc2FmZU5hbWUgPSBwcm9qZWN0TmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05XS9nLCAnLScpO1xuXG4gICAgICAgIC8vIEZldGNoIGRvbWFpbiBjb25maWcgdG8gc2hvdyBwcm9wZXIgVVJMXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZG9tYWluUmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQoYCR7Y29uZmlnLnNlcnZlclVybH0vYXBpL2RvbWFpbmAsIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IGNvbmZpZy50b2tlbiA/IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2NvbmZpZy50b2tlbn1gIH0gOiB7fSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBkb21haW5Db25maWcgPSBkb21haW5SZXNwb25zZS5kYXRhO1xuXG4gICAgICAgICAgaWYgKGRvbWFpbkNvbmZpZy5kb21haW4/LmFjdGl2ZSAmJiBkb21haW5Db25maWcuc2VjdXJpdHlNb2RlID09PSAnZG9tYWluLWh0dHBzJykge1xuICAgICAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhgWW91ciBhcHAgaXMgYXZhaWxhYmxlIGF0OiBodHRwczovLyR7ZG9tYWluQ29uZmlnLmRvbWFpbi5kb21haW59L2FwcC8ke3NhZmVOYW1lfWApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBZb3VyIGFwcCBpcyBhdmFpbGFibGUgYXQ6ICR7Y29uZmlnLnNlcnZlclVybH0vYXBwLyR7c2FmZU5hbWV9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBGYWxsYmFjayB0byBzZXJ2ZXIgVVJMIGlmIGRvbWFpbiBmZXRjaCBmYWlsc1xuICAgICAgICAgIGxvZ2dlci5ibGFuaygpO1xuICAgICAgICAgIGxvZ2dlci5pbmZvKGBZb3VyIGFwcCBpcyBhdmFpbGFibGUgYXQ6ICR7Y29uZmlnLnNlcnZlclVybH0vYXBwLyR7c2FmZU5hbWV9YCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTaG93IGhlYWx0aCB3YXJuaW5nIGlmIHNlcnZpY2UgZGlkbid0IHJlc3BvbmQgb24gaXRzIGFsbG9jYXRlZCBwb3J0XG4gICAgICAgIGlmIChmaW5hbFN0YXR1cy5oZWFsdGhXYXJuaW5nKSB7XG4gICAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oYOKaoCAgSGVhbHRoIGNoZWNrOiAke2ZpbmFsU3RhdHVzLmhlYWx0aFdhcm5pbmd9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcihgRGVwbG95bWVudCBmYWlsZWQ6ICR7ZmluYWxTdGF0dXMuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InfWApO1xuICAgICAgICBpZiAoZmluYWxTdGF0dXMubG9ncykge1xuICAgICAgICAgIGxvZ2dlci5ibGFuaygpO1xuICAgICAgICAgIGxvZ2dlci5kaW0oJ0xvZ3M6Jyk7XG4gICAgICAgICAgY29uc29sZS5sb2coZmluYWxTdGF0dXMubG9ncyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLndhcm4oJ0NvdWxkIG5vdCB0cmFjayBkZXBsb3ltZW50IHN0YXR1cycpO1xuICAgICAgbG9nZ2VyLmRpbSgnQ2hlY2sgdGhlIHdlYiBVSSBmb3IgZGVwbG95bWVudCBzdGF0dXMnKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgbG9nZ2VyLnN1Y2Nlc3MoJ1VwbG9hZCBzdWNjZXNzZnVsIScpO1xuICAgIGxvZ2dlci5kaW0oJ0RlcGxveW1lbnQgaXMgYmVpbmcgcHJvY2Vzc2VkLiBDaGVjayB0aGUgd2ViIFVJIGZvciBzdGF0dXMuJyk7XG4gIH1cblxuICBsb2dnZXIuYmxhbmsoKTtcbn1cbiJdfQ==
497
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2RlcGxveS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlJQSxzQ0E0WEM7QUFyZ0JELHdEQUFnQztBQUNoQyw4Q0FBc0I7QUFDdEIsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4QixrREFBMEI7QUFFMUIsaUVBQTREO0FBQzVELDJEQUF3RDtBQUN4RCwrREFBNEQ7QUFDNUQsNkRBQWdFO0FBQ2hFLDRDQUEwRTtBQUMxRSw0Q0FBeUM7QUFZekM7O0dBRUc7QUFDSCxTQUFTLFlBQVksQ0FBQyxRQUFnQjtJQUNwQyxNQUFNLE9BQU8sR0FBRyxZQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuRCxNQUFNLElBQUksR0FBMkIsRUFBRSxDQUFDO0lBRXhDLEtBQUssTUFBTSxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1QixnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztZQUFFLFNBQVM7UUFFbEQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoQixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM3QyxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM5Qyx1Q0FBdUM7WUFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDOUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNuRCxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixDQUFDO1lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOztHQUVHO0FBQ0gsS0FBSyxVQUFVLG1CQUFtQjtJQUNoQyxNQUFNLElBQUksR0FBMkIsRUFBRSxDQUFDO0lBRXhDLGVBQU0sQ0FBQyxHQUFHLENBQUMscURBQXFELENBQUMsQ0FBQztJQUVsRSxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ1osTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLE1BQU0sa0JBQVEsQ0FBQyxNQUFNLENBQUM7WUFDcEM7Z0JBQ0UsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsT0FBTyxFQUFFLGdCQUFnQjthQUMxQjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUN4QixNQUFNO1FBQ1IsQ0FBQztRQUVELE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLGtCQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3RDO2dCQUNFLElBQUksRUFBRSxPQUFPO2dCQUNiLElBQUksRUFBRSxPQUFPO2dCQUNiLE9BQU8sRUFBRSxhQUFhLEdBQUcsR0FBRzthQUM3QjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUM3RCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxLQUFLLFVBQVUsZ0JBQWdCO0lBQzdCLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLGtCQUFRLENBQUMsTUFBTSxDQUFDO1FBQzFDO1lBQ0UsSUFBSSxFQUFFLE1BQU07WUFDWixJQUFJLEVBQUUsV0FBVztZQUNqQixPQUFPLEVBQUUsc0RBQXNEO1lBQy9ELE9BQU8sRUFBRTtnQkFDUCxFQUFFLElBQUksRUFBRSwyQkFBMkIsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO2dCQUNwRCxFQUFFLElBQUksRUFBRSx5Q0FBeUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO2dCQUNwRSxFQUFFLElBQUksRUFBRSx3Q0FBd0MsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO2FBQ2xFO1NBQ0Y7S0FDRixDQUFDLENBQUM7SUFFSCxJQUFJLFNBQVMsS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUN6QixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxrQkFBUSxDQUFDLE1BQU0sQ0FBQztZQUN4QztnQkFDRSxJQUFJLEVBQUUsT0FBTztnQkFDYixJQUFJLEVBQUUsU0FBUztnQkFDZixPQUFPLEVBQUUsbUJBQW1CO2dCQUM1QixRQUFRLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRTtvQkFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7d0JBQUUsT0FBTyxxQkFBcUIsQ0FBQztvQkFDaEQsSUFBSSxDQUFDLFlBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO3dCQUFFLE9BQU8sZ0JBQWdCLENBQUM7b0JBQ25ELE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUM7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUNILGVBQU0sQ0FBQyxPQUFPLENBQUMsbUJBQW1CLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDN0MsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUksU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzNCLE1BQU0sSUFBSSxHQUFHLE1BQU0sbUJBQW1CLEVBQUUsQ0FBQztRQUN6QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pDLGdDQUFnQztZQUNoQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztpQkFDcEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2lCQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDZCxNQUFNLE9BQU8sR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNqRCxZQUFFLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUN0QyxlQUFNLENBQUMsT0FBTyxDQUFDLHFCQUFxQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sWUFBWSxDQUFDLENBQUM7WUFDMUUsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRU0sS0FBSyxVQUFVLGFBQWEsQ0FBQyxPQUFzQjtJQUN4RCxlQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRS9CLHNCQUFzQjtJQUN0QixJQUFJLENBQUMsSUFBQSxxQkFBWSxHQUFFLEVBQUUsQ0FBQztRQUNwQixlQUFNLENBQUMsS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7UUFDN0QsT0FBTztJQUNULENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsSUFBSSxJQUFBLHVCQUFjLEdBQUUsRUFBRSxDQUFDO1FBQ3JCLGVBQU0sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUN2RCxlQUFNLENBQUMsSUFBSSxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDdEQsT0FBTztJQUNULENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFTLEdBQUUsQ0FBQztJQUMzQixlQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDMUMsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWYsaUJBQWlCO0lBQ2pCLE1BQU0sT0FBTyxHQUFHLElBQUEsYUFBRyxFQUFDLHNCQUFzQixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDcEQsSUFBSSxlQUFlLENBQUM7SUFFcEIsSUFBSSxDQUFDO1FBQ0gsZUFBZSxHQUFHLE1BQU0sSUFBQSwrQkFBYSxHQUFFLENBQUM7UUFDeEMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLGVBQWUsQ0FBQyxJQUFJLGFBQWEsZUFBZSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7SUFDbkcsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDekMsZUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN2RSxPQUFPO0lBQ1QsQ0FBQztJQUVELHNEQUFzRDtJQUN0RCxNQUFNLGFBQWEsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLElBQUksY0FBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztTQUN6RSxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFRLHdDQUF3QztTQUN4RSxPQUFPLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLENBQUUscUNBQXFDO1NBQ3RFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQVUsZ0NBQWdDO1NBQ2pFLFdBQVcsRUFBRSxDQUFDO0lBQ2pCLElBQUksV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksYUFBYSxDQUFDO0lBRWhELHdDQUF3QztJQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLE1BQU0sa0JBQVEsQ0FBQyxNQUFNLENBQUM7WUFDcEM7Z0JBQ0UsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsSUFBSSxFQUFFLE1BQU07Z0JBQ1osT0FBTyxFQUFFLGVBQWU7Z0JBQ3hCLE9BQU8sRUFBRSxXQUFXO2dCQUNwQixRQUFRLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRTtvQkFDMUIsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUM7d0JBQUUsT0FBTyxvQ0FBb0MsQ0FBQztvQkFDbEUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7d0JBQUUsT0FBTyxrRUFBa0UsQ0FBQztvQkFDL0csT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQzthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDN0IsQ0FBQztJQUVELDRDQUE0QztJQUM1QyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxrQkFBUSxDQUFDLE1BQU0sQ0FBQztRQUN6QztZQUNFLElBQUksRUFBRSxTQUFTO1lBQ2YsSUFBSSxFQUFFLFVBQVU7WUFDaEIsT0FBTyxFQUFFLGtEQUFrRDtZQUMzRCxPQUFPLEVBQUUsS0FBSztTQUNmO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsSUFBSSxXQUErQixDQUFDO0lBQ3BDLElBQUksT0FBTyxHQUEyQixFQUFFLENBQUM7SUFDekMsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBRXhCLElBQUksUUFBUSxFQUFFLENBQUM7UUFDYixNQUFNLGNBQWMsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN4RCxNQUFNLFVBQVUsR0FBRyxZQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRWpELElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixpQ0FBaUM7WUFDakMsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sa0JBQVEsQ0FBQyxNQUFNLENBQUM7Z0JBQzVDO29CQUNFLElBQUksRUFBRSxTQUFTO29CQUNmLElBQUksRUFBRSxhQUFhO29CQUNuQixPQUFPLEVBQUUscUNBQXFDO29CQUM5QyxPQUFPLEVBQUUsSUFBSTtpQkFDZDthQUNGLENBQUMsQ0FBQztZQUVILElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLFdBQVcsR0FBRyxjQUFjLENBQUM7Z0JBQzdCLE9BQU8sR0FBRyxZQUFZLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3ZDLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQzlDLGVBQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sc0JBQXNCLENBQUMsQ0FBQztZQUM5RSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sbURBQW1EO2dCQUNuRCxXQUFXLEdBQUcsTUFBTSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLFdBQVcsRUFBRSxDQUFDO29CQUNoQixPQUFPLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUNwQyxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO2dCQUNoRCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sK0JBQStCO1lBQy9CLGVBQU0sQ0FBQyxJQUFJLENBQUMsMENBQTBDLENBQUMsQ0FBQztZQUN4RCxXQUFXLEdBQUcsTUFBTSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3ZDLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sR0FBRyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3BDLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDaEQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQseUJBQXlCO0lBQ3pCLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQztJQUV6RCx1QkFBdUI7SUFDdkIsSUFBSSxTQUFvQixDQUFDO0lBQ3pCLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hCLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDdkIsQ0FBQztTQUFNLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzlCLFNBQVMsR0FBRyxPQUFPLENBQUM7SUFDdEIsQ0FBQztTQUFNLENBQUM7UUFDTixTQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixJQUFJLE9BQU8sQ0FBQztJQUNqRCxDQUFDO0lBRUQsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsZUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDdkMsZUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDcEMsZUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDeEMsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsZUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFDRCxlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFZixxQkFBcUI7SUFDckIsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sa0JBQVEsQ0FBQyxNQUFNLENBQUM7UUFDeEM7WUFDRSxJQUFJLEVBQUUsU0FBUztZQUNmLElBQUksRUFBRSxTQUFTO1lBQ2YsT0FBTyxFQUFFLDBCQUEwQjtZQUNuQyxPQUFPLEVBQUUsSUFBSTtTQUNkO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsZUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQ3JDLE9BQU87SUFDVCxDQUFDO0lBRUQsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWYsdUNBQXVDO0lBQ3ZDLElBQUksY0FBYyxHQUFHLGVBQWUsQ0FBQyxjQUFjLENBQUM7SUFFcEQsSUFBSSxTQUFTLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDMUIsZUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFFekMsNkVBQTZFO1FBQzdFLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMxQixJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7UUFFekIsSUFBSSxXQUFXLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDNUIsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLHdEQUFhLDBCQUEwQixHQUFDLENBQUM7WUFDbEUsYUFBYSxHQUFHLE1BQU0sWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMxRCxDQUFDO2FBQU0sSUFBSSxXQUFXLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDbEMsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLHdEQUFhLHlCQUF5QixHQUFDLENBQUM7WUFDaEUsWUFBWSxHQUFHLE1BQU0sV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUVELElBQUksV0FBVyxDQUFDO1FBQ2hCLElBQUksQ0FBQztZQUNILFdBQVcsR0FBRyxNQUFNLDJCQUFZLENBQUMsS0FBSyxDQUFDO2dCQUNyQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsRUFBRTtnQkFDMUIsV0FBVztnQkFDWCxXQUFXO2dCQUNYLGNBQWMsRUFBRSxlQUFlLENBQUMsY0FBYztnQkFDOUMsT0FBTyxFQUFFLFdBQVc7YUFDckIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsK0RBQStEO1lBQy9ELElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyx3REFBYSwwQkFBMEIsR0FBQyxDQUFDO2dCQUNsRSxNQUFNLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDM0MsQ0FBQztZQUNELElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyx3REFBYSx5QkFBeUIsR0FBQyxDQUFDO2dCQUNoRSxNQUFNLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDMUMsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLGVBQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELE9BQU87UUFDVCxDQUFDO1FBRUQsY0FBYyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUM7UUFDdkMsZUFBTSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEYsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsTUFBTSxXQUFXLEdBQUcsU0FBUyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsTUFBTSxVQUFVLEdBQUcsU0FBUyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFakQsZUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLGdDQUFnQyxDQUFDLENBQUM7SUFFdkUsSUFBSSxhQUFhLENBQUM7SUFDbEIsSUFBSSxDQUFDO1FBQ0gsYUFBYSxHQUFHLE1BQU0sK0JBQWMsQ0FBQyxPQUFPLENBQUM7WUFDM0MsV0FBVyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDMUIsV0FBVztZQUNYLGNBQWM7WUFDZCxhQUFhLEVBQUUsU0FBUyxLQUFLLFFBQVE7WUFDckMsT0FBTyxFQUFFLFdBQVcsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUztTQUMxRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLGVBQU0sQ0FBQyxLQUFLLENBQUMscUJBQXFCLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDOUYsT0FBTztJQUNULENBQUM7SUFFRCxlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFZiwyQkFBMkI7SUFDM0IsZUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxzQ0FBc0MsQ0FBQyxDQUFDO0lBRWpGLElBQUksYUFBYSxDQUFDO0lBQ2xCLElBQUksQ0FBQztRQUNILGFBQWEsR0FBRyxJQUFBLG1DQUFtQixHQUFFLENBQUM7SUFDeEMsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixlQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3ZFLCtCQUFjLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QyxPQUFPO0lBQ1QsQ0FBQztJQUVELGdFQUFnRTtJQUNoRSxJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQztJQUMvQixJQUFJLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUMzQixNQUFNLGFBQWEsR0FBRyxNQUFNLGFBQWEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUU3RixJQUFJLGFBQWEsQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3BELE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUM7WUFFeEMsbUJBQW1CO1lBQ25CLElBQUksUUFBUSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdEQsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNmLGVBQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDaEMsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3hDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztvQkFDOUYsZUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDL0MsQ0FBQztnQkFDRCxlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDakIsQ0FBQztZQUVELDRDQUE0QztZQUM1QyxJQUFJLFFBQVEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsTUFBTSxrQkFBUSxDQUFDLE1BQU0sQ0FBQztvQkFDN0M7d0JBQ0UsSUFBSSxFQUFFLFNBQVM7d0JBQ2YsSUFBSSxFQUFFLGNBQWM7d0JBQ3BCLE9BQU8sRUFBRSxHQUFHLFFBQVEsQ0FBQyxrQkFBa0IsSUFBSSw0QkFBNEIscURBQXFEO3dCQUM1SCxPQUFPLEVBQUUsSUFBSTtxQkFDZDtpQkFDRixDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNsQixlQUFNLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLENBQUM7b0JBQzdDLCtCQUFjLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDOUMsT0FBTztnQkFDVCxDQUFDO2dCQUNELGtCQUFrQixHQUFHLElBQUksQ0FBQztZQUM1QixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFDOUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxPQUFPO1FBQzlCLFdBQVc7UUFDWCxXQUFXO1FBQ1gsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO1FBQ3hCLFNBQVM7UUFDVCxrQkFBa0I7UUFDbEIsMEJBQTBCO1FBQzFCLGdCQUFnQixFQUFFLEtBQUs7UUFDdkIsV0FBVztLQUNaLENBQUMsQ0FBQztJQUVILG1CQUFtQjtJQUNuQiwrQkFBYyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMxQixlQUFNLENBQUMsS0FBSyxDQUFDLGtCQUFrQixZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNyRCxPQUFPO0lBQ1QsQ0FBQztJQUVELGVBQU0sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNsQyxlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFFZiwyREFBMkQ7SUFDM0QsSUFBSSxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDOUIsZUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSx1Q0FBdUMsQ0FBQyxDQUFDO1FBRWxGLElBQUksQ0FBQztZQUNILE1BQU0sV0FBVyxHQUFHLE1BQU0sYUFBYSxDQUFDLG9CQUFvQixDQUMxRCxZQUFZLENBQUMsWUFBWSxFQUN6QixDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNULElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDbEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2dCQUM1RCxDQUFDO1lBQ0gsQ0FBQyxDQUNGLENBQUM7WUFFRixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUUzQixJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3JDLGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDZixlQUFNLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7Z0JBRXpDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUV0RSx5Q0FBeUM7Z0JBQ3pDLElBQUksQ0FBQztvQkFDSCxNQUFNLGNBQWMsR0FBRyxNQUFNLGVBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxhQUFhLEVBQUU7d0JBQ3ZFLE9BQU8sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxVQUFVLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO3FCQUN6RSxDQUFDLENBQUM7b0JBQ0gsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQztvQkFFekMsSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxZQUFZLENBQUMsWUFBWSxLQUFLLGNBQWMsRUFBRSxDQUFDO3dCQUNoRixlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ2YsZUFBTSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsUUFBUSxFQUFFLENBQUMsQ0FBQztvQkFDakcsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDZixlQUFNLENBQUMsSUFBSSxDQUFDLDZCQUE2QixNQUFNLENBQUMsU0FBUyxRQUFRLFFBQVEsRUFBRSxDQUFDLENBQUM7b0JBQy9FLENBQUM7Z0JBQ0gsQ0FBQztnQkFBQyxNQUFNLENBQUM7b0JBQ1AsK0NBQStDO29CQUMvQyxlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2YsZUFBTSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsTUFBTSxDQUFDLFNBQVMsUUFBUSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRSxDQUFDO2dCQUVELHNFQUFzRTtnQkFDdEUsSUFBSSxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7b0JBQzlCLGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDZixlQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixXQUFXLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztnQkFDL0QsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixlQUFNLENBQUMsS0FBSyxDQUFDLHNCQUFzQixXQUFXLENBQUMsS0FBSyxJQUFJLGVBQWUsRUFBRSxDQUFDLENBQUM7Z0JBQzNFLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNyQixlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2YsZUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDcEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixlQUFNLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7WUFDakQsZUFBTSxDQUFDLEdBQUcsQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNOLHlFQUF5RTtRQUN6RSxlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZixlQUFNLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFFekMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFdEUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxjQUFjLEdBQUcsTUFBTSxlQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsYUFBYSxFQUFFO2dCQUN2RSxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsVUFBVSxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTthQUN6RSxDQUFDLENBQUM7WUFDSCxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDO1lBRXpDLElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLElBQUksWUFBWSxDQUFDLFlBQVksS0FBSyxjQUFjLEVBQUUsQ0FBQztnQkFDaEYsZUFBTSxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLFFBQVEsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNqRyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sZUFBTSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsTUFBTSxDQUFDLFNBQVMsUUFBUSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQy9FLENBQUM7UUFDSCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsZUFBTSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsTUFBTSxDQUFDLFNBQVMsUUFBUSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLENBQUM7SUFDSCxDQUFDO0lBRUQsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5xdWlyZXIgZnJvbSAnaW5xdWlyZXInO1xuaW1wb3J0IG9yYSBmcm9tICdvcmEnO1xuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbmltcG9ydCB7IFByb2plY3RUeXBlLCBCdWlsZE1vZGUgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBkZXRlY3RQcm9qZWN0IH0gZnJvbSAnLi4vc2VydmljZXMvcHJvamVjdERldGVjdG9yJztcbmltcG9ydCB7IGJ1aWxkU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2J1aWxkU2VydmljZSc7XG5pbXBvcnQgeyBwYWNrYWdlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3BhY2thZ2VTZXJ2aWNlJztcbmltcG9ydCB7IGNyZWF0ZVVwbG9hZFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy91cGxvYWRTZXJ2aWNlJztcbmltcG9ydCB7IGlzQ29uZmlndXJlZCwgZ2V0Q29uZmlnLCBpc1Rva2VuRXhwaXJlZCB9IGZyb20gJy4uL3V0aWxzL2NvbmZpZyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXInO1xuXG5pbnRlcmZhY2UgRGVwbG95T3B0aW9ucyB7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHR5cGU/OiBQcm9qZWN0VHlwZTtcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgYnVpbGRMb2NhbD86IGJvb2xlYW47XG4gIGJ1aWxkU2VydmVyPzogYm9vbGVhbjtcbiAgZW52RmlsZT86IHN0cmluZztcbiAgc2tpcEVudlByb21wdD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyc2UgYSAuZW52IGZpbGUgaW50byBhIFJlY29yZFxuICovXG5mdW5jdGlvbiBwYXJzZUVudkZpbGUoZmlsZVBhdGg6IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICBjb25zdCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGZvciAoY29uc3QgbGluZSBvZiBjb250ZW50LnNwbGl0KCdcXG4nKSkge1xuICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTtcbiAgICAvLyBTa2lwIGVtcHR5IGxpbmVzIGFuZCBjb21tZW50c1xuICAgIGlmICghdHJpbW1lZCB8fCB0cmltbWVkLnN0YXJ0c1dpdGgoJyMnKSkgY29udGludWU7XG5cbiAgICBjb25zdCBlcUluZGV4ID0gdHJpbW1lZC5pbmRleE9mKCc9Jyk7XG4gICAgaWYgKGVxSW5kZXggPiAwKSB7XG4gICAgICBjb25zdCBrZXkgPSB0cmltbWVkLnNsaWNlKDAsIGVxSW5kZXgpLnRyaW0oKTtcbiAgICAgIGxldCB2YWx1ZSA9IHRyaW1tZWQuc2xpY2UoZXFJbmRleCArIDEpLnRyaW0oKTtcbiAgICAgIC8vIFJlbW92ZSBzdXJyb3VuZGluZyBxdW90ZXMgaWYgcHJlc2VudFxuICAgICAgaWYgKCh2YWx1ZS5zdGFydHNXaXRoKCdcIicpICYmIHZhbHVlLmVuZHNXaXRoKCdcIicpKSB8fFxuICAgICAgICAgICh2YWx1ZS5zdGFydHNXaXRoKFwiJ1wiKSAmJiB2YWx1ZS5lbmRzV2l0aChcIidcIikpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSwgLTEpO1xuICAgICAgfVxuICAgICAgdmFyc1trZXldID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhcnM7XG59XG5cbi8qKlxuICogUHJvbXB0IHVzZXIgZm9yIG1hbnVhbCBFTlYgdmFyaWFibGUgZW50cnlcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvbXB0TWFudWFsRW52VmFycygpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGxvZ2dlci5kaW0oJ0VudGVyIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZW1wdHkgbmFtZSB0byBmaW5pc2gpOicpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeyBrZXkgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICdrZXknLFxuICAgICAgICBtZXNzYWdlOiAnVmFyaWFibGUgbmFtZTonLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIGlmICgha2V5IHx8ICFrZXkudHJpbSgpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjb25zdCB7IHZhbHVlIH0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBuYW1lOiAndmFsdWUnLFxuICAgICAgICBtZXNzYWdlOiBgVmFsdWUgZm9yICR7a2V5fTpgLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIHZhcnNba2V5LnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvW15BLVowLTlfXS9nLCAnJyldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdmFycztcbn1cblxuLyoqXG4gKiBQcm9tcHQgdXNlciBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGUgb3B0aW9ucyB3aGVuIG5vIC5lbnYgZmlsZSBleGlzdHNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvbXB0RW52T3B0aW9ucygpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IGVudkNob2ljZSB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiAnbGlzdCcsXG4gICAgICBuYW1lOiAnZW52Q2hvaWNlJyxcbiAgICAgIG1lc3NhZ2U6ICdIb3cgd291bGQgeW91IGxpa2UgdG8gcHJvdmlkZSBlbnZpcm9ubWVudCB2YXJpYWJsZXM/JyxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgeyBuYW1lOiAnU3BlY2lmeSBwYXRoIHRvIC5lbnYgZmlsZScsIHZhbHVlOiAncGF0aCcgfSxcbiAgICAgICAgeyBuYW1lOiAnRW50ZXIgdmFyaWFibGVzIG1hbnVhbGx5IChjcmVhdGVzIC5lbnYpJywgdmFsdWU6ICdtYW51YWwnIH0sXG4gICAgICAgIHsgbmFtZTogJ0NvbnRpbnVlIHdpdGhvdXQgZW52aXJvbm1lbnQgdmFyaWFibGVzJywgdmFsdWU6ICdza2lwJyB9LFxuICAgICAgXSxcbiAgICB9LFxuICBdKTtcblxuICBpZiAoZW52Q2hvaWNlID09PSAncGF0aCcpIHtcbiAgICBjb25zdCB7IGVudlBhdGggfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICdlbnZQYXRoJyxcbiAgICAgICAgbWVzc2FnZTogJ1BhdGggdG8gZW52IGZpbGU6JyxcbiAgICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKCFpbnB1dC50cmltKCkpIHJldHVybiAnUGxlYXNlIGVudGVyIGEgcGF0aCc7XG4gICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGlucHV0KSkgcmV0dXJuICdGaWxlIG5vdCBmb3VuZCc7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICAgIGxvZ2dlci5zdWNjZXNzKGBVc2luZyBlbnYgZmlsZTogJHtlbnZQYXRofWApO1xuICAgIHJldHVybiBlbnZQYXRoO1xuICB9XG5cbiAgaWYgKGVudkNob2ljZSA9PT0gJ21hbnVhbCcpIHtcbiAgICBjb25zdCB2YXJzID0gYXdhaXQgcHJvbXB0TWFudWFsRW52VmFycygpO1xuICAgIGlmIChPYmplY3Qua2V5cyh2YXJzKS5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBXcml0ZSB0byAuZW52IGZpbGUgaW4gcHJvamVjdFxuICAgICAgY29uc3QgZW52Q29udGVudCA9IE9iamVjdC5lbnRyaWVzKHZhcnMpXG4gICAgICAgIC5tYXAoKFtrLCB2XSkgPT4gYCR7a309JHt2fWApXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgIGNvbnN0IGVudlBhdGggPSBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgJy5lbnYnKTtcbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoZW52UGF0aCwgZW52Q29udGVudCk7XG4gICAgICBsb2dnZXIuc3VjY2VzcyhgQ3JlYXRlZCAuZW52IHdpdGggJHtPYmplY3Qua2V5cyh2YXJzKS5sZW5ndGh9IHZhcmlhYmxlc2ApO1xuICAgICAgcmV0dXJuIGVudlBhdGg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlcGxveUNvbW1hbmQob3B0aW9uczogRGVwbG95T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBsb2dnZXIuaGVhZGVyKCdSdW53YXkgRGVwbG95Jyk7XG5cbiAgLy8gQ2hlY2sgY29uZmlndXJhdGlvblxuICBpZiAoIWlzQ29uZmlndXJlZCgpKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdDTEkgbm90IGNvbmZpZ3VyZWQuIFJ1biBcInJ1bndheSBpbml0XCIgZmlyc3QuJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gQ2hlY2sgdG9rZW4gdmFsaWRpdHkgYmVmb3JlIHByb2NlZWRpbmdcbiAgaWYgKGlzVG9rZW5FeHBpcmVkKCkpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ1lvdXIgYXV0aGVudGljYXRpb24gdG9rZW4gaGFzIGV4cGlyZWQuJyk7XG4gICAgbG9nZ2VyLmluZm8oJ1J1biBcInJ1bndheSBsb2dpblwiIHRvIHJlLWF1dGhlbnRpY2F0ZS4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgbG9nZ2VyLmRpbShgU2VydmVyOiAke2NvbmZpZy5zZXJ2ZXJVcmx9YCk7XG4gIGxvZ2dlci5ibGFuaygpO1xuXG4gIC8vIERldGVjdCBwcm9qZWN0XG4gIGNvbnN0IHNwaW5uZXIgPSBvcmEoJ0RldGVjdGluZyBwcm9qZWN0Li4uJykuc3RhcnQoKTtcbiAgbGV0IGRldGVjdGVkUHJvamVjdDtcblxuICB0cnkge1xuICAgIGRldGVjdGVkUHJvamVjdCA9IGF3YWl0IGRldGVjdFByb2plY3QoKTtcbiAgICBzcGlubmVyLnN1Y2NlZWQoYERldGVjdGVkOiAke2RldGVjdGVkUHJvamVjdC50eXBlfSBwcm9qZWN0ICgke2RldGVjdGVkUHJvamVjdC5wYWNrYWdlTWFuYWdlcn0pYCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgc3Bpbm5lci5mYWlsKCdGYWlsZWQgdG8gZGV0ZWN0IHByb2plY3QnKTtcbiAgICBsb2dnZXIuZXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERldGVybWluZSBwcm9qZWN0IG5hbWUg4oCUIHNhbml0aXplIGZyb20gcGFja2FnZS5qc29uXG4gIGNvbnN0IHN1Z2dlc3RlZE5hbWUgPSAoZGV0ZWN0ZWRQcm9qZWN0Lm5hbWUgfHwgcGF0aC5iYXNlbmFtZShwcm9jZXNzLmN3ZCgpKSlcbiAgICAucmVwbGFjZSgvXkBbXi9dK1xcLy8sICcnKSAgICAgICAgLy8gUmVtb3ZlIG5wbSBzY29wZSAoQHNjb3BlL25hbWUg4oaSIG5hbWUpXG4gICAgLnJlcGxhY2UoL1teYS16QS1aMC05LV9dL2csICctJykgIC8vIFJlcGxhY2UgaW52YWxpZCBjaGFycyB3aXRoIGh5cGhlbnNcbiAgICAucmVwbGFjZSgvXi0rfC0rJC9nLCAnJykgICAgICAgICAgLy8gVHJpbSBsZWFkaW5nL3RyYWlsaW5nIGh5cGhlbnNcbiAgICAudG9Mb3dlckNhc2UoKTtcbiAgbGV0IHByb2plY3ROYW1lID0gb3B0aW9ucy5uYW1lIHx8IHN1Z2dlc3RlZE5hbWU7XG5cbiAgLy8gSW50ZXJhY3RpdmUgbW9kZSBpZiBuYW1lIG5vdCBwcm92aWRlZFxuICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgIGNvbnN0IGFuc3dlcnMgPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBuYW1lOiAnbmFtZScsXG4gICAgICAgIG1lc3NhZ2U6ICdQcm9qZWN0IG5hbWU6JyxcbiAgICAgICAgZGVmYXVsdDogcHJvamVjdE5hbWUsXG4gICAgICAgIHZhbGlkYXRlOiAoaW5wdXQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPCAyKSByZXR1cm4gJ05hbWUgbXVzdCBiZSBhdCBsZWFzdCAyIGNoYXJhY3RlcnMnO1xuICAgICAgICAgIGlmICghL15bYS16QS1aMC05LV9dKyQvLnRlc3QoaW5wdXQpKSByZXR1cm4gJ05hbWUgY2FuIG9ubHkgY29udGFpbiBsZXR0ZXJzLCBudW1iZXJzLCBoeXBoZW5zLCBhbmQgdW5kZXJzY29yZXMnO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgICBwcm9qZWN0TmFtZSA9IGFuc3dlcnMubmFtZTtcbiAgfVxuXG4gIC8vIEFzayBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHJlcXVpcmVkXG4gIGNvbnN0IHsgbmVlZHNFbnYgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAge1xuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgbmFtZTogJ25lZWRzRW52JyxcbiAgICAgIG1lc3NhZ2U6ICdEb2VzIHRoaXMgcHJvamVjdCByZXF1aXJlIGVudmlyb25tZW50IHZhcmlhYmxlcz8nLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgfSxcbiAgXSk7XG5cbiAgbGV0IGVudkZpbGVQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGxldCBlbnZWYXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGxldCBlbnZJbmplY3RlZCA9IGZhbHNlO1xuXG4gIGlmIChuZWVkc0Vudikge1xuICAgIGNvbnN0IGRlZmF1bHRFbnZQYXRoID0gcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksICcuZW52Jyk7XG4gICAgY29uc3QgaGFzRW52RmlsZSA9IGZzLmV4aXN0c1N5bmMoZGVmYXVsdEVudlBhdGgpO1xuXG4gICAgaWYgKGhhc0VudkZpbGUpIHtcbiAgICAgIC8vIC5lbnYgZm91bmQgLSBjb25maXJtIHdpdGggdXNlclxuICAgICAgY29uc3QgeyB1c2VFeGlzdGluZyB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdjb25maXJtJyxcbiAgICAgICAgICBuYW1lOiAndXNlRXhpc3RpbmcnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdGb3VuZCAuZW52IGZpbGUgaW4gcHJvamVjdC4gVXNlIGl0PycsXG4gICAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0pO1xuXG4gICAgICBpZiAodXNlRXhpc3RpbmcpIHtcbiAgICAgICAgZW52RmlsZVBhdGggPSBkZWZhdWx0RW52UGF0aDtcbiAgICAgICAgZW52VmFycyA9IHBhcnNlRW52RmlsZShkZWZhdWx0RW52UGF0aCk7XG4gICAgICAgIGVudkluamVjdGVkID0gT2JqZWN0LmtleXMoZW52VmFycykubGVuZ3RoID4gMDtcbiAgICAgICAgbG9nZ2VyLnN1Y2Nlc3MoYExvYWRlZCAke09iamVjdC5rZXlzKGVudlZhcnMpLmxlbmd0aH0gdmFyaWFibGVzIGZyb20gLmVudmApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVXNlciBkZWNsaW5lZCBleGlzdGluZyAuZW52IC0gc2hvdyBvdGhlciBvcHRpb25zXG4gICAgICAgIGVudkZpbGVQYXRoID0gYXdhaXQgcHJvbXB0RW52T3B0aW9ucygpO1xuICAgICAgICBpZiAoZW52RmlsZVBhdGgpIHtcbiAgICAgICAgICBlbnZWYXJzID0gcGFyc2VFbnZGaWxlKGVudkZpbGVQYXRoKTtcbiAgICAgICAgICBlbnZJbmplY3RlZCA9IE9iamVjdC5rZXlzKGVudlZhcnMpLmxlbmd0aCA+IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gLmVudiBmb3VuZCAtIHNob3cgb3B0aW9uc1xuICAgICAgbG9nZ2VyLndhcm4oJ05vIC5lbnYgZmlsZSBmb3VuZCBpbiBwcm9qZWN0IGRpcmVjdG9yeS4nKTtcbiAgICAgIGVudkZpbGVQYXRoID0gYXdhaXQgcHJvbXB0RW52T3B0aW9ucygpO1xuICAgICAgaWYgKGVudkZpbGVQYXRoKSB7XG4gICAgICAgIGVudlZhcnMgPSBwYXJzZUVudkZpbGUoZW52RmlsZVBhdGgpO1xuICAgICAgICBlbnZJbmplY3RlZCA9IE9iamVjdC5rZXlzKGVudlZhcnMpLmxlbmd0aCA+IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gRGV0ZXJtaW5lIHByb2plY3QgdHlwZVxuICBjb25zdCBwcm9qZWN0VHlwZSA9IG9wdGlvbnMudHlwZSB8fCBkZXRlY3RlZFByb2plY3QudHlwZTtcblxuICAvLyBEZXRlcm1pbmUgYnVpbGQgbW9kZVxuICBsZXQgYnVpbGRNb2RlOiBCdWlsZE1vZGU7XG4gIGlmIChvcHRpb25zLmJ1aWxkU2VydmVyKSB7XG4gICAgYnVpbGRNb2RlID0gJ3NlcnZlcic7XG4gIH0gZWxzZSBpZiAob3B0aW9ucy5idWlsZExvY2FsKSB7XG4gICAgYnVpbGRNb2RlID0gJ2xvY2FsJztcbiAgfSBlbHNlIHtcbiAgICBidWlsZE1vZGUgPSBjb25maWcuZGVmYXVsdEJ1aWxkTW9kZSB8fCAnbG9jYWwnO1xuICB9XG5cbiAgbG9nZ2VyLmJsYW5rKCk7XG4gIGxvZ2dlci5pbmZvKGBQcm9qZWN0OiAke3Byb2plY3ROYW1lfWApO1xuICBsb2dnZXIuaW5mbyhgVHlwZTogJHtwcm9qZWN0VHlwZX1gKTtcbiAgbG9nZ2VyLmluZm8oYEJ1aWxkIG1vZGU6ICR7YnVpbGRNb2RlfWApO1xuICBpZiAob3B0aW9ucy52ZXJzaW9uKSB7XG4gICAgbG9nZ2VyLmluZm8oYFZlcnNpb246ICR7b3B0aW9ucy52ZXJzaW9ufWApO1xuICB9XG4gIGxvZ2dlci5ibGFuaygpO1xuXG4gIC8vIENvbmZpcm0gZGVwbG95bWVudFxuICBjb25zdCB7IGNvbmZpcm0gfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAge1xuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgbmFtZTogJ2NvbmZpcm0nLFxuICAgICAgbWVzc2FnZTogJ1Byb2NlZWQgd2l0aCBkZXBsb3ltZW50PycsXG4gICAgICBkZWZhdWx0OiB0cnVlLFxuICAgIH0sXG4gIF0pO1xuXG4gIGlmICghY29uZmlybSkge1xuICAgIGxvZ2dlci53YXJuKCdEZXBsb3ltZW50IGNhbmNlbGxlZC4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuYmxhbmsoKTtcblxuICAvLyBTdGVwIDE6IEJ1aWxkIChmb3IgbG9jYWwtYnVpbGQgbW9kZSlcbiAgbGV0IGJ1aWxkT3V0cHV0RGlyID0gZGV0ZWN0ZWRQcm9qZWN0LmJ1aWxkT3V0cHV0RGlyO1xuXG4gIGlmIChidWlsZE1vZGUgPT09ICdsb2NhbCcpIHtcbiAgICBsb2dnZXIuc3RlcCgxLCA0LCAnQnVpbGRpbmcgcHJvamVjdC4uLicpO1xuXG4gICAgLy8gUGF0Y2ggZnJhbWV3b3JrIGNvbmZpZ3MgYmVmb3JlIGJ1aWxkIChpbmplY3QgYmFzZVBhdGggZm9yIHN1YnBhdGggcm91dGluZylcbiAgICBsZXQgZGlkUGF0Y2hSZWFjdCA9IGZhbHNlO1xuICAgIGxldCBkaWRQYXRjaE5leHQgPSBmYWxzZTtcblxuICAgIGlmIChwcm9qZWN0VHlwZSA9PT0gJ3JlYWN0Jykge1xuICAgICAgY29uc3QgeyBSZWFjdFBhdGNoZXIgfSA9IGF3YWl0IGltcG9ydCgnLi4vc2VydmljZXMvcmVhY3RQYXRjaGVyJyk7XG4gICAgICBkaWRQYXRjaFJlYWN0ID0gYXdhaXQgUmVhY3RQYXRjaGVyLnBhdGNoKHByb2Nlc3MuY3dkKCkpO1xuICAgIH0gZWxzZSBpZiAocHJvamVjdFR5cGUgPT09ICduZXh0Jykge1xuICAgICAgY29uc3QgeyBOZXh0UGF0Y2hlciB9ID0gYXdhaXQgaW1wb3J0KCcuLi9zZXJ2aWNlcy9uZXh0UGF0Y2hlcicpO1xuICAgICAgZGlkUGF0Y2hOZXh0ID0gYXdhaXQgTmV4dFBhdGNoZXIucGF0Y2gocHJvY2Vzcy5jd2QoKSwgcHJvamVjdE5hbWUpO1xuICAgIH1cblxuICAgIGxldCBidWlsZFJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgYnVpbGRSZXN1bHQgPSBhd2FpdCBidWlsZFNlcnZpY2UuYnVpbGQoe1xuICAgICAgICBwcm9qZWN0UGF0aDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgICAgcHJvamVjdFR5cGUsXG4gICAgICAgIHByb2plY3ROYW1lLFxuICAgICAgICBwYWNrYWdlTWFuYWdlcjogZGV0ZWN0ZWRQcm9qZWN0LnBhY2thZ2VNYW5hZ2VyLFxuICAgICAgICBlbnZGaWxlOiBlbnZGaWxlUGF0aCxcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBBbHdheXMgcmV2ZXJ0IHBhdGNoZXMgYWZ0ZXIgYnVpbGQgKGtlZXAgdXNlcidzIHNvdXJjZSBjbGVhbilcbiAgICAgIGlmIChkaWRQYXRjaFJlYWN0KSB7XG4gICAgICAgIGNvbnN0IHsgUmVhY3RQYXRjaGVyIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3NlcnZpY2VzL3JlYWN0UGF0Y2hlcicpO1xuICAgICAgICBhd2FpdCBSZWFjdFBhdGNoZXIucmV2ZXJ0KHByb2Nlc3MuY3dkKCkpO1xuICAgICAgfVxuICAgICAgaWYgKGRpZFBhdGNoTmV4dCkge1xuICAgICAgICBjb25zdCB7IE5leHRQYXRjaGVyIH0gPSBhd2FpdCBpbXBvcnQoJy4uL3NlcnZpY2VzL25leHRQYXRjaGVyJyk7XG4gICAgICAgIGF3YWl0IE5leHRQYXRjaGVyLnJldmVydChwcm9jZXNzLmN3ZCgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWJ1aWxkUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgQnVpbGQgZmFpbGVkOiAke2J1aWxkUmVzdWx0LmVycm9yfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGJ1aWxkT3V0cHV0RGlyID0gYnVpbGRSZXN1bHQub3V0cHV0RGlyO1xuICAgIGxvZ2dlci5zdWNjZXNzKGBCdWlsZCBjb21wbGV0ZWQgaW4gJHsoYnVpbGRSZXN1bHQuZHVyYXRpb24gLyAxMDAwKS50b0ZpeGVkKDEpfXNgKTtcbiAgICBsb2dnZXIuYmxhbmsoKTtcbiAgfVxuXG4gIC8vIFN0ZXAgMjogUGFja2FnZVxuICBjb25zdCBwYWNrYWdlU3RlcCA9IGJ1aWxkTW9kZSA9PT0gJ2xvY2FsJyA/IDIgOiAxO1xuICBjb25zdCB0b3RhbFN0ZXBzID0gYnVpbGRNb2RlID09PSAnbG9jYWwnID8gNCA6IDM7XG5cbiAgbG9nZ2VyLnN0ZXAocGFja2FnZVN0ZXAsIHRvdGFsU3RlcHMsICdDcmVhdGluZyBkZXBsb3ltZW50IHBhY2thZ2UuLi4nKTtcblxuICBsZXQgcGFja2FnZVJlc3VsdDtcbiAgdHJ5IHtcbiAgICBwYWNrYWdlUmVzdWx0ID0gYXdhaXQgcGFja2FnZVNlcnZpY2UucGFja2FnZSh7XG4gICAgICBwcm9qZWN0UGF0aDogcHJvY2Vzcy5jd2QoKSxcbiAgICAgIHByb2plY3RUeXBlLFxuICAgICAgYnVpbGRPdXRwdXREaXIsXG4gICAgICBpbmNsdWRlU291cmNlOiBidWlsZE1vZGUgPT09ICdzZXJ2ZXInLFxuICAgICAgZW52RmlsZTogcHJvamVjdFR5cGUgPT09ICdub2RlJyA/IGVudkZpbGVQYXRoIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcihgUGFja2FnaW5nIGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2dnZXIuYmxhbmsoKTtcblxuICAvLyBTdGVwIDM6IEFuYWx5emUgJiBVcGxvYWRcbiAgbG9nZ2VyLnN0ZXAocGFja2FnZVN0ZXAgKyAxLCB0b3RhbFN0ZXBzLCAnQW5hbHl6aW5nIGFuZCB1cGxvYWRpbmcgdG8gc2VydmVyLi4uJyk7XG5cbiAgbGV0IHVwbG9hZFNlcnZpY2U7XG4gIHRyeSB7XG4gICAgdXBsb2FkU2VydmljZSA9IGNyZWF0ZVVwbG9hZFNlcnZpY2UoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicpO1xuICAgIHBhY2thZ2VTZXJ2aWNlLmNsZWFudXAocGFja2FnZVJlc3VsdC56aXBQYXRoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBBbmFseXplIHBhY2thZ2UgZmlyc3QgKGZvciBzZXJ2ZXItYnVpbGQgbW9kZSB0byBnZXQgd2FybmluZ3MpXG4gIGxldCBjb25maXJtU2VydmVyQnVpbGQgPSBmYWxzZTtcbiAgaWYgKGJ1aWxkTW9kZSA9PT0gJ3NlcnZlcicpIHtcbiAgICBjb25zdCBhbmFseXplUmVzdWx0ID0gYXdhaXQgdXBsb2FkU2VydmljZS5hbmFseXplUGFja2FnZShwYWNrYWdlUmVzdWx0LnppcFBhdGgsIHByb2plY3RUeXBlKTtcblxuICAgIGlmIChhbmFseXplUmVzdWx0LnN1Y2Nlc3MgJiYgYW5hbHl6ZVJlc3VsdC5hbmFseXNpcykge1xuICAgICAgY29uc3QgYW5hbHlzaXMgPSBhbmFseXplUmVzdWx0LmFuYWx5c2lzO1xuXG4gICAgICAvLyBEaXNwbGF5IHdhcm5pbmdzXG4gICAgICBpZiAoYW5hbHlzaXMud2FybmluZ3MgJiYgYW5hbHlzaXMud2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ1NlcnZlciBBbmFseXNpczonKTtcbiAgICAgICAgZm9yIChjb25zdCB3YXJuaW5nIG9mIGFuYWx5c2lzLndhcm5pbmdzKSB7XG4gICAgICAgICAgY29uc3QgcHJlZml4ID0gd2FybmluZy5sZXZlbCA9PT0gJ2NyaXRpY2FsJyA/ICfinYwnIDogd2FybmluZy5sZXZlbCA9PT0gJ3dhcm5pbmcnID8gJ+KaoO+4jycgOiAn4oS577iPJztcbiAgICAgICAgICBsb2dnZXIuZGltKGAgICR7cHJlZml4fSAke3dhcm5pbmcubWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgIH1cblxuICAgICAgLy8gSGFuZGxlIGNvbmZpcm1hdGlvbiBmb3Igc2VydmVyLXNpZGUgYnVpbGRcbiAgICAgIGlmIChhbmFseXNpcy5yZXF1aXJlc0NvbmZpcm1hdGlvbikge1xuICAgICAgICBjb25zdCB7IGNvbmZpcm1CdWlsZCB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICAgICAgICBuYW1lOiAnY29uZmlybUJ1aWxkJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGAke2FuYWx5c2lzLmNvbmZpcm1hdGlvblJlYXNvbiB8fCAnU2VydmVyLXNpZGUgYnVpbGQgcmVxdWlyZWQnfS4gVGhpcyBtYXkgY29uc3VtZSBzaWduaWZpY2FudCByZXNvdXJjZXMuIENvbnRpbnVlP2AsXG4gICAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGlmICghY29uZmlybUJ1aWxkKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oJ0RlcGxveW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXIuJyk7XG4gICAgICAgICAgcGFja2FnZVNlcnZpY2UuY2xlYW51cChwYWNrYWdlUmVzdWx0LnppcFBhdGgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25maXJtU2VydmVyQnVpbGQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHVwbG9hZFJlc3VsdCA9IGF3YWl0IHVwbG9hZFNlcnZpY2UudXBsb2FkKHtcbiAgICB6aXBQYXRoOiBwYWNrYWdlUmVzdWx0LnppcFBhdGgsXG4gICAgcHJvamVjdE5hbWUsXG4gICAgcHJvamVjdFR5cGUsXG4gICAgdmVyc2lvbjogb3B0aW9ucy52ZXJzaW9uLFxuICAgIGJ1aWxkTW9kZSxcbiAgICBjb25maXJtU2VydmVyQnVpbGQsXG4gICAgLy8gRU5WIG11dGFiaWxpdHkgdHJhY2tpbmdcbiAgICBkZXBsb3ltZW50U291cmNlOiAnY2xpJyxcbiAgICBlbnZJbmplY3RlZCxcbiAgfSk7XG5cbiAgLy8gQ2xlYW51cCB6aXAgZmlsZVxuICBwYWNrYWdlU2VydmljZS5jbGVhbnVwKHBhY2thZ2VSZXN1bHQuemlwUGF0aCk7XG5cbiAgaWYgKCF1cGxvYWRSZXN1bHQuc3VjY2Vzcykge1xuICAgIGxvZ2dlci5lcnJvcihgVXBsb2FkIGZhaWxlZDogJHt1cGxvYWRSZXN1bHQuZXJyb3J9YCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbG9nZ2VyLnN1Y2Nlc3MoJ1VwbG9hZCBjb21wbGV0ZScpO1xuICBsb2dnZXIuYmxhbmsoKTtcblxuICAvLyBTdGVwIDQ6IFdhaXQgZm9yIGRlcGxveW1lbnQgKGlmIGRlcGxveW1lbnQgSUQgYXZhaWxhYmxlKVxuICBpZiAodXBsb2FkUmVzdWx0LmRlcGxveW1lbnRJZCkge1xuICAgIGxvZ2dlci5zdGVwKHBhY2thZ2VTdGVwICsgMiwgdG90YWxTdGVwcywgJ1dhaXRpbmcgZm9yIGRlcGxveW1lbnQgdG8gY29tcGxldGUuLi4nKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaW5hbFN0YXR1cyA9IGF3YWl0IHVwbG9hZFNlcnZpY2UucG9sbERlcGxveW1lbnRTdGF0dXMoXG4gICAgICAgIHVwbG9hZFJlc3VsdC5kZXBsb3ltZW50SWQsXG4gICAgICAgIChzdGF0dXMpID0+IHtcbiAgICAgICAgICBpZiAoc3RhdHVzLnByb2dyZXNzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBcXHIgIFByb2dyZXNzOiAke3N0YXR1cy5wcm9ncmVzc30lYCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnXFxuJyk7XG5cbiAgICAgIGlmIChmaW5hbFN0YXR1cy5zdGF0dXMgPT09ICdzdWNjZXNzJykge1xuICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgICAgbG9nZ2VyLnN1Y2Nlc3MoJ0RlcGxveW1lbnQgc3VjY2Vzc2Z1bCEnKTtcblxuICAgICAgICBjb25zdCBzYWZlTmFtZSA9IHByb2plY3ROYW1lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvW15hLXowLTldL2csICctJyk7XG5cbiAgICAgICAgLy8gRmV0Y2ggZG9tYWluIGNvbmZpZyB0byBzaG93IHByb3BlciBVUkxcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkb21haW5SZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChgJHtjb25maWcuc2VydmVyVXJsfS9hcGkvZG9tYWluYCwge1xuICAgICAgICAgICAgaGVhZGVyczogY29uZmlnLnRva2VuID8geyBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7Y29uZmlnLnRva2VufWAgfSA6IHt9LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IGRvbWFpbkNvbmZpZyA9IGRvbWFpblJlc3BvbnNlLmRhdGE7XG5cbiAgICAgICAgICBpZiAoZG9tYWluQ29uZmlnLmRvbWFpbj8uYWN0aXZlICYmIGRvbWFpbkNvbmZpZy5zZWN1cml0eU1vZGUgPT09ICdkb21haW4taHR0cHMnKSB7XG4gICAgICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgICAgICAgIGxvZ2dlci5pbmZvKGBZb3VyIGFwcCBpcyBhdmFpbGFibGUgYXQ6IGh0dHBzOi8vJHtkb21haW5Db25maWcuZG9tYWluLmRvbWFpbn0vYXBwLyR7c2FmZU5hbWV9YCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ2dlci5ibGFuaygpO1xuICAgICAgICAgICAgbG9nZ2VyLmluZm8oYFlvdXIgYXBwIGlzIGF2YWlsYWJsZSBhdDogJHtjb25maWcuc2VydmVyVXJsfS9hcHAvJHtzYWZlTmFtZX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHNlcnZlciBVUkwgaWYgZG9tYWluIGZldGNoIGZhaWxzXG4gICAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oYFlvdXIgYXBwIGlzIGF2YWlsYWJsZSBhdDogJHtjb25maWcuc2VydmVyVXJsfS9hcHAvJHtzYWZlTmFtZX1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNob3cgaGVhbHRoIHdhcm5pbmcgaWYgc2VydmljZSBkaWRuJ3QgcmVzcG9uZCBvbiBpdHMgYWxsb2NhdGVkIHBvcnRcbiAgICAgICAgaWYgKGZpbmFsU3RhdHVzLmhlYWx0aFdhcm5pbmcpIHtcbiAgICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgICAgICBsb2dnZXIud2Fybihg4pqgICBIZWFsdGggY2hlY2s6ICR7ZmluYWxTdGF0dXMuaGVhbHRoV2FybmluZ31gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKGBEZXBsb3ltZW50IGZhaWxlZDogJHtmaW5hbFN0YXR1cy5lcnJvciB8fCAnVW5rbm93biBlcnJvcid9YCk7XG4gICAgICAgIGlmIChmaW5hbFN0YXR1cy5sb2dzKSB7XG4gICAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgICAgbG9nZ2VyLmRpbSgnTG9nczonKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhmaW5hbFN0YXR1cy5sb2dzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybignQ291bGQgbm90IHRyYWNrIGRlcGxveW1lbnQgc3RhdHVzJyk7XG4gICAgICBsb2dnZXIuZGltKCdDaGVjayB0aGUgd2ViIFVJIGZvciBkZXBsb3ltZW50IHN0YXR1cycpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBObyBkZXBsb3ltZW50SWQgbWVhbnMgc3luY2hyb25vdXMgZGVwbG95IChwcmVidWlsdCkg4oCUIGFscmVhZHkgY29tcGxldGVcbiAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICBsb2dnZXIuc3VjY2VzcygnRGVwbG95bWVudCBzdWNjZXNzZnVsIScpO1xuXG4gICAgY29uc3Qgc2FmZU5hbWUgPSBwcm9qZWN0TmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05XS9nLCAnLScpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRvbWFpblJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KGAke2NvbmZpZy5zZXJ2ZXJVcmx9L2FwaS9kb21haW5gLCB7XG4gICAgICAgIGhlYWRlcnM6IGNvbmZpZy50b2tlbiA/IHsgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke2NvbmZpZy50b2tlbn1gIH0gOiB7fSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZG9tYWluQ29uZmlnID0gZG9tYWluUmVzcG9uc2UuZGF0YTtcblxuICAgICAgaWYgKGRvbWFpbkNvbmZpZy5kb21haW4/LmFjdGl2ZSAmJiBkb21haW5Db25maWcuc2VjdXJpdHlNb2RlID09PSAnZG9tYWluLWh0dHBzJykge1xuICAgICAgICBsb2dnZXIuaW5mbyhgWW91ciBhcHAgaXMgYXZhaWxhYmxlIGF0OiBodHRwczovLyR7ZG9tYWluQ29uZmlnLmRvbWFpbi5kb21haW59L2FwcC8ke3NhZmVOYW1lfWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oYFlvdXIgYXBwIGlzIGF2YWlsYWJsZSBhdDogJHtjb25maWcuc2VydmVyVXJsfS9hcHAvJHtzYWZlTmFtZX1gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBZb3VyIGFwcCBpcyBhdmFpbGFibGUgYXQ6ICR7Y29uZmlnLnNlcnZlclVybH0vYXBwLyR7c2FmZU5hbWV9YCk7XG4gICAgfVxuICB9XG5cbiAgbG9nZ2VyLmJsYW5rKCk7XG59XG4iXX0=
@@ -82,10 +82,17 @@ async function initCommand(options) {
82
82
  return;
83
83
  }
84
84
  // Display security info
85
- if (securityInfo.securityMode === 'domain-https') {
85
+ const isConnectionSecure = serverUrl.startsWith('https://');
86
+ if (securityInfo.securityMode === 'domain-https' && isConnectionSecure) {
86
87
  logger_1.logger.success(`Server has HTTPS enabled: ${securityInfo.domain}`);
87
88
  logger_1.logger.dim('Authentication will use secure TLS connection.');
88
89
  }
90
+ else if (securityInfo.securityMode === 'domain-https' && !isConnectionSecure) {
91
+ logger_1.logger.warn(`Server has HTTPS available (${securityInfo.domain}) but you're connecting via HTTP`);
92
+ logger_1.logger.dim(`Consider using https://${securityInfo.domain} instead of ${serverUrl}`);
93
+ logger_1.logger.dim('Current connection is NOT encrypted.');
94
+ logger_1.logger.blank();
95
+ }
89
96
  else {
90
97
  logger_1.logger.warn('Server is running in HTTP mode (no domain configured)');
91
98
  logger_1.logger.dim('Authentication will use RSA key exchange (MITM vulnerable).');
@@ -273,4 +280,4 @@ async function legacyAuth(serverUrl) {
273
280
  }
274
281
  }
275
282
  }
276
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9pbml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBVUEsa0NBc0xDO0FBaE1ELHdEQUFnQztBQUNoQyxrREFBMEI7QUFDMUIsNENBQXFGO0FBQ3JGLDRDQUF5QztBQUN6Qyx5REFBc0Q7QUFNL0MsS0FBSyxVQUFVLFdBQVcsQ0FBQyxPQUFvQjtJQUNwRCxlQUFNLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFFbEMsOEJBQThCO0lBQzlCLElBQUksSUFBQSxxQkFBWSxHQUFFLEVBQUUsQ0FBQztRQUNuQixNQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFTLEdBQUUsQ0FBQztRQUMzQixlQUFNLENBQUMsSUFBSSxDQUFDLDRCQUE0QixNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUM1RCxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixlQUFNLENBQUMsR0FBRyxDQUFDLGtCQUFrQixNQUFNLENBQUMsWUFBWSxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUMvRyxDQUFDO1FBRUQsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sa0JBQVEsQ0FBQyxNQUFNLENBQUM7WUFDNUM7Z0JBQ0UsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLE9BQU8sRUFBRSw2QkFBNkI7Z0JBQ3RDLE9BQU8sRUFBRSxLQUFLO2FBQ2Y7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsZUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQ3hDLE9BQU87UUFDVCxDQUFDO0lBQ0gsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixJQUFJLFNBQVMsR0FBRyxPQUFPLENB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WUFDTixlQUFNLENBQUMsS0FBSyxDQUFDLHlCQUF5QixHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQztRQUNyRixDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLGVBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5QixlQUFNLENBQUMsS0FBSyxDQUFDLHlCQUF5QixHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzNGLENBQUM7YUFBTSxDQUFDO1lBQ04sZUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDdkcsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGlucXVpcmVyIGZyb20gJ2lucXVpcmVyJztcbmltcG9ydCBheGlvcyBmcm9tICdheGlvcyc7XG5pbXBvcnQgeyBzZXRTZXJ2ZXJVcmwsIHNldEF1dGhEYXRhLCBnZXRDb25maWcsIGlzQ29uZmlndXJlZCB9IGZyb20gJy4uL3V0aWxzL2NvbmZpZyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi91dGlscy9sb2dnZXInO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9hdXRoU2VydmljZSc7XG5cbmludGVyZmFjZSBJbml0T3B0aW9ucyB7XG4gIHNlcnZlcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRDb21tYW5kKG9wdGlvbnM6IEluaXRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxvZ2dlci5oZWFkZXIoJ1J1bndheSBDTEkgU2V0dXAnKTtcblxuICAvLyBDaGVjayBpZiBhbHJlYWR5IGNvbmZpZ3VyZWRcbiAgaWYgKGlzQ29uZmlndXJlZCgpKSB7XG4gICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gICAgbG9nZ2VyLmluZm8oYEN1cnJlbnRseSBjb25maWd1cmVkIHRvOiAke2NvbmZpZy5zZXJ2ZXJVcmx9YCk7XG4gICAgaWYgKGNvbmZpZy5zZWN1cml0eU1vZGUpIHtcbiAgICAgIGxvZ2dlci5kaW0oYFNlY3VyaXR5IG1vZGU6ICR7Y29uZmlnLnNlY3VyaXR5TW9kZSA9PT0gJ2RvbWFpbi1odHRwcycgPyAnSFRUUFMgKHNlY3VyZSknIDogJ0hUVFAgKGxpbWl0ZWQpJ31gKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IHJlY29uZmlndXJlIH0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnY29uZmlybScsXG4gICAgICAgIG5hbWU6ICdyZWNvbmZpZ3VyZScsXG4gICAgICAgIG1lc3NhZ2U6ICdEbyB5b3Ugd2FudCB0byByZWNvbmZpZ3VyZT8nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgXSk7XG5cbiAgICBpZiAoIXJlY29uZmlndXJlKSB7XG4gICAgICBsb2dnZXIuaW5mbygnQ29uZmlndXJhdGlvbiB1bmNoYW5nZWQuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLy8gR2V0IHNlcnZlciBVUkxcbiAgbGV0IHNlcnZlclVybCA9IG9wdGlvbnMuc2VydmVyO1xuXG4gIGlmICghc2VydmVyVXJsKSB7XG4gICAgY29uc3QgYW5zd2VycyA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIG5hbWU6ICdzZXJ2ZXJVcmwnLFxuICAgICAgICBtZXNzYWdlOiAnRW50ZXIgeW91ciBSdW53YXkgc2VydmVyIFVSTDonLFxuICAgICAgICBkZWZhdWx0OiAnaHR0cHM6Ly9kZXBsb3kuZXhhbXBsZS5jb20nLFxuICAgICAgICB2YWxpZGF0ZTogKGlucHV0OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IFVSTChpbnB1dCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiAnUGxlYXNlIGVudGVyIGEgdmFsaWQgVVJMJztcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICAgIHNlcnZlclVybCA9IGFuc3dlcnMuc2VydmVyVXJsIGFzIHN0cmluZztcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBVUkxcbiAgc2VydmVyVXJsID0gc2VydmVyVXJsIS5yZXBsYWNlKC9cXC8rJC8sICcnKTtcblxuICAvLyBUZXN0IGNvbm5lY3Rpb25cbiAgbG9nZ2VyLmluZm8oJ1Rlc3RpbmcgY29ubmVjdGlvbi4uLicpO1xuICB0cnkge1xuICAgIGF3YWl0IGF4aW9zLmdldChgJHtzZXJ2ZXJVcmx9L2hlYWx0aGAsIHsgdGltZW91dDogMTAwMDAgfSk7XG4gICAgbG9nZ2VyLnN1Y2Nlc3MoJ1NlcnZlciBpcyByZWFjaGFibGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoYENhbm5vdCByZWFjaCBzZXJ2ZXIgYXQgJHtzZXJ2ZXJVcmx9YCk7XG4gICAgbG9nZ2VyLmRpbSgnTWFrZSBzdXJlIHRoZSBzZXJ2ZXIgaXMgcnVubmluZyBhbmQgdGhlIFVSTCBpcyBjb3JyZWN0LicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIEluaXRpYWxpemUgYXV0aCBzZXJ2aWNlXG4gIGNvbnN0IGF1dGhTZXJ2aWNlID0gbmV3IEF1dGhTZXJ2aWNlKHNlcnZlclVybCk7XG5cbiAgLy8gQ2hlY2sgc2VjdXJpdHkgbW9kZVxuICBsb2dnZXIuaW5mbygnQ2hlY2tpbmcgc2VydmVyIHNlY3VyaXR5IG1vZGUuLi4nKTtcbiAgbGV0IHNlY3VyaXR5SW5mbztcbiAgdHJ5IHtcbiAgICBzZWN1cml0eUluZm8gPSBhd2FpdCBhdXRoU2VydmljZS5nZXRTZWN1cml0eU1vZGUoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgc2VydmVyIHNlY3VyaXR5IG1vZGUnKTtcbiAgICBsb2dnZXIuZGltKCdUaGUgc2VydmVyIG1heSBiZSBydW5uaW5nIGFuIG9sZGVyIHZlcnNpb24gd2l0aG91dCBDTEkgYXV0aCBzdXBwb3J0LicpO1xuICAgIGxvZ2dlci5kaW0oJ0ZhbGxpbmcgYmFjayB0byBsZWdhY3kgYXV0aGVudGljYXRpb24uLi4nKTtcbiAgICBhd2FpdCBsZWdhY3lBdXRoKHNlcnZlclVybCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGlzcGxheSBzZWN1cml0eSBpbmZvXG4gIGlmIChzZWN1cml0eUluZm8uc2VjdXJpdHlNb2RlID09PSAnZG9tYWluLWh0dHBzJykge1xuICAgIGxvZ2dlci5zdWNjZXNzKGBTZXJ2ZXIgaGFzIEhUVFBTIGVuYWJsZWQ6ICR7c2VjdXJpdHlJbmZvLmRvbWFpbn1gKTtcbiAgICBsb2dnZXIuZGltKCdBdXRoZW50aWNhdGlvbiB3aWxsIHVzZSBzZWN1cmUgVExTIGNvbm5lY3Rpb24uJyk7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLndhcm4oJ1NlcnZlciBpcyBydW5uaW5nIGluIEhUVFAgbW9kZSAobm8gZG9tYWluIGNvbmZpZ3VyZWQpJyk7XG4gICAgbG9nZ2VyLmRpbSgnQXV0aGVudGljYXRpb24gd2lsbCB1c2UgUlNBIGtleSBleGNoYW5nZSAoTUlUTSB2dWxuZXJhYmxlKS4nKTtcbiAgICBsb2dnZXIuYmxhbmsoKTtcblxuICAgIGNvbnN0IHsgcHJvY2VlZCB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgICBuYW1lOiAncHJvY2VlZCcsXG4gICAgICAgIG1lc3NhZ2U6ICdDb250aW51ZSB3aXRoIFJTQSBhdXRoZW50aWNhdGlvbj8nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIGlmICghcHJvY2VlZCkge1xuICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICBsb2dnZXIuaW5mbygnVG8gZW5hYmxlIHNlY3VyZSBhdXRoZW50aWNhdGlvbjonKTtcbiAgICAgIGxvZ2dlci5kaW0oJyAgMS4gQ29uZmlndXJlIGEgZG9tYWluIG9uIHlvdXIgUnVud2F5IHNlcnZlcicpO1xuICAgICAgbG9nZ2VyLmRpbSgnICAyLiBFbmFibGUgSFRUUFMgdGhyb3VnaCB0aGUgU2V0dGluZ3MgcGFnZScpO1xuICAgICAgbG9nZ2VyLmRpbSgnICAzLiBSdW4gYHJ1bndheSBpbml0YCBhZ2FpbicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldCBjcmVkZW50aWFsc1xuICBsb2dnZXIuYmxhbmsoKTtcbiAgY29uc3QgY3JlZGVudGlhbHMgPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgIHtcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBuYW1lOiAndXNlcm5hbWUnLFxuICAgICAgbWVzc2FnZTogJ1VzZXJuYW1lOicsXG4gICAgICB2YWxpZGF0ZTogKGlucHV0OiBzdHJpbmcpID0+IGlucHV0Lmxlbmd0aCA+IDAgfHwgJ1VzZXJuYW1lIGlzIHJlcXVpcmVkJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6ICdwYXNzd29yZCcsXG4gICAgICBuYW1lOiAncGFzc3dvcmQnLFxuICAgICAgbWVzc2FnZTogJ1Bhc3N3b3JkOicsXG4gICAgICB2YWxpZGF0ZTogKGlucHV0OiBzdHJpbmcpID0+IGlucHV0Lmxlbmd0aCA+IDAgfHwgJ1Bhc3N3b3JkIGlzIHJlcXVpcmVkJyxcbiAgICB9LFxuICBdKTtcblxuICAvLyBBdXRoZW50aWNhdGUgdXNpbmcgdGhlIGF1dGggc2VydmljZVxuICBsb2dnZXIuaW5mbygnQXV0aGVudGljYXRpbmcuLi4nKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBhdXRoUmVzdWx0ID0gYXdhaXQgYXV0aFNlcnZpY2UuYXV0aGVudGljYXRlKFxuICAgICAgY3JlZGVudGlhbHMudXNlcm5hbWUsXG4gICAgICBjcmVkZW50aWFscy5wYXNzd29yZFxuICAgICk7XG5cbiAgICAvLyBDaGVjayBpZiBwYXNzd29yZCByZXNldCBpcyByZXF1aXJlZFxuICAgIGlmIChhdXRoUmVzdWx0Lm11c3RSZXNldFBhc3N3b3JkKSB7XG4gICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgIGxvZ2dlci53YXJuKCfimqDvuI8gIFBhc3N3b3JkIHJlc2V0IHJlcXVpcmVkJyk7XG4gICAgICBsb2dnZXIuaW5mbygnWW91IGFyZSB1c2luZyB0aGUgZGVmYXVsdCBwYXNzd29yZC4gUGxlYXNlIHNldCBhIG5ldyBwYXNzd29yZCB0byBjb250aW51ZS4nKTtcbiAgICAgIGxvZ2dlci5ibGFuaygpO1xuXG4gICAgICAvLyBQcm9tcHQgZm9yIG5ldyBwYXNzd29yZFxuICAgICAgY29uc3QgcmVzZXRSZXN1bHQgPSBhd2FpdCBwcm9tcHRQYXNzd29yZFJlc2V0KGF1dGhTZXJ2aWNlLCBjcmVkZW50aWFscy5wYXNzd29yZCk7XG5cbiAgICAgIGlmIChyZXNldFJlc3VsdCkge1xuICAgICAgICAvLyBTYXZlIGNvbmZpZ3VyYXRpb24gd2l0aCBuZXcgdG9rZW5cbiAgICAgICAgc2V0U2VydmVyVXJsKHNlcnZlclVybCk7XG4gICAgICAgIHNldEF1dGhEYXRhKHJlc2V0UmVzdWx0LnRva2VuLCByZXNldFJlc3VsdC5leHBpcmVzQXQsIHJlc2V0UmVzdWx0LnNlY3VyaXR5TW9kZSk7XG5cbiAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgIGxvZ2dlci5zdWNjZXNzKCdQYXNzd29yZCB1cGRhdGVkIGFuZCBjb25maWd1cmF0aW9uIHNhdmVkIScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVXNlciBza2lwcGVkIHBhc3N3b3JkIHJlc2V0LCBzYXZlIHdpdGggY3VycmVudCB0b2tlbiBidXQgd2FyblxuICAgICAgICBzZXRTZXJ2ZXJVcmwoc2VydmVyVXJsKTtcbiAgICAgICAgc2V0QXV0aERhdGEoYXV0aFJlc3VsdC50b2tlbiwgYXV0aFJlc3VsdC5leHBpcmVzQXQsIGF1dGhSZXN1bHQuc2VjdXJpdHlNb2RlKTtcblxuICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0NvbmZpZ3VyYXRpb24gc2F2ZWQsIGJ1dCBwYXNzd29yZCByZXNldCBpcyBzdGlsbCByZXF1aXJlZC4nKTtcbiAgICAgICAgbG9nZ2VyLmRpbSgnWW91IHdpbGwgYmUgcHJvbXB0ZWQgdG8gcmVzZXQgeW91ciBwYXNzd29yZCBvbiBuZXh0IGxvZ2luLicpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTYXZlIGNvbmZpZ3VyYXRpb24gd2l0aCBhbGwgYXV0aCBkYXRhXG4gICAgICBzZXRTZXJ2ZXJVcmwoc2VydmVyVXJsKTtcbiAgICAgIHNldEF1dGhEYXRhKGF1dGhSZXN1bHQudG9rZW4sIGF1dGhSZXN1bHQuZXhwaXJlc0F0LCBhdXRoUmVzdWx0LnNlY3VyaXR5TW9kZSk7XG5cbiAgICAgIGxvZ2dlci5ibGFuaygpO1xuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoJ0NvbmZpZ3VyYXRpb24gc2F2ZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICAgIH1cblxuICAgIGxvZ2dlci5ibGFuaygpO1xuICAgIGxvZ2dlci5pbmZvKCdZb3UgY2FuIG5vdyBkZXBsb3kgcHJvamVjdHMgd2l0aDonKTtcbiAgICBsb2dnZXIuZGltKCcgIHJ1bndheSBkZXBsb3knKTtcbiAgICBsb2dnZXIuYmxhbmsoKTtcblxuICAgIC8vIFNob3cgdG9rZW4gZXhwaXJ5IHdhcm5pbmcgZm9yIEhUVFAgbW9kZVxuICAgIGlmIChhdXRoUmVzdWx0LnNlY3VyaXR5TW9kZSA9PT0gJ2lwLWh0dHAnKSB7XG4gICAgICBsb2dnZXIud2FybignTm90ZTogVG9rZW4gZXhwaXJlcyBpbiAxNSBtaW51dGVzIGR1ZSB0byBIVFRQIG1vZGUuJyk7XG4gICAgICBsb2dnZXIuZGltKCdSdW4gYHJ1bndheSBpbml0YCB0byByZS1hdXRoZW50aWNhdGUgd2hlbiBuZWVkZWQuJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIEVycm9yIGFscmVhZHkgbG9nZ2VkIGJ5IEF1dGhTZXJ2aWNlXG4gICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgbG9nZ2VyLmRpbSgnQ2hlY2sgeW91ciBjcmVkZW50aWFscyBhbmQgdHJ5IGFnYWluLicpO1xuICB9XG59XG5cbi8qKlxuICogUHJvbXB0IHVzZXIgdG8gcmVzZXQgdGhlaXIgcGFzc3dvcmRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvbXB0UGFzc3dvcmRSZXNldChcbiAgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICBjdXJyZW50UGFzc3dvcmQ6IHN0cmluZ1xuKTogUHJvbWlzZTx7IHRva2VuOiBzdHJpbmc7IGV4cGlyZXNBdDogc3RyaW5nOyBzZWN1cml0eU1vZGU6ICdpcC1odHRwJyB8ICdkb21haW4taHR0cHMnIH0gfCBudWxsPiB7XG4gIGNvbnN0IHsgcmVzZXROb3cgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAge1xuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgbmFtZTogJ3Jlc2V0Tm93JyxcbiAgICAgIG1lc3NhZ2U6ICdXb3VsZCB5b3UgbGlrZSB0byByZXNldCB5b3VyIHBhc3N3b3JkIG5vdz8nLFxuICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB9LFxuICBdKTtcblxuICBpZiAoIXJlc2V0Tm93KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBHZXQgbmV3IHBhc3N3b3JkIHdpdGggY29uZmlybWF0aW9uXG4gIGNvbnN0IG5ld1Bhc3N3b3JkQW5zd2VycyA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAge1xuICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcbiAgICAgIG5hbWU6ICduZXdQYXNzd29yZCcsXG4gICAgICBtZXNzYWdlOiAnRW50ZXIgbmV3IHBhc3N3b3JkIChtaW4uIDYgY2hhcmFjdGVycyk6JyxcbiAgICAgIHZhbGlkYXRlOiAoaW5wdXQ6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoaW5wdXQubGVuZ3RoIDwgNikge1xuICAgICAgICAgIHJldHVybiAnUGFzc3dvcmQgbXVzdCBiZSBhdCBsZWFzdCA2IGNoYXJhY3RlcnMnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6ICdwYXNzd29yZCcsXG4gICAgICBuYW1lOiAnY29uZmlybVBhc3N3b3JkJyxcbiAgICAgIG1lc3NhZ2U6ICdDb25maXJtIG5ldyBwYXNzd29yZDonLFxuICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nLCBhbnN3ZXJzOiB7IG5ld1Bhc3N3b3JkPzogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgaWYgKGlucHV0ICE9PSBhbnN3ZXJzPy5uZXdQYXNzd29yZCkge1xuICAgICAgICAgIHJldHVybiAnUGFzc3dvcmRzIGRvIG5vdCBtYXRjaCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LFxuICAgIH0sXG4gIF0pO1xuXG4gIGxvZ2dlci5pbmZvKCdVcGRhdGluZyBwYXNzd29yZC4uLicpO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc2V0UmVzdWx0ID0gYXdhaXQgYXV0aFNlcnZpY2UucmVzZXRQYXNzd29yZChcbiAgICAgIGN1cnJlbnRQYXNzd29yZCxcbiAgICAgIG5ld1Bhc3N3b3JkQW5zd2Vycy5uZXdQYXNzd29yZFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW46IHJlc2V0UmVzdWx0LnRva2VuLFxuICAgICAgZXhwaXJlc0F0OiByZXNldFJlc3VsdC5leHBpcmVzQXQsXG4gICAgICBzZWN1cml0eU1vZGU6IHJlc2V0UmVzdWx0LnNlY3VyaXR5TW9kZSxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlc2V0IHBhc3N3b3JkLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLicpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogTGVnYWN5IGF1dGhlbnRpY2F0aW9uIGZvciBzZXJ2ZXJzIHdpdGhvdXQgQ0xJIGF1dGggc3VwcG9ydFxuICovXG5hc3luYyBmdW5jdGlvbiBsZWdhY3lBdXRoKHNlcnZlclVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNyZWRlbnRpYWxzID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcbiAgICAgIG1lc3NhZ2U6ICdVc2VybmFtZTonLFxuICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiBpbnB1dC5sZW5ndGggPiAwIHx8ICdVc2VybmFtZSBpcyByZXF1aXJlZCcsXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiAncGFzc3dvcmQnLFxuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcbiAgICAgIG1lc3NhZ2U6ICdQYXNzd29yZDonLFxuICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiBpbnB1dC5sZW5ndGggPiAwIHx8ICdQYXNzd29yZCBpcyByZXF1aXJlZCcsXG4gICAgfSxcbiAgXSk7XG5cbiAgbG9nZ2VyLmluZm8oJ0F1dGhlbnRpY2F0aW5nLi4uJyk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KFxuICAgICAgYCR7c2VydmVyVXJsfS9hcGkvYXV0aC9sb2dpbmAsXG4gICAgICBjcmVkZW50aWFscyxcbiAgICAgIHsgdGltZW91dDogMTAwMDAgfVxuICAgICk7XG5cbiAgICBpZiAocmVzcG9uc2UuZGF0YS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGE/LnRva2VuKSB7XG4gICAgICAvLyBTYXZlIGNvbmZpZ3VyYXRpb24gKGxlZ2FjeSBtb2RlIHdpdGhvdXQgZXhwaXJ5IHRyYWNraW5nKVxuICAgICAgc2V0U2VydmVyVXJsKHNlcnZlclVybCk7XG4gICAgICBzZXRBdXRoRGF0YShyZXNwb25zZS5kYXRhLnRva2VuLCAnJywgJ2lwLWh0dHAnKTtcblxuICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICBsb2dnZXIuc3VjY2VzcygnQ29uZmlndXJhdGlvbiBzYXZlZCBzdWNjZXNzZnVsbHkhJyk7XG4gICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgIGxvZ2dlci5pbmZvKCdZb3UgY2FuIG5vdyBkZXBsb3kgcHJvamVjdHMgd2l0aDonKTtcbiAgICAgIGxvZ2dlci5kaW0oJyAgcnVud2F5IGRlcGxveScpO1xuICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5lcnJvcignQXV0aGVudGljYXRpb24gZmFpbGVkOiAnICsgKHJlc3BvbnNlLmRhdGEuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InKSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChheGlvcy5pc0F4aW9zRXJyb3IoZXJyb3IpKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZDogJyArIChlcnJvci5yZXNwb25zZT8uZGF0YT8uZXJyb3IgfHwgZXJyb3IubWVzc2FnZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZDogJyArIChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJykpO1xuICAgIH1cbiAgfVxufVxuIl19
283
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9pbml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBVUEsa0NBNExDO0FBdE1ELHdEQUFnQztBQUNoQyxrREFBMEI7QUFDMUIsNENBQXFGO0FBQ3JGLDRDQUF5QztBQUN6Qyx5REFBc0Q7QUFNL0MsS0FBSyxVQUFVLFdBQVcsQ0FBQyxPQUFvQjtJQUNwRCxlQUFNLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFFbEMsOEJBQThCO0lBQzlCLElBQUksSUFBQSxxQkFBWSxHQUFFLEVBQUUsQ0FBQztRQUNuQixNQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFTLEdBQUUsQ0FBQztRQUMzQixlQUFNLENBQUMsSUFBSSxDQUFDLDRCQUE0QixNQUFNLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUM1RCxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixlQUFNLENBQUMsR0FBRyxDQUFDLGtCQUFrQixNQUFNLENBQUMsWUFBWSxLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUMvRyxDQUFDO1FBRUQsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sa0JBQVEsQ0FBQyxNQUFNLENBQUM7WUFDNUM7Z0JBQ0UsSUFBSSxFQUFFLFNBQVM7Z0JBQ2YsSUFBSSxFQUFFLGFBQWE7Z0JBQ25CLE9BQU8sRUFBRSw2QkFBNkI7Z0JBQ3RDLE9BQU8sRUFBRSxLQUFLO2FBQ2Y7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDakIsZUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1lBQ3hDLE9BQU87UUFDVCxDQUFDO0lBQ0gsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0lBRS9CLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE1BQU0sT0FBTyxHQUFHLE1BQU0sa0JBQVEsQ0FBQyxNQUFNLENBQUM7WUFDcEM7Z0JBQ0UsSUFBSSxFQUFFLE9BQU87Z0JBQ2IsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLE9BQU8sRUFBRSwrQkFBK0I7Z0JBQ3hDLE9BQU8sRUFBRSw0QkFBNEI7Z0JBQ3JDLFFBQVEsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFO29CQUMxQixJQUFJLENBQUM7d0JBQ0gsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ2YsT0FBTyxJQUFJLENBQUM7b0JBQ2QsQ0FBQztvQkFBQyxNQUFNLENBQUM7d0JBQ1AsT0FBTywwQkFBMEIsQ0FBQztvQkFDcEMsQ0FBQztnQkFDSCxDQUFDO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFDSCxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQW1CLENBQUM7SUFDMUMsQ0FBQztJQUVELGdCQUFnQjtJQUNoQixTQUFTLEdBQUcsU0FBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFM0Msa0JBQWtCO0lBQ2xCLGVBQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztJQUNyQyxJQUFJLENBQUM7UUFDSCxNQUFNLGVBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLFNBQVMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzNELGVBQU0sQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLGVBQU0sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDcEQsZUFBTSxDQUFDLEdBQUcsQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO1FBQ3RFLE9BQU87SUFDVCxDQUFDO0lBRUQsMEJBQTBCO0lBQzFCLE1BQU0sV0FBVyxHQUFHLElBQUkseUJBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUUvQyxzQkFBc0I7SUFDdEIsZUFBTSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0lBQ2hELElBQUksWUFBWSxDQUFDO0lBQ2pCLElBQUksQ0FBQztRQUNILFlBQVksR0FBRyxNQUFNLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLGVBQU0sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUNuRCxlQUFNLENBQUMsR0FBRyxDQUFDLHNFQUFzRSxDQUFDLENBQUM7UUFDbkYsZUFBTSxDQUFDLEdBQUcsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVCLE9BQU87SUFDVCxDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLE1BQU0sa0JBQWtCLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM1RCxJQUFJLFlBQVksQ0FBQyxZQUFZLEtBQUssY0FBYyxJQUFJLGtCQUFrQixFQUFFLENBQUM7UUFDdkUsZUFBTSxDQUFDLE9BQU8sQ0FBQyw2QkFBNkIsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDbkUsZUFBTSxDQUFDLEdBQUcsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0lBQy9ELENBQUM7U0FBTSxJQUFJLFlBQVksQ0FBQyxZQUFZLEtBQUssY0FBYyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMvRSxlQUFNLENBQUMsSUFBSSxDQUFDLCtCQUErQixZQUFZLENBQUMsTUFBTSxrQ0FBa0MsQ0FBQyxDQUFDO1FBQ2xHLGVBQU0sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLFlBQVksQ0FBQyxNQUFNLGVBQWUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUNwRixlQUFNLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDbkQsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pCLENBQUM7U0FBTSxDQUFDO1FBQ04sZUFBTSxDQUFDLElBQUksQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQ3JFLGVBQU0sQ0FBQyxHQUFHLENBQUMsNkRBQTZELENBQUMsQ0FBQztRQUMxRSxlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFZixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxrQkFBUSxDQUFDLE1BQU0sQ0FBQztZQUN4QztnQkFDRSxJQUFJLEVBQUUsU0FBUztnQkFDZixJQUFJLEVBQUUsU0FBUztnQkFDZixPQUFPLEVBQUUsbUNBQW1DO2dCQUM1QyxPQUFPLEVBQUUsSUFBSTthQUNkO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsZUFBTSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1lBQ2hELGVBQU0sQ0FBQyxHQUFHLENBQUMsK0NBQStDLENBQUMsQ0FBQztZQUM1RCxlQUFNLENBQUMsR0FBRyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7WUFDMUQsZUFBTSxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1lBQzNDLE9BQU87UUFDVCxDQUFDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixNQUFNLFdBQVcsR0FBRyxNQUFNLGtCQUFRLENBQUMsTUFBTSxDQUFDO1FBQ3hDO1lBQ0UsSUFBSSxFQUFFLE9BQU87WUFDYixJQUFJLEVBQUUsVUFBVTtZQUNoQixPQUFPLEVBQUUsV0FBVztZQUNwQixRQUFRLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLHNCQUFzQjtTQUN4RTtRQUNEO1lBQ0UsSUFBSSxFQUFFLFVBQVU7WUFDaEIsSUFBSSxFQUFFLFVBQVU7WUFDaEIsT0FBTyxFQUFFLFdBQVc7WUFDcEIsUUFBUSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxzQkFBc0I7U0FDeEU7S0FDRixDQUFDLENBQUM7SUFFSCxzQ0FBc0M7SUFDdEMsZUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQztRQUNILE1BQU0sVUFBVSxHQUFHLE1BQU0sV0FBVyxDQUFDLFlBQVksQ0FDL0MsV0FBVyxDQUFDLFFBQVEsRUFDcEIsV0FBVyxDQUFDLFFBQVEsQ0FDckIsQ0FBQztRQUVGLHNDQUFzQztRQUN0QyxJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2pDLGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLGVBQU0sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUMzQyxlQUFNLENBQUMsSUFBSSxDQUFDLDRFQUE0RSxDQUFDLENBQUM7WUFDMUYsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRWYsMEJBQTBCO1lBQzFCLE1BQU0sV0FBVyxHQUFHLE1BQU0sbUJBQW1CLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVqRixJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNoQixvQ0FBb0M7Z0JBQ3BDLElBQUEscUJBQVksRUFBQyxTQUFTLENBQUMsQ0FBQztnQkFDeEIsSUFBQSxvQkFBVyxFQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBRWhGLGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDZixlQUFNLENBQUMsT0FBTyxDQUFDLDJDQUEyQyxDQUFDLENBQUM7WUFDOUQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGdFQUFnRTtnQkFDaEUsSUFBQSxxQkFBWSxFQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN4QixJQUFBLG9CQUFXLEVBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFFN0UsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNmLGVBQU0sQ0FBQyxJQUFJLENBQUMsNERBQTRELENBQUMsQ0FBQztnQkFDMUUsZUFBTSxDQUFDLEdBQUcsQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO1lBQzNFLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLHdDQUF3QztZQUN4QyxJQUFBLHFCQUFZLEVBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEIsSUFBQSxvQkFBVyxFQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFN0UsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsZUFBTSxDQUFDLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ3RELENBQUM7UUFFRCxlQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZixlQUFNLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDakQsZUFBTSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzlCLGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUVmLDBDQUEwQztRQUMxQyxJQUFJLFVBQVUsQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUMsZUFBTSxDQUFDLElBQUksQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO1lBQ25FLGVBQU0sQ0FBQyxHQUFHLENBQUMsbURBQW1ELENBQUMsQ0FBQztRQUNsRSxDQUFDO0lBQ0gsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixzQ0FBc0M7UUFDdEMsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsZUFBTSxDQUFDLEdBQUcsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxLQUFLLFVBQVUsbUJBQW1CLENBQ2hDLFdBQXdCLEVBQ3hCLGVBQXVCO0lBRXZCLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLGtCQUFRLENBQUMsTUFBTSxDQUFDO1FBQ3pDO1lBQ0UsSUFBSSxFQUFFLFNBQVM7WUFDZixJQUFJLEVBQUUsVUFBVTtZQUNoQixPQUFPLEVBQUUsNENBQTRDO1lBQ3JELE9BQU8sRUFBRSxJQUFJO1NBQ2Q7S0FDRixDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxxQ0FBcUM7SUFDckMsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLGtCQUFRLENBQUMsTUFBTSxDQUFDO1FBQy9DO1lBQ0UsSUFBSSxFQUFFLFVBQVU7WUFDaEIsSUFBSSxFQUFFLGFBQWE7WUFDbkIsT0FBTyxFQUFFLHlDQUF5QztZQUNsRCxRQUFRLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRTtnQkFDMUIsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNyQixPQUFPLHdDQUF3QyxDQUFDO2dCQUNsRCxDQUFDO2dCQUNELE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztTQUNGO1FBQ0Q7WUFDRSxJQUFJLEVBQUUsVUFBVTtZQUNoQixJQUFJLEVBQUUsaUJBQWlCO1lBQ3ZCLE9BQU8sRUFBRSx1QkFBdUI7WUFDaEMsUUFBUSxFQUFFLENBQUMsS0FBYSxFQUFFLE9BQWlDLEVBQUUsRUFBRTtnQkFDN0QsSUFBSSxLQUFLLEtBQUssT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO29CQUNuQyxPQUFPLHdCQUF3QixDQUFDO2dCQUNsQyxDQUFDO2dCQUNELE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztTQUNGO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsZUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQ3BDLElBQUksQ0FBQztRQUNILE1BQU0sV0FBVyxHQUFHLE1BQU0sV0FBVyxDQUFDLGFBQWEsQ0FDakQsZUFBZSxFQUNmLGtCQUFrQixDQUFDLFdBQVcsQ0FDL0IsQ0FBQztRQUVGLE9BQU87WUFDTCxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7WUFDeEIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTO1lBQ2hDLFlBQVksRUFBRSxXQUFXLENBQUMsWUFBWTtTQUN2QyxDQUFDO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixlQUFNLENBQUMsS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7UUFDbEUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsS0FBSyxVQUFVLFVBQVUsQ0FBQyxTQUFpQjtJQUN6QyxNQUFNLFdBQVcsR0FBRyxNQUFNLGtCQUFRLENBQUMsTUFBTSxDQUFDO1FBQ3hDO1lBQ0UsSUFBSSxFQUFFLE9BQU87WUFDYixJQUFJLEVBQUUsVUFBVTtZQUNoQixPQUFPLEVBQUUsV0FBVztZQUNwQixRQUFRLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLHNCQUFzQjtTQUN4RTtRQUNEO1lBQ0UsSUFBSSxFQUFFLFVBQVU7WUFDaEIsSUFBSSxFQUFFLFVBQVU7WUFDaEIsT0FBTyxFQUFFLFdBQVc7WUFDcEIsUUFBUSxFQUFFLENBQUMsS0FBYSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxzQkFBc0I7U0FDeEU7S0FDRixDQUFDLENBQUM7SUFFSCxlQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDakMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxlQUFLLENBQUMsSUFBSSxDQUMvQixHQUFHLFNBQVMsaUJBQWlCLEVBQzdCLFdBQVcsRUFDWCxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FDbkIsQ0FBQztRQUVGLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNsRCwyREFBMkQ7WUFDM0QsSUFBQSxxQkFBWSxFQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3hCLElBQUEsb0JBQVcsRUFBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFFaEQsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsZUFBTSxDQUFDLE9BQU8sQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1lBQ3BELGVBQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNmLGVBQU0sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLENBQUMsQ0FBQztZQUNqRCxlQUFNLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDOUIsZUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pCLENBQUM7YUFBTSxDQUFDO1lBQ04sZUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDckYsQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxlQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDOUIsZUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMzRixDQUFDO2FBQU0sQ0FBQztZQUNOLGVBQU0sQ0FBQyxLQUFLLENBQUMseUJBQXlCLEdBQUcsQ0FBQyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO1FBQ3ZHLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbnF1aXJlciBmcm9tICdpbnF1aXJlcic7XG5pbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgc2V0U2VydmVyVXJsLCBzZXRBdXRoRGF0YSwgZ2V0Q29uZmlnLCBpc0NvbmZpZ3VyZWQgfSBmcm9tICcuLi91dGlscy9jb25maWcnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYXV0aFNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgSW5pdE9wdGlvbnMge1xuICBzZXJ2ZXI/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbml0Q29tbWFuZChvcHRpb25zOiBJbml0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBsb2dnZXIuaGVhZGVyKCdSdW53YXkgQ0xJIFNldHVwJyk7XG5cbiAgLy8gQ2hlY2sgaWYgYWxyZWFkeSBjb25maWd1cmVkXG4gIGlmIChpc0NvbmZpZ3VyZWQoKSkge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICAgIGxvZ2dlci5pbmZvKGBDdXJyZW50bHkgY29uZmlndXJlZCB0bzogJHtjb25maWcuc2VydmVyVXJsfWApO1xuICAgIGlmIChjb25maWcuc2VjdXJpdHlNb2RlKSB7XG4gICAgICBsb2dnZXIuZGltKGBTZWN1cml0eSBtb2RlOiAke2NvbmZpZy5zZWN1cml0eU1vZGUgPT09ICdkb21haW4taHR0cHMnID8gJ0hUVFBTIChzZWN1cmUpJyA6ICdIVFRQIChsaW1pdGVkKSd9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyByZWNvbmZpZ3VyZSB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgICBuYW1lOiAncmVjb25maWd1cmUnLFxuICAgICAgICBtZXNzYWdlOiAnRG8geW91IHdhbnQgdG8gcmVjb25maWd1cmU/JyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICB9LFxuICAgIF0pO1xuXG4gICAgaWYgKCFyZWNvbmZpZ3VyZSkge1xuICAgICAgbG9nZ2VyLmluZm8oJ0NvbmZpZ3VyYXRpb24gdW5jaGFuZ2VkLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldCBzZXJ2ZXIgVVJMXG4gIGxldCBzZXJ2ZXJVcmwgPSBvcHRpb25zLnNlcnZlcjtcblxuICBpZiAoIXNlcnZlclVybCkge1xuICAgIGNvbnN0IGFuc3dlcnMgPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBuYW1lOiAnc2VydmVyVXJsJyxcbiAgICAgICAgbWVzc2FnZTogJ0VudGVyIHlvdXIgUnVud2F5IHNlcnZlciBVUkw6JyxcbiAgICAgICAgZGVmYXVsdDogJ2h0dHBzOi8vZGVwbG95LmV4YW1wbGUuY29tJyxcbiAgICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyBVUkwoaW5wdXQpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gJ1BsZWFzZSBlbnRlciBhIHZhbGlkIFVSTCc7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgICBzZXJ2ZXJVcmwgPSBhbnN3ZXJzLnNlcnZlclVybCBhcyBzdHJpbmc7XG4gIH1cblxuICAvLyBOb3JtYWxpemUgVVJMXG4gIHNlcnZlclVybCA9IHNlcnZlclVybCEucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG5cbiAgLy8gVGVzdCBjb25uZWN0aW9uXG4gIGxvZ2dlci5pbmZvKCdUZXN0aW5nIGNvbm5lY3Rpb24uLi4nKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBheGlvcy5nZXQoYCR7c2VydmVyVXJsfS9oZWFsdGhgLCB7IHRpbWVvdXQ6IDEwMDAwIH0pO1xuICAgIGxvZ2dlci5zdWNjZXNzKCdTZXJ2ZXIgaXMgcmVhY2hhYmxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKGBDYW5ub3QgcmVhY2ggc2VydmVyIGF0ICR7c2VydmVyVXJsfWApO1xuICAgIGxvZ2dlci5kaW0oJ01ha2Ugc3VyZSB0aGUgc2VydmVyIGlzIHJ1bm5pbmcgYW5kIHRoZSBVUkwgaXMgY29ycmVjdC4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBJbml0aWFsaXplIGF1dGggc2VydmljZVxuICBjb25zdCBhdXRoU2VydmljZSA9IG5ldyBBdXRoU2VydmljZShzZXJ2ZXJVcmwpO1xuXG4gIC8vIENoZWNrIHNlY3VyaXR5IG1vZGVcbiAgbG9nZ2VyLmluZm8oJ0NoZWNraW5nIHNlcnZlciBzZWN1cml0eSBtb2RlLi4uJyk7XG4gIGxldCBzZWN1cml0eUluZm87XG4gIHRyeSB7XG4gICAgc2VjdXJpdHlJbmZvID0gYXdhaXQgYXV0aFNlcnZpY2UuZ2V0U2VjdXJpdHlNb2RlKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZ2V0IHNlcnZlciBzZWN1cml0eSBtb2RlJyk7XG4gICAgbG9nZ2VyLmRpbSgnVGhlIHNlcnZlciBtYXkgYmUgcnVubmluZyBhbiBvbGRlciB2ZXJzaW9uIHdpdGhvdXQgQ0xJIGF1dGggc3VwcG9ydC4nKTtcbiAgICBsb2dnZXIuZGltKCdGYWxsaW5nIGJhY2sgdG8gbGVnYWN5IGF1dGhlbnRpY2F0aW9uLi4uJyk7XG4gICAgYXdhaXQgbGVnYWN5QXV0aChzZXJ2ZXJVcmwpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERpc3BsYXkgc2VjdXJpdHkgaW5mb1xuICBjb25zdCBpc0Nvbm5lY3Rpb25TZWN1cmUgPSBzZXJ2ZXJVcmwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKTtcbiAgaWYgKHNlY3VyaXR5SW5mby5zZWN1cml0eU1vZGUgPT09ICdkb21haW4taHR0cHMnICYmIGlzQ29ubmVjdGlvblNlY3VyZSkge1xuICAgIGxvZ2dlci5zdWNjZXNzKGBTZXJ2ZXIgaGFzIEhUVFBTIGVuYWJsZWQ6ICR7c2VjdXJpdHlJbmZvLmRvbWFpbn1gKTtcbiAgICBsb2dnZXIuZGltKCdBdXRoZW50aWNhdGlvbiB3aWxsIHVzZSBzZWN1cmUgVExTIGNvbm5lY3Rpb24uJyk7XG4gIH0gZWxzZSBpZiAoc2VjdXJpdHlJbmZvLnNlY3VyaXR5TW9kZSA9PT0gJ2RvbWFpbi1odHRwcycgJiYgIWlzQ29ubmVjdGlvblNlY3VyZSkge1xuICAgIGxvZ2dlci53YXJuKGBTZXJ2ZXIgaGFzIEhUVFBTIGF2YWlsYWJsZSAoJHtzZWN1cml0eUluZm8uZG9tYWlufSkgYnV0IHlvdSdyZSBjb25uZWN0aW5nIHZpYSBIVFRQYCk7XG4gICAgbG9nZ2VyLmRpbShgQ29uc2lkZXIgdXNpbmcgaHR0cHM6Ly8ke3NlY3VyaXR5SW5mby5kb21haW59IGluc3RlYWQgb2YgJHtzZXJ2ZXJVcmx9YCk7XG4gICAgbG9nZ2VyLmRpbSgnQ3VycmVudCBjb25uZWN0aW9uIGlzIE5PVCBlbmNyeXB0ZWQuJyk7XG4gICAgbG9nZ2VyLmJsYW5rKCk7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLndhcm4oJ1NlcnZlciBpcyBydW5uaW5nIGluIEhUVFAgbW9kZSAobm8gZG9tYWluIGNvbmZpZ3VyZWQpJyk7XG4gICAgbG9nZ2VyLmRpbSgnQXV0aGVudGljYXRpb24gd2lsbCB1c2UgUlNBIGtleSBleGNoYW5nZSAoTUlUTSB2dWxuZXJhYmxlKS4nKTtcbiAgICBsb2dnZXIuYmxhbmsoKTtcblxuICAgIGNvbnN0IHsgcHJvY2VlZCB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgICBuYW1lOiAncHJvY2VlZCcsXG4gICAgICAgIG1lc3NhZ2U6ICdDb250aW51ZSB3aXRoIFJTQSBhdXRoZW50aWNhdGlvbj8nLFxuICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIGlmICghcHJvY2VlZCkge1xuICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICBsb2dnZXIuaW5mbygnVG8gZW5hYmxlIHNlY3VyZSBhdXRoZW50aWNhdGlvbjonKTtcbiAgICAgIGxvZ2dlci5kaW0oJyAgMS4gQ29uZmlndXJlIGEgZG9tYWluIG9uIHlvdXIgUnVud2F5IHNlcnZlcicpO1xuICAgICAgbG9nZ2VyLmRpbSgnICAyLiBFbmFibGUgSFRUUFMgdGhyb3VnaCB0aGUgU2V0dGluZ3MgcGFnZScpO1xuICAgICAgbG9nZ2VyLmRpbSgnICAzLiBSdW4gYHJ1bndheSBpbml0YCBhZ2FpbicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldCBjcmVkZW50aWFsc1xuICBsb2dnZXIuYmxhbmsoKTtcbiAgY29uc3QgY3JlZGVudGlhbHMgPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW1xuICAgIHtcbiAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICBuYW1lOiAndXNlcm5hbWUnLFxuICAgICAgbWVzc2FnZTogJ1VzZXJuYW1lOicsXG4gICAgICB2YWxpZGF0ZTogKGlucHV0OiBzdHJpbmcpID0+IGlucHV0Lmxlbmd0aCA+IDAgfHwgJ1VzZXJuYW1lIGlzIHJlcXVpcmVkJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6ICdwYXNzd29yZCcsXG4gICAgICBuYW1lOiAncGFzc3dvcmQnLFxuICAgICAgbWVzc2FnZTogJ1Bhc3N3b3JkOicsXG4gICAgICB2YWxpZGF0ZTogKGlucHV0OiBzdHJpbmcpID0+IGlucHV0Lmxlbmd0aCA+IDAgfHwgJ1Bhc3N3b3JkIGlzIHJlcXVpcmVkJyxcbiAgICB9LFxuICBdKTtcblxuICAvLyBBdXRoZW50aWNhdGUgdXNpbmcgdGhlIGF1dGggc2VydmljZVxuICBsb2dnZXIuaW5mbygnQXV0aGVudGljYXRpbmcuLi4nKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBhdXRoUmVzdWx0ID0gYXdhaXQgYXV0aFNlcnZpY2UuYXV0aGVudGljYXRlKFxuICAgICAgY3JlZGVudGlhbHMudXNlcm5hbWUsXG4gICAgICBjcmVkZW50aWFscy5wYXNzd29yZFxuICAgICk7XG5cbiAgICAvLyBDaGVjayBpZiBwYXNzd29yZCByZXNldCBpcyByZXF1aXJlZFxuICAgIGlmIChhdXRoUmVzdWx0Lm11c3RSZXNldFBhc3N3b3JkKSB7XG4gICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgIGxvZ2dlci53YXJuKCfimqDvuI8gIFBhc3N3b3JkIHJlc2V0IHJlcXVpcmVkJyk7XG4gICAgICBsb2dnZXIuaW5mbygnWW91IGFyZSB1c2luZyB0aGUgZGVmYXVsdCBwYXNzd29yZC4gUGxlYXNlIHNldCBhIG5ldyBwYXNzd29yZCB0byBjb250aW51ZS4nKTtcbiAgICAgIGxvZ2dlci5ibGFuaygpO1xuXG4gICAgICAvLyBQcm9tcHQgZm9yIG5ldyBwYXNzd29yZFxuICAgICAgY29uc3QgcmVzZXRSZXN1bHQgPSBhd2FpdCBwcm9tcHRQYXNzd29yZFJlc2V0KGF1dGhTZXJ2aWNlLCBjcmVkZW50aWFscy5wYXNzd29yZCk7XG5cbiAgICAgIGlmIChyZXNldFJlc3VsdCkge1xuICAgICAgICAvLyBTYXZlIGNvbmZpZ3VyYXRpb24gd2l0aCBuZXcgdG9rZW5cbiAgICAgICAgc2V0U2VydmVyVXJsKHNlcnZlclVybCk7XG4gICAgICAgIHNldEF1dGhEYXRhKHJlc2V0UmVzdWx0LnRva2VuLCByZXNldFJlc3VsdC5leHBpcmVzQXQsIHJlc2V0UmVzdWx0LnNlY3VyaXR5TW9kZSk7XG5cbiAgICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICAgIGxvZ2dlci5zdWNjZXNzKCdQYXNzd29yZCB1cGRhdGVkIGFuZCBjb25maWd1cmF0aW9uIHNhdmVkIScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVXNlciBza2lwcGVkIHBhc3N3b3JkIHJlc2V0LCBzYXZlIHdpdGggY3VycmVudCB0b2tlbiBidXQgd2FyblxuICAgICAgICBzZXRTZXJ2ZXJVcmwoc2VydmVyVXJsKTtcbiAgICAgICAgc2V0QXV0aERhdGEoYXV0aFJlc3VsdC50b2tlbiwgYXV0aFJlc3VsdC5leHBpcmVzQXQsIGF1dGhSZXN1bHQuc2VjdXJpdHlNb2RlKTtcblxuICAgICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0NvbmZpZ3VyYXRpb24gc2F2ZWQsIGJ1dCBwYXNzd29yZCByZXNldCBpcyBzdGlsbCByZXF1aXJlZC4nKTtcbiAgICAgICAgbG9nZ2VyLmRpbSgnWW91IHdpbGwgYmUgcHJvbXB0ZWQgdG8gcmVzZXQgeW91ciBwYXNzd29yZCBvbiBuZXh0IGxvZ2luLicpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTYXZlIGNvbmZpZ3VyYXRpb24gd2l0aCBhbGwgYXV0aCBkYXRhXG4gICAgICBzZXRTZXJ2ZXJVcmwoc2VydmVyVXJsKTtcbiAgICAgIHNldEF1dGhEYXRhKGF1dGhSZXN1bHQudG9rZW4sIGF1dGhSZXN1bHQuZXhwaXJlc0F0LCBhdXRoUmVzdWx0LnNlY3VyaXR5TW9kZSk7XG5cbiAgICAgIGxvZ2dlci5ibGFuaygpO1xuICAgICAgbG9nZ2VyLnN1Y2Nlc3MoJ0NvbmZpZ3VyYXRpb24gc2F2ZWQgc3VjY2Vzc2Z1bGx5IScpO1xuICAgIH1cblxuICAgIGxvZ2dlci5ibGFuaygpO1xuICAgIGxvZ2dlci5pbmZvKCdZb3UgY2FuIG5vdyBkZXBsb3kgcHJvamVjdHMgd2l0aDonKTtcbiAgICBsb2dnZXIuZGltKCcgIHJ1bndheSBkZXBsb3knKTtcbiAgICBsb2dnZXIuYmxhbmsoKTtcblxuICAgIC8vIFNob3cgdG9rZW4gZXhwaXJ5IHdhcm5pbmcgZm9yIEhUVFAgbW9kZVxuICAgIGlmIChhdXRoUmVzdWx0LnNlY3VyaXR5TW9kZSA9PT0gJ2lwLWh0dHAnKSB7XG4gICAgICBsb2dnZXIud2FybignTm90ZTogVG9rZW4gZXhwaXJlcyBpbiAxNSBtaW51dGVzIGR1ZSB0byBIVFRQIG1vZGUuJyk7XG4gICAgICBsb2dnZXIuZGltKCdSdW4gYHJ1bndheSBpbml0YCB0byByZS1hdXRoZW50aWNhdGUgd2hlbiBuZWVkZWQuJyk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIEVycm9yIGFscmVhZHkgbG9nZ2VkIGJ5IEF1dGhTZXJ2aWNlXG4gICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgbG9nZ2VyLmRpbSgnQ2hlY2sgeW91ciBjcmVkZW50aWFscyBhbmQgdHJ5IGFnYWluLicpO1xuICB9XG59XG5cbi8qKlxuICogUHJvbXB0IHVzZXIgdG8gcmVzZXQgdGhlaXIgcGFzc3dvcmRcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvbXB0UGFzc3dvcmRSZXNldChcbiAgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICBjdXJyZW50UGFzc3dvcmQ6IHN0cmluZ1xuKTogUHJvbWlzZTx7IHRva2VuOiBzdHJpbmc7IGV4cGlyZXNBdDogc3RyaW5nOyBzZWN1cml0eU1vZGU6ICdpcC1odHRwJyB8ICdkb21haW4taHR0cHMnIH0gfCBudWxsPiB7XG4gIGNvbnN0IHsgcmVzZXROb3cgfSA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAge1xuICAgICAgdHlwZTogJ2NvbmZpcm0nLFxuICAgICAgbmFtZTogJ3Jlc2V0Tm93JyxcbiAgICAgIG1lc3NhZ2U6ICdXb3VsZCB5b3UgbGlrZSB0byByZXNldCB5b3VyIHBhc3N3b3JkIG5vdz8nLFxuICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICB9LFxuICBdKTtcblxuICBpZiAoIXJlc2V0Tm93KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBHZXQgbmV3IHBhc3N3b3JkIHdpdGggY29uZmlybWF0aW9uXG4gIGNvbnN0IG5ld1Bhc3N3b3JkQW5zd2VycyA9IGF3YWl0IGlucXVpcmVyLnByb21wdChbXG4gICAge1xuICAgICAgdHlwZTogJ3Bhc3N3b3JkJyxcbiAgICAgIG5hbWU6ICduZXdQYXNzd29yZCcsXG4gICAgICBtZXNzYWdlOiAnRW50ZXIgbmV3IHBhc3N3b3JkIChtaW4uIDYgY2hhcmFjdGVycyk6JyxcbiAgICAgIHZhbGlkYXRlOiAoaW5wdXQ6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAoaW5wdXQubGVuZ3RoIDwgNikge1xuICAgICAgICAgIHJldHVybiAnUGFzc3dvcmQgbXVzdCBiZSBhdCBsZWFzdCA2IGNoYXJhY3RlcnMnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHR5cGU6ICdwYXNzd29yZCcsXG4gICAgICBuYW1lOiAnY29uZmlybVBhc3N3b3JkJyxcbiAgICAgIG1lc3NhZ2U6ICdDb25maXJtIG5ldyBwYXNzd29yZDonLFxuICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nLCBhbnN3ZXJzOiB7IG5ld1Bhc3N3b3JkPzogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgaWYgKGlucHV0ICE9PSBhbnN3ZXJzPy5uZXdQYXNzd29yZCkge1xuICAgICAgICAgIHJldHVybiAnUGFzc3dvcmRzIGRvIG5vdCBtYXRjaCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9LFxuICAgIH0sXG4gIF0pO1xuXG4gIGxvZ2dlci5pbmZvKCdVcGRhdGluZyBwYXNzd29yZC4uLicpO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc2V0UmVzdWx0ID0gYXdhaXQgYXV0aFNlcnZpY2UucmVzZXRQYXNzd29yZChcbiAgICAgIGN1cnJlbnRQYXNzd29yZCxcbiAgICAgIG5ld1Bhc3N3b3JkQW5zd2Vycy5uZXdQYXNzd29yZFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW46IHJlc2V0UmVzdWx0LnRva2VuLFxuICAgICAgZXhwaXJlc0F0OiByZXNldFJlc3VsdC5leHBpcmVzQXQsXG4gICAgICBzZWN1cml0eU1vZGU6IHJlc2V0UmVzdWx0LnNlY3VyaXR5TW9kZSxcbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIHJlc2V0IHBhc3N3b3JkLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLicpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogTGVnYWN5IGF1dGhlbnRpY2F0aW9uIGZvciBzZXJ2ZXJzIHdpdGhvdXQgQ0xJIGF1dGggc3VwcG9ydFxuICovXG5hc3luYyBmdW5jdGlvbiBsZWdhY3lBdXRoKHNlcnZlclVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNyZWRlbnRpYWxzID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KFtcbiAgICB7XG4gICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgbmFtZTogJ3VzZXJuYW1lJyxcbiAgICAgIG1lc3NhZ2U6ICdVc2VybmFtZTonLFxuICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiBpbnB1dC5sZW5ndGggPiAwIHx8ICdVc2VybmFtZSBpcyByZXF1aXJlZCcsXG4gICAgfSxcbiAgICB7XG4gICAgICB0eXBlOiAncGFzc3dvcmQnLFxuICAgICAgbmFtZTogJ3Bhc3N3b3JkJyxcbiAgICAgIG1lc3NhZ2U6ICdQYXNzd29yZDonLFxuICAgICAgdmFsaWRhdGU6IChpbnB1dDogc3RyaW5nKSA9PiBpbnB1dC5sZW5ndGggPiAwIHx8ICdQYXNzd29yZCBpcyByZXF1aXJlZCcsXG4gICAgfSxcbiAgXSk7XG5cbiAgbG9nZ2VyLmluZm8oJ0F1dGhlbnRpY2F0aW5nLi4uJyk7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0KFxuICAgICAgYCR7c2VydmVyVXJsfS9hcGkvYXV0aC9sb2dpbmAsXG4gICAgICBjcmVkZW50aWFscyxcbiAgICAgIHsgdGltZW91dDogMTAwMDAgfVxuICAgICk7XG5cbiAgICBpZiAocmVzcG9uc2UuZGF0YS5zdWNjZXNzICYmIHJlc3BvbnNlLmRhdGE/LnRva2VuKSB7XG4gICAgICAvLyBTYXZlIGNvbmZpZ3VyYXRpb24gKGxlZ2FjeSBtb2RlIHdpdGhvdXQgZXhwaXJ5IHRyYWNraW5nKVxuICAgICAgc2V0U2VydmVyVXJsKHNlcnZlclVybCk7XG4gICAgICBzZXRBdXRoRGF0YShyZXNwb25zZS5kYXRhLnRva2VuLCAnJywgJ2lwLWh0dHAnKTtcblxuICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgICBsb2dnZXIuc3VjY2VzcygnQ29uZmlndXJhdGlvbiBzYXZlZCBzdWNjZXNzZnVsbHkhJyk7XG4gICAgICBsb2dnZXIuYmxhbmsoKTtcbiAgICAgIGxvZ2dlci5pbmZvKCdZb3UgY2FuIG5vdyBkZXBsb3kgcHJvamVjdHMgd2l0aDonKTtcbiAgICAgIGxvZ2dlci5kaW0oJyAgcnVud2F5IGRlcGxveScpO1xuICAgICAgbG9nZ2VyLmJsYW5rKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5lcnJvcignQXV0aGVudGljYXRpb24gZmFpbGVkOiAnICsgKHJlc3BvbnNlLmRhdGEuZXJyb3IgfHwgJ1Vua25vd24gZXJyb3InKSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChheGlvcy5pc0F4aW9zRXJyb3IoZXJyb3IpKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZDogJyArIChlcnJvci5yZXNwb25zZT8uZGF0YT8uZXJyb3IgfHwgZXJyb3IubWVzc2FnZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0F1dGhlbnRpY2F0aW9uIGZhaWxlZDogJyArIChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJykpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,190 @@
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
+ const vitest_1 = require("vitest");
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const os_1 = __importDefault(require("os"));
10
+ const nextPatcher_1 = require("../nextPatcher");
11
+ let tmpDir;
12
+ (0, vitest_1.beforeEach)(() => {
13
+ tmpDir = fs_1.default.mkdtempSync(path_1.default.join(os_1.default.tmpdir(), 'nextpatcher-'));
14
+ // Create a minimal package.json so the directory looks like a project
15
+ fs_1.default.writeFileSync(path_1.default.join(tmpDir, 'package.json'), '{}');
16
+ });
17
+ (0, vitest_1.afterEach)(() => {
18
+ fs_1.default.rmSync(tmpDir, { recursive: true, force: true });
19
+ });
20
+ function writeConfig(filename, content) {
21
+ fs_1.default.writeFileSync(path_1.default.join(tmpDir, filename), content, 'utf-8');
22
+ }
23
+ function readConfig(filename) {
24
+ return fs_1.default.readFileSync(path_1.default.join(tmpDir, filename), 'utf-8');
25
+ }
26
+ // ─── Patch Tests ─────────────────────────────────────────────────────────────
27
+ (0, vitest_1.describe)('NextPatcher.patch', () => {
28
+ (0, vitest_1.it)('patches next.config.js with module.exports format', async () => {
29
+ writeConfig('next.config.js', `module.exports = {\n reactStrictMode: true,\n};\n`);
30
+ const result = await nextPatcher_1.NextPatcher.patch(tmpDir, 'my-app');
31
+ (0, vitest_1.expect)(result).toBe(true);
32
+ const content = readConfig('next.config.js');
33
+ (0, vitest_1.expect)(content).toContain("basePath: '/app/my-app'");
34
+ (0, vitest_1.expect)(content).toContain("assetPrefix: '/app/my-app'");
35
+ (0, vitest_1.expect)(content).toContain('// runway:basePath-start');
36
+ (0, vitest_1.expect)(content).toContain('// runway:basePath-end');
37
+ });
38
+ (0, vitest_1.it)('patches next.config.mjs with export default object', async () => {
39
+ writeConfig('next.config.mjs', `export default {\n reactStrictMode: true,\n};\n`);
40
+ const result = await nextPatcher_1.NextPatcher.patch(tmpDir, 'test-project');
41
+ (0, vitest_1.expect)(result).toBe(true);
42
+ const content = readConfig('next.config.mjs');
43
+ (0, vitest_1.expect)(content).toContain("basePath: '/app/test-project'");
44
+ (0, vitest_1.expect)(content).toContain("assetPrefix: '/app/test-project'");
45
+ });
46
+ (0, vitest_1.it)('patches next.config.ts with TypeScript variable pattern', async () => {
47
+ const tsConfig = `import type { NextConfig } from 'next';
48
+
49
+ const nextConfig: NextConfig = {
50
+ reactStrictMode: true,
51
+ };
52
+
53
+ export default nextConfig;
54
+ `;
55
+ writeConfig('next.config.ts', tsConfig);
56
+ const result = await nextPatcher_1.NextPatcher.patch(tmpDir, 'ts-app');
57
+ (0, vitest_1.expect)(result).toBe(true);
58
+ const content = readConfig('next.config.ts');
59
+ (0, vitest_1.expect)(content).toContain("basePath: '/app/ts-app'");
60
+ (0, vitest_1.expect)(content).toContain("assetPrefix: '/app/ts-app'");
61
+ // The import and export should still be intact
62
+ (0, vitest_1.expect)(content).toContain("import type { NextConfig } from 'next'");
63
+ (0, vitest_1.expect)(content).toContain('export default nextConfig');
64
+ });
65
+ (0, vitest_1.it)('patches wrapped config like withNextIntl({})', async () => {
66
+ const wrapped = `import withNextIntl from 'next-intl/plugin';
67
+
68
+ export default withNextIntl({
69
+ reactStrictMode: true,
70
+ });
71
+ `;
72
+ writeConfig('next.config.mjs', wrapped);
73
+ const result = await nextPatcher_1.NextPatcher.patch(tmpDir, 'intl-app');
74
+ (0, vitest_1.expect)(result).toBe(true);
75
+ const content = readConfig('next.config.mjs');
76
+ (0, vitest_1.expect)(content).toContain("basePath: '/app/intl-app'");
77
+ });
78
+ (0, vitest_1.it)('does not inject into non-config function calls', async () => {
79
+ const config = `import createMDX from '@next/mdx';
80
+ const withMDX = createMDX({ extension: /\\.mdx$/ });
81
+
82
+ export default withMDX({
83
+ reactStrictMode: true,
84
+ });
85
+ `;
86
+ writeConfig('next.config.mjs', config);
87
+ const result = await nextPatcher_1.NextPatcher.patch(tmpDir, 'mdx-app');
88
+ (0, vitest_1.expect)(result).toBe(true);
89
+ const content = readConfig('next.config.mjs');
90
+ // basePath should be in the export default withMDX({...}), not createMDX({...})
91
+ const createMDXIdx = content.indexOf('createMDX({');
92
+ const basePathIdx = content.indexOf("basePath:");
93
+ (0, vitest_1.expect)(basePathIdx).toBeGreaterThan(createMDXIdx);
94
+ });
95
+ (0, vitest_1.it)('prefers next.config.ts over .mjs and .js', async () => {
96
+ writeConfig('next.config.ts', `const nextConfig = {\n output: 'standalone',\n};\nexport default nextConfig;\n`);
97
+ writeConfig('next.config.js', `module.exports = {\n reactStrictMode: true,\n};\n`);
98
+ await nextPatcher_1.NextPatcher.patch(tmpDir, 'priority-test');
99
+ const tsContent = readConfig('next.config.ts');
100
+ const jsContent = readConfig('next.config.js');
101
+ (0, vitest_1.expect)(tsContent).toContain("basePath: '/app/priority-test'");
102
+ // .js should NOT be patched
103
+ (0, vitest_1.expect)(jsContent).not.toContain('basePath');
104
+ });
105
+ (0, vitest_1.it)('sanitizes project name for basePath', async () => {
106
+ writeConfig('next.config.js', `module.exports = {\n};\n`);
107
+ await nextPatcher_1.NextPatcher.patch(tmpDir, 'My App_v2');
108
+ const content = readConfig('next.config.js');
109
+ (0, vitest_1.expect)(content).toContain("basePath: '/app/my-app-v2'");
110
+ });
111
+ (0, vitest_1.it)('skips if user already has basePath configured', async () => {
112
+ writeConfig('next.config.js', `module.exports = {\n basePath: '/custom',\n};\n`);
113
+ const result = await nextPatcher_1.NextPatcher.patch(tmpDir, 'app');
114
+ (0, vitest_1.expect)(result).toBe(false);
115
+ const content = readConfig('next.config.js');
116
+ // Should NOT inject runway markers
117
+ (0, vitest_1.expect)(content).not.toContain('runway:basePath');
118
+ // Original basePath preserved
119
+ (0, vitest_1.expect)(content).toContain("basePath: '/custom'");
120
+ });
121
+ (0, vitest_1.it)('returns false when no config file exists', async () => {
122
+ const result = await nextPatcher_1.NextPatcher.patch(tmpDir, 'no-config');
123
+ (0, vitest_1.expect)(result).toBe(false);
124
+ });
125
+ (0, vitest_1.it)('is idempotent — second patch is a no-op', async () => {
126
+ writeConfig('next.config.js', `module.exports = {\n reactStrictMode: true,\n};\n`);
127
+ await nextPatcher_1.NextPatcher.patch(tmpDir, 'app');
128
+ const firstPatch = readConfig('next.config.js');
129
+ const result = await nextPatcher_1.NextPatcher.patch(tmpDir, 'app');
130
+ (0, vitest_1.expect)(result).toBe(true); // returns true (already patched)
131
+ const secondPatch = readConfig('next.config.js');
132
+ (0, vitest_1.expect)(secondPatch).toBe(firstPatch);
133
+ });
134
+ });
135
+ // ─── Revert Tests ────────────────────────────────────────────────────────────
136
+ (0, vitest_1.describe)('NextPatcher.revert', () => {
137
+ (0, vitest_1.it)('cleanly reverts a patched config (exact round-trip)', async () => {
138
+ const original = `module.exports = {\n reactStrictMode: true,\n};\n`;
139
+ writeConfig('next.config.js', original);
140
+ await nextPatcher_1.NextPatcher.patch(tmpDir, 'app');
141
+ const patched = readConfig('next.config.js');
142
+ (0, vitest_1.expect)(patched).toContain('runway:basePath-start');
143
+ await nextPatcher_1.NextPatcher.revert(tmpDir);
144
+ const reverted = readConfig('next.config.js');
145
+ (0, vitest_1.expect)(reverted).toBe(original);
146
+ });
147
+ (0, vitest_1.it)('reverts TypeScript config cleanly (exact round-trip)', async () => {
148
+ const original = `import type { NextConfig } from 'next';
149
+
150
+ const nextConfig: NextConfig = {
151
+ reactStrictMode: true,
152
+ };
153
+
154
+ export default nextConfig;
155
+ `;
156
+ writeConfig('next.config.ts', original);
157
+ await nextPatcher_1.NextPatcher.patch(tmpDir, 'ts-app');
158
+ await nextPatcher_1.NextPatcher.revert(tmpDir);
159
+ const reverted = readConfig('next.config.ts');
160
+ (0, vitest_1.expect)(reverted).toBe(original);
161
+ });
162
+ (0, vitest_1.it)('is a no-op when nothing was patched', async () => {
163
+ const original = `module.exports = {\n reactStrictMode: true,\n};\n`;
164
+ writeConfig('next.config.js', original);
165
+ await nextPatcher_1.NextPatcher.revert(tmpDir);
166
+ const content = readConfig('next.config.js');
167
+ (0, vitest_1.expect)(content).toBe(original);
168
+ });
169
+ (0, vitest_1.it)('is a no-op when no config file exists', async () => {
170
+ // Should not throw
171
+ await nextPatcher_1.NextPatcher.revert(tmpDir);
172
+ });
173
+ });
174
+ // ─── Full Cycle (patch → build simulation → revert) ─────────────────────────
175
+ (0, vitest_1.describe)('NextPatcher full cycle', () => {
176
+ (0, vitest_1.it)('patch → modify → revert preserves user changes outside markers', async () => {
177
+ const original = `module.exports = {\n reactStrictMode: true,\n};\n`;
178
+ writeConfig('next.config.js', original);
179
+ await nextPatcher_1.NextPatcher.patch(tmpDir, 'app');
180
+ // Simulate user (or build tool) adding something outside the markers
181
+ let content = readConfig('next.config.js');
182
+ content = '// Added by some tool\n' + content;
183
+ writeConfig('next.config.js', content);
184
+ await nextPatcher_1.NextPatcher.revert(tmpDir);
185
+ const reverted = readConfig('next.config.js');
186
+ (0, vitest_1.expect)(reverted).toContain('// Added by some tool');
187
+ (0, vitest_1.expect)(reverted).not.toContain('runway:basePath');
188
+ });
189
+ });
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dFBhdGNoZXIudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9fX3Rlc3RzX18vbmV4dFBhdGNoZXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUFxRTtBQUNyRSw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLDRDQUFvQjtBQUNwQixnREFBNkM7QUFFN0MsSUFBSSxNQUFjLENBQUM7QUFFbkIsSUFBQSxtQkFBVSxFQUFDLEdBQUcsRUFBRTtJQUNkLE1BQU0sR0FBRyxZQUFFLENBQUMsV0FBVyxDQUFDLGNBQUksQ0FBQyxJQUFJLENBQUMsWUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUM7SUFDaEUsc0VBQXNFO0lBQ3RFLFlBQUUsQ0FBQyxhQUFhLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDNUQsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFBLGtCQUFTLEVBQUMsR0FBRyxFQUFFO0lBQ2IsWUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3RELENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxXQUFXLENBQUMsUUFBZ0IsRUFBRSxPQUFlO0lBQ3BELFlBQUUsQ0FBQyxhQUFhLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxRQUFnQjtJQUNsQyxPQUFPLFlBQUUsQ0FBQyxZQUFZLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDL0QsQ0FB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QUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3BELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBkZXNjcmliZSwgaXQsIGV4cGVjdCwgYmVmb3JlRWFjaCwgYWZ0ZXJFYWNoIH0gZnJvbSAndml0ZXN0JztcbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgeyBOZXh0UGF0Y2hlciB9IGZyb20gJy4uL25leHRQYXRjaGVyJztcblxubGV0IHRtcERpcjogc3RyaW5nO1xuXG5iZWZvcmVFYWNoKCgpID0+IHtcbiAgdG1wRGlyID0gZnMubWtkdGVtcFN5bmMocGF0aC5qb2luKG9zLnRtcGRpcigpLCAnbmV4dHBhdGNoZXItJykpO1xuICAvLyBDcmVhdGUgYSBtaW5pbWFsIHBhY2thZ2UuanNvbiBzbyB0aGUgZGlyZWN0b3J5IGxvb2tzIGxpa2UgYSBwcm9qZWN0XG4gIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKHRtcERpciwgJ3BhY2thZ2UuanNvbicpLCAne30nKTtcbn0pO1xuXG5hZnRlckVhY2goKCkgPT4ge1xuICBmcy5ybVN5bmModG1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG59KTtcblxuZnVuY3Rpb24gd3JpdGVDb25maWcoZmlsZW5hbWU6IHN0cmluZywgY29udGVudDogc3RyaW5nKSB7XG4gIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKHRtcERpciwgZmlsZW5hbWUpLCBjb250ZW50LCAndXRmLTgnKTtcbn1cblxuZnVuY3Rpb24gcmVhZENvbmZpZyhmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4odG1wRGlyLCBmaWxlbmFtZSksICd1dGYtOCcpO1xufVxuXG4vLyDilIDilIDilIAgUGF0Y2ggVGVzdHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmRlc2NyaWJlKCdOZXh0UGF0Y2hlci5wYXRjaCcsICgpID0+IHtcbiAgaXQoJ3BhdGNoZXMgbmV4dC5jb25maWcuanMgd2l0aCBtb2R1bGUuZXhwb3J0cyBmb3JtYXQnLCBhc3luYyAoKSA9PiB7XG4gICAgd3JpdGVDb25maWcoJ25leHQuY29uZmlnLmpzJywgYG1vZHVsZS5leHBvcnRzID0ge1xcbiAgcmVhY3RTdHJpY3RNb2RlOiB0cnVlLFxcbn07XFxuYCk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBOZXh0UGF0Y2hlci5wYXRjaCh0bXBEaXIsICdteS1hcHAnKTtcbiAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuXG4gICAgY29uc3QgY29udGVudCA9IHJlYWRDb25maWcoJ25leHQuY29uZmlnLmpzJyk7XG4gICAgZXhwZWN0KGNvbnRlbnQpLnRvQ29udGFpbihcImJhc2VQYXRoOiAnL2FwcC9teS1hcHAnXCIpO1xuICAgIGV4cGVjdChjb250ZW50KS50b0NvbnRhaW4oXCJhc3NldFByZWZpeDogJy9hcHAvbXktYXBwJ1wiKTtcbiAgICBleHBlY3QoY29udGVudCkudG9Db250YWluKCcvLyBydW53YXk6YmFzZVBhdGgtc3RhcnQnKTtcbiAgICBleHBlY3QoY29udGVudCkudG9Db250YWluKCcvLyBydW53YXk6YmFzZVBhdGgtZW5kJyk7XG4gIH0pO1xuXG4gIGl0KCdwYXRjaGVzIG5leHQuY29uZmlnLm1qcyB3aXRoIGV4cG9ydCBkZWZhdWx0IG9iamVjdCcsIGFzeW5jICgpID0+IHtcbiAgICB3cml0ZUNvbmZpZygnbmV4dC5jb25maWcubWpzJywgYGV4cG9ydCBkZWZhdWx0IHtcXG4gIHJlYWN0U3RyaWN0TW9kZTogdHJ1ZSxcXG59O1xcbmApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgTmV4dFBhdGNoZXIucGF0Y2godG1wRGlyLCAndGVzdC1wcm9qZWN0Jyk7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcblxuICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkQ29uZmlnKCduZXh0LmNvbmZpZy5tanMnKTtcbiAgICBleHBlY3QoY29udGVudCkudG9Db250YWluKFwiYmFzZVBhdGg6ICcvYXBwL3Rlc3QtcHJvamVjdCdcIik7XG4gICAgZXhwZWN0KGNvbnRlbnQpLnRvQ29udGFpbihcImFzc2V0UHJlZml4OiAnL2FwcC90ZXN0LXByb2plY3QnXCIpO1xuICB9KTtcblxuICBpdCgncGF0Y2hlcyBuZXh0LmNvbmZpZy50cyB3aXRoIFR5cGVTY3JpcHQgdmFyaWFibGUgcGF0dGVybicsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0c0NvbmZpZyA9IGBpbXBvcnQgdHlwZSB7IE5leHRDb25maWcgfSBmcm9tICduZXh0JztcblxuY29uc3QgbmV4dENvbmZpZzogTmV4dENvbmZpZyA9IHtcbiAgcmVhY3RTdHJpY3RNb2RlOiB0cnVlLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgbmV4dENvbmZpZztcbmA7XG4gICAgd3JpdGVDb25maWcoJ25leHQuY29uZmlnLnRzJywgdHNDb25maWcpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgTmV4dFBhdGNoZXIucGF0Y2godG1wRGlyLCAndHMtYXBwJyk7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcblxuICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkQ29uZmlnKCduZXh0LmNvbmZpZy50cycpO1xuICAgIGV4cGVjdChjb250ZW50KS50b0NvbnRhaW4oXCJiYXNlUGF0aDogJy9hcHAvdHMtYXBwJ1wiKTtcbiAgICBleHBlY3QoY29udGVudCkudG9Db250YWluKFwiYXNzZXRQcmVmaXg6ICcvYXBwL3RzLWFwcCdcIik7XG4gICAgLy8gVGhlIGltcG9ydCBhbmQgZXhwb3J0IHNob3VsZCBzdGlsbCBiZSBpbnRhY3RcbiAgICBleHBlY3QoY29udGVudCkudG9Db250YWluKFwiaW1wb3J0IHR5cGUgeyBOZXh0Q29uZmlnIH0gZnJvbSAnbmV4dCdcIik7XG4gICAgZXhwZWN0KGNvbnRlbnQpLnRvQ29udGFpbignZXhwb3J0IGRlZmF1bHQgbmV4dENvbmZpZycpO1xuICB9KTtcblxuICBpdCgncGF0Y2hlcyB3cmFwcGVkIGNvbmZpZyBsaWtlIHdpdGhOZXh0SW50bCh7fSknLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgd3JhcHBlZCA9IGBpbXBvcnQgd2l0aE5leHRJbnRsIGZyb20gJ25leHQtaW50bC9wbHVnaW4nO1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoTmV4dEludGwoe1xuICByZWFjdFN0cmljdE1vZGU6IHRydWUsXG59KTtcbmA7XG4gICAgd3JpdGVDb25maWcoJ25leHQuY29uZmlnLm1qcycsIHdyYXBwZWQpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgTmV4dFBhdGNoZXIucGF0Y2godG1wRGlyLCAnaW50bC1hcHAnKTtcbiAgICBleHBlY3QocmVzdWx0KS50b0JlKHRydWUpO1xuXG4gICAgY29uc3QgY29udGVudCA9IHJlYWRDb25maWcoJ25leHQuY29uZmlnLm1qcycpO1xuICAgIGV4cGVjdChjb250ZW50KS50b0NvbnRhaW4oXCJiYXNlUGF0aDogJy9hcHAvaW50bC1hcHAnXCIpO1xuICB9KTtcblxuICBpdCgnZG9lcyBub3QgaW5qZWN0IGludG8gbm9uLWNvbmZpZyBmdW5jdGlvbiBjYWxscycsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb25maWcgPSBgaW1wb3J0IGNyZWF0ZU1EWCBmcm9tICdAbmV4dC9tZHgnO1xuY29uc3Qgd2l0aE1EWCA9IGNyZWF0ZU1EWCh7IGV4dGVuc2lvbjogL1xcXFwubWR4JC8gfSk7XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhNRFgoe1xuICByZWFjdFN0cmljdE1vZGU6IHRydWUsXG59KTtcbmA7XG4gICAgd3JpdGVDb25maWcoJ25leHQuY29uZmlnLm1qcycsIGNvbmZpZyk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBOZXh0UGF0Y2hlci5wYXRjaCh0bXBEaXIsICdtZHgtYXBwJyk7XG4gICAgZXhwZWN0KHJlc3VsdCkudG9CZSh0cnVlKTtcblxuICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkQ29uZmlnKCduZXh0LmNvbmZpZy5tanMnKTtcbiAgICAvLyBiYXNlUGF0aCBzaG91bGQgYmUgaW4gdGhlIGV4cG9ydCBkZWZhdWx0IHdpdGhNRFgoey4uLn0pLCBub3QgY3JlYXRlTURYKHsuLi59KVxuICAgIGNvbnN0IGNyZWF0ZU1EWElkeCA9IGNvbnRlbnQuaW5kZXhPZignY3JlYXRlTURYKHsnKTtcbiAgICBjb25zdCBiYXNlUGF0aElkeCA9IGNvbnRlbnQuaW5kZXhPZihcImJhc2VQYXRoOlwiKTtcbiAgICBleHBlY3QoYmFzZVBhdGhJZHgpLnRvQmVHcmVhdGVyVGhhbihjcmVhdGVNRFhJZHgpO1xuICB9KTtcblxuICBpdCgncHJlZmVycyBuZXh0LmNvbmZpZy50cyBvdmVyIC5tanMgYW5kIC5qcycsIGFzeW5jICgpID0+IHtcbiAgICB3cml0ZUNvbmZpZygnbmV4dC5jb25maWcudHMnLCBgY29uc3QgbmV4dENvbmZpZyA9IHtcXG4gIG91dHB1dDogJ3N0YW5kYWxvbmUnLFxcbn07XFxuZXhwb3J0IGRlZmF1bHQgbmV4dENvbmZpZztcXG5gKTtcbiAgICB3cml0ZUNvbmZpZygnbmV4dC5jb25maWcuanMnLCBgbW9kdWxlLmV4cG9ydHMgPSB7XFxuICByZWFjdFN0cmljdE1vZGU6IHRydWUsXFxufTtcXG5gKTtcblxuICAgIGF3YWl0IE5leHRQYXRjaGVyLnBhdGNoKHRtcERpciwgJ3ByaW9yaXR5LXRlc3QnKTtcblxuICAgIGNvbnN0IHRzQ29udGVudCA9IHJlYWRDb25maWcoJ25leHQuY29uZmlnLnRzJyk7XG4gICAgY29uc3QganNDb250ZW50ID0gcmVhZENvbmZpZygnbmV4dC5jb25maWcuanMnKTtcbiAgICBleHBlY3QodHNDb250ZW50KS50b0NvbnRhaW4oXCJiYXNlUGF0aDogJy9hcHAvcHJpb3JpdHktdGVzdCdcIik7XG4gICAgLy8gLmpzIHNob3VsZCBOT1QgYmUgcGF0Y2hlZFxuICAgIGV4cGVjdChqc0NvbnRlbnQpLm5vdC50b0NvbnRhaW4oJ2Jhc2VQYXRoJyk7XG4gIH0pO1xuXG4gIGl0KCdzYW5pdGl6ZXMgcHJvamVjdCBuYW1lIGZvciBiYXNlUGF0aCcsIGFzeW5jICgpID0+IHtcbiAgICB3cml0ZUNvbmZpZygnbmV4dC5jb25maWcuanMnLCBgbW9kdWxlLmV4cG9ydHMgPSB7XFxufTtcXG5gKTtcblxuICAgIGF3YWl0IE5leHRQYXRjaGVyLnBhdGNoKHRtcERpciwgJ015IEFwcF92MicpO1xuXG4gICAgY29uc3QgY29udGVudCA9IHJlYWRDb25maWcoJ25leHQuY29uZmlnLmpzJyk7XG4gICAgZXhwZWN0KGNvbnRlbnQpLnRvQ29udGFpbihcImJhc2VQYXRoOiAnL2FwcC9teS1hcHAtdjInXCIpO1xuICB9KTtcblxuICBpdCgnc2tpcHMgaWYgdXNlciBhbHJlYWR5IGhhcyBiYXNlUGF0aCBjb25maWd1cmVkJywgYXN5bmMgKCkgPT4ge1xuICAgIHdyaXRlQ29uZmlnKCduZXh0LmNvbmZpZy5qcycsIGBtb2R1bGUuZXhwb3J0cyA9IHtcXG4gIGJhc2VQYXRoOiAnL2N1c3RvbScsXFxufTtcXG5gKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IE5leHRQYXRjaGVyLnBhdGNoKHRtcERpciwgJ2FwcCcpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuXG4gICAgY29uc3QgY29udGVudCA9IHJlYWRDb25maWcoJ25leHQuY29uZmlnLmpzJyk7XG4gICAgLy8gU2hvdWxkIE5PVCBpbmplY3QgcnVud2F5IG1hcmtlcnNcbiAgICBleHBlY3QoY29udGVudCkubm90LnRvQ29udGFpbigncnVud2F5OmJhc2VQYXRoJyk7XG4gICAgLy8gT3JpZ2luYWwgYmFzZVBhdGggcHJlc2VydmVkXG4gICAgZXhwZWN0KGNvbnRlbnQpLnRvQ29udGFpbihcImJhc2VQYXRoOiAnL2N1c3RvbSdcIik7XG4gIH0pO1xuXG4gIGl0KCdyZXR1cm5zIGZhbHNlIHdoZW4gbm8gY29uZmlnIGZpbGUgZXhpc3RzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IE5leHRQYXRjaGVyLnBhdGNoKHRtcERpciwgJ25vLWNvbmZpZycpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoZmFsc2UpO1xuICB9KTtcblxuICBpdCgnaXMgaWRlbXBvdGVudCDigJQgc2Vjb25kIHBhdGNoIGlzIGEgbm8tb3AnLCBhc3luYyAoKSA9PiB7XG4gICAgd3JpdGVDb25maWcoJ25leHQuY29uZmlnLmpzJywgYG1vZHVsZS5leHBvcnRzID0ge1xcbiAgcmVhY3RTdHJpY3RNb2RlOiB0cnVlLFxcbn07XFxuYCk7XG5cbiAgICBhd2FpdCBOZXh0UGF0Y2hlci5wYXRjaCh0bXBEaXIsICdhcHAnKTtcbiAgICBjb25zdCBmaXJzdFBhdGNoID0gcmVhZENvbmZpZygnbmV4dC5jb25maWcuanMnKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IE5leHRQYXRjaGVyLnBhdGNoKHRtcERpciwgJ2FwcCcpO1xuICAgIGV4cGVjdChyZXN1bHQpLnRvQmUodHJ1ZSk7IC8vIHJldHVybnMgdHJ1ZSAoYWxyZWFkeSBwYXRjaGVkKVxuXG4gICAgY29uc3Qgc2Vjb25kUGF0Y2ggPSByZWFkQ29uZmlnKCduZXh0LmNvbmZpZy5qcycpO1xuICAgIGV4cGVjdChzZWNvbmRQYXRjaCkudG9CZShmaXJzdFBhdGNoKTtcbiAgfSk7XG59KTtcblxuLy8g4pSA4pSA4pSAIFJldmVydCBUZXN0cyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZGVzY3JpYmUoJ05leHRQYXRjaGVyLnJldmVydCcsICgpID0+IHtcbiAgaXQoJ2NsZWFubHkgcmV2ZXJ0cyBhIHBhdGNoZWQgY29uZmlnIChleGFjdCByb3VuZC10cmlwKScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbCA9IGBtb2R1bGUuZXhwb3J0cyA9IHtcXG4gIHJlYWN0U3RyaWN0TW9kZTogdHJ1ZSxcXG59O1xcbmA7XG4gICAgd3JpdGVDb25maWcoJ25leHQuY29uZmlnLmpzJywgb3JpZ2luYWwpO1xuXG4gICAgYXdhaXQgTmV4dFBhdGNoZXIucGF0Y2godG1wRGlyLCAnYXBwJyk7XG4gICAgY29uc3QgcGF0Y2hlZCA9IHJlYWRDb25maWcoJ25leHQuY29uZmlnLmpzJyk7XG4gICAgZXhwZWN0KHBhdGNoZWQpLnRvQ29udGFpbigncnVud2F5OmJhc2VQYXRoLXN0YXJ0Jyk7XG5cbiAgICBhd2FpdCBOZXh0UGF0Y2hlci5yZXZlcnQodG1wRGlyKTtcbiAgICBjb25zdCByZXZlcnRlZCA9IHJlYWRDb25maWcoJ25leHQuY29uZmlnLmpzJyk7XG5cbiAgICBleHBlY3QocmV2ZXJ0ZWQpLnRvQmUob3JpZ2luYWwpO1xuICB9KTtcblxuICBpdCgncmV2ZXJ0cyBUeXBlU2NyaXB0IGNvbmZpZyBjbGVhbmx5IChleGFjdCByb3VuZC10cmlwKScsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvcmlnaW5hbCA9IGBpbXBvcnQgdHlwZSB7IE5leHRDb25maWcgfSBmcm9tICduZXh0JztcblxuY29uc3QgbmV4dENvbmZpZzogTmV4dENvbmZpZyA9IHtcbiAgcmVhY3RTdHJpY3RNb2RlOiB0cnVlLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgbmV4dENvbmZpZztcbmA7XG4gICAgd3JpdGVDb25maWcoJ25leHQuY29uZmlnLnRzJywgb3JpZ2luYWwpO1xuXG4gICAgYXdhaXQgTmV4dFBhdGNoZXIucGF0Y2godG1wRGlyLCAndHMtYXBwJyk7XG4gICAgYXdhaXQgTmV4dFBhdGNoZXIucmV2ZXJ0KHRtcERpcik7XG5cbiAgICBjb25zdCByZXZlcnRlZCA9IHJlYWRDb25maWcoJ25leHQuY29uZmlnLnRzJyk7XG4gICAgZXhwZWN0KHJldmVydGVkKS50b0JlKG9yaWdpbmFsKTtcbiAgfSk7XG5cbiAgaXQoJ2lzIGEgbm8tb3Agd2hlbiBub3RoaW5nIHdhcyBwYXRjaGVkJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsID0gYG1vZHVsZS5leHBvcnRzID0ge1xcbiAgcmVhY3RTdHJpY3RNb2RlOiB0cnVlLFxcbn07XFxuYDtcbiAgICB3cml0ZUNvbmZpZygnbmV4dC5jb25maWcuanMnLCBvcmlnaW5hbCk7XG5cbiAgICBhd2FpdCBOZXh0UGF0Y2hlci5yZXZlcnQodG1wRGlyKTtcblxuICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkQ29uZmlnKCduZXh0LmNvbmZpZy5qcycpO1xuICAgIGV4cGVjdChjb250ZW50KS50b0JlKG9yaWdpbmFsKTtcbiAgfSk7XG5cbiAgaXQoJ2lzIGEgbm8tb3Agd2hlbiBubyBjb25maWcgZmlsZSBleGlzdHMnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gU2hvdWxkIG5vdCB0aHJvd1xuICAgIGF3YWl0IE5leHRQYXRjaGVyLnJldmVydCh0bXBEaXIpO1xuICB9KTtcbn0pO1xuXG4vLyDilIDilIDilIAgRnVsbCBDeWNsZSAocGF0Y2gg4oaSIGJ1aWxkIHNpbXVsYXRpb24g4oaSIHJldmVydCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmRlc2NyaWJlKCdOZXh0UGF0Y2hlciBmdWxsIGN5Y2xlJywgKCkgPT4ge1xuICBpdCgncGF0Y2gg4oaSIG1vZGlmeSDihpIgcmV2ZXJ0IHByZXNlcnZlcyB1c2VyIGNoYW5nZXMgb3V0c2lkZSBtYXJrZXJzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsID0gYG1vZHVsZS5leHBvcnRzID0ge1xcbiAgcmVhY3RTdHJpY3RNb2RlOiB0cnVlLFxcbn07XFxuYDtcbiAgICB3cml0ZUNvbmZpZygnbmV4dC5jb25maWcuanMnLCBvcmlnaW5hbCk7XG5cbiAgICBhd2FpdCBOZXh0UGF0Y2hlci5wYXRjaCh0bXBEaXIsICdhcHAnKTtcblxuICAgIC8vIFNpbXVsYXRlIHVzZXIgKG9yIGJ1aWxkIHRvb2wpIGFkZGluZyBzb21ldGhpbmcgb3V0c2lkZSB0aGUgbWFya2Vyc1xuICAgIGxldCBjb250ZW50ID0gcmVhZENvbmZpZygnbmV4dC5jb25maWcuanMnKTtcbiAgICBjb250ZW50ID0gJy8vIEFkZGVkIGJ5IHNvbWUgdG9vbFxcbicgKyBjb250ZW50O1xuICAgIHdyaXRlQ29uZmlnKCduZXh0LmNvbmZpZy5qcycsIGNvbnRlbnQpO1xuXG4gICAgYXdhaXQgTmV4dFBhdGNoZXIucmV2ZXJ0KHRtcERpcik7XG5cbiAgICBjb25zdCByZXZlcnRlZCA9IHJlYWRDb25maWcoJ25leHQuY29uZmlnLmpzJyk7XG4gICAgZXhwZWN0KHJldmVydGVkKS50b0NvbnRhaW4oJy8vIEFkZGVkIGJ5IHNvbWUgdG9vbCcpO1xuICAgIGV4cGVjdChyZXZlcnRlZCkubm90LnRvQ29udGFpbigncnVud2F5OmJhc2VQYXRoJyk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Next.js config patcher for CLI builds.
3
+ * Injects basePath and assetPrefix into next.config.{ts,mjs,js}
4
+ * so the app works correctly under /app/<project-name>/ subpath.
5
+ */
6
+ export declare class NextPatcher {
7
+ /**
8
+ * Inject basePath and assetPrefix before a local build.
9
+ * Returns true if patching was applied.
10
+ */
11
+ static patch(projectPath: string, projectName: string): Promise<boolean>;
12
+ /**
13
+ * Revert the basePath patch after build.
14
+ */
15
+ static revert(projectPath: string): Promise<void>;
16
+ /**
17
+ * Find which next.config file exists in the project.
18
+ */
19
+ private static findConfigFile;
20
+ /**
21
+ * Inject patch lines into the config object.
22
+ * Handles multiple common formats:
23
+ * - module.exports = { ... }
24
+ * - export default { ... }
25
+ * - const nextConfig = { ... }; export default nextConfig
26
+ * - export default withPlugin({ ... })
27
+ */
28
+ private static injectIntoConfig;
29
+ private static insertAfterBrace;
30
+ }
@@ -0,0 +1,144 @@
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.NextPatcher = void 0;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const logger_1 = require("../utils/logger");
10
+ const PATCH_START = '// runway:basePath-start';
11
+ const PATCH_END = '// runway:basePath-end';
12
+ const CONFIG_FILES = ['next.config.ts', 'next.config.mjs', 'next.config.js'];
13
+ /**
14
+ * Next.js config patcher for CLI builds.
15
+ * Injects basePath and assetPrefix into next.config.{ts,mjs,js}
16
+ * so the app works correctly under /app/<project-name>/ subpath.
17
+ */
18
+ class NextPatcher {
19
+ /**
20
+ * Inject basePath and assetPrefix before a local build.
21
+ * Returns true if patching was applied.
22
+ */
23
+ static async patch(projectPath, projectName) {
24
+ const safeName = projectName.toLowerCase().replace(/[^a-z0-9]/g, '-');
25
+ const basePath = `/app/${safeName}`;
26
+ const configFile = NextPatcher.findConfigFile(projectPath);
27
+ if (!configFile) {
28
+ logger_1.logger.warn('No next.config found — basePath will not be set.');
29
+ logger_1.logger.warn('App may not work correctly under /app/ subpath.');
30
+ return false;
31
+ }
32
+ const configPath = path_1.default.join(projectPath, configFile);
33
+ let content = fs_1.default.readFileSync(configPath, 'utf-8');
34
+ // Already patched (e.g. interrupted previous run)
35
+ if (content.includes(PATCH_START)) {
36
+ logger_1.logger.dim('Next.js config already patched — skipping');
37
+ return true;
38
+ }
39
+ // Check if user already has basePath set (anchored to line start to avoid matching comments)
40
+ if (/^\s*basePath\s*:/m.test(content)) {
41
+ logger_1.logger.dim('User has basePath configured — skipping patcher');
42
+ return false;
43
+ }
44
+ const patchLines = [
45
+ PATCH_START,
46
+ ` basePath: '${basePath}',`,
47
+ ` assetPrefix: '${basePath}',`,
48
+ PATCH_END,
49
+ ].join('\n');
50
+ const patched = NextPatcher.injectIntoConfig(content, patchLines);
51
+ if (!patched) {
52
+ logger_1.logger.warn('Could not auto-inject basePath into next.config — unrecognized format.');
53
+ logger_1.logger.warn(`Manually add basePath: '${basePath}' to your next.config for correct routing.`);
54
+ return false;
55
+ }
56
+ fs_1.default.writeFileSync(configPath, patched, 'utf-8');
57
+ logger_1.logger.success(`Patched ${configFile} with basePath: '${basePath}'`);
58
+ return true;
59
+ }
60
+ /**
61
+ * Revert the basePath patch after build.
62
+ */
63
+ static async revert(projectPath) {
64
+ const configFile = NextPatcher.findConfigFile(projectPath);
65
+ if (!configFile)
66
+ return;
67
+ const configPath = path_1.default.join(projectPath, configFile);
68
+ let content = fs_1.default.readFileSync(configPath, 'utf-8');
69
+ if (!content.includes(PATCH_START))
70
+ return;
71
+ // Remove everything between PATCH_START and PATCH_END (inclusive)
72
+ const startIdx = content.indexOf(PATCH_START);
73
+ const endIdx = content.indexOf(PATCH_END);
74
+ if (startIdx === -1 || endIdx === -1)
75
+ return;
76
+ const before = content.slice(0, startIdx);
77
+ const after = content.slice(endIdx + PATCH_END.length);
78
+ // Clean up: remove the \n injected before PATCH_START and \n after PATCH_END
79
+ content = before.replace(/\n$/, '') + after.replace(/^\n/, '');
80
+ fs_1.default.writeFileSync(configPath, content, 'utf-8');
81
+ logger_1.logger.dim('Reverted Next.js basePath patch');
82
+ }
83
+ /**
84
+ * Find which next.config file exists in the project.
85
+ */
86
+ static findConfigFile(projectPath) {
87
+ for (const file of CONFIG_FILES) {
88
+ if (fs_1.default.existsSync(path_1.default.join(projectPath, file))) {
89
+ return file;
90
+ }
91
+ }
92
+ return null;
93
+ }
94
+ /**
95
+ * Inject patch lines into the config object.
96
+ * Handles multiple common formats:
97
+ * - module.exports = { ... }
98
+ * - export default { ... }
99
+ * - const nextConfig = { ... }; export default nextConfig
100
+ * - export default withPlugin({ ... })
101
+ */
102
+ static injectIntoConfig(content, patchLines) {
103
+ // Strategy: find the first `{` that belongs to the config object and inject after it.
104
+ // We try several patterns in order of specificity.
105
+ const patterns = [
106
+ // module.exports = { ...
107
+ /module\.exports\s*=\s*\{/,
108
+ // export default { ...
109
+ /export\s+default\s+\{/,
110
+ // const nextConfig: NextConfig = { ... (TS — require Config-like type)
111
+ /(?:const|let|var)\s+\w+\s*:\s*\w*[Cc]onfig\w*\s*=\s*\{/,
112
+ // export default withPlugin({ ... or defineConfig({ ...
113
+ /export\s+default\s+\w+\(\s*\{/,
114
+ ];
115
+ for (const pattern of patterns) {
116
+ const match = content.match(pattern);
117
+ if (match && match.index !== undefined) {
118
+ return NextPatcher.insertAfterBrace(content, match, patchLines);
119
+ }
120
+ }
121
+ // Fallback: detect `export default <varName>` and find matching `const <varName> = {`
122
+ const reExport = content.match(/export\s+default\s+(\w+)\s*;/);
123
+ if (reExport) {
124
+ const varName = reExport[1];
125
+ const varPattern = new RegExp(`(?:const|let|var)\\s+${varName}(?:\\s*:\\s*\\w+)?\\s*=\\s*\\{`);
126
+ const varMatch = content.match(varPattern);
127
+ if (varMatch && varMatch.index !== undefined) {
128
+ return NextPatcher.insertAfterBrace(content, varMatch, patchLines);
129
+ }
130
+ }
131
+ return null;
132
+ }
133
+ static insertAfterBrace(content, match, patchLines) {
134
+ const matchEnd = match.index + match[0].length;
135
+ const braceIdx = content.lastIndexOf('{', matchEnd);
136
+ if (braceIdx === -1)
137
+ return null;
138
+ const before = content.slice(0, braceIdx + 1);
139
+ const after = content.slice(braceIdx + 1);
140
+ return `${before}\n${patchLines}\n${after}`;
141
+ }
142
+ }
143
+ exports.NextPatcher = NextPatcher;
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dFBhdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvbmV4dFBhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4Qiw0Q0FBeUM7QUFFekMsTUFBTSxXQUFXLEdBQUcsMEJBQTBCLENBQUM7QUFDL0MsTUFBTSxTQUFTLEdBQUcsd0JBQXdCLENBQUM7QUFDM0MsTUFBTSxZQUFZLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBRTdFOzs7O0dBSUc7QUFDSCxNQUFhLFdBQVc7SUFDdEI7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBbUIsRUFBRSxXQUFtQjtRQUN6RCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0RSxNQUFNLFFBQVEsR0FBRyxRQUFRLFFBQVEsRUFBRSxDQUFDO1FBRXBDLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2hCLGVBQU0sQ0FBQyxJQUFJLENBQUMsa0RBQWtELENBQUMsQ0FBQztZQUNoRSxlQUFNLENBQUMsSUFBSSxDQUFDLGlEQUFpRCxDQUFDLENBQUM7WUFDL0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDdEQsSUFBSSxPQUFPLEdBQUcsWUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFbkQsa0RBQWtEO1FBQ2xELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFX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VUFBVSxDQUFDLENBQUM7WUFDckUsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBZSxFQUFFLEtBQXVCLEVBQUUsVUFBa0I7UUFDMUYsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ2hELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELElBQUksUUFBUSxLQUFLLENBQUMsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRWpDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM5QyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMxQyxPQUFPLEdBQUcsTUFBTSxLQUFLLFVBQVUsS0FBSyxLQUFLLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0NBQ0Y7QUE5SUQsa0NBOElDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vdXRpbHMvbG9nZ2VyJztcblxuY29uc3QgUEFUQ0hfU1RBUlQgPSAnLy8gcnVud2F5OmJhc2VQYXRoLXN0YXJ0JztcbmNvbnN0IFBBVENIX0VORCA9ICcvLyBydW53YXk6YmFzZVBhdGgtZW5kJztcbmNvbnN0IENPTkZJR19GSUxFUyA9IFsnbmV4dC5jb25maWcudHMnLCAnbmV4dC5jb25maWcubWpzJywgJ25leHQuY29uZmlnLmpzJ107XG5cbi8qKlxuICogTmV4dC5qcyBjb25maWcgcGF0Y2hlciBmb3IgQ0xJIGJ1aWxkcy5cbiAqIEluamVjdHMgYmFzZVBhdGggYW5kIGFzc2V0UHJlZml4IGludG8gbmV4dC5jb25maWcue3RzLG1qcyxqc31cbiAqIHNvIHRoZSBhcHAgd29ya3MgY29ycmVjdGx5IHVuZGVyIC9hcHAvPHByb2plY3QtbmFtZT4vIHN1YnBhdGguXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXh0UGF0Y2hlciB7XG4gIC8qKlxuICAgKiBJbmplY3QgYmFzZVBhdGggYW5kIGFzc2V0UHJlZml4IGJlZm9yZSBhIGxvY2FsIGJ1aWxkLlxuICAgKiBSZXR1cm5zIHRydWUgaWYgcGF0Y2hpbmcgd2FzIGFwcGxpZWQuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgcGF0Y2gocHJvamVjdFBhdGg6IHN0cmluZywgcHJvamVjdE5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHNhZmVOYW1lID0gcHJvamVjdE5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOV0vZywgJy0nKTtcbiAgICBjb25zdCBiYXNlUGF0aCA9IGAvYXBwLyR7c2FmZU5hbWV9YDtcblxuICAgIGNvbnN0IGNvbmZpZ0ZpbGUgPSBOZXh0UGF0Y2hlci5maW5kQ29uZmlnRmlsZShwcm9qZWN0UGF0aCk7XG4gICAgaWYgKCFjb25maWdGaWxlKSB7XG4gICAgICBsb2dnZXIud2FybignTm8gbmV4dC5jb25maWcgZm91bmQg4oCUIGJhc2VQYXRoIHdpbGwgbm90IGJlIHNldC4nKTtcbiAgICAgIGxvZ2dlci53YXJuKCdBcHAgbWF5IG5vdCB3b3JrIGNvcnJlY3RseSB1bmRlciAvYXBwLyBzdWJwYXRoLicpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLmpvaW4ocHJvamVjdFBhdGgsIGNvbmZpZ0ZpbGUpO1xuICAgIGxldCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGNvbmZpZ1BhdGgsICd1dGYtOCcpO1xuXG4gICAgLy8gQWxyZWFkeSBwYXRjaGVkIChlLmcuIGludGVycnVwdGVkIHByZXZpb3VzIHJ1bilcbiAgICBpZiAoY29udGVudC5pbmNsdWRlcyhQQVRDSF9TVEFSVCkpIHtcbiAgICAgIGxvZ2dlci5kaW0oJ05leHQuanMgY29uZmlnIGFscmVhZHkgcGF0Y2hlZCDigJQgc2tpcHBpbmcnKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHVzZXIgYWxyZWFkeSBoYXMgYmFzZVBhdGggc2V0IChhbmNob3JlZCB0byBsaW5lIHN0YXJ0IHRvIGF2b2lkIG1hdGNoaW5nIGNvbW1lbnRzKVxuICAgIGlmICgvXlxccypiYXNlUGF0aFxccyo6L20udGVzdChjb250ZW50KSkge1xuICAgICAgbG9nZ2VyLmRpbSgnVXNlciBoYXMgYmFzZVBhdGggY29uZmlndXJlZCDigJQgc2tpcHBpbmcgcGF0Y2hlcicpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdGNoTGluZXMgPSBbXG4gICAgICBQQVRDSF9TVEFSVCxcbiAgICAgIGAgIGJhc2VQYXRoOiAnJHtiYXNlUGF0aH0nLGAsXG4gICAgICBgICBhc3NldFByZWZpeDogJyR7YmFzZVBhdGh9JyxgLFxuICAgICAgUEFUQ0hfRU5ELFxuICAgIF0uam9pbignXFxuJyk7XG5cbiAgICBjb25zdCBwYXRjaGVkID0gTmV4dFBhdGNoZXIuaW5qZWN0SW50b0NvbmZpZyhjb250ZW50LCBwYXRjaExpbmVzKTtcbiAgICBpZiAoIXBhdGNoZWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdDb3VsZCBub3QgYXV0by1pbmplY3QgYmFzZVBhdGggaW50byBuZXh0LmNvbmZpZyDigJQgdW5yZWNvZ25pemVkIGZvcm1hdC4nKTtcbiAgICAgIGxvZ2dlci53YXJuKGBNYW51YWxseSBhZGQgYmFzZVBhdGg6ICcke2Jhc2VQYXRofScgdG8geW91ciBuZXh0LmNvbmZpZyBmb3IgY29ycmVjdCByb3V0aW5nLmApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZzLndyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgcGF0Y2hlZCwgJ3V0Zi04Jyk7XG4gICAgbG9nZ2VyLnN1Y2Nlc3MoYFBhdGNoZWQgJHtjb25maWdGaWxlfSB3aXRoIGJhc2VQYXRoOiAnJHtiYXNlUGF0aH0nYCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUmV2ZXJ0IHRoZSBiYXNlUGF0aCBwYXRjaCBhZnRlciBidWlsZC5cbiAgICovXG4gIHN0YXRpYyBhc3luYyByZXZlcnQocHJvamVjdFBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbmZpZ0ZpbGUgPSBOZXh0UGF0Y2hlci5maW5kQ29uZmlnRmlsZShwcm9qZWN0UGF0aCk7XG4gICAgaWYgKCFjb25maWdGaWxlKSByZXR1cm47XG5cbiAgICBjb25zdCBjb25maWdQYXRoID0gcGF0aC5qb2luKHByb2plY3RQYXRoLCBjb25maWdGaWxlKTtcbiAgICBsZXQgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmLTgnKTtcblxuICAgIGlmICghY29udGVudC5pbmNsdWRlcyhQQVRDSF9TVEFSVCkpIHJldHVybjtcblxuICAgIC8vIFJlbW92ZSBldmVyeXRoaW5nIGJldHdlZW4gUEFUQ0hfU1RBUlQgYW5kIFBBVENIX0VORCAoaW5jbHVzaXZlKVxuICAgIGNvbnN0IHN0YXJ0SWR4ID0gY29udGVudC5pbmRleE9mKFBBVENIX1NUQVJUKTtcbiAgICBjb25zdCBlbmRJZHggPSBjb250ZW50LmluZGV4T2YoUEFUQ0hfRU5EKTtcbiAgICBpZiAoc3RhcnRJZHggPT09IC0xIHx8IGVuZElkeCA9PT0gLTEpIHJldHVybjtcblxuICAgIGNvbnN0IGJlZm9yZSA9IGNvbnRlbnQuc2xpY2UoMCwgc3RhcnRJZHgpO1xuICAgIGNvbnN0IGFmdGVyID0gY29udGVudC5zbGljZShlbmRJZHggKyBQQVRDSF9FTkQubGVuZ3RoKTtcblxuICAgIC8vIENsZWFuIHVwOiByZW1vdmUgdGhlIFxcbiBpbmplY3RlZCBiZWZvcmUgUEFUQ0hfU1RBUlQgYW5kIFxcbiBhZnRlciBQQVRDSF9FTkRcbiAgICBjb250ZW50ID0gYmVmb3JlLnJlcGxhY2UoL1xcbiQvLCAnJykgKyBhZnRlci5yZXBsYWNlKC9eXFxuLywgJycpO1xuXG4gICAgZnMud3JpdGVGaWxlU3luYyhjb25maWdQYXRoLCBjb250ZW50LCAndXRmLTgnKTtcbiAgICBsb2dnZXIuZGltKCdSZXZlcnRlZCBOZXh0LmpzIGJhc2VQYXRoIHBhdGNoJyk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCB3aGljaCBuZXh0LmNvbmZpZyBmaWxlIGV4aXN0cyBpbiB0aGUgcHJvamVjdC5cbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGZpbmRDb25maWdGaWxlKHByb2plY3RQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgQ09ORklHX0ZJTEVTKSB7XG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4ocHJvamVjdFBhdGgsIGZpbGUpKSkge1xuICAgICAgICByZXR1cm4gZmlsZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogSW5qZWN0IHBhdGNoIGxpbmVzIGludG8gdGhlIGNvbmZpZyBvYmplY3QuXG4gICAqIEhhbmRsZXMgbXVsdGlwbGUgY29tbW9uIGZvcm1hdHM6XG4gICAqICAgLSBtb2R1bGUuZXhwb3J0cyA9IHsgLi4uIH1cbiAgICogICAtIGV4cG9ydCBkZWZhdWx0IHsgLi4uIH1cbiAgICogICAtIGNvbnN0IG5leHRDb25maWcgPSB7IC4uLiB9OyBleHBvcnQgZGVmYXVsdCBuZXh0Q29uZmlnXG4gICAqICAgLSBleHBvcnQgZGVmYXVsdCB3aXRoUGx1Z2luKHsgLi4uIH0pXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBpbmplY3RJbnRvQ29uZmlnKGNvbnRlbnQ6IHN0cmluZywgcGF0Y2hMaW5lczogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgLy8gU3RyYXRlZ3k6IGZpbmQgdGhlIGZpcnN0IGB7YCB0aGF0IGJlbG9uZ3MgdG8gdGhlIGNvbmZpZyBvYmplY3QgYW5kIGluamVjdCBhZnRlciBpdC5cbiAgICAvLyBXZSB0cnkgc2V2ZXJhbCBwYXR0ZXJucyBpbiBvcmRlciBvZiBzcGVjaWZpY2l0eS5cblxuICAgIGNvbnN0IHBhdHRlcm5zID0gW1xuICAgICAgLy8gbW9kdWxlLmV4cG9ydHMgPSB7IC4uLlxuICAgICAgL21vZHVsZVxcLmV4cG9ydHNcXHMqPVxccypcXHsvLFxuICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgeyAuLi5cbiAgICAgIC9leHBvcnRcXHMrZGVmYXVsdFxccytcXHsvLFxuICAgICAgLy8gY29uc3QgbmV4dENvbmZpZzogTmV4dENvbmZpZyA9IHsgLi4uICAoVFMg4oCUIHJlcXVpcmUgQ29uZmlnLWxpa2UgdHlwZSlcbiAgICAgIC8oPzpjb25zdHxsZXR8dmFyKVxccytcXHcrXFxzKjpcXHMqXFx3KltDY11vbmZpZ1xcdypcXHMqPVxccypcXHsvLFxuICAgICAgLy8gZXhwb3J0IGRlZmF1bHQgd2l0aFBsdWdpbih7IC4uLiAgb3IgZGVmaW5lQ29uZmlnKHsgLi4uXG4gICAgICAvZXhwb3J0XFxzK2RlZmF1bHRcXHMrXFx3K1xcKFxccypcXHsvLFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gY29udGVudC5tYXRjaChwYXR0ZXJuKTtcbiAgICAgIGlmIChtYXRjaCAmJiBtYXRjaC5pbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBOZXh0UGF0Y2hlci5pbnNlcnRBZnRlckJyYWNlKGNvbnRlbnQsIG1hdGNoLCBwYXRjaExpbmVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjazogZGV0ZWN0IGBleHBvcnQgZGVmYXVsdCA8dmFyTmFtZT5gIGFuZCBmaW5kIG1hdGNoaW5nIGBjb25zdCA8dmFyTmFtZT4gPSB7YFxuICAgIGNvbnN0IHJlRXhwb3J0ID0gY29udGVudC5tYXRjaCgvZXhwb3J0XFxzK2RlZmF1bHRcXHMrKFxcdyspXFxzKjsvKTtcbiAgICBpZiAocmVFeHBvcnQpIHtcbiAgICAgIGNvbnN0IHZhck5hbWUgPSByZUV4cG9ydFsxXTtcbiAgICAgIGNvbnN0IHZhclBhdHRlcm4gPSBuZXcgUmVnRXhwKGAoPzpjb25zdHxsZXR8dmFyKVxcXFxzKyR7dmFyTmFtZX0oPzpcXFxccyo6XFxcXHMqXFxcXHcrKT9cXFxccyo9XFxcXHMqXFxcXHtgKTtcbiAgICAgIGNvbnN0IHZhck1hdGNoID0gY29udGVudC5tYXRjaCh2YXJQYXR0ZXJuKTtcbiAgICAgIGlmICh2YXJNYXRjaCAmJiB2YXJNYXRjaC5pbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBOZXh0UGF0Y2hlci5pbnNlcnRBZnRlckJyYWNlKGNvbnRlbnQsIHZhck1hdGNoLCBwYXRjaExpbmVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGluc2VydEFmdGVyQnJhY2UoY29udGVudDogc3RyaW5nLCBtYXRjaDogUmVnRXhwTWF0Y2hBcnJheSwgcGF0Y2hMaW5lczogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgY29uc3QgbWF0Y2hFbmQgPSBtYXRjaC5pbmRleCEgKyBtYXRjaFswXS5sZW5ndGg7XG4gICAgY29uc3QgYnJhY2VJZHggPSBjb250ZW50Lmxhc3RJbmRleE9mKCd7JywgbWF0Y2hFbmQpO1xuICAgIGlmIChicmFjZUlkeCA9PT0gLTEpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgYmVmb3JlID0gY29udGVudC5zbGljZSgwLCBicmFjZUlkeCArIDEpO1xuICAgIGNvbnN0IGFmdGVyID0gY29udGVudC5zbGljZShicmFjZUlkeCArIDEpO1xuICAgIHJldHVybiBgJHtiZWZvcmV9XFxuJHtwYXRjaExpbmVzfVxcbiR7YWZ0ZXJ9YDtcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "runway-cli",
3
- "version": "1.3.1",
3
+ "version": "1.4.0",
4
4
  "description": "CLI tool for deploying projects to Runway",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -14,6 +14,7 @@
14
14
  "build": "tsc",
15
15
  "dev": "ts-node src/index.ts",
16
16
  "start": "node dist/index.js",
17
+ "test": "vitest run",
17
18
  "prepublishOnly": "npm run build"
18
19
  },
19
20
  "keywords": [
@@ -43,7 +44,8 @@
43
44
  "@types/inquirer": "^8.2.10",
44
45
  "@types/node": "^20.0.0",
45
46
  "ts-node": "^10.9.1",
46
- "typescript": "^5.0.0"
47
+ "typescript": "^5.0.0",
48
+ "vitest": "^3.2.4"
47
49
  },
48
50
  "engines": {
49
51
  "node": ">=18.0.0"