aws-cdk 2.9.0 → 2.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CONTRIBUTING.md +1 -1
- package/README.md +3 -2
- package/bin/cdk.d.ts +1 -3
- package/bin/cdk.js +3 -511
- package/build-info.json +2 -2
- package/lib/api/aws-auth/sdk.d.ts +2 -0
- package/lib/api/aws-auth/sdk.js +4 -1
- package/lib/api/cloudformation-deployments.d.ts +8 -5
- package/lib/api/cloudformation-deployments.js +90 -38
- package/lib/api/cxapp/cloud-executable.js +12 -8
- package/lib/api/evaluate-cloudformation-template.js +34 -2
- package/lib/api/hotswap/appsync-mapping-templates.d.ts +3 -0
- package/lib/api/hotswap/appsync-mapping-templates.js +69 -0
- package/lib/api/hotswap/lambda-functions.js +48 -13
- package/lib/api/hotswap-deployments.js +3 -1
- package/lib/api/toolkit-info.js +5 -5
- package/lib/api/util/placeholders.d.ts +6 -0
- package/lib/api/util/placeholders.js +25 -0
- package/lib/assets.js +2 -1
- package/lib/cdk-toolkit.js +3 -3
- package/lib/cli.d.ts +3 -0
- package/lib/cli.js +545 -0
- package/lib/commands/context.d.ts +0 -16
- package/lib/commands/context.js +2 -20
- package/lib/commands/docs.d.ts +0 -13
- package/lib/commands/docs.js +2 -19
- package/lib/commands/doctor.d.ts +0 -5
- package/lib/commands/doctor.js +2 -9
- package/lib/context-providers/ami.d.ts +1 -1
- package/lib/context-providers/ami.js +3 -3
- package/lib/context-providers/availability-zones.d.ts +1 -1
- package/lib/context-providers/availability-zones.js +3 -3
- package/lib/context-providers/endpoint-service-availability-zones.d.ts +1 -1
- package/lib/context-providers/endpoint-service-availability-zones.js +3 -3
- package/lib/context-providers/hosted-zones.d.ts +1 -1
- package/lib/context-providers/hosted-zones.js +3 -3
- package/lib/context-providers/index.d.ts +6 -0
- package/lib/context-providers/index.js +18 -5
- package/lib/context-providers/keys.d.ts +1 -1
- package/lib/context-providers/keys.js +3 -3
- package/lib/context-providers/load-balancers.d.ts +1 -1
- package/lib/context-providers/load-balancers.js +4 -4
- package/lib/context-providers/security-groups.d.ts +1 -1
- package/lib/context-providers/security-groups.js +3 -3
- package/lib/context-providers/ssm-parameters.d.ts +1 -1
- package/lib/context-providers/ssm-parameters.js +3 -3
- package/lib/context-providers/vpcs.d.ts +1 -1
- package/lib/context-providers/vpcs.js +6 -3
- package/lib/index.d.ts +3 -0
- package/lib/index.js +17 -0
- package/lib/init-templates/v1/app/csharp/cdk.template.json +1 -1
- package/lib/init-templates/v1/app/fsharp/cdk.template.json +1 -1
- package/lib/init-templates/v1/app/javascript/README.md +5 -5
- package/lib/init-templates/v1/app/typescript/README.md +7 -7
- package/lib/init-templates/v1/lib/typescript/README.template.md +4 -4
- package/lib/init-templates/v1/sample-app/csharp/cdk.template.json +1 -1
- package/lib/init-templates/v1/sample-app/fsharp/cdk.template.json +1 -1
- package/lib/init-templates/v1/sample-app/javascript/README.template.md +7 -6
- package/lib/init-templates/v1/sample-app/typescript/README.template.md +9 -9
- package/lib/init-templates/v2/app/csharp/cdk.template.json +1 -1
- package/lib/init-templates/v2/app/fsharp/cdk.template.json +1 -1
- package/lib/init-templates/v2/app/javascript/README.md +5 -5
- package/lib/init-templates/v2/app/typescript/README.md +7 -7
- package/lib/init-templates/v2/lib/typescript/README.template.md +4 -4
- package/lib/init-templates/v2/sample-app/csharp/cdk.template.json +1 -1
- package/lib/init-templates/v2/sample-app/fsharp/cdk.template.json +1 -1
- package/lib/init-templates/v2/sample-app/javascript/README.template.md +5 -5
- package/lib/init-templates/v2/sample-app/typescript/README.template.md +7 -7
- package/lib/plugin.d.ts +15 -1
- package/lib/plugin.js +17 -3
- package/lib/util/asset-publishing.d.ts +1 -1
- package/lib/util/asset-publishing.js +4 -4
- package/npm-shrinkwrap.json +96 -52
- package/package.json +16 -15
- package/test/api/cloud-executable.test.js +57 -32
- package/test/api/cloudformation-deployments.test.js +643 -1
- package/test/api/hotswap/appsync-mapping-templates-hotswap-deployments.test.d.ts +1 -0
- package/test/api/hotswap/appsync-mapping-templates-hotswap-deployments.test.js +336 -0
- package/test/api/hotswap/hotswap-deployments.test.js +2 -2
- package/test/api/hotswap/hotswap-test-setup.d.ts +7 -1
- package/test/api/hotswap/hotswap-test-setup.js +22 -3
- package/test/api/hotswap/lambda-functions-docker-hotswap-deployments.test.js +59 -2
- package/test/api/hotswap/lambda-functions-hotswap-deployments.test.js +175 -2
- package/test/api/hotswap/lambda-functions-inline-hotswap-deployments.test.js +2 -2
- package/test/api/hotswap/lambda-versions-aliases-hotswap-deployments.test.js +2 -2
- package/test/api/hotswap/state-machine-hotswap-deployments.test.js +72 -1
- package/test/api/logs/logs-monitor.test.js +9 -13
- package/test/cdk-docs.test.js +4 -7
- package/test/cdk-doctor.test.js +3 -4
- package/test/context-providers/generic.test.js +7 -6
- package/test/context-providers/vpcs.test.js +132 -1
- package/test/diff-nested-stacks-templates/one-output-one-param-stack.nested.template.json +20 -0
- package/test/diff-nested-stacks-templates/one-resource-one-stack-stack.nested.template.json +19 -0
- package/test/diff-nested-stacks-templates/one-resource-stack.nested.template.json +10 -0
- package/test/diff-nested-stacks-templates/one-resource-two-stacks-stack.nested.template.json +28 -0
- package/test/diff.test.js +215 -96
- package/test/util/mock-sdk.d.ts +9 -1
- package/test/util/mock-sdk.js +13 -3
- package/test/util.js +18 -1
|
@@ -7,6 +7,13 @@ const region_info_1 = require("@aws-cdk/region-info");
|
|
|
7
7
|
const contextproviders = require("../../context-providers");
|
|
8
8
|
const logging_1 = require("../../logging");
|
|
9
9
|
const cloud_assembly_1 = require("./cloud-assembly");
|
|
10
|
+
const semver = require("semver");
|
|
11
|
+
/**
|
|
12
|
+
* The Cloud Assembly schema version where the framework started to generate analytics itself
|
|
13
|
+
*
|
|
14
|
+
* See https://github.com/aws/aws-cdk/pull/10306
|
|
15
|
+
*/
|
|
16
|
+
const TEMPLATE_INCLUDES_ANALYTICS_SCHEMA_VERSION = '6.0.0';
|
|
10
17
|
/**
|
|
11
18
|
* Represent the Cloud Executable and the synthesis we can do on it
|
|
12
19
|
*/
|
|
@@ -64,13 +71,10 @@ class CloudExecutable {
|
|
|
64
71
|
continue;
|
|
65
72
|
}
|
|
66
73
|
}
|
|
67
|
-
if (trackVersions) {
|
|
68
|
-
// @
|
|
69
|
-
//
|
|
70
|
-
//
|
|
71
|
-
// the template. However, in order to support old framework versions
|
|
72
|
-
// that don't synthesize this info yet, we can only remove this code
|
|
73
|
-
// once we break backwards compatibility.
|
|
74
|
+
if (trackVersions && !semver.gte(assembly.version, TEMPLATE_INCLUDES_ANALYTICS_SCHEMA_VERSION)) {
|
|
75
|
+
// @deprecate(v2): the framework now manages its own analytics. For
|
|
76
|
+
// Cloud Assemblies *older* than when we introduced this feature, have
|
|
77
|
+
// the CLI add it. Otherwise, do nothing.
|
|
74
78
|
await this.addMetadataResource(assembly);
|
|
75
79
|
}
|
|
76
80
|
return new cloud_assembly_1.CloudAssembly(assembly);
|
|
@@ -194,4 +198,4 @@ function formatModules(runtime) {
|
|
|
194
198
|
}
|
|
195
199
|
return modules.join(',');
|
|
196
200
|
}
|
|
197
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWQtZXhlY3V0YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNsb3VkLWV4ZWN1dGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkJBQW9DO0FBQ3BDLHlDQUF5QztBQUN6QyxzREFBa0Q7QUFDbEQsNERBQTREO0FBQzVELDJDQUErQztBQUcvQyxxREFBaUQ7QUF3QmpEOztHQUVHO0FBQ0gsTUFBYSxlQUFlO0lBRzFCLFlBQTZCLEtBQTJCO1FBQTNCLFVBQUssR0FBTCxLQUFLLENBQXNCO0lBQ3hELENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsTUFBTTtRQUNmLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQUMsVUFBVSxDQUFDLHFCQUE4QixJQUFJO1FBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDL0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNqRDtRQUNELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRU8sS0FBSyxDQUFDLFlBQVk7UUFDeEIsTUFBTSxhQUFhLEdBQVksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUUzRixpR0FBaUc7UUFDakcsMkVBQTJFO1FBQzNFLG1GQUFtRjtRQUNuRiw4RUFBOEU7UUFDOUUsSUFBSSxxQkFBOEMsQ0FBQztRQUNuRCxPQUFPLElBQUksRUFBRTtZQUNYLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtB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SUFFMUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUN2RCxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ2xEO0lBQ0QsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgeyBSZWdpb25JbmZvIH0gZnJvbSAnQGF3cy1jZGsvcmVnaW9uLWluZm8nO1xuaW1wb3J0ICogYXMgY29udGV4dHByb3ZpZGVycyBmcm9tICcuLi8uLi9jb250ZXh0LXByb3ZpZGVycyc7XG5pbXBvcnQgeyBkZWJ1Zywgd2FybmluZyB9IGZyb20gJy4uLy4uL2xvZ2dpbmcnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uLy4uL3NldHRpbmdzJztcbmltcG9ydCB7IFNka1Byb3ZpZGVyIH0gZnJvbSAnLi4vYXdzLWF1dGgnO1xuaW1wb3J0IHsgQ2xvdWRBc3NlbWJseSB9IGZyb20gJy4vY2xvdWQtYXNzZW1ibHknO1xuXG4vKipcbiAqIEByZXR1cm5zIG91dHB1dCBkaXJlY3RvcnlcbiAqL1xudHlwZSBTeW50aGVzaXplciA9IChhd3M6IFNka1Byb3ZpZGVyLCBjb25maWc6IENvbmZpZ3VyYXRpb24pID0+IFByb21pc2U8Y3hhcGkuQ2xvdWRBc3NlbWJseT47XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xvdWRFeGVjdXRhYmxlUHJvcHMge1xuICAvKipcbiAgICogQXBwbGljYXRpb24gY29uZmlndXJhdGlvbiAoc2V0dGluZ3MgYW5kIGNvbnRleHQpXG4gICAqL1xuICBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBBV1Mgb2JqZWN0ICh1c2VkIGJ5IHN5bnRoZXNpemVyIGFuZCBjb250ZXh0cHJvdmlkZXIpXG4gICAqL1xuICBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGludm9rZWQgdG8gc3ludGhlc2l6ZSB0aGUgYWN0dWFsIHN0YWNrc1xuICAgKi9cbiAgc3ludGhlc2l6ZXI6IFN5bnRoZXNpemVyO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudCB0aGUgQ2xvdWQgRXhlY3V0YWJsZSBhbmQgdGhlIHN5bnRoZXNpcyB3ZSBjYW4gZG8gb24gaXRcbiAqL1xuZXhwb3J0IGNsYXNzIENsb3VkRXhlY3V0YWJsZSB7XG4gIHByaXZhdGUgX2Nsb3VkQXNzZW1ibHk/OiBDbG91ZEFzc2VtYmx5O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IENsb3VkRXhlY3V0YWJsZVByb3BzKSB7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlcmUgaXMgYW4gYXBwIGNvbW1hbmQgZnJvbSB0aGUgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHVibGljIGdldCBoYXNBcHAoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5wcm9wcy5jb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2FwcCddKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW50aGVzaXplIGEgc2V0IG9mIHN0YWNrcy5cbiAgICpcbiAgICogQHBhcmFtIGNhY2hlQ2xvdWRBc3NlbWJseSB3aGV0aGVyIHRvIGNhY2hlIHRoZSBDbG91ZCBBc3NlbWJseSBhZnRlciBpdCBoYXMgYmVlbiBmaXJzdCBzeW50aGVzaXplZC5cbiAgICogICBUaGlzIGlzICd0cnVlJyBieSBkZWZhdWx0LCBhbmQgb25seSBzZXQgdG8gJ2ZhbHNlJyBmb3IgJ2NkayB3YXRjaCcsXG4gICAqICAgd2hpY2ggbmVlZHMgdG8gcmUtc3ludGhlc2l6ZSB0aGUgQXNzZW1ibHkgZWFjaCB0aW1lIGl0IGRldGVjdHMgYSBjaGFuZ2UgdG8gdGhlIHByb2plY3QgZmlsZXNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzeW50aGVzaXplKGNhY2hlQ2xvdWRBc3NlbWJseTogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPENsb3VkQXNzZW1ibHk+IHtcbiAgICBpZiAoIXRoaXMuX2Nsb3VkQXNzZW1ibHkgfHwgIWNhY2hlQ2xvdWRBc3NlbWJseSkge1xuICAgICAgdGhpcy5fY2xvdWRBc3NlbWJseSA9IGF3YWl0IHRoaXMuZG9TeW50aGVzaXplKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jbG91ZEFzc2VtYmx5O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkb1N5bnRoZXNpemUoKTogUHJvbWlzZTxDbG91ZEFzc2VtYmx5PiB7XG4gICAgY29uc3QgdHJhY2tWZXJzaW9uczogYm9vbGVhbiA9IHRoaXMucHJvcHMuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWyd2ZXJzaW9uUmVwb3J0aW5nJ10pO1xuXG4gICAgLy8gV2UgbWF5IG5lZWQgdG8gcnVuIHRoZSBjbG91ZCBleGVjdXRhYmxlIG11bHRpcGxlIHRpbWVzIGluIG9yZGVyIHRvIHNhdGlzZnkgYWxsIG1pc3NpbmcgY29udGV4dFxuICAgIC8vIChXaGVuIHRoZSBleGVjdXRhYmxlIHJ1bnMsIGl0IHdpbGwgdGVsbCB1cyBhYm91dCBjb250ZXh0IGl0IHdhbnRzIHRvIHVzZVxuICAgIC8vIGJ1dCBpdCBtaXNzaW5nLiBXZSdsbCB0aGVuIGxvb2sgdXAgdGhlIGNvbnRleHQgYW5kIHJ1biB0aGUgZXhlY3V0YWJsZSBhZ2FpbiwgYW5kXG4gICAgLy8gYWdhaW4sIHVudGlsIGl0IGRvZXNuJ3QgY29tcGxhaW4gYW55bW9yZSBvciB3ZSd2ZSBzdG9wcGVkIG1ha2luZyBwcm9ncmVzcykuXG4gICAgbGV0IHByZXZpb3VzbHlNaXNzaW5nS2V5czogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQ7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGFzc2VtYmx5ID0gYXdhaXQgdGhpcy5wcm9wcy5zeW50aGVzaXplcih0aGlzLnByb3BzLnNka1Byb3ZpZGVyLCB0aGlzLnByb3BzLmNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICBpZiAoYXNzZW1ibHkubWFuaWZlc3QubWlzc2luZyAmJiBhc3NlbWJseS5tYW5pZmVzdC5taXNzaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgbWlzc2luZ0tleXMgPSBtaXNzaW5nQ29udGV4dEtleXMoYXNzZW1ibHkubWFuaWZlc3QubWlzc2luZyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmNhbkxvb2t1cCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdDb250ZXh0IGxvb2t1cHMgaGF2ZSBiZWVuIGRpc2FibGVkLiAnXG4gICAgICAgICAgICArICdNYWtlIHN1cmUgYWxsIG5lY2Vzc2FyeSBjb250ZXh0IGlzIGFscmVhZHkgaW4gXFwnY2RrLmNvbnRleHQuanNvblxcJyBieSBydW5uaW5nIFxcJ2NkayBzeW50aFxcJyBvbiBhIG1hY2hpbmUgd2l0aCBzdWZmaWNpZW50IEFXUyBjcmVkZW50aWFscyBhbmQgY29tbWl0dGluZyB0aGUgcmVzdWx0LiAnXG4gICAgICAgICAgICArIGBNaXNzaW5nIGNvbnRleHQga2V5czogJyR7QXJyYXkuZnJvbShtaXNzaW5nS2V5cykuam9pbignLCAnKX0nYCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdHJ5TG9va3VwID0gdHJ1ZTtcbiAgICAgICAgaWYgKHByZXZpb3VzbHlNaXNzaW5nS2V5cyAmJiBzZXRzRXF1YWwobWlzc2luZ0tleXMsIHByZXZpb3VzbHlNaXNzaW5nS2V5cykpIHtcbiAgICAgICAgICBkZWJ1ZygnTm90IG1ha2luZyBwcm9ncmVzcyB0cnlpbmcgdG8gcmVzb2x2ZSBlbnZpcm9ubWVudGFsIGNvbnRleHQuIEdpdmluZyB1cC4nKTtcbiAgICAgICAgICB0cnlMb29rdXAgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzbHlNaXNzaW5nS2V5cyA9IG1pc3NpbmdLZXlzO1xuXG4gICAgICAgIGlmICh0cnlMb29rdXApIHtcbiAgICAgICAgICBkZWJ1ZygnU29tZSBjb250ZXh0IGluZm9ybWF0aW9uIGlzIG1pc3NpbmcuIEZldGNoaW5nLi4uJyk7XG5cbiAgICAgICAgICBhd2FpdCBjb250ZXh0cHJvdmlkZXJzLnByb3ZpZGVDb250ZXh0VmFsdWVzKFxuICAgICAgICAgICAgYXNzZW1ibHkubWFuaWZlc3QubWlzc2luZyxcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY29uZmlndXJhdGlvbi5jb250ZXh0LFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5zZGtQcm92aWRlcik7XG5cbiAgICAgICAgICAvLyBDYWNoZSB0aGUgbmV3IGNvbnRleHQgdG8gZGlza1xuICAgICAgICAgIGF3YWl0IHRoaXMucHJvcHMuY29uZmlndXJhdGlvbi5zYXZlQ29udGV4dCgpO1xuXG4gICAgICAgICAgLy8gRXhlY3V0ZSBhZ2FpblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0cmFja1ZlcnNpb25zKSB7XG4gICAgICAgIC8vIEBkZXByZWNhdGVkKHYyKTogcmVtb3ZlIHRoaXMgJ2lmJyBibG9jayBhbmQgYWxsIGNvZGUgcmVmZXJlbmNlZCBieSBpdC5cbiAgICAgICAgLy8gVGhpcyBzaG91bGQgaG9uZXN0bHkgbm90IGJlIGRvbmUgaGVyZS4gVGhlIGZyYW1ld29ya1xuICAgICAgICAvLyBzaG91bGQgKGFuZCB3aWxsLCBzaG9ydGx5KSBzeW50aGVzaXplIHRoaXMgaW5mb3JtYXRpb24gZGlyZWN0bHkgaW50b1xuICAgICAgICAvLyB0aGUgdGVtcGxhdGUuIEhvd2V2ZXIsIGluIG9yZGVyIHRvIHN1cHBvcnQgb2xkIGZyYW1ld29yayB2ZXJzaW9uc1xuICAgICAgICAvLyB0aGF0IGRvbid0IHN5bnRoZXNpemUgdGhpcyBpbmZvIHlldCwgd2UgY2FuIG9ubHkgcmVtb3ZlIHRoaXMgY29kZVxuICAgICAgICAvLyBvbmNlIHdlIGJyZWFrIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuICAgICAgICBhd2FpdCB0aGlzLmFkZE1ldGFkYXRhUmVzb3VyY2UoYXNzZW1ibHkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENsb3VkQXNzZW1ibHkoYXNzZW1ibHkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNb2RpZnkgdGhlIHRlbXBsYXRlcyBpbiB0aGUgYXNzZW1ibHkgaW4tcGxhY2UgdG8gYWRkIG1ldGFkYXRhIHJlc291cmNlIGRlY2xhcmF0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBhZGRNZXRhZGF0YVJlc291cmNlKHJvb3RBc3NlbWJseTogY3hhcGkuQ2xvdWRBc3NlbWJseSkge1xuICAgIGlmICghcm9vdEFzc2VtYmx5LnJ1bnRpbWUpIHsgcmV0dXJuOyB9XG5cbiAgICBjb25zdCBtb2R1bGVzID0gZm9ybWF0TW9kdWxlcyhyb290QXNzZW1ibHkucnVudGltZSk7XG4gICAgYXdhaXQgcHJvY2Vzc0Fzc2VtYmx5KHJvb3RBc3NlbWJseSk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiBwcm9jZXNzQXNzZW1ibHkoYXNzZW1ibHk6IGN4YXBpLkNsb3VkQXNzZW1ibHkpIHtcbiAgICAgIGZvciAoY29uc3Qgc3RhY2sgb2YgYXNzZW1ibHkuc3RhY2tzKSB7XG4gICAgICAgIGF3YWl0IHByb2Nlc3NTdGFjayhzdGFjayk7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IG5lc3RlZCBvZiBhc3NlbWJseS5uZXN0ZWRBc3NlbWJsaWVzKSB7XG4gICAgICAgIGF3YWl0IHByb2Nlc3NBc3NlbWJseShuZXN0ZWQubmVzdGVkQXNzZW1ibHkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NTdGFjayhzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0KSB7XG4gICAgICBjb25zdCByZXNvdXJjZVByZXNlbnQgPSBzdGFjay5lbnZpcm9ubWVudC5yZWdpb24gPT09IGN4YXBpLlVOS05PV05fUkVHSU9OXG4gICAgICAgIHx8IFJlZ2lvbkluZm8uZ2V0KHN0YWNrLmVudmlyb25tZW50LnJlZ2lvbikuY2RrTWV0YWRhdGFSZXNvdXJjZUF2YWlsYWJsZTtcbiAgICAgIGlmICghcmVzb3VyY2VQcmVzZW50KSB7IHJldHVybjsgfVxuXG4gICAgICBpZiAoIXN0YWNrLnRlbXBsYXRlLlJlc291cmNlcykge1xuICAgICAgICBzdGFjay50ZW1wbGF0ZS5SZXNvdXJjZXMgPSB7fTtcbiAgICAgIH1cbiAgICAgIGlmIChzdGFjay50ZW1wbGF0ZS5SZXNvdXJjZXMuQ0RLTWV0YWRhdGEpIHtcbiAgICAgICAgLy8gQWxyZWFkeSBhZGRlZCBieSBmcmFtZXdvcmssIHRoaXMgaXMgZXhwZWN0ZWQuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3RhY2sudGVtcGxhdGUuUmVzb3VyY2VzLkNES01ldGFkYXRhID0ge1xuICAgICAgICBUeXBlOiAnQVdTOjpDREs6Ok1ldGFkYXRhJyxcbiAgICAgICAgUHJvcGVydGllczoge1xuICAgICAgICAgIE1vZHVsZXM6IG1vZHVsZXMsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBpZiAoc3RhY2suZW52aXJvbm1lbnQucmVnaW9uID09PSBjeGFwaS5VTktOT1dOX1JFR0lPTikge1xuICAgICAgICBzdGFjay50ZW1wbGF0ZS5Db25kaXRpb25zID0gc3RhY2sudGVtcGxhdGUuQ29uZGl0aW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgY29uZE5hbWUgPSAnQ0RLTWV0YWRhdGFBdmFpbGFibGUnO1xuICAgICAgICBpZiAoIXN0YWNrLnRlbXBsYXRlLkNvbmRpdGlvbnNbY29uZE5hbWVdKSB7XG4gICAgICAgICAgc3RhY2sudGVtcGxhdGUuQ29uZGl0aW9uc1tjb25kTmFtZV0gPSBfbWFrZUNka01ldGFkYXRhQXZhaWxhYmxlQ29uZGl0aW9uKCk7XG4gICAgICAgICAgc3RhY2sudGVtcGxhdGUuUmVzb3VyY2VzLkNES01ldGFkYXRhLkNvbmRpdGlvbiA9IGNvbmROYW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdhcm5pbmcoYFRoZSBzdGFjayAke3N0YWNrLmlkfSBhbHJlYWR5IGluY2x1ZGVzIGEgJHtjb25kTmFtZX0gY29uZGl0aW9uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVGhlIHRlbXBsYXRlIGhhcyBjaGFuZ2VkIGluLW1lbW9yeSwgYnV0IHRoZSBmaWxlIG9uIGRpc2sgcmVtYWlucyB1bmNoYW5nZWQgc28gZmFyLlxuICAgICAgLy8gVGhlIENMSSAqbWlnaHQqIGxhdGVyIG9uIGRlcGxveSB0aGUgaW4tbWVtb3J5IHZlcnNpb24gKGlmIGl0J3MgPDUwa0IpIG9yIHVzZSB0aGVcbiAgICAgIC8vIG9uLWRpc2sgdmVyc2lvbiAoaWYgaXQncyA+NTBrQikuXG4gICAgICAvL1xuICAgICAgLy8gQmUgc3VyZSB0byBmbHVzaCB0aGUgY2hhbmdlcyB3ZSBqdXN0IG1hZGUgYmFjayB0byBkaXNrLiBUaGUgb24tZGlzayBmb3JtYXQgaXMgYWx3YXlzXG4gICAgICAvLyBKU09OLlxuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHN0YWNrLnRlbXBsYXRlRnVsbFBhdGgsIEpTT04uc3RyaW5naWZ5KHN0YWNrLnRlbXBsYXRlLCB1bmRlZmluZWQsIDIpLCB7IGVuY29kaW5nOiAndXRmLTgnIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGNhbkxvb2t1cCgpIHtcbiAgICByZXR1cm4gISEodGhpcy5wcm9wcy5jb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2xvb2t1cHMnXSkgPz8gdHJ1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm4gYWxsIGtleXMgb2YgbWlzc2luZyBjb250ZXh0IGl0ZW1zXG4gKi9cbmZ1bmN0aW9uIG1pc3NpbmdDb250ZXh0S2V5cyhtaXNzaW5nPzogY3hhcGkuTWlzc2luZ0NvbnRleHRbXSk6IFNldDxzdHJpbmc+IHtcbiAgcmV0dXJuIG5ldyBTZXQoKG1pc3NpbmcgfHwgW10pLm1hcChtID0+IG0ua2V5KSk7XG59XG5cbmZ1bmN0aW9uIHNldHNFcXVhbDxBPihhOiBTZXQ8QT4sIGI6IFNldDxBPikge1xuICBpZiAoYS5zaXplICE9PSBiLnNpemUpIHsgcmV0dXJuIGZhbHNlOyB9XG4gIGZvciAoY29uc3QgeCBvZiBhKSB7XG4gICAgaWYgKCFiLmhhcyh4KSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gX21ha2VDZGtNZXRhZGF0YUF2YWlsYWJsZUNvbmRpdGlvbigpIHtcbiAgcmV0dXJuIF9mbk9yKFJlZ2lvbkluZm8ucmVnaW9uc1xuICAgIC5maWx0ZXIocmkgPT4gcmkuY2RrTWV0YWRhdGFSZXNvdXJjZUF2YWlsYWJsZSlcbiAgICAubWFwKHJpID0+ICh7ICdGbjo6RXF1YWxzJzogW3sgUmVmOiAnQVdTOjpSZWdpb24nIH0sIHJpLm5hbWVdIH0pKSk7XG59XG5cbi8qKlxuICogVGhpcyB0YWtlcyBhIGJ1bmNoIG9mIG9wZXJhbmRzIGFuZCBjcmFmdHMgYW4gYEZuOjpPcmAgZm9yIHRob3NlLiBGdW5ueSB0aGluZyBpcyBgRm46Ok9yYCByZXF1aXJlc1xuICogYXQgbGVhc3QgMiBvcGVyYW5kcyBhbmQgYXQgbW9zdCAxMCBvcGVyYW5kcywgc28gd2UgaGF2ZSB0by4uLiBkbyB0aGlzLlxuICovXG5mdW5jdGlvbiBfZm5PcihvcGVyYW5kczogYW55W10pOiBhbnkge1xuICBpZiAob3BlcmFuZHMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYnVpbGQgYEZuOjpPcmAgd2l0aCB6ZXJvIG9wZXJhbmRzIScpO1xuICB9XG4gIGlmIChvcGVyYW5kcy5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gb3BlcmFuZHNbMF07XG4gIH1cbiAgaWYgKG9wZXJhbmRzLmxlbmd0aCA8PSAxMCkge1xuICAgIHJldHVybiB7ICdGbjo6T3InOiBvcGVyYW5kcyB9O1xuICB9XG4gIHJldHVybiBfZm5PcihfaW5Hcm91cHNPZihvcGVyYW5kcywgMTApLm1hcChncm91cCA9PiBfZm5Pcihncm91cCkpKTtcbn1cblxuZnVuY3Rpb24gX2luR3JvdXBzT2Y8VD4oYXJyYXk6IFRbXSwgbWF4R3JvdXA6IG51bWJlcik6IFRbXVtdIHtcbiAgY29uc3QgcmVzdWx0ID0gbmV3IEFycmF5PFRbXT4oKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkgKz0gbWF4R3JvdXApIHtcbiAgICByZXN1bHQucHVzaChhcnJheS5zbGljZShpLCBpICsgbWF4R3JvdXApKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNb2R1bGVzKHJ1bnRpbWU6IGN4YXBpLlJ1bnRpbWVJbmZvKTogc3RyaW5nIHtcbiAgY29uc3QgbW9kdWxlcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgLy8gaW5qZWN0IHRvb2xraXQgdmVyc2lvbiB0byBsaXN0IG9mIG1vZHVsZXNcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbiAgY29uc3QgdG9vbGtpdFZlcnNpb24gPSByZXF1aXJlKCcuLi8uLi8uLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uO1xuICBtb2R1bGVzLnB1c2goYGF3cy1jZGs9JHt0b29sa2l0VmVyc2lvbn1gKTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhydW50aW1lLmxpYnJhcmllcykuc29ydCgpKSB7XG4gICAgbW9kdWxlcy5wdXNoKGAke2tleX09JHtydW50aW1lLmxpYnJhcmllc1trZXldfWApO1xuICB9XG4gIHJldHVybiBtb2R1bGVzLmpvaW4oJywnKTtcbn1cbiJdfQ==
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWQtZXhlY3V0YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNsb3VkLWV4ZWN1dGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkJBQW9DO0FBQ3BDLHlDQUF5QztBQUN6QyxzREFBa0Q7QUFDbEQsNERBQTREO0FBQzVELDJDQUErQztBQUcvQyxxREFBaUQ7QUFDakQsaUNBQWlDO0FBT2pDOzs7O0dBSUc7QUFDSCxNQUFNLDBDQUEwQyxHQUFHLE9BQU8sQ0FBQztBQW1CM0Q7O0dBRUc7QUFDSCxNQUFhLGVBQWU7SUFHMUIsWUFBNkIsS0FBMkI7UUFBM0IsVUFBSyxHQUFMLEtBQUssQ0FBc0I7SUFDeEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxNQUFNO1FBQ2YsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBQyxVQUFVLENBQUMscUJBQThCLElBQUk7UUFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMvQyxJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ2pEO1FBQ0QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFTyxLQUFLLENBQUMsWUFBWTtRQUN4QixNQUFNLGFBQWEsR0FBWSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1FBRTNGLGlHQUFpRztRQUNqRywyRUFBMkU7UUFDM0UsbUZBQW1GO1FBQ25GLDhFQUE4RTtRQUM5RSxJQUFJLHFCQUE4QyxDQUFDO1FBQ25ELE9BQU8sSUFBSSxFQUFFO1lBQ1gsTUFB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LHVCQUF1QixDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ2hFLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBRTFDLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDdkQsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztLQUNsRDtJQUNELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHsgUmVnaW9uSW5mbyB9IGZyb20gJ0Bhd3MtY2RrL3JlZ2lvbi1pbmZvJztcbmltcG9ydCAqIGFzIGNvbnRleHRwcm92aWRlcnMgZnJvbSAnLi4vLi4vY29udGV4dC1wcm92aWRlcnMnO1xuaW1wb3J0IHsgZGVidWcsIHdhcm5pbmcgfSBmcm9tICcuLi8uLi9sb2dnaW5nJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi8uLi9zZXR0aW5ncyc7XG5pbXBvcnQgeyBTZGtQcm92aWRlciB9IGZyb20gJy4uL2F3cy1hdXRoJztcbmltcG9ydCB7IENsb3VkQXNzZW1ibHkgfSBmcm9tICcuL2Nsb3VkLWFzc2VtYmx5JztcbmltcG9ydCAqIGFzIHNlbXZlciBmcm9tICdzZW12ZXInO1xuXG4vKipcbiAqIEByZXR1cm5zIG91dHB1dCBkaXJlY3RvcnlcbiAqL1xudHlwZSBTeW50aGVzaXplciA9IChhd3M6IFNka1Byb3ZpZGVyLCBjb25maWc6IENvbmZpZ3VyYXRpb24pID0+IFByb21pc2U8Y3hhcGkuQ2xvdWRBc3NlbWJseT47XG5cbi8qKlxuICogVGhlIENsb3VkIEFzc2VtYmx5IHNjaGVtYSB2ZXJzaW9uIHdoZXJlIHRoZSBmcmFtZXdvcmsgc3RhcnRlZCB0byBnZW5lcmF0ZSBhbmFseXRpY3MgaXRzZWxmXG4gKlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9wdWxsLzEwMzA2XG4gKi9cbmNvbnN0IFRFTVBMQVRFX0lOQ0xVREVTX0FOQUxZVElDU19TQ0hFTUFfVkVSU0lPTiA9ICc2LjAuMCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xvdWRFeGVjdXRhYmxlUHJvcHMge1xuICAvKipcbiAgICogQXBwbGljYXRpb24gY29uZmlndXJhdGlvbiAoc2V0dGluZ3MgYW5kIGNvbnRleHQpXG4gICAqL1xuICBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBBV1Mgb2JqZWN0ICh1c2VkIGJ5IHN5bnRoZXNpemVyIGFuZCBjb250ZXh0cHJvdmlkZXIpXG4gICAqL1xuICBzZGtQcm92aWRlcjogU2RrUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGludm9rZWQgdG8gc3ludGhlc2l6ZSB0aGUgYWN0dWFsIHN0YWNrc1xuICAgKi9cbiAgc3ludGhlc2l6ZXI6IFN5bnRoZXNpemVyO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudCB0aGUgQ2xvdWQgRXhlY3V0YWJsZSBhbmQgdGhlIHN5bnRoZXNpcyB3ZSBjYW4gZG8gb24gaXRcbiAqL1xuZXhwb3J0IGNsYXNzIENsb3VkRXhlY3V0YWJsZSB7XG4gIHByaXZhdGUgX2Nsb3VkQXNzZW1ibHk/OiBDbG91ZEFzc2VtYmx5O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IENsb3VkRXhlY3V0YWJsZVByb3BzKSB7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlcmUgaXMgYW4gYXBwIGNvbW1hbmQgZnJvbSB0aGUgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHVibGljIGdldCBoYXNBcHAoKSB7XG4gICAgcmV0dXJuICEhdGhpcy5wcm9wcy5jb25maWd1cmF0aW9uLnNldHRpbmdzLmdldChbJ2FwcCddKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW50aGVzaXplIGEgc2V0IG9mIHN0YWNrcy5cbiAgICpcbiAgICogQHBhcmFtIGNhY2hlQ2xvdWRBc3NlbWJseSB3aGV0aGVyIHRvIGNhY2hlIHRoZSBDbG91ZCBBc3NlbWJseSBhZnRlciBpdCBoYXMgYmVlbiBmaXJzdCBzeW50aGVzaXplZC5cbiAgICogICBUaGlzIGlzICd0cnVlJyBieSBkZWZhdWx0LCBhbmQgb25seSBzZXQgdG8gJ2ZhbHNlJyBmb3IgJ2NkayB3YXRjaCcsXG4gICAqICAgd2hpY2ggbmVlZHMgdG8gcmUtc3ludGhlc2l6ZSB0aGUgQXNzZW1ibHkgZWFjaCB0aW1lIGl0IGRldGVjdHMgYSBjaGFuZ2UgdG8gdGhlIHByb2plY3QgZmlsZXNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBzeW50aGVzaXplKGNhY2hlQ2xvdWRBc3NlbWJseTogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPENsb3VkQXNzZW1ibHk+IHtcbiAgICBpZiAoIXRoaXMuX2Nsb3VkQXNzZW1ibHkgfHwgIWNhY2hlQ2xvdWRBc3NlbWJseSkge1xuICAgICAgdGhpcy5fY2xvdWRBc3NlbWJseSA9IGF3YWl0IHRoaXMuZG9TeW50aGVzaXplKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9jbG91ZEFzc2VtYmx5O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkb1N5bnRoZXNpemUoKTogUHJvbWlzZTxDbG91ZEFzc2VtYmx5PiB7XG4gICAgY29uc3QgdHJhY2tWZXJzaW9uczogYm9vbGVhbiA9IHRoaXMucHJvcHMuY29uZmlndXJhdGlvbi5zZXR0aW5ncy5nZXQoWyd2ZXJzaW9uUmVwb3J0aW5nJ10pO1xuXG4gICAgLy8gV2UgbWF5IG5lZWQgdG8gcnVuIHRoZSBjbG91ZCBleGVjdXRhYmxlIG11bHRpcGxlIHRpbWVzIGluIG9yZGVyIHRvIHNhdGlzZnkgYWxsIG1pc3NpbmcgY29udGV4dFxuICAgIC8vIChXaGVuIHRoZSBleGVjdXRhYmxlIHJ1bnMsIGl0IHdpbGwgdGVsbCB1cyBhYm91dCBjb250ZXh0IGl0IHdhbnRzIHRvIHVzZVxuICAgIC8vIGJ1dCBpdCBtaXNzaW5nLiBXZSdsbCB0aGVuIGxvb2sgdXAgdGhlIGNvbnRleHQgYW5kIHJ1biB0aGUgZXhlY3V0YWJsZSBhZ2FpbiwgYW5kXG4gICAgLy8gYWdhaW4sIHVudGlsIGl0IGRvZXNuJ3QgY29tcGxhaW4gYW55bW9yZSBvciB3ZSd2ZSBzdG9wcGVkIG1ha2luZyBwcm9ncmVzcykuXG4gICAgbGV0IHByZXZpb3VzbHlNaXNzaW5nS2V5czogU2V0PHN0cmluZz4gfCB1bmRlZmluZWQ7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGFzc2VtYmx5ID0gYXdhaXQgdGhpcy5wcm9wcy5zeW50aGVzaXplcih0aGlzLnByb3BzLnNka1Byb3ZpZGVyLCB0aGlzLnByb3BzLmNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICBpZiAoYXNzZW1ibHkubWFuaWZlc3QubWlzc2luZyAmJiBhc3NlbWJseS5tYW5pZmVzdC5taXNzaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgbWlzc2luZ0tleXMgPSBtaXNzaW5nQ29udGV4dEtleXMoYXNzZW1ibHkubWFuaWZlc3QubWlzc2luZyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmNhbkxvb2t1cCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdDb250ZXh0IGxvb2t1cHMgaGF2ZSBiZWVuIGRpc2FibGVkLiAnXG4gICAgICAgICAgICArICdNYWtlIHN1cmUgYWxsIG5lY2Vzc2FyeSBjb250ZXh0IGlzIGFscmVhZHkgaW4gXFwnY2RrLmNvbnRleHQuanNvblxcJyBieSBydW5uaW5nIFxcJ2NkayBzeW50aFxcJyBvbiBhIG1hY2hpbmUgd2l0aCBzdWZmaWNpZW50IEFXUyBjcmVkZW50aWFscyBhbmQgY29tbWl0dGluZyB0aGUgcmVzdWx0LiAnXG4gICAgICAgICAgICArIGBNaXNzaW5nIGNvbnRleHQga2V5czogJyR7QXJyYXkuZnJvbShtaXNzaW5nS2V5cykuam9pbignLCAnKX0nYCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdHJ5TG9va3VwID0gdHJ1ZTtcbiAgICAgICAgaWYgKHByZXZpb3VzbHlNaXNzaW5nS2V5cyAmJiBzZXRzRXF1YWwobWlzc2luZ0tleXMsIHByZXZpb3VzbHlNaXNzaW5nS2V5cykpIHtcbiAgICAgICAgICBkZWJ1ZygnTm90IG1ha2luZyBwcm9ncmVzcyB0cnlpbmcgdG8gcmVzb2x2ZSBlbnZpcm9ubWVudGFsIGNvbnRleHQuIEdpdmluZyB1cC4nKTtcbiAgICAgICAgICB0cnlMb29rdXAgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzbHlNaXNzaW5nS2V5cyA9IG1pc3NpbmdLZXlzO1xuXG4gICAgICAgIGlmICh0cnlMb29rdXApIHtcbiAgICAgICAgICBkZWJ1ZygnU29tZSBjb250ZXh0IGluZm9ybWF0aW9uIGlzIG1pc3NpbmcuIEZldGNoaW5nLi4uJyk7XG5cbiAgICAgICAgICBhd2FpdCBjb250ZXh0cHJvdmlkZXJzLnByb3ZpZGVDb250ZXh0VmFsdWVzKFxuICAgICAgICAgICAgYXNzZW1ibHkubWFuaWZlc3QubWlzc2luZyxcbiAgICAgICAgICAgIHRoaXMucHJvcHMuY29uZmlndXJhdGlvbi5jb250ZXh0LFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5zZGtQcm92aWRlcik7XG5cbiAgICAgICAgICAvLyBDYWNoZSB0aGUgbmV3IGNvbnRleHQgdG8gZGlza1xuICAgICAgICAgIGF3YWl0IHRoaXMucHJvcHMuY29uZmlndXJhdGlvbi5zYXZlQ29udGV4dCgpO1xuXG4gICAgICAgICAgLy8gRXhlY3V0ZSBhZ2FpblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0cmFja1ZlcnNpb25zICYmICFzZW12ZXIuZ3RlKGFzc2VtYmx5LnZlcnNpb24sIFRFTVBMQVRFX0lOQ0xVREVTX0FOQUxZVElDU19TQ0hFTUFfVkVSU0lPTikpIHtcbiAgICAgICAgLy8gQGRlcHJlY2F0ZSh2Mik6IHRoZSBmcmFtZXdvcmsgbm93IG1hbmFnZXMgaXRzIG93biBhbmFseXRpY3MuIEZvclxuICAgICAgICAvLyBDbG91ZCBBc3NlbWJsaWVzICpvbGRlciogdGhhbiB3aGVuIHdlIGludHJvZHVjZWQgdGhpcyBmZWF0dXJlLCBoYXZlXG4gICAgICAgIC8vIHRoZSBDTEkgYWRkIGl0LiBPdGhlcndpc2UsIGRvIG5vdGhpbmcuXG4gICAgICAgIGF3YWl0IHRoaXMuYWRkTWV0YWRhdGFSZXNvdXJjZShhc3NlbWJseSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ2xvdWRBc3NlbWJseShhc3NlbWJseSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vZGlmeSB0aGUgdGVtcGxhdGVzIGluIHRoZSBhc3NlbWJseSBpbi1wbGFjZSB0byBhZGQgbWV0YWRhdGEgcmVzb3VyY2UgZGVjbGFyYXRpb25zXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGFkZE1ldGFkYXRhUmVzb3VyY2Uocm9vdEFzc2VtYmx5OiBjeGFwaS5DbG91ZEFzc2VtYmx5KSB7XG4gICAgaWYgKCFyb290QXNzZW1ibHkucnVudGltZSkgeyByZXR1cm47IH1cblxuICAgIGNvbnN0IG1vZHVsZXMgPSBmb3JtYXRNb2R1bGVzKHJvb3RBc3NlbWJseS5ydW50aW1lKTtcbiAgICBhd2FpdCBwcm9jZXNzQXNzZW1ibHkocm9vdEFzc2VtYmx5KTtcblxuICAgIGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NBc3NlbWJseShhc3NlbWJseTogY3hhcGkuQ2xvdWRBc3NlbWJseSkge1xuICAgICAgZm9yIChjb25zdCBzdGFjayBvZiBhc3NlbWJseS5zdGFja3MpIHtcbiAgICAgICAgYXdhaXQgcHJvY2Vzc1N0YWNrKHN0YWNrKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgbmVzdGVkIG9mIGFzc2VtYmx5Lm5lc3RlZEFzc2VtYmxpZXMpIHtcbiAgICAgICAgYXdhaXQgcHJvY2Vzc0Fzc2VtYmx5KG5lc3RlZC5uZXN0ZWRBc3NlbWJseSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1N0YWNrKHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlUHJlc2VudCA9IHN0YWNrLmVudmlyb25tZW50LnJlZ2lvbiA9PT0gY3hhcGkuVU5LTk9XTl9SRUdJT05cbiAgICAgICAgfHwgUmVnaW9uSW5mby5nZXQoc3RhY2suZW52aXJvbm1lbnQucmVnaW9uKS5jZGtNZXRhZGF0YVJlc291cmNlQXZhaWxhYmxlO1xuICAgICAgaWYgKCFyZXNvdXJjZVByZXNlbnQpIHsgcmV0dXJuOyB9XG5cbiAgICAgIGlmICghc3RhY2sudGVtcGxhdGUuUmVzb3VyY2VzKSB7XG4gICAgICAgIHN0YWNrLnRlbXBsYXRlLlJlc291cmNlcyA9IHt9O1xuICAgICAgfVxuICAgICAgaWYgKHN0YWNrLnRlbXBsYXRlLlJlc291cmNlcy5DREtNZXRhZGF0YSkge1xuICAgICAgICAvLyBBbHJlYWR5IGFkZGVkIGJ5IGZyYW1ld29yaywgdGhpcyBpcyBleHBlY3RlZC5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzdGFjay50ZW1wbGF0ZS5SZXNvdXJjZXMuQ0RLTWV0YWRhdGEgPSB7XG4gICAgICAgIFR5cGU6ICdBV1M6OkNESzo6TWV0YWRhdGEnLFxuICAgICAgICBQcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgTW9kdWxlczogbW9kdWxlcyxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChzdGFjay5lbnZpcm9ubWVudC5yZWdpb24gPT09IGN4YXBpLlVOS05PV05fUkVHSU9OKSB7XG4gICAgICAgIHN0YWNrLnRlbXBsYXRlLkNvbmRpdGlvbnMgPSBzdGFjay50ZW1wbGF0ZS5Db25kaXRpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCBjb25kTmFtZSA9ICdDREtNZXRhZGF0YUF2YWlsYWJsZSc7XG4gICAgICAgIGlmICghc3RhY2sudGVtcGxhdGUuQ29uZGl0aW9uc1tjb25kTmFtZV0pIHtcbiAgICAgICAgICBzdGFjay50ZW1wbGF0ZS5Db25kaXRpb25zW2NvbmROYW1lXSA9IF9tYWtlQ2RrTWV0YWRhdGFBdmFpbGFibGVDb25kaXRpb24oKTtcbiAgICAgICAgICBzdGFjay50ZW1wbGF0ZS5SZXNvdXJjZXMuQ0RLTWV0YWRhdGEuQ29uZGl0aW9uID0gY29uZE5hbWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2FybmluZyhgVGhlIHN0YWNrICR7c3RhY2suaWR9IGFscmVhZHkgaW5jbHVkZXMgYSAke2NvbmROYW1lfSBjb25kaXRpb25gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgdGVtcGxhdGUgaGFzIGNoYW5nZWQgaW4tbWVtb3J5LCBidXQgdGhlIGZpbGUgb24gZGlzayByZW1haW5zIHVuY2hhbmdlZCBzbyBmYXIuXG4gICAgICAvLyBUaGUgQ0xJICptaWdodCogbGF0ZXIgb24gZGVwbG95IHRoZSBpbi1tZW1vcnkgdmVyc2lvbiAoaWYgaXQncyA8NTBrQikgb3IgdXNlIHRoZVxuICAgICAgLy8gb24tZGlzayB2ZXJzaW9uIChpZiBpdCdzID41MGtCKS5cbiAgICAgIC8vXG4gICAgICAvLyBCZSBzdXJlIHRvIGZsdXNoIHRoZSBjaGFuZ2VzIHdlIGp1c3QgbWFkZSBiYWNrIHRvIGRpc2suIFRoZSBvbi1kaXNrIGZvcm1hdCBpcyBhbHdheXNcbiAgICAgIC8vIEpTT04uXG4gICAgICBhd2FpdCBmcy53cml0ZUZpbGUoc3RhY2sudGVtcGxhdGVGdWxsUGF0aCwgSlNPTi5zdHJpbmdpZnkoc3RhY2sudGVtcGxhdGUsIHVuZGVmaW5lZCwgMiksIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXQgY2FuTG9va3VwKCkge1xuICAgIHJldHVybiAhISh0aGlzLnByb3BzLmNvbmZpZ3VyYXRpb24uc2V0dGluZ3MuZ2V0KFsnbG9va3VwcyddKSA/PyB0cnVlKTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiBhbGwga2V5cyBvZiBtaXNzaW5nIGNvbnRleHQgaXRlbXNcbiAqL1xuZnVuY3Rpb24gbWlzc2luZ0NvbnRleHRLZXlzKG1pc3Npbmc/OiBjeGFwaS5NaXNzaW5nQ29udGV4dFtdKTogU2V0PHN0cmluZz4ge1xuICByZXR1cm4gbmV3IFNldCgobWlzc2luZyB8fCBbXSkubWFwKG0gPT4gbS5rZXkpKTtcbn1cblxuZnVuY3Rpb24gc2V0c0VxdWFsPEE+KGE6IFNldDxBPiwgYjogU2V0PEE+KSB7XG4gIGlmIChhLnNpemUgIT09IGIuc2l6ZSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgZm9yIChjb25zdCB4IG9mIGEpIHtcbiAgICBpZiAoIWIuaGFzKHgpKSB7IHJldHVybiBmYWxzZTsgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBfbWFrZUNka01ldGFkYXRhQXZhaWxhYmxlQ29uZGl0aW9uKCkge1xuICByZXR1cm4gX2ZuT3IoUmVnaW9uSW5mby5yZWdpb25zXG4gICAgLmZpbHRlcihyaSA9PiByaS5jZGtNZXRhZGF0YVJlc291cmNlQXZhaWxhYmxlKVxuICAgIC5tYXAocmkgPT4gKHsgJ0ZuOjpFcXVhbHMnOiBbeyBSZWY6ICdBV1M6OlJlZ2lvbicgfSwgcmkubmFtZV0gfSkpKTtcbn1cblxuLyoqXG4gKiBUaGlzIHRha2VzIGEgYnVuY2ggb2Ygb3BlcmFuZHMgYW5kIGNyYWZ0cyBhbiBgRm46Ok9yYCBmb3IgdGhvc2UuIEZ1bm55IHRoaW5nIGlzIGBGbjo6T3JgIHJlcXVpcmVzXG4gKiBhdCBsZWFzdCAyIG9wZXJhbmRzIGFuZCBhdCBtb3N0IDEwIG9wZXJhbmRzLCBzbyB3ZSBoYXZlIHRvLi4uIGRvIHRoaXMuXG4gKi9cbmZ1bmN0aW9uIF9mbk9yKG9wZXJhbmRzOiBhbnlbXSk6IGFueSB7XG4gIGlmIChvcGVyYW5kcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBidWlsZCBgRm46Ok9yYCB3aXRoIHplcm8gb3BlcmFuZHMhJyk7XG4gIH1cbiAgaWYgKG9wZXJhbmRzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBvcGVyYW5kc1swXTtcbiAgfVxuICBpZiAob3BlcmFuZHMubGVuZ3RoIDw9IDEwKSB7XG4gICAgcmV0dXJuIHsgJ0ZuOjpPcic6IG9wZXJhbmRzIH07XG4gIH1cbiAgcmV0dXJuIF9mbk9yKF9pbkdyb3Vwc09mKG9wZXJhbmRzLCAxMCkubWFwKGdyb3VwID0+IF9mbk9yKGdyb3VwKSkpO1xufVxuXG5mdW5jdGlvbiBfaW5Hcm91cHNPZjxUPihhcnJheTogVFtdLCBtYXhHcm91cDogbnVtYmVyKTogVFtdW10ge1xuICBjb25zdCByZXN1bHQgPSBuZXcgQXJyYXk8VFtdPigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSArPSBtYXhHcm91cCkge1xuICAgIHJlc3VsdC5wdXNoKGFycmF5LnNsaWNlKGksIGkgKyBtYXhHcm91cCkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1vZHVsZXMocnVudGltZTogY3hhcGkuUnVudGltZUluZm8pOiBzdHJpbmcge1xuICBjb25zdCBtb2R1bGVzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAvLyBpbmplY3QgdG9vbGtpdCB2ZXJzaW9uIHRvIGxpc3Qgb2YgbW9kdWxlc1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICBjb25zdCB0b29sa2l0VmVyc2lvbiA9IHJlcXVpcmUoJy4uLy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb247XG4gIG1vZHVsZXMucHVzaChgYXdzLWNkaz0ke3Rvb2xraXRWZXJzaW9ufWApO1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJ1bnRpbWUubGlicmFyaWVzKS5zb3J0KCkpIHtcbiAgICBtb2R1bGVzLnB1c2goYCR7a2V5fT0ke3J1bnRpbWUubGlicmFyaWVzW2tleV19YCk7XG4gIH1cbiAgcmV0dXJuIG1vZHVsZXMuam9pbignLCcpO1xufVxuIl19
|
|
@@ -245,16 +245,40 @@ class EvaluateCloudFormationTemplate {
|
|
|
245
245
|
return resource.ResourceType.split('::')[1].toLowerCase();
|
|
246
246
|
}
|
|
247
247
|
getResourceTypeArnPartOfResource(resource) {
|
|
248
|
-
|
|
248
|
+
var _a;
|
|
249
|
+
const resourceType = resource.ResourceType;
|
|
250
|
+
const specialCaseResourceType = (_a = RESOURCE_TYPE_SPECIAL_NAMES[resourceType]) === null || _a === void 0 ? void 0 : _a.resourceType;
|
|
251
|
+
return specialCaseResourceType
|
|
252
|
+
? specialCaseResourceType
|
|
253
|
+
// this is the default case
|
|
254
|
+
: resourceType.split('::')[2].toLowerCase();
|
|
249
255
|
}
|
|
250
256
|
}
|
|
251
257
|
exports.EvaluateCloudFormationTemplate = EvaluateCloudFormationTemplate;
|
|
258
|
+
/**
|
|
259
|
+
* Usually, we deduce the names of the service and the resource type used to format the ARN from the CloudFormation resource type.
|
|
260
|
+
* For a CFN type like AWS::Service::ResourceType, the second segment becomes the service name, and the third the resource type
|
|
261
|
+
* (after converting both of them to lowercase).
|
|
262
|
+
* However, some resource types break this simple convention, and we need to special-case them.
|
|
263
|
+
* This map is for storing those cases.
|
|
264
|
+
*/
|
|
265
|
+
const RESOURCE_TYPE_SPECIAL_NAMES = {
|
|
266
|
+
'AWS::Events::EventBus': {
|
|
267
|
+
resourceType: 'event-bus',
|
|
268
|
+
},
|
|
269
|
+
};
|
|
252
270
|
const RESOURCE_TYPE_ATTRIBUTES_FORMATS = {
|
|
253
271
|
'AWS::IAM::Role': { Arn: iamArnFmt },
|
|
254
272
|
'AWS::IAM::User': { Arn: iamArnFmt },
|
|
255
273
|
'AWS::IAM::Group': { Arn: iamArnFmt },
|
|
256
274
|
'AWS::S3::Bucket': { Arn: s3ArnFmt },
|
|
257
275
|
'AWS::Lambda::Function': { Arn: stdColonResourceArnFmt },
|
|
276
|
+
'AWS::Events::EventBus': {
|
|
277
|
+
Arn: stdSlashResourceArnFmt,
|
|
278
|
+
// the name attribute of the EventBus is the same as the Ref
|
|
279
|
+
Name: parts => parts.resourceName,
|
|
280
|
+
},
|
|
281
|
+
'AWS::AppSync::GraphQLApi': { ApiId: appsyncGraphQlApiApiIdFmt },
|
|
258
282
|
};
|
|
259
283
|
function iamArnFmt(parts) {
|
|
260
284
|
// we skip region for IAM resources
|
|
@@ -268,6 +292,14 @@ function stdColonResourceArnFmt(parts) {
|
|
|
268
292
|
// this is a standard format for ARNs like: arn:aws:service:region:account:resourceType:resourceName
|
|
269
293
|
return `arn:${parts.partition}:${parts.service}:${parts.region}:${parts.account}:${parts.resourceType}:${parts.resourceName}`;
|
|
270
294
|
}
|
|
295
|
+
function stdSlashResourceArnFmt(parts) {
|
|
296
|
+
// this is a standard format for ARNs like: arn:aws:service:region:account:resourceType/resourceName
|
|
297
|
+
return `arn:${parts.partition}:${parts.service}:${parts.region}:${parts.account}:${parts.resourceType}/${parts.resourceName}`;
|
|
298
|
+
}
|
|
299
|
+
function appsyncGraphQlApiApiIdFmt(parts) {
|
|
300
|
+
// arn:aws:appsync:us-east-1:111111111111:apis/<apiId>
|
|
301
|
+
return parts.resourceName.split('/')[1];
|
|
302
|
+
}
|
|
271
303
|
async function asyncGlobalReplace(str, regex, cb) {
|
|
272
304
|
if (!regex.global) {
|
|
273
305
|
throw new Error('Regex must be created with /g flag');
|
|
@@ -286,4 +318,4 @@ async function asyncGlobalReplace(str, regex, cb) {
|
|
|
286
318
|
ret.push(str.substr(start));
|
|
287
319
|
return ret.join('');
|
|
288
320
|
}
|
|
289
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGUtY2xvdWRmb3JtYXRpb24tdGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJldmFsdWF0ZS1jbG91ZGZvcm1hdGlvbi10ZW1wbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFRQSxNQUFhLHNCQUFzQjtJQUdqQyxZQUE2QixHQUFTLEVBQW1CLFNBQWlCO1FBQTdDLFFBQUcsR0FBSCxHQUFHLENBQU07UUFBbUIsY0FBUyxHQUFULFNBQVMsQ0FBUTtJQUMxRSxDQUFDO0lBRU0sS0FBSyxDQUFDLGtCQUFrQjtRQUM3QixJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssU0FBUyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUN0RDtRQUNELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRU8sS0FBSyxDQUFDLGlCQUFpQjs7UUFDN0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQTJDLENBQUM7UUFDakUsSUFBSSxTQUE2QixDQUFDO1FBQ2xDLEdBQUc7WUFDRCxNQUFNLHNCQUFzQixHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDaEYsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixTQUFTLEVBQUUsU0FBUzthQUNyQixDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsbUNBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNuRSxTQUFTLEdBQUcsc0JBQXNCLENBQUMsU0FBUyxDQUFDO1NBQzlDLFFBQVEsU0FBUyxFQUFFO1FBQ3BCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztDQUNGO0FBMUJELHdEQTBCQztBQUVELE1BQWEsc0JBQXVCLFNBQVEsS0FBSztD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WUFBRSxNQUFNO1NBQUU7UUFFdEIsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUM1QyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFN0IsS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7S0FDekI7SUFDRCxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUU1QixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBBV1MgZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgeyBJU0RLIH0gZnJvbSAnLi9hd3MtYXV0aCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdFN0YWNrUmVzb3VyY2VzIHtcbiAgbGlzdFN0YWNrUmVzb3VyY2VzKCk6IFByb21pc2U8QVdTLkNsb3VkRm9ybWF0aW9uLlN0YWNrUmVzb3VyY2VTdW1tYXJ5W10+O1xufVxuXG5leHBvcnQgY2xhc3MgTGF6eUxpc3RTdGFja1Jlc291cmNlcyBpbXBsZW1lbnRzIExpc3RTdGFja1Jlc291cmNlcyB7XG4gIHByaXZhdGUgc3RhY2tSZXNvdXJjZXM6IEFXUy5DbG91ZEZvcm1hdGlvbi5TdGFja1Jlc291cmNlU3VtbWFyeVtdIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc2RrOiBJU0RLLCBwcml2YXRlIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nKSB7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbGlzdFN0YWNrUmVzb3VyY2VzKCk6IFByb21pc2U8QVdTLkNsb3VkRm9ybWF0aW9uLlN0YWNrUmVzb3VyY2VTdW1tYXJ5W10+IHtcbiAgICBpZiAodGhpcy5zdGFja1Jlc291cmNlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN0YWNrUmVzb3VyY2VzID0gYXdhaXQgdGhpcy5nZXRTdGFja1Jlc291cmNlcygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdGFja1Jlc291cmNlcztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0U3RhY2tSZXNvdXJjZXMoKTogUHJvbWlzZTxBV1MuQ2xvdWRGb3JtYXRpb24uU3RhY2tSZXNvdXJjZVN1bW1hcnlbXT4ge1xuICAgIGNvbnN0IHJldCA9IG5ldyBBcnJheTxBV1MuQ2xvdWRGb3JtYXRpb24uU3RhY2tSZXNvdXJjZVN1bW1hcnk+KCk7XG4gICAgbGV0IG5leHRUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IHN0YWNrUmVzb3VyY2VzUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNkay5jbG91ZEZvcm1hdGlvbigpLmxpc3RTdGFja1Jlc291cmNlcyh7XG4gICAgICAgIFN0YWNrTmFtZTogdGhpcy5zdGFja05hbWUsXG4gICAgICAgIE5leHRUb2tlbjogbmV4dFRva2VuLFxuICAgICAgfSkucHJvbWlzZSgpO1xuICAgICAgcmV0LnB1c2goLi4uKHN0YWNrUmVzb3VyY2VzUmVzcG9uc2UuU3RhY2tSZXNvdXJjZVN1bW1hcmllcyA/PyBbXSkpO1xuICAgICAgbmV4dFRva2VuID0gc3RhY2tSZXNvdXJjZXNSZXNwb25zZS5OZXh0VG9rZW47XG4gICAgfSB3aGlsZSAobmV4dFRva2VuKTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDZm5FdmFsdWF0aW9uRXhjZXB0aW9uIGV4dGVuZHMgRXJyb3Ige31cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZURlZmluaXRpb24ge1xuICByZWFkb25seSBMb2dpY2FsSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgVHlwZTogc3RyaW5nO1xuICByZWFkb25seSBQcm9wZXJ0aWVzOiB7IFtwOiBzdHJpbmddOiBhbnkgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGVQcm9wcyB7XG4gIHJlYWRvbmx5IHN0YWNrQXJ0aWZhY3Q6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcbiAgcmVhZG9ubHkgcGFyYW1ldGVyczogeyBbcGFyYW1ldGVyTmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHJlYWRvbmx5IGFjY291bnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhcnRpdGlvbjogc3RyaW5nO1xuICByZWFkb25seSB1cmxTdWZmaXg6IChyZWdpb246IHN0cmluZykgPT4gc3RyaW5nO1xuICByZWFkb25seSBsaXN0U3RhY2tSZXNvdXJjZXM6IExpc3RTdGFja1Jlc291cmNlcztcbn1cblxuZXhwb3J0IGNsYXNzIEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhY2tSZXNvdXJjZXM6IExpc3RTdGFja1Jlc291cmNlcztcbiAgcHJpdmF0ZSByZWFkb25seSB0ZW1wbGF0ZTogeyBbc2VjdGlvbjogc3RyaW5nXTogeyBbaGVhZGluZ3M6IHN0cmluZ106IGFueSB9IH07XG4gIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dDogeyBbazogc3RyaW5nXTogc3RyaW5nIH07XG4gIHByaXZhdGUgcmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcnRpdGlvbjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHVybFN1ZmZpeDogKHJlZ2lvbjogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIHByaXZhdGUgY2FjaGVkVXJsU3VmZml4OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZVByb3BzKSB7XG4gICAgdGhpcy5zdGFja1Jlc291cmNlcyA9IHByb3BzLmxpc3RTdGFja1Jlc291cmNlcztcbiAgICB0aGlzLnRlbXBsYXRlID0gcHJvcHMuc3RhY2tBcnRpZmFjdC50ZW1wbGF0ZTtcbiAgICB0aGlzLmNvbnRleHQgPSB7XG4gICAgICAnQVdTOjpBY2NvdW50SWQnOiBwcm9wcy5hY2NvdW50LFxuICAgICAgJ0FXUzo6UmVnaW9uJzogcHJvcHMucmVnaW9uLFxuICAgICAgJ0FXUzo6UGFydGl0aW9uJzogcHJvcHMucGFydGl0aW9uLFxuICAgICAgLi4ucHJvcHMucGFyYW1ldGVycyxcbiAgICB9O1xuICAgIHRoaXMuYWNjb3VudCA9IHByb3BzLmFjY291bnQ7XG4gICAgdGhpcy5yZWdpb24gPSBwcm9wcy5yZWdpb247XG4gICAgdGhpcy5wYXJ0aXRpb24gPSBwcm9wcy5wYXJ0aXRpb247XG4gICAgdGhpcy51cmxTdWZmaXggPSBwcm9wcy51cmxTdWZmaXg7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZXN0YWJsaXNoUmVzb3VyY2VQaHlzaWNhbE5hbWUobG9naWNhbElkOiBzdHJpbmcsIHBoeXNpY2FsTmFtZUluQ2ZuVGVtcGxhdGU6IGFueSk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKHBoeXNpY2FsTmFtZUluQ2ZuVGVtcGxhdGUgIT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHBoeXNpY2FsTmFtZUluQ2ZuVGVtcGxhdGUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBJZiB3ZSBjYW4ndCBldmFsdWF0ZSB0aGUgcmVzb3VyY2UncyBuYW1lIENsb3VkRm9ybWF0aW9uIGV4cHJlc3Npb24sXG4gICAgICAgIC8vIGp1c3QgbG9vayBpdCB1cCBpbiB0aGUgY3VycmVudGx5IGRlcGxveWVkIFN0YWNrXG4gICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBDZm5FdmFsdWF0aW9uRXhjZXB0aW9uKSkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmluZFBoeXNpY2FsTmFtZUZvcihsb2dpY2FsSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGZpbmRQaHlzaWNhbE5hbWVGb3IobG9naWNhbElkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHN0YWNrUmVzb3VyY2VzID0gYXdhaXQgdGhpcy5zdGFja1Jlc291cmNlcy5saXN0U3RhY2tSZXNvdXJjZXMoKTtcbiAgICByZXR1cm4gc3RhY2tSZXNvdXJjZXMuZmluZChzciA9PiBzci5Mb2dpY2FsUmVzb3VyY2VJZCA9PT0gbG9naWNhbElkKT8uUGh5c2ljYWxSZXNvdXJjZUlkO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGZpbmRMb2dpY2FsSWRGb3JQaHlzaWNhbE5hbWUocGh5c2ljYWxOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHN0YWNrUmVzb3VyY2VzID0gYXdhaXQgdGhpcy5zdGFja1Jlc291cmNlcy5saXN0U3RhY2tSZXNvdXJjZXMoKTtcbiAgICByZXR1cm4gc3RhY2tSZXNvdXJjZXMuZmluZChzciA9PiBzci5QaHlzaWNhbFJlc291cmNlSWQgPT09IHBoeXNpY2FsTmFtZSk/LkxvZ2ljYWxSZXNvdXJjZUlkO1xuICB9XG5cbiAgcHVibGljIGZpbmRSZWZlcmVuY2VzVG8obG9naWNhbElkOiBzdHJpbmcpOiBBcnJheTxSZXNvdXJjZURlZmluaXRpb24+IHtcbiAgICBjb25zdCByZXQgPSBuZXcgQXJyYXk8UmVzb3VyY2VEZWZpbml0aW9uPigpO1xuICAgIGZvciAoY29uc3QgW3Jlc291cmNlTG9naWNhbElkLCByZXNvdXJjZURlZl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy50ZW1wbGF0ZT8uUmVzb3VyY2VzID8/IHt9KSkge1xuICAgICAgaWYgKGxvZ2ljYWxJZCAhPT0gcmVzb3VyY2VMb2dpY2FsSWQgJiYgdGhpcy5yZWZlcmVuY2VzKGxvZ2ljYWxJZCwgcmVzb3VyY2VEZWYpKSB7XG4gICAgICAgIHJldC5wdXNoKHtcbiAgICAgICAgICAuLi4ocmVzb3VyY2VEZWYgYXMgYW55KSxcbiAgICAgICAgICBMb2dpY2FsSWQ6IHJlc291cmNlTG9naWNhbElkLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBldmFsdWF0ZUNmbkV4cHJlc3Npb24oY2ZuRXhwcmVzc2lvbjogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjbGFzcyBDZm5JbnRyaW5zaWNzIHtcbiAgICAgIHB1YmxpYyBldmFsdWF0ZUludHJpbnNpYyhpbnRyaW5zaWM6IEludHJpbnNpYyk6IGFueSB7XG4gICAgICAgIGNvbnN0IGludHJpbnNpY0Z1bmMgPSAodGhpcyBhcyBhbnkpW2ludHJpbnNpYy5uYW1lXTtcbiAgICAgICAgaWYgKCFpbnRyaW5zaWNGdW5jKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IENmbkV2YWx1YXRpb25FeGNlcHRpb24oYENsb3VkRm9ybWF0aW9uIGZ1bmN0aW9uICR7aW50cmluc2ljLm5hbWV9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3NBc0FycmF5ID0gQXJyYXkuaXNBcnJheShpbnRyaW5zaWMuYXJncykgPyBpbnRyaW5zaWMuYXJncyA6IFtpbnRyaW5zaWMuYXJnc107XG5cbiAgICAgICAgcmV0dXJuIGludHJpbnNpY0Z1bmMuYXBwbHkodGhpcywgYXJnc0FzQXJyYXkpO1xuICAgICAgfVxuXG4gICAgICBhc3luYyAnRm46OkpvaW4nKHNlcGFyYXRvcjogc3RyaW5nLCBhcmdzOiBhbnlbXSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGV2YWx1YXRlZEFyZ3MgPSBhd2FpdCBzZWxmLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbihhcmdzKTtcbiAgICAgICAgcmV0dXJuIGV2YWx1YXRlZEFyZ3Muam9pbihzZXBhcmF0b3IpO1xuICAgICAgfVxuXG4gICAgICBhc3luYyAnRm46OlNwbGl0JyhzZXBhcmF0b3I6IHN0cmluZywgYXJnczogYW55KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgZXZhbHVhdGVkQXJncyA9IGF3YWl0IHNlbGYuZXZhbHVhdGVDZm5FeHByZXNzaW9uKGFyZ3MpO1xuICAgICAgICByZXR1cm4gZXZhbHVhdGVkQXJncy5zcGxpdChzZXBhcmF0b3IpO1xuICAgICAgfVxuXG4gICAgICBhc3luYyAnRm46OlNlbGVjdCcoaW5kZXg6IG51bWJlciwgYXJnczogYW55W10pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCBldmFsdWF0ZWRBcmdzID0gYXdhaXQgc2VsZi5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oYXJncyk7XG4gICAgICAgIHJldHVybiBldmFsdWF0ZWRBcmdzW2luZGV4XTtcbiAgICAgIH1cblxuICAgICAgYXN5bmMgJ1JlZicobG9naWNhbElkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCByZWZUYXJnZXQgPSBhd2FpdCBzZWxmLmZpbmRSZWZUYXJnZXQobG9naWNhbElkKTtcbiAgICAgICAgaWYgKHJlZlRhcmdldCkge1xuICAgICAgICAgIHJldHVybiByZWZUYXJnZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IENmbkV2YWx1YXRpb25FeGNlcHRpb24oYFBhcmFtZXRlciBvciByZXNvdXJjZSAnJHtsb2dpY2FsSWR9JyBjb3VsZCBub3QgYmUgZm91bmQgZm9yIGV2YWx1YXRpb25gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhc3luYyAnRm46OkdldEF0dCcobG9naWNhbElkOiBzdHJpbmcsIGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIC8vIFRvRG8gaGFuZGxlIHRoZSAnbG9naWNhbElkLmF0dHJpYnV0ZU5hbWUnIGZvcm0gb2YgRm46OkdldEF0dFxuICAgICAgICBjb25zdCBhdHRyVmFsdWUgPSBhd2FpdCBzZWxmLmZpbmRHZXRBdHRUYXJnZXQobG9naWNhbElkLCBhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgaWYgKGF0dHJWYWx1ZSkge1xuICAgICAgICAgIHJldHVybiBhdHRyVmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IENmbkV2YWx1YXRpb25FeGNlcHRpb24oYEF0dHJpYnV0ZSAnJHthdHRyaWJ1dGVOYW1lfScgb2YgcmVzb3VyY2UgJyR7bG9naWNhbElkfScgY291bGQgbm90IGJlIGZvdW5kIGZvciBldmFsdWF0aW9uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXN5bmMgJ0ZuOjpTdWInKHRlbXBsYXRlOiBzdHJpbmcsIGV4cGxpY2l0UGxhY2Vob2xkZXJzPzogeyBbdmFyaWFibGU6IHN0cmluZ106IHN0cmluZyB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJzID0gZXhwbGljaXRQbGFjZWhvbGRlcnNcbiAgICAgICAgICA/IGF3YWl0IHNlbGYuZXZhbHVhdGVDZm5FeHByZXNzaW9uKGV4cGxpY2l0UGxhY2Vob2xkZXJzKVxuICAgICAgICAgIDoge307XG5cbiAgICAgICAgcmV0dXJuIGFzeW5jR2xvYmFsUmVwbGFjZSh0ZW1wbGF0ZSwgL1xcJHsoW159XSopfS9nLCBrZXkgPT4ge1xuICAgICAgICAgIGlmIChrZXkgaW4gcGxhY2Vob2xkZXJzKSB7XG4gICAgICAgICAgICByZXR1cm4gcGxhY2Vob2xkZXJzW2tleV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0S2V5ID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgICAgICAgICByZXR1cm4gc3BsaXRLZXkubGVuZ3RoID09PSAxXG4gICAgICAgICAgICAgID8gdGhpcy5SZWYoa2V5KVxuICAgICAgICAgICAgICA6IHRoaXNbJ0ZuOjpHZXRBdHQnXShzcGxpdEtleVswXSwgc3BsaXRLZXkuc2xpY2UoMSkuam9pbignLicpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjZm5FeHByZXNzaW9uID09IG51bGwpIHtcbiAgICAgIHJldHVybiBjZm5FeHByZXNzaW9uO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGNmbkV4cHJlc3Npb24pKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoY2ZuRXhwcmVzc2lvbi5tYXAoZXhwciA9PiB0aGlzLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbihleHByKSkpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2ZuRXhwcmVzc2lvbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGludHJpbnNpYyA9IHRoaXMucGFyc2VJbnRyaW5zaWMoY2ZuRXhwcmVzc2lvbik7XG4gICAgICBpZiAoaW50cmluc2ljKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2ZuSW50cmluc2ljcygpLmV2YWx1YXRlSW50cmluc2ljKGludHJpbnNpYyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGNmbkV4cHJlc3Npb24pKSB7XG4gICAgICAgICAgcmV0W2tleV0gPSBhd2FpdCB0aGlzLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbih2YWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNmbkV4cHJlc3Npb247XG4gIH1cblxuICBwcml2YXRlIHJlZmVyZW5jZXMobG9naWNhbElkOiBzdHJpbmcsIHRlbXBsYXRlRWxlbWVudDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZUVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbG9naWNhbElkID09PSB0ZW1wbGF0ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgaWYgKHRlbXBsYXRlRWxlbWVudCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGVtcGxhdGVFbGVtZW50KSkge1xuICAgICAgcmV0dXJuIHRlbXBsYXRlRWxlbWVudC5zb21lKGVsID0+IHRoaXMucmVmZXJlbmNlcyhsb2dpY2FsSWQsIGVsKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZUVsZW1lbnQgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0ZW1wbGF0ZUVsZW1lbnQpLnNvbWUoZWwgPT4gdGhpcy5yZWZlcmVuY2VzKGxvZ2ljYWxJZCwgZWwpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSW50cmluc2ljKHg6IGFueSk6IEludHJpbnNpYyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHgpO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMSAmJiAoa2V5c1swXS5zdGFydHNXaXRoKCdGbjo6JykgfHwga2V5c1swXSA9PT0gJ1JlZicpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBrZXlzWzBdLFxuICAgICAgICBhcmdzOiB4W2tleXNbMF1dLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmluZFJlZlRhcmdldChsb2dpY2FsSWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgLy8gZmlyc3QsIGNoZWNrIHRvIHNlZSBpZiB0aGUgUmVmIGlzIGEgUGFyYW1ldGVyIHdobydzIHZhbHVlIHdlIGhhdmVcbiAgICBpZiAobG9naWNhbElkID09PSAnQVdTOjpVUkxTdWZmaXgnKSB7XG4gICAgICBpZiAoIXRoaXMuY2FjaGVkVXJsU3VmZml4KSB7XG4gICAgICAgIHRoaXMuY2FjaGVkVXJsU3VmZml4ID0gdGhpcy51cmxTdWZmaXgodGhpcy5yZWdpb24pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jYWNoZWRVcmxTdWZmaXg7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1ldGVyVGFyZ2V0ID0gdGhpcy5jb250ZXh0W2xvZ2ljYWxJZF07XG4gICAgaWYgKHBhcmFtZXRlclRhcmdldCkge1xuICAgICAgcmV0dXJuIHBhcmFtZXRlclRhcmdldDtcbiAgICB9XG4gICAgLy8gaWYgaXQncyBub3QgYSBQYXJhbWV0ZXIsIHdlIG5lZWQgdG8gc2VhcmNoIGluIHRoZSBjdXJyZW50IFN0YWNrIHJlc291cmNlc1xuICAgIHJldHVybiB0aGlzLmZpbmRHZXRBdHRUYXJnZXQobG9naWNhbElkKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmluZEdldEF0dFRhcmdldChsb2dpY2FsSWQ6IHN0cmluZywgYXR0cmlidXRlPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBzdGFja1Jlc291cmNlcyA9IGF3YWl0IHRoaXMuc3RhY2tSZXNvdXJjZXMubGlzdFN0YWNrUmVzb3VyY2VzKCk7XG4gICAgY29uc3QgZm91bmRSZXNvdXJjZSA9IHN0YWNrUmVzb3VyY2VzLmZpbmQoc3IgPT4gc3IuTG9naWNhbFJlc291cmNlSWQgPT09IGxvZ2ljYWxJZCk7XG4gICAgaWYgKCFmb3VuZFJlc291cmNlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBub3csIHdlIG5lZWQgdG8gZm9ybWF0IHRoZSBhcHByb3ByaWF0ZSBpZGVudGlmaWVyIGRlcGVuZGluZyBvbiB0aGUgcmVzb3VyY2UgdHlwZSxcbiAgICAvLyBhbmQgdGhlIHJlcXVlc3RlZCBhdHRyaWJ1dGUgbmFtZVxuICAgIHJldHVybiB0aGlzLmZvcm1hdFJlc291cmNlQXR0cmlidXRlKGZvdW5kUmVzb3VyY2UsIGF0dHJpYnV0ZSk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFJlc291cmNlQXR0cmlidXRlKHJlc291cmNlOiBBV1MuQ2xvdWRGb3JtYXRpb24uU3RhY2tSZXNvdXJjZVN1bW1hcnksIGF0dHJpYnV0ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBwaHlzaWNhbElkID0gcmVzb3VyY2UuUGh5c2ljYWxSZXNvdXJjZUlkO1xuXG4gICAgLy8gbm8gYXR0cmlidXRlIG1lYW5zIFJlZiBleHByZXNzaW9uLCBmb3Igd2hpY2ggd2UgdXNlIHRoZSBwaHlzaWNhbCBJRCBkaXJlY3RseVxuICAgIGlmICghYXR0cmlidXRlKSB7XG4gICAgICByZXR1cm4gcGh5c2ljYWxJZDtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZVR5cGVGb3JtYXRzID0gUkVTT1VSQ0VfVFlQRV9BVFRSSUJVVEVTX0ZPUk1BVFNbcmVzb3VyY2UuUmVzb3VyY2VUeXBlXTtcbiAgICBpZiAoIXJlc291cmNlVHlwZUZvcm1hdHMpIHtcbiAgICAgIHRocm93IG5ldyBDZm5FdmFsdWF0aW9uRXhjZXB0aW9uKGBXZSBkb24ndCBzdXBwb3J0IGF0dHJpYnV0ZXMgb2YgdGhlICcke3Jlc291cmNlLlJlc291cmNlVHlwZX0nIHJlc291cmNlLiBUaGlzIGlzIGEgQ0RLIGxpbWl0YXRpb24uIGAgK1xuICAgICAgICAnUGxlYXNlIHJlcG9ydCBpdCBhdCBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzL25ldy9jaG9vc2UnKTtcbiAgICB9XG4gICAgY29uc3QgYXR0cmlidXRlRm10RnVuYyA9IHJlc291cmNlVHlwZUZvcm1hdHNbYXR0cmlidXRlXTtcbiAgICBpZiAoIWF0dHJpYnV0ZUZtdEZ1bmMpIHtcbiAgICAgIHRocm93IG5ldyBDZm5FdmFsdWF0aW9uRXhjZXB0aW9uKGBXZSBkb24ndCBzdXBwb3J0IHRoZSAnJHthdHRyaWJ1dGV9JyBhdHRyaWJ1dGUgb2YgdGhlICcke3Jlc291cmNlLlJlc291cmNlVHlwZX0nIHJlc291cmNlLiBUaGlzIGlzIGEgQ0RLIGxpbWl0YXRpb24uIGAgK1xuICAgICAgICAnUGxlYXNlIHJlcG9ydCBpdCBhdCBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzL25ldy9jaG9vc2UnKTtcbiAgICB9XG4gICAgY29uc3Qgc2VydmljZSA9IHRoaXMuZ2V0U2VydmljZU9mUmVzb3VyY2UocmVzb3VyY2UpO1xuICAgIGNvbnN0IHJlc291cmNlVHlwZUFyblBhcnQgPSB0aGlzLmdldFJlc291cmNlVHlwZUFyblBhcnRPZlJlc291cmNlKHJlc291cmNlKTtcbiAgICByZXR1cm4gYXR0cmlidXRlRm10RnVuYyh7XG4gICAgICBwYXJ0aXRpb246IHRoaXMucGFydGl0aW9uLFxuICAgICAgc2VydmljZSxcbiAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb24sXG4gICAgICBhY2NvdW50OiB0aGlzLmFjY291bnQsXG4gICAgICByZXNvdXJjZVR5cGU6IHJlc291cmNlVHlwZUFyblBhcnQsXG4gICAgICByZXNvdXJjZU5hbWU6IHBoeXNpY2FsSWQhLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZXJ2aWNlT2ZSZXNvdXJjZShyZXNvdXJjZTogQVdTLkNsb3VkRm9ybWF0aW9uLlN0YWNrUmVzb3VyY2VTdW1tYXJ5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb3VyY2UuUmVzb3VyY2VUeXBlLnNwbGl0KCc6OicpWzFdLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldFJlc291cmNlVHlwZUFyblBhcnRPZlJlc291cmNlKHJlc291cmNlOiBBV1MuQ2xvdWRGb3JtYXRpb24uU3RhY2tSZXNvdXJjZVN1bW1hcnkpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvdXJjZS5SZXNvdXJjZVR5cGUuc3BsaXQoJzo6JylbMl0udG9Mb3dlckNhc2UoKTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgQXJuUGFydHMge1xuICByZWFkb25seSBwYXJ0aXRpb246IHN0cmluZztcbiAgcmVhZG9ubHkgc2VydmljZTogc3RyaW5nO1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcbiAgcmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xuICByZWFkb25seSByZXNvdXJjZVR5cGU6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVzb3VyY2VOYW1lOiBzdHJpbmc7XG59XG5cbmNvbnN0IFJFU09VUkNFX1RZUEVfQVRUUklCVVRFU19GT1JNQVRTOiB7IFt0eXBlOiBzdHJpbmddOiB7IFthdHRyaWJ1dGU6IHN0cmluZ106IChwYXJ0czogQXJuUGFydHMpID0+IHN0cmluZyB9IH0gPSB7XG4gICdBV1M6OklBTTo6Um9sZSc6IHsgQXJuOiBpYW1Bcm5GbXQgfSxcbiAgJ0FXUzo6SUFNOjpVc2VyJzogeyBBcm46IGlhbUFybkZtdCB9LFxuICAnQVdTOjpJQU06Okdyb3VwJzogeyBBcm46IGlhbUFybkZtdCB9LFxuICAnQVdTOjpTMzo6QnVja2V0JzogeyBBcm46IHMzQXJuRm10IH0sXG4gICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nOiB7IEFybjogc3RkQ29sb25SZXNvdXJjZUFybkZtdCB9LFxufTtcblxuZnVuY3Rpb24gaWFtQXJuRm10KHBhcnRzOiBBcm5QYXJ0cyk6IHN0cmluZyB7XG4gIC8vIHdlIHNraXAgcmVnaW9uIGZvciBJQU0gcmVzb3VyY2VzXG4gIHJldHVybiBgYXJuOiR7cGFydHMucGFydGl0aW9ufToke3BhcnRzLnNlcnZpY2V9Ojoke3BhcnRzLmFjY291bnR9OiR7cGFydHMucmVzb3VyY2VUeXBlfS8ke3BhcnRzLnJlc291cmNlTmFtZX1gO1xufVxuXG5mdW5jdGlvbiBzM0FybkZtdChwYXJ0czogQXJuUGFydHMpOiBzdHJpbmcge1xuICAvLyB3ZSBza2lwIGFjY291bnQsIHJlZ2lvbiBhbmQgcmVzb3VyY2VUeXBlIGZvciBTMyByZXNvdXJjZXNcbiAgcmV0dXJuIGBhcm46JHtwYXJ0cy5wYXJ0aXRpb259OiR7cGFydHMuc2VydmljZX06Ojoke3BhcnRzLnJlc291cmNlTmFtZX1gO1xufVxuXG5mdW5jdGlvbiBzdGRDb2xvblJlc291cmNlQXJuRm10KHBhcnRzOiBBcm5QYXJ0cyk6IHN0cmluZyB7XG4gIC8vIHRoaXMgaXMgYSBzdGFuZGFyZCBmb3JtYXQgZm9yIEFSTnMgbGlrZTogYXJuOmF3czpzZXJ2aWNlOnJlZ2lvbjphY2NvdW50OnJlc291cmNlVHlwZTpyZXNvdXJjZU5hbWVcbiAgcmV0dXJuIGBhcm46JHtwYXJ0cy5wYXJ0aXRpb259OiR7cGFydHMuc2VydmljZX06JHtwYXJ0cy5yZWdpb259OiR7cGFydHMuYWNjb3VudH06JHtwYXJ0cy5yZXNvdXJjZVR5cGV9OiR7cGFydHMucmVzb3VyY2VOYW1lfWA7XG59XG5cbmludGVyZmFjZSBJbnRyaW5zaWMge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFyZ3M6IGFueTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXN5bmNHbG9iYWxSZXBsYWNlKHN0cjogc3RyaW5nLCByZWdleDogUmVnRXhwLCBjYjogKHg6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKCFyZWdleC5nbG9iYWwpIHsgdGhyb3cgbmV3IEVycm9yKCdSZWdleCBtdXN0IGJlIGNyZWF0ZWQgd2l0aCAvZyBmbGFnJyk7IH1cblxuICBjb25zdCByZXQgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICBsZXQgc3RhcnQgPSAwO1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IG1hdGNoID0gcmVnZXguZXhlYyhzdHIpO1xuICAgIGlmICghbWF0Y2gpIHsgYnJlYWs7IH1cblxuICAgIHJldC5wdXNoKHN0ci5zdWJzdHJpbmcoc3RhcnQsIG1hdGNoLmluZGV4KSk7XG4gICAgcmV0LnB1c2goYXdhaXQgY2IobWF0Y2hbMV0pKTtcblxuICAgIHN0YXJ0ID0gcmVnZXgubGFzdEluZGV4O1xuICB9XG4gIHJldC5wdXNoKHN0ci5zdWJzdHIoc3RhcnQpKTtcblxuICByZXR1cm4gcmV0LmpvaW4oJycpO1xufVxuIl19
|
|
321
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGUtY2xvdWRmb3JtYXRpb24tdGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJldmFsdWF0ZS1jbG91ZGZvcm1hdGlvbi10ZW1wbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFRQSxNQUFhLHNCQUFzQjtJQUdqQyxZQUE2QixHQUFTLEVBQW1CLFNBQWlCO1FBQTdDLFFBQUcsR0FBSCxHQUFHLENBQU07UUFBbUIsY0FBUyxHQUFULFNBQVMsQ0FBUTtJQUMxRSxDQUFDO0lBRU0sS0FBSyxDQUFDLGtCQUFrQjtRQUM3QixJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssU0FBUyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUN0RDtRQUNELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRU8sS0FBSyxDQUFDLGlCQUFpQjs7UUFDN0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQTJDLENBQUM7UUFDakUsSUFBSSxTQUE2QixDQUFDO1FBQ2xDLEdBQUc7WUFDRCxNQUFNLHNCQUFzQixHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDaEYsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dCQUN6QixTQUFTLEVBQUUsU0FBUzthQUNyQixDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsbUNBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNuRSxTQUFTLEdBQUcsc0JBQXNCLENBQUMsU0FBUyxDQUFDO1NBQzlDLFFBQVEsU0FBUyxFQUFFO1FBQ3BCLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztDQUNGO0FBMUJELHdEQTBCQztBQUVELE1BQWEsc0JBQXVCLFNBQVEsS0FBSztD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SyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7S0FDekI7SUFDRCxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUU1QixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2N4LWFwaSc7XG5pbXBvcnQgKiBhcyBBV1MgZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgeyBJU0RLIH0gZnJvbSAnLi9hd3MtYXV0aCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdFN0YWNrUmVzb3VyY2VzIHtcbiAgbGlzdFN0YWNrUmVzb3VyY2VzKCk6IFByb21pc2U8QVdTLkNsb3VkRm9ybWF0aW9uLlN0YWNrUmVzb3VyY2VTdW1tYXJ5W10+O1xufVxuXG5leHBvcnQgY2xhc3MgTGF6eUxpc3RTdGFja1Jlc291cmNlcyBpbXBsZW1lbnRzIExpc3RTdGFja1Jlc291cmNlcyB7XG4gIHByaXZhdGUgc3RhY2tSZXNvdXJjZXM6IEFXUy5DbG91ZEZvcm1hdGlvbi5TdGFja1Jlc291cmNlU3VtbWFyeVtdIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc2RrOiBJU0RLLCBwcml2YXRlIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nKSB7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbGlzdFN0YWNrUmVzb3VyY2VzKCk6IFByb21pc2U8QVdTLkNsb3VkRm9ybWF0aW9uLlN0YWNrUmVzb3VyY2VTdW1tYXJ5W10+IHtcbiAgICBpZiAodGhpcy5zdGFja1Jlc291cmNlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnN0YWNrUmVzb3VyY2VzID0gYXdhaXQgdGhpcy5nZXRTdGFja1Jlc291cmNlcygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zdGFja1Jlc291cmNlcztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0U3RhY2tSZXNvdXJjZXMoKTogUHJvbWlzZTxBV1MuQ2xvdWRGb3JtYXRpb24uU3RhY2tSZXNvdXJjZVN1bW1hcnlbXT4ge1xuICAgIGNvbnN0IHJldCA9IG5ldyBBcnJheTxBV1MuQ2xvdWRGb3JtYXRpb24uU3RhY2tSZXNvdXJjZVN1bW1hcnk+KCk7XG4gICAgbGV0IG5leHRUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IHN0YWNrUmVzb3VyY2VzUmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNkay5jbG91ZEZvcm1hdGlvbigpLmxpc3RTdGFja1Jlc291cmNlcyh7XG4gICAgICAgIFN0YWNrTmFtZTogdGhpcy5zdGFja05hbWUsXG4gICAgICAgIE5leHRUb2tlbjogbmV4dFRva2VuLFxuICAgICAgfSkucHJvbWlzZSgpO1xuICAgICAgcmV0LnB1c2goLi4uKHN0YWNrUmVzb3VyY2VzUmVzcG9uc2UuU3RhY2tSZXNvdXJjZVN1bW1hcmllcyA/PyBbXSkpO1xuICAgICAgbmV4dFRva2VuID0gc3RhY2tSZXNvdXJjZXNSZXNwb25zZS5OZXh0VG9rZW47XG4gICAgfSB3aGlsZSAobmV4dFRva2VuKTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDZm5FdmFsdWF0aW9uRXhjZXB0aW9uIGV4dGVuZHMgRXJyb3Ige31cblxuZXhwb3J0IGludGVyZmFjZSBSZXNvdXJjZURlZmluaXRpb24ge1xuICByZWFkb25seSBMb2dpY2FsSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgVHlwZTogc3RyaW5nO1xuICByZWFkb25seSBQcm9wZXJ0aWVzOiB7IFtwOiBzdHJpbmddOiBhbnkgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGVQcm9wcyB7XG4gIHJlYWRvbmx5IHN0YWNrQXJ0aWZhY3Q6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcbiAgcmVhZG9ubHkgcGFyYW1ldGVyczogeyBbcGFyYW1ldGVyTmFtZTogc3RyaW5nXTogc3RyaW5nIH07XG4gIHJlYWRvbmx5IGFjY291bnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhcnRpdGlvbjogc3RyaW5nO1xuICByZWFkb25seSB1cmxTdWZmaXg6IChyZWdpb246IHN0cmluZykgPT4gc3RyaW5nO1xuICByZWFkb25seSBsaXN0U3RhY2tSZXNvdXJjZXM6IExpc3RTdGFja1Jlc291cmNlcztcbn1cblxuZXhwb3J0IGNsYXNzIEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhY2tSZXNvdXJjZXM6IExpc3RTdGFja1Jlc291cmNlcztcbiAgcHJpdmF0ZSByZWFkb25seSB0ZW1wbGF0ZTogeyBbc2VjdGlvbjogc3RyaW5nXTogeyBbaGVhZGluZ3M6IHN0cmluZ106IGFueSB9IH07XG4gIHByaXZhdGUgcmVhZG9ubHkgY29udGV4dDogeyBbazogc3RyaW5nXTogc3RyaW5nIH07XG4gIHByaXZhdGUgcmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcnRpdGlvbjogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHVybFN1ZmZpeDogKHJlZ2lvbjogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIHByaXZhdGUgY2FjaGVkVXJsU3VmZml4OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZVByb3BzKSB7XG4gICAgdGhpcy5zdGFja1Jlc291cmNlcyA9IHByb3BzLmxpc3RTdGFja1Jlc291cmNlcztcbiAgICB0aGlzLnRlbXBsYXRlID0gcHJvcHMuc3RhY2tBcnRpZmFjdC50ZW1wbGF0ZTtcbiAgICB0aGlzLmNvbnRleHQgPSB7XG4gICAgICAnQVdTOjpBY2NvdW50SWQnOiBwcm9wcy5hY2NvdW50LFxuICAgICAgJ0FXUzo6UmVnaW9uJzogcHJvcHMucmVnaW9uLFxuICAgICAgJ0FXUzo6UGFydGl0aW9uJzogcHJvcHMucGFydGl0aW9uLFxuICAgICAgLi4ucHJvcHMucGFyYW1ldGVycyxcbiAgICB9O1xuICAgIHRoaXMuYWNjb3VudCA9IHByb3BzLmFjY291bnQ7XG4gICAgdGhpcy5yZWdpb24gPSBwcm9wcy5yZWdpb247XG4gICAgdGhpcy5wYXJ0aXRpb24gPSBwcm9wcy5wYXJ0aXRpb247XG4gICAgdGhpcy51cmxTdWZmaXggPSBwcm9wcy51cmxTdWZmaXg7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZXN0YWJsaXNoUmVzb3VyY2VQaHlzaWNhbE5hbWUobG9naWNhbElkOiBzdHJpbmcsIHBoeXNpY2FsTmFtZUluQ2ZuVGVtcGxhdGU6IGFueSk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKHBoeXNpY2FsTmFtZUluQ2ZuVGVtcGxhdGUgIT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHBoeXNpY2FsTmFtZUluQ2ZuVGVtcGxhdGUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBJZiB3ZSBjYW4ndCBldmFsdWF0ZSB0aGUgcmVzb3VyY2UncyBuYW1lIENsb3VkRm9ybWF0aW9uIGV4cHJlc3Npb24sXG4gICAgICAgIC8vIGp1c3QgbG9vayBpdCB1cCBpbiB0aGUgY3VycmVudGx5IGRlcGxveWVkIFN0YWNrXG4gICAgICAgIGlmICghKGUgaW5zdGFuY2VvZiBDZm5FdmFsdWF0aW9uRXhjZXB0aW9uKSkge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZmluZFBoeXNpY2FsTmFtZUZvcihsb2dpY2FsSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGZpbmRQaHlzaWNhbE5hbWVGb3IobG9naWNhbElkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHN0YWNrUmVzb3VyY2VzID0gYXdhaXQgdGhpcy5zdGFja1Jlc291cmNlcy5saXN0U3RhY2tSZXNvdXJjZXMoKTtcbiAgICByZXR1cm4gc3RhY2tSZXNvdXJjZXMuZmluZChzciA9PiBzci5Mb2dpY2FsUmVzb3VyY2VJZCA9PT0gbG9naWNhbElkKT8uUGh5c2ljYWxSZXNvdXJjZUlkO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGZpbmRMb2dpY2FsSWRGb3JQaHlzaWNhbE5hbWUocGh5c2ljYWxOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHN0YWNrUmVzb3VyY2VzID0gYXdhaXQgdGhpcy5zdGFja1Jlc291cmNlcy5saXN0U3RhY2tSZXNvdXJjZXMoKTtcbiAgICByZXR1cm4gc3RhY2tSZXNvdXJjZXMuZmluZChzciA9PiBzci5QaHlzaWNhbFJlc291cmNlSWQgPT09IHBoeXNpY2FsTmFtZSk/LkxvZ2ljYWxSZXNvdXJjZUlkO1xuICB9XG5cbiAgcHVibGljIGZpbmRSZWZlcmVuY2VzVG8obG9naWNhbElkOiBzdHJpbmcpOiBBcnJheTxSZXNvdXJjZURlZmluaXRpb24+IHtcbiAgICBjb25zdCByZXQgPSBuZXcgQXJyYXk8UmVzb3VyY2VEZWZpbml0aW9uPigpO1xuICAgIGZvciAoY29uc3QgW3Jlc291cmNlTG9naWNhbElkLCByZXNvdXJjZURlZl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy50ZW1wbGF0ZT8uUmVzb3VyY2VzID8/IHt9KSkge1xuICAgICAgaWYgKGxvZ2ljYWxJZCAhPT0gcmVzb3VyY2VMb2dpY2FsSWQgJiYgdGhpcy5yZWZlcmVuY2VzKGxvZ2ljYWxJZCwgcmVzb3VyY2VEZWYpKSB7XG4gICAgICAgIHJldC5wdXNoKHtcbiAgICAgICAgICAuLi4ocmVzb3VyY2VEZWYgYXMgYW55KSxcbiAgICAgICAgICBMb2dpY2FsSWQ6IHJlc291cmNlTG9naWNhbElkLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBldmFsdWF0ZUNmbkV4cHJlc3Npb24oY2ZuRXhwcmVzc2lvbjogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjbGFzcyBDZm5JbnRyaW5zaWNzIHtcbiAgICAgIHB1YmxpYyBldmFsdWF0ZUludHJpbnNpYyhpbnRyaW5zaWM6IEludHJpbnNpYyk6IGFueSB7XG4gICAgICAgIGNvbnN0IGludHJpbnNpY0Z1bmMgPSAodGhpcyBhcyBhbnkpW2ludHJpbnNpYy5uYW1lXTtcbiAgICAgICAgaWYgKCFpbnRyaW5zaWNGdW5jKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IENmbkV2YWx1YXRpb25FeGNlcHRpb24oYENsb3VkRm9ybWF0aW9uIGZ1bmN0aW9uICR7aW50cmluc2ljLm5hbWV9IGlzIG5vdCBzdXBwb3J0ZWRgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFyZ3NBc0FycmF5ID0gQXJyYXkuaXNBcnJheShpbnRyaW5zaWMuYXJncykgPyBpbnRyaW5zaWMuYXJncyA6IFtpbnRyaW5zaWMuYXJnc107XG5cbiAgICAgICAgcmV0dXJuIGludHJpbnNpY0Z1bmMuYXBwbHkodGhpcywgYXJnc0FzQXJyYXkpO1xuICAgICAgfVxuXG4gICAgICBhc3luYyAnRm46OkpvaW4nKHNlcGFyYXRvcjogc3RyaW5nLCBhcmdzOiBhbnlbXSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGV2YWx1YXRlZEFyZ3MgPSBhd2FpdCBzZWxmLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbihhcmdzKTtcbiAgICAgICAgcmV0dXJuIGV2YWx1YXRlZEFyZ3Muam9pbihzZXBhcmF0b3IpO1xuICAgICAgfVxuXG4gICAgICBhc3luYyAnRm46OlNwbGl0JyhzZXBhcmF0b3I6IHN0cmluZywgYXJnczogYW55KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgZXZhbHVhdGVkQXJncyA9IGF3YWl0IHNlbGYuZXZhbHVhdGVDZm5FeHByZXNzaW9uKGFyZ3MpO1xuICAgICAgICByZXR1cm4gZXZhbHVhdGVkQXJncy5zcGxpdChzZXBhcmF0b3IpO1xuICAgICAgfVxuXG4gICAgICBhc3luYyAnRm46OlNlbGVjdCcoaW5kZXg6IG51bWJlciwgYXJnczogYW55W10pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCBldmFsdWF0ZWRBcmdzID0gYXdhaXQgc2VsZi5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oYXJncyk7XG4gICAgICAgIHJldHVybiBldmFsdWF0ZWRBcmdzW2luZGV4XTtcbiAgICAgIH1cblxuICAgICAgYXN5bmMgJ1JlZicobG9naWNhbElkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCByZWZUYXJnZXQgPSBhd2FpdCBzZWxmLmZpbmRSZWZUYXJnZXQobG9naWNhbElkKTtcbiAgICAgICAgaWYgKHJlZlRhcmdldCkge1xuICAgICAgICAgIHJldHVybiByZWZUYXJnZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IENmbkV2YWx1YXRpb25FeGNlcHRpb24oYFBhcmFtZXRlciBvciByZXNvdXJjZSAnJHtsb2dpY2FsSWR9JyBjb3VsZCBub3QgYmUgZm91bmQgZm9yIGV2YWx1YXRpb25gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhc3luYyAnRm46OkdldEF0dCcobG9naWNhbElkOiBzdHJpbmcsIGF0dHJpYnV0ZU5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIC8vIFRvRG8gaGFuZGxlIHRoZSAnbG9naWNhbElkLmF0dHJpYnV0ZU5hbWUnIGZvcm0gb2YgRm46OkdldEF0dFxuICAgICAgICBjb25zdCBhdHRyVmFsdWUgPSBhd2FpdCBzZWxmLmZpbmRHZXRBdHRUYXJnZXQobG9naWNhbElkLCBhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgaWYgKGF0dHJWYWx1ZSkge1xuICAgICAgICAgIHJldHVybiBhdHRyVmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IENmbkV2YWx1YXRpb25FeGNlcHRpb24oYEF0dHJpYnV0ZSAnJHthdHRyaWJ1dGVOYW1lfScgb2YgcmVzb3VyY2UgJyR7bG9naWNhbElkfScgY291bGQgbm90IGJlIGZvdW5kIGZvciBldmFsdWF0aW9uYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXN5bmMgJ0ZuOjpTdWInKHRlbXBsYXRlOiBzdHJpbmcsIGV4cGxpY2l0UGxhY2Vob2xkZXJzPzogeyBbdmFyaWFibGU6IHN0cmluZ106IHN0cmluZyB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJzID0gZXhwbGljaXRQbGFjZWhvbGRlcnNcbiAgICAgICAgICA/IGF3YWl0IHNlbGYuZXZhbHVhdGVDZm5FeHByZXNzaW9uKGV4cGxpY2l0UGxhY2Vob2xkZXJzKVxuICAgICAgICAgIDoge307XG5cbiAgICAgICAgcmV0dXJuIGFzeW5jR2xvYmFsUmVwbGFjZSh0ZW1wbGF0ZSwgL1xcJHsoW159XSopfS9nLCBrZXkgPT4ge1xuICAgICAgICAgIGlmIChrZXkgaW4gcGxhY2Vob2xkZXJzKSB7XG4gICAgICAgICAgICByZXR1cm4gcGxhY2Vob2xkZXJzW2tleV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0S2V5ID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgICAgICAgICByZXR1cm4gc3BsaXRLZXkubGVuZ3RoID09PSAxXG4gICAgICAgICAgICAgID8gdGhpcy5SZWYoa2V5KVxuICAgICAgICAgICAgICA6IHRoaXNbJ0ZuOjpHZXRBdHQnXShzcGxpdEtleVswXSwgc3BsaXRLZXkuc2xpY2UoMSkuam9pbignLicpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjZm5FeHByZXNzaW9uID09IG51bGwpIHtcbiAgICAgIHJldHVybiBjZm5FeHByZXNzaW9uO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGNmbkV4cHJlc3Npb24pKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoY2ZuRXhwcmVzc2lvbi5tYXAoZXhwciA9PiB0aGlzLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbihleHByKSkpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2ZuRXhwcmVzc2lvbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGludHJpbnNpYyA9IHRoaXMucGFyc2VJbnRyaW5zaWMoY2ZuRXhwcmVzc2lvbik7XG4gICAgICBpZiAoaW50cmluc2ljKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ2ZuSW50cmluc2ljcygpLmV2YWx1YXRlSW50cmluc2ljKGludHJpbnNpYyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXQ6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGNmbkV4cHJlc3Npb24pKSB7XG4gICAgICAgICAgcmV0W2tleV0gPSBhd2FpdCB0aGlzLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbih2YWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNmbkV4cHJlc3Npb247XG4gIH1cblxuICBwcml2YXRlIHJlZmVyZW5jZXMobG9naWNhbElkOiBzdHJpbmcsIHRlbXBsYXRlRWxlbWVudDogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZUVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbG9naWNhbElkID09PSB0ZW1wbGF0ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgaWYgKHRlbXBsYXRlRWxlbWVudCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGVtcGxhdGVFbGVtZW50KSkge1xuICAgICAgcmV0dXJuIHRlbXBsYXRlRWxlbWVudC5zb21lKGVsID0+IHRoaXMucmVmZXJlbmNlcyhsb2dpY2FsSWQsIGVsKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZUVsZW1lbnQgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0ZW1wbGF0ZUVsZW1lbnQpLnNvbWUoZWwgPT4gdGhpcy5yZWZlcmVuY2VzKGxvZ2ljYWxJZCwgZWwpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHBhcnNlSW50cmluc2ljKHg6IGFueSk6IEludHJpbnNpYyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHgpO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMSAmJiAoa2V5c1swXS5zdGFydHNXaXRoKCdGbjo6JykgfHwga2V5c1swXSA9PT0gJ1JlZicpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBrZXlzWzBdLFxuICAgICAgICBhcmdzOiB4W2tleXNbMF1dLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmluZFJlZlRhcmdldChsb2dpY2FsSWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgLy8gZmlyc3QsIGNoZWNrIHRvIHNlZSBpZiB0aGUgUmVmIGlzIGEgUGFyYW1ldGVyIHdobydzIHZhbHVlIHdlIGhhdmVcbiAgICBpZiAobG9naWNhbElkID09PSAnQVdTOjpVUkxTdWZmaXgnKSB7XG4gICAgICBpZiAoIXRoaXMuY2FjaGVkVXJsU3VmZml4KSB7XG4gICAgICAgIHRoaXMuY2FjaGVkVXJsU3VmZml4ID0gdGhpcy51cmxTdWZmaXgodGhpcy5yZWdpb24pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jYWNoZWRVcmxTdWZmaXg7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1ldGVyVGFyZ2V0ID0gdGhpcy5jb250ZXh0W2xvZ2ljYWxJZF07XG4gICAgaWYgKHBhcmFtZXRlclRhcmdldCkge1xuICAgICAgcmV0dXJuIHBhcmFtZXRlclRhcmdldDtcbiAgICB9XG4gICAgLy8gaWYgaXQncyBub3QgYSBQYXJhbWV0ZXIsIHdlIG5lZWQgdG8gc2VhcmNoIGluIHRoZSBjdXJyZW50IFN0YWNrIHJlc291cmNlc1xuICAgIHJldHVybiB0aGlzLmZpbmRHZXRBdHRUYXJnZXQobG9naWNhbElkKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmluZEdldEF0dFRhcmdldChsb2dpY2FsSWQ6IHN0cmluZywgYXR0cmlidXRlPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBzdGFja1Jlc291cmNlcyA9IGF3YWl0IHRoaXMuc3RhY2tSZXNvdXJjZXMubGlzdFN0YWNrUmVzb3VyY2VzKCk7XG4gICAgY29uc3QgZm91bmRSZXNvdXJjZSA9IHN0YWNrUmVzb3VyY2VzLmZpbmQoc3IgPT4gc3IuTG9naWNhbFJlc291cmNlSWQgPT09IGxvZ2ljYWxJZCk7XG4gICAgaWYgKCFmb3VuZFJlc291cmNlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICAvLyBub3csIHdlIG5lZWQgdG8gZm9ybWF0IHRoZSBhcHByb3ByaWF0ZSBpZGVudGlmaWVyIGRlcGVuZGluZyBvbiB0aGUgcmVzb3VyY2UgdHlwZSxcbiAgICAvLyBhbmQgdGhlIHJlcXVlc3RlZCBhdHRyaWJ1dGUgbmFtZVxuICAgIHJldHVybiB0aGlzLmZvcm1hdFJlc291cmNlQXR0cmlidXRlKGZvdW5kUmVzb3VyY2UsIGF0dHJpYnV0ZSk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFJlc291cmNlQXR0cmlidXRlKHJlc291cmNlOiBBV1MuQ2xvdWRGb3JtYXRpb24uU3RhY2tSZXNvdXJjZVN1bW1hcnksIGF0dHJpYnV0ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBwaHlzaWNhbElkID0gcmVzb3VyY2UuUGh5c2ljYWxSZXNvdXJjZUlkO1xuXG4gICAgLy8gbm8gYXR0cmlidXRlIG1lYW5zIFJlZiBleHByZXNzaW9uLCBmb3Igd2hpY2ggd2UgdXNlIHRoZSBwaHlzaWNhbCBJRCBkaXJlY3RseVxuICAgIGlmICghYXR0cmlidXRlKSB7XG4gICAgICByZXR1cm4gcGh5c2ljYWxJZDtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZVR5cGVGb3JtYXRzID0gUkVTT1VSQ0VfVFlQRV9BVFRSSUJVVEVTX0ZPUk1BVFNbcmVzb3VyY2UuUmVzb3VyY2VUeXBlXTtcbiAgICBpZiAoIXJlc291cmNlVHlwZUZvcm1hdHMpIHtcbiAgICAgIHRocm93IG5ldyBDZm5FdmFsdWF0aW9uRXhjZXB0aW9uKGBXZSBkb24ndCBzdXBwb3J0IGF0dHJpYnV0ZXMgb2YgdGhlICcke3Jlc291cmNlLlJlc291cmNlVHlwZX0nIHJlc291cmNlLiBUaGlzIGlzIGEgQ0RLIGxpbWl0YXRpb24uIGAgK1xuICAgICAgICAnUGxlYXNlIHJlcG9ydCBpdCBhdCBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzL25ldy9jaG9vc2UnKTtcbiAgICB9XG4gICAgY29uc3QgYXR0cmlidXRlRm10RnVuYyA9IHJlc291cmNlVHlwZUZvcm1hdHNbYXR0cmlidXRlXTtcbiAgICBpZiAoIWF0dHJpYnV0ZUZtdEZ1bmMpIHtcbiAgICAgIHRocm93IG5ldyBDZm5FdmFsdWF0aW9uRXhjZXB0aW9uKGBXZSBkb24ndCBzdXBwb3J0IHRoZSAnJHthdHRyaWJ1dGV9JyBhdHRyaWJ1dGUgb2YgdGhlICcke3Jlc291cmNlLlJlc291cmNlVHlwZX0nIHJlc291cmNlLiBUaGlzIGlzIGEgQ0RLIGxpbWl0YXRpb24uIGAgK1xuICAgICAgICAnUGxlYXNlIHJlcG9ydCBpdCBhdCBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvaXNzdWVzL25ldy9jaG9vc2UnKTtcbiAgICB9XG4gICAgY29uc3Qgc2VydmljZSA9IHRoaXMuZ2V0U2VydmljZU9mUmVzb3VyY2UocmVzb3VyY2UpO1xuICAgIGNvbnN0IHJlc291cmNlVHlwZUFyblBhcnQgPSB0aGlzLmdldFJlc291cmNlVHlwZUFyblBhcnRPZlJlc291cmNlKHJlc291cmNlKTtcbiAgICByZXR1cm4gYXR0cmlidXRlRm10RnVuYyh7XG4gICAgICBwYXJ0aXRpb246IHRoaXMucGFydGl0aW9uLFxuICAgICAgc2VydmljZSxcbiAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb24sXG4gICAgICBhY2NvdW50OiB0aGlzLmFjY291bnQsXG4gICAgICByZXNvdXJjZVR5cGU6IHJlc291cmNlVHlwZUFyblBhcnQsXG4gICAgICByZXNvdXJjZU5hbWU6IHBoeXNpY2FsSWQhLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZXJ2aWNlT2ZSZXNvdXJjZShyZXNvdXJjZTogQVdTLkNsb3VkRm9ybWF0aW9uLlN0YWNrUmVzb3VyY2VTdW1tYXJ5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb3VyY2UuUmVzb3VyY2VUeXBlLnNwbGl0KCc6OicpWzFdLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldFJlc291cmNlVHlwZUFyblBhcnRPZlJlc291cmNlKHJlc291cmNlOiBBV1MuQ2xvdWRGb3JtYXRpb24uU3RhY2tSZXNvdXJjZVN1bW1hcnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlc291cmNlVHlwZSA9IHJlc291cmNlLlJlc291cmNlVHlwZTtcbiAgICBjb25zdCBzcGVjaWFsQ2FzZVJlc291cmNlVHlwZSA9IFJFU09VUkNFX1RZUEVfU1BFQ0lBTF9OQU1FU1tyZXNvdXJjZVR5cGVdPy5yZXNvdXJjZVR5cGU7XG4gICAgcmV0dXJuIHNwZWNpYWxDYXNlUmVzb3VyY2VUeXBlXG4gICAgICA/IHNwZWNpYWxDYXNlUmVzb3VyY2VUeXBlXG4gICAgICAvLyB0aGlzIGlzIHRoZSBkZWZhdWx0IGNhc2VcbiAgICAgIDogcmVzb3VyY2VUeXBlLnNwbGl0KCc6OicpWzJdLnRvTG93ZXJDYXNlKCk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIEFyblBhcnRzIHtcbiAgcmVhZG9ubHkgcGFydGl0aW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNlcnZpY2U6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFjY291bnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVzb3VyY2VUeXBlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc291cmNlTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFVzdWFsbHksIHdlIGRlZHVjZSB0aGUgbmFtZXMgb2YgdGhlIHNlcnZpY2UgYW5kIHRoZSByZXNvdXJjZSB0eXBlIHVzZWQgdG8gZm9ybWF0IHRoZSBBUk4gZnJvbSB0aGUgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgdHlwZS5cbiAqIEZvciBhIENGTiB0eXBlIGxpa2UgQVdTOjpTZXJ2aWNlOjpSZXNvdXJjZVR5cGUsIHRoZSBzZWNvbmQgc2VnbWVudCBiZWNvbWVzIHRoZSBzZXJ2aWNlIG5hbWUsIGFuZCB0aGUgdGhpcmQgdGhlIHJlc291cmNlIHR5cGVcbiAqIChhZnRlciBjb252ZXJ0aW5nIGJvdGggb2YgdGhlbSB0byBsb3dlcmNhc2UpLlxuICogSG93ZXZlciwgc29tZSByZXNvdXJjZSB0eXBlcyBicmVhayB0aGlzIHNpbXBsZSBjb252ZW50aW9uLCBhbmQgd2UgbmVlZCB0byBzcGVjaWFsLWNhc2UgdGhlbS5cbiAqIFRoaXMgbWFwIGlzIGZvciBzdG9yaW5nIHRob3NlIGNhc2VzLlxuICovXG5jb25zdCBSRVNPVVJDRV9UWVBFX1NQRUNJQUxfTkFNRVM6IHsgW3R5cGU6IHN0cmluZ106IHsgcmVzb3VyY2VUeXBlOiBzdHJpbmcgfSB9ID0ge1xuICAnQVdTOjpFdmVudHM6OkV2ZW50QnVzJzoge1xuICAgIHJlc291cmNlVHlwZTogJ2V2ZW50LWJ1cycsXG4gIH0sXG59O1xuXG5jb25zdCBSRVNPVVJDRV9UWVBFX0FUVFJJQlVURVNfRk9STUFUUzogeyBbdHlwZTogc3RyaW5nXTogeyBbYXR0cmlidXRlOiBzdHJpbmddOiAocGFydHM6IEFyblBhcnRzKSA9PiBzdHJpbmcgfSB9ID0ge1xuICAnQVdTOjpJQU06OlJvbGUnOiB7IEFybjogaWFtQXJuRm10IH0sXG4gICdBV1M6OklBTTo6VXNlcic6IHsgQXJuOiBpYW1Bcm5GbXQgfSxcbiAgJ0FXUzo6SUFNOjpHcm91cCc6IHsgQXJuOiBpYW1Bcm5GbXQgfSxcbiAgJ0FXUzo6UzM6OkJ1Y2tldCc6IHsgQXJuOiBzM0FybkZtdCB9LFxuICAnQVdTOjpMYW1iZGE6OkZ1bmN0aW9uJzogeyBBcm46IHN0ZENvbG9uUmVzb3VyY2VBcm5GbXQgfSxcbiAgJ0FXUzo6RXZlbnRzOjpFdmVudEJ1cyc6IHtcbiAgICBBcm46IHN0ZFNsYXNoUmVzb3VyY2VBcm5GbXQsXG4gICAgLy8gdGhlIG5hbWUgYXR0cmlidXRlIG9mIHRoZSBFdmVudEJ1cyBpcyB0aGUgc2FtZSBhcyB0aGUgUmVmXG4gICAgTmFtZTogcGFydHMgPT4gcGFydHMucmVzb3VyY2VOYW1lLFxuICB9LFxuICAnQVdTOjpBcHBTeW5jOjpHcmFwaFFMQXBpJzogeyBBcGlJZDogYXBwc3luY0dyYXBoUWxBcGlBcGlJZEZtdCB9LFxufTtcblxuZnVuY3Rpb24gaWFtQXJuRm10KHBhcnRzOiBBcm5QYXJ0cyk6IHN0cmluZyB7XG4gIC8vIHdlIHNraXAgcmVnaW9uIGZvciBJQU0gcmVzb3VyY2VzXG4gIHJldHVybiBgYXJuOiR7cGFydHMucGFydGl0aW9ufToke3BhcnRzLnNlcnZpY2V9Ojoke3BhcnRzLmFjY291bnR9OiR7cGFydHMucmVzb3VyY2VUeXBlfS8ke3BhcnRzLnJlc291cmNlTmFtZX1gO1xufVxuXG5mdW5jdGlvbiBzM0FybkZtdChwYXJ0czogQXJuUGFydHMpOiBzdHJpbmcge1xuICAvLyB3ZSBza2lwIGFjY291bnQsIHJlZ2lvbiBhbmQgcmVzb3VyY2VUeXBlIGZvciBTMyByZXNvdXJjZXNcbiAgcmV0dXJuIGBhcm46JHtwYXJ0cy5wYXJ0aXRpb259OiR7cGFydHMuc2VydmljZX06Ojoke3BhcnRzLnJlc291cmNlTmFtZX1gO1xufVxuXG5mdW5jdGlvbiBzdGRDb2xvblJlc291cmNlQXJuRm10KHBhcnRzOiBBcm5QYXJ0cyk6IHN0cmluZyB7XG4gIC8vIHRoaXMgaXMgYSBzdGFuZGFyZCBmb3JtYXQgZm9yIEFSTnMgbGlrZTogYXJuOmF3czpzZXJ2aWNlOnJlZ2lvbjphY2NvdW50OnJlc291cmNlVHlwZTpyZXNvdXJjZU5hbWVcbiAgcmV0dXJuIGBhcm46JHtwYXJ0cy5wYXJ0aXRpb259OiR7cGFydHMuc2VydmljZX06JHtwYXJ0cy5yZWdpb259OiR7cGFydHMuYWNjb3VudH06JHtwYXJ0cy5yZXNvdXJjZVR5cGV9OiR7cGFydHMucmVzb3VyY2VOYW1lfWA7XG59XG5cbmZ1bmN0aW9uIHN0ZFNsYXNoUmVzb3VyY2VBcm5GbXQocGFydHM6IEFyblBhcnRzKTogc3RyaW5nIHtcbiAgLy8gdGhpcyBpcyBhIHN0YW5kYXJkIGZvcm1hdCBmb3IgQVJOcyBsaWtlOiBhcm46YXdzOnNlcnZpY2U6cmVnaW9uOmFjY291bnQ6cmVzb3VyY2VUeXBlL3Jlc291cmNlTmFtZVxuICByZXR1cm4gYGFybjoke3BhcnRzLnBhcnRpdGlvbn06JHtwYXJ0cy5zZXJ2aWNlfToke3BhcnRzLnJlZ2lvbn06JHtwYXJ0cy5hY2NvdW50fToke3BhcnRzLnJlc291cmNlVHlwZX0vJHtwYXJ0cy5yZXNvdXJjZU5hbWV9YDtcbn1cblxuZnVuY3Rpb24gYXBwc3luY0dyYXBoUWxBcGlBcGlJZEZtdChwYXJ0czogQXJuUGFydHMpOiBzdHJpbmcge1xuICAvLyBhcm46YXdzOmFwcHN5bmM6dXMtZWFzdC0xOjExMTExMTExMTExMTphcGlzLzxhcGlJZD5cbiAgcmV0dXJuIHBhcnRzLnJlc291cmNlTmFtZS5zcGxpdCgnLycpWzFdO1xufVxuXG5pbnRlcmZhY2UgSW50cmluc2ljIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBhcmdzOiBhbnk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFzeW5jR2xvYmFsUmVwbGFjZShzdHI6IHN0cmluZywgcmVnZXg6IFJlZ0V4cCwgY2I6ICh4OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICghcmVnZXguZ2xvYmFsKSB7IHRocm93IG5ldyBFcnJvcignUmVnZXggbXVzdCBiZSBjcmVhdGVkIHdpdGggL2cgZmxhZycpOyB9XG5cbiAgY29uc3QgcmV0ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgbGV0IHN0YXJ0ID0gMDtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCBtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyKTtcbiAgICBpZiAoIW1hdGNoKSB7IGJyZWFrOyB9XG5cbiAgICByZXQucHVzaChzdHIuc3Vic3RyaW5nKHN0YXJ0LCBtYXRjaC5pbmRleCkpO1xuICAgIHJldC5wdXNoKGF3YWl0IGNiKG1hdGNoWzFdKSk7XG5cbiAgICBzdGFydCA9IHJlZ2V4Lmxhc3RJbmRleDtcbiAgfVxuICByZXQucHVzaChzdHIuc3Vic3RyKHN0YXJ0KSk7XG5cbiAgcmV0dXJuIHJldC5qb2luKCcnKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { EvaluateCloudFormationTemplate } from '../evaluate-cloudformation-template';
|
|
2
|
+
import { ChangeHotswapResult, HotswappableChangeCandidate } from './common';
|
|
3
|
+
export declare function isHotswappableAppSyncChange(logicalId: string, change: HotswappableChangeCandidate, evaluateCfnTemplate: EvaluateCloudFormationTemplate): Promise<ChangeHotswapResult>;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isHotswappableAppSyncChange = void 0;
|
|
4
|
+
const common_1 = require("./common");
|
|
5
|
+
async function isHotswappableAppSyncChange(logicalId, change, evaluateCfnTemplate) {
|
|
6
|
+
const isResolver = change.newValue.Type === 'AWS::AppSync::Resolver';
|
|
7
|
+
const isFunction = change.newValue.Type === 'AWS::AppSync::FunctionConfiguration';
|
|
8
|
+
if (!isResolver && !isFunction) {
|
|
9
|
+
return common_1.ChangeHotswapImpact.REQUIRES_FULL_DEPLOYMENT;
|
|
10
|
+
}
|
|
11
|
+
for (const updatedPropName in change.propertyUpdates) {
|
|
12
|
+
if (updatedPropName !== 'RequestMappingTemplate' && updatedPropName !== 'ResponseMappingTemplate') {
|
|
13
|
+
return common_1.ChangeHotswapImpact.REQUIRES_FULL_DEPLOYMENT;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
const resourceProperties = change.newValue.Properties;
|
|
17
|
+
if (isResolver && (resourceProperties === null || resourceProperties === void 0 ? void 0 : resourceProperties.Kind) === 'PIPELINE') {
|
|
18
|
+
// Pipeline resolvers can't be hotswapped as they reference
|
|
19
|
+
// the FunctionId of the underlying functions, which can't be resolved.
|
|
20
|
+
return common_1.ChangeHotswapImpact.REQUIRES_FULL_DEPLOYMENT;
|
|
21
|
+
}
|
|
22
|
+
const resourcePhysicalName = await evaluateCfnTemplate.establishResourcePhysicalName(logicalId, isFunction ? resourceProperties === null || resourceProperties === void 0 ? void 0 : resourceProperties.Name : undefined);
|
|
23
|
+
if (!resourcePhysicalName) {
|
|
24
|
+
return common_1.ChangeHotswapImpact.REQUIRES_FULL_DEPLOYMENT;
|
|
25
|
+
}
|
|
26
|
+
const evaluatedResourceProperties = await evaluateCfnTemplate.evaluateCfnExpression(resourceProperties);
|
|
27
|
+
const sdkCompatibleResourceProperties = common_1.transformObjectKeys(evaluatedResourceProperties, common_1.lowerCaseFirstCharacter);
|
|
28
|
+
if (isResolver) {
|
|
29
|
+
// Resolver physical name is the ARN in the format:
|
|
30
|
+
// arn:aws:appsync:us-east-1:111111111111:apis/<apiId>/types/<type>/resolvers/<field>.
|
|
31
|
+
// We'll use `<type>.<field>` as the resolver name.
|
|
32
|
+
const arnParts = resourcePhysicalName.split('/');
|
|
33
|
+
const resolverName = `${arnParts[3]}.${arnParts[5]}`;
|
|
34
|
+
return new ResolverHotswapOperation(resolverName, sdkCompatibleResourceProperties);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
return new FunctionHotswapOperation(resourcePhysicalName, sdkCompatibleResourceProperties);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.isHotswappableAppSyncChange = isHotswappableAppSyncChange;
|
|
41
|
+
class ResolverHotswapOperation {
|
|
42
|
+
constructor(resolverName, updateResolverRequest) {
|
|
43
|
+
this.updateResolverRequest = updateResolverRequest;
|
|
44
|
+
this.service = 'appsync';
|
|
45
|
+
this.resourceNames = [`AppSync resolver '${resolverName}'`];
|
|
46
|
+
}
|
|
47
|
+
async apply(sdk) {
|
|
48
|
+
return sdk.appsync().updateResolver(this.updateResolverRequest).promise();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
class FunctionHotswapOperation {
|
|
52
|
+
constructor(functionName, updateFunctionRequest) {
|
|
53
|
+
this.functionName = functionName;
|
|
54
|
+
this.updateFunctionRequest = updateFunctionRequest;
|
|
55
|
+
this.service = 'appsync';
|
|
56
|
+
this.resourceNames = [`AppSync function '${functionName}'`];
|
|
57
|
+
}
|
|
58
|
+
async apply(sdk) {
|
|
59
|
+
var _a;
|
|
60
|
+
const { functions } = await sdk.appsync().listFunctions({ apiId: this.updateFunctionRequest.apiId }).promise();
|
|
61
|
+
const { functionId } = (_a = functions === null || functions === void 0 ? void 0 : functions.find(fn => fn.name === this.functionName)) !== null && _a !== void 0 ? _a : {};
|
|
62
|
+
const request = {
|
|
63
|
+
...this.updateFunctionRequest,
|
|
64
|
+
functionId: functionId,
|
|
65
|
+
};
|
|
66
|
+
return sdk.appsync().updateFunction(request).promise();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwc3luYy1tYXBwaW5nLXRlbXBsYXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFwcHN5bmMtbWFwcGluZy10ZW1wbGF0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0EscUNBQWlLO0FBRTFKLEtBQUssVUFBVSwyQkFBMkIsQ0FDL0MsU0FBaUIsRUFBRSxNQUFtQyxFQUFFLG1CQUFtRDtJQUUzRyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyx3QkFBd0IsQ0FBQztJQUNyRSxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxxQ0FBcUMsQ0FBQztJQUVsRixJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsVUFBVSxFQUFFO1FBQzlCLE9BQU8sNEJBQW1CLENBQUMsd0JBQXdCLENBQUM7S0FDckQ7SUFFRCxLQUFLLE1BQU0sZUFBZSxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUU7UUFDcEQsSUFBSSxlQUFlLEtBQUssd0JBQXdCLElBQUksZUFBZSxLQUFLLHlCQUF5QixFQUFFO1lBQ2pHLE9BQU8sNEJBQW1CLENBQUMsd0JBQXdCLENBQUM7U0FDckQ7S0FDRjtJQUVELE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDdEQsSUFBSSxVQUFVLElBQUksQ0FBQSxrQkFBa0IsYUFBbEIsa0JBQWtCLHVCQUFsQixrQkFBa0IsQ0FBRSxJQUFJLE1BQUssVUFBVSxFQUFFO1FBQ3pELDJEQUEyRDtRQUMzRCx1RUFBdUU7UUFDdkUsT0FBTyw0QkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQztLQUNyRDtJQUVELE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyw2QkFBNkIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsYUFBbEIsa0JBQWtCLHVCQUFsQixrQkFBa0IsQ0FBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25KLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtRQUN6QixPQUFPLDRCQUFtQixDQUFDLHdCQUF3QixDQUFDO0tBQ3JEO0lBRUQsTUFBTSwyQkFBMkIsR0FBRyxNQUFNLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDeEcsTUFBTSwrQkFBK0IsR0FBRyw0QkFBbUIsQ0FBQywyQkFBMkIsRUFBRSxnQ0FBdUIsQ0FBQyxDQUFDO0lBRWxILElBQUksVUFBVSxFQUFFO1FBQ2QsbURBQW1EO1FBQ25ELHNGQUFzRjtRQUN0RixtREFBbUQ7UUFDbkQsTUFBTSxRQUFRLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sWUFBWSxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3JELE9BQU8sSUFBSSx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsK0JBQStCLENBQUMsQ0FBQztLQUNwRjtTQUFNO1FBQ0wsT0FBTyxJQUFJLHdCQUF3QixDQUFDLG9CQUFvQixFQUFFLCtCQUErQixDQUFDLENBQUM7S0FDNUY7QUFDSCxDQUFDO0FBekNELGtFQXlDQztBQUVELE1BQU0sd0JBQXdCO0lBSTVCLFlBQVksWUFBb0IsRUFBbUIscUJBQXdEO1FBQXhELDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBbUM7UUFIM0YsWUFBTyxHQUFHLFNBQVMsQ0FBQTtRQUlqQyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMscUJBQXFCLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBUztRQUMxQixPQUFPLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDNUUsQ0FBQztDQUNGO0FBRUQsTUFBTSx3QkFBd0I7SUFJNUIsWUFDbUIsWUFBb0IsRUFDcEIscUJBQTRFO1FBRDVFLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQ3BCLDBCQUFxQixHQUFyQixxQkFBcUIsQ0FBdUQ7UUFML0UsWUFBTyxHQUFHLFNBQVMsQ0FBQTtRQU9qQyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMscUJBQXFCLFlBQVksR0FBRyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBUzs7UUFDMUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMvRyxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQUcsU0FBUyxhQUFULFNBQVMsdUJBQVQsU0FBUyxDQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFlBQVksb0NBQUssRUFBRSxDQUFDO1FBQ2xGLE1BQU0sT0FBTyxHQUFHO1lBQ2QsR0FBRyxJQUFJLENBQUMscUJBQXFCO1lBQzdCLFVBQVUsRUFBRSxVQUFXO1NBQ3hCLENBQUM7UUFDRixPQUFPLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0IHsgSVNESyB9IGZyb20gJy4uL2F3cy1hdXRoJztcbmltcG9ydCB7IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSB9IGZyb20gJy4uL2V2YWx1YXRlLWNsb3VkZm9ybWF0aW9uLXRlbXBsYXRlJztcbmltcG9ydCB7IENoYW5nZUhvdHN3YXBJbXBhY3QsIENoYW5nZUhvdHN3YXBSZXN1bHQsIEhvdHN3YXBPcGVyYXRpb24sIEhvdHN3YXBwYWJsZUNoYW5nZUNhbmRpZGF0ZSwgbG93ZXJDYXNlRmlyc3RDaGFyYWN0ZXIsIHRyYW5zZm9ybU9iamVjdEtleXMgfSBmcm9tICcuL2NvbW1vbic7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc0hvdHN3YXBwYWJsZUFwcFN5bmNDaGFuZ2UoXG4gIGxvZ2ljYWxJZDogc3RyaW5nLCBjaGFuZ2U6IEhvdHN3YXBwYWJsZUNoYW5nZUNhbmRpZGF0ZSwgZXZhbHVhdGVDZm5UZW1wbGF0ZTogRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlLFxuKTogUHJvbWlzZTxDaGFuZ2VIb3Rzd2FwUmVzdWx0PiB7XG4gIGNvbnN0IGlzUmVzb2x2ZXIgPSBjaGFuZ2UubmV3VmFsdWUuVHlwZSA9PT0gJ0FXUzo6QXBwU3luYzo6UmVzb2x2ZXInO1xuICBjb25zdCBpc0Z1bmN0aW9uID0gY2hhbmdlLm5ld1ZhbHVlLlR5cGUgPT09ICdBV1M6OkFwcFN5bmM6OkZ1bmN0aW9uQ29uZmlndXJhdGlvbic7XG5cbiAgaWYgKCFpc1Jlc29sdmVyICYmICFpc0Z1bmN0aW9uKSB7XG4gICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICB9XG5cbiAgZm9yIChjb25zdCB1cGRhdGVkUHJvcE5hbWUgaW4gY2hhbmdlLnByb3BlcnR5VXBkYXRlcykge1xuICAgIGlmICh1cGRhdGVkUHJvcE5hbWUgIT09ICdSZXF1ZXN0TWFwcGluZ1RlbXBsYXRlJyAmJiB1cGRhdGVkUHJvcE5hbWUgIT09ICdSZXNwb25zZU1hcHBpbmdUZW1wbGF0ZScpIHtcbiAgICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgICB9XG4gIH1cblxuICBjb25zdCByZXNvdXJjZVByb3BlcnRpZXMgPSBjaGFuZ2UubmV3VmFsdWUuUHJvcGVydGllcztcbiAgaWYgKGlzUmVzb2x2ZXIgJiYgcmVzb3VyY2VQcm9wZXJ0aWVzPy5LaW5kID09PSAnUElQRUxJTkUnKSB7XG4gICAgLy8gUGlwZWxpbmUgcmVzb2x2ZXJzIGNhbid0IGJlIGhvdHN3YXBwZWQgYXMgdGhleSByZWZlcmVuY2VcbiAgICAvLyB0aGUgRnVuY3Rpb25JZCBvZiB0aGUgdW5kZXJseWluZyBmdW5jdGlvbnMsIHdoaWNoIGNhbid0IGJlIHJlc29sdmVkLlxuICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgfVxuXG4gIGNvbnN0IHJlc291cmNlUGh5c2ljYWxOYW1lID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5lc3RhYmxpc2hSZXNvdXJjZVBoeXNpY2FsTmFtZShsb2dpY2FsSWQsIGlzRnVuY3Rpb24gPyByZXNvdXJjZVByb3BlcnRpZXM/Lk5hbWUgOiB1bmRlZmluZWQpO1xuICBpZiAoIXJlc291cmNlUGh5c2ljYWxOYW1lKSB7XG4gICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICB9XG5cbiAgY29uc3QgZXZhbHVhdGVkUmVzb3VyY2VQcm9wZXJ0aWVzID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24ocmVzb3VyY2VQcm9wZXJ0aWVzKTtcbiAgY29uc3Qgc2RrQ29tcGF0aWJsZVJlc291cmNlUHJvcGVydGllcyA9IHRyYW5zZm9ybU9iamVjdEtleXMoZXZhbHVhdGVkUmVzb3VyY2VQcm9wZXJ0aWVzLCBsb3dlckNhc2VGaXJzdENoYXJhY3Rlcik7XG5cbiAgaWYgKGlzUmVzb2x2ZXIpIHtcbiAgICAvLyBSZXNvbHZlciBwaHlzaWNhbCBuYW1lIGlzIHRoZSBBUk4gaW4gdGhlIGZvcm1hdDpcbiAgICAvLyBhcm46YXdzOmFwcHN5bmM6dXMtZWFzdC0xOjExMTExMTExMTExMTphcGlzLzxhcGlJZD4vdHlwZXMvPHR5cGU+L3Jlc29sdmVycy88ZmllbGQ+LlxuICAgIC8vIFdlJ2xsIHVzZSBgPHR5cGU+LjxmaWVsZD5gIGFzIHRoZSByZXNvbHZlciBuYW1lLlxuICAgIGNvbnN0IGFyblBhcnRzID0gcmVzb3VyY2VQaHlzaWNhbE5hbWUuc3BsaXQoJy8nKTtcbiAgICBjb25zdCByZXNvbHZlck5hbWUgPSBgJHthcm5QYXJ0c1szXX0uJHthcm5QYXJ0c1s1XX1gO1xuICAgIHJldHVybiBuZXcgUmVzb2x2ZXJIb3Rzd2FwT3BlcmF0aW9uKHJlc29sdmVyTmFtZSwgc2RrQ29tcGF0aWJsZVJlc291cmNlUHJvcGVydGllcyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbkhvdHN3YXBPcGVyYXRpb24ocmVzb3VyY2VQaHlzaWNhbE5hbWUsIHNka0NvbXBhdGlibGVSZXNvdXJjZVByb3BlcnRpZXMpO1xuICB9XG59XG5cbmNsYXNzIFJlc29sdmVySG90c3dhcE9wZXJhdGlvbiBpbXBsZW1lbnRzIEhvdHN3YXBPcGVyYXRpb24ge1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZSA9ICdhcHBzeW5jJ1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2VOYW1lczogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocmVzb2x2ZXJOYW1lOiBzdHJpbmcsIHByaXZhdGUgcmVhZG9ubHkgdXBkYXRlUmVzb2x2ZXJSZXF1ZXN0OiBBV1MuQXBwU3luYy5VcGRhdGVSZXNvbHZlclJlcXVlc3QpIHtcbiAgICB0aGlzLnJlc291cmNlTmFtZXMgPSBbYEFwcFN5bmMgcmVzb2x2ZXIgJyR7cmVzb2x2ZXJOYW1lfSdgXTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhcHBseShzZGs6IElTREspOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBzZGsuYXBwc3luYygpLnVwZGF0ZVJlc29sdmVyKHRoaXMudXBkYXRlUmVzb2x2ZXJSZXF1ZXN0KS5wcm9taXNlKCk7XG4gIH1cbn1cblxuY2xhc3MgRnVuY3Rpb25Ib3Rzd2FwT3BlcmF0aW9uIGltcGxlbWVudHMgSG90c3dhcE9wZXJhdGlvbiB7XG4gIHB1YmxpYyByZWFkb25seSBzZXJ2aWNlID0gJ2FwcHN5bmMnXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZU5hbWVzOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZ1bmN0aW9uTmFtZTogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdXBkYXRlRnVuY3Rpb25SZXF1ZXN0OiBPbWl0PEFXUy5BcHBTeW5jLlVwZGF0ZUZ1bmN0aW9uUmVxdWVzdCwgJ2Z1bmN0aW9uSWQnPixcbiAgKSB7XG4gICAgdGhpcy5yZXNvdXJjZU5hbWVzID0gW2BBcHBTeW5jIGZ1bmN0aW9uICcke2Z1bmN0aW9uTmFtZX0nYF07XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYXBwbHkoc2RrOiBJU0RLKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCB7IGZ1bmN0aW9ucyB9ID0gYXdhaXQgc2RrLmFwcHN5bmMoKS5saXN0RnVuY3Rpb25zKHsgYXBpSWQ6IHRoaXMudXBkYXRlRnVuY3Rpb25SZXF1ZXN0LmFwaUlkIH0pLnByb21pc2UoKTtcbiAgICBjb25zdCB7IGZ1bmN0aW9uSWQgfSA9IGZ1bmN0aW9ucz8uZmluZChmbiA9PiBmbi5uYW1lID09PSB0aGlzLmZ1bmN0aW9uTmFtZSkgPz8ge307XG4gICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgIC4uLnRoaXMudXBkYXRlRnVuY3Rpb25SZXF1ZXN0LFxuICAgICAgZnVuY3Rpb25JZDogZnVuY3Rpb25JZCEsXG4gICAgfTtcbiAgICByZXR1cm4gc2RrLmFwcHN5bmMoKS51cGRhdGVGdW5jdGlvbihyZXF1ZXN0KS5wcm9taXNlKCk7XG4gIH1cbn1cbiJdfQ==
|