@aws-mdaa/dataops-job-l3-construct 1.5.0 → 1.6.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 +38 -28
- package/README.md +5 -0
- package/lib/dataops-job-l3-construct.d.ts +8 -1
- package/lib/dataops-job-l3-construct.js +40 -13
- package/node_modules/@aws-mdaa/config/README.md +3 -0
- package/node_modules/@aws-mdaa/config/lib/blueprint-value-transformer.d.ts +20 -0
- package/node_modules/@aws-mdaa/config/lib/blueprint-value-transformer.js +70 -0
- package/node_modules/@aws-mdaa/config/lib/blueprint-value-transformer.ts +88 -0
- package/node_modules/@aws-mdaa/config/lib/config.d.ts +87 -0
- package/node_modules/@aws-mdaa/config/lib/config.js +7 -0
- package/node_modules/@aws-mdaa/config/lib/config.ts +92 -0
- package/node_modules/@aws-mdaa/config/lib/index.d.ts +11 -0
- package/node_modules/@aws-mdaa/config/lib/index.js +28 -0
- package/node_modules/@aws-mdaa/config/lib/index.ts +12 -0
- package/node_modules/@aws-mdaa/config/lib/param-transformer.d.ts +49 -0
- package/node_modules/@aws-mdaa/config/lib/param-transformer.js +160 -0
- package/node_modules/@aws-mdaa/config/lib/param-transformer.ts +159 -0
- package/node_modules/@aws-mdaa/config/lib/path-value-transformer.d.ts +10 -0
- package/node_modules/@aws-mdaa/config/lib/path-value-transformer.js +30 -0
- package/node_modules/@aws-mdaa/config/lib/path-value-transformer.ts +27 -0
- package/node_modules/@aws-mdaa/config/lib/ref-value-transformer.d.ts +44 -0
- package/node_modules/@aws-mdaa/config/lib/ref-value-transformer.js +243 -0
- package/node_modules/@aws-mdaa/config/lib/ref-value-transformer.ts +302 -0
- package/node_modules/@aws-mdaa/config/lib/ssm-ref-transformer.d.ts +8 -0
- package/node_modules/@aws-mdaa/config/lib/ssm-ref-transformer.js +22 -0
- package/node_modules/@aws-mdaa/config/lib/ssm-ref-transformer.ts +21 -0
- package/node_modules/@aws-mdaa/config/lib/transformer.d.ts +35 -0
- package/node_modules/@aws-mdaa/config/lib/transformer.js +66 -0
- package/node_modules/@aws-mdaa/config/lib/transformer.ts +74 -0
- package/node_modules/@aws-mdaa/config/package.json +42 -0
- package/node_modules/@aws-mdaa/config/test/blueprint-value-transformer.test.js +224 -0
- package/node_modules/@aws-mdaa/config/test/blueprint-value-transformer.test.ts +259 -0
- package/node_modules/@aws-mdaa/config/test/config-nt.test.d.ts +5 -0
- package/node_modules/@aws-mdaa/config/test/config-nt.test.js +129 -0
- package/node_modules/@aws-mdaa/config/test/config-nt.test.ts +163 -0
- package/node_modules/@aws-mdaa/config/test/config.test.d.ts +5 -0
- package/node_modules/@aws-mdaa/config/test/config.test.js +409 -0
- package/node_modules/@aws-mdaa/config/test/config.test.ts +517 -0
- package/node_modules/@aws-mdaa/config/test/param-transformer.test.d.ts +5 -0
- package/node_modules/@aws-mdaa/config/test/param-transformer.test.js +216 -0
- package/node_modules/@aws-mdaa/config/test/param-transformer.test.ts +234 -0
- package/node_modules/@aws-mdaa/config/test/path-value-transformer.test.d.ts +5 -0
- package/node_modules/@aws-mdaa/config/test/path-value-transformer.test.js +59 -0
- package/node_modules/@aws-mdaa/config/test/path-value-transformer.test.ts +68 -0
- package/node_modules/@aws-mdaa/config/test/ref-value-transformer.test.d.ts +5 -0
- package/node_modules/@aws-mdaa/config/test/ref-value-transformer.test.js +254 -0
- package/node_modules/@aws-mdaa/config/test/ref-value-transformer.test.ts +304 -0
- package/node_modules/@aws-mdaa/config/test/ssm-ref-transformer.test.d.ts +5 -0
- package/node_modules/@aws-mdaa/config/test/ssm-ref-transformer.test.js +66 -0
- package/node_modules/@aws-mdaa/config/test/ssm-ref-transformer.test.ts +79 -0
- package/node_modules/@aws-mdaa/config/tsconfig.tsbuildinfo +1 -0
- package/node_modules/lodash/README.md +2 -2
- package/node_modules/lodash/_baseOrderBy.js +1 -1
- package/node_modules/lodash/_baseUnset.js +7 -20
- package/node_modules/lodash/_setCacheHas.js +1 -1
- package/node_modules/lodash/compact.js +1 -1
- package/node_modules/lodash/core.js +3 -3
- package/node_modules/lodash/core.min.js +26 -25
- package/node_modules/lodash/fromPairs.js +3 -1
- package/node_modules/lodash/lodash.js +38 -27
- package/node_modules/lodash/lodash.min.js +125 -129
- package/node_modules/lodash/package.json +4 -2
- package/node_modules/lodash/random.js +9 -0
- package/node_modules/lodash/template.js +16 -4
- package/node_modules/lodash/templateSettings.js +4 -0
- package/package.json +27 -32
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/README.md +0 -185
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/lib/index.d.ts +0 -57
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/lib/index.js +0 -198
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/lib/index.ts +0 -241
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/package.json +0 -44
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/test/bucketpolicy-helper.test.js +0 -200
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/test/bucketpolicy-helper.test.ts +0 -215
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/tsconfig.tsbuildinfo +0 -1
- package/node_modules/@aws-mdaa/s3-inventory-helper/.npmignore +0 -34
- package/node_modules/@aws-mdaa/s3-inventory-helper/README.md +0 -3
- package/node_modules/@aws-mdaa/s3-inventory-helper/jest.config.js +0 -5
- package/node_modules/@aws-mdaa/s3-inventory-helper/lib/index.d.ts +0 -48
- package/node_modules/@aws-mdaa/s3-inventory-helper/lib/index.js +0 -213
- package/node_modules/@aws-mdaa/s3-inventory-helper/lib/index.ts +0 -241
- package/node_modules/@aws-mdaa/s3-inventory-helper/package.json +0 -44
- package/node_modules/@aws-mdaa/s3-inventory-helper/test/TODO +0 -0
- package/node_modules/@aws-mdaa/s3-inventory-helper/tsconfig.json +0 -40
- package/node_modules/@aws-mdaa/s3-inventory-helper/tsconfig.tsbuildinfo +0 -1
- package/node_modules/@aws-mdaa/s3-inventory-helper/typedoc.json +0 -7
- /package/node_modules/@aws-mdaa/{s3-bucketpolicy-helper → config}/.npmignore +0 -0
- /package/node_modules/@aws-mdaa/{s3-bucketpolicy-helper → config}/jest.config.js +0 -0
- /package/node_modules/@aws-mdaa/{s3-bucketpolicy-helper/test/bucketpolicy-helper.test.d.ts → config/test/blueprint-value-transformer.test.d.ts} +0 -0
- /package/node_modules/@aws-mdaa/{s3-bucketpolicy-helper → config}/tsconfig.json +0 -0
- /package/node_modules/@aws-mdaa/{s3-bucketpolicy-helper → config}/typedoc.json +0 -0
package/.jsii
CHANGED
|
@@ -7,22 +7,20 @@
|
|
|
7
7
|
"url": "https://aws.amazon.com/solutions"
|
|
8
8
|
},
|
|
9
9
|
"bundled": {
|
|
10
|
-
"@aws-mdaa/
|
|
11
|
-
"
|
|
12
|
-
"lodash": "4.17.23"
|
|
10
|
+
"@aws-mdaa/config": "1.6.0",
|
|
11
|
+
"lodash": "4.18.1"
|
|
13
12
|
},
|
|
14
13
|
"dependencies": {
|
|
15
|
-
"@aws-mdaa/cloudwatch-constructs": "1.
|
|
16
|
-
"@aws-mdaa/construct": "1.
|
|
17
|
-
"@aws-mdaa/dataops-project-l3-construct": "1.
|
|
18
|
-
"@aws-mdaa/eventbridge-helper": "1.
|
|
19
|
-
"@aws-mdaa/glue-constructs": "1.
|
|
20
|
-
"@aws-mdaa/iam-constructs": "1.
|
|
21
|
-
"@aws-mdaa/iam-role-helper": "1.
|
|
22
|
-
"@aws-mdaa/l3-construct": "1.
|
|
23
|
-
"@aws-mdaa/
|
|
24
|
-
"@aws-mdaa/
|
|
25
|
-
"@aws-mdaa/sns-constructs": "1.5.0",
|
|
14
|
+
"@aws-mdaa/cloudwatch-constructs": "1.6.0",
|
|
15
|
+
"@aws-mdaa/construct": "1.6.0",
|
|
16
|
+
"@aws-mdaa/dataops-project-l3-construct": "1.6.0",
|
|
17
|
+
"@aws-mdaa/eventbridge-helper": "1.6.0",
|
|
18
|
+
"@aws-mdaa/glue-constructs": "1.6.0",
|
|
19
|
+
"@aws-mdaa/iam-constructs": "1.6.0",
|
|
20
|
+
"@aws-mdaa/iam-role-helper": "1.6.0",
|
|
21
|
+
"@aws-mdaa/l3-construct": "1.6.0",
|
|
22
|
+
"@aws-mdaa/s3-constructs": "1.6.0",
|
|
23
|
+
"@aws-mdaa/sns-constructs": "1.6.0",
|
|
26
24
|
"aws-cdk-lib": "2.220.0",
|
|
27
25
|
"cdk-nag": "2.37.55",
|
|
28
26
|
"constructs": "10.0.96"
|
|
@@ -190,13 +188,6 @@
|
|
|
190
188
|
}
|
|
191
189
|
}
|
|
192
190
|
},
|
|
193
|
-
"@aws-mdaa/datazone-l3-construct": {
|
|
194
|
-
"targets": {
|
|
195
|
-
"js": {
|
|
196
|
-
"npm": "@aws-mdaa/datazone-l3-construct"
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
},
|
|
200
191
|
"@aws-mdaa/ec2-constructs": {
|
|
201
192
|
"targets": {
|
|
202
193
|
"js": {
|
|
@@ -4401,7 +4392,7 @@
|
|
|
4401
4392
|
},
|
|
4402
4393
|
"name": "@aws-mdaa/dataops-job-l3-construct",
|
|
4403
4394
|
"readme": {
|
|
4404
|
-
"markdown": "# Construct Overview\n\nThe Data Ops Job CDK L3 construct is used to deploy the resources required to support and perform data operations on top of a Data Lake using Glue Jobs.\n\n***\n\n## Deployed Resources\n\n\n\n* **Glue Jobs** - Glue Jobs will be created for each job specification in the configs\n"
|
|
4395
|
+
"markdown": "# Construct Overview\n\nThe Data Ops Job CDK L3 construct is used to deploy the resources required to support and perform data operations on top of a Data Lake using Glue Jobs.\n\n***\n\n## Deployed Resources\n\n\n\n* **Glue Jobs** - Glue Jobs will be created for each job specification in the configs\n\n## Optional Features\n\n### Asset Script Resolution\nSet `assetBasePath` on the construct props to enable `asset:` prefixed paths in `scriptLocation` and `additionalScripts`. When a path starts with `asset:`, it is resolved relative to the configured base path (e.g., `asset:dq-main.py` resolves to `<assetBasePath>/dq-main.py`).\n"
|
|
4405
4396
|
},
|
|
4406
4397
|
"repository": {
|
|
4407
4398
|
"type": "git",
|
|
@@ -4427,7 +4418,7 @@
|
|
|
4427
4418
|
},
|
|
4428
4419
|
"locationInModule": {
|
|
4429
4420
|
"filename": "lib/dataops-job-l3-construct.ts",
|
|
4430
|
-
"line":
|
|
4421
|
+
"line": 160
|
|
4431
4422
|
},
|
|
4432
4423
|
"parameters": [
|
|
4433
4424
|
{
|
|
@@ -4453,7 +4444,7 @@
|
|
|
4453
4444
|
"kind": "class",
|
|
4454
4445
|
"locationInModule": {
|
|
4455
4446
|
"filename": "lib/dataops-job-l3-construct.ts",
|
|
4456
|
-
"line":
|
|
4447
|
+
"line": 156
|
|
4457
4448
|
},
|
|
4458
4449
|
"name": "GlueJobL3Construct",
|
|
4459
4450
|
"properties": [
|
|
@@ -4464,7 +4455,7 @@
|
|
|
4464
4455
|
"immutable": true,
|
|
4465
4456
|
"locationInModule": {
|
|
4466
4457
|
"filename": "lib/dataops-job-l3-construct.ts",
|
|
4467
|
-
"line":
|
|
4458
|
+
"line": 157
|
|
4468
4459
|
},
|
|
4469
4460
|
"name": "props",
|
|
4470
4461
|
"protected": true,
|
|
@@ -4513,6 +4504,24 @@
|
|
|
4513
4504
|
}
|
|
4514
4505
|
}
|
|
4515
4506
|
},
|
|
4507
|
+
{
|
|
4508
|
+
"abstract": true,
|
|
4509
|
+
"docs": {
|
|
4510
|
+
"remarks": "When a job's scriptLocation starts with `asset:`, it is resolved\nrelative to this directory.",
|
|
4511
|
+
"stability": "experimental",
|
|
4512
|
+
"summary": "Base path for resolving `asset:` prefixed script locations."
|
|
4513
|
+
},
|
|
4514
|
+
"immutable": true,
|
|
4515
|
+
"locationInModule": {
|
|
4516
|
+
"filename": "lib/dataops-job-l3-construct.ts",
|
|
4517
|
+
"line": 153
|
|
4518
|
+
},
|
|
4519
|
+
"name": "assetBasePath",
|
|
4520
|
+
"optional": true,
|
|
4521
|
+
"type": {
|
|
4522
|
+
"primitive": "string"
|
|
4523
|
+
}
|
|
4524
|
+
},
|
|
4516
4525
|
{
|
|
4517
4526
|
"abstract": true,
|
|
4518
4527
|
"docs": {
|
|
@@ -4655,8 +4664,9 @@
|
|
|
4655
4664
|
{
|
|
4656
4665
|
"abstract": true,
|
|
4657
4666
|
"docs": {
|
|
4667
|
+
"remarks": "Available assets: dq-main.py (DQ evaluation, with utils/ as additionalScripts).",
|
|
4658
4668
|
"stability": "experimental",
|
|
4659
|
-
"summary": "Relative path to the Glue script for job execution."
|
|
4669
|
+
"summary": "Relative path to the Glue script for job execution, or `asset:<filename>` to use a pre-built script from the app's assets directory."
|
|
4660
4670
|
},
|
|
4661
4671
|
"immutable": true,
|
|
4662
4672
|
"locationInModule": {
|
|
@@ -5089,6 +5099,6 @@
|
|
|
5089
5099
|
"symbolId": "lib/dataops-job-l3-construct:LoggingConfig"
|
|
5090
5100
|
}
|
|
5091
5101
|
},
|
|
5092
|
-
"version": "1.
|
|
5093
|
-
"fingerprint": "
|
|
5102
|
+
"version": "1.6.0",
|
|
5103
|
+
"fingerprint": "CDrJjMPj2ioWctWkDbvZNiwiA9fw68dPsZxK4CiNoqQ="
|
|
5094
5104
|
}
|
package/README.md
CHANGED
|
@@ -9,3 +9,8 @@ The Data Ops Job CDK L3 construct is used to deploy the resources required to su
|
|
|
9
9
|

|
|
10
10
|
|
|
11
11
|
* **Glue Jobs** - Glue Jobs will be created for each job specification in the configs
|
|
12
|
+
|
|
13
|
+
## Optional Features
|
|
14
|
+
|
|
15
|
+
### Asset Script Resolution
|
|
16
|
+
Set `assetBasePath` on the construct props to enable `asset:` prefixed paths in `scriptLocation` and `additionalScripts`. When a path starts with `asset:`, it is resolved relative to the configured base path (e.g., `asset:dq-main.py` resolves to `<assetBasePath>/dq-main.py`).
|
|
@@ -35,7 +35,7 @@ export interface JobCommand {
|
|
|
35
35
|
readonly name: JobCommandName;
|
|
36
36
|
/** Python version for job runtime ('2' or '3'). */
|
|
37
37
|
readonly pythonVersion?: JobCommandPythonVersion;
|
|
38
|
-
/** Relative path to the Glue script for job execution. */
|
|
38
|
+
/** Relative path to the Glue script for job execution, or `asset:<filename>` to use a pre-built script from the app's assets directory. Available assets: dq-main.py (DQ evaluation, with utils/ as additionalScripts). */
|
|
39
39
|
readonly scriptLocation: string;
|
|
40
40
|
}
|
|
41
41
|
export type JobWorkerType = 'Standard' | 'G.1X' | 'G.2X';
|
|
@@ -119,6 +119,12 @@ export interface GlueJobL3ConstructProps extends MdaaL3ConstructProps {
|
|
|
119
119
|
* Dataops project KMS key ARN.
|
|
120
120
|
*/
|
|
121
121
|
readonly kmsArn?: string;
|
|
122
|
+
/**
|
|
123
|
+
* Base path for resolving `asset:` prefixed script locations.
|
|
124
|
+
* When a job's scriptLocation starts with `asset:`, it is resolved
|
|
125
|
+
* relative to this directory.
|
|
126
|
+
*/
|
|
127
|
+
readonly assetBasePath?: string;
|
|
122
128
|
}
|
|
123
129
|
export declare class GlueJobL3Construct extends MdaaL3Construct {
|
|
124
130
|
protected readonly props: GlueJobL3ConstructProps;
|
|
@@ -128,6 +134,7 @@ export declare class GlueJobL3Construct extends MdaaL3Construct {
|
|
|
128
134
|
private addAdditionalScripts;
|
|
129
135
|
private addAdditionalJars;
|
|
130
136
|
private addAdditionalFiles;
|
|
137
|
+
private resolveAssetPath;
|
|
131
138
|
private createJob;
|
|
132
139
|
private createJobMonitoringEventRule;
|
|
133
140
|
private createLogGroup;
|
|
@@ -41,19 +41,27 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
|
|
|
41
41
|
this.kmsKey = aws_kms_1.Key.fromKeyArn(this, this.props.projectName ?? 'kms-key', this.props.kmsArn);
|
|
42
42
|
// Build our jobs!
|
|
43
43
|
const allJobs = this.props.jobConfigs;
|
|
44
|
-
Object.keys(allJobs)
|
|
44
|
+
for (const jobName of Object.keys(allJobs)) {
|
|
45
45
|
const jobConfig = allJobs[jobName];
|
|
46
46
|
this.createJob(jobName, jobConfig, deploymentRole, bucket);
|
|
47
|
-
}
|
|
48
|
-
//
|
|
47
|
+
}
|
|
48
|
+
// BucketDeployment adds an inline policy to the imported deployment role,
|
|
49
|
+
// which CDK synthesizes as a standalone AWS::IAM::Policy resource.
|
|
50
|
+
// Because the policy name is derived from the construct path (not the stack name),
|
|
51
|
+
// multiple stacks importing the same role produce colliding physical names.
|
|
52
|
+
// Remove the inline policy node — the deployment role already has the necessary
|
|
53
|
+
// S3 permissions granted in the dataops-project construct that owns it.
|
|
54
|
+
for (const child of deploymentRole.node.children) {
|
|
55
|
+
if (child.node.id === 'Policy') {
|
|
56
|
+
deploymentRole.node.tryRemoveChild(child.node.id);
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Suppress nag warnings on the imported deployment role node itself
|
|
61
|
+
// (remaining after inline policy removal, e.g. wildcard resource warnings)
|
|
49
62
|
this.scope.node.children.forEach(child => {
|
|
50
63
|
if (child.node.id.startsWith('deployment-role')) {
|
|
51
|
-
construct_1.MdaaNagSuppressions.addCodeResourceSuppressions(child, [
|
|
52
|
-
{ id: 'AwsSolutions-IAM5', reason: 'Inline policy used only for deployment.' },
|
|
53
|
-
{ id: 'NIST.800.53.R5-IAMNoInlinePolicy', reason: 'Policy used only for deployment.' },
|
|
54
|
-
{ id: 'HIPAA.Security-IAMNoInlinePolicy', reason: 'Policy used only for deployment.' },
|
|
55
|
-
{ id: 'PCI.DSS.321-IAMNoInlinePolicy', reason: 'Policy used only for deployment.' },
|
|
56
|
-
], true);
|
|
64
|
+
construct_1.MdaaNagSuppressions.addCodeResourceSuppressions(child, [{ id: 'AwsSolutions-IAM5', reason: 'Permissions granted on deployment role in owning stack.' }], true);
|
|
57
65
|
}
|
|
58
66
|
});
|
|
59
67
|
}
|
|
@@ -150,10 +158,22 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
|
|
|
150
158
|
}
|
|
151
159
|
}
|
|
152
160
|
}
|
|
161
|
+
resolveAssetPath(jobName, location) {
|
|
162
|
+
if (location.startsWith('asset:')) {
|
|
163
|
+
const assetName = location.substring('asset:'.length);
|
|
164
|
+
if (!this.props.assetBasePath) {
|
|
165
|
+
throw new Error(`Job '${jobName}' uses asset: prefix but no assetBasePath is configured. ` +
|
|
166
|
+
`Set assetBasePath in the construct props.`);
|
|
167
|
+
}
|
|
168
|
+
return path.join(this.props.assetBasePath, assetName);
|
|
169
|
+
}
|
|
170
|
+
return location;
|
|
171
|
+
}
|
|
153
172
|
createJob(jobName, jobConfig, deploymentRole, bucket) {
|
|
154
173
|
const defaultArguments = jobConfig.defaultArguments ? jobConfig.defaultArguments : {};
|
|
155
|
-
|
|
156
|
-
const
|
|
174
|
+
let scriptLocation = this.resolveAssetPath(jobName, jobConfig.command.scriptLocation.trim());
|
|
175
|
+
const scriptPath = path.dirname(scriptLocation);
|
|
176
|
+
const scriptName = path.basename(scriptLocation);
|
|
157
177
|
const scriptSource = aws_s3_deployment_1.Source.asset(scriptPath, { exclude: ['**', `!${scriptName}`] });
|
|
158
178
|
const scriptDeploymentPath = `deployment/jobs/${jobName}`;
|
|
159
179
|
const scriptDeployment = new aws_s3_deployment_1.BucketDeployment(this.scope, `job-deployment-${jobName}`, {
|
|
@@ -163,6 +183,13 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
|
|
|
163
183
|
role: deploymentRole,
|
|
164
184
|
extract: true,
|
|
165
185
|
});
|
|
186
|
+
// Resolve asset: prefixes in additionalScripts before processing
|
|
187
|
+
if (jobConfig.additionalScripts) {
|
|
188
|
+
jobConfig = {
|
|
189
|
+
...jobConfig,
|
|
190
|
+
additionalScripts: jobConfig.additionalScripts.map(s => this.resolveAssetPath(jobName, s.trim())),
|
|
191
|
+
};
|
|
192
|
+
}
|
|
166
193
|
this.addAdditionalScripts(jobName, jobConfig, bucket, deploymentRole, defaultArguments);
|
|
167
194
|
this.addAdditionalJars(jobName, jobConfig, bucket, deploymentRole, defaultArguments);
|
|
168
195
|
this.addAdditionalFiles(jobName, jobConfig, bucket, deploymentRole, defaultArguments);
|
|
@@ -289,5 +316,5 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
|
|
|
289
316
|
}
|
|
290
317
|
exports.GlueJobL3Construct = GlueJobL3Construct;
|
|
291
318
|
_a = JSII_RTTI_SYMBOL_1;
|
|
292
|
-
GlueJobL3Construct[_a] = { fqn: "@aws-mdaa/dataops-job-l3-construct.GlueJobL3Construct", version: "1.
|
|
293
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YW9wcy1qb2ItbDMtY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGF0YW9wcy1qb2ItbDMtY29uc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7OztHQUdHO0FBRUgseUZBQTZFO0FBQzdFLHFFQUFpRTtBQUNqRSwrREFBdUQ7QUFDdkQsNkRBQW9EO0FBQ3BELDJEQUFxRDtBQUNyRCx5REFBK0U7QUFFL0UscUVBQWtGO0FBQ2xGLG1EQUEwRCxDQUFDLFNBQVM7QUFFcEUsNkJBQTZCO0FBQzdCLHVFQUEwRDtBQUMxRCw2REFBd0Q7QUFFeEQsNkNBQWlDO0FBRWpDLG1EQUFxRDtBQUNyRCwyRUFBK0Q7QUFDL0QsaURBQWdEO0FBQ2hELHVGQUFpRjtBQTRIakYsTUFBYSxrQkFBbUIsU0FBUSw4QkFBZTtJQUlyRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQThCO1FBQ3RFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFDRCxNQUFNLGNBQWMsR0FBRyx5QkFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN6RyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLDBCQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVB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LENBQ3BELElBQUksQ0FBQyxLQUFLLEVBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQ2pCLFFBQVEsRUFDUiw2QkFBNkIsRUFDN0I7WUFDRSxPQUFPLEVBQUUsUUFBUTtZQUNqQixLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQztTQUN4QyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sY0FBYyxDQUFDLHNCQUE4QixFQUFFLFlBQW9CLEVBQUUsYUFBNEI7UUFDdkcsSUFBSSxxQkFBb0MsQ0FBQztRQUV6QyxJQUFJLGFBQWEsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM3QyxxQkFBcUIsR0FBRyxhQUFhLENBQUMscUJBQXFCLENBQUM7UUFDOUQsQ0FBQzthQUFNLENBQUM7WUFDTixxQkFBcUIsR0FBRyx3QkFBYSxDQUFDLFFBQVEsQ0FBQztRQUNqRCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUc7WUFDZixNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ3pCLFlBQVksRUFBRSxZQUFZO1lBQzFCLHNCQUFzQixFQUFFLHNCQUFzQjtZQUM5QyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDMUIsU0FBUyxFQUFFLHFCQUFxQjtTQUNqQyxDQUFDO1FBQ0YsSUFBSSxvQ0FBWSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0MsMERBQTBEO1FBQzFELE9BQU8sSUFBQSw0QkFBVyxFQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQWEsQ0FBQztJQUM3QyxDQUFDOztBQXZXSCxnREF3V0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQgeyBEYXRhT3BzUHJvamVjdFV0aWxzIH0gZnJvbSAnQGF3cy1tZGFhL2RhdGFvcHMtcHJvamVjdC1sMy1jb25zdHJ1Y3QnO1xuaW1wb3J0IHsgRXZlbnRCcmlkZ2VIZWxwZXIgfSBmcm9tICdAYXdzLW1kYWEvZXZlbnRicmlkZ2UtaGVscGVyJztcbmltcG9ydCB7IE1kYWFDZm5Kb2IgfSBmcm9tICdAYXdzLW1kYWEvZ2x1ZS1jb25zdHJ1Y3RzJztcbmltcG9ydCB7IE1kYWFSb2xlIH0gZnJvbSAnQGF3cy1tZGFhL2lhbS1jb25zdHJ1Y3RzJztcbmltcG9ydCB7IE1kYWFCdWNrZXQgfSBmcm9tICdAYXdzLW1kYWEvczMtY29uc3RydWN0cyc7XG5pbXBvcnQgeyBNZGFhTDNDb25zdHJ1Y3QsIE1kYWFMM0NvbnN0cnVjdFByb3BzIH0gZnJvbSAnQGF3cy1tZGFhL2wzLWNvbnN0cnVjdCc7XG5pbXBvcnQgeyBDZm5Kb2IgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZ2x1ZSc7XG5pbXBvcnQgeyBCdWNrZXREZXBsb3ltZW50LCBJU291cmNlLCBTb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudCc7XG5pbXBvcnQgeyBNZGFhTmFnU3VwcHJlc3Npb25zIH0gZnJvbSAnQGF3cy1tZGFhL2NvbnN0cnVjdCc7IC8vTk9TT05BUlxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgU25zVG9waWMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHMnO1xuaW1wb3J0IHsgTWRhYVNuc1RvcGljIH0gZnJvbSAnQGF3cy1tZGFhL3Nucy1jb25zdHJ1Y3RzJztcbmltcG9ydCB7IFJ1bGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCB7IEZuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkVsZW1lbnQgfSBmcm9tICdAYXdzLW1kYWEvY29uZmlnJztcbmltcG9ydCB7IFJldGVudGlvbkRheXMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBNZGFhTG9nR3JvdXAgfSBmcm9tICdAYXdzLW1kYWEvY2xvdWR3YXRjaC1jb25zdHJ1Y3RzJztcbmltcG9ydCB7IElLZXksIEtleSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHsgdXBkYXRlUHJvcHMgfSBmcm9tICdAYXdzLW1kYWEvY2xvdWR3YXRjaC1jb25zdHJ1Y3RzL2xpYi9sb2dncm91cC11dGlscyc7XG5pbXBvcnQgeyBJQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IElSb2xlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5cbmV4cG9ydCB0eXBlIEpvYkNvbW1hbmRQeXRob25WZXJzaW9uID0gJzInIHwgJzMnIHwgdW5kZWZpbmVkO1xuZXhwb3J0IHR5cGUgSm9iQ29tbWFuZE5hbWUgPSAnZ2x1ZWV0bCcgfCAncHl0aG9uc2hlbGwnO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIEdsdWUgam9iIGxvZ2dpbmcgd2l0aCBDbG91ZFdhdGNoIGxvZyByZXRlbnRpb24gbWFuYWdlbWVudC5cbiAqXG4gKiBVc2UgY2FzZXM6IExvZyByZXRlbnRpb24gbWFuYWdlbWVudDsgQ29tcGxpYW5jZSByZXF1aXJlbWVudHM7IENvc3Qgb3B0aW1pemF0aW9uOyBBdWRpdCB0cmFpbCBtYW5hZ2VtZW50XG4gKlxuICogQVdTOiBDbG91ZFdhdGNoIGxvZyBncm91cCByZXRlbnRpb24gZm9yIEdsdWUgam9iIGV4ZWN1dGlvbiBsb2dzIGFuZCBtb25pdG9yaW5nXG4gKlxuICogVmFsaWRhdGlvbjogbG9nR3JvdXBSZXRlbnRpb25EYXlzIGlzIHJlcXVpcmVkIHdpdGggc3BlY2lmaWMgYWxsb3dlZCB2YWx1ZXMgZm9yIHJldGVudGlvbiBwZXJpb2RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dnaW5nQ29uZmlnIHtcbiAgLyoqIENsb3VkV2F0Y2ggbG9nIGdyb3VwIHJldGVudGlvbiBpbiBkYXlzLiBBbGxvd2VkOiAxLDMsNSw3LDE0LDMwLDYwLDkwLDEyMCwxNTAsMTgwLDM2NSw0MDAsNTQ1LDczMSwxODI3LDM2NTMsIG9yIDAuICovXG4gIHJlYWRvbmx5IGxvZ0dyb3VwUmV0ZW50aW9uRGF5czogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGEgR2x1ZSBqb2IgY29tbWFuZCBzcGVjaWZ5aW5nIHNjcmlwdCBleGVjdXRpb24gYW5kIHJ1bnRpbWUgZW52aXJvbm1lbnQuXG4gKlxuICogVXNlIGNhc2VzOiBKb2IgY29tbWFuZCBjb25maWd1cmF0aW9uOyBTY3JpcHQgZXhlY3V0aW9uOyBSdW50aW1lIGVudmlyb25tZW50OyBFVEwgam9iIHNldHVwXG4gKlxuICogQVdTOiBHbHVlIGpvYiBjb21tYW5kIGNvbmZpZ3VyYXRpb24gZm9yIHNjcmlwdCBleGVjdXRpb24gYW5kIHJ1bnRpbWUgZW52aXJvbm1lbnRcbiAqXG4gKiBWYWxpZGF0aW9uOiBuYW1lIGFuZCBzY3JpcHRMb2NhdGlvbiBhcmUgcmVxdWlyZWQ7IHB5dGhvblZlcnNpb24gaXMgb3B0aW9uYWwgd2l0aCBzcGVjaWZpYyBjb25zdHJhaW50c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEpvYkNvbW1hbmQge1xuICAvKiogSm9iIHR5cGU6ICdnbHVlZXRsJyBmb3IgU3BhcmsgRVRMIG9yICdweXRob25zaGVsbCcgZm9yIFB5dGhvbiBzY3JpcHRzLiAqL1xuICByZWFkb25seSBuYW1lOiBKb2JDb21tYW5kTmFtZTtcbiAgLyoqIFB5dGhvbiB2ZXJzaW9uIGZvciBqb2IgcnVudGltZSAoJzInIG9yICczJykuICovXG4gIHJlYWRvbmx5IHB5dGhvblZlcnNpb24/OiBKb2JDb21tYW5kUHl0aG9uVmVyc2lvbjtcbiAgLyoqIFJlbGF0aXZlIHBhdGggdG8gdGhlIEdsdWUgc2NyaXB0IGZvciBqb2IgZXhlY3V0aW9uLiAqL1xuICByZWFkb25seSBzY3JpcHRMb2NhdGlvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBKb2JXb3JrZXJUeXBlID0gJ1N0YW5kYXJkJyB8ICdHLjFYJyB8ICdHLjJYJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBhIEdsdWUgam9iIGluY2x1ZGluZyBleGVjdXRpb24gcm9sZXMsIGNvbW1hbmRzLCBjYXBhY2l0eSwgYW5kIG1vbml0b3JpbmcuXG4gKlxuICogVXNlIGNhc2VzOiBFVEwgam9iIGNvbmZpZ3VyYXRpb247IERhdGEgdHJhbnNmb3JtYXRpb247IEpvYiByZXNvdXJjZSBtYW5hZ2VtZW50OyBEYXRhT3BzIHByb2Nlc3NpbmdcbiAqXG4gKiBBV1M6IEdsdWUgam9iIGNvbmZpZ3VyYXRpb24gZm9yIEVUTCBwcm9jZXNzaW5nIGFuZCBkYXRhIHRyYW5zZm9ybWF0aW9uIHdvcmtmbG93c1xuICpcbiAqIFZhbGlkYXRpb246IGV4ZWN1dGlvblJvbGVBcm4sIGNvbW1hbmQsIGFuZCBkZXNjcmlwdGlvbiBhcmUgcmVxdWlyZWQ7IG90aGVyIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsIHdpdGggc3BlY2lmaWMgY29uc3RyYWludHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKb2JDb25maWcge1xuICAvKiogSUFNIHJvbGUgQVJOIGZvciBHbHVlIGpvYiBleGVjdXRpb24gcGVybWlzc2lvbnMuICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGVBcm46IHN0cmluZztcbiAgLyoqIEpvYiBjb21tYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pbmcgc2NyaXB0IGFuZCBydW50aW1lIGVudmlyb25tZW50LiAqL1xuICByZWFkb25seSBjb21tYW5kOiBKb2JDb21tYW5kO1xuICAvKiogVGVtcGxhdGUgbmFtZSBmb3IgY29uZmlndXJhdGlvbiBpbmhlcml0YW5jZS4gKi9cbiAgcmVhZG9ubHkgdGVtcGxhdGU/OiBzdHJpbmc7XG4gIC8qKiBOdW1iZXIgb2YgY2FwYWNpdHkgdW5pdHMgYWxsb2NhdGVkIHRvIHRoZSBqb2IuICovXG4gIHJlYWRvbmx5IGFsbG9jYXRlZENhcGFjaXR5PzogbnVtYmVyO1xuICAvKiogQ29ubmVjdGlvbiBuYW1lcyBmb3IgZGF0YWJhc2UgYW5kIGV4dGVybmFsIHN5c3RlbSBhY2Nlc3MuICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpb25zPzogc3RyaW5nW107XG4gIC8qKiBEZWZhdWx0IGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGpvYiBhdCBydW50aW1lLiAqL1xuICByZWFkb25seSBkZWZhdWx0QXJndW1lbnRzPzogQ29uZmlndXJhdGlvbkVsZW1lbnQ7XG4gIC8qKiBKb2IgZGVzY3JpcHRpb24gZm9yIGRvY3VtZW50YXRpb24gYW5kIG1hbmFnZW1lbnQuICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKiBFeGVjdXRpb24gcHJvcGVydGllcyBpbmNsdWRpbmcgbWF4aW11bSBjb25jdXJyZW50IHJ1bnMuICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblByb3BlcnR5PzogQ2ZuSm9iLkV4ZWN1dGlvblByb3BlcnR5UHJvcGVydHk7XG4gIC8qKiBHbHVlIHJ1bnRpbWUgdmVyc2lvbiBmb3IgdGhlIGpvYi4gKi9cbiAgcmVhZG9ubHkgZ2x1ZVZlcnNpb24/OiBzdHJpbmc7XG4gIC8qKiBNYXhpbXVtIERQVSBjYXBhY2l0eSBmb3IgdGhlIGpvYi4gKi9cbiAgcmVhZG9ubHkgbWF4Q2FwYWNpdHk/OiBudW1iZXI7XG4gIC8qKiBNYXhpbXVtIHJldHJ5IGNvdW50IGJlZm9yZSBqb2IgZmFpbHVyZS4gKi9cbiAgcmVhZG9ubHkgbWF4UmV0cmllcz86IG51bWJlcjtcbiAgLyoqIE5vdGlmaWNhdGlvbiBzZXR0aW5ncyBmb3Igam9iIG1vbml0b3JpbmcgYW5kIGFsZXJ0aW5nLiAqL1xuICByZWFkb25seSBub3RpZmljYXRpb25Qcm9wZXJ0eT86IENmbkpvYi5Ob3RpZmljYXRpb25Qcm9wZXJ0eVByb3BlcnR5O1xuICAvKiogTnVtYmVyIG9mIHdvcmtlcnMgZm9yIHBhcmFsbGVsIHByb2Nlc3NpbmcuICovXG4gIHJlYWRvbmx5IG51bWJlck9mV29ya2Vycz86IG51bWJlcjtcbiAgLyoqIEpvYiB0aW1lb3V0IGluIG1pbnV0ZXMuICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBudW1iZXI7XG4gIC8qKiBXb3JrZXIgdHlwZTogJ1N0YW5kYXJkJywgJ0cuMVgnLCBvciAnRy4yWCcuICovXG4gIHJlYWRvbmx5IHdvcmtlclR5cGU/OiBKb2JXb3JrZXJUeXBlO1xuICAvKiogUmVsYXRpdmUgcGF0aHMgdG8gYWRkaXRpb25hbCBQeXRob24gc2NyaXB0cyBmb3IgdGhlIGpvYi4gKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFNjcmlwdHM/OiBzdHJpbmdbXTtcbiAgLyoqIFJlbGF0aXZlIHBhdGhzIHRvIGFkZGl0aW9uYWwgSkFSIGZpbGVzIGZvciB0aGUgam9iLiAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsSmFycz86IHN0cmluZ1tdO1xuICAvKiogUmVsYXRpdmUgcGF0aHMgdG8gYWRkaXRpb25hbCBmaWxlcyBmb3IgdGhlIGpvYi4gKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEZpbGVzPzogc3RyaW5nW107XG4gIC8qKiBDb250aW51b3VzIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBmb3IgcmVhbC10aW1lIG1vbml0b3JpbmcuICovXG4gIHJlYWRvbmx5IGNvbnRpbnVvdXNMb2dnaW5nPzogTG9nZ2luZ0NvbmZpZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHbHVlSm9iTDNDb25zdHJ1Y3RQcm9wcyBleHRlbmRzIE1kYWFMM0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFJvbGUgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGRlcGxveSB0aGUgSm9iIGNvZGUuIFNob3VsZCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBEYXRhT3BzIFByb2plY3RcbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveW1lbnRSb2xlQXJuPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIERhdGEgT3BzIHByb2plY3QgYnVja2V0IHdoZXJlIGpvYiByZXNvdXJjZXMgd2lsbCBiZSBkZXBsb3llZCBhbmQgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgdGVtcG9yYXJ5IGpvYiBsb2NhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0TmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIE1hcCBvZiBqb2IgbmFtZXMgdG8gam9iIGNvbmZpZ3VyYXRpb25zXG4gICAqL1xuICByZWFkb25seSBqb2JDb25maWdzOiB7IFtrZXk6IHN0cmluZ106IEpvYkNvbmZpZyB9O1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgR2x1ZSBTZWN1cml0eSBjb25maWd1cmF0aW9uIHRvIGJlIHVzZWQgZm9yIGFsbCBqb2JzLiBMaWtlbHkgc3VwcGxpZWQgYnkgdGhlIERhdGFPcHMgUHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5Q29uZmlndXJhdGlvbk5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBkYXRhb3BzIHByb2plY3QgdG8gd2hpY2ggdGhlIGpvYiB3aWxsIGJlIGFzc29jaWF0ZWQuXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogTm90aWZpY2F0aW9uIHRvcGljIEFyblxuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uVG9waWNBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERhdGFvcHMgcHJvamVjdCBLTVMga2V5IEFSTi5cbiAgICovXG4gIHJlYWRvbmx5IGttc0Fybj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEdsdWVKb2JMM0NvbnN0cnVjdCBleHRlbmRzIE1kYWFMM0NvbnN0cnVjdCB7XG4gIHByb3RlY3RlZCByZWFkb25seSBwcm9wczogR2x1ZUpvYkwzQ29uc3RydWN0UHJvcHM7XG4gIHByaXZhdGUgcmVhZG9ubHkga21zS2V5OiBJS2V5O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBHbHVlSm9iTDNDb25zdHJ1Y3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIGlmICghdGhpcy5wcm9wcy5kZXBsb3ltZW50Um9sZUFybikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEZXBsb3ltZW50IHJvbGUgQVJOIGlzIHJlcXVpcmVkIGZvciBqb2IgY29uZmlndXJhdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCBkZXBsb3ltZW50Um9sZSA9IE1kYWFSb2xlLmZyb21Sb2xlQXJuKHRoaXMuc2NvcGUsIGBkZXBsb3ltZW50LXJvbGVgLCB0aGlzLnByb3BzLmRlcGxveW1lbnRSb2xlQXJuKTtcbiAgICBpZiAoIXRoaXMucHJvcHMuYnVja2V0TmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0IGJ1Y2tldCBuYW1lIGlzIHJlcXVpcmVkIGZvciBqb2IgY29uZmlndXJhdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCBidWNrZXQgPSBNZGFhQnVja2V0LmZyb21CdWNrZXROYW1lKHRoaXMuc2NvcGUsIGBwcm9qZWN0LWJ1Y2tldGAsIHRoaXMucHJvcHMuYnVja2V0TmFtZSk7XG4gICAgaWYgKCF0aGlzLnByb3BzLmttc0Fybikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0IEtNUyBLZXkgaXMgcmVxdWlyZWQgZm9yIGpvYiBjb25maWd1cmF0aW9uJyk7XG4gICAgfVxuICAgIHRoaXMua21zS2V5ID0gS2V5LmZyb21LZXlBcm4odGhpcywgdGhpcy5wcm9wcy5wcm9qZWN0TmFtZSA/PyAna21zLWtleScsIHRoaXMucHJvcHMua21zQXJuKTtcblxuICAgIC8vIEJ1aWxkIG91ciBqb2JzIVxuICAgIGNvbnN0IGFsbEpvYnMgPSB0aGlzLnByb3BzLmpvYkNvbmZpZ3M7XG4gICAgT2JqZWN0LmtleXMoYWxsSm9icykuZm9yRWFjaChqb2JOYW1lID0+IHtcbiAgICAgIGNvbnN0IGpvYkNvbmZpZyA9IGFsbEpvYnNbam9iTmFtZV07XG4gICAgICB0aGlzLmNyZWF0ZUpvYihqb2JOYW1lLCBqb2JDb25maWcsIGRlcGxveW1lbnRSb2xlLCBidWNrZXQpO1xuICAgIH0pO1xuICAgIC8vQ0RLIFMzIERlcGxveW1lbnQgYXV0b21hdGljYWxseSBhZGRzIGlubGluZSBwb2xpY3kgdG8gcHJvamVjdCBkZXBsb3ltZW50IHJvbGUuXG4gICAgdGhpcy5zY29wZS5ub2RlLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgaWYgKGNoaWxkLm5vZGUuaWQuc3RhcnRzV2l0aCgnZGVwbG95bWVudC1yb2xlJykpIHtcbiAgICAgICAgTWRhYU5hZ1N1cHByZXNzaW9ucy5hZGRDb2RlUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICAgICAgY2hpbGQsXG4gICAgICAgICAgW1xuICAgICAgICAgICAgeyBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JywgcmVhc29uOiAnSW5saW5lIHBvbGljeSB1c2VkIG9ubHkgZm9yIGRlcGxveW1lbnQuJyB9LFxuICAgICAgICAgICAgeyBpZDogJ05JU1QuODAwLjUzLlI1LUlBTU5vSW5saW5lUG9saWN5JywgcmVhc29uOiAnUG9saWN5IHVzZWQgb25seSBmb3IgZGVwbG95bWVudC4nIH0sXG4gICAgICAgICAgICB7IGlkOiAnSElQQUEuU2VjdXJpdHktSUFNTm9JbmxpbmVQb2xpY3knLCByZWFzb246ICdQb2xpY3kgdXNlZCBvbmx5IGZvciBkZXBsb3ltZW50LicgfSxcbiAgICAgICAgICAgIHsgaWQ6ICdQQ0kuRFNTLjMyMS1JQU1Ob0lubGluZVBvbGljeScsIHJlYXNvbjogJ1BvbGljeSB1c2VkIG9ubHkgZm9yIGRlcGxveW1lbnQuJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGVwbG95QWRkaXRpb25hbEZpbGVzKFxuICAgIGFkZGl0aW9uYWxGaWxlc1NvdXJjZXM6IElTb3VyY2VbXSxcbiAgICBidWNrZXQ6IElCdWNrZXQsXG4gICAgZGVwbG95bWVudFJvbGU6IElSb2xlLFxuICAgIGRlcGxveW1lbnRJZDogc3RyaW5nLFxuICAgIGRlcGxveW1lbnRQYXRoOiBzdHJpbmcsXG4gICAgZXh0cmFjdDogYm9vbGVhbixcbiAgKTogQnVja2V0RGVwbG95bWVudCB7XG4gICAgLy8gRGVwbG95IFNvdXJjZSBhc3NldChzKSB0byAvZGVwbG95bWVudC9saWJzLzxqb2I+IGxvY2F0aW9uLlxuICAgIHJldHVybiBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLnNjb3BlLCBkZXBsb3ltZW50SWQsIHtcbiAgICAgIHNvdXJjZXM6IGFkZGl0aW9uYWxGaWxlc1NvdXJjZXMsXG4gICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogYnVja2V0LFxuICAgICAgZGVzdGluYXRpb25LZXlQcmVmaXg6IGRlcGxveW1lbnRQYXRoLFxuICAgICAgcm9sZTogZGVwbG95bWVudFJvbGUsXG4gICAgICBleHRyYWN0OiBleHRyYWN0LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRBZGRpdGlvbmFsU2NyaXB0cyhcbiAgICBqb2JOYW1lOiBzdHJpbmcsXG4gICAgam9iQ29uZmlnOiBKb2JDb25maWcsXG4gICAgYnVja2V0OiBJQnVja2V0LFxuICAgIGRlcGxveW1lbnRSb2xlOiBJUm9sZSxcbiAgICBkZWZhdWx0QXJndW1lbnRzOiBDb25maWd1cmF0aW9uRWxlbWVudCxcbiAgKSB7XG4gICAgaWYgKGpvYkNvbmZpZy5hZGRpdGlvbmFsU2NyaXB0cykge1xuICAgICAgLyoqXG4gICAgICAgKiBHcm91cCBhbGwgZmlsZXMgYXQgcGFyZW50IGRpcmVjdG9yeSBsZXZlbC4gVGhpcyB3aWxsIGFsbG93IGNyZWF0aW5nIHppcCBsaWIgYXNzZXN0cyBhdCB2YXJpb3VzIGRpcmVjdG9yeSBsZXZlbHNcbiAgICAgICAqIGV4LiAnL21haW4vc2NyaXB0MS5weScgLCAnL3V0aWwvc2NyaXB0Mi5weScgLCAnL3V0aWwvc2NyaXB0My5weScgd2lsbCBjcmVhdGUgMiB6aXAgZmlsZXMgcmVwcmVzZW50aW5nICdtYWluJyBhbmQgJ3V0aWxzJ1xuICAgICAgICogICovXG4gICAgICBjb25zdCBkaXJlY3RvcnlUb0ZpbGU6IHsgW2ZpbGVQYXRoOiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge307XG4gICAgICBqb2JDb25maWcuYWRkaXRpb25hbFNjcmlwdHMuZm9yRWFjaChmaWxlTG9jYXRpb24gPT4ge1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguZGlybmFtZShmaWxlTG9jYXRpb24udHJpbSgpKTtcbiAgICAgICAgaWYgKGZpbGVQYXRoIGluIGRpcmVjdG9yeVRvRmlsZSkge1xuICAgICAgICAgIGRpcmVjdG9yeVRvRmlsZVtmaWxlUGF0aF0ucHVzaChgISR7cGF0aC5iYXNlbmFtZShmaWxlTG9jYXRpb24udHJpbSgpKX1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaXJlY3RvcnlUb0ZpbGVbZmlsZVBhdGhdID0gW2AhJHtwYXRoLmJhc2VuYW1lKGZpbGVMb2NhdGlvbi50cmltKCkpfWBdO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gQ3JlYXRlIFNvdXJjZSBhc3NldCBmb3IgZWFjaCBkaXJlY3RvcnlcbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxGaWxlc1NvdXJjZXMgPSBPYmplY3QuZW50cmllcyhkaXJlY3RvcnlUb0ZpbGUpLm1hcCgoW2ZpbGVQYXRoLCBmaWxlTmFtZXNdKSA9PiB7XG4gICAgICAgIHJldHVybiBTb3VyY2UuYXNzZXQoZmlsZVBhdGgsIHsgZXhjbHVkZTogWycqKicsIC4uLmZpbGVOYW1lc10gfSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRlcGxveW1lbnRQYXRoID0gYGRlcGxveW1lbnQvbGlicy8ke2pvYk5hbWV9YDtcbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxGaWxlRGVwbG95bWVudCA9IHRoaXMuZGVwbG95QWRkaXRpb25hbEZpbGVzKFxuICAgICAgICBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzLFxuICAgICAgICBidWNrZXQsXG4gICAgICAgIGRlcGxveW1lbnRSb2xlLFxuICAgICAgICBgam9iLWRlcGxveW1lbnQtJHtqb2JOYW1lfS1hZGRpdGlvbmFsLXNjcmlwdGAsXG4gICAgICAgIGRlcGxveW1lbnRQYXRoLFxuICAgICAgICBmYWxzZSwgLy8gR2x1ZSBleHBlY3RzIHppcCBvZiBhZGRpdGlvbmFsIHNjcmlwdHMsIGhlbmNlIGRpc2FibGluZyB0aGUgZXh0cmFjdGlvblxuICAgICAgKTtcblxuICAgICAgLy8gRXh0cmFjdCB6aXAgbmFtZShzKSBmb3IgZWFjaCBzb3VyY2UgYW5kIGNyZWF0ZSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBzMyBsb2NhdGlvbnNcbiAgICAgIGNvbnN0IGxpYnJhcnlaaXBOYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGxpYk5hbWUgPSBGbi5zZWxlY3QoaSwgYWRkaXRpb25hbEZpbGVEZXBsb3ltZW50Lm9iamVjdEtleXMpOyAvLyBFeHRyYWN0IGZpbGUgbmFtZSBvZiB6aXAgY29udGFpbmluZyBhZGRpdGlvbmFsIHNjcmlwdHNcbiAgICAgICAgbGlicmFyeVppcE5hbWVzLnB1c2goYHMzOi8vJHthZGRpdGlvbmFsRmlsZURlcGxveW1lbnQuZGVwbG95ZWRCdWNrZXQuYnVja2V0TmFtZX0vJHtkZXBsb3ltZW50UGF0aH0vJHtsaWJOYW1lfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgemlwIGZpbGUgbmFtZXMgdG8gZGVmYXVsdCBhcmd1bWVudHMuXG4gICAgICBpZiAoZGVmYXVsdEFyZ3VtZW50c1snLS1leHRyYS1weS1maWxlcyddKSB7XG4gICAgICAgIGRlZmF1bHRBcmd1bWVudHNbJy0tZXh0cmEtcHktZmlsZXMnXSArPSAnLCcgKyBsaWJyYXJ5WmlwTmFtZXMuam9pbignLCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmYXVsdEFyZ3VtZW50c1snLS1leHRyYS1weS1maWxlcyddID0gbGlicmFyeVppcE5hbWVzLmpvaW4oJywnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZEFkZGl0aW9uYWxKYXJzKFxuICAgIGpvYk5hbWU6IHN0cmluZyxcbiAgICBqb2JDb25maWc6IEpvYkNvbmZpZyxcbiAgICBidWNrZXQ6IElCdWNrZXQsXG4gICAgZGVwbG95bWVudFJvbGU6IElSb2xlLFxuICAgIGRlZmF1bHRBcmd1bWVudHM6IENvbmZpZ3VyYXRpb25FbGVtZW50LFxuICApIHtcbiAgICBpZiAoam9iQ29uZmlnLmFkZGl0aW9uYWxKYXJzKSB7XG4gICAgICAvLyBDcmVhdGUgU291cmNlIGFzc2V0IGZvciBlYWNoIGRpcmVjdG9yeVxuICAgICAgY29uc3QgYWRkaXRpb25hbEZpbGVzU291cmNlcyA9IGpvYkNvbmZpZy5hZGRpdGlvbmFsSmFycy5tYXAoZnVsbEZpbGVOYW1lID0+IHtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmRpcm5hbWUoZnVsbEZpbGVOYW1lLnRyaW0oKSk7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmdWxsRmlsZU5hbWUudHJpbSgpKTtcbiAgICAgICAgcmV0dXJuIFNvdXJjZS5hc3NldChmaWxlUGF0aCwgeyBleGNsdWRlOiBbJyoqJywgYCEke2ZpbGVOYW1lfWBdIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBkZXBsb3ltZW50UGF0aCA9IGBkZXBsb3ltZW50L2xpYnMvJHtqb2JOYW1lfWA7XG5cbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxGaWxlRGVwbG95bWVudCA9IHRoaXMuZGVwbG95QWRkaXRpb25hbEZpbGVzKFxuICAgICAgICBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzLFxuICAgICAgICBidWNrZXQsXG4gICAgICAgIGRlcGxveW1lbnRSb2xlLFxuICAgICAgICBgam9iLWRlcGxveW1lbnQtJHtqb2JOYW1lfS1hZGRpdGlvbmFsLWphcmAsXG4gICAgICAgIGRlcGxveW1lbnRQYXRoLFxuICAgICAgICB0cnVlLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgZXh0cmFKYXJOYW1lcyA9IGpvYkNvbmZpZy5hZGRpdGlvbmFsSmFycy5tYXAoZnVsbEZpbGVOYW1lID0+IHtcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGZ1bGxGaWxlTmFtZS50cmltKCkpO1xuICAgICAgICByZXR1cm4gYHMzOi8vJHthZGRpdGlvbmFsRmlsZURlcGxveW1lbnQuZGVwbG95ZWRCdWNrZXQuYnVja2V0TmFtZX0vJHtkZXBsb3ltZW50UGF0aH0vJHtmaWxlTmFtZX1gO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEFkZCBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiB6aXAgZmlsZSBuYW1lcyB0byBkZWZhdWx0IGFyZ3VtZW50cy5cbiAgICAgIGlmIChkZWZhdWx0QXJndW1lbnRzWyctLWV4dHJhLWphcnMnXSkge1xuICAgICAgICBkZWZhdWx0QXJndW1lbnRzWyctLWV4dHJhLWphcnMnXSArPSAnLCcgKyBleHRyYUphck5hbWVzLmpvaW4oJywnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRBcmd1bWVudHNbJy0tZXh0cmEtamFycyddID0gZXh0cmFKYXJOYW1lcy5qb2luKCcsJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRBZGRpdGlvbmFsRmlsZXMoXG4gICAgam9iTmFtZTogc3RyaW5nLFxuICAgIGpvYkNvbmZpZzogSm9iQ29uZmlnLFxuICAgIGJ1Y2tldDogSUJ1Y2tldCxcbiAgICBkZXBsb3ltZW50Um9sZTogSVJvbGUsXG4gICAgZGVmYXVsdEFyZ3VtZW50czogQ29uZmlndXJhdGlvbkVsZW1lbnQsXG4gICkge1xuICAgIGlmIChqb2JDb25maWcuYWRkaXRpb25hbEZpbGVzKSB7XG4gICAgICAvLyBDcmVhdGUgU291cmNlIGFzc2V0IGZvciBlYWNoIGRpcmVjdG9yeVxuICAgICAgY29uc3QgYWRkaXRpb25hbEZpbGVzU291cmNlcyA9IGpvYkNvbmZpZy5hZGRpdGlvbmFsRmlsZXMubWFwKGZ1bGxGaWxlTmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5kaXJuYW1lKGZ1bGxGaWxlTmFtZS50cmltKCkpO1xuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoZnVsbEZpbGVOYW1lLnRyaW0oKSk7XG4gICAgICAgIHJldHVybiBTb3VyY2UuYXNzZXQoZmlsZVBhdGgsIHsgZXhjbHVkZTogWycqKicsIGAhJHtmaWxlTmFtZX1gXSB9KTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGVwbG95bWVudFBhdGggPSBgZGVwbG95bWVudC9maWxlcy8ke2pvYk5hbWV9YDtcbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxGaWxlRGVwbG95bWVudCA9IHRoaXMuZGVwbG95QWRkaXRpb25hbEZpbGVzKFxuICAgICAgICBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzLFxuICAgICAgICBidWNrZXQsXG4gICAgICAgIGRlcGxveW1lbnRSb2xlLFxuICAgICAgICBgam9iLWRlcGxveW1lbnQtJHtqb2JOYW1lfS1hZGRpdGlvbmFsLWZpbGVgLFxuICAgICAgICBkZXBsb3ltZW50UGF0aCxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG4gICAgICBjb25zdCBleHRyYUZpbGVOYW1lcyA9IGpvYkNvbmZpZy5hZGRpdGlvbmFsRmlsZXMubWFwKGZ1bGxGaWxlTmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmdWxsRmlsZU5hbWUudHJpbSgpKTtcbiAgICAgICAgcmV0dXJuIGBzMzovLyR7YWRkaXRpb25hbEZpbGVEZXBsb3ltZW50LmRlcGxveWVkQnVja2V0LmJ1Y2tldE5hbWV9LyR7ZGVwbG95bWVudFBhdGh9LyR7ZmlsZU5hbWV9YDtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBZGQgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgemlwIGZpbGUgbmFtZXMgdG8gZGVmYXVsdCBhcmd1bWVudHMuXG4gICAgICBpZiAoZGVmYXVsdEFyZ3VtZW50c1snLS1leHRyYS1maWxlcyddKSB7XG4gICAgICAgIGRlZmF1bHRBcmd1bWVudHNbJy0tZXh0cmEtZmlsZXMnXSArPSAnLCcgKyBleHRyYUZpbGVOYW1lcy5qb2luKCcsJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0QXJndW1lbnRzWyctLWV4dHJhLWZpbGVzJ10gPSBleHRyYUZpbGVOYW1lcy5qb2luKCcsJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVKb2Ioam9iTmFtZTogc3RyaW5nLCBqb2JDb25maWc6IEpvYkNvbmZpZywgZGVwbG95bWVudFJvbGU6IElSb2xlLCBidWNrZXQ6IElCdWNrZXQpIHtcbiAgICBjb25zdCBkZWZhdWx0QXJndW1lbnRzID0gam9iQ29uZmlnLmRlZmF1bHRBcmd1bWVudHMgPyBqb2JDb25maWcuZGVmYXVsdEFyZ3VtZW50cyA6IHt9O1xuICAgIGNvbnN0IHNjcmlwdFBhdGggPSBwYXRoLmRpcm5hbWUoam9iQ29uZmlnLmNvbW1hbmQuc2NyaXB0TG9jYXRpb24udHJpbSgpKTtcbiAgICBjb25zdCBzY3JpcHROYW1lID0gcGF0aC5iYXNlbmFtZShqb2JDb25maWcuY29tbWFuZC5zY3JpcHRMb2NhdGlvbi50cmltKCkpO1xuICAgIGNvbnN0IHNjcmlwdFNvdXJjZSA9IFNvdXJjZS5hc3NldChzY3JpcHRQYXRoLCB7IGV4Y2x1ZGU6IFsnKionLCBgISR7c2NyaXB0TmFtZX1gXSB9KTtcblxuICAgIGNvbnN0IHNjcmlwdERlcGxveW1lbnRQYXRoID0gYGRlcGxveW1lbnQvam9icy8ke2pvYk5hbWV9YDtcbiAgICBjb25zdCBzY3JpcHREZXBsb3ltZW50ID0gbmV3IEJ1Y2tldERlcGxveW1lbnQodGhpcy5zY29wZSwgYGpvYi1kZXBsb3ltZW50LSR7am9iTmFtZX1gLCB7XG4gICAgICBzb3VyY2VzOiBbc2NyaXB0U291cmNlXSxcbiAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiBidWNrZXQsXG4gICAgICBkZXN0aW5hdGlvbktleVByZWZpeDogc2NyaXB0RGVwbG95bWVudFBhdGgsXG4gICAgICByb2xlOiBkZXBsb3ltZW50Um9sZSxcbiAgICAgIGV4dHJhY3Q6IHRydWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZEFkZGl0aW9uYWxTY3JpcHRzKGpvYk5hbWUsIGpvYkNvbmZpZywgYnVja2V0LCBkZXBsb3ltZW50Um9sZSwgZGVmYXVsdEFyZ3VtZW50cyk7XG4gICAgdGhpcy5hZGRBZGRpdGlvbmFsSmFycyhqb2JOYW1lLCBqb2JDb25maWcsIGJ1Y2tldCwgZGVwbG95bWVudFJvbGUsIGRlZmF1bHRBcmd1bWVudHMpO1xuICAgIHRoaXMuYWRkQWRkaXRpb25hbEZpbGVzKGpvYk5hbWUsIGpvYkNvbmZpZywgYnVja2V0LCBkZXBsb3ltZW50Um9sZSwgZGVmYXVsdEFyZ3VtZW50cyk7XG4gICAgTWRhYU5hZ1N1cHByZXNzaW9ucy5hZGRDb2RlUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICB0aGlzLnNjb3BlLFxuICAgICAgW1xuICAgICAgICB7IGlkOiAnQXdzU29sdXRpb25zLUwxJywgcmVhc29uOiAnRnVuY3Rpb24gaXMgdXNlZCBvbmx5IGFzIGN1c3RvbSByZXNvdXJjZSBkdXJpbmcgQ0RLIGRlcGxveW1lbnQuJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdOSVNULjgwMC41My5SNS1MYW1iZGFDb25jdXJyZW5jeScsXG4gICAgICAgICAgcmVhc29uOiAnRnVuY3Rpb24gaXMgdXNlZCBvbmx5IGFzIGN1c3RvbSByZXNvdXJjZSBkdXJpbmcgQ0RLIGRlcGxveW1lbnQuJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnTklTVC44MDAuNTMuUjUtTGFtYmRhSW5zaWRlVlBDJyxcbiAgICAgICAgICByZWFzb246ICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudCBhbmQgaW50ZXJhY3RzIG9ubHkgd2l0aCBTMy4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdOSVNULjgwMC41My5SNS1MYW1iZGFETFEnLFxuICAgICAgICAgIHJlYXNvbjpcbiAgICAgICAgICAgICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudC4gRXJyb3JzIHdpbGwgYmUgaGFuZGxlZCBieSBDbG91ZEZvcm1hdGlvbi4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdISVBBQS5TZWN1cml0eS1MYW1iZGFDb25jdXJyZW5jeScsXG4gICAgICAgICAgcmVhc29uOiAnRnVuY3Rpb24gaXMgdXNlZCBvbmx5IGFzIGN1c3RvbSByZXNvdXJjZSBkdXJpbmcgQ0RLIGRlcGxveW1lbnQuJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnUENJLkRTUy4zMjEtTGFtYmRhQ29uY3VycmVuY3knLFxuICAgICAgICAgIHJlYXNvbjogJ0Z1bmN0aW9uIGlzIHVzZWQgb25seSBhcyBjdXN0b20gcmVzb3VyY2UgZHVyaW5nIENESyBkZXBsb3ltZW50LicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0hJUEFBLlNlY3VyaXR5LUxhbWJkYUluc2lkZVZQQycsXG4gICAgICAgICAgcmVhc29uOiAnRnVuY3Rpb24gaXMgdXNlZCBvbmx5IGFzIGN1c3RvbSByZXNvdXJjZSBkdXJpbmcgQ0RLIGRlcGxveW1lbnQgYW5kIGludGVyYWN0cyBvbmx5IHdpdGggUzMuJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnUENJLkRTUy4zMjEtTGFtYmRhSW5zaWRlVlBDJyxcbiAgICAgICAgICByZWFzb246ICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudCBhbmQgaW50ZXJhY3RzIG9ubHkgd2l0aCBTMy4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdISVBBQS5TZWN1cml0eS1MYW1iZGFETFEnLFxuICAgICAgICAgIHJlYXNvbjpcbiAgICAgICAgICAgICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudC4gRXJyb3JzIHdpbGwgYmUgaGFuZGxlZCBieSBDbG91ZEZvcm1hdGlvbi4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdQQ0kuRFNTLjMyMS1MYW1iZGFETFEnLFxuICAgICAgICAgIHJlYXNvbjpcbiAgICAgICAgICAgICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudC4gRXJyb3JzIHdpbGwgYmUgaGFuZGxlZCBieSBDbG91ZEZvcm1hdGlvbi4nLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHRydWUsXG4gICAgKTtcbiAgICAvLyBDb25uZWN0aW9ucyB3aWxsIHJlcXVpcmUgYW4gYXJyYXkgb2YgcmVmZXJlbmNlcyB3aGVyZSB0aGV5IGFyZSBkZWZpbmVkXG4gICAgbGV0IGNvbm5lY3Rpb25zQ29uZmlndXJlZDogQ29uZmlndXJhdGlvbkVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGpvYkNvbmZpZy5jb25uZWN0aW9ucykge1xuICAgICAgY29ubmVjdGlvbnNDb25maWd1cmVkID0ge1xuICAgICAgICBjb25uZWN0aW9uczogam9iQ29uZmlnLmNvbm5lY3Rpb25zLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBkZWZhdWx0QXJndW1lbnRzWyctLVRlbXBEaXInXSA9IGBzMzovLyR7dGhpcy5wcm9wcy5idWNrZXROYW1lfS90ZW1wL2pvYnMvJHtqb2JOYW1lfWA7XG5cbiAgICAvLyBhZGQgY29udGludW91cyBsb2dnaW5nIHVubGVzcyBleHBsaWNpdGx5IGRpc2FibGVkXG4gICAgaWYgKGpvYkNvbmZpZy5jb250aW51b3VzTG9nZ2luZykge1xuICAgICAgY29uc3QgbG9nR3JvdXBOYW1lID0gam9iTmFtZTtcbiAgICAgIGNvbnN0IGxvZ0dyb3VwTmFtZVBhdGhQcmVmaXggPSAnL2F3cy9nbHVlJztcbiAgICAgIGRlZmF1bHRBcmd1bWVudHNbJy0tY29udGludW91cy1sb2ctbG9nR3JvdXAnXSA9IHRoaXMuY3JlYXRlTG9nR3JvdXAoXG4gICAgICAgIGxvZ0dyb3VwTmFtZVBhdGhQcmVmaXgsXG4gICAgICAgIGxvZ0dyb3VwTmFtZSxcbiAgICAgICAgam9iQ29uZmlnLmNvbnRpbnVvdXNMb2dnaW5nLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYENvbnRpbnVvdXMgbG9nZ2luZyBub3QgZW5hYmxlZCBmb3Igam9iOiAke2pvYk5hbWV9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXRQYXJhbXMgPSBkZWZhdWx0QXJndW1lbnRzWyctLWlucHV0X3BhcmFtcyddO1xuICAgIGlmIChpbnB1dFBhcmFtcykge1xuICAgICAgZGVmYXVsdEFyZ3VtZW50c1snLS1pbnB1dF9wYXJhbXMnXSA9IEpTT04uc3RyaW5naWZ5KGlucHV0UGFyYW1zKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnByb3BzLnNlY3VyaXR5Q29uZmlndXJhdGlvbk5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2VjdXJpdHkgY29uZmlndXJhdGlvbiBuYW1lIGlzIHJlcXVpcmVkIGZvciBqb2IgbW9uaXRvcmluZyBldmVudCBydWxlJyk7XG4gICAgfVxuICAgIGNvbnN0IGpvYiA9IG5ldyBNZGFhQ2ZuSm9iKHRoaXMuc2NvcGUsIGAke2pvYk5hbWV9LWpvYmAsIHtcbiAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgbmFtZTogam9iQ29uZmlnLmNvbW1hbmQubmFtZSxcbiAgICAgICAgcHl0aG9uVmVyc2lvbjogam9iQ29uZmlnLmNvbW1hbmQucHl0aG9uVmVyc2lvbixcbiAgICAgICAgc2NyaXB0TG9jYXRpb246IGBzMzovLyR7c2NyaXB0RGVwbG95bWVudC5kZXBsb3llZEJ1Y2tldC5idWNrZXROYW1lfS8ke3NjcmlwdERlcGxveW1lbnRQYXRofS8ke3NjcmlwdE5hbWV9YCxcbiAgICAgIH0sXG4gICAgICByb2xlOiBqb2JDb25maWcuZXhlY3V0aW9uUm9sZUFybixcbiAgICAgIGFsbG9jYXRlZENhcGFjaXR5OiBqb2JDb25maWcuYWxsb2NhdGVkQ2FwYWNpdHksXG4gICAgICBjb25uZWN0aW9uczogY29ubmVjdGlvbnNDb25maWd1cmVkLFxuICAgICAgZGVmYXVsdEFyZ3VtZW50czogZGVmYXVsdEFyZ3VtZW50cyxcbiAgICAgIGRlc2NyaXB0aW9uOiBqb2JDb25maWcuZGVzY3JpcHRpb24sXG4gICAgICBleGVjdXRpb25Qcm9wZXJ0eTogam9iQ29uZmlnLmV4ZWN1dGlvblByb3BlcnR5LFxuICAgICAgZ2x1ZVZlcnNpb246IGpvYkNvbmZpZy5nbHVlVmVyc2lvbixcbiAgICAgIG1heENhcGFjaXR5OiBqb2JDb25maWcubWF4Q2FwYWNpdHksXG4gICAgICBtYXhSZXRyaWVzOiBqb2JDb25maWcubWF4UmV0cmllcyxcbiAgICAgIG5hbWU6IGpvYk5hbWUsXG4gICAgICBub3RpZmljYXRpb25Qcm9wZXJ0eTogam9iQ29uZmlnLm5vdGlmaWNhdGlvblByb3BlcnR5LFxuICAgICAgbnVtYmVyT2ZXb3JrZXJzOiBqb2JDb25maWcubnVtYmVyT2ZXb3JrZXJzLFxuICAgICAgc2VjdXJpdHlDb25maWd1cmF0aW9uOiB0aGlzLnByb3BzLnNlY3VyaXR5Q29uZmlndXJhdGlvbk5hbWUsXG4gICAgICB0aW1lb3V0OiBqb2JDb25maWcudGltZW91dCxcbiAgICAgIHdvcmtlclR5cGU6IGpvYkNvbmZpZy53b3JrZXJUeXBlLFxuICAgICAgbmFtaW5nOiB0aGlzLnByb3BzLm5hbWluZyxcbiAgICB9KTtcbiAgICBpZiAoam9iLm5hbWUgJiYgdGhpcy5wcm9wcy5wcm9qZWN0TmFtZSkge1xuICAgICAgRGF0YU9wc1Byb2plY3RVdGlscy5jcmVhdGVQcm9qZWN0U1NNUGFyYW0oXG4gICAgICAgIHRoaXMuc2NvcGUsXG4gICAgICAgIHRoaXMucHJvcHMubmFtaW5nLFxuICAgICAgICB0aGlzLnByb3BzLnByb2plY3ROYW1lLFxuICAgICAgICBgam9iL25hbWUvJHtqb2JOYW1lfWAsXG4gICAgICAgIGpvYi5uYW1lLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgZXZlbnRSdWxlID0gdGhpcy5jcmVhdGVKb2JNb25pdG9yaW5nRXZlbnRSdWxlKGAke2pvYk5hbWV9LW1vbml0b3JgLCBbam9iLm5hbWVdKTtcbiAgICAgIGlmICghdGhpcy5wcm9wcy5ub3RpZmljYXRpb25Ub3BpY0Fybikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdGlmaWNhdGlvbiB0b3BpYyBBUk4gaXMgcmVxdWlyZWQgZm9yIGpvYiBtb25pdG9yaW5nIGV2ZW50IHJ1bGUnKTtcbiAgICAgIH1cbiAgICAgIGV2ZW50UnVsZS5hZGRUYXJnZXQoXG4gICAgICAgIG5ldyBTbnNUb3BpYyhNZGFhU25zVG9waWMuZnJvbVRvcGljQXJuKHRoaXMuc2NvcGUsIGAke2pvYk5hbWV9LXRvcGljYCwgdGhpcy5wcm9wcy5ub3RpZmljYXRpb25Ub3BpY0FybikpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUpvYk1vbml0b3JpbmdFdmVudFJ1bGUocnVsZU5hbWU6IHN0cmluZywgam9iTmFtZXM6IHN0cmluZ1tdKTogUnVsZSB7XG4gICAgcmV0dXJuIEV2ZW50QnJpZGdlSGVscGVyLmNyZWF0ZUdsdWVNb25pdG9yaW5nRXZlbnRSdWxlKFxuICAgICAgdGhpcy5zY29wZSxcbiAgICAgIHRoaXMucHJvcHMubmFtaW5nLFxuICAgICAgcnVsZU5hbWUsXG4gICAgICAnV29ya2Zsb3cgSm9iIGZhaWx1cmUgZXZlbnRzJyxcbiAgICAgIHtcbiAgICAgICAgam9iTmFtZTogam9iTmFtZXMsXG4gICAgICAgIHN0YXRlOiBbJ0ZBSUxFRCcsICdUSU1FT1VUJywgJ1NUT1BQRUQnXSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTG9nR3JvdXAobG9nR3JvdXBOYW1lUGF0aFByZWZpeDogc3RyaW5nLCBsb2dHcm91cE5hbWU6IHN0cmluZywgbG9nZ2luZ0NvbmZpZzogTG9nZ2luZ0NvbmZpZyk6IHN0cmluZyB7XG4gICAgbGV0IGxvZ0dyb3VwUmV0ZW50aW9uRGF5czogUmV0ZW50aW9uRGF5cztcblxuICAgIGlmIChsb2dnaW5nQ29uZmlnLmxvZ0dyb3VwUmV0ZW50aW9uRGF5cyAhPSAwKSB7XG4gICAgICBsb2dHcm91cFJldGVudGlvbkRheXMgPSBsb2dnaW5nQ29uZmlnLmxvZ0dyb3VwUmV0ZW50aW9uRGF5cztcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nR3JvdXBSZXRlbnRpb25EYXlzID0gUmV0ZW50aW9uRGF5cy5JTkZJTklURTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2dQcm9wcyA9IHtcbiAgICAgIG5hbWluZzogdGhpcy5wcm9wcy5uYW1pbmcsXG4gICAgICBsb2dHcm91cE5hbWU6IGxvZ0dyb3VwTmFtZSxcbiAgICAgIGxvZ0dyb3VwTmFtZVBhdGhQcmVmaXg6IGxvZ0dyb3VwTmFtZVBhdGhQcmVmaXgsXG4gICAgICBlbmNyeXB0aW9uS2V5OiB0aGlzLmttc0tleSxcbiAgICAgIHJldGVudGlvbjogbG9nR3JvdXBSZXRlbnRpb25EYXlzLFxuICAgIH07XG4gICAgbmV3IE1kYWFMb2dHcm91cCh0aGlzLCBsb2dHcm91cE5hbWUsIGxvZ1Byb3BzKTtcbiAgICAvLyBgdXBkYXRlUHJvcHNgIGFsd2F5cyByZXR1cm5zIGEgcHJvcCB3aXRoIGEgbG9nR3JvdXBOYW1lXG4gICAgcmV0dXJuIHVwZGF0ZVByb3BzKGxvZ1Byb3BzKS5sb2dHcm91cE5hbWUhO1xuICB9XG59XG4iXX0=
|
|
319
|
+
GlueJobL3Construct[_a] = { fqn: "@aws-mdaa/dataops-job-l3-construct.GlueJobL3Construct", version: "1.6.0" };
|
|
320
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YW9wcy1qb2ItbDMtY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGF0YW9wcy1qb2ItbDMtY29uc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7OztHQUdHO0FBRUgseUZBQTZFO0FBQzdFLHFFQUFpRTtBQUNqRSwrREFBdUQ7QUFDdkQsNkRBQW9EO0FBQ3BELDJEQUFxRDtBQUNyRCx5REFBK0U7QUFFL0UscUVBQWtGO0FBQ2xGLG1EQUEwRCxDQUFDLFNBQVM7QUFFcEUsNkJBQTZCO0FBQzdCLHVFQUEwRDtBQUMxRCw2REFBd0Q7QUFFeEQsNkNBQWlDO0FBRWpDLG1EQUFxRDtBQUNyRCwyRUFBK0Q7QUFDL0QsaURBQWdEO0FBQ2hELHVGQUFpRjtBQW1JakYsTUFBYSxrQkFBbUIsU0FBUSw4QkFBZTtJQUlyRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQThCO1FBQ3RFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFDRCxNQUFNLGNBQWMsR0FBRyx5QkFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN6RyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLDBCQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVB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akIsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7U0FDeEMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLGNBQWMsQ0FBQyxzQkFBOEIsRUFBRSxZQUFvQixFQUFFLGFBQTRCO1FBQ3ZHLElBQUkscUJBQW9DLENBQUM7UUFFekMsSUFBSSxhQUFhLENBQUMscUJBQXFCLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDN0MscUJBQXFCLEdBQUcsYUFBYSxDQUFDLHFCQUFxQixDQUFDO1FBQzlELENBQUM7YUFBTSxDQUFDO1lBQ04scUJBQXFCLEdBQUcsd0JBQWEsQ0FBQyxRQUFRLENBQUM7UUFDakQsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHO1lBQ2YsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUN6QixZQUFZLEVBQUUsWUFBWTtZQUMxQixzQkFBc0IsRUFBRSxzQkFBc0I7WUFDOUMsYUFBYSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQzFCLFNBQVMsRUFBRSxxQkFBcUI7U0FDakMsQ0FBQztRQUNGLElBQUksb0NBQVksQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLDBEQUEwRDtRQUMxRCxPQUFPLElBQUEsNEJBQVcsRUFBQyxRQUFRLENBQUMsQ0FBQyxZQUFhLENBQUM7SUFDN0MsQ0FBQzs7QUExWUgsZ0RBMllDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHsgRGF0YU9wc1Byb2plY3RVdGlscyB9IGZyb20gJ0Bhd3MtbWRhYS9kYXRhb3BzLXByb2plY3QtbDMtY29uc3RydWN0JztcbmltcG9ydCB7IEV2ZW50QnJpZGdlSGVscGVyIH0gZnJvbSAnQGF3cy1tZGFhL2V2ZW50YnJpZGdlLWhlbHBlcic7XG5pbXBvcnQgeyBNZGFhQ2ZuSm9iIH0gZnJvbSAnQGF3cy1tZGFhL2dsdWUtY29uc3RydWN0cyc7XG5pbXBvcnQgeyBNZGFhUm9sZSB9IGZyb20gJ0Bhd3MtbWRhYS9pYW0tY29uc3RydWN0cyc7XG5pbXBvcnQgeyBNZGFhQnVja2V0IH0gZnJvbSAnQGF3cy1tZGFhL3MzLWNvbnN0cnVjdHMnO1xuaW1wb3J0IHsgTWRhYUwzQ29uc3RydWN0LCBNZGFhTDNDb25zdHJ1Y3RQcm9wcyB9IGZyb20gJ0Bhd3MtbWRhYS9sMy1jb25zdHJ1Y3QnO1xuaW1wb3J0IHsgQ2ZuSm9iIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWdsdWUnO1xuaW1wb3J0IHsgQnVja2V0RGVwbG95bWVudCwgSVNvdXJjZSwgU291cmNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWRlcGxveW1lbnQnO1xuaW1wb3J0IHsgTWRhYU5hZ1N1cHByZXNzaW9ucyB9IGZyb20gJ0Bhd3MtbWRhYS9jb25zdHJ1Y3QnOyAvL05PU09OQVJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFNuc1RvcGljIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCB7IE1kYWFTbnNUb3BpYyB9IGZyb20gJ0Bhd3MtbWRhYS9zbnMtY29uc3RydWN0cyc7XG5pbXBvcnQgeyBSdWxlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgeyBGbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25FbGVtZW50IH0gZnJvbSAnQGF3cy1tZGFhL2NvbmZpZyc7XG5pbXBvcnQgeyBSZXRlbnRpb25EYXlzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHsgTWRhYUxvZ0dyb3VwIH0gZnJvbSAnQGF3cy1tZGFhL2Nsb3Vkd2F0Y2gtY29uc3RydWN0cyc7XG5pbXBvcnQgeyBJS2V5LCBLZXkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB7IHVwZGF0ZVByb3BzIH0gZnJvbSAnQGF3cy1tZGFhL2Nsb3Vkd2F0Y2gtY29uc3RydWN0cy9saWIvbG9nZ3JvdXAtdXRpbHMnO1xuaW1wb3J0IHsgSUJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBJUm9sZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuXG5leHBvcnQgdHlwZSBKb2JDb21tYW5kUHl0aG9uVmVyc2lvbiA9ICcyJyB8ICczJyB8IHVuZGVmaW5lZDtcbmV4cG9ydCB0eXBlIEpvYkNvbW1hbmROYW1lID0gJ2dsdWVldGwnIHwgJ3B5dGhvbnNoZWxsJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBHbHVlIGpvYiBsb2dnaW5nIHdpdGggQ2xvdWRXYXRjaCBsb2cgcmV0ZW50aW9uIG1hbmFnZW1lbnQuXG4gKlxuICogVXNlIGNhc2VzOiBMb2cgcmV0ZW50aW9uIG1hbmFnZW1lbnQ7IENvbXBsaWFuY2UgcmVxdWlyZW1lbnRzOyBDb3N0IG9wdGltaXphdGlvbjsgQXVkaXQgdHJhaWwgbWFuYWdlbWVudFxuICpcbiAqIEFXUzogQ2xvdWRXYXRjaCBsb2cgZ3JvdXAgcmV0ZW50aW9uIGZvciBHbHVlIGpvYiBleGVjdXRpb24gbG9ncyBhbmQgbW9uaXRvcmluZ1xuICpcbiAqIFZhbGlkYXRpb246IGxvZ0dyb3VwUmV0ZW50aW9uRGF5cyBpcyByZXF1aXJlZCB3aXRoIHNwZWNpZmljIGFsbG93ZWQgdmFsdWVzIGZvciByZXRlbnRpb24gcGVyaW9kXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG9nZ2luZ0NvbmZpZyB7XG4gIC8qKiBDbG91ZFdhdGNoIGxvZyBncm91cCByZXRlbnRpb24gaW4gZGF5cy4gQWxsb3dlZDogMSwzLDUsNywxNCwzMCw2MCw5MCwxMjAsMTUwLDE4MCwzNjUsNDAwLDU0NSw3MzEsMTgyNywzNjUzLCBvciAwLiAqL1xuICByZWFkb25seSBsb2dHcm91cFJldGVudGlvbkRheXM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBhIEdsdWUgam9iIGNvbW1hbmQgc3BlY2lmeWluZyBzY3JpcHQgZXhlY3V0aW9uIGFuZCBydW50aW1lIGVudmlyb25tZW50LlxuICpcbiAqIFVzZSBjYXNlczogSm9iIGNvbW1hbmQgY29uZmlndXJhdGlvbjsgU2NyaXB0IGV4ZWN1dGlvbjsgUnVudGltZSBlbnZpcm9ubWVudDsgRVRMIGpvYiBzZXR1cFxuICpcbiAqIEFXUzogR2x1ZSBqb2IgY29tbWFuZCBjb25maWd1cmF0aW9uIGZvciBzY3JpcHQgZXhlY3V0aW9uIGFuZCBydW50aW1lIGVudmlyb25tZW50XG4gKlxuICogVmFsaWRhdGlvbjogbmFtZSBhbmQgc2NyaXB0TG9jYXRpb24gYXJlIHJlcXVpcmVkOyBweXRob25WZXJzaW9uIGlzIG9wdGlvbmFsIHdpdGggc3BlY2lmaWMgY29uc3RyYWludHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKb2JDb21tYW5kIHtcbiAgLyoqIEpvYiB0eXBlOiAnZ2x1ZWV0bCcgZm9yIFNwYXJrIEVUTCBvciAncHl0aG9uc2hlbGwnIGZvciBQeXRob24gc2NyaXB0cy4gKi9cbiAgcmVhZG9ubHkgbmFtZTogSm9iQ29tbWFuZE5hbWU7XG4gIC8qKiBQeXRob24gdmVyc2lvbiBmb3Igam9iIHJ1bnRpbWUgKCcyJyBvciAnMycpLiAqL1xuICByZWFkb25seSBweXRob25WZXJzaW9uPzogSm9iQ29tbWFuZFB5dGhvblZlcnNpb247XG4gIC8qKiBSZWxhdGl2ZSBwYXRoIHRvIHRoZSBHbHVlIHNjcmlwdCBmb3Igam9iIGV4ZWN1dGlvbiwgb3IgYGFzc2V0OjxmaWxlbmFtZT5gIHRvIHVzZSBhIHByZS1idWlsdCBzY3JpcHQgZnJvbSB0aGUgYXBwJ3MgYXNzZXRzIGRpcmVjdG9yeS4gQXZhaWxhYmxlIGFzc2V0czogZHEtbWFpbi5weSAoRFEgZXZhbHVhdGlvbiwgd2l0aCB1dGlscy8gYXMgYWRkaXRpb25hbFNjcmlwdHMpLiAqL1xuICByZWFkb25seSBzY3JpcHRMb2NhdGlvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBKb2JXb3JrZXJUeXBlID0gJ1N0YW5kYXJkJyB8ICdHLjFYJyB8ICdHLjJYJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBhIEdsdWUgam9iIGluY2x1ZGluZyBleGVjdXRpb24gcm9sZXMsIGNvbW1hbmRzLCBjYXBhY2l0eSwgYW5kIG1vbml0b3JpbmcuXG4gKlxuICogVXNlIGNhc2VzOiBFVEwgam9iIGNvbmZpZ3VyYXRpb247IERhdGEgdHJhbnNmb3JtYXRpb247IEpvYiByZXNvdXJjZSBtYW5hZ2VtZW50OyBEYXRhT3BzIHByb2Nlc3NpbmdcbiAqXG4gKiBBV1M6IEdsdWUgam9iIGNvbmZpZ3VyYXRpb24gZm9yIEVUTCBwcm9jZXNzaW5nIGFuZCBkYXRhIHRyYW5zZm9ybWF0aW9uIHdvcmtmbG93c1xuICpcbiAqIFZhbGlkYXRpb246IGV4ZWN1dGlvblJvbGVBcm4sIGNvbW1hbmQsIGFuZCBkZXNjcmlwdGlvbiBhcmUgcmVxdWlyZWQ7IG90aGVyIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsIHdpdGggc3BlY2lmaWMgY29uc3RyYWludHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKb2JDb25maWcge1xuICAvKiogSUFNIHJvbGUgQVJOIGZvciBHbHVlIGpvYiBleGVjdXRpb24gcGVybWlzc2lvbnMuICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGVBcm46IHN0cmluZztcbiAgLyoqIEpvYiBjb21tYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pbmcgc2NyaXB0IGFuZCBydW50aW1lIGVudmlyb25tZW50LiAqL1xuICByZWFkb25seSBjb21tYW5kOiBKb2JDb21tYW5kO1xuICAvKiogVGVtcGxhdGUgbmFtZSBmb3IgY29uZmlndXJhdGlvbiBpbmhlcml0YW5jZS4gKi9cbiAgcmVhZG9ubHkgdGVtcGxhdGU/OiBzdHJpbmc7XG4gIC8qKiBOdW1iZXIgb2YgY2FwYWNpdHkgdW5pdHMgYWxsb2NhdGVkIHRvIHRoZSBqb2IuICovXG4gIHJlYWRvbmx5IGFsbG9jYXRlZENhcGFjaXR5PzogbnVtYmVyO1xuICAvKiogQ29ubmVjdGlvbiBuYW1lcyBmb3IgZGF0YWJhc2UgYW5kIGV4dGVybmFsIHN5c3RlbSBhY2Nlc3MuICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpb25zPzogc3RyaW5nW107XG4gIC8qKiBEZWZhdWx0IGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGpvYiBhdCBydW50aW1lLiAqL1xuICByZWFkb25seSBkZWZhdWx0QXJndW1lbnRzPzogQ29uZmlndXJhdGlvbkVsZW1lbnQ7XG4gIC8qKiBKb2IgZGVzY3JpcHRpb24gZm9yIGRvY3VtZW50YXRpb24gYW5kIG1hbmFnZW1lbnQuICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKiBFeGVjdXRpb24gcHJvcGVydGllcyBpbmNsdWRpbmcgbWF4aW11bSBjb25jdXJyZW50IHJ1bnMuICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblByb3BlcnR5PzogQ2ZuSm9iLkV4ZWN1dGlvblByb3BlcnR5UHJvcGVydHk7XG4gIC8qKiBHbHVlIHJ1bnRpbWUgdmVyc2lvbiBmb3IgdGhlIGpvYi4gKi9cbiAgcmVhZG9ubHkgZ2x1ZVZlcnNpb24/OiBzdHJpbmc7XG4gIC8qKiBNYXhpbXVtIERQVSBjYXBhY2l0eSBmb3IgdGhlIGpvYi4gKi9cbiAgcmVhZG9ubHkgbWF4Q2FwYWNpdHk/OiBudW1iZXI7XG4gIC8qKiBNYXhpbXVtIHJldHJ5IGNvdW50IGJlZm9yZSBqb2IgZmFpbHVyZS4gKi9cbiAgcmVhZG9ubHkgbWF4UmV0cmllcz86IG51bWJlcjtcbiAgLyoqIE5vdGlmaWNhdGlvbiBzZXR0aW5ncyBmb3Igam9iIG1vbml0b3JpbmcgYW5kIGFsZXJ0aW5nLiAqL1xuICByZWFkb25seSBub3RpZmljYXRpb25Qcm9wZXJ0eT86IENmbkpvYi5Ob3RpZmljYXRpb25Qcm9wZXJ0eVByb3BlcnR5O1xuICAvKiogTnVtYmVyIG9mIHdvcmtlcnMgZm9yIHBhcmFsbGVsIHByb2Nlc3NpbmcuICovXG4gIHJlYWRvbmx5IG51bWJlck9mV29ya2Vycz86IG51bWJlcjtcbiAgLyoqIEpvYiB0aW1lb3V0IGluIG1pbnV0ZXMuICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBudW1iZXI7XG4gIC8qKiBXb3JrZXIgdHlwZTogJ1N0YW5kYXJkJywgJ0cuMVgnLCBvciAnRy4yWCcuICovXG4gIHJlYWRvbmx5IHdvcmtlclR5cGU/OiBKb2JXb3JrZXJUeXBlO1xuICAvKiogUmVsYXRpdmUgcGF0aHMgdG8gYWRkaXRpb25hbCBQeXRob24gc2NyaXB0cyBmb3IgdGhlIGpvYi4gKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFNjcmlwdHM/OiBzdHJpbmdbXTtcbiAgLyoqIFJlbGF0aXZlIHBhdGhzIHRvIGFkZGl0aW9uYWwgSkFSIGZpbGVzIGZvciB0aGUgam9iLiAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsSmFycz86IHN0cmluZ1tdO1xuICAvKiogUmVsYXRpdmUgcGF0aHMgdG8gYWRkaXRpb25hbCBmaWxlcyBmb3IgdGhlIGpvYi4gKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEZpbGVzPzogc3RyaW5nW107XG4gIC8qKiBDb250aW51b3VzIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBmb3IgcmVhbC10aW1lIG1vbml0b3JpbmcuICovXG4gIHJlYWRvbmx5IGNvbnRpbnVvdXNMb2dnaW5nPzogTG9nZ2luZ0NvbmZpZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHbHVlSm9iTDNDb25zdHJ1Y3RQcm9wcyBleHRlbmRzIE1kYWFMM0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFJvbGUgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGRlcGxveSB0aGUgSm9iIGNvZGUuIFNob3VsZCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBEYXRhT3BzIFByb2plY3RcbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveW1lbnRSb2xlQXJuPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIERhdGEgT3BzIHByb2plY3QgYnVja2V0IHdoZXJlIGpvYiByZXNvdXJjZXMgd2lsbCBiZSBkZXBsb3llZCBhbmQgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgdGVtcG9yYXJ5IGpvYiBsb2NhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0TmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIE1hcCBvZiBqb2IgbmFtZXMgdG8gam9iIGNvbmZpZ3VyYXRpb25zXG4gICAqL1xuICByZWFkb25seSBqb2JDb25maWdzOiB7IFtrZXk6IHN0cmluZ106IEpvYkNvbmZpZyB9O1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgR2x1ZSBTZWN1cml0eSBjb25maWd1cmF0aW9uIHRvIGJlIHVzZWQgZm9yIGFsbCBqb2JzLiBMaWtlbHkgc3VwcGxpZWQgYnkgdGhlIERhdGFPcHMgUHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5Q29uZmlndXJhdGlvbk5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBkYXRhb3BzIHByb2plY3QgdG8gd2hpY2ggdGhlIGpvYiB3aWxsIGJlIGFzc29jaWF0ZWQuXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogTm90aWZpY2F0aW9uIHRvcGljIEFyblxuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uVG9waWNBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERhdGFvcHMgcHJvamVjdCBLTVMga2V5IEFSTi5cbiAgICovXG4gIHJlYWRvbmx5IGttc0Fybj86IHN0cmluZztcblxuICAvKipcbiAgICogQmFzZSBwYXRoIGZvciByZXNvbHZpbmcgYGFzc2V0OmAgcHJlZml4ZWQgc2NyaXB0IGxvY2F0aW9ucy5cbiAgICogV2hlbiBhIGpvYidzIHNjcmlwdExvY2F0aW9uIHN0YXJ0cyB3aXRoIGBhc3NldDpgLCBpdCBpcyByZXNvbHZlZFxuICAgKiByZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeS5cbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0QmFzZVBhdGg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBHbHVlSm9iTDNDb25zdHJ1Y3QgZXh0ZW5kcyBNZGFhTDNDb25zdHJ1Y3Qge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcHJvcHM6IEdsdWVKb2JMM0NvbnN0cnVjdFByb3BzO1xuICBwcml2YXRlIHJlYWRvbmx5IGttc0tleTogSUtleTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogR2x1ZUpvYkwzQ29uc3RydWN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICBpZiAoIXRoaXMucHJvcHMuZGVwbG95bWVudFJvbGVBcm4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGVwbG95bWVudCByb2xlIEFSTiBpcyByZXF1aXJlZCBmb3Igam9iIGNvbmZpZ3VyYXRpb24nKTtcbiAgICB9XG4gICAgY29uc3QgZGVwbG95bWVudFJvbGUgPSBNZGFhUm9sZS5mcm9tUm9sZUFybih0aGlzLnNjb3BlLCBgZGVwbG95bWVudC1yb2xlYCwgdGhpcy5wcm9wcy5kZXBsb3ltZW50Um9sZUFybik7XG4gICAgaWYgKCF0aGlzLnByb3BzLmJ1Y2tldE5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJvamVjdCBidWNrZXQgbmFtZSBpcyByZXF1aXJlZCBmb3Igam9iIGNvbmZpZ3VyYXRpb24nKTtcbiAgICB9XG4gICAgY29uc3QgYnVja2V0ID0gTWRhYUJ1Y2tldC5mcm9tQnVja2V0TmFtZSh0aGlzLnNjb3BlLCBgcHJvamVjdC1idWNrZXRgLCB0aGlzLnByb3BzLmJ1Y2tldE5hbWUpO1xuICAgIGlmICghdGhpcy5wcm9wcy5rbXNBcm4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJvamVjdCBLTVMgS2V5IGlzIHJlcXVpcmVkIGZvciBqb2IgY29uZmlndXJhdGlvbicpO1xuICAgIH1cbiAgICB0aGlzLmttc0tleSA9IEtleS5mcm9tS2V5QXJuKHRoaXMsIHRoaXMucHJvcHMucHJvamVjdE5hbWUgPz8gJ2ttcy1rZXknLCB0aGlzLnByb3BzLmttc0Fybik7XG5cbiAgICAvLyBCdWlsZCBvdXIgam9icyFcbiAgICBjb25zdCBhbGxKb2JzID0gdGhpcy5wcm9wcy5qb2JDb25maWdzO1xuICAgIGZvciAoY29uc3Qgam9iTmFtZSBvZiBPYmplY3Qua2V5cyhhbGxKb2JzKSkge1xuICAgICAgY29uc3Qgam9iQ29uZmlnID0gYWxsSm9ic1tqb2JOYW1lXTtcbiAgICAgIHRoaXMuY3JlYXRlSm9iKGpvYk5hbWUsIGpvYkNvbmZpZywgZGVwbG95bWVudFJvbGUsIGJ1Y2tldCk7XG4gICAgfVxuXG4gICAgLy8gQnVja2V0RGVwbG95bWVudCBhZGRzIGFuIGlubGluZSBwb2xpY3kgdG8gdGhlIGltcG9ydGVkIGRlcGxveW1lbnQgcm9sZSxcbiAgICAvLyB3aGljaCBDREsgc3ludGhlc2l6ZXMgYXMgYSBzdGFuZGFsb25lIEFXUzo6SUFNOjpQb2xpY3kgcmVzb3VyY2UuXG4gICAgLy8gQmVjYXVzZSB0aGUgcG9saWN5IG5hbWUgaXMgZGVyaXZlZCBmcm9tIHRoZSBjb25zdHJ1Y3QgcGF0aCAobm90IHRoZSBzdGFjayBuYW1lKSxcbiAgICAvLyBtdWx0aXBsZSBzdGFja3MgaW1wb3J0aW5nIHRoZSBzYW1lIHJvbGUgcHJvZHVjZSBjb2xsaWRpbmcgcGh5c2ljYWwgbmFtZXMuXG4gICAgLy8gUmVtb3ZlIHRoZSBpbmxpbmUgcG9saWN5IG5vZGUg4oCUIHRoZSBkZXBsb3ltZW50IHJvbGUgYWxyZWFkeSBoYXMgdGhlIG5lY2Vzc2FyeVxuICAgIC8vIFMzIHBlcm1pc3Npb25zIGdyYW50ZWQgaW4gdGhlIGRhdGFvcHMtcHJvamVjdCBjb25zdHJ1Y3QgdGhhdCBvd25zIGl0LlxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZGVwbG95bWVudFJvbGUubm9kZS5jaGlsZHJlbikge1xuICAgICAgaWYgKGNoaWxkLm5vZGUuaWQgPT09ICdQb2xpY3knKSB7XG4gICAgICAgIGRlcGxveW1lbnRSb2xlLm5vZGUudHJ5UmVtb3ZlQ2hpbGQoY2hpbGQubm9kZS5pZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFN1cHByZXNzIG5hZyB3YXJuaW5ncyBvbiB0aGUgaW1wb3J0ZWQgZGVwbG95bWVudCByb2xlIG5vZGUgaXRzZWxmXG4gICAgLy8gKHJlbWFpbmluZyBhZnRlciBpbmxpbmUgcG9saWN5IHJlbW92YWwsIGUuZy4gd2lsZGNhcmQgcmVzb3VyY2Ugd2FybmluZ3MpXG4gICAgdGhpcy5zY29wZS5ub2RlLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgaWYgKGNoaWxkLm5vZGUuaWQuc3RhcnRzV2l0aCgnZGVwbG95bWVudC1yb2xlJykpIHtcbiAgICAgICAgTWRhYU5hZ1N1cHByZXNzaW9ucy5hZGRDb2RlUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICAgICAgY2hpbGQsXG4gICAgICAgICAgW3sgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsIHJlYXNvbjogJ1Blcm1pc3Npb25zIGdyYW50ZWQgb24gZGVwbG95bWVudCByb2xlIGluIG93bmluZyBzdGFjay4nIH1dLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGRlcGxveUFkZGl0aW9uYWxGaWxlcyhcbiAgICBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzOiBJU291cmNlW10sXG4gICAgYnVja2V0OiBJQnVja2V0LFxuICAgIGRlcGxveW1lbnRSb2xlOiBJUm9sZSxcbiAgICBkZXBsb3ltZW50SWQ6IHN0cmluZyxcbiAgICBkZXBsb3ltZW50UGF0aDogc3RyaW5nLFxuICAgIGV4dHJhY3Q6IGJvb2xlYW4sXG4gICk6IEJ1Y2tldERlcGxveW1lbnQge1xuICAgIC8vIERlcGxveSBTb3VyY2UgYXNzZXQocykgdG8gL2RlcGxveW1lbnQvbGlicy88am9iPiBsb2NhdGlvbi5cbiAgICByZXR1cm4gbmV3IEJ1Y2tldERlcGxveW1lbnQodGhpcy5zY29wZSwgZGVwbG95bWVudElkLCB7XG4gICAgICBzb3VyY2VzOiBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzLFxuICAgICAgZGVzdGluYXRpb25CdWNrZXQ6IGJ1Y2tldCxcbiAgICAgIGRlc3RpbmF0aW9uS2V5UHJlZml4OiBkZXBsb3ltZW50UGF0aCxcbiAgICAgIHJvbGU6IGRlcGxveW1lbnRSb2xlLFxuICAgICAgZXh0cmFjdDogZXh0cmFjdCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQWRkaXRpb25hbFNjcmlwdHMoXG4gICAgam9iTmFtZTogc3RyaW5nLFxuICAgIGpvYkNvbmZpZzogSm9iQ29uZmlnLFxuICAgIGJ1Y2tldDogSUJ1Y2tldCxcbiAgICBkZXBsb3ltZW50Um9sZTogSVJvbGUsXG4gICAgZGVmYXVsdEFyZ3VtZW50czogQ29uZmlndXJhdGlvbkVsZW1lbnQsXG4gICkge1xuICAgIGlmIChqb2JDb25maWcuYWRkaXRpb25hbFNjcmlwdHMpIHtcbiAgICAgIC8qKlxuICAgICAgICogR3JvdXAgYWxsIGZpbGVzIGF0IHBhcmVudCBkaXJlY3RvcnkgbGV2ZWwuIFRoaXMgd2lsbCBhbGxvdyBjcmVhdGluZyB6aXAgbGliIGFzc2VzdHMgYXQgdmFyaW91cyBkaXJlY3RvcnkgbGV2ZWxzXG4gICAgICAgKiBleC4gJy9tYWluL3NjcmlwdDEucHknICwgJy91dGlsL3NjcmlwdDIucHknICwgJy91dGlsL3NjcmlwdDMucHknIHdpbGwgY3JlYXRlIDIgemlwIGZpbGVzIHJlcHJlc2VudGluZyAnbWFpbicgYW5kICd1dGlscydcbiAgICAgICAqICAqL1xuICAgICAgY29uc3QgZGlyZWN0b3J5VG9GaWxlOiB7IFtmaWxlUGF0aDogc3RyaW5nXTogc3RyaW5nW10gfSA9IHt9O1xuICAgICAgam9iQ29uZmlnLmFkZGl0aW9uYWxTY3JpcHRzLmZvckVhY2goZmlsZUxvY2F0aW9uID0+IHtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmRpcm5hbWUoZmlsZUxvY2F0aW9uLnRyaW0oKSk7XG4gICAgICAgIGlmIChmaWxlUGF0aCBpbiBkaXJlY3RvcnlUb0ZpbGUpIHtcbiAgICAgICAgICBkaXJlY3RvcnlUb0ZpbGVbZmlsZVBhdGhdLnB1c2goYCEke3BhdGguYmFzZW5hbWUoZmlsZUxvY2F0aW9uLnRyaW0oKSl9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGlyZWN0b3J5VG9GaWxlW2ZpbGVQYXRoXSA9IFtgISR7cGF0aC5iYXNlbmFtZShmaWxlTG9jYXRpb24udHJpbSgpKX1gXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIENyZWF0ZSBTb3VyY2UgYXNzZXQgZm9yIGVhY2ggZGlyZWN0b3J5XG4gICAgICBjb25zdCBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzID0gT2JqZWN0LmVudHJpZXMoZGlyZWN0b3J5VG9GaWxlKS5tYXAoKFtmaWxlUGF0aCwgZmlsZU5hbWVzXSkgPT4ge1xuICAgICAgICByZXR1cm4gU291cmNlLmFzc2V0KGZpbGVQYXRoLCB7IGV4Y2x1ZGU6IFsnKionLCAuLi5maWxlTmFtZXNdIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBkZXBsb3ltZW50UGF0aCA9IGBkZXBsb3ltZW50L2xpYnMvJHtqb2JOYW1lfWA7XG4gICAgICBjb25zdCBhZGRpdGlvbmFsRmlsZURlcGxveW1lbnQgPSB0aGlzLmRlcGxveUFkZGl0aW9uYWxGaWxlcyhcbiAgICAgICAgYWRkaXRpb25hbEZpbGVzU291cmNlcyxcbiAgICAgICAgYnVja2V0LFxuICAgICAgICBkZXBsb3ltZW50Um9sZSxcbiAgICAgICAgYGpvYi1kZXBsb3ltZW50LSR7am9iTmFtZX0tYWRkaXRpb25hbC1zY3JpcHRgLFxuICAgICAgICBkZXBsb3ltZW50UGF0aCxcbiAgICAgICAgZmFsc2UsIC8vIEdsdWUgZXhwZWN0cyB6aXAgb2YgYWRkaXRpb25hbCBzY3JpcHRzLCBoZW5jZSBkaXNhYmxpbmcgdGhlIGV4dHJhY3Rpb25cbiAgICAgICk7XG5cbiAgICAgIC8vIEV4dHJhY3QgemlwIG5hbWUocykgZm9yIGVhY2ggc291cmNlIGFuZCBjcmVhdGUgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgczMgbG9jYXRpb25zXG4gICAgICBjb25zdCBsaWJyYXJ5WmlwTmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWRkaXRpb25hbEZpbGVzU291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBsaWJOYW1lID0gRm4uc2VsZWN0KGksIGFkZGl0aW9uYWxGaWxlRGVwbG95bWVudC5vYmplY3RLZXlzKTsgLy8gRXh0cmFjdCBmaWxlIG5hbWUgb2YgemlwIGNvbnRhaW5pbmcgYWRkaXRpb25hbCBzY3JpcHRzXG4gICAgICAgIGxpYnJhcnlaaXBOYW1lcy5wdXNoKGBzMzovLyR7YWRkaXRpb25hbEZpbGVEZXBsb3ltZW50LmRlcGxveWVkQnVja2V0LmJ1Y2tldE5hbWV9LyR7ZGVwbG95bWVudFBhdGh9LyR7bGliTmFtZX1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHppcCBmaWxlIG5hbWVzIHRvIGRlZmF1bHQgYXJndW1lbnRzLlxuICAgICAgaWYgKGRlZmF1bHRBcmd1bWVudHNbJy0tZXh0cmEtcHktZmlsZXMnXSkge1xuICAgICAgICBkZWZhdWx0QXJndW1lbnRzWyctLWV4dHJhLXB5LWZpbGVzJ10gKz0gJywnICsgbGlicmFyeVppcE5hbWVzLmpvaW4oJywnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRBcmd1bWVudHNbJy0tZXh0cmEtcHktZmlsZXMnXSA9IGxpYnJhcnlaaXBOYW1lcy5qb2luKCcsJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRBZGRpdGlvbmFsSmFycyhcbiAgICBqb2JOYW1lOiBzdHJpbmcsXG4gICAgam9iQ29uZmlnOiBKb2JDb25maWcsXG4gICAgYnVja2V0OiBJQnVja2V0LFxuICAgIGRlcGxveW1lbnRSb2xlOiBJUm9sZSxcbiAgICBkZWZhdWx0QXJndW1lbnRzOiBDb25maWd1cmF0aW9uRWxlbWVudCxcbiAgKSB7XG4gICAgaWYgKGpvYkNvbmZpZy5hZGRpdGlvbmFsSmFycykge1xuICAgICAgLy8gQ3JlYXRlIFNvdXJjZSBhc3NldCBmb3IgZWFjaCBkaXJlY3RvcnlcbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxGaWxlc1NvdXJjZXMgPSBqb2JDb25maWcuYWRkaXRpb25hbEphcnMubWFwKGZ1bGxGaWxlTmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5kaXJuYW1lKGZ1bGxGaWxlTmFtZS50cmltKCkpO1xuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoZnVsbEZpbGVOYW1lLnRyaW0oKSk7XG4gICAgICAgIHJldHVybiBTb3VyY2UuYXNzZXQoZmlsZVBhdGgsIHsgZXhjbHVkZTogWycqKicsIGAhJHtmaWxlTmFtZX1gXSB9KTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGVwbG95bWVudFBhdGggPSBgZGVwbG95bWVudC9saWJzLyR7am9iTmFtZX1gO1xuXG4gICAgICBjb25zdCBhZGRpdGlvbmFsRmlsZURlcGxveW1lbnQgPSB0aGlzLmRlcGxveUFkZGl0aW9uYWxGaWxlcyhcbiAgICAgICAgYWRkaXRpb25hbEZpbGVzU291cmNlcyxcbiAgICAgICAgYnVja2V0LFxuICAgICAgICBkZXBsb3ltZW50Um9sZSxcbiAgICAgICAgYGpvYi1kZXBsb3ltZW50LSR7am9iTmFtZX0tYWRkaXRpb25hbC1qYXJgLFxuICAgICAgICBkZXBsb3ltZW50UGF0aCxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGV4dHJhSmFyTmFtZXMgPSBqb2JDb25maWcuYWRkaXRpb25hbEphcnMubWFwKGZ1bGxGaWxlTmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmdWxsRmlsZU5hbWUudHJpbSgpKTtcbiAgICAgICAgcmV0dXJuIGBzMzovLyR7YWRkaXRpb25hbEZpbGVEZXBsb3ltZW50LmRlcGxveWVkQnVja2V0LmJ1Y2tldE5hbWV9LyR7ZGVwbG95bWVudFBhdGh9LyR7ZmlsZU5hbWV9YDtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBZGQgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgemlwIGZpbGUgbmFtZXMgdG8gZGVmYXVsdCBhcmd1bWVudHMuXG4gICAgICBpZiAoZGVmYXVsdEFyZ3VtZW50c1snLS1leHRyYS1qYXJzJ10pIHtcbiAgICAgICAgZGVmYXVsdEFyZ3VtZW50c1snLS1leHRyYS1qYXJzJ10gKz0gJywnICsgZXh0cmFKYXJOYW1lcy5qb2luKCcsJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0QXJndW1lbnRzWyctLWV4dHJhLWphcnMnXSA9IGV4dHJhSmFyTmFtZXMuam9pbignLCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkQWRkaXRpb25hbEZpbGVzKFxuICAgIGpvYk5hbWU6IHN0cmluZyxcbiAgICBqb2JDb25maWc6IEpvYkNvbmZpZyxcbiAgICBidWNrZXQ6IElCdWNrZXQsXG4gICAgZGVwbG95bWVudFJvbGU6IElSb2xlLFxuICAgIGRlZmF1bHRBcmd1bWVudHM6IENvbmZpZ3VyYXRpb25FbGVtZW50LFxuICApIHtcbiAgICBpZiAoam9iQ29uZmlnLmFkZGl0aW9uYWxGaWxlcykge1xuICAgICAgLy8gQ3JlYXRlIFNvdXJjZSBhc3NldCBmb3IgZWFjaCBkaXJlY3RvcnlcbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxGaWxlc1NvdXJjZXMgPSBqb2JDb25maWcuYWRkaXRpb25hbEZpbGVzLm1hcChmdWxsRmlsZU5hbWUgPT4ge1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguZGlybmFtZShmdWxsRmlsZU5hbWUudHJpbSgpKTtcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGZ1bGxGaWxlTmFtZS50cmltKCkpO1xuICAgICAgICByZXR1cm4gU291cmNlLmFzc2V0KGZpbGVQYXRoLCB7IGV4Y2x1ZGU6IFsnKionLCBgISR7ZmlsZU5hbWV9YF0gfSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRlcGxveW1lbnRQYXRoID0gYGRlcGxveW1lbnQvZmlsZXMvJHtqb2JOYW1lfWA7XG4gICAgICBjb25zdCBhZGRpdGlvbmFsRmlsZURlcGxveW1lbnQgPSB0aGlzLmRlcGxveUFkZGl0aW9uYWxGaWxlcyhcbiAgICAgICAgYWRkaXRpb25hbEZpbGVzU291cmNlcyxcbiAgICAgICAgYnVja2V0LFxuICAgICAgICBkZXBsb3ltZW50Um9sZSxcbiAgICAgICAgYGpvYi1kZXBsb3ltZW50LSR7am9iTmFtZX0tYWRkaXRpb25hbC1maWxlYCxcbiAgICAgICAgZGVwbG95bWVudFBhdGgsXG4gICAgICAgIHRydWUsXG4gICAgICApO1xuICAgICAgY29uc3QgZXh0cmFGaWxlTmFtZXMgPSBqb2JDb25maWcuYWRkaXRpb25hbEZpbGVzLm1hcChmdWxsRmlsZU5hbWUgPT4ge1xuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoZnVsbEZpbGVOYW1lLnRyaW0oKSk7XG4gICAgICAgIHJldHVybiBgczM6Ly8ke2FkZGl0aW9uYWxGaWxlRGVwbG95bWVudC5kZXBsb3llZEJ1Y2tldC5idWNrZXROYW1lfS8ke2RlcGxveW1lbnRQYXRofS8ke2ZpbGVOYW1lfWA7XG4gICAgICB9KTtcblxuICAgICAgLy8gQWRkIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHppcCBmaWxlIG5hbWVzIHRvIGRlZmF1bHQgYXJndW1lbnRzLlxuICAgICAgaWYgKGRlZmF1bHRBcmd1bWVudHNbJy0tZXh0cmEtZmlsZXMnXSkge1xuICAgICAgICBkZWZhdWx0QXJndW1lbnRzWyctLWV4dHJhLWZpbGVzJ10gKz0gJywnICsgZXh0cmFGaWxlTmFtZXMuam9pbignLCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmYXVsdEFyZ3VtZW50c1snLS1leHRyYS1maWxlcyddID0gZXh0cmFGaWxlTmFtZXMuam9pbignLCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUFzc2V0UGF0aChqb2JOYW1lOiBzdHJpbmcsIGxvY2F0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChsb2NhdGlvbi5zdGFydHNXaXRoKCdhc3NldDonKSkge1xuICAgICAgY29uc3QgYXNzZXROYW1lID0gbG9jYXRpb24uc3Vic3RyaW5nKCdhc3NldDonLmxlbmd0aCk7XG4gICAgICBpZiAoIXRoaXMucHJvcHMuYXNzZXRCYXNlUGF0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEpvYiAnJHtqb2JOYW1lfScgdXNlcyBhc3NldDogcHJlZml4IGJ1dCBubyBhc3NldEJhc2VQYXRoIGlzIGNvbmZpZ3VyZWQuIGAgK1xuICAgICAgICAgICAgYFNldCBhc3NldEJhc2VQYXRoIGluIHRoZSBjb25zdHJ1Y3QgcHJvcHMuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXRoLmpvaW4odGhpcy5wcm9wcy5hc3NldEJhc2VQYXRoLCBhc3NldE5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYXRpb247XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUpvYihqb2JOYW1lOiBzdHJpbmcsIGpvYkNvbmZpZzogSm9iQ29uZmlnLCBkZXBsb3ltZW50Um9sZTogSVJvbGUsIGJ1Y2tldDogSUJ1Y2tldCkge1xuICAgIGNvbnN0IGRlZmF1bHRBcmd1bWVudHMgPSBqb2JDb25maWcuZGVmYXVsdEFyZ3VtZW50cyA/IGpvYkNvbmZpZy5kZWZhdWx0QXJndW1lbnRzIDoge307XG4gICAgbGV0IHNjcmlwdExvY2F0aW9uID0gdGhpcy5yZXNvbHZlQXNzZXRQYXRoKGpvYk5hbWUsIGpvYkNvbmZpZy5jb21tYW5kLnNjcmlwdExvY2F0aW9uLnRyaW0oKSk7XG5cbiAgICBjb25zdCBzY3JpcHRQYXRoID0gcGF0aC5kaXJuYW1lKHNjcmlwdExvY2F0aW9uKTtcbiAgICBjb25zdCBzY3JpcHROYW1lID0gcGF0aC5iYXNlbmFtZShzY3JpcHRMb2NhdGlvbik7XG4gICAgY29uc3Qgc2NyaXB0U291cmNlID0gU291cmNlLmFzc2V0KHNjcmlwdFBhdGgsIHsgZXhjbHVkZTogWycqKicsIGAhJHtzY3JpcHROYW1lfWBdIH0pO1xuXG4gICAgY29uc3Qgc2NyaXB0RGVwbG95bWVudFBhdGggPSBgZGVwbG95bWVudC9qb2JzLyR7am9iTmFtZX1gO1xuICAgIGNvbnN0IHNjcmlwdERlcGxveW1lbnQgPSBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLnNjb3BlLCBgam9iLWRlcGxveW1lbnQtJHtqb2JOYW1lfWAsIHtcbiAgICAgIHNvdXJjZXM6IFtzY3JpcHRTb3VyY2VdLFxuICAgICAgZGVzdGluYXRpb25CdWNrZXQ6IGJ1Y2tldCxcbiAgICAgIGRlc3RpbmF0aW9uS2V5UHJlZml4OiBzY3JpcHREZXBsb3ltZW50UGF0aCxcbiAgICAgIHJvbGU6IGRlcGxveW1lbnRSb2xlLFxuICAgICAgZXh0cmFjdDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIFJlc29sdmUgYXNzZXQ6IHByZWZpeGVzIGluIGFkZGl0aW9uYWxTY3JpcHRzIGJlZm9yZSBwcm9jZXNzaW5nXG4gICAgaWYgKGpvYkNvbmZpZy5hZGRpdGlvbmFsU2NyaXB0cykge1xuICAgICAgam9iQ29uZmlnID0ge1xuICAgICAgICAuLi5qb2JDb25maWcsXG4gICAgICAgIGFkZGl0aW9uYWxTY3JpcHRzOiBqb2JDb25maWcuYWRkaXRpb25hbFNjcmlwdHMubWFwKHMgPT4gdGhpcy5yZXNvbHZlQXNzZXRQYXRoKGpvYk5hbWUsIHMudHJpbSgpKSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuYWRkQWRkaXRpb25hbFNjcmlwdHMoam9iTmFtZSwgam9iQ29uZmlnLCBidWNrZXQsIGRlcGxveW1lbnRSb2xlLCBkZWZhdWx0QXJndW1lbnRzKTtcbiAgICB0aGlzLmFkZEFkZGl0aW9uYWxKYXJzKGpvYk5hbWUsIGpvYkNvbmZpZywgYnVja2V0LCBkZXBsb3ltZW50Um9sZSwgZGVmYXVsdEFyZ3VtZW50cyk7XG4gICAgdGhpcy5hZGRBZGRpdGlvbmFsRmlsZXMoam9iTmFtZSwgam9iQ29uZmlnLCBidWNrZXQsIGRlcGxveW1lbnRSb2xlLCBkZWZhdWx0QXJndW1lbnRzKTtcbiAgICBNZGFhTmFnU3VwcHJlc3Npb25zLmFkZENvZGVSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgIHRoaXMuc2NvcGUsXG4gICAgICBbXG4gICAgICAgIHsgaWQ6ICdBd3NTb2x1dGlvbnMtTDEnLCByZWFzb246ICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudC4nIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ05JU1QuODAwLjUzLlI1LUxhbWJkYUNvbmN1cnJlbmN5JyxcbiAgICAgICAgICByZWFzb246ICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudC4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdOSVNULjgwMC41My5SNS1MYW1iZGFJbnNpZGVWUEMnLFxuICAgICAgICAgIHJlYXNvbjogJ0Z1bmN0aW9uIGlzIHVzZWQgb25seSBhcyBjdXN0b20gcmVzb3VyY2UgZHVyaW5nIENESyBkZXBsb3ltZW50IGFuZCBpbnRlcmFjdHMgb25seSB3aXRoIFMzLicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ05JU1QuODAwLjUzLlI1LUxhbWJkYURMUScsXG4gICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgJ0Z1bmN0aW9uIGlzIHVzZWQgb25seSBhcyBjdXN0b20gcmVzb3VyY2UgZHVyaW5nIENESyBkZXBsb3ltZW50LiBFcnJvcnMgd2lsbCBiZSBoYW5kbGVkIGJ5IENsb3VkRm9ybWF0aW9uLicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0hJUEFBLlNlY3VyaXR5LUxhbWJkYUNvbmN1cnJlbmN5JyxcbiAgICAgICAgICByZWFzb246ICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudC4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdQQ0kuRFNTLjMyMS1MYW1iZGFDb25jdXJyZW5jeScsXG4gICAgICAgICAgcmVhc29uOiAnRnVuY3Rpb24gaXMgdXNlZCBvbmx5IGFzIGN1c3RvbSByZXNvdXJjZSBkdXJpbmcgQ0RLIGRlcGxveW1lbnQuJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnSElQQUEuU2VjdXJpdHktTGFtYmRhSW5zaWRlVlBDJyxcbiAgICAgICAgICByZWFzb246ICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudCBhbmQgaW50ZXJhY3RzIG9ubHkgd2l0aCBTMy4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdQQ0kuRFNTLjMyMS1MYW1iZGFJbnNpZGVWUEMnLFxuICAgICAgICAgIHJlYXNvbjogJ0Z1bmN0aW9uIGlzIHVzZWQgb25seSBhcyBjdXN0b20gcmVzb3VyY2UgZHVyaW5nIENESyBkZXBsb3ltZW50IGFuZCBpbnRlcmFjdHMgb25seSB3aXRoIFMzLicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0hJUEFBLlNlY3VyaXR5LUxhbWJkYURMUScsXG4gICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgJ0Z1bmN0aW9uIGlzIHVzZWQgb25seSBhcyBjdXN0b20gcmVzb3VyY2UgZHVyaW5nIENESyBkZXBsb3ltZW50LiBFcnJvcnMgd2lsbCBiZSBoYW5kbGVkIGJ5IENsb3VkRm9ybWF0aW9uLicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ1BDSS5EU1MuMzIxLUxhbWJkYURMUScsXG4gICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgJ0Z1bmN0aW9uIGlzIHVzZWQgb25seSBhcyBjdXN0b20gcmVzb3VyY2UgZHVyaW5nIENESyBkZXBsb3ltZW50LiBFcnJvcnMgd2lsbCBiZSBoYW5kbGVkIGJ5IENsb3VkRm9ybWF0aW9uLicsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICAgIC8vIENvbm5lY3Rpb25zIHdpbGwgcmVxdWlyZSBhbiBhcnJheSBvZiByZWZlcmVuY2VzIHdoZXJlIHRoZXkgYXJlIGRlZmluZWRcbiAgICBsZXQgY29ubmVjdGlvbnNDb25maWd1cmVkOiBDb25maWd1cmF0aW9uRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICBpZiAoam9iQ29uZmlnLmNvbm5lY3Rpb25zKSB7XG4gICAgICBjb25uZWN0aW9uc0NvbmZpZ3VyZWQgPSB7XG4gICAgICAgIGNvbm5lY3Rpb25zOiBqb2JDb25maWcuY29ubmVjdGlvbnMsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGRlZmF1bHRBcmd1bWVudHNbJy0tVGVtcERpciddID0gYHMzOi8vJHt0aGlzLnByb3BzLmJ1Y2tldE5hbWV9L3RlbXAvam9icy8ke2pvYk5hbWV9YDtcblxuICAgIC8vIGFkZCBjb250aW51b3VzIGxvZ2dpbmcgdW5sZXNzIGV4cGxpY2l0bHkgZGlzYWJsZWRcbiAgICBpZiAoam9iQ29uZmlnLmNvbnRpbnVvdXNMb2dnaW5nKSB7XG4gICAgICBjb25zdCBsb2dHcm91cE5hbWUgPSBqb2JOYW1lO1xuICAgICAgY29uc3QgbG9nR3JvdXBOYW1lUGF0aFByZWZpeCA9ICcvYXdzL2dsdWUnO1xuICAgICAgZGVmYXVsdEFyZ3VtZW50c1snLS1jb250aW51b3VzLWxvZy1sb2dHcm91cCddID0gdGhpcy5jcmVhdGVMb2dHcm91cChcbiAgICAgICAgbG9nR3JvdXBOYW1lUGF0aFByZWZpeCxcbiAgICAgICAgbG9nR3JvdXBOYW1lLFxuICAgICAgICBqb2JDb25maWcuY29udGludW91c0xvZ2dpbmcsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyhgQ29udGludW91cyBsb2dnaW5nIG5vdCBlbmFibGVkIGZvciBqb2I6ICR7am9iTmFtZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dFBhcmFtcyA9IGRlZmF1bHRBcmd1bWVudHNbJy0taW5wdXRfcGFyYW1zJ107XG4gICAgaWYgKGlucHV0UGFyYW1zKSB7XG4gICAgICBkZWZhdWx0QXJndW1lbnRzWyctLWlucHV0X3BhcmFtcyddID0gSlNPTi5zdHJpbmdpZnkoaW5wdXRQYXJhbXMpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMucHJvcHMuc2VjdXJpdHlDb25maWd1cmF0aW9uTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWN1cml0eSBjb25maWd1cmF0aW9uIG5hbWUgaXMgcmVxdWlyZWQgZm9yIGpvYiBtb25pdG9yaW5nIGV2ZW50IHJ1bGUnKTtcbiAgICB9XG4gICAgY29uc3Qgam9iID0gbmV3IE1kYWFDZm5Kb2IodGhpcy5zY29wZSwgYCR7am9iTmFtZX0tam9iYCwge1xuICAgICAgY29tbWFuZDoge1xuICAgICAgICBuYW1lOiBqb2JDb25maWcuY29tbWFuZC5uYW1lLFxuICAgICAgICBweXRob25WZXJzaW9uOiBqb2JDb25maWcuY29tbWFuZC5weXRob25WZXJzaW9uLFxuICAgICAgICBzY3JpcHRMb2NhdGlvbjogYHMzOi8vJHtzY3JpcHREZXBsb3ltZW50LmRlcGxveWVkQnVja2V0LmJ1Y2tldE5hbWV9LyR7c2NyaXB0RGVwbG95bWVudFBhdGh9LyR7c2NyaXB0TmFtZX1gLFxuICAgICAgfSxcbiAgICAgIHJvbGU6IGpvYkNvbmZpZy5leGVjdXRpb25Sb2xlQXJuLFxuICAgICAgYWxsb2NhdGVkQ2FwYWNpdHk6IGpvYkNvbmZpZy5hbGxvY2F0ZWRDYXBhY2l0eSxcbiAgICAgIGNvbm5lY3Rpb25zOiBjb25uZWN0aW9uc0NvbmZpZ3VyZWQsXG4gICAgICBkZWZhdWx0QXJndW1lbnRzOiBkZWZhdWx0QXJndW1lbnRzLFxuICAgICAgZGVzY3JpcHRpb246IGpvYkNvbmZpZy5kZXNjcmlwdGlvbixcbiAgICAgIGV4ZWN1dGlvblByb3BlcnR5OiBqb2JDb25maWcuZXhlY3V0aW9uUHJvcGVydHksXG4gICAgICBnbHVlVmVyc2lvbjogam9iQ29uZmlnLmdsdWVWZXJzaW9uLFxuICAgICAgbWF4Q2FwYWNpdHk6IGpvYkNvbmZpZy5tYXhDYXBhY2l0eSxcbiAgICAgIG1heFJldHJpZXM6IGpvYkNvbmZpZy5tYXhSZXRyaWVzLFxuICAgICAgbmFtZTogam9iTmFtZSxcbiAgICAgIG5vdGlmaWNhdGlvblByb3BlcnR5OiBqb2JDb25maWcubm90aWZpY2F0aW9uUHJvcGVydHksXG4gICAgICBudW1iZXJPZldvcmtlcnM6IGpvYkNvbmZpZy5udW1iZXJPZldvcmtlcnMsXG4gICAgICBzZWN1cml0eUNvbmZpZ3VyYXRpb246IHRoaXMucHJvcHMuc2VjdXJpdHlDb25maWd1cmF0aW9uTmFtZSxcbiAgICAgIHRpbWVvdXQ6IGpvYkNvbmZpZy50aW1lb3V0LFxuICAgICAgd29ya2VyVHlwZTogam9iQ29uZmlnLndvcmtlclR5cGUsXG4gICAgICBuYW1pbmc6IHRoaXMucHJvcHMubmFtaW5nLFxuICAgIH0pO1xuXG4gICAgaWYgKGpvYi5uYW1lICYmIHRoaXMucHJvcHMucHJvamVjdE5hbWUpIHtcbiAgICAgIERhdGFPcHNQcm9qZWN0VXRpbHMuY3JlYXRlUHJvamVjdFNTTVBhcmFtKFxuICAgICAgICB0aGlzLnNjb3BlLFxuICAgICAgICB0aGlzLnByb3BzLm5hbWluZyxcbiAgICAgICAgdGhpcy5wcm9wcy5wcm9qZWN0TmFtZSxcbiAgICAgICAgYGpvYi9uYW1lLyR7am9iTmFtZX1gLFxuICAgICAgICBqb2IubmFtZSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGV2ZW50UnVsZSA9IHRoaXMuY3JlYXRlSm9iTW9uaXRvcmluZ0V2ZW50UnVsZShgJHtqb2JOYW1lfS1tb25pdG9yYCwgW2pvYi5uYW1lXSk7XG4gICAgICBpZiAoIXRoaXMucHJvcHMubm90aWZpY2F0aW9uVG9waWNBcm4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3RpZmljYXRpb24gdG9waWMgQVJOIGlzIHJlcXVpcmVkIGZvciBqb2IgbW9uaXRvcmluZyBldmVudCBydWxlJyk7XG4gICAgICB9XG4gICAgICBldmVudFJ1bGUuYWRkVGFyZ2V0KFxuICAgICAgICBuZXcgU25zVG9waWMoTWRhYVNuc1RvcGljLmZyb21Ub3BpY0Fybih0aGlzLnNjb3BlLCBgJHtqb2JOYW1lfS10b3BpY2AsIHRoaXMucHJvcHMubm90aWZpY2F0aW9uVG9waWNBcm4pKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVKb2JNb25pdG9yaW5nRXZlbnRSdWxlKHJ1bGVOYW1lOiBzdHJpbmcsIGpvYk5hbWVzOiBzdHJpbmdbXSk6IFJ1bGUge1xuICAgIHJldHVybiBFdmVudEJyaWRnZUhlbHBlci5jcmVhdGVHbHVlTW9uaXRvcmluZ0V2ZW50UnVsZShcbiAgICAgIHRoaXMuc2NvcGUsXG4gICAgICB0aGlzLnByb3BzLm5hbWluZyxcbiAgICAgIHJ1bGVOYW1lLFxuICAgICAgJ1dvcmtmbG93IEpvYiBmYWlsdXJlIGV2ZW50cycsXG4gICAgICB7XG4gICAgICAgIGpvYk5hbWU6IGpvYk5hbWVzLFxuICAgICAgICBzdGF0ZTogWydGQUlMRUQnLCAnVElNRU9VVCcsICdTVE9QUEVEJ10sXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUxvZ0dyb3VwKGxvZ0dyb3VwTmFtZVBhdGhQcmVmaXg6IHN0cmluZywgbG9nR3JvdXBOYW1lOiBzdHJpbmcsIGxvZ2dpbmdDb25maWc6IExvZ2dpbmdDb25maWcpOiBzdHJpbmcge1xuICAgIGxldCBsb2dHcm91cFJldGVudGlvbkRheXM6IFJldGVudGlvbkRheXM7XG5cbiAgICBpZiAobG9nZ2luZ0NvbmZpZy5sb2dHcm91cFJldGVudGlvbkRheXMgIT0gMCkge1xuICAgICAgbG9nR3JvdXBSZXRlbnRpb25EYXlzID0gbG9nZ2luZ0NvbmZpZy5sb2dHcm91cFJldGVudGlvbkRheXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ0dyb3VwUmV0ZW50aW9uRGF5cyA9IFJldGVudGlvbkRheXMuSU5GSU5JVEU7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nUHJvcHMgPSB7XG4gICAgICBuYW1pbmc6IHRoaXMucHJvcHMubmFtaW5nLFxuICAgICAgbG9nR3JvdXBOYW1lOiBsb2dHcm91cE5hbWUsXG4gICAgICBsb2dHcm91cE5hbWVQYXRoUHJlZml4OiBsb2dHcm91cE5hbWVQYXRoUHJlZml4LFxuICAgICAgZW5jcnlwdGlvbktleTogdGhpcy5rbXNLZXksXG4gICAgICByZXRlbnRpb246IGxvZ0dyb3VwUmV0ZW50aW9uRGF5cyxcbiAgICB9O1xuICAgIG5ldyBNZGFhTG9nR3JvdXAodGhpcywgbG9nR3JvdXBOYW1lLCBsb2dQcm9wcyk7XG4gICAgLy8gYHVwZGF0ZVByb3BzYCBhbHdheXMgcmV0dXJucyBhIHByb3Agd2l0aCBhIGxvZ0dyb3VwTmFtZVxuICAgIHJldHVybiB1cGRhdGVQcm9wcyhsb2dQcm9wcykubG9nR3JvdXBOYW1lITtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { Construct } from 'constructs';
|
|
6
|
+
import { IMdaaResourceNaming } from '@aws-mdaa/naming';
|
|
7
|
+
import { IMdaaConfigValueTransformer, TransformResult } from './transformer';
|
|
8
|
+
export interface MdaaConfigBlueprintRefValueTransformerProps {
|
|
9
|
+
readonly naming: IMdaaResourceNaming;
|
|
10
|
+
readonly scope: Construct;
|
|
11
|
+
}
|
|
12
|
+
export declare class MdaaConfigBlueprintRefValueTransformer implements IMdaaConfigValueTransformer {
|
|
13
|
+
protected props: MdaaConfigBlueprintRefValueTransformerProps;
|
|
14
|
+
constructor(props: MdaaConfigBlueprintRefValueTransformerProps);
|
|
15
|
+
transformValue(value: string): TransformResult;
|
|
16
|
+
protected parseBlueprintRef(value: string, refMatch: string[]): string | number | object;
|
|
17
|
+
private substituteBlueprintReferences;
|
|
18
|
+
private convertToString;
|
|
19
|
+
private resolveBlueprintReference;
|
|
20
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*!
|
|
3
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.MdaaConfigBlueprintRefValueTransformer = void 0;
|
|
8
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
9
|
+
const XRegExp = require("xregexp");
|
|
10
|
+
class MdaaConfigBlueprintRefValueTransformer {
|
|
11
|
+
constructor(props) {
|
|
12
|
+
this.props = props;
|
|
13
|
+
}
|
|
14
|
+
transformValue(value) {
|
|
15
|
+
const refMatch = XRegExp.matchRecursive(value, '{{', '}}', 'g', {
|
|
16
|
+
unbalanced: 'skip',
|
|
17
|
+
});
|
|
18
|
+
if (refMatch.length > 0) {
|
|
19
|
+
return this.parseBlueprintRef(value, refMatch);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
return value;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
parseBlueprintRef(value, refMatch) {
|
|
26
|
+
// Substitute all references in the string
|
|
27
|
+
return this.substituteBlueprintReferences(value, refMatch);
|
|
28
|
+
}
|
|
29
|
+
substituteBlueprintReferences(value, refMatch) {
|
|
30
|
+
return refMatch.reduce((result, ref) => {
|
|
31
|
+
const refInner = this.transformValue(ref).toString();
|
|
32
|
+
const resolvedValue = this.resolveBlueprintReference(refInner);
|
|
33
|
+
if (resolvedValue === undefined) {
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
const stringValue = this.convertToString(resolvedValue);
|
|
37
|
+
return result.replace(`{{${ref}}}`, stringValue);
|
|
38
|
+
}, value);
|
|
39
|
+
}
|
|
40
|
+
convertToString(value) {
|
|
41
|
+
if (typeof value === 'string') {
|
|
42
|
+
return value;
|
|
43
|
+
}
|
|
44
|
+
if (typeof value === 'number' || typeof value === 'boolean') {
|
|
45
|
+
return String(value);
|
|
46
|
+
}
|
|
47
|
+
// For objects, use JSON.stringify as a safe fallback
|
|
48
|
+
return JSON.stringify(value);
|
|
49
|
+
}
|
|
50
|
+
resolveBlueprintReference(refInner) {
|
|
51
|
+
if (refInner.startsWith('blueprint:')) {
|
|
52
|
+
if (!this.props.scope) {
|
|
53
|
+
throw new Error('Unable to resolve blueprint params outside of a Construct');
|
|
54
|
+
}
|
|
55
|
+
if (!this.props.naming) {
|
|
56
|
+
throw new Error('Unable to resolve blueprint params without a naming implementation');
|
|
57
|
+
}
|
|
58
|
+
const blueprintPath = refInner.replace(/^blueprint:/, '');
|
|
59
|
+
const ssmOrgPath = this.props.naming?.ssmOrgPath('', false);
|
|
60
|
+
const existingDzProjectParam = this.props.scope?.node.tryFindChild('datazoneEnvironmentProjectId');
|
|
61
|
+
const dzProjectParam = existingDzProjectParam ?? new aws_cdk_lib_1.CfnParameter(this.props.scope, 'datazoneEnvironmentProjectId');
|
|
62
|
+
const ssmPath = `{{resolve:ssm:${ssmOrgPath}${dzProjectParam.valueAsString}${blueprintPath}}}`;
|
|
63
|
+
console.log(`Resolving blueprint path: ${ssmPath}`);
|
|
64
|
+
return ssmPath;
|
|
65
|
+
}
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.MdaaConfigBlueprintRefValueTransformer = MdaaConfigBlueprintRefValueTransformer;
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmx1ZXByaW50LXZhbHVlLXRyYW5zZm9ybWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYmx1ZXByaW50LXZhbHVlLXRyYW5zZm9ybWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0c7OztBQUVILDZDQUEyQztBQUkzQyxtQ0FBbUM7QUFRbkMsTUFBYSxzQ0FBc0M7SUFHakQsWUFBWSxLQUFrRDtRQUM1RCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBRU0sY0FBYyxDQUFDLEtBQWE7UUFDakMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7WUFDOUQsVUFBVSxFQUFFLE1BQU07U0FDbkIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxRQUFRLENBQW9CLENBQUM7UUFDcEUsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRVMsaUJBQWlCLENBQUMsS0FBYSxFQUFFLFFBQWtCO1FBQzNELDBDQUEwQztRQUMxQyxPQUFPLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVPLDZCQUE2QixDQUFDLEtBQWEsRUFBRSxRQUFrQjtRQUNyRSxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDckMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFL0QsSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7WUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3hELE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ25ELENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNaLENBQUM7SUFFTyxlQUFlLENBQUMsS0FBYztRQUNwQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQzVELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxxREFBcUQ7UUFDckQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxRQUFnQjtRQUNoRCxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1lBQy9FLENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO1lBQ3hGLENBQUM7WUFDRCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMxRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVELE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FDaEUsOEJBQThCLENBQ2YsQ0FBQztZQUNsQixNQUFNLGNBQWMsR0FDbEIsc0JBQXNCLElBQUksSUFBSSwwQkFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLDhCQUE4QixDQUFDLENBQUM7WUFDL0YsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLFVBQVUsR0FBRyxjQUFjLENBQUMsYUFBYSxHQUFHLGFBQWEsSUFBSSxDQUFDO1lBQy9GLE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDcEQsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQXRFRCx3RkFzRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQgeyBDZm5QYXJhbWV0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbi8vIG5vc2VtZ3JlcFxuaW1wb3J0IHsgSU1kYWFSZXNvdXJjZU5hbWluZyB9IGZyb20gJ0Bhd3MtbWRhYS9uYW1pbmcnO1xuaW1wb3J0ICogYXMgWFJlZ0V4cCBmcm9tICd4cmVnZXhwJztcbmltcG9ydCB7IElNZGFhQ29uZmlnVmFsdWVUcmFuc2Zvcm1lciwgVHJhbnNmb3JtUmVzdWx0IH0gZnJvbSAnLi90cmFuc2Zvcm1lcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWRhYUNvbmZpZ0JsdWVwcmludFJlZlZhbHVlVHJhbnNmb3JtZXJQcm9wcyB7XG4gIHJlYWRvbmx5IG5hbWluZzogSU1kYWFSZXNvdXJjZU5hbWluZztcbiAgcmVhZG9ubHkgc2NvcGU6IENvbnN0cnVjdDtcbn1cblxuZXhwb3J0IGNsYXNzIE1kYWFDb25maWdCbHVlcHJpbnRSZWZWYWx1ZVRyYW5zZm9ybWVyIGltcGxlbWVudHMgSU1kYWFDb25maWdWYWx1ZVRyYW5zZm9ybWVyIHtcbiAgcHJvdGVjdGVkIHByb3BzOiBNZGFhQ29uZmlnQmx1ZXByaW50UmVmVmFsdWVUcmFuc2Zvcm1lclByb3BzO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBNZGFhQ29uZmlnQmx1ZXByaW50UmVmVmFsdWVUcmFuc2Zvcm1lclByb3BzKSB7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICB9XG5cbiAgcHVibGljIHRyYW5zZm9ybVZhbHVlKHZhbHVlOiBzdHJpbmcpOiBUcmFuc2Zvcm1SZXN1bHQge1xuICAgIGNvbnN0IHJlZk1hdGNoID0gWFJlZ0V4cC5tYXRjaFJlY3Vyc2l2ZSh2YWx1ZSwgJ3t7JywgJ319JywgJ2cnLCB7XG4gICAgICB1bmJhbGFuY2VkOiAnc2tpcCcsXG4gICAgfSk7XG4gICAgaWYgKHJlZk1hdGNoLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlQmx1ZXByaW50UmVmKHZhbHVlLCByZWZNYXRjaCkgYXMgVHJhbnNmb3JtUmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlQmx1ZXByaW50UmVmKHZhbHVlOiBzdHJpbmcsIHJlZk1hdGNoOiBzdHJpbmdbXSk6IHN0cmluZyB8IG51bWJlciB8IG9iamVjdCB7XG4gICAgLy8gU3Vic3RpdHV0ZSBhbGwgcmVmZXJlbmNlcyBpbiB0aGUgc3RyaW5nXG4gICAgcmV0dXJuIHRoaXMuc3Vic3RpdHV0ZUJsdWVwcmludFJlZmVyZW5jZXModmFsdWUsIHJlZk1hdGNoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3Vic3RpdHV0ZUJsdWVwcmludFJlZmVyZW5jZXModmFsdWU6IHN0cmluZywgcmVmTWF0Y2g6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVmTWF0Y2gucmVkdWNlKChyZXN1bHQsIHJlZikgPT4ge1xuICAgICAgY29uc3QgcmVmSW5uZXIgPSB0aGlzLnRyYW5zZm9ybVZhbHVlKHJlZikudG9TdHJpbmcoKTtcbiAgICAgIGNvbnN0IHJlc29sdmVkVmFsdWUgPSB0aGlzLnJlc29sdmVCbHVlcHJpbnRSZWZlcmVuY2UocmVmSW5uZXIpO1xuXG4gICAgICBpZiAocmVzb2x2ZWRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0cmluZ1ZhbHVlID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcocmVzb2x2ZWRWYWx1ZSk7XG4gICAgICByZXR1cm4gcmVzdWx0LnJlcGxhY2UoYHt7JHtyZWZ9fX1gLCBzdHJpbmdWYWx1ZSk7XG4gICAgfSwgdmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0VG9TdHJpbmcodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgLy8gRm9yIG9iamVjdHMsIHVzZSBKU09OLnN0cmluZ2lmeSBhcyBhIHNhZmUgZmFsbGJhY2tcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlQmx1ZXByaW50UmVmZXJlbmNlKHJlZklubmVyOiBzdHJpbmcpIHtcbiAgICBpZiAocmVmSW5uZXIuc3RhcnRzV2l0aCgnYmx1ZXByaW50OicpKSB7XG4gICAgICBpZiAoIXRoaXMucHJvcHMuc2NvcGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gcmVzb2x2ZSBibHVlcHJpbnQgcGFyYW1zIG91dHNpZGUgb2YgYSBDb25zdHJ1Y3QnKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5wcm9wcy5uYW1pbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gcmVzb2x2ZSBibHVlcHJpbnQgcGFyYW1zIHdpdGhvdXQgYSBuYW1pbmcgaW1wbGVtZW50YXRpb24nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJsdWVwcmludFBhdGggPSByZWZJbm5lci5yZXBsYWNlKC9eYmx1ZXByaW50Oi8sICcnKTtcbiAgICAgIGNvbnN0IHNzbU9yZ1BhdGggPSB0aGlzLnByb3BzLm5hbWluZz8uc3NtT3JnUGF0aCgnJywgZmFsc2UpO1xuICAgICAgY29uc3QgZXhpc3RpbmdEelByb2plY3RQYXJhbSA9IHRoaXMucHJvcHMuc2NvcGU/Lm5vZGUudHJ5RmluZENoaWxkKFxuICAgICAgICAnZGF0YXpvbmVFbnZpcm9ubWVudFByb2plY3RJZCcsXG4gICAgICApIGFzIENmblBhcmFtZXRlcjtcbiAgICAgIGNvbnN0IGR6UHJvamVjdFBhcmFtID1cbiAgICAgICAgZXhpc3RpbmdEelByb2plY3RQYXJhbSA/PyBuZXcgQ2ZuUGFyYW1ldGVyKHRoaXMucHJvcHMuc2NvcGUsICdkYXRhem9uZUVudmlyb25tZW50UHJvamVjdElkJyk7XG4gICAgICBjb25zdCBzc21QYXRoID0gYHt7cmVzb2x2ZTpzc206JHtzc21PcmdQYXRofSR7ZHpQcm9qZWN0UGFyYW0udmFsdWVBc1N0cmluZ30ke2JsdWVwcmludFBhdGh9fX1gO1xuICAgICAgY29uc29sZS5sb2coYFJlc29sdmluZyBibHVlcHJpbnQgcGF0aDogJHtzc21QYXRofWApO1xuICAgICAgcmV0dXJuIHNzbVBhdGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|