@mavogel/mvc-projen 0.0.35 → 0.0.36

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/.jsii CHANGED
@@ -224,6 +224,6 @@
224
224
  "symbolId": "src/projects/cdk-construct:MvcCdkConstructLibraryOptions"
225
225
  }
226
226
  },
227
- "version": "0.0.35",
228
- "fingerprint": "92/HpNqbFi5a9BNHDFI7eHa8H9HkA89N4NQu/IqkvG4="
227
+ "version": "0.0.36",
228
+ "fingerprint": "QaPX8tMgMNWzGM89YjSeScag/Z3bhVrhJxIiZmOQBRE="
229
229
  }
@@ -73,7 +73,7 @@ const DEFAULT_CDK_VERSION = '2.261.0';
73
73
  * @pjid mvc-awscdk-construct
74
74
  */
75
75
  class MvcCdkConstructLibrary extends awscdk_1.AwsCdkConstructLibrary {
76
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@mavogel/mvc-projen.MvcCdkConstructLibrary", version: "0.0.35" };
76
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@mavogel/mvc-projen.MvcCdkConstructLibrary", version: "0.0.36" };
77
77
  constructor(options) {
78
78
  const baseAssetsDirectory = options.baseAssetsDirectory ?? `${process.cwd()}/node_modules/@mavogel/mvc-projen/assets`;
79
79
  const integTestRegions = options.integTestRegions ?? ['eu-west-1', 'eu-west-2'];
@@ -388,6 +388,52 @@ add tools or links which inspired you
388
388
  ...buildJobSteps.slice(4),
389
389
  ],
390
390
  });
391
+ // Pin GitHub Actions that projen otherwise references by a mutable tag,
392
+ // and stop checkout steps that never push back with it from persisting a
393
+ // git credential on the runner - per zizmor's unpinned-uses / artipacked
394
+ // audits (https://docs.zizmor.sh/audits/). Centralized here so every
395
+ // project built on MvcCdkConstructLibrary gets a clean `zizmor .` run
396
+ // without reimplementing this in its own .projenrc.ts.
397
+ this.github?.actions.set('actions/setup-node@v7.0.0', 'actions/setup-node@820762786026740c76f36085b0efc47a31fe5020'); // v7.0.0
398
+ this.github?.actions.set('actions/setup-python@v7.0.0', 'actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97'); // v7.0.0
399
+ this.github?.actions.set('peter-evans/create-pull-request@v8.1.1', 'peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1'); // v8.1.1
400
+ const disableCheckoutCredentialPersistence = (workflowName, jobIds) => {
401
+ const workflow = this.github?.tryFindWorkflow(workflowName);
402
+ if (!workflow)
403
+ return;
404
+ for (const jobId of jobIds) {
405
+ const job = workflow.getJob(jobId);
406
+ if (!job || !('steps' in job))
407
+ continue;
408
+ // `job.steps` is a bound accessor function until a job's first
409
+ // `updateJob()` call, after which it becomes a plain array (see the
410
+ // "TODO: figure out why wrong types" comment on the build.yml patch
411
+ // above) - so resolve it defensively rather than assuming either shape.
412
+ const rawSteps = job.steps;
413
+ const currentSteps = typeof rawSteps === 'function' ? rawSteps() : rawSteps;
414
+ workflow.updateJob(jobId, {
415
+ ...job,
416
+ steps: currentSteps.map((step) => step.id === 'checkout'
417
+ ? { ...step, with: { ...step.with, 'persist-credentials': false } }
418
+ : step),
419
+ });
420
+ }
421
+ };
422
+ // Excludes build.yml's `self-mutation` job, which relies on the
423
+ // persisted credential to `git push` its patch back to the PR branch.
424
+ disableCheckoutCredentialPersistence('build', ['build', 'package-js', 'package-python']);
425
+ disableCheckoutCredentialPersistence('upgrade-main', ['upgrade', 'pr']);
426
+ // The release workflow's `release_npm`/`release_pypi` jobs are only
427
+ // added by the `Release` component's own `preSynthesize()`, which runs
428
+ // during `project.synth()` - after this constructor returns. Patch them
429
+ // from a component added afterwards, so its `preSynthesize()` runs later
430
+ // still (component preSynthesize order follows construction order).
431
+ class ReleaseWorkflowCredentialPatch extends projen_1.Component {
432
+ preSynthesize() {
433
+ disableCheckoutCredentialPersistence('release', ['release', 'release_npm', 'release_pypi']);
434
+ }
435
+ }
436
+ new ReleaseWorkflowCredentialPatch(this);
391
437
  this.package.setScript('integ-test', `integ-runner --directory ./integ-tests ${integTestRegions?.map(region => `--parallel-regions ${region}`).join(' ')} --update-on-failed`);
392
438
  new projen_1.TextFile(this, '.github/ISSUE_TEMPLATE/bug_report.md', {
393
439
  lines: [fs.readFileSync(`${baseAssetsDirectory}/common/github_bug_report.md`).toString()],
@@ -484,4 +530,4 @@ class SampleCode extends projen_1.Component {
484
530
  fs.writeFileSync(path.join(examplesdir, 'main.ts'), fs.readFileSync(`${this.options.baseAssetsDirectory}/cdk-construct/examples_simple_main.ts`).toString());
485
531
  }
486
532
  }
487
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNvbnN0cnVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9qZWN0cy9jZGstY29uc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBRTdCLG1DQUFzRjtBQUN0Riw4Q0FBeUc7QUFDekcsOENBQStEO0FBRy9ELDJFQUEyRTtBQUMzRSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDM0IsTUFBTSxpQkFBaUIsR0FBRyxzQkFBYSxDQUFDLFdBQVcsQ0FBQztBQUVwRCxvRkFBb0Y7QUFDcEYsb0ZBQW9GO0FBQ3BGLG1FQUFtRTtBQUNuRSxxRkFBcUY7QUFDckYsaUVBQWlFO0FBQ2pFLGdGQUFnRjtBQUNoRiw2Q0FBNkM7QUFDN0MsTUFBTSx5QkFBeUIsR0FBRyxTQUFTLENBQUM7QUFFNUMscUVBQXFFO0FBQ3JFLHdFQUF3RTtBQUN4RSwwRUFBMEU7QUFDMUUseUVBQXlFO0FBQ3pFLHlFQUF5RTtBQUN6RSwyRUFBMkU7QUFDM0UsMkNBQTJDO0FBQzNDLE1BQU0sNEJBQTRCLEdBQUcsU0FBUyxDQUFDO0FBRS9DLDBFQUEwRTtBQUMxRSw0RUFBNEU7QUFDNUUsMkVBQTJFO0FBQzNFLHlDQUF5QztBQUN6QywwRUFBMEU7QUFDMUUsNEVBQTRFO0FBQzVFLG1EQUFtRDtBQUNuRCxNQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztBQXFCdEM7Ozs7R0FJRztBQUNILE1BQWEsc0JBQXVCLFNBQVEsK0JBQXNCOztJQUVoRSxZQUFZLE9BQXNDO1FBQ2hELE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSwwQ0FBMEMsQ0FBQztRQUN0SCxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLENB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L0MsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsd0NBQXdDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQy9KLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IENvbXBvbmVudCwgamF2YXNjcmlwdCwgUmVsZWFzYWJsZUNvbW1pdHMsIFRleHRGaWxlLCBZYW1sRmlsZSB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5LCBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucywgTGFtYmRhUnVudGltZSB9IGZyb20gJ3Byb2plbi9saWIvYXdzY2RrJztcbmltcG9ydCB7IERlcGVuZGFib3RTY2hlZHVsZUludGVydmFsIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWInO1xuaW1wb3J0IHsgSm9iU3RlcCB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbCc7XG5cbi8vIFNldCB0aGUgbWluaW11bSBub2RlIHZlcnNpb24gZm9yIEFXUyBDREsgYW5kIHRoZSBHaXRIdWIgYWN0aW9ucyB3b3JrZmxvd1xuY29uc3Qgbm9kZVZlcnNpb24gPSAnMjQueCc7XG5jb25zdCBsYW1iZGFOb2RlVmVyc2lvbiA9IExhbWJkYVJ1bnRpbWUuTk9ERUpTXzI0X1g7XG5cbi8vIFRoZSBsYXN0IEBhd3MtY2RrL2ludGVnLXJ1bm5lciB2ZXJzaW9uIHZlcmlmaWVkIGFnYWluc3QgbnBtIChjaGVja2VkIDIwMjYtMDctMjEpLlxuLy8gaW50ZWctcnVubmVyIHVzZXMgcGxhaW4gdmVyc2lvbnMgKG5vIC1hbHBoYS4wIHN1ZmZpeCkgYW5kIGhhcyBoaXN0b3JpY2FsbHkgbGFnZ2VkXG4vLyBvciBzdG9wcGVkIHRyYWNraW5nIGF3cy1jZGstbGliJ3MgdmVyc2lvbiBmb3Igc3RyZXRjaGVzIG9mIHRpbWUuXG4vLyBAYXdzLWNkay9pbnRlZy10ZXN0cy1hbHBoYSBhbmQgYXdzbGludCBjb250aW51ZSB0byBwdWJsaXNoIGFuZCB0cmFjayBDREsgdmVyc2lvbnMuXG4vLyBTSE9SVENVVDogaGFyZGNvZGVkIGNhcCByZXF1aXJlcyBtYW51YWwgcmUtdmVyaWZpY2F0aW9uIC0tIHJ1blxuLy8gYG5wbSB2aWV3IEBhd3MtY2RrL2ludGVnLXJ1bm5lciB2ZXJzaW9ucyAtLWpzb25gIGFuZCBidW1wIHRoaXMgaWYgYXdzLWNkay1saWJcbi8vIGhhcyByZWxlYXNlZCBuZXdlciB2ZXJzaW9ucyB0aGFuIHRoaXMgb25lLlxuY29uc3QgTEFTVF9JTlRFR19SVU5ORVJfVkVSU0lPTiA9ICcyLjIwMy4wJztcblxuLy8gQXdzQ2RrQ29uc3RydWN0TGlicmFyeU9wdGlvbnMuY2RrVmVyc2lvbidzIG93biB1cHN0cmVhbSBgQGRlZmF1bHRgXG4vLyAobm9kZV9tb2R1bGVzL3Byb2plbi9saWIvYXdzY2RrL2F3c2Nkay1kZXBzLmQudHMpIC0gd2hhdCBgcHJvamVuIG5ld2Bcbi8vIGZpbGxzIGluIHdoZW4gYC0tY2RrVmVyc2lvbmAgaXMgb21pdHRlZC4ganNpaSBmb3JiaWRzIGEgZGVyaXZlZCBvcHRpb25zXG4vLyBpbnRlcmZhY2UgZnJvbSByZS1kZWNsYXJpbmcgYW4gaW5oZXJpdGVkIG1lbWJlciAoSlNJSTUwMTU6IFwicmVzdWx0cyBpblxuLy8gaW52YWxpZCBDI1wiKSwgc28gd2UgY2FuJ3Qgb3ZlcnJpZGUgdGhlIGBAZGVmYXVsdGAgZG9jIHRoZSBDTEkgcmVmbGVjdHNcbi8vIG9uIHRvIGNoYW5nZSB0aGF0LiBEZXRlY3RpbmcgdGhpcyBleGFjdCB2YWx1ZSBiZWxvdyBhbmQgc3Vic3RpdHV0aW5nIG91clxuLy8gb3duIGRlZmF1bHQgaXMgdGhlIG9ubHkgcmVtYWluaW5nIGxldmVyLlxuY29uc3QgVVBTVFJFQU1fREVGQVVMVF9DREtfVkVSU0lPTiA9ICcyLjE4OS4xJztcblxuLy8gT3VyIGRlZmF1bHQgYGNka1ZlcnNpb25gIHdoZW4gdGhlIGNhbGxlciAob3IgYHByb2plbiBuZXdgKSBkb2Vzbid0IHBhc3Ncbi8vIG9uZS4gTXVzdCBzdGF5ID49IDIuMjU3LjA6IGNkay1uYWcgdjMgKGZvcmNlZCBiZWxvdyB2aWEgYWRkRGVwcykgcmVxdWlyZXNcbi8vIGl0IGFzIGEgcGVlciwgYW5kIHRoZSB1cHN0cmVhbSBkZWZhdWx0IGFib3ZlIGZhaWxzIGBucG0gaW5zdGFsbGAgd2l0aCBhblxuLy8gRVJFU09MVkUgY29uZmxpY3Qgb24gYSBmcmVzaCBzY2FmZm9sZC5cbi8vIFNIT1JUQ1VUOiBib3RoIGhhcmRjb2RlZCB2ZXJzaW9ucyByZXF1aXJlIG1hbnVhbCByZS12ZXJpZmljYXRpb24gLS0gcnVuXG4vLyBgbnBtIHZpZXcgYXdzLWNkay1saWIgdmVyc2lvbmAgYW5kIHJlLWNoZWNrIGF3c2Nkay1kZXBzLmQudHMncyBgQGRlZmF1bHRgXG4vLyBwZXJpb2RpY2FsbHkgKGl0IG1heSBkcmlmdCBvbiBhIHByb2plbiB1cGdyYWRlKS5cbmNvbnN0IERFRkFVTFRfQ0RLX1ZFUlNJT04gPSAnMi4yNjEuMCc7XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgZm9yIHRoZSBjb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNdmNDZGtDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucyBleHRlbmRzIEF3c0Nka0NvbnN0cnVjdExpYnJhcnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIEJhc2UgZGlyZWN0b3J5IGZvciB0aGUgYXNzZXRzXG4gICAqXG4gICAqIEBkZWZhdWx0ICR7cHJvY2Vzcy5jd2QoKX0vbm9kZV9tb2R1bGVzL212Yy1wcm9qZW4vYXNzZXRzXG4gICAqL1xuICByZWFkb25seSBiYXNlQXNzZXRzRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVnaW9ucyB0byBydW4gdGhlIGludGVnIHRlc3RzIGluXG4gICAqXG4gICAqIEBkZWZhdWx0IGV1LXdlc3QtMSBhbmQgZXUtd2VzdC0yXG4gICAqL1xuICByZWFkb25seSBpbnRlZ1Rlc3RSZWdpb25zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVHlwZVNjcmlwdCBsaWJyYXJ5XG4gKlxuICogQHBqaWQgbXZjLWF3c2Nkay1jb25zdHJ1Y3RcbiAqL1xuZXhwb3J0IGNsYXNzIE12Y0Nka0NvbnN0cnVjdExpYnJhcnkgZXh0ZW5kcyBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5IHtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBNdmNDZGtDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucykge1xuICAgIGNvbnN0IGJhc2VBc3NldHNEaXJlY3RvcnkgPSBvcHRpb25zLmJhc2VBc3NldHNEaXJlY3RvcnkgPz8gYCR7cHJvY2Vzcy5jd2QoKX0vbm9kZV9tb2R1bGVzL0BtYXZvZ2VsL212Yy1wcm9qZW4vYXNzZXRzYDtcbiAgICBjb25zdCBpbnRlZ1Rlc3RSZWdpb25zID0gb3B0aW9ucy5pbnRlZ1Rlc3RSZWdpb25zID8/IFsnZXUtd2VzdC0xJywgJ2V1LXdlc3QtMiddO1xuICAgIC8vIGBvcHRpb25zLmNka1ZlcnNpb25gIGlzIHR5cGVkIGFzIHJlcXVpcmVkLCBidXQgYHByb2plbiBuZXdgIGFsd2F5c1xuICAgIC8vIHN1cHBsaWVzIGEgdmFsdWUgdmlhIGpzaWkgcmVmbGVjdGlvbiAtIGVpdGhlciBhIHJlYWwgdXNlciBvdmVycmlkZSxcbiAgICAvLyBvciAoaWYgLS1jZGtWZXJzaW9uIHdhcyBvbWl0dGVkKSB0aGUgdXBzdHJlYW0gYEBkZWZhdWx0YCBsaXRlcmFsXG4gICAgLy8gaXRzZWxmLiBTdWJzdGl0dXRlIG91cnMgb25seSBpbiB0aGUgbGF0dGVyIGNhc2UsIHZlcmlmaWVkIGJlbG93LlxuICAgIGNvbnN0IGNka1ZlcnNpb24gPSAoIW9wdGlvbnMuY2RrVmVyc2lvbiB8fCBvcHRpb25zLmNka1ZlcnNpb24gPT09IFVQU1RSRUFNX0RFRkFVTFRfQ0RLX1ZFUlNJT04pXG4gICAgICA/IERFRkFVTFRfQ0RLX1ZFUlNJT05cbiAgICAgIDogb3B0aW9ucy5jZGtWZXJzaW9uO1xuXG4gICAgLy8gQXdzQ2RrQ29uc3RydWN0TGlicmFyeSdzIGBzdXBlcigpYCBjYWxsIGJlbG93IHdpcmVzIHVwIGFuIEF1dG9EaXNjb3ZlclxuICAgIC8vIGNvbXBvbmVudCB3aG9zZSBjb25zdHJ1Y3RvciBzeW5jaHJvbm91c2x5IGdsb2JzIGBzcmNkaXJgIGZvclxuICAgIC8vIGAqLmxhbWJkYS50c2AgZW50cnlwb2ludHMgLSBpdCBuZXZlciByZS1zY2FucyBsYXRlci4gU2FtcGxlQ29kZSAoYWRkZWRcbiAgICAvLyBhdCB0aGUgZW5kIG9mIHRoaXMgY29uc3RydWN0b3IpIHdyaXRlcyB0aGUgc2FtcGxlIGNyZC1leGFtcGxlLmxhbWJkYS50c1xuICAgIC8vIGR1cmluZyB0aGUgcHJvamVjdCdzIHN5bnRoZXNpemUoKSBwaGFzZSwgd2hpY2ggcnVucyBhZnRlciBldmVyeVxuICAgIC8vIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yLCBpbmNsdWRpbmcgQXV0b0Rpc2NvdmVyJ3MgLSBzbyB0aGUgZmlsZSBuZXZlclxuICAgIC8vIGV4aXN0ZWQgZm9yIEF1dG9EaXNjb3ZlciB0byBmaW5kLCBubyBMYW1iZGFGdW5jdGlvbi9CdW5kbGVyIGV2ZXIgZ290XG4gICAgLy8gY3JlYXRlZCBmb3IgaXQsIGFuZCB0aGUgZ2VuZXJhdGVkIGNyZC1leGFtcGxlLnRzIHdhcyBsZWZ0IGltcG9ydGluZyBhXG4gICAgLy8gJy4vY3JkLWV4YW1wbGUtZnVuY3Rpb24nIGNvbnN0cnVjdCBmaWxlIHRoYXQgbm8gb25lIHdyb3RlLCBicmVha2luZ1xuICAgIC8vIGVzbGludCBvbiBldmVyeSBzY2FmZm9sZC4gV3JpdGUganVzdCB0aGlzIG9uZSBmaWxlIGVhcmx5IGVub3VnaCBmb3JcbiAgICAvLyBBdXRvRGlzY292ZXIgdG8gc2VlIGl0OyBTYW1wbGVDb2RlIHN0aWxsIG93bnMgZXZlcnl0aGluZyBlbHNlLlxuICAgIC8vIFNraXAgdW5kZXIgSmVzdCAoTk9ERV9FTlY9dGVzdCwgbWF0Y2hpbmcgcHJvamVuJ3Mgb3duIElTX1RFU1RfUlVOXG4gICAgLy8gY2hlY2spOiB3aGVuIG9wdGlvbnMub3V0ZGlyIGlzIHVuc2V0ICh0cnVlIGZvciBldmVyeSB0ZXN0IGluIHRoaXNcbiAgICAvLyByZXBvKSwgcHJvamVuJ3MgYmFzZSBQcm9qZWN0IGNsYXNzIC0gY29uc3RydWN0ZWQgdmlhIHN1cGVyKCkgYmVsb3cgLVxuICAgIC8vIHJlZGlyZWN0cyB0aGUgKnJlYWwqIG91dGRpciB0byBhIGZyZXNoIHRlbXAgZGlyZWN0b3J5IGluc3RlYWQgb2YgY3dkLlxuICAgIC8vIFRoaXMgZWFybHkgd3JpdGUgcnVucyBiZWZvcmUgdGhhdCByZWRpcmVjdCBleGlzdHMsIHNvIHdpdGhvdXQgdGhpc1xuICAgIC8vIGd1YXJkIGl0IHdvdWxkIHdyaXRlIHN0cmFpZ2h0IGludG8gdGhpcyByZXBvJ3Mgb3duIHdvcmtpbmcgdHJlZVxuICAgIC8vIGluc3RlYWQgb2YgdGhlIHRlc3QncyB0ZW1wIGRpci5cbiAgICBpZiAoKG9wdGlvbnMuc2FtcGxlQ29kZSA/PyB0cnVlKSAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnKSB7XG4gICAgICBjb25zdCBvdXRkaXIgPSBwYXRoLnJlc29sdmUob3B0aW9ucy5vdXRkaXIgPz8gJy4nKTtcbiAgICAgIGNvbnN0IGxhbWJkYUVudHJ5cG9pbnQgPSBwYXRoLmpvaW4ob3V0ZGlyLCAnc3JjJywgJ2NyZC1leGFtcGxlJywgJ2NyZC1leGFtcGxlLmxhbWJkYS50cycpO1xuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGxhbWJkYUVudHJ5cG9pbnQpKSB7XG4gICAgICAgIGZzLm1rZGlyU3luYyhwYXRoLmRpcm5hbWUobGFtYmRhRW50cnlwb2ludCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBmcy53cml0ZUZpbGVTeW5jKGxhbWJkYUVudHJ5cG9pbnQsIGZzLnJlYWRGaWxlU3luYyhgJHtiYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L3NyY19jcmQtZXhhbXBsZS5sYW1iZGEudHNgKS50b1N0cmluZygpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdXBlcih7XG4gICAgICBhdXRob3JPcmdhbml6YXRpb246IHRydWUsXG4gICAgICBjb3B5cmlnaHRPd25lcjogJ01WIENvbnN1bHRpbmcgR21iSCcsXG4gICAgICBsaWNlbnNlOiAnQXBhY2hlLTIuMCcsXG4gICAgICBqc2lpVmVyc2lvbjogJ342LjAuMCcsXG4gICAgICB0eXBlc2NyaXB0VmVyc2lvbjogJ142LjAuMicsXG4gICAgICBtaW5Ob2RlVmVyc2lvbjogbm9kZVZlcnNpb24sXG4gICAgICB3b3JrZmxvd05vZGVWZXJzaW9uOiBub2RlVmVyc2lvbixcbiAgICAgIHN0YWJpbGl0eTogJ2V4cGVyaW1lbnRhbCcsXG4gICAgICByZWxlYXNlVG9OcG06IHRydWUsXG4gICAgICBwYWNrYWdlTWFuYWdlcjogamF2YXNjcmlwdC5Ob2RlUGFja2FnZU1hbmFnZXIuTlBNLFxuICAgICAgbnBtQWNjZXNzOiBqYXZhc2NyaXB0Lk5wbUFjY2Vzcy5QVUJMSUMsXG4gICAgICBsYW1iZGFPcHRpb25zOiB7XG4gICAgICAgIHJ1bnRpbWU6IGxhbWJkYU5vZGVWZXJzaW9uLFxuICAgICAgICBhd3NTZGtDb25uZWN0aW9uUmV1c2U6IGZhbHNlLCAvLyBkb2Vzbid0IGV4aXN0IGluIEFXUyBTREsgSlMgdjNcbiAgICAgIH0sXG4gICAgICBhdXRvQXBwcm92ZU9wdGlvbnM6IHtcbiAgICAgICAgLy8gJ212Yy1ib3QnICh0aGUgUFJPSkVOX0dJVEhVQl9UT0tFTiBpZGVudGl0eSkgaXMgZGVsaWJlcmF0ZWx5XG4gICAgICAgIC8vIGV4Y2x1ZGVkOiBHaXRIdWIgcmVqZWN0cyBhIFBSIHJldmlldyBmcm9tIHRoZSBzYW1lIGFjY291bnQgdGhhdFxuICAgICAgICAvLyBhdXRob3JlZCB0aGUgUFIgKFwiQ2FuIG5vdCBhcHByb3ZlIHlvdXIgb3duIHB1bGwgcmVxdWVzdFwiKSwgYW5kXG4gICAgICAgIC8vIHRoaXMgdG9rZW4gY2FuIGFsc28gYXV0aG9yIFBScyBhZ2FpbnN0IGdlbmVyYXRlZCBwcm9qZWN0cyAoZS5nLlxuICAgICAgICAvLyBzY2FmZm9sZGVyLWRyaXZlbiBhdXRvbWF0aW9uKS4gVGhvc2UgUFJzIGFyZSBhdXRvLWFwcHJvdmVkIHZpYVxuICAgICAgICAvLyBNZXJnaWZ5IGluc3RlYWQsIGJlbG93LCB3aGljaCBwb3N0cyB0aGUgcmV2aWV3IGFzIHRoZSBNZXJnaWZ5XG4gICAgICAgIC8vIGFwcCAtIGEgZGlmZmVyZW50IGFjdG9yLiBTZWUgbWF2b2dlbC9tdmMtcHJvamVuIzc0LlxuICAgICAgICBhbGxvd2VkVXNlcm5hbWVzOiBbXG4gICAgICAgICAgJ2RlcGVuZGFib3QnLFxuICAgICAgICAgICdkZXBlbmRhYm90W2JvdF0nLFxuICAgICAgICAgICdnaXRodWItYm90JyxcbiAgICAgICAgICAnZ2l0aHViLWFjdGlvbnNbYm90XScsXG4gICAgICAgIF0sXG4gICAgICAgIC8vIFRoZSBuYW1lIG9mIHRoZSBzZWNyZXQgdGhhdCBoYXMgdGhlIEdpdEh1YiBQQVQgZm9yIGF1dG8tYXBwcm92aW5nIFBScyB3aXRoIHBlcm1pc3Npb25zIHJlcG8sIHdvcmtmbG93LCB3cml0ZTpwYWNrYWdlc1xuICAgICAgICAvLyBHZW5lcmF0ZSBhIG5ldyBQQVQgKGh0dHBzOi8vZ2l0aHViLmNvbS9zZXR0aW5ncy90b2tlbnMvbmV3KSBhbmQgYWRkIGl0IHRvIHlvdXIgcmVwbydzIHNlY3JldHNcbiAgICAgICAgLy8gTk9URTogY29tZXMgZnJvbSBNVi1Db25zdWx0aW5nIE9yZ1xuICAgICAgICBzZWNyZXQ6ICdQUk9KRU5fR0lUSFVCX1RPS0VOJyxcbiAgICAgIH0sXG4gICAgICBkZXBlbmRhYm90OiB0cnVlLFxuICAgICAgZGVwZW5kYWJvdE9wdGlvbnM6IHtcbiAgICAgICAgc2NoZWR1bGVJbnRlcnZhbDogRGVwZW5kYWJvdFNjaGVkdWxlSW50ZXJ2YWwuV0VFS0xZLFxuICAgICAgICBsYWJlbHM6IFsnZGVwZW5kZW5jaWVzJywgJ2F1dG8tYXBwcm92ZSddLFxuICAgICAgICBncm91cHM6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBwYXR0ZXJuczogWycqJ10sXG4gICAgICAgICAgICBleGNsdWRlUGF0dGVybnM6IFsnYXdzLWNkayonLCAncHJvamVuJ10sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgaWdub3JlOiBbeyBkZXBlbmRlbmN5TmFtZTogJ2F3cy1jZGstbGliJyB9LCB7IGRlcGVuZGVuY3lOYW1lOiAnYXdzLWNkaycgfV0sXG4gICAgICB9LFxuICAgICAgLy8gLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9qZW4vcHJvamVuL2Rpc2N1c3Npb25zLzQwNDAjZGlzY3Vzc2lvbmNvbW1lbnQtMTE5MDU2MjhcbiAgICAgIHJlbGVhc2FibGVDb21taXRzOiBSZWxlYXNhYmxlQ29tbWl0cy5vZlR5cGUoW1xuICAgICAgICAnZmVhdCcsXG4gICAgICAgICdmaXgnLFxuICAgICAgICAnY2hvcmUnLFxuICAgICAgICAncmVmYWN0b3InLFxuICAgICAgICAncGVyZicsXG4gICAgICBdKSxcbiAgICAgIGdpdGh1Yk9wdGlvbnM6IHtcbiAgICAgICAgcHVsbFJlcXVlc3RMaW50T3B0aW9uczoge1xuICAgICAgICAgIHNlbWFudGljVGl0bGVPcHRpb25zOiB7XG4gICAgICAgICAgICAvLyBzZWUgY29tbWl0IHR5cGVzIGhlcmU6IGh0dHBzOi8vd3d3LmNvbnZlbnRpb25hbGNvbW1pdHMub3JnL2VuL3YxLjAuMC8jc3VtbWFyeVxuICAgICAgICAgICAgdHlwZXM6IFtcbiAgICAgICAgICAgICAgJ2ZlYXQnLFxuICAgICAgICAgICAgICAnZml4JyxcbiAgICAgICAgICAgICAgJ2Nob3JlJyxcbiAgICAgICAgICAgICAgJ3JlZmFjdG9yJyxcbiAgICAgICAgICAgICAgJ3BlcmYnLFxuICAgICAgICAgICAgICAnZG9jcycsXG4gICAgICAgICAgICAgICdzdHlsZScsXG4gICAgICAgICAgICAgICd0ZXN0JyxcbiAgICAgICAgICAgICAgJ2J1aWxkJyxcbiAgICAgICAgICAgICAgJ2NpJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB2ZXJzaW9ucmNPcHRpb25zOiB7XG4gICAgICAgIHR5cGVzOiBbXG4gICAgICAgICAgeyB0eXBlOiAnZmVhdCcsIHNlY3Rpb246ICdGZWF0dXJlcycgfSxcbiAgICAgICAgICB7IHR5cGU6ICdmaXgnLCBzZWN0aW9uOiAnQnVnIEZpeGVzJyB9LFxuICAgICAgICAgIHsgdHlwZTogJ2Nob3JlJywgc2VjdGlvbjogJ0Nob3JlcycgfSxcbiAgICAgICAgICB7IHR5cGU6ICdkb2NzJywgc2VjdGlvbjogJ0RvY3MnIH0sXG4gICAgICAgICAgeyB0eXBlOiAnc3R5bGUnLCBoaWRkZW46IHRydWUgfSxcbiAgICAgICAgICB7IHR5cGU6ICdyZWZhY3RvcicsIGhpZGRlbjogdHJ1ZSB9LFxuICAgICAgICAgIHsgdHlwZTogJ3BlcmYnLCBzZWN0aW9uOiAnUGVyZm9ybWFuY2UnIH0sXG4gICAgICAgICAgeyB0eXBlOiAndGVzdCcsIGhpZGRlbjogdHJ1ZSB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICAgIGVzbGludE9wdGlvbnM6IHtcbiAgICAgICAgcHJldHRpZXI6IGZhbHNlLFxuICAgICAgICBkaXJzOiBbJ3NyYyddLFxuICAgICAgICBpZ25vcmVQYXR0ZXJuczogWycqKi8qLWZ1bmN0aW9uLnRzJywgJ2V4YW1wbGVzLyddLFxuICAgICAgfSxcbiAgICAgIC8vIGV4cGVyaW1lbnRhbEludGVnUnVubmVyOiB0cnVlLFxuICAgICAgLy8gbWFudWFsIGludGVnIHRlc3Qgc2V0dXBcbiAgICAgIHRzY29uZmlnRGV2OiB7XG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICAgIHR5cGVzOiBbJ25vZGUnLCAnamVzdCddLFxuICAgICAgICB9LFxuICAgICAgICBpbmNsdWRlOiBbJ2ludGVnLXRlc3RzLyoqLyoudHMnXSxcbiAgICAgIH0sXG4gICAgICBwdWxsUmVxdWVzdFRlbXBsYXRlQ29udGVudHM6IFtmcy5yZWFkRmlsZVN5bmMoYCR7YmFzZUFzc2V0c0RpcmVjdG9yeX0vY29tbW9uL2dpdGh1Yl9wdWxsX3JlcXVlc3QubWRgKS50b1N0cmluZygpXSxcbiAgICAgIC8vIE5PVEU6IGlzc3VlIHRlbXBsYXRlcyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcHJvamVuL3Byb2plbi9wdWxsLzM2NDhcbiAgICAgIC8vIGlzc3VlVGVtcGxhdGVzOiB7fVxuICAgICAgcmVhZG1lOiB7XG4gICAgICAgIGNvbnRlbnRzOiBbXG4gICAgICAgICAgYFxuIVtTb3VyY2VdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL3N0YXJzL01WLUNvbnN1bHRpbmcvJHtvcHRpb25zLm5hbWV9P2xvZ289Z2l0aHViJmxhYmVsPUdpdEh1YiUyMFN0YXJzKVxuWyFbQnVpbGQgU3RhdHVzXShodHRwczovL2dpdGh1Yi5jb20vTVYtQ29uc3VsdGluZy8ke29wdGlvbnMubmFtZX0vYWN0aW9ucy93b3JrZmxvd3MvYnVpbGQueW1sL2JhZGdlLnN2ZyldKGh0dHBzOi8vZ2l0aHViLmNvbS9NVi1Db25zdWx0aW5nLyR7b3B0aW9ucy5uYW1lfS9hY3Rpb25zL3dvcmtmbG93cy9idWlsZC55bWwpXG5bIVtFU0xpbnQgQ29kZSBGb3JtYXR0aW5nXShodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL2NvZGVfc3R5bGUtZXNsaW50LWJyaWdodGdyZWVuLnN2ZyldKGh0dHBzOi8vZXNsaW50Lm9yZylcblshW0xhdGVzdCByZWxlYXNlXShodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9yZWxlYXNlL01WLUNvbnN1bHRpbmcvJHtvcHRpb25zLm5hbWV9LnN2ZyldKGh0dHBzOi8vZ2l0aHViLmNvbS9NVi1Db25zdWx0aW5nLyR7b3B0aW9ucy5uYW1lfS9yZWxlYXNlcylcbiFbR2l0SHViXShodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9saWNlbnNlL01WLUNvbnN1bHRpbmcvJHtvcHRpb25zLm5hbWV9KVxuWyFbbnBtXShodHRwczovL2ltZy5zaGllbGRzLmlvL25wbS9kdC9AbWF2b2dlbC8ke29wdGlvbnMubmFtZX0/bGFiZWw9bnBtJmNvbG9yPW9yYW5nZSldKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL0BtYXZvZ2VsLyR7b3B0aW9ucy5uYW1lfSlcblshW3R5cGVzY3JpcHRdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvanNpaS10eXBlc2NyaXB0LWJsdWV2aW9sZXQuc3ZnKV0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQG1hdm9nZWwvJHtvcHRpb25zLm5hbWV9KVxuICAgICAgICAgIGAsXG4gICAgICAgICAgYCMgJHtvcHRpb25zLm5hbWV9YCxcbiAgICAgICAgICAnTXkgYXdlc29tZSBkZXNjcmlwdGlvbi4uLicsXG4gICAgICAgICAgYFxuIyMgVGFibGUgb2YgQ29udGVudHNcblxuLSBbRmVhdHVyZXNdKCNmZWF0dXJlcylcbi0gW1VzYWdlXSgjdXNhZ2UpXG4tIFtTb2x1dGlvbiBEZXNpZ25dKCNzb2x1dGlvbi1kZXNpZ24pXG4tIFtJbnNwaXJhdGlvbl0oI2luc3BpcmF0aW9uKVxuXG4jIyBGZWF0dXJlc1xuXG4tIOKaoSAqKlF1aWNrIFNldHVwKio6IFRCRFxuLSDwn5OPICoqQmVzdCBQcmFjdGljZSBTZXR1cCoqOiBUQkRcbi0g8J+kueKAjeKZgu+4jyAqKlByZS1pbnN0YWxsZWQgcGFja2FnZXMqKjogVEJEXG4tIPCfj5fvuI8gKipFeHRlbnNpYmlsaXR5Kio6IFRCRFxuXG4jIyBVc2FnZVxuVGhlIGZvbGxvd2luZyBzdGVwcyBnZXQgeW91IHN0YXJ0ZWQ6XG5cbjEuIENyZWF0ZSBhIG5ldyBcXGBhd3NjZGstYXBwXFxgIHZpYVxuXFxgXFxgXFxgYmFzaFxubnB4IHByb2plbiBuZXcgYXdzY2RrLWFwcC10cyAtLWNka1ZlcnNpb249Mi4yNjEuMCAtLXBhY2thZ2UtbWFuYWdlcj1ucG1cblxcYFxcYFxcYFxuMy4gQWRkIFxcYEBtYXZvZ2VsLyR7b3B0aW9ucy5uYW1lfVxcYCBhcyBhIGRlcGVuZGVuY3kgdG8geW91ciBwcm9qZWN0IGluIHRoZSBcXGAucHJvamVucmMudHNcXGAgZmlsZVxuNC4gUnVuIFxcYG5weCBwcm9qZW5cXGAgdG8gaW5zdGFsbCBpdFxuNS4gQWRkIHRoZSBmb2xsb3dpbmcgdG8gdGhlIFxcYHNyYy9tYWluLnRzXFxgIGZpbGU6XG5cXGBcXGBcXGB0c1xuaW1wb3J0IHsgQXBwLCBTdGFjaywgU3RhY2tQcm9wcyB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUGxhY2Vob2xkZXIgfSBmcm9tICdAbWF2b2dlbC8ke29wdGlvbnMubmFtZX0nO1xuXG5leHBvcnQgY2xhc3MgTXlTdGFjayBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFN0YWNrUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgbmV3IFBsYWNlaG9sZGVyKHRoaXMsICdwbGFjZWhvbGRlcicsIHtcbiAgICAgIC8vIGFuZCBtb3JlLi4uIPCfkqFcbiAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBlbnYgPSB7XG4gIGFjY291bnQ6ICcxMjM0NTY3ODk5MTInLFxuICByZWdpb246ICdldS1jZW50cmFsLTEnLFxufTtcblxuY29uc3QgYXBwID0gbmV3IEFwcCgpO1xubmV3IE15U3RhY2soYXBwLCAncGxhY2Vob2xkZXInLCB7IGVudiB9KTtcbmFwcC5zeW50aCgpO1xuXFxgXFxgXFxgXG5cbmFuZCBkZXBsb3kgaXRcblxcYFxcYFxcYGJhc2hcbm5weCBwcm9qZW4gYnVpbGRcbm5weCBwcm9qZW4gZGVwbG95XG5cXGBcXGBcXGBcblxud2l0aCB0aGUgb3V0cHV0XG5cXGBcXGBcXGBjb25zb2xlXG5UQkRcblxcYFxcYFxcYFxuXG5TZWUgdGhlIFtleGFtcGxlc10oLi9leGFtcGxlcykgZm9sZGVyIGZvciBtb3JlIGluc3BpcmF0aW9uLlxuXG4jIyBTb2x1dGlvbiBEZXNpZ25cblxuPGRldGFpbHM+XG4gIDxzdW1tYXJ5Pi4uLiBpZiB5b3UncmUgY3VyaW91cyBhYm91dCBjbGljayBoZXJlIGZvciB0aGUgZGV0YWlsczwvc3VtbWFyeT5cblxuIVtwbGFjZWhvbGRlcl0oZG9jcy9pbWcvcGxhY2Vob2xkZXIuZHJhd2lvLW1pbi5wbmcpXG5cbjwvZGV0YWlscz5cblxuIyMgSW5zcGlyYXRpb25cblxuYWRkIHRvb2xzIG9yIGxpbmtzIHdoaWNoIGluc3BpcmVkIHlvdVxuICAgICAgICAgIGAsXG4gICAgICAgICAgZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9naXRodWJfcmVhZG1lX2N0YS5tZGApLnRvU3RyaW5nKCksXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICB9LFxuICAgICAgLy8gTk9URToga2VlcCBhbGwgdGhlIHBhc3NlZCBpbiBvcHRpb25zIHdoaWNoIGNhbiBvdmVycmlkZSB0aGUgZXhpc3Rpbmcgb25lcyFcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAvLyBhcHBsaWVkIGFmdGVyIC4uLm9wdGlvbnMgc28gdGhlIERFRkFVTFRfQ0RLX1ZFUlNJT04gZmFsbGJhY2sgYWJvdmVcbiAgICAgIC8vIGFsd2F5cyB3aW5zIG92ZXIgYW4gdW5kZWZpbmVkIG9wdGlvbnMuY2RrVmVyc2lvblxuICAgICAgY2RrVmVyc2lvbixcbiAgICB9KTtcblxuICAgIC8vIFR5cGVTY3JpcHQgNiBubyBsb25nZXIgYXV0by1kaXNjb3ZlcnMgQHR5cGVzLyogcGFja2FnZXNcbiAgICB0aGlzLnRzY29uZmlnRGV2LmZpbGUuYWRkT3ZlcnJpZGUoJ2NvbXBpbGVyT3B0aW9ucy50eXBlcycsIFsnbm9kZScsICdqZXN0J10pO1xuICAgIHRoaXMudHNjb25maWc/LmZpbGUuYWRkT3ZlcnJpZGUoJ2NvbXBpbGVyT3B0aW9ucy50eXBlcycsIFsnbm9kZSddKTtcblxuICAgIC8vIHByb2plbidzIEF1dG9NZXJnZSBjb21wb25lbnQgaGFyZGNvZGVzIGBkZWxldGVfaGVhZF9icmFuY2g6IHt9YCBpbiB0aGVcbiAgICAvLyBtZXJnaWZ5IHJ1bGUgd2l0aCBubyBvcHRpb24gdG8gZGlzYWJsZSBpdC4gU3RyaXAgaXQgc28gTWVyZ2lmeSBkb2VzIG5vdFxuICAgIC8vIGRlbGV0ZSBoZWFkIGJyYW5jaGVzIG9uIG1lcmdlIChyZW5vdmF0ZS9kZXBlbmRhYm90IG1hbmFnZSB0aGVpciBvd24pLlxuICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vTVYtQ29uc3VsdGluZy9jZGstdnNjb2RlLXNlcnZlci9wdWxsLzExMlxuICAgIHRoaXMudHJ5RmluZE9iamVjdEZpbGUoJy5tZXJnaWZ5LnltbCcpPy5hZGREZWxldGlvbk92ZXJyaWRlKFxuICAgICAgJ3B1bGxfcmVxdWVzdF9ydWxlcy4wLmFjdGlvbnMuZGVsZXRlX2hlYWRfYnJhbmNoJyxcbiAgICApO1xuXG4gICAgLy8gQXV0by1hcHByb3ZlIFBScyBhdXRob3JlZCBieSAnbXZjLWJvdCcgaXRzZWxmIChzZWUgdGhlXG4gICAgLy8gYXV0b0FwcHJvdmVPcHRpb25zIGNvbW1lbnQgYWJvdmUgZm9yIHdoeSB0aGlzIGNhbid0IGdvIHRocm91Z2ggdGhlXG4gICAgLy8gR2l0SHViIEFjdGlvbnMgYXV0by1hcHByb3ZlIHBhdGgpIHZpYSBNZXJnaWZ5IGluc3RlYWQ6IGl0IHBvc3RzIHRoZVxuICAgIC8vIHJldmlldyBhcyB0aGUgTWVyZ2lmeSBhcHAsIGEgZGlmZmVyZW50IGFjdG9yLiBTZWUgbWF2b2dlbC9tdmMtcHJvamVuIzc0LlxuICAgIHRoaXMudHJ5RmluZE9iamVjdEZpbGUoJy5tZXJnaWZ5LnltbCcpPy5hZGRPdmVycmlkZShcbiAgICAgICdwdWxsX3JlcXVlc3RfcnVsZXMuMScsXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdBdXRvLWFwcHJvdmUgc2VsZi1hdXRob3JlZCBtdmMtYm90IFBScycsXG4gICAgICAgIGNvbmRpdGlvbnM6IFtcbiAgICAgICAgICAnYXV0aG9yPW12Yy1ib3QnLFxuICAgICAgICAgICdsYWJlbD1hdXRvLWFwcHJvdmUnLFxuICAgICAgICBdLFxuICAgICAgICBhY3Rpb25zOiB7XG4gICAgICAgICAgcmV2aWV3OiB7XG4gICAgICAgICAgICB0eXBlOiAnQVBQUk9WRScsXG4gICAgICAgICAgICBtZXNzYWdlOiAnQXV0b21hdGljYWxseSBhcHByb3ZlZDogc2VsZi1hdXRob3JlZCBhdXRvbWF0aW9uIFBSLicsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIC8vIGdpdGlnbm9yZVxuICAgIGNvbnN0IGZpbGVzUGF0dGVyblRvR2l0aWdub3JlID0gW1xuICAgICAgJ3RtcCcsXG4gICAgICAnLmNvZGVncHQnLFxuICAgIF07XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzUGF0dGVyblRvR2l0aWdub3JlKSB7XG4gICAgICB0aGlzLmdpdGlnbm9yZS5leGNsdWRlKGZpbGUpO1xuICAgIH1cbiAgICB0aGlzLmFkZERlcHMoXG4gICAgICAvLyBjZGstbmFnIHYzIHJlcXVpcmVzIGF3cy1jZGstbGliID49IDIuMjU3LjAgKHNlZSBjZGstbmFnIE1JR1JBVElPTi5tZClcbiAgICAgICdjZGstbmFnQF4zLjAuMScsXG4gICAgKTtcbiAgICAvLyBDYXAgaW50ZWctcnVubmVyIGF0IExBU1RfSU5URUdfUlVOTkVSX1ZFUlNJT04gc2luY2UgaXQgc3RvcHBlZCBwdWJsaXNoaW5nIGFmdGVyIHRoYXQgdmVyc2lvbi5cbiAgICAvLyBpbnRlZy1ydW5uZXIgdXNlcyBwbGFpbiB2ZXJzaW9ucyAobm8gLWFscGhhLjAgc3VmZml4KS5cbiAgICAvLyBpbnRlZy10ZXN0cy1hbHBoYSBhbmQgYXdzbGludCBvbmx5IHB1Ymxpc2ggYXQgbWlub3IgdmVyc2lvbnMgKGUuZy4gMi4xOTcuMC1hbHBoYS4wLCBub3QgMi4xOTcuNC1hbHBoYS4wKS5cbiAgICBjb25zdCByYXdDZGtWZXJzaW9uID0gdGhpcy5jZGtWZXJzaW9uLnJlcGxhY2UoL1tcXF5+XS8sICcnKTtcbiAgICBjb25zdCBpbnRlZ1J1bm5lclZlcnNpb24gPSByYXdDZGtWZXJzaW9uLmxvY2FsZUNvbXBhcmUoTEFTVF9JTlRFR19SVU5ORVJfVkVSU0lPTiwgdW5kZWZpbmVkLCB7IG51bWVyaWM6IHRydWUsIHNlbnNpdGl2aXR5OiAnYmFzZScgfSkgPiAwXG4gICAgICA/IExBU1RfSU5URUdfUlVOTkVSX1ZFUlNJT05cbiAgICAgIDogcmF3Q2RrVmVyc2lvbjtcbiAgICAvLyBBbHBoYSBwYWNrYWdlcyBvbmx5IHB1Ymxpc2ggYXQgLjAgcGF0Y2ggdmVyc2lvbnMg4oCUIG5vcm1hbGl6ZSB0byBtaW5vciB2ZXJzaW9uXG4gICAgY29uc3QgW21ham9yLCBtaW5vcl0gPSByYXdDZGtWZXJzaW9uLnNwbGl0KCcuJyk7XG4gICAgY29uc3QgYWxwaGFWZXJzaW9uID0gYCR7bWFqb3J9LiR7bWlub3J9LjBgO1xuICAgIHRoaXMuYWRkRGV2RGVwcyhcbiAgICAgIGBAYXdzLWNkay9pbnRlZy1ydW5uZXJAJHtpbnRlZ1J1bm5lclZlcnNpb259YCxcbiAgICAgIGBAYXdzLWNkay9pbnRlZy10ZXN0cy1hbHBoYUAke2FscGhhVmVyc2lvbn0tYWxwaGEuMGAsXG4gICAgICAnQGNvbW1pdGxpbnQvY2xpQF4yMC4xLjAnLFxuICAgICAgJ0Bjb21taXRsaW50L2NvbmZpZy1jb252ZW50aW9uYWxAXjIwLjAuMCcsXG4gICAgICBgYXdzbGludEAke2FscGhhVmVyc2lvbn0tYWxwaGEuMGAsXG4gICAgICAnaHVza3lAXjkuMS43JyxcbiAgICApO1xuXG4gICAgdGhpcy5wYWNrYWdlLnNldFNjcmlwdCgncHJlcGFyZScsICdodXNreScpO1xuICAgIG5ldyBUZXh0RmlsZSh0aGlzLCAnLmNvbW1pdGxpbnRyYy5qcycsIHtcbiAgICAgIGxpbmVzOiBbXG4gICAgICAgICdtb2R1bGUuZXhwb3J0cyA9IHsgZXh0ZW5kczogW1xcJ0Bjb21taXRsaW50L2NvbmZpZy1jb252ZW50aW9uYWxcXCddIH07JyxcbiAgICAgIF0sXG4gICAgICBtYXJrZXI6IHRydWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLnBhY2thZ2Uuc2V0U2NyaXB0KCdhd3NsaW50JywgJ2F3c2xpbnQnKTtcbiAgICAvLyAuZ2l0aHViL3dvcmtmbG93cy9idWlsZC55bWxcbiAgICBjb25zdCBidWlsZFdvcmtmbG93ID0gdGhpcy5naXRodWI/LnRyeUZpbmRXb3JrZmxvdygnYnVpbGQnKTtcbiAgICBpZiAoIWJ1aWxkV29ya2Zsb3cpIHJldHVybjtcbiAgICBjb25zdCBidWlsZEpvYiA9IGJ1aWxkV29ya2Zsb3cuZ2V0Sm9iKCdidWlsZCcpO1xuICAgIGlmICghYnVpbGRKb2IgfHwgISgnc3RlcHMnIGluIGJ1aWxkSm9iKSkgcmV0dXJuO1xuICAgIC8vIFRPRE86IGZpZ3VyZSBvdXQgd2h5IHdyb25nIHR5cGVzXG4gICAgY29uc3QgZ2V0QnVpbGRTdGVwcyA9IGJ1aWxkSm9iLnN0ZXBzIGFzIHVua25vd24gYXMgKCkgPT4gSm9iU3RlcFtdO1xuICAgIGNvbnN0IGJ1aWxkSm9iU3RlcHMgPSBnZXRCdWlsZFN0ZXBzKCk7XG4gICAgYnVpbGRXb3JrZmxvdy51cGRhdGVKb2IoJ2J1aWxkJywge1xuICAgICAgLi4uYnVpbGRKb2IsXG4gICAgICBzdGVwczogW1xuICAgICAgICAuLi5idWlsZEpvYlN0ZXBzLnNsaWNlKDAsIDQpLFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ1J1biBhd3NsaW50JyxcbiAgICAgICAgICBydW46ICducG0gcnVuIGF3c2xpbnQnLFxuICAgICAgICB9LFxuICAgICAgICAuLi5idWlsZEpvYlN0ZXBzLnNsaWNlKDQpLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIHRoaXMucGFja2FnZS5zZXRTY3JpcHQoXG4gICAgICAnaW50ZWctdGVzdCcsXG4gICAgICBgaW50ZWctcnVubmVyIC0tZGlyZWN0b3J5IC4vaW50ZWctdGVzdHMgJHtpbnRlZ1Rlc3RSZWdpb25zPy5tYXAocmVnaW9uID0+IGAtLXBhcmFsbGVsLXJlZ2lvbnMgJHtyZWdpb259YCkuam9pbignICcpfSAtLXVwZGF0ZS1vbi1mYWlsZWRgLFxuICAgICk7XG5cbiAgICBuZXcgVGV4dEZpbGUodGhpcywgJy5naXRodWIvSVNTVUVfVEVNUExBVEUvYnVnX3JlcG9ydC5tZCcsIHtcbiAgICAgIGxpbmVzOiBbZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9naXRodWJfYnVnX3JlcG9ydC5tZGApLnRvU3RyaW5nKCldLFxuICAgIH0pO1xuXG4gICAgbmV3IFRleHRGaWxlKHRoaXMsICcuZ2l0aHViL0lTU1VFX1RFTVBMQVRFL2ZlYXR1cmVfcmVxdWVzdC5tZCcsIHtcbiAgICAgIGxpbmVzOiBbZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9naXRodWJfZmVhdHVyZV9yZXF1ZXN0Lm1kYCkudG9TdHJpbmcoKV0sXG4gICAgfSk7XG5cbiAgICBuZXcgWWFtbEZpbGUodGhpcywgJy5naXRodWIvRlVORElORy55YW1sJywge1xuICAgICAgb2JqOiB7XG4gICAgICAgIGdpdGh1YjogJ21hdm9nZWwnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIG5ldyBUZXh0RmlsZSh0aGlzLCAnQ09OVFJJQlVUSU5HLm1kJywge1xuICAgICAgbGluZXM6IFtmcy5yZWFkRmlsZVN5bmMoYCR7YmFzZUFzc2V0c0RpcmVjdG9yeX0vY29tbW9uL2NvbnRyaWJ1dGluZy5tZGApLnRvU3RyaW5nKCldLFxuICAgIH0pO1xuXG4gICAgbmV3IFRleHRGaWxlKHRoaXMsICcucHJldHRpZXJyYycsIHtcbiAgICAgIGxpbmVzOiBbZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9wcmV0dGllcnJjYCkudG9TdHJpbmcoKV0sXG4gICAgfSk7XG5cbiAgICAvLyB3cml0ZSBzYW1wbGUgY29kZSB0byBtYWluLnRzICYgdG8gbWFpbi50ZXN0LnRzXG4gICAgaWYgKG9wdGlvbnMuc2FtcGxlQ29kZSA/PyB0cnVlKSB7XG4gICAgICBuZXcgU2FtcGxlQ29kZSh0aGlzLCB7XG4gICAgICAgIGJhc2VBc3NldHNEaXJlY3RvcnksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuaW50ZXJmYWNlIFNhbXBsZUNvZGVPcHRpb25zIHtcbiAgcmVhZG9ubHkgYmFzZUFzc2V0c0RpcmVjdG9yeT86IHN0cmluZztcbn1cblxuY2xhc3MgU2FtcGxlQ29kZSBleHRlbmRzIENvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGlicmFyeTogQXdzQ2RrQ29uc3RydWN0TGlicmFyeTtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBTYW1wbGVDb2RlT3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBsaWJyYXJ5OiBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5LFxuICAgIG9wdGlvbnM6IFNhbXBsZUNvZGVPcHRpb25zLFxuICApIHtcbiAgICBzdXBlcihsaWJyYXJ5KTtcbiAgICB0aGlzLmxpYnJhcnkgPSBsaWJyYXJ5O1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgc3ludGhlc2l6ZSgpIHtcbiAgICBjb25zdCBvdXRkaXIgPSB0aGlzLnByb2plY3Qub3V0ZGlyO1xuICAgIGNvbnN0IHNyY2RpciA9IHBhdGguam9pbihvdXRkaXIsIHRoaXMubGlicmFyeS5zcmNkaXIpO1xuICAgIGlmIChcbiAgICAgIGZzLmV4aXN0c1N5bmMoYCR7c3JjZGlyfS9pbmRleC50c2ApICYmXG4gICAgICAhZnMucmVhZEZpbGVTeW5jKGAke3NyY2Rpcn0vaW5kZXgudHNgKS50b1N0cmluZygpLmluY2x1ZGVzKCdleHBvcnQgY2xhc3MgSGVsbG8nKSAvLyBOb3RlOiBmcm9tIHBhcmVudFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZzLm1rZGlyU3luYyhzcmNkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKHNyY2RpciwgJ2luZGV4LnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC9zcmNfaW5kZXgudHNgKS50b1N0cmluZygpKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihzcmNkaXIsICdwbGFjZWhvbGRlci50cycpLCBmcy5yZWFkRmlsZVN5bmMoYCR7dGhpcy5vcHRpb25zLmJhc2VBc3NldHNEaXJlY3Rvcnl9L2Nkay1jb25zdHJ1Y3Qvc3JjX3BsYWNlaG9sZGVyLnRzYCkudG9TdHJpbmcoKSk7XG4gICAgLy8gY3JkIHdpdGggbGFtYmRhIGdlbmVyYXRpb25cbiAgICAvLyBOb3RlOiBjcmQtZXhhbXBsZS5sYW1iZGEudHMgaXMgd3JpdHRlbiBlYXJsaWVyLCBiZWZvcmUgYHN1cGVyKClgLCBzb1xuICAgIC8vIEF1dG9EaXNjb3ZlcidzIGNvbnN0cnVjdG9yLXRpbWUgZ2xvYiBjYW4gZmluZCBpdCAtIHNlZSB0aGUgY29tbWVudCBpblxuICAgIC8vIHRoZSBjb25zdHJ1Y3RvciBhYm92ZS5cbiAgICBmcy5ta2RpclN5bmMoYCR7c3JjZGlyfS9jcmQtZXhhbXBsZWAsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGAke3NyY2Rpcn0vY3JkLWV4YW1wbGVgLCAnY3JkLWV4YW1wbGUudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L3NyY19jcmQtZXhhbXBsZS50c2ApLnRvU3RyaW5nKCkpO1xuXG5cbiAgICBjb25zdCB0ZXN0ZGlyID0gcGF0aC5qb2luKG91dGRpciwgdGhpcy5saWJyYXJ5LnRlc3RkaXIpO1xuICAgIGlmIChcbiAgICAgIGZzLmV4aXN0c1N5bmModGVzdGRpcikgJiZcbiAgICAgIGZzLnJlYWRkaXJTeW5jKHRlc3RkaXIpLmZpbHRlcigoeCkgPT4geC5lbmRzV2l0aCgnLnRzJykpICYmXG4gICAgICAhZnMuZXhpc3RzU3luYyhgJHt0ZXN0ZGlyfS9oZWxsby50ZXN0LnRzYCkgLy8gTm90ZTogZnJvbSBwYXJlbnRcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gcmVtb3ZlICR7dGVzdGRpcn0vaGVsbG8udGVzdC50cyBmaWxlLiBPbiB0aGUgb3RoZXIgaGFuZCwgd2Ugb3ZlcnJpZGUgaW5kZXgudHNcbiAgICBmcy51bmxpbmtTeW5jKGAke3Rlc3RkaXJ9L2hlbGxvLnRlc3QudHNgKTtcbiAgICBmcy5ta2RpclN5bmModGVzdGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4odGVzdGRpciwgJ2luZGV4LnRlc3QudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L3Rlc3RfaW5kZXgudGVzdC50c2ApLnRvU3RyaW5nKCkpO1xuICAgIC8vIGxhbWJkYSB0ZXN0cyB3aXRoIGplc3Qgc3R1YnNcbiAgICBmcy5ta2RpclN5bmMoYCR7dGVzdGRpcn0vY3JkLWV4YW1wbGVgLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihgJHt0ZXN0ZGlyfS9jcmQtZXhhbXBsZWAsICdjcmQtZXhhbXBsZS50ZXN0LnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC90ZXN0X2NyZC1leGFtcGxlLnRlc3QudHNgKS50b1N0cmluZygpKTtcblxuXG4gICAgY29uc3QgaW50ZWdUZXN0ZGlyID0gcGF0aC5qb2luKG91dGRpciwgJ2ludGVnLXRlc3RzJyk7XG4gICAgaWYgKFxuICAgICAgZnMuZXhpc3RzU3luYyhpbnRlZ1Rlc3RkaXIpICYmXG4gICAgICBmcy5yZWFkZGlyU3luYyhpbnRlZ1Rlc3RkaXIpLmZpbHRlcigoeCkgPT4geC5lbmRzV2l0aCgnLnRzJykpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZzLm1rZGlyU3luYyhpbnRlZ1Rlc3RkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGludGVnVGVzdGRpciwgJ2ludGVnLnBsYWNlaG9sZGVyLnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC9pbnRlZ19pbnRlZy5wbGFjZWhvbGRlci50c2ApLnRvU3RyaW5nKCkpO1xuXG4gICAgY29uc3QgaW50ZWdUZXN0RnVuY3Rpb25zZGlyID0gcGF0aC5qb2luKGludGVnVGVzdGRpciwgJ2Z1bmN0aW9ucycpO1xuICAgIGlmIChcbiAgICAgIGZzLmV4aXN0c1N5bmMoaW50ZWdUZXN0RnVuY3Rpb25zZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmMoaW50ZWdUZXN0RnVuY3Rpb25zZGlyKS5maWx0ZXIoKHgpID0+IHguZW5kc1dpdGgoJy50cycpKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmcy5ta2RpclN5bmMoaW50ZWdUZXN0RnVuY3Rpb25zZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihpbnRlZ1Rlc3RGdW5jdGlvbnNkaXIsICd0ZXN0LWhhbmRsZXIudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L2ludGVnX3Rlc3QtaGFuZGxlci50c2ApLnRvU3RyaW5nKCkpO1xuXG4gICAgY29uc3QgZG9jc2RpciA9IHBhdGguam9pbihvdXRkaXIsICdkb2NzJyk7XG4gICAgaWYgKFxuICAgICAgZnMuZXhpc3RzU3luYyhkb2NzZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmMoZG9jc2RpcikuZmlsdGVyKCh4KSA9PiB4LmVuZHNXaXRoKCcuZHJhd2lvJykpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZzLm1rZGlyU3luYyhkb2NzZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihkb2NzZGlyLCAncGxhY2Vob2xkZXIuZHJhd2lvJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY29tbW9uL2RvY3NfcGxhY2Vob2xkZXIuZHJhd2lvYCkudG9TdHJpbmcoKSk7XG5cbiAgICBjb25zdCBleGFtcGxlc2RpciA9IHBhdGguam9pbihvdXRkaXIsICdleGFtcGxlcycsICdzaW1wbGUnKTtcbiAgICBpZiAoXG4gICAgICBmcy5leGlzdHNTeW5jKGV4YW1wbGVzZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmMoZXhhbXBsZXNkaXIpLmZpbHRlcigoeCkgPT4geC5lbmRzV2l0aCgnLmRyYXdpbycpKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmcy5ta2RpclN5bmMoZXhhbXBsZXNkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGV4YW1wbGVzZGlyLCAnbWFpbi50cycpLCBmcy5yZWFkRmlsZVN5bmMoYCR7dGhpcy5vcHRpb25zLmJhc2VBc3NldHNEaXJlY3Rvcnl9L2Nkay1jb25zdHJ1Y3QvZXhhbXBsZXNfc2ltcGxlX21haW4udHNgKS50b1N0cmluZygpKTtcbiAgfVxufSJdfQ==
533
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWNvbnN0cnVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9qZWN0cy9jZGstY29uc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFDekIsMkNBQTZCO0FBRTdCLG1DQUFzRjtBQUN0Riw4Q0FBeUc7QUFDekcsOENBQStEO0FBRy9ELDJFQUEyRTtBQUMzRSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDM0IsTUFBTSxpQkFBaUIsR0FBRyxzQkFBYSxDQUFDLFdBQVcsQ0FBQztBQUVwRCxvRkFBb0Y7QUFDcEYsb0ZBQW9GO0FBQ3BGLG1FQUFtRTtBQUNuRSxxRkFBcUY7QUFDckYsaUVBQWlFO0FBQ2pFLGdGQUFnRjtBQUNoRiw2Q0FBNkM7QUFDN0MsTUFBTSx5QkFBeUIsR0FBRyxTQUFTLENBQUM7QUFFNUMscUVBQXFFO0FBQ3JFLHdFQUF3RTtBQUN4RSwwRUFBMEU7QUFDMUUseUVBQXlFO0FBQ3pFLHlFQUF5RTtBQUN6RSwyRUFBMkU7QUFDM0UsMkNBQTJDO0FBQzNDLE1BQU0sNEJBQTRCLEdBQUcsU0FBUyxDQUFDO0FBRS9DLDBFQUEwRTtBQUMxRSw0RUFBNEU7QUFDNUUsMkVBQTJFO0FBQzNFLHlDQUF5QztBQUN6QywwRUFBMEU7QUFDMUUsNEVBQTRFO0FBQzVFLG1EQUFtRDtBQUNuRCxNQUFNLG1CQUFtQixHQUFHLFNBQVMsQ0FBQztBQXFCdEM7Ozs7R0FJRztBQUNILE1BQWEsc0JBQXVCLFNBQVEsK0JBQXNCOztJQUVoRSxZQUFZLE9BQXNDO1FBQ2hELE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixJQUFJLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSwwQ0FBMEMsQ0FBQztRQUN0SCxNQUFNLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLENB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Q0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQzVELENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUNELEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0MsRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixpQ0FBaUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFN0osTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzVELElBQ0UsRUFBRSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7WUFDMUIsRUFBRSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFDaEUsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO1FBQ0QsRUFBRSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQix3Q0FBd0MsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDL0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHsgQ29tcG9uZW50LCBqYXZhc2NyaXB0LCBSZWxlYXNhYmxlQ29tbWl0cywgVGV4dEZpbGUsIFlhbWxGaWxlIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IEF3c0Nka0NvbnN0cnVjdExpYnJhcnksIEF3c0Nka0NvbnN0cnVjdExpYnJhcnlPcHRpb25zLCBMYW1iZGFSdW50aW1lIH0gZnJvbSAncHJvamVuL2xpYi9hd3NjZGsnO1xuaW1wb3J0IHsgRGVwZW5kYWJvdFNjaGVkdWxlSW50ZXJ2YWwgfSBmcm9tICdwcm9qZW4vbGliL2dpdGh1Yic7XG5pbXBvcnQgeyBKb2JTdGVwIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsJztcblxuLy8gU2V0IHRoZSBtaW5pbXVtIG5vZGUgdmVyc2lvbiBmb3IgQVdTIENESyBhbmQgdGhlIEdpdEh1YiBhY3Rpb25zIHdvcmtmbG93XG5jb25zdCBub2RlVmVyc2lvbiA9ICcyNC54JztcbmNvbnN0IGxhbWJkYU5vZGVWZXJzaW9uID0gTGFtYmRhUnVudGltZS5OT0RFSlNfMjRfWDtcblxuLy8gVGhlIGxhc3QgQGF3cy1jZGsvaW50ZWctcnVubmVyIHZlcnNpb24gdmVyaWZpZWQgYWdhaW5zdCBucG0gKGNoZWNrZWQgMjAyNi0wNy0yMSkuXG4vLyBpbnRlZy1ydW5uZXIgdXNlcyBwbGFpbiB2ZXJzaW9ucyAobm8gLWFscGhhLjAgc3VmZml4KSBhbmQgaGFzIGhpc3RvcmljYWxseSBsYWdnZWRcbi8vIG9yIHN0b3BwZWQgdHJhY2tpbmcgYXdzLWNkay1saWIncyB2ZXJzaW9uIGZvciBzdHJldGNoZXMgb2YgdGltZS5cbi8vIEBhd3MtY2RrL2ludGVnLXRlc3RzLWFscGhhIGFuZCBhd3NsaW50IGNvbnRpbnVlIHRvIHB1Ymxpc2ggYW5kIHRyYWNrIENESyB2ZXJzaW9ucy5cbi8vIFNIT1JUQ1VUOiBoYXJkY29kZWQgY2FwIHJlcXVpcmVzIG1hbnVhbCByZS12ZXJpZmljYXRpb24gLS0gcnVuXG4vLyBgbnBtIHZpZXcgQGF3cy1jZGsvaW50ZWctcnVubmVyIHZlcnNpb25zIC0tanNvbmAgYW5kIGJ1bXAgdGhpcyBpZiBhd3MtY2RrLWxpYlxuLy8gaGFzIHJlbGVhc2VkIG5ld2VyIHZlcnNpb25zIHRoYW4gdGhpcyBvbmUuXG5jb25zdCBMQVNUX0lOVEVHX1JVTk5FUl9WRVJTSU9OID0gJzIuMjAzLjAnO1xuXG4vLyBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5T3B0aW9ucy5jZGtWZXJzaW9uJ3Mgb3duIHVwc3RyZWFtIGBAZGVmYXVsdGBcbi8vIChub2RlX21vZHVsZXMvcHJvamVuL2xpYi9hd3NjZGsvYXdzY2RrLWRlcHMuZC50cykgLSB3aGF0IGBwcm9qZW4gbmV3YFxuLy8gZmlsbHMgaW4gd2hlbiBgLS1jZGtWZXJzaW9uYCBpcyBvbWl0dGVkLiBqc2lpIGZvcmJpZHMgYSBkZXJpdmVkIG9wdGlvbnNcbi8vIGludGVyZmFjZSBmcm9tIHJlLWRlY2xhcmluZyBhbiBpbmhlcml0ZWQgbWVtYmVyIChKU0lJNTAxNTogXCJyZXN1bHRzIGluXG4vLyBpbnZhbGlkIEMjXCIpLCBzbyB3ZSBjYW4ndCBvdmVycmlkZSB0aGUgYEBkZWZhdWx0YCBkb2MgdGhlIENMSSByZWZsZWN0c1xuLy8gb24gdG8gY2hhbmdlIHRoYXQuIERldGVjdGluZyB0aGlzIGV4YWN0IHZhbHVlIGJlbG93IGFuZCBzdWJzdGl0dXRpbmcgb3VyXG4vLyBvd24gZGVmYXVsdCBpcyB0aGUgb25seSByZW1haW5pbmcgbGV2ZXIuXG5jb25zdCBVUFNUUkVBTV9ERUZBVUxUX0NES19WRVJTSU9OID0gJzIuMTg5LjEnO1xuXG4vLyBPdXIgZGVmYXVsdCBgY2RrVmVyc2lvbmAgd2hlbiB0aGUgY2FsbGVyIChvciBgcHJvamVuIG5ld2ApIGRvZXNuJ3QgcGFzc1xuLy8gb25lLiBNdXN0IHN0YXkgPj0gMi4yNTcuMDogY2RrLW5hZyB2MyAoZm9yY2VkIGJlbG93IHZpYSBhZGREZXBzKSByZXF1aXJlc1xuLy8gaXQgYXMgYSBwZWVyLCBhbmQgdGhlIHVwc3RyZWFtIGRlZmF1bHQgYWJvdmUgZmFpbHMgYG5wbSBpbnN0YWxsYCB3aXRoIGFuXG4vLyBFUkVTT0xWRSBjb25mbGljdCBvbiBhIGZyZXNoIHNjYWZmb2xkLlxuLy8gU0hPUlRDVVQ6IGJvdGggaGFyZGNvZGVkIHZlcnNpb25zIHJlcXVpcmUgbWFudWFsIHJlLXZlcmlmaWNhdGlvbiAtLSBydW5cbi8vIGBucG0gdmlldyBhd3MtY2RrLWxpYiB2ZXJzaW9uYCBhbmQgcmUtY2hlY2sgYXdzY2RrLWRlcHMuZC50cydzIGBAZGVmYXVsdGBcbi8vIHBlcmlvZGljYWxseSAoaXQgbWF5IGRyaWZ0IG9uIGEgcHJvamVuIHVwZ3JhZGUpLlxuY29uc3QgREVGQVVMVF9DREtfVkVSU0lPTiA9ICcyLjI2MS4wJztcblxuLyoqXG4gKiBUaGUgb3B0aW9ucyBmb3IgdGhlIGNvbnN0cnVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE12Y0Nka0NvbnN0cnVjdExpYnJhcnlPcHRpb25zIGV4dGVuZHMgQXdzQ2RrQ29uc3RydWN0TGlicmFyeU9wdGlvbnMge1xuICAvKipcbiAgICogQmFzZSBkaXJlY3RvcnkgZm9yIHRoZSBhc3NldHNcbiAgICpcbiAgICogQGRlZmF1bHQgJHtwcm9jZXNzLmN3ZCgpfS9ub2RlX21vZHVsZXMvbXZjLXByb2plbi9hc3NldHNcbiAgICovXG4gIHJlYWRvbmx5IGJhc2VBc3NldHNEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZWdpb25zIHRvIHJ1biB0aGUgaW50ZWcgdGVzdHMgaW5cbiAgICpcbiAgICogQGRlZmF1bHQgZXUtd2VzdC0xIGFuZCBldS13ZXN0LTJcbiAgICovXG4gIHJlYWRvbmx5IGludGVnVGVzdFJlZ2lvbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUeXBlU2NyaXB0IGxpYnJhcnlcbiAqXG4gKiBAcGppZCBtdmMtYXdzY2RrLWNvbnN0cnVjdFxuICovXG5leHBvcnQgY2xhc3MgTXZjQ2RrQ29uc3RydWN0TGlicmFyeSBleHRlbmRzIEF3c0Nka0NvbnN0cnVjdExpYnJhcnkge1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE12Y0Nka0NvbnN0cnVjdExpYnJhcnlPcHRpb25zKSB7XG4gICAgY29uc3QgYmFzZUFzc2V0c0RpcmVjdG9yeSA9IG9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeSA/PyBgJHtwcm9jZXNzLmN3ZCgpfS9ub2RlX21vZHVsZXMvQG1hdm9nZWwvbXZjLXByb2plbi9hc3NldHNgO1xuICAgIGNvbnN0IGludGVnVGVzdFJlZ2lvbnMgPSBvcHRpb25zLmludGVnVGVzdFJlZ2lvbnMgPz8gWydldS13ZXN0LTEnLCAnZXUtd2VzdC0yJ107XG4gICAgLy8gYG9wdGlvbnMuY2RrVmVyc2lvbmAgaXMgdHlwZWQgYXMgcmVxdWlyZWQsIGJ1dCBgcHJvamVuIG5ld2AgYWx3YXlzXG4gICAgLy8gc3VwcGxpZXMgYSB2YWx1ZSB2aWEganNpaSByZWZsZWN0aW9uIC0gZWl0aGVyIGEgcmVhbCB1c2VyIG92ZXJyaWRlLFxuICAgIC8vIG9yIChpZiAtLWNka1ZlcnNpb24gd2FzIG9taXR0ZWQpIHRoZSB1cHN0cmVhbSBgQGRlZmF1bHRgIGxpdGVyYWxcbiAgICAvLyBpdHNlbGYuIFN1YnN0aXR1dGUgb3VycyBvbmx5IGluIHRoZSBsYXR0ZXIgY2FzZSwgdmVyaWZpZWQgYmVsb3cuXG4gICAgY29uc3QgY2RrVmVyc2lvbiA9ICghb3B0aW9ucy5jZGtWZXJzaW9uIHx8IG9wdGlvbnMuY2RrVmVyc2lvbiA9PT0gVVBTVFJFQU1fREVGQVVMVF9DREtfVkVSU0lPTilcbiAgICAgID8gREVGQVVMVF9DREtfVkVSU0lPTlxuICAgICAgOiBvcHRpb25zLmNka1ZlcnNpb247XG5cbiAgICAvLyBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5J3MgYHN1cGVyKClgIGNhbGwgYmVsb3cgd2lyZXMgdXAgYW4gQXV0b0Rpc2NvdmVyXG4gICAgLy8gY29tcG9uZW50IHdob3NlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgZ2xvYnMgYHNyY2RpcmAgZm9yXG4gICAgLy8gYCoubGFtYmRhLnRzYCBlbnRyeXBvaW50cyAtIGl0IG5ldmVyIHJlLXNjYW5zIGxhdGVyLiBTYW1wbGVDb2RlIChhZGRlZFxuICAgIC8vIGF0IHRoZSBlbmQgb2YgdGhpcyBjb25zdHJ1Y3Rvcikgd3JpdGVzIHRoZSBzYW1wbGUgY3JkLWV4YW1wbGUubGFtYmRhLnRzXG4gICAgLy8gZHVyaW5nIHRoZSBwcm9qZWN0J3Mgc3ludGhlc2l6ZSgpIHBoYXNlLCB3aGljaCBydW5zIGFmdGVyIGV2ZXJ5XG4gICAgLy8gY29tcG9uZW50J3MgY29uc3RydWN0b3IsIGluY2x1ZGluZyBBdXRvRGlzY292ZXIncyAtIHNvIHRoZSBmaWxlIG5ldmVyXG4gICAgLy8gZXhpc3RlZCBmb3IgQXV0b0Rpc2NvdmVyIHRvIGZpbmQsIG5vIExhbWJkYUZ1bmN0aW9uL0J1bmRsZXIgZXZlciBnb3RcbiAgICAvLyBjcmVhdGVkIGZvciBpdCwgYW5kIHRoZSBnZW5lcmF0ZWQgY3JkLWV4YW1wbGUudHMgd2FzIGxlZnQgaW1wb3J0aW5nIGFcbiAgICAvLyAnLi9jcmQtZXhhbXBsZS1mdW5jdGlvbicgY29uc3RydWN0IGZpbGUgdGhhdCBubyBvbmUgd3JvdGUsIGJyZWFraW5nXG4gICAgLy8gZXNsaW50IG9uIGV2ZXJ5IHNjYWZmb2xkLiBXcml0ZSBqdXN0IHRoaXMgb25lIGZpbGUgZWFybHkgZW5vdWdoIGZvclxuICAgIC8vIEF1dG9EaXNjb3ZlciB0byBzZWUgaXQ7IFNhbXBsZUNvZGUgc3RpbGwgb3ducyBldmVyeXRoaW5nIGVsc2UuXG4gICAgLy8gU2tpcCB1bmRlciBKZXN0IChOT0RFX0VOVj10ZXN0LCBtYXRjaGluZyBwcm9qZW4ncyBvd24gSVNfVEVTVF9SVU5cbiAgICAvLyBjaGVjayk6IHdoZW4gb3B0aW9ucy5vdXRkaXIgaXMgdW5zZXQgKHRydWUgZm9yIGV2ZXJ5IHRlc3QgaW4gdGhpc1xuICAgIC8vIHJlcG8pLCBwcm9qZW4ncyBiYXNlIFByb2plY3QgY2xhc3MgLSBjb25zdHJ1Y3RlZCB2aWEgc3VwZXIoKSBiZWxvdyAtXG4gICAgLy8gcmVkaXJlY3RzIHRoZSAqcmVhbCogb3V0ZGlyIHRvIGEgZnJlc2ggdGVtcCBkaXJlY3RvcnkgaW5zdGVhZCBvZiBjd2QuXG4gICAgLy8gVGhpcyBlYXJseSB3cml0ZSBydW5zIGJlZm9yZSB0aGF0IHJlZGlyZWN0IGV4aXN0cywgc28gd2l0aG91dCB0aGlzXG4gICAgLy8gZ3VhcmQgaXQgd291bGQgd3JpdGUgc3RyYWlnaHQgaW50byB0aGlzIHJlcG8ncyBvd24gd29ya2luZyB0cmVlXG4gICAgLy8gaW5zdGVhZCBvZiB0aGUgdGVzdCdzIHRlbXAgZGlyLlxuICAgIGlmICgob3B0aW9ucy5zYW1wbGVDb2RlID8/IHRydWUpICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCcpIHtcbiAgICAgIGNvbnN0IG91dGRpciA9IHBhdGgucmVzb2x2ZShvcHRpb25zLm91dGRpciA/PyAnLicpO1xuICAgICAgY29uc3QgbGFtYmRhRW50cnlwb2ludCA9IHBhdGguam9pbihvdXRkaXIsICdzcmMnLCAnY3JkLWV4YW1wbGUnLCAnY3JkLWV4YW1wbGUubGFtYmRhLnRzJyk7XG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMobGFtYmRhRW50cnlwb2ludCkpIHtcbiAgICAgICAgZnMubWtkaXJTeW5jKHBhdGguZGlybmFtZShsYW1iZGFFbnRyeXBvaW50KSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgICAgIGZzLndyaXRlRmlsZVN5bmMobGFtYmRhRW50cnlwb2ludCwgZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2Nkay1jb25zdHJ1Y3Qvc3JjX2NyZC1leGFtcGxlLmxhbWJkYS50c2ApLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN1cGVyKHtcbiAgICAgIGF1dGhvck9yZ2FuaXphdGlvbjogdHJ1ZSxcbiAgICAgIGNvcHlyaWdodE93bmVyOiAnTVYgQ29uc3VsdGluZyBHbWJIJyxcbiAgICAgIGxpY2Vuc2U6ICdBcGFjaGUtMi4wJyxcbiAgICAgIGpzaWlWZXJzaW9uOiAnfjYuMC4wJyxcbiAgICAgIHR5cGVzY3JpcHRWZXJzaW9uOiAnXjYuMC4yJyxcbiAgICAgIG1pbk5vZGVWZXJzaW9uOiBub2RlVmVyc2lvbixcbiAgICAgIHdvcmtmbG93Tm9kZVZlcnNpb246IG5vZGVWZXJzaW9uLFxuICAgICAgc3RhYmlsaXR5OiAnZXhwZXJpbWVudGFsJyxcbiAgICAgIHJlbGVhc2VUb05wbTogdHJ1ZSxcbiAgICAgIHBhY2thZ2VNYW5hZ2VyOiBqYXZhc2NyaXB0Lk5vZGVQYWNrYWdlTWFuYWdlci5OUE0sXG4gICAgICBucG1BY2Nlc3M6IGphdmFzY3JpcHQuTnBtQWNjZXNzLlBVQkxJQyxcbiAgICAgIGxhbWJkYU9wdGlvbnM6IHtcbiAgICAgICAgcnVudGltZTogbGFtYmRhTm9kZVZlcnNpb24sXG4gICAgICAgIGF3c1Nka0Nvbm5lY3Rpb25SZXVzZTogZmFsc2UsIC8vIGRvZXNuJ3QgZXhpc3QgaW4gQVdTIFNESyBKUyB2M1xuICAgICAgfSxcbiAgICAgIGF1dG9BcHByb3ZlT3B0aW9uczoge1xuICAgICAgICAvLyAnbXZjLWJvdCcgKHRoZSBQUk9KRU5fR0lUSFVCX1RPS0VOIGlkZW50aXR5KSBpcyBkZWxpYmVyYXRlbHlcbiAgICAgICAgLy8gZXhjbHVkZWQ6IEdpdEh1YiByZWplY3RzIGEgUFIgcmV2aWV3IGZyb20gdGhlIHNhbWUgYWNjb3VudCB0aGF0XG4gICAgICAgIC8vIGF1dGhvcmVkIHRoZSBQUiAoXCJDYW4gbm90IGFwcHJvdmUgeW91ciBvd24gcHVsbCByZXF1ZXN0XCIpLCBhbmRcbiAgICAgICAgLy8gdGhpcyB0b2tlbiBjYW4gYWxzbyBhdXRob3IgUFJzIGFnYWluc3QgZ2VuZXJhdGVkIHByb2plY3RzIChlLmcuXG4gICAgICAgIC8vIHNjYWZmb2xkZXItZHJpdmVuIGF1dG9tYXRpb24pLiBUaG9zZSBQUnMgYXJlIGF1dG8tYXBwcm92ZWQgdmlhXG4gICAgICAgIC8vIE1lcmdpZnkgaW5zdGVhZCwgYmVsb3csIHdoaWNoIHBvc3RzIHRoZSByZXZpZXcgYXMgdGhlIE1lcmdpZnlcbiAgICAgICAgLy8gYXBwIC0gYSBkaWZmZXJlbnQgYWN0b3IuIFNlZSBtYXZvZ2VsL212Yy1wcm9qZW4jNzQuXG4gICAgICAgIGFsbG93ZWRVc2VybmFtZXM6IFtcbiAgICAgICAgICAnZGVwZW5kYWJvdCcsXG4gICAgICAgICAgJ2RlcGVuZGFib3RbYm90XScsXG4gICAgICAgICAgJ2dpdGh1Yi1ib3QnLFxuICAgICAgICAgICdnaXRodWItYWN0aW9uc1tib3RdJyxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gVGhlIG5hbWUgb2YgdGhlIHNlY3JldCB0aGF0IGhhcyB0aGUgR2l0SHViIFBBVCBmb3IgYXV0by1hcHByb3ZpbmcgUFJzIHdpdGggcGVybWlzc2lvbnMgcmVwbywgd29ya2Zsb3csIHdyaXRlOnBhY2thZ2VzXG4gICAgICAgIC8vIEdlbmVyYXRlIGEgbmV3IFBBVCAoaHR0cHM6Ly9naXRodWIuY29tL3NldHRpbmdzL3Rva2Vucy9uZXcpIGFuZCBhZGQgaXQgdG8geW91ciByZXBvJ3Mgc2VjcmV0c1xuICAgICAgICAvLyBOT1RFOiBjb21lcyBmcm9tIE1WLUNvbnN1bHRpbmcgT3JnXG4gICAgICAgIHNlY3JldDogJ1BST0pFTl9HSVRIVUJfVE9LRU4nLFxuICAgICAgfSxcbiAgICAgIGRlcGVuZGFib3Q6IHRydWUsXG4gICAgICBkZXBlbmRhYm90T3B0aW9uczoge1xuICAgICAgICBzY2hlZHVsZUludGVydmFsOiBEZXBlbmRhYm90U2NoZWR1bGVJbnRlcnZhbC5XRUVLTFksXG4gICAgICAgIGxhYmVsczogWydkZXBlbmRlbmNpZXMnLCAnYXV0by1hcHByb3ZlJ10sXG4gICAgICAgIGdyb3Vwczoge1xuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHBhdHRlcm5zOiBbJyonXSxcbiAgICAgICAgICAgIGV4Y2x1ZGVQYXR0ZXJuczogWydhd3MtY2RrKicsICdwcm9qZW4nXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBpZ25vcmU6IFt7IGRlcGVuZGVuY3lOYW1lOiAnYXdzLWNkay1saWInIH0sIHsgZGVwZW5kZW5jeU5hbWU6ICdhd3MtY2RrJyB9XSxcbiAgICAgIH0sXG4gICAgICAvLyAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3Byb2plbi9wcm9qZW4vZGlzY3Vzc2lvbnMvNDA0MCNkaXNjdXNzaW9uY29tbWVudC0xMTkwNTYyOFxuICAgICAgcmVsZWFzYWJsZUNvbW1pdHM6IFJlbGVhc2FibGVDb21taXRzLm9mVHlwZShbXG4gICAgICAgICdmZWF0JyxcbiAgICAgICAgJ2ZpeCcsXG4gICAgICAgICdjaG9yZScsXG4gICAgICAgICdyZWZhY3RvcicsXG4gICAgICAgICdwZXJmJyxcbiAgICAgIF0pLFxuICAgICAgZ2l0aHViT3B0aW9uczoge1xuICAgICAgICBwdWxsUmVxdWVzdExpbnRPcHRpb25zOiB7XG4gICAgICAgICAgc2VtYW50aWNUaXRsZU9wdGlvbnM6IHtcbiAgICAgICAgICAgIC8vIHNlZSBjb21taXQgdHlwZXMgaGVyZTogaHR0cHM6Ly93d3cuY29udmVudGlvbmFsY29tbWl0cy5vcmcvZW4vdjEuMC4wLyNzdW1tYXJ5XG4gICAgICAgICAgICB0eXBlczogW1xuICAgICAgICAgICAgICAnZmVhdCcsXG4gICAgICAgICAgICAgICdmaXgnLFxuICAgICAgICAgICAgICAnY2hvcmUnLFxuICAgICAgICAgICAgICAncmVmYWN0b3InLFxuICAgICAgICAgICAgICAncGVyZicsXG4gICAgICAgICAgICAgICdkb2NzJyxcbiAgICAgICAgICAgICAgJ3N0eWxlJyxcbiAgICAgICAgICAgICAgJ3Rlc3QnLFxuICAgICAgICAgICAgICAnYnVpbGQnLFxuICAgICAgICAgICAgICAnY2knLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHZlcnNpb25yY09wdGlvbnM6IHtcbiAgICAgICAgdHlwZXM6IFtcbiAgICAgICAgICB7IHR5cGU6ICdmZWF0Jywgc2VjdGlvbjogJ0ZlYXR1cmVzJyB9LFxuICAgICAgICAgIHsgdHlwZTogJ2ZpeCcsIHNlY3Rpb246ICdCdWcgRml4ZXMnIH0sXG4gICAgICAgICAgeyB0eXBlOiAnY2hvcmUnLCBzZWN0aW9uOiAnQ2hvcmVzJyB9LFxuICAgICAgICAgIHsgdHlwZTogJ2RvY3MnLCBzZWN0aW9uOiAnRG9jcycgfSxcbiAgICAgICAgICB7IHR5cGU6ICdzdHlsZScsIGhpZGRlbjogdHJ1ZSB9LFxuICAgICAgICAgIHsgdHlwZTogJ3JlZmFjdG9yJywgaGlkZGVuOiB0cnVlIH0sXG4gICAgICAgICAgeyB0eXBlOiAncGVyZicsIHNlY3Rpb246ICdQZXJmb3JtYW5jZScgfSxcbiAgICAgICAgICB7IHR5cGU6ICd0ZXN0JywgaGlkZGVuOiB0cnVlIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgZXNsaW50T3B0aW9uczoge1xuICAgICAgICBwcmV0dGllcjogZmFsc2UsXG4gICAgICAgIGRpcnM6IFsnc3JjJ10sXG4gICAgICAgIGlnbm9yZVBhdHRlcm5zOiBbJyoqLyotZnVuY3Rpb24udHMnLCAnZXhhbXBsZXMvJ10sXG4gICAgICB9LFxuICAgICAgLy8gZXhwZXJpbWVudGFsSW50ZWdSdW5uZXI6IHRydWUsXG4gICAgICAvLyBtYW51YWwgaW50ZWcgdGVzdCBzZXR1cFxuICAgICAgdHNjb25maWdEZXY6IHtcbiAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7XG4gICAgICAgICAgdHlwZXM6IFsnbm9kZScsICdqZXN0J10sXG4gICAgICAgIH0sXG4gICAgICAgIGluY2x1ZGU6IFsnaW50ZWctdGVzdHMvKiovKi50cyddLFxuICAgICAgfSxcbiAgICAgIHB1bGxSZXF1ZXN0VGVtcGxhdGVDb250ZW50czogW2ZzLnJlYWRGaWxlU3luYyhgJHtiYXNlQXNzZXRzRGlyZWN0b3J5fS9jb21tb24vZ2l0aHViX3B1bGxfcmVxdWVzdC5tZGApLnRvU3RyaW5nKCldLFxuICAgICAgLy8gTk9URTogaXNzdWUgdGVtcGxhdGVzIGFyZSBub3Qgc3VwcG9ydGVkIHlldC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9qZW4vcHJvamVuL3B1bGwvMzY0OFxuICAgICAgLy8gaXNzdWVUZW1wbGF0ZXM6IHt9XG4gICAgICByZWFkbWU6IHtcbiAgICAgICAgY29udGVudHM6IFtcbiAgICAgICAgICBgXG4hW1NvdXJjZV0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvc3RhcnMvTVYtQ29uc3VsdGluZy8ke29wdGlvbnMubmFtZX0/bG9nbz1naXRodWImbGFiZWw9R2l0SHViJTIwU3RhcnMpXG5bIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9NVi1Db25zdWx0aW5nLyR7b3B0aW9ucy5uYW1lfS9hY3Rpb25zL3dvcmtmbG93cy9idWlsZC55bWwvYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL01WLUNvbnN1bHRpbmcvJHtvcHRpb25zLm5hbWV9L2FjdGlvbnMvd29ya2Zsb3dzL2J1aWxkLnltbClcblshW0VTTGludCBDb2RlIEZvcm1hdHRpbmddKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvY29kZV9zdHlsZS1lc2xpbnQtYnJpZ2h0Z3JlZW4uc3ZnKV0oaHR0cHM6Ly9lc2xpbnQub3JnKVxuWyFbTGF0ZXN0IHJlbGVhc2VdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL3JlbGVhc2UvTVYtQ29uc3VsdGluZy8ke29wdGlvbnMubmFtZX0uc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL01WLUNvbnN1bHRpbmcvJHtvcHRpb25zLm5hbWV9L3JlbGVhc2VzKVxuIVtHaXRIdWJdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL2xpY2Vuc2UvTVYtQ29uc3VsdGluZy8ke29wdGlvbnMubmFtZX0pXG5bIVtucG1dKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vbnBtL2R0L0BtYXZvZ2VsLyR7b3B0aW9ucy5uYW1lfT9sYWJlbD1ucG0mY29sb3I9b3JhbmdlKV0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQG1hdm9nZWwvJHtvcHRpb25zLm5hbWV9KVxuWyFbdHlwZXNjcmlwdF0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS9qc2lpLXR5cGVzY3JpcHQtYmx1ZXZpb2xldC5zdmcpXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9AbWF2b2dlbC8ke29wdGlvbnMubmFtZX0pXG4gICAgICAgICAgYCxcbiAgICAgICAgICBgIyAke29wdGlvbnMubmFtZX1gLFxuICAgICAgICAgICdNeSBhd2Vzb21lIGRlc2NyaXB0aW9uLi4uJyxcbiAgICAgICAgICBgXG4jIyBUYWJsZSBvZiBDb250ZW50c1xuXG4tIFtGZWF0dXJlc10oI2ZlYXR1cmVzKVxuLSBbVXNhZ2VdKCN1c2FnZSlcbi0gW1NvbHV0aW9uIERlc2lnbl0oI3NvbHV0aW9uLWRlc2lnbilcbi0gW0luc3BpcmF0aW9uXSgjaW5zcGlyYXRpb24pXG5cbiMjIEZlYXR1cmVzXG5cbi0g4pqhICoqUXVpY2sgU2V0dXAqKjogVEJEXG4tIPCfk48gKipCZXN0IFByYWN0aWNlIFNldHVwKio6IFRCRFxuLSDwn6S54oCN4pmC77iPICoqUHJlLWluc3RhbGxlZCBwYWNrYWdlcyoqOiBUQkRcbi0g8J+Pl++4jyAqKkV4dGVuc2liaWxpdHkqKjogVEJEXG5cbiMjIFVzYWdlXG5UaGUgZm9sbG93aW5nIHN0ZXBzIGdldCB5b3Ugc3RhcnRlZDpcblxuMS4gQ3JlYXRlIGEgbmV3IFxcYGF3c2Nkay1hcHBcXGAgdmlhXG5cXGBcXGBcXGBiYXNoXG5ucHggcHJvamVuIG5ldyBhd3NjZGstYXBwLXRzIC0tY2RrVmVyc2lvbj0yLjI2MS4wIC0tcGFja2FnZS1tYW5hZ2VyPW5wbVxuXFxgXFxgXFxgXG4zLiBBZGQgXFxgQG1hdm9nZWwvJHtvcHRpb25zLm5hbWV9XFxgIGFzIGEgZGVwZW5kZW5jeSB0byB5b3VyIHByb2plY3QgaW4gdGhlIFxcYC5wcm9qZW5yYy50c1xcYCBmaWxlXG40LiBSdW4gXFxgbnB4IHByb2plblxcYCB0byBpbnN0YWxsIGl0XG41LiBBZGQgdGhlIGZvbGxvd2luZyB0byB0aGUgXFxgc3JjL21haW4udHNcXGAgZmlsZTpcblxcYFxcYFxcYHRzXG5pbXBvcnQgeyBBcHAsIFN0YWNrLCBTdGFja1Byb3BzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBQbGFjZWhvbGRlciB9IGZyb20gJ0BtYXZvZ2VsLyR7b3B0aW9ucy5uYW1lfSc7XG5cbmV4cG9ydCBjbGFzcyBNeVN0YWNrIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RhY2tQcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBuZXcgUGxhY2Vob2xkZXIodGhpcywgJ3BsYWNlaG9sZGVyJywge1xuICAgICAgLy8gYW5kIG1vcmUuLi4g8J+SoVxuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IGVudiA9IHtcbiAgYWNjb3VudDogJzEyMzQ1Njc4OTkxMicsXG4gIHJlZ2lvbjogJ2V1LWNlbnRyYWwtMScsXG59O1xuXG5jb25zdCBhcHAgPSBuZXcgQXBwKCk7XG5uZXcgTXlTdGFjayhhcHAsICdwbGFjZWhvbGRlcicsIHsgZW52IH0pO1xuYXBwLnN5bnRoKCk7XG5cXGBcXGBcXGBcblxuYW5kIGRlcGxveSBpdFxuXFxgXFxgXFxgYmFzaFxubnB4IHByb2plbiBidWlsZFxubnB4IHByb2plbiBkZXBsb3lcblxcYFxcYFxcYFxuXG53aXRoIHRoZSBvdXRwdXRcblxcYFxcYFxcYGNvbnNvbGVcblRCRFxuXFxgXFxgXFxgXG5cblNlZSB0aGUgW2V4YW1wbGVzXSguL2V4YW1wbGVzKSBmb2xkZXIgZm9yIG1vcmUgaW5zcGlyYXRpb24uXG5cbiMjIFNvbHV0aW9uIERlc2lnblxuXG48ZGV0YWlscz5cbiAgPHN1bW1hcnk+Li4uIGlmIHlvdSdyZSBjdXJpb3VzIGFib3V0IGNsaWNrIGhlcmUgZm9yIHRoZSBkZXRhaWxzPC9zdW1tYXJ5PlxuXG4hW3BsYWNlaG9sZGVyXShkb2NzL2ltZy9wbGFjZWhvbGRlci5kcmF3aW8tbWluLnBuZylcblxuPC9kZXRhaWxzPlxuXG4jIyBJbnNwaXJhdGlvblxuXG5hZGQgdG9vbHMgb3IgbGlua3Mgd2hpY2ggaW5zcGlyZWQgeW91XG4gICAgICAgICAgYCxcbiAgICAgICAgICBmcy5yZWFkRmlsZVN5bmMoYCR7YmFzZUFzc2V0c0RpcmVjdG9yeX0vY29tbW9uL2dpdGh1Yl9yZWFkbWVfY3RhLm1kYCkudG9TdHJpbmcoKSxcbiAgICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICAgIH0sXG4gICAgICAvLyBOT1RFOiBrZWVwIGFsbCB0aGUgcGFzc2VkIGluIG9wdGlvbnMgd2hpY2ggY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBvbmVzIVxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIC8vIGFwcGxpZWQgYWZ0ZXIgLi4ub3B0aW9ucyBzbyB0aGUgREVGQVVMVF9DREtfVkVSU0lPTiBmYWxsYmFjayBhYm92ZVxuICAgICAgLy8gYWx3YXlzIHdpbnMgb3ZlciBhbiB1bmRlZmluZWQgb3B0aW9ucy5jZGtWZXJzaW9uXG4gICAgICBjZGtWZXJzaW9uLFxuICAgIH0pO1xuXG4gICAgLy8gVHlwZVNjcmlwdCA2IG5vIGxvbmdlciBhdXRvLWRpc2NvdmVycyBAdHlwZXMvKiBwYWNrYWdlc1xuICAgIHRoaXMudHNjb25maWdEZXYuZmlsZS5hZGRPdmVycmlkZSgnY29tcGlsZXJPcHRpb25zLnR5cGVzJywgWydub2RlJywgJ2plc3QnXSk7XG4gICAgdGhpcy50c2NvbmZpZz8uZmlsZS5hZGRPdmVycmlkZSgnY29tcGlsZXJPcHRpb25zLnR5cGVzJywgWydub2RlJ10pO1xuXG4gICAgLy8gcHJvamVuJ3MgQXV0b01lcmdlIGNvbXBvbmVudCBoYXJkY29kZXMgYGRlbGV0ZV9oZWFkX2JyYW5jaDoge31gIGluIHRoZVxuICAgIC8vIG1lcmdpZnkgcnVsZSB3aXRoIG5vIG9wdGlvbiB0byBkaXNhYmxlIGl0LiBTdHJpcCBpdCBzbyBNZXJnaWZ5IGRvZXMgbm90XG4gICAgLy8gZGVsZXRlIGhlYWQgYnJhbmNoZXMgb24gbWVyZ2UgKHJlbm92YXRlL2RlcGVuZGFib3QgbWFuYWdlIHRoZWlyIG93bikuXG4gICAgLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NVi1Db25zdWx0aW5nL2Nkay12c2NvZGUtc2VydmVyL3B1bGwvMTEyXG4gICAgdGhpcy50cnlGaW5kT2JqZWN0RmlsZSgnLm1lcmdpZnkueW1sJyk/LmFkZERlbGV0aW9uT3ZlcnJpZGUoXG4gICAgICAncHVsbF9yZXF1ZXN0X3J1bGVzLjAuYWN0aW9ucy5kZWxldGVfaGVhZF9icmFuY2gnLFxuICAgICk7XG5cbiAgICAvLyBBdXRvLWFwcHJvdmUgUFJzIGF1dGhvcmVkIGJ5ICdtdmMtYm90JyBpdHNlbGYgKHNlZSB0aGVcbiAgICAvLyBhdXRvQXBwcm92ZU9wdGlvbnMgY29tbWVudCBhYm92ZSBmb3Igd2h5IHRoaXMgY2FuJ3QgZ28gdGhyb3VnaCB0aGVcbiAgICAvLyBHaXRIdWIgQWN0aW9ucyBhdXRvLWFwcHJvdmUgcGF0aCkgdmlhIE1lcmdpZnkgaW5zdGVhZDogaXQgcG9zdHMgdGhlXG4gICAgLy8gcmV2aWV3IGFzIHRoZSBNZXJnaWZ5IGFwcCwgYSBkaWZmZXJlbnQgYWN0b3IuIFNlZSBtYXZvZ2VsL212Yy1wcm9qZW4jNzQuXG4gICAgdGhpcy50cnlGaW5kT2JqZWN0RmlsZSgnLm1lcmdpZnkueW1sJyk/LmFkZE92ZXJyaWRlKFxuICAgICAgJ3B1bGxfcmVxdWVzdF9ydWxlcy4xJyxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ0F1dG8tYXBwcm92ZSBzZWxmLWF1dGhvcmVkIG12Yy1ib3QgUFJzJyxcbiAgICAgICAgY29uZGl0aW9uczogW1xuICAgICAgICAgICdhdXRob3I9bXZjLWJvdCcsXG4gICAgICAgICAgJ2xhYmVsPWF1dG8tYXBwcm92ZScsXG4gICAgICAgIF0sXG4gICAgICAgIGFjdGlvbnM6IHtcbiAgICAgICAgICByZXZpZXc6IHtcbiAgICAgICAgICAgIHR5cGU6ICdBUFBST1ZFJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdBdXRvbWF0aWNhbGx5IGFwcHJvdmVkOiBzZWxmLWF1dGhvcmVkIGF1dG9tYXRpb24gUFIuJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgLy8gZ2l0aWdub3JlXG4gICAgY29uc3QgZmlsZXNQYXR0ZXJuVG9HaXRpZ25vcmUgPSBbXG4gICAgICAndG1wJyxcbiAgICAgICcuY29kZWdwdCcsXG4gICAgXTtcbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXNQYXR0ZXJuVG9HaXRpZ25vcmUpIHtcbiAgICAgIHRoaXMuZ2l0aWdub3JlLmV4Y2x1ZGUoZmlsZSk7XG4gICAgfVxuICAgIHRoaXMuYWRkRGVwcyhcbiAgICAgIC8vIGNkay1uYWcgdjMgcmVxdWlyZXMgYXdzLWNkay1saWIgPj0gMi4yNTcuMCAoc2VlIGNkay1uYWcgTUlHUkFUSU9OLm1kKVxuICAgICAgJ2Nkay1uYWdAXjMuMC4xJyxcbiAgICApO1xuICAgIC8vIENhcCBpbnRlZy1ydW5uZXIgYXQgTEFTVF9JTlRFR19SVU5ORVJfVkVSU0lPTiBzaW5jZSBpdCBzdG9wcGVkIHB1Ymxpc2hpbmcgYWZ0ZXIgdGhhdCB2ZXJzaW9uLlxuICAgIC8vIGludGVnLXJ1bm5lciB1c2VzIHBsYWluIHZlcnNpb25zIChubyAtYWxwaGEuMCBzdWZmaXgpLlxuICAgIC8vIGludGVnLXRlc3RzLWFscGhhIGFuZCBhd3NsaW50IG9ubHkgcHVibGlzaCBhdCBtaW5vciB2ZXJzaW9ucyAoZS5nLiAyLjE5Ny4wLWFscGhhLjAsIG5vdCAyLjE5Ny40LWFscGhhLjApLlxuICAgIGNvbnN0IHJhd0Nka1ZlcnNpb24gPSB0aGlzLmNka1ZlcnNpb24ucmVwbGFjZSgvW1xcXn5dLywgJycpO1xuICAgIGNvbnN0IGludGVnUnVubmVyVmVyc2lvbiA9IHJhd0Nka1ZlcnNpb24ubG9jYWxlQ29tcGFyZShMQVNUX0lOVEVHX1JVTk5FUl9WRVJTSU9OLCB1bmRlZmluZWQsIHsgbnVtZXJpYzogdHJ1ZSwgc2Vuc2l0aXZpdHk6ICdiYXNlJyB9KSA+IDBcbiAgICAgID8gTEFTVF9JTlRFR19SVU5ORVJfVkVSU0lPTlxuICAgICAgOiByYXdDZGtWZXJzaW9uO1xuICAgIC8vIEFscGhhIHBhY2thZ2VzIG9ubHkgcHVibGlzaCBhdCAuMCBwYXRjaCB2ZXJzaW9ucyDigJQgbm9ybWFsaXplIHRvIG1pbm9yIHZlcnNpb25cbiAgICBjb25zdCBbbWFqb3IsIG1pbm9yXSA9IHJhd0Nka1ZlcnNpb24uc3BsaXQoJy4nKTtcbiAgICBjb25zdCBhbHBoYVZlcnNpb24gPSBgJHttYWpvcn0uJHttaW5vcn0uMGA7XG4gICAgdGhpcy5hZGREZXZEZXBzKFxuICAgICAgYEBhd3MtY2RrL2ludGVnLXJ1bm5lckAke2ludGVnUnVubmVyVmVyc2lvbn1gLFxuICAgICAgYEBhd3MtY2RrL2ludGVnLXRlc3RzLWFscGhhQCR7YWxwaGFWZXJzaW9ufS1hbHBoYS4wYCxcbiAgICAgICdAY29tbWl0bGludC9jbGlAXjIwLjEuMCcsXG4gICAgICAnQGNvbW1pdGxpbnQvY29uZmlnLWNvbnZlbnRpb25hbEBeMjAuMC4wJyxcbiAgICAgIGBhd3NsaW50QCR7YWxwaGFWZXJzaW9ufS1hbHBoYS4wYCxcbiAgICAgICdodXNreUBeOS4xLjcnLFxuICAgICk7XG5cbiAgICB0aGlzLnBhY2thZ2Uuc2V0U2NyaXB0KCdwcmVwYXJlJywgJ2h1c2t5Jyk7XG4gICAgbmV3IFRleHRGaWxlKHRoaXMsICcuY29tbWl0bGludHJjLmpzJywge1xuICAgICAgbGluZXM6IFtcbiAgICAgICAgJ21vZHVsZS5leHBvcnRzID0geyBleHRlbmRzOiBbXFwnQGNvbW1pdGxpbnQvY29uZmlnLWNvbnZlbnRpb25hbFxcJ10gfTsnLFxuICAgICAgXSxcbiAgICAgIG1hcmtlcjogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHRoaXMucGFja2FnZS5zZXRTY3JpcHQoJ2F3c2xpbnQnLCAnYXdzbGludCcpO1xuICAgIC8vIC5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnltbFxuICAgIGNvbnN0IGJ1aWxkV29ya2Zsb3cgPSB0aGlzLmdpdGh1Yj8udHJ5RmluZFdvcmtmbG93KCdidWlsZCcpO1xuICAgIGlmICghYnVpbGRXb3JrZmxvdykgcmV0dXJuO1xuICAgIGNvbnN0IGJ1aWxkSm9iID0gYnVpbGRXb3JrZmxvdy5nZXRKb2IoJ2J1aWxkJyk7XG4gICAgaWYgKCFidWlsZEpvYiB8fCAhKCdzdGVwcycgaW4gYnVpbGRKb2IpKSByZXR1cm47XG4gICAgLy8gVE9ETzogZmlndXJlIG91dCB3aHkgd3JvbmcgdHlwZXNcbiAgICBjb25zdCBnZXRCdWlsZFN0ZXBzID0gYnVpbGRKb2Iuc3RlcHMgYXMgdW5rbm93biBhcyAoKSA9PiBKb2JTdGVwW107XG4gICAgY29uc3QgYnVpbGRKb2JTdGVwcyA9IGdldEJ1aWxkU3RlcHMoKTtcbiAgICBidWlsZFdvcmtmbG93LnVwZGF0ZUpvYignYnVpbGQnLCB7XG4gICAgICAuLi5idWlsZEpvYixcbiAgICAgIHN0ZXBzOiBbXG4gICAgICAgIC4uLmJ1aWxkSm9iU3RlcHMuc2xpY2UoMCwgNCksXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnUnVuIGF3c2xpbnQnLFxuICAgICAgICAgIHJ1bjogJ25wbSBydW4gYXdzbGludCcsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmJ1aWxkSm9iU3RlcHMuc2xpY2UoNCksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gUGluIEdpdEh1YiBBY3Rpb25zIHRoYXQgcHJvamVuIG90aGVyd2lzZSByZWZlcmVuY2VzIGJ5IGEgbXV0YWJsZSB0YWcsXG4gICAgLy8gYW5kIHN0b3AgY2hlY2tvdXQgc3RlcHMgdGhhdCBuZXZlciBwdXNoIGJhY2sgd2l0aCBpdCBmcm9tIHBlcnNpc3RpbmcgYVxuICAgIC8vIGdpdCBjcmVkZW50aWFsIG9uIHRoZSBydW5uZXIgLSBwZXIgeml6bW9yJ3MgdW5waW5uZWQtdXNlcyAvIGFydGlwYWNrZWRcbiAgICAvLyBhdWRpdHMgKGh0dHBzOi8vZG9jcy56aXptb3Iuc2gvYXVkaXRzLykuIENlbnRyYWxpemVkIGhlcmUgc28gZXZlcnlcbiAgICAvLyBwcm9qZWN0IGJ1aWx0IG9uIE12Y0Nka0NvbnN0cnVjdExpYnJhcnkgZ2V0cyBhIGNsZWFuIGB6aXptb3IgLmAgcnVuXG4gICAgLy8gd2l0aG91dCByZWltcGxlbWVudGluZyB0aGlzIGluIGl0cyBvd24gLnByb2plbnJjLnRzLlxuICAgIHRoaXMuZ2l0aHViPy5hY3Rpb25zLnNldCgnYWN0aW9ucy9zZXR1cC1ub2RlQHY3LjAuMCcsICdhY3Rpb25zL3NldHVwLW5vZGVAODIwNzYyNzg2MDI2NzQwYzc2ZjM2MDg1YjBlZmM0N2EzMWZlNTAyMCcpOyAvLyB2Ny4wLjBcbiAgICB0aGlzLmdpdGh1Yj8uYWN0aW9ucy5zZXQoJ2FjdGlvbnMvc2V0dXAtcHl0aG9uQHY3LjAuMCcsICdhY3Rpb25zL3NldHVwLXB5dGhvbkA1ZmRhM2I5NWE0ZWE5MTI5OWEzNGU4OTQ1ODNjMzg2MjE1M2U0Yjk3Jyk7IC8vIHY3LjAuMFxuICAgIHRoaXMuZ2l0aHViPy5hY3Rpb25zLnNldCgncGV0ZXItZXZhbnMvY3JlYXRlLXB1bGwtcmVxdWVzdEB2OC4xLjEnLCAncGV0ZXItZXZhbnMvY3JlYXRlLXB1bGwtcmVxdWVzdEA1ZjY5NzhmYWYwODlkNGQyMGIwMGM3NzY2OTg5ZDA3NmJiMmZjN2YxJyk7IC8vIHY4LjEuMVxuXG4gICAgY29uc3QgZGlzYWJsZUNoZWNrb3V0Q3JlZGVudGlhbFBlcnNpc3RlbmNlID0gKHdvcmtmbG93TmFtZTogc3RyaW5nLCBqb2JJZHM6IHN0cmluZ1tdKSA9PiB7XG4gICAgICBjb25zdCB3b3JrZmxvdyA9IHRoaXMuZ2l0aHViPy50cnlGaW5kV29ya2Zsb3cod29ya2Zsb3dOYW1lKTtcbiAgICAgIGlmICghd29ya2Zsb3cpIHJldHVybjtcbiAgICAgIGZvciAoY29uc3Qgam9iSWQgb2Ygam9iSWRzKSB7XG4gICAgICAgIGNvbnN0IGpvYiA9IHdvcmtmbG93LmdldEpvYihqb2JJZCk7XG4gICAgICAgIGlmICgham9iIHx8ICEoJ3N0ZXBzJyBpbiBqb2IpKSBjb250aW51ZTtcbiAgICAgICAgLy8gYGpvYi5zdGVwc2AgaXMgYSBib3VuZCBhY2Nlc3NvciBmdW5jdGlvbiB1bnRpbCBhIGpvYidzIGZpcnN0XG4gICAgICAgIC8vIGB1cGRhdGVKb2IoKWAgY2FsbCwgYWZ0ZXIgd2hpY2ggaXQgYmVjb21lcyBhIHBsYWluIGFycmF5IChzZWUgdGhlXG4gICAgICAgIC8vIFwiVE9ETzogZmlndXJlIG91dCB3aHkgd3JvbmcgdHlwZXNcIiBjb21tZW50IG9uIHRoZSBidWlsZC55bWwgcGF0Y2hcbiAgICAgICAgLy8gYWJvdmUpIC0gc28gcmVzb2x2ZSBpdCBkZWZlbnNpdmVseSByYXRoZXIgdGhhbiBhc3N1bWluZyBlaXRoZXIgc2hhcGUuXG4gICAgICAgIGNvbnN0IHJhd1N0ZXBzID0gam9iLnN0ZXBzIGFzIHVua25vd24gYXMgSm9iU3RlcFtdIHwgKCgpID0+IEpvYlN0ZXBbXSk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGVwcyA9IHR5cGVvZiByYXdTdGVwcyA9PT0gJ2Z1bmN0aW9uJyA/IHJhd1N0ZXBzKCkgOiByYXdTdGVwcztcbiAgICAgICAgd29ya2Zsb3cudXBkYXRlSm9iKGpvYklkLCB7XG4gICAgICAgICAgLi4uam9iLFxuICAgICAgICAgIHN0ZXBzOiBjdXJyZW50U3RlcHMubWFwKChzdGVwKSA9PlxuICAgICAgICAgICAgc3RlcC5pZCA9PT0gJ2NoZWNrb3V0J1xuICAgICAgICAgICAgICA/IHsgLi4uc3RlcCwgd2l0aDogeyAuLi5zdGVwLndpdGgsICdwZXJzaXN0LWNyZWRlbnRpYWxzJzogZmFsc2UgfSB9XG4gICAgICAgICAgICAgIDogc3RlcCxcbiAgICAgICAgICApLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuICAgIC8vIEV4Y2x1ZGVzIGJ1aWxkLnltbCdzIGBzZWxmLW11dGF0aW9uYCBqb2IsIHdoaWNoIHJlbGllcyBvbiB0aGVcbiAgICAvLyBwZXJzaXN0ZWQgY3JlZGVudGlhbCB0byBgZ2l0IHB1c2hgIGl0cyBwYXRjaCBiYWNrIHRvIHRoZSBQUiBicmFuY2guXG4gICAgZGlzYWJsZUNoZWNrb3V0Q3JlZGVudGlhbFBlcnNpc3RlbmNlKCdidWlsZCcsIFsnYnVpbGQnLCAncGFja2FnZS1qcycsICdwYWNrYWdlLXB5dGhvbiddKTtcbiAgICBkaXNhYmxlQ2hlY2tvdXRDcmVkZW50aWFsUGVyc2lzdGVuY2UoJ3VwZ3JhZGUtbWFpbicsIFsndXBncmFkZScsICdwciddKTtcblxuICAgIC8vIFRoZSByZWxlYXNlIHdvcmtmbG93J3MgYHJlbGVhc2VfbnBtYC9gcmVsZWFzZV9weXBpYCBqb2JzIGFyZSBvbmx5XG4gICAgLy8gYWRkZWQgYnkgdGhlIGBSZWxlYXNlYCBjb21wb25lbnQncyBvd24gYHByZVN5bnRoZXNpemUoKWAsIHdoaWNoIHJ1bnNcbiAgICAvLyBkdXJpbmcgYHByb2plY3Quc3ludGgoKWAgLSBhZnRlciB0aGlzIGNvbnN0cnVjdG9yIHJldHVybnMuIFBhdGNoIHRoZW1cbiAgICAvLyBmcm9tIGEgY29tcG9uZW50IGFkZGVkIGFmdGVyd2FyZHMsIHNvIGl0cyBgcHJlU3ludGhlc2l6ZSgpYCBydW5zIGxhdGVyXG4gICAgLy8gc3RpbGwgKGNvbXBvbmVudCBwcmVTeW50aGVzaXplIG9yZGVyIGZvbGxvd3MgY29uc3RydWN0aW9uIG9yZGVyKS5cbiAgICBjbGFzcyBSZWxlYXNlV29ya2Zsb3dDcmVkZW50aWFsUGF0Y2ggZXh0ZW5kcyBDb21wb25lbnQge1xuICAgICAgcHJlU3ludGhlc2l6ZSgpIHtcbiAgICAgICAgZGlzYWJsZUNoZWNrb3V0Q3JlZGVudGlhbFBlcnNpc3RlbmNlKCdyZWxlYXNlJywgWydyZWxlYXNlJywgJ3JlbGVhc2VfbnBtJywgJ3JlbGVhc2VfcHlwaSddKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbmV3IFJlbGVhc2VXb3JrZmxvd0NyZWRlbnRpYWxQYXRjaCh0aGlzKTtcblxuICAgIHRoaXMucGFja2FnZS5zZXRTY3JpcHQoXG4gICAgICAnaW50ZWctdGVzdCcsXG4gICAgICBgaW50ZWctcnVubmVyIC0tZGlyZWN0b3J5IC4vaW50ZWctdGVzdHMgJHtpbnRlZ1Rlc3RSZWdpb25zPy5tYXAocmVnaW9uID0+IGAtLXBhcmFsbGVsLXJlZ2lvbnMgJHtyZWdpb259YCkuam9pbignICcpfSAtLXVwZGF0ZS1vbi1mYWlsZWRgLFxuICAgICk7XG5cbiAgICBuZXcgVGV4dEZpbGUodGhpcywgJy5naXRodWIvSVNTVUVfVEVNUExBVEUvYnVnX3JlcG9ydC5tZCcsIHtcbiAgICAgIGxpbmVzOiBbZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9naXRodWJfYnVnX3JlcG9ydC5tZGApLnRvU3RyaW5nKCldLFxuICAgIH0pO1xuXG4gICAgbmV3IFRleHRGaWxlKHRoaXMsICcuZ2l0aHViL0lTU1VFX1RFTVBMQVRFL2ZlYXR1cmVfcmVxdWVzdC5tZCcsIHtcbiAgICAgIGxpbmVzOiBbZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9naXRodWJfZmVhdHVyZV9yZXF1ZXN0Lm1kYCkudG9TdHJpbmcoKV0sXG4gICAgfSk7XG5cbiAgICBuZXcgWWFtbEZpbGUodGhpcywgJy5naXRodWIvRlVORElORy55YW1sJywge1xuICAgICAgb2JqOiB7XG4gICAgICAgIGdpdGh1YjogJ21hdm9nZWwnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIG5ldyBUZXh0RmlsZSh0aGlzLCAnQ09OVFJJQlVUSU5HLm1kJywge1xuICAgICAgbGluZXM6IFtmcy5yZWFkRmlsZVN5bmMoYCR7YmFzZUFzc2V0c0RpcmVjdG9yeX0vY29tbW9uL2NvbnRyaWJ1dGluZy5tZGApLnRvU3RyaW5nKCldLFxuICAgIH0pO1xuXG4gICAgbmV3IFRleHRGaWxlKHRoaXMsICcucHJldHRpZXJyYycsIHtcbiAgICAgIGxpbmVzOiBbZnMucmVhZEZpbGVTeW5jKGAke2Jhc2VBc3NldHNEaXJlY3Rvcnl9L2NvbW1vbi9wcmV0dGllcnJjYCkudG9TdHJpbmcoKV0sXG4gICAgfSk7XG5cbiAgICAvLyB3cml0ZSBzYW1wbGUgY29kZSB0byBtYWluLnRzICYgdG8gbWFpbi50ZXN0LnRzXG4gICAgaWYgKG9wdGlvbnMuc2FtcGxlQ29kZSA/PyB0cnVlKSB7XG4gICAgICBuZXcgU2FtcGxlQ29kZSh0aGlzLCB7XG4gICAgICAgIGJhc2VBc3NldHNEaXJlY3RvcnksXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuaW50ZXJmYWNlIFNhbXBsZUNvZGVPcHRpb25zIHtcbiAgcmVhZG9ubHkgYmFzZUFzc2V0c0RpcmVjdG9yeT86IHN0cmluZztcbn1cblxuY2xhc3MgU2FtcGxlQ29kZSBleHRlbmRzIENvbXBvbmVudCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGlicmFyeTogQXdzQ2RrQ29uc3RydWN0TGlicmFyeTtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBTYW1wbGVDb2RlT3B0aW9ucztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBsaWJyYXJ5OiBBd3NDZGtDb25zdHJ1Y3RMaWJyYXJ5LFxuICAgIG9wdGlvbnM6IFNhbXBsZUNvZGVPcHRpb25zLFxuICApIHtcbiAgICBzdXBlcihsaWJyYXJ5KTtcbiAgICB0aGlzLmxpYnJhcnkgPSBsaWJyYXJ5O1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBwdWJsaWMgc3ludGhlc2l6ZSgpIHtcbiAgICBjb25zdCBvdXRkaXIgPSB0aGlzLnByb2plY3Qub3V0ZGlyO1xuICAgIGNvbnN0IHNyY2RpciA9IHBhdGguam9pbihvdXRkaXIsIHRoaXMubGlicmFyeS5zcmNkaXIpO1xuICAgIGlmIChcbiAgICAgIGZzLmV4aXN0c1N5bmMoYCR7c3JjZGlyfS9pbmRleC50c2ApICYmXG4gICAgICAhZnMucmVhZEZpbGVTeW5jKGAke3NyY2Rpcn0vaW5kZXgudHNgKS50b1N0cmluZygpLmluY2x1ZGVzKCdleHBvcnQgY2xhc3MgSGVsbG8nKSAvLyBOb3RlOiBmcm9tIHBhcmVudFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZzLm1rZGlyU3luYyhzcmNkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKHNyY2RpciwgJ2luZGV4LnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC9zcmNfaW5kZXgudHNgKS50b1N0cmluZygpKTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihzcmNkaXIsICdwbGFjZWhvbGRlci50cycpLCBmcy5yZWFkRmlsZVN5bmMoYCR7dGhpcy5vcHRpb25zLmJhc2VBc3NldHNEaXJlY3Rvcnl9L2Nkay1jb25zdHJ1Y3Qvc3JjX3BsYWNlaG9sZGVyLnRzYCkudG9TdHJpbmcoKSk7XG4gICAgLy8gY3JkIHdpdGggbGFtYmRhIGdlbmVyYXRpb25cbiAgICAvLyBOb3RlOiBjcmQtZXhhbXBsZS5sYW1iZGEudHMgaXMgd3JpdHRlbiBlYXJsaWVyLCBiZWZvcmUgYHN1cGVyKClgLCBzb1xuICAgIC8vIEF1dG9EaXNjb3ZlcidzIGNvbnN0cnVjdG9yLXRpbWUgZ2xvYiBjYW4gZmluZCBpdCAtIHNlZSB0aGUgY29tbWVudCBpblxuICAgIC8vIHRoZSBjb25zdHJ1Y3RvciBhYm92ZS5cbiAgICBmcy5ta2RpclN5bmMoYCR7c3JjZGlyfS9jcmQtZXhhbXBsZWAsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGAke3NyY2Rpcn0vY3JkLWV4YW1wbGVgLCAnY3JkLWV4YW1wbGUudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L3NyY19jcmQtZXhhbXBsZS50c2ApLnRvU3RyaW5nKCkpO1xuXG5cbiAgICBjb25zdCB0ZXN0ZGlyID0gcGF0aC5qb2luKG91dGRpciwgdGhpcy5saWJyYXJ5LnRlc3RkaXIpO1xuICAgIGlmIChcbiAgICAgIGZzLmV4aXN0c1N5bmModGVzdGRpcikgJiZcbiAgICAgIGZzLnJlYWRkaXJTeW5jKHRlc3RkaXIpLmZpbHRlcigoeCkgPT4geC5lbmRzV2l0aCgnLnRzJykpICYmXG4gICAgICAhZnMuZXhpc3RzU3luYyhgJHt0ZXN0ZGlyfS9oZWxsby50ZXN0LnRzYCkgLy8gTm90ZTogZnJvbSBwYXJlbnRcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gcmVtb3ZlICR7dGVzdGRpcn0vaGVsbG8udGVzdC50cyBmaWxlLiBPbiB0aGUgb3RoZXIgaGFuZCwgd2Ugb3ZlcnJpZGUgaW5kZXgudHNcbiAgICBmcy51bmxpbmtTeW5jKGAke3Rlc3RkaXJ9L2hlbGxvLnRlc3QudHNgKTtcbiAgICBmcy5ta2RpclN5bmModGVzdGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLmpvaW4odGVzdGRpciwgJ2luZGV4LnRlc3QudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L3Rlc3RfaW5kZXgudGVzdC50c2ApLnRvU3RyaW5nKCkpO1xuICAgIC8vIGxhbWJkYSB0ZXN0cyB3aXRoIGplc3Qgc3R1YnNcbiAgICBmcy5ta2RpclN5bmMoYCR7dGVzdGRpcn0vY3JkLWV4YW1wbGVgLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihgJHt0ZXN0ZGlyfS9jcmQtZXhhbXBsZWAsICdjcmQtZXhhbXBsZS50ZXN0LnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC90ZXN0X2NyZC1leGFtcGxlLnRlc3QudHNgKS50b1N0cmluZygpKTtcblxuXG4gICAgY29uc3QgaW50ZWdUZXN0ZGlyID0gcGF0aC5qb2luKG91dGRpciwgJ2ludGVnLXRlc3RzJyk7XG4gICAgaWYgKFxuICAgICAgZnMuZXhpc3RzU3luYyhpbnRlZ1Rlc3RkaXIpICYmXG4gICAgICBmcy5yZWFkZGlyU3luYyhpbnRlZ1Rlc3RkaXIpLmZpbHRlcigoeCkgPT4geC5lbmRzV2l0aCgnLnRzJykpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZzLm1rZGlyU3luYyhpbnRlZ1Rlc3RkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGludGVnVGVzdGRpciwgJ2ludGVnLnBsYWNlaG9sZGVyLnRzJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY2RrLWNvbnN0cnVjdC9pbnRlZ19pbnRlZy5wbGFjZWhvbGRlci50c2ApLnRvU3RyaW5nKCkpO1xuXG4gICAgY29uc3QgaW50ZWdUZXN0RnVuY3Rpb25zZGlyID0gcGF0aC5qb2luKGludGVnVGVzdGRpciwgJ2Z1bmN0aW9ucycpO1xuICAgIGlmIChcbiAgICAgIGZzLmV4aXN0c1N5bmMoaW50ZWdUZXN0RnVuY3Rpb25zZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmMoaW50ZWdUZXN0RnVuY3Rpb25zZGlyKS5maWx0ZXIoKHgpID0+IHguZW5kc1dpdGgoJy50cycpKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmcy5ta2RpclN5bmMoaW50ZWdUZXN0RnVuY3Rpb25zZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihpbnRlZ1Rlc3RGdW5jdGlvbnNkaXIsICd0ZXN0LWhhbmRsZXIudHMnKSwgZnMucmVhZEZpbGVTeW5jKGAke3RoaXMub3B0aW9ucy5iYXNlQXNzZXRzRGlyZWN0b3J5fS9jZGstY29uc3RydWN0L2ludGVnX3Rlc3QtaGFuZGxlci50c2ApLnRvU3RyaW5nKCkpO1xuXG4gICAgY29uc3QgZG9jc2RpciA9IHBhdGguam9pbihvdXRkaXIsICdkb2NzJyk7XG4gICAgaWYgKFxuICAgICAgZnMuZXhpc3RzU3luYyhkb2NzZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmMoZG9jc2RpcikuZmlsdGVyKCh4KSA9PiB4LmVuZHNXaXRoKCcuZHJhd2lvJykpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZzLm1rZGlyU3luYyhkb2NzZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihkb2NzZGlyLCAncGxhY2Vob2xkZXIuZHJhd2lvJyksIGZzLnJlYWRGaWxlU3luYyhgJHt0aGlzLm9wdGlvbnMuYmFzZUFzc2V0c0RpcmVjdG9yeX0vY29tbW9uL2RvY3NfcGxhY2Vob2xkZXIuZHJhd2lvYCkudG9TdHJpbmcoKSk7XG5cbiAgICBjb25zdCBleGFtcGxlc2RpciA9IHBhdGguam9pbihvdXRkaXIsICdleGFtcGxlcycsICdzaW1wbGUnKTtcbiAgICBpZiAoXG4gICAgICBmcy5leGlzdHNTeW5jKGV4YW1wbGVzZGlyKSAmJlxuICAgICAgZnMucmVhZGRpclN5bmMoZXhhbXBsZXNkaXIpLmZpbHRlcigoeCkgPT4geC5lbmRzV2l0aCgnLmRyYXdpbycpKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmcy5ta2RpclN5bmMoZXhhbXBsZXNkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGV4YW1wbGVzZGlyLCAnbWFpbi50cycpLCBmcy5yZWFkRmlsZVN5bmMoYCR7dGhpcy5vcHRpb25zLmJhc2VBc3NldHNEaXJlY3Rvcnl9L2Nkay1jb25zdHJ1Y3QvZXhhbXBsZXNfc2ltcGxlX21haW4udHNgKS50b1N0cmluZygpKTtcbiAgfVxufSJdfQ==
@@ -28,12 +28,11 @@ The [projen](https://projen.io/) baseline for all [MV Consulting](https://manuel
28
28
  mkdir my-new-construct && cd my-new-construct
29
29
 
30
30
  # 2. set up the project using the projen new command
31
- npx projen new \
32
- --from @mavogel/mvc-projen@~0 \
33
- --cdkVersion=2.261.0 \
34
- --package-manager=npm
31
+ npx projen new --from @mavogel/mvc-projen@~0
35
32
  ```
36
33
 
34
+ By default this uses npm and a recent AWS CDK version; pass `--cdkVersion=x.y.z` or `--package-manager=<pnpm|yarn|...>` to override either.
35
+
37
36
  ## Inspiration
38
37
 
39
38
  This project was created based on the following inspiration
@@ -41,14 +40,14 @@ This project was created based on the following inspiration
41
40
  * [taimos-projen](https://github.com/taimos/taimos-projen): code from [Thorsten Höger](https://www.taimos.de/) has always been an inspiration for my `cdk` and [projen](https://projen.io/) projects.
42
41
  * [projen-cdk-hugo-pipeline](https://github.com/MV-Consulting/projen-cdk-hugo-pipeline/): a previous projen baseline we built, during which we learned a lot about the internal of projen. We could build up on this knowledge.
43
42
 
44
- ## 🚀 Unlock the Full Potential of Your AWS Cloud Infrastructure
43
+ ## Unlock the Full Potential of Your AWS Cloud Infrastructure
45
44
 
46
- Hi, I’m Manuel, an AWS expert passionate about empowering businesses with **scalable, resilient, and cost-optimized cloud solutions**. With **MV Consulting**, I specialize in crafting **tailored AWS architectures** and **DevOps-driven workflows** that not only meet your current needs but grow with you.
45
+ Hi, I’m Manuel, an AWS expert passionate about empowering businesses with **scalable, resilient, and cost-optimized cloud solutions**. I specialize in crafting **tailored AWS architectures** and **DevOps-driven workflows** that not only meet your current needs but grow with you.
47
46
 
48
47
  ---
49
48
 
50
49
 
51
- ### 🌟 Why Work With Me?
50
+ ### Why Work With Me?
52
51
 
53
52
  ✔️ **Tailored AWS Solutions:** Every business is unique, so I design custom solutions that fit your goals and challenges.
54
53
  ✔️ **Well-Architected Designs:** From scalability to security, my solutions align with AWS Well-Architected Framework.
@@ -58,24 +57,24 @@ Hi, I’m Manuel, an AWS expert passionate about empowering businesses with **sc
58
57
  ---
59
58
 
60
59
 
61
- ### 🛠 What I Bring to the Table
60
+ ### What I Bring to the Table
62
61
 
63
- 🔑 **12x AWS Certifications**
62
+ **AWS Certifications**
64
63
  I’m **AWS Certified Solutions Architect and DevOps – Professional** and hold numerous additional certifications, so you can trust I’ll bring industry best practices to your projects. Feel free to explose by [badges](https://www.credly.com/users/manuel-vogel)
65
64
 
66
- ⚙️ **Infrastructure as Code (IaC)**
65
+ **Infrastructure as Code (IaC)**
67
66
  With deep expertise in **AWS CDK** and **Terraform**, I ensure your infrastructure is automated, maintainable, and scalable.
68
67
 
69
- 📦 **DevOps Expertise**
68
+ **DevOps Expertise**
70
69
  From CI/CD pipelines with **GitHub Actions** and **GitLab CI** to container orchestration **Kubernetes** and others, I deliver workflows that are smooth and efficient.
71
70
 
72
- 🌐 **Hands-On Experience**
73
- With over **7 years of AWS experience** and a decade in the tech world, I’ve delivered solutions for companies large and small. My open-source contributions showcase my commitment to transparency and innovation. Feel free to explore my [GitHub profile](https://github.com/mavogel)
71
+ **Hands-On Experience**
72
+ With over **8 years of AWS experience** and a decade in the tech world, I’ve delivered solutions for companies large and small. My open-source contributions showcase my commitment to transparency and innovation. Feel free to explore my [GitHub profile](https://github.com/mavogel)
74
73
 
75
74
  ---
76
75
 
77
76
 
78
- ### 💼 Let’s Build Something Great Together
77
+ ### Let’s Build Something Great Together
79
78
 
80
79
  I know that choosing the right partner is critical to your success. When you work with me, you’re not just contracting an engineer – you’re gaining a trusted advisor and hands-on expert who cares about your business as much as you do.
81
80
 
@@ -83,19 +82,19 @@ I know that choosing the right partner is critical to your success. When you wor
83
82
  ✔️ **Transparent Process**: Expect open communication, clear timelines, and visible results.
84
83
  ✔️ **Real Value**: My solutions focus on delivering measurable impact for your business.
85
84
 
86
- <a href="https://tinyurl.com/mvc-15min"><img alt="Schedule your call" src="https://img.shields.io/badge/schedule%20your%20call-success.svg?style=for-the-badge"/></a>
85
+ <a href="https://calendar.app.google/7aahUfGifBUvgX62A"><img alt="Schedule your call" src="https://img.shields.io/badge/schedule%20your%20call-success.svg?style=for-the-badge"/></a>
87
86
 
88
87
  ---
89
88
 
90
89
 
91
- ## 🙌 Acknowledgements
90
+ ## Acknowledgements
92
91
 
93
92
  Big shoutout to the amazing team behind [Projen](https://github.com/projen/projen)!
94
93
  Their groundbreaking work simplifies cloud infrastructure projects and inspires us every day. 💡
95
94
 
96
95
  ## Author
97
96
 
98
- [Manuel Vogel](https://manuel-vogel.de/about/)
97
+ [Manuel Vogel-Johnson](https://vogel-johnson.com/about/)
99
98
 
100
- [![](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/manuel-vogel)
99
+ [![](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/manuel-vogel-johnson)
101
100
  [![](https://img.shields.io/badge/GitHub-2b3137?style=for-the-badge&logo=github&logoColor=white)](https://github.com/mavogel)
@@ -13,7 +13,7 @@ import (
13
13
  projen "github.com/projen/projen-go/projen/jsii"
14
14
  )
15
15
 
16
- //go:embed mavogel-mvc-projen-0.0.34.tgz
16
+ //go:embed mavogel-mvc-projen-0.0.35.tgz
17
17
  var tarball []byte
18
18
 
19
19
  // Initialize loads the necessary packages in the @jsii/kernel to support the enclosing module.
@@ -24,5 +24,5 @@ func Initialize() {
24
24
  projen.Initialize()
25
25
 
26
26
  // Load this library into the kernel
27
- _jsii_.Load("@mavogel/mvc-projen", "0.0.34", tarball)
27
+ _jsii_.Load("@mavogel/mvc-projen", "0.0.35", tarball)
28
28
  }
@@ -1 +1 @@
1
- 0.0.34
1
+ 0.0.35
package/package.json CHANGED
@@ -88,7 +88,7 @@
88
88
  "publishConfig": {
89
89
  "access": "public"
90
90
  },
91
- "version": "0.0.35",
91
+ "version": "0.0.36",
92
92
  "jest": {
93
93
  "coverageProvider": "v8",
94
94
  "testMatch": [