@aws-cdk/aws-ec2-alpha 2.245.0-alpha.0 → 2.247.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -584,7 +584,7 @@ You can import an existing VPC and its subnets using the `VpcV2.fromVpcV2Attribu
584
584
 
585
585
  To import an existing VPC, use the `VpcV2.fromVpcV2Attributes()` method. You'll need to provide the VPC ID, primary CIDR block, and information about the subnets. You can import secondary address as well created through IPAM, BYOIP(IPv4) or enabled through Amazon Provided IPv6. You must provide VPC Id and its primary CIDR block for importing it.
586
586
 
587
- If you wish to add a new subnet to imported VPC, new subnet's IP range(IPv4) will be validated against provided secondary and primary address block to confirm that it is within the the range of VPC.
587
+ If you wish to add a new subnet to imported VPC, new subnet's IP range(IPv4) will be validated against provided secondary and primary address block to confirm that it is within the range of VPC.
588
588
 
589
589
  Here's an example of importing a VPC with only the required parameters
590
590
 
package/lib/ipam.d.ts CHANGED
@@ -51,7 +51,7 @@ export interface IpamProps {
51
51
  * The operating Regions for an IPAM.
52
52
  * Operating Regions are AWS Regions where the IPAM is allowed to manage IP address CIDRs
53
53
  * For more information about operating Regions, see [Create an IPAM](https://docs.aws.amazon.com//vpc/latest/ipam/create-ipam.html) in the *Amazon VPC IPAM User Guide* .
54
- * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipam.html#cfn-ec2-ipam-operatingregions
54
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipam.html#cfn-ec2-ipam-operatingregions
55
55
  *
56
56
  * @default - Stack.region if defined in the stack
57
57
  */
@@ -97,7 +97,7 @@ export interface PoolOptions {
97
97
  * Only resources in the same Region as the locale of the pool can get IP address allocations from the pool.
98
98
  * You can only allocate a CIDR for a VPC, for example, from an IPAM pool that shares a locale with the VPC’s Region.
99
99
  * Note that once you choose a Locale for a pool, you cannot modify it. If you choose an AWS Region for locale that has not been configured as an operating Region for the IPAM, you'll get an error.
100
- * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-locale
100
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-locale
101
101
  *
102
102
  * @default - Current operating region of IPAM
103
103
  */
@@ -115,7 +115,7 @@ export interface PoolOptions {
115
115
  *
116
116
  * "ec2", for example, allows users to use space for Elastic IP addresses and VPCs.
117
117
  *
118
- * @see http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-awsservice
118
+ * @see https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ec2-ipampool.html#cfn-ec2-ipampool-awsservice
119
119
  *
120
120
  * @default - required in case of an IPv6, throws an error if not provided.
121
121
  */
package/lib/ipam.js CHANGED
@@ -315,7 +315,7 @@ let Ipam = (() => {
315
315
  Ipam = _classThis = _classDescriptor.value;
316
316
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
317
317
  }
318
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.Ipam", version: "2.245.0-alpha.0" };
318
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.Ipam", version: "2.247.0-alpha.0" };
319
319
  /** Uniquely identifies this class. */
320
320
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.Ipam';
321
321
  /**
@@ -444,4 +444,4 @@ function createIpamPool(scope, id, scopeOptions, poolOptions, scopeId) {
444
444
  awsService: poolOptions.awsService,
445
445
  });
446
446
  }
447
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImlwYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQWlFO0FBQ2pFLGlEQUEwRjtBQUMxRiw4RUFBOEY7QUFDOUYsMEVBQTBFO0FBRzFFOzs7OztHQUtHO0FBQ0gsSUFBWSxhQVlYO0FBWkQsV0FBWSxhQUFhO0lBQ3ZCOzs7T0FHRztJQUNILCtCQUFjLENBQUE7SUFFZDs7O09BR0c7SUFDSCwrQkFBYyxDQUFBO0FBQ2hCLENBQUMsRUFaVyxhQUFhLDZCQUFiLGFBQWEsUUFZeEI7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxzQkFVWDtBQVZELFdBQVksc0JBQXNCO0lBQ2hDOztPQUVHO0lBQ0gseUNBQWUsQ0FBQTtJQUVmOztPQUVHO0lBQ0gsMkNBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQVZXLHNCQUFzQixzQ0FBdEIsc0JBQXNCLFFBVWpDO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGNBS1g7QUFMRCxXQUFZLGNBQWM7SUFDeEI7O09BRUc7SUFDSCw2QkFBVyxDQUFBO0FBQ2IsQ0FBQyxFQUxXLGNBQWMsOEJBQWQsY0FBYyxRQUt6QjtBQXlCRDs7R0FFRztBQUNILElBQVksYUFVWDtBQVZELFdBQVksYUFBYTtJQUN2Qjs7T0FFRztJQUNILG9DQUFtQixDQUFBO0lBRW5COztPQUVHO0lBQ0gsa0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQVZXLGFBQWEsNkJBQWIsYUFBYSxRQVV4QjtBQTRERCxNQUFNLFFBQVEsR0FBVyxNQUFNLENBQUM7QUE4SmhDOzs7Ozs7R0FNRztJQUVHLFFBQVE7NEJBRGIsb0NBQWtCOzs7O3NCQUNJLHNCQUFROzs7d0JBQWhCLFNBQVEsV0FBUTs7Ozt5Q0FnRTVCLElBQUEsa0NBQWMsR0FBRTtZQUNqQiwwTEFBTyxhQUFhLDZEQU9uQjtZQXhFSCw2S0F5RUM7Ozs7UUF4RUMsc0NBQXNDO1FBQy9C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QWMsQ0FDckIsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLFlBQTRCLEVBQzVCLFdBQXdCLEVBQ3hCLE9BQWU7SUFFZixrRUFBa0U7SUFDbEUsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsTUFBTSwwQkFBMEIsR0FBRyxZQUFZLENBQUMsb0JBQW9CO1lBQ2xFLENBQUMsQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO2lCQUN4RSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxLQUFLLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDM0QsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUVWLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLFdBQVcsQ0FBQyxNQUFNLHNDQUFzQyxZQUFZLENBQUMsb0JBQW9CLEtBQUs7Z0JBQ3BJLDhFQUE4RSxDQUFDLENBQUM7UUFDcEYsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7UUFDN0IsWUFBWSxFQUFFLFdBQVcsQ0FBQyxZQUFZO1FBQ3RDLGFBQWEsRUFBRSxXQUFXLENBQUMsYUFBYTtRQUN4QyxvQkFBb0IsRUFBRSxXQUFXLENBQUMsb0JBQW9CO1FBQ3RELFdBQVcsRUFBRSxPQUFPO1FBQ3BCLE1BQU0sRUFBRSxXQUFXLENBQUMsTUFBTTtRQUMxQixjQUFjLEVBQUUsV0FBVyxDQUFDLGNBQWM7UUFDMUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxVQUFVO0tBQ25DLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMYXp5LCBOYW1lcywgUmVzb3VyY2UsIFN0YWNrLCBUYWdzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ2ZuSVBBTSwgQ2ZuSVBBTVBvb2wsIENmbklQQU1Qb29sQ2lkciwgQ2ZuSVBBTVNjb3BlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBhZGRyZXNzIGZhbWlseSBmb3IgSVAgYWRkcmVzc2VzIGluIGFuIElQQU0gcG9vbC5cbiAqIElQX1Y0IC0gUmVwcmVzZW50cyB0aGUgSVB2NCBhZGRyZXNzIGZhbWlseS5cbiAqIElQX1Y2IC0gUmVwcmVzZW50cyB0aGUgSVB2NiBhZGRyZXNzIGZhbWlseS5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtcG9vbC5odG1sI2Nmbi1lYzItaXBhbXBvb2wtYWRkcmVzc2ZhbWlseVxuICovXG5leHBvcnQgZW51bSBBZGRyZXNzRmFtaWx5IHtcbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgdGhlIElQdjQgYWRkcmVzcyBmYW1pbHkuXG4gICAqIEFsbG93ZWQgdW5kZXIgcHVibGljIGFuZCBwcml2YXRlIHBvb2wuXG4gICAqL1xuICBJUF9WNCA9ICdpcHY0JyxcblxuICAvKipcbiAgICogUmVwcmVzZW50cyB0aGUgSVB2NiBhZGRyZXNzIGZhbWlseS5cbiAgICogT25seSBhbGxvd2VkIHVuZGVyIHB1YmxpYyBwb29sLlxuICAgKi9cbiAgSVBfVjYgPSAnaXB2NicsXG59XG5cbi8qKlxuICogVGhlIElQIGFkZHJlc3Mgc291cmNlIGZvciBwb29scyBpbiB0aGUgcHVibGljIHNjb3BlLlxuICogT25seSB1c2VkIGZvciBwcm92aXNpb25pbmcgSVAgYWRkcmVzcyBDSURScyB0byBwb29scyBpbiB0aGUgcHVibGljIHNjb3BlLlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1wb29sLmh0bWwjY2ZuLWVjMi1pcGFtcG9vbC1wdWJsaWNpcHNvdXJjZVxuICovXG5leHBvcnQgZW51bSBJcGFtUG9vbFB1YmxpY0lwU291cmNlIHtcbiAgLyoqXG4gICAqIEJZT0lQIElwdjYgdG8gYmUgcmVnaXN0ZXJlZCB1bmRlciBJUEFNXG4gICAqL1xuICBCWU9JUCA9ICdieW9pcCcsXG5cbiAgLyoqXG4gICAqIEFtYXpvbiBQcm92aWRlZCBJcHY2IHJhbmdlXG4gICAqL1xuICBBTUFaT04gPSAnYW1hem9uJyxcbn1cblxuLyoqXG4gKiBMaW1pdHMgd2hpY2ggc2VydmljZSBpbiBBV1MgdGhhdCB0aGUgcG9vbCBjYW4gYmUgdXNlZCBpblxuICovXG5leHBvcnQgZW51bSBBd3NTZXJ2aWNlTmFtZSB7XG4gIC8qKlxuICAgKiAgQWxsb3dzIHVzZXJzIHRvIHVzZSBzcGFjZSBmb3IgRWxhc3RpYyBJUCBhZGRyZXNzZXMgYW5kIFZQQ3NcbiAgICovXG4gIEVDMiA9ICdlYzInLFxufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gY3JlYXRlIGEgbmV3IElwYW0gaW4gdGhlIGFjY291bnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJcGFtUHJvcHMge1xuXG4gIC8qKlxuICAgKiBUaGUgb3BlcmF0aW5nIFJlZ2lvbnMgZm9yIGFuIElQQU0uXG4gICAqIE9wZXJhdGluZyBSZWdpb25zIGFyZSBBV1MgUmVnaW9ucyB3aGVyZSB0aGUgSVBBTSBpcyBhbGxvd2VkIHRvIG1hbmFnZSBJUCBhZGRyZXNzIENJRFJzXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG9wZXJhdGluZyBSZWdpb25zLCBzZWUgW0NyZWF0ZSBhbiBJUEFNXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vL3ZwYy9sYXRlc3QvaXBhbS9jcmVhdGUtaXBhbS5odG1sKSBpbiB0aGUgKkFtYXpvbiBWUEMgSVBBTSBVc2VyIEd1aWRlKiAuXG4gICAqIEBzZWUgaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW0uaHRtbCNjZm4tZWMyLWlwYW0tb3BlcmF0aW5ncmVnaW9uc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIFN0YWNrLnJlZ2lvbiBpZiBkZWZpbmVkIGluIHRoZSBzdGFja1xuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW5nUmVnaW9ucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIElQQU0gdGhhdCBjYW4gYmUgdXNlZCBmb3IgdGFnZ2luZyByZXNvdXJjZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIElmIG5vIG5hbWUgcHJvdmlkZWQsIG5vIHRhZ3Mgd2lsbCBiZSBhZGRlZCB0byB0aGUgSVBBTVxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbU5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVmZXJzIHRvIHR3byBwb3NzaWJsZSBzY29wZSB0eXBlcyB1bmRlciBJUEFNXG4gKi9cbmV4cG9ydCBlbnVtIElwYW1TY29wZVR5cGUge1xuICAvKipcbiAgICogRGVmYXVsdCBzY29wZXMgY3JlYXRlZCBieSBJUEFNXG4gICAqL1xuICBERUZBVUxUID0gJ2RlZmF1bHQnLFxuXG4gIC8qKlxuICAgKiBDdXN0b20gc2NvcGUgY3JlYXRlZCB1c2luZyBtZXRob2RcbiAgICovXG4gIENVU1RPTSA9ICdjdXN0b20nLFxufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGFuIElQQU0gcG9vbC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2wuaHRtbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBvb2xPcHRpb25zIHtcblxuICAvKipcbiAgICogYWRkcmVzc0ZhbWlseSAtIFRoZSBhZGRyZXNzIGZhbWlseSBvZiB0aGUgcG9vbCAoaXB2NCBvciBpcHY2KS5cbiAgICovXG4gIHJlYWRvbmx5IGFkZHJlc3NGYW1pbHk6IEFkZHJlc3NGYW1pbHk7XG5cbiAgLyoqXG4gICAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBDSURScyBwcm92aXNpb25lZCB0byB0aGUgcG9vbC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBDSURScyBhcmUgcHJvdmlzaW9uZWRcbiAgICovXG4gIHJlYWRvbmx5IGlwdjRQcm92aXNpb25lZENpZHJzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBsb2NhbGUgKEFXUyBSZWdpb24pIG9mIHRoZSBwb29sLiBTaG91bGQgYmUgb25lIG9mIHRoZSBJUEFNIG9wZXJhdGluZyByZWdpb24uXG4gICAqICBPbmx5IHJlc291cmNlcyBpbiB0aGUgc2FtZSBSZWdpb24gYXMgdGhlIGxvY2FsZSBvZiB0aGUgcG9vbCBjYW4gZ2V0IElQIGFkZHJlc3MgYWxsb2NhdGlvbnMgZnJvbSB0aGUgcG9vbC5cbiAgICogWW91IGNhbiBvbmx5IGFsbG9jYXRlIGEgQ0lEUiBmb3IgYSBWUEMsIGZvciBleGFtcGxlLCBmcm9tIGFuIElQQU0gcG9vbCB0aGF0IHNoYXJlcyBhIGxvY2FsZSB3aXRoIHRoZSBWUEPigJlzIFJlZ2lvbi5cbiAgICogTm90ZSB0aGF0IG9uY2UgeW91IGNob29zZSBhIExvY2FsZSBmb3IgYSBwb29sLCB5b3UgY2Fubm90IG1vZGlmeSBpdC4gSWYgeW91IGNob29zZSBhbiBBV1MgUmVnaW9uIGZvciBsb2NhbGUgdGhhdCBoYXMgbm90IGJlZW4gY29uZmlndXJlZCBhcyBhbiBvcGVyYXRpbmcgUmVnaW9uIGZvciB0aGUgSVBBTSwgeW91J2xsIGdldCBhbiBlcnJvci5cbiAgICogQHNlZSBodHRwOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXBvb2wuaHRtbCNjZm4tZWMyLWlwYW1wb29sLWxvY2FsZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEN1cnJlbnQgb3BlcmF0aW5nIHJlZ2lvbiBvZiBJUEFNXG4gICAqL1xuICByZWFkb25seSBsb2NhbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJUCBhZGRyZXNzIHNvdXJjZSBmb3IgcG9vbHMgaW4gdGhlIHB1YmxpYyBzY29wZS5cbiAgICogT25seSB1c2VkIGZvciBJUHY2IGFkZHJlc3NcbiAgICogT25seSBhbGxvd2VkIHZhbHVlcyB0byB0aGlzIGFyZSAnYnlvaXAnIG9yICdhbWF6b24nXG4gICAqXG4gICAqIEBkZWZhdWx0IGFtYXpvblxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljSXBTb3VyY2U/OiBJcGFtUG9vbFB1YmxpY0lwU291cmNlO1xuXG4gIC8qKlxuICAgKiBMaW1pdHMgd2hpY2ggc2VydmljZSBpbiBBV1MgdGhhdCB0aGUgcG9vbCBjYW4gYmUgdXNlZCBpbi5cbiAgICpcbiAgICogXCJlYzJcIiwgZm9yIGV4YW1wbGUsIGFsbG93cyB1c2VycyB0byB1c2Ugc3BhY2UgZm9yIEVsYXN0aWMgSVAgYWRkcmVzc2VzIGFuZCBWUENzLlxuICAgKlxuICAgKiBAc2VlIGh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtcG9vbC5odG1sI2Nmbi1lYzItaXBhbXBvb2wtYXdzc2VydmljZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHJlcXVpcmVkIGluIGNhc2Ugb2YgYW4gSVB2NiwgdGhyb3dzIGFuIGVycm9yIGlmIG5vdCBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGF3c1NlcnZpY2U/OiBBd3NTZXJ2aWNlTmFtZTtcblxuICAvKipcbiAgICogSVBBTSBQb29sIHJlc291cmNlIG5hbWUgdG8gYmUgdXNlZCBmb3IgdGFnZ2luZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF1dG9nZW5lcmF0ZWQgYnkgQ0RLIGlmIG5vdCBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbVBvb2xOYW1lPzogc3RyaW5nO1xufVxuXG5jb25zdCBOQU1FX1RBRzogc3RyaW5nID0gJ05hbWUnO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGFuIElQQU0gcG9vbC5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtcG9vbC5odG1sXG4gKi9cbmludGVyZmFjZSBJcGFtUG9vbFByb3BzIGV4dGVuZHMgUG9vbE9wdGlvbnMge1xuICAvKipcbiAgICogU2NvcGUgaWQgd2hlcmUgcG9vbCBuZWVkcyB0byBiZSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBpcGFtU2NvcGVJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gcHJvdmlzaW9uIENJRFJzIHRvIGFuIElQQU0gcG9vbC5cbiAqIFVzZWQgdG8gY3JlYXRlIGEgbmV3IElwYW1Qb29sQ2lkclxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1wb29sY2lkci5odG1sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSXBhbVBvb2xDaWRyUHJvdmlzaW9uaW5nT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJcHY2IE5ldG1hc2sgbGVuZ3RoIGZvciB0aGUgQ0lEUlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHBvb2wgcHJvdmlzaW9uZWQgd2l0aG91dCBuZXRtYXNrIGxlbmd0aCwgbmVlZCBjaWRyIHJhbmdlIGluIHRoaXMgY2FzZVxuICAgKi9cbiAgcmVhZG9ubHkgbmV0bWFza0xlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogSXB2NiBDSURSIGJsb2NrIGZvciB0aGUgSVBBTSBwb29sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcG9vbCBwcm92aXNpb25lZCB3aXRob3V0IG5ldG1hc2sgbGVuZ3RoLCBuZWVkIG5ldG1hc2sgbGVuZ3RoIGluIHRoaXMgY2FzZVxuICAgKi9cbiAgcmVhZG9ubHkgY2lkcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZWZpbml0aW9uIHVzZWQgdG8gYWRkIG9yIGNyZWF0ZSBhIG5ldyBJUEFNIHBvb2xcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSXBhbVBvb2wge1xuICAvKipcbiAgICogUG9vbCBJRCB0byBiZSBwYXNzZWQgdG8gdGhlIFZQQyBjb25zdHJ1Y3RcbiAgICogQGF0dHJpYnV0ZSBJcGFtUG9vbElkXG4gICAqL1xuICByZWFkb25seSBpcGFtUG9vbElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBvb2wgQ0lEUiBmb3IgSVB2NiB0byBiZSBwcm92aXNpb25lZCB3aXRoIFB1YmxpYyBJUCBzb3VyY2Ugc2V0IHRvICdBbWF6b24nXG4gICAqL1xuICByZWFkb25seSBpcGFtQ2lkcnM6IENmbklQQU1Qb29sQ2lkcltdO1xuXG4gIC8qKlxuICAgKiBQb29sIENJRFIgZm9yIElQdjQgdG8gYmUgcHJvdmlzaW9uZWQgdXNpbmcgSVBBTVxuICAgKiBSZXF1aXJlZCB0byBjaGVjayBmb3Igc3VibmV0IElQIHJhbmdlIGlzIHdpdGhpbiB0aGUgVlBDIHJhbmdlXG4gICAqL1xuICByZWFkb25seSBpcGFtSXB2NENpZHJzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIGFzc29jaWF0ZSBhIElQdjYgYWRkcmVzcyB3aXRoIElQQU0gcG9vbFxuICAgKi9cbiAgcHJvdmlzaW9uQ2lkcihpZDogc3RyaW5nLCBvcHRpb25zOiBJcGFtUG9vbENpZHJQcm92aXNpb25pbmdPcHRpb25zKTogQ2ZuSVBBTVBvb2xDaWRyO1xuXG59XG5cbi8qKlxuICogSVBBTSBzY29wZSBpcyB0aGUgaGlnaGVzdC1sZXZlbCBjb250YWluZXIgd2l0aGluIElQQU0uIEFuIElQQU0gY29udGFpbnMgdHdvIGRlZmF1bHQgc2NvcGVzLlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1zY29wZS5odG1sXG4gKi9cbmludGVyZmFjZSBJcGFtU2NvcGVQcm9wcyBleHRlbmRzIElwYW1TY29wZU9wdGlvbnMge1xuICAvKipcbiAgICogSVBBTSBpZCB0byB3aGljaCBzY29wZSBuZWVkcyB0byBiZSBhZGRlZFxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wZXJhdGluZyByZWdpb25zIGZvciB0aGUgSXBhbVxuICAgKiBSZXF1aXJlZCBpbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgbG9jYWxlIGJlaW5nIHNldCBvbiBwb29sXG4gICAqL1xuICByZWFkb25seSBpcGFtT3BlcmF0aW5nUmVnaW9uczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBpcGFtIHNjb3BlIGlkIHRvIGFkZCBhIHBvb2wgaW4gb3JkZXIgdG8gc3VwcG9ydCBkZWZhdWx0IHNjb3Blc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRocm93cyBhbiBlcnJvciBpZiBubyBzY29wZSBpZCBpcyBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbVNjb3BlSWQ/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBCZWluZyB1c2VkIGluIElQQU0gY2xhc3MgdG8gYWRkIHBvb2xzIHRvIGRlZmF1bHQgc2NvcGUgY3JlYXRlZCBieSBJUEFNLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElwYW1TY29wZU9wdGlvbnMge1xuXG4gIC8qKlxuICAgKiBJUEFNIHNjb3BlIG5hbWUgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRhZ2dpbmdcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyB0YWdzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHNjb3BlXG4gICAqL1xuICByZWFkb25seSBpcGFtU2NvcGVOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGFuIElQIEFkZHJlc3MgTWFuYWdlciAoSVBBTSkuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbS5odG1sfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJcGFtT3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIENJRFIgTWFzayBmb3IgVnBjXG4gICAqIE9ubHkgcmVxdWlyZWQgd2hlbiB1c2luZyBBV1MgSXBhbVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIG5ldG1hc2sgbGVuZ3RoIGZvciBJUEFNIGF0dGFjaGVkIHRvIFZQQyBzZWNvbmRhcnkgYWRkcmVzc1xuICAgKi9cbiAgcmVhZG9ubHkgbmV0bWFza0xlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogSXB2NCBvciBhbiBJcHY2IElQQU0gcG9vbFxuICAgKiBPbmx5IHJlcXVpcmVkIHdoZW4gdXNpbmcgQVdTIElwYW1cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBwb29sIGF0dGFjaGVkIHRvIFZQQyBzZWNvbmRhcnkgYWRkcmVzc1xuICAgKi9cbiAgcmVhZG9ubHkgaXBhbVBvb2w/OiBJSXBhbVBvb2w7XG5cbiAgLyoqXG4gICAqIFJlcXVpcmVkIHRvIHNldCBTZWNvbmRhcnkgY2lkciBibG9jayByZXNvdXJjZSBuYW1lXG4gICAqIGluIG9yZGVyIHRvIGdlbmVyYXRlIHVuaXF1ZSBsb2dpY2FsIGlkIGZvciB0aGUgcmVzb3VyY2UuXG4gICAqL1xuICByZWFkb25seSBjaWRyQmxvY2tOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBJcGFtU2NvcGUgQ2xhc3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSXBhbVNjb3BlQmFzZSB7XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBzY29wZSBvZiBzdGFjayB0byBiZSBwYXNzZWQgaW4gb3JkZXIgdG8gY3JlYXRlXG4gICAqIGEgbmV3IElQQU0gcG9vbFxuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdDtcblxuICAvKipcbiAgICogRGVmYXVsdCBTY29wZSBpZHMgY3JlYXRlZCBieSB0aGUgSVBBTSBvciBhIG5ldyBSZXNvdXJjZSBpZFxuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHNjb3BlIHR5cGUgY2FuIGJlIGVpdGhlciBkZWZhdWx0IG9yIGN1c3RvbVxuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGVUeXBlPzogSXBhbVNjb3BlVHlwZTtcblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gYWRkIGEgbmV3IHBvb2wgdG8gYW4gSVBBTSBzY29wZVxuICAgKi9cbiAgYWRkUG9vbChpZDogc3RyaW5nLCBvcHRpb25zOiBQb29sT3B0aW9ucyk6IElJcGFtUG9vbDtcblxufVxuXG4vKipcbiAqIENyZWF0ZXMgbmV3IElQQU0gUG9vbFxuICogUG9vbHMgZW5hYmxlIHlvdSB0byBvcmdhbml6ZSB5b3VyIElQIGFkZHJlc3NlcyBhY2NvcmRpbmcgdG8geW91ciByb3V0aW5nIGFuZCBzZWN1cml0eSBuZWVkc1xuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1wb29sLmh0bWxcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6SVBBTVBvb2xcbiAqIEBpbnRlcm5hbFxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5jbGFzcyBJcGFtUG9vbCBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSUlwYW1Qb29sIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtZWMyLWFscGhhLklwYW1Qb29sJztcbiAgLyoqXG4gICAqIFBvb2wgSUQgdG8gYmUgcGFzc2VkIHRvIHRoZSBWUEMgY29uc3RydWN0XG4gICAqIEBhdHRyaWJ1dGUgSXBhbVBvb2xJZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwYW1Qb29sSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogUG9vbCBDSURSIGZvciBJUHY2IHRvIGJlIHByb3Zpc2lvbmVkIHdpdGggUHVibGljIElQIHNvdXJjZSBzZXQgdG8gJ0FtYXpvbidcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpcGFtQ2lkcnM6IENmbklQQU1Qb29sQ2lkcltdID0gW107XG5cbiAgLyoqXG4gICAqIFBvb2wgQ0lEUiBmb3IgSVB2NCB0byBiZSBwcm92aXNpb25lZCB1c2luZyBJUEFNXG4gICAqIFJlcXVpcmVkIHRvIGNoZWNrIGZvciBzdWJuZXQgSVAgcmFuZ2UgaXMgd2l0aGluIHRoZSBWUEMgcmFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpcGFtSXB2NENpZHJzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gaXBhbVBvb2wgcmVzb3VyY2UgY3JlYXRlZCBpbiB0aGlzIGNsYXNzXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9pcGFtUG9vbDogQ2ZuSVBBTVBvb2w7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElwYW1Qb29sUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMuaXBhbVBvb2xOYW1lID8/IExhenkuc3RyaW5nKHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiAxMjgsIGFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVyczogJ18nIH0pLFxuICAgICAgfSksXG4gICAgfSk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICBpZiAocHJvcHMuYWRkcmVzc0ZhbWlseSA9PT0gQWRkcmVzc0ZhbWlseS5JUF9WNiAmJiAhcHJvcHMuYXdzU2VydmljZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdhd3NTZXJ2aWNlIGlzIHJlcXVpcmVkIHdoZW4gYWRkcmVzc0ZhbWlseSBpcyBzZXQgdG8gaXB2NicpO1xuICAgIH1cblxuICAgIC8vIEFkZCB0YWdzIHRvIHRoZSBJUEFNIFBvb2wgaWYgbmFtZSBpcyBwcm92aWRlZFxuICAgIGlmIChwcm9wcy5pcGFtUG9vbE5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcy5pcGFtUG9vbE5hbWUpO1xuICAgIH1cblxuICAgIHRoaXMuX2lwYW1Qb29sID0gbmV3IENmbklQQU1Qb29sKHRoaXMsIGlkLCB7XG4gICAgICBhZGRyZXNzRmFtaWx5OiBwcm9wcy5hZGRyZXNzRmFtaWx5LFxuICAgICAgcHJvdmlzaW9uZWRDaWRyczogcHJvcHMuaXB2NFByb3Zpc2lvbmVkQ2lkcnM/Lm1hcChjaWRyID0+ICh7IGNpZHIgfSkpLFxuICAgICAgbG9jYWxlOiBwcm9wcy5sb2NhbGUsXG4gICAgICBpcGFtU2NvcGVJZDogcHJvcHMuaXBhbVNjb3BlSWQsXG4gICAgICBwdWJsaWNJcFNvdXJjZTogcHJvcHMucHVibGljSXBTb3VyY2UsXG4gICAgICBhd3NTZXJ2aWNlOiBwcm9wcy5hd3NTZXJ2aWNlLFxuICAgIH0pO1xuICAgIHRoaXMuaXBhbVBvb2xJZCA9IHRoaXMuX2lwYW1Qb29sLmF0dHJJcGFtUG9vbElkO1xuXG4gICAgLy8gUG9wdWxhdGluZyB0byBjaGVjayBmb3Igc3VibmV0IHJhbmdlIGFnYWluc3QgYWxsIElQdjQgcmFuZ2VzIGFzc2lnbmVkIHRvIFZQQyBpbmNsdWRpbmcgSVBBTVxuICAgIHByb3BzLmlwdjRQcm92aXNpb25lZENpZHJzPy5tYXAoY2lkciA9PiAodGhpcy5pcGFtSXB2NENpZHJzLnB1c2goY2lkcikpKTtcbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gdGhpcy5faXBhbVBvb2w7XG4gIH1cblxuICAvKipcbiAgICogQSBDSURSIHByb3Zpc2lvbmVkIHRvIGFuIElQQU0gcG9vbC5cbiAgICogQHBhcmFtIGlkIE5hbWUgb2YgUmVzb3VyY2VcbiAgICogQHBhcmFtIG9wdGlvbnMgRWl0aGVyIGEgQ0lEUiBvciBuZXRtYXNrIGxlbmd0aCBtdXN0IGJlIHByb3ZpZGVkXG4gICAqIEByZXR1cm5zIEFXUzo6RUMyOjpJUEFNUG9vbENpZHJcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBwcm92aXNpb25DaWRyKGlkOiBzdHJpbmcsIG9wdGlvbnM6IElwYW1Qb29sQ2lkclByb3Zpc2lvbmluZ09wdGlvbnMpOiBDZm5JUEFNUG9vbENpZHIge1xuICAgIGNvbnN0IGNpZHIgPSBuZXcgQ2ZuSVBBTVBvb2xDaWRyKHRoaXMsIGlkLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaXBhbVBvb2xJZDogdGhpcy5pcGFtUG9vbElkLFxuICAgIH0pO1xuICAgIHRoaXMuaXBhbUNpZHJzLnB1c2goY2lkcik7XG4gICAgcmV0dXJuIGNpZHI7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGN1c3RvbSBJcGFtIFNjb3BlLCBjdXN0b20gSVBBTSBzY29wZXMgY2FuIG9ubHkgYmUgcHJpdmF0ZVxuICogKGNhbiBiZSB1c2VkIGZvciBhZGRpbmcgY3VzdG9tIHNjb3BlcyB0byBhbiBleGlzdGluZyBJUEFNKVxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1zY29wZS5odG1sXG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OklQQU1TY29wZVxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5jbGFzcyBJcGFtU2NvcGUgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElJcGFtU2NvcGVCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtZWMyLWFscGhhLklwYW1TY29wZSc7XG4gIC8qKlxuICAgKiBTdG9yZXMgdGhlIHJlZmVyZW5jZSB0byBuZXdseSBjcmVhdGVkIFJlc291cmNlXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9pcGFtU2NvcGU6IENmbklQQU1TY29wZTtcblxuICAvKipcbiAgICogSUQgZm9yIFJlc291cmNlIElwYW1TY29wZVxuICAgKiBAYXR0cmlidXRlIElwYW1TY29wZUlkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NvcGVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIHRvIGNvbmZpZ3VyZSBpcGFtIHNjb3BlXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBJcGFtU2NvcGVQcm9wcztcblxuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIHN0YWNrIHNjb3BlIHRvIGJlIHBhc3NlZCB0aHJvdWdoIGFkZFBvb2wgbWV0aG9kIGlub3JkZXIgdG8gY3JlYXRlIGEgbmV3IElwYW1Qb29sXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdDtcblxuICAvKipcbiAgICogRGVmaW5lcyBzY29wZSB0eXBlIGNhbiBiZSBlaXRoZXIgZGVmYXVsdCBvciBjdXN0b21cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzY29wZVR5cGU6IElwYW1TY29wZVR5cGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElwYW1TY29wZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcbiAgICB0aGlzLl9pcGFtU2NvcGUgPSBuZXcgQ2ZuSVBBTVNjb3BlKHNjb3BlLCAnSXBhbVNjb3BlJywge1xuICAgICAgaXBhbUlkOiBwcm9wcy5pcGFtSWQsXG4gICAgfSk7XG4gICAgVGFncy5vZih0aGlzLl9pcGFtU2NvcGUpLmFkZChOQU1FX1RBRywgcHJvcHMuaXBhbVNjb3BlTmFtZSA/PyAnQ3VzdG9tSXBhbVNjb3BlJyk7XG4gICAgdGhpcy5zY29wZUlkID0gdGhpcy5faXBhbVNjb3BlLmF0dHJJcGFtU2NvcGVJZDtcbiAgICB0aGlzLnNjb3BlVHlwZSA9IElwYW1TY29wZVR5cGUuQ1VTVE9NO1xuICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHBvb2wgdG8gdGhlIElQQU0gc2NvcGUuXG4gICAqIEBleHRlcm5hbFxuICAgKi9cbiAgYWRkUG9vbChpZDogc3RyaW5nLCBvcHRpb25zOiBQb29sT3B0aW9ucyk6IElJcGFtUG9vbCB7XG4gICAgcmV0dXJuIGNyZWF0ZUlwYW1Qb29sKHRoaXMuc2NvcGUsIGlkLCB0aGlzLnByb3BzLCBvcHRpb25zLCB0aGlzLnNjb3BlSWQpO1xuICB9XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgSVBBTSBkZWZhdWx0IHNjb3Blcy5cbiAqL1xuY2xhc3MgSXBhbVNjb3BlQmFzZSBpbXBsZW1lbnRzIElJcGFtU2NvcGVCYXNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdCxcbiAgICByZWFkb25seSBzY29wZUlkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogSXBhbVNjb3BlUHJvcHMsXG4gICAgcmVhZG9ubHkgc2NvcGVUeXBlPzogSXBhbVNjb3BlVHlwZSxcbiAgKSB7XG4gICAgdGhpcy5zY29wZVR5cGUgPSBJcGFtU2NvcGVUeXBlLkRFRkFVTFQ7XG4gICAgaWYgKCFwcm9wcy5pcGFtU2NvcGVJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpcGFtU2NvcGVJZCBpcyByZXF1aXJlZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNjb3BlSWQgPSBwcm9wcy5pcGFtU2NvcGVJZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHBvb2wgdG8gdGhlIElQQU0gc2NvcGUuXG4gICAqIEBleHRlcm5hbFxuICAgKi9cbiAgYWRkUG9vbChpZDogc3RyaW5nLCBvcHRpb25zOiBQb29sT3B0aW9ucyk6IElJcGFtUG9vbCB7XG4gICAgcmV0dXJuIGNyZWF0ZUlwYW1Qb29sKHRoaXMuc2NvcGUsIGlkLCB0aGlzLnByb3BzLCBvcHRpb25zLCB0aGlzLnNjb3BlSWQpO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBuZXcgSVBBTSB3aXRoIGRlZmF1bHQgcHVibGljIGFuZCBwcml2YXRlIHNjb3BlXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXNjb3BlLmh0bWxcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6SVBBTVxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgSXBhbSBleHRlbmRzIFJlc291cmNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtZWMyLWFscGhhLklwYW0nO1xuICAvKipcbiAgICogUHJvdmlkZXMgYWNjZXNzIHRvIGRlZmF1bHQgcHVibGljIElQQU0gc2NvcGUgdGhyb3VnaCBhZGQgcG9vbCBtZXRob2QuXG4gICAqIFVzYWdlOiBUbyBhZGQgYW4gSXBhbSBQb29sIHRvIGEgZGVmYXVsdCBwdWJsaWMgc2NvcGVcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1zY29wZS5odG1sXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHVibGljU2NvcGU6IElJcGFtU2NvcGVCYXNlO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlcyBhY2Nlc3MgdG8gZGVmYXVsdCBwcml2YXRlIElQQU0gc2NvcGUgdGhyb3VnaCBhZGQgcG9vbCBtZXRob2QuXG4gICAqIFVzYWdlOiBUbyBhZGQgYW4gSXBhbSBQb29sIHRvIGEgZGVmYXVsdCBwcml2YXRlIHNjb3BlXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtc2NvcGUuaHRtbFxuICAgKiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJpdmF0ZVNjb3BlOiBJSXBhbVNjb3BlQmFzZTtcblxuICAvLyBSZXNvdXJjZSBJUEFNXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lwYW06IENmbklQQU07XG4gIC8qKlxuICAgKiBBY2Nlc3MgdG8gSXBhbSByZXNvdXJjZSBpZCB0aGF0IGNhbiBiZSB1c2VkIGxhdGVyIHRvIGFkZCBhIGN1c3RvbSBwcml2YXRlIHNjb3BlIHRvIHRoaXMgSVBBTVxuICAgKiBAYXR0cmlidXRlIElwYW1JZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwYW1JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIG9wZXJhdGluZyByZWdpb25zIGZvciBJUEFNXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb3BlcmF0aW5nUmVnaW9uczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2Ygc2NvcGVzIGNyZWF0ZWQgdW5kZXIgdGhpcyBJUEFNXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NvcGVzOiBJSXBhbVNjb3BlQmFzZVtdID0gW107XG5cbiAgLyoqXG4gICAqIElQQU0gbmFtZSB0byBiZSB1c2VkIGZvciB0YWdnaW5nXG4gICAqIEBkZWZhdWx0IC0gbm8gdGFnIHNwZWNpZmllZFxuICAgKiBAYXR0cmlidXRlIElwYW1OYW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXBhbU5hbWU/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBJcGFtUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuICAgIGlmIChwcm9wcz8uaXBhbU5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcy5pcGFtTmFtZSk7XG4gICAgfVxuICAgIGlmIChwcm9wcz8ub3BlcmF0aW5nUmVnaW9ucyAmJiAocHJvcHMub3BlcmF0aW5nUmVnaW9ucy5sZW5ndGggPT09IDApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBwcm92aWRlIGF0IGxlYXN0IG9uZSBvcGVyYXRpbmcgcmVnaW9uJyk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGVyYXRpbmdSZWdpb25zID0gcHJvcHM/Lm9wZXJhdGluZ1JlZ2lvbnMgPz8gW1N0YWNrLm9mKHRoaXMpLnJlZ2lvbl07XG4gICAgdGhpcy5pcGFtTmFtZSA9IHByb3BzPy5pcGFtTmFtZTtcblxuICAgIHRoaXMuX2lwYW0gPSBuZXcgQ2ZuSVBBTSh0aGlzLCAnSXBhbScsIHtcbiAgICAgIG9wZXJhdGluZ1JlZ2lvbnM6IHRoaXMub3BlcmF0aW5nUmVnaW9ucyA/IHRoaXMub3BlcmF0aW5nUmVnaW9ucy5tYXAocmVnaW9uID0+ICh7IHJlZ2lvbk5hbWU6IHJlZ2lvbiB9KSkgOiBbXSxcbiAgICB9KTtcbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gdGhpcy5faXBhbTtcblxuICAgIHRoaXMuaXBhbUlkID0gdGhpcy5faXBhbS5hdHRySXBhbUlkO1xuICAgIHRoaXMucHVibGljU2NvcGUgPSBuZXcgSXBhbVNjb3BlQmFzZSh0aGlzLCAnRGVmYXVsdFB1YmxpY1Njb3BlJywge1xuICAgICAgaXBhbU9wZXJhdGluZ1JlZ2lvbnM6IHRoaXMub3BlcmF0aW5nUmVnaW9ucyxcbiAgICAgIGlwYW1JZDogdGhpcy5faXBhbS5hdHRySXBhbUlkLFxuICAgICAgaXBhbVNjb3BlSWQ6IHRoaXMuX2lwYW0uYXR0clB1YmxpY0RlZmF1bHRTY29wZUlkLFxuICAgIH0pO1xuICAgIHRoaXMucHJpdmF0ZVNjb3BlID0gbmV3IElwYW1TY29wZUJhc2UodGhpcywgJ0RlZmF1bHRQcml2YXRlU2NvcGUnLCB7XG4gICAgICBpcGFtT3BlcmF0aW5nUmVnaW9uczogdGhpcy5vcGVyYXRpbmdSZWdpb25zLFxuICAgICAgaXBhbUlkOiB0aGlzLl9pcGFtLmF0dHJJcGFtSWQsXG4gICAgICBpcGFtU2NvcGVJZDogdGhpcy5faXBhbS5hdHRyUHJpdmF0ZURlZmF1bHRTY29wZUlkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zY29wZXMucHVzaCh0aGlzLnB1YmxpY1Njb3BlLCB0aGlzLnByaXZhdGVTY29wZSk7XG4gIH1cblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gYWRkIGN1c3RvbSBzY29wZSB0byBhbiBleGlzdGluZyBJUEFNXG4gICAqIEN1c3RvbSBzY29wZXMgY2FuIG9ubHkgYmUgcHJpdmF0ZVxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGFkZFNjb3BlKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIG9wdGlvbnM6IElwYW1TY29wZU9wdGlvbnMpOiBJSXBhbVNjb3BlQmFzZSB7XG4gICAgY29uc3QgaXBhbVNjb3BlID0gbmV3IElwYW1TY29wZShzY29wZSwgaWQsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBpcGFtSWQ6IHRoaXMuaXBhbUlkLFxuICAgICAgaXBhbU9wZXJhdGluZ1JlZ2lvbnM6IHRoaXMub3BlcmF0aW5nUmVnaW9ucyxcbiAgICB9KTtcbiAgICB0aGlzLnNjb3Blcy5wdXNoKGlwYW1TY29wZSk7XG4gICAgcmV0dXJuIGlwYW1TY29wZTtcbiAgfVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGNyZWF0ZSBJcGFtUG9vbCB1bmRlciBzY29wZVxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlwYW1Qb29sKFxuICBzY29wZTogQ29uc3RydWN0LFxuICBpZDogc3RyaW5nLFxuICBzY29wZU9wdGlvbnM6IElwYW1TY29wZVByb3BzLFxuICBwb29sT3B0aW9uczogUG9vbE9wdGlvbnMsXG4gIHNjb3BlSWQ6IHN0cmluZyxcbik6IElwYW1Qb29sIHtcbiAgLy8gT25seSBjaGVjayBsb2NhbGUgaWYgaXQncyBwcm92aWRlZCBzaW5jZSBpdCdzIGFuIG9wdGlvbmFsIGZpZWxkXG4gIGlmIChwb29sT3B0aW9ucy5sb2NhbGUpIHtcbiAgICBjb25zdCBpc0xvY2FsZUluT3BlcmF0aW5nUmVnaW9ucyA9IHNjb3BlT3B0aW9ucy5pcGFtT3BlcmF0aW5nUmVnaW9uc1xuICAgICAgPyBzY29wZU9wdGlvbnMuaXBhbU9wZXJhdGluZ1JlZ2lvbnMubWFwKHJlZ2lvbiA9PiAoeyByZWdpb25OYW1lOiByZWdpb24gfSkpXG4gICAgICAgIC5zb21lKHJlZ2lvbiA9PiByZWdpb24ucmVnaW9uTmFtZSA9PT0gcG9vbE9wdGlvbnMubG9jYWxlKVxuICAgICAgOiBmYWxzZTtcblxuICAgIGlmICghaXNMb2NhbGVJbk9wZXJhdGluZ1JlZ2lvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHByb3ZpZGVkIGxvY2FsZSAnJHtwb29sT3B0aW9ucy5sb2NhbGV9JyBpcyBub3QgaW4gdGhlIG9wZXJhdGluZyByZWdpb25zICgke3Njb3BlT3B0aW9ucy5pcGFtT3BlcmF0aW5nUmVnaW9uc30pLiBgICtcbiAgICAgICAgJ0lmIHNwZWNpZmllZCwgbG9jYWxlIG11c3QgYmUgY29uZmlndXJlZCBhcyBhbiBvcGVyYXRpbmcgcmVnaW9uIGZvciB0aGUgSVBBTS4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IElwYW1Qb29sKHNjb3BlLCBpZCwge1xuICAgIGlwYW1Qb29sTmFtZTogcG9vbE9wdGlvbnMuaXBhbVBvb2xOYW1lLFxuICAgIGFkZHJlc3NGYW1pbHk6IHBvb2xPcHRpb25zLmFkZHJlc3NGYW1pbHksXG4gICAgaXB2NFByb3Zpc2lvbmVkQ2lkcnM6IHBvb2xPcHRpb25zLmlwdjRQcm92aXNpb25lZENpZHJzLFxuICAgIGlwYW1TY29wZUlkOiBzY29wZUlkLFxuICAgIGxvY2FsZTogcG9vbE9wdGlvbnMubG9jYWxlLFxuICAgIHB1YmxpY0lwU291cmNlOiBwb29sT3B0aW9ucy5wdWJsaWNJcFNvdXJjZSxcbiAgICBhd3NTZXJ2aWNlOiBwb29sT3B0aW9ucy5hd3NTZXJ2aWNlLFxuICB9KTtcbn1cbiJdfQ==
447
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXBhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImlwYW0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkNBQWlFO0FBQ2pFLGlEQUEwRjtBQUMxRiw4RUFBOEY7QUFDOUYsMEVBQTBFO0FBRzFFOzs7OztHQUtHO0FBQ0gsSUFBWSxhQVlYO0FBWkQsV0FBWSxhQUFhO0lBQ3ZCOzs7T0FHRztJQUNILCtCQUFjLENBQUE7SUFFZDs7O09BR0c7SUFDSCwrQkFBYyxDQUFBO0FBQ2hCLENBQUMsRUFaVyxhQUFhLDZCQUFiLGFBQWEsUUFZeEI7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxzQkFVWDtBQVZELFdBQVksc0JBQXNCO0lBQ2hDOztPQUVHO0lBQ0gseUNBQWUsQ0FBQTtJQUVmOztPQUVHO0lBQ0gsMkNBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQVZXLHNCQUFzQixzQ0FBdEIsc0JBQXNCLFFBVWpDO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGNBS1g7QUFMRCxXQUFZLGNBQWM7SUFDeEI7O09BRUc7SUFDSCw2QkFBVyxDQUFBO0FBQ2IsQ0FBQyxFQUxXLGNBQWMsOEJBQWQsY0FBYyxRQUt6QjtBQXlCRDs7R0FFRztBQUNILElBQVksYUFVWDtBQVZELFdBQVksYUFBYTtJQUN2Qjs7T0FFRztJQUNILG9DQUFtQixDQUFBO0lBRW5COztPQUVHO0lBQ0gsa0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQVZXLGFBQWEsNkJBQWIsYUFBYSxRQVV4QjtBQTRERCxNQUFNLFFBQVEsR0FBVyxNQUFNLENBQUM7QUE4SmhDOzs7Ozs7R0FNRztJQUVHLFFBQVE7NEJBRGIsb0NBQWtCOzs7O3NCQUNJLHNCQUFROzs7d0JBQWhCLFNBQVEsV0FBUTs7Ozt5Q0FnRTVCLElBQUEsa0NBQWMsR0FBRTtZQUNqQiwwTEFBTyxhQUFhLDZEQU9uQjtZQXhFSCw2S0F5RUM7Ozs7UUF4RUMsc0NBQXNDO1FBQy9C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QWMsQ0FDckIsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLFlBQTRCLEVBQzVCLFdBQXdCLEVBQ3hCLE9BQWU7SUFFZixrRUFBa0U7SUFDbEUsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkIsTUFBTSwwQkFBMEIsR0FBRyxZQUFZLENBQUMsb0JBQW9CO1lBQ2xFLENBQUMsQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO2lCQUN4RSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxLQUFLLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDM0QsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUVWLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLFdBQVcsQ0FBQyxNQUFNLHNDQUFzQyxZQUFZLENBQUMsb0JBQW9CLEtBQUs7Z0JBQ3BJLDhFQUE4RSxDQUFDLENBQUM7UUFDcEYsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7UUFDN0IsWUFBWSxFQUFFLFdBQVcsQ0FBQyxZQUFZO1FBQ3RDLGFBQWEsRUFBRSxXQUFXLENBQUMsYUFBYTtRQUN4QyxvQkFBb0IsRUFBRSxXQUFXLENBQUMsb0JBQW9CO1FBQ3RELFdBQVcsRUFBRSxPQUFPO1FBQ3BCLE1BQU0sRUFBRSxXQUFXLENBQUMsTUFBTTtRQUMxQixjQUFjLEVBQUUsV0FBVyxDQUFDLGNBQWM7UUFDMUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxVQUFVO0tBQ25DLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMYXp5LCBOYW1lcywgUmVzb3VyY2UsIFN0YWNrLCBUYWdzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ2ZuSVBBTSwgQ2ZuSVBBTVBvb2wsIENmbklQQU1Qb29sQ2lkciwgQ2ZuSVBBTVNjb3BlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBhZGRyZXNzIGZhbWlseSBmb3IgSVAgYWRkcmVzc2VzIGluIGFuIElQQU0gcG9vbC5cbiAqIElQX1Y0IC0gUmVwcmVzZW50cyB0aGUgSVB2NCBhZGRyZXNzIGZhbWlseS5cbiAqIElQX1Y2IC0gUmVwcmVzZW50cyB0aGUgSVB2NiBhZGRyZXNzIGZhbWlseS5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtcG9vbC5odG1sI2Nmbi1lYzItaXBhbXBvb2wtYWRkcmVzc2ZhbWlseVxuICovXG5leHBvcnQgZW51bSBBZGRyZXNzRmFtaWx5IHtcbiAgLyoqXG4gICAqIFJlcHJlc2VudHMgdGhlIElQdjQgYWRkcmVzcyBmYW1pbHkuXG4gICAqIEFsbG93ZWQgdW5kZXIgcHVibGljIGFuZCBwcml2YXRlIHBvb2wuXG4gICAqL1xuICBJUF9WNCA9ICdpcHY0JyxcblxuICAvKipcbiAgICogUmVwcmVzZW50cyB0aGUgSVB2NiBhZGRyZXNzIGZhbWlseS5cbiAgICogT25seSBhbGxvd2VkIHVuZGVyIHB1YmxpYyBwb29sLlxuICAgKi9cbiAgSVBfVjYgPSAnaXB2NicsXG59XG5cbi8qKlxuICogVGhlIElQIGFkZHJlc3Mgc291cmNlIGZvciBwb29scyBpbiB0aGUgcHVibGljIHNjb3BlLlxuICogT25seSB1c2VkIGZvciBwcm92aXNpb25pbmcgSVAgYWRkcmVzcyBDSURScyB0byBwb29scyBpbiB0aGUgcHVibGljIHNjb3BlLlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1wb29sLmh0bWwjY2ZuLWVjMi1pcGFtcG9vbC1wdWJsaWNpcHNvdXJjZVxuICovXG5leHBvcnQgZW51bSBJcGFtUG9vbFB1YmxpY0lwU291cmNlIHtcbiAgLyoqXG4gICAqIEJZT0lQIElwdjYgdG8gYmUgcmVnaXN0ZXJlZCB1bmRlciBJUEFNXG4gICAqL1xuICBCWU9JUCA9ICdieW9pcCcsXG5cbiAgLyoqXG4gICAqIEFtYXpvbiBQcm92aWRlZCBJcHY2IHJhbmdlXG4gICAqL1xuICBBTUFaT04gPSAnYW1hem9uJyxcbn1cblxuLyoqXG4gKiBMaW1pdHMgd2hpY2ggc2VydmljZSBpbiBBV1MgdGhhdCB0aGUgcG9vbCBjYW4gYmUgdXNlZCBpblxuICovXG5leHBvcnQgZW51bSBBd3NTZXJ2aWNlTmFtZSB7XG4gIC8qKlxuICAgKiAgQWxsb3dzIHVzZXJzIHRvIHVzZSBzcGFjZSBmb3IgRWxhc3RpYyBJUCBhZGRyZXNzZXMgYW5kIFZQQ3NcbiAgICovXG4gIEVDMiA9ICdlYzInLFxufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gY3JlYXRlIGEgbmV3IElwYW0gaW4gdGhlIGFjY291bnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJcGFtUHJvcHMge1xuXG4gIC8qKlxuICAgKiBUaGUgb3BlcmF0aW5nIFJlZ2lvbnMgZm9yIGFuIElQQU0uXG4gICAqIE9wZXJhdGluZyBSZWdpb25zIGFyZSBBV1MgUmVnaW9ucyB3aGVyZSB0aGUgSVBBTSBpcyBhbGxvd2VkIHRvIG1hbmFnZSBJUCBhZGRyZXNzIENJRFJzXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG9wZXJhdGluZyBSZWdpb25zLCBzZWUgW0NyZWF0ZSBhbiBJUEFNXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vL3ZwYy9sYXRlc3QvaXBhbS9jcmVhdGUtaXBhbS5odG1sKSBpbiB0aGUgKkFtYXpvbiBWUEMgSVBBTSBVc2VyIEd1aWRlKiAuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtLmh0bWwjY2ZuLWVjMi1pcGFtLW9wZXJhdGluZ3JlZ2lvbnNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBTdGFjay5yZWdpb24gaWYgZGVmaW5lZCBpbiB0aGUgc3RhY2tcbiAgICovXG4gIHJlYWRvbmx5IG9wZXJhdGluZ1JlZ2lvbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTmFtZSBvZiBJUEFNIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHRhZ2dpbmcgcmVzb3VyY2VcbiAgICpcbiAgICogQGRlZmF1bHQgLSBJZiBubyBuYW1lIHByb3ZpZGVkLCBubyB0YWdzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIElQQU1cbiAgICovXG4gIHJlYWRvbmx5IGlwYW1OYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlZmVycyB0byB0d28gcG9zc2libGUgc2NvcGUgdHlwZXMgdW5kZXIgSVBBTVxuICovXG5leHBvcnQgZW51bSBJcGFtU2NvcGVUeXBlIHtcbiAgLyoqXG4gICAqIERlZmF1bHQgc2NvcGVzIGNyZWF0ZWQgYnkgSVBBTVxuICAgKi9cbiAgREVGQVVMVCA9ICdkZWZhdWx0JyxcblxuICAvKipcbiAgICogQ3VzdG9tIHNjb3BlIGNyZWF0ZWQgdXNpbmcgbWV0aG9kXG4gICAqL1xuICBDVVNUT00gPSAnY3VzdG9tJyxcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBhbiBJUEFNIHBvb2wuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1wb29sLmh0bWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb29sT3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIGFkZHJlc3NGYW1pbHkgLSBUaGUgYWRkcmVzcyBmYW1pbHkgb2YgdGhlIHBvb2wgKGlwdjQgb3IgaXB2NikuXG4gICAqL1xuICByZWFkb25seSBhZGRyZXNzRmFtaWx5OiBBZGRyZXNzRmFtaWx5O1xuXG4gIC8qKlxuICAgKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgQ0lEUnMgcHJvdmlzaW9uZWQgdG8gdGhlIHBvb2wuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gQ0lEUnMgYXJlIHByb3Zpc2lvbmVkXG4gICAqL1xuICByZWFkb25seSBpcHY0UHJvdmlzaW9uZWRDaWRycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9jYWxlIChBV1MgUmVnaW9uKSBvZiB0aGUgcG9vbC4gU2hvdWxkIGJlIG9uZSBvZiB0aGUgSVBBTSBvcGVyYXRpbmcgcmVnaW9uLlxuICAgKiAgT25seSByZXNvdXJjZXMgaW4gdGhlIHNhbWUgUmVnaW9uIGFzIHRoZSBsb2NhbGUgb2YgdGhlIHBvb2wgY2FuIGdldCBJUCBhZGRyZXNzIGFsbG9jYXRpb25zIGZyb20gdGhlIHBvb2wuXG4gICAqIFlvdSBjYW4gb25seSBhbGxvY2F0ZSBhIENJRFIgZm9yIGEgVlBDLCBmb3IgZXhhbXBsZSwgZnJvbSBhbiBJUEFNIHBvb2wgdGhhdCBzaGFyZXMgYSBsb2NhbGUgd2l0aCB0aGUgVlBD4oCZcyBSZWdpb24uXG4gICAqIE5vdGUgdGhhdCBvbmNlIHlvdSBjaG9vc2UgYSBMb2NhbGUgZm9yIGEgcG9vbCwgeW91IGNhbm5vdCBtb2RpZnkgaXQuIElmIHlvdSBjaG9vc2UgYW4gQVdTIFJlZ2lvbiBmb3IgbG9jYWxlIHRoYXQgaGFzIG5vdCBiZWVuIGNvbmZpZ3VyZWQgYXMgYW4gb3BlcmF0aW5nIFJlZ2lvbiBmb3IgdGhlIElQQU0sIHlvdSdsbCBnZXQgYW4gZXJyb3IuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtcG9vbC5odG1sI2Nmbi1lYzItaXBhbXBvb2wtbG9jYWxlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQ3VycmVudCBvcGVyYXRpbmcgcmVnaW9uIG9mIElQQU1cbiAgICovXG4gIHJlYWRvbmx5IGxvY2FsZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElQIGFkZHJlc3Mgc291cmNlIGZvciBwb29scyBpbiB0aGUgcHVibGljIHNjb3BlLlxuICAgKiBPbmx5IHVzZWQgZm9yIElQdjYgYWRkcmVzc1xuICAgKiBPbmx5IGFsbG93ZWQgdmFsdWVzIHRvIHRoaXMgYXJlICdieW9pcCcgb3IgJ2FtYXpvbidcbiAgICpcbiAgICogQGRlZmF1bHQgYW1hem9uXG4gICAqL1xuICByZWFkb25seSBwdWJsaWNJcFNvdXJjZT86IElwYW1Qb29sUHVibGljSXBTb3VyY2U7XG5cbiAgLyoqXG4gICAqIExpbWl0cyB3aGljaCBzZXJ2aWNlIGluIEFXUyB0aGF0IHRoZSBwb29sIGNhbiBiZSB1c2VkIGluLlxuICAgKlxuICAgKiBcImVjMlwiLCBmb3IgZXhhbXBsZSwgYWxsb3dzIHVzZXJzIHRvIHVzZSBzcGFjZSBmb3IgRWxhc3RpYyBJUCBhZGRyZXNzZXMgYW5kIFZQQ3MuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtcG9vbC5odG1sI2Nmbi1lYzItaXBhbXBvb2wtYXdzc2VydmljZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHJlcXVpcmVkIGluIGNhc2Ugb2YgYW4gSVB2NiwgdGhyb3dzIGFuIGVycm9yIGlmIG5vdCBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGF3c1NlcnZpY2U/OiBBd3NTZXJ2aWNlTmFtZTtcblxuICAvKipcbiAgICogSVBBTSBQb29sIHJlc291cmNlIG5hbWUgdG8gYmUgdXNlZCBmb3IgdGFnZ2luZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF1dG9nZW5lcmF0ZWQgYnkgQ0RLIGlmIG5vdCBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbVBvb2xOYW1lPzogc3RyaW5nO1xufVxuXG5jb25zdCBOQU1FX1RBRzogc3RyaW5nID0gJ05hbWUnO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGFuIElQQU0gcG9vbC5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtcG9vbC5odG1sXG4gKi9cbmludGVyZmFjZSBJcGFtUG9vbFByb3BzIGV4dGVuZHMgUG9vbE9wdGlvbnMge1xuICAvKipcbiAgICogU2NvcGUgaWQgd2hlcmUgcG9vbCBuZWVkcyB0byBiZSBjcmVhdGVkXG4gICAqL1xuICByZWFkb25seSBpcGFtU2NvcGVJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgdG8gcHJvdmlzaW9uIENJRFJzIHRvIGFuIElQQU0gcG9vbC5cbiAqIFVzZWQgdG8gY3JlYXRlIGEgbmV3IElwYW1Qb29sQ2lkclxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1wb29sY2lkci5odG1sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSXBhbVBvb2xDaWRyUHJvdmlzaW9uaW5nT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBJcHY2IE5ldG1hc2sgbGVuZ3RoIGZvciB0aGUgQ0lEUlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHBvb2wgcHJvdmlzaW9uZWQgd2l0aG91dCBuZXRtYXNrIGxlbmd0aCwgbmVlZCBjaWRyIHJhbmdlIGluIHRoaXMgY2FzZVxuICAgKi9cbiAgcmVhZG9ubHkgbmV0bWFza0xlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogSXB2NiBDSURSIGJsb2NrIGZvciB0aGUgSVBBTSBwb29sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcG9vbCBwcm92aXNpb25lZCB3aXRob3V0IG5ldG1hc2sgbGVuZ3RoLCBuZWVkIG5ldG1hc2sgbGVuZ3RoIGluIHRoaXMgY2FzZVxuICAgKi9cbiAgcmVhZG9ubHkgY2lkcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBEZWZpbml0aW9uIHVzZWQgdG8gYWRkIG9yIGNyZWF0ZSBhIG5ldyBJUEFNIHBvb2xcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSXBhbVBvb2wge1xuICAvKipcbiAgICogUG9vbCBJRCB0byBiZSBwYXNzZWQgdG8gdGhlIFZQQyBjb25zdHJ1Y3RcbiAgICogQGF0dHJpYnV0ZSBJcGFtUG9vbElkXG4gICAqL1xuICByZWFkb25seSBpcGFtUG9vbElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBvb2wgQ0lEUiBmb3IgSVB2NiB0byBiZSBwcm92aXNpb25lZCB3aXRoIFB1YmxpYyBJUCBzb3VyY2Ugc2V0IHRvICdBbWF6b24nXG4gICAqL1xuICByZWFkb25seSBpcGFtQ2lkcnM6IENmbklQQU1Qb29sQ2lkcltdO1xuXG4gIC8qKlxuICAgKiBQb29sIENJRFIgZm9yIElQdjQgdG8gYmUgcHJvdmlzaW9uZWQgdXNpbmcgSVBBTVxuICAgKiBSZXF1aXJlZCB0byBjaGVjayBmb3Igc3VibmV0IElQIHJhbmdlIGlzIHdpdGhpbiB0aGUgVlBDIHJhbmdlXG4gICAqL1xuICByZWFkb25seSBpcGFtSXB2NENpZHJzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIGFzc29jaWF0ZSBhIElQdjYgYWRkcmVzcyB3aXRoIElQQU0gcG9vbFxuICAgKi9cbiAgcHJvdmlzaW9uQ2lkcihpZDogc3RyaW5nLCBvcHRpb25zOiBJcGFtUG9vbENpZHJQcm92aXNpb25pbmdPcHRpb25zKTogQ2ZuSVBBTVBvb2xDaWRyO1xuXG59XG5cbi8qKlxuICogSVBBTSBzY29wZSBpcyB0aGUgaGlnaGVzdC1sZXZlbCBjb250YWluZXIgd2l0aGluIElQQU0uIEFuIElQQU0gY29udGFpbnMgdHdvIGRlZmF1bHQgc2NvcGVzLlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1zY29wZS5odG1sXG4gKi9cbmludGVyZmFjZSBJcGFtU2NvcGVQcm9wcyBleHRlbmRzIElwYW1TY29wZU9wdGlvbnMge1xuICAvKipcbiAgICogSVBBTSBpZCB0byB3aGljaCBzY29wZSBuZWVkcyB0byBiZSBhZGRlZFxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wZXJhdGluZyByZWdpb25zIGZvciB0aGUgSXBhbVxuICAgKiBSZXF1aXJlZCBpbiBvcmRlciB0byB2YWxpZGF0ZSB0aGUgbG9jYWxlIGJlaW5nIHNldCBvbiBwb29sXG4gICAqL1xuICByZWFkb25seSBpcGFtT3BlcmF0aW5nUmVnaW9uczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBpcGFtIHNjb3BlIGlkIHRvIGFkZCBhIHBvb2wgaW4gb3JkZXIgdG8gc3VwcG9ydCBkZWZhdWx0IHNjb3Blc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRocm93cyBhbiBlcnJvciBpZiBubyBzY29wZSBpZCBpcyBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgaXBhbVNjb3BlSWQ/OiBzdHJpbmc7XG5cbn1cblxuLyoqXG4gKiBCZWluZyB1c2VkIGluIElQQU0gY2xhc3MgdG8gYWRkIHBvb2xzIHRvIGRlZmF1bHQgc2NvcGUgY3JlYXRlZCBieSBJUEFNLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElwYW1TY29wZU9wdGlvbnMge1xuXG4gIC8qKlxuICAgKiBJUEFNIHNjb3BlIG5hbWUgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRhZ2dpbmdcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyB0YWdzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHNjb3BlXG4gICAqL1xuICByZWFkb25seSBpcGFtU2NvcGVOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGFuIElQIEFkZHJlc3MgTWFuYWdlciAoSVBBTSkuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSB0aGUge0BsaW5rIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbS5odG1sfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJcGFtT3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIENJRFIgTWFzayBmb3IgVnBjXG4gICAqIE9ubHkgcmVxdWlyZWQgd2hlbiB1c2luZyBBV1MgSXBhbVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIG5ldG1hc2sgbGVuZ3RoIGZvciBJUEFNIGF0dGFjaGVkIHRvIFZQQyBzZWNvbmRhcnkgYWRkcmVzc1xuICAgKi9cbiAgcmVhZG9ubHkgbmV0bWFza0xlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogSXB2NCBvciBhbiBJcHY2IElQQU0gcG9vbFxuICAgKiBPbmx5IHJlcXVpcmVkIHdoZW4gdXNpbmcgQVdTIElwYW1cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBwb29sIGF0dGFjaGVkIHRvIFZQQyBzZWNvbmRhcnkgYWRkcmVzc1xuICAgKi9cbiAgcmVhZG9ubHkgaXBhbVBvb2w/OiBJSXBhbVBvb2w7XG5cbiAgLyoqXG4gICAqIFJlcXVpcmVkIHRvIHNldCBTZWNvbmRhcnkgY2lkciBibG9jayByZXNvdXJjZSBuYW1lXG4gICAqIGluIG9yZGVyIHRvIGdlbmVyYXRlIHVuaXF1ZSBsb2dpY2FsIGlkIGZvciB0aGUgcmVzb3VyY2UuXG4gICAqL1xuICByZWFkb25seSBjaWRyQmxvY2tOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBJcGFtU2NvcGUgQ2xhc3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSXBhbVNjb3BlQmFzZSB7XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBzY29wZSBvZiBzdGFjayB0byBiZSBwYXNzZWQgaW4gb3JkZXIgdG8gY3JlYXRlXG4gICAqIGEgbmV3IElQQU0gcG9vbFxuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdDtcblxuICAvKipcbiAgICogRGVmYXVsdCBTY29wZSBpZHMgY3JlYXRlZCBieSB0aGUgSVBBTSBvciBhIG5ldyBSZXNvdXJjZSBpZFxuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHNjb3BlIHR5cGUgY2FuIGJlIGVpdGhlciBkZWZhdWx0IG9yIGN1c3RvbVxuICAgKi9cbiAgcmVhZG9ubHkgc2NvcGVUeXBlPzogSXBhbVNjb3BlVHlwZTtcblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gYWRkIGEgbmV3IHBvb2wgdG8gYW4gSVBBTSBzY29wZVxuICAgKi9cbiAgYWRkUG9vbChpZDogc3RyaW5nLCBvcHRpb25zOiBQb29sT3B0aW9ucyk6IElJcGFtUG9vbDtcblxufVxuXG4vKipcbiAqIENyZWF0ZXMgbmV3IElQQU0gUG9vbFxuICogUG9vbHMgZW5hYmxlIHlvdSB0byBvcmdhbml6ZSB5b3VyIElQIGFkZHJlc3NlcyBhY2NvcmRpbmcgdG8geW91ciByb3V0aW5nIGFuZCBzZWN1cml0eSBuZWVkc1xuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1wb29sLmh0bWxcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6SVBBTVBvb2xcbiAqIEBpbnRlcm5hbFxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5jbGFzcyBJcGFtUG9vbCBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSUlwYW1Qb29sIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtZWMyLWFscGhhLklwYW1Qb29sJztcbiAgLyoqXG4gICAqIFBvb2wgSUQgdG8gYmUgcGFzc2VkIHRvIHRoZSBWUEMgY29uc3RydWN0XG4gICAqIEBhdHRyaWJ1dGUgSXBhbVBvb2xJZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwYW1Qb29sSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogUG9vbCBDSURSIGZvciBJUHY2IHRvIGJlIHByb3Zpc2lvbmVkIHdpdGggUHVibGljIElQIHNvdXJjZSBzZXQgdG8gJ0FtYXpvbidcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpcGFtQ2lkcnM6IENmbklQQU1Qb29sQ2lkcltdID0gW107XG5cbiAgLyoqXG4gICAqIFBvb2wgQ0lEUiBmb3IgSVB2NCB0byBiZSBwcm92aXNpb25lZCB1c2luZyBJUEFNXG4gICAqIFJlcXVpcmVkIHRvIGNoZWNrIGZvciBzdWJuZXQgSVAgcmFuZ2UgaXMgd2l0aGluIHRoZSBWUEMgcmFuZ2VcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBpcGFtSXB2NENpZHJzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2UgdG8gaXBhbVBvb2wgcmVzb3VyY2UgY3JlYXRlZCBpbiB0aGlzIGNsYXNzXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9pcGFtUG9vbDogQ2ZuSVBBTVBvb2w7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElwYW1Qb29sUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMuaXBhbVBvb2xOYW1lID8/IExhenkuc3RyaW5nKHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHsgbWF4TGVuZ3RoOiAxMjgsIGFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVyczogJ18nIH0pLFxuICAgICAgfSksXG4gICAgfSk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICBpZiAocHJvcHMuYWRkcmVzc0ZhbWlseSA9PT0gQWRkcmVzc0ZhbWlseS5JUF9WNiAmJiAhcHJvcHMuYXdzU2VydmljZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdhd3NTZXJ2aWNlIGlzIHJlcXVpcmVkIHdoZW4gYWRkcmVzc0ZhbWlseSBpcyBzZXQgdG8gaXB2NicpO1xuICAgIH1cblxuICAgIC8vIEFkZCB0YWdzIHRvIHRoZSBJUEFNIFBvb2wgaWYgbmFtZSBpcyBwcm92aWRlZFxuICAgIGlmIChwcm9wcy5pcGFtUG9vbE5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcy5pcGFtUG9vbE5hbWUpO1xuICAgIH1cblxuICAgIHRoaXMuX2lwYW1Qb29sID0gbmV3IENmbklQQU1Qb29sKHRoaXMsIGlkLCB7XG4gICAgICBhZGRyZXNzRmFtaWx5OiBwcm9wcy5hZGRyZXNzRmFtaWx5LFxuICAgICAgcHJvdmlzaW9uZWRDaWRyczogcHJvcHMuaXB2NFByb3Zpc2lvbmVkQ2lkcnM/Lm1hcChjaWRyID0+ICh7IGNpZHIgfSkpLFxuICAgICAgbG9jYWxlOiBwcm9wcy5sb2NhbGUsXG4gICAgICBpcGFtU2NvcGVJZDogcHJvcHMuaXBhbVNjb3BlSWQsXG4gICAgICBwdWJsaWNJcFNvdXJjZTogcHJvcHMucHVibGljSXBTb3VyY2UsXG4gICAgICBhd3NTZXJ2aWNlOiBwcm9wcy5hd3NTZXJ2aWNlLFxuICAgIH0pO1xuICAgIHRoaXMuaXBhbVBvb2xJZCA9IHRoaXMuX2lwYW1Qb29sLmF0dHJJcGFtUG9vbElkO1xuXG4gICAgLy8gUG9wdWxhdGluZyB0byBjaGVjayBmb3Igc3VibmV0IHJhbmdlIGFnYWluc3QgYWxsIElQdjQgcmFuZ2VzIGFzc2lnbmVkIHRvIFZQQyBpbmNsdWRpbmcgSVBBTVxuICAgIHByb3BzLmlwdjRQcm92aXNpb25lZENpZHJzPy5tYXAoY2lkciA9PiAodGhpcy5pcGFtSXB2NENpZHJzLnB1c2goY2lkcikpKTtcbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gdGhpcy5faXBhbVBvb2w7XG4gIH1cblxuICAvKipcbiAgICogQSBDSURSIHByb3Zpc2lvbmVkIHRvIGFuIElQQU0gcG9vbC5cbiAgICogQHBhcmFtIGlkIE5hbWUgb2YgUmVzb3VyY2VcbiAgICogQHBhcmFtIG9wdGlvbnMgRWl0aGVyIGEgQ0lEUiBvciBuZXRtYXNrIGxlbmd0aCBtdXN0IGJlIHByb3ZpZGVkXG4gICAqIEByZXR1cm5zIEFXUzo6RUMyOjpJUEFNUG9vbENpZHJcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBwcm92aXNpb25DaWRyKGlkOiBzdHJpbmcsIG9wdGlvbnM6IElwYW1Qb29sQ2lkclByb3Zpc2lvbmluZ09wdGlvbnMpOiBDZm5JUEFNUG9vbENpZHIge1xuICAgIGNvbnN0IGNpZHIgPSBuZXcgQ2ZuSVBBTVBvb2xDaWRyKHRoaXMsIGlkLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgaXBhbVBvb2xJZDogdGhpcy5pcGFtUG9vbElkLFxuICAgIH0pO1xuICAgIHRoaXMuaXBhbUNpZHJzLnB1c2goY2lkcik7XG4gICAgcmV0dXJuIGNpZHI7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGN1c3RvbSBJcGFtIFNjb3BlLCBjdXN0b20gSVBBTSBzY29wZXMgY2FuIG9ubHkgYmUgcHJpdmF0ZVxuICogKGNhbiBiZSB1c2VkIGZvciBhZGRpbmcgY3VzdG9tIHNjb3BlcyB0byBhbiBleGlzdGluZyBJUEFNKVxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1zY29wZS5odG1sXG4gKiBAcmVzb3VyY2UgQVdTOjpFQzI6OklQQU1TY29wZVxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5jbGFzcyBJcGFtU2NvcGUgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElJcGFtU2NvcGVCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtZWMyLWFscGhhLklwYW1TY29wZSc7XG4gIC8qKlxuICAgKiBTdG9yZXMgdGhlIHJlZmVyZW5jZSB0byBuZXdseSBjcmVhdGVkIFJlc291cmNlXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9pcGFtU2NvcGU6IENmbklQQU1TY29wZTtcblxuICAvKipcbiAgICogSUQgZm9yIFJlc291cmNlIElwYW1TY29wZVxuICAgKiBAYXR0cmlidXRlIElwYW1TY29wZUlkXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NvcGVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcm9wZXJ0aWVzIHRvIGNvbmZpZ3VyZSBpcGFtIHNjb3BlXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBJcGFtU2NvcGVQcm9wcztcblxuICAvKipcbiAgICogUmVmZXJlbmNlIHRvIHN0YWNrIHNjb3BlIHRvIGJlIHBhc3NlZCB0aHJvdWdoIGFkZFBvb2wgbWV0aG9kIGlub3JkZXIgdG8gY3JlYXRlIGEgbmV3IElwYW1Qb29sXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdDtcblxuICAvKipcbiAgICogRGVmaW5lcyBzY29wZSB0eXBlIGNhbiBiZSBlaXRoZXIgZGVmYXVsdCBvciBjdXN0b21cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzY29wZVR5cGU6IElwYW1TY29wZVR5cGU7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IElwYW1TY29wZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcbiAgICB0aGlzLl9pcGFtU2NvcGUgPSBuZXcgQ2ZuSVBBTVNjb3BlKHNjb3BlLCAnSXBhbVNjb3BlJywge1xuICAgICAgaXBhbUlkOiBwcm9wcy5pcGFtSWQsXG4gICAgfSk7XG4gICAgVGFncy5vZih0aGlzLl9pcGFtU2NvcGUpLmFkZChOQU1FX1RBRywgcHJvcHMuaXBhbVNjb3BlTmFtZSA/PyAnQ3VzdG9tSXBhbVNjb3BlJyk7XG4gICAgdGhpcy5zY29wZUlkID0gdGhpcy5faXBhbVNjb3BlLmF0dHJJcGFtU2NvcGVJZDtcbiAgICB0aGlzLnNjb3BlVHlwZSA9IElwYW1TY29wZVR5cGUuQ1VTVE9NO1xuICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHBvb2wgdG8gdGhlIElQQU0gc2NvcGUuXG4gICAqIEBleHRlcm5hbFxuICAgKi9cbiAgYWRkUG9vbChpZDogc3RyaW5nLCBvcHRpb25zOiBQb29sT3B0aW9ucyk6IElJcGFtUG9vbCB7XG4gICAgcmV0dXJuIGNyZWF0ZUlwYW1Qb29sKHRoaXMuc2NvcGUsIGlkLCB0aGlzLnByb3BzLCBvcHRpb25zLCB0aGlzLnNjb3BlSWQpO1xuICB9XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgSVBBTSBkZWZhdWx0IHNjb3Blcy5cbiAqL1xuY2xhc3MgSXBhbVNjb3BlQmFzZSBpbXBsZW1lbnRzIElJcGFtU2NvcGVCYXNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdCxcbiAgICByZWFkb25seSBzY29wZUlkOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogSXBhbVNjb3BlUHJvcHMsXG4gICAgcmVhZG9ubHkgc2NvcGVUeXBlPzogSXBhbVNjb3BlVHlwZSxcbiAgKSB7XG4gICAgdGhpcy5zY29wZVR5cGUgPSBJcGFtU2NvcGVUeXBlLkRFRkFVTFQ7XG4gICAgaWYgKCFwcm9wcy5pcGFtU2NvcGVJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdpcGFtU2NvcGVJZCBpcyByZXF1aXJlZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNjb3BlSWQgPSBwcm9wcy5pcGFtU2NvcGVJZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHBvb2wgdG8gdGhlIElQQU0gc2NvcGUuXG4gICAqIEBleHRlcm5hbFxuICAgKi9cbiAgYWRkUG9vbChpZDogc3RyaW5nLCBvcHRpb25zOiBQb29sT3B0aW9ucyk6IElJcGFtUG9vbCB7XG4gICAgcmV0dXJuIGNyZWF0ZUlwYW1Qb29sKHRoaXMuc2NvcGUsIGlkLCB0aGlzLnByb3BzLCBvcHRpb25zLCB0aGlzLnNjb3BlSWQpO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBuZXcgSVBBTSB3aXRoIGRlZmF1bHQgcHVibGljIGFuZCBwcml2YXRlIHNjb3BlXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItaXBhbXNjb3BlLmh0bWxcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6SVBBTVxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgSXBhbSBleHRlbmRzIFJlc291cmNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtZWMyLWFscGhhLklwYW0nO1xuICAvKipcbiAgICogUHJvdmlkZXMgYWNjZXNzIHRvIGRlZmF1bHQgcHVibGljIElQQU0gc2NvcGUgdGhyb3VnaCBhZGQgcG9vbCBtZXRob2QuXG4gICAqIFVzYWdlOiBUbyBhZGQgYW4gSXBhbSBQb29sIHRvIGEgZGVmYXVsdCBwdWJsaWMgc2NvcGVcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLWlwYW1zY29wZS5odG1sXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHVibGljU2NvcGU6IElJcGFtU2NvcGVCYXNlO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlcyBhY2Nlc3MgdG8gZGVmYXVsdCBwcml2YXRlIElQQU0gc2NvcGUgdGhyb3VnaCBhZGQgcG9vbCBtZXRob2QuXG4gICAqIFVzYWdlOiBUbyBhZGQgYW4gSXBhbSBQb29sIHRvIGEgZGVmYXVsdCBwcml2YXRlIHNjb3BlXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXJlc291cmNlLWVjMi1pcGFtc2NvcGUuaHRtbFxuICAgKiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJpdmF0ZVNjb3BlOiBJSXBhbVNjb3BlQmFzZTtcblxuICAvLyBSZXNvdXJjZSBJUEFNXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lwYW06IENmbklQQU07XG4gIC8qKlxuICAgKiBBY2Nlc3MgdG8gSXBhbSByZXNvdXJjZSBpZCB0aGF0IGNhbiBiZSB1c2VkIGxhdGVyIHRvIGFkZCBhIGN1c3RvbSBwcml2YXRlIHNjb3BlIHRvIHRoaXMgSVBBTVxuICAgKiBAYXR0cmlidXRlIElwYW1JZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlwYW1JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIG9wZXJhdGluZyByZWdpb25zIGZvciBJUEFNXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb3BlcmF0aW5nUmVnaW9uczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2Ygc2NvcGVzIGNyZWF0ZWQgdW5kZXIgdGhpcyBJUEFNXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NvcGVzOiBJSXBhbVNjb3BlQmFzZVtdID0gW107XG5cbiAgLyoqXG4gICAqIElQQU0gbmFtZSB0byBiZSB1c2VkIGZvciB0YWdnaW5nXG4gICAqIEBkZWZhdWx0IC0gbm8gdGFnIHNwZWNpZmllZFxuICAgKiBAYXR0cmlidXRlIElwYW1OYW1lXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaXBhbU5hbWU/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM/OiBJcGFtUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuICAgIGlmIChwcm9wcz8uaXBhbU5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcy5pcGFtTmFtZSk7XG4gICAgfVxuICAgIGlmIChwcm9wcz8ub3BlcmF0aW5nUmVnaW9ucyAmJiAocHJvcHMub3BlcmF0aW5nUmVnaW9ucy5sZW5ndGggPT09IDApKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSBwcm92aWRlIGF0IGxlYXN0IG9uZSBvcGVyYXRpbmcgcmVnaW9uJyk7XG4gICAgfVxuXG4gICAgdGhpcy5vcGVyYXRpbmdSZWdpb25zID0gcHJvcHM/Lm9wZXJhdGluZ1JlZ2lvbnMgPz8gW1N0YWNrLm9mKHRoaXMpLnJlZ2lvbl07XG4gICAgdGhpcy5pcGFtTmFtZSA9IHByb3BzPy5pcGFtTmFtZTtcblxuICAgIHRoaXMuX2lwYW0gPSBuZXcgQ2ZuSVBBTSh0aGlzLCAnSXBhbScsIHtcbiAgICAgIG9wZXJhdGluZ1JlZ2lvbnM6IHRoaXMub3BlcmF0aW5nUmVnaW9ucyA/IHRoaXMub3BlcmF0aW5nUmVnaW9ucy5tYXAocmVnaW9uID0+ICh7IHJlZ2lvbk5hbWU6IHJlZ2lvbiB9KSkgOiBbXSxcbiAgICB9KTtcbiAgICB0aGlzLm5vZGUuZGVmYXVsdENoaWxkID0gdGhpcy5faXBhbTtcblxuICAgIHRoaXMuaXBhbUlkID0gdGhpcy5faXBhbS5hdHRySXBhbUlkO1xuICAgIHRoaXMucHVibGljU2NvcGUgPSBuZXcgSXBhbVNjb3BlQmFzZSh0aGlzLCAnRGVmYXVsdFB1YmxpY1Njb3BlJywge1xuICAgICAgaXBhbU9wZXJhdGluZ1JlZ2lvbnM6IHRoaXMub3BlcmF0aW5nUmVnaW9ucyxcbiAgICAgIGlwYW1JZDogdGhpcy5faXBhbS5hdHRySXBhbUlkLFxuICAgICAgaXBhbVNjb3BlSWQ6IHRoaXMuX2lwYW0uYXR0clB1YmxpY0RlZmF1bHRTY29wZUlkLFxuICAgIH0pO1xuICAgIHRoaXMucHJpdmF0ZVNjb3BlID0gbmV3IElwYW1TY29wZUJhc2UodGhpcywgJ0RlZmF1bHRQcml2YXRlU2NvcGUnLCB7XG4gICAgICBpcGFtT3BlcmF0aW5nUmVnaW9uczogdGhpcy5vcGVyYXRpbmdSZWdpb25zLFxuICAgICAgaXBhbUlkOiB0aGlzLl9pcGFtLmF0dHJJcGFtSWQsXG4gICAgICBpcGFtU2NvcGVJZDogdGhpcy5faXBhbS5hdHRyUHJpdmF0ZURlZmF1bHRTY29wZUlkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5zY29wZXMucHVzaCh0aGlzLnB1YmxpY1Njb3BlLCB0aGlzLnByaXZhdGVTY29wZSk7XG4gIH1cblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gYWRkIGN1c3RvbSBzY29wZSB0byBhbiBleGlzdGluZyBJUEFNXG4gICAqIEN1c3RvbSBzY29wZXMgY2FuIG9ubHkgYmUgcHJpdmF0ZVxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGFkZFNjb3BlKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIG9wdGlvbnM6IElwYW1TY29wZU9wdGlvbnMpOiBJSXBhbVNjb3BlQmFzZSB7XG4gICAgY29uc3QgaXBhbVNjb3BlID0gbmV3IElwYW1TY29wZShzY29wZSwgaWQsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBpcGFtSWQ6IHRoaXMuaXBhbUlkLFxuICAgICAgaXBhbU9wZXJhdGluZ1JlZ2lvbnM6IHRoaXMub3BlcmF0aW5nUmVnaW9ucyxcbiAgICB9KTtcbiAgICB0aGlzLnNjb3Blcy5wdXNoKGlwYW1TY29wZSk7XG4gICAgcmV0dXJuIGlwYW1TY29wZTtcbiAgfVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGNyZWF0ZSBJcGFtUG9vbCB1bmRlciBzY29wZVxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlwYW1Qb29sKFxuICBzY29wZTogQ29uc3RydWN0LFxuICBpZDogc3RyaW5nLFxuICBzY29wZU9wdGlvbnM6IElwYW1TY29wZVByb3BzLFxuICBwb29sT3B0aW9uczogUG9vbE9wdGlvbnMsXG4gIHNjb3BlSWQ6IHN0cmluZyxcbik6IElwYW1Qb29sIHtcbiAgLy8gT25seSBjaGVjayBsb2NhbGUgaWYgaXQncyBwcm92aWRlZCBzaW5jZSBpdCdzIGFuIG9wdGlvbmFsIGZpZWxkXG4gIGlmIChwb29sT3B0aW9ucy5sb2NhbGUpIHtcbiAgICBjb25zdCBpc0xvY2FsZUluT3BlcmF0aW5nUmVnaW9ucyA9IHNjb3BlT3B0aW9ucy5pcGFtT3BlcmF0aW5nUmVnaW9uc1xuICAgICAgPyBzY29wZU9wdGlvbnMuaXBhbU9wZXJhdGluZ1JlZ2lvbnMubWFwKHJlZ2lvbiA9PiAoeyByZWdpb25OYW1lOiByZWdpb24gfSkpXG4gICAgICAgIC5zb21lKHJlZ2lvbiA9PiByZWdpb24ucmVnaW9uTmFtZSA9PT0gcG9vbE9wdGlvbnMubG9jYWxlKVxuICAgICAgOiBmYWxzZTtcblxuICAgIGlmICghaXNMb2NhbGVJbk9wZXJhdGluZ1JlZ2lvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHByb3ZpZGVkIGxvY2FsZSAnJHtwb29sT3B0aW9ucy5sb2NhbGV9JyBpcyBub3QgaW4gdGhlIG9wZXJhdGluZyByZWdpb25zICgke3Njb3BlT3B0aW9ucy5pcGFtT3BlcmF0aW5nUmVnaW9uc30pLiBgICtcbiAgICAgICAgJ0lmIHNwZWNpZmllZCwgbG9jYWxlIG11c3QgYmUgY29uZmlndXJlZCBhcyBhbiBvcGVyYXRpbmcgcmVnaW9uIGZvciB0aGUgSVBBTS4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IElwYW1Qb29sKHNjb3BlLCBpZCwge1xuICAgIGlwYW1Qb29sTmFtZTogcG9vbE9wdGlvbnMuaXBhbVBvb2xOYW1lLFxuICAgIGFkZHJlc3NGYW1pbHk6IHBvb2xPcHRpb25zLmFkZHJlc3NGYW1pbHksXG4gICAgaXB2NFByb3Zpc2lvbmVkQ2lkcnM6IHBvb2xPcHRpb25zLmlwdjRQcm92aXNpb25lZENpZHJzLFxuICAgIGlwYW1TY29wZUlkOiBzY29wZUlkLFxuICAgIGxvY2FsZTogcG9vbE9wdGlvbnMubG9jYWxlLFxuICAgIHB1YmxpY0lwU291cmNlOiBwb29sT3B0aW9ucy5wdWJsaWNJcFNvdXJjZSxcbiAgICBhd3NTZXJ2aWNlOiBwb29sT3B0aW9ucy5hd3NTZXJ2aWNlLFxuICB9KTtcbn1cbiJdfQ==
package/lib/route.js CHANGED
@@ -40,6 +40,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
40
40
  const aws_cdk_lib_1 = require("aws-cdk-lib");
41
41
  const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
42
42
  const core_1 = require("aws-cdk-lib/core");
43
+ const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
43
44
  const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
44
45
  const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
45
46
  const util_1 = require("./util");
@@ -81,7 +82,7 @@ let EgressOnlyInternetGateway = (() => {
81
82
  EgressOnlyInternetGateway = _classThis = _classDescriptor.value;
82
83
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
83
84
  }
84
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.EgressOnlyInternetGateway", version: "2.245.0-alpha.0" };
85
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.EgressOnlyInternetGateway", version: "2.247.0-alpha.0" };
85
86
  /** Uniquely identifies this class. */
86
87
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.EgressOnlyInternetGateway';
87
88
  /**
@@ -144,7 +145,7 @@ let InternetGateway = (() => {
144
145
  InternetGateway = _classThis = _classDescriptor.value;
145
146
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
146
147
  }
147
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.InternetGateway", version: "2.245.0-alpha.0" };
148
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.InternetGateway", version: "2.247.0-alpha.0" };
148
149
  /** Uniquely identifies this class. */
149
150
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.InternetGateway';
150
151
  /**
@@ -218,7 +219,7 @@ let VPNGatewayV2 = (() => {
218
219
  VPNGatewayV2 = _classThis = _classDescriptor.value;
219
220
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
220
221
  }
221
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.VPNGatewayV2", version: "2.245.0-alpha.0" };
222
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.VPNGatewayV2", version: "2.247.0-alpha.0" };
222
223
  /** Uniquely identifies this class. */
223
224
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.VPNGatewayV2';
224
225
  /**
@@ -316,7 +317,7 @@ let NatGateway = (() => {
316
317
  NatGateway = _classThis = _classDescriptor.value;
317
318
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
318
319
  }
319
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.NatGateway", version: "2.245.0-alpha.0" };
320
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.NatGateway", version: "2.247.0-alpha.0" };
320
321
  /** Uniquely identifies this class. */
321
322
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.NatGateway';
322
323
  /**
@@ -371,7 +372,7 @@ let NatGateway = (() => {
371
372
  this.maxDrainDuration = props.maxDrainDuration || core_1.Duration.seconds(350);
372
373
  if (this.connectivityType === NatConnectivityType.PUBLIC) {
373
374
  if (!props.vpc && !props.allocationId) {
374
- throw new core_1.ValidationError('VpcOrAllocationIdRequired', 'Either provide vpc or allocationId', this);
375
+ throw new core_1.ValidationError((0, helpers_internal_1.lit) `VpcOrAllocationIdRequired`, 'Either provide vpc or allocationId', this);
375
376
  }
376
377
  }
377
378
  if (props.natGatewayName) {
@@ -429,7 +430,7 @@ let VPCPeeringConnection = (() => {
429
430
  VPCPeeringConnection = _classThis = _classDescriptor.value;
430
431
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
431
432
  }
432
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.VPCPeeringConnection", version: "2.245.0-alpha.0" };
433
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.VPCPeeringConnection", version: "2.247.0-alpha.0" };
433
434
  /** Uniquely identifies this class. */
434
435
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.VPCPeeringConnection';
435
436
  /**
@@ -460,14 +461,14 @@ let VPCPeeringConnection = (() => {
460
461
  this.routerType = aws_ec2_1.RouterType.VPC_PEERING_CONNECTION;
461
462
  const isCrossAccount = props.requestorVpc.ownerAccountId !== props.acceptorVpc.ownerAccountId;
462
463
  if (!isCrossAccount && props.peerRoleArn) {
463
- throw new core_1.ValidationError('PeerRoleArnNotNeededForSameAccount', 'peerRoleArn is not needed for same account peering', this);
464
+ throw new core_1.ValidationError((0, helpers_internal_1.lit) `PeerRoleArnNotNeededForSameAccount`, 'peerRoleArn is not needed for same account peering', this);
464
465
  }
465
466
  if (isCrossAccount && !props.peerRoleArn) {
466
- throw new core_1.ValidationError('CrossAccountPeeringRequiresPeerRoleArn', 'Cross account VPC peering requires peerRoleArn', this);
467
+ throw new core_1.ValidationError((0, helpers_internal_1.lit) `CrossAccountPeeringRequiresPeerRoleArn`, 'Cross account VPC peering requires peerRoleArn', this);
467
468
  }
468
469
  const overlap = this.validateVpcCidrOverlap(props.requestorVpc, props.acceptorVpc);
469
470
  if (overlap) {
470
- throw new core_1.ValidationError('VpcCidrBlocksOverlap', 'CIDR block should not overlap with each other for establishing a peering connection', this);
471
+ throw new core_1.ValidationError((0, helpers_internal_1.lit) `VpcCidrBlocksOverlap`, 'CIDR block should not overlap with each other for establishing a peering connection', this);
471
472
  }
472
473
  if (props.vpcPeeringConnectionName) {
473
474
  core_1.Tags.of(this).add(NAME_TAG, props.vpcPeeringConnectionName);
@@ -527,7 +528,7 @@ exports.VPCPeeringConnection = VPCPeeringConnection;
527
528
  * The gateway or endpoint targeted by the route.
528
529
  */
529
530
  class RouteTargetType {
530
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.RouteTargetType", version: "2.245.0-alpha.0" };
531
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.RouteTargetType", version: "2.247.0-alpha.0" };
531
532
  /**
532
533
  * The gateway route target. This is used for targets such as
533
534
  * egress-only internet gateway or VPC peering connection.
@@ -575,7 +576,7 @@ let Route = (() => {
575
576
  Route = _classThis = _classDescriptor.value;
576
577
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
577
578
  }
578
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.Route", version: "2.245.0-alpha.0" };
579
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.Route", version: "2.247.0-alpha.0" };
579
580
  /** Uniquely identifies this class. */
580
581
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.Route';
581
582
  /**
@@ -634,10 +635,10 @@ let Route = (() => {
634
635
  this.destinationIpv4Cidr = props.destination;
635
636
  }
636
637
  if (this.target.gateway?.routerType === aws_ec2_1.RouterType.EGRESS_ONLY_INTERNET_GATEWAY && isDestinationIpv4) {
637
- throw new core_1.ValidationError('EgressOnlyInternetGatewayDoesNotSupportIpv4', 'Egress only internet gateway does not support IPv4 routing', this);
638
+ throw new core_1.ValidationError((0, helpers_internal_1.lit) `EgressOnlyInternetGatewayDoesNotSupportIpv4`, 'Egress only internet gateway does not support IPv4 routing', this);
638
639
  }
639
640
  if ((props.target.gateway && props.target.endpoint) || (!props.target.gateway && !props.target.endpoint)) {
640
- throw new core_1.ValidationError('ExactlyOneTargetRequired', 'Exactly one of `gateway` or `endpoint` must be specified.', this);
641
+ throw new core_1.ValidationError((0, helpers_internal_1.lit) `ExactlyOneTargetRequired`, 'Exactly one of `gateway` or `endpoint` must be specified.', this);
641
642
  }
642
643
  this.targetRouterType = this.target.gateway ? this.target.gateway.routerType : aws_ec2_1.RouterType.VPC_ENDPOINT;
643
644
  // Gateway generates route automatically via its RouteTable, thus we don't need to generate the resource for it
@@ -688,7 +689,7 @@ let RouteTable = (() => {
688
689
  RouteTable = _classThis = _classDescriptor.value;
689
690
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
690
691
  }
691
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.RouteTable", version: "2.245.0-alpha.0" };
692
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-ec2-alpha.RouteTable", version: "2.247.0-alpha.0" };
692
693
  /** Uniquely identifies this class. */
693
694
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-ec2-alpha.RouteTable';
694
695
  /**
@@ -768,4 +769,4 @@ function routerTypeToPropName(routerType) {
768
769
  [aws_ec2_1.RouterType.CORE_NETWORK]: 'coreNetworkArn',
769
770
  })[routerType];
770
771
  }
771
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBcUM7QUFFckMsaURBQXVRO0FBRXZRLDJDQUF3RztBQUN4Ryw4RUFBOEY7QUFDOUYsMEVBQTBFO0FBRzFFLGlDQUFtRTtBQUduRTs7OztHQUlHO0FBQ0gsSUFBWSxtQkFTWDtBQVRELFdBQVksbUJBQW1CO0lBQzdCOztPQUVHO0lBQ0gsd0NBQWlCLENBQUE7SUFDakI7O09BRUc7SUFDSCwwQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBVFcsbUJBQW1CLG1DQUFuQixtQkFBbUIsUUFTOUI7QUE4TEQ7O0dBRUc7QUFDSCxNQUFNLFFBQVEsR0FBVyxNQUFNLENBQUM7QUFFaEM7OztHQUdHO0lBRVUseUJBQXlCOzRCQURyQyxvQ0FBa0I7Ozs7c0JBQzRCLGVBQVE7eUNBQWhCLFNBQVEsV0FBUTs7OztZQUF2RCw2S0FtQ0M7Ozs7O1FBbENDLHNDQUFzQztRQUMvQixNQUFNLENBQVUscUJBQXFCLEdBQVcsa0RBQWtELENBQUM7UUFDMUc7O1dBRUc7UUFDTSxVQUFVLENBQWE7UUFFaEM7O1dBRUc7UUFDTSxjQUFjLENBQVM7UUFFaEM7O1dBRUc7UUFDYSxRQUFRLENBQStCO1FBRXZELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUM7WUFDN0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQzs7Ozs7O21EQW5CUix5QkFBeUI7Ozs7WUFvQmxDLG1DQUFtQztZQUNuQyxJQUFBLHdDQUFvQixFQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVsQyxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO2dCQUN4QyxXQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLDZC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QUFDLG9CQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsZ0JBQWdCO0tBQzVDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3hfYXBpIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHR5cGUgeyBJUm91dGVUYWJsZSwgSVZwY0VuZHBvaW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBDZm5FSVAsIENmbkVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXksIENmbkludGVybmV0R2F0ZXdheSwgQ2ZuTmF0R2F0ZXdheSwgQ2ZuVlBDUGVlcmluZ0Nvbm5lY3Rpb24sIENmblJvdXRlLCBDZm5Sb3V0ZVRhYmxlLCBDZm5WUENHYXRld2F5QXR0YWNobWVudCwgQ2ZuVlBOR2F0ZXdheSwgQ2ZuVlBOR2F0ZXdheVJvdXRlUHJvcGFnYXRpb24sIEdhdGV3YXlWcGNFbmRwb2ludCwgUm91dGVyVHlwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHR5cGUgeyBJUmVzb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IEFubm90YXRpb25zLCBEdXJhdGlvbiwgRmVhdHVyZUZsYWdzLCBSZXNvdXJjZSwgVGFncywgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QsIElEZXBlbmRhYmxlIH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IElTdWJuZXRWMiB9IGZyb20gJy4vc3VibmV0LXYyJztcbmltcG9ydCB7IE5ldHdvcmtVdGlscywgYWxsUm91dGVUYWJsZUlkcywgQ2lkckJsb2NrIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB0eXBlIHsgSVZwY1YyLCBWUE5HYXRld2F5VjJPcHRpb25zIH0gZnJvbSAnLi92cGMtdjItYmFzZSc7XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIE5BVCBnYXRld2F5IHN1cHBvcnRzIHB1YmxpYyBvciBwcml2YXRlIGNvbm5lY3Rpdml0eS5cbiAqIFRoZSBkZWZhdWx0IGlzIHB1YmxpYyBjb25uZWN0aXZpdHkuXG4gKiBTZWU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItbmF0Z2F0ZXdheS5odG1sI2Nmbi1lYzItbmF0Z2F0ZXdheS1jb25uZWN0aXZpdHl0eXBlXG4gKi9cbmV4cG9ydCBlbnVtIE5hdENvbm5lY3Rpdml0eVR5cGUge1xuICAvKipcbiAgICogU2V0cyBDb25uZWN0aXZpdHkgdHlwZSB0byBQVUJMSUNcbiAgICovXG4gIFBVQkxJQyA9ICdwdWJsaWMnLFxuICAvKipcbiAgICogU2V0cyBDb25uZWN0aXZpdHkgdHlwZSB0byBQUklWQVRFXG4gICAqL1xuICBQUklWQVRFID0gJ3ByaXZhdGUnLFxufVxuXG4vKipcbiAqIEludGVyZmFjZSB0byBkZWZpbmUgYSByb3V0aW5nIHRhcmdldCwgc3VjaCBhcyBhblxuICogZWdyZXNzLW9ubHkgaW50ZXJuZXQgZ2F0ZXdheSBvciBWUEMgZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVJvdXRlVGFyZ2V0IGV4dGVuZHMgSURlcGVuZGFibGUge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHVzZWQgaW4gdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVHlwZTogUm91dGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGFuIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWdyZXNzT25seUludGVybmV0R2F0ZXdheVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVlBDIGZvciB3aGljaCB0byBjcmVhdGUgdGhlIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGNWMjtcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlIG5hbWUgb2YgdGhlIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvdmlzaW9uZWQgd2l0aG91dCBhIHJlc291cmNlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGFuIGludGVybmV0IGdhdGV3YXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJuZXRHYXRld2F5UHJvcHMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgaW50ZXJuZXQgZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogSVZwY1YyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgaW50ZXJuZXQgZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcm92aXNpb25lZCB3aXRob3V0IGEgcmVzb3VyY2UgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJuZXRHYXRld2F5TmFtZT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGEgVlBOIGdhdGV3YXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlBOR2F0ZXdheVYyUHJvcHMgZXh0ZW5kcyBWUE5HYXRld2F5VjJPcHRpb25zIHtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgVlBOIGdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGNWMjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGRlZmluZSBhIE5BVCBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hdEdhdGV3YXlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBzdWJuZXQgaW4gd2hpY2ggdGhlIE5BVCBnYXRld2F5IGlzIGxvY2F0ZWQuXG4gICAqL1xuICByZWFkb25seSBzdWJuZXQ6IElTdWJuZXRWMjtcblxuICAvKipcbiAgICogQWxsb2NhdGlvbklEIG9mIEVsYXN0aWMgSVAgYWRkcmVzcyB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBOQVQgZ2F0ZXdheS4gVGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZCBmb3IgYSBwdWJsaWMgTkFUXG4gICAqIGdhdGV3YXkgYW5kIGNhbm5vdCBiZSBzcGVjaWZpZWQgd2l0aCBhIHByaXZhdGUgTkFUIGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXR0ci5hbGxvY2F0aW9uSUQgb2YgYSBuZXcgRWxhc3RpYyBJUCBjcmVhdGVkIGJ5IGRlZmF1bHRcbiAgICogLy9UT0RPOiBBREQgTDIgZm9yIGVsYXN0aWMgaXBcbiAgICovXG4gIHJlYWRvbmx5IGFsbG9jYXRpb25JZD86IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIE5BVCBnYXRld2F5IHN1cHBvcnRzIHB1YmxpYyBvciBwcml2YXRlIGNvbm5lY3Rpdml0eS5cbiAgICpcbiAgICogQGRlZmF1bHQgTmF0Q29ubmVjdGl2aXR5VHlwZS5QdWJsaWNcbiAgICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpdml0eVR5cGU/OiBOYXRDb25uZWN0aXZpdHlUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSB0byB3YWl0IGJlZm9yZSBmb3JjaWJseSByZWxlYXNpbmcgdGhlXG4gICAqIElQIGFkZHJlc3NlcyBpZiBjb25uZWN0aW9ucyBhcmUgc3RpbGwgaW4gcHJvZ3Jlc3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLnNlY29uZHMoMzUwKVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4RHJhaW5EdXJhdGlvbj86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpdmF0ZSBJUHY0IGFkZHJlc3MgdG8gYXNzaWduIHRvIHRoZSBOQVQgZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBJZiB5b3UgZG9uJ3QgcHJvdmlkZSBhbiBhZGRyZXNzLCBhIHByaXZhdGUgSVB2NCBhZGRyZXNzIHdpbGwgYmUgYXV0b21hdGljYWxseSBhc3NpZ25lZC5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVJcEFkZHJlc3M/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlY29uZGFyeSBFSVAgYWxsb2NhdGlvbiBJRHMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1uYXQtZ2F0ZXdheS5odG1sI25hdC1nYXRld2F5LWNyZWF0aW5nXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc2Vjb25kYXJ5IGFsbG9jYXRpb24gSURzIGF0dGFjaGVkIHRvIE5BVEdXXG4gICAqXG4gICAqL1xuICByZWFkb25seSBzZWNvbmRhcnlBbGxvY2F0aW9uSWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2Ygc2Vjb25kYXJ5IHByaXZhdGUgSVB2NCBhZGRyZXNzZXMgeW91XG4gICAqIHdhbnQgdG8gYXNzaWduIHRvIHRoZSBOQVQgZ2F0ZXdheS5cbiAgICpcbiAgICogYFNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3NDb3VudGAgYW5kIGBTZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzZXNgIGNhbm5vdCBiZVxuICAgKiBzZXQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLW5hdC1nYXRld2F5Lmh0bWwjbmF0LWdhdGV3YXktY3JlYXRpbmdcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBzZWNvbmRhcnkgYWxsb2NhdGlvbiBJRHMgYXNzb2NpYXRlZCB3aXRoIE5BVEdXXG4gICAqL1xuICByZWFkb25seSBzZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzQ291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNlY29uZGFyeSBwcml2YXRlIElQdjQgYWRkcmVzc2VzLlxuICAgKlxuICAgKiBgU2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc0NvdW50YCBhbmQgYFNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3Nlc2AgY2Fubm90IGJlXG4gICAqIHNldCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtbmF0LWdhdGV3YXkuaHRtbCNuYXQtZ2F0ZXdheS1jcmVhdGluZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHNlY29uZGFyeSBwcml2YXRlIElwQWRkcmVzc2VzIGFzc29jaWF0ZWQgd2l0aCBOQVRHV1xuICAgKi9cbiAgcmVhZG9ubHkgc2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBOQVQgZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOQVRHVyBwcm92aXNpb25lZCB3aXRob3V0IGFueSBuYW1lXG4gICAqL1xuICByZWFkb25seSBuYXRHYXRld2F5TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIE5BVCBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hdEdhdGV3YXlQcm9wcyBleHRlbmRzIE5hdEdhdGV3YXlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVlBDIGluIHdoaWNoIHRoZSBOQVQgZ2F0ZXdheSBpcyBsb2NhdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGVsYXN0aWMgaXAgYXNzb2NpYXRlZCwgcmVxdWlyZWQgaW4gY2FzZSBvZiBwdWJsaWMgY29ubmVjdGl2aXR5IGlmIGBBbGxvY2F0aW9uSWRgIGlzIG5vdCBkZWZpbmVkXG4gICAqL1xuICByZWFkb25seSB2cGM/OiBJVnBjVjI7XG59XG5cbi8qKlxuICogT3B0aW9ucyB0byBkZWZpbmUgYSBWUEMgcGVlcmluZyBjb25uZWN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZQQ1BlZXJpbmdDb25uZWN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgVlBDIHRoYXQgaXMgYWNjZXB0aW5nIHRoZSBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBhY2NlcHRvclZwYzogSVZwY1YyO1xuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSBhcm4gY3JlYXRlZCBpbiB0aGUgYWNjZXB0b3IgYWNjb3VudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBwZWVyUm9sZUFybiBuZWVkZWQgaWYgbm90IGNyb3NzIGFjY291bnQgY29ubmVjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcGVlclJvbGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcGVlcmluZyBjb25uZWN0aW9uIHByb3Zpc2lvbmVkIHdpdGhvdXQgYW55IG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHZwY1BlZXJpbmdDb25uZWN0aW9uTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlBDUGVlcmluZ0Nvbm5lY3Rpb25Qcm9wcyBleHRlbmRzIFZQQ1BlZXJpbmdDb25uZWN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgVlBDIHRoYXQgaXMgcmVxdWVzdGluZyB0aGUgcGVlcmluZyBjb25uZWN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdG9yVnBjOiBJVnBjVjI7XG59XG5cbi8qKlxuICogTmFtZSB0YWcgY29uc3RhbnRcbiAqL1xuY29uc3QgTkFNRV9UQUc6IHN0cmluZyA9ICdOYW1lJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXlcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6RWdyZXNzT25seUludGVybmV0R2F0ZXdheVxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgRWdyZXNzT25seUludGVybmV0R2F0ZXdheSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVJvdXRlVGFyZ2V0IHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtZWMyLWFscGhhLkVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXknO1xuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHVzZWQgaW4gdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVHlwZTogUm91dGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZWdyZXNzLW9ubHkgaW50ZXJuZXQgZ2F0ZXdheSBDRk4gcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IENmbkVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXk7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICBpZiAocHJvcHMuZWdyZXNzT25seUludGVybmV0R2F0ZXdheU5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcy5lZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5TmFtZSk7XG4gICAgfVxuICAgIHRoaXMucm91dGVyVHlwZSA9IFJvdXRlclR5cGUuRUdSRVNTX09OTFlfSU5URVJORVRfR0FURVdBWTtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgQ2ZuRWdyZXNzT25seUludGVybmV0R2F0ZXdheSh0aGlzLCAnRUlHVycsIHtcbiAgICAgIHZwY0lkOiBwcm9wcy52cGMudnBjSWQsXG4gICAgfSk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5hdHRySWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGludGVybmV0IGdhdGV3YXlcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6SW50ZXJuZXRHYXRld2F5XG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBJbnRlcm5ldEdhdGV3YXkgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElSb3V0ZVRhcmdldCB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWVjMi1hbHBoYS5JbnRlcm5ldEdhdGV3YXknO1xuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHVzZWQgaW4gdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVHlwZTogUm91dGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFZQQyBmb3Igd2hpY2ggdG8gY3JlYXRlIHRoZSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlcm5ldCBnYXRld2F5IENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogQ2ZuSW50ZXJuZXRHYXRld2F5O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJbnRlcm5ldEdhdGV3YXlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICB0aGlzLnJvdXRlclR5cGUgPSBSb3V0ZXJUeXBlLkdBVEVXQVk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmbkludGVybmV0R2F0ZXdheSh0aGlzLCAnSUdXJywge30pO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuXG4gICAgdGhpcy5yb3V0ZXJUYXJnZXRJZCA9IEZlYXR1cmVGbGFncy5vZih0aGlzKS5pc0VuYWJsZWQoY3hfYXBpLlVTRV9SRVNPVVJDRUlEX0ZPUl9WUENWMl9NSUdSQVRJT04pID9cbiAgICAgIHRoaXMucmVzb3VyY2UucmVmIDogdGhpcy5yZXNvdXJjZS5hdHRySW50ZXJuZXRHYXRld2F5SWQ7XG4gICAgdGhpcy52cGNJZCA9IHByb3BzLnZwYy52cGNJZDtcblxuICAgIGlmIChwcm9wcy5pbnRlcm5ldEdhdGV3YXlOYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMuaW50ZXJuZXRHYXRld2F5TmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnZwYy52cGNOYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZCgnTmFtZScsIHByb3BzLnZwYy52cGNOYW1lKTtcbiAgICB9XG5cbiAgICBuZXcgQ2ZuVlBDR2F0ZXdheUF0dGFjaG1lbnQodGhpcywgJ0dXQXR0YWNobWVudCcsIHtcbiAgICAgIHZwY0lkOiB0aGlzLnZwY0lkLFxuICAgICAgaW50ZXJuZXRHYXRld2F5SWQ6IHRoaXMucm91dGVyVGFyZ2V0SWQsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdmlydHVhbCBwcml2YXRlIGdhdGV3YXlcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6VlBOR2F0ZXdheVxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgVlBOR2F0ZXdheVYyIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJUm91dGVUYXJnZXQge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1lYzItYWxwaGEuVlBOR2F0ZXdheVYyJztcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgVlBOIGdhdGV3YXkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFZQTiBnYXRld2F5IENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogQ2ZuVlBOR2F0ZXdheTtcblxuICAvKipcbiAgICogVGhlIFZQTiBHYXRld2F5IEF0dGFjaG1lbnRcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2F0dGFjaG1lbnQ6IENmblZQQ0dhdGV3YXlBdHRhY2htZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgVlBOIEdhdGV3YXkgUm91dGUgUHJvcGFnYXRpb25cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlUHJvcGFnYXRpb246IENmblZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBWUE5HYXRld2F5VjJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy52cG5HYXRld2F5TmFtZSxcbiAgICB9KTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIHRoaXMucm91dGVyVHlwZSA9IFJvdXRlclR5cGUuR0FURVdBWTtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgQ2ZuVlBOR2F0ZXdheSh0aGlzLCAnSUdXJywge1xuICAgICAgdHlwZTogcHJvcHMudHlwZSxcbiAgICAgIGFtYXpvblNpZGVBc246IHByb3BzLmFtYXpvblNpZGVBc24sXG4gICAgfSk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5hdHRyVnBuR2F0ZXdheUlkO1xuXG4gICAgdGhpcy52cGNJZCA9IHByb3BzLnZwYy52cGNJZDtcbiAgICB0aGlzLl9hdHRhY2htZW50ID0gbmV3IENmblZQQ0dhdGV3YXlBdHRhY2htZW50KHRoaXMsICdWUENWUE5HVycsIHtcbiAgICAgIHZwY0lkOiB0aGlzLnZwY0lkLFxuICAgICAgdnBuR2F0ZXdheUlkOiB0aGlzLnJlc291cmNlLmF0dHJWcG5HYXRld2F5SWQsXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMudnBuR2F0ZXdheU5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcy52cG5HYXRld2F5TmFtZSk7XG4gICAgfVxuXG4gICAgLy8gUHJvcGFnYXRlIHJvdXRlcyBvbiByb3V0ZSB0YWJsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByaWdodCBzdWJuZXRzXG4gICAgY29uc3QgdnBuUm91dGVQcm9wYWdhdGlvbiA9IHByb3BzLnZwblJvdXRlUHJvcGFnYXRpb24gPz8gW107XG4gICAgY29uc3Qgc3VibmV0cyA9IHZwblJvdXRlUHJvcGFnYXRpb24ubWFwKHMgPT4gcHJvcHMudnBjLnNlbGVjdFN1Ym5ldHMocykuc3VibmV0cykuZmxhdCgpO1xuICAgIGNvbnN0IHJvdXRlVGFibGVJZHMgPSBhbGxSb3V0ZVRhYmxlSWRzKHN1Ym5ldHMpO1xuXG4gICAgaWYgKHJvdXRlVGFibGVJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBBbm5vdGF0aW9ucy5vZihzY29wZSkuYWRkV2FybmluZ1YyKCdAYXdzLWNkazphd3MtZWMyLWVscGhhOmVuYWJsZVZwbkdhdGV3YXlWMicsIGBObyBzdWJuZXRzIG1hdGNoaW5nIHNlbGVjdGlvbjogJyR7SlNPTi5zdHJpbmdpZnkodnBuUm91dGVQcm9wYWdhdGlvbil9Jy4gU2VsZWN0IG90aGVyIHN1Ym5ldHMgdG8gYWRkIHJvdXRlcyB0by5gKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yb3V0ZVByb3BhZ2F0aW9uID0gbmV3IENmblZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uKHRoaXMsICdSb3V0ZVByb3BhZ2F0aW9uJywge1xuICAgICAgcm91dGVUYWJsZUlkcyxcbiAgICAgIHZwbkdhdGV3YXlJZDogdGhpcy5yb3V0ZXJUYXJnZXRJZCxcbiAgICB9KTtcbiAgICAvLyBUaGUgQVdTOjpFQzI6OlZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uIHJlc291cmNlIGNhbm5vdCB1c2UgdGhlIFZQTiBnYXRld2F5XG4gICAgLy8gdW50aWwgaXQgaGFzIHN1Y2Nlc3NmdWxseSBhdHRhY2hlZCB0byB0aGUgVlBDLlxuICAgIC8vIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXZwbi1nYXRld2F5cm91dGVwcm9wLmh0bWxcbiAgICB0aGlzLl9yb3V0ZVByb3BhZ2F0aW9uLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLl9hdHRhY2htZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXR3b3JrIGFkZHJlc3MgdHJhbnNsYXRpb24gKE5BVCkgZ2F0ZXdheVxuICogQHJlc291cmNlIEFXUzo6RUMyOjpOYXRHYXRld2F5XG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBOYXRHYXRld2F5IGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJUm91dGVUYXJnZXQge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1lYzItYWxwaGEuTmF0R2F0ZXdheSc7XG4gIC8qKlxuICAgKiBJZCBvZiB0aGUgTmF0R2F0ZXdheVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmF0R2F0ZXdheUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhcmdldC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgTkFUIGdhdGV3YXkgc3VwcG9ydHMgcHVibGljIG9yIHByaXZhdGUgY29ubmVjdGl2aXR5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBwdWJsaWNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aXZpdHlUeXBlPzogTmF0Q29ubmVjdGl2aXR5VHlwZTtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBiZWZvcmUgZm9yY2libHkgcmVsZWFzaW5nIHRoZVxuICAgKiBJUCBhZGRyZXNzZXMgaWYgY29ubmVjdGlvbnMgYXJlIHN0aWxsIGluIHByb2dyZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnMzUwIHNlY29uZHMnXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbWF4RHJhaW5EdXJhdGlvbj86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgTkFUIGdhdGV3YXkgQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBDZm5OYXRHYXRld2F5O1xuXG4gIC8qKlxuICAgKiBFbGFzdGljIElQIGNyZWF0ZWQgZm9yIGFsbG9jYXRpb25cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlaXA/OiBDZm5FSVA7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5hdEdhdGV3YXlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICB0aGlzLnJvdXRlclR5cGUgPSBSb3V0ZXJUeXBlLk5BVF9HQVRFV0FZO1xuXG4gICAgdGhpcy5jb25uZWN0aXZpdHlUeXBlID0gcHJvcHMuY29ubmVjdGl2aXR5VHlwZSB8fCBOYXRDb25uZWN0aXZpdHlUeXBlLlBVQkxJQztcbiAgICB0aGlzLm1heERyYWluRHVyYXRpb24gPSBwcm9wcy5tYXhEcmFpbkR1cmF0aW9uIHx8IER1cmF0aW9uLnNlY29uZHMoMzUwKTtcblxuICAgIGlmICh0aGlzLmNvbm5lY3Rpdml0eVR5cGUgPT09IE5hdENvbm5lY3Rpdml0eVR5cGUuUFVCTElDKSB7XG4gICAgICBpZiAoIXByb3BzLnZwYyAmJiAhcHJvcHMuYWxsb2NhdGlvbklkKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ1ZwY09yQWxsb2NhdGlvbklkUmVxdWlyZWQnLCAnRWl0aGVyIHByb3ZpZGUgdnBjIG9yIGFsbG9jYXRpb25JZCcsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wcy5uYXRHYXRld2F5TmFtZSkge1xuICAgICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHByb3BzPy5uYXRHYXRld2F5TmFtZSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdXNlciBkb2VzIG5vdCBwcm92aWRlIEVJUCwgZ2VuZXJhdGUgb25lIGZvciB0aGVtXG4gICAgdmFyIGFJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLmNvbm5lY3Rpdml0eVR5cGUgPT09IE5hdENvbm5lY3Rpdml0eVR5cGUuUFVCTElDKSB7XG4gICAgICBpZiAoIXByb3BzLmFsbG9jYXRpb25JZCkge1xuICAgICAgICB0aGlzLmVpcCA9IG5ldyBDZm5FSVAodGhpcywgJ0VJUCcsIHtcbiAgICAgICAgICBkb21haW46ICd2cGMnLFxuICAgICAgICB9KTtcbiAgICAgICAgYUlkID0gdGhpcy5laXAuYXR0ckFsbG9jYXRpb25JZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFJZCA9IHByb3BzLmFsbG9jYXRpb25JZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmbk5hdEdhdGV3YXkodGhpcywgJ05BVEdhdGV3YXknLCB7XG4gICAgICBzdWJuZXRJZDogcHJvcHMuc3VibmV0LnN1Ym5ldElkLFxuICAgICAgYWxsb2NhdGlvbklkOiBhSWQsXG4gICAgICBtYXhEcmFpbkR1cmF0aW9uU2Vjb25kczogcHJvcHMubWF4RHJhaW5EdXJhdGlvbj8udG9TZWNvbmRzKCksXG4gICAgICBzZWNvbmRhcnlBbGxvY2F0aW9uSWRzOiBwcm9wcy5zZWNvbmRhcnlBbGxvY2F0aW9uSWRzLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gICAgdGhpcy5uYXRHYXRld2F5SWQgPSBGZWF0dXJlRmxhZ3Mub2YodGhpcykuaXNFbmFibGVkKGN4X2FwaS5VU0VfUkVTT1VSQ0VJRF9GT1JfVlBDVjJfTUlHUkFUSU9OKSA/XG4gICAgICB0aGlzLnJlc291cmNlLnJlZiA6IHRoaXMucmVzb3VyY2UuYXR0ck5hdEdhdGV3YXlJZDtcblxuICAgIHRoaXMucm91dGVyVGFyZ2V0SWQgPSBGZWF0dXJlRmxhZ3Mub2YodGhpcykuaXNFbmFibGVkKGN4X2FwaS5VU0VfUkVTT1VSQ0VJRF9GT1JfVlBDVjJfTUlHUkFUSU9OKSA/XG4gICAgICB0aGlzLnJlc291cmNlLnJlZiA6IHRoaXMucmVzb3VyY2UuYXR0ck5hdEdhdGV3YXlJZDtcblxuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuICAgIHRoaXMucmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KHByb3BzLnN1Ym5ldC5pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBwZWVyaW5nIGNvbm5lY3Rpb24gYmV0d2VlbiB0d28gVlBDc1xuICogQHJlc291cmNlIEFXUzo6RUMyOjpWUENQZWVyaW5nQ29ubmVjdGlvblxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgVlBDUGVlcmluZ0Nvbm5lY3Rpb24gZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElSb3V0ZVRhcmdldCB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWVjMi1hbHBoYS5WUENQZWVyaW5nQ29ubmVjdGlvbic7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiByb3V0ZXIgdXNlZCBpbiB0aGUgcm91dGUuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhcmdldC5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclRhcmdldElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgcGVlcmluZyBjb25uZWN0aW9uIENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogQ2ZuVlBDUGVlcmluZ0Nvbm5lY3Rpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFZQQ1BlZXJpbmdDb25uZWN0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgdGhpcy5yb3V0ZXJUeXBlID0gUm91dGVyVHlwZS5WUENfUEVFUklOR19DT05ORUNUSU9OO1xuXG4gICAgY29uc3QgaXNDcm9zc0FjY291bnQgPSBwcm9wcy5yZXF1ZXN0b3JWcGMub3duZXJBY2NvdW50SWQgIT09IHByb3BzLmFjY2VwdG9yVnBjLm93bmVyQWNjb3VudElkO1xuXG4gICAgaWYgKCFpc0Nyb3NzQWNjb3VudCAmJiBwcm9wcy5wZWVyUm9sZUFybikge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcignUGVlclJvbGVBcm5Ob3ROZWVkZWRGb3JTYW1lQWNjb3VudCcsICdwZWVyUm9sZUFybiBpcyBub3QgbmVlZGVkIGZvciBzYW1lIGFjY291bnQgcGVlcmluZycsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmIChpc0Nyb3NzQWNjb3VudCAmJiAhcHJvcHMucGVlclJvbGVBcm4pIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ0Nyb3NzQWNjb3VudFBlZXJpbmdSZXF1aXJlc1BlZXJSb2xlQXJuJywgJ0Nyb3NzIGFjY291bnQgVlBDIHBlZXJpbmcgcmVxdWlyZXMgcGVlclJvbGVBcm4nLCB0aGlzKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdmVybGFwID0gdGhpcy52YWxpZGF0ZVZwY0NpZHJPdmVybGFwKHByb3BzLnJlcXVlc3RvclZwYywgcHJvcHMuYWNjZXB0b3JWcGMpO1xuICAgIGlmIChvdmVybGFwKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdWcGNDaWRyQmxvY2tzT3ZlcmxhcCcsICdDSURSIGJsb2NrIHNob3VsZCBub3Qgb3ZlcmxhcCB3aXRoIGVhY2ggb3RoZXIgZm9yIGVzdGFibGlzaGluZyBhIHBlZXJpbmcgY29ubmVjdGlvbicsIHRoaXMpO1xuICAgIH1cbiAgICBpZiAocHJvcHMudnBjUGVlcmluZ0Nvbm5lY3Rpb25OYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMudnBjUGVlcmluZ0Nvbm5lY3Rpb25OYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmblZQQ1BlZXJpbmdDb25uZWN0aW9uKHRoaXMsICdWUENQZWVyaW5nQ29ubmVjdGlvbicsIHtcbiAgICAgIHZwY0lkOiBwcm9wcy5yZXF1ZXN0b3JWcGMudnBjSWQsXG4gICAgICBwZWVyVnBjSWQ6IHByb3BzLmFjY2VwdG9yVnBjLnZwY0lkLFxuICAgICAgcGVlck93bmVySWQ6IHByb3BzLmFjY2VwdG9yVnBjLm93bmVyQWNjb3VudElkLFxuICAgICAgcGVlclJlZ2lvbjogcHJvcHMuYWNjZXB0b3JWcGMucmVnaW9uLFxuICAgICAgcGVlclJvbGVBcm46IGlzQ3Jvc3NBY2NvdW50ID8gcHJvcHMucGVlclJvbGVBcm4gOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5hdHRySWQ7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGlmIHRoZSBwcm92aWRlZCBJUHY0IENJRFIgYmxvY2sgb3ZlcmxhcHMgd2l0aCBleGlzdGluZyBzdWJuZXQgQ0lEUiBibG9ja3Mgd2l0aGluIHRoZSBnaXZlbiBWUEMuXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0b3JWcGMgVGhlIFZQQyBvZiB0aGUgcmVxdWVzdG9yLlxuICAgKiBAcGFyYW0gYWNjZXB0b3JWcGMgVGhlIFZQQyBvZiB0aGUgYWNjZXB0b3IuXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIElQdjQgQ0lEUiBibG9jayBvdmVybGFwcyB3aXRoIGVhY2ggb3RoZXIgZm9yIHR3byBWUENzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVZwY0NpZHJPdmVybGFwKHJlcXVlc3RvclZwYzogSVZwY1YyLCBhY2NlcHRvclZwYzogSVZwY1YyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVxdWVzdG9yQ2lkcnMgPSBbcmVxdWVzdG9yVnBjLmlwdjRDaWRyQmxvY2tdO1xuICAgIGNvbnN0IGFjY2VwdG9yQ2lkcnMgPSBbYWNjZXB0b3JWcGMuaXB2NENpZHJCbG9ja107XG5cbiAgICBpZiAocmVxdWVzdG9yVnBjLnNlY29uZGFyeUNpZHJCbG9jaykge1xuICAgICAgcmVxdWVzdG9yQ2lkcnMucHVzaCguLi5yZXF1ZXN0b3JWcGMuc2Vjb25kYXJ5Q2lkckJsb2NrXG4gICAgICAgIC5tYXAoYmxvY2sgPT4gYmxvY2suY2lkckJsb2NrKVxuICAgICAgICAuZmlsdGVyKChjaWRyKTogY2lkciBpcyBzdHJpbmcgPT4gY2lkciAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxuXG4gICAgaWYgKGFjY2VwdG9yVnBjLnNlY29uZGFyeUNpZHJCbG9jaykge1xuICAgICAgYWNjZXB0b3JDaWRycy5wdXNoKC4uLmFjY2VwdG9yVnBjLnNlY29uZGFyeUNpZHJCbG9ja1xuICAgICAgICAubWFwKGJsb2NrID0+IGJsb2NrLmNpZHJCbG9jaylcbiAgICAgICAgLmZpbHRlcigoY2lkcik6IGNpZHIgaXMgc3RyaW5nID0+IGNpZHIgIT09IHVuZGVmaW5lZCkpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVxdWVzdG9yQ2lkciBvZiByZXF1ZXN0b3JDaWRycykge1xuICAgICAgY29uc3QgcmVxdWVzdG9yUmFuZ2UgPSBuZXcgQ2lkckJsb2NrKHJlcXVlc3RvckNpZHIpO1xuICAgICAgY29uc3QgcmVxdWVzdG9ySXBSYW5nZTogW3N0cmluZywgc3RyaW5nXSA9IFtyZXF1ZXN0b3JSYW5nZS5taW5JcCgpLCByZXF1ZXN0b3JSYW5nZS5tYXhJcCgpXTtcblxuICAgICAgZm9yIChjb25zdCBhY2NlcHRvckNpZHIgb2YgYWNjZXB0b3JDaWRycykge1xuICAgICAgICBjb25zdCBhY2NlcHRvclJhbmdlID0gbmV3IENpZHJCbG9jayhhY2NlcHRvckNpZHIpO1xuICAgICAgICBjb25zdCBhY2NlcHRvcklwUmFuZ2U6IFtzdHJpbmcsIHN0cmluZ10gPSBbYWNjZXB0b3JSYW5nZS5taW5JcCgpLCBhY2NlcHRvclJhbmdlLm1heElwKCldO1xuXG4gICAgICAgIGlmIChyZXF1ZXN0b3JSYW5nZS5yYW5nZXNPdmVybGFwKGFjY2VwdG9ySXBSYW5nZSwgcmVxdWVzdG9ySXBSYW5nZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSB0eXBlIG9mIGVuZHBvaW50IG9yIGdhdGV3YXkgYmVpbmcgdGFyZ2V0ZWQgYnkgdGhlIHJvdXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlVGFyZ2V0UHJvcHMge1xuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcm91dGUgdGFyZ2V0LiBUaGlzIGlzIHVzZWQgZm9yIHRhcmdldHMgc3VjaCBhc1xuICAgKiBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5IG9yIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGFyZ2V0IGlzIG5vdCBzZXQgdG8gYSBnYXRld2F5LCBpbiB0aGlzIGNhc2UgYW4gZW5kcG9pbnQgaXMgbmVlZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheT86IElSb3V0ZVRhcmdldDtcblxuICAvKipcbiAgICogVGhlIGVuZHBvaW50IHJvdXRlIHRhcmdldC4gVGhpcyBpcyB1c2VkIGZvciB0YXJnZXRzIHN1Y2ggYXNcbiAgICogVlBDIGVuZHBvaW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0YXJnZXQgaXMgbm90IHNldCB0byBhbiBlbmRwb2ludCwgaW4gdGhpcyBjYXNlIGEgZ2F0ZXdheSBpcyBuZWVkZWQuXG4gICAqL1xuICByZWFkb25seSBlbmRwb2ludD86IElWcGNFbmRwb2ludDtcbn1cblxuLyoqXG4gKiBUaGUgZ2F0ZXdheSBvciBlbmRwb2ludCB0YXJnZXRlZCBieSB0aGUgcm91dGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBSb3V0ZVRhcmdldFR5cGUge1xuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcm91dGUgdGFyZ2V0LiBUaGlzIGlzIHVzZWQgZm9yIHRhcmdldHMgc3VjaCBhc1xuICAgKiBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5IG9yIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGFyZ2V0IGlzIG5vdCBzZXQgdG8gYSBnYXRld2F5LCBpbiB0aGlzIGNhc2UgYW4gZW5kcG9pbnQgaXMgbmVlZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheT86IElSb3V0ZVRhcmdldDtcblxuICAvKipcbiAgICogVGhlIGVuZHBvaW50IHJvdXRlIHRhcmdldC4gVGhpcyBpcyB1c2VkIGZvciB0YXJnZXRzIHN1Y2ggYXNcbiAgICogVlBDIGVuZHBvaW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0YXJnZXQgaXMgbm90IHNldCB0byBhbiBlbmRwb2ludCwgaW4gdGhpcyBjYXNlIGEgZ2F0ZXdheSBpcyBuZWVkZWQuXG4gICAqL1xuICByZWFkb25seSBlbmRwb2ludD86IElWcGNFbmRwb2ludDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUm91dGVUYXJnZXRQcm9wcykge1xuICAgIHRoaXMuZ2F0ZXdheSA9IHByb3BzLmdhdGV3YXk7XG4gICAgdGhpcy5lbmRwb2ludCA9IHByb3BzLmVuZHBvaW50O1xuICB9XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIHRvIGRlZmluZSBhIHJvdXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSb3V0ZVYyIGV4dGVuZHMgSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFibGUgZm9yIHRoZSByb3V0ZS5cbiAgICogQGF0dHJpYnV0ZSByb3V0ZVRhYmxlXG4gICAqL1xuICByZWFkb25seSByb3V0ZVRhYmxlOiBJUm91dGVUYWJsZTtcblxuICAvKipcbiAgICogVGhlIElQdjQgb3IgSVB2NiBDSURSIGJsb2NrIHVzZWQgZm9yIHRoZSBkZXN0aW5hdGlvbiBtYXRjaC5cbiAgICpcbiAgICogUm91dGluZyBkZWNpc2lvbnMgYXJlIGJhc2VkIG9uIHRoZSBtb3N0IHNwZWNpZmljIG1hdGNoLlxuICAgKiBUT0RPOiBMb29rIGZvciBzdHJvbmcgSVAgdHlwZSBpbXBsZW1lbnRhdGlvbiBoZXJlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgb3IgZW5kcG9pbnQgdGFyZ2V0ZWQgYnkgdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0OiBSb3V0ZVRhcmdldFR5cGU7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBkZWZpbmUgYSByb3V0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFibGUgZm9yIHRoZSByb3V0ZS5cbiAgICpcbiAgICogQGF0dHJpYnV0ZSByb3V0ZVRhYmxlXG4gICAqL1xuICByZWFkb25seSByb3V0ZVRhYmxlOiBJUm91dGVUYWJsZTtcblxuICAvKipcbiAgICogVGhlIElQdjQgb3IgSVB2NiBDSURSIGJsb2NrIHVzZWQgZm9yIHRoZSBkZXN0aW5hdGlvbiBtYXRjaC5cbiAgICpcbiAgICogUm91dGluZyBkZWNpc2lvbnMgYXJlIGJhc2VkIG9uIHRoZSBtb3N0IHNwZWNpZmljIG1hdGNoLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgb3IgZW5kcG9pbnQgdGFyZ2V0ZWQgYnkgdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0OiBSb3V0ZVRhcmdldFR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSByb3V0ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcm92aXNpb25lZCB3aXRob3V0IGEgcm91dGUgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgcm91dGUgd2l0aCBhZGRlZCBmdW5jdGlvbmFsaXR5LlxuICogQHJlc291cmNlIEFXUzo6RUMyOjpSb3V0ZVxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgUm91dGUgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElSb3V0ZVYyIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtZWMyLWFscGhhLlJvdXRlJztcbiAgLyoqXG4gICAqIFRoZSBJUHY0IG9yIElQdjYgQ0lEUiBibG9jayB1c2VkIGZvciB0aGUgZGVzdGluYXRpb24gbWF0Y2guXG4gICAqXG4gICAqIFJvdXRpbmcgZGVjaXNpb25zIGFyZSBiYXNlZCBvbiB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXN0aW5hdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSBvciBlbmRwb2ludCB0YXJnZXRlZCBieSB0aGUgcm91dGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0OiBSb3V0ZVRhcmdldFR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSByb3V0ZSB0YWJsZSBmb3IgdGhlIHJvdXRlLlxuICAgKiBAYXR0cmlidXRlIHJvdXRlVGFibGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZVRhYmxlOiBJUm91dGVUYWJsZTtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHRoZSByb3V0ZSBpcyB0YXJnZXRpbmdcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YXJnZXRSb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgcm91dGUgQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlPzogQ2ZuUm91dGU7XG5cbiAgLyoqXG4gICAqIERlc3RpbmF0aW9uIGNpZHIgYmxvY2sgZm9yIGlwdjZcbiAgICovXG4gIHByaXZhdGUgZGVzdGluYXRpb25JcHY2Q2lkcj86IHN0cmluZztcblxuICAvKipcbiAgICogRGVzdGluYXRpb24gY2lkciBibG9jayBmb3IgaXB2NFxuICAgKi9cbiAgcHJpdmF0ZSBkZXN0aW5hdGlvbklwdjRDaWRyPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSb3V0ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIHRoaXMudGFyZ2V0ID0gcHJvcHMudGFyZ2V0O1xuICAgIHRoaXMucm91dGVUYWJsZSA9IHByb3BzLnJvdXRlVGFibGU7XG4gICAgdGhpcy5kZXN0aW5hdGlvbiA9IHByb3BzLmRlc3RpbmF0aW9uO1xuICAgIGNvbnN0IGlzRGVzdGluYXRpb25JcHY0ID0gTmV0d29ya1V0aWxzLnZhbGlkSXAocHJvcHMuZGVzdGluYXRpb24pO1xuICAgIGlmICghaXNEZXN0aW5hdGlvbklwdjQpIHtcbiAgICAgIC8vIFRPRE8gVmFsaWRhdGUgZm9yIElQdjYgQ0lEUiByYW5nZVxuICAgICAgdGhpcy5kZXN0aW5hdGlvbklwdjZDaWRyID0gcHJvcHMuZGVzdGluYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb25JcHY0Q2lkciA9IHByb3BzLmRlc3RpbmF0aW9uO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRhcmdldC5nYXRld2F5Py5yb3V0ZXJUeXBlID09PSBSb3V0ZXJUeXBlLkVHUkVTU19PTkxZX0lOVEVSTkVUX0dBVEVXQVkgJiYgaXNEZXN0aW5hdGlvbklwdjQpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoJ0VncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlEb2VzTm90U3VwcG9ydElwdjQnLCAnRWdyZXNzIG9ubHkgaW50ZXJuZXQgZ2F0ZXdheSBkb2VzIG5vdCBzdXBwb3J0IElQdjQgcm91dGluZycsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICgocHJvcHMudGFyZ2V0LmdhdGV3YXkgJiYgcHJvcHMudGFyZ2V0LmVuZHBvaW50KSB8fCAoIXByb3BzLnRhcmdldC5nYXRld2F5ICYmICFwcm9wcy50YXJnZXQuZW5kcG9pbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKCdFeGFjdGx5T25lVGFyZ2V0UmVxdWlyZWQnLCAnRXhhY3RseSBvbmUgb2YgYGdhdGV3YXlgIG9yIGBlbmRwb2ludGAgbXVzdCBiZSBzcGVjaWZpZWQuJywgdGhpcyk7XG4gICAgfVxuICAgIHRoaXMudGFyZ2V0Um91dGVyVHlwZSA9IHRoaXMudGFyZ2V0LmdhdGV3YXkgPyB0aGlzLnRhcmdldC5nYXRld2F5LnJvdXRlclR5cGUgOiBSb3V0ZXJUeXBlLlZQQ19FTkRQT0lOVDtcbiAgICAvLyBHYXRld2F5IGdlbmVyYXRlcyByb3V0ZSBhdXRvbWF0aWNhbGx5IHZpYSBpdHMgUm91dGVUYWJsZSwgdGh1cyB3ZSBkb24ndCBuZWVkIHRvIGdlbmVyYXRlIHRoZSByZXNvdXJjZSBmb3IgaXRcbiAgICBpZiAoISh0aGlzLnRhcmdldC5lbmRwb2ludCBpbnN0YW5jZW9mIEdhdGV3YXlWcGNFbmRwb2ludCkpIHtcbiAgICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgQ2ZuUm91dGUodGhpcywgJ1JvdXRlJywge1xuICAgICAgICByb3V0ZVRhYmxlSWQ6IHRoaXMucm91dGVUYWJsZS5yb3V0ZVRhYmxlSWQsXG4gICAgICAgIGRlc3RpbmF0aW9uQ2lkckJsb2NrOiB0aGlzLmRlc3RpbmF0aW9uSXB2NENpZHIsXG4gICAgICAgIGRlc3RpbmF0aW9uSXB2NkNpZHJCbG9jazogdGhpcy5kZXN0aW5hdGlvbklwdjZDaWRyLFxuICAgICAgICBbcm91dGVyVHlwZVRvUHJvcE5hbWUodGhpcy50YXJnZXRSb3V0ZXJUeXBlKV06IHRoaXMudGFyZ2V0LmdhdGV3YXkgPyB0aGlzLnRhcmdldC5nYXRld2F5LnJvdXRlclRhcmdldElkIDpcbiAgICAgICAgICB0aGlzLnRhcmdldC5lbmRwb2ludCA/IHRoaXMudGFyZ2V0LmVuZHBvaW50LnZwY0VuZHBvaW50SWQgOiBudWxsLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuXG4gICAgLy8gQ3JlYXRlIGEgcm91dGUgb25seSBhZnRlciB0YXJnZXQgZ2F0ZXdheSBvciBlbmRwb2ludCBpcyBjcmVhdGVkXG4gICAgaWYgKHRoaXMudGFyZ2V0LmdhdGV3YXkpIHtcbiAgICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMudGFyZ2V0LmdhdGV3YXkpO1xuICAgIH1cbiAgICBpZiAodGhpcy50YXJnZXQuZW5kcG9pbnQpIHtcbiAgICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMudGFyZ2V0LmVuZHBvaW50KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIHJvdXRlIHRhYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlVGFibGVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFZQQy5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogSVZwY1YyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgcm91dGUgdGFibGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvdmlzaW9uZWQgd2l0aG91dCBhIHJvdXRlIHRhYmxlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlVGFibGVOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSByb3V0ZSB0YWJsZSBmb3IgdGhlIHNwZWNpZmllZCBWUENcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6Um91dGVUYWJsZVxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgUm91dGVUYWJsZSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVJvdXRlVGFibGUge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1lYzItYWxwaGEuUm91dGVUYWJsZSc7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhYmxlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlVGFibGVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcm91dGUgdGFibGUgQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBDZm5Sb3V0ZVRhYmxlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSb3V0ZVRhYmxlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBDZm5Sb3V0ZVRhYmxlKHRoaXMsICdSb3V0ZVRhYmxlJywge1xuICAgICAgdnBjSWQ6IHByb3BzLnZwYy52cGNJZCxcbiAgICB9KTtcbiAgICBpZiAocHJvcHMucm91dGVUYWJsZU5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcy5yb3V0ZVRhYmxlTmFtZSk7XG4gICAgfVxuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuXG4gICAgdGhpcy5yb3V0ZVRhYmxlSWQgPSBGZWF0dXJlRmxhZ3Mub2YodGhpcykuaXNFbmFibGVkKGN4X2FwaS5VU0VfUkVTT1VSQ0VJRF9GT1JfVlBDVjJfTUlHUkFUSU9OKSA/XG4gICAgICB0aGlzLnJlc291cmNlLnJlZiA6IHRoaXMucmVzb3VyY2UuYXR0clJvdXRlVGFibGVJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGN1c3RvbSByb3V0ZSB0byB0aGUgcm91dGUgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBkZXN0aW5hdGlvbiBUaGUgSVB2NCBvciBJUHY2IENJRFIgYmxvY2sgdXNlZCBmb3IgdGhlIGRlc3RpbmF0aW9uIG1hdGNoLlxuICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSBnYXRld2F5IG9yIGVuZHBvaW50IHRhcmdldGVkIGJ5IHRoZSByb3V0ZS5cbiAgICogQHBhcmFtIHJvdXRlTmFtZSBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgcm91dGUuXG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkUm91dGUoaWQ6IHN0cmluZywgZGVzdGluYXRpb246IHN0cmluZywgdGFyZ2V0OiBSb3V0ZVRhcmdldFR5cGUsIHJvdXRlTmFtZT86IHN0cmluZykge1xuICAgIG5ldyBSb3V0ZSh0aGlzLCBpZCwge1xuICAgICAgcm91dGVUYWJsZTogdGhpcyxcbiAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcm91dGVOYW1lOiByb3V0ZU5hbWUsXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcm91dGVyVHlwZVRvUHJvcE5hbWUocm91dGVyVHlwZTogUm91dGVyVHlwZSkge1xuICByZXR1cm4gKHtcbiAgICBbUm91dGVyVHlwZS5DQVJSSUVSX0dBVEVXQVldOiAnY2FycmllckdhdGV3YXlJZCcsXG4gICAgW1JvdXRlclR5cGUuRUdSRVNTX09OTFlfSU5URVJORVRfR0FURVdBWV06ICdlZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5SWQnLFxuICAgIFtSb3V0ZXJUeXBlLkdBVEVXQVldOiAnZ2F0ZXdheUlkJyxcbiAgICBbUm91dGVyVHlwZS5JTlNUQU5DRV06ICdpbnN0YW5jZUlkJyxcbiAgICBbUm91dGVyVHlwZS5MT0NBTF9HQVRFV0FZXTogJ2xvY2FsR2F0ZXdheUlkJyxcbiAgICBbUm91dGVyVHlwZS5OQVRfR0FURVdBWV06ICduYXRHYXRld2F5SWQnLFxuICAgIFtSb3V0ZXJUeXBlLk5FVFdPUktfSU5URVJGQUNFXTogJ25ldHdvcmtJbnRlcmZhY2VJZCcsXG4gICAgW1JvdXRlclR5cGUuVFJBTlNJVF9HQVRFV0FZXTogJ3RyYW5zaXRHYXRld2F5SWQnLFxuICAgIFtSb3V0ZXJUeXBlLlZQQ19QRUVSSU5HX0NPTk5FQ1RJT05dOiAndnBjUGVlcmluZ0Nvbm5lY3Rpb25JZCcsXG4gICAgW1JvdXRlclR5cGUuVlBDX0VORFBPSU5UXTogJ3ZwY0VuZHBvaW50SWQnLFxuICAgIFtSb3V0ZXJUeXBlLkNPUkVfTkVUV09SS106ICdjb3JlTmV0d29ya0FybicsXG4gIH0pW3JvdXRlclR5cGVdO1xufVxuIl19
772
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBcUM7QUFFckMsaURBQXVRO0FBRXZRLDJDQUF3RztBQUN4Ryw0RUFBNEQ7QUFDNUQsOEVBQThGO0FBQzlGLDBFQUEwRTtBQUcxRSxpQ0FBbUU7QUFHbkU7Ozs7R0FJRztBQUNILElBQVksbUJBU1g7QUFURCxXQUFZLG1CQUFtQjtJQUM3Qjs7T0FFRztJQUNILHdDQUFpQixDQUFBO0lBQ2pCOztPQUVHO0lBQ0gsMENBQW1CLENBQUE7QUFDckIsQ0FBQyxFQVRXLG1CQUFtQixtQ0FBbkIsbUJBQW1CLFFBUzlCO0FBOExEOztHQUVHO0FBQ0gsTUFBTSxRQUFRLEdBQVcsTUFBTSxDQUFDO0FBRWhDOzs7R0FHRztJQUVVLHlCQUF5Qjs0QkFEckMsb0NBQWtCOzs7O3NCQUM0QixlQUFRO3lDQUFoQixTQUFRLFdBQVE7Ozs7WUFBdkQsNktBbUNDOzs7OztRQWxDQyxzQ0FBc0M7UUFDL0IsTUFBTSxDQUFVLHFCQUFxQixHQUFXLGtEQUFrRCxDQUFDO1FBQzFHOztXQUVHO1FBQ00sVUFBVSxDQUFhO1FBRWhDOztXQUVHO1FBQ00sY0FBYyxDQUFTO1FBRWhDOztXQUVHO1FBQ2EsUUFBUSxDQUErQjtRQUV2RCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXFDO1lBQzdFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Ozs7OzttREFuQlIseUJBQXlCOzs7O1lBb0JsQyxtQ0FBbUM7WUFDbkMsSUFBQSx3Q0FBb0IsRUFBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFbEMsSUFBSSxLQUFLLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztnQkFDeEMsV0FBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFF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QyxFQUFFLGtCQUFrQjtRQUNoRCxDQUFDLG9CQUFVLENBQUMsc0JBQXNCLENBQUMsRUFBRSx3QkFBd0I7UUFDN0QsQ0FBQyxvQkFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLGVBQWU7UUFDMUMsQ0FBQyxvQkFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLGdCQUFnQjtLQUM1QyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGN4X2FwaSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB0eXBlIHsgSVJvdXRlVGFibGUsIElWcGNFbmRwb2ludCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0IHsgQ2ZuRUlQLCBDZm5FZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5LCBDZm5JbnRlcm5ldEdhdGV3YXksIENmbk5hdEdhdGV3YXksIENmblZQQ1BlZXJpbmdDb25uZWN0aW9uLCBDZm5Sb3V0ZSwgQ2ZuUm91dGVUYWJsZSwgQ2ZuVlBDR2F0ZXdheUF0dGFjaG1lbnQsIENmblZQTkdhdGV3YXksIENmblZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uLCBHYXRld2F5VnBjRW5kcG9pbnQsIFJvdXRlclR5cGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB0eXBlIHsgSVJlc291cmNlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBBbm5vdGF0aW9ucywgRHVyYXRpb24sIEZlYXR1cmVGbGFncywgUmVzb3VyY2UsIFRhZ3MsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgbGl0IH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QsIElEZXBlbmRhYmxlIH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IElTdWJuZXRWMiB9IGZyb20gJy4vc3VibmV0LXYyJztcbmltcG9ydCB7IE5ldHdvcmtVdGlscywgYWxsUm91dGVUYWJsZUlkcywgQ2lkckJsb2NrIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB0eXBlIHsgSVZwY1YyLCBWUE5HYXRld2F5VjJPcHRpb25zIH0gZnJvbSAnLi92cGMtdjItYmFzZSc7XG5cbi8qKlxuICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIE5BVCBnYXRld2F5IHN1cHBvcnRzIHB1YmxpYyBvciBwcml2YXRlIGNvbm5lY3Rpdml0eS5cbiAqIFRoZSBkZWZhdWx0IGlzIHB1YmxpYyBjb25uZWN0aXZpdHkuXG4gKiBTZWU6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL2F3cy1yZXNvdXJjZS1lYzItbmF0Z2F0ZXdheS5odG1sI2Nmbi1lYzItbmF0Z2F0ZXdheS1jb25uZWN0aXZpdHl0eXBlXG4gKi9cbmV4cG9ydCBlbnVtIE5hdENvbm5lY3Rpdml0eVR5cGUge1xuICAvKipcbiAgICogU2V0cyBDb25uZWN0aXZpdHkgdHlwZSB0byBQVUJMSUNcbiAgICovXG4gIFBVQkxJQyA9ICdwdWJsaWMnLFxuICAvKipcbiAgICogU2V0cyBDb25uZWN0aXZpdHkgdHlwZSB0byBQUklWQVRFXG4gICAqL1xuICBQUklWQVRFID0gJ3ByaXZhdGUnLFxufVxuXG4vKipcbiAqIEludGVyZmFjZSB0byBkZWZpbmUgYSByb3V0aW5nIHRhcmdldCwgc3VjaCBhcyBhblxuICogZWdyZXNzLW9ubHkgaW50ZXJuZXQgZ2F0ZXdheSBvciBWUEMgZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVJvdXRlVGFyZ2V0IGV4dGVuZHMgSURlcGVuZGFibGUge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHVzZWQgaW4gdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVHlwZTogUm91dGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGFuIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRWdyZXNzT25seUludGVybmV0R2F0ZXdheVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVlBDIGZvciB3aGljaCB0byBjcmVhdGUgdGhlIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGNWMjtcblxuICAvKipcbiAgICogVGhlIHJlc291cmNlIG5hbWUgb2YgdGhlIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvdmlzaW9uZWQgd2l0aG91dCBhIHJlc291cmNlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGFuIGludGVybmV0IGdhdGV3YXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJuZXRHYXRld2F5UHJvcHMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgaW50ZXJuZXQgZ2F0ZXdheS5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogSVZwY1YyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgaW50ZXJuZXQgZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcm92aXNpb25lZCB3aXRob3V0IGEgcmVzb3VyY2UgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgaW50ZXJuZXRHYXRld2F5TmFtZT86IHN0cmluZztcblxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgdG8gZGVmaW5lIGEgVlBOIGdhdGV3YXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlBOR2F0ZXdheVYyUHJvcHMgZXh0ZW5kcyBWUE5HYXRld2F5VjJPcHRpb25zIHtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgVlBOIGdhdGV3YXkuXG4gICAqL1xuICByZWFkb25seSB2cGM6IElWcGNWMjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGRlZmluZSBhIE5BVCBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hdEdhdGV3YXlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBzdWJuZXQgaW4gd2hpY2ggdGhlIE5BVCBnYXRld2F5IGlzIGxvY2F0ZWQuXG4gICAqL1xuICByZWFkb25seSBzdWJuZXQ6IElTdWJuZXRWMjtcblxuICAvKipcbiAgICogQWxsb2NhdGlvbklEIG9mIEVsYXN0aWMgSVAgYWRkcmVzcyB0aGF0J3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBOQVQgZ2F0ZXdheS4gVGhpcyBwcm9wZXJ0eSBpcyByZXF1aXJlZCBmb3IgYSBwdWJsaWMgTkFUXG4gICAqIGdhdGV3YXkgYW5kIGNhbm5vdCBiZSBzcGVjaWZpZWQgd2l0aCBhIHByaXZhdGUgTkFUIGdhdGV3YXkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXR0ci5hbGxvY2F0aW9uSUQgb2YgYSBuZXcgRWxhc3RpYyBJUCBjcmVhdGVkIGJ5IGRlZmF1bHRcbiAgICogLy9UT0RPOiBBREQgTDIgZm9yIGVsYXN0aWMgaXBcbiAgICovXG4gIHJlYWRvbmx5IGFsbG9jYXRpb25JZD86IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIE5BVCBnYXRld2F5IHN1cHBvcnRzIHB1YmxpYyBvciBwcml2YXRlIGNvbm5lY3Rpdml0eS5cbiAgICpcbiAgICogQGRlZmF1bHQgTmF0Q29ubmVjdGl2aXR5VHlwZS5QdWJsaWNcbiAgICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpdml0eVR5cGU/OiBOYXRDb25uZWN0aXZpdHlUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSBhbW91bnQgb2YgdGltZSB0byB3YWl0IGJlZm9yZSBmb3JjaWJseSByZWxlYXNpbmcgdGhlXG4gICAqIElQIGFkZHJlc3NlcyBpZiBjb25uZWN0aW9ucyBhcmUgc3RpbGwgaW4gcHJvZ3Jlc3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IER1cmF0aW9uLnNlY29uZHMoMzUwKVxuICAgKi9cbiAgcmVhZG9ubHkgbWF4RHJhaW5EdXJhdGlvbj86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpdmF0ZSBJUHY0IGFkZHJlc3MgdG8gYXNzaWduIHRvIHRoZSBOQVQgZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBJZiB5b3UgZG9uJ3QgcHJvdmlkZSBhbiBhZGRyZXNzLCBhIHByaXZhdGUgSVB2NCBhZGRyZXNzIHdpbGwgYmUgYXV0b21hdGljYWxseSBhc3NpZ25lZC5cbiAgICovXG4gIHJlYWRvbmx5IHByaXZhdGVJcEFkZHJlc3M/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNlY29uZGFyeSBFSVAgYWxsb2NhdGlvbiBJRHMuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3ZwYy9sYXRlc3QvdXNlcmd1aWRlL3ZwYy1uYXQtZ2F0ZXdheS5odG1sI25hdC1nYXRld2F5LWNyZWF0aW5nXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gc2Vjb25kYXJ5IGFsbG9jYXRpb24gSURzIGF0dGFjaGVkIHRvIE5BVEdXXG4gICAqXG4gICAqL1xuICByZWFkb25seSBzZWNvbmRhcnlBbGxvY2F0aW9uSWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2Ygc2Vjb25kYXJ5IHByaXZhdGUgSVB2NCBhZGRyZXNzZXMgeW91XG4gICAqIHdhbnQgdG8gYXNzaWduIHRvIHRoZSBOQVQgZ2F0ZXdheS5cbiAgICpcbiAgICogYFNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3NDb3VudGAgYW5kIGBTZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzZXNgIGNhbm5vdCBiZVxuICAgKiBzZXQgYXQgdGhlIHNhbWUgdGltZS5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vdnBjL2xhdGVzdC91c2VyZ3VpZGUvdnBjLW5hdC1nYXRld2F5Lmh0bWwjbmF0LWdhdGV3YXktY3JlYXRpbmdcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBzZWNvbmRhcnkgYWxsb2NhdGlvbiBJRHMgYXNzb2NpYXRlZCB3aXRoIE5BVEdXXG4gICAqL1xuICByZWFkb25seSBzZWNvbmRhcnlQcml2YXRlSXBBZGRyZXNzQ291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNlY29uZGFyeSBwcml2YXRlIElQdjQgYWRkcmVzc2VzLlxuICAgKlxuICAgKiBgU2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc0NvdW50YCBhbmQgYFNlY29uZGFyeVByaXZhdGVJcEFkZHJlc3Nlc2AgY2Fubm90IGJlXG4gICAqIHNldCBhdCB0aGUgc2FtZSB0aW1lLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS92cGMvbGF0ZXN0L3VzZXJndWlkZS92cGMtbmF0LWdhdGV3YXkuaHRtbCNuYXQtZ2F0ZXdheS1jcmVhdGluZ1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHNlY29uZGFyeSBwcml2YXRlIElwQWRkcmVzc2VzIGFzc29jaWF0ZWQgd2l0aCBOQVRHV1xuICAgKi9cbiAgcmVhZG9ubHkgc2Vjb25kYXJ5UHJpdmF0ZUlwQWRkcmVzc2VzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBOQVQgZ2F0ZXdheS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBOQVRHVyBwcm92aXNpb25lZCB3aXRob3V0IGFueSBuYW1lXG4gICAqL1xuICByZWFkb25seSBuYXRHYXRld2F5TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIE5BVCBnYXRld2F5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hdEdhdGV3YXlQcm9wcyBleHRlbmRzIE5hdEdhdGV3YXlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgVlBDIGluIHdoaWNoIHRoZSBOQVQgZ2F0ZXdheSBpcyBsb2NhdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGVsYXN0aWMgaXAgYXNzb2NpYXRlZCwgcmVxdWlyZWQgaW4gY2FzZSBvZiBwdWJsaWMgY29ubmVjdGl2aXR5IGlmIGBBbGxvY2F0aW9uSWRgIGlzIG5vdCBkZWZpbmVkXG4gICAqL1xuICByZWFkb25seSB2cGM/OiBJVnBjVjI7XG59XG5cbi8qKlxuICogT3B0aW9ucyB0byBkZWZpbmUgYSBWUEMgcGVlcmluZyBjb25uZWN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZQQ1BlZXJpbmdDb25uZWN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgVlBDIHRoYXQgaXMgYWNjZXB0aW5nIHRoZSBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBhY2NlcHRvclZwYzogSVZwY1YyO1xuXG4gIC8qKlxuICAgKiBUaGUgcm9sZSBhcm4gY3JlYXRlZCBpbiB0aGUgYWNjZXB0b3IgYWNjb3VudC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBwZWVyUm9sZUFybiBuZWVkZWQgaWYgbm90IGNyb3NzIGFjY291bnQgY29ubmVjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcGVlclJvbGVBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcGVlcmluZyBjb25uZWN0aW9uIHByb3Zpc2lvbmVkIHdpdGhvdXQgYW55IG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHZwY1BlZXJpbmdDb25uZWN0aW9uTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVlBDUGVlcmluZ0Nvbm5lY3Rpb25Qcm9wcyBleHRlbmRzIFZQQ1BlZXJpbmdDb25uZWN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgVlBDIHRoYXQgaXMgcmVxdWVzdGluZyB0aGUgcGVlcmluZyBjb25uZWN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdG9yVnBjOiBJVnBjVjI7XG59XG5cbi8qKlxuICogTmFtZSB0YWcgY29uc3RhbnRcbiAqL1xuY29uc3QgTkFNRV9UQUc6IHN0cmluZyA9ICdOYW1lJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVncmVzcy1vbmx5IGludGVybmV0IGdhdGV3YXlcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6RWdyZXNzT25seUludGVybmV0R2F0ZXdheVxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgRWdyZXNzT25seUludGVybmV0R2F0ZXdheSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVJvdXRlVGFyZ2V0IHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtZWMyLWFscGhhLkVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXknO1xuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHVzZWQgaW4gdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVHlwZTogUm91dGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZWdyZXNzLW9ubHkgaW50ZXJuZXQgZ2F0ZXdheSBDRk4gcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2U6IENmbkVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXk7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICBpZiAocHJvcHMuZWdyZXNzT25seUludGVybmV0R2F0ZXdheU5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcy5lZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5TmFtZSk7XG4gICAgfVxuICAgIHRoaXMucm91dGVyVHlwZSA9IFJvdXRlclR5cGUuRUdSRVNTX09OTFlfSU5URVJORVRfR0FURVdBWTtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgQ2ZuRWdyZXNzT25seUludGVybmV0R2F0ZXdheSh0aGlzLCAnRUlHVycsIHtcbiAgICAgIHZwY0lkOiBwcm9wcy52cGMudnBjSWQsXG4gICAgfSk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5hdHRySWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGludGVybmV0IGdhdGV3YXlcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6SW50ZXJuZXRHYXRld2F5XG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBJbnRlcm5ldEdhdGV3YXkgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElSb3V0ZVRhcmdldCB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWVjMi1hbHBoYS5JbnRlcm5ldEdhdGV3YXknO1xuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHVzZWQgaW4gdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVHlwZTogUm91dGVyVHlwZTtcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3V0ZSB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFZQQyBmb3Igd2hpY2ggdG8gY3JlYXRlIHRoZSBpbnRlcm5ldCBnYXRld2F5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZwY0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlcm5ldCBnYXRld2F5IENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogQ2ZuSW50ZXJuZXRHYXRld2F5O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJbnRlcm5ldEdhdGV3YXlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICB0aGlzLnJvdXRlclR5cGUgPSBSb3V0ZXJUeXBlLkdBVEVXQVk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmbkludGVybmV0R2F0ZXdheSh0aGlzLCAnSUdXJywge30pO1xuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuXG4gICAgdGhpcy5yb3V0ZXJUYXJnZXRJZCA9IEZlYXR1cmVGbGFncy5vZih0aGlzKS5pc0VuYWJsZWQoY3hfYXBpLlVTRV9SRVNPVVJDRUlEX0ZPUl9WUENWMl9NSUdSQVRJT04pID9cbiAgICAgIHRoaXMucmVzb3VyY2UucmVmIDogdGhpcy5yZXNvdXJjZS5hdHRySW50ZXJuZXRHYXRld2F5SWQ7XG4gICAgdGhpcy52cGNJZCA9IHByb3BzLnZwYy52cGNJZDtcblxuICAgIGlmIChwcm9wcy5pbnRlcm5ldEdhdGV3YXlOYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMuaW50ZXJuZXRHYXRld2F5TmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnZwYy52cGNOYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZCgnTmFtZScsIHByb3BzLnZwYy52cGNOYW1lKTtcbiAgICB9XG5cbiAgICBuZXcgQ2ZuVlBDR2F0ZXdheUF0dGFjaG1lbnQodGhpcywgJ0dXQXR0YWNobWVudCcsIHtcbiAgICAgIHZwY0lkOiB0aGlzLnZwY0lkLFxuICAgICAgaW50ZXJuZXRHYXRld2F5SWQ6IHRoaXMucm91dGVyVGFyZ2V0SWQsXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgdmlydHVhbCBwcml2YXRlIGdhdGV3YXlcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6VlBOR2F0ZXdheVxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgVlBOR2F0ZXdheVYyIGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJUm91dGVUYXJnZXQge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1lYzItYWxwaGEuVlBOR2F0ZXdheVYyJztcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclR5cGU6IFJvdXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVyVGFyZ2V0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBWUEMgZm9yIHdoaWNoIHRvIGNyZWF0ZSB0aGUgVlBOIGdhdGV3YXkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFZQTiBnYXRld2F5IENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogQ2ZuVlBOR2F0ZXdheTtcblxuICAvKipcbiAgICogVGhlIFZQTiBHYXRld2F5IEF0dGFjaG1lbnRcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2F0dGFjaG1lbnQ6IENmblZQQ0dhdGV3YXlBdHRhY2htZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgVlBOIEdhdGV3YXkgUm91dGUgUHJvcGFnYXRpb25cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlUHJvcGFnYXRpb246IENmblZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBWUE5HYXRld2F5VjJQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy52cG5HYXRld2F5TmFtZSxcbiAgICB9KTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIHRoaXMucm91dGVyVHlwZSA9IFJvdXRlclR5cGUuR0FURVdBWTtcblxuICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgQ2ZuVlBOR2F0ZXdheSh0aGlzLCAnSUdXJywge1xuICAgICAgdHlwZTogcHJvcHMudHlwZSxcbiAgICAgIGFtYXpvblNpZGVBc246IHByb3BzLmFtYXpvblNpZGVBc24sXG4gICAgfSk7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5hdHRyVnBuR2F0ZXdheUlkO1xuXG4gICAgdGhpcy52cGNJZCA9IHByb3BzLnZwYy52cGNJZDtcbiAgICB0aGlzLl9hdHRhY2htZW50ID0gbmV3IENmblZQQ0dhdGV3YXlBdHRhY2htZW50KHRoaXMsICdWUENWUE5HVycsIHtcbiAgICAgIHZwY0lkOiB0aGlzLnZwY0lkLFxuICAgICAgdnBuR2F0ZXdheUlkOiB0aGlzLnJlc291cmNlLmF0dHJWcG5HYXRld2F5SWQsXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMudnBuR2F0ZXdheU5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcy52cG5HYXRld2F5TmFtZSk7XG4gICAgfVxuXG4gICAgLy8gUHJvcGFnYXRlIHJvdXRlcyBvbiByb3V0ZSB0YWJsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSByaWdodCBzdWJuZXRzXG4gICAgY29uc3QgdnBuUm91dGVQcm9wYWdhdGlvbiA9IHByb3BzLnZwblJvdXRlUHJvcGFnYXRpb24gPz8gW107XG4gICAgY29uc3Qgc3VibmV0cyA9IHZwblJvdXRlUHJvcGFnYXRpb24ubWFwKHMgPT4gcHJvcHMudnBjLnNlbGVjdFN1Ym5ldHMocykuc3VibmV0cykuZmxhdCgpO1xuICAgIGNvbnN0IHJvdXRlVGFibGVJZHMgPSBhbGxSb3V0ZVRhYmxlSWRzKHN1Ym5ldHMpO1xuXG4gICAgaWYgKHJvdXRlVGFibGVJZHMubGVuZ3RoID09PSAwKSB7XG4gICAgICBBbm5vdGF0aW9ucy5vZihzY29wZSkuYWRkV2FybmluZ1YyKCdAYXdzLWNkazphd3MtZWMyLWVscGhhOmVuYWJsZVZwbkdhdGV3YXlWMicsIGBObyBzdWJuZXRzIG1hdGNoaW5nIHNlbGVjdGlvbjogJyR7SlNPTi5zdHJpbmdpZnkodnBuUm91dGVQcm9wYWdhdGlvbil9Jy4gU2VsZWN0IG90aGVyIHN1Ym5ldHMgdG8gYWRkIHJvdXRlcyB0by5gKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yb3V0ZVByb3BhZ2F0aW9uID0gbmV3IENmblZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uKHRoaXMsICdSb3V0ZVByb3BhZ2F0aW9uJywge1xuICAgICAgcm91dGVUYWJsZUlkcyxcbiAgICAgIHZwbkdhdGV3YXlJZDogdGhpcy5yb3V0ZXJUYXJnZXRJZCxcbiAgICB9KTtcbiAgICAvLyBUaGUgQVdTOjpFQzI6OlZQTkdhdGV3YXlSb3V0ZVByb3BhZ2F0aW9uIHJlc291cmNlIGNhbm5vdCB1c2UgdGhlIFZQTiBnYXRld2F5XG4gICAgLy8gdW50aWwgaXQgaGFzIHN1Y2Nlc3NmdWxseSBhdHRhY2hlZCB0byB0aGUgVlBDLlxuICAgIC8vIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtZWMyLXZwbi1nYXRld2F5cm91dGVwcm9wLmh0bWxcbiAgICB0aGlzLl9yb3V0ZVByb3BhZ2F0aW9uLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLl9hdHRhY2htZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXR3b3JrIGFkZHJlc3MgdHJhbnNsYXRpb24gKE5BVCkgZ2F0ZXdheVxuICogQHJlc291cmNlIEFXUzo6RUMyOjpOYXRHYXRld2F5XG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBOYXRHYXRld2F5IGV4dGVuZHMgUmVzb3VyY2UgaW1wbGVtZW50cyBJUm91dGVUYXJnZXQge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1lYzItYWxwaGEuTmF0R2F0ZXdheSc7XG4gIC8qKlxuICAgKiBJZCBvZiB0aGUgTmF0R2F0ZXdheVxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmF0R2F0ZXdheUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHJvdXRlciB1c2VkIGluIHRoZSByb3V0ZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhcmdldC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZXJUYXJnZXRJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgTkFUIGdhdGV3YXkgc3VwcG9ydHMgcHVibGljIG9yIHByaXZhdGUgY29ubmVjdGl2aXR5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBwdWJsaWNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb25uZWN0aXZpdHlUeXBlPzogTmF0Q29ubmVjdGl2aXR5VHlwZTtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUgdG8gd2FpdCBiZWZvcmUgZm9yY2libHkgcmVsZWFzaW5nIHRoZVxuICAgKiBJUCBhZGRyZXNzZXMgaWYgY29ubmVjdGlvbnMgYXJlIHN0aWxsIGluIHByb2dyZXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAnMzUwIHNlY29uZHMnXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbWF4RHJhaW5EdXJhdGlvbj86IER1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgTkFUIGdhdGV3YXkgQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBDZm5OYXRHYXRld2F5O1xuXG4gIC8qKlxuICAgKiBFbGFzdGljIElQIGNyZWF0ZWQgZm9yIGFsbG9jYXRpb25cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlaXA/OiBDZm5FSVA7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5hdEdhdGV3YXlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICB0aGlzLnJvdXRlclR5cGUgPSBSb3V0ZXJUeXBlLk5BVF9HQVRFV0FZO1xuXG4gICAgdGhpcy5jb25uZWN0aXZpdHlUeXBlID0gcHJvcHMuY29ubmVjdGl2aXR5VHlwZSB8fCBOYXRDb25uZWN0aXZpdHlUeXBlLlBVQkxJQztcbiAgICB0aGlzLm1heERyYWluRHVyYXRpb24gPSBwcm9wcy5tYXhEcmFpbkR1cmF0aW9uIHx8IER1cmF0aW9uLnNlY29uZHMoMzUwKTtcblxuICAgIGlmICh0aGlzLmNvbm5lY3Rpdml0eVR5cGUgPT09IE5hdENvbm5lY3Rpdml0eVR5cGUuUFVCTElDKSB7XG4gICAgICBpZiAoIXByb3BzLnZwYyAmJiAhcHJvcHMuYWxsb2NhdGlvbklkKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YFZwY09yQWxsb2NhdGlvbklkUmVxdWlyZWRgLCAnRWl0aGVyIHByb3ZpZGUgdnBjIG9yIGFsbG9jYXRpb25JZCcsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wcy5uYXRHYXRld2F5TmFtZSkge1xuICAgICAgVGFncy5vZih0aGlzKS5hZGQoTkFNRV9UQUcsIHByb3BzPy5uYXRHYXRld2F5TmFtZSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdXNlciBkb2VzIG5vdCBwcm92aWRlIEVJUCwgZ2VuZXJhdGUgb25lIGZvciB0aGVtXG4gICAgdmFyIGFJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmICh0aGlzLmNvbm5lY3Rpdml0eVR5cGUgPT09IE5hdENvbm5lY3Rpdml0eVR5cGUuUFVCTElDKSB7XG4gICAgICBpZiAoIXByb3BzLmFsbG9jYXRpb25JZCkge1xuICAgICAgICB0aGlzLmVpcCA9IG5ldyBDZm5FSVAodGhpcywgJ0VJUCcsIHtcbiAgICAgICAgICBkb21haW46ICd2cGMnLFxuICAgICAgICB9KTtcbiAgICAgICAgYUlkID0gdGhpcy5laXAuYXR0ckFsbG9jYXRpb25JZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFJZCA9IHByb3BzLmFsbG9jYXRpb25JZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmbk5hdEdhdGV3YXkodGhpcywgJ05BVEdhdGV3YXknLCB7XG4gICAgICBzdWJuZXRJZDogcHJvcHMuc3VibmV0LnN1Ym5ldElkLFxuICAgICAgYWxsb2NhdGlvbklkOiBhSWQsXG4gICAgICBtYXhEcmFpbkR1cmF0aW9uU2Vjb25kczogcHJvcHMubWF4RHJhaW5EdXJhdGlvbj8udG9TZWNvbmRzKCksXG4gICAgICBzZWNvbmRhcnlBbGxvY2F0aW9uSWRzOiBwcm9wcy5zZWNvbmRhcnlBbGxvY2F0aW9uSWRzLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSk7XG4gICAgdGhpcy5uYXRHYXRld2F5SWQgPSBGZWF0dXJlRmxhZ3Mub2YodGhpcykuaXNFbmFibGVkKGN4X2FwaS5VU0VfUkVTT1VSQ0VJRF9GT1JfVlBDVjJfTUlHUkFUSU9OKSA/XG4gICAgICB0aGlzLnJlc291cmNlLnJlZiA6IHRoaXMucmVzb3VyY2UuYXR0ck5hdEdhdGV3YXlJZDtcblxuICAgIHRoaXMucm91dGVyVGFyZ2V0SWQgPSBGZWF0dXJlRmxhZ3Mub2YodGhpcykuaXNFbmFibGVkKGN4X2FwaS5VU0VfUkVTT1VSQ0VJRF9GT1JfVlBDVjJfTUlHUkFUSU9OKSA/XG4gICAgICB0aGlzLnJlc291cmNlLnJlZiA6IHRoaXMucmVzb3VyY2UuYXR0ck5hdEdhdGV3YXlJZDtcblxuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuICAgIHRoaXMucmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KHByb3BzLnN1Ym5ldC5pbnRlcm5ldENvbm5lY3Rpdml0eUVzdGFibGlzaGVkKTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBwZWVyaW5nIGNvbm5lY3Rpb24gYmV0d2VlbiB0d28gVlBDc1xuICogQHJlc291cmNlIEFXUzo6RUMyOjpWUENQZWVyaW5nQ29ubmVjdGlvblxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgVlBDUGVlcmluZ0Nvbm5lY3Rpb24gZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElSb3V0ZVRhcmdldCB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWVjMi1hbHBoYS5WUENQZWVyaW5nQ29ubmVjdGlvbic7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiByb3V0ZXIgdXNlZCBpbiB0aGUgcm91dGUuXG4gICAqL1xuICByZWFkb25seSByb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhcmdldC5cbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlclRhcmdldElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgcGVlcmluZyBjb25uZWN0aW9uIENGTiByZXNvdXJjZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogQ2ZuVlBDUGVlcmluZ0Nvbm5lY3Rpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFZQQ1BlZXJpbmdDb25uZWN0aW9uUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgdGhpcy5yb3V0ZXJUeXBlID0gUm91dGVyVHlwZS5WUENfUEVFUklOR19DT05ORUNUSU9OO1xuXG4gICAgY29uc3QgaXNDcm9zc0FjY291bnQgPSBwcm9wcy5yZXF1ZXN0b3JWcGMub3duZXJBY2NvdW50SWQgIT09IHByb3BzLmFjY2VwdG9yVnBjLm93bmVyQWNjb3VudElkO1xuXG4gICAgaWYgKCFpc0Nyb3NzQWNjb3VudCAmJiBwcm9wcy5wZWVyUm9sZUFybikge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgUGVlclJvbGVBcm5Ob3ROZWVkZWRGb3JTYW1lQWNjb3VudGAsICdwZWVyUm9sZUFybiBpcyBub3QgbmVlZGVkIGZvciBzYW1lIGFjY291bnQgcGVlcmluZycsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmIChpc0Nyb3NzQWNjb3VudCAmJiAhcHJvcHMucGVlclJvbGVBcm4pIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YENyb3NzQWNjb3VudFBlZXJpbmdSZXF1aXJlc1BlZXJSb2xlQXJuYCwgJ0Nyb3NzIGFjY291bnQgVlBDIHBlZXJpbmcgcmVxdWlyZXMgcGVlclJvbGVBcm4nLCB0aGlzKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdmVybGFwID0gdGhpcy52YWxpZGF0ZVZwY0NpZHJPdmVybGFwKHByb3BzLnJlcXVlc3RvclZwYywgcHJvcHMuYWNjZXB0b3JWcGMpO1xuICAgIGlmIChvdmVybGFwKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBWcGNDaWRyQmxvY2tzT3ZlcmxhcGAsICdDSURSIGJsb2NrIHNob3VsZCBub3Qgb3ZlcmxhcCB3aXRoIGVhY2ggb3RoZXIgZm9yIGVzdGFibGlzaGluZyBhIHBlZXJpbmcgY29ubmVjdGlvbicsIHRoaXMpO1xuICAgIH1cbiAgICBpZiAocHJvcHMudnBjUGVlcmluZ0Nvbm5lY3Rpb25OYW1lKSB7XG4gICAgICBUYWdzLm9mKHRoaXMpLmFkZChOQU1FX1RBRywgcHJvcHMudnBjUGVlcmluZ0Nvbm5lY3Rpb25OYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmblZQQ1BlZXJpbmdDb25uZWN0aW9uKHRoaXMsICdWUENQZWVyaW5nQ29ubmVjdGlvbicsIHtcbiAgICAgIHZwY0lkOiBwcm9wcy5yZXF1ZXN0b3JWcGMudnBjSWQsXG4gICAgICBwZWVyVnBjSWQ6IHByb3BzLmFjY2VwdG9yVnBjLnZwY0lkLFxuICAgICAgcGVlck93bmVySWQ6IHByb3BzLmFjY2VwdG9yVnBjLm93bmVyQWNjb3VudElkLFxuICAgICAgcGVlclJlZ2lvbjogcHJvcHMuYWNjZXB0b3JWcGMucmVnaW9uLFxuICAgICAgcGVlclJvbGVBcm46IGlzQ3Jvc3NBY2NvdW50ID8gcHJvcHMucGVlclJvbGVBcm4gOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnJvdXRlclRhcmdldElkID0gdGhpcy5yZXNvdXJjZS5hdHRySWQ7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGlmIHRoZSBwcm92aWRlZCBJUHY0IENJRFIgYmxvY2sgb3ZlcmxhcHMgd2l0aCBleGlzdGluZyBzdWJuZXQgQ0lEUiBibG9ja3Mgd2l0aGluIHRoZSBnaXZlbiBWUEMuXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0b3JWcGMgVGhlIFZQQyBvZiB0aGUgcmVxdWVzdG9yLlxuICAgKiBAcGFyYW0gYWNjZXB0b3JWcGMgVGhlIFZQQyBvZiB0aGUgYWNjZXB0b3IuXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIElQdjQgQ0lEUiBibG9jayBvdmVybGFwcyB3aXRoIGVhY2ggb3RoZXIgZm9yIHR3byBWUENzLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVZwY0NpZHJPdmVybGFwKHJlcXVlc3RvclZwYzogSVZwY1YyLCBhY2NlcHRvclZwYzogSVZwY1YyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVxdWVzdG9yQ2lkcnMgPSBbcmVxdWVzdG9yVnBjLmlwdjRDaWRyQmxvY2tdO1xuICAgIGNvbnN0IGFjY2VwdG9yQ2lkcnMgPSBbYWNjZXB0b3JWcGMuaXB2NENpZHJCbG9ja107XG5cbiAgICBpZiAocmVxdWVzdG9yVnBjLnNlY29uZGFyeUNpZHJCbG9jaykge1xuICAgICAgcmVxdWVzdG9yQ2lkcnMucHVzaCguLi5yZXF1ZXN0b3JWcGMuc2Vjb25kYXJ5Q2lkckJsb2NrXG4gICAgICAgIC5tYXAoYmxvY2sgPT4gYmxvY2suY2lkckJsb2NrKVxuICAgICAgICAuZmlsdGVyKChjaWRyKTogY2lkciBpcyBzdHJpbmcgPT4gY2lkciAhPT0gdW5kZWZpbmVkKSk7XG4gICAgfVxuXG4gICAgaWYgKGFjY2VwdG9yVnBjLnNlY29uZGFyeUNpZHJCbG9jaykge1xuICAgICAgYWNjZXB0b3JDaWRycy5wdXNoKC4uLmFjY2VwdG9yVnBjLnNlY29uZGFyeUNpZHJCbG9ja1xuICAgICAgICAubWFwKGJsb2NrID0+IGJsb2NrLmNpZHJCbG9jaylcbiAgICAgICAgLmZpbHRlcigoY2lkcik6IGNpZHIgaXMgc3RyaW5nID0+IGNpZHIgIT09IHVuZGVmaW5lZCkpO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVxdWVzdG9yQ2lkciBvZiByZXF1ZXN0b3JDaWRycykge1xuICAgICAgY29uc3QgcmVxdWVzdG9yUmFuZ2UgPSBuZXcgQ2lkckJsb2NrKHJlcXVlc3RvckNpZHIpO1xuICAgICAgY29uc3QgcmVxdWVzdG9ySXBSYW5nZTogW3N0cmluZywgc3RyaW5nXSA9IFtyZXF1ZXN0b3JSYW5nZS5taW5JcCgpLCByZXF1ZXN0b3JSYW5nZS5tYXhJcCgpXTtcblxuICAgICAgZm9yIChjb25zdCBhY2NlcHRvckNpZHIgb2YgYWNjZXB0b3JDaWRycykge1xuICAgICAgICBjb25zdCBhY2NlcHRvclJhbmdlID0gbmV3IENpZHJCbG9jayhhY2NlcHRvckNpZHIpO1xuICAgICAgICBjb25zdCBhY2NlcHRvcklwUmFuZ2U6IFtzdHJpbmcsIHN0cmluZ10gPSBbYWNjZXB0b3JSYW5nZS5taW5JcCgpLCBhY2NlcHRvclJhbmdlLm1heElwKCldO1xuXG4gICAgICAgIGlmIChyZXF1ZXN0b3JSYW5nZS5yYW5nZXNPdmVybGFwKGFjY2VwdG9ySXBSYW5nZSwgcmVxdWVzdG9ySXBSYW5nZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSB0eXBlIG9mIGVuZHBvaW50IG9yIGdhdGV3YXkgYmVpbmcgdGFyZ2V0ZWQgYnkgdGhlIHJvdXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlVGFyZ2V0UHJvcHMge1xuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcm91dGUgdGFyZ2V0LiBUaGlzIGlzIHVzZWQgZm9yIHRhcmdldHMgc3VjaCBhc1xuICAgKiBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5IG9yIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGFyZ2V0IGlzIG5vdCBzZXQgdG8gYSBnYXRld2F5LCBpbiB0aGlzIGNhc2UgYW4gZW5kcG9pbnQgaXMgbmVlZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheT86IElSb3V0ZVRhcmdldDtcblxuICAvKipcbiAgICogVGhlIGVuZHBvaW50IHJvdXRlIHRhcmdldC4gVGhpcyBpcyB1c2VkIGZvciB0YXJnZXRzIHN1Y2ggYXNcbiAgICogVlBDIGVuZHBvaW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0YXJnZXQgaXMgbm90IHNldCB0byBhbiBlbmRwb2ludCwgaW4gdGhpcyBjYXNlIGEgZ2F0ZXdheSBpcyBuZWVkZWQuXG4gICAqL1xuICByZWFkb25seSBlbmRwb2ludD86IElWcGNFbmRwb2ludDtcbn1cblxuLyoqXG4gKiBUaGUgZ2F0ZXdheSBvciBlbmRwb2ludCB0YXJnZXRlZCBieSB0aGUgcm91dGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBSb3V0ZVRhcmdldFR5cGUge1xuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcm91dGUgdGFyZ2V0LiBUaGlzIGlzIHVzZWQgZm9yIHRhcmdldHMgc3VjaCBhc1xuICAgKiBlZ3Jlc3Mtb25seSBpbnRlcm5ldCBnYXRld2F5IG9yIFZQQyBwZWVyaW5nIGNvbm5lY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGFyZ2V0IGlzIG5vdCBzZXQgdG8gYSBnYXRld2F5LCBpbiB0aGlzIGNhc2UgYW4gZW5kcG9pbnQgaXMgbmVlZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2F0ZXdheT86IElSb3V0ZVRhcmdldDtcblxuICAvKipcbiAgICogVGhlIGVuZHBvaW50IHJvdXRlIHRhcmdldC4gVGhpcyBpcyB1c2VkIGZvciB0YXJnZXRzIHN1Y2ggYXNcbiAgICogVlBDIGVuZHBvaW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0YXJnZXQgaXMgbm90IHNldCB0byBhbiBlbmRwb2ludCwgaW4gdGhpcyBjYXNlIGEgZ2F0ZXdheSBpcyBuZWVkZWQuXG4gICAqL1xuICByZWFkb25seSBlbmRwb2ludD86IElWcGNFbmRwb2ludDtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogUm91dGVUYXJnZXRQcm9wcykge1xuICAgIHRoaXMuZ2F0ZXdheSA9IHByb3BzLmdhdGV3YXk7XG4gICAgdGhpcy5lbmRwb2ludCA9IHByb3BzLmVuZHBvaW50O1xuICB9XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIHRvIGRlZmluZSBhIHJvdXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElSb3V0ZVYyIGV4dGVuZHMgSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFibGUgZm9yIHRoZSByb3V0ZS5cbiAgICogQGF0dHJpYnV0ZSByb3V0ZVRhYmxlXG4gICAqL1xuICByZWFkb25seSByb3V0ZVRhYmxlOiBJUm91dGVUYWJsZTtcblxuICAvKipcbiAgICogVGhlIElQdjQgb3IgSVB2NiBDSURSIGJsb2NrIHVzZWQgZm9yIHRoZSBkZXN0aW5hdGlvbiBtYXRjaC5cbiAgICpcbiAgICogUm91dGluZyBkZWNpc2lvbnMgYXJlIGJhc2VkIG9uIHRoZSBtb3N0IHNwZWNpZmljIG1hdGNoLlxuICAgKiBUT0RPOiBMb29rIGZvciBzdHJvbmcgSVAgdHlwZSBpbXBsZW1lbnRhdGlvbiBoZXJlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgb3IgZW5kcG9pbnQgdGFyZ2V0ZWQgYnkgdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0OiBSb3V0ZVRhcmdldFR5cGU7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyB0byBkZWZpbmUgYSByb3V0ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb3V0ZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcm91dGUgdGFibGUgZm9yIHRoZSByb3V0ZS5cbiAgICpcbiAgICogQGF0dHJpYnV0ZSByb3V0ZVRhYmxlXG4gICAqL1xuICByZWFkb25seSByb3V0ZVRhYmxlOiBJUm91dGVUYWJsZTtcblxuICAvKipcbiAgICogVGhlIElQdjQgb3IgSVB2NiBDSURSIGJsb2NrIHVzZWQgZm9yIHRoZSBkZXN0aW5hdGlvbiBtYXRjaC5cbiAgICpcbiAgICogUm91dGluZyBkZWNpc2lvbnMgYXJlIGJhc2VkIG9uIHRoZSBtb3N0IHNwZWNpZmljIG1hdGNoLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgb3IgZW5kcG9pbnQgdGFyZ2V0ZWQgYnkgdGhlIHJvdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0OiBSb3V0ZVRhcmdldFR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSByZXNvdXJjZSBuYW1lIG9mIHRoZSByb3V0ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBwcm92aXNpb25lZCB3aXRob3V0IGEgcm91dGUgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgcm91dGVOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgcm91dGUgd2l0aCBhZGRlZCBmdW5jdGlvbmFsaXR5LlxuICogQHJlc291cmNlIEFXUzo6RUMyOjpSb3V0ZVxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgUm91dGUgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElSb3V0ZVYyIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtZWMyLWFscGhhLlJvdXRlJztcbiAgLyoqXG4gICAqIFRoZSBJUHY0IG9yIElQdjYgQ0lEUiBibG9jayB1c2VkIGZvciB0aGUgZGVzdGluYXRpb24gbWF0Y2guXG4gICAqXG4gICAqIFJvdXRpbmcgZGVjaXNpb25zIGFyZSBiYXNlZCBvbiB0aGUgbW9zdCBzcGVjaWZpYyBtYXRjaC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkZXN0aW5hdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSBvciBlbmRwb2ludCB0YXJnZXRlZCBieSB0aGUgcm91dGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdGFyZ2V0OiBSb3V0ZVRhcmdldFR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSByb3V0ZSB0YWJsZSBmb3IgdGhlIHJvdXRlLlxuICAgKiBAYXR0cmlidXRlIHJvdXRlVGFibGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb3V0ZVRhYmxlOiBJUm91dGVUYWJsZTtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2Ygcm91dGVyIHRoZSByb3V0ZSBpcyB0YXJnZXRpbmdcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0YXJnZXRSb3V0ZXJUeXBlOiBSb3V0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgcm91dGUgQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlPzogQ2ZuUm91dGU7XG5cbiAgLyoqXG4gICAqIERlc3RpbmF0aW9uIGNpZHIgYmxvY2sgZm9yIGlwdjZcbiAgICovXG4gIHByaXZhdGUgZGVzdGluYXRpb25JcHY2Q2lkcj86IHN0cmluZztcblxuICAvKipcbiAgICogRGVzdGluYXRpb24gY2lkciBibG9jayBmb3IgaXB2NFxuICAgKi9cbiAgcHJpdmF0ZSBkZXN0aW5hdGlvbklwdjRDaWRyPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSb3V0ZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIHRoaXMudGFyZ2V0ID0gcHJvcHMudGFyZ2V0O1xuICAgIHRoaXMucm91dGVUYWJsZSA9IHByb3BzLnJvdXRlVGFibGU7XG4gICAgdGhpcy5kZXN0aW5hdGlvbiA9IHByb3BzLmRlc3RpbmF0aW9uO1xuICAgIGNvbnN0IGlzRGVzdGluYXRpb25JcHY0ID0gTmV0d29ya1V0aWxzLnZhbGlkSXAocHJvcHMuZGVzdGluYXRpb24pO1xuICAgIGlmICghaXNEZXN0aW5hdGlvbklwdjQpIHtcbiAgICAgIC8vIFRPRE8gVmFsaWRhdGUgZm9yIElQdjYgQ0lEUiByYW5nZVxuICAgICAgdGhpcy5kZXN0aW5hdGlvbklwdjZDaWRyID0gcHJvcHMuZGVzdGluYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb25JcHY0Q2lkciA9IHByb3BzLmRlc3RpbmF0aW9uO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRhcmdldC5nYXRld2F5Py5yb3V0ZXJUeXBlID09PSBSb3V0ZXJUeXBlLkVHUkVTU19PTkxZX0lOVEVSTkVUX0dBVEVXQVkgJiYgaXNEZXN0aW5hdGlvbklwdjQpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YEVncmVzc09ubHlJbnRlcm5ldEdhdGV3YXlEb2VzTm90U3VwcG9ydElwdjRgLCAnRWdyZXNzIG9ubHkgaW50ZXJuZXQgZ2F0ZXdheSBkb2VzIG5vdCBzdXBwb3J0IElQdjQgcm91dGluZycsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICgocHJvcHMudGFyZ2V0LmdhdGV3YXkgJiYgcHJvcHMudGFyZ2V0LmVuZHBvaW50KSB8fCAoIXByb3BzLnRhcmdldC5nYXRld2F5ICYmICFwcm9wcy50YXJnZXQuZW5kcG9pbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBFeGFjdGx5T25lVGFyZ2V0UmVxdWlyZWRgLCAnRXhhY3RseSBvbmUgb2YgYGdhdGV3YXlgIG9yIGBlbmRwb2ludGAgbXVzdCBiZSBzcGVjaWZpZWQuJywgdGhpcyk7XG4gICAgfVxuICAgIHRoaXMudGFyZ2V0Um91dGVyVHlwZSA9IHRoaXMudGFyZ2V0LmdhdGV3YXkgPyB0aGlzLnRhcmdldC5nYXRld2F5LnJvdXRlclR5cGUgOiBSb3V0ZXJUeXBlLlZQQ19FTkRQT0lOVDtcbiAgICAvLyBHYXRld2F5IGdlbmVyYXRlcyByb3V0ZSBhdXRvbWF0aWNhbGx5IHZpYSBpdHMgUm91dGVUYWJsZSwgdGh1cyB3ZSBkb24ndCBuZWVkIHRvIGdlbmVyYXRlIHRoZSByZXNvdXJjZSBmb3IgaXRcbiAgICBpZiAoISh0aGlzLnRhcmdldC5lbmRwb2ludCBpbnN0YW5jZW9mIEdhdGV3YXlWcGNFbmRwb2ludCkpIHtcbiAgICAgIHRoaXMucmVzb3VyY2UgPSBuZXcgQ2ZuUm91dGUodGhpcywgJ1JvdXRlJywge1xuICAgICAgICByb3V0ZVRhYmxlSWQ6IHRoaXMucm91dGVUYWJsZS5yb3V0ZVRhYmxlSWQsXG4gICAgICAgIGRlc3RpbmF0aW9uQ2lkckJsb2NrOiB0aGlzLmRlc3RpbmF0aW9uSXB2NENpZHIsXG4gICAgICAgIGRlc3RpbmF0aW9uSXB2NkNpZHJCbG9jazogdGhpcy5kZXN0aW5hdGlvbklwdjZDaWRyLFxuICAgICAgICBbcm91dGVyVHlwZVRvUHJvcE5hbWUodGhpcy50YXJnZXRSb3V0ZXJUeXBlKV06IHRoaXMudGFyZ2V0LmdhdGV3YXkgPyB0aGlzLnRhcmdldC5nYXRld2F5LnJvdXRlclRhcmdldElkIDpcbiAgICAgICAgICB0aGlzLnRhcmdldC5lbmRwb2ludCA/IHRoaXMudGFyZ2V0LmVuZHBvaW50LnZwY0VuZHBvaW50SWQgOiBudWxsLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuXG4gICAgLy8gQ3JlYXRlIGEgcm91dGUgb25seSBhZnRlciB0YXJnZXQgZ2F0ZXdheSBvciBlbmRwb2ludCBpcyBjcmVhdGVkXG4gICAgaWYgKHRoaXMudGFyZ2V0LmdhdGV3YXkpIHtcbiAgICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMudGFyZ2V0LmdhdGV3YXkpO1xuICAgIH1cbiAgICBpZiAodGhpcy50YXJnZXQuZW5kcG9pbnQpIHtcbiAgICAgIHRoaXMubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMudGFyZ2V0LmVuZHBvaW50KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHRvIGRlZmluZSBhIHJvdXRlIHRhYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlVGFibGVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIFZQQy5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogSVZwY1YyO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgcm91dGUgdGFibGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gcHJvdmlzaW9uZWQgd2l0aG91dCBhIHJvdXRlIHRhYmxlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHJvdXRlVGFibGVOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSByb3V0ZSB0YWJsZSBmb3IgdGhlIHNwZWNpZmllZCBWUENcbiAqIEByZXNvdXJjZSBBV1M6OkVDMjo6Um91dGVUYWJsZVxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgUm91dGVUYWJsZSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVJvdXRlVGFibGUge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1lYzItYWxwaGEuUm91dGVUYWJsZSc7XG4gIC8qKlxuICAgKiBUaGUgSUQgb2YgdGhlIHJvdXRlIHRhYmxlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJvdXRlVGFibGVJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcm91dGUgdGFibGUgQ0ZOIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBDZm5Sb3V0ZVRhYmxlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSb3V0ZVRhYmxlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBDZm5Sb3V0ZVRhYmxlKHRoaXMsICdSb3V0ZVRhYmxlJywge1xuICAgICAgdnBjSWQ6IHByb3BzLnZwYy52cGNJZCxcbiAgICB9KTtcbiAgICBpZiAocHJvcHMucm91dGVUYWJsZU5hbWUpIHtcbiAgICAgIFRhZ3Mub2YodGhpcykuYWRkKE5BTUVfVEFHLCBwcm9wcy5yb3V0ZVRhYmxlTmFtZSk7XG4gICAgfVxuICAgIHRoaXMubm9kZS5kZWZhdWx0Q2hpbGQgPSB0aGlzLnJlc291cmNlO1xuXG4gICAgdGhpcy5yb3V0ZVRhYmxlSWQgPSBGZWF0dXJlRmxhZ3Mub2YodGhpcykuaXNFbmFibGVkKGN4X2FwaS5VU0VfUkVTT1VSQ0VJRF9GT1JfVlBDVjJfTUlHUkFUSU9OKSA/XG4gICAgICB0aGlzLnJlc291cmNlLnJlZiA6IHRoaXMucmVzb3VyY2UuYXR0clJvdXRlVGFibGVJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgbmV3IGN1c3RvbSByb3V0ZSB0byB0aGUgcm91dGUgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBkZXN0aW5hdGlvbiBUaGUgSVB2NCBvciBJUHY2IENJRFIgYmxvY2sgdXNlZCBmb3IgdGhlIGRlc3RpbmF0aW9uIG1hdGNoLlxuICAgKiBAcGFyYW0gdGFyZ2V0IFRoZSBnYXRld2F5IG9yIGVuZHBvaW50IHRhcmdldGVkIGJ5IHRoZSByb3V0ZS5cbiAgICogQHBhcmFtIHJvdXRlTmFtZSBUaGUgcmVzb3VyY2UgbmFtZSBvZiB0aGUgcm91dGUuXG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkUm91dGUoaWQ6IHN0cmluZywgZGVzdGluYXRpb246IHN0cmluZywgdGFyZ2V0OiBSb3V0ZVRhcmdldFR5cGUsIHJvdXRlTmFtZT86IHN0cmluZykge1xuICAgIG5ldyBSb3V0ZSh0aGlzLCBpZCwge1xuICAgICAgcm91dGVUYWJsZTogdGhpcyxcbiAgICAgIGRlc3RpbmF0aW9uOiBkZXN0aW5hdGlvbixcbiAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgcm91dGVOYW1lOiByb3V0ZU5hbWUsXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcm91dGVyVHlwZVRvUHJvcE5hbWUocm91dGVyVHlwZTogUm91dGVyVHlwZSkge1xuICByZXR1cm4gKHtcbiAgICBbUm91dGVyVHlwZS5DQVJSSUVSX0dBVEVXQVldOiAnY2FycmllckdhdGV3YXlJZCcsXG4gICAgW1JvdXRlclR5cGUuRUdSRVNTX09OTFlfSU5URVJORVRfR0FURVdBWV06ICdlZ3Jlc3NPbmx5SW50ZXJuZXRHYXRld2F5SWQnLFxuICAgIFtSb3V0ZXJUeXBlLkdBVEVXQVldOiAnZ2F0ZXdheUlkJyxcbiAgICBbUm91dGVyVHlwZS5JTlNUQU5DRV06ICdpbnN0YW5jZUlkJyxcbiAgICBbUm91dGVyVHlwZS5MT0NBTF9HQVRFV0FZXTogJ2xvY2FsR2F0ZXdheUlkJyxcbiAgICBbUm91dGVyVHlwZS5OQVRfR0FURVdBWV06ICduYXRHYXRld2F5SWQnLFxuICAgIFtSb3V0ZXJUeXBlLk5FVFdPUktfSU5URVJGQUNFXTogJ25ldHdvcmtJbnRlcmZhY2VJZCcsXG4gICAgW1JvdXRlclR5cGUuVFJBTlNJVF9HQVRFV0FZXTogJ3RyYW5zaXRHYXRld2F5SWQnLFxuICAgIFtSb3V0ZXJUeXBlLlZQQ19QRUVSSU5HX0NPTk5FQ1RJT05dOiAndnBjUGVlcmluZ0Nvbm5lY3Rpb25JZCcsXG4gICAgW1JvdXRlclR5cGUuVlBDX0VORFBPSU5UXTogJ3ZwY0VuZHBvaW50SWQnLFxuICAgIFtSb3V0ZXJUeXBlLkNPUkVfTkVUV09SS106ICdjb3JlTmV0d29ya0FybicsXG4gIH0pW3JvdXRlclR5cGVdO1xufVxuIl19