@aws-cdk-testing/cli-integ 2.161.1 → 2.162.1
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/lib/aws.d.ts +1 -1
- package/lib/aws.js +2 -2
- package/lib/with-cdk-app.d.ts +9 -0
- package/lib/with-cdk-app.js +21 -5
- package/package.json +16 -16
- package/resources/cdk-apps/app/app.js +15 -5
- package/resources/cdk-apps/app/nested-stack.js +16 -0
- package/resources/cdk-apps/rollback-test-app/app.js +100 -0
- package/resources/cdk-apps/rollback-test-app/cdk.json +7 -0
- package/tests/cli-integ-tests/bootstrapping.integtest.js +2 -2
- package/tests/cli-integ-tests/cli.integtest.js +102 -4
package/README.md
CHANGED
|
@@ -37,7 +37,7 @@ Test suites are written as a collection of Jest tests, and they are run using Je
|
|
|
37
37
|
|
|
38
38
|
### Setup
|
|
39
39
|
|
|
40
|
-
Building the @aws-cdk-testing package is not very different from building the rest of the CDK. However, If you are having issues with the tests, you can ensure your
|
|
40
|
+
Building the @aws-cdk-testing package is not very different from building the rest of the CDK. However, If you are having issues with the tests, you can ensure your environment is built properly by following the steps below:
|
|
41
41
|
|
|
42
42
|
```shell
|
|
43
43
|
yarn install # Install dependencies
|
package/lib/aws.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import { CloudFormationClient, Stack } from '@aws-sdk/client-cloudformation';
|
|
2
|
+
import { CloudFormationClient, type Stack } from '@aws-sdk/client-cloudformation';
|
|
3
3
|
import { ECRClient } from '@aws-sdk/client-ecr';
|
|
4
4
|
import { ECSClient } from '@aws-sdk/client-ecs';
|
|
5
5
|
import { IAMClient } from '@aws-sdk/client-iam';
|
package/lib/aws.js
CHANGED
|
@@ -45,7 +45,7 @@ class AwsClients {
|
|
|
45
45
|
region: this.config.region,
|
|
46
46
|
maxAttempts: 2,
|
|
47
47
|
});
|
|
48
|
-
return (await stsClient.send(new client_sts_1.GetCallerIdentityCommand())).Account;
|
|
48
|
+
return (await stsClient.send(new client_sts_1.GetCallerIdentityCommand({}))).Account;
|
|
49
49
|
}
|
|
50
50
|
async deleteStacks(...stackNames) {
|
|
51
51
|
if (stackNames.length === 0) {
|
|
@@ -199,4 +199,4 @@ function chainableCredentials(region) {
|
|
|
199
199
|
}
|
|
200
200
|
return undefined;
|
|
201
201
|
}
|
|
202
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDBFQU13QztBQUN4QyxvREFBeUU7QUFDekUsb0RBQWdEO0FBQ2hELG9EQUFnRDtBQUNoRCwwREFBc0Q7QUFDdEQsa0RBTTRCO0FBQzVCLG9EQUFnRDtBQUNoRCxvREFBZ0Q7QUFDaEQsb0RBQTBFO0FBQzFFLHdFQUF3RDtBQUV4RCxtREFBNkQ7QUFPN0QsTUFBYSxVQUFVO0lBQ2QsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBNkI7UUFDdkQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsSUFBSSxXQUFXLENBQUM7UUFDdkYsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBYyxFQUFFLE1BQTZCO1FBQ3pFLE9BQU8sSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFjRCxZQUE0QixNQUFjLEVBQW1CLE1BQTZCO1FBQTlELFdBQU0sR0FBTixNQUFNLENBQVE7UUFBbUIsV0FBTSxHQUFOLE1BQU0sQ0FBdUI7UUFDeEYsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzlDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixhQUFhLEVBQUUsSUFBSSxvQ0FBdUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFlLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUM7U0FDbkYsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSw0Q0FBb0IsQ0FBQyxJQUFJLENBQUMs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aW1wb3J0IHtcbiAgQ2xvdWRGb3JtYXRpb25DbGllbnQsXG4gIERlbGV0ZVN0YWNrQ29tbWFuZCxcbiAgRGVzY3JpYmVTdGFja3NDb21tYW5kLFxuICBVcGRhdGVUZXJtaW5hdGlvblByb3RlY3Rpb25Db21tYW5kLFxuICBTdGFjayxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IERlbGV0ZVJlcG9zaXRvcnlDb21tYW5kLCBFQ1JDbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWNyJztcbmltcG9ydCB7IEVDU0NsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lY3MnO1xuaW1wb3J0IHsgSUFNQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWlhbSc7XG5pbXBvcnQgeyBMYW1iZGFDbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtbGFtYmRhJztcbmltcG9ydCB7XG4gIFMzQ2xpZW50LFxuICBEZWxldGVPYmplY3RzQ29tbWFuZCxcbiAgTGlzdE9iamVjdFZlcnNpb25zQ29tbWFuZCxcbiAgT2JqZWN0SWRlbnRpZmllcixcbiAgRGVsZXRlQnVja2V0Q29tbWFuZCxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB7IFNOU0NsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zbnMnO1xuaW1wb3J0IHsgU1NPQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNzbyc7XG5pbXBvcnQgeyBTVFNDbGllbnQsIEdldENhbGxlcklkZW50aXR5Q29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zdHMnO1xuaW1wb3J0IHsgZnJvbUluaSB9IGZyb20gJ0Bhd3Mtc2RrL2NyZWRlbnRpYWwtcHJvdmlkZXJzJztcbmltcG9ydCB7IEF3c0NyZWRlbnRpYWxJZGVudGl0eVByb3ZpZGVyIH0gZnJvbSAnQHNtaXRoeS90eXBlcyc7XG5pbXBvcnQgeyBDb25maWd1cmVkUmV0cnlTdHJhdGVneSB9IGZyb20gJ0BzbWl0aHkvdXRpbC1yZXRyeSc7XG5pbnRlcmZhY2UgQ2xpZW50Q29uZmlnIHtcbiAgcmVhZG9ubHkgY3JlZGVudGlhbHM/OiBBd3NDcmVkZW50aWFsSWRlbnRpdHlQcm92aWRlcjtcbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJldHJ5U3RyYXRlZ3k6IENvbmZpZ3VyZWRSZXRyeVN0cmF0ZWd5O1xufVxuXG5leHBvcnQgY2xhc3MgQXdzQ2xpZW50cyB7XG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgZGVmYXVsdChvdXRwdXQ6IE5vZGVKUy5Xcml0YWJsZVN0cmVhbSkge1xuICAgIGNvbnN0IHJlZ2lvbiA9IHByb2Nlc3MuZW52LkFXU19SRUdJT04gPz8gcHJvY2Vzcy5lbnYuQVdTX0RFRkFVTFRfUkVHSU9OID8/ICd1cy1lYXN0LTEnO1xuICAgIHJldHVybiBBd3NDbGllbnRzLmZvclJlZ2lvbihyZWdpb24sIG91dHB1dCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFzeW5jIGZvclJlZ2lvbihyZWdpb246IHN0cmluZywgb3V0cHV0OiBOb2RlSlMuV3JpdGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gbmV3IEF3c0NsaWVudHMocmVnaW9uLCBvdXRwdXQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IENsaWVudENvbmZpZztcblxuICBwdWJsaWMgcmVhZG9ubHkgY2xvdWRGb3JtYXRpb246IENsb3VkRm9ybWF0aW9uQ2xpZW50O1xuICBwdWJsaWMgcmVhZG9ubHkgczM6IFMzQ2xpZW50O1xuICBwdWJsaWMgcmVhZG9ubHkgZWNyOiBFQ1JDbGllbnQ7XG4gIHB1YmxpYyByZWFkb25seSBlY3M6IEVDU0NsaWVudDtcbiAgcHVibGljIHJlYWRvbmx5IHNzbzogU1NPQ2xpZW50O1xuICBwdWJsaWMgcmVhZG9ubHkgc25zOiBTTlNDbGllbnQ7XG4gIHB1YmxpYyByZWFkb25seSBpYW06IElBTUNsaWVudDtcbiAgcHVibGljIHJlYWRvbmx5IGxhbWJkYTogTGFtYmRhQ2xpZW50O1xuICBwdWJsaWMgcmVhZG9ubHkgc3RzOiBTVFNDbGllbnQ7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IG91dHB1dDogTm9kZUpTLldyaXRhYmxlU3RyZWFtKSB7XG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICBjcmVkZW50aWFsczogY2hhaW5hYmxlQ3JlZGVudGlhbHModGhpcy5yZWdpb24pLFxuICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbixcbiAgICAgIHJldHJ5U3RyYXRlZ3k6IG5ldyBDb25maWd1cmVkUmV0cnlTdHJhdGVneSg5LCAoYXR0ZW1wdDogbnVtYmVyKSA9PiBhdHRlbXB0ICoqIDUwMCksXG4gICAgfTtcbiAgICB0aGlzLmNsb3VkRm9ybWF0aW9uID0gbmV3IENsb3VkRm9ybWF0aW9uQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLnMzID0gbmV3IFMzQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmVjciA9IG5ldyBFQ1JDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHRoaXMuZWNzID0gbmV3IEVDU0NsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5zc28gPSBuZXcgU1NPQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLnNucyA9IG5ldyBTTlNDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHRoaXMuaWFtID0gbmV3IElBTUNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5sYW1iZGEgPSBuZXcgTGFtYmRhQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLnN0cyA9IG5ldyBTVFNDbGllbnQodGhpcy5jb25maWcpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFjY291bnQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAvLyBSZWR1Y2UgIyBvZiByZXRyaWVzLCB3ZSB1c2UgdGhpcyBhcyBhIGNpcmN1aXQgYnJlYWtlciBmb3IgZGV0ZWN0aW5nIG5vLWNvbmZpZ1xuICAgIGNvbnN0IHN0c0NsaWVudCA9IG5ldyBTVFNDbGllbnQoe1xuICAgICAgY3JlZGVudGlhbHM6IHRoaXMuY29uZmlnLmNyZWRlbnRpYWxzLFxuICAgICAgcmVnaW9uOiB0aGlzLmNvbmZpZy5yZWdpb24sXG4gICAgICBtYXhBdHRlbXB0czogMixcbiAgICB9KTtcblxuICAgIHJldHVybiAoYXdhaXQgc3RzQ2xpZW50LnNlbmQobmV3IEdldENhbGxlcklkZW50aXR5Q29tbWFuZCgpKSkuQWNjb3VudCE7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlU3RhY2tzKC4uLnN0YWNrTmFtZXM6IHN0cmluZ1tdKSB7XG4gICAgaWYgKHN0YWNrTmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gV2UgcHVycG9zZWx5IGRvIGFsbCBzdGFja3Mgc2VyaWFsbHksIGJlY2F1c2UgdGhleSd2ZSBiZWVuIG9yZGVyZWRcbiAgICAvLyB0byBkbyB0aGUgYm9vdHN0cmFwIHN0YWNrIGxhc3QuXG4gICAgZm9yIChjb25zdCBzdGFja05hbWUgb2Ygc3RhY2tOYW1lcykge1xuICAgICAgYXdhaXQgdGhpcy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICBuZXcgVXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uQ29tbWFuZCh7XG4gICAgICAgICAgRW5hYmxlVGVybWluYXRpb25Qcm90ZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgICBTdGFja05hbWU6IHN0YWNrTmFtZSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICBuZXcgRGVsZXRlU3RhY2tDb21tYW5kKHtcbiAgICAgICAgICBTdGFja05hbWU6IHN0YWNrTmFtZSxcbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgICBhd2FpdCByZXRyeSh0aGlzLm91dHB1dCwgYERlbGV0aW5nICR7c3RhY2tOYW1lfWAsIHJldHJ5LmZvclNlY29uZHMoNjAwKSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCB0aGlzLnN0YWNrU3RhdHVzKHN0YWNrTmFtZSk7XG4gICAgICAgIGlmIChzdGF0dXMgIT09IHVuZGVmaW5lZCAmJiBzdGF0dXMuZW5kc1dpdGgoJ19GQUlMRUQnKSkge1xuICAgICAgICAgIHRocm93IHJldHJ5LmFib3J0KG5ldyBFcnJvcihgJyR7c3RhY2tOYW1lfScgaXMgaW4gc3RhdGUgJyR7c3RhdHVzfSdgKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEZWxldGUgb2YgJyR7c3RhY2tOYW1lfScgbm90IGNvbXBsZXRlIHlldCwgc3RhdHVzOiAnJHtzdGF0dXN9J2ApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc3RhY2tTdGF0dXMoc3RhY2tOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBhd2FpdCB0aGlzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgICAgICBTdGFja05hbWU6IHN0YWNrTmFtZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgKS5TdGFja3M/LlswXS5TdGFja1N0YXR1cztcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGlmIChpc1N0YWNrTWlzc2luZ0Vycm9yKGUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlbXB0eUJ1Y2tldChidWNrZXROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBvYmplY3RzID0gYXdhaXQgdGhpcy5zMy5zZW5kKFxuICAgICAgbmV3IExpc3RPYmplY3RWZXJzaW9uc0NvbW1hbmQoe1xuICAgICAgICBCdWNrZXQ6IGJ1Y2tldE5hbWUsXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgY29uc3QgZGVsZXRlcyA9IFsuLi4ob2JqZWN0cy5WZXJzaW9ucyB8fCBbXSksIC4uLihvYmplY3RzLkRlbGV0ZU1hcmtlcnMgfHwgW10pXS5yZWR1Y2UoKGFjYywgb2JqKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9iai5WZXJzaW9uSWQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvYmouS2V5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBhY2MucHVzaCh7IEtleTogb2JqLktleSwgVmVyc2lvbklkOiBvYmouVmVyc2lvbklkIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqLktleSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgYWNjLnB1c2goeyBLZXk6IG9iai5LZXkgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdIGFzIE9iamVjdElkZW50aWZpZXJbXSk7XG5cbiAgICBpZiAoZGVsZXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zMy5zZW5kKFxuICAgICAgbmV3IERlbGV0ZU9iamVjdHNDb21tYW5kKHtcbiAgICAgICAgQnVja2V0OiBidWNrZXROYW1lLFxuICAgICAgICBEZWxldGU6IHtcbiAgICAgICAgICBPYmplY3RzOiBkZWxldGVzLFxuICAgICAgICAgIFF1aWV0OiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlSW1hZ2VSZXBvc2l0b3J5KHJlcG9zaXRvcnlOYW1lOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmVjci5zZW5kKFxuICAgICAgbmV3IERlbGV0ZVJlcG9zaXRvcnlDb21tYW5kKHtcbiAgICAgICAgcmVwb3NpdG9yeU5hbWU6IHJlcG9zaXRvcnlOYW1lLFxuICAgICAgICBmb3JjZTogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlQnVja2V0KGJ1Y2tldE5hbWU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmVtcHR5QnVja2V0KGJ1Y2tldE5hbWUpO1xuXG4gICAgICBhd2FpdCB0aGlzLnMzLnNlbmQoXG4gICAgICAgIG5ldyBEZWxldGVCdWNrZXRDb21tYW5kKHtcbiAgICAgICAgICBCdWNrZXQ6IGJ1Y2tldE5hbWUsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGlmIChpc0J1Y2tldE1pc3NpbmdFcnJvcihlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTdGFja01pc3NpbmdFcnJvcihlOiBFcnJvcikge1xuICByZXR1cm4gZS5tZXNzYWdlLmluZGV4T2YoJ2RvZXMgbm90IGV4aXN0JykgPiAtMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQnVja2V0TWlzc2luZ0Vycm9yKGU6IEVycm9yKSB7XG4gIHJldHVybiBlLm1lc3NhZ2UuaW5kZXhPZignZG9lcyBub3QgZXhpc3QnKSA+IC0xO1xufVxuXG4vKipcbiAqIFJldHJ5IGFuIGFzeW5jIG9wZXJhdGlvbiB1bnRpbCBhIGRlYWRsaW5lIGlzIGhpdC5cbiAqXG4gKiBVc2UgYHJldHJ5LmZvclNlY29uZHMoKWAgdG8gY29uc3RydWN0IGEgZGVhZGxpbmUgcmVsYXRpdmUgdG8gcmlnaHQgbm93LlxuICpcbiAqIEV4Y2VwdGlvbnMgd2lsbCBjYXVzZSB0aGUgb3BlcmF0aW9uIHRvIHJldHJ5LiBVc2UgYHJldHJ5LmFib3J0YCB0byBhbm5vdGF0ZSBhbiBleGNlcHRpb25cbiAqIHRvIHN0b3AgdGhlIHJldHJ5IGFuZCBlbmQgaW4gYSBmYWlsdXJlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmV0cnk8QT4oXG4gIG91dHB1dDogTm9kZUpTLldyaXRhYmxlU3RyZWFtLFxuICBvcGVyYXRpb246IHN0cmluZyxcbiAgZGVhZGxpbmU6IERhdGUsXG4gIGJsb2NrOiAoKSA9PiBQcm9taXNlPEE+LFxuKTogUHJvbWlzZTxBPiB7XG4gIGxldCBpID0gMDtcbiAgb3V0cHV0LndyaXRlKGDwn5KIICR7b3BlcmF0aW9ufVxcbmApO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHRyeSB7XG4gICAgICBpKys7XG4gICAgICBjb25zdCByZXQgPSBhd2FpdCBibG9jaygpO1xuICAgICAgb3V0cHV0LndyaXRlKGDwn5KIICR7b3BlcmF0aW9ufTogc3VjY2VlZGVkIGFmdGVyICR7aX0gYXR0ZW1wdHNcXG5gKTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBpZiAoZS5hYm9ydCB8fCBEYXRlLm5vdygpID4gZGVhZGxpbmUuZ2V0VGltZSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvcGVyYXRpb259OiBkaWQgbm90IHN1Y2NlZWQgYWZ0ZXIgJHtpfSBhdHRlbXB0czogJHtlfWApO1xuICAgICAgfVxuICAgICAgb3V0cHV0LndyaXRlKGDij7MgJHtvcGVyYXRpb259ICgke2UubWVzc2FnZX0pXFxuYCk7XG4gICAgICBhd2FpdCBzbGVlcCg1MDAwKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBNYWtlIGEgZGVhZGxpbmUgZm9yIHRoZSBgcmV0cnlgIGZ1bmN0aW9uIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHRpbWUuXG4gKi9cbnJldHJ5LmZvclNlY29uZHMgPSAoc2Vjb25kczogbnVtYmVyKTogRGF0ZSA9PiB7XG4gIHJldHVybiBuZXcgRGF0ZShEYXRlLm5vdygpICsgc2Vjb25kcyAqIDEwMDApO1xufTtcblxuLyoqXG4gKiBBbm5vdGF0ZSBhbiBlcnJvciB0byBzdG9wIHRoZSByZXRyeWluZ1xuICovXG5yZXRyeS5hYm9ydCA9IChlOiBFcnJvcik6IEVycm9yID0+IHtcbiAgKGUgYXMgYW55KS5hYm9ydCA9IHRydWU7XG4gIHJldHVybiBlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG91dHB1dEZyb21TdGFjayhrZXk6IHN0cmluZywgc3RhY2s6IFN0YWNrKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIChzdGFjay5PdXRwdXRzID8/IFtdKS5maW5kKChvKSA9PiBvLk91dHB1dEtleSA9PT0ga2V5KT8uT3V0cHV0VmFsdWU7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgob2spID0+IHNldFRpbWVvdXQob2ssIG1zKSk7XG59XG5cbmZ1bmN0aW9uIGNoYWluYWJsZUNyZWRlbnRpYWxzKHJlZ2lvbjogc3RyaW5nKTogQXdzQ3JlZGVudGlhbElkZW50aXR5UHJvdmlkZXIgfCB1bmRlZmluZWQge1xuICBpZiAocHJvY2Vzcy5lbnYuQ09ERUJVSUxEX0JVSUxEX0FSTiAmJiBwcm9jZXNzLmVudi5BV1NfUFJPRklMRSkge1xuICAgIC8vIGluIGNvZGVidWlsZCB3ZSBtdXN0IGFzc3VtZSB0aGUgcm9sZSB0aGF0IHRoZSBjZGsgdXNlc1xuICAgIC8vIG90aGVyd2lzZSBjcmVkZW50aWFscyB3aWxsIGp1c3QgYmUgcGlja2VkIHVwIGJ5IHRoZSBub3JtYWwgc2RrXG4gICAgLy8gaGV1cmlzdGljcyBhbmQgZXhwaXJlIGFmdGVyIGFuIGhvdXIuXG4gICAgcmV0dXJuIGZyb21Jbmkoe1xuICAgICAgY2xpZW50Q29uZmlnOiB7IHJlZ2lvbiB9LFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==
|
|
202
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXdzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDBFQU13QztBQUN4QyxvREFBeUU7QUFDekUsb0RBQWdEO0FBQ2hELG9EQUFnRDtBQUNoRCwwREFBc0Q7QUFDdEQsa0RBTTRCO0FBQzVCLG9EQUFnRDtBQUNoRCxvREFBZ0Q7QUFDaEQsb0RBQTBFO0FBQzFFLHdFQUF3RDtBQUV4RCxtREFBNkQ7QUFPN0QsTUFBYSxVQUFVO0lBQ2QsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBNkI7UUFDdkQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsSUFBSSxXQUFXLENBQUM7UUFDdkYsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBYyxFQUFFLE1BQTZCO1FBQ3pFLE9BQU8sSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFjRCxZQUE0QixNQUFjLEVBQW1CLE1BQTZCO1FBQTlELFdBQU0sR0FBTixNQUFNLENBQVE7UUFBbUIsV0FBTSxHQUFOLE1BQU0sQ0FBdUI7UUFDeEYsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzlDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixhQUFhLEVBQUUsSUFBSSxvQ0FBdUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFlLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUM7U0FDbkYsQ0FBQztRQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSw0Q0FBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLG9CQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxzQkFBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksc0JBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLHNCQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxzQkFBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksc0JBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLDRCQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxzQkFBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRU0sS0FBSyxDQUFDLE9BQU87UUFDbEIsZ0ZBQWdGO1FBQ2hGLE1BQU0sU0FBUyxHQUFHLElBQUksc0JBQVMsQ0FBQztZQUM5QixXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXO1lBQ3BDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDMUIsV0FBVyxFQUFFLENBQUM7U0FDZixDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsTUFBTSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUkscUNBQXdCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQVEsQ0FBQztJQUMzRSxDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLFVBQW9CO1FBQy9DLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QixPQUFPO1FBQ1QsQ0FBQztRQUVELG9FQUFvRTtRQUNwRSxrQ0FBa0M7UUFDbEMsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUM1QixJQUFJLDBEQUFrQyxDQUFDO2dCQUNyQywyQkFBMkIsRUFBRSxLQUFLO2dCQUNsQyxTQUFTLEVBQUUsU0FBUzthQUNyQixDQUFDLENBQ0gsQ0FBQztZQUNGLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQzVCLElBQUksMENBQWtCLENBQUM7Z0JBQ3JCLFNBQVMsRUFBRSxTQUFTO2FBQ3JCLENBQUMsQ0FDSCxDQUFDO1lBRUYsTUFBTSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxZQUFZLFNBQVMsRUFBRSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUU7Z0JBQ2xGLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDakQsSUFBSSxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztvQkFDdkQsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksU0FBUyxrQkFBa0IsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUN6RSxDQUFDO2dCQUNELElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUN6QixNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsU0FBUyxnQ0FBZ0MsTUFBTSxHQUFHLENBQUMsQ0FBQztnQkFDcEYsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQWlCO1FBQ3hDLElBQUksQ0FBQztZQUNILE9BQU8sQ0FDTCxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUM1QixJQUFJLDZDQUFxQixDQUFDO2dCQUN4QixTQUFTLEVBQUUsU0FBUzthQUNyQixDQUFDLENBQ0gsQ0FDRixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUM1QixDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFDRCxNQUFNLENBQUMsQ0FBQztRQUNWLENBQUM7SUFDSCxDQUFDO0lBRU0sS0FBSyxDQUFDLFdBQVcsQ0FBQyxVQUFrQjtRQUN6QyxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUNoQyxJQUFJLHFDQUF5QixDQUFDO1lBQzVCLE1BQU0sRUFBRSxVQUFVO1NBQ25CLENBQUMsQ0FDSCxDQUFDO1FBRUYsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNsRyxJQUFJLE9BQU8sR0FBRyxDQUFDLFNBQVMsS0FBSyxXQUFXLElBQUksT0FBTyxHQUFHLENBQUMsR0FBRyxLQUFLLFdBQVcsRUFBRSxDQUFDO2dCQUMzRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7aUJBQU0sSUFBSSxPQUFPLEdBQUcsQ0FBQyxHQUFHLEtBQUssV0FBVyxFQUFFLENBQUM7Z0JBQzFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDN0IsQ0FBQztZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQXdCLENBQUMsQ0FBQztRQUU3QixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0IsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQ2pCLElBQUksZ0NBQW9CLENBQUM7WUFDdkIsTUFBTSxFQUFFLFVBQVU7WUFDbEIsTUFBTSxFQUFFO2dCQUNOLE9BQU8sRUFBRSxPQUFPO2dCQUNoQixLQUFLLEVBQUUsS0FBSzthQUNiO1NBQ0YsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRU0sS0FBSyxDQUFDLHFCQUFxQixDQUFDLGNBQXNCO1FBQ3ZELE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQ2pCLElBQUksb0NBQXVCLENBQUM7WUFDMUIsY0FBYyxFQUFFLGNBQWM7WUFDOUIsS0FBSyxFQUFFLElBQUk7U0FDWixDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsWUFBWSxDQUFDLFVBQWtCO1FBQzFDLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUVuQyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUNoQixJQUFJLCtCQUFtQixDQUFDO2dCQUN0QixNQUFNLEVBQUUsVUFBVTthQUNuQixDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsT0FBTztZQUNULENBQUM7WUFDRCxNQUFNLENBQUMsQ0FBQztRQUNWLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUEzSkQsZ0NBMkpDO0FBRUQsU0FBZ0IsbUJBQW1CLENBQUMsQ0FBUTtJQUMxQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUZELGtEQUVDO0FBRUQsU0FBZ0Isb0JBQW9CLENBQUMsQ0FBUTtJQUMzQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEQsQ0FBQztBQUZELG9EQUVDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNJLEtBQUssVUFBVSxLQUFLLENBQ3pCLE1BQTZCLEVBQzdCLFNBQWlCLEVBQ2pCLFFBQWMsRUFDZCxLQUF1QjtJQUV2QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDVixNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sU0FBUyxJQUFJLENBQUMsQ0FBQztJQUNsQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDO1lBQ0gsQ0FBQyxFQUFFLENBQUM7WUFDSixNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssRUFBRSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxTQUFTLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztnQkFDL0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLFNBQVMsMkJBQTJCLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdFLENBQUM7WUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssU0FBUyxLQUFLLENBQUMsQ0FBQyxPQUFPLEtBQUssQ0FBQyxDQUFDO1lBQ2hELE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQztBQXRCRCxzQkFzQkM7QUFFRDs7R0FFRztBQUNILEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FBQyxPQUFlLEVBQVEsRUFBRTtJQUMzQyxPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDL0MsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBUSxFQUFTLEVBQUU7SUFDL0IsQ0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDeEIsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUM7QUFFRixTQUFnQixlQUFlLENBQUMsR0FBVyxFQUFFLEtBQVk7SUFDdkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQztBQUM3RSxDQUFDO0FBRkQsMENBRUM7QUFFTSxLQUFLLFVBQVUsS0FBSyxDQUFDLEVBQVU7SUFDcEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFGRCxzQkFFQztBQUVELFNBQVMsb0JBQW9CLENBQUMsTUFBYztJQUMxQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvRCx5REFBeUQ7UUFDekQsaUVBQWlFO1FBQ2pFLHVDQUF1QztRQUN2QyxPQUFPLElBQUEsOEJBQU8sRUFBQztZQUNiLFlBQVksRUFBRSxFQUFFLE1BQU0sRUFBRTtTQUN6QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENsb3VkRm9ybWF0aW9uQ2xpZW50LFxuICBEZWxldGVTdGFja0NvbW1hbmQsXG4gIERlc2NyaWJlU3RhY2tzQ29tbWFuZCxcbiAgVXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uQ29tbWFuZCxcbiAgdHlwZSBTdGFjayxcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IERlbGV0ZVJlcG9zaXRvcnlDb21tYW5kLCBFQ1JDbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtZWNyJztcbmltcG9ydCB7IEVDU0NsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1lY3MnO1xuaW1wb3J0IHsgSUFNQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWlhbSc7XG5pbXBvcnQgeyBMYW1iZGFDbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtbGFtYmRhJztcbmltcG9ydCB7XG4gIFMzQ2xpZW50LFxuICBEZWxldGVPYmplY3RzQ29tbWFuZCxcbiAgTGlzdE9iamVjdFZlcnNpb25zQ29tbWFuZCxcbiAgdHlwZSBPYmplY3RJZGVudGlmaWVyLFxuICBEZWxldGVCdWNrZXRDb21tYW5kLFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtczMnO1xuaW1wb3J0IHsgU05TQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXNucyc7XG5pbXBvcnQgeyBTU09DbGllbnQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtc3NvJztcbmltcG9ydCB7IFNUU0NsaWVudCwgR2V0Q2FsbGVySWRlbnRpdHlDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXN0cyc7XG5pbXBvcnQgeyBmcm9tSW5pIH0gZnJvbSAnQGF3cy1zZGsvY3JlZGVudGlhbC1wcm92aWRlcnMnO1xuaW1wb3J0IHR5cGUgeyBBd3NDcmVkZW50aWFsSWRlbnRpdHlQcm92aWRlciB9IGZyb20gJ0BzbWl0aHkvdHlwZXMnO1xuaW1wb3J0IHsgQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3kgfSBmcm9tICdAc21pdGh5L3V0aWwtcmV0cnknO1xuaW50ZXJmYWNlIENsaWVudENvbmZpZyB7XG4gIHJlYWRvbmx5IGNyZWRlbnRpYWxzPzogQXdzQ3JlZGVudGlhbElkZW50aXR5UHJvdmlkZXI7XG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuICByZWFkb25seSByZXRyeVN0cmF0ZWd5OiBDb25maWd1cmVkUmV0cnlTdHJhdGVneTtcbn1cblxuZXhwb3J0IGNsYXNzIEF3c0NsaWVudHMge1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIGRlZmF1bHQob3V0cHV0OiBOb2RlSlMuV3JpdGFibGVTdHJlYW0pIHtcbiAgICBjb25zdCByZWdpb24gPSBwcm9jZXNzLmVudi5BV1NfUkVHSU9OID8/IHByb2Nlc3MuZW52LkFXU19ERUZBVUxUX1JFR0lPTiA/PyAndXMtZWFzdC0xJztcbiAgICByZXR1cm4gQXdzQ2xpZW50cy5mb3JSZWdpb24ocmVnaW9uLCBvdXRwdXQpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhc3luYyBmb3JSZWdpb24ocmVnaW9uOiBzdHJpbmcsIG91dHB1dDogTm9kZUpTLldyaXRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIG5ldyBBd3NDbGllbnRzKHJlZ2lvbiwgb3V0cHV0KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBDbGllbnRDb25maWc7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNsb3VkRm9ybWF0aW9uOiBDbG91ZEZvcm1hdGlvbkNsaWVudDtcbiAgcHVibGljIHJlYWRvbmx5IHMzOiBTM0NsaWVudDtcbiAgcHVibGljIHJlYWRvbmx5IGVjcjogRUNSQ2xpZW50O1xuICBwdWJsaWMgcmVhZG9ubHkgZWNzOiBFQ1NDbGllbnQ7XG4gIHB1YmxpYyByZWFkb25seSBzc286IFNTT0NsaWVudDtcbiAgcHVibGljIHJlYWRvbmx5IHNuczogU05TQ2xpZW50O1xuICBwdWJsaWMgcmVhZG9ubHkgaWFtOiBJQU1DbGllbnQ7XG4gIHB1YmxpYyByZWFkb25seSBsYW1iZGE6IExhbWJkYUNsaWVudDtcbiAgcHVibGljIHJlYWRvbmx5IHN0czogU1RTQ2xpZW50O1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSByZWdpb246IHN0cmluZywgcHJpdmF0ZSByZWFkb25seSBvdXRwdXQ6IE5vZGVKUy5Xcml0YWJsZVN0cmVhbSkge1xuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgY3JlZGVudGlhbHM6IGNoYWluYWJsZUNyZWRlbnRpYWxzKHRoaXMucmVnaW9uKSxcbiAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb24sXG4gICAgICByZXRyeVN0cmF0ZWd5OiBuZXcgQ29uZmlndXJlZFJldHJ5U3RyYXRlZ3koOSwgKGF0dGVtcHQ6IG51bWJlcikgPT4gYXR0ZW1wdCAqKiA1MDApLFxuICAgIH07XG4gICAgdGhpcy5jbG91ZEZvcm1hdGlvbiA9IG5ldyBDbG91ZEZvcm1hdGlvbkNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5zMyA9IG5ldyBTM0NsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5lY3IgPSBuZXcgRUNSQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmVjcyA9IG5ldyBFQ1NDbGllbnQodGhpcy5jb25maWcpO1xuICAgIHRoaXMuc3NvID0gbmV3IFNTT0NsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5zbnMgPSBuZXcgU05TQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgICB0aGlzLmlhbSA9IG5ldyBJQU1DbGllbnQodGhpcy5jb25maWcpO1xuICAgIHRoaXMubGFtYmRhID0gbmV3IExhbWJkYUNsaWVudCh0aGlzLmNvbmZpZyk7XG4gICAgdGhpcy5zdHMgPSBuZXcgU1RTQ2xpZW50KHRoaXMuY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhY2NvdW50KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgLy8gUmVkdWNlICMgb2YgcmV0cmllcywgd2UgdXNlIHRoaXMgYXMgYSBjaXJjdWl0IGJyZWFrZXIgZm9yIGRldGVjdGluZyBuby1jb25maWdcbiAgICBjb25zdCBzdHNDbGllbnQgPSBuZXcgU1RTQ2xpZW50KHtcbiAgICAgIGNyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZy5jcmVkZW50aWFscyxcbiAgICAgIHJlZ2lvbjogdGhpcy5jb25maWcucmVnaW9uLFxuICAgICAgbWF4QXR0ZW1wdHM6IDIsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gKGF3YWl0IHN0c0NsaWVudC5zZW5kKG5ldyBHZXRDYWxsZXJJZGVudGl0eUNvbW1hbmQoe30pKSkuQWNjb3VudCE7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlU3RhY2tzKC4uLnN0YWNrTmFtZXM6IHN0cmluZ1tdKSB7XG4gICAgaWYgKHN0YWNrTmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gV2UgcHVycG9zZWx5IGRvIGFsbCBzdGFja3Mgc2VyaWFsbHksIGJlY2F1c2UgdGhleSd2ZSBiZWVuIG9yZGVyZWRcbiAgICAvLyB0byBkbyB0aGUgYm9vdHN0cmFwIHN0YWNrIGxhc3QuXG4gICAgZm9yIChjb25zdCBzdGFja05hbWUgb2Ygc3RhY2tOYW1lcykge1xuICAgICAgYXdhaXQgdGhpcy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICBuZXcgVXBkYXRlVGVybWluYXRpb25Qcm90ZWN0aW9uQ29tbWFuZCh7XG4gICAgICAgICAgRW5hYmxlVGVybWluYXRpb25Qcm90ZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgICBTdGFja05hbWU6IHN0YWNrTmFtZSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5jbG91ZEZvcm1hdGlvbi5zZW5kKFxuICAgICAgICBuZXcgRGVsZXRlU3RhY2tDb21tYW5kKHtcbiAgICAgICAgICBTdGFja05hbWU6IHN0YWNrTmFtZSxcbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgICBhd2FpdCByZXRyeSh0aGlzLm91dHB1dCwgYERlbGV0aW5nICR7c3RhY2tOYW1lfWAsIHJldHJ5LmZvclNlY29uZHMoNjAwKSwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBhd2FpdCB0aGlzLnN0YWNrU3RhdHVzKHN0YWNrTmFtZSk7XG4gICAgICAgIGlmIChzdGF0dXMgIT09IHVuZGVmaW5lZCAmJiBzdGF0dXMuZW5kc1dpdGgoJ19GQUlMRUQnKSkge1xuICAgICAgICAgIHRocm93IHJldHJ5LmFib3J0KG5ldyBFcnJvcihgJyR7c3RhY2tOYW1lfScgaXMgaW4gc3RhdGUgJyR7c3RhdHVzfSdgKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEZWxldGUgb2YgJyR7c3RhY2tOYW1lfScgbm90IGNvbXBsZXRlIHlldCwgc3RhdHVzOiAnJHtzdGF0dXN9J2ApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc3RhY2tTdGF0dXMoc3RhY2tOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBhd2FpdCB0aGlzLmNsb3VkRm9ybWF0aW9uLnNlbmQoXG4gICAgICAgICAgbmV3IERlc2NyaWJlU3RhY2tzQ29tbWFuZCh7XG4gICAgICAgICAgICBTdGFja05hbWU6IHN0YWNrTmFtZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgKS5TdGFja3M/LlswXS5TdGFja1N0YXR1cztcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGlmIChpc1N0YWNrTWlzc2luZ0Vycm9yKGUpKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBlbXB0eUJ1Y2tldChidWNrZXROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBvYmplY3RzID0gYXdhaXQgdGhpcy5zMy5zZW5kKFxuICAgICAgbmV3IExpc3RPYmplY3RWZXJzaW9uc0NvbW1hbmQoe1xuICAgICAgICBCdWNrZXQ6IGJ1Y2tldE5hbWUsXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgY29uc3QgZGVsZXRlcyA9IFsuLi4ob2JqZWN0cy5WZXJzaW9ucyB8fCBbXSksIC4uLihvYmplY3RzLkRlbGV0ZU1hcmtlcnMgfHwgW10pXS5yZWR1Y2UoKGFjYywgb2JqKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9iai5WZXJzaW9uSWQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvYmouS2V5ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBhY2MucHVzaCh7IEtleTogb2JqLktleSwgVmVyc2lvbklkOiBvYmouVmVyc2lvbklkIH0pO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqLktleSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgYWNjLnB1c2goeyBLZXk6IG9iai5LZXkgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdIGFzIE9iamVjdElkZW50aWZpZXJbXSk7XG5cbiAgICBpZiAoZGVsZXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zMy5zZW5kKFxuICAgICAgbmV3IERlbGV0ZU9iamVjdHNDb21tYW5kKHtcbiAgICAgICAgQnVja2V0OiBidWNrZXROYW1lLFxuICAgICAgICBEZWxldGU6IHtcbiAgICAgICAgICBPYmplY3RzOiBkZWxldGVzLFxuICAgICAgICAgIFF1aWV0OiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlSW1hZ2VSZXBvc2l0b3J5KHJlcG9zaXRvcnlOYW1lOiBzdHJpbmcpIHtcbiAgICBhd2FpdCB0aGlzLmVjci5zZW5kKFxuICAgICAgbmV3IERlbGV0ZVJlcG9zaXRvcnlDb21tYW5kKHtcbiAgICAgICAgcmVwb3NpdG9yeU5hbWU6IHJlcG9zaXRvcnlOYW1lLFxuICAgICAgICBmb3JjZTogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZGVsZXRlQnVja2V0KGJ1Y2tldE5hbWU6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmVtcHR5QnVja2V0KGJ1Y2tldE5hbWUpO1xuXG4gICAgICBhd2FpdCB0aGlzLnMzLnNlbmQoXG4gICAgICAgIG5ldyBEZWxldGVCdWNrZXRDb21tYW5kKHtcbiAgICAgICAgICBCdWNrZXQ6IGJ1Y2tldE5hbWUsXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGlmIChpc0J1Y2tldE1pc3NpbmdFcnJvcihlKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aHJvdyBlO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNTdGFja01pc3NpbmdFcnJvcihlOiBFcnJvcikge1xuICByZXR1cm4gZS5tZXNzYWdlLmluZGV4T2YoJ2RvZXMgbm90IGV4aXN0JykgPiAtMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQnVja2V0TWlzc2luZ0Vycm9yKGU6IEVycm9yKSB7XG4gIHJldHVybiBlLm1lc3NhZ2UuaW5kZXhPZignZG9lcyBub3QgZXhpc3QnKSA+IC0xO1xufVxuXG4vKipcbiAqIFJldHJ5IGFuIGFzeW5jIG9wZXJhdGlvbiB1bnRpbCBhIGRlYWRsaW5lIGlzIGhpdC5cbiAqXG4gKiBVc2UgYHJldHJ5LmZvclNlY29uZHMoKWAgdG8gY29uc3RydWN0IGEgZGVhZGxpbmUgcmVsYXRpdmUgdG8gcmlnaHQgbm93LlxuICpcbiAqIEV4Y2VwdGlvbnMgd2lsbCBjYXVzZSB0aGUgb3BlcmF0aW9uIHRvIHJldHJ5LiBVc2UgYHJldHJ5LmFib3J0YCB0byBhbm5vdGF0ZSBhbiBleGNlcHRpb25cbiAqIHRvIHN0b3AgdGhlIHJldHJ5IGFuZCBlbmQgaW4gYSBmYWlsdXJlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmV0cnk8QT4oXG4gIG91dHB1dDogTm9kZUpTLldyaXRhYmxlU3RyZWFtLFxuICBvcGVyYXRpb246IHN0cmluZyxcbiAgZGVhZGxpbmU6IERhdGUsXG4gIGJsb2NrOiAoKSA9PiBQcm9taXNlPEE+LFxuKTogUHJvbWlzZTxBPiB7XG4gIGxldCBpID0gMDtcbiAgb3V0cHV0LndyaXRlKGDwn5KIICR7b3BlcmF0aW9ufVxcbmApO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHRyeSB7XG4gICAgICBpKys7XG4gICAgICBjb25zdCByZXQgPSBhd2FpdCBibG9jaygpO1xuICAgICAgb3V0cHV0LndyaXRlKGDwn5KIICR7b3BlcmF0aW9ufTogc3VjY2VlZGVkIGFmdGVyICR7aX0gYXR0ZW1wdHNcXG5gKTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBpZiAoZS5hYm9ydCB8fCBEYXRlLm5vdygpID4gZGVhZGxpbmUuZ2V0VGltZSgpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtvcGVyYXRpb259OiBkaWQgbm90IHN1Y2NlZWQgYWZ0ZXIgJHtpfSBhdHRlbXB0czogJHtlfWApO1xuICAgICAgfVxuICAgICAgb3V0cHV0LndyaXRlKGDij7MgJHtvcGVyYXRpb259ICgke2UubWVzc2FnZX0pXFxuYCk7XG4gICAgICBhd2FpdCBzbGVlcCg1MDAwKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBNYWtlIGEgZGVhZGxpbmUgZm9yIHRoZSBgcmV0cnlgIGZ1bmN0aW9uIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHRpbWUuXG4gKi9cbnJldHJ5LmZvclNlY29uZHMgPSAoc2Vjb25kczogbnVtYmVyKTogRGF0ZSA9PiB7XG4gIHJldHVybiBuZXcgRGF0ZShEYXRlLm5vdygpICsgc2Vjb25kcyAqIDEwMDApO1xufTtcblxuLyoqXG4gKiBBbm5vdGF0ZSBhbiBlcnJvciB0byBzdG9wIHRoZSByZXRyeWluZ1xuICovXG5yZXRyeS5hYm9ydCA9IChlOiBFcnJvcik6IEVycm9yID0+IHtcbiAgKGUgYXMgYW55KS5hYm9ydCA9IHRydWU7XG4gIHJldHVybiBlO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG91dHB1dEZyb21TdGFjayhrZXk6IHN0cmluZywgc3RhY2s6IFN0YWNrKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIChzdGFjay5PdXRwdXRzID8/IFtdKS5maW5kKChvKSA9PiBvLk91dHB1dEtleSA9PT0ga2V5KT8uT3V0cHV0VmFsdWU7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgob2spID0+IHNldFRpbWVvdXQob2ssIG1zKSk7XG59XG5cbmZ1bmN0aW9uIGNoYWluYWJsZUNyZWRlbnRpYWxzKHJlZ2lvbjogc3RyaW5nKTogQXdzQ3JlZGVudGlhbElkZW50aXR5UHJvdmlkZXIgfCB1bmRlZmluZWQge1xuICBpZiAocHJvY2Vzcy5lbnYuQ09ERUJVSUxEX0JVSUxEX0FSTiAmJiBwcm9jZXNzLmVudi5BV1NfUFJPRklMRSkge1xuICAgIC8vIGluIGNvZGVidWlsZCB3ZSBtdXN0IGFzc3VtZSB0aGUgcm9sZSB0aGF0IHRoZSBjZGsgdXNlc1xuICAgIC8vIG90aGVyd2lzZSBjcmVkZW50aWFscyB3aWxsIGp1c3QgYmUgcGlja2VkIHVwIGJ5IHRoZSBub3JtYWwgc2RrXG4gICAgLy8gaGV1cmlzdGljcyBhbmQgZXhwaXJlIGFmdGVyIGFuIGhvdXIuXG4gICAgcmV0dXJuIGZyb21Jbmkoe1xuICAgICAgY2xpZW50Q29uZmlnOiB7IHJlZ2lvbiB9LFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==
|
package/lib/with-cdk-app.d.ts
CHANGED
|
@@ -14,6 +14,10 @@ export declare const EXTENDED_TEST_TIMEOUT_S: number;
|
|
|
14
14
|
* For backwards compatibility with existing tests (so we don't have to change
|
|
15
15
|
* too much) the inner block is expected to take a `TestFixture` object.
|
|
16
16
|
*/
|
|
17
|
+
export declare function withSpecificCdkApp(appName: string, block: (context: TestFixture) => Promise<void>): (context: TestContext & AwsContext & DisableBootstrapContext) => Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Like `withSpecificCdkApp`, but uses the default integration testing app with a million stacks in it
|
|
20
|
+
*/
|
|
17
21
|
export declare function withCdkApp(block: (context: TestFixture) => Promise<void>): (context: TestContext & AwsContext & DisableBootstrapContext) => Promise<void>;
|
|
18
22
|
export declare function withCdkMigrateApp<A extends TestContext>(language: string, block: (context: TestFixture) => Promise<void>): (context: A) => Promise<void>;
|
|
19
23
|
export declare function withMonolithicCfnIncludeCdkApp<A extends TestContext>(block: (context: TestFixture) => Promise<void>): (context: A) => Promise<void>;
|
|
@@ -27,6 +31,7 @@ export declare function withMonolithicCfnIncludeCdkApp<A extends TestContext>(bl
|
|
|
27
31
|
* test declaration but centralizing it is going to make it convenient to modify in the future.
|
|
28
32
|
*/
|
|
29
33
|
export declare function withDefaultFixture(block: (context: TestFixture) => Promise<void>): (context: TestContext) => Promise<void>;
|
|
34
|
+
export declare function withSpecificFixture(appName: string, block: (context: TestFixture) => Promise<void>): (context: TestContext) => Promise<void>;
|
|
30
35
|
export declare function withExtendedTimeoutFixture(block: (context: TestFixture) => Promise<void>): (context: TestContext) => Promise<void>;
|
|
31
36
|
export declare function withCDKMigrateFixture(language: string, block: (content: TestFixture) => Promise<void>): (context: TestContext) => Promise<void>;
|
|
32
37
|
export interface DisableBootstrapContext {
|
|
@@ -76,6 +81,10 @@ interface CommonCdkBootstrapCommandOptions {
|
|
|
76
81
|
* @default - none
|
|
77
82
|
*/
|
|
78
83
|
readonly tags?: string;
|
|
84
|
+
/**
|
|
85
|
+
* @default - the default CDK qualifier
|
|
86
|
+
*/
|
|
87
|
+
readonly qualifier?: string;
|
|
79
88
|
}
|
|
80
89
|
export interface CdkLegacyBootstrapCommandOptions extends CommonCdkBootstrapCommandOptions {
|
|
81
90
|
/**
|
package/lib/with-cdk-app.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.installNpmPackages = exports.TestFixture = exports.cloneDirectory = exports.withoutBootstrap = exports.withCDKMigrateFixture = exports.withExtendedTimeoutFixture = exports.withDefaultFixture = exports.withMonolithicCfnIncludeCdkApp = exports.withCdkMigrateApp = exports.withCdkApp = exports.EXTENDED_TEST_TIMEOUT_S = exports.DEFAULT_TEST_TIMEOUT_S = void 0;
|
|
3
|
+
exports.installNpmPackages = exports.TestFixture = exports.cloneDirectory = exports.withoutBootstrap = exports.withCDKMigrateFixture = exports.withExtendedTimeoutFixture = exports.withSpecificFixture = exports.withDefaultFixture = exports.withMonolithicCfnIncludeCdkApp = exports.withCdkMigrateApp = exports.withCdkApp = exports.withSpecificCdkApp = exports.EXTENDED_TEST_TIMEOUT_S = exports.DEFAULT_TEST_TIMEOUT_S = void 0;
|
|
4
4
|
/* eslint-disable no-console */
|
|
5
5
|
const fs = require("fs");
|
|
6
6
|
const os = require("os");
|
|
@@ -23,7 +23,7 @@ exports.EXTENDED_TEST_TIMEOUT_S = 30 * 60;
|
|
|
23
23
|
* For backwards compatibility with existing tests (so we don't have to change
|
|
24
24
|
* too much) the inner block is expected to take a `TestFixture` object.
|
|
25
25
|
*/
|
|
26
|
-
function
|
|
26
|
+
function withSpecificCdkApp(appName, block) {
|
|
27
27
|
return async (context) => {
|
|
28
28
|
const randy = context.randomString;
|
|
29
29
|
const stackNamePrefix = `cdktest-${randy}`;
|
|
@@ -31,7 +31,7 @@ function withCdkApp(block) {
|
|
|
31
31
|
context.output.write(` Stack prefix: ${stackNamePrefix}\n`);
|
|
32
32
|
context.output.write(` Test directory: ${integTestDir}\n`);
|
|
33
33
|
context.output.write(` Region: ${context.aws.region}\n`);
|
|
34
|
-
await cloneDirectory(path.join(resources_1.RESOURCES_DIR, 'cdk-apps',
|
|
34
|
+
await cloneDirectory(path.join(resources_1.RESOURCES_DIR, 'cdk-apps', appName), integTestDir, context.output);
|
|
35
35
|
const fixture = new TestFixture(integTestDir, stackNamePrefix, context.output, context.aws, context.randomString);
|
|
36
36
|
let success = true;
|
|
37
37
|
try {
|
|
@@ -76,6 +76,14 @@ function withCdkApp(block) {
|
|
|
76
76
|
}
|
|
77
77
|
};
|
|
78
78
|
}
|
|
79
|
+
exports.withSpecificCdkApp = withSpecificCdkApp;
|
|
80
|
+
/**
|
|
81
|
+
* Like `withSpecificCdkApp`, but uses the default integration testing app with a million stacks in it
|
|
82
|
+
*/
|
|
83
|
+
function withCdkApp(block) {
|
|
84
|
+
// 'app' is the name of the default integration app in the `cdk-apps` directory
|
|
85
|
+
return withSpecificCdkApp('app', block);
|
|
86
|
+
}
|
|
79
87
|
exports.withCdkApp = withCdkApp;
|
|
80
88
|
function withCdkMigrateApp(language, block) {
|
|
81
89
|
return async (context) => {
|
|
@@ -156,6 +164,10 @@ function withDefaultFixture(block) {
|
|
|
156
164
|
return (0, with_aws_1.withAws)((0, with_timeout_1.withTimeout)(exports.DEFAULT_TEST_TIMEOUT_S, withCdkApp(block)));
|
|
157
165
|
}
|
|
158
166
|
exports.withDefaultFixture = withDefaultFixture;
|
|
167
|
+
function withSpecificFixture(appName, block) {
|
|
168
|
+
return (0, with_aws_1.withAws)((0, with_timeout_1.withTimeout)(exports.DEFAULT_TEST_TIMEOUT_S, withSpecificCdkApp(appName, block)));
|
|
169
|
+
}
|
|
170
|
+
exports.withSpecificFixture = withSpecificFixture;
|
|
159
171
|
function withExtendedTimeoutFixture(block) {
|
|
160
172
|
return (0, with_aws_1.withAws)((0, with_timeout_1.withTimeout)(exports.EXTENDED_TEST_TIMEOUT_S, withCdkApp(block)));
|
|
161
173
|
}
|
|
@@ -262,7 +274,7 @@ class TestFixture extends shell_1.ShellHelper {
|
|
|
262
274
|
if (options.bootstrapBucketName) {
|
|
263
275
|
args.push('--bootstrap-bucket-name', options.bootstrapBucketName);
|
|
264
276
|
}
|
|
265
|
-
args.push('--qualifier', this.qualifier);
|
|
277
|
+
args.push('--qualifier', options.qualifier ?? this.qualifier);
|
|
266
278
|
if (options.cfnExecutionPolicy) {
|
|
267
279
|
args.push('--cloudformation-execution-policies', options.cfnExecutionPolicy);
|
|
268
280
|
}
|
|
@@ -356,11 +368,15 @@ class TestFixture extends shell_1.ShellHelper {
|
|
|
356
368
|
this.sortBootstrapStacksToTheEnd(stacksToDelete);
|
|
357
369
|
// Bootstrap stacks have buckets that need to be cleaned
|
|
358
370
|
const bucketNames = stacksToDelete.map(stack => (0, aws_1.outputFromStack)('BucketName', stack)).filter(defined);
|
|
371
|
+
// Parallelism will be reasonable
|
|
372
|
+
// eslint-disable-next-line @cdklabs/promiseall-no-unbounded-parallelism
|
|
359
373
|
await Promise.all(bucketNames.map(b => this.aws.emptyBucket(b)));
|
|
360
374
|
// The bootstrap bucket has a removal policy of RETAIN by default, so add it to the buckets to be cleaned up.
|
|
361
375
|
this.bucketsToDelete.push(...bucketNames);
|
|
362
376
|
// Bootstrap stacks have ECR repositories with images which should be deleted
|
|
363
377
|
const imageRepositoryNames = stacksToDelete.map(stack => (0, aws_1.outputFromStack)('ImageRepositoryName', stack)).filter(defined);
|
|
378
|
+
// Parallelism will be reasonable
|
|
379
|
+
// eslint-disable-next-line @cdklabs/promiseall-no-unbounded-parallelism
|
|
364
380
|
await Promise.all(imageRepositoryNames.map(r => this.aws.deleteImageRepository(r)));
|
|
365
381
|
await this.aws.deleteStacks(...stacksToDelete.map((s) => {
|
|
366
382
|
if (!s.StackName) {
|
|
@@ -484,4 +500,4 @@ async function installNpmPackages(fixture, packages) {
|
|
|
484
500
|
}
|
|
485
501
|
exports.installNpmPackages = installNpmPackages;
|
|
486
502
|
const ALREADY_BOOTSTRAPPED_IN_THIS_RUN = new Set();
|
|
487
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1jZGstYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2l0aC1jZGstYXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQix5QkFBeUI7QUFDekIseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QiwwRUFBOEU7QUFDOUUsK0JBQW9EO0FBRXBELCtEQUFpRTtBQUVqRSw2REFBeUU7QUFDekUsMkNBQTRDO0FBQzVDLG1DQUFtRTtBQUNuRSx5Q0FBaUQ7QUFDakQsaURBQTZDO0FBRWhDLFFBQUEsc0JBQXNCLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQyxRQUFBLHVCQUF1QixHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFFL0M7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLFVBQVUsQ0FDeEIsS0FBOEM7SUFFOUMsT0FBTyxLQUFLLEVBQUUsT0FBMkQsRUFBRSxFQUFFO1FBQzNFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDbkMsTUFBTSxlQUFlLEdBQUcsV0FBVyxLQUFLLEVBQUUsQ0FBQztRQUMzQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxhQUFhLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFbEUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLGVBQWUsSUFBSSxDQUFDLENBQUM7UUFDOUQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLFlBQVksSUFBSSxDQUFDLENBQUM7UUFDM0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUVqRSxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUFhLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLFlBQVksRUFB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O0FBQ25FLENBQUM7QUFyQkQsZ0RBcUJDO0FBRUQsTUFBTSxnQ0FBZ0MsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IERlc2NyaWJlU3RhY2tzQ29tbWFuZCwgU3RhY2sgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgb3V0cHV0RnJvbVN0YWNrLCBBd3NDbGllbnRzIH0gZnJvbSAnLi9hd3MnO1xuaW1wb3J0IHsgVGVzdENvbnRleHQgfSBmcm9tICcuL2ludGVnLXRlc3QnO1xuaW1wb3J0IHsgZmluZFlhcm5QYWNrYWdlcyB9IGZyb20gJy4vcGFja2FnZS1zb3VyY2VzL3JlcG8tc291cmNlJztcbmltcG9ydCB7IElQYWNrYWdlU291cmNlIH0gZnJvbSAnLi9wYWNrYWdlLXNvdXJjZXMvc291cmNlJztcbmltcG9ydCB7IHBhY2thZ2VTb3VyY2VJblN1YnByb2Nlc3MgfSBmcm9tICcuL3BhY2thZ2Utc291cmNlcy9zdWJwcm9jZXNzJztcbmltcG9ydCB7IFJFU09VUkNFU19ESVIgfSBmcm9tICcuL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBzaGVsbCwgU2hlbGxPcHRpb25zLCBTaGVsbEhlbHBlciwgcmltcmFmIH0gZnJvbSAnLi9zaGVsbCc7XG5pbXBvcnQgeyBBd3NDb250ZXh0LCB3aXRoQXdzIH0gZnJvbSAnLi93aXRoLWF3cyc7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gJy4vd2l0aC10aW1lb3V0JztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVEVTVF9USU1FT1VUX1MgPSAyMCAqIDYwO1xuZXhwb3J0IGNvbnN0IEVYVEVOREVEX1RFU1RfVElNRU9VVF9TID0gMzAgKiA2MDtcblxuLyoqXG4gKiBIaWdoZXIgb3JkZXIgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhIGJsb2NrIHdpdGggYSBDREsgYXBwIGZpeHR1cmVcbiAqXG4gKiBSZXF1aXJlcyBhbiBBV1MgY2xpZW50IHRvIGJlIHBhc3NlZCBpbi5cbiAqXG4gKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyB0ZXN0cyAoc28gd2UgZG9uJ3QgaGF2ZSB0byBjaGFuZ2VcbiAqIHRvbyBtdWNoKSB0aGUgaW5uZXIgYmxvY2sgaXMgZXhwZWN0ZWQgdG8gdGFrZSBhIGBUZXN0Rml4dHVyZWAgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aENka0FwcChcbiAgYmxvY2s6IChjb250ZXh0OiBUZXN0Rml4dHVyZSkgPT4gUHJvbWlzZTx2b2lkPixcbik6IChjb250ZXh0OiBUZXN0Q29udGV4dCAmIEF3c0NvbnRleHQgJiBEaXNhYmxlQm9vdHN0cmFwQ29udGV4dCkgPT4gUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBhc3luYyAoY29udGV4dDogVGVzdENvbnRleHQgJiBBd3NDb250ZXh0ICYgRGlzYWJsZUJvb3RzdHJhcENvbnRleHQpID0+IHtcbiAgICBjb25zdCByYW5keSA9IGNvbnRleHQucmFuZG9tU3RyaW5nO1xuICAgIGNvbnN0IHN0YWNrTmFtZVByZWZpeCA9IGBjZGt0ZXN0LSR7cmFuZHl9YDtcbiAgICBjb25zdCBpbnRlZ1Rlc3REaXIgPSBwYXRoLmpvaW4ob3MudG1wZGlyKCksIGBjZGstaW50ZWctJHtyYW5keX1gKTtcblxuICAgIGNvbnRleHQub3V0cHV0LndyaXRlKGAgU3RhY2sgcHJlZml4OiAgICR7c3RhY2tOYW1lUHJlZml4fVxcbmApO1xuICAgIGNvbnRleHQub3V0cHV0LndyaXRlKGAgVGVzdCBkaXJlY3Rvcnk6ICR7aW50ZWdUZXN0RGlyfVxcbmApO1xuICAgIGNvbnRleHQub3V0cHV0LndyaXRlKGAgUmVnaW9uOiAgICAgICAgICR7Y29udGV4dC5hd3MucmVnaW9ufVxcbmApO1xuXG4gICAgYXdhaXQgY2xvbmVEaXJlY3RvcnkocGF0aC5qb2luKFJFU09VUkNFU19ESVIsICdjZGstYXBwcycsICdhcHAnKSwgaW50ZWdUZXN0RGlyLCBjb250ZXh0Lm91dHB1dCk7XG4gICAgY29uc3QgZml4dHVyZSA9IG5ldyBUZXN0Rml4dHVyZShcbiAgICAgIGludGVnVGVzdERpcixcbiAgICAgIHN0YWNrTmFtZVByZWZpeCxcbiAgICAgIGNvbnRleHQub3V0cHV0LFxuICAgICAgY29udGV4dC5hd3MsXG4gICAgICBjb250ZXh0LnJhbmRvbVN0cmluZyk7XG5cbiAgICBsZXQgc3VjY2VzcyA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGluc3RhbGxhdGlvblZlcnNpb24gPSBmaXh0dXJlLnBhY2thZ2VzLnJlcXVlc3RlZEZyYW1ld29ya1ZlcnNpb24oKTtcblxuICAgICAgaWYgKGZpeHR1cmUucGFja2FnZXMubWFqb3JWZXJzaW9uKCkgPT09ICcxJykge1xuICAgICAgICBhd2FpdCBpbnN0YWxsTnBtUGFja2FnZXMoZml4dHVyZSwge1xuICAgICAgICAgICdAYXdzLWNkay9jb3JlJzogaW5zdGFsbGF0aW9uVmVyc2lvbixcbiAgICAgICAgICAnQGF3cy1jZGsvYXdzLXNucyc6IGluc3RhbGxhdGlvblZlcnNpb24sXG4gICAgICAgICAgJ0Bhd3MtY2RrL2F3cy1zcXMnOiBpbnN0YWxsYXRpb25WZXJzaW9uLFxuICAgICAgICAgICdAYXdzLWNkay9hd3MtaWFtJzogaW5zdGFsbGF0aW9uVmVyc2lvbixcbiAgICAgICAgICAnQGF3cy1jZGsvYXdzLWxhbWJkYSc6IGluc3RhbGxhdGlvblZlcnNpb24sXG4gICAgICAgICAgJ0Bhd3MtY2RrL2F3cy1zc20nOiBpbnN0YWxsYXRpb25WZXJzaW9uLFxuICAgICAgICAgICdAYXdzLWNkay9hd3MtZWNyLWFzc2V0cyc6IGluc3RhbGxhdGlvblZlcnNpb24sXG4gICAgICAgICAgJ0Bhd3MtY2RrL2F3cy1jbG91ZGZvcm1hdGlvbic6IGluc3RhbGxhdGlvblZlcnNpb24sXG4gICAgICAgICAgJ0Bhd3MtY2RrL2F3cy1lYzInOiBpbnN0YWxsYXRpb25WZXJzaW9uLFxuICAgICAgICAgICdAYXdzLWNkay9hd3MtczMnOiBpbnN0YWxsYXRpb25WZXJzaW9uLFxuICAgICAgICAgICdjb25zdHJ1Y3RzJzogJ14zJyxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBpbnN0YWxsTnBtUGFja2FnZXMoZml4dHVyZSwge1xuICAgICAgICAgICdhd3MtY2RrLWxpYic6IGluc3RhbGxhdGlvblZlcnNpb24sXG4gICAgICAgICAgJ2NvbnN0cnVjdHMnOiAnXjEwJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghY29udGV4dC5kaXNhYmxlQm9vdHN0cmFwKSB7XG4gICAgICAgIGF3YWl0IGVuc3VyZUJvb3RzdHJhcHBlZChmaXh0dXJlKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgYmxvY2soZml4dHVyZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc3VjY2VzcyA9IGZhbHNlO1xuICAgICAgdGhyb3cgZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52LklOVEVHX05PX0NMRUFOKSB7XG4gICAgICAgIGNvbnRleHQubG9nKGBMZWZ0IHRlc3QgZGlyZWN0b3J5IGluICcke2ludGVnVGVzdERpcn0nICgkSU5URUdfTk9fQ0xFQU4pXFxuYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBmaXh0dXJlLmRpc3Bvc2Uoc3VjY2Vzcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aENka01pZ3JhdGVBcHA8QSBleHRlbmRzIFRlc3RDb250ZXh0PihsYW5ndWFnZTogc3RyaW5nLCBibG9jazogKGNvbnRleHQ6IFRlc3RGaXh0dXJlKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gIHJldHVybiBhc3luYyAoY29udGV4dDogQSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9IGBjZGstbWlncmF0ZS0ke2xhbmd1YWdlfS1pbnRlZy0ke2NvbnRleHQucmFuZG9tU3RyaW5nfWA7XG4gICAgY29uc3QgaW50ZWdUZXN0RGlyID0gcGF0aC5qb2luKG9zLnRtcGRpcigpLCBgY2RrLW1pZ3JhdGUtJHtsYW5ndWFnZX0taW50ZWctJHtjb250ZXh0LnJhbmRvbVN0cmluZ31gKTtcblxuICAgIGNvbnRleHQub3V0cHV0LndyaXRlKGAgU3RhY2sgbmFtZTogICAke3N0YWNrTmFtZX1cXG5gKTtcbiAgICBjb250ZXh0Lm91dHB1dC53cml0ZShgIFRlc3QgZGlyZWN0b3J5OiAke2ludGVnVGVzdERpcn1cXG5gKTtcblxuICAgIGNvbnN0IGF3c0NsaWVudHMgPSBhd2FpdCBBd3NDbGllbnRzLmRlZmF1bHQoY29udGV4dC5vdXRwdXQpO1xuICAgIGZzLm1rZGlyU3luYyhpbnRlZ1Rlc3REaXIpO1xuICAgIGNvbnN0IGZpeHR1cmUgPSBuZXcgVGVzdEZpeHR1cmUoXG4gICAgICBpbnRlZ1Rlc3REaXIsXG4gICAgICBzdGFja05hbWUsXG4gICAgICBjb250ZXh0Lm91dHB1dCxcbiAgICAgIGF3c0NsaWVudHMsXG4gICAgICBjb250ZXh0LnJhbmRvbVN0cmluZyxcbiAgICApO1xuXG4gICAgYXdhaXQgZml4dHVyZS5jZGtNaWdyYXRlKGxhbmd1YWdlLCBzdGFja05hbWUpO1xuXG4gICAgY29uc3QgdGVzdEZpeHR1cmUgPSBuZXcgVGVzdEZpeHR1cmUoXG4gICAgICBwYXRoLmpvaW4oaW50ZWdUZXN0RGlyLCBzdGFja05hbWUpLFxuICAgICAgc3RhY2tOYW1lLFxuICAgICAgY29udGV4dC5vdXRwdXQsXG4gICAgICBhd3NDbGllbnRzLFxuICAgICAgY29udGV4dC5yYW5kb21TdHJpbmcsXG4gICAgKTtcblxuICAgIGxldCBzdWNjZXNzID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYmxvY2sodGVzdEZpeHR1cmUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgIHRocm93IGU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5JTlRFR19OT19DTEVBTikge1xuICAgICAgICBjb250ZXh0LmxvZyhgTGVmdCB0ZXN0IGRpcmVjdG9yeSBpbiAnJHtpbnRlZ1Rlc3REaXJ9JyAoJElOVEVHX05PX0NMRUFOKWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgZml4dHVyZS5kaXNwb3NlKHN1Y2Nlc3MpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhNb25vbGl0aGljQ2ZuSW5jbHVkZUNka0FwcDxBIGV4dGVuZHMgVGVzdENvbnRleHQ+KGJsb2NrOiAoY29udGV4dDogVGVzdEZpeHR1cmUpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgcmV0dXJuIGFzeW5jIChjb250ZXh0OiBBKSA9PiB7XG4gICAgY29uc3QgdWJlclBhY2thZ2UgPSBwcm9jZXNzLmVudi5VQkVSUEFDS0FHRTtcbiAgICBpZiAoIXViZXJQYWNrYWdlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBVQkVSUEFDS0FHRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyByZXF1aXJlZCBmb3IgcnVubmluZyB0aGlzIHRlc3QhJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmFuZHkgPSBjb250ZXh0LnJhbmRvbVN0cmluZztcbiAgICBjb25zdCBzdGFja05hbWVQcmVmaXggPSBgY2RrLXViZXItY2ZuLWluY2x1ZGUtJHtyYW5keX1gO1xuICAgIGNvbnN0IGludGVnVGVzdERpciA9IHBhdGguam9pbihvcy50bXBkaXIoKSwgYGNkay11YmVyLWNmbi1pbmNsdWRlLSR7cmFuZHl9YCk7XG5cbiAgICBjb250ZXh0Lm91dHB1dC53cml0ZShgIFN0YWNrIHByZWZpeDogICAke3N0YWNrTmFtZVByZWZpeH1cXG5gKTtcbiAgICBjb250ZXh0Lm91dHB1dC53cml0ZShgIFRlc3QgZGlyZWN0b3J5OiAke2ludGVnVGVzdERpcn1cXG5gKTtcblxuICAgIGNvbnN0IGF3c0NsaWVudHMgPSBhd2FpdCBBd3NDbGllbnRzLmRlZmF1bHQoY29udGV4dC5vdXRwdXQpO1xuICAgIGF3YWl0IGNsb25lRGlyZWN0b3J5KHBhdGguam9pbihSRVNPVVJDRVNfRElSLCAnY2RrLWFwcHMnLCAnY2ZuLWluY2x1ZGUtYXBwJyksIGludGVnVGVzdERpciwgY29udGV4dC5vdXRwdXQpO1xuICAgIGNvbnN0IGZpeHR1cmUgPSBuZXcgVGVzdEZpeHR1cmUoXG4gICAgICBpbnRlZ1Rlc3REaXIsXG4gICAgICBzdGFja05hbWVQcmVmaXgsXG4gICAgICBjb250ZXh0Lm91dHB1dCxcbiAgICAgIGF3c0NsaWVudHMsXG4gICAgICBjb250ZXh0LnJhbmRvbVN0cmluZyxcbiAgICApO1xuXG4gICAgbGV0IHN1Y2Nlc3MgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBpbnN0YWxsTnBtUGFja2FnZXMoZml4dHVyZSwge1xuICAgICAgICBbdWJlclBhY2thZ2VdOiBmaXh0dXJlLnBhY2thZ2VzLnJlcXVlc3RlZEZyYW1ld29ya1ZlcnNpb24oKSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBibG9jayhmaXh0dXJlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzdWNjZXNzID0gZmFsc2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuSU5URUdfTk9fQ0xFQU4pIHtcbiAgICAgICAgY29udGV4dC5sb2coYExlZnQgdGVzdCBkaXJlY3RvcnkgaW4gJyR7aW50ZWdUZXN0RGlyfScgKCRJTlRFR19OT19DTEVBTilgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGZpeHR1cmUuZGlzcG9zZShzdWNjZXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogRGVmYXVsdCB0ZXN0IGZpeHR1cmUgZm9yIG1vc3QgKGFsbD8pIGludGVnIHRlc3RzXG4gKlxuICogSXQncyBhIGNvbXBvc2l0aW9uIG9mIHdpdGhBd3Mvd2l0aENka0FwcCwgZXhwZWN0aW5nIHRoZSB0ZXN0IGJsb2NrIHRvIHRha2UgYSBgVGVzdEZpeHR1cmVgXG4gKiBvYmplY3QuXG4gKlxuICogV2UgY291bGQgaGF2ZSBwdXQgYHdpdGhBd3Mod2l0aENka0FwcChmaXh0dXJlID0+IHsgLy4uLiBhY3R1YWwgdGVzdCBoZXJlLi4uLyB9KSlgIGluIGV2ZXJ5XG4gKiB0ZXN0IGRlY2xhcmF0aW9uIGJ1dCBjZW50cmFsaXppbmcgaXQgaXMgZ29pbmcgdG8gbWFrZSBpdCBjb252ZW5pZW50IHRvIG1vZGlmeSBpbiB0aGUgZnV0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aERlZmF1bHRGaXh0dXJlKGJsb2NrOiAoY29udGV4dDogVGVzdEZpeHR1cmUpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgcmV0dXJuIHdpdGhBd3Mod2l0aFRpbWVvdXQoREVGQVVMVF9URVNUX1RJTUVPVVRfUywgd2l0aENka0FwcChibG9jaykpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhFeHRlbmRlZFRpbWVvdXRGaXh0dXJlKGJsb2NrOiAoY29udGV4dDogVGVzdEZpeHR1cmUpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgcmV0dXJuIHdpdGhBd3Mod2l0aFRpbWVvdXQoRVhURU5ERURfVEVTVF9USU1FT1VUX1MsIHdpdGhDZGtBcHAoYmxvY2spKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoQ0RLTWlncmF0ZUZpeHR1cmUobGFuZ3VhZ2U6IHN0cmluZywgYmxvY2s6IChjb250ZW50OiBUZXN0Rml4dHVyZSkgPT4gUHJvbWlzZTx2b2lkPikge1xuICByZXR1cm4gd2l0aEF3cyh3aXRoVGltZW91dChERUZBVUxUX1RFU1RfVElNRU9VVF9TLCB3aXRoQ2RrTWlncmF0ZUFwcChsYW5ndWFnZSwgYmxvY2spKSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzYWJsZUJvb3RzdHJhcENvbnRleHQge1xuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIGNyZWF0aW5nIHRoZSBkZWZhdWx0IGJvb3RzdHJhcFxuICAgKiBzdGFjayBwcmlvciB0byBydW5uaW5nIHRoZSB0ZXN0XG4gICAqXG4gICAqIFRoaXMgc2hvdWxkIGJlIHNldCB0byB0cnVlIHdoZW4gcnVubmluZyB0ZXN0cyB0aGF0XG4gICAqIGV4cGxpY2l0bHkgY3JlYXRlIGEgYm9vdHN0cmFwIHN0YWNrXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBkaXNhYmxlQm9vdHN0cmFwPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUbyBiZSB1c2VkIGluIHBsYWNlIG9mIGB3aXRoRGVmYXVsdEZpeHR1cmVgIHdoZW4gdGhlIHRlc3RcbiAqIHNob3VsZCBub3QgY3JlYXRlIHRoZSBkZWZhdWx0IGJvb3RzdHJhcCBzdGFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aG91dEJvb3RzdHJhcChibG9jazogKGNvbnRleHQ6IFRlc3RGaXh0dXJlKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gIHJldHVybiB3aXRoQXdzKHdpdGhDZGtBcHAoYmxvY2spLCB0cnVlKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDZGtDbGlPcHRpb25zIGV4dGVuZHMgU2hlbGxPcHRpb25zIHtcbiAgb3B0aW9ucz86IHN0cmluZ1tdO1xuICBuZXZlclJlcXVpcmVBcHByb3ZhbD86IGJvb2xlYW47XG4gIHZlcmJvc2U/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFByZXBhcmUgYSB0YXJnZXQgZGlyIGJ5cmVwbGljYXRpbmcgYSBzb3VyY2UgZGlyZWN0b3J5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbG9uZURpcmVjdG9yeShzb3VyY2U6IHN0cmluZywgdGFyZ2V0OiBzdHJpbmcsIG91dHB1dD86IE5vZGVKUy5Xcml0YWJsZVN0cmVhbSkge1xuICBhd2FpdCBzaGVsbChbJ3JtJywgJy1yZicsIHRhcmdldF0sIHsgb3V0cHV0IH0pO1xuICBhd2FpdCBzaGVsbChbJ21rZGlyJywgJy1wJywgdGFyZ2V0XSwgeyBvdXRwdXQgfSk7XG4gIGF3YWl0IHNoZWxsKFsnY3AnLCAnLVInLCBzb3VyY2UgKyAnLyonLCB0YXJnZXRdLCB7IG91dHB1dCB9KTtcbn1cblxuaW50ZXJmYWNlIENvbW1vbkNka0Jvb3RzdHJhcENvbW1hbmRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFBhdGggdG8gYSBjdXN0b20gYm9vdHN0cmFwIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBkZWZhdWx0IENESyBib290c3RyYXAgdGVtcGxhdGUuXG4gICAqL1xuICByZWFkb25seSBib290c3RyYXBUZW1wbGF0ZT86IHN0cmluZztcblxuICByZWFkb25seSB0b29sa2l0U3RhY2tOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB2ZXJib3NlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlZmF1bHQgLSBhdXRvLWdlbmVyYXRlZCBDbG91ZEZvcm1hdGlvbiBuYW1lXG4gICAqL1xuICByZWFkb25seSBib290c3RyYXBCdWNrZXROYW1lPzogc3RyaW5nO1xuXG4gIHJlYWRvbmx5IGNsaU9wdGlvbnM/OiBDZGtDbGlPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrTGVnYWN5Qm9vdHN0cmFwQ29tbWFuZE9wdGlvbnMgZXh0ZW5kcyBDb21tb25DZGtCb290c3RyYXBDb21tYW5kT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbm9FeGVjdXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljQWNjZXNzQmxvY2tDb25maWd1cmF0aW9uPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDZGtNb2Rlcm5Cb290c3RyYXBDb21tYW5kT3B0aW9ucyBleHRlbmRzIENvbW1vbkNka0Jvb3RzdHJhcENvbW1hbmRPcHRpb25zIHtcbiAgLyoqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBmb3JjZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IC0gbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgY2ZuRXhlY3V0aW9uUG9saWN5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2hvd1RlbXBsYXRlPzogYm9vbGVhbjtcblxuICByZWFkb25seSB0ZW1wbGF0ZT86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHRlcm1pbmF0aW9uUHJvdGVjdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgZXhhbXBsZVBlcm1pc3Npb25zQm91bmRhcnk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbVBlcm1pc3Npb25zQm91bmRhcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgdXNlUHJldmlvdXNQYXJhbWV0ZXJzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIFRlc3RGaXh0dXJlIGV4dGVuZHMgU2hlbGxIZWxwZXIge1xuICBwdWJsaWMgcmVhZG9ubHkgcXVhbGlmaWVyID0gdGhpcy5yYW5kb21TdHJpbmcuc2xpY2UoMCwgMTApO1xuICBwcml2YXRlIHJlYWRvbmx5IGJ1Y2tldHNUb0RlbGV0ZSA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIHB1YmxpYyByZWFkb25seSBwYWNrYWdlczogSVBhY2thZ2VTb3VyY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGludGVnVGVzdERpcjogc3RyaW5nLFxuICAgIHB1YmxpYyByZWFkb25seSBzdGFja05hbWVQcmVmaXg6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgb3V0cHV0OiBOb2RlSlMuV3JpdGFibGVTdHJlYW0sXG4gICAgcHVibGljIHJlYWRvbmx5IGF3czogQXdzQ2xpZW50cyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgcmFuZG9tU3RyaW5nOiBzdHJpbmcpIHtcblxuICAgIHN1cGVyKGludGVnVGVzdERpciwgb3V0cHV0KTtcblxuICAgIHRoaXMucGFja2FnZXMgPSBwYWNrYWdlU291cmNlSW5TdWJwcm9jZXNzKCk7XG4gIH1cblxuICBwdWJsaWMgbG9nKHM6IHN0cmluZykge1xuICAgIHRoaXMub3V0cHV0LndyaXRlKGAke3N9XFxuYCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2RrRGVwbG95KHN0YWNrTmFtZXM6IHN0cmluZyB8IHN0cmluZ1tdLCBvcHRpb25zOiBDZGtDbGlPcHRpb25zID0ge30sIHNraXBTdGFja1JlbmFtZT86IGJvb2xlYW4pIHtcbiAgICBzdGFja05hbWVzID0gdHlwZW9mIHN0YWNrTmFtZXMgPT09ICdzdHJpbmcnID8gW3N0YWNrTmFtZXNdIDogc3RhY2tOYW1lcztcblxuICAgIGNvbnN0IG5ldmVyUmVxdWlyZUFwcHJvdmFsID0gb3B0aW9ucy5uZXZlclJlcXVpcmVBcHByb3ZhbCA/PyB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMuY2RrKFsnZGVwbG95JyxcbiAgICAgIC4uLihuZXZlclJlcXVpcmVBcHByb3ZhbCA/IFsnLS1yZXF1aXJlLWFwcHJvdmFsPW5ldmVyJ10gOiBbXSksIC8vIERlZmF1bHQgdG8gbm8gYXBwcm92YWwgaW4gYW4gdW5hdHRlbmRlZCB0ZXN0XG4gICAgICAuLi4ob3B0aW9ucy5vcHRpb25zID8/IFtdKSxcbiAgICAgIC8vIHVzZSBldmVudHMgYmVjYXVzZSBiYXIgcmVuZGVycyBiYWQgaW4gdGVzdHNcbiAgICAgICctLXByb2dyZXNzJywgJ2V2ZW50cycsXG4gICAgICAuLi4oc2tpcFN0YWNrUmVuYW1lID8gc3RhY2tOYW1lcyA6IHRoaXMuZnVsbFN0YWNrTmFtZShzdGFja05hbWVzKSldLCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjZGtTeW50aChvcHRpb25zOiBDZGtDbGlPcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5jZGsoW1xuICAgICAgJ3N5bnRoJyxcbiAgICAgIC4uLihvcHRpb25zLm9wdGlvbnMgPz8gW10pLFxuICAgIF0sIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNka0Rlc3Ryb3koc3RhY2tOYW1lczogc3RyaW5nIHwgc3RyaW5nW10sIG9wdGlvbnM6IENka0NsaU9wdGlvbnMgPSB7fSkge1xuICAgIHN0YWNrTmFtZXMgPSB0eXBlb2Ygc3RhY2tOYW1lcyA9PT0gJ3N0cmluZycgPyBbc3RhY2tOYW1lc10gOiBzdGFja05hbWVzO1xuXG4gICAgcmV0dXJuIHRoaXMuY2RrKFsnZGVzdHJveScsXG4gICAgICAnLWYnLCAvLyBXZSBuZXZlciB3YW50IGEgcHJvbXB0IGluIGFuIHVuYXR0ZW5kZWQgdGVzdFxuICAgICAgLi4uKG9wdGlvbnMub3B0aW9ucyA/PyBbXSksXG4gICAgICAuLi50aGlzLmZ1bGxTdGFja05hbWUoc3RhY2tOYW1lcyldLCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjZGtCb290c3RyYXBMZWdhY3kob3B0aW9uczogQ2RrTGVnYWN5Qm9vdHN0cmFwQ29tbWFuZE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ2Jvb3RzdHJhcCddO1xuXG4gICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgYXJncy5wdXNoKCctdicpO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJy0tdG9vbGtpdC1zdGFjay1uYW1lJywgb3B0aW9ucy50b29sa2l0U3RhY2tOYW1lKTtcbiAgICBpZiAob3B0aW9ucy5ib290c3RyYXBCdWNrZXROYW1lKSB7XG4gICAgICBhcmdzLnB1c2goJy0tYm9vdHN0cmFwLWJ1Y2tldC1uYW1lJywgb3B0aW9ucy5ib290c3RyYXBCdWNrZXROYW1lKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMubm9FeGVjdXRlKSB7XG4gICAgICBhcmdzLnB1c2goJy0tbm8tZXhlY3V0ZScpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5wdWJsaWNBY2Nlc3NCbG9ja0NvbmZpZ3VyYXRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXJncy5wdXNoKCctLXB1YmxpYy1hY2Nlc3MtYmxvY2stY29uZmlndXJhdGlvbicsIG9wdGlvbnMucHVibGljQWNjZXNzQmxvY2tDb25maWd1cmF0aW9uLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50YWdzKSB7XG4gICAgICBhcmdzLnB1c2goJy0tdGFncycsIG9wdGlvbnMudGFncyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2RrKGFyZ3MsIHtcbiAgICAgIC4uLm9wdGlvbnMuY2xpT3B0aW9ucyxcbiAgICAgIG1vZEVudjoge1xuICAgICAgICAuLi5vcHRpb25zLmNsaU9wdGlvbnM/Lm1vZEVudixcbiAgICAgICAgLy8gc28gdGhhdCB0aGlzIHdvcmtzIGZvciBWMixcbiAgICAgICAgLy8gd2hlcmUgdGhlIFwibmV3XCIgYm9vdHN0cmFwIGlzIHRoZSBkZWZhdWx0XG4gICAgICAgIENES19MRUdBQ1lfQk9PVFNUUkFQOiAnMScsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNka0Jvb3RzdHJhcE1vZGVybihvcHRpb25zOiBDZGtNb2Rlcm5Cb290c3RyYXBDb21tYW5kT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgYXJncyA9IFsnYm9vdHN0cmFwJ107XG5cbiAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICBhcmdzLnB1c2goJy12Jyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnNob3dUZW1wbGF0ZSkge1xuICAgICAgYXJncy5wdXNoKCctLXNob3ctdGVtcGxhdGUnKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudGVtcGxhdGUpIHtcbiAgICAgIGFyZ3MucHVzaCgnLS10ZW1wbGF0ZScsIG9wdGlvbnMudGVtcGxhdGUpO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJy0tdG9vbGtpdC1zdGFjay1uYW1lJywgb3B0aW9ucy50b29sa2l0U3RhY2tOYW1lKTtcbiAgICBpZiAob3B0aW9ucy5ib290c3RyYXBCdWNrZXROYW1lKSB7XG4gICAgICBhcmdzLnB1c2goJy0tYm9vdHN0cmFwLWJ1Y2tldC1uYW1lJywgb3B0aW9ucy5ib290c3RyYXBCdWNrZXROYW1lKTtcbiAgICB9XG4gICAgYXJncy5wdXNoKCctLXF1YWxpZmllcicsIHRoaXMucXVhbGlmaWVyKTtcbiAgICBpZiAob3B0aW9ucy5jZm5FeGVjdXRpb25Qb2xpY3kpIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1jbG91ZGZvcm1hdGlvbi1leGVjdXRpb24tcG9saWNpZXMnLCBvcHRpb25zLmNmbkV4ZWN1dGlvblBvbGljeSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRlcm1pbmF0aW9uUHJvdGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhcmdzLnB1c2goJy0tdGVybWluYXRpb24tcHJvdGVjdGlvbicsIG9wdGlvbnMudGVybWluYXRpb25Qcm90ZWN0aW9uLnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5mb3JjZSkge1xuICAgICAgYXJncy5wdXNoKCctLWZvcmNlJyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRhZ3MpIHtcbiAgICAgIGFyZ3MucHVzaCgnLS10YWdzJywgb3B0aW9ucy50YWdzKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuY3VzdG9tUGVybWlzc2lvbnNCb3VuZGFyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhcmdzLnB1c2goJy0tY3VzdG9tLXBlcm1pc3Npb25zLWJvdW5kYXJ5Jywgb3B0aW9ucy5jdXN0b21QZXJtaXNzaW9uc0JvdW5kYXJ5KTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZXhhbXBsZVBlcm1pc3Npb25zQm91bmRhcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXJncy5wdXNoKCctLWV4YW1wbGUtcGVybWlzc2lvbnMtYm91bmRhcnknKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudXNlUHJldmlvdXNQYXJhbWV0ZXJzID09PSBmYWxzZSkge1xuICAgICAgYXJncy5wdXNoKCctLW5vLXByZXZpb3VzLXBhcmFtZXRlcnMnKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuYm9vdHN0cmFwVGVtcGxhdGUpIHtcbiAgICAgIGFyZ3MucHVzaCgnLS10ZW1wbGF0ZScsIG9wdGlvbnMuYm9vdHN0cmFwVGVtcGxhdGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNkayhhcmdzLCB7XG4gICAgICAuLi5vcHRpb25zLmNsaU9wdGlvbnMsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgLi4ub3B0aW9ucy5jbGlPcHRpb25zPy5tb2RFbnYsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhpcyB3b3JrcyBmb3IgVjEsXG4gICAgICAgIC8vIHdoZXJlIHRoZSBcIm9sZFwiIGJvb3RzdHJhcCBpcyB0aGUgZGVmYXVsdFxuICAgICAgICBDREtfTkVXX0JPT1RTVFJBUDogJzEnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjZGtNaWdyYXRlKGxhbmd1YWdlOiBzdHJpbmcsIHN0YWNrTmFtZTogc3RyaW5nLCBpbnB1dFBhdGg/OiBzdHJpbmcsIG9wdGlvbnM/OiBDZGtDbGlPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuY2RrKFtcbiAgICAgICdtaWdyYXRlJyxcbiAgICAgICctLWxhbmd1YWdlJyxcbiAgICAgIGxhbmd1YWdlLFxuICAgICAgJy0tc3RhY2stbmFtZScsXG4gICAgICBzdGFja05hbWUsXG4gICAgICAnLS1mcm9tLXBhdGgnLFxuICAgICAgaW5wdXRQYXRoID8/IHBhdGguam9pbihfX2Rpcm5hbWUsICcuLicsICdyZXNvdXJjZXMnLCAndGVtcGxhdGVzJywgJ3Nxcy10ZW1wbGF0ZS5qc29uJykudG9TdHJpbmcoKSxcbiAgICAgIC4uLihvcHRpb25zPy5vcHRpb25zID8/IFtdKSxcbiAgICBdLCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjZGsoYXJnczogc3RyaW5nW10sIG9wdGlvbnM6IENka0NsaU9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHZlcmJvc2UgPSBvcHRpb25zLnZlcmJvc2UgPz8gdHJ1ZTtcblxuICAgIGF3YWl0IHRoaXMucGFja2FnZXMubWFrZUNsaUF2YWlsYWJsZSgpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2hlbGwoWydjZGsnLCAuLi4odmVyYm9zZSA/IFsnLXYnXSA6IFtdKSwgLi4uYXJnc10sIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgQVdTX1JFR0lPTjogdGhpcy5hd3MucmVnaW9uLFxuICAgICAgICBBV1NfREVGQVVMVF9SRUdJT046IHRoaXMuYXdzLnJlZ2lvbixcbiAgICAgICAgU1RBQ0tfTkFNRV9QUkVGSVg6IHRoaXMuc3RhY2tOYW1lUHJlZml4LFxuICAgICAgICBQQUNLQUdFX0xBWU9VVF9WRVJTSU9OOiB0aGlzLnBhY2thZ2VzLm1ham9yVmVyc2lvbigpLFxuICAgICAgICAuLi5vcHRpb25zLm1vZEVudixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgdGVtcGxhdGUoc3RhY2tOYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IGZ1bGxTdGFja05hbWUgPSB0aGlzLmZ1bGxTdGFja05hbWUoc3RhY2tOYW1lKTtcbiAgICBjb25zdCB0ZW1wbGF0ZVBhdGggPSBwYXRoLmpvaW4odGhpcy5pbnRlZ1Rlc3REaXIsICdjZGsub3V0JywgYCR7ZnVsbFN0YWNrTmFtZX0udGVtcGxhdGUuanNvbmApO1xuICAgIHJldHVybiBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyh0ZW1wbGF0ZVBhdGgsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSkudG9TdHJpbmcoKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGJvb3RzdHJhcFN0YWNrTmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5mdWxsU3RhY2tOYW1lKCdib290c3RyYXAtc3RhY2snKTtcbiAgfVxuXG4gIHB1YmxpYyBmdWxsU3RhY2tOYW1lKHN0YWNrTmFtZTogc3RyaW5nKTogc3RyaW5nO1xuICBwdWJsaWMgZnVsbFN0YWNrTmFtZShzdGFja05hbWVzOiBzdHJpbmdbXSk6IHN0cmluZ1tdO1xuICBwdWJsaWMgZnVsbFN0YWNrTmFtZShzdGFja05hbWVzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZyB8IHN0cmluZ1tdIHtcbiAgICBpZiAodHlwZW9mIHN0YWNrTmFtZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5zdGFja05hbWVQcmVmaXh9LSR7c3RhY2tOYW1lc31gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3RhY2tOYW1lcy5tYXAocyA9PiBgJHt0aGlzLnN0YWNrTmFtZVByZWZpeH0tJHtzfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBlbmQgdGhpcyB0byB0aGUgbGlzdCBvZiBidWNrZXRzIHRvIHBvdGVudGlhbGx5IGRlbGV0ZVxuICAgKlxuICAgKiBBdCB0aGUgZW5kIG9mIGEgdGVzdCwgd2UgY2xlYW4gdXAgYnVja2V0cyB0aGF0IG1heSBub3QgaGF2ZSBnb3R0ZW4gZGVzdHJveWVkXG4gICAqIChmb3Igd2hhdGV2ZXIgcmVhc29uKS5cbiAgICovXG4gIHB1YmxpYyByZW1lbWJlclRvRGVsZXRlQnVja2V0KGJ1Y2tldE5hbWU6IHN0cmluZykge1xuICAgIHRoaXMuYnVja2V0c1RvRGVsZXRlLnB1c2goYnVja2V0TmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYW51cCBsZWZ0b3ZlciBzdGFja3MgYW5kIGJ1Y2tldHNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBkaXNwb3NlKHN1Y2Nlc3M6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBzdGFja3NUb0RlbGV0ZSA9IGF3YWl0IHRoaXMuZGVsZXRlYWJsZVN0YWNrcyh0aGlzLnN0YWNrTmFtZVByZWZpeCk7XG5cbiAgICB0aGlzLnNvcnRCb290c3RyYXBTdGFja3NUb1RoZUVuZChzdGFja3NUb0RlbGV0ZSk7XG5cbiAgICAvLyBCb290c3RyYXAgc3RhY2tzIGhhdmUgYnVja2V0cyB0aGF0IG5lZWQgdG8gYmUgY2xlYW5lZFxuICAgIGNvbnN0IGJ1Y2tldE5hbWVzID0gc3RhY2tzVG9EZWxldGUubWFwKHN0YWNrID0+IG91dHB1dEZyb21TdGFjaygnQnVja2V0TmFtZScsIHN0YWNrKSkuZmlsdGVyKGRlZmluZWQpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKGJ1Y2tldE5hbWVzLm1hcChiID0+IHRoaXMuYXdzLmVtcHR5QnVja2V0KGIpKSk7XG4gICAgLy8gVGhlIGJvb3RzdHJhcCBidWNrZXQgaGFzIGEgcmVtb3ZhbCBwb2xpY3kgb2YgUkVUQUlOIGJ5IGRlZmF1bHQsIHNvIGFkZCBpdCB0byB0aGUgYnVja2V0cyB0byBiZSBjbGVhbmVkIHVwLlxuICAgIHRoaXMuYnVja2V0c1RvRGVsZXRlLnB1c2goLi4uYnVja2V0TmFtZXMpO1xuXG4gICAgLy8gQm9vdHN0cmFwIHN0YWNrcyBoYXZlIEVDUiByZXBvc2l0b3JpZXMgd2l0aCBpbWFnZXMgd2hpY2ggc2hvdWxkIGJlIGRlbGV0ZWRcbiAgICBjb25zdCBpbWFnZVJlcG9zaXRvcnlOYW1lcyA9IHN0YWNrc1RvRGVsZXRlLm1hcChzdGFjayA9PiBvdXRwdXRGcm9tU3RhY2soJ0ltYWdlUmVwb3NpdG9yeU5hbWUnLCBzdGFjaykpLmZpbHRlcihkZWZpbmVkKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChpbWFnZVJlcG9zaXRvcnlOYW1lcy5tYXAociA9PiB0aGlzLmF3cy5kZWxldGVJbWFnZVJlcG9zaXRvcnkocikpKTtcblxuICAgIGF3YWl0IHRoaXMuYXdzLmRlbGV0ZVN0YWNrcyhcbiAgICAgIC4uLnN0YWNrc1RvRGVsZXRlLm1hcCgocykgPT4ge1xuICAgICAgICBpZiAoIXMuU3RhY2tOYW1lKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdGFjayBuYW1lIGlzIHJlcXVpcmVkIHRvIGRlbGV0ZSBhIHN0YWNrLicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzLlN0YWNrTmFtZTtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICAvLyBXZSBtaWdodCBoYXZlIGxlYWtlZCBzb21lIGJ1Y2tldHMgYnkgdXBncmFkaW5nIHRoZSBib290c3RyYXAgc3RhY2suIEJlXG4gICAgLy8gc3VyZSB0byBjbGVhbiBldmVyeXRoaW5nLlxuICAgIGZvciAoY29uc3QgYnVja2V0IG9mIHRoaXMuYnVja2V0c1RvRGVsZXRlKSB7XG4gICAgICBhd2FpdCB0aGlzLmF3cy5kZWxldGVCdWNrZXQoYnVja2V0KTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgdGVzdHMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgaGFwcGlseSBkZWxldGUgdGhlIGZpeHR1cmVcbiAgICAvLyAob3RoZXJ3aXNlIGxlYXZlIGl0IGZvciBodW1hbnMgdG8gaW5zcGVjdClcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgcmltcmFmKHRoaXMuaW50ZWdUZXN0RGlyKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBzdGFja3Mgc3RhcnRpbmcgd2l0aCBvdXIgdGVzdGluZyBwcmVmaXggdGhhdCBzaG91bGQgYmUgZGVsZXRlZFxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBkZWxldGVhYmxlU3RhY2tzKHByZWZpeDogc3RyaW5nKTogUHJvbWlzZTxTdGFja1tdPiB7XG4gICAgY29uc3Qgc3RhdHVzRmlsdGVyID0gW1xuICAgICAgJ0NSRUFURV9JTl9QUk9HUkVTUycsICdDUkVBVEVfRkFJTEVEJywgJ0NSRUFURV9DT01QTEVURScsXG4gICAgICAnUk9MTEJBQ0tfSU5fUFJPR1JFU1MnLCAnUk9MTEJBQ0tfRkFJTEVEJywgJ1JPTExCQUNLX0NPTVBMRVRFJyxcbiAgICAgICdERUxFVEVfRkFJTEVEJyxcbiAgICAgICdVUERBVEVfSU5fUFJPR1JFU1MnLCAnVVBEQVRFX0NPTVBMRVRFX0NMRUFOVVBfSU5fUFJPR1JFU1MnLFxuICAgICAgJ1VQREFURV9DT01QTEVURScsICdVUERBVEVfUk9MTEJBQ0tfSU5fUFJPR1JFU1MnLFxuICAgICAgJ1VQREFURV9ST0xMQkFDS19GQUlMRUQnLFxuICAgICAgJ1VQREFURV9ST0xMQkFDS19DT01QTEVURV9DTEVBTlVQX0lOX1BST0dSRVNTJyxcbiAgICAgICdVUERBVEVfUk9MTEJBQ0tfQ09NUExFVEUnLCAnUkVWSUVXX0lOX1BST0dSRVNTJyxcbiAgICAgICdJTVBPUlRfSU5fUFJPR1JFU1MnLCAnSU1QT1JUX0NPTVBMRVRFJyxcbiAgICAgICdJTVBPUlRfUk9MTEJBQ0tfSU5fUFJPR1JFU1MnLCAnSU1QT1JUX1JPTExCQUNLX0ZBSUxFRCcsXG4gICAgICAnSU1QT1JUX1JPTExCQUNLX0NPTVBMRVRFJyxcbiAgICBdO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmF3cy5jbG91ZEZvcm1hdGlvbi5zZW5kKG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe30pKTtcblxuICAgIHJldHVybiAocmVzcG9uc2UuU3RhY2tzID8/IFtdKVxuICAgICAgLmZpbHRlcigocykgPT4gcy5TdGFja05hbWUgJiYgcy5TdGFja05hbWUuc3RhcnRzV2l0aChwcmVmaXgpKVxuICAgICAgLmZpbHRlcigocykgPT4gcy5TdGFja1N0YXR1cyAmJiBzdGF0dXNGaWx0ZXIuaW5jbHVkZXMocy5TdGFja1N0YXR1cykpXG4gICAgICAuZmlsdGVyKChzKSA9PiBzLlJvb3RJZCA9PT0gdW5kZWZpbmVkKTsgLy8gT25seSBkZWxldGUgcGFyZW50IHN0YWNrcy4gTmVzdGVkIHN0YWNrcyBhcmUgZGVsZXRlZCBpbiB0aGUgcHJvY2Vzc1xuICB9XG5cbiAgcHJpdmF0ZSBzb3J0Qm9vdHN0cmFwU3RhY2tzVG9UaGVFbmQoc3RhY2tzOiBTdGFja1tdKSB7XG4gICAgc3RhY2tzLnNvcnQoKGEsIGIpID0+IHtcblxuICAgICAgaWYgKCFhLlN0YWNrTmFtZSB8fCAhYi5TdGFja05hbWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdGFjayBuYW1lcyBkbyBub3QgZXhpc3RzLiBUaGVzZSBhcmUgcmVxdWlyZWQgZm9yIHNvcnRpbmcgdGhlIGJvb3RzdHJhcCBzdGFja3MuJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFCcyA9IGEuU3RhY2tOYW1lLnN0YXJ0c1dpdGgodGhpcy5ib290c3RyYXBTdGFja05hbWUpO1xuICAgICAgY29uc3QgYkJzID0gYi5TdGFja05hbWUuc3RhcnRzV2l0aCh0aGlzLmJvb3RzdHJhcFN0YWNrTmFtZSk7XG5cbiAgICAgIHJldHVybiBhQnMgIT0gYkJzXG4gICAgICAgIC8vICcrJyBjb252ZXJ0cyBhIGJvb2xlYW4gdG8gMCBvciAxXG4gICAgICAgID8gKCthQnMpIC0gKCtiQnMpXG4gICAgICAgIDogYS5TdGFja05hbWUubG9jYWxlQ29tcGFyZShiLlN0YWNrTmFtZSk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBNYWtlIHN1cmUgdGhhdCB0aGUgZ2l2ZW4gZW52aXJvbm1lbnQgaXMgYm9vdHN0cmFwcGVkXG4gKlxuICogU2luY2Ugd2UgZ28gc3RyaXBpbmcgYWNyb3NzIHJlZ2lvbnMsIGl0J3MgZ29pbmcgdG8gc3VjayBkb2luZyB0aGlzXG4gKiBieSBoYW5kIHNvIGxldCdzIGp1c3QgbWFzcy1hdXRvbWF0ZSBpdC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZW5zdXJlQm9vdHN0cmFwcGVkKGZpeHR1cmU6IFRlc3RGaXh0dXJlKSB7XG4gIC8vIEFsd2F5cyB1c2UgdGhlIG1vZGVybiBib290c3RyYXAgc3RhY2ssIG90aGVyd2lzZSB3ZSBtYXkgZ2V0IHRoZSBlcnJvclxuICAvLyBcInJlZnVzaW5nIHRvIGRvd25ncmFkZSBmcm9tIHZlcnNpb24gNyB0byB2ZXJzaW9uIDBcIiB3aGVuIGJvb3RzdHJhcHBpbmcgd2l0aCBkZWZhdWx0XG4gIC8vIHNldHRpbmdzIHVzaW5nIGEgdjEgQ0xJLlxuICAvL1xuICAvLyBJdCBkb2Vzbid0IG1hdHRlciBmb3IgdGVzdHM6IHdoZW4gdGhleSB3YW50IHRvIHRlc3Qgc29tZXRoaW5nIGFib3V0IGFuIGFjdHVhbCBsZWdhY3lcbiAgLy8gYm9vdHN0cmFwIHN0YWNrLCB0aGV5J2xsIGNyZWF0ZSBhIGJvb3RzdHJhcCBzdGFjayB3aXRoIGEgbm9uLWRlZmF1bHQgbmFtZSB0byB0ZXN0IHRoYXQgZXhhY3QgcHJvcGVydHkuXG4gIGNvbnN0IGVudlNwZWNpZmllciA9IGBhd3M6Ly8ke2F3YWl0IGZpeHR1cmUuYXdzLmFjY291bnQoKX0vJHtmaXh0dXJlLmF3cy5yZWdpb259YDtcbiAgaWYgKEFMUkVBRFlfQk9PVFNUUkFQUEVEX0lOX1RISVNfUlVOLmhhcyhlbnZTcGVjaWZpZXIpKSB7IHJldHVybjsgfVxuXG4gIGF3YWl0IGZpeHR1cmUuY2RrKFsnYm9vdHN0cmFwJywgZW52U3BlY2lmaWVyXSwge1xuICAgIG1vZEVudjoge1xuICAgICAgLy8gRXZlbiBmb3IgdjEsIHVzZSBuZXcgYm9vdHN0cmFwXG4gICAgICBDREtfTkVXX0JPT1RTVFJBUDogJzEnLFxuICAgIH0sXG4gIH0pO1xuICBBTFJFQURZX0JPT1RTVFJBUFBFRF9JTl9USElTX1JVTi5hZGQoZW52U3BlY2lmaWVyKTtcbn1cblxuZnVuY3Rpb24gZGVmaW5lZDxBPih4OiBBKTogeCBpcyBOb25OdWxsYWJsZTxBPiB7XG4gIHJldHVybiB4ICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogSW5zdGFsbCB0aGUgZ2l2ZW4gTlBNIHBhY2thZ2VzLCBpZGVudGlmaWVkIGJ5IHRoZWlyIG5hbWVzIGFuZCB2ZXJzaW9uc1xuICpcbiAqIFdvcmtzIGJ5IHdyaXRpbmcgdGhlIHBhY2thZ2VzIHRvIGEgYHBhY2thZ2UuanNvbmAgZmlsZSwgYW5kXG4gKiB0aGVuIHJ1bm5pbmcgTlBNNydzIFwiaW5zdGFsbFwiIG9uIGl0LiBUaGUgdXNlIG9mIE5QTTcgd2lsbCBhdXRvbWF0aWNhbGx5XG4gKiBpbnN0YWxsIHJlcXVpcmVkIHBlZXJEZXBlbmRlbmNpZXMuXG4gKlxuICogSWYgd2UncmUgcnVubmluZyBpbiBSRVBPIG1vZGUgYW5kIHdlIGZpbmQgdGhlIHBhY2thZ2UgaW4gdGhlIHNldCBvZiBsb2NhbFxuICogcGFja2FnZXMgaW4gdGhlIHJlcG9zaXRvcnksIHdlJ2xsIHdyaXRlIHRoZSBkaXJlY3RvcnkgbmFtZSB0byBgcGFja2FnZS5qc29uYFxuICogc28gdGhhdCBOUE0gd2lsbCBjcmVhdGUgYSBzeW1saW5rICh0aGlzIGFsbG93cyBydW5uaW5nIHRlc3RzIGFnYWluc3RcbiAqIGJ1aWx0LWJ1dC11bnBhY2thZ2VkIG1vZHVsZXMsIGFuZCBzYXZlcyBkZXYgY3ljbGUgdGltZSkuXG4gKlxuICogQmUgYXdhcmUgeW91IE1VU1QgaW5zdGFsbCBhbGwgdGhlIHBhY2thZ2VzIHlvdSBkaXJlY3RseSBkZXBlbmQgdXBvbiEgSW4gdGhlIGNhc2VcbiAqIG9mIGEgcmVwby9zeW1saW5raW5nIGluc3RhbGwsIHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzIFdJTEwgTk9UIGJlIGluc3RhbGxlZCBpbiB0aGVcbiAqIGN1cnJlbnQgZGlyZWN0b3J5J3MgYG5vZGVfbW9kdWxlc2AgZGlyZWN0b3J5LCBiZWNhdXNlIHRoZXkgd2lsbCBhbHJlYWR5IGhhdmUgYmVlblxuICogc3ltbGlua2VkIGZyb20gdGhlIFRBUkdFVCBkaXJlY3RvcnkncyBgbm9kZV9tb2R1bGVzYCBkaXJlY3RvcnkgKHdoaWNoIGlzIHN1ZmZpY2llbnRcbiAqIGZvciBOb2RlJ3MgZGVwZW5kZW5jeSBsb29rdXAgbWVjaGFuaXNtKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxOcG1QYWNrYWdlcyhmaXh0dXJlOiBUZXN0Rml4dHVyZSwgcGFja2FnZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcbiAgaWYgKHByb2Nlc3MuZW52LlJFUE9fUk9PVCkge1xuICAgIGNvbnN0IG1vbm9SZXBvID0gYXdhaXQgZmluZFlhcm5QYWNrYWdlcyhwcm9jZXNzLmVudi5SRVBPX1JPT1QpO1xuXG4gICAgLy8gUmVwbGFjZSB0aGUgaW5zdGFsbCB0YXJnZXQgd2l0aCB0aGUgcGh5c2ljYWwgbG9jYXRpb24gb2YgdGhpcyBwYWNrYWdlXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGFja2FnZXMpKSB7XG4gICAgICBpZiAoa2V5IGluIG1vbm9SZXBvKSB7XG4gICAgICAgIHBhY2thZ2VzW2tleV0gPSBtb25vUmVwb1trZXldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZzLndyaXRlRmlsZVN5bmMocGF0aC5qb2luKGZpeHR1cmUuaW50ZWdUZXN0RGlyLCAncGFja2FnZS5qc29uJyksIEpTT04uc3RyaW5naWZ5KHtcbiAgICBuYW1lOiAnY2RrLWludGVnLXRlc3RzJyxcbiAgICBwcml2YXRlOiB0cnVlLFxuICAgIHZlcnNpb246ICcwLjAuMScsXG4gICAgZGV2RGVwZW5kZW5jaWVzOiBwYWNrYWdlcyxcbiAgfSwgdW5kZWZpbmVkLCAyKSwgeyBlbmNvZGluZzogJ3V0Zi04JyB9KTtcblxuICAvLyBOb3cgaW5zdGFsbCB0aGF0IGBwYWNrYWdlLmpzb25gIHVzaW5nIE5QTTdcbiAgYXdhaXQgZml4dHVyZS5zaGVsbChbJ25vZGUnLCByZXF1aXJlLnJlc29sdmUoJ25wbScpLCAnaW5zdGFsbCddKTtcbn1cblxuY29uc3QgQUxSRUFEWV9CT09UU1RSQVBQRURfSU5fVEhJU19SVU4gPSBuZXcgU2V0KCk7XG4iXX0=
|
|
503
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1jZGstYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsid2l0aC1jZGstYXBwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUMvQix5QkFBeUI7QUFDekIseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QiwwRUFBOEU7QUFDOUUsK0JBQW9EO0FBRXBELCtEQUFpRTtBQUVqRSw2REFBeUU7QUFDekUsMkNBQTRDO0FBQzVDLG1DQUFtRTtBQUNuRSx5Q0FBaUQ7QUFDakQsaURBQTZDO0FBRWhDLFFBQUEsc0JBQXNCLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNqQyxRQUFBLHVCQUF1QixHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFFL0M7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLGtCQUFrQixDQUNoQyxPQUFlLEVBQ2YsS0FBOEM7SUFFOUMsT0FBTyxLQUFLLEVBQUUsT0FBMkQsRUFBRSxFQUFFO1FBQzNFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDbkMsTUFBTSxlQUFlLEdBQUcsV0FBVyxLQUFLLEVBQUUsQ0FBQztRQUMzQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxhQUFhLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFbEUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLGVBQWUsSUFBSSxDQUFDLENBQUM7UUFDOUQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLFlBQVksSUFBSSxDQUFDLENBQUM7UUFDM0QsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUVqRSxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUFhLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxF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SUFFRCxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQy9FLElBQUksRUFBRSxpQkFBaUI7UUFDdkIsT0FBTyxFQUFFLElBQUk7UUFDYixPQUFPLEVBQUUsT0FBTztRQUNoQixlQUFlLEVBQUUsUUFBUTtLQUMxQixFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBRXpDLDZDQUE2QztJQUM3QyxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ25FLENBQUM7QUFyQkQsZ0RBcUJDO0FBRUQsTUFBTSxnQ0FBZ0MsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IERlc2NyaWJlU3RhY2tzQ29tbWFuZCwgU3RhY2sgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtY2xvdWRmb3JtYXRpb24nO1xuaW1wb3J0IHsgb3V0cHV0RnJvbVN0YWNrLCBBd3NDbGllbnRzIH0gZnJvbSAnLi9hd3MnO1xuaW1wb3J0IHsgVGVzdENvbnRleHQgfSBmcm9tICcuL2ludGVnLXRlc3QnO1xuaW1wb3J0IHsgZmluZFlhcm5QYWNrYWdlcyB9IGZyb20gJy4vcGFja2FnZS1zb3VyY2VzL3JlcG8tc291cmNlJztcbmltcG9ydCB7IElQYWNrYWdlU291cmNlIH0gZnJvbSAnLi9wYWNrYWdlLXNvdXJjZXMvc291cmNlJztcbmltcG9ydCB7IHBhY2thZ2VTb3VyY2VJblN1YnByb2Nlc3MgfSBmcm9tICcuL3BhY2thZ2Utc291cmNlcy9zdWJwcm9jZXNzJztcbmltcG9ydCB7IFJFU09VUkNFU19ESVIgfSBmcm9tICcuL3Jlc291cmNlcyc7XG5pbXBvcnQgeyBzaGVsbCwgU2hlbGxPcHRpb25zLCBTaGVsbEhlbHBlciwgcmltcmFmIH0gZnJvbSAnLi9zaGVsbCc7XG5pbXBvcnQgeyBBd3NDb250ZXh0LCB3aXRoQXdzIH0gZnJvbSAnLi93aXRoLWF3cyc7XG5pbXBvcnQgeyB3aXRoVGltZW91dCB9IGZyb20gJy4vd2l0aC10aW1lb3V0JztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVEVTVF9USU1FT1VUX1MgPSAyMCAqIDYwO1xuZXhwb3J0IGNvbnN0IEVYVEVOREVEX1RFU1RfVElNRU9VVF9TID0gMzAgKiA2MDtcblxuLyoqXG4gKiBIaWdoZXIgb3JkZXIgZnVuY3Rpb24gdG8gZXhlY3V0ZSBhIGJsb2NrIHdpdGggYSBDREsgYXBwIGZpeHR1cmVcbiAqXG4gKiBSZXF1aXJlcyBhbiBBV1MgY2xpZW50IHRvIGJlIHBhc3NlZCBpbi5cbiAqXG4gKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyB0ZXN0cyAoc28gd2UgZG9uJ3QgaGF2ZSB0byBjaGFuZ2VcbiAqIHRvbyBtdWNoKSB0aGUgaW5uZXIgYmxvY2sgaXMgZXhwZWN0ZWQgdG8gdGFrZSBhIGBUZXN0Rml4dHVyZWAgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFNwZWNpZmljQ2RrQXBwKFxuICBhcHBOYW1lOiBzdHJpbmcsXG4gIGJsb2NrOiAoY29udGV4dDogVGVzdEZpeHR1cmUpID0+IFByb21pc2U8dm9pZD4sXG4pOiAoY29udGV4dDogVGVzdENvbnRleHQgJiBBd3NDb250ZXh0ICYgRGlzYWJsZUJvb3RzdHJhcENvbnRleHQpID0+IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gYXN5bmMgKGNvbnRleHQ6IFRlc3RDb250ZXh0ICYgQXdzQ29udGV4dCAmIERpc2FibGVCb290c3RyYXBDb250ZXh0KSA9PiB7XG4gICAgY29uc3QgcmFuZHkgPSBjb250ZXh0LnJhbmRvbVN0cmluZztcbiAgICBjb25zdCBzdGFja05hbWVQcmVmaXggPSBgY2RrdGVzdC0ke3JhbmR5fWA7XG4gICAgY29uc3QgaW50ZWdUZXN0RGlyID0gcGF0aC5qb2luKG9zLnRtcGRpcigpLCBgY2RrLWludGVnLSR7cmFuZHl9YCk7XG5cbiAgICBjb250ZXh0Lm91dHB1dC53cml0ZShgIFN0YWNrIHByZWZpeDogICAke3N0YWNrTmFtZVByZWZpeH1cXG5gKTtcbiAgICBjb250ZXh0Lm91dHB1dC53cml0ZShgIFRlc3QgZGlyZWN0b3J5OiAke2ludGVnVGVzdERpcn1cXG5gKTtcbiAgICBjb250ZXh0Lm91dHB1dC53cml0ZShgIFJlZ2lvbjogICAgICAgICAke2NvbnRleHQuYXdzLnJlZ2lvbn1cXG5gKTtcblxuICAgIGF3YWl0IGNsb25lRGlyZWN0b3J5KHBhdGguam9pbihSRVNPVVJDRVNfRElSLCAnY2RrLWFwcHMnLCBhcHBOYW1lKSwgaW50ZWdUZXN0RGlyLCBjb250ZXh0Lm91dHB1dCk7XG4gICAgY29uc3QgZml4dHVyZSA9IG5ldyBUZXN0Rml4dHVyZShcbiAgICAgIGludGVnVGVzdERpcixcbiAgICAgIHN0YWNrTmFtZVByZWZpeCxcbiAgICAgIGNvbnRleHQub3V0cHV0LFxuICAgICAgY29udGV4dC5hd3MsXG4gICAgICBjb250ZXh0LnJhbmRvbVN0cmluZyk7XG5cbiAgICBsZXQgc3VjY2VzcyA9IHRydWU7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGluc3RhbGxhdGlvblZlcnNpb24gPSBmaXh0dXJlLnBhY2thZ2VzLnJlcXVlc3RlZEZyYW1ld29ya1ZlcnNpb24oKTtcblxuICAgICAgaWYgKGZpeHR1cmUucGFja2FnZXMubWFqb3JWZXJzaW9uKCkgPT09ICcxJykge1xuICAgICAgICBhd2FpdCBpbnN0YWxsTnBtUGFja2FnZXMoZml4dHVyZSwge1xuICAgICAgICAgICdAYXdzLWNkay9jb3JlJzogaW5zdGFsbGF0aW9uVmVyc2lvbixcbiAgICAgICAgICAnQGF3cy1jZGsvYXdzLXNucyc6IGluc3RhbGxhdGlvblZlcnNpb24sXG4gICAgICAgICAgJ0Bhd3MtY2RrL2F3cy1zcXMnOiBpbnN0YWxsYXRpb25WZXJzaW9uLFxuICAgICAgICAgICdAYXdzLWNkay9hd3MtaWFtJzogaW5zdGFsbGF0aW9uVmVyc2lvbixcbiAgICAgICAgICAnQGF3cy1jZGsvYXdzLWxhbWJkYSc6IGluc3RhbGxhdGlvblZlcnNpb24sXG4gICAgICAgICAgJ0Bhd3MtY2RrL2F3cy1zc20nOiBpbnN0YWxsYXRpb25WZXJzaW9uLFxuICAgICAgICAgICdAYXdzLWNkay9hd3MtZWNyLWFzc2V0cyc6IGluc3RhbGxhdGlvblZlcnNpb24sXG4gICAgICAgICAgJ0Bhd3MtY2RrL2F3cy1jbG91ZGZvcm1hdGlvbic6IGluc3RhbGxhdGlvblZlcnNpb24sXG4gICAgICAgICAgJ0Bhd3MtY2RrL2F3cy1lYzInOiBpbnN0YWxsYXRpb25WZXJzaW9uLFxuICAgICAgICAgICdAYXdzLWNkay9hd3MtczMnOiBpbnN0YWxsYXRpb25WZXJzaW9uLFxuICAgICAgICAgICdjb25zdHJ1Y3RzJzogJ14zJyxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBpbnN0YWxsTnBtUGFja2FnZXMoZml4dHVyZSwge1xuICAgICAgICAgICdhd3MtY2RrLWxpYic6IGluc3RhbGxhdGlvblZlcnNpb24sXG4gICAgICAgICAgJ2NvbnN0cnVjdHMnOiAnXjEwJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghY29udGV4dC5kaXNhYmxlQm9vdHN0cmFwKSB7XG4gICAgICAgIGF3YWl0IGVuc3VyZUJvb3RzdHJhcHBlZChmaXh0dXJlKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgYmxvY2soZml4dHVyZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc3VjY2VzcyA9IGZhbHNlO1xuICAgICAgdGhyb3cgZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52LklOVEVHX05PX0NMRUFOKSB7XG4gICAgICAgIGNvbnRleHQubG9nKGBMZWZ0IHRlc3QgZGlyZWN0b3J5IGluICcke2ludGVnVGVzdERpcn0nICgkSU5URUdfTk9fQ0xFQU4pXFxuYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBmaXh0dXJlLmRpc3Bvc2Uoc3VjY2Vzcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIExpa2UgYHdpdGhTcGVjaWZpY0Nka0FwcGAsIGJ1dCB1c2VzIHRoZSBkZWZhdWx0IGludGVncmF0aW9uIHRlc3RpbmcgYXBwIHdpdGggYSBtaWxsaW9uIHN0YWNrcyBpbiBpdFxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aENka0FwcChcbiAgYmxvY2s6IChjb250ZXh0OiBUZXN0Rml4dHVyZSkgPT4gUHJvbWlzZTx2b2lkPixcbik6IChjb250ZXh0OiBUZXN0Q29udGV4dCAmIEF3c0NvbnRleHQgJiBEaXNhYmxlQm9vdHN0cmFwQ29udGV4dCkgPT4gUHJvbWlzZTx2b2lkPiB7XG4gIC8vICdhcHAnIGlzIHRoZSBuYW1lIG9mIHRoZSBkZWZhdWx0IGludGVncmF0aW9uIGFwcCBpbiB0aGUgYGNkay1hcHBzYCBkaXJlY3RvcnlcbiAgcmV0dXJuIHdpdGhTcGVjaWZpY0Nka0FwcCgnYXBwJywgYmxvY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd2l0aENka01pZ3JhdGVBcHA8QSBleHRlbmRzIFRlc3RDb250ZXh0PihsYW5ndWFnZTogc3RyaW5nLCBibG9jazogKGNvbnRleHQ6IFRlc3RGaXh0dXJlKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gIHJldHVybiBhc3luYyAoY29udGV4dDogQSkgPT4ge1xuICAgIGNvbnN0IHN0YWNrTmFtZSA9IGBjZGstbWlncmF0ZS0ke2xhbmd1YWdlfS1pbnRlZy0ke2NvbnRleHQucmFuZG9tU3RyaW5nfWA7XG4gICAgY29uc3QgaW50ZWdUZXN0RGlyID0gcGF0aC5qb2luKG9zLnRtcGRpcigpLCBgY2RrLW1pZ3JhdGUtJHtsYW5ndWFnZX0taW50ZWctJHtjb250ZXh0LnJhbmRvbVN0cmluZ31gKTtcblxuICAgIGNvbnRleHQub3V0cHV0LndyaXRlKGAgU3RhY2sgbmFtZTogICAke3N0YWNrTmFtZX1cXG5gKTtcbiAgICBjb250ZXh0Lm91dHB1dC53cml0ZShgIFRlc3QgZGlyZWN0b3J5OiAke2ludGVnVGVzdERpcn1cXG5gKTtcblxuICAgIGNvbnN0IGF3c0NsaWVudHMgPSBhd2FpdCBBd3NDbGllbnRzLmRlZmF1bHQoY29udGV4dC5vdXRwdXQpO1xuICAgIGZzLm1rZGlyU3luYyhpbnRlZ1Rlc3REaXIpO1xuICAgIGNvbnN0IGZpeHR1cmUgPSBuZXcgVGVzdEZpeHR1cmUoXG4gICAgICBpbnRlZ1Rlc3REaXIsXG4gICAgICBzdGFja05hbWUsXG4gICAgICBjb250ZXh0Lm91dHB1dCxcbiAgICAgIGF3c0NsaWVudHMsXG4gICAgICBjb250ZXh0LnJhbmRvbVN0cmluZyxcbiAgICApO1xuXG4gICAgYXdhaXQgZml4dHVyZS5jZGtNaWdyYXRlKGxhbmd1YWdlLCBzdGFja05hbWUpO1xuXG4gICAgY29uc3QgdGVzdEZpeHR1cmUgPSBuZXcgVGVzdEZpeHR1cmUoXG4gICAgICBwYXRoLmpvaW4oaW50ZWdUZXN0RGlyLCBzdGFja05hbWUpLFxuICAgICAgc3RhY2tOYW1lLFxuICAgICAgY29udGV4dC5vdXRwdXQsXG4gICAgICBhd3NDbGllbnRzLFxuICAgICAgY29udGV4dC5yYW5kb21TdHJpbmcsXG4gICAgKTtcblxuICAgIGxldCBzdWNjZXNzID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgYmxvY2sodGVzdEZpeHR1cmUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgIHRocm93IGU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5JTlRFR19OT19DTEVBTikge1xuICAgICAgICBjb250ZXh0LmxvZyhgTGVmdCB0ZXN0IGRpcmVjdG9yeSBpbiAnJHtpbnRlZ1Rlc3REaXJ9JyAoJElOVEVHX05PX0NMRUFOKWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgZml4dHVyZS5kaXNwb3NlKHN1Y2Nlc3MpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhNb25vbGl0aGljQ2ZuSW5jbHVkZUNka0FwcDxBIGV4dGVuZHMgVGVzdENvbnRleHQ+KGJsb2NrOiAoY29udGV4dDogVGVzdEZpeHR1cmUpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgcmV0dXJuIGFzeW5jIChjb250ZXh0OiBBKSA9PiB7XG4gICAgY29uc3QgdWJlclBhY2thZ2UgPSBwcm9jZXNzLmVudi5VQkVSUEFDS0FHRTtcbiAgICBpZiAoIXViZXJQYWNrYWdlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBVQkVSUEFDS0FHRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyByZXF1aXJlZCBmb3IgcnVubmluZyB0aGlzIHRlc3QhJyk7XG4gICAgfVxuXG4gICAgY29uc3QgcmFuZHkgPSBjb250ZXh0LnJhbmRvbVN0cmluZztcbiAgICBjb25zdCBzdGFja05hbWVQcmVmaXggPSBgY2RrLXViZXItY2ZuLWluY2x1ZGUtJHtyYW5keX1gO1xuICAgIGNvbnN0IGludGVnVGVzdERpciA9IHBhdGguam9pbihvcy50bXBkaXIoKSwgYGNkay11YmVyLWNmbi1pbmNsdWRlLSR7cmFuZHl9YCk7XG5cbiAgICBjb250ZXh0Lm91dHB1dC53cml0ZShgIFN0YWNrIHByZWZpeDogICAke3N0YWNrTmFtZVByZWZpeH1cXG5gKTtcbiAgICBjb250ZXh0Lm91dHB1dC53cml0ZShgIFRlc3QgZGlyZWN0b3J5OiAke2ludGVnVGVzdERpcn1cXG5gKTtcblxuICAgIGNvbnN0IGF3c0NsaWVudHMgPSBhd2FpdCBBd3NDbGllbnRzLmRlZmF1bHQoY29udGV4dC5vdXRwdXQpO1xuICAgIGF3YWl0IGNsb25lRGlyZWN0b3J5KHBhdGguam9pbihSRVNPVVJDRVNfRElSLCAnY2RrLWFwcHMnLCAnY2ZuLWluY2x1ZGUtYXBwJyksIGludGVnVGVzdERpciwgY29udGV4dC5vdXRwdXQpO1xuICAgIGNvbnN0IGZpeHR1cmUgPSBuZXcgVGVzdEZpeHR1cmUoXG4gICAgICBpbnRlZ1Rlc3REaXIsXG4gICAgICBzdGFja05hbWVQcmVmaXgsXG4gICAgICBjb250ZXh0Lm91dHB1dCxcbiAgICAgIGF3c0NsaWVudHMsXG4gICAgICBjb250ZXh0LnJhbmRvbVN0cmluZyxcbiAgICApO1xuXG4gICAgbGV0IHN1Y2Nlc3MgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBpbnN0YWxsTnBtUGFja2FnZXMoZml4dHVyZSwge1xuICAgICAgICBbdWJlclBhY2thZ2VdOiBmaXh0dXJlLnBhY2thZ2VzLnJlcXVlc3RlZEZyYW1ld29ya1ZlcnNpb24oKSxcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBibG9jayhmaXh0dXJlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBzdWNjZXNzID0gZmFsc2U7XG4gICAgICB0aHJvdyBlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuSU5URUdfTk9fQ0xFQU4pIHtcbiAgICAgICAgY29udGV4dC5sb2coYExlZnQgdGVzdCBkaXJlY3RvcnkgaW4gJyR7aW50ZWdUZXN0RGlyfScgKCRJTlRFR19OT19DTEVBTilgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IGZpeHR1cmUuZGlzcG9zZShzdWNjZXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogRGVmYXVsdCB0ZXN0IGZpeHR1cmUgZm9yIG1vc3QgKGFsbD8pIGludGVnIHRlc3RzXG4gKlxuICogSXQncyBhIGNvbXBvc2l0aW9uIG9mIHdpdGhBd3Mvd2l0aENka0FwcCwgZXhwZWN0aW5nIHRoZSB0ZXN0IGJsb2NrIHRvIHRha2UgYSBgVGVzdEZpeHR1cmVgXG4gKiBvYmplY3QuXG4gKlxuICogV2UgY291bGQgaGF2ZSBwdXQgYHdpdGhBd3Mod2l0aENka0FwcChmaXh0dXJlID0+IHsgLy4uLiBhY3R1YWwgdGVzdCBoZXJlLi4uLyB9KSlgIGluIGV2ZXJ5XG4gKiB0ZXN0IGRlY2xhcmF0aW9uIGJ1dCBjZW50cmFsaXppbmcgaXQgaXMgZ29pbmcgdG8gbWFrZSBpdCBjb252ZW5pZW50IHRvIG1vZGlmeSBpbiB0aGUgZnV0dXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aERlZmF1bHRGaXh0dXJlKGJsb2NrOiAoY29udGV4dDogVGVzdEZpeHR1cmUpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgcmV0dXJuIHdpdGhBd3Mod2l0aFRpbWVvdXQoREVGQVVMVF9URVNUX1RJTUVPVVRfUywgd2l0aENka0FwcChibG9jaykpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhTcGVjaWZpY0ZpeHR1cmUoYXBwTmFtZTogc3RyaW5nLCBibG9jazogKGNvbnRleHQ6IFRlc3RGaXh0dXJlKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gIHJldHVybiB3aXRoQXdzKHdpdGhUaW1lb3V0KERFRkFVTFRfVEVTVF9USU1FT1VUX1MsIHdpdGhTcGVjaWZpY0Nka0FwcChhcHBOYW1lLCBibG9jaykpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhFeHRlbmRlZFRpbWVvdXRGaXh0dXJlKGJsb2NrOiAoY29udGV4dDogVGVzdEZpeHR1cmUpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgcmV0dXJuIHdpdGhBd3Mod2l0aFRpbWVvdXQoRVhURU5ERURfVEVTVF9USU1FT1VUX1MsIHdpdGhDZGtBcHAoYmxvY2spKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoQ0RLTWlncmF0ZUZpeHR1cmUobGFuZ3VhZ2U6IHN0cmluZywgYmxvY2s6IChjb250ZW50OiBUZXN0Rml4dHVyZSkgPT4gUHJvbWlzZTx2b2lkPikge1xuICByZXR1cm4gd2l0aEF3cyh3aXRoVGltZW91dChERUZBVUxUX1RFU1RfVElNRU9VVF9TLCB3aXRoQ2RrTWlncmF0ZUFwcChsYW5ndWFnZSwgYmxvY2spKSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzYWJsZUJvb3RzdHJhcENvbnRleHQge1xuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIGNyZWF0aW5nIHRoZSBkZWZhdWx0IGJvb3RzdHJhcFxuICAgKiBzdGFjayBwcmlvciB0byBydW5uaW5nIHRoZSB0ZXN0XG4gICAqXG4gICAqIFRoaXMgc2hvdWxkIGJlIHNldCB0byB0cnVlIHdoZW4gcnVubmluZyB0ZXN0cyB0aGF0XG4gICAqIGV4cGxpY2l0bHkgY3JlYXRlIGEgYm9vdHN0cmFwIHN0YWNrXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBkaXNhYmxlQm9vdHN0cmFwPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUbyBiZSB1c2VkIGluIHBsYWNlIG9mIGB3aXRoRGVmYXVsdEZpeHR1cmVgIHdoZW4gdGhlIHRlc3RcbiAqIHNob3VsZCBub3QgY3JlYXRlIHRoZSBkZWZhdWx0IGJvb3RzdHJhcCBzdGFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aG91dEJvb3RzdHJhcChibG9jazogKGNvbnRleHQ6IFRlc3RGaXh0dXJlKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gIHJldHVybiB3aXRoQXdzKHdpdGhDZGtBcHAoYmxvY2spLCB0cnVlKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDZGtDbGlPcHRpb25zIGV4dGVuZHMgU2hlbGxPcHRpb25zIHtcbiAgb3B0aW9ucz86IHN0cmluZ1tdO1xuICBuZXZlclJlcXVpcmVBcHByb3ZhbD86IGJvb2xlYW47XG4gIHZlcmJvc2U/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFByZXBhcmUgYSB0YXJnZXQgZGlyIGJ5cmVwbGljYXRpbmcgYSBzb3VyY2UgZGlyZWN0b3J5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbG9uZURpcmVjdG9yeShzb3VyY2U6IHN0cmluZywgdGFyZ2V0OiBzdHJpbmcsIG91dHB1dD86IE5vZGVKUy5Xcml0YWJsZVN0cmVhbSkge1xuICBhd2FpdCBzaGVsbChbJ3JtJywgJy1yZicsIHRhcmdldF0sIHsgb3V0cHV0IH0pO1xuICBhd2FpdCBzaGVsbChbJ21rZGlyJywgJy1wJywgdGFyZ2V0XSwgeyBvdXRwdXQgfSk7XG4gIGF3YWl0IHNoZWxsKFsnY3AnLCAnLVInLCBzb3VyY2UgKyAnLyonLCB0YXJnZXRdLCB7IG91dHB1dCB9KTtcbn1cblxuaW50ZXJmYWNlIENvbW1vbkNka0Jvb3RzdHJhcENvbW1hbmRPcHRpb25zIHtcbiAgLyoqXG4gICAqIFBhdGggdG8gYSBjdXN0b20gYm9vdHN0cmFwIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBkZWZhdWx0IENESyBib290c3RyYXAgdGVtcGxhdGUuXG4gICAqL1xuICByZWFkb25seSBib290c3RyYXBUZW1wbGF0ZT86IHN0cmluZztcblxuICByZWFkb25seSB0b29sa2l0U3RhY2tOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB2ZXJib3NlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlZmF1bHQgLSBhdXRvLWdlbmVyYXRlZCBDbG91ZEZvcm1hdGlvbiBuYW1lXG4gICAqL1xuICByZWFkb25seSBib290c3RyYXBCdWNrZXROYW1lPzogc3RyaW5nO1xuXG4gIHJlYWRvbmx5IGNsaU9wdGlvbnM/OiBDZGtDbGlPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IC0gdGhlIGRlZmF1bHQgQ0RLIHF1YWxpZmllclxuICAgKi9cbiAgcmVhZG9ubHkgcXVhbGlmaWVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENka0xlZ2FjeUJvb3RzdHJhcENvbW1hbmRPcHRpb25zIGV4dGVuZHMgQ29tbW9uQ2RrQm9vdHN0cmFwQ29tbWFuZE9wdGlvbnMge1xuICAvKipcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IG5vRXhlY3V0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHB1YmxpY0FjY2Vzc0Jsb2NrQ29uZmlndXJhdGlvbj86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrTW9kZXJuQm9vdHN0cmFwQ29tbWFuZE9wdGlvbnMgZXh0ZW5kcyBDb21tb25DZGtCb290c3RyYXBDb21tYW5kT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZm9yY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGNmbkV4ZWN1dGlvblBvbGljeT86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNob3dUZW1wbGF0ZT86IGJvb2xlYW47XG5cbiAgcmVhZG9ubHkgdGVtcGxhdGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB0ZXJtaW5hdGlvblByb3RlY3Rpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IGV4YW1wbGVQZXJtaXNzaW9uc0JvdW5kYXJ5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBjdXN0b21QZXJtaXNzaW9uc0JvdW5kYXJ5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHVzZVByZXZpb3VzUGFyYW1ldGVycz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBUZXN0Rml4dHVyZSBleHRlbmRzIFNoZWxsSGVscGVyIHtcbiAgcHVibGljIHJlYWRvbmx5IHF1YWxpZmllciA9IHRoaXMucmFuZG9tU3RyaW5nLnNsaWNlKDAsIDEwKTtcbiAgcHJpdmF0ZSByZWFkb25seSBidWNrZXRzVG9EZWxldGUgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICBwdWJsaWMgcmVhZG9ubHkgcGFja2FnZXM6IElQYWNrYWdlU291cmNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBpbnRlZ1Rlc3REaXI6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgc3RhY2tOYW1lUHJlZml4OiBzdHJpbmcsXG4gICAgcHVibGljIHJlYWRvbmx5IG91dHB1dDogTm9kZUpTLldyaXRhYmxlU3RyZWFtLFxuICAgIHB1YmxpYyByZWFkb25seSBhd3M6IEF3c0NsaWVudHMsXG4gICAgcHVibGljIHJlYWRvbmx5IHJhbmRvbVN0cmluZzogc3RyaW5nKSB7XG5cbiAgICBzdXBlcihpbnRlZ1Rlc3REaXIsIG91dHB1dCk7XG5cbiAgICB0aGlzLnBhY2thZ2VzID0gcGFja2FnZVNvdXJjZUluU3VicHJvY2VzcygpO1xuICB9XG5cbiAgcHVibGljIGxvZyhzOiBzdHJpbmcpIHtcbiAgICB0aGlzLm91dHB1dC53cml0ZShgJHtzfVxcbmApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNka0RlcGxveShzdGFja05hbWVzOiBzdHJpbmcgfCBzdHJpbmdbXSwgb3B0aW9uczogQ2RrQ2xpT3B0aW9ucyA9IHt9LCBza2lwU3RhY2tSZW5hbWU/OiBib29sZWFuKSB7XG4gICAgc3RhY2tOYW1lcyA9IHR5cGVvZiBzdGFja05hbWVzID09PSAnc3RyaW5nJyA/IFtzdGFja05hbWVzXSA6IHN0YWNrTmFtZXM7XG5cbiAgICBjb25zdCBuZXZlclJlcXVpcmVBcHByb3ZhbCA9IG9wdGlvbnMubmV2ZXJSZXF1aXJlQXBwcm92YWwgPz8gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLmNkayhbJ2RlcGxveScsXG4gICAgICAuLi4obmV2ZXJSZXF1aXJlQXBwcm92YWwgPyBbJy0tcmVxdWlyZS1hcHByb3ZhbD1uZXZlciddIDogW10pLCAvLyBEZWZhdWx0IHRvIG5vIGFwcHJvdmFsIGluIGFuIHVuYXR0ZW5kZWQgdGVzdFxuICAgICAgLi4uKG9wdGlvbnMub3B0aW9ucyA/PyBbXSksXG4gICAgICAvLyB1c2UgZXZlbnRzIGJlY2F1c2UgYmFyIHJlbmRlcnMgYmFkIGluIHRlc3RzXG4gICAgICAnLS1wcm9ncmVzcycsICdldmVudHMnLFxuICAgICAgLi4uKHNraXBTdGFja1JlbmFtZSA/IHN0YWNrTmFtZXMgOiB0aGlzLmZ1bGxTdGFja05hbWUoc3RhY2tOYW1lcykpXSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2RrU3ludGgob3B0aW9uczogQ2RrQ2xpT3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuY2RrKFtcbiAgICAgICdzeW50aCcsXG4gICAgICAuLi4ob3B0aW9ucy5vcHRpb25zID8/IFtdKSxcbiAgICBdLCBvcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjZGtEZXN0cm95KHN0YWNrTmFtZXM6IHN0cmluZyB8IHN0cmluZ1tdLCBvcHRpb25zOiBDZGtDbGlPcHRpb25zID0ge30pIHtcbiAgICBzdGFja05hbWVzID0gdHlwZW9mIHN0YWNrTmFtZXMgPT09ICdzdHJpbmcnID8gW3N0YWNrTmFtZXNdIDogc3RhY2tOYW1lcztcblxuICAgIHJldHVybiB0aGlzLmNkayhbJ2Rlc3Ryb3knLFxuICAgICAgJy1mJywgLy8gV2UgbmV2ZXIgd2FudCBhIHByb21wdCBpbiBhbiB1bmF0dGVuZGVkIHRlc3RcbiAgICAgIC4uLihvcHRpb25zLm9wdGlvbnMgPz8gW10pLFxuICAgICAgLi4udGhpcy5mdWxsU3RhY2tOYW1lKHN0YWNrTmFtZXMpXSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2RrQm9vdHN0cmFwTGVnYWN5KG9wdGlvbnM6IENka0xlZ2FjeUJvb3RzdHJhcENvbW1hbmRPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBhcmdzID0gWydib290c3RyYXAnXTtcblxuICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgIGFyZ3MucHVzaCgnLXYnKTtcbiAgICB9XG4gICAgYXJncy5wdXNoKCctLXRvb2xraXQtc3RhY2stbmFtZScsIG9wdGlvbnMudG9vbGtpdFN0YWNrTmFtZSk7XG4gICAgaWYgKG9wdGlvbnMuYm9vdHN0cmFwQnVja2V0TmFtZSkge1xuICAgICAgYXJncy5wdXNoKCctLWJvb3RzdHJhcC1idWNrZXQtbmFtZScsIG9wdGlvbnMuYm9vdHN0cmFwQnVja2V0TmFtZSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLm5vRXhlY3V0ZSkge1xuICAgICAgYXJncy5wdXNoKCctLW5vLWV4ZWN1dGUnKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMucHVibGljQWNjZXNzQmxvY2tDb25maWd1cmF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1wdWJsaWMtYWNjZXNzLWJsb2NrLWNvbmZpZ3VyYXRpb24nLCBvcHRpb25zLnB1YmxpY0FjY2Vzc0Jsb2NrQ29uZmlndXJhdGlvbi50b1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudGFncykge1xuICAgICAgYXJncy5wdXNoKCctLXRhZ3MnLCBvcHRpb25zLnRhZ3MpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNkayhhcmdzLCB7XG4gICAgICAuLi5vcHRpb25zLmNsaU9wdGlvbnMsXG4gICAgICBtb2RFbnY6IHtcbiAgICAgICAgLi4ub3B0aW9ucy5jbGlPcHRpb25zPy5tb2RFbnYsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhpcyB3b3JrcyBmb3IgVjIsXG4gICAgICAgIC8vIHdoZXJlIHRoZSBcIm5ld1wiIGJvb3RzdHJhcCBpcyB0aGUgZGVmYXVsdFxuICAgICAgICBDREtfTEVHQUNZX0JPT1RTVFJBUDogJzEnLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjZGtCb290c3RyYXBNb2Rlcm4ob3B0aW9uczogQ2RrTW9kZXJuQm9vdHN0cmFwQ29tbWFuZE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGFyZ3MgPSBbJ2Jvb3RzdHJhcCddO1xuXG4gICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgYXJncy5wdXNoKCctdicpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zaG93VGVtcGxhdGUpIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1zaG93LXRlbXBsYXRlJyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRlbXBsYXRlKSB7XG4gICAgICBhcmdzLnB1c2goJy0tdGVtcGxhdGUnLCBvcHRpb25zLnRlbXBsYXRlKTtcbiAgICB9XG4gICAgYXJncy5wdXNoKCctLXRvb2xraXQtc3RhY2stbmFtZScsIG9wdGlvbnMudG9vbGtpdFN0YWNrTmFtZSk7XG4gICAgaWYgKG9wdGlvbnMuYm9vdHN0cmFwQnVja2V0TmFtZSkge1xuICAgICAgYXJncy5wdXNoKCctLWJvb3RzdHJhcC1idWNrZXQtbmFtZScsIG9wdGlvbnMuYm9vdHN0cmFwQnVja2V0TmFtZSk7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLS1xdWFsaWZpZXInLCBvcHRpb25zLnF1YWxpZmllciA/PyB0aGlzLnF1YWxpZmllcik7XG4gICAgaWYgKG9wdGlvbnMuY2ZuRXhlY3V0aW9uUG9saWN5KSB7XG4gICAgICBhcmdzLnB1c2goJy0tY2xvdWRmb3JtYXRpb24tZXhlY3V0aW9uLXBvbGljaWVzJywgb3B0aW9ucy5jZm5FeGVjdXRpb25Qb2xpY3kpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50ZXJtaW5hdGlvblByb3RlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXJncy5wdXNoKCctLXRlcm1pbmF0aW9uLXByb3RlY3Rpb24nLCBvcHRpb25zLnRlcm1pbmF0aW9uUHJvdGVjdGlvbi50b1N0cmluZygpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZm9yY2UpIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1mb3JjZScpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50YWdzKSB7XG4gICAgICBhcmdzLnB1c2goJy0tdGFncycsIG9wdGlvbnMudGFncyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmN1c3RvbVBlcm1pc3Npb25zQm91bmRhcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXJncy5wdXNoKCctLWN1c3RvbS1wZXJtaXNzaW9ucy1ib3VuZGFyeScsIG9wdGlvbnMuY3VzdG9tUGVybWlzc2lvbnNCb3VuZGFyeSk7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmV4YW1wbGVQZXJtaXNzaW9uc0JvdW5kYXJ5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1leGFtcGxlLXBlcm1pc3Npb25zLWJvdW5kYXJ5Jyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnVzZVByZXZpb3VzUGFyYW1ldGVycyA9PT0gZmFsc2UpIHtcbiAgICAgIGFyZ3MucHVzaCgnLS1uby1wcmV2aW91cy1wYXJhbWV0ZXJzJyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmJvb3RzdHJhcFRlbXBsYXRlKSB7XG4gICAgICBhcmdzLnB1c2goJy0tdGVtcGxhdGUnLCBvcHRpb25zLmJvb3RzdHJhcFRlbXBsYXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jZGsoYXJncywge1xuICAgICAgLi4ub3B0aW9ucy5jbGlPcHRpb25zLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIC4uLm9wdGlvbnMuY2xpT3B0aW9ucz8ubW9kRW52LFxuICAgICAgICAvLyBzbyB0aGF0IHRoaXMgd29ya3MgZm9yIFYxLFxuICAgICAgICAvLyB3aGVyZSB0aGUgXCJvbGRcIiBib290c3RyYXAgaXMgdGhlIGRlZmF1bHRcbiAgICAgICAgQ0RLX05FV19CT09UU1RSQVA6ICcxJyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2RrTWlncmF0ZShsYW5ndWFnZTogc3RyaW5nLCBzdGFja05hbWU6IHN0cmluZywgaW5wdXRQYXRoPzogc3RyaW5nLCBvcHRpb25zPzogQ2RrQ2xpT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmNkayhbXG4gICAgICAnbWlncmF0ZScsXG4gICAgICAnLS1sYW5ndWFnZScsXG4gICAgICBsYW5ndWFnZSxcbiAgICAgICctLXN0YWNrLW5hbWUnLFxuICAgICAgc3RhY2tOYW1lLFxuICAgICAgJy0tZnJvbS1wYXRoJyxcbiAgICAgIGlucHV0UGF0aCA/PyBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4nLCAncmVzb3VyY2VzJywgJ3RlbXBsYXRlcycsICdzcXMtdGVtcGxhdGUuanNvbicpLnRvU3RyaW5nKCksXG4gICAgICAuLi4ob3B0aW9ucz8ub3B0aW9ucyA/PyBbXSksXG4gICAgXSwgb3B0aW9ucyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2RrKGFyZ3M6IHN0cmluZ1tdLCBvcHRpb25zOiBDZGtDbGlPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB2ZXJib3NlID0gb3B0aW9ucy52ZXJib3NlID8/IHRydWU7XG5cbiAgICBhd2FpdCB0aGlzLnBhY2thZ2VzLm1ha2VDbGlBdmFpbGFibGUoKTtcblxuICAgIHJldHVybiB0aGlzLnNoZWxsKFsnY2RrJywgLi4uKHZlcmJvc2UgPyBbJy12J10gOiBbXSksIC4uLmFyZ3NdLCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbW9kRW52OiB7XG4gICAgICAgIEFXU19SRUdJT046IHRoaXMuYXdzLnJlZ2lvbixcbiAgICAgICAgQVdTX0RFRkFVTFRfUkVHSU9OOiB0aGlzLmF3cy5yZWdpb24sXG4gICAgICAgIFNUQUNLX05BTUVfUFJFRklYOiB0aGlzLnN0YWNrTmFtZVByZWZpeCxcbiAgICAgICAgUEFDS0FHRV9MQVlPVVRfVkVSU0lPTjogdGhpcy5wYWNrYWdlcy5tYWpvclZlcnNpb24oKSxcbiAgICAgICAgLi4ub3B0aW9ucy5tb2RFbnYsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHRlbXBsYXRlKHN0YWNrTmFtZTogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCBmdWxsU3RhY2tOYW1lID0gdGhpcy5mdWxsU3RhY2tOYW1lKHN0YWNrTmFtZSk7XG4gICAgY29uc3QgdGVtcGxhdGVQYXRoID0gcGF0aC5qb2luKHRoaXMuaW50ZWdUZXN0RGlyLCAnY2RrLm91dCcsIGAke2Z1bGxTdGFja05hbWV9LnRlbXBsYXRlLmpzb25gKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmModGVtcGxhdGVQYXRoLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pLnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgcHVibGljIGdldCBib290c3RyYXBTdGFja05hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnVsbFN0YWNrTmFtZSgnYm9vdHN0cmFwLXN0YWNrJyk7XG4gIH1cblxuICBwdWJsaWMgZnVsbFN0YWNrTmFtZShzdGFja05hbWU6IHN0cmluZyk6IHN0cmluZztcbiAgcHVibGljIGZ1bGxTdGFja05hbWUoc3RhY2tOYW1lczogc3RyaW5nW10pOiBzdHJpbmdbXTtcbiAgcHVibGljIGZ1bGxTdGFja05hbWUoc3RhY2tOYW1lczogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG4gICAgaWYgKHR5cGVvZiBzdGFja05hbWVzID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGAke3RoaXMuc3RhY2tOYW1lUHJlZml4fS0ke3N0YWNrTmFtZXN9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN0YWNrTmFtZXMubWFwKHMgPT4gYCR7dGhpcy5zdGFja05hbWVQcmVmaXh9LSR7c31gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXBwZW5kIHRoaXMgdG8gdGhlIGxpc3Qgb2YgYnVja2V0cyB0byBwb3RlbnRpYWxseSBkZWxldGVcbiAgICpcbiAgICogQXQgdGhlIGVuZCBvZiBhIHRlc3QsIHdlIGNsZWFuIHVwIGJ1Y2tldHMgdGhhdCBtYXkgbm90IGhhdmUgZ290dGVuIGRlc3Ryb3llZFxuICAgKiAoZm9yIHdoYXRldmVyIHJlYXNvbikuXG4gICAqL1xuICBwdWJsaWMgcmVtZW1iZXJUb0RlbGV0ZUJ1Y2tldChidWNrZXROYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJ1Y2tldHNUb0RlbGV0ZS5wdXNoKGJ1Y2tldE5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFudXAgbGVmdG92ZXIgc3RhY2tzIGFuZCBidWNrZXRzXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZGlzcG9zZShzdWNjZXNzOiBib29sZWFuKSB7XG4gICAgY29uc3Qgc3RhY2tzVG9EZWxldGUgPSBhd2FpdCB0aGlzLmRlbGV0ZWFibGVTdGFja3ModGhpcy5zdGFja05hbWVQcmVmaXgpO1xuXG4gICAgdGhpcy5zb3J0Qm9vdHN0cmFwU3RhY2tzVG9UaGVFbmQoc3RhY2tzVG9EZWxldGUpO1xuXG4gICAgLy8gQm9vdHN0cmFwIHN0YWNrcyBoYXZlIGJ1Y2tldHMgdGhhdCBuZWVkIHRvIGJlIGNsZWFuZWRcbiAgICBjb25zdCBidWNrZXROYW1lcyA9IHN0YWNrc1RvRGVsZXRlLm1hcChzdGFjayA9PiBvdXRwdXRGcm9tU3RhY2soJ0J1Y2tldE5hbWUnLCBzdGFjaykpLmZpbHRlcihkZWZpbmVkKTtcbiAgICAvLyBQYXJhbGxlbGlzbSB3aWxsIGJlIHJlYXNvbmFibGVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGNka2xhYnMvcHJvbWlzZWFsbC1uby11bmJvdW5kZWQtcGFyYWxsZWxpc21cbiAgICBhd2FpdCBQcm9taXNlLmFsbChidWNrZXROYW1lcy5tYXAoYiA9PiB0aGlzLmF3cy5lbXB0eUJ1Y2tldChiKSkpO1xuICAgIC8vIFRoZSBib290c3RyYXAgYnVja2V0IGhhcyBhIHJlbW92YWwgcG9saWN5IG9mIFJFVEFJTiBieSBkZWZhdWx0LCBzbyBhZGQgaXQgdG8gdGhlIGJ1Y2tldHMgdG8gYmUgY2xlYW5lZCB1cC5cbiAgICB0aGlzLmJ1Y2tldHNUb0RlbGV0ZS5wdXNoKC4uLmJ1Y2tldE5hbWVzKTtcblxuICAgIC8vIEJvb3RzdHJhcCBzdGFja3MgaGF2ZSBFQ1IgcmVwb3NpdG9yaWVzIHdpdGggaW1hZ2VzIHdoaWNoIHNob3VsZCBiZSBkZWxldGVkXG4gICAgY29uc3QgaW1hZ2VSZXBvc2l0b3J5TmFtZXMgPSBzdGFja3NUb0RlbGV0ZS5tYXAoc3RhY2sgPT4gb3V0cHV0RnJvbVN0YWNrKCdJbWFnZVJlcG9zaXRvcnlOYW1lJywgc3RhY2spKS5maWx0ZXIoZGVmaW5lZCk7XG4gICAgLy8gUGFyYWxsZWxpc20gd2lsbCBiZSByZWFzb25hYmxlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBjZGtsYWJzL3Byb21pc2VhbGwtbm8tdW5ib3VuZGVkLXBhcmFsbGVsaXNtXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoaW1hZ2VSZXBvc2l0b3J5TmFtZXMubWFwKHIgPT4gdGhpcy5hd3MuZGVsZXRlSW1hZ2VSZXBvc2l0b3J5KHIpKSk7XG5cbiAgICBhd2FpdCB0aGlzLmF3cy5kZWxldGVTdGFja3MoXG4gICAgICAuLi5zdGFja3NUb0RlbGV0ZS5tYXAoKHMpID0+IHtcbiAgICAgICAgaWYgKCFzLlN0YWNrTmFtZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignU3RhY2sgbmFtZSBpcyByZXF1aXJlZCB0byBkZWxldGUgYSBzdGFjay4nKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcy5TdGFja05hbWU7XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gV2UgbWlnaHQgaGF2ZSBsZWFrZWQgc29tZSBidWNrZXRzIGJ5IHVwZ3JhZGluZyB0aGUgYm9vdHN0cmFwIHN0YWNrLiBCZVxuICAgIC8vIHN1cmUgdG8gY2xlYW4gZXZlcnl0aGluZy5cbiAgICBmb3IgKGNvbnN0IGJ1Y2tldCBvZiB0aGlzLmJ1Y2tldHNUb0RlbGV0ZSkge1xuICAgICAgYXdhaXQgdGhpcy5hd3MuZGVsZXRlQnVja2V0KGJ1Y2tldCk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHRlc3RzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIGhhcHBpbHkgZGVsZXRlIHRoZSBmaXh0dXJlXG4gICAgLy8gKG90aGVyd2lzZSBsZWF2ZSBpdCBmb3IgaHVtYW5zIHRvIGluc3BlY3QpXG4gICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgIHJpbXJhZih0aGlzLmludGVnVGVzdERpcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgc3RhY2tzIHN0YXJ0aW5nIHdpdGggb3VyIHRlc3RpbmcgcHJlZml4IHRoYXQgc2hvdWxkIGJlIGRlbGV0ZWRcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZGVsZXRlYWJsZVN0YWNrcyhwcmVmaXg6IHN0cmluZyk6IFByb21pc2U8U3RhY2tbXT4ge1xuICAgIGNvbnN0IHN0YXR1c0ZpbHRlciA9IFtcbiAgICAgICdDUkVBVEVfSU5fUFJPR1JFU1MnLCAnQ1JFQVRFX0ZBSUxFRCcsICdDUkVBVEVfQ09NUExFVEUnLFxuICAgICAgJ1JPTExCQUNLX0lOX1BST0dSRVNTJywgJ1JPTExCQUNLX0ZBSUxFRCcsICdST0xMQkFDS19DT01QTEVURScsXG4gICAgICAnREVMRVRFX0ZBSUxFRCcsXG4gICAgICAnVVBEQVRFX0lOX1BST0dSRVNTJywgJ1VQREFURV9DT01QTEVURV9DTEVBTlVQX0lOX1BST0dSRVNTJyxcbiAgICAgICdVUERBVEVfQ09NUExFVEUnLCAnVVBEQVRFX1JPTExCQUNLX0lOX1BST0dSRVNTJyxcbiAgICAgICdVUERBVEVfUk9MTEJBQ0tfRkFJTEVEJyxcbiAgICAgICdVUERBVEVfUk9MTEJBQ0tfQ09NUExFVEVfQ0xFQU5VUF9JTl9QUk9HUkVTUycsXG4gICAgICAnVVBEQVRFX1JPTExCQUNLX0NPTVBMRVRFJywgJ1JFVklFV19JTl9QUk9HUkVTUycsXG4gICAgICAnSU1QT1JUX0lOX1BST0dSRVNTJywgJ0lNUE9SVF9DT01QTEVURScsXG4gICAgICAnSU1QT1JUX1JPTExCQUNLX0lOX1BST0dSRVNTJywgJ0lNUE9SVF9ST0xMQkFDS19GQUlMRUQnLFxuICAgICAgJ0lNUE9SVF9ST0xMQkFDS19DT01QTEVURScsXG4gICAgXTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5hd3MuY2xvdWRGb3JtYXRpb24uc2VuZChuZXcgRGVzY3JpYmVTdGFja3NDb21tYW5kKHt9KSk7XG5cbiAgICByZXR1cm4gKHJlc3BvbnNlLlN0YWNrcyA/PyBbXSlcbiAgICAgIC5maWx0ZXIoKHMpID0+IHMuU3RhY2tOYW1lICYmIHMuU3RhY2tOYW1lLnN0YXJ0c1dpdGgocHJlZml4KSlcbiAgICAgIC5maWx0ZXIoKHMpID0+IHMuU3RhY2tTdGF0dXMgJiYgc3RhdHVzRmlsdGVyLmluY2x1ZGVzKHMuU3RhY2tTdGF0dXMpKVxuICAgICAgLmZpbHRlcigocykgPT4gcy5Sb290SWQgPT09IHVuZGVmaW5lZCk7IC8vIE9ubHkgZGVsZXRlIHBhcmVudCBzdGFja3MuIE5lc3RlZCBzdGFja3MgYXJlIGRlbGV0ZWQgaW4gdGhlIHByb2Nlc3NcbiAgfVxuXG4gIHByaXZhdGUgc29ydEJvb3RzdHJhcFN0YWNrc1RvVGhlRW5kKHN0YWNrczogU3RhY2tbXSkge1xuICAgIHN0YWNrcy5zb3J0KChhLCBiKSA9PiB7XG5cbiAgICAgIGlmICghYS5TdGFja05hbWUgfHwgIWIuU3RhY2tOYW1lKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU3RhY2sgbmFtZXMgZG8gbm90IGV4aXN0cy4gVGhlc2UgYXJlIHJlcXVpcmVkIGZvciBzb3J0aW5nIHRoZSBib290c3RyYXAgc3RhY2tzLicpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhQnMgPSBhLlN0YWNrTmFtZS5zdGFydHNXaXRoKHRoaXMuYm9vdHN0cmFwU3RhY2tOYW1lKTtcbiAgICAgIGNvbnN0IGJCcyA9IGIuU3RhY2tOYW1lLnN0YXJ0c1dpdGgodGhpcy5ib290c3RyYXBTdGFja05hbWUpO1xuXG4gICAgICByZXR1cm4gYUJzICE9IGJCc1xuICAgICAgICAvLyAnKycgY29udmVydHMgYSBib29sZWFuIHRvIDAgb3IgMVxuICAgICAgICA/ICgrYUJzKSAtICgrYkJzKVxuICAgICAgICA6IGEuU3RhY2tOYW1lLmxvY2FsZUNvbXBhcmUoYi5TdGFja05hbWUpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogTWFrZSBzdXJlIHRoYXQgdGhlIGdpdmVuIGVudmlyb25tZW50IGlzIGJvb3RzdHJhcHBlZFxuICpcbiAqIFNpbmNlIHdlIGdvIHN0cmlwaW5nIGFjcm9zcyByZWdpb25zLCBpdCdzIGdvaW5nIHRvIHN1Y2sgZG9pbmcgdGhpc1xuICogYnkgaGFuZCBzbyBsZXQncyBqdXN0IG1hc3MtYXV0b21hdGUgaXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGVuc3VyZUJvb3RzdHJhcHBlZChmaXh0dXJlOiBUZXN0Rml4dHVyZSkge1xuICAvLyBBbHdheXMgdXNlIHRoZSBtb2Rlcm4gYm9vdHN0cmFwIHN0YWNrLCBvdGhlcndpc2Ugd2UgbWF5IGdldCB0aGUgZXJyb3JcbiAgLy8gXCJyZWZ1c2luZyB0byBkb3duZ3JhZGUgZnJvbSB2ZXJzaW9uIDcgdG8gdmVyc2lvbiAwXCIgd2hlbiBib290c3RyYXBwaW5nIHdpdGggZGVmYXVsdFxuICAvLyBzZXR0aW5ncyB1c2luZyBhIHYxIENMSS5cbiAgLy9cbiAgLy8gSXQgZG9lc24ndCBtYXR0ZXIgZm9yIHRlc3RzOiB3aGVuIHRoZXkgd2FudCB0byB0ZXN0IHNvbWV0aGluZyBhYm91dCBhbiBhY3R1YWwgbGVnYWN5XG4gIC8vIGJvb3RzdHJhcCBzdGFjaywgdGhleSdsbCBjcmVhdGUgYSBib290c3RyYXAgc3RhY2sgd2l0aCBhIG5vbi1kZWZhdWx0IG5hbWUgdG8gdGVzdCB0aGF0IGV4YWN0IHByb3BlcnR5LlxuICBjb25zdCBlbnZTcGVjaWZpZXIgPSBgYXdzOi8vJHthd2FpdCBmaXh0dXJlLmF3cy5hY2NvdW50KCl9LyR7Zml4dHVyZS5hd3MucmVnaW9ufWA7XG4gIGlmIChBTFJFQURZX0JPT1RTVFJBUFBFRF9JTl9USElTX1JVTi5oYXMoZW52U3BlY2lmaWVyKSkgeyByZXR1cm47IH1cblxuICBhd2FpdCBmaXh0dXJlLmNkayhbJ2Jvb3RzdHJhcCcsIGVudlNwZWNpZmllcl0sIHtcbiAgICBtb2RFbnY6IHtcbiAgICAgIC8vIEV2ZW4gZm9yIHYxLCB1c2UgbmV3IGJvb3RzdHJhcFxuICAgICAgQ0RLX05FV19CT09UU1RSQVA6ICcxJyxcbiAgICB9LFxuICB9KTtcbiAgQUxSRUFEWV9CT09UU1RSQVBQRURfSU5fVEhJU19SVU4uYWRkKGVudlNwZWNpZmllcik7XG59XG5cbmZ1bmN0aW9uIGRlZmluZWQ8QT4oeDogQSk6IHggaXMgTm9uTnVsbGFibGU8QT4ge1xuICByZXR1cm4geCAhPT0gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEluc3RhbGwgdGhlIGdpdmVuIE5QTSBwYWNrYWdlcywgaWRlbnRpZmllZCBieSB0aGVpciBuYW1lcyBhbmQgdmVyc2lvbnNcbiAqXG4gKiBXb3JrcyBieSB3cml0aW5nIHRoZSBwYWNrYWdlcyB0byBhIGBwYWNrYWdlLmpzb25gIGZpbGUsIGFuZFxuICogdGhlbiBydW5uaW5nIE5QTTcncyBcImluc3RhbGxcIiBvbiBpdC4gVGhlIHVzZSBvZiBOUE03IHdpbGwgYXV0b21hdGljYWxseVxuICogaW5zdGFsbCByZXF1aXJlZCBwZWVyRGVwZW5kZW5jaWVzLlxuICpcbiAqIElmIHdlJ3JlIHJ1bm5pbmcgaW4gUkVQTyBtb2RlIGFuZCB3ZSBmaW5kIHRoZSBwYWNrYWdlIGluIHRoZSBzZXQgb2YgbG9jYWxcbiAqIHBhY2thZ2VzIGluIHRoZSByZXBvc2l0b3J5LCB3ZSdsbCB3cml0ZSB0aGUgZGlyZWN0b3J5IG5hbWUgdG8gYHBhY2thZ2UuanNvbmBcbiAqIHNvIHRoYXQgTlBNIHdpbGwgY3JlYXRlIGEgc3ltbGluayAodGhpcyBhbGxvd3MgcnVubmluZyB0ZXN0cyBhZ2FpbnN0XG4gKiBidWlsdC1idXQtdW5wYWNrYWdlZCBtb2R1bGVzLCBhbmQgc2F2ZXMgZGV2IGN5Y2xlIHRpbWUpLlxuICpcbiAqIEJlIGF3YXJlIHlvdSBNVVNUIGluc3RhbGwgYWxsIHRoZSBwYWNrYWdlcyB5b3UgZGlyZWN0bHkgZGVwZW5kIHVwb24hIEluIHRoZSBjYXNlXG4gKiBvZiBhIHJlcG8vc3ltbGlua2luZyBpbnN0YWxsLCB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcyBXSUxMIE5PVCBiZSBpbnN0YWxsZWQgaW4gdGhlXG4gKiBjdXJyZW50IGRpcmVjdG9yeSdzIGBub2RlX21vZHVsZXNgIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGV5IHdpbGwgYWxyZWFkeSBoYXZlIGJlZW5cbiAqIHN5bWxpbmtlZCBmcm9tIHRoZSBUQVJHRVQgZGlyZWN0b3J5J3MgYG5vZGVfbW9kdWxlc2AgZGlyZWN0b3J5ICh3aGljaCBpcyBzdWZmaWNpZW50XG4gKiBmb3IgTm9kZSdzIGRlcGVuZGVuY3kgbG9va3VwIG1lY2hhbmlzbSkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnN0YWxsTnBtUGFja2FnZXMoZml4dHVyZTogVGVzdEZpeHR1cmUsIHBhY2thZ2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG4gIGlmIChwcm9jZXNzLmVudi5SRVBPX1JPT1QpIHtcbiAgICBjb25zdCBtb25vUmVwbyA9IGF3YWl0IGZpbmRZYXJuUGFja2FnZXMocHJvY2Vzcy5lbnYuUkVQT19ST09UKTtcblxuICAgIC8vIFJlcGxhY2UgdGhlIGluc3RhbGwgdGFyZ2V0IHdpdGggdGhlIHBoeXNpY2FsIGxvY2F0aW9uIG9mIHRoaXMgcGFja2FnZVxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHBhY2thZ2VzKSkge1xuICAgICAgaWYgKGtleSBpbiBtb25vUmVwbykge1xuICAgICAgICBwYWNrYWdlc1trZXldID0gbW9ub1JlcG9ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmcy53cml0ZUZpbGVTeW5jKHBhdGguam9pbihmaXh0dXJlLmludGVnVGVzdERpciwgJ3BhY2thZ2UuanNvbicpLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgbmFtZTogJ2Nkay1pbnRlZy10ZXN0cycsXG4gICAgcHJpdmF0ZTogdHJ1ZSxcbiAgICB2ZXJzaW9uOiAnMC4wLjEnLFxuICAgIGRldkRlcGVuZGVuY2llczogcGFja2FnZXMsXG4gIH0sIHVuZGVmaW5lZCwgMiksIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG5cbiAgLy8gTm93IGluc3RhbGwgdGhhdCBgcGFja2FnZS5qc29uYCB1c2luZyBOUE03XG4gIGF3YWl0IGZpeHR1cmUuc2hlbGwoWydub2RlJywgcmVxdWlyZS5yZXNvbHZlKCducG0nKSwgJ2luc3RhbGwnXSk7XG59XG5cbmNvbnN0IEFMUkVBRFlfQk9PVFNUUkFQUEVEX0lOX1RISVNfUlVOID0gbmV3IFNldCgpO1xuIl19
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-cdk-testing/cli-integ",
|
|
3
3
|
"description": "Integration tests for the AWS CDK CLI",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.162.1",
|
|
5
5
|
"bin": {
|
|
6
6
|
"run-suite": "bin/run-suite",
|
|
7
7
|
"download-and-run-old-tests": "bin/download-and-run-old-tests",
|
|
@@ -29,29 +29,29 @@
|
|
|
29
29
|
},
|
|
30
30
|
"license": "Apache-2.0",
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@aws-cdk/cdk-build-tools": "2.
|
|
32
|
+
"@aws-cdk/cdk-build-tools": "2.162.1-alpha.0",
|
|
33
33
|
"@types/semver": "^7.5.8",
|
|
34
34
|
"@types/yargs": "^15.0.19",
|
|
35
35
|
"@types/fs-extra": "^9.0.13",
|
|
36
36
|
"@types/glob": "^7.2.0",
|
|
37
37
|
"@types/npm": "^7.19.3",
|
|
38
|
-
"@aws-cdk/pkglint": "2.
|
|
38
|
+
"@aws-cdk/pkglint": "2.162.1-alpha.0"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@octokit/rest": "^18.12.0",
|
|
42
|
-
"@aws-sdk/client-codeartifact": "3.
|
|
43
|
-
"@aws-sdk/client-cloudformation": "3.
|
|
44
|
-
"@aws-sdk/client-ecr": "3.
|
|
45
|
-
"@aws-sdk/client-ecs": "3.
|
|
46
|
-
"@aws-sdk/client-iam": "3.
|
|
47
|
-
"@aws-sdk/client-lambda": "3.
|
|
48
|
-
"@aws-sdk/client-s3": "3.
|
|
49
|
-
"@aws-sdk/client-sns": "3.
|
|
50
|
-
"@aws-sdk/client-sso": "3.
|
|
51
|
-
"@aws-sdk/client-sts": "3.
|
|
52
|
-
"@aws-sdk/credential-providers": "3.
|
|
53
|
-
"@smithy/util-retry": "3.0.
|
|
54
|
-
"@smithy/types": "3.
|
|
42
|
+
"@aws-sdk/client-codeartifact": "3.632.0",
|
|
43
|
+
"@aws-sdk/client-cloudformation": "3.632.0",
|
|
44
|
+
"@aws-sdk/client-ecr": "3.632.0",
|
|
45
|
+
"@aws-sdk/client-ecs": "3.632.0",
|
|
46
|
+
"@aws-sdk/client-iam": "3.632.0",
|
|
47
|
+
"@aws-sdk/client-lambda": "3.632.0",
|
|
48
|
+
"@aws-sdk/client-s3": "3.632.0",
|
|
49
|
+
"@aws-sdk/client-sns": "3.632.0",
|
|
50
|
+
"@aws-sdk/client-sso": "3.632.0",
|
|
51
|
+
"@aws-sdk/client-sts": "3.632.0",
|
|
52
|
+
"@aws-sdk/credential-providers": "3.632.0",
|
|
53
|
+
"@smithy/util-retry": "3.0.7",
|
|
54
|
+
"@smithy/types": "3.5.0",
|
|
55
55
|
"axios": "^1.7.7",
|
|
56
56
|
"chalk": "^4",
|
|
57
57
|
"fs-extra": "^9.1.0",
|
|
@@ -35,7 +35,7 @@ if (process.env.PACKAGE_LAYOUT_VERSION === '1') {
|
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
const { Annotations } = cdk;
|
|
38
|
-
const { StackWithNestedStack, StackWithNestedStackUsingParameters } = require('./nested-stack');
|
|
38
|
+
const { StackWithNestedStack, StackWithDoublyNestedStack, StackWithNestedStackUsingParameters } = require('./nested-stack');
|
|
39
39
|
|
|
40
40
|
const stackPrefix = process.env.STACK_NAME_PREFIX;
|
|
41
41
|
if (!stackPrefix) {
|
|
@@ -176,7 +176,7 @@ class DependentStack extends Stack {
|
|
|
176
176
|
super(scope, id);
|
|
177
177
|
|
|
178
178
|
const innerDependentStack = new InnerDependentStack(this, 'InnerDependentStack');
|
|
179
|
-
|
|
179
|
+
|
|
180
180
|
this.addDependency(innerDependentStack);
|
|
181
181
|
}
|
|
182
182
|
}
|
|
@@ -204,7 +204,7 @@ class MigrateStack extends cdk.Stack {
|
|
|
204
204
|
new cdk.CfnOutput(this, 'QueueUrl', {
|
|
205
205
|
value: queue.queueUrl,
|
|
206
206
|
});
|
|
207
|
-
|
|
207
|
+
|
|
208
208
|
new cdk.CfnOutput(this, 'QueueLogicalId', {
|
|
209
209
|
value: queue.node.defaultChild.logicalId,
|
|
210
210
|
});
|
|
@@ -258,7 +258,7 @@ class ImportableStack extends cdk.Stack {
|
|
|
258
258
|
new cdk.CfnOutput(this, 'QueueUrl', {
|
|
259
259
|
value: queue.queueUrl,
|
|
260
260
|
});
|
|
261
|
-
|
|
261
|
+
|
|
262
262
|
new cdk.CfnOutput(this, 'QueueLogicalId', {
|
|
263
263
|
value: queue.node.defaultChild.logicalId,
|
|
264
264
|
});
|
|
@@ -438,9 +438,17 @@ class IamRolesStack extends cdk.Stack {
|
|
|
438
438
|
// Environment variabile is used to create a bunch of roles to test
|
|
439
439
|
// that large diff templates are uploaded to S3 to create the changeset.
|
|
440
440
|
for(let i = 1; i <= Number(process.env.NUMBER_OF_ROLES) ; i++) {
|
|
441
|
-
new iam.Role(this, `Role${i}`, {
|
|
441
|
+
const role = new iam.Role(this, `Role${i}`, {
|
|
442
442
|
assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
|
|
443
443
|
});
|
|
444
|
+
const cfnRole = role.node.defaultChild;
|
|
445
|
+
|
|
446
|
+
// For any extra IAM roles created, add a ton of metadata so that the template size is > 50 KiB.
|
|
447
|
+
if (i > 1) {
|
|
448
|
+
for(let i = 1; i <= 30 ; i++) {
|
|
449
|
+
cfnRole.addMetadata('a'.repeat(1000), 'v');
|
|
450
|
+
}
|
|
451
|
+
}
|
|
444
452
|
}
|
|
445
453
|
}
|
|
446
454
|
}
|
|
@@ -792,6 +800,7 @@ switch (stackSet) {
|
|
|
792
800
|
|
|
793
801
|
new LambdaStack(app, `${stackPrefix}-lambda`);
|
|
794
802
|
|
|
803
|
+
// This stack is used to test diff with large templates by creating a role with a ton of metadata
|
|
795
804
|
new IamRolesStack(app, `${stackPrefix}-iam-roles`);
|
|
796
805
|
|
|
797
806
|
if (process.env.ENABLE_VPC_TESTING == 'IMPORT') {
|
|
@@ -835,6 +844,7 @@ switch (stackSet) {
|
|
|
835
844
|
|
|
836
845
|
new StackWithNestedStack(app, `${stackPrefix}-with-nested-stack`);
|
|
837
846
|
new StackWithNestedStackUsingParameters(app, `${stackPrefix}-with-nested-stack-using-parameters`);
|
|
847
|
+
new StackWithDoublyNestedStack(app, `${stackPrefix}-with-doubly-nested-stack`);
|
|
838
848
|
new ListStack(app, `${stackPrefix}-list-stacks`)
|
|
839
849
|
new ListMultipleDependentStack(app, `${stackPrefix}-list-multiple-dependent-stacks`);
|
|
840
850
|
|
|
@@ -25,6 +25,21 @@ class MyNestedStack extends cfn.NestedStack {
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
class DoublyNestedStack extends cfn.NestedStack {
|
|
29
|
+
constructor(scope, id) {
|
|
30
|
+
super(scope, id);
|
|
31
|
+
|
|
32
|
+
new MyNestedStack(this, 'Nestor');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
class StackWithDoublyNestedStack extends Stack {
|
|
37
|
+
constructor(scope, id) {
|
|
38
|
+
super(scope, id);
|
|
39
|
+
new DoublyNestedStack(this, 'DoubleDouble');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
28
43
|
class StackWithNestedStackUsingParameters extends Stack {
|
|
29
44
|
constructor(scope, id) {
|
|
30
45
|
super(scope, id);
|
|
@@ -47,3 +62,4 @@ class MyNestedStackUsingParameters extends cfn.NestedStack {
|
|
|
47
62
|
|
|
48
63
|
exports.StackWithNestedStack = StackWithNestedStack;
|
|
49
64
|
exports.StackWithNestedStackUsingParameters = StackWithNestedStackUsingParameters;
|
|
65
|
+
exports.StackWithDoublyNestedStack = StackWithDoublyNestedStack;
|