aws-cdk 2.38.1 → 2.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/THIRD_PARTY_LICENSES +83 -3
- package/build-info.json +2 -2
- package/lib/api/aws-auth/aws-sdk-inifile.js +2 -3
- package/lib/api/aws-auth/awscli-compatible.js +5 -7
- package/lib/api/aws-auth/sdk-provider.js +18 -12
- package/lib/api/aws-auth/sdk.d.ts +20 -0
- package/lib/api/aws-auth/sdk.js +40 -5
- package/lib/api/bootstrap/bootstrap-environment.js +14 -15
- package/lib/api/bootstrap/deploy-bootstrap.js +5 -7
- package/lib/api/cloudformation-deployments.d.ts +28 -0
- package/lib/api/cloudformation-deployments.js +30 -15
- package/lib/api/cxapp/cloud-assembly.js +3 -4
- package/lib/api/cxapp/cloud-executable.js +2 -3
- package/lib/api/cxapp/exec.js +8 -10
- package/lib/api/deploy-stack.js +11 -13
- package/lib/api/evaluate-cloudformation-template.js +6 -11
- package/lib/api/hotswap/appsync-mapping-templates.js +4 -5
- package/lib/api/hotswap/code-build-projects.js +2 -3
- package/lib/api/hotswap/common.d.ts +6 -1
- package/lib/api/hotswap/common.js +14 -4
- package/lib/api/hotswap/ecs-services.js +23 -6
- package/lib/api/hotswap/lambda-functions.js +6 -9
- package/lib/api/hotswap/s3-bucket-deployments.js +3 -5
- package/lib/api/hotswap/stepfunctions-state-machines.js +2 -3
- package/lib/api/hotswap-deployments.js +5 -7
- package/lib/api/logs/logs-monitor.js +5 -8
- package/lib/api/nested-stack-helpers.js +9 -11
- package/lib/api/toolkit-info.js +12 -17
- package/lib/api/util/cloudformation/stack-activity-monitor.js +17 -27
- package/lib/api/util/cloudformation.js +7 -11
- package/lib/api/util/placeholders.js +2 -3
- package/lib/assets.js +3 -4
- package/lib/build.d.ts +6 -0
- package/lib/build.js +20 -0
- package/lib/cdk-toolkit.d.ts +15 -0
- package/lib/cdk-toolkit.js +62 -20
- package/lib/cli.js +15 -15
- package/lib/context-providers/load-balancers.js +11 -18
- package/lib/context-providers/security-groups.js +5 -7
- package/lib/deploy.d.ts +7 -0
- package/lib/deploy.js +51 -0
- package/lib/import.js +8 -13
- package/lib/index.js +9378 -2580
- package/lib/init-templates/app/go/%name%.template.go +2 -0
- package/lib/init-templates/app/go/%name%_test.template.go +1 -1
- package/lib/init-templates/app/go/go.template.mod +1 -1
- package/lib/init-templates/sample-app/go/%name%.template.go +2 -0
- package/lib/init-templates/sample-app/go/%name%_test.template.go +1 -1
- package/lib/init-templates/sample-app/go/go.template.mod +1 -1
- package/lib/notices.js +11 -17
- package/lib/settings.js +4 -5
- package/lib/setup-sandbox.js +2 -1
- package/lib/util/asset-publishing.d.ts +16 -0
- package/lib/util/asset-publishing.js +34 -9
- package/lib/util/directories.js +2 -3
- package/lib/version.js +2 -2
- package/package.json +13 -12
- package/test/api/bootstrap2.test.js +2 -3
- package/test/api/cloud-executable.test.js +2 -3
- package/test/api/cloudformation-deployments.test.js +123 -1
- package/test/api/deploy-stack.test.js +4 -7
- package/test/api/fake-sts.js +13 -9
- package/test/api/hotswap/ecs-services-hotswap-deployments.test.js +113 -1
- package/test/api/hotswap/hotswap-deployments.test.js +4 -4
- package/test/api/sdk-provider.test.js +22 -11
- package/test/aws-sdk-non-public-apis.test.js +2 -3
- package/test/build.test.d.ts +1 -0
- package/test/build.test.js +31 -0
- package/test/cdk-toolkit.test.js +27 -1
- package/test/context-providers/load-balancers.test.js +3 -5
- package/test/deploy.test.d.ts +1 -0
- package/test/deploy.test.js +186 -0
- package/test/import.test.js +2 -2
- package/test/init.test.js +2 -3
- package/test/integ/cli/app/app.js +8 -1
- package/test/integ/cli/bootstrapping.integtest.js +9 -20
- package/test/integ/cli/cli.integtest.js +57 -34
- package/test/integ/github-helpers.js +2 -3
- package/test/integ/helpers/aws.js +4 -7
- package/test/integ/helpers/cdk.js +21 -30
- package/test/integ/helpers/sam.js +10 -17
- package/test/util/mock-child_process.js +3 -4
- package/test/util/mock-sdk.js +4 -6
- package/test/util/mock-toolkitinfo.js +4 -5
- package/test/util.js +3 -5
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.isHotswappableCodeBuildProjectChange = void 0;
|
|
4
4
|
const common_1 = require("./common");
|
|
5
5
|
async function isHotswappableCodeBuildProjectChange(logicalId, change, evaluateCfnTemplate) {
|
|
6
|
-
var _a;
|
|
7
6
|
if (change.newValue.Type !== 'AWS::CodeBuild::Project') {
|
|
8
7
|
return common_1.ChangeHotswapImpact.REQUIRES_FULL_DEPLOYMENT;
|
|
9
8
|
}
|
|
@@ -26,7 +25,7 @@ async function isHotswappableCodeBuildProjectChange(logicalId, change, evaluateC
|
|
|
26
25
|
return common_1.ChangeHotswapImpact.REQUIRES_FULL_DEPLOYMENT;
|
|
27
26
|
}
|
|
28
27
|
}
|
|
29
|
-
const projectName = await evaluateCfnTemplate.establishResourcePhysicalName(logicalId,
|
|
28
|
+
const projectName = await evaluateCfnTemplate.establishResourcePhysicalName(logicalId, change.newValue.Properties?.Name);
|
|
30
29
|
if (!projectName) {
|
|
31
30
|
return common_1.ChangeHotswapImpact.REQUIRES_FULL_DEPLOYMENT;
|
|
32
31
|
}
|
|
@@ -50,4 +49,4 @@ function convertSourceCloudformationKeyToSdkKey(key) {
|
|
|
50
49
|
}
|
|
51
50
|
return common_1.lowerCaseFirstCharacter(key);
|
|
52
51
|
}
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1idWlsZC1wcm9qZWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvZGUtYnVpbGQtcHJvamVjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0EscUNBQWlLO0FBRTFKLEtBQUssVUFBVSxvQ0FBb0MsQ0FDeEQsU0FBaUIsRUFBRSxNQUFtQyxFQUFFLG1CQUFtRDtJQUUzRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLHlCQUF5QixFQUFFO1FBQ3RELE9BQU8sNEJBQW1CLENBQUMsd0JBQXdCLENBQUM7S0FDckQ7SUFFRCxNQUFNLGtCQUFrQixHQUFxQztRQUMzRCxJQUFJLEVBQUUsRUFBRTtLQUNULENBQUM7SUFDRixLQUFLLE1BQU0sZUFBZSxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUU7UUFDcEQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM1RCxRQUFRLGVBQWUsRUFBRTtZQUN2QixLQUFLLFFBQVE7Z0JBQ1gsa0JBQWtCLENBQUMsTUFBTSxHQUFHLDRCQUFtQixDQUM3QyxNQUFNLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFDckUsc0NBQXNDLENBQ3ZDLENBQUM7Z0JBQ0YsTUFBTTtZQUNSLEtBQUssYUFBYTtnQkFDaEIsa0JBQWtCLENBQUMsV0FBVyxHQUFHLE1BQU0sNEJBQW1CLENBQ3hELE1BQU0sbUJBQW1CLENBQUMscUJBQXFCLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUNyRSxnQ0FBdUIsQ0FDeEIsQ0FBQztnQkFDRixNQUFNO1lBQ1IsS0FBSyxlQUFlO2dCQUNsQixrQkFBa0IsQ0FBQyxhQUFhLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3pHLE1BQU07WUFDUjtnQkFDRSxPQUFPLDRCQUFtQixDQUFDLHdCQUF3QixDQUFDO1NBQ3ZEO0tBQ0Y7SUFFRCxNQUFNLFdBQVcsR0FBRyxNQUFNLG1CQUFtQixDQUFDLDZCQUE2QixDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN6SCxJQUFJLENBQUMsV0FBVyxFQUFFO1FBQ2hCLE9BQU8sNEJBQW1CLENBQUMsd0JBQXdCLENBQUM7S0FDckQ7SUFDRCxrQkFBa0IsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO0lBQ3RDLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUF2Q0Qsb0ZBdUNDO0FBRUQsTUFBTSx1QkFBdUI7SUFJM0IsWUFDbUIsa0JBQW9EO1FBQXBELHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBa0M7UUFKdkQsWUFBTyxHQUFHLFdBQVcsQ0FBQTtRQU1uQyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsc0JBQXNCLGtCQUFrQixDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVNLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBUztRQUMxQixPQUFPLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDMUUsQ0FBQztDQUNGO0FBRUQsU0FBUyxzQ0FBc0MsQ0FBQyxHQUFXO0lBQ3pELElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLFdBQVcsRUFBRTtRQUNyQyxPQUFPLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztLQUMxQjtJQUNELE9BQU8sZ0NBQXVCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEFXUyBmcm9tICdhd3Mtc2RrJztcbmltcG9ydCB7IElTREsgfSBmcm9tICcuLi9hd3MtYXV0aCc7XG5pbXBvcnQgeyBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUgfSBmcm9tICcuLi9ldmFsdWF0ZS1jbG91ZGZvcm1hdGlvbi10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBDaGFuZ2VIb3Rzd2FwSW1wYWN0LCBDaGFuZ2VIb3Rzd2FwUmVzdWx0LCBIb3Rzd2FwT3BlcmF0aW9uLCBIb3Rzd2FwcGFibGVDaGFuZ2VDYW5kaWRhdGUsIGxvd2VyQ2FzZUZpcnN0Q2hhcmFjdGVyLCB0cmFuc2Zvcm1PYmplY3RLZXlzIH0gZnJvbSAnLi9jb21tb24nO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNIb3Rzd2FwcGFibGVDb2RlQnVpbGRQcm9qZWN0Q2hhbmdlKFxuICBsb2dpY2FsSWQ6IHN0cmluZywgY2hhbmdlOiBIb3Rzd2FwcGFibGVDaGFuZ2VDYW5kaWRhdGUsIGV2YWx1YXRlQ2ZuVGVtcGxhdGU6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSxcbik6IFByb21pc2U8Q2hhbmdlSG90c3dhcFJlc3VsdD4ge1xuICBpZiAoY2hhbmdlLm5ld1ZhbHVlLlR5cGUgIT09ICdBV1M6OkNvZGVCdWlsZDo6UHJvamVjdCcpIHtcbiAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gIH1cblxuICBjb25zdCB1cGRhdGVQcm9qZWN0SW5wdXQ6IEFXUy5Db2RlQnVpbGQuVXBkYXRlUHJvamVjdElucHV0ID0ge1xuICAgIG5hbWU6ICcnLFxuICB9O1xuICBmb3IgKGNvbnN0IHVwZGF0ZWRQcm9wTmFtZSBpbiBjaGFuZ2UucHJvcGVydHlVcGRhdGVzKSB7XG4gICAgY29uc3QgdXBkYXRlZFByb3AgPSBjaGFuZ2UucHJvcGVydHlVcGRhdGVzW3VwZGF0ZWRQcm9wTmFtZV07XG4gICAgc3dpdGNoICh1cGRhdGVkUHJvcE5hbWUpIHtcbiAgICAgIGNhc2UgJ1NvdXJjZSc6XG4gICAgICAgIHVwZGF0ZVByb2plY3RJbnB1dC5zb3VyY2UgPSB0cmFuc2Zvcm1PYmplY3RLZXlzKFxuICAgICAgICAgIGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHVwZGF0ZWRQcm9wLm5ld1ZhbHVlKSxcbiAgICAgICAgICBjb252ZXJ0U291cmNlQ2xvdWRmb3JtYXRpb25LZXlUb1Nka0tleSxcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdFbnZpcm9ubWVudCc6XG4gICAgICAgIHVwZGF0ZVByb2plY3RJbnB1dC5lbnZpcm9ubWVudCA9IGF3YWl0IHRyYW5zZm9ybU9iamVjdEtleXMoXG4gICAgICAgICAgYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24odXBkYXRlZFByb3AubmV3VmFsdWUpLFxuICAgICAgICAgIGxvd2VyQ2FzZUZpcnN0Q2hhcmFjdGVyLFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1NvdXJjZVZlcnNpb24nOlxuICAgICAgICB1cGRhdGVQcm9qZWN0SW5wdXQuc291cmNlVmVyc2lvbiA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHVwZGF0ZWRQcm9wLm5ld1ZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcHJvamVjdE5hbWUgPSBhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmVzdGFibGlzaFJlc291cmNlUGh5c2ljYWxOYW1lKGxvZ2ljYWxJZCwgY2hhbmdlLm5ld1ZhbHVlLlByb3BlcnRpZXM/Lk5hbWUpO1xuICBpZiAoIXByb2plY3ROYW1lKSB7XG4gICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICB9XG4gIHVwZGF0ZVByb2plY3RJbnB1dC5uYW1lID0gcHJvamVjdE5hbWU7XG4gIHJldHVybiBuZXcgUHJvamVjdEhvdHN3YXBPcGVyYXRpb24odXBkYXRlUHJvamVjdElucHV0KTtcbn1cblxuY2xhc3MgUHJvamVjdEhvdHN3YXBPcGVyYXRpb24gaW1wbGVtZW50cyBIb3Rzd2FwT3BlcmF0aW9uIHtcbiAgcHVibGljIHJlYWRvbmx5IHNlcnZpY2UgPSAnY29kZWJ1aWxkJ1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2VOYW1lczogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB1cGRhdGVQcm9qZWN0SW5wdXQ6IEFXUy5Db2RlQnVpbGQuVXBkYXRlUHJvamVjdElucHV0LFxuICApIHtcbiAgICB0aGlzLnJlc291cmNlTmFtZXMgPSBbYENvZGVCdWlsZCBwcm9qZWN0ICcke3VwZGF0ZVByb2plY3RJbnB1dC5uYW1lfSdgXTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhcHBseShzZGs6IElTREspOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBzZGsuY29kZUJ1aWxkKCkudXBkYXRlUHJvamVjdCh0aGlzLnVwZGF0ZVByb2plY3RJbnB1dCkucHJvbWlzZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnRTb3VyY2VDbG91ZGZvcm1hdGlvbktleVRvU2RrS2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnYnVpbGRzcGVjJykge1xuICAgIHJldHVybiBrZXkudG9Mb3dlckNhc2UoKTtcbiAgfVxuICByZXR1cm4gbG93ZXJDYXNlRmlyc3RDaGFyYWN0ZXIoa2V5KTtcbn1cbiJdfQ==
|
|
@@ -51,15 +51,20 @@ export declare class HotswappableChangeCandidate {
|
|
|
51
51
|
[key: string]: cfn_diff.PropertyDifference<any>;
|
|
52
52
|
});
|
|
53
53
|
}
|
|
54
|
+
declare type Exclude = {
|
|
55
|
+
[key: string]: Exclude | true;
|
|
56
|
+
};
|
|
54
57
|
/**
|
|
55
58
|
* This function transforms all keys (recursively) in the provided `val` object.
|
|
56
59
|
*
|
|
57
60
|
* @param val The object whose keys need to be transformed.
|
|
58
61
|
* @param transform The function that will be applied to each key.
|
|
62
|
+
* @param exclude The keys that will not be transformed and copied to output directly
|
|
59
63
|
* @returns A new object with the same values as `val`, but with all keys transformed according to `transform`.
|
|
60
64
|
*/
|
|
61
|
-
export declare function transformObjectKeys(val: any, transform: (str: string) => string): any;
|
|
65
|
+
export declare function transformObjectKeys(val: any, transform: (str: string) => string, exclude?: Exclude): any;
|
|
62
66
|
/**
|
|
63
67
|
* This function lower cases the first character of the string provided.
|
|
64
68
|
*/
|
|
65
69
|
export declare function lowerCaseFirstCharacter(str: string): string;
|
|
70
|
+
export {};
|
|
@@ -34,18 +34,28 @@ exports.HotswappableChangeCandidate = HotswappableChangeCandidate;
|
|
|
34
34
|
*
|
|
35
35
|
* @param val The object whose keys need to be transformed.
|
|
36
36
|
* @param transform The function that will be applied to each key.
|
|
37
|
+
* @param exclude The keys that will not be transformed and copied to output directly
|
|
37
38
|
* @returns A new object with the same values as `val`, but with all keys transformed according to `transform`.
|
|
38
39
|
*/
|
|
39
|
-
function transformObjectKeys(val, transform) {
|
|
40
|
+
function transformObjectKeys(val, transform, exclude = {}) {
|
|
40
41
|
if (val == null || typeof val !== 'object') {
|
|
41
42
|
return val;
|
|
42
43
|
}
|
|
43
44
|
if (Array.isArray(val)) {
|
|
44
|
-
|
|
45
|
+
// For arrays we just pass parent's exclude object directly
|
|
46
|
+
// since it makes no sense to specify different exclude options for each array element
|
|
47
|
+
return val.map((input) => transformObjectKeys(input, transform, exclude));
|
|
45
48
|
}
|
|
46
49
|
const ret = {};
|
|
47
50
|
for (const [k, v] of Object.entries(val)) {
|
|
48
|
-
|
|
51
|
+
const childExclude = exclude[k];
|
|
52
|
+
if (childExclude === true) {
|
|
53
|
+
// we don't transform this object if the key is specified in exclude
|
|
54
|
+
ret[transform(k)] = v;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
ret[transform(k)] = transformObjectKeys(v, transform, childExclude);
|
|
58
|
+
}
|
|
49
59
|
}
|
|
50
60
|
return ret;
|
|
51
61
|
}
|
|
@@ -57,4 +67,4 @@ function lowerCaseFirstCharacter(str) {
|
|
|
57
67
|
return str.length > 0 ? `${str[0].toLowerCase()}${str.slice(1)}` : str;
|
|
58
68
|
}
|
|
59
69
|
exports.lowerCaseFirstCharacter = lowerCaseFirstCharacter;
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdhLFFBQUEsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQW9CeEI7O0dBRUc7QUFDSCxJQUFZLG1CQWFYO0FBYkQsV0FBWSxtQkFBbUI7SUFDN0I7OztPQUdHO0lBQ0gsNEVBQXFELENBQUE7SUFFckQ7Ozs7T0FJRztJQUNILGdEQUF5QixDQUFBO0FBQzNCLENBQUMsRUFiVyxtQkFBbUIsR0FBbkIsMkJBQW1CLEtBQW5CLDJCQUFtQixRQWE5QjtBQUlEOztHQUVHO0FBQ0gsTUFBYSwyQkFBMkI7SUFXdEMsWUFBbUIsUUFBMkIsRUFBRSxlQUFvRTtRQUNsSCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztJQUN6QyxDQUFDO0NBQ0Y7QUFmRCxrRUFlQztBQUlEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxHQUFRLEVBQUUsU0FBa0MsRUFBRSxVQUFtQixFQUFFO0lBQ3JHLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7UUFDMUMsT0FBTyxHQUFHLENBQUM7S0FDWjtJQUNELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN0QiwyREFBMkQ7UUFDM0Qsc0ZBQXNGO1FBQ3RGLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0tBQ2hGO0lBQ0QsTUFBTSxHQUFHLEdBQTBCLEVBQUUsQ0FBQztJQUN0QyxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN4QyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsSUFBSSxZQUFZLEtBQUssSUFBSSxFQUFFO1lBQ3pCLG9FQUFvRTtZQUNwRSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3ZCO2FBQU07WUFDTCxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztTQUNyRTtLQUNGO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBcEJELGtEQW9CQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsR0FBVztJQUNqRCxPQUFPLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN6RSxDQUFDO0FBRkQsMERBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZm5fZGlmZiBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCB7IElTREsgfSBmcm9tICcuLi9hd3MtYXV0aCc7XG5cbmV4cG9ydCBjb25zdCBJQ09OID0gJ+KcqCc7XG5cbi8qKlxuICogQW4gaW50ZXJmYWNlIHRoYXQgcmVwcmVzZW50cyBhIGNoYW5nZSB0aGF0IGNhbiBiZSBkZXBsb3llZCBpbiBhIHNob3J0LWNpcmN1aXQgbWFubmVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvdHN3YXBPcGVyYXRpb24ge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgYmVpbmcgaG90c3dhcHBlZC5cbiAgICogVXNlZCB0byBzZXQgYSBjdXN0b20gVXNlci1BZ2VudCBmb3IgU0RLIGNhbGxzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZXMgb2YgdGhlIHJlc291cmNlcyBiZWluZyBob3Rzd2FwcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb3VyY2VOYW1lczogc3RyaW5nW107XG5cbiAgYXBwbHkoc2RrOiBJU0RLKTogUHJvbWlzZTxhbnk+O1xufVxuXG4vKipcbiAqIEFuIGVudW0gdGhhdCByZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgZGV0ZWN0aW9uIHdoZXRoZXIgYSBnaXZlbiBjaGFuZ2UgY2FuIGJlIGhvdHN3YXBwZWQuXG4gKi9cbmV4cG9ydCBlbnVtIENoYW5nZUhvdHN3YXBJbXBhY3Qge1xuICAvKipcbiAgICogVGhpcyByZXN1bHQgbWVhbnMgdGhhdCB0aGUgZ2l2ZW4gY2hhbmdlIGNhbm5vdCBiZSBob3Rzd2FwcGVkLFxuICAgKiBhbmQgcmVxdWlyZXMgYSBmdWxsIGRlcGxveW1lbnQuXG4gICAqL1xuICBSRVFVSVJFU19GVUxMX0RFUExPWU1FTlQgPSAncmVxdWlyZXMtZnVsbC1kZXBsb3ltZW50JyxcblxuICAvKipcbiAgICogVGhpcyByZXN1bHQgbWVhbnMgdGhhdCB0aGUgZ2l2ZW4gY2hhbmdlIGNhbiBiZSBzYWZlbHkgYmUgaWdub3JlZCB3aGVuIGRldGVybWluaW5nXG4gICAqIHdoZXRoZXIgdGhlIGdpdmVuIFN0YWNrIGNhbiBiZSBob3Rzd2FwcGVkIG9yIG5vdFxuICAgKiAoZm9yIGV4YW1wbGUsIGl0J3MgYSBjaGFuZ2UgdG8gdGhlIENES01ldGFkYXRhIHJlc291cmNlKS5cbiAgICovXG4gIElSUkVMRVZBTlQgPSAnaXJyZWxldmFudCcsXG59XG5cbmV4cG9ydCB0eXBlIENoYW5nZUhvdHN3YXBSZXN1bHQgPSBIb3Rzd2FwT3BlcmF0aW9uIHwgQ2hhbmdlSG90c3dhcEltcGFjdDtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgY2hhbmdlIHRoYXQgY2FuIGJlIGhvdHN3YXBwZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBIb3Rzd2FwcGFibGVDaGFuZ2VDYW5kaWRhdGUge1xuICAvKipcbiAgICogVGhlIHZhbHVlIHRoZSByZXNvdXJjZSBpcyBiZWluZyB1cGRhdGVkIHRvLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5ld1ZhbHVlOiBjZm5fZGlmZi5SZXNvdXJjZTtcblxuICAvKipcbiAgICogVGhlIGNoYW5nZXMgbWFkZSB0byB0aGUgcmVzb3VyY2UgcHJvcGVydGllcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcm9wZXJ0eVVwZGF0ZXM6IHsgW2tleTogc3RyaW5nXTogY2ZuX2RpZmYuUHJvcGVydHlEaWZmZXJlbmNlPGFueT4gfTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IobmV3VmFsdWU6IGNmbl9kaWZmLlJlc291cmNlLCBwcm9wZXJ0eVVwZGF0ZXM6IHsgW2tleTogc3RyaW5nXTogY2ZuX2RpZmYuUHJvcGVydHlEaWZmZXJlbmNlPGFueT4gfSkge1xuICAgIHRoaXMubmV3VmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB0aGlzLnByb3BlcnR5VXBkYXRlcyA9IHByb3BlcnR5VXBkYXRlcztcbiAgfVxufVxuXG50eXBlIEV4Y2x1ZGUgPSB7IFtrZXk6IHN0cmluZ106IEV4Y2x1ZGUgfCB0cnVlIH1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHRyYW5zZm9ybXMgYWxsIGtleXMgKHJlY3Vyc2l2ZWx5KSBpbiB0aGUgcHJvdmlkZWQgYHZhbGAgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB2YWwgVGhlIG9iamVjdCB3aG9zZSBrZXlzIG5lZWQgdG8gYmUgdHJhbnNmb3JtZWQuXG4gKiBAcGFyYW0gdHJhbnNmb3JtIFRoZSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byBlYWNoIGtleS5cbiAqIEBwYXJhbSBleGNsdWRlIFRoZSBrZXlzIHRoYXQgd2lsbCBub3QgYmUgdHJhbnNmb3JtZWQgYW5kIGNvcGllZCB0byBvdXRwdXQgZGlyZWN0bHlcbiAqIEByZXR1cm5zIEEgbmV3IG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlcyBhcyBgdmFsYCwgYnV0IHdpdGggYWxsIGtleXMgdHJhbnNmb3JtZWQgYWNjb3JkaW5nIHRvIGB0cmFuc2Zvcm1gLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtT2JqZWN0S2V5cyh2YWw6IGFueSwgdHJhbnNmb3JtOiAoc3RyOiBzdHJpbmcpID0+IHN0cmluZywgZXhjbHVkZTogRXhjbHVkZSA9IHt9KTogYW55IHtcbiAgaWYgKHZhbCA9PSBudWxsIHx8IHR5cGVvZiB2YWwgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHZhbDtcbiAgfVxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgLy8gRm9yIGFycmF5cyB3ZSBqdXN0IHBhc3MgcGFyZW50J3MgZXhjbHVkZSBvYmplY3QgZGlyZWN0bHlcbiAgICAvLyBzaW5jZSBpdCBtYWtlcyBubyBzZW5zZSB0byBzcGVjaWZ5IGRpZmZlcmVudCBleGNsdWRlIG9wdGlvbnMgZm9yIGVhY2ggYXJyYXkgZWxlbWVudFxuICAgIHJldHVybiB2YWwubWFwKChpbnB1dDogYW55KSA9PiB0cmFuc2Zvcm1PYmplY3RLZXlzKGlucHV0LCB0cmFuc2Zvcm0sIGV4Y2x1ZGUpKTtcbiAgfVxuICBjb25zdCByZXQ6IHsgW2s6IHN0cmluZ106IGFueTsgfSA9IHt9O1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh2YWwpKSB7XG4gICAgY29uc3QgY2hpbGRFeGNsdWRlID0gZXhjbHVkZVtrXTtcbiAgICBpZiAoY2hpbGRFeGNsdWRlID09PSB0cnVlKSB7XG4gICAgICAvLyB3ZSBkb24ndCB0cmFuc2Zvcm0gdGhpcyBvYmplY3QgaWYgdGhlIGtleSBpcyBzcGVjaWZpZWQgaW4gZXhjbHVkZVxuICAgICAgcmV0W3RyYW5zZm9ybShrKV0gPSB2O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXRbdHJhbnNmb3JtKGspXSA9IHRyYW5zZm9ybU9iamVjdEtleXModiwgdHJhbnNmb3JtLCBjaGlsZEV4Y2x1ZGUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gbG93ZXIgY2FzZXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nIHByb3ZpZGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG93ZXJDYXNlRmlyc3RDaGFyYWN0ZXIoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyLmxlbmd0aCA+IDAgPyBgJHtzdHJbMF0udG9Mb3dlckNhc2UoKX0ke3N0ci5zbGljZSgxKX1gIDogc3RyO1xufVxuIl19
|
|
@@ -40,7 +40,7 @@ async function isHotswappableEcsServiceChange(logicalId, change, evaluateCfnTemp
|
|
|
40
40
|
}
|
|
41
41
|
const taskDefinitionResource = change.newValue.Properties;
|
|
42
42
|
// first, let's get the name of the family
|
|
43
|
-
const familyNameOrArn = await evaluateCfnTemplate.establishResourcePhysicalName(logicalId, taskDefinitionResource
|
|
43
|
+
const familyNameOrArn = await evaluateCfnTemplate.establishResourcePhysicalName(logicalId, taskDefinitionResource?.Family);
|
|
44
44
|
if (!familyNameOrArn) {
|
|
45
45
|
// if the Family property has not bee provided, and we can't find it in the current Stack,
|
|
46
46
|
// this means hotswapping is not possible
|
|
@@ -58,7 +58,7 @@ async function isHotswappableEcsServiceChange(logicalId, change, evaluateCfnTemp
|
|
|
58
58
|
// then, let's evaluate the body of the remainder of the TaskDef (without the Family property)
|
|
59
59
|
const evaluatedTaskDef = {
|
|
60
60
|
...await evaluateCfnTemplate.evaluateCfnExpression({
|
|
61
|
-
...(taskDefinitionResource
|
|
61
|
+
...(taskDefinitionResource ?? {}),
|
|
62
62
|
Family: undefined,
|
|
63
63
|
}),
|
|
64
64
|
Family: family,
|
|
@@ -75,13 +75,30 @@ class EcsServiceHotswapOperation {
|
|
|
75
75
|
this.resourceNames = servicesReferencingTaskDef.map(ecsService => `ECS Service '${ecsService.serviceArn.split('/')[2]}'`);
|
|
76
76
|
}
|
|
77
77
|
async apply(sdk) {
|
|
78
|
-
var _a;
|
|
79
78
|
// Step 1 - update the changed TaskDefinition, creating a new TaskDefinition Revision
|
|
80
79
|
// we need to lowercase the evaluated TaskDef from CloudFormation,
|
|
81
80
|
// as the AWS SDK uses lowercase property names for these
|
|
82
|
-
const lowercasedTaskDef = common_1.transformObjectKeys(this.taskDefinitionResource, common_1.lowerCaseFirstCharacter
|
|
81
|
+
const lowercasedTaskDef = common_1.transformObjectKeys(this.taskDefinitionResource, common_1.lowerCaseFirstCharacter, {
|
|
82
|
+
// All the properties that take arbitrary string as keys i.e. { "string" : "string" }
|
|
83
|
+
// https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_RegisterTaskDefinition.html#API_RegisterTaskDefinition_RequestSyntax
|
|
84
|
+
ContainerDefinitions: {
|
|
85
|
+
DockerLabels: true,
|
|
86
|
+
FirelensConfiguration: {
|
|
87
|
+
Options: true,
|
|
88
|
+
},
|
|
89
|
+
LogConfiguration: {
|
|
90
|
+
Options: true,
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
Volumes: {
|
|
94
|
+
DockerVolumeConfiguration: {
|
|
95
|
+
DriverOpts: true,
|
|
96
|
+
Labels: true,
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
});
|
|
83
100
|
const registerTaskDefResponse = await sdk.ecs().registerTaskDefinition(lowercasedTaskDef).promise();
|
|
84
|
-
const taskDefRevArn =
|
|
101
|
+
const taskDefRevArn = registerTaskDefResponse.taskDefinition?.taskDefinitionArn;
|
|
85
102
|
// Step 2 - update the services using that TaskDefinition to point to the new TaskDefinition Revision
|
|
86
103
|
const servicePerClusterUpdates = {};
|
|
87
104
|
for (const ecsService of this.servicesReferencingTaskDef) {
|
|
@@ -157,4 +174,4 @@ class EcsServiceHotswapOperation {
|
|
|
157
174
|
}));
|
|
158
175
|
}
|
|
159
176
|
}
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNzLXNlcnZpY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZWNzLXNlcnZpY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUcvQixxQ0FBaUs7QUFFMUosS0FBSyxVQUFVLDhCQUE4QixDQUNsRCxTQUFpQixFQUFFLE1BQW1DLEVBQUUsbUJBQW1EO0lBRTNHLG9FQUFvRTtJQUNwRSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLDBCQUEwQixFQUFFO1FBQ3ZELE9BQU8sNEJBQW1CLENBQUMsd0JBQXdCLENBQUM7S0FDckQ7SUFFRCxLQUFLLE1BQU0sZUFBZSxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUU7UUFDcEQscUZBQXFGO1FBQ3JGLHFGQUFxRjtRQUNyRix1REFBdUQ7UUFDdkQsSUFBSSxlQUFlLEtBQUssc0JBQXNCLEVBQUU7WUFDOUMsT0FBTyw0QkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQztTQUNyRDtRQUNELE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakYsSUFBSSw4QkFBOEIsQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQ3pELE9BQU8sNEJBQW1CLENBQUMsd0JBQXdCLENBQUM7U0FDckQ7S0FDRjtJQUNELDhEQUE4RDtJQUU5RCx1RUFBdUU7SUFDdkUsTUFBTSwyQkFBMkIsR0FBRyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwRixNQUFNLHFDQUFxQyxHQUFHLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsQ0FBQztJQUN0SCxNQUFNLDZCQUE2QixHQUFHLElBQUksS0FBSyxFQUFjLENBQUM7SUFDOUQsS0FBSyxNQUFNLGtCQUFrQixJQUFJLHFDQUFxQyxFQUFFO1FBQ3RFLE1BQU0sVUFB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QUFhLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO2FBQ25GLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBBV1MgZnJvbSAnYXdzLXNkayc7XG5pbXBvcnQgeyBJU0RLIH0gZnJvbSAnLi4vYXdzLWF1dGgnO1xuaW1wb3J0IHsgRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlIH0gZnJvbSAnLi4vZXZhbHVhdGUtY2xvdWRmb3JtYXRpb24tdGVtcGxhdGUnO1xuaW1wb3J0IHsgQ2hhbmdlSG90c3dhcEltcGFjdCwgQ2hhbmdlSG90c3dhcFJlc3VsdCwgSG90c3dhcE9wZXJhdGlvbiwgSG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlLCBsb3dlckNhc2VGaXJzdENoYXJhY3RlciwgdHJhbnNmb3JtT2JqZWN0S2V5cyB9IGZyb20gJy4vY29tbW9uJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzSG90c3dhcHBhYmxlRWNzU2VydmljZUNoYW5nZShcbiAgbG9naWNhbElkOiBzdHJpbmcsIGNoYW5nZTogSG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlLCBldmFsdWF0ZUNmblRlbXBsYXRlOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUsXG4pOiBQcm9taXNlPENoYW5nZUhvdHN3YXBSZXN1bHQ+IHtcbiAgLy8gdGhlIG9ubHkgcmVzb3VyY2UgY2hhbmdlIHdlIHNob3VsZCBhbGxvdyBpcyBhbiBFQ1MgVGFza0RlZmluaXRpb25cbiAgaWYgKGNoYW5nZS5uZXdWYWx1ZS5UeXBlICE9PSAnQVdTOjpFQ1M6OlRhc2tEZWZpbml0aW9uJykge1xuICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgfVxuXG4gIGZvciAoY29uc3QgdXBkYXRlZFByb3BOYW1lIGluIGNoYW5nZS5wcm9wZXJ0eVVwZGF0ZXMpIHtcbiAgICAvLyBXZSBvbmx5IGFsbG93IGEgY2hhbmdlIGluIHRoZSBDb250YWluZXJEZWZpbml0aW9ucyBvZiB0aGUgVGFza0RlZmluaXRpb24gZm9yIG5vdyAtXG4gICAgLy8gaXQgY29udGFpbnMgdGhlIGltYWdlIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHNvIHNlZW1zIGxpa2UgYSBzYWZlIGJldCBmb3Igbm93LlxuICAgIC8vIFdlIG1pZ2h0IHJldmlzaXQgdGhpcyBkZWNpc2lvbiBpbiB0aGUgZnV0dXJlIHRob3VnaCFcbiAgICBpZiAodXBkYXRlZFByb3BOYW1lICE9PSAnQ29udGFpbmVyRGVmaW5pdGlvbnMnKSB7XG4gICAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRhaW5lckRlZmluaXRpb25zRGlmZmVyZW5jZSA9IChjaGFuZ2UucHJvcGVydHlVcGRhdGVzKVt1cGRhdGVkUHJvcE5hbWVdO1xuICAgIGlmIChjb250YWluZXJEZWZpbml0aW9uc0RpZmZlcmVuY2UubmV3VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICAgIH1cbiAgfVxuICAvLyBhdCB0aGlzIHBvaW50LCB3ZSBrbm93IHRoZSBUYXNrRGVmaW5pdGlvbiBjYW4gYmUgaG90c3dhcHBlZFxuXG4gIC8vIGZpbmQgYWxsIEVDUyBTZXJ2aWNlcyB0aGF0IHJlZmVyZW5jZSB0aGUgVGFza0RlZmluaXRpb24gdGhhdCBjaGFuZ2VkXG4gIGNvbnN0IHJlc291cmNlc1JlZmVyZW5jaW5nVGFza0RlZiA9IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZmluZFJlZmVyZW5jZXNUbyhsb2dpY2FsSWQpO1xuICBjb25zdCBlY3NTZXJ2aWNlUmVzb3VyY2VzUmVmZXJlbmNpbmdUYXNrRGVmID0gcmVzb3VyY2VzUmVmZXJlbmNpbmdUYXNrRGVmLmZpbHRlcihyID0+IHIuVHlwZSA9PT0gJ0FXUzo6RUNTOjpTZXJ2aWNlJyk7XG4gIGNvbnN0IGVjc1NlcnZpY2VzUmVmZXJlbmNpbmdUYXNrRGVmID0gbmV3IEFycmF5PEVjc1NlcnZpY2U+KCk7XG4gIGZvciAoY29uc3QgZWNzU2VydmljZVJlc291cmNlIG9mIGVjc1NlcnZpY2VSZXNvdXJjZXNSZWZlcmVuY2luZ1Rhc2tEZWYpIHtcbiAgICBjb25zdCBzZXJ2aWNlQXJuID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5maW5kUGh5c2ljYWxOYW1lRm9yKGVjc1NlcnZpY2VSZXNvdXJjZS5Mb2dpY2FsSWQpO1xuICAgIGlmIChzZXJ2aWNlQXJuKSB7XG4gICAgICBlY3NTZXJ2aWNlc1JlZmVyZW5jaW5nVGFza0RlZi5wdXNoKHsgc2VydmljZUFybiB9KTtcbiAgICB9XG4gIH1cbiAgaWYgKGVjc1NlcnZpY2VzUmVmZXJlbmNpbmdUYXNrRGVmLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgcmVzb3VyY2VzUmVmZXJlbmNpbmdUYXNrRGVmLmxlbmd0aCA+IGVjc1NlcnZpY2VzUmVmZXJlbmNpbmdUYXNrRGVmLmxlbmd0aCkge1xuICAgIC8vIGlmIHRoZXJlIGFyZSBlaXRoZXIgbm8gcmVzb3VyY2VzIHJlZmVyZW5jaW5nIHRoZSBUYXNrRGVmaW5pdGlvbixcbiAgICAvLyBvciBzb21ldGhpbmcgYmVzaWRlcyBhbiBFQ1MgU2VydmljZSBpcyByZWZlcmVuY2luZyBpdCxcbiAgICAvLyBob3Rzd2FwIGlzIG5vdCBwb3NzaWJsZVxuICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgfVxuXG4gIGNvbnN0IHRhc2tEZWZpbml0aW9uUmVzb3VyY2UgPSBjaGFuZ2UubmV3VmFsdWUuUHJvcGVydGllcztcbiAgLy8gZmlyc3QsIGxldCdzIGdldCB0aGUgbmFtZSBvZiB0aGUgZmFtaWx5XG4gIGNvbnN0IGZhbWlseU5hbWVPckFybiA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXN0YWJsaXNoUmVzb3VyY2VQaHlzaWNhbE5hbWUobG9naWNhbElkLCB0YXNrRGVmaW5pdGlvblJlc291cmNlPy5GYW1pbHkpO1xuICBpZiAoIWZhbWlseU5hbWVPckFybikge1xuICAgIC8vIGlmIHRoZSBGYW1pbHkgcHJvcGVydHkgaGFzIG5vdCBiZWUgcHJvdmlkZWQsIGFuZCB3ZSBjYW4ndCBmaW5kIGl0IGluIHRoZSBjdXJyZW50IFN0YWNrLFxuICAgIC8vIHRoaXMgbWVhbnMgaG90c3dhcHBpbmcgaXMgbm90IHBvc3NpYmxlXG4gICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICB9XG4gIC8vIHRoZSBwaHlzaWNhbCBuYW1lIG9mIHRoZSBUYXNrIERlZmluaXRpb24gaW4gQ2xvdWRGb3JtYXRpb24gaW5jbHVkZXMgaXRzIGN1cnJlbnQgcmV2aXNpb24gbnVtYmVyIGF0IHRoZSBlbmQsXG4gIC8vIHJlbW92ZSBpdCBpZiBuZWVkZWRcbiAgY29uc3QgZmFtaWx5TmFtZU9yQXJuUGFydHMgPSBmYW1pbHlOYW1lT3JBcm4uc3BsaXQoJzonKTtcbiAgY29uc3QgZmFtaWx5ID0gZmFtaWx5TmFtZU9yQXJuUGFydHMubGVuZ3RoID4gMVxuICAgIC8vIGZhbWlseU5hbWVPckFybiBpcyBhY3R1YWxseSBhbiBBUk4sIG9mIHRoZSBmb3JtYXQgJ2Fybjphd3M6ZWNzOnJlZ2lvbjphY2NvdW50OnRhc2stZGVmaW5pdGlvbi88ZmFtaWx5LW5hbWU+OjxyZXZpc2lvbi1ucj4nXG4gICAgLy8gc28sIHRha2UgdGhlIDZ0aCBlbGVtZW50LCBhdCBpbmRleCA1LCBhbmQgc3BsaXQgaXQgb24gJy8nXG4gICAgPyBmYW1pbHlOYW1lT3JBcm5QYXJ0c1s1XS5zcGxpdCgnLycpWzFdXG4gICAgLy8gb3RoZXJ3aXNlLCBmYW1pbHlOYW1lT3JBcm4gaXMganVzdCB0aGUgc2ltcGxlIG5hbWUgZXZhbHVhdGVkIGZyb20gdGhlIENsb3VkRm9ybWF0aW9uIHRlbXBsYXRlXG4gICAgOiBmYW1pbHlOYW1lT3JBcm47XG4gIC8vIHRoZW4sIGxldCdzIGV2YWx1YXRlIHRoZSBib2R5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIFRhc2tEZWYgKHdpdGhvdXQgdGhlIEZhbWlseSBwcm9wZXJ0eSlcbiAgY29uc3QgZXZhbHVhdGVkVGFza0RlZiA9IHtcbiAgICAuLi5hd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbih7XG4gICAgICAuLi4odGFza0RlZmluaXRpb25SZXNvdXJjZSA/PyB7fSksXG4gICAgICBGYW1pbHk6IHVuZGVmaW5lZCxcbiAgICB9KSxcbiAgICBGYW1pbHk6IGZhbWlseSxcbiAgfTtcbiAgcmV0dXJuIG5ldyBFY3NTZXJ2aWNlSG90c3dhcE9wZXJhdGlvbihldmFsdWF0ZWRUYXNrRGVmLCBlY3NTZXJ2aWNlc1JlZmVyZW5jaW5nVGFza0RlZik7XG59XG5cbmludGVyZmFjZSBFY3NTZXJ2aWNlIHtcbiAgcmVhZG9ubHkgc2VydmljZUFybjogc3RyaW5nO1xufVxuXG5jbGFzcyBFY3NTZXJ2aWNlSG90c3dhcE9wZXJhdGlvbiBpbXBsZW1lbnRzIEhvdHN3YXBPcGVyYXRpb24ge1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZSA9ICdlY3Mtc2VydmljZSc7XG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZU5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGFza0RlZmluaXRpb25SZXNvdXJjZTogYW55LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2VydmljZXNSZWZlcmVuY2luZ1Rhc2tEZWY6IEVjc1NlcnZpY2VbXSxcbiAgKSB7XG4gICAgdGhpcy5yZXNvdXJjZU5hbWVzID0gc2VydmljZXNSZWZlcmVuY2luZ1Rhc2tEZWYubWFwKGVjc1NlcnZpY2UgPT5cbiAgICAgIGBFQ1MgU2VydmljZSAnJHtlY3NTZXJ2aWNlLnNlcnZpY2VBcm4uc3BsaXQoJy8nKVsyXX0nYCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYXBwbHkoc2RrOiBJU0RLKTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBTdGVwIDEgLSB1cGRhdGUgdGhlIGNoYW5nZWQgVGFza0RlZmluaXRpb24sIGNyZWF0aW5nIGEgbmV3IFRhc2tEZWZpbml0aW9uIFJldmlzaW9uXG4gICAgLy8gd2UgbmVlZCB0byBsb3dlcmNhc2UgdGhlIGV2YWx1YXRlZCBUYXNrRGVmIGZyb20gQ2xvdWRGb3JtYXRpb24sXG4gICAgLy8gYXMgdGhlIEFXUyBTREsgdXNlcyBsb3dlcmNhc2UgcHJvcGVydHkgbmFtZXMgZm9yIHRoZXNlXG4gICAgY29uc3QgbG93ZXJjYXNlZFRhc2tEZWYgPSB0cmFuc2Zvcm1PYmplY3RLZXlzKHRoaXMudGFza0RlZmluaXRpb25SZXNvdXJjZSwgbG93ZXJDYXNlRmlyc3RDaGFyYWN0ZXIpO1xuICAgIGNvbnN0IHJlZ2lzdGVyVGFza0RlZlJlc3BvbnNlID0gYXdhaXQgc2RrLmVjcygpLnJlZ2lzdGVyVGFza0RlZmluaXRpb24obG93ZXJjYXNlZFRhc2tEZWYpLnByb21pc2UoKTtcbiAgICBjb25zdCB0YXNrRGVmUmV2QXJuID0gcmVnaXN0ZXJUYXNrRGVmUmVzcG9uc2UudGFza0RlZmluaXRpb24/LnRhc2tEZWZpbml0aW9uQXJuO1xuXG4gICAgLy8gU3RlcCAyIC0gdXBkYXRlIHRoZSBzZXJ2aWNlcyB1c2luZyB0aGF0IFRhc2tEZWZpbml0aW9uIHRvIHBvaW50IHRvIHRoZSBuZXcgVGFza0RlZmluaXRpb24gUmV2aXNpb25cbiAgICBjb25zdCBzZXJ2aWNlUGVyQ2x1c3RlclVwZGF0ZXM6IHsgW2NsdXN0ZXI6IHN0cmluZ106IEFycmF5PHsgcHJvbWlzZTogUHJvbWlzZTxhbnk+LCBlY3NTZXJ2aWNlOiBFY3NTZXJ2aWNlIH0+IH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGVjc1NlcnZpY2Ugb2YgdGhpcy5zZXJ2aWNlc1JlZmVyZW5jaW5nVGFza0RlZikge1xuICAgICAgY29uc3QgY2x1c3Rlck5hbWUgPSBlY3NTZXJ2aWNlLnNlcnZpY2VBcm4uc3BsaXQoJy8nKVsxXTtcblxuICAgICAgY29uc3QgZXhpc3RpbmdDbHVzdGVyUHJvbWlzZXMgPSBzZXJ2aWNlUGVyQ2x1c3RlclVwZGF0ZXNbY2x1c3Rlck5hbWVdO1xuICAgICAgbGV0IGNsdXN0ZXJQcm9taXNlczogQXJyYXk8eyBwcm9taXNlOiBQcm9taXNlPGFueT4sIGVjc1NlcnZpY2U6IEVjc1NlcnZpY2UgfT47XG4gICAgICBpZiAoZXhpc3RpbmdDbHVzdGVyUHJvbWlzZXMpIHtcbiAgICAgICAgY2x1c3RlclByb21pc2VzID0gZXhpc3RpbmdDbHVzdGVyUHJvbWlzZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbHVzdGVyUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgc2VydmljZVBlckNsdXN0ZXJVcGRhdGVzW2NsdXN0ZXJOYW1lXSA9IGNsdXN0ZXJQcm9taXNlcztcbiAgICAgIH1cblxuICAgICAgY2x1c3RlclByb21pc2VzLnB1c2goe1xuICAgICAgICBwcm9taXNlOiBzZGsuZWNzKCkudXBkYXRlU2VydmljZSh7XG4gICAgICAgICAgc2VydmljZTogZWNzU2VydmljZS5zZXJ2aWNlQXJuLFxuICAgICAgICAgIHRhc2tEZWZpbml0aW9uOiB0YXNrRGVmUmV2QXJuLFxuICAgICAgICAgIGNsdXN0ZXI6IGNsdXN0ZXJOYW1lLFxuICAgICAgICAgIGZvcmNlTmV3RGVwbG95bWVudDogdHJ1ZSxcbiAgICAgICAgICBkZXBsb3ltZW50Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgbWluaW11bUhlYWx0aHlQZXJjZW50OiAwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLnByb21pc2UoKSxcbiAgICAgICAgZWNzU2VydmljZTogZWNzU2VydmljZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKHNlcnZpY2VQZXJDbHVzdGVyVXBkYXRlcylcbiAgICAgIC5tYXAoY2x1c3RlclVwZGF0ZXMgPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoY2x1c3RlclVwZGF0ZXMubWFwKHNlcnZpY2VVcGRhdGUgPT4gc2VydmljZVVwZGF0ZS5wcm9taXNlKSk7XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gU3RlcCAzIC0gd2FpdCBmb3IgdGhlIHNlcnZpY2UgZGVwbG95bWVudHMgdHJpZ2dlcmVkIGluIFN0ZXAgMiB0byBmaW5pc2hcbiAgICAvLyBjb25maWd1cmUgYSBjdXN0b20gV2FpdGVyXG4gICAgKHNkay5lY3MoKSBhcyBhbnkpLmFwaS53YWl0ZXJzLmRlcGxveW1lbnRUb0ZpbmlzaCA9IHtcbiAgICAgIG5hbWU6ICdEZXBsb3ltZW50VG9GaW5pc2gnLFxuICAgICAgb3BlcmF0aW9uOiAnZGVzY3JpYmVTZXJ2aWNlcycsXG4gICAgICBkZWxheTogMTAsXG4gICAgICBtYXhBdHRlbXB0czogNjAsXG4gICAgICBhY2NlcHRvcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG1hdGNoZXI6ICdwYXRoQW55JyxcbiAgICAgICAgICBhcmd1bWVudDogJ2ZhaWx1cmVzW10ucmVhc29uJyxcbiAgICAgICAgICBleHBlY3RlZDogJ01JU1NJTkcnLFxuICAgICAgICAgIHN0YXRlOiAnZmFpbHVyZScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBtYXRjaGVyOiAncGF0aEFueScsXG4gICAgICAgICAgYXJndW1lbnQ6ICdzZXJ2aWNlc1tdLnN0YXR1cycsXG4gICAgICAgICAgZXhwZWN0ZWQ6ICdEUkFJTklORycsXG4gICAgICAgICAgc3RhdGU6ICdmYWlsdXJlJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG1hdGNoZXI6ICdwYXRoQW55JyxcbiAgICAgICAgICBhcmd1bWVudDogJ3NlcnZpY2VzW10uc3RhdHVzJyxcbiAgICAgICAgICBleHBlY3RlZDogJ0lOQUNUSVZFJyxcbiAgICAgICAgICBzdGF0ZTogJ2ZhaWx1cmUnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbWF0Y2hlcjogJ3BhdGgnLFxuICAgICAgICAgIGFyZ3VtZW50OiBcImxlbmd0aChzZXJ2aWNlc1tdLmRlcGxveW1lbnRzWz8gc3RhdHVzID09ICdQUklNQVJZJyAmJiBydW5uaW5nQ291bnQgPCBkZXNpcmVkQ291bnRdW10pID09IGAwYFwiLFxuICAgICAgICAgIGV4cGVjdGVkOiB0cnVlLFxuICAgICAgICAgIHN0YXRlOiAnc3VjY2VzcycsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gICAgLy8gY3JlYXRlIGEgY3VzdG9tIFdhaXRlciB0aGF0IHVzZXMgdGhlIGRlcGxveW1lbnRUb0ZpbmlzaCBjb25maWd1cmF0aW9uIGFkZGVkIGFib3ZlXG4gICAgY29uc3QgZGVwbG95bWVudFdhaXRlciA9IG5ldyAoQVdTIGFzIGFueSkuUmVzb3VyY2VXYWl0ZXIoc2RrLmVjcygpLCAnZGVwbG95bWVudFRvRmluaXNoJyk7XG4gICAgLy8gd2FpdCBmb3IgYWxsIG9mIHRoZSB3YWl0ZXJzIHRvIGZpbmlzaFxuICAgIHJldHVybiBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyhzZXJ2aWNlUGVyQ2x1c3RlclVwZGF0ZXMpLm1hcCgoW2NsdXN0ZXJOYW1lLCBzZXJ2aWNlVXBkYXRlc10pID0+IHtcbiAgICAgIHJldHVybiBkZXBsb3ltZW50V2FpdGVyLndhaXQoe1xuICAgICAgICBjbHVzdGVyOiBjbHVzdGVyTmFtZSxcbiAgICAgICAgc2VydmljZXM6IHNlcnZpY2VVcGRhdGVzLm1hcChzZXJ2aWNlVXBkYXRlID0+IHNlcnZpY2VVcGRhdGUuZWNzU2VydmljZS5zZXJ2aWNlQXJuKSxcbiAgICAgIH0pLnByb21pc2UoKTtcbiAgICB9KSk7XG4gIH1cbn1cbiJdfQ==
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNzLXNlcnZpY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZWNzLXNlcnZpY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLCtCQUErQjtBQUcvQixxQ0FBaUs7QUFFMUosS0FBSyxVQUFVLDhCQUE4QixDQUNsRCxTQUFpQixFQUFFLE1BQW1DLEVBQUUsbUJBQW1EO0lBRTNHLG9FQUFvRTtJQUNwRSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLDBCQUEwQixFQUFFO1FBQ3ZELE9BQU8sNEJBQW1CLENBQUMsd0JBQXdCLENBQUM7S0FDckQ7SUFFRCxLQUFLLE1BQU0sZUFBZSxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUU7UUFDcEQscUZBQXFGO1FBQ3JGLHFGQUFxRjtRQUNyRix1REFBdUQ7UUFDdkQsSUFBSSxlQUFlLEtBQUssc0JBQXNCLEVBQUU7WUFDOUMsT0FBTyw0QkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQztTQUNyRDtRQUNELE1BQU0sOEJBQThCLEdBQUcsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakYsSUFBSSw4QkFBOEIsQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQ3pELE9BQU8sNEJBQW1CLENBQUMsd0JBQXdCLENBQUM7U0FDckQ7S0FDRjtJQUNELDhEQUE4RDtJQUU5RCx1RUFBdUU7SUFDdkUsTUFBTSwyQkFBMkIsR0FBRyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwRixNQUFNLHFDQUFxQyxHQUFHLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsQ0FBQztJQUN0SCxNQUFNLDZCQUE2QixHQUFHLElBQUksS0FBSyxFQUFjLENBQUM7SUFDOUQsS0FBSyxNQUFNLGtCQUFrQixJQUFJLHFDQUFxQyxFQUFFO1FBQ3RFLE1BQU0sVUFBVSxHQUFHLE1BQU0sbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0YsSUFBSSxVQUFVLEVBQUU7WUFDZCw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1NBQ3BEO0tBQ0Y7SUFDRCxJQUFJLDZCQUE2QixDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQzFDLDJCQUEyQixDQUFDLE1BQU0sR0FBRyw2QkFBNkIsQ0FBQyxNQUFNLEVBQUU7UUFDN0UsbUVBQW1FO1FBQ25FLHlEQUF5RDtRQUN6RCwwQkFBMEI7UUFDMUIsT0FBTyw0QkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQztLQUNyRDtJQUVELE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7SUFDMUQsMENBQTBDO0lBQzFDLE1BQU0sZUFBZSxHQUFHLE1BQU0sbUJBQW1CLENBQUMsNkJBQTZCLENBQUMsU0FBUyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNILElBQUksQ0FBQyxlQUFlLEVBQUU7UUFDcEIsMEZBQTBGO1FBQzFGLHlDQUF5QztRQUN6QyxPQUFPLDRCQUFtQixDQUFDLHdCQUF3QixDQUFDO0tBQ3JEO0lBQ0QsOEdBQThHO0lBQzlHLHNCQUFzQjtJQUN0QixNQUFNLG9CQUFvQixHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEQsTUFBTSxNQUFNLEdBQUcsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDNUMsNkhBQTZIO1FBQzdILDREQUE0RDtRQUM1RCxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxnR0FBZ0c7UUFDaEcsQ0FBQyxDQUFDLGVBQWUsQ0FBQztJQUNwQiw4RkFBOEY7SUFDOUYsTUFBTSxnQkFBZ0IsR0FBRztRQUN2QixHQUFHLE1BQU0sbUJBQW1CLENBQUMscUJBQXFCLENBQUM7WUFDakQsR0FBRyxDQUFDLHNCQUFzQixJQUFJLEVBQUUsQ0FBQztZQUNqQyxNQUFNLEVBQUUsU0FBUztTQUNsQixDQUFDO1FBQ0YsTUFBTSxFQUFFLE1BQU07S0FDZixDQUFDO0lBQ0YsT0FBTyxJQUFJLDBCQUEwQixDQUFDLGdCQUFnQixFQUFFLDZCQUE2QixDQUFDLENBQUM7QUFDekYsQ0FBQztBQWxFRCx3RUFrRUM7QUFNRCxNQUFNLDBCQUEwQjtJQUk5QixZQUNtQixzQkFBMkIsRUFDM0IsMEJBQXdDO1FBRHhDLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBSztRQUMzQiwrQkFBMEIsR0FBMUIsMEJBQTBCLENBQWM7UUFMM0MsWUFBTyxHQUFHLGFBQWEsQ0FBQztRQUN4QixrQkFBYSxHQUFhLEVBQUUsQ0FBQztRQU0zQyxJQUFJLENBQUMsYUFBYSxHQUFHLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUMvRCxnQkFBZ0IsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQVM7UUFDMUIscUZBQXFGO1FBQ3JGLGtFQUFrRTtRQUNsRSx5REFBeUQ7UUFDekQsTUFBTSxpQkFBaUIsR0FBRyw0QkFBbUIsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsZ0NBQXVCLEVBQUU7WUFDbEcscUZBQXFGO1lBQ3JGLHFJQUFxSTtZQUNySSxvQkFBb0IsRUFBRTtnQkFDcEIsWUFBWSxFQUFFLElBQUk7Z0JBQ2xCLHFCQUFxQixFQUFFO29CQUNyQixPQUFPLEVBQUUsSUFBSTtpQkFDZDtnQkFDRCxnQkFBZ0IsRUFBRTtvQkFDaEIsT0FBTyxFQUFFLElBQUk7aUJBQ2Q7YUFDRjtZQUNELE9BQU8sRUFBRTtnQkFDUCx5QkFBeUIsRUFBRTtvQkFDekIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE1BQU0sRUFBRSxJQUFJO2lCQUNiO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFDSCxNQUFNLHVCQUF1QixHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixDQUFDLGlCQUFpQixDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEcsTUFBTSxhQUFhLEdBQUcsdUJBQXVCLENBQUMsY0FBYyxFQUFFLGlCQUFpQixDQUFDO1FBRWhGLHFHQUFxRztRQUNyRyxNQUFNLHdCQUF3QixHQUFvRixFQUFFLENBQUM7UUFDckgsS0FBSyxNQUFNLFVBQVUsSUFBSSxJQUFJLENBQUMsMEJBQTBCLEVBQUU7WUFDeEQsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFeEQsTUFBTSx1QkFBdUIsR0FBRyx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN0RSxJQUFJLGVBQXlFLENBQUM7WUFDOUUsSUFBSSx1QkFBdUIsRUFBRTtnQkFDM0IsZUFBZSxHQUFHLHVCQUF1QixDQUFDO2FBQzNDO2lCQUFNO2dCQUNMLGVBQWUsR0FBRyxFQUFFLENBQUM7Z0JBQ3JCLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxHQUFHLGVBQWUsQ0FBQzthQUN6RDtZQUVELGVBQWUsQ0FBQyxJQUFJLENBQUM7Z0JBQ25CLE9BQU8sRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDO29CQUMvQixPQUFPLEVBQUUsVUFBVSxDQUFDLFVBQVU7b0JBQzlCLGNBQWMsRUFBRSxhQUFhO29CQUM3QixPQUFPLEVBQUUsV0FBVztvQkFDcEIsa0JBQWtCLEVBQUUsSUFBSTtvQkFDeEIsdUJBQXVCLEVBQUU7d0JBQ3ZCLHFCQUFxQixFQUFFLENBQUM7cUJBQ3pCO2lCQUNGLENBQUMsQ0FBQyxPQUFPLEVBQUU7Z0JBQ1osVUFBVSxFQUFFLFVBQVU7YUFDdkIsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQzthQUN0RCxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDcEIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUNqRixDQUFDLENBQUMsQ0FDSCxDQUFDO1FBRUYsMEVBQTBFO1FBQzFFLDRCQUE0QjtRQUMzQixHQUFHLENBQUMsR0FBRyxFQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRztZQUNsRCxJQUFJLEVBQUUsb0JBQW9CO1lBQzFCLFNBQVMsRUFBRSxrQkFBa0I7WUFDN0IsS0FBSyxFQUFFLEVBQUU7WUFDVCxXQUFXLEVBQUUsRUFBRTtZQUNmLFNBQVMsRUFBRTtnQkFDVDtvQkFDRSxPQUFPLEVBQUUsU0FBUztvQkFDbEIsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsUUFBUSxFQUFFLFNBQVM7b0JBQ25CLEtBQUssRUFBRSxTQUFTO2lCQUNqQjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsU0FBUztvQkFDbEIsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLEtBQUssRUFBRSxTQUFTO2lCQUNqQjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsU0FBUztvQkFDbEIsUUFBUSxFQUFFLG1CQUFtQjtvQkFDN0IsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLEtBQUssRUFBRSxTQUFTO2lCQUNqQjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsTUFBTTtvQkFDZixRQUFRLEVBQUUsK0ZBQStGO29CQUN6RyxRQUFRLEVBQUUsSUFBSTtvQkFDZCxLQUFLLEVBQUUsU0FBUztpQkFDakI7YUFDRjtTQUNGLENBQUM7UUFDRixvRkFBb0Y7UUFDcEYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFLLEdBQVcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDMUYsd0NBQXdDO1FBQ3hDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLEVBQUUsRUFBRTtZQUNoRyxPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQztnQkFDM0IsT0FBTyxFQUFFLFdBQVc7Z0JBQ3BCLFFBQVEsRUFBRSxjQUFjLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7YUFDbkYsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEFXUyBmcm9tICdhd3Mtc2RrJztcbmltcG9ydCB7IElTREsgfSBmcm9tICcuLi9hd3MtYXV0aCc7XG5pbXBvcnQgeyBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUgfSBmcm9tICcuLi9ldmFsdWF0ZS1jbG91ZGZvcm1hdGlvbi10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBDaGFuZ2VIb3Rzd2FwSW1wYWN0LCBDaGFuZ2VIb3Rzd2FwUmVzdWx0LCBIb3Rzd2FwT3BlcmF0aW9uLCBIb3Rzd2FwcGFibGVDaGFuZ2VDYW5kaWRhdGUsIGxvd2VyQ2FzZUZpcnN0Q2hhcmFjdGVyLCB0cmFuc2Zvcm1PYmplY3RLZXlzIH0gZnJvbSAnLi9jb21tb24nO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNIb3Rzd2FwcGFibGVFY3NTZXJ2aWNlQ2hhbmdlKFxuICBsb2dpY2FsSWQ6IHN0cmluZywgY2hhbmdlOiBIb3Rzd2FwcGFibGVDaGFuZ2VDYW5kaWRhdGUsIGV2YWx1YXRlQ2ZuVGVtcGxhdGU6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSxcbik6IFByb21pc2U8Q2hhbmdlSG90c3dhcFJlc3VsdD4ge1xuICAvLyB0aGUgb25seSByZXNvdXJjZSBjaGFuZ2Ugd2Ugc2hvdWxkIGFsbG93IGlzIGFuIEVDUyBUYXNrRGVmaW5pdGlvblxuICBpZiAoY2hhbmdlLm5ld1ZhbHVlLlR5cGUgIT09ICdBV1M6OkVDUzo6VGFza0RlZmluaXRpb24nKSB7XG4gICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICB9XG5cbiAgZm9yIChjb25zdCB1cGRhdGVkUHJvcE5hbWUgaW4gY2hhbmdlLnByb3BlcnR5VXBkYXRlcykge1xuICAgIC8vIFdlIG9ubHkgYWxsb3cgYSBjaGFuZ2UgaW4gdGhlIENvbnRhaW5lckRlZmluaXRpb25zIG9mIHRoZSBUYXNrRGVmaW5pdGlvbiBmb3Igbm93IC1cbiAgICAvLyBpdCBjb250YWlucyB0aGUgaW1hZ2UgYW5kIGVudmlyb25tZW50IHZhcmlhYmxlcywgc28gc2VlbXMgbGlrZSBhIHNhZmUgYmV0IGZvciBub3cuXG4gICAgLy8gV2UgbWlnaHQgcmV2aXNpdCB0aGlzIGRlY2lzaW9uIGluIHRoZSBmdXR1cmUgdGhvdWdoIVxuICAgIGlmICh1cGRhdGVkUHJvcE5hbWUgIT09ICdDb250YWluZXJEZWZpbml0aW9ucycpIHtcbiAgICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgICB9XG4gICAgY29uc3QgY29udGFpbmVyRGVmaW5pdGlvbnNEaWZmZXJlbmNlID0gKGNoYW5nZS5wcm9wZXJ0eVVwZGF0ZXMpW3VwZGF0ZWRQcm9wTmFtZV07XG4gICAgaWYgKGNvbnRhaW5lckRlZmluaXRpb25zRGlmZmVyZW5jZS5uZXdWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gICAgfVxuICB9XG4gIC8vIGF0IHRoaXMgcG9pbnQsIHdlIGtub3cgdGhlIFRhc2tEZWZpbml0aW9uIGNhbiBiZSBob3Rzd2FwcGVkXG5cbiAgLy8gZmluZCBhbGwgRUNTIFNlcnZpY2VzIHRoYXQgcmVmZXJlbmNlIHRoZSBUYXNrRGVmaW5pdGlvbiB0aGF0IGNoYW5nZWRcbiAgY29uc3QgcmVzb3VyY2VzUmVmZXJlbmNpbmdUYXNrRGVmID0gZXZhbHVhdGVDZm5UZW1wbGF0ZS5maW5kUmVmZXJlbmNlc1RvKGxvZ2ljYWxJZCk7XG4gIGNvbnN0IGVjc1NlcnZpY2VSZXNvdXJjZXNSZWZlcmVuY2luZ1Rhc2tEZWYgPSByZXNvdXJjZXNSZWZlcmVuY2luZ1Rhc2tEZWYuZmlsdGVyKHIgPT4gci5UeXBlID09PSAnQVdTOjpFQ1M6OlNlcnZpY2UnKTtcbiAgY29uc3QgZWNzU2VydmljZXNSZWZlcmVuY2luZ1Rhc2tEZWYgPSBuZXcgQXJyYXk8RWNzU2VydmljZT4oKTtcbiAgZm9yIChjb25zdCBlY3NTZXJ2aWNlUmVzb3VyY2Ugb2YgZWNzU2VydmljZVJlc291cmNlc1JlZmVyZW5jaW5nVGFza0RlZikge1xuICAgIGNvbnN0IHNlcnZpY2VBcm4gPSBhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmZpbmRQaHlzaWNhbE5hbWVGb3IoZWNzU2VydmljZVJlc291cmNlLkxvZ2ljYWxJZCk7XG4gICAgaWYgKHNlcnZpY2VBcm4pIHtcbiAgICAgIGVjc1NlcnZpY2VzUmVmZXJlbmNpbmdUYXNrRGVmLnB1c2goeyBzZXJ2aWNlQXJuIH0pO1xuICAgIH1cbiAgfVxuICBpZiAoZWNzU2VydmljZXNSZWZlcmVuY2luZ1Rhc2tEZWYubGVuZ3RoID09PSAwIHx8XG4gICAgICByZXNvdXJjZXNSZWZlcmVuY2luZ1Rhc2tEZWYubGVuZ3RoID4gZWNzU2VydmljZXNSZWZlcmVuY2luZ1Rhc2tEZWYubGVuZ3RoKSB7XG4gICAgLy8gaWYgdGhlcmUgYXJlIGVpdGhlciBubyByZXNvdXJjZXMgcmVmZXJlbmNpbmcgdGhlIFRhc2tEZWZpbml0aW9uLFxuICAgIC8vIG9yIHNvbWV0aGluZyBiZXNpZGVzIGFuIEVDUyBTZXJ2aWNlIGlzIHJlZmVyZW5jaW5nIGl0LFxuICAgIC8vIGhvdHN3YXAgaXMgbm90IHBvc3NpYmxlXG4gICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICB9XG5cbiAgY29uc3QgdGFza0RlZmluaXRpb25SZXNvdXJjZSA9IGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzO1xuICAvLyBmaXJzdCwgbGV0J3MgZ2V0IHRoZSBuYW1lIG9mIHRoZSBmYW1pbHlcbiAgY29uc3QgZmFtaWx5TmFtZU9yQXJuID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5lc3RhYmxpc2hSZXNvdXJjZVBoeXNpY2FsTmFtZShsb2dpY2FsSWQsIHRhc2tEZWZpbml0aW9uUmVzb3VyY2U/LkZhbWlseSk7XG4gIGlmICghZmFtaWx5TmFtZU9yQXJuKSB7XG4gICAgLy8gaWYgdGhlIEZhbWlseSBwcm9wZXJ0eSBoYXMgbm90IGJlZSBwcm92aWRlZCwgYW5kIHdlIGNhbid0IGZpbmQgaXQgaW4gdGhlIGN1cnJlbnQgU3RhY2ssXG4gICAgLy8gdGhpcyBtZWFucyBob3Rzd2FwcGluZyBpcyBub3QgcG9zc2libGVcbiAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gIH1cbiAgLy8gdGhlIHBoeXNpY2FsIG5hbWUgb2YgdGhlIFRhc2sgRGVmaW5pdGlvbiBpbiBDbG91ZEZvcm1hdGlvbiBpbmNsdWRlcyBpdHMgY3VycmVudCByZXZpc2lvbiBudW1iZXIgYXQgdGhlIGVuZCxcbiAgLy8gcmVtb3ZlIGl0IGlmIG5lZWRlZFxuICBjb25zdCBmYW1pbHlOYW1lT3JBcm5QYXJ0cyA9IGZhbWlseU5hbWVPckFybi5zcGxpdCgnOicpO1xuICBjb25zdCBmYW1pbHkgPSBmYW1pbHlOYW1lT3JBcm5QYXJ0cy5sZW5ndGggPiAxXG4gICAgLy8gZmFtaWx5TmFtZU9yQXJuIGlzIGFjdHVhbGx5IGFuIEFSTiwgb2YgdGhlIGZvcm1hdCAnYXJuOmF3czplY3M6cmVnaW9uOmFjY291bnQ6dGFzay1kZWZpbml0aW9uLzxmYW1pbHktbmFtZT46PHJldmlzaW9uLW5yPidcbiAgICAvLyBzbywgdGFrZSB0aGUgNnRoIGVsZW1lbnQsIGF0IGluZGV4IDUsIGFuZCBzcGxpdCBpdCBvbiAnLydcbiAgICA/IGZhbWlseU5hbWVPckFyblBhcnRzWzVdLnNwbGl0KCcvJylbMV1cbiAgICAvLyBvdGhlcndpc2UsIGZhbWlseU5hbWVPckFybiBpcyBqdXN0IHRoZSBzaW1wbGUgbmFtZSBldmFsdWF0ZWQgZnJvbSB0aGUgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGVcbiAgICA6IGZhbWlseU5hbWVPckFybjtcbiAgLy8gdGhlbiwgbGV0J3MgZXZhbHVhdGUgdGhlIGJvZHkgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgVGFza0RlZiAod2l0aG91dCB0aGUgRmFtaWx5IHByb3BlcnR5KVxuICBjb25zdCBldmFsdWF0ZWRUYXNrRGVmID0ge1xuICAgIC4uLmF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHtcbiAgICAgIC4uLih0YXNrRGVmaW5pdGlvblJlc291cmNlID8/IHt9KSxcbiAgICAgIEZhbWlseTogdW5kZWZpbmVkLFxuICAgIH0pLFxuICAgIEZhbWlseTogZmFtaWx5LFxuICB9O1xuICByZXR1cm4gbmV3IEVjc1NlcnZpY2VIb3Rzd2FwT3BlcmF0aW9uKGV2YWx1YXRlZFRhc2tEZWYsIGVjc1NlcnZpY2VzUmVmZXJlbmNpbmdUYXNrRGVmKTtcbn1cblxuaW50ZXJmYWNlIEVjc1NlcnZpY2Uge1xuICByZWFkb25seSBzZXJ2aWNlQXJuOiBzdHJpbmc7XG59XG5cbmNsYXNzIEVjc1NlcnZpY2VIb3Rzd2FwT3BlcmF0aW9uIGltcGxlbWVudHMgSG90c3dhcE9wZXJhdGlvbiB7XG4gIHB1YmxpYyByZWFkb25seSBzZXJ2aWNlID0gJ2Vjcy1zZXJ2aWNlJztcbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlTmFtZXM6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXNrRGVmaW5pdGlvblJlc291cmNlOiBhbnksXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXJ2aWNlc1JlZmVyZW5jaW5nVGFza0RlZjogRWNzU2VydmljZVtdLFxuICApIHtcbiAgICB0aGlzLnJlc291cmNlTmFtZXMgPSBzZXJ2aWNlc1JlZmVyZW5jaW5nVGFza0RlZi5tYXAoZWNzU2VydmljZSA9PlxuICAgICAgYEVDUyBTZXJ2aWNlICcke2Vjc1NlcnZpY2Uuc2VydmljZUFybi5zcGxpdCgnLycpWzJdfSdgKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhcHBseShzZGs6IElTREspOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIFN0ZXAgMSAtIHVwZGF0ZSB0aGUgY2hhbmdlZCBUYXNrRGVmaW5pdGlvbiwgY3JlYXRpbmcgYSBuZXcgVGFza0RlZmluaXRpb24gUmV2aXNpb25cbiAgICAvLyB3ZSBuZWVkIHRvIGxvd2VyY2FzZSB0aGUgZXZhbHVhdGVkIFRhc2tEZWYgZnJvbSBDbG91ZEZvcm1hdGlvbixcbiAgICAvLyBhcyB0aGUgQVdTIFNESyB1c2VzIGxvd2VyY2FzZSBwcm9wZXJ0eSBuYW1lcyBmb3IgdGhlc2VcbiAgICBjb25zdCBsb3dlcmNhc2VkVGFza0RlZiA9IHRyYW5zZm9ybU9iamVjdEtleXModGhpcy50YXNrRGVmaW5pdGlvblJlc291cmNlLCBsb3dlckNhc2VGaXJzdENoYXJhY3Rlciwge1xuICAgICAgLy8gQWxsIHRoZSBwcm9wZXJ0aWVzIHRoYXQgdGFrZSBhcmJpdHJhcnkgc3RyaW5nIGFzIGtleXMgaS5lLiB7IFwic3RyaW5nXCIgOiBcInN0cmluZ1wiIH1cbiAgICAgIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUmVnaXN0ZXJUYXNrRGVmaW5pdGlvbi5odG1sI0FQSV9SZWdpc3RlclRhc2tEZWZpbml0aW9uX1JlcXVlc3RTeW50YXhcbiAgICAgIENvbnRhaW5lckRlZmluaXRpb25zOiB7XG4gICAgICAgIERvY2tlckxhYmVsczogdHJ1ZSxcbiAgICAgICAgRmlyZWxlbnNDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgT3B0aW9uczogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgTG9nQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgIE9wdGlvbnM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgVm9sdW1lczoge1xuICAgICAgICBEb2NrZXJWb2x1bWVDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgRHJpdmVyT3B0czogdHJ1ZSxcbiAgICAgICAgICBMYWJlbHM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IHJlZ2lzdGVyVGFza0RlZlJlc3BvbnNlID0gYXdhaXQgc2RrLmVjcygpLnJlZ2lzdGVyVGFza0RlZmluaXRpb24obG93ZXJjYXNlZFRhc2tEZWYpLnByb21pc2UoKTtcbiAgICBjb25zdCB0YXNrRGVmUmV2QXJuID0gcmVnaXN0ZXJUYXNrRGVmUmVzcG9uc2UudGFza0RlZmluaXRpb24/LnRhc2tEZWZpbml0aW9uQXJuO1xuXG4gICAgLy8gU3RlcCAyIC0gdXBkYXRlIHRoZSBzZXJ2aWNlcyB1c2luZyB0aGF0IFRhc2tEZWZpbml0aW9uIHRvIHBvaW50IHRvIHRoZSBuZXcgVGFza0RlZmluaXRpb24gUmV2aXNpb25cbiAgICBjb25zdCBzZXJ2aWNlUGVyQ2x1c3RlclVwZGF0ZXM6IHsgW2NsdXN0ZXI6IHN0cmluZ106IEFycmF5PHsgcHJvbWlzZTogUHJvbWlzZTxhbnk+LCBlY3NTZXJ2aWNlOiBFY3NTZXJ2aWNlIH0+IH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IGVjc1NlcnZpY2Ugb2YgdGhpcy5zZXJ2aWNlc1JlZmVyZW5jaW5nVGFza0RlZikge1xuICAgICAgY29uc3QgY2x1c3Rlck5hbWUgPSBlY3NTZXJ2aWNlLnNlcnZpY2VBcm4uc3BsaXQoJy8nKVsxXTtcblxuICAgICAgY29uc3QgZXhpc3RpbmdDbHVzdGVyUHJvbWlzZXMgPSBzZXJ2aWNlUGVyQ2x1c3RlclVwZGF0ZXNbY2x1c3Rlck5hbWVdO1xuICAgICAgbGV0IGNsdXN0ZXJQcm9taXNlczogQXJyYXk8eyBwcm9taXNlOiBQcm9taXNlPGFueT4sIGVjc1NlcnZpY2U6IEVjc1NlcnZpY2UgfT47XG4gICAgICBpZiAoZXhpc3RpbmdDbHVzdGVyUHJvbWlzZXMpIHtcbiAgICAgICAgY2x1c3RlclByb21pc2VzID0gZXhpc3RpbmdDbHVzdGVyUHJvbWlzZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbHVzdGVyUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgc2VydmljZVBlckNsdXN0ZXJVcGRhdGVzW2NsdXN0ZXJOYW1lXSA9IGNsdXN0ZXJQcm9taXNlcztcbiAgICAgIH1cblxuICAgICAgY2x1c3RlclByb21pc2VzLnB1c2goe1xuICAgICAgICBwcm9taXNlOiBzZGsuZWNzKCkudXBkYXRlU2VydmljZSh7XG4gICAgICAgICAgc2VydmljZTogZWNzU2VydmljZS5zZXJ2aWNlQXJuLFxuICAgICAgICAgIHRhc2tEZWZpbml0aW9uOiB0YXNrRGVmUmV2QXJuLFxuICAgICAgICAgIGNsdXN0ZXI6IGNsdXN0ZXJOYW1lLFxuICAgICAgICAgIGZvcmNlTmV3RGVwbG95bWVudDogdHJ1ZSxcbiAgICAgICAgICBkZXBsb3ltZW50Q29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgbWluaW11bUhlYWx0aHlQZXJjZW50OiAwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLnByb21pc2UoKSxcbiAgICAgICAgZWNzU2VydmljZTogZWNzU2VydmljZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKHNlcnZpY2VQZXJDbHVzdGVyVXBkYXRlcylcbiAgICAgIC5tYXAoY2x1c3RlclVwZGF0ZXMgPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoY2x1c3RlclVwZGF0ZXMubWFwKHNlcnZpY2VVcGRhdGUgPT4gc2VydmljZVVwZGF0ZS5wcm9taXNlKSk7XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgLy8gU3RlcCAzIC0gd2FpdCBmb3IgdGhlIHNlcnZpY2UgZGVwbG95bWVudHMgdHJpZ2dlcmVkIGluIFN0ZXAgMiB0byBmaW5pc2hcbiAgICAvLyBjb25maWd1cmUgYSBjdXN0b20gV2FpdGVyXG4gICAgKHNkay5lY3MoKSBhcyBhbnkpLmFwaS53YWl0ZXJzLmRlcGxveW1lbnRUb0ZpbmlzaCA9IHtcbiAgICAgIG5hbWU6ICdEZXBsb3ltZW50VG9GaW5pc2gnLFxuICAgICAgb3BlcmF0aW9uOiAnZGVzY3JpYmVTZXJ2aWNlcycsXG4gICAgICBkZWxheTogMTAsXG4gICAgICBtYXhBdHRlbXB0czogNjAsXG4gICAgICBhY2NlcHRvcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG1hdGNoZXI6ICdwYXRoQW55JyxcbiAgICAgICAgICBhcmd1bWVudDogJ2ZhaWx1cmVzW10ucmVhc29uJyxcbiAgICAgICAgICBleHBlY3RlZDogJ01JU1NJTkcnLFxuICAgICAgICAgIHN0YXRlOiAnZmFpbHVyZScsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBtYXRjaGVyOiAncGF0aEFueScsXG4gICAgICAgICAgYXJndW1lbnQ6ICdzZXJ2aWNlc1tdLnN0YXR1cycsXG4gICAgICAgICAgZXhwZWN0ZWQ6ICdEUkFJTklORycsXG4gICAgICAgICAgc3RhdGU6ICdmYWlsdXJlJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG1hdGNoZXI6ICdwYXRoQW55JyxcbiAgICAgICAgICBhcmd1bWVudDogJ3NlcnZpY2VzW10uc3RhdHVzJyxcbiAgICAgICAgICBleHBlY3RlZDogJ0lOQUNUSVZFJyxcbiAgICAgICAgICBzdGF0ZTogJ2ZhaWx1cmUnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbWF0Y2hlcjogJ3BhdGgnLFxuICAgICAgICAgIGFyZ3VtZW50OiBcImxlbmd0aChzZXJ2aWNlc1tdLmRlcGxveW1lbnRzWz8gc3RhdHVzID09ICdQUklNQVJZJyAmJiBydW5uaW5nQ291bnQgPCBkZXNpcmVkQ291bnRdW10pID09IGAwYFwiLFxuICAgICAgICAgIGV4cGVjdGVkOiB0cnVlLFxuICAgICAgICAgIHN0YXRlOiAnc3VjY2VzcycsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH07XG4gICAgLy8gY3JlYXRlIGEgY3VzdG9tIFdhaXRlciB0aGF0IHVzZXMgdGhlIGRlcGxveW1lbnRUb0ZpbmlzaCBjb25maWd1cmF0aW9uIGFkZGVkIGFib3ZlXG4gICAgY29uc3QgZGVwbG95bWVudFdhaXRlciA9IG5ldyAoQVdTIGFzIGFueSkuUmVzb3VyY2VXYWl0ZXIoc2RrLmVjcygpLCAnZGVwbG95bWVudFRvRmluaXNoJyk7XG4gICAgLy8gd2FpdCBmb3IgYWxsIG9mIHRoZSB3YWl0ZXJzIHRvIGZpbmlzaFxuICAgIHJldHVybiBQcm9taXNlLmFsbChPYmplY3QuZW50cmllcyhzZXJ2aWNlUGVyQ2x1c3RlclVwZGF0ZXMpLm1hcCgoW2NsdXN0ZXJOYW1lLCBzZXJ2aWNlVXBkYXRlc10pID0+IHtcbiAgICAgIHJldHVybiBkZXBsb3ltZW50V2FpdGVyLndhaXQoe1xuICAgICAgICBjbHVzdGVyOiBjbHVzdGVyTmFtZSxcbiAgICAgICAgc2VydmljZXM6IHNlcnZpY2VVcGRhdGVzLm1hcChzZXJ2aWNlVXBkYXRlID0+IHNlcnZpY2VVcGRhdGUuZWNzU2VydmljZS5zZXJ2aWNlQXJuKSxcbiAgICAgIH0pLnByb21pc2UoKTtcbiAgICB9KSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -16,7 +16,6 @@ const archiver = require('archiver');
|
|
|
16
16
|
* or a LambdaFunctionResource if the change can be short-circuited.
|
|
17
17
|
*/
|
|
18
18
|
async function isHotswappableLambdaFunctionChange(logicalId, change, evaluateCfnTemplate) {
|
|
19
|
-
var _a;
|
|
20
19
|
// if the change is for a Lambda Version,
|
|
21
20
|
// ignore it by returning an empty hotswap operation -
|
|
22
21
|
// we will publish a new version when we get to hotswapping the actual Function this Version points to, below
|
|
@@ -32,7 +31,7 @@ async function isHotswappableLambdaFunctionChange(logicalId, change, evaluateCfn
|
|
|
32
31
|
if (typeof lambdaCodeChange === 'string') {
|
|
33
32
|
return lambdaCodeChange;
|
|
34
33
|
}
|
|
35
|
-
const functionName = await evaluateCfnTemplate.establishResourcePhysicalName(logicalId,
|
|
34
|
+
const functionName = await evaluateCfnTemplate.establishResourcePhysicalName(logicalId, change.newValue.Properties?.FunctionName);
|
|
36
35
|
if (!functionName) {
|
|
37
36
|
return common_1.ChangeHotswapImpact.REQUIRES_FULL_DEPLOYMENT;
|
|
38
37
|
}
|
|
@@ -44,7 +43,7 @@ async function isHotswappableLambdaFunctionChange(logicalId, change, evaluateCfn
|
|
|
44
43
|
.filter(r => r.Type === 'AWS::Lambda::Version');
|
|
45
44
|
// find all Lambda Aliases that reference the above Versions
|
|
46
45
|
const aliasesReferencingVersions = util_1.flatMap(versionsReferencingFunction, v => evaluateCfnTemplate.findReferencesTo(v.LogicalId));
|
|
47
|
-
const aliasesNames = await Promise.all(aliasesReferencingVersions.map(a =>
|
|
46
|
+
const aliasesNames = await Promise.all(aliasesReferencingVersions.map(a => evaluateCfnTemplate.evaluateCfnExpression(a.Properties?.Name)));
|
|
48
47
|
return new LambdaFunctionHotswapOperation({
|
|
49
48
|
physicalName: functionName,
|
|
50
49
|
functionArn: functionArn,
|
|
@@ -76,7 +75,6 @@ function checkAliasHasVersionOnlyChange(change) {
|
|
|
76
75
|
* and only affects its Code property.
|
|
77
76
|
*/
|
|
78
77
|
async function isLambdaFunctionCodeOnlyChange(change, evaluateCfnTemplate) {
|
|
79
|
-
var _a;
|
|
80
78
|
const newResourceType = change.newValue.Type;
|
|
81
79
|
if (newResourceType !== 'AWS::Lambda::Function') {
|
|
82
80
|
return common_1.ChangeHotswapImpact.REQUIRES_FULL_DEPLOYMENT;
|
|
@@ -121,7 +119,7 @@ async function isLambdaFunctionCodeOnlyChange(change, evaluateCfnTemplate) {
|
|
|
121
119
|
foundCodeDifference = true;
|
|
122
120
|
// We must create a zip package containing a file with the inline code
|
|
123
121
|
const functionCode = await evaluateCfnTemplate.evaluateCfnExpression(updatedProp.newValue[newPropName]);
|
|
124
|
-
const functionRuntime = await evaluateCfnTemplate.evaluateCfnExpression(
|
|
122
|
+
const functionRuntime = await evaluateCfnTemplate.evaluateCfnExpression(change.newValue.Properties?.Runtime);
|
|
125
123
|
if (!functionRuntime) {
|
|
126
124
|
return common_1.ChangeHotswapImpact.REQUIRES_FULL_DEPLOYMENT;
|
|
127
125
|
}
|
|
@@ -148,7 +146,7 @@ async function isLambdaFunctionCodeOnlyChange(change, evaluateCfnTemplate) {
|
|
|
148
146
|
* `isDifferent`, and we have to reconcile them.
|
|
149
147
|
*/
|
|
150
148
|
const tagUpdates = {};
|
|
151
|
-
if (updatedProp
|
|
149
|
+
if (updatedProp?.isDifferent) {
|
|
152
150
|
updatedProp.newValue.forEach((tag) => {
|
|
153
151
|
tagUpdates[tag.Key] = tag.Value;
|
|
154
152
|
});
|
|
@@ -273,8 +271,7 @@ class LambdaFunctionHotswapOperation {
|
|
|
273
271
|
* or Container functions can take ~25 seconds (and 'idle' VPC functions can take minutes).
|
|
274
272
|
*/
|
|
275
273
|
async waitForLambdasPropertiesUpdateToFinish(currentFunctionConfiguration, lambda) {
|
|
276
|
-
|
|
277
|
-
const functionIsInVpcOrUsesDockerForCode = ((_a = currentFunctionConfiguration.VpcConfig) === null || _a === void 0 ? void 0 : _a.VpcId) ||
|
|
274
|
+
const functionIsInVpcOrUsesDockerForCode = currentFunctionConfiguration.VpcConfig?.VpcId ||
|
|
278
275
|
currentFunctionConfiguration.PackageType === 'Image';
|
|
279
276
|
// if the function is deployed in a VPC or if it is a container image function
|
|
280
277
|
// then the update will take much longer and we can wait longer between checks
|
|
@@ -351,4 +348,4 @@ function determineCodeFileExtFromRuntime(runtime) {
|
|
|
351
348
|
// https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-lambda-function-code.html#aws-properties-lambda-function-code-properties
|
|
352
349
|
throw new evaluate_cloudformation_template_1.CfnEvaluationException(`runtime ${runtime} is unsupported, only node.js and python runtimes are currently supported.`);
|
|
353
350
|
}
|
|
354
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLWZ1bmN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxhbWJkYS1mdW5jdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQWtDO0FBQ2xDLCtCQUErQjtBQUMvQixxQ0FBcUM7QUFFckMsMEZBQTZHO0FBQzdHLHFDQUFtSDtBQUVuSCx5RUFBeUU7QUFDekUsaUVBQWlFO0FBQ2pFLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUVyQzs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxrQ0FBa0MsQ0FDdEQsU0FBaUIsRUFBRSxNQUFtQyxFQUFFLG1CQUFtRDs7SUFFM0cseUNBQXlDO0lBQ3pDLHNEQUFzRDtJQUN0RCw2R0FBNkc7SUFDN0csMEVBQTBFO0lBQzFFLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssc0JBQXNCLEVBQUU7UUFDbkQsT0FBTyw0QkFBbUIsQ0FBQyxVQUFVLENBQUM7S0FDdkM7SUFFRCxrQ0FBa0M7SUFDbEMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxvQkFBb0IsRUFBRTtRQUNqRCxPQUFPLDhCQUE4QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQy9DO0lBRUQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLDhCQUE4QixDQUFDLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQzNGLElBQUksT0FBTyxnQkFBZ0IsS0FBSyxRQUFRLEVBQUU7UUFDeEMsT0FBTyxnQkFBZ0IsQ0FBQztLQUN6QjtJQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sbUJBQW1CLENBQUMsNkJBQTZCLENBQUMsU0FBUyxRQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSwwQ0FBRSxZQUFZLENBQUMsQ0FBQztJQUNsSSxJQUFJLENBQUMsWUFBWSxFQUFFO1FBQ2pCLE9BQU8sNEJBQW1CLENBQUMsd0JBQXdCLENBQUM7S0FDckQ7SUFFRCxNQUFNLFdBQVcs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Q0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1lBQzFCLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUMvQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFeEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7WUFDeEIsSUFBSSxFQUFFLFFBQVE7WUFDZCxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsMEJBQTBCLENBQUM7U0FDM0MsQ0FBQyxDQUFDO1FBRUgsS0FBSyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDMUIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUywrQkFBK0IsQ0FBQyxPQUFlO0lBQ3RELElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUM5QixPQUFPLElBQUksQ0FBQztLQUNiO0lBQ0QsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ2hDLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFDRCxtRkFBbUY7SUFDbkYseUpBQXlKO0lBQ3pKLE1BQU0sSUFBSSx5REFBc0IsQ0FBQyxXQUFXLE9BQU8sNEVBQTRFLENBQUMsQ0FBQztBQUNuSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV3JpdGFibGUgfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0IHsgZmxhdE1hcCB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgSVNESyB9IGZyb20gJy4uL2F3cy1hdXRoJztcbmltcG9ydCB7IENmbkV2YWx1YXRpb25FeGNlcHRpb24sIEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSB9IGZyb20gJy4uL2V2YWx1YXRlLWNsb3VkZm9ybWF0aW9uLXRlbXBsYXRlJztcbmltcG9ydCB7IENoYW5nZUhvdHN3YXBJbXBhY3QsIENoYW5nZUhvdHN3YXBSZXN1bHQsIEhvdHN3YXBPcGVyYXRpb24sIEhvdHN3YXBwYWJsZUNoYW5nZUNhbmRpZGF0ZSB9IGZyb20gJy4vY29tbW9uJztcblxuLy8gbmFtZXNwYWNlIG9iamVjdCBpbXBvcnRzIHdvbid0IHdvcmsgaW4gdGhlIGJ1bmRsZSBmb3IgZnVuY3Rpb24gZXhwb3J0c1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IGFyY2hpdmVyID0gcmVxdWlyZSgnYXJjaGl2ZXInKTtcblxuLyoqXG4gKiBSZXR1cm5zIGBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVGAgaWYgdGhlIGNoYW5nZSBjYW5ub3QgYmUgc2hvcnQtY2lyY3VpdGVkLFxuICogYENoYW5nZUhvdHN3YXBJbXBhY3QuSVJSRUxFVkFOVGAgaWYgdGhlIGNoYW5nZSBpcyBpcnJlbGV2YW50IGZyb20gYSBzaG9ydC1jaXJjdWl0IHBlcnNwZWN0aXZlXG4gKiAobGlrZSBhIGNoYW5nZSB0byBDREtNZXRhZGF0YSksXG4gKiBvciBhIExhbWJkYUZ1bmN0aW9uUmVzb3VyY2UgaWYgdGhlIGNoYW5nZSBjYW4gYmUgc2hvcnQtY2lyY3VpdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNIb3Rzd2FwcGFibGVMYW1iZGFGdW5jdGlvbkNoYW5nZShcbiAgbG9naWNhbElkOiBzdHJpbmcsIGNoYW5nZTogSG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlLCBldmFsdWF0ZUNmblRlbXBsYXRlOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUsXG4pOiBQcm9taXNlPENoYW5nZUhvdHN3YXBSZXN1bHQ+IHtcbiAgLy8gaWYgdGhlIGNoYW5nZSBpcyBmb3IgYSBMYW1iZGEgVmVyc2lvbixcbiAgLy8gaWdub3JlIGl0IGJ5IHJldHVybmluZyBhbiBlbXB0eSBob3Rzd2FwIG9wZXJhdGlvbiAtXG4gIC8vIHdlIHdpbGwgcHVibGlzaCBhIG5ldyB2ZXJzaW9uIHdoZW4gd2UgZ2V0IHRvIGhvdHN3YXBwaW5nIHRoZSBhY3R1YWwgRnVuY3Rpb24gdGhpcyBWZXJzaW9uIHBvaW50cyB0bywgYmVsb3dcbiAgLy8gKFZlcnNpb25zIGNhbid0IGJlIGNoYW5nZWQgaW4gQ2xvdWRGb3JtYXRpb24gYW55d2F5LCB0aGV5J3JlIGltbXV0YWJsZSlcbiAgaWYgKGNoYW5nZS5uZXdWYWx1ZS5UeXBlID09PSAnQVdTOjpMYW1iZGE6OlZlcnNpb24nKSB7XG4gICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuSVJSRUxFVkFOVDtcbiAgfVxuXG4gIC8vIHdlIGhhbmRsZSBBbGlhc2VzIHNwZWNpYWxseSB0b29cbiAgaWYgKGNoYW5nZS5uZXdWYWx1ZS5UeXBlID09PSAnQVdTOjpMYW1iZGE6OkFsaWFzJykge1xuICAgIHJldHVybiBjaGVja0FsaWFzSGFzVmVyc2lvbk9ubHlDaGFuZ2UoY2hhbmdlKTtcbiAgfVxuXG4gIGNvbnN0IGxhbWJkYUNvZGVDaGFuZ2UgPSBhd2FpdCBpc0xhbWJkYUZ1bmN0aW9uQ29kZU9ubHlDaGFuZ2UoY2hhbmdlLCBldmFsdWF0ZUNmblRlbXBsYXRlKTtcbiAgaWYgKHR5cGVvZiBsYW1iZGFDb2RlQ2hhbmdlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBsYW1iZGFDb2RlQ2hhbmdlO1xuICB9XG5cbiAgY29uc3QgZnVuY3Rpb25OYW1lID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5lc3RhYmxpc2hSZXNvdXJjZVBoeXNpY2FsTmFtZShsb2dpY2FsSWQsIGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzPy5GdW5jdGlvbk5hbWUpO1xuICBpZiAoIWZ1bmN0aW9uTmFtZSkge1xuICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgfVxuXG4gIGNvbnN0IGZ1bmN0aW9uQXJuID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oe1xuICAgICdGbjo6U3ViJzogJ2Fybjoke0FXUzo6UGFydGl0aW9ufTpsYW1iZGE6JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH06ZnVuY3Rpb246JyArIGZ1bmN0aW9uTmFtZSxcbiAgfSk7XG5cbiAgLy8gZmluZCBhbGwgTGFtYmRhIFZlcnNpb25zIHRoYXQgcmVmZXJlbmNlIHRoaXMgRnVuY3Rpb25cbiAgY29uc3QgdmVyc2lvbnNSZWZlcmVuY2luZ0Z1bmN0aW9uID0gZXZhbHVhdGVDZm5UZW1wbGF0ZS5maW5kUmVmZXJlbmNlc1RvKGxvZ2ljYWxJZClcbiAgICAuZmlsdGVyKHIgPT4gci5UeXBlID09PSAnQVdTOjpMYW1iZGE6OlZlcnNpb24nKTtcbiAgLy8gZmluZCBhbGwgTGFtYmRhIEFsaWFzZXMgdGhhdCByZWZlcmVuY2UgdGhlIGFib3ZlIFZlcnNpb25zXG4gIGNvbnN0IGFsaWFzZXNSZWZlcmVuY2luZ1ZlcnNpb25zID0gZmxhdE1hcCh2ZXJzaW9uc1JlZmVyZW5jaW5nRnVuY3Rpb24sIHYgPT5cbiAgICBldmFsdWF0ZUNmblRlbXBsYXRlLmZpbmRSZWZlcmVuY2VzVG8odi5Mb2dpY2FsSWQpKTtcbiAgY29uc3QgYWxpYXNlc05hbWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoYWxpYXNlc1JlZmVyZW5jaW5nVmVyc2lvbnMubWFwKGEgPT5cbiAgICBldmFsdWF0ZUNmblRlbXBsYXRlLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbihhLlByb3BlcnRpZXM/Lk5hbWUpKSk7XG5cbiAgcmV0dXJuIG5ldyBMYW1iZGFGdW5jdGlvbkhvdHN3YXBPcGVyYXRpb24oe1xuICAgIHBoeXNpY2FsTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgIGZ1bmN0aW9uQXJuOiBmdW5jdGlvbkFybixcbiAgICByZXNvdXJjZTogbGFtYmRhQ29kZUNoYW5nZSxcbiAgICBwdWJsaXNoVmVyc2lvbjogdmVyc2lvbnNSZWZlcmVuY2luZ0Z1bmN0aW9uLmxlbmd0aCA+IDAsXG4gICAgYWxpYXNlc05hbWVzLFxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zICBpcyBhIGdpdmVuIEFsaWFzIGNoYW5nZSBpcyBvbmx5IGluIHRoZSAnRnVuY3Rpb25WZXJzaW9uJyBwcm9wZXJ0eSxcbiAqIGFuZCBgQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlRgIGlzIHRoZSBjaGFuZ2UgaXMgZm9yIGFueSBvdGhlciBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gY2hlY2tBbGlhc0hhc1ZlcnNpb25Pbmx5Q2hhbmdlKGNoYW5nZTogSG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlKTogQ2hhbmdlSG90c3dhcFJlc3VsdCB7XG4gIGZvciAoY29uc3QgdXBkYXRlZFByb3BOYW1lIGluIGNoYW5nZS5wcm9wZXJ0eVVwZGF0ZXMpIHtcbiAgICBpZiAodXBkYXRlZFByb3BOYW1lICE9PSAnRnVuY3Rpb25WZXJzaW9uJykge1xuICAgICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5JUlJFTEVWQU5UO1xufVxuXG4vKipcbiAqIFJldHVybnMgYENoYW5nZUhvdHN3YXBJbXBhY3QuSVJSRUxFVkFOVGAgaWYgdGhlIGNoYW5nZSBpcyBub3QgZm9yIGEgQVdTOjpMYW1iZGE6OkZ1bmN0aW9uLFxuICogYnV0IGRvZXNuJ3QgcHJldmVudCBzaG9ydC1jaXJjdWl0aW5nXG4gKiAobGlrZSBhIGNoYW5nZSB0byBDREtNZXRhZGF0YSByZXNvdXJjZSksXG4gKiBgQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlRgIGlmIHRoZSBjaGFuZ2UgaXMgdG8gYSBBV1M6OkxhbWJkYTo6RnVuY3Rpb24sXG4gKiBidXQgbm90IG9ubHkgdG8gaXRzIENvZGUgcHJvcGVydHksXG4gKiBvciBhIExhbWJkYUZ1bmN0aW9uQ29kZSBpZiB0aGUgY2hhbmdlIGlzIHRvIGEgQVdTOjpMYW1iZGE6OkZ1bmN0aW9uLFxuICogYW5kIG9ubHkgYWZmZWN0cyBpdHMgQ29kZSBwcm9wZXJ0eS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaXNMYW1iZGFGdW5jdGlvbkNvZGVPbmx5Q2hhbmdlKFxuICBjaGFuZ2U6IEhvdHN3YXBwYWJsZUNoYW5nZUNhbmRpZGF0ZSwgZXZhbHVhdGVDZm5UZW1wbGF0ZTogRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlLFxuKTogUHJvbWlzZTxMYW1iZGFGdW5jdGlvbkNoYW5nZSB8IENoYW5nZUhvdHN3YXBJbXBhY3Q+IHtcbiAgY29uc3QgbmV3UmVzb3VyY2VUeXBlID0gY2hhbmdlLm5ld1ZhbHVlLlR5cGU7XG4gIGlmIChuZXdSZXNvdXJjZVR5cGUgIT09ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICB9XG5cbiAgLypcbiAgICogQXQgZmlyc3QgZ2xhbmNlLCB3ZSB3b3VsZCB3YW50IHRvIGluaXRpYWxpemUgdGhlc2UgdXNpbmcgdGhlIFwicHJldmlvdXNcIiB2YWx1ZXMgKGNoYW5nZS5vbGRWYWx1ZSksXG4gICAqIGluIGNhc2Ugb25seSBvbmUgb2YgdGhlbSBjaGFuZ2VkLCBsaWtlIHRoZSBrZXksIGFuZCB0aGUgQnVja2V0IHN0YXllZCB0aGUgc2FtZS5cbiAgICogSG93ZXZlciwgdGhhdCBhY3R1YWxseSBmYWlscyBmb3Igb2xkLXN0eWxlIHN5bnRoZXNpcywgd2hpY2ggdXNlcyBDRk4gUGFyYW1ldGVycyFcbiAgICogQmVjYXVzZSB0aGUgbmFtZXMgb2YgdGhlIFBhcmFtZXRlcnMgZGVwZW5kIG9uIHRoZSBoYXNoIG9mIHRoZSBBc3NldCxcbiAgICogdGhlIFBhcmFtZXRlcnMgdXNlZCBmb3IgdGhlIFwib2xkXCIgdmFsdWVzIG5vIGxvbmdlciBleGlzdCBpbiBgYXNzZXRQYXJhbXNgIGF0IHRoaXMgcG9pbnQsXG4gICAqIHdoaWNoIG1lYW5zIHdlIGRvbid0IGhhdmUgdGhlIGNvcnJlY3QgdmFsdWVzIGF2YWlsYWJsZSB0byBldmFsdWF0ZSB0aGUgQ0ZOIGV4cHJlc3Npb24gd2l0aC5cbiAgICogRm9ydHVuYXRlbHksIHRoZSBkaWZmIHdpbGwgYWx3YXlzIGluY2x1ZGUgYm90aCB0aGUgczNCdWNrZXQgYW5kIHMzS2V5IHBhcnRzIG9mIHRoZSBMYW1iZGEncyBDb2RlIHByb3BlcnR5LFxuICAgKiBldmVuIGlmIG9ubHkgb25lIG9mIHRoZW0gd2FzIGFjdHVhbGx5IGNoYW5nZWQsXG4gICAqIHdoaWNoIG1lYW5zIHdlIGRvbid0IG5lZWQgdGhlIFwib2xkXCIgdmFsdWVzIGF0IGFsbCwgYW5kIHdlIGNhbiBzYWZlbHkgaW5pdGlhbGl6ZSB0aGVzZSB3aXRoIGp1c3QgYCcnYC5cbiAgICovXG4gIGNvbnN0IHByb3BlcnR5VXBkYXRlcyA9IGNoYW5nZS5wcm9wZXJ0eVVwZGF0ZXM7XG4gIGxldCBjb2RlOiBMYW1iZGFGdW5jdGlvbkNvZGUgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGxldCB0YWdzOiBMYW1iZGFGdW5jdGlvblRhZ3MgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGxldCBkZXNjcmlwdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBsZXQgZW52aXJvbm1lbnQ6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCB1cGRhdGVkUHJvcE5hbWUgaW4gcHJvcGVydHlVcGRhdGVzKSB7XG4gICAgY29uc3QgdXBkYXRlZFByb3AgPSBwcm9wZXJ0eVVwZGF0ZXNbdXBkYXRlZFByb3BOYW1lXTtcblxuICAgIHN3aXRjaCAodXBkYXRlZFByb3BOYW1lKSB7XG4gICAgICBjYXNlICdDb2RlJzpcbiAgICAgICAgbGV0IGZvdW5kQ29kZURpZmZlcmVuY2UgPSBmYWxzZTtcbiAgICAgICAgbGV0IHMzQnVja2V0LCBzM0tleSwgaW1hZ2VVcmksIGZ1bmN0aW9uQ29kZVppcDtcblxuICAgICAgICBmb3IgKGNvbnN0IG5ld1Byb3BOYW1lIGluIHVwZGF0ZWRQcm9wLm5ld1ZhbHVlKSB7XG4gICAgICAgICAgc3dpdGNoIChuZXdQcm9wTmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnUzNCdWNrZXQnOlxuICAgICAgICAgICAgICBmb3VuZENvZGVEaWZmZXJlbmNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgczNCdWNrZXQgPSBhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbih1cGRhdGVkUHJvcC5uZXdWYWx1ZVtuZXdQcm9wTmFtZV0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1MzS2V5JzpcbiAgICAgICAgICAgICAgZm91bmRDb2RlRGlmZmVyZW5jZSA9IHRydWU7XG4gICAgICAgICAgICAgIHMzS2V5ID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24odXBkYXRlZFByb3AubmV3VmFsdWVbbmV3UHJvcE5hbWVdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdJbWFnZVVyaSc6XG4gICAgICAgICAgICAgIGZvdW5kQ29kZURpZmZlcmVuY2UgPSB0cnVlO1xuICAgICAgICAgICAgICBpbWFnZVVyaSA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHVwZGF0ZWRQcm9wLm5ld1ZhbHVlW25ld1Byb3BOYW1lXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnWmlwRmlsZSc6XG4gICAgICAgICAgICAgIGZvdW5kQ29kZURpZmZlcmVuY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAvLyBXZSBtdXN0IGNyZWF0ZSBhIHppcCBwYWNrYWdlIGNvbnRhaW5pbmcgYSBmaWxlIHdpdGggdGhlIGlubGluZSBjb2RlXG4gICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uQ29kZSA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHVwZGF0ZWRQcm9wLm5ld1ZhbHVlW25ld1Byb3BOYW1lXSk7XG4gICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uUnVudGltZSA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzPy5SdW50aW1lKTtcbiAgICAgICAgICAgICAgaWYgKCFmdW5jdGlvblJ1bnRpbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gZmlsZSBleHRlbnNpb24gbXVzdCBiZSBjaG9zZW4gZGVwZW5kaW5nIG9uIHRoZSBydW50aW1lXG4gICAgICAgICAgICAgIGNvbnN0IGNvZGVGaWxlRXh0ID0gZGV0ZXJtaW5lQ29kZUZpbGVFeHRGcm9tUnVudGltZShmdW5jdGlvblJ1bnRpbWUpO1xuICAgICAgICAgICAgICBmdW5jdGlvbkNvZGVaaXAgPSBhd2FpdCB6aXBTdHJpbmcoYGluZGV4LiR7Y29kZUZpbGVFeHR9YCwgZnVuY3Rpb25Db2RlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChmb3VuZENvZGVEaWZmZXJlbmNlKSB7XG4gICAgICAgICAgY29kZSA9IHtcbiAgICAgICAgICAgIHMzQnVja2V0LFxuICAgICAgICAgICAgczNLZXksXG4gICAgICAgICAgICBpbWFnZVVyaSxcbiAgICAgICAgICAgIGZ1bmN0aW9uQ29kZVppcCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnVGFncyc6XG4gICAgICAgIC8qXG4gICAgICAgICAqIFRhZyB1cGRhdGVzIGFyZSBhIGJpdCBvZGQ7IHRoZXkgbWFuaWZlc3QgYXMgdHdvIGxpc3RzLCBhcmUgZmxhZ2dlZCBvbmx5IGFzXG4gICAgICAgICAqIGBpc0RpZmZlcmVudGAsIGFuZCB3ZSBoYXZlIHRvIHJlY29uY2lsZSB0aGVtLlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgdGFnVXBkYXRlczogeyBbdGFnOiBzdHJpbmddOiBzdHJpbmcgfCBUYWdEZWxldGlvbiB9ID0ge307XG4gICAgICAgIGlmICh1cGRhdGVkUHJvcD8uaXNEaWZmZXJlbnQpIHtcbiAgICAgICAgICB1cGRhdGVkUHJvcC5uZXdWYWx1ZS5mb3JFYWNoKCh0YWc6IENmbkRpZmZUYWdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGFnVXBkYXRlc1t0YWcuS2V5XSA9IHRhZy5WYWx1ZTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHVwZGF0ZWRQcm9wLm9sZFZhbHVlLmZvckVhY2goKHRhZzogQ2ZuRGlmZlRhZ1ZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGFnVXBkYXRlc1t0YWcuS2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHRhZ1VwZGF0ZXNbdGFnLktleV0gPSBUYWdEZWxldGlvbi5ERUxFVEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0YWdzID0geyB0YWdVcGRhdGVzIH07XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdEZXNjcmlwdGlvbic6XG4gICAgICAgIGRlc2NyaXB0aW9uID0gdXBkYXRlZFByb3AubmV3VmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRW52aXJvbm1lbnQnOlxuICAgICAgICBlbnZpcm9ubWVudCA9IHVwZGF0ZWRQcm9wLm5ld1ZhbHVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjb25maWd1cmF0aW9ucyA9IGRlc2NyaXB0aW9uIHx8IGVudmlyb25tZW50ID8geyBkZXNjcmlwdGlvbiwgZW52aXJvbm1lbnQgfSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIGNvZGUgfHwgdGFncyB8fCBjb25maWd1cmF0aW9ucyA/IHsgY29kZSwgdGFncywgY29uZmlndXJhdGlvbnMgfSA6IENoYW5nZUhvdHN3YXBJbXBhY3QuSVJSRUxFVkFOVDtcbn1cblxuaW50ZXJmYWNlIENmbkRpZmZUYWdWYWx1ZSB7XG4gIHJlYWRvbmx5IEtleTogc3RyaW5nO1xuICByZWFkb25seSBWYWx1ZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgTGFtYmRhRnVuY3Rpb25Db2RlIHtcbiAgcmVhZG9ubHkgczNCdWNrZXQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHMzS2V5Pzogc3RyaW5nO1xuICByZWFkb25seSBpbWFnZVVyaT86IHN0cmluZztcbiAgcmVhZG9ubHkgZnVuY3Rpb25Db2RlWmlwPzogQnVmZmVyO1xufVxuXG5lbnVtIFRhZ0RlbGV0aW9uIHtcbiAgREVMRVRFID0gLTEsXG59XG5cbmludGVyZmFjZSBMYW1iZGFGdW5jdGlvblRhZ3Mge1xuICByZWFkb25seSB0YWdVcGRhdGVzOiB7IFt0YWcgOiBzdHJpbmddIDogc3RyaW5nIHwgVGFnRGVsZXRpb24gfTtcbn1cblxuaW50ZXJmYWNlIExhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnMge1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5pbnRlcmZhY2UgTGFtYmRhRnVuY3Rpb25DaGFuZ2Uge1xuICByZWFkb25seSBjb2RlPzogTGFtYmRhRnVuY3Rpb25Db2RlO1xuICByZWFkb25seSB0YWdzPzogTGFtYmRhRnVuY3Rpb25UYWdzO1xuICByZWFkb25seSBjb25maWd1cmF0aW9ucz86IExhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnM7XG59XG5cbmludGVyZmFjZSBMYW1iZGFGdW5jdGlvblJlc291cmNlIHtcbiAgcmVhZG9ubHkgcGh5c2ljYWxOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZ1bmN0aW9uQXJuOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc291cmNlOiBMYW1iZGFGdW5jdGlvbkNoYW5nZTtcbiAgcmVhZG9ubHkgcHVibGlzaFZlcnNpb246IGJvb2xlYW47XG4gIHJlYWRvbmx5IGFsaWFzZXNOYW1lczogc3RyaW5nW107XG59XG5cbmNsYXNzIExhbWJkYUZ1bmN0aW9uSG90c3dhcE9wZXJhdGlvbiBpbXBsZW1lbnRzIEhvdHN3YXBPcGVyYXRpb24ge1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZSA9ICdsYW1iZGEtZnVuY3Rpb24nO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2VOYW1lczogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBsYW1iZGFGdW5jdGlvblJlc291cmNlOiBMYW1iZGFGdW5jdGlvblJlc291cmNlKSB7XG4gICAgdGhpcy5yZXNvdXJjZU5hbWVzID0gW1xuICAgICAgYExhbWJkYSBGdW5jdGlvbiAnJHtsYW1iZGFGdW5jdGlvblJlc291cmNlLnBoeXNpY2FsTmFtZX0nYCxcbiAgICAgIC8vIGFkZCBWZXJzaW9uIGhlcmUgaWYgd2UncmUgcHVibGlzaGluZyBhIG5ldyBvbmVcbiAgICAgIC4uLihsYW1iZGFGdW5jdGlvblJlc291cmNlLnB1Ymxpc2hWZXJzaW9uID8gW2BMYW1iZGEgVmVyc2lvbiBmb3IgRnVuY3Rpb24gJyR7bGFtYmRhRnVuY3Rpb25SZXNvdXJjZS5waHlzaWNhbE5hbWV9J2BdIDogW10pLFxuICAgICAgLy8gYWRkIGFueSBBbGlhc2VzIHRoYXQgd2UgYXJlIGhvdHN3YXBwaW5nIGhlcmVcbiAgICAgIC4uLmxhbWJkYUZ1bmN0aW9uUmVzb3VyY2UuYWxpYXNlc05hbWVzLm1hcChhbGlhcyA9PiBgTGFtYmRhIEFsaWFzICcke2FsaWFzfScgZm9yIEZ1bmN0aW9uICcke2xhbWJkYUZ1bmN0aW9uUmVzb3VyY2UucGh5c2ljYWxOYW1lfSdgKSxcbiAgICBdO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFwcGx5KHNkazogSVNESyk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgbGFtYmRhID0gc2RrLmxhbWJkYSgpO1xuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5sYW1iZGFGdW5jdGlvblJlc291cmNlLnJlc291cmNlO1xuICAgIGNvbnN0IG9wZXJhdGlvbnM6IFByb21pc2U8YW55PltdID0gW107XG5cbiAgICBpZiAocmVzb3VyY2UuY29kZSAhPT0gdW5kZWZpbmVkIHx8IHJlc291cmNlLmNvbmZpZ3VyYXRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChyZXNvdXJjZS5jb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgdXBkYXRlRnVuY3Rpb25Db2RlUmVzcG9uc2UgPSBhd2FpdCBsYW1iZGEudXBkYXRlRnVuY3Rpb25Db2RlKHtcbiAgICAgICAgICBGdW5jdGlvbk5hbWU6IHRoaXMubGFtYmRhRnVuY3Rpb25SZXNvdXJjZS5waHlzaWNhbE5hbWUsXG4gICAgICAgICAgUzNCdWNrZXQ6IHJlc291cmNlLmNvZGUuczNCdWNrZXQsXG4gICAgICAgICAgUzNLZXk6IHJlc291cmNlLmNvZGUuczNLZXksXG4gICAgICAgICAgSW1hZ2VVcmk6IHJlc291cmNlLmNvZGUuaW1hZ2VVcmksXG4gICAgICAgICAgWmlwRmlsZTogcmVzb3VyY2UuY29kZS5mdW5jdGlvbkNvZGVaaXAsXG4gICAgICAgIH0pLnByb21pc2UoKTtcblxuICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JMYW1iZGFzUHJvcGVydGllc1VwZGF0ZVRvRmluaXNoKHVwZGF0ZUZ1bmN0aW9uQ29kZVJlc3BvbnNlLCBsYW1iZGEpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzb3VyY2UuY29uZmlndXJhdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB1cGRhdGVSZXF1ZXN0OiBBV1MuTGFtYmRhLlVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvblJlcXVlc3QgPSB7XG4gICAgICAgICAgRnVuY3Rpb25OYW1lOiB0aGlzLmxhbWJkYUZ1bmN0aW9uUmVzb3VyY2UucGh5c2ljYWxOYW1lLFxuICAgICAgICB9O1xuICAgICAgICBpZiAocmVzb3VyY2UuY29uZmlndXJhdGlvbnMuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHVwZGF0ZVJlcXVlc3QuRGVzY3JpcHRpb24gPSByZXNvdXJjZS5jb25maWd1cmF0aW9ucy5kZXNjcmlwdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzb3VyY2UuY29uZmlndXJhdGlvbnMuZW52aXJvbm1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHVwZGF0ZVJlcXVlc3QuRW52aXJvbm1lbnQgPSByZXNvdXJjZS5jb25maWd1cmF0aW9ucy5lbnZpcm9ubWVudDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGRhdGVGdW5jdGlvbkNvZGVSZXNwb25zZSA9IGF3YWl0IGxhbWJkYS51cGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb24odXBkYXRlUmVxdWVzdCkucHJvbWlzZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JMYW1iZGFzUHJvcGVydGllc1VwZGF0ZVRvRmluaXNoKHVwZGF0ZUZ1bmN0aW9uQ29kZVJlc3BvbnNlLCBsYW1iZGEpO1xuICAgICAgfVxuXG4gICAgICAvLyBvbmx5IGlmIHRoZSBjb2RlIGNoYW5nZWQgaXMgdGhlcmUgYW55IHBvaW50IGluIHB1Ymxpc2hpbmcgYSBuZXcgVmVyc2lvblxuICAgICAgaWYgKHRoaXMubGFtYmRhRnVuY3Rpb25SZXNvdXJjZS5wdWJsaXNoVmVyc2lvbikge1xuICAgICAgICBjb25zdCBwdWJsaXNoVmVyc2lvblByb21pc2UgPSBsYW1iZGEucHVibGlzaFZlcnNpb24oe1xuICAgICAgICAgIEZ1bmN0aW9uTmFtZTogdGhpcy5sYW1iZGFGdW5jdGlvblJlc291cmNlLnBoeXNpY2FsTmFtZSxcbiAgICAgICAgfSkucHJvbWlzZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLmxhbWJkYUZ1bmN0aW9uUmVzb3VyY2UuYWxpYXNlc05hbWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBWZXJzaW9uIHRvIGZpbmlzaCBwdWJsaXNoaW5nXG4gICAgICAgICAgY29uc3QgdmVyc2lvblVwZGF0ZSA9IGF3YWl0IHB1Ymxpc2hWZXJzaW9uUHJvbWlzZTtcblxuICAgICAgICAgIGZvciAoY29uc3QgYWxpYXMgb2YgdGhpcy5sYW1iZGFGdW5jdGlvblJlc291cmNlLmFsaWFzZXNOYW1lcykge1xuICAgICAgICAgICAgb3BlcmF0aW9ucy5wdXNoKGxhbWJkYS51cGRhdGVBbGlhcyh7XG4gICAgICAgICAgICAgIEZ1bmN0aW9uTmFtZTogdGhpcy5sYW1iZGFGdW5jdGlvblJlc291cmNlLnBoeXNpY2FsTmFtZSxcbiAgICAgICAgICAgICAgTmFtZTogYWxpYXMsXG4gICAgICAgICAgICAgIEZ1bmN0aW9uVmVyc2lvbjogdmVyc2lvblVwZGF0ZS5WZXJzaW9uLFxuICAgICAgICAgICAgfSkucHJvbWlzZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3BlcmF0aW9ucy5wdXNoKHB1Ymxpc2hWZXJzaW9uUHJvbWlzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzb3VyY2UudGFncyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0YWdzVG9EZWxldGU6IHN0cmluZ1tdID0gT2JqZWN0LmVudHJpZXMocmVzb3VyY2UudGFncy50YWdVcGRhdGVzKVxuICAgICAgICAuZmlsdGVyKChbX2tleSwgdmFsXSkgPT4gdmFsID09PSBUYWdEZWxldGlvbi5ERUxFVEUpXG4gICAgICAgIC5tYXAoKFtrZXksIF92YWxdKSA9PiBrZXkpO1xuXG4gICAgICBjb25zdCB0YWdzVG9TZXQ6IHsgW3RhZzogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJlc291cmNlLnRhZ3MhLnRhZ1VwZGF0ZXMpXG4gICAgICAgIC5maWx0ZXIoKFtfa2V5LCB2YWxdKSA9PiB2YWwgIT09IFRhZ0RlbGV0aW9uLkRFTEVURSlcbiAgICAgICAgLmZvckVhY2goKFt0YWdOYW1lLCB0YWdWYWx1ZV0pID0+IHtcbiAgICAgICAgICB0YWdzVG9TZXRbdGFnTmFtZV0gPSB0YWdWYWx1ZSBhcyBzdHJpbmc7XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAodGFnc1RvRGVsZXRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb3BlcmF0aW9ucy5wdXNoKGxhbWJkYS51bnRhZ1Jlc291cmNlKHtcbiAgICAgICAgICBSZXNvdXJjZTogdGhpcy5sYW1iZGFGdW5jdGlvblJlc291cmNlLmZ1bmN0aW9uQXJuLFxuICAgICAgICAgIFRhZ0tleXM6IHRhZ3NUb0RlbGV0ZSxcbiAgICAgICAgfSkucHJvbWlzZSgpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKE9iamVjdC5rZXlzKHRhZ3NUb1NldCkubGVuZ3RoID4gMCkge1xuICAgICAgICBvcGVyYXRpb25zLnB1c2gobGFtYmRhLnRhZ1Jlc291cmNlKHtcbiAgICAgICAgICBSZXNvdXJjZTogdGhpcy5sYW1iZGFGdW5jdGlvblJlc291cmNlLmZ1bmN0aW9uQXJuLFxuICAgICAgICAgIFRhZ3M6IHRhZ3NUb1NldCxcbiAgICAgICAgfSkucHJvbWlzZSgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBydW4gYWxsIG9mIG91ciB1cGRhdGVzIGluIHBhcmFsbGVsXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKG9wZXJhdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGEgTGFtYmRhIEZ1bmN0aW9uIGlzIHVwZGF0ZWQsIGl0IGNhbm5vdCBiZSB1cGRhdGVkIGFnYWluIHVudGlsIHRoZVxuICAgKiBgU3RhdGU9QWN0aXZlYCBhbmQgdGhlIGBMYXN0VXBkYXRlU3RhdHVzPVN1Y2Nlc3NmdWxgLlxuICAgKlxuICAgKiBEZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIExhbWJkYSBGdW5jdGlvbiB0aGlzIGNvdWxkIGhhcHBlbiByZWxhdGl2ZWx5IHF1aWNrbHlcbiAgICogb3IgdmVyeSBzbG93bHkuIEZvciBleGFtcGxlLCBaaXAgYmFzZWQgZnVuY3Rpb25zIF9ub3RfIGluIGEgVlBDIGNhbiB0YWtlIH4xIHNlY29uZCB3aGVyZWFzIFZQQ1xuICAgKiBvciBDb250YWluZXIgZnVuY3Rpb25zIGNhbiB0YWtlIH4yNSBzZWNvbmRzIChhbmQgJ2lkbGUnIFZQQyBmdW5jdGlvbnMgY2FuIHRha2UgbWludXRlcykuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHdhaXRGb3JMYW1iZGFzUHJvcGVydGllc1VwZGF0ZVRvRmluaXNoKFxuICAgIGN1cnJlbnRGdW5jdGlvbkNvbmZpZ3VyYXRpb246IEFXUy5MYW1iZGEuRnVuY3Rpb25Db25maWd1cmF0aW9uLCBsYW1iZGE6IEFXUy5MYW1iZGEsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZ1bmN0aW9uSXNJblZwY09yVXNlc0RvY2tlckZvckNvZGUgPSBjdXJyZW50RnVuY3Rpb25Db25maWd1cmF0aW9uLlZwY0NvbmZpZz8uVnBjSWQgfHxcbiAgICAgICAgY3VycmVudEZ1bmN0aW9uQ29uZmlndXJhdGlvbi5QYWNrYWdlVHlwZSA9PT0gJ0ltYWdlJztcblxuICAgIC8vIGlmIHRoZSBmdW5jdGlvbiBpcyBkZXBsb3llZCBpbiBhIFZQQyBvciBpZiBpdCBpcyBhIGNvbnRhaW5lciBpbWFnZSBmdW5jdGlvblxuICAgIC8vIHRoZW4gdGhlIHVwZGF0ZSB3aWxsIHRha2UgbXVjaCBsb25nZXIgYW5kIHdlIGNhbiB3YWl0IGxvbmdlciBiZXR3ZWVuIGNoZWNrc1xuICAgIC8vIG90aGVyd2lzZSwgdGhlIHVwZGF0ZSB3aWxsIGJlIHF1aWNrLCBzbyBhIDEtc2Vjb25kIGRlbGF5IGlzIGZpbmVcbiAgICBjb25zdCBkZWxheVNlY29uZHMgPSBmdW5jdGlvbklzSW5WcGNPclVzZXNEb2NrZXJGb3JDb2RlID8gNSA6IDE7XG5cbiAgICAvLyBjb25maWd1cmUgYSBjdXN0b20gd2FpdGVyIHRvIHdhaXQgZm9yIHRoZSBmdW5jdGlvbiB1cGRhdGUgdG8gY29tcGxldGVcbiAgICAobGFtYmRhIGFzIGFueSkuYXBpLndhaXRlcnMudXBkYXRlRnVuY3Rpb25Qcm9wZXJ0aWVzVG9GaW5pc2ggPSB7XG4gICAgICBuYW1lOiAnVXBkYXRlRnVuY3Rpb25Qcm9wZXJ0aWVzVG9GaW5pc2gnLFxuICAgICAgb3BlcmF0aW9uOiAnZ2V0RnVuY3Rpb24nLFxuICAgICAgLy8gZXF1YXRlcyB0byAxIG1pbnV0ZSBmb3IgemlwIGZ1bmN0aW9uIG5vdCBpbiBhIFZQQyBhbmRcbiAgICAgIC8vIDUgbWludXRlcyBmb3IgY29udGFpbmVyIGZ1bmN0aW9ucyBvciBmdW5jdGlvbiBpbiBhIFZQQ1xuICAgICAgbWF4QXR0ZW1wdHM6IDYwLFxuICAgICAgZGVsYXk6IGRlbGF5U2Vjb25kcyxcbiAgICAgIGFjY2VwdG9yczogW1xuICAgICAgICB7XG4gICAgICAgICAgbWF0Y2hlcjogJ3BhdGgnLFxuICAgICAgICAgIGFyZ3VtZW50OiBcIkNvbmZpZ3VyYXRpb24uTGFzdFVwZGF0ZVN0YXR1cyA9PSAnU3VjY2Vzc2Z1bCcgJiYgQ29uZmlndXJhdGlvbi5TdGF0ZSA9PSAnQWN0aXZlJ1wiLFxuICAgICAgICAgIGV4cGVjdGVkOiB0cnVlLFxuICAgICAgICAgIHN0YXRlOiAnc3VjY2VzcycsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBtYXRjaGVyOiAncGF0aCcsXG4gICAgICAgICAgYXJndW1lbnQ6ICdDb25maWd1cmF0aW9uLkxhc3RVcGRhdGVTdGF0dXMnLFxuICAgICAgICAgIGV4cGVjdGVkOiAnRmFpbGVkJyxcbiAgICAgICAgICBzdGF0ZTogJ2ZhaWx1cmUnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlRnVuY3Rpb25Qcm9wZXJ0aWVzV2FpdGVyID0gbmV3IChBV1MgYXMgYW55KS5SZXNvdXJjZVdhaXRlcihsYW1iZGEsICd1cGRhdGVGdW5jdGlvblByb3BlcnRpZXNUb0ZpbmlzaCcpO1xuICAgIGF3YWl0IHVwZGF0ZUZ1bmN0aW9uUHJvcGVydGllc1dhaXRlci53YWl0KHtcbiAgICAgIEZ1bmN0aW9uTmFtZTogdGhpcy5sYW1iZGFGdW5jdGlvblJlc291cmNlLnBoeXNpY2FsTmFtZSxcbiAgICB9KS5wcm9taXNlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb21wcmVzcyBhIHN0cmluZyBhcyBhIGZpbGUsIHJldHVybmluZyBhIHByb21pc2UgZm9yIHRoZSB6aXAgYnVmZmVyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWFyY2hpdmVyL2lzc3Vlcy8zNDJcbiAqL1xuZnVuY3Rpb24gemlwU3RyaW5nKGZpbGVOYW1lOiBzdHJpbmcsIHJhd1N0cmluZzogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBidWZmZXJzOiBCdWZmZXJbXSA9IFtdO1xuXG4gICAgY29uc3QgY29udmVydGVyID0gbmV3IFdyaXRhYmxlKCk7XG5cbiAgICBjb252ZXJ0ZXIuX3dyaXRlID0gKGNodW5rOiBCdWZmZXIsIF86IHN0cmluZywgY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcbiAgICAgIGJ1ZmZlcnMucHVzaChjaHVuayk7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgY29udmVydGVyLm9uKCdmaW5pc2gnLCAoKSA9PiB7XG4gICAgICByZXNvbHZlKEJ1ZmZlci5jb25jYXQoYnVmZmVycykpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgYXJjaGl2ZSA9IGFyY2hpdmVyKCd6aXAnKTtcblxuICAgIGFyY2hpdmUub24oJ2Vycm9yJywgKGVycjogYW55KSA9PiB7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9KTtcblxuICAgIGFyY2hpdmUucGlwZShjb252ZXJ0ZXIpO1xuXG4gICAgYXJjaGl2ZS5hcHBlbmQocmF3U3RyaW5nLCB7XG4gICAgICBuYW1lOiBmaWxlTmFtZSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCcxOTgwLTAxLTAxVDAwOjAwOjAwLjAwMFonKSwgLy8gQWRkIGRhdGUgdG8gbWFrZSByZXN1bHRpbmcgemlwIGZpbGUgZGV0ZXJtaW5pc3RpY1xuICAgIH0pO1xuXG4gICAgdm9pZCBhcmNoaXZlLmZpbmFsaXplKCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBmaWxlIGV4dGVuc2lvbiBmcm9tIExhbWJkYSBydW50aW1lIHN0cmluZy5cbiAqIFdlIHVzZSB0aGlzIGV4dGVuc2lvbiB0byBjcmVhdGUgYSBkZXBsb3ltZW50IHBhY2thZ2UgZnJvbSBMYW1iZGEgaW5saW5lIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIGRldGVybWluZUNvZGVGaWxlRXh0RnJvbVJ1bnRpbWUocnVudGltZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHJ1bnRpbWUuc3RhcnRzV2l0aCgnbm9kZScpKSB7XG4gICAgcmV0dXJuICdqcyc7XG4gIH1cbiAgaWYgKHJ1bnRpbWUuc3RhcnRzV2l0aCgncHl0aG9uJykpIHtcbiAgICByZXR1cm4gJ3B5JztcbiAgfVxuICAvLyBDdXJyZW50bHkgaW5saW5lIGNvZGUgb25seSBzdXBwb3J0cyBOb2RlLmpzIGFuZCBQeXRob24sIGlnbm9yaW5nIG90aGVyIHJ1bnRpbWVzLlxuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1sYW1iZGEtZnVuY3Rpb24tY29kZS5odG1sI2F3cy1wcm9wZXJ0aWVzLWxhbWJkYS1mdW5jdGlvbi1jb2RlLXByb3BlcnRpZXNcbiAgdGhyb3cgbmV3IENmbkV2YWx1YXRpb25FeGNlcHRpb24oYHJ1bnRpbWUgJHtydW50aW1lfSBpcyB1bnN1cHBvcnRlZCwgb25seSBub2RlLmpzIGFuZCBweXRob24gcnVudGltZXMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuYCk7XG59XG4iXX0=
|
|
351
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLWZ1bmN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxhbWJkYS1mdW5jdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQWtDO0FBQ2xDLCtCQUErQjtBQUMvQixxQ0FBcUM7QUFFckMsMEZBQTZHO0FBQzdHLHFDQUFtSDtBQUVuSCx5RUFBeUU7QUFDekUsaUVBQWlFO0FBQ2pFLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUVyQzs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxrQ0FBa0MsQ0FDdEQsU0FBaUIsRUFBRSxNQUFtQyxFQUFFLG1CQUFtRDtJQUUzRyx5Q0FBeUM7SUFDekMsc0RBQXNEO0lBQ3RELDZHQUE2RztJQUM3RywwRUFBMEU7SUFDMUUsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxzQkFBc0IsRUFBRTtRQUNuRCxPQUFPLDRCQUFtQixDQUFDLFVBQVUsQ0FBQztLQUN2QztJQUVELGtDQUFrQztJQUNsQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLG9CQUFvQixFQUFFO1FBQ2pELE9BQU8sOEJBQThCLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDL0M7SUFFRCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sOEJBQThCLENBQUMsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUM7SUFDM0YsSUFBSSxPQUFPLGdCQUFnQixLQUFLLFFBQVEsRUFBRTtRQUN4QyxPQUFPLGdCQUFnQixDQUFDO0tBQ3pCO0lBRUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyw2QkFBNkIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDbEksSUFBSSxDQUFDLFlBQVksRUFBRTtRQUNqQixPQUFPLDRCQUFtQixDQUFDLHdCQUF3QixDQUFDO0tBQ3JEO0lBRUQsTUFBTSxXQUFXLEdB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QUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFaEMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUMvQixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFeEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7WUFDeEIsSUFBSSxFQUFFLFFBQVE7WUFDZCxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsMEJBQTBCLENBQUM7U0FDM0MsQ0FBQyxDQUFDO1FBRUgsS0FBSyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDMUIsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUywrQkFBK0IsQ0FBQyxPQUFlO0lBQ3RELElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUM5QixPQUFPLElBQUksQ0FBQztLQUNiO0lBQ0QsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ2hDLE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFDRCxtRkFBbUY7SUFDbkYseUpBQXlKO0lBQ3pKLE1BQU0sSUFBSSx5REFBc0IsQ0FBQyxXQUFXLE9BQU8sNEVBQTRFLENBQUMsQ0FBQztBQUNuSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV3JpdGFibGUgfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0ICogYXMgQVdTIGZyb20gJ2F3cy1zZGsnO1xuaW1wb3J0IHsgZmxhdE1hcCB9IGZyb20gJy4uLy4uL3V0aWwnO1xuaW1wb3J0IHsgSVNESyB9IGZyb20gJy4uL2F3cy1hdXRoJztcbmltcG9ydCB7IENmbkV2YWx1YXRpb25FeGNlcHRpb24sIEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSB9IGZyb20gJy4uL2V2YWx1YXRlLWNsb3VkZm9ybWF0aW9uLXRlbXBsYXRlJztcbmltcG9ydCB7IENoYW5nZUhvdHN3YXBJbXBhY3QsIENoYW5nZUhvdHN3YXBSZXN1bHQsIEhvdHN3YXBPcGVyYXRpb24sIEhvdHN3YXBwYWJsZUNoYW5nZUNhbmRpZGF0ZSB9IGZyb20gJy4vY29tbW9uJztcblxuLy8gbmFtZXNwYWNlIG9iamVjdCBpbXBvcnRzIHdvbid0IHdvcmsgaW4gdGhlIGJ1bmRsZSBmb3IgZnVuY3Rpb24gZXhwb3J0c1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcbmNvbnN0IGFyY2hpdmVyID0gcmVxdWlyZSgnYXJjaGl2ZXInKTtcblxuLyoqXG4gKiBSZXR1cm5zIGBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVGAgaWYgdGhlIGNoYW5nZSBjYW5ub3QgYmUgc2hvcnQtY2lyY3VpdGVkLFxuICogYENoYW5nZUhvdHN3YXBJbXBhY3QuSVJSRUxFVkFOVGAgaWYgdGhlIGNoYW5nZSBpcyBpcnJlbGV2YW50IGZyb20gYSBzaG9ydC1jaXJjdWl0IHBlcnNwZWN0aXZlXG4gKiAobGlrZSBhIGNoYW5nZSB0byBDREtNZXRhZGF0YSksXG4gKiBvciBhIExhbWJkYUZ1bmN0aW9uUmVzb3VyY2UgaWYgdGhlIGNoYW5nZSBjYW4gYmUgc2hvcnQtY2lyY3VpdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNIb3Rzd2FwcGFibGVMYW1iZGFGdW5jdGlvbkNoYW5nZShcbiAgbG9naWNhbElkOiBzdHJpbmcsIGNoYW5nZTogSG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlLCBldmFsdWF0ZUNmblRlbXBsYXRlOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUsXG4pOiBQcm9taXNlPENoYW5nZUhvdHN3YXBSZXN1bHQ+IHtcbiAgLy8gaWYgdGhlIGNoYW5nZSBpcyBmb3IgYSBMYW1iZGEgVmVyc2lvbixcbiAgLy8gaWdub3JlIGl0IGJ5IHJldHVybmluZyBhbiBlbXB0eSBob3Rzd2FwIG9wZXJhdGlvbiAtXG4gIC8vIHdlIHdpbGwgcHVibGlzaCBhIG5ldyB2ZXJzaW9uIHdoZW4gd2UgZ2V0IHRvIGhvdHN3YXBwaW5nIHRoZSBhY3R1YWwgRnVuY3Rpb24gdGhpcyBWZXJzaW9uIHBvaW50cyB0bywgYmVsb3dcbiAgLy8gKFZlcnNpb25zIGNhbid0IGJlIGNoYW5nZWQgaW4gQ2xvdWRGb3JtYXRpb24gYW55d2F5LCB0aGV5J3JlIGltbXV0YWJsZSlcbiAgaWYgKGNoYW5nZS5uZXdWYWx1ZS5UeXBlID09PSAnQVdTOjpMYW1iZGE6OlZlcnNpb24nKSB7XG4gICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuSVJSRUxFVkFOVDtcbiAgfVxuXG4gIC8vIHdlIGhhbmRsZSBBbGlhc2VzIHNwZWNpYWxseSB0b29cbiAgaWYgKGNoYW5nZS5uZXdWYWx1ZS5UeXBlID09PSAnQVdTOjpMYW1iZGE6OkFsaWFzJykge1xuICAgIHJldHVybiBjaGVja0FsaWFzSGFzVmVyc2lvbk9ubHlDaGFuZ2UoY2hhbmdlKTtcbiAgfVxuXG4gIGNvbnN0IGxhbWJkYUNvZGVDaGFuZ2UgPSBhd2FpdCBpc0xhbWJkYUZ1bmN0aW9uQ29kZU9ubHlDaGFuZ2UoY2hhbmdlLCBldmFsdWF0ZUNmblRlbXBsYXRlKTtcbiAgaWYgKHR5cGVvZiBsYW1iZGFDb2RlQ2hhbmdlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBsYW1iZGFDb2RlQ2hhbmdlO1xuICB9XG5cbiAgY29uc3QgZnVuY3Rpb25OYW1lID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5lc3RhYmxpc2hSZXNvdXJjZVBoeXNpY2FsTmFtZShsb2dpY2FsSWQsIGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzPy5GdW5jdGlvbk5hbWUpO1xuICBpZiAoIWZ1bmN0aW9uTmFtZSkge1xuICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgfVxuXG4gIGNvbnN0IGZ1bmN0aW9uQXJuID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oe1xuICAgICdGbjo6U3ViJzogJ2Fybjoke0FXUzo6UGFydGl0aW9ufTpsYW1iZGE6JHtBV1M6OlJlZ2lvbn06JHtBV1M6OkFjY291bnRJZH06ZnVuY3Rpb246JyArIGZ1bmN0aW9uTmFtZSxcbiAgfSk7XG5cbiAgLy8gZmluZCBhbGwgTGFtYmRhIFZlcnNpb25zIHRoYXQgcmVmZXJlbmNlIHRoaXMgRnVuY3Rpb25cbiAgY29uc3QgdmVyc2lvbnNSZWZlcmVuY2luZ0Z1bmN0aW9uID0gZXZhbHVhdGVDZm5UZW1wbGF0ZS5maW5kUmVmZXJlbmNlc1RvKGxvZ2ljYWxJZClcbiAgICAuZmlsdGVyKHIgPT4gci5UeXBlID09PSAnQVdTOjpMYW1iZGE6OlZlcnNpb24nKTtcbiAgLy8gZmluZCBhbGwgTGFtYmRhIEFsaWFzZXMgdGhhdCByZWZlcmVuY2UgdGhlIGFib3ZlIFZlcnNpb25zXG4gIGNvbnN0IGFsaWFzZXNSZWZlcmVuY2luZ1ZlcnNpb25zID0gZmxhdE1hcCh2ZXJzaW9uc1JlZmVyZW5jaW5nRnVuY3Rpb24sIHYgPT5cbiAgICBldmFsdWF0ZUNmblRlbXBsYXRlLmZpbmRSZWZlcmVuY2VzVG8odi5Mb2dpY2FsSWQpKTtcbiAgY29uc3QgYWxpYXNlc05hbWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoYWxpYXNlc1JlZmVyZW5jaW5nVmVyc2lvbnMubWFwKGEgPT5cbiAgICBldmFsdWF0ZUNmblRlbXBsYXRlLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbihhLlByb3BlcnRpZXM/Lk5hbWUpKSk7XG5cbiAgcmV0dXJuIG5ldyBMYW1iZGFGdW5jdGlvbkhvdHN3YXBPcGVyYXRpb24oe1xuICAgIHBoeXNpY2FsTmFtZTogZnVuY3Rpb25OYW1lLFxuICAgIGZ1bmN0aW9uQXJuOiBmdW5jdGlvbkFybixcbiAgICByZXNvdXJjZTogbGFtYmRhQ29kZUNoYW5nZSxcbiAgICBwdWJsaXNoVmVyc2lvbjogdmVyc2lvbnNSZWZlcmVuY2luZ0Z1bmN0aW9uLmxlbmd0aCA+IDAsXG4gICAgYWxpYXNlc05hbWVzLFxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zICBpcyBhIGdpdmVuIEFsaWFzIGNoYW5nZSBpcyBvbmx5IGluIHRoZSAnRnVuY3Rpb25WZXJzaW9uJyBwcm9wZXJ0eSxcbiAqIGFuZCBgQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlRgIGlzIHRoZSBjaGFuZ2UgaXMgZm9yIGFueSBvdGhlciBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gY2hlY2tBbGlhc0hhc1ZlcnNpb25Pbmx5Q2hhbmdlKGNoYW5nZTogSG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlKTogQ2hhbmdlSG90c3dhcFJlc3VsdCB7XG4gIGZvciAoY29uc3QgdXBkYXRlZFByb3BOYW1lIGluIGNoYW5nZS5wcm9wZXJ0eVVwZGF0ZXMpIHtcbiAgICBpZiAodXBkYXRlZFByb3BOYW1lICE9PSAnRnVuY3Rpb25WZXJzaW9uJykge1xuICAgICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICAgIH1cbiAgfVxuICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5JUlJFTEVWQU5UO1xufVxuXG4vKipcbiAqIFJldHVybnMgYENoYW5nZUhvdHN3YXBJbXBhY3QuSVJSRUxFVkFOVGAgaWYgdGhlIGNoYW5nZSBpcyBub3QgZm9yIGEgQVdTOjpMYW1iZGE6OkZ1bmN0aW9uLFxuICogYnV0IGRvZXNuJ3QgcHJldmVudCBzaG9ydC1jaXJjdWl0aW5nXG4gKiAobGlrZSBhIGNoYW5nZSB0byBDREtNZXRhZGF0YSByZXNvdXJjZSksXG4gKiBgQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlRgIGlmIHRoZSBjaGFuZ2UgaXMgdG8gYSBBV1M6OkxhbWJkYTo6RnVuY3Rpb24sXG4gKiBidXQgbm90IG9ubHkgdG8gaXRzIENvZGUgcHJvcGVydHksXG4gKiBvciBhIExhbWJkYUZ1bmN0aW9uQ29kZSBpZiB0aGUgY2hhbmdlIGlzIHRvIGEgQVdTOjpMYW1iZGE6OkZ1bmN0aW9uLFxuICogYW5kIG9ubHkgYWZmZWN0cyBpdHMgQ29kZSBwcm9wZXJ0eS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaXNMYW1iZGFGdW5jdGlvbkNvZGVPbmx5Q2hhbmdlKFxuICBjaGFuZ2U6IEhvdHN3YXBwYWJsZUNoYW5nZUNhbmRpZGF0ZSwgZXZhbHVhdGVDZm5UZW1wbGF0ZTogRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlLFxuKTogUHJvbWlzZTxMYW1iZGFGdW5jdGlvbkNoYW5nZSB8IENoYW5nZUhvdHN3YXBJbXBhY3Q+IHtcbiAgY29uc3QgbmV3UmVzb3VyY2VUeXBlID0gY2hhbmdlLm5ld1ZhbHVlLlR5cGU7XG4gIGlmIChuZXdSZXNvdXJjZVR5cGUgIT09ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICB9XG5cbiAgLypcbiAgICogQXQgZmlyc3QgZ2xhbmNlLCB3ZSB3b3VsZCB3YW50IHRvIGluaXRpYWxpemUgdGhlc2UgdXNpbmcgdGhlIFwicHJldmlvdXNcIiB2YWx1ZXMgKGNoYW5nZS5vbGRWYWx1ZSksXG4gICAqIGluIGNhc2Ugb25seSBvbmUgb2YgdGhlbSBjaGFuZ2VkLCBsaWtlIHRoZSBrZXksIGFuZCB0aGUgQnVja2V0IHN0YXllZCB0aGUgc2FtZS5cbiAgICogSG93ZXZlciwgdGhhdCBhY3R1YWxseSBmYWlscyBmb3Igb2xkLXN0eWxlIHN5bnRoZXNpcywgd2hpY2ggdXNlcyBDRk4gUGFyYW1ldGVycyFcbiAgICogQmVjYXVzZSB0aGUgbmFtZXMgb2YgdGhlIFBhcmFtZXRlcnMgZGVwZW5kIG9uIHRoZSBoYXNoIG9mIHRoZSBBc3NldCxcbiAgICogdGhlIFBhcmFtZXRlcnMgdXNlZCBmb3IgdGhlIFwib2xkXCIgdmFsdWVzIG5vIGxvbmdlciBleGlzdCBpbiBgYXNzZXRQYXJhbXNgIGF0IHRoaXMgcG9pbnQsXG4gICAqIHdoaWNoIG1lYW5zIHdlIGRvbid0IGhhdmUgdGhlIGNvcnJlY3QgdmFsdWVzIGF2YWlsYWJsZSB0byBldmFsdWF0ZSB0aGUgQ0ZOIGV4cHJlc3Npb24gd2l0aC5cbiAgICogRm9ydHVuYXRlbHksIHRoZSBkaWZmIHdpbGwgYWx3YXlzIGluY2x1ZGUgYm90aCB0aGUgczNCdWNrZXQgYW5kIHMzS2V5IHBhcnRzIG9mIHRoZSBMYW1iZGEncyBDb2RlIHByb3BlcnR5LFxuICAgKiBldmVuIGlmIG9ubHkgb25lIG9mIHRoZW0gd2FzIGFjdHVhbGx5IGNoYW5nZWQsXG4gICAqIHdoaWNoIG1lYW5zIHdlIGRvbid0IG5lZWQgdGhlIFwib2xkXCIgdmFsdWVzIGF0IGFsbCwgYW5kIHdlIGNhbiBzYWZlbHkgaW5pdGlhbGl6ZSB0aGVzZSB3aXRoIGp1c3QgYCcnYC5cbiAgICovXG4gIGNvbnN0IHByb3BlcnR5VXBkYXRlcyA9IGNoYW5nZS5wcm9wZXJ0eVVwZGF0ZXM7XG4gIGxldCBjb2RlOiBMYW1iZGFGdW5jdGlvbkNvZGUgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGxldCB0YWdzOiBMYW1iZGFGdW5jdGlvblRhZ3MgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGxldCBkZXNjcmlwdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBsZXQgZW52aXJvbm1lbnQ6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgZm9yIChjb25zdCB1cGRhdGVkUHJvcE5hbWUgaW4gcHJvcGVydHlVcGRhdGVzKSB7XG4gICAgY29uc3QgdXBkYXRlZFByb3AgPSBwcm9wZXJ0eVVwZGF0ZXNbdXBkYXRlZFByb3BOYW1lXTtcblxuICAgIHN3aXRjaCAodXBkYXRlZFByb3BOYW1lKSB7XG4gICAgICBjYXNlICdDb2RlJzpcbiAgICAgICAgbGV0IGZvdW5kQ29kZURpZmZlcmVuY2UgPSBmYWxzZTtcbiAgICAgICAgbGV0IHMzQnVja2V0LCBzM0tleSwgaW1hZ2VVcmksIGZ1bmN0aW9uQ29kZVppcDtcblxuICAgICAgICBmb3IgKGNvbnN0IG5ld1Byb3BOYW1lIGluIHVwZGF0ZWRQcm9wLm5ld1ZhbHVlKSB7XG4gICAgICAgICAgc3dpdGNoIChuZXdQcm9wTmFtZSkge1xuICAgICAgICAgICAgY2FzZSAnUzNCdWNrZXQnOlxuICAgICAgICAgICAgICBmb3VuZENvZGVEaWZmZXJlbmNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgczNCdWNrZXQgPSBhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmV2YWx1YXRlQ2ZuRXhwcmVzc2lvbih1cGRhdGVkUHJvcC5uZXdWYWx1ZVtuZXdQcm9wTmFtZV0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ1MzS2V5JzpcbiAgICAgICAgICAgICAgZm91bmRDb2RlRGlmZmVyZW5jZSA9IHRydWU7XG4gICAgICAgICAgICAgIHMzS2V5ID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24odXBkYXRlZFByb3AubmV3VmFsdWVbbmV3UHJvcE5hbWVdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdJbWFnZVVyaSc6XG4gICAgICAgICAgICAgIGZvdW5kQ29kZURpZmZlcmVuY2UgPSB0cnVlO1xuICAgICAgICAgICAgICBpbWFnZVVyaSA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHVwZGF0ZWRQcm9wLm5ld1ZhbHVlW25ld1Byb3BOYW1lXSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnWmlwRmlsZSc6XG4gICAgICAgICAgICAgIGZvdW5kQ29kZURpZmZlcmVuY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAvLyBXZSBtdXN0IGNyZWF0ZSBhIHppcCBwYWNrYWdlIGNvbnRhaW5pbmcgYSBmaWxlIHdpdGggdGhlIGlubGluZSBjb2RlXG4gICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uQ29kZSA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHVwZGF0ZWRQcm9wLm5ld1ZhbHVlW25ld1Byb3BOYW1lXSk7XG4gICAgICAgICAgICAgIGNvbnN0IGZ1bmN0aW9uUnVudGltZSA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzPy5SdW50aW1lKTtcbiAgICAgICAgICAgICAgaWYgKCFmdW5jdGlvblJ1bnRpbWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gZmlsZSBleHRlbnNpb24gbXVzdCBiZSBjaG9zZW4gZGVwZW5kaW5nIG9uIHRoZSBydW50aW1lXG4gICAgICAgICAgICAgIGNvbnN0IGNvZGVGaWxlRXh0ID0gZGV0ZXJtaW5lQ29kZUZpbGVFeHRGcm9tUnVudGltZShmdW5jdGlvblJ1bnRpbWUpO1xuICAgICAgICAgICAgICBmdW5jdGlvbkNvZGVaaXAgPSBhd2FpdCB6aXBTdHJpbmcoYGluZGV4LiR7Y29kZUZpbGVFeHR9YCwgZnVuY3Rpb25Db2RlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChmb3VuZENvZGVEaWZmZXJlbmNlKSB7XG4gICAgICAgICAgY29kZSA9IHtcbiAgICAgICAgICAgIHMzQnVja2V0LFxuICAgICAgICAgICAgczNLZXksXG4gICAgICAgICAgICBpbWFnZVVyaSxcbiAgICAgICAgICAgIGZ1bmN0aW9uQ29kZVppcCxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnVGFncyc6XG4gICAgICAgIC8qXG4gICAgICAgICAqIFRhZyB1cGRhdGVzIGFyZSBhIGJpdCBvZGQ7IHRoZXkgbWFuaWZlc3QgYXMgdHdvIGxpc3RzLCBhcmUgZmxhZ2dlZCBvbmx5IGFzXG4gICAgICAgICAqIGBpc0RpZmZlcmVudGAsIGFuZCB3ZSBoYXZlIHRvIHJlY29uY2lsZSB0aGVtLlxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3QgdGFnVXBkYXRlczogeyBbdGFnOiBzdHJpbmddOiBzdHJpbmcgfCBUYWdEZWxldGlvbiB9ID0ge307XG4gICAgICAgIGlmICh1cGRhdGVkUHJvcD8uaXNEaWZmZXJlbnQpIHtcbiAgICAgICAgICB1cGRhdGVkUHJvcC5uZXdWYWx1ZS5mb3JFYWNoKCh0YWc6IENmbkRpZmZUYWdWYWx1ZSkgPT4ge1xuICAgICAgICAgICAgdGFnVXBkYXRlc1t0YWcuS2V5XSA9IHRhZy5WYWx1ZTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHVwZGF0ZWRQcm9wLm9sZFZhbHVlLmZvckVhY2goKHRhZzogQ2ZuRGlmZlRhZ1ZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGFnVXBkYXRlc1t0YWcuS2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHRhZ1VwZGF0ZXNbdGFnLktleV0gPSBUYWdEZWxldGlvbi5ERUxFVEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0YWdzID0geyB0YWdVcGRhdGVzIH07XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdEZXNjcmlwdGlvbic6XG4gICAgICAgIGRlc2NyaXB0aW9uID0gdXBkYXRlZFByb3AubmV3VmFsdWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnRW52aXJvbm1lbnQnOlxuICAgICAgICBlbnZpcm9ubWVudCA9IHVwZGF0ZWRQcm9wLm5ld1ZhbHVlO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjb25maWd1cmF0aW9ucyA9IGRlc2NyaXB0aW9uIHx8IGVudmlyb25tZW50ID8geyBkZXNjcmlwdGlvbiwgZW52aXJvbm1lbnQgfSA6IHVuZGVmaW5lZDtcbiAgcmV0dXJuIGNvZGUgfHwgdGFncyB8fCBjb25maWd1cmF0aW9ucyA/IHsgY29kZSwgdGFncywgY29uZmlndXJhdGlvbnMgfSA6IENoYW5nZUhvdHN3YXBJbXBhY3QuSVJSRUxFVkFOVDtcbn1cblxuaW50ZXJmYWNlIENmbkRpZmZUYWdWYWx1ZSB7XG4gIHJlYWRvbmx5IEtleTogc3RyaW5nO1xuICByZWFkb25seSBWYWx1ZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgTGFtYmRhRnVuY3Rpb25Db2RlIHtcbiAgcmVhZG9ubHkgczNCdWNrZXQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHMzS2V5Pzogc3RyaW5nO1xuICByZWFkb25seSBpbWFnZVVyaT86IHN0cmluZztcbiAgcmVhZG9ubHkgZnVuY3Rpb25Db2RlWmlwPzogQnVmZmVyO1xufVxuXG5lbnVtIFRhZ0RlbGV0aW9uIHtcbiAgREVMRVRFID0gLTEsXG59XG5cbmludGVyZmFjZSBMYW1iZGFGdW5jdGlvblRhZ3Mge1xuICByZWFkb25seSB0YWdVcGRhdGVzOiB7IFt0YWcgOiBzdHJpbmddIDogc3RyaW5nIHwgVGFnRGVsZXRpb24gfTtcbn1cblxuaW50ZXJmYWNlIExhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnMge1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5pbnRlcmZhY2UgTGFtYmRhRnVuY3Rpb25DaGFuZ2Uge1xuICByZWFkb25seSBjb2RlPzogTGFtYmRhRnVuY3Rpb25Db2RlO1xuICByZWFkb25seSB0YWdzPzogTGFtYmRhRnVuY3Rpb25UYWdzO1xuICByZWFkb25seSBjb25maWd1cmF0aW9ucz86IExhbWJkYUZ1bmN0aW9uQ29uZmlndXJhdGlvbnM7XG59XG5cbmludGVyZmFjZSBMYW1iZGFGdW5jdGlvblJlc291cmNlIHtcbiAgcmVhZG9ubHkgcGh5c2ljYWxOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZ1bmN0aW9uQXJuOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc291cmNlOiBMYW1iZGFGdW5jdGlvbkNoYW5nZTtcbiAgcmVhZG9ubHkgcHVibGlzaFZlcnNpb246IGJvb2xlYW47XG4gIHJlYWRvbmx5IGFsaWFzZXNOYW1lczogc3RyaW5nW107XG59XG5cbmNsYXNzIExhbWJkYUZ1bmN0aW9uSG90c3dhcE9wZXJhdGlvbiBpbXBsZW1lbnRzIEhvdHN3YXBPcGVyYXRpb24ge1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZSA9ICdsYW1iZGEtZnVuY3Rpb24nO1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2VOYW1lczogc3RyaW5nW107XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBsYW1iZGFGdW5jdGlvblJlc291cmNlOiBMYW1iZGFGdW5jdGlvblJlc291cmNlKSB7XG4gICAgdGhpcy5yZXNvdXJjZU5hbWVzID0gW1xuICAgICAgYExhbWJkYSBGdW5jdGlvbiAnJHtsYW1iZGFGdW5jdGlvblJlc291cmNlLnBoeXNpY2FsTmFtZX0nYCxcbiAgICAgIC8vIGFkZCBWZXJzaW9uIGhlcmUgaWYgd2UncmUgcHVibGlzaGluZyBhIG5ldyBvbmVcbiAgICAgIC4uLihsYW1iZGFGdW5jdGlvblJlc291cmNlLnB1Ymxpc2hWZXJzaW9uID8gW2BMYW1iZGEgVmVyc2lvbiBmb3IgRnVuY3Rpb24gJyR7bGFtYmRhRnVuY3Rpb25SZXNvdXJjZS5waHlzaWNhbE5hbWV9J2BdIDogW10pLFxuICAgICAgLy8gYWRkIGFueSBBbGlhc2VzIHRoYXQgd2UgYXJlIGhvdHN3YXBwaW5nIGhlcmVcbiAgICAgIC4uLmxhbWJkYUZ1bmN0aW9uUmVzb3VyY2UuYWxpYXNlc05hbWVzLm1hcChhbGlhcyA9PiBgTGFtYmRhIEFsaWFzICcke2FsaWFzfScgZm9yIEZ1bmN0aW9uICcke2xhbWJkYUZ1bmN0aW9uUmVzb3VyY2UucGh5c2ljYWxOYW1lfSdgKSxcbiAgICBdO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFwcGx5KHNkazogSVNESyk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgbGFtYmRhID0gc2RrLmxhbWJkYSgpO1xuICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5sYW1iZGFGdW5jdGlvblJlc291cmNlLnJlc291cmNlO1xuICAgIGNvbnN0IG9wZXJhdGlvbnM6IFByb21pc2U8YW55PltdID0gW107XG5cbiAgICBpZiAocmVzb3VyY2UuY29kZSAhPT0gdW5kZWZpbmVkIHx8IHJlc291cmNlLmNvbmZpZ3VyYXRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChyZXNvdXJjZS5jb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29uc3QgdXBkYXRlRnVuY3Rpb25Db2RlUmVzcG9uc2UgPSBhd2FpdCBsYW1iZGEudXBkYXRlRnVuY3Rpb25Db2RlKHtcbiAgICAgICAgICBGdW5jdGlvbk5hbWU6IHRoaXMubGFtYmRhRnVuY3Rpb25SZXNvdXJjZS5waHlzaWNhbE5hbWUsXG4gICAgICAgICAgUzNCdWNrZXQ6IHJlc291cmNlLmNvZGUuczNCdWNrZXQsXG4gICAgICAgICAgUzNLZXk6IHJlc291cmNlLmNvZGUuczNLZXksXG4gICAgICAgICAgSW1hZ2VVcmk6IHJlc291cmNlLmNvZGUuaW1hZ2VVcmksXG4gICAgICAgICAgWmlwRmlsZTogcmVzb3VyY2UuY29kZS5mdW5jdGlvbkNvZGVaaXAsXG4gICAgICAgIH0pLnByb21pc2UoKTtcblxuICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JMYW1iZGFzUHJvcGVydGllc1VwZGF0ZVRvRmluaXNoKHVwZGF0ZUZ1bmN0aW9uQ29kZVJlc3BvbnNlLCBsYW1iZGEpO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzb3VyY2UuY29uZmlndXJhdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB1cGRhdGVSZXF1ZXN0OiBBV1MuTGFtYmRhLlVwZGF0ZUZ1bmN0aW9uQ29uZmlndXJhdGlvblJlcXVlc3QgPSB7XG4gICAgICAgICAgRnVuY3Rpb25OYW1lOiB0aGlzLmxhbWJkYUZ1bmN0aW9uUmVzb3VyY2UucGh5c2ljYWxOYW1lLFxuICAgICAgICB9O1xuICAgICAgICBpZiAocmVzb3VyY2UuY29uZmlndXJhdGlvbnMuZGVzY3JpcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHVwZGF0ZVJlcXVlc3QuRGVzY3JpcHRpb24gPSByZXNvdXJjZS5jb25maWd1cmF0aW9ucy5kZXNjcmlwdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzb3VyY2UuY29uZmlndXJhdGlvbnMuZW52aXJvbm1lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHVwZGF0ZVJlcXVlc3QuRW52aXJvbm1lbnQgPSByZXNvdXJjZS5jb25maWd1cmF0aW9ucy5lbnZpcm9ubWVudDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cGRhdGVGdW5jdGlvbkNvZGVSZXNwb25zZSA9IGF3YWl0IGxhbWJkYS51cGRhdGVGdW5jdGlvbkNvbmZpZ3VyYXRpb24odXBkYXRlUmVxdWVzdCkucHJvbWlzZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JMYW1iZGFzUHJvcGVydGllc1VwZGF0ZVRvRmluaXNoKHVwZGF0ZUZ1bmN0aW9uQ29kZVJlc3BvbnNlLCBsYW1iZGEpO1xuICAgICAgfVxuXG4gICAgICAvLyBvbmx5IGlmIHRoZSBjb2RlIGNoYW5nZWQgaXMgdGhlcmUgYW55IHBvaW50IGluIHB1Ymxpc2hpbmcgYSBuZXcgVmVyc2lvblxuICAgICAgaWYgKHRoaXMubGFtYmRhRnVuY3Rpb25SZXNvdXJjZS5wdWJsaXNoVmVyc2lvbikge1xuICAgICAgICBjb25zdCBwdWJsaXNoVmVyc2lvblByb21pc2UgPSBsYW1iZGEucHVibGlzaFZlcnNpb24oe1xuICAgICAgICAgIEZ1bmN0aW9uTmFtZTogdGhpcy5sYW1iZGFGdW5jdGlvblJlc291cmNlLnBoeXNpY2FsTmFtZSxcbiAgICAgICAgfSkucHJvbWlzZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLmxhbWJkYUZ1bmN0aW9uUmVzb3VyY2UuYWxpYXNlc05hbWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBWZXJzaW9uIHRvIGZpbmlzaCBwdWJsaXNoaW5nXG4gICAgICAgICAgY29uc3QgdmVyc2lvblVwZGF0ZSA9IGF3YWl0IHB1Ymxpc2hWZXJzaW9uUHJvbWlzZTtcblxuICAgICAgICAgIGZvciAoY29uc3QgYWxpYXMgb2YgdGhpcy5sYW1iZGFGdW5jdGlvblJlc291cmNlLmFsaWFzZXNOYW1lcykge1xuICAgICAgICAgICAgb3BlcmF0aW9ucy5wdXNoKGxhbWJkYS51cGRhdGVBbGlhcyh7XG4gICAgICAgICAgICAgIEZ1bmN0aW9uTmFtZTogdGhpcy5sYW1iZGFGdW5jdGlvblJlc291cmNlLnBoeXNpY2FsTmFtZSxcbiAgICAgICAgICAgICAgTmFtZTogYWxpYXMsXG4gICAgICAgICAgICAgIEZ1bmN0aW9uVmVyc2lvbjogdmVyc2lvblVwZGF0ZS5WZXJzaW9uLFxuICAgICAgICAgICAgfSkucHJvbWlzZSgpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3BlcmF0aW9ucy5wdXNoKHB1Ymxpc2hWZXJzaW9uUHJvbWlzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVzb3VyY2UudGFncyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB0YWdzVG9EZWxldGU6IHN0cmluZ1tdID0gT2JqZWN0LmVudHJpZXMocmVzb3VyY2UudGFncy50YWdVcGRhdGVzKVxuICAgICAgICAuZmlsdGVyKChbX2tleSwgdmFsXSkgPT4gdmFsID09PSBUYWdEZWxldGlvbi5ERUxFVEUpXG4gICAgICAgIC5tYXAoKFtrZXksIF92YWxdKSA9PiBrZXkpO1xuXG4gICAgICBjb25zdCB0YWdzVG9TZXQ6IHsgW3RhZzogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJlc291cmNlLnRhZ3MhLnRhZ1VwZGF0ZXMpXG4gICAgICAgIC5maWx0ZXIoKFtfa2V5LCB2YWxdKSA9PiB2YWwgIT09IFRhZ0RlbGV0aW9uLkRFTEVURSlcbiAgICAgICAgLmZvckVhY2goKFt0YWdOYW1lLCB0YWdWYWx1ZV0pID0+IHtcbiAgICAgICAgICB0YWdzVG9TZXRbdGFnTmFtZV0gPSB0YWdWYWx1ZSBhcyBzdHJpbmc7XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAodGFnc1RvRGVsZXRlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgb3BlcmF0aW9ucy5wdXNoKGxhbWJkYS51bnRhZ1Jlc291cmNlKHtcbiAgICAgICAgICBSZXNvdXJjZTogdGhpcy5sYW1iZGFGdW5jdGlvblJlc291cmNlLmZ1bmN0aW9uQXJuLFxuICAgICAgICAgIFRhZ0tleXM6IHRhZ3NUb0RlbGV0ZSxcbiAgICAgICAgfSkucHJvbWlzZSgpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKE9iamVjdC5rZXlzKHRhZ3NUb1NldCkubGVuZ3RoID4gMCkge1xuICAgICAgICBvcGVyYXRpb25zLnB1c2gobGFtYmRhLnRhZ1Jlc291cmNlKHtcbiAgICAgICAgICBSZXNvdXJjZTogdGhpcy5sYW1iZGFGdW5jdGlvblJlc291cmNlLmZ1bmN0aW9uQXJuLFxuICAgICAgICAgIFRhZ3M6IHRhZ3NUb1NldCxcbiAgICAgICAgfSkucHJvbWlzZSgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBydW4gYWxsIG9mIG91ciB1cGRhdGVzIGluIHBhcmFsbGVsXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKG9wZXJhdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFmdGVyIGEgTGFtYmRhIEZ1bmN0aW9uIGlzIHVwZGF0ZWQsIGl0IGNhbm5vdCBiZSB1cGRhdGVkIGFnYWluIHVudGlsIHRoZVxuICAgKiBgU3RhdGU9QWN0aXZlYCBhbmQgdGhlIGBMYXN0VXBkYXRlU3RhdHVzPVN1Y2Nlc3NmdWxgLlxuICAgKlxuICAgKiBEZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIExhbWJkYSBGdW5jdGlvbiB0aGlzIGNvdWxkIGhhcHBlbiByZWxhdGl2ZWx5IHF1aWNrbHlcbiAgICogb3IgdmVyeSBzbG93bHkuIEZvciBleGFtcGxlLCBaaXAgYmFzZWQgZnVuY3Rpb25zIF9ub3RfIGluIGEgVlBDIGNhbiB0YWtlIH4xIHNlY29uZCB3aGVyZWFzIFZQQ1xuICAgKiBvciBDb250YWluZXIgZnVuY3Rpb25zIGNhbiB0YWtlIH4yNSBzZWNvbmRzIChhbmQgJ2lkbGUnIFZQQyBmdW5jdGlvbnMgY2FuIHRha2UgbWludXRlcykuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHdhaXRGb3JMYW1iZGFzUHJvcGVydGllc1VwZGF0ZVRvRmluaXNoKFxuICAgIGN1cnJlbnRGdW5jdGlvbkNvbmZpZ3VyYXRpb246IEFXUy5MYW1iZGEuRnVuY3Rpb25Db25maWd1cmF0aW9uLCBsYW1iZGE6IEFXUy5MYW1iZGEsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGZ1bmN0aW9uSXNJblZwY09yVXNlc0RvY2tlckZvckNvZGUgPSBjdXJyZW50RnVuY3Rpb25Db25maWd1cmF0aW9uLlZwY0NvbmZpZz8uVnBjSWQgfHxcbiAgICAgICAgY3VycmVudEZ1bmN0aW9uQ29uZmlndXJhdGlvbi5QYWNrYWdlVHlwZSA9PT0gJ0ltYWdlJztcblxuICAgIC8vIGlmIHRoZSBmdW5jdGlvbiBpcyBkZXBsb3llZCBpbiBhIFZQQyBvciBpZiBpdCBpcyBhIGNvbnRhaW5lciBpbWFnZSBmdW5jdGlvblxuICAgIC8vIHRoZW4gdGhlIHVwZGF0ZSB3aWxsIHRha2UgbXVjaCBsb25nZXIgYW5kIHdlIGNhbiB3YWl0IGxvbmdlciBiZXR3ZWVuIGNoZWNrc1xuICAgIC8vIG90aGVyd2lzZSwgdGhlIHVwZGF0ZSB3aWxsIGJlIHF1aWNrLCBzbyBhIDEtc2Vjb25kIGRlbGF5IGlzIGZpbmVcbiAgICBjb25zdCBkZWxheVNlY29uZHMgPSBmdW5jdGlvbklzSW5WcGNPclVzZXNEb2NrZXJGb3JDb2RlID8gNSA6IDE7XG5cbiAgICAvLyBjb25maWd1cmUgYSBjdXN0b20gd2FpdGVyIHRvIHdhaXQgZm9yIHRoZSBmdW5jdGlvbiB1cGRhdGUgdG8gY29tcGxldGVcbiAgICAobGFtYmRhIGFzIGFueSkuYXBpLndhaXRlcnMudXBkYXRlRnVuY3Rpb25Qcm9wZXJ0aWVzVG9GaW5pc2ggPSB7XG4gICAgICBuYW1lOiAnVXBkYXRlRnVuY3Rpb25Qcm9wZXJ0aWVzVG9GaW5pc2gnLFxuICAgICAgb3BlcmF0aW9uOiAnZ2V0RnVuY3Rpb24nLFxuICAgICAgLy8gZXF1YXRlcyB0byAxIG1pbnV0ZSBmb3IgemlwIGZ1bmN0aW9uIG5vdCBpbiBhIFZQQyBhbmRcbiAgICAgIC8vIDUgbWludXRlcyBmb3IgY29udGFpbmVyIGZ1bmN0aW9ucyBvciBmdW5jdGlvbiBpbiBhIFZQQ1xuICAgICAgbWF4QXR0ZW1wdHM6IDYwLFxuICAgICAgZGVsYXk6IGRlbGF5U2Vjb25kcyxcbiAgICAgIGFjY2VwdG9yczogW1xuICAgICAgICB7XG4gICAgICAgICAgbWF0Y2hlcjogJ3BhdGgnLFxuICAgICAgICAgIGFyZ3VtZW50OiBcIkNvbmZpZ3VyYXRpb24uTGFzdFVwZGF0ZVN0YXR1cyA9PSAnU3VjY2Vzc2Z1bCcgJiYgQ29uZmlndXJhdGlvbi5TdGF0ZSA9PSAnQWN0aXZlJ1wiLFxuICAgICAgICAgIGV4cGVjdGVkOiB0cnVlLFxuICAgICAgICAgIHN0YXRlOiAnc3VjY2VzcycsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBtYXRjaGVyOiAncGF0aCcsXG4gICAgICAgICAgYXJndW1lbnQ6ICdDb25maWd1cmF0aW9uLkxhc3RVcGRhdGVTdGF0dXMnLFxuICAgICAgICAgIGV4cGVjdGVkOiAnRmFpbGVkJyxcbiAgICAgICAgICBzdGF0ZTogJ2ZhaWx1cmUnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuXG4gICAgY29uc3QgdXBkYXRlRnVuY3Rpb25Qcm9wZXJ0aWVzV2FpdGVyID0gbmV3IChBV1MgYXMgYW55KS5SZXNvdXJjZVdhaXRlcihsYW1iZGEsICd1cGRhdGVGdW5jdGlvblByb3BlcnRpZXNUb0ZpbmlzaCcpO1xuICAgIGF3YWl0IHVwZGF0ZUZ1bmN0aW9uUHJvcGVydGllc1dhaXRlci53YWl0KHtcbiAgICAgIEZ1bmN0aW9uTmFtZTogdGhpcy5sYW1iZGFGdW5jdGlvblJlc291cmNlLnBoeXNpY2FsTmFtZSxcbiAgICB9KS5wcm9taXNlKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb21wcmVzcyBhIHN0cmluZyBhcyBhIGZpbGUsIHJldHVybmluZyBhIHByb21pc2UgZm9yIHRoZSB6aXAgYnVmZmVyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYXJjaGl2ZXJqcy9ub2RlLWFyY2hpdmVyL2lzc3Vlcy8zNDJcbiAqL1xuZnVuY3Rpb24gemlwU3RyaW5nKGZpbGVOYW1lOiBzdHJpbmcsIHJhd1N0cmluZzogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBidWZmZXJzOiBCdWZmZXJbXSA9IFtdO1xuXG4gICAgY29uc3QgY29udmVydGVyID0gbmV3IFdyaXRhYmxlKCk7XG5cbiAgICBjb252ZXJ0ZXIuX3dyaXRlID0gKGNodW5rOiBCdWZmZXIsIF86IHN0cmluZywgY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcbiAgICAgIGJ1ZmZlcnMucHVzaChjaHVuayk7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgY29udmVydGVyLm9uKCdmaW5pc2gnLCAoKSA9PiB7XG4gICAgICByZXNvbHZlKEJ1ZmZlci5jb25jYXQoYnVmZmVycykpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgYXJjaGl2ZSA9IGFyY2hpdmVyKCd6aXAnKTtcblxuICAgIGFyY2hpdmUub24oJ2Vycm9yJywgKGVycjogYW55KSA9PiB7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICB9KTtcblxuICAgIGFyY2hpdmUucGlwZShjb252ZXJ0ZXIpO1xuXG4gICAgYXJjaGl2ZS5hcHBlbmQocmF3U3RyaW5nLCB7XG4gICAgICBuYW1lOiBmaWxlTmFtZSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCcxOTgwLTAxLTAxVDAwOjAwOjAwLjAwMFonKSwgLy8gQWRkIGRhdGUgdG8gbWFrZSByZXN1bHRpbmcgemlwIGZpbGUgZGV0ZXJtaW5pc3RpY1xuICAgIH0pO1xuXG4gICAgdm9pZCBhcmNoaXZlLmZpbmFsaXplKCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldCBmaWxlIGV4dGVuc2lvbiBmcm9tIExhbWJkYSBydW50aW1lIHN0cmluZy5cbiAqIFdlIHVzZSB0aGlzIGV4dGVuc2lvbiB0byBjcmVhdGUgYSBkZXBsb3ltZW50IHBhY2thZ2UgZnJvbSBMYW1iZGEgaW5saW5lIGNvZGUuXG4gKi9cbmZ1bmN0aW9uIGRldGVybWluZUNvZGVGaWxlRXh0RnJvbVJ1bnRpbWUocnVudGltZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHJ1bnRpbWUuc3RhcnRzV2l0aCgnbm9kZScpKSB7XG4gICAgcmV0dXJuICdqcyc7XG4gIH1cbiAgaWYgKHJ1bnRpbWUuc3RhcnRzV2l0aCgncHl0aG9uJykpIHtcbiAgICByZXR1cm4gJ3B5JztcbiAgfVxuICAvLyBDdXJyZW50bHkgaW5saW5lIGNvZGUgb25seSBzdXBwb3J0cyBOb2RlLmpzIGFuZCBQeXRob24sIGlnbm9yaW5nIG90aGVyIHJ1bnRpbWVzLlxuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1sYW1iZGEtZnVuY3Rpb24tY29kZS5odG1sI2F3cy1wcm9wZXJ0aWVzLWxhbWJkYS1mdW5jdGlvbi1jb2RlLXByb3BlcnRpZXNcbiAgdGhyb3cgbmV3IENmbkV2YWx1YXRpb25FeGNlcHRpb24oYHJ1bnRpbWUgJHtydW50aW1lfSBpcyB1bnN1cHBvcnRlZCwgb25seSBub2RlLmpzIGFuZCBweXRob24gcnVudGltZXMgYXJlIGN1cnJlbnRseSBzdXBwb3J0ZWQuYCk7XG59XG4iXX0=
|
|
@@ -8,7 +8,6 @@ const common_1 = require("./common");
|
|
|
8
8
|
*/
|
|
9
9
|
exports.REQUIRED_BY_CFN = 'required-to-be-present-by-cfn';
|
|
10
10
|
async function isHotswappableS3BucketDeploymentChange(logicalId, change, evaluateCfnTemplate) {
|
|
11
|
-
var _a;
|
|
12
11
|
// In old-style synthesis, the policy used by the lambda to copy assets Ref's the assets directly,
|
|
13
12
|
// meaning that the changes made to the Policy are artifacts that can be safely ignored
|
|
14
13
|
if (change.newValue.Type === 'AWS::IAM::Policy') {
|
|
@@ -18,7 +17,7 @@ async function isHotswappableS3BucketDeploymentChange(logicalId, change, evaluat
|
|
|
18
17
|
return common_1.ChangeHotswapImpact.REQUIRES_FULL_DEPLOYMENT;
|
|
19
18
|
}
|
|
20
19
|
// note that this gives the ARN of the lambda, not the name. This is fine though, the invoke() sdk call will take either
|
|
21
|
-
const functionName = await evaluateCfnTemplate.evaluateCfnExpression(
|
|
20
|
+
const functionName = await evaluateCfnTemplate.evaluateCfnExpression(change.newValue.Properties?.ServiceToken);
|
|
22
21
|
if (!functionName) {
|
|
23
22
|
return common_1.ChangeHotswapImpact.REQUIRES_FULL_DEPLOYMENT;
|
|
24
23
|
}
|
|
@@ -53,8 +52,7 @@ class S3BucketDeploymentHotswapOperation {
|
|
|
53
52
|
}
|
|
54
53
|
}
|
|
55
54
|
async function changeIsForS3DeployCustomResourcePolicy(iamPolicyLogicalId, change, evaluateCfnTemplate) {
|
|
56
|
-
|
|
57
|
-
const roles = (_a = change.newValue.Properties) === null || _a === void 0 ? void 0 : _a.Roles;
|
|
55
|
+
const roles = change.newValue.Properties?.Roles;
|
|
58
56
|
if (!roles) {
|
|
59
57
|
return common_1.ChangeHotswapImpact.REQUIRES_FULL_DEPLOYMENT;
|
|
60
58
|
}
|
|
@@ -103,4 +101,4 @@ function stringifyObject(obj) {
|
|
|
103
101
|
}
|
|
104
102
|
return ret;
|
|
105
103
|
}
|
|
106
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMtYnVja2V0LWRlcGxveW1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiczMtYnVja2V0LWRlcGxveW1lbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHFDQUFtSDtBQUVuSDs7O0dBR0c7QUFDVSxRQUFBLGVBQWUsR0FBRywrQkFBK0IsQ0FBQztBQUV4RCxLQUFLLFVBQVUsc0NBQXNDLENBQzFELFNBQWlCLEVBQUUsTUFBbUMsRUFBRSxtQkFBbUQ7O0lBRTNHLGtHQUFrRztJQUNsRyx1RkFBdUY7SUFDdkYsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxrQkFBa0IsRUFBRTtRQUMvQyxPQUFPLHVDQUF1QyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztLQUN4RjtJQUVELElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssNkJBQTZCLEVBQUU7UUFDMUQsT0FBTyw0QkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQztLQUNyRDtJQUVELHdIQUF3SDtJQUN4SCxNQUFNLFlBQVksR0FBRyxNQUFNLG1CQUFtQixDQUFDLHFCQUFxQixPQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSwwQ0FBRSxZQUFZLENBQUMsQ0FBQztJQUMvRyxJQUFJLENBQUMsWUFBWSxFQUFFO1FBQ2pCLE9BQU8sNEJBQW1CLENBQUMsd0JBQXdCLENBQUM7S0FDckQ7SUFFRCxNQUFNLHdCQUF3QixHQUFHLE1BQU0sbUJBQW1CLENBQUMscUJBQXFCLENBQUM7UUFDL0UsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVU7UUFDN0IsWUFBWSxFQUFFLFNBQVM7S0FDeEIsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLGtDQUFrQyxDQUFDLFlBQVksRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0FBQ3hGLENBQUM7QUF6QkQsd0ZBeUJDO0FBRUQsTUFBTSxrQ0FBa0M7SUFJdEMsWUFBNkIsWUFBb0IsRUFBbUIs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QzNCLE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO0tBQ3ZCO0lBRUQsTUFBTSxHQUFHLEdBQXlCLEVBQUUsQ0FBQztJQUNyQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUN4QyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzdCO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVNESyB9IGZyb20gJy4uL2F3cy1hdXRoJztcbmltcG9ydCB7IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSB9IGZyb20gJy4uL2V2YWx1YXRlLWNsb3VkZm9ybWF0aW9uLXRlbXBsYXRlJztcbmltcG9ydCB7IENoYW5nZUhvdHN3YXBJbXBhY3QsIENoYW5nZUhvdHN3YXBSZXN1bHQsIEhvdHN3YXBPcGVyYXRpb24sIEhvdHN3YXBwYWJsZUNoYW5nZUNhbmRpZGF0ZSB9IGZyb20gJy4vY29tbW9uJztcblxuLyoqXG4gKiBUaGlzIG1lYW5zIHRoYXQgdGhlIHZhbHVlIGlzIHJlcXVpcmVkIHRvIGV4aXN0IGJ5IENsb3VkRm9ybWF0aW9uJ3MgQVBJIChvciBvdXIgUzMgQnVja2V0IERlcGxveW1lbnQgTGFtYmRhKVxuICogYnV0IHRoZSBhY3R1YWwgdmFsdWUgc3BlY2lmaWVkIGlzIGlycmVsZXZhbnRcbiAqL1xuZXhwb3J0IGNvbnN0IFJFUVVJUkVEX0JZX0NGTiA9ICdyZXF1aXJlZC10by1iZS1wcmVzZW50LWJ5LWNmbic7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc0hvdHN3YXBwYWJsZVMzQnVja2V0RGVwbG95bWVudENoYW5nZShcbiAgbG9naWNhbElkOiBzdHJpbmcsIGNoYW5nZTogSG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlLCBldmFsdWF0ZUNmblRlbXBsYXRlOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUsXG4pOiBQcm9taXNlPENoYW5nZUhvdHN3YXBSZXN1bHQ+IHtcbiAgLy8gSW4gb2xkLXN0eWxlIHN5bnRoZXNpcywgdGhlIHBvbGljeSB1c2VkIGJ5IHRoZSBsYW1iZGEgdG8gY29weSBhc3NldHMgUmVmJ3MgdGhlIGFzc2V0cyBkaXJlY3RseSxcbiAgLy8gbWVhbmluZyB0aGF0IHRoZSBjaGFuZ2VzIG1hZGUgdG8gdGhlIFBvbGljeSBhcmUgYXJ0aWZhY3RzIHRoYXQgY2FuIGJlIHNhZmVseSBpZ25vcmVkXG4gIGlmIChjaGFuZ2UubmV3VmFsdWUuVHlwZSA9PT0gJ0FXUzo6SUFNOjpQb2xpY3knKSB7XG4gICAgcmV0dXJuIGNoYW5nZUlzRm9yUzNEZXBsb3lDdXN0b21SZXNvdXJjZVBvbGljeShsb2dpY2FsSWQsIGNoYW5nZSwgZXZhbHVhdGVDZm5UZW1wbGF0ZSk7XG4gIH1cblxuICBpZiAoY2hhbmdlLm5ld1ZhbHVlLlR5cGUgIT09ICdDdXN0b206OkNES0J1Y2tldERlcGxveW1lbnQnKSB7XG4gICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICB9XG5cbiAgLy8gbm90ZSB0aGF0IHRoaXMgZ2l2ZXMgdGhlIEFSTiBvZiB0aGUgbGFtYmRhLCBub3QgdGhlIG5hbWUuIFRoaXMgaXMgZmluZSB0aG91Z2gsIHRoZSBpbnZva2UoKSBzZGsgY2FsbCB3aWxsIHRha2UgZWl0aGVyXG4gIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzPy5TZXJ2aWNlVG9rZW4pO1xuICBpZiAoIWZ1bmN0aW9uTmFtZSkge1xuICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgfVxuXG4gIGNvbnN0IGN1c3RvbVJlc291cmNlUHJvcGVydGllcyA9IGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHtcbiAgICAuLi5jaGFuZ2UubmV3VmFsdWUuUHJvcGVydGllcyxcbiAgICBTZXJ2aWNlVG9rZW46IHVuZGVmaW5lZCxcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBTM0J1Y2tldERlcGxveW1lbnRIb3Rzd2FwT3BlcmF0aW9uKGZ1bmN0aW9uTmFtZSwgY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzKTtcbn1cblxuY2xhc3MgUzNCdWNrZXREZXBsb3ltZW50SG90c3dhcE9wZXJhdGlvbiBpbXBsZW1lbnRzIEhvdHN3YXBPcGVyYXRpb24ge1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZSA9ICdjdXN0b20tczMtZGVwbG95bWVudCc7XG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZU5hbWVzOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGZ1bmN0aW9uTmFtZTogc3RyaW5nLCBwcml2YXRlIHJlYWRvbmx5IGN1c3RvbVJlc291cmNlUHJvcGVydGllczogYW55KSB7XG4gICAgdGhpcy5yZXNvdXJjZU5hbWVzID0gW2BDb250ZW50cyBvZiBTMyBCdWNrZXQgJyR7dGhpcy5jdXN0b21SZXNvdXJjZVByb3BlcnRpZXMuRGVzdGluYXRpb25CdWNrZXROYW1lfSdgXTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhcHBseShzZGs6IElTREspOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiBzZGsubGFtYmRhKCkuaW52b2tlKHtcbiAgICAgIEZ1bmN0aW9uTmFtZTogdGhpcy5mdW5jdGlvbk5hbWUsXG4gICAgICAvLyBMYW1iZGEgcmVmdXNlcyB0byB0YWtlIGEgZGlyZWN0IEpTT04gb2JqZWN0IGFuZCByZXF1aXJlcyBpdCB0byBiZSBzdHJpbmdpZnkoKSdkXG4gICAgICBQYXlsb2FkOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIFJlcXVlc3RUeXBlOiAnVXBkYXRlJyxcbiAgICAgICAgUmVzcG9uc2VVUkw6IFJFUVVJUkVEX0JZX0NGTixcbiAgICAgICAgUGh5c2ljYWxSZXNvdXJjZUlkOiBSRVFVSVJFRF9CWV9DRk4sXG4gICAgICAgIFN0YWNrSWQ6IFJFUVVJUkVEX0JZX0NGTixcbiAgICAgICAgUmVxdWVzdElkOiBSRVFVSVJFRF9CWV9DRk4sXG4gICAgICAgIExvZ2ljYWxSZXNvdXJjZUlkOiBSRVFVSVJFRF9CWV9DRk4sXG4gICAgICAgIFJlc291cmNlUHJvcGVydGllczogc3RyaW5naWZ5T2JqZWN0KHRoaXMuY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzKSwgLy8gSlNPTi5zdHJpbmdpZnkoKSBkb2Vzbid0IHR1cm4gdGhlIGFjdHVhbCBvYmplY3RzIHRvIHN0cmluZ3MsIGJ1dCB0aGUgbGFtYmRhIGV4cGVjdHMgc3RyaW5nc1xuICAgICAgfSksXG4gICAgfSkucHJvbWlzZSgpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNoYW5nZUlzRm9yUzNEZXBsb3lDdXN0b21SZXNvdXJjZVBvbGljeShcbiAgaWFtUG9saWN5TG9naWNhbElkOiBzdHJpbmcsIGNoYW5nZTogSG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlLCBldmFsdWF0ZUNmblRlbXBsYXRlOiBFdmFsdWF0ZUNsb3VkRm9ybWF0aW9uVGVtcGxhdGUsXG4pOiBQcm9taXNlPENoYW5nZUhvdHN3YXBSZXN1bHQ+IHtcbiAgY29uc3Qgcm9sZXMgPSBjaGFuZ2UubmV3VmFsdWUuUHJvcGVydGllcz8uUm9sZXM7XG4gIGlmICghcm9sZXMpIHtcbiAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gIH1cblxuICBmb3IgKGNvbnN0IHJvbGUgb2Ygcm9sZXMpIHtcbiAgICBjb25zdCByb2xlTG9naWNhbElkID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5maW5kTG9naWNhbElkRm9yUGh5c2ljYWxOYW1lKGF3YWl0IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZXZhbHVhdGVDZm5FeHByZXNzaW9uKHJvbGUpKTtcbiAgICBpZiAoIXJvbGVMb2dpY2FsSWQpIHtcbiAgICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgICB9XG5cbiAgICBjb25zdCByb2xlUmVmcyA9IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZmluZFJlZmVyZW5jZXNUbyhyb2xlTG9naWNhbElkKTtcbiAgICBmb3IgKGNvbnN0IHJvbGVSZWYgb2Ygcm9sZVJlZnMpIHtcbiAgICAgIGlmIChyb2xlUmVmLlR5cGUgPT09ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnN0IGxhbWJkYVJlZnMgPSBldmFsdWF0ZUNmblRlbXBsYXRlLmZpbmRSZWZlcmVuY2VzVG8ocm9sZVJlZi5Mb2dpY2FsSWQpO1xuICAgICAgICBmb3IgKGNvbnN0IGxhbWJkYVJlZiBvZiBsYW1iZGFSZWZzKSB7XG4gICAgICAgICAgLy8gSWYgUzNEZXBsb3ltZW50IC0+IExhbWJkYSAtPiBSb2xlIGFuZCBJQU06OlBvbGljeSAtPiBSb2xlLCB0aGVuIHRoaXMgSUFNOjpQb2xpY3kgY2hhbmdlIGlzIGFuXG4gICAgICAgICAgLy8gYXJ0aWZhY3Qgb2Ygb2xkLXN0eWxlIHN5bnRoZXNpc1xuICAgICAgICAgIGlmIChsYW1iZGFSZWYuVHlwZSAhPT0gJ0N1c3RvbTo6Q0RLQnVja2V0RGVwbG95bWVudCcpIHtcbiAgICAgICAgICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocm9sZVJlZi5UeXBlID09PSAnQVdTOjpJQU06OlBvbGljeScpIHtcbiAgICAgICAgaWYgKHJvbGVSZWYuTG9naWNhbElkICE9PSBpYW1Qb2xpY3lMb2dpY2FsSWQpIHtcbiAgICAgICAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5JUlJFTEVWQU5UO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlPYmplY3Qob2JqOiBhbnkpOiBhbnkge1xuICBpZiAob2JqID09IG51bGwpIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICByZXR1cm4gb2JqLm1hcChzdHJpbmdpZnlPYmplY3QpO1xuICB9XG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBvYmoudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGNvbnN0IHJldDogeyBbazogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgIHJldFtrXSA9IHN0cmluZ2lmeU9iamVjdCh2KTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuIl19
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMtYnVja2V0LWRlcGxveW1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiczMtYnVja2V0LWRlcGxveW1lbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLHFDQUFtSDtBQUVuSDs7O0dBR0c7QUFDVSxRQUFBLGVBQWUsR0FBRywrQkFBK0IsQ0FBQztBQUV4RCxLQUFLLFVBQVUsc0NBQXNDLENBQzFELFNBQWlCLEVBQUUsTUFBbUMsRUFBRSxtQkFBbUQ7SUFFM0csa0dBQWtHO0lBQ2xHLHVGQUF1RjtJQUN2RixJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLGtCQUFrQixFQUFFO1FBQy9DLE9BQU8sdUNBQXVDLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0tBQ3hGO0lBRUQsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyw2QkFBNkIsRUFBRTtRQUMxRCxPQUFPLDRCQUFtQixDQUFDLHdCQUF3QixDQUFDO0tBQ3JEO0lBRUQsd0hBQXdIO0lBQ3hILE1BQU0sWUFBWSxHQUFHLE1BQU0sbUJBQW1CLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDL0csSUFBSSxDQUFDLFlBQVksRUFBRTtRQUNqQixPQUFPLDRCQUFtQixDQUFDLHdCQUF3QixDQUFDO0tBQ3JEO0lBRUQsTUFBTSx3QkFBd0IsR0FBRyxNQUFNLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDO1FBQy9FLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVO1FBQzdCLFlBQVksRUFBRSxTQUFTO0tBQ3hCLENBQUMsQ0FBQztJQUVILE9BQU8sSUFBSSxrQ0FBa0MsQ0FBQyxZQUFZLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztBQUN4RixDQUFDO0FBekJELHdGQXlCQztBQUVELE1BQU0sa0NBQWtDO0lBSXRDLFlBQTZCLFlBQW9CLEVBQW1CLHdC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T0FBTyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7S0FDdkI7SUFFRCxNQUFNLEdBQUcsR0FBeUIsRUFBRSxDQUFDO0lBQ3JDLEtBQUssTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ3hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDN0I7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJU0RLIH0gZnJvbSAnLi4vYXdzLWF1dGgnO1xuaW1wb3J0IHsgRXZhbHVhdGVDbG91ZEZvcm1hdGlvblRlbXBsYXRlIH0gZnJvbSAnLi4vZXZhbHVhdGUtY2xvdWRmb3JtYXRpb24tdGVtcGxhdGUnO1xuaW1wb3J0IHsgQ2hhbmdlSG90c3dhcEltcGFjdCwgQ2hhbmdlSG90c3dhcFJlc3VsdCwgSG90c3dhcE9wZXJhdGlvbiwgSG90c3dhcHBhYmxlQ2hhbmdlQ2FuZGlkYXRlIH0gZnJvbSAnLi9jb21tb24nO1xuXG4vKipcbiAqIFRoaXMgbWVhbnMgdGhhdCB0aGUgdmFsdWUgaXMgcmVxdWlyZWQgdG8gZXhpc3QgYnkgQ2xvdWRGb3JtYXRpb24ncyBBUEkgKG9yIG91ciBTMyBCdWNrZXQgRGVwbG95bWVudCBMYW1iZGEpXG4gKiBidXQgdGhlIGFjdHVhbCB2YWx1ZSBzcGVjaWZpZWQgaXMgaXJyZWxldmFudFxuICovXG5leHBvcnQgY29uc3QgUkVRVUlSRURfQllfQ0ZOID0gJ3JlcXVpcmVkLXRvLWJlLXByZXNlbnQtYnktY2ZuJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzSG90c3dhcHBhYmxlUzNCdWNrZXREZXBsb3ltZW50Q2hhbmdlKFxuICBsb2dpY2FsSWQ6IHN0cmluZywgY2hhbmdlOiBIb3Rzd2FwcGFibGVDaGFuZ2VDYW5kaWRhdGUsIGV2YWx1YXRlQ2ZuVGVtcGxhdGU6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSxcbik6IFByb21pc2U8Q2hhbmdlSG90c3dhcFJlc3VsdD4ge1xuICAvLyBJbiBvbGQtc3R5bGUgc3ludGhlc2lzLCB0aGUgcG9saWN5IHVzZWQgYnkgdGhlIGxhbWJkYSB0byBjb3B5IGFzc2V0cyBSZWYncyB0aGUgYXNzZXRzIGRpcmVjdGx5LFxuICAvLyBtZWFuaW5nIHRoYXQgdGhlIGNoYW5nZXMgbWFkZSB0byB0aGUgUG9saWN5IGFyZSBhcnRpZmFjdHMgdGhhdCBjYW4gYmUgc2FmZWx5IGlnbm9yZWRcbiAgaWYgKGNoYW5nZS5uZXdWYWx1ZS5UeXBlID09PSAnQVdTOjpJQU06OlBvbGljeScpIHtcbiAgICByZXR1cm4gY2hhbmdlSXNGb3JTM0RlcGxveUN1c3RvbVJlc291cmNlUG9saWN5KGxvZ2ljYWxJZCwgY2hhbmdlLCBldmFsdWF0ZUNmblRlbXBsYXRlKTtcbiAgfVxuXG4gIGlmIChjaGFuZ2UubmV3VmFsdWUuVHlwZSAhPT0gJ0N1c3RvbTo6Q0RLQnVja2V0RGVwbG95bWVudCcpIHtcbiAgICByZXR1cm4gQ2hhbmdlSG90c3dhcEltcGFjdC5SRVFVSVJFU19GVUxMX0RFUExPWU1FTlQ7XG4gIH1cblxuICAvLyBub3RlIHRoYXQgdGhpcyBnaXZlcyB0aGUgQVJOIG9mIHRoZSBsYW1iZGEsIG5vdCB0aGUgbmFtZS4gVGhpcyBpcyBmaW5lIHRob3VnaCwgdGhlIGludm9rZSgpIHNkayBjYWxsIHdpbGwgdGFrZSBlaXRoZXJcbiAgY29uc3QgZnVuY3Rpb25OYW1lID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oY2hhbmdlLm5ld1ZhbHVlLlByb3BlcnRpZXM/LlNlcnZpY2VUb2tlbik7XG4gIGlmICghZnVuY3Rpb25OYW1lKSB7XG4gICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICB9XG5cbiAgY29uc3QgY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzID0gYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24oe1xuICAgIC4uLmNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzLFxuICAgIFNlcnZpY2VUb2tlbjogdW5kZWZpbmVkLFxuICB9KTtcblxuICByZXR1cm4gbmV3IFMzQnVja2V0RGVwbG95bWVudEhvdHN3YXBPcGVyYXRpb24oZnVuY3Rpb25OYW1lLCBjdXN0b21SZXNvdXJjZVByb3BlcnRpZXMpO1xufVxuXG5jbGFzcyBTM0J1Y2tldERlcGxveW1lbnRIb3Rzd2FwT3BlcmF0aW9uIGltcGxlbWVudHMgSG90c3dhcE9wZXJhdGlvbiB7XG4gIHB1YmxpYyByZWFkb25seSBzZXJ2aWNlID0gJ2N1c3RvbS1zMy1kZXBsb3ltZW50JztcbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlTmFtZXM6IHN0cmluZ1tdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZnVuY3Rpb25OYW1lOiBzdHJpbmcsIHByaXZhdGUgcmVhZG9ubHkgY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzOiBhbnkpIHtcbiAgICB0aGlzLnJlc291cmNlTmFtZXMgPSBbYENvbnRlbnRzIG9mIFMzIEJ1Y2tldCAnJHt0aGlzLmN1c3RvbVJlc291cmNlUHJvcGVydGllcy5EZXN0aW5hdGlvbkJ1Y2tldE5hbWV9J2BdO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFwcGx5KHNkazogSVNESyk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHNkay5sYW1iZGEoKS5pbnZva2Uoe1xuICAgICAgRnVuY3Rpb25OYW1lOiB0aGlzLmZ1bmN0aW9uTmFtZSxcbiAgICAgIC8vIExhbWJkYSByZWZ1c2VzIHRvIHRha2UgYSBkaXJlY3QgSlNPTiBvYmplY3QgYW5kIHJlcXVpcmVzIGl0IHRvIGJlIHN0cmluZ2lmeSgpJ2RcbiAgICAgIFBheWxvYWQ6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgUmVxdWVzdFR5cGU6ICdVcGRhdGUnLFxuICAgICAgICBSZXNwb25zZVVSTDogUkVRVUlSRURfQllfQ0ZOLFxuICAgICAgICBQaHlzaWNhbFJlc291cmNlSWQ6IFJFUVVJUkVEX0JZX0NGTixcbiAgICAgICAgU3RhY2tJZDogUkVRVUlSRURfQllfQ0ZOLFxuICAgICAgICBSZXF1ZXN0SWQ6IFJFUVVJUkVEX0JZX0NGTixcbiAgICAgICAgTG9naWNhbFJlc291cmNlSWQ6IFJFUVVJUkVEX0JZX0NGTixcbiAgICAgICAgUmVzb3VyY2VQcm9wZXJ0aWVzOiBzdHJpbmdpZnlPYmplY3QodGhpcy5jdXN0b21SZXNvdXJjZVByb3BlcnRpZXMpLCAvLyBKU09OLnN0cmluZ2lmeSgpIGRvZXNuJ3QgdHVybiB0aGUgYWN0dWFsIG9iamVjdHMgdG8gc3RyaW5ncywgYnV0IHRoZSBsYW1iZGEgZXhwZWN0cyBzdHJpbmdzXG4gICAgICB9KSxcbiAgICB9KS5wcm9taXNlKCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY2hhbmdlSXNGb3JTM0RlcGxveUN1c3RvbVJlc291cmNlUG9saWN5KFxuICBpYW1Qb2xpY3lMb2dpY2FsSWQ6IHN0cmluZywgY2hhbmdlOiBIb3Rzd2FwcGFibGVDaGFuZ2VDYW5kaWRhdGUsIGV2YWx1YXRlQ2ZuVGVtcGxhdGU6IEV2YWx1YXRlQ2xvdWRGb3JtYXRpb25UZW1wbGF0ZSxcbik6IFByb21pc2U8Q2hhbmdlSG90c3dhcFJlc3VsdD4ge1xuICBjb25zdCByb2xlcyA9IGNoYW5nZS5uZXdWYWx1ZS5Qcm9wZXJ0aWVzPy5Sb2xlcztcbiAgaWYgKCFyb2xlcykge1xuICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgfVxuXG4gIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlcykge1xuICAgIGNvbnN0IHJvbGVMb2dpY2FsSWQgPSBhd2FpdCBldmFsdWF0ZUNmblRlbXBsYXRlLmZpbmRMb2dpY2FsSWRGb3JQaHlzaWNhbE5hbWUoYXdhaXQgZXZhbHVhdGVDZm5UZW1wbGF0ZS5ldmFsdWF0ZUNmbkV4cHJlc3Npb24ocm9sZSkpO1xuICAgIGlmICghcm9sZUxvZ2ljYWxJZCkge1xuICAgICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICAgIH1cblxuICAgIGNvbnN0IHJvbGVSZWZzID0gZXZhbHVhdGVDZm5UZW1wbGF0ZS5maW5kUmVmZXJlbmNlc1RvKHJvbGVMb2dpY2FsSWQpO1xuICAgIGZvciAoY29uc3Qgcm9sZVJlZiBvZiByb2xlUmVmcykge1xuICAgICAgaWYgKHJvbGVSZWYuVHlwZSA9PT0gJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgbGFtYmRhUmVmcyA9IGV2YWx1YXRlQ2ZuVGVtcGxhdGUuZmluZFJlZmVyZW5jZXNUbyhyb2xlUmVmLkxvZ2ljYWxJZCk7XG4gICAgICAgIGZvciAoY29uc3QgbGFtYmRhUmVmIG9mIGxhbWJkYVJlZnMpIHtcbiAgICAgICAgICAvLyBJZiBTM0RlcGxveW1lbnQgLT4gTGFtYmRhIC0+IFJvbGUgYW5kIElBTTo6UG9saWN5IC0+IFJvbGUsIHRoZW4gdGhpcyBJQU06OlBvbGljeSBjaGFuZ2UgaXMgYW5cbiAgICAgICAgICAvLyBhcnRpZmFjdCBvZiBvbGQtc3R5bGUgc3ludGhlc2lzXG4gICAgICAgICAgaWYgKGxhbWJkYVJlZi5UeXBlICE9PSAnQ3VzdG9tOjpDREtCdWNrZXREZXBsb3ltZW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChyb2xlUmVmLlR5cGUgPT09ICdBV1M6OklBTTo6UG9saWN5Jykge1xuICAgICAgICBpZiAocm9sZVJlZi5Mb2dpY2FsSWQgIT09IGlhbVBvbGljeUxvZ2ljYWxJZCkge1xuICAgICAgICAgIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LlJFUVVJUkVTX0ZVTExfREVQTE9ZTUVOVDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIENoYW5nZUhvdHN3YXBJbXBhY3QuUkVRVUlSRVNfRlVMTF9ERVBMT1lNRU5UO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBDaGFuZ2VIb3Rzd2FwSW1wYWN0LklSUkVMRVZBTlQ7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeU9iamVjdChvYmo6IGFueSk6IGFueSB7XG4gIGlmIChvYmogPT0gbnVsbCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIHJldHVybiBvYmoubWFwKHN0cmluZ2lmeU9iamVjdCk7XG4gIH1cbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG9iai50b1N0cmluZygpO1xuICB9XG5cbiAgY29uc3QgcmV0OiB7IFtrOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhvYmopKSB7XG4gICAgcmV0W2tdID0gc3RyaW5naWZ5T2JqZWN0KHYpO1xuICB9XG4gIHJldHVybiByZXQ7XG59XG4iXX0=
|