@aws-cdk/integ-runner 2.192.0 → 2.192.2

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.
package/lib/cli.d.ts CHANGED
@@ -17,7 +17,7 @@ export declare function parseCliArgs(args?: string[]): {
17
17
  clean: boolean;
18
18
  force: boolean;
19
19
  dryRun: boolean;
20
- disableUpdateWorkflow: boolean;
20
+ updateWorkflow: boolean;
21
21
  language: string[] | undefined;
22
22
  watch: boolean;
23
23
  strict: boolean;
package/lib/cli.js CHANGED
@@ -40,7 +40,8 @@ function parseCliArgs(args = []) {
40
40
  .option('strict', { type: 'boolean', default: false, desc: 'Fail if any specified tests are not found' })
41
41
  .options('from-file', { type: 'string', desc: 'Read TEST names from a file (one TEST per line)' })
42
42
  .option('inspect-failures', { type: 'boolean', desc: 'Keep the integ test cloud assembly if a failure occurs for inspection', default: false })
43
- .option('disable-update-workflow', { type: 'boolean', default: false, desc: 'If this is "true" then the stack update workflow will be disabled' })
43
+ .option('disable-update-workflow', { type: 'boolean', default: undefined, desc: 'DEPRECATED, use --[no]-update-workflow instead' })
44
+ .option('update-workflow', { type: 'boolean', default: undefined, desc: 'Deploys the committed snapshot before the updated application. Only works if snapshots are region-agnostic.' })
44
45
  .option('language', {
45
46
  alias: 'l',
46
47
  default: ['javascript', 'typescript', 'python', 'go'],
@@ -75,6 +76,10 @@ function parseCliArgs(args = []) {
75
76
  const requestedTests = fromFile
76
77
  ? (fs.readFileSync(fromFile, { encoding: 'utf8' })).split('\n').filter(x => x)
77
78
  : (tests.length > 0 ? tests : undefined); // 'undefined' means no request
79
+ if (argv['disable-update-workflow'] !== undefined && argv['update-workflow'] !== undefined) {
80
+ throw new Error('--disable-update-workflow and --[no-]update-workflow cannot be used together');
81
+ }
82
+ let updateWorkflow = argv['update-workflow'] !== undefined ? !!argv['update-workflow'] : !argv['disable-update-workflow'];
78
83
  return {
79
84
  tests: requestedTests,
80
85
  app: argv.app,
@@ -94,7 +99,7 @@ function parseCliArgs(args = []) {
94
99
  clean: argv.clean,
95
100
  force: argv.force,
96
101
  dryRun: argv['dry-run'],
97
- disableUpdateWorkflow: argv['disable-update-workflow'],
102
+ updateWorkflow,
98
103
  language: arrayFromYargs(argv.language),
99
104
  watch: argv.watch,
100
105
  strict: argv.strict,
@@ -176,7 +181,7 @@ async function run(options, { engine }) {
176
181
  clean: options.clean,
177
182
  dryRun: options.dryRun,
178
183
  verbosity: options.verbosity,
179
- updateWorkflow: !options.disableUpdateWorkflow,
184
+ updateWorkflow: options.updateWorkflow,
180
185
  watch: options.watch,
181
186
  });
182
187
  testsSucceeded = success;
@@ -225,8 +230,8 @@ function validateWatchArgs(args) {
225
230
  throw new Error('Running with watch only supports a single test. Only provide a single option' +
226
231
  'to `--profiles` `--parallel-regions` `--max-workers');
227
232
  }
228
- if (args.runUpdateOnFailed || args.disableUpdateWorkflow || args.force || args.dryRun) {
229
- logger.warning('args `--update-on-failed`, `--disable-update-workflow`, `--force`, `--dry-run` have no effect when running with `--watch`');
233
+ if (args.runUpdateOnFailed || args.updateWorkflow || args.force || args.dryRun) {
234
+ logger.warning('args `--update-on-failed`, `--update-workflow`, `--force`, `--dry-run` have no effect when running with `--watch`');
230
235
  }
231
236
  }
232
237
  }
@@ -302,4 +307,4 @@ function engineFromOptions(options) {
302
307
  }
303
308
  return { engine: 'toolkit-lib' };
304
309
  }
305
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0JBLG9DQTBGQztBQUVELG9CQWNDO0FBc0xELGtCQUlDO0FBdFRELGdGQUFnRjtBQUNoRix5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLCtCQUErQjtBQUMvQix5Q0FBeUM7QUFDekMsbUNBQW1DO0FBR25DLGtFQUE4RDtBQUU5RCx1Q0FBa0U7QUFDbEUscUVBQW9FO0FBRXBFLDZDQUE2QztBQUM3QywrQ0FBK0M7QUFDL0MsaUVBQWlFO0FBQ2pFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUUvQixTQUFnQixZQUFZLENBQUMsT0FBaUIsRUFBRTtJQUM5QyxNQUFNLElBQUksR0FBRyxLQUFLO1NBQ2YsS0FBSyxDQUFDLCtCQUErQixDQUFDO1NBQ3RDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7UUFDaEIsTUFBTSxFQUFFLElBQUk7UUFDWixZQUFZLEVBQUUsY0FBYztRQUM1QixPQUFPLEVBQUUsbUJBQW1CO1FBQzVCLElBQUksRUFBRSx5RkFBeUY7S0FDaEcsQ0FBQztTQUNELE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLG1DQUFtQyxFQUFFLENBQUM7U0FDL0YsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsb0NBQW9DLEVBQUUsQ0FBQztTQUMvRixNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSw4RUFBOEUsRUFBRSxDQUFDO1NBQ3pJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVB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LEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsT0FBZ0M7SUFDekQsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7UUFDeEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxxWEFBcVgsQ0FBQyxDQUFDO1FBQ3RZLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUNELE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEV4ZXJjaXNlIGFsbCBpbnRlZyBzdGFja3MgYW5kIGlmIHRoZXkgZGVwbG95LCB1cGRhdGUgdGhlIGV4cGVjdGVkIHN5bnRoIGZpbGVzXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgd29ya2VycG9vbCBmcm9tICd3b3JrZXJwb29sJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgdHlwZSB7IEVuZ2luZU9wdGlvbnMgfSBmcm9tICcuL3J1bm5lci9lbmdpbmUnO1xuaW1wb3J0IHR5cGUgeyBJbnRlZ1Rlc3QsIEludGVnVGVzdEluZm8gfSBmcm9tICcuL3J1bm5lci9pbnRlZ3JhdGlvbi10ZXN0cyc7XG5pbXBvcnQgeyBJbnRlZ3JhdGlvblRlc3RzIH0gZnJvbSAnLi9ydW5uZXIvaW50ZWdyYXRpb24tdGVzdHMnO1xuaW1wb3J0IHR5cGUgeyBJbnRlZ1J1bm5lck1ldHJpY3MsIEludGVnVGVzdFdvcmtlckNvbmZpZywgRGVzdHJ1Y3RpdmVDaGFuZ2UgfSBmcm9tICcuL3dvcmtlcnMnO1xuaW1wb3J0IHsgcnVuU25hcHNob3RUZXN0cywgcnVuSW50ZWdyYXRpb25UZXN0cyB9IGZyb20gJy4vd29ya2Vycyc7XG5pbXBvcnQgeyB3YXRjaEludGVncmF0aW9uVGVzdCB9IGZyb20gJy4vd29ya2Vycy9pbnRlZy13YXRjaC13b3JrZXInO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20veWFyZ3MveWFyZ3MvaXNzdWVzLzE5Mjlcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9lc2J1aWxkL2lzc3Vlcy8xNDkyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgeWFyZ3MgPSByZXF1aXJlKCd5YXJncycpO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDbGlBcmdzKGFyZ3M6IHN0cmluZ1tdID0gW10pIHtcbiAgY29uc3QgYXJndiA9IHlhcmdzXG4gICAgLnVzYWdlKCdVc2FnZTogaW50ZWctcnVubmVyIFtURVNULi4uXScpXG4gICAgLm9wdGlvbignY29uZmlnJywge1xuICAgICAgY29uZmlnOiB0cnVlLFxuICAgICAgY29uZmlnUGFyc2VyOiBjb25maWdGcm9tRmlsZSxcbiAgICAgIGRlZmF1bHQ6ICdpbnRlZy5jb25maWcuanNvbicsXG4gICAgICBkZXNjOiAnTG9hZCBvcHRpb25zIGZyb20gYSBKU09OIGNvbmZpZyBmaWxlLiBPcHRpb25zIHByb3ZpZGVkIGFzIENMSSBhcmd1bWVudHMgdGFrZSBwcmVjZWRlbnQuJyxcbiAgICB9KVxuICAgIC5vcHRpb24oJ3dhdGNoJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAnUGVyZm9ybSBpbnRlZyB0ZXN0cyBpbiB3YXRjaCBtb2RlJyB9KVxuICAgIC5vcHRpb24oJ2xpc3QnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdMaXN0IHRlc3RzIGluc3RlYWQgb2YgcnVubmluZyB0aGVtJyB9KVxuICAgIC5vcHRpb24oJ2NsZWFuJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IHRydWUsIGRlc2M6ICdDbGVhbiB1cCBhbmQgZGVsZXRlIHN0YWNrIGFmdGVyIHRlc3QgaXMgY29tcGxldGVkICh1c2UgLS1uby1jbGVhbiB0byBuZWdhdGUpJyB9KVxuICAgIC5vcHRpb24oJ3ZlcmJvc2UnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGFsaWFzOiAndicsIGNvdW50OiB0cnVlLCBkZXNjOiAnVmVyYm9zZSBsb2dzIGFuZCBtZXRyaWNzIG9uIGludGVncmF0aW9uIHRlc3RzIGR1cmF0aW9ucyAoc3BlY2lmeSBtdWx0aXBsZSB0aW1lcyB0byBpbmNyZWFzZSB2ZXJib3NpdHkpJyB9KVxuICAgIC5vcHRpb24oJ2RyeS1ydW4nLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdkbyBub3QgYWN0dWFsbHkgZGVwbG95IHRoZSBzdGFjay4ganVzdCB1cGRhdGUgdGhlIHNuYXBzaG90IChub3QgcmVjb21tZW5kZWQhKScgfSlcbiAgICAub3B0aW9uKCd1cGRhdGUtb24tZmFpbGVkJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAncmVydW4gaW50ZWdyYXRpb24gdGVzdHMgYW5kIHVwZGF0ZSBzbmFwc2hvdHMgZm9yIGZhaWxlZCB0ZXN0cy4nIH0pXG4gICAgLm9wdGlvbignZm9yY2UnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdSZXJ1biBhbGwgaW50ZWdyYXRpb24gdGVzdHMgZXZlbiBpZiB0ZXN0cyBhcmUgcGFzc2luZycgfSlcbiAgICAub3B0aW9uKCdwYXJhbGxlbC1yZWdpb25zJywgeyB0eXBlOiAnYXJyYXknLCBkZXNjOiAnVGVzdHMgYXJlIHJ1biBpbiBwYXJhbGxlbCBhY3Jvc3MgdGhlc2UgcmVnaW9ucy4gVG8gcHJldmVudCB0ZXN0cyBmcm9tIHJ1bm5pbmcgaW4gcGFyYWxsZWwsIHByb3ZpZGUgb25seSBhIHNpbmdsZSByZWdpb24nLCBkZWZhdWx0OiBbXSB9KVxuICAgIC5vcHRpb25zKCdkaXJlY3RvcnknLCB7IHR5cGU6ICdzdHJpbmcnLCBkZWZhdWx0OiAndGVzdCcsIGRlc2M6ICdzdGFydGluZyBkaXJlY3RvcnkgdG8gZGlzY292ZXIgaW50ZWdyYXRpb24gdGVzdHMuIFRlc3RzIHdpbGwgYmUgZGlzY292ZXJlZCByZWN1cnNpdmVseSBmcm9tIHRoaXMgZGlyZWN0b3J5JyB9KVxuICAgIC5vcHRpb25zKCdwcm9maWxlcycsIHsgdHlwZTogJ2FycmF5JywgZGVzYzogJ2xpc3Qgb2YgQVdTIHByb2ZpbGVzIHRvIHVzZS4gVGVzdHMgd2lsbCBiZSBydW4gaW4gcGFyYWxsZWwgYWNyb3NzIGVhY2ggcHJvZmlsZStyZWdpb25zJywgZGVmYXVsdDogW10gfSlcbiAgICAub3B0aW9ucygnbWF4LXdvcmtlcnMnLCB7IHR5cGU6ICdudW1iZXInLCBkZXNjOiAnVGhlIG1heCBudW1iZXIgb2Ygd29ya2VycG9vbCB3b3JrZXJzIHRvIHVzZSB3aGVuIHJ1bm5pbmcgaW50ZWdyYXRpb24gdGVzdHMgaW4gcGFyYWxsZWwnLCBkZWZhdWx0OiAxNiB9KVxuICAgIC5vcHRpb25zKCdleGNsdWRlJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlc2M6ICdSdW4gYWxsIHRlc3RzIGluIHRoZSBkaXJlY3RvcnksIGV4Y2VwdCB0aGUgc3BlY2lmaWVkIFRFU1RzJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAub3B0aW9uKCdzdHJpY3QnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdGYWlsIGlmIGFueSBzcGVjaWZpZWQgdGVzdHMgYXJlIG5vdCBmb3VuZCcgfSlcbiAgICAub3B0aW9ucygnZnJvbS1maWxlJywgeyB0eXBlOiAnc3RyaW5nJywgZGVzYzogJ1JlYWQgVEVTVCBuYW1lcyBmcm9tIGEgZmlsZSAob25lIFRFU1QgcGVyIGxpbmUpJyB9KVxuICAgIC5vcHRpb24oJ2luc3BlY3QtZmFpbHVyZXMnLCB7IHR5cGU6ICdib29sZWFuJywgZGVzYzogJ0tlZXAgdGhlIGludGVnIHRlc3QgY2xvdWQgYXNzZW1ibHkgaWYgYSBmYWlsdXJlIG9jY3VycyBmb3IgaW5zcGVjdGlvbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgLm9wdGlvbignZGlzYWJsZS11cGRhdGUtd29ya2Zsb3cnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdJZiB0aGlzIGlzIFwidHJ1ZVwiIHRoZW4gdGhlIHN0YWNrIHVwZGF0ZSB3b3JrZmxvdyB3aWxsIGJlIGRpc2FibGVkJyB9KVxuICAgIC5vcHRpb24oJ2xhbmd1YWdlJywge1xuICAgICAgYWxpYXM6ICdsJyxcbiAgICAgIGRlZmF1bHQ6IFsnamF2YXNjcmlwdCcsICd0eXBlc2NyaXB0JywgJ3B5dGhvbicsICdnbyddLFxuICAgICAgY2hvaWNlczogWydqYXZhc2NyaXB0JywgJ3R5cGVzY3JpcHQnLCAncHl0aG9uJywgJ2dvJ10sXG4gICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgbmFyZ3M6IDEsXG4gICAgICBkZXNjOiAnVXNlIHRoZXNlIHByZXNldHMgdG8gcnVuIGludGVncmF0aW9uIHRlc3RzIGZvciB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2VzJyxcbiAgICB9KVxuICAgIC5vcHRpb24oJ2FwcCcsIHsgdHlwZTogJ3N0cmluZycsIGRlZmF1bHQ6IHVuZGVmaW5lZCwgZGVzYzogJ1RoZSBjdXN0b20gQ0xJIGNvbW1hbmQgdGhhdCB3aWxsIGJlIHVzZWQgdG8gcnVuIHRoZSB0ZXN0IGZpbGVzLiBZb3UgY2FuIGluY2x1ZGUge2ZpbGVQYXRofSB0byBzcGVjaWZ5IHdoZXJlIGluIHRoZSBjb21tYW5kIHRoZSB0ZXN0IGZpbGUgcGF0aCBzaG91bGQgYmUgaW5zZXJ0ZWQuIEV4YW1wbGU6IC0tYXBwPVwicHl0aG9uMy44IHtmaWxlUGF0aH1cIi4nIH0pXG4gICAgLm9wdGlvbigndGVzdC1yZWdleCcsIHsgdHlwZTogJ2FycmF5JywgZGVzYzogJ0RldGVjdCBpbnRlZ3JhdGlvbiB0ZXN0IGZpbGVzIG1hdGNoaW5nIHRoaXMgSmF2YVNjcmlwdCByZWdleCBwYXR0ZXJuLiBJZiB1c2VkIG11bHRpcGxlIHRpbWVzLCBhbGwgZmlsZXMgbWF0Y2hpbmcgYW55IG9uZSBvZiB0aGUgcGF0dGVybnMgYXJlIGRldGVjdGVkLicsIGRlZmF1bHQ6IFtdIH0pXG4gICAgLm9wdGlvbigndW5zdGFibGUnLCB7IHR5cGU6ICdhcnJheScsIGRlc2M6ICdPcHQtaW4gdG8gdXNpbmcgdW5zdGFibGUgZmVhdHVyZXMuIEJ5IHVzaW5nIHRoZXNlIGZsYWdzIHlvdSBhY2tub3dsZWRnZXMgdGhhdCBzY29wZSBhbmQgQVBJcyBvZiB1bnN0YWJsZSBmZWF0dXJlcyBtYXkgY2hhbmdlIHdpdGhvdXQgbm90aWNlLiBTcGVjaWZ5IG11bHRpcGxlIHRpbWVzIGZvciBlYWNoIHVuc3RhYmxlIGZlYXR1cmUgeW91IHdhbnQgdG8gb3B0LWluIHRvLicsIG5hcmdzOiAxLCBjaG9pY2VzOiBbJ3Rvb2xraXQtbGliLWVuZ2luZScsICdkZXByZWNhdGVkLWNsaS1lbmdpbmUnXSwgZGVmYXVsdDogW10gfSlcbiAgICAuc3RyaWN0KClcbiAgICAucGFyc2UoYXJncyk7XG5cbiAgY29uc3QgdGVzdHM6IHN0cmluZ1tdID0gYXJndi5fO1xuICBjb25zdCBwYXJhbGxlbFJlZ2lvbnMgPSBhcnJheUZyb21ZYXJncyhhcmd2WydwYXJhbGxlbC1yZWdpb25zJ10pO1xuICBjb25zdCB0ZXN0UmVnaW9uczogc3RyaW5nW10gPSBwYXJhbGxlbFJlZ2lvbnMgPz8gWyd1cy1lYXN0LTEnLCAndXMtZWFzdC0yJywgJ3VzLXdlc3QtMiddO1xuICBjb25zdCBwcm9maWxlcyA9IGFycmF5RnJvbVlhcmdzKGFyZ3YucHJvZmlsZXMpO1xuICBjb25zdCBmcm9tRmlsZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gYXJndlsnZnJvbS1maWxlJ107XG4gIGNvbnN0IG1heFdvcmtlcnM6IG51bWJlciA9IGFyZ3ZbJ21heC13b3JrZXJzJ107XG4gIGNvbnN0IHZlcmJvc2l0eTogbnVtYmVyID0gYXJndi52ZXJib3NlO1xuICBjb25zdCB2ZXJib3NlOiBib29sZWFuID0gdmVyYm9zaXR5ID49IDE7XG5cbiAgY29uc3QgbnVtVGVzdHMgPSB0ZXN0UmVnaW9ucy5sZW5ndGggKiAocHJvZmlsZXMgPz8gWzFdKS5sZW5ndGg7XG4gIGlmIChtYXhXb3JrZXJzIDwgbnVtVGVzdHMpIHtcbiAgICBsb2dnZXIud2FybmluZygnWW91IGFyZSBhdHRlbXB0aW5nIHRvIHJ1biAlcyB0ZXN0cyBpbiBwYXJhbGxlbCwgYnV0IG9ubHkgaGF2ZSAlcyB3b3JrZXJzLiBOb3QgYWxsIG9mIHlvdXIgcHJvZmlsZXMrcmVnaW9ucyB3aWxsIGJlIHV0aWxpemVkJywgbnVtVGVzdHMsIG1heFdvcmtlcnMpO1xuICB9XG5cbiAgaWYgKHRlc3RzLmxlbmd0aCA+IDAgJiYgZnJvbUZpbGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0EgbGlzdCBvZiB0ZXN0cyBjYW5ub3QgYmUgcHJvdmlkZWQgaWYgXCItLWZyb20tZmlsZVwiIGlzIHByb3ZpZGVkJyk7XG4gIH1cblxuICBpZiAoYXJndi5zdHJpY3QgJiYgYXJndi5leGNsdWRlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgdXNlIC0tc3RyaWN0IHdpdGggLS1leGNsdWRlJyk7XG4gIH1cblxuICBjb25zdCByZXF1ZXN0ZWRUZXN0cyA9IGZyb21GaWxlXG4gICAgPyAoZnMucmVhZEZpbGVTeW5jKGZyb21GaWxlLCB7IGVuY29kaW5nOiAndXRmOCcgfSkpLnNwbGl0KCdcXG4nKS5maWx0ZXIoeCA9PiB4KVxuICAgIDogKHRlc3RzLmxlbmd0aCA+IDAgPyB0ZXN0cyA6IHVuZGVmaW5lZCk7IC8vICd1bmRlZmluZWQnIG1lYW5zIG5vIHJlcXVlc3RcblxuICByZXR1cm4ge1xuICAgIHRlc3RzOiByZXF1ZXN0ZWRUZXN0cyxcbiAgICBhcHA6IGFyZ3YuYXBwIGFzIChzdHJpbmcgfCB1bmRlZmluZWQpLFxuICAgIHRlc3RSZWdleDogYXJyYXlGcm9tWWFyZ3MoYXJndlsndGVzdC1yZWdleCddKSxcbiAgICB0ZXN0UmVnaW9ucyxcbiAgICBvcmlnaW5hbFJlZ2lvbnM6IHBhcmFsbGVsUmVnaW9ucyxcbiAgICBwcm9maWxlcyxcbiAgICBydW5VcGRhdGVPbkZhaWxlZDogKGFyZ3ZbJ3VwZGF0ZS1vbi1mYWlsZWQnXSA/PyBmYWxzZSkgYXMgYm9vbGVhbixcbiAgICBmcm9tRmlsZSxcbiAgICBleGNsdWRlOiBhcmd2LmV4Y2x1ZGUgYXMgYm9vbGVhbixcbiAgICBtYXhXb3JrZXJzLFxuICAgIGxpc3Q6IGFyZ3YubGlzdCBhcyBib29sZWFuLFxuICAgIGRpcmVjdG9yeTogYXJndi5kaXJlY3RvcnkgYXMgc3RyaW5nLFxuICAgIGluc3BlY3RGYWlsdXJlczogYXJndlsnaW5zcGVjdC1mYWlsdXJlcyddIGFzIGJvb2xlYW4sXG4gICAgdmVyYm9zaXR5LFxuICAgIHZlcmJvc2UsXG4gICAgY2xlYW46IGFyZ3YuY2xlYW4gYXMgYm9vbGVhbixcbiAgICBmb3JjZTogYXJndi5mb3JjZSBhcyBib29sZWFuLFxuICAgIGRyeVJ1bjogYXJndlsnZHJ5LXJ1biddIGFzIGJvb2xlYW4sXG4gICAgZGlzYWJsZVVwZGF0ZVdvcmtmbG93OiBhcmd2WydkaXNhYmxlLXVwZGF0ZS13b3JrZmxvdyddIGFzIGJvb2xlYW4sXG4gICAgbGFuZ3VhZ2U6IGFycmF5RnJvbVlhcmdzKGFyZ3YubGFuZ3VhZ2UpLFxuICAgIHdhdGNoOiBhcmd2LndhdGNoIGFzIGJvb2xlYW4sXG4gICAgc3RyaWN0OiBhcmd2LnN0cmljdCBhcyBib29sZWFuLFxuICAgIHVuc3RhYmxlOiBhcnJheUZyb21ZYXJncyhhcmd2LnVuc3RhYmxlKSA/PyBbXSxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4oYXJnczogc3RyaW5nW10pIHtcbiAgbGV0IGVuZ2luZUZvckVycm9yO1xuICB0cnkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBwYXJzZUNsaUFyZ3MoYXJncyk7XG4gICAgY29uc3QgZW5naW5lID0gZW5naW5lRnJvbU9wdGlvbnMob3B0aW9ucyk7XG4gICAgZW5naW5lRm9yRXJyb3IgPSBlbmdpbmUuZW5naW5lO1xuICAgIGF3YWl0IHJ1bihvcHRpb25zLCBlbmdpbmUpO1xuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGxvZ2dlci5lcnJvcihlcnIpO1xuICAgIGlmIChlbmdpbmVGb3JFcnJvciA9PT0gJ3Rvb2xraXQtbGliJykge1xuICAgICAgbG9nZ2VyLndhcm5pbmcoJ1xcbltOb3RpY2VdIFlvdSBhcmUgdXNpbmcgdGhlIG5ldyBkZWZhdWx0IGVuZ2luZSB0byBydW4gaW50ZWdyYXRpb24gdGVzdHMuIElmIHlvdSB0aGluayB0aGUgYWJvdmUgZmFpbHVyZSBoYXMgYmVlbiBjYXVzZWQgYnkgdGhlIG5ldyBlbmdpbmUsIHlvdSBtYXkgY2hvb3NlIHRvIHRlbXBvcmFyaWx5IHJldmVydCB0byB0aGUgb2xkIGVuZ2luZSBieSBhZGRpbmcgdGhlIGAtLXVuc3RhYmxlPWRlcHJlY2F0ZWQtY2xpLWVuZ2luZWAgb3B0aW9uLiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgZW5naW5lIGlzIGRlcHJlY2F0ZWQgYW5kIHNjaGVkdWxlZCB0byBiZSByZW1vdmVkIGluIEphbnVhcnkgMjAyNi5cXG5cXG5JZiByZXZlcnRpbmcgdG8gdGhlIG9sZCBlbmdpbmUgcmVzb2x2ZXMgYW4gaXNzdWUgZm9yIHlvdSwgcGxlYXNlIGxldCB1cyBrbm93IHNvIHdlIGNhbiBhZGRyZXNzIHRoaXMgaW4gdGhlIG5ldyBlbmdpbmUuIFJlcG9ydCBpc3N1ZXMgaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrLWNsaS9pc3N1ZXMvbmV3L2Nob29zZScpO1xuICAgIH1cbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuKG9wdGlvbnM6IFJldHVyblR5cGU8dHlwZW9mIHBhcnNlQ2xpQXJncz4sIHsgZW5naW5lIH06IEVuZ2luZU9wdGlvbnMpIHtcbiAgY29uc3QgdGVzdHNGcm9tQXJncyA9IGF3YWl0IG5ldyBJbnRlZ3JhdGlvblRlc3RzKHBhdGgucmVzb2x2ZShvcHRpb25zLmRpcmVjdG9yeSkpLmZyb21DbGlPcHRpb25zKG9wdGlvbnMpO1xuXG4gIC8vIExpc3Qgb25seSBwcmludHMgdGhlIGRpc2NvdmVyZWQgdGVzdHNcbiAgaWYgKG9wdGlvbnMubGlzdCkge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHRlc3RzRnJvbUFyZ3MubWFwKHQgPT4gdC5kaXNjb3ZlcnlSZWxhdGl2ZUZpbGVOYW1lKS5qb2luKCdcXG4nKSArICdcXG4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwb29sID0gd29ya2VycG9vbC5wb29sKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICdsaWInLCAnd29ya2VycycsICdleHRyYWN0JywgJ2luZGV4LmpzJyksIHtcbiAgICBtYXhXb3JrZXJzOiBvcHRpb25zLndhdGNoID8gMSA6IG9wdGlvbnMubWF4V29ya2VycyxcbiAgfSk7XG5cbiAgY29uc3QgdGVzdHNUb1J1bjogSW50ZWdUZXN0V29ya2VyQ29uZmlnW10gPSBbXTtcbiAgbGV0IGRlc3RydWN0aXZlQ2hhbmdlczogYm9vbGVhbiA9IGZhbHNlO1xuICBsZXQgZmFpbGVkU25hcHNob3RzOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSA9IFtdO1xuICBsZXQgdGVzdHNTdWNjZWVkZWQgPSBmYWxzZTtcbiAgdmFsaWRhdGVXYXRjaEFyZ3Moe1xuICAgIC4uLm9wdGlvbnMsXG4gICAgdGVzdFJlZ2lvbnM6IG9wdGlvbnMub3JpZ2luYWxSZWdpb25zLFxuICAgIHRlc3RzOiB0ZXN0c0Zyb21BcmdzLFxuICB9KTtcblxuICB0cnkge1xuICAgIGlmICghb3B0aW9ucy53YXRjaCkge1xuICAgICAgLy8gYWx3YXlzIHJ1biBzbmFwc2hvdCB0ZXN0cywgYnV0IGlmICctLWZvcmNlJyBpcyBwYXNzZWQgdGhlblxuICAgICAgLy8gcnVuIGludGVncmF0aW9uIHRlc3RzIG9uIGFsbCBmYWlsZWQgdGVzdHMsIG5vdCBqdXN0IHRob3NlIHRoYXRcbiAgICAgIC8vIGZhaWxlZCBzbmFwc2hvdCB0ZXN0c1xuICAgICAgZmFpbGVkU25hcHNob3RzID0gYXdhaXQgcnVuU25hcHNob3RUZXN0cyhwb29sLCB0ZXN0c0Zyb21BcmdzLCB7XG4gICAgICAgIHJldGFpbjogb3B0aW9ucy5pbnNwZWN0RmFpbHVyZXMsXG4gICAgICAgIHZlcmJvc2U6IG9wdGlvbnMudmVyYm9zZSxcbiAgICAgICAgZW5naW5lLFxuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgZmFpbGVkU25hcHNob3RzKSB7XG4gICAgICAgIGxvZ2dlci53YXJuaW5nKGBGYWlsZWQ6ICR7ZmFpbHVyZS5maWxlTmFtZX1gKTtcbiAgICAgICAgaWYgKGZhaWx1cmUuZGVzdHJ1Y3RpdmVDaGFuZ2VzICYmIGZhaWx1cmUuZGVzdHJ1Y3RpdmVDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwcmludERlc3RydWN0aXZlQ2hhbmdlcyhmYWlsdXJlLmRlc3RydWN0aXZlQ2hhbmdlcyk7XG4gICAgICAgICAgZGVzdHJ1Y3RpdmVDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFvcHRpb25zLmZvcmNlKSB7XG4gICAgICAgIHRlc3RzVG9SdW4ucHVzaCguLi5mYWlsZWRTbmFwc2hvdHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgYW55IG9mIHRoZSB0ZXN0IGZhaWxlZCBzbmFwc2hvdCB0ZXN0cywga2VlcCB0aG9zZSByZXN1bHRzXG4gICAgICAgIC8vIGFuZCBtZXJnZSB3aXRoIHRoZSByZXN0IG9mIHRoZSB0ZXN0cyBmcm9tIGFyZ3NcbiAgICAgICAgdGVzdHNUb1J1bi5wdXNoKC4uLm1lcmdlVGVzdHModGVzdHNGcm9tQXJncy5tYXAodCA9PiB0LmluZm8pLCBmYWlsZWRTbmFwc2hvdHMpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGVzdHNUb1J1bi5wdXNoKC4uLnRlc3RzRnJvbUFyZ3MubWFwKHQgPT4gdC5pbmZvKSk7XG4gICAgfVxuXG4gICAgLy8gcnVuIGludGVncmF0aW9uIHRlc3RzIGlmIGAtLXVwZGF0ZS1vbi1mYWlsZWRgIE9SIGAtLWZvcmNlYCBpcyB1c2VkXG4gICAgaWYgKG9wdGlvbnMucnVuVXBkYXRlT25GYWlsZWQgfHwgb3B0aW9ucy5mb3JjZSkge1xuICAgICAgY29uc3QgeyBzdWNjZXNzLCBtZXRyaWNzIH0gPSBhd2FpdCBydW5JbnRlZ3JhdGlvblRlc3RzKHtcbiAgICAgICAgcG9vbCxcbiAgICAgICAgZW5naW5lLFxuICAgICAgICB0ZXN0czogdGVzdHNUb1J1bixcbiAgICAgICAgcmVnaW9uczogb3B0aW9ucy50ZXN0UmVnaW9ucyxcbiAgICAgICAgcHJvZmlsZXM6IG9wdGlvbnMucHJvZmlsZXMsXG4gICAgICAgIGNsZWFuOiBvcHRpb25zLmNsZWFuLFxuICAgICAgICBkcnlSdW46IG9wdGlvbnMuZHJ5UnVuLFxuICAgICAgICB2ZXJib3NpdHk6IG9wdGlvbnMudmVyYm9zaXR5LFxuICAgICAgICB1cGRhdGVXb3JrZmxvdzogIW9wdGlvbnMuZGlzYWJsZVVwZGF0ZVdvcmtmbG93LFxuICAgICAgICB3YXRjaDogb3B0aW9ucy53YXRjaCxcbiAgICAgIH0pO1xuICAgICAgdGVzdHNTdWNjZWVkZWQgPSBzdWNjZXNzO1xuXG4gICAgICBpZiAob3B0aW9ucy5jbGVhbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ05vdCBjbGVhbmluZyB1cCBzdGFja3Mgc2luY2UgXCItLW5vLWNsZWFuXCIgd2FzIHVzZWQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKEJvb2xlYW4ob3B0aW9ucy52ZXJib3NlKSkge1xuICAgICAgICBwcmludE1ldHJpY3MobWV0cmljcyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghc3VjY2Vzcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvbWUgaW50ZWdyYXRpb24gdGVzdHMgZmFpbGVkIScpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3B0aW9ucy53YXRjaCkge1xuICAgICAgYXdhaXQgd2F0Y2hJbnRlZ3JhdGlvblRlc3QocG9vbCwge1xuICAgICAgICB3YXRjaDogdHJ1ZSxcbiAgICAgICAgZW5naW5lLFxuICAgICAgICB2ZXJib3NpdHk6IG9wdGlvbnMudmVyYm9zaXR5LFxuICAgICAgICAuLi50ZXN0c1RvUnVuWzBdLFxuICAgICAgICBwcm9maWxlOiBvcHRpb25zLnByb2ZpbGVzID8gb3B0aW9ucy5wcm9maWxlc1swXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVnaW9uOiBvcHRpb25zLnRlc3RSZWdpb25zWzBdLFxuICAgICAgfSk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHZvaWQgcG9vbC50ZXJtaW5hdGUoKTtcbiAgfVxuXG4gIGlmIChkZXN0cnVjdGl2ZUNoYW5nZXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1NvbWUgY2hhbmdlcyB3ZXJlIGRlc3RydWN0aXZlIScpO1xuICB9XG4gIGlmIChmYWlsZWRTbmFwc2hvdHMubGVuZ3RoID4gMCkge1xuICAgIGxldCBtZXNzYWdlID0gJyc7XG4gICAgaWYgKCFvcHRpb25zLnJ1blVwZGF0ZU9uRmFpbGVkKSB7XG4gICAgICBtZXNzYWdlID0gJ1RvIHJlLXJ1biBmYWlsZWQgdGVzdHMgcnVuOiBpbnRlZy1ydW5uZXIgLS11cGRhdGUtb24tZmFpbGVkJztcbiAgICB9XG4gICAgaWYgKCF0ZXN0c1N1Y2NlZWRlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTb21lIHRlc3RzIGZhaWxlZCFcXG4ke21lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlV2F0Y2hBcmdzKGFyZ3M6IHtcbiAgdGVzdHM6IEludGVnVGVzdFtdO1xuICB0ZXN0UmVnaW9ucz86IHN0cmluZ1tdO1xuICBwcm9maWxlcz86IHN0cmluZ1tdO1xuICBtYXhXb3JrZXJzOiBudW1iZXI7XG4gIGZvcmNlOiBib29sZWFuO1xuICBkcnlSdW46IGJvb2xlYW47XG4gIGRpc2FibGVVcGRhdGVXb3JrZmxvdzogYm9vbGVhbjtcbiAgcnVuVXBkYXRlT25GYWlsZWQ6IGJvb2xlYW47XG4gIHdhdGNoOiBib29sZWFuO1xufSkge1xuICBpZiAoYXJncy53YXRjaCkge1xuICAgIGlmIChcbiAgICAgIChhcmdzLnRlc3RSZWdpb25zICYmIGFyZ3MudGVzdFJlZ2lvbnMubGVuZ3RoID4gMSlcbiAgICAgICAgfHwgKGFyZ3MucHJvZmlsZXMgJiYgYXJncy5wcm9maWxlcy5sZW5ndGggPiAxKVxuICAgICAgICB8fCBhcmdzLnRlc3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUnVubmluZyB3aXRoIHdhdGNoIG9ubHkgc3VwcG9ydHMgYSBzaW5nbGUgdGVzdC4gT25seSBwcm92aWRlIGEgc2luZ2xlIG9wdGlvbicrXG4gICAgICAgICd0byBgLS1wcm9maWxlc2AgYC0tcGFyYWxsZWwtcmVnaW9uc2AgYC0tbWF4LXdvcmtlcnMnKTtcbiAgICB9XG5cbiAgICBpZiAoYXJncy5ydW5VcGRhdGVPbkZhaWxlZCB8fCBhcmdzLmRpc2FibGVVcGRhdGVXb3JrZmxvdyB8fCBhcmdzLmZvcmNlIHx8IGFyZ3MuZHJ5UnVuKSB7XG4gICAgICBsb2dnZXIud2FybmluZygnYXJncyBgLS11cGRhdGUtb24tZmFpbGVkYCwgYC0tZGlzYWJsZS11cGRhdGUtd29ya2Zsb3dgLCBgLS1mb3JjZWAsIGAtLWRyeS1ydW5gIGhhdmUgbm8gZWZmZWN0IHdoZW4gcnVubmluZyB3aXRoIGAtLXdhdGNoYCcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludERlc3RydWN0aXZlQ2hhbmdlcyhjaGFuZ2VzOiBEZXN0cnVjdGl2ZUNoYW5nZVtdKTogdm9pZCB7XG4gIGlmIChjaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICBsb2dnZXIud2FybmluZygnISEhIFRoaXMgdGVzdCBjb250YWlucyAlcyAhISEnLCBjaGFsay5ib2xkKCdkZXN0cnVjdGl2ZSBjaGFuZ2VzJykpO1xuICAgIGNoYW5nZXMuZm9yRWFjaChjaGFuZ2UgPT4ge1xuICAgICAgbG9nZ2VyLndhcm5pbmcoJyAgICBTdGFjazogJXMgLSBSZXNvdXJjZTogJXMgLSBJbXBhY3Q6ICVzJywgY2hhbmdlLnN0YWNrTmFtZSwgY2hhbmdlLmxvZ2ljYWxJZCwgY2hhbmdlLmltcGFjdCk7XG4gICAgfSk7XG4gICAgbG9nZ2VyLndhcm5pbmcoJyEhISBJZiB0aGVzZSBkZXN0cnVjdGl2ZSBjaGFuZ2VzIGFyZSBuZWNlc3NhcnksIHBsZWFzZSBpbmRpY2F0ZSB0aGlzIG9uIHRoZSBQUiAhISEnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludE1ldHJpY3MobWV0cmljczogSW50ZWdSdW5uZXJNZXRyaWNzW10pOiB2b2lkIHtcbiAgbG9nZ2VyLmhpZ2hsaWdodCgnICAgLS0tIEludGVncmF0aW9uIHRlc3QgbWV0cmljcyAtLS0nKTtcbiAgY29uc3Qgc29ydGVkTWV0cmljcyA9IG1ldHJpY3Muc29ydCgoYSwgYikgPT4gYS5kdXJhdGlvbiAtIGIuZHVyYXRpb24pO1xuICBzb3J0ZWRNZXRyaWNzLmZvckVhY2gobWV0cmljID0+IHtcbiAgICBsb2dnZXIucHJpbnQoJ1Byb2ZpbGUgJXMgKyBSZWdpb24gJXMgdG90YWwgdGltZTogJXMnLCBtZXRyaWMucHJvZmlsZSwgbWV0cmljLnJlZ2lvbiwgbWV0cmljLmR1cmF0aW9uKTtcbiAgICBjb25zdCBzb3J0ZWRUZXN0cyA9IE9iamVjdC5lbnRyaWVzKG1ldHJpYy50ZXN0cykuc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pO1xuICAgIHNvcnRlZFRlc3RzLmZvckVhY2godGVzdCA9PiBsb2dnZXIucHJpbnQoJyAgJXM6ICVzJywgdGVzdFswXSwgdGVzdFsxXSkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUcmFuc2xhdGUgYSBZYXJncyBpbnB1dCBhcnJheSB0byBzb21ldGhpbmcgdGhhdCBtYWtlcyBtb3JlIHNlbnNlIGluIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VcbiAqIG1vZGVsICh0ZWxsaW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYWJzZW5jZSBhbmQgYW4gZW1wdHkgYXJyYXkpXG4gKlxuICogLSBBbiBlbXB0eSBhcnJheSBpcyB0aGUgZGVmYXVsdCBjYXNlLCBtZWFuaW5nIHRoZSB1c2VyIGRpZG4ndCBwYXNzIGFueSBhcmd1bWVudHMuIFdlIHJldHVyblxuICogICB1bmRlZmluZWQuXG4gKiAtIElmIHRoZSB1c2VyIHBhc3NlZCBhIHNpbmdsZSBlbXB0eSBzdHJpbmcsIHRoZXkgZGlkIHNvbWV0aGluZyBsaWtlIGAtLWFycmF5PWAsIHdoaWNoIHdlJ2xsXG4gKiAgIHRha2UgdG8gbWVhbiB0aGV5IHBhc3NlZCBhbiBlbXB0eSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlGcm9tWWFyZ3MoeHM6IHN0cmluZ1tdKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICBpZiAoeHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4geHMuZmlsdGVyKHggPT4geCAhPT0gJycpO1xufVxuXG4vKipcbiAqIE1lcmdlIHRoZSB0ZXN0cyB3ZSByZWNlaXZlZCBmcm9tIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgd2l0aFxuICogdGVzdHMgdGhhdCBmYWlsZWQgc25hcHNob3QgdGVzdHMuIFRoZSBmYWlsZWQgc25hcHNob3QgdGVzdHMgaGF2ZSBhZGRpdGlvbmFsXG4gKiBpbmZvcm1hdGlvbiB0aGF0IHdlIHdhbnQgdG8ga2VlcCBzbyB0aGlzIHNob3VsZCBvdmVycmlkZSBhbnkgdGVzdCBmcm9tIGFyZ3NcbiAqL1xuZnVuY3Rpb24gbWVyZ2VUZXN0cyh0ZXN0RnJvbUFyZ3M6IEludGVnVGVzdEluZm9bXSwgZmFpbGVkU25hcHNob3RUZXN0czogSW50ZWdUZXN0V29ya2VyQ29uZmlnW10pOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSB7XG4gIGNvbnN0IGZhaWxlZFRlc3ROYW1lcyA9IG5ldyBTZXQoZmFpbGVkU25hcHNob3RUZXN0cy5tYXAodGVzdCA9PiB0ZXN0LmZpbGVOYW1lKSk7XG4gIGNvbnN0IGZpbmFsOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSA9IGZhaWxlZFNuYXBzaG90VGVzdHM7XG4gIGZpbmFsLnB1c2goLi4udGVzdEZyb21BcmdzLmZpbHRlcih0ZXN0ID0+ICFmYWlsZWRUZXN0TmFtZXMuaGFzKHRlc3QuZmlsZU5hbWUpKSk7XG4gIHJldHVybiBmaW5hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsaShhcmdzOiBzdHJpbmdbXSA9IHByb2Nlc3MuYXJndi5zbGljZSgyKSkge1xuICBtYWluKGFyZ3MpLnRoZW4oKS5jYXRjaCgoKSA9PiB7XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlYWQgQ0xJIG9wdGlvbnMgZnJvbSBhIGNvbmZpZyBmaWxlIGlmIHByb3ZpZGVkLlxuICpcbiAqIEByZXR1cm5zIHBhcnNlZCBDTEkgY29uZmlnIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gY29uZmlnRnJvbUZpbGUoZmlsZU5hbWU/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgaWYgKCFmaWxlTmFtZSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGZpbGVOYW1lLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGVuZ2luZUZyb21PcHRpb25zKG9wdGlvbnM6IHsgdW5zdGFibGU/OiBzdHJpbmdbXSB9KTogUmVxdWlyZWQ8RW5naW5lT3B0aW9ucz4ge1xuICBpZiAob3B0aW9ucy51bnN0YWJsZT8uaW5jbHVkZXMoJ2RlcHJlY2F0ZWQtY2xpLWVuZ2luZScpKSB7XG4gICAgbG9nZ2VyLndhcm5pbmcoJ1tEZXByZWNhdGlvbiBOb3RpY2VdIFlvdSBoYXZlIG9wdGVkLWluIHRvIHVzZSB0aGUgZGVwcmVjYXRlZCBDTEkgZW5naW5lIHdoaWNoIGlzIHNjaGVkdWxlZCB0byBiZSByZW1vdmVkIGluIEphbnVhcnkgMjAyNi4gSWYgeW91IGhhdmUgZW5jb3VudGVyZWQgYmxvY2tlcnMgd2hpbGUgdXNpbmcgdGhlIG5ldyBkZWZhdWx0IGVuZ2luZSwgcGxlYXNlIGxldCB1cyBrbm93IGJ5IG9wZW5pbmcgYW4gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay1jbGkvaXNzdWVzL25ldy9jaG9vc2VcXG5cXG5UbyB1c2UgdGhlIG5ldyBkZWZhdWx0IGVuZ2luZSwgcmVtb3ZlIHRoZSBgLS11bnN0YWJsZT1kZXByZWNhdGVkLWNsaS1lbmdpbmVgIG9wdGlvbi4nKTtcbiAgICByZXR1cm4geyBlbmdpbmU6ICdjbGktd3JhcHBlcicgfTtcbiAgfVxuICByZXR1cm4geyBlbmdpbmU6ICd0b29sa2l0LWxpYicgfTtcbn1cbiJdfQ==
310
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0JBLG9DQWlHQztBQUVELG9CQWNDO0FBc0xELGtCQUlDO0FBN1RELGdGQUFnRjtBQUNoRix5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLCtCQUErQjtBQUMvQix5Q0FBeUM7QUFDekMsbUNBQW1DO0FBR25DLGtFQUE4RDtBQUU5RCx1Q0FBa0U7QUFDbEUscUVBQW9FO0FBRXBFLDZDQUE2QztBQUM3QywrQ0FBK0M7QUFDL0MsaUVBQWlFO0FBQ2pFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUUvQixTQUFnQixZQUFZLENBQUMsT0FBaUIsRUFBRTtJQUM5QyxNQUFNLElBQUksR0FBRyxLQUFLO1NBQ2YsS0FBSyxDQUFDLCtCQUErQixDQUFDO1NBQ3RDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7UUFDaEIsTUFBTSxFQUFFLElBQUk7UUFDWixZQUFZLEVBQUUsY0FBYztRQUM1QixPQUFPLEVBQUUsbUJBQW1CO1FBQzVCLElBQUksRUFBRSx5RkFBeUY7S0FDaEcsQ0FBQztTQUNELE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLG1DQUFtQyxFQUFFLENBQUM7U0FDL0YsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsb0NBQW9DLEVBQUUsQ0FBQztTQUMvRixNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSw4RUFBOEUsRUFBRSxDQUFDO1NBQ3pJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVB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QWlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN4RCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtRQUMzQixPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUN2QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxjQUFjLENBQUMsUUFBaUI7SUFDdkMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsT0FBZ0M7SUFDekQsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7UUFDeEQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxxWEFBcVgsQ0FBQyxDQUFDO1FBQ3RZLE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUNELE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEV4ZXJjaXNlIGFsbCBpbnRlZyBzdGFja3MgYW5kIGlmIHRoZXkgZGVwbG95LCB1cGRhdGUgdGhlIGV4cGVjdGVkIHN5bnRoIGZpbGVzXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0ICogYXMgY2hhbGsgZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgd29ya2VycG9vbCBmcm9tICd3b3JrZXJwb29sJztcbmltcG9ydCAqIGFzIGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgdHlwZSB7IEVuZ2luZU9wdGlvbnMgfSBmcm9tICcuL3J1bm5lci9lbmdpbmUnO1xuaW1wb3J0IHR5cGUgeyBJbnRlZ1Rlc3QsIEludGVnVGVzdEluZm8gfSBmcm9tICcuL3J1bm5lci9pbnRlZ3JhdGlvbi10ZXN0cyc7XG5pbXBvcnQgeyBJbnRlZ3JhdGlvblRlc3RzIH0gZnJvbSAnLi9ydW5uZXIvaW50ZWdyYXRpb24tdGVzdHMnO1xuaW1wb3J0IHR5cGUgeyBJbnRlZ1J1bm5lck1ldHJpY3MsIEludGVnVGVzdFdvcmtlckNvbmZpZywgRGVzdHJ1Y3RpdmVDaGFuZ2UgfSBmcm9tICcuL3dvcmtlcnMnO1xuaW1wb3J0IHsgcnVuU25hcHNob3RUZXN0cywgcnVuSW50ZWdyYXRpb25UZXN0cyB9IGZyb20gJy4vd29ya2Vycyc7XG5pbXBvcnQgeyB3YXRjaEludGVncmF0aW9uVGVzdCB9IGZyb20gJy4vd29ya2Vycy9pbnRlZy13YXRjaC13b3JrZXInO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20veWFyZ3MveWFyZ3MvaXNzdWVzLzE5Mjlcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ldmFudy9lc2J1aWxkL2lzc3Vlcy8xNDkyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgeWFyZ3MgPSByZXF1aXJlKCd5YXJncycpO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDbGlBcmdzKGFyZ3M6IHN0cmluZ1tdID0gW10pIHtcbiAgY29uc3QgYXJndiA9IHlhcmdzXG4gICAgLnVzYWdlKCdVc2FnZTogaW50ZWctcnVubmVyIFtURVNULi4uXScpXG4gICAgLm9wdGlvbignY29uZmlnJywge1xuICAgICAgY29uZmlnOiB0cnVlLFxuICAgICAgY29uZmlnUGFyc2VyOiBjb25maWdGcm9tRmlsZSxcbiAgICAgIGRlZmF1bHQ6ICdpbnRlZy5jb25maWcuanNvbicsXG4gICAgICBkZXNjOiAnTG9hZCBvcHRpb25zIGZyb20gYSBKU09OIGNvbmZpZyBmaWxlLiBPcHRpb25zIHByb3ZpZGVkIGFzIENMSSBhcmd1bWVudHMgdGFrZSBwcmVjZWRlbnQuJyxcbiAgICB9KVxuICAgIC5vcHRpb24oJ3dhdGNoJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAnUGVyZm9ybSBpbnRlZyB0ZXN0cyBpbiB3YXRjaCBtb2RlJyB9KVxuICAgIC5vcHRpb24oJ2xpc3QnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdMaXN0IHRlc3RzIGluc3RlYWQgb2YgcnVubmluZyB0aGVtJyB9KVxuICAgIC5vcHRpb24oJ2NsZWFuJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IHRydWUsIGRlc2M6ICdDbGVhbiB1cCBhbmQgZGVsZXRlIHN0YWNrIGFmdGVyIHRlc3QgaXMgY29tcGxldGVkICh1c2UgLS1uby1jbGVhbiB0byBuZWdhdGUpJyB9KVxuICAgIC5vcHRpb24oJ3ZlcmJvc2UnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGFsaWFzOiAndicsIGNvdW50OiB0cnVlLCBkZXNjOiAnVmVyYm9zZSBsb2dzIGFuZCBtZXRyaWNzIG9uIGludGVncmF0aW9uIHRlc3RzIGR1cmF0aW9ucyAoc3BlY2lmeSBtdWx0aXBsZSB0aW1lcyB0byBpbmNyZWFzZSB2ZXJib3NpdHkpJyB9KVxuICAgIC5vcHRpb24oJ2RyeS1ydW4nLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdkbyBub3QgYWN0dWFsbHkgZGVwbG95IHRoZSBzdGFjay4ganVzdCB1cGRhdGUgdGhlIHNuYXBzaG90IChub3QgcmVjb21tZW5kZWQhKScgfSlcbiAgICAub3B0aW9uKCd1cGRhdGUtb24tZmFpbGVkJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlLCBkZXNjOiAncmVydW4gaW50ZWdyYXRpb24gdGVzdHMgYW5kIHVwZGF0ZSBzbmFwc2hvdHMgZm9yIGZhaWxlZCB0ZXN0cy4nIH0pXG4gICAgLm9wdGlvbignZm9yY2UnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdSZXJ1biBhbGwgaW50ZWdyYXRpb24gdGVzdHMgZXZlbiBpZiB0ZXN0cyBhcmUgcGFzc2luZycgfSlcbiAgICAub3B0aW9uKCdwYXJhbGxlbC1yZWdpb25zJywgeyB0eXBlOiAnYXJyYXknLCBkZXNjOiAnVGVzdHMgYXJlIHJ1biBpbiBwYXJhbGxlbCBhY3Jvc3MgdGhlc2UgcmVnaW9ucy4gVG8gcHJldmVudCB0ZXN0cyBmcm9tIHJ1bm5pbmcgaW4gcGFyYWxsZWwsIHByb3ZpZGUgb25seSBhIHNpbmdsZSByZWdpb24nLCBkZWZhdWx0OiBbXSB9KVxuICAgIC5vcHRpb25zKCdkaXJlY3RvcnknLCB7IHR5cGU6ICdzdHJpbmcnLCBkZWZhdWx0OiAndGVzdCcsIGRlc2M6ICdzdGFydGluZyBkaXJlY3RvcnkgdG8gZGlzY292ZXIgaW50ZWdyYXRpb24gdGVzdHMuIFRlc3RzIHdpbGwgYmUgZGlzY292ZXJlZCByZWN1cnNpdmVseSBmcm9tIHRoaXMgZGlyZWN0b3J5JyB9KVxuICAgIC5vcHRpb25zKCdwcm9maWxlcycsIHsgdHlwZTogJ2FycmF5JywgZGVzYzogJ2xpc3Qgb2YgQVdTIHByb2ZpbGVzIHRvIHVzZS4gVGVzdHMgd2lsbCBiZSBydW4gaW4gcGFyYWxsZWwgYWNyb3NzIGVhY2ggcHJvZmlsZStyZWdpb25zJywgZGVmYXVsdDogW10gfSlcbiAgICAub3B0aW9ucygnbWF4LXdvcmtlcnMnLCB7IHR5cGU6ICdudW1iZXInLCBkZXNjOiAnVGhlIG1heCBudW1iZXIgb2Ygd29ya2VycG9vbCB3b3JrZXJzIHRvIHVzZSB3aGVuIHJ1bm5pbmcgaW50ZWdyYXRpb24gdGVzdHMgaW4gcGFyYWxsZWwnLCBkZWZhdWx0OiAxNiB9KVxuICAgIC5vcHRpb25zKCdleGNsdWRlJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlc2M6ICdSdW4gYWxsIHRlc3RzIGluIHRoZSBkaXJlY3RvcnksIGV4Y2VwdCB0aGUgc3BlY2lmaWVkIFRFU1RzJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAub3B0aW9uKCdzdHJpY3QnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UsIGRlc2M6ICdGYWlsIGlmIGFueSBzcGVjaWZpZWQgdGVzdHMgYXJlIG5vdCBmb3VuZCcgfSlcbiAgICAub3B0aW9ucygnZnJvbS1maWxlJywgeyB0eXBlOiAnc3RyaW5nJywgZGVzYzogJ1JlYWQgVEVTVCBuYW1lcyBmcm9tIGEgZmlsZSAob25lIFRFU1QgcGVyIGxpbmUpJyB9KVxuICAgIC5vcHRpb24oJ2luc3BlY3QtZmFpbHVyZXMnLCB7IHR5cGU6ICdib29sZWFuJywgZGVzYzogJ0tlZXAgdGhlIGludGVnIHRlc3QgY2xvdWQgYXNzZW1ibHkgaWYgYSBmYWlsdXJlIG9jY3VycyBmb3IgaW5zcGVjdGlvbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgLm9wdGlvbignZGlzYWJsZS11cGRhdGUtd29ya2Zsb3cnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogdW5kZWZpbmVkLCBkZXNjOiAnREVQUkVDQVRFRCwgdXNlIC0tW25vXS11cGRhdGUtd29ya2Zsb3cgaW5zdGVhZCcgfSlcbiAgICAub3B0aW9uKCd1cGRhdGUtd29ya2Zsb3cnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogdW5kZWZpbmVkLCBkZXNjOiAnRGVwbG95cyB0aGUgY29tbWl0dGVkIHNuYXBzaG90IGJlZm9yZSB0aGUgdXBkYXRlZCBhcHBsaWNhdGlvbi4gT25seSB3b3JrcyBpZiBzbmFwc2hvdHMgYXJlIHJlZ2lvbi1hZ25vc3RpYy4nIH0pXG4gICAgLm9wdGlvbignbGFuZ3VhZ2UnLCB7XG4gICAgICBhbGlhczogJ2wnLFxuICAgICAgZGVmYXVsdDogWydqYXZhc2NyaXB0JywgJ3R5cGVzY3JpcHQnLCAncHl0aG9uJywgJ2dvJ10sXG4gICAgICBjaG9pY2VzOiBbJ2phdmFzY3JpcHQnLCAndHlwZXNjcmlwdCcsICdweXRob24nLCAnZ28nXSxcbiAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICBuYXJnczogMSxcbiAgICAgIGRlc2M6ICdVc2UgdGhlc2UgcHJlc2V0cyB0byBydW4gaW50ZWdyYXRpb24gdGVzdHMgZm9yIHRoZSBzZWxlY3RlZCBsYW5ndWFnZXMnLFxuICAgIH0pXG4gICAgLm9wdGlvbignYXBwJywgeyB0eXBlOiAnc3RyaW5nJywgZGVmYXVsdDogdW5kZWZpbmVkLCBkZXNjOiAnVGhlIGN1c3RvbSBDTEkgY29tbWFuZCB0aGF0IHdpbGwgYmUgdXNlZCB0byBydW4gdGhlIHRlc3QgZmlsZXMuIFlvdSBjYW4gaW5jbHVkZSB7ZmlsZVBhdGh9IHRvIHNwZWNpZnkgd2hlcmUgaW4gdGhlIGNvbW1hbmQgdGhlIHRlc3QgZmlsZSBwYXRoIHNob3VsZCBiZSBpbnNlcnRlZC4gRXhhbXBsZTogLS1hcHA9XCJweXRob24zLjgge2ZpbGVQYXRofVwiLicgfSlcbiAgICAub3B0aW9uKCd0ZXN0LXJlZ2V4JywgeyB0eXBlOiAnYXJyYXknLCBkZXNjOiAnRGV0ZWN0IGludGVncmF0aW9uIHRlc3QgZmlsZXMgbWF0Y2hpbmcgdGhpcyBKYXZhU2NyaXB0IHJlZ2V4IHBhdHRlcm4uIElmIHVzZWQgbXVsdGlwbGUgdGltZXMsIGFsbCBmaWxlcyBtYXRjaGluZyBhbnkgb25lIG9mIHRoZSBwYXR0ZXJucyBhcmUgZGV0ZWN0ZWQuJywgZGVmYXVsdDogW10gfSlcbiAgICAub3B0aW9uKCd1bnN0YWJsZScsIHsgdHlwZTogJ2FycmF5JywgZGVzYzogJ09wdC1pbiB0byB1c2luZyB1bnN0YWJsZSBmZWF0dXJlcy4gQnkgdXNpbmcgdGhlc2UgZmxhZ3MgeW91IGFja25vd2xlZGdlcyB0aGF0IHNjb3BlIGFuZCBBUElzIG9mIHVuc3RhYmxlIGZlYXR1cmVzIG1heSBjaGFuZ2Ugd2l0aG91dCBub3RpY2UuIFNwZWNpZnkgbXVsdGlwbGUgdGltZXMgZm9yIGVhY2ggdW5zdGFibGUgZmVhdHVyZSB5b3Ugd2FudCB0byBvcHQtaW4gdG8uJywgbmFyZ3M6IDEsIGNob2ljZXM6IFsndG9vbGtpdC1saWItZW5naW5lJywgJ2RlcHJlY2F0ZWQtY2xpLWVuZ2luZSddLCBkZWZhdWx0OiBbXSB9KVxuICAgIC5zdHJpY3QoKVxuICAgIC5wYXJzZShhcmdzKTtcblxuICBjb25zdCB0ZXN0czogc3RyaW5nW10gPSBhcmd2Ll87XG4gIGNvbnN0IHBhcmFsbGVsUmVnaW9ucyA9IGFycmF5RnJvbVlhcmdzKGFyZ3ZbJ3BhcmFsbGVsLXJlZ2lvbnMnXSk7XG4gIGNvbnN0IHRlc3RSZWdpb25zOiBzdHJpbmdbXSA9IHBhcmFsbGVsUmVnaW9ucyA/PyBbJ3VzLWVhc3QtMScsICd1cy1lYXN0LTInLCAndXMtd2VzdC0yJ107XG4gIGNvbnN0IHByb2ZpbGVzID0gYXJyYXlGcm9tWWFyZ3MoYXJndi5wcm9maWxlcyk7XG4gIGNvbnN0IGZyb21GaWxlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBhcmd2Wydmcm9tLWZpbGUnXTtcbiAgY29uc3QgbWF4V29ya2VyczogbnVtYmVyID0gYXJndlsnbWF4LXdvcmtlcnMnXTtcbiAgY29uc3QgdmVyYm9zaXR5OiBudW1iZXIgPSBhcmd2LnZlcmJvc2U7XG4gIGNvbnN0IHZlcmJvc2U6IGJvb2xlYW4gPSB2ZXJib3NpdHkgPj0gMTtcblxuICBjb25zdCBudW1UZXN0cyA9IHRlc3RSZWdpb25zLmxlbmd0aCAqIChwcm9maWxlcyA/PyBbMV0pLmxlbmd0aDtcbiAgaWYgKG1heFdvcmtlcnMgPCBudW1UZXN0cykge1xuICAgIGxvZ2dlci53YXJuaW5nKCdZb3UgYXJlIGF0dGVtcHRpbmcgdG8gcnVuICVzIHRlc3RzIGluIHBhcmFsbGVsLCBidXQgb25seSBoYXZlICVzIHdvcmtlcnMuIE5vdCBhbGwgb2YgeW91ciBwcm9maWxlcytyZWdpb25zIHdpbGwgYmUgdXRpbGl6ZWQnLCBudW1UZXN0cywgbWF4V29ya2Vycyk7XG4gIH1cblxuICBpZiAodGVzdHMubGVuZ3RoID4gMCAmJiBmcm9tRmlsZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQSBsaXN0IG9mIHRlc3RzIGNhbm5vdCBiZSBwcm92aWRlZCBpZiBcIi0tZnJvbS1maWxlXCIgaXMgcHJvdmlkZWQnKTtcbiAgfVxuXG4gIGlmIChhcmd2LnN0cmljdCAmJiBhcmd2LmV4Y2x1ZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCB1c2UgLS1zdHJpY3Qgd2l0aCAtLWV4Y2x1ZGUnKTtcbiAgfVxuXG4gIGNvbnN0IHJlcXVlc3RlZFRlc3RzID0gZnJvbUZpbGVcbiAgICA/IChmcy5yZWFkRmlsZVN5bmMoZnJvbUZpbGUsIHsgZW5jb2Rpbmc6ICd1dGY4JyB9KSkuc3BsaXQoJ1xcbicpLmZpbHRlcih4ID0+IHgpXG4gICAgOiAodGVzdHMubGVuZ3RoID4gMCA/IHRlc3RzIDogdW5kZWZpbmVkKTsgLy8gJ3VuZGVmaW5lZCcgbWVhbnMgbm8gcmVxdWVzdFxuXG4gIGlmIChhcmd2WydkaXNhYmxlLXVwZGF0ZS13b3JrZmxvdyddICE9PSB1bmRlZmluZWQgJiYgYXJndlsndXBkYXRlLXdvcmtmbG93J10gIT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignLS1kaXNhYmxlLXVwZGF0ZS13b3JrZmxvdyBhbmQgLS1bbm8tXXVwZGF0ZS13b3JrZmxvdyBjYW5ub3QgYmUgdXNlZCB0b2dldGhlcicpO1xuICB9XG5cbiAgbGV0IHVwZGF0ZVdvcmtmbG93ID0gYXJndlsndXBkYXRlLXdvcmtmbG93J10gIT09IHVuZGVmaW5lZCA/ICEhYXJndlsndXBkYXRlLXdvcmtmbG93J10gOiAhYXJndlsnZGlzYWJsZS11cGRhdGUtd29ya2Zsb3cnXTtcblxuICByZXR1cm4ge1xuICAgIHRlc3RzOiByZXF1ZXN0ZWRUZXN0cyxcbiAgICBhcHA6IGFyZ3YuYXBwIGFzIChzdHJpbmcgfCB1bmRlZmluZWQpLFxuICAgIHRlc3RSZWdleDogYXJyYXlGcm9tWWFyZ3MoYXJndlsndGVzdC1yZWdleCddKSxcbiAgICB0ZXN0UmVnaW9ucyxcbiAgICBvcmlnaW5hbFJlZ2lvbnM6IHBhcmFsbGVsUmVnaW9ucyxcbiAgICBwcm9maWxlcyxcbiAgICBydW5VcGRhdGVPbkZhaWxlZDogKGFyZ3ZbJ3VwZGF0ZS1vbi1mYWlsZWQnXSA/PyBmYWxzZSkgYXMgYm9vbGVhbixcbiAgICBmcm9tRmlsZSxcbiAgICBleGNsdWRlOiBhcmd2LmV4Y2x1ZGUgYXMgYm9vbGVhbixcbiAgICBtYXhXb3JrZXJzLFxuICAgIGxpc3Q6IGFyZ3YubGlzdCBhcyBib29sZWFuLFxuICAgIGRpcmVjdG9yeTogYXJndi5kaXJlY3RvcnkgYXMgc3RyaW5nLFxuICAgIGluc3BlY3RGYWlsdXJlczogYXJndlsnaW5zcGVjdC1mYWlsdXJlcyddIGFzIGJvb2xlYW4sXG4gICAgdmVyYm9zaXR5LFxuICAgIHZlcmJvc2UsXG4gICAgY2xlYW46IGFyZ3YuY2xlYW4gYXMgYm9vbGVhbixcbiAgICBmb3JjZTogYXJndi5mb3JjZSBhcyBib29sZWFuLFxuICAgIGRyeVJ1bjogYXJndlsnZHJ5LXJ1biddIGFzIGJvb2xlYW4sXG4gICAgdXBkYXRlV29ya2Zsb3csXG4gICAgbGFuZ3VhZ2U6IGFycmF5RnJvbVlhcmdzKGFyZ3YubGFuZ3VhZ2UpLFxuICAgIHdhdGNoOiBhcmd2LndhdGNoIGFzIGJvb2xlYW4sXG4gICAgc3RyaWN0OiBhcmd2LnN0cmljdCBhcyBib29sZWFuLFxuICAgIHVuc3RhYmxlOiBhcnJheUZyb21ZYXJncyhhcmd2LnVuc3RhYmxlKSA/PyBbXSxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4oYXJnczogc3RyaW5nW10pIHtcbiAgbGV0IGVuZ2luZUZvckVycm9yO1xuICB0cnkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBwYXJzZUNsaUFyZ3MoYXJncyk7XG4gICAgY29uc3QgZW5naW5lID0gZW5naW5lRnJvbU9wdGlvbnMob3B0aW9ucyk7XG4gICAgZW5naW5lRm9yRXJyb3IgPSBlbmdpbmUuZW5naW5lO1xuICAgIGF3YWl0IHJ1bihvcHRpb25zLCBlbmdpbmUpO1xuICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgIGxvZ2dlci5lcnJvcihlcnIpO1xuICAgIGlmIChlbmdpbmVGb3JFcnJvciA9PT0gJ3Rvb2xraXQtbGliJykge1xuICAgICAgbG9nZ2VyLndhcm5pbmcoJ1xcbltOb3RpY2VdIFlvdSBhcmUgdXNpbmcgdGhlIG5ldyBkZWZhdWx0IGVuZ2luZSB0byBydW4gaW50ZWdyYXRpb24gdGVzdHMuIElmIHlvdSB0aGluayB0aGUgYWJvdmUgZmFpbHVyZSBoYXMgYmVlbiBjYXVzZWQgYnkgdGhlIG5ldyBlbmdpbmUsIHlvdSBtYXkgY2hvb3NlIHRvIHRlbXBvcmFyaWx5IHJldmVydCB0byB0aGUgb2xkIGVuZ2luZSBieSBhZGRpbmcgdGhlIGAtLXVuc3RhYmxlPWRlcHJlY2F0ZWQtY2xpLWVuZ2luZWAgb3B0aW9uLiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgZW5naW5lIGlzIGRlcHJlY2F0ZWQgYW5kIHNjaGVkdWxlZCB0byBiZSByZW1vdmVkIGluIEphbnVhcnkgMjAyNi5cXG5cXG5JZiByZXZlcnRpbmcgdG8gdGhlIG9sZCBlbmdpbmUgcmVzb2x2ZXMgYW4gaXNzdWUgZm9yIHlvdSwgcGxlYXNlIGxldCB1cyBrbm93IHNvIHdlIGNhbiBhZGRyZXNzIHRoaXMgaW4gdGhlIG5ldyBlbmdpbmUuIFJlcG9ydCBpc3N1ZXMgaGVyZTogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrLWNsaS9pc3N1ZXMvbmV3L2Nob29zZScpO1xuICAgIH1cbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuKG9wdGlvbnM6IFJldHVyblR5cGU8dHlwZW9mIHBhcnNlQ2xpQXJncz4sIHsgZW5naW5lIH06IEVuZ2luZU9wdGlvbnMpIHtcbiAgY29uc3QgdGVzdHNGcm9tQXJncyA9IGF3YWl0IG5ldyBJbnRlZ3JhdGlvblRlc3RzKHBhdGgucmVzb2x2ZShvcHRpb25zLmRpcmVjdG9yeSkpLmZyb21DbGlPcHRpb25zKG9wdGlvbnMpO1xuXG4gIC8vIExpc3Qgb25seSBwcmludHMgdGhlIGRpc2NvdmVyZWQgdGVzdHNcbiAgaWYgKG9wdGlvbnMubGlzdCkge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHRlc3RzRnJvbUFyZ3MubWFwKHQgPT4gdC5kaXNjb3ZlcnlSZWxhdGl2ZUZpbGVOYW1lKS5qb2luKCdcXG4nKSArICdcXG4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwb29sID0gd29ya2VycG9vbC5wb29sKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICdsaWInLCAnd29ya2VycycsICdleHRyYWN0JywgJ2luZGV4LmpzJyksIHtcbiAgICBtYXhXb3JrZXJzOiBvcHRpb25zLndhdGNoID8gMSA6IG9wdGlvbnMubWF4V29ya2VycyxcbiAgfSk7XG5cbiAgY29uc3QgdGVzdHNUb1J1bjogSW50ZWdUZXN0V29ya2VyQ29uZmlnW10gPSBbXTtcbiAgbGV0IGRlc3RydWN0aXZlQ2hhbmdlczogYm9vbGVhbiA9IGZhbHNlO1xuICBsZXQgZmFpbGVkU25hcHNob3RzOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSA9IFtdO1xuICBsZXQgdGVzdHNTdWNjZWVkZWQgPSBmYWxzZTtcbiAgdmFsaWRhdGVXYXRjaEFyZ3Moe1xuICAgIC4uLm9wdGlvbnMsXG4gICAgdGVzdFJlZ2lvbnM6IG9wdGlvbnMub3JpZ2luYWxSZWdpb25zLFxuICAgIHRlc3RzOiB0ZXN0c0Zyb21BcmdzLFxuICB9KTtcblxuICB0cnkge1xuICAgIGlmICghb3B0aW9ucy53YXRjaCkge1xuICAgICAgLy8gYWx3YXlzIHJ1biBzbmFwc2hvdCB0ZXN0cywgYnV0IGlmICctLWZvcmNlJyBpcyBwYXNzZWQgdGhlblxuICAgICAgLy8gcnVuIGludGVncmF0aW9uIHRlc3RzIG9uIGFsbCBmYWlsZWQgdGVzdHMsIG5vdCBqdXN0IHRob3NlIHRoYXRcbiAgICAgIC8vIGZhaWxlZCBzbmFwc2hvdCB0ZXN0c1xuICAgICAgZmFpbGVkU25hcHNob3RzID0gYXdhaXQgcnVuU25hcHNob3RUZXN0cyhwb29sLCB0ZXN0c0Zyb21BcmdzLCB7XG4gICAgICAgIHJldGFpbjogb3B0aW9ucy5pbnNwZWN0RmFpbHVyZXMsXG4gICAgICAgIHZlcmJvc2U6IG9wdGlvbnMudmVyYm9zZSxcbiAgICAgICAgZW5naW5lLFxuICAgICAgfSk7XG4gICAgICBmb3IgKGNvbnN0IGZhaWx1cmUgb2YgZmFpbGVkU25hcHNob3RzKSB7XG4gICAgICAgIGxvZ2dlci53YXJuaW5nKGBGYWlsZWQ6ICR7ZmFpbHVyZS5maWxlTmFtZX1gKTtcbiAgICAgICAgaWYgKGZhaWx1cmUuZGVzdHJ1Y3RpdmVDaGFuZ2VzICYmIGZhaWx1cmUuZGVzdHJ1Y3RpdmVDaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwcmludERlc3RydWN0aXZlQ2hhbmdlcyhmYWlsdXJlLmRlc3RydWN0aXZlQ2hhbmdlcyk7XG4gICAgICAgICAgZGVzdHJ1Y3RpdmVDaGFuZ2VzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFvcHRpb25zLmZvcmNlKSB7XG4gICAgICAgIHRlc3RzVG9SdW4ucHVzaCguLi5mYWlsZWRTbmFwc2hvdHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgYW55IG9mIHRoZSB0ZXN0IGZhaWxlZCBzbmFwc2hvdCB0ZXN0cywga2VlcCB0aG9zZSByZXN1bHRzXG4gICAgICAgIC8vIGFuZCBtZXJnZSB3aXRoIHRoZSByZXN0IG9mIHRoZSB0ZXN0cyBmcm9tIGFyZ3NcbiAgICAgICAgdGVzdHNUb1J1bi5wdXNoKC4uLm1lcmdlVGVzdHModGVzdHNGcm9tQXJncy5tYXAodCA9PiB0LmluZm8pLCBmYWlsZWRTbmFwc2hvdHMpKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGVzdHNUb1J1bi5wdXNoKC4uLnRlc3RzRnJvbUFyZ3MubWFwKHQgPT4gdC5pbmZvKSk7XG4gICAgfVxuXG4gICAgLy8gcnVuIGludGVncmF0aW9uIHRlc3RzIGlmIGAtLXVwZGF0ZS1vbi1mYWlsZWRgIE9SIGAtLWZvcmNlYCBpcyB1c2VkXG4gICAgaWYgKG9wdGlvbnMucnVuVXBkYXRlT25GYWlsZWQgfHwgb3B0aW9ucy5mb3JjZSkge1xuICAgICAgY29uc3QgeyBzdWNjZXNzLCBtZXRyaWNzIH0gPSBhd2FpdCBydW5JbnRlZ3JhdGlvblRlc3RzKHtcbiAgICAgICAgcG9vbCxcbiAgICAgICAgZW5naW5lLFxuICAgICAgICB0ZXN0czogdGVzdHNUb1J1bixcbiAgICAgICAgcmVnaW9uczogb3B0aW9ucy50ZXN0UmVnaW9ucyxcbiAgICAgICAgcHJvZmlsZXM6IG9wdGlvbnMucHJvZmlsZXMsXG4gICAgICAgIGNsZWFuOiBvcHRpb25zLmNsZWFuLFxuICAgICAgICBkcnlSdW46IG9wdGlvbnMuZHJ5UnVuLFxuICAgICAgICB2ZXJib3NpdHk6IG9wdGlvbnMudmVyYm9zaXR5LFxuICAgICAgICB1cGRhdGVXb3JrZmxvdzogb3B0aW9ucy51cGRhdGVXb3JrZmxvdyxcbiAgICAgICAgd2F0Y2g6IG9wdGlvbnMud2F0Y2gsXG4gICAgICB9KTtcbiAgICAgIHRlc3RzU3VjY2VlZGVkID0gc3VjY2VzcztcblxuICAgICAgaWYgKG9wdGlvbnMuY2xlYW4gPT09IGZhbHNlKSB7XG4gICAgICAgIGxvZ2dlci53YXJuaW5nKCdOb3QgY2xlYW5pbmcgdXAgc3RhY2tzIHNpbmNlIFwiLS1uby1jbGVhblwiIHdhcyB1c2VkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChCb29sZWFuKG9wdGlvbnMudmVyYm9zZSkpIHtcbiAgICAgICAgcHJpbnRNZXRyaWNzKG1ldHJpY3MpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTb21lIGludGVncmF0aW9uIHRlc3RzIGZhaWxlZCEnKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMud2F0Y2gpIHtcbiAgICAgIGF3YWl0IHdhdGNoSW50ZWdyYXRpb25UZXN0KHBvb2wsIHtcbiAgICAgICAgd2F0Y2g6IHRydWUsXG4gICAgICAgIGVuZ2luZSxcbiAgICAgICAgdmVyYm9zaXR5OiBvcHRpb25zLnZlcmJvc2l0eSxcbiAgICAgICAgLi4udGVzdHNUb1J1blswXSxcbiAgICAgICAgcHJvZmlsZTogb3B0aW9ucy5wcm9maWxlcyA/IG9wdGlvbnMucHJvZmlsZXNbMF0gOiB1bmRlZmluZWQsXG4gICAgICAgIHJlZ2lvbjogb3B0aW9ucy50ZXN0UmVnaW9uc1swXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICB2b2lkIHBvb2wudGVybWluYXRlKCk7XG4gIH1cblxuICBpZiAoZGVzdHJ1Y3RpdmVDaGFuZ2VzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTb21lIGNoYW5nZXMgd2VyZSBkZXN0cnVjdGl2ZSEnKTtcbiAgfVxuICBpZiAoZmFpbGVkU25hcHNob3RzLmxlbmd0aCA+IDApIHtcbiAgICBsZXQgbWVzc2FnZSA9ICcnO1xuICAgIGlmICghb3B0aW9ucy5ydW5VcGRhdGVPbkZhaWxlZCkge1xuICAgICAgbWVzc2FnZSA9ICdUbyByZS1ydW4gZmFpbGVkIHRlc3RzIHJ1bjogaW50ZWctcnVubmVyIC0tdXBkYXRlLW9uLWZhaWxlZCc7XG4gICAgfVxuICAgIGlmICghdGVzdHNTdWNjZWVkZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU29tZSB0ZXN0cyBmYWlsZWQhXFxuJHttZXNzYWdlfWApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVdhdGNoQXJncyhhcmdzOiB7XG4gIHRlc3RzOiBJbnRlZ1Rlc3RbXTtcbiAgdGVzdFJlZ2lvbnM/OiBzdHJpbmdbXTtcbiAgcHJvZmlsZXM/OiBzdHJpbmdbXTtcbiAgbWF4V29ya2VyczogbnVtYmVyO1xuICBmb3JjZTogYm9vbGVhbjtcbiAgZHJ5UnVuOiBib29sZWFuO1xuICB1cGRhdGVXb3JrZmxvdzogYm9vbGVhbjtcbiAgcnVuVXBkYXRlT25GYWlsZWQ6IGJvb2xlYW47XG4gIHdhdGNoOiBib29sZWFuO1xufSkge1xuICBpZiAoYXJncy53YXRjaCkge1xuICAgIGlmIChcbiAgICAgIChhcmdzLnRlc3RSZWdpb25zICYmIGFyZ3MudGVzdFJlZ2lvbnMubGVuZ3RoID4gMSlcbiAgICAgICAgfHwgKGFyZ3MucHJvZmlsZXMgJiYgYXJncy5wcm9maWxlcy5sZW5ndGggPiAxKVxuICAgICAgICB8fCBhcmdzLnRlc3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUnVubmluZyB3aXRoIHdhdGNoIG9ubHkgc3VwcG9ydHMgYSBzaW5nbGUgdGVzdC4gT25seSBwcm92aWRlIGEgc2luZ2xlIG9wdGlvbicrXG4gICAgICAgICd0byBgLS1wcm9maWxlc2AgYC0tcGFyYWxsZWwtcmVnaW9uc2AgYC0tbWF4LXdvcmtlcnMnKTtcbiAgICB9XG5cbiAgICBpZiAoYXJncy5ydW5VcGRhdGVPbkZhaWxlZCB8fCBhcmdzLnVwZGF0ZVdvcmtmbG93IHx8IGFyZ3MuZm9yY2UgfHwgYXJncy5kcnlSdW4pIHtcbiAgICAgIGxvZ2dlci53YXJuaW5nKCdhcmdzIGAtLXVwZGF0ZS1vbi1mYWlsZWRgLCBgLS11cGRhdGUtd29ya2Zsb3dgLCBgLS1mb3JjZWAsIGAtLWRyeS1ydW5gIGhhdmUgbm8gZWZmZWN0IHdoZW4gcnVubmluZyB3aXRoIGAtLXdhdGNoYCcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludERlc3RydWN0aXZlQ2hhbmdlcyhjaGFuZ2VzOiBEZXN0cnVjdGl2ZUNoYW5nZVtdKTogdm9pZCB7XG4gIGlmIChjaGFuZ2VzLmxlbmd0aCA+IDApIHtcbiAgICBsb2dnZXIud2FybmluZygnISEhIFRoaXMgdGVzdCBjb250YWlucyAlcyAhISEnLCBjaGFsay5ib2xkKCdkZXN0cnVjdGl2ZSBjaGFuZ2VzJykpO1xuICAgIGNoYW5nZXMuZm9yRWFjaChjaGFuZ2UgPT4ge1xuICAgICAgbG9nZ2VyLndhcm5pbmcoJyAgICBTdGFjazogJXMgLSBSZXNvdXJjZTogJXMgLSBJbXBhY3Q6ICVzJywgY2hhbmdlLnN0YWNrTmFtZSwgY2hhbmdlLmxvZ2ljYWxJZCwgY2hhbmdlLmltcGFjdCk7XG4gICAgfSk7XG4gICAgbG9nZ2VyLndhcm5pbmcoJyEhISBJZiB0aGVzZSBkZXN0cnVjdGl2ZSBjaGFuZ2VzIGFyZSBuZWNlc3NhcnksIHBsZWFzZSBpbmRpY2F0ZSB0aGlzIG9uIHRoZSBQUiAhISEnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludE1ldHJpY3MobWV0cmljczogSW50ZWdSdW5uZXJNZXRyaWNzW10pOiB2b2lkIHtcbiAgbG9nZ2VyLmhpZ2hsaWdodCgnICAgLS0tIEludGVncmF0aW9uIHRlc3QgbWV0cmljcyAtLS0nKTtcbiAgY29uc3Qgc29ydGVkTWV0cmljcyA9IG1ldHJpY3Muc29ydCgoYSwgYikgPT4gYS5kdXJhdGlvbiAtIGIuZHVyYXRpb24pO1xuICBzb3J0ZWRNZXRyaWNzLmZvckVhY2gobWV0cmljID0+IHtcbiAgICBsb2dnZXIucHJpbnQoJ1Byb2ZpbGUgJXMgKyBSZWdpb24gJXMgdG90YWwgdGltZTogJXMnLCBtZXRyaWMucHJvZmlsZSwgbWV0cmljLnJlZ2lvbiwgbWV0cmljLmR1cmF0aW9uKTtcbiAgICBjb25zdCBzb3J0ZWRUZXN0cyA9IE9iamVjdC5lbnRyaWVzKG1ldHJpYy50ZXN0cykuc29ydCgoYSwgYikgPT4gYVsxXSAtIGJbMV0pO1xuICAgIHNvcnRlZFRlc3RzLmZvckVhY2godGVzdCA9PiBsb2dnZXIucHJpbnQoJyAgJXM6ICVzJywgdGVzdFswXSwgdGVzdFsxXSkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUcmFuc2xhdGUgYSBZYXJncyBpbnB1dCBhcnJheSB0byBzb21ldGhpbmcgdGhhdCBtYWtlcyBtb3JlIHNlbnNlIGluIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VcbiAqIG1vZGVsICh0ZWxsaW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYWJzZW5jZSBhbmQgYW4gZW1wdHkgYXJyYXkpXG4gKlxuICogLSBBbiBlbXB0eSBhcnJheSBpcyB0aGUgZGVmYXVsdCBjYXNlLCBtZWFuaW5nIHRoZSB1c2VyIGRpZG4ndCBwYXNzIGFueSBhcmd1bWVudHMuIFdlIHJldHVyblxuICogICB1bmRlZmluZWQuXG4gKiAtIElmIHRoZSB1c2VyIHBhc3NlZCBhIHNpbmdsZSBlbXB0eSBzdHJpbmcsIHRoZXkgZGlkIHNvbWV0aGluZyBsaWtlIGAtLWFycmF5PWAsIHdoaWNoIHdlJ2xsXG4gKiAgIHRha2UgdG8gbWVhbiB0aGV5IHBhc3NlZCBhbiBlbXB0eSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlGcm9tWWFyZ3MoeHM6IHN0cmluZ1tdKTogc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICBpZiAoeHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4geHMuZmlsdGVyKHggPT4geCAhPT0gJycpO1xufVxuXG4vKipcbiAqIE1lcmdlIHRoZSB0ZXN0cyB3ZSByZWNlaXZlZCBmcm9tIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgd2l0aFxuICogdGVzdHMgdGhhdCBmYWlsZWQgc25hcHNob3QgdGVzdHMuIFRoZSBmYWlsZWQgc25hcHNob3QgdGVzdHMgaGF2ZSBhZGRpdGlvbmFsXG4gKiBpbmZvcm1hdGlvbiB0aGF0IHdlIHdhbnQgdG8ga2VlcCBzbyB0aGlzIHNob3VsZCBvdmVycmlkZSBhbnkgdGVzdCBmcm9tIGFyZ3NcbiAqL1xuZnVuY3Rpb24gbWVyZ2VUZXN0cyh0ZXN0RnJvbUFyZ3M6IEludGVnVGVzdEluZm9bXSwgZmFpbGVkU25hcHNob3RUZXN0czogSW50ZWdUZXN0V29ya2VyQ29uZmlnW10pOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSB7XG4gIGNvbnN0IGZhaWxlZFRlc3ROYW1lcyA9IG5ldyBTZXQoZmFpbGVkU25hcHNob3RUZXN0cy5tYXAodGVzdCA9PiB0ZXN0LmZpbGVOYW1lKSk7XG4gIGNvbnN0IGZpbmFsOiBJbnRlZ1Rlc3RXb3JrZXJDb25maWdbXSA9IGZhaWxlZFNuYXBzaG90VGVzdHM7XG4gIGZpbmFsLnB1c2goLi4udGVzdEZyb21BcmdzLmZpbHRlcih0ZXN0ID0+ICFmYWlsZWRUZXN0TmFtZXMuaGFzKHRlc3QuZmlsZU5hbWUpKSk7XG4gIHJldHVybiBmaW5hbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsaShhcmdzOiBzdHJpbmdbXSA9IHByb2Nlc3MuYXJndi5zbGljZSgyKSkge1xuICBtYWluKGFyZ3MpLnRoZW4oKS5jYXRjaCgoKSA9PiB7XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlYWQgQ0xJIG9wdGlvbnMgZnJvbSBhIGNvbmZpZyBmaWxlIGlmIHByb3ZpZGVkLlxuICpcbiAqIEByZXR1cm5zIHBhcnNlZCBDTEkgY29uZmlnIG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gY29uZmlnRnJvbUZpbGUoZmlsZU5hbWU/OiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgaWYgKCFmaWxlTmFtZSkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGZpbGVOYW1lLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGVuZ2luZUZyb21PcHRpb25zKG9wdGlvbnM6IHsgdW5zdGFibGU/OiBzdHJpbmdbXSB9KTogUmVxdWlyZWQ8RW5naW5lT3B0aW9ucz4ge1xuICBpZiAob3B0aW9ucy51bnN0YWJsZT8uaW5jbHVkZXMoJ2RlcHJlY2F0ZWQtY2xpLWVuZ2luZScpKSB7XG4gICAgbG9nZ2VyLndhcm5pbmcoJ1tEZXByZWNhdGlvbiBOb3RpY2VdIFlvdSBoYXZlIG9wdGVkLWluIHRvIHVzZSB0aGUgZGVwcmVjYXRlZCBDTEkgZW5naW5lIHdoaWNoIGlzIHNjaGVkdWxlZCB0byBiZSByZW1vdmVkIGluIEphbnVhcnkgMjAyNi4gSWYgeW91IGhhdmUgZW5jb3VudGVyZWQgYmxvY2tlcnMgd2hpbGUgdXNpbmcgdGhlIG5ldyBkZWZhdWx0IGVuZ2luZSwgcGxlYXNlIGxldCB1cyBrbm93IGJ5IG9wZW5pbmcgYW4gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay1jbGkvaXNzdWVzL25ldy9jaG9vc2VcXG5cXG5UbyB1c2UgdGhlIG5ldyBkZWZhdWx0IGVuZ2luZSwgcmVtb3ZlIHRoZSBgLS11bnN0YWJsZT1kZXByZWNhdGVkLWNsaS1lbmdpbmVgIG9wdGlvbi4nKTtcbiAgICByZXR1cm4geyBlbmdpbmU6ICdjbGktd3JhcHBlcicgfTtcbiAgfVxuICByZXR1cm4geyBlbmdpbmU6ICd0b29sa2l0LWxpYicgfTtcbn1cbiJdfQ==
@@ -21,6 +21,10 @@ export interface ToolkitLibEngineOptions {
21
21
  * @default false
22
22
  */
23
23
  readonly showOutput?: boolean;
24
+ /**
25
+ * The region the CDK app should synthesize itself for
26
+ */
27
+ readonly region: string;
24
28
  }
25
29
  /**
26
30
  * A runner engine powered directly by the toolkit-lib
@@ -29,6 +33,7 @@ export declare class ToolkitLibRunnerEngine implements ICdk {
29
33
  private readonly toolkit;
30
34
  private readonly options;
31
35
  private readonly showOutput;
36
+ private readonly ioHost;
32
37
  constructor(options: ToolkitLibEngineOptions);
33
38
  /**
34
39
  * Synthesizes the CDK app through the Toolkit
@@ -66,4 +71,28 @@ export declare class ToolkitLibRunnerEngine implements ICdk {
66
71
  * Creates a DeploymentMethod from the provided options.
67
72
  */
68
73
  private deploymentMethod;
74
+ /**
75
+ * Check that the regions for the stacks in the CloudAssembly match the regions requested on the engine
76
+ *
77
+ * This prevents misconfiguration of the integ test app. People tend to put:
78
+ *
79
+ * ```ts
80
+ * new Stack(app, 'Stack', {
81
+ * env: {
82
+ * region: 'some-region-that-suits-me',
83
+ * }
84
+ * });
85
+ * ```
86
+ *
87
+ * Into their integ tests, instead of:
88
+ *
89
+ * ```ts
90
+ * {
91
+ * region: process.env.CDK_DEFAULT_REGION,
92
+ * }
93
+ * ```
94
+ *
95
+ * This catches that misconfiguration.
96
+ */
97
+ private validateRegion;
69
98
  }
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ToolkitLibRunnerEngine = void 0;
4
4
  const path = require("node:path");
5
+ const cx_api_1 = require("@aws-cdk/cx-api");
5
6
  const toolkit_lib_1 = require("@aws-cdk/toolkit-lib");
6
7
  const chalk = require("chalk");
7
8
  const fs = require("fs-extra");
@@ -12,8 +13,16 @@ class ToolkitLibRunnerEngine {
12
13
  constructor(options) {
13
14
  this.options = options;
14
15
  this.showOutput = options.showOutput ?? false;
16
+ // We always create this for ourselves to emit warnings, but potentially
17
+ // don't pass it to the toolkit.
18
+ this.ioHost = new IntegRunnerIoHost();
15
19
  this.toolkit = new toolkit_lib_1.Toolkit({
16
- ioHost: this.showOutput ? new IntegRunnerIoHost() : new NoopIoHost(),
20
+ ioHost: this.showOutput ? this.ioHost : new NoopIoHost(),
21
+ sdkConfig: {
22
+ baseCredentials: toolkit_lib_1.BaseCredentials.awsCliCompatible({
23
+ defaultRegion: options.region,
24
+ }),
25
+ },
17
26
  // @TODO - these options are currently available on the action calls
18
27
  // but toolkit-lib needs them at the constructor level.
19
28
  // Need to decide what to do with them.
@@ -42,6 +51,7 @@ class ToolkitLibRunnerEngine {
42
51
  stacks: this.stackSelector(options),
43
52
  validateStacks: options.validation,
44
53
  });
54
+ await this.validateRegion(lock);
45
55
  await lock.dispose();
46
56
  }
47
57
  /**
@@ -67,6 +77,7 @@ class ToolkitLibRunnerEngine {
67
77
  try {
68
78
  // @TODO - use produce to mimic the current behavior more closely
69
79
  const lock = await cx.produce();
80
+ await this.validateRegion(lock);
70
81
  await lock.dispose();
71
82
  // We should fix this once we have stabilized toolkit-lib as engine.
72
83
  // What we really should do is this:
@@ -172,7 +183,6 @@ class ToolkitLibRunnerEngine {
172
183
  workingDirectory: this.options.workingDirectory,
173
184
  outdir,
174
185
  lookups: options.lookups,
175
- resolveDefaultEnvironment: false, // not part of the integ-runner contract
176
186
  contextStore: new toolkit_lib_1.MemoryContext(options.context),
177
187
  env: this.options.env,
178
188
  synthOptions: {
@@ -208,6 +218,52 @@ class ToolkitLibRunnerEngine {
208
218
  method: options.deploymentMethod ?? 'change-set',
209
219
  };
210
220
  }
221
+ /**
222
+ * Check that the regions for the stacks in the CloudAssembly match the regions requested on the engine
223
+ *
224
+ * This prevents misconfiguration of the integ test app. People tend to put:
225
+ *
226
+ * ```ts
227
+ * new Stack(app, 'Stack', {
228
+ * env: {
229
+ * region: 'some-region-that-suits-me',
230
+ * }
231
+ * });
232
+ * ```
233
+ *
234
+ * Into their integ tests, instead of:
235
+ *
236
+ * ```ts
237
+ * {
238
+ * region: process.env.CDK_DEFAULT_REGION,
239
+ * }
240
+ * ```
241
+ *
242
+ * This catches that misconfiguration.
243
+ */
244
+ async validateRegion(asm) {
245
+ for (const stack of asm.cloudAssembly.stacksRecursively) {
246
+ if (stack.environment.region !== this.options.region && stack.environment.region !== cx_api_1.UNKNOWN_REGION) {
247
+ this.ioHost.notify({
248
+ action: 'deploy',
249
+ code: 'CDK_RUNNER_W0000',
250
+ time: new Date(),
251
+ level: 'warn',
252
+ message: `Stack ${stack.displayName} synthesizes for region ${stack.environment.region}, even though ${this.options.region} was requested. Please configure \`{ env: { region: process.env.CDK_DEFAULT_REGION, account: process.env.CDK_DEFAULT_ACCOUNT } }\`, or use no env at all. Do not hardcode a region or account.`,
253
+ data: {
254
+ stackName: stack.displayName,
255
+ stackRegion: stack.environment.region,
256
+ requestedRegion: this.options.region,
257
+ },
258
+ }).catch((e) => {
259
+ if (e) {
260
+ // eslint-disable-next-line no-console
261
+ console.error(e);
262
+ }
263
+ });
264
+ }
265
+ }
266
+ }
211
267
  }
212
268
  exports.ToolkitLibRunnerEngine = ToolkitLibRunnerEngine;
213
269
  /**
@@ -221,9 +277,19 @@ class IntegRunnerIoHost extends toolkit_lib_1.NonInteractiveIoHost {
221
277
  });
222
278
  }
223
279
  async notify(msg) {
280
+ let color;
281
+ switch (msg.level) {
282
+ case 'error':
283
+ color = chalk.red;
284
+ break;
285
+ case 'warn':
286
+ color = chalk.yellow;
287
+ break;
288
+ default: color = chalk.gray;
289
+ }
224
290
  return super.notify({
225
291
  ...msg,
226
- message: chalk.gray(msg.message),
292
+ message: color(msg.message),
227
293
  });
228
294
  }
229
295
  }
@@ -237,4 +303,4 @@ class NoopIoHost {
237
303
  return msg.defaultResponse;
238
304
  }
239
305
  }
240
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGtpdC1saWIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0b29sa2l0LWxpYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxrQ0FBa0M7QUFJbEMsc0RBQWtJO0FBQ2xJLCtCQUErQjtBQUMvQiwrQkFBK0I7QUF5Qi9COztHQUVHO0FBQ0gsTUFBYSxzQkFBc0I7SUFLakMsWUFBbUIsT0FBZ0M7UUFDakQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQztRQUU5QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUkscUJBQU8sQ0FBQztZQUN6QixNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQSxDQUFDLENBQUMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsRUFBRTtZQUNuRSxvRUFBb0U7WUFDcEUsdURBQXVEO1lBQ3ZELHVDQUF1QztZQUN2QyxFQUFFO1lBQ0YsY0FBYztZQUNkLCtEQUErRDtZQUMvRCxVQUFVO1lBQ1YsbUJBQW1CO1lBQ25CLE1BQU07WUFDTixxQkFBcUI7WUFDckIsbUJBQW1CO1lBQ25CLDBCQUEwQjtTQUMzQixDQUFDLENBQUM7UUFFSCx3RkFBd0Y7UUFDeEYsbUJBQW1CO1FBQ25CLG1CQUFtQjtRQUNuQixxQkFBcUI7UUFDckIsa0JBQWtCO0lBQ3BCLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBcUI7UUFDdEMsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3hDLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztZQUNuQyxjQUFjLEVBQUUs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RSxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUzthQUNqRixDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU87WUFDTCxNQUFNLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixJQUFJLFlBQVk7U0FDakQsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQWhPRCx3REFnT0M7QUFFRDs7R0FFRztBQUNILE1BQU0saUJBQWtCLFNBQVEsa0NBQW9CO0lBQ2xELFlBQW1CLFFBQW1DLEVBQUU7UUFDdEQsS0FBSyxDQUFDO1lBQ0osR0FBRyxLQUFLO1lBQ1IsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ00sS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUF1QjtRQUN6QyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDbEIsR0FBRyxHQUFHO1lBQ04sT0FBTyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztTQUNqQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVTtJQUNQLEtBQUssQ0FBQyxNQUFNO0lBQ25CLENBQUM7SUFDTSxLQUFLLENBQUMsZUFBZSxDQUFJLEdBQTBCO1FBQ3hELE9BQU8sR0FBRyxDQUFDLGVBQWUsQ0FBQztJQUM3QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgdHlwZSB7IERlcGxveU9wdGlvbnMsIElDZGssIExpc3RPcHRpb25zLCBTeW50aEZhc3RPcHRpb25zLCBTeW50aE9wdGlvbnMsIFdhdGNoRXZlbnRzIH0gZnJvbSAnQGF3cy1jZGsvY2RrLWNsaS13cmFwcGVyJztcbmltcG9ydCB0eXBlIHsgRGVmYXVsdENka09wdGlvbnMsIERlc3Ryb3lPcHRpb25zIH0gZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hL2xpYi9pbnRlZy10ZXN0cyc7XG5pbXBvcnQgdHlwZSB7IERlcGxveW1lbnRNZXRob2QsIElDbG91ZEFzc2VtYmx5U291cmNlLCBJSW9Ib3N0LCBJb01lc3NhZ2UsIElvUmVxdWVzdCwgTm9uSW50ZXJhY3RpdmVJb0hvc3RQcm9wcywgU3RhY2tTZWxlY3RvciB9IGZyb20gJ0Bhd3MtY2RrL3Rvb2xraXQtbGliJztcbmltcG9ydCB7IEV4cGFuZFN0YWNrU2VsZWN0aW9uLCBNZW1vcnlDb250ZXh0LCBOb25JbnRlcmFjdGl2ZUlvSG9zdCwgU3RhY2tTZWxlY3Rpb25TdHJhdGVneSwgVG9vbGtpdCB9IGZyb20gJ0Bhd3MtY2RrL3Rvb2xraXQtbGliJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcblxuZXhwb3J0IGludGVyZmFjZSBUb29sa2l0TGliRW5naW5lT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0b3J5IHRvIHJ1biB0aGUgY2RrIGNvbW1hbmRzIGZyb21cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0XG4gICAqIGluIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQgdGhhdCB3aWxsIGJlIHJ1bm5pbmdcbiAgICogdGhlIGNkayBhcHBcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGVudiB2YXJzXG4gICAqL1xuICByZWFkb25seSBlbnY/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogU2hvdyB0aGUgb3V0cHV0IGZyb20gcnVubmluZyB0aGUgQ0RLIENMSVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2hvd091dHB1dD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQSBydW5uZXIgZW5naW5lIHBvd2VyZWQgZGlyZWN0bHkgYnkgdGhlIHRvb2xraXQtbGliXG4gKi9cbmV4cG9ydCBjbGFzcyBUb29sa2l0TGliUnVubmVyRW5naW5lIGltcGxlbWVudHMgSUNkayB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdG9vbGtpdDogVG9vbGtpdDtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBUb29sa2l0TGliRW5naW5lT3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBzaG93T3V0cHV0OiBib29sZWFuO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBUb29sa2l0TGliRW5naW5lT3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5zaG93T3V0cHV0ID0gb3B0aW9ucy5zaG93T3V0cHV0ID8/IGZhbHNlO1xuXG4gICAgdGhpcy50b29sa2l0ID0gbmV3IFRvb2xraXQoe1xuICAgICAgaW9Ib3N0OiB0aGlzLnNob3dPdXRwdXQ/IG5ldyBJbnRlZ1J1bm5lcklvSG9zdCgpIDogbmV3IE5vb3BJb0hvc3QoKSxcbiAgICAgIC8vIEBUT0RPIC0gdGhlc2Ugb3B0aW9ucyBhcmUgY3VycmVudGx5IGF2YWlsYWJsZSBvbiB0aGUgYWN0aW9uIGNhbGxzXG4gICAgICAvLyBidXQgdG9vbGtpdC1saWIgbmVlZHMgdGhlbSBhdCB0aGUgY29uc3RydWN0b3IgbGV2ZWwuXG4gICAgICAvLyBOZWVkIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlbS5cbiAgICAgIC8vXG4gICAgICAvLyBWYWxpZGF0aW9uc1xuICAgICAgLy8gIC0gYXNzZW1ibHlGYWlsdXJlQXQ6IG9wdGlvbnMuc3RyaWN0ID8/IG9wdGlvbnMuaWdub3JlRXJyb3JzXG4gICAgICAvLyBMb2dnaW5nXG4gICAgICAvLyAgLSBvcHRpb25zLmNvbG9yXG4gICAgICAvLyBTREtcbiAgICAgIC8vICAtIG9wdGlvbnMucHJvZmlsZVxuICAgICAgLy8gIC0gb3B0aW9ucy5wcm94eVxuICAgICAgLy8gIC0gb3B0aW9ucy5jYUJ1bmRsZVBhdGhcbiAgICB9KTtcblxuICAgIC8vIEBUT0RPIC0gc2ltaWxhciB0byB0aGUgYWJvdmUsIGJ1dCBpbiB0b29sa2l0LWxpYiB0aGVzZSBvcHRpb25zIHdvdWxkIGdvIG9uIHRoZSBJb0hvc3RcbiAgICAvLyAgLSBvcHRpb25zLnF1aWV0XG4gICAgLy8gIC0gb3B0aW9ucy50cmFjZVxuICAgIC8vICAtIG9wdGlvbnMudmVyYm9zZVxuICAgIC8vICAtIG9wdGlvbnMuanNvblxuICB9XG5cbiAgLyoqXG4gICAqIFN5bnRoZXNpemVzIHRoZSBDREsgYXBwIHRocm91Z2ggdGhlIFRvb2xraXRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzeW50aChvcHRpb25zOiBTeW50aE9wdGlvbnMpIHtcbiAgICBjb25zdCBjeCA9IGF3YWl0IHRoaXMuY3gob3B0aW9ucyk7XG4gICAgY29uc3QgbG9jayA9IGF3YWl0IHRoaXMudG9vbGtpdC5zeW50aChjeCwge1xuICAgICAgc3RhY2tzOiB0aGlzLnN0YWNrU2VsZWN0b3Iob3B0aW9ucyksXG4gICAgICB2YWxpZGF0ZVN0YWNrczogb3B0aW9ucy52YWxpZGF0aW9uLFxuICAgIH0pO1xuICAgIGF3YWl0IGxvY2suZGlzcG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN5bnRoZXNpemVzIHRoZSBDREsgYXBwIHF1aWNrbHksIGJ5IGJ5cGFzc2luZyB0aGUgVG9vbGtpdCBhbmQganVzdCBpbnZva2luZyB0aGUgYXBwIGNvbW1hbmRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzeW50aEZhc3Qob3B0aW9uczogU3ludGhGYXN0T3B0aW9ucykge1xuICAgIGNvbnN0IGN4ID0gYXdhaXQgdGhpcy50b29sa2l0LmZyb21DZGtBcHAob3B0aW9ucy5leGVjQ21kLmpvaW4oJyAnKSwge1xuICAgICAgd29ya2luZ0RpcmVjdG9yeTogdGhpcy5vcHRpb25zLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICBvdXRkaXI6IG9wdGlvbnMub3V0cHV0ID8gcGF0aC5qb2luKHRoaXMub3B0aW9ucy53b3JraW5nRGlyZWN0b3J5LCBvcHRpb25zLm91dHB1dCkgOiB1bmRlZmluZWQsXG4gICAgICBjb250ZXh0U3RvcmU6IG5ldyBNZW1vcnlDb250ZXh0KG9wdGlvbnMuY29udGV4dCksXG4gICAgICBsb29rdXBzOiBmYWxzZSxcbiAgICAgIHJlc29sdmVEZWZhdWx0RW52aXJvbm1lbnQ6IGZhbHNlLFxuICAgICAgZW52OiB7XG4gICAgICAgIC4uLnRoaXMub3B0aW9ucy5lbnYsXG4gICAgICAgIC4uLm9wdGlvbnMuZW52LFxuICAgICAgfSxcbiAgICAgIHN5bnRoT3B0aW9uczoge1xuICAgICAgICB2ZXJzaW9uUmVwb3J0aW5nOiBmYWxzZSxcbiAgICAgICAgcGF0aE1ldGFkYXRhOiBmYWxzZSxcbiAgICAgICAgYXNzZXRNZXRhZGF0YTogZmFsc2UsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEBUT0RPIC0gdXNlIHByb2R1Y2UgdG8gbWltaWMgdGhlIGN1cnJlbnQgYmVoYXZpb3IgbW9yZSBjbG9zZWx5XG4gICAgICBjb25zdCBsb2NrID0gYXdhaXQgY3gucHJvZHVjZSgpO1xuICAgICAgYXdhaXQgbG9jay5kaXNwb3NlKCk7XG4gICAgICAvLyBXZSBzaG91bGQgZml4IHRoaXMgb25jZSB3ZSBoYXZlIHN0YWJpbGl6ZWQgdG9vbGtpdC1saWIgYXMgZW5naW5lLlxuICAgICAgLy8gV2hhdCB3ZSByZWFsbHkgc2hvdWxkIGRvIGlzIHRoaXM6XG4gICAgICAvLyBjb25zdCBsb2NrID0gYXdhaXQgdGhpcy50b29sa2l0LnN5bnRoKGN4LCB7XG4gICAgICAvLyAgIHZhbGlkYXRlU3RhY2tzOiBmYWxzZSxcbiAgICAgIC8vIH0pO1xuICAgICAgLy8gYXdhaXQgbG9jay5kaXNwb3NlKCk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBpZiAoZS5tZXNzYWdlLmluY2x1ZGVzKCdNaXNzaW5nIGNvbnRleHQga2V5cycpKSB7XG4gICAgICAgIC8vIEBUT0RPIC0gc2lsZW50bHkgaWdub3JlIG1pc3NpbmcgY29udGV4dFxuICAgICAgICAvLyBUaGlzIGlzIGFjdHVhbGx5IGFuIHVuZGVmaW5lZCBjYXNlIGluIHRoZSBvbGQgaW1wbGVtZW50YXRpb24sIHdoaWNoIGRvZXNuJ3QgdXNlIHRoZSB0b29sa2l0IGNvZGVcbiAgICAgICAgLy8gYW5kIHdvbid0IGZhaWwgZm9yIG1pc3NpbmcgY29udGV4dC4gVG8gcGVyc2V2ZXJlIGV4aXN0aW5nIGJlaGF2aW9yLCB3ZSBkbyB0aGUgc2FtZSBoZXJlLlxuICAgICAgICAvLyBIb3dldmVyIGluIGZ1dHVyZSB3ZSBuZWVkIHRvIGZpbmQgYSB3YXkgZm9yIGludGVnIHRlc3RzIHRvIHByb3ZpZGUgY29udGV4dCB0aHJvdWdoIHNuYXBzaG90cy5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTGlzdHMgdGhlIHN0YWNrcyBpbiB0aGUgQ0RLIGFwcFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGxpc3Qob3B0aW9uczogTGlzdE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgLy8gQFRPRE8gLSBleGlzdGluZyBsaXN0IHNwZWNpZmljIG9wdGlvbiwgZG9lc24ndCByZWFsbHkgbWFrZSBzZW5zZSB0byBzdXBwb3J0IHRoaXMgaW4gdGhlIGNvbnRleHQgb2YgaW50ZWctcnVubmVyXG4gICAgLy8gIC0gb3B0aW9ucy5sb25nXG5cbiAgICBjb25zdCBjeCA9IGF3YWl0IHRoaXMuY3gob3B0aW9ucyk7XG4gICAgY29uc3Qgc3RhY2tzID0gYXdhaXQgdGhpcy50b29sa2l0Lmxpc3QoY3gsIHtcbiAgICAgIHN0YWNrczogdGhpcy5zdGFja1NlbGVjdG9yKG9wdGlvbnMpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN0YWNrcy5tYXAocyA9PiBzLm5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlcGxveXMgdGhlIENESyBhcHBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZXBsb3kob3B0aW9uczogRGVwbG95T3B0aW9ucykge1xuICAgIC8vIEBUT0RPIC0gZXhpc3RpbmcgZGVwbG95IHNwZWNpZmljIG9wdGlvbiwgZG9lc24ndCByZWFsbHkgbWFrZSBzZW5zZSB0byBzdXBwb3J0IHRoaXMgaW4gdGhlIGNvbnRleHQgb2YgaW50ZWctcnVubmVyXG4gICAgLy8gIC0gb3B0aW9ucy5wcm9ncmVzc1xuXG4gICAgaWYgKG9wdGlvbnMud2F0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLndhdGNoKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGNvbnN0IGN4ID0gYXdhaXQgdGhpcy5jeChvcHRpb25zKTtcbiAgICBhd2FpdCB0aGlzLnRvb2xraXQuZGVwbG95KGN4LCB7XG4gICAgICByb2xlQXJuOiBvcHRpb25zLnJvbGVBcm4sXG4gICAgICB0cmFjZUxvZ3M6IG9wdGlvbnMudHJhY2VMb2dzLFxuICAgICAgc3RhY2tzOiB0aGlzLnN0YWNrU2VsZWN0b3Iob3B0aW9ucyksXG4gICAgICBkZXBsb3ltZW50TWV0aG9kOiB0aGlzLmRlcGxveW1lbnRNZXRob2Qob3B0aW9ucyksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogV2F0Y2hlcyB0aGUgQ0RLIGFwcCBmb3IgY2hhbmdlcyBhbmQgZGVwbG95cyB0aGVtIGF1dG9tYXRpY2FsbHlcbiAgICovXG4gIHB1YmxpYyBhc3luYyB3YXRjaChvcHRpb25zOiBEZXBsb3lPcHRpb25zLCBldmVudHM/OiBXYXRjaEV2ZW50cykge1xuICAgIGNvbnN0IGN4ID0gYXdhaXQgdGhpcy5jeChvcHRpb25zKTtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgd2F0Y2hlciA9IGF3YWl0IHRoaXMudG9vbGtpdC53YXRjaChjeCwge1xuICAgICAgICByb2xlQXJuOiBvcHRpb25zLnJvbGVBcm4sXG4gICAgICAgIHRyYWNlTG9nczogb3B0aW9ucy50cmFjZUxvZ3MsXG4gICAgICAgIHN0YWNrczogdGhpcy5zdGFja1NlbGVjdG9yKG9wdGlvbnMpLFxuICAgICAgICBkZXBsb3ltZW50TWV0aG9kOiB0aGlzLmRlcGxveW1lbnRNZXRob2Qob3B0aW9ucyksXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IHdhdGNoZXIud2FpdEZvckVuZCgpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIGlmIChldmVudHM/Lm9uU3RkZXJyKSB7XG4gICAgICAgIGV2ZW50cy5vblN0ZGVycihTdHJpbmcoZSkpO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50cz8ub25DbG9zZSkge1xuICAgICAgICBldmVudHMub25DbG9zZSgxKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnRzPy5vbkNsb3NlKSB7XG4gICAgICBldmVudHMub25DbG9zZSgwKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIENESyBhcHBcbiAgICovXG4gIHB1YmxpYyBhc3luYyBkZXN0cm95KG9wdGlvbnM6IERlc3Ryb3lPcHRpb25zKSB7XG4gICAgY29uc3QgY3ggPSBhd2FpdCB0aGlzLmN4KG9wdGlvbnMpO1xuXG4gICAgYXdhaXQgdGhpcy50b29sa2l0LmRlc3Ryb3koY3gsIHtcbiAgICAgIHJvbGVBcm46IG9wdGlvbnMucm9sZUFybixcbiAgICAgIHN0YWNrczogdGhpcy5zdGFja1NlbGVjdG9yKG9wdGlvbnMpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBDbG91ZCBBc3NlbWJseSBTb3VyY2UgZnJvbSB0aGUgcHJvdmlkZWQgb3B0aW9ucy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgY3gob3B0aW9uczogRGVmYXVsdENka09wdGlvbnMpOiBQcm9taXNlPElDbG91ZEFzc2VtYmx5U291cmNlPiB7XG4gICAgaWYgKCFvcHRpb25zLmFwcCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBhcHAgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICAvLyBjaGVjayBpZiB0aGUgYXBwIGlzIGEgcGF0aCB0byBleGlzdGluZyBzbmFwc2hvdCBhbmQgdGhlbiB1c2UgaXQgYXMgYW4gYXNzZW1ibHkgZGlyZWN0b3J5XG4gICAgY29uc3QgcG90ZW50aWFsQ3hQYXRoID0gcGF0aC5qb2luKHRoaXMub3B0aW9ucy53b3JraW5nRGlyZWN0b3J5LCBvcHRpb25zLmFwcCk7XG4gICAgaWYgKGZzLnBhdGhFeGlzdHNTeW5jKHBvdGVudGlhbEN4UGF0aCkgJiYgZnMuc3RhdFN5bmMocG90ZW50aWFsQ3hQYXRoKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICByZXR1cm4gdGhpcy50b29sa2l0LmZyb21Bc3NlbWJseURpcmVjdG9yeShwb3RlbnRpYWxDeFBhdGgpO1xuICAgIH1cblxuICAgIGxldCBvdXRkaXI7XG4gICAgaWYgKG9wdGlvbnMub3V0cHV0KSB7XG4gICAgICBvdXRkaXIgPSBwYXRoLmpvaW4odGhpcy5vcHRpb25zLndvcmtpbmdEaXJlY3RvcnksIG9wdGlvbnMub3V0cHV0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50b29sa2l0LmZyb21DZGtBcHAob3B0aW9ucy5hcHAsIHtcbiAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHRoaXMub3B0aW9ucy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgb3V0ZGlyLFxuICAgICAgbG9va3Vwczogb3B0aW9ucy5sb29rdXBzLFxuICAgICAgcmVzb2x2ZURlZmF1bHRFbnZpcm9ubWVudDogZmFsc2UsIC8vIG5vdCBwYXJ0IG9mIHRoZSBpbnRlZy1ydW5uZXIgY29udHJhY3RcbiAgICAgIGNvbnRleHRTdG9yZTogbmV3IE1lbW9yeUNvbnRleHQob3B0aW9ucy5jb250ZXh0KSxcbiAgICAgIGVudjogdGhpcy5vcHRpb25zLmVudixcbiAgICAgIHN5bnRoT3B0aW9uczoge1xuICAgICAgICBkZWJ1Zzogb3B0aW9ucy5kZWJ1ZyxcbiAgICAgICAgdmVyc2lvblJlcG9ydGluZzogb3B0aW9ucy52ZXJzaW9uUmVwb3J0aW5nID8/IGZhbHNlLFxuICAgICAgICBwYXRoTWV0YWRhdGE6IG9wdGlvbnMucGF0aE1ldGFkYXRhID8/IGZhbHNlLFxuICAgICAgICBhc3NldE1ldGFkYXRhOiBvcHRpb25zLmFzc2V0TWV0YWRhdGEgPz8gZmFsc2UsXG4gICAgICAgIGFzc2V0U3RhZ2luZzogb3B0aW9ucy5zdGFnaW5nLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgU3RhY2tTZWxlY3RvciBmcm9tIHRoZSBwcm92aWRlZCBvcHRpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGFja1NlbGVjdG9yKG9wdGlvbnM6IERlZmF1bHRDZGtPcHRpb25zICYgeyByZWFkb25seSBleGNsdXNpdmVseT86IGJvb2xlYW4gfSk6IFN0YWNrU2VsZWN0b3Ige1xuICAgIHJldHVybiB7XG4gICAgICBzdHJhdGVneTogb3B0aW9ucy5hbGwgPyBTdGFja1NlbGVjdGlvblN0cmF0ZWd5LkFMTF9TVEFDS1MgOiBTdGFja1NlbGVjdGlvblN0cmF0ZWd5LlBBVFRFUk5fTVVTVF9NQVRDSCxcbiAgICAgIHBhdHRlcm5zOiBvcHRpb25zLnN0YWNrcyA/PyBbJyoqJ10sXG4gICAgICBleHBhbmQ6IG9wdGlvbnMuZXhjbHVzaXZlbHkgPyBFeHBhbmRTdGFja1NlbGVjdGlvbi5OT05FIDogRXhwYW5kU3RhY2tTZWxlY3Rpb24uVVBTVFJFQU0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgRGVwbG95bWVudE1ldGhvZCBmcm9tIHRoZSBwcm92aWRlZCBvcHRpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSBkZXBsb3ltZW50TWV0aG9kKG9wdGlvbnM6IERlcGxveU9wdGlvbnMpOiBEZXBsb3ltZW50TWV0aG9kIHtcbiAgICBpZiAob3B0aW9ucy5ob3Rzd2FwICYmIG9wdGlvbnMuaG90c3dhcCAhPT0gJ2Z1bGwtZGVwbG95bWVudCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1ldGhvZDogJ2hvdHN3YXAnLFxuICAgICAgICBmYWxsYmFjazogb3B0aW9ucy5ob3Rzd2FwID09PSAnZmFsbC1iYWNrJyA/IHsgbWV0aG9kOiAnY2hhbmdlLXNldCcgfSA6IHVuZGVmaW5lZCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1ldGhvZDogb3B0aW9ucy5kZXBsb3ltZW50TWV0aG9kID8/ICdjaGFuZ2Utc2V0JyxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQW4gSW9Ib3N0IHVzZWQgaW4gdGhlIGludGVnLXJ1bm5lciB0byBwcm92aWRlIG5vbi1pbnRlcmFjdGl2ZSBvdXRwdXRcbiAqL1xuY2xhc3MgSW50ZWdSdW5uZXJJb0hvc3QgZXh0ZW5kcyBOb25JbnRlcmFjdGl2ZUlvSG9zdCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm9wczogTm9uSW50ZXJhY3RpdmVJb0hvc3RQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoe1xuICAgICAgLi4ucHJvcHMsXG4gICAgICBpc1RUWTogZmFsc2UsXG4gICAgfSk7XG4gIH1cbiAgcHVibGljIGFzeW5jIG5vdGlmeShtc2c6IElvTWVzc2FnZTx1bmtub3duPik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBzdXBlci5ub3RpZnkoe1xuICAgICAgLi4ubXNnLFxuICAgICAgbWVzc2FnZTogY2hhbGsuZ3JheShtc2cubWVzc2FnZSksXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBbiBJb0hvc3QgdGhhdCBkb2Vzbid0IGRvIGFueXRoaW5nXG4gKi9cbmNsYXNzIE5vb3BJb0hvc3QgaW1wbGVtZW50cyBJSW9Ib3N0IHtcbiAgcHVibGljIGFzeW5jIG5vdGlmeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgfVxuICBwdWJsaWMgYXN5bmMgcmVxdWVzdFJlc3BvbnNlPFQ+KG1zZzogSW9SZXF1ZXN0PHVua25vd24sIFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIG1zZy5kZWZhdWx0UmVzcG9uc2U7XG4gIH1cbn1cbiJdfQ==
306
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGtpdC1saWIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0b29sa2l0LWxpYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxrQ0FBa0M7QUFHbEMsNENBQWlEO0FBRWpELHNEQUFtSjtBQUNuSiwrQkFBK0I7QUFDL0IsK0JBQStCO0FBOEIvQjs7R0FFRztBQUNILE1BQWEsc0JBQXNCO0lBTWpDLFlBQW1CLE9BQWdDO1FBQ2pELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUM7UUFFOUMsd0VBQXdFO1FBQ3hFLGdDQUFnQztRQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUV0QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUkscUJBQU8sQ0FBQztZQUN6QixNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLEVBQUU7WUFDeEQsU0FBUyxFQUFFO2dCQUNULGVBQWUsRUFBRSw2QkFBZSxDQUFDLGdCQUFnQixDQUFDO29CQUNoRCxhQUFhLEVBQUUsT0FBTyxDQUFDLE1BQU07aUJBQzlCLENBQUM7YUFDSDtZQUNELG9FQUFvRTtZQUNwRSx1REFBdUQ7WUFDdkQsdUNBQXVDO1lBQ3ZDLEVBQUU7WUFDRixjQUFjO1lBQ2QsK0RBQStEO1lBQy9ELFVBQVU7WUFDVixtQkFBbUI7WUFDbkIsTUFBTTtZQUNOLHFCQUFxQjtZQUNyQixtQkFBbUI7WUFDbkIsMEJBQTBCO1NBQzNCLENBQUMsQ0FBQztRQUVILHdGQUF3RjtRQUN4RixtQkFBbUI7UUFDbkIsbUJBQW1CO1FBQ25CLHFCQUFxQjtRQUNyQixrQkFBa0I7SUFDcEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFxQjtR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Q00sS0FBSyxDQUFDLGVBQWUsQ0FBSSxHQUEwQjtRQUN4RCxPQUFPLEdBQUcsQ0FBQyxlQUFlLENBQUM7SUFDN0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUgeyBEZXBsb3lPcHRpb25zLCBJQ2RrLCBMaXN0T3B0aW9ucywgU3ludGhGYXN0T3B0aW9ucywgU3ludGhPcHRpb25zLCBXYXRjaEV2ZW50cyB9IGZyb20gJ0Bhd3MtY2RrL2Nkay1jbGktd3JhcHBlcic7XG5pbXBvcnQgdHlwZSB7IERlZmF1bHRDZGtPcHRpb25zLCBEZXN0cm95T3B0aW9ucyB9IGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LXNjaGVtYS9saWIvaW50ZWctdGVzdHMnO1xuaW1wb3J0IHsgVU5LTk9XTl9SRUdJT04gfSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHR5cGUgeyBEZXBsb3ltZW50TWV0aG9kLCBJQ2xvdWRBc3NlbWJseVNvdXJjZSwgSUlvSG9zdCwgSW9NZXNzYWdlLCBJb1JlcXVlc3QsIElSZWFkYWJsZUNsb3VkQXNzZW1ibHksIE5vbkludGVyYWN0aXZlSW9Ib3N0UHJvcHMsIFN0YWNrU2VsZWN0b3IgfSBmcm9tICdAYXdzLWNkay90b29sa2l0LWxpYic7XG5pbXBvcnQgeyBCYXNlQ3JlZGVudGlhbHMsIEV4cGFuZFN0YWNrU2VsZWN0aW9uLCBNZW1vcnlDb250ZXh0LCBOb25JbnRlcmFjdGl2ZUlvSG9zdCwgU3RhY2tTZWxlY3Rpb25TdHJhdGVneSwgVG9vbGtpdCB9IGZyb20gJ0Bhd3MtY2RrL3Rvb2xraXQtbGliJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJztcblxuZXhwb3J0IGludGVyZmFjZSBUb29sa2l0TGliRW5naW5lT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0b3J5IHRvIHJ1biB0aGUgY2RrIGNvbW1hbmRzIGZyb21cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0XG4gICAqIGluIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQgdGhhdCB3aWxsIGJlIHJ1bm5pbmdcbiAgICogdGhlIGNkayBhcHBcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGVudiB2YXJzXG4gICAqL1xuICByZWFkb25seSBlbnY/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogU2hvdyB0aGUgb3V0cHV0IGZyb20gcnVubmluZyB0aGUgQ0RLIENMSVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2hvd091dHB1dD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSByZWdpb24gdGhlIENESyBhcHAgc2hvdWxkIHN5bnRoZXNpemUgaXRzZWxmIGZvclxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBydW5uZXIgZW5naW5lIHBvd2VyZWQgZGlyZWN0bHkgYnkgdGhlIHRvb2xraXQtbGliXG4gKi9cbmV4cG9ydCBjbGFzcyBUb29sa2l0TGliUnVubmVyRW5naW5lIGltcGxlbWVudHMgSUNkayB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdG9vbGtpdDogVG9vbGtpdDtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBUb29sa2l0TGliRW5naW5lT3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBzaG93T3V0cHV0OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IGlvSG9zdDogSW50ZWdSdW5uZXJJb0hvc3Q7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFRvb2xraXRMaWJFbmdpbmVPcHRpb25zKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnNob3dPdXRwdXQgPSBvcHRpb25zLnNob3dPdXRwdXQgPz8gZmFsc2U7XG5cbiAgICAvLyBXZSBhbHdheXMgY3JlYXRlIHRoaXMgZm9yIG91cnNlbHZlcyB0byBlbWl0IHdhcm5pbmdzLCBidXQgcG90ZW50aWFsbHlcbiAgICAvLyBkb24ndCBwYXNzIGl0IHRvIHRoZSB0b29sa2l0LlxuICAgIHRoaXMuaW9Ib3N0ID0gbmV3IEludGVnUnVubmVySW9Ib3N0KCk7XG5cbiAgICB0aGlzLnRvb2xraXQgPSBuZXcgVG9vbGtpdCh7XG4gICAgICBpb0hvc3Q6IHRoaXMuc2hvd091dHB1dCA/IHRoaXMuaW9Ib3N0IDogbmV3IE5vb3BJb0hvc3QoKSxcbiAgICAgIHNka0NvbmZpZzoge1xuICAgICAgICBiYXNlQ3JlZGVudGlhbHM6IEJhc2VDcmVkZW50aWFscy5hd3NDbGlDb21wYXRpYmxlKHtcbiAgICAgICAgICBkZWZhdWx0UmVnaW9uOiBvcHRpb25zLnJlZ2lvbixcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgICAgLy8gQFRPRE8gLSB0aGVzZSBvcHRpb25zIGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlIG9uIHRoZSBhY3Rpb24gY2FsbHNcbiAgICAgIC8vIGJ1dCB0b29sa2l0LWxpYiBuZWVkcyB0aGVtIGF0IHRoZSBjb25zdHJ1Y3RvciBsZXZlbC5cbiAgICAgIC8vIE5lZWQgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aCB0aGVtLlxuICAgICAgLy9cbiAgICAgIC8vIFZhbGlkYXRpb25zXG4gICAgICAvLyAgLSBhc3NlbWJseUZhaWx1cmVBdDogb3B0aW9ucy5zdHJpY3QgPz8gb3B0aW9ucy5pZ25vcmVFcnJvcnNcbiAgICAgIC8vIExvZ2dpbmdcbiAgICAgIC8vICAtIG9wdGlvbnMuY29sb3JcbiAgICAgIC8vIFNES1xuICAgICAgLy8gIC0gb3B0aW9ucy5wcm9maWxlXG4gICAgICAvLyAgLSBvcHRpb25zLnByb3h5XG4gICAgICAvLyAgLSBvcHRpb25zLmNhQnVuZGxlUGF0aFxuICAgIH0pO1xuXG4gICAgLy8gQFRPRE8gLSBzaW1pbGFyIHRvIHRoZSBhYm92ZSwgYnV0IGluIHRvb2xraXQtbGliIHRoZXNlIG9wdGlvbnMgd291bGQgZ28gb24gdGhlIElvSG9zdFxuICAgIC8vICAtIG9wdGlvbnMucXVpZXRcbiAgICAvLyAgLSBvcHRpb25zLnRyYWNlXG4gICAgLy8gIC0gb3B0aW9ucy52ZXJib3NlXG4gICAgLy8gIC0gb3B0aW9ucy5qc29uXG4gIH1cblxuICAvKipcbiAgICogU3ludGhlc2l6ZXMgdGhlIENESyBhcHAgdGhyb3VnaCB0aGUgVG9vbGtpdFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHN5bnRoKG9wdGlvbnM6IFN5bnRoT3B0aW9ucykge1xuICAgIGNvbnN0IGN4ID0gYXdhaXQgdGhpcy5jeChvcHRpb25zKTtcbiAgICBjb25zdCBsb2NrID0gYXdhaXQgdGhpcy50b29sa2l0LnN5bnRoKGN4LCB7XG4gICAgICBzdGFja3M6IHRoaXMuc3RhY2tTZWxlY3RvcihvcHRpb25zKSxcbiAgICAgIHZhbGlkYXRlU3RhY2tzOiBvcHRpb25zLnZhbGlkYXRpb24sXG4gICAgfSk7XG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZVJlZ2lvbihsb2NrKTtcbiAgICBhd2FpdCBsb2NrLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW50aGVzaXplcyB0aGUgQ0RLIGFwcCBxdWlja2x5LCBieSBieXBhc3NpbmcgdGhlIFRvb2xraXQgYW5kIGp1c3QgaW52b2tpbmcgdGhlIGFwcCBjb21tYW5kXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc3ludGhGYXN0KG9wdGlvbnM6IFN5bnRoRmFzdE9wdGlvbnMpIHtcbiAgICBjb25zdCBjeCA9IGF3YWl0IHRoaXMudG9vbGtpdC5mcm9tQ2RrQXBwKG9wdGlvbnMuZXhlY0NtZC5qb2luKCcgJyksIHtcbiAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHRoaXMub3B0aW9ucy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgb3V0ZGlyOiBvcHRpb25zLm91dHB1dCA/IHBhdGguam9pbih0aGlzLm9wdGlvbnMud29ya2luZ0RpcmVjdG9yeSwgb3B0aW9ucy5vdXRwdXQpIDogdW5kZWZpbmVkLFxuICAgICAgY29udGV4dFN0b3JlOiBuZXcgTWVtb3J5Q29udGV4dChvcHRpb25zLmNvbnRleHQpLFxuICAgICAgbG9va3VwczogZmFsc2UsXG4gICAgICByZXNvbHZlRGVmYXVsdEVudmlyb25tZW50OiBmYWxzZSxcbiAgICAgIGVudjoge1xuICAgICAgICAuLi50aGlzLm9wdGlvbnMuZW52LFxuICAgICAgICAuLi5vcHRpb25zLmVudixcbiAgICAgIH0sXG4gICAgICBzeW50aE9wdGlvbnM6IHtcbiAgICAgICAgdmVyc2lvblJlcG9ydGluZzogZmFsc2UsXG4gICAgICAgIHBhdGhNZXRhZGF0YTogZmFsc2UsXG4gICAgICAgIGFzc2V0TWV0YWRhdGE6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBAVE9ETyAtIHVzZSBwcm9kdWNlIHRvIG1pbWljIHRoZSBjdXJyZW50IGJlaGF2aW9yIG1vcmUgY2xvc2VseVxuICAgICAgY29uc3QgbG9jayA9IGF3YWl0IGN4LnByb2R1Y2UoKTtcbiAgICAgIGF3YWl0IHRoaXMudmFsaWRhdGVSZWdpb24obG9jayk7XG4gICAgICBhd2FpdCBsb2NrLmRpc3Bvc2UoKTtcbiAgICAgIC8vIFdlIHNob3VsZCBmaXggdGhpcyBvbmNlIHdlIGhhdmUgc3RhYmlsaXplZCB0b29sa2l0LWxpYiBhcyBlbmdpbmUuXG4gICAgICAvLyBXaGF0IHdlIHJlYWxseSBzaG91bGQgZG8gaXMgdGhpczpcbiAgICAgIC8vIGNvbnN0IGxvY2sgPSBhd2FpdCB0aGlzLnRvb2xraXQuc3ludGgoY3gsIHtcbiAgICAgIC8vICAgdmFsaWRhdGVTdGFja3M6IGZhbHNlLFxuICAgICAgLy8gfSk7XG4gICAgICAvLyBhd2FpdCBsb2NrLmRpc3Bvc2UoKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGlmIChlLm1lc3NhZ2UuaW5jbHVkZXMoJ01pc3NpbmcgY29udGV4dCBrZXlzJykpIHtcbiAgICAgICAgLy8gQFRPRE8gLSBzaWxlbnRseSBpZ25vcmUgbWlzc2luZyBjb250ZXh0XG4gICAgICAgIC8vIFRoaXMgaXMgYWN0dWFsbHkgYW4gdW5kZWZpbmVkIGNhc2UgaW4gdGhlIG9sZCBpbXBsZW1lbnRhdGlvbiwgd2hpY2ggZG9lc24ndCB1c2UgdGhlIHRvb2xraXQgY29kZVxuICAgICAgICAvLyBhbmQgd29uJ3QgZmFpbCBmb3IgbWlzc2luZyBjb250ZXh0LiBUbyBwZXJzZXZlcmUgZXhpc3RpbmcgYmVoYXZpb3IsIHdlIGRvIHRoZSBzYW1lIGhlcmUuXG4gICAgICAgIC8vIEhvd2V2ZXIgaW4gZnV0dXJlIHdlIG5lZWQgdG8gZmluZCBhIHdheSBmb3IgaW50ZWcgdGVzdHMgdG8gcHJvdmlkZSBjb250ZXh0IHRocm91Z2ggc25hcHNob3RzLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0cyB0aGUgc3RhY2tzIGluIHRoZSBDREsgYXBwXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbGlzdChvcHRpb25zOiBMaXN0T3B0aW9ucyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgICAvLyBAVE9ETyAtIGV4aXN0aW5nIGxpc3Qgc3BlY2lmaWMgb3B0aW9uLCBkb2Vzbid0IHJlYWxseSBtYWtlIHNlbnNlIHRvIHN1cHBvcnQgdGhpcyBpbiB0aGUgY29udGV4dCBvZiBpbnRlZy1ydW5uZXJcbiAgICAvLyAgLSBvcHRpb25zLmxvbmdcblxuICAgIGNvbnN0IGN4ID0gYXdhaXQgdGhpcy5jeChvcHRpb25zKTtcbiAgICBjb25zdCBzdGFja3MgPSBhd2FpdCB0aGlzLnRvb2xraXQubGlzdChjeCwge1xuICAgICAgc3RhY2tzOiB0aGlzLnN0YWNrU2VsZWN0b3Iob3B0aW9ucyksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3RhY2tzLm1hcChzID0+IHMubmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogRGVwbG95cyB0aGUgQ0RLIGFwcFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRlcGxveShvcHRpb25zOiBEZXBsb3lPcHRpb25zKSB7XG4gICAgLy8gQFRPRE8gLSBleGlzdGluZyBkZXBsb3kgc3BlY2lmaWMgb3B0aW9uLCBkb2Vzbid0IHJlYWxseSBtYWtlIHNlbnNlIHRvIHN1cHBvcnQgdGhpcyBpbiB0aGUgY29udGV4dCBvZiBpbnRlZy1ydW5uZXJcbiAgICAvLyAgLSBvcHRpb25zLnByb2dyZXNzXG5cbiAgICBpZiAob3B0aW9ucy53YXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMud2F0Y2gob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY29uc3QgY3ggPSBhd2FpdCB0aGlzLmN4KG9wdGlvbnMpO1xuICAgIGF3YWl0IHRoaXMudG9vbGtpdC5kZXBsb3koY3gsIHtcbiAgICAgIHJvbGVBcm46IG9wdGlvbnMucm9sZUFybixcbiAgICAgIHRyYWNlTG9nczogb3B0aW9ucy50cmFjZUxvZ3MsXG4gICAgICBzdGFja3M6IHRoaXMuc3RhY2tTZWxlY3RvcihvcHRpb25zKSxcbiAgICAgIGRlcGxveW1lbnRNZXRob2Q6IHRoaXMuZGVwbG95bWVudE1ldGhvZChvcHRpb25zKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXYXRjaGVzIHRoZSBDREsgYXBwIGZvciBjaGFuZ2VzIGFuZCBkZXBsb3lzIHRoZW0gYXV0b21hdGljYWxseVxuICAgKi9cbiAgcHVibGljIGFzeW5jIHdhdGNoKG9wdGlvbnM6IERlcGxveU9wdGlvbnMsIGV2ZW50cz86IFdhdGNoRXZlbnRzKSB7XG4gICAgY29uc3QgY3ggPSBhd2FpdCB0aGlzLmN4KG9wdGlvbnMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB3YXRjaGVyID0gYXdhaXQgdGhpcy50b29sa2l0LndhdGNoKGN4LCB7XG4gICAgICAgIHJvbGVBcm46IG9wdGlvbnMucm9sZUFybixcbiAgICAgICAgdHJhY2VMb2dzOiBvcHRpb25zLnRyYWNlTG9ncyxcbiAgICAgICAgc3RhY2tzOiB0aGlzLnN0YWNrU2VsZWN0b3Iob3B0aW9ucyksXG4gICAgICAgIGRlcGxveW1lbnRNZXRob2Q6IHRoaXMuZGVwbG95bWVudE1ldGhvZChvcHRpb25zKSxcbiAgICAgIH0pO1xuICAgICAgYXdhaXQgd2F0Y2hlci53YWl0Rm9yRW5kKCk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgaWYgKGV2ZW50cz8ub25TdGRlcnIpIHtcbiAgICAgICAgZXZlbnRzLm9uU3RkZXJyKFN0cmluZyhlKSk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnRzPy5vbkNsb3NlKSB7XG4gICAgICAgIGV2ZW50cy5vbkNsb3NlKDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudHM/Lm9uQ2xvc2UpIHtcbiAgICAgIGV2ZW50cy5vbkNsb3NlKDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgQ0RLIGFwcFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGRlc3Ryb3kob3B0aW9uczogRGVzdHJveU9wdGlvbnMpIHtcbiAgICBjb25zdCBjeCA9IGF3YWl0IHRoaXMuY3gob3B0aW9ucyk7XG5cbiAgICBhd2FpdCB0aGlzLnRvb2xraXQuZGVzdHJveShjeCwge1xuICAgICAgcm9sZUFybjogb3B0aW9ucy5yb2xlQXJuLFxuICAgICAgc3RhY2tzOiB0aGlzLnN0YWNrU2VsZWN0b3Iob3B0aW9ucyksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENsb3VkIEFzc2VtYmx5IFNvdXJjZSBmcm9tIHRoZSBwcm92aWRlZCBvcHRpb25zLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBjeChvcHRpb25zOiBEZWZhdWx0Q2RrT3B0aW9ucyk6IFByb21pc2U8SUNsb3VkQXNzZW1ibHlTb3VyY2U+IHtcbiAgICBpZiAoIW9wdGlvbnMuYXBwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFwcCBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIHRoZSBhcHAgaXMgYSBwYXRoIHRvIGV4aXN0aW5nIHNuYXBzaG90IGFuZCB0aGVuIHVzZSBpdCBhcyBhbiBhc3NlbWJseSBkaXJlY3RvcnlcbiAgICBjb25zdCBwb3RlbnRpYWxDeFBhdGggPSBwYXRoLmpvaW4odGhpcy5vcHRpb25zLndvcmtpbmdEaXJlY3RvcnksIG9wdGlvbnMuYXBwKTtcbiAgICBpZiAoZnMucGF0aEV4aXN0c1N5bmMocG90ZW50aWFsQ3hQYXRoKSAmJiBmcy5zdGF0U3luYyhwb3RlbnRpYWxDeFBhdGgpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvb2xraXQuZnJvbUFzc2VtYmx5RGlyZWN0b3J5KHBvdGVudGlhbEN4UGF0aCk7XG4gICAgfVxuXG4gICAgbGV0IG91dGRpcjtcbiAgICBpZiAob3B0aW9ucy5vdXRwdXQpIHtcbiAgICAgIG91dGRpciA9IHBhdGguam9pbih0aGlzLm9wdGlvbnMud29ya2luZ0RpcmVjdG9yeSwgb3B0aW9ucy5vdXRwdXQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRvb2xraXQuZnJvbUNka0FwcChvcHRpb25zLmFwcCwge1xuICAgICAgd29ya2luZ0RpcmVjdG9yeTogdGhpcy5vcHRpb25zLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICBvdXRkaXIsXG4gICAgICBsb29rdXBzOiBvcHRpb25zLmxvb2t1cHMsXG4gICAgICBjb250ZXh0U3RvcmU6IG5ldyBNZW1vcnlDb250ZXh0KG9wdGlvbnMuY29udGV4dCksXG4gICAgICBlbnY6IHRoaXMub3B0aW9ucy5lbnYsXG4gICAgICBzeW50aE9wdGlvbnM6IHtcbiAgICAgICAgZGVidWc6IG9wdGlvbnMuZGVidWcsXG4gICAgICAgIHZlcnNpb25SZXBvcnRpbmc6IG9wdGlvbnMudmVyc2lvblJlcG9ydGluZyA/PyBmYWxzZSxcbiAgICAgICAgcGF0aE1ldGFkYXRhOiBvcHRpb25zLnBhdGhNZXRhZGF0YSA/PyBmYWxzZSxcbiAgICAgICAgYXNzZXRNZXRhZGF0YTogb3B0aW9ucy5hc3NldE1ldGFkYXRhID8/IGZhbHNlLFxuICAgICAgICBhc3NldFN0YWdpbmc6IG9wdGlvbnMuc3RhZ2luZyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFN0YWNrU2VsZWN0b3IgZnJvbSB0aGUgcHJvdmlkZWQgb3B0aW9ucy5cbiAgICovXG4gIHByaXZhdGUgc3RhY2tTZWxlY3RvcihvcHRpb25zOiBEZWZhdWx0Q2RrT3B0aW9ucyAmIHsgcmVhZG9ubHkgZXhjbHVzaXZlbHk/OiBib29sZWFuIH0pOiBTdGFja1NlbGVjdG9yIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RyYXRlZ3k6IG9wdGlvbnMuYWxsID8gU3RhY2tTZWxlY3Rpb25TdHJhdGVneS5BTExfU1RBQ0tTIDogU3RhY2tTZWxlY3Rpb25TdHJhdGVneS5QQVRURVJOX01VU1RfTUFUQ0gsXG4gICAgICBwYXR0ZXJuczogb3B0aW9ucy5zdGFja3MgPz8gWycqKiddLFxuICAgICAgZXhwYW5kOiBvcHRpb25zLmV4Y2x1c2l2ZWx5ID8gRXhwYW5kU3RhY2tTZWxlY3Rpb24uTk9ORSA6IEV4cGFuZFN0YWNrU2VsZWN0aW9uLlVQU1RSRUFNLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIERlcGxveW1lbnRNZXRob2QgZnJvbSB0aGUgcHJvdmlkZWQgb3B0aW9ucy5cbiAgICovXG4gIHByaXZhdGUgZGVwbG95bWVudE1ldGhvZChvcHRpb25zOiBEZXBsb3lPcHRpb25zKTogRGVwbG95bWVudE1ldGhvZCB7XG4gICAgaWYgKG9wdGlvbnMuaG90c3dhcCAmJiBvcHRpb25zLmhvdHN3YXAgIT09ICdmdWxsLWRlcGxveW1lbnQnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtZXRob2Q6ICdob3Rzd2FwJyxcbiAgICAgICAgZmFsbGJhY2s6IG9wdGlvbnMuaG90c3dhcCA9PT0gJ2ZhbGwtYmFjaycgPyB7IG1ldGhvZDogJ2NoYW5nZS1zZXQnIH0gOiB1bmRlZmluZWQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBtZXRob2Q6IG9wdGlvbnMuZGVwbG95bWVudE1ldGhvZCA/PyAnY2hhbmdlLXNldCcsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGF0IHRoZSByZWdpb25zIGZvciB0aGUgc3RhY2tzIGluIHRoZSBDbG91ZEFzc2VtYmx5IG1hdGNoIHRoZSByZWdpb25zIHJlcXVlc3RlZCBvbiB0aGUgZW5naW5lXG4gICAqXG4gICAqIFRoaXMgcHJldmVudHMgbWlzY29uZmlndXJhdGlvbiBvZiB0aGUgaW50ZWcgdGVzdCBhcHAuIFBlb3BsZSB0ZW5kIHRvIHB1dDpcbiAgICpcbiAgICogYGBgdHNcbiAgICogbmV3IFN0YWNrKGFwcCwgJ1N0YWNrJywge1xuICAgKiAgIGVudjoge1xuICAgKiAgICAgcmVnaW9uOiAnc29tZS1yZWdpb24tdGhhdC1zdWl0cy1tZScsXG4gICAqICAgfVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEludG8gdGhlaXIgaW50ZWcgdGVzdHMsIGluc3RlYWQgb2Y6XG4gICAqXG4gICAqIGBgYHRzXG4gICAqIHtcbiAgICogICByZWdpb246IHByb2Nlc3MuZW52LkNES19ERUZBVUxUX1JFR0lPTixcbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogVGhpcyBjYXRjaGVzIHRoYXQgbWlzY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVSZWdpb24oYXNtOiBJUmVhZGFibGVDbG91ZEFzc2VtYmx5KSB7XG4gICAgZm9yIChjb25zdCBzdGFjayBvZiBhc20uY2xvdWRBc3NlbWJseS5zdGFja3NSZWN1cnNpdmVseSkge1xuICAgICAgaWYgKHN0YWNrLmVudmlyb25tZW50LnJlZ2lvbiAhPT0gdGhpcy5vcHRpb25zLnJlZ2lvbiAmJiBzdGFjay5lbnZpcm9ubWVudC5yZWdpb24gIT09IFVOS05PV05fUkVHSU9OKSB7XG4gICAgICAgIHRoaXMuaW9Ib3N0Lm5vdGlmeSh7XG4gICAgICAgICAgYWN0aW9uOiAnZGVwbG95JyxcbiAgICAgICAgICBjb2RlOiAnQ0RLX1JVTk5FUl9XMDAwMCcsXG4gICAgICAgICAgdGltZTogbmV3IERhdGUoKSxcbiAgICAgICAgICBsZXZlbDogJ3dhcm4nLFxuICAgICAgICAgIG1lc3NhZ2U6IGBTdGFjayAke3N0YWNrLmRpc3BsYXlOYW1lfSBzeW50aGVzaXplcyBmb3IgcmVnaW9uICR7c3RhY2suZW52aXJvbm1lbnQucmVnaW9ufSwgZXZlbiB0aG91Z2ggJHt0aGlzLm9wdGlvbnMucmVnaW9ufSB3YXMgcmVxdWVzdGVkLiBQbGVhc2UgY29uZmlndXJlIFxcYHsgZW52OiB7IHJlZ2lvbjogcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfUkVHSU9OLCBhY2NvdW50OiBwcm9jZXNzLmVudi5DREtfREVGQVVMVF9BQ0NPVU5UIH0gfVxcYCwgb3IgdXNlIG5vIGVudiBhdCBhbGwuIERvIG5vdCBoYXJkY29kZSBhIHJlZ2lvbiBvciBhY2NvdW50LmAsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgc3RhY2tOYW1lOiBzdGFjay5kaXNwbGF5TmFtZSxcbiAgICAgICAgICAgIHN0YWNrUmVnaW9uOiBzdGFjay5lbnZpcm9ubWVudC5yZWdpb24sXG4gICAgICAgICAgICByZXF1ZXN0ZWRSZWdpb246IHRoaXMub3B0aW9ucy5yZWdpb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBBbiBJb0hvc3QgdXNlZCBpbiB0aGUgaW50ZWctcnVubmVyIHRvIHByb3ZpZGUgbm9uLWludGVyYWN0aXZlIG91dHB1dFxuICovXG5jbGFzcyBJbnRlZ1J1bm5lcklvSG9zdCBleHRlbmRzIE5vbkludGVyYWN0aXZlSW9Ib3N0IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb3BzOiBOb25JbnRlcmFjdGl2ZUlvSG9zdFByb3BzID0ge30pIHtcbiAgICBzdXBlcih7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGlzVFRZOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuICBwdWJsaWMgYXN5bmMgbm90aWZ5KG1zZzogSW9NZXNzYWdlPHVua25vd24+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IGNvbG9yO1xuICAgIHN3aXRjaCAobXNnLmxldmVsKSB7XG4gICAgICBjYXNlICdlcnJvcic6IGNvbG9yID0gY2hhbGsucmVkOyBicmVhaztcbiAgICAgIGNhc2UgJ3dhcm4nOiBjb2xvciA9IGNoYWxrLnllbGxvdzsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiBjb2xvciA9IGNoYWxrLmdyYXk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLm5vdGlmeSh7XG4gICAgICAuLi5tc2csXG4gICAgICBtZXNzYWdlOiBjb2xvcihtc2cubWVzc2FnZSksXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBbiBJb0hvc3QgdGhhdCBkb2Vzbid0IGRvIGFueXRoaW5nXG4gKi9cbmNsYXNzIE5vb3BJb0hvc3QgaW1wbGVtZW50cyBJSW9Ib3N0IHtcbiAgcHVibGljIGFzeW5jIG5vdGlmeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgfVxuICBwdWJsaWMgYXN5bmMgcmVxdWVzdFJlc3BvbnNlPFQ+KG1zZzogSW9SZXF1ZXN0PHVua25vd24sIFQ+KTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIG1zZy5kZWZhdWx0UmVzcG9uc2U7XG4gIH1cbn1cbiJdfQ==
package/lib/index.js CHANGED
@@ -5367,13 +5367,12 @@ var init_integration_tests = __esm({
5367
5367
  constructor(info) {
5368
5368
  this.info = info;
5369
5369
  this.appCommand = info.appCommand ?? "node {filePath}";
5370
+ this.directory = process.cwd();
5370
5371
  this.absoluteFileName = path.resolve(info.fileName);
5371
- this.fileName = path.relative(process.cwd(), info.fileName);
5372
- const parsed = path.parse(this.fileName);
5372
+ this.fileName = path.relative(this.directory, info.fileName);
5373
5373
  this.discoveryRelativeFileName = path.relative(info.discoveryRoot, info.fileName);
5374
- this.directory = info.watch ? process.cwd() : parsed.dir;
5375
- const relDiscoveryRoot = path.relative(process.cwd(), info.discoveryRoot);
5376
- this.testName = this.directory === path.join(relDiscoveryRoot, "test") || this.directory === path.join(relDiscoveryRoot) ? parsed.name : path.join(path.relative(this.info.discoveryRoot, parsed.dir), parsed.name);
5374
+ const parsed = path.parse(this.fileName);
5375
+ this.testName = path.join(path.relative(this.info.discoveryRoot, parsed.dir), parsed.name);
5377
5376
  this.normalizedTestName = parsed.name;
5378
5377
  this.snapshotDir = path.join(parsed.dir, `${parsed.base}.snapshot`);
5379
5378
  this.temporaryOutputDir = path.join(parsed.dir, `${CDK_OUTDIR_PREFIX}.${parsed.base}.snapshot`);
@@ -10491,7 +10490,7 @@ function parseCliArgs(args = []) {
10491
10490
  configParser: configFromFile,
10492
10491
  default: "integ.config.json",
10493
10492
  desc: "Load options from a JSON config file. Options provided as CLI arguments take precedent."
10494
- }).option("watch", { type: "boolean", default: false, desc: "Perform integ tests in watch mode" }).option("list", { type: "boolean", default: false, desc: "List tests instead of running them" }).option("clean", { type: "boolean", default: true, desc: "Clean up and delete stack after test is completed (use --no-clean to negate)" }).option("verbose", { type: "boolean", default: false, alias: "v", count: true, desc: "Verbose logs and metrics on integration tests durations (specify multiple times to increase verbosity)" }).option("dry-run", { type: "boolean", default: false, desc: "do not actually deploy the stack. just update the snapshot (not recommended!)" }).option("update-on-failed", { type: "boolean", default: false, desc: "rerun integration tests and update snapshots for failed tests." }).option("force", { type: "boolean", default: false, desc: "Rerun all integration tests even if tests are passing" }).option("parallel-regions", { type: "array", desc: "Tests are run in parallel across these regions. To prevent tests from running in parallel, provide only a single region", default: [] }).options("directory", { type: "string", default: "test", desc: "starting directory to discover integration tests. Tests will be discovered recursively from this directory" }).options("profiles", { type: "array", desc: "list of AWS profiles to use. Tests will be run in parallel across each profile+regions", default: [] }).options("max-workers", { type: "number", desc: "The max number of workerpool workers to use when running integration tests in parallel", default: 16 }).options("exclude", { type: "boolean", desc: "Run all tests in the directory, except the specified TESTs", default: false }).option("strict", { type: "boolean", default: false, desc: "Fail if any specified tests are not found" }).options("from-file", { type: "string", desc: "Read TEST names from a file (one TEST per line)" }).option("inspect-failures", { type: "boolean", desc: "Keep the integ test cloud assembly if a failure occurs for inspection", default: false }).option("disable-update-workflow", { type: "boolean", default: false, desc: 'If this is "true" then the stack update workflow will be disabled' }).option("language", {
10493
+ }).option("watch", { type: "boolean", default: false, desc: "Perform integ tests in watch mode" }).option("list", { type: "boolean", default: false, desc: "List tests instead of running them" }).option("clean", { type: "boolean", default: true, desc: "Clean up and delete stack after test is completed (use --no-clean to negate)" }).option("verbose", { type: "boolean", default: false, alias: "v", count: true, desc: "Verbose logs and metrics on integration tests durations (specify multiple times to increase verbosity)" }).option("dry-run", { type: "boolean", default: false, desc: "do not actually deploy the stack. just update the snapshot (not recommended!)" }).option("update-on-failed", { type: "boolean", default: false, desc: "rerun integration tests and update snapshots for failed tests." }).option("force", { type: "boolean", default: false, desc: "Rerun all integration tests even if tests are passing" }).option("parallel-regions", { type: "array", desc: "Tests are run in parallel across these regions. To prevent tests from running in parallel, provide only a single region", default: [] }).options("directory", { type: "string", default: "test", desc: "starting directory to discover integration tests. Tests will be discovered recursively from this directory" }).options("profiles", { type: "array", desc: "list of AWS profiles to use. Tests will be run in parallel across each profile+regions", default: [] }).options("max-workers", { type: "number", desc: "The max number of workerpool workers to use when running integration tests in parallel", default: 16 }).options("exclude", { type: "boolean", desc: "Run all tests in the directory, except the specified TESTs", default: false }).option("strict", { type: "boolean", default: false, desc: "Fail if any specified tests are not found" }).options("from-file", { type: "string", desc: "Read TEST names from a file (one TEST per line)" }).option("inspect-failures", { type: "boolean", desc: "Keep the integ test cloud assembly if a failure occurs for inspection", default: false }).option("disable-update-workflow", { type: "boolean", default: void 0, desc: "DEPRECATED, use --[no]-update-workflow instead" }).option("update-workflow", { type: "boolean", default: void 0, desc: "Deploys the committed snapshot before the updated application. Only works if snapshots are region-agnostic." }).option("language", {
10495
10494
  alias: "l",
10496
10495
  default: ["javascript", "typescript", "python", "go"],
10497
10496
  choices: ["javascript", "typescript", "python", "go"],
@@ -10518,6 +10517,10 @@ function parseCliArgs(args = []) {
10518
10517
  throw new Error("Cannot use --strict with --exclude");
10519
10518
  }
10520
10519
  const requestedTests = fromFile ? fs2.readFileSync(fromFile, { encoding: "utf8" }).split("\n").filter((x) => x) : tests.length > 0 ? tests : void 0;
10520
+ if (argv["disable-update-workflow"] !== void 0 && argv["update-workflow"] !== void 0) {
10521
+ throw new Error("--disable-update-workflow and --[no-]update-workflow cannot be used together");
10522
+ }
10523
+ let updateWorkflow = argv["update-workflow"] !== void 0 ? !!argv["update-workflow"] : !argv["disable-update-workflow"];
10521
10524
  return {
10522
10525
  tests: requestedTests,
10523
10526
  app: argv.app,
@@ -10537,7 +10540,7 @@ function parseCliArgs(args = []) {
10537
10540
  clean: argv.clean,
10538
10541
  force: argv.force,
10539
10542
  dryRun: argv["dry-run"],
10540
- disableUpdateWorkflow: argv["disable-update-workflow"],
10543
+ updateWorkflow,
10541
10544
  language: arrayFromYargs(argv.language),
10542
10545
  watch: argv.watch,
10543
10546
  strict: argv.strict,
@@ -10609,7 +10612,7 @@ async function run(options, { engine }) {
10609
10612
  clean: options.clean,
10610
10613
  dryRun: options.dryRun,
10611
10614
  verbosity: options.verbosity,
10612
- updateWorkflow: !options.disableUpdateWorkflow,
10615
+ updateWorkflow: options.updateWorkflow,
10613
10616
  watch: options.watch
10614
10617
  });
10615
10618
  testsSucceeded = success2;
@@ -10654,8 +10657,8 @@ function validateWatchArgs(args) {
10654
10657
  if (args.testRegions && args.testRegions.length > 1 || args.profiles && args.profiles.length > 1 || args.tests.length > 1) {
10655
10658
  throw new Error("Running with watch only supports a single test. Only provide a single optionto `--profiles` `--parallel-regions` `--max-workers");
10656
10659
  }
10657
- if (args.runUpdateOnFailed || args.disableUpdateWorkflow || args.force || args.dryRun) {
10658
- warning("args `--update-on-failed`, `--disable-update-workflow`, `--force`, `--dry-run` have no effect when running with `--watch`");
10660
+ if (args.runUpdateOnFailed || args.updateWorkflow || args.force || args.dryRun) {
10661
+ warning("args `--update-on-failed`, `--update-workflow`, `--force`, `--dry-run` have no effect when running with `--watch`");
10659
10662
  }
10660
10663
  }
10661
10664
  }
@@ -9,9 +9,8 @@ function makeEngine(options) {
9
9
  return new toolkit_lib_1.ToolkitLibRunnerEngine({
10
10
  workingDirectory: options.test.directory,
11
11
  showOutput: options.showOutput,
12
- env: {
13
- ...options.env,
14
- },
12
+ env: options.env,
13
+ region: options.region,
15
14
  });
16
15
  case 'cli-wrapper':
17
16
  default:
@@ -20,8 +19,10 @@ function makeEngine(options) {
20
19
  showOutput: options.showOutput,
21
20
  env: {
22
21
  ...options.env,
22
+ // The CDK CLI will interpret this and use it usefully
23
+ AWS_REGION: options.region,
23
24
  },
24
25
  });
25
26
  }
26
27
  }
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZW5naW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBY0EsZ0NBb0JDO0FBakNELDhEQUF5RDtBQUV6RCx3REFBZ0U7QUFXaEUsU0FBZ0IsVUFBVSxDQUFDLE9BQTJCO0lBQ3BELFFBQVEsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLEtBQUssYUFBYTtZQUNoQixPQUFPLElBQUksb0NBQXNCLENBQUM7Z0JBQ2hDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUztnQkFDeEMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO2dCQUM5QixHQUFHLEVBQUU7b0JBQ0gsR0FBRyxPQUFPLENBQUMsR0FBRztpQkFDZjthQUNGLENBQUMsQ0FBQztRQUNMLEtBQUssYUFBYSxDQUFDO1FBQ25CO1lBQ0UsT0FBTyxJQUFJLCtCQUFhLENBQUM7Z0JBQ3ZCLFNBQVMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVM7Z0JBQ2pDLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtnQkFDOUIsR0FBRyxFQUFFO29CQUNILEdBQUcsT0FBTyxDQUFDLEdBQUc7aUJBQ2Y7YUFDRixDQUFDLENBQUM7SUFDUCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSUNkayB9IGZyb20gJ0Bhd3MtY2RrL2Nkay1jbGktd3JhcHBlcic7XG5pbXBvcnQgeyBDZGtDbGlXcmFwcGVyIH0gZnJvbSAnQGF3cy1jZGsvY2RrLWNsaS13cmFwcGVyJztcbmltcG9ydCB0eXBlIHsgSW50ZWdSdW5uZXJPcHRpb25zIH0gZnJvbSAnLi9ydW5uZXItYmFzZSc7XG5pbXBvcnQgeyBUb29sa2l0TGliUnVubmVyRW5naW5lIH0gZnJvbSAnLi4vZW5naW5lcy90b29sa2l0LWxpYic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW5naW5lT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgQ0RLIFRvb2xraXQgZW5naW5lIHRvIGJlIHVzZWQgYnkgdGhlIHJ1bm5lci5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJjbGktd3JhcHBlclwiXG4gICAqL1xuICByZWFkb25seSBlbmdpbmU/OiAnY2xpLXdyYXBwZXInIHwgJ3Rvb2xraXQtbGliJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VFbmdpbmUob3B0aW9uczogSW50ZWdSdW5uZXJPcHRpb25zKTogSUNkayB7XG4gIHN3aXRjaCAob3B0aW9ucy5lbmdpbmUpIHtcbiAgICBjYXNlICd0b29sa2l0LWxpYic6XG4gICAgICByZXR1cm4gbmV3IFRvb2xraXRMaWJSdW5uZXJFbmdpbmUoe1xuICAgICAgICB3b3JraW5nRGlyZWN0b3J5OiBvcHRpb25zLnRlc3QuZGlyZWN0b3J5LFxuICAgICAgICBzaG93T3V0cHV0OiBvcHRpb25zLnNob3dPdXRwdXQsXG4gICAgICAgIGVudjoge1xuICAgICAgICAgIC4uLm9wdGlvbnMuZW52LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgY2FzZSAnY2xpLXdyYXBwZXInOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbmV3IENka0NsaVdyYXBwZXIoe1xuICAgICAgICBkaXJlY3Rvcnk6IG9wdGlvbnMudGVzdC5kaXJlY3RvcnksXG4gICAgICAgIHNob3dPdXRwdXQ6IG9wdGlvbnMuc2hvd091dHB1dCxcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgLi4ub3B0aW9ucy5lbnYsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxufVxuXG4iXX0=
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5naW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZW5naW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBY0EsZ0NBcUJDO0FBbENELDhEQUF5RDtBQUV6RCx3REFBZ0U7QUFXaEUsU0FBZ0IsVUFBVSxDQUFDLE9BQTJCO0lBQ3BELFFBQVEsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLEtBQUssYUFBYTtZQUNoQixPQUFPLElBQUksb0NBQXNCLENBQUM7Z0JBQ2hDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUztnQkFDeEMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO2dCQUM5QixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7Z0JBQ2hCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTthQUN2QixDQUFDLENBQUM7UUFDTCxLQUFLLGFBQWEsQ0FBQztRQUNuQjtZQUNFLE9BQU8sSUFBSSwrQkFBYSxDQUFDO2dCQUN2QixTQUFTLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTO2dCQUNqQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7Z0JBQzlCLEdBQUcsRUFBRTtvQkFDSCxHQUFHLE9BQU8sQ0FBQyxHQUFHO29CQUNkLHNEQUFzRDtvQkFDdEQsVUFBVSxFQUFFLE9BQU8sQ0FBQyxNQUFNO2lCQUMzQjthQUNGLENBQUMsQ0FBQztJQUNQLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBJQ2RrIH0gZnJvbSAnQGF3cy1jZGsvY2RrLWNsaS13cmFwcGVyJztcbmltcG9ydCB7IENka0NsaVdyYXBwZXIgfSBmcm9tICdAYXdzLWNkay9jZGstY2xpLXdyYXBwZXInO1xuaW1wb3J0IHR5cGUgeyBJbnRlZ1J1bm5lck9wdGlvbnMgfSBmcm9tICcuL3J1bm5lci1iYXNlJztcbmltcG9ydCB7IFRvb2xraXRMaWJSdW5uZXJFbmdpbmUgfSBmcm9tICcuLi9lbmdpbmVzL3Rvb2xraXQtbGliJztcblxuZXhwb3J0IGludGVyZmFjZSBFbmdpbmVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBDREsgVG9vbGtpdCBlbmdpbmUgdG8gYmUgdXNlZCBieSB0aGUgcnVubmVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcImNsaS13cmFwcGVyXCJcbiAgICovXG4gIHJlYWRvbmx5IGVuZ2luZT86ICdjbGktd3JhcHBlcicgfCAndG9vbGtpdC1saWInO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUVuZ2luZShvcHRpb25zOiBJbnRlZ1J1bm5lck9wdGlvbnMpOiBJQ2RrIHtcbiAgc3dpdGNoIChvcHRpb25zLmVuZ2luZSkge1xuICAgIGNhc2UgJ3Rvb2xraXQtbGliJzpcbiAgICAgIHJldHVybiBuZXcgVG9vbGtpdExpYlJ1bm5lckVuZ2luZSh7XG4gICAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6IG9wdGlvbnMudGVzdC5kaXJlY3RvcnksXG4gICAgICAgIHNob3dPdXRwdXQ6IG9wdGlvbnMuc2hvd091dHB1dCxcbiAgICAgICAgZW52OiBvcHRpb25zLmVudixcbiAgICAgICAgcmVnaW9uOiBvcHRpb25zLnJlZ2lvbixcbiAgICAgIH0pO1xuICAgIGNhc2UgJ2NsaS13cmFwcGVyJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG5ldyBDZGtDbGlXcmFwcGVyKHtcbiAgICAgICAgZGlyZWN0b3J5OiBvcHRpb25zLnRlc3QuZGlyZWN0b3J5LFxuICAgICAgICBzaG93T3V0cHV0OiBvcHRpb25zLnNob3dPdXRwdXQsXG4gICAgICAgIGVudjoge1xuICAgICAgICAgIC4uLm9wdGlvbnMuZW52LFxuICAgICAgICAgIC8vIFRoZSBDREsgQ0xJIHdpbGwgaW50ZXJwcmV0IHRoaXMgYW5kIHVzZSBpdCB1c2VmdWxseVxuICAgICAgICAgIEFXU19SRUdJT046IG9wdGlvbnMucmVnaW9uLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cbn1cblxuIl19