@fjall/components-infrastructure 0.77.4 → 0.78.5

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 (64) hide show
  1. package/dist/lib/app.d.ts +8 -5
  2. package/dist/lib/app.js +19 -7
  3. package/dist/lib/patterns/aws/buildkite.js +4 -7
  4. package/dist/lib/patterns/aws/compute.d.ts +479 -48
  5. package/dist/lib/patterns/aws/compute.js +307 -94
  6. package/dist/lib/patterns/aws/database.d.ts +1 -0
  7. package/dist/lib/patterns/aws/database.js +4 -1
  8. package/dist/lib/patterns/aws/hostedZone.js +4 -7
  9. package/dist/lib/patterns/aws/loadBalancer.d.ts +163 -0
  10. package/dist/lib/patterns/aws/loadBalancer.js +278 -0
  11. package/dist/lib/patterns/aws/network.d.ts +1 -0
  12. package/dist/lib/patterns/aws/network.js +2 -1
  13. package/dist/lib/resources/aws/compute/capacityProviderDrainWaiter.d.ts +20 -0
  14. package/dist/lib/resources/aws/compute/capacityProviderDrainWaiter.js +180 -0
  15. package/dist/lib/resources/aws/compute/ecs.d.ts +294 -57
  16. package/dist/lib/resources/aws/compute/ecs.js +745 -261
  17. package/dist/lib/resources/aws/compute/ecsFreeTier.js +1 -1
  18. package/dist/lib/resources/aws/compute/ecsSpot.js +1 -1
  19. package/dist/lib/resources/aws/compute/utilities/capacityProviderDrainWaiter.d.ts +20 -0
  20. package/dist/lib/resources/aws/compute/utilities/capacityProviderDrainWaiter.js +180 -0
  21. package/dist/lib/resources/aws/database/rdsAurora.d.ts +1 -0
  22. package/dist/lib/resources/aws/database/rdsAurora.js +2 -2
  23. package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +1 -0
  24. package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +2 -1
  25. package/dist/lib/resources/aws/database/rdsDeletionWaiter.d.ts +33 -0
  26. package/dist/lib/resources/aws/database/rdsDeletionWaiter.js +74 -0
  27. package/dist/lib/resources/aws/database/rdsInstance.d.ts +1 -0
  28. package/dist/lib/resources/aws/database/rdsInstance.js +3 -3
  29. package/dist/lib/resources/aws/networking/vpc.d.ts +1 -0
  30. package/dist/lib/resources/aws/networking/vpc.js +4 -3
  31. package/dist/lib/resources/aws/networking/vpcEndpoint.d.ts +2 -2
  32. package/dist/lib/resources/aws/networking/vpcEndpoint.js +1 -1
  33. package/dist/lib/resources/aws/networking/vpcEndpoints.d.ts +71 -0
  34. package/dist/lib/resources/aws/networking/vpcEndpoints.js +125 -0
  35. package/dist/lib/resources/aws/secrets/kms.d.ts +14 -0
  36. package/dist/lib/resources/aws/secrets/kms.js +5 -2
  37. package/dist/lib/resources/aws/secrets/secret.js +1 -1
  38. package/dist/lib/utils/standardTagsAspect.d.ts +26 -12
  39. package/dist/lib/utils/standardTagsAspect.js +67 -477
  40. package/dist/lib/utils/tagResource.d.ts +18 -3
  41. package/dist/lib/utils/tagResource.js +23 -6
  42. package/package.json +3 -3
  43. package/dist/lib/aspects/resourceInventory.d.ts +0 -41
  44. package/dist/lib/aspects/resourceInventory.js +0 -56
  45. package/dist/lib/config/audit.d.ts +0 -18
  46. package/dist/lib/config/audit.js +0 -22
  47. package/dist/lib/patterns/aws/auditRole.d.ts +0 -44
  48. package/dist/lib/patterns/aws/auditRole.js +0 -58
  49. package/dist/lib/patterns/aws/basicApp.d.ts +0 -0
  50. package/dist/lib/patterns/aws/basicApp.js +0 -150
  51. package/dist/lib/patterns/aws/ec2.d.ts +0 -43
  52. package/dist/lib/patterns/aws/ec2.js +0 -123
  53. package/dist/lib/patterns/aws/freeTierApp.d.ts +0 -44
  54. package/dist/lib/patterns/aws/freeTierApp.js +0 -83
  55. package/dist/lib/patterns/aws/spotInstanceApp.d.ts +0 -45
  56. package/dist/lib/patterns/aws/spotInstanceApp.js +0 -85
  57. package/dist/lib/resources/aws/audit/auditRole.d.ts +0 -32
  58. package/dist/lib/resources/aws/audit/auditRole.js +0 -46
  59. package/dist/lib/resources/aws/database/databaseFreeTier.d.ts +0 -15
  60. package/dist/lib/resources/aws/database/databaseFreeTier.js +0 -29
  61. package/dist/lib/resources/aws/database/rdsFreeTier.d.ts +0 -37
  62. package/dist/lib/resources/aws/database/rdsFreeTier.js +0 -84
  63. package/dist/lib/utils/getCidr.d.ts +0 -8
  64. package/dist/lib/utils/getCidr.js +0 -40
package/dist/lib/app.d.ts CHANGED
@@ -5,7 +5,7 @@ import { type Role } from "aws-cdk-lib/aws-iam";
5
5
  import { AwsStack } from "./resources";
6
6
  import { type Ecr } from "./resources/aws/storage/ecr";
7
7
  import { type Database } from "./patterns/aws/database";
8
- import { type INetworkProps, Network } from "./patterns/aws/network";
8
+ import { type INetworkProps, type Network } from "./patterns/aws/network";
9
9
  /**
10
10
  * Configuration options for App.getApp().
11
11
  *
@@ -154,8 +154,10 @@ export declare class App extends CdkApp {
154
154
  /**
155
155
  * Add a compute resource to the default compute stack using the factory pattern.
156
156
  * Automatically creates monitoring role if not already created.
157
+ *
158
+ * Supports ComputeFactory (ECS, EC2, Lambda).
157
159
  */
158
- addCompute(fn: (app: App, scope: Construct) => Construct): void;
160
+ addCompute<T extends Construct>(fn: (app: App, scope: Construct) => T): T;
159
161
  /**
160
162
  * Manually add a resource to the default compute stack.
161
163
  */
@@ -167,7 +169,7 @@ export declare class App extends CdkApp {
167
169
  /**
168
170
  * Add a storage resource (S3) to the default storage stack using the factory pattern.
169
171
  */
170
- addStorage(fn: (app: App, scope: Construct) => Construct): any;
172
+ addStorage(fn: (app: App, scope: Construct) => Construct): Construct;
171
173
  /**
172
174
  * Add an additional network (VPC) to the application.
173
175
  *
@@ -196,11 +198,12 @@ export declare class App extends CdkApp {
196
198
  */
197
199
  private initializeStandardTags;
198
200
  /**
199
- * Apply all tags as a single aspect
201
+ * Apply all tags using CDK's native Tags.of().add() API
200
202
  */
201
203
  private applyTagsAspect;
202
204
  /**
203
- * Add custom tags to all resources in the app
205
+ * Add custom tags to all resources in the app.
206
+ *
204
207
  * @param tags Custom tags to apply to all resources
205
208
  * @example
206
209
  * app.addTags({
package/dist/lib/app.js CHANGED
@@ -226,6 +226,8 @@ class App extends aws_cdk_lib_1.App {
226
226
  /**
227
227
  * Add a compute resource to the default compute stack using the factory pattern.
228
228
  * Automatically creates monitoring role if not already created.
229
+ *
230
+ * Supports ComputeFactory (ECS, EC2, Lambda).
229
231
  */
230
232
  addCompute(fn) {
231
233
  // Auto-create monitoring role when compute is added
@@ -233,7 +235,9 @@ class App extends aws_cdk_lib_1.App {
233
235
  this.createMonitoringRole();
234
236
  }
235
237
  const computeStack = this.getDefaultComputeStack();
236
- computeStack.addConstruct(fn(this, computeStack.getStack()));
238
+ const construct = fn(this, computeStack.getStack());
239
+ computeStack.addConstruct(construct);
240
+ return construct;
237
241
  }
238
242
  /**
239
243
  * Manually add a resource to the default compute stack.
@@ -308,17 +312,22 @@ class App extends aws_cdk_lib_1.App {
308
312
  };
309
313
  }
310
314
  /**
311
- * Apply all tags as a single aspect
315
+ * Apply all tags using CDK's native Tags.of().add() API
312
316
  */
313
317
  applyTagsAspect() {
314
318
  if (!this.aspectApplied && Object.keys(this.globalTags).length > 0) {
315
- // Apply ONE aspect with all tags using the CDK v2.206.0+ compatible StandardTagsAspect
316
- aws_cdk_lib_1.Aspects.of(this).add(new standardTagsAspect_1.StandardTagsAspect(this.globalTags));
319
+ // Apply standard tags using Tags.of(this).add()
320
+ Object.entries(this.globalTags).forEach(([key, value]) => {
321
+ aws_cdk_lib_1.Tags.of(this).add(key, value);
322
+ });
323
+ // Apply aspect for resource-specific tags (IPAM pool, backup tier)
324
+ aws_cdk_lib_1.Aspects.of(this).add(new standardTagsAspect_1.StandardTagsAspect());
317
325
  this.aspectApplied = true;
318
326
  }
319
327
  }
320
328
  /**
321
- * Add custom tags to all resources in the app
329
+ * Add custom tags to all resources in the app.
330
+ *
322
331
  * @param tags Custom tags to apply to all resources
323
332
  * @example
324
333
  * app.addTags({
@@ -328,15 +337,18 @@ class App extends aws_cdk_lib_1.App {
328
337
  * });
329
338
  */
330
339
  addTags(tags) {
331
- // Merge tags but don't apply aspect yet
340
+ // Merge tags into globalTags for tracking
332
341
  this.globalTags = {
333
342
  ...this.globalTags,
334
343
  ...tags
335
344
  };
345
+ Object.entries(tags).forEach(([key, value]) => {
346
+ aws_cdk_lib_1.Tags.of(this).add(key, value);
347
+ });
336
348
  return this;
337
349
  }
338
350
  }
339
351
  exports.App = App;
340
352
  App.instance = null;
341
353
  exports.default = App;
342
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBcUQ7QUFFckQsd0RBQXFEO0FBR3JELDJDQUF1QztBQUN2QyxxREFBbUU7QUFFbkUsb0RBSWdDO0FBQ2hDLG1FQUFnRTtBQUNoRSxpREFBOEM7QUFDOUMsOEVBQThFO0FBQzlFLG9EQUE4RDtBQStCOUQ7Ozs7R0FJRztBQUNILE1BQWEsR0FBSSxTQUFRLGlCQUFNO0lBYzdCLFlBQW9CLElBQWEsRUFBRSxPQUFxQjtRQUN0RCxLQUFLLEVBQUUsQ0FBQztRQVhGLFdBQU0sR0FBZ0MsRUFBRSxDQUFDO1FBR3pDLG1CQUFjLEdBQXNCLElBQUksR0FBRyxFQUFFLENBQUM7UUFHOUMsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsZUFBVSxHQUE4QixFQUFFLENBQUM7UUFDM0Msa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFLNUIsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFcEIsSUFBSSxJQUFJO1lBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7O1lBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO1FBRTVCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBRTlCLCtDQUErQztRQUMvQyxJQUFJLE9BQU8sRUFBRSxPQUFPLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDOUIsQ0FBQzthQUFNLElBQUksT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGlCQUFpQixDQUN2QixNQUErQztRQUUvQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVB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a0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLE9BQU8sQ0FBQyxJQUErQjtRQUM1Qyx3Q0FBd0M7UUFDeEMsSUFBSSxDQUFDLFVBQVUsR0FBRztZQUNoQixHQUFHLElBQUksQ0FBQyxVQUFVO1lBQ2xCLEdBQUcsSUFBSTtTQUNSLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O0FBcllILGtCQXNZQztBQXJZZ0IsWUFBUSxHQUFlLElBQUksQUFBbkIsQ0FBb0I7QUF1WTdDLGtCQUFlLEdBQUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcCBhcyBDZGtBcHAsIEFzcGVjdHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IHR5cGUgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFZwYyB9IGZyb20gXCIuL3Jlc291cmNlcy9hd3MvbmV0d29ya2luZy92cGNcIjtcbmltcG9ydCB7IHR5cGUgSVZwYyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyB0eXBlIFJvbGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi9yZXNvdXJjZXNcIjtcbmltcG9ydCB7IHR5cGUgRWNyLCBFY3JGYWN0b3J5IH0gZnJvbSBcIi4vcmVzb3VyY2VzL2F3cy9zdG9yYWdlL2VjclwiO1xuaW1wb3J0IHsgdHlwZSBEYXRhYmFzZSB9IGZyb20gXCIuL3BhdHRlcm5zL2F3cy9kYXRhYmFzZVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBJTmV0d29ya1Byb3BzLFxuICBOZXR3b3JrRmFjdG9yeSxcbiAgTmV0d29ya1xufSBmcm9tIFwiLi9wYXR0ZXJucy9hd3MvbmV0d29ya1wiO1xuaW1wb3J0IHsgU3RhbmRhcmRUYWdzQXNwZWN0IH0gZnJvbSBcIi4vdXRpbHMvc3RhbmRhcmRUYWdzQXNwZWN0XCI7XG5pbXBvcnQgeyBnZXRDb25maWcgfSBmcm9tIFwiLi91dGlscy9nZXRDb25maWdcIjtcbmltcG9ydCBNb25pdG9yaW5nUm9sZUZhY3RvcnkgZnJvbSBcIi4vcmVzb3VyY2VzL2F3cy9tb25pdG9yaW5nL21vbml0b3JpbmdSb2xlXCI7XG5pbXBvcnQgeyBGSkFMTF9NT05JVE9SSU5HX0NPTkZJRyB9IGZyb20gXCIuL2NvbmZpZy9tb25pdG9yaW5nXCI7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBBcHAuZ2V0QXBwKCkuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhcHAgd2l0aCBuZXcgVlBDXG4gKiBjb25zdCBhcHAgPSBBcHAuZ2V0QXBwKGFwcE5hbWUsIHtcbiAqICAgbmV0d29yazogeyBtYXhBenM6IDIsIG5hdEdhdGV3YXlzOiBmYWxzZSB9XG4gKiB9KTtcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGFwcCB1c2luZyBleGlzdGluZyBWUENcbiAqIGNvbnN0IGFwcCA9IEFwcC5nZXRBcHAoYXBwTmFtZSwge1xuICogICBuZXR3b3JrOiB7IHVzZUV4aXN0aW5nOiBcInZwYy0xMjM0NTY3OFwiIH1cbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYXBwIHdpdGhvdXQgbmV0d29yayAoUzMtb25seSBhcHBzKVxuICogY29uc3QgYXBwID0gQXBwLmdldEFwcChhcHBOYW1lLCB7IG5ldHdvcms6IGZhbHNlIH0pO1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElBcHBPcHRpb25zIHtcbiAgLyoqXG4gICAqIE5ldHdvcmsgY29uZmlndXJhdGlvbi5cbiAgICogLSBPYmplY3Qgd2l0aCBJTmV0d29ya1Byb3BzOiBDcmVhdGUgbmV3IFZQQyB3aXRoIGNvbmZpZ1xuICAgKiAtIGZhbHNlOiBObyBuZXR3b3JrIChmb3IgUzMtb25seSBhcHBzKVxuICAgKiAtIHsgdXNlRXhpc3Rpbmc6IHN0cmluZyB9OiBVc2UgZXhpc3RpbmcgVlBDIGJ5IElEXG4gICAqL1xuICBuZXR3b3JrPzogSU5ldHdvcmtQcm9wcyB8IGZhbHNlIHwgeyB1c2VFeGlzdGluZzogc3RyaW5nIH07XG59XG5cbi8qKlxuICogVGhlIGJhc2ljIGNvcm5lci1zdG9uZSBvZiBhbGwgRmphbGwtaG9zdGVkIGFwcGxpY2F0aW9ucy5cbiAqICBUaGlzIGNsYXNzIGlzIGEgc2luZ2xldG9uIGFuZCBzaG91bGQgYmUgdXNlZCB0byBjcmVhdGUgYW5kIG1hbmFnZVxuICogICBhbGwgcmVzb3VyY2VzIGluIGEgRmphbGwgYXBwbGljYXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBBcHAgZXh0ZW5kcyBDZGtBcHAge1xuICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogQXBwIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBuYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgc3RhY2tzOiB7IFtrZXk6IHN0cmluZ106IEF3c1N0YWNrIH0gPSB7fTtcblxuICBwcml2YXRlIHZwYz86IElWcGM7XG4gIHByaXZhdGUgYWRkaXRpb25hbFZwY3M6IE1hcDxzdHJpbmcsIElWcGM+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIGRlZmF1bHRFY3I6IEVjcjtcbiAgcHJpdmF0ZSBkZWZhdWx0TW9uaXRvcmluZ1JvbGU6IFJvbGU7XG4gIHByaXZhdGUgbmV0d29ya0Rpc2FibGVkID0gZmFsc2U7XG4gIHByaXZhdGUgZ2xvYmFsVGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICBwcml2YXRlIGFzcGVjdEFwcGxpZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKG5hbWU/OiBzdHJpbmcsIG9wdGlvbnM/OiBJQXBwT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG5cbiAgICBBcHAuaW5zdGFuY2UgPSB0aGlzO1xuXG4gICAgaWYgKG5hbWUpIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgZWxzZSB0aGlzLm5hbWUgPSBcIkZqYWxsQXBwXCI7XG5cbiAgICB0aGlzLmluaXRpYWxpemVTdGFuZGFyZFRhZ3MoKTtcblxuICAgIC8vIEluaXRpYWxpc2UgbmV0d29yayBpbW1lZGlhdGVseSBpZiBjb25maWd1cmVkXG4gICAgaWYgKG9wdGlvbnM/Lm5ldHdvcmsgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm5ldHdvcmtEaXNhYmxlZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zPy5uZXR3b3JrKSB7XG4gICAgICB0aGlzLmluaXRpYWxpc2VOZXR3b3JrKG9wdGlvbnMubmV0d29yayk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpc2UgdGhlIG5ldHdvcmsgKFZQQykgZm9yIHRoaXMgYXBwbGljYXRpb24uXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpc2VOZXR3b3JrKFxuICAgIGNvbmZpZzogSU5ldHdvcmtQcm9wcyB8IHsgdXNlRXhpc3Rpbmc6IHN0cmluZyB9XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IG5ldHdvcmtTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpO1xuXG4gICAgaWYgKFwidXNlRXhpc3RpbmdcIiBpbiBjb25maWcpIHtcbiAgICAgIHRoaXMudnBjID0gVnBjLmZyb21Mb29rdXAoXG4gICAgICAgIG5ldHdvcmtTdGFjay5nZXRTdGFjaygpLFxuICAgICAgICBgJHt0aGlzLm5hbWV9SW1wb3J0ZWRWcGNgLFxuICAgICAgICB7XG4gICAgICAgICAgdnBjSWQ6IGNvbmZpZy51c2VFeGlzdGluZ1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXR3b3JrID0gTmV0d29ya0ZhY3RvcnkuYnVpbGQoYCR7dGhpcy5uYW1lfVZwY2AsIGNvbmZpZykoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIG5ldHdvcmtTdGFjay5nZXRTdGFjaygpXG4gICAgICApO1xuICAgICAgdGhpcy52cGMgPSBuZXR3b3JrLmdldFZwYygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQvQ3JlYXRlIGEgYmFzaWMgRmphbGwgQXBwbGljYXRpb24gd2l0aCBzdGFuZGFyZCB0YWdzIGFwcGxpZWQuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIEFwcGxpY2F0aW9uIG5hbWVcbiAgICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvcHRpb25zIGluY2x1ZGluZyBuZXR3b3JrIHNldHRpbmdzXG4gICAqIEByZXR1cm5zIHtBcHB9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIENyZWF0ZSBhcHAgd2l0aCBuZXcgVlBDXG4gICAqIGNvbnN0IGFwcCA9IEFwcC5nZXRBcHAoYXBwTmFtZSwge1xuICAgKiAgIG5ldHdvcms6IHsgbWF4QXpzOiAyLCBuYXRHYXRld2F5czogZmFsc2UgfVxuICAgKiB9KTtcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gQ3JlYXRlIGFwcCB1c2luZyBleGlzdGluZyBWUENcbiAgICogY29uc3QgYXBwID0gQXBwLmdldEFwcChhcHBOYW1lLCB7XG4gICAqICAgbmV0d29yazogeyB1c2VFeGlzdGluZzogXCJ2cGMtMTIzNDU2NzhcIiB9XG4gICAqIH0pO1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBDcmVhdGUgYXBwIHdpdGhvdXQgbmV0d29yayAoUzMtb25seSBhcHBzKVxuICAgKiBjb25zdCBhcHAgPSBBcHAuZ2V0QXBwKGFwcE5hbWUsIHsgbmV0d29yazogZmFsc2UgfSk7XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldEFwcChuYW1lPzogc3RyaW5nLCBvcHRpb25zPzogSUFwcE9wdGlvbnMpOiBBcHAge1xuICAgIGNvbnN0IGFwcCA9IEFwcC5nZXRJbnN0YW5jZShuYW1lLCBvcHRpb25zKTtcbiAgICBhcHAuaW5pdGlhbGl6ZVN0YW5kYXJkVGFncygpO1xuICAgIHJldHVybiBhcHA7XG4gIH1cblxuICAvKipcbiAgICogR2V0L0NyZWF0ZSB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBBcHBcbiAgICogQHBhcmFtIG5hbWUgQXBwbGljYXRpb24gbmFtZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgaW5jbHVkaW5nIG5ldHdvcmsgc2V0dGluZ3NcbiAgICogQHJldHVybnMge0FwcH1cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SW5zdGFuY2UobmFtZT86IHN0cmluZywgb3B0aW9ucz86IElBcHBPcHRpb25zKTogQXBwIHtcbiAgICAvLyBEZXNwaXRlIHN1cHBvcnRpbmcgbXVsdGlwbGUgc3RhY2tzIHlvdSBjYW4gc3RpbGwgb25seSBldmVyXG4gICAgLy8gaGF2ZSBhIHNpbmdsZSBBcHBsaWNhdGlvbiBwZXIgQ0RLIGRlcGxveW1lbnRcbiAgICBpZiAoIUFwcC5pbnN0YW5jZSkge1xuICAgICAgQXBwLmluc3RhbmNlID0gbmV3IEFwcChuYW1lLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQXBwLmluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgc3RhY2sgYnkga2V5LiBJZiB0aGUgc3RhY2sgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICogIERlcGVuZGVuY2llcyBhcmUgb25seSBhcHBsaWVkIHRoZSBmaXJzdCB0aW1lIGEgc3RhY2sgaXMgY3JlYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgb2YgdGhlIHN0YWNrXG4gICAqIEBwYXJhbSBkZXBlbmRlbmNpZXMgLSBUaGUgc3RhY2socykgdGhhdCB0aGlzIHN0YWNrIGRlcGVuZHMgb25cbiAgICogQHJldHVybnMge0F3c1N0YWNrfVxuICAgKi9cbiAgcHVibGljIGdldFN0YWNrKGtleTogc3RyaW5nLCBkZXBlbmRlbmNpZXM/OiBBd3NTdGFjayB8IEF3c1N0YWNrW10pOiBBd3NTdGFjayB7XG4gICAgLy8gQXBwbHkgdGhlIGFzcGVjdCBvbmNlIGJlZm9yZSBjcmVhdGluZyB0aGUgZmlyc3Qgc3RhY2tcbiAgICBpZiAoXG4gICAgICAhdGhpcy5hc3BlY3RBcHBsaWVkICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnN0YWNrcykubGVuZ3RoID09PSAwICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmdsb2JhbFRhZ3MpLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHRoaXMuYXBwbHlUYWdzQXNwZWN0KCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnN0YWNrc1trZXldKSB7XG4gICAgICB0aGlzLnN0YWNrc1trZXldID0gbmV3IEF3c1N0YWNrKGtleSwgZGVwZW5kZW5jaWVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFja3Nba2V5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBkZWZhdWx0IGNvbXB1dGUgc3RhY2sgLSBuYW1lZCBhcyBgJHt0aGlzLm5hbWV9Q29tcHV0ZWBcbiAgICpcbiAgICogT25seSBkZXBlbmRzIG9uIE5ldHdvcmsuIERhdGFiYXNlIGRlcGVuZGVuY3kgaXMgYWRkZWQgYXV0b21hdGljYWxseVxuICAgKiBieSBDREsgd2hlbiBjb21wdXRlIHJlc291cmNlcyByZWZlcmVuY2UgZGF0YWJhc2UgcmVzb3VyY2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXdzU3RhY2t9XG4gICAqL1xuICBwdWJsaWMgZ2V0RGVmYXVsdENvbXB1dGVTdGFjaygpOiBBd3NTdGFjayB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhY2soYCR7dGhpcy5uYW1lfUNvbXB1dGVgLCB0aGlzLmdldERlZmF1bHROZXR3b3JrU3RhY2soKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgZGVmYXVsdCBuZXR3b3JrIHN0YWNrIC0gbmFtZWQgYXMgYCR7dGhpcy5uYW1lfU5ldHdvcmtgXG4gICAqIEByZXR1cm5zIHtBd3NTdGFja31cbiAgICovXG4gIHB1YmxpYyBnZXREZWZhdWx0TmV0d29ya1N0YWNrKCk6IEF3c1N0YWNrIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGFjayhgJHt0aGlzLm5hbWV9TmV0d29ya2ApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGRlZmF1bHQgZGF0YWJhc2Ugc3RhY2sgLSBuYW1lZCBhcyBgJHt0aGlzLm5hbWV9RGF0YWJhc2VgXG4gICAqIEByZXR1cm5zIHtBd3NTdGFja31cbiAgICovXG4gIHB1YmxpYyBnZXREZWZhdWx0RGF0YWJhc2VTdGFjaygpOiBBd3NTdGFjayB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhY2soYCR7dGhpcy5uYW1lfURhdGFiYXNlYCwgdGhpcy5nZXREZWZhdWx0TmV0d29ya1N0YWNrKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGRlZmF1bHQgc3RvcmFnZSBzdGFjayAtIG5hbWVkIGFzIGAke3RoaXMubmFtZX1TdG9yYWdlYFxuICAgKiBAcmV0dXJucyB7QXdzU3RhY2t9XG4gICAqL1xuICBwdWJsaWMgZ2V0RGVmYXVsdFN0b3JhZ2VTdGFjaygpOiBBd3NTdGFjayB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhY2soYCR7dGhpcy5uYW1lfVN0b3JhZ2VgLCB0aGlzLmdldERlZmF1bHROZXR3b3JrU3RhY2soKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgVlBDIGJ5IG5hbWUuIElmIG5vIG5hbWUgaXMgcHJvdmlkZWQsIHJldHVybnMgdGhlIGRlZmF1bHQgVlBDLlxuICAgKlxuICAgKiBUaGlzIGlzIGEgcHVyZSBnZXR0ZXIgLSBpdCBuZXZlciBjcmVhdGVzIGluZnJhc3RydWN0dXJlLlxuICAgKiBOZXR3b3JrIG11c3QgYmUgY29uZmlndXJlZCB2aWEgQXBwLmdldEFwcCgpIG9wdGlvbnMgb3IgYXBwLmFkZE5ldHdvcmsoKS5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBPcHRpb25hbCBuYW1lIG9mIHRoZSBWUEMgdG8gcmV0cmlldmUuIElmIG5vdCBwcm92aWRlZCwgcmV0dXJucyB0aGUgZGVmYXVsdCBWUEMuXG4gICAqIEByZXR1cm5zIHtJVnBjfSBUaGUgY29uZmlndXJlZCBWUENcbiAgICogQHRocm93cyB7RXJyb3J9IElmIG5ldHdvcmsgaXMgZGlzYWJsZWQsIG5vdCBjb25maWd1cmVkLCBvciBuYW1lZCBWUEMgbm90IGZvdW5kXG4gICAqL1xuICBwdWJsaWMgZ2V0VnBjKG5hbWU/OiBzdHJpbmcpOiBJVnBjIHtcbiAgICBpZiAodGhpcy5uZXR3b3JrRGlzYWJsZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJOZXR3b3JrIGlzIGRpc2FibGVkIGZvciB0aGlzIGFwcC4gQ2Fubm90IGdldCBWUEMuIFwiICtcbiAgICAgICAgICBcIlBhc3MgbmV0d29yayBjb25maWcgdG8gQXBwLmdldEFwcCgpIHRvIGVuYWJsZSBuZXR3b3JraW5nLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIElmIG5hbWUgaXMgcHJvdmlkZWQsIGxvb2sgaW4gYWRkaXRpb25hbCBWUENzIGZpcnN0XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxWcGMgPSB0aGlzLmFkZGl0aW9uYWxWcGNzLmdldChuYW1lKTtcbiAgICAgIGlmIChhZGRpdGlvbmFsVnBjKSB7XG4gICAgICAgIHJldHVybiBhZGRpdGlvbmFsVnBjO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVlBDICcke25hbWV9JyBub3QgZm91bmQuIEF2YWlsYWJsZSBWUENzOiAke3RoaXMuZ2V0VnBjTmFtZXMoKS5qb2luKFwiLCBcIil9LiBgICtcbiAgICAgICAgICBcIkNyZWF0ZSBhZGRpdGlvbmFsIFZQQ3MgdXNpbmcgYXBwLmFkZE5ldHdvcmsoTmV0d29ya0ZhY3RvcnkuYnVpbGQoLi4uKSkuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGRlZmF1bHQgVlBDXG4gICAgaWYgKCF0aGlzLnZwYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIk5ldHdvcmsgbm90IGNvbmZpZ3VyZWQuIFBhc3MgbmV0d29yayBjb25maWcgdG8gQXBwLmdldEFwcCgpLiBcIiArXG4gICAgICAgICAgXCJFeGFtcGxlOiBBcHAuZ2V0QXBwKGFwcE5hbWUsIHsgbmV0d29yazogeyBtYXhBenM6IDIgfSB9KVwiXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52cGM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBuYW1lcyBvZiBhbGwgYXZhaWxhYmxlIFZQQ3MuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gQXJyYXkgb2YgVlBDIG5hbWVzLiBJbmNsdWRlcyBcImRlZmF1bHRcIiBpZiB0aGUgZGVmYXVsdCBWUEMgaXMgY29uZmlndXJlZC5cbiAgICovXG4gIHB1YmxpYyBnZXRWcGNOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHRoaXMudnBjKSB7XG4gICAgICBuYW1lcy5wdXNoKFwiZGVmYXVsdFwiKTtcbiAgICB9XG4gICAgbmFtZXMucHVzaCguLi50aGlzLmFkZGl0aW9uYWxWcGNzLmtleXMoKSk7XG4gICAgcmV0dXJuIG5hbWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJlaXZlIHRoZSBkZWZhdWx0IGFwcGxpY2F0aW9uIGNvbnRhaW5lciByZWdpc3RyeS4gSWYgdGhlIHJlZ2lzdHJ5IGRvZXMgbm90IGV4aXN0XG4gICAqICBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0RGVmYXVsdENvbnRhaW5lclJlZ2lzdHJ5KCk6IEVjciB7XG4gICAgaWYgKCF0aGlzLmRlZmF1bHRFY3IpIHtcbiAgICAgIGNvbnN0IG5ldHdvcmtTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpO1xuXG4gICAgICB0aGlzLmRlZmF1bHRFY3IgPSBFY3JGYWN0b3J5LmJ1aWxkKGAke3RoaXMubmFtZX1FY3JgKShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgbmV0d29ya1N0YWNrLmdldFN0YWNrKClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdEVjcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjcm9zcy1hY2NvdW50IG1vbml0b3Jpbmcgcm9sZSBpbiB0aGUgTmV0d29yayBzdGFjayB0aGF0IGFsbG93c1xuICAgKiB0aGUgRmphbGwgd2ViYXBwIHRvIHF1ZXJ5IENsb3VkV2F0Y2ggbWV0cmljcyBhbmQgRUNTIHN0YXR1cy5cbiAgICpcbiAgICogQHBhcmFtIHdlYmFwcEFjY291bnRJZCAtIE9wdGlvbmFsIEFXUyBhY2NvdW50IElEIG9mIHRoZSBGamFsbCB3ZWJhcHAuIERlZmF1bHRzIHRvIGNvbmZpZ3VyZWQgcGxhdGZvcm0gYWNjb3VudC5cbiAgICogQHJldHVybnMge1JvbGV9IFRoZSBjcmVhdGVkIG1vbml0b3Jpbmcgcm9sZVxuICAgKi9cbiAgcHVibGljIGNyZWF0ZU1vbml0b3JpbmdSb2xlKHdlYmFwcEFjY291bnRJZD86IHN0cmluZyk6IFJvbGUge1xuICAgIGlmICghdGhpcy5kZWZhdWx0TW9uaXRvcmluZ1JvbGUpIHtcbiAgICAgIGNvbnN0IG5ldHdvcmtTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpO1xuICAgICAgY29uc3QgYWNjb3VudElkID1cbiAgICAgICAgd2ViYXBwQWNjb3VudElkIHx8IEZKQUxMX01PTklUT1JJTkdfQ09ORklHLndlYmFwcEF3c0FjY291bnRJZDtcblxuICAgICAgdGhpcy5kZWZhdWx0TW9uaXRvcmluZ1JvbGUgPSBNb25pdG9yaW5nUm9sZUZhY3RvcnkuYnVpbGQoXG4gICAgICAgIGAke3RoaXMubmFtZX1Nb25pdG9yaW5nUm9sZWAsXG4gICAgICAgIHtcbiAgICAgICAgICB3ZWJhcHBBY2NvdW50SWQ6IGFjY291bnRJZCxcbiAgICAgICAgICBhcHBOYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgcm9sZU5hbWVQcmVmaXg6IEZKQUxMX01PTklUT1JJTkdfQ09ORklHLnJvbGVOYW1lUHJlZml4LFxuICAgICAgICAgIHJvbGVQYXRoOiBGSkFMTF9NT05JVE9SSU5HX0NPTkZJRy5yb2xlUGF0aFxuICAgICAgICB9XG4gICAgICApKHRoaXMsIG5ldHdvcmtTdGFjay5nZXRTdGFjaygpKTtcblxuICAgICAgLy8gUmVnaXN0ZXIgdGhlIHJvbGUgd2l0aCB0aGUgbmV0d29yayBzdGFja1xuICAgICAgbmV0d29ya1N0YWNrLmFkZENvbnN0cnVjdCh0aGlzLmRlZmF1bHRNb25pdG9yaW5nUm9sZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdE1vbml0b3JpbmdSb2xlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGNvbXB1dGUgcmVzb3VyY2UgdG8gdGhlIGRlZmF1bHQgY29tcHV0ZSBzdGFjayB1c2luZyB0aGUgZmFjdG9yeSBwYXR0ZXJuLlxuICAgKiBBdXRvbWF0aWNhbGx5IGNyZWF0ZXMgbW9uaXRvcmluZyByb2xlIGlmIG5vdCBhbHJlYWR5IGNyZWF0ZWQuXG4gICAqL1xuICBwdWJsaWMgYWRkQ29tcHV0ZShmbjogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICAvLyBBdXRvLWNyZWF0ZSBtb25pdG9yaW5nIHJvbGUgd2hlbiBjb21wdXRlIGlzIGFkZGVkXG4gICAgaWYgKCF0aGlzLmRlZmF1bHRNb25pdG9yaW5nUm9sZSkge1xuICAgICAgdGhpcy5jcmVhdGVNb25pdG9yaW5nUm9sZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXB1dGVTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdENvbXB1dGVTdGFjaygpO1xuICAgIGNvbXB1dGVTdGFjay5hZGRDb25zdHJ1Y3QoZm4odGhpcywgY29tcHV0ZVN0YWNrLmdldFN0YWNrKCkpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW51YWxseSBhZGQgYSByZXNvdXJjZSB0byB0aGUgZGVmYXVsdCBjb21wdXRlIHN0YWNrLlxuICAgKi9cbiAgcHVibGljIGFkZENvbXB1dGVSZXNvdXJjZShyZXNvdXJjZTogQ29uc3RydWN0KTogdm9pZCB7XG4gICAgY29uc3QgY29tcHV0ZVN0YWNrID0gdGhpcy5nZXREZWZhdWx0Q29tcHV0ZVN0YWNrKCk7XG4gICAgY29tcHV0ZVN0YWNrLmFkZENvbnN0cnVjdChyZXNvdXJjZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgZGF0YWJhc2UgcmVzb3VyY2UgdG8gdGhlIGRlZmF1bHQgZGF0YWJhc2Ugc3RhY2sgdXNpbmcgdGhlIGZhY3RvcnkgcGF0dGVybi5cbiAgICovXG4gIHB1YmxpYyBhZGREYXRhYmFzZShmbjogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBDb25zdHJ1Y3QpOiBEYXRhYmFzZSB7XG4gICAgY29uc3QgZGF0YWJhc2VTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdERhdGFiYXNlU3RhY2soKTtcbiAgICBjb25zdCBkYXRhYmFzZUNvbnN0cnVjdCA9IGZuKHRoaXMsIGRhdGFiYXNlU3RhY2suZ2V0U3RhY2soKSk7XG4gICAgZGF0YWJhc2VTdGFjay5hZGRDb25zdHJ1Y3QoZGF0YWJhc2VDb25zdHJ1Y3QpO1xuXG4gICAgcmV0dXJuIGRhdGFiYXNlQ29uc3RydWN0IGFzIHVua25vd24gYXMgRGF0YWJhc2U7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgc3RvcmFnZSByZXNvdXJjZSAoUzMpIHRvIHRoZSBkZWZhdWx0IHN0b3JhZ2Ugc3RhY2sgdXNpbmcgdGhlIGZhY3RvcnkgcGF0dGVybi5cbiAgICovXG4gIHB1YmxpYyBhZGRTdG9yYWdlKGZuOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IENvbnN0cnVjdCk6IGFueSB7XG4gICAgY29uc3Qgc3RvcmFnZVN0YWNrID0gdGhpcy5nZXREZWZhdWx0U3RvcmFnZVN0YWNrKCk7XG4gICAgY29uc3Qgc3RvcmFnZUNvbnN0cnVjdCA9IGZuKHRoaXMsIHN0b3JhZ2VTdGFjay5nZXRTdGFjaygpKTtcbiAgICBzdG9yYWdlU3RhY2suYWRkQ29uc3RydWN0KHN0b3JhZ2VDb25zdHJ1Y3QpO1xuXG4gICAgcmV0dXJuIHN0b3JhZ2VDb25zdHJ1Y3Q7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGFkZGl0aW9uYWwgbmV0d29yayAoVlBDKSB0byB0aGUgYXBwbGljYXRpb24uXG4gICAqXG4gICAqIFVzZSB0aGlzIHRvIGNyZWF0ZSBhZGRpdGlvbmFsIFZQQ3MgYmV5b25kIHRoZSBkZWZhdWx0IFZQQyBjb25maWd1cmVkIHZpYSBBcHAuZ2V0QXBwKCkuXG4gICAqIEFkZGl0aW9uYWwgVlBDcyBjYW4gYmUgcmV0cmlldmVkIGJ5IG5hbWUgdXNpbmcgYXBwLmdldFZwYyhuYW1lKS5cbiAgICpcbiAgICogQHBhcmFtIGZuIC0gRmFjdG9yeSBmdW5jdGlvbiB0aGF0IGNyZWF0ZXMgdGhlIE5ldHdvcmsgY29uc3RydWN0XG4gICAqIEByZXR1cm5zIHtOZXR3b3JrfSBUaGUgY3JlYXRlZCBOZXR3b3JrIGNvbnN0cnVjdFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBpc29sYXRlZFZwYyA9IGFwcC5hZGROZXR3b3JrKFxuICAgKiAgIE5ldHdvcmtGYWN0b3J5LmJ1aWxkKFwiSXNvbGF0ZWRWcGNcIiwgeyBtYXhBenM6IDIsIG5hdEdhdGV3YXlzOiBmYWxzZSB9KVxuICAgKiApO1xuICAgKi9cbiAgcHVibGljIGFkZE5ldHdvcmsoZm46IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gTmV0d29yayk6IE5ldHdvcmsge1xuICAgIGNvbnN0IG5ldHdvcmtTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpO1xuICAgIGNvbnN0IG5ldHdvcmsgPSBmbih0aGlzLCBuZXR3b3JrU3RhY2suZ2V0U3RhY2soKSk7XG4gICAgY29uc3QgdnBjTmFtZSA9IG5ldHdvcmsubm9kZS5pZDtcblxuICAgIC8vIFN0b3JlIGluIGFkZGl0aW9uYWwgVlBDcyBtYXAgZm9yIHJldHJpZXZhbCB2aWEgZ2V0VnBjKG5hbWUpXG4gICAgdGhpcy5hZGRpdGlvbmFsVnBjcy5zZXQodnBjTmFtZSwgbmV0d29yay5nZXRWcGMoKSk7XG4gICAgbmV0d29ya1N0YWNrLmFkZENvbnN0cnVjdChuZXR3b3JrKTtcblxuICAgIHJldHVybiBuZXR3b3JrO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbnVhbGx5IGFkZCBhIHJlc291cmNlIHRvIHRoZSBkZWZhdWx0IGRhdGFiYXNlIHN0YWNrLlxuICAgKi9cbiAgcHVibGljIGFkZERhdGFiYXNlUmVzb3VyY2UocmVzb3VyY2U6IENvbnN0cnVjdCk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGFiYXNlU3RhY2sgPSB0aGlzLmdldERlZmF1bHREYXRhYmFzZVN0YWNrKCk7XG4gICAgZGF0YWJhc2VTdGFjay5hZGRDb25zdHJ1Y3QocmVzb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbnVhbGx5IGFkZCBhIHJlc291cmNlIHRvIHRoZSBkZWZhdWx0IHN0b3JhZ2Ugc3RhY2suXG4gICAqL1xuICBwdWJsaWMgYWRkU3RvcmFnZVJlc291cmNlKHJlc291cmNlOiBDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICBjb25zdCBzdG9yYWdlU3RhY2sgPSB0aGlzLmdldERlZmF1bHRTdG9yYWdlU3RhY2soKTtcbiAgICBzdG9yYWdlU3RhY2suYWRkQ29uc3RydWN0KHJlc291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHN0YW5kYXJkIHRhZ3NcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVN0YW5kYXJkVGFncygpOiB2b2lkIHtcbiAgICBjb25zdCBjb25maWcgPSBnZXRDb25maWcoKTtcbiAgICB0aGlzLmdsb2JhbFRhZ3MgPSB7XG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmVudmlyb25tZW50XCI6IGNvbmZpZy5lbnZpcm9ubWVudCxcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiOiB0aGlzLm5hbWVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGFsbCB0YWdzIGFzIGEgc2luZ2xlIGFzcGVjdFxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseVRhZ3NBc3BlY3QoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFzcGVjdEFwcGxpZWQgJiYgT2JqZWN0LmtleXModGhpcy5nbG9iYWxUYWdzKS5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBBcHBseSBPTkUgYXNwZWN0IHdpdGggYWxsIHRhZ3MgdXNpbmcgdGhlIENESyB2Mi4yMDYuMCsgY29tcGF0aWJsZSBTdGFuZGFyZFRhZ3NBc3BlY3RcbiAgICAgIEFzcGVjdHMub2YodGhpcykuYWRkKG5ldyBTdGFuZGFyZFRhZ3NBc3BlY3QodGhpcy5nbG9iYWxUYWdzKSk7XG4gICAgICB0aGlzLmFzcGVjdEFwcGxpZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgY3VzdG9tIHRhZ3MgdG8gYWxsIHJlc291cmNlcyBpbiB0aGUgYXBwXG4gICAqIEBwYXJhbSB0YWdzIEN1c3RvbSB0YWdzIHRvIGFwcGx5IHRvIGFsbCByZXNvdXJjZXNcbiAgICogQGV4YW1wbGVcbiAgICogYXBwLmFkZFRhZ3Moe1xuICAgKiAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246b3duZXJcIjogXCJwbGF0Zm9ybS10ZWFtXCIsXG4gICAqICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpjb3N0LWNlbnRlclwiOiBcIkNDLTEyM1wiLFxuICAgKiAgIFwidGVhbTpzbGFjay1jaGFubmVsXCI6IFwiI3BsYXRmb3JtLWFsZXJ0c1wiXG4gICAqIH0pO1xuICAgKi9cbiAgcHVibGljIGFkZFRhZ3ModGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IEFwcCB7XG4gICAgLy8gTWVyZ2UgdGFncyBidXQgZG9uJ3QgYXBwbHkgYXNwZWN0IHlldFxuICAgIHRoaXMuZ2xvYmFsVGFncyA9IHtcbiAgICAgIC4uLnRoaXMuZ2xvYmFsVGFncyxcbiAgICAgIC4uLnRhZ3NcbiAgICB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFwcDtcbiJdfQ==
354
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBMkQ7QUFFM0Qsd0RBQXFEO0FBR3JELDJDQUF1QztBQUN2QyxxREFBbUU7QUFFbkUsb0RBSWdDO0FBQ2hDLG1FQUFnRTtBQUNoRSxpREFBOEM7QUFDOUMsOEVBQThFO0FBQzlFLG9EQUE4RDtBQStCOUQ7Ozs7R0FJRztBQUNILE1BQWEsR0FBSSxTQUFRLGlCQUFNO0lBYzdCLFlBQW9CLElBQWEsRUFBRSxPQUFxQjtRQUN0RCxLQUFLLEVBQUUsQ0FBQztRQVhGLFdBQU0sR0FBZ0MsRUFBRSxDQUFDO1FBR3pDLG1CQUFjLEdBQUcsSUFBSSxHQUFHLEVBQWdCLENBQUM7UUFHekMsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsZUFBVSxHQUE4QixFQUFFLENBQUM7UUFDM0Msa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFLNUIsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFcEIsSUFBSSxJQUFJO1lBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7O1lBQ3RCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO1FBRTVCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBRTlCLCtDQUErQztRQUMvQyxJQUFJLE9BQU8sRUFBRSxPQUFPLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDOUIsQ0FBQzthQUFNLElBQUksT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGlCQUFpQixDQUN2QixNQUErQztRQUUvQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVB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QUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO2dCQUN2RCxrQkFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLENBQUMsQ0FBQyxDQUFDO1lBRUgsbUVBQW1FO1lBQ25FLHFCQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLHVDQUFrQixFQUFFLENBQUMsQ0FBQztZQUUvQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSSxPQUFPLENBQUMsSUFBK0I7UUFDNUMsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxVQUFVLEdBQUc7WUFDaEIsR0FBRyxJQUFJLENBQUMsVUFBVTtZQUNsQixHQUFHLElBQUk7U0FDUixDQUFDO1FBQ0YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQzVDLGtCQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O0FBdFpILGtCQXVaQztBQXRaZ0IsWUFBUSxHQUFlLElBQUksQUFBbkIsQ0FBb0I7QUF3WjdDLGtCQUFlLEdBQUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcCBhcyBDZGtBcHAsIEFzcGVjdHMsIFRhZ3MgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IHR5cGUgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFZwYyB9IGZyb20gXCIuL3Jlc291cmNlcy9hd3MvbmV0d29ya2luZy92cGNcIjtcbmltcG9ydCB7IHR5cGUgSVZwYyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyB0eXBlIFJvbGUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQXdzU3RhY2sgfSBmcm9tIFwiLi9yZXNvdXJjZXNcIjtcbmltcG9ydCB7IHR5cGUgRWNyLCBFY3JGYWN0b3J5IH0gZnJvbSBcIi4vcmVzb3VyY2VzL2F3cy9zdG9yYWdlL2VjclwiO1xuaW1wb3J0IHsgdHlwZSBEYXRhYmFzZSB9IGZyb20gXCIuL3BhdHRlcm5zL2F3cy9kYXRhYmFzZVwiO1xuaW1wb3J0IHtcbiAgdHlwZSBJTmV0d29ya1Byb3BzLFxuICBOZXR3b3JrRmFjdG9yeSxcbiAgdHlwZSBOZXR3b3JrXG59IGZyb20gXCIuL3BhdHRlcm5zL2F3cy9uZXR3b3JrXCI7XG5pbXBvcnQgeyBTdGFuZGFyZFRhZ3NBc3BlY3QgfSBmcm9tIFwiLi91dGlscy9zdGFuZGFyZFRhZ3NBc3BlY3RcIjtcbmltcG9ydCB7IGdldENvbmZpZyB9IGZyb20gXCIuL3V0aWxzL2dldENvbmZpZ1wiO1xuaW1wb3J0IE1vbml0b3JpbmdSb2xlRmFjdG9yeSBmcm9tIFwiLi9yZXNvdXJjZXMvYXdzL21vbml0b3JpbmcvbW9uaXRvcmluZ1JvbGVcIjtcbmltcG9ydCB7IEZKQUxMX01PTklUT1JJTkdfQ09ORklHIH0gZnJvbSBcIi4vY29uZmlnL21vbml0b3JpbmdcIjtcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEFwcC5nZXRBcHAoKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGFwcCB3aXRoIG5ldyBWUENcbiAqIGNvbnN0IGFwcCA9IEFwcC5nZXRBcHAoYXBwTmFtZSwge1xuICogICBuZXR3b3JrOiB7IG1heEF6czogMiwgbmF0R2F0ZXdheXM6IGZhbHNlIH1cbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYXBwIHVzaW5nIGV4aXN0aW5nIFZQQ1xuICogY29uc3QgYXBwID0gQXBwLmdldEFwcChhcHBOYW1lLCB7XG4gKiAgIG5ldHdvcms6IHsgdXNlRXhpc3Rpbmc6IFwidnBjLTEyMzQ1Njc4XCIgfVxuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhcHAgd2l0aG91dCBuZXR3b3JrIChTMy1vbmx5IGFwcHMpXG4gKiBjb25zdCBhcHAgPSBBcHAuZ2V0QXBwKGFwcE5hbWUsIHsgbmV0d29yazogZmFsc2UgfSk7XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUFwcE9wdGlvbnMge1xuICAvKipcbiAgICogTmV0d29yayBjb25maWd1cmF0aW9uLlxuICAgKiAtIE9iamVjdCB3aXRoIElOZXR3b3JrUHJvcHM6IENyZWF0ZSBuZXcgVlBDIHdpdGggY29uZmlnXG4gICAqIC0gZmFsc2U6IE5vIG5ldHdvcmsgKGZvciBTMy1vbmx5IGFwcHMpXG4gICAqIC0geyB1c2VFeGlzdGluZzogc3RyaW5nIH06IFVzZSBleGlzdGluZyBWUEMgYnkgSURcbiAgICovXG4gIG5ldHdvcms/OiBJTmV0d29ya1Byb3BzIHwgZmFsc2UgfCB7IHVzZUV4aXN0aW5nOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBUaGUgYmFzaWMgY29ybmVyLXN0b25lIG9mIGFsbCBGamFsbC1ob3N0ZWQgYXBwbGljYXRpb25zLlxuICogIFRoaXMgY2xhc3MgaXMgYSBzaW5nbGV0b24gYW5kIHNob3VsZCBiZSB1c2VkIHRvIGNyZWF0ZSBhbmQgbWFuYWdlXG4gKiAgIGFsbCByZXNvdXJjZXMgaW4gYSBGamFsbCBhcHBsaWNhdGlvbi5cbiAqL1xuZXhwb3J0IGNsYXNzIEFwcCBleHRlbmRzIENka0FwcCB7XG4gIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBBcHAgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIG5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBzdGFja3M6IHsgW2tleTogc3RyaW5nXTogQXdzU3RhY2sgfSA9IHt9O1xuXG4gIHByaXZhdGUgdnBjPzogSVZwYztcbiAgcHJpdmF0ZSBhZGRpdGlvbmFsVnBjcyA9IG5ldyBNYXA8c3RyaW5nLCBJVnBjPigpO1xuICBwcml2YXRlIGRlZmF1bHRFY3I6IEVjcjtcbiAgcHJpdmF0ZSBkZWZhdWx0TW9uaXRvcmluZ1JvbGU6IFJvbGU7XG4gIHByaXZhdGUgbmV0d29ya0Rpc2FibGVkID0gZmFsc2U7XG4gIHByaXZhdGUgZ2xvYmFsVGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuICBwcml2YXRlIGFzcGVjdEFwcGxpZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKG5hbWU/OiBzdHJpbmcsIG9wdGlvbnM/OiBJQXBwT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG5cbiAgICBBcHAuaW5zdGFuY2UgPSB0aGlzO1xuXG4gICAgaWYgKG5hbWUpIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgZWxzZSB0aGlzLm5hbWUgPSBcIkZqYWxsQXBwXCI7XG5cbiAgICB0aGlzLmluaXRpYWxpemVTdGFuZGFyZFRhZ3MoKTtcblxuICAgIC8vIEluaXRpYWxpc2UgbmV0d29yayBpbW1lZGlhdGVseSBpZiBjb25maWd1cmVkXG4gICAgaWYgKG9wdGlvbnM/Lm5ldHdvcmsgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLm5ldHdvcmtEaXNhYmxlZCA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zPy5uZXR3b3JrKSB7XG4gICAgICB0aGlzLmluaXRpYWxpc2VOZXR3b3JrKG9wdGlvbnMubmV0d29yayk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpc2UgdGhlIG5ldHdvcmsgKFZQQykgZm9yIHRoaXMgYXBwbGljYXRpb24uXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpc2VOZXR3b3JrKFxuICAgIGNvbmZpZzogSU5ldHdvcmtQcm9wcyB8IHsgdXNlRXhpc3Rpbmc6IHN0cmluZyB9XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IG5ldHdvcmtTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpO1xuXG4gICAgaWYgKFwidXNlRXhpc3RpbmdcIiBpbiBjb25maWcpIHtcbiAgICAgIHRoaXMudnBjID0gVnBjLmZyb21Mb29rdXAoXG4gICAgICAgIG5ldHdvcmtTdGFjay5nZXRTdGFjaygpLFxuICAgICAgICBgJHt0aGlzLm5hbWV9SW1wb3J0ZWRWcGNgLFxuICAgICAgICB7XG4gICAgICAgICAgdnBjSWQ6IGNvbmZpZy51c2VFeGlzdGluZ1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBuZXR3b3JrID0gTmV0d29ya0ZhY3RvcnkuYnVpbGQoYCR7dGhpcy5uYW1lfVZwY2AsIGNvbmZpZykoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIG5ldHdvcmtTdGFjay5nZXRTdGFjaygpXG4gICAgICApO1xuICAgICAgdGhpcy52cGMgPSBuZXR3b3JrLmdldFZwYygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQvQ3JlYXRlIGEgYmFzaWMgRmphbGwgQXBwbGljYXRpb24gd2l0aCBzdGFuZGFyZCB0YWdzIGFwcGxpZWQuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIEFwcGxpY2F0aW9uIG5hbWVcbiAgICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvcHRpb25zIGluY2x1ZGluZyBuZXR3b3JrIHNldHRpbmdzXG4gICAqIEByZXR1cm5zIHtBcHB9XG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIENyZWF0ZSBhcHAgd2l0aCBuZXcgVlBDXG4gICAqIGNvbnN0IGFwcCA9IEFwcC5nZXRBcHAoYXBwTmFtZSwge1xuICAgKiAgIG5ldHdvcms6IHsgbWF4QXpzOiAyLCBuYXRHYXRld2F5czogZmFsc2UgfVxuICAgKiB9KTtcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gQ3JlYXRlIGFwcCB1c2luZyBleGlzdGluZyBWUENcbiAgICogY29uc3QgYXBwID0gQXBwLmdldEFwcChhcHBOYW1lLCB7XG4gICAqICAgbmV0d29yazogeyB1c2VFeGlzdGluZzogXCJ2cGMtMTIzNDU2NzhcIiB9XG4gICAqIH0pO1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBDcmVhdGUgYXBwIHdpdGhvdXQgbmV0d29yayAoUzMtb25seSBhcHBzKVxuICAgKiBjb25zdCBhcHAgPSBBcHAuZ2V0QXBwKGFwcE5hbWUsIHsgbmV0d29yazogZmFsc2UgfSk7XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldEFwcChuYW1lPzogc3RyaW5nLCBvcHRpb25zPzogSUFwcE9wdGlvbnMpOiBBcHAge1xuICAgIGNvbnN0IGFwcCA9IEFwcC5nZXRJbnN0YW5jZShuYW1lLCBvcHRpb25zKTtcbiAgICBhcHAuaW5pdGlhbGl6ZVN0YW5kYXJkVGFncygpO1xuICAgIHJldHVybiBhcHA7XG4gIH1cblxuICAvKipcbiAgICogR2V0L0NyZWF0ZSB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBBcHBcbiAgICogQHBhcmFtIG5hbWUgQXBwbGljYXRpb24gbmFtZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgaW5jbHVkaW5nIG5ldHdvcmsgc2V0dGluZ3NcbiAgICogQHJldHVybnMge0FwcH1cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SW5zdGFuY2UobmFtZT86IHN0cmluZywgb3B0aW9ucz86IElBcHBPcHRpb25zKTogQXBwIHtcbiAgICAvLyBEZXNwaXRlIHN1cHBvcnRpbmcgbXVsdGlwbGUgc3RhY2tzIHlvdSBjYW4gc3RpbGwgb25seSBldmVyXG4gICAgLy8gaGF2ZSBhIHNpbmdsZSBBcHBsaWNhdGlvbiBwZXIgQ0RLIGRlcGxveW1lbnRcbiAgICBpZiAoIUFwcC5pbnN0YW5jZSkge1xuICAgICAgQXBwLmluc3RhbmNlID0gbmV3IEFwcChuYW1lLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQXBwLmluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgc3RhY2sgYnkga2V5LiBJZiB0aGUgc3RhY2sgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC5cbiAgICogIERlcGVuZGVuY2llcyBhcmUgb25seSBhcHBsaWVkIHRoZSBmaXJzdCB0aW1lIGEgc3RhY2sgaXMgY3JlYXRlZC5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkgb2YgdGhlIHN0YWNrXG4gICAqIEBwYXJhbSBkZXBlbmRlbmNpZXMgLSBUaGUgc3RhY2socykgdGhhdCB0aGlzIHN0YWNrIGRlcGVuZHMgb25cbiAgICogQHJldHVybnMge0F3c1N0YWNrfVxuICAgKi9cbiAgcHVibGljIGdldFN0YWNrKGtleTogc3RyaW5nLCBkZXBlbmRlbmNpZXM/OiBBd3NTdGFjayB8IEF3c1N0YWNrW10pOiBBd3NTdGFjayB7XG4gICAgLy8gQXBwbHkgdGhlIGFzcGVjdCBvbmNlIGJlZm9yZSBjcmVhdGluZyB0aGUgZmlyc3Qgc3RhY2tcbiAgICBpZiAoXG4gICAgICAhdGhpcy5hc3BlY3RBcHBsaWVkICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnN0YWNrcykubGVuZ3RoID09PSAwICYmXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmdsb2JhbFRhZ3MpLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHRoaXMuYXBwbHlUYWdzQXNwZWN0KCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnN0YWNrc1trZXldKSB7XG4gICAgICB0aGlzLnN0YWNrc1trZXldID0gbmV3IEF3c1N0YWNrKGtleSwgZGVwZW5kZW5jaWVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFja3Nba2V5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBkZWZhdWx0IGNvbXB1dGUgc3RhY2sgLSBuYW1lZCBhcyBgJHt0aGlzLm5hbWV9Q29tcHV0ZWBcbiAgICpcbiAgICogT25seSBkZXBlbmRzIG9uIE5ldHdvcmsuIERhdGFiYXNlIGRlcGVuZGVuY3kgaXMgYWRkZWQgYXV0b21hdGljYWxseVxuICAgKiBieSBDREsgd2hlbiBjb21wdXRlIHJlc291cmNlcyByZWZlcmVuY2UgZGF0YWJhc2UgcmVzb3VyY2VzLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXdzU3RhY2t9XG4gICAqL1xuICBwdWJsaWMgZ2V0RGVmYXVsdENvbXB1dGVTdGFjaygpOiBBd3NTdGFjayB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhY2soYCR7dGhpcy5uYW1lfUNvbXB1dGVgLCB0aGlzLmdldERlZmF1bHROZXR3b3JrU3RhY2soKSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgZGVmYXVsdCBuZXR3b3JrIHN0YWNrIC0gbmFtZWQgYXMgYCR7dGhpcy5uYW1lfU5ldHdvcmtgXG4gICAqIEByZXR1cm5zIHtBd3NTdGFja31cbiAgICovXG4gIHB1YmxpYyBnZXREZWZhdWx0TmV0d29ya1N0YWNrKCk6IEF3c1N0YWNrIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGFjayhgJHt0aGlzLm5hbWV9TmV0d29ya2ApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGRlZmF1bHQgZGF0YWJhc2Ugc3RhY2sgLSBuYW1lZCBhcyBgJHt0aGlzLm5hbWV9RGF0YWJhc2VgXG4gICAqIEByZXR1cm5zIHtBd3NTdGFja31cbiAgICovXG4gIHB1YmxpYyBnZXREZWZhdWx0RGF0YWJhc2VTdGFjaygpOiBBd3NTdGFjayB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhY2soYCR7dGhpcy5uYW1lfURhdGFiYXNlYCwgdGhpcy5nZXREZWZhdWx0TmV0d29ya1N0YWNrKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGRlZmF1bHQgc3RvcmFnZSBzdGFjayAtIG5hbWVkIGFzIGAke3RoaXMubmFtZX1TdG9yYWdlYFxuICAgKiBAcmV0dXJucyB7QXdzU3RhY2t9XG4gICAqL1xuICBwdWJsaWMgZ2V0RGVmYXVsdFN0b3JhZ2VTdGFjaygpOiBBd3NTdGFjayB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhY2soYCR7dGhpcy5uYW1lfVN0b3JhZ2VgLCB0aGlzLmdldERlZmF1bHROZXR3b3JrU3RhY2soKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgVlBDIGJ5IG5hbWUuIElmIG5vIG5hbWUgaXMgcHJvdmlkZWQsIHJldHVybnMgdGhlIGRlZmF1bHQgVlBDLlxuICAgKlxuICAgKiBUaGlzIGlzIGEgcHVyZSBnZXR0ZXIgLSBpdCBuZXZlciBjcmVhdGVzIGluZnJhc3RydWN0dXJlLlxuICAgKiBOZXR3b3JrIG11c3QgYmUgY29uZmlndXJlZCB2aWEgQXBwLmdldEFwcCgpIG9wdGlvbnMgb3IgYXBwLmFkZE5ldHdvcmsoKS5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBPcHRpb25hbCBuYW1lIG9mIHRoZSBWUEMgdG8gcmV0cmlldmUuIElmIG5vdCBwcm92aWRlZCwgcmV0dXJucyB0aGUgZGVmYXVsdCBWUEMuXG4gICAqIEByZXR1cm5zIHtJVnBjfSBUaGUgY29uZmlndXJlZCBWUENcbiAgICogQHRocm93cyB7RXJyb3J9IElmIG5ldHdvcmsgaXMgZGlzYWJsZWQsIG5vdCBjb25maWd1cmVkLCBvciBuYW1lZCBWUEMgbm90IGZvdW5kXG4gICAqL1xuICBwdWJsaWMgZ2V0VnBjKG5hbWU/OiBzdHJpbmcpOiBJVnBjIHtcbiAgICBpZiAodGhpcy5uZXR3b3JrRGlzYWJsZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJOZXR3b3JrIGlzIGRpc2FibGVkIGZvciB0aGlzIGFwcC4gQ2Fubm90IGdldCBWUEMuIFwiICtcbiAgICAgICAgICBcIlBhc3MgbmV0d29yayBjb25maWcgdG8gQXBwLmdldEFwcCgpIHRvIGVuYWJsZSBuZXR3b3JraW5nLlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIElmIG5hbWUgaXMgcHJvdmlkZWQsIGxvb2sgaW4gYWRkaXRpb25hbCBWUENzIGZpcnN0XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxWcGMgPSB0aGlzLmFkZGl0aW9uYWxWcGNzLmdldChuYW1lKTtcbiAgICAgIGlmIChhZGRpdGlvbmFsVnBjKSB7XG4gICAgICAgIHJldHVybiBhZGRpdGlvbmFsVnBjO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVlBDICcke25hbWV9JyBub3QgZm91bmQuIEF2YWlsYWJsZSBWUENzOiAke3RoaXMuZ2V0VnBjTmFtZXMoKS5qb2luKFwiLCBcIil9LiBgICtcbiAgICAgICAgICBcIkNyZWF0ZSBhZGRpdGlvbmFsIFZQQ3MgdXNpbmcgYXBwLmFkZE5ldHdvcmsoTmV0d29ya0ZhY3RvcnkuYnVpbGQoLi4uKSkuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGRlZmF1bHQgVlBDXG4gICAgaWYgKCF0aGlzLnZwYykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIk5ldHdvcmsgbm90IGNvbmZpZ3VyZWQuIFBhc3MgbmV0d29yayBjb25maWcgdG8gQXBwLmdldEFwcCgpLiBcIiArXG4gICAgICAgICAgXCJFeGFtcGxlOiBBcHAuZ2V0QXBwKGFwcE5hbWUsIHsgbmV0d29yazogeyBtYXhBenM6IDIgfSB9KVwiXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52cGM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBuYW1lcyBvZiBhbGwgYXZhaWxhYmxlIFZQQ3MuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX0gQXJyYXkgb2YgVlBDIG5hbWVzLiBJbmNsdWRlcyBcImRlZmF1bHRcIiBpZiB0aGUgZGVmYXVsdCBWUEMgaXMgY29uZmlndXJlZC5cbiAgICovXG4gIHB1YmxpYyBnZXRWcGNOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgbmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKHRoaXMudnBjKSB7XG4gICAgICBuYW1lcy5wdXNoKFwiZGVmYXVsdFwiKTtcbiAgICB9XG4gICAgbmFtZXMucHVzaCguLi50aGlzLmFkZGl0aW9uYWxWcGNzLmtleXMoKSk7XG4gICAgcmV0dXJuIG5hbWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJlaXZlIHRoZSBkZWZhdWx0IGFwcGxpY2F0aW9uIGNvbnRhaW5lciByZWdpc3RyeS4gSWYgdGhlIHJlZ2lzdHJ5IGRvZXMgbm90IGV4aXN0XG4gICAqICBpdCB3aWxsIGJlIGNyZWF0ZWQuXG4gICAqL1xuICBwdWJsaWMgZ2V0RGVmYXVsdENvbnRhaW5lclJlZ2lzdHJ5KCk6IEVjciB7XG4gICAgaWYgKCF0aGlzLmRlZmF1bHRFY3IpIHtcbiAgICAgIGNvbnN0IG5ldHdvcmtTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpO1xuXG4gICAgICB0aGlzLmRlZmF1bHRFY3IgPSBFY3JGYWN0b3J5LmJ1aWxkKGAke3RoaXMubmFtZX1FY3JgKShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgbmV0d29ya1N0YWNrLmdldFN0YWNrKClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdEVjcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjcm9zcy1hY2NvdW50IG1vbml0b3Jpbmcgcm9sZSBpbiB0aGUgTmV0d29yayBzdGFjayB0aGF0IGFsbG93c1xuICAgKiB0aGUgRmphbGwgd2ViYXBwIHRvIHF1ZXJ5IENsb3VkV2F0Y2ggbWV0cmljcyBhbmQgRUNTIHN0YXR1cy5cbiAgICpcbiAgICogQHBhcmFtIHdlYmFwcEFjY291bnRJZCAtIE9wdGlvbmFsIEFXUyBhY2NvdW50IElEIG9mIHRoZSBGamFsbCB3ZWJhcHAuIERlZmF1bHRzIHRvIGNvbmZpZ3VyZWQgcGxhdGZvcm0gYWNjb3VudC5cbiAgICogQHJldHVybnMge1JvbGV9IFRoZSBjcmVhdGVkIG1vbml0b3Jpbmcgcm9sZVxuICAgKi9cbiAgcHVibGljIGNyZWF0ZU1vbml0b3JpbmdSb2xlKHdlYmFwcEFjY291bnRJZD86IHN0cmluZyk6IFJvbGUge1xuICAgIGlmICghdGhpcy5kZWZhdWx0TW9uaXRvcmluZ1JvbGUpIHtcbiAgICAgIGNvbnN0IG5ldHdvcmtTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdE5ldHdvcmtTdGFjaygpO1xuICAgICAgY29uc3QgYWNjb3VudElkID1cbiAgICAgICAgd2ViYXBwQWNjb3VudElkIHx8IEZKQUxMX01PTklUT1JJTkdfQ09ORklHLndlYmFwcEF3c0FjY291bnRJZDtcblxuICAgICAgdGhpcy5kZWZhdWx0TW9uaXRvcmluZ1JvbGUgPSBNb25pdG9yaW5nUm9sZUZhY3RvcnkuYnVpbGQoXG4gICAgICAgIGAke3RoaXMubmFtZX1Nb25pdG9yaW5nUm9sZWAsXG4gICAgICAgIHtcbiAgICAgICAgICB3ZWJhcHBBY2NvdW50SWQ6IGFjY291bnRJZCxcbiAgICAgICAgICBhcHBOYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgcm9sZU5hbWVQcmVmaXg6IEZKQUxMX01PTklUT1JJTkdfQ09ORklHLnJvbGVOYW1lUHJlZml4LFxuICAgICAgICAgIHJvbGVQYXRoOiBGSkFMTF9NT05JVE9SSU5HX0NPTkZJRy5yb2xlUGF0aFxuICAgICAgICB9XG4gICAgICApKHRoaXMsIG5ldHdvcmtTdGFjay5nZXRTdGFjaygpKTtcblxuICAgICAgLy8gUmVnaXN0ZXIgdGhlIHJvbGUgd2l0aCB0aGUgbmV0d29yayBzdGFja1xuICAgICAgbmV0d29ya1N0YWNrLmFkZENvbnN0cnVjdCh0aGlzLmRlZmF1bHRNb25pdG9yaW5nUm9sZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVmYXVsdE1vbml0b3JpbmdSb2xlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGNvbXB1dGUgcmVzb3VyY2UgdG8gdGhlIGRlZmF1bHQgY29tcHV0ZSBzdGFjayB1c2luZyB0aGUgZmFjdG9yeSBwYXR0ZXJuLlxuICAgKiBBdXRvbWF0aWNhbGx5IGNyZWF0ZXMgbW9uaXRvcmluZyByb2xlIGlmIG5vdCBhbHJlYWR5IGNyZWF0ZWQuXG4gICAqXG4gICAqIFN1cHBvcnRzIENvbXB1dGVGYWN0b3J5IChFQ1MsIEVDMiwgTGFtYmRhKS5cbiAgICovXG4gIHB1YmxpYyBhZGRDb21wdXRlPFQgZXh0ZW5kcyBDb25zdHJ1Y3Q+KFxuICAgIGZuOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IFRcbiAgKTogVCB7XG4gICAgLy8gQXV0by1jcmVhdGUgbW9uaXRvcmluZyByb2xlIHdoZW4gY29tcHV0ZSBpcyBhZGRlZFxuICAgIGlmICghdGhpcy5kZWZhdWx0TW9uaXRvcmluZ1JvbGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlTW9uaXRvcmluZ1JvbGUoKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb21wdXRlU3RhY2sgPSB0aGlzLmdldERlZmF1bHRDb21wdXRlU3RhY2soKTtcbiAgICBjb25zdCBjb25zdHJ1Y3QgPSBmbih0aGlzLCBjb21wdXRlU3RhY2suZ2V0U3RhY2soKSk7XG4gICAgY29tcHV0ZVN0YWNrLmFkZENvbnN0cnVjdChjb25zdHJ1Y3QpO1xuICAgIHJldHVybiBjb25zdHJ1Y3Q7XG4gIH1cblxuICAvKipcbiAgICogTWFudWFsbHkgYWRkIGEgcmVzb3VyY2UgdG8gdGhlIGRlZmF1bHQgY29tcHV0ZSBzdGFjay5cbiAgICovXG4gIHB1YmxpYyBhZGRDb21wdXRlUmVzb3VyY2UocmVzb3VyY2U6IENvbnN0cnVjdCk6IHZvaWQge1xuICAgIGNvbnN0IGNvbXB1dGVTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdENvbXB1dGVTdGFjaygpO1xuICAgIGNvbXB1dGVTdGFjay5hZGRDb25zdHJ1Y3QocmVzb3VyY2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIGRhdGFiYXNlIHJlc291cmNlIHRvIHRoZSBkZWZhdWx0IGRhdGFiYXNlIHN0YWNrIHVzaW5nIHRoZSBmYWN0b3J5IHBhdHRlcm4uXG4gICAqL1xuICBwdWJsaWMgYWRkRGF0YWJhc2UoZm46IChhcHA6IEFwcCwgc2NvcGU6IENvbnN0cnVjdCkgPT4gQ29uc3RydWN0KTogRGF0YWJhc2Uge1xuICAgIGNvbnN0IGRhdGFiYXNlU3RhY2sgPSB0aGlzLmdldERlZmF1bHREYXRhYmFzZVN0YWNrKCk7XG4gICAgY29uc3QgZGF0YWJhc2VDb25zdHJ1Y3QgPSBmbih0aGlzLCBkYXRhYmFzZVN0YWNrLmdldFN0YWNrKCkpO1xuICAgIGRhdGFiYXNlU3RhY2suYWRkQ29uc3RydWN0KGRhdGFiYXNlQ29uc3RydWN0KTtcblxuICAgIHJldHVybiBkYXRhYmFzZUNvbnN0cnVjdCBhcyB1bmtub3duIGFzIERhdGFiYXNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHN0b3JhZ2UgcmVzb3VyY2UgKFMzKSB0byB0aGUgZGVmYXVsdCBzdG9yYWdlIHN0YWNrIHVzaW5nIHRoZSBmYWN0b3J5IHBhdHRlcm4uXG4gICAqL1xuICBwdWJsaWMgYWRkU3RvcmFnZShmbjogKGFwcDogQXBwLCBzY29wZTogQ29uc3RydWN0KSA9PiBDb25zdHJ1Y3QpOiBDb25zdHJ1Y3Qge1xuICAgIGNvbnN0IHN0b3JhZ2VTdGFjayA9IHRoaXMuZ2V0RGVmYXVsdFN0b3JhZ2VTdGFjaygpO1xuICAgIGNvbnN0IHN0b3JhZ2VDb25zdHJ1Y3QgPSBmbih0aGlzLCBzdG9yYWdlU3RhY2suZ2V0U3RhY2soKSk7XG4gICAgc3RvcmFnZVN0YWNrLmFkZENvbnN0cnVjdChzdG9yYWdlQ29uc3RydWN0KTtcblxuICAgIHJldHVybiBzdG9yYWdlQ29uc3RydWN0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBhZGRpdGlvbmFsIG5ldHdvcmsgKFZQQykgdG8gdGhlIGFwcGxpY2F0aW9uLlxuICAgKlxuICAgKiBVc2UgdGhpcyB0byBjcmVhdGUgYWRkaXRpb25hbCBWUENzIGJleW9uZCB0aGUgZGVmYXVsdCBWUEMgY29uZmlndXJlZCB2aWEgQXBwLmdldEFwcCgpLlxuICAgKiBBZGRpdGlvbmFsIFZQQ3MgY2FuIGJlIHJldHJpZXZlZCBieSBuYW1lIHVzaW5nIGFwcC5nZXRWcGMobmFtZSkuXG4gICAqXG4gICAqIEBwYXJhbSBmbiAtIEZhY3RvcnkgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIHRoZSBOZXR3b3JrIGNvbnN0cnVjdFxuICAgKiBAcmV0dXJucyB7TmV0d29ya30gVGhlIGNyZWF0ZWQgTmV0d29yayBjb25zdHJ1Y3RcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgaXNvbGF0ZWRWcGMgPSBhcHAuYWRkTmV0d29yayhcbiAgICogICBOZXR3b3JrRmFjdG9yeS5idWlsZChcIklzb2xhdGVkVnBjXCIsIHsgbWF4QXpzOiAyLCBuYXRHYXRld2F5czogZmFsc2UgfSlcbiAgICogKTtcbiAgICovXG4gIHB1YmxpYyBhZGROZXR3b3JrKGZuOiAoYXBwOiBBcHAsIHNjb3BlOiBDb25zdHJ1Y3QpID0+IE5ldHdvcmspOiBOZXR3b3JrIHtcbiAgICBjb25zdCBuZXR3b3JrU3RhY2sgPSB0aGlzLmdldERlZmF1bHROZXR3b3JrU3RhY2soKTtcbiAgICBjb25zdCBuZXR3b3JrID0gZm4odGhpcywgbmV0d29ya1N0YWNrLmdldFN0YWNrKCkpO1xuICAgIGNvbnN0IHZwY05hbWUgPSBuZXR3b3JrLm5vZGUuaWQ7XG5cbiAgICAvLyBTdG9yZSBpbiBhZGRpdGlvbmFsIFZQQ3MgbWFwIGZvciByZXRyaWV2YWwgdmlhIGdldFZwYyhuYW1lKVxuICAgIHRoaXMuYWRkaXRpb25hbFZwY3Muc2V0KHZwY05hbWUsIG5ldHdvcmsuZ2V0VnBjKCkpO1xuICAgIG5ldHdvcmtTdGFjay5hZGRDb25zdHJ1Y3QobmV0d29yayk7XG5cbiAgICByZXR1cm4gbmV0d29yaztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW51YWxseSBhZGQgYSByZXNvdXJjZSB0byB0aGUgZGVmYXVsdCBkYXRhYmFzZSBzdGFjay5cbiAgICovXG4gIHB1YmxpYyBhZGREYXRhYmFzZVJlc291cmNlKHJlc291cmNlOiBDb25zdHJ1Y3QpOiB2b2lkIHtcbiAgICBjb25zdCBkYXRhYmFzZVN0YWNrID0gdGhpcy5nZXREZWZhdWx0RGF0YWJhc2VTdGFjaygpO1xuICAgIGRhdGFiYXNlU3RhY2suYWRkQ29uc3RydWN0KHJlc291cmNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW51YWxseSBhZGQgYSByZXNvdXJjZSB0byB0aGUgZGVmYXVsdCBzdG9yYWdlIHN0YWNrLlxuICAgKi9cbiAgcHVibGljIGFkZFN0b3JhZ2VSZXNvdXJjZShyZXNvdXJjZTogQ29uc3RydWN0KTogdm9pZCB7XG4gICAgY29uc3Qgc3RvcmFnZVN0YWNrID0gdGhpcy5nZXREZWZhdWx0U3RvcmFnZVN0YWNrKCk7XG4gICAgc3RvcmFnZVN0YWNrLmFkZENvbnN0cnVjdChyZXNvdXJjZSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBzdGFuZGFyZCB0YWdzXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVTdGFuZGFyZFRhZ3MoKTogdm9pZCB7XG4gICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gICAgdGhpcy5nbG9iYWxUYWdzID0ge1xuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjplbnZpcm9ubWVudFwiOiBjb25maWcuZW52aXJvbm1lbnQsXG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOnNlcnZpY2VcIjogdGhpcy5uYW1lXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhbGwgdGFncyB1c2luZyBDREsncyBuYXRpdmUgVGFncy5vZigpLmFkZCgpIEFQSVxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseVRhZ3NBc3BlY3QoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFzcGVjdEFwcGxpZWQgJiYgT2JqZWN0LmtleXModGhpcy5nbG9iYWxUYWdzKS5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBBcHBseSBzdGFuZGFyZCB0YWdzIHVzaW5nIFRhZ3Mub2YodGhpcykuYWRkKClcbiAgICAgIE9iamVjdC5lbnRyaWVzKHRoaXMuZ2xvYmFsVGFncykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgIFRhZ3Mub2YodGhpcykuYWRkKGtleSwgdmFsdWUpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEFwcGx5IGFzcGVjdCBmb3IgcmVzb3VyY2Utc3BlY2lmaWMgdGFncyAoSVBBTSBwb29sLCBiYWNrdXAgdGllcilcbiAgICAgIEFzcGVjdHMub2YodGhpcykuYWRkKG5ldyBTdGFuZGFyZFRhZ3NBc3BlY3QoKSk7XG5cbiAgICAgIHRoaXMuYXNwZWN0QXBwbGllZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBjdXN0b20gdGFncyB0byBhbGwgcmVzb3VyY2VzIGluIHRoZSBhcHAuXG4gICAqXG4gICAqIEBwYXJhbSB0YWdzIEN1c3RvbSB0YWdzIHRvIGFwcGx5IHRvIGFsbCByZXNvdXJjZXNcbiAgICogQGV4YW1wbGVcbiAgICogYXBwLmFkZFRhZ3Moe1xuICAgKiAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246b3duZXJcIjogXCJwbGF0Zm9ybS10ZWFtXCIsXG4gICAqICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpjb3N0LWNlbnRlclwiOiBcIkNDLTEyM1wiLFxuICAgKiAgIFwidGVhbTpzbGFjay1jaGFubmVsXCI6IFwiI3BsYXRmb3JtLWFsZXJ0c1wiXG4gICAqIH0pO1xuICAgKi9cbiAgcHVibGljIGFkZFRhZ3ModGFnczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IEFwcCB7XG4gICAgLy8gTWVyZ2UgdGFncyBpbnRvIGdsb2JhbFRhZ3MgZm9yIHRyYWNraW5nXG4gICAgdGhpcy5nbG9iYWxUYWdzID0ge1xuICAgICAgLi4udGhpcy5nbG9iYWxUYWdzLFxuICAgICAgLi4udGFnc1xuICAgIH07XG4gICAgT2JqZWN0LmVudHJpZXModGFncykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChrZXksIHZhbHVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFwcDtcbiJdfQ==
@@ -13,7 +13,6 @@ const iam_1 = require("../../resources/aws/iam");
13
13
  const storage_1 = require("../../resources/aws/storage");
14
14
  const secrets_1 = require("../../resources/aws/secrets");
15
15
  const awsCustomResource_1 = require("../../resources/aws/utilities/awsCustomResource");
16
- const tagResource_1 = require("../../utils/tagResource");
17
16
  var agentRelease;
18
17
  (function (agentRelease) {
19
18
  agentRelease["STABLE"] = "stable";
@@ -270,11 +269,9 @@ class Buildkite extends aws_cdk_lib_1.Stack {
270
269
  instanceMetadataTags: true
271
270
  });
272
271
  // Functional tags for buildkite agent identification
273
- (0, tagResource_1.default)(launchTemplate, {
274
- Role: "buildkiteAgent",
275
- BuildkiteAgentRelease: agentRelease.STABLE,
276
- BuildkiteQueue: props.buildkiteQueue
277
- });
272
+ aws_cdk_lib_1.Tags.of(launchTemplate).add("Role", "buildkiteAgent");
273
+ aws_cdk_lib_1.Tags.of(launchTemplate).add("BuildkiteAgentRelease", agentRelease.STABLE);
274
+ aws_cdk_lib_1.Tags.of(launchTemplate).add("BuildkiteQueue", props.buildkiteQueue);
278
275
  // Autoscaling Group
279
276
  const autoScalingGroup = new aws_autoscaling_1.AutoScalingGroup(this, "agentAutoScalingGroup", {
280
277
  vpc: vpc,
@@ -361,4 +358,4 @@ class Buildkite extends aws_cdk_lib_1.Stack {
361
358
  }
362
359
  exports.Buildkite = Buildkite;
363
360
  exports.default = Buildkite;
364
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRraXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9idWlsZGtpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQStEO0FBQy9ELGlEQUs2QjtBQUM3QixpREFZNkI7QUFDN0IsaUVBTXFDO0FBQ3JDLGlEQUFxRDtBQUNyRCxtRUFBa0U7QUFDbEUscUVBQXlFO0FBRXpFLDREQUF5RDtBQUN6RCxpREFBdUQ7QUFDdkQseURBQXVEO0FBQ3ZELHlEQUFvRTtBQUNwRSx1RkFBb0Y7QUFDcEYseURBQWtEO0FBR2xELElBQUssWUFJSjtBQUpELFdBQUssWUFBWTtJQUNmLGlDQUFpQixDQUFBO0lBQ2pCLDZCQUFhLENBQUE7SUFDYiw2QkFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUpJLFlBQVksS0FBWixZQUFZLFFBSWhCO0FBbURZLFFBQUEscUJBQXFCLEdBOEM5QjtJQUNGLGdDQUFnQztJQUNoQyxtQkFBbUIsRUFBRSxTQUFTO0lBQzlCLE9BQU8sRUFBRSxFQUFFO0lBQ1gscUJBQXFCLEVBQUUsWUFBWSxDQUFDLE1BQU07SUFDMUMsa0JBQWtCLEVBQUUsRUFBRTtJQUN0Qiw0QkFBNEIsRUFBRSxLQUFLO0lBQ25DLHlCQUF5QixFQUFFLEVBQUU7SUFDN0IsMkJBQTJCLEVBQUUsT0FBTztJQUNwQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ25CLDRCQUE0QixFQUFFLEVBQUU7SUFDaEMsK0JBQStCLEVBQUUsRUFBRTtJQUNuQyxrQ0FBa0MsRUFBRSxLQUFLO0lBQ3pDLGtDQUFrQyxFQUFFLEVBQUU7SUFDdEMsY0FBYyxFQUFFLFNBQVM7SUFDekIsaUJBQWlCLEVBQUUsQ0FBQztJQUNwQixrQkFBa0IsRUFBRSxFQUFFO0lBQ3RCLGVBQWUsRUFBRSxFQUFFO0lBQ25CLGtCQUFrQixFQUFFLEVBQUU7SUFDdEIsaUJBQWlCO0lBQ2pCLGlCQUFpQixFQUFFLHNCQUFZLENBQUMsRUFBRSxDQUFD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Z0JBQ3BELGVBQWUsRUFBRSxLQUFLLENBQUMscUJBQXFCO2dCQUM1QyxnQkFBZ0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTthQUM5QztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXZZRCw4QkF1WUM7QUFFRCxrQkFBZSxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEdXJhdGlvbiwgdHlwZSBTdGFja1Byb3BzLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgQ29tcG9zaXRlUHJpbmNpcGFsLFxuICBTZXJ2aWNlUHJpbmNpcGFsLFxuICBQb2xpY3lEb2N1bWVudCxcbiAgUG9saWN5U3RhdGVtZW50XG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQge1xuICBCbG9ja0RldmljZVZvbHVtZSxcbiAgSW5zdGFuY2VDbGFzcyxcbiAgSW5zdGFuY2VTaXplLFxuICBJbnN0YW5jZVR5cGUsXG4gIExhdW5jaFRlbXBsYXRlLFxuICBMYXVuY2hUZW1wbGF0ZUh0dHBUb2tlbnMsXG4gIE1hY2hpbmVJbWFnZSxcbiAgTXVsdGlwYXJ0Qm9keSxcbiAgTXVsdGlwYXJ0VXNlckRhdGEsXG4gIFN1Ym5ldFR5cGUsXG4gIFVzZXJEYXRhXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQge1xuICBBdXRvU2NhbGluZ0dyb3VwLFxuICBHcm91cE1ldHJpY3MsXG4gIFNwb3RBbGxvY2F0aW9uU3RyYXRlZ3ksXG4gIFRlcm1pbmF0aW9uUG9saWN5LFxuICBVcGRhdGVQb2xpY3lcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hdXRvc2NhbGluZ1wiO1xuaW1wb3J0IHsgQ2ZuQXBwbGljYXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNhbVwiO1xuaW1wb3J0IHsgUGh5c2ljYWxSZXNvdXJjZUlkIH0gZnJvbSBcImF3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IEJ1Y2tldERlcGxveW1lbnQsIFNvdXJjZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudFwiO1xuaW1wb3J0IHsgdHlwZSBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgVnBjIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvbmV0d29ya2luZy92cGNcIjtcbmltcG9ydCB7IFBvbGljeSwgUm9sZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL2lhbVwiO1xuaW1wb3J0IHsgUzNCdWNrZXQgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zdG9yYWdlXCI7XG5pbXBvcnQgeyBTZWN1cmVTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zZWNyZXRzXCI7XG5pbXBvcnQgeyBBd3NDdXN0b21SZXNvdXJjZSB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3V0aWxpdGllcy9hd3NDdXN0b21SZXNvdXJjZVwiO1xuaW1wb3J0IHRhZ1Jlc291cmNlIGZyb20gXCIuLi8uLi91dGlscy90YWdSZXNvdXJjZVwiO1xuaW1wb3J0IHsgdHlwZSBLZXlWYWx1ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5lbnVtIGFnZW50UmVsZWFzZSB7XG4gIFNUQUJMRSA9IFwic3RhYmxlXCIsXG4gIEJFVEEgPSBcImJldGFcIixcbiAgRURHRSA9IFwiZWRnZVwiXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRraXRlUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgYWNjb3VudElkPzogc3RyaW5nO1xuICBlbGFzdGljU3RhY2tWZXJzaW9uOiBzdHJpbmc7XG4gIGtleU5hbWU6IHN0cmluZztcbiAgYnVpbGRraXRlQWdlbnRSZWxlYXNlOiBhZ2VudFJlbGVhc2U7XG4gIGJ1aWxka2l0ZUFnZW50VGFnczogc3RyaW5nO1xuICBidWlsZGtpdGVBZ2VudFRpbWVzdGFtcExpbmVzOiBib29sZWFuO1xuICBidWlsZGtpdGVBZ2VudEV4cGVyaW1lbnRzOiBzdHJpbmc7XG4gIGJ1aWxka2l0ZUFnZW50U2NhbGVyVmVyc2lvbjogc3RyaW5nO1xuICBsb2dSZXRlbnRpb25EYXlzOiBudW1iZXI7XG4gIGJ1aWxka2l0ZUFnZW50VHJhY2luZ0JhY2tlbmQ6IFwiXCIgfCBcImRhdGFkb2dcIiB8IFwib3BlbnRlbGVtZXRyeVwiO1xuICBidWlsZGtpdGVBZ2VudENhbmNlbEdyYWNlUGVyaW9kOiBudW1iZXI7XG4gIGJ1aWxka2l0ZVRlcm1pbmF0ZUluc3RhbmNlQWZ0ZXJKb2I6IGJvb2xlYW47XG4gIGJ1aWxka2l0ZUFkZGl0aW9uYWxTdWRvUGVybWlzc2lvbnM6IHN0cmluZztcbiAgYnVpbGRraXRlUXVldWU6IHN0cmluZztcbiAgYWdlbnRzUGVySW5zdGFuY2U6IG51bWJlcjtcbiAgYm9vdHN0cmFwU2NyaXB0VXJsOiBzdHJpbmc7XG4gIGFnZW50RW52RmlsZVVybDogc3RyaW5nO1xuICBhdXRob3JpemVkVXNlcnNVcmw6IHN0cmluZztcbiAgLy8gSW5mcmFzdHJ1Y3R1cmVcbiAgYWdlbnRJbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZTtcbiAgYWdlbnRWb2x1bWVTaXplOiBudW1iZXI7XG4gIGFnZW50TWluSW5zdGFuY2VzOiBudW1iZXI7XG4gIGFnZW50TWF4SW5zdGFuY2VzOiBudW1iZXI7XG4gIHNjYWxlckV2ZW50U2NoZWR1bGVQZXJpb2Q6IHN0cmluZztcbiAgc2NhbGVyTWluUG9sbEludGVydmFsOiBzdHJpbmc7XG4gIHNwb3RDYXBhY2l0eVBlcmNlbnRhZ2U6IG51bWJlcjtcbiAgc2NhbGVPdXRGYWN0b3I6IHN0cmluZztcbiAgZWNyQWNjZXNzUG9saWN5OiBzdHJpbmc7XG4gIHNjYWxlSW5JZGxlUGVyaW9kOiBudW1iZXI7XG4gIHNjYWxlT3V0V2FpdGluZ0ZvckpvYnM6IGJvb2xlYW47XG4gIGRvY2tlck5ldHdvcmtpbmdQcm90b2NvbDogXCJpcHY0XCIgfCBcImR1YWxzdGFja1wiO1xuICBlbmFibGVTZWNyZXRzUGx1Z2luOiBib29sZWFuO1xuICBlbmFibGVFY3JQbHVnaW46IGJvb2xlYW47XG4gIGVuYWJsZURvY2tlckxvZ2luUGx1Z2luOiBib29sZWFuO1xuICBlbmFibGVEb2NrZXJVc2VyTmFtZXNwYWNlUmVtYXA6IGJvb2xlYW47XG4gIGVuYWJsZURvY2tlckV4cGVyaW1lbnRhbDogYm9vbGVhbjtcbiAgZW5hYmxlSW5zdGFuY2VTdG9yYWdlOiBib29sZWFuO1xuICBtb3VudFRtcGZzQXRUbXA6IGJvb2xlYW47XG4gIGJ1aWxka2l0ZUFnZW50RW5hYmxlR2l0TWlycm9yczogYm9vbGVhbjtcbiAgcGlwZWxpbmVTaWduaW5nS01TS2V5OiBzdHJpbmc7XG4gIHBpcGVsaW5lU2lnbmluZ1ZlcmlmaWNhdGlvbkZhaWx1cmVCZWhhdmlvcjogXCJibG9ja1wiIHwgXCJ3YXJuXCI7XG4gIC8vIFRhZ3NcbiAgLy8gVE9ETzogTW92ZSB0aGVzZSBpbnRvIGEgc2luZ2xlIHRhZ3Mgb2JqZWN0XG4gIHRhZ3M6IEtleVZhbHVlO1xuICBlbnZpcm9ubWVudDogc3RyaW5nO1xuICBvd25lcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IEJ1aWxka2l0ZURlZmF1bHRQcm9wczogUGljazxcbiAgQnVpbGRraXRlUHJvcHMsXG4gIC8vIEJ1aWxka2l0ZSBBZ2VudCBDb25maWd1cmF0aW9uXG4gIHwgXCJlbGFzdGljU3RhY2tWZXJzaW9uXCJcbiAgfCBcImtleU5hbWVcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRSZWxlYXNlXCJcbiAgfCBcImJ1aWxka2l0ZUFnZW50VGFnc1wiXG4gIHwgXCJidWlsZGtpdGVBZ2VudFRpbWVzdGFtcExpbmVzXCJcbiAgfCBcImJ1aWxka2l0ZUFnZW50RXhwZXJpbWVudHNcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRTY2FsZXJWZXJzaW9uXCJcbiAgfCBcImxvZ1JldGVudGlvbkRheXNcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRUcmFjaW5nQmFja2VuZFwiXG4gIHwgXCJidWlsZGtpdGVBZ2VudENhbmNlbEdyYWNlUGVyaW9kXCJcbiAgfCBcImJ1aWxka2l0ZVRlcm1pbmF0ZUluc3RhbmNlQWZ0ZXJKb2JcIlxuICB8IFwiYnVpbGRraXRlQWRkaXRpb25hbFN1ZG9QZXJtaXNzaW9uc1wiXG4gIHwgXCJidWlsZGtpdGVRdWV1ZVwiXG4gIHwgXCJhZ2VudHNQZXJJbnN0YW5jZVwiXG4gIHwgXCJib290c3RyYXBTY3JpcHRVcmxcIlxuICB8IFwiYWdlbnRFbnZGaWxlVXJsXCJcbiAgfCBcImF1dGhvcml6ZWRVc2Vyc1VybFwiXG4gIC8vIEluZnJhc3RydWN0dXJlXG4gIHwgXCJhZ2VudEluc3RhbmNlVHlwZVwiXG4gIHwgXCJhZ2VudFZvbHVtZVNpemVcIlxuICB8IFwiYWdlbnRNaW5JbnN0YW5jZXNcIlxuICB8IFwiYWdlbnRNYXhJbnN0YW5jZXNcIlxuICB8IFwic2NhbGVyRXZlbnRTY2hlZHVsZVBlcmlvZFwiXG4gIHwgXCJzY2FsZXJNaW5Qb2xsSW50ZXJ2YWxcIlxuICB8IFwic3BvdENhcGFjaXR5UGVyY2VudGFnZVwiXG4gIHwgXCJzY2FsZU91dEZhY3RvclwiXG4gIHwgXCJzY2FsZUluSWRsZVBlcmlvZFwiXG4gIHwgXCJzY2FsZU91dFdhaXRpbmdGb3JKb2JzXCJcbiAgfCBcImVjckFjY2Vzc1BvbGljeVwiXG4gIHwgXCJkb2NrZXJOZXR3b3JraW5nUHJvdG9jb2xcIlxuICB8IFwiZW5hYmxlU2VjcmV0c1BsdWdpblwiXG4gIHwgXCJlbmFibGVFY3JQbHVnaW5cIlxuICB8IFwiZW5hYmxlRG9ja2VyTG9naW5QbHVnaW5cIlxuICB8IFwiZW5hYmxlRG9ja2VyVXNlck5hbWVzcGFjZVJlbWFwXCJcbiAgfCBcImVuYWJsZURvY2tlckV4cGVyaW1lbnRhbFwiXG4gIHwgXCJlbmFibGVJbnN0YW5jZVN0b3JhZ2VcIlxuICB8IFwibW91bnRUbXBmc0F0VG1wXCJcbiAgfCBcImJ1aWxka2l0ZUFnZW50RW5hYmxlR2l0TWlycm9yc1wiXG4gIHwgXCJwaXBlbGluZVNpZ25pbmdLTVNLZXlcIlxuICB8IFwicGlwZWxpbmVTaWduaW5nVmVyaWZpY2F0aW9uRmFpbHVyZUJlaGF2aW9yXCJcbiAgLy8gVGFnc1xuICB8IFwiZW52aXJvbm1lbnRcIlxuICB8IFwib3duZXJcIlxuPiA9IHtcbiAgLy8gQnVpbGRraXRlIEFnZW50IENvbmZpZ3VyYXRpb25cbiAgZWxhc3RpY1N0YWNrVmVyc2lvbjogXCJ2Ni4zMC4wXCIsXG4gIGtleU5hbWU6IFwiXCIsXG4gIGJ1aWxka2l0ZUFnZW50UmVsZWFzZTogYWdlbnRSZWxlYXNlLlNUQUJMRSxcbiAgYnVpbGRraXRlQWdlbnRUYWdzOiBcIlwiLFxuICBidWlsZGtpdGVBZ2VudFRpbWVzdGFtcExpbmVzOiBmYWxzZSxcbiAgYnVpbGRraXRlQWdlbnRFeHBlcmltZW50czogXCJcIixcbiAgYnVpbGRraXRlQWdlbnRTY2FsZXJWZXJzaW9uOiBcIjEuOC4wXCIsXG4gIGxvZ1JldGVudGlvbkRheXM6IDEsXG4gIGJ1aWxka2l0ZUFnZW50VHJhY2luZ0JhY2tlbmQ6IFwiXCIsXG4gIGJ1aWxka2l0ZUFnZW50Q2FuY2VsR3JhY2VQZXJpb2Q6IDYwLFxuICBidWlsZGtpdGVUZXJtaW5hdGVJbnN0YW5jZUFmdGVySm9iOiBmYWxzZSxcbiAgYnVpbGRraXRlQWRkaXRpb25hbFN1ZG9QZXJtaXNzaW9uczogXCJcIixcbiAgYnVpbGRraXRlUXVldWU6IFwiZGVmYXVsdFwiLFxuICBhZ2VudHNQZXJJbnN0YW5jZTogMSxcbiAgYm9vdHN0cmFwU2NyaXB0VXJsOiBcIlwiLFxuICBhZ2VudEVudkZpbGVVcmw6IFwiXCIsXG4gIGF1dGhvcml6ZWRVc2Vyc1VybDogXCJcIixcbiAgLy8gSW5mcmFzdHJ1Y3R1cmVcbiAgYWdlbnRJbnN0YW5jZVR5cGU6IEluc3RhbmNlVHlwZS5vZihJbnN0YW5jZUNsYXNzLk01LCBJbnN0YW5jZVNpemUuTEFSR0UpLFxuICBhZ2VudE1pbkluc3RhbmNlczogMCxcbiAgYWdlbnRNYXhJbnN0YW5jZXM6IDEwLFxuICBhZ2VudFZvbHVtZVNpemU6IDI1MCxcbiAgc2NhbGVyRXZlbnRTY2hlZHVsZVBlcmlvZDogXCIxIG1pbnV0ZVwiLFxuICBzY2FsZXJNaW5Qb2xsSW50ZXJ2YWw6IFwiMTBzXCIsXG4gIHNwb3RDYXBhY2l0eVBlcmNlbnRhZ2U6IDc1LFxuICBzY2FsZU91dEZhY3RvcjogXCIxLjBcIixcbiAgc2NhbGVJbklkbGVQZXJpb2Q6IDYwMCxcbiAgc2NhbGVPdXRXYWl0aW5nRm9ySm9iczogZmFsc2UsXG4gIGVjckFjY2Vzc1BvbGljeTogXCJcIixcbiAgZG9ja2VyTmV0d29ya2luZ1Byb3RvY29sOiBcImlwdjRcIixcbiAgZW5hYmxlU2VjcmV0c1BsdWdpbjogdHJ1ZSxcbiAgZW5hYmxlRWNyUGx1Z2luOiB0cnVlLFxuICBlbmFibGVEb2NrZXJMb2dpblBsdWdpbjogdHJ1ZSxcbiAgZW5hYmxlRG9ja2VyVXNlck5hbWVzcGFjZVJlbWFwOiB0cnVlLFxuICBlbmFibGVEb2NrZXJFeHBlcmltZW50YWw6IGZhbHNlLFxuICBlbmFibGVJbnN0YW5jZVN0b3JhZ2U6IGZhbHNlLFxuICBtb3VudFRtcGZzQXRUbXA6IHRydWUsXG4gIGJ1aWxka2l0ZUFnZW50RW5hYmxlR2l0TWlycm9yczogZmFsc2UsXG4gIHBpcGVsaW5lU2lnbmluZ0tNU0tleTogXCJcIixcbiAgcGlwZWxpbmVTaWduaW5nVmVyaWZpY2F0aW9uRmFpbHVyZUJlaGF2aW9yOiBcImJsb2NrXCIsXG4gIC8vIFRhZ3NcbiAgZW52aXJvbm1lbnQ6IFwicGxhdGZvcm1cIixcbiAgb3duZXI6IFwiZW5naW5lZXJcIlxufTtcblxuZXhwb3J0IGNsYXNzIEJ1aWxka2l0ZSBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEJ1aWxka2l0ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICAvLyBUT0RPOiBNYWtlIHRoaXMgaW1tdXRhYmxlIGFuZCBlbmZvcmNlIHRoZSB0YWdzIGJlaW5nIHNldFxuICAgIGNvbnN0IHRhZ3MgPSB7XG4gICAgICAuLi5wcm9wcy50YWdzLFxuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjplbnZpcm9ubWVudFwiOiBwcm9wcy5lbnZpcm9ubWVudCB8fCBcInBsYXRmb3JtXCIsXG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOnNlcnZpY2VcIjogXCJidWlsZGtpdGVcIixcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246b3duZXJcIjogcHJvcHMub3duZXIgfHwgXCJlbmdpbmVlclwiIC8vIFRPRE86IHRoaXMgd2lsbCBoYXZlIHRvIGJlIHRoZSBwbGF0Zm9ybSBhY2NvdW50IG5hbWU/XG4gICAgfTtcblxuICAgIC8vIFZQQ1xuICAgIGNvbnN0IHZwYyA9IG5ldyBWcGModGhpcywgXCJidWlsZGtpdGVcIiwge1xuICAgICAgYWNjb3VudElkOiBwcm9wcy5hY2NvdW50SWQsXG4gICAgICBzdWJuZXRDb25maWd1cmF0aW9uOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBgJHtpZH1gLFxuICAgICAgICAgIHN1Ym5ldFR5cGU6IFN1Ym5ldFR5cGUuUFVCTElDXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcblxuICAgIC8vIEFydGlmYWN0cyBCdWNrZXRcbiAgICBjb25zdCBhcnRpZmFjdEJ1Y2tldCA9IG5ldyBTM0J1Y2tldCh0aGlzLCBcImFydGlmYWN0QnVja2V0XCIpO1xuXG4gICAgLy8gTWFuYWdlZCBTZWNyZXRzXG4gICAgY29uc3QgbWFuYWdlZFNlY3JldHNCdWNrZXQgPSBuZXcgUzNCdWNrZXQodGhpcywgXCJtYW5hZ2VkU2VjcmV0c0J1Y2tldFwiKTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuQlVJTERLSVRFX1BSSVZBVEVfU1NIX0tFWSkge1xuICAgICAgbmV3IEJ1Y2tldERlcGxveW1lbnQodGhpcywgXCJidWlsZGtpdGVTc2hLZXlcIiwge1xuICAgICAgICBzb3VyY2VzOiBbXG4gICAgICAgICAgU291cmNlLmRhdGEoXCJwcml2YXRlX3NzaF9rZXlcIiwgcHJvY2Vzcy5lbnYuQlVJTERLSVRFX1BSSVZBVEVfU1NIX0tFWSlcbiAgICAgICAgXSxcbiAgICAgICAgZGVzdGluYXRpb25CdWNrZXQ6IG1hbmFnZWRTZWNyZXRzQnVja2V0XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIldBUk46J0JVSUxES0lURV9QUklWQVRFX1NTSF9LRVknIGVudmlyb25tZW50IHZhcmlhYmxlIG5vdCBkZWNsYXJlZC4gU2tpcHBpbmcgdXBsb2FkIG9mIHByaXZhdGUgU1NIIGtleVwiXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEVuY3J5cHRlZCBCdWlsZGtpdGUgQWdlbnQgVG9rZW5cbiAgICBjb25zdCBhZ2VudFRva2VuID0gbmV3IFNlY3VyZVN0cmluZ1BhcmFtZXRlcih0aGlzLCBcImFnZW50VG9rZW5cIiwge1xuICAgICAgbmFtZTogYC9idWlsZGtpdGUvYWdlbnRUb2tlbmAsXG4gICAgICBhbGlhc05hbWU6IGBidWlsZGtpdGVBZ2VudFRva2VuYCxcbiAgICAgIHZhbHVlOiBwcm9jZXNzLmVudi5CVUlMREtJVEVfQUdFTlRfVE9LRU4sXG4gICAgICBvdmVyd3JpdGU6IHByb2Nlc3MuZW52LkJVSUxES0lURV9BR0VOVF9UT0tFTiA/IHRydWUgOiBmYWxzZSxcbiAgICAgIHRhZ3M6IHRhZ3MsXG4gICAgICBhY2NvdW50SWQ6IHRoaXMuYWNjb3VudCxcbiAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb25cbiAgICB9KTtcblxuICAgIC8vIEJ1aWxka2l0ZSBBZ2VudCBFeGVjdXRpb24gUm9sZVxuICAgIGNvbnN0IGFnZW50Um9sZSA9IG5ldyBSb2xlKHRoaXMsIFwiYWdlbnRJYW1Sb2xlXCIsIHtcbiAgICAgIHJvbGVOYW1lOiBgJHtpZH1BZ2VudFJvbGVgLFxuICAgICAgZGVzY3JpcHRpb246IFwiQnVpbGRraXRlIEFnZW50IElBTSBSb2xlXCIsXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBbXCJkZWNyeXB0QnVpbGRraXRlQWdlbnRUb2tlblwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1wia21zOkRlY3J5cHRcIl0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW2FnZW50VG9rZW4uY21rLmtleS5rZXlBcm5dXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcInJlYWRCdWlsZGtpdGVBZ2VudFRva2VuXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXCJzc206R2V0UGFyYW1ldGVyXCJdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgICAgICBgYXJuOmF3czpzc206JHtwcm9wcy5lbnY/LnJlZ2lvbn06JHtwcm9wcy5lbnY/LmFjY291bnR9OnBhcmFtZXRlciR7YWdlbnRUb2tlbi5uYW1lfWBcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgICBbXCJyZWFkTWFuYWdlZFNlY3JldHNCdWNrZXRcIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcInMzOkdldCpcIiwgXCJzMzpMaXN0KlwiXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgbWFuYWdlZFNlY3JldHNCdWNrZXQuYnVja2V0QXJuLFxuICAgICAgICAgICAgICAgIGAke21hbmFnZWRTZWNyZXRzQnVja2V0LmJ1Y2tldEFybn0vKmBcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgICBbXCJ3cml0ZUFydGlmYWN0QnVja2V0XCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgXCJzMzpHZXRPYmplY3RcIixcbiAgICAgICAgICAgICAgICBcInMzOkdldE9iamVjdEFjbFwiLFxuICAgICAgICAgICAgICAgIFwiczM6R2V0T2JqZWN0VmVyc2lvblwiLFxuICAgICAgICAgICAgICAgIFwiczM6R2V0T2JqZWN0VmVyc2lvbkFjbFwiLFxuICAgICAgICAgICAgICAgIFwiczM6TGlzdEJ1Y2tldFwiLFxuICAgICAgICAgICAgICAgIFwiczM6UHV0T2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgXCJzMzpQdXRPYmplY3RBY2xcIixcbiAgICAgICAgICAgICAgICBcInMzOlB1dE9iamVjdFZlcnNpb25BY2xcIlxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgICAgICBhcnRpZmFjdEJ1Y2tldC5idWNrZXRBcm4sXG4gICAgICAgICAgICAgICAgYCR7YXJ0aWZhY3RCdWNrZXQuYnVja2V0QXJufS8qYFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcImRlc2NyaWJlSW5zdGFuY2VcIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICBcImF1dG9zY2FsaW5nOkRlc2NyaWJlQXV0b1NjYWxpbmdJbnN0YW5jZXNcIixcbiAgICAgICAgICAgICAgICBcImNsb3Vkd2F0Y2g6UHV0TWV0cmljRGF0YVwiLFxuICAgICAgICAgICAgICAgIFwiY2xvdWRmb3JtYXRpb246RGVzY3JpYmVTdGFja1Jlc291cmNlXCIsXG4gICAgICAgICAgICAgICAgXCJlYzI6RGVzY3JpYmVUYWdzXCJcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcImxvZ2dpbmdcIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICBcImxvZ3M6Q3JlYXRlTG9nR3JvdXBcIixcbiAgICAgICAgICAgICAgICBcImxvZ3M6Q3JlYXRlTG9nU3RyZWFtXCIsXG4gICAgICAgICAgICAgICAgXCJsb2dzOlB1dExvZ0V2ZW50c1wiLFxuICAgICAgICAgICAgICAgIFwibG9nczpEZXNjcmliZUxvZ0dyb3Vwc1wiLFxuICAgICAgICAgICAgICAgIFwibG9nczpEZXNjcmliZUxvZ1N0cmVhbXNcIlxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wic3NtXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgXCJzc206RGVzY3JpYmVJbnN0YW5jZVByb3BlcnRpZXNcIixcbiAgICAgICAgICAgICAgICBcInNzbTpMaXN0QXNzb2NpYXRpb25zXCIsXG4gICAgICAgICAgICAgICAgXCJzc206UHV0SW52ZW50b3J5XCIsXG4gICAgICAgICAgICAgICAgXCJzc206VXBkYXRlSW5zdGFuY2VJbmZvcm1hdGlvblwiLFxuICAgICAgICAgICAgICAgIFwic3NtbWVzc2FnZXM6Q3JlYXRlQ29udHJvbENoYW5uZWxcIixcbiAgICAgICAgICAgICAgICBcInNzbW1lc3NhZ2VzOkNyZWF0ZURhdGFDaGFubmVsXCIsXG4gICAgICAgICAgICAgICAgXCJzc21tZXNzYWdlczpPcGVuQ29udHJvbENoYW5uZWxcIixcbiAgICAgICAgICAgICAgICBcInNzbW1lc3NhZ2VzOk9wZW5EYXRhQ2hhbm5lbFwiLFxuICAgICAgICAgICAgICAgIFwiZWMybWVzc2FnZXM6QWNrbm93bGVkZ2VNZXNzYWdlXCIsXG4gICAgICAgICAgICAgICAgXCJlYzJtZXNzYWdlczpEZWxldGVNZXNzYWdlXCIsXG4gICAgICAgICAgICAgICAgXCJlYzJtZXNzYWdlczpGYWlsTWVzc2FnZVwiLFxuICAgICAgICAgICAgICAgIFwiZWMybWVzc2FnZXM6R2V0RW5kcG9pbnRcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOkdldE1lc3NhZ2VzXCIsXG4gICAgICAgICAgICAgICAgXCJlYzJtZXNzYWdlczpTZW5kUmVwbHlcIlxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KVxuICAgICAgfSxcbiAgICAgIGFzc3VtZWRCeTogbmV3IENvbXBvc2l0ZVByaW5jaXBhbChcbiAgICAgICAgbmV3IFNlcnZpY2VQcmluY2lwYWwoXCJhdXRvc2NhbGluZy5hbWF6b25hd3MuY29tXCIpLFxuICAgICAgICBuZXcgU2VydmljZVByaW5jaXBhbChcImVjMi5hbWF6b25hd3MuY29tXCIpXG4gICAgICApXG4gICAgfSk7XG5cbiAgICAvLyBCdWlsZGtpdGUgQWdlbnQgRUMyIFVzZXIgRGF0YVxuICAgIGNvbnN0IG11bHRpcGFydFVzZXJEYXRhID0gbmV3IE11bHRpcGFydFVzZXJEYXRhKCk7XG5cbiAgICAvLyBDbG91ZCBDb25maWdcbiAgICBjb25zdCBjbG91ZENvbmZpZ1VzZXJEYXRhID0gVXNlckRhdGEuZm9yTGludXgoe1xuICAgICAgc2hlYmFuZzogXCIjY2xvdWQtY29uZmlnXCJcbiAgICB9KTtcbiAgICBjbG91ZENvbmZpZ1VzZXJEYXRhLmFkZENvbW1hbmRzKFxuICAgICAgXCJjbG91ZF9maW5hbF9tb2R1bGVzOlwiLFxuICAgICAgXCIgIC0gW3NjcmlwdHMtdXNlciwgYWx3YXlzXVwiXG4gICAgKTtcbiAgICBtdWx0aXBhcnRVc2VyRGF0YS5hZGRQYXJ0KFxuICAgICAgTXVsdGlwYXJ0Qm9keS5mcm9tVXNlckRhdGEoXG4gICAgICAgIGNsb3VkQ29uZmlnVXNlckRhdGEsXG4gICAgICAgIFwidGV4dC9jbG91ZC1jb25maWc7IGNoYXJzZXQ9J3VzLWFzY2lpJ1wiXG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIE1vdW50IFN0b3JhZ2VcbiAgICBjb25zdCBtb3VudFN0b3JhZ2VVc2VyRGF0YSA9IFVzZXJEYXRhLmZvckxpbnV4KHtcbiAgICAgIHNoZWJhbmc6IFwiIyEvYmluL2Jhc2ggLXZcIlxuICAgIH0pO1xuICAgIG1vdW50U3RvcmFnZVVzZXJEYXRhLmFkZENvbW1hbmRzKFxuICAgICAgYEJVSUxES0lURV9FTkFCTEVfSU5TVEFOQ0VfU1RPUkFHRT0nJHtwcm9wcy5lbmFibGVJbnN0YW5jZVN0b3JhZ2V9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfTU9VTlRfVE1QRlNfQVRfVE1QPScke3Byb3BzLm1vdW50VG1wZnNBdFRtcH0nIFxcXFxgLFxuICAgICAgXCIvdXNyL2xvY2FsL2Jpbi9iay1tb3VudC1pbnN0YW5jZS1zdG9yYWdlLnNoXCJcbiAgICApO1xuICAgIG11bHRpcGFydFVzZXJEYXRhLmFkZFBhcnQoXG4gICAgICBNdWx0aXBhcnRCb2R5LmZyb21Vc2VyRGF0YShcbiAgICAgICAgbW91bnRTdG9yYWdlVXNlckRhdGEsXG4gICAgICAgIFwidGV4dC94LXNoZWxsc2NyaXB0OyBjaGFyc2V0PSd1cy1hc2NpaSdcIlxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBDb25maWd1cmUgRG9ja2VyXG4gICAgY29uc3QgY29uZmlndXJlRG9ja2VyVXNlckRhdGEgPSBVc2VyRGF0YS5mb3JMaW51eCh7XG4gICAgICBzaGViYW5nOiBcIiMhL2Jpbi9iYXNoIC12XCJcbiAgICB9KTtcbiAgICBjb25maWd1cmVEb2NrZXJVc2VyRGF0YS5hZGRDb21tYW5kcyhcbiAgICAgIGBET0NLRVJfVVNFUk5TX1JFTUFQPScke3Byb3BzLmVuYWJsZURvY2tlclVzZXJOYW1lc3BhY2VSZW1hcH0nIFxcXFxgLFxuICAgICAgYERPQ0tFUl9FWFBFUklNRU5UQUw9JyR7cHJvcHMuZW5hYmxlRG9ja2VyRXhwZXJpbWVudGFsfScgXFxcXGAsXG4gICAgICBgRE9DS0VSX05FVFdPUktJTkdfUFJPVE9DT0w9JyR7cHJvcHMuZG9ja2VyTmV0d29ya2luZ1Byb3RvY29sfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0VOQUJMRV9JTlNUQU5DRV9TVE9SQUdFPScke3Byb3BzLmVuYWJsZUluc3RhbmNlU3RvcmFnZX0nIFxcXFxgLFxuICAgICAgXCIvdXNyL2xvY2FsL2Jpbi9iay1jb25maWd1cmUtZG9ja2VyLnNoXCJcbiAgICApO1xuICAgIG11bHRpcGFydFVzZXJEYXRhLmFkZFBhcnQoXG4gICAgICBNdWx0aXBhcnRCb2R5LmZyb21Vc2VyRGF0YShcbiAgICAgICAgY29uZmlndXJlRG9ja2VyVXNlckRhdGEsXG4gICAgICAgIFwidGV4dC94LXNoZWxsc2NyaXB0OyBjaGFyc2V0PSd1cy1hc2NpaSdcIlxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBpbnN0YWxsRWxhc3RpY1N0YWNrVXNlckRhdGEgPSBVc2VyRGF0YS5mb3JMaW51eCh7XG4gICAgICBzaGViYW5nOiBcIiMhL2Jpbi9iYXNoIC12XCJcbiAgICB9KTtcbiAgICBpbnN0YWxsRWxhc3RpY1N0YWNrVXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICBgQlVJTERLSVRFX1NUQUNLX05BTUU9JyR7aWR9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfU1RBQ0tfVkVSU0lPTj0nJHtwcm9wcy5lbGFzdGljU3RhY2tWZXJzaW9ufScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX1NDQUxFX0lOX0lETEVfUEVSSU9EPScke3Byb3BzLnNjYWxlSW5JZGxlUGVyaW9kfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX1NFQ1JFVFNfQlVDS0VUPScke21hbmFnZWRTZWNyZXRzQnVja2V0LmJ1Y2tldE5hbWV9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfU0VDUkVUU19CVUNLRVRfUkVHSU9OPScke3Byb3BzLmVudj8ucmVnaW9ufScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1RPS0VOX1BBVEg9JyR7YWdlbnRUb2tlbi5uYW1lfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UU19QRVJfSU5TVEFOQ0U9JyR7cHJvcHMuYWdlbnRzUGVySW5zdGFuY2V9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfVEFHUz0nJHtwcm9wcy5idWlsZGtpdGVBZ2VudFRhZ3N9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfVElNRVNUQU1QX0xJTkVTPScke3Byb3BzLmJ1aWxka2l0ZUFnZW50VGltZXN0YW1wTGluZXN9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfRVhQRVJJTUVOVFM9JyR7cHJvcHMuYnVpbGRraXRlQWdlbnRFeHBlcmltZW50c30nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9UUkFDSU5HX0JBQ0tFTkQ9JyR7cHJvcHMuYnVpbGRraXRlQWdlbnRUcmFjaW5nQmFja2VuZH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9SRUxFQVNFPScke3Byb3BzLmJ1aWxka2l0ZUFnZW50UmVsZWFzZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9DQU5DRUxfR1JBQ0VfUEVSSU9EPScke3Byb3BzLmJ1aWxka2l0ZUFnZW50Q2FuY2VsR3JhY2VQZXJpb2R9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfU0lHTklOR19LTVNfS0VZPScke3Byb3BzLnBpcGVsaW5lU2lnbmluZ0tNU0tleX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9TSUdOSU5HX0ZBSUxVUkVfQkVIQVZJT1I9JyR7cHJvcHMucGlwZWxpbmVTaWduaW5nVmVyaWZpY2F0aW9uRmFpbHVyZUJlaGF2aW9yfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX1FVRVVFPScke3Byb3BzLmJ1aWxka2l0ZVF1ZXVlfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX0VOQUJMRV9HSVRfTUlSUk9SUz0nJHtwcm9wcy5idWlsZGtpdGVBZ2VudEVuYWJsZUdpdE1pcnJvcnN9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfRUxBU1RJQ19CT09UU1RSQVBfU0NSSVBUPScke3Byb3BzLmJvb3RzdHJhcFNjcmlwdFVybH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9FTlZfRklMRV9VUkw9JyR7cHJvcHMuYWdlbnRFbnZGaWxlVXJsfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0VOQUJMRV9JTlNUQU5DRV9TVE9SQUdFPScke3Byb3BzLmVuYWJsZUluc3RhbmNlU3RvcmFnZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BVVRIT1JJWkVEX1VTRVJTX1VSTD0nJHtwcm9wcy5hdXRob3JpemVkVXNlcnNVcmx9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfRUNSX1BPTElDWT0nJHtwcm9wcy5lY3JBY2Nlc3NQb2xpY3l9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfVEVSTUlOQVRFX0lOU1RBTkNFX0FGVEVSX0pPQj0nJHtwcm9wcy5idWlsZGtpdGVUZXJtaW5hdGVJbnN0YW5jZUFmdGVySm9ifScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FERElUSU9OQUxfU1VET19QRVJNSVNTSU9OUz0nJHtwcm9wcy5idWlsZGtpdGVBZGRpdGlvbmFsU3Vkb1Blcm1pc3Npb25zfScgXFxcXGAsXG4gICAgICBgQVdTX0RFRkFVTFRfUkVHSU9OPScke3Byb3BzLmVudj8ucmVnaW9ufScgXFxcXGAsXG4gICAgICBgU0VDUkVUU19QTFVHSU5fRU5BQkxFRD0nJHtwcm9wcy5lbmFibGVTZWNyZXRzUGx1Z2lufScgXFxcXGAsXG4gICAgICBgRUNSX1BMVUdJTl9FTkFCTEVEPScke3Byb3BzLmVuYWJsZUVjclBsdWdpbn0nIFxcXFxgLFxuICAgICAgYERPQ0tFUl9MT0dJTl9QTFVHSU5fRU5BQkxFRD0nJHtwcm9wcy5lbmFibGVEb2NrZXJMb2dpblBsdWdpbn0nIFxcXFxgLFxuICAgICAgYERPQ0tFUl9FWFBFUklNRU5UQUw9JyR7cHJvcHMuZW5hYmxlRG9ja2VyRXhwZXJpbWVudGFsfScgXFxcXGAsXG4gICAgICBgRE9DS0VSX1VTRVJOU19SRU1BUD0nJHtwcm9wcy5lbmFibGVEb2NrZXJVc2VyTmFtZXNwYWNlUmVtYXB9JyBcXFxcYCxcbiAgICAgIGBBV1NfUkVHSU9OPScke3Byb3BzLmVudj8ucmVnaW9ufScgXFxcXGAsXG4gICAgICBcIi91c3IvbG9jYWwvYmluL2JrLWluc3RhbGwtZWxhc3RpYy1zdGFjay5zaFwiXG4gICAgKTtcblxuICAgIC8vIE1lcmdlIFVzZXIgRGF0YVxuICAgIG11bHRpcGFydFVzZXJEYXRhLmFkZFBhcnQoXG4gICAgICBNdWx0aXBhcnRCb2R5LmZyb21Vc2VyRGF0YShcbiAgICAgICAgaW5zdGFsbEVsYXN0aWNTdGFja1VzZXJEYXRhLFxuICAgICAgICBcInRleHQveC1zaGVsbHNjcmlwdDsgY2hhcnNldD0ndXMtYXNjaWknXCJcbiAgICAgIClcbiAgICApO1xuXG4gICAgLy8gTGF1bmNoIFRlbXBsYXRlXG4gICAgY29uc3QgbGF1bmNoVGVtcGxhdGUgPSBuZXcgTGF1bmNoVGVtcGxhdGUodGhpcywgXCJhZ2VudExhdW5jaFRlbXBsYXRlXCIsIHtcbiAgICAgIGxhdW5jaFRlbXBsYXRlTmFtZTogYGJ1aWxka2l0ZUxhdW5jaFRlbXBsYXRlYCxcbiAgICAgIGluc3RhbmNlVHlwZTogcHJvcHMuYWdlbnRJbnN0YW5jZVR5cGUsXG4gICAgICBtYWNoaW5lSW1hZ2U6IE1hY2hpbmVJbWFnZS5sb29rdXAoe1xuICAgICAgICBuYW1lOiBcImJ1aWxka2l0ZS1zdGFjay1saW51eC14ODZfNjQtKlwiLFxuICAgICAgICBvd25lcnM6IFtcIjE3Mjg0MDA2NDgzMlwiXSxcbiAgICAgICAgZmlsdGVyczoge1xuICAgICAgICAgIFtcImJsb2NrLWRldmljZS1tYXBwaW5nLnZvbHVtZS10eXBlXCJdOiBbXCJncDNcIl1cbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICB1c2VyRGF0YTogbXVsdGlwYXJ0VXNlckRhdGEsXG4gICAgICByb2xlOiBhZ2VudFJvbGUsXG4gICAgICBibG9ja0RldmljZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGRldmljZU5hbWU6IFwiL2Rldi94dmRhXCIsXG4gICAgICAgICAgdm9sdW1lOiBCbG9ja0RldmljZVZvbHVtZS5lYnMocHJvcHMuYWdlbnRWb2x1bWVTaXplKVxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgZGV0YWlsZWRNb25pdG9yaW5nOiB0cnVlLFxuICAgICAgcmVxdWlyZUltZHN2MjogZmFsc2UsXG4gICAgICBodHRwUHV0UmVzcG9uc2VIb3BMaW1pdDogMixcbiAgICAgIGh0dHBUb2tlbnM6IExhdW5jaFRlbXBsYXRlSHR0cFRva2Vucy5SRVFVSVJFRCxcbiAgICAgIGluc3RhbmNlTWV0YWRhdGFUYWdzOiB0cnVlXG4gICAgfSk7XG5cbiAgICAvLyBGdW5jdGlvbmFsIHRhZ3MgZm9yIGJ1aWxka2l0ZSBhZ2VudCBpZGVudGlmaWNhdGlvblxuICAgIHRhZ1Jlc291cmNlKGxhdW5jaFRlbXBsYXRlLCB7XG4gICAgICBSb2xlOiBcImJ1aWxka2l0ZUFnZW50XCIsXG4gICAgICBCdWlsZGtpdGVBZ2VudFJlbGVhc2U6IGFnZW50UmVsZWFzZS5TVEFCTEUsXG4gICAgICBCdWlsZGtpdGVRdWV1ZTogcHJvcHMuYnVpbGRraXRlUXVldWVcbiAgICB9KTtcblxuICAgIC8vIEF1dG9zY2FsaW5nIEdyb3VwXG4gICAgY29uc3QgYXV0b1NjYWxpbmdHcm91cCA9IG5ldyBBdXRvU2NhbGluZ0dyb3VwKFxuICAgICAgdGhpcyxcbiAgICAgIFwiYWdlbnRBdXRvU2NhbGluZ0dyb3VwXCIsXG4gICAgICB7XG4gICAgICAgIHZwYzogdnBjLFxuICAgICAgICBtaXhlZEluc3RhbmNlc1BvbGljeToge1xuICAgICAgICAgIGxhdW5jaFRlbXBsYXRlOiBsYXVuY2hUZW1wbGF0ZSxcbiAgICAgICAgICBpbnN0YW5jZXNEaXN0cmlidXRpb246IHtcbiAgICAgICAgICAgIG9uRGVtYW5kUGVyY2VudGFnZUFib3ZlQmFzZUNhcGFjaXR5OiBwcm9wcy5zcG90Q2FwYWNpdHlQZXJjZW50YWdlLFxuICAgICAgICAgICAgc3BvdEFsbG9jYXRpb25TdHJhdGVneTogU3BvdEFsbG9jYXRpb25TdHJhdGVneS5DQVBBQ0lUWV9PUFRJTUlaRURcbiAgICAgICAgICB9LFxuICAgICAgICAgIGxhdW5jaFRlbXBsYXRlT3ZlcnJpZGVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGluc3RhbmNlVHlwZTogcHJvcHMuYWdlbnRJbnN0YW5jZVR5cGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH0sXG4gICAgICAgIG1pbkNhcGFjaXR5OiBwcm9wcy5hZ2VudE1pbkluc3RhbmNlcyxcbiAgICAgICAgbWF4Q2FwYWNpdHk6IHByb3BzLmFnZW50TWF4SW5zdGFuY2VzLFxuICAgICAgICBjb29sZG93bjogRHVyYXRpb24uc2Vjb25kcyg2MCksXG4gICAgICAgIGdyb3VwTWV0cmljczogW0dyb3VwTWV0cmljcy5hbGwoKV0sXG4gICAgICAgIHVwZGF0ZVBvbGljeTogVXBkYXRlUG9saWN5LnJlcGxhY2luZ1VwZGF0ZSgpLFxuICAgICAgICBuZXdJbnN0YW5jZXNQcm90ZWN0ZWRGcm9tU2NhbGVJbjogdHJ1ZSxcbiAgICAgICAgdGVybWluYXRpb25Qb2xpY2llczogW1xuICAgICAgICAgIFRlcm1pbmF0aW9uUG9saWN5Lk9MREVTVF9MQVVOQ0hfQ09ORklHVVJBVElPTixcbiAgICAgICAgICBUZXJtaW5hdGlvblBvbGljeS5DTE9TRVNUX1RPX05FWFRfSU5TVEFOQ0VfSE9VUlxuICAgICAgICBdLFxuICAgICAgICBzc21TZXNzaW9uUGVybWlzc2lvbnM6IHRydWVcbiAgICAgIH1cbiAgICApO1xuXG4gICAgYWdlbnRSb2xlLmF0dGFjaElubGluZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3kodGhpcywgXCJ1cGRhdGVBdXRvU2NhbGluZ0dyb3VwXCIsIHtcbiAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICBcImF1dG9zY2FsaW5nOlNldEluc3RhbmNlSGVhbHRoXCIsXG4gICAgICAgICAgICAgIFwiYXV0b3NjYWxpbmc6VGVybWluYXRlSW5zdGFuY2VJbkF1dG9TY2FsaW5nR3JvdXBcIlxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHJlc291cmNlczogW2Ake2F1dG9TY2FsaW5nR3JvdXAuYXV0b1NjYWxpbmdHcm91cEFybn1gXVxuICAgICAgICAgIH0pXG4gICAgICAgIF1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIEJ1aWxka2l0ZSBTdXNwZW5kIEF1c3Rvc2NhbGluZyBHcm91cCBDdXN0b20gUmVzb3VyY2VcbiAgICBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJzdXNwZW5kQXV0b3NjYWxpbmdQcm9jZXNzXCIsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogXCJzdXNwZW5kQXV0b1NjYWxpbmdQcm9jZXNzZXNzXCIsXG4gICAgICBvbkNyZWF0ZToge1xuICAgICAgICBzZXJ2aWNlOiBcIkF1dG9TY2FsaW5nXCIsXG4gICAgICAgIGFjdGlvbjogXCJzdXNwZW5kUHJvY2Vzc2VzXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBBdXRvU2NhbGluZ0dyb3VwTmFtZTogYXV0b1NjYWxpbmdHcm91cC5hdXRvU2NhbGluZ0dyb3VwTmFtZSxcbiAgICAgICAgICBTY2FsaW5nUHJvY2Vzc2VzOiBbXCJBWlJlYmFsYW5jZVwiXVxuICAgICAgICB9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IFBoeXNpY2FsUmVzb3VyY2VJZC5vZihcbiAgICAgICAgICBcInN1c3BlbmRBdXRvU2NhbGluZ1Byb2Nlc3Nlc3NcIlxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgb25VcGRhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJBdXRvU2NhbGluZ1wiLFxuICAgICAgICBhY3Rpb246IFwic3VzcGVuZFByb2Nlc3Nlc1wiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgQXV0b1NjYWxpbmdHcm91cE5hbWU6IGF1dG9TY2FsaW5nR3JvdXAuYXV0b1NjYWxpbmdHcm91cE5hbWUsXG4gICAgICAgICAgU2NhbGluZ1Byb2Nlc3NlczogW1wiQVpSZWJhbGFuY2VcIl1cbiAgICAgICAgfSxcbiAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBQaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgXCJzdXNwZW5kQXV0b1NjYWxpbmdQcm9jZXNzZXNzXCJcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIHJlc291cmNlVHlwZTogXCJDdXN0b206OmJ1aWxka2l0ZVN1c3BlbmRBdXRvc2NhbGluZ1wiXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuQXBwbGljYXRpb24odGhpcywgXCJhZ2VudFNjYWxlclwiLCB7XG4gICAgICBsb2NhdGlvbjoge1xuICAgICAgICBhcHBsaWNhdGlvbklkOlxuICAgICAgICAgIFwiYXJuOmF3czpzZXJ2ZXJsZXNzcmVwbzp1cy1lYXN0LTE6MTcyODQwMDY0ODMyOmFwcGxpY2F0aW9ucy9idWlsZGtpdGUtYWdlbnQtc2NhbGVyXCIsXG4gICAgICAgIHNlbWFudGljVmVyc2lvbjogcHJvcHMuYnVpbGRraXRlQWdlbnRTY2FsZXJWZXJzaW9uXG4gICAgICB9LFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBCdWlsZGtpdGVBZ2VudFRva2VuUGFyYW1ldGVyOiBgJHthZ2VudFRva2VuLm5hbWV9YCxcbiAgICAgICAgQnVpbGRraXRlQWdlbnRUb2tlblBhcmFtZXRlclN0b3JlS01TS2V5OiBhZ2VudFRva2VuLmNtay5rZXkua2V5SWQsXG4gICAgICAgIFJvbGVQZXJtaXNzaW9uc0JvdW5kYXJ5QVJOOiBcIlwiLFxuICAgICAgICBCdWlsZGtpdGVRdWV1ZTogcHJvcHMuYnVpbGRraXRlUXVldWUsXG4gICAgICAgIEFnZW50c1Blckluc3RhbmNlOiBgJHtwcm9wcy5hZ2VudHNQZXJJbnN0YW5jZX1gLFxuICAgICAgICBNaW5TaXplOiBgJHtwcm9wcy5hZ2VudE1pbkluc3RhbmNlc31gLFxuICAgICAgICBNYXhTaXplOiBgJHtwcm9wcy5hZ2VudE1heEluc3RhbmNlc31gLFxuICAgICAgICBBZ2VudEF1dG9TY2FsZUdyb3VwOiBhdXRvU2NhbGluZ0dyb3VwLmF1dG9TY2FsaW5nR3JvdXBOYW1lLFxuICAgICAgICBTY2FsZU91dEZhY3RvcjogcHJvcHMuc2NhbGVPdXRGYWN0b3IsXG4gICAgICAgIFNjYWxlT3V0Rm9yV2FpdGluZ0pvYnM6IGAke3Byb3BzLnNjYWxlT3V0V2FpdGluZ0ZvckpvYnN9YCxcbiAgICAgICAgRXZlbnRTY2hlZHVsZVBlcmlvZDogcHJvcHMuc2NhbGVyRXZlbnRTY2hlZHVsZVBlcmlvZCxcbiAgICAgICAgTWluUG9sbEludGVydmFsOiBwcm9wcy5zY2FsZXJNaW5Qb2xsSW50ZXJ2YWwsXG4gICAgICAgIExvZ1JldGVudGlvbkRheXM6IGAke3Byb3BzLmxvZ1JldGVudGlvbkRheXN9YFxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1aWxka2l0ZTtcbiJdfQ==
361
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRraXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9idWlsZGtpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXFFO0FBQ3JFLGlEQUs2QjtBQUM3QixpREFZNkI7QUFDN0IsaUVBTXFDO0FBQ3JDLGlEQUFxRDtBQUNyRCxtRUFBa0U7QUFDbEUscUVBQXlFO0FBRXpFLDREQUF5RDtBQUN6RCxpREFBdUQ7QUFDdkQseURBQXVEO0FBQ3ZELHlEQUFvRTtBQUNwRSx1RkFBb0Y7QUFHcEYsSUFBSyxZQUlKO0FBSkQsV0FBSyxZQUFZO0lBQ2YsaUNBQWlCLENBQUE7SUFDakIsNkJBQWEsQ0FBQTtJQUNiLDZCQUFhLENBQUE7QUFDZixDQUFDLEVBSkksWUFBWSxLQUFaLFlBQVksUUFJaEI7QUFtRFksUUFBQSxxQkFBcUIsR0E4QzlCO0lBQ0YsZ0NBQWdDO0lBQ2hDLG1CQUFtQixFQUFFLFNBQVM7SUFDOUIsT0FBTyxFQUFFLEVBQUU7SUFDWCxxQkFBcUIsRUFBRSxZQUFZLENBQUMsTUFBTTtJQUMxQyxrQkFBa0IsRUFBRSxFQUFFO0lBQ3RCLDRCQUE0QixFQUFFLEtBQUs7SUFDbkMseUJBQXlCLEVBQUUsRUFBRTtJQUM3QiwyQkFBMkIsRUFBRSxPQUFPO0lBQ3BDLGdCQUFnQixFQUFFLENBQUM7SUFDbkIsNEJBQTRCLEVBQUUsRUFBRTtJQUNoQywrQkFBK0IsRUFBRSxFQUFFO0lBQ25DLGtDQUFrQyxFQUFFLEtBQUs7SUFDekMsa0NBQWtDLEVBQUUsRUFBRTtJQUN0QyxjQUFjLEVBQUUsU0FBUztJQUN6QixpQkFBaUIsRUFBRSxDQUFDO0lBQ3BCLGtCQUFrQixFQUFFLEVBQUU7SUFDdEIsZUFBZSxFQUFFLEVBQUU7SUFDbkIsa0JBQWtCLEVBQUUsRUFBRTtJQUN0QixpQkFBaUI7SUFDakIsaUJBQWlCLEVBQUUsc0JBQVksQ0FBQyxFQUFFLENBQUMsdUJBQWEsQ0FBQyxF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MUQsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUFjO2dCQUNwQyxzQkFBc0IsRUFBRSxHQUFHLEtBQUssQ0FBQyxzQkFBc0IsRUFBRTtnQkFDekQsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLHlCQUF5QjtnQkFDcEQsZUFBZSxFQUFFLEtBQUssQ0FBQyxxQkFBcUI7Z0JBQzVDLGdCQUFnQixFQUFFLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUFFO2FBQzlDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGO0FBcllELDhCQXFZQztBQUVELGtCQUFlLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IER1cmF0aW9uLCB0eXBlIFN0YWNrUHJvcHMsIFN0YWNrLCBUYWdzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQge1xuICBDb21wb3NpdGVQcmluY2lwYWwsXG4gIFNlcnZpY2VQcmluY2lwYWwsXG4gIFBvbGljeURvY3VtZW50LFxuICBQb2xpY3lTdGF0ZW1lbnRcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7XG4gIEJsb2NrRGV2aWNlVm9sdW1lLFxuICBJbnN0YW5jZUNsYXNzLFxuICBJbnN0YW5jZVNpemUsXG4gIEluc3RhbmNlVHlwZSxcbiAgTGF1bmNoVGVtcGxhdGUsXG4gIExhdW5jaFRlbXBsYXRlSHR0cFRva2VucyxcbiAgTWFjaGluZUltYWdlLFxuICBNdWx0aXBhcnRCb2R5LFxuICBNdWx0aXBhcnRVc2VyRGF0YSxcbiAgU3VibmV0VHlwZSxcbiAgVXNlckRhdGFcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7XG4gIEF1dG9TY2FsaW5nR3JvdXAsXG4gIEdyb3VwTWV0cmljcyxcbiAgU3BvdEFsbG9jYXRpb25TdHJhdGVneSxcbiAgVGVybWluYXRpb25Qb2xpY3ksXG4gIFVwZGF0ZVBvbGljeVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWF1dG9zY2FsaW5nXCI7XG5pbXBvcnQgeyBDZm5BcHBsaWNhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2FtXCI7XG5pbXBvcnQgeyBQaHlzaWNhbFJlc291cmNlSWQgfSBmcm9tIFwiYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlc1wiO1xuaW1wb3J0IHsgQnVja2V0RGVwbG95bWVudCwgU291cmNlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zMy1kZXBsb3ltZW50XCI7XG5pbXBvcnQgeyB0eXBlIENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBWcGMgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9uZXR3b3JraW5nL3ZwY1wiO1xuaW1wb3J0IHsgUG9saWN5LCBSb2xlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvaWFtXCI7XG5pbXBvcnQgeyBTM0J1Y2tldCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3N0b3JhZ2VcIjtcbmltcG9ydCB7IFNlY3VyZVN0cmluZ1BhcmFtZXRlciB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL3NlY3JldHNcIjtcbmltcG9ydCB7IEF3c0N1c3RvbVJlc291cmNlIH0gZnJvbSBcIi4uLy4uL3Jlc291cmNlcy9hd3MvdXRpbGl0aWVzL2F3c0N1c3RvbVJlc291cmNlXCI7XG5pbXBvcnQgeyB0eXBlIEtleVZhbHVlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmVudW0gYWdlbnRSZWxlYXNlIHtcbiAgU1RBQkxFID0gXCJzdGFibGVcIixcbiAgQkVUQSA9IFwiYmV0YVwiLFxuICBFREdFID0gXCJlZGdlXCJcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZGtpdGVQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICBhY2NvdW50SWQ/OiBzdHJpbmc7XG4gIGVsYXN0aWNTdGFja1ZlcnNpb246IHN0cmluZztcbiAga2V5TmFtZTogc3RyaW5nO1xuICBidWlsZGtpdGVBZ2VudFJlbGVhc2U6IGFnZW50UmVsZWFzZTtcbiAgYnVpbGRraXRlQWdlbnRUYWdzOiBzdHJpbmc7XG4gIGJ1aWxka2l0ZUFnZW50VGltZXN0YW1wTGluZXM6IGJvb2xlYW47XG4gIGJ1aWxka2l0ZUFnZW50RXhwZXJpbWVudHM6IHN0cmluZztcbiAgYnVpbGRraXRlQWdlbnRTY2FsZXJWZXJzaW9uOiBzdHJpbmc7XG4gIGxvZ1JldGVudGlvbkRheXM6IG51bWJlcjtcbiAgYnVpbGRraXRlQWdlbnRUcmFjaW5nQmFja2VuZDogXCJcIiB8IFwiZGF0YWRvZ1wiIHwgXCJvcGVudGVsZW1ldHJ5XCI7XG4gIGJ1aWxka2l0ZUFnZW50Q2FuY2VsR3JhY2VQZXJpb2Q6IG51bWJlcjtcbiAgYnVpbGRraXRlVGVybWluYXRlSW5zdGFuY2VBZnRlckpvYjogYm9vbGVhbjtcbiAgYnVpbGRraXRlQWRkaXRpb25hbFN1ZG9QZXJtaXNzaW9uczogc3RyaW5nO1xuICBidWlsZGtpdGVRdWV1ZTogc3RyaW5nO1xuICBhZ2VudHNQZXJJbnN0YW5jZTogbnVtYmVyO1xuICBib290c3RyYXBTY3JpcHRVcmw6IHN0cmluZztcbiAgYWdlbnRFbnZGaWxlVXJsOiBzdHJpbmc7XG4gIGF1dGhvcml6ZWRVc2Vyc1VybDogc3RyaW5nO1xuICAvLyBJbmZyYXN0cnVjdHVyZVxuICBhZ2VudEluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlO1xuICBhZ2VudFZvbHVtZVNpemU6IG51bWJlcjtcbiAgYWdlbnRNaW5JbnN0YW5jZXM6IG51bWJlcjtcbiAgYWdlbnRNYXhJbnN0YW5jZXM6IG51bWJlcjtcbiAgc2NhbGVyRXZlbnRTY2hlZHVsZVBlcmlvZDogc3RyaW5nO1xuICBzY2FsZXJNaW5Qb2xsSW50ZXJ2YWw6IHN0cmluZztcbiAgc3BvdENhcGFjaXR5UGVyY2VudGFnZTogbnVtYmVyO1xuICBzY2FsZU91dEZhY3Rvcjogc3RyaW5nO1xuICBlY3JBY2Nlc3NQb2xpY3k6IHN0cmluZztcbiAgc2NhbGVJbklkbGVQZXJpb2Q6IG51bWJlcjtcbiAgc2NhbGVPdXRXYWl0aW5nRm9ySm9iczogYm9vbGVhbjtcbiAgZG9ja2VyTmV0d29ya2luZ1Byb3RvY29sOiBcImlwdjRcIiB8IFwiZHVhbHN0YWNrXCI7XG4gIGVuYWJsZVNlY3JldHNQbHVnaW46IGJvb2xlYW47XG4gIGVuYWJsZUVjclBsdWdpbjogYm9vbGVhbjtcbiAgZW5hYmxlRG9ja2VyTG9naW5QbHVnaW46IGJvb2xlYW47XG4gIGVuYWJsZURvY2tlclVzZXJOYW1lc3BhY2VSZW1hcDogYm9vbGVhbjtcbiAgZW5hYmxlRG9ja2VyRXhwZXJpbWVudGFsOiBib29sZWFuO1xuICBlbmFibGVJbnN0YW5jZVN0b3JhZ2U6IGJvb2xlYW47XG4gIG1vdW50VG1wZnNBdFRtcDogYm9vbGVhbjtcbiAgYnVpbGRraXRlQWdlbnRFbmFibGVHaXRNaXJyb3JzOiBib29sZWFuO1xuICBwaXBlbGluZVNpZ25pbmdLTVNLZXk6IHN0cmluZztcbiAgcGlwZWxpbmVTaWduaW5nVmVyaWZpY2F0aW9uRmFpbHVyZUJlaGF2aW9yOiBcImJsb2NrXCIgfCBcIndhcm5cIjtcbiAgLy8gVGFnc1xuICAvLyBUT0RPOiBNb3ZlIHRoZXNlIGludG8gYSBzaW5nbGUgdGFncyBvYmplY3RcbiAgdGFnczogS2V5VmFsdWU7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG4gIG93bmVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgQnVpbGRraXRlRGVmYXVsdFByb3BzOiBQaWNrPFxuICBCdWlsZGtpdGVQcm9wcyxcbiAgLy8gQnVpbGRraXRlIEFnZW50IENvbmZpZ3VyYXRpb25cbiAgfCBcImVsYXN0aWNTdGFja1ZlcnNpb25cIlxuICB8IFwia2V5TmFtZVwiXG4gIHwgXCJidWlsZGtpdGVBZ2VudFJlbGVhc2VcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRUYWdzXCJcbiAgfCBcImJ1aWxka2l0ZUFnZW50VGltZXN0YW1wTGluZXNcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRFeHBlcmltZW50c1wiXG4gIHwgXCJidWlsZGtpdGVBZ2VudFNjYWxlclZlcnNpb25cIlxuICB8IFwibG9nUmV0ZW50aW9uRGF5c1wiXG4gIHwgXCJidWlsZGtpdGVBZ2VudFRyYWNpbmdCYWNrZW5kXCJcbiAgfCBcImJ1aWxka2l0ZUFnZW50Q2FuY2VsR3JhY2VQZXJpb2RcIlxuICB8IFwiYnVpbGRraXRlVGVybWluYXRlSW5zdGFuY2VBZnRlckpvYlwiXG4gIHwgXCJidWlsZGtpdGVBZGRpdGlvbmFsU3Vkb1Blcm1pc3Npb25zXCJcbiAgfCBcImJ1aWxka2l0ZVF1ZXVlXCJcbiAgfCBcImFnZW50c1Blckluc3RhbmNlXCJcbiAgfCBcImJvb3RzdHJhcFNjcmlwdFVybFwiXG4gIHwgXCJhZ2VudEVudkZpbGVVcmxcIlxuICB8IFwiYXV0aG9yaXplZFVzZXJzVXJsXCJcbiAgLy8gSW5mcmFzdHJ1Y3R1cmVcbiAgfCBcImFnZW50SW5zdGFuY2VUeXBlXCJcbiAgfCBcImFnZW50Vm9sdW1lU2l6ZVwiXG4gIHwgXCJhZ2VudE1pbkluc3RhbmNlc1wiXG4gIHwgXCJhZ2VudE1heEluc3RhbmNlc1wiXG4gIHwgXCJzY2FsZXJFdmVudFNjaGVkdWxlUGVyaW9kXCJcbiAgfCBcInNjYWxlck1pblBvbGxJbnRlcnZhbFwiXG4gIHwgXCJzcG90Q2FwYWNpdHlQZXJjZW50YWdlXCJcbiAgfCBcInNjYWxlT3V0RmFjdG9yXCJcbiAgfCBcInNjYWxlSW5JZGxlUGVyaW9kXCJcbiAgfCBcInNjYWxlT3V0V2FpdGluZ0ZvckpvYnNcIlxuICB8IFwiZWNyQWNjZXNzUG9saWN5XCJcbiAgfCBcImRvY2tlck5ldHdvcmtpbmdQcm90b2NvbFwiXG4gIHwgXCJlbmFibGVTZWNyZXRzUGx1Z2luXCJcbiAgfCBcImVuYWJsZUVjclBsdWdpblwiXG4gIHwgXCJlbmFibGVEb2NrZXJMb2dpblBsdWdpblwiXG4gIHwgXCJlbmFibGVEb2NrZXJVc2VyTmFtZXNwYWNlUmVtYXBcIlxuICB8IFwiZW5hYmxlRG9ja2VyRXhwZXJpbWVudGFsXCJcbiAgfCBcImVuYWJsZUluc3RhbmNlU3RvcmFnZVwiXG4gIHwgXCJtb3VudFRtcGZzQXRUbXBcIlxuICB8IFwiYnVpbGRraXRlQWdlbnRFbmFibGVHaXRNaXJyb3JzXCJcbiAgfCBcInBpcGVsaW5lU2lnbmluZ0tNU0tleVwiXG4gIHwgXCJwaXBlbGluZVNpZ25pbmdWZXJpZmljYXRpb25GYWlsdXJlQmVoYXZpb3JcIlxuICAvLyBUYWdzXG4gIHwgXCJlbnZpcm9ubWVudFwiXG4gIHwgXCJvd25lclwiXG4+ID0ge1xuICAvLyBCdWlsZGtpdGUgQWdlbnQgQ29uZmlndXJhdGlvblxuICBlbGFzdGljU3RhY2tWZXJzaW9uOiBcInY2LjMwLjBcIixcbiAga2V5TmFtZTogXCJcIixcbiAgYnVpbGRraXRlQWdlbnRSZWxlYXNlOiBhZ2VudFJlbGVhc2UuU1RBQkxFLFxuICBidWlsZGtpdGVBZ2VudFRhZ3M6IFwiXCIsXG4gIGJ1aWxka2l0ZUFnZW50VGltZXN0YW1wTGluZXM6IGZhbHNlLFxuICBidWlsZGtpdGVBZ2VudEV4cGVyaW1lbnRzOiBcIlwiLFxuICBidWlsZGtpdGVBZ2VudFNjYWxlclZlcnNpb246IFwiMS44LjBcIixcbiAgbG9nUmV0ZW50aW9uRGF5czogMSxcbiAgYnVpbGRraXRlQWdlbnRUcmFjaW5nQmFja2VuZDogXCJcIixcbiAgYnVpbGRraXRlQWdlbnRDYW5jZWxHcmFjZVBlcmlvZDogNjAsXG4gIGJ1aWxka2l0ZVRlcm1pbmF0ZUluc3RhbmNlQWZ0ZXJKb2I6IGZhbHNlLFxuICBidWlsZGtpdGVBZGRpdGlvbmFsU3Vkb1Blcm1pc3Npb25zOiBcIlwiLFxuICBidWlsZGtpdGVRdWV1ZTogXCJkZWZhdWx0XCIsXG4gIGFnZW50c1Blckluc3RhbmNlOiAxLFxuICBib290c3RyYXBTY3JpcHRVcmw6IFwiXCIsXG4gIGFnZW50RW52RmlsZVVybDogXCJcIixcbiAgYXV0aG9yaXplZFVzZXJzVXJsOiBcIlwiLFxuICAvLyBJbmZyYXN0cnVjdHVyZVxuICBhZ2VudEluc3RhbmNlVHlwZTogSW5zdGFuY2VUeXBlLm9mKEluc3RhbmNlQ2xhc3MuTTUsIEluc3RhbmNlU2l6ZS5MQVJHRSksXG4gIGFnZW50TWluSW5zdGFuY2VzOiAwLFxuICBhZ2VudE1heEluc3RhbmNlczogMTAsXG4gIGFnZW50Vm9sdW1lU2l6ZTogMjUwLFxuICBzY2FsZXJFdmVudFNjaGVkdWxlUGVyaW9kOiBcIjEgbWludXRlXCIsXG4gIHNjYWxlck1pblBvbGxJbnRlcnZhbDogXCIxMHNcIixcbiAgc3BvdENhcGFjaXR5UGVyY2VudGFnZTogNzUsXG4gIHNjYWxlT3V0RmFjdG9yOiBcIjEuMFwiLFxuICBzY2FsZUluSWRsZVBlcmlvZDogNjAwLFxuICBzY2FsZU91dFdhaXRpbmdGb3JKb2JzOiBmYWxzZSxcbiAgZWNyQWNjZXNzUG9saWN5OiBcIlwiLFxuICBkb2NrZXJOZXR3b3JraW5nUHJvdG9jb2w6IFwiaXB2NFwiLFxuICBlbmFibGVTZWNyZXRzUGx1Z2luOiB0cnVlLFxuICBlbmFibGVFY3JQbHVnaW46IHRydWUsXG4gIGVuYWJsZURvY2tlckxvZ2luUGx1Z2luOiB0cnVlLFxuICBlbmFibGVEb2NrZXJVc2VyTmFtZXNwYWNlUmVtYXA6IHRydWUsXG4gIGVuYWJsZURvY2tlckV4cGVyaW1lbnRhbDogZmFsc2UsXG4gIGVuYWJsZUluc3RhbmNlU3RvcmFnZTogZmFsc2UsXG4gIG1vdW50VG1wZnNBdFRtcDogdHJ1ZSxcbiAgYnVpbGRraXRlQWdlbnRFbmFibGVHaXRNaXJyb3JzOiBmYWxzZSxcbiAgcGlwZWxpbmVTaWduaW5nS01TS2V5OiBcIlwiLFxuICBwaXBlbGluZVNpZ25pbmdWZXJpZmljYXRpb25GYWlsdXJlQmVoYXZpb3I6IFwiYmxvY2tcIixcbiAgLy8gVGFnc1xuICBlbnZpcm9ubWVudDogXCJwbGF0Zm9ybVwiLFxuICBvd25lcjogXCJlbmdpbmVlclwiXG59O1xuXG5leHBvcnQgY2xhc3MgQnVpbGRraXRlIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQnVpbGRraXRlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIC8vIFRPRE86IE1ha2UgdGhpcyBpbW11dGFibGUgYW5kIGVuZm9yY2UgdGhlIHRhZ3MgYmVpbmcgc2V0XG4gICAgY29uc3QgdGFncyA9IHtcbiAgICAgIC4uLnByb3BzLnRhZ3MsXG4gICAgICBcImZqYWxsOmNvc3RBbGxvY2F0aW9uOmVudmlyb25tZW50XCI6IHByb3BzLmVudmlyb25tZW50IHx8IFwicGxhdGZvcm1cIixcbiAgICAgIFwiZmphbGw6Y29zdEFsbG9jYXRpb246c2VydmljZVwiOiBcImJ1aWxka2l0ZVwiLFxuICAgICAgXCJmamFsbDpjb3N0QWxsb2NhdGlvbjpvd25lclwiOiBwcm9wcy5vd25lciB8fCBcImVuZ2luZWVyXCIgLy8gVE9ETzogdGhpcyB3aWxsIGhhdmUgdG8gYmUgdGhlIHBsYXRmb3JtIGFjY291bnQgbmFtZT9cbiAgICB9O1xuXG4gICAgLy8gVlBDXG4gICAgY29uc3QgdnBjID0gbmV3IFZwYyh0aGlzLCBcImJ1aWxka2l0ZVwiLCB7XG4gICAgICBhY2NvdW50SWQ6IHByb3BzLmFjY291bnRJZCxcbiAgICAgIHN1Ym5ldENvbmZpZ3VyYXRpb246IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IGAke2lkfWAsXG4gICAgICAgICAgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QVUJMSUNcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgLy8gQXJ0aWZhY3RzIEJ1Y2tldFxuICAgIGNvbnN0IGFydGlmYWN0QnVja2V0ID0gbmV3IFMzQnVja2V0KHRoaXMsIFwiYXJ0aWZhY3RCdWNrZXRcIik7XG5cbiAgICAvLyBNYW5hZ2VkIFNlY3JldHNcbiAgICBjb25zdCBtYW5hZ2VkU2VjcmV0c0J1Y2tldCA9IG5ldyBTM0J1Y2tldCh0aGlzLCBcIm1hbmFnZWRTZWNyZXRzQnVja2V0XCIpO1xuICAgIGlmIChwcm9jZXNzLmVudi5CVUlMREtJVEVfUFJJVkFURV9TU0hfS0VZKSB7XG4gICAgICBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLCBcImJ1aWxka2l0ZVNzaEtleVwiLCB7XG4gICAgICAgIHNvdXJjZXM6IFtcbiAgICAgICAgICBTb3VyY2UuZGF0YShcInByaXZhdGVfc3NoX2tleVwiLCBwcm9jZXNzLmVudi5CVUlMREtJVEVfUFJJVkFURV9TU0hfS0VZKVxuICAgICAgICBdLFxuICAgICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogbWFuYWdlZFNlY3JldHNCdWNrZXRcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiV0FSTjonQlVJTERLSVRFX1BSSVZBVEVfU1NIX0tFWScgZW52aXJvbm1lbnQgdmFyaWFibGUgbm90IGRlY2xhcmVkLiBTa2lwcGluZyB1cGxvYWQgb2YgcHJpdmF0ZSBTU0gga2V5XCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRW5jcnlwdGVkIEJ1aWxka2l0ZSBBZ2VudCBUb2tlblxuICAgIGNvbnN0IGFnZW50VG9rZW4gPSBuZXcgU2VjdXJlU3RyaW5nUGFyYW1ldGVyKHRoaXMsIFwiYWdlbnRUb2tlblwiLCB7XG4gICAgICBuYW1lOiBgL2J1aWxka2l0ZS9hZ2VudFRva2VuYCxcbiAgICAgIGFsaWFzTmFtZTogYGJ1aWxka2l0ZUFnZW50VG9rZW5gLFxuICAgICAgdmFsdWU6IHByb2Nlc3MuZW52LkJVSUxES0lURV9BR0VOVF9UT0tFTixcbiAgICAgIG92ZXJ3cml0ZTogcHJvY2Vzcy5lbnYuQlVJTERLSVRFX0FHRU5UX1RPS0VOID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgdGFnczogdGFncyxcbiAgICAgIGFjY291bnRJZDogdGhpcy5hY2NvdW50LFxuICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvblxuICAgIH0pO1xuXG4gICAgLy8gQnVpbGRraXRlIEFnZW50IEV4ZWN1dGlvbiBSb2xlXG4gICAgY29uc3QgYWdlbnRSb2xlID0gbmV3IFJvbGUodGhpcywgXCJhZ2VudElhbVJvbGVcIiwge1xuICAgICAgcm9sZU5hbWU6IGAke2lkfUFnZW50Um9sZWAsXG4gICAgICBkZXNjcmlwdGlvbjogXCJCdWlsZGtpdGUgQWdlbnQgSUFNIFJvbGVcIixcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIFtcImRlY3J5cHRCdWlsZGtpdGVBZ2VudFRva2VuXCJdOiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXCJrbXM6RGVjcnlwdFwiXSxcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbYWdlbnRUb2tlbi5jbWsua2V5LmtleUFybl1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wicmVhZEJ1aWxka2l0ZUFnZW50VG9rZW5cIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcInNzbTpHZXRQYXJhbWV0ZXJcIl0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToke3Byb3BzLmVudj8ucmVnaW9ufToke3Byb3BzLmVudj8uYWNjb3VudH06cGFyYW1ldGVyJHthZ2VudFRva2VuLm5hbWV9YFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcInJlYWRNYW5hZ2VkU2VjcmV0c0J1Y2tldFwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1wiczM6R2V0KlwiLCBcInMzOkxpc3QqXCJdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgICAgICBtYW5hZ2VkU2VjcmV0c0J1Y2tldC5idWNrZXRBcm4sXG4gICAgICAgICAgICAgICAgYCR7bWFuYWdlZFNlY3JldHNCdWNrZXQuYnVja2V0QXJufS8qYFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIF1cbiAgICAgICAgfSksXG4gICAgICAgIFtcIndyaXRlQXJ0aWZhY3RCdWNrZXRcIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICBcInMzOkdldE9iamVjdFwiLFxuICAgICAgICAgICAgICAgIFwiczM6R2V0T2JqZWN0QWNsXCIsXG4gICAgICAgICAgICAgICAgXCJzMzpHZXRPYmplY3RWZXJzaW9uXCIsXG4gICAgICAgICAgICAgICAgXCJzMzpHZXRPYmplY3RWZXJzaW9uQWNsXCIsXG4gICAgICAgICAgICAgICAgXCJzMzpMaXN0QnVja2V0XCIsXG4gICAgICAgICAgICAgICAgXCJzMzpQdXRPYmplY3RcIixcbiAgICAgICAgICAgICAgICBcInMzOlB1dE9iamVjdEFjbFwiLFxuICAgICAgICAgICAgICAgIFwiczM6UHV0T2JqZWN0VmVyc2lvbkFjbFwiXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgIGFydGlmYWN0QnVja2V0LmJ1Y2tldEFybixcbiAgICAgICAgICAgICAgICBgJHthcnRpZmFjdEJ1Y2tldC5idWNrZXRBcm59LypgXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wiZGVzY3JpYmVJbnN0YW5jZVwiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIFwiYXV0b3NjYWxpbmc6RGVzY3JpYmVBdXRvU2NhbGluZ0luc3RhbmNlc1wiLFxuICAgICAgICAgICAgICAgIFwiY2xvdWR3YXRjaDpQdXRNZXRyaWNEYXRhXCIsXG4gICAgICAgICAgICAgICAgXCJjbG91ZGZvcm1hdGlvbjpEZXNjcmliZVN0YWNrUmVzb3VyY2VcIixcbiAgICAgICAgICAgICAgICBcImVjMjpEZXNjcmliZVRhZ3NcIlxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9KSxcbiAgICAgICAgW1wibG9nZ2luZ1wiXTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgIFwibG9nczpDcmVhdGVMb2dHcm91cFwiLFxuICAgICAgICAgICAgICAgIFwibG9nczpDcmVhdGVMb2dTdHJlYW1cIixcbiAgICAgICAgICAgICAgICBcImxvZ3M6UHV0TG9nRXZlbnRzXCIsXG4gICAgICAgICAgICAgICAgXCJsb2dzOkRlc2NyaWJlTG9nR3JvdXBzXCIsXG4gICAgICAgICAgICAgICAgXCJsb2dzOkRlc2NyaWJlTG9nU3RyZWFtc1wiXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgICBbXCJzc21cIl06IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICBcInNzbTpEZXNjcmliZUluc3RhbmNlUHJvcGVydGllc1wiLFxuICAgICAgICAgICAgICAgIFwic3NtOkxpc3RBc3NvY2lhdGlvbnNcIixcbiAgICAgICAgICAgICAgICBcInNzbTpQdXRJbnZlbnRvcnlcIixcbiAgICAgICAgICAgICAgICBcInNzbTpVcGRhdGVJbnN0YW5jZUluZm9ybWF0aW9uXCIsXG4gICAgICAgICAgICAgICAgXCJzc21tZXNzYWdlczpDcmVhdGVDb250cm9sQ2hhbm5lbFwiLFxuICAgICAgICAgICAgICAgIFwic3NtbWVzc2FnZXM6Q3JlYXRlRGF0YUNoYW5uZWxcIixcbiAgICAgICAgICAgICAgICBcInNzbW1lc3NhZ2VzOk9wZW5Db250cm9sQ2hhbm5lbFwiLFxuICAgICAgICAgICAgICAgIFwic3NtbWVzc2FnZXM6T3BlbkRhdGFDaGFubmVsXCIsXG4gICAgICAgICAgICAgICAgXCJlYzJtZXNzYWdlczpBY2tub3dsZWRnZU1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOkRlbGV0ZU1lc3NhZ2VcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOkZhaWxNZXNzYWdlXCIsXG4gICAgICAgICAgICAgICAgXCJlYzJtZXNzYWdlczpHZXRFbmRwb2ludFwiLFxuICAgICAgICAgICAgICAgIFwiZWMybWVzc2FnZXM6R2V0TWVzc2FnZXNcIixcbiAgICAgICAgICAgICAgICBcImVjMm1lc3NhZ2VzOlNlbmRSZXBseVwiXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgICB9LFxuICAgICAgYXNzdW1lZEJ5OiBuZXcgQ29tcG9zaXRlUHJpbmNpcGFsKFxuICAgICAgICBuZXcgU2VydmljZVByaW5jaXBhbChcImF1dG9zY2FsaW5nLmFtYXpvbmF3cy5jb21cIiksXG4gICAgICAgIG5ldyBTZXJ2aWNlUHJpbmNpcGFsKFwiZWMyLmFtYXpvbmF3cy5jb21cIilcbiAgICAgIClcbiAgICB9KTtcblxuICAgIC8vIEJ1aWxka2l0ZSBBZ2VudCBFQzIgVXNlciBEYXRhXG4gICAgY29uc3QgbXVsdGlwYXJ0VXNlckRhdGEgPSBuZXcgTXVsdGlwYXJ0VXNlckRhdGEoKTtcblxuICAgIC8vIENsb3VkIENvbmZpZ1xuICAgIGNvbnN0IGNsb3VkQ29uZmlnVXNlckRhdGEgPSBVc2VyRGF0YS5mb3JMaW51eCh7XG4gICAgICBzaGViYW5nOiBcIiNjbG91ZC1jb25maWdcIlxuICAgIH0pO1xuICAgIGNsb3VkQ29uZmlnVXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICBcImNsb3VkX2ZpbmFsX21vZHVsZXM6XCIsXG4gICAgICBcIiAgLSBbc2NyaXB0cy11c2VyLCBhbHdheXNdXCJcbiAgICApO1xuICAgIG11bHRpcGFydFVzZXJEYXRhLmFkZFBhcnQoXG4gICAgICBNdWx0aXBhcnRCb2R5LmZyb21Vc2VyRGF0YShcbiAgICAgICAgY2xvdWRDb25maWdVc2VyRGF0YSxcbiAgICAgICAgXCJ0ZXh0L2Nsb3VkLWNvbmZpZzsgY2hhcnNldD0ndXMtYXNjaWknXCJcbiAgICAgIClcbiAgICApO1xuXG4gICAgLy8gTW91bnQgU3RvcmFnZVxuICAgIGNvbnN0IG1vdW50U3RvcmFnZVVzZXJEYXRhID0gVXNlckRhdGEuZm9yTGludXgoe1xuICAgICAgc2hlYmFuZzogXCIjIS9iaW4vYmFzaCAtdlwiXG4gICAgfSk7XG4gICAgbW91bnRTdG9yYWdlVXNlckRhdGEuYWRkQ29tbWFuZHMoXG4gICAgICBgQlVJTERLSVRFX0VOQUJMRV9JTlNUQU5DRV9TVE9SQUdFPScke3Byb3BzLmVuYWJsZUluc3RhbmNlU3RvcmFnZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9NT1VOVF9UTVBGU19BVF9UTVA9JyR7cHJvcHMubW91bnRUbXBmc0F0VG1wfScgXFxcXGAsXG4gICAgICBcIi91c3IvbG9jYWwvYmluL2JrLW1vdW50LWluc3RhbmNlLXN0b3JhZ2Uuc2hcIlxuICAgICk7XG4gICAgbXVsdGlwYXJ0VXNlckRhdGEuYWRkUGFydChcbiAgICAgIE11bHRpcGFydEJvZHkuZnJvbVVzZXJEYXRhKFxuICAgICAgICBtb3VudFN0b3JhZ2VVc2VyRGF0YSxcbiAgICAgICAgXCJ0ZXh0L3gtc2hlbGxzY3JpcHQ7IGNoYXJzZXQ9J3VzLWFzY2lpJ1wiXG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIENvbmZpZ3VyZSBEb2NrZXJcbiAgICBjb25zdCBjb25maWd1cmVEb2NrZXJVc2VyRGF0YSA9IFVzZXJEYXRhLmZvckxpbnV4KHtcbiAgICAgIHNoZWJhbmc6IFwiIyEvYmluL2Jhc2ggLXZcIlxuICAgIH0pO1xuICAgIGNvbmZpZ3VyZURvY2tlclVzZXJEYXRhLmFkZENvbW1hbmRzKFxuICAgICAgYERPQ0tFUl9VU0VSTlNfUkVNQVA9JyR7cHJvcHMuZW5hYmxlRG9ja2VyVXNlck5hbWVzcGFjZVJlbWFwfScgXFxcXGAsXG4gICAgICBgRE9DS0VSX0VYUEVSSU1FTlRBTD0nJHtwcm9wcy5lbmFibGVEb2NrZXJFeHBlcmltZW50YWx9JyBcXFxcYCxcbiAgICAgIGBET0NLRVJfTkVUV09SS0lOR19QUk9UT0NPTD0nJHtwcm9wcy5kb2NrZXJOZXR3b3JraW5nUHJvdG9jb2x9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfRU5BQkxFX0lOU1RBTkNFX1NUT1JBR0U9JyR7cHJvcHMuZW5hYmxlSW5zdGFuY2VTdG9yYWdlfScgXFxcXGAsXG4gICAgICBcIi91c3IvbG9jYWwvYmluL2JrLWNvbmZpZ3VyZS1kb2NrZXIuc2hcIlxuICAgICk7XG4gICAgbXVsdGlwYXJ0VXNlckRhdGEuYWRkUGFydChcbiAgICAgIE11bHRpcGFydEJvZHkuZnJvbVVzZXJEYXRhKFxuICAgICAgICBjb25maWd1cmVEb2NrZXJVc2VyRGF0YSxcbiAgICAgICAgXCJ0ZXh0L3gtc2hlbGxzY3JpcHQ7IGNoYXJzZXQ9J3VzLWFzY2lpJ1wiXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGluc3RhbGxFbGFzdGljU3RhY2tVc2VyRGF0YSA9IFVzZXJEYXRhLmZvckxpbnV4KHtcbiAgICAgIHNoZWJhbmc6IFwiIyEvYmluL2Jhc2ggLXZcIlxuICAgIH0pO1xuICAgIGluc3RhbGxFbGFzdGljU3RhY2tVc2VyRGF0YS5hZGRDb21tYW5kcyhcbiAgICAgIGBCVUlMREtJVEVfU1RBQ0tfTkFNRT0nJHtpZH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9TVEFDS19WRVJTSU9OPScke3Byb3BzLmVsYXN0aWNTdGFja1ZlcnNpb259JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfU0NBTEVfSU5fSURMRV9QRVJJT0Q9JyR7cHJvcHMuc2NhbGVJbklkbGVQZXJpb2R9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfU0VDUkVUU19CVUNLRVQ9JyR7bWFuYWdlZFNlY3JldHNCdWNrZXQuYnVja2V0TmFtZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9TRUNSRVRTX0JVQ0tFVF9SRUdJT049JyR7cHJvcHMuZW52Py5yZWdpb259JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfVE9LRU5fUEFUSD0nJHthZ2VudFRva2VuLm5hbWV9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRTX1BFUl9JTlNUQU5DRT0nJHtwcm9wcy5hZ2VudHNQZXJJbnN0YW5jZX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9UQUdTPScke3Byb3BzLmJ1aWxka2l0ZUFnZW50VGFnc30nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9USU1FU1RBTVBfTElORVM9JyR7cHJvcHMuYnVpbGRraXRlQWdlbnRUaW1lc3RhbXBMaW5lc30nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9FWFBFUklNRU5UUz0nJHtwcm9wcy5idWlsZGtpdGVBZ2VudEV4cGVyaW1lbnRzfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1RSQUNJTkdfQkFDS0VORD0nJHtwcm9wcy5idWlsZGtpdGVBZ2VudFRyYWNpbmdCYWNrZW5kfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1JFTEVBU0U9JyR7cHJvcHMuYnVpbGRraXRlQWdlbnRSZWxlYXNlfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX0NBTkNFTF9HUkFDRV9QRVJJT0Q9JyR7cHJvcHMuYnVpbGRraXRlQWdlbnRDYW5jZWxHcmFjZVBlcmlvZH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9BR0VOVF9TSUdOSU5HX0tNU19LRVk9JyR7cHJvcHMucGlwZWxpbmVTaWduaW5nS01TS2V5fScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FHRU5UX1NJR05JTkdfRkFJTFVSRV9CRUhBVklPUj0nJHtwcm9wcy5waXBlbGluZVNpZ25pbmdWZXJpZmljYXRpb25GYWlsdXJlQmVoYXZpb3J9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfUVVFVUU9JyR7cHJvcHMuYnVpbGRraXRlUXVldWV9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQUdFTlRfRU5BQkxFX0dJVF9NSVJST1JTPScke3Byb3BzLmJ1aWxka2l0ZUFnZW50RW5hYmxlR2l0TWlycm9yc30nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9FTEFTVElDX0JPT1RTVFJBUF9TQ1JJUFQ9JyR7cHJvcHMuYm9vdHN0cmFwU2NyaXB0VXJsfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0VOVl9GSUxFX1VSTD0nJHtwcm9wcy5hZ2VudEVudkZpbGVVcmx9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfRU5BQkxFX0lOU1RBTkNFX1NUT1JBR0U9JyR7cHJvcHMuZW5hYmxlSW5zdGFuY2VTdG9yYWdlfScgXFxcXGAsXG4gICAgICBgQlVJTERLSVRFX0FVVEhPUklaRURfVVNFUlNfVVJMPScke3Byb3BzLmF1dGhvcml6ZWRVc2Vyc1VybH0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9FQ1JfUE9MSUNZPScke3Byb3BzLmVjckFjY2Vzc1BvbGljeX0nIFxcXFxgLFxuICAgICAgYEJVSUxES0lURV9URVJNSU5BVEVfSU5TVEFOQ0VfQUZURVJfSk9CPScke3Byb3BzLmJ1aWxka2l0ZVRlcm1pbmF0ZUluc3RhbmNlQWZ0ZXJKb2J9JyBcXFxcYCxcbiAgICAgIGBCVUlMREtJVEVfQURESVRJT05BTF9TVURPX1BFUk1JU1NJT05TPScke3Byb3BzLmJ1aWxka2l0ZUFkZGl0aW9uYWxTdWRvUGVybWlzc2lvbnN9JyBcXFxcYCxcbiAgICAgIGBBV1NfREVGQVVMVF9SRUdJT049JyR7cHJvcHMuZW52Py5yZWdpb259JyBcXFxcYCxcbiAgICAgIGBTRUNSRVRTX1BMVUdJTl9FTkFCTEVEPScke3Byb3BzLmVuYWJsZVNlY3JldHNQbHVnaW59JyBcXFxcYCxcbiAgICAgIGBFQ1JfUExVR0lOX0VOQUJMRUQ9JyR7cHJvcHMuZW5hYmxlRWNyUGx1Z2lufScgXFxcXGAsXG4gICAgICBgRE9DS0VSX0xPR0lOX1BMVUdJTl9FTkFCTEVEPScke3Byb3BzLmVuYWJsZURvY2tlckxvZ2luUGx1Z2lufScgXFxcXGAsXG4gICAgICBgRE9DS0VSX0VYUEVSSU1FTlRBTD0nJHtwcm9wcy5lbmFibGVEb2NrZXJFeHBlcmltZW50YWx9JyBcXFxcYCxcbiAgICAgIGBET0NLRVJfVVNFUk5TX1JFTUFQPScke3Byb3BzLmVuYWJsZURvY2tlclVzZXJOYW1lc3BhY2VSZW1hcH0nIFxcXFxgLFxuICAgICAgYEFXU19SRUdJT049JyR7cHJvcHMuZW52Py5yZWdpb259JyBcXFxcYCxcbiAgICAgIFwiL3Vzci9sb2NhbC9iaW4vYmstaW5zdGFsbC1lbGFzdGljLXN0YWNrLnNoXCJcbiAgICApO1xuXG4gICAgLy8gTWVyZ2UgVXNlciBEYXRhXG4gICAgbXVsdGlwYXJ0VXNlckRhdGEuYWRkUGFydChcbiAgICAgIE11bHRpcGFydEJvZHkuZnJvbVVzZXJEYXRhKFxuICAgICAgICBpbnN0YWxsRWxhc3RpY1N0YWNrVXNlckRhdGEsXG4gICAgICAgIFwidGV4dC94LXNoZWxsc2NyaXB0OyBjaGFyc2V0PSd1cy1hc2NpaSdcIlxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBMYXVuY2ggVGVtcGxhdGVcbiAgICBjb25zdCBsYXVuY2hUZW1wbGF0ZSA9IG5ldyBMYXVuY2hUZW1wbGF0ZSh0aGlzLCBcImFnZW50TGF1bmNoVGVtcGxhdGVcIiwge1xuICAgICAgbGF1bmNoVGVtcGxhdGVOYW1lOiBgYnVpbGRraXRlTGF1bmNoVGVtcGxhdGVgLFxuICAgICAgaW5zdGFuY2VUeXBlOiBwcm9wcy5hZ2VudEluc3RhbmNlVHlwZSxcbiAgICAgIG1hY2hpbmVJbWFnZTogTWFjaGluZUltYWdlLmxvb2t1cCh7XG4gICAgICAgIG5hbWU6IFwiYnVpbGRraXRlLXN0YWNrLWxpbnV4LXg4Nl82NC0qXCIsXG4gICAgICAgIG93bmVyczogW1wiMTcyODQwMDY0ODMyXCJdLFxuICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgW1wiYmxvY2stZGV2aWNlLW1hcHBpbmcudm9sdW1lLXR5cGVcIl06IFtcImdwM1wiXVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHVzZXJEYXRhOiBtdWx0aXBhcnRVc2VyRGF0YSxcbiAgICAgIHJvbGU6IGFnZW50Um9sZSxcbiAgICAgIGJsb2NrRGV2aWNlczogW1xuICAgICAgICB7XG4gICAgICAgICAgZGV2aWNlTmFtZTogXCIvZGV2L3h2ZGFcIixcbiAgICAgICAgICB2b2x1bWU6IEJsb2NrRGV2aWNlVm9sdW1lLmVicyhwcm9wcy5hZ2VudFZvbHVtZVNpemUpXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBkZXRhaWxlZE1vbml0b3Jpbmc6IHRydWUsXG4gICAgICByZXF1aXJlSW1kc3YyOiBmYWxzZSxcbiAgICAgIGh0dHBQdXRSZXNwb25zZUhvcExpbWl0OiAyLFxuICAgICAgaHR0cFRva2VuczogTGF1bmNoVGVtcGxhdGVIdHRwVG9rZW5zLlJFUVVJUkVELFxuICAgICAgaW5zdGFuY2VNZXRhZGF0YVRhZ3M6IHRydWVcbiAgICB9KTtcblxuICAgIC8vIEZ1bmN0aW9uYWwgdGFncyBmb3IgYnVpbGRraXRlIGFnZW50IGlkZW50aWZpY2F0aW9uXG4gICAgVGFncy5vZihsYXVuY2hUZW1wbGF0ZSkuYWRkKFwiUm9sZVwiLCBcImJ1aWxka2l0ZUFnZW50XCIpO1xuICAgIFRhZ3Mub2YobGF1bmNoVGVtcGxhdGUpLmFkZChcIkJ1aWxka2l0ZUFnZW50UmVsZWFzZVwiLCBhZ2VudFJlbGVhc2UuU1RBQkxFKTtcbiAgICBUYWdzLm9mKGxhdW5jaFRlbXBsYXRlKS5hZGQoXCJCdWlsZGtpdGVRdWV1ZVwiLCBwcm9wcy5idWlsZGtpdGVRdWV1ZSk7XG5cbiAgICAvLyBBdXRvc2NhbGluZyBHcm91cFxuICAgIGNvbnN0IGF1dG9TY2FsaW5nR3JvdXAgPSBuZXcgQXV0b1NjYWxpbmdHcm91cChcbiAgICAgIHRoaXMsXG4gICAgICBcImFnZW50QXV0b1NjYWxpbmdHcm91cFwiLFxuICAgICAge1xuICAgICAgICB2cGM6IHZwYyxcbiAgICAgICAgbWl4ZWRJbnN0YW5jZXNQb2xpY3k6IHtcbiAgICAgICAgICBsYXVuY2hUZW1wbGF0ZTogbGF1bmNoVGVtcGxhdGUsXG4gICAgICAgICAgaW5zdGFuY2VzRGlzdHJpYnV0aW9uOiB7XG4gICAgICAgICAgICBvbkRlbWFuZFBlcmNlbnRhZ2VBYm92ZUJhc2VDYXBhY2l0eTogcHJvcHMuc3BvdENhcGFjaXR5UGVyY2VudGFnZSxcbiAgICAgICAgICAgIHNwb3RBbGxvY2F0aW9uU3RyYXRlZ3k6IFNwb3RBbGxvY2F0aW9uU3RyYXRlZ3kuQ0FQQUNJVFlfT1BUSU1JWkVEXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsYXVuY2hUZW1wbGF0ZU92ZXJyaWRlczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpbnN0YW5jZVR5cGU6IHByb3BzLmFnZW50SW5zdGFuY2VUeXBlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBtaW5DYXBhY2l0eTogcHJvcHMuYWdlbnRNaW5JbnN0YW5jZXMsXG4gICAgICAgIG1heENhcGFjaXR5OiBwcm9wcy5hZ2VudE1heEluc3RhbmNlcyxcbiAgICAgICAgY29vbGRvd246IER1cmF0aW9uLnNlY29uZHMoNjApLFxuICAgICAgICBncm91cE1ldHJpY3M6IFtHcm91cE1ldHJpY3MuYWxsKCldLFxuICAgICAgICB1cGRhdGVQb2xpY3k6IFVwZGF0ZVBvbGljeS5yZXBsYWNpbmdVcGRhdGUoKSxcbiAgICAgICAgbmV3SW5zdGFuY2VzUHJvdGVjdGVkRnJvbVNjYWxlSW46IHRydWUsXG4gICAgICAgIHRlcm1pbmF0aW9uUG9saWNpZXM6IFtcbiAgICAgICAgICBUZXJtaW5hdGlvblBvbGljeS5PTERFU1RfTEFVTkNIX0NPTkZJR1VSQVRJT04sXG4gICAgICAgICAgVGVybWluYXRpb25Qb2xpY3kuQ0xPU0VTVF9UT19ORVhUX0lOU1RBTkNFX0hPVVJcbiAgICAgICAgXSxcbiAgICAgICAgc3NtU2Vzc2lvblBlcm1pc3Npb25zOiB0cnVlXG4gICAgICB9XG4gICAgKTtcblxuICAgIGFnZW50Um9sZS5hdHRhY2hJbmxpbmVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5KHRoaXMsIFwidXBkYXRlQXV0b1NjYWxpbmdHcm91cFwiLCB7XG4gICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgXCJhdXRvc2NhbGluZzpTZXRJbnN0YW5jZUhlYWx0aFwiLFxuICAgICAgICAgICAgICBcImF1dG9zY2FsaW5nOlRlcm1pbmF0ZUluc3RhbmNlSW5BdXRvU2NhbGluZ0dyb3VwXCJcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFtgJHthdXRvU2NhbGluZ0dyb3VwLmF1dG9TY2FsaW5nR3JvdXBBcm59YF1cbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBCdWlsZGtpdGUgU3VzcGVuZCBBdXN0b3NjYWxpbmcgR3JvdXAgQ3VzdG9tIFJlc291cmNlXG4gICAgbmV3IEF3c0N1c3RvbVJlc291cmNlKHRoaXMsIFwic3VzcGVuZEF1dG9zY2FsaW5nUHJvY2Vzc1wiLCB7XG4gICAgICBmdW5jdGlvbk5hbWU6IFwic3VzcGVuZEF1dG9TY2FsaW5nUHJvY2Vzc2Vzc1wiLFxuICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJBdXRvU2NhbGluZ1wiLFxuICAgICAgICBhY3Rpb246IFwic3VzcGVuZFByb2Nlc3Nlc1wiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgQXV0b1NjYWxpbmdHcm91cE5hbWU6IGF1dG9TY2FsaW5nR3JvdXAuYXV0b1NjYWxpbmdHcm91cE5hbWUsXG4gICAgICAgICAgU2NhbGluZ1Byb2Nlc3NlczogW1wiQVpSZWJhbGFuY2VcIl1cbiAgICAgICAgfSxcbiAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBQaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgXCJzdXNwZW5kQXV0b1NjYWxpbmdQcm9jZXNzZXNzXCJcbiAgICAgICAgKVxuICAgICAgfSxcbiAgICAgIG9uVXBkYXRlOiB7XG4gICAgICAgIHNlcnZpY2U6IFwiQXV0b1NjYWxpbmdcIixcbiAgICAgICAgYWN0aW9uOiBcInN1c3BlbmRQcm9jZXNzZXNcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIEF1dG9TY2FsaW5nR3JvdXBOYW1lOiBhdXRvU2NhbGluZ0dyb3VwLmF1dG9TY2FsaW5nR3JvdXBOYW1lLFxuICAgICAgICAgIFNjYWxpbmdQcm9jZXNzZXM6IFtcIkFaUmViYWxhbmNlXCJdXG4gICAgICAgIH0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFxuICAgICAgICAgIFwic3VzcGVuZEF1dG9TY2FsaW5nUHJvY2Vzc2Vzc1wiXG4gICAgICAgIClcbiAgICAgIH0sXG4gICAgICByZXNvdXJjZVR5cGU6IFwiQ3VzdG9tOjpidWlsZGtpdGVTdXNwZW5kQXV0b3NjYWxpbmdcIlxuICAgIH0pO1xuXG4gICAgbmV3IENmbkFwcGxpY2F0aW9uKHRoaXMsIFwiYWdlbnRTY2FsZXJcIiwge1xuICAgICAgbG9jYXRpb246IHtcbiAgICAgICAgYXBwbGljYXRpb25JZDpcbiAgICAgICAgICBcImFybjphd3M6c2VydmVybGVzc3JlcG86dXMtZWFzdC0xOjE3Mjg0MDA2NDgzMjphcHBsaWNhdGlvbnMvYnVpbGRraXRlLWFnZW50LXNjYWxlclwiLFxuICAgICAgICBzZW1hbnRpY1ZlcnNpb246IHByb3BzLmJ1aWxka2l0ZUFnZW50U2NhbGVyVmVyc2lvblxuICAgICAgfSxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgQnVpbGRraXRlQWdlbnRUb2tlblBhcmFtZXRlcjogYCR7YWdlbnRUb2tlbi5uYW1lfWAsXG4gICAgICAgIEJ1aWxka2l0ZUFnZW50VG9rZW5QYXJhbWV0ZXJTdG9yZUtNU0tleTogYWdlbnRUb2tlbi5jbWsua2V5LmtleUlkLFxuICAgICAgICBSb2xlUGVybWlzc2lvbnNCb3VuZGFyeUFSTjogXCJcIixcbiAgICAgICAgQnVpbGRraXRlUXVldWU6IHByb3BzLmJ1aWxka2l0ZVF1ZXVlLFxuICAgICAgICBBZ2VudHNQZXJJbnN0YW5jZTogYCR7cHJvcHMuYWdlbnRzUGVySW5zdGFuY2V9YCxcbiAgICAgICAgTWluU2l6ZTogYCR7cHJvcHMuYWdlbnRNaW5JbnN0YW5jZXN9YCxcbiAgICAgICAgTWF4U2l6ZTogYCR7cHJvcHMuYWdlbnRNYXhJbnN0YW5jZXN9YCxcbiAgICAgICAgQWdlbnRBdXRvU2NhbGVHcm91cDogYXV0b1NjYWxpbmdHcm91cC5hdXRvU2NhbGluZ0dyb3VwTmFtZSxcbiAgICAgICAgU2NhbGVPdXRGYWN0b3I6IHByb3BzLnNjYWxlT3V0RmFjdG9yLFxuICAgICAgICBTY2FsZU91dEZvcldhaXRpbmdKb2JzOiBgJHtwcm9wcy5zY2FsZU91dFdhaXRpbmdGb3JKb2JzfWAsXG4gICAgICAgIEV2ZW50U2NoZWR1bGVQZXJpb2Q6IHByb3BzLnNjYWxlckV2ZW50U2NoZWR1bGVQZXJpb2QsXG4gICAgICAgIE1pblBvbGxJbnRlcnZhbDogcHJvcHMuc2NhbGVyTWluUG9sbEludGVydmFsLFxuICAgICAgICBMb2dSZXRlbnRpb25EYXlzOiBgJHtwcm9wcy5sb2dSZXRlbnRpb25EYXlzfWBcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCdWlsZGtpdGU7XG4iXX0=