cdklabs-projen-project-types 0.6.5 → 0.6.7

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.
@@ -47,7 +47,7 @@ const LATEST_COMMIT_OUTPUT = 'latest_commit';
47
47
  const ALL_PACKAGES_INPUT = '*all packages*';
48
48
  class MonorepoRelease extends projen_1.Component {
49
49
  options;
50
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.yarn.MonorepoRelease", version: "0.6.5" };
50
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.yarn.MonorepoRelease", version: "0.6.7" };
51
51
  /**
52
52
  * Returns the `MonorepoReleaseWorkflow` component of a project or `undefined` if the project
53
53
  * does not have a MonorepoReleaseWorkflow component.
@@ -336,7 +336,10 @@ class MonorepoRelease extends projen_1.Component {
336
336
  postBuildSteps.push({
337
337
  name: 'Check for new commits',
338
338
  id: GIT_REMOTE_STEPID,
339
- run: `echo "${LATEST_COMMIT_OUTPUT}=$(git ls-remote origin -h \${{ github.ref }} | cut -f1)" >> $GITHUB_OUTPUT`,
339
+ env: {
340
+ GITHUB_REF: '${{ github.ref }}',
341
+ },
342
+ run: `echo "${LATEST_COMMIT_OUTPUT}=$(git ls-remote origin -h "$GITHUB_REF" | cut -f1)" >> $GITHUB_OUTPUT`,
340
343
  });
341
344
  }
342
345
  else {
@@ -563,4 +566,4 @@ function shouldReleaseExpression(workspaceName, releaseSetByChoice) {
563
566
  .map(([pkg]) => pkg);
564
567
  return `contains(fromJSON('${JSON.stringify(triggeringPackages)}'), github.event.inputs.package)`;
565
568
  }
566
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub3JlcG8tcmVsZWFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy95YXJuL21vbm9yZXBvLXJlbGVhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE2QjtBQUM3QixtQ0FBb0c7QUFDcEcsMkRBQTBGO0FBRTFGLGlFQUE2RDtBQUM3RCxpRkFBMkY7QUFFM0YsZ0NBQWdDO0FBQ2hDLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQztBQUNoQyxNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQztBQUN2QyxNQUFNLG9CQUFvQixHQUFHLGVBQWUsQ0FBQztBQUM3QyxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDO0FBRTVDLE1BQWEsZUFBZ0IsU0FBUSxrQkFBUztJQTZCRzs7SUE1Qi9DOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBZ0I7UUFDL0IsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQVksRUFBd0IsRUFBRSxDQUFDLENBQUMsWUFBWSxlQUFlLENBQUM7UUFDdkcsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFZ0IsVUFBVSxDQUFTO0lBQ25CLE1BQU0sQ0FBZ0I7SUFDdEIsY0FBYyxDQUErQjtJQUM3QyxXQUFXLENBQVU7SUFDckIsS0FBSyxDQUFTO0lBQ2QsaUJBQWlCLEdBQUcsSUFBSSxLQUFLLEVBTzFDLENBQUM7SUFFRyxRQUFRLENBQXVCO0lBQy9CLFdBQVcsQ0FBUTtJQUNWLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUF5QyxDQUFDO0lBQzlFLG1CQUFtQixHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO0lBRTdELFlBQVksT0FBZ0IsRUFBbUIsVUFBa0MsRUFBRTtRQUNqRixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFEOEIsWUFBTyxH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QUFFLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQzFELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXZCLE9BQU8sc0JBQXNCLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsa0NBQWtDLENBQUM7QUFDcEcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBEZXBlbmRlbmN5VHlwZSwgZ2l0aHViLCByZWxlYXNlIGFzIHByb2plblJlbGVhc2UsIENvbXBvbmVudCwgUHJvamVjdCwgVGFzayB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBCVUlMRF9BUlRJRkFDVF9OQU1FLCBQRVJNSVNTSU9OX0JBQ0tVUF9GSUxFIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWIvY29uc3RhbnRzJztcbmltcG9ydCB7IE1vbm9yZXBvUmVsZWFzZU9wdGlvbnMgfSBmcm9tICcuL21vbm9yZXBvLXJlbGVhc2Utb3B0aW9ucyc7XG5pbXBvcnQgeyBUeXBlU2NyaXB0V29ya3NwYWNlIH0gZnJvbSAnLi90eXBlc2NyaXB0LXdvcmtzcGFjZSc7XG5pbXBvcnQgeyBXb3Jrc3BhY2VSZWxlYXNlLCBXb3Jrc3BhY2VSZWxlYXNlT3B0aW9ucyB9IGZyb20gJy4vdHlwZXNjcmlwdC13b3Jrc3BhY2UtcmVsZWFzZSc7XG5cbi8vIGNvcGllZCBmcm9tIHByb2plbi9yZWxlYXNlLnRzXG5jb25zdCBSRUxFQVNFX0pPQklEID0gJ3JlbGVhc2UnO1xuY29uc3QgR0lUX1JFTU9URV9TVEVQSUQgPSAnZ2l0X3JlbW90ZSc7XG5jb25zdCBMQVRFU1RfQ09NTUlUX09VVFBVVCA9ICdsYXRlc3RfY29tbWl0JztcbmNvbnN0IEFMTF9QQUNLQUdFU19JTlBVVCA9ICcqYWxsIHBhY2thZ2VzKic7XG5cbmV4cG9ydCBjbGFzcyBNb25vcmVwb1JlbGVhc2UgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYE1vbm9yZXBvUmVsZWFzZVdvcmtmbG93YCBjb21wb25lbnQgb2YgYSBwcm9qZWN0IG9yIGB1bmRlZmluZWRgIGlmIHRoZSBwcm9qZWN0XG4gICAqIGRvZXMgbm90IGhhdmUgYSBNb25vcmVwb1JlbGVhc2VXb3JrZmxvdyBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHByb2plY3Q6IFByb2plY3QpOiBNb25vcmVwb1JlbGVhc2UgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGlzTW9ub3JlcG9SZWxlYXNlV29ya2Zsb3cgPSAoYzogQ29tcG9uZW50KTogYyBpcyBNb25vcmVwb1JlbGVhc2UgPT4gYyBpbnN0YW5jZW9mIE1vbm9yZXBvUmVsZWFzZTtcbiAgICByZXR1cm4gcHJvamVjdC5jb21wb25lbnRzLmZpbmQoaXNNb25vcmVwb1JlbGVhc2VXb3JrZmxvdyk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGJyYW5jaE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBnaXRodWI6IGdpdGh1Yi5HaXRIdWI7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVsZWFzZVRyaWdnZXI6IHByb2plblJlbGVhc2UuUmVsZWFzZVRyaWdnZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgYnVpbGRXaXRoTng6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgd3NSdW46IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBwYWNrYWdlc1RvUmVsZWFzZSA9IG5ldyBBcnJheTx7XG4gICAgcmVhZG9ubHkgd29ya3NwYWNlRGlyZWN0b3J5OiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcmVsZWFzZToge1xuICAgICAgcmVhZG9ubHkgd29ya3NwYWNlOiBUeXBlU2NyaXB0V29ya3NwYWNlO1xuICAgICAgcmVhZG9ubHkgcHVibGlzaGVyOiBwcm9qZW5SZWxlYXNlLlB1Ymxpc2hlcjtcbiAgICAgIHJlYWRvbmx5IG9wdGlvbnM6IFBhcnRpYWw8cHJvamVuUmVsZWFzZS5CcmFuY2hPcHRpb25zPjtcbiAgICB9O1xuICB9PigpO1xuXG4gIHByaXZhdGUgd29ya2Zsb3c/OiBnaXRodWIuVGFza1dvcmtmbG93O1xuICBwcml2YXRlIHJlbGVhc2VUYXNrPzogVGFzaztcbiAgcHJpdmF0ZSByZWFkb25seSB3b3Jrc3BhY2VSZWxlYXNlcyA9IG5ldyBNYXA8VHlwZVNjcmlwdFdvcmtzcGFjZSwgV29ya3NwYWNlUmVsZWFzZT4oKTtcbiAgcHJpdmF0ZSBfcmVsZWFzZVNldEJ5Q2hvaWNlID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogTW9ub3JlcG9SZWxlYXNlT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICB0aGlzLmJyYW5jaE5hbWUgPSBvcHRpb25zLmJyYW5jaE5hbWUgPz8gJ21haW4nO1xuICAgIGNvbnN0IGdoID0gZ2l0aHViLkdpdEh1Yi5vZihwcm9qZWN0KTtcbiAgICBpZiAoIWdoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb2plY3QgaXMgbm90IGEgR2l0SHViIHByb2plY3Q6ICR7cHJvamVjdH1gKTtcbiAgICB9XG4gICAgdGhpcy5naXRodWIgPSBnaDtcbiAgICB0aGlzLnJlbGVhc2VUcmlnZ2VyID0gb3B0aW9ucy5yZWxlYXNlVHJpZ2dlciA/PyBwcm9qZW5SZWxlYXNlLlJlbGVhc2VUcmlnZ2VyLmNvbnRpbnVvdXMoKTtcbiAgICB0aGlzLmJ1aWxkV2l0aE54ID0gb3B0aW9ucy5idWlsZFdpdGhOeCA/PyBmYWxzZTtcbiAgICB0aGlzLndzUnVuID0gb3B0aW9ucy55YXJuQmVycnkgPyAneWFybiB3b3Jrc3BhY2VzIGZvcmVhY2ggLS1hbGwgLS1leGNsdWRlIC4gLS10b3BvbG9naWNhbC1kZXYgcnVuJyA6ICd5YXJuIHdvcmtzcGFjZXMgcnVuJztcbiAgfVxuXG4gIHB1YmxpYyB3b3Jrc3BhY2VSZWxlYXNlKHByb2plY3Q6IFR5cGVTY3JpcHRXb3Jrc3BhY2UpIHtcbiAgICBjb25zdCByZXQgPSB0aGlzLndvcmtzcGFjZVJlbGVhc2VzLmdldChwcm9qZWN0KTtcbiAgICBpZiAoIXJldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyByZWxlYXNlIGZvciBwcm9qZWN0ICR7cHJvamVjdC5uYW1lfWApO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHVibGljIGFkZFdvcmtzcGFjZShwcm9qZWN0OiBUeXBlU2NyaXB0V29ya3NwYWNlLCBvcHRpb25zOiBXb3Jrc3BhY2VSZWxlYXNlT3B0aW9ucykge1xuICAgIGNvbnN0IHdvcmtzcGFjZVJlbGVhc2UgPSBuZXcgV29ya3NwYWNlUmVsZWFzZShwcm9qZWN0LCB7XG4gICAgICBwdWJsaXNoVG9OcG06IHRoaXMub3B0aW9ucy5wdWJsaXNoVG9OcG0sXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuXG4gICAgLy8gTWFrZSB0aGVzZSBwdWJsaWNseSBhY2Nlc3NpYmxlXG4gICAgdGhpcy53b3Jrc3BhY2VSZWxlYXNlcy5zZXQocHJvamVjdCwgd29ya3NwYWNlUmVsZWFzZSk7XG5cbiAgICBpZiAoIW9wdGlvbnMucHJpdmF0ZSAmJiB3b3Jrc3BhY2VSZWxlYXNlLnB1Ymxpc2hlcikge1xuICAgICAgdGhpcy5vYnRhaW5SZWxlYXNlVGFzaygpO1xuXG4gICAgICB0aGlzLnBhY2thZ2VzVG9SZWxlYXNlLnB1c2goe1xuICAgICAgICB3b3Jrc3BhY2VEaXJlY3Rvcnk6IHByb2plY3Qud29ya3NwYWNlRGlyZWN0b3J5LFxuICAgICAgICByZWxlYXNlOiB7XG4gICAgICAgICAgd29ya3NwYWNlOiB3b3Jrc3BhY2VSZWxlYXNlLndvcmtzcGFjZSxcbiAgICAgICAgICBwdWJsaXNoZXI6IHdvcmtzcGFjZVJlbGVhc2UucHVibGlzaGVyLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIC8vIGVuZm9yY2VkIG9wdGlvbnNcbiAgICAgICAgICAgIHdvcmtmbG93TmFtZTogdGhpcy5vcHRpb25zLnJlbGVhc2VXb3JrZmxvd05hbWUsXG4gICAgICAgICAgICB0YWdQcmVmaXg6IGAke3Byb2plY3QubmFtZX1AYCxcblxuICAgICAgICAgICAgLy8gb3B0aW9ucyB0aGF0IG1heSBiZSBvdmVycmlkZSBsb2NhbGx5XG4gICAgICAgICAgICBtYWpvclZlcnNpb246IG9wdGlvbnMudmVyc2lvbkJyYW5jaE9wdGlvbnMubWFqb3JWZXJzaW9uID8/IHRoaXMub3B0aW9ucy5tYWpvclZlcnNpb24sXG4gICAgICAgICAgICBtaW5NYWpvclZlcnNpb246IG9wdGlvbnMudmVyc2lvbkJyYW5jaE9wdGlvbnMubWluTWFqb3JWZXJzaW9uID8/IHRoaXMub3B0aW9ucy5taW5NYWpvclZlcnNpb24sXG4gICAgICAgICAgICBwcmVyZWxlYXNlOiBvcHRpb25zLnZlcnNpb25CcmFuY2hPcHRpb25zLnByZXJlbGVhc2UgPz8gdGhpcy5vcHRpb25zLnByZXJlbGVhc2UsXG4gICAgICAgICAgICBucG1EaXN0VGFnOiBvcHRpb25zLm5wbURpc3RUYWcgPz8gdGhpcy5vcHRpb25zLm5wbURpc3RUYWcsXG4gICAgICAgICAgICBlbnZpcm9ubWVudDogb3B0aW9ucy5lbnZpcm9ubWVudCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHByZVN5bnRoZXNpemUoKSB7XG4gICAgaWYgKCF0aGlzLnJlbGVhc2VUYXNrKSB7XG4gICAgICAvLyBXZSBkaWRuJ3QgZW5kIHVwIGFkZGluZyBhbnkgcGFja2FnZXNcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXB1dGVSZWxlYXNlU2V0cygpO1xuICAgIHRoaXMuY3JlYXRlUHVibGlzaGluZ01lY2hhbmlzbSgpO1xuICAgIHRoaXMucmVuZGVyUGFja2FnZVVwbG9hZHMoKTtcbiAgICB0aGlzLnJlbmRlclB1Ymxpc2hKb2JzKCk7XG4gICAgdGhpcy5yZW5kZXJXb3JrZmxvd0Rpc3BhdGNoSW5wdXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyUGFja2FnZVVwbG9hZHMoKSB7XG4gICAgY29uc3Qgbm9OZXdDb21taXRzID0gYFxcJHt7IHN0ZXBzLiR7R0lUX1JFTU9URV9TVEVQSUR9Lm91dHB1dHMuJHtMQVRFU1RfQ09NTUlUX09VVFBVVH0gPT0gZ2l0aHViLnNoYSB9fWA7XG5cbiAgICBmb3IgKGNvbnN0IHsgd29ya3NwYWNlRGlyZWN0b3J5LCByZWxlYXNlIH0gb2YgdGhpcy5wYWNrYWdlc1RvUmVsZWFzZSkge1xuICAgICAgY29uc3Qgam9iID0gdGhpcy53b3JrZmxvdz8uZ2V0Sm9iKFJFTEVBU0VfSk9CSUQpIGFzIGdpdGh1Yi53b3JrZmxvd3MuSm9iIHwgdW5kZWZpbmVkO1xuICAgICAgam9iPy5zdGVwcy5wdXNoKFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogYCR7cmVsZWFzZS53b3Jrc3BhY2UubmFtZX06IEJhY2t1cCBhcnRpZmFjdCBwZXJtaXNzaW9uc2AsXG4gICAgICAgICAgaWY6IG5vTmV3Q29tbWl0cyxcbiAgICAgICAgICBjb250aW51ZU9uRXJyb3I6IHRydWUsXG4gICAgICAgICAgcnVuOiBgY2QgJHtyZWxlYXNlLndvcmtzcGFjZS5hcnRpZmFjdHNEaXJlY3Rvcnl9ICYmIGdldGZhY2wgLVIgLiA+ICR7UEVSTUlTU0lPTl9CQUNLVVBfRklMRX1gLFxuICAgICAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHdvcmtzcGFjZURpcmVjdG9yeSxcbiAgICAgICAgfSxcbiAgICAgICAgZ2l0aHViLldvcmtmbG93U3RlcHMudXBsb2FkQXJ0aWZhY3Qoe1xuICAgICAgICAgIG5hbWU6IGAke3JlbGVhc2Uud29ya3NwYWNlLm5hbWV9OiBVcGxvYWQgYXJ0aWZhY3RgLFxuICAgICAgICAgIGlmOiBub05ld0NvbW1pdHMsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgLy8gRXZlcnkgYXJ0aWZhY3QgbXVzdCBoYXZlIGEgdW5pcXVlIG5hbWVcbiAgICAgICAgICAgIG5hbWU6IGJ1aWxkQXJ0aWZhY3ROYW1lKHJlbGVhc2Uud29ya3NwYWNlKSxcbiAgICAgICAgICAgIHBhdGg6IHBhdGguam9pbih3b3Jrc3BhY2VEaXJlY3RvcnksIHJlbGVhc2Uud29ya3NwYWNlLmFydGlmYWN0c0RpcmVjdG9yeSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyUHVibGlzaEpvYnMoKSB7XG4gICAgY29uc3QgR0FURV9KT0JJRCA9ICdyZWxlYXNlX2dhdGUnO1xuICAgIGNvbnN0IEdBVEVfT1VUUFVUX1NURVAgPSAnY29sbGVjdCc7XG5cbiAgICAvLyBCdWlsZCB0aGUgcmVsZWFzZSB0cmVlXG4gICAgY29uc3QgdHJlZSA9IG5ldyBSZWxlYXNlVHJlZSh0aGlzLnBhY2thZ2VzVG9SZWxlYXNlLCB0aGlzLmJyYW5jaE5hbWUpO1xuXG4gICAgLy8gUmVuZGVyIHRoZSByZWxlYXNlX2dhdGUgam9iXG4gICAgY29uc3QgZ2F0ZVN0ZXBzOiBnaXRodWIud29ya2Zsb3dzLkpvYlN0ZXBbXSA9IHRyZWUubm9kZXMubWFwKChub2RlKSA9PiB7XG4gICAgICBjb25zdCBwYWNrYWdlRmlsdGVyID0gYCghZ2l0aHViLmV2ZW50LmlucHV0cy5wYWNrYWdlIHx8IGdpdGh1Yi5ldmVudC5pbnB1dHMucGFja2FnZSA9PSAnJHtBTExfUEFDS0FHRVNfSU5QVVR9JyB8fCAke3Nob3VsZFJlbGVhc2VFeHByZXNzaW9uKG5vZGUubmFtZSwgdGhpcy5fcmVsZWFzZVNldEJ5Q2hvaWNlKX0pYDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGAke25vZGUubmFtZX06IENoZWNrIHB1Ymxpc2hgLFxuICAgICAgICBydW46IFtcbiAgICAgICAgICBgc2hvdWxkX3B1Ymxpc2g9XCJcXCR7eyBuZWVkcy4ke1JFTEVBU0VfSk9CSUR9Lm91dHB1dHMuJHtwdWJsaXNoUHJvamVjdE91dHB1dElkKG5vZGUud29ya3NwYWNlKX0gfX1cImAsXG4gICAgICAgICAgYHBhY2thZ2VfZmlsdGVyPVwiXFwke3sgJHtwYWNrYWdlRmlsdGVyfSB9fVwiYCxcbiAgICAgICAgICAnaWYgW1sgXCIkc2hvdWxkX3B1Ymxpc2hcIiAhPSBcInRydWVcIiBdXTsgdGhlbicsXG4gICAgICAgICAgYCAgZWNobyBcIuKPre+4jyBTa2lwcGluZyAke25vZGUubmFtZX06IHJlbGVhc2UgdGFnIGFscmVhZHkgZXhpc3RzXCJgLFxuICAgICAgICAgICdlbGlmIFtbIFwiJHBhY2thZ2VfZmlsdGVyXCIgIT0gXCJ0cnVlXCIgXV07IHRoZW4nLFxuICAgICAgICAgIGAgIGVjaG8gXCLij63vuI8gU2tpcHBpbmcgJHtub2RlLm5hbWV9OiBub3Qgc2VsZWN0ZWQgZm9yIHJlbGVhc2VcImAsXG4gICAgICAgICAgJ2Vsc2UnLFxuICAgICAgICAgIGAgIGVjaG8gXCLinIUgV2lsbCBwdWJsaXNoICR7bm9kZS5uYW1lfVwiYCxcbiAgICAgICAgICBgICBlY2hvIFwiJHtub2RlLm5hbWV9XCIgPj4gcHVibGlzaC50eHRgLFxuICAgICAgICAgICdmaScsXG4gICAgICAgIF0uam9pbignXFxuJyksXG4gICAgICB9O1xuICAgIH0pO1xuICAgIGdhdGVTdGVwcy5wdXNoKHtcbiAgICAgIGlkOiBHQVRFX09VVFBVVF9TVEVQLFxuICAgICAgbmFtZTogJ0NvbGxlY3QgcGFja2FnZXMgdG8gcHVibGlzaCcsXG4gICAgICBydW46IFtcbiAgICAgICAgJ2lmIFsgLWYgcHVibGlzaC50eHQgXTsgdGhlbicsXG4gICAgICAgICcgIHBhY2thZ2VzPSQoanEgLVJjIFxcJy5cXCcgcHVibGlzaC50eHQgfCBqcSAtc2MgXFwnLlxcJyknLFxuICAgICAgICAnZWxzZScsXG4gICAgICAgICcgIHBhY2thZ2VzPVxcJ1tdXFwnJyxcbiAgICAgICAgJ2ZpJyxcbiAgICAgICAgJ2VjaG8gXCJwYWNrYWdlc190b19wdWJsaXNoPSRwYWNrYWdlc1wiID4+ICRHSVRIVUJfT1VUUFVUJyxcbiAgICAgICAgJ2VjaG8gXCJQdWJsaXNoaW5nOiAkcGFja2FnZXNcIicsXG4gICAgICBdLmpvaW4oJ1xcbicpLFxuICAgIH0pO1xuXG4gICAgdGhpcy53b3JrZmxvdz8uYWRkSm9icyh7XG4gICAgICBbR0FURV9KT0JJRF06IHtcbiAgICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgICAgbmVlZHM6IFtSRUxFQVNFX0pPQklEXSxcbiAgICAgICAgcGVybWlzc2lvbnM6IHt9LFxuICAgICAgICBpZjogYFxcJHt7IG5lZWRzLiR7UkVMRUFTRV9KT0JJRH0ub3V0cHV0cy5sYXRlc3RfY29tbWl0ID09IGdpdGh1Yi5zaGEgfX1gLFxuICAgICAgICBuYW1lOiAnUHVibGlzaCBnYXRlJyxcbiAgICAgICAgb3V0cHV0czoge1xuICAgICAgICAgIHBhY2thZ2VzX3RvX3B1Ymxpc2g6IHtcbiAgICAgICAgICAgIHN0ZXBJZDogR0FURV9PVVRQVVRfU1RFUCxcbiAgICAgICAgICAgIG91dHB1dE5hbWU6ICdwYWNrYWdlc190b19wdWJsaXNoJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzdGVwczogZ2F0ZVN0ZXBzLFxuICAgICAgfSBhcyBhbnksXG4gICAgfSk7XG5cbiAgICAvLyBSZW5kZXIgcGVyLXBhY2thZ2UgZ2F0ZSBqb2JzIGFuZCBwdWJsaXNoIGpvYnMgZnJvbSB0aGUgdHJlZVxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiB0cmVlLm5vZGVzKSB7XG4gICAgICB0aGlzLndvcmtmbG93Py5hZGRKb2JzKHtcbiAgICAgICAgW25vZGUuZ2F0ZUpvYklkXTogbm9kZS5yZW5kZXJHYXRlSm9iKEdBVEVfSk9CSUQpLFxuICAgICAgICAuLi5ub2RlLnJlbmRlclB1Ymxpc2hKb2JzKHRoaXMub3B0aW9ucy5ub2RlVmVyc2lvbiksXG4gICAgICAgIFtub2RlLmRvbmVKb2JJZF06IG5vZGUucmVuZGVyRG9uZUpvYigpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvYnRhaW5SZWxlYXNlVGFzaygpOiBUYXNrIHtcbiAgICBpZiAodGhpcy5yZWxlYXNlVGFzaykge1xuICAgICAgcmV0dXJuIHRoaXMucmVsZWFzZVRhc2s7XG4gICAgfVxuXG4gICAgY29uc3QgZW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgUkVMRUFTRTogJ3RydWUnLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLm1ham9yVmVyc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbnYuTUFKT1IgPSB0aGlzLm9wdGlvbnMubWFqb3JWZXJzaW9uLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5taW5NYWpvclZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5tYWpvclZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pbk1ham9yVmVyc2lvbiBhbmQgbWFqb3JWZXJzaW9uIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLicpO1xuICAgICAgfVxuXG4gICAgICBlbnYuTUlOX01BSk9SID0gdGhpcy5vcHRpb25zLm1pbk1ham9yVmVyc2lvbi50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHRoaXMucmVsZWFzZVRhc2sgPSB0aGlzLnByb2plY3QuYWRkVGFzaygncmVsZWFzZScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnUHJlcGFyZSBhIHJlbGVhc2UgZnJvbSBhbGwgbW9ub3JlcG8gcGFja2FnZXMnLFxuICAgICAgZW52LFxuICAgIH0pO1xuICAgIC8vIFVucm9sbCBvdXQgdGhlICdyZWxlYXNlJyB0YXNrLCBhbmQgZG8gYWxsIHRoZSBwaGFzZXMgZm9yIGVhY2ggaW5kaXZpZHVhbCBwYWNrYWdlLiBXZSBuZWVkIHRvICdidW1wJyBhdCB0aGUgc2FtZVxuICAgIC8vIHRpbWUgc28gdGhhdCB0aGUgZGVwZW5kZW5jeSB2ZXJzaW9ucyBpbiBhbGwgJ3BhY2thZ2UuanNvbidzIGFyZSBjb3JyZWN0LlxuICAgIHRoaXMucmVsZWFzZVRhc2suZXhlYyhgJHt0aGlzLndzUnVufSBzaHggcm0gLXJmIGRpc3RgKTtcbiAgICB0aGlzLnJlbGVhc2VUYXNrLmV4ZWMoYCR7dGhpcy53c1J1bn0gYnVtcGApO1xuICAgIGlmICh0aGlzLmJ1aWxkV2l0aE54KSB7XG4gICAgICB0aGlzLnJlbGVhc2VUYXNrLmV4ZWMoJ254IHJ1bi1tYW55IC10IGJ1aWxkJyk7XG4gICAgICB0aGlzLnJlbGVhc2VUYXNrLmVudignTlhfU0tJUF9OWF9DQUNIRScsICd0cnVlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVsZWFzZVRhc2suZXhlYyhgJHt0aGlzLndzUnVufSBidWlsZGApO1xuICAgIH1cbiAgICB0aGlzLnJlbGVhc2VUYXNrLmV4ZWMoYCR7dGhpcy53c1J1bn0gdW5idW1wYCk7XG4gICAgLy8gYW50aS10YW1wZXIgY2hlY2sgKGZhaWxzIGlmIHRoZXJlIHdlcmUgY2hhbmdlcyB0byBjb21taXR0ZWQgZmlsZXMpXG4gICAgLy8gdGhpcyB3aWxsIGlkZW50aWZ5IGFueSBub24tY29tbWl0dGVkIGZpbGVzIGdlbmVyYXRlZCBkdXJpbmcgYnVpbGQgKGUuZy4gdGVzdCBzbmFwc2hvdHMpXG4gICAgdGhpcy5yZWxlYXNlVGFzay5leGVjKHByb2plblJlbGVhc2UuUmVsZWFzZS5BTlRJX1RBTVBFUl9DTUQpO1xuXG4gICAgcmV0dXJuIHRoaXMucmVsZWFzZVRhc2s7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVB1Ymxpc2hpbmdNZWNoYW5pc20oKSB7XG4gICAgaWYgKHRoaXMucmVsZWFzZVRyaWdnZXIuaXNNYW51YWwpIHtcbiAgICAgIHRoaXMuY3JlYXRlUHVibGlzaFRhc2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jcmVhdGVQdWJsaXNoV29ya2Zsb3coKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVB1Ymxpc2hUYXNrKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTWFudWFsIHB1Ymxpc2hpbmcgaXMgbm90IHN1cHBvcnRlZCByaWdodCBub3cnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSB0cmFuc2l0aXZlIHVwc3RyZWFtIGRlcGVuZGVuY2llcyAocnVudGltZSArIHBlZXIpIG9mIGEgd29ya3NwYWNlLlxuICAgKi9cbiAgcHJpdmF0ZSB1cHN0cmVhbVBhY2thZ2VOYW1lcyh3b3Jrc3BhY2U6IFR5cGVTY3JpcHRXb3Jrc3BhY2UpOiBTZXQ8c3RyaW5nPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgdmlzaXQgPSAod3M6IFR5cGVTY3JpcHRXb3Jrc3BhY2UpID0+IHtcbiAgICAgIGZvciAoY29uc3QgZGVwIG9mIHdzLndvcmtzcGFjZURlcGVuZGVuY2llcyhbRGVwZW5kZW5jeVR5cGUuUlVOVElNRSwgRGVwZW5kZW5jeVR5cGUuUEVFUl0pKSB7XG4gICAgICAgIGlmICghcmVzdWx0LmhhcyhkZXAubmFtZSkpIHtcbiAgICAgICAgICByZXN1bHQuYWRkKGRlcC5uYW1lKTtcbiAgICAgICAgICBpZiAoZGVwIGluc3RhbmNlb2YgVHlwZVNjcmlwdFdvcmtzcGFjZSkge1xuICAgICAgICAgICAgdmlzaXQoZGVwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHZpc2l0KHdvcmtzcGFjZSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgd29ya2Zsb3dfZGlzcGF0Y2ggaW5wdXQgd2l0aCBhIGNob2ljZSBvZiBwYWNrYWdlcy5cbiAgICogV2hlbiBhIHBhY2thZ2UgaXMgc2VsZWN0ZWQsIG9ubHkgdGhhdCBwYWNrYWdlIGFuZCBpdHMgdXBzdHJlYW0gZGVwcyBhcmUgcmVsZWFzZWQuXG4gICAqL1xuICBwcml2YXRlIHJlbmRlcldvcmtmbG93RGlzcGF0Y2hJbnB1dCgpIHtcbiAgICBpZiAoIXRoaXMud29ya2Zsb3c/LmZpbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYWNrYWdlTmFtZXMgPSB0aGlzLnBhY2thZ2VzVG9SZWxlYXNlLm1hcChwID0+IHAucmVsZWFzZS53b3Jrc3BhY2UubmFtZSk7XG5cbiAgICB0aGlzLndvcmtmbG93LmZpbGUuYWRkT3ZlcnJpZGUoJ29uLndvcmtmbG93X2Rpc3BhdGNoLmlucHV0cy5wYWNrYWdlJywge1xuICAgICAgZGVzY3JpcHRpb246ICdTZWxlY3Qgc3BlY2lmaWMgcGFja2FnZSB0byByZWxlYXNlJyxcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIHR5cGU6ICdjaG9pY2UnLFxuICAgICAgb3B0aW9uczogW0FMTF9QQUNLQUdFU19JTlBVVCwgLi4ucGFja2FnZU5hbWVzXSxcbiAgICAgIGRlZmF1bHQ6IEFMTF9QQUNLQUdFU19JTlBVVCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSByZWxlYXNlIHNldCBmb3IgZWFjaCBwYWNrYWdlIChpdHNlbGYgKyB0cmFuc2l0aXZlIHVwc3RyZWFtIGRlcHMpLlxuICAgKi9cbiAgcHJpdmF0ZSBjb21wdXRlUmVsZWFzZVNldHMoKSB7XG4gICAgZm9yIChjb25zdCB7IHJlbGVhc2UgfSBvZiB0aGlzLnBhY2thZ2VzVG9SZWxlYXNlKSB7XG4gICAgICBjb25zdCB1cHN0cmVhbSA9IHRoaXMudXBzdHJlYW1QYWNrYWdlTmFtZXMocmVsZWFzZS53b3Jrc3BhY2UpO1xuICAgICAgdXBzdHJlYW0uYWRkKHJlbGVhc2Uud29ya3NwYWNlLm5hbWUpO1xuICAgICAgdGhpcy5fcmVsZWFzZVNldEJ5Q2hvaWNlLnNldChyZWxlYXNlLndvcmtzcGFjZS5uYW1lLCB1cHN0cmVhbSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVQdWJsaXNoV29ya2Zsb3coKSB7XG4gICAgY29uc3Qgd29ya2Zsb3dOYW1lID1cbiAgICAgIHRoaXMub3B0aW9ucy5yZWxlYXNlV29ya2Zsb3dOYW1lID8/XG4gICAgICAoWydtYXN0ZXInLCAnbWFpbiddLmluY2x1ZGVzKHRoaXMuYnJhbmNoTmFtZSkgPyAncmVsZWFzZScgOiBgcmVsZWFzZS0ke3RoaXMuYnJhbmNoTmFtZX1gKTtcblxuICAgIC8vIFRoZSBhcnJheXMgYXJlIGJlaW5nIGNsb25lZCB0byBhdm9pZCBhY2N1bXVsYXRpbmcgdmFsdWVzIGZyb20gcHJldmlvdXMgYnJhbmNoZXNcbiAgICBjb25zdCBwcmVCdWlsZFN0ZXBzID0gW1xuICAgICAgLi4uKHRoaXMucHJvamVjdCBhcyBhbnkpLnJlbmRlcldvcmtmbG93U2V0dXAoeyBtdXRhYmxlOiBmYWxzZSB9KSxcbiAgICAgIC4uLih0aGlzLm9wdGlvbnMucmVsZWFzZVdvcmtmbG93U2V0dXBTdGVwcyA/PyBbXSksXG4gICAgXTtcbiAgICBjb25zdCBwb3N0QnVpbGRTdGVwcyA9IFsuLi4odGhpcy5vcHRpb25zLnBvc3RCdWlsZFN0ZXBzID8/IFtdKV07XG5cbiAgICAvLyBBZGQgYW4gb3V0cHV0IHRvIHRoZSBqb2IgdG8gaW5kaWNhdGUgaWYgYSBjZXJ0YWluIHBhY2thZ2UgbmVlZHMgcHVibGlzaGluZ1xuICAgIGNvbnN0IHNob3VsZFB1Ymxpc2hPdXRwdXRzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgdGhpcy5wYWNrYWdlc1RvUmVsZWFzZS5tYXAoKHsgcmVsZWFzZSB9KSA9PiB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgcHVibGlzaFByb2plY3RPdXRwdXRJZChyZWxlYXNlLndvcmtzcGFjZSksXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RlcElkOiBzaG91bGRQdWJsaXNoUHJvamVjdFN0ZXBJZChyZWxlYXNlLndvcmtzcGFjZSksXG4gICAgICAgICAgICBvdXRwdXROYW1lOiAncHVibGlzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgcHJvcG9zZWQgcmVsZWFzZSB0YWcgYWxyZWFkeSBleGlzdHNcbiAgICAvLyBPbmx5IGlmIGl0IGRvZXNuJ3QgZXhpc3QgeWV0IHNob3VsZCB3ZSBwdWJsaXNoXG4gICAgZm9yIChjb25zdCB7IHdvcmtzcGFjZURpcmVjdG9yeSwgcmVsZWFzZSB9IG9mIHRoaXMucGFja2FnZXNUb1JlbGVhc2UpIHtcbiAgICAgIHBvc3RCdWlsZFN0ZXBzLnB1c2goe1xuICAgICAgICBpZDogc2hvdWxkUHVibGlzaFByb2plY3RTdGVwSWQocmVsZWFzZS53b3Jrc3BhY2UpLFxuICAgICAgICB3b3JraW5nRGlyZWN0b3J5OiB3b3Jrc3BhY2VEaXJlY3RvcnksXG4gICAgICAgIHJ1bjogJyhnaXQgbHMtcmVtb3RlIC1xIC0tZXhpdC1jb2RlIC0tdGFncyBvcmlnaW4gJChjYXQgZGlzdC9yZWxlYXNldGFnLnR4dCkgJiYgKGVjaG8gXCJwdWJsaXNoPWZhbHNlXCIgPj4gJEdJVEhVQl9PVVRQVVQpKSB8fCBlY2hvIFwicHVibGlzaD10cnVlXCIgPj4gJEdJVEhVQl9PVVRQVVQnLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gY2hlY2sgaWYgbmV3IGNvbW1pdHMgd2VyZSBwdXNoZWQgdG8gdGhlIHJlcG8gd2hpbGUgd2Ugd2VyZSBidWlsZGluZy5cbiAgICAvLyBpZiBuZXcgY29tbWl0cyBoYXZlIGJlZW4gcHVzaGVkLCB3ZSB3aWxsIGNhbmNlbCB0aGlzIHJlbGVhc2VcbiAgICBpZiAodGhpcy5vcHRpb25zLnJlbGVhc2VUcmlnZ2VyPy5pc0NvbnRpbnVvdXMgPz8gdHJ1ZSkge1xuICAgICAgcG9zdEJ1aWxkU3RlcHMucHVzaCh7XG4gICAgICAgIG5hbWU6ICdDaGVjayBmb3IgbmV3IGNvbW1pdHMnLFxuICAgICAgICBpZDogR0lUX1JFTU9URV9TVEVQSUQsXG4gICAgICAgIHJ1bjogYGVjaG8gXCIke0xBVEVTVF9DT01NSVRfT1VUUFVUfT0kKGdpdCBscy1yZW1vdGUgb3JpZ2luIC1oIFxcJHt7IGdpdGh1Yi5yZWYgfX0gfCBjdXQgLWYxKVwiID4+ICRHSVRIVUJfT1VUUFVUYCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3Igbm9uLWNvbnRpbnVvdXMgYnVpbGRzIHdlJ2xsIGp1c3QgcHV0IHRoZSB2YWx1ZSB0aGVyZSB0aGF0IGRvd25zdHJlYW0gc3RlcHMgYXJlIGdvaW5nIHRvIGNvbXBhcmUgYWdhaW5zdFxuICAgICAgcG9zdEJ1aWxkU3RlcHMucHVzaCh7XG4gICAgICAgIG5hbWU6ICdPdXRwdXQgdGhlIHNoYSB2YWx1ZSB0aGF0IGRvd25zdHJlYW0gY2hlY2tzIGV4cGVjdCcsXG4gICAgICAgIGlkOiBHSVRfUkVNT1RFX1NURVBJRCxcbiAgICAgICAgcnVuOiBgZWNobyBcIiR7TEFURVNUX0NPTU1JVF9PVVRQVVR9PVxcJHt7IGdpdGh1Yi5zaGEgfX1cIiA+PiAkR0lUSFVCX09VVFBVVGAsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmtmbG93ID0gbmV3IGdpdGh1Yi5UYXNrV29ya2Zsb3codGhpcy5naXRodWIsIHtcbiAgICAgIG5hbWU6IHdvcmtmbG93TmFtZSxcbiAgICAgIGpvYklkOiBSRUxFQVNFX0pPQklELFxuICAgICAgb3V0cHV0czoge1xuICAgICAgICBsYXRlc3RfY29tbWl0OiB7XG4gICAgICAgICAgc3RlcElkOiBHSVRfUkVNT1RFX1NURVBJRCxcbiAgICAgICAgICBvdXRwdXROYW1lOiBMQVRFU1RfQ09NTUlUX09VVFBVVCxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uc2hvdWxkUHVibGlzaE91dHB1dHMsXG4gICAgICB9LFxuICAgICAgdHJpZ2dlcnM6IHtcbiAgICAgICAgc2NoZWR1bGU6IHRoaXMucmVsZWFzZVRyaWdnZXIuc2NoZWR1bGUgPyBbeyBjcm9uOiB0aGlzLnJlbGVhc2VUcmlnZ2VyLnNjaGVkdWxlIH1dIDogdW5kZWZpbmVkLFxuICAgICAgICBwdXNoOiB0aGlzLnJlbGVhc2VUcmlnZ2VyLmlzQ29udGludW91cyA/IHsgYnJhbmNoZXM6IFt0aGlzLmJyYW5jaE5hbWVdIH0gOiB1bmRlZmluZWQsXG4gICAgICAgIHdvcmtmbG93RGlzcGF0Y2g6IHt9LFxuICAgICAgfSxcbiAgICAgIGNvbnRhaW5lcjogdGhpcy5vcHRpb25zLndvcmtmbG93Q29udGFpbmVySW1hZ2UgPyB7IGltYWdlOiB0aGlzLm9wdGlvbnMud29ya2Zsb3dDb250YWluZXJJbWFnZSB9IDogdW5kZWZpbmVkLFxuICAgICAgZW52OiB7XG4gICAgICAgIENJOiAndHJ1ZScsXG4gICAgICB9LFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY29udGVudHM6ICd3cml0ZScgYXMgYW55LFxuICAgICAgfSxcbiAgICAgIGNoZWNrb3V0V2l0aDoge1xuICAgICAgICAvLyB3ZSBtdXN0IHVzZSAnZmV0Y2gtZGVwdGg9MCcgaW4gb3JkZXIgdG8gZmV0Y2ggYWxsIHRhZ3NcbiAgICAgICAgLy8gb3RoZXJ3aXNlIHRhZ3MgYXJlIG5vdCBjaGVja2VkIG91dFxuICAgICAgICBmZXRjaERlcHRoOiAwLFxuICAgICAgfSxcbiAgICAgIHByZUJ1aWxkU3RlcHMsXG4gICAgICB0YXNrOiB0aGlzLnJlbGVhc2VUYXNrISxcbiAgICAgIHBvc3RCdWlsZFN0ZXBzLFxuICAgICAgcnVuc09uOiB0aGlzLm9wdGlvbnMud29ya2Zsb3dSdW5zT24sXG4gICAgfSk7XG5cbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCBlbXB0eSB3b3JrZmxvd19kaXNwYXRjaCBhZGRlZCBieSBUYXNrV29ya2Zsb3dcbiAgICAvLyB0byBpbmNsdWRlIHRoZSBkcnlfcnVuIGlucHV0IGZvciB0ZXN0aW5nIHRoZSByZWxlYXNlIHBpcGVsaW5lXG4gICAgdGhpcy53b3JrZmxvdy5vbih7XG4gICAgICB3b3JrZmxvd0Rpc3BhdGNoOiB7XG4gICAgICAgIGlucHV0czoge1xuICAgICAgICAgIGRyeV9ydW46IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRHJ5IHJ1biAoc2tpcCBhY3R1YWwgcHVibGlzaGluZyknLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQSBub2RlIHJlcHJlc2VudGluZyBhIHNpbmdsZSBwdWJsaXNoIGpvYiAoZS5nLiBucG0sIG1hdmVuLCBnaXRodWIpLlxuICovXG5jbGFzcyBQdWJsaXNoSm9iTm9kZSB7XG4gIHB1YmxpYyByZWFkb25seSBqb2JJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgam9iOiBnaXRodWIud29ya2Zsb3dzLkpvYjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgcGFyZW50OiBQYWNrYWdlUmVsZWFzZU5vZGUsXG4gICAga2V5OiBzdHJpbmcsXG4gICAgam9iOiBnaXRodWIud29ya2Zsb3dzLkpvYixcbiAgKSB7XG4gICAgdGhpcy5qb2JJZCA9IGAke3BhcmVudC5wcmVmaXh9XyR7a2V5fWA7XG4gICAgdGhpcy5qb2IgPSBqb2I7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgYG5lZWRzYCBmb3IgdGhpcyBwdWJsaXNoIGpvYi5cbiAgICogSm9icyB3aXRoIHNpYmxpbmcgZGVwcyAoZS5nLiBnaXRodWIgZGVwZW5kcyBvbiBucG0pIHVzZSB0aG9zZTtcbiAgICogdGhlIGZpcnN0IGpvYiBpbiB0aGUgY2hhaW4gZGVwZW5kcyBvbiB0aGUgZ2F0ZSArIHVwc3RyZWFtIGRvbmUgam9icy5cbiAgICovXG4gIHB1YmxpYyBnZXQgbmVlZHMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHNpYmxpbmdEZXBzID0gKHRoaXMuam9iLm5lZWRzID8/IFtdKVxuICAgICAgLmZpbHRlcigoZGVwOiBzdHJpbmcpID0+IGRlcCAhPT0gJ3JlbGVhc2UnKVxuICAgICAgLm1hcCgoZGVwOiBzdHJpbmcpID0+IGAke3RoaXMucGFyZW50LnByZWZpeH1fJHtkZXB9YCk7XG5cbiAgICBpZiAoc2libGluZ0RlcHMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHNpYmxpbmdEZXBzO1xuICAgIH1cblxuICAgIC8vIEZpcnN0IHB1Ymxpc2ggam9iOiBkZXBlbmRzIG9uIGdhdGUgKyB1cHN0cmVhbSBwYWNrYWdlcycgZG9uZSBqb2JzXG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMucGFyZW50LmdhdGVKb2JJZCxcbiAgICAgIC4uLnRoaXMucGFyZW50LnVwc3RyZWFtLm1hcCgobikgPT4gbi5kb25lSm9iSWQpLFxuICAgIF07XG4gIH1cbn1cblxuLyoqXG4gKiBBIG5vZGUgcmVwcmVzZW50aW5nIGEgcGFja2FnZSdzIHJlbGVhc2UgZ2F0ZSwgcHVibGlzaCBqb2JzLCBhbmQgZG9uZSBzaWduYWwuXG4gKi9cbmNsYXNzIFBhY2thZ2VSZWxlYXNlTm9kZSB7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSB3b3Jrc3BhY2U6IFR5cGVTY3JpcHRXb3Jrc3BhY2U7XG4gIHB1YmxpYyByZWFkb25seSBwcmVmaXg6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGdhdGVKb2JJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgZG9uZUpvYklkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBwdWJsaXNoSm9iczogUHVibGlzaEpvYk5vZGVbXTtcbiAgcHVibGljIHJlYWRvbmx5IHVwc3RyZWFtOiBQYWNrYWdlUmVsZWFzZU5vZGVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHdvcmtzcGFjZTogVHlwZVNjcmlwdFdvcmtzcGFjZSwgcHVibGlzaEpvYnM6IFJlY29yZDxzdHJpbmcsIGdpdGh1Yi53b3JrZmxvd3MuSm9iPikge1xuICAgIHRoaXMubmFtZSA9IHdvcmtzcGFjZS5uYW1lO1xuICAgIHRoaXMud29ya3NwYWNlID0gd29ya3NwYWNlO1xuICAgIHRoaXMucHJlZml4ID0gc2x1Z2lmeSh3b3Jrc3BhY2UubmFtZSk7XG4gICAgdGhpcy5nYXRlSm9iSWQgPSBgJHt0aGlzLnByZWZpeH1fcmVsZWFzZWA7XG4gICAgdGhpcy5kb25lSm9iSWQgPSBgJHt0aGlzLnByZWZpeH1fcmVsZWFzZV9kb25lYDtcbiAgICB0aGlzLnB1Ymxpc2hKb2JzID0gT2JqZWN0LmVudHJpZXMocHVibGlzaEpvYnMpLm1hcChcbiAgICAgIChba2V5LCBqb2JdKSA9PiBuZXcgUHVibGlzaEpvYk5vZGUodGhpcywga2V5LCBqb2IpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBwYWNrYWdlIGdhdGUgam9iIOKAlCBwdXJlbHkgY2hlY2tzIGlmIHRoaXMgcGFja2FnZSBzaG91bGQgcHVibGlzaC5cbiAgICovXG4gIHB1YmxpYyByZW5kZXJHYXRlSm9iKHJlbGVhc2VHYXRlSm9iSWQ6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgY29uZGl0aW9uID0gYGNvbnRhaW5zKGZyb21KU09OKG5lZWRzLiR7cmVsZWFzZUdhdGVKb2JJZH0ub3V0cHV0cy5wYWNrYWdlc190b19wdWJsaXNoKSwgJyR7dGhpcy5uYW1lfScpYDtcbiAgICByZXR1cm4ge1xuICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgIG5lZWRzOiBbcmVsZWFzZUdhdGVKb2JJZF0sXG4gICAgICBwZXJtaXNzaW9uczoge30sXG4gICAgICBpZjogYFxcJHt7ICR7Y29uZGl0aW9ufSB9fWAsXG4gICAgICBuYW1lOiBgJHt0aGlzLm5hbWV9OiBSZWxlYXNlYCxcbiAgICAgIHN0ZXBzOiBbeyBydW46IGBlY2hvIFwiUmVsZWFzaW5nICR7dGhpcy5uYW1lfS4uLlwiYCB9XSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciBhbGwgcHVibGlzaCBqb2IgZGVmaW5pdGlvbnMgZm9yIHRoaXMgcGFja2FnZS5cbiAgICovXG4gIHB1YmxpYyByZW5kZXJQdWJsaXNoSm9icyhub2RlVmVyc2lvbj86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICB0aGlzLnB1Ymxpc2hKb2JzLm1hcCgocHViTm9kZSkgPT4gW1xuICAgICAgICBwdWJOb2RlLmpvYklkLFxuICAgICAgICB7XG4gICAgICAgICAgLi4ucHViTm9kZS5qb2IsXG4gICAgICAgICAgLy8gVG9sZXJhdGUgc2tpcHBlZCBkZXBlbmRlbmN5IGFuY2VzdG9ycyB3aGlsZSBzdGlsbCByZXF1aXJpbmcgdGhpcyBwYWNrYWdlJ3MgZ2F0ZSB0byBwYXNzXG4gICAgICAgICAgaWY6IGBcXCR7eyAhY2FuY2VsbGVkKCkgJiYgIWZhaWx1cmUoKSAmJiBuZWVkcy4ke3RoaXMuZ2F0ZUpvYklkfS5yZXN1bHQgPT0gJ3N1Y2Nlc3MnIH19YCxcbiAgICAgICAgICB0b29sczoge1xuICAgICAgICAgICAgLi4ucHViTm9kZS5qb2IudG9vbHMsXG4gICAgICAgICAgICBub2RlOiB7XG4gICAgICAgICAgICAgIC4uLnB1Yk5vZGUuam9iLnRvb2xzPy5ub2RlID8/IHt9LFxuICAgICAgICAgICAgICB2ZXJzaW9uOiBub2RlVmVyc2lvbiA/PyBwdWJOb2RlLmpvYi50b29scz8ubm9kZT8udmVyc2lvbiA/PyAnbHRzLyonLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5lZWRzOiBwdWJOb2RlLm5lZWRzLFxuICAgICAgICAgIG5hbWU6IGAke3RoaXMubmFtZX06ICR7cHViTm9kZS5qb2IubmFtZX1gLFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGRvbmUgam9iIOKAlCBmYW4taW4gdGhhdCBzaWduYWxzIGFsbCBwdWJsaXNoaW5nIGZvciB0aGlzIHBhY2thZ2UgaXMgY29tcGxldGUuXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyRG9uZUpvYigpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgbmVlZHM6IHRoaXMucHVibGlzaEpvYnMubWFwKChwKSA9PiBwLmpvYklkKSxcbiAgICAgIHBlcm1pc3Npb25zOiB7fSxcbiAgICAgIC8vIFVzZSAhY2FuY2VsbGVkKCkgJiYgIWZhaWx1cmUoKSBzbyB0aGF0OlxuICAgICAgLy8gLSBJZiBwdWJsaXNoIGpvYnMgYXJlIHNraXBwZWQgKHBhY2thZ2UgaGFzIG5vIGNoYW5nZXMsIGdhdGUgd2FzIHNraXBwZWQpLCBkb25lIHN0aWxsIHN1Y2NlZWRzXG4gICAgICAvLyAgIOKGkiBhbGxvd3MgZG93bnN0cmVhbSBwYWNrYWdlcyB0byBwcm9jZWVkIHdpdGggdGhlaXIgb3duIHJlbGVhc2VcbiAgICAgIC8vIC0gSWYgYSBwdWJsaXNoIGpvYiBmYWlscywgZG9uZSBpcyBza2lwcGVkIChmYWlsdXJlKCkgaXMgdHJ1ZSlcbiAgICAgIC8vICAg4oaSIGJsb2NrcyBkb3duc3RyZWFtIHBhY2thZ2VzIGZyb20gcmVsZWFzaW5nXG4gICAgICBpZjogJyR7eyAhY2FuY2VsbGVkKCkgJiYgIWZhaWx1cmUoKSB9fScsXG4gICAgICBuYW1lOiBgJHt0aGlzLm5hbWV9OiBSZWxlYXNlIGNvbXBsZXRlYCxcbiAgICAgIHN0ZXBzOiBbeyBydW46ICdlY2hvIFwiQWxsIHB1Ymxpc2ggam9icyBjb21wbGV0ZVwiJyB9XSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQSB0b3BvbG9naWNhbCB0cmVlIG9mIHBhY2thZ2VzIHRvIHJlbGVhc2UuXG4gKiBFYWNoIG5vZGUga25vd3MgaXRzIHVwc3RyZWFtIGRlcGVuZGVuY2llcyAocnVudGltZSArIHBlZXIpLlxuICovXG5jbGFzcyBSZWxlYXNlVHJlZSB7XG4gIHB1YmxpYyByZWFkb25seSBub2RlczogUGFja2FnZVJlbGVhc2VOb2RlW107XG4gIHByaXZhdGUgcmVhZG9ubHkgbm9kZXNCeU5hbWUgPSBuZXcgTWFwPHN0cmluZywgUGFja2FnZVJlbGVhc2VOb2RlPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhY2thZ2VzVG9SZWxlYXNlOiBBcnJheTx7XG4gICAgICByZWFkb25seSB3b3Jrc3BhY2VEaXJlY3Rvcnk6IHN0cmluZztcbiAgICAgIHJlYWRvbmx5IHJlbGVhc2U6IHtcbiAgICAgICAgcmVhZG9ubHkgd29ya3NwYWNlOiBUeXBlU2NyaXB0V29ya3NwYWNlO1xuICAgICAgICByZWFkb25seSBwdWJsaXNoZXI6IHByb2plblJlbGVhc2UuUHVibGlzaGVyO1xuICAgICAgICByZWFkb25seSBvcHRpb25zOiBQYXJ0aWFsPHByb2plblJlbGVhc2UuQnJhbmNoT3B0aW9ucz47XG4gICAgICB9O1xuICAgIH0+LFxuICAgIGJyYW5jaE5hbWU6IHN0cmluZyxcbiAgKSB7XG4gICAgLy8gQ3JlYXRlIG5vZGVzXG4gICAgZm9yIChjb25zdCB7IHJlbGVhc2UgfSBvZiBwYWNrYWdlc1RvUmVsZWFzZSkge1xuICAgICAgY29uc3QgcHVibGlzaEpvYnMgPSByZWxlYXNlLnB1Ymxpc2hlci5fcmVuZGVySm9ic0ZvckJyYW5jaChicmFuY2hOYW1lLCByZWxlYXNlLm9wdGlvbnMpO1xuXG4gICAgICAvLyBGaXggZG93bmxvYWQgc3RlcHMgdG8gdXNlIGFydGlmYWN0IG5hbWUgaW5zdGVhZCBvZiBpbW11dGFibGUgYXJ0aWZhY3QgSURzXG4gICAgICBmb3IgKGNvbnN0IGpvYiBvZiBPYmplY3QudmFsdWVzKHB1Ymxpc2hKb2JzKSkge1xuICAgICAgICBjb25zdCBkb3dubG9hZFN0ZXAgPSBqb2Iuc3RlcHMuZmluZCgoaikgPT4gai51c2VzPy5zdGFydHNXaXRoKCdhY3Rpb25zL2Rvd25sb2FkLWFydGlmYWN0QCcpKTtcbiAgICAgICAgaWYgKCFkb3dubG9hZFN0ZXApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGRvd25sb2FkU3RlcCBhbW9uZyBzdGVwczogJHtKU09OLnN0cmluZ2lmeShqb2Iuc3RlcHMsIHVuZGVmaW5lZCwgMil9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvd25sb2FkU3RlcC53aXRoKSB7XG4gICAgICAgICAgZGVsZXRlIGRvd25sb2FkU3RlcC53aXRoWydhcnRpZmFjdC1pZHMnXTtcbiAgICAgICAgICBkb3dubG9hZFN0ZXAud2l0aC5uYW1lID0gYnVpbGRBcnRpZmFjdE5hbWUocmVsZWFzZS53b3Jrc3BhY2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vZGUgPSBuZXcgUGFja2FnZVJlbGVhc2VOb2RlKHJlbGVhc2Uud29ya3NwYWNlLCBwdWJsaXNoSm9icyk7XG4gICAgICB0aGlzLm5vZGVzQnlOYW1lLnNldChub2RlLm5hbWUsIG5vZGUpO1xuICAgIH1cblxuICAgIC8vIFJlc29sdmUgdXBzdHJlYW0gZWRnZXNcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5ub2Rlc0J5TmFtZS52YWx1ZXMoKSkge1xuICAgICAgZm9yIChjb25zdCBkZXAgb2Ygbm9kZS53b3Jrc3BhY2Uud29ya3NwYWNlRGVwZW5kZW5jaWVzKFtEZXBlbmRlbmN5VHlwZS5SVU5USU1FLCBEZXBlbmRlbmN5VHlwZS5QRUVSXSkpIHtcbiAgICAgICAgY29uc3QgdXBzdHJlYW0gPSB0aGlzLm5vZGVzQnlOYW1lLmdldChkZXAubmFtZSk7XG4gICAgICAgIGlmICh1cHN0cmVhbSkge1xuICAgICAgICAgIG5vZGUudXBzdHJlYW0ucHVzaCh1cHN0cmVhbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm5vZGVzID0gWy4uLnRoaXMubm9kZXNCeU5hbWUudmFsdWVzKCldO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNsdWdpZnkoeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHgucmVwbGFjZSgvW15hLXpBLVowLTlfLV0vZywgJy0nKS5yZXBsYWNlKC9eWzAtOS1dKy8sICcnKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBcnRpZmFjdE5hbWUocHJvamVjdDogUHJvamVjdCkge1xuICByZXR1cm4gc2x1Z2lmeShgJHtwcm9qZWN0Lm5hbWV9XyR7QlVJTERfQVJUSUZBQ1RfTkFNRX1gKTtcbn1cblxuZnVuY3Rpb24gcHVibGlzaFByb2plY3RPdXRwdXRJZChwcm9qZWN0OiBQcm9qZWN0KSB7XG4gIHJldHVybiBgcHVibGlzaC0ke3NsdWdpZnkocHJvamVjdC5uYW1lKX1gO1xufVxuXG5mdW5jdGlvbiBzaG91bGRQdWJsaXNoUHJvamVjdFN0ZXBJZChwcm9qZWN0OiBQcm9qZWN0KSB7XG4gIHJldHVybiBgY2hlY2stJHtwdWJsaXNoUHJvamVjdE91dHB1dElkKHByb2plY3QpfWA7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEdpdEh1YiBBY3Rpb25zIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiB0aGUgZ2l2ZW4gd29ya3NwYWNlXG4gKiBzaG91bGQgYmUgcmVsZWFzZWQgYmFzZWQgb24gdGhlIHNlbGVjdGVkIHBhY2thZ2UgaW5wdXQuXG4gKlxuICogQSB3b3Jrc3BhY2Ugc2hvdWxkIGJlIHJlbGVhc2VkIGlmIHRoZSBzZWxlY3RlZCBwYWNrYWdlIGlzIG9uZSBmb3Igd2hpY2ggdGhpcyB3b3Jrc3BhY2VcbiAqIGlzIGluIHRoZSByZWxlYXNlIHNldCAoaS5lLiwgdGhlIHdvcmtzcGFjZSBpcyB0aGUgc2VsZWN0ZWQgcGFja2FnZSBpdHNlbGYgb3IgYW4gdXBzdHJlYW0gZGVwKS5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkUmVsZWFzZUV4cHJlc3Npb24od29ya3NwYWNlTmFtZTogc3RyaW5nLCByZWxlYXNlU2V0QnlDaG9pY2U6IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+Pik6IHN0cmluZyB7XG4gIC8vIEZpbmQgYWxsIHBhY2thZ2VzIHdob3NlIHJlbGVhc2Ugc2V0IGluY2x1ZGVzIHRoaXMgd29ya3NwYWNlXG4gIGNvbnN0IHRyaWdnZXJpbmdQYWNrYWdlcyA9IEFycmF5LmZyb20ocmVsZWFzZVNldEJ5Q2hvaWNlLmVudHJpZXMoKSlcbiAgICAuZmlsdGVyKChbXywgcmVsZWFzZVNldF0pID0+IHJlbGVhc2VTZXQuaGFzKHdvcmtzcGFjZU5hbWUpKVxuICAgIC5tYXAoKFtwa2ddKSA9PiBwa2cpO1xuXG4gIHJldHVybiBgY29udGFpbnMoZnJvbUpTT04oJyR7SlNPTi5zdHJpbmdpZnkodHJpZ2dlcmluZ1BhY2thZ2VzKX0nKSwgZ2l0aHViLmV2ZW50LmlucHV0cy5wYWNrYWdlKWA7XG59XG4iXX0=
569
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub3JlcG8tcmVsZWFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy95YXJuL21vbm9yZXBvLXJlbGVhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDJDQUE2QjtBQUM3QixtQ0FBb0c7QUFDcEcsMkRBQTBGO0FBRTFGLGlFQUE2RDtBQUM3RCxpRkFBMkY7QUFFM0YsZ0NBQWdDO0FBQ2hDLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQztBQUNoQyxNQUFNLGlCQUFpQixHQUFHLFlBQVksQ0FBQztBQUN2QyxNQUFNLG9CQUFvQixHQUFHLGVBQWUsQ0FBQztBQUM3QyxNQUFNLGtCQUFrQixHQUFHLGdCQUFnQixDQUFDO0FBRTVDLE1BQWEsZUFBZ0IsU0FBUSxrQkFBUztJQTZCRzs7SUE1Qi9DOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBZ0I7UUFDL0IsTUFBTSx5QkFBeUIsR0FBRyxDQUFDLENBQVksRUFBd0IsRUFBRSxDQUFDLENBQUMsWUFBWSxlQUFlLENBQUM7UUFDdkcsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFZ0IsVUFBVSxDQUFTO0lBQ25CLE1BQU0sQ0FBZ0I7SUFDdEIsY0FBYyxDQUErQjtJQUM3QyxXQUFXLENBQVU7SUFDckIsS0FBSyxDQUFTO0lBQ2QsaUJBQWlCLEdBQUcsSUFBSSxLQUFLLEVBTzFDLENBQUM7SUFFRyxRQUFRLENBQXVCO0lBQy9CLFdBQVcsQ0FBUTtJQUNWLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUF5QyxDQUFDO0lBQzlFLG1CQUFtQixHQUFHLElBQUksR0FBRyxFQUF1QixDQUFDO0lBRTdELFlBQVksT0FBZ0IsRUFBbUIsVUFBa0MsRUFBRTtRQUNqRixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFEOEIsWUFBTyxH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QUFPLEVBQUUsQ0FBQztTQUNoRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUMxRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV2QixPQUFPLHNCQUFzQixJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLGtDQUFrQyxDQUFDO0FBQ3BHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgRGVwZW5kZW5jeVR5cGUsIGdpdGh1YiwgcmVsZWFzZSBhcyBwcm9qZW5SZWxlYXNlLCBDb21wb25lbnQsIFByb2plY3QsIFRhc2sgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgQlVJTERfQVJUSUZBQ1RfTkFNRSwgUEVSTUlTU0lPTl9CQUNLVVBfRklMRSB9IGZyb20gJ3Byb2plbi9saWIvZ2l0aHViL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBNb25vcmVwb1JlbGVhc2VPcHRpb25zIH0gZnJvbSAnLi9tb25vcmVwby1yZWxlYXNlLW9wdGlvbnMnO1xuaW1wb3J0IHsgVHlwZVNjcmlwdFdvcmtzcGFjZSB9IGZyb20gJy4vdHlwZXNjcmlwdC13b3Jrc3BhY2UnO1xuaW1wb3J0IHsgV29ya3NwYWNlUmVsZWFzZSwgV29ya3NwYWNlUmVsZWFzZU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzY3JpcHQtd29ya3NwYWNlLXJlbGVhc2UnO1xuXG4vLyBjb3BpZWQgZnJvbSBwcm9qZW4vcmVsZWFzZS50c1xuY29uc3QgUkVMRUFTRV9KT0JJRCA9ICdyZWxlYXNlJztcbmNvbnN0IEdJVF9SRU1PVEVfU1RFUElEID0gJ2dpdF9yZW1vdGUnO1xuY29uc3QgTEFURVNUX0NPTU1JVF9PVVRQVVQgPSAnbGF0ZXN0X2NvbW1pdCc7XG5jb25zdCBBTExfUEFDS0FHRVNfSU5QVVQgPSAnKmFsbCBwYWNrYWdlcyonO1xuXG5leHBvcnQgY2xhc3MgTW9ub3JlcG9SZWxlYXNlIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGBNb25vcmVwb1JlbGVhc2VXb3JrZmxvd2AgY29tcG9uZW50IG9mIGEgcHJvamVjdCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgcHJvamVjdFxuICAgKiBkb2VzIG5vdCBoYXZlIGEgTW9ub3JlcG9SZWxlYXNlV29ya2Zsb3cgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZihwcm9qZWN0OiBQcm9qZWN0KTogTW9ub3JlcG9SZWxlYXNlIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpc01vbm9yZXBvUmVsZWFzZVdvcmtmbG93ID0gKGM6IENvbXBvbmVudCk6IGMgaXMgTW9ub3JlcG9SZWxlYXNlID0+IGMgaW5zdGFuY2VvZiBNb25vcmVwb1JlbGVhc2U7XG4gICAgcmV0dXJuIHByb2plY3QuY29tcG9uZW50cy5maW5kKGlzTW9ub3JlcG9SZWxlYXNlV29ya2Zsb3cpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBicmFuY2hOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZ2l0aHViOiBnaXRodWIuR2l0SHViO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbGVhc2VUcmlnZ2VyOiBwcm9qZW5SZWxlYXNlLlJlbGVhc2VUcmlnZ2VyO1xuICBwcml2YXRlIHJlYWRvbmx5IGJ1aWxkV2l0aE54OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IHdzUnVuOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFja2FnZXNUb1JlbGVhc2UgPSBuZXcgQXJyYXk8e1xuICAgIHJlYWRvbmx5IHdvcmtzcGFjZURpcmVjdG9yeTogc3RyaW5nO1xuICAgIHJlYWRvbmx5IHJlbGVhc2U6IHtcbiAgICAgIHJlYWRvbmx5IHdvcmtzcGFjZTogVHlwZVNjcmlwdFdvcmtzcGFjZTtcbiAgICAgIHJlYWRvbmx5IHB1Ymxpc2hlcjogcHJvamVuUmVsZWFzZS5QdWJsaXNoZXI7XG4gICAgICByZWFkb25seSBvcHRpb25zOiBQYXJ0aWFsPHByb2plblJlbGVhc2UuQnJhbmNoT3B0aW9ucz47XG4gICAgfTtcbiAgfT4oKTtcblxuICBwcml2YXRlIHdvcmtmbG93PzogZ2l0aHViLlRhc2tXb3JrZmxvdztcbiAgcHJpdmF0ZSByZWxlYXNlVGFzaz86IFRhc2s7XG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya3NwYWNlUmVsZWFzZXMgPSBuZXcgTWFwPFR5cGVTY3JpcHRXb3Jrc3BhY2UsIFdvcmtzcGFjZVJlbGVhc2U+KCk7XG4gIHByaXZhdGUgX3JlbGVhc2VTZXRCeUNob2ljZSA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IE1vbm9yZXBvUmVsZWFzZU9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgdGhpcy5icmFuY2hOYW1lID0gb3B0aW9ucy5icmFuY2hOYW1lID8/ICdtYWluJztcbiAgICBjb25zdCBnaCA9IGdpdGh1Yi5HaXRIdWIub2YocHJvamVjdCk7XG4gICAgaWYgKCFnaCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9qZWN0IGlzIG5vdCBhIEdpdEh1YiBwcm9qZWN0OiAke3Byb2plY3R9YCk7XG4gICAgfVxuICAgIHRoaXMuZ2l0aHViID0gZ2g7XG4gICAgdGhpcy5yZWxlYXNlVHJpZ2dlciA9IG9wdGlvbnMucmVsZWFzZVRyaWdnZXIgPz8gcHJvamVuUmVsZWFzZS5SZWxlYXNlVHJpZ2dlci5jb250aW51b3VzKCk7XG4gICAgdGhpcy5idWlsZFdpdGhOeCA9IG9wdGlvbnMuYnVpbGRXaXRoTnggPz8gZmFsc2U7XG4gICAgdGhpcy53c1J1biA9IG9wdGlvbnMueWFybkJlcnJ5ID8gJ3lhcm4gd29ya3NwYWNlcyBmb3JlYWNoIC0tYWxsIC0tZXhjbHVkZSAuIC0tdG9wb2xvZ2ljYWwtZGV2IHJ1bicgOiAneWFybiB3b3Jrc3BhY2VzIHJ1bic7XG4gIH1cblxuICBwdWJsaWMgd29ya3NwYWNlUmVsZWFzZShwcm9qZWN0OiBUeXBlU2NyaXB0V29ya3NwYWNlKSB7XG4gICAgY29uc3QgcmV0ID0gdGhpcy53b3Jrc3BhY2VSZWxlYXNlcy5nZXQocHJvamVjdCk7XG4gICAgaWYgKCFyZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gcmVsZWFzZSBmb3IgcHJvamVjdCAke3Byb2plY3QubmFtZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIHB1YmxpYyBhZGRXb3Jrc3BhY2UocHJvamVjdDogVHlwZVNjcmlwdFdvcmtzcGFjZSwgb3B0aW9uczogV29ya3NwYWNlUmVsZWFzZU9wdGlvbnMpIHtcbiAgICBjb25zdCB3b3Jrc3BhY2VSZWxlYXNlID0gbmV3IFdvcmtzcGFjZVJlbGVhc2UocHJvamVjdCwge1xuICAgICAgcHVibGlzaFRvTnBtOiB0aGlzLm9wdGlvbnMucHVibGlzaFRvTnBtLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcblxuICAgIC8vIE1ha2UgdGhlc2UgcHVibGljbHkgYWNjZXNzaWJsZVxuICAgIHRoaXMud29ya3NwYWNlUmVsZWFzZXMuc2V0KHByb2plY3QsIHdvcmtzcGFjZVJlbGVhc2UpO1xuXG4gICAgaWYgKCFvcHRpb25zLnByaXZhdGUgJiYgd29ya3NwYWNlUmVsZWFzZS5wdWJsaXNoZXIpIHtcbiAgICAgIHRoaXMub2J0YWluUmVsZWFzZVRhc2soKTtcblxuICAgICAgdGhpcy5wYWNrYWdlc1RvUmVsZWFzZS5wdXNoKHtcbiAgICAgICAgd29ya3NwYWNlRGlyZWN0b3J5OiBwcm9qZWN0LndvcmtzcGFjZURpcmVjdG9yeSxcbiAgICAgICAgcmVsZWFzZToge1xuICAgICAgICAgIHdvcmtzcGFjZTogd29ya3NwYWNlUmVsZWFzZS53b3Jrc3BhY2UsXG4gICAgICAgICAgcHVibGlzaGVyOiB3b3Jrc3BhY2VSZWxlYXNlLnB1Ymxpc2hlcixcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAvLyBlbmZvcmNlZCBvcHRpb25zXG4gICAgICAgICAgICB3b3JrZmxvd05hbWU6IHRoaXMub3B0aW9ucy5yZWxlYXNlV29ya2Zsb3dOYW1lLFxuICAgICAgICAgICAgdGFnUHJlZml4OiBgJHtwcm9qZWN0Lm5hbWV9QGAsXG5cbiAgICAgICAgICAgIC8vIG9wdGlvbnMgdGhhdCBtYXkgYmUgb3ZlcnJpZGUgbG9jYWxseVxuICAgICAgICAgICAgbWFqb3JWZXJzaW9uOiBvcHRpb25zLnZlcnNpb25CcmFuY2hPcHRpb25zLm1ham9yVmVyc2lvbiA/PyB0aGlzLm9wdGlvbnMubWFqb3JWZXJzaW9uLFxuICAgICAgICAgICAgbWluTWFqb3JWZXJzaW9uOiBvcHRpb25zLnZlcnNpb25CcmFuY2hPcHRpb25zLm1pbk1ham9yVmVyc2lvbiA/PyB0aGlzLm9wdGlvbnMubWluTWFqb3JWZXJzaW9uLFxuICAgICAgICAgICAgcHJlcmVsZWFzZTogb3B0aW9ucy52ZXJzaW9uQnJhbmNoT3B0aW9ucy5wcmVyZWxlYXNlID8/IHRoaXMub3B0aW9ucy5wcmVyZWxlYXNlLFxuICAgICAgICAgICAgbnBtRGlzdFRhZzogb3B0aW9ucy5ucG1EaXN0VGFnID8/IHRoaXMub3B0aW9ucy5ucG1EaXN0VGFnLFxuICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG9wdGlvbnMuZW52aXJvbm1lbnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBwcmVTeW50aGVzaXplKCkge1xuICAgIGlmICghdGhpcy5yZWxlYXNlVGFzaykge1xuICAgICAgLy8gV2UgZGlkbid0IGVuZCB1cCBhZGRpbmcgYW55IHBhY2thZ2VzXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb21wdXRlUmVsZWFzZVNldHMoKTtcbiAgICB0aGlzLmNyZWF0ZVB1Ymxpc2hpbmdNZWNoYW5pc20oKTtcbiAgICB0aGlzLnJlbmRlclBhY2thZ2VVcGxvYWRzKCk7XG4gICAgdGhpcy5yZW5kZXJQdWJsaXNoSm9icygpO1xuICAgIHRoaXMucmVuZGVyV29ya2Zsb3dEaXNwYXRjaElucHV0KCk7XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclBhY2thZ2VVcGxvYWRzKCkge1xuICAgIGNvbnN0IG5vTmV3Q29tbWl0cyA9IGBcXCR7eyBzdGVwcy4ke0dJVF9SRU1PVEVfU1RFUElEfS5vdXRwdXRzLiR7TEFURVNUX0NPTU1JVF9PVVRQVVR9ID09IGdpdGh1Yi5zaGEgfX1gO1xuXG4gICAgZm9yIChjb25zdCB7IHdvcmtzcGFjZURpcmVjdG9yeSwgcmVsZWFzZSB9IG9mIHRoaXMucGFja2FnZXNUb1JlbGVhc2UpIHtcbiAgICAgIGNvbnN0IGpvYiA9IHRoaXMud29ya2Zsb3c/LmdldEpvYihSRUxFQVNFX0pPQklEKSBhcyBnaXRodWIud29ya2Zsb3dzLkpvYiB8IHVuZGVmaW5lZDtcbiAgICAgIGpvYj8uc3RlcHMucHVzaChcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IGAke3JlbGVhc2Uud29ya3NwYWNlLm5hbWV9OiBCYWNrdXAgYXJ0aWZhY3QgcGVybWlzc2lvbnNgLFxuICAgICAgICAgIGlmOiBub05ld0NvbW1pdHMsXG4gICAgICAgICAgY29udGludWVPbkVycm9yOiB0cnVlLFxuICAgICAgICAgIHJ1bjogYGNkICR7cmVsZWFzZS53b3Jrc3BhY2UuYXJ0aWZhY3RzRGlyZWN0b3J5fSAmJiBnZXRmYWNsIC1SIC4gPiAke1BFUk1JU1NJT05fQkFDS1VQX0ZJTEV9YCxcbiAgICAgICAgICB3b3JraW5nRGlyZWN0b3J5OiB3b3Jrc3BhY2VEaXJlY3RvcnksXG4gICAgICAgIH0sXG4gICAgICAgIGdpdGh1Yi5Xb3JrZmxvd1N0ZXBzLnVwbG9hZEFydGlmYWN0KHtcbiAgICAgICAgICBuYW1lOiBgJHtyZWxlYXNlLndvcmtzcGFjZS5uYW1lfTogVXBsb2FkIGFydGlmYWN0YCxcbiAgICAgICAgICBpZjogbm9OZXdDb21taXRzLFxuICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgIC8vIEV2ZXJ5IGFydGlmYWN0IG11c3QgaGF2ZSBhIHVuaXF1ZSBuYW1lXG4gICAgICAgICAgICBuYW1lOiBidWlsZEFydGlmYWN0TmFtZShyZWxlYXNlLndvcmtzcGFjZSksXG4gICAgICAgICAgICBwYXRoOiBwYXRoLmpvaW4od29ya3NwYWNlRGlyZWN0b3J5LCByZWxlYXNlLndvcmtzcGFjZS5hcnRpZmFjdHNEaXJlY3RvcnkpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlbmRlclB1Ymxpc2hKb2JzKCkge1xuICAgIGNvbnN0IEdBVEVfSk9CSUQgPSAncmVsZWFzZV9nYXRlJztcbiAgICBjb25zdCBHQVRFX09VVFBVVF9TVEVQID0gJ2NvbGxlY3QnO1xuXG4gICAgLy8gQnVpbGQgdGhlIHJlbGVhc2UgdHJlZVxuICAgIGNvbnN0IHRyZWUgPSBuZXcgUmVsZWFzZVRyZWUodGhpcy5wYWNrYWdlc1RvUmVsZWFzZSwgdGhpcy5icmFuY2hOYW1lKTtcblxuICAgIC8vIFJlbmRlciB0aGUgcmVsZWFzZV9nYXRlIGpvYlxuICAgIGNvbnN0IGdhdGVTdGVwczogZ2l0aHViLndvcmtmbG93cy5Kb2JTdGVwW10gPSB0cmVlLm5vZGVzLm1hcCgobm9kZSkgPT4ge1xuICAgICAgY29uc3QgcGFja2FnZUZpbHRlciA9IGAoIWdpdGh1Yi5ldmVudC5pbnB1dHMucGFja2FnZSB8fCBnaXRodWIuZXZlbnQuaW5wdXRzLnBhY2thZ2UgPT0gJyR7QUxMX1BBQ0tBR0VTX0lOUFVUfScgfHwgJHtzaG91bGRSZWxlYXNlRXhwcmVzc2lvbihub2RlLm5hbWUsIHRoaXMuX3JlbGVhc2VTZXRCeUNob2ljZSl9KWA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBgJHtub2RlLm5hbWV9OiBDaGVjayBwdWJsaXNoYCxcbiAgICAgICAgcnVuOiBbXG4gICAgICAgICAgYHNob3VsZF9wdWJsaXNoPVwiXFwke3sgbmVlZHMuJHtSRUxFQVNFX0pPQklEfS5vdXRwdXRzLiR7cHVibGlzaFByb2plY3RPdXRwdXRJZChub2RlLndvcmtzcGFjZSl9IH19XCJgLFxuICAgICAgICAgIGBwYWNrYWdlX2ZpbHRlcj1cIlxcJHt7ICR7cGFja2FnZUZpbHRlcn0gfX1cImAsXG4gICAgICAgICAgJ2lmIFtbIFwiJHNob3VsZF9wdWJsaXNoXCIgIT0gXCJ0cnVlXCIgXV07IHRoZW4nLFxuICAgICAgICAgIGAgIGVjaG8gXCLij63vuI8gU2tpcHBpbmcgJHtub2RlLm5hbWV9OiByZWxlYXNlIHRhZyBhbHJlYWR5IGV4aXN0c1wiYCxcbiAgICAgICAgICAnZWxpZiBbWyBcIiRwYWNrYWdlX2ZpbHRlclwiICE9IFwidHJ1ZVwiIF1dOyB0aGVuJyxcbiAgICAgICAgICBgICBlY2hvIFwi4o+t77iPIFNraXBwaW5nICR7bm9kZS5uYW1lfTogbm90IHNlbGVjdGVkIGZvciByZWxlYXNlXCJgLFxuICAgICAgICAgICdlbHNlJyxcbiAgICAgICAgICBgICBlY2hvIFwi4pyFIFdpbGwgcHVibGlzaCAke25vZGUubmFtZX1cImAsXG4gICAgICAgICAgYCAgZWNobyBcIiR7bm9kZS5uYW1lfVwiID4+IHB1Ymxpc2gudHh0YCxcbiAgICAgICAgICAnZmknLFxuICAgICAgICBdLmpvaW4oJ1xcbicpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgICBnYXRlU3RlcHMucHVzaCh7XG4gICAgICBpZDogR0FURV9PVVRQVVRfU1RFUCxcbiAgICAgIG5hbWU6ICdDb2xsZWN0IHBhY2thZ2VzIHRvIHB1Ymxpc2gnLFxuICAgICAgcnVuOiBbXG4gICAgICAgICdpZiBbIC1mIHB1Ymxpc2gudHh0IF07IHRoZW4nLFxuICAgICAgICAnICBwYWNrYWdlcz0kKGpxIC1SYyBcXCcuXFwnIHB1Ymxpc2gudHh0IHwganEgLXNjIFxcJy5cXCcpJyxcbiAgICAgICAgJ2Vsc2UnLFxuICAgICAgICAnICBwYWNrYWdlcz1cXCdbXVxcJycsXG4gICAgICAgICdmaScsXG4gICAgICAgICdlY2hvIFwicGFja2FnZXNfdG9fcHVibGlzaD0kcGFja2FnZXNcIiA+PiAkR0lUSFVCX09VVFBVVCcsXG4gICAgICAgICdlY2hvIFwiUHVibGlzaGluZzogJHBhY2thZ2VzXCInLFxuICAgICAgXS5qb2luKCdcXG4nKSxcbiAgICB9KTtcblxuICAgIHRoaXMud29ya2Zsb3c/LmFkZEpvYnMoe1xuICAgICAgW0dBVEVfSk9CSURdOiB7XG4gICAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICAgIG5lZWRzOiBbUkVMRUFTRV9KT0JJRF0sXG4gICAgICAgIHBlcm1pc3Npb25zOiB7fSxcbiAgICAgICAgaWY6IGBcXCR7eyBuZWVkcy4ke1JFTEVBU0VfSk9CSUR9Lm91dHB1dHMubGF0ZXN0X2NvbW1pdCA9PSBnaXRodWIuc2hhIH19YCxcbiAgICAgICAgbmFtZTogJ1B1Ymxpc2ggZ2F0ZScsXG4gICAgICAgIG91dHB1dHM6IHtcbiAgICAgICAgICBwYWNrYWdlc190b19wdWJsaXNoOiB7XG4gICAgICAgICAgICBzdGVwSWQ6IEdBVEVfT1VUUFVUX1NURVAsXG4gICAgICAgICAgICBvdXRwdXROYW1lOiAncGFja2FnZXNfdG9fcHVibGlzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc3RlcHM6IGdhdGVTdGVwcyxcbiAgICAgIH0gYXMgYW55LFxuICAgIH0pO1xuXG4gICAgLy8gUmVuZGVyIHBlci1wYWNrYWdlIGdhdGUgam9icyBhbmQgcHVibGlzaCBqb2JzIGZyb20gdGhlIHRyZWVcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdHJlZS5ub2Rlcykge1xuICAgICAgdGhpcy53b3JrZmxvdz8uYWRkSm9icyh7XG4gICAgICAgIFtub2RlLmdhdGVKb2JJZF06IG5vZGUucmVuZGVyR2F0ZUpvYihHQVRFX0pPQklEKSxcbiAgICAgICAgLi4ubm9kZS5yZW5kZXJQdWJsaXNoSm9icyh0aGlzLm9wdGlvbnMubm9kZVZlcnNpb24pLFxuICAgICAgICBbbm9kZS5kb25lSm9iSWRdOiBub2RlLnJlbmRlckRvbmVKb2IoKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb2J0YWluUmVsZWFzZVRhc2soKTogVGFzayB7XG4gICAgaWYgKHRoaXMucmVsZWFzZVRhc2spIHtcbiAgICAgIHJldHVybiB0aGlzLnJlbGVhc2VUYXNrO1xuICAgIH1cblxuICAgIGNvbnN0IGVudjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIFJFTEVBU0U6ICd0cnVlJyxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYWpvclZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgZW52Lk1BSk9SID0gdGhpcy5vcHRpb25zLm1ham9yVmVyc2lvbi50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdGlvbnMubWluTWFqb3JWZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMubWFqb3JWZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaW5NYWpvclZlcnNpb24gYW5kIG1ham9yVmVyc2lvbiBjYW5ub3QgYmUgdXNlZCB0b2dldGhlci4nKTtcbiAgICAgIH1cblxuICAgICAgZW52Lk1JTl9NQUpPUiA9IHRoaXMub3B0aW9ucy5taW5NYWpvclZlcnNpb24udG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlbGVhc2VUYXNrID0gdGhpcy5wcm9qZWN0LmFkZFRhc2soJ3JlbGVhc2UnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1ByZXBhcmUgYSByZWxlYXNlIGZyb20gYWxsIG1vbm9yZXBvIHBhY2thZ2VzJyxcbiAgICAgIGVudixcbiAgICB9KTtcbiAgICAvLyBVbnJvbGwgb3V0IHRoZSAncmVsZWFzZScgdGFzaywgYW5kIGRvIGFsbCB0aGUgcGhhc2VzIGZvciBlYWNoIGluZGl2aWR1YWwgcGFja2FnZS4gV2UgbmVlZCB0byAnYnVtcCcgYXQgdGhlIHNhbWVcbiAgICAvLyB0aW1lIHNvIHRoYXQgdGhlIGRlcGVuZGVuY3kgdmVyc2lvbnMgaW4gYWxsICdwYWNrYWdlLmpzb24ncyBhcmUgY29ycmVjdC5cbiAgICB0aGlzLnJlbGVhc2VUYXNrLmV4ZWMoYCR7dGhpcy53c1J1bn0gc2h4IHJtIC1yZiBkaXN0YCk7XG4gICAgdGhpcy5yZWxlYXNlVGFzay5leGVjKGAke3RoaXMud3NSdW59IGJ1bXBgKTtcbiAgICBpZiAodGhpcy5idWlsZFdpdGhOeCkge1xuICAgICAgdGhpcy5yZWxlYXNlVGFzay5leGVjKCdueCBydW4tbWFueSAtdCBidWlsZCcpO1xuICAgICAgdGhpcy5yZWxlYXNlVGFzay5lbnYoJ05YX1NLSVBfTlhfQ0FDSEUnLCAndHJ1ZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbGVhc2VUYXNrLmV4ZWMoYCR7dGhpcy53c1J1bn0gYnVpbGRgKTtcbiAgICB9XG4gICAgdGhpcy5yZWxlYXNlVGFzay5leGVjKGAke3RoaXMud3NSdW59IHVuYnVtcGApO1xuICAgIC8vIGFudGktdGFtcGVyIGNoZWNrIChmYWlscyBpZiB0aGVyZSB3ZXJlIGNoYW5nZXMgdG8gY29tbWl0dGVkIGZpbGVzKVxuICAgIC8vIHRoaXMgd2lsbCBpZGVudGlmeSBhbnkgbm9uLWNvbW1pdHRlZCBmaWxlcyBnZW5lcmF0ZWQgZHVyaW5nIGJ1aWxkIChlLmcuIHRlc3Qgc25hcHNob3RzKVxuICAgIHRoaXMucmVsZWFzZVRhc2suZXhlYyhwcm9qZW5SZWxlYXNlLlJlbGVhc2UuQU5USV9UQU1QRVJfQ01EKTtcblxuICAgIHJldHVybiB0aGlzLnJlbGVhc2VUYXNrO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVQdWJsaXNoaW5nTWVjaGFuaXNtKCkge1xuICAgIGlmICh0aGlzLnJlbGVhc2VUcmlnZ2VyLmlzTWFudWFsKSB7XG4gICAgICB0aGlzLmNyZWF0ZVB1Ymxpc2hUYXNrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JlYXRlUHVibGlzaFdvcmtmbG93KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVQdWJsaXNoVGFzaygpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01hbnVhbCBwdWJsaXNoaW5nIGlzIG5vdCBzdXBwb3J0ZWQgcmlnaHQgbm93Jyk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgdHJhbnNpdGl2ZSB1cHN0cmVhbSBkZXBlbmRlbmNpZXMgKHJ1bnRpbWUgKyBwZWVyKSBvZiBhIHdvcmtzcGFjZS5cbiAgICovXG4gIHByaXZhdGUgdXBzdHJlYW1QYWNrYWdlTmFtZXMod29ya3NwYWNlOiBUeXBlU2NyaXB0V29ya3NwYWNlKTogU2V0PHN0cmluZz4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHZpc2l0ID0gKHdzOiBUeXBlU2NyaXB0V29ya3NwYWNlKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGRlcCBvZiB3cy53b3Jrc3BhY2VEZXBlbmRlbmNpZXMoW0RlcGVuZGVuY3lUeXBlLlJVTlRJTUUsIERlcGVuZGVuY3lUeXBlLlBFRVJdKSkge1xuICAgICAgICBpZiAoIXJlc3VsdC5oYXMoZGVwLm5hbWUpKSB7XG4gICAgICAgICAgcmVzdWx0LmFkZChkZXAubmFtZSk7XG4gICAgICAgICAgaWYgKGRlcCBpbnN0YW5jZW9mIFR5cGVTY3JpcHRXb3Jrc3BhY2UpIHtcbiAgICAgICAgICAgIHZpc2l0KGRlcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICB2aXNpdCh3b3Jrc3BhY2UpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQWRkIHdvcmtmbG93X2Rpc3BhdGNoIGlucHV0IHdpdGggYSBjaG9pY2Ugb2YgcGFja2FnZXMuXG4gICAqIFdoZW4gYSBwYWNrYWdlIGlzIHNlbGVjdGVkLCBvbmx5IHRoYXQgcGFja2FnZSBhbmQgaXRzIHVwc3RyZWFtIGRlcHMgYXJlIHJlbGVhc2VkLlxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJXb3JrZmxvd0Rpc3BhdGNoSW5wdXQoKSB7XG4gICAgaWYgKCF0aGlzLndvcmtmbG93Py5maWxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFja2FnZU5hbWVzID0gdGhpcy5wYWNrYWdlc1RvUmVsZWFzZS5tYXAocCA9PiBwLnJlbGVhc2Uud29ya3NwYWNlLm5hbWUpO1xuXG4gICAgdGhpcy53b3JrZmxvdy5maWxlLmFkZE92ZXJyaWRlKCdvbi53b3JrZmxvd19kaXNwYXRjaC5pbnB1dHMucGFja2FnZScsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnU2VsZWN0IHNwZWNpZmljIHBhY2thZ2UgdG8gcmVsZWFzZScsXG4gICAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgICB0eXBlOiAnY2hvaWNlJyxcbiAgICAgIG9wdGlvbnM6IFtBTExfUEFDS0FHRVNfSU5QVVQsIC4uLnBhY2thZ2VOYW1lc10sXG4gICAgICBkZWZhdWx0OiBBTExfUEFDS0FHRVNfSU5QVVQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgcmVsZWFzZSBzZXQgZm9yIGVhY2ggcGFja2FnZSAoaXRzZWxmICsgdHJhbnNpdGl2ZSB1cHN0cmVhbSBkZXBzKS5cbiAgICovXG4gIHByaXZhdGUgY29tcHV0ZVJlbGVhc2VTZXRzKCkge1xuICAgIGZvciAoY29uc3QgeyByZWxlYXNlIH0gb2YgdGhpcy5wYWNrYWdlc1RvUmVsZWFzZSkge1xuICAgICAgY29uc3QgdXBzdHJlYW0gPSB0aGlzLnVwc3RyZWFtUGFja2FnZU5hbWVzKHJlbGVhc2Uud29ya3NwYWNlKTtcbiAgICAgIHVwc3RyZWFtLmFkZChyZWxlYXNlLndvcmtzcGFjZS5uYW1lKTtcbiAgICAgIHRoaXMuX3JlbGVhc2VTZXRCeUNob2ljZS5zZXQocmVsZWFzZS53b3Jrc3BhY2UubmFtZSwgdXBzdHJlYW0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUHVibGlzaFdvcmtmbG93KCkge1xuICAgIGNvbnN0IHdvcmtmbG93TmFtZSA9XG4gICAgICB0aGlzLm9wdGlvbnMucmVsZWFzZVdvcmtmbG93TmFtZSA/P1xuICAgICAgKFsnbWFzdGVyJywgJ21haW4nXS5pbmNsdWRlcyh0aGlzLmJyYW5jaE5hbWUpID8gJ3JlbGVhc2UnIDogYHJlbGVhc2UtJHt0aGlzLmJyYW5jaE5hbWV9YCk7XG5cbiAgICAvLyBUaGUgYXJyYXlzIGFyZSBiZWluZyBjbG9uZWQgdG8gYXZvaWQgYWNjdW11bGF0aW5nIHZhbHVlcyBmcm9tIHByZXZpb3VzIGJyYW5jaGVzXG4gICAgY29uc3QgcHJlQnVpbGRTdGVwcyA9IFtcbiAgICAgIC4uLih0aGlzLnByb2plY3QgYXMgYW55KS5yZW5kZXJXb3JrZmxvd1NldHVwKHsgbXV0YWJsZTogZmFsc2UgfSksXG4gICAgICAuLi4odGhpcy5vcHRpb25zLnJlbGVhc2VXb3JrZmxvd1NldHVwU3RlcHMgPz8gW10pLFxuICAgIF07XG4gICAgY29uc3QgcG9zdEJ1aWxkU3RlcHMgPSBbLi4uKHRoaXMub3B0aW9ucy5wb3N0QnVpbGRTdGVwcyA/PyBbXSldO1xuXG4gICAgLy8gQWRkIGFuIG91dHB1dCB0byB0aGUgam9iIHRvIGluZGljYXRlIGlmIGEgY2VydGFpbiBwYWNrYWdlIG5lZWRzIHB1Ymxpc2hpbmdcbiAgICBjb25zdCBzaG91bGRQdWJsaXNoT3V0cHV0cyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgIHRoaXMucGFja2FnZXNUb1JlbGVhc2UubWFwKCh7IHJlbGVhc2UgfSkgPT4ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHB1Ymxpc2hQcm9qZWN0T3V0cHV0SWQocmVsZWFzZS53b3Jrc3BhY2UpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0ZXBJZDogc2hvdWxkUHVibGlzaFByb2plY3RTdGVwSWQocmVsZWFzZS53b3Jrc3BhY2UpLFxuICAgICAgICAgICAgb3V0cHV0TmFtZTogJ3B1Ymxpc2gnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHByb3Bvc2VkIHJlbGVhc2UgdGFnIGFscmVhZHkgZXhpc3RzXG4gICAgLy8gT25seSBpZiBpdCBkb2Vzbid0IGV4aXN0IHlldCBzaG91bGQgd2UgcHVibGlzaFxuICAgIGZvciAoY29uc3QgeyB3b3Jrc3BhY2VEaXJlY3RvcnksIHJlbGVhc2UgfSBvZiB0aGlzLnBhY2thZ2VzVG9SZWxlYXNlKSB7XG4gICAgICBwb3N0QnVpbGRTdGVwcy5wdXNoKHtcbiAgICAgICAgaWQ6IHNob3VsZFB1Ymxpc2hQcm9qZWN0U3RlcElkKHJlbGVhc2Uud29ya3NwYWNlKSxcbiAgICAgICAgd29ya2luZ0RpcmVjdG9yeTogd29ya3NwYWNlRGlyZWN0b3J5LFxuICAgICAgICBydW46ICcoZ2l0IGxzLXJlbW90ZSAtcSAtLWV4aXQtY29kZSAtLXRhZ3Mgb3JpZ2luICQoY2F0IGRpc3QvcmVsZWFzZXRhZy50eHQpICYmIChlY2hvIFwicHVibGlzaD1mYWxzZVwiID4+ICRHSVRIVUJfT1VUUFVUKSkgfHwgZWNobyBcInB1Ymxpc2g9dHJ1ZVwiID4+ICRHSVRIVUJfT1VUUFVUJyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIG5ldyBjb21taXRzIHdlcmUgcHVzaGVkIHRvIHRoZSByZXBvIHdoaWxlIHdlIHdlcmUgYnVpbGRpbmcuXG4gICAgLy8gaWYgbmV3IGNvbW1pdHMgaGF2ZSBiZWVuIHB1c2hlZCwgd2Ugd2lsbCBjYW5jZWwgdGhpcyByZWxlYXNlXG4gICAgaWYgKHRoaXMub3B0aW9ucy5yZWxlYXNlVHJpZ2dlcj8uaXNDb250aW51b3VzID8/IHRydWUpIHtcbiAgICAgIHBvc3RCdWlsZFN0ZXBzLnB1c2goe1xuICAgICAgICBuYW1lOiAnQ2hlY2sgZm9yIG5ldyBjb21taXRzJyxcbiAgICAgICAgaWQ6IEdJVF9SRU1PVEVfU1RFUElELFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICBHSVRIVUJfUkVGOiAnJHt7IGdpdGh1Yi5yZWYgfX0nLFxuICAgICAgICB9LFxuICAgICAgICBydW46IGBlY2hvIFwiJHtMQVRFU1RfQ09NTUlUX09VVFBVVH09JChnaXQgbHMtcmVtb3RlIG9yaWdpbiAtaCBcIiRHSVRIVUJfUkVGXCIgfCBjdXQgLWYxKVwiID4+ICRHSVRIVUJfT1VUUFVUYCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3Igbm9uLWNvbnRpbnVvdXMgYnVpbGRzIHdlJ2xsIGp1c3QgcHV0IHRoZSB2YWx1ZSB0aGVyZSB0aGF0IGRvd25zdHJlYW0gc3RlcHMgYXJlIGdvaW5nIHRvIGNvbXBhcmUgYWdhaW5zdFxuICAgICAgcG9zdEJ1aWxkU3RlcHMucHVzaCh7XG4gICAgICAgIG5hbWU6ICdPdXRwdXQgdGhlIHNoYSB2YWx1ZSB0aGF0IGRvd25zdHJlYW0gY2hlY2tzIGV4cGVjdCcsXG4gICAgICAgIGlkOiBHSVRfUkVNT1RFX1NURVBJRCxcbiAgICAgICAgcnVuOiBgZWNobyBcIiR7TEFURVNUX0NPTU1JVF9PVVRQVVR9PVxcJHt7IGdpdGh1Yi5zaGEgfX1cIiA+PiAkR0lUSFVCX09VVFBVVGAsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLndvcmtmbG93ID0gbmV3IGdpdGh1Yi5UYXNrV29ya2Zsb3codGhpcy5naXRodWIsIHtcbiAgICAgIG5hbWU6IHdvcmtmbG93TmFtZSxcbiAgICAgIGpvYklkOiBSRUxFQVNFX0pPQklELFxuICAgICAgb3V0cHV0czoge1xuICAgICAgICBsYXRlc3RfY29tbWl0OiB7XG4gICAgICAgICAgc3RlcElkOiBHSVRfUkVNT1RFX1NURVBJRCxcbiAgICAgICAgICBvdXRwdXROYW1lOiBMQVRFU1RfQ09NTUlUX09VVFBVVCxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uc2hvdWxkUHVibGlzaE91dHB1dHMsXG4gICAgICB9LFxuICAgICAgdHJpZ2dlcnM6IHtcbiAgICAgICAgc2NoZWR1bGU6IHRoaXMucmVsZWFzZVRyaWdnZXIuc2NoZWR1bGUgPyBbeyBjcm9uOiB0aGlzLnJlbGVhc2VUcmlnZ2VyLnNjaGVkdWxlIH1dIDogdW5kZWZpbmVkLFxuICAgICAgICBwdXNoOiB0aGlzLnJlbGVhc2VUcmlnZ2VyLmlzQ29udGludW91cyA/IHsgYnJhbmNoZXM6IFt0aGlzLmJyYW5jaE5hbWVdIH0gOiB1bmRlZmluZWQsXG4gICAgICAgIHdvcmtmbG93RGlzcGF0Y2g6IHt9LFxuICAgICAgfSxcbiAgICAgIGNvbnRhaW5lcjogdGhpcy5vcHRpb25zLndvcmtmbG93Q29udGFpbmVySW1hZ2UgPyB7IGltYWdlOiB0aGlzLm9wdGlvbnMud29ya2Zsb3dDb250YWluZXJJbWFnZSB9IDogdW5kZWZpbmVkLFxuICAgICAgZW52OiB7XG4gICAgICAgIENJOiAndHJ1ZScsXG4gICAgICB9LFxuICAgICAgcGVybWlzc2lvbnM6IHtcbiAgICAgICAgY29udGVudHM6ICd3cml0ZScgYXMgYW55LFxuICAgICAgfSxcbiAgICAgIGNoZWNrb3V0V2l0aDoge1xuICAgICAgICAvLyB3ZSBtdXN0IHVzZSAnZmV0Y2gtZGVwdGg9MCcgaW4gb3JkZXIgdG8gZmV0Y2ggYWxsIHRhZ3NcbiAgICAgICAgLy8gb3RoZXJ3aXNlIHRhZ3MgYXJlIG5vdCBjaGVja2VkIG91dFxuICAgICAgICBmZXRjaERlcHRoOiAwLFxuICAgICAgfSxcbiAgICAgIHByZUJ1aWxkU3RlcHMsXG4gICAgICB0YXNrOiB0aGlzLnJlbGVhc2VUYXNrISxcbiAgICAgIHBvc3RCdWlsZFN0ZXBzLFxuICAgICAgcnVuc09uOiB0aGlzLm9wdGlvbnMud29ya2Zsb3dSdW5zT24sXG4gICAgfSk7XG5cbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCBlbXB0eSB3b3JrZmxvd19kaXNwYXRjaCBhZGRlZCBieSBUYXNrV29ya2Zsb3dcbiAgICAvLyB0byBpbmNsdWRlIHRoZSBkcnlfcnVuIGlucHV0IGZvciB0ZXN0aW5nIHRoZSByZWxlYXNlIHBpcGVsaW5lXG4gICAgdGhpcy53b3JrZmxvdy5vbih7XG4gICAgICB3b3JrZmxvd0Rpc3BhdGNoOiB7XG4gICAgICAgIGlucHV0czoge1xuICAgICAgICAgIGRyeV9ydW46IHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnRHJ5IHJ1biAoc2tpcCBhY3R1YWwgcHVibGlzaGluZyknLFxuICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQSBub2RlIHJlcHJlc2VudGluZyBhIHNpbmdsZSBwdWJsaXNoIGpvYiAoZS5nLiBucG0sIG1hdmVuLCBnaXRodWIpLlxuICovXG5jbGFzcyBQdWJsaXNoSm9iTm9kZSB7XG4gIHB1YmxpYyByZWFkb25seSBqb2JJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgam9iOiBnaXRodWIud29ya2Zsb3dzLkpvYjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcmVhZG9ubHkgcGFyZW50OiBQYWNrYWdlUmVsZWFzZU5vZGUsXG4gICAga2V5OiBzdHJpbmcsXG4gICAgam9iOiBnaXRodWIud29ya2Zsb3dzLkpvYixcbiAgKSB7XG4gICAgdGhpcy5qb2JJZCA9IGAke3BhcmVudC5wcmVmaXh9XyR7a2V5fWA7XG4gICAgdGhpcy5qb2IgPSBqb2I7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgYG5lZWRzYCBmb3IgdGhpcyBwdWJsaXNoIGpvYi5cbiAgICogSm9icyB3aXRoIHNpYmxpbmcgZGVwcyAoZS5nLiBnaXRodWIgZGVwZW5kcyBvbiBucG0pIHVzZSB0aG9zZTtcbiAgICogdGhlIGZpcnN0IGpvYiBpbiB0aGUgY2hhaW4gZGVwZW5kcyBvbiB0aGUgZ2F0ZSArIHVwc3RyZWFtIGRvbmUgam9icy5cbiAgICovXG4gIHB1YmxpYyBnZXQgbmVlZHMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHNpYmxpbmdEZXBzID0gKHRoaXMuam9iLm5lZWRzID8/IFtdKVxuICAgICAgLmZpbHRlcigoZGVwOiBzdHJpbmcpID0+IGRlcCAhPT0gJ3JlbGVhc2UnKVxuICAgICAgLm1hcCgoZGVwOiBzdHJpbmcpID0+IGAke3RoaXMucGFyZW50LnByZWZpeH1fJHtkZXB9YCk7XG5cbiAgICBpZiAoc2libGluZ0RlcHMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHNpYmxpbmdEZXBzO1xuICAgIH1cblxuICAgIC8vIEZpcnN0IHB1Ymxpc2ggam9iOiBkZXBlbmRzIG9uIGdhdGUgKyB1cHN0cmVhbSBwYWNrYWdlcycgZG9uZSBqb2JzXG4gICAgcmV0dXJuIFtcbiAgICAgIHRoaXMucGFyZW50LmdhdGVKb2JJZCxcbiAgICAgIC4uLnRoaXMucGFyZW50LnVwc3RyZWFtLm1hcCgobikgPT4gbi5kb25lSm9iSWQpLFxuICAgIF07XG4gIH1cbn1cblxuLyoqXG4gKiBBIG5vZGUgcmVwcmVzZW50aW5nIGEgcGFja2FnZSdzIHJlbGVhc2UgZ2F0ZSwgcHVibGlzaCBqb2JzLCBhbmQgZG9uZSBzaWduYWwuXG4gKi9cbmNsYXNzIFBhY2thZ2VSZWxlYXNlTm9kZSB7XG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSB3b3Jrc3BhY2U6IFR5cGVTY3JpcHRXb3Jrc3BhY2U7XG4gIHB1YmxpYyByZWFkb25seSBwcmVmaXg6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGdhdGVKb2JJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgZG9uZUpvYklkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBwdWJsaXNoSm9iczogUHVibGlzaEpvYk5vZGVbXTtcbiAgcHVibGljIHJlYWRvbmx5IHVwc3RyZWFtOiBQYWNrYWdlUmVsZWFzZU5vZGVbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHdvcmtzcGFjZTogVHlwZVNjcmlwdFdvcmtzcGFjZSwgcHVibGlzaEpvYnM6IFJlY29yZDxzdHJpbmcsIGdpdGh1Yi53b3JrZmxvd3MuSm9iPikge1xuICAgIHRoaXMubmFtZSA9IHdvcmtzcGFjZS5uYW1lO1xuICAgIHRoaXMud29ya3NwYWNlID0gd29ya3NwYWNlO1xuICAgIHRoaXMucHJlZml4ID0gc2x1Z2lmeSh3b3Jrc3BhY2UubmFtZSk7XG4gICAgdGhpcy5nYXRlSm9iSWQgPSBgJHt0aGlzLnByZWZpeH1fcmVsZWFzZWA7XG4gICAgdGhpcy5kb25lSm9iSWQgPSBgJHt0aGlzLnByZWZpeH1fcmVsZWFzZV9kb25lYDtcbiAgICB0aGlzLnB1Ymxpc2hKb2JzID0gT2JqZWN0LmVudHJpZXMocHVibGlzaEpvYnMpLm1hcChcbiAgICAgIChba2V5LCBqb2JdKSA9PiBuZXcgUHVibGlzaEpvYk5vZGUodGhpcywga2V5LCBqb2IpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVyIHRoZSBwYWNrYWdlIGdhdGUgam9iIOKAlCBwdXJlbHkgY2hlY2tzIGlmIHRoaXMgcGFja2FnZSBzaG91bGQgcHVibGlzaC5cbiAgICovXG4gIHB1YmxpYyByZW5kZXJHYXRlSm9iKHJlbGVhc2VHYXRlSm9iSWQ6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgY29uZGl0aW9uID0gYGNvbnRhaW5zKGZyb21KU09OKG5lZWRzLiR7cmVsZWFzZUdhdGVKb2JJZH0ub3V0cHV0cy5wYWNrYWdlc190b19wdWJsaXNoKSwgJyR7dGhpcy5uYW1lfScpYDtcbiAgICByZXR1cm4ge1xuICAgICAgcnVuc09uOiBbJ3VidW50dS1sYXRlc3QnXSxcbiAgICAgIG5lZWRzOiBbcmVsZWFzZUdhdGVKb2JJZF0sXG4gICAgICBwZXJtaXNzaW9uczoge30sXG4gICAgICBpZjogYFxcJHt7ICR7Y29uZGl0aW9ufSB9fWAsXG4gICAgICBuYW1lOiBgJHt0aGlzLm5hbWV9OiBSZWxlYXNlYCxcbiAgICAgIHN0ZXBzOiBbeyBydW46IGBlY2hvIFwiUmVsZWFzaW5nICR7dGhpcy5uYW1lfS4uLlwiYCB9XSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciBhbGwgcHVibGlzaCBqb2IgZGVmaW5pdGlvbnMgZm9yIHRoaXMgcGFja2FnZS5cbiAgICovXG4gIHB1YmxpYyByZW5kZXJQdWJsaXNoSm9icyhub2RlVmVyc2lvbj86IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICB0aGlzLnB1Ymxpc2hKb2JzLm1hcCgocHViTm9kZSkgPT4gW1xuICAgICAgICBwdWJOb2RlLmpvYklkLFxuICAgICAgICB7XG4gICAgICAgICAgLi4ucHViTm9kZS5qb2IsXG4gICAgICAgICAgLy8gVG9sZXJhdGUgc2tpcHBlZCBkZXBlbmRlbmN5IGFuY2VzdG9ycyB3aGlsZSBzdGlsbCByZXF1aXJpbmcgdGhpcyBwYWNrYWdlJ3MgZ2F0ZSB0byBwYXNzXG4gICAgICAgICAgaWY6IGBcXCR7eyAhY2FuY2VsbGVkKCkgJiYgIWZhaWx1cmUoKSAmJiBuZWVkcy4ke3RoaXMuZ2F0ZUpvYklkfS5yZXN1bHQgPT0gJ3N1Y2Nlc3MnIH19YCxcbiAgICAgICAgICB0b29sczoge1xuICAgICAgICAgICAgLi4ucHViTm9kZS5qb2IudG9vbHMsXG4gICAgICAgICAgICBub2RlOiB7XG4gICAgICAgICAgICAgIC4uLnB1Yk5vZGUuam9iLnRvb2xzPy5ub2RlID8/IHt9LFxuICAgICAgICAgICAgICB2ZXJzaW9uOiBub2RlVmVyc2lvbiA/PyBwdWJOb2RlLmpvYi50b29scz8ubm9kZT8udmVyc2lvbiA/PyAnbHRzLyonLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5lZWRzOiBwdWJOb2RlLm5lZWRzLFxuICAgICAgICAgIG5hbWU6IGAke3RoaXMubmFtZX06ICR7cHViTm9kZS5qb2IubmFtZX1gLFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlIGRvbmUgam9iIOKAlCBmYW4taW4gdGhhdCBzaWduYWxzIGFsbCBwdWJsaXNoaW5nIGZvciB0aGlzIHBhY2thZ2UgaXMgY29tcGxldGUuXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyRG9uZUpvYigpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgbmVlZHM6IHRoaXMucHVibGlzaEpvYnMubWFwKChwKSA9PiBwLmpvYklkKSxcbiAgICAgIHBlcm1pc3Npb25zOiB7fSxcbiAgICAgIC8vIFVzZSAhY2FuY2VsbGVkKCkgJiYgIWZhaWx1cmUoKSBzbyB0aGF0OlxuICAgICAgLy8gLSBJZiBwdWJsaXNoIGpvYnMgYXJlIHNraXBwZWQgKHBhY2thZ2UgaGFzIG5vIGNoYW5nZXMsIGdhdGUgd2FzIHNraXBwZWQpLCBkb25lIHN0aWxsIHN1Y2NlZWRzXG4gICAgICAvLyAgIOKGkiBhbGxvd3MgZG93bnN0cmVhbSBwYWNrYWdlcyB0byBwcm9jZWVkIHdpdGggdGhlaXIgb3duIHJlbGVhc2VcbiAgICAgIC8vIC0gSWYgYSBwdWJsaXNoIGpvYiBmYWlscywgZG9uZSBpcyBza2lwcGVkIChmYWlsdXJlKCkgaXMgdHJ1ZSlcbiAgICAgIC8vICAg4oaSIGJsb2NrcyBkb3duc3RyZWFtIHBhY2thZ2VzIGZyb20gcmVsZWFzaW5nXG4gICAgICBpZjogJyR7eyAhY2FuY2VsbGVkKCkgJiYgIWZhaWx1cmUoKSB9fScsXG4gICAgICBuYW1lOiBgJHt0aGlzLm5hbWV9OiBSZWxlYXNlIGNvbXBsZXRlYCxcbiAgICAgIHN0ZXBzOiBbeyBydW46ICdlY2hvIFwiQWxsIHB1Ymxpc2ggam9icyBjb21wbGV0ZVwiJyB9XSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogQSB0b3BvbG9naWNhbCB0cmVlIG9mIHBhY2thZ2VzIHRvIHJlbGVhc2UuXG4gKiBFYWNoIG5vZGUga25vd3MgaXRzIHVwc3RyZWFtIGRlcGVuZGVuY2llcyAocnVudGltZSArIHBlZXIpLlxuICovXG5jbGFzcyBSZWxlYXNlVHJlZSB7XG4gIHB1YmxpYyByZWFkb25seSBub2RlczogUGFja2FnZVJlbGVhc2VOb2RlW107XG4gIHByaXZhdGUgcmVhZG9ubHkgbm9kZXNCeU5hbWUgPSBuZXcgTWFwPHN0cmluZywgUGFja2FnZVJlbGVhc2VOb2RlPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBhY2thZ2VzVG9SZWxlYXNlOiBBcnJheTx7XG4gICAgICByZWFkb25seSB3b3Jrc3BhY2VEaXJlY3Rvcnk6IHN0cmluZztcbiAgICAgIHJlYWRvbmx5IHJlbGVhc2U6IHtcbiAgICAgICAgcmVhZG9ubHkgd29ya3NwYWNlOiBUeXBlU2NyaXB0V29ya3NwYWNlO1xuICAgICAgICByZWFkb25seSBwdWJsaXNoZXI6IHByb2plblJlbGVhc2UuUHVibGlzaGVyO1xuICAgICAgICByZWFkb25seSBvcHRpb25zOiBQYXJ0aWFsPHByb2plblJlbGVhc2UuQnJhbmNoT3B0aW9ucz47XG4gICAgICB9O1xuICAgIH0+LFxuICAgIGJyYW5jaE5hbWU6IHN0cmluZyxcbiAgKSB7XG4gICAgLy8gQ3JlYXRlIG5vZGVzXG4gICAgZm9yIChjb25zdCB7IHJlbGVhc2UgfSBvZiBwYWNrYWdlc1RvUmVsZWFzZSkge1xuICAgICAgY29uc3QgcHVibGlzaEpvYnMgPSByZWxlYXNlLnB1Ymxpc2hlci5fcmVuZGVySm9ic0ZvckJyYW5jaChicmFuY2hOYW1lLCByZWxlYXNlLm9wdGlvbnMpO1xuXG4gICAgICAvLyBGaXggZG93bmxvYWQgc3RlcHMgdG8gdXNlIGFydGlmYWN0IG5hbWUgaW5zdGVhZCBvZiBpbW11dGFibGUgYXJ0aWZhY3QgSURzXG4gICAgICBmb3IgKGNvbnN0IGpvYiBvZiBPYmplY3QudmFsdWVzKHB1Ymxpc2hKb2JzKSkge1xuICAgICAgICBjb25zdCBkb3dubG9hZFN0ZXAgPSBqb2Iuc3RlcHMuZmluZCgoaikgPT4gai51c2VzPy5zdGFydHNXaXRoKCdhY3Rpb25zL2Rvd25sb2FkLWFydGlmYWN0QCcpKTtcbiAgICAgICAgaWYgKCFkb3dubG9hZFN0ZXApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkIG5vdCBmaW5kIGRvd25sb2FkU3RlcCBhbW9uZyBzdGVwczogJHtKU09OLnN0cmluZ2lmeShqb2Iuc3RlcHMsIHVuZGVmaW5lZCwgMil9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvd25sb2FkU3RlcC53aXRoKSB7XG4gICAgICAgICAgZGVsZXRlIGRvd25sb2FkU3RlcC53aXRoWydhcnRpZmFjdC1pZHMnXTtcbiAgICAgICAgICBkb3dubG9hZFN0ZXAud2l0aC5uYW1lID0gYnVpbGRBcnRpZmFjdE5hbWUocmVsZWFzZS53b3Jrc3BhY2UpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vZGUgPSBuZXcgUGFja2FnZVJlbGVhc2VOb2RlKHJlbGVhc2Uud29ya3NwYWNlLCBwdWJsaXNoSm9icyk7XG4gICAgICB0aGlzLm5vZGVzQnlOYW1lLnNldChub2RlLm5hbWUsIG5vZGUpO1xuICAgIH1cblxuICAgIC8vIFJlc29sdmUgdXBzdHJlYW0gZWRnZXNcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5ub2Rlc0J5TmFtZS52YWx1ZXMoKSkge1xuICAgICAgZm9yIChjb25zdCBkZXAgb2Ygbm9kZS53b3Jrc3BhY2Uud29ya3NwYWNlRGVwZW5kZW5jaWVzKFtEZXBlbmRlbmN5VHlwZS5SVU5USU1FLCBEZXBlbmRlbmN5VHlwZS5QRUVSXSkpIHtcbiAgICAgICAgY29uc3QgdXBzdHJlYW0gPSB0aGlzLm5vZGVzQnlOYW1lLmdldChkZXAubmFtZSk7XG4gICAgICAgIGlmICh1cHN0cmVhbSkge1xuICAgICAgICAgIG5vZGUudXBzdHJlYW0ucHVzaCh1cHN0cmVhbSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm5vZGVzID0gWy4uLnRoaXMubm9kZXNCeU5hbWUudmFsdWVzKCldO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNsdWdpZnkoeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHgucmVwbGFjZSgvW15hLXpBLVowLTlfLV0vZywgJy0nKS5yZXBsYWNlKC9eWzAtOS1dKy8sICcnKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBcnRpZmFjdE5hbWUocHJvamVjdDogUHJvamVjdCkge1xuICByZXR1cm4gc2x1Z2lmeShgJHtwcm9qZWN0Lm5hbWV9XyR7QlVJTERfQVJUSUZBQ1RfTkFNRX1gKTtcbn1cblxuZnVuY3Rpb24gcHVibGlzaFByb2plY3RPdXRwdXRJZChwcm9qZWN0OiBQcm9qZWN0KSB7XG4gIHJldHVybiBgcHVibGlzaC0ke3NsdWdpZnkocHJvamVjdC5uYW1lKX1gO1xufVxuXG5mdW5jdGlvbiBzaG91bGRQdWJsaXNoUHJvamVjdFN0ZXBJZChwcm9qZWN0OiBQcm9qZWN0KSB7XG4gIHJldHVybiBgY2hlY2stJHtwdWJsaXNoUHJvamVjdE91dHB1dElkKHByb2plY3QpfWA7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIEdpdEh1YiBBY3Rpb25zIGV4cHJlc3Npb24gdGhhdCBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiB0aGUgZ2l2ZW4gd29ya3NwYWNlXG4gKiBzaG91bGQgYmUgcmVsZWFzZWQgYmFzZWQgb24gdGhlIHNlbGVjdGVkIHBhY2thZ2UgaW5wdXQuXG4gKlxuICogQSB3b3Jrc3BhY2Ugc2hvdWxkIGJlIHJlbGVhc2VkIGlmIHRoZSBzZWxlY3RlZCBwYWNrYWdlIGlzIG9uZSBmb3Igd2hpY2ggdGhpcyB3b3Jrc3BhY2VcbiAqIGlzIGluIHRoZSByZWxlYXNlIHNldCAoaS5lLiwgdGhlIHdvcmtzcGFjZSBpcyB0aGUgc2VsZWN0ZWQgcGFja2FnZSBpdHNlbGYgb3IgYW4gdXBzdHJlYW0gZGVwKS5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkUmVsZWFzZUV4cHJlc3Npb24od29ya3NwYWNlTmFtZTogc3RyaW5nLCByZWxlYXNlU2V0QnlDaG9pY2U6IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+Pik6IHN0cmluZyB7XG4gIC8vIEZpbmQgYWxsIHBhY2thZ2VzIHdob3NlIHJlbGVhc2Ugc2V0IGluY2x1ZGVzIHRoaXMgd29ya3NwYWNlXG4gIGNvbnN0IHRyaWdnZXJpbmdQYWNrYWdlcyA9IEFycmF5LmZyb20ocmVsZWFzZVNldEJ5Q2hvaWNlLmVudHJpZXMoKSlcbiAgICAuZmlsdGVyKChbXywgcmVsZWFzZVNldF0pID0+IHJlbGVhc2VTZXQuaGFzKHdvcmtzcGFjZU5hbWUpKVxuICAgIC5tYXAoKFtwa2ddKSA9PiBwa2cpO1xuXG4gIHJldHVybiBgY29udGFpbnMoZnJvbUpTT04oJyR7SlNPTi5zdHJpbmdpZnkodHJpZ2dlcmluZ1BhY2thZ2VzKX0nKSwgZ2l0aHViLmV2ZW50LmlucHV0cy5wYWNrYWdlKWA7XG59XG4iXX0=
@@ -40,13 +40,14 @@ const projen_1 = require("projen");
40
40
  const constraints_1 = require("./constraints");
41
41
  const monorepo_release_1 = require("./monorepo-release");
42
42
  const nx_1 = require("./nx");
43
+ const check_gha_expressions_1 = require("../check-gha-expressions");
43
44
  const MONOREPO_SYM = Symbol.for('cdklabs-projen-project-types.yarn.Monorepo');
44
45
  /**
45
46
  * A monorepo using yarn workspaces.
46
47
  */
47
48
  class Monorepo extends projen_1.typescript.TypeScriptProject {
48
49
  settings;
49
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.yarn.Monorepo", version: "0.6.5" };
50
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.yarn.Monorepo", version: "0.6.7" };
50
51
  static isMonorepo(x) {
51
52
  return Boolean(x && typeof x === 'object' && MONOREPO_SYM in x);
52
53
  }
@@ -83,6 +84,9 @@ class Monorepo extends projen_1.typescript.TypeScriptProject {
83
84
  disableTsconfigDev: true,
84
85
  });
85
86
  this.settings = settings;
87
+ if (settings.checkGhaExpressions ?? true) {
88
+ new check_gha_expressions_1.CheckGhaExpressions(this);
89
+ }
86
90
  Object.defineProperty(this, MONOREPO_SYM, { value: true });
87
91
  this.repositoryUrl = settings.repository;
88
92
  const buildWithNx = Boolean(settings.nx && settings.buildWithNx);
@@ -321,7 +325,7 @@ function getObjFromFile(project, file) {
321
325
  * @pjid cdklabs-yarn-monorepo
322
326
  */
323
327
  class CdkLabsMonorepo extends Monorepo {
324
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.yarn.CdkLabsMonorepo", version: "0.6.5" };
328
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdklabs-projen-project-types.yarn.CdkLabsMonorepo", version: "0.6.7" };
325
329
  constructor(options) {
326
330
  super({
327
331
  projenrcTs: true,
@@ -348,4 +352,4 @@ class CdkLabsMonorepo extends Monorepo {
348
352
  }
349
353
  }
350
354
  exports.CdkLabsMonorepo = CdkLabsMonorepo;
351
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub3JlcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMveWFybi9tb25vcmVwby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkRBQTZDO0FBQzdDLG1DQUFzRztBQUN0RywrQ0FBNEM7QUFFNUMseURBQXFEO0FBQ3JELDZCQUEwQjtBQUcxQixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7QUFFOUU7O0dBRUc7QUFDSCxNQUFhLFFBQVMsU0FBUSxtQkFBVSxDQUFDLGlCQUFpQjtJQWlCNUI7O0lBaEJyQixNQUFNLENBQUMsVUFBVSxDQUFDLENBQVU7UUFDakMsT0FBTyxPQUFPLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsSUFBSSxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOztPQUVHO0lBQ2EsZUFBZSxDQUFtQjtJQUVsRDs7T0FFRztJQUNhLGFBQWEsQ0FBVTtJQUUvQix1QkFBdUIsR0FBRyxJQUFJLEtBQUssRUFBa0IsQ0FBQztJQUU5RCxZQUE0QixRQUF5QjtRQUNuRCxLQUFLLENBQUM7WUFDSixHQUFHLFFBQVE7WUFDWCxjQUFjLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsbUJBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLG1CQUFVLENBQUMsa0JBQWtCLENBQUMsWUFBWTtZQUMxSCxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDckMsR0FBRyxRQUFRLENBQUMsZ0JBQWdCO2dCQUM1QixhQUFhLEVBQUU7b0JBQ2IsVUFBVSxFQUFFLG1CQUFVLENBQUMsY0FBYyxDQUFDLFlBQVk7b0JBQ2xELEdBQUcsUUFBUSxDQUFDLGdCQUFnQixFQUFFLGFBQWE7aUJBQzVDO2FBQ0YsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUNiLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLElBQUksRUFBRSxLQUFLO1lBQ1gsTUFBTSxFQUFFLEtBQUs7WUFDYixPQUFPLEVBQUUsS0FBSztZQUNkLHdFQUF3RTtZQUN4RSxnRUFBZ0U7WUFDaEUsb0VBQW9FO1lBQ3BFLHdFQUF3RTtZQUN4RSxrRUFBa0U7WUFDbEUsc0VBQXNFO1lBQ3RFLGtCQUFrQixFQUFFLElBQUk7U0FDekIsQ0FBQyxDQUFDO1FBdEJ1QixhQUFRLEdBQVIsUUFBUSxDQUFpQjtRQXdCbkQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFM0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVqRSxxREFBcUQ7UUFDckQsSUFBSSxRQUFRLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FDMUQsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUNoRSxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQ7O1dBRUc7UUFDSCxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixFQUFFLHdCQUF3QixDQUFDLENBQUM7WUFDcEUsSUFBSSxpQkFBUSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFDbkMsYUFBYSxFQUFFLElBQUk7Z0JBQ25CLEdBQUcsRUFBRTtvQkFDSCxPQUFPLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxVQUFVLENBQUM7b0JBQzNDLE1BQU0sRUFBRSwyQkFBMkI7b0JBQ25DLGFBQWEsRUFBRTt3QkFDYixXQUFXLEVBQUUsSUFBSTt3QkFDakIsVUFBVSxFQUFFLFFBQVE7d0JBQ3BCLE9BQU8sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsUUFBUSxJQUFJLGVBQWUsRUFBRTtxQkFDakY7b0JBQ0QsY0FBYyxFQUFFLENBQUMsZUFBZSxDQUFDO29CQUNqQyxPQUFPLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztpQkFDekM7YUFDRixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsOEVBQThFLEVBQUUsQ0FBQyxDQUFDO1lBRXBILElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLGtCQUFrQixDQUFDLHdCQUF3QixFQUFFLHdCQUF3QixDQUFDLENBQUM7WUFDL0YsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLHlCQUF5QixFQUFFLHdCQUF3QixDQUFDLENBQUM7WUFDdEYsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQy9ELElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLHlCQUF5QixFQUFFLHdCQUF3QixFQUFFLEVBQUU7Z0JBQ3pGLFlBQVk7Z0JBQ1osWUFBWTthQUNiLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRDs7V0FFRztRQUNILElBQUksUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzdCLE1BQU0sYUFBYSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksaUJBQWlCLENBQUM7WUFDcEQsSUFBSSxpQkFBUSxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUU7Z0JBQ2hDLGFBQWEsRUFBRSxJQUFJO2dCQUNuQixHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDVixPQUFPLEVBQUUsR0FBRyxFQUFFO3dCQUNaLE1BQU0sT0FBTyxHQUdSLElBQUksQ0FBQyxXQUFXOzZCQUNsQixJQUFJLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7NkJBQ2hELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLENBQUM7d0JBRWhELElBQUksUUFBUSxDQUFDLHNCQUFzQixFQUFFLG9CQUFvQixFQUFFLENBQUM7NEJBQzFELE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsc0JBQXNCLEVBQUUsaUJBQWlCLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQzt3QkFDdkcsQ0FBQzt3QkFFRCxPQUFPLE9BQU8sQ0FBQztvQkFDakIsQ0FBQztvQkFDRCxRQUFRLEVBQUUsR0FBRyxFQUFFO3dCQUNiLE1BQU0sY0FBYyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsQ0FBUSxDQUFDO3dCQUNwRixJQUFJLFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxvQkFBb0IsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDOzRCQUNyRixjQUFjLENBQUMsZUFBZSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0NBQ3hFLE9BQU87b0NBQ0wsR0FBRyxRQUFRO29DQUNYLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJO2lDQUNyRCxDQUFDOzRCQUNKLENBQUMsRUFBRSxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7d0JBQzVDLENBQUM7d0JBQ0QsT0FBTyxjQUFjLENBQUM7b0JBQ3hCLENBQUM7b0JBQ0QsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUseUJBQXlCLENBQUM7aUJBQ2xFLENBQUM7YUFDSCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQ7O1dBRUc7UUFDSCxhQUFhO1FBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUNELElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUM7UUFFN0gsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixTQUFTLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FDaEQsa0JBQVMsQ0FBQyxHQUFHLENBQUMsa0NBQWtDLEVBQUUsTUFBTSxDQUFDLENBQzFELENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsS0FBSyxVQUFVLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxLQUFLLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDbEIsSUFBSSxFQUFFLEtBQUs7WUFDWCxXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUFDLENBQUM7UUFFSCx1QkFBdUI7UUFDdkIsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLGtCQUFrQixFQUFFLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0YsTUFBTSxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQztRQUMxRSxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkMsVUFBVSxDQUFDLHlCQUF5QixHQUFHLE1BQU0sQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDNUIsR0FBRyxFQUFFLFVBQVU7WUFDZixXQUFXLEVBQUUsd0NBQXdDO1lBQ3JELEtBQUssRUFBRTtnQkFDTCxnSEFBZ0g7Z0JBQ2hILEVBQUUsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLHFGQUFxRixRQUFRLENBQUMsQ0FBQyxDQUFDLGVBQWUsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO2dCQUNwTCxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssb0JBQW9CLEVBQUU7Z0JBQ3RDLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsNEJBQTRCLEVBQUU7Z0JBQzVFLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFO2dCQUN6RCxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUU7Z0JBQ3BCLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRTthQUMxQjtTQUNGLENBQUMsQ0FBQztRQUVILDJDQUEyQztRQUMzQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUV0QyxLQUFLO1FBQ0wsSUFBSSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDaEIsSUFBSSxPQUFFLENBQUMsSUFBSSxFQUFFO2dCQUNYLFdBQVcsRUFBRSxRQUFRLENBQUMsb0JBQW9CO2FBQzNDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxtQkFBbUI7UUFDbkIsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsa0JBQWtCLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNoQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUNELElBQUksUUFBUSxDQUFDLFNBQVMsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwRCxJQUFJLHlCQUFXLENBQUMsSUFBSSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFFRCxtQkFBbUI7UUFDbkIsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLGtDQUFlLENBQUMsSUFBSSxFQUFFO2dCQUMvQyxjQUFjLEVBQUUsUUFBUSxDQUFDLGNBQWM7Z0JBQ3ZDLFdBQVc7Z0JBQ1gsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTO2dCQUM3QixHQUFHLFFBQVEsQ0FBQyxjQUFjO2FBQzNCLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBb0IsV0FBVztRQUM3QixPQUFPLEtBQUssQ0FBQyxXQUFvQyxDQUFDO0lBQ3BELENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLDBCQUEwQixDQUFDLFFBQTZCO1FBQzdELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVEOztPQUVHO0lBQ0ssa0JBQWtCO1FBQ3hCLHFCQUFxQjtRQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFO1lBQ2xDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO1lBQzNELEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztTQUNqRSxDQUFDLENBQUM7UUFFSCxpRkFBaUY7UUFDakYsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzVCLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUM3QixDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLEVBQUUsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztnQkFDeEUsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsMEVBQTBFO1FBQzFFLHlFQUF5RTtRQUN6RSw0RUFBNEU7UUFDNUUsbUVBQW1FO1FBQ25FLEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDbEUsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztZQUM1RSxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FDeEIsWUFBWSxFQUNaLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FDOUQsQ0FBQztZQUNGLHdFQUF3RTtZQUN4RSwwRUFBMEU7WUFDMUUscURBQXFEO1lBQ3JELFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLHlCQUF5QixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzNELFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2hFLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDNUIsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1NBQzNFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxhQUFhO1FBQ25CLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDN0MsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHO2FBQ1AsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLHVCQUFjLENBQUMsT0FBTyxDQUFDO2FBQ3BELE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDaEIsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUU7WUFDdkIsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUs7U0FDM0IsQ0FBQyxDQUNMLENBQUM7UUFDRixPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDdEQsQ0FBQztJQUVEOztPQUVHO0lBQ0ksY0FBYztRQUNuQixJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4QyxNQUFNLE9BQU8sR0FBUSxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ2xDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxtQkFBVSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7WUFFdkYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNqRixJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDdkIsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQUUsTUFBTSxFQUFFLG1CQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQy9GLENBQUM7WUFFRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsRUFBRSxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDOztBQWpUSCw0QkFrVEM7QUFNRCxTQUFTLGNBQWMsQ0FBQyxPQUFnQixFQUFFLElBQVk7SUFDcEQsT0FBUSxPQUFPLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFTLEVBQUUsR0FBRyxDQUFDO0FBQ3ZELENBQUM7QUFPRDs7O0dBR0c7QUFDSCxNQUFhLGVBQWdCLFNBQVEsUUFBUTs7SUFDM0MsWUFBWSxPQUErQjtRQUN6QyxLQUFLLENBQUM7WUFDSixVQUFVLEVBQUUsSUFBSTtZQUVoQixtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLGtCQUFrQixFQUFFO2dCQUNsQixnQkFBZ0IsRUFBRSxDQUFDLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsQ0FBQztnQkFDekUsTUFBTSxFQUFFLGNBQWM7YUFDdkI7WUFDRCxHQUFHLE9BQU87WUFDVixhQUFhLEVBQUU7Z0JBQ2IsR0FBRyxPQUFPLENBQUMsYUFBYTtnQkFDeEIsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsZ0JBQWdCLEVBQUUsSUFBSTthQUN2QjtZQUNELDZHQUE2RztZQUM3RywrRkFBK0Y7WUFDL0YsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLG1CQUFtQixJQUFJLE9BQU87U0FDNUQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxlQUFNLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtZQUMxQixnQkFBZ0IsRUFBRTtnQkFDaEIsaUJBQWlCLEVBQUUsZUFBTSxDQUFDLGlCQUFpQixDQUFDLHVCQUF1QixDQUFDLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLENBQUM7YUFDdkc7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOztBQTFCSCwwQ0EyQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoUG9zaXggZnJvbSAnbm9kZTpwYXRoL3Bvc2l4JztcbmltcG9ydCB7IEpzb25GaWxlLCBQcm9qZWN0LCBqYXZhc2NyaXB0LCB0eXBlc2NyaXB0LCBnaXRodWIsIERlcGVuZGVuY3lUeXBlLCBKc29uUGF0Y2ggfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgQ29uc3RyYWludHMgfSBmcm9tICcuL2NvbnN0cmFpbnRzJztcbmltcG9ydCB7IE1vbm9yZXBvT3B0aW9ucyB9IGZyb20gJy4vbW9ub3JlcG8tb3B0aW9ucyc7XG5pbXBvcnQgeyBNb25vcmVwb1JlbGVhc2UgfSBmcm9tICcuL21vbm9yZXBvLXJlbGVhc2UnO1xuaW1wb3J0IHsgTnggfSBmcm9tICcuL254JztcbmltcG9ydCB7IFR5cGVTY3JpcHRXb3Jrc3BhY2UgfSBmcm9tICcuL3R5cGVzY3JpcHQtd29ya3NwYWNlJztcblxuY29uc3QgTU9OT1JFUE9fU1lNID0gU3ltYm9sLmZvcignY2RrbGFicy1wcm9qZW4tcHJvamVjdC10eXBlcy55YXJuLk1vbm9yZXBvJyk7XG5cbi8qKlxuICogQSBtb25vcmVwbyB1c2luZyB5YXJuIHdvcmtzcGFjZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBNb25vcmVwbyBleHRlbmRzIHR5cGVzY3JpcHQuVHlwZVNjcmlwdFByb2plY3Qge1xuICBwdWJsaWMgc3RhdGljIGlzTW9ub3JlcG8oeDogUHJvamVjdCk6IHggaXMgTW9ub3JlcG8ge1xuICAgIHJldHVybiBCb29sZWFuKHggJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIE1PTk9SRVBPX1NZTSBpbiB4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgTW9ub3JlcG8gUmVsZWFzZSBjb21wb25lbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtb25vcmVwb1JlbGVhc2U/OiBNb25vcmVwb1JlbGVhc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgd2hlcmUgdGhlIGFjdHVhbCBjb2RlIGZvciB0aGUgcGFja2FnZSBsaXZlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXBvc2l0b3J5VXJsPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgcG9zdEluc3RhbGxEZXBlbmRlbmNpZXMgPSBuZXcgQXJyYXk8KCkgPT4gc3RyaW5nW10+KCk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHNldHRpbmdzOiBNb25vcmVwb09wdGlvbnMpIHtcbiAgICBzdXBlcih7XG4gICAgICAuLi5zZXR0aW5ncyxcbiAgICAgIHBhY2thZ2VNYW5hZ2VyOiBzZXR0aW5ncy55YXJuQmVycnkgPyBqYXZhc2NyaXB0Lk5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOX0JFUlJZIDogamF2YXNjcmlwdC5Ob2RlUGFja2FnZU1hbmFnZXIuWUFSTl9DTEFTU0lDLFxuICAgICAgeWFybkJlcnJ5T3B0aW9uczogc2V0dGluZ3MueWFybkJlcnJ5ID8ge1xuICAgICAgICAuLi5zZXR0aW5ncy55YXJuQmVycnlPcHRpb25zLFxuICAgICAgICB5YXJuUmNPcHRpb25zOiB7XG4gICAgICAgICAgbm9kZUxpbmtlcjogamF2YXNjcmlwdC5ZYXJuTm9kZUxpbmtlci5OT0RFX01PRFVMRVMsXG4gICAgICAgICAgLi4uc2V0dGluZ3MueWFybkJlcnJ5T3B0aW9ucz8ueWFyblJjT3B0aW9ucyxcbiAgICAgICAgfSxcbiAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICBzYW1wbGVDb2RlOiBmYWxzZSxcbiAgICAgIGplc3Q6IGZhbHNlLFxuICAgICAgZXNsaW50OiBmYWxzZSxcbiAgICAgIHJlbGVhc2U6IGZhbHNlLFxuICAgICAgLy8gVGhlIG1vbm9yZXBvIHJvb3QgaXMgbm90IGEgcmVhbCBjb21waWxhdGlvbiB1bml0OyBpdHMgc2luZ2xlIHRzY29uZmlnXG4gICAgICAvLyBvbmx5IGV4aXN0cyB0byB0eXBlLWNoZWNrIHRoZSBwcm9qZW5yYyBmaWxlcyBhbmQgaG9sZCBwcm9qZWN0XG4gICAgICAvLyByZWZlcmVuY2VzIHRvIHRoZSB3b3Jrc3BhY2VzLiBBIHNlcGFyYXRlIGRldiB0c2NvbmZpZyBpcyBub3QganVzdFxuICAgICAgLy8gcmVkdW5kYW50LCBpdCBhY3RpdmVseSByZXNvbHZlcyB0byBgdGVzdC90c2NvbmZpZy5qc29uYCBpbiBwcm9qZW4gYW5kXG4gICAgICAvLyB3b3VsZCBwb2xsdXRlIHRoYXQgZmlsZS4gRGlzYWJsaW5nIGl0IG1ha2VzIGB0c2NvbmZpZ0RldmAgYWxpYXNcbiAgICAgIC8vIGB0c2NvbmZpZ2AsIGNvbnNvbGlkYXRpbmcgZXZlcnl0aGluZyBvbnRvIHRoZSByb290IGB0c2NvbmZpZy5qc29uYC5cbiAgICAgIGRpc2FibGVUc2NvbmZpZ0RldjogdHJ1ZSxcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBNT05PUkVQT19TWU0sIHsgdmFsdWU6IHRydWUgfSk7XG5cbiAgICB0aGlzLnJlcG9zaXRvcnlVcmwgPSBzZXR0aW5ncy5yZXBvc2l0b3J5O1xuICAgIGNvbnN0IGJ1aWxkV2l0aE54ID0gQm9vbGVhbihzZXR0aW5ncy5ueCAmJiBzZXR0aW5ncy5idWlsZFdpdGhOeCk7XG5cbiAgICAvLyBZYXJuIEJlcnJ5IGRlcGVuZGVuY2llc01ldGEgZm9yIGJ1aWxkYWJsZSBwYWNrYWdlc1xuICAgIGlmIChzZXR0aW5ncy5idWlsZGFibGVQYWNrYWdlcz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnBhY2thZ2UuYWRkRmllbGQoJ2RlcGVuZGVuY2llc01ldGEnLCBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIHNldHRpbmdzLmJ1aWxkYWJsZVBhY2thZ2VzLm1hcCgocGtnKSA9PiBbcGtnLCB7IGJ1aWx0OiB0cnVlIH1dKSxcbiAgICAgICkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByZXR0aWVyIGZvcm1hdHRpbmdcbiAgICAgKi9cbiAgICBpZiAoc2V0dGluZ3MucHJldHRpZXIpIHtcbiAgICAgIHRoaXMuYWRkRGV2RGVwcygnZXNsaW50LWNvbmZpZy1wcmV0dGllcicsICdlc2xpbnQtcGx1Z2luLXByZXR0aWVyJyk7XG4gICAgICBuZXcgSnNvbkZpbGUodGhpcywgJy5lc2xpbnRyYy5qc29uJywge1xuICAgICAgICBhbGxvd0NvbW1lbnRzOiB0cnVlLFxuICAgICAgICBvYmo6IHtcbiAgICAgICAgICBwbHVnaW5zOiBbJ0B0eXBlc2NyaXB0LWVzbGludCcsICdwcmV0dGllciddLFxuICAgICAgICAgIHBhcnNlcjogJ0B0eXBlc2NyaXB0LWVzbGludC9wYXJzZXInLFxuICAgICAgICAgIHBhcnNlck9wdGlvbnM6IHtcbiAgICAgICAgICAgIGVjbWFWZXJzaW9uOiAyMDE4LFxuICAgICAgICAgICAgc291cmNlVHlwZTogJ21vZHVsZScsXG4gICAgICAgICAgICBwcm9qZWN0OiBgLi8keyh0aGlzLnRzY29uZmlnRGV2ID8/IHRoaXMudHNjb25maWcpPy5maWxlTmFtZSA/PyAndHNjb25maWcuanNvbid9YCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlnbm9yZVBhdHRlcm5zOiBbJyEucHJvamVucmMudHMnXSxcbiAgICAgICAgICBleHRlbmRzOiBbJ3BsdWdpbjpwcmV0dGllci9yZWNvbW1lbmRlZCddLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICB0aGlzLnRhc2tzLmFkZFRhc2soJ2ZtdCcsIHsgZXhlYzogJ2VzbGludCAtLWV4dCAudHMgLS1maXggLS1uby1lcnJvci1vbi11bm1hdGNoZWQtcGF0dGVybiBwcm9qZW5yYyAucHJvamVucmMudHMnIH0pO1xuXG4gICAgICB0aGlzLnZzY29kZT8uZXh0ZW5zaW9ucy5hZGRSZWNvbW1lbmRhdGlvbnMoJ2VzYmVucC5wcmV0dGllci12c2NvZGUnLCAnZGJhZXVtZXIudnNjb2RlLWVzbGludCcpO1xuICAgICAgdGhpcy52c2NvZGU/LnNldHRpbmdzLmFkZFNldHRpbmcoJ2VkaXRvci5kZWZhdWx0Rm9ybWF0dGVyJywgJ2VzYmVucC5wcmV0dGllci12c2NvZGUnKTtcbiAgICAgIHRoaXMudnNjb2RlPy5zZXR0aW5ncy5hZGRTZXR0aW5nKCdlc2xpbnQuZm9ybWF0LmVuYWJsZScsIHRydWUpO1xuICAgICAgdGhpcy52c2NvZGU/LnNldHRpbmdzLmFkZFNldHRpbmdzKHsgJ2VkaXRvci5kZWZhdWx0Rm9ybWF0dGVyJzogJ2RiYWV1bWVyLnZzY29kZS1lc2xpbnQnIH0sIFtcbiAgICAgICAgJ2phdmFzY3JpcHQnLFxuICAgICAgICAndHlwZXNjcmlwdCcsXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBWU0NvZGUgV29ya3NwYWNlXG4gICAgICovXG4gICAgaWYgKHNldHRpbmdzLnZzY29kZVdvcmtzcGFjZSkge1xuICAgICAgY29uc3Qgd29ya3NwYWNlRmlsZSA9IGAke3RoaXMubmFtZX0uY29kZS13b3Jrc3BhY2VgO1xuICAgICAgbmV3IEpzb25GaWxlKHRoaXMsIHdvcmtzcGFjZUZpbGUsIHtcbiAgICAgICAgYWxsb3dDb21tZW50czogdHJ1ZSxcbiAgICAgICAgb2JqOiAoKSA9PiAoe1xuICAgICAgICAgIGZvbGRlcnM6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvbGRlcnM6IEFycmF5PHtcbiAgICAgICAgICAgICAgcGF0aDogc3RyaW5nO1xuICAgICAgICAgICAgICBuYW1lPzogc3RyaW5nO1xuICAgICAgICAgICAgfT4gPSB0aGlzLnN1YnByb2plY3RzXG4gICAgICAgICAgICAgIC5zb3J0KChwMSwgcDIpID0+IHAxLm5hbWUubG9jYWxlQ29tcGFyZShwMi5uYW1lKSlcbiAgICAgICAgICAgICAgLm1hcCgocCkgPT4gKHsgcGF0aDogcC53b3Jrc3BhY2VEaXJlY3RvcnkgfSkpO1xuXG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MudnNjb2RlV29ya3NwYWNlT3B0aW9ucz8uaW5jbHVkZVJvb3RXb3Jrc3BhY2UpIHtcbiAgICAgICAgICAgICAgZm9sZGVycy51bnNoaWZ0KHsgcGF0aDogJy4nLCBuYW1lOiBzZXR0aW5ncy52c2NvZGVXb3Jrc3BhY2VPcHRpb25zPy5yb290V29ya3NwYWNlTmFtZSA/PyAnPHJvb3Q+JyB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZvbGRlcnM7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXR0aW5nczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdnNjb2RlU2V0dGluZ3MgPSAoZ2V0T2JqRnJvbUZpbGUodGhpcywgJy52c2NvZGUvc2V0dGluZ3MuanNvbicpID8/IHt9KSBhcyBhbnk7XG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MudnNjb2RlV29ya3NwYWNlT3B0aW9ucz8uaW5jbHVkZVJvb3RXb3Jrc3BhY2UgJiYgdGhpcy5zdWJwcm9qZWN0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdnNjb2RlU2V0dGluZ3NbJ2ZpbGVzLmV4Y2x1ZGUnXSA9IHRoaXMuc3VicHJvamVjdHMucmVkdWNlKChleGNsdWRlcywgcCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAuLi5leGNsdWRlcyxcbiAgICAgICAgICAgICAgICAgIFtwLndvcmtzcGFjZURpcmVjdG9yeS5zcGxpdChwYXRoUG9zaXguc2VwKVswXV06IHRydWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSwgdnNjb2RlU2V0dGluZ3NbJ2ZpbGVzLmV4Y2x1ZGUnXSA/PyB7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdnNjb2RlU2V0dGluZ3M7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleHRlbnNpb25zOiAoKSA9PiBnZXRPYmpGcm9tRmlsZSh0aGlzLCAnLnZzY29kZS9leHRlbnNpb25zLmpzb24nKSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUYXNrc1xuICAgICAqL1xuICAgIC8vIGJ1aWxkIHRhc2tcbiAgICB0aGlzLnRhc2tzLnJlbW92ZVRhc2soJ2J1aWxkJyk7XG4gICAgY29uc3QgZm10VGFzayA9IHRoaXMudGFza3MudHJ5RmluZCgnZm10Jyk7XG4gICAgY29uc3QgYnVpbGRUYXNrID0gdGhpcy50YXNrcy5hZGRUYXNrKCdidWlsZCcpO1xuICAgIGlmICh0aGlzLmRlZmF1bHRUYXNrKSB7XG4gICAgICBidWlsZFRhc2suc3Bhd24odGhpcy5kZWZhdWx0VGFzayk7XG4gICAgfVxuICAgIGlmIChmbXRUYXNrKSB7XG4gICAgICBidWlsZFRhc2suc3Bhd24oZm10VGFzayk7XG4gICAgfVxuICAgIGNvbnN0IHdzUnVuID0gc2V0dGluZ3MueWFybkJlcnJ5ID8gJ3lhcm4gd29ya3NwYWNlcyBmb3JlYWNoIC0tYWxsIC0tZXhjbHVkZSAuIC0tdG9wb2xvZ2ljYWwtZGV2IHJ1bicgOiAneWFybiB3b3Jrc3BhY2VzIHJ1bic7XG5cbiAgICBpZiAoYnVpbGRXaXRoTngpIHtcbiAgICAgIGJ1aWxkVGFzay5leGVjKCdueCBydW4tbWFueSAtdCBidWlsZCcpO1xuICAgICAgdGhpcy5naXRodWI/LnRyeUZpbmRXb3JrZmxvdygnYnVpbGQnKT8uZmlsZT8ucGF0Y2goXG4gICAgICAgIEpzb25QYXRjaC5hZGQoJy9qb2JzL2J1aWxkL2Vudi9OWF9TS0lQX05YX0NBQ0hFJywgJ3RydWUnKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1aWxkVGFzay5leGVjKGAke3dzUnVufSBidWlsZGApO1xuICAgIH1cblxuICAgIC8vIFJ1biBpbiBhbGwgd29ya3NwYWNlcyB0YXNrc1xuICAgIHRoaXMudGFza3MudHJ5RmluZCgnY29tcGlsZScpPy5yZXNldChgJHt3c1J1bn0gY29tcGlsZWApO1xuICAgIHRoaXMudGFza3MudHJ5RmluZCgncGFja2FnZScpPy5yZXNldChgJHt3c1J1bn0gcGFja2FnZWApO1xuICAgIHRoaXMudGFza3MudHJ5RmluZCgndGVzdCcpPy5yZXNldChgJHt3c1J1bn0gdGVzdGApO1xuICAgIHRoaXMuYWRkVGFzaygncnVuJywge1xuICAgICAgZXhlYzogd3NSdW4sXG4gICAgICByZWNlaXZlQXJnczogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIFVwZ3JhZGUgYWxsIHBhY2thZ2VzXG4gICAgY29uc3QgY29vbGRvd24gPSBzZXR0aW5ncy5kZXBzVXBncmFkZU9wdGlvbnM/LmNvb2xkb3duID8/IChzZXR0aW5ncy55YXJuQmVycnkgPyAzIDogdW5kZWZpbmVkKTtcbiAgICBjb25zdCB1cGdyYWRlRW52ID0geyAuLi50aGlzLnVwZ3JhZGVXb3JrZmxvdz8udXBncmFkZVRhc2suZW52VmFycyB8fCB7fSB9O1xuICAgIGlmIChjb29sZG93biAmJiBzZXR0aW5ncy55YXJuQmVycnkpIHtcbiAgICAgIHVwZ3JhZGVFbnYuWUFSTl9OUE1fTUlOSU1BTF9BR0VfR0FURSA9IFN0cmluZyhjb29sZG93biAqIDI0ICogNjApO1xuICAgIH1cbiAgICB0aGlzLnRhc2tzLnJlbW92ZVRhc2soJ3VwZ3JhZGUnKTtcbiAgICB0aGlzLnRhc2tzLmFkZFRhc2soJ3VwZ3JhZGUnLCB7XG4gICAgICBlbnY6IHVwZ3JhZGVFbnYsXG4gICAgICBkZXNjcmlwdGlvbjogJ1VwZ3JhZGUgZGVwZW5kZW5jaWVzIGluIGFsbCB3b3Jrc3BhY2VzJyxcbiAgICAgIHN0ZXBzOiBbXG4gICAgICAgIC8vIEl0IGlzIG5vdCBzYWZlIGFueW1vcmUgdG8gaGF2ZSAnbnBtLWNoZWNrLXVwZGF0ZXMnIGluIGEgWWFybiAxIGRlcGVuZGVuY3kgdHJlZSwgc28gcnVuIGl0IGluIGEgc2VwYXJhdGUgdHJlZS5cbiAgICAgICAgeyBleGVjOiBgJHtzZXR0aW5ncy55YXJuQmVycnkgPyAneWFybiBkbHgnIDogJ25weCd9IG5wbS1jaGVjay11cGRhdGVzQDIwIC0tZGVwPWRldixvcHRpb25hbCxwZWVyLHByb2QsYnVuZGxlIC0tdXBncmFkZSAtLXRhcmdldD1taW5vciR7Y29vbGRvd24gPyBgIC0tY29vbGRvd249JHtjb29sZG93bn1gIDogJyd9YCB9LFxuICAgICAgICB7IGV4ZWM6IGAke3dzUnVufSBjaGVjay1mb3ItdXBkYXRlc2AgfSxcbiAgICAgICAgeyBleGVjOiBzZXR0aW5ncy55YXJuQmVycnkgPyAneWFybiBpbnN0YWxsJyA6ICd5YXJuIGluc3RhbGwgLS1jaGVjay1maWxlcycgfSxcbiAgICAgICAgeyBleGVjOiBzZXR0aW5ncy55YXJuQmVycnkgPyAneWFybiB1cCcgOiAneWFybiB1cGdyYWRlJyB9LFxuICAgICAgICB7IHNwYXduOiAnZGVmYXVsdCcgfSxcbiAgICAgICAgeyBzcGF3bjogJ3Bvc3QtdXBncmFkZScgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyBDbGVhbiB1cCB0YXNrcyBub3QgcmVxdWlyZWQgYXQgdG9wLWxldmVsXG4gICAgdGhpcy50YXNrcy5yZW1vdmVUYXNrKCdlamVjdCcpO1xuICAgIHRoaXMudGFza3MucmVtb3ZlVGFzaygnd2F0Y2gnKTtcbiAgICB0aGlzLnRhc2tzLnJlbW92ZVRhc2soJ3ByZS1jb21waWxlJyk7XG4gICAgdGhpcy50YXNrcy5yZW1vdmVUYXNrKCdwb3N0LWNvbXBpbGUnKTtcblxuICAgIC8vIE54XG4gICAgaWYgKHNldHRpbmdzLm54KSB7XG4gICAgICBuZXcgTngodGhpcywge1xuICAgICAgICBkZWZhdWx0QmFzZTogc2V0dGluZ3MuZGVmYXVsdFJlbGVhc2VCcmFuY2gsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBZYXJuIENvbnN0cmFpbnRzXG4gICAgY29uc3QgY29uc2lzdGVudFZlcnNpb25zID0gWy4uLihzZXR0aW5ncy5jb25zaXN0ZW50VmVyc2lvbnMgPz8gW10pXTtcbiAgICBpZiAoc2V0dGluZ3MubngpIHtcbiAgICAgIGNvbnNpc3RlbnRWZXJzaW9ucy5wdXNoKCdueCcpO1xuICAgIH1cbiAgICBpZiAoc2V0dGluZ3MueWFybkJlcnJ5ICYmIGNvbnNpc3RlbnRWZXJzaW9ucy5sZW5ndGgpIHtcbiAgICAgIG5ldyBDb25zdHJhaW50cyh0aGlzLCB7IGNvbnNpc3RlbnRWZXJzaW9ucyB9KTtcbiAgICB9XG5cbiAgICAvLyBSZWxlYXNlIFdvcmtmbG93XG4gICAgaWYgKHNldHRpbmdzLnJlbGVhc2UpIHtcbiAgICAgIHRoaXMubW9ub3JlcG9SZWxlYXNlID0gbmV3IE1vbm9yZXBvUmVsZWFzZSh0aGlzLCB7XG4gICAgICAgIHdvcmtmbG93UnVuc09uOiBzZXR0aW5ncy53b3JrZmxvd1J1bnNPbixcbiAgICAgICAgYnVpbGRXaXRoTngsXG4gICAgICAgIHlhcm5CZXJyeTogc2V0dGluZ3MueWFybkJlcnJ5LFxuICAgICAgICAuLi5zZXR0aW5ncy5yZWxlYXNlT3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgc3VicHJvamVjdHMoKTogVHlwZVNjcmlwdFdvcmtzcGFjZVtdIHtcbiAgICByZXR1cm4gc3VwZXIuc3VicHJvamVjdHMgYXMgVHlwZVNjcmlwdFdvcmtzcGFjZVtdO1xuICB9XG5cbiAgcHVibGljIHN5bnRoKCkge1xuICAgIHRoaXMuZmluYWxFc2NhcGVIYXRjaGVzKCk7XG4gICAgc3VwZXIuc3ludGgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgYSBzdWIgcHJvamVjdCB0byByZXF1ZXN0IGluc3RhbGxhdGlvbiBvZiBkZXBlbmRlbmN5IGF0IHRoZSBNb25vcmVwbyByb290XG4gICAqIFRoZXkgbXVzdCBwcm92aWRlIGEgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBhZnRlciBkZXBlbmRlbmNpZXMgaGF2ZSBiZWVuIGluc3RhbGxlZFxuICAgKiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgdGhlIGluc3RhbGwgY29tbWFuZCBpcyBydW4gZm9yIGEgc2Vjb25kIHRpbWUgYWZ0ZXIgYWxsIHN1YiBwcm9qZWN0IHJlcXVlc3RzIGhhdmUgcnVuLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8gcmVzb2x2ZSBkZXBlbmRlbmN5IHZlcnNpb25zIGZyb20gYCpgIHRvIGEgY29uY3JldGUgdmVyc2lvbiBjb25zdHJhaW50LlxuICAgKi9cbiAgcHVibGljIHJlcXVlc3RJbnN0YWxsRGVwZW5kZW5jaWVzKHJlc29sdmVyOiBJRGVwZW5kZW5jeVJlc29sdmVyKSB7XG4gICAgdGhpcy5wb3N0SW5zdGFsbERlcGVuZGVuY2llcy5wdXNoKHJlc29sdmVyLnJlc29sdmVEZXBzQW5kV3JpdGVQYWNrYWdlSnNvbik7XG4gIH1cblxuICAvKipcbiAgICogQ29kZSB0aGF0IG5lZWRzIHRvIHJ1biBqdXN0IGJlZm9yZSBzeW50aCwgYnV0IGFmdGVyIGFsbCBvdGhlciBjb2RlXG4gICAqL1xuICBwcml2YXRlIGZpbmFsRXNjYXBlSGF0Y2hlcygpIHtcbiAgICAvLyBHZXQgdGhlIE9iamVjdEZpbGVcbiAgICB0aGlzLnBhY2thZ2UuYWRkRmllbGQoJ3ByaXZhdGUnLCB0cnVlKTtcbiAgICB0aGlzLnBhY2thZ2UuYWRkRmllbGQoJ3dvcmtzcGFjZXMnLCB7XG4gICAgICBwYWNrYWdlczogdGhpcy5zdWJwcm9qZWN0cy5tYXAoKHApID0+IHAud29ya3NwYWNlRGlyZWN0b3J5KSxcbiAgICAgIC4uLighdGhpcy5zZXR0aW5ncy55YXJuQmVycnkgPyB0aGlzLnJlbmRlck5vSG9pc3QoKSA6IHVuZGVmaW5lZCksXG4gICAgfSk7XG5cbiAgICAvLyBBdXRvLXNldCBob2lzdGluZ0xpbWl0cyBmb3Igd29ya3NwYWNlcyB3aXRoIGJ1bmRsZWQgZGVwcyB3aGVuIHVzaW5nIFlhcm4gQmVycnlcbiAgICBpZiAodGhpcy5zZXR0aW5ncy55YXJuQmVycnkpIHtcbiAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLnN1YnByb2plY3RzKSB7XG4gICAgICAgIGlmIChwLmJ1bmRsZWREZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwLnBhY2thZ2UuYWRkRmllbGQoJ2luc3RhbGxDb25maWcnLCB7IGhvaXN0aW5nTGltaXRzOiAnd29ya3NwYWNlcycgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGUgcm9vdCB0c2NvbmZpZyBpcyBvbmx5IHRoZXJlIHRvIHR5cGUtY2hlY2sgdGhlIHByb2plbnJjIGZpbGVzIGFuZCB0b1xuICAgIC8vIGhvbGQgcHJvamVjdCByZWZlcmVuY2VzIHRvIHRoZSB3b3Jrc3BhY2VzLiBCZWNhdXNlIHRoZSBkZXYgdHNjb25maWcgaXNcbiAgICAvLyBkaXNhYmxlZCwgYHRzY29uZmlnRGV2YCBhbGlhc2VzIGB0c2NvbmZpZ2AsIHNvIHdlIG9ubHkgaGF2ZSBhIHNpbmdsZSBmaWxlXG4gICAgLy8gdG8gY29uZmlndXJlIGhlcmUgKHRoZSBgU2V0YCBkZWR1cGVzIGluIGNhc2UgdGhhdCBldmVyIGNoYW5nZXMpLlxuICAgIGZvciAoY29uc3QgdHNjb25maWcgb2YgbmV3IFNldChbdGhpcy50c2NvbmZpZywgdGhpcy50c2NvbmZpZ0Rldl0pKSB7XG4gICAgICB0c2NvbmZpZz8uZmlsZS5hZGRPdmVycmlkZSgnaW5jbHVkZScsIFsnLnByb2plbnJjLnRzJywgJ3Byb2plbnJjLyoqLyoudHMnXSk7XG4gICAgICB0c2NvbmZpZz8uZmlsZS5hZGRPdmVycmlkZShcbiAgICAgICAgJ3JlZmVyZW5jZXMnLFxuICAgICAgICB0aGlzLnN1YnByb2plY3RzLm1hcCgocCkgPT4gKHsgcGF0aDogcC53b3Jrc3BhY2VEaXJlY3RvcnkgfSkpLFxuICAgICAgKTtcbiAgICAgIC8vIFRoZSByb290IGlzIG5vdCBhIHJlYWwgY29tcGlsYXRpb24gdW5pdDogaXQgb25seSB0eXBlLWNoZWNrcyBwcm9qZW5yY1xuICAgICAgLy8gZmlsZXMgYW5kIGhvbGRzIHByb2plY3QgcmVmZXJlbmNlcy4gRW1pdCBub3RoaW5nIGFuZCByb290IGV2ZXJ5dGhpbmcgYXRcbiAgICAgIC8vIHRoZSByZXBvIHJvb3Qgc28gdGhlIHJlZmVyZW5jZXMgcmVzb2x2ZSBjb3JyZWN0bHkuXG4gICAgICB0c2NvbmZpZz8uZmlsZS5hZGRPdmVycmlkZSgnY29tcGlsZXJPcHRpb25zLnJvb3REaXInLCAnLicpO1xuICAgICAgdHNjb25maWc/LmZpbGUuYWRkT3ZlcnJpZGUoJ2NvbXBpbGVyT3B0aW9ucy5vdXREaXInLCB1bmRlZmluZWQpO1xuICAgICAgdHNjb25maWc/LmZpbGUuYWRkT3ZlcnJpZGUoJ2NvbXBpbGVyT3B0aW9ucy5ub0VtaXQnLCB0cnVlKTtcbiAgICB9XG5cbiAgICB0aGlzLnBhY2thZ2UuYWRkRmllbGQoJ2plc3QnLCB7XG4gICAgICBwcm9qZWN0czogdGhpcy5zdWJwcm9qZWN0cy5tYXAoKHApID0+IGA8cm9vdERpcj4vJHtwLndvcmtzcGFjZURpcmVjdG9yeX1gKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlICdub2hvaXN0JyBkaXJlY3RpdmVcbiAgICpcbiAgICogQnVuZGxlZCBkZXBlbmRlbmNpZXMgbXVzdCBiZSBub2hvaXN0J2VkLCBvdGhlcndpc2UgTlBNIHNpbGVudGx5IHdvbid0IGJ1bmRsZSB0aGVtLlxuICAgKlxuICAgKiBSZW5kZXJzIGFuIG9iamVjdCB0aGF0IHNob3VsZCBiZSBtaXhlZCBpbnRvIHRoZSBgd29ya3NwYWNlc2Agb2JqZWN0LlxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJOb0hvaXN0KCk6IGFueSB7XG4gICAgY29uc3Qgbm9ob2lzdCA9IHRoaXMuc3VicHJvamVjdHMuZmxhdE1hcCgocCkgPT5cbiAgICAgIHAuZGVwcy5hbGxcbiAgICAgICAgLmZpbHRlcigoZGVwKSA9PiBkZXAudHlwZSA9PT0gRGVwZW5kZW5jeVR5cGUuQlVORExFRClcbiAgICAgICAgLmZsYXRNYXAoKGRlcCkgPT4gW1xuICAgICAgICAgIGAke3AubmFtZX0vJHtkZXAubmFtZX1gLFxuICAgICAgICAgIGAke3AubmFtZX0vJHtkZXAubmFtZX0vKipgLFxuICAgICAgICBdKSxcbiAgICApO1xuICAgIHJldHVybiBub2hvaXN0Lmxlbmd0aCA+IDAgPyB7IG5vaG9pc3QgfSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBIb29rcyBpbnRvIHRoZSBpbnN0YWxsIGRlcGVuZGVuY2llcyBjeWNsZVxuICAgKi9cbiAgcHVibGljIHBvc3RTeW50aGVzaXplKCkge1xuICAgIGlmICh0aGlzLnBvc3RJbnN0YWxsRGVwZW5kZW5jaWVzLmxlbmd0aCkge1xuICAgICAgY29uc3Qgbm9kZVBrZzogYW55ID0gdGhpcy5wYWNrYWdlO1xuICAgICAgbm9kZVBrZy5pbnN0YWxsRGVwZW5kZW5jaWVzKHsgcmVhc29uOiBqYXZhc2NyaXB0Lkluc3RhbGxSZWFzb24uUEFDS0FHRV9KU09OX0NIQU5HRUQgfSk7XG5cbiAgICAgIGNvbnN0IHJlc29sdXRpb25zID0gdGhpcy5wb3N0SW5zdGFsbERlcGVuZGVuY2llcy5mbGF0TWFwKChyZXF1ZXN0KSA9PiByZXF1ZXN0KCkpO1xuICAgICAgaWYgKHJlc29sdXRpb25zLmxlbmd0aCkge1xuICAgICAgICBub2RlUGtnLmluc3RhbGxEZXBlbmRlbmNpZXMoeyByZWFzb246IGphdmFzY3JpcHQuSW5zdGFsbFJlYXNvbi5ERVBTX1JFU09MVkVELCByZXNvbHV0aW9ucyB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3N0SW5zdGFsbERlcGVuZGVuY2llcyA9IFtdO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElEZXBlbmRlbmN5UmVzb2x2ZXIge1xuICByZXNvbHZlRGVwc0FuZFdyaXRlUGFja2FnZUpzb24oKTogc3RyaW5nW107XG59XG5cbmZ1bmN0aW9uIGdldE9iakZyb21GaWxlKHByb2plY3Q6IFByb2plY3QsIGZpbGU6IHN0cmluZyk6IG9iamVjdCB7XG4gIHJldHVybiAocHJvamVjdC50cnlGaW5kT2JqZWN0RmlsZShmaWxlKSBhcyBhbnkpPy5vYmo7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgQ2RrTGFic01vbm9yZXBvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrTGFic01vbm9yZXBvT3B0aW9ucyBleHRlbmRzIE1vbm9yZXBvT3B0aW9ucyB7fVxuXG4vKipcbiAqIE9waW5pb25hdGVkIGltcGxlbWVudGF0aW9uIG9mIHlhcm4uTW9ub3JlcG9cbiAqIEBwamlkIGNka2xhYnMteWFybi1tb25vcmVwb1xuICovXG5leHBvcnQgY2xhc3MgQ2RrTGFic01vbm9yZXBvIGV4dGVuZHMgTW9ub3JlcG8ge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBDZGtMYWJzTW9ub3JlcG9PcHRpb25zKSB7XG4gICAgc3VwZXIoe1xuICAgICAgcHJvamVucmNUczogdHJ1ZSxcblxuICAgICAgYXV0b0FwcHJvdmVVcGdyYWRlczogdHJ1ZSxcbiAgICAgIGF1dG9BcHByb3ZlT3B0aW9uczoge1xuICAgICAgICBhbGxvd2VkVXNlcm5hbWVzOiBbJ2dpdGh1Yi1ib3QnLCAnY2RrbGFicy1hdXRvbWF0aW9uJywgJ2RlcGVuZGFib3RbYm90XSddLFxuICAgICAgICBzZWNyZXQ6ICdHSVRIVUJfVE9LRU4nLFxuICAgICAgfSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBnaXRodWJPcHRpb25zOiB7XG4gICAgICAgIC4uLm9wdGlvbnMuZ2l0aHViT3B0aW9ucyxcbiAgICAgICAgbWVyZ2lmeTogZmFsc2UsXG4gICAgICAgIGRlcGVuZGVuY3lSZXZpZXc6IHRydWUsXG4gICAgICB9LFxuICAgICAgLy8gRGV2aWF0aW9uIGZyb20gdXBzdHJlYW0gcHJvamVuOiB1cHN0cmVhbSBwcm9qZW4gZGVmYXVsdHMgdG8gbWluTm9kZVZlcnNpb24sIGJ1dCB3ZSBoYXZlIHRvbyBtYW55IHdvcmtmbG93c1xuICAgICAgLy8gdGhhdCB1c2UgdG9vbHMgdGhhdCB3YW50IGEgcmVjZW50IE5vZGUgdmVyc2lvbiwgc28gZGVmYXVsdCB0byBhIHJlYXNvbmFibGUgZmxvYXRpbmcgdmVyc2lvbi5cbiAgICAgIHdvcmtmbG93Tm9kZVZlcnNpb246IG9wdGlvbnMud29ya2Zsb3dOb2RlVmVyc2lvbiA/PyAnbHRzLyonLFxuICAgIH0pO1xuXG4gICAgbmV3IGdpdGh1Yi5NZXJnZVF1ZXVlKHRoaXMsIHtcbiAgICAgIGF1dG9RdWV1ZU9wdGlvbnM6IHtcbiAgICAgICAgcHJvamVuQ3JlZGVudGlhbHM6IGdpdGh1Yi5HaXRodWJDcmVkZW50aWFscy5mcm9tUGVyc29uYWxBY2Nlc3NUb2tlbih7IHNlY3JldDogJ1BST0pFTl9HSVRIVUJfVE9LRU4nIH0pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIl19
355
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ub3JlcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMveWFybi9tb25vcmVwby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkRBQTZDO0FBQzdDLG1DQUFzRztBQUN0RywrQ0FBNEM7QUFFNUMseURBQXFEO0FBQ3JELDZCQUEwQjtBQUUxQixvRUFBK0Q7QUFFL0QsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO0FBRTlFOztHQUVHO0FBQ0gsTUFBYSxRQUFTLFNBQVEsbUJBQVUsQ0FBQyxpQkFBaUI7SUFpQjVCOztJQWhCckIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFVO1FBQ2pDLE9BQU8sT0FBTyxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLElBQUksWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRDs7T0FFRztJQUNhLGVBQWUsQ0FBbUI7SUFFbEQ7O09BRUc7SUFDYSxhQUFhLENBQVU7SUFFL0IsdUJBQXVCLEdBQUcsSUFBSSxLQUFLLEVBQWtCLENBQUM7SUFFOUQsWUFBNEIsUUFBeUI7UUFDbkQsS0FBSyxDQUFDO1lBQ0osR0FBRyxRQUFRO1lBQ1gsY0FBYyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLG1CQUFVLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxtQkFBVSxDQUFDLGtCQUFrQixDQUFDLFlBQVk7WUFDMUgsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLEdBQUcsUUFBUSxDQUFDLGdCQUFnQjtnQkFDNUIsYUFBYSxFQUFFO29CQUNiLFVBQVUsRUFBRSxtQkFBVSxDQUFDLGNBQWMsQ0FBQyxZQUFZO29CQUNsRCxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSxhQUFh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LE1BQU0sRUFBRSxjQUFjO2FBQ3ZCO1lBQ0QsR0FBRyxPQUFPO1lBQ1YsYUFBYSxFQUFFO2dCQUNiLEdBQUcsT0FBTyxDQUFDLGFBQWE7Z0JBQ3hCLE9BQU8sRUFBRSxLQUFLO2dCQUNkLGdCQUFnQixFQUFFLElBQUk7YUFDdkI7WUFDRCw2R0FBNkc7WUFDN0csK0ZBQStGO1lBQy9GLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxPQUFPO1NBQzVELENBQUMsQ0FBQztRQUVILElBQUksZUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDMUIsZ0JBQWdCLEVBQUU7Z0JBQ2hCLGlCQUFpQixFQUFFLGVBQU0sQ0FBQyxpQkFBaUIsQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxDQUFDO2FBQ3ZHO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUExQkgsMENBMkJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aFBvc2l4IGZyb20gJ25vZGU6cGF0aC9wb3NpeCc7XG5pbXBvcnQgeyBKc29uRmlsZSwgUHJvamVjdCwgamF2YXNjcmlwdCwgdHlwZXNjcmlwdCwgZ2l0aHViLCBEZXBlbmRlbmN5VHlwZSwgSnNvblBhdGNoIH0gZnJvbSAncHJvamVuJztcbmltcG9ydCB7IENvbnN0cmFpbnRzIH0gZnJvbSAnLi9jb25zdHJhaW50cyc7XG5pbXBvcnQgeyBNb25vcmVwb09wdGlvbnMgfSBmcm9tICcuL21vbm9yZXBvLW9wdGlvbnMnO1xuaW1wb3J0IHsgTW9ub3JlcG9SZWxlYXNlIH0gZnJvbSAnLi9tb25vcmVwby1yZWxlYXNlJztcbmltcG9ydCB7IE54IH0gZnJvbSAnLi9ueCc7XG5pbXBvcnQgeyBUeXBlU2NyaXB0V29ya3NwYWNlIH0gZnJvbSAnLi90eXBlc2NyaXB0LXdvcmtzcGFjZSc7XG5pbXBvcnQgeyBDaGVja0doYUV4cHJlc3Npb25zIH0gZnJvbSAnLi4vY2hlY2stZ2hhLWV4cHJlc3Npb25zJztcblxuY29uc3QgTU9OT1JFUE9fU1lNID0gU3ltYm9sLmZvcignY2RrbGFicy1wcm9qZW4tcHJvamVjdC10eXBlcy55YXJuLk1vbm9yZXBvJyk7XG5cbi8qKlxuICogQSBtb25vcmVwbyB1c2luZyB5YXJuIHdvcmtzcGFjZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBNb25vcmVwbyBleHRlbmRzIHR5cGVzY3JpcHQuVHlwZVNjcmlwdFByb2plY3Qge1xuICBwdWJsaWMgc3RhdGljIGlzTW9ub3JlcG8oeDogUHJvamVjdCk6IHggaXMgTW9ub3JlcG8ge1xuICAgIHJldHVybiBCb29sZWFuKHggJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIE1PTk9SRVBPX1NZTSBpbiB4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgTW9ub3JlcG8gUmVsZWFzZSBjb21wb25lbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtb25vcmVwb1JlbGVhc2U/OiBNb25vcmVwb1JlbGVhc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgd2hlcmUgdGhlIGFjdHVhbCBjb2RlIGZvciB0aGUgcGFja2FnZSBsaXZlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXBvc2l0b3J5VXJsPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgcG9zdEluc3RhbGxEZXBlbmRlbmNpZXMgPSBuZXcgQXJyYXk8KCkgPT4gc3RyaW5nW10+KCk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHNldHRpbmdzOiBNb25vcmVwb09wdGlvbnMpIHtcbiAgICBzdXBlcih7XG4gICAgICAuLi5zZXR0aW5ncyxcbiAgICAgIHBhY2thZ2VNYW5hZ2VyOiBzZXR0aW5ncy55YXJuQmVycnkgPyBqYXZhc2NyaXB0Lk5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOX0JFUlJZIDogamF2YXNjcmlwdC5Ob2RlUGFja2FnZU1hbmFnZXIuWUFSTl9DTEFTU0lDLFxuICAgICAgeWFybkJlcnJ5T3B0aW9uczogc2V0dGluZ3MueWFybkJlcnJ5ID8ge1xuICAgICAgICAuLi5zZXR0aW5ncy55YXJuQmVycnlPcHRpb25zLFxuICAgICAgICB5YXJuUmNPcHRpb25zOiB7XG4gICAgICAgICAgbm9kZUxpbmtlcjogamF2YXNjcmlwdC5ZYXJuTm9kZUxpbmtlci5OT0RFX01PRFVMRVMsXG4gICAgICAgICAgLi4uc2V0dGluZ3MueWFybkJlcnJ5T3B0aW9ucz8ueWFyblJjT3B0aW9ucyxcbiAgICAgICAgfSxcbiAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICBzYW1wbGVDb2RlOiBmYWxzZSxcbiAgICAgIGplc3Q6IGZhbHNlLFxuICAgICAgZXNsaW50OiBmYWxzZSxcbiAgICAgIHJlbGVhc2U6IGZhbHNlLFxuICAgICAgLy8gVGhlIG1vbm9yZXBvIHJvb3QgaXMgbm90IGEgcmVhbCBjb21waWxhdGlvbiB1bml0OyBpdHMgc2luZ2xlIHRzY29uZmlnXG4gICAgICAvLyBvbmx5IGV4aXN0cyB0byB0eXBlLWNoZWNrIHRoZSBwcm9qZW5yYyBmaWxlcyBhbmQgaG9sZCBwcm9qZWN0XG4gICAgICAvLyByZWZlcmVuY2VzIHRvIHRoZSB3b3Jrc3BhY2VzLiBBIHNlcGFyYXRlIGRldiB0c2NvbmZpZyBpcyBub3QganVzdFxuICAgICAgLy8gcmVkdW5kYW50LCBpdCBhY3RpdmVseSByZXNvbHZlcyB0byBgdGVzdC90c2NvbmZpZy5qc29uYCBpbiBwcm9qZW4gYW5kXG4gICAgICAvLyB3b3VsZCBwb2xsdXRlIHRoYXQgZmlsZS4gRGlzYWJsaW5nIGl0IG1ha2VzIGB0c2NvbmZpZ0RldmAgYWxpYXNcbiAgICAgIC8vIGB0c2NvbmZpZ2AsIGNvbnNvbGlkYXRpbmcgZXZlcnl0aGluZyBvbnRvIHRoZSByb290IGB0c2NvbmZpZy5qc29uYC5cbiAgICAgIGRpc2FibGVUc2NvbmZpZ0RldjogdHJ1ZSxcbiAgICB9KTtcblxuICAgIGlmIChzZXR0aW5ncy5jaGVja0doYUV4cHJlc3Npb25zID8/IHRydWUpIHtcbiAgICAgIG5ldyBDaGVja0doYUV4cHJlc3Npb25zKHRoaXMpO1xuICAgIH1cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBNT05PUkVQT19TWU0sIHsgdmFsdWU6IHRydWUgfSk7XG5cbiAgICB0aGlzLnJlcG9zaXRvcnlVcmwgPSBzZXR0aW5ncy5yZXBvc2l0b3J5O1xuICAgIGNvbnN0IGJ1aWxkV2l0aE54ID0gQm9vbGVhbihzZXR0aW5ncy5ueCAmJiBzZXR0aW5ncy5idWlsZFdpdGhOeCk7XG5cbiAgICAvLyBZYXJuIEJlcnJ5IGRlcGVuZGVuY2llc01ldGEgZm9yIGJ1aWxkYWJsZSBwYWNrYWdlc1xuICAgIGlmIChzZXR0aW5ncy5idWlsZGFibGVQYWNrYWdlcz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLnBhY2thZ2UuYWRkRmllbGQoJ2RlcGVuZGVuY2llc01ldGEnLCBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIHNldHRpbmdzLmJ1aWxkYWJsZVBhY2thZ2VzLm1hcCgocGtnKSA9PiBbcGtnLCB7IGJ1aWx0OiB0cnVlIH1dKSxcbiAgICAgICkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByZXR0aWVyIGZvcm1hdHRpbmdcbiAgICAgKi9cbiAgICBpZiAoc2V0dGluZ3MucHJldHRpZXIpIHtcbiAgICAgIHRoaXMuYWRkRGV2RGVwcygnZXNsaW50LWNvbmZpZy1wcmV0dGllcicsICdlc2xpbnQtcGx1Z2luLXByZXR0aWVyJyk7XG4gICAgICBuZXcgSnNvbkZpbGUodGhpcywgJy5lc2xpbnRyYy5qc29uJywge1xuICAgICAgICBhbGxvd0NvbW1lbnRzOiB0cnVlLFxuICAgICAgICBvYmo6IHtcbiAgICAgICAgICBwbHVnaW5zOiBbJ0B0eXBlc2NyaXB0LWVzbGludCcsICdwcmV0dGllciddLFxuICAgICAgICAgIHBhcnNlcjogJ0B0eXBlc2NyaXB0LWVzbGludC9wYXJzZXInLFxuICAgICAgICAgIHBhcnNlck9wdGlvbnM6IHtcbiAgICAgICAgICAgIGVjbWFWZXJzaW9uOiAyMDE4LFxuICAgICAgICAgICAgc291cmNlVHlwZTogJ21vZHVsZScsXG4gICAgICAgICAgICBwcm9qZWN0OiBgLi8keyh0aGlzLnRzY29uZmlnRGV2ID8/IHRoaXMudHNjb25maWcpPy5maWxlTmFtZSA/PyAndHNjb25maWcuanNvbid9YCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGlnbm9yZVBhdHRlcm5zOiBbJyEucHJvamVucmMudHMnXSxcbiAgICAgICAgICBleHRlbmRzOiBbJ3BsdWdpbjpwcmV0dGllci9yZWNvbW1lbmRlZCddLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICB0aGlzLnRhc2tzLmFkZFRhc2soJ2ZtdCcsIHsgZXhlYzogJ2VzbGludCAtLWV4dCAudHMgLS1maXggLS1uby1lcnJvci1vbi11bm1hdGNoZWQtcGF0dGVybiBwcm9qZW5yYyAucHJvamVucmMudHMnIH0pO1xuXG4gICAgICB0aGlzLnZzY29kZT8uZXh0ZW5zaW9ucy5hZGRSZWNvbW1lbmRhdGlvbnMoJ2VzYmVucC5wcmV0dGllci12c2NvZGUnLCAnZGJhZXVtZXIudnNjb2RlLWVzbGludCcpO1xuICAgICAgdGhpcy52c2NvZGU/LnNldHRpbmdzLmFkZFNldHRpbmcoJ2VkaXRvci5kZWZhdWx0Rm9ybWF0dGVyJywgJ2VzYmVucC5wcmV0dGllci12c2NvZGUnKTtcbiAgICAgIHRoaXMudnNjb2RlPy5zZXR0aW5ncy5hZGRTZXR0aW5nKCdlc2xpbnQuZm9ybWF0LmVuYWJsZScsIHRydWUpO1xuICAgICAgdGhpcy52c2NvZGU/LnNldHRpbmdzLmFkZFNldHRpbmdzKHsgJ2VkaXRvci5kZWZhdWx0Rm9ybWF0dGVyJzogJ2RiYWV1bWVyLnZzY29kZS1lc2xpbnQnIH0sIFtcbiAgICAgICAgJ2phdmFzY3JpcHQnLFxuICAgICAgICAndHlwZXNjcmlwdCcsXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBWU0NvZGUgV29ya3NwYWNlXG4gICAgICovXG4gICAgaWYgKHNldHRpbmdzLnZzY29kZVdvcmtzcGFjZSkge1xuICAgICAgY29uc3Qgd29ya3NwYWNlRmlsZSA9IGAke3RoaXMubmFtZX0uY29kZS13b3Jrc3BhY2VgO1xuICAgICAgbmV3IEpzb25GaWxlKHRoaXMsIHdvcmtzcGFjZUZpbGUsIHtcbiAgICAgICAgYWxsb3dDb21tZW50czogdHJ1ZSxcbiAgICAgICAgb2JqOiAoKSA9PiAoe1xuICAgICAgICAgIGZvbGRlcnM6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvbGRlcnM6IEFycmF5PHtcbiAgICAgICAgICAgICAgcGF0aDogc3RyaW5nO1xuICAgICAgICAgICAgICBuYW1lPzogc3RyaW5nO1xuICAgICAgICAgICAgfT4gPSB0aGlzLnN1YnByb2plY3RzXG4gICAgICAgICAgICAgIC5zb3J0KChwMSwgcDIpID0+IHAxLm5hbWUubG9jYWxlQ29tcGFyZShwMi5uYW1lKSlcbiAgICAgICAgICAgICAgLm1hcCgocCkgPT4gKHsgcGF0aDogcC53b3Jrc3BhY2VEaXJlY3RvcnkgfSkpO1xuXG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MudnNjb2RlV29ya3NwYWNlT3B0aW9ucz8uaW5jbHVkZVJvb3RXb3Jrc3BhY2UpIHtcbiAgICAgICAgICAgICAgZm9sZGVycy51bnNoaWZ0KHsgcGF0aDogJy4nLCBuYW1lOiBzZXR0aW5ncy52c2NvZGVXb3Jrc3BhY2VPcHRpb25zPy5yb290V29ya3NwYWNlTmFtZSA/PyAnPHJvb3Q+JyB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZvbGRlcnM7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZXR0aW5nczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdnNjb2RlU2V0dGluZ3MgPSAoZ2V0T2JqRnJvbUZpbGUodGhpcywgJy52c2NvZGUvc2V0dGluZ3MuanNvbicpID8/IHt9KSBhcyBhbnk7XG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MudnNjb2RlV29ya3NwYWNlT3B0aW9ucz8uaW5jbHVkZVJvb3RXb3Jrc3BhY2UgJiYgdGhpcy5zdWJwcm9qZWN0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdnNjb2RlU2V0dGluZ3NbJ2ZpbGVzLmV4Y2x1ZGUnXSA9IHRoaXMuc3VicHJvamVjdHMucmVkdWNlKChleGNsdWRlcywgcCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAuLi5leGNsdWRlcyxcbiAgICAgICAgICAgICAgICAgIFtwLndvcmtzcGFjZURpcmVjdG9yeS5zcGxpdChwYXRoUG9zaXguc2VwKVswXV06IHRydWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSwgdnNjb2RlU2V0dGluZ3NbJ2ZpbGVzLmV4Y2x1ZGUnXSA/PyB7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdnNjb2RlU2V0dGluZ3M7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBleHRlbnNpb25zOiAoKSA9PiBnZXRPYmpGcm9tRmlsZSh0aGlzLCAnLnZzY29kZS9leHRlbnNpb25zLmpzb24nKSxcbiAgICAgICAgfSksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUYXNrc1xuICAgICAqL1xuICAgIC8vIGJ1aWxkIHRhc2tcbiAgICB0aGlzLnRhc2tzLnJlbW92ZVRhc2soJ2J1aWxkJyk7XG4gICAgY29uc3QgZm10VGFzayA9IHRoaXMudGFza3MudHJ5RmluZCgnZm10Jyk7XG4gICAgY29uc3QgYnVpbGRUYXNrID0gdGhpcy50YXNrcy5hZGRUYXNrKCdidWlsZCcpO1xuICAgIGlmICh0aGlzLmRlZmF1bHRUYXNrKSB7XG4gICAgICBidWlsZFRhc2suc3Bhd24odGhpcy5kZWZhdWx0VGFzayk7XG4gICAgfVxuICAgIGlmIChmbXRUYXNrKSB7XG4gICAgICBidWlsZFRhc2suc3Bhd24oZm10VGFzayk7XG4gICAgfVxuICAgIGNvbnN0IHdzUnVuID0gc2V0dGluZ3MueWFybkJlcnJ5ID8gJ3lhcm4gd29ya3NwYWNlcyBmb3JlYWNoIC0tYWxsIC0tZXhjbHVkZSAuIC0tdG9wb2xvZ2ljYWwtZGV2IHJ1bicgOiAneWFybiB3b3Jrc3BhY2VzIHJ1bic7XG5cbiAgICBpZiAoYnVpbGRXaXRoTngpIHtcbiAgICAgIGJ1aWxkVGFzay5leGVjKCdueCBydW4tbWFueSAtdCBidWlsZCcpO1xuICAgICAgdGhpcy5naXRodWI/LnRyeUZpbmRXb3JrZmxvdygnYnVpbGQnKT8uZmlsZT8ucGF0Y2goXG4gICAgICAgIEpzb25QYXRjaC5hZGQoJy9qb2JzL2J1aWxkL2Vudi9OWF9TS0lQX05YX0NBQ0hFJywgJ3RydWUnKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1aWxkVGFzay5leGVjKGAke3dzUnVufSBidWlsZGApO1xuICAgIH1cblxuICAgIC8vIFJ1biBpbiBhbGwgd29ya3NwYWNlcyB0YXNrc1xuICAgIHRoaXMudGFza3MudHJ5RmluZCgnY29tcGlsZScpPy5yZXNldChgJHt3c1J1bn0gY29tcGlsZWApO1xuICAgIHRoaXMudGFza3MudHJ5RmluZCgncGFja2FnZScpPy5yZXNldChgJHt3c1J1bn0gcGFja2FnZWApO1xuICAgIHRoaXMudGFza3MudHJ5RmluZCgndGVzdCcpPy5yZXNldChgJHt3c1J1bn0gdGVzdGApO1xuICAgIHRoaXMuYWRkVGFzaygncnVuJywge1xuICAgICAgZXhlYzogd3NSdW4sXG4gICAgICByZWNlaXZlQXJnczogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIFVwZ3JhZGUgYWxsIHBhY2thZ2VzXG4gICAgY29uc3QgY29vbGRvd24gPSBzZXR0aW5ncy5kZXBzVXBncmFkZU9wdGlvbnM/LmNvb2xkb3duID8/IChzZXR0aW5ncy55YXJuQmVycnkgPyAzIDogdW5kZWZpbmVkKTtcbiAgICBjb25zdCB1cGdyYWRlRW52ID0geyAuLi50aGlzLnVwZ3JhZGVXb3JrZmxvdz8udXBncmFkZVRhc2suZW52VmFycyB8fCB7fSB9O1xuICAgIGlmIChjb29sZG93biAmJiBzZXR0aW5ncy55YXJuQmVycnkpIHtcbiAgICAgIHVwZ3JhZGVFbnYuWUFSTl9OUE1fTUlOSU1BTF9BR0VfR0FURSA9IFN0cmluZyhjb29sZG93biAqIDI0ICogNjApO1xuICAgIH1cbiAgICB0aGlzLnRhc2tzLnJlbW92ZVRhc2soJ3VwZ3JhZGUnKTtcbiAgICB0aGlzLnRhc2tzLmFkZFRhc2soJ3VwZ3JhZGUnLCB7XG4gICAgICBlbnY6IHVwZ3JhZGVFbnYsXG4gICAgICBkZXNjcmlwdGlvbjogJ1VwZ3JhZGUgZGVwZW5kZW5jaWVzIGluIGFsbCB3b3Jrc3BhY2VzJyxcbiAgICAgIHN0ZXBzOiBbXG4gICAgICAgIC8vIEl0IGlzIG5vdCBzYWZlIGFueW1vcmUgdG8gaGF2ZSAnbnBtLWNoZWNrLXVwZGF0ZXMnIGluIGEgWWFybiAxIGRlcGVuZGVuY3kgdHJlZSwgc28gcnVuIGl0IGluIGEgc2VwYXJhdGUgdHJlZS5cbiAgICAgICAgeyBleGVjOiBgJHtzZXR0aW5ncy55YXJuQmVycnkgPyAneWFybiBkbHgnIDogJ25weCd9IG5wbS1jaGVjay11cGRhdGVzQDIwIC0tZGVwPWRldixvcHRpb25hbCxwZWVyLHByb2QsYnVuZGxlIC0tdXBncmFkZSAtLXRhcmdldD1taW5vciR7Y29vbGRvd24gPyBgIC0tY29vbGRvd249JHtjb29sZG93bn1gIDogJyd9YCB9LFxuICAgICAgICB7IGV4ZWM6IGAke3dzUnVufSBjaGVjay1mb3ItdXBkYXRlc2AgfSxcbiAgICAgICAgeyBleGVjOiBzZXR0aW5ncy55YXJuQmVycnkgPyAneWFybiBpbnN0YWxsJyA6ICd5YXJuIGluc3RhbGwgLS1jaGVjay1maWxlcycgfSxcbiAgICAgICAgeyBleGVjOiBzZXR0aW5ncy55YXJuQmVycnkgPyAneWFybiB1cCcgOiAneWFybiB1cGdyYWRlJyB9LFxuICAgICAgICB7IHNwYXduOiAnZGVmYXVsdCcgfSxcbiAgICAgICAgeyBzcGF3bjogJ3Bvc3QtdXBncmFkZScgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyBDbGVhbiB1cCB0YXNrcyBub3QgcmVxdWlyZWQgYXQgdG9wLWxldmVsXG4gICAgdGhpcy50YXNrcy5yZW1vdmVUYXNrKCdlamVjdCcpO1xuICAgIHRoaXMudGFza3MucmVtb3ZlVGFzaygnd2F0Y2gnKTtcbiAgICB0aGlzLnRhc2tzLnJlbW92ZVRhc2soJ3ByZS1jb21waWxlJyk7XG4gICAgdGhpcy50YXNrcy5yZW1vdmVUYXNrKCdwb3N0LWNvbXBpbGUnKTtcblxuICAgIC8vIE54XG4gICAgaWYgKHNldHRpbmdzLm54KSB7XG4gICAgICBuZXcgTngodGhpcywge1xuICAgICAgICBkZWZhdWx0QmFzZTogc2V0dGluZ3MuZGVmYXVsdFJlbGVhc2VCcmFuY2gsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBZYXJuIENvbnN0cmFpbnRzXG4gICAgY29uc3QgY29uc2lzdGVudFZlcnNpb25zID0gWy4uLihzZXR0aW5ncy5jb25zaXN0ZW50VmVyc2lvbnMgPz8gW10pXTtcbiAgICBpZiAoc2V0dGluZ3MubngpIHtcbiAgICAgIGNvbnNpc3RlbnRWZXJzaW9ucy5wdXNoKCdueCcpO1xuICAgIH1cbiAgICBpZiAoc2V0dGluZ3MueWFybkJlcnJ5ICYmIGNvbnNpc3RlbnRWZXJzaW9ucy5sZW5ndGgpIHtcbiAgICAgIG5ldyBDb25zdHJhaW50cyh0aGlzLCB7IGNvbnNpc3RlbnRWZXJzaW9ucyB9KTtcbiAgICB9XG5cbiAgICAvLyBSZWxlYXNlIFdvcmtmbG93XG4gICAgaWYgKHNldHRpbmdzLnJlbGVhc2UpIHtcbiAgICAgIHRoaXMubW9ub3JlcG9SZWxlYXNlID0gbmV3IE1vbm9yZXBvUmVsZWFzZSh0aGlzLCB7XG4gICAgICAgIHdvcmtmbG93UnVuc09uOiBzZXR0aW5ncy53b3JrZmxvd1J1bnNPbixcbiAgICAgICAgYnVpbGRXaXRoTngsXG4gICAgICAgIHlhcm5CZXJyeTogc2V0dGluZ3MueWFybkJlcnJ5LFxuICAgICAgICAuLi5zZXR0aW5ncy5yZWxlYXNlT3B0aW9ucyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgc3VicHJvamVjdHMoKTogVHlwZVNjcmlwdFdvcmtzcGFjZVtdIHtcbiAgICByZXR1cm4gc3VwZXIuc3VicHJvamVjdHMgYXMgVHlwZVNjcmlwdFdvcmtzcGFjZVtdO1xuICB9XG5cbiAgcHVibGljIHN5bnRoKCkge1xuICAgIHRoaXMuZmluYWxFc2NhcGVIYXRjaGVzKCk7XG4gICAgc3VwZXIuc3ludGgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgYSBzdWIgcHJvamVjdCB0byByZXF1ZXN0IGluc3RhbGxhdGlvbiBvZiBkZXBlbmRlbmN5IGF0IHRoZSBNb25vcmVwbyByb290XG4gICAqIFRoZXkgbXVzdCBwcm92aWRlIGEgZnVuY3Rpb24gdGhhdCBpcyBleGVjdXRlZCBhZnRlciBkZXBlbmRlbmNpZXMgaGF2ZSBiZWVuIGluc3RhbGxlZFxuICAgKiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSwgdGhlIGluc3RhbGwgY29tbWFuZCBpcyBydW4gZm9yIGEgc2Vjb25kIHRpbWUgYWZ0ZXIgYWxsIHN1YiBwcm9qZWN0IHJlcXVlc3RzIGhhdmUgcnVuLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8gcmVzb2x2ZSBkZXBlbmRlbmN5IHZlcnNpb25zIGZyb20gYCpgIHRvIGEgY29uY3JldGUgdmVyc2lvbiBjb25zdHJhaW50LlxuICAgKi9cbiAgcHVibGljIHJlcXVlc3RJbnN0YWxsRGVwZW5kZW5jaWVzKHJlc29sdmVyOiBJRGVwZW5kZW5jeVJlc29sdmVyKSB7XG4gICAgdGhpcy5wb3N0SW5zdGFsbERlcGVuZGVuY2llcy5wdXNoKHJlc29sdmVyLnJlc29sdmVEZXBzQW5kV3JpdGVQYWNrYWdlSnNvbik7XG4gIH1cblxuICAvKipcbiAgICogQ29kZSB0aGF0IG5lZWRzIHRvIHJ1biBqdXN0IGJlZm9yZSBzeW50aCwgYnV0IGFmdGVyIGFsbCBvdGhlciBjb2RlXG4gICAqL1xuICBwcml2YXRlIGZpbmFsRXNjYXBlSGF0Y2hlcygpIHtcbiAgICAvLyBHZXQgdGhlIE9iamVjdEZpbGVcbiAgICB0aGlzLnBhY2thZ2UuYWRkRmllbGQoJ3ByaXZhdGUnLCB0cnVlKTtcbiAgICB0aGlzLnBhY2thZ2UuYWRkRmllbGQoJ3dvcmtzcGFjZXMnLCB7XG4gICAgICBwYWNrYWdlczogdGhpcy5zdWJwcm9qZWN0cy5tYXAoKHApID0+IHAud29ya3NwYWNlRGlyZWN0b3J5KSxcbiAgICAgIC4uLighdGhpcy5zZXR0aW5ncy55YXJuQmVycnkgPyB0aGlzLnJlbmRlck5vSG9pc3QoKSA6IHVuZGVmaW5lZCksXG4gICAgfSk7XG5cbiAgICAvLyBBdXRvLXNldCBob2lzdGluZ0xpbWl0cyBmb3Igd29ya3NwYWNlcyB3aXRoIGJ1bmRsZWQgZGVwcyB3aGVuIHVzaW5nIFlhcm4gQmVycnlcbiAgICBpZiAodGhpcy5zZXR0aW5ncy55YXJuQmVycnkpIHtcbiAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLnN1YnByb2plY3RzKSB7XG4gICAgICAgIGlmIChwLmJ1bmRsZWREZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBwLnBhY2thZ2UuYWRkRmllbGQoJ2luc3RhbGxDb25maWcnLCB7IGhvaXN0aW5nTGltaXRzOiAnd29ya3NwYWNlcycgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGUgcm9vdCB0c2NvbmZpZyBpcyBvbmx5IHRoZXJlIHRvIHR5cGUtY2hlY2sgdGhlIHByb2plbnJjIGZpbGVzIGFuZCB0b1xuICAgIC8vIGhvbGQgcHJvamVjdCByZWZlcmVuY2VzIHRvIHRoZSB3b3Jrc3BhY2VzLiBCZWNhdXNlIHRoZSBkZXYgdHNjb25maWcgaXNcbiAgICAvLyBkaXNhYmxlZCwgYHRzY29uZmlnRGV2YCBhbGlhc2VzIGB0c2NvbmZpZ2AsIHNvIHdlIG9ubHkgaGF2ZSBhIHNpbmdsZSBmaWxlXG4gICAgLy8gdG8gY29uZmlndXJlIGhlcmUgKHRoZSBgU2V0YCBkZWR1cGVzIGluIGNhc2UgdGhhdCBldmVyIGNoYW5nZXMpLlxuICAgIGZvciAoY29uc3QgdHNjb25maWcgb2YgbmV3IFNldChbdGhpcy50c2NvbmZpZywgdGhpcy50c2NvbmZpZ0Rldl0pKSB7XG4gICAgICB0c2NvbmZpZz8uZmlsZS5hZGRPdmVycmlkZSgnaW5jbHVkZScsIFsnLnByb2plbnJjLnRzJywgJ3Byb2plbnJjLyoqLyoudHMnXSk7XG4gICAgICB0c2NvbmZpZz8uZmlsZS5hZGRPdmVycmlkZShcbiAgICAgICAgJ3JlZmVyZW5jZXMnLFxuICAgICAgICB0aGlzLnN1YnByb2plY3RzLm1hcCgocCkgPT4gKHsgcGF0aDogcC53b3Jrc3BhY2VEaXJlY3RvcnkgfSkpLFxuICAgICAgKTtcbiAgICAgIC8vIFRoZSByb290IGlzIG5vdCBhIHJlYWwgY29tcGlsYXRpb24gdW5pdDogaXQgb25seSB0eXBlLWNoZWNrcyBwcm9qZW5yY1xuICAgICAgLy8gZmlsZXMgYW5kIGhvbGRzIHByb2plY3QgcmVmZXJlbmNlcy4gRW1pdCBub3RoaW5nIGFuZCByb290IGV2ZXJ5dGhpbmcgYXRcbiAgICAgIC8vIHRoZSByZXBvIHJvb3Qgc28gdGhlIHJlZmVyZW5jZXMgcmVzb2x2ZSBjb3JyZWN0bHkuXG4gICAgICB0c2NvbmZpZz8uZmlsZS5hZGRPdmVycmlkZSgnY29tcGlsZXJPcHRpb25zLnJvb3REaXInLCAnLicpO1xuICAgICAgdHNjb25maWc/LmZpbGUuYWRkT3ZlcnJpZGUoJ2NvbXBpbGVyT3B0aW9ucy5vdXREaXInLCB1bmRlZmluZWQpO1xuICAgICAgdHNjb25maWc/LmZpbGUuYWRkT3ZlcnJpZGUoJ2NvbXBpbGVyT3B0aW9ucy5ub0VtaXQnLCB0cnVlKTtcbiAgICB9XG5cbiAgICB0aGlzLnBhY2thZ2UuYWRkRmllbGQoJ2plc3QnLCB7XG4gICAgICBwcm9qZWN0czogdGhpcy5zdWJwcm9qZWN0cy5tYXAoKHApID0+IGA8cm9vdERpcj4vJHtwLndvcmtzcGFjZURpcmVjdG9yeX1gKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXIgdGhlICdub2hvaXN0JyBkaXJlY3RpdmVcbiAgICpcbiAgICogQnVuZGxlZCBkZXBlbmRlbmNpZXMgbXVzdCBiZSBub2hvaXN0J2VkLCBvdGhlcndpc2UgTlBNIHNpbGVudGx5IHdvbid0IGJ1bmRsZSB0aGVtLlxuICAgKlxuICAgKiBSZW5kZXJzIGFuIG9iamVjdCB0aGF0IHNob3VsZCBiZSBtaXhlZCBpbnRvIHRoZSBgd29ya3NwYWNlc2Agb2JqZWN0LlxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJOb0hvaXN0KCk6IGFueSB7XG4gICAgY29uc3Qgbm9ob2lzdCA9IHRoaXMuc3VicHJvamVjdHMuZmxhdE1hcCgocCkgPT5cbiAgICAgIHAuZGVwcy5hbGxcbiAgICAgICAgLmZpbHRlcigoZGVwKSA9PiBkZXAudHlwZSA9PT0gRGVwZW5kZW5jeVR5cGUuQlVORExFRClcbiAgICAgICAgLmZsYXRNYXAoKGRlcCkgPT4gW1xuICAgICAgICAgIGAke3AubmFtZX0vJHtkZXAubmFtZX1gLFxuICAgICAgICAgIGAke3AubmFtZX0vJHtkZXAubmFtZX0vKipgLFxuICAgICAgICBdKSxcbiAgICApO1xuICAgIHJldHVybiBub2hvaXN0Lmxlbmd0aCA+IDAgPyB7IG5vaG9pc3QgfSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBIb29rcyBpbnRvIHRoZSBpbnN0YWxsIGRlcGVuZGVuY2llcyBjeWNsZVxuICAgKi9cbiAgcHVibGljIHBvc3RTeW50aGVzaXplKCkge1xuICAgIGlmICh0aGlzLnBvc3RJbnN0YWxsRGVwZW5kZW5jaWVzLmxlbmd0aCkge1xuICAgICAgY29uc3Qgbm9kZVBrZzogYW55ID0gdGhpcy5wYWNrYWdlO1xuICAgICAgbm9kZVBrZy5pbnN0YWxsRGVwZW5kZW5jaWVzKHsgcmVhc29uOiBqYXZhc2NyaXB0Lkluc3RhbGxSZWFzb24uUEFDS0FHRV9KU09OX0NIQU5HRUQgfSk7XG5cbiAgICAgIGNvbnN0IHJlc29sdXRpb25zID0gdGhpcy5wb3N0SW5zdGFsbERlcGVuZGVuY2llcy5mbGF0TWFwKChyZXF1ZXN0KSA9PiByZXF1ZXN0KCkpO1xuICAgICAgaWYgKHJlc29sdXRpb25zLmxlbmd0aCkge1xuICAgICAgICBub2RlUGtnLmluc3RhbGxEZXBlbmRlbmNpZXMoeyByZWFzb246IGphdmFzY3JpcHQuSW5zdGFsbFJlYXNvbi5ERVBTX1JFU09MVkVELCByZXNvbHV0aW9ucyB9KTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5wb3N0SW5zdGFsbERlcGVuZGVuY2llcyA9IFtdO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElEZXBlbmRlbmN5UmVzb2x2ZXIge1xuICByZXNvbHZlRGVwc0FuZFdyaXRlUGFja2FnZUpzb24oKTogc3RyaW5nW107XG59XG5cbmZ1bmN0aW9uIGdldE9iakZyb21GaWxlKHByb2plY3Q6IFByb2plY3QsIGZpbGU6IHN0cmluZyk6IG9iamVjdCB7XG4gIHJldHVybiAocHJvamVjdC50cnlGaW5kT2JqZWN0RmlsZShmaWxlKSBhcyBhbnkpPy5vYmo7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgQ2RrTGFic01vbm9yZXBvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrTGFic01vbm9yZXBvT3B0aW9ucyBleHRlbmRzIE1vbm9yZXBvT3B0aW9ucyB7fVxuXG4vKipcbiAqIE9waW5pb25hdGVkIGltcGxlbWVudGF0aW9uIG9mIHlhcm4uTW9ub3JlcG9cbiAqIEBwamlkIGNka2xhYnMteWFybi1tb25vcmVwb1xuICovXG5leHBvcnQgY2xhc3MgQ2RrTGFic01vbm9yZXBvIGV4dGVuZHMgTW9ub3JlcG8ge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBDZGtMYWJzTW9ub3JlcG9PcHRpb25zKSB7XG4gICAgc3VwZXIoe1xuICAgICAgcHJvamVucmNUczogdHJ1ZSxcblxuICAgICAgYXV0b0FwcHJvdmVVcGdyYWRlczogdHJ1ZSxcbiAgICAgIGF1dG9BcHByb3ZlT3B0aW9uczoge1xuICAgICAgICBhbGxvd2VkVXNlcm5hbWVzOiBbJ2dpdGh1Yi1ib3QnLCAnY2RrbGFicy1hdXRvbWF0aW9uJywgJ2RlcGVuZGFib3RbYm90XSddLFxuICAgICAgICBzZWNyZXQ6ICdHSVRIVUJfVE9LRU4nLFxuICAgICAgfSxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBnaXRodWJPcHRpb25zOiB7XG4gICAgICAgIC4uLm9wdGlvbnMuZ2l0aHViT3B0aW9ucyxcbiAgICAgICAgbWVyZ2lmeTogZmFsc2UsXG4gICAgICAgIGRlcGVuZGVuY3lSZXZpZXc6IHRydWUsXG4gICAgICB9LFxuICAgICAgLy8gRGV2aWF0aW9uIGZyb20gdXBzdHJlYW0gcHJvamVuOiB1cHN0cmVhbSBwcm9qZW4gZGVmYXVsdHMgdG8gbWluTm9kZVZlcnNpb24sIGJ1dCB3ZSBoYXZlIHRvbyBtYW55IHdvcmtmbG93c1xuICAgICAgLy8gdGhhdCB1c2UgdG9vbHMgdGhhdCB3YW50IGEgcmVjZW50IE5vZGUgdmVyc2lvbiwgc28gZGVmYXVsdCB0byBhIHJlYXNvbmFibGUgZmxvYXRpbmcgdmVyc2lvbi5cbiAgICAgIHdvcmtmbG93Tm9kZVZlcnNpb246IG9wdGlvbnMud29ya2Zsb3dOb2RlVmVyc2lvbiA/PyAnbHRzLyonLFxuICAgIH0pO1xuXG4gICAgbmV3IGdpdGh1Yi5NZXJnZVF1ZXVlKHRoaXMsIHtcbiAgICAgIGF1dG9RdWV1ZU9wdGlvbnM6IHtcbiAgICAgICAgcHJvamVuQ3JlZGVudGlhbHM6IGdpdGh1Yi5HaXRodWJDcmVkZW50aWFscy5mcm9tUGVyc29uYWxBY2Nlc3NUb2tlbih7IHNlY3JldDogJ1BST0pFTl9HSVRIVUJfVE9LRU4nIH0pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufVxuIl19
@@ -24,6 +24,35 @@ export interface TypeScriptWorkspaceOptions {
24
24
  * @default false
25
25
  */
26
26
  readonly allowPrivateDeps?: boolean;
27
+ /**
28
+ * List of dependency (package) names that are allowed to run lifecycle install scripts (`preinstall`, `install`, `postinstall`, `prepare`) during dependency installation.
29
+ * These scripts can execute arbitrary code, making them a common
30
+ * supply-chain attack vector. Package managers are moving toward
31
+ * blocking them by default and requiring an explicit allowlist.
32
+ * Configuring `allowScripts` sets up that allowlist so scripts only run
33
+ * for the packages you have explicitly reviewed and trust.
34
+ *
35
+ * Support for this setting depends on the configured `packageManager`:
36
+ *
37
+ * - `NPM`: written to the native `allowScripts` field in `package.json`
38
+ * (requires npm >= 11.16; see https://docs.npmjs.com/cli/v11/commands/npm-approve-scripts).
39
+ * - `BUN`: written to the native `trustedDependencies` field in
40
+ * `package.json` (see https://bun.com/docs/pm/lifecycle).
41
+ * - `PNPM`: written to the `onlyBuiltDependencies` setting in
42
+ * `pnpm-workspace.yaml` (see https://pnpm.io/settings#onlybuiltdependencies).
43
+ * - `YARN2`, `YARN_BERRY`: written to the native
44
+ * `dependenciesMeta.<pkg>.built` allowlist in `package.json`, combined
45
+ * with `enableScripts: false` in `.yarnrc.yml` (see
46
+ * https://yarnpkg.com/features/security#postinstalls). If you set
47
+ * `yarnBerryOptions.yarnRcOptions.enableScripts` explicitly, that value
48
+ * is respected instead of being overridden.
49
+ * - `YARN`, `YARN_CLASSIC`: not supported. Yarn Classic has no native
50
+ * mechanism to allowlist install scripts for specific dependencies.
51
+ * Setting this option with one of these package managers throws an
52
+ * error at synthesis time.
53
+ * @default - all install scripts are allowed to run (package manager default)
54
+ */
55
+ readonly allowScripts?: Array<string>;
27
56
  /**
28
57
  * A directory which will contain build artifacts.
29
58
  * @default "dist"
@@ -537,6 +566,11 @@ export interface TypeScriptWorkspaceOptions {
537
566
  * @default []
538
567
  */
539
568
  readonly peerDeps?: Array<string | yarn.IWorkspaceReference>;
569
+ /**
570
+ * Options for pnpm.
571
+ * @default - all default options
572
+ */
573
+ readonly pnpmOptions?: javascript.PnpmOptions;
540
574
  /**
541
575
  * The version of PNPM to use if using PNPM as a package manager.
542
576
  * @default "10.33.0"