@pipeline-builder/pipeline-manager 3.4.70 → 3.4.71

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.
Files changed (84) hide show
  1. package/README.md +32 -2
  2. package/dist/agent/ai.d.ts +55 -0
  3. package/dist/agent/ai.d.ts.map +1 -0
  4. package/dist/agent/ai.js +130 -0
  5. package/dist/agent/executor.d.ts +24 -0
  6. package/dist/agent/executor.d.ts.map +1 -0
  7. package/dist/agent/executor.js +54 -0
  8. package/dist/agent/health.d.ts +22 -0
  9. package/dist/agent/health.d.ts.map +1 -0
  10. package/dist/agent/health.js +55 -0
  11. package/dist/agent/prereqs.d.ts +16 -0
  12. package/dist/agent/prereqs.d.ts.map +1 -0
  13. package/dist/agent/prereqs.js +73 -0
  14. package/dist/agent/targets.d.ts +83 -0
  15. package/dist/agent/targets.d.ts.map +1 -0
  16. package/dist/agent/targets.js +142 -0
  17. package/dist/agent/troubleshoot.d.ts +30 -0
  18. package/dist/agent/troubleshoot.d.ts.map +1 -0
  19. package/dist/agent/troubleshoot.js +87 -0
  20. package/dist/boilerplate.js +8 -13
  21. package/dist/cli.d.ts.map +1 -1
  22. package/dist/cli.js +114 -116
  23. package/dist/commands/audit-stacks.js +22 -24
  24. package/dist/commands/audit-tokens.js +25 -27
  25. package/dist/commands/bootstrap.js +29 -37
  26. package/dist/commands/create-pipeline.js +55 -92
  27. package/dist/commands/deploy.d.ts.map +1 -1
  28. package/dist/commands/deploy.js +58 -62
  29. package/dist/commands/get-pipeline.js +24 -28
  30. package/dist/commands/get-plugin.js +24 -28
  31. package/dist/commands/list-pipelines.js +30 -31
  32. package/dist/commands/list-plugins.js +32 -33
  33. package/dist/commands/login.js +44 -49
  34. package/dist/commands/org-export.js +22 -60
  35. package/dist/commands/provision.d.ts +12 -0
  36. package/dist/commands/provision.d.ts.map +1 -0
  37. package/dist/commands/provision.js +362 -0
  38. package/dist/commands/register.js +29 -30
  39. package/dist/commands/setup-events.d.ts.map +1 -1
  40. package/dist/commands/setup-events.js +42 -77
  41. package/dist/commands/status.js +20 -25
  42. package/dist/commands/store-token.js +44 -82
  43. package/dist/commands/synth.d.ts.map +1 -1
  44. package/dist/commands/synth.js +36 -35
  45. package/dist/commands/upload-plugin.js +59 -96
  46. package/dist/commands/validate-templates.d.ts.map +1 -1
  47. package/dist/commands/validate-templates.js +23 -29
  48. package/dist/commands/version.js +42 -47
  49. package/dist/config/cli.constants.d.ts.map +1 -1
  50. package/dist/config/cli.constants.js +24 -31
  51. package/dist/types/config.js +2 -3
  52. package/dist/types/error.js +3 -7
  53. package/dist/types/index.d.ts +4 -4
  54. package/dist/types/index.d.ts.map +1 -1
  55. package/dist/types/index.js +5 -21
  56. package/dist/types/pipeline.js +2 -3
  57. package/dist/types/plugin.js +2 -3
  58. package/dist/utils/api-client.d.ts +1 -1
  59. package/dist/utils/api-client.d.ts.map +1 -1
  60. package/dist/utils/api-client.js +23 -28
  61. package/dist/utils/audit-log.js +16 -22
  62. package/dist/utils/auth-guard.js +2 -5
  63. package/dist/utils/aws-secrets.js +17 -23
  64. package/dist/utils/banner.js +16 -23
  65. package/dist/utils/cdk-utils.js +14 -24
  66. package/dist/utils/command-utils.d.ts +1 -1
  67. package/dist/utils/command-utils.d.ts.map +1 -1
  68. package/dist/utils/command-utils.js +32 -44
  69. package/dist/utils/config-loader.d.ts +1 -1
  70. package/dist/utils/config-loader.d.ts.map +1 -1
  71. package/dist/utils/config-loader.js +24 -58
  72. package/dist/utils/error-handler.d.ts +1 -1
  73. package/dist/utils/error-handler.d.ts.map +1 -1
  74. package/dist/utils/error-handler.js +16 -24
  75. package/dist/utils/list-command-utils.js +15 -20
  76. package/dist/utils/output-utils.d.ts +1 -1
  77. package/dist/utils/output-utils.d.ts.map +1 -1
  78. package/dist/utils/output-utils.js +35 -55
  79. package/dist/utils/plugin-resolver.d.ts +1 -1
  80. package/dist/utils/plugin-resolver.d.ts.map +1 -1
  81. package/dist/utils/plugin-resolver.js +6 -8
  82. package/dist/utils/rate-limiter.js +11 -19
  83. package/dist/utils/registry.js +16 -22
  84. package/package.json +26 -17
@@ -1,17 +1,12 @@
1
- "use strict";
2
1
  // Copyright 2026 Pipeline Builder Contributors
3
2
  // SPDX-License-Identifier: Apache-2.0
4
- var __importDefault = (this && this.__importDefault) || function (mod) {
5
- return (mod && mod.__esModule) ? mod : { "default": mod };
6
- };
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.validateTemplatesCommand = validateTemplatesCommand;
9
- const fs_1 = __importDefault(require("fs"));
10
- const path_1 = __importDefault(require("path"));
11
- const yaml_1 = __importDefault(require("yaml"));
12
- const command_utils_1 = require("../utils/command-utils");
13
- const error_handler_1 = require("../utils/error-handler");
14
- const output_utils_1 = require("../utils/output-utils");
3
+ import fs from 'fs';
4
+ import path from 'path';
5
+ import { Command } from 'commander';
6
+ import YAML from 'yaml';
7
+ import { printCommandHeader, printSslWarning, createAuthenticatedClientAsync } from '../utils/command-utils.js';
8
+ import { ERROR_CODES, handleError } from '../utils/error-handler.js';
9
+ import { printError, printInfo, printSuccess, printWarning } from '../utils/output-utils.js';
15
10
  /**
16
11
  * Register the `validate-templates` command.
17
12
  *
@@ -20,7 +15,7 @@ const output_utils_1 = require("../utils/output-utils");
20
15
  * pipeline-manager validate-templates --plugin <name:version>
21
16
  * pipeline-manager validate-templates --file ./plugin-spec.yaml
22
17
  */
23
- function validateTemplatesCommand(program) {
18
+ export function validateTemplatesCommand(program) {
24
19
  program
25
20
  .command('validate-templates')
26
21
  .description('Parse and validate {{ ... }} templates in a pipeline or plugin spec')
@@ -30,19 +25,18 @@ function validateTemplatesCommand(program) {
30
25
  .option('--verify-ssl', 'Enable SSL certificate verification')
31
26
  .option('--no-verify-ssl', 'Disable SSL certificate verification')
32
27
  .action(async (options) => {
33
- const executionId = (0, command_utils_1.printCommandHeader)('Validate Templates');
28
+ const executionId = printCommandHeader('Validate Templates');
34
29
  try {
35
- (0, command_utils_1.printSslWarning)(options.verifySsl);
30
+ printSslWarning(options.verifySsl);
36
31
  if (!options.pipeline && !options.plugin && !options.file) {
37
32
  throw new Error('One of --pipeline, --plugin, or --file is required');
38
33
  }
39
- // eslint-disable-next-line @typescript-eslint/no-require-imports
40
- const core = require('@pipeline-builder/pipeline-core');
34
+ const core = await import('@pipeline-builder/pipeline-core');
41
35
  const problems = [];
42
36
  if (options.file) {
43
- const filePath = path_1.default.resolve(options.file);
44
- const text = fs_1.default.readFileSync(filePath, 'utf-8');
45
- const doc = filePath.endsWith('.json') ? JSON.parse(text) : yaml_1.default.parse(text);
37
+ const filePath = path.resolve(options.file);
38
+ const text = fs.readFileSync(filePath, 'utf-8');
39
+ const doc = filePath.endsWith('.json') ? JSON.parse(text) : YAML.parse(text);
46
40
  // Guess: if `pluginType` is present, treat as plugin spec; else pipeline
47
41
  const isPlugin = typeof doc.pluginType === 'string';
48
42
  const errors = isPlugin
@@ -52,8 +46,8 @@ function validateTemplatesCommand(program) {
52
46
  problems.push({ source: filePath, errors });
53
47
  }
54
48
  if (options.pipeline) {
55
- (0, output_utils_1.printInfo)('Fetching pipeline', { id: options.pipeline });
56
- const client = await (0, command_utils_1.createAuthenticatedClientAsync)(options);
49
+ printInfo('Fetching pipeline', { id: options.pipeline });
50
+ const client = await createAuthenticatedClientAsync(options);
57
51
  const cfg = client.getConfig();
58
52
  const res = await client.get(`${cfg.api.pipelineUrl}/${options.pipeline}`);
59
53
  const doc = res.pipeline?.props
@@ -68,8 +62,8 @@ function validateTemplatesCommand(program) {
68
62
  const [name, version] = options.plugin.split(':');
69
63
  if (!name || !version)
70
64
  throw new Error('--plugin requires <name:version> format');
71
- (0, output_utils_1.printInfo)('Fetching plugin', { name, version });
72
- const client = await (0, command_utils_1.createAuthenticatedClientAsync)(options);
65
+ printInfo('Fetching plugin', { name, version });
66
+ const client = await createAuthenticatedClientAsync(options);
73
67
  const cfg = client.getConfig();
74
68
  const res = await client.get(`${cfg.api.pluginUrl}/find?name=${encodeURIComponent(name)}&version=${encodeURIComponent(version)}`);
75
69
  const doc = res.plugin
@@ -81,12 +75,12 @@ function validateTemplatesCommand(program) {
81
75
  problems.push({ source: `plugin/${name}:${version}`, errors });
82
76
  }
83
77
  if (problems.length === 0) {
84
- (0, output_utils_1.printSuccess)('All templates valid', { executionId });
78
+ printSuccess('All templates valid', { executionId });
85
79
  return;
86
80
  }
87
- (0, output_utils_1.printWarning)(`Found ${problems.reduce((a, p) => a + p.errors.length, 0)} template error(s):`);
81
+ printWarning(`Found ${problems.reduce((a, p) => a + p.errors.length, 0)} template error(s):`);
88
82
  for (const p of problems) {
89
- (0, output_utils_1.printError)(p.source);
83
+ printError(p.source);
90
84
  for (const e of p.errors) {
91
85
  console.log(` [${e.field ?? '?'}] ${e.message}${e.code ? ` (${e.code})` : ''}`);
92
86
  }
@@ -94,7 +88,7 @@ function validateTemplatesCommand(program) {
94
88
  process.exit(1);
95
89
  }
96
90
  catch (err) {
97
- (0, error_handler_1.handleError)(err, error_handler_1.ERROR_CODES.API_REQUEST, {
91
+ handleError(err, ERROR_CODES.API_REQUEST, {
98
92
  debug: program.opts().debug,
99
93
  exit: true,
100
94
  context: { command: 'validate-templates', executionId },
@@ -121,4 +115,4 @@ function validatePipelineDoc(core, doc) {
121
115
  const cycles = core.detectCycles(doc, isTpl, (f) => isTpl(f) ? f : null);
122
116
  return [...errors, ...cycles];
123
117
  }
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtdGVtcGxhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3ZhbGlkYXRlLXRlbXBsYXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0NBQStDO0FBQy9DLHNDQUFzQzs7Ozs7QUF5QnRDLDREQXFGQztBQTVHRCw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBRXhCLGdEQUF3QjtBQUN4QiwwREFBNkc7QUFDN0csMERBQWtFO0FBQ2xFLHdEQUEwRjtBQVMxRjs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0Isd0JBQXdCLENBQUMsT0FBZ0I7SUFDdkQsT0FBTztTQUNKLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztTQUM3QixXQUFXLENBQUMscUVBQXFFLENBQUM7U0FDbEYsTUFBTSxDQUFDLGlCQUFpQixFQUFFLG9DQUFvQyxDQUFDO1NBQy9ELE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSxnREFBZ0QsQ0FBQztTQUNuRixNQUFNLENBQUMsZUFBZSxFQUFFLHlEQUF5RCxDQUFDO1NBQ2xGLE1BQU0sQ0FBQyxjQUFjLEVBQUUscUNBQXFDLENBQUM7U0FDN0QsTUFBTSxDQUFDLGlCQUFpQixFQUFFLHNDQUFzQyxDQUFDO1NBQ2pFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBd0IsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLElBQUEsa0NBQWtCLEVBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUM7WUFDSCxJQUFBLCtCQUFlLEVBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRW5DLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDMUQsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1lBQ3hFLENBQUM7WUFFRCxpRUFBaUU7WUFDakUsTUFBTSxJQUFJ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TSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQy9ELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLElBQXlCLEVBQUUsR0FBWTtJQUNsRSxNQUFNLEtBQUssR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFLENBQzFCLENBQUMsS0FBSyxhQUFhO1FBQ25CLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7UUFDdEQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzdELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRixPQUFPLENBQUMsR0FBRyxNQUFNLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IFlBTUwgZnJvbSAneWFtbCc7XG5pbXBvcnQgeyBwcmludENvbW1hbmRIZWFkZXIsIHByaW50U3NsV2FybmluZywgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyJztcbmltcG9ydCB7IHByaW50RXJyb3IsIHByaW50SW5mbywgcHJpbnRTdWNjZXNzLCBwcmludFdhcm5pbmcgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMnO1xuXG5pbnRlcmZhY2UgVmFsaWRhdGVPcHRpb25zIHtcbiAgcGlwZWxpbmU/OiBzdHJpbmc7XG4gIHBsdWdpbj86IHN0cmluZztcbiAgZmlsZT86IHN0cmluZztcbiAgdmVyaWZ5U3NsPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciB0aGUgYHZhbGlkYXRlLXRlbXBsYXRlc2AgY29tbWFuZC5cbiAqXG4gKiBVc2FnZTpcbiAqICAgcGlwZWxpbmUtbWFuYWdlciB2YWxpZGF0ZS10ZW1wbGF0ZXMgLS1waXBlbGluZSA8dXVpZD5cbiAqICAgcGlwZWxpbmUtbWFuYWdlciB2YWxpZGF0ZS10ZW1wbGF0ZXMgLS1wbHVnaW4gPG5hbWU6dmVyc2lvbj5cbiAqICAgcGlwZWxpbmUtbWFuYWdlciB2YWxpZGF0ZS10ZW1wbGF0ZXMgLS1maWxlIC4vcGx1Z2luLXNwZWMueWFtbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVUZW1wbGF0ZXNDb21tYW5kKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKCd2YWxpZGF0ZS10ZW1wbGF0ZXMnKVxuICAgIC5kZXNjcmlwdGlvbignUGFyc2UgYW5kIHZhbGlkYXRlIHt7IC4uLiB9fSB0ZW1wbGF0ZXMgaW4gYSBwaXBlbGluZSBvciBwbHVnaW4gc3BlYycpXG4gICAgLm9wdGlvbignLS1waXBlbGluZSA8aWQ+JywgJ1ZhbGlkYXRlIHRoZSBwaXBlbGluZSB3aXRoIHRoaXMgSUQnKVxuICAgIC5vcHRpb24oJy0tcGx1Z2luIDxuYW1lOnZlcnNpb24+JywgJ1ZhbGlkYXRlIHRoZSBwbHVnaW4gd2l0aCB0aGlzIG5hbWUgYW5kIHZlcnNpb24nKVxuICAgIC5vcHRpb24oJy0tZmlsZSA8cGF0aD4nLCAnVmFsaWRhdGUgYSBsb2NhbCBwbHVnaW4tc3BlYy55YW1sIG9yIHBpcGVsaW5lLmpzb24gZmlsZScpXG4gICAgLm9wdGlvbignLS12ZXJpZnktc3NsJywgJ0VuYWJsZSBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uJylcbiAgICAub3B0aW9uKCctLW5vLXZlcmlmeS1zc2wnLCAnRGlzYWJsZSBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiBWYWxpZGF0ZU9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdWYWxpZGF0ZSBUZW1wbGF0ZXMnKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnBpcGVsaW5lICYmICFvcHRpb25zLnBsdWdpbiAmJiAhb3B0aW9ucy5maWxlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmUgb2YgLS1waXBlbGluZSwgLS1wbHVnaW4sIG9yIC0tZmlsZSBpcyByZXF1aXJlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICAgICAgY29uc3QgY29yZSA9IHJlcXVpcmUoJ0BwaXBlbGluZS1idWlsZGVyL3BpcGVsaW5lLWNvcmUnKTtcblxuICAgICAgICBjb25zdCBwcm9ibGVtczogQXJyYXk8eyBzb3VyY2U6IHN0cmluZzsgZXJyb3JzOiB7IGZpZWxkPzogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmc7IGNvZGU/OiBzdHJpbmcgfVtdIH0+ID0gW107XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZmlsZSkge1xuICAgICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKG9wdGlvbnMuZmlsZSk7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0Zi04Jyk7XG4gICAgICAgICAgY29uc3QgZG9jID0gZmlsZVBhdGguZW5kc1dpdGgoJy5qc29uJykgPyBKU09OLnBhcnNlKHRleHQpIDogWUFNTC5wYXJzZSh0ZXh0KTtcblxuICAgICAgICAgIC8vIEd1ZXNzOiBpZiBgcGx1Z2luVHlwZWAgaXMgcHJlc2VudCwgdHJlYXQgYXMgcGx1Z2luIHNwZWM7IGVsc2UgcGlwZWxpbmVcbiAgICAgICAgICBjb25zdCBpc1BsdWdpbiA9IHR5cGVvZiAoZG9jIGFzIHsgcGx1Z2luVHlwZT86IHVua25vd24gfSkucGx1Z2luVHlwZSA9PT0gJ3N0cmluZyc7XG4gICAgICAgICAgY29uc3QgZXJyb3JzID0gaXNQbHVnaW5cbiAgICAgICAgICAgID8gdmFsaWRhdGVQbHVnaW5Eb2MoY29yZSwgZG9jKVxuICAgICAgICAgICAgOiB2YWxpZGF0ZVBpcGVsaW5lRG9jKGNvcmUsIGRvYyk7XG4gICAgICAgICAgaWYgKGVycm9ycy5sZW5ndGgpIHByb2JsZW1zLnB1c2goeyBzb3VyY2U6IGZpbGVQYXRoLCBlcnJvcnMgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5waXBlbGluZSkge1xuICAgICAgICAgIHByaW50SW5mbygnRmV0Y2hpbmcgcGlwZWxpbmUnLCB7IGlkOiBvcHRpb25zLnBpcGVsaW5lIH0pO1xuICAgICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IGNyZWF0ZUF1dGhlbnRpY2F0ZWRDbGllbnRBc3luYyhvcHRpb25zKTtcbiAgICAgICAgICBjb25zdCBjZmcgPSBjbGllbnQuZ2V0Q29uZmlnKCk7XG4gICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY2xpZW50LmdldDx7IHBpcGVsaW5lPzogeyBwcm9wczogdW5rbm93biB9IH0+KGAke2NmZy5hcGkucGlwZWxpbmVVcmx9LyR7b3B0aW9ucy5waXBlbGluZX1gKTtcbiAgICAgICAgICBjb25zdCBkb2MgPSAocmVzIGFzIHsgcGlwZWxpbmU/OiB7IHByb3BzOiB1bmtub3duIH0gfSkucGlwZWxpbmU/LnByb3BzXG4gICAgICAgICAgICA/PyAocmVzIGFzIHsgZGF0YT86IHsgcGlwZWxpbmU/OiB7IHByb3BzOiB1bmtub3duIH0gfSB9KS5kYXRhPy5waXBlbGluZT8ucHJvcHM7XG4gICAgICAgICAgaWYgKCFkb2MpIHRocm93IG5ldyBFcnJvcihgUGlwZWxpbmUgJHtvcHRpb25zLnBpcGVsaW5lfSBub3QgZm91bmRgKTtcbiAgICAgICAgICBjb25zdCBlcnJvcnMgPSB2YWxpZGF0ZVBpcGVsaW5lRG9jKGNvcmUsIGRvYyk7XG4gICAgICAgICAgaWYgKGVycm9ycy5sZW5ndGgpIHByb2JsZW1zLnB1c2goeyBzb3VyY2U6IGBwaXBlbGluZS8ke29wdGlvbnMucGlwZWxpbmV9YCwgZXJyb3JzIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMucGx1Z2luKSB7XG4gICAgICAgICAgY29uc3QgW25hbWUsIHZlcnNpb25dID0gb3B0aW9ucy5wbHVnaW4uc3BsaXQoJzonKTtcbiAgICAgICAgICBpZiAoIW5hbWUgfHwgIXZlcnNpb24pIHRocm93IG5ldyBFcnJvcignLS1wbHVnaW4gcmVxdWlyZXMgPG5hbWU6dmVyc2lvbj4gZm9ybWF0Jyk7XG4gICAgICAgICAgcHJpbnRJbmZvKCdGZXRjaGluZyBwbHVnaW4nLCB7IG5hbWUsIHZlcnNpb24gfSk7XG4gICAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jKG9wdGlvbnMpO1xuICAgICAgICAgIGNvbnN0IGNmZyA9IGNsaWVudC5nZXRDb25maWcoKTtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjbGllbnQuZ2V0PHsgcGx1Z2luOiB1bmtub3duIH0+KFxuICAgICAgICAgICAgYCR7Y2ZnLmFwaS5wbHVnaW5Vcmx9L2ZpbmQ/bmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudChuYW1lKX0mdmVyc2lvbj0ke2VuY29kZVVSSUNvbXBvbmVudCh2ZXJzaW9uKX1gLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgZG9jID0gKHJlcyBhcyB7IHBsdWdpbj86IHVua25vd24gfSkucGx1Z2luXG4gICAgICAgICAgICA/PyAocmVzIGFzIHsgZGF0YT86IHsgcGx1Z2luPzogdW5rbm93biB9IH0pLmRhdGE/LnBsdWdpbjtcbiAgICAgICAgICBpZiAoIWRvYykgdGhyb3cgbmV3IEVycm9yKGBQbHVnaW4gJHtuYW1lfToke3ZlcnNpb259IG5vdCBmb3VuZGApO1xuICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlUGx1Z2luRG9jKGNvcmUsIGRvYyk7XG4gICAgICAgICAgaWYgKGVycm9ycy5sZW5ndGgpIHByb2JsZW1zLnB1c2goeyBzb3VyY2U6IGBwbHVnaW4vJHtuYW1lfToke3ZlcnNpb259YCwgZXJyb3JzIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb2JsZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHByaW50U3VjY2VzcygnQWxsIHRlbXBsYXRlcyB2YWxpZCcsIHsgZXhlY3V0aW9uSWQgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpbnRXYXJuaW5nKGBGb3VuZCAke3Byb2JsZW1zLnJlZHVjZSgoYSwgcCkgPT4gYSArIHAuZXJyb3JzLmxlbmd0aCwgMCl9IHRlbXBsYXRlIGVycm9yKHMpOmApO1xuICAgICAgICBmb3IgKGNvbnN0IHAgb2YgcHJvYmxlbXMpIHtcbiAgICAgICAgICBwcmludEVycm9yKHAuc291cmNlKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgcC5lcnJvcnMpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGAgICAgWyR7ZS5maWVsZCA/PyAnPyd9XSAke2UubWVzc2FnZX0ke2UuY29kZSA/IGAgKCR7ZS5jb2RlfSlgIDogJyd9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnIsIEVSUk9SX0NPREVTLkFQSV9SRVFVRVNULCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDogeyBjb21tYW5kOiAndmFsaWRhdGUtdGVtcGxhdGVzJywgZXhlY3V0aW9uSWQgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUGx1Z2luRG9jKGNvcmU6IFJlY29yZDxzdHJpbmcsIGFueT4sIGRvYzogdW5rbm93bik6IEFycmF5PHsgZmllbGQ/OiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZzsgY29kZT86IHN0cmluZyB9PiB7XG4gIGNvbnN0IGlzVHBsID0gKGY6IHN0cmluZykgPT5cbiAgICBmID09PSAnZGVzY3JpcHRpb24nIHx8XG4gICAgZi5zdGFydHNXaXRoKCdjb21tYW5kcycpIHx8XG4gICAgZi5zdGFydHNXaXRoKCdpbnN0YWxsQ29tbWFuZHMnKSB8fFxuICAgIGYuc3RhcnRzV2l0aCgnZW52LicpIHx8IGYuc3RhcnRzV2l0aCgnZW52WycpIHx8XG4gICAgZi5zdGFydHNXaXRoKCdidWlsZEFyZ3MuJykgfHwgZi5zdGFydHNXaXRoKCdidWlsZEFyZ3NbJyk7XG4gIGNvbnN0IGlzS25vd24gPSBjb3JlLmFsbG93ZWRTY29wZVJvb3RzKFsncGlwZWxpbmUnLCAncGx1Z2luJywgJ2VudiddKTtcbiAgY29uc3QgeyBlcnJvcnMgfSA9IGNvcmUudmFsaWRhdGVUZW1wbGF0ZXMoZG9jLCBpc1RwbCwgaXNLbm93bik7XG4gIHJldHVybiBlcnJvcnM7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUGlwZWxpbmVEb2MoY29yZTogUmVjb3JkPHN0cmluZywgYW55PiwgZG9jOiB1bmtub3duKTogQXJyYXk8eyBmaWVsZD86IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nOyBjb2RlPzogc3RyaW5nIH0+IHtcbiAgY29uc3QgaXNUcGwgPSAoZjogc3RyaW5nKSA9PlxuICAgIGYgPT09ICdwcm9qZWN0TmFtZScgfHxcbiAgICBmLnN0YXJ0c1dpdGgoJ21ldGFkYXRhLicpIHx8IGYuc3RhcnRzV2l0aCgnbWV0YWRhdGFbJykgfHxcbiAgICBmLnN0YXJ0c1dpdGgoJ3ZhcnMuJykgfHwgZi5zdGFydHNXaXRoKCd2YXJzWycpO1xuICBjb25zdCBpc0tub3duID0gY29yZS5hbGxvd2VkU2NvcGVSb290cyhbJ21ldGFkYXRhJywgJ3ZhcnMnXSk7XG4gIGNvbnN0IHsgZXJyb3JzIH0gPSBjb3JlLnZhbGlkYXRlVGVtcGxhdGVzKGRvYywgaXNUcGwsIGlzS25vd24pO1xuICBjb25zdCBjeWNsZXMgPSBjb3JlLmRldGVjdEN5Y2xlcyhkb2MsIGlzVHBsLCAoZjogc3RyaW5nKSA9PiBpc1RwbChmKSA/IGYgOiBudWxsKTtcbiAgcmV0dXJuIFsuLi5lcnJvcnMsIC4uLmN5Y2xlc107XG59XG4iXX0=
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUtdGVtcGxhdGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3ZhbGlkYXRlLXRlbXBsYXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUNwQixPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLElBQUksTUFBTSxNQUFNLENBQUM7QUFDeEIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hILE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBUzdGOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsT0FBZ0I7SUFDdkQsT0FBTztTQUNKLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztTQUM3QixXQUFXLENBQUMscUVBQXFFLENBQUM7U0FDbEYsTUFBTSxDQUFDLGlCQUFpQixFQUFFLG9DQUFvQyxDQUFDO1NBQy9ELE1BQU0sQ0FBQyx5QkFBeUIsRUFBRSxnREFBZ0QsQ0FBQztTQUNuRixNQUFNLENBQUMsZUFBZSxFQUFFLHlEQUF5RCxDQUFDO1NBQ2xGLE1BQU0sQ0FBQyxjQUFjLEVBQUUscUNBQXFDLENBQUM7U0FDN0QsTUFBTSxDQUFDLGlCQUFpQixFQUFFLHNDQUFzQyxDQUFDO1NBQ2pFLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBd0IsRUFBRSxFQUFFO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDN0Qs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QUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IDIwMjYgUGlwZWxpbmUgQnVpbGRlciBDb250cmlidXRvcnNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCBmcyBmcm9tICdmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IFlBTUwgZnJvbSAneWFtbCc7XG5pbXBvcnQgeyBwcmludENvbW1hbmRIZWFkZXIsIHByaW50U3NsV2FybmluZywgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jIH0gZnJvbSAnLi4vdXRpbHMvY29tbWFuZC11dGlscy5qcyc7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyLmpzJztcbmltcG9ydCB7IHByaW50RXJyb3IsIHByaW50SW5mbywgcHJpbnRTdWNjZXNzLCBwcmludFdhcm5pbmcgfSBmcm9tICcuLi91dGlscy9vdXRwdXQtdXRpbHMuanMnO1xuXG5pbnRlcmZhY2UgVmFsaWRhdGVPcHRpb25zIHtcbiAgcGlwZWxpbmU/OiBzdHJpbmc7XG4gIHBsdWdpbj86IHN0cmluZztcbiAgZmlsZT86IHN0cmluZztcbiAgdmVyaWZ5U3NsPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciB0aGUgYHZhbGlkYXRlLXRlbXBsYXRlc2AgY29tbWFuZC5cbiAqXG4gKiBVc2FnZTpcbiAqICAgcGlwZWxpbmUtbWFuYWdlciB2YWxpZGF0ZS10ZW1wbGF0ZXMgLS1waXBlbGluZSA8dXVpZD5cbiAqICAgcGlwZWxpbmUtbWFuYWdlciB2YWxpZGF0ZS10ZW1wbGF0ZXMgLS1wbHVnaW4gPG5hbWU6dmVyc2lvbj5cbiAqICAgcGlwZWxpbmUtbWFuYWdlciB2YWxpZGF0ZS10ZW1wbGF0ZXMgLS1maWxlIC4vcGx1Z2luLXNwZWMueWFtbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVUZW1wbGF0ZXNDb21tYW5kKHByb2dyYW06IENvbW1hbmQpOiB2b2lkIHtcbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKCd2YWxpZGF0ZS10ZW1wbGF0ZXMnKVxuICAgIC5kZXNjcmlwdGlvbignUGFyc2UgYW5kIHZhbGlkYXRlIHt7IC4uLiB9fSB0ZW1wbGF0ZXMgaW4gYSBwaXBlbGluZSBvciBwbHVnaW4gc3BlYycpXG4gICAgLm9wdGlvbignLS1waXBlbGluZSA8aWQ+JywgJ1ZhbGlkYXRlIHRoZSBwaXBlbGluZSB3aXRoIHRoaXMgSUQnKVxuICAgIC5vcHRpb24oJy0tcGx1Z2luIDxuYW1lOnZlcnNpb24+JywgJ1ZhbGlkYXRlIHRoZSBwbHVnaW4gd2l0aCB0aGlzIG5hbWUgYW5kIHZlcnNpb24nKVxuICAgIC5vcHRpb24oJy0tZmlsZSA8cGF0aD4nLCAnVmFsaWRhdGUgYSBsb2NhbCBwbHVnaW4tc3BlYy55YW1sIG9yIHBpcGVsaW5lLmpzb24gZmlsZScpXG4gICAgLm9wdGlvbignLS12ZXJpZnktc3NsJywgJ0VuYWJsZSBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uJylcbiAgICAub3B0aW9uKCctLW5vLXZlcmlmeS1zc2wnLCAnRGlzYWJsZSBTU0wgY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uJylcbiAgICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiBWYWxpZGF0ZU9wdGlvbnMpID0+IHtcbiAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gcHJpbnRDb21tYW5kSGVhZGVyKCdWYWxpZGF0ZSBUZW1wbGF0ZXMnKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByaW50U3NsV2FybmluZyhvcHRpb25zLnZlcmlmeVNzbCk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnBpcGVsaW5lICYmICFvcHRpb25zLnBsdWdpbiAmJiAhb3B0aW9ucy5maWxlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmUgb2YgLS1waXBlbGluZSwgLS1wbHVnaW4sIG9yIC0tZmlsZSBpcyByZXF1aXJlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29yZSA9IGF3YWl0IGltcG9ydCgnQHBpcGVsaW5lLWJ1aWxkZXIvcGlwZWxpbmUtY29yZScpO1xuXG4gICAgICAgIGNvbnN0IHByb2JsZW1zOiBBcnJheTx7IHNvdXJjZTogc3RyaW5nOyBlcnJvcnM6IHsgZmllbGQ/OiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZzsgY29kZT86IHN0cmluZyB9W10gfT4gPSBbXTtcblxuICAgICAgICBpZiAob3B0aW9ucy5maWxlKSB7XG4gICAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLnJlc29sdmUob3B0aW9ucy5maWxlKTtcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVQYXRoLCAndXRmLTgnKTtcbiAgICAgICAgICBjb25zdCBkb2MgPSBmaWxlUGF0aC5lbmRzV2l0aCgnLmpzb24nKSA/IEpTT04ucGFyc2UodGV4dCkgOiBZQU1MLnBhcnNlKHRleHQpO1xuXG4gICAgICAgICAgLy8gR3Vlc3M6IGlmIGBwbHVnaW5UeXBlYCBpcyBwcmVzZW50LCB0cmVhdCBhcyBwbHVnaW4gc3BlYzsgZWxzZSBwaXBlbGluZVxuICAgICAgICAgIGNvbnN0IGlzUGx1Z2luID0gdHlwZW9mIChkb2MgYXMgeyBwbHVnaW5UeXBlPzogdW5rbm93biB9KS5wbHVnaW5UeXBlID09PSAnc3RyaW5nJztcbiAgICAgICAgICBjb25zdCBlcnJvcnMgPSBpc1BsdWdpblxuICAgICAgICAgICAgPyB2YWxpZGF0ZVBsdWdpbkRvYyhjb3JlLCBkb2MpXG4gICAgICAgICAgICA6IHZhbGlkYXRlUGlwZWxpbmVEb2MoY29yZSwgZG9jKTtcbiAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkgcHJvYmxlbXMucHVzaCh7IHNvdXJjZTogZmlsZVBhdGgsIGVycm9ycyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLnBpcGVsaW5lKSB7XG4gICAgICAgICAgcHJpbnRJbmZvKCdGZXRjaGluZyBwaXBlbGluZScsIHsgaWQ6IG9wdGlvbnMucGlwZWxpbmUgfSk7XG4gICAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgY3JlYXRlQXV0aGVudGljYXRlZENsaWVudEFzeW5jKG9wdGlvbnMpO1xuICAgICAgICAgIGNvbnN0IGNmZyA9IGNsaWVudC5nZXRDb25maWcoKTtcbiAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBjbGllbnQuZ2V0PHsgcGlwZWxpbmU/OiB7IHByb3BzOiB1bmtub3duIH0gfT4oYCR7Y2ZnLmFwaS5waXBlbGluZVVybH0vJHtvcHRpb25zLnBpcGVsaW5lfWApO1xuICAgICAgICAgIGNvbnN0IGRvYyA9IChyZXMgYXMgeyBwaXBlbGluZT86IHsgcHJvcHM6IHVua25vd24gfSB9KS5waXBlbGluZT8ucHJvcHNcbiAgICAgICAgICAgID8/IChyZXMgYXMgeyBkYXRhPzogeyBwaXBlbGluZT86IHsgcHJvcHM6IHVua25vd24gfSB9IH0pLmRhdGE/LnBpcGVsaW5lPy5wcm9wcztcbiAgICAgICAgICBpZiAoIWRvYykgdGhyb3cgbmV3IEVycm9yKGBQaXBlbGluZSAke29wdGlvbnMucGlwZWxpbmV9IG5vdCBmb3VuZGApO1xuICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHZhbGlkYXRlUGlwZWxpbmVEb2MoY29yZSwgZG9jKTtcbiAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkgcHJvYmxlbXMucHVzaCh7IHNvdXJjZTogYHBpcGVsaW5lLyR7b3B0aW9ucy5waXBlbGluZX1gLCBlcnJvcnMgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5wbHVnaW4pIHtcbiAgICAgICAgICBjb25zdCBbbmFtZSwgdmVyc2lvbl0gPSBvcHRpb25zLnBsdWdpbi5zcGxpdCgnOicpO1xuICAgICAgICAgIGlmICghbmFtZSB8fCAhdmVyc2lvbikgdGhyb3cgbmV3IEVycm9yKCctLXBsdWdpbiByZXF1aXJlcyA8bmFtZTp2ZXJzaW9uPiBmb3JtYXQnKTtcbiAgICAgICAgICBwcmludEluZm8oJ0ZldGNoaW5nIHBsdWdpbicsIHsgbmFtZSwgdmVyc2lvbiB9KTtcbiAgICAgICAgICBjb25zdCBjbGllbnQgPSBhd2FpdCBjcmVhdGVBdXRoZW50aWNhdGVkQ2xpZW50QXN5bmMob3B0aW9ucyk7XG4gICAgICAgICAgY29uc3QgY2ZnID0gY2xpZW50LmdldENvbmZpZygpO1xuICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNsaWVudC5nZXQ8eyBwbHVnaW46IHVua25vd24gfT4oXG4gICAgICAgICAgICBgJHtjZmcuYXBpLnBsdWdpblVybH0vZmluZD9uYW1lPSR7ZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpfSZ2ZXJzaW9uPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHZlcnNpb24pfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBkb2MgPSAocmVzIGFzIHsgcGx1Z2luPzogdW5rbm93biB9KS5wbHVnaW5cbiAgICAgICAgICAgID8/IChyZXMgYXMgeyBkYXRhPzogeyBwbHVnaW4/OiB1bmtub3duIH0gfSkuZGF0YT8ucGx1Z2luO1xuICAgICAgICAgIGlmICghZG9jKSB0aHJvdyBuZXcgRXJyb3IoYFBsdWdpbiAke25hbWV9OiR7dmVyc2lvbn0gbm90IGZvdW5kYCk7XG4gICAgICAgICAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGVQbHVnaW5Eb2MoY29yZSwgZG9jKTtcbiAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCkgcHJvYmxlbXMucHVzaCh7IHNvdXJjZTogYHBsdWdpbi8ke25hbWV9OiR7dmVyc2lvbn1gLCBlcnJvcnMgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvYmxlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcHJpbnRTdWNjZXNzKCdBbGwgdGVtcGxhdGVzIHZhbGlkJywgeyBleGVjdXRpb25JZCB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwcmludFdhcm5pbmcoYEZvdW5kICR7cHJvYmxlbXMucmVkdWNlKChhLCBwKSA9PiBhICsgcC5lcnJvcnMubGVuZ3RoLCAwKX0gdGVtcGxhdGUgZXJyb3Iocyk6YCk7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBwcm9ibGVtcykge1xuICAgICAgICAgIHByaW50RXJyb3IocC5zb3VyY2UpO1xuICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBwLmVycm9ycykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coYCAgICBbJHtlLmZpZWxkID8/ICc/J31dICR7ZS5tZXNzYWdlfSR7ZS5jb2RlID8gYCAoJHtlLmNvZGV9KWAgOiAnJ31gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVyciwgRVJST1JfQ09ERVMuQVBJX1JFUVVFU1QsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7IGNvbW1hbmQ6ICd2YWxpZGF0ZS10ZW1wbGF0ZXMnLCBleGVjdXRpb25JZCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQbHVnaW5Eb2MoY29yZTogUmVjb3JkPHN0cmluZywgYW55PiwgZG9jOiB1bmtub3duKTogQXJyYXk8eyBmaWVsZD86IHN0cmluZzsgbWVzc2FnZTogc3RyaW5nOyBjb2RlPzogc3RyaW5nIH0+IHtcbiAgY29uc3QgaXNUcGwgPSAoZjogc3RyaW5nKSA9PlxuICAgIGYgPT09ICdkZXNjcmlwdGlvbicgfHxcbiAgICBmLnN0YXJ0c1dpdGgoJ2NvbW1hbmRzJykgfHxcbiAgICBmLnN0YXJ0c1dpdGgoJ2luc3RhbGxDb21tYW5kcycpIHx8XG4gICAgZi5zdGFydHNXaXRoKCdlbnYuJykgfHwgZi5zdGFydHNXaXRoKCdlbnZbJykgfHxcbiAgICBmLnN0YXJ0c1dpdGgoJ2J1aWxkQXJncy4nKSB8fCBmLnN0YXJ0c1dpdGgoJ2J1aWxkQXJnc1snKTtcbiAgY29uc3QgaXNLbm93biA9IGNvcmUuYWxsb3dlZFNjb3BlUm9vdHMoWydwaXBlbGluZScsICdwbHVnaW4nLCAnZW52J10pO1xuICBjb25zdCB7IGVycm9ycyB9ID0gY29yZS52YWxpZGF0ZVRlbXBsYXRlcyhkb2MsIGlzVHBsLCBpc0tub3duKTtcbiAgcmV0dXJuIGVycm9ycztcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQaXBlbGluZURvYyhjb3JlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBkb2M6IHVua25vd24pOiBBcnJheTx7IGZpZWxkPzogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmc7IGNvZGU/OiBzdHJpbmcgfT4ge1xuICBjb25zdCBpc1RwbCA9IChmOiBzdHJpbmcpID0+XG4gICAgZiA9PT0gJ3Byb2plY3ROYW1lJyB8fFxuICAgIGYuc3RhcnRzV2l0aCgnbWV0YWRhdGEuJykgfHwgZi5zdGFydHNXaXRoKCdtZXRhZGF0YVsnKSB8fFxuICAgIGYuc3RhcnRzV2l0aCgndmFycy4nKSB8fCBmLnN0YXJ0c1dpdGgoJ3ZhcnNbJyk7XG4gIGNvbnN0IGlzS25vd24gPSBjb3JlLmFsbG93ZWRTY29wZVJvb3RzKFsnbWV0YWRhdGEnLCAndmFycyddKTtcbiAgY29uc3QgeyBlcnJvcnMgfSA9IGNvcmUudmFsaWRhdGVUZW1wbGF0ZXMoZG9jLCBpc1RwbCwgaXNLbm93bik7XG4gIGNvbnN0IGN5Y2xlcyA9IGNvcmUuZGV0ZWN0Q3ljbGVzKGRvYywgaXNUcGwsIChmOiBzdHJpbmcpID0+IGlzVHBsKGYpID8gZiA6IG51bGwpO1xuICByZXR1cm4gWy4uLmVycm9ycywgLi4uY3ljbGVzXTtcbn1cbiJdfQ==
@@ -1,19 +1,14 @@
1
- "use strict";
2
1
  // Copyright 2026 Pipeline Builder Contributors
3
2
  // SPDX-License-Identifier: Apache-2.0
4
- var __importDefault = (this && this.__importDefault) || function (mod) {
5
- return (mod && mod.__esModule) ? mod : { "default": mod };
6
- };
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.version = version;
9
- const child_process_1 = require("child_process");
10
- const picocolors_1 = __importDefault(require("picocolors"));
11
- const cli_constants_1 = require("../config/cli.constants");
12
- const cdk_utils_1 = require("../utils/cdk-utils");
13
- const config_loader_1 = require("../utils/config-loader");
14
- const error_handler_1 = require("../utils/error-handler");
15
- const output_utils_1 = require("../utils/output-utils");
16
- const { bold, cyan, dim, green, magenta, red, yellow } = picocolors_1.default;
3
+ import { execSync } from 'child_process';
4
+ import { Command } from 'commander';
5
+ import pico from 'picocolors';
6
+ import { APP_NAME, APP_VERSION, generateExecutionId } from '../config/cli.constants.js';
7
+ import { getCdkInfo } from '../utils/cdk-utils.js';
8
+ import { getConfig } from '../utils/config-loader.js';
9
+ import { ERROR_CODES, handleError } from '../utils/error-handler.js';
10
+ import { printDivider, printError, printInfo, printKeyValue, printSection, printSuccess, printWarning } from '../utils/output-utils.js';
11
+ const { bold, cyan, dim, green, magenta, red, yellow } = pico;
17
12
  /**
18
13
  * Collects runtime system information including Node.js/npm versions,
19
14
  * platform, architecture, heap memory usage, and process uptime.
@@ -25,7 +20,7 @@ function getSystemInfo() {
25
20
  const uptime = process.uptime();
26
21
  let npm;
27
22
  try {
28
- npm = (0, child_process_1.execSync)('npm --version', { encoding: 'utf-8', stdio: 'pipe' }).trim();
23
+ npm = execSync('npm --version', { encoding: 'utf-8', stdio: 'pipe' }).trim();
29
24
  }
30
25
  catch {
31
26
  npm = null;
@@ -45,7 +40,7 @@ function getSystemInfo() {
45
40
  */
46
41
  function checkConfiguration() {
47
42
  try {
48
- (0, config_loader_1.getConfig)();
43
+ getConfig();
49
44
  return { valid: true };
50
45
  }
51
46
  catch (error) {
@@ -75,7 +70,7 @@ function getEnvironmentStatus() {
75
70
  *
76
71
  * @param program - The root Commander program instance to attach the command to.
77
72
  */
78
- function version(program) {
73
+ export function version(program) {
79
74
  program
80
75
  .command('version')
81
76
  .description('Display CLI version and environment information')
@@ -84,15 +79,15 @@ function version(program) {
84
79
  .option('--json', 'Output in JSON format', false)
85
80
  .action((options) => {
86
81
  try {
87
- const executionId = (0, cli_constants_1.generateExecutionId)();
88
- const cdkInfo = (0, cdk_utils_1.getCdkInfo)();
82
+ const executionId = generateExecutionId();
83
+ const cdkInfo = getCdkInfo();
89
84
  // JSON output
90
85
  if (options.json) {
91
86
  const systemInfo = getSystemInfo();
92
87
  const configStatus = options.checkConfig ? checkConfiguration() : { valid: true };
93
88
  const envStatus = getEnvironmentStatus();
94
89
  console.log(JSON.stringify({
95
- cli: { name: cli_constants_1.APP_NAME, version: cli_constants_1.APP_VERSION },
90
+ cli: { name: APP_NAME, version: APP_VERSION },
96
91
  system: systemInfo,
97
92
  cdk: { available: cdkInfo.available, version: cdkInfo.version },
98
93
  configuration: { valid: configStatus.valid, error: configStatus.error },
@@ -103,19 +98,19 @@ function version(program) {
103
98
  return;
104
99
  }
105
100
  // Standard output
106
- (0, output_utils_1.printSection)('Version Information');
101
+ printSection('Version Information');
107
102
  console.log(`${magenta(`[EXE-${executionId}]`)} ${cyan(bold('CLI Version Check'))}`);
108
103
  console.log('');
109
- (0, output_utils_1.printKeyValue)({
110
- 'CLI Name': bold(cli_constants_1.APP_NAME),
111
- 'CLI Version': green(bold(cli_constants_1.APP_VERSION)),
104
+ printKeyValue({
105
+ 'CLI Name': bold(APP_NAME),
106
+ 'CLI Version': green(bold(APP_VERSION)),
112
107
  });
113
- (0, output_utils_1.printDivider)();
108
+ printDivider();
114
109
  // Verbose: system environment
115
110
  if (options.verbose) {
116
- (0, output_utils_1.printSection)('System Environment');
111
+ printSection('System Environment');
117
112
  const systemInfo = getSystemInfo();
118
- (0, output_utils_1.printKeyValue)({
113
+ printKeyValue({
119
114
  'Node.js': systemInfo.nodejs,
120
115
  'npm': systemInfo.npm || yellow('(not available)'),
121
116
  'Platform': systemInfo.platform,
@@ -123,26 +118,26 @@ function version(program) {
123
118
  'Memory (Heap)': `${systemInfo.memory.total} total, ${systemInfo.memory.availableHeap} available`,
124
119
  'Process Uptime': systemInfo.uptime,
125
120
  });
126
- (0, output_utils_1.printDivider)();
127
- (0, output_utils_1.printSection)('AWS CDK');
121
+ printDivider();
122
+ printSection('AWS CDK');
128
123
  }
129
124
  // CDK information
130
125
  if (cdkInfo.available && cdkInfo.version) {
131
126
  if (options.verbose)
132
- (0, output_utils_1.printSuccess)('AWS CDK is installed');
133
- (0, output_utils_1.printKeyValue)({
127
+ printSuccess('AWS CDK is installed');
128
+ printKeyValue({
134
129
  'CDK Version': green(cdkInfo.version),
135
130
  'Status': green('✓ Available'),
136
131
  });
137
132
  }
138
133
  else {
139
134
  if (options.verbose) {
140
- (0, output_utils_1.printWarning)('AWS CDK is not installed');
135
+ printWarning('AWS CDK is not installed');
141
136
  console.log(dim(' Install CDK with: npm install -g aws-cdk'));
142
137
  if (cdkInfo.error)
143
138
  console.log(dim(` Error: ${cdkInfo.error}`));
144
139
  }
145
- (0, output_utils_1.printKeyValue)({
140
+ printKeyValue({
146
141
  'AWS CDK': red('✗ Not installed'),
147
142
  'Status': red('✗ Not Available'),
148
143
  });
@@ -152,15 +147,15 @@ function version(program) {
152
147
  }
153
148
  // Configuration check
154
149
  if (options.checkConfig) {
155
- (0, output_utils_1.printDivider)();
156
- (0, output_utils_1.printSection)('Configuration Status');
150
+ printDivider();
151
+ printSection('Configuration Status');
157
152
  const configStatus = checkConfiguration();
158
153
  const envStatus = getEnvironmentStatus();
159
154
  if (configStatus.valid) {
160
- (0, output_utils_1.printSuccess)('Configuration is valid');
155
+ printSuccess('Configuration is valid');
161
156
  try {
162
- const config = (0, config_loader_1.getConfig)();
163
- (0, output_utils_1.printKeyValue)({
157
+ const config = getConfig();
158
+ printKeyValue({
164
159
  'API Base URL': config.api.baseUrl,
165
160
  'SSL Verification': config.api.rejectUnauthorized ? green('Enabled') : yellow('Disabled'),
166
161
  'Timeout': `${config.api.timeout}ms`,
@@ -168,25 +163,25 @@ function version(program) {
168
163
  });
169
164
  }
170
165
  catch (error) {
171
- (0, output_utils_1.printWarning)('Could not load full configuration');
166
+ printWarning('Could not load full configuration');
172
167
  }
173
168
  }
174
169
  else {
175
- (0, output_utils_1.printError)('Configuration is invalid');
170
+ printError('Configuration is invalid');
176
171
  if (configStatus.error) {
177
172
  console.log(red(` Error: ${configStatus.error}`));
178
173
  }
179
174
  }
180
175
  console.log('');
181
- (0, output_utils_1.printInfo)('Environment Variables');
182
- (0, output_utils_1.printKeyValue)({
176
+ printInfo('Environment Variables');
177
+ printKeyValue({
183
178
  PLATFORM_TOKEN: envStatus.token ? green('✓ Set') : red('✗ Not set'),
184
179
  PLATFORM_BASE_URL: envStatus.url ? green('✓ Set') : dim('(not set - using default)'),
185
180
  CLI_CONFIG_PATH: envStatus.configPath ? green('✓ Set') : dim('(not set - using default)'),
186
181
  });
187
182
  if (!envStatus.token) {
188
183
  console.log('');
189
- (0, output_utils_1.printWarning)('PLATFORM_TOKEN is required for API operations');
184
+ printWarning('PLATFORM_TOKEN is required for API operations');
190
185
  console.log(dim(' Set it with: export PLATFORM_TOKEN="your-token-here"'));
191
186
  }
192
187
  }
@@ -194,13 +189,13 @@ function version(program) {
194
189
  console.log(dim('\n 💡 Tip: Run with --check-config to verify configuration'));
195
190
  }
196
191
  // Footer
197
- (0, output_utils_1.printDivider)();
192
+ printDivider();
198
193
  console.log(dim(` Execution ID: ${executionId}`));
199
194
  console.log(dim(` Timestamp: ${new Date().toISOString()}`));
200
195
  console.log('');
201
196
  }
202
197
  catch (error) {
203
- (0, error_handler_1.handleError)(error, error_handler_1.ERROR_CODES.GENERAL, {
198
+ handleError(error, ERROR_CODES.GENERAL, {
204
199
  debug: program.opts().debug,
205
200
  exit: true,
206
201
  context: {
@@ -216,8 +211,8 @@ function version(program) {
216
211
  });
217
212
  // Also support -v and --version flags at root level
218
213
  program.on('option:version', () => {
219
- console.log(`${cli_constants_1.APP_NAME} v${cli_constants_1.APP_VERSION}`);
214
+ console.log(`${APP_NAME} v${APP_VERSION}`);
220
215
  process.exit(0);
221
216
  });
222
217
  }
223
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQ0FBK0M7QUFDL0Msc0NBQXNDOzs7OztBQWdHdEMsMEJBMEpDO0FBeFBELGlEQUF5QztBQUV6Qyw0REFBOEI7QUFDOUIsMkRBQXFGO0FBQ3JGLGtEQUFnRDtBQUNoRCwwREFBbUQ7QUFDbkQsMERBQWtFO0FBQ2xFLHdEQUFxSTtBQUVySSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsb0JBQUksQ0FBQztBQWlCOUQ7OztHQUdHO0FBQ0gsU0FBUyxhQUFhO0lBQ3BCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7SUFFaEMsSUFBSSxHQUFrQixDQUFDO0lBQ3ZCLElBQUksQ0FBQztRQUNILEdBQUcsR0FBRyxJQUFBLHdCQUFRLEVBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvRSxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsR0FBRyxHQUFHLElBQUksQ0FBQztJQUNi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QUMsQ0FBQztZQUNuRCxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM3RCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWxCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBQSwyQkFBVyxFQUFDLEtBQUssRUFBRSwyQkFBVyxDQUFDLE9BQU8sRUFBRTtnQkFDdEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUU7b0JBQ1AsT0FBTyxFQUFFLFNBQVM7b0JBQ2xCLE9BQU8sRUFBRTt3QkFDUCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87d0JBQ3hCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVzt3QkFDaEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO3FCQUNuQjtpQkFDRjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVMLG9EQUFvRDtJQUNwRCxPQUFPLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRTtRQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsd0JBQVEsS0FBSywyQkFBVyxFQUFFLENBQUMsQ0FBQztRQUMzQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAyMDI2IFBpcGVsaW5lIEJ1aWxkZXIgQ29udHJpYnV0b3JzXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgcGljbyBmcm9tICdwaWNvY29sb3JzJztcbmltcG9ydCB7IEFQUF9OQU1FLCBBUFBfVkVSU0lPTiwgZ2VuZXJhdGVFeGVjdXRpb25JZCB9IGZyb20gJy4uL2NvbmZpZy9jbGkuY29uc3RhbnRzJztcbmltcG9ydCB7IGdldENka0luZm8gfSBmcm9tICcuLi91dGlscy9jZGstdXRpbHMnO1xuaW1wb3J0IHsgZ2V0Q29uZmlnIH0gZnJvbSAnLi4vdXRpbHMvY29uZmlnLWxvYWRlcic7XG5pbXBvcnQgeyBFUlJPUl9DT0RFUywgaGFuZGxlRXJyb3IgfSBmcm9tICcuLi91dGlscy9lcnJvci1oYW5kbGVyJztcbmltcG9ydCB7IHByaW50RGl2aWRlciwgcHJpbnRFcnJvciwgcHJpbnRJbmZvLCBwcmludEtleVZhbHVlLCBwcmludFNlY3Rpb24sIHByaW50U3VjY2VzcywgcHJpbnRXYXJuaW5nIH0gZnJvbSAnLi4vdXRpbHMvb3V0cHV0LXV0aWxzJztcblxuY29uc3QgeyBib2xkLCBjeWFuLCBkaW0sIGdyZWVuLCBtYWdlbnRhLCByZWQsIHllbGxvdyB9ID0gcGljbztcblxuLyoqXG4gKiBSdW50aW1lIHN5c3RlbSBpbmZvcm1hdGlvbiBjb2xsZWN0ZWQgZm9yIHRoZSBgdmVyc2lvbiAtLXZlcmJvc2VgIG91dHB1dC5cbiAqL1xuaW50ZXJmYWNlIFN5c3RlbUluZm8ge1xuICBub2RlanM6IHN0cmluZztcbiAgbnBtOiBzdHJpbmcgfCBudWxsO1xuICBwbGF0Zm9ybTogc3RyaW5nO1xuICBhcmNoaXRlY3R1cmU6IHN0cmluZztcbiAgbWVtb3J5OiB7XG4gICAgdG90YWw6IHN0cmluZztcbiAgICBhdmFpbGFibGVIZWFwOiBzdHJpbmc7XG4gIH07XG4gIHVwdGltZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbGxlY3RzIHJ1bnRpbWUgc3lzdGVtIGluZm9ybWF0aW9uIGluY2x1ZGluZyBOb2RlLmpzL25wbSB2ZXJzaW9ucyxcbiAqIHBsYXRmb3JtLCBhcmNoaXRlY3R1cmUsIGhlYXAgbWVtb3J5IHVzYWdlLCBhbmQgcHJvY2VzcyB1cHRpbWUuXG4gKi9cbmZ1bmN0aW9uIGdldFN5c3RlbUluZm8oKTogU3lzdGVtSW5mbyB7XG4gIGNvbnN0IG1lbSA9IHByb2Nlc3MubWVtb3J5VXNhZ2UoKTtcbiAgY29uc3QgdG90YWxNZW0gPSAobWVtLmhlYXBUb3RhbCAvIDEwMjQgLyAxMDI0KS50b0ZpeGVkKDIpO1xuICBjb25zdCBhdmFpbGFibGVIZWFwID0gKChtZW0uaGVhcFRvdGFsIC0gbWVtLmhlYXBVc2VkKSAvIDEwMjQgLyAxMDI0KS50b0ZpeGVkKDIpO1xuICBjb25zdCB1cHRpbWUgPSBwcm9jZXNzLnVwdGltZSgpO1xuXG4gIGxldCBucG06IHN0cmluZyB8IG51bGw7XG4gIHRyeSB7XG4gICAgbnBtID0gZXhlY1N5bmMoJ25wbSAtLXZlcnNpb24nLCB7IGVuY29kaW5nOiAndXRmLTgnLCBzdGRpbzogJ3BpcGUnIH0pLnRyaW0oKTtcbiAgfSBjYXRjaCB7XG4gICAgbnBtID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbm9kZWpzOiBwcm9jZXNzLnZlcnNpb24sXG4gICAgbnBtLFxuICAgIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtLFxuICAgIGFyY2hpdGVjdHVyZTogcHJvY2Vzcy5hcmNoLFxuICAgIG1lbW9yeTogeyB0b3RhbDogYCR7dG90YWxNZW19IE1CYCwgYXZhaWxhYmxlSGVhcDogYCR7YXZhaWxhYmxlSGVhcH0gTUJgIH0sXG4gICAgdXB0aW1lOiBgJHtNYXRoLmZsb29yKHVwdGltZSAvIDM2MDApfWggJHtNYXRoLmZsb29yKCh1cHRpbWUgJSAzNjAwKSAvIDYwKX1tICR7TWF0aC5mbG9vcih1cHRpbWUgJSA2MCl9c2AsXG4gIH07XG59XG5cbi8qKlxuICogQXR0ZW1wdHMgdG8gbG9hZCB0aGUgQ0xJIGNvbmZpZ3VyYXRpb24gYW5kIHJlcG9ydHMgd2hldGhlciBpdCBpcyB2YWxpZC5cbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIGB2YWxpZDogdHJ1ZWAgb24gc3VjY2Vzcywgb3IgYHZhbGlkOiBmYWxzZWAgd2l0aCBhbiBlcnJvciBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBjaGVja0NvbmZpZ3VyYXRpb24oKTogeyB2YWxpZDogYm9vbGVhbjsgZXJyb3I/OiBzdHJpbmcgfSB7XG4gIHRyeSB7XG4gICAgZ2V0Q29uZmlnKCk7XG4gICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoaWNoIGtleSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGN1cnJlbnRseSBzZXQuXG4gKiBAcmV0dXJucyBQcmVzZW5jZSBmbGFncyBmb3IgYFBMQVRGT1JNX1RPS0VOYCwgYFBMQVRGT1JNX0JBU0VfVVJMYCwgYW5kIGBDTElfQ09ORklHX1BBVEhgLlxuICovXG5mdW5jdGlvbiBnZXRFbnZpcm9ubWVudFN0YXR1cygpOiB7XG4gIHRva2VuOiBib29sZWFuO1xuICB1cmw6IGJvb2xlYW47XG4gIGNvbmZpZ1BhdGg6IGJvb2xlYW47XG59IHtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbjogISFwcm9jZXNzLmVudi5QTEFURk9STV9UT0tFTixcbiAgICB1cmw6ICEhcHJvY2Vzcy5lbnYuUExBVEZPUk1fQkFTRV9VUkwsXG4gICAgY29uZmlnUGF0aDogISFwcm9jZXNzLmVudi5DTElfQ09ORklHX1BBVEgsXG4gIH07XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIHRoZSBgdmVyc2lvbmAgY29tbWFuZCB3aXRoIHRoZSBDTEkgcHJvZ3JhbS5cbiAqXG4gKiBEaXNwbGF5cyB0aGUgQ0xJIG5hbWUvdmVyc2lvbiwgQVdTIENESyBzdGF0dXMsIGFuZCBvcHRpb25hbGx5XG4gKiBmdWxsIHN5c3RlbSBkaWFnbm9zdGljcyAoYC0tdmVyYm9zZWApIG9yIGNvbmZpZ3VyYXRpb24gdmFsaWRhdGlvblxuICogKGAtLWNoZWNrLWNvbmZpZ2ApLiAgU3VwcG9ydHMgYC0tanNvbmAgZm9yIG1hY2hpbmUtcmVhZGFibGUgb3V0cHV0LlxuICpcbiAqIEBwYXJhbSBwcm9ncmFtIC0gVGhlIHJvb3QgQ29tbWFuZGVyIHByb2dyYW0gaW5zdGFuY2UgdG8gYXR0YWNoIHRoZSBjb21tYW5kIHRvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmVyc2lvbihwcm9ncmFtOiBDb21tYW5kKTogdm9pZCB7XG4gIHByb2dyYW1cbiAgICAuY29tbWFuZCgndmVyc2lvbicpXG4gICAgLmRlc2NyaXB0aW9uKCdEaXNwbGF5IENMSSB2ZXJzaW9uIGFuZCBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbicpXG4gICAgLm9wdGlvbignLS12ZXJib3NlJywgJ1Nob3cgZGV0YWlsZWQgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24nLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLWNoZWNrLWNvbmZpZycsICdWZXJpZnkgY29uZmlndXJhdGlvbiBzdGF0dXMnLCBmYWxzZSlcbiAgICAub3B0aW9uKCctLWpzb24nLCAnT3V0cHV0IGluIEpTT04gZm9ybWF0JywgZmFsc2UpXG4gICAgLmFjdGlvbigob3B0aW9ucykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZXhlY3V0aW9uSWQgPSBnZW5lcmF0ZUV4ZWN1dGlvbklkKCk7XG4gICAgICAgIGNvbnN0IGNka0luZm8gPSBnZXRDZGtJbmZvKCk7XG5cbiAgICAgICAgLy8gSlNPTiBvdXRwdXRcbiAgICAgICAgaWYgKG9wdGlvbnMuanNvbikge1xuICAgICAgICAgIGNvbnN0IHN5c3RlbUluZm8gPSBnZXRTeXN0ZW1JbmZvKCk7XG4gICAgICAgICAgY29uc3QgY29uZmlnU3RhdHVzID0gb3B0aW9ucy5jaGVja0NvbmZpZyA/IGNoZWNrQ29uZmlndXJhdGlvbigpIDogeyB2YWxpZDogdHJ1ZSB9O1xuICAgICAgICAgIGNvbnN0IGVudlN0YXR1cyA9IGdldEVudmlyb25tZW50U3RhdHVzKCk7XG5cbiAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBjbGk6IHsgbmFtZTogQVBQX05BTUUsIHZlcnNpb246IEFQUF9WRVJTSU9OIH0sXG4gICAgICAgICAgICBzeXN0ZW06IHN5c3RlbUluZm8sXG4gICAgICAgICAgICBjZGs6IHsgYXZhaWxhYmxlOiBjZGtJbmZvLmF2YWlsYWJsZSwgdmVyc2lvbjogY2RrSW5mby52ZXJzaW9uIH0sXG4gICAgICAgICAgICBjb25maWd1cmF0aW9uOiB7IHZhbGlkOiBjb25maWdTdGF0dXMudmFsaWQsIGVycm9yOiBjb25maWdTdGF0dXMuZXJyb3IgfSxcbiAgICAgICAgICAgIGVudmlyb25tZW50OiBlbnZTdGF0dXMsXG4gICAgICAgICAgICBleGVjdXRpb25JZCxcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICAgIH0sIG51bGwsIDIpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdGFuZGFyZCBvdXRwdXRcbiAgICAgICAgcHJpbnRTZWN0aW9uKCdWZXJzaW9uIEluZm9ybWF0aW9uJyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGAke21hZ2VudGEoYFtFWEUtJHtleGVjdXRpb25JZH1dYCl9ICR7Y3lhbihib2xkKCdDTEkgVmVyc2lvbiBDaGVjaycpKX1gKTtcbiAgICAgICAgY29uc29sZS5sb2coJycpO1xuXG4gICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICdDTEkgTmFtZSc6IGJvbGQoQVBQX05BTUUpLFxuICAgICAgICAgICdDTEkgVmVyc2lvbic6IGdyZWVuKGJvbGQoQVBQX1ZFUlNJT04pKSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcHJpbnREaXZpZGVyKCk7XG5cbiAgICAgICAgLy8gVmVyYm9zZTogc3lzdGVtIGVudmlyb25tZW50XG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ1N5c3RlbSBFbnZpcm9ubWVudCcpO1xuICAgICAgICAgIGNvbnN0IHN5c3RlbUluZm8gPSBnZXRTeXN0ZW1JbmZvKCk7XG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICAnTm9kZS5qcyc6IHN5c3RlbUluZm8ubm9kZWpzLFxuICAgICAgICAgICAgJ25wbSc6IHN5c3RlbUluZm8ubnBtIHx8IHllbGxvdygnKG5vdCBhdmFpbGFibGUpJyksXG4gICAgICAgICAgICAnUGxhdGZvcm0nOiBzeXN0ZW1JbmZvLnBsYXRmb3JtLFxuICAgICAgICAgICAgJ0FyY2hpdGVjdHVyZSc6IHN5c3RlbUluZm8uYXJjaGl0ZWN0dXJlLFxuICAgICAgICAgICAgJ01lbW9yeSAoSGVhcCknOiBgJHtzeXN0ZW1JbmZvLm1lbW9yeS50b3RhbH0gdG90YWwsICR7c3lzdGVtSW5mby5tZW1vcnkuYXZhaWxhYmxlSGVhcH0gYXZhaWxhYmxlYCxcbiAgICAgICAgICAgICdQcm9jZXNzIFVwdGltZSc6IHN5c3RlbUluZm8udXB0aW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHByaW50RGl2aWRlcigpO1xuICAgICAgICAgIHByaW50U2VjdGlvbignQVdTIENESycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ0RLIGluZm9ybWF0aW9uXG4gICAgICAgIGlmIChjZGtJbmZvLmF2YWlsYWJsZSAmJiBjZGtJbmZvLnZlcnNpb24pIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSBwcmludFN1Y2Nlc3MoJ0FXUyBDREsgaXMgaW5zdGFsbGVkJyk7XG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICAnQ0RLIFZlcnNpb24nOiBncmVlbihjZGtJbmZvLnZlcnNpb24pLFxuICAgICAgICAgICAgJ1N0YXR1cyc6IGdyZWVuKCfinJMgQXZhaWxhYmxlJyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdBV1MgQ0RLIGlzIG5vdCBpbnN0YWxsZWQnKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGRpbSgnICBJbnN0YWxsIENESyB3aXRoOiBucG0gaW5zdGFsbCAtZyBhd3MtY2RrJykpO1xuICAgICAgICAgICAgaWYgKGNka0luZm8uZXJyb3IpIGNvbnNvbGUubG9nKGRpbShgICBFcnJvcjogJHtjZGtJbmZvLmVycm9yfWApKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpbnRLZXlWYWx1ZSh7XG4gICAgICAgICAgICAnQVdTIENESyc6IHJlZCgn4pyXIE5vdCBpbnN0YWxsZWQnKSxcbiAgICAgICAgICAgICdTdGF0dXMnOiByZWQoJ+KclyBOb3QgQXZhaWxhYmxlJyksXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGRpbSgnXFxuICBSdW4gd2l0aCAtLXZlcmJvc2UgZm9yIGRldGFpbGVkIGVudmlyb25tZW50IGluZm9ybWF0aW9uJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29uZmlndXJhdGlvbiBjaGVja1xuICAgICAgICBpZiAob3B0aW9ucy5jaGVja0NvbmZpZykge1xuICAgICAgICAgIHByaW50RGl2aWRlcigpO1xuICAgICAgICAgIHByaW50U2VjdGlvbignQ29uZmlndXJhdGlvbiBTdGF0dXMnKTtcblxuICAgICAgICAgIGNvbnN0IGNvbmZpZ1N0YXR1cyA9IGNoZWNrQ29uZmlndXJhdGlvbigpO1xuICAgICAgICAgIGNvbnN0IGVudlN0YXR1cyA9IGdldEVudmlyb25tZW50U3RhdHVzKCk7XG5cbiAgICAgICAgICBpZiAoY29uZmlnU3RhdHVzLnZhbGlkKSB7XG4gICAgICAgICAgICBwcmludFN1Y2Nlc3MoJ0NvbmZpZ3VyYXRpb24gaXMgdmFsaWQnKTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gICAgICAgICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICAgICAgICdBUEkgQmFzZSBVUkwnOiBjb25maWcuYXBpLmJhc2VVcmwsXG4gICAgICAgICAgICAgICAgJ1NTTCBWZXJpZmljYXRpb24nOiBjb25maWcuYXBpLnJlamVjdFVuYXV0aG9yaXplZCA/IGdyZWVuKCdFbmFibGVkJykgOiB5ZWxsb3coJ0Rpc2FibGVkJyksXG4gICAgICAgICAgICAgICAgJ1RpbWVvdXQnOiBgJHtjb25maWcuYXBpLnRpbWVvdXR9bXNgLFxuICAgICAgICAgICAgICAgICdBdXRoZW50aWNhdGVkJzogY29uZmlnLmF1dGgudG9rZW4gPyBncmVlbignWWVzJykgOiByZWQoJ05vJyksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdDb3VsZCBub3QgbG9hZCBmdWxsIGNvbmZpZ3VyYXRpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcHJpbnRFcnJvcignQ29uZmlndXJhdGlvbiBpcyBpbnZhbGlkJyk7XG4gICAgICAgICAgICBpZiAoY29uZmlnU3RhdHVzLmVycm9yKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlZChgICBFcnJvcjogJHtjb25maWdTdGF0dXMuZXJyb3J9YCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICBwcmludEluZm8oJ0Vudmlyb25tZW50IFZhcmlhYmxlcycpO1xuICAgICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICAgUExBVEZPUk1fVE9LRU46IGVudlN0YXR1cy50b2tlbiA/IGdyZWVuKCfinJMgU2V0JykgOiByZWQoJ+KclyBOb3Qgc2V0JyksXG4gICAgICAgICAgICBQTEFURk9STV9CQVNFX1VSTDogZW52U3RhdHVzLnVybCA/IGdyZWVuKCfinJMgU2V0JykgOiBkaW0oJyhub3Qgc2V0IC0gdXNpbmcgZGVmYXVsdCknKSxcbiAgICAgICAgICAgIENMSV9DT05GSUdfUEFUSDogZW52U3RhdHVzLmNvbmZpZ1BhdGggPyBncmVlbign4pyTIFNldCcpIDogZGltKCcobm90IHNldCAtIHVzaW5nIGRlZmF1bHQpJyksXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoIWVudlN0YXR1cy50b2tlbikge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJycpO1xuICAgICAgICAgICAgcHJpbnRXYXJuaW5nKCdQTEFURk9STV9UT0tFTiBpcyByZXF1aXJlZCBmb3IgQVBJIG9wZXJhdGlvbnMnKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGRpbSgnICBTZXQgaXQgd2l0aDogZXhwb3J0IFBMQVRGT1JNX1RPS0VOPVwieW91ci10b2tlbi1oZXJlXCInKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGRpbSgnXFxuICDwn5KhIFRpcDogUnVuIHdpdGggLS1jaGVjay1jb25maWcgdG8gdmVyaWZ5IGNvbmZpZ3VyYXRpb24nKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGb290ZXJcbiAgICAgICAgcHJpbnREaXZpZGVyKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKGRpbShgICBFeGVjdXRpb24gSUQ6ICR7ZXhlY3V0aW9uSWR9YCkpO1xuICAgICAgICBjb25zb2xlLmxvZyhkaW0oYCAgVGltZXN0YW1wOiAke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKX1gKSk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlRXJyb3IoZXJyb3IsIEVSUk9SX0NPREVTLkdFTkVSQUwsIHtcbiAgICAgICAgICBkZWJ1ZzogcHJvZ3JhbS5vcHRzKCkuZGVidWcsXG4gICAgICAgICAgZXhpdDogdHJ1ZSxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBjb21tYW5kOiAndmVyc2lvbicsXG4gICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgIHZlcmJvc2U6IG9wdGlvbnMudmVyYm9zZSxcbiAgICAgICAgICAgICAgY2hlY2tDb25maWc6IG9wdGlvbnMuY2hlY2tDb25maWcsXG4gICAgICAgICAgICAgIGpzb246IG9wdGlvbnMuanNvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgLy8gQWxzbyBzdXBwb3J0IC12IGFuZCAtLXZlcnNpb24gZmxhZ3MgYXQgcm9vdCBsZXZlbFxuICBwcm9ncmFtLm9uKCdvcHRpb246dmVyc2lvbicsICgpID0+IHtcbiAgICBjb25zb2xlLmxvZyhgJHtBUFBfTkFNRX0gdiR7QVBQX1ZFUlNJT059YCk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9KTtcbn1cbiJdfQ==
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtDQUErQztBQUMvQyxzQ0FBc0M7QUFFdEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sSUFBSSxNQUFNLFlBQVksQ0FBQztBQUM5QixPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFeEksTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztBQWlCOUQ7OztHQUdHO0FBQ0gsU0FBUyxhQUFhO0lBQ3BCLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxRCxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7SUFFaEMsSUFBSSxHQUFrQixDQUFDO0lBQ3ZCLElBQUksQ0FBQztRQUNILEdBQUcsR0FBRyxRQUFRLENBQUMsZUFBZSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvRSxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsR0FBRyxHQUFHLElBQUksQ0FBQztJQUNiLENBQUM7SUFFRCxPQUFPO1FBQ0wsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPO1FBQ3ZCLEdBQUc7UUFDSCxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7UUFDMUIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1FBQzFCLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLFFBQVEsS0FBSyxFQUFFLGFBQWEsRUFBRSxHQUFHLGFBQWEsS0FBSyxFQUFFO1FBQ3pFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEdBQUc7S0FDekcsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGtCQUFrQjtJQUN6QixJQUFJLENBQUM7UUFDSCxTQUFTLEVBQUUsQ0FBQztRQUNaLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPO1lBQ0wsS0FBSyxFQUFFLEtBQUs7WUFDWixLQUFLLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztTQUM5RCxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLG9CQUFvQjtJQUszQixPQUFPO1FBQ0wsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWM7UUFDbkMsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQjtRQUNwQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZTtLQUMxQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxPQUFnQjtJQUN0QyxPQUFPO1NBQ0osT0FBTyxDQUFDLFNBQVMsQ0FBQztTQUNsQixXQUFXLENBQUMsaURBQWlELENBQUM7U0FDOUQsTUFBTSxDQUFDLFdBQVcsRUFBRSx1Q0FBdUMsRUFBRSxLQUFLLENBQUM7U0FDbkUsTUFBTSxDQUFDLGdCQUFnQixFQUFFLDZCQUE2QixFQUFFLEtBQUssQ0FBQztTQUM5RCxNQUFNLENBQUMsUUFBUSxFQUFFLHVCQUF1QixFQUFFLEtBQUssQ0FBQztTQUNoRCxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUNsQixJQUFJLENBQUM7WUFDSCxNQUFNLFdBQVcsR0FBRyxtQkFBbUIsRUFBRSxDQUFDO1lBQzFDLE1BQU0sT0FBTyxHQUFHLFVBQVUsRUFBRSxDQUFDO1lBRTdCLGNBQWM7WUFDZCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDakIsTUFBTSxVQUFVLEdBQUcsYUFBYSxFQUFFLENBQUM7Z0JBQ25DLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUNsRixNQUFNLFNBQVMsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO2dCQUV6QyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7b0JBQ3pCLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRTtvQkFDN0MsTUFBTSxFQUFFLFVBQVU7b0JBQ2xCLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFO29CQUMvRCxhQUFhLEVBQUUsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRTtvQkFDdkUsV0FBVyxFQUFFLFNBQVM7b0JBQ3RCLFdBQVc7b0JBQ1gsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2lCQUNwQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNiLE9BQU87WUFDVCxDQUFDO1lBRUQsa0JBQWtCO1lBQ2xCLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3BDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxXQUFXLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyRixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRWhCLGFBQWEsQ0FBQztnQkFDWixVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDMUIsYUFBYSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDeEMsQ0FBQyxDQUFDO1lBRUgsWUFBWSxFQUFFLENBQUM7WUFFZiw4QkFBOEI7WUFDOUIsSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3BCLFlBQVksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUNuQyxNQUFNLFVBQVUsR0FBRyxhQUFhLEVBQUUsQ0FBQztnQkFDbkMsYUFBYSxDQUFDO29CQUNaLFNBQVMsRUFBRSxVQUFVLENBQUMsTUFBTTtvQkFDNUIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLGlCQUFpQixDQUFDO29CQUNsRCxVQUFVLEVBQUUsVUFBVSxDQUFDLFFBQVE7b0JBQy9CLGNBQWMsRUFBRSxVQUFVLENBQUMsWUFBWTtvQkFDdkMsZUFBZSxFQUFFLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFdBQVcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxhQUFhLFlBQVk7b0JBQ2pHLGdCQUFnQixFQUFFLFVBQVUsQ0FBQyxNQUFNO2lCQUNwQyxDQUFDLENBQUM7Z0JBQ0gsWUFBWSxFQUFFLENBQUM7Z0JBQ2YsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFCLENBQUM7WUFFRCxrQkFBa0I7WUFDbEIsSUFBSSxPQUFPLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxPQUFPLENBQUMsT0FBTztvQkFBRSxZQUFZLENBQUMsc0JBQXNCLENBQUMsQ0FBQztnQkFDMUQsYUFBYSxDQUFDO29CQUNaLGFBQWEsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztvQkFDckMsUUFBUSxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUM7aUJBQy9CLENBQUMsQ0FBQztZQUNMLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDcEIsWUFBWSxDQUFDLDBCQUEwQixDQUFDLENBQUM7b0JBQ3pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLDRDQUE0QyxDQUFDLENBQUMsQ0FBQztvQkFDL0QsSUFBSSxPQUFPLENBQUMsS0FBSzt3QkFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ25FLENBQUM7Z0JBQ0QsYUFBYSxDQUFDO29CQUNaLFNBQVMsRUFBRSxHQUFHLENBQUMsaUJBQWlCLENBQUM7b0JBQ2pDLFFBQVEsRUFBRSxHQUFHLENBQUMsaUJBQWlCLENBQUM7aUJBQ2pDLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyw2REFBNkQsQ0FBQyxDQUFDLENBQUM7WUFDbEYsQ0FBQztZQUVELHNCQUFzQjtZQUN0QixJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDeEIsWUFBWSxFQUFFLENBQUM7Z0JBQ2YsWUFBWSxDQUFDLHNCQUFzQixDQUFDLENBQUM7Z0JBRXJDLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixFQUFFLENBQUM7Z0JBQzFDLE1BQU0sU0FBUyxHQUFHLG9CQUFvQixFQUFFLENBQUM7Z0JBRXpDLElBQUksWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUN2QixZQUFZLENBQUMsd0JBQXdCLENBQUMsQ0FBQztvQkFFdkMsSUFBSSxDQUFDO3dCQUNILE1BQU0sTUFBTSxHQUFHLFNBQVMsRUFBRSxDQUFDO3dCQUMzQixhQUFhLENBQUM7NEJBQ1osY0FBYyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTzs0QkFDbEMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDOzRCQUN6RixTQUFTLEVBQUUsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sSUFBSTs0QkFDcEMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7eUJBQzlELENBQUMsQ0FBQztvQkFDTCxDQUFDO29CQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7d0JBQ2YsWUFBWSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7b0JBQ3BELENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxDQUFDO29CQUNOLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO29CQUN2QyxJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQzt3QkFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsWUFBWSxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNyRCxDQUFDO2dCQUNILENBQUM7Z0JBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDaEIsU0FBUyxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBQ25DLGFBQWEsQ0FBQztvQkFDWixjQUFjLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO29CQUNuRSxpQkFBaUIsRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQztvQkFDcEYsZUFBZSxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDO2lCQUMxRixDQUFDLENBQUM7Z0JBRUgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDaEIsWUFBWSxDQUFDLCtDQUErQyxDQUFDLENBQUM7b0JBQzlELE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLHdEQUF3RCxDQUFDLENBQUMsQ0FBQztnQkFDN0UsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyw2REFBNkQsQ0FBQyxDQUFDLENBQUM7WUFDbEYsQ0FBQztZQUVELFNBQVM7WUFDVCxZQUFZLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLG1CQUFtQixXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVsQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRTtnQkFDdEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLEVBQUUsSUFBSTtnQkFDVixPQUFPLEVBQUU7b0JBQ1AsT0FBTyxFQUFFLFNBQVM7b0JBQ2xCLE9BQU8sRUFBRTt3QkFDUCxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87d0JBQ3hCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVzt3QkFDaEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO3FCQUNuQjtpQkFDRjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVMLG9EQUFvRDtJQUNwRCxPQUFPLENBQUMsRUFBRSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsRUFBRTtRQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDM0MsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgMjAyNiBQaXBlbGluZSBCdWlsZGVyIENvbnRyaWJ1dG9yc1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0IHsgZXhlY1N5bmMgfSBmcm9tICdjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHBpY28gZnJvbSAncGljb2NvbG9ycyc7XG5pbXBvcnQgeyBBUFBfTkFNRSwgQVBQX1ZFUlNJT04sIGdlbmVyYXRlRXhlY3V0aW9uSWQgfSBmcm9tICcuLi9jb25maWcvY2xpLmNvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBnZXRDZGtJbmZvIH0gZnJvbSAnLi4vdXRpbHMvY2RrLXV0aWxzLmpzJztcbmltcG9ydCB7IGdldENvbmZpZyB9IGZyb20gJy4uL3V0aWxzL2NvbmZpZy1sb2FkZXIuanMnO1xuaW1wb3J0IHsgRVJST1JfQ09ERVMsIGhhbmRsZUVycm9yIH0gZnJvbSAnLi4vdXRpbHMvZXJyb3ItaGFuZGxlci5qcyc7XG5pbXBvcnQgeyBwcmludERpdmlkZXIsIHByaW50RXJyb3IsIHByaW50SW5mbywgcHJpbnRLZXlWYWx1ZSwgcHJpbnRTZWN0aW9uLCBwcmludFN1Y2Nlc3MsIHByaW50V2FybmluZyB9IGZyb20gJy4uL3V0aWxzL291dHB1dC11dGlscy5qcyc7XG5cbmNvbnN0IHsgYm9sZCwgY3lhbiwgZGltLCBncmVlbiwgbWFnZW50YSwgcmVkLCB5ZWxsb3cgfSA9IHBpY287XG5cbi8qKlxuICogUnVudGltZSBzeXN0ZW0gaW5mb3JtYXRpb24gY29sbGVjdGVkIGZvciB0aGUgYHZlcnNpb24gLS12ZXJib3NlYCBvdXRwdXQuXG4gKi9cbmludGVyZmFjZSBTeXN0ZW1JbmZvIHtcbiAgbm9kZWpzOiBzdHJpbmc7XG4gIG5wbTogc3RyaW5nIHwgbnVsbDtcbiAgcGxhdGZvcm06IHN0cmluZztcbiAgYXJjaGl0ZWN0dXJlOiBzdHJpbmc7XG4gIG1lbW9yeToge1xuICAgIHRvdGFsOiBzdHJpbmc7XG4gICAgYXZhaWxhYmxlSGVhcDogc3RyaW5nO1xuICB9O1xuICB1cHRpbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb2xsZWN0cyBydW50aW1lIHN5c3RlbSBpbmZvcm1hdGlvbiBpbmNsdWRpbmcgTm9kZS5qcy9ucG0gdmVyc2lvbnMsXG4gKiBwbGF0Zm9ybSwgYXJjaGl0ZWN0dXJlLCBoZWFwIG1lbW9yeSB1c2FnZSwgYW5kIHByb2Nlc3MgdXB0aW1lLlxuICovXG5mdW5jdGlvbiBnZXRTeXN0ZW1JbmZvKCk6IFN5c3RlbUluZm8ge1xuICBjb25zdCBtZW0gPSBwcm9jZXNzLm1lbW9yeVVzYWdlKCk7XG4gIGNvbnN0IHRvdGFsTWVtID0gKG1lbS5oZWFwVG90YWwgLyAxMDI0IC8gMTAyNCkudG9GaXhlZCgyKTtcbiAgY29uc3QgYXZhaWxhYmxlSGVhcCA9ICgobWVtLmhlYXBUb3RhbCAtIG1lbS5oZWFwVXNlZCkgLyAxMDI0IC8gMTAyNCkudG9GaXhlZCgyKTtcbiAgY29uc3QgdXB0aW1lID0gcHJvY2Vzcy51cHRpbWUoKTtcblxuICBsZXQgbnBtOiBzdHJpbmcgfCBudWxsO1xuICB0cnkge1xuICAgIG5wbSA9IGV4ZWNTeW5jKCducG0gLS12ZXJzaW9uJywgeyBlbmNvZGluZzogJ3V0Zi04Jywgc3RkaW86ICdwaXBlJyB9KS50cmltKCk7XG4gIH0gY2F0Y2gge1xuICAgIG5wbSA9IG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG5vZGVqczogcHJvY2Vzcy52ZXJzaW9uLFxuICAgIG5wbSxcbiAgICBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSxcbiAgICBhcmNoaXRlY3R1cmU6IHByb2Nlc3MuYXJjaCxcbiAgICBtZW1vcnk6IHsgdG90YWw6IGAke3RvdGFsTWVtfSBNQmAsIGF2YWlsYWJsZUhlYXA6IGAke2F2YWlsYWJsZUhlYXB9IE1CYCB9LFxuICAgIHVwdGltZTogYCR7TWF0aC5mbG9vcih1cHRpbWUgLyAzNjAwKX1oICR7TWF0aC5mbG9vcigodXB0aW1lICUgMzYwMCkgLyA2MCl9bSAke01hdGguZmxvb3IodXB0aW1lICUgNjApfXNgLFxuICB9O1xufVxuXG4vKipcbiAqIEF0dGVtcHRzIHRvIGxvYWQgdGhlIENMSSBjb25maWd1cmF0aW9uIGFuZCByZXBvcnRzIHdoZXRoZXIgaXQgaXMgdmFsaWQuXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCBgdmFsaWQ6IHRydWVgIG9uIHN1Y2Nlc3MsIG9yIGB2YWxpZDogZmFsc2VgIHdpdGggYW4gZXJyb3IgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gY2hlY2tDb25maWd1cmF0aW9uKCk6IHsgdmFsaWQ6IGJvb2xlYW47IGVycm9yPzogc3RyaW5nIH0ge1xuICB0cnkge1xuICAgIGdldENvbmZpZygpO1xuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgIGVycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvciksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyB3aGljaCBrZXkgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBjdXJyZW50bHkgc2V0LlxuICogQHJldHVybnMgUHJlc2VuY2UgZmxhZ3MgZm9yIGBQTEFURk9STV9UT0tFTmAsIGBQTEFURk9STV9CQVNFX1VSTGAsIGFuZCBgQ0xJX0NPTkZJR19QQVRIYC5cbiAqL1xuZnVuY3Rpb24gZ2V0RW52aXJvbm1lbnRTdGF0dXMoKToge1xuICB0b2tlbjogYm9vbGVhbjtcbiAgdXJsOiBib29sZWFuO1xuICBjb25maWdQYXRoOiBib29sZWFuO1xufSB7XG4gIHJldHVybiB7XG4gICAgdG9rZW46ICEhcHJvY2Vzcy5lbnYuUExBVEZPUk1fVE9LRU4sXG4gICAgdXJsOiAhIXByb2Nlc3MuZW52LlBMQVRGT1JNX0JBU0VfVVJMLFxuICAgIGNvbmZpZ1BhdGg6ICEhcHJvY2Vzcy5lbnYuQ0xJX0NPTkZJR19QQVRILFxuICB9O1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgYHZlcnNpb25gIGNvbW1hbmQgd2l0aCB0aGUgQ0xJIHByb2dyYW0uXG4gKlxuICogRGlzcGxheXMgdGhlIENMSSBuYW1lL3ZlcnNpb24sIEFXUyBDREsgc3RhdHVzLCBhbmQgb3B0aW9uYWxseVxuICogZnVsbCBzeXN0ZW0gZGlhZ25vc3RpY3MgKGAtLXZlcmJvc2VgKSBvciBjb25maWd1cmF0aW9uIHZhbGlkYXRpb25cbiAqIChgLS1jaGVjay1jb25maWdgKS4gIFN1cHBvcnRzIGAtLWpzb25gIGZvciBtYWNoaW5lLXJlYWRhYmxlIG91dHB1dC5cbiAqXG4gKiBAcGFyYW0gcHJvZ3JhbSAtIFRoZSByb290IENvbW1hbmRlciBwcm9ncmFtIGluc3RhbmNlIHRvIGF0dGFjaCB0aGUgY29tbWFuZCB0by5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlcnNpb24ocHJvZ3JhbTogQ29tbWFuZCk6IHZvaWQge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoJ3ZlcnNpb24nKVxuICAgIC5kZXNjcmlwdGlvbignRGlzcGxheSBDTEkgdmVyc2lvbiBhbmQgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24nKVxuICAgIC5vcHRpb24oJy0tdmVyYm9zZScsICdTaG93IGRldGFpbGVkIGVudmlyb25tZW50IGluZm9ybWF0aW9uJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1jaGVjay1jb25maWcnLCAnVmVyaWZ5IGNvbmZpZ3VyYXRpb24gc3RhdHVzJywgZmFsc2UpXG4gICAgLm9wdGlvbignLS1qc29uJywgJ091dHB1dCBpbiBKU09OIGZvcm1hdCcsIGZhbHNlKVxuICAgIC5hY3Rpb24oKG9wdGlvbnMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGV4ZWN1dGlvbklkID0gZ2VuZXJhdGVFeGVjdXRpb25JZCgpO1xuICAgICAgICBjb25zdCBjZGtJbmZvID0gZ2V0Q2RrSW5mbygpO1xuXG4gICAgICAgIC8vIEpTT04gb3V0cHV0XG4gICAgICAgIGlmIChvcHRpb25zLmpzb24pIHtcbiAgICAgICAgICBjb25zdCBzeXN0ZW1JbmZvID0gZ2V0U3lzdGVtSW5mbygpO1xuICAgICAgICAgIGNvbnN0IGNvbmZpZ1N0YXR1cyA9IG9wdGlvbnMuY2hlY2tDb25maWcgPyBjaGVja0NvbmZpZ3VyYXRpb24oKSA6IHsgdmFsaWQ6IHRydWUgfTtcbiAgICAgICAgICBjb25zdCBlbnZTdGF0dXMgPSBnZXRFbnZpcm9ubWVudFN0YXR1cygpO1xuXG4gICAgICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgY2xpOiB7IG5hbWU6IEFQUF9OQU1FLCB2ZXJzaW9uOiBBUFBfVkVSU0lPTiB9LFxuICAgICAgICAgICAgc3lzdGVtOiBzeXN0ZW1JbmZvLFxuICAgICAgICAgICAgY2RrOiB7IGF2YWlsYWJsZTogY2RrSW5mby5hdmFpbGFibGUsIHZlcnNpb246IGNka0luZm8udmVyc2lvbiB9LFxuICAgICAgICAgICAgY29uZmlndXJhdGlvbjogeyB2YWxpZDogY29uZmlnU3RhdHVzLnZhbGlkLCBlcnJvcjogY29uZmlnU3RhdHVzLmVycm9yIH0sXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogZW52U3RhdHVzLFxuICAgICAgICAgICAgZXhlY3V0aW9uSWQsXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICB9LCBudWxsLCAyKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3RhbmRhcmQgb3V0cHV0XG4gICAgICAgIHByaW50U2VjdGlvbignVmVyc2lvbiBJbmZvcm1hdGlvbicpO1xuICAgICAgICBjb25zb2xlLmxvZyhgJHttYWdlbnRhKGBbRVhFLSR7ZXhlY3V0aW9uSWR9XWApfSAke2N5YW4oYm9sZCgnQ0xJIFZlcnNpb24gQ2hlY2snKSl9YCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCcnKTtcblxuICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAnQ0xJIE5hbWUnOiBib2xkKEFQUF9OQU1FKSxcbiAgICAgICAgICAnQ0xJIFZlcnNpb24nOiBncmVlbihib2xkKEFQUF9WRVJTSU9OKSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHByaW50RGl2aWRlcigpO1xuXG4gICAgICAgIC8vIFZlcmJvc2U6IHN5c3RlbSBlbnZpcm9ubWVudFxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgcHJpbnRTZWN0aW9uKCdTeXN0ZW0gRW52aXJvbm1lbnQnKTtcbiAgICAgICAgICBjb25zdCBzeXN0ZW1JbmZvID0gZ2V0U3lzdGVtSW5mbygpO1xuICAgICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICAgJ05vZGUuanMnOiBzeXN0ZW1JbmZvLm5vZGVqcyxcbiAgICAgICAgICAgICducG0nOiBzeXN0ZW1JbmZvLm5wbSB8fCB5ZWxsb3coJyhub3QgYXZhaWxhYmxlKScpLFxuICAgICAgICAgICAgJ1BsYXRmb3JtJzogc3lzdGVtSW5mby5wbGF0Zm9ybSxcbiAgICAgICAgICAgICdBcmNoaXRlY3R1cmUnOiBzeXN0ZW1JbmZvLmFyY2hpdGVjdHVyZSxcbiAgICAgICAgICAgICdNZW1vcnkgKEhlYXApJzogYCR7c3lzdGVtSW5mby5tZW1vcnkudG90YWx9IHRvdGFsLCAke3N5c3RlbUluZm8ubWVtb3J5LmF2YWlsYWJsZUhlYXB9IGF2YWlsYWJsZWAsXG4gICAgICAgICAgICAnUHJvY2VzcyBVcHRpbWUnOiBzeXN0ZW1JbmZvLnVwdGltZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwcmludERpdmlkZXIoKTtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ0FXUyBDREsnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENESyBpbmZvcm1hdGlvblxuICAgICAgICBpZiAoY2RrSW5mby5hdmFpbGFibGUgJiYgY2RrSW5mby52ZXJzaW9uKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkgcHJpbnRTdWNjZXNzKCdBV1MgQ0RLIGlzIGluc3RhbGxlZCcpO1xuICAgICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICAgJ0NESyBWZXJzaW9uJzogZ3JlZW4oY2RrSW5mby52ZXJzaW9uKSxcbiAgICAgICAgICAgICdTdGF0dXMnOiBncmVlbign4pyTIEF2YWlsYWJsZScpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZygnQVdTIENESyBpcyBub3QgaW5zdGFsbGVkJyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhkaW0oJyAgSW5zdGFsbCBDREsgd2l0aDogbnBtIGluc3RhbGwgLWcgYXdzLWNkaycpKTtcbiAgICAgICAgICAgIGlmIChjZGtJbmZvLmVycm9yKSBjb25zb2xlLmxvZyhkaW0oYCAgRXJyb3I6ICR7Y2RrSW5mby5lcnJvcn1gKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHByaW50S2V5VmFsdWUoe1xuICAgICAgICAgICAgJ0FXUyBDREsnOiByZWQoJ+KclyBOb3QgaW5zdGFsbGVkJyksXG4gICAgICAgICAgICAnU3RhdHVzJzogcmVkKCfinJcgTm90IEF2YWlsYWJsZScpLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhkaW0oJ1xcbiAgUnVuIHdpdGggLS12ZXJib3NlIGZvciBkZXRhaWxlZCBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbicpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbmZpZ3VyYXRpb24gY2hlY2tcbiAgICAgICAgaWYgKG9wdGlvbnMuY2hlY2tDb25maWcpIHtcbiAgICAgICAgICBwcmludERpdmlkZXIoKTtcbiAgICAgICAgICBwcmludFNlY3Rpb24oJ0NvbmZpZ3VyYXRpb24gU3RhdHVzJyk7XG5cbiAgICAgICAgICBjb25zdCBjb25maWdTdGF0dXMgPSBjaGVja0NvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgICBjb25zdCBlbnZTdGF0dXMgPSBnZXRFbnZpcm9ubWVudFN0YXR1cygpO1xuXG4gICAgICAgICAgaWYgKGNvbmZpZ1N0YXR1cy52YWxpZCkge1xuICAgICAgICAgICAgcHJpbnRTdWNjZXNzKCdDb25maWd1cmF0aW9uIGlzIHZhbGlkJyk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICAgICAgICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAgICAgICAnQVBJIEJhc2UgVVJMJzogY29uZmlnLmFwaS5iYXNlVXJsLFxuICAgICAgICAgICAgICAgICdTU0wgVmVyaWZpY2F0aW9uJzogY29uZmlnLmFwaS5yZWplY3RVbmF1dGhvcml6ZWQgPyBncmVlbignRW5hYmxlZCcpIDogeWVsbG93KCdEaXNhYmxlZCcpLFxuICAgICAgICAgICAgICAgICdUaW1lb3V0JzogYCR7Y29uZmlnLmFwaS50aW1lb3V0fW1zYCxcbiAgICAgICAgICAgICAgICAnQXV0aGVudGljYXRlZCc6IGNvbmZpZy5hdXRoLnRva2VuID8gZ3JlZW4oJ1llcycpIDogcmVkKCdObycpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIHByaW50V2FybmluZygnQ291bGQgbm90IGxvYWQgZnVsbCBjb25maWd1cmF0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByaW50RXJyb3IoJ0NvbmZpZ3VyYXRpb24gaXMgaW52YWxpZCcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ1N0YXR1cy5lcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZWQoYCAgRXJyb3I6ICR7Y29uZmlnU3RhdHVzLmVycm9yfWApKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zb2xlLmxvZygnJyk7XG4gICAgICAgICAgcHJpbnRJbmZvKCdFbnZpcm9ubWVudCBWYXJpYWJsZXMnKTtcbiAgICAgICAgICBwcmludEtleVZhbHVlKHtcbiAgICAgICAgICAgIFBMQVRGT1JNX1RPS0VOOiBlbnZTdGF0dXMudG9rZW4gPyBncmVlbign4pyTIFNldCcpIDogcmVkKCfinJcgTm90IHNldCcpLFxuICAgICAgICAgICAgUExBVEZPUk1fQkFTRV9VUkw6IGVudlN0YXR1cy51cmwgPyBncmVlbign4pyTIFNldCcpIDogZGltKCcobm90IHNldCAtIHVzaW5nIGRlZmF1bHQpJyksXG4gICAgICAgICAgICBDTElfQ09ORklHX1BBVEg6IGVudlN0YXR1cy5jb25maWdQYXRoID8gZ3JlZW4oJ+KckyBTZXQnKSA6IGRpbSgnKG5vdCBzZXQgLSB1c2luZyBkZWZhdWx0KScpLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKCFlbnZTdGF0dXMudG9rZW4pIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCcnKTtcbiAgICAgICAgICAgIHByaW50V2FybmluZygnUExBVEZPUk1fVE9LRU4gaXMgcmVxdWlyZWQgZm9yIEFQSSBvcGVyYXRpb25zJyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhkaW0oJyAgU2V0IGl0IHdpdGg6IGV4cG9ydCBQTEFURk9STV9UT0tFTj1cInlvdXItdG9rZW4taGVyZVwiJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhkaW0oJ1xcbiAg8J+SoSBUaXA6IFJ1biB3aXRoIC0tY2hlY2stY29uZmlnIHRvIHZlcmlmeSBjb25maWd1cmF0aW9uJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRm9vdGVyXG4gICAgICAgIHByaW50RGl2aWRlcigpO1xuICAgICAgICBjb25zb2xlLmxvZyhkaW0oYCAgRXhlY3V0aW9uIElEOiAke2V4ZWN1dGlvbklkfWApKTtcbiAgICAgICAgY29uc29sZS5sb2coZGltKGAgIFRpbWVzdGFtcDogJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9YCkpO1xuICAgICAgICBjb25zb2xlLmxvZygnJyk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGhhbmRsZUVycm9yKGVycm9yLCBFUlJPUl9DT0RFUy5HRU5FUkFMLCB7XG4gICAgICAgICAgZGVidWc6IHByb2dyYW0ub3B0cygpLmRlYnVnLFxuICAgICAgICAgIGV4aXQ6IHRydWUsXG4gICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgY29tbWFuZDogJ3ZlcnNpb24nLFxuICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICB2ZXJib3NlOiBvcHRpb25zLnZlcmJvc2UsXG4gICAgICAgICAgICAgIGNoZWNrQ29uZmlnOiBvcHRpb25zLmNoZWNrQ29uZmlnLFxuICAgICAgICAgICAgICBqc29uOiBvcHRpb25zLmpzb24sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIC8vIEFsc28gc3VwcG9ydCAtdiBhbmQgLS12ZXJzaW9uIGZsYWdzIGF0IHJvb3QgbGV2ZWxcbiAgcHJvZ3JhbS5vbignb3B0aW9uOnZlcnNpb24nLCAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coYCR7QVBQX05BTUV9IHYke0FQUF9WRVJTSU9OfWApO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfSk7XG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"cli.constants.d.ts","sourceRoot":"","sources":["../../src/config/cli.constants.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,eAAO,MAAM,QAAQ,qBAAqB,CAAC;AAC3C,eAAO,MAAM,WAAW,QAAU,CAAC;AACnC,eAAO,MAAM,eAAe,+CAA+C,CAAC;AAE5E;;GAEG;AACH,eAAO,MAAM,cAAc;;;;CAIjB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;CAKX,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;CAGnB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;;CAQX,CAAC;AAEX;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAElE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;CAkBhB,CAAC;AAEX;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAKzE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAY5G;AAQD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAM1E;AAQD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAItE"}
1
+ {"version":3,"file":"cli.constants.d.ts","sourceRoot":"","sources":["../../src/config/cli.constants.ts"],"names":[],"mappings":"AAaA;;GAEG;AACH,eAAO,MAAM,QAAQ,qBAAqB,CAAC;AAC3C,eAAO,MAAM,WAAW,QAAU,CAAC;AACnC,eAAO,MAAM,eAAe,+CAA+C,CAAC;AAE5E;;GAEG;AACH,eAAO,MAAM,cAAc;;;;CAIjB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;CAKX,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;CAGnB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,QAAQ;;;;;;;;CAQX,CAAC;AAEX;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAElE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;CAkBhB,CAAC;AAEX;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAKzE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAY5G;AAQD,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAM1E;AAQD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAItE"}