@aws-cdk/aws-imagebuilder-alpha 2.234.1-alpha.0 → 2.235.1-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/.jsii +191 -186
- package/.jsii.tabl.json.gz +0 -0
- package/awslint.json +41 -1
- package/lib/amazon-managed-component.js +1 -1
- package/lib/amazon-managed-image.js +1 -1
- package/lib/amazon-managed-workflow.js +1 -1
- package/lib/base-image.js +3 -3
- package/lib/component.d.ts +5 -0
- package/lib/component.js +13 -8
- package/lib/container-recipe.d.ts +4 -0
- package/lib/container-recipe.js +9 -5
- package/lib/distribution-configuration.d.ts +2 -0
- package/lib/distribution-configuration.js +5 -3
- package/lib/image-pipeline.d.ts +5 -0
- package/lib/image-pipeline.js +7 -2
- package/lib/image-recipe.d.ts +2 -0
- package/lib/image-recipe.js +4 -2
- package/lib/image.d.ts +8 -0
- package/lib/image.js +10 -2
- package/lib/infrastructure-configuration.d.ts +2 -0
- package/lib/infrastructure-configuration.js +4 -2
- package/lib/lifecycle-policy.d.ts +6 -0
- package/lib/lifecycle-policy.js +8 -2
- package/lib/os-version.js +1 -1
- package/lib/recipe-base.js +1 -1
- package/lib/workflow.d.ts +4 -0
- package/lib/workflow.js +9 -5
- package/package.json +7 -7
package/.jsii.tabl.json.gz
CHANGED
|
Binary file
|
package/awslint.json
CHANGED
|
@@ -6,6 +6,46 @@
|
|
|
6
6
|
"no-unused-type:@aws-cdk/aws-imagebuilder-alpha.WorkflowAction",
|
|
7
7
|
"no-unused-type:@aws-cdk/aws-imagebuilder-alpha.WorkflowOnFailure",
|
|
8
8
|
"no-unused-type:@aws-cdk/aws-imagebuilder-alpha.WorkflowParameterType",
|
|
9
|
-
"no-unused-type:@aws-cdk/aws-imagebuilder-alpha.WorkflowSchemaVersion"
|
|
9
|
+
"no-unused-type:@aws-cdk/aws-imagebuilder-alpha.WorkflowSchemaVersion",
|
|
10
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.ComponentProps.kmsKey",
|
|
11
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.ComponentConfiguration.component",
|
|
12
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.ContainerRecipeProps.kmsKey",
|
|
13
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.AmiDistribution.amiKmsKey",
|
|
14
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.FastLaunchConfiguration.launchTemplate",
|
|
15
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.LaunchTemplateConfiguration.launchTemplate",
|
|
16
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.SSMParameterConfigurations.parameter",
|
|
17
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.ImageProps.recipe",
|
|
18
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.ImageProps.deletionExecutionRole",
|
|
19
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.ImageProps.distributionConfiguration",
|
|
20
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.ImageProps.executionRole",
|
|
21
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.ImageProps.imageScanningEcrRepository",
|
|
22
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.ImageProps.infrastructureConfiguration",
|
|
23
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.ImageProps.logGroup",
|
|
24
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.WorkflowConfiguration.workflow",
|
|
25
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.ImagePipelineProps.recipe",
|
|
26
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.ImagePipelineProps.distributionConfiguration",
|
|
27
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.ImagePipelineProps.executionRole",
|
|
28
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.ImagePipelineProps.imageLogGroup",
|
|
29
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.ImagePipelineProps.imagePipelineLogGroup",
|
|
30
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.ImagePipelineProps.imageScanningEcrRepository",
|
|
31
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.ImagePipelineProps.infrastructureConfiguration",
|
|
32
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.InfrastructureConfigurationProps.instanceProfile",
|
|
33
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.InfrastructureConfigurationProps.keyPair",
|
|
34
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.InfrastructureConfigurationLogging.s3Bucket",
|
|
35
|
+
"prefer-ref-interface:aws-cdk-lib.aws_s3.GrantReplicationPermissionDestinationProps.bucket",
|
|
36
|
+
"prefer-ref-interface:aws-cdk-lib.aws_s3.GrantReplicationPermissionDestinationProps.encryptionKey",
|
|
37
|
+
"prefer-ref-interface:aws-cdk-lib.aws_s3.GrantReplicationPermissionProps.sourceDecryptionKey",
|
|
38
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.InfrastructureConfigurationProps.notificationTopic",
|
|
39
|
+
"prefer-ref-interface:aws-cdk-lib.aws_sns.ITopicSubscription.bind.topic",
|
|
40
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.InfrastructureConfigurationProps.role",
|
|
41
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.InfrastructureConfigurationProps.securityGroups",
|
|
42
|
+
"prefer-ref-interface:aws-cdk-lib.aws_ec2.SubnetSelection.subnets",
|
|
43
|
+
"prefer-ref-interface:aws-cdk-lib.aws_ec2.ISubnet.associateNetworkAcl.acl",
|
|
44
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.InfrastructureConfigurationProps.vpc",
|
|
45
|
+
"prefer-ref-interface:aws-cdk-lib.aws_ec2.ClientVpnEndpointOptions.securityGroups",
|
|
46
|
+
"prefer-ref-interface:aws-cdk-lib.aws_ec2.InterfaceVpcEndpointOptions.securityGroups",
|
|
47
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.LifecyclePolicyResourceSelection.recipes",
|
|
48
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.LifecyclePolicyProps.executionRole",
|
|
49
|
+
"prefer-ref-interface:@aws-cdk/aws-imagebuilder-alpha.WorkflowProps.kmsKey"
|
|
10
50
|
]
|
|
11
51
|
}
|
|
@@ -11,7 +11,7 @@ const constants_1 = require("./private/constants");
|
|
|
11
11
|
* Helper class for working with Amazon-managed components
|
|
12
12
|
*/
|
|
13
13
|
class AmazonManagedComponent {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.AmazonManagedComponent", version: "2.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.AmazonManagedComponent", version: "2.235.1-alpha.0" };
|
|
15
15
|
/**
|
|
16
16
|
* Imports the AWS CLI v2 Amazon-managed component
|
|
17
17
|
*
|
|
@@ -10,7 +10,7 @@ const constants_1 = require("./private/constants");
|
|
|
10
10
|
* Helper class for working with Amazon-managed images
|
|
11
11
|
*/
|
|
12
12
|
class AmazonManagedImage {
|
|
13
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.AmazonManagedImage", version: "2.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.AmazonManagedImage", version: "2.235.1-alpha.0" };
|
|
14
14
|
/**
|
|
15
15
|
* Imports the Amazon Linux 2 Amazon-managed image
|
|
16
16
|
*
|
|
@@ -10,7 +10,7 @@ const workflow_1 = require("./workflow");
|
|
|
10
10
|
* Helper class for working with Amazon-managed workflows
|
|
11
11
|
*/
|
|
12
12
|
class AmazonManagedWorkflow {
|
|
13
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.AmazonManagedWorkflow", version: "2.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.AmazonManagedWorkflow", version: "2.235.1-alpha.0" };
|
|
14
14
|
/**
|
|
15
15
|
* Imports the build-container Amazon-managed workflow
|
|
16
16
|
*
|
package/lib/base-image.js
CHANGED
|
@@ -7,7 +7,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
7
7
|
* Represents a base image that is used to start from in EC2 Image Builder image builds
|
|
8
8
|
*/
|
|
9
9
|
class BaseImage {
|
|
10
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.BaseImage", version: "2.
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.BaseImage", version: "2.235.1-alpha.0" };
|
|
11
11
|
/**
|
|
12
12
|
* The AMI ID to use as a base image in an image recipe
|
|
13
13
|
*
|
|
@@ -79,7 +79,7 @@ exports.BaseImage = BaseImage;
|
|
|
79
79
|
* Represents a base image that is used to start from in EC2 Image Builder image builds
|
|
80
80
|
*/
|
|
81
81
|
class BaseContainerImage {
|
|
82
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.BaseContainerImage", version: "2.
|
|
82
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.BaseContainerImage", version: "2.235.1-alpha.0" };
|
|
83
83
|
/**
|
|
84
84
|
* The DockerHub image to use as the base image in a container recipe
|
|
85
85
|
*
|
|
@@ -148,7 +148,7 @@ exports.BaseContainerImage = BaseContainerImage;
|
|
|
148
148
|
* EC2 Image Builder container build.
|
|
149
149
|
*/
|
|
150
150
|
class ContainerInstanceImage {
|
|
151
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ContainerInstanceImage", version: "2.
|
|
151
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ContainerInstanceImage", version: "2.235.1-alpha.0" };
|
|
152
152
|
/**
|
|
153
153
|
* The AMI ID to use to launch the instance for building the container image
|
|
154
154
|
*
|
package/lib/component.d.ts
CHANGED
|
@@ -638,12 +638,14 @@ export declare abstract class S3ComponentData extends ComponentData {
|
|
|
638
638
|
render(): ComponentDataConfig;
|
|
639
639
|
/**
|
|
640
640
|
* Grant put permissions to the given grantee for the component data in S3
|
|
641
|
+
* [disable-awslint:no-grants]
|
|
641
642
|
*
|
|
642
643
|
* @param grantee The principal
|
|
643
644
|
*/
|
|
644
645
|
grantPut(grantee: iam.IGrantable): iam.Grant;
|
|
645
646
|
/**
|
|
646
647
|
* Grant read permissions to the given grantee for the component data in S3
|
|
648
|
+
* [disable-awslint:no-grants]
|
|
647
649
|
*
|
|
648
650
|
* @param grantee The principal
|
|
649
651
|
*/
|
|
@@ -680,6 +682,7 @@ declare abstract class ComponentBase extends cdk.Resource implements IComponent
|
|
|
680
682
|
abstract readonly componentVersion: string;
|
|
681
683
|
/**
|
|
682
684
|
* Grant custom actions to the given grantee for the component
|
|
685
|
+
* [disable-awslint:no-grants]
|
|
683
686
|
*
|
|
684
687
|
* @param grantee The principal
|
|
685
688
|
* @param actions The list of actions
|
|
@@ -688,6 +691,8 @@ declare abstract class ComponentBase extends cdk.Resource implements IComponent
|
|
|
688
691
|
/**
|
|
689
692
|
* Grant read permissions to the given grantee for the component
|
|
690
693
|
*
|
|
694
|
+
* [disable-awslint:no-grants]
|
|
695
|
+
*
|
|
691
696
|
* @param grantee The principal
|
|
692
697
|
*/
|
|
693
698
|
grantRead(grantee: iam.IGrantable): iam.Grant;
|
package/lib/component.js
CHANGED
|
@@ -50,7 +50,7 @@ const LATEST_VERSION = 'x.x.x';
|
|
|
50
50
|
* The value of a constant in a component document
|
|
51
51
|
*/
|
|
52
52
|
class ComponentConstantValue {
|
|
53
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentConstantValue", version: "2.
|
|
53
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentConstantValue", version: "2.235.1-alpha.0" };
|
|
54
54
|
/**
|
|
55
55
|
* Creates a string type constant in a component document
|
|
56
56
|
*
|
|
@@ -267,7 +267,7 @@ var ComponentSchemaVersion;
|
|
|
267
267
|
* Represents the inputs for a step in the component document
|
|
268
268
|
*/
|
|
269
269
|
class ComponentStepInputs {
|
|
270
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentStepInputs", version: "2.
|
|
270
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentStepInputs", version: "2.235.1-alpha.0" };
|
|
271
271
|
/**
|
|
272
272
|
* Creates the input value from an object, for the component step
|
|
273
273
|
*
|
|
@@ -297,7 +297,7 @@ exports.ComponentStepInputs = ComponentStepInputs;
|
|
|
297
297
|
* Represents an `if` condition in the component document
|
|
298
298
|
*/
|
|
299
299
|
class ComponentStepIfCondition {
|
|
300
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentStepIfCondition", version: "2.
|
|
300
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentStepIfCondition", version: "2.235.1-alpha.0" };
|
|
301
301
|
/**
|
|
302
302
|
* Creates the `if` value from an object, for the component step
|
|
303
303
|
*
|
|
@@ -319,7 +319,7 @@ exports.ComponentStepIfCondition = ComponentStepIfCondition;
|
|
|
319
319
|
* Helper class for referencing and uploading component data
|
|
320
320
|
*/
|
|
321
321
|
class ComponentData {
|
|
322
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentData", version: "2.
|
|
322
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ComponentData", version: "2.235.1-alpha.0" };
|
|
323
323
|
/**
|
|
324
324
|
* Uploads component data from a local file to S3 to use as the component data
|
|
325
325
|
*
|
|
@@ -406,7 +406,7 @@ exports.ComponentData = ComponentData;
|
|
|
406
406
|
* Helper class for S3-based component data references, containing additional permission grant methods on the S3 object
|
|
407
407
|
*/
|
|
408
408
|
class S3ComponentData extends ComponentData {
|
|
409
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.S3ComponentData", version: "2.
|
|
409
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.S3ComponentData", version: "2.235.1-alpha.0" };
|
|
410
410
|
bucket;
|
|
411
411
|
key;
|
|
412
412
|
constructor(bucket, key) {
|
|
@@ -422,6 +422,7 @@ class S3ComponentData extends ComponentData {
|
|
|
422
422
|
}
|
|
423
423
|
/**
|
|
424
424
|
* Grant put permissions to the given grantee for the component data in S3
|
|
425
|
+
* [disable-awslint:no-grants]
|
|
425
426
|
*
|
|
426
427
|
* @param grantee The principal
|
|
427
428
|
*/
|
|
@@ -430,6 +431,7 @@ class S3ComponentData extends ComponentData {
|
|
|
430
431
|
}
|
|
431
432
|
/**
|
|
432
433
|
* Grant read permissions to the given grantee for the component data in S3
|
|
434
|
+
* [disable-awslint:no-grants]
|
|
433
435
|
*
|
|
434
436
|
* @param grantee The principal
|
|
435
437
|
*/
|
|
@@ -465,7 +467,7 @@ class S3ComponentDataFromAsset extends S3ComponentData {
|
|
|
465
467
|
* Helper class for working with AWS Marketplace components
|
|
466
468
|
*/
|
|
467
469
|
class AwsMarketplaceComponent {
|
|
468
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.AwsMarketplaceComponent", version: "2.
|
|
470
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.AwsMarketplaceComponent", version: "2.235.1-alpha.0" };
|
|
469
471
|
/**
|
|
470
472
|
* Imports an AWS Marketplace component from its attributes
|
|
471
473
|
*
|
|
@@ -498,6 +500,7 @@ exports.AwsMarketplaceComponent = AwsMarketplaceComponent;
|
|
|
498
500
|
class ComponentBase extends cdk.Resource {
|
|
499
501
|
/**
|
|
500
502
|
* Grant custom actions to the given grantee for the component
|
|
503
|
+
* [disable-awslint:no-grants]
|
|
501
504
|
*
|
|
502
505
|
* @param grantee The principal
|
|
503
506
|
* @param actions The list of actions
|
|
@@ -513,6 +516,8 @@ class ComponentBase extends cdk.Resource {
|
|
|
513
516
|
/**
|
|
514
517
|
* Grant read permissions to the given grantee for the component
|
|
515
518
|
*
|
|
519
|
+
* [disable-awslint:no-grants]
|
|
520
|
+
*
|
|
516
521
|
* @param grantee The principal
|
|
517
522
|
*/
|
|
518
523
|
grantRead(grantee) {
|
|
@@ -538,7 +543,7 @@ let Component = (() => {
|
|
|
538
543
|
Component = _classThis = _classDescriptor.value;
|
|
539
544
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
540
545
|
}
|
|
541
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.Component", version: "2.
|
|
546
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.Component", version: "2.235.1-alpha.0" };
|
|
542
547
|
/** Uniquely identifies this class. */
|
|
543
548
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-imagebuilder-alpha.Component';
|
|
544
549
|
/**
|
|
@@ -704,4 +709,4 @@ let Component = (() => {
|
|
|
704
709
|
return Component = _classThis;
|
|
705
710
|
})();
|
|
706
711
|
exports.Component = Component;
|
|
707
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFtQztBQUNuQywyQ0FBMkM7QUFDM0MsbUVBQTREO0FBRzVELHNEQUFzRDtBQUN0RCw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBRTFFLDZCQUE2QjtBQUc3QixNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsMkNBQTJDLENBQUMsQ0FBQztBQUVqRixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUM7QUErVC9COztHQUVHO0FBQ0gsTUFBYSxzQkFBc0I7O0lBQ2pDOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQWE7UUFDcEMsT0FBTyxJQUFJLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNwRDtJQUVEOztPQUVHO0lBQ2EsSUFBSSxDQUFTO0lBRTdCOztPQUVHO0lBQ2EsS0FBSyxDQUFNO0lBRTNCLFlBQXNCLElBQVksRUFBRSxLQUFVO1FBQzVDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0tBQ3BCOztBQXZCSCx3REF3QkM7QUEwQkQ7O0dBRUc7QUFDSCxJQUFZLGVBd0pYO0FBeEpELFdBQVksZUFBZTtJQUN6Qjs7T0FFRztJQUNILDZDQUEwQixDQUFBO0lBRTFCOzs7T0FHRztJQUNILG9DQUFpQixDQUFBO0lBRWpCOztPQUVHO0lBQ0gseUNBQXNCLENBQUE7SUFFdEI7O09BRUc7SUFDSCw2Q0FBMEIsQ0FBQTtJQUUxQjs7T0FFRztJQUNILDZDQUEwQixDQUFBO0lBRTFCOztPQUVHO0lBQ0gsaURBQThCLENBQUE7SUFFOUI7O09BRUc7SUFDSCxtREFBZ0MsQ0FBQTtJQUVoQzs7T0FFRztJQUNILDZDQUEwQixD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SUFBSSxDQUFDLFlBQVksR0FBRyxFQUNyRixJQUFJLENBQ0wsQ0FBQztZQUNKLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLGtEQUFrRCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDOUcsQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsdURBQXVELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNuSCxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztnQkFDMUQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsOENBQThDLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMxRyxDQUFDO1NBQ0Y7O1lBeExVLHVEQUFTOzs7OztBQUFULDhCQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENmbkNvbXBvbmVudCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pbWFnZWJ1aWxkZXInO1xuaW1wb3J0ICogYXMga21zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIHMzYXNzZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyB5YW1sIGZyb20gJ3lhbWwnO1xuaW1wb3J0IHsgT1NWZXJzaW9uLCBQbGF0Zm9ybSB9IGZyb20gJy4vb3MtdmVyc2lvbic7XG5cbmNvbnN0IENPTVBPTkVOVF9TWU1CT0wgPSBTeW1ib2wuZm9yKCdAYXdzLWNkay9hd3MtaW1hZ2VidWlsZGVyLWFscGhhLkNvbXBvbmVudCcpO1xuXG5jb25zdCBMQVRFU1RfVkVSU0lPTiA9ICd4LngueCc7XG5cbi8qKlxuICogQW4gRUMyIEltYWdlIEJ1aWxkZXIgQ29tcG9uZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDb21wb25lbnQgZXh0ZW5kcyBjZGsuSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnRBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudCBjdXN0b20gYWN0aW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBsaXN0IG9mIGFjdGlvbnNcbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBDb21wb25lbnQgcmVzb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IGRvY3VtZW50IGNvbnRlbnQgdGhhdCBkZWZpbmVzIHRoZSBidWlsZCwgdmFsaWRhdGlvbiwgb3IgdGVzdCBzdGVwcyB0byBiZSBleGVjdXRlZCBkdXJpbmcgdGhlIGltYWdlXG4gICAqIGJ1aWxkaW5nIHByb2Nlc3MuXG4gICAqL1xuICByZWFkb25seSBkYXRhOiBDb21wb25lbnREYXRhO1xuXG4gIC8qKlxuICAgKiBUaGUgb3BlcmF0aW5nIHN5c3RlbSBwbGF0Zm9ybSBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgcGxhdGZvcm06IFBsYXRmb3JtO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGEgbmFtZSBpcyBnZW5lcmF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDEuMC4wXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnRWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjaGFuZ2UgZGVzY3JpcHRpb24gb2YgdGhlIGNvbXBvbmVudC4gRGVzY3JpYmVzIHdoYXQgY2hhbmdlIGhhcyBiZWVuIG1hZGUgaW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSBjb21wb25lbnQsIG9yXG4gICAqIHdoYXQgbWFrZXMgdGhpcyB2ZXJzaW9uIGRpZmZlcmVudCBmcm9tIG90aGVyIHZlcnNpb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2VEZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEtNUyBrZXkgdXNlZCB0byBlbmNyeXB0IHRoaXMgY29tcG9uZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGFuIEltYWdlIEJ1aWxkZXIgb3duZWQga2V5IHdpbGwgYmUgdXNlZCB0byBlbmNyeXB0IHRoZSBjb21wb25lbnQuXG4gICAqL1xuICByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcblxuICAvKipcbiAgICogVGhlIG9wZXJhdGluZyBzeXN0ZW0gdmVyc2lvbnMgc3VwcG9ydGVkIGJ5IHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHN1cHBvcnRlZE9zVmVyc2lvbnM/OiBPU1ZlcnNpb25bXTtcblxuICAvKipcbiAgICogVGhlIHRhZ3MgdG8gYXBwbHkgdG8gdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhbiBFQzIgSW1hZ2UgQnVpbGRlciBjb21wb25lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnRBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBBUk4gaXMgYXV0b21hdGljYWxseSBjb25zdHJ1Y3RlZCBpZiBhIGNvbXBvbmVudE5hbWUgaXMgcHJvdmlkZWQsIG90aGVyd2lzZSBhIGNvbXBvbmVudEFybiBpc1xuICAgKiAgICAgICAgICAgIHJlcXVpcmVkXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnRBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgbmFtZSBpcyBhdXRvbWF0aWNhbGx5IGNvbnN0cnVjdGVkIGlmIGEgY29tcG9uZW50QXJuIGlzIHByb3ZpZGVkLCBvdGhlcndpc2UgYSBjb21wb25lbnROYW1lIGlzXG4gICAqICAgICAgICAgICAgcmVxdWlyZWRcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudCwgeC54LnhcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudFZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYW4gRUMyIEltYWdlIEJ1aWxkZXIgQVdTIE1hcmtldHBsYWNlIGNvbXBvbmVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF3c01hcmtldHBsYWNlQ29tcG9uZW50QXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgQVdTIE1hcmtldHBsYWNlIGNvbXBvbmVudC4gVGhpcyBuYW1lIHNob3VsZCBleGNsdWRlIHRoZSBtYXJrZXRwbGFjZSBwcm9kdWN0IElEIGZyb20gaXRcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1hcmtldHBsYWNlIHByb2R1Y3QgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb21wb25lbnRcbiAgICovXG4gIHJlYWRvbmx5IG1hcmtldHBsYWNlUHJvZHVjdElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBBV1MgTWFya2V0cGxhY2UgY29tcG9uZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBjb21wb25lbnQsIHgueC54XG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnRWZXJzaW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgb2YgYW4gRUMyIEltYWdlIEJ1aWxkZXIgQ29tcG9uZW50IERvY3VtZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RG9jdW1lbnQge1xuICAvKipcbiAgICogVGhlIHNjaGVtYSB2ZXJzaW9uIG9mIHRoZSBjb21wb25lbnRcbiAgICovXG4gIHJlYWRvbmx5IHNjaGVtYVZlcnNpb246IENvbXBvbmVudFNjaGVtYVZlcnNpb247XG5cbiAgLyoqXG4gICAqIFRoZSBwaGFzZXMgd2hpY2ggZGVmaW5lIHRoZSBncm91cGluZyBvZiBzdGVwcyB0byBydW4gaW4gdGhlIGJ1aWxkIGFuZCB0ZXN0IHdvcmtmbG93cyBvZiB0aGUgaW1hZ2UgYnVpbGQuXG4gICAqL1xuICByZWFkb25seSBwaGFzZXM6IENvbXBvbmVudERvY3VtZW50UGhhc2VbXTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGRvY3VtZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZG9jdW1lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25zdGFudHMgdG8gZGVmaW5lIGluIHRoZSBkb2N1bWVudFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBjb25zdGFudHM/OiB7IFtjb25zdGFudE5hbWU6IHN0cmluZ106IENvbXBvbmVudENvbnN0YW50VmFsdWUgfTtcblxuICAvKipcbiAgICogVGhlIHBhcmFtZXRlcnMgdG8gZGVmaW5lIGluIHRoZSBkb2N1bWVudFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJzPzogeyBbcGFyYW1ldGVyTmFtZTogc3RyaW5nXTogQ29tcG9uZW50RG9jdW1lbnRQYXJhbWV0ZXJEZWZpbml0aW9uIH07XG59XG5cbi8qKlxuICogVGhlIHBoYXNlIHRvIHJ1biBpbiBhIHNwZWNpZmljIHdvcmtmbG93IGluIGFuIGltYWdlIGJ1aWxkLCB3aGljaCBkZWZpbmUgdGhlIHN0ZXBzIHRvIGV4ZWN1dGUgdG8gY3VzdG9taXplIG9yIHRlc3RcbiAqIHRoZSBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREb2N1bWVudFBoYXNlIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwaGFzZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogQ29tcG9uZW50UGhhc2VOYW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBzdGVwcyB0byBleGVjdXRlIHRvIG1vZGlmeSBvciB0ZXN0IHRoZSBidWlsZC90ZXN0IGluc3RhbmNlXG4gICAqL1xuICByZWFkb25seSBzdGVwczogQ29tcG9uZW50RG9jdW1lbnRTdGVwW107XG59XG5cbi8qKlxuICogVGhlIHN0ZXAgdG8gcnVuIGluIGEgc3BlY2lmaWMgcGhhc2Ugb2YgdGhlIGltYWdlIGJ1aWxkLCB3aGljaCBkZWZpbmVzIHRoZSBzdGVwIHRvIGV4ZWN1dGUgdG8gY3VzdG9taXplIG9yIHRlc3QgdGhlXG4gKiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREb2N1bWVudFN0ZXAge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHN0ZXBcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFjdGlvbiB0byBwZXJmb3JtIGluIHRoZSBzdGVwXG4gICAqL1xuICByZWFkb25seSBhY3Rpb246IENvbXBvbmVudEFjdGlvbjtcblxuICAvKipcbiAgICogQ29udGFpbnMgcGFyYW1ldGVycyByZXF1aXJlZCBieSB0aGUgYWN0aW9uIHRvIHJ1biB0aGUgc3RlcFxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS90b2UtYWN0aW9uLW1vZHVsZXMuaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgaW5wdXRzOiBDb21wb25lbnRTdGVwSW5wdXRzO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZGl0aW9uIHRvIGFwcGx5IHRvIHRoZSBzdGVwLiBJZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlLCB0aGVuIHRoZSBzdGVwIGlzIHNraXBwZWRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBjb25kaXRpb24gaXMgYXBwbGllZCB0byB0aGUgc3RlcCBhbmQgaXQgZ2V0cyBleGVjdXRlZFxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS90b2UtY29uZGl0aW9uYWwtY29uc3RydWN0cy5odG1sXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL3RvZS1jb21wYXJpc29uLW9wZXJhdG9ycy5odG1sXG4gICAqL1xuICByZWFkb25seSBpZj86IENvbXBvbmVudFN0ZXBJZkNvbmRpdGlvbjtcblxuICAvKipcbiAgICogQSBsb29waW5nIGNvbnN0cnVjdCBkZWZpbmluZyBhIHJlcGVhdGVkIHNlcXVlbmNlIG9mIGluc3RydWN0aW9uc1xuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBsb29wPzogQ29tcG9uZW50RG9jdW1lbnRMb29wO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZW91dCBvZiB0aGUgc3RlcFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIDEyMCBtaW51dGVzXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogY2RrLkR1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgd2hhdCB0aGUgc3RlcCBzaG91bGQgZG8gaW4gY2FzZSBvZiBmYWlsdXJlXG4gICAqXG4gICAqIEBkZWZhdWx0IENvbXBvbmVudE9uRmFpbHVyZS5BQk9SVFxuICAgKi9cbiAgcmVhZG9ubHkgb25GYWlsdXJlPzogQ29tcG9uZW50T25GYWlsdXJlO1xufVxuXG4vKipcbiAqIFRoZSBsb29waW5nIGNvbnN0cnVjdCBvZiBhIGNvbXBvbmVudCBkZWZpbmVzIGEgcmVwZWF0ZWQgc2VxdWVuY2Ugb2YgaW5zdHJ1Y3Rpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RG9jdW1lbnRMb29wIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBsb29wLCB3aGljaCBjYW4gYmUgdXNlZCB0byByZWZlcmVuY2VcbiAgICpcbiAgICogQGRlZmF1bHQgbG9vcFxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZvciBsb29wIGl0ZXJhdGVzIG9uIGEgcmFuZ2Ugb2YgaW50ZWdlcnMgc3BlY2lmaWVkIHdpdGhpbiBhIGJvdW5kYXJ5IG91dGxpbmVkIGJ5IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZVxuICAgKiB2YXJpYWJsZXNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lIGlmIGBmb3JFYWNoYCBpcyBwcm92aWRlZC4gb3RoZXJ3aXNlLCBgZm9yYCBpcyByZXF1aXJlZC5cbiAgICovXG4gIHJlYWRvbmx5IGZvcj86IENvbXBvbmVudERvY3VtZW50Rm9yTG9vcDtcblxuICAvKipcbiAgICogVGhlIGZvckVhY2ggbG9vcCBpdGVyYXRlcyBvbiBhbiBleHBsaWNpdCBsaXN0IG9mIHZhbHVlcywgd2hpY2ggY2FuIGJlIHN0cmluZ3MgYW5kIGNoYWluZWQgZXhwcmVzc2lvbnNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lIGlmIGBmb3JgIGlzIHByb3ZpZGVkLiBvdGhlcndpc2UsIGBmb3JFYWNoYCBpcyByZXF1aXJlZC5cbiAgICovXG4gIHJlYWRvbmx5IGZvckVhY2g/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgZm9yIGxvb3AgaXRlcmF0ZXMgb24gYSByYW5nZSBvZiBpbnRlZ2VycyBzcGVjaWZpZWQgd2l0aGluIGEgYm91bmRhcnkgb3V0bGluZWQgYnkgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlXG4gKiB2YXJpYWJsZXMuIFRoZSBpdGVyYXRpbmcgdmFsdWVzIGFyZSBpbiB0aGUgc2V0IFtzdGFydCwgZW5kXSBhbmQgaW5jbHVkZXMgYm91bmRhcnkgdmFsdWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERvY3VtZW50Rm9yTG9vcCB7XG4gIC8qKlxuICAgKiBTdGFydGluZyB2YWx1ZSBvZiBpdGVyYXRpb24uIERvZXMgbm90IGFjY2VwdCBjaGFpbmluZyBleHByZXNzaW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0OiBudW1iZXI7XG4gIC8qKlxuICAgKiBFbmRpbmcgdmFsdWUgb2YgaXRlcmF0aW9uLiBEb2VzIG5vdCBhY2NlcHQgY2hhaW5pbmcgZXhwcmVzc2lvbnMuXG4gICAqL1xuICByZWFkb25seSBlbmQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIERpZmZlcmVuY2UgYnkgd2hpY2ggYW4gaXRlcmF0aW5nIHZhbHVlIGlzIHVwZGF0ZWQgdGhyb3VnaCBhZGRpdGlvbi4gSXQgbXVzdCBiZSBhIG5lZ2F0aXZlIG9yIHBvc2l0aXZlIG5vbi16ZXJvXG4gICAqIHZhbHVlLiBEb2VzIG5vdCBhY2NlcHQgY2hhaW5pbmcgZXhwcmVzc2lvbnMuXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVCeTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSB2YWx1ZSBvZiBhIGNvbnN0YW50IGluIGEgY29tcG9uZW50IGRvY3VtZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRDb25zdGFudFZhbHVlIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBzdHJpbmcgdHlwZSBjb25zdGFudCBpbiBhIGNvbXBvbmVudCBkb2N1bWVudFxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBjb25zdGFudFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tU3RyaW5nKHZhbHVlOiBzdHJpbmcpOiBDb21wb25lbnRDb25zdGFudFZhbHVlIHtcbiAgICByZXR1cm4gbmV3IENvbXBvbmVudENvbnN0YW50VmFsdWUoJ3N0cmluZycsIHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGF0YSB0eXBlIG9mIHRoZSBjb25zdGFudFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBjb25zdGFudFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBhbnk7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHR5cGU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogVGhlIGRlZmluaXRpb24gb2YgdGhlIHBhcmFtZXRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERvY3VtZW50UGFyYW1ldGVyRGVmaW5pdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgcGFyYW1ldGVyXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBDb21wb25lbnRQYXJhbWV0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZSwgaW5kaWNhdGluZyB0aGUgcGFyYW1ldGVyIGlzIHJlcXVpcmVkXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0PzogYW55O1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlclxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgYWN0aW9uIGZvciBhIHN0ZXAgd2l0aGluIHRoZSBjb21wb25lbnQgZG9jdW1lbnRcbiAqL1xuZXhwb3J0IGVudW0gQ29tcG9uZW50QWN0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBBcHBlbmRGaWxlIGFjdGlvbiBhZGRzIHRoZSBwcm92aWRlZCBjb250ZW50IHRvIHRoZSBwcmUtZXhpc3RpbmcgY29udGVudCBvZiBhIGZpbGVcbiAgICovXG4gIEFQUEVORF9GSUxFID0gJ0FwcGVuZEZpbGUnLFxuXG4gIC8qKlxuICAgKiBUaGUgQXNzZXJ0IGFjdGlvbiBwZXJmb3JtcyB2YWx1ZSB3aXRoIGNvbXBhcmlzb24vbG9naWMgb3BlcmF0b3JzLCBhbmQgc3VjY2VlZHMvZmFpbHMgdGhlIHN0ZXAgYmFzZWQgb24gdGhlIG91dGNvbWVcbiAgICogb2YgdGhlIGFzc2VydGlvblxuICAgKi9cbiAgQVNTRVJUID0gJ0Fzc2VydCcsXG5cbiAgLyoqXG4gICAqIFRoZSBDb3B5RmlsZSBhY3Rpb24gY29waWVzIGZpbGVzIGZyb20gYSBzb3VyY2UgZmlsZSB0byBhIGRlc3RpbmF0aW9uXG4gICAqL1xuICBDT1BZX0ZJTEUgPSAnQ29weUZpbGUnLFxuXG4gIC8qKlxuICAgKiBUaGUgQ29weUZvbGRlciBhY3Rpb24gY29waWVzIGZvbGRlcnMgZnJvbSBhIHNvdXJjZSB0byBhIGRlc3RpbmF0aW9uXG4gICAqL1xuICBDT1BZX0ZPTERFUiA9ICdDb3B5Rm9sZGVyJyxcblxuICAvKipcbiAgICogVGhlIENyZWF0ZUZpbGUgYWN0aW9uIGNyZWF0ZXMgYSBmaWxlIGluIHRoZSBwcm92aWRlZCBsb2NhdGlvblxuICAgKi9cbiAgQ1JFQVRFX0ZJTEUgPSAnQ3JlYXRlRmlsZScsXG5cbiAgLyoqXG4gICAqIFRoZSBDcmVhdGVGb2xkZXIgYWN0aW9uIGNyZWF0ZXMgYSBmb2xkZXIgaW4gdGhlIHByb3ZpZGVkIGxvY2F0aW9uXG4gICAqL1xuICBDUkVBVEVfRk9MREVSID0gJ0NyZWF0ZUZvbGRlcicsXG5cbiAgLyoqXG4gICAqIFRoZSBDcmVhdGVTeW1saW5rIGFjdGlvbiBjcmVhdGVzIHN5bWJvbGljIGxpbmtzIGZyb20gYSBnaXZlbiBwYXRoIHRvIGEgdGFyZ2V0XG4gICAqL1xuICBDUkVBVEVfU1lNTElOSyA9ICdDcmVhdGVTeW1saW5rJyxcblxuICAvKipcbiAgICogVGhlIERlbGV0ZUZpbGUgYWN0aW9uIGRlbGV0ZXMgZmlsZShzKSBpbiB0aGUgcHJvdmlkZWQgbG9jYXRpb25cbiAgICovXG4gIERFTEVURV9GSUxFID0gJ0RlbGV0ZUZpbGUnLFxuXG4gIC8qKlxuICAgKiBUaGUgRGVsZXRlRm9sZGVyIGFjdGlvbiBkZWxldGVzIGZvbGRlcnMgaW4gdGhlIHByb3ZpZGVkIGxvY2F0aW9uXG4gICAqL1xuICBERUxFVEVfRk9MREVSID0gJ0RlbGV0ZUZvbGRlcicsXG5cbiAgLyoqXG4gICAqIFRoZSBFeGVjdXRlQmFzaCBhY3Rpb24gcnVucyBiYXNoIHNjcmlwdHMgd2l0aCBpbmxpbmUgYmFzaCBjb21tYW5kc1xuICAgKi9cbiAgRVhFQ1VURV9CQVNIID0gJ0V4ZWN1dGVCYXNoJyxcblxuICAvKipcbiAgICogVGhlIEV4ZWN1dGVCaW5hcnkgYWN0aW9uIHJ1bnMgYSBwcm92aWRlZCBiaW5hcnkgZXhlY3V0YWJsZVxuICAgKi9cbiAgRVhFQ1VURV9CSU5BUlkgPSAnRXhlY3V0ZUJpbmFyeScsXG5cbiAgLyoqXG4gICAqIFRoZSBFeGVjdXRlRG9jdW1lbnQgYWN0aW9uIGFsbG93cyBydW5uaW5nIG90aGVyIGNvbXBvbmVudCBkb2N1bWVudHMgZnJvbSB3aXRoaW4gYSBnaXZlbiBjb21wb25lbnRcbiAgICovXG4gIEVYRUNVVEVfRE9DVU1FTlQgPSAnRXhlY3V0ZURvY3VtZW50JyxcblxuICAvKipcbiAgICogVGhlIEV4ZWN1dGVQb3dlcnNoZWxsIGFjdGlvbiBydW5zIFBvd2VyU2hlbGwgc2NyaXB0cyB3aXRoIGlubGluZSBQb3dlclNoZWxsIGNvbW1hbmRzXG4gICAqL1xuICBFWEVDVVRFX1BPV0VSU0hFTEwgPSAnRXhlY3V0ZVBvd2VyU2hlbGwnLFxuXG4gIC8qKlxuICAgKiBUaGUgSW5zdGFsbE1TSSBhY3Rpb24gcnVucyBhIFdpbmRvd3MgYXBwbGljYXRpb24gd2l0aCB0aGUgcHJvdmlkZWQgTVNJIGZpbGVcbiAgICovXG4gIElOU1RBTExfTVNJID0gJ0luc3RhbGxNU0knLFxuXG4gIC8qKlxuICAgKiBUaGUgTGlzdEZpbGVzIGFjdGlvbiBsaXN0cyBmaWxlcyBpbiB0aGUgcHJvdmlkZWQgZm9sZGVyXG4gICAqL1xuICBMSVNUX0ZJTEVTID0gJ0xpc3RGaWxlcycsXG5cbiAgLyoqXG4gICAqIFRoZSBNb3ZlRmlsZSBhY3Rpb24gbW92ZXMgZmlsZXMgZnJvbSBhIHNvdXJjZSB0byBhIGRlc3RpbmF0aW9uXG4gICAqL1xuICBNT1ZFX0ZJTEUgPSAnTW92ZUZpbGUnLFxuXG4gIC8qKlxuICAgKiBUaGUgTW92ZUZvbGRlciBhY3Rpb24gbW92ZXMgZm9sZGVycyBmcm9tIGEgc291cmNlIHRvIGEgZGVzdGluYXRpb25cbiAgICovXG4gIE1PVkVfRk9MREVSID0gJ01vdmVGb2xkZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgUmVhZEZpbGUgYWN0aW9uIHJlYWRzIHRoZSBjb250ZW50IG9mIGEgdGV4dCBmaWxlXG4gICAqL1xuICBSRUFEX0ZJTEUgPSAnUmVhZEZpbGUnLFxuXG4gIC8qKlxuICAgKiBUaGUgUmVib290IGFjdGlvbiByZWJvb3RzIHRoZSBpbnN0YW5jZVxuICAgKi9cbiAgUkVCT09UID0gJ1JlYm9vdCcsXG5cbiAgLyoqXG4gICAqIFRoZSBTZXRGaWxlRW5jb2RpbmcgYWN0aW9uIG1vZGlmaWVzIHRoZSBlbmNvZGluZyBwcm9wZXJ0eSBvZiBhbiBleGlzdGluZyBmaWxlXG4gICAqL1xuICBTRVRfRklMRV9FTkNPRElORyA9ICdTZXRGaWxlRW5jb2RpbmcnLFxuXG4gIC8qKlxuICAgKiBUaGUgU2V0RmlsZU93bmVyIGFjdGlvbiBtb2RpZmllcyB0aGUgb3duZXIgYW5kIGdyb3VwIG93bmVyc2hpcCBwcm9wZXJ0aWVzIG9mIGFuIGV4aXN0aW5nIGZpbGVcbiAgICovXG4gIFNFVF9GSUxFX09XTkVSID0gJ1NldEZpbGVPd25lcicsXG5cbiAgLyoqXG4gICAqIFRoZSBTZXRGb2xkZXJPd25lciBhY3Rpb24gcmVjdXJzaXZlbHkgbW9kaWZpZXMgdGhlIG93bmVyIGFuZCBncm91cCBvd25lcnNoaXAgcHJvcGVydGllcyBvZiBhbiBleGlzdGluZyBmb2xkZXJcbiAgICovXG4gIFNFVF9GT0xERVJfT1dORVIgPSAnU2V0Rm9sZGVyT3duZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgU2V0RmlsZVBlcm1pc3Npb25zIGFjdGlvbiBtb2RpZmllcyB0aGUgcGVybWlzc2lvbiBvZiBhbiBleGlzdGluZyBmaWxlXG4gICAqL1xuICBTRVRfRklMRV9QRVJNSVNTSU9OUyA9ICdTZXRGaWxlUGVybWlzc2lvbnMnLFxuXG4gIC8qKlxuICAgKiBUaGUgU2V0Rm9sZGVyUGVybWlzc2lvbnMgYWN0aW9uIHJlY3Vyc2l2ZWx5IG1vZGlmaWVzIHRoZSBwZXJtaXNzaW9ucyBvZiBhbiBleGlzdGluZyBmb2xkZXIgYW5kIGFsbCBvZiBpdHMgc3ViZmlsZXNcbiAgICogYW5kIHN1YmZvbGRlcnNcbiAgICovXG4gIFNFVF9GT0xERVJfUEVSTUlTU0lPTlMgPSAnU2V0Rm9sZGVyUGVybWlzc2lvbnMnLFxuXG4gIC8qKlxuICAgKiBUaGUgU2V0UmVnaXN0cnkgYWN0aW9uIHNldHMgdGhlIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIFdpbmRvd3MgcmVnaXN0cnkga2V5XG4gICAqL1xuICBTRVRfUkVHSVNUUlkgPSAnU2V0UmVnaXN0cnknLFxuXG4gIC8qKlxuICAgKiBUaGUgUzNEb3dubG9hZCBhY3Rpb24gZG93bmxvYWRzIGFuIEFtYXpvbiBTMyBvYmplY3QvZm9sZGVyIHRvIGEgbG9jYWwgZGVzdGluYXRpb25cbiAgICovXG4gIFMzX0RPV05MT0FEID0gJ1MzRG93bmxvYWQnLFxuXG4gIC8qKlxuICAgKiBUaGUgUzNVcGxvYWQgYWN0aW9uIHVwbG9hZHMgYSBmaWxlIG9yIGZvbGRlciB0byBhbiBBbWF6b24gUzMgbG9jYXRpb25cbiAgICovXG4gIFMzX1VQTE9BRCA9ICdTM1VwbG9hZCcsXG5cbiAgLyoqXG4gICAqIFRoZSBVbmluc3RhbGxNU0kgYWN0aW9uIHJlbW92ZXMgYSBXaW5kb3dzIGFwcGxpY2F0aW9uIHVzaW5nIGFuIE1TSSBmaWxlXG4gICAqL1xuICBVTklOU1RBTExfTVNJID0gJ1VuaW5zdGFsbE1TSScsXG5cbiAgLyoqXG4gICAqIFRoZSBVcGRhdGVPUyBhY3Rpb24gaW5zdGFsbHMgT1MgdXBkYXRlc1xuICAgKi9cbiAgVVBEQVRFX09TID0gJ1VwZGF0ZU9TJyxcblxuICAvKipcbiAgICogVGhlIFdlYkRvd25sb2FkIGFjdGlvbiBkb3dubG9hZHMgZmlsZXMgZnJvbSBhIFVSTCB0byBhIGxvY2FsIGRlc3RpbmF0aW9uXG4gICAqL1xuICBXRUJfRE9XTkxPQUQgPSAnV2ViRG93bmxvYWQnLFxufVxuXG4vKipcbiAqIFNwZWNpZmllcyB3aGF0IHRoZSBzdGVwIHNob3VsZCBkbyBpbiBjYXNlIG9mIGZhaWx1cmVcbiAqL1xuZXhwb3J0IGVudW0gQ29tcG9uZW50T25GYWlsdXJlIHtcbiAgLyoqXG4gICAqIEZhaWxzIHRoZSBzdGVwIGFuZCBkb2N1bWVudCBleGVjdXRpb25cbiAgICovXG4gIEFCT1JUID0gJ0Fib3J0JyxcblxuICAvKipcbiAgICogRmFpbHMgdGhlIHN0ZXAgYW5kIHByb2NlZWRzIHRvIGV4ZWN1dGUgdGhlIG5leHQgc3RlcCBpbiB0aGUgZG9jdW1lbnRcbiAgICovXG4gIENPTlRJTlVFID0gJ0NvbnRpbnVlJyxcblxuICAvKipcbiAgICogSWdub3JlcyB0aGUgc3RlcCBhbmQgcHJvY2VlZHMgdG8gZXhlY3V0ZSB0aGUgbmV4dCBzdGVwIGluIHRoZSBkb2N1bWVudFxuICAgKi9cbiAgSUdOT1JFID0gJ0lnbm9yZScsXG59XG5cbi8qKlxuICogVGhlIHBhcmFtZXRlciB0eXBlIGluIGEgY29tcG9uZW50IGRvY3VtZW50XG4gKi9cbmV4cG9ydCBlbnVtIENvbXBvbmVudFBhcmFtZXRlclR5cGUge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBwYXJhbWV0ZXIgdmFsdWUgaXMgYSBzdHJpbmdcbiAgICovXG4gIFNUUklORyA9ICdzdHJpbmcnLFxufVxuXG4vKipcbiAqIFRoZSBwaGFzZXMgb2YgYSBjb21wb25lbnQgZG9jdW1lbnRcbiAqL1xuZXhwb3J0IGVudW0gQ29tcG9uZW50UGhhc2VOYW1lIHtcbiAgLyoqXG4gICAqIEJ1aWxkIHBoYXNlIG9mIHRoZSBjb21wb25lbnQuIFRoaXMgcGhhc2UgaXMgcnVuIGR1cmluZyB0aGUgQlVJTERJTkcgcGhhc2Ugb2YgdGhlIGltYWdlIGJ1aWxkLlxuICAgKi9cbiAgQlVJTEQgPSAnYnVpbGQnLFxuXG4gIC8qKlxuICAgKiBUZXN0IHBoYXNlIG9mIHRoZSBjb21wb25lbnQsIGV4ZWN1dGVkIGRpcmVjdGx5IG9uIHRoZSBpbnN0YW5jZSB3aGljaCBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBjb250YWluZXIgaW1hZ2UuIFRoaXNcbiAgICogcGhhc2UgaXMgcnVuIGR1cmluZyB0aGUgVEVTVElORyBwaGFzZSBvZiB0aGUgaW1hZ2UgYnVpbGQuXG4gICAqL1xuICBDT05UQUlORVJfSE9TVF9URVNUID0gJ2NvbnRhaW5lci1ob3N0LXRlc3QnLFxuXG4gIC8qKlxuICAgKiBUZXN0IHBoYXNlIG9mIHRoZSBjb21wb25lbnQuIFRoaXMgcGhhc2UgaXMgcnVuIGR1cmluZyB0aGUgVEVTVElORyBwaGFzZSBvZiB0aGUgaW1hZ2UgYnVpbGQuXG4gICAqL1xuICBURVNUID0gJ3Rlc3QnLFxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSBwaGFzZSBvZiB0aGUgY29tcG9uZW50LiBUaGlzIHBoYXNlIGlzIHJ1biBkdXJpbmcgdGhlIEJVSUxESU5HIHBoYXNlIG9mIHRoZSBpbWFnZSBidWlsZCwgYWZ0ZXIgdGhlIGJ1aWxkXG4gICAqIHN0ZXAgb2YgdGhlIGNvbXBvbmVudCBpcyBleGVjdXRlZC5cbiAgICovXG4gIFZBTElEQVRFID0gJ3ZhbGlkYXRlJyxcbn1cblxuLyoqXG4gKiBUaGUgc2NoZW1hIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudFxuICovXG5leHBvcnQgZW51bSBDb21wb25lbnRTY2hlbWFWZXJzaW9uIHtcbiAgLyoqXG4gICAqIFNjaGVtYSB2ZXJzaW9uIDEuMCBmb3IgdGhlIGNvbXBvbmVudCBkb2N1bWVudFxuICAgKi9cbiAgVjFfMCA9ICcxLjAnLFxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGlucHV0cyBmb3IgYSBzdGVwIGluIHRoZSBjb21wb25lbnQgZG9jdW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIENvbXBvbmVudFN0ZXBJbnB1dHMge1xuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgaW5wdXQgdmFsdWUgZnJvbSBhbiBvYmplY3QsIGZvciB0aGUgY29tcG9uZW50IHN0ZXBcbiAgICpcbiAgICogQHBhcmFtIGlucHV0c09iamVjdCBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGlucHV0IHZhbHVlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tT2JqZWN0KGlucHV0c09iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IENvbXBvbmVudFN0ZXBJbnB1dHMge1xuICAgIHJldHVybiBuZXcgQ29tcG9uZW50U3RlcElucHV0cyhpbnB1dHNPYmplY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGlucHV0IHZhbHVlIGZyb20gYSBsaXN0IG9mIGlucHV0IG9iamVjdHMsIGZvciB0aGUgY29tcG9uZW50IHN0ZXBcbiAgICpcbiAgICogQHBhcmFtIGlucHV0c09iamVjdExpc3QgVGhlIGxpc3Qgb2Ygb2JqZWN0cyBjb250YWluaW5nIHRoZSBpbnB1dCB2YWx1ZXNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUxpc3QoaW5wdXRzT2JqZWN0TGlzdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdKTogQ29tcG9uZW50U3RlcElucHV0cyB7XG4gICAgcmV0dXJuIG5ldyBDb21wb25lbnRTdGVwSW5wdXRzKGlucHV0c09iamVjdExpc3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBpbnB1dCB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlucHV0czogYW55O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihpbnB1dDogYW55KSB7XG4gICAgdGhpcy5pbnB1dHMgPSBpbnB1dDtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gYGlmYCBjb25kaXRpb24gaW4gdGhlIGNvbXBvbmVudCBkb2N1bWVudFxuICovXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50U3RlcElmQ29uZGl0aW9uIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIGBpZmAgdmFsdWUgZnJvbSBhbiBvYmplY3QsIGZvciB0aGUgY29tcG9uZW50IHN0ZXBcbiAgICpcbiAgICogQHBhcmFtIGlmT2JqZWN0IFRoZSBvYmplY3QgY29udGFpbmluZyB0aGUgYGlmYCBjb25kaXRpb25cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbU9iamVjdChpZk9iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IENvbXBvbmVudFN0ZXBJZkNvbmRpdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDb21wb25lbnRTdGVwSWZDb25kaXRpb24oaWZPYmplY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBpbnB1dCB2YWx1ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlmQ29uZGl0aW9uOiBhbnk7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGlmQ29uZGl0aW9uOiBhbnkpIHtcbiAgICB0aGlzLmlmQ29uZGl0aW9uID0gaWZDb25kaXRpb247XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgcmVuZGVyZWQgY29tcG9uZW50IGRhdGEgdmFsdWUsIGZvciB1c2UgaW4gQ2xvdWRGb3JtYXRpb24uXG4gKiAtIEZvciBpbmxpbmUgY29tcG9uZW50cywgZGF0YSBpcyB0aGUgY29tcG9uZW50IHRleHRcbiAqIC0gRm9yIFMzLWJhY2tlZCBjb21wb25lbnRzLCB1cmkgaXMgdGhlIFMzIFVSTFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERhdGFDb25maWcge1xuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIGNvbXBvbmVudCBkYXRhLCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZSBpZiB1cmkgaXMgc2V0XG4gICAqL1xuICByZWFkb25seSBkYXRhPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgY29tcG9uZW50IGRhdGEgVVJJLCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZSBpZiBkYXRhIGlzIHNldFxuICAgKi9cbiAgcmVhZG9ubHkgdXJpPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgcmVmZXJlbmNpbmcgYW5kIHVwbG9hZGluZyBjb21wb25lbnQgZGF0YVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29tcG9uZW50RGF0YSB7XG4gIC8qKlxuICAgKiBVcGxvYWRzIGNvbXBvbmVudCBkYXRhIGZyb20gYSBsb2NhbCBmaWxlIHRvIFMzIHRvIHVzZSBhcyB0aGUgY29tcG9uZW50IGRhdGFcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIElkZW50aWZpZXIgb2YgdGhlIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gcGF0aCBUaGUgbG9jYWwgcGF0aCB0byB0aGUgY29tcG9uZW50IGRhdGEgZmlsZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBTMyBhc3NldCB1cGxvYWQgb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQXNzZXQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBvcHRpb25zOiBzM2Fzc2V0cy5Bc3NldE9wdGlvbnMgPSB7fSxcbiAgKTogUzNDb21wb25lbnREYXRhIHtcbiAgICBjb25zdCBhc3NldCA9IG5ldyBzM2Fzc2V0cy5Bc3NldChzY29wZSwgaWQsIHsgLi4ub3B0aW9ucywgcGF0aCB9KTtcbiAgICByZXR1cm4gbmV3IFMzQ29tcG9uZW50RGF0YUZyb21Bc3NldChhc3NldCk7XG4gIH1cblxuICAvKipcbiAgICogUmVmZXJlbmNlcyBjb21wb25lbnQgZGF0YSBmcm9tIGEgcHJlLWV4aXN0aW5nIFMzIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0gYnVja2V0IFRoZSBTMyBidWNrZXQgd2hlcmUgdGhlIGNvbXBvbmVudCBkYXRhIGlzIHN0b3JlZFxuICAgKiBAcGFyYW0ga2V5IFRoZSBTMyBrZXkgb2YgdGhlIGNvbXBvbmVudCBkYXRhIGZpbGVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVMzKGJ1Y2tldDogczMuSUJ1Y2tldCwga2V5OiBzdHJpbmcpOiBTM0NvbXBvbmVudERhdGEge1xuICAgIHJldHVybiBuZXcgUzNDb21wb25lbnREYXRhRnJvbUJ1Y2tldEtleShidWNrZXQsIGtleSk7XG4gIH1cblxuICAvKipcbiAgICogVXNlcyBhbiBpbmxpbmUgSlNPTiBvYmplY3QgYXMgdGhlIGNvbXBvbmVudCBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIEFuIGlubGluZSBKU09OIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNvbXBvbmVudCBkYXRhXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Kc29uT2JqZWN0KGRhdGE6IHsgW2tleTogc3RyaW5nXTogYW55IH0pOiBDb21wb25lbnREYXRhIHtcbiAgICBjb25zdCBpbmxpbmVEYXRhID0geWFtbC5zdHJpbmdpZnkoZGF0YSwgeyBpbmRlbnQ6IDIgfSk7XG4gICAgcmV0dXJuIG5ldyBJbmxpbmVDb21wb25lbnREYXRhKGlubGluZURhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZXMgYW4gaW5saW5lIEpTT04gb2JqZWN0IGFzIHRoZSBjb21wb25lbnQgZGF0YSwgdXNpbmcgdGhlIENvbXBvbmVudERvY3VtZW50IGludGVyZmFjZVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBBbiBpbmxpbmUgSlNPTiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQgZGF0YVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29tcG9uZW50RG9jdW1lbnRKc29uT2JqZWN0KGRhdGE6IENvbXBvbmVudERvY3VtZW50KTogQ29tcG9uZW50RGF0YSB7XG4gICAgY29uc3QgeyBuYW1lLCBkZXNjcmlwdGlvbiwgc2NoZW1hVmVyc2lvbiwgY29uc3RhbnRzLCBwYXJhbWV0ZXJzLCBwaGFzZXMgfSA9IGRhdGE7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUpzb25PYmplY3Qoe1xuICAgICAgLi4uKG5hbWUgIT09IHVuZGVmaW5lZCAmJiB7IG5hbWUgfSksXG4gICAgICAuLi4oZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgc2NoZW1hVmVyc2lvbjogc2NoZW1hVmVyc2lvbixcbiAgICAgIC4uLihjb25zdGFudHMgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgIGNvbnN0YW50czogT2JqZWN0LmVudHJpZXMoY29uc3RhbnRzKS5tYXAoKFtjb25zdGFudE5hbWUsIHZhbHVlXSkgPT4gKHtcbiAgICAgICAgICBbY29uc3RhbnROYW1lXTogeyB0eXBlOiB2YWx1ZS50eXBlLCB2YWx1ZTogdmFsdWUudmFsdWUgfSxcbiAgICAgICAgfSkpLFxuICAgICAgfSksXG4gICAgICAuLi4ocGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgcGFyYW1ldGVyczogT2JqZWN0LmVudHJpZXMocGFyYW1ldGVycykubWFwKChbcGFyYW1ldGVyTmFtZSwgdmFsdWVdKSA9PiAoeyBbcGFyYW1ldGVyTmFtZV06IHZhbHVlIH0pKSxcbiAgICAgIH0pLFxuICAgICAgcGhhc2VzOiBwaGFzZXMubWFwKChwaGFzZSkgPT4gKHtcbiAgICAgICAgbmFtZTogcGhhc2UubmFtZSxcbiAgICAgICAgc3RlcHM6IHBoYXNlLnN0ZXBzLm1hcCgoc3RlcCkgPT4gKHtcbiAgICAgICAgICBuYW1lOiBzdGVwLm5hbWUsXG4gICAgICAgICAgYWN0aW9uOiBzdGVwLmFjdGlvbixcbiAgICAgICAgICAuLi4oc3RlcC5vbkZhaWx1cmUgIT09IHVuZGVmaW5lZCAmJiB7IG9uRmFpbHVyZTogc3RlcC5vbkZhaWx1cmUgfSksXG4gICAgICAgICAgLi4uKHN0ZXAudGltZW91dCAhPT0gdW5kZWZpbmVkICYmIHsgdGltZW91dFNlY29uZHM6IHN0ZXAudGltZW91dC50b1NlY29uZHMoKSB9KSxcbiAgICAgICAgICAuLi4oc3RlcC5pZiAhPT0gdW5kZWZpbmVkICYmIHsgaWY6IHN0ZXAuaWYuaWZDb25kaXRpb24gfSksXG4gICAgICAgICAgLi4uKHN0ZXAubG9vcCAhPT0gdW5kZWZpbmVkICYmIHsgbG9vcDogc3RlcC5sb29wIH0pLFxuICAgICAgICAgIGlucHV0czogc3RlcC5pbnB1dHMuaW5wdXRzLFxuICAgICAgICB9KSksXG4gICAgICB9KSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXNlcyBhbiBpbmxpbmUgSlNPTi9ZQU1MIHN0cmluZyBhcyB0aGUgY29tcG9uZW50IGRhdGFcbiAgICpcbiAgICogQHBhcmFtIGRhdGEgQW4gaW5saW5lIEpTT04vWUFNTCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjb21wb25lbnQgZGF0YVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tSW5saW5lKGRhdGE6IHN0cmluZyk6IENvbXBvbmVudERhdGEge1xuICAgIHJldHVybiBuZXcgSW5saW5lQ29tcG9uZW50RGF0YShkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgY29tcG9uZW50IGRhdGEgdmFsdWUsIGZvciB1c2UgaW4gQ2xvdWRGb3JtYXRpb24uXG4gICAqIC0gRm9yIGlubGluZSBjb21wb25lbnRzLCBkYXRhIGlzIHRoZSBjb21wb25lbnQgdGV4dFxuICAgKiAtIEZvciBTMy1iYWNrZWQgY29tcG9uZW50cywgdXJpIGlzIHRoZSBTMyBVUkxcbiAgICovXG4gIGFic3RyYWN0IHJlbmRlcigpOiBDb21wb25lbnREYXRhQ29uZmlnO1xufVxuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgUzMtYmFzZWQgY29tcG9uZW50IGRhdGEgcmVmZXJlbmNlcywgY29udGFpbmluZyBhZGRpdGlvbmFsIHBlcm1pc3Npb24gZ3JhbnQgbWV0aG9kcyBvbiB0aGUgUzMgb2JqZWN0XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTM0NvbXBvbmVudERhdGEgZXh0ZW5kcyBDb21wb25lbnREYXRhIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGJ1Y2tldDogczMuSUJ1Y2tldDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihidWNrZXQ6IHMzLklCdWNrZXQsIGtleTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuYnVja2V0ID0gYnVja2V0O1xuICAgIHRoaXMua2V5ID0ga2V5O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBjb21wb25lbnQgZGF0YSB0ZXh0LCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyKCk6IENvbXBvbmVudERhdGFDb25maWcge1xuICAgIHJldHVybiB7IHVyaTogdGhpcy5idWNrZXQuczNVcmxGb3JPYmplY3QodGhpcy5rZXkpIH07XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcHV0IHBlcm1pc3Npb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgY29tcG9uZW50IGRhdGEgaW4gUzNcbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgcHVibGljIGdyYW50UHV0KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuZ3JhbnRQdXQoZ3JhbnRlZSwgdGhpcy5rZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBjb21wb25lbnQgZGF0YSBpbiBTM1xuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuZ3JhbnRSZWFkKGdyYW50ZWUsIHRoaXMua2V5KTtcbiAgfVxufVxuXG5jbGFzcyBJbmxpbmVDb21wb25lbnREYXRhIGV4dGVuZHMgQ29tcG9uZW50RGF0YSB7XG4gIHByb3RlY3RlZCByZWFkb25seSBkYXRhOiBzdHJpbmc7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKGRhdGE6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBjb21wb25lbnQgZGF0YSB0ZXh0LCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyKCk6IENvbXBvbmVudERhdGFDb25maWcge1xuICAgIHJldHVybiB7IGRhdGE6IHRoaXMuZGF0YSB9O1xuICB9XG59XG5cbmNsYXNzIFMzQ29tcG9uZW50RGF0YUZyb21CdWNrZXRLZXkgZXh0ZW5kcyBTM0NvbXBvbmVudERhdGEge1xuICBwdWJsaWMgY29uc3RydWN0b3IoYnVja2V0OiBzMy5JQnVja2V0LCBrZXk6IHN0cmluZykge1xuICAgIHN1cGVyKGJ1Y2tldCwga2V5KTtcbiAgfVxufVxuXG5jbGFzcyBTM0NvbXBvbmVudERhdGFGcm9tQXNzZXQgZXh0ZW5kcyBTM0NvbXBvbmVudERhdGEge1xuICBwdWJsaWMgY29uc3RydWN0b3IoYXNzZXQ6IHMzYXNzZXRzLkFzc2V0KSB7XG4gICAgc3VwZXIoYXNzZXQuYnVja2V0LCBhc3NldC5zM09iamVjdEtleSk7XG4gIH1cbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIHdvcmtpbmcgd2l0aCBBV1MgTWFya2V0cGxhY2UgY29tcG9uZW50c1xuICovXG5leHBvcnQgY2xhc3MgQXdzTWFya2V0cGxhY2VDb21wb25lbnQge1xuICAvKipcbiAgICogSW1wb3J0cyBhbiBBV1MgTWFya2V0cGxhY2UgY29tcG9uZW50IGZyb20gaXRzIGF0dHJpYnV0ZXNcbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIElkZW50aWZpZXIgb2YgdGhlIGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIEFXUy1tYW5hZ2VkIGNvbXBvbmVudCBhdHRyaWJ1dGVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Bd3NNYXJrZXRwbGFjZUNvbXBvbmVudEF0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGF0dHJzOiBBd3NNYXJrZXRwbGFjZUNvbXBvbmVudEF0dHJpYnV0ZXMsXG4gICk6IElDb21wb25lbnQge1xuICAgIHJldHVybiBDb21wb25lbnQuZnJvbUNvbXBvbmVudEFybihcbiAgICAgIHNjb3BlLFxuICAgICAgaWQsXG4gICAgICBjZGsuU3RhY2sub2Yoc2NvcGUpLmZvcm1hdEFybih7XG4gICAgICAgIHNlcnZpY2U6ICdpbWFnZWJ1aWxkZXInLFxuICAgICAgICBhY2NvdW50OiAnYXdzLW1hcmtldHBsYWNlJyxcbiAgICAgICAgcmVzb3VyY2U6ICdjb21wb25lbnQnLFxuICAgICAgICByZXNvdXJjZU5hbWU6IGAke2F0dHJzLmNvbXBvbmVudE5hbWV9LSR7YXR0cnMubWFya2V0cGxhY2VQcm9kdWN0SWR9LyR7YXR0cnMuY29tcG9uZW50VmVyc2lvbiA/PyBMQVRFU1RfVkVSU0lPTn1gLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEEgbmV3IG9yIGltcG9ydGVkIENvbXBvbmVudFxuICovXG5hYnN0cmFjdCBjbGFzcyBDb21wb25lbnRCYXNlIGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSUNvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb21wb25lbnRcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGNvbXBvbmVudEFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgY29tcG9uZW50TmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudCBjdXN0b20gYWN0aW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBsaXN0IG9mIGFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnMsXG4gICAgICByZXNvdXJjZUFybnM6IFt0aGlzLmNvbXBvbmVudEFybl0sXG4gICAgICBzY29wZTogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIHBlcm1pc3Npb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIHB1YmxpYyBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsICdpbWFnZWJ1aWxkZXI6R2V0Q29tcG9uZW50Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIEVDMiBJbWFnZSBCdWlsZGVyIENvbXBvbmVudC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9tYW5hZ2UtY29tcG9uZW50cy5odG1sXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtaW1hZ2VidWlsZGVyLWFscGhhLkNvbXBvbmVudCc7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBjb21wb25lbnQgZ2l2ZW4gaXRzIEFSTi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvbXBvbmVudEFybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjb21wb25lbnRBcm46IHN0cmluZyk6IElDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLmZyb21Db21wb25lbnRBdHRyaWJ1dGVzKHNjb3BlLCBpZCwgeyBjb21wb25lbnRBcm4gfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGNvbXBvbmVudCBnaXZlbiBpdHMgbmFtZS4gVGhlIHByb3ZpZGVkIG5hbWUgbXVzdCBiZSBub3JtYWxpemVkIGJ5IGNvbnZlcnRpbmcgYWxsIGFscGhhYmV0aWNhbFxuICAgKiBjaGFyYWN0ZXJzIHRvIGxvd2VyY2FzZSwgYW5kIHJlcGxhY2luZyBhbGwgc3BhY2VzIGFuZCB1bmRlcnNjb3JlcyB3aXRoIGh5cGhlbnMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Db21wb25lbnROYW1lKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbXBvbmVudE5hbWU6IHN0cmluZyk6IElDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLmZyb21Db21wb25lbnRBdHRyaWJ1dGVzKHNjb3BlLCBpZCwgeyBjb21wb25lbnROYW1lIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBjb21wb25lbnQgYnkgcHJvdmlkaW5nIGl0cyBhdHRyaWJ1dGVzLiBJZiB0aGUgY29tcG9uZW50IG5hbWUgaXMgcHJvdmlkZWQgYXMgYW4gYXR0cmlidXRlLCBpdFxuICAgKiBtdXN0IGJlIG5vcm1hbGl6ZWQgYnkgY29udmVydGluZyBhbGwgYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlLCBhbmQgcmVwbGFjaW5nIGFsbCBzcGFjZXMgYW5kIHVuZGVyc2NvcmVzXG4gICAqIHdpdGggaHlwaGVucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvbXBvbmVudEF0dHJpYnV0ZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IENvbXBvbmVudEF0dHJpYnV0ZXMpOiBJQ29tcG9uZW50IHtcbiAgICBpZiAoYXR0cnMuY29tcG9uZW50QXJuICYmIChhdHRycy5jb21wb25lbnROYW1lIHx8IGF0dHJzLmNvbXBvbmVudFZlcnNpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgJ2EgY29tcG9uZW50TmFtZSBvciBjb21wb25lbnRWZXJzaW9uIGNhbm5vdCBiZSBwcm92aWRlZCB3aGVuIGEgY29tcG9uZW50QXJuIGlzIHByb3ZpZGVkJyxcbiAgICAgICAgc2NvcGUsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghYXR0cnMuY29tcG9uZW50QXJuICYmICFhdHRycy5jb21wb25lbnROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcignZWl0aGVyIGNvbXBvbmVudEFybiBvciBjb21wb25lbnROYW1lIGlzIHJlcXVpcmVkJywgc2NvcGUpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBvbmVudEFybiA9XG4gICAgICBhdHRycy5jb21wb25lbnRBcm4gPz9cbiAgICAgIGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICAgIHJlc291cmNlOiAnY29tcG9uZW50JyxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBgJHthdHRycy5jb21wb25lbnROYW1lfS8ke2F0dHJzLmNvbXBvbmVudFZlcnNpb24gPz8gTEFURVNUX1ZFUlNJT059YCxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgW2NvbXBvbmVudE5hbWUsIGNvbXBvbmVudFZlcnNpb25dID0gKCgpID0+IHtcbiAgICAgIGlmIChhdHRycy5jb21wb25lbnROYW1lKSB7XG4gICAgICAgIHJldHVybiBbYXR0cnMuY29tcG9uZW50TmFtZSwgYXR0cnMuY29tcG9uZW50VmVyc2lvbiA/PyBMQVRFU1RfVkVSU0lPTl07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWVWZXJzaW9uID0gY2RrLlN0YWNrLm9mKHNjb3BlKS5zcGxpdEFybihcbiAgICAgICAgY29tcG9uZW50QXJuLFxuICAgICAgICBjZGsuQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgICApLnJlc291cmNlTmFtZSE7XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWVWZXJzaW9uU3BsaXQgPSBjZGsuRm4uc3BsaXQoJy8nLCBjb21wb25lbnROYW1lVmVyc2lvbik7XG4gICAgICByZXR1cm4gW2Nkay5Gbi5zZWxlY3QoMCwgY29tcG9uZW50TmFtZVZlcnNpb25TcGxpdCksIGNkay5Gbi5zZWxlY3QoMSwgY29tcG9uZW50TmFtZVZlcnNpb25TcGxpdCldO1xuICAgIH0pKCk7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjb21wb25lbnRBcm4gPSBjb21wb25lbnRBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbiA9IGNvbXBvbmVudFZlcnNpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGEgQ29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpc0NvbXBvbmVudCh4OiBhbnkpOiB4IGlzIENvbXBvbmVudCB7XG4gICAgcmV0dXJuIHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIENPTVBPTkVOVF9TWU1CT0wgaW4geDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb21wb25lbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb21wb25lbnRBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbXBvbmVudE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbXBvbmVudFZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY29tcG9uZW50IGlzIGVuY3J5cHRlZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVuY3J5cHRlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50VHlwZTogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcblxuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6XG4gICAgICAgIHByb3BzLmNvbXBvbmVudE5hbWUgPz9cbiAgICAgICAgY2RrLkxhenkuc3RyaW5nKHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PlxuICAgICAgICAgICAgY2RrLk5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7XG4gICAgICAgICAgICAgIG1heExlbmd0aDogMTI4LFxuICAgICAgICAgICAgICBzZXBhcmF0b3I6ICctJyxcbiAgICAgICAgICAgICAgYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzOiAnLScsXG4gICAgICAgICAgICB9KS50b0xvd2VyQ2FzZSgpLCAvLyBFbmZvcmNlIGxvd2VyY2FzZSBmb3IgdGhlIGF1dG8tZ2VuZXJhdGVkIGZhbGxiYWNrXG4gICAgICAgIH0pLFxuICAgIH0pO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIENPTVBPTkVOVF9TWU1CT0wsIHsgdmFsdWU6IHRydWUgfSk7XG5cbiAgICB0aGlzLnZhbGlkYXRlQ29tcG9uZW50TmFtZSgpO1xuXG4gICAgcHJvcHMuc3VwcG9ydGVkT3NWZXJzaW9ucz8uZm9yRWFjaCgob3NWZXJzaW9uKSA9PiB7XG4gICAgICBpZiAob3NWZXJzaW9uLnBsYXRmb3JtICE9PSBwcm9wcy5wbGF0Zm9ybSkge1xuICAgICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBgb3MgdmVyc2lvbiAke29zVmVyc2lvbi5vc1ZlcnNpb259IGlzIG5vdCBjb21wYXRpYmxlIHdpdGggcGxhdGZvcm0gJHtwcm9wcy5wbGF0Zm9ybX1gLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBjb21wb25lbnRWZXJzaW9uID0gcHJvcHMuY29tcG9uZW50VmVyc2lvbiA/PyAnMS4wLjAnO1xuICAgIGNvbnN0IHN1cHBvcnRlZE9zVmVyc2lvbnMgPSBwcm9wcy5zdXBwb3J0ZWRPc1ZlcnNpb25zPy5maWx0ZXIoKG9zVmVyc2lvbikgPT4gb3NWZXJzaW9uLm9zVmVyc2lvbiAhPT0gdW5kZWZpbmVkKTtcblxuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBDZm5Db21wb25lbnQodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICB2ZXJzaW9uOiBjb21wb25lbnRWZXJzaW9uLFxuICAgICAgY2hhbmdlRGVzY3JpcHRpb246IHByb3BzLmNoYW5nZURlc2NyaXB0aW9uLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgcGxhdGZvcm06IHByb3BzLnBsYXRmb3JtLFxuICAgICAga21zS2V5SWQ6IHByb3BzLmttc0tleT8ua2V5QXJuLFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICAgIC4uLihzdXBwb3J0ZWRPc1ZlcnNpb25zPy5sZW5ndGggJiYge1xuICAgICAgICBzdXBwb3J0ZWRPc1ZlcnNpb25zOiBzdXBwb3J0ZWRPc1ZlcnNpb25zLm1hcCgob3NWZXJzaW9uKSA9PiBvc1ZlcnNpb24ub3NWZXJzaW9uISksXG4gICAgICB9KSxcbiAgICAgIC4uLnByb3BzLmRhdGEucmVuZGVyKCksXG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbXBvbmVudE5hbWUgPSB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZShjb21wb25lbnQuYXR0ck5hbWUpO1xuICAgIHRoaXMuY29tcG9uZW50QXJuID0gdGhpcy5nZXRSZXNvdXJjZUFybkF0dHJpYnV0ZShjb21wb25lbnQuYXR0ckFybiwge1xuICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICByZXNvdXJjZTogJ2NvbXBvbmVudCcsXG4gICAgICByZXNvdXJjZU5hbWU6IGAke3RoaXMucGh5c2ljYWxOYW1lfS8ke2NvbXBvbmVudFZlcnNpb259YCxcbiAgICB9KTtcbiAgICB0aGlzLmNvbXBvbmVudFZlcnNpb24gPSBjb21wb25lbnRWZXJzaW9uO1xuICAgIHRoaXMuZW5jcnlwdGVkID0gdHJ1ZTsgLy8gQ29tcG9uZW50cyBhcmUgYWx3YXlzIGVuY3J5cHRlZFxuICAgIHRoaXMuY29tcG9uZW50VHlwZSA9IGNvbXBvbmVudC5hdHRyVHlwZTtcbiAgICB0aGlzLmttc0tleSA9IHByb3BzLmttc0tleTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVDb21wb25lbnROYW1lKCkge1xuICAgIGlmIChjZGsuVG9rZW4uaXNVbnJlc29sdmVkKHRoaXMucGh5c2ljYWxOYW1lKSkge1xuICAgICAgcmV0dXJuOyAvLyBDYW5ub3QgdmFsaWRhdGUgdW5yZXNvbHZlZCB0b2tlbnMsIGdpdmVuIHRoZWlyIGFjdHVhbCB2YWx1ZSBpcyByZW5kZXJlZCBhdCBkZXBsb3ltZW50IHRpbWVcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUubGVuZ3RoID4gMTI4KSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYHRoZSBjb21wb25lbnROYW1lIGNhbm5vdCBiZSBsb25nZXIgdGhhbiAxMjggY2hhcmFjdGVycywgZ290OiAnJHt0aGlzLnBoeXNpY2FsTmFtZX0nYCxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljYWxOYW1lLmluY2x1ZGVzKCcgJykpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKGB0aGUgY29tcG9uZW50TmFtZSBjYW5ub3QgY29udGFpbiBzcGFjZXMsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5pbmNsdWRlcygnXycpKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihgdGhlIGNvbXBvbmVudE5hbWUgY2Fubm90IGNvbnRhaW4gdW5kZXJzY29yZXMsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZSAhPT0gdGhpcy5waHlzaWNhbE5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoYHRoZSBjb21wb25lbnROYW1lIG11c3QgYmUgbG93ZXJjYXNlLCBnb3Q6ICcke3RoaXMucGh5c2ljYWxOYW1lfSdgLCB0aGlzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
712
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1DQUFtQztBQUNuQywyQ0FBMkM7QUFDM0MsbUVBQTREO0FBRzVELHNEQUFzRDtBQUN0RCw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBRTFFLDZCQUE2QjtBQUc3QixNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsMkNBQTJDLENBQUMsQ0FBQztBQUVqRixNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUM7QUErVC9COztHQUVHO0FBQ0gsTUFBYSxzQkFBc0I7O0lBQ2pDOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQWE7UUFDcEMsT0FBTyxJQUFJLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNwRDtJQUVEOztPQUVHO0lBQ2EsSUFBSSxDQUFTO0lBRTdCOztPQUVHO0lBQ2EsS0FBSyxDQUFNO0lBRTNCLFlBQXNCLElBQVksRUFBRSxLQUFVO1FBQzVDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0tBQ3BCOztBQXZCSCx3REF3QkM7QUEwQkQ7O0dBRUc7QUFDSCxJQUFZLGVBd0pYO0FBeEpELFdBQVksZUFBZTtJQUN6Qjs7T0FFRztJQUNILDZDQUEwQixDQUFBO0lBRTFCOzs7T0FHRztJQUNILG9DQUFpQixDQUFBO0lBRWpCOztPQUVHO0lBQ0gseUNBQXNCLENBQUE7SUFFdEI7O09BRUc7SUFDSCw2Q0FBMEIsQ0FBQTtJQUUxQjs7T0FFRztJQUNILDZDQUEwQixDQUFBO0lBRTFCOztPQUVHO0lBQ0gsaURBQThCLENBQUE7SUFFOUI7O09BRUc7SUFDSCxtREFBZ0MsQ0FBQTtJQUVoQzs7T0FFRztJQUNILDZDQUEwQixD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QUFpRSxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQ3JGLElBQUksQ0FDTCxDQUFDO1lBQ0osQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsa0RBQWtELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5RyxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxNQUFNLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyx1REFBdUQsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25ILENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2dCQUMxRCxNQUFNLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyw4Q0FBOEMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzFHLENBQUM7U0FDRjs7WUF4TFUsdURBQVM7Ozs7O0FBQVQsOEJBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgQ2ZuQ29tcG9uZW50IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWltYWdlYnVpbGRlcic7XG5pbXBvcnQgKiBhcyBrbXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgKiBhcyBzMyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0ICogYXMgczNhc3NldHMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWFzc2V0cyc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIHlhbWwgZnJvbSAneWFtbCc7XG5pbXBvcnQgeyBPU1ZlcnNpb24sIFBsYXRmb3JtIH0gZnJvbSAnLi9vcy12ZXJzaW9uJztcblxuY29uc3QgQ09NUE9ORU5UX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ0Bhd3MtY2RrL2F3cy1pbWFnZWJ1aWxkZXItYWxwaGEuQ29tcG9uZW50Jyk7XG5cbmNvbnN0IExBVEVTVF9WRVJTSU9OID0gJ3gueC54JztcblxuLyoqXG4gKiBBbiBFQzIgSW1hZ2UgQnVpbGRlciBDb21wb25lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbXBvbmVudCBleHRlbmRzIGNkay5JUmVzb3VyY2Uge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudEFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnRWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdyYW50IGN1c3RvbSBhY3Rpb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICogQHBhcmFtIGFjdGlvbnMgVGhlIGxpc3Qgb2YgYWN0aW9uc1xuICAgKi9cbiAgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIHBlcm1pc3Npb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIENvbXBvbmVudCByZXNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudFByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgZG9jdW1lbnQgY29udGVudCB0aGF0IGRlZmluZXMgdGhlIGJ1aWxkLCB2YWxpZGF0aW9uLCBvciB0ZXN0IHN0ZXBzIHRvIGJlIGV4ZWN1dGVkIGR1cmluZyB0aGUgaW1hZ2VcbiAgICogYnVpbGRpbmcgcHJvY2Vzcy5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGE6IENvbXBvbmVudERhdGE7XG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpbmcgc3lzdGVtIHBsYXRmb3JtIG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICByZWFkb25seSBwbGF0Zm9ybTogUGxhdGZvcm07XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb21wb25lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYSBuYW1lIGlzIGdlbmVyYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgMS4wLjBcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudFZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgY29tcG9uZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNoYW5nZSBkZXNjcmlwdGlvbiBvZiB0aGUgY29tcG9uZW50LiBEZXNjcmliZXMgd2hhdCBjaGFuZ2UgaGFzIGJlZW4gbWFkZSBpbiB0aGlzIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudCwgb3JcbiAgICogd2hhdCBtYWtlcyB0aGlzIHZlcnNpb24gZGlmZmVyZW50IGZyb20gb3RoZXIgdmVyc2lvbnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGNoYW5nZURlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgS01TIGtleSB1c2VkIHRvIGVuY3J5cHQgdGhpcyBjb21wb25lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYW4gSW1hZ2UgQnVpbGRlciBvd25lZCBrZXkgd2lsbCBiZSB1c2VkIHRvIGVuY3J5cHQgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIHJlYWRvbmx5IGttc0tleT86IGttcy5JS2V5O1xuXG4gIC8qKlxuICAgKiBUaGUgb3BlcmF0aW5nIHN5c3RlbSB2ZXJzaW9ucyBzdXBwb3J0ZWQgYnkgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgc3VwcG9ydGVkT3NWZXJzaW9ucz86IE9TVmVyc2lvbltdO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFncyB0byBhcHBseSB0byB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGFuIEVDMiBJbWFnZSBCdWlsZGVyIGNvbXBvbmVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudEF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgY29tcG9uZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIEFSTiBpcyBhdXRvbWF0aWNhbGx5IGNvbnN0cnVjdGVkIGlmIGEgY29tcG9uZW50TmFtZSBpcyBwcm92aWRlZCwgb3RoZXJ3aXNlIGEgY29tcG9uZW50QXJuIGlzXG4gICAqICAgICAgICAgICAgcmVxdWlyZWRcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudEFybj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBuYW1lIGlzIGF1dG9tYXRpY2FsbHkgY29uc3RydWN0ZWQgaWYgYSBjb21wb25lbnRBcm4gaXMgcHJvdmlkZWQsIG90aGVyd2lzZSBhIGNvbXBvbmVudE5hbWUgaXNcbiAgICogICAgICAgICAgICByZXF1aXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50LCB4LngueFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhbiBFQzIgSW1hZ2UgQnVpbGRlciBBV1MgTWFya2V0cGxhY2UgY29tcG9uZW50XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXdzTWFya2V0cGxhY2VDb21wb25lbnRBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBBV1MgTWFya2V0cGxhY2UgY29tcG9uZW50LiBUaGlzIG5hbWUgc2hvdWxkIGV4Y2x1ZGUgdGhlIG1hcmtldHBsYWNlIHByb2R1Y3QgSUQgZnJvbSBpdFxuICAgKi9cbiAgcmVhZG9ubHkgY29tcG9uZW50TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbWFya2V0cGxhY2UgcHJvZHVjdCBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgcmVhZG9ubHkgbWFya2V0cGxhY2VQcm9kdWN0SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIEFXUyBNYXJrZXRwbGFjZSBjb21wb25lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudCwgeC54LnhcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudFZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBvZiBhbiBFQzIgSW1hZ2UgQnVpbGRlciBDb21wb25lbnQgRG9jdW1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREb2N1bWVudCB7XG4gIC8qKlxuICAgKiBUaGUgc2NoZW1hIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZW1hVmVyc2lvbjogQ29tcG9uZW50U2NoZW1hVmVyc2lvbjtcblxuICAvKipcbiAgICogVGhlIHBoYXNlcyB3aGljaCBkZWZpbmUgdGhlIGdyb3VwaW5nIG9mIHN0ZXBzIHRvIHJ1biBpbiB0aGUgYnVpbGQgYW5kIHRlc3Qgd29ya2Zsb3dzIG9mIHRoZSBpbWFnZSBidWlsZC5cbiAgICovXG4gIHJlYWRvbmx5IHBoYXNlczogQ29tcG9uZW50RG9jdW1lbnRQaGFzZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZG9jdW1lbnRcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBkb2N1bWVudFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbnN0YW50cyB0byBkZWZpbmUgaW4gdGhlIGRvY3VtZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGNvbnN0YW50cz86IHsgW2NvbnN0YW50TmFtZTogc3RyaW5nXTogQ29tcG9uZW50Q29uc3RhbnRWYWx1ZSB9O1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVycyB0byBkZWZpbmUgaW4gdGhlIGRvY3VtZW50XG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcnM/OiB7IFtwYXJhbWV0ZXJOYW1lOiBzdHJpbmddOiBDb21wb25lbnREb2N1bWVudFBhcmFtZXRlckRlZmluaXRpb24gfTtcbn1cblxuLyoqXG4gKiBUaGUgcGhhc2UgdG8gcnVuIGluIGEgc3BlY2lmaWMgd29ya2Zsb3cgaW4gYW4gaW1hZ2UgYnVpbGQsIHdoaWNoIGRlZmluZSB0aGUgc3RlcHMgdG8gZXhlY3V0ZSB0byBjdXN0b21pemUgb3IgdGVzdFxuICogdGhlIGluc3RhbmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERvY3VtZW50UGhhc2Uge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHBoYXNlXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBDb21wb25lbnRQaGFzZU5hbWU7XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHN0ZXBzIHRvIGV4ZWN1dGUgdG8gbW9kaWZ5IG9yIHRlc3QgdGhlIGJ1aWxkL3Rlc3QgaW5zdGFuY2VcbiAgICovXG4gIHJlYWRvbmx5IHN0ZXBzOiBDb21wb25lbnREb2N1bWVudFN0ZXBbXTtcbn1cblxuLyoqXG4gKiBUaGUgc3RlcCB0byBydW4gaW4gYSBzcGVjaWZpYyBwaGFzZSBvZiB0aGUgaW1hZ2UgYnVpbGQsIHdoaWNoIGRlZmluZXMgdGhlIHN0ZXAgdG8gZXhlY3V0ZSB0byBjdXN0b21pemUgb3IgdGVzdCB0aGVcbiAqIGluc3RhbmNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudERvY3VtZW50U3RlcCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc3RlcFxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYWN0aW9uIHRvIHBlcmZvcm0gaW4gdGhlIHN0ZXBcbiAgICovXG4gIHJlYWRvbmx5IGFjdGlvbjogQ29tcG9uZW50QWN0aW9uO1xuXG4gIC8qKlxuICAgKiBDb250YWlucyBwYXJhbWV0ZXJzIHJlcXVpcmVkIGJ5IHRoZSBhY3Rpb24gdG8gcnVuIHRoZSBzdGVwXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL3RvZS1hY3Rpb24tbW9kdWxlcy5odG1sXG4gICAqL1xuICByZWFkb25seSBpbnB1dHM6IENvbXBvbmVudFN0ZXBJbnB1dHM7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25kaXRpb24gdG8gYXBwbHkgdG8gdGhlIHN0ZXAuIElmIHRoZSBjb25kaXRpb24gaXMgZmFsc2UsIHRoZW4gdGhlIHN0ZXAgaXMgc2tpcHBlZFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGNvbmRpdGlvbiBpcyBhcHBsaWVkIHRvIHRoZSBzdGVwIGFuZCBpdCBnZXRzIGV4ZWN1dGVkXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL3RvZS1jb25kaXRpb25hbC1jb25zdHJ1Y3RzLmh0bWxcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvdG9lLWNvbXBhcmlzb24tb3BlcmF0b3JzLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGlmPzogQ29tcG9uZW50U3RlcElmQ29uZGl0aW9uO1xuXG4gIC8qKlxuICAgKiBBIGxvb3BpbmcgY29uc3RydWN0IGRlZmluaW5nIGEgcmVwZWF0ZWQgc2VxdWVuY2Ugb2YgaW5zdHJ1Y3Rpb25zXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGxvb3A/OiBDb21wb25lbnREb2N1bWVudExvb3A7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lb3V0IG9mIHRoZSBzdGVwXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gMTIwIG1pbnV0ZXNcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBjZGsuRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGF0IHRoZSBzdGVwIHNob3VsZCBkbyBpbiBjYXNlIG9mIGZhaWx1cmVcbiAgICpcbiAgICogQGRlZmF1bHQgQ29tcG9uZW50T25GYWlsdXJlLkFCT1JUXG4gICAqL1xuICByZWFkb25seSBvbkZhaWx1cmU/OiBDb21wb25lbnRPbkZhaWx1cmU7XG59XG5cbi8qKlxuICogVGhlIGxvb3BpbmcgY29uc3RydWN0IG9mIGEgY29tcG9uZW50IGRlZmluZXMgYSByZXBlYXRlZCBzZXF1ZW5jZSBvZiBpbnN0cnVjdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnREb2N1bWVudExvb3Age1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGxvb3AsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHJlZmVyZW5jZVxuICAgKlxuICAgKiBAZGVmYXVsdCBsb29wXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9yIGxvb3AgaXRlcmF0ZXMgb24gYSByYW5nZSBvZiBpbnRlZ2VycyBzcGVjaWZpZWQgd2l0aGluIGEgYm91bmRhcnkgb3V0bGluZWQgYnkgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlXG4gICAqIHZhcmlhYmxlc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmUgaWYgYGZvckVhY2hgIGlzIHByb3ZpZGVkLiBvdGhlcndpc2UsIGBmb3JgIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZm9yPzogQ29tcG9uZW50RG9jdW1lbnRGb3JMb29wO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9yRWFjaCBsb29wIGl0ZXJhdGVzIG9uIGFuIGV4cGxpY2l0IGxpc3Qgb2YgdmFsdWVzLCB3aGljaCBjYW4gYmUgc3RyaW5ncyBhbmQgY2hhaW5lZCBleHByZXNzaW9uc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmUgaWYgYGZvcmAgaXMgcHJvdmlkZWQuIG90aGVyd2lzZSwgYGZvckVhY2hgIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZm9yRWFjaD86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBmb3IgbG9vcCBpdGVyYXRlcyBvbiBhIHJhbmdlIG9mIGludGVnZXJzIHNwZWNpZmllZCB3aXRoaW4gYSBib3VuZGFyeSBvdXRsaW5lZCBieSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGVcbiAqIHZhcmlhYmxlcy4gVGhlIGl0ZXJhdGluZyB2YWx1ZXMgYXJlIGluIHRoZSBzZXQgW3N0YXJ0LCBlbmRdIGFuZCBpbmNsdWRlcyBib3VuZGFyeSB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RG9jdW1lbnRGb3JMb29wIHtcbiAgLyoqXG4gICAqIFN0YXJ0aW5nIHZhbHVlIG9mIGl0ZXJhdGlvbi4gRG9lcyBub3QgYWNjZXB0IGNoYWluaW5nIGV4cHJlc3Npb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIEVuZGluZyB2YWx1ZSBvZiBpdGVyYXRpb24uIERvZXMgbm90IGFjY2VwdCBjaGFpbmluZyBleHByZXNzaW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IGVuZDogbnVtYmVyO1xuICAvKipcbiAgICogRGlmZmVyZW5jZSBieSB3aGljaCBhbiBpdGVyYXRpbmcgdmFsdWUgaXMgdXBkYXRlZCB0aHJvdWdoIGFkZGl0aW9uLiBJdCBtdXN0IGJlIGEgbmVnYXRpdmUgb3IgcG9zaXRpdmUgbm9uLXplcm9cbiAgICogdmFsdWUuIERvZXMgbm90IGFjY2VwdCBjaGFpbmluZyBleHByZXNzaW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IHVwZGF0ZUJ5OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHZhbHVlIG9mIGEgY29uc3RhbnQgaW4gYSBjb21wb25lbnQgZG9jdW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIENvbXBvbmVudENvbnN0YW50VmFsdWUge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIHN0cmluZyB0eXBlIGNvbnN0YW50IGluIGEgY29tcG9uZW50IGRvY3VtZW50XG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGNvbnN0YW50XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21TdHJpbmcodmFsdWU6IHN0cmluZyk6IENvbXBvbmVudENvbnN0YW50VmFsdWUge1xuICAgIHJldHVybiBuZXcgQ29tcG9uZW50Q29uc3RhbnRWYWx1ZSgnc3RyaW5nJywgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIHR5cGUgb2YgdGhlIGNvbnN0YW50XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGNvbnN0YW50XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IGFueTtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IodHlwZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgcGFyYW1ldGVyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RG9jdW1lbnRQYXJhbWV0ZXJEZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXJcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU6IENvbXBvbmVudFBhcmFtZXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXJcbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lLCBpbmRpY2F0aW5nIHRoZSBwYXJhbWV0ZXIgaXMgcmVxdWlyZWRcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHQ/OiBhbnk7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgcGFyYW1ldGVyXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBhY3Rpb24gZm9yIGEgc3RlcCB3aXRoaW4gdGhlIGNvbXBvbmVudCBkb2N1bWVudFxuICovXG5leHBvcnQgZW51bSBDb21wb25lbnRBY3Rpb24ge1xuICAvKipcbiAgICogVGhlIEFwcGVuZEZpbGUgYWN0aW9uIGFkZHMgdGhlIHByb3ZpZGVkIGNvbnRlbnQgdG8gdGhlIHByZS1leGlzdGluZyBjb250ZW50IG9mIGEgZmlsZVxuICAgKi9cbiAgQVBQRU5EX0ZJTEUgPSAnQXBwZW5kRmlsZScsXG5cbiAgLyoqXG4gICAqIFRoZSBBc3NlcnQgYWN0aW9uIHBlcmZvcm1zIHZhbHVlIHdpdGggY29tcGFyaXNvbi9sb2dpYyBvcGVyYXRvcnMsIGFuZCBzdWNjZWVkcy9mYWlscyB0aGUgc3RlcCBiYXNlZCBvbiB0aGUgb3V0Y29tZVxuICAgKiBvZiB0aGUgYXNzZXJ0aW9uXG4gICAqL1xuICBBU1NFUlQgPSAnQXNzZXJ0JyxcblxuICAvKipcbiAgICogVGhlIENvcHlGaWxlIGFjdGlvbiBjb3BpZXMgZmlsZXMgZnJvbSBhIHNvdXJjZSBmaWxlIHRvIGEgZGVzdGluYXRpb25cbiAgICovXG4gIENPUFlfRklMRSA9ICdDb3B5RmlsZScsXG5cbiAgLyoqXG4gICAqIFRoZSBDb3B5Rm9sZGVyIGFjdGlvbiBjb3BpZXMgZm9sZGVycyBmcm9tIGEgc291cmNlIHRvIGEgZGVzdGluYXRpb25cbiAgICovXG4gIENPUFlfRk9MREVSID0gJ0NvcHlGb2xkZXInLFxuXG4gIC8qKlxuICAgKiBUaGUgQ3JlYXRlRmlsZSBhY3Rpb24gY3JlYXRlcyBhIGZpbGUgaW4gdGhlIHByb3ZpZGVkIGxvY2F0aW9uXG4gICAqL1xuICBDUkVBVEVfRklMRSA9ICdDcmVhdGVGaWxlJyxcblxuICAvKipcbiAgICogVGhlIENyZWF0ZUZvbGRlciBhY3Rpb24gY3JlYXRlcyBhIGZvbGRlciBpbiB0aGUgcHJvdmlkZWQgbG9jYXRpb25cbiAgICovXG4gIENSRUFURV9GT0xERVIgPSAnQ3JlYXRlRm9sZGVyJyxcblxuICAvKipcbiAgICogVGhlIENyZWF0ZVN5bWxpbmsgYWN0aW9uIGNyZWF0ZXMgc3ltYm9saWMgbGlua3MgZnJvbSBhIGdpdmVuIHBhdGggdG8gYSB0YXJnZXRcbiAgICovXG4gIENSRUFURV9TWU1MSU5LID0gJ0NyZWF0ZVN5bWxpbmsnLFxuXG4gIC8qKlxuICAgKiBUaGUgRGVsZXRlRmlsZSBhY3Rpb24gZGVsZXRlcyBmaWxlKHMpIGluIHRoZSBwcm92aWRlZCBsb2NhdGlvblxuICAgKi9cbiAgREVMRVRFX0ZJTEUgPSAnRGVsZXRlRmlsZScsXG5cbiAgLyoqXG4gICAqIFRoZSBEZWxldGVGb2xkZXIgYWN0aW9uIGRlbGV0ZXMgZm9sZGVycyBpbiB0aGUgcHJvdmlkZWQgbG9jYXRpb25cbiAgICovXG4gIERFTEVURV9GT0xERVIgPSAnRGVsZXRlRm9sZGVyJyxcblxuICAvKipcbiAgICogVGhlIEV4ZWN1dGVCYXNoIGFjdGlvbiBydW5zIGJhc2ggc2NyaXB0cyB3aXRoIGlubGluZSBiYXNoIGNvbW1hbmRzXG4gICAqL1xuICBFWEVDVVRFX0JBU0ggPSAnRXhlY3V0ZUJhc2gnLFxuXG4gIC8qKlxuICAgKiBUaGUgRXhlY3V0ZUJpbmFyeSBhY3Rpb24gcnVucyBhIHByb3ZpZGVkIGJpbmFyeSBleGVjdXRhYmxlXG4gICAqL1xuICBFWEVDVVRFX0JJTkFSWSA9ICdFeGVjdXRlQmluYXJ5JyxcblxuICAvKipcbiAgICogVGhlIEV4ZWN1dGVEb2N1bWVudCBhY3Rpb24gYWxsb3dzIHJ1bm5pbmcgb3RoZXIgY29tcG9uZW50IGRvY3VtZW50cyBmcm9tIHdpdGhpbiBhIGdpdmVuIGNvbXBvbmVudFxuICAgKi9cbiAgRVhFQ1VURV9ET0NVTUVOVCA9ICdFeGVjdXRlRG9jdW1lbnQnLFxuXG4gIC8qKlxuICAgKiBUaGUgRXhlY3V0ZVBvd2Vyc2hlbGwgYWN0aW9uIHJ1bnMgUG93ZXJTaGVsbCBzY3JpcHRzIHdpdGggaW5saW5lIFBvd2VyU2hlbGwgY29tbWFuZHNcbiAgICovXG4gIEVYRUNVVEVfUE9XRVJTSEVMTCA9ICdFeGVjdXRlUG93ZXJTaGVsbCcsXG5cbiAgLyoqXG4gICAqIFRoZSBJbnN0YWxsTVNJIGFjdGlvbiBydW5zIGEgV2luZG93cyBhcHBsaWNhdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBNU0kgZmlsZVxuICAgKi9cbiAgSU5TVEFMTF9NU0kgPSAnSW5zdGFsbE1TSScsXG5cbiAgLyoqXG4gICAqIFRoZSBMaXN0RmlsZXMgYWN0aW9uIGxpc3RzIGZpbGVzIGluIHRoZSBwcm92aWRlZCBmb2xkZXJcbiAgICovXG4gIExJU1RfRklMRVMgPSAnTGlzdEZpbGVzJyxcblxuICAvKipcbiAgICogVGhlIE1vdmVGaWxlIGFjdGlvbiBtb3ZlcyBmaWxlcyBmcm9tIGEgc291cmNlIHRvIGEgZGVzdGluYXRpb25cbiAgICovXG4gIE1PVkVfRklMRSA9ICdNb3ZlRmlsZScsXG5cbiAgLyoqXG4gICAqIFRoZSBNb3ZlRm9sZGVyIGFjdGlvbiBtb3ZlcyBmb2xkZXJzIGZyb20gYSBzb3VyY2UgdG8gYSBkZXN0aW5hdGlvblxuICAgKi9cbiAgTU9WRV9GT0xERVIgPSAnTW92ZUZvbGRlcicsXG5cbiAgLyoqXG4gICAqIFRoZSBSZWFkRmlsZSBhY3Rpb24gcmVhZHMgdGhlIGNvbnRlbnQgb2YgYSB0ZXh0IGZpbGVcbiAgICovXG4gIFJFQURfRklMRSA9ICdSZWFkRmlsZScsXG5cbiAgLyoqXG4gICAqIFRoZSBSZWJvb3QgYWN0aW9uIHJlYm9vdHMgdGhlIGluc3RhbmNlXG4gICAqL1xuICBSRUJPT1QgPSAnUmVib290JyxcblxuICAvKipcbiAgICogVGhlIFNldEZpbGVFbmNvZGluZyBhY3Rpb24gbW9kaWZpZXMgdGhlIGVuY29kaW5nIHByb3BlcnR5IG9mIGFuIGV4aXN0aW5nIGZpbGVcbiAgICovXG4gIFNFVF9GSUxFX0VOQ09ESU5HID0gJ1NldEZpbGVFbmNvZGluZycsXG5cbiAgLyoqXG4gICAqIFRoZSBTZXRGaWxlT3duZXIgYWN0aW9uIG1vZGlmaWVzIHRoZSBvd25lciBhbmQgZ3JvdXAgb3duZXJzaGlwIHByb3BlcnRpZXMgb2YgYW4gZXhpc3RpbmcgZmlsZVxuICAgKi9cbiAgU0VUX0ZJTEVfT1dORVIgPSAnU2V0RmlsZU93bmVyJyxcblxuICAvKipcbiAgICogVGhlIFNldEZvbGRlck93bmVyIGFjdGlvbiByZWN1cnNpdmVseSBtb2RpZmllcyB0aGUgb3duZXIgYW5kIGdyb3VwIG93bmVyc2hpcCBwcm9wZXJ0aWVzIG9mIGFuIGV4aXN0aW5nIGZvbGRlclxuICAgKi9cbiAgU0VUX0ZPTERFUl9PV05FUiA9ICdTZXRGb2xkZXJPd25lcicsXG5cbiAgLyoqXG4gICAqIFRoZSBTZXRGaWxlUGVybWlzc2lvbnMgYWN0aW9uIG1vZGlmaWVzIHRoZSBwZXJtaXNzaW9uIG9mIGFuIGV4aXN0aW5nIGZpbGVcbiAgICovXG4gIFNFVF9GSUxFX1BFUk1JU1NJT05TID0gJ1NldEZpbGVQZXJtaXNzaW9ucycsXG5cbiAgLyoqXG4gICAqIFRoZSBTZXRGb2xkZXJQZXJtaXNzaW9ucyBhY3Rpb24gcmVjdXJzaXZlbHkgbW9kaWZpZXMgdGhlIHBlcm1pc3Npb25zIG9mIGFuIGV4aXN0aW5nIGZvbGRlciBhbmQgYWxsIG9mIGl0cyBzdWJmaWxlc1xuICAgKiBhbmQgc3ViZm9sZGVyc1xuICAgKi9cbiAgU0VUX0ZPTERFUl9QRVJNSVNTSU9OUyA9ICdTZXRGb2xkZXJQZXJtaXNzaW9ucycsXG5cbiAgLyoqXG4gICAqIFRoZSBTZXRSZWdpc3RyeSBhY3Rpb24gc2V0cyB0aGUgdmFsdWUgZm9yIHRoZSBzcGVjaWZpZWQgV2luZG93cyByZWdpc3RyeSBrZXlcbiAgICovXG4gIFNFVF9SRUdJU1RSWSA9ICdTZXRSZWdpc3RyeScsXG5cbiAgLyoqXG4gICAqIFRoZSBTM0Rvd25sb2FkIGFjdGlvbiBkb3dubG9hZHMgYW4gQW1hem9uIFMzIG9iamVjdC9mb2xkZXIgdG8gYSBsb2NhbCBkZXN0aW5hdGlvblxuICAgKi9cbiAgUzNfRE9XTkxPQUQgPSAnUzNEb3dubG9hZCcsXG5cbiAgLyoqXG4gICAqIFRoZSBTM1VwbG9hZCBhY3Rpb24gdXBsb2FkcyBhIGZpbGUgb3IgZm9sZGVyIHRvIGFuIEFtYXpvbiBTMyBsb2NhdGlvblxuICAgKi9cbiAgUzNfVVBMT0FEID0gJ1MzVXBsb2FkJyxcblxuICAvKipcbiAgICogVGhlIFVuaW5zdGFsbE1TSSBhY3Rpb24gcmVtb3ZlcyBhIFdpbmRvd3MgYXBwbGljYXRpb24gdXNpbmcgYW4gTVNJIGZpbGVcbiAgICovXG4gIFVOSU5TVEFMTF9NU0kgPSAnVW5pbnN0YWxsTVNJJyxcblxuICAvKipcbiAgICogVGhlIFVwZGF0ZU9TIGFjdGlvbiBpbnN0YWxscyBPUyB1cGRhdGVzXG4gICAqL1xuICBVUERBVEVfT1MgPSAnVXBkYXRlT1MnLFxuXG4gIC8qKlxuICAgKiBUaGUgV2ViRG93bmxvYWQgYWN0aW9uIGRvd25sb2FkcyBmaWxlcyBmcm9tIGEgVVJMIHRvIGEgbG9jYWwgZGVzdGluYXRpb25cbiAgICovXG4gIFdFQl9ET1dOTE9BRCA9ICdXZWJEb3dubG9hZCcsXG59XG5cbi8qKlxuICogU3BlY2lmaWVzIHdoYXQgdGhlIHN0ZXAgc2hvdWxkIGRvIGluIGNhc2Ugb2YgZmFpbHVyZVxuICovXG5leHBvcnQgZW51bSBDb21wb25lbnRPbkZhaWx1cmUge1xuICAvKipcbiAgICogRmFpbHMgdGhlIHN0ZXAgYW5kIGRvY3VtZW50IGV4ZWN1dGlvblxuICAgKi9cbiAgQUJPUlQgPSAnQWJvcnQnLFxuXG4gIC8qKlxuICAgKiBGYWlscyB0aGUgc3RlcCBhbmQgcHJvY2VlZHMgdG8gZXhlY3V0ZSB0aGUgbmV4dCBzdGVwIGluIHRoZSBkb2N1bWVudFxuICAgKi9cbiAgQ09OVElOVUUgPSAnQ29udGludWUnLFxuXG4gIC8qKlxuICAgKiBJZ25vcmVzIHRoZSBzdGVwIGFuZCBwcm9jZWVkcyB0byBleGVjdXRlIHRoZSBuZXh0IHN0ZXAgaW4gdGhlIGRvY3VtZW50XG4gICAqL1xuICBJR05PUkUgPSAnSWdub3JlJyxcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVyIHR5cGUgaW4gYSBjb21wb25lbnQgZG9jdW1lbnRcbiAqL1xuZXhwb3J0IGVudW0gQ29tcG9uZW50UGFyYW1ldGVyVHlwZSB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIHBhcmFtZXRlciB2YWx1ZSBpcyBhIHN0cmluZ1xuICAgKi9cbiAgU1RSSU5HID0gJ3N0cmluZycsXG59XG5cbi8qKlxuICogVGhlIHBoYXNlcyBvZiBhIGNvbXBvbmVudCBkb2N1bWVudFxuICovXG5leHBvcnQgZW51bSBDb21wb25lbnRQaGFzZU5hbWUge1xuICAvKipcbiAgICogQnVpbGQgcGhhc2Ugb2YgdGhlIGNvbXBvbmVudC4gVGhpcyBwaGFzZSBpcyBydW4gZHVyaW5nIHRoZSBCVUlMRElORyBwaGFzZSBvZiB0aGUgaW1hZ2UgYnVpbGQuXG4gICAqL1xuICBCVUlMRCA9ICdidWlsZCcsXG5cbiAgLyoqXG4gICAqIFRlc3QgcGhhc2Ugb2YgdGhlIGNvbXBvbmVudCwgZXhlY3V0ZWQgZGlyZWN0bHkgb24gdGhlIGluc3RhbmNlIHdoaWNoIGlzIHVzZWQgdG8gYnVpbGQgdGhlIGNvbnRhaW5lciBpbWFnZS4gVGhpc1xuICAgKiBwaGFzZSBpcyBydW4gZHVyaW5nIHRoZSBURVNUSU5HIHBoYXNlIG9mIHRoZSBpbWFnZSBidWlsZC5cbiAgICovXG4gIENPTlRBSU5FUl9IT1NUX1RFU1QgPSAnY29udGFpbmVyLWhvc3QtdGVzdCcsXG5cbiAgLyoqXG4gICAqIFRlc3QgcGhhc2Ugb2YgdGhlIGNvbXBvbmVudC4gVGhpcyBwaGFzZSBpcyBydW4gZHVyaW5nIHRoZSBURVNUSU5HIHBoYXNlIG9mIHRoZSBpbWFnZSBidWlsZC5cbiAgICovXG4gIFRFU1QgPSAndGVzdCcsXG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHBoYXNlIG9mIHRoZSBjb21wb25lbnQuIFRoaXMgcGhhc2UgaXMgcnVuIGR1cmluZyB0aGUgQlVJTERJTkcgcGhhc2Ugb2YgdGhlIGltYWdlIGJ1aWxkLCBhZnRlciB0aGUgYnVpbGRcbiAgICogc3RlcCBvZiB0aGUgY29tcG9uZW50IGlzIGV4ZWN1dGVkLlxuICAgKi9cbiAgVkFMSURBVEUgPSAndmFsaWRhdGUnLFxufVxuXG4vKipcbiAqIFRoZSBzY2hlbWEgdmVyc2lvbiBvZiB0aGUgY29tcG9uZW50XG4gKi9cbmV4cG9ydCBlbnVtIENvbXBvbmVudFNjaGVtYVZlcnNpb24ge1xuICAvKipcbiAgICogU2NoZW1hIHZlcnNpb24gMS4wIGZvciB0aGUgY29tcG9uZW50IGRvY3VtZW50XG4gICAqL1xuICBWMV8wID0gJzEuMCcsXG59XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgaW5wdXRzIGZvciBhIHN0ZXAgaW4gdGhlIGNvbXBvbmVudCBkb2N1bWVudFxuICovXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50U3RlcElucHV0cyB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBpbnB1dCB2YWx1ZSBmcm9tIGFuIG9iamVjdCwgZm9yIHRoZSBjb21wb25lbnQgc3RlcFxuICAgKlxuICAgKiBAcGFyYW0gaW5wdXRzT2JqZWN0IFRoZSBvYmplY3QgY29udGFpbmluZyB0aGUgaW5wdXQgdmFsdWVzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21PYmplY3QoaW5wdXRzT2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogQ29tcG9uZW50U3RlcElucHV0cyB7XG4gICAgcmV0dXJuIG5ldyBDb21wb25lbnRTdGVwSW5wdXRzKGlucHV0c09iamVjdCk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgaW5wdXQgdmFsdWUgZnJvbSBhIGxpc3Qgb2YgaW5wdXQgb2JqZWN0cywgZm9yIHRoZSBjb21wb25lbnQgc3RlcFxuICAgKlxuICAgKiBAcGFyYW0gaW5wdXRzT2JqZWN0TGlzdCBUaGUgbGlzdCBvZiBvYmplY3RzIGNvbnRhaW5pbmcgdGhlIGlucHV0IHZhbHVlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tTGlzdChpbnB1dHNPYmplY3RMaXN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9W10pOiBDb21wb25lbnRTdGVwSW5wdXRzIHtcbiAgICByZXR1cm4gbmV3IENvbXBvbmVudFN0ZXBJbnB1dHMoaW5wdXRzT2JqZWN0TGlzdCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIGlucHV0IHZhbHVlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaW5wdXRzOiBhbnk7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGlucHV0OiBhbnkpIHtcbiAgICB0aGlzLmlucHV0cyA9IGlucHV0O1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBgaWZgIGNvbmRpdGlvbiBpbiB0aGUgY29tcG9uZW50IGRvY3VtZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBDb21wb25lbnRTdGVwSWZDb25kaXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgYGlmYCB2YWx1ZSBmcm9tIGFuIG9iamVjdCwgZm9yIHRoZSBjb21wb25lbnQgc3RlcFxuICAgKlxuICAgKiBAcGFyYW0gaWZPYmplY3QgVGhlIG9iamVjdCBjb250YWluaW5nIHRoZSBgaWZgIGNvbmRpdGlvblxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tT2JqZWN0KGlmT2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogQ29tcG9uZW50U3RlcElmQ29uZGl0aW9uIHtcbiAgICByZXR1cm4gbmV3IENvbXBvbmVudFN0ZXBJZkNvbmRpdGlvbihpZk9iamVjdCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIGlucHV0IHZhbHVlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgaWZDb25kaXRpb246IGFueTtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoaWZDb25kaXRpb246IGFueSkge1xuICAgIHRoaXMuaWZDb25kaXRpb24gPSBpZkNvbmRpdGlvbjtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSByZW5kZXJlZCBjb21wb25lbnQgZGF0YSB2YWx1ZSwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvbi5cbiAqIC0gRm9yIGlubGluZSBjb21wb25lbnRzLCBkYXRhIGlzIHRoZSBjb21wb25lbnQgdGV4dFxuICogLSBGb3IgUzMtYmFja2VkIGNvbXBvbmVudHMsIHVyaSBpcyB0aGUgUzMgVVJMXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50RGF0YUNvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgY29tcG9uZW50IGRhdGEsIGZvciB1c2UgaW4gQ2xvdWRGb3JtYXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lIGlmIHVyaSBpcyBzZXRcbiAgICovXG4gIHJlYWRvbmx5IGRhdGE/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBjb21wb25lbnQgZGF0YSBVUkksIGZvciB1c2UgaW4gQ2xvdWRGb3JtYXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lIGlmIGRhdGEgaXMgc2V0XG4gICAqL1xuICByZWFkb25seSB1cmk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIGZvciByZWZlcmVuY2luZyBhbmQgdXBsb2FkaW5nIGNvbXBvbmVudCBkYXRhXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb21wb25lbnREYXRhIHtcbiAgLyoqXG4gICAqIFVwbG9hZHMgY29tcG9uZW50IGRhdGEgZnJvbSBhIGxvY2FsIGZpbGUgdG8gUzMgdG8gdXNlIGFzIHRoZSBjb21wb25lbnQgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgSWRlbnRpZmllciBvZiB0aGUgY29uc3RydWN0XG4gICAqIEBwYXJhbSBwYXRoIFRoZSBsb2NhbCBwYXRoIHRvIHRoZSBjb21wb25lbnQgZGF0YSBmaWxlXG4gICAqIEBwYXJhbSBvcHRpb25zIFMzIGFzc2V0IHVwbG9hZCBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Bc3NldChcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHMzYXNzZXRzLkFzc2V0T3B0aW9ucyA9IHt9LFxuICApOiBTM0NvbXBvbmVudERhdGEge1xuICAgIGNvbnN0IGFzc2V0ID0gbmV3IHMzYXNzZXRzLkFzc2V0KHNjb3BlLCBpZCwgeyAuLi5vcHRpb25zLCBwYXRoIH0pO1xuICAgIHJldHVybiBuZXcgUzNDb21wb25lbnREYXRhRnJvbUFzc2V0KGFzc2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2VzIGNvbXBvbmVudCBkYXRhIGZyb20gYSBwcmUtZXhpc3RpbmcgUzMgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSBidWNrZXQgVGhlIFMzIGJ1Y2tldCB3aGVyZSB0aGUgY29tcG9uZW50IGRhdGEgaXMgc3RvcmVkXG4gICAqIEBwYXJhbSBrZXkgVGhlIFMzIGtleSBvZiB0aGUgY29tcG9uZW50IGRhdGEgZmlsZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tUzMoYnVja2V0OiBzMy5JQnVja2V0LCBrZXk6IHN0cmluZyk6IFMzQ29tcG9uZW50RGF0YSB7XG4gICAgcmV0dXJuIG5ldyBTM0NvbXBvbmVudERhdGFGcm9tQnVja2V0S2V5KGJ1Y2tldCwga2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VzIGFuIGlubGluZSBKU09OIG9iamVjdCBhcyB0aGUgY29tcG9uZW50IGRhdGFcbiAgICpcbiAgICogQHBhcmFtIGRhdGEgQW4gaW5saW5lIEpTT04gb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY29tcG9uZW50IGRhdGFcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUpzb25PYmplY3QoZGF0YTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IENvbXBvbmVudERhdGEge1xuICAgIGNvbnN0IGlubGluZURhdGEgPSB5YW1sLnN0cmluZ2lmeShkYXRhLCB7IGluZGVudDogMiB9KTtcbiAgICByZXR1cm4gbmV3IElubGluZUNvbXBvbmVudERhdGEoaW5saW5lRGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogVXNlcyBhbiBpbmxpbmUgSlNPTiBvYmplY3QgYXMgdGhlIGNvbXBvbmVudCBkYXRhLCB1c2luZyB0aGUgQ29tcG9uZW50RG9jdW1lbnQgaW50ZXJmYWNlXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIEFuIGlubGluZSBKU09OIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNvbXBvbmVudCBkYXRhXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Db21wb25lbnREb2N1bWVudEpzb25PYmplY3QoZGF0YTogQ29tcG9uZW50RG9jdW1lbnQpOiBDb21wb25lbnREYXRhIHtcbiAgICBjb25zdCB7IG5hbWUsIGRlc2NyaXB0aW9uLCBzY2hlbWFWZXJzaW9uLCBjb25zdGFudHMsIHBhcmFtZXRlcnMsIHBoYXNlcyB9ID0gZGF0YTtcbiAgICByZXR1cm4gdGhpcy5mcm9tSnNvbk9iamVjdCh7XG4gICAgICAuLi4obmFtZSAhPT0gdW5kZWZpbmVkICYmIHsgbmFtZSB9KSxcbiAgICAgIC4uLihkZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgICBzY2hlbWFWZXJzaW9uOiBzY2hlbWFWZXJzaW9uLFxuICAgICAgLi4uKGNvbnN0YW50cyAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgY29uc3RhbnRzOiBPYmplY3QuZW50cmllcyhjb25zdGFudHMpLm1hcCgoW2NvbnN0YW50TmFtZSwgdmFsdWVdKSA9PiAoe1xuICAgICAgICAgIFtjb25zdGFudE5hbWVdOiB7IHR5cGU6IHZhbHVlLnR5cGUsIHZhbHVlOiB2YWx1ZS52YWx1ZSB9LFxuICAgICAgICB9KSksXG4gICAgICB9KSxcbiAgICAgIC4uLihwYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICBwYXJhbWV0ZXJzOiBPYmplY3QuZW50cmllcyhwYXJhbWV0ZXJzKS5tYXAoKFtwYXJhbWV0ZXJOYW1lLCB2YWx1ZV0pID0+ICh7IFtwYXJhbWV0ZXJOYW1lXTogdmFsdWUgfSkpLFxuICAgICAgfSksXG4gICAgICBwaGFzZXM6IHBoYXNlcy5tYXAoKHBoYXNlKSA9PiAoe1xuICAgICAgICBuYW1lOiBwaGFzZS5uYW1lLFxuICAgICAgICBzdGVwczogcGhhc2Uuc3RlcHMubWFwKChzdGVwKSA9PiAoe1xuICAgICAgICAgIG5hbWU6IHN0ZXAubmFtZSxcbiAgICAgICAgICBhY3Rpb246IHN0ZXAuYWN0aW9uLFxuICAgICAgICAgIC4uLihzdGVwLm9uRmFpbHVyZSAhPT0gdW5kZWZpbmVkICYmIHsgb25GYWlsdXJlOiBzdGVwLm9uRmFpbHVyZSB9KSxcbiAgICAgICAgICAuLi4oc3RlcC50aW1lb3V0ICE9PSB1bmRlZmluZWQgJiYgeyB0aW1lb3V0U2Vjb25kczogc3RlcC50aW1lb3V0LnRvU2Vjb25kcygpIH0pLFxuICAgICAgICAgIC4uLihzdGVwLmlmICE9PSB1bmRlZmluZWQgJiYgeyBpZjogc3RlcC5pZi5pZkNvbmRpdGlvbiB9KSxcbiAgICAgICAgICAuLi4oc3RlcC5sb29wICE9PSB1bmRlZmluZWQgJiYgeyBsb29wOiBzdGVwLmxvb3AgfSksXG4gICAgICAgICAgaW5wdXRzOiBzdGVwLmlucHV0cy5pbnB1dHMsXG4gICAgICAgIH0pKSxcbiAgICAgIH0pKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VzIGFuIGlubGluZSBKU09OL1lBTUwgc3RyaW5nIGFzIHRoZSBjb21wb25lbnQgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBBbiBpbmxpbmUgSlNPTi9ZQU1MIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGNvbXBvbmVudCBkYXRhXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21JbmxpbmUoZGF0YTogc3RyaW5nKTogQ29tcG9uZW50RGF0YSB7XG4gICAgcmV0dXJuIG5ldyBJbmxpbmVDb21wb25lbnREYXRhKGRhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBjb21wb25lbnQgZGF0YSB2YWx1ZSwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvbi5cbiAgICogLSBGb3IgaW5saW5lIGNvbXBvbmVudHMsIGRhdGEgaXMgdGhlIGNvbXBvbmVudCB0ZXh0XG4gICAqIC0gRm9yIFMzLWJhY2tlZCBjb21wb25lbnRzLCB1cmkgaXMgdGhlIFMzIFVSTFxuICAgKi9cbiAgYWJzdHJhY3QgcmVuZGVyKCk6IENvbXBvbmVudERhdGFDb25maWc7XG59XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIGZvciBTMy1iYXNlZCBjb21wb25lbnQgZGF0YSByZWZlcmVuY2VzLCBjb250YWluaW5nIGFkZGl0aW9uYWwgcGVybWlzc2lvbiBncmFudCBtZXRob2RzIG9uIHRoZSBTMyBvYmplY3RcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFMzQ29tcG9uZW50RGF0YSBleHRlbmRzIENvbXBvbmVudERhdGEge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYnVja2V0OiBzMy5JQnVja2V0O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJ1Y2tldDogczMuSUJ1Y2tldCwga2V5OiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5idWNrZXQgPSBidWNrZXQ7XG4gICAgdGhpcy5rZXkgPSBrZXk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIGNvbXBvbmVudCBkYXRhIHRleHQsIGZvciB1c2UgaW4gQ2xvdWRGb3JtYXRpb25cbiAgICovXG4gIHB1YmxpYyByZW5kZXIoKTogQ29tcG9uZW50RGF0YUNvbmZpZyB7XG4gICAgcmV0dXJuIHsgdXJpOiB0aGlzLmJ1Y2tldC5zM1VybEZvck9iamVjdCh0aGlzLmtleSkgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCBwdXQgcGVybWlzc2lvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBjb21wb25lbnQgZGF0YSBpbiBTM1xuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgcHVibGljIGdyYW50UHV0KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuZ3JhbnRQdXQoZ3JhbnRlZSwgdGhpcy5rZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBjb21wb25lbnQgZGF0YSBpbiBTM1xuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0LmdyYW50UmVhZChncmFudGVlLCB0aGlzLmtleSk7XG4gIH1cbn1cblxuY2xhc3MgSW5saW5lQ29tcG9uZW50RGF0YSBleHRlbmRzIENvbXBvbmVudERhdGEge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0YTogc3RyaW5nO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihkYXRhOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgY29tcG9uZW50IGRhdGEgdGV4dCwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvblxuICAgKi9cbiAgcHVibGljIHJlbmRlcigpOiBDb21wb25lbnREYXRhQ29uZmlnIHtcbiAgICByZXR1cm4geyBkYXRhOiB0aGlzLmRhdGEgfTtcbiAgfVxufVxuXG5jbGFzcyBTM0NvbXBvbmVudERhdGFGcm9tQnVja2V0S2V5IGV4dGVuZHMgUzNDb21wb25lbnREYXRhIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKGJ1Y2tldDogczMuSUJ1Y2tldCwga2V5OiBzdHJpbmcpIHtcbiAgICBzdXBlcihidWNrZXQsIGtleSk7XG4gIH1cbn1cblxuY2xhc3MgUzNDb21wb25lbnREYXRhRnJvbUFzc2V0IGV4dGVuZHMgUzNDb21wb25lbnREYXRhIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKGFzc2V0OiBzM2Fzc2V0cy5Bc3NldCkge1xuICAgIHN1cGVyKGFzc2V0LmJ1Y2tldCwgYXNzZXQuczNPYmplY3RLZXkpO1xuICB9XG59XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIGZvciB3b3JraW5nIHdpdGggQVdTIE1hcmtldHBsYWNlIGNvbXBvbmVudHNcbiAqL1xuZXhwb3J0IGNsYXNzIEF3c01hcmtldHBsYWNlQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIEltcG9ydHMgYW4gQVdTIE1hcmtldHBsYWNlIGNvbXBvbmVudCBmcm9tIGl0cyBhdHRyaWJ1dGVzXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBJZGVudGlmaWVyIG9mIHRoZSBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGF0dHJzIFRoZSBBV1MtbWFuYWdlZCBjb21wb25lbnQgYXR0cmlidXRlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQXdzTWFya2V0cGxhY2VDb21wb25lbnRBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogQXdzTWFya2V0cGxhY2VDb21wb25lbnRBdHRyaWJ1dGVzLFxuICApOiBJQ29tcG9uZW50IHtcbiAgICByZXR1cm4gQ29tcG9uZW50LmZyb21Db21wb25lbnRBcm4oXG4gICAgICBzY29wZSxcbiAgICAgIGlkLFxuICAgICAgY2RrLlN0YWNrLm9mKHNjb3BlKS5mb3JtYXRBcm4oe1xuICAgICAgICBzZXJ2aWNlOiAnaW1hZ2VidWlsZGVyJyxcbiAgICAgICAgYWNjb3VudDogJ2F3cy1tYXJrZXRwbGFjZScsXG4gICAgICAgIHJlc291cmNlOiAnY29tcG9uZW50JyxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBgJHthdHRycy5jb21wb25lbnROYW1lfS0ke2F0dHJzLm1hcmtldHBsYWNlUHJvZHVjdElkfS8ke2F0dHJzLmNvbXBvbmVudFZlcnNpb24gPz8gTEFURVNUX1ZFUlNJT059YCxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIG5ldyBvciBpbXBvcnRlZCBDb21wb25lbnRcbiAqL1xuYWJzdHJhY3QgY2xhc3MgQ29tcG9uZW50QmFzZSBleHRlbmRzIGNkay5SZXNvdXJjZSBpbXBsZW1lbnRzIElDb21wb25lbnQge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgY29tcG9uZW50XG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBjb21wb25lbnRBcm46IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb21wb25lbnRcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGNvbXBvbmVudE5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBjb21wb25lbnRcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGNvbXBvbmVudFZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnQgY3VzdG9tIGFjdGlvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBjb21wb25lbnRcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICogQHBhcmFtIGFjdGlvbnMgVGhlIGxpc3Qgb2YgYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9ucyxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMuY29tcG9uZW50QXJuXSxcbiAgICAgIHNjb3BlOiB0aGlzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBjb21wb25lbnRcbiAgICpcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIHB1YmxpYyBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsICdpbWFnZWJ1aWxkZXI6R2V0Q29tcG9uZW50Jyk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIEVDMiBJbWFnZSBCdWlsZGVyIENvbXBvbmVudC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9tYW5hZ2UtY29tcG9uZW50cy5odG1sXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBDb21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtaW1hZ2VidWlsZGVyLWFscGhhLkNvbXBvbmVudCc7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBjb21wb25lbnQgZ2l2ZW4gaXRzIEFSTi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvbXBvbmVudEFybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjb21wb25lbnRBcm46IHN0cmluZyk6IElDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLmZyb21Db21wb25lbnRBdHRyaWJ1dGVzKHNjb3BlLCBpZCwgeyBjb21wb25lbnRBcm4gfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGNvbXBvbmVudCBnaXZlbiBpdHMgbmFtZS4gVGhlIHByb3ZpZGVkIG5hbWUgbXVzdCBiZSBub3JtYWxpemVkIGJ5IGNvbnZlcnRpbmcgYWxsIGFscGhhYmV0aWNhbFxuICAgKiBjaGFyYWN0ZXJzIHRvIGxvd2VyY2FzZSwgYW5kIHJlcGxhY2luZyBhbGwgc3BhY2VzIGFuZCB1bmRlcnNjb3JlcyB3aXRoIGh5cGhlbnMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Db21wb25lbnROYW1lKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbXBvbmVudE5hbWU6IHN0cmluZyk6IElDb21wb25lbnQge1xuICAgIHJldHVybiB0aGlzLmZyb21Db21wb25lbnRBdHRyaWJ1dGVzKHNjb3BlLCBpZCwgeyBjb21wb25lbnROYW1lIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBjb21wb25lbnQgYnkgcHJvdmlkaW5nIGl0cyBhdHRyaWJ1dGVzLiBJZiB0aGUgY29tcG9uZW50IG5hbWUgaXMgcHJvdmlkZWQgYXMgYW4gYXR0cmlidXRlLCBpdFxuICAgKiBtdXN0IGJlIG5vcm1hbGl6ZWQgYnkgY29udmVydGluZyBhbGwgYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlLCBhbmQgcmVwbGFjaW5nIGFsbCBzcGFjZXMgYW5kIHVuZGVyc2NvcmVzXG4gICAqIHdpdGggaHlwaGVucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvbXBvbmVudEF0dHJpYnV0ZXMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXR0cnM6IENvbXBvbmVudEF0dHJpYnV0ZXMpOiBJQ29tcG9uZW50IHtcbiAgICBpZiAoYXR0cnMuY29tcG9uZW50QXJuICYmIChhdHRycy5jb21wb25lbnROYW1lIHx8IGF0dHJzLmNvbXBvbmVudFZlcnNpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgJ2EgY29tcG9uZW50TmFtZSBvciBjb21wb25lbnRWZXJzaW9uIGNhbm5vdCBiZSBwcm92aWRlZCB3aGVuIGEgY29tcG9uZW50QXJuIGlzIHByb3ZpZGVkJyxcbiAgICAgICAgc2NvcGUsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghYXR0cnMuY29tcG9uZW50QXJuICYmICFhdHRycy5jb21wb25lbnROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcignZWl0aGVyIGNvbXBvbmVudEFybiBvciBjb21wb25lbnROYW1lIGlzIHJlcXVpcmVkJywgc2NvcGUpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbXBvbmVudEFybiA9XG4gICAgICBhdHRycy5jb21wb25lbnRBcm4gPz9cbiAgICAgIGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICAgIHJlc291cmNlOiAnY29tcG9uZW50JyxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBgJHthdHRycy5jb21wb25lbnROYW1lfS8ke2F0dHJzLmNvbXBvbmVudFZlcnNpb24gPz8gTEFURVNUX1ZFUlNJT059YCxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgW2NvbXBvbmVudE5hbWUsIGNvbXBvbmVudFZlcnNpb25dID0gKCgpID0+IHtcbiAgICAgIGlmIChhdHRycy5jb21wb25lbnROYW1lKSB7XG4gICAgICAgIHJldHVybiBbYXR0cnMuY29tcG9uZW50TmFtZSwgYXR0cnMuY29tcG9uZW50VmVyc2lvbiA/PyBMQVRFU1RfVkVSU0lPTl07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWVWZXJzaW9uID0gY2RrLlN0YWNrLm9mKHNjb3BlKS5zcGxpdEFybihcbiAgICAgICAgY29tcG9uZW50QXJuLFxuICAgICAgICBjZGsuQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgICApLnJlc291cmNlTmFtZSE7XG5cbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWVWZXJzaW9uU3BsaXQgPSBjZGsuRm4uc3BsaXQoJy8nLCBjb21wb25lbnROYW1lVmVyc2lvbik7XG4gICAgICByZXR1cm4gW2Nkay5Gbi5zZWxlY3QoMCwgY29tcG9uZW50TmFtZVZlcnNpb25TcGxpdCksIGNkay5Gbi5zZWxlY3QoMSwgY29tcG9uZW50TmFtZVZlcnNpb25TcGxpdCldO1xuICAgIH0pKCk7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjb21wb25lbnRBcm4gPSBjb21wb25lbnRBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50VmVyc2lvbiA9IGNvbXBvbmVudFZlcnNpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGEgQ29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpc0NvbXBvbmVudCh4OiBhbnkpOiB4IGlzIENvbXBvbmVudCB7XG4gICAgcmV0dXJuIHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIENPTVBPTkVOVF9TWU1CT0wgaW4geDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb21wb25lbnRcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb21wb25lbnRBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbXBvbmVudE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGNvbXBvbmVudFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbXBvbmVudFZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY29tcG9uZW50IGlzIGVuY3J5cHRlZFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVuY3J5cHRlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGNvbXBvbmVudFxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29tcG9uZW50VHlwZTogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleTtcblxuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENvbXBvbmVudFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6XG4gICAgICAgIHByb3BzLmNvbXBvbmVudE5hbWUgPz9cbiAgICAgICAgY2RrLkxhenkuc3RyaW5nKHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PlxuICAgICAgICAgICAgY2RrLk5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7XG4gICAgICAgICAgICAgIG1heExlbmd0aDogMTI4LFxuICAgICAgICAgICAgICBzZXBhcmF0b3I6ICctJyxcbiAgICAgICAgICAgICAgYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzOiAnLScsXG4gICAgICAgICAgICB9KS50b0xvd2VyQ2FzZSgpLCAvLyBFbmZvcmNlIGxvd2VyY2FzZSBmb3IgdGhlIGF1dG8tZ2VuZXJhdGVkIGZhbGxiYWNrXG4gICAgICAgIH0pLFxuICAgIH0pO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIENPTVBPTkVOVF9TWU1CT0wsIHsgdmFsdWU6IHRydWUgfSk7XG5cbiAgICB0aGlzLnZhbGlkYXRlQ29tcG9uZW50TmFtZSgpO1xuXG4gICAgcHJvcHMuc3VwcG9ydGVkT3NWZXJzaW9ucz8uZm9yRWFjaCgob3NWZXJzaW9uKSA9PiB7XG4gICAgICBpZiAob3NWZXJzaW9uLnBsYXRmb3JtICE9PSBwcm9wcy5wbGF0Zm9ybSkge1xuICAgICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBgb3MgdmVyc2lvbiAke29zVmVyc2lvbi5vc1ZlcnNpb259IGlzIG5vdCBjb21wYXRpYmxlIHdpdGggcGxhdGZvcm0gJHtwcm9wcy5wbGF0Zm9ybX1gLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBjb21wb25lbnRWZXJzaW9uID0gcHJvcHMuY29tcG9uZW50VmVyc2lvbiA/PyAnMS4wLjAnO1xuICAgIGNvbnN0IHN1cHBvcnRlZE9zVmVyc2lvbnMgPSBwcm9wcy5zdXBwb3J0ZWRPc1ZlcnNpb25zPy5maWx0ZXIoKG9zVmVyc2lvbikgPT4gb3NWZXJzaW9uLm9zVmVyc2lvbiAhPT0gdW5kZWZpbmVkKTtcblxuICAgIGNvbnN0IGNvbXBvbmVudCA9IG5ldyBDZm5Db21wb25lbnQodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICB2ZXJzaW9uOiBjb21wb25lbnRWZXJzaW9uLFxuICAgICAgY2hhbmdlRGVzY3JpcHRpb246IHByb3BzLmNoYW5nZURlc2NyaXB0aW9uLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgcGxhdGZvcm06IHByb3BzLnBsYXRmb3JtLFxuICAgICAga21zS2V5SWQ6IHByb3BzLmttc0tleT8ua2V5QXJuLFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICAgIC4uLihzdXBwb3J0ZWRPc1ZlcnNpb25zPy5sZW5ndGggJiYge1xuICAgICAgICBzdXBwb3J0ZWRPc1ZlcnNpb25zOiBzdXBwb3J0ZWRPc1ZlcnNpb25zLm1hcCgob3NWZXJzaW9uKSA9PiBvc1ZlcnNpb24ub3NWZXJzaW9uISksXG4gICAgICB9KSxcbiAgICAgIC4uLnByb3BzLmRhdGEucmVuZGVyKCksXG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbXBvbmVudE5hbWUgPSB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZShjb21wb25lbnQuYXR0ck5hbWUpO1xuICAgIHRoaXMuY29tcG9uZW50QXJuID0gdGhpcy5nZXRSZXNvdXJjZUFybkF0dHJpYnV0ZShjb21wb25lbnQuYXR0ckFybiwge1xuICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICByZXNvdXJjZTogJ2NvbXBvbmVudCcsXG4gICAgICByZXNvdXJjZU5hbWU6IGAke3RoaXMucGh5c2ljYWxOYW1lfS8ke2NvbXBvbmVudFZlcnNpb259YCxcbiAgICB9KTtcbiAgICB0aGlzLmNvbXBvbmVudFZlcnNpb24gPSBjb21wb25lbnRWZXJzaW9uO1xuICAgIHRoaXMuZW5jcnlwdGVkID0gdHJ1ZTsgLy8gQ29tcG9uZW50cyBhcmUgYWx3YXlzIGVuY3J5cHRlZFxuICAgIHRoaXMuY29tcG9uZW50VHlwZSA9IGNvbXBvbmVudC5hdHRyVHlwZTtcbiAgICB0aGlzLmttc0tleSA9IHByb3BzLmttc0tleTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVDb21wb25lbnROYW1lKCkge1xuICAgIGlmIChjZGsuVG9rZW4uaXNVbnJlc29sdmVkKHRoaXMucGh5c2ljYWxOYW1lKSkge1xuICAgICAgcmV0dXJuOyAvLyBDYW5ub3QgdmFsaWRhdGUgdW5yZXNvbHZlZCB0b2tlbnMsIGdpdmVuIHRoZWlyIGFjdHVhbCB2YWx1ZSBpcyByZW5kZXJlZCBhdCBkZXBsb3ltZW50IHRpbWVcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUubGVuZ3RoID4gMTI4KSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYHRoZSBjb21wb25lbnROYW1lIGNhbm5vdCBiZSBsb25nZXIgdGhhbiAxMjggY2hhcmFjdGVycywgZ290OiAnJHt0aGlzLnBoeXNpY2FsTmFtZX0nYCxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljYWxOYW1lLmluY2x1ZGVzKCcgJykpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKGB0aGUgY29tcG9uZW50TmFtZSBjYW5ub3QgY29udGFpbiBzcGFjZXMsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5pbmNsdWRlcygnXycpKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihgdGhlIGNvbXBvbmVudE5hbWUgY2Fubm90IGNvbnRhaW4gdW5kZXJzY29yZXMsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZSAhPT0gdGhpcy5waHlzaWNhbE5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoYHRoZSBjb21wb25lbnROYW1lIG11c3QgYmUgbG93ZXJjYXNlLCBnb3Q6ICcke3RoaXMucGh5c2ljYWxOYW1lfSdgLCB0aGlzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -191,12 +191,14 @@ export declare abstract class S3DockerfileData extends DockerfileData {
|
|
|
191
191
|
render(): DockerfileTemplateConfig;
|
|
192
192
|
/**
|
|
193
193
|
* Grant put permissions to the given grantee for the dockerfile data in S3
|
|
194
|
+
* [disable-awslint:no-grants]
|
|
194
195
|
*
|
|
195
196
|
* @param grantee The principal
|
|
196
197
|
*/
|
|
197
198
|
grantPut(grantee: iam.IGrantable): iam.Grant;
|
|
198
199
|
/**
|
|
199
200
|
* Grant read permissions to the given grantee for the dockerfile data in S3
|
|
201
|
+
* [disable-awslint:no-grants]
|
|
200
202
|
*
|
|
201
203
|
* @param grantee The principal
|
|
202
204
|
*/
|
|
@@ -244,6 +246,7 @@ export declare abstract class ContainerRecipeBase extends cdk.Resource implement
|
|
|
244
246
|
abstract readonly containerRecipeVersion: string;
|
|
245
247
|
/**
|
|
246
248
|
* Grant custom actions to the given grantee for the container recipe
|
|
249
|
+
* [disable-awslint:no-grants]
|
|
247
250
|
*
|
|
248
251
|
* @param grantee The principal
|
|
249
252
|
* @param actions The list of actions
|
|
@@ -251,6 +254,7 @@ export declare abstract class ContainerRecipeBase extends cdk.Resource implement
|
|
|
251
254
|
grant(grantee: iam.IGrantable, ...actions: string[]): iam.Grant;
|
|
252
255
|
/**
|
|
253
256
|
* Grant read permissions to the given grantee for the container recipe
|
|
257
|
+
* [disable-awslint:no-grants]
|
|
254
258
|
*
|
|
255
259
|
* @param grantee The principal
|
|
256
260
|
*/
|