aws-cdk 2.25.0 → 2.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/THIRD_PARTY_LICENSES +9 -9
- package/build-info.json +2 -2
- package/does-not-exist.json +1 -1
- package/lib/api/aws-auth/sdk-provider.js +7 -2
- package/lib/api/cxapp/cloud-executable.js +2 -2
- package/lib/assets.js +2 -1
- package/lib/cdk-toolkit.js +2 -2
- package/lib/index.js +15878 -5547
- package/lib/init-templates/v1/app/csharp/.template.gitignore +1 -1
- package/lib/init-templates/v1/app/fsharp/.template.gitignore +1 -1
- package/lib/init-templates/v1/app/typescript/package.json +2 -2
- package/lib/init-templates/v1/lib/typescript/package.json +1 -1
- package/lib/init-templates/v1/sample-app/csharp/.template.gitignore +1 -1
- package/lib/init-templates/v1/sample-app/fsharp/.template.gitignore +1 -1
- package/lib/init-templates/v1/sample-app/typescript/package.json +2 -2
- package/lib/init-templates/v2/app/csharp/.template.gitignore +1 -1
- package/lib/init-templates/v2/app/fsharp/.template.gitignore +1 -1
- package/lib/init-templates/v2/app/typescript/package.json +2 -2
- package/lib/init-templates/v2/lib/typescript/package.json +1 -1
- package/lib/init-templates/v2/sample-app/csharp/.template.gitignore +1 -1
- package/lib/init-templates/v2/sample-app/fsharp/.template.gitignore +1 -1
- package/lib/init-templates/v2/sample-app/typescript/package.json +2 -2
- package/package.json +15 -15
- package/test/api/sdk-provider.test.js +24 -1
- package/test/integ/cli/app/app.js +1 -1
- package/test/integ/common/jest-test.bash +4 -1
|
@@ -8,7 +8,7 @@ cdk.out
|
|
|
8
8
|
## Ignore Visual Studio temporary files, build results, and
|
|
9
9
|
## files generated by popular Visual Studio add-ons.
|
|
10
10
|
##
|
|
11
|
-
## Get latest from https://github.com/github/gitignore/blob/
|
|
11
|
+
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
|
|
12
12
|
|
|
13
13
|
# User-specific files
|
|
14
14
|
*.suo
|
|
@@ -8,7 +8,7 @@ cdk.out
|
|
|
8
8
|
## Ignore Visual Studio temporary files, build results, and
|
|
9
9
|
## files generated by popular Visual Studio add-ons.
|
|
10
10
|
##
|
|
11
|
-
## Get latest from https://github.com/github/gitignore/blob/
|
|
11
|
+
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
|
|
12
12
|
|
|
13
13
|
# User-specific files
|
|
14
14
|
*.suo
|
|
@@ -13,12 +13,12 @@
|
|
|
13
13
|
"devDependencies": {
|
|
14
14
|
"@aws-cdk/assertions": "%cdk-version%",
|
|
15
15
|
"@types/prettier": "2.6.0",
|
|
16
|
-
"@types/jest": "^
|
|
16
|
+
"@types/jest": "^28.1.1",
|
|
17
17
|
"@types/node": "10.17.27",
|
|
18
18
|
"jest": "^27.5.1",
|
|
19
19
|
"ts-jest": "^27.1.4",
|
|
20
20
|
"aws-cdk": "%cdk-version%",
|
|
21
|
-
"ts-node": "^10.
|
|
21
|
+
"ts-node": "^10.8.1",
|
|
22
22
|
"typescript": "~3.9.7"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
@@ -8,7 +8,7 @@ cdk.out
|
|
|
8
8
|
## Ignore Visual Studio temporary files, build results, and
|
|
9
9
|
## files generated by popular Visual Studio add-ons.
|
|
10
10
|
##
|
|
11
|
-
## Get latest from https://github.com/github/gitignore/blob/
|
|
11
|
+
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
|
|
12
12
|
|
|
13
13
|
# User-specific files
|
|
14
14
|
*.suo
|
|
@@ -8,7 +8,7 @@ cdk.out
|
|
|
8
8
|
## Ignore Visual Studio temporary files, build results, and
|
|
9
9
|
## files generated by popular Visual Studio add-ons.
|
|
10
10
|
##
|
|
11
|
-
## Get latest from https://github.com/github/gitignore/blob/
|
|
11
|
+
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
|
|
12
12
|
|
|
13
13
|
# User-specific files
|
|
14
14
|
*.suo
|
|
@@ -13,12 +13,12 @@
|
|
|
13
13
|
"devDependencies": {
|
|
14
14
|
"aws-cdk": "%cdk-version%",
|
|
15
15
|
"@aws-cdk/assertions": "%cdk-version%",
|
|
16
|
-
"@types/jest": "^
|
|
16
|
+
"@types/jest": "^28.1.1",
|
|
17
17
|
"@types/node": "10.17.27",
|
|
18
18
|
"@types/prettier": "2.6.0",
|
|
19
19
|
"jest": "^27.5.1",
|
|
20
20
|
"ts-jest": "^27.1.4",
|
|
21
|
-
"ts-node": "^10.
|
|
21
|
+
"ts-node": "^10.8.1",
|
|
22
22
|
"typescript": "~3.9.7"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
@@ -8,7 +8,7 @@ cdk.out
|
|
|
8
8
|
## Ignore Visual Studio temporary files, build results, and
|
|
9
9
|
## files generated by popular Visual Studio add-ons.
|
|
10
10
|
##
|
|
11
|
-
## Get latest from https://github.com/github/gitignore/blob/
|
|
11
|
+
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
|
|
12
12
|
|
|
13
13
|
# User-specific files
|
|
14
14
|
*.suo
|
|
@@ -8,7 +8,7 @@ cdk.out
|
|
|
8
8
|
## Ignore Visual Studio temporary files, build results, and
|
|
9
9
|
## files generated by popular Visual Studio add-ons.
|
|
10
10
|
##
|
|
11
|
-
## Get latest from https://github.com/github/gitignore/blob/
|
|
11
|
+
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
|
|
12
12
|
|
|
13
13
|
# User-specific files
|
|
14
14
|
*.suo
|
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
"cdk": "cdk"
|
|
12
12
|
},
|
|
13
13
|
"devDependencies": {
|
|
14
|
-
"@types/jest": "^
|
|
14
|
+
"@types/jest": "^28.1.1",
|
|
15
15
|
"@types/node": "10.17.27",
|
|
16
16
|
"@types/prettier": "2.6.0",
|
|
17
17
|
"jest": "^27.5.1",
|
|
18
18
|
"ts-jest": "^27.1.4",
|
|
19
19
|
"aws-cdk": "%cdk-version%",
|
|
20
|
-
"ts-node": "^10.
|
|
20
|
+
"ts-node": "^10.8.1",
|
|
21
21
|
"typescript": "~3.9.7"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
@@ -8,7 +8,7 @@ cdk.out
|
|
|
8
8
|
## Ignore Visual Studio temporary files, build results, and
|
|
9
9
|
## files generated by popular Visual Studio add-ons.
|
|
10
10
|
##
|
|
11
|
-
## Get latest from https://github.com/github/gitignore/blob/
|
|
11
|
+
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
|
|
12
12
|
|
|
13
13
|
# User-specific files
|
|
14
14
|
*.suo
|
|
@@ -8,7 +8,7 @@ cdk.out
|
|
|
8
8
|
## Ignore Visual Studio temporary files, build results, and
|
|
9
9
|
## files generated by popular Visual Studio add-ons.
|
|
10
10
|
##
|
|
11
|
-
## Get latest from https://github.com/github/gitignore/blob/
|
|
11
|
+
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore
|
|
12
12
|
|
|
13
13
|
# User-specific files
|
|
14
14
|
*.suo
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
},
|
|
13
13
|
"devDependencies": {
|
|
14
14
|
"aws-cdk": "%cdk-version%",
|
|
15
|
-
"@types/jest": "^
|
|
15
|
+
"@types/jest": "^28.1.1",
|
|
16
16
|
"@types/node": "10.17.27",
|
|
17
17
|
"@types/prettier": "2.6.0",
|
|
18
18
|
"jest": "^27.5.1",
|
|
19
19
|
"ts-jest": "^27.1.4",
|
|
20
|
-
"ts-node": "^10.
|
|
20
|
+
"ts-node": "^10.8.1",
|
|
21
21
|
"typescript": "~3.9.7"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "aws-cdk",
|
|
3
3
|
"description": "CDK Toolkit, the command line tool for CDK apps",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.28.0",
|
|
5
5
|
"bin": {
|
|
6
6
|
"cdk": "bin/cdk"
|
|
7
7
|
},
|
|
@@ -58,12 +58,12 @@
|
|
|
58
58
|
},
|
|
59
59
|
"license": "Apache-2.0",
|
|
60
60
|
"devDependencies": {
|
|
61
|
-
"@aws-cdk/core": "2.
|
|
61
|
+
"@aws-cdk/core": "2.28.0",
|
|
62
62
|
"@octokit/rest": "^18.12.0",
|
|
63
63
|
"@types/archiver": "^5.3.1",
|
|
64
64
|
"@types/fs-extra": "^8.1.2",
|
|
65
65
|
"@types/glob": "^7.2.0",
|
|
66
|
-
"@types/jest": "^27.5.
|
|
66
|
+
"@types/jest": "^27.5.2",
|
|
67
67
|
"@types/minimatch": "^3.0.5",
|
|
68
68
|
"@types/mockery": "^1.4.30",
|
|
69
69
|
"@types/node": "^10.17.60",
|
|
@@ -75,34 +75,34 @@
|
|
|
75
75
|
"@types/wrap-ansi": "^3.0.0",
|
|
76
76
|
"@types/yargs": "^15.0.14",
|
|
77
77
|
"aws-sdk-mock": "5.6.0",
|
|
78
|
-
"@aws-cdk/cdk-build-tools": "2.
|
|
78
|
+
"@aws-cdk/cdk-build-tools": "2.28.0",
|
|
79
79
|
"jest": "^27.5.1",
|
|
80
80
|
"madge": "^5.0.1",
|
|
81
81
|
"constructs": "^10.0.0",
|
|
82
82
|
"make-runnable": "^1.3.10",
|
|
83
83
|
"mockery": "^2.1.0",
|
|
84
|
-
"nock": "^13.2.
|
|
85
|
-
"@aws-cdk/pkglint": "2.
|
|
84
|
+
"nock": "^13.2.6",
|
|
85
|
+
"@aws-cdk/pkglint": "2.28.0",
|
|
86
86
|
"sinon": "^9.2.4",
|
|
87
|
-
"ts-jest": "^27.1.
|
|
87
|
+
"ts-jest": "^27.1.5",
|
|
88
88
|
"ts-mock-imports": "^1.3.8",
|
|
89
89
|
"xml-js": "^1.6.11",
|
|
90
90
|
"axios": "^0.27.2",
|
|
91
|
-
"@aws-cdk/cloud-assembly-schema": "2.
|
|
92
|
-
"@aws-cdk/cloudformation-diff": "2.
|
|
93
|
-
"@aws-cdk/cx-api": "2.
|
|
94
|
-
"@aws-cdk/region-info": "2.
|
|
95
|
-
"@jsii/check-node": "1.
|
|
91
|
+
"@aws-cdk/cloud-assembly-schema": "2.28.0",
|
|
92
|
+
"@aws-cdk/cloudformation-diff": "2.28.0",
|
|
93
|
+
"@aws-cdk/cx-api": "2.28.0",
|
|
94
|
+
"@aws-cdk/region-info": "2.28.0",
|
|
95
|
+
"@jsii/check-node": "1.60.1",
|
|
96
96
|
"archiver": "^5.3.1",
|
|
97
97
|
"aws-sdk": "^2.1093.0",
|
|
98
98
|
"camelcase": "^6.3.0",
|
|
99
|
-
"cdk-assets": "2.
|
|
99
|
+
"cdk-assets": "2.28.0",
|
|
100
100
|
"chokidar": "^3.5.3",
|
|
101
101
|
"chalk": "^4",
|
|
102
102
|
"decamelize": "^5.0.1",
|
|
103
103
|
"fs-extra": "^9.1.0",
|
|
104
|
-
"glob": "^7.2.
|
|
105
|
-
"json-diff": "^0.
|
|
104
|
+
"glob": "^7.2.3",
|
|
105
|
+
"json-diff": "^0.9.0",
|
|
106
106
|
"minimatch": ">=3.1",
|
|
107
107
|
"promptly": "^3.2.0",
|
|
108
108
|
"proxy-agent": "^5.0.0",
|
|
@@ -292,6 +292,29 @@ describe('with intercepted network calls', () => {
|
|
|
292
292
|
}));
|
|
293
293
|
});
|
|
294
294
|
});
|
|
295
|
+
test('assuming a role does not fail when OS username cannot be read', async () => {
|
|
296
|
+
// GIVEN
|
|
297
|
+
prepareCreds({
|
|
298
|
+
fakeSts,
|
|
299
|
+
config: {
|
|
300
|
+
default: { aws_access_key_id: 'foo', $account: '11111' },
|
|
301
|
+
},
|
|
302
|
+
});
|
|
303
|
+
await util_1.withMocked(os, 'userInfo', async (userInfo) => {
|
|
304
|
+
userInfo.mockImplementation(() => {
|
|
305
|
+
// SystemError thrown as documented: https://nodejs.org/docs/latest-v16.x/api/os.html#osuserinfooptions
|
|
306
|
+
throw new Error('SystemError on Linux: uv_os_get_passwd returned ENOENT. See #19401 issue.');
|
|
307
|
+
});
|
|
308
|
+
// WHEN
|
|
309
|
+
const provider = await providerFromProfile(undefined);
|
|
310
|
+
const sdk = (await provider.forEnvironment(env(uniq('88888')), aws_auth_1.Mode.ForReading, { assumeRoleArn: 'arn:aws:role' })).sdk;
|
|
311
|
+
await sdk.currentAccount();
|
|
312
|
+
// THEN
|
|
313
|
+
expect(fakeSts.assumedRoles[0]).toEqual(expect.objectContaining({
|
|
314
|
+
roleSessionName: 'aws-cdk-noname',
|
|
315
|
+
}));
|
|
316
|
+
});
|
|
317
|
+
});
|
|
295
318
|
test('even if current credentials are for the wrong account, we will still use them to AssumeRole', async () => {
|
|
296
319
|
// GIVEN
|
|
297
320
|
prepareCreds({
|
|
@@ -540,4 +563,4 @@ function isProfileRole(x) {
|
|
|
540
563
|
function providerFromProfile(profile) {
|
|
541
564
|
return aws_auth_1.SdkProvider.withAwsCliCompatibleDefaults({ ...defaultCredOptions, profile });
|
|
542
565
|
}
|
|
543
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLXByb3ZpZGVyLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzZGstcHJvdmlkZXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlCQUF5QjtBQUN6Qix5Q0FBeUM7QUFDekMsK0JBQStCO0FBRS9CLHFDQUFxQztBQUNyQyw2QkFBNkI7QUFDN0IscURBQXNFO0FBQ3RFLGlEQUFrRDtBQUNsRCw2Q0FBNkM7QUFDN0Msb0NBQW9DO0FBQ3BDLGtDQUFxQztBQUNyQyx5Q0FBK0U7QUFFL0UsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUMzQixNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztDQUM1QyxDQUFDLENBQUMsQ0FBQztBQUVKLE1BQU0sa0JBQWtCLEdBQUc7SUFDekIsUUFBUSxFQUFFLEtBQUs7SUFDZixjQUFjLEVBQUUsS0FBSztDQUN0QixDQUFDO0FBRUYsSUFBSSxHQUFXLENBQUM7QUFDaEIsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBRTFCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7SUFDZCxpQkFBaUI7SUFDakIsMkNBQTJDO0lBQzNDLEVBQUU7SUFDRixpREFBaUQ7SUFDakQsK0NBQStDO0lBQy9DLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBRXZCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU1QyxtQkFBVSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEQsbUJBQVUsQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDO1FBQ2pELFdBQVcsS0FBSyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxD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QztBQUN6QixDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxPQUEyQjtJQUN0RCxPQUFPLHNCQUFXLENBQUMsNEJBQTRCLENBQUMsRUFBRSxHQUFHLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDdEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIG9zIGZyb20gJ29zJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBBV1MgZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgdHlwZSB7IENvbmZpZ3VyYXRpb25PcHRpb25zIH0gZnJvbSAnYXdzLXNkay9saWIvY29uZmlnLWJhc2UnO1xuaW1wb3J0ICogYXMgcHJvbXB0bHkgZnJvbSAncHJvbXB0bHknO1xuaW1wb3J0ICogYXMgdXVpZCBmcm9tICd1dWlkJztcbmltcG9ydCB7IElTREssIE1vZGUsIFNESywgU2RrUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9saWIvYXBpL2F3cy1hdXRoJztcbmltcG9ydCB7IFBsdWdpbkhvc3QgfSBmcm9tICcuLi8uLi9saWIvYXBpL3BsdWdpbic7XG5pbXBvcnQgKiBhcyBsb2dnaW5nIGZyb20gJy4uLy4uL2xpYi9sb2dnaW5nJztcbmltcG9ydCAqIGFzIGJvY2tmcyBmcm9tICcuLi9ib2NrZnMnO1xuaW1wb3J0IHsgd2l0aE1vY2tlZCB9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IHsgRmFrZVN0cywgUmVnaXN0ZXJSb2xlT3B0aW9ucywgUmVnaXN0ZXJVc2VyT3B0aW9ucyB9IGZyb20gJy4vZmFrZS1zdHMnO1xuXG5qZXN0Lm1vY2soJ3Byb21wdGx5JywgKCkgPT4gKHtcbiAgcHJvbXB0OiBqZXN0LmZuKCkubW9ja1Jlc29sdmVkVmFsdWUoJzEyMzQnKSxcbn0pKTtcblxuY29uc3QgZGVmYXVsdENyZWRPcHRpb25zID0ge1xuICBlYzJjcmVkczogZmFsc2UsXG4gIGNvbnRhaW5lckNyZWRzOiBmYWxzZSxcbn07XG5cbmxldCB1aWQ6IHN0cmluZztcbmxldCBwbHVnaW5RdWVyaWVkID0gZmFsc2U7XG5cbmJlZm9yZUVhY2goKCkgPT4ge1xuICAvLyBDYWNoZSBidXN0ZXJzIVxuICAvLyBXZSBwcmVmaXggZXZlcnl0aGluZyB3aXRoIFVVSURzIGJlY2F1c2U6XG4gIC8vXG4gIC8vIC0gV2UgaGF2ZSBhIGNhY2hlIGZyb20gYWNjb3VudCMgLT4gY3JlZGVudGlhbHNcbiAgLy8gLSBXZSBoYXZlIGEgY2FjaGUgZnJvbSBhY2Nlc3Mga2V5IC0+IGFjY291bnRcbiAgdWlkID0gYCgke3V1aWQudjQoKX0pYDtcblxuICBsb2dnaW5nLnNldExvZ0xldmVsKGxvZ2dpbmcuTG9nTGV2ZWwuVFJBQ0UpO1xuXG4gIFBsdWdpbkhvc3QuaW5zdGFuY2UuY3JlZGVudGlhbFByb3ZpZGVyU291cmNlcy5zcGxpY2UoMCk7XG4gIFBsdWdpbkhvc3QuaW5zdGFuY2UuY3JlZGVudGlhbFByb3ZpZGVyU291cmNlcy5wdXNoKHtcbiAgICBpc0F2YWlsYWJsZSgpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTsgfSxcbiAgICBjYW5Qcm92aWRlQ3JlZGVudGlhbHMoYWNjb3VudCkgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGFjY291bnQgPT09IHVuaXEoJzk5OTk5JykpOyB9LFxuICAgIGdldFByb3ZpZGVyKCkge1xuICAgICAgcGx1Z2luUXVlcmllZCA9IHRydWU7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBBV1MuQ3JlZGVudGlhbHMoe1xuICAgICAgICBhY2Nlc3NLZXlJZDogYCR7dWlkfXBsdWdpbl9rZXlgLFxuICAgICAgICBzZWNyZXRBY2Nlc3NLZXk6ICdwbHVnaW5fc2VjcmV0JyxcbiAgICAgICAgc2Vzc2lvblRva2VuOiAncGx1Z2luX3Rva2VuJyxcbiAgICAgIH0pKTtcbiAgICB9LFxuICAgIG5hbWU6ICd0ZXN0IHBsdWdpbicsXG4gIH0pO1xuXG4gIC8vIE1ha2Ugc3VyZSB0aGVzZSBwb2ludCB0byBub25leGlzdGFudCBmaWxlcyB0byBzdGFydCwgaWYgd2UgZG9uJ3QgY2FsbFxuICAvLyBwcmVwYXJlKCkgdGhlbiB3ZSBkb24ndCBhY2NpZGVudGFsbHkgd2FudCB0byBmYWxsIGJhY2sgdG8gc3lzdGVtIGNvbmZpZy5cbiAgcHJvY2Vzcy5lbnYuQVdTX0NPTkZJR19GSUxFID0gJy9kZXYvbnVsbCc7XG4gIHByb2Nlc3MuZW52LkFXU19TSEFSRURfQ1JFREVOVElBTFNfRklMRSA9ICcvZGV2L251bGwnO1xufSk7XG5cbmFmdGVyRWFjaCgoKSA9PiB7XG4gIGJvY2tmcy5yZXN0b3JlKCk7XG59KTtcblxuZnVuY3Rpb24gdW5pcShhY2NvdW50OiBzdHJpbmcpIHtcbiAgcmV0dXJuIGAke3VpZH0ke2FjY291bnR9YDtcbn1cblxuZnVuY3Rpb24gZW52KGFjY291bnQ6IHN0cmluZykge1xuICByZXR1cm4gY3hhcGkuRW52aXJvbm1lbnRVdGlscy5tYWtlKGFjY291bnQsICdkZWYnKTtcbn1cblxuZGVzY3JpYmUoJ3dpdGggaW50ZXJjZXB0ZWQgbmV0d29yayBjYWxscycsICgpID0+IHtcbiAgLy8gTW9zdCB0ZXN0cyB3aWxsIHVzZSBpbnRlcmNlcHRlZCBuZXR3b3JrIGNhbGxzLCBleGNlcHQgb25lIHRlc3QgdGhhdCB0ZXN0c1xuICAvLyB0aGF0IHRoZSByaWdodCBIVFRQIGBBZ2VudGAgaXMgdXNlZC5cblxuICBsZXQgZmFrZVN0czogRmFrZVN0cztcbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgZmFrZVN0cyA9IG5ldyBGYWtlU3RzKCk7XG4gICAgZmFrZVN0cy5iZWdpbigpO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBLZXlJRCByZXR1cm5lZCBieSB0aGUgcGx1Z2luIGlzIHJlY29nbml6ZWRcbiAgICBmYWtlU3RzLnJlZ2lzdGVyVXNlcih1bmlxKCc5OTk5OScpLCB1bmlxKCdwbHVnaW5fa2V5JykpO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIGZha2VTdHMucmVzdG9yZSgpO1xuICB9KTtcblxuICAvLyBTZXQgb2YgdGVzdHMgd2hlcmUgdGhlIENESyB3aWxsIG5vdCB0cmlnZ2VyIGFzc3VtZS1yb2xlXG4gIC8vICh0aGUgSU5JIGZpbGUgbWlnaHQgc3RpbGwgZG8gYXNzdW1lLXJvbGUpXG4gIGRlc2NyaWJlKCd3aGVuIENESyBkb2VzIG5vdCBBc3N1bWVSb2xlJywgKCkgPT4ge1xuICAgIHRlc3QoJ3VzZXMgZGVmYXVsdCBjcmVkZW50aWFscyBieSBkZWZhdWx0JywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gV0hFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnYWNjZXNzJywgJGFjY291bnQ6ICcxMTExMScsICRmYWtlU3RzT3B0aW9uczogeyBwYXJ0aXRpb246ICdhd3MtaGVyZScgfSB9LFxuICAgICAgICB9LFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7IHJlZ2lvbjogJ2V1LWJsYS01JyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KHByb3ZpZGVyLmRlZmF1bHRSZWdpb24pLnRvRXF1YWwoJ2V1LWJsYS01Jyk7XG4gICAgICBhd2FpdCBleHBlY3QocHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKSkucmVzb2x2ZXMudG9FcXVhbCh7IGFjY291bnRJZDogdW5pcSgnMTExMTEnKSwgcGFydGl0aW9uOiAnYXdzLWhlcmUnIH0pO1xuXG4gICAgICAvLyBBc2sgZm9yIGEgZGlmZmVyZW50IHJlZ2lvblxuICAgICAgY29uc3Qgc2RrID0gKGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KHsgLi4uZW52KHVuaXEoJzExMTExJykpLCByZWdpb246ICdyZ24nIH0sIE1vZGUuRm9yUmVhZGluZykpLnNkaztcbiAgICAgIGV4cGVjdChzZGtDb25maWcoc2RrKS5jcmVkZW50aWFscyEuYWNjZXNzS2V5SWQpLnRvRXF1YWwodW5pcSgnYWNjZXNzJykpO1xuICAgICAgZXhwZWN0KHNkay5jdXJyZW50UmVnaW9uKS50b0VxdWFsKCdyZ24nKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3Rocm93cyBpZiBwcm9maWxlIGNyZWRlbnRpYWxzIGFyZSBub3QgZm9yIHRoZSByaWdodCBhY2NvdW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gV0hFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgJ3Byb2ZpbGUgYm9vJzogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2FjY2VzcycsICRhY2NvdW50OiAnMTExMTEnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSgnYm9vJyk7XG5cbiAgICAgIGF3YWl0IGV4cGVjdChwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnc29tZV9hY2NvdW50XyMnKSksIE1vZGUuRm9yUmVhZGluZykpLnJlamVjdHMudG9UaHJvdygnTmVlZCB0byBwZXJmb3JtIEFXUyBjYWxscycpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgndXNlIHByb2ZpbGUgYWNjdC9yZWdpb24gaWYgYWdub3N0aWMgZW52IHJlcXVlc3RlZCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFdIRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICAgICAgZGVmYXVsdDogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2FjY2VzcycsICRhY2NvdW50OiAnMTExMTEnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgcmVnaW9uOiAnZXUtYmxhLTUnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBjb25zdCBzZGsgPSAoYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoY3hhcGkuRW52aXJvbm1lbnRVdGlscy5tYWtlKGN4YXBpLlVOS05PV05fQUNDT1VOVCwgY3hhcGkuVU5LTk9XTl9SRUdJT04pLCBNb2RlLkZvclJlYWRpbmcpKS5zZGs7XG4gICAgICBleHBlY3Qoc2RrQ29uZmlnKHNkaykuY3JlZGVudGlhbHMhLmFjY2Vzc0tleUlkKS50b0VxdWFsKHVuaXEoJ2FjY2VzcycpKTtcbiAgICAgIGV4cGVjdCgoYXdhaXQgc2RrLmN1cnJlbnRBY2NvdW50KCkpLmFjY291bnRJZCkudG9FcXVhbCh1bmlxKCcxMTExMScpKTtcbiAgICAgIGV4cGVjdChzZGsuY3VycmVudFJlZ2lvbikudG9FcXVhbCgnZXUtYmxhLTUnKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3Bhc3NpbmcgcHJvZmlsZSBza2lwcyBFbnZpcm9ubWVudENyZWRlbnRpYWxzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICAgICAgZm9vOiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnYWNjZXNzJywgJGFjY291bnQ6ICcxMTExMScgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKCdmb28nKTtcblxuICAgICAgY29uc3QgZW52aXJvbm1lbnRDcmVkZW50aWFsc1Byb3RvdHlwZSA9IChuZXcgQVdTLkVudmlyb25tZW50Q3JlZGVudGlhbHMoJ0FXUycpKS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICAgIGF3YWl0IHdpdGhNb2NrZWQoZW52aXJvbm1lbnRDcmVkZW50aWFsc1Byb3RvdHlwZSwgJ3JlZnJlc2gnLCBhc3luYyAocmVmcmVzaCkgPT4ge1xuICAgICAgICByZWZyZXNoLm1vY2tJbXBsZW1lbnRhdGlvbigoY2FsbGJhY2s6IChlcnI/OiBFcnJvcikgPT4gdm9pZCkgPT4gY2FsbGJhY2sobmV3IEVycm9yKCdUaGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgaGF2ZSBiZWVuIGNhbGxlZCcpKSk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBleHBlY3QoKGF3YWl0IHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCkpPy5hY2NvdW50SWQpLnRvRXF1YWwodW5pcSgnMTExMTEnKSk7XG5cbiAgICAgICAgZXhwZWN0KHJlZnJlc2gpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3N1cHBvcnRzIHByb2ZpbGUgc3ByZWFkIG92ZXIgY29uZmlnX2ZpbGUgYW5kIGNyZWRlbnRpYWxzX2ZpbGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBXSEVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgIGZvbzogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2Zvb2NjZXNzJywgJGFjY291bnQ6ICcyMjIyMicgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgJ2RlZmF1bHQnOiB7IHJlZ2lvbjogJ2V1LWJsYS01JyB9LFxuICAgICAgICAgICdwcm9maWxlIGZvbyc6IHsgcmVnaW9uOiAnZXUtd2VzdC0xJyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IFNka1Byb3ZpZGVyLndpdGhBd3NDbGlDb21wYXRpYmxlRGVmYXVsdHMoeyAuLi5kZWZhdWx0Q3JlZE9wdGlvbnMsIHByb2ZpbGU6ICdmb28nIH0pO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QocHJvdmlkZXIuZGVmYXVsdFJlZ2lvbikudG9FcXVhbCgnZXUtd2VzdC0xJyk7XG4gICAgICBhd2FpdCBleHBlY3QocHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKSkucmVzb2x2ZXMudG9FcXVhbCh7IGFjY291bnRJZDogdW5pcSgnMjIyMjInKSwgcGFydGl0aW9uOiAnYXdzJyB9KTtcblxuICAgICAgY29uc3Qgc2RrID0gKGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KGVudih1bmlxKCcyMjIyMicpKSwgTW9kZS5Gb3JSZWFkaW5nKSkuc2RrO1xuICAgICAgZXhwZWN0KHNka0NvbmZpZyhzZGspLmNyZWRlbnRpYWxzIS5hY2Nlc3NLZXlJZCkudG9FcXVhbCh1bmlxKCdmb29jY2VzcycpKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3N1cHBvcnRzIHByb2ZpbGUgb25seSBpbiBjb25maWdfZmlsZScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFdIRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICdkZWZhdWx0JzogeyByZWdpb246ICdldS1ibGEtNScgfSxcbiAgICAgICAgICAncHJvZmlsZSBmb28nOiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnZm9vY2Nlc3MnLCAkYWNjb3VudDogJzIyMjIyJyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ2ZvbycpO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QocHJvdmlkZXIuZGVmYXVsdFJlZ2lvbikudG9FcXVhbCgnZXUtYmxhLTUnKTsgLy8gRmFsbCBiYWNrIHRvIGRlZmF1bHQgY29uZmlnXG4gICAgICBhd2FpdCBleHBlY3QocHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKSkucmVzb2x2ZXMudG9FcXVhbCh7IGFjY291bnRJZDogdW5pcSgnMjIyMjInKSwgcGFydGl0aW9uOiAnYXdzJyB9KTtcblxuICAgICAgY29uc3Qgc2RrID0gKGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KGVudih1bmlxKCcyMjIyMicpKSwgTW9kZS5Gb3JSZWFkaW5nKSkuc2RrO1xuICAgICAgZXhwZWN0KHNka0NvbmZpZyhzZGspLmNyZWRlbnRpYWxzIS5hY2Nlc3NLZXlJZCkudG9FcXVhbCh1bmlxKCdmb29jY2VzcycpKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NhbiBhc3N1bWUtcm9sZSBjb25maWd1cmVkIGluIGNvbmZpZycsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgIGFzc3VtZXI6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdhc3N1bWVyJywgJGFjY291bnQ6ICcxMTExMScgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgJ2RlZmF1bHQnOiB7IHJlZ2lvbjogJ2V1LWJsYS01JyB9LFxuICAgICAgICAgICdwcm9maWxlIGFzc3VtZXInOiB7IHJlZ2lvbjogJ3VzLWVhc3QtMicgfSxcbiAgICAgICAgICAncHJvZmlsZSBhc3N1bWFibGUnOiB7XG4gICAgICAgICAgICByb2xlX2FybjogJ2Fybjphd3M6aWFtOjo2NjY2Njpyb2xlL0Fzc3VtYWJsZScsXG4gICAgICAgICAgICBzb3VyY2VfcHJvZmlsZTogJ2Fzc3VtZXInLFxuICAgICAgICAgICAgJGFjY291bnQ6ICc2NjY2NicsXG4gICAgICAgICAgICAkZmFrZVN0c09wdGlvbnM6IHsgYWxsb3dlZEFjY291bnRzOiBbJzExMTExJ10gfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ2Fzc3VtYWJsZScpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBjb25zdCBzZGsgPSAoYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzY2NjY2JykpLCBNb2RlLkZvclJlYWRpbmcpKS5zZGs7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdCgoYXdhaXQgc2RrLmN1cnJlbnRBY2NvdW50KCkpLmFjY291bnRJZCkudG9FcXVhbCh1bmlxKCc2NjY2NicpKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NhbiBhc3N1bWUgcm9sZSBldmVuIGlmIFtkZWZhdWx0XSBwcm9maWxlIGlzIG1pc3NpbmcnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICBhc3N1bWVyOiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnYXNzdW1lcicsICRhY2NvdW50OiAnMjIyMjInIH0sXG4gICAgICAgICAgYXNzdW1hYmxlOiB7IHJvbGVfYXJuOiAnYXJuOmF3czppYW06OjEyMzU2Nzg5MDEyOnJvbGUvQXNzdW1hYmxlJywgc291cmNlX3Byb2ZpbGU6ICdhc3N1bWVyJywgJGFjY291bnQ6ICcyMjIyMicgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgJ3Byb2ZpbGUgYXNzdW1hYmxlJzogeyByZWdpb246ICdldS1ibGEtNScgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ2Fzc3VtYWJsZScpO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoKGF3YWl0IHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCkpPy5hY2NvdW50SWQpLnRvRXF1YWwodW5pcSgnMjIyMjInKSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdtZmFfc2VyaWFsIGluIHByb2ZpbGUgd2lsbCBhc2sgdXNlciBmb3IgdG9rZW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICBhc3N1bWVyOiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnYXNzdW1lcicsICRhY2NvdW50OiAnNjY2NjYnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICdkZWZhdWx0JzogeyByZWdpb246ICdldS1ibGEtNScgfSxcbiAgICAgICAgICAncHJvZmlsZSBhc3N1bWVyJzogeyByZWdpb246ICd1cy1lYXN0LTInIH0sXG4gICAgICAgICAgJ3Byb2ZpbGUgbWZhLXJvbGUnOiB7XG4gICAgICAgICAgICByb2xlX2FybjogJ2Fybjphd3M6aWFtOjo2NjY2Njpyb2xlL0Fzc3VtYWJsZScsXG4gICAgICAgICAgICBzb3VyY2VfcHJvZmlsZTogJ2Fzc3VtZXInLFxuICAgICAgICAgICAgbWZhX3NlcmlhbDogJ2Fybjphd3M6aWFtOjphY2NvdW50Om1mYS91c2VyJyxcbiAgICAgICAgICAgICRhY2NvdW50OiAnNjY2NjYnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSgnbWZhLXJvbGUnKTtcblxuICAgICAgY29uc3QgcHJvbXB0bHlNb2NrQ2FsbHMgPSAocHJvbXB0bHkucHJvbXB0IGFzIGplc3QuTW9jaykubW9jay5jYWxscy5sZW5ndGg7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGNvbnN0IHNkayA9IChhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnNjY2NjYnKSksIE1vZGUuRm9yUmVhZGluZykpLnNkaztcbiAgICAgIGV4cGVjdCgoYXdhaXQgc2RrLmN1cnJlbnRBY2NvdW50KCkpLmFjY291bnRJZCkudG9FcXVhbCh1bmlxKCc2NjY2NicpKTtcbiAgICAgIGV4cGVjdChmYWtlU3RzLmFzc3VtZWRSb2xlc1swXSkudG9FcXVhbChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgIHJvbGVBcm46ICdhcm46YXdzOmlhbTo6NjY2NjY6cm9sZS9Bc3N1bWFibGUnLFxuICAgICAgICBzZXJpYWxOdW1iZXI6ICdhcm46YXdzOmlhbTo6YWNjb3VudDptZmEvdXNlcicsXG4gICAgICAgIHRva2VuQ29kZTogJzEyMzQnLFxuICAgICAgfSkpO1xuXG4gICAgICAvLyBNb2NrIHJlc3BvbnNlIHdhcyBzZXQgdG8gZmFpbCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgY2FsbCBTVFNcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgTUZBIG1vY2sgd2FzIGNhbGxlZCBkdXJpbmcgdGhpcyB0ZXN0XG4gICAgICBleHBlY3QoKHByb21wdGx5LnByb21wdCBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHMubGVuZ3RoKS50b0JlKHByb21wdGx5TW9ja0NhbGxzICsgMSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIEZvciBEZWZhdWx0U3ludGhlc2lzIHdlIHdpbGwgZG8gYW4gYXNzdW1lLXJvbGUgYWZ0ZXIgaGF2aW5nIGdvdHRlbiBiYXNlIGNyZWRlbnRpYWxzXG4gIGRlc2NyaWJlKCd3aGVuIENESyBBc3N1bWVSb2xlcycsICgpID0+IHtcbiAgICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICAgIC8vIEFsbCB0aGVzZSB0ZXN0cyBzaGFyZSB0aGF0ICdhcm46YXdzOnJvbGUnIGlzIGEgcm9sZSBpbnRvIGFjY291bnQgODg4ODggd2hpY2ggY2FuIGJlIGFzc3VtZWQgZnJvbSAxMTExMVxuICAgICAgZmFrZVN0cy5yZWdpc3RlclJvbGUodW5pcSgnODg4ODgnKSwgJ2Fybjphd3M6cm9sZScsIHsgYWxsb3dlZEFjY291bnRzOiBbdW5pcSgnMTExMTEnKV0gfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdlcnJvciB3ZSBnZXQgZnJvbSBhc3N1bWluZyBhIHJvbGUgaXMgdXNlZnVsJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdmb28nIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBjb25zdCBwcm9taXNlID0gcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzg4ODg4JykpLCBNb2RlLkZvclJlYWRpbmcsIHtcbiAgICAgICAgYXNzdW1lUm9sZUFybjogJ2RvZXNub3RleGlzdC5yb2xlLmFybicsXG4gICAgICB9KTtcblxuICAgICAgLy8gVEhFTiAtIGVycm9yIG1lc3NhZ2UgY29udGFpbnMgYm90aCBhIGhlbHBmdWwgaGludCBhbmQgdGhlIHVuZGVybHlpbmcgQXNzdW1lUm9sZSBtZXNzYWdlXG4gICAgICBhd2FpdCBleHBlY3QocHJvbWlzZSkucmVqZWN0cy50b1Rocm93KCcocmUpLWJvb3RzdHJhcCB0aGUgZW52aXJvbm1lbnQnKTtcbiAgICAgIGF3YWl0IGV4cGVjdChwcm9taXNlKS5yZWplY3RzLnRvVGhyb3coJ2RvZXNub3RleGlzdC5yb2xlLmFybicpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnYXNzdW1pbmcgYSByb2xlIHNhbml0aXplcyB0aGUgdXNlcm5hbWUgaW50byB0aGUgc2Vzc2lvbiBuYW1lJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdmb28nLCAkYWNjb3VudDogJzExMTExJyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHdpdGhNb2NrZWQob3MsICd1c2VySW5mbycsIGFzeW5jICh1c2VySW5mbykgPT4ge1xuICAgICAgICB1c2VySW5mby5tb2NrUmV0dXJuVmFsdWUoeyB1c2VybmFtZTogJ3Nrw6VsJywgdWlkOiAxLCBnaWQ6IDEsIGhvbWVkaXI6ICcvaGVyZScsIHNoZWxsOiAnL2Jpbi9zaCcgfSk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgICAgICBjb25zdCBzZGsgPSAoYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzg4ODg4JykpLCBNb2RlLkZvclJlYWRpbmcsIHsgYXNzdW1lUm9sZUFybjogJ2Fybjphd3M6cm9sZScgfSkpLnNkayBhcyBTREs7XG4gICAgICAgIGF3YWl0IHNkay5jdXJyZW50QWNjb3VudCgpO1xuXG4gICAgICAgIC8vIFRIRU5cbiAgICAgICAgZXhwZWN0KGZha2VTdHMuYXNzdW1lZFJvbGVzWzBdKS50b0VxdWFsKGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICByb2xlU2Vzc2lvbk5hbWU6ICdhd3MtY2RrLXNrQGwnLFxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2V2ZW4gaWYgY3VycmVudCBjcmVkZW50aWFscyBhcmUgZm9yIHRoZSB3cm9uZyBhY2NvdW50LCB3ZSB3aWxsIHN0aWxsIHVzZSB0aGVtIHRvIEFzc3VtZVJvbGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgZGVmYXVsdDogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2ZvbycsICRhY2NvdW50OiAnMTExMTEnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBjb25zdCBzZGsgPSAoYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzg4ODg4JykpLCBNb2RlLkZvclJlYWRpbmcsIHsgYXNzdW1lUm9sZUFybjogJ2Fybjphd3M6cm9sZScgfSkpLnNkayBhcyBTREs7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdCgoYXdhaXQgc2RrLmN1cnJlbnRBY2NvdW50KCkpLmFjY291bnRJZCkudG9FcXVhbCh1bmlxKCc4ODg4OCcpKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2lmIEFzc3VtZVJvbGUgZmFpbHMgYnV0IGN1cnJlbnQgY3JlZGVudGlhbHMgYXJlIGZvciB0aGUgcmlnaHQgYWNjb3VudCwgd2Ugd2lsbCBzdGlsbCB1c2UgdGhlbScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnZm9vJywgJGFjY291bnQ6ICc4ODg4OCcgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKHVuZGVmaW5lZCk7XG5cbiAgICAgIC8vIFdIRU4gLSBhc3N1bWVSb2xlIGZhaWxzIGJlY2F1c2UgdGhlIHJvbGUgY2FuIG9ubHkgYmUgYXNzdW1lZCBmcm9tIGFjY291bnQgMTExMTFcbiAgICAgIGNvbnN0IHNkayA9IChhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnODg4ODgnKSksIE1vZGUuRm9yUmVhZGluZywgeyBhc3N1bWVSb2xlQXJuOiAnYXJuOmF3czpyb2xlJyB9KSkuc2RrIGFzIFNESztcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KChhd2FpdCBzZGsuY3VycmVudEFjY291bnQoKSkuYWNjb3VudElkKS50b0VxdWFsKHVuaXEoJzg4ODg4JykpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUGx1Z2lucycsICgpID0+IHtcbiAgICB0ZXN0KCdkb2VzIG5vdCB1c2UgcGx1Z2lucyBpZiBjdXJyZW50IGNyZWRlbnRpYWxzIGFyZSBmb3IgZXhwZWN0ZWQgYWNjb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdmb28nLCAkYWNjb3VudDogJzExMTExJyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcbiAgICAgIGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KGVudih1bmlxKCcxMTExMScpKSwgTW9kZS5Gb3JSZWFkaW5nKTtcbiAgICAgIGV4cGVjdChwbHVnaW5RdWVyaWVkKS50b0VxdWFsKGZhbHNlKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3VzZXMgcGx1Z2luIGZvciBhY2NvdW50IDk5OTk5JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKHVuZGVmaW5lZCk7XG4gICAgICBhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnOTk5OTknKSksIE1vZGUuRm9yUmVhZGluZyk7XG4gICAgICBleHBlY3QocGx1Z2luUXVlcmllZCkudG9FcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2NhbiBhc3N1bWUgcm9sZSB3aXRoIGNyZWRlbnRpYWxzIGZyb20gcGx1Z2luJywgYXN5bmMgKCkgPT4ge1xuICAgICAgZmFrZVN0cy5yZWdpc3RlclJvbGUodW5pcSgnOTk5OTknKSwgJ2Fybjphd3M6aWFtOjo5OTk5OTpyb2xlL0Fzc3VtYWJsZScpO1xuXG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcbiAgICAgIGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KGVudih1bmlxKCc5OTk5OScpKSwgTW9kZS5Gb3JSZWFkaW5nLCB7XG4gICAgICAgIGFzc3VtZVJvbGVBcm46ICdhcm46YXdzOmlhbTo6OTk5OTk6cm9sZS9Bc3N1bWFibGUnLFxuICAgICAgfSk7XG5cbiAgICAgIGV4cGVjdChmYWtlU3RzLmFzc3VtZWRSb2xlc1swXSkudG9FcXVhbChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgIHJvbGVBcm46ICdhcm46YXdzOmlhbTo6OTk5OTk6cm9sZS9Bc3N1bWFibGUnLFxuICAgICAgfSkpO1xuICAgICAgZXhwZWN0KHBsdWdpblF1ZXJpZWQpLnRvRXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdldmVuIGlmIEFzc3VtZVJvbGUgZmFpbHMgYnV0IGN1cnJlbnQgY3JlZGVudGlhbHMgYXJlIGZyb20gYSBwbHVnaW4sIHdlIHdpbGwgc3RpbGwgdXNlIHRoZW0nLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcbiAgICAgIGNvbnN0IHNkayA9IChhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnOTk5OTknKSksIE1vZGUuRm9yUmVhZGluZywgeyBhc3N1bWVSb2xlQXJuOiAnZG9lczpub3Q6ZXhpc3QnIH0pKS5zZGs7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdCgoYXdhaXQgc2RrLmN1cnJlbnRBY2NvdW50KCkpLmFjY291bnRJZCkudG9FcXVhbCh1bmlxKCc5OTk5OScpKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3BsdWdpbnMgYXJlIHN0aWxsIHF1ZXJpZWQgZXZlbiBpZiBjdXJyZW50IGNyZWRlbnRpYWxzIGFyZSBleHBpcmVkIChvciBvdGhlcndpc2UgaW52YWxpZCknLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgcHJvY2Vzcy5lbnYuQVdTX0FDQ0VTU19LRVlfSUQgPSBgJHt1aWR9YWtpZGA7XG4gICAgICBwcm9jZXNzLmVudi5BV1NfU0VDUkVUX0FDQ0VTU19LRVkgPSAnc2Vrcml0JztcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnOTk5OTknKSksIE1vZGUuRm9yUmVhZGluZyk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChwbHVnaW5RdWVyaWVkKS50b0VxdWFsKHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3VwcG9ydCBmb3IgY3JlZGVudGlhbF9zb3VyY2UnLCAoKSA9PiB7XG4gICAgdGVzdCgnY2FuIGFzc3VtZSByb2xlIHdpdGggZWNzIGNyZWRlbnRpYWxzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIHdpdGhNb2NrZWQoQVdTLkVDU0NyZWRlbnRpYWxzLnByb3RvdHlwZSwgJ25lZWRzUmVmcmVzaCcsIGFzeW5jIChuZWVkc1JlZnJlc2gpID0+IHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgICdwcm9maWxlIGVjcyc6IHsgcm9sZV9hcm46ICdhcm46YXdzOmlhbTo6MTIzNTY3ODkwMTI6cm9sZS9Bc3N1bWFibGUnLCBjcmVkZW50aWFsX3NvdXJjZTogJ0Vjc0NvbnRhaW5lcicsICRhY2NvdW50OiAnMjIyMjInIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSgnZWNzJyk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBhd2FpdCBwcm92aWRlci5kZWZhdWx0QWNjb3VudCgpO1xuXG4gICAgICAgIC8vIFRIRU5cbiAgICAgICAgZXhwZWN0KG5lZWRzUmVmcmVzaCkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIHRlc3QoJ2NhbiBhc3N1bWUgcm9sZSB3aXRoIGVjMiBjcmVkZW50aWFscycsIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiB3aXRoTW9ja2VkKEFXUy5FQzJNZXRhZGF0YUNyZWRlbnRpYWxzLnByb3RvdHlwZSwgJ25lZWRzUmVmcmVzaCcsIGFzeW5jIChuZWVkc1JlZnJlc2gpID0+IHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgICdwcm9maWxlIGVjcyc6IHsgcm9sZV9hcm46ICdhcm46YXdzOmlhbTo6MTIzNTY3ODkwMTI6cm9sZS9Bc3N1bWFibGUnLCBjcmVkZW50aWFsX3NvdXJjZTogJ0VjMkluc3RhbmNlTWV0YWRhdGEnLCAkYWNjb3VudDogJzIyMjIyJyB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ2VjcycpO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgYXdhaXQgcHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIGV4cGVjdChuZWVkc1JlZnJlc2gpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcblxuICAgICAgfSk7XG5cbiAgICB9KTtcblxuICAgIHRlc3QoJ2NhbiBhc3N1bWUgcm9sZSB3aXRoIGVudiBjcmVkZW50aWFscycsIGFzeW5jICgpID0+IHtcbiAgICAgIHJldHVybiB3aXRoTW9ja2VkKEFXUy5FbnZpcm9ubWVudENyZWRlbnRpYWxzLnByb3RvdHlwZSwgJ25lZWRzUmVmcmVzaCcsIGFzeW5jIChuZWVkc1JlZnJlc2gpID0+IHtcbiAgICAgICAgLy8gR0lWRU5cbiAgICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgICdwcm9maWxlIGVjcyc6IHsgcm9sZV9hcm46ICdhcm46YXdzOmlhbTo6MTIzNTY3ODkwMTI6cm9sZS9Bc3N1bWFibGUnLCBjcmVkZW50aWFsX3NvdXJjZTogJ0Vudmlyb25tZW50JywgJGFjY291bnQ6ICcyMjIyMicgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKCdlY3MnKTtcblxuICAgICAgICAvLyBXSEVOXG4gICAgICAgIGF3YWl0IHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCk7XG5cbiAgICAgICAgLy8gVEhFTlxuICAgICAgICBleHBlY3QobmVlZHNSZWZyZXNoKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2Fzc3VtZSBmYWlscyB3aXRoIHVuc3VwcG9ydGVkIGNyZWRlbnRpYWxfc291cmNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICdwcm9maWxlIGVjcyc6IHsgcm9sZV9hcm46ICdhcm46YXdzOmlhbTo6MTIzNTY3ODkwMTI6cm9sZS9Bc3N1bWFibGUnLCBjcmVkZW50aWFsX3NvdXJjZTogJ3Vuc3VwcG9ydGVkJywgJGFjY291bnQ6ICcyMjIyMicgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKCdlY3MnKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgY29uc3QgYWNjb3VudCA9IGF3YWl0IHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChhY2NvdW50Py5hY2NvdW50SWQpLnRvRXF1YWwodW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdGVzdCgnZGVmYXVsdEFjY291bnQgcmV0dXJucyB1bmRlZmluZWQgaWYgU1RTIGNhbGwgZmFpbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gR0lWRU5cbiAgICBwcm9jZXNzLmVudi5BV1NfQUNDRVNTX0tFWV9JRCA9IGAke3VpZH1ha2lkYDtcbiAgICBwcm9jZXNzLmVudi5BV1NfU0VDUkVUX0FDQ0VTU19LRVkgPSAnc2Vrcml0JztcblxuICAgIC8vIFdIRU5cbiAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgIC8vIFRIRU5cbiAgICBhd2FpdCBleHBlY3QocHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKSkucmVzb2x2ZXMudG9CZSh1bmRlZmluZWQpO1xuICB9KTtcbn0pO1xuXG50ZXN0KCdldmVuIHdoZW4gdXNpbmcgYSBwcm9maWxlIHRvIGFzc3VtZSBhbm90aGVyIHByb2ZpbGUsIFNUUyBjYWxscyBnb2VzIHRocm91Z2ggdGhlIHByb3h5JywgYXN5bmMgKCkgPT4ge1xuICBwcmVwYXJlQ3JlZHMoe1xuICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICBhc3N1bWVyOiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnYXNzdW1lcicgfSxcbiAgICB9LFxuICAgIGNvbmZpZzoge1xuICAgICAgJ2RlZmF1bHQnOiB7IHJlZ2lvbjogJ2V1LWJsYS01JyB9LFxuICAgICAgJ3Byb2ZpbGUgYXNzdW1hYmxlJzogeyByb2xlX2FybjogJ2Fybjphd3M6aWFtOjo2NjY2Njpyb2xlL0Fzc3VtYWJsZScsIHNvdXJjZV9wcm9maWxlOiAnYXNzdW1lcicsICRhY2NvdW50OiAnNjY2NjYnIH0sXG4gICAgICAncHJvZmlsZSBhc3N1bWVyJzogeyByZWdpb246ICd1cy1lYXN0LTInIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gTWVzc3kgbW9ja2luZ1xuICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gIGplc3QubW9jaygncHJveHktYWdlbnQnLCAoKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgICBjbGFzcyBGYWtlQWdlbnQgZXh0ZW5kcyByZXF1aXJlKCdodHRwcycpLkFnZW50IHtcbiAgICAgIHB1YmxpYyBhZGRSZXF1ZXN0KF86IGFueSwgX186IGFueSkge1xuICAgICAgICAvLyBGSVhNRTogdGhpcyBlcnJvciB0YWtlcyA2IHNlY29uZHMgdG8gYmUgY29tcGxldGVseSBoYW5kbGVkLiBJdFxuICAgICAgICAvLyBtaWdodCBiZSByZXRyaWVzIGluIHRoZSBTREsgc29tZXdoZXJlLCBvciBzb21ldGhpbmcgYWJvdXQgdGhlIE5vZGVcbiAgICAgICAgLy8gZXZlbnQgbG9vcC4gSSd2ZSBzcGVudCBhbiBob3VyIHRyeWluZyB0byBmaWd1cmUgaXQgb3V0IGFuZCBJIGNhbid0LFxuICAgICAgICAvLyBhbmQgSSBnYXZlIHVwLiBXZSdsbCBqdXN0IGhhdmUgdG8gbGl2ZSB3aXRoIHRoaXMgdW50aWwgc29tZW9uZSBnZXRzXG4gICAgICAgIC8vIGluc3BpcmVkLlxuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcignQUJPUlRFRCBCWSBURVNUJyk7XG4gICAgICAgIChlcnJvciBhcyBhbnkpLmNvZGUgPSAnUmVxdWVzdEFib3J0ZWRFcnJvcic7XG4gICAgICAgIChlcnJvciBhcyBhbnkpLnJldHJ5YWJsZSA9IGZhbHNlO1xuICAgICAgICBjYWxsZWQgPSB0cnVlO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEZha2VBZ2VudDtcbiAgfSk7XG5cbiAgLy8gV0hFTlxuICBjb25zdCBwcm92aWRlciA9IGF3YWl0IFNka1Byb3ZpZGVyLndpdGhBd3NDbGlDb21wYXRpYmxlRGVmYXVsdHMoe1xuICAgIC4uLmRlZmF1bHRDcmVkT3B0aW9ucyxcbiAgICBwcm9maWxlOiAnYXNzdW1hYmxlJyxcbiAgICBodHRwT3B0aW9uczoge1xuICAgICAgcHJveHlBZGRyZXNzOiAnaHR0cDovL0RPRVNOVE1BVFRFUi8nLFxuICAgIH0sXG4gIH0pO1xuXG4gIGF3YWl0IHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCk7XG5cbiAgLy8gVEhFTiAtLSB0aGUgZmFrZSBwcm94eSBhZ2VudCBnb3QgY2FsbGVkLCB3ZSBkb24ndCBjYXJlIGFib3V0IHRoZSByZXN1bHRcbiAgZXhwZWN0KGNhbGxlZCkudG9FcXVhbCh0cnVlKTtcbn0pO1xuXG4vKipcbiAqIFVzZSBvYmplY3QgaGFja2VyeSB0byBnZXQgdGhlIGNyZWRlbnRpYWxzIG91dCBvZiB0aGUgU0RLIG9iamVjdFxuICovXG5mdW5jdGlvbiBzZGtDb25maWcoc2RrOiBJU0RLKTogQ29uZmlndXJhdGlvbk9wdGlvbnMge1xuICByZXR1cm4gKHNkayBhcyBhbnkpLmNvbmZpZztcbn1cblxuLyoqXG4gKiBGaXh0dXJlIGZvciBTREsgYXV0aCBmb3IgdGhpcyB0ZXN0IHN1aXRlXG4gKlxuICogSGFzIGtub3dsZWRnZSBvZiB0aGUgY2FjaGUgYnVzdGVyLCB3aWxsIHdyaXRlIHByb3BlciBmYWtlIGNvbmZpZyBmaWxlcyBhbmRcbiAqIHJlZ2lzdGVyIHVzZXJzIGFuZCByb2xlcyBpbiBGYWtlU3RzIGF0IHRoZSBzYW1lIHRpbWUuXG4gKi9cbmZ1bmN0aW9uIHByZXBhcmVDcmVkcyhvcHRpb25zOiBQcmVwYXJlQ3JlZHNPcHRpb25zKSB7XG4gIGZ1bmN0aW9uIGNvbnZlcnRTZWN0aW9ucyhzZWN0aW9ucz86IFJlY29yZDxzdHJpbmcsIFByb2ZpbGVVc2VyIHwgUHJvZmlsZVJvbGU+KSB7XG4gICAgY29uc3QgcmV0ID0gW107XG4gICAgZm9yIChjb25zdCBbcHJvZmlsZSwgdXNlcl0gb2YgT2JqZWN0LmVudHJpZXMoc2VjdGlvbnMgPz8ge30pKSB7XG4gICAgICByZXQucHVzaChgWyR7cHJvZmlsZX1dYCk7XG5cbiAgICAgIGlmIChpc1Byb2ZpbGVSb2xlKHVzZXIpKSB7XG4gICAgICAgIHJldC5wdXNoKGByb2xlX2Fybj0ke3VzZXIucm9sZV9hcm59YCk7XG4gICAgICAgIGlmICgnc291cmNlX3Byb2ZpbGUnIGluIHVzZXIpIHtcbiAgICAgICAgICByZXQucHVzaChgc291cmNlX3Byb2ZpbGU9JHt1c2VyLnNvdXJjZV9wcm9maWxlfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICgnY3JlZGVudGlhbF9zb3VyY2UnIGluIHVzZXIpIHtcbiAgICAgICAgICByZXQucHVzaChgY3JlZGVudGlhbF9zb3VyY2U9JHt1c2VyLmNyZWRlbnRpYWxfc291cmNlfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1c2VyLm1mYV9zZXJpYWwpIHtcbiAgICAgICAgICByZXQucHVzaChgbWZhX3NlcmlhbD0ke3VzZXIubWZhX3NlcmlhbH1gKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLmZha2VTdHM/LnJlZ2lzdGVyUm9sZSh1bmlxKHVzZXIuJGFjY291bnQgPz8gJzAwMDAwJyksIHVzZXIucm9sZV9hcm4sIHtcbiAgICAgICAgICAuLi51c2VyLiRmYWtlU3RzT3B0aW9ucyxcbiAgICAgICAgICBhbGxvd2VkQWNjb3VudHM6IHVzZXIuJGZha2VTdHNPcHRpb25zPy5hbGxvd2VkQWNjb3VudHM/Lm1hcCh1bmlxKSxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodXNlci5hd3NfYWNjZXNzX2tleV9pZCkge1xuICAgICAgICAgIHJldC5wdXNoKGBhd3NfYWNjZXNzX2tleV9pZD0ke3VuaXEodXNlci5hd3NfYWNjZXNzX2tleV9pZCl9YCk7XG4gICAgICAgICAgcmV0LnB1c2goJ2F3c19zZWNyZXRfYWNjZXNzX2tleT1zZWNyZXQnKTtcbiAgICAgICAgICBvcHRpb25zLmZha2VTdHM/LnJlZ2lzdGVyVXNlcih1bmlxKHVzZXIuJGFjY291bnQgPz8gJzAwMDAwJyksIHVuaXEodXNlci5hd3NfYWNjZXNzX2tleV9pZCksIHVzZXIuJGZha2VTdHNPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodXNlci5yZWdpb24pIHtcbiAgICAgICAgcmV0LnB1c2goYHJlZ2lvbj0ke3VzZXIucmVnaW9ufWApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0LmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgYm9ja2ZzKHtcbiAgICAnL2hvbWUvbWUvLmJ4dC9jcmVkZW50aWFscyc6IGNvbnZlcnRTZWN0aW9ucyhvcHRpb25zLmNyZWRlbnRpYWxzKSxcbiAgICAnL2hvbWUvbWUvLmJ4dC9jb25maWcnOiBjb252ZXJ0U2VjdGlvbnMob3B0aW9ucy5jb25maWcpLFxuICB9KTtcblxuICAvLyBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgd2Ugd2FudFxuICBwcm9jZXNzLmVudi5BV1NfQ09ORklHX0ZJTEUgPSBib2NrZnMucGF0aCgnL2hvbWUvbWUvLmJ4dC9jb25maWcnKTtcbiAgcHJvY2Vzcy5lbnYuQVdTX1NIQVJFRF9DUkVERU5USUFMU19GSUxFID0gYm9ja2ZzLnBhdGgoJy9ob21lL21lLy5ieHQvY3JlZGVudGlhbHMnKTtcbn1cblxuaW50ZXJmYWNlIFByZXBhcmVDcmVkc09wdGlvbnMge1xuICAvKipcbiAgICogV3JpdGUgdGhlIGF3cy9jcmVkZW50aWFscyBmaWxlXG4gICAqL1xuICByZWFkb25seSBjcmVkZW50aWFscz86IFJlY29yZDxzdHJpbmcsIFByb2ZpbGVVc2VyIHwgUHJvZmlsZVJvbGU+O1xuXG4gIC8qKlxuICAgKiBXcml0ZSB0aGUgYXdzL2NvbmZpZyBmaWxlXG4gICAqL1xuICByZWFkb25seSBjb25maWc/OiBSZWNvcmQ8c3RyaW5nLCBQcm9maWxlVXNlciB8IFByb2ZpbGVSb2xlPjtcblxuICAvKipcbiAgICogSWYgZ2l2ZW4sIGFkZCB1c2VycyB0byBGYWtlU1RTXG4gICAqL1xuICByZWFkb25seSBmYWtlU3RzPzogRmFrZVN0cztcbn1cblxuaW50ZXJmYWNlIFByb2ZpbGVVc2VyIHtcbiAgcmVhZG9ubHkgYXdzX2FjY2Vzc19rZXlfaWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5ICRhY2NvdW50Pzogc3RyaW5nO1xuICByZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG4gIHJlYWRvbmx5ICRmYWtlU3RzT3B0aW9ucz86IFJlZ2lzdGVyVXNlck9wdGlvbnM7XG59XG5cbnR5cGUgUHJvZmlsZVJvbGUgPSB7XG4gIHJlYWRvbmx5IHJvbGVfYXJuOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1mYV9zZXJpYWw/OiBzdHJpbmc7XG4gIHJlYWRvbmx5ICRhY2NvdW50OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgJGZha2VTdHNPcHRpb25zPzogUmVnaXN0ZXJSb2xlT3B0aW9ucztcbn0gJiAoeyByZWFkb25seSBzb3VyY2VfcHJvZmlsZTogc3RyaW5nIH0gfCB7IHJlYWRvbmx5IGNyZWRlbnRpYWxfc291cmNlOiBzdHJpbmcgfSk7XG5cbmZ1bmN0aW9uIGlzUHJvZmlsZVJvbGUoeDogUHJvZmlsZVVzZXIgfCBQcm9maWxlUm9sZSk6IHggaXMgUHJvZmlsZVJvbGUge1xuICByZXR1cm4gJ3JvbGVfYXJuJyBpbiB4O1xufVxuXG5mdW5jdGlvbiBwcm92aWRlckZyb21Qcm9maWxlKHByb2ZpbGU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICByZXR1cm4gU2RrUHJvdmlkZXIud2l0aEF3c0NsaUNvbXBhdGlibGVEZWZhdWx0cyh7IC4uLmRlZmF1bHRDcmVkT3B0aW9ucywgcHJvZmlsZSB9KTtcbn1cbiJdfQ==
|
|
566
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2RrLXByb3ZpZGVyLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzZGstcHJvdmlkZXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlCQUF5QjtBQUN6Qix5Q0FBeUM7QUFDekMsK0JBQStCO0FBRS9CLHFDQUFxQztBQUNyQyw2QkFBNkI7QUFDN0IscURBQXNFO0FBQ3RFLGlEQUFrRDtBQUNsRCw2Q0FBNkM7QUFDN0Msb0NBQW9DO0FBQ3BDLGtDQUFxQztBQUNyQyx5Q0FBK0U7QUFFL0UsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUMzQixNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztDQUM1QyxDQUFDLENBQUMsQ0FBQztBQUVKLE1BQU0sa0JBQWtCLEdBQUc7SUFDekIsUUFBUSxFQUFFLEtBQUs7SUFDZixjQUFjLEVBQUUsS0FBSztDQUN0QixDQUFDO0FBRUYsSUFBSSxHQUFXLENBQUM7QUFDaEIsSUFBSSxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBRTFCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7SUFDZCxpQkFBaUI7SUFDakIsMkNBQTJDO0lBQzNDLEVBQUU7SUFDRixpREFBaUQ7SUFDakQsK0NBQStDO0lBQy9DLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBRXZCLE9BQU8sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU1QyxtQkFBVSxDQUFDLFFBQVEsQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEQsbUJBQVUsQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDO1FBQ2pELFdBQVcsS0FBSyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxD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QkFBa0IsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3RGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBvcyBmcm9tICdvcyc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0IHR5cGUgeyBDb25maWd1cmF0aW9uT3B0aW9ucyB9IGZyb20gJ2F3cy1zZGsvbGliL2NvbmZpZy1iYXNlJztcbmltcG9ydCAqIGFzIHByb21wdGx5IGZyb20gJ3Byb21wdGx5JztcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XG5pbXBvcnQgeyBJU0RLLCBNb2RlLCBTREssIFNka1Byb3ZpZGVyIH0gZnJvbSAnLi4vLi4vbGliL2FwaS9hd3MtYXV0aCc7XG5pbXBvcnQgeyBQbHVnaW5Ib3N0IH0gZnJvbSAnLi4vLi4vbGliL2FwaS9wbHVnaW4nO1xuaW1wb3J0ICogYXMgbG9nZ2luZyBmcm9tICcuLi8uLi9saWIvbG9nZ2luZyc7XG5pbXBvcnQgKiBhcyBib2NrZnMgZnJvbSAnLi4vYm9ja2ZzJztcbmltcG9ydCB7IHdpdGhNb2NrZWQgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCB7IEZha2VTdHMsIFJlZ2lzdGVyUm9sZU9wdGlvbnMsIFJlZ2lzdGVyVXNlck9wdGlvbnMgfSBmcm9tICcuL2Zha2Utc3RzJztcblxuamVzdC5tb2NrKCdwcm9tcHRseScsICgpID0+ICh7XG4gIHByb21wdDogamVzdC5mbigpLm1vY2tSZXNvbHZlZFZhbHVlKCcxMjM0JyksXG59KSk7XG5cbmNvbnN0IGRlZmF1bHRDcmVkT3B0aW9ucyA9IHtcbiAgZWMyY3JlZHM6IGZhbHNlLFxuICBjb250YWluZXJDcmVkczogZmFsc2UsXG59O1xuXG5sZXQgdWlkOiBzdHJpbmc7XG5sZXQgcGx1Z2luUXVlcmllZCA9IGZhbHNlO1xuXG5iZWZvcmVFYWNoKCgpID0+IHtcbiAgLy8gQ2FjaGUgYnVzdGVycyFcbiAgLy8gV2UgcHJlZml4IGV2ZXJ5dGhpbmcgd2l0aCBVVUlEcyBiZWNhdXNlOlxuICAvL1xuICAvLyAtIFdlIGhhdmUgYSBjYWNoZSBmcm9tIGFjY291bnQjIC0+IGNyZWRlbnRpYWxzXG4gIC8vIC0gV2UgaGF2ZSBhIGNhY2hlIGZyb20gYWNjZXNzIGtleSAtPiBhY2NvdW50XG4gIHVpZCA9IGAoJHt1dWlkLnY0KCl9KWA7XG5cbiAgbG9nZ2luZy5zZXRMb2dMZXZlbChsb2dnaW5nLkxvZ0xldmVsLlRSQUNFKTtcblxuICBQbHVnaW5Ib3N0Lmluc3RhbmNlLmNyZWRlbnRpYWxQcm92aWRlclNvdXJjZXMuc3BsaWNlKDApO1xuICBQbHVnaW5Ib3N0Lmluc3RhbmNlLmNyZWRlbnRpYWxQcm92aWRlclNvdXJjZXMucHVzaCh7XG4gICAgaXNBdmFpbGFibGUoKSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7IH0sXG4gICAgY2FuUHJvdmlkZUNyZWRlbnRpYWxzKGFjY291bnQpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZShhY2NvdW50ID09PSB1bmlxKCc5OTk5OScpKTsgfSxcbiAgICBnZXRQcm92aWRlcigpIHtcbiAgICAgIHBsdWdpblF1ZXJpZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQVdTLkNyZWRlbnRpYWxzKHtcbiAgICAgICAgYWNjZXNzS2V5SWQ6IGAke3VpZH1wbHVnaW5fa2V5YCxcbiAgICAgICAgc2VjcmV0QWNjZXNzS2V5OiAncGx1Z2luX3NlY3JldCcsXG4gICAgICAgIHNlc3Npb25Ub2tlbjogJ3BsdWdpbl90b2tlbicsXG4gICAgICB9KSk7XG4gICAgfSxcbiAgICBuYW1lOiAndGVzdCBwbHVnaW4nLFxuICB9KTtcblxuICAvLyBNYWtlIHN1cmUgdGhlc2UgcG9pbnQgdG8gbm9uZXhpc3RhbnQgZmlsZXMgdG8gc3RhcnQsIGlmIHdlIGRvbid0IGNhbGxcbiAgLy8gcHJlcGFyZSgpIHRoZW4gd2UgZG9uJ3QgYWNjaWRlbnRhbGx5IHdhbnQgdG8gZmFsbCBiYWNrIHRvIHN5c3RlbSBjb25maWcuXG4gIHByb2Nlc3MuZW52LkFXU19DT05GSUdfRklMRSA9ICcvZGV2L251bGwnO1xuICBwcm9jZXNzLmVudi5BV1NfU0hBUkVEX0NSRURFTlRJQUxTX0ZJTEUgPSAnL2Rldi9udWxsJztcbn0pO1xuXG5hZnRlckVhY2goKCkgPT4ge1xuICBib2NrZnMucmVzdG9yZSgpO1xufSk7XG5cbmZ1bmN0aW9uIHVuaXEoYWNjb3VudDogc3RyaW5nKSB7XG4gIHJldHVybiBgJHt1aWR9JHthY2NvdW50fWA7XG59XG5cbmZ1bmN0aW9uIGVudihhY2NvdW50OiBzdHJpbmcpIHtcbiAgcmV0dXJuIGN4YXBpLkVudmlyb25tZW50VXRpbHMubWFrZShhY2NvdW50LCAnZGVmJyk7XG59XG5cbmRlc2NyaWJlKCd3aXRoIGludGVyY2VwdGVkIG5ldHdvcmsgY2FsbHMnLCAoKSA9PiB7XG4gIC8vIE1vc3QgdGVzdHMgd2lsbCB1c2UgaW50ZXJjZXB0ZWQgbmV0d29yayBjYWxscywgZXhjZXB0IG9uZSB0ZXN0IHRoYXQgdGVzdHNcbiAgLy8gdGhhdCB0aGUgcmlnaHQgSFRUUCBgQWdlbnRgIGlzIHVzZWQuXG5cbiAgbGV0IGZha2VTdHM6IEZha2VTdHM7XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGZha2VTdHMgPSBuZXcgRmFrZVN0cygpO1xuICAgIGZha2VTdHMuYmVnaW4oKTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgS2V5SUQgcmV0dXJuZWQgYnkgdGhlIHBsdWdpbiBpcyByZWNvZ25pemVkXG4gICAgZmFrZVN0cy5yZWdpc3RlclVzZXIodW5pcSgnOTk5OTknKSwgdW5pcSgncGx1Z2luX2tleScpKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBmYWtlU3RzLnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgLy8gU2V0IG9mIHRlc3RzIHdoZXJlIHRoZSBDREsgd2lsbCBub3QgdHJpZ2dlciBhc3N1bWUtcm9sZVxuICAvLyAodGhlIElOSSBmaWxlIG1pZ2h0IHN0aWxsIGRvIGFzc3VtZS1yb2xlKVxuICBkZXNjcmliZSgnd2hlbiBDREsgZG9lcyBub3QgQXNzdW1lUm9sZScsICgpID0+IHtcbiAgICB0ZXN0KCd1c2VzIGRlZmF1bHQgY3JlZGVudGlhbHMgYnkgZGVmYXVsdCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFdIRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICAgICAgZGVmYXVsdDogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2FjY2VzcycsICRhY2NvdW50OiAnMTExMTEnLCAkZmFrZVN0c09wdGlvbnM6IHsgcGFydGl0aW9uOiAnYXdzLWhlcmUnIH0gfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgZGVmYXVsdDogeyByZWdpb246ICdldS1ibGEtNScgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKHVuZGVmaW5lZCk7XG5cbiAgICAgIC8vIFRIRU5cbiAgICAgIGV4cGVjdChwcm92aWRlci5kZWZhdWx0UmVnaW9uKS50b0VxdWFsKCdldS1ibGEtNScpO1xuICAgICAgYXdhaXQgZXhwZWN0KHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCkpLnJlc29sdmVzLnRvRXF1YWwoeyBhY2NvdW50SWQ6IHVuaXEoJzExMTExJyksIHBhcnRpdGlvbjogJ2F3cy1oZXJlJyB9KTtcblxuICAgICAgLy8gQXNrIGZvciBhIGRpZmZlcmVudCByZWdpb25cbiAgICAgIGNvbnN0IHNkayA9IChhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudCh7IC4uLmVudih1bmlxKCcxMTExMScpKSwgcmVnaW9uOiAncmduJyB9LCBNb2RlLkZvclJlYWRpbmcpKS5zZGs7XG4gICAgICBleHBlY3Qoc2RrQ29uZmlnKHNkaykuY3JlZGVudGlhbHMhLmFjY2Vzc0tleUlkKS50b0VxdWFsKHVuaXEoJ2FjY2VzcycpKTtcbiAgICAgIGV4cGVjdChzZGsuY3VycmVudFJlZ2lvbikudG9FcXVhbCgncmduJyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCd0aHJvd3MgaWYgcHJvZmlsZSBjcmVkZW50aWFscyBhcmUgbm90IGZvciB0aGUgcmlnaHQgYWNjb3VudCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFdIRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICdwcm9maWxlIGJvbyc6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdhY2Nlc3MnLCAkYWNjb3VudDogJzExMTExJyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ2JvbycpO1xuXG4gICAgICBhd2FpdCBleHBlY3QocHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJ3NvbWVfYWNjb3VudF8jJykpLCBNb2RlLkZvclJlYWRpbmcpKS5yZWplY3RzLnRvVGhyb3coJ05lZWQgdG8gcGVyZm9ybSBBV1MgY2FsbHMnKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ3VzZSBwcm9maWxlIGFjY3QvcmVnaW9uIGlmIGFnbm9zdGljIGVudiByZXF1ZXN0ZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBXSEVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdhY2Nlc3MnLCAkYWNjb3VudDogJzExMTExJyB9LFxuICAgICAgICB9LFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7IHJlZ2lvbjogJ2V1LWJsYS01JyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgY29uc3Qgc2RrID0gKGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KGN4YXBpLkVudmlyb25tZW50VXRpbHMubWFrZShjeGFwaS5VTktOT1dOX0FDQ09VTlQsIGN4YXBpLlVOS05PV05fUkVHSU9OKSwgTW9kZS5Gb3JSZWFkaW5nKSkuc2RrO1xuICAgICAgZXhwZWN0KHNka0NvbmZpZyhzZGspLmNyZWRlbnRpYWxzIS5hY2Nlc3NLZXlJZCkudG9FcXVhbCh1bmlxKCdhY2Nlc3MnKSk7XG4gICAgICBleHBlY3QoKGF3YWl0IHNkay5jdXJyZW50QWNjb3VudCgpKS5hY2NvdW50SWQpLnRvRXF1YWwodW5pcSgnMTExMTEnKSk7XG4gICAgICBleHBlY3Qoc2RrLmN1cnJlbnRSZWdpb24pLnRvRXF1YWwoJ2V1LWJsYS01Jyk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdwYXNzaW5nIHByb2ZpbGUgc2tpcHMgRW52aXJvbm1lbnRDcmVkZW50aWFscycsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjcmVkZW50aWFsczoge1xuICAgICAgICAgIGZvbzogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2FjY2VzcycsICRhY2NvdW50OiAnMTExMTEnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSgnZm9vJyk7XG5cbiAgICAgIGNvbnN0IGVudmlyb25tZW50Q3JlZGVudGlhbHNQcm90b3R5cGUgPSAobmV3IEFXUy5FbnZpcm9ubWVudENyZWRlbnRpYWxzKCdBV1MnKSkuY29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gICAgICBhd2FpdCB3aXRoTW9ja2VkKGVudmlyb25tZW50Q3JlZGVudGlhbHNQcm90b3R5cGUsICdyZWZyZXNoJywgYXN5bmMgKHJlZnJlc2gpID0+IHtcbiAgICAgICAgcmVmcmVzaC5tb2NrSW1wbGVtZW50YXRpb24oKGNhbGxiYWNrOiAoZXJyPzogRXJyb3IpID0+IHZvaWQpID0+IGNhbGxiYWNrKG5ldyBFcnJvcignVGhpcyBmdW5jdGlvbiBzaG91bGQgbm90IGhhdmUgYmVlbiBjYWxsZWQnKSkpO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgZXhwZWN0KChhd2FpdCBwcm92aWRlci5kZWZhdWx0QWNjb3VudCgpKT8uYWNjb3VudElkKS50b0VxdWFsKHVuaXEoJzExMTExJykpO1xuXG4gICAgICAgIGV4cGVjdChyZWZyZXNoKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdzdXBwb3J0cyBwcm9maWxlIHNwcmVhZCBvdmVyIGNvbmZpZ19maWxlIGFuZCBjcmVkZW50aWFsc19maWxlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gV0hFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICBmb286IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdmb29jY2VzcycsICRhY2NvdW50OiAnMjIyMjInIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICdkZWZhdWx0JzogeyByZWdpb246ICdldS1ibGEtNScgfSxcbiAgICAgICAgICAncHJvZmlsZSBmb28nOiB7IHJlZ2lvbjogJ2V1LXdlc3QtMScgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBTZGtQcm92aWRlci53aXRoQXdzQ2xpQ29tcGF0aWJsZURlZmF1bHRzKHsgLi4uZGVmYXVsdENyZWRPcHRpb25zLCBwcm9maWxlOiAnZm9vJyB9KTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KHByb3ZpZGVyLmRlZmF1bHRSZWdpb24pLnRvRXF1YWwoJ2V1LXdlc3QtMScpO1xuICAgICAgYXdhaXQgZXhwZWN0KHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCkpLnJlc29sdmVzLnRvRXF1YWwoeyBhY2NvdW50SWQ6IHVuaXEoJzIyMjIyJyksIHBhcnRpdGlvbjogJ2F3cycgfSk7XG5cbiAgICAgIGNvbnN0IHNkayA9IChhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnMjIyMjInKSksIE1vZGUuRm9yUmVhZGluZykpLnNkaztcbiAgICAgIGV4cGVjdChzZGtDb25maWcoc2RrKS5jcmVkZW50aWFscyEuYWNjZXNzS2V5SWQpLnRvRXF1YWwodW5pcSgnZm9vY2Nlc3MnKSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdzdXBwb3J0cyBwcm9maWxlIG9ubHkgaW4gY29uZmlnX2ZpbGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBXSEVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAnZGVmYXVsdCc6IHsgcmVnaW9uOiAnZXUtYmxhLTUnIH0sXG4gICAgICAgICAgJ3Byb2ZpbGUgZm9vJzogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2Zvb2NjZXNzJywgJGFjY291bnQ6ICcyMjIyMicgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKCdmb28nKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KHByb3ZpZGVyLmRlZmF1bHRSZWdpb24pLnRvRXF1YWwoJ2V1LWJsYS01Jyk7IC8vIEZhbGwgYmFjayB0byBkZWZhdWx0IGNvbmZpZ1xuICAgICAgYXdhaXQgZXhwZWN0KHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCkpLnJlc29sdmVzLnRvRXF1YWwoeyBhY2NvdW50SWQ6IHVuaXEoJzIyMjIyJyksIHBhcnRpdGlvbjogJ2F3cycgfSk7XG5cbiAgICAgIGNvbnN0IHNkayA9IChhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnMjIyMjInKSksIE1vZGUuRm9yUmVhZGluZykpLnNkaztcbiAgICAgIGV4cGVjdChzZGtDb25maWcoc2RrKS5jcmVkZW50aWFscyEuYWNjZXNzS2V5SWQpLnRvRXF1YWwodW5pcSgnZm9vY2Nlc3MnKSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjYW4gYXNzdW1lLXJvbGUgY29uZmlndXJlZCBpbiBjb25maWcnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY3JlZGVudGlhbHM6IHtcbiAgICAgICAgICBhc3N1bWVyOiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnYXNzdW1lcicsICRhY2NvdW50OiAnMTExMTEnIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICdkZWZhdWx0JzogeyByZWdpb246ICdldS1ibGEtNScgfSxcbiAgICAgICAgICAncHJvZmlsZSBhc3N1bWVyJzogeyByZWdpb246ICd1cy1lYXN0LTInIH0sXG4gICAgICAgICAgJ3Byb2ZpbGUgYXNzdW1hYmxlJzoge1xuICAgICAgICAgICAgcm9sZV9hcm46ICdhcm46YXdzOmlhbTo6NjY2NjY6cm9sZS9Bc3N1bWFibGUnLFxuICAgICAgICAgICAgc291cmNlX3Byb2ZpbGU6ICdhc3N1bWVyJyxcbiAgICAgICAgICAgICRhY2NvdW50OiAnNjY2NjYnLFxuICAgICAgICAgICAgJGZha2VTdHNPcHRpb25zOiB7IGFsbG93ZWRBY2NvdW50czogWycxMTExMSddIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKCdhc3N1bWFibGUnKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgY29uc3Qgc2RrID0gKGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KGVudih1bmlxKCc2NjY2NicpKSwgTW9kZS5Gb3JSZWFkaW5nKSkuc2RrO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoKGF3YWl0IHNkay5jdXJyZW50QWNjb3VudCgpKS5hY2NvdW50SWQpLnRvRXF1YWwodW5pcSgnNjY2NjYnKSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdjYW4gYXNzdW1lIHJvbGUgZXZlbiBpZiBbZGVmYXVsdF0gcHJvZmlsZSBpcyBtaXNzaW5nJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICAgICAgYXNzdW1lcjogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2Fzc3VtZXInLCAkYWNjb3VudDogJzIyMjIyJyB9LFxuICAgICAgICAgIGFzc3VtYWJsZTogeyByb2xlX2FybjogJ2Fybjphd3M6aWFtOjoxMjM1Njc4OTAxMjpyb2xlL0Fzc3VtYWJsZScsIHNvdXJjZV9wcm9maWxlOiAnYXNzdW1lcicsICRhY2NvdW50OiAnMjIyMjInIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICdwcm9maWxlIGFzc3VtYWJsZSc6IHsgcmVnaW9uOiAnZXUtYmxhLTUnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKCdhc3N1bWFibGUnKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KChhd2FpdCBwcm92aWRlci5kZWZhdWx0QWNjb3VudCgpKT8uYWNjb3VudElkKS50b0VxdWFsKHVuaXEoJzIyMjIyJykpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnbWZhX3NlcmlhbCBpbiBwcm9maWxlIHdpbGwgYXNrIHVzZXIgZm9yIHRva2VuJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNyZWRlbnRpYWxzOiB7XG4gICAgICAgICAgYXNzdW1lcjogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2Fzc3VtZXInLCAkYWNjb3VudDogJzY2NjY2JyB9LFxuICAgICAgICB9LFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAnZGVmYXVsdCc6IHsgcmVnaW9uOiAnZXUtYmxhLTUnIH0sXG4gICAgICAgICAgJ3Byb2ZpbGUgYXNzdW1lcic6IHsgcmVnaW9uOiAndXMtZWFzdC0yJyB9LFxuICAgICAgICAgICdwcm9maWxlIG1mYS1yb2xlJzoge1xuICAgICAgICAgICAgcm9sZV9hcm46ICdhcm46YXdzOmlhbTo6NjY2NjY6cm9sZS9Bc3N1bWFibGUnLFxuICAgICAgICAgICAgc291cmNlX3Byb2ZpbGU6ICdhc3N1bWVyJyxcbiAgICAgICAgICAgIG1mYV9zZXJpYWw6ICdhcm46YXdzOmlhbTo6YWNjb3VudDptZmEvdXNlcicsXG4gICAgICAgICAgICAkYWNjb3VudDogJzY2NjY2JyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ21mYS1yb2xlJyk7XG5cbiAgICAgIGNvbnN0IHByb21wdGx5TW9ja0NhbGxzID0gKHByb21wdGx5LnByb21wdCBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHMubGVuZ3RoO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBjb25zdCBzZGsgPSAoYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzY2NjY2JykpLCBNb2RlLkZvclJlYWRpbmcpKS5zZGs7XG4gICAgICBleHBlY3QoKGF3YWl0IHNkay5jdXJyZW50QWNjb3VudCgpKS5hY2NvdW50SWQpLnRvRXF1YWwodW5pcSgnNjY2NjYnKSk7XG4gICAgICBleHBlY3QoZmFrZVN0cy5hc3N1bWVkUm9sZXNbMF0pLnRvRXF1YWwoZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICByb2xlQXJuOiAnYXJuOmF3czppYW06OjY2NjY2OnJvbGUvQXNzdW1hYmxlJyxcbiAgICAgICAgc2VyaWFsTnVtYmVyOiAnYXJuOmF3czppYW06OmFjY291bnQ6bWZhL3VzZXInLFxuICAgICAgICB0b2tlbkNvZGU6ICcxMjM0JyxcbiAgICAgIH0pKTtcblxuICAgICAgLy8gTW9jayByZXNwb25zZSB3YXMgc2V0IHRvIGZhaWwgdG8gbWFrZSBzdXJlIHdlIGRvbid0IGNhbGwgU1RTXG4gICAgICAvLyBNYWtlIHN1cmUgdGhlIE1GQSBtb2NrIHdhcyBjYWxsZWQgZHVyaW5nIHRoaXMgdGVzdFxuICAgICAgZXhwZWN0KChwcm9tcHRseS5wcm9tcHQgYXMgamVzdC5Nb2NrKS5tb2NrLmNhbGxzLmxlbmd0aCkudG9CZShwcm9tcHRseU1vY2tDYWxscyArIDEpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBGb3IgRGVmYXVsdFN5bnRoZXNpcyB3ZSB3aWxsIGRvIGFuIGFzc3VtZS1yb2xlIGFmdGVyIGhhdmluZyBnb3R0ZW4gYmFzZSBjcmVkZW50aWFsc1xuICBkZXNjcmliZSgnd2hlbiBDREsgQXNzdW1lUm9sZXMnLCAoKSA9PiB7XG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAvLyBBbGwgdGhlc2UgdGVzdHMgc2hhcmUgdGhhdCAnYXJuOmF3czpyb2xlJyBpcyBhIHJvbGUgaW50byBhY2NvdW50IDg4ODg4IHdoaWNoIGNhbiBiZSBhc3N1bWVkIGZyb20gMTExMTFcbiAgICAgIGZha2VTdHMucmVnaXN0ZXJSb2xlKHVuaXEoJzg4ODg4JyksICdhcm46YXdzOnJvbGUnLCB7IGFsbG93ZWRBY2NvdW50czogW3VuaXEoJzExMTExJyldIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZXJyb3Igd2UgZ2V0IGZyb20gYXNzdW1pbmcgYSByb2xlIGlzIHVzZWZ1bCcsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnZm9vJyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgICAgLy8gV0hFTlxuICAgICAgY29uc3QgcHJvbWlzZSA9IHByb3ZpZGVyLmZvckVudmlyb25tZW50KGVudih1bmlxKCc4ODg4OCcpKSwgTW9kZS5Gb3JSZWFkaW5nLCB7XG4gICAgICAgIGFzc3VtZVJvbGVBcm46ICdkb2Vzbm90ZXhpc3Qucm9sZS5hcm4nLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIFRIRU4gLSBlcnJvciBtZXNzYWdlIGNvbnRhaW5zIGJvdGggYSBoZWxwZnVsIGhpbnQgYW5kIHRoZSB1bmRlcmx5aW5nIEFzc3VtZVJvbGUgbWVzc2FnZVxuICAgICAgYXdhaXQgZXhwZWN0KHByb21pc2UpLnJlamVjdHMudG9UaHJvdygnKHJlKS1ib290c3RyYXAgdGhlIGVudmlyb25tZW50Jyk7XG4gICAgICBhd2FpdCBleHBlY3QocHJvbWlzZSkucmVqZWN0cy50b1Rocm93KCdkb2Vzbm90ZXhpc3Qucm9sZS5hcm4nKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2Fzc3VtaW5nIGEgcm9sZSBzYW5pdGl6ZXMgdGhlIHVzZXJuYW1lIGludG8gdGhlIHNlc3Npb24gbmFtZScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnZm9vJywgJGFjY291bnQ6ICcxMTExMScgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCB3aXRoTW9ja2VkKG9zLCAndXNlckluZm8nLCBhc3luYyAodXNlckluZm8pID0+IHtcbiAgICAgICAgdXNlckluZm8ubW9ja1JldHVyblZhbHVlKHsgdXNlcm5hbWU6ICdza8OlbCcsIHVpZDogMSwgZ2lkOiAxLCBob21lZGlyOiAnL2hlcmUnLCBzaGVsbDogJy9iaW4vc2gnIH0pO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKHVuZGVmaW5lZCk7XG5cbiAgICAgICAgY29uc3Qgc2RrID0gKGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KGVudih1bmlxKCc4ODg4OCcpKSwgTW9kZS5Gb3JSZWFkaW5nLCB7IGFzc3VtZVJvbGVBcm46ICdhcm46YXdzOnJvbGUnIH0pKS5zZGsgYXMgU0RLO1xuICAgICAgICBhd2FpdCBzZGsuY3VycmVudEFjY291bnQoKTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIGV4cGVjdChmYWtlU3RzLmFzc3VtZWRSb2xlc1swXSkudG9FcXVhbChleHBlY3Qub2JqZWN0Q29udGFpbmluZyh7XG4gICAgICAgICAgcm9sZVNlc3Npb25OYW1lOiAnYXdzLWNkay1za0BsJyxcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICB0ZXN0KCdhc3N1bWluZyBhIHJvbGUgZG9lcyBub3QgZmFpbCB3aGVuIE9TIHVzZXJuYW1lIGNhbm5vdCBiZSByZWFkJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdmb28nLCAkYWNjb3VudDogJzExMTExJyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHdpdGhNb2NrZWQob3MsICd1c2VySW5mbycsIGFzeW5jICh1c2VySW5mbykgPT4ge1xuICAgICAgICB1c2VySW5mby5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge1xuICAgICAgICAgIC8vIFN5c3RlbUVycm9yIHRocm93biBhcyBkb2N1bWVudGVkOiBodHRwczovL25vZGVqcy5vcmcvZG9jcy9sYXRlc3QtdjE2LngvYXBpL29zLmh0bWwjb3N1c2VyaW5mb29wdGlvbnNcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5c3RlbUVycm9yIG9uIExpbnV4OiB1dl9vc19nZXRfcGFzc3dkIHJldHVybmVkIEVOT0VOVC4gU2VlICMxOTQwMSBpc3N1ZS4nKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgICAgICBjb25zdCBzZGsgPSAoYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzg4ODg4JykpLCBNb2RlLkZvclJlYWRpbmcsIHsgYXNzdW1lUm9sZUFybjogJ2Fybjphd3M6cm9sZScgfSkpLnNkayBhcyBTREs7XG4gICAgICAgIGF3YWl0IHNkay5jdXJyZW50QWNjb3VudCgpO1xuXG4gICAgICAgIC8vIFRIRU5cbiAgICAgICAgZXhwZWN0KGZha2VTdHMuYXNzdW1lZFJvbGVzWzBdKS50b0VxdWFsKGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgICByb2xlU2Vzc2lvbk5hbWU6ICdhd3MtY2RrLW5vbmFtZScsXG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnZXZlbiBpZiBjdXJyZW50IGNyZWRlbnRpYWxzIGFyZSBmb3IgdGhlIHdyb25nIGFjY291bnQsIHdlIHdpbGwgc3RpbGwgdXNlIHRoZW0gdG8gQXNzdW1lUm9sZScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICBmYWtlU3RzLFxuICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICBkZWZhdWx0OiB7IGF3c19hY2Nlc3Nfa2V5X2lkOiAnZm9vJywgJGFjY291bnQ6ICcxMTExMScgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKHVuZGVmaW5lZCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGNvbnN0IHNkayA9IChhd2FpdCBwcm92aWRlci5mb3JFbnZpcm9ubWVudChlbnYodW5pcSgnODg4ODgnKSksIE1vZGUuRm9yUmVhZGluZywgeyBhc3N1bWVSb2xlQXJuOiAnYXJuOmF3czpyb2xlJyB9KSkuc2RrIGFzIFNESztcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KChhd2FpdCBzZGsuY3VycmVudEFjY291bnQoKSkuYWNjb3VudElkKS50b0VxdWFsKHVuaXEoJzg4ODg4JykpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnaWYgQXNzdW1lUm9sZSBmYWlscyBidXQgY3VycmVudCBjcmVkZW50aWFscyBhcmUgZm9yIHRoZSByaWdodCBhY2NvdW50LCB3ZSB3aWxsIHN0aWxsIHVzZSB0aGVtJywgYXN5bmMgKCkgPT4ge1xuICAgICAgLy8gR0lWRU5cbiAgICAgIHByZXBhcmVDcmVkcyh7XG4gICAgICAgIGZha2VTdHMsXG4gICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgIGRlZmF1bHQ6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdmb28nLCAkYWNjb3VudDogJzg4ODg4JyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcblxuICAgICAgLy8gV0hFTiAtIGFzc3VtZVJvbGUgZmFpbHMgYmVjYXVzZSB0aGUgcm9sZSBjYW4gb25seSBiZSBhc3N1bWVkIGZyb20gYWNjb3VudCAxMTExMVxuICAgICAgY29uc3Qgc2RrID0gKGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KGVudih1bmlxKCc4ODg4OCcpKSwgTW9kZS5Gb3JSZWFkaW5nLCB7IGFzc3VtZVJvbGVBcm46ICdhcm46YXdzOnJvbGUnIH0pKS5zZGsgYXMgU0RLO1xuXG4gICAgICAvLyBUSEVOXG4gICAgICBleHBlY3QoKGF3YWl0IHNkay5jdXJyZW50QWNjb3VudCgpKS5hY2NvdW50SWQpLnRvRXF1YWwodW5pcSgnODg4ODgnKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdQbHVnaW5zJywgKCkgPT4ge1xuICAgIHRlc3QoJ2RvZXMgbm90IHVzZSBwbHVnaW5zIGlmIGN1cnJlbnQgY3JlZGVudGlhbHMgYXJlIGZvciBleHBlY3RlZCBhY2NvdW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgZmFrZVN0cyxcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgZGVmYXVsdDogeyBhd3NfYWNjZXNzX2tleV9pZDogJ2ZvbycsICRhY2NvdW50OiAnMTExMTEnIH0sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuICAgICAgYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzExMTExJykpLCBNb2RlLkZvclJlYWRpbmcpO1xuICAgICAgZXhwZWN0KHBsdWdpblF1ZXJpZWQpLnRvRXF1YWwoZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgndXNlcyBwbHVnaW4gZm9yIGFjY291bnQgOTk5OTknLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUodW5kZWZpbmVkKTtcbiAgICAgIGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KGVudih1bmlxKCc5OTk5OScpKSwgTW9kZS5Gb3JSZWFkaW5nKTtcbiAgICAgIGV4cGVjdChwbHVnaW5RdWVyaWVkKS50b0VxdWFsKHRydWUpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnY2FuIGFzc3VtZSByb2xlIHdpdGggY3JlZGVudGlhbHMgZnJvbSBwbHVnaW4nLCBhc3luYyAoKSA9PiB7XG4gICAgICBmYWtlU3RzLnJlZ2lzdGVyUm9sZSh1bmlxKCc5OTk5OScpLCAnYXJuOmF3czppYW06Ojk5OTk5OnJvbGUvQXNzdW1hYmxlJyk7XG5cbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuICAgICAgYXdhaXQgcHJvdmlkZXIuZm9yRW52aXJvbm1lbnQoZW52KHVuaXEoJzk5OTk5JykpLCBNb2RlLkZvclJlYWRpbmcsIHtcbiAgICAgICAgYXNzdW1lUm9sZUFybjogJ2Fybjphd3M6aWFtOjo5OTk5OTpyb2xlL0Fzc3VtYWJsZScsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGZha2VTdHMuYXNzdW1lZFJvbGVzWzBdKS50b0VxdWFsKGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgcm9sZUFybjogJ2Fybjphd3M6aWFtOjo5OTk5OTpyb2xlL0Fzc3VtYWJsZScsXG4gICAgICB9KSk7XG4gICAgICBleHBlY3QocGx1Z2luUXVlcmllZCkudG9FcXVhbCh0cnVlKTtcbiAgICB9KTtcblxuICAgIHRlc3QoJ2V2ZW4gaWYgQXNzdW1lUm9sZSBmYWlscyBidXQgY3VycmVudCBjcmVkZW50aWFscyBhcmUgZnJvbSBhIHBsdWdpbiwgd2Ugd2lsbCBzdGlsbCB1c2UgdGhlbScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuICAgICAgY29uc3Qgc2RrID0gKGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KGVudih1bmlxKCc5OTk5OScpKSwgTW9kZS5Gb3JSZWFkaW5nLCB7IGFzc3VtZVJvbGVBcm46ICdkb2VzOm5vdDpleGlzdCcgfSkpLnNkaztcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KChhd2FpdCBzZGsuY3VycmVudEFjY291bnQoKSkuYWNjb3VudElkKS50b0VxdWFsKHVuaXEoJzk5OTk5JykpO1xuICAgIH0pO1xuXG4gICAgdGVzdCgncGx1Z2lucyBhcmUgc3RpbGwgcXVlcmllZCBldmVuIGlmIGN1cnJlbnQgY3JlZGVudGlhbHMgYXJlIGV4cGlyZWQgKG9yIG90aGVyd2lzZSBpbnZhbGlkKScsIGFzeW5jICgpID0+IHtcbiAgICAgIC8vIEdJVkVOXG4gICAgICBwcm9jZXNzLmVudi5BV1NfQUNDRVNTX0tFWV9JRCA9IGAke3VpZH1ha2lkYDtcbiAgICAgIHByb2Nlc3MuZW52LkFXU19TRUNSRVRfQUNDRVNTX0tFWSA9ICdzZWtyaXQnO1xuICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKHVuZGVmaW5lZCk7XG5cbiAgICAgIC8vIFdIRU5cbiAgICAgIGF3YWl0IHByb3ZpZGVyLmZvckVudmlyb25tZW50KGVudih1bmlxKCc5OTk5OScpKSwgTW9kZS5Gb3JSZWFkaW5nKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KHBsdWdpblF1ZXJpZWQpLnRvRXF1YWwodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzdXBwb3J0IGZvciBjcmVkZW50aWFsX3NvdXJjZScsICgpID0+IHtcbiAgICB0ZXN0KCdjYW4gYXNzdW1lIHJvbGUgd2l0aCBlY3MgY3JlZGVudGlhbHMnLCBhc3luYyAoKSA9PiB7XG4gICAgICByZXR1cm4gd2l0aE1vY2tlZChBV1MuRUNTQ3JlZGVudGlhbHMucHJvdG90eXBlLCAnbmVlZHNSZWZyZXNoJywgYXN5bmMgKG5lZWRzUmVmcmVzaCkgPT4ge1xuICAgICAgICAvLyBHSVZFTlxuICAgICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgJ3Byb2ZpbGUgZWNzJzogeyByb2xlX2FybjogJ2Fybjphd3M6aWFtOjoxMjM1Njc4OTAxMjpyb2xlL0Fzc3VtYWJsZScsIGNyZWRlbnRpYWxfc291cmNlOiAnRWNzQ29udGFpbmVyJywgJGFjY291bnQ6ICcyMjIyMicgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcHJvdmlkZXIgPSBhd2FpdCBwcm92aWRlckZyb21Qcm9maWxlKCdlY3MnKTtcblxuICAgICAgICAvLyBXSEVOXG4gICAgICAgIGF3YWl0IHByb3ZpZGVyLmRlZmF1bHRBY2NvdW50KCk7XG5cbiAgICAgICAgLy8gVEhFTlxuICAgICAgICBleHBlY3QobmVlZHNSZWZyZXNoKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgdGVzdCgnY2FuIGFzc3VtZSByb2xlIHdpdGggZWMyIGNyZWRlbnRpYWxzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIHdpdGhNb2NrZWQoQVdTLkVDMk1ldGFkYXRhQ3JlZGVudGlhbHMucHJvdG90eXBlLCAnbmVlZHNSZWZyZXNoJywgYXN5bmMgKG5lZWRzUmVmcmVzaCkgPT4ge1xuICAgICAgICAvLyBHSVZFTlxuICAgICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgJ3Byb2ZpbGUgZWNzJzogeyByb2xlX2FybjogJ2Fybjphd3M6aWFtOjoxMjM1Njc4OTAxMjpyb2xlL0Fzc3VtYWJsZScsIGNyZWRlbnRpYWxfc291cmNlOiAnRWMySW5zdGFuY2VNZXRhZGF0YScsICRhY2NvdW50OiAnMjIyMjInIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSgnZWNzJyk7XG5cbiAgICAgICAgLy8gV0hFTlxuICAgICAgICBhd2FpdCBwcm92aWRlci5kZWZhdWx0QWNjb3VudCgpO1xuXG4gICAgICAgIC8vIFRIRU5cbiAgICAgICAgZXhwZWN0KG5lZWRzUmVmcmVzaCkudG9IYXZlQmVlbkNhbGxlZCgpO1xuXG4gICAgICB9KTtcblxuICAgIH0pO1xuXG4gICAgdGVzdCgnY2FuIGFzc3VtZSByb2xlIHdpdGggZW52IGNyZWRlbnRpYWxzJywgYXN5bmMgKCkgPT4ge1xuICAgICAgcmV0dXJuIHdpdGhNb2NrZWQoQVdTLkVudmlyb25tZW50Q3JlZGVudGlhbHMucHJvdG90eXBlLCAnbmVlZHNSZWZyZXNoJywgYXN5bmMgKG5lZWRzUmVmcmVzaCkgPT4ge1xuICAgICAgICAvLyBHSVZFTlxuICAgICAgICBwcmVwYXJlQ3JlZHMoe1xuICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgJ3Byb2ZpbGUgZWNzJzogeyByb2xlX2FybjogJ2Fybjphd3M6aWFtOjoxMjM1Njc4OTAxMjpyb2xlL0Fzc3VtYWJsZScsIGNyZWRlbnRpYWxfc291cmNlOiAnRW52aXJvbm1lbnQnLCAkYWNjb3VudDogJzIyMjIyJyB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ2VjcycpO1xuXG4gICAgICAgIC8vIFdIRU5cbiAgICAgICAgYXdhaXQgcHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKTtcblxuICAgICAgICAvLyBUSEVOXG4gICAgICAgIGV4cGVjdChuZWVkc1JlZnJlc2gpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGVzdCgnYXNzdW1lIGZhaWxzIHdpdGggdW5zdXBwb3J0ZWQgY3JlZGVudGlhbF9zb3VyY2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICAvLyBHSVZFTlxuICAgICAgcHJlcGFyZUNyZWRzKHtcbiAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgJ3Byb2ZpbGUgZWNzJzogeyByb2xlX2FybjogJ2Fybjphd3M6aWFtOjoxMjM1Njc4OTAxMjpyb2xlL0Fzc3VtYWJsZScsIGNyZWRlbnRpYWxfc291cmNlOiAndW5zdXBwb3J0ZWQnLCAkYWNjb3VudDogJzIyMjIyJyB9LFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zdCBwcm92aWRlciA9IGF3YWl0IHByb3ZpZGVyRnJvbVByb2ZpbGUoJ2VjcycpO1xuXG4gICAgICAvLyBXSEVOXG4gICAgICBjb25zdCBhY2NvdW50ID0gYXdhaXQgcHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKTtcblxuICAgICAgLy8gVEhFTlxuICAgICAgZXhwZWN0KGFjY291bnQ/LmFjY291bnRJZCkudG9FcXVhbCh1bmRlZmluZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICB0ZXN0KCdkZWZhdWx0QWNjb3VudCByZXR1cm5zIHVuZGVmaW5lZCBpZiBTVFMgY2FsbCBmYWlscycsIGFzeW5jICgpID0+IHtcbiAgICAvLyBHSVZFTlxuICAgIHByb2Nlc3MuZW52LkFXU19BQ0NFU1NfS0VZX0lEID0gYCR7dWlkfWFraWRgO1xuICAgIHByb2Nlc3MuZW52LkFXU19TRUNSRVRfQUNDRVNTX0tFWSA9ICdzZWtyaXQnO1xuXG4gICAgLy8gV0hFTlxuICAgIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgcHJvdmlkZXJGcm9tUHJvZmlsZSh1bmRlZmluZWQpO1xuXG4gICAgLy8gVEhFTlxuICAgIGF3YWl0IGV4cGVjdChwcm92aWRlci5kZWZhdWx0QWNjb3VudCgpKS5yZXNvbHZlcy50b0JlKHVuZGVmaW5lZCk7XG4gIH0pO1xufSk7XG5cbnRlc3QoJ2V2ZW4gd2hlbiB1c2luZyBhIHByb2ZpbGUgdG8gYXNzdW1lIGFub3RoZXIgcHJvZmlsZSwgU1RTIGNhbGxzIGdvZXMgdGhyb3VnaCB0aGUgcHJveHknLCBhc3luYyAoKSA9PiB7XG4gIHByZXBhcmVDcmVkcyh7XG4gICAgY3JlZGVudGlhbHM6IHtcbiAgICAgIGFzc3VtZXI6IHsgYXdzX2FjY2Vzc19rZXlfaWQ6ICdhc3N1bWVyJyB9LFxuICAgIH0sXG4gICAgY29uZmlnOiB7XG4gICAgICAnZGVmYXVsdCc6IHsgcmVnaW9uOiAnZXUtYmxhLTUnIH0sXG4gICAgICAncHJvZmlsZSBhc3N1bWFibGUnOiB7IHJvbGVfYXJuOiAnYXJuOmF3czppYW06OjY2NjY2OnJvbGUvQXNzdW1hYmxlJywgc291cmNlX3Byb2ZpbGU6ICdhc3N1bWVyJywgJGFjY291bnQ6ICc2NjY2NicgfSxcbiAgICAgICdwcm9maWxlIGFzc3VtZXInOiB7IHJlZ2lvbjogJ3VzLWVhc3QtMicgfSxcbiAgICB9LFxuICB9KTtcblxuICAvLyBNZXNzeSBtb2NraW5nXG4gIGxldCBjYWxsZWQgPSBmYWxzZTtcbiAgamVzdC5tb2NrKCdwcm94eS1hZ2VudCcsICgpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICAgIGNsYXNzIEZha2VBZ2VudCBleHRlbmRzIHJlcXVpcmUoJ2h0dHBzJykuQWdlbnQge1xuICAgICAgcHVibGljIGFkZFJlcXVlc3QoXzogYW55LCBfXzogYW55KSB7XG4gICAgICAgIC8vIEZJWE1FOiB0aGlzIGVycm9yIHRha2VzIDYgc2Vjb25kcyB0byBiZSBjb21wbGV0ZWx5IGhhbmRsZWQuIEl0XG4gICAgICAgIC8vIG1pZ2h0IGJlIHJldHJpZXMgaW4gdGhlIFNESyBzb21ld2hlcmUsIG9yIHNvbWV0aGluZyBhYm91dCB0aGUgTm9kZVxuICAgICAgICAvLyBldmVudCBsb29wLiBJJ3ZlIHNwZW50IGFuIGhvdXIgdHJ5aW5nIHRvIGZpZ3VyZSBpdCBvdXQgYW5kIEkgY2FuJ3QsXG4gICAgICAgIC8vIGFuZCBJIGdhdmUgdXAuIFdlJ2xsIGp1c3QgaGF2ZSB0byBsaXZlIHdpdGggdGhpcyB1bnRpbCBzb21lb25lIGdldHNcbiAgICAgICAgLy8gaW5zcGlyZWQuXG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdBQk9SVEVEIEJZIFRFU1QnKTtcbiAgICAgICAgKGVycm9yIGFzIGFueSkuY29kZSA9ICdSZXF1ZXN0QWJvcnRlZEVycm9yJztcbiAgICAgICAgKGVycm9yIGFzIGFueSkucmV0cnlhYmxlID0gZmFsc2U7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gRmFrZUFnZW50O1xuICB9KTtcblxuICAvLyBXSEVOXG4gIGNvbnN0IHByb3ZpZGVyID0gYXdhaXQgU2RrUHJvdmlkZXIud2l0aEF3c0NsaUNvbXBhdGlibGVEZWZhdWx0cyh7XG4gICAgLi4uZGVmYXVsdENyZWRPcHRpb25zLFxuICAgIHByb2ZpbGU6ICdhc3N1bWFibGUnLFxuICAgIGh0dHBPcHRpb25zOiB7XG4gICAgICBwcm94eUFkZHJlc3M6ICdodHRwOi8vRE9FU05UTUFUVEVSLycsXG4gICAgfSxcbiAgfSk7XG5cbiAgYXdhaXQgcHJvdmlkZXIuZGVmYXVsdEFjY291bnQoKTtcblxuICAvLyBUSEVOIC0tIHRoZSBmYWtlIHByb3h5IGFnZW50IGdvdCBjYWxsZWQsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIHJlc3VsdFxuICBleHBlY3QoY2FsbGVkKS50b0VxdWFsKHRydWUpO1xufSk7XG5cbi8qKlxuICogVXNlIG9iamVjdCBoYWNrZXJ5IHRvIGdldCB0aGUgY3JlZGVudGlhbHMgb3V0IG9mIHRoZSBTREsgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIHNka0NvbmZpZyhzZGs6IElTREspOiBDb25maWd1cmF0aW9uT3B0aW9ucyB7XG4gIHJldHVybiAoc2RrIGFzIGFueSkuY29uZmlnO1xufVxuXG4vKipcbiAqIEZpeHR1cmUgZm9yIFNESyBhdXRoIGZvciB0aGlzIHRlc3Qgc3VpdGVcbiAqXG4gKiBIYXMga25vd2xlZGdlIG9mIHRoZSBjYWNoZSBidXN0ZXIsIHdpbGwgd3JpdGUgcHJvcGVyIGZha2UgY29uZmlnIGZpbGVzIGFuZFxuICogcmVnaXN0ZXIgdXNlcnMgYW5kIHJvbGVzIGluIEZha2VTdHMgYXQgdGhlIHNhbWUgdGltZS5cbiAqL1xuZnVuY3Rpb24gcHJlcGFyZUNyZWRzKG9wdGlvbnM6IFByZXBhcmVDcmVkc09wdGlvbnMpIHtcbiAgZnVuY3Rpb24gY29udmVydFNlY3Rpb25zKHNlY3Rpb25zPzogUmVjb3JkPHN0cmluZywgUHJvZmlsZVVzZXIgfCBQcm9maWxlUm9sZT4pIHtcbiAgICBjb25zdCByZXQgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtwcm9maWxlLCB1c2VyXSBvZiBPYmplY3QuZW50cmllcyhzZWN0aW9ucyA/PyB7fSkpIHtcbiAgICAgIHJldC5wdXNoKGBbJHtwcm9maWxlfV1gKTtcblxuICAgICAgaWYgKGlzUHJvZmlsZVJvbGUodXNlcikpIHtcbiAgICAgICAgcmV0LnB1c2goYHJvbGVfYXJuPSR7dXNlci5yb2xlX2Fybn1gKTtcbiAgICAgICAgaWYgKCdzb3VyY2VfcHJvZmlsZScgaW4gdXNlcikge1xuICAgICAgICAgIHJldC5wdXNoKGBzb3VyY2VfcHJvZmlsZT0ke3VzZXIuc291cmNlX3Byb2ZpbGV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCdjcmVkZW50aWFsX3NvdXJjZScgaW4gdXNlcikge1xuICAgICAgICAgIHJldC5wdXNoKGBjcmVkZW50aWFsX3NvdXJjZT0ke3VzZXIuY3JlZGVudGlhbF9zb3VyY2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZXIubWZhX3NlcmlhbCkge1xuICAgICAgICAgIHJldC5wdXNoKGBtZmFfc2VyaWFsPSR7dXNlci5tZmFfc2VyaWFsfWApO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuZmFrZVN0cz8ucmVnaXN0ZXJSb2xlKHVuaXEodXNlci4kYWNjb3VudCA/PyAnMDAwMDAnKSwgdXNlci5yb2xlX2Fybiwge1xuICAgICAgICAgIC4uLnVzZXIuJGZha2VTdHNPcHRpb25zLFxuICAgICAgICAgIGFsbG93ZWRBY2NvdW50czogdXNlci4kZmFrZVN0c09wdGlvbnM/LmFsbG93ZWRBY2NvdW50cz8ubWFwKHVuaXEpLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh1c2VyLmF3c19hY2Nlc3Nfa2V5X2lkKSB7XG4gICAgICAgICAgcmV0LnB1c2goYGF3c19hY2Nlc3Nfa2V5X2lkPSR7dW5pcSh1c2VyLmF3c19hY2Nlc3Nfa2V5X2lkKX1gKTtcbiAgICAgICAgICByZXQucHVzaCgnYXdzX3NlY3JldF9hY2Nlc3Nfa2V5PXNlY3JldCcpO1xuICAgICAgICAgIG9wdGlvbnMuZmFrZVN0cz8ucmVnaXN0ZXJVc2VyKHVuaXEodXNlci4kYWNjb3VudCA/PyAnMDAwMDAnKSwgdW5pcSh1c2VyLmF3c19hY2Nlc3Nfa2V5X2lkKSwgdXNlci4kZmFrZVN0c09wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh1c2VyLnJlZ2lvbikge1xuICAgICAgICByZXQucHVzaChgcmVnaW9uPSR7dXNlci5yZWdpb259YCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXQuam9pbignXFxuJyk7XG4gIH1cblxuICBib2NrZnMoe1xuICAgICcvaG9tZS9tZS8uYnh0L2NyZWRlbnRpYWxzJzogY29udmVydFNlY3Rpb25zKG9wdGlvbnMuY3JlZGVudGlhbHMpLFxuICAgICcvaG9tZS9tZS8uYnh0L2NvbmZpZyc6IGNvbnZlcnRTZWN0aW9ucyhvcHRpb25zLmNvbmZpZyksXG4gIH0pO1xuXG4gIC8vIFNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCB3ZSB3YW50XG4gIHByb2Nlc3MuZW52LkFXU19DT05GSUdfRklMRSA9IGJvY2tmcy5wYXRoKCcvaG9tZS9tZS8uYnh0L2NvbmZpZycpO1xuICBwcm9jZXNzLmVudi5BV1NfU0hBUkVEX0NSRURFTlRJQUxTX0ZJTEUgPSBib2NrZnMucGF0aCgnL2hvbWUvbWUvLmJ4dC9jcmVkZW50aWFscycpO1xufVxuXG5pbnRlcmZhY2UgUHJlcGFyZUNyZWRzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXcml0ZSB0aGUgYXdzL2NyZWRlbnRpYWxzIGZpbGVcbiAgICovXG4gIHJlYWRvbmx5IGNyZWRlbnRpYWxzPzogUmVjb3JkPHN0cmluZywgUHJvZmlsZVVzZXIgfCBQcm9maWxlUm9sZT47XG5cbiAgLyoqXG4gICAqIFdyaXRlIHRoZSBhd3MvY29uZmlnIGZpbGVcbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZz86IFJlY29yZDxzdHJpbmcsIFByb2ZpbGVVc2VyIHwgUHJvZmlsZVJvbGU+O1xuXG4gIC8qKlxuICAgKiBJZiBnaXZlbiwgYWRkIHVzZXJzIHRvIEZha2VTVFNcbiAgICovXG4gIHJlYWRvbmx5IGZha2VTdHM/OiBGYWtlU3RzO1xufVxuXG5pbnRlcmZhY2UgUHJvZmlsZVVzZXIge1xuICByZWFkb25seSBhd3NfYWNjZXNzX2tleV9pZD86IHN0cmluZztcbiAgcmVhZG9ubHkgJGFjY291bnQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgJGZha2VTdHNPcHRpb25zPzogUmVnaXN0ZXJVc2VyT3B0aW9ucztcbn1cblxudHlwZSBQcm9maWxlUm9sZSA9IHtcbiAgcmVhZG9ubHkgcm9sZV9hcm46IHN0cmluZztcbiAgcmVhZG9ubHkgbWZhX3NlcmlhbD86IHN0cmluZztcbiAgcmVhZG9ubHkgJGFjY291bnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuICByZWFkb25seSAkZmFrZVN0c09wdGlvbnM/OiBSZWdpc3RlclJvbGVPcHRpb25zO1xufSAmICh7IHJlYWRvbmx5IHNvdXJjZV9wcm9maWxlOiBzdHJpbmcgfSB8IHsgcmVhZG9ubHkgY3JlZGVudGlhbF9zb3VyY2U6IHN0cmluZyB9KTtcblxuZnVuY3Rpb24gaXNQcm9maWxlUm9sZSh4OiBQcm9maWxlVXNlciB8IFByb2ZpbGVSb2xlKTogeCBpcyBQcm9maWxlUm9sZSB7XG4gIHJldHVybiAncm9sZV9hcm4nIGluIHg7XG59XG5cbmZ1bmN0aW9uIHByb3ZpZGVyRnJvbVByb2ZpbGUocHJvZmlsZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gIHJldHVybiBTZGtQcm92aWRlci53aXRoQXdzQ2xpQ29tcGF0aWJsZURlZmF1bHRzKHsgLi4uZGVmYXVsdENyZWRPcHRpb25zLCBwcm9maWxlIH0pO1xufVxuIl19
|
|
@@ -220,7 +220,7 @@ class LambdaStack extends cdk.Stack {
|
|
|
220
220
|
|
|
221
221
|
const fn = new lambda.Function(this, 'my-function', {
|
|
222
222
|
code: lambda.Code.asset(path.join(__dirname, 'lambda')),
|
|
223
|
-
runtime: lambda.Runtime.
|
|
223
|
+
runtime: lambda.Runtime.NODEJS_14_X,
|
|
224
224
|
handler: 'index.handler'
|
|
225
225
|
});
|
|
226
226
|
|
|
@@ -11,5 +11,8 @@ function invokeJest() {
|
|
|
11
11
|
# This must --runInBand because parallelism is arranged for inside the tests
|
|
12
12
|
# themselves and they must run in the same process in order to coordinate to
|
|
13
13
|
# make sure no 2 tests use the same region at the same time.
|
|
14
|
-
|
|
14
|
+
#
|
|
15
|
+
# Jest is run in a weird way because npx started (NPM 8?) to change directory
|
|
16
|
+
# into 'package.json' root, which we don't want here.
|
|
17
|
+
$(npx which jest) --runInBand --verbose "$@"
|
|
15
18
|
}
|