@cdktn/cli-core 0.23.3 → 0.23.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/LICENSE +355 -0
  2. package/build/lib/cdktf-config.js +8 -18
  3. package/build/lib/cdktf-project.js +3 -3
  4. package/build/lib/cdktf-stack.d.ts +6 -0
  5. package/build/lib/cdktf-stack.d.ts.map +1 -1
  6. package/build/lib/cdktf-stack.js +18 -1
  7. package/build/lib/convert.js +10 -19
  8. package/build/lib/dependencies/dependency-manager.d.ts.map +1 -1
  9. package/build/lib/dependencies/dependency-manager.js +8 -18
  10. package/build/lib/dependencies/package-manager.js +29 -25
  11. package/build/lib/dependencies/prebuilt-providers.js +16 -25
  12. package/build/lib/dependencies/registry-api.js +10 -19
  13. package/build/lib/dependencies/version-constraints.js +11 -20
  14. package/build/lib/error-reporting.js +13 -22
  15. package/build/lib/errors.d.ts.map +1 -1
  16. package/build/lib/execution-logs.js +3 -2
  17. package/build/lib/get.js +11 -21
  18. package/build/lib/helpers/stack-helpers.js +9 -8
  19. package/build/lib/init.js +11 -21
  20. package/build/lib/installed-binary-check.d.ts +12 -0
  21. package/build/lib/installed-binary-check.d.ts.map +1 -0
  22. package/build/lib/installed-binary-check.js +62 -0
  23. package/build/lib/local-provider-constraints.js +8 -18
  24. package/build/lib/models/deploy-machine.d.ts +10 -0
  25. package/build/lib/models/deploy-machine.d.ts.map +1 -1
  26. package/build/lib/models/deploy-machine.js +49 -14
  27. package/build/lib/models/interactive-process.js +3 -2
  28. package/build/lib/models/schema.js +8 -18
  29. package/build/lib/models/terraform-cli.d.ts.map +1 -1
  30. package/build/lib/models/terraform-cli.js +11 -21
  31. package/build/lib/models/terraform.d.ts +1 -0
  32. package/build/lib/models/terraform.d.ts.map +1 -1
  33. package/build/lib/models/terraform.js +3 -3
  34. package/build/lib/output.d.ts.map +1 -1
  35. package/build/lib/output.js +11 -21
  36. package/build/lib/provider-add.js +3 -2
  37. package/build/lib/server/terraform-logs.js +3 -2
  38. package/build/lib/synth-stack.js +8 -18
  39. package/build/lib/synth.js +10 -19
  40. package/build/lib/terraform-json.js +8 -18
  41. package/build/lib/watch.js +10 -19
  42. package/package.json +20 -19
  43. package/templates/csharp/cdktf.json +4 -0
  44. package/templates/go/cdktf.json +4 -0
  45. package/templates/java/cdktf.json +4 -0
  46. package/templates/java/gradlew +0 -0
  47. package/templates/python/cdktf.json +4 -0
  48. package/templates/python-pip/cdktf.json +4 -0
  49. package/templates/typescript/cdktf.json +4 -0
@@ -15,23 +15,13 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
35
25
  Object.defineProperty(exports, "__esModule", { value: true });
36
26
  exports.DependencyManager = exports.ProviderConstraint = exports.DEFAULT_NAMESPACE = exports.DEFAULT_HOSTNAME = void 0;
37
27
  // Copyright (c) HashiCorp, Inc
@@ -400,4 +390,4 @@ class DependencyManager {
400
390
  }
401
391
  }
402
392
  exports.DependencyManager = DependencyManager;
403
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwZW5kZW5jeS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kZXBlbmRlbmNpZXMvZGVwZW5kZW5jeS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsNENBS3dCO0FBQ3hCLHlDQUFzRDtBQUN0RCxrREFBOEM7QUFDOUMsaUVBQTREO0FBQzVELHVEQUFtRDtBQUNuRCw2REFLOEI7QUFDOUIsaURBQWtEO0FBQ2xELCtEQUFpRTtBQUNqRSwrQ0FBaUM7QUFDakMsd0VBQW1FO0FBQ25FLDhFQUF5RTtBQUV6RSxpRkFBaUY7QUFDcEUsUUFBQSxnQkFBZ0IsR0FBRyx1QkFBdUIsQ0FBQztBQUMzQyxRQUFBLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztBQUM3QyxTQUFTLHVCQUF1QixDQUFDLE1BQWM7SUFDN0Msd0NBQXdDO0lBQ3hDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM3QyxRQUFRLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLEtBQUssQ0FBQztZQUNKLE9BQU8sR0FBRyx3QkFBZ0IsSUFBSSx5QkFBaUIsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUM5RCxLQUFLLENBQUM7WUFDSixPQUFPLEdBQUcsd0JBQWdCLElBQUksTUFBTSxFQUFFLENBQUM7UUFDekM7WUFDRSxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQWEsa0JBQWtCO0lBTzdCLG1FQUFtRTtJQUNuRSxzRUFBc0U7SUFDdEUsNEdBQTRHO0lBQzVHLFlBQ0UsTUFBYyxFQUNFLE9BQTJCO1FBQTNCLFlBQU8sR0FBUCxPQUFPLENBQW9CO1FBRTNDLElBQUksQ0FBQyxNQUFNLEdBQUcsdUJBQXVCLENBQUMs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TSxPQUFPLENBQUMsR0FBRyxDQUMxQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEVBQUU7WUFDckQsTUFBTSxVQUFVLEdBQ2Qsa0JBQWtCLENBQUMsZUFBZSxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDMUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxhQUFhLENBQUMsa0JBQWtCLENBQ3BELFVBQVUsQ0FBQyxjQUFjLENBQzFCLENBQUM7WUFDRixNQUFNLGVBQWUsR0FBRyxNQUFNLFdBQVcsQ0FBQyxxQkFBcUIsQ0FDN0QsVUFBVSxDQUFDLGNBQWMsQ0FDMUIsQ0FBQztZQUVGLE9BQU87Z0JBQ0wsWUFBWSxFQUFFLFVBQVUsQ0FBQyxjQUFjO2dCQUN2QyxrQkFBa0IsRUFBRSxlQUFlLElBQUksVUFBVSxDQUFDLE9BQU87Z0JBQ3pELGVBQWUsRUFBRSxPQUFPO2FBQ3pCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsT0FBTztZQUNMLEtBQUssRUFBRSxrQkFBa0I7WUFDekIsUUFBUSxFQUFFLHFCQUFxQjtTQUNoQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBMVpELDhDQTBaQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG5pbXBvcnQge1xuICBMYW5ndWFnZSxcbiAgRXJyb3JzLFxuICBsb2dnZXIsXG4gIFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50LFxufSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IHRvUGFzY2FsQ2FzZSwgdG9TbmFrZUNhc2UgfSBmcm9tIFwiY29kZW1ha2VyXCI7XG5pbXBvcnQgeyBDZGt0ZkNvbmZpZyB9IGZyb20gXCIuLi9jZGt0Zi1jb25maWdcIjtcbmltcG9ydCB7IENka3RmQ29uZmlnTWFuYWdlciB9IGZyb20gXCIuL2Nka3RmLWNvbmZpZy1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBQYWNrYWdlTWFuYWdlciB9IGZyb20gXCIuL3BhY2thZ2UtbWFuYWdlclwiO1xuaW1wb3J0IHtcbiAgZ2V0TnBtUGFja2FnZU5hbWUsXG4gIGdldFByZWJ1aWx0UHJvdmlkZXJSZXBvc2l0b3J5TmFtZSxcbiAgZ2V0UHJlYnVpbHRQcm92aWRlclZlcnNpb25JbmZvcm1hdGlvbixcbiAgZ2V0UHJlYnVpbHRQcm92aWRlclZlcnNpb25zLFxufSBmcm9tIFwiLi9wcmVidWlsdC1wcm92aWRlcnNcIjtcbmltcG9ydCB7IGdldExhdGVzdFZlcnNpb24gfSBmcm9tIFwiLi9yZWdpc3RyeS1hcGlcIjtcbmltcG9ydCB7IHZlcnNpb25NYXRjaGVzQ29uc3RyYWludCB9IGZyb20gXCIuL3ZlcnNpb24tY29uc3RyYWludHNcIjtcbmltcG9ydCAqIGFzIHNlbXZlciBmcm9tIFwic2VtdmVyXCI7XG5pbXBvcnQgeyBMb2NhbFByb3ZpZGVyVmVyc2lvbnMgfSBmcm9tIFwiLi4vbG9jYWwtcHJvdmlkZXItdmVyc2lvbnNcIjtcbmltcG9ydCB7IExvY2FsUHJvdmlkZXJDb25zdHJhaW50cyB9IGZyb20gXCIuLi9sb2NhbC1wcm92aWRlci1jb25zdHJhaW50c1wiO1xuXG4vLyByZWY6IGh0dHBzOi8vd3d3LnRlcnJhZm9ybS5pby9sYW5ndWFnZS9wcm92aWRlcnMvcmVxdWlyZW1lbnRzI3NvdXJjZS1hZGRyZXNzZXNcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hPU1ROQU1FID0gXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW9cIjtcbmV4cG9ydCBjb25zdCBERUZBVUxUX05BTUVTUEFDRSA9IFwiaGFzaGljb3JwXCI7XG5mdW5jdGlvbiBub3JtYWxpemVQcm92aWRlclNvdXJjZShzb3VyY2U6IHN0cmluZykge1xuICAvLyByZXR1cm5zIDxIT1NUTkFNRT4vPE5BTUVTUEFDRT4vPFRZUEU+XG4gIGNvbnN0IHNsYXNoZXMgPSBzb3VyY2Uuc3BsaXQoXCIvXCIpLmxlbmd0aCAtIDE7XG4gIHN3aXRjaCAoc2xhc2hlcykge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiBgJHtERUZBVUxUX0hPU1ROQU1FfS8ke0RFRkFVTFRfTkFNRVNQQUNFfS8ke3NvdXJjZX1gO1xuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiBgJHtERUZBVUxUX0hPU1ROQU1FfS8ke3NvdXJjZX1gO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gc291cmNlO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBQcm92aWRlckNvbnN0cmFpbnQge1xuICAvKipcbiAgICogbm9ybWFsaXplZCBzb3VyY2Ugb2YgdGhlIHByb3ZpZGVyXG4gICAqIGUuZy4gXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW8vaGFzaGljb3JwL2F3c1wiXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc291cmNlOiBzdHJpbmc7XG5cbiAgLy8gVE9ETzogYWRkIGV4YW1wbGVzIHRvIGNsaSBjb21tYW5kIGRlc2NyaXB0aW9uIChpLmUuID0sfj4uPiBldGMuKVxuICAvLyBpZiBubyB2ZXJzaW9uIGNvbnN0cmFpbnQgaXMgc3BlY2lmaWVkLCB3ZSBhc3N1bWUgdGhlIGxhdGVzdCB2ZXJzaW9uXG4gIC8vIGlmIHNwZWNpZmljIHZlcnNpb24gaXMgc3BlY2lmaWVkIHdpdGhvdXQgZS5nLiA9LCB3ZSBhbGxvdyBwYXRjaCBsZXZlbCBpbmNyZW1lbnRzIChlLmcuIH4+Mi4xMiBmb3IgXCIyLjEyXCIpXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNvdXJjZTogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICkge1xuICAgIHRoaXMuc291cmNlID0gbm9ybWFsaXplUHJvdmlkZXJTb3VyY2Uoc291cmNlKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQ29uZmlnRW50cnkoXG4gICAgcHJvdmlkZXI6IHN0cmluZyB8IFRlcnJhZm9ybURlcGVuZGVuY3lDb25zdHJhaW50LFxuICApOiBQcm92aWRlckNvbnN0cmFpbnQge1xuICAgIGlmICh0eXBlb2YgcHJvdmlkZXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIGNvbnN0IFtzcmMsIHZlcnNpb25dID0gcHJvdmlkZXIuc3BsaXQoXCJAXCIpO1xuICAgICAgcmV0dXJuIG5ldyBQcm92aWRlckNvbnN0cmFpbnQoXG4gICAgICAgIHNyYy50cmltKCksXG4gICAgICAgIHZlcnNpb24gPyB2ZXJzaW9uLnRyaW0oKSA6IHVuZGVmaW5lZCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3JjID1cbiAgICAgIChwcm92aWRlci5uYW1lc3BhY2UgPyBgJHtwcm92aWRlci5uYW1lc3BhY2V9L2AgOiBcIlwiKSArXG4gICAgICAocHJvdmlkZXIuc291cmNlIHx8IHByb3ZpZGVyLm5hbWUpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm92aWRlckNvbnN0cmFpbnQoc3JjLCBwcm92aWRlci52ZXJzaW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0Zyb21UZXJyYWZvcm1SZWdpc3RyeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0bmFtZSA9PT0gREVGQVVMVF9IT1NUTkFNRTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGUgbmFtZXNwYWNlIG9mIHRoZSBwcm92aWRlclxuICAgKiBlLmcuIFwiaGFzaGljb3JwXCIgb3IgXCJrcmV1endlcmtlclwiXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5hbWVzcGFjZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5zcGxpdChcIi9cIilbMV07XG4gIH1cblxuICAvKipcbiAgICogdGhlIG5hbWUgb2YgdGhlIHByb3ZpZGVyXG4gICAqIGUuZy4gXCJhd3NcIlxuICAgKi9cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlLnNwbGl0KFwiL1wiKVsyXTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGUgaG9zdG5hbWUgb2YgdGhlIHByb3ZpZGVyXG4gICAqIGUuZy4gXCJyZWdpc3RyeS50ZXJyYWZvcm0uaW9cIlxuICAgKi9cbiAgcHVibGljIGdldCBob3N0bmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5zcGxpdChcIi9cIilbMF07XG4gIH1cblxuICAvKipcbiAgICogcmV0dXJucyBhIHNpbXBsaWZpZWQgcHJvdmlkZXIgbmFtZSwgZHJvcHBpbmcgbmFtZXNwYWNlIGFuZCBob3N0bmFtZVxuICAgKiBpZiB0aGV5IG1hdGNoIHRoZSBkZWZhdWx0c1xuICAgKi9cbiAgcHVibGljIGdldCBzaW1wbGlmaWVkTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZVxuICAgICAgLnNwbGl0KFwiL1wiKVxuICAgICAgLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gREVGQVVMVF9IT1NUTkFNRSAmJiBwYXJ0ICE9PSBERUZBVUxUX05BTUVTUEFDRSlcbiAgICAgIC5qb2luKFwiL1wiKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVja3MgaWYgdGhlIHZlcnNpb24gY29uc3RyYWludCBtYXRjaGVzIHRoZSBnaXZlbiB2ZXJzaW9uXG4gICAqIEBwYXJhbSB2ZXJzaW9uIGFuIGFjdHVhbCB2ZXJzaW9uIChlLmcuIFwiNC4xMi4xXCIpXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHZlcnNpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjb25zdHJhaW50XG4gICAqL1xuICBwdWJsaWMgbWF0Y2hlc1ZlcnNpb24odmVyc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMudmVyc2lvbikge1xuICAgICAgcmV0dXJuIHZlcnNpb25NYXRjaGVzQ29uc3RyYWludCh2ZXJzaW9uLCB0aGlzLnZlcnNpb24pO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gYCR7dGhpcy5zb3VyY2V9JHt0aGlzLnZlcnNpb24gPyBgQCR7dGhpcy52ZXJzaW9ufWAgOiBcIlwifWA7XG4gIH1cbn1cblxuLyoqXG4gKiBtYW5hZ2VzIGRlcGVuZGVuY2llcyBvZiBhIENES1ROIHByb2plY3QgKGUuZy4gdGVycmFmb3JtIHByb3ZpZGVycylcbiAqL1xuZXhwb3J0IGNsYXNzIERlcGVuZGVuY3lNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBwYWNrYWdlTWFuYWdlcjogUGFja2FnZU1hbmFnZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXRMYW5ndWFnZTogTGFuZ3VhZ2UsXG4gICAgcHJpdmF0ZSBjZGt0ZlZlcnNpb246IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2plY3REaXJlY3Rvcnk6IHN0cmluZyxcbiAgKSB7XG4gICAgdGhpcy5wYWNrYWdlTWFuYWdlciA9IFBhY2thZ2VNYW5hZ2VyLmZvckxhbmd1YWdlKFxuICAgICAgdGFyZ2V0TGFuZ3VhZ2UsXG4gICAgICB0aGlzLnByb2plY3REaXJlY3RvcnksXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGFkZFByb3ZpZGVyKFxuICAgIGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCxcbiAgKTogUHJvbWlzZTx7IGFkZGVkTG9jYWxQcm92aWRlcjogYm9vbGVhbiB9PiB7XG4gICAgaWYgKGF3YWl0IHRoaXMuaGFzUHJlYnVpbHRQcm92aWRlcihjb25zdHJhaW50KSkge1xuICAgICAgYXdhaXQgdGhpcy5hZGRQcmVidWlsdFByb3ZpZGVyKGNvbnN0cmFpbnQpO1xuICAgICAgcmV0dXJuIHsgYWRkZWRMb2NhbFByb3ZpZGVyOiBmYWxzZSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmFkZExvY2FsUHJvdmlkZXIoY29uc3RyYWludCk7XG4gICAgICByZXR1cm4geyBhZGRlZExvY2FsUHJvdmlkZXI6IHRydWUgfTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGdyYWRlUHJvdmlkZXIoY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50KSB7XG4gICAgY29uc29sZS5sb2coYFVwZ3JhZGluZyAke2NvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWV9Li4uYCk7XG4gICAgY29uc3QgY2RrdGZKc29uID0gbmV3IENka3RmQ29uZmlnTWFuYWdlcigpO1xuICAgIGNvbnN0IHByZWJ1aWx0VmVyc2lvbiA9IGF3YWl0IHRoaXMuZ2V0Q3VycmVudGx5SW5zdGFsbGVkVmVyc2lvbihjb25zdHJhaW50KTtcbiAgICBpZiAocHJlYnVpbHRWZXJzaW9uKSB7XG4gICAgICBhd2FpdCB0aGlzLnVwZ3JhZGVQcmVidWlsdFByb3ZpZGVyKGNvbnN0cmFpbnQsIHByZWJ1aWx0VmVyc2lvbik7XG4gICAgICByZXR1cm4geyBhZGRlZExvY2FsUHJvdmlkZXI6IGZhbHNlIH07XG4gICAgfVxuICAgIGlmIChhd2FpdCBjZGt0Zkpzb24uaGFzUHJvdmlkZXIoY29uc3RyYWludCkpIHtcbiAgICAgIGF3YWl0IGNka3RmSnNvbi51cGRhdGVQcm92aWRlcihjb25zdHJhaW50KTtcbiAgICAgIHJldHVybiB7IGFkZGVkTG9jYWxQcm92aWRlcjogdHJ1ZSB9O1xuICAgIH1cblxuICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgIGBUcnlpbmcgdG8gdXBncmFkZSAke2NvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWV9IGJ1dCBpdCBpcyBub3QgaW5zdGFsbGVkLCBwbGVhc2UgdXNlIFwiY2RrdG4gcHJvdmlkZXIgYWRkICR7Y29uc3RyYWludC5zaW1wbGlmaWVkTmFtZX1cIiB0byBhZGQgaXQuYCxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0Q3VycmVudGx5SW5zdGFsbGVkVmVyc2lvbihjb25zdHJhaW50OiBQcm92aWRlckNvbnN0cmFpbnQpIHtcbiAgICBsb2dnZXIuaW5mbyhgQ2hlY2tpbmcgaWYgJHtjb25zdHJhaW50LnNpbXBsaWZpZWROYW1lfSBpcyBpbnN0YWxsZWQuLi5gKTtcbiAgICBjb25zdCBjZGt0ZlBhY2thZ2VOYW1lID0gYXdhaXQgdGhpcy50cnlHZXRQYWNrYWdlTmFtZShjb25zdHJhaW50LCBmYWxzZSk7XG4gICAgY29uc3QgY2RrdG5QYWNrYWdlTmFtZSA9IGF3YWl0IHRoaXMudHJ5R2V0UGFja2FnZU5hbWUoY29uc3RyYWludCwgdHJ1ZSk7XG5cbiAgICBpZiAoIWNka3RmUGFja2FnZU5hbWUgJiYgIWNka3RuUGFja2FnZU5hbWUpIHJldHVybjsgLy8gbm90IGF2YWlsYWJsZSBhcyBwcmUtYnVpbHQgcHJvdmlkZXIsIHNvIGNhbid0IGJlIGluc3RhbGxlZCBhcyBzdWNoXG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgRXhwZWN0aW5nIHBhY2thZ2UgJHtjZGt0ZlBhY2thZ2VOYW1lfSBvciAke2Nka3RuUGFja2FnZU5hbWV9IHRvIGJlIGluc3RhbGxlZCBpZiBwcm92aWRlciBpcyBpbnN0YWxsZWQgYXMgcHJlLWJ1aWx0IG9uZWAsXG4gICAgKTtcblxuICAgIGxldCBpbnN0YWxsZWRQYWNrYWdlcztcbiAgICB0cnkge1xuICAgICAgaW5zdGFsbGVkUGFja2FnZXMgPSBhd2FpdCB0aGlzLnBhY2thZ2VNYW5hZ2VyLmxpc3RQcm92aWRlclBhY2thZ2VzKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gbGlzdCBwYWNrYWdlczogJHtlfWApO1xuICAgIH1cblxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBJbnN0YWxsZWQgcGFja2FnZXMgZm91bmQ6ICR7SlNPTi5zdHJpbmdpZnkoaW5zdGFsbGVkUGFja2FnZXMsIG51bGwsIDIpfWAsXG4gICAgKTtcblxuICAgIHJldHVybiBpbnN0YWxsZWRQYWNrYWdlcy5maW5kKFxuICAgICAgKHBrZykgPT4gcGtnLm5hbWUgPT09IGNka3RmUGFja2FnZU5hbWUgfHwgcGtnLm5hbWUgPT09IGNka3RuUGFja2FnZU5hbWUsXG4gICAgKT8udmVyc2lvbjtcbiAgfVxuXG4gIGFzeW5jIHVwZ3JhZGVQcmVidWlsdFByb3ZpZGVyKFxuICAgIGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCxcbiAgICBjdXJyZW50VmVyc2lvbjogc3RyaW5nLFxuICApIHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgU2VhcmNoaW5nIGZvciBsYXRlc3QgbWF0Y2hpbmcgdmVyc2lvbiBvZiAke2NvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWV9YCxcbiAgICApO1xuXG4gICAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBhd2FpdCB0aGlzLmdldE1hdGNoaW5nUHJvdmlkZXJWZXJzaW9uKGNvbnN0cmFpbnQpO1xuXG4gICAgbG9nZ2VyLmRlYnVnKGBGb3VuZCBwYWNrYWdlICR7bmFtZX1AJHt2ZXJzaW9ufWApO1xuICAgIGlmICh2ZXJzaW9uICE9PSBjdXJyZW50VmVyc2lvbikge1xuICAgICAgYXdhaXQgdGhpcy5wYWNrYWdlTWFuYWdlci5hZGRQYWNrYWdlKG5hbWUsIHZlcnNpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYFRoZSBsYXRlc3QgdmVyc2lvbiBvZiAke25hbWV9IGlzIGFscmVhZHkgaW5zdGFsbGVkOiAke3ZlcnNpb259YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaGFzUHJlYnVpbHRQcm92aWRlcihjb25zdHJhaW50OiBQcm92aWRlckNvbnN0cmFpbnQpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgZGV0ZXJtaW5pbmcgd2hldGhlciBwcmUtYnVpbHQgcHJvdmlkZXIgZXhpc3RzIGZvciAke2NvbnN0cmFpbnQuc291cmNlfSB3aXRoIHZlcnNpb24gY29uc3RyYWludCAke2NvbnN0cmFpbnQudmVyc2lvbn0gYW5kIGNka3RmIHZlcnNpb24gJHt0aGlzLmNka3RmVmVyc2lvbn1gLFxuICAgICk7XG5cbiAgICBsb2dnZXIuaW5mbyhgQ2hlY2tpbmcgd2hldGhlciBwcmUtYnVpbHQgcHJvdmlkZXIgZXhpc3RzIGZvciB0aGUgZm9sbG93aW5nIGNvbnN0cmFpbnRzOlxuICBwcm92aWRlcjogJHtjb25zdHJhaW50LnNpbXBsaWZpZWROYW1lfVxuICB2ZXJzaW9uIDogJHtjb25zdHJhaW50LnZlcnNpb24gfHwgXCJsYXRlc3RcIn1cbiAgbGFuZ3VhZ2U6ICR7dGhpcy50YXJnZXRMYW5ndWFnZX1cbiAgY2RrdGYgICA6ICR7dGhpcy5jZGt0ZlZlcnNpb259XG5gKTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMudGFyZ2V0TGFuZ3VhZ2UgPT09IExhbmd1YWdlLkdPICYmXG4gICAgICBzZW12ZXIubHQodGhpcy5jZGt0ZlZlcnNpb24sIFwiMC4xMi4wXCIpXG4gICAgKSB7XG4gICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgYEJlZm9yZSBDREtURiAwLjEyLjAgdGhlcmUgd2VyZSBubyBwcmUtYnVpbHQgcHJvdmlkZXJzIHB1Ymxpc2hlZCBmb3IgR28uYCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdiA9IGF3YWl0IGdldFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9ucyhjb25zdHJhaW50LCB0aGlzLmNka3RmVmVyc2lvbik7XG4gICAgY29uc3QgZXhpc3RzID0gdiAhPT0gbnVsbDtcblxuICAgIGlmIChleGlzdHMpIHtcbiAgICAgIGxvZ2dlci5pbmZvKGBGb3VuZCBwcmUtYnVpbHQgcHJvdmlkZXIuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgUHJlLWJ1aWx0IHByb3ZpZGVyIGRvZXMgbm90IGV4aXN0IGZvciB0aGUgZ2l2ZW4gY29uc3RyYWludHMuYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4aXN0cztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdHJ5R2V0UGFja2FnZU5hbWUoXG4gICAgY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50LFxuICAgIHVzZUNka3RuOiBib29sZWFuLFxuICApOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IG5wbVBhY2thZ2VOYW1lID0gYXdhaXQgZ2V0TnBtUGFja2FnZU5hbWUoY29uc3RyYWludCwgdXNlQ2RrdG4pO1xuXG4gICAgaWYgKCFucG1QYWNrYWdlTmFtZSkgcmV0dXJuO1xuXG4gICAgcmV0dXJuIHRoaXMudHJ5R2V0TGFuZ3VhZ2VQYWNrYWdlTmFtZShucG1QYWNrYWdlTmFtZSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHRyeUdldExhbmd1YWdlUGFja2FnZU5hbWUoXG4gICAgbnBtUGFja2FnZU5hbWU6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBwcmVidWlsdFByb3ZpZGVyUmVwb3NpdG9yeSA9XG4gICAgICBhd2FpdCBnZXRQcmVidWlsdFByb3ZpZGVyUmVwb3NpdG9yeU5hbWUobnBtUGFja2FnZU5hbWUpO1xuXG4gICAgcmV0dXJuIHRoaXMuY29udmVydFBhY2thZ2VOYW1lKFxuICAgICAgbnBtUGFja2FnZU5hbWUsXG4gICAgICBwcmVidWlsdFByb3ZpZGVyUmVwb3NpdG9yeSxcbiAgICAgIG5wbVBhY2thZ2VOYW1lLnN0YXJ0c1dpdGgoXCJAY2RrdG5cIiksXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIGdldE1hdGNoaW5nUHJvdmlkZXJWZXJzaW9uKGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCkge1xuICAgIGNvbnN0IHByZWJ1aWx0UHJvdmlkZXJOcG1WZXJzaW9ucyA9IGF3YWl0IGdldFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9ucyhcbiAgICAgIGNvbnN0cmFpbnQsXG4gICAgICB0aGlzLmNka3RmVmVyc2lvbixcbiAgICApO1xuICAgIGlmICghcHJlYnVpbHRQcm92aWRlck5wbVZlcnNpb25zKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoXG4gICAgICAgIGBObyBwcmUtYnVpbHQgcHJvdmlkZXIgZm91bmQgZm9yICR7Y29uc3RyYWludC5zb3VyY2V9IHdpdGggdmVyc2lvbiBjb25zdHJhaW50ICR7Y29uc3RyYWludC52ZXJzaW9ufSBhbmQgY2RrdGYgdmVyc2lvbiAke3RoaXMuY2RrdGZWZXJzaW9ufWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhY2thZ2VWZXJzaW9uID0gYXdhaXQgdGhpcy5nZXRMYW5ndWFnZVNwZWNpZmljUGFja2FnZVZlcnNpb24oXG4gICAgICBwcmVidWlsdFByb3ZpZGVyTnBtVmVyc2lvbnMsXG4gICAgKTtcblxuICAgIGlmICghcGFja2FnZVZlcnNpb24pIHtcbiAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgYE5vIHByZS1idWlsdCBwcm92aWRlciBmb3VuZCBmb3IgJHtjb25zdHJhaW50LnNvdXJjZX0gd2l0aCB2ZXJzaW9uIGNvbnN0cmFpbnQgJHtjb25zdHJhaW50LnZlcnNpb259IGFuZCBjZGt0ZiB2ZXJzaW9uICR7dGhpcy5jZGt0ZlZlcnNpb259IGZvciBsYW5ndWFnZSAke3RoaXMudGFyZ2V0TGFuZ3VhZ2V9LmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBwYWNrYWdlVmVyc2lvbjtcbiAgfVxuXG4gIGFzeW5jIGFkZFByZWJ1aWx0UHJvdmlkZXIoY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50LCBzaWxlbnQgPSBmYWxzZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBhZGRpbmcgcHJlLWJ1aWx0IHByb3ZpZGVyICR7Y29uc3RyYWludC5zb3VyY2V9IHdpdGggdmVyc2lvbiBjb25zdHJhaW50ICR7Y29uc3RyYWludC52ZXJzaW9ufSBmb3IgY2RrdGYgdmVyc2lvbiAke3RoaXMuY2RrdGZWZXJzaW9ufWAsXG4gICAgKTtcblxuICAgIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gYXdhaXQgdGhpcy5nZXRNYXRjaGluZ1Byb3ZpZGVyVmVyc2lvbihjb25zdHJhaW50KTtcbiAgICBhd2FpdCB0aGlzLnBhY2thZ2VNYW5hZ2VyLmFkZFBhY2thZ2UobmFtZSwgdmVyc2lvbiwgc2lsZW50KTtcblxuICAgIC8vIFRPRE86IG1vcmUgZGVidWcgbG9nc1xuICB9XG5cbiAgLy8gVGhlIHZlcnNpb24gd2UgdXNlIGZvciBucG0gbWlnaHQgZGlmZmVyIGZyb20gb3RoZXIgcmVnaXN0cmllc1xuICAvLyBUaGlzIGhhcHBlbnMgbW9zdGx5IGluIGNhc2VzIHdoZXJlIGEgcHJvdmlkZXIgdXBkYXRlIGZhaWxlZCB0byBwdWJsaXNoIHRvIG9uZSBvZiB0aGUgcmVnaXN0cmllc1xuICAvLyBJbiB0aGF0IGNhc2Ugd2UgdXNlIHRoZSBsYXRlc3QgdmVyc2lvbiB0aGF0IHdhcyBwdWJsaXNoZWQgc3VjY2Vzc2Z1bGx5IGFuZCB3b3JrcyB3aXRoIHRoZSBjdXJyZW50IGNka3RmIHJlbGVhc2VcbiAgcHJpdmF0ZSBhc3luYyBnZXRMYW5ndWFnZVNwZWNpZmljUGFja2FnZVZlcnNpb24oXG4gICAgcHJlYnVpbHRQcm92aWRlck5wbVZlcnNpb25zOiB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXSxcbiAgKTogUHJvbWlzZTx7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH0gfCBudWxsPiB7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgXCJGb3VuZCBwb3NzaWJseSBtYXRjaGluZyB2ZXJzaW9ucyAocmVsZWFzZWQgb24gbnBtKTogXCIsXG4gICAgICBwcmVidWlsdFByb3ZpZGVyTnBtVmVyc2lvbnMsXG4gICAgKTtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBcIlNlYXJjaGluZyB0aHJvdWdoIHBhY2thZ2UgbWFuYWdlciB0byBmaW5kIGxhdGVzdCBhdmFpbGFibGUgdmVyc2lvbiBmb3IgZ2l2ZW4gbGFuZ3VhZ2VcIixcbiAgICApO1xuXG4gICAgZm9yIChjb25zdCB7IG5hbWUsIHZlcnNpb24gfSBvZiBwcmVidWlsdFByb3ZpZGVyTnBtVmVyc2lvbnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxhbmd1YWdlUGFja2FnZU5hbWUgPSBhd2FpdCB0aGlzLnRyeUdldExhbmd1YWdlUGFja2FnZU5hbWUobmFtZSk7XG4gICAgICAgIGlmICghbGFuZ3VhZ2VQYWNrYWdlTmFtZSkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgaXNBdmFpbGFibGUgPSBhd2FpdCB0aGlzLnBhY2thZ2VNYW5hZ2VyLmlzTnBtVmVyc2lvbkF2YWlsYWJsZShcbiAgICAgICAgICBsYW5ndWFnZVBhY2thZ2VOYW1lLFxuICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpc0F2YWlsYWJsZSkge1xuICAgICAgICAgIHJldHVybiB7IG5hbWU6IGxhbmd1YWdlUGFja2FnZU5hbWUsIHZlcnNpb24gfTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICAgIGBDb3VsZCBub3QgZmluZCB2ZXJzaW9uICR7dmVyc2lvbn0gZm9yIHBhY2thZ2UgJHtuYW1lfTogJyR7ZXJyfScuIFNraXBwaW5nLi4uYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBhc3luYyBhZGRMb2NhbFByb3ZpZGVyKGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCkge1xuICAgIGxvZ2dlci5pbmZvKFxuICAgICAgYEFkZGluZyBsb2NhbCBwcm92aWRlciAke2NvbnN0cmFpbnQuc291cmNlfSB3aXRoIHZlcnNpb24gY29uc3RyYWludCAke2NvbnN0cmFpbnQudmVyc2lvbn0gdG8gY2RrdGYuanNvbmAsXG4gICAgKTtcblxuICAgIGlmICghY29uc3RyYWludC52ZXJzaW9uICYmIGNvbnN0cmFpbnQuaXNGcm9tVGVycmFmb3JtUmVnaXN0cnkoKSkge1xuICAgICAgY29uc3QgdiA9IGF3YWl0IGdldExhdGVzdFZlcnNpb24oY29uc3RyYWludCk7XG4gICAgICBpZiAodikge1xuICAgICAgICBjb25zdHJhaW50ID0gbmV3IFByb3ZpZGVyQ29uc3RyYWludChcbiAgICAgICAgICBjb25zdHJhaW50LnNvdXJjZSxcbiAgICAgICAgICAvLyBcIjEuMy4yXCIgLT4gXCJ+PiAxLjNcIlxuICAgICAgICAgIGB+PiAke3Yuc3BsaXQoXCIuXCIpLnNsaWNlKDAsIDIpLmpvaW4oXCIuXCIpfWAsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoXG4gICAgICAgICAgYENvdWxkIG5vdCBmaW5kIGEgdmVyc2lvbiBmb3IgdGhlIHByb3ZpZGVyICcke2NvbnN0cmFpbnR9JyBpbiB0aGUgcHVibGljIHJlZ2lzdHJ5LiBUaGlzIGNvdWxkIGJlIGR1ZSB0byBhIHR5cG8sIHBsZWFzZSB0YWtlIGEgbG9vayBhdCBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9icm93c2UvcHJvdmlkZXJzIHRvIGZpbmQgYWxsIHN1cHBvcnRlZCBwcm92aWRlcnMuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBuZXcgQ2RrdGZDb25maWdNYW5hZ2VyKCkuYWRkUHJvdmlkZXIoY29uc3RyYWludCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYW4gTlBNIHBhY2thZ2UgbmFtZSBvZiBhIHByZS1idWlsdCBwcm92aWRlciBwYWNrYWdlIHRvIHRoZSBuYW1lIGluIHRoZSB0YXJnZXQgbGFuZ3VhZ2VcbiAgICovXG4gIHByaXZhdGUgY29udmVydFBhY2thZ2VOYW1lKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICByZXBvc2l0b3J5OiBzdHJpbmcsXG4gICAgdXNlQ2RrdG46IGJvb2xlYW4sXG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVzZUNka3RuXG4gICAgICA/IHRoaXMuY29udmVydFBhY2thZ2VOYW1lQ2RrdG4obmFtZSwgcmVwb3NpdG9yeSlcbiAgICAgIDogdGhpcy5jb252ZXJ0UGFja2FnZU5hbWVDZGt0ZihuYW1lLCByZXBvc2l0b3J5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBOUE0gcGFja2FnZSBuYW1lIG9mIGEgcHJlLWJ1aWx0IHByb3ZpZGVyIHBhY2thZ2UgdG8gdGhlIG5hbWUgaW4gdGhlIHRhcmdldCBsYW5ndWFnZVxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0UGFja2FnZU5hbWVDZGt0ZihuYW1lOiBzdHJpbmcsIHJlcG9zaXRvcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcHJvdmlkZXJOYW1lID0gbmFtZS5yZXBsYWNlKFwiQGNka3RmL3Byb3ZpZGVyLVwiLCBcIlwiKTtcbiAgICBzd2l0Y2ggKHRoaXMudGFyZ2V0TGFuZ3VhZ2UpIHtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuR086IC8vIGUuZy4gZ2l0aHViLmNvbS9jZGt0Zi9jZGt0Zi1wcm92aWRlci1vcGVudGVsZWtvbWNsb3VkLWdvL29wZW50ZWxla29tY2xvdWRcbiAgICAgICAgaWYgKHJlcG9zaXRvcnkpIHtcbiAgICAgICAgICByZXR1cm4gYCR7cmVwb3NpdG9yeX0tZ28vJHtwcm92aWRlck5hbWV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBgZ2l0aHViLmNvbS9jZGt0Zi9jZGt0Zi1wcm92aWRlci0ke3Byb3ZpZGVyTmFtZX0tZ28vJHtwcm92aWRlck5hbWV9YDtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuVFlQRVNDUklQVDogLy8gZS5nLiBAY2RrdGYvcHJvdmlkZXItcmFuZG9tXG4gICAgICAgIHJldHVybiBuYW1lOyAvLyBhbHJlYWR5IHRoZSBjb3JyZWN0IG5hbWVcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuQ1NIQVJQOiAvLyBlLmcuIEhhc2hpQ29ycC5DZGt0Zi5Qcm92aWRlcnMuT3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gYEhhc2hpQ29ycC5DZGt0Zi5Qcm92aWRlcnMuYCArIHRvUGFzY2FsQ2FzZShwcm92aWRlck5hbWUpO1xuICAgICAgY2FzZSBMYW5ndWFnZS5KQVZBOiAvLyBlLmcuIGNvbS5oYXNoaWNvcnAub3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gYGNvbS5oYXNoaWNvcnAuY2RrdGYtcHJvdmlkZXItJHtwcm92aWRlck5hbWV9YDtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuUFlUSE9OOiAvLyBlLmcuIGNka3RmLWNka3RmLXByb3ZpZGVyLW9wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIGBjZGt0Zi1jZGt0Zi1wcm92aWRlci0ke3Byb3ZpZGVyTmFtZX1gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBjb252ZXJ0aW5nIHBhY2thZ2UgbmFtZSBmb3IgbGFuZ3VhZ2UgJHt0aGlzLnRhcmdldExhbmd1YWdlfSBub3QgaW1wbGVtZW50ZWQgeWV0YCxcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYW4gTlBNIHBhY2thZ2UgbmFtZSBvZiBhIHByZS1idWlsdCBwcm92aWRlciBwYWNrYWdlIHRvIHRoZSBuYW1lIGluIHRoZSB0YXJnZXQgbGFuZ3VhZ2VcbiAgICovXG4gIHByaXZhdGUgY29udmVydFBhY2thZ2VOYW1lQ2RrdG4oXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHJlcG9zaXRvcnk6IHN0cmluZyxcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBwcm92aWRlck5hbWUgPSBuYW1lLnJlcGxhY2UoXCJAY2RrdG4vcHJvdmlkZXItXCIsIFwiXCIpO1xuICAgIHN3aXRjaCAodGhpcy50YXJnZXRMYW5ndWFnZSkge1xuICAgICAgY2FzZSBMYW5ndWFnZS5HTzogLy8gZS5nLiBnaXRodWIuY29tL2Nka3RmL2Nka3RmLXByb3ZpZGVyLW9wZW50ZWxla29tY2xvdWQtZ28vb3BlbnRlbGVrb21jbG91ZFxuICAgICAgICBpZiAocmVwb3NpdG9yeSkge1xuICAgICAgICAgIHJldHVybiBgJHtyZXBvc2l0b3J5fS1nby8ke3Byb3ZpZGVyTmFtZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGBnaXRodWIuY29tL2Nka3RuLWlvL2Nka3RuLXByb3ZpZGVyLSR7cHJvdmlkZXJOYW1lfS1nby8ke3Byb3ZpZGVyTmFtZX1gO1xuICAgICAgY2FzZSBMYW5ndWFnZS5UWVBFU0NSSVBUOiAvLyBlLmcuIEBjZGt0Zi9wcm92aWRlci1yYW5kb21cbiAgICAgICAgcmV0dXJuIG5hbWU7IC8vIGFscmVhZHkgdGhlIGNvcnJlY3QgbmFtZVxuICAgICAgY2FzZSBMYW5ndWFnZS5DU0hBUlA6IC8vIGUuZy4gSGFzaGlDb3JwLkNka3RmLlByb3ZpZGVycy5PcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIHJldHVybiBgSW8uQ2RrdG4uUHJvdmlkZXJzLmAgKyB0b1Bhc2NhbENhc2UocHJvdmlkZXJOYW1lKTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuSkFWQTogLy8gZS5nLiBjb20uaGFzaGljb3JwLm9wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIGBpby5jZGt0bi5jZGt0bi1wcm92aWRlci0ke3Byb3ZpZGVyTmFtZX1gO1xuICAgICAgY2FzZSBMYW5ndWFnZS5QWVRIT046IC8vIGUuZy4gY2RrdGYtY2RrdGYtcHJvdmlkZXItb3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gYGNka3RuLXByb3ZpZGVyLSR7cHJvdmlkZXJOYW1lfWA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGNvbnZlcnRpbmcgcGFja2FnZSBuYW1lIGZvciBsYW5ndWFnZSAke3RoaXMudGFyZ2V0TGFuZ3VhZ2V9IG5vdCBpbXBsZW1lbnRlZCB5ZXRgLFxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBwYWNrYWdlIG5hbWUgb2YgYSBwcmUtYnVpbHQgcHJvdmlkZXIgcGFja2FnZSBpbiB0YXJnZXQgbGFuZ3VhZ2UgdG8gdGhlIG5hbWUgaW4gbnBtXG4gICAqIEludmVyc2Ugb2Y6IGBjb252ZXJ0UGFja2FnZU5hbWVgXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRGcm9tUGFja2FnZU5hbWVUb05wbShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlZ2V4ZXMgPSB7XG4gICAgICBbTGFuZ3VhZ2UuR09dOlxuICAgICAgICAvZ2l0aHViLmNvbVxcLyg/OmNka3RmfGhhc2hpY29ycHxjZGt0bi1pbylcXC9jZGt0KFtmbl0pLXByb3ZpZGVyLSguKyktZ29cXC8vaSxcbiAgICAgIFtMYW5ndWFnZS5UWVBFU0NSSVBUXTogLyguKykvaSxcbiAgICAgIFtMYW5ndWFnZS5DU0hBUlBdOiAvKD86SGFzaGlDb3JwfElvKVxcLkNka3QoW2ZuXSlcXC5Qcm92aWRlcnNcXC4oLispL2ksXG4gICAgICBbTGFuZ3VhZ2UuSkFWQV06XG4gICAgICAgIC8oPzpjb21cXC5oYXNoaWNvcnB8aW9cXC5jZGt0bilcXC5jZGt0KFtmbl0pLXByb3ZpZGVyLSguKykvaSxcbiAgICAgIFtMYW5ndWFnZS5QWVRIT05dOiAvKD86Y2RrdGYtKT9jZGt0KFtmbl0pLXByb3ZpZGVyLSguKykvaSxcbiAgICB9O1xuICAgIGNvbnN0IHJlZ2V4ID0gcmVnZXhlc1t0aGlzLnRhcmdldExhbmd1YWdlXTtcbiAgICBpZiAoIXJlZ2V4KSB7XG4gICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoXCJMYW5ndWFnZSBub3Qgc3VwcG9ydGVkIGZvciBwcmUtYnVpbHQgcHJvdmlkZXJzXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoID0gcmVnZXguZXhlYyhuYW1lKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBhY2thZ2UgbmFtZSBpcyBub3QgaW4gZXhwZWN0ZWQgZm9ybWF0OiAke25hbWV9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgbnBtUGFja2FnZVByZWZpeCA9IGBAY2RrdCR7bWF0Y2hbMV19L3Byb3ZpZGVyLWA7XG5cbiAgICBzd2l0Y2ggKHRoaXMudGFyZ2V0TGFuZ3VhZ2UpIHtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuR086IC8vIGUuZy4gZ2l0aHViLmNvbS9jZGt0Zi9jZGt0Zi1wcm92aWRlci1vcGVudGVsZWtvbWNsb3VkLWdvL29wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIG5wbVBhY2thZ2VQcmVmaXggKyBtYXRjaFsyXTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuVFlQRVNDUklQVDogLy8gZS5nLiBAY2RrdGYvcHJvdmlkZXItcmFuZG9tXG4gICAgICAgIHJldHVybiBtYXRjaFsxXTsgLy8gYWxyZWFkeSB0aGUgY29ycmVjdCBuYW1lXG4gICAgICBjYXNlIExhbmd1YWdlLkNTSEFSUDogLy8gZS5nLiBIYXNoaUNvcnAuQ2RrdGYuUHJvdmlkZXJzLk9wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIG5wbVBhY2thZ2VQcmVmaXggKyB0b1NuYWtlQ2FzZShtYXRjaFsyXSk7XG4gICAgICBjYXNlIExhbmd1YWdlLkpBVkE6IC8vIGUuZy4gY29tLmhhc2hpY29ycC5vcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIHJldHVybiBucG1QYWNrYWdlUHJlZml4ICsgbWF0Y2hbMl07XG4gICAgICBjYXNlIExhbmd1YWdlLlBZVEhPTjogLy8gZS5nLiBjZGt0Zi1jZGt0Zi1wcm92aWRlci1vcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIHJldHVybiBucG1QYWNrYWdlUHJlZml4ICsgbWF0Y2hbMl07XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGNvbnZlcnRpbmcgcGFja2FnZSBuYW1lIGZvciBsYW5ndWFnZSAke3RoaXMudGFyZ2V0TGFuZ3VhZ2V9IG5vdCBpbXBsZW1lbnRlZCB5ZXRgLFxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhbGxQcm92aWRlcnMoKSB7XG4gICAgY29uc3QgY2RrdGZKc29uID0gQ2RrdGZDb25maWcucmVhZCgpO1xuICAgIGNvbnN0IGxvY2FsVmVyc2lvbnMgPSBuZXcgTG9jYWxQcm92aWRlclZlcnNpb25zKCk7XG5cbiAgICBjb25zdCBsb2NhbFByb3ZpZGVyQ29uZmlncyA9IGNka3RmSnNvbi50ZXJyYWZvcm1Qcm92aWRlcnM7XG4gICAgY29uc3QgcHJlYnVpbHRQcm92aWRlckNvbmZpZ3MgPVxuICAgICAgYXdhaXQgdGhpcy5wYWNrYWdlTWFuYWdlci5saXN0UHJvdmlkZXJQYWNrYWdlcygpO1xuXG4gICAgY29uc3QgcHJlYnVpbHRQcm92aWRlcnNJbmZvID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBwcmVidWlsdFByb3ZpZGVyQ29uZmlncy5tYXAoYXN5bmMgKHByZWJ1aWx0UHJvdmlkZXJDb25maWcpID0+IHtcbiAgICAgICAgY29uc3QgcGFja2FnZU5hbWUgPSB0aGlzLmNvbnZlcnRGcm9tUGFja2FnZU5hbWVUb05wbShcbiAgICAgICAgICBwcmVidWlsdFByb3ZpZGVyQ29uZmlnLm5hbWUsXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgcHJvdmlkZXJJbmZvcm1hdGlvbiA9IGF3YWl0IGdldFByZWJ1aWx0UHJvdmlkZXJWZXJzaW9uSW5mb3JtYXRpb24oXG4gICAgICAgICAgcGFja2FnZU5hbWUsXG4gICAgICAgICAgcHJlYnVpbHRQcm92aWRlckNvbmZpZy52ZXJzaW9uLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4ucHJvdmlkZXJJbmZvcm1hdGlvbixcbiAgICAgICAgICBwYWNrYWdlTmFtZTogcHJlYnVpbHRQcm92aWRlckNvbmZpZy5uYW1lLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gbmV3IExvY2FsUHJvdmlkZXJDb25zdHJhaW50cygpO1xuXG4gICAgY29uc3QgbG9jYWxQcm92aWRlcnNJbmZvID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBsb2NhbFByb3ZpZGVyQ29uZmlncy5tYXAoYXN5bmMgKGxvY2FsUHJvdmlkZXJDb25maWcpID0+IHtcbiAgICAgICAgY29uc3QgY29uc3RyYWludCA9XG4gICAgICAgICAgUHJvdmlkZXJDb25zdHJhaW50LmZyb21Db25maWdFbnRyeShsb2NhbFByb3ZpZGVyQ29uZmlnKTtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IGF3YWl0IGxvY2FsVmVyc2lvbnMudmVyc2lvbkZvclByb3ZpZGVyKFxuICAgICAgICAgIGNvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWUsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnRWYWx1ZSA9IGF3YWl0IGNvbnN0cmFpbnRzLmNvbnN0cmFpbnRGb3JQcm92aWRlcihcbiAgICAgICAgICBjb25zdHJhaW50LnNpbXBsaWZpZWROYW1lLFxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcHJvdmlkZXJOYW1lOiBjb25zdHJhaW50LnNpbXBsaWZpZWROYW1lLFxuICAgICAgICAgIHByb3ZpZGVyQ29uc3RyYWludDogY29uc3RyYWludFZhbHVlIHx8IGNvbnN0cmFpbnQudmVyc2lvbixcbiAgICAgICAgICBwcm92aWRlclZlcnNpb246IHZlcnNpb24sXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxvY2FsOiBsb2NhbFByb3ZpZGVyc0luZm8sXG4gICAgICBwcmVidWlsdDogcHJlYnVpbHRQcm92aWRlcnNJbmZvLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
393
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwZW5kZW5jeS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kZXBlbmRlbmNpZXMvZGVwZW5kZW5jeS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyw0Q0FLd0I7QUFDeEIseUNBQXNEO0FBQ3RELGtEQUE4QztBQUM5QyxpRUFBNEQ7QUFDNUQsdURBQW1EO0FBQ25ELDZEQUs4QjtBQUM5QixpREFBa0Q7QUFDbEQsK0RBQWlFO0FBQ2pFLCtDQUFpQztBQUNqQyx3RUFBbUU7QUFDbkUsOEVBQXlFO0FBRXpFLGlGQUFpRjtBQUNwRSxRQUFBLGdCQUFnQixHQUFHLHVCQUF1QixDQUFDO0FBQzNDLFFBQUEsaUJBQWlCLEdBQUcsV0FBVyxDQUFDO0FBQzdDLFNBQVMsdUJBQXVCLENBQUMsTUFBYztJQUM3Qyx3Q0FBd0M7SUFDeEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQzdDLFFBQVEsT0FBTyxFQUFFLENBQUM7UUFDaEIsS0FBSyxDQUFDO1lBQ0osT0FBTyxHQUFHLHdCQUFnQixJQUFJLHlCQUFpQixJQUFJLE1BQU0sRUFBRSxDQUFDO1FBQzlELEtBQUssQ0FBQztZQUNKLE9BQU8sR0FBRyx3QkFBZ0IsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUN6QztZQUNFLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBYSxrQkFBa0I7SUFPN0IsbUVBQW1FO0lBQ25FLHNFQUFzRTtJQUN0RSw0R0FBNEc7SUFDNUcsWUFDRSxNQUFjLEVBQ0UsT0FBMkI7UUFBM0IsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFFM0MsSUFBSSxDQUFDLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMs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QyxHQUFHLENBQzFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsRUFBRTtZQUNyRCxNQUFNLFVBQVUsR0FDZCxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUMxRCxNQUFNLE9BQU8sR0FBRyxNQUFNLGFBQWEsQ0FBQyxrQkFBa0IsQ0FDcEQsVUFBVSxDQUFDLGNBQWMsQ0FDMUIsQ0FBQztZQUNGLE1BQU0sZUFBZSxHQUFHLE1BQU0sV0FBVyxDQUFDLHFCQUFxQixDQUM3RCxVQUFVLENBQUMsY0FBYyxDQUMxQixDQUFDO1lBRUYsT0FBTztnQkFDTCxZQUFZLEVBQUUsVUFBVSxDQUFDLGNBQWM7Z0JBQ3ZDLGtCQUFrQixFQUFFLGVBQWUsSUFBSSxVQUFVLENBQUMsT0FBTztnQkFDekQsZUFBZSxFQUFFLE9BQU87YUFDekIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7UUFFRixPQUFPO1lBQ0wsS0FBSyxFQUFFLGtCQUFrQjtZQUN6QixRQUFRLEVBQUUscUJBQXFCO1NBQ2hDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUExWkQsOENBMFpDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7XG4gIExhbmd1YWdlLFxuICBFcnJvcnMsXG4gIGxvZ2dlcixcbiAgVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnQsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgdG9QYXNjYWxDYXNlLCB0b1NuYWtlQ2FzZSB9IGZyb20gXCJjb2RlbWFrZXJcIjtcbmltcG9ydCB7IENka3RmQ29uZmlnIH0gZnJvbSBcIi4uL2Nka3RmLWNvbmZpZ1wiO1xuaW1wb3J0IHsgQ2RrdGZDb25maWdNYW5hZ2VyIH0gZnJvbSBcIi4vY2RrdGYtY29uZmlnLW1hbmFnZXJcIjtcbmltcG9ydCB7IFBhY2thZ2VNYW5hZ2VyIH0gZnJvbSBcIi4vcGFja2FnZS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBnZXROcG1QYWNrYWdlTmFtZSxcbiAgZ2V0UHJlYnVpbHRQcm92aWRlclJlcG9zaXRvcnlOYW1lLFxuICBnZXRQcmVidWlsdFByb3ZpZGVyVmVyc2lvbkluZm9ybWF0aW9uLFxuICBnZXRQcmVidWlsdFByb3ZpZGVyVmVyc2lvbnMsXG59IGZyb20gXCIuL3ByZWJ1aWx0LXByb3ZpZGVyc1wiO1xuaW1wb3J0IHsgZ2V0TGF0ZXN0VmVyc2lvbiB9IGZyb20gXCIuL3JlZ2lzdHJ5LWFwaVwiO1xuaW1wb3J0IHsgdmVyc2lvbk1hdGNoZXNDb25zdHJhaW50IH0gZnJvbSBcIi4vdmVyc2lvbi1jb25zdHJhaW50c1wiO1xuaW1wb3J0ICogYXMgc2VtdmVyIGZyb20gXCJzZW12ZXJcIjtcbmltcG9ydCB7IExvY2FsUHJvdmlkZXJWZXJzaW9ucyB9IGZyb20gXCIuLi9sb2NhbC1wcm92aWRlci12ZXJzaW9uc1wiO1xuaW1wb3J0IHsgTG9jYWxQcm92aWRlckNvbnN0cmFpbnRzIH0gZnJvbSBcIi4uL2xvY2FsLXByb3ZpZGVyLWNvbnN0cmFpbnRzXCI7XG5cbi8vIHJlZjogaHR0cHM6Ly93d3cudGVycmFmb3JtLmlvL2xhbmd1YWdlL3Byb3ZpZGVycy9yZXF1aXJlbWVudHMjc291cmNlLWFkZHJlc3Nlc1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfSE9TVE5BTUUgPSBcInJlZ2lzdHJ5LnRlcnJhZm9ybS5pb1wiO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTkFNRVNQQUNFID0gXCJoYXNoaWNvcnBcIjtcbmZ1bmN0aW9uIG5vcm1hbGl6ZVByb3ZpZGVyU291cmNlKHNvdXJjZTogc3RyaW5nKSB7XG4gIC8vIHJldHVybnMgPEhPU1ROQU1FPi88TkFNRVNQQUNFPi88VFlQRT5cbiAgY29uc3Qgc2xhc2hlcyA9IHNvdXJjZS5zcGxpdChcIi9cIikubGVuZ3RoIC0gMTtcbiAgc3dpdGNoIChzbGFzaGVzKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIGAke0RFRkFVTFRfSE9TVE5BTUV9LyR7REVGQVVMVF9OQU1FU1BBQ0V9LyR7c291cmNlfWA7XG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIGAke0RFRkFVTFRfSE9TVE5BTUV9LyR7c291cmNlfWA7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzb3VyY2U7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFByb3ZpZGVyQ29uc3RyYWludCB7XG4gIC8qKlxuICAgKiBub3JtYWxpemVkIHNvdXJjZSBvZiB0aGUgcHJvdmlkZXJcbiAgICogZS5nLiBcInJlZ2lzdHJ5LnRlcnJhZm9ybS5pby9oYXNoaWNvcnAvYXdzXCJcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzb3VyY2U6IHN0cmluZztcblxuICAvLyBUT0RPOiBhZGQgZXhhbXBsZXMgdG8gY2xpIGNvbW1hbmQgZGVzY3JpcHRpb24gKGkuZS4gPSx+Pi4+IGV0Yy4pXG4gIC8vIGlmIG5vIHZlcnNpb24gY29uc3RyYWludCBpcyBzcGVjaWZpZWQsIHdlIGFzc3VtZSB0aGUgbGF0ZXN0IHZlcnNpb25cbiAgLy8gaWYgc3BlY2lmaWMgdmVyc2lvbiBpcyBzcGVjaWZpZWQgd2l0aG91dCBlLmcuID0sIHdlIGFsbG93IHBhdGNoIGxldmVsIGluY3JlbWVudHMgKGUuZy4gfj4yLjEyIGZvciBcIjIuMTJcIilcbiAgY29uc3RydWN0b3IoXG4gICAgc291cmNlOiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgKSB7XG4gICAgdGhpcy5zb3VyY2UgPSBub3JtYWxpemVQcm92aWRlclNvdXJjZShzb3VyY2UpO1xuICB9XG5cbiAgc3RhdGljIGZyb21Db25maWdFbnRyeShcbiAgICBwcm92aWRlcjogc3RyaW5nIHwgVGVycmFmb3JtRGVwZW5kZW5jeUNvbnN0cmFpbnQsXG4gICk6IFByb3ZpZGVyQ29uc3RyYWludCB7XG4gICAgaWYgKHR5cGVvZiBwcm92aWRlciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgW3NyYywgdmVyc2lvbl0gPSBwcm92aWRlci5zcGxpdChcIkBcIik7XG4gICAgICByZXR1cm4gbmV3IFByb3ZpZGVyQ29uc3RyYWludChcbiAgICAgICAgc3JjLnRyaW0oKSxcbiAgICAgICAgdmVyc2lvbiA/IHZlcnNpb24udHJpbSgpIDogdW5kZWZpbmVkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBzcmMgPVxuICAgICAgKHByb3ZpZGVyLm5hbWVzcGFjZSA/IGAke3Byb3ZpZGVyLm5hbWVzcGFjZX0vYCA6IFwiXCIpICtcbiAgICAgIChwcm92aWRlci5zb3VyY2UgfHwgcHJvdmlkZXIubmFtZSk7XG5cbiAgICByZXR1cm4gbmV3IFByb3ZpZGVyQ29uc3RyYWludChzcmMsIHByb3ZpZGVyLnZlcnNpb24pO1xuICB9XG5cbiAgcHVibGljIGlzRnJvbVRlcnJhZm9ybVJlZ2lzdHJ5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhvc3RuYW1lID09PSBERUZBVUxUX0hPU1ROQU1FO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIHByb3ZpZGVyXG4gICAqIGUuZy4gXCJoYXNoaWNvcnBcIiBvciBcImtyZXV6d2Vya2VyXCJcbiAgICovXG4gIHB1YmxpYyBnZXQgbmFtZXNwYWNlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlLnNwbGl0KFwiL1wiKVsxXTtcbiAgfVxuXG4gIC8qKlxuICAgKiB0aGUgbmFtZSBvZiB0aGUgcHJvdmlkZXJcbiAgICogZS5nLiBcImF3c1wiXG4gICAqL1xuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2Uuc3BsaXQoXCIvXCIpWzJdO1xuICB9XG5cbiAgLyoqXG4gICAqIHRoZSBob3N0bmFtZSBvZiB0aGUgcHJvdmlkZXJcbiAgICogZS5nLiBcInJlZ2lzdHJ5LnRlcnJhZm9ybS5pb1wiXG4gICAqL1xuICBwdWJsaWMgZ2V0IGhvc3RuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlLnNwbGl0KFwiL1wiKVswXTtcbiAgfVxuXG4gIC8qKlxuICAgKiByZXR1cm5zIGEgc2ltcGxpZmllZCBwcm92aWRlciBuYW1lLCBkcm9wcGluZyBuYW1lc3BhY2UgYW5kIGhvc3RuYW1lXG4gICAqIGlmIHRoZXkgbWF0Y2ggdGhlIGRlZmF1bHRzXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNpbXBsaWZpZWROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlXG4gICAgICAuc3BsaXQoXCIvXCIpXG4gICAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSBERUZBVUxUX0hPU1ROQU1FICYmIHBhcnQgIT09IERFRkFVTFRfTkFNRVNQQUNFKVxuICAgICAgLmpvaW4oXCIvXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIGNoZWNrcyBpZiB0aGUgdmVyc2lvbiBjb25zdHJhaW50IG1hdGNoZXMgdGhlIGdpdmVuIHZlcnNpb25cbiAgICogQHBhcmFtIHZlcnNpb24gYW4gYWN0dWFsIHZlcnNpb24gKGUuZy4gXCI0LjEyLjFcIilcbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdmVyc2lvbiBpcyBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnN0cmFpbnRcbiAgICovXG4gIHB1YmxpYyBtYXRjaGVzVmVyc2lvbih2ZXJzaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy52ZXJzaW9uKSB7XG4gICAgICByZXR1cm4gdmVyc2lvbk1hdGNoZXNDb25zdHJhaW50KHZlcnNpb24sIHRoaXMudmVyc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHVibGljIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBgJHt0aGlzLnNvdXJjZX0ke3RoaXMudmVyc2lvbiA/IGBAJHt0aGlzLnZlcnNpb259YCA6IFwiXCJ9YDtcbiAgfVxufVxuXG4vKipcbiAqIG1hbmFnZXMgZGVwZW5kZW5jaWVzIG9mIGEgQ0RLVE4gcHJvamVjdCAoZS5nLiB0ZXJyYWZvcm0gcHJvdmlkZXJzKVxuICovXG5leHBvcnQgY2xhc3MgRGVwZW5kZW5jeU1hbmFnZXIge1xuICBwcml2YXRlIHBhY2thZ2VNYW5hZ2VyOiBQYWNrYWdlTWFuYWdlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldExhbmd1YWdlOiBMYW5ndWFnZSxcbiAgICBwcml2YXRlIGNka3RmVmVyc2lvbjogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvamVjdERpcmVjdG9yeTogc3RyaW5nLFxuICApIHtcbiAgICB0aGlzLnBhY2thZ2VNYW5hZ2VyID0gUGFja2FnZU1hbmFnZXIuZm9yTGFuZ3VhZ2UoXG4gICAgICB0YXJnZXRMYW5ndWFnZSxcbiAgICAgIHRoaXMucHJvamVjdERpcmVjdG9yeSxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgYWRkUHJvdmlkZXIoXG4gICAgY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50LFxuICApOiBQcm9taXNlPHsgYWRkZWRMb2NhbFByb3ZpZGVyOiBib29sZWFuIH0+IHtcbiAgICBpZiAoYXdhaXQgdGhpcy5oYXNQcmVidWlsdFByb3ZpZGVyKGNvbnN0cmFpbnQpKSB7XG4gICAgICBhd2FpdCB0aGlzLmFkZFByZWJ1aWx0UHJvdmlkZXIoY29uc3RyYWludCk7XG4gICAgICByZXR1cm4geyBhZGRlZExvY2FsUHJvdmlkZXI6IGZhbHNlIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMuYWRkTG9jYWxQcm92aWRlcihjb25zdHJhaW50KTtcbiAgICAgIHJldHVybiB7IGFkZGVkTG9jYWxQcm92aWRlcjogdHJ1ZSB9O1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZ3JhZGVQcm92aWRlcihjb25zdHJhaW50OiBQcm92aWRlckNvbnN0cmFpbnQpIHtcbiAgICBjb25zb2xlLmxvZyhgVXBncmFkaW5nICR7Y29uc3RyYWludC5zaW1wbGlmaWVkTmFtZX0uLi5gKTtcbiAgICBjb25zdCBjZGt0Zkpzb24gPSBuZXcgQ2RrdGZDb25maWdNYW5hZ2VyKCk7XG4gICAgY29uc3QgcHJlYnVpbHRWZXJzaW9uID0gYXdhaXQgdGhpcy5nZXRDdXJyZW50bHlJbnN0YWxsZWRWZXJzaW9uKGNvbnN0cmFpbnQpO1xuICAgIGlmIChwcmVidWlsdFZlcnNpb24pIHtcbiAgICAgIGF3YWl0IHRoaXMudXBncmFkZVByZWJ1aWx0UHJvdmlkZXIoY29uc3RyYWludCwgcHJlYnVpbHRWZXJzaW9uKTtcbiAgICAgIHJldHVybiB7IGFkZGVkTG9jYWxQcm92aWRlcjogZmFsc2UgfTtcbiAgICB9XG4gICAgaWYgKGF3YWl0IGNka3RmSnNvbi5oYXNQcm92aWRlcihjb25zdHJhaW50KSkge1xuICAgICAgYXdhaXQgY2RrdGZKc29uLnVwZGF0ZVByb3ZpZGVyKGNvbnN0cmFpbnQpO1xuICAgICAgcmV0dXJuIHsgYWRkZWRMb2NhbFByb3ZpZGVyOiB0cnVlIH07XG4gICAgfVxuXG4gICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgYFRyeWluZyB0byB1cGdyYWRlICR7Y29uc3RyYWludC5zaW1wbGlmaWVkTmFtZX0gYnV0IGl0IGlzIG5vdCBpbnN0YWxsZWQsIHBsZWFzZSB1c2UgXCJjZGt0biBwcm92aWRlciBhZGQgJHtjb25zdHJhaW50LnNpbXBsaWZpZWROYW1lfVwiIHRvIGFkZCBpdC5gLFxuICAgICk7XG4gIH1cblxuICBhc3luYyBnZXRDdXJyZW50bHlJbnN0YWxsZWRWZXJzaW9uKGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCkge1xuICAgIGxvZ2dlci5pbmZvKGBDaGVja2luZyBpZiAke2NvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWV9IGlzIGluc3RhbGxlZC4uLmApO1xuICAgIGNvbnN0IGNka3RmUGFja2FnZU5hbWUgPSBhd2FpdCB0aGlzLnRyeUdldFBhY2thZ2VOYW1lKGNvbnN0cmFpbnQsIGZhbHNlKTtcbiAgICBjb25zdCBjZGt0blBhY2thZ2VOYW1lID0gYXdhaXQgdGhpcy50cnlHZXRQYWNrYWdlTmFtZShjb25zdHJhaW50LCB0cnVlKTtcblxuICAgIGlmICghY2RrdGZQYWNrYWdlTmFtZSAmJiAhY2RrdG5QYWNrYWdlTmFtZSkgcmV0dXJuOyAvLyBub3QgYXZhaWxhYmxlIGFzIHByZS1idWlsdCBwcm92aWRlciwgc28gY2FuJ3QgYmUgaW5zdGFsbGVkIGFzIHN1Y2hcblxuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBFeHBlY3RpbmcgcGFja2FnZSAke2Nka3RmUGFja2FnZU5hbWV9IG9yICR7Y2RrdG5QYWNrYWdlTmFtZX0gdG8gYmUgaW5zdGFsbGVkIGlmIHByb3ZpZGVyIGlzIGluc3RhbGxlZCBhcyBwcmUtYnVpbHQgb25lYCxcbiAgICApO1xuXG4gICAgbGV0IGluc3RhbGxlZFBhY2thZ2VzO1xuICAgIHRyeSB7XG4gICAgICBpbnN0YWxsZWRQYWNrYWdlcyA9IGF3YWl0IHRoaXMucGFja2FnZU1hbmFnZXIubGlzdFByb3ZpZGVyUGFja2FnZXMoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsaXN0IHBhY2thZ2VzOiAke2V9YCk7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYEluc3RhbGxlZCBwYWNrYWdlcyBmb3VuZDogJHtKU09OLnN0cmluZ2lmeShpbnN0YWxsZWRQYWNrYWdlcywgbnVsbCwgMil9YCxcbiAgICApO1xuXG4gICAgcmV0dXJuIGluc3RhbGxlZFBhY2thZ2VzLmZpbmQoXG4gICAgICAocGtnKSA9PiBwa2cubmFtZSA9PT0gY2RrdGZQYWNrYWdlTmFtZSB8fCBwa2cubmFtZSA9PT0gY2RrdG5QYWNrYWdlTmFtZSxcbiAgICApPy52ZXJzaW9uO1xuICB9XG5cbiAgYXN5bmMgdXBncmFkZVByZWJ1aWx0UHJvdmlkZXIoXG4gICAgY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50LFxuICAgIGN1cnJlbnRWZXJzaW9uOiBzdHJpbmcsXG4gICkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBTZWFyY2hpbmcgZm9yIGxhdGVzdCBtYXRjaGluZyB2ZXJzaW9uIG9mICR7Y29uc3RyYWludC5zaW1wbGlmaWVkTmFtZX1gLFxuICAgICk7XG5cbiAgICBjb25zdCB7IG5hbWUsIHZlcnNpb24gfSA9IGF3YWl0IHRoaXMuZ2V0TWF0Y2hpbmdQcm92aWRlclZlcnNpb24oY29uc3RyYWludCk7XG5cbiAgICBsb2dnZXIuZGVidWcoYEZvdW5kIHBhY2thZ2UgJHtuYW1lfUAke3ZlcnNpb259YCk7XG4gICAgaWYgKHZlcnNpb24gIT09IGN1cnJlbnRWZXJzaW9uKSB7XG4gICAgICBhd2FpdCB0aGlzLnBhY2thZ2VNYW5hZ2VyLmFkZFBhY2thZ2UobmFtZSwgdmVyc2lvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mICR7bmFtZX0gaXMgYWxyZWFkeSBpbnN0YWxsZWQ6ICR7dmVyc2lvbn1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBoYXNQcmVidWlsdFByb3ZpZGVyKGNvbnN0cmFpbnQ6IFByb3ZpZGVyQ29uc3RyYWludCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBkZXRlcm1pbmluZyB3aGV0aGVyIHByZS1idWlsdCBwcm92aWRlciBleGlzdHMgZm9yICR7Y29uc3RyYWludC5zb3VyY2V9IHdpdGggdmVyc2lvbiBjb25zdHJhaW50ICR7Y29uc3RyYWludC52ZXJzaW9ufSBhbmQgY2RrdGYgdmVyc2lvbiAke3RoaXMuY2RrdGZWZXJzaW9ufWAsXG4gICAgKTtcblxuICAgIGxvZ2dlci5pbmZvKGBDaGVja2luZyB3aGV0aGVyIHByZS1idWlsdCBwcm92aWRlciBleGlzdHMgZm9yIHRoZSBmb2xsb3dpbmcgY29uc3RyYWludHM6XG4gIHByb3ZpZGVyOiAke2NvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWV9XG4gIHZlcnNpb24gOiAke2NvbnN0cmFpbnQudmVyc2lvbiB8fCBcImxhdGVzdFwifVxuICBsYW5ndWFnZTogJHt0aGlzLnRhcmdldExhbmd1YWdlfVxuICBjZGt0ZiAgIDogJHt0aGlzLmNka3RmVmVyc2lvbn1cbmApO1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy50YXJnZXRMYW5ndWFnZSA9PT0gTGFuZ3VhZ2UuR08gJiZcbiAgICAgIHNlbXZlci5sdCh0aGlzLmNka3RmVmVyc2lvbiwgXCIwLjEyLjBcIilcbiAgICApIHtcbiAgICAgIGxvZ2dlci5pbmZvKFxuICAgICAgICBgQmVmb3JlIENES1RGIDAuMTIuMCB0aGVyZSB3ZXJlIG5vIHByZS1idWlsdCBwcm92aWRlcnMgcHVibGlzaGVkIGZvciBHby5gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCB2ID0gYXdhaXQgZ2V0UHJlYnVpbHRQcm92aWRlclZlcnNpb25zKGNvbnN0cmFpbnQsIHRoaXMuY2RrdGZWZXJzaW9uKTtcbiAgICBjb25zdCBleGlzdHMgPSB2ICE9PSBudWxsO1xuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgbG9nZ2VyLmluZm8oYEZvdW5kIHByZS1idWlsdCBwcm92aWRlci5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgIGBQcmUtYnVpbHQgcHJvdmlkZXIgZG9lcyBub3QgZXhpc3QgZm9yIHRoZSBnaXZlbiBjb25zdHJhaW50cy5gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhpc3RzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB0cnlHZXRQYWNrYWdlTmFtZShcbiAgICBjb25zdHJhaW50OiBQcm92aWRlckNvbnN0cmFpbnQsXG4gICAgdXNlQ2RrdG46IGJvb2xlYW4sXG4gICk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgbnBtUGFja2FnZU5hbWUgPSBhd2FpdCBnZXROcG1QYWNrYWdlTmFtZShjb25zdHJhaW50LCB1c2VDZGt0bik7XG5cbiAgICBpZiAoIW5wbVBhY2thZ2VOYW1lKSByZXR1cm47XG5cbiAgICByZXR1cm4gdGhpcy50cnlHZXRMYW5ndWFnZVBhY2thZ2VOYW1lKG5wbVBhY2thZ2VOYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdHJ5R2V0TGFuZ3VhZ2VQYWNrYWdlTmFtZShcbiAgICBucG1QYWNrYWdlTmFtZTogc3RyaW5nLFxuICApOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHByZWJ1aWx0UHJvdmlkZXJSZXBvc2l0b3J5ID1cbiAgICAgIGF3YWl0IGdldFByZWJ1aWx0UHJvdmlkZXJSZXBvc2l0b3J5TmFtZShucG1QYWNrYWdlTmFtZSk7XG5cbiAgICByZXR1cm4gdGhpcy5jb252ZXJ0UGFja2FnZU5hbWUoXG4gICAgICBucG1QYWNrYWdlTmFtZSxcbiAgICAgIHByZWJ1aWx0UHJvdmlkZXJSZXBvc2l0b3J5LFxuICAgICAgbnBtUGFja2FnZU5hbWUuc3RhcnRzV2l0aChcIkBjZGt0blwiKSxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0TWF0Y2hpbmdQcm92aWRlclZlcnNpb24oY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50KSB7XG4gICAgY29uc3QgcHJlYnVpbHRQcm92aWRlck5wbVZlcnNpb25zID0gYXdhaXQgZ2V0UHJlYnVpbHRQcm92aWRlclZlcnNpb25zKFxuICAgICAgY29uc3RyYWludCxcbiAgICAgIHRoaXMuY2RrdGZWZXJzaW9uLFxuICAgICk7XG4gICAgaWYgKCFwcmVidWlsdFByb3ZpZGVyTnBtVmVyc2lvbnMpIHtcbiAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgYE5vIHByZS1idWlsdCBwcm92aWRlciBmb3VuZCBmb3IgJHtjb25zdHJhaW50LnNvdXJjZX0gd2l0aCB2ZXJzaW9uIGNvbnN0cmFpbnQgJHtjb25zdHJhaW50LnZlcnNpb259IGFuZCBjZGt0ZiB2ZXJzaW9uICR7dGhpcy5jZGt0ZlZlcnNpb259YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFja2FnZVZlcnNpb24gPSBhd2FpdCB0aGlzLmdldExhbmd1YWdlU3BlY2lmaWNQYWNrYWdlVmVyc2lvbihcbiAgICAgIHByZWJ1aWx0UHJvdmlkZXJOcG1WZXJzaW9ucyxcbiAgICApO1xuXG4gICAgaWYgKCFwYWNrYWdlVmVyc2lvbikge1xuICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgICBgTm8gcHJlLWJ1aWx0IHByb3ZpZGVyIGZvdW5kIGZvciAke2NvbnN0cmFpbnQuc291cmNlfSB3aXRoIHZlcnNpb24gY29uc3RyYWludCAke2NvbnN0cmFpbnQudmVyc2lvbn0gYW5kIGNka3RmIHZlcnNpb24gJHt0aGlzLmNka3RmVmVyc2lvbn0gZm9yIGxhbmd1YWdlICR7dGhpcy50YXJnZXRMYW5ndWFnZX0uYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhY2thZ2VWZXJzaW9uO1xuICB9XG5cbiAgYXN5bmMgYWRkUHJlYnVpbHRQcm92aWRlcihjb25zdHJhaW50OiBQcm92aWRlckNvbnN0cmFpbnQsIHNpbGVudCA9IGZhbHNlKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYGFkZGluZyBwcmUtYnVpbHQgcHJvdmlkZXIgJHtjb25zdHJhaW50LnNvdXJjZX0gd2l0aCB2ZXJzaW9uIGNvbnN0cmFpbnQgJHtjb25zdHJhaW50LnZlcnNpb259IGZvciBjZGt0ZiB2ZXJzaW9uICR7dGhpcy5jZGt0ZlZlcnNpb259YCxcbiAgICApO1xuXG4gICAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBhd2FpdCB0aGlzLmdldE1hdGNoaW5nUHJvdmlkZXJWZXJzaW9uKGNvbnN0cmFpbnQpO1xuICAgIGF3YWl0IHRoaXMucGFja2FnZU1hbmFnZXIuYWRkUGFja2FnZShuYW1lLCB2ZXJzaW9uLCBzaWxlbnQpO1xuXG4gICAgLy8gVE9ETzogbW9yZSBkZWJ1ZyBsb2dzXG4gIH1cblxuICAvLyBUaGUgdmVyc2lvbiB3ZSB1c2UgZm9yIG5wbSBtaWdodCBkaWZmZXIgZnJvbSBvdGhlciByZWdpc3RyaWVzXG4gIC8vIFRoaXMgaGFwcGVucyBtb3N0bHkgaW4gY2FzZXMgd2hlcmUgYSBwcm92aWRlciB1cGRhdGUgZmFpbGVkIHRvIHB1Ymxpc2ggdG8gb25lIG9mIHRoZSByZWdpc3RyaWVzXG4gIC8vIEluIHRoYXQgY2FzZSB3ZSB1c2UgdGhlIGxhdGVzdCB2ZXJzaW9uIHRoYXQgd2FzIHB1Ymxpc2hlZCBzdWNjZXNzZnVsbHkgYW5kIHdvcmtzIHdpdGggdGhlIGN1cnJlbnQgY2RrdGYgcmVsZWFzZVxuICBwcml2YXRlIGFzeW5jIGdldExhbmd1YWdlU3BlY2lmaWNQYWNrYWdlVmVyc2lvbihcbiAgICBwcmVidWlsdFByb3ZpZGVyTnBtVmVyc2lvbnM6IHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdLFxuICApOiBQcm9taXNlPHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfSB8IG51bGw+IHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBcIkZvdW5kIHBvc3NpYmx5IG1hdGNoaW5nIHZlcnNpb25zIChyZWxlYXNlZCBvbiBucG0pOiBcIixcbiAgICAgIHByZWJ1aWx0UHJvdmlkZXJOcG1WZXJzaW9ucyxcbiAgICApO1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIFwiU2VhcmNoaW5nIHRocm91Z2ggcGFja2FnZSBtYW5hZ2VyIHRvIGZpbmQgbGF0ZXN0IGF2YWlsYWJsZSB2ZXJzaW9uIGZvciBnaXZlbiBsYW5ndWFnZVwiLFxuICAgICk7XG5cbiAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9IG9mIHByZWJ1aWx0UHJvdmlkZXJOcG1WZXJzaW9ucykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGFuZ3VhZ2VQYWNrYWdlTmFtZSA9IGF3YWl0IHRoaXMudHJ5R2V0TGFuZ3VhZ2VQYWNrYWdlTmFtZShuYW1lKTtcbiAgICAgICAgaWYgKCFsYW5ndWFnZVBhY2thZ2VOYW1lKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBpc0F2YWlsYWJsZSA9IGF3YWl0IHRoaXMucGFja2FnZU1hbmFnZXIuaXNOcG1WZXJzaW9uQXZhaWxhYmxlKFxuICAgICAgICAgIGxhbmd1YWdlUGFja2FnZU5hbWUsXG4gICAgICAgICAgdmVyc2lvbixcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGlzQXZhaWxhYmxlKSB7XG4gICAgICAgICAgcmV0dXJuIHsgbmFtZTogbGFuZ3VhZ2VQYWNrYWdlTmFtZSwgdmVyc2lvbiB9O1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgICAgYENvdWxkIG5vdCBmaW5kIHZlcnNpb24gJHt2ZXJzaW9ufSBmb3IgcGFja2FnZSAke25hbWV9OiAnJHtlcnJ9Jy4gU2tpcHBpbmcuLi5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGFkZExvY2FsUHJvdmlkZXIoY29uc3RyYWludDogUHJvdmlkZXJDb25zdHJhaW50KSB7XG4gICAgbG9nZ2VyLmluZm8oXG4gICAgICBgQWRkaW5nIGxvY2FsIHByb3ZpZGVyICR7Y29uc3RyYWludC5zb3VyY2V9IHdpdGggdmVyc2lvbiBjb25zdHJhaW50ICR7Y29uc3RyYWludC52ZXJzaW9ufSB0byBjZGt0Zi5qc29uYCxcbiAgICApO1xuXG4gICAgaWYgKCFjb25zdHJhaW50LnZlcnNpb24gJiYgY29uc3RyYWludC5pc0Zyb21UZXJyYWZvcm1SZWdpc3RyeSgpKSB7XG4gICAgICBjb25zdCB2ID0gYXdhaXQgZ2V0TGF0ZXN0VmVyc2lvbihjb25zdHJhaW50KTtcbiAgICAgIGlmICh2KSB7XG4gICAgICAgIGNvbnN0cmFpbnQgPSBuZXcgUHJvdmlkZXJDb25zdHJhaW50KFxuICAgICAgICAgIGNvbnN0cmFpbnQuc291cmNlLFxuICAgICAgICAgIC8vIFwiMS4zLjJcIiAtPiBcIn4+IDEuM1wiXG4gICAgICAgICAgYH4+ICR7di5zcGxpdChcIi5cIikuc2xpY2UoMCwgMikuam9pbihcIi5cIil9YCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgICBgQ291bGQgbm90IGZpbmQgYSB2ZXJzaW9uIGZvciB0aGUgcHJvdmlkZXIgJyR7Y29uc3RyYWludH0nIGluIHRoZSBwdWJsaWMgcmVnaXN0cnkuIFRoaXMgY291bGQgYmUgZHVlIHRvIGEgdHlwbywgcGxlYXNlIHRha2UgYSBsb29rIGF0IGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL2Jyb3dzZS9wcm92aWRlcnMgdG8gZmluZCBhbGwgc3VwcG9ydGVkIHByb3ZpZGVycy5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGF3YWl0IG5ldyBDZGt0ZkNvbmZpZ01hbmFnZXIoKS5hZGRQcm92aWRlcihjb25zdHJhaW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBOUE0gcGFja2FnZSBuYW1lIG9mIGEgcHJlLWJ1aWx0IHByb3ZpZGVyIHBhY2thZ2UgdG8gdGhlIG5hbWUgaW4gdGhlIHRhcmdldCBsYW5ndWFnZVxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0UGFja2FnZU5hbWUoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHJlcG9zaXRvcnk6IHN0cmluZyxcbiAgICB1c2VDZGt0bjogYm9vbGVhbixcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdXNlQ2RrdG5cbiAgICAgID8gdGhpcy5jb252ZXJ0UGFja2FnZU5hbWVDZGt0bihuYW1lLCByZXBvc2l0b3J5KVxuICAgICAgOiB0aGlzLmNvbnZlcnRQYWNrYWdlTmFtZUNka3RmKG5hbWUsIHJlcG9zaXRvcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGFuIE5QTSBwYWNrYWdlIG5hbWUgb2YgYSBwcmUtYnVpbHQgcHJvdmlkZXIgcGFja2FnZSB0byB0aGUgbmFtZSBpbiB0aGUgdGFyZ2V0IGxhbmd1YWdlXG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRQYWNrYWdlTmFtZUNka3RmKG5hbWU6IHN0cmluZywgcmVwb3NpdG9yeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBwcm92aWRlck5hbWUgPSBuYW1lLnJlcGxhY2UoXCJAY2RrdGYvcHJvdmlkZXItXCIsIFwiXCIpO1xuICAgIHN3aXRjaCAodGhpcy50YXJnZXRMYW5ndWFnZSkge1xuICAgICAgY2FzZSBMYW5ndWFnZS5HTzogLy8gZS5nLiBnaXRodWIuY29tL2Nka3RmL2Nka3RmLXByb3ZpZGVyLW9wZW50ZWxla29tY2xvdWQtZ28vb3BlbnRlbGVrb21jbG91ZFxuICAgICAgICBpZiAocmVwb3NpdG9yeSkge1xuICAgICAgICAgIHJldHVybiBgJHtyZXBvc2l0b3J5fS1nby8ke3Byb3ZpZGVyTmFtZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGBnaXRodWIuY29tL2Nka3RmL2Nka3RmLXByb3ZpZGVyLSR7cHJvdmlkZXJOYW1lfS1nby8ke3Byb3ZpZGVyTmFtZX1gO1xuICAgICAgY2FzZSBMYW5ndWFnZS5UWVBFU0NSSVBUOiAvLyBlLmcuIEBjZGt0Zi9wcm92aWRlci1yYW5kb21cbiAgICAgICAgcmV0dXJuIG5hbWU7IC8vIGFscmVhZHkgdGhlIGNvcnJlY3QgbmFtZVxuICAgICAgY2FzZSBMYW5ndWFnZS5DU0hBUlA6IC8vIGUuZy4gSGFzaGlDb3JwLkNka3RmLlByb3ZpZGVycy5PcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIHJldHVybiBgSGFzaGlDb3JwLkNka3RmLlByb3ZpZGVycy5gICsgdG9QYXNjYWxDYXNlKHByb3ZpZGVyTmFtZSk7XG4gICAgICBjYXNlIExhbmd1YWdlLkpBVkE6IC8vIGUuZy4gY29tLmhhc2hpY29ycC5vcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIHJldHVybiBgY29tLmhhc2hpY29ycC5jZGt0Zi1wcm92aWRlci0ke3Byb3ZpZGVyTmFtZX1gO1xuICAgICAgY2FzZSBMYW5ndWFnZS5QWVRIT046IC8vIGUuZy4gY2RrdGYtY2RrdGYtcHJvdmlkZXItb3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gYGNka3RmLWNka3RmLXByb3ZpZGVyLSR7cHJvdmlkZXJOYW1lfWA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYGNvbnZlcnRpbmcgcGFja2FnZSBuYW1lIGZvciBsYW5ndWFnZSAke3RoaXMudGFyZ2V0TGFuZ3VhZ2V9IG5vdCBpbXBsZW1lbnRlZCB5ZXRgLFxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhbiBOUE0gcGFja2FnZSBuYW1lIG9mIGEgcHJlLWJ1aWx0IHByb3ZpZGVyIHBhY2thZ2UgdG8gdGhlIG5hbWUgaW4gdGhlIHRhcmdldCBsYW5ndWFnZVxuICAgKi9cbiAgcHJpdmF0ZSBjb252ZXJ0UGFja2FnZU5hbWVDZGt0bihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcmVwb3NpdG9yeTogc3RyaW5nLFxuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHByb3ZpZGVyTmFtZSA9IG5hbWUucmVwbGFjZShcIkBjZGt0bi9wcm92aWRlci1cIiwgXCJcIik7XG4gICAgc3dpdGNoICh0aGlzLnRhcmdldExhbmd1YWdlKSB7XG4gICAgICBjYXNlIExhbmd1YWdlLkdPOiAvLyBlLmcuIGdpdGh1Yi5jb20vY2RrdGYvY2RrdGYtcHJvdmlkZXItb3BlbnRlbGVrb21jbG91ZC1nby9vcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIGlmIChyZXBvc2l0b3J5KSB7XG4gICAgICAgICAgcmV0dXJuIGAke3JlcG9zaXRvcnl9LWdvLyR7cHJvdmlkZXJOYW1lfWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYGdpdGh1Yi5jb20vY2RrdG4taW8vY2RrdG4tcHJvdmlkZXItJHtwcm92aWRlck5hbWV9LWdvLyR7cHJvdmlkZXJOYW1lfWA7XG4gICAgICBjYXNlIExhbmd1YWdlLlRZUEVTQ1JJUFQ6IC8vIGUuZy4gQGNka3RmL3Byb3ZpZGVyLXJhbmRvbVxuICAgICAgICByZXR1cm4gbmFtZTsgLy8gYWxyZWFkeSB0aGUgY29ycmVjdCBuYW1lXG4gICAgICBjYXNlIExhbmd1YWdlLkNTSEFSUDogLy8gZS5nLiBIYXNoaUNvcnAuQ2RrdGYuUHJvdmlkZXJzLk9wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIGBJby5DZGt0bi5Qcm92aWRlcnMuYCArIHRvUGFzY2FsQ2FzZShwcm92aWRlck5hbWUpO1xuICAgICAgY2FzZSBMYW5ndWFnZS5KQVZBOiAvLyBlLmcuIGNvbS5oYXNoaWNvcnAub3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gYGlvLmNka3RuLmNka3RuLXByb3ZpZGVyLSR7cHJvdmlkZXJOYW1lfWA7XG4gICAgICBjYXNlIExhbmd1YWdlLlBZVEhPTjogLy8gZS5nLiBjZGt0Zi1jZGt0Zi1wcm92aWRlci1vcGVudGVsZWtvbWNsb3VkXG4gICAgICAgIHJldHVybiBgY2RrdG4tcHJvdmlkZXItJHtwcm92aWRlck5hbWV9YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgY29udmVydGluZyBwYWNrYWdlIG5hbWUgZm9yIGxhbmd1YWdlICR7dGhpcy50YXJnZXRMYW5ndWFnZX0gbm90IGltcGxlbWVudGVkIHlldGAsXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGFuIHBhY2thZ2UgbmFtZSBvZiBhIHByZS1idWlsdCBwcm92aWRlciBwYWNrYWdlIGluIHRhcmdldCBsYW5ndWFnZSB0byB0aGUgbmFtZSBpbiBucG1cbiAgICogSW52ZXJzZSBvZjogYGNvbnZlcnRQYWNrYWdlTmFtZWBcbiAgICovXG4gIHByaXZhdGUgY29udmVydEZyb21QYWNrYWdlTmFtZVRvTnBtKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcmVnZXhlcyA9IHtcbiAgICAgIFtMYW5ndWFnZS5HT106XG4gICAgICAgIC9naXRodWIuY29tXFwvKD86Y2RrdGZ8aGFzaGljb3JwfGNka3RuLWlvKVxcL2Nka3QoW2ZuXSktcHJvdmlkZXItKC4rKS1nb1xcLy9pLFxuICAgICAgW0xhbmd1YWdlLlRZUEVTQ1JJUFRdOiAvKC4rKS9pLFxuICAgICAgW0xhbmd1YWdlLkNTSEFSUF06IC8oPzpIYXNoaUNvcnB8SW8pXFwuQ2RrdChbZm5dKVxcLlByb3ZpZGVyc1xcLiguKykvaSxcbiAgICAgIFtMYW5ndWFnZS5KQVZBXTpcbiAgICAgICAgLyg/OmNvbVxcLmhhc2hpY29ycHxpb1xcLmNka3RuKVxcLmNka3QoW2ZuXSktcHJvdmlkZXItKC4rKS9pLFxuICAgICAgW0xhbmd1YWdlLlBZVEhPTl06IC8oPzpjZGt0Zi0pP2Nka3QoW2ZuXSktcHJvdmlkZXItKC4rKS9pLFxuICAgIH07XG4gICAgY29uc3QgcmVnZXggPSByZWdleGVzW3RoaXMudGFyZ2V0TGFuZ3VhZ2VdO1xuICAgIGlmICghcmVnZXgpIHtcbiAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcIkxhbmd1YWdlIG5vdCBzdXBwb3J0ZWQgZm9yIHByZS1idWlsdCBwcm92aWRlcnNcIik7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2ggPSByZWdleC5leGVjKG5hbWUpO1xuICAgIGlmICghbWF0Y2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUGFja2FnZSBuYW1lIGlzIG5vdCBpbiBleHBlY3RlZCBmb3JtYXQ6ICR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBucG1QYWNrYWdlUHJlZml4ID0gYEBjZGt0JHttYXRjaFsxXX0vcHJvdmlkZXItYDtcblxuICAgIHN3aXRjaCAodGhpcy50YXJnZXRMYW5ndWFnZSkge1xuICAgICAgY2FzZSBMYW5ndWFnZS5HTzogLy8gZS5nLiBnaXRodWIuY29tL2Nka3RmL2Nka3RmLXByb3ZpZGVyLW9wZW50ZWxla29tY2xvdWQtZ28vb3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gbnBtUGFja2FnZVByZWZpeCArIG1hdGNoWzJdO1xuICAgICAgY2FzZSBMYW5ndWFnZS5UWVBFU0NSSVBUOiAvLyBlLmcuIEBjZGt0Zi9wcm92aWRlci1yYW5kb21cbiAgICAgICAgcmV0dXJuIG1hdGNoWzFdOyAvLyBhbHJlYWR5IHRoZSBjb3JyZWN0IG5hbWVcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuQ1NIQVJQOiAvLyBlLmcuIEhhc2hpQ29ycC5DZGt0Zi5Qcm92aWRlcnMuT3BlbnRlbGVrb21jbG91ZFxuICAgICAgICByZXR1cm4gbnBtUGFja2FnZVByZWZpeCArIHRvU25ha2VDYXNlKG1hdGNoWzJdKTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuSkFWQTogLy8gZS5nLiBjb20uaGFzaGljb3JwLm9wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIG5wbVBhY2thZ2VQcmVmaXggKyBtYXRjaFsyXTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuUFlUSE9OOiAvLyBlLmcuIGNka3RmLWNka3RmLXByb3ZpZGVyLW9wZW50ZWxla29tY2xvdWRcbiAgICAgICAgcmV0dXJuIG5wbVBhY2thZ2VQcmVmaXggKyBtYXRjaFsyXTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgY29udmVydGluZyBwYWNrYWdlIG5hbWUgZm9yIGxhbmd1YWdlICR7dGhpcy50YXJnZXRMYW5ndWFnZX0gbm90IGltcGxlbWVudGVkIHlldGAsXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGFsbFByb3ZpZGVycygpIHtcbiAgICBjb25zdCBjZGt0Zkpzb24gPSBDZGt0ZkNvbmZpZy5yZWFkKCk7XG4gICAgY29uc3QgbG9jYWxWZXJzaW9ucyA9IG5ldyBMb2NhbFByb3ZpZGVyVmVyc2lvbnMoKTtcblxuICAgIGNvbnN0IGxvY2FsUHJvdmlkZXJDb25maWdzID0gY2RrdGZKc29uLnRlcnJhZm9ybVByb3ZpZGVycztcbiAgICBjb25zdCBwcmVidWlsdFByb3ZpZGVyQ29uZmlncyA9XG4gICAgICBhd2FpdCB0aGlzLnBhY2thZ2VNYW5hZ2VyLmxpc3RQcm92aWRlclBhY2thZ2VzKCk7XG5cbiAgICBjb25zdCBwcmVidWlsdFByb3ZpZGVyc0luZm8gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHByZWJ1aWx0UHJvdmlkZXJDb25maWdzLm1hcChhc3luYyAocHJlYnVpbHRQcm92aWRlckNvbmZpZykgPT4ge1xuICAgICAgICBjb25zdCBwYWNrYWdlTmFtZSA9IHRoaXMuY29udmVydEZyb21QYWNrYWdlTmFtZVRvTnBtKFxuICAgICAgICAgIHByZWJ1aWx0UHJvdmlkZXJDb25maWcubmFtZSxcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBwcm92aWRlckluZm9ybWF0aW9uID0gYXdhaXQgZ2V0UHJlYnVpbHRQcm92aWRlclZlcnNpb25JbmZvcm1hdGlvbihcbiAgICAgICAgICBwYWNrYWdlTmFtZSxcbiAgICAgICAgICBwcmVidWlsdFByb3ZpZGVyQ29uZmlnLnZlcnNpb24sXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5wcm92aWRlckluZm9ybWF0aW9uLFxuICAgICAgICAgIHBhY2thZ2VOYW1lOiBwcmVidWlsdFByb3ZpZGVyQ29uZmlnLm5hbWUsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgY29uc3QgY29uc3RyYWludHMgPSBuZXcgTG9jYWxQcm92aWRlckNvbnN0cmFpbnRzKCk7XG5cbiAgICBjb25zdCBsb2NhbFByb3ZpZGVyc0luZm8gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGxvY2FsUHJvdmlkZXJDb25maWdzLm1hcChhc3luYyAobG9jYWxQcm92aWRlckNvbmZpZykgPT4ge1xuICAgICAgICBjb25zdCBjb25zdHJhaW50ID1cbiAgICAgICAgICBQcm92aWRlckNvbnN0cmFpbnQuZnJvbUNvbmZpZ0VudHJ5KGxvY2FsUHJvdmlkZXJDb25maWcpO1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gYXdhaXQgbG9jYWxWZXJzaW9ucy52ZXJzaW9uRm9yUHJvdmlkZXIoXG4gICAgICAgICAgY29uc3RyYWludC5zaW1wbGlmaWVkTmFtZSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY29uc3RyYWludFZhbHVlID0gYXdhaXQgY29uc3RyYWludHMuY29uc3RyYWludEZvclByb3ZpZGVyKFxuICAgICAgICAgIGNvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWUsXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcm92aWRlck5hbWU6IGNvbnN0cmFpbnQuc2ltcGxpZmllZE5hbWUsXG4gICAgICAgICAgcHJvdmlkZXJDb25zdHJhaW50OiBjb25zdHJhaW50VmFsdWUgfHwgY29uc3RyYWludC52ZXJzaW9uLFxuICAgICAgICAgIHByb3ZpZGVyVmVyc2lvbjogdmVyc2lvbixcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbG9jYWw6IGxvY2FsUHJvdmlkZXJzSW5mbyxcbiAgICAgIHByZWJ1aWx0OiBwcmVidWlsdFByb3ZpZGVyc0luZm8sXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -15,23 +15,13 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
35
25
  var __importDefault = (this && this.__importDefault) || function (mod) {
36
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
27
  };
@@ -374,22 +364,36 @@ class NugetPackageManager extends PackageManager {
374
364
  }
375
365
  }
376
366
  }
367
+ /**
368
+ * Shared base for the Java package managers (Maven and Gradle). Both install from Maven Central, so the check for
369
+ * whether a given provider version exists is common to both and lives here; the concrete subclasses differ only in how
370
+ * they declare and list dependencies (pom.xml vs build.gradle).
371
+ */
377
372
  class JavaPackageManager extends PackageManager {
373
+ /**
374
+ * Reports whether `packageName@packageVersion` is published on Maven Central by probing the artifact repository for
375
+ * the version's `.pom` directly: HTTP 200 means present, anything else means not available.
376
+ *
377
+ * @param packageName - The Java coordinates in "group.artifact" form, e.g. "com.hashicorp.cdktf-provider-random".
378
+ * @param packageVersion - The exact version to check for.
379
+ * @returns `true` if the `.pom` exists on Maven Central, `false` otherwise.
380
+ * @throws If `packageName` is not in the expected "group.artifact" format.
381
+ */
378
382
  async isNpmVersionAvailable(packageName, packageVersion) {
379
- var _a, _b;
380
383
  commons_1.logger.debug(`Checking if ${packageName}@${packageVersion} is available`);
381
384
  const parts = packageName.split(".");
382
385
  if (parts.length !== 3) {
383
386
  throw commons_1.Errors.Internal(`Expected package name to be in format "group.artifact", e.g. "com.hashicorp.cdktf-provider-google", got: ${packageName}`);
384
387
  }
385
- const packageIdentifier = parts.pop();
388
+ const artifactId = parts.pop();
386
389
  const groupId = parts.join(".");
387
- const url = `https://search.maven.org/solrsearch/select?q=g:${groupId}+AND+a:${packageIdentifier}+AND+v:${packageVersion}&rows=5&wt=json`;
388
- commons_1.logger.debug(`Trying to find package version by querying Maven Central under '${url}'`);
390
+ // Probe the artifact CDN directly for the .pom: 200 = present, anything else = not available.
391
+ const groupPath = groupId.replace(/\./g, "/");
392
+ const url = `https://repo1.maven.org/maven2/${groupPath}/${artifactId}/${packageVersion}/${artifactId}-${packageVersion}.pom`;
393
+ commons_1.logger.debug(`Checking whether ${packageName}@${packageVersion} exists on Maven Central under '${url}'`);
389
394
  const response = await (0, node_fetch_1.default)(url);
390
- const json = (await response.json());
391
- commons_1.logger.debug(`Got response from the Maven package search for ${packageName}: ${JSON.stringify(json)}`);
392
- return ((_b = (_a = json === null || json === void 0 ? void 0 : json.response) === null || _a === void 0 ? void 0 : _a.numFound) !== null && _b !== void 0 ? _b : 0) > 0;
395
+ commons_1.logger.debug(`Maven Central responded HTTP ${response.status} for ${packageName}@${packageVersion}`);
396
+ return response.ok;
393
397
  }
394
398
  }
395
399
  class MavenPackageManager extends JavaPackageManager {
@@ -588,4 +592,4 @@ class GoPackageManager extends PackageManager {
588
592
  }
589
593
  }
590
594
  }
591
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kZXBlbmRlbmNpZXMvcGFja2FnZS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsNENBUXdCO0FBQ3hCLHVDQUFzQztBQUN0QyxnREFBd0I7QUFDeEIsbUNBQWlEO0FBQ2pELDZDQUErQjtBQUMvQiwrQ0FBaUM7QUFDakMsNERBQStCO0FBQy9CLHVDQUF5QjtBQUV6Qiw2RkFBNkY7QUFDN0Ysc0RBQXNEO0FBQ3RELE1BQU0sRUFBRSxzQkFBc0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFFL0MsSUFBSTtBQUNKLHdCQUF3QjtBQUN4QiwwQkFBMEI7QUFDMUIsa0JBQWtCO0FBQ2xCLDBJQUEwSTtBQUMxSSxPQUFPO0FBQ1Asc0JBQXNCO0FBQ3RCLGtDQUFrQztBQUNsQyw2QkFBNkI7QUFDN0IscUdBQXFHO0FBQ3JHLFNBQVM7QUFDVCxNQUFNLGFBQWEsR0FBRyxDQUFDO0tBQ3BCLE1BQU0sQ0FBQztJQUNOLFlBQVksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUNwQixDQUFDO1NBQ0UsTUFBTSxDQUFDO1FBQ04sT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7S0FDcEIsQ0FBQztTQUNELFNBQVMsRUFBRSxDQUNmO0NBQ0YsQ0FBQztLQUNELFdBQVcsRUFBRTtLQUNiLFNBQVMsRUFBRSxDQUFDO0FBRWYsSUFBSTtBQUNKLG9CQUFvQjtBQUNwQixjQUFjO0FBQ2Qsc0JBQXNCO0FBQ3RCLGlCQUFpQjtBQUNqQixVQUFVO0FBQ1YsbURBQW1EO0FBQ25ELDBCQUEwQjtBQUMxQix3QkFBd0I7QUFDeEIsMkJBQTJCO0FBQzNCLHFCQUFxQjtBQUNyQixVQUFVO0FBQ1YsUUFBUTtBQUNSLE1BQU07QUFD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Q0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRXZDLElBQUksb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ25DLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQztnQkFDbkMsQ0FBQztnQkFFRCxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRS9CLE9BQU87b0JBQ0wsSUFBSTtvQkFDSixPQUFPO2lCQUNSLENBQUM7WUFDSixDQUFDLENBQUM7aUJBQ0QsTUFBTSxDQUNMLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FDaEUsQ0FBQztRQUNOLENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQ2IsOERBQThELENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FDMUUsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0IHtcbiAgTGFuZ3VhZ2UsXG4gIGV4ZWMsXG4gIEVycm9ycyxcbiAgbG9nZ2VyLFxuICBpc0dyYWRsZVByb2plY3QsXG4gIGdldEdyYWRsZURlcGVuZGVuY2llcyxcbiAgZ2V0RGVwZW5kZW5jeUluZm9ybWF0aW9uRnJvbUxpbmUsXG59IGZyb20gXCJAY2RrdG4vY29tbW9uc1wiO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IHhtbDJqcywganMyeG1sLCBFbGVtZW50IH0gZnJvbSBcInhtbC1qc1wiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgKiBhcyBzZW12ZXIgZnJvbSBcInNlbXZlclwiO1xuaW1wb3J0IGZldGNoIGZyb20gXCJub2RlLWZldGNoXCI7XG5pbXBvcnQgKiBhcyB6IGZyb20gXCJ6b2RcIjtcblxuLy8gQ2FuJ3QgdXNlIENES1RGXyBhcyBwcmVmaXggYmVjYXVzZSB5YXJncyAuZW52KFwiQ0RLVEZcIikgaW4gc3RyaWN0IG1vZGUgZG9lcyBub3QgYWxsb3cgdXMgdG9cbi8vIFJlZmVyIHRvOiBodHRwczovL2dpdGh1Yi5jb20veWFyZ3MveWFyZ3MvaXNzdWVzLzg3M1xuY29uc3QgeyBHSVRIVUJfQVBJX1RPS0VOX0NES1RGIH0gPSBwcm9jZXNzLmVudjtcblxuLy8ge1xuLy8gICBcInZlcnNpb25cIjogXCIxLjAuMFwiLFxuLy8gICBcIm5hbWVcIjogXCJ0ZXN0VVNIYXNGXCIsXG4vLyAgIFwicHJvYmxlbXNcIjogW1xuLy8gICAgIFwiZXh0cmFuZW91czogYXJjaGl2ZXItdXRpbHNAMi4xLjAgL3ByaXZhdGUvdmFyL2ZvbGRlcnMvel8vdjAzbDMzZDU1ZmI1N25ycjNiMXEwM2NoMDAwMGdxL1QvdGVzdFVTSGFzRi9ub2RlX21vZHVsZXMvYXJjaGl2ZXItdXRpbHNcIixcbi8vICAgXSxcbi8vICAgXCJkZXBlbmRlbmNpZXNcIjoge1xuLy8gICAgIFwiQGNka3RmL3Byb3ZpZGVyLXJhbmRvbVwiOiB7XG4vLyAgICAgICBcInZlcnNpb25cIjogXCIzLjAuMTFcIixcbi8vICAgICAgIFwicmVzb2x2ZWRcIjogXCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AY2RrdGYvcHJvdmlkZXItcmFuZG9tLy0vcHJvdmlkZXItcmFuZG9tLTMuMC4xMS50Z3pcIlxuLy8gICAgIH0sXG5jb25zdCBucG1MaXN0U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBkZXBlbmRlbmNpZXM6IHoucmVjb3JkKFxuICAgICAgelxuICAgICAgICAub2JqZWN0KHtcbiAgICAgICAgICB2ZXJzaW9uOiB6LnN0cmluZygpLFxuICAgICAgICB9KVxuICAgICAgICAubm9uc3RyaWN0KCksXG4gICAgKSxcbiAgfSlcbiAgLmRlZXBQYXJ0aWFsKClcbiAgLm5vbnN0cmljdCgpO1xuXG4vLyB7XG4vLyAgIFwidHlwZVwiOiBcInRyZWVcIixcbi8vICAgXCJkYXRhXCI6IHtcbi8vICAgICBcInR5cGVcIjogXCJsaXN0XCIsXG4vLyAgICAgXCJ0cmVlc1wiOiBbXG4vLyAgICAgICB7XG4vLyAgICAgICAgIFwibmFtZVwiOiBcIkBjZGt0Zi9wcm92aWRlci1yYW5kb21AMy4wLjExXCIsXG4vLyAgICAgICAgIFwiY2hpbGRyZW5cIjogW10sXG4vLyAgICAgICAgIFwiaGludFwiOiBudWxsLFxuLy8gICAgICAgICBcImNvbG9yXCI6IFwiYm9sZFwiLFxuLy8gICAgICAgICBcImRlcHRoXCI6IDBcbi8vICAgICAgIH1cbi8vICAgICBdXG4vLyAgIH1cbi8vIH1cbmNvbnN0IHlhcm5MaXN0U2NoZW1hID0gelxuICAub2JqZWN0KHtcbiAgICBkYXRhOiB6XG4gICAgICAub2JqZWN0KHtcbiAgICAgICAgdHJlZXM6IHouYXJyYXkoXG4gICAgICAgICAgelxuICAgICAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgICAgIG5hbWU6IHouc3RyaW5nKCksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm5vbnN0cmljdCgpLFxuICAgICAgICApLFxuICAgICAgfSlcbiAgICAgIC5ub25zdHJpY3QoKSxcbiAgfSlcbiAgLmRlZXBQYXJ0aWFsKClcbiAgLm5vbnN0cmljdCgpO1xuXG4vLyBbXG4vLyAgIHtcbi8vICAgICBcIm5hbWVcIjogXCJhcHBkaXJzXCIsXG4vLyAgICAgXCJ2ZXJzaW9uXCI6IFwiMS40LjRcIlxuLy8gICB9LFxuLy8gICB7XG5jb25zdCBwaXBQYWNrYWdlU2NoZW1hID0gei5hcnJheShcbiAgei5vYmplY3QoeyBuYW1lOiB6LnN0cmluZygpLCB2ZXJzaW9uOiB6LnN0cmluZygpIH0pLm5vbnN0cmljdCgpLFxuKTtcblxuLyoqXG4gKiBtYW5hZ2VzIGluc3RhbGxpbmcsIHVwZGF0aW5nLCBhbmQgcmVtb3ZpbmcgZGVwZW5kZW5jaWVzXG4gKiBpbiB0aGUgcGFja2FnZSBzeXN0ZW0gdXNlZCBieSB0aGUgdGFyZ2V0IGxhbmd1YWdlIG9mIGEgQ0RLVE5cbiAqIHByb2plY3RcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBhY2thZ2VNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIHJlYWRvbmx5IHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZykge31cblxuICBwdWJsaWMgc3RhdGljIGZvckxhbmd1YWdlKFxuICAgIGxhbmd1YWdlOiBMYW5ndWFnZSxcbiAgICB3b3JraW5nRGlyZWN0b3J5OiBzdHJpbmcsXG4gICk6IFBhY2thZ2VNYW5hZ2VyIHtcbiAgICBzd2l0Y2ggKGxhbmd1YWdlKSB7XG4gICAgICBjYXNlIExhbmd1YWdlLkdPOlxuICAgICAgICByZXR1cm4gbmV3IEdvUGFja2FnZU1hbmFnZXIod29ya2luZ0RpcmVjdG9yeSk7XG4gICAgICBjYXNlIExhbmd1YWdlLlRZUEVTQ1JJUFQ6XG4gICAgICAgIHJldHVybiBuZXcgTm9kZVBhY2thZ2VNYW5hZ2VyKHdvcmtpbmdEaXJlY3RvcnkpO1xuICAgICAgY2FzZSBMYW5ndWFnZS5QWVRIT046XG4gICAgICAgIHJldHVybiBuZXcgUHl0aG9uUGFja2FnZU1hbmFnZXIod29ya2luZ0RpcmVjdG9yeSk7XG4gICAgICBjYXNlIExhbmd1YWdlLkNTSEFSUDpcbiAgICAgICAgcmV0dXJuIG5ldyBOdWdldFBhY2thZ2VNYW5hZ2VyKHdvcmtpbmdEaXJlY3RvcnkpO1xuICAgICAgY2FzZSBMYW5ndWFnZS5KQVZBOlxuICAgICAgICBpZiAoR3JhZGxlUGFja2FnZU1hbmFnZXIuaXNHcmFkbGVQcm9qZWN0KHdvcmtpbmdEaXJlY3RvcnkpKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBHcmFkbGVQYWNrYWdlTWFuYWdlcih3b3JraW5nRGlyZWN0b3J5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IE1hdmVuUGFja2FnZU1hbmFnZXIod29ya2luZ0RpcmVjdG9yeSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gbGFuZ3VhZ2U6ICR7bGFuZ3VhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFic3RyYWN0IGFkZFBhY2thZ2UoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbj86IHN0cmluZyxcbiAgICBzaWxlbnQ/OiBib29sZWFuLFxuICApOiBQcm9taXNlPHZvaWQ+O1xuICAvLyBhZGQgY2hlY2sgaWYgcGFja2FnZSBleGlzdHMgYWxyZWFkeS4gbWlnaHQgcXVlcnkgdmVyc2lvbiBpbiB0aGUgZnV0dXJlIGFuZCBvZmZlciB0byB1cGdyYWRlP1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBpc05wbVZlcnNpb25BdmFpbGFibGUoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbjogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIHB1YmxpYyBhYnN0cmFjdCBsaXN0UHJvdmlkZXJQYWNrYWdlcygpOiBQcm9taXNlPFxuICAgIHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdXG4gID47XG59XG5cbmNsYXNzIE5vZGVQYWNrYWdlTWFuYWdlciBleHRlbmRzIFBhY2thZ2VNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBoYXNZYXJuTG9ja2ZpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGV4aXN0c1N5bmMocGF0aC5qb2luKHRoaXMud29ya2luZ0RpcmVjdG9yeSwgXCJ5YXJuLmxvY2tcIikpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZFBhY2thZ2UoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbj86IHN0cmluZyxcbiAgICBzaWxlbnQ/OiBib29sZWFuLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgQWRkaW5nIHBhY2thZ2UgJHtwYWNrYWdlTmFtZX0gQCAke3BhY2thZ2VWZXJzaW9ufWApO1xuXG4gICAgLy8gcHJvYmUgZm9yIHBhY2thZ2UtbG9jay5qc29uIG9yIHlhcm4ubG9ja1xuICAgIGxldCBjb21tYW5kID0gXCJucG1cIjtcbiAgICBsZXQgYXJncyA9IFtcImluc3RhbGxcIl07XG5cbiAgICBpZiAodGhpcy5oYXNZYXJuTG9ja2ZpbGUoKSkge1xuICAgICAgY29tbWFuZCA9IFwieWFyblwiO1xuICAgICAgYXJncyA9IFtcImFkZFwiXTtcbiAgICB9XG4gICAgYXJncy5wdXNoKFxuICAgICAgcGFja2FnZVZlcnNpb24gPyBwYWNrYWdlTmFtZSArIFwiQFwiICsgcGFja2FnZVZlcnNpb24gOiBwYWNrYWdlTmFtZSxcbiAgICApO1xuXG4gICAgaWYgKHNpbGVudCkge1xuICAgICAgYXJncy5wdXNoKFwiLS1zaWxlbnRcIik7XG4gICAgICBhcmdzLnB1c2goXCItLW5vLXByb2dyZXNzXCIpO1xuICAgIH1cblxuICAgIC8vIEluc3RhbGwgZXhhY3QgdmVyc2lvblxuICAgIC8vIFlhcm46IGh0dHBzOi8vY2xhc3NpYy55YXJucGtnLmNvbS9sYW5nL2VuL2RvY3MvY2xpL2FkZC8jdG9jLXlhcm4tYWRkLWV4YWN0LWVcbiAgICAvLyBOcG06IGh0dHBzOi8vZG9jcy5ucG1qcy5jb20vY2xpL3Y4L2NvbW1hbmRzL25wbS1pbnN0YWxsI3NhdmUtZXhhY3RcbiAgICBhcmdzLnB1c2goXCItRVwiKTtcblxuICAgIGxvZ2dlci5pbmZvKFxuICAgICAgYEluc3RhbGxpbmcgcGFja2FnZSAke3BhY2thZ2VOYW1lfSBAICR7cGFja2FnZVZlcnNpb259IHVzaW5nICR7Y29tbWFuZH0uYCxcbiAgICApO1xuXG4gICAgYXdhaXQgZXhlYyhjb21tYW5kLCBhcmdzLCB7IGN3ZDogdGhpcy53b3JraW5nRGlyZWN0b3J5IH0pO1xuXG4gICAgbG9nZ2VyLmluZm8oXCJQYWNrYWdlIGluc3RhbGxlZC5cIik7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaXNOcG1WZXJzaW9uQXZhaWxhYmxlKFxuICAgIF9wYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgIF9wYWNrYWdlVmVyc2lvbjogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBXZSBnZXQgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHZlcnNpb25zIGZyb20gbnBtLCBubyBuZWVkIHRvIGNoZWNrIGhlcmVcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbGlzdFlhcm5QYWNrYWdlcygpOiBQcm9taXNlPFxuICAgIHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdXG4gID4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGRvdXQgPSBhd2FpdCBleGVjKFwieWFyblwiLCBbXCJsaXN0XCIsIFwiLS1qc29uXCJdLCB7XG4gICAgICAgIGN3ZDogdGhpcy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgfSk7XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZyhgTGlzdGluZyB5YXJuIHBhY2thZ2VzIHVzaW5nIFwieWFybiBsaXN0IC0tanNvblwiOiAke3N0ZG91dH1gKTtcblxuICAgICAgY29uc3QganNvbiA9IHlhcm5MaXN0U2NoZW1hLnBhcnNlKEpTT04ucGFyc2Uoc3Rkb3V0KSk7XG5cbiAgICAgIHJldHVybiAoanNvbj8uZGF0YT8udHJlZXMgfHwgW10pXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKGRlcDogYW55KSA9PlxuICAgICAgICAgICAgZGVwLm5hbWUuc3RhcnRzV2l0aChcIkBjZGt0Zi9wcm92aWRlci1cIikgfHxcbiAgICAgICAgICAgIGRlcC5uYW1lLnN0YXJ0c1dpdGgoXCJAY2RrdG4vcHJvdmlkZXItXCIpLFxuICAgICAgICApXG4gICAgICAgIC5tYXAoKGRlcDogYW55KSA9PiAoe1xuICAgICAgICAgIG5hbWU6IGBAJHtkZXAubmFtZS5zcGxpdChcIkBcIilbMV19YCxcbiAgICAgICAgICB2ZXJzaW9uOiBkZXAubmFtZS5zcGxpdChcIkBcIilbMl0sXG4gICAgICAgIH0pKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgaW5zdGFsbGVkIHBhY2thZ2VzIHVzaW5nICd5YXJuIGxpc3QgLS1qc29uJzogJHtlfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbGlzdE5wbVBhY2thZ2VzKCk6IFByb21pc2U8XG4gICAgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W11cbiAgPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0ZG91dCA9IGF3YWl0IGV4ZWMoXCJucG1cIiwgW1wibGlzdFwiLCBcIi0tanNvblwiXSwge1xuICAgICAgICBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgIH0pO1xuXG4gICAgICBsb2dnZXIuZGVidWcoYExpc3RpbmcgbnBtIHBhY2thZ2VzIHVzaW5nIFwibnBtIGxpc3QgLS1qc29uXCI6ICR7c3Rkb3V0fWApO1xuICAgICAgY29uc3QganNvbiA9IG5wbUxpc3RTY2hlbWEucGFyc2UoSlNPTi5wYXJzZShzdGRvdXQpKTtcblxuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGpzb24/LmRlcGVuZGVuY2llcyB8fCB7fSlcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAoW2RlcE5hbWVdKSA9PlxuICAgICAgICAgICAgZGVwTmFtZS5zdGFydHNXaXRoKFwiQGNka3RmL3Byb3ZpZGVyLVwiKSB8fFxuICAgICAgICAgICAgZGVwTmFtZS5zdGFydHNXaXRoKFwiQGNka3RuL3Byb3ZpZGVyLVwiKSxcbiAgICAgICAgKVxuICAgICAgICAubWFwKChbbmFtZSwgZGVwXSkgPT4gKHsgbmFtZSwgdmVyc2lvbjogZGVwLnZlcnNpb24gfSkpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBpbnN0YWxsZWQgcGFja2FnZXMgdXNpbmcgJ25wbSBsaXN0IC0tanNvbic6ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbGlzdFByb3ZpZGVyUGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+IHtcbiAgICByZXR1cm4gdGhpcy5oYXNZYXJuTG9ja2ZpbGUoKVxuICAgICAgPyB0aGlzLmxpc3RZYXJuUGFja2FnZXMoKVxuICAgICAgOiB0aGlzLmxpc3ROcG1QYWNrYWdlcygpO1xuICB9XG59XG5cbmNsYXNzIFB5dGhvblBhY2thZ2VNYW5hZ2VyIGV4dGVuZHMgUGFja2FnZU1hbmFnZXIge1xuICBwcml2YXRlIGdldCBhcHBDb21tYW5kKCkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShcbiAgICAgICAgZnMucmVhZEZpbGVTeW5jKFxuICAgICAgICAgIHBhdGgucmVzb2x2ZSh0aGlzLndvcmtpbmdEaXJlY3RvcnksIFwiY2RrdGYuanNvblwiKSxcbiAgICAgICAgICBcInV0ZjhcIixcbiAgICAgICAgKSxcbiAgICAgIClbXCJhcHBcIl07XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoXG4gICAgICAgIGBDb3VsZCBub3QgZmluZCBmaW5kIGFuZCBwYXJzZSBjZGt0Zi5qc29uIGluICR7dGhpcy53b3JraW5nRGlyZWN0b3J5fWAsXG4gICAgICAgIGUsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRQYWNrYWdlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb24/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHVzZVBpcGVudiA9IHRoaXMuYXBwQ29tbWFuZC5pbmNsdWRlcyhcInBpcGVudlwiKTtcblxuICAgIGlmICh1c2VQaXBlbnYpIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgSW5zdGFsbGluZyBwYWNrYWdlICR7cGFja2FnZU5hbWV9IEAgJHtwYWNrYWdlVmVyc2lvbn0gdXNpbmcgcGlwZW52LmAsXG4gICAgICApO1xuXG4gICAgICBhd2FpdCBleGVjKFwicGlwZW52XCIsIFtcImluc3RhbGxcIiwgYCR7cGFja2FnZU5hbWV9fj0ke3BhY2thZ2VWZXJzaW9ufWBdLCB7XG4gICAgICAgIGN3ZDogdGhpcy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgICAgICBQSVBFTlZfUVVJRVQ6IFwiMVwiLFxuICAgICAgICB9LFxuICAgICAgICBzdGRpbzogW1wiaW5oZXJpdFwiLCAxLCAxXSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zb2xlLmxvZyhcIlBhY2thZ2UgaW5zdGFsbGVkLlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIGBJbnN0YWxsaW5nIHBhY2thZ2UgJHtwYWNrYWdlTmFtZX0gQCAke3BhY2thZ2VWZXJzaW9ufSB1c2luZyBwaXAuYCxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJlcXVpcmVtZW50c0ZpbGVQYXRoID0gcGF0aC5qb2luKFxuICAgICAgICB0aGlzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICAgIFwicmVxdWlyZW1lbnRzLnR4dFwiLFxuICAgICAgKTtcbiAgICAgIGlmICghZnMuZXhpc3RzU3luYyhyZXF1aXJlbWVudHNGaWxlUGF0aCkpIHtcbiAgICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgICAgIGBDb3VsZCBub3QgZmluZCByZXF1aXJlbWVudHMudHh0IGluICR7dGhpcy53b3JraW5nRGlyZWN0b3J5fWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlcXVpcmVtZW50cyA9IGF3YWl0IGZzLnJlYWRGaWxlKHJlcXVpcmVtZW50c0ZpbGVQYXRoLCBcInV0ZjhcIik7XG4gICAgICBjb25zdCByZXF1aXJlbWVudExpbmUgPSByZXF1aXJlbWVudHNcbiAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgIC5maW5kKChsaW5lKSA9PiBsaW5lLmluY2x1ZGVzKHBhY2thZ2VOYW1lKSk7XG5cbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYFJlYWQgcmVxdWlyZW1lbnRzLnR4dCBmaWxlIGFuZCBmb3VuZCBsaW5lIGluY2x1ZGluZyAke3BhY2thZ2VOYW1lfTogJHtyZXF1aXJlbWVudExpbmV9YCxcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXF1aXJlbWVudExpbmUpIHtcbiAgICAgICAgaWYgKHBhY2thZ2VWZXJzaW9uID8gcmVxdWlyZW1lbnRMaW5lLmluY2x1ZGVzKHBhY2thZ2VWZXJzaW9uKSA6IHRydWUpIHtcbiAgICAgICAgICBsb2dnZXIuaW5mbyhcbiAgICAgICAgICAgIGBQYWNrYWdlICR7cGFja2FnZU5hbWV9IGFscmVhZHkgaW5zdGFsbGVkLiBTa2lwcGluZyBpbnN0YWxsYXRpb24uYCxcbiAgICAgICAgICApO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgICAgICBgRm91bmQgdGhlIHBhY2thZ2UgYnV0IHdpdGggYSBkaWZmZXJlbnQgdmVyc2lvbiwgY29udGludWluZ2AsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXdSZXF1aXJlbWVudHMgPVxuICAgICAgICByZXF1aXJlbWVudHNcbiAgICAgICAgICAuc3BsaXQoXCJcXG5cIilcbiAgICAgICAgICAuZmlsdGVyKChsaW5lKSA9PiAhbGluZS5zdGFydHNXaXRoKHBhY2thZ2VOYW1lKSlcbiAgICAgICAgICAuam9pbihcIlxcblwiKSArXG4gICAgICAgIGBcXG4ke3BhY2thZ2VOYW1lfSR7cGFja2FnZVZlcnNpb24gPyBgfj0ke3BhY2thZ2VWZXJzaW9ufWAgOiBcIlwifWA7XG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUocmVxdWlyZW1lbnRzRmlsZVBhdGgsIG5ld1JlcXVpcmVtZW50cywgXCJ1dGY4XCIpO1xuXG4gICAgICBhd2FpdCBleGVjKFwicGlwXCIsIFtcImluc3RhbGxcIiwgXCItclwiLCBcInJlcXVpcmVtZW50cy50eHRcIl0sIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICAgIHN0ZGlvOiBbXCJpbmhlcml0XCIsIDEsIDFdLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnNvbGUubG9nKFwiUGFja2FnZSBpbnN0YWxsZWQuXCIpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpc05wbVZlcnNpb25BdmFpbGFibGUoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbjogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgQ2hlY2tpbmcgaWYgJHtwYWNrYWdlTmFtZX1AJHtwYWNrYWdlVmVyc2lvbn0gaXMgYXZhaWxhYmxlIGZvciBQeXRob25gLFxuICAgICk7XG4gICAgY29uc3QgdXJsID0gYGh0dHBzOi8vcHlwaS5vcmcvcHlwaS8ke3BhY2thZ2VOYW1lfS8ke3BhY2thZ2VWZXJzaW9ufS9qc29uYDtcbiAgICBsb2dnZXIuZGVidWcoYEZldGNoaW5nIHBhY2thZ2UgaW5mb3JtYXRpb24gZm9yICR7cGFja2FnZU5hbWV9IGZyb20gJHt1cmx9YCk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7XG4gICAgY29uc3QganNvbiA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIGFueTtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgR290IHJlc3BvbnNlIGZyb20gUHlQSSBmb3IgJHtwYWNrYWdlTmFtZX1AJHtwYWNrYWdlVmVyc2lvbn06ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGpzb24sXG4gICAgICApfWAsXG4gICAgKTtcblxuICAgIGlmIChqc29uLmluZm8pIHtcbiAgICAgIC8vIFdlIGZvdW5kIHRoZSB2ZXJzaW9uLCBzbyBpdCBleGlzdHNcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBDb3VsZCBub3QgZ2V0IFB5UEkgcGFja2FnZSBpbmZvLCBnb3Q6ICR7SlNPTi5zdHJpbmdpZnkoanNvbil9YCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RQaXBlbnZQYWNrYWdlcygpOiBQcm9taXNlPFxuICAgIHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdXG4gID4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGRvdXQgPSBhd2FpdCBleGVjKFxuICAgICAgICBcInBpcGVudlwiLFxuICAgICAgICBbXCJydW5cIiwgXCJwaXBcIiwgXCJsaXN0XCIsIFwiLS1mb3JtYXQ9anNvblwiXSxcbiAgICAgICAge1xuICAgICAgICAgIGN3ZDogdGhpcy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYExpc3RpbmcgcGlwZW52IHBhY2thZ2VzIHVzaW5nIFwicGlwZW52IHJ1biBwaXAgbGlzdCAtLWZvcm1hdD1qc29uXCI6ICR7c3Rkb3V0fWAsXG4gICAgICApO1xuXG4gICAgICBjb25zdCBsaXN0ID0gcGlwUGFja2FnZVNjaGVtYS5wYXJzZShKU09OLnBhcnNlKHN0ZG91dCkpO1xuICAgICAgcmV0dXJuIGxpc3QuZmlsdGVyKFxuICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICBpdGVtLm5hbWUuc3RhcnRzV2l0aChcImNka3RmLWNka3RmLXByb3ZpZGVyXCIpIHx8XG4gICAgICAgICAgaXRlbS5uYW1lLnN0YXJ0c1dpdGgoXCJjZGt0bi1wcm92aWRlclwiKSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIGluc3RhbGxlZCBwYWNrYWdlcyB1c2luZyAncGlwZW52IHJ1biBwaXAgbGlzdCAtLWZvcm1hdD1qc29uJzogJHtlfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsaXN0UGlwUGFja2FnZXMoKTogUHJvbWlzZTx7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGRvdXQgPSBhd2FpdCBleGVjKFwicGlwXCIsIFtcImxpc3RcIiwgXCItLWZvcm1hdD1qc29uXCJdLCB7XG4gICAgICAgIGN3ZDogdGhpcy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgfSk7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBMaXN0aW5nIHBpcCBwYWNrYWdlcyB1c2luZyBcInBpcCBsaXN0IC0tZm9ybWF0PWpzb25cIjogJHtzdGRvdXR9YCxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGxpc3QgPSBwaXBQYWNrYWdlU2NoZW1hLnBhcnNlKEpTT04ucGFyc2Uoc3Rkb3V0KSk7XG4gICAgICByZXR1cm4gbGlzdC5maWx0ZXIoXG4gICAgICAgIChpdGVtKSA9PlxuICAgICAgICAgIGl0ZW0ubmFtZS5zdGFydHNXaXRoKFwiY2RrdGYtY2RrdGYtcHJvdmlkZXJcIikgfHxcbiAgICAgICAgICBpdGVtLm5hbWUuc3RhcnRzV2l0aChcImNka3RuLXByb3ZpZGVyXCIpLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgaW5zdGFsbGVkIHBhY2thZ2VzIHVzaW5nICdwaXAgbGlzdCAtLWZvcm1hdD1qc29uJzogJHtlfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsaXN0UHJvdmlkZXJQYWNrYWdlcygpOiBQcm9taXNlPFxuICAgIHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdXG4gID4ge1xuICAgIHJldHVybiB0aGlzLmFwcENvbW1hbmQuaW5jbHVkZXMoXCJwaXBlbnZcIilcbiAgICAgID8gdGhpcy5saXN0UGlwZW52UGFja2FnZXMoKVxuICAgICAgOiB0aGlzLmxpc3RQaXBQYWNrYWdlcygpO1xuICB9XG59XG5cbmNsYXNzIE51Z2V0UGFja2FnZU1hbmFnZXIgZXh0ZW5kcyBQYWNrYWdlTWFuYWdlciB7XG4gIHB1YmxpYyBhc3luYyBhZGRQYWNrYWdlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb24/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbW1hbmQgPSBcImRvdG5ldFwiO1xuICAgIGNvbnN0IGFyZ3MgPSBbXCJhZGRcIiwgXCJwYWNrYWdlXCIsIHBhY2thZ2VOYW1lXTtcbiAgICBpZiAocGFja2FnZVZlcnNpb24pIHtcbiAgICAgIGFyZ3MucHVzaChcIi0tdmVyc2lvblwiLCBwYWNrYWdlVmVyc2lvbik7XG4gICAgfVxuICAgIGNvbnNvbGUubG9nKFxuICAgICAgYEluc3RhbGxpbmcgcGFja2FnZSAke3BhY2thZ2VOYW1lfSBAICR7cGFja2FnZVZlcnNpb259IHVzaW5nIFwiJHtjb21tYW5kfSAke2FyZ3Muam9pbihcbiAgICAgICAgXCIgXCIsXG4gICAgICApfVwiLmAsXG4gICAgKTtcblxuICAgIGF3YWl0IGV4ZWMoY29tbWFuZCwgYXJncywgeyBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSB9KTtcblxuICAgIGNvbnNvbGUubG9nKFwiUGFja2FnZSBpbnN0YWxsZWQuXCIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGlzTnBtVmVyc2lvbkF2YWlsYWJsZShcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgIHBhY2thZ2VWZXJzaW9uOiBzdHJpbmcsXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgQ2hlY2tpbmcgaWYgJHtwYWNrYWdlTmFtZX1AJHtwYWNrYWdlVmVyc2lvbn0gaXMgYXZhaWxhYmxlYCk7XG5cbiAgICBjb25zdCBbb3duZXIsIC4uLnJlc3RdID0gcGFja2FnZU5hbWUuc3BsaXQoXCIuXCIpO1xuICAgIGNvbnN0IGlkID0gcmVzdFtyZXN0Lmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IHVybCA9IGBodHRwczovL2F6dXJlc2VhcmNoLXVzbmMubnVnZXQub3JnL3F1ZXJ5P3E9b3duZXI6JHtvd25lcn0lMjBpZDoke2lkfSZwcmVyZWxlYXNlPWZhbHNlJnNlbVZlckxldmVsPTIuMC4wYDtcbiAgICBsb2dnZXIuZGVidWcoYEZldGNoaW5nIHBhY2thZ2UgbWV0YWRhdGEgZnJvbSBOdWdldDogJyR7dXJsfSdgKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKTtcbiAgICBjb25zdCBqc29uID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMge1xuICAgICAgZGF0YTogeyBpZDogc3RyaW5nOyB2ZXJzaW9uczogeyB2ZXJzaW9uOiBzdHJpbmcgfVtdIH1bXTtcbiAgICB9O1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBHb3QgcmVzcG9uc2UgZnJvbSBOdUdldCBmb3IgJHtwYWNrYWdlTmFtZX0gOiAke0pTT04uc3RyaW5naWZ5KGpzb24pfWAsXG4gICAgKTtcblxuICAgIGlmICghanNvbj8uZGF0YT8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7IC8vIE5vIHBhY2thZ2UgZm91bmRcbiAgICB9XG5cbiAgICBjb25zdCBwYWNrYWdlVmVyc2lvbnMgPVxuICAgICAganNvbi5kYXRhLmZpbmQoKHApID0+IHAuaWQgPT09IHBhY2thZ2VOYW1lKT8udmVyc2lvbnMgPz8gW107XG5cbiAgICBpZiAoIXBhY2thZ2VWZXJzaW9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTsgLy8gTm8gcGFja2FnZSByZWxlYXNlIG1hdGNoaW5nIHRoZSBpZCBmb3VuZFxuICAgIH1cblxuICAgIHJldHVybiBwYWNrYWdlVmVyc2lvbnMuc29tZSgodikgPT4gdi52ZXJzaW9uID09PSBwYWNrYWdlVmVyc2lvbik7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbGlzdFByb3ZpZGVyUGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgZXhlYyhcImRvdG5ldFwiLCBbXCJsaXN0XCIsIFwicGFja2FnZVwiXSwge1xuICAgICAgICBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgTGlzdGluZyBudWdldCBwYWNrYWdlcyB1c2luZyBcImRvdG5ldCBsaXN0IHBhY2thZ2VcIjogJHtzdGRvdXR9YCxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHJlZ2V4ID1cbiAgICAgICAgL15cXHMqPlxccygoPzpIYXNoaUNvcnBcXC5DZGt0ZnxJb1xcLkNka3RuKVxcLlByb3ZpZGVyc1xcLltcXHcuXSspXFxzKygoPzpcXGQrXFwuKXsyfVxcZCsoPzotXFxTKyk/KVxccysoKD86XFxkK1xcLil7Mn1cXGQrKD86LVxcUyspPylcXHMqJC87XG5cbiAgICAgIHJldHVybiBzdGRvdXRcbiAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgIC5tYXAoKGxpbmU6IHN0cmluZykgPT4ge1xuICAgICAgICAgIC8vIEV4YW1wbGUgb3V0cHV0OlxuICAgICAgICAgIC8vIFByb2plY3QgJ015VGVycmFmb3JtU3RhY2snIGhhcyB0aGUgZm9sbG93aW5nIHBhY2thZ2UgcmVmZXJlbmNlc1xuICAgICAgICAgIC8vICBbbmV0Ni4wXTpcbiAgICAgICAgICAvLyAgVG9wLWxldmVsIFBhY2thZ2UgICAgICBSZXF1ZXN0ZWQgICBSZXNvbHZlZFxuICAgICAgICAgIC8vICA+IEhhc2hpQ29ycC5DZGt0ZiAgICAgIDAuMC4wICAgICAgIDAuMC4wXG4gICAgICAgICAgLy8gbWF0Y2hbMF0gPSBmdWxsIG1hdGNoXG4gICAgICAgICAgLy8gbWF0Y2hbMV0gPSBwYWNrYWdlIG5hbWVcbiAgICAgICAgICAvLyBtYXRjaFsyXSA9IHJlcXVlc3RlZCB2ZXJzaW9uXG4gICAgICAgICAgLy8gbWF0Y2hbM10gPSByZXNvbHZlZCB2ZXJzaW9uXG4gICAgICAgICAgcmV0dXJuIHJlZ2V4LmV4ZWMobGluZSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKG1hdGNoKSA9PiAhIW1hdGNoKVxuICAgICAgICAubWFwKChtYXRjaCkgPT4gKHsgbmFtZTogbWF0Y2ghWzFdLCB2ZXJzaW9uOiBtYXRjaCFbM10gfSkpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBpbnN0YWxsZWQgcGFja2FnZXMgdXNpbmcgJ2RvdG5ldCBsaXN0IHBhY2thZ2UnOiAke2V9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmFic3RyYWN0IGNsYXNzIEphdmFQYWNrYWdlTWFuYWdlciBleHRlbmRzIFBhY2thZ2VNYW5hZ2VyIHtcbiAgcHVibGljIGFzeW5jIGlzTnBtVmVyc2lvbkF2YWlsYWJsZShcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgIHBhY2thZ2VWZXJzaW9uOiBzdHJpbmcsXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGxvZ2dlci5kZWJ1ZyhgQ2hlY2tpbmcgaWYgJHtwYWNrYWdlTmFtZX1AJHtwYWNrYWdlVmVyc2lvbn0gaXMgYXZhaWxhYmxlYCk7XG5cbiAgICBjb25zdCBwYXJ0cyA9IHBhY2thZ2VOYW1lLnNwbGl0KFwiLlwiKTtcbiAgICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXG4gICAgICAgIGBFeHBlY3RlZCBwYWNrYWdlIG5hbWUgdG8gYmUgaW4gZm9ybWF0IFwiZ3JvdXAuYXJ0aWZhY3RcIiwgZS5nLiBcImNvbS5oYXNoaWNvcnAuY2RrdGYtcHJvdmlkZXItZ29vZ2xlXCIsIGdvdDogJHtwYWNrYWdlTmFtZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWNrYWdlSWRlbnRpZmllciA9IHBhcnRzLnBvcCgpO1xuICAgIGNvbnN0IGdyb3VwSWQgPSBwYXJ0cy5qb2luKFwiLlwiKTtcblxuICAgIGNvbnN0IHVybCA9IGBodHRwczovL3NlYXJjaC5tYXZlbi5vcmcvc29scnNlYXJjaC9zZWxlY3Q/cT1nOiR7Z3JvdXBJZH0rQU5EK2E6JHtwYWNrYWdlSWRlbnRpZmllcn0rQU5EK3Y6JHtwYWNrYWdlVmVyc2lvbn0mcm93cz01Jnd0PWpzb25gO1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBUcnlpbmcgdG8gZmluZCBwYWNrYWdlIHZlcnNpb24gYnkgcXVlcnlpbmcgTWF2ZW4gQ2VudHJhbCB1bmRlciAnJHt1cmx9J2AsXG4gICAgKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7XG5cbiAgICBjb25zdCBqc29uID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgYW55O1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBHb3QgcmVzcG9uc2UgZnJvbSB0aGUgTWF2ZW4gcGFja2FnZSBzZWFyY2ggZm9yICR7cGFja2FnZU5hbWV9OiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBqc29uLFxuICAgICAgKX1gLFxuICAgICk7XG5cbiAgICByZXR1cm4gKGpzb24/LnJlc3BvbnNlPy5udW1Gb3VuZCA/PyAwKSA+IDA7XG4gIH1cbn1cblxuY2xhc3MgTWF2ZW5QYWNrYWdlTWFuYWdlciBleHRlbmRzIEphdmFQYWNrYWdlTWFuYWdlciB7XG4gIHB1YmxpYyBhc3luYyBhZGRQYWNrYWdlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb24gPSBcIkxBVEVTVFwiLCAvLyB0aGUgbGF0ZXN0IG9wdGlvbiBpcyBkZXByZWNhdGVkIGluIG1hdmVuIDMuNVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgQWRkaW5nICR7cGFja2FnZU5hbWV9IEAgJHtwYWNrYWdlVmVyc2lvbn0gdG8gcG9tLnhtbGApO1xuICAgIC8vIEFzc2VydCBwb20ueG1sIGV4aXN0c1xuICAgIGNvbnN0IHBvbVBhdGggPSBwYXRoLmpvaW4odGhpcy53b3JraW5nRGlyZWN0b3J5LCBcInBvbS54bWxcIik7XG4gICAgaWYgKCFleGlzdHNTeW5jKHBvbVBhdGgpKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoXG4gICAgICAgIFwiTm8gcG9tLnhtbCBmb3VuZCBpbiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBQbGVhc2UgcnVuIHRoZSBjb21tYW5kIGZyb20gdGhlIHJvb3Qgb2YgeW91ciBwcm9qZWN0LlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwb20gPSBhd2FpdCBmcy5yZWFkRmlsZShwb21QYXRoLCBcInV0ZjhcIik7XG4gICAgY29uc3QgcG9tWG1sID0gKGF3YWl0IHhtbDJqcyhwb20sIHt9KSkgYXMgRWxlbWVudDtcblxuICAgIC8vIE11dGF0ZSBkZXBlbmRlbmNpZXNcbiAgICBjb25zdCBuYW1lUGFydHMgPSBwYWNrYWdlTmFtZS5zcGxpdChcIi5cIik7XG4gICAgY29uc3QgZ3JvdXBJZCA9IG5hbWVQYXJ0cy5zbGljZSgwLCBuYW1lUGFydHMubGVuZ3RoIC0gMSkuam9pbihcIi5cIik7XG4gICAgY29uc3QgYXJ0aWZhY3RJZCA9IG5hbWVQYXJ0c1tuYW1lUGFydHMubGVuZ3RoIC0gMV07XG5cbiAgICBjb25zdCBuZXdEZXBlbmRlbmN5ID0gKGF3YWl0IHhtbDJqcyhcbiAgICAgIGA8ZGVwZW5kZW5jeT5cbiAgICA8Z3JvdXBJZD4ke2dyb3VwSWR9PC9ncm91cElkPlxuICAgIDxhcnRpZmFjdElkPiR7YXJ0aWZhY3RJZH08L2FydGlmYWN0SWQ+XG4gICAgPHZlcnNpb24+JHtwYWNrYWdlVmVyc2lvbn08L3ZlcnNpb24+XG48L2RlcGVuZGVuY3k+YCxcbiAgICApKSBhcyBFbGVtZW50O1xuXG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gcG9tWG1sLmVsZW1lbnRzXG4gICAgICA/LmZpbmQoKGVsKSA9PiBlbC5uYW1lID09PSBcInByb2plY3RcIilcbiAgICAgID8uZWxlbWVudHM/LmZpbmQoKGVsKSA9PiBlbC5uYW1lID09PSBcImRlcGVuZGVuY2llc1wiKTtcblxuICAgIGlmICghZGVwZW5kZW5jaWVzKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoYENvdWxkIG5vdCBmaW5kIGRlcGVuZGVuY2llcyBzZWN0aW9uIGluIHRoZSBwb20ueG1sYCk7XG4gICAgfVxuICAgIGRlcGVuZGVuY2llcy5lbGVtZW50cyA9IChkZXBlbmRlbmNpZXM/LmVsZW1lbnRzIHx8IFtdKS5maWx0ZXIoXG4gICAgICAoZWwpID0+XG4gICAgICAgIGVsLmVsZW1lbnRzPy5zb21lKFxuICAgICAgICAgIChncm91cCkgPT5cbiAgICAgICAgICAgIGdyb3VwLm5hbWUgPT09IFwiZ3JvdXBJZFwiICYmIGdyb3VwLmVsZW1lbnRzPy5bMF0udGV4dCAhPT0gZ3JvdXBJZCxcbiAgICAgICAgKSB8fFxuICAgICAgICBlbC5lbGVtZW50cz8uc29tZShcbiAgICAgICAgICAoYXJ0aWZhY3QpID0+XG4gICAgICAgICAgICBhcnRpZmFjdC5uYW1lID09PSBcImFydGlmYWN0SWRcIiAmJlxuICAgICAgICAgICAgYXJ0aWZhY3QuZWxlbWVudHM/LlswXS50ZXh0ICE9PSBhcnRpZmFjdElkLFxuICAgICAgICApLFxuICAgICk7XG4gICAgZGVwZW5kZW5jaWVzPy5lbGVtZW50cz8ucHVzaChuZXdEZXBlbmRlbmN5LmVsZW1lbnRzIVswXSk7XG5cbiAgICAvLyBXcml0ZSBuZXcgcG9tLnhtbFxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShwb21QYXRoLCBqczJ4bWwocG9tWG1sLCB7IHNwYWNlczogMiB9KSk7XG5cbiAgICAvLyBJbnN0YWxsXG4gICAgYXdhaXQgZXhlYyhcIm12blwiLCBbXCJpbnN0YWxsXCJdLCB7IGN3ZDogdGhpcy53b3JraW5nRGlyZWN0b3J5IH0pO1xuICAgIGNvbnNvbGUubG9nKFwiUGFja2FnZSBpbnN0YWxsZWQuXCIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RQcm92aWRlclBhY2thZ2VzKCk6IFByb21pc2U8XG4gICAgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W11cbiAgPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBvbVBhdGggPSBwYXRoLmpvaW4odGhpcy53b3JraW5nRGlyZWN0b3J5LCBcInBvbS54bWxcIik7XG4gICAgICBpZiAoIWV4aXN0c1N5bmMocG9tUGF0aCkpIHtcbiAgICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgICAgIFwiTm8gcG9tLnhtbCBmb3VuZCBpbiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBQbGVhc2UgcnVuIHRoZSBjb21tYW5kIGZyb20gdGhlIHJvb3Qgb2YgeW91ciBwcm9qZWN0LlwiLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwb20gPSBhd2FpdCBmcy5yZWFkRmlsZShwb21QYXRoLCBcInV0ZjhcIik7XG4gICAgICBjb25zdCBwb21YbWwgPSAoYXdhaXQgeG1sMmpzKHBvbSwge30pKSBhcyBFbGVtZW50O1xuXG4gICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPVxuICAgICAgICBwb21YbWwuZWxlbWVudHNcbiAgICAgICAgICA/LmZpbmQoKGVsKSA9PiBlbC5uYW1lID09PSBcInByb2plY3RcIilcbiAgICAgICAgICA/LmVsZW1lbnRzPy5maW5kKChlbCkgPT4gZWwubmFtZSA9PT0gXCJkZXBlbmRlbmNpZXNcIik/LmVsZW1lbnRzID8/IFtdO1xuXG4gICAgICByZXR1cm4gZGVwZW5kZW5jaWVzXG4gICAgICAgIC5tYXAoKGRlcCkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBgJHtcbiAgICAgICAgICAgIGRlcC5lbGVtZW50cz8uZmluZCgoZWwpID0+IGVsLm5hbWUgPT09IFwiZ3JvdXBJZFwiKT8uZWxlbWVudHM/LlswXVxuICAgICAgICAgICAgICAudGV4dFxuICAgICAgICAgIH0uJHtcbiAgICAgICAgICAgIGRlcC5lbGVtZW50cz8uZmluZCgoZWwpID0+IGVsLm5hbWUgPT09IFwiYXJ0aWZhY3RJZFwiKT8uZWxlbWVudHM/LlswXVxuICAgICAgICAgICAgICAudGV4dFxuICAgICAgICAgIH1gLFxuICAgICAgICAgIHZlcnNpb246IGRlcC5lbGVtZW50cz8uZmluZCgoZWwpID0+IGVsLm5hbWUgPT09IFwidmVyc2lvblwiKVxuICAgICAgICAgICAgPy5lbGVtZW50cz8uWzBdLnRleHQgYXMgc3RyaW5nLFxuICAgICAgICB9KSlcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAoZGVwKSA9PlxuICAgICAgICAgICAgZGVwLm5hbWUuc3RhcnRzV2l0aChcImNvbS5oYXNoaWNvcnAuY2RrdGYtcHJvdmlkZXItXCIpIHx8XG4gICAgICAgICAgICBkZXAubmFtZS5zdGFydHNXaXRoKFwiaW8uY2RrdG4uY2RrdG4tcHJvdmlkZXItXCIpLFxuICAgICAgICApO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBpbnN0YWxsZWQgcGFja2FnZXMgcmVhZGluZyB0aGUgcG9tLnhtbDogJHtlLm1lc3NhZ2V9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIEdyYWRsZVBhY2thZ2VNYW5hZ2VyIGV4dGVuZHMgSmF2YVBhY2thZ2VNYW5hZ2VyIHtcbiAgcHVibGljIHN0YXRpYyBpc0dyYWRsZVByb2plY3Qod29ya2luZ0RpcmVjdG9yeTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzR3JhZGxlUHJvamVjdCh3b3JraW5nRGlyZWN0b3J5KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRQYWNrYWdlKFxuICAgIHBhY2thZ2VGUU46IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbiA9IFwibGF0ZXN0LnJlbGVhc2VcIixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYnVpbGRHcmFkbGVQYXRoID0gcGF0aC5qb2luKHRoaXMud29ya2luZ0RpcmVjdG9yeSwgXCJidWlsZC5ncmFkbGVcIik7XG4gICAgY29uc3QgYnVpbGRHcmFkbGUgPSBhd2FpdCBmcy5yZWFkRmlsZShidWlsZEdyYWRsZVBhdGgsIFwidXRmOFwiKTtcbiAgICBjb25zdCBidWlsZEdyYWRsZUxpbmVzID0gYnVpbGRHcmFkbGUuc3BsaXQoL1xccj9cXG4vKTtcblxuICAgIGNvbnN0IGRlcGVuZGVuY2llc1JlZ2V4ID0gL2RlcGVuZGVuY2llc1xccytcXHsvaTtcbiAgICBjb25zdCBkZXBlbmRlbmN5QmxvY2tTdGFydCA9IGJ1aWxkR3JhZGxlTGluZXMuZmluZEluZGV4KChsaW5lKSA9PlxuICAgICAgZGVwZW5kZW5jaWVzUmVnZXgudGVzdChsaW5lKSxcbiAgICApO1xuICAgIGlmIChkZXBlbmRlbmN5QmxvY2tTdGFydCA9PT0gLTEpIHtcbiAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgXCJDb3VsZCBub3QgZmluZCBkZXBlbmRlbmNpZXMgc2VjdGlvbiBpbiB0aGUgYnVpbGQuZ3JhZGxlXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhY2thZ2VTZWdtZW50cyA9IHBhY2thZ2VGUU4uc3BsaXQoXCIuXCIpO1xuICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gcGFja2FnZVNlZ21lbnRzLnBvcCgpO1xuICAgIGNvbnN0IGdyb3VwTmFtZSA9IHBhY2thZ2VTZWdtZW50cy5qb2luKFwiLlwiKTtcbiAgICBjb25zdCBkZXBlbmRlbmN5U3BlY2lmaWVyID0gYCR7Z3JvdXBOYW1lfToke3BhY2thZ2VOYW1lfWA7XG4gICAgY29uc3QgZGVwZW5kZW5jeUFuZFZlcnNpb25TcGVjaWZpZXIgPSBgJHtkZXBlbmRlbmN5U3BlY2lmaWVyfToke3BhY2thZ2VWZXJzaW9ufWA7XG5cbiAgICBjb25zdCBleGlzdGluZ0RlcGVuZGVuY3kgPSBidWlsZEdyYWRsZUxpbmVzLmZpbmRJbmRleCgobGluZSkgPT5cbiAgICAgIGxpbmUuaW5jbHVkZXMoZGVwZW5kZW5jeVNwZWNpZmllciksXG4gICAgKTtcbiAgICBpZiAoZXhpc3RpbmdEZXBlbmRlbmN5ICE9PSAtMSkge1xuICAgICAgYnVpbGRHcmFkbGVMaW5lcy5zcGxpY2UoZXhpc3RpbmdEZXBlbmRlbmN5LCAxKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdQYWNrYWdlRGVwZW5kZW5jeSA9IGBcXHRpbXBsZW1lbnRhdGlvbiAnJHtkZXBlbmRlbmN5QW5kVmVyc2lvblNwZWNpZmllcn0nYDtcbiAgICBidWlsZEdyYWRsZUxpbmVzLnNwbGljZShkZXBlbmRlbmN5QmxvY2tTdGFydCArIDEsIDAsIG5ld1BhY2thZ2VEZXBlbmRlbmN5KTtcblxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShidWlsZEdyYWRsZVBhdGgsIGJ1aWxkR3JhZGxlTGluZXMuam9pbihcIlxcblwiKSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbGlzdFByb3ZpZGVyUGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+IHtcbiAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBhd2FpdCBnZXRHcmFkbGVEZXBlbmRlbmNpZXMoKTtcbiAgICBpZiAoIWRlcGVuZGVuY2llcykge1xuICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFwiQ291bGQgbm90IGZpbmQgYW55IGRlcGVuZGVuY2llc1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXBlbmRlbmN5TGlzdCA9IGRlcGVuZGVuY2llc1xuICAgICAgLm1hcCgobGluZSkgPT4gZ2V0RGVwZW5kZW5jeUluZm9ybWF0aW9uRnJvbUxpbmUobGluZSkpXG4gICAgICAuZmlsdGVyKChkZXApID0+IHtcbiAgICAgICAgaWYgKCFkZXApIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBkZXAubmFtZS5pbmNsdWRlcyhcImNka3RmLXByb3ZpZGVyLVwiKSB8fFxuICAgICAgICAgIGRlcC5uYW1lLmluY2x1ZGVzKFwiY2RrdG4tcHJvdmlkZXItXCIpXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICAgLm1hcCgoZGVwKSA9PiAoe1xuICAgICAgICBuYW1lOiBgY29tLmhhc2hpY29ycC4ke2RlcCEubmFtZX1gLFxuICAgICAgICB2ZXJzaW9uOiBkZXAhLnZlcnNpb24sXG4gICAgICB9KSk7XG5cbiAgICByZXR1cm4gZGVwZW5kZW5jeUxpc3Q7XG4gIH1cbn1cblxuY2xhc3MgR29QYWNrYWdlTWFuYWdlciBleHRlbmRzIFBhY2thZ2VNYW5hZ2VyIHtcbiAgcHVibGljIGFzeW5jIGFkZFBhY2thZ2UoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbj86IHN0cmluZyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coYEFkZGluZyBwYWNrYWdlICR7cGFja2FnZU5hbWV9IEAgJHtwYWNrYWdlVmVyc2lvbn1gKTtcblxuICAgIGNvbnN0IG1ham9yVmVyc2lvbjogbnVtYmVyIHwgdW5kZWZpbmVkID0gcGFja2FnZVZlcnNpb25cbiAgICAgID8gc2VtdmVyLm1ham9yKHBhY2thZ2VWZXJzaW9uKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBsZXQgdmVyc2lvblBhY2thZ2VTdWZmaXggPSBcIlwiO1xuICAgIGlmICh0eXBlb2YgbWFqb3JWZXJzaW9uID09PSBcIm51bWJlclwiICYmIG1ham9yVmVyc2lvbiA+IDEpIHtcbiAgICAgIHZlcnNpb25QYWNrYWdlU3VmZml4ID0gYC92JHttYWpvclZlcnNpb259YDtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgUnVubmluZyAnZ28gZ2V0ICR7cGFja2FnZU5hbWV9JHt2ZXJzaW9uUGFja2FnZVN1ZmZpeH1AdiR7cGFja2FnZVZlcnNpb259J2AsXG4gICAgKTtcbiAgICAvLyBJbnN0YWxsXG4gICAgYXdhaXQgZXhlYyhcbiAgICAgIFwiZ29cIixcbiAgICAgIFtcImdldFwiLCBgJHtwYWNrYWdlTmFtZX0ke3ZlcnNpb25QYWNrYWdlU3VmZml4fUB2JHtwYWNrYWdlVmVyc2lvbn1gXSxcbiAgICAgIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlBhY2thZ2UgaW5zdGFsbGVkLlwiKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpc05wbVZlcnNpb25BdmFpbGFibGUoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbjogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsb2dnZXIuZGVidWcoYENoZWNraW5nIGlmICR7cGFja2FnZU5hbWV9QCR7cGFja2FnZVZlcnNpb259IGlzIGF2YWlsYWJsZWApO1xuXG4gICAgLy8gZS5nLiBnaXRodWIuY29tL2Nka3RmL2Nka3RmLXByb3ZpZGVyLWdvb2dsZS1nby9nb29nbGVcbiAgICBjb25zdCBwYXJ0cyA9IHBhY2thZ2VOYW1lLnNwbGl0KFwiL1wiKTtcbiAgICBpZiAocGFydHMubGVuZ3RoICE9PSA0KSB7XG4gICAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXG4gICAgICAgIGBFeHBlY3RpbmcgR28gcGFja2FnZSBuYW1lIHRvIGJlIGluIHRoZSBmb3JtYXQgb2YgZ2l0aHViLmNvbS88b3JnPi88cmVwbz4vPHBhY2thZ2U+LCBnb3QgJHtwYWNrYWdlTmFtZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmcgPSBwYXJ0c1sxXTtcbiAgICBjb25zdCByZXBvID0gcGFydHNbMl07XG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXJ0c1szXTtcblxuICAgIGNvbnN0IHVybCA9IGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7b3JnfS8ke3JlcG99L2dpdC9yZWYvdGFncy8ke3BhY2thZ2VQYXRofS92JHtwYWNrYWdlVmVyc2lvbn1gO1xuICAgIGxvZ2dlci5kZWJ1ZyhgRmV0Y2hpbmcgdGFncyBmb3IgJHtvcmd9LyR7cmVwb30gZnJvbSAnJHt1cmx9J2ApO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi92bmQuZ2l0aHViK2pzb25cIixcbiAgICAgICAgXCJVc2VyLUFnZW50XCI6IFwiT3BlbkNvbnN0cnVjdHMvY2RrdG4tY2xpXCIsXG4gICAgICAgIC4uLihHSVRIVUJfQVBJX1RPS0VOX0NES1RGXG4gICAgICAgICAgPyB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtHSVRIVUJfQVBJX1RPS0VOX0NES1RGfWAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGpzb24gPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyBhbnk7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYEdvdCByZXNwb25zZSBmcm9tIEdpdEh1YnMgcmVwb3NpdG9yeSB0YWcgZW5kcG9pbnQgZm9yICR7cGFja2FnZU5hbWV9OiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBqc29uLFxuICAgICAgKX1gLFxuICAgICk7XG5cbiAgICBpZiAoanNvbiAmJiBqc29uLnJlZikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmluZm8oXG4gICAgICBgQ291bGQgbm90IGZpbmQgdGhlIHRhZyAke3BhY2thZ2VQYXRofS92JHtwYWNrYWdlVmVyc2lvbn0gaW4gdGhlIHJlcG9zaXRvcnkgJHtvcmd9LyR7cmVwb306ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGpzb24sXG4gICAgICApfX1gLFxuICAgICk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbGlzdFByb3ZpZGVyUGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZ29TdW1QYXRoID0gcGF0aC5qb2luKHRoaXMud29ya2luZ0RpcmVjdG9yeSwgXCJnby5zdW1cIik7XG4gICAgICBpZiAoIWV4aXN0c1N5bmMoZ29TdW1QYXRoKSkge1xuICAgICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoXG4gICAgICAgICAgXCJObyBnby5zdW0gZm91bmQgaW4gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gUGxlYXNlIHJ1biB0aGUgY29tbWFuZCBmcm9tIHRoZSByb290IG9mIHlvdXIgcHJvamVjdC5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ29TdW0gPSBhd2FpdCBmcy5yZWFkRmlsZShnb1N1bVBhdGgsIFwidXRmOFwiKTtcbiAgICAgIGNvbnN0IGRlZHVwZWRQcm92aWRlck5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgICByZXR1cm4gZ29TdW1cbiAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKGxpbmUpID0+XG4gICAgICAgICAgICBsaW5lLnN0YXJ0c1dpdGgoXCJnaXRodWIuY29tL2hhc2hpY29ycC9jZGt0Zi1wcm92aWRlclwiKSB8fFxuICAgICAgICAgICAgbGluZS5zdGFydHNXaXRoKFwiZ2l0aHViLmNvbS9jZGt0Zi9jZGt0Zi1wcm92aWRlclwiKSB8fFxuICAgICAgICAgICAgbGluZS5zdGFydHNXaXRoKFwiZ2l0aHViLmNvbS9jZGt0bi1pby9jZGt0bi1wcm92aWRlclwiKSxcbiAgICAgICAgKVxuICAgICAgICAubWFwKChsaW5lKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFydHMgPSBsaW5lLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXG4gICAgICAgICAgICAgIGBFeHBlY3RlZCBsaW5lIGluIGdvLnN1bSB0byBiZSBpbiB0aGUgZm9ybWF0IG9mICc8cGFja2FnZT4gPHZlcnNpb24+IDxjaGVja3N1bT4nLCBnb3Q6ICR7bGluZX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBwYXJ0WzBdIGNvdWxkIGJlIGdpdGh1Yi5jb20vYXdzL2NvbnN0cnVjdHMtZ28vY29uc3RydWN0cy92MTBcbiAgICAgICAgICBjb25zdCBuYW1lID0gcGFydHNbMF0uc3BsaXQoXCIvXCIpLnNsaWNlKDAsIDQpLmpvaW4oXCIvXCIpO1xuXG4gICAgICAgICAgY29uc3QgdmVyc2lvbiA9IHBhcnRzWzFdLnNwbGl0KFwiL1wiKVswXTtcblxuICAgICAgICAgIGlmIChkZWR1cGVkUHJvdmlkZXJOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IG5hbWU6IFwiXCIsIHZlcnNpb246IFwiXCIgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWR1cGVkUHJvdmlkZXJOYW1lcy5hZGQobmFtZSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAocHJvdmlkZXJJbmZvKSA9PiAhIXByb3ZpZGVySW5mby5uYW1lICYmICEhcHJvdmlkZXJJbmZvLnZlcnNpb24sXG4gICAgICAgICk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIGluc3RhbGxlZCBwYWNrYWdlcyByZWFkaW5nIHRoZSBnby5zdW06ICR7ZS5tZXNzYWdlfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19
595
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kZXBlbmRlbmNpZXMvcGFja2FnZS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyw0Q0FRd0I7QUFDeEIsdUNBQXNDO0FBQ3RDLGdEQUF3QjtBQUN4QixtQ0FBaUQ7QUFDakQsNkNBQStCO0FBQy9CLCtDQUFpQztBQUNqQyw0REFBK0I7QUFDL0IsdUNBQXlCO0FBRXpCLDZGQUE2RjtBQUM3RixzREFBc0Q7QUFDdEQsTUFBTSxFQUFFLHNCQUFzQixFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUUvQyxJQUFJO0FBQ0osd0JBQXdCO0FBQ3hCLDBCQUEwQjtBQUMxQixrQkFBa0I7QUFDbEIsMElBQTBJO0FBQzFJLE9BQU87QUFDUCxzQkFBc0I7QUFDdEIsa0NBQWtDO0FBQ2xDLDZCQUE2QjtBQUM3QixxR0FBcUc7QUFDckcsU0FBUztBQUNULE1BQU0sYUFBYSxHQUFHLENBQUM7S0FDcEIsTUFBTSxDQUFDO0lBQ04sWUFBWSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQ3BCLENBQUM7U0FDRSxNQUFNLENBQUM7UUFDTixPQUFPLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRTtLQUNwQixDQUFDO1NBQ0QsU0FBUyxFQUFFLENBQ2Y7Q0FDRixDQUFDO0tBQ0QsV0FBVyxFQUFFO0tBQ2IsU0FBUyxFQUFFLENBQUM7QUFFZixJQUFJO0FBQ0osb0JBQW9CO0FBQ3BCLGNBQWM7QUFDZCxzQkFBc0I7QUFDdEIsaUJBQWlCO0FBQ2pCLFVBQVU7QUFDVixtREFBbUQ7QUFDbkQsMEJBQTBCO0FBQzFCLHdCQUF3QjtBQUN4QiwyQkFBMkI7QUFDM0IscUJBQXFCO0FBQ3JCLFVBQVU7QUFDVixRQUFRO0FBQ1IsTUFBTTtBQUNOLElBQUk7QUFD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S0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUV2QyxJQUFJLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNuQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ25DLENBQUM7Z0JBRUQsb0JBQW9CLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUUvQixPQUFPO29CQUNMLElBQUk7b0JBQ0osT0FBTztpQkFDUixDQUFDO1lBQ0osQ0FBQyxDQUFDO2lCQUNELE1BQU0sQ0FDTCxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQ2hFLENBQUM7UUFDTixDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksS0FBSyxDQUNiLDhEQUE4RCxDQUFDLENBQUMsT0FBTyxFQUFFLENBQzFFLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7XG4gIExhbmd1YWdlLFxuICBleGVjLFxuICBFcnJvcnMsXG4gIGxvZ2dlcixcbiAgaXNHcmFkbGVQcm9qZWN0LFxuICBnZXRHcmFkbGVEZXBlbmRlbmNpZXMsXG4gIGdldERlcGVuZGVuY3lJbmZvcm1hdGlvbkZyb21MaW5lLFxufSBmcm9tIFwiQGNka3RuL2NvbW1vbnNcIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMgfSBmcm9tIFwiZnMtZXh0cmFcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyB4bWwyanMsIGpzMnhtbCwgRWxlbWVudCB9IGZyb20gXCJ4bWwtanNcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy1leHRyYVwiO1xuaW1wb3J0ICogYXMgc2VtdmVyIGZyb20gXCJzZW12ZXJcIjtcbmltcG9ydCBmZXRjaCBmcm9tIFwibm9kZS1mZXRjaFwiO1xuaW1wb3J0ICogYXMgeiBmcm9tIFwiem9kXCI7XG5cbi8vIENhbid0IHVzZSBDREtURl8gYXMgcHJlZml4IGJlY2F1c2UgeWFyZ3MgLmVudihcIkNES1RGXCIpIGluIHN0cmljdCBtb2RlIGRvZXMgbm90IGFsbG93IHVzIHRvXG4vLyBSZWZlciB0bzogaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzL2lzc3Vlcy84NzNcbmNvbnN0IHsgR0lUSFVCX0FQSV9UT0tFTl9DREtURiB9ID0gcHJvY2Vzcy5lbnY7XG5cbi8vIHtcbi8vICAgXCJ2ZXJzaW9uXCI6IFwiMS4wLjBcIixcbi8vICAgXCJuYW1lXCI6IFwidGVzdFVTSGFzRlwiLFxuLy8gICBcInByb2JsZW1zXCI6IFtcbi8vICAgICBcImV4dHJhbmVvdXM6IGFyY2hpdmVyLXV0aWxzQDIuMS4wIC9wcml2YXRlL3Zhci9mb2xkZXJzL3pfL3YwM2wzM2Q1NWZiNTducnIzYjFxMDNjaDAwMDBncS9UL3Rlc3RVU0hhc0Yvbm9kZV9tb2R1bGVzL2FyY2hpdmVyLXV0aWxzXCIsXG4vLyAgIF0sXG4vLyAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbi8vICAgICBcIkBjZGt0Zi9wcm92aWRlci1yYW5kb21cIjoge1xuLy8gICAgICAgXCJ2ZXJzaW9uXCI6IFwiMy4wLjExXCIsXG4vLyAgICAgICBcInJlc29sdmVkXCI6IFwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGNka3RmL3Byb3ZpZGVyLXJhbmRvbS8tL3Byb3ZpZGVyLXJhbmRvbS0zLjAuMTEudGd6XCJcbi8vICAgICB9LFxuY29uc3QgbnBtTGlzdFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgZGVwZW5kZW5jaWVzOiB6LnJlY29yZChcbiAgICAgIHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgdmVyc2lvbjogei5zdHJpbmcoKSxcbiAgICAgICAgfSlcbiAgICAgICAgLm5vbnN0cmljdCgpLFxuICAgICksXG4gIH0pXG4gIC5kZWVwUGFydGlhbCgpXG4gIC5ub25zdHJpY3QoKTtcblxuLy8ge1xuLy8gICBcInR5cGVcIjogXCJ0cmVlXCIsXG4vLyAgIFwiZGF0YVwiOiB7XG4vLyAgICAgXCJ0eXBlXCI6IFwibGlzdFwiLFxuLy8gICAgIFwidHJlZXNcIjogW1xuLy8gICAgICAge1xuLy8gICAgICAgICBcIm5hbWVcIjogXCJAY2RrdGYvcHJvdmlkZXItcmFuZG9tQDMuMC4xMVwiLFxuLy8gICAgICAgICBcImNoaWxkcmVuXCI6IFtdLFxuLy8gICAgICAgICBcImhpbnRcIjogbnVsbCxcbi8vICAgICAgICAgXCJjb2xvclwiOiBcImJvbGRcIixcbi8vICAgICAgICAgXCJkZXB0aFwiOiAwXG4vLyAgICAgICB9XG4vLyAgICAgXVxuLy8gICB9XG4vLyB9XG5jb25zdCB5YXJuTGlzdFNjaGVtYSA9IHpcbiAgLm9iamVjdCh7XG4gICAgZGF0YTogelxuICAgICAgLm9iamVjdCh7XG4gICAgICAgIHRyZWVzOiB6LmFycmF5KFxuICAgICAgICAgIHpcbiAgICAgICAgICAgIC5vYmplY3Qoe1xuICAgICAgICAgICAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5ub25zdHJpY3QoKSxcbiAgICAgICAgKSxcbiAgICAgIH0pXG4gICAgICAubm9uc3RyaWN0KCksXG4gIH0pXG4gIC5kZWVwUGFydGlhbCgpXG4gIC5ub25zdHJpY3QoKTtcblxuLy8gW1xuLy8gICB7XG4vLyAgICAgXCJuYW1lXCI6IFwiYXBwZGlyc1wiLFxuLy8gICAgIFwidmVyc2lvblwiOiBcIjEuNC40XCJcbi8vICAgfSxcbi8vICAge1xuY29uc3QgcGlwUGFja2FnZVNjaGVtYSA9IHouYXJyYXkoXG4gIHoub2JqZWN0KHsgbmFtZTogei5zdHJpbmcoKSwgdmVyc2lvbjogei5zdHJpbmcoKSB9KS5ub25zdHJpY3QoKSxcbik7XG5cbi8qKlxuICogbWFuYWdlcyBpbnN0YWxsaW5nLCB1cGRhdGluZywgYW5kIHJlbW92aW5nIGRlcGVuZGVuY2llc1xuICogaW4gdGhlIHBhY2thZ2Ugc3lzdGVtIHVzZWQgYnkgdGhlIHRhcmdldCBsYW5ndWFnZSBvZiBhIENES1ROXG4gKiBwcm9qZWN0XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBQYWNrYWdlTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCByZWFkb25seSB3b3JraW5nRGlyZWN0b3J5OiBzdHJpbmcpIHt9XG5cbiAgcHVibGljIHN0YXRpYyBmb3JMYW5ndWFnZShcbiAgICBsYW5ndWFnZTogTGFuZ3VhZ2UsXG4gICAgd29ya2luZ0RpcmVjdG9yeTogc3RyaW5nLFxuICApOiBQYWNrYWdlTWFuYWdlciB7XG4gICAgc3dpdGNoIChsYW5ndWFnZSkge1xuICAgICAgY2FzZSBMYW5ndWFnZS5HTzpcbiAgICAgICAgcmV0dXJuIG5ldyBHb1BhY2thZ2VNYW5hZ2VyKHdvcmtpbmdEaXJlY3RvcnkpO1xuICAgICAgY2FzZSBMYW5ndWFnZS5UWVBFU0NSSVBUOlxuICAgICAgICByZXR1cm4gbmV3IE5vZGVQYWNrYWdlTWFuYWdlcih3b3JraW5nRGlyZWN0b3J5KTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuUFlUSE9OOlxuICAgICAgICByZXR1cm4gbmV3IFB5dGhvblBhY2thZ2VNYW5hZ2VyKHdvcmtpbmdEaXJlY3RvcnkpO1xuICAgICAgY2FzZSBMYW5ndWFnZS5DU0hBUlA6XG4gICAgICAgIHJldHVybiBuZXcgTnVnZXRQYWNrYWdlTWFuYWdlcih3b3JraW5nRGlyZWN0b3J5KTtcbiAgICAgIGNhc2UgTGFuZ3VhZ2UuSkFWQTpcbiAgICAgICAgaWYgKEdyYWRsZVBhY2thZ2VNYW5hZ2VyLmlzR3JhZGxlUHJvamVjdCh3b3JraW5nRGlyZWN0b3J5KSkge1xuICAgICAgICAgIHJldHVybiBuZXcgR3JhZGxlUGFja2FnZU1hbmFnZXIod29ya2luZ0RpcmVjdG9yeSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNYXZlblBhY2thZ2VNYW5hZ2VyKHdvcmtpbmdEaXJlY3RvcnkpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGxhbmd1YWdlOiAke2xhbmd1YWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCBhZGRQYWNrYWdlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb24/OiBzdHJpbmcsXG4gICAgc2lsZW50PzogYm9vbGVhbixcbiAgKTogUHJvbWlzZTx2b2lkPjtcbiAgLy8gYWRkIGNoZWNrIGlmIHBhY2thZ2UgZXhpc3RzIGFscmVhZHkuIG1pZ2h0IHF1ZXJ5IHZlcnNpb24gaW4gdGhlIGZ1dHVyZSBhbmQgb2ZmZXIgdG8gdXBncmFkZT9cblxuICBwdWJsaWMgYWJzdHJhY3QgaXNOcG1WZXJzaW9uQXZhaWxhYmxlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb246IHN0cmluZyxcbiAgKTogUHJvbWlzZTxib29sZWFuPjtcblxuICBwdWJsaWMgYWJzdHJhY3QgbGlzdFByb3ZpZGVyUGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+O1xufVxuXG5jbGFzcyBOb2RlUGFja2FnZU1hbmFnZXIgZXh0ZW5kcyBQYWNrYWdlTWFuYWdlciB7XG4gIHByaXZhdGUgaGFzWWFybkxvY2tmaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBleGlzdHNTeW5jKHBhdGguam9pbih0aGlzLndvcmtpbmdEaXJlY3RvcnksIFwieWFybi5sb2NrXCIpKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRQYWNrYWdlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb24/OiBzdHJpbmcsXG4gICAgc2lsZW50PzogYm9vbGVhbixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coYEFkZGluZyBwYWNrYWdlICR7cGFja2FnZU5hbWV9IEAgJHtwYWNrYWdlVmVyc2lvbn1gKTtcblxuICAgIC8vIHByb2JlIGZvciBwYWNrYWdlLWxvY2suanNvbiBvciB5YXJuLmxvY2tcbiAgICBsZXQgY29tbWFuZCA9IFwibnBtXCI7XG4gICAgbGV0IGFyZ3MgPSBbXCJpbnN0YWxsXCJdO1xuXG4gICAgaWYgKHRoaXMuaGFzWWFybkxvY2tmaWxlKCkpIHtcbiAgICAgIGNvbW1hbmQgPSBcInlhcm5cIjtcbiAgICAgIGFyZ3MgPSBbXCJhZGRcIl07XG4gICAgfVxuICAgIGFyZ3MucHVzaChcbiAgICAgIHBhY2thZ2VWZXJzaW9uID8gcGFja2FnZU5hbWUgKyBcIkBcIiArIHBhY2thZ2VWZXJzaW9uIDogcGFja2FnZU5hbWUsXG4gICAgKTtcblxuICAgIGlmIChzaWxlbnQpIHtcbiAgICAgIGFyZ3MucHVzaChcIi0tc2lsZW50XCIpO1xuICAgICAgYXJncy5wdXNoKFwiLS1uby1wcm9ncmVzc1wiKTtcbiAgICB9XG5cbiAgICAvLyBJbnN0YWxsIGV4YWN0IHZlcnNpb25cbiAgICAvLyBZYXJuOiBodHRwczovL2NsYXNzaWMueWFybnBrZy5jb20vbGFuZy9lbi9kb2NzL2NsaS9hZGQvI3RvYy15YXJuLWFkZC1leGFjdC1lXG4gICAgLy8gTnBtOiBodHRwczovL2RvY3MubnBtanMuY29tL2NsaS92OC9jb21tYW5kcy9ucG0taW5zdGFsbCNzYXZlLWV4YWN0XG4gICAgYXJncy5wdXNoKFwiLUVcIik7XG5cbiAgICBsb2dnZXIuaW5mbyhcbiAgICAgIGBJbnN0YWxsaW5nIHBhY2thZ2UgJHtwYWNrYWdlTmFtZX0gQCAke3BhY2thZ2VWZXJzaW9ufSB1c2luZyAke2NvbW1hbmR9LmAsXG4gICAgKTtcblxuICAgIGF3YWl0IGV4ZWMoY29tbWFuZCwgYXJncywgeyBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSB9KTtcblxuICAgIGxvZ2dlci5pbmZvKFwiUGFja2FnZSBpbnN0YWxsZWQuXCIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGlzTnBtVmVyc2lvbkF2YWlsYWJsZShcbiAgICBfcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBfcGFja2FnZVZlcnNpb246IHN0cmluZyxcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgLy8gV2UgZ2V0IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSB2ZXJzaW9ucyBmcm9tIG5wbSwgbm8gbmVlZCB0byBjaGVjayBoZXJlXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxpc3RZYXJuUGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgZXhlYyhcInlhcm5cIiwgW1wibGlzdFwiLCBcIi0tanNvblwiXSwge1xuICAgICAgICBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgIH0pO1xuXG4gICAgICBsb2dnZXIuZGVidWcoYExpc3RpbmcgeWFybiBwYWNrYWdlcyB1c2luZyBcInlhcm4gbGlzdCAtLWpzb25cIjogJHtzdGRvdXR9YCk7XG5cbiAgICAgIGNvbnN0IGpzb24gPSB5YXJuTGlzdFNjaGVtYS5wYXJzZShKU09OLnBhcnNlKHN0ZG91dCkpO1xuXG4gICAgICByZXR1cm4gKGpzb24/LmRhdGE/LnRyZWVzIHx8IFtdKVxuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIChkZXA6IGFueSkgPT5cbiAgICAgICAgICAgIGRlcC5uYW1lLnN0YXJ0c1dpdGgoXCJAY2RrdGYvcHJvdmlkZXItXCIpIHx8XG4gICAgICAgICAgICBkZXAubmFtZS5zdGFydHNXaXRoKFwiQGNka3RuL3Byb3ZpZGVyLVwiKSxcbiAgICAgICAgKVxuICAgICAgICAubWFwKChkZXA6IGFueSkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBgQCR7ZGVwLm5hbWUuc3BsaXQoXCJAXCIpWzFdfWAsXG4gICAgICAgICAgdmVyc2lvbjogZGVwLm5hbWUuc3BsaXQoXCJAXCIpWzJdLFxuICAgICAgICB9KSk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIGluc3RhbGxlZCBwYWNrYWdlcyB1c2luZyAneWFybiBsaXN0IC0tanNvbic6ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxpc3ROcG1QYWNrYWdlcygpOiBQcm9taXNlPFxuICAgIHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfVtdXG4gID4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGRvdXQgPSBhd2FpdCBleGVjKFwibnBtXCIsIFtcImxpc3RcIiwgXCItLWpzb25cIl0sIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICB9KTtcblxuICAgICAgbG9nZ2VyLmRlYnVnKGBMaXN0aW5nIG5wbSBwYWNrYWdlcyB1c2luZyBcIm5wbSBsaXN0IC0tanNvblwiOiAke3N0ZG91dH1gKTtcbiAgICAgIGNvbnN0IGpzb24gPSBucG1MaXN0U2NoZW1hLnBhcnNlKEpTT04ucGFyc2Uoc3Rkb3V0KSk7XG5cbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyhqc29uPy5kZXBlbmRlbmNpZXMgfHwge30pXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKFtkZXBOYW1lXSkgPT5cbiAgICAgICAgICAgIGRlcE5hbWUuc3RhcnRzV2l0aChcIkBjZGt0Zi9wcm92aWRlci1cIikgfHxcbiAgICAgICAgICAgIGRlcE5hbWUuc3RhcnRzV2l0aChcIkBjZGt0bi9wcm92aWRlci1cIiksXG4gICAgICAgIClcbiAgICAgICAgLm1hcCgoW25hbWUsIGRlcF0pID0+ICh7IG5hbWUsIHZlcnNpb246IGRlcC52ZXJzaW9uIH0pKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgaW5zdGFsbGVkIHBhY2thZ2VzIHVzaW5nICducG0gbGlzdCAtLWpzb24nOiAke2V9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RQcm92aWRlclBhY2thZ2VzKCk6IFByb21pc2U8XG4gICAgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W11cbiAgPiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzWWFybkxvY2tmaWxlKClcbiAgICAgID8gdGhpcy5saXN0WWFyblBhY2thZ2VzKClcbiAgICAgIDogdGhpcy5saXN0TnBtUGFja2FnZXMoKTtcbiAgfVxufVxuXG5jbGFzcyBQeXRob25QYWNrYWdlTWFuYWdlciBleHRlbmRzIFBhY2thZ2VNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBnZXQgYXBwQ29tbWFuZCgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoXG4gICAgICAgIGZzLnJlYWRGaWxlU3luYyhcbiAgICAgICAgICBwYXRoLnJlc29sdmUodGhpcy53b3JraW5nRGlyZWN0b3J5LCBcImNka3RmLmpzb25cIiksXG4gICAgICAgICAgXCJ1dGY4XCIsXG4gICAgICAgICksXG4gICAgICApW1wiYXBwXCJdO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgICBgQ291bGQgbm90IGZpbmQgZmluZCBhbmQgcGFyc2UgY2RrdGYuanNvbiBpbiAke3RoaXMud29ya2luZ0RpcmVjdG9yeX1gLFxuICAgICAgICBlLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkUGFja2FnZShcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgIHBhY2thZ2VWZXJzaW9uPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1c2VQaXBlbnYgPSB0aGlzLmFwcENvbW1hbmQuaW5jbHVkZXMoXCJwaXBlbnZcIik7XG5cbiAgICBpZiAodXNlUGlwZW52KSB7XG4gICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgYEluc3RhbGxpbmcgcGFja2FnZSAke3BhY2thZ2VOYW1lfSBAICR7cGFja2FnZVZlcnNpb259IHVzaW5nIHBpcGVudi5gLFxuICAgICAgKTtcblxuICAgICAgYXdhaXQgZXhlYyhcInBpcGVudlwiLCBbXCJpbnN0YWxsXCIsIGAke3BhY2thZ2VOYW1lfX49JHtwYWNrYWdlVmVyc2lvbn1gXSwge1xuICAgICAgICBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAgICAgUElQRU5WX1FVSUVUOiBcIjFcIixcbiAgICAgICAgfSxcbiAgICAgICAgc3RkaW86IFtcImluaGVyaXRcIiwgMSwgMV0sXG4gICAgICB9KTtcblxuICAgICAgY29uc29sZS5sb2coXCJQYWNrYWdlIGluc3RhbGxlZC5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICBgSW5zdGFsbGluZyBwYWNrYWdlICR7cGFja2FnZU5hbWV9IEAgJHtwYWNrYWdlVmVyc2lvbn0gdXNpbmcgcGlwLmAsXG4gICAgICApO1xuXG4gICAgICBjb25zdCByZXF1aXJlbWVudHNGaWxlUGF0aCA9IHBhdGguam9pbihcbiAgICAgICAgdGhpcy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgICBcInJlcXVpcmVtZW50cy50eHRcIixcbiAgICAgICk7XG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocmVxdWlyZW1lbnRzRmlsZVBhdGgpKSB7XG4gICAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgICBgQ291bGQgbm90IGZpbmQgcmVxdWlyZW1lbnRzLnR4dCBpbiAke3RoaXMud29ya2luZ0RpcmVjdG9yeX1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXF1aXJlbWVudHMgPSBhd2FpdCBmcy5yZWFkRmlsZShyZXF1aXJlbWVudHNGaWxlUGF0aCwgXCJ1dGY4XCIpO1xuICAgICAgY29uc3QgcmVxdWlyZW1lbnRMaW5lID0gcmVxdWlyZW1lbnRzXG4gICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAuZmluZCgobGluZSkgPT4gbGluZS5pbmNsdWRlcyhwYWNrYWdlTmFtZSkpO1xuXG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBSZWFkIHJlcXVpcmVtZW50cy50eHQgZmlsZSBhbmQgZm91bmQgbGluZSBpbmNsdWRpbmcgJHtwYWNrYWdlTmFtZX06ICR7cmVxdWlyZW1lbnRMaW5lfWAsXG4gICAgICApO1xuXG4gICAgICBpZiAocmVxdWlyZW1lbnRMaW5lKSB7XG4gICAgICAgIGlmIChwYWNrYWdlVmVyc2lvbiA/IHJlcXVpcmVtZW50TGluZS5pbmNsdWRlcyhwYWNrYWdlVmVyc2lvbikgOiB0cnVlKSB7XG4gICAgICAgICAgbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICBgUGFja2FnZSAke3BhY2thZ2VOYW1lfSBhbHJlYWR5IGluc3RhbGxlZC4gU2tpcHBpbmcgaW5zdGFsbGF0aW9uLmAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYEZvdW5kIHRoZSBwYWNrYWdlIGJ1dCB3aXRoIGEgZGlmZmVyZW50IHZlcnNpb24sIGNvbnRpbnVpbmdgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV3UmVxdWlyZW1lbnRzID1cbiAgICAgICAgcmVxdWlyZW1lbnRzXG4gICAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgICAgLmZpbHRlcigobGluZSkgPT4gIWxpbmUuc3RhcnRzV2l0aChwYWNrYWdlTmFtZSkpXG4gICAgICAgICAgLmpvaW4oXCJcXG5cIikgK1xuICAgICAgICBgXFxuJHtwYWNrYWdlTmFtZX0ke3BhY2thZ2VWZXJzaW9uID8gYH49JHtwYWNrYWdlVmVyc2lvbn1gIDogXCJcIn1gO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHJlcXVpcmVtZW50c0ZpbGVQYXRoLCBuZXdSZXF1aXJlbWVudHMsIFwidXRmOFwiKTtcblxuICAgICAgYXdhaXQgZXhlYyhcInBpcFwiLCBbXCJpbnN0YWxsXCIsIFwiLXJcIiwgXCJyZXF1aXJlbWVudHMudHh0XCJdLCB7XG4gICAgICAgIGN3ZDogdGhpcy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgICBzdGRpbzogW1wiaW5oZXJpdFwiLCAxLCAxXSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zb2xlLmxvZyhcIlBhY2thZ2UgaW5zdGFsbGVkLlwiKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgaXNOcG1WZXJzaW9uQXZhaWxhYmxlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb246IHN0cmluZyxcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYENoZWNraW5nIGlmICR7cGFja2FnZU5hbWV9QCR7cGFja2FnZVZlcnNpb259IGlzIGF2YWlsYWJsZSBmb3IgUHl0aG9uYCxcbiAgICApO1xuICAgIGNvbnN0IHVybCA9IGBodHRwczovL3B5cGkub3JnL3B5cGkvJHtwYWNrYWdlTmFtZX0vJHtwYWNrYWdlVmVyc2lvbn0vanNvbmA7XG4gICAgbG9nZ2VyLmRlYnVnKGBGZXRjaGluZyBwYWNrYWdlIGluZm9ybWF0aW9uIGZvciAke3BhY2thZ2VOYW1lfSBmcm9tICR7dXJsfWApO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgIGNvbnN0IGpzb24gPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyBhbnk7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYEdvdCByZXNwb25zZSBmcm9tIFB5UEkgZm9yICR7cGFja2FnZU5hbWV9QCR7cGFja2FnZVZlcnNpb259OiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBqc29uLFxuICAgICAgKX1gLFxuICAgICk7XG5cbiAgICBpZiAoanNvbi5pbmZvKSB7XG4gICAgICAvLyBXZSBmb3VuZCB0aGUgdmVyc2lvbiwgc28gaXQgZXhpc3RzXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgQ291bGQgbm90IGdldCBQeVBJIHBhY2thZ2UgaW5mbywgZ290OiAke0pTT04uc3RyaW5naWZ5KGpzb24pfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsaXN0UGlwZW52UGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgZXhlYyhcbiAgICAgICAgXCJwaXBlbnZcIixcbiAgICAgICAgW1wicnVuXCIsIFwicGlwXCIsIFwibGlzdFwiLCBcIi0tZm9ybWF0PWpzb25cIl0sXG4gICAgICAgIHtcbiAgICAgICAgICBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICBsb2dnZXIuZGVidWcoXG4gICAgICAgIGBMaXN0aW5nIHBpcGVudiBwYWNrYWdlcyB1c2luZyBcInBpcGVudiBydW4gcGlwIGxpc3QgLS1mb3JtYXQ9anNvblwiOiAke3N0ZG91dH1gLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgbGlzdCA9IHBpcFBhY2thZ2VTY2hlbWEucGFyc2UoSlNPTi5wYXJzZShzdGRvdXQpKTtcbiAgICAgIHJldHVybiBsaXN0LmZpbHRlcihcbiAgICAgICAgKGl0ZW0pID0+XG4gICAgICAgICAgaXRlbS5uYW1lLnN0YXJ0c1dpdGgoXCJjZGt0Zi1jZGt0Zi1wcm92aWRlclwiKSB8fFxuICAgICAgICAgIGl0ZW0ubmFtZS5zdGFydHNXaXRoKFwiY2RrdG4tcHJvdmlkZXJcIiksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBpbnN0YWxsZWQgcGFja2FnZXMgdXNpbmcgJ3BpcGVudiBydW4gcGlwIGxpc3QgLS1mb3JtYXQ9anNvbic6ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbGlzdFBpcFBhY2thZ2VzKCk6IFByb21pc2U8eyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W10+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3Rkb3V0ID0gYXdhaXQgZXhlYyhcInBpcFwiLCBbXCJsaXN0XCIsIFwiLS1mb3JtYXQ9anNvblwiXSwge1xuICAgICAgICBjd2Q6IHRoaXMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgICBgTGlzdGluZyBwaXAgcGFja2FnZXMgdXNpbmcgXCJwaXAgbGlzdCAtLWZvcm1hdD1qc29uXCI6ICR7c3Rkb3V0fWAsXG4gICAgICApO1xuXG4gICAgICBjb25zdCBsaXN0ID0gcGlwUGFja2FnZVNjaGVtYS5wYXJzZShKU09OLnBhcnNlKHN0ZG91dCkpO1xuICAgICAgcmV0dXJuIGxpc3QuZmlsdGVyKFxuICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICBpdGVtLm5hbWUuc3RhcnRzV2l0aChcImNka3RmLWNka3RmLXByb3ZpZGVyXCIpIHx8XG4gICAgICAgICAgaXRlbS5uYW1lLnN0YXJ0c1dpdGgoXCJjZGt0bi1wcm92aWRlclwiKSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIGluc3RhbGxlZCBwYWNrYWdlcyB1c2luZyAncGlwIGxpc3QgLS1mb3JtYXQ9anNvbic6ICR7ZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbGlzdFByb3ZpZGVyUGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+IHtcbiAgICByZXR1cm4gdGhpcy5hcHBDb21tYW5kLmluY2x1ZGVzKFwicGlwZW52XCIpXG4gICAgICA/IHRoaXMubGlzdFBpcGVudlBhY2thZ2VzKClcbiAgICAgIDogdGhpcy5saXN0UGlwUGFja2FnZXMoKTtcbiAgfVxufVxuXG5jbGFzcyBOdWdldFBhY2thZ2VNYW5hZ2VyIGV4dGVuZHMgUGFja2FnZU1hbmFnZXIge1xuICBwdWJsaWMgYXN5bmMgYWRkUGFja2FnZShcbiAgICBwYWNrYWdlTmFtZTogc3RyaW5nLFxuICAgIHBhY2thZ2VWZXJzaW9uPzogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb21tYW5kID0gXCJkb3RuZXRcIjtcbiAgICBjb25zdCBhcmdzID0gW1wiYWRkXCIsIFwicGFja2FnZVwiLCBwYWNrYWdlTmFtZV07XG4gICAgaWYgKHBhY2thZ2VWZXJzaW9uKSB7XG4gICAgICBhcmdzLnB1c2goXCItLXZlcnNpb25cIiwgcGFja2FnZVZlcnNpb24pO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZyhcbiAgICAgIGBJbnN0YWxsaW5nIHBhY2thZ2UgJHtwYWNrYWdlTmFtZX0gQCAke3BhY2thZ2VWZXJzaW9ufSB1c2luZyBcIiR7Y29tbWFuZH0gJHthcmdzLmpvaW4oXG4gICAgICAgIFwiIFwiLFxuICAgICAgKX1cIi5gLFxuICAgICk7XG5cbiAgICBhd2FpdCBleGVjKGNvbW1hbmQsIGFyZ3MsIHsgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnkgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlBhY2thZ2UgaW5zdGFsbGVkLlwiKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpc05wbVZlcnNpb25BdmFpbGFibGUoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbjogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsb2dnZXIuZGVidWcoYENoZWNraW5nIGlmICR7cGFja2FnZU5hbWV9QCR7cGFja2FnZVZlcnNpb259IGlzIGF2YWlsYWJsZWApO1xuXG4gICAgY29uc3QgW293bmVyLCAuLi5yZXN0XSA9IHBhY2thZ2VOYW1lLnNwbGl0KFwiLlwiKTtcbiAgICBjb25zdCBpZCA9IHJlc3RbcmVzdC5sZW5ndGggLSAxXTtcbiAgICBjb25zdCB1cmwgPSBgaHR0cHM6Ly9henVyZXNlYXJjaC11c25jLm51Z2V0Lm9yZy9xdWVyeT9xPW93bmVyOiR7b3duZXJ9JTIwaWQ6JHtpZH0mcHJlcmVsZWFzZT1mYWxzZSZzZW1WZXJMZXZlbD0yLjAuMGA7XG4gICAgbG9nZ2VyLmRlYnVnKGBGZXRjaGluZyBwYWNrYWdlIG1ldGFkYXRhIGZyb20gTnVnZXQ6ICcke3VybH0nYCk7XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7XG4gICAgY29uc3QganNvbiA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHtcbiAgICAgIGRhdGE6IHsgaWQ6IHN0cmluZzsgdmVyc2lvbnM6IHsgdmVyc2lvbjogc3RyaW5nIH1bXSB9W107XG4gICAgfTtcbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgR290IHJlc3BvbnNlIGZyb20gTnVHZXQgZm9yICR7cGFja2FnZU5hbWV9IDogJHtKU09OLnN0cmluZ2lmeShqc29uKX1gLFxuICAgICk7XG5cbiAgICBpZiAoIWpzb24/LmRhdGE/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlOyAvLyBObyBwYWNrYWdlIGZvdW5kXG4gICAgfVxuXG4gICAgY29uc3QgcGFja2FnZVZlcnNpb25zID1cbiAgICAgIGpzb24uZGF0YS5maW5kKChwKSA9PiBwLmlkID09PSBwYWNrYWdlTmFtZSk/LnZlcnNpb25zID8/IFtdO1xuXG4gICAgaWYgKCFwYWNrYWdlVmVyc2lvbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7IC8vIE5vIHBhY2thZ2UgcmVsZWFzZSBtYXRjaGluZyB0aGUgaWQgZm91bmRcbiAgICB9XG5cbiAgICByZXR1cm4gcGFja2FnZVZlcnNpb25zLnNvbWUoKHYpID0+IHYudmVyc2lvbiA9PT0gcGFja2FnZVZlcnNpb24pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RQcm92aWRlclBhY2thZ2VzKCk6IFByb21pc2U8XG4gICAgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W11cbiAgPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHN0ZG91dCA9IGF3YWl0IGV4ZWMoXCJkb3RuZXRcIiwgW1wibGlzdFwiLCBcInBhY2thZ2VcIl0sIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICB9KTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgYExpc3RpbmcgbnVnZXQgcGFja2FnZXMgdXNpbmcgXCJkb3RuZXQgbGlzdCBwYWNrYWdlXCI6ICR7c3Rkb3V0fWAsXG4gICAgICApO1xuXG4gICAgICBjb25zdCByZWdleCA9XG4gICAgICAgIC9eXFxzKj5cXHMoKD86SGFzaGlDb3JwXFwuQ2RrdGZ8SW9cXC5DZGt0bilcXC5Qcm92aWRlcnNcXC5bXFx3Ll0rKVxccysoKD86XFxkK1xcLil7Mn1cXGQrKD86LVxcUyspPylcXHMrKCg/OlxcZCtcXC4pezJ9XFxkKyg/Oi1cXFMrKT8pXFxzKiQvO1xuXG4gICAgICByZXR1cm4gc3Rkb3V0XG4gICAgICAgIC5zcGxpdChcIlxcblwiKVxuICAgICAgICAubWFwKChsaW5lOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAvLyBFeGFtcGxlIG91dHB1dDpcbiAgICAgICAgICAvLyBQcm9qZWN0ICdNeVRlcnJhZm9ybVN0YWNrJyBoYXMgdGhlIGZvbGxvd2luZyBwYWNrYWdlIHJlZmVyZW5jZXNcbiAgICAgICAgICAvLyAgW25ldDYuMF06XG4gICAgICAgICAgLy8gIFRvcC1sZXZlbCBQYWNrYWdlICAgICAgUmVxdWVzdGVkICAgUmVzb2x2ZWRcbiAgICAgICAgICAvLyAgPiBIYXNoaUNvcnAuQ2RrdGYgICAgICAwLjAuMCAgICAgICAwLjAuMFxuICAgICAgICAgIC8vIG1hdGNoWzBdID0gZnVsbCBtYXRjaFxuICAgICAgICAgIC8vIG1hdGNoWzFdID0gcGFja2FnZSBuYW1lXG4gICAgICAgICAgLy8gbWF0Y2hbMl0gPSByZXF1ZXN0ZWQgdmVyc2lvblxuICAgICAgICAgIC8vIG1hdGNoWzNdID0gcmVzb2x2ZWQgdmVyc2lvblxuICAgICAgICAgIHJldHVybiByZWdleC5leGVjKGxpbmUpO1xuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKChtYXRjaCkgPT4gISFtYXRjaClcbiAgICAgICAgLm1hcCgobWF0Y2gpID0+ICh7IG5hbWU6IG1hdGNoIVsxXSwgdmVyc2lvbjogbWF0Y2ghWzNdIH0pKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENvdWxkIG5vdCBkZXRlcm1pbmUgaW5zdGFsbGVkIHBhY2thZ2VzIHVzaW5nICdkb3RuZXQgbGlzdCBwYWNrYWdlJzogJHtlfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNoYXJlZCBiYXNlIGZvciB0aGUgSmF2YSBwYWNrYWdlIG1hbmFnZXJzIChNYXZlbiBhbmQgR3JhZGxlKS4gQm90aCBpbnN0YWxsIGZyb20gTWF2ZW4gQ2VudHJhbCwgc28gdGhlIGNoZWNrIGZvclxuICogd2hldGhlciBhIGdpdmVuIHByb3ZpZGVyIHZlcnNpb24gZXhpc3RzIGlzIGNvbW1vbiB0byBib3RoIGFuZCBsaXZlcyBoZXJlOyB0aGUgY29uY3JldGUgc3ViY2xhc3NlcyBkaWZmZXIgb25seSBpbiBob3dcbiAqIHRoZXkgZGVjbGFyZSBhbmQgbGlzdCBkZXBlbmRlbmNpZXMgKHBvbS54bWwgdnMgYnVpbGQuZ3JhZGxlKS5cbiAqL1xuYWJzdHJhY3QgY2xhc3MgSmF2YVBhY2thZ2VNYW5hZ2VyIGV4dGVuZHMgUGFja2FnZU1hbmFnZXIge1xuICAvKipcbiAgICogUmVwb3J0cyB3aGV0aGVyIGBwYWNrYWdlTmFtZUBwYWNrYWdlVmVyc2lvbmAgaXMgcHVibGlzaGVkIG9uIE1hdmVuIENlbnRyYWwgYnkgcHJvYmluZyB0aGUgYXJ0aWZhY3QgcmVwb3NpdG9yeSBmb3JcbiAgICogdGhlIHZlcnNpb24ncyBgLnBvbWAgZGlyZWN0bHk6IEhUVFAgMjAwIG1lYW5zIHByZXNlbnQsIGFueXRoaW5nIGVsc2UgbWVhbnMgbm90IGF2YWlsYWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHBhY2thZ2VOYW1lIC0gVGhlIEphdmEgY29vcmRpbmF0ZXMgaW4gXCJncm91cC5hcnRpZmFjdFwiIGZvcm0sIGUuZy4gXCJjb20uaGFzaGljb3JwLmNka3RmLXByb3ZpZGVyLXJhbmRvbVwiLlxuICAgKiBAcGFyYW0gcGFja2FnZVZlcnNpb24gLSBUaGUgZXhhY3QgdmVyc2lvbiB0byBjaGVjayBmb3IuXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgYC5wb21gIGV4aXN0cyBvbiBNYXZlbiBDZW50cmFsLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICogQHRocm93cyBJZiBgcGFja2FnZU5hbWVgIGlzIG5vdCBpbiB0aGUgZXhwZWN0ZWQgXCJncm91cC5hcnRpZmFjdFwiIGZvcm1hdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpc05wbVZlcnNpb25BdmFpbGFibGUoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbjogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsb2dnZXIuZGVidWcoYENoZWNraW5nIGlmICR7cGFja2FnZU5hbWV9QCR7cGFja2FnZVZlcnNpb259IGlzIGF2YWlsYWJsZWApO1xuXG4gICAgY29uc3QgcGFydHMgPSBwYWNrYWdlTmFtZS5zcGxpdChcIi5cIik7XG4gICAgaWYgKHBhcnRzLmxlbmd0aCAhPT0gMykge1xuICAgICAgdGhyb3cgRXJyb3JzLkludGVybmFsKFxuICAgICAgICBgRXhwZWN0ZWQgcGFja2FnZSBuYW1lIHRvIGJlIGluIGZvcm1hdCBcImdyb3VwLmFydGlmYWN0XCIsIGUuZy4gXCJjb20uaGFzaGljb3JwLmNka3RmLXByb3ZpZGVyLWdvb2dsZVwiLCBnb3Q6ICR7cGFja2FnZU5hbWV9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYXJ0aWZhY3RJZCA9IHBhcnRzLnBvcCgpO1xuICAgIGNvbnN0IGdyb3VwSWQgPSBwYXJ0cy5qb2luKFwiLlwiKTtcblxuICAgIC8vIFByb2JlIHRoZSBhcnRpZmFjdCBDRE4gZGlyZWN0bHkgZm9yIHRoZSAucG9tOiAyMDAgPSBwcmVzZW50LCBhbnl0aGluZyBlbHNlID0gbm90IGF2YWlsYWJsZS5cbiAgICBjb25zdCBncm91cFBhdGggPSBncm91cElkLnJlcGxhY2UoL1xcLi9nLCBcIi9cIik7XG4gICAgY29uc3QgdXJsID0gYGh0dHBzOi8vcmVwbzEubWF2ZW4ub3JnL21hdmVuMi8ke2dyb3VwUGF0aH0vJHthcnRpZmFjdElkfS8ke3BhY2thZ2VWZXJzaW9ufS8ke2FydGlmYWN0SWR9LSR7cGFja2FnZVZlcnNpb259LnBvbWA7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYENoZWNraW5nIHdoZXRoZXIgJHtwYWNrYWdlTmFtZX1AJHtwYWNrYWdlVmVyc2lvbn0gZXhpc3RzIG9uIE1hdmVuIENlbnRyYWwgdW5kZXIgJyR7dXJsfSdgLFxuICAgICk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgIGxvZ2dlci5kZWJ1ZyhcbiAgICAgIGBNYXZlbiBDZW50cmFsIHJlc3BvbmRlZCBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfSBmb3IgJHtwYWNrYWdlTmFtZX1AJHtwYWNrYWdlVmVyc2lvbn1gLFxuICAgICk7XG5cbiAgICByZXR1cm4gcmVzcG9uc2Uub2s7XG4gIH1cbn1cblxuY2xhc3MgTWF2ZW5QYWNrYWdlTWFuYWdlciBleHRlbmRzIEphdmFQYWNrYWdlTWFuYWdlciB7XG4gIHB1YmxpYyBhc3luYyBhZGRQYWNrYWdlKFxuICAgIHBhY2thZ2VOYW1lOiBzdHJpbmcsXG4gICAgcGFja2FnZVZlcnNpb24gPSBcIkxBVEVTVFwiLCAvLyB0aGUgbGF0ZXN0IG9wdGlvbiBpcyBkZXByZWNhdGVkIGluIG1hdmVuIDMuNVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgQWRkaW5nICR7cGFja2FnZU5hbWV9IEAgJHtwYWNrYWdlVmVyc2lvbn0gdG8gcG9tLnhtbGApO1xuICAgIC8vIEFzc2VydCBwb20ueG1sIGV4aXN0c1xuICAgIGNvbnN0IHBvbVBhdGggPSBwYXRoLmpvaW4odGhpcy53b3JraW5nRGlyZWN0b3J5LCBcInBvbS54bWxcIik7XG4gICAgaWYgKCFleGlzdHNTeW5jKHBvbVBhdGgpKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoXG4gICAgICAgIFwiTm8gcG9tLnhtbCBmb3VuZCBpbiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBQbGVhc2UgcnVuIHRoZSBjb21tYW5kIGZyb20gdGhlIHJvb3Qgb2YgeW91ciBwcm9qZWN0LlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwb20gPSBhd2FpdCBmcy5yZWFkRmlsZShwb21QYXRoLCBcInV0ZjhcIik7XG4gICAgY29uc3QgcG9tWG1sID0gKGF3YWl0IHhtbDJqcyhwb20sIHt9KSkgYXMgRWxlbWVudDtcblxuICAgIC8vIE11dGF0ZSBkZXBlbmRlbmNpZXNcbiAgICBjb25zdCBuYW1lUGFydHMgPSBwYWNrYWdlTmFtZS5zcGxpdChcIi5cIik7XG4gICAgY29uc3QgZ3JvdXBJZCA9IG5hbWVQYXJ0cy5zbGljZSgwLCBuYW1lUGFydHMubGVuZ3RoIC0gMSkuam9pbihcIi5cIik7XG4gICAgY29uc3QgYXJ0aWZhY3RJZCA9IG5hbWVQYXJ0c1tuYW1lUGFydHMubGVuZ3RoIC0gMV07XG5cbiAgICBjb25zdCBuZXdEZXBlbmRlbmN5ID0gKGF3YWl0IHhtbDJqcyhcbiAgICAgIGA8ZGVwZW5kZW5jeT5cbiAgICA8Z3JvdXBJZD4ke2dyb3VwSWR9PC9ncm91cElkPlxuICAgIDxhcnRpZmFjdElkPiR7YXJ0aWZhY3RJZH08L2FydGlmYWN0SWQ+XG4gICAgPHZlcnNpb24+JHtwYWNrYWdlVmVyc2lvbn08L3ZlcnNpb24+XG48L2RlcGVuZGVuY3k+YCxcbiAgICApKSBhcyBFbGVtZW50O1xuXG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gcG9tWG1sLmVsZW1lbnRzXG4gICAgICA/LmZpbmQoKGVsKSA9PiBlbC5uYW1lID09PSBcInByb2plY3RcIilcbiAgICAgID8uZWxlbWVudHM/LmZpbmQoKGVsKSA9PiBlbC5uYW1lID09PSBcImRlcGVuZGVuY2llc1wiKTtcblxuICAgIGlmICghZGVwZW5kZW5jaWVzKSB7XG4gICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoYENvdWxkIG5vdCBmaW5kIGRlcGVuZGVuY2llcyBzZWN0aW9uIGluIHRoZSBwb20ueG1sYCk7XG4gICAgfVxuICAgIGRlcGVuZGVuY2llcy5lbGVtZW50cyA9IChkZXBlbmRlbmNpZXM/LmVsZW1lbnRzIHx8IFtdKS5maWx0ZXIoXG4gICAgICAoZWwpID0+XG4gICAgICAgIGVsLmVsZW1lbnRzPy5zb21lKFxuICAgICAgICAgIChncm91cCkgPT5cbiAgICAgICAgICAgIGdyb3VwLm5hbWUgPT09IFwiZ3JvdXBJZFwiICYmIGdyb3VwLmVsZW1lbnRzPy5bMF0udGV4dCAhPT0gZ3JvdXBJZCxcbiAgICAgICAgKSB8fFxuICAgICAgICBlbC5lbGVtZW50cz8uc29tZShcbiAgICAgICAgICAoYXJ0aWZhY3QpID0+XG4gICAgICAgICAgICBhcnRpZmFjdC5uYW1lID09PSBcImFydGlmYWN0SWRcIiAmJlxuICAgICAgICAgICAgYXJ0aWZhY3QuZWxlbWVudHM/LlswXS50ZXh0ICE9PSBhcnRpZmFjdElkLFxuICAgICAgICApLFxuICAgICk7XG4gICAgZGVwZW5kZW5jaWVzPy5lbGVtZW50cz8ucHVzaChuZXdEZXBlbmRlbmN5LmVsZW1lbnRzIVswXSk7XG5cbiAgICAvLyBXcml0ZSBuZXcgcG9tLnhtbFxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShwb21QYXRoLCBqczJ4bWwocG9tWG1sLCB7IHNwYWNlczogMiB9KSk7XG5cbiAgICAvLyBJbnN0YWxsXG4gICAgYXdhaXQgZXhlYyhcIm12blwiLCBbXCJpbnN0YWxsXCJdLCB7IGN3ZDogdGhpcy53b3JraW5nRGlyZWN0b3J5IH0pO1xuICAgIGNvbnNvbGUubG9nKFwiUGFja2FnZSBpbnN0YWxsZWQuXCIpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxpc3RQcm92aWRlclBhY2thZ2VzKCk6IFByb21pc2U8XG4gICAgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9W11cbiAgPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBvbVBhdGggPSBwYXRoLmpvaW4odGhpcy53b3JraW5nRGlyZWN0b3J5LCBcInBvbS54bWxcIik7XG4gICAgICBpZiAoIWV4aXN0c1N5bmMocG9tUGF0aCkpIHtcbiAgICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFxuICAgICAgICAgIFwiTm8gcG9tLnhtbCBmb3VuZCBpbiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LiBQbGVhc2UgcnVuIHRoZSBjb21tYW5kIGZyb20gdGhlIHJvb3Qgb2YgeW91ciBwcm9qZWN0LlwiLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwb20gPSBhd2FpdCBmcy5yZWFkRmlsZShwb21QYXRoLCBcInV0ZjhcIik7XG4gICAgICBjb25zdCBwb21YbWwgPSAoYXdhaXQgeG1sMmpzKHBvbSwge30pKSBhcyBFbGVtZW50O1xuXG4gICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPVxuICAgICAgICBwb21YbWwuZWxlbWVudHNcbiAgICAgICAgICA/LmZpbmQoKGVsKSA9PiBlbC5uYW1lID09PSBcInByb2plY3RcIilcbiAgICAgICAgICA/LmVsZW1lbnRzPy5maW5kKChlbCkgPT4gZWwubmFtZSA9PT0gXCJkZXBlbmRlbmNpZXNcIik/LmVsZW1lbnRzID8/IFtdO1xuXG4gICAgICByZXR1cm4gZGVwZW5kZW5jaWVzXG4gICAgICAgIC5tYXAoKGRlcCkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBgJHtcbiAgICAgICAgICAgIGRlcC5lbGVtZW50cz8uZmluZCgoZWwpID0+IGVsLm5hbWUgPT09IFwiZ3JvdXBJZFwiKT8uZWxlbWVudHM/LlswXVxuICAgICAgICAgICAgICAudGV4dFxuICAgICAgICAgIH0uJHtcbiAgICAgICAgICAgIGRlcC5lbGVtZW50cz8uZmluZCgoZWwpID0+IGVsLm5hbWUgPT09IFwiYXJ0aWZhY3RJZFwiKT8uZWxlbWVudHM/LlswXVxuICAgICAgICAgICAgICAudGV4dFxuICAgICAgICAgIH1gLFxuICAgICAgICAgIHZlcnNpb246IGRlcC5lbGVtZW50cz8uZmluZCgoZWwpID0+IGVsLm5hbWUgPT09IFwidmVyc2lvblwiKVxuICAgICAgICAgICAgPy5lbGVtZW50cz8uWzBdLnRleHQgYXMgc3RyaW5nLFxuICAgICAgICB9KSlcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAoZGVwKSA9PlxuICAgICAgICAgICAgZGVwLm5hbWUuc3RhcnRzV2l0aChcImNvbS5oYXNoaWNvcnAuY2RrdGYtcHJvdmlkZXItXCIpIHx8XG4gICAgICAgICAgICBkZXAubmFtZS5zdGFydHNXaXRoKFwiaW8uY2RrdG4uY2RrdG4tcHJvdmlkZXItXCIpLFxuICAgICAgICApO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ291bGQgbm90IGRldGVybWluZSBpbnN0YWxsZWQgcGFja2FnZXMgcmVhZGluZyB0aGUgcG9tLnhtbDogJHtlLm1lc3NhZ2V9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIEdyYWRsZVBhY2thZ2VNYW5hZ2VyIGV4dGVuZHMgSmF2YVBhY2thZ2VNYW5hZ2VyIHtcbiAgcHVibGljIHN0YXRpYyBpc0dyYWRsZVByb2plY3Qod29ya2luZ0RpcmVjdG9yeTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzR3JhZGxlUHJvamVjdCh3b3JraW5nRGlyZWN0b3J5KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRQYWNrYWdlKFxuICAgIHBhY2thZ2VGUU46IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbiA9IFwibGF0ZXN0LnJlbGVhc2VcIixcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYnVpbGRHcmFkbGVQYXRoID0gcGF0aC5qb2luKHRoaXMud29ya2luZ0RpcmVjdG9yeSwgXCJidWlsZC5ncmFkbGVcIik7XG4gICAgY29uc3QgYnVpbGRHcmFkbGUgPSBhd2FpdCBmcy5yZWFkRmlsZShidWlsZEdyYWRsZVBhdGgsIFwidXRmOFwiKTtcbiAgICBjb25zdCBidWlsZEdyYWRsZUxpbmVzID0gYnVpbGRHcmFkbGUuc3BsaXQoL1xccj9cXG4vKTtcblxuICAgIGNvbnN0IGRlcGVuZGVuY2llc1JlZ2V4ID0gL2RlcGVuZGVuY2llc1xccytcXHsvaTtcbiAgICBjb25zdCBkZXBlbmRlbmN5QmxvY2tTdGFydCA9IGJ1aWxkR3JhZGxlTGluZXMuZmluZEluZGV4KChsaW5lKSA9PlxuICAgICAgZGVwZW5kZW5jaWVzUmVnZXgudGVzdChsaW5lKSxcbiAgICApO1xuICAgIGlmIChkZXBlbmRlbmN5QmxvY2tTdGFydCA9PT0gLTEpIHtcbiAgICAgIHRocm93IEVycm9ycy5Vc2FnZShcbiAgICAgICAgXCJDb3VsZCBub3QgZmluZCBkZXBlbmRlbmNpZXMgc2VjdGlvbiBpbiB0aGUgYnVpbGQuZ3JhZGxlXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhY2thZ2VTZWdtZW50cyA9IHBhY2thZ2VGUU4uc3BsaXQoXCIuXCIpO1xuICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gcGFja2FnZVNlZ21lbnRzLnBvcCgpO1xuICAgIGNvbnN0IGdyb3VwTmFtZSA9IHBhY2thZ2VTZWdtZW50cy5qb2luKFwiLlwiKTtcbiAgICBjb25zdCBkZXBlbmRlbmN5U3BlY2lmaWVyID0gYCR7Z3JvdXBOYW1lfToke3BhY2thZ2VOYW1lfWA7XG4gICAgY29uc3QgZGVwZW5kZW5jeUFuZFZlcnNpb25TcGVjaWZpZXIgPSBgJHtkZXBlbmRlbmN5U3BlY2lmaWVyfToke3BhY2thZ2VWZXJzaW9ufWA7XG5cbiAgICBjb25zdCBleGlzdGluZ0RlcGVuZGVuY3kgPSBidWlsZEdyYWRsZUxpbmVzLmZpbmRJbmRleCgobGluZSkgPT5cbiAgICAgIGxpbmUuaW5jbHVkZXMoZGVwZW5kZW5jeVNwZWNpZmllciksXG4gICAgKTtcbiAgICBpZiAoZXhpc3RpbmdEZXBlbmRlbmN5ICE9PSAtMSkge1xuICAgICAgYnVpbGRHcmFkbGVMaW5lcy5zcGxpY2UoZXhpc3RpbmdEZXBlbmRlbmN5LCAxKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdQYWNrYWdlRGVwZW5kZW5jeSA9IGBcXHRpbXBsZW1lbnRhdGlvbiAnJHtkZXBlbmRlbmN5QW5kVmVyc2lvblNwZWNpZmllcn0nYDtcbiAgICBidWlsZEdyYWRsZUxpbmVzLnNwbGljZShkZXBlbmRlbmN5QmxvY2tTdGFydCArIDEsIDAsIG5ld1BhY2thZ2VEZXBlbmRlbmN5KTtcblxuICAgIGF3YWl0IGZzLndyaXRlRmlsZShidWlsZEdyYWRsZVBhdGgsIGJ1aWxkR3JhZGxlTGluZXMuam9pbihcIlxcblwiKSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbGlzdFByb3ZpZGVyUGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+IHtcbiAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBhd2FpdCBnZXRHcmFkbGVEZXBlbmRlbmNpZXMoKTtcbiAgICBpZiAoIWRlcGVuZGVuY2llcykge1xuICAgICAgdGhyb3cgRXJyb3JzLlVzYWdlKFwiQ291bGQgbm90IGZpbmQgYW55IGRlcGVuZGVuY2llc1wiKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXBlbmRlbmN5TGlzdCA9IGRlcGVuZGVuY2llc1xuICAgICAgLm1hcCgobGluZSkgPT4gZ2V0RGVwZW5kZW5jeUluZm9ybWF0aW9uRnJvbUxpbmUobGluZSkpXG4gICAgICAuZmlsdGVyKChkZXApID0+IHtcbiAgICAgICAgaWYgKCFkZXApIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBkZXAubmFtZS5pbmNsdWRlcyhcImNka3RmLXByb3ZpZGVyLVwiKSB8fFxuICAgICAgICAgIGRlcC5uYW1lLmluY2x1ZGVzKFwiY2RrdG4tcHJvdmlkZXItXCIpXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICAgLm1hcCgoZGVwKSA9PiAoe1xuICAgICAgICBuYW1lOiBgY29tLmhhc2hpY29ycC4ke2RlcCEubmFtZX1gLFxuICAgICAgICB2ZXJzaW9uOiBkZXAhLnZlcnNpb24sXG4gICAgICB9KSk7XG5cbiAgICByZXR1cm4gZGVwZW5kZW5jeUxpc3Q7XG4gIH1cbn1cblxuY2xhc3MgR29QYWNrYWdlTWFuYWdlciBleHRlbmRzIFBhY2thZ2VNYW5hZ2VyIHtcbiAgcHVibGljIGFzeW5jIGFkZFBhY2thZ2UoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbj86IHN0cmluZyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coYEFkZGluZyBwYWNrYWdlICR7cGFja2FnZU5hbWV9IEAgJHtwYWNrYWdlVmVyc2lvbn1gKTtcblxuICAgIGNvbnN0IG1ham9yVmVyc2lvbjogbnVtYmVyIHwgdW5kZWZpbmVkID0gcGFja2FnZVZlcnNpb25cbiAgICAgID8gc2VtdmVyLm1ham9yKHBhY2thZ2VWZXJzaW9uKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBsZXQgdmVyc2lvblBhY2thZ2VTdWZmaXggPSBcIlwiO1xuICAgIGlmICh0eXBlb2YgbWFqb3JWZXJzaW9uID09PSBcIm51bWJlclwiICYmIG1ham9yVmVyc2lvbiA+IDEpIHtcbiAgICAgIHZlcnNpb25QYWNrYWdlU3VmZml4ID0gYC92JHttYWpvclZlcnNpb259YDtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoXG4gICAgICBgUnVubmluZyAnZ28gZ2V0ICR7cGFja2FnZU5hbWV9JHt2ZXJzaW9uUGFja2FnZVN1ZmZpeH1AdiR7cGFja2FnZVZlcnNpb259J2AsXG4gICAgKTtcbiAgICAvLyBJbnN0YWxsXG4gICAgYXdhaXQgZXhlYyhcbiAgICAgIFwiZ29cIixcbiAgICAgIFtcImdldFwiLCBgJHtwYWNrYWdlTmFtZX0ke3ZlcnNpb25QYWNrYWdlU3VmZml4fUB2JHtwYWNrYWdlVmVyc2lvbn1gXSxcbiAgICAgIHtcbiAgICAgICAgY3dkOiB0aGlzLndvcmtpbmdEaXJlY3RvcnksXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjb25zb2xlLmxvZyhcIlBhY2thZ2UgaW5zdGFsbGVkLlwiKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpc05wbVZlcnNpb25BdmFpbGFibGUoXG4gICAgcGFja2FnZU5hbWU6IHN0cmluZyxcbiAgICBwYWNrYWdlVmVyc2lvbjogc3RyaW5nLFxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBsb2dnZXIuZGVidWcoYENoZWNraW5nIGlmICR7cGFja2FnZU5hbWV9QCR7cGFja2FnZVZlcnNpb259IGlzIGF2YWlsYWJsZWApO1xuXG4gICAgLy8gZS5nLiBnaXRodWIuY29tL2Nka3RmL2Nka3RmLXByb3ZpZGVyLWdvb2dsZS1nby9nb29nbGVcbiAgICBjb25zdCBwYXJ0cyA9IHBhY2thZ2VOYW1lLnNwbGl0KFwiL1wiKTtcbiAgICBpZiAocGFydHMubGVuZ3RoICE9PSA0KSB7XG4gICAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXG4gICAgICAgIGBFeHBlY3RpbmcgR28gcGFja2FnZSBuYW1lIHRvIGJlIGluIHRoZSBmb3JtYXQgb2YgZ2l0aHViLmNvbS88b3JnPi88cmVwbz4vPHBhY2thZ2U+LCBnb3QgJHtwYWNrYWdlTmFtZX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcmcgPSBwYXJ0c1sxXTtcbiAgICBjb25zdCByZXBvID0gcGFydHNbMl07XG4gICAgY29uc3QgcGFja2FnZVBhdGggPSBwYXJ0c1szXTtcblxuICAgIGNvbnN0IHVybCA9IGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7b3JnfS8ke3JlcG99L2dpdC9yZWYvdGFncy8ke3BhY2thZ2VQYXRofS92JHtwYWNrYWdlVmVyc2lvbn1gO1xuICAgIGxvZ2dlci5kZWJ1ZyhgRmV0Y2hpbmcgdGFncyBmb3IgJHtvcmd9LyR7cmVwb30gZnJvbSAnJHt1cmx9J2ApO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogXCJhcHBsaWNhdGlvbi92bmQuZ2l0aHViK2pzb25cIixcbiAgICAgICAgXCJVc2VyLUFnZW50XCI6IFwiT3BlbkNvbnN0cnVjdHMvY2RrdG4tY2xpXCIsXG4gICAgICAgIC4uLihHSVRIVUJfQVBJX1RPS0VOX0NES1RGXG4gICAgICAgICAgPyB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHtHSVRIVUJfQVBJX1RPS0VOX0NES1RGfWAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGpzb24gPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyBhbnk7XG4gICAgbG9nZ2VyLmRlYnVnKFxuICAgICAgYEdvdCByZXNwb25zZSBmcm9tIEdpdEh1YnMgcmVwb3NpdG9yeSB0YWcgZW5kcG9pbnQgZm9yICR7cGFja2FnZU5hbWV9OiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICBqc29uLFxuICAgICAgKX1gLFxuICAgICk7XG5cbiAgICBpZiAoanNvbiAmJiBqc29uLnJlZikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbG9nZ2VyLmluZm8oXG4gICAgICBgQ291bGQgbm90IGZpbmQgdGhlIHRhZyAke3BhY2thZ2VQYXRofS92JHtwYWNrYWdlVmVyc2lvbn0gaW4gdGhlIHJlcG9zaXRvcnkgJHtvcmd9LyR7cmVwb306ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGpzb24sXG4gICAgICApfX1gLFxuICAgICk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbGlzdFByb3ZpZGVyUGFja2FnZXMoKTogUHJvbWlzZTxcbiAgICB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH1bXVxuICA+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZ29TdW1QYXRoID0gcGF0aC5qb2luKHRoaXMud29ya2luZ0RpcmVjdG9yeSwgXCJnby5zdW1cIik7XG4gICAgICBpZiAoIWV4aXN0c1N5bmMoZ29TdW1QYXRoKSkge1xuICAgICAgICB0aHJvdyBFcnJvcnMuVXNhZ2UoXG4gICAgICAgICAgXCJObyBnby5zdW0gZm91bmQgaW4gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gUGxlYXNlIHJ1biB0aGUgY29tbWFuZCBmcm9tIHRoZSByb290IG9mIHlvdXIgcHJvamVjdC5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ29TdW0gPSBhd2FpdCBmcy5yZWFkRmlsZShnb1N1bVBhdGgsIFwidXRmOFwiKTtcbiAgICAgIGNvbnN0IGRlZHVwZWRQcm92aWRlck5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgICByZXR1cm4gZ29TdW1cbiAgICAgICAgLnNwbGl0KFwiXFxuXCIpXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKGxpbmUpID0+XG4gICAgICAgICAgICBsaW5lLnN0YXJ0c1dpdGgoXCJnaXRodWIuY29tL2hhc2hpY29ycC9jZGt0Zi1wcm92aWRlclwiKSB8fFxuICAgICAgICAgICAgbGluZS5zdGFydHNXaXRoKFwiZ2l0aHViLmNvbS9jZGt0Zi9jZGt0Zi1wcm92aWRlclwiKSB8fFxuICAgICAgICAgICAgbGluZS5zdGFydHNXaXRoKFwiZ2l0aHViLmNvbS9jZGt0bi1pby9jZGt0bi1wcm92aWRlclwiKSxcbiAgICAgICAgKVxuICAgICAgICAubWFwKChsaW5lKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGFydHMgPSBsaW5lLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvcnMuSW50ZXJuYWwoXG4gICAgICAgICAgICAgIGBFeHBlY3RlZCBsaW5lIGluIGdvLnN1bSB0byBiZSBpbiB0aGUgZm9ybWF0IG9mICc8cGFja2FnZT4gPHZlcnNpb24+IDxjaGVja3N1bT4nLCBnb3Q6ICR7bGluZX1gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBwYXJ0WzBdIGNvdWxkIGJlIGdpdGh1Yi5jb20vYXdzL2NvbnN0cnVjdHMtZ28vY29uc3RydWN0cy92MTBcbiAgICAgICAgICBjb25zdCBuYW1lID0gcGFydHNbMF0uc3BsaXQoXCIvXCIpLnNsaWNlKDAsIDQpLmpvaW4oXCIvXCIpO1xuXG4gICAgICAgICAgY29uc3QgdmVyc2lvbiA9IHBhcnRzWzFdLnNwbGl0KFwiL1wiKVswXTtcblxuICAgICAgICAgIGlmIChkZWR1cGVkUHJvdmlkZXJOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IG5hbWU6IFwiXCIsIHZlcnNpb246IFwiXCIgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWR1cGVkUHJvdmlkZXJOYW1lcy5hZGQobmFtZSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAocHJvdmlkZXJJbmZvKSA9PiAhIXByb3ZpZGVySW5mby5uYW1lICYmICEhcHJvdmlkZXJJbmZvLnZlcnNpb24sXG4gICAgICAgICk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDb3VsZCBub3QgZGV0ZXJtaW5lIGluc3RhbGxlZCBwYWNrYWdlcyByZWFkaW5nIHRoZSBnby5zdW06ICR7ZS5tZXNzYWdlfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19