@fjall/components-infrastructure 0.88.1 → 0.88.3
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/dist/lib/app.d.ts +1 -1
- package/dist/lib/app.js +5 -4
- package/dist/lib/config/aws/identityCenter.d.ts +4 -4
- package/dist/lib/config/aws/identityCenter.js +17 -62
- package/dist/lib/config/aws/identityCenterGroupMembership.js +27 -37
- package/dist/lib/config/aws/index.d.ts +0 -7
- package/dist/lib/config/aws/index.js +1 -8
- package/dist/lib/layers/layers/secrets-resolver/bin/resolve-secrets +30 -0
- package/dist/lib/layers/layers/secrets-resolver/bin/resolve-secrets.mjs +212 -0
- package/dist/lib/layers/secrets-resolver/bin/resolve-secrets +30 -0
- package/dist/lib/layers/secrets-resolver/bin/resolve-secrets.mjs +212 -0
- package/dist/lib/patterns/aws/account.js +24 -10
- package/dist/lib/patterns/aws/database.d.ts +2 -2
- package/dist/lib/patterns/aws/database.js +3 -3
- package/dist/lib/patterns/aws/organisation.d.ts +4 -17
- package/dist/lib/patterns/aws/organisation.js +7 -65
- package/dist/lib/patterns/aws/payload.js +5 -5
- package/dist/lib/resources/aws/compute/lambda.d.ts +12 -1
- package/dist/lib/resources/aws/compute/lambda.js +37 -10
- package/dist/lib/resources/aws/database/rdsAurora.js +2 -2
- package/dist/lib/resources/aws/iam/identityCenter/assignment.d.ts +0 -2
- package/dist/lib/resources/aws/iam/identityCenter/assignment.js +9 -45
- package/dist/lib/resources/aws/iam/identityCenter/group.d.ts +1 -3
- package/dist/lib/resources/aws/iam/identityCenter/group.js +7 -82
- package/dist/lib/resources/aws/iam/identityCenter/permissionSet.d.ts +1 -3
- package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +9 -93
- package/dist/lib/resources/aws/networking/ipamPool.js +56 -3
- package/dist/lib/resources/aws/secrets/parameter.js +5 -3
- package/dist/lib/resources/aws/storage/ecr.js +2 -4
- package/dist/lib/utils/getConfig.d.ts +4 -1
- package/dist/lib/utils/getConfig.js +1 -1
- package/dist/lib/utils/resourceNaming.js +4 -7
- package/package.json +5 -5
|
@@ -3,23 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Organisation = void 0;
|
|
4
4
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
5
|
const app_1 = require("../../app");
|
|
6
|
-
const backupGlobalSettings_1 = require("../../config/aws/backupGlobalSettings");
|
|
7
6
|
const identityCenter_1 = require("../../config/aws/identityCenter");
|
|
8
|
-
const ipamDelegateAdmin_1 = require("../../config/aws/ipamDelegateAdmin");
|
|
9
|
-
const ramSharing_1 = require("../../config/aws/ramSharing");
|
|
10
|
-
const costAllocationTags_1 = require("../../config/aws/costAllocationTags");
|
|
11
|
-
const organisationsAccess_1 = require("../../config/aws/organisationsAccess");
|
|
12
7
|
const organisation_1 = require("../../resources/aws/organisation");
|
|
13
8
|
const stripAndCamelCase_1 = require("../../utils/stripAndCamelCase");
|
|
14
9
|
const getConfig_1 = require("../../utils/getConfig");
|
|
15
10
|
/**
|
|
16
11
|
* Organisation CDK stack.
|
|
17
12
|
*
|
|
18
|
-
* OU creation
|
|
19
|
-
*
|
|
13
|
+
* OU creation, account-to-OU placement, IPAM delegation, RAM sharing, trusted
|
|
14
|
+
* access, cost allocation tags, and backup settings are handled by CLI pre-deploy
|
|
15
|
+
* steps (AwsAccountService). This stack focuses on:
|
|
20
16
|
* - Account CfnOutput references (for cross-stack consumption)
|
|
21
|
-
* -
|
|
22
|
-
* - Cost allocation tags, Identity Center, backup settings
|
|
17
|
+
* - Identity Centre configuration
|
|
23
18
|
*/
|
|
24
19
|
class Organisation extends aws_cdk_lib_1.Stack {
|
|
25
20
|
constructor(id, props) {
|
|
@@ -54,7 +49,7 @@ class Organisation extends aws_cdk_lib_1.Stack {
|
|
|
54
49
|
managementAccountId
|
|
55
50
|
});
|
|
56
51
|
this.createAccountReferences(props);
|
|
57
|
-
this.setupOrganisationFeatures(props.
|
|
52
|
+
this.setupOrganisationFeatures(props.identityCenter ?? true);
|
|
58
53
|
}
|
|
59
54
|
createAccountReferences(props) {
|
|
60
55
|
for (const [, accountList] of Object.entries(props.accounts)) {
|
|
@@ -76,48 +71,8 @@ class Organisation extends aws_cdk_lib_1.Stack {
|
|
|
76
71
|
}
|
|
77
72
|
}
|
|
78
73
|
}
|
|
79
|
-
setupOrganisationFeatures(
|
|
80
|
-
const platformAccountId = this.getPlatformAccountId();
|
|
81
|
-
// IPAM delegation requires the Platform account to exist.
|
|
82
|
-
// On first deploy the account IDs aren't yet in config — skip until next deploy.
|
|
83
|
-
if (platformAccountId) {
|
|
84
|
-
this.setupIpamDelegation(platformAccountId);
|
|
85
|
-
}
|
|
86
|
-
this.enableRamSharing();
|
|
87
|
-
this.enableTrustedAccess();
|
|
88
|
-
this.enableCostAllocationTags(costAllocationTags);
|
|
74
|
+
setupOrganisationFeatures(identityCenter) {
|
|
89
75
|
this.setupIdentityCenter(identityCenter);
|
|
90
|
-
this.setupBackupGlobalSettings(backupSettings);
|
|
91
|
-
}
|
|
92
|
-
getPlatformAccountId() {
|
|
93
|
-
const platformEntry = Object.entries(this.accountsConfig).find(([key]) => key.toLowerCase() === "platform");
|
|
94
|
-
if (!platformEntry) {
|
|
95
|
-
return undefined;
|
|
96
|
-
}
|
|
97
|
-
const account = platformEntry[1];
|
|
98
|
-
const platformAccount = Array.isArray(account) ? account[0] : account;
|
|
99
|
-
return this.accountMap[platformAccount.toLowerCase()];
|
|
100
|
-
}
|
|
101
|
-
setupIpamDelegation(platformAccountId) {
|
|
102
|
-
new ipamDelegateAdmin_1.IpamDelegateAdmin(this, "IpamDelegateAdmin", {
|
|
103
|
-
accountId: platformAccountId
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
enableRamSharing() {
|
|
107
|
-
new ramSharing_1.RamSharing(this, "RamSharing");
|
|
108
|
-
}
|
|
109
|
-
enableTrustedAccess() {
|
|
110
|
-
new organisationsAccess_1.ActivateOrganisationsAccess(this, "ActivateOrganisationsAccess", {
|
|
111
|
-
account: this.account,
|
|
112
|
-
region: this.region
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
enableCostAllocationTags(costAllocationTags) {
|
|
116
|
-
if (costAllocationTags.length > 0) {
|
|
117
|
-
new costAllocationTags_1.CostAllocationTags(this, "CostAllocationTags", {
|
|
118
|
-
costAllocationTags
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
76
|
}
|
|
122
77
|
setupIdentityCenter(identityCenter) {
|
|
123
78
|
if (identityCenter) {
|
|
@@ -126,19 +81,6 @@ class Organisation extends aws_cdk_lib_1.Stack {
|
|
|
126
81
|
});
|
|
127
82
|
}
|
|
128
83
|
}
|
|
129
|
-
setupBackupGlobalSettings(backupSettings) {
|
|
130
|
-
const defaultSettings = {
|
|
131
|
-
enableCrossAccountBackup: true,
|
|
132
|
-
enableDelegatedAdministrator: true,
|
|
133
|
-
enableMpa: false
|
|
134
|
-
};
|
|
135
|
-
const settings = { ...defaultSettings, ...backupSettings };
|
|
136
|
-
new backupGlobalSettings_1.BackupGlobalSettings(this, "BackupGlobalSettings", {
|
|
137
|
-
account: this.account,
|
|
138
|
-
region: this.region,
|
|
139
|
-
...settings
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
84
|
getOrganisation() {
|
|
143
85
|
return this.org;
|
|
144
86
|
}
|
|
@@ -147,4 +89,4 @@ class Organisation extends aws_cdk_lib_1.Stack {
|
|
|
147
89
|
}
|
|
148
90
|
}
|
|
149
91
|
exports.Organisation = Organisation;
|
|
150
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9vcmdhbmlzYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXVFO0FBRXZFLG1DQUE0QjtBQUU1QixnRkFBNkU7QUFDN0Usb0VBQWlFO0FBQ2pFLDBFQUF1RTtBQUN2RSw0REFBeUQ7QUFDekQsNEVBRzZDO0FBQzdDLDhFQUFtRjtBQUNuRixtRUFHMEM7QUFDMUMscUVBQWtFO0FBQ2xFLHFEQUFrRDtBQXlCbEQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFhLFlBQWEsU0FBUSxtQkFBSztJQU9yQyxZQUFZLEVBQVUsRUFBRSxLQUF3QjtRQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFBLHFCQUFTLEdBQUUsQ0FBQztRQUUzQixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxJQUFJO1lBQ3ZCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtZQUNyQixPQUFPLEVBQUUsTUFBTSxDQUFDLFNBQVMsSUFBSSxFQUFFO1NBQ2hDLENBQUM7UUFFRixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkdBQTJHLENBQzVHLENBQUM7UUFDSixDQUFDO1FBRUQsS0FBSyxDQUFDLGFBQUcsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBcEJsQyxxQkFBZ0IsR0FBRyxjQUF1QixDQUFDO1FBRW5ELGdCQUFXLEdBQTBCLEVBQUUsQ0FBQztRQW9COUMsd0VBQXdFO1FBQ3hFLCtFQUErRTtRQUMvRSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1FBQzNELElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JC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QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sd0JBQXdCLENBQUMsa0JBQXlDO1FBQ3hFLElBQUksa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xDLElBQUksdUNBQWtCLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFO2dCQUNqRCxrQkFBa0I7YUFDbkIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxjQUF1QjtRQUNqRCxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLElBQUksK0JBQWMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ3pDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVTthQUMxQixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVPLHlCQUF5QixDQUMvQixjQUFvRDtRQUVwRCxNQUFNLGVBQWUsR0FBRztZQUN0Qix3QkFBd0IsRUFBRSxJQUFJO1lBQzlCLDRCQUE0QixFQUFFLElBQUk7WUFDbEMsU0FBUyxFQUFFLEtBQUs7U0FDakIsQ0FBQztRQUVGLE1BQU0sUUFBUSxHQUFHLEVBQUUsR0FBRyxlQUFlLEVBQUUsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUUzRCxJQUFJLDJDQUFvQixDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRTtZQUNyRCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEdBQUcsUUFBUTtTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxlQUFlO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNsQixDQUFDO0lBRU0sV0FBVztRQUNoQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDekIsQ0FBQztDQUNGO0FBN0tELG9DQTZLQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRW52aXJvbm1lbnQsIFN0YWNrLCB0eXBlIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuaW1wb3J0IEFwcCBmcm9tIFwiLi4vLi4vYXBwXCI7XG5cbmltcG9ydCB7IEJhY2t1cEdsb2JhbFNldHRpbmdzIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvYmFja3VwR2xvYmFsU2V0dGluZ3NcIjtcbmltcG9ydCB7IElkZW50aXR5Q2VudGVyIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvaWRlbnRpdHlDZW50ZXJcIjtcbmltcG9ydCB7IElwYW1EZWxlZ2F0ZUFkbWluIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvaXBhbURlbGVnYXRlQWRtaW5cIjtcbmltcG9ydCB7IFJhbVNoYXJpbmcgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2F3cy9yYW1TaGFyaW5nXCI7XG5pbXBvcnQge1xuICBDb3N0QWxsb2NhdGlvblRhZ3MsXG4gIHR5cGUgSUNvc3RBbGxvY2F0aW9uVGFnc1xufSBmcm9tIFwiLi4vLi4vY29uZmlnL2F3cy9jb3N0QWxsb2NhdGlvblRhZ3NcIjtcbmltcG9ydCB7IEFjdGl2YXRlT3JnYW5pc2F0aW9uc0FjY2VzcyB9IGZyb20gXCIuLi8uLi9jb25maWcvYXdzL29yZ2FuaXNhdGlvbnNBY2Nlc3NcIjtcbmltcG9ydCB7XG4gIE9yZ2FuaXNhdGlvblJlc291cmNlLFxuICBPcmdhbmlzYXRpb25BY2NvdW50XG59IGZyb20gXCIuLi8uLi9yZXNvdXJjZXMvYXdzL29yZ2FuaXNhdGlvblwiO1xuaW1wb3J0IHsgc3RyaXBBbmRDYW1lbENhc2UgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc3RyaXBBbmRDYW1lbENhc2VcIjtcbmltcG9ydCB7IGdldENvbmZpZyB9IGZyb20gXCIuLi8uLi91dGlscy9nZXRDb25maWdcIjtcblxudHlwZSBFeHRlbmRlZFN0YWNrUHJvcHMgPSBPbWl0PFN0YWNrUHJvcHMsIFwiZW52XCI+ICYge1xuICBlbnY/OiBSZXF1aXJlZDxQaWNrPEVudmlyb25tZW50LCBcInJlZ2lvblwiIHwgXCJhY2NvdW50XCI+PiAmXG4gICAgUGFydGlhbDxPbWl0PEVudmlyb25tZW50LCBcInJlZ2lvblwiIHwgXCJhY2NvdW50XCI+Pjtcbn07XG5cbmV4cG9ydCB0eXBlIEFjY291bnRzQ29uZmlnID0ge1xuICByZWFkb25seSBba2V5OiBzdHJpbmddOiByZWFkb25seSBzdHJpbmdbXSB8IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JnYW5pc2F0aW9uUHJvcHMgZXh0ZW5kcyBFeHRlbmRlZFN0YWNrUHJvcHMge1xuICBvcmdhbmlzYXRpb25OYW1lOiBzdHJpbmc7XG4gIGFjY291bnRzOiBBY2NvdW50c0NvbmZpZztcbiAgb3JnRW1haWw6IHN0cmluZztcbiAgYWNjb3VudElkcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIGNvc3RBbGxvY2F0aW9uVGFncz86IElDb3N0QWxsb2NhdGlvblRhZ3NbXTtcbiAgaWRlbnRpdHlDZW50ZXI/OiBib29sZWFuO1xuICBiYWNrdXBTZXR0aW5ncz86IHtcbiAgICBlbmFibGVDcm9zc0FjY291bnRCYWNrdXA/OiBib29sZWFuO1xuICAgIGVuYWJsZURlbGVnYXRlZEFkbWluaXN0cmF0b3I/OiBib29sZWFuO1xuICAgIGVuYWJsZU1wYT86IGJvb2xlYW47XG4gIH07XG59XG5cbi8qKlxuICogT3JnYW5pc2F0aW9uIENESyBzdGFjay5cbiAqXG4gKiBPVSBjcmVhdGlvbiBhbmQgYWNjb3VudC10by1PVSBwbGFjZW1lbnQgYXJlIGhhbmRsZWQgYnkgQ0xJIHByZS1kZXBsb3kgc3RlcHNcbiAqIChBd3NBY2NvdW50U2VydmljZSkuIFRoaXMgc3RhY2sgZm9jdXNlcyBvbjpcbiAqIC0gQWNjb3VudCBDZm5PdXRwdXQgcmVmZXJlbmNlcyAoZm9yIGNyb3NzLXN0YWNrIGNvbnN1bXB0aW9uKVxuICogLSBJUEFNIGRlbGVnYXRpb24sIFJBTSBzaGFyaW5nLCB0cnVzdGVkIGFjY2Vzc1xuICogLSBDb3N0IGFsbG9jYXRpb24gdGFncywgSWRlbnRpdHkgQ2VudGVyLCBiYWNrdXAgc2V0dGluZ3NcbiAqL1xuZXhwb3J0IGNsYXNzIE9yZ2FuaXNhdGlvbiBleHRlbmRzIFN0YWNrIHtcbiAgcHVibGljIHJlYWRvbmx5IG9yZ2FuaXNhdGlvblR5cGUgPSBcIm9yZ2FuaXNhdGlvblwiIGFzIGNvbnN0O1xuICBwcml2YXRlIG9yZzogT3JnYW5pc2F0aW9uUmVzb3VyY2U7XG4gIHByaXZhdGUgYWNjb3VudFJlZnM6IE9yZ2FuaXNhdGlvbkFjY291bnRbXSA9IFtdO1xuICBwcml2YXRlIGFjY291bnRNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHByaXZhdGUgYWNjb3VudHNDb25maWc6IEFjY291bnRzQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIHByb3BzOiBPcmdhbmlzYXRpb25Qcm9wcykge1xuICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuXG4gICAgY29uc3QgZW52ID0gcHJvcHMuZW52ID8/IHtcbiAgICAgIHJlZ2lvbjogY29uZmlnLnJlZ2lvbixcbiAgICAgIGFjY291bnQ6IGNvbmZpZy5hY2NvdW50SWQgPz8gXCJcIlxuICAgIH07XG5cbiAgICBpZiAoIWVudi5hY2NvdW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiT3JnYW5pc2F0aW9uIHJlcXVpcmVzIGFuIGFjY291bnQgSUQuIFByb3ZpZGUgaXQgdmlhIGVudi5hY2NvdW50IG9yIGVuc3VyZSBDREsgY29udGV4dCBpbmNsdWRlcyBhY2NvdW50SWQuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc3VwZXIoQXBwLmdldEluc3RhbmNlKCksIGlkLCB7IC4uLnByb3BzLCBlbnYgfSk7XG5cbiAgICAvLyBOb3JtYWxpc2UgYWNjb3VudCBtYXAga2V5cyB0byBsb3dlcmNhc2UgZm9yIGNhc2UtaW5zZW5zaXRpdmUgbG9va3Vwcy5cbiAgICAvLyBwcm92aWRlckFjY291bnRzIHN0b3JlcyBuYW1lcyBhcyBsb3dlcmNhc2U7IEFDQ09VTlRTIGNvbmZpZyB1c2VzIFBhc2NhbENhc2UuXG4gICAgY29uc3QgcmF3TWFwID0gcHJvcHMuYWNjb3VudElkcyA/PyBjb25maWcuYWNjb3VudElkcyA/PyB7fTtcbiAgICB0aGlzLmFjY291bnRNYXAgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhyYXdNYXApKSB7XG4gICAgICB0aGlzLmFjY291bnRNYXBba2V5LnRvTG93ZXJDYXNlKCldID0gdmFsdWU7XG4gICAgfVxuICAgIHRoaXMuYWNjb3VudHNDb25maWcgPSBwcm9wcy5hY2NvdW50cztcblxuICAgIGNvbnN0IG9yZ0lkID0gdGhpcy5ub2RlLnRyeUdldENvbnRleHQoXCJvcmdJZFwiKTtcbiAgICBjb25zdCByb290SWQgPSB0aGlzLm5vZGUudHJ5R2V0Q29udGV4dChcInJvb3RJZFwiKTtcbiAgICBjb25zdCBtYW5hZ2VtZW50QWNjb3VudElkID1cbiAgICAgIHRoaXMubm9kZS50cnlHZXRDb250ZXh0KFwibWFuYWdlbWVudEFjY291bnRJZFwiKSA/PyB0aGlzLmFjY291bnQ7XG5cbiAgICBpZiAoIW9yZ0lkIHx8ICFyb290SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJvcmdJZCBhbmQgcm9vdElkIG11c3QgYmUgcHJvdmlkZWQgdmlhIENESyBjb250ZXh0LiBSdW4gZGVwbG95bWVudCB0aHJvdWdoIHRoZSBGamFsbCBDTEkuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5vcmcgPSBuZXcgT3JnYW5pc2F0aW9uUmVzb3VyY2UodGhpcywgXCJPcmdhbmlzYXRpb25cIiwge1xuICAgICAgb3JnSWQsXG4gICAgICByb290SWQsXG4gICAgICBtYW5hZ2VtZW50QWNjb3VudElkXG4gICAgfSk7XG4gICAgdGhpcy5jcmVhdGVBY2NvdW50UmVmZXJlbmNlcyhwcm9wcyk7XG4gICAgdGhpcy5zZXR1cE9yZ2FuaXNhdGlvbkZlYXR1cmVzKFxuICAgICAgcHJvcHMuY29zdEFsbG9jYXRpb25UYWdzID8/IGNvbmZpZy5jb3N0QWxsb2NhdGlvblRhZ3MsXG4gICAgICBwcm9wcy5pZGVudGl0eUNlbnRlciA/PyB0cnVlLFxuICAgICAgcHJvcHMuYmFja3VwU2V0dGluZ3NcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBY2NvdW50UmVmZXJlbmNlcyhwcm9wczogT3JnYW5pc2F0aW9uUHJvcHMpIHtcbiAgICBmb3IgKGNvbnN0IFssIGFjY291bnRMaXN0XSBvZiBPYmplY3QuZW50cmllcyhwcm9wcy5hY2NvdW50cykpIHtcbiAgICAgIGNvbnN0IGFjY291bnRzQXJyYXkgPSBBcnJheS5pc0FycmF5KGFjY291bnRMaXN0KVxuICAgICAgICA/IGFjY291bnRMaXN0XG4gICAgICAgIDogW2FjY291bnRMaXN0XTtcblxuICAgICAgZm9yIChjb25zdCBhY2NvdW50TmFtZSBvZiBhY2NvdW50c0FycmF5KSB7XG4gICAgICAgIGNvbnN0IGFjY291bnROYW1lSWQgPSBzdHJpcEFuZENhbWVsQ2FzZShhY2NvdW50TmFtZSk7XG4gICAgICAgIGNvbnN0IGFjY291bnRJZCA9IHRoaXMuYWNjb3VudE1hcFthY2NvdW50TmFtZS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoIWFjY291bnRJZCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmID0gbmV3IE9yZ2FuaXNhdGlvbkFjY291bnQodGhpcywgYCR7YWNjb3VudE5hbWVJZH1BY2NvdW50YCwge1xuICAgICAgICAgIGFjY291bnRJZCxcbiAgICAgICAgICBtYW5hZ2VtZW50QWNjb3VudElkOiB0aGlzLmFjY291bnQsXG4gICAgICAgICAgb3JnSWQ6IHRoaXMub3JnLm9yZ0lkXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuYWNjb3VudFJlZnMucHVzaChyZWYpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBPcmdhbmlzYXRpb25GZWF0dXJlcyhcbiAgICBjb3N0QWxsb2NhdGlvblRhZ3M6IElDb3N0QWxsb2NhdGlvblRhZ3NbXSxcbiAgICBpZGVudGl0eUNlbnRlcjogYm9vbGVhbixcbiAgICBiYWNrdXBTZXR0aW5ncz86IE9yZ2FuaXNhdGlvblByb3BzW1wiYmFja3VwU2V0dGluZ3NcIl1cbiAgKSB7XG4gICAgY29uc3QgcGxhdGZvcm1BY2NvdW50SWQgPSB0aGlzLmdldFBsYXRmb3JtQWNjb3VudElkKCk7XG5cbiAgICAvLyBJUEFNIGRlbGVnYXRpb24gcmVxdWlyZXMgdGhlIFBsYXRmb3JtIGFjY291bnQgdG8gZXhpc3QuXG4gICAgLy8gT24gZmlyc3QgZGVwbG95IHRoZSBhY2NvdW50IElEcyBhcmVuJ3QgeWV0IGluIGNvbmZpZyDigJQgc2tpcCB1bnRpbCBuZXh0IGRlcGxveS5cbiAgICBpZiAocGxhdGZvcm1BY2NvdW50SWQpIHtcbiAgICAgIHRoaXMuc2V0dXBJcGFtRGVsZWdhdGlvbihwbGF0Zm9ybUFjY291bnRJZCk7XG4gICAgfVxuXG4gICAgdGhpcy5lbmFibGVSYW1TaGFyaW5nKCk7XG4gICAgdGhpcy5lbmFibGVUcnVzdGVkQWNjZXNzKCk7XG4gICAgdGhpcy5lbmFibGVDb3N0QWxsb2NhdGlvblRhZ3MoY29zdEFsbG9jYXRpb25UYWdzKTtcbiAgICB0aGlzLnNldHVwSWRlbnRpdHlDZW50ZXIoaWRlbnRpdHlDZW50ZXIpO1xuICAgIHRoaXMuc2V0dXBCYWNrdXBHbG9iYWxTZXR0aW5ncyhiYWNrdXBTZXR0aW5ncyk7XG4gIH1cblxuICBwcml2YXRlIGdldFBsYXRmb3JtQWNjb3VudElkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcGxhdGZvcm1FbnRyeSA9IE9iamVjdC5lbnRyaWVzKHRoaXMuYWNjb3VudHNDb25maWcpLmZpbmQoXG4gICAgICAoW2tleV0pID0+IGtleS50b0xvd2VyQ2FzZSgpID09PSBcInBsYXRmb3JtXCJcbiAgICApO1xuXG4gICAgaWYgKCFwbGF0Zm9ybUVudHJ5KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGFjY291bnQgPSBwbGF0Zm9ybUVudHJ5WzFdO1xuICAgIGNvbnN0IHBsYXRmb3JtQWNjb3VudCA9IEFycmF5LmlzQXJyYXkoYWNjb3VudCkgPyBhY2NvdW50WzBdIDogYWNjb3VudDtcbiAgICByZXR1cm4gdGhpcy5hY2NvdW50TWFwW3BsYXRmb3JtQWNjb3VudC50b0xvd2VyQ2FzZSgpXTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBJcGFtRGVsZWdhdGlvbihwbGF0Zm9ybUFjY291bnRJZDogc3RyaW5nKSB7XG4gICAgbmV3IElwYW1EZWxlZ2F0ZUFkbWluKHRoaXMsIFwiSXBhbURlbGVnYXRlQWRtaW5cIiwge1xuICAgICAgYWNjb3VudElkOiBwbGF0Zm9ybUFjY291bnRJZFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBlbmFibGVSYW1TaGFyaW5nKCkge1xuICAgIG5ldyBSYW1TaGFyaW5nKHRoaXMsIFwiUmFtU2hhcmluZ1wiKTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlVHJ1c3RlZEFjY2VzcygpIHtcbiAgICBuZXcgQWN0aXZhdGVPcmdhbmlzYXRpb25zQWNjZXNzKHRoaXMsIFwiQWN0aXZhdGVPcmdhbmlzYXRpb25zQWNjZXNzXCIsIHtcbiAgICAgIGFjY291bnQ6IHRoaXMuYWNjb3VudCxcbiAgICAgIHJlZ2lvbjogdGhpcy5yZWdpb25cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW5hYmxlQ29zdEFsbG9jYXRpb25UYWdzKGNvc3RBbGxvY2F0aW9uVGFnczogSUNvc3RBbGxvY2F0aW9uVGFnc1tdKSB7XG4gICAgaWYgKGNvc3RBbGxvY2F0aW9uVGFncy5sZW5ndGggPiAwKSB7XG4gICAgICBuZXcgQ29zdEFsbG9jYXRpb25UYWdzKHRoaXMsIFwiQ29zdEFsbG9jYXRpb25UYWdzXCIsIHtcbiAgICAgICAgY29zdEFsbG9jYXRpb25UYWdzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldHVwSWRlbnRpdHlDZW50ZXIoaWRlbnRpdHlDZW50ZXI6IGJvb2xlYW4pIHtcbiAgICBpZiAoaWRlbnRpdHlDZW50ZXIpIHtcbiAgICAgIG5ldyBJZGVudGl0eUNlbnRlcih0aGlzLCBcIklkZW50aXR5Q2VudGVyXCIsIHtcbiAgICAgICAgYWNjb3VudHM6IHRoaXMuYWNjb3VudE1hcFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEJhY2t1cEdsb2JhbFNldHRpbmdzKFxuICAgIGJhY2t1cFNldHRpbmdzPzogT3JnYW5pc2F0aW9uUHJvcHNbXCJiYWNrdXBTZXR0aW5nc1wiXVxuICApIHtcbiAgICBjb25zdCBkZWZhdWx0U2V0dGluZ3MgPSB7XG4gICAgICBlbmFibGVDcm9zc0FjY291bnRCYWNrdXA6IHRydWUsXG4gICAgICBlbmFibGVEZWxlZ2F0ZWRBZG1pbmlzdHJhdG9yOiB0cnVlLFxuICAgICAgZW5hYmxlTXBhOiBmYWxzZVxuICAgIH07XG5cbiAgICBjb25zdCBzZXR0aW5ncyA9IHsgLi4uZGVmYXVsdFNldHRpbmdzLCAuLi5iYWNrdXBTZXR0aW5ncyB9O1xuXG4gICAgbmV3IEJhY2t1cEdsb2JhbFNldHRpbmdzKHRoaXMsIFwiQmFja3VwR2xvYmFsU2V0dGluZ3NcIiwge1xuICAgICAgYWNjb3VudDogdGhpcy5hY2NvdW50LFxuICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbixcbiAgICAgIC4uLnNldHRpbmdzXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0T3JnYW5pc2F0aW9uKCk6IE9yZ2FuaXNhdGlvblJlc291cmNlIHtcbiAgICByZXR1cm4gdGhpcy5vcmc7XG4gIH1cblxuICBwdWJsaWMgZ2V0QWNjb3VudHMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuYWNjb3VudE1hcDtcbiAgfVxufVxuIl19
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9vcmdhbmlzYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXVFO0FBRXZFLG1DQUE0QjtBQUU1QixvRUFBaUU7QUFDakUsbUVBRzBDO0FBQzFDLHFFQUFrRTtBQUNsRSxxREFBa0Q7QUFtQmxEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsbUJBQUs7SUFPckMsWUFBWSxFQUFVLEVBQUUsS0FBd0I7UUFDOUMsTUFBTSxNQUFNLEdBQUcsSUFBQSxxQkFBUyxHQUFFLENBQUM7UUFFM0IsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsSUFBSTtZQUN2QixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDckIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxTQUFTLElBQUksRUFBRTtTQUNoQyxDQUFDO1FBRUYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUNiLDJHQUEyRyxDQUM1RyxDQUFDO1FBQ0osQ0FBQztRQUVELEtBQUssQ0FBQyxhQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQXBCbEMscUJBQWdCLEdBQUcsY0FBdUIsQ0FBQztRQUVuRCxnQkFBVyxHQUEwQixFQUFFLENBQUM7UUFvQjlDLHdFQUF3RTtRQUN4RSwrRUFBK0U7UUFDL0UsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztRQUMzRCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFN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dHlwZSBTdGFja1Byb3BzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5cbmltcG9ydCBBcHAgZnJvbSBcIi4uLy4uL2FwcFwiO1xuXG5pbXBvcnQgeyBJZGVudGl0eUNlbnRlciB9IGZyb20gXCIuLi8uLi9jb25maWcvYXdzL2lkZW50aXR5Q2VudGVyXCI7XG5pbXBvcnQge1xuICBPcmdhbmlzYXRpb25SZXNvdXJjZSxcbiAgT3JnYW5pc2F0aW9uQWNjb3VudFxufSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9vcmdhbmlzYXRpb25cIjtcbmltcG9ydCB7IHN0cmlwQW5kQ2FtZWxDYXNlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3N0cmlwQW5kQ2FtZWxDYXNlXCI7XG5pbXBvcnQgeyBnZXRDb25maWcgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZ2V0Q29uZmlnXCI7XG5cbnR5cGUgRXh0ZW5kZWRTdGFja1Byb3BzID0gT21pdDxTdGFja1Byb3BzLCBcImVudlwiPiAmIHtcbiAgZW52PzogUmVxdWlyZWQ8UGljazxFbnZpcm9ubWVudCwgXCJyZWdpb25cIiB8IFwiYWNjb3VudFwiPj4gJlxuICAgIFBhcnRpYWw8T21pdDxFbnZpcm9ubWVudCwgXCJyZWdpb25cIiB8IFwiYWNjb3VudFwiPj47XG59O1xuXG5leHBvcnQgdHlwZSBBY2NvdW50c0NvbmZpZyA9IHtcbiAgcmVhZG9ubHkgW2tleTogc3RyaW5nXTogcmVhZG9ubHkgc3RyaW5nW10gfCBzdHJpbmc7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXNhdGlvblByb3BzIGV4dGVuZHMgRXh0ZW5kZWRTdGFja1Byb3BzIHtcbiAgb3JnYW5pc2F0aW9uTmFtZTogc3RyaW5nO1xuICBhY2NvdW50czogQWNjb3VudHNDb25maWc7XG4gIG9yZ0VtYWlsOiBzdHJpbmc7XG4gIGFjY291bnRJZHM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBpZGVudGl0eUNlbnRlcj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3JnYW5pc2F0aW9uIENESyBzdGFjay5cbiAqXG4gKiBPVSBjcmVhdGlvbiwgYWNjb3VudC10by1PVSBwbGFjZW1lbnQsIElQQU0gZGVsZWdhdGlvbiwgUkFNIHNoYXJpbmcsIHRydXN0ZWRcbiAqIGFjY2VzcywgY29zdCBhbGxvY2F0aW9uIHRhZ3MsIGFuZCBiYWNrdXAgc2V0dGluZ3MgYXJlIGhhbmRsZWQgYnkgQ0xJIHByZS1kZXBsb3lcbiAqIHN0ZXBzIChBd3NBY2NvdW50U2VydmljZSkuIFRoaXMgc3RhY2sgZm9jdXNlcyBvbjpcbiAqIC0gQWNjb3VudCBDZm5PdXRwdXQgcmVmZXJlbmNlcyAoZm9yIGNyb3NzLXN0YWNrIGNvbnN1bXB0aW9uKVxuICogLSBJZGVudGl0eSBDZW50cmUgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgY2xhc3MgT3JnYW5pc2F0aW9uIGV4dGVuZHMgU3RhY2sge1xuICBwdWJsaWMgcmVhZG9ubHkgb3JnYW5pc2F0aW9uVHlwZSA9IFwib3JnYW5pc2F0aW9uXCIgYXMgY29uc3Q7XG4gIHByaXZhdGUgb3JnOiBPcmdhbmlzYXRpb25SZXNvdXJjZTtcbiAgcHJpdmF0ZSBhY2NvdW50UmVmczogT3JnYW5pc2F0aW9uQWNjb3VudFtdID0gW107XG4gIHByaXZhdGUgYWNjb3VudE1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcHJpdmF0ZSBhY2NvdW50c0NvbmZpZzogQWNjb3VudHNDb25maWc7XG5cbiAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgcHJvcHM6IE9yZ2FuaXNhdGlvblByb3BzKSB7XG4gICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG5cbiAgICBjb25zdCBlbnYgPSBwcm9wcy5lbnYgPz8ge1xuICAgICAgcmVnaW9uOiBjb25maWcucmVnaW9uLFxuICAgICAgYWNjb3VudDogY29uZmlnLmFjY291bnRJZCA/PyBcIlwiXG4gICAgfTtcblxuICAgIGlmICghZW52LmFjY291bnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJPcmdhbmlzYXRpb24gcmVxdWlyZXMgYW4gYWNjb3VudCBJRC4gUHJvdmlkZSBpdCB2aWEgZW52LmFjY291bnQgb3IgZW5zdXJlIENESyBjb250ZXh0IGluY2x1ZGVzIGFjY291bnRJZC5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBzdXBlcihBcHAuZ2V0SW5zdGFuY2UoKSwgaWQsIHsgLi4ucHJvcHMsIGVudiB9KTtcblxuICAgIC8vIE5vcm1hbGlzZSBhY2NvdW50IG1hcCBrZXlzIHRvIGxvd2VyY2FzZSBmb3IgY2FzZS1pbnNlbnNpdGl2ZSBsb29rdXBzLlxuICAgIC8vIHByb3ZpZGVyQWNjb3VudHMgc3RvcmVzIG5hbWVzIGFzIGxvd2VyY2FzZTsgQUNDT1VOVFMgY29uZmlnIHVzZXMgUGFzY2FsQ2FzZS5cbiAgICBjb25zdCByYXdNYXAgPSBwcm9wcy5hY2NvdW50SWRzID8/IGNvbmZpZy5hY2NvdW50SWRzID8/IHt9O1xuICAgIHRoaXMuYWNjb3VudE1hcCA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHJhd01hcCkpIHtcbiAgICAgIHRoaXMuYWNjb3VudE1hcFtrZXkudG9Mb3dlckNhc2UoKV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5hY2NvdW50c0NvbmZpZyA9IHByb3BzLmFjY291bnRzO1xuXG4gICAgY29uc3Qgb3JnSWQgPSB0aGlzLm5vZGUudHJ5R2V0Q29udGV4dChcIm9yZ0lkXCIpO1xuICAgIGNvbnN0IHJvb3RJZCA9IHRoaXMubm9kZS50cnlHZXRDb250ZXh0KFwicm9vdElkXCIpO1xuICAgIGNvbnN0IG1hbmFnZW1lbnRBY2NvdW50SWQgPVxuICAgICAgdGhpcy5ub2RlLnRyeUdldENvbnRleHQoXCJtYW5hZ2VtZW50QWNjb3VudElkXCIpID8/IHRoaXMuYWNjb3VudDtcblxuICAgIGlmICghb3JnSWQgfHwgIXJvb3RJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIm9yZ0lkIGFuZCByb290SWQgbXVzdCBiZSBwcm92aWRlZCB2aWEgQ0RLIGNvbnRleHQuIFJ1biBkZXBsb3ltZW50IHRocm91Z2ggdGhlIEZqYWxsIENMSS5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLm9yZyA9IG5ldyBPcmdhbmlzYXRpb25SZXNvdXJjZSh0aGlzLCBcIk9yZ2FuaXNhdGlvblwiLCB7XG4gICAgICBvcmdJZCxcbiAgICAgIHJvb3RJZCxcbiAgICAgIG1hbmFnZW1lbnRBY2NvdW50SWRcbiAgICB9KTtcbiAgICB0aGlzLmNyZWF0ZUFjY291bnRSZWZlcmVuY2VzKHByb3BzKTtcbiAgICB0aGlzLnNldHVwT3JnYW5pc2F0aW9uRmVhdHVyZXMocHJvcHMuaWRlbnRpdHlDZW50ZXIgPz8gdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUFjY291bnRSZWZlcmVuY2VzKHByb3BzOiBPcmdhbmlzYXRpb25Qcm9wcykge1xuICAgIGZvciAoY29uc3QgWywgYWNjb3VudExpc3RdIG9mIE9iamVjdC5lbnRyaWVzKHByb3BzLmFjY291bnRzKSkge1xuICAgICAgY29uc3QgYWNjb3VudHNBcnJheSA9IEFycmF5LmlzQXJyYXkoYWNjb3VudExpc3QpXG4gICAgICAgID8gYWNjb3VudExpc3RcbiAgICAgICAgOiBbYWNjb3VudExpc3RdO1xuXG4gICAgICBmb3IgKGNvbnN0IGFjY291bnROYW1lIG9mIGFjY291bnRzQXJyYXkpIHtcbiAgICAgICAgY29uc3QgYWNjb3VudE5hbWVJZCA9IHN0cmlwQW5kQ2FtZWxDYXNlKGFjY291bnROYW1lKTtcbiAgICAgICAgY29uc3QgYWNjb3VudElkID0gdGhpcy5hY2NvdW50TWFwW2FjY291bnROYW1lLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICAgIGlmICghYWNjb3VudElkKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWYgPSBuZXcgT3JnYW5pc2F0aW9uQWNjb3VudCh0aGlzLCBgJHthY2NvdW50TmFtZUlkfUFjY291bnRgLCB7XG4gICAgICAgICAgYWNjb3VudElkLFxuICAgICAgICAgIG1hbmFnZW1lbnRBY2NvdW50SWQ6IHRoaXMuYWNjb3VudCxcbiAgICAgICAgICBvcmdJZDogdGhpcy5vcmcub3JnSWRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5hY2NvdW50UmVmcy5wdXNoKHJlZik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cE9yZ2FuaXNhdGlvbkZlYXR1cmVzKGlkZW50aXR5Q2VudGVyOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXR1cElkZW50aXR5Q2VudGVyKGlkZW50aXR5Q2VudGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBJZGVudGl0eUNlbnRlcihpZGVudGl0eUNlbnRlcjogYm9vbGVhbikge1xuICAgIGlmIChpZGVudGl0eUNlbnRlcikge1xuICAgICAgbmV3IElkZW50aXR5Q2VudGVyKHRoaXMsIFwiSWRlbnRpdHlDZW50ZXJcIiwge1xuICAgICAgICBhY2NvdW50czogdGhpcy5hY2NvdW50TWFwXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0T3JnYW5pc2F0aW9uKCk6IE9yZ2FuaXNhdGlvblJlc291cmNlIHtcbiAgICByZXR1cm4gdGhpcy5vcmc7XG4gIH1cblxuICBwdWJsaWMgZ2V0QWNjb3VudHMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuYWNjb3VudE1hcDtcbiAgfVxufVxuIl19
|
|
@@ -81,12 +81,12 @@ const PAYLOAD_DEFAULTS = {
|
|
|
81
81
|
}
|
|
82
82
|
};
|
|
83
83
|
/**
|
|
84
|
-
* Convert a name to a valid RDS database name (
|
|
85
|
-
*
|
|
86
|
-
*
|
|
84
|
+
* Convert a name to a valid RDS database name (snake_case).
|
|
85
|
+
* RDS API allows letters, numbers, and underscores for PostgreSQL/MySQL DatabaseName.
|
|
86
|
+
* Hyphens are rejected, so convert them to underscores.
|
|
87
87
|
*/
|
|
88
88
|
function toValidDatabaseName(name) {
|
|
89
|
-
return
|
|
89
|
+
return (0, capitaliseString_js_1.toKebab)(name).replace(/-/g, "_");
|
|
90
90
|
}
|
|
91
91
|
/**
|
|
92
92
|
* Extract root domain from a full domain name.
|
|
@@ -582,4 +582,4 @@ class Payload extends constructs_1.Construct {
|
|
|
582
582
|
}
|
|
583
583
|
}
|
|
584
584
|
exports.Payload = Payload;
|
|
585
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvcGF5bG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7OztBQUVILDJDQUF1QztBQUN2Qyw2Q0FBK0M7QUFDL0MseURBQXFEO0FBQ3JELHVEQU1nQztBQUNoQywrRUFJNEM7QUFDNUMseURBQTRFO0FBQzVFLHlFQUFtRTtBQUtuRSwrQ0FPdUI7QUFDdkIsNkNBS3NCO0FBQ3RCLDZDQUEwRTtBQUMxRSxpREFJd0I7QUFDeEIscUNBQW9FO0FBQ3BFLHlFQUE4RDtBQUM5RCx5RUFBK0Q7QUFFL0QsTUFBTSxnQkFBZ0IsR0FBRztJQUN2QixxRkFBcUY7SUFDckYsTUFBTSxFQUFFLE9BQU87SUFDZixtRkFBbUY7SUFDbkYsZUFBZSxFQUFFLFdBQVc7SUFDNUIsUUFBUSxFQUFFO1FBQ1IsSUFBSSxFQUFFLFVBQW1CO1FBQ3pCLDhFQUE4RTtRQUM5RSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLG1CQUFtQixFQUFFLElBQUk7S0FDMUI7SUFDRCxPQUFPLEVBQUU7UUFDUCw2RkFBNkY7UUFDN0YsYUFBYSxFQUFFLElBQUk7UUFDbkIsK0RBQStEO1FBQy9ELGNBQWMsRUFBRSxFQUFFO1FBQ2xCLDJFQUEyRTtRQUMzRSxZQUFZLEVBQUUsSUFBSTtRQUNsQix3RUFBd0U7UUFDeEUsYUFBYSxFQUFFLEVBQUU7UUFDakIsNEZBQTRGO1FBQzVGLG1CQUFtQixFQUFFLEdBQUc7UUFDeEIsK0VBQStFO1FBQy9FLG9CQUFvQixFQUFFLEdBQUc7S0FDMUI7SUFDRCxLQUFLLEVBQUU7UUFDTCxlQUFlLEVBQUUsUUFBUSxDQUFDLFNBQVM7S0FDcEM7SUFDRCxRQUFRLEVBQUU7UUFDUixNQUFNLEVBQUUsbUJBQW1CO1FBQzNCLEtBQUssRUFBRSxrQkFBa0I7UUFDekIsTUFBTSxFQUFFLHFDQUFxQztRQUM3QyxLQUFLLEVBQUUsd0NBQXdDO1FBQy9DLFlBQVksRUFBRSxrQ0FBa0M7S0FDakQ7SUFDRCxLQUFLLEVBQUU7UUFDTCxNQUFNLEVBQUUsaUJBQWlCO1FBQ3pCLEtBQUssRUFBRSxlQUFlO1FBQ3RCLEdBQUcsRUFBRSxRQUFRO1FBQ2IsS0FBSyxFQUFFLFVBQVU7S0FDbEI7Q0FDTyxDQUFDO0FBRVg7Ozs7R0FJRztBQUNILFNBQVMsbUJBQW1CLENBQUMsSUFBWTtJQUN2QyxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGlCQUFpQixDQUFDLE1BQWM7SUFDdkMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxPQUFPLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDL0QsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsZUFBZSxDQUFDLE9BQXNCLEVBQUUsSUFBWTtJQUMzRCxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDakMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1IsTUFBTSxJQUFJLEtBQUssQ0FDYixHQUFHLElBQUkscUNBQXFDO1lBQzFDLGdFQUFnRSxDQUNuRSxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFDO0FBQ1osQ0FBQztBQThCRDs7R0FFRztBQUNILFNBQVMsbUJBQW1CLENBQzFCLE1BRWEsRUFDYixRQUE2QztJQUU3QyxPQUFPO1FBQ0wsVUFBVSxFQUFFLE1BQU0sRUFBRSxVQUFVLElBQUksUUFBUSxDQUFDLE1BQU07UUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLElBQUksUUFBUSxDQUFDLE9BQU87UUFDNUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLG9CQUFvQjtLQUNuRCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFhLE9BQVEsU0FBUSxzQkFBUztJQTBCcEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxHQUFRLEVBQUUsS0FBb0I7UUFDdEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQTFCSCxnQkFBVyxHQUFHLFNBQWtCLENBQUM7UUE0Qi9DLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFBLGtDQUFZLEVBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxnQkFBTSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLGVBQWUsRUFBRTtZQUN4RSxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxpQkFBaUI7WUFDMUMsV0FBVyxFQUFFLDBCQUEwQixLQUFLLENBQUMsSUFBSSxFQUFFO1lBQ25ELG9CQUFvQixFQUFFO2dCQUNwQixrQkFBa0IsRUFBRSxJQUFJO2dCQUN4QixjQUFjLEVBQUUsRUFBRTthQUNuQjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVyQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixNQUFNLGVBQWUsR0FBb0I7WUFDdkMsSUFBSSxFQUFFLFNBQVM7WUFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQ3JCLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNO1NBQ2hDLENBQUM7UUFDRixJQUFJLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTyxhQUFhO1FBQ25CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUMzQyxJQUFJLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ2hDLGlDQUFXLENBQUMsSUFBSSxDQUNkLHFCQUFxQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksNkNBQTZDO2dCQUMvRSxrRUFBa0UsQ0FDckUsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRU8sY0FBYztRQUNwQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDM0MsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBRXJFLElBQUksQ0FBQyxTQUFTO1lBQ1osWUFBWSxLQUFLLFFBQVE7Z0JBQ3ZCLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDO2dCQUNyQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyxzQkFBc0IsQ0FDNUIsUUFBZ0Q7UUFFaEQsT0FBTztZQUNMLFlBQVksRUFDVixRQUFRLENBQUMsWUFBWSxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQy9ELGNBQWMsRUFBRSxRQUFRLENBQUMsY0FBYyxJQUFJLFlBQVk7WUFDdkQsZUFBZSxFQUNiLFFBQVEsQ0FBQyxlQUFlLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGdCQUFnQjtZQUN4RSxrQkFBa0IsRUFDaEIsUUFBUSxDQUFDLGtCQUFrQjtnQkFDM0IsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLG1CQUFtQjtZQUMvQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsa0JBQWtCO1lBQy9DLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtZQUNuQixtQkFBbUIsRUFBRSxRQUFRLENBQUMsbUJBQW1CO1lBQ2pELEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztZQUNyQixXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVc7WUFDakMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLGtCQUFrQjtZQUMvQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsZ0JBQWdCO1NBQzVDLENBQUM7SUFDSixDQUFDO0lBRU8sb0JBQW9CLENBQzFCLFFBQWdEO1FBRWhELE1BQU0sV0FBVyxHQUF3QjtZQUN2QyxJQUFJLEVBQUUsUUFBUTtZQUNkLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQztZQUN4QyxhQUFhLEVBQUUsUUFBUSxDQUFDLGFBQWE7WUFDckMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUErQztZQUNwRSxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07WUFDdkIsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO1lBQ3pCLGNBQWMsRUFBRSxRQUFRLENBQUMsY0FBYztZQUN2QyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsa0JBQWtCO1lBQy9DLDBCQUEwQixFQUFFLFFBQVEsQ0FBQywwQkFBMEI7U0FDaEUsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQ3pCLDZCQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUNwRCxDQUFDO0lBQ0osQ0FBQztJQUVPLHNCQUFzQixDQUM1QixRQUFnRDtRQUVoRCxNQUFNLGFBQWEsR0FBMEI7WUFDM0MsSUFBSSxFQUFFLFVBQVU7WUFDaEIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDO1lBQ3hDLGtCQUFrQixFQUFFLFFBQVEsQ0FBQyxrQkFBa0IsSUFBSSxLQUFLO1lBQ3hELFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWTtZQUNuQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsZ0JBQWdCO1lBQzNDLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTztZQUN6QixXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVc7WUFDakMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxVQUFpRDtTQUN2RSxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FDekIsNkJBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQ3RELENBQUM7SUFDSixDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM3QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUN0RCxNQUFNLFdBQVcsR0FBWTtZQUMzQixTQUFTLEVBQUUsWUFBWSxDQUFDLFNBQVMsSUFBSSxLQUFLO1lBQzFDLFVBQVUsRUFBRTtnQkFDVixNQUFNLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtnQkFDeEUsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsWUFBWSxFQUFFO29CQUNaLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsZUFBZTtvQkFDOUMsU0FBUyxFQUFFLElBQUk7aUJBQ2hCO2FBQ0Y7U0FDRixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FDeEIsMkJBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUMvRCxDQUFDO0lBQ0osQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3BELE1BQU0sVUFBVSxHQUFZO1lBQzFCLFNBQVMsRUFBRSxXQUFXLENBQUMsU0FBUyxJQUFJLEtBQUs7WUFDekMsVUFBVSxFQUFFO2dCQUNWLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFO2dCQUN2RSxLQUFLLEVBQUUsS0FBSyxDQUFDLDRCQUE0QjthQUMxQztTQUNGLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUN4QiwyQkFBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQzdELENBQUM7SUFDSixDQUFDO0lBRU8saUJBQWlCO1FBQ3ZCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDcEQsTUFBTSxVQUFVLEdBQVk7WUFDMUIsU0FBUyxFQUFFLFdBQVcsQ0FBQyxTQUFTLElBQUksS0FBSztTQUMxQyxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FDeEIsMkJBQWMsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUM3RCxDQUFDO0lBQ0osQ0FBQztJQUVPLGNBQWM7UUFDcEIsTUFBTSxhQUFhLEdBQTBCO1lBQzNDLElBQUksRUFBRSxVQUFVO1lBQ2hCLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtZQUN4QyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7WUFDcEMsc0JBQXNCLEVBQUU7Z0JBQ3RCO29CQUNFLFNBQVMsRUFBRSxZQUFZO29CQUN2QixZQUFZLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7b0JBQ3pDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtpQkFDOUM7YUFDRjtTQUNGLENBQUM7UUFDRixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUNuQyw2QkFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxZQUFZLEVBQUUsYUFBYSxDQUFDLENBQ3JFLENBQUM7SUFDSixDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLGlCQUFpQixJQUFJLEVBQUUsQ0FBQztRQUNsRSxNQUFNLG1CQUFtQixHQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsT0FBTztZQUN6QyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUM7UUFFaEQsbUNBQW1DO1FBQ25DLElBQUksU0FBeUMsQ0FBQztRQUM5QyxJQUFJLFdBQVcsQ0FBQyxlQUFlLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDMUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUN4QixDQUFDO2FBQU0sSUFBSSxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkMsU0FBUyxHQUFHO2dCQUNWLE9BQU8sRUFBRSxXQUFXLENBQUMsZUFBZSxDQUFDLE9BQU8sSUFBSSxJQUFJO2dCQUNwRCxlQUFlLEVBQUUsV0FBVyxDQUFDLGVBQWUsQ0FBQyxlQUFlLElBQUksQ0FBQzthQUNsRSxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixTQUFTLEdBQUcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNwRCxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQWdCO1lBQzlCLElBQUksRUFBRSxPQUFPO1lBQ2IsU0FBUyxFQUFFLE1BQU07WUFDakIsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLGlCQUFpQixJQUFJLG1CQUFtQjtZQUN2RSxzQkFBc0IsRUFBRSxXQUFXLENBQUMsc0JBQXNCO1lBQzFELGNBQWMsRUFBRSxXQUFXLENBQUMsY0FBYztZQUMxQyx5QkFBeUIsRUFBRSxJQUFJO1lBQy9CLGVBQWUsRUFBRSxTQUFTO1NBQzNCLENBQUM7UUFDRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQzdDLCtCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxlQUFlLEVBQUUsVUFBVSxDQUFDLENBQ3RFLENBQUM7SUFDSixDQUFDO0lBRU8scUJBQXFCO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUVPLGtCQUFrQjtRQUN4QixNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLG1CQUFtQixDQUN2RSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQzFCO1lBQ0UsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxhQUFhO1lBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsY0FBYztTQUNqRCxDQUNGLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBb0I7WUFDbkMsSUFBSSxFQUFFLFFBQVE7WUFDZCxVQUFVLEVBQUUsTUFBTTtZQUNsQixJQUFJLEVBQUUsaUJBQUksQ0FBQyxTQUFTLENBQ2xCLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FDakU7WUFDRCxPQUFPLEVBQUUsZUFBZTtZQUN4QixPQUFPLEVBQUUsb0JBQU8sQ0FBQyxXQUFXO1lBQzVCLFlBQVksRUFBRSx5QkFBWSxDQUFDLE1BQU07WUFDakMsVUFBVTtZQUNWLE9BQU87WUFDUCxvQkFBb0I7WUFDcEIsV0FBVyxFQUFFO2dCQUNYLFFBQVEsRUFBRSxnQ0FBbUIsQ0FBQyxJQUFJO2dCQUNsQyxVQUFVLEVBQUUsdUJBQVUsQ0FBQyxlQUFlO2FBQ3ZDO1lBQ0QsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUM3QixhQUFhLEVBQUU7Z0JBQ2IsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVM7cUJBQzlCLGNBQWMsRUFBRTtxQkFDaEIsU0FBUyxDQUFDLFVBQVUsQ0FBQztnQkFDeEIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVM7cUJBQzlCLGNBQWMsRUFBRTtxQkFDaEIsU0FBUyxDQUFDLFVBQVUsQ0FBQztnQkFDeEIsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFO2FBQ2hEO1lBQ0QsV0FBVyxFQUFFLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtTQUMzQyxDQUFDO1FBRUYsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQ2hDLDJCQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FDL0QsQ0FBQztRQUVGLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLE1BQU0sT0FBTyxHQUEyQjtZQUN0QyxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUU7WUFDL0MsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFO1lBQzNDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRTtZQUMvQyxZQUFZLEVBQUUsTUFBTTtZQUNwQixpQkFBaUIsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRTtZQUNwRCxtQkFBbUIsRUFBRSxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNO1lBQzFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFO1lBQ2pELHNCQUFzQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUU7WUFDN0QseUJBQXlCLEVBQUUsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTTtZQUNoRCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRTtTQUNyRCxDQUFDO1FBRUYsZ0RBQWdEO1FBQ2hELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzNFLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsT0FBTyxDQUFDLHNCQUFzQixHQUFHLFdBQVcsWUFBWSxFQUFFLENBQUM7UUFDN0QsQ0FBQztRQUVELE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVPLHNCQUFzQixDQUFDLE1BQXFCO1FBQ2xELE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLG1CQUFtQixDQUN2RSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFDckM7WUFDRSxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFlBQVk7WUFDN0MsT0FBTyxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxhQUFhO1NBQ2hELENBQ0YsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFvQjtZQUNsQyxJQUFJLEVBQUUsUUFBUTtZQUNkLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLElBQUksRUFBRSxpQkFBSSxDQUFDLFNBQVMsQ0FDbEIsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUNoRTtZQUNELE9BQU8sRUFBRSxlQUFlO1lBQ3hCLE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7WUFDNUIsWUFBWSxFQUFFLHlCQUFZLENBQUMsTUFBTTtZQUNqQyxVQUFVO1lBQ1YsT0FBTztZQUNQLG9CQUFvQjtZQUNwQixXQUFXLEVBQUUsRUFBRSxRQUFRLEVBQUUsZ0NBQW1CLENBQUMsSUFBSSxFQUFFO1lBQ25ELFdBQVcsRUFBRTtnQkFDWCxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUU7Z0JBQy9DLGlCQUFpQixFQUFFLFNBQVM7YUFDN0I7U0FDRixDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQy9CLDJCQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FDN0QsQ0FBQztRQUVGLE1BQU0sYUFBYSxHQUFHLGVBQWUsQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUNsRSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUU1QyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxtQkFBbUIsQ0FDdkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUNoQztZQUNFLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsbUJBQW1CO1lBQ3BELE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsb0JBQW9CO1NBQ3ZELENBQ0YsQ0FBQztRQUVGLE1BQU0saUJBQWlCLEdBQW9CO1lBQ3pDLElBQUksRUFBRSxRQUFRO1lBQ2QsVUFBVSxFQUFFLE1BQU07WUFDbEIsSUFBSSxFQUFFLGlCQUFJLENBQUMsU0FBUyxDQUNsQixHQUFHLGdCQUFnQixDQUFDLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQ3ZFO1lBQ0QsT0FBTyxFQUFFLGVBQWU7WUFDeEIsT0FBTyxFQUFFLG9CQUFPLENBQUMsV0FBVztZQUM1QixZQUFZLEVBQUUseUJBQVksQ0FBQyxNQUFNO1lBQ2pDLFVBQVU7WUFDVixPQUFPO1lBQ1Asb0JBQW9CO1lBQ3BCLFdBQVcsRUFBRTtnQkFDWCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRTtnQkFDakQsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUU7YUFDckQ7U0FDRixDQUFDO1FBRUYsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQ3RDLDJCQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQyxDQUMzRSxDQUFDO1FBRUYsTUFBTSxrQkFBa0IsR0FBRyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM1RCxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDdkUsU0FBUyxFQUFFLENBQUM7U0FDYixDQUFDLENBQUM7UUFFSCxNQUFNLG9CQUFvQixHQUFHLGVBQWUsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFFbkUsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVPLFNBQVM7UUFDZixNQUFNLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBRWhFLE1BQU0sUUFBUSxHQUFrQjtZQUM5QixVQUFVLEVBQUUsTUFBTTtZQUNsQixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDcEIsV0FBVyxFQUFFLGtCQUFrQjtZQUMvQixxQkFBcUIsRUFBRSxLQUFLO1lBQzVCLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsVUFBVSxFQUFFLGdCQUFnQjtZQUM1QixXQUFXO1lBQ1gsV0FBVztZQUNYLFVBQVUsRUFBRTtnQkFDVjtvQkFDRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLE1BQU07b0JBQzFDLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYTtvQkFDMUIsV0FBVyxFQUFFLG1CQUFtQjtpQkFDakM7Z0JBQ0Q7b0JBQ0UsV0FBVyxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxLQUFLO29CQUN6QyxNQUFNLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtvQkFDL0IsV0FBVyxFQUFFLG1CQUFtQjtpQkFDakM7Z0JBQ0Q7b0JBQ0UsV0FBVyxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHO29CQUN2QyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU87b0JBQ3BCLFdBQVcsRUFBRSxrQkFBa0I7b0JBQy9CLGNBQWMsRUFBRSxLQUFLO2lCQUN0QjtnQkFDRDtvQkFDRSxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEtBQUs7b0JBQ3pDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTztvQkFDcEIsV0FBVyxFQUFFLGtCQUFrQjtvQkFDL0IsY0FBYyxFQUFFLEtBQUs7aUJBQ3RCO2dCQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxVQUFVLElBQUksRUFBRSxDQUFDO2FBQ3RDO1NBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsbUJBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRU8sbUJBQW1CO1FBS3pCLElBQUksSUFBSSxDQUFDLGVBQWU7WUFBRSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7UUFFdEQsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDcEQsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQy9DLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDdEQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsZUFBZSxHQUFHO2dCQUNyQixXQUFXLEVBQUUsU0FBUztnQkFDdEIsV0FBVyxFQUFFLFNBQVM7Z0JBQ3RCLFVBQVUsRUFBRSxTQUFTO2FBQ3RCLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFFTyxtQkFBbUI7UUFLekIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFPLENBQUM7UUFDbEMsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFN0MsTUFBTSxVQUFVLEdBQUcsd0JBQVUsQ0FBQyxVQUFVLENBQ3RDLElBQUksRUFDSixHQUFHLElBQUksQ0FBQyxVQUFVLFlBQVksRUFDOUIsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQzNCLENBQUM7UUFFRixNQUFNLFdBQVcsR0FBRyxJQUFJLG9DQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsYUFBYSxFQUFFO1lBQ3pFLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLFVBQVUsRUFBRSw4Q0FBcUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1NBQ3RELENBQUMsQ0FBQztRQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDNUQsQ0FBQztJQUVPLHFCQUFxQjtRQUszQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUksQ0FBQztRQUNsQyxNQUFNLFdBQVcsR0FDZixTQUFTLENBQUMsV0FBVztZQUNyQixDQUFDLFNBQVMsQ0FBQyxjQUFjO2dCQUN2QixDQUFDLENBQUMsb0NBQVcsQ0FBQyxrQkFBa0IsQ0FDNUIsSUFBSSxFQUNKLEdBQUcsSUFBSSxDQUFDLFVBQVUsYUFBYSxFQUMvQixTQUFTLENBQUMsY0FBYyxDQUN6QjtnQkFDSCxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFakIsT0FBTztZQUNMLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBWTtZQUNuQyxXQUFXO1lBQ1gsVUFBVSxFQUFFLFNBQVM7U0FDdEIsQ0FBQztJQUNKLENBQUM7SUFFTyxlQUFlO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRS9CLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU87UUFFeEIsMkVBQTJFO1FBQzNFLDRFQUE0RTtRQUM1RSxtRUFBbUU7UUFDbkUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFELElBQUkscUJBQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxhQUFhLEVBQUU7WUFDckQsSUFBSSxFQUFFLFVBQVU7WUFDaEIsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUM3QixNQUFNLEVBQUUsMEJBQVksQ0FBQyxTQUFTLENBQzVCLElBQUksc0NBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUNsRDtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSx1QkFBUyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLGFBQWEsRUFBRTtZQUNuRCxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxhQUFhO1lBQ3BDLEtBQUssRUFBRSxTQUFTO1lBQ2hCLFdBQVcsRUFBRSxvQkFBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7U0FDbkQsQ0FBQyxDQUFDO1FBRUgsSUFBSSx1QkFBUyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLGFBQWEsRUFBRTtZQUNuRCxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxhQUFhO1lBQ3BDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUk7WUFDdEIsV0FBVyxFQUFFLG9CQUFvQixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtTQUNuRCxDQUFDLENBQUM7UUFFSCxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsZ0JBQWdCLEVBQUU7WUFDdEQsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsZ0JBQWdCO1lBQ3ZDLEtBQUssRUFBRTtnQkFDTCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTO2dCQUMzQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRO2dCQUMxQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxlQUFlO2FBQ2xDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUNYLFdBQVcsRUFBRSx5Q0FBeUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUU7U0FDeEUsQ0FBQyxDQUFDO1FBRUgsSUFBSSx1QkFBUyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLGtCQUFrQixFQUFFO1lBQ3hELEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLGtCQUFrQjtZQUN6QyxLQUFLLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztnQkFDcEIsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksWUFBWSxDQUFDO2dCQUM1RCxPQUFPLEVBQUU7b0JBQ1AsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUztvQkFDM0IsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUTtvQkFDMUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUTtpQkFDM0I7Z0JBQ0QsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTthQUNyQixDQUFDO1lBQ0YsV0FBVyxFQUFFLHNDQUFzQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtTQUNyRSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBbm1CRCwwQkFtbUJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXlsb2FkIENNUyBQYXR0ZXJuLlxuICpcbiAqIEEgaGlnaC1sZXZlbCBwYXR0ZXJuIHRoYXQgY3JlYXRlcyBhbGwgaW5mcmFzdHJ1Y3R1cmUgcmVxdWlyZWQgZm9yIGFcbiAqIFBheWxvYWQgQ01TIGRlcGxveW1lbnQgdXNpbmcgT3Blbk5leHQuXG4gKlxuICogUmVzb3VyY2VzIGNyZWF0ZWQ6XG4gKiAtIFJEUyBQb3N0Z3JlU1FMIGRhdGFiYXNlIChBdXJvcmEgb3IgSW5zdGFuY2UpXG4gKiAtIDMgUzMgYnVja2V0cyAoYXNzZXRzLCBjYWNoZSwgbWVkaWEpXG4gKiAtIER5bmFtb0RCIHRhYmxlICh0YWcgY2FjaGUgd2l0aCBHU0kpXG4gKiAtIFNRUyBGSUZPIHF1ZXVlIChyZXZhbGlkYXRpb24pXG4gKiAtIDMgTGFtYmRhIGZ1bmN0aW9ucyAoc2VydmVyLCBpbWFnZSBvcHRpbWlzYXRpb24sIHJldmFsaWRhdGlvbilcbiAqIC0gQ2xvdWRGcm9udCBkaXN0cmlidXRpb25cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcGF5bG9hZCA9IGFwcC5hZGRQYXR0ZXJuKFBhdHRlcm5GYWN0b3J5LmJ1aWxkKFwiUGF5bG9hZEFwcFwiLCB7XG4gKiAgIHR5cGU6IFwicGF5bG9hZFwiLFxuICogICBuYW1lOiBcIm15LWNtc1wiXG4gKiB9KSk7XG4gKlxuICogLy8gRXNjYXBlIGhhdGNoZXNcbiAqIHBheWxvYWQuZ2V0RGF0YWJhc2UoKS5ncmFudENvbm5lY3Qob3RoZXJMYW1iZGEpO1xuICovXG5cbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBDZm5PdXRwdXQsIFN0YWNrIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zZWNyZXRzXCI7XG5pbXBvcnQge1xuICBDb2RlLFxuICBSdW50aW1lLFxuICBBcmNoaXRlY3R1cmUsXG4gIEZ1bmN0aW9uVXJsQXV0aFR5cGUsXG4gIHR5cGUgSUZ1bmN0aW9uXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQge1xuICBDZXJ0aWZpY2F0ZSxcbiAgQ2VydGlmaWNhdGVWYWxpZGF0aW9uLFxuICB0eXBlIElDZXJ0aWZpY2F0ZVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiO1xuaW1wb3J0IHsgSG9zdGVkWm9uZSwgQVJlY29yZCwgUmVjb3JkVGFyZ2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzXCI7XG5pbXBvcnQgeyBDbG91ZEZyb250VGFyZ2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzLXRhcmdldHNcIjtcblxuaW1wb3J0IHR5cGUgQXBwIGZyb20gXCIuLi8uLi9hcHAuanNcIjtcbmltcG9ydCB7IHR5cGUgSVBheWxvYWRQcm9wcywgdHlwZSBJUGF5bG9hZCB9IGZyb20gXCIuL2ludGVyZmFjZXMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgdHlwZSBNYW5pZmVzdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvbWFuaWZlc3RXcml0ZXIuanNcIjtcbmltcG9ydCB7XG4gIHR5cGUgUmVsYXRpb25hbERhdGFiYXNlLFxuICB0eXBlIER5bmFtb0RCRGF0YWJhc2UsXG4gIERhdGFiYXNlRmFjdG9yeSxcbiAgdHlwZSBBdXJvcmFEYXRhYmFzZVByb3BzLFxuICB0eXBlIEluc3RhbmNlRGF0YWJhc2VQcm9wcyxcbiAgdHlwZSBEeW5hbW9EQkRhdGFiYXNlUHJvcHNcbn0gZnJvbSBcIi4vZGF0YWJhc2UuanNcIjtcbmltcG9ydCB7XG4gIENvbXB1dGVGYWN0b3J5LFxuICB0eXBlIExhbWJkYUNvbXB1dGUsXG4gIEludm9rZU1vZGUsXG4gIHR5cGUgQ29kZUxhbWJkYVByb3BzXG59IGZyb20gXCIuL2NvbXB1dGUuanNcIjtcbmltcG9ydCB7IFN0b3JhZ2VGYWN0b3J5LCB0eXBlIFN0b3JhZ2UsIHR5cGUgUzNQcm9wcyB9IGZyb20gXCIuL3N0b3JhZ2UuanNcIjtcbmltcG9ydCB7XG4gIE1lc3NhZ2luZ0ZhY3RvcnksXG4gIHR5cGUgUXVldWVNZXNzYWdpbmcsXG4gIHR5cGUgSVF1ZXVlUHJvcHNcbn0gZnJvbSBcIi4vbWVzc2FnaW5nLmpzXCI7XG5pbXBvcnQgeyBDZG5GYWN0b3J5LCB0eXBlIENkbiwgdHlwZSBTbWFydENkblByb3BzIH0gZnJvbSBcIi4vY2RuLmpzXCI7XG5pbXBvcnQgeyBGamFsbExvZ2dlciB9IGZyb20gXCIuLi8uLi91dGlscy92YWxpZGF0aW9uTG9nZ2VyLmpzXCI7XG5pbXBvcnQgeyB0b1Bhc2NhbENhc2UgfSBmcm9tIFwiLi4vLi4vdXRpbHMvY2FwaXRhbGlzZVN0cmluZy5qc1wiO1xuXG5jb25zdCBQQVlMT0FEX0RFRkFVTFRTID0ge1xuICAvKiogUGF0aCB0byBPcGVuTmV4dCBvdXRwdXQgcmVsYXRpdmUgdG8gYXBwIGZvbGRlciAoQ0RLIHJ1bnMgZnJvbSBmamFsbC88YXBwbmFtZT4pICovXG4gIFNPVVJDRTogXCIuLi8uLlwiLFxuICAvKiogQ2xvdWRGcm9udCByZXF1aXJlcyB1cy1lYXN0LTEgZm9yIGNlcnRhaW4gcmVzb3VyY2VzOyB1c2VkIGFzIHJlZ2lvbiBmYWxsYmFjayAqL1xuICBGQUxMQkFDS19SRUdJT046IFwidXMtZWFzdC0xXCIsXG4gIERBVEFCQVNFOiB7XG4gICAgVFlQRTogXCJJbnN0YW5jZVwiIGFzIGNvbnN0LFxuICAgIC8qKiBBV1MgZGVmYXVsdDsgNyBkYXlzIGNvdmVycyBtb3N0IGFjY2lkZW50YWwgZGF0YSBsb3NzIHJlY292ZXJ5IHNjZW5hcmlvcyAqL1xuICAgIEJBQ0tVUF9SRVRFTlRJT046IDcsXG4gICAgREVMRVRJT05fUFJPVEVDVElPTjogdHJ1ZVxuICB9LFxuICBDT01QVVRFOiB7XG4gICAgLyoqIDEuNSBHQiBiYWxhbmNlcyBOZXh0LmpzIFNTUiBwZXJmb3JtYW5jZSB2cyBjb3N0OyBiZWxvdyB0aGlzIHJpc2tzIE9PTSBvbiBjb21wbGV4IHBhZ2VzICovXG4gICAgU0VSVkVSX01FTU9SWTogMTUzNixcbiAgICAvKiogQVBJIEdhdGV3YXkgZGVmYXVsdCBtYXg7IHN1ZmZpY2llbnQgZm9yIG1vc3QgU1NSIHJlbmRlcnMgKi9cbiAgICBTRVJWRVJfVElNRU9VVDogMzAsXG4gICAgLyoqIFNoYXJwIGltYWdlIHByb2Nlc3NpbmcgbmVlZHMgbWVtb3J5IHByb3BvcnRpb25hbCB0byBpbWFnZSBkaW1lbnNpb25zICovXG4gICAgSU1BR0VfTUVNT1JZOiAxNTM2LFxuICAgIC8qKiBJbWFnZSBwcm9jZXNzaW5nIHR5cGljYWxseSBjb21wbGV0ZXMgaW4gPDEwczsgMzBzIHByb3ZpZGVzIG1hcmdpbiAqL1xuICAgIElNQUdFX1RJTUVPVVQ6IDMwLFxuICAgIC8qKiBSZXZhbGlkYXRpb24gaXMgbGlnaHR3ZWlnaHQgKEhUVFAgY2FsbCArIGNhY2hlIHdyaXRlKTsgaGFsZiBvZiBzZXJ2ZXIgbWVtb3J5IHN1ZmZpY2VzICovXG4gICAgUkVWQUxJREFUSU9OX01FTU9SWTogNzY4LFxuICAgIC8qKiA1IG1pbnV0ZXMgYWxsb3dzIGJhdGNoIHJldmFsaWRhdGlvbiBvZiBtYW55IHBhZ2VzIGluIGEgc2luZ2xlIGludm9jYXRpb24gKi9cbiAgICBSRVZBTElEQVRJT05fVElNRU9VVDogMzAwXG4gIH0sXG4gIENBQ0hFOiB7XG4gICAgTUFYX0FHRV9TRUNPTkRTOiAzMTUzNjAwMCAvLyAxIHllYXJcbiAgfSxcbiAgT1BFTk5FWFQ6IHtcbiAgICBBU1NFVFM6IFwiLm9wZW4tbmV4dC9hc3NldHNcIixcbiAgICBDQUNIRTogXCIub3Blbi1uZXh0L2NhY2hlXCIsXG4gICAgU0VSVkVSOiBcIi5vcGVuLW5leHQvc2VydmVyLWZ1bmN0aW9ucy9kZWZhdWx0XCIsXG4gICAgSU1BR0U6IFwiLm9wZW4tbmV4dC9pbWFnZS1vcHRpbWl6YXRpb24tZnVuY3Rpb25cIixcbiAgICBSRVZBTElEQVRJT046IFwiLm9wZW4tbmV4dC9yZXZhbGlkYXRpb24tZnVuY3Rpb25cIlxuICB9LFxuICBQQVRIUzoge1xuICAgIFNUQVRJQzogXCIvX25leHQvc3RhdGljLypcIixcbiAgICBJTUFHRTogXCIvX25leHQvaW1hZ2UqXCIsXG4gICAgQVBJOiBcIi9hcGkvKlwiLFxuICAgIEFETUlOOiBcIi9hZG1pbi8qXCJcbiAgfVxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBDb252ZXJ0IGEgbmFtZSB0byBhIHZhbGlkIFJEUyBkYXRhYmFzZSBuYW1lIChhbHBoYW51bWVyaWMgb25seSkuXG4gKiBDbG91ZEZvcm1hdGlvbiBFYXJseVZhbGlkYXRpb24gaG9vayBlbmZvcmNlczogXlthLXpBLVpdezF9KD86LT9bYS16QS1aMC05XSl7MCw2Mn0kXG4gKiBSRFMgQVBJIHJlamVjdHMgaHlwaGVucy4gSW50ZXJzZWN0aW9uID0gYWxwaGFudW1lcmljIG9ubHkuXG4gKi9cbmZ1bmN0aW9uIHRvVmFsaWREYXRhYmFzZU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bXmEtejAtOV0vZywgXCJcIik7XG59XG5cbi8qKlxuICogRXh0cmFjdCByb290IGRvbWFpbiBmcm9tIGEgZnVsbCBkb21haW4gbmFtZS5cbiAqIGUuZy4sIFwiY21zLmV4YW1wbGUuY29tXCIgLT4gXCJleGFtcGxlLmNvbVwiXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RSb290RG9tYWluKGRvbWFpbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGFydHMgPSBkb21haW4uc3BsaXQoXCIuXCIpO1xuICByZXR1cm4gcGFydHMubGVuZ3RoID4gMiA/IHBhcnRzLnNsaWNlKC0yKS5qb2luKFwiLlwiKSA6IGRvbWFpbjtcbn1cblxuLyoqXG4gKiBTYWZlbHkgZ2V0IHRoZSB1bmRlcmx5aW5nIExhbWJkYSBmdW5jdGlvbiBmcm9tIGEgY29tcHV0ZSByZXNvdXJjZS5cbiAqIFRocm93cyBhIGNsZWFyIGVycm9yIGlmIHRoZSBmdW5jdGlvbiBpcyBub3QgYXZhaWxhYmxlLlxuICovXG5mdW5jdGlvbiByZXF1aXJlRnVuY3Rpb24oY29tcHV0ZTogTGFtYmRhQ29tcHV0ZSwgbmFtZTogc3RyaW5nKTogSUZ1bmN0aW9uIHtcbiAgY29uc3QgZm4gPSBjb21wdXRlLmdldEZ1bmN0aW9uKCk7XG4gIGlmICghZm4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHtuYW1lfSBMYW1iZGEgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4gYCArXG4gICAgICAgIFwiVGhpcyBpbmRpY2F0ZXMgYW4gaW50ZXJuYWwgZXJyb3IgaW4gY29tcHV0ZSByZXNvdXJjZSBjcmVhdGlvbi5cIlxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGZuO1xufVxuXG4vKipcbiAqIEJhc2UgZGF0YWJhc2UgcHJvcGVydGllcyBzaGFyZWQgYmV0d2VlbiBBdXJvcmEgYW5kIEluc3RhbmNlLlxuICogVXNlcyBQaWNrIHRvIGV4dHJhY3QgY29tbW9uIHByb3BlcnRpZXMgZnJvbSB0aGUgZGF0YWJhc2UgY29uZmlnLlxuICovXG50eXBlIEJhc2VEYXRhYmFzZVByb3BzID0gUGljazxcbiAgSW5zdGFuY2VEYXRhYmFzZVByb3BzLFxuICB8IFwiZGF0YWJhc2VOYW1lXCJcbiAgfCBcImRhdGFiYXNlRW5naW5lXCJcbiAgfCBcImJhY2t1cFJldGVudGlvblwiXG4gIHwgXCJkZWxldGlvblByb3RlY3Rpb25cIlxuICB8IFwicHVibGljbHlBY2Nlc3NpYmxlXCJcbiAgfCBcInBvcnRcIlxuICB8IFwicGVyZm9ybWFuY2VJbnNpZ2h0c1wiXG4gIHwgXCJwcm94eVwiXG4gIHwgXCJjcmVkZW50aWFsc1wiXG4gIHwgXCJzbmFwc2hvdElkZW50aWZpZXJcIlxuICB8IFwic25hcHNob3RVc2VybmFtZVwiXG4+O1xuXG4vKipcbiAqIExhbWJkYSBjb25maWd1cmF0aW9uIHdpdGggcmVzb2x2ZWQgZGVmYXVsdHMuXG4gKi9cbmludGVyZmFjZSBSZXNvbHZlZExhbWJkYUNvbmZpZyB7XG4gIG1lbW9yeVNpemU6IG51bWJlcjtcbiAgdGltZW91dDogbnVtYmVyO1xuICBlcGhlbWVyYWxTdG9yYWdlU2l6ZT86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IExhbWJkYSBjb25maWcgZnJvbSBwcm9wcyB3aXRoIGRlZmF1bHRzLlxuICovXG5mdW5jdGlvbiByZXNvbHZlTGFtYmRhQ29uZmlnKFxuICBjb25maWc6XG4gICAgfCB7IG1lbW9yeVNpemU/OiBudW1iZXI7IHRpbWVvdXQ/OiBudW1iZXI7IGVwaGVtZXJhbFN0b3JhZ2VTaXplPzogbnVtYmVyIH1cbiAgICB8IHVuZGVmaW5lZCxcbiAgZGVmYXVsdHM6IHsgbWVtb3J5OiBudW1iZXI7IHRpbWVvdXQ6IG51bWJlciB9XG4pOiBSZXNvbHZlZExhbWJkYUNvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgbWVtb3J5U2l6ZTogY29uZmlnPy5tZW1vcnlTaXplID8/IGRlZmF1bHRzLm1lbW9yeSxcbiAgICB0aW1lb3V0OiBjb25maWc/LnRpbWVvdXQgPz8gZGVmYXVsdHMudGltZW91dCxcbiAgICBlcGhlbWVyYWxTdG9yYWdlU2l6ZTogY29uZmlnPy5lcGhlbWVyYWxTdG9yYWdlU2l6ZVxuICB9O1xufVxuXG4vKipcbiAqIFBheWxvYWQgQ01TIHBhdHRlcm4gaW1wbGVtZW50YXRpb24uXG4gKlxuICogQ29tcG9zZXMgYWxsIHJlcXVpcmVkIEFXUyByZXNvdXJjZXMgZm9yIGEgUGF5bG9hZCBkZXBsb3ltZW50LlxuICovXG5leHBvcnQgY2xhc3MgUGF5bG9hZCBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElQYXlsb2FkIHtcbiAgcHVibGljIHJlYWRvbmx5IHBhdHRlcm5UeXBlID0gXCJwYXlsb2FkXCIgYXMgY29uc3Q7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhcHA6IEFwcDtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogSVBheWxvYWRQcm9wcztcbiAgcHJpdmF0ZSByZWFkb25seSBwYXNjYWxOYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgX3BheWxvYWRTZWNyZXQ6IFNlY3JldDtcblxuICBwcml2YXRlIF9kYXRhYmFzZSE6IFJlbGF0aW9uYWxEYXRhYmFzZTtcbiAgcHJpdmF0ZSBfc2VydmVyITogTGFtYmRhQ29tcHV0ZTtcbiAgcHJpdmF0ZSBfaW1hZ2VPcHRpbWlzYXRpb24hOiBMYW1iZGFDb21wdXRlO1xuICBwcml2YXRlIF9yZXZhbGlkYXRpb24hOiBMYW1iZGFDb21wdXRlO1xuICBwcml2YXRlIF9hc3NldHNCdWNrZXQhOiBTdG9yYWdlO1xuICBwcml2YXRlIF9jYWNoZUJ1Y2tldCE6IFN0b3JhZ2U7XG4gIHByaXZhdGUgX21lZGlhQnVja2V0ITogU3RvcmFnZTtcbiAgcHJpdmF0ZSBfdGFnQ2FjaGUhOiBEeW5hbW9EQkRhdGFiYXNlO1xuICBwcml2YXRlIF9yZXZhbGlkYXRpb25RdWV1ZSE6IFF1ZXVlTWVzc2FnaW5nO1xuICBwcml2YXRlIF9jZG4hOiBDZG47XG4gIHByaXZhdGUgX3Jlc29sdmVkRG9tYWluOlxuICAgIHwge1xuICAgICAgICBkb21haW5OYW1lczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgICAgIGNlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGUgfCB1bmRlZmluZWQ7XG4gICAgICAgIGhvc3RlZFpvbmU6IFJldHVyblR5cGU8dHlwZW9mIEhvc3RlZFpvbmUuZnJvbUxvb2t1cD4gfCB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgYXBwOiBBcHAsIHByb3BzOiBJUGF5bG9hZFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuYXBwID0gYXBwO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLnBhc2NhbE5hbWUgPSB0b1Bhc2NhbENhc2UocHJvcHMubmFtZSk7XG4gICAgdGhpcy5fcGF5bG9hZFNlY3JldCA9IG5ldyBTZWNyZXQodGhpcywgYCR7dGhpcy5wYXNjYWxOYW1lfVBheWxvYWRTZWNyZXRgLCB7XG4gICAgICBzZWNyZXROYW1lOiBgJHtwcm9wcy5uYW1lfS9wYXlsb2FkLXNlY3JldGAsXG4gICAgICBkZXNjcmlwdGlvbjogYFBheWxvYWQgQ01TIHNlY3JldCBmb3IgJHtwcm9wcy5uYW1lfWAsXG4gICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICBleGNsdWRlUHVuY3R1YXRpb246IHRydWUsXG4gICAgICAgIHBhc3N3b3JkTGVuZ3RoOiA2NFxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5yZWdpc3Rlck1hbmlmZXN0KCk7XG4gICAgdGhpcy52YWxpZGF0ZVByb3BzKCk7XG5cbiAgICB0aGlzLmNyZWF0ZURhdGFiYXNlKCk7XG4gICAgdGhpcy5jcmVhdGVTdG9yYWdlQnVja2V0cygpO1xuICAgIHRoaXMuY3JlYXRlVGFnQ2FjaGUoKTtcbiAgICB0aGlzLmNyZWF0ZVJldmFsaWRhdGlvblF1ZXVlKCk7XG4gICAgdGhpcy5jcmVhdGVMYW1iZGFGdW5jdGlvbnMoKTtcbiAgICB0aGlzLmNyZWF0ZUNkbigpO1xuICAgIHRoaXMuY3JlYXRlRG5zUmVjb3JkKCk7XG4gICAgdGhpcy5leHBvcnRQYXR0ZXJuT3V0cHV0cygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3Rlck1hbmlmZXN0KCk6IHZvaWQge1xuICAgIGNvbnN0IG1hbmlmZXN0UGF0dGVybjogTWFuaWZlc3RQYXR0ZXJuID0ge1xuICAgICAgdHlwZTogXCJwYXlsb2FkXCIsXG4gICAgICBuYW1lOiB0aGlzLnByb3BzLm5hbWUsXG4gICAgICBzb3VyY2U6IFBBWUxPQURfREVGQVVMVFMuU09VUkNFXG4gICAgfTtcbiAgICB0aGlzLmFwcC5nZXRNYW5pZmVzdENvbGxlY3RvcigpLnNldFBhdHRlcm4obWFuaWZlc3RQYXR0ZXJuKTtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVQcm9wcygpOiB2b2lkIHtcbiAgICBjb25zdCBkYkNvbmZpZyA9IHRoaXMucHJvcHMuZGF0YWJhc2UgPz8ge307XG4gICAgaWYgKGRiQ29uZmlnLnB1YmxpY2x5QWNjZXNzaWJsZSkge1xuICAgICAgRmphbGxMb2dnZXIud2FybihcbiAgICAgICAgYFBheWxvYWQgZGF0YWJhc2UgJyR7dGhpcy5wcm9wcy5uYW1lfScgaXMgY29uZmlndXJlZCB3aXRoIHB1YmxpYyBhY2Nlc3NpYmlsaXR5LiBgICtcbiAgICAgICAgICBcIlRoaXMgaXMgYSBzZWN1cml0eSByaXNrIGFuZCBzaG91bGQgb25seSBiZSB1c2VkIGZvciBkZXZlbG9wbWVudC5cIlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURhdGFiYXNlKCk6IHZvaWQge1xuICAgIGNvbnN0IGRiQ29uZmlnID0gdGhpcy5wcm9wcy5kYXRhYmFzZSA/PyB7fTtcbiAgICBjb25zdCBkYXRhYmFzZVR5cGUgPSBkYkNvbmZpZy50eXBlID8/IFBBWUxPQURfREVGQVVMVFMuREFUQUJBU0UuVFlQRTtcblxuICAgIHRoaXMuX2RhdGFiYXNlID1cbiAgICAgIGRhdGFiYXNlVHlwZSA9PT0gXCJBdXJvcmFcIlxuICAgICAgICA/IHRoaXMuY3JlYXRlQXVyb3JhRGF0YWJhc2UoZGJDb25maWcpXG4gICAgICAgIDogdGhpcy5jcmVhdGVJbnN0YW5jZURhdGFiYXNlKGRiQ29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRCYXNlRGF0YWJhc2VQcm9wcyhcbiAgICBkYkNvbmZpZzogTm9uTnVsbGFibGU8SVBheWxvYWRQcm9wc1tcImRhdGFiYXNlXCJdPlxuICApOiBCYXNlRGF0YWJhc2VQcm9wcyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGFiYXNlTmFtZTpcbiAgICAgICAgZGJDb25maWcuZGF0YWJhc2VOYW1lID8/IHRvVmFsaWREYXRhYmFzZU5hbWUodGhpcy5wcm9wcy5uYW1lKSxcbiAgICAgIGRhdGFiYXNlRW5naW5lOiBkYkNvbmZpZy5kYXRhYmFzZUVuZ2luZSA/PyBcInBvc3RncmVzcWxcIixcbiAgICAgIGJhY2t1cFJldGVudGlvbjpcbiAgICAgICAgZGJDb25maWcuYmFja3VwUmV0ZW50aW9uID8/IFBBWUxPQURfREVGQVVMVFMuREFUQUJBU0UuQkFDS1VQX1JFVEVOVElPTixcbiAgICAgIGRlbGV0aW9uUHJvdGVjdGlvbjpcbiAgICAgICAgZGJDb25maWcuZGVsZXRpb25Qcm90ZWN0aW9uID8/XG4gICAgICAgIFBBWUxPQURfREVGQVVMVFMuREFUQUJBU0UuREVMRVRJT05fUFJPVEVDVElPTixcbiAgICAgIHB1YmxpY2x5QWNjZXNzaWJsZTogZGJDb25maWcucHVibGljbHlBY2Nlc3NpYmxlLFxuICAgICAgcG9ydDogZGJDb25maWcucG9ydCxcbiAgICAgIHBlcmZvcm1hbmNlSW5zaWdodHM6IGRiQ29uZmlnLnBlcmZvcm1hbmNlSW5zaWdodHMsXG4gICAgICBwcm94eTogZGJDb25maWcucHJveHksXG4gICAgICBjcmVkZW50aWFsczogZGJDb25maWcuY3JlZGVudGlhbHMsXG4gICAgICBzbmFwc2hvdElkZW50aWZpZXI6IGRiQ29uZmlnLnNuYXBzaG90SWRlbnRpZmllcixcbiAgICAgIHNuYXBzaG90VXNlcm5hbWU6IGRiQ29uZmlnLnNuYXBzaG90VXNlcm5hbWVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBdXJvcmFEYXRhYmFzZShcbiAgICBkYkNvbmZpZzogTm9uTnVsbGFibGU8SVBheWxvYWRQcm9wc1tcImRhdGFiYXNlXCJdPlxuICApOiBSZWxhdGlvbmFsRGF0YWJhc2Uge1xuICAgIGNvbnN0IGF1cm9yYVByb3BzOiBBdXJvcmFEYXRhYmFzZVByb3BzID0ge1xuICAgICAgdHlwZTogXCJBdXJvcmFcIixcbiAgICAgIC4uLnRoaXMuYnVpbGRCYXNlRGF0YWJhc2VQcm9wcyhkYkNvbmZpZyksXG4gICAgICBhbGxvd2VkSXBDaWRyOiBkYkNvbmZpZy5hbGxvd2VkSXBDaWRyLFxuICAgICAgZW5jcnlwdGlvbjogZGJDb25maWcuZW5jcnlwdGlvbiBhcyBBdXJvcmFEYXRhYmFzZVByb3BzW1wiZW5jcnlwdGlvblwiXSxcbiAgICAgIHdyaXRlcjogZGJDb25maWcud3JpdGVyLFxuICAgICAgcmVhZGVyczogZGJDb25maWcucmVhZGVycyxcbiAgICAgIGFsbG93VnBjQWNjZXNzOiBkYkNvbmZpZy5hbGxvd1ZwY0FjY2VzcyxcbiAgICAgIG1vbml0b3JpbmdJbnRlcnZhbDogZGJDb25maWcubW9uaXRvcmluZ0ludGVydmFsLFxuICAgICAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c6IGRiQ29uZmlnLnByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5hcHAuYWRkRGF0YWJhc2UoXG4gICAgICBEYXRhYmFzZUZhY3RvcnkuYnVpbGQodGhpcy5wcm9wcy5uYW1lLCBhdXJvcmFQcm9wcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVJbnN0YW5jZURhdGFiYXNlKFxuICAgIGRiQ29uZmlnOiBOb25OdWxsYWJsZTxJUGF5bG9hZFByb3BzW1wiZGF0YWJhc2VcIl0+XG4gICk6IFJlbGF0aW9uYWxEYXRhYmFzZSB7XG4gICAgY29uc3QgaW5zdGFuY2VQcm9wczogSW5zdGFuY2VEYXRhYmFzZVByb3BzID0ge1xuICAgICAgdHlwZTogXCJJbnN0YW5jZVwiLFxuICAgICAgLi4udGhpcy5idWlsZEJhc2VEYXRhYmFzZVByb3BzKGRiQ29uZmlnKSxcbiAgICAgIHB1YmxpY2x5QWNjZXNzaWJsZTogZGJDb25maWcucHVibGljbHlBY2Nlc3NpYmxlID8/IGZhbHNlLFxuICAgICAgaW5zdGFuY2VUeXBlOiBkYkNvbmZpZy5pbnN0YW5jZVR5cGUsXG4gICAgICBhbGxvY2F0ZWRTdG9yYWdlOiBkYkNvbmZpZy5hbGxvY2F0ZWRTdG9yYWdlLFxuICAgICAgbXVsdGlBejogZGJDb25maWcubXVsdGlBeixcbiAgICAgIHJlYWRSZXBsaWNhOiBkYkNvbmZpZy5yZWFkUmVwbGljYSxcbiAgICAgIGVuY3J5cHRpb246IGRiQ29uZmlnLmVuY3J5cHRpb24gYXMgSW5zdGFuY2VEYXRhYmFzZVByb3BzW1wiZW5jcnlwdGlvblwiXVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuYXBwLmFkZERhdGFiYXNlKFxuICAgICAgRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKHRoaXMucHJvcHMubmFtZSwgaW5zdGFuY2VQcm9wcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTdG9yYWdlQnVja2V0cygpOiB2b2lkIHtcbiAgICB0aGlzLl9hc3NldHNCdWNrZXQgPSB0aGlzLmNyZWF0ZUFzc2V0c0J1Y2tldCgpO1xuICAgIHRoaXMuX2NhY2hlQnVja2V0ID0gdGhpcy5jcmVhdGVDYWNoZUJ1Y2tldCgpO1xuICAgIHRoaXMuX21lZGlhQnVja2V0ID0gdGhpcy5jcmVhdGVNZWRpYUJ1Y2tldCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBc3NldHNCdWNrZXQoKTogU3RvcmFnZSB7XG4gICAgY29uc3QgYXNzZXRzQ29uZmlnID0gdGhpcy5wcm9wcy5zdG9yYWdlPy5hc3NldHMgPz8ge307XG4gICAgY29uc3QgYXNzZXRzUHJvcHM6IFMzUHJvcHMgPSB7XG4gICAgICB2ZXJzaW9uZWQ6IGFzc2V0c0NvbmZpZy52ZXJzaW9uZWQgPz8gZmFsc2UsXG4gICAgICBkZXBsb3ltZW50OiB7XG4gICAgICAgIHNvdXJjZTogYCR7UEFZTE9BRF9ERUZBVUxUUy5TT1VSQ0V9LyR7UEFZTE9BRF9ERUZBVUxUUy5PUEVOTkVYVC5BU1NFVFN9YCxcbiAgICAgICAgcHJ1bmU6IHRydWUsXG4gICAgICAgIGNhY2hlQ29udHJvbDoge1xuICAgICAgICAgIG1heEFnZTogUEFZTE9BRF9ERUZBVUxUUy5DQUNIRS5NQVhfQUdFX1NFQ09ORFMsXG4gICAgICAgICAgaW1tdXRhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFwcC5hZGRTdG9yYWdlKFxuICAgICAgU3RvcmFnZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1hc3NldHNgLCBhc3NldHNQcm9wcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDYWNoZUJ1Y2tldCgpOiBTdG9yYWdlIHtcbiAgICBjb25zdCBjYWNoZUNvbmZpZyA9IHRoaXMucHJvcHMuc3RvcmFnZT8uY2FjaGUgPz8ge307XG4gICAgY29uc3QgY2FjaGVQcm9wczogUzNQcm9wcyA9IHtcbiAgICAgIHZlcnNpb25lZDogY2FjaGVDb25maWcudmVyc2lvbmVkID8/IGZhbHNlLFxuICAgICAgZGVwbG95bWVudDoge1xuICAgICAgICBzb3VyY2U6IGAke1BBWUxPQURfREVGQVVMVFMuU09VUkNFfS8ke1BBWUxPQURfREVGQVVMVFMuT1BFTk5FWFQuQ0FDSEV9YCxcbiAgICAgICAgcHJ1bmU6IGZhbHNlIC8vIElTUiBhZGRzIGZpbGVzIGF0IHJ1bnRpbWVcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFwcC5hZGRTdG9yYWdlKFxuICAgICAgU3RvcmFnZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1jYWNoZWAsIGNhY2hlUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTWVkaWFCdWNrZXQoKTogU3RvcmFnZSB7XG4gICAgY29uc3QgbWVkaWFDb25maWcgPSB0aGlzLnByb3BzLnN0b3JhZ2U/Lm1lZGlhID8/IHt9O1xuICAgIGNvbnN0IG1lZGlhUHJvcHM6IFMzUHJvcHMgPSB7XG4gICAgICB2ZXJzaW9uZWQ6IG1lZGlhQ29uZmlnLnZlcnNpb25lZCA/PyBmYWxzZVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuYXBwLmFkZFN0b3JhZ2UoXG4gICAgICBTdG9yYWdlRmFjdG9yeS5idWlsZChgJHt0aGlzLnByb3BzLm5hbWV9LW1lZGlhYCwgbWVkaWFQcm9wcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVUYWdDYWNoZSgpOiB2b2lkIHtcbiAgICBjb25zdCB0YWdDYWNoZVByb3BzOiBEeW5hbW9EQkRhdGFiYXNlUHJvcHMgPSB7XG4gICAgICB0eXBlOiBcIkR5bmFtb0RCXCIsXG4gICAgICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogXCJ0YWdcIiwgdHlwZTogXCJTXCIgfSxcbiAgICAgIHNvcnRLZXk6IHsgbmFtZTogXCJwYXRoXCIsIHR5cGU6IFwiU1wiIH0sXG4gICAgICBnbG9iYWxTZWNvbmRhcnlJbmRleGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpbmRleE5hbWU6IFwicmV2YWxpZGF0ZVwiLFxuICAgICAgICAgIHBhcnRpdGlvbktleTogeyBuYW1lOiBcInBhdGhcIiwgdHlwZTogXCJTXCIgfSxcbiAgICAgICAgICBzb3J0S2V5OiB7IG5hbWU6IFwicmV2YWxpZGF0ZWRBdFwiLCB0eXBlOiBcIk5cIiB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICAgIHRoaXMuX3RhZ0NhY2hlID0gdGhpcy5hcHAuYWRkRGF0YWJhc2UoXG4gICAgICBEYXRhYmFzZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS10YWctY2FjaGVgLCB0YWdDYWNoZVByb3BzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJldmFsaWRhdGlvblF1ZXVlKCk6IHZvaWQge1xuICAgIGNvbnN0IHF1ZXVlQ29uZmlnID0gdGhpcy5wcm9wcy5tZXNzYWdpbmc/LnJldmFsaWRhdGlvblF1ZXVlID8/IHt9O1xuICAgIGNvbnN0IHJldmFsaWRhdGlvblRpbWVvdXQgPVxuICAgICAgdGhpcy5wcm9wcy5jb21wdXRlPy5yZXZhbGlkYXRpb24/LnRpbWVvdXQgPz9cbiAgICAgIFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5SRVZBTElEQVRJT05fVElNRU9VVDtcblxuICAgIC8vIFJlc29sdmUgZGVhZCBsZXR0ZXIgcXVldWUgY29uZmlnXG4gICAgbGV0IGRscUNvbmZpZzogSVF1ZXVlUHJvcHNbXCJkZWFkTGV0dGVyUXVldWVcIl07XG4gICAgaWYgKHF1ZXVlQ29uZmlnLmRlYWRMZXR0ZXJRdWV1ZSA9PT0gZmFsc2UpIHtcbiAgICAgIGRscUNvbmZpZyA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKHF1ZXVlQ29uZmlnLmRlYWRMZXR0ZXJRdWV1ZSkge1xuICAgICAgZGxxQ29uZmlnID0ge1xuICAgICAgICBlbmFibGVkOiBxdWV1ZUNvbmZpZy5kZWFkTGV0dGVyUXVldWUuZW5hYmxlZCA/PyB0cnVlLFxuICAgICAgICBtYXhSZWNlaXZlQ291bnQ6IHF1ZXVlQ29uZmlnLmRlYWRMZXR0ZXJRdWV1ZS5tYXhSZWNlaXZlQ291bnQgPz8gM1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGxxQ29uZmlnID0geyBlbmFibGVkOiB0cnVlLCBtYXhSZWNlaXZlQ291bnQ6IDMgfTtcbiAgICB9XG5cbiAgICBjb25zdCBxdWV1ZVByb3BzOiBJUXVldWVQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwicXVldWVcIixcbiAgICAgIHF1ZXVlVHlwZTogXCJmaWZvXCIsXG4gICAgICB2aXNpYmlsaXR5VGltZW91dDogcXVldWVDb25maWcudmlzaWJpbGl0eVRpbWVvdXQgPz8gcmV2YWxpZGF0aW9uVGltZW91dCxcbiAgICAgIG1lc3NhZ2VSZXRlbnRpb25QZXJpb2Q6IHF1ZXVlQ29uZmlnLm1lc3NhZ2VSZXRlbnRpb25QZXJpb2QsXG4gICAgICBtYXhNZXNzYWdlU2l6ZTogcXVldWVDb25maWcubWF4TWVzc2FnZVNpemUsXG4gICAgICBjb250ZW50QmFzZWREZWR1cGxpY2F0aW9uOiB0cnVlLFxuICAgICAgZGVhZExldHRlclF1ZXVlOiBkbHFDb25maWdcbiAgICB9O1xuICAgIHRoaXMuX3JldmFsaWRhdGlvblF1ZXVlID0gdGhpcy5hcHAuYWRkTWVzc2FnaW5nKFxuICAgICAgTWVzc2FnaW5nRmFjdG9yeS5idWlsZChgJHt0aGlzLnByb3BzLm5hbWV9LXJldmFsaWRhdGlvbmAsIHF1ZXVlUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTGFtYmRhRnVuY3Rpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuX3NlcnZlciA9IHRoaXMuY3JlYXRlU2VydmVyTGFtYmRhKCk7XG4gICAgdGhpcy5faW1hZ2VPcHRpbWlzYXRpb24gPSB0aGlzLmNyZWF0ZUltYWdlTGFtYmRhKCk7XG4gICAgdGhpcy5fcmV2YWxpZGF0aW9uID0gdGhpcy5jcmVhdGVSZXZhbGlkYXRpb25MYW1iZGEoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU2VydmVyTGFtYmRhKCk6IExhbWJkYUNvbXB1dGUge1xuICAgIGNvbnN0IHsgbWVtb3J5U2l6ZSwgdGltZW91dCwgZXBoZW1lcmFsU3RvcmFnZVNpemUgfSA9IHJlc29sdmVMYW1iZGFDb25maWcoXG4gICAgICB0aGlzLnByb3BzLmNvbXB1dGU/LnNlcnZlcixcbiAgICAgIHtcbiAgICAgICAgbWVtb3J5OiBQQVlMT0FEX0RFRkFVTFRTLkNPTVBVVEUuU0VSVkVSX01FTU9SWSxcbiAgICAgICAgdGltZW91dDogUEFZTE9BRF9ERUZBVUxUUy5DT01QVVRFLlNFUlZFUl9USU1FT1VUXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IHNlcnZlclByb3BzOiBDb2RlTGFtYmRhUHJvcHMgPSB7XG4gICAgICB0eXBlOiBcImxhbWJkYVwiLFxuICAgICAgZGVwbG95bWVudDogXCJjb2RlXCIsXG4gICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChcbiAgICAgICAgYCR7UEFZTE9BRF9ERUZBVUxUUy5TT1VSQ0V9LyR7UEFZTE9BRF9ERUZBVUxUUy5PUEVOTkVYVC5TRVJWRVJ9YFxuICAgICAgKSxcbiAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjJfWCxcbiAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIG1lbW9yeVNpemUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZXBoZW1lcmFsU3RvcmFnZVNpemUsXG4gICAgICBmdW5jdGlvblVybDoge1xuICAgICAgICBhdXRoVHlwZTogRnVuY3Rpb25VcmxBdXRoVHlwZS5OT05FLFxuICAgICAgICBpbnZva2VNb2RlOiBJbnZva2VNb2RlLlJFU1BPTlNFX1NUUkVBTVxuICAgICAgfSxcbiAgICAgIGNvbm5lY3Rpb25zOiBbdGhpcy5fZGF0YWJhc2VdLFxuICAgICAgc2VjcmV0c0ltcG9ydDoge1xuICAgICAgICBEQVRBQkFTRV9VU0VSTkFNRTogdGhpcy5fZGF0YWJhc2VcbiAgICAgICAgICAuZ2V0Q3JlZGVudGlhbHMoKVxuICAgICAgICAgIC5nZXRJbXBvcnQoXCJ1c2VybmFtZVwiKSxcbiAgICAgICAgREFUQUJBU0VfUEFTU1dPUkQ6IHRoaXMuX2RhdGFiYXNlXG4gICAgICAgICAgLmdldENyZWRlbnRpYWxzKClcbiAgICAgICAgICAuZ2V0SW1wb3J0KFwicGFzc3dvcmRcIiksXG4gICAgICAgIFBBWUxPQURfU0VDUkVUOiB0aGlzLl9wYXlsb2FkU2VjcmV0LmdldEltcG9ydCgpXG4gICAgICB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuYnVpbGRTZXJ2ZXJFbnZpcm9ubWVudCgpXG4gICAgfTtcblxuICAgIGNvbnN0IHNlcnZlciA9IHRoaXMuYXBwLmFkZENvbXB1dGUoXG4gICAgICBDb21wdXRlRmFjdG9yeS5idWlsZChgJHt0aGlzLnByb3BzLm5hbWV9LXNlcnZlcmAsIHNlcnZlclByb3BzKVxuICAgICk7XG5cbiAgICB0aGlzLmdyYW50U2VydmVyUGVybWlzc2lvbnMoc2VydmVyKTtcbiAgICByZXR1cm4gc2VydmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFNlcnZlckVudmlyb25tZW50KCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IGJhc2VFbnY6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBEQVRBQkFTRV9IT1NUOiB0aGlzLl9kYXRhYmFzZS5nZXRIb3N0RW5kcG9pbnQoKSxcbiAgICAgIERBVEFCQVNFX1BPUlQ6IHRoaXMuX2RhdGFiYXNlLmdldEhvc3RQb3J0KCksXG4gICAgICBEQVRBQkFTRV9OQU1FOiB0aGlzLl9kYXRhYmFzZS5nZXREYXRhYmFzZU5hbWUoKSxcbiAgICAgIERBVEFCQVNFX1NTTDogXCJ0cnVlXCIsXG4gICAgICBDQUNIRV9CVUNLRVRfTkFNRTogdGhpcy5fY2FjaGVCdWNrZXQuZ2V0QnVja2V0TmFtZSgpLFxuICAgICAgQ0FDSEVfQlVDS0VUX1JFR0lPTjogU3RhY2sub2YodGhpcykucmVnaW9uLFxuICAgICAgQ0FDSEVfRFlOQU1PX1RBQkxFOiB0aGlzLl90YWdDYWNoZS5nZXRUYWJsZU5hbWUoKSxcbiAgICAgIFJFVkFMSURBVElPTl9RVUVVRV9VUkw6IHRoaXMuX3JldmFsaWRhdGlvblF1ZXVlLmdldFF1ZXVlVXJsKCksXG4gICAgICBSRVZBTElEQVRJT05fUVVFVUVfUkVHSU9OOiBTdGFjay5vZih0aGlzKS5yZWdpb24sXG4gICAgICBNRURJQV9CVUNLRVRfTkFNRTogdGhpcy5fbWVkaWFCdWNrZXQuZ2V0QnVja2V0TmFtZSgpXG4gICAgfTtcblxuICAgIC8vIExvY2sgZG93biBDT1JTIHRvIGN1c3RvbSBkb21haW4gd2hlbiBwcm92aWRlZFxuICAgIGNvbnN0IGN1c3RvbURvbWFpbiA9IHRoaXMucHJvcHMuZG9tYWluID8/IHRoaXMucHJvcHMuY2RuPy5kb21haW5OYW1lcz8uWzBdO1xuICAgIGlmIChjdXN0b21Eb21haW4pIHtcbiAgICAgIGJhc2VFbnYuTkVYVF9QVUJMSUNfU0VSVkVSX1VSTCA9IGBodHRwczovLyR7Y3VzdG9tRG9tYWlufWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgLi4uYmFzZUVudiwgLi4udGhpcy5wcm9wcy5lbnZpcm9ubWVudCB9O1xuICB9XG5cbiAgcHJpdmF0ZSBncmFudFNlcnZlclBlcm1pc3Npb25zKHNlcnZlcjogTGFtYmRhQ29tcHV0ZSk6IHZvaWQge1xuICAgIGNvbnN0IHNlcnZlckZ1bmN0aW9uID0gcmVxdWlyZUZ1bmN0aW9uKHNlcnZlciwgXCJTZXJ2ZXJcIik7XG4gICAgdGhpcy5fY2FjaGVCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoc2VydmVyRnVuY3Rpb24pO1xuICAgIHRoaXMuX21lZGlhQnVja2V0LmdyYW50UmVhZFdyaXRlKHNlcnZlckZ1bmN0aW9uKTtcbiAgICB0aGlzLl90YWdDYWNoZS5ncmFudFJlYWRXcml0ZURhdGEoc2VydmVyRnVuY3Rpb24pO1xuICAgIHRoaXMuX3JldmFsaWRhdGlvblF1ZXVlLmdyYW50U2VuZE1lc3NhZ2VzKHNlcnZlckZ1bmN0aW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlSW1hZ2VMYW1iZGEoKTogTGFtYmRhQ29tcHV0ZSB7XG4gICAgY29uc3QgeyBtZW1vcnlTaXplLCB0aW1lb3V0LCBlcGhlbWVyYWxTdG9yYWdlU2l6ZSB9ID0gcmVzb2x2ZUxhbWJkYUNvbmZpZyhcbiAgICAgIHRoaXMucHJvcHMuY29tcHV0ZT8uaW1hZ2VPcHRpbWlzYXRpb24sXG4gICAgICB7XG4gICAgICAgIG1lbW9yeTogUEFZTE9BRF9ERUZBVUxUUy5DT01QVVRFLklNQUdFX01FTU9SWSxcbiAgICAgICAgdGltZW91dDogUEFZTE9BRF9ERUZBVUxUUy5DT01QVVRFLklNQUdFX1RJTUVPVVRcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgaW1hZ2VQcm9wczogQ29kZUxhbWJkYVByb3BzID0ge1xuICAgICAgdHlwZTogXCJsYW1iZGFcIixcbiAgICAgIGRlcGxveW1lbnQ6IFwiY29kZVwiLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIGAke1BBWUxPQURfREVGQVVMVFMuU09VUkNFfS8ke1BBWUxPQURfREVGQVVMVFMuT1BFTk5FWFQuSU1BR0V9YFxuICAgICAgKSxcbiAgICAgIGhhbmRsZXI6IFwiaW5kZXguaGFuZGxlclwiLFxuICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjJfWCxcbiAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIG1lbW9yeVNpemUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZXBoZW1lcmFsU3RvcmFnZVNpemUsXG4gICAgICBmdW5jdGlvblVybDogeyBhdXRoVHlwZTogRnVuY3Rpb25VcmxBdXRoVHlwZS5OT05FIH0sXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICBCVUNLRVRfTkFNRTogdGhpcy5fYXNzZXRzQnVja2V0LmdldEJ1Y2tldE5hbWUoKSxcbiAgICAgICAgQlVDS0VUX0tFWV9QUkVGSVg6IFwiX2Fzc2V0c1wiXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGltYWdlID0gdGhpcy5hcHAuYWRkQ29tcHV0ZShcbiAgICAgIENvbXB1dGVGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0taW1hZ2VgLCBpbWFnZVByb3BzKVxuICAgICk7XG5cbiAgICBjb25zdCBpbWFnZUZ1bmN0aW9uID0gcmVxdWlyZUZ1bmN0aW9uKGltYWdlLCBcIkltYWdlT3B0aW1pc2F0aW9uXCIpO1xuICAgIHRoaXMuX2Fzc2V0c0J1Y2tldC5ncmFudFJlYWQoaW1hZ2VGdW5jdGlvbik7XG5cbiAgICByZXR1cm4gaW1hZ2U7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJldmFsaWRhdGlvbkxhbWJkYSgpOiBMYW1iZGFDb21wdXRlIHtcbiAgICBjb25zdCB7IG1lbW9yeVNpemUsIHRpbWVvdXQsIGVwaGVtZXJhbFN0b3JhZ2VTaXplIH0gPSByZXNvbHZlTGFtYmRhQ29uZmlnKFxuICAgICAgdGhpcy5wcm9wcy5jb21wdXRlPy5yZXZhbGlkYXRpb24sXG4gICAgICB7XG4gICAgICAgIG1lbW9yeTogUEFZTE9BRF9ERUZBVUxUUy5DT01QVVRFLlJFVkFMSURBVElPTl9NRU1PUlksXG4gICAgICAgIHRpbWVvdXQ6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5SRVZBTElEQVRJT05fVElNRU9VVFxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCByZXZhbGlkYXRpb25Qcm9wczogQ29kZUxhbWJkYVByb3BzID0ge1xuICAgICAgdHlwZTogXCJsYW1iZGFcIixcbiAgICAgIGRlcGxveW1lbnQ6IFwiY29kZVwiLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIGAke1BBWUxPQURfREVGQVVMVFMuU09VUkNFfS8ke1BBWUxPQURfREVGQVVMVFMuT1BFTk5FWFQuUkVWQUxJREFUSU9OfWBcbiAgICAgICksXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICBtZW1vcnlTaXplLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgQ0FDSEVfRFlOQU1PX1RBQkxFOiB0aGlzLl90YWdDYWNoZS5nZXRUYWJsZU5hbWUoKSxcbiAgICAgICAgQ0FDSEVfQlVDS0VUX05BTUU6IHRoaXMuX2NhY2hlQnVja2V0LmdldEJ1Y2tldE5hbWUoKVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCByZXZhbGlkYXRpb24gPSB0aGlzLmFwcC5hZGRDb21wdXRlKFxuICAgICAgQ29tcHV0ZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1yZXZhbGlkYXRpb25gLCByZXZhbGlkYXRpb25Qcm9wcylcbiAgICApO1xuXG4gICAgY29uc3QgcmV2YWxpZGF0aW9uTGFtYmRhID0gcmV2YWxpZGF0aW9uLmdldExhbWJkYUZ1bmN0aW9uKCk7XG4gICAgcmV2YWxpZGF0aW9uTGFtYmRhLmFkZFNxc0V2ZW50U291cmNlKHRoaXMuX3JldmFsaWRhdGlvblF1ZXVlLmdldFF1ZXVlKCksIHtcbiAgICAgIGJhdGNoU2l6ZTogNVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmV2YWxpZGF0aW9uRnVuY3Rpb24gPSByZXF1aXJlRnVuY3Rpb24ocmV2YWxpZGF0aW9uLCBcIlJldmFsaWRhdGlvblwiKTtcbiAgICB0aGlzLl90YWdDYWNoZS5ncmFudFJlYWRXcml0ZURhdGEocmV2YWxpZGF0aW9uRnVuY3Rpb24pO1xuICAgIHRoaXMuX2NhY2hlQnVja2V0LmdyYW50UmVhZFdyaXRlKHJldmFsaWRhdGlvbkZ1bmN0aW9uKTtcbiAgICB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZS5ncmFudENvbnN1bWVNZXNzYWdlcyhyZXZhbGlkYXRpb25GdW5jdGlvbik7XG5cbiAgICByZXR1cm4gcmV2YWxpZGF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDZG4oKTogdm9pZCB7XG4gICAgY29uc3QgeyBkb21haW5OYW1lcywgY2VydGlmaWNhdGUgfSA9IHRoaXMucmVzb2x2ZURvbWFpbkNvbmZpZygpO1xuXG4gICAgY29uc3QgY2RuUHJvcHM6IFNtYXJ0Q2RuUHJvcHMgPSB7XG4gICAgICBvcmlnaW5UeXBlOiBcImF1dG9cIixcbiAgICAgIG9yaWdpbjogdGhpcy5fc2VydmVyLFxuICAgICAgY2FjaGVQb2xpY3k6IFwiQ0FDSElOR19ESVNBQkxFRFwiLFxuICAgICAgZGVmYXVsdEFsbG93ZWRNZXRob2RzOiBcIkFMTFwiLFxuICAgICAgZm9yd2FyZEhvc3RIZWFkZXI6IHRydWUsXG4gICAgICBwcmljZUNsYXNzOiBcIlByaWNlQ2xhc3NfMTAwXCIsXG4gICAgICBkb21haW5OYW1lcyxcbiAgICAgIGNlcnRpZmljYXRlLFxuICAgICAgYmVoYXZpb3VyczogW1xuICAgICAgICB7XG4gICAgICAgICAgcGF0aFBhdHRlcm46IFBBWUxPQURfREVGQVVMVFMuUEFUSFMuU1RBVElDLFxuICAgICAgICAgIG9yaWdpbjogdGhpcy5fYXNzZXRzQnVja2V0LFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfT1BUSU1JWkVEXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhQYXR0ZXJuOiBQQVlMT0FEX0RFRkFVTFRTLlBBVEhTLklNQUdFLFxuICAgICAgICAgIG9yaWdpbjogdGhpcy5faW1hZ2VPcHRpbWlzYXRpb24sXG4gICAgICAgICAgY2FjaGVQb2xpY3k6IFwiQ0FDSElOR19PUFRJTUlaRURcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGF0aFBhdHRlcm46IFBBWUxPQURfREVGQVVMVFMuUEFUSFMuQVBJLFxuICAgICAgICAgIG9yaWdpbjogdGhpcy5fc2VydmVyLFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfRElTQUJMRURcIixcbiAgICAgICAgICBhbGxvd2VkTWV0aG9kczogXCJBTExcIlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGF0aFBhdHRlcm46IFBBWUxPQURfREVGQVVMVFMuUEFUSFMuQURNSU4sXG4gICAgICAgICAgb3JpZ2luOiB0aGlzLl9zZXJ2ZXIsXG4gICAgICAgICAgY2FjaGVQb2xpY3k6IFwiQ0FDSElOR19ESVNBQkxFRFwiLFxuICAgICAgICAgIGFsbG93ZWRNZXRob2RzOiBcIkFMTFwiXG4gICAgICAgIH0sXG4gICAgICAgIC4uLih0aGlzLnByb3BzLmNkbj8uYmVoYXZpb3VycyA/PyBbXSlcbiAgICAgIF1cbiAgICB9O1xuXG4gICAgdGhpcy5fY2RuID0gdGhpcy5hcHAuYWRkQ2RuKENkbkZhY3RvcnkuYnVpbGQodGhpcy5wcm9wcy5uYW1lLCBjZG5Qcm9wcykpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlRG9tYWluQ29uZmlnKCk6IHtcbiAgICBkb21haW5OYW1lczogc3RyaW5nW10gfCB1bmRlZmluZWQ7XG4gICAgY2VydGlmaWNhdGU6IElDZXJ0aWZpY2F0ZSB8IHVuZGVmaW5lZDtcbiAgICBob3N0ZWRab25lOiBSZXR1cm5UeXBlPHR5cGVvZiBIb3N0ZWRab25lLmZyb21Mb29rdXA+IHwgdW5kZWZpbmVkO1xuICB9IHtcbiAgICBpZiAodGhpcy5fcmVzb2x2ZWREb21haW4pIHJldHVybiB0aGlzLl9yZXNvbHZlZERvbWFpbjtcblxuICAgIGlmICh0aGlzLnByb3BzLmRvbWFpbikge1xuICAgICAgdGhpcy5fcmVzb2x2ZWREb21haW4gPSB0aGlzLnJlc29sdmVTaW1wbGVEb21haW4oKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuY2RuPy5kb21haW5OYW1lcz8ubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9yZXNvbHZlZERvbWFpbiA9IHRoaXMucmVzb2x2ZUFkdmFuY2VkRG9tYWluKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Jlc29sdmVkRG9tYWluID0ge1xuICAgICAgICBkb21haW5OYW1lczogdW5kZWZpbmVkLFxuICAgICAgICBjZXJ0aWZpY2F0ZTogdW5kZWZpbmVkLFxuICAgICAgICBob3N0ZWRab25lOiB1bmRlZmluZWRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVkRG9tYWluO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlU2ltcGxlRG9tYWluKCk6IHtcbiAgICBkb21haW5OYW1lczogc3RyaW5nW107XG4gICAgY2VydGlmaWNhdGU6IElDZXJ0aWZpY2F0ZTtcbiAgICBob3N0ZWRab25lOiBSZXR1cm5UeXBlPHR5cGVvZiBIb3N0ZWRab25lLmZyb21Mb29rdXA+O1xuICB9IHtcbiAgICBjb25zdCBkb21haW4gPSB0aGlzLnByb3BzLmRvbWFpbiE7XG4gICAgY29uc3Qgcm9vdERvbWFpbiA9IGV4dHJhY3RSb290RG9tYWluKGRvbWFpbik7XG5cbiAgICBjb25zdCBob3N0ZWRab25lID0gSG9zdGVkWm9uZS5mcm9tTG9va3VwKFxuICAgICAgdGhpcyxcbiAgICAgIGAke3RoaXMucGFzY2FsTmFtZX1Ib3N0ZWRab25lYCxcbiAgICAgIHsgZG9tYWluTmFtZTogcm9vdERvbWFpbiB9XG4gICAgKTtcblxuICAgIGNvbnN0IGNlcnRpZmljYXRlID0gbmV3IENlcnRpZmljYXRlKHRoaXMsIGAke3RoaXMucGFzY2FsTmFtZX1DZXJ0aWZpY2F0ZWAsIHtcbiAgICAgIGRvbWFpbk5hbWU6IGRvbWFpbixcbiAgICAgIHZhbGlkYXRpb246IENlcnRpZmljYXRlVmFsaWRhdGlvbi5mcm9tRG5zKGhvc3RlZFpvbmUpXG4gICAgfSk7XG5cbiAgICByZXR1cm4geyBkb21haW5OYW1lczogW2RvbWFpbl0sIGNlcnRpZmljYXRlLCBob3N0ZWRab25lIH07XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVBZHZhbmNlZERvbWFpbigpOiB7XG4gICAgZG9tYWluTmFtZXM6IHN0cmluZ1tdO1xuICAgIGNlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGUgfCB1bmRlZmluZWQ7XG4gICAgaG9zdGVkWm9uZTogdW5kZWZpbmVkO1xuICB9IHtcbiAgICBjb25zdCBjZG5Db25maWcgPSB0aGlzLnByb3BzLmNkbiE7XG4gICAgY29uc3QgY2VydGlmaWNhdGUgPVxuICAgICAgY2RuQ29uZmlnLmNlcnRpZmljYXRlID8/XG4gICAgICAoY2RuQ29uZmlnLmNlcnRpZmljYXRlQXJuXG4gICAgICAgID8gQ2VydGlmaWNhdGUuZnJvbUNlcnRpZmljYXRlQXJuKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGAke3RoaXMucGFzY2FsTmFtZX1DZXJ0aWZpY2F0ZWAsXG4gICAgICAgICAgICBjZG5Db25maWcuY2VydGlmaWNhdGVBcm5cbiAgICAgICAgICApXG4gICAgICAgIDogdW5kZWZpbmVkKTtcblxuICAgIHJldHVybiB7XG4gICAgICBkb21haW5OYW1lczogY2RuQ29uZmlnLmRvbWFpbk5hbWVzISxcbiAgICAgIGNlcnRpZmljYXRlLFxuICAgICAgaG9zdGVkWm9uZTogdW5kZWZpbmVkXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRG5zUmVjb3JkKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wcm9wcy5kb21haW4pIHJldHVybjtcblxuICAgIGNvbnN0IHsgaG9zdGVkWm9uZSB9ID0gdGhpcy5yZXNvbHZlRG9tYWluQ29uZmlnKCk7XG4gICAgaWYgKCFob3N0ZWRab25lKSByZXR1cm47XG5cbiAgICAvLyBDcmVhdGUgdGhlIEROUyByZWNvcmQgaW4gdGhlIENETiBzdGFjayAobm90IHRoZSBDb21wdXRlIHN0YWNrIHdoZXJlIHRoaXNcbiAgICAvLyBQYXlsb2FkIGNvbnN0cnVjdCBsaXZlcykgdG8gYXZvaWQgYSBjeWNsaWMgZGVwZW5kZW5jeTogQ0ROIHJlZmVyZW5jZXMgdGhlXG4gICAgLy8gc2VydmVyIExhbWJkYSBGdW5jdGlvblVybCwgc28gQ29tcHV0ZSBjYW5ub3QgYWxzbyBkZXBlbmQgb24gQ0ROLlxuICAgIGNvbnN0IGNkblN0YWNrID0gdGhpcy5hcHAuZ2V0RGVmYXVsdENkblN0YWNrKCkuZ2V0U3RhY2soKTtcbiAgICBuZXcgQVJlY29yZChjZG5TdGFjaywgYCR7dGhpcy5wYXNjYWxOYW1lfUFsaWFzUmVjb3JkYCwge1xuICAgICAgem9uZTogaG9zdGVkWm9uZSxcbiAgICAgIHJlY29yZE5hbWU6IHRoaXMucHJvcHMuZG9tYWluLFxuICAgICAgdGFyZ2V0OiBSZWNvcmRUYXJnZXQuZnJvbUFsaWFzKFxuICAgICAgICBuZXcgQ2xvdWRGcm9udFRhcmdldCh0aGlzLl9jZG4uZ2V0RGlzdHJpYnV0aW9uKCkpXG4gICAgICApXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGV4cG9ydFBhdHRlcm5PdXRwdXRzKCk6IHZvaWQge1xuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7dGhpcy5wYXNjYWxOYW1lfVBhdHRlcm5UeXBlYCwge1xuICAgICAga2V5OiBgJHt0aGlzLnBhc2NhbE5hbWV9UGF0dGVyblR5cGVgLFxuICAgICAgdmFsdWU6IFwicGF5bG9hZFwiLFxuICAgICAgZGVzY3JpcHRpb246IGBQYXR0ZXJuIHR5cGUgZm9yICR7dGhpcy5wcm9wcy5uYW1lfWBcbiAgICB9KTtcblxuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7dGhpcy5wYXNjYWxOYW1lfVBhdHRlcm5OYW1lYCwge1xuICAgICAga2V5OiBgJHt0aGlzLnBhc2NhbE5hbWV9UGF0dGVybk5hbWVgLFxuICAgICAgdmFsdWU6IHRoaXMucHJvcHMubmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgUGF0dGVybiBuYW1lIGZvciAke3RoaXMucHJvcHMubmFtZX1gXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3RoaXMucGFzY2FsTmFtZX1QYXR0ZXJuTGFtYmRhc2AsIHtcbiAgICAgIGtleTogYCR7dGhpcy5wYXNjYWxOYW1lfVBhdHRlcm5MYW1iZGFzYCxcbiAgICAgIHZhbHVlOiBbXG4gICAgICAgIGAke3RoaXMucHJvcHMubmFtZX0tc2VydmVyYCxcbiAgICAgICAgYCR7dGhpcy5wcm9wcy5uYW1lfS1pbWFnZWAsXG4gICAgICAgIGAke3RoaXMucHJvcHMubmFtZX0tcmV2YWxpZGF0aW9uYFxuICAgICAgXS5qb2luKFwiLFwiKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgTGFtYmRhIGNvbnN0cnVjdCBwcmVmaXhlcyBmb3IgcGF0dGVybiAke3RoaXMucHJvcHMubmFtZX1gXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3RoaXMucGFzY2FsTmFtZX1QYXR0ZXJuUmVzb3VyY2VzYCwge1xuICAgICAga2V5OiBgJHt0aGlzLnBhc2NhbE5hbWV9UGF0dGVyblJlc291cmNlc2AsXG4gICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBkYXRhYmFzZXM6IFt0aGlzLnByb3BzLm5hbWUsIGAke3RoaXMucHJvcHMubmFtZX0tdGFnLWNhY2hlYF0sXG4gICAgICAgIHN0b3JhZ2U6IFtcbiAgICAgICAgICBgJHt0aGlzLnByb3BzLm5hbWV9LWFzc2V0c2AsXG4gICAgICAgICAgYCR7dGhpcy5wcm9wcy5uYW1lfS1jYWNoZWAsXG4gICAgICAgICAgYCR7dGhpcy5wcm9wcy5uYW1lfS1tZWRpYWBcbiAgICAgICAgXSxcbiAgICAgICAgY2RuOiB0aGlzLnByb3BzLm5hbWVcbiAgICAgIH0pLFxuICAgICAgZGVzY3JpcHRpb246IGBSZWxhdGVkIHJlc291cmNlIG5hbWVzIGZvciBwYXR0ZXJuICR7dGhpcy5wcm9wcy5uYW1lfWBcbiAgICB9KTtcbiAgfVxuXG4gIGdldERhdGFiYXNlKCk6IFJlbGF0aW9uYWxEYXRhYmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFiYXNlO1xuICB9XG5cbiAgZ2V0U2VydmVyKCk6IExhbWJkYUNvbXB1dGUge1xuICAgIHJldHVybiB0aGlzLl9zZXJ2ZXI7XG4gIH1cblxuICBnZXRJbWFnZU9wdGltaXNhdGlvbigpOiBMYW1iZGFDb21wdXRlIHtcbiAgICByZXR1cm4gdGhpcy5faW1hZ2VPcHRpbWlzYXRpb247XG4gIH1cblxuICBnZXRSZXZhbGlkYXRpb24oKTogTGFtYmRhQ29tcHV0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3JldmFsaWRhdGlvbjtcbiAgfVxuXG4gIGdldEFzc2V0c0J1Y2tldCgpOiBTdG9yYWdlIHtcbiAgICByZXR1cm4gdGhpcy5fYXNzZXRzQnVja2V0O1xuICB9XG5cbiAgZ2V0Q2FjaGVCdWNrZXQoKTogU3RvcmFnZSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlQnVja2V0O1xuICB9XG5cbiAgZ2V0TWVkaWFCdWNrZXQoKTogU3RvcmFnZSB7XG4gICAgcmV0dXJuIHRoaXMuX21lZGlhQnVja2V0O1xuICB9XG5cbiAgZ2V0VGFnQ2FjaGUoKTogRHluYW1vREJEYXRhYmFzZSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhZ0NhY2hlO1xuICB9XG5cbiAgZ2V0UmV2YWxpZGF0aW9uUXVldWUoKTogUXVldWVNZXNzYWdpbmcge1xuICAgIHJldHVybiB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZTtcbiAgfVxuXG4gIGdldENkbigpOiBDZG4ge1xuICAgIHJldHVybiB0aGlzLl9jZG47XG4gIH1cbn1cbiJdfQ==
|
|
585
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF5bG9hZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvcGF5bG9hZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7OztBQUVILDJDQUF1QztBQUN2Qyw2Q0FBK0M7QUFDL0MseURBQXFEO0FBQ3JELHVEQU1nQztBQUNoQywrRUFJNEM7QUFDNUMseURBQTRFO0FBQzVFLHlFQUFtRTtBQUtuRSwrQ0FPdUI7QUFDdkIsNkNBS3NCO0FBQ3RCLDZDQUEwRTtBQUMxRSxpREFJd0I7QUFDeEIscUNBQW9FO0FBQ3BFLHlFQUE4RDtBQUM5RCx5RUFBd0U7QUFFeEUsTUFBTSxnQkFBZ0IsR0FBRztJQUN2QixxRkFBcUY7SUFDckYsTUFBTSxFQUFFLE9BQU87SUFDZixtRkFBbUY7SUFDbkYsZUFBZSxFQUFFLFdBQVc7SUFDNUIsUUFBUSxFQUFFO1FBQ1IsSUFBSSxFQUFFLFVBQW1CO1FBQ3pCLDhFQUE4RTtRQUM5RSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLG1CQUFtQixFQUFFLElBQUk7S0FDMUI7SUFDRCxPQUFPLEVBQUU7UUFDUCw2RkFBNkY7UUFDN0YsYUFBYSxFQUFFLElBQUk7UUFDbkIsK0RBQStEO1FBQy9ELGNBQWMsRUFBRSxFQUFFO1FBQ2xCLDJFQUEyRTtRQUMzRSxZQUFZLEVBQUUsSUFBSTtRQUNsQix3RUFBd0U7UUFDeEUsYUFBYSxFQUFFLEVBQUU7UUFDakIsNEZBQTRGO1FBQzVGLG1CQUFtQixFQUFFLEdBQUc7UUFDeEIsK0VBQStFO1FBQy9FLG9CQUFvQixFQUFFLEdBQUc7S0FDMUI7SUFDRCxLQUFLLEVBQUU7UUFDTCxlQUFlLEVBQUUsUUFBUSxDQUFDLFNBQVM7S0FDcEM7SUFDRCxRQUFRLEVBQUU7UUFDUixNQUFNLEVBQUUsbUJBQW1CO1FBQzNCLEtBQUssRUFBRSxrQkFBa0I7UUFDekIsTUFBTSxFQUFFLHFDQUFxQztRQUM3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LElBQUksUUFBUTtvQkFDMUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksUUFBUTtpQkFDM0I7Z0JBQ0QsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSTthQUNyQixDQUFDO1lBQ0YsV0FBVyxFQUFFLHNDQUFzQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtTQUNyRSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDakMsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUNGO0FBbm1CRCwwQkFtbUJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXlsb2FkIENNUyBQYXR0ZXJuLlxuICpcbiAqIEEgaGlnaC1sZXZlbCBwYXR0ZXJuIHRoYXQgY3JlYXRlcyBhbGwgaW5mcmFzdHJ1Y3R1cmUgcmVxdWlyZWQgZm9yIGFcbiAqIFBheWxvYWQgQ01TIGRlcGxveW1lbnQgdXNpbmcgT3Blbk5leHQuXG4gKlxuICogUmVzb3VyY2VzIGNyZWF0ZWQ6XG4gKiAtIFJEUyBQb3N0Z3JlU1FMIGRhdGFiYXNlIChBdXJvcmEgb3IgSW5zdGFuY2UpXG4gKiAtIDMgUzMgYnVja2V0cyAoYXNzZXRzLCBjYWNoZSwgbWVkaWEpXG4gKiAtIER5bmFtb0RCIHRhYmxlICh0YWcgY2FjaGUgd2l0aCBHU0kpXG4gKiAtIFNRUyBGSUZPIHF1ZXVlIChyZXZhbGlkYXRpb24pXG4gKiAtIDMgTGFtYmRhIGZ1bmN0aW9ucyAoc2VydmVyLCBpbWFnZSBvcHRpbWlzYXRpb24sIHJldmFsaWRhdGlvbilcbiAqIC0gQ2xvdWRGcm9udCBkaXN0cmlidXRpb25cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcGF5bG9hZCA9IGFwcC5hZGRQYXR0ZXJuKFBhdHRlcm5GYWN0b3J5LmJ1aWxkKFwiUGF5bG9hZEFwcFwiLCB7XG4gKiAgIHR5cGU6IFwicGF5bG9hZFwiLFxuICogICBuYW1lOiBcIm15LWNtc1wiXG4gKiB9KSk7XG4gKlxuICogLy8gRXNjYXBlIGhhdGNoZXNcbiAqIHBheWxvYWQuZ2V0RGF0YWJhc2UoKS5ncmFudENvbm5lY3Qob3RoZXJMYW1iZGEpO1xuICovXG5cbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBDZm5PdXRwdXQsIFN0YWNrIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzL2F3cy9zZWNyZXRzXCI7XG5pbXBvcnQge1xuICBDb2RlLFxuICBSdW50aW1lLFxuICBBcmNoaXRlY3R1cmUsXG4gIEZ1bmN0aW9uVXJsQXV0aFR5cGUsXG4gIHR5cGUgSUZ1bmN0aW9uXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQge1xuICBDZXJ0aWZpY2F0ZSxcbiAgQ2VydGlmaWNhdGVWYWxpZGF0aW9uLFxuICB0eXBlIElDZXJ0aWZpY2F0ZVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNlcnRpZmljYXRlbWFuYWdlclwiO1xuaW1wb3J0IHsgSG9zdGVkWm9uZSwgQVJlY29yZCwgUmVjb3JkVGFyZ2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzXCI7XG5pbXBvcnQgeyBDbG91ZEZyb250VGFyZ2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yb3V0ZTUzLXRhcmdldHNcIjtcblxuaW1wb3J0IHR5cGUgQXBwIGZyb20gXCIuLi8uLi9hcHAuanNcIjtcbmltcG9ydCB7IHR5cGUgSVBheWxvYWRQcm9wcywgdHlwZSBJUGF5bG9hZCB9IGZyb20gXCIuL2ludGVyZmFjZXMvcGF0dGVybi5qc1wiO1xuaW1wb3J0IHsgdHlwZSBNYW5pZmVzdFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vdXRpbHMvbWFuaWZlc3RXcml0ZXIuanNcIjtcbmltcG9ydCB7XG4gIHR5cGUgUmVsYXRpb25hbERhdGFiYXNlLFxuICB0eXBlIER5bmFtb0RCRGF0YWJhc2UsXG4gIERhdGFiYXNlRmFjdG9yeSxcbiAgdHlwZSBBdXJvcmFEYXRhYmFzZVByb3BzLFxuICB0eXBlIEluc3RhbmNlRGF0YWJhc2VQcm9wcyxcbiAgdHlwZSBEeW5hbW9EQkRhdGFiYXNlUHJvcHNcbn0gZnJvbSBcIi4vZGF0YWJhc2UuanNcIjtcbmltcG9ydCB7XG4gIENvbXB1dGVGYWN0b3J5LFxuICB0eXBlIExhbWJkYUNvbXB1dGUsXG4gIEludm9rZU1vZGUsXG4gIHR5cGUgQ29kZUxhbWJkYVByb3BzXG59IGZyb20gXCIuL2NvbXB1dGUuanNcIjtcbmltcG9ydCB7IFN0b3JhZ2VGYWN0b3J5LCB0eXBlIFN0b3JhZ2UsIHR5cGUgUzNQcm9wcyB9IGZyb20gXCIuL3N0b3JhZ2UuanNcIjtcbmltcG9ydCB7XG4gIE1lc3NhZ2luZ0ZhY3RvcnksXG4gIHR5cGUgUXVldWVNZXNzYWdpbmcsXG4gIHR5cGUgSVF1ZXVlUHJvcHNcbn0gZnJvbSBcIi4vbWVzc2FnaW5nLmpzXCI7XG5pbXBvcnQgeyBDZG5GYWN0b3J5LCB0eXBlIENkbiwgdHlwZSBTbWFydENkblByb3BzIH0gZnJvbSBcIi4vY2RuLmpzXCI7XG5pbXBvcnQgeyBGamFsbExvZ2dlciB9IGZyb20gXCIuLi8uLi91dGlscy92YWxpZGF0aW9uTG9nZ2VyLmpzXCI7XG5pbXBvcnQgeyB0b1Bhc2NhbENhc2UsIHRvS2ViYWIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvY2FwaXRhbGlzZVN0cmluZy5qc1wiO1xuXG5jb25zdCBQQVlMT0FEX0RFRkFVTFRTID0ge1xuICAvKiogUGF0aCB0byBPcGVuTmV4dCBvdXRwdXQgcmVsYXRpdmUgdG8gYXBwIGZvbGRlciAoQ0RLIHJ1bnMgZnJvbSBmamFsbC88YXBwbmFtZT4pICovXG4gIFNPVVJDRTogXCIuLi8uLlwiLFxuICAvKiogQ2xvdWRGcm9udCByZXF1aXJlcyB1cy1lYXN0LTEgZm9yIGNlcnRhaW4gcmVzb3VyY2VzOyB1c2VkIGFzIHJlZ2lvbiBmYWxsYmFjayAqL1xuICBGQUxMQkFDS19SRUdJT046IFwidXMtZWFzdC0xXCIsXG4gIERBVEFCQVNFOiB7XG4gICAgVFlQRTogXCJJbnN0YW5jZVwiIGFzIGNvbnN0LFxuICAgIC8qKiBBV1MgZGVmYXVsdDsgNyBkYXlzIGNvdmVycyBtb3N0IGFjY2lkZW50YWwgZGF0YSBsb3NzIHJlY292ZXJ5IHNjZW5hcmlvcyAqL1xuICAgIEJBQ0tVUF9SRVRFTlRJT046IDcsXG4gICAgREVMRVRJT05fUFJPVEVDVElPTjogdHJ1ZVxuICB9LFxuICBDT01QVVRFOiB7XG4gICAgLyoqIDEuNSBHQiBiYWxhbmNlcyBOZXh0LmpzIFNTUiBwZXJmb3JtYW5jZSB2cyBjb3N0OyBiZWxvdyB0aGlzIHJpc2tzIE9PTSBvbiBjb21wbGV4IHBhZ2VzICovXG4gICAgU0VSVkVSX01FTU9SWTogMTUzNixcbiAgICAvKiogQVBJIEdhdGV3YXkgZGVmYXVsdCBtYXg7IHN1ZmZpY2llbnQgZm9yIG1vc3QgU1NSIHJlbmRlcnMgKi9cbiAgICBTRVJWRVJfVElNRU9VVDogMzAsXG4gICAgLyoqIFNoYXJwIGltYWdlIHByb2Nlc3NpbmcgbmVlZHMgbWVtb3J5IHByb3BvcnRpb25hbCB0byBpbWFnZSBkaW1lbnNpb25zICovXG4gICAgSU1BR0VfTUVNT1JZOiAxNTM2LFxuICAgIC8qKiBJbWFnZSBwcm9jZXNzaW5nIHR5cGljYWxseSBjb21wbGV0ZXMgaW4gPDEwczsgMzBzIHByb3ZpZGVzIG1hcmdpbiAqL1xuICAgIElNQUdFX1RJTUVPVVQ6IDMwLFxuICAgIC8qKiBSZXZhbGlkYXRpb24gaXMgbGlnaHR3ZWlnaHQgKEhUVFAgY2FsbCArIGNhY2hlIHdyaXRlKTsgaGFsZiBvZiBzZXJ2ZXIgbWVtb3J5IHN1ZmZpY2VzICovXG4gICAgUkVWQUxJREFUSU9OX01FTU9SWTogNzY4LFxuICAgIC8qKiA1IG1pbnV0ZXMgYWxsb3dzIGJhdGNoIHJldmFsaWRhdGlvbiBvZiBtYW55IHBhZ2VzIGluIGEgc2luZ2xlIGludm9jYXRpb24gKi9cbiAgICBSRVZBTElEQVRJT05fVElNRU9VVDogMzAwXG4gIH0sXG4gIENBQ0hFOiB7XG4gICAgTUFYX0FHRV9TRUNPTkRTOiAzMTUzNjAwMCAvLyAxIHllYXJcbiAgfSxcbiAgT1BFTk5FWFQ6IHtcbiAgICBBU1NFVFM6IFwiLm9wZW4tbmV4dC9hc3NldHNcIixcbiAgICBDQUNIRTogXCIub3Blbi1uZXh0L2NhY2hlXCIsXG4gICAgU0VSVkVSOiBcIi5vcGVuLW5leHQvc2VydmVyLWZ1bmN0aW9ucy9kZWZhdWx0XCIsXG4gICAgSU1BR0U6IFwiLm9wZW4tbmV4dC9pbWFnZS1vcHRpbWl6YXRpb24tZnVuY3Rpb25cIixcbiAgICBSRVZBTElEQVRJT046IFwiLm9wZW4tbmV4dC9yZXZhbGlkYXRpb24tZnVuY3Rpb25cIlxuICB9LFxuICBQQVRIUzoge1xuICAgIFNUQVRJQzogXCIvX25leHQvc3RhdGljLypcIixcbiAgICBJTUFHRTogXCIvX25leHQvaW1hZ2UqXCIsXG4gICAgQVBJOiBcIi9hcGkvKlwiLFxuICAgIEFETUlOOiBcIi9hZG1pbi8qXCJcbiAgfVxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBDb252ZXJ0IGEgbmFtZSB0byBhIHZhbGlkIFJEUyBkYXRhYmFzZSBuYW1lIChzbmFrZV9jYXNlKS5cbiAqIFJEUyBBUEkgYWxsb3dzIGxldHRlcnMsIG51bWJlcnMsIGFuZCB1bmRlcnNjb3JlcyBmb3IgUG9zdGdyZVNRTC9NeVNRTCBEYXRhYmFzZU5hbWUuXG4gKiBIeXBoZW5zIGFyZSByZWplY3RlZCwgc28gY29udmVydCB0aGVtIHRvIHVuZGVyc2NvcmVzLlxuICovXG5mdW5jdGlvbiB0b1ZhbGlkRGF0YWJhc2VOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0b0tlYmFiKG5hbWUpLnJlcGxhY2UoLy0vZywgXCJfXCIpO1xufVxuXG4vKipcbiAqIEV4dHJhY3Qgcm9vdCBkb21haW4gZnJvbSBhIGZ1bGwgZG9tYWluIG5hbWUuXG4gKiBlLmcuLCBcImNtcy5leGFtcGxlLmNvbVwiIC0+IFwiZXhhbXBsZS5jb21cIlxuICovXG5mdW5jdGlvbiBleHRyYWN0Um9vdERvbWFpbihkb21haW46IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHBhcnRzID0gZG9tYWluLnNwbGl0KFwiLlwiKTtcbiAgcmV0dXJuIHBhcnRzLmxlbmd0aCA+IDIgPyBwYXJ0cy5zbGljZSgtMikuam9pbihcIi5cIikgOiBkb21haW47XG59XG5cbi8qKlxuICogU2FmZWx5IGdldCB0aGUgdW5kZXJseWluZyBMYW1iZGEgZnVuY3Rpb24gZnJvbSBhIGNvbXB1dGUgcmVzb3VyY2UuXG4gKiBUaHJvd3MgYSBjbGVhciBlcnJvciBpZiB0aGUgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZS5cbiAqL1xuZnVuY3Rpb24gcmVxdWlyZUZ1bmN0aW9uKGNvbXB1dGU6IExhbWJkYUNvbXB1dGUsIG5hbWU6IHN0cmluZyk6IElGdW5jdGlvbiB7XG4gIGNvbnN0IGZuID0gY29tcHV0ZS5nZXRGdW5jdGlvbigpO1xuICBpZiAoIWZuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7bmFtZX0gTGFtYmRhIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuIGAgK1xuICAgICAgICBcIlRoaXMgaW5kaWNhdGVzIGFuIGludGVybmFsIGVycm9yIGluIGNvbXB1dGUgcmVzb3VyY2UgY3JlYXRpb24uXCJcbiAgICApO1xuICB9XG4gIHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBCYXNlIGRhdGFiYXNlIHByb3BlcnRpZXMgc2hhcmVkIGJldHdlZW4gQXVyb3JhIGFuZCBJbnN0YW5jZS5cbiAqIFVzZXMgUGljayB0byBleHRyYWN0IGNvbW1vbiBwcm9wZXJ0aWVzIGZyb20gdGhlIGRhdGFiYXNlIGNvbmZpZy5cbiAqL1xudHlwZSBCYXNlRGF0YWJhc2VQcm9wcyA9IFBpY2s8XG4gIEluc3RhbmNlRGF0YWJhc2VQcm9wcyxcbiAgfCBcImRhdGFiYXNlTmFtZVwiXG4gIHwgXCJkYXRhYmFzZUVuZ2luZVwiXG4gIHwgXCJiYWNrdXBSZXRlbnRpb25cIlxuICB8IFwiZGVsZXRpb25Qcm90ZWN0aW9uXCJcbiAgfCBcInB1YmxpY2x5QWNjZXNzaWJsZVwiXG4gIHwgXCJwb3J0XCJcbiAgfCBcInBlcmZvcm1hbmNlSW5zaWdodHNcIlxuICB8IFwicHJveHlcIlxuICB8IFwiY3JlZGVudGlhbHNcIlxuICB8IFwic25hcHNob3RJZGVudGlmaWVyXCJcbiAgfCBcInNuYXBzaG90VXNlcm5hbWVcIlxuPjtcblxuLyoqXG4gKiBMYW1iZGEgY29uZmlndXJhdGlvbiB3aXRoIHJlc29sdmVkIGRlZmF1bHRzLlxuICovXG5pbnRlcmZhY2UgUmVzb2x2ZWRMYW1iZGFDb25maWcge1xuICBtZW1vcnlTaXplOiBudW1iZXI7XG4gIHRpbWVvdXQ6IG51bWJlcjtcbiAgZXBoZW1lcmFsU3RvcmFnZVNpemU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRXh0cmFjdCBMYW1iZGEgY29uZmlnIGZyb20gcHJvcHMgd2l0aCBkZWZhdWx0cy5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUxhbWJkYUNvbmZpZyhcbiAgY29uZmlnOlxuICAgIHwgeyBtZW1vcnlTaXplPzogbnVtYmVyOyB0aW1lb3V0PzogbnVtYmVyOyBlcGhlbWVyYWxTdG9yYWdlU2l6ZT86IG51bWJlciB9XG4gICAgfCB1bmRlZmluZWQsXG4gIGRlZmF1bHRzOiB7IG1lbW9yeTogbnVtYmVyOyB0aW1lb3V0OiBudW1iZXIgfVxuKTogUmVzb2x2ZWRMYW1iZGFDb25maWcge1xuICByZXR1cm4ge1xuICAgIG1lbW9yeVNpemU6IGNvbmZpZz8ubWVtb3J5U2l6ZSA/PyBkZWZhdWx0cy5tZW1vcnksXG4gICAgdGltZW91dDogY29uZmlnPy50aW1lb3V0ID8/IGRlZmF1bHRzLnRpbWVvdXQsXG4gICAgZXBoZW1lcmFsU3RvcmFnZVNpemU6IGNvbmZpZz8uZXBoZW1lcmFsU3RvcmFnZVNpemVcbiAgfTtcbn1cblxuLyoqXG4gKiBQYXlsb2FkIENNUyBwYXR0ZXJuIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIENvbXBvc2VzIGFsbCByZXF1aXJlZCBBV1MgcmVzb3VyY2VzIGZvciBhIFBheWxvYWQgZGVwbG95bWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBheWxvYWQgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJUGF5bG9hZCB7XG4gIHB1YmxpYyByZWFkb25seSBwYXR0ZXJuVHlwZSA9IFwicGF5bG9hZFwiIGFzIGNvbnN0O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IElQYXlsb2FkUHJvcHM7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFzY2FsTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIF9wYXlsb2FkU2VjcmV0OiBTZWNyZXQ7XG5cbiAgcHJpdmF0ZSBfZGF0YWJhc2UhOiBSZWxhdGlvbmFsRGF0YWJhc2U7XG4gIHByaXZhdGUgX3NlcnZlciE6IExhbWJkYUNvbXB1dGU7XG4gIHByaXZhdGUgX2ltYWdlT3B0aW1pc2F0aW9uITogTGFtYmRhQ29tcHV0ZTtcbiAgcHJpdmF0ZSBfcmV2YWxpZGF0aW9uITogTGFtYmRhQ29tcHV0ZTtcbiAgcHJpdmF0ZSBfYXNzZXRzQnVja2V0ITogU3RvcmFnZTtcbiAgcHJpdmF0ZSBfY2FjaGVCdWNrZXQhOiBTdG9yYWdlO1xuICBwcml2YXRlIF9tZWRpYUJ1Y2tldCE6IFN0b3JhZ2U7XG4gIHByaXZhdGUgX3RhZ0NhY2hlITogRHluYW1vREJEYXRhYmFzZTtcbiAgcHJpdmF0ZSBfcmV2YWxpZGF0aW9uUXVldWUhOiBRdWV1ZU1lc3NhZ2luZztcbiAgcHJpdmF0ZSBfY2RuITogQ2RuO1xuICBwcml2YXRlIF9yZXNvbHZlZERvbWFpbjpcbiAgICB8IHtcbiAgICAgICAgZG9tYWluTmFtZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgICAgICBjZXJ0aWZpY2F0ZTogSUNlcnRpZmljYXRlIHwgdW5kZWZpbmVkO1xuICAgICAgICBob3N0ZWRab25lOiBSZXR1cm5UeXBlPHR5cGVvZiBIb3N0ZWRab25lLmZyb21Mb29rdXA+IHwgdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGFwcDogQXBwLCBwcm9wczogSVBheWxvYWRQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLmFwcCA9IGFwcDtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5wYXNjYWxOYW1lID0gdG9QYXNjYWxDYXNlKHByb3BzLm5hbWUpO1xuICAgIHRoaXMuX3BheWxvYWRTZWNyZXQgPSBuZXcgU2VjcmV0KHRoaXMsIGAke3RoaXMucGFzY2FsTmFtZX1QYXlsb2FkU2VjcmV0YCwge1xuICAgICAgc2VjcmV0TmFtZTogYCR7cHJvcHMubmFtZX0vcGF5bG9hZC1zZWNyZXRgLFxuICAgICAgZGVzY3JpcHRpb246IGBQYXlsb2FkIENNUyBzZWNyZXQgZm9yICR7cHJvcHMubmFtZX1gLFxuICAgICAgZ2VuZXJhdGVTZWNyZXRTdHJpbmc6IHtcbiAgICAgICAgZXhjbHVkZVB1bmN0dWF0aW9uOiB0cnVlLFxuICAgICAgICBwYXNzd29yZExlbmd0aDogNjRcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMucmVnaXN0ZXJNYW5pZmVzdCgpO1xuICAgIHRoaXMudmFsaWRhdGVQcm9wcygpO1xuXG4gICAgdGhpcy5jcmVhdGVEYXRhYmFzZSgpO1xuICAgIHRoaXMuY3JlYXRlU3RvcmFnZUJ1Y2tldHMoKTtcbiAgICB0aGlzLmNyZWF0ZVRhZ0NhY2hlKCk7XG4gICAgdGhpcy5jcmVhdGVSZXZhbGlkYXRpb25RdWV1ZSgpO1xuICAgIHRoaXMuY3JlYXRlTGFtYmRhRnVuY3Rpb25zKCk7XG4gICAgdGhpcy5jcmVhdGVDZG4oKTtcbiAgICB0aGlzLmNyZWF0ZURuc1JlY29yZCgpO1xuICAgIHRoaXMuZXhwb3J0UGF0dGVybk91dHB1dHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVnaXN0ZXJNYW5pZmVzdCgpOiB2b2lkIHtcbiAgICBjb25zdCBtYW5pZmVzdFBhdHRlcm46IE1hbmlmZXN0UGF0dGVybiA9IHtcbiAgICAgIHR5cGU6IFwicGF5bG9hZFwiLFxuICAgICAgbmFtZTogdGhpcy5wcm9wcy5uYW1lLFxuICAgICAgc291cmNlOiBQQVlMT0FEX0RFRkFVTFRTLlNPVVJDRVxuICAgIH07XG4gICAgdGhpcy5hcHAuZ2V0TWFuaWZlc3RDb2xsZWN0b3IoKS5zZXRQYXR0ZXJuKG1hbmlmZXN0UGF0dGVybik7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlUHJvcHMoKTogdm9pZCB7XG4gICAgY29uc3QgZGJDb25maWcgPSB0aGlzLnByb3BzLmRhdGFiYXNlID8/IHt9O1xuICAgIGlmIChkYkNvbmZpZy5wdWJsaWNseUFjY2Vzc2libGUpIHtcbiAgICAgIEZqYWxsTG9nZ2VyLndhcm4oXG4gICAgICAgIGBQYXlsb2FkIGRhdGFiYXNlICcke3RoaXMucHJvcHMubmFtZX0nIGlzIGNvbmZpZ3VyZWQgd2l0aCBwdWJsaWMgYWNjZXNzaWJpbGl0eS4gYCArXG4gICAgICAgICAgXCJUaGlzIGlzIGEgc2VjdXJpdHkgcmlzayBhbmQgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGV2ZWxvcG1lbnQuXCJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEYXRhYmFzZSgpOiB2b2lkIHtcbiAgICBjb25zdCBkYkNvbmZpZyA9IHRoaXMucHJvcHMuZGF0YWJhc2UgPz8ge307XG4gICAgY29uc3QgZGF0YWJhc2VUeXBlID0gZGJDb25maWcudHlwZSA/PyBQQVlMT0FEX0RFRkFVTFRTLkRBVEFCQVNFLlRZUEU7XG5cbiAgICB0aGlzLl9kYXRhYmFzZSA9XG4gICAgICBkYXRhYmFzZVR5cGUgPT09IFwiQXVyb3JhXCJcbiAgICAgICAgPyB0aGlzLmNyZWF0ZUF1cm9yYURhdGFiYXNlKGRiQ29uZmlnKVxuICAgICAgICA6IHRoaXMuY3JlYXRlSW5zdGFuY2VEYXRhYmFzZShkYkNvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQmFzZURhdGFiYXNlUHJvcHMoXG4gICAgZGJDb25maWc6IE5vbk51bGxhYmxlPElQYXlsb2FkUHJvcHNbXCJkYXRhYmFzZVwiXT5cbiAgKTogQmFzZURhdGFiYXNlUHJvcHMge1xuICAgIHJldHVybiB7XG4gICAgICBkYXRhYmFzZU5hbWU6XG4gICAgICAgIGRiQ29uZmlnLmRhdGFiYXNlTmFtZSA/PyB0b1ZhbGlkRGF0YWJhc2VOYW1lKHRoaXMucHJvcHMubmFtZSksXG4gICAgICBkYXRhYmFzZUVuZ2luZTogZGJDb25maWcuZGF0YWJhc2VFbmdpbmUgPz8gXCJwb3N0Z3Jlc3FsXCIsXG4gICAgICBiYWNrdXBSZXRlbnRpb246XG4gICAgICAgIGRiQ29uZmlnLmJhY2t1cFJldGVudGlvbiA/PyBQQVlMT0FEX0RFRkFVTFRTLkRBVEFCQVNFLkJBQ0tVUF9SRVRFTlRJT04sXG4gICAgICBkZWxldGlvblByb3RlY3Rpb246XG4gICAgICAgIGRiQ29uZmlnLmRlbGV0aW9uUHJvdGVjdGlvbiA/P1xuICAgICAgICBQQVlMT0FEX0RFRkFVTFRTLkRBVEFCQVNFLkRFTEVUSU9OX1BST1RFQ1RJT04sXG4gICAgICBwdWJsaWNseUFjY2Vzc2libGU6IGRiQ29uZmlnLnB1YmxpY2x5QWNjZXNzaWJsZSxcbiAgICAgIHBvcnQ6IGRiQ29uZmlnLnBvcnQsXG4gICAgICBwZXJmb3JtYW5jZUluc2lnaHRzOiBkYkNvbmZpZy5wZXJmb3JtYW5jZUluc2lnaHRzLFxuICAgICAgcHJveHk6IGRiQ29uZmlnLnByb3h5LFxuICAgICAgY3JlZGVudGlhbHM6IGRiQ29uZmlnLmNyZWRlbnRpYWxzLFxuICAgICAgc25hcHNob3RJZGVudGlmaWVyOiBkYkNvbmZpZy5zbmFwc2hvdElkZW50aWZpZXIsXG4gICAgICBzbmFwc2hvdFVzZXJuYW1lOiBkYkNvbmZpZy5zbmFwc2hvdFVzZXJuYW1lXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQXVyb3JhRGF0YWJhc2UoXG4gICAgZGJDb25maWc6IE5vbk51bGxhYmxlPElQYXlsb2FkUHJvcHNbXCJkYXRhYmFzZVwiXT5cbiAgKTogUmVsYXRpb25hbERhdGFiYXNlIHtcbiAgICBjb25zdCBhdXJvcmFQcm9wczogQXVyb3JhRGF0YWJhc2VQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwiQXVyb3JhXCIsXG4gICAgICAuLi50aGlzLmJ1aWxkQmFzZURhdGFiYXNlUHJvcHMoZGJDb25maWcpLFxuICAgICAgYWxsb3dlZElwQ2lkcjogZGJDb25maWcuYWxsb3dlZElwQ2lkcixcbiAgICAgIGVuY3J5cHRpb246IGRiQ29uZmlnLmVuY3J5cHRpb24gYXMgQXVyb3JhRGF0YWJhc2VQcm9wc1tcImVuY3J5cHRpb25cIl0sXG4gICAgICB3cml0ZXI6IGRiQ29uZmlnLndyaXRlcixcbiAgICAgIHJlYWRlcnM6IGRiQ29uZmlnLnJlYWRlcnMsXG4gICAgICBhbGxvd1ZwY0FjY2VzczogZGJDb25maWcuYWxsb3dWcGNBY2Nlc3MsXG4gICAgICBtb25pdG9yaW5nSW50ZXJ2YWw6IGRiQ29uZmlnLm1vbml0b3JpbmdJbnRlcnZhbCxcbiAgICAgIHByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93OiBkYkNvbmZpZy5wcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvd1xuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuYXBwLmFkZERhdGFiYXNlKFxuICAgICAgRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKHRoaXMucHJvcHMubmFtZSwgYXVyb3JhUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlSW5zdGFuY2VEYXRhYmFzZShcbiAgICBkYkNvbmZpZzogTm9uTnVsbGFibGU8SVBheWxvYWRQcm9wc1tcImRhdGFiYXNlXCJdPlxuICApOiBSZWxhdGlvbmFsRGF0YWJhc2Uge1xuICAgIGNvbnN0IGluc3RhbmNlUHJvcHM6IEluc3RhbmNlRGF0YWJhc2VQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwiSW5zdGFuY2VcIixcbiAgICAgIC4uLnRoaXMuYnVpbGRCYXNlRGF0YWJhc2VQcm9wcyhkYkNvbmZpZyksXG4gICAgICBwdWJsaWNseUFjY2Vzc2libGU6IGRiQ29uZmlnLnB1YmxpY2x5QWNjZXNzaWJsZSA/PyBmYWxzZSxcbiAgICAgIGluc3RhbmNlVHlwZTogZGJDb25maWcuaW5zdGFuY2VUeXBlLFxuICAgICAgYWxsb2NhdGVkU3RvcmFnZTogZGJDb25maWcuYWxsb2NhdGVkU3RvcmFnZSxcbiAgICAgIG11bHRpQXo6IGRiQ29uZmlnLm11bHRpQXosXG4gICAgICByZWFkUmVwbGljYTogZGJDb25maWcucmVhZFJlcGxpY2EsXG4gICAgICBlbmNyeXB0aW9uOiBkYkNvbmZpZy5lbmNyeXB0aW9uIGFzIEluc3RhbmNlRGF0YWJhc2VQcm9wc1tcImVuY3J5cHRpb25cIl1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFwcC5hZGREYXRhYmFzZShcbiAgICAgIERhdGFiYXNlRmFjdG9yeS5idWlsZCh0aGlzLnByb3BzLm5hbWUsIGluc3RhbmNlUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU3RvcmFnZUJ1Y2tldHMoKTogdm9pZCB7XG4gICAgdGhpcy5fYXNzZXRzQnVja2V0ID0gdGhpcy5jcmVhdGVBc3NldHNCdWNrZXQoKTtcbiAgICB0aGlzLl9jYWNoZUJ1Y2tldCA9IHRoaXMuY3JlYXRlQ2FjaGVCdWNrZXQoKTtcbiAgICB0aGlzLl9tZWRpYUJ1Y2tldCA9IHRoaXMuY3JlYXRlTWVkaWFCdWNrZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQXNzZXRzQnVja2V0KCk6IFN0b3JhZ2Uge1xuICAgIGNvbnN0IGFzc2V0c0NvbmZpZyA9IHRoaXMucHJvcHMuc3RvcmFnZT8uYXNzZXRzID8/IHt9O1xuICAgIGNvbnN0IGFzc2V0c1Byb3BzOiBTM1Byb3BzID0ge1xuICAgICAgdmVyc2lvbmVkOiBhc3NldHNDb25maWcudmVyc2lvbmVkID8/IGZhbHNlLFxuICAgICAgZGVwbG95bWVudDoge1xuICAgICAgICBzb3VyY2U6IGAke1BBWUxPQURfREVGQVVMVFMuU09VUkNFfS8ke1BBWUxPQURfREVGQVVMVFMuT1BFTk5FWFQuQVNTRVRTfWAsXG4gICAgICAgIHBydW5lOiB0cnVlLFxuICAgICAgICBjYWNoZUNvbnRyb2w6IHtcbiAgICAgICAgICBtYXhBZ2U6IFBBWUxPQURfREVGQVVMVFMuQ0FDSEUuTUFYX0FHRV9TRUNPTkRTLFxuICAgICAgICAgIGltbXV0YWJsZTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5hcHAuYWRkU3RvcmFnZShcbiAgICAgIFN0b3JhZ2VGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0tYXNzZXRzYCwgYXNzZXRzUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2FjaGVCdWNrZXQoKTogU3RvcmFnZSB7XG4gICAgY29uc3QgY2FjaGVDb25maWcgPSB0aGlzLnByb3BzLnN0b3JhZ2U/LmNhY2hlID8/IHt9O1xuICAgIGNvbnN0IGNhY2hlUHJvcHM6IFMzUHJvcHMgPSB7XG4gICAgICB2ZXJzaW9uZWQ6IGNhY2hlQ29uZmlnLnZlcnNpb25lZCA/PyBmYWxzZSxcbiAgICAgIGRlcGxveW1lbnQ6IHtcbiAgICAgICAgc291cmNlOiBgJHtQQVlMT0FEX0RFRkFVTFRTLlNPVVJDRX0vJHtQQVlMT0FEX0RFRkFVTFRTLk9QRU5ORVhULkNBQ0hFfWAsXG4gICAgICAgIHBydW5lOiBmYWxzZSAvLyBJU1IgYWRkcyBmaWxlcyBhdCBydW50aW1lXG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5hcHAuYWRkU3RvcmFnZShcbiAgICAgIFN0b3JhZ2VGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0tY2FjaGVgLCBjYWNoZVByb3BzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU1lZGlhQnVja2V0KCk6IFN0b3JhZ2Uge1xuICAgIGNvbnN0IG1lZGlhQ29uZmlnID0gdGhpcy5wcm9wcy5zdG9yYWdlPy5tZWRpYSA/PyB7fTtcbiAgICBjb25zdCBtZWRpYVByb3BzOiBTM1Byb3BzID0ge1xuICAgICAgdmVyc2lvbmVkOiBtZWRpYUNvbmZpZy52ZXJzaW9uZWQgPz8gZmFsc2VcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFwcC5hZGRTdG9yYWdlKFxuICAgICAgU3RvcmFnZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1tZWRpYWAsIG1lZGlhUHJvcHMpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVGFnQ2FjaGUoKTogdm9pZCB7XG4gICAgY29uc3QgdGFnQ2FjaGVQcm9wczogRHluYW1vREJEYXRhYmFzZVByb3BzID0ge1xuICAgICAgdHlwZTogXCJEeW5hbW9EQlwiLFxuICAgICAgcGFydGl0aW9uS2V5OiB7IG5hbWU6IFwidGFnXCIsIHR5cGU6IFwiU1wiIH0sXG4gICAgICBzb3J0S2V5OiB7IG5hbWU6IFwicGF0aFwiLCB0eXBlOiBcIlNcIiB9LFxuICAgICAgZ2xvYmFsU2Vjb25kYXJ5SW5kZXhlczogW1xuICAgICAgICB7XG4gICAgICAgICAgaW5kZXhOYW1lOiBcInJldmFsaWRhdGVcIixcbiAgICAgICAgICBwYXJ0aXRpb25LZXk6IHsgbmFtZTogXCJwYXRoXCIsIHR5cGU6IFwiU1wiIH0sXG4gICAgICAgICAgc29ydEtleTogeyBuYW1lOiBcInJldmFsaWRhdGVkQXRcIiwgdHlwZTogXCJOXCIgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgICB0aGlzLl90YWdDYWNoZSA9IHRoaXMuYXBwLmFkZERhdGFiYXNlKFxuICAgICAgRGF0YWJhc2VGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0tdGFnLWNhY2hlYCwgdGFnQ2FjaGVQcm9wcylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSZXZhbGlkYXRpb25RdWV1ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBxdWV1ZUNvbmZpZyA9IHRoaXMucHJvcHMubWVzc2FnaW5nPy5yZXZhbGlkYXRpb25RdWV1ZSA/PyB7fTtcbiAgICBjb25zdCByZXZhbGlkYXRpb25UaW1lb3V0ID1cbiAgICAgIHRoaXMucHJvcHMuY29tcHV0ZT8ucmV2YWxpZGF0aW9uPy50aW1lb3V0ID8/XG4gICAgICBQQVlMT0FEX0RFRkFVTFRTLkNPTVBVVEUuUkVWQUxJREFUSU9OX1RJTUVPVVQ7XG5cbiAgICAvLyBSZXNvbHZlIGRlYWQgbGV0dGVyIHF1ZXVlIGNvbmZpZ1xuICAgIGxldCBkbHFDb25maWc6IElRdWV1ZVByb3BzW1wiZGVhZExldHRlclF1ZXVlXCJdO1xuICAgIGlmIChxdWV1ZUNvbmZpZy5kZWFkTGV0dGVyUXVldWUgPT09IGZhbHNlKSB7XG4gICAgICBkbHFDb25maWcgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChxdWV1ZUNvbmZpZy5kZWFkTGV0dGVyUXVldWUpIHtcbiAgICAgIGRscUNvbmZpZyA9IHtcbiAgICAgICAgZW5hYmxlZDogcXVldWVDb25maWcuZGVhZExldHRlclF1ZXVlLmVuYWJsZWQgPz8gdHJ1ZSxcbiAgICAgICAgbWF4UmVjZWl2ZUNvdW50OiBxdWV1ZUNvbmZpZy5kZWFkTGV0dGVyUXVldWUubWF4UmVjZWl2ZUNvdW50ID8/IDNcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRscUNvbmZpZyA9IHsgZW5hYmxlZDogdHJ1ZSwgbWF4UmVjZWl2ZUNvdW50OiAzIH07XG4gICAgfVxuXG4gICAgY29uc3QgcXVldWVQcm9wczogSVF1ZXVlUHJvcHMgPSB7XG4gICAgICB0eXBlOiBcInF1ZXVlXCIsXG4gICAgICBxdWV1ZVR5cGU6IFwiZmlmb1wiLFxuICAgICAgdmlzaWJpbGl0eVRpbWVvdXQ6IHF1ZXVlQ29uZmlnLnZpc2liaWxpdHlUaW1lb3V0ID8/IHJldmFsaWRhdGlvblRpbWVvdXQsXG4gICAgICBtZXNzYWdlUmV0ZW50aW9uUGVyaW9kOiBxdWV1ZUNvbmZpZy5tZXNzYWdlUmV0ZW50aW9uUGVyaW9kLFxuICAgICAgbWF4TWVzc2FnZVNpemU6IHF1ZXVlQ29uZmlnLm1heE1lc3NhZ2VTaXplLFxuICAgICAgY29udGVudEJhc2VkRGVkdXBsaWNhdGlvbjogdHJ1ZSxcbiAgICAgIGRlYWRMZXR0ZXJRdWV1ZTogZGxxQ29uZmlnXG4gICAgfTtcbiAgICB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZSA9IHRoaXMuYXBwLmFkZE1lc3NhZ2luZyhcbiAgICAgIE1lc3NhZ2luZ0ZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1yZXZhbGlkYXRpb25gLCBxdWV1ZVByb3BzKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUxhbWJkYUZ1bmN0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLl9zZXJ2ZXIgPSB0aGlzLmNyZWF0ZVNlcnZlckxhbWJkYSgpO1xuICAgIHRoaXMuX2ltYWdlT3B0aW1pc2F0aW9uID0gdGhpcy5jcmVhdGVJbWFnZUxhbWJkYSgpO1xuICAgIHRoaXMuX3JldmFsaWRhdGlvbiA9IHRoaXMuY3JlYXRlUmV2YWxpZGF0aW9uTGFtYmRhKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVNlcnZlckxhbWJkYSgpOiBMYW1iZGFDb21wdXRlIHtcbiAgICBjb25zdCB7IG1lbW9yeVNpemUsIHRpbWVvdXQsIGVwaGVtZXJhbFN0b3JhZ2VTaXplIH0gPSByZXNvbHZlTGFtYmRhQ29uZmlnKFxuICAgICAgdGhpcy5wcm9wcy5jb21wdXRlPy5zZXJ2ZXIsXG4gICAgICB7XG4gICAgICAgIG1lbW9yeTogUEFZTE9BRF9ERUZBVUxUUy5DT01QVVRFLlNFUlZFUl9NRU1PUlksXG4gICAgICAgIHRpbWVvdXQ6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5TRVJWRVJfVElNRU9VVFxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCBzZXJ2ZXJQcm9wczogQ29kZUxhbWJkYVByb3BzID0ge1xuICAgICAgdHlwZTogXCJsYW1iZGFcIixcbiAgICAgIGRlcGxveW1lbnQ6IFwiY29kZVwiLFxuICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoXG4gICAgICAgIGAke1BBWUxPQURfREVGQVVMVFMuU09VUkNFfS8ke1BBWUxPQURfREVGQVVMVFMuT1BFTk5FWFQuU0VSVkVSfWBcbiAgICAgICksXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICBtZW1vcnlTaXplLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplLFxuICAgICAgZnVuY3Rpb25Vcmw6IHtcbiAgICAgICAgYXV0aFR5cGU6IEZ1bmN0aW9uVXJsQXV0aFR5cGUuTk9ORSxcbiAgICAgICAgaW52b2tlTW9kZTogSW52b2tlTW9kZS5SRVNQT05TRV9TVFJFQU1cbiAgICAgIH0sXG4gICAgICBjb25uZWN0aW9uczogW3RoaXMuX2RhdGFiYXNlXSxcbiAgICAgIHNlY3JldHNJbXBvcnQ6IHtcbiAgICAgICAgREFUQUJBU0VfVVNFUk5BTUU6IHRoaXMuX2RhdGFiYXNlXG4gICAgICAgICAgLmdldENyZWRlbnRpYWxzKClcbiAgICAgICAgICAuZ2V0SW1wb3J0KFwidXNlcm5hbWVcIiksXG4gICAgICAgIERBVEFCQVNFX1BBU1NXT1JEOiB0aGlzLl9kYXRhYmFzZVxuICAgICAgICAgIC5nZXRDcmVkZW50aWFscygpXG4gICAgICAgICAgLmdldEltcG9ydChcInBhc3N3b3JkXCIpLFxuICAgICAgICBQQVlMT0FEX1NFQ1JFVDogdGhpcy5fcGF5bG9hZFNlY3JldC5nZXRJbXBvcnQoKVxuICAgICAgfSxcbiAgICAgIGVudmlyb25tZW50OiB0aGlzLmJ1aWxkU2VydmVyRW52aXJvbm1lbnQoKVxuICAgIH07XG5cbiAgICBjb25zdCBzZXJ2ZXIgPSB0aGlzLmFwcC5hZGRDb21wdXRlKFxuICAgICAgQ29tcHV0ZUZhY3RvcnkuYnVpbGQoYCR7dGhpcy5wcm9wcy5uYW1lfS1zZXJ2ZXJgLCBzZXJ2ZXJQcm9wcylcbiAgICApO1xuXG4gICAgdGhpcy5ncmFudFNlcnZlclBlcm1pc3Npb25zKHNlcnZlcik7XG4gICAgcmV0dXJuIHNlcnZlcjtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTZXJ2ZXJFbnZpcm9ubWVudCgpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBiYXNlRW52OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgREFUQUJBU0VfSE9TVDogdGhpcy5fZGF0YWJhc2UuZ2V0SG9zdEVuZHBvaW50KCksXG4gICAgICBEQVRBQkFTRV9QT1JUOiB0aGlzLl9kYXRhYmFzZS5nZXRIb3N0UG9ydCgpLFxuICAgICAgREFUQUJBU0VfTkFNRTogdGhpcy5fZGF0YWJhc2UuZ2V0RGF0YWJhc2VOYW1lKCksXG4gICAgICBEQVRBQkFTRV9TU0w6IFwidHJ1ZVwiLFxuICAgICAgQ0FDSEVfQlVDS0VUX05BTUU6IHRoaXMuX2NhY2hlQnVja2V0LmdldEJ1Y2tldE5hbWUoKSxcbiAgICAgIENBQ0hFX0JVQ0tFVF9SRUdJT046IFN0YWNrLm9mKHRoaXMpLnJlZ2lvbixcbiAgICAgIENBQ0hFX0RZTkFNT19UQUJMRTogdGhpcy5fdGFnQ2FjaGUuZ2V0VGFibGVOYW1lKCksXG4gICAgICBSRVZBTElEQVRJT05fUVVFVUVfVVJMOiB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZS5nZXRRdWV1ZVVybCgpLFxuICAgICAgUkVWQUxJREFUSU9OX1FVRVVFX1JFR0lPTjogU3RhY2sub2YodGhpcykucmVnaW9uLFxuICAgICAgTUVESUFfQlVDS0VUX05BTUU6IHRoaXMuX21lZGlhQnVja2V0LmdldEJ1Y2tldE5hbWUoKVxuICAgIH07XG5cbiAgICAvLyBMb2NrIGRvd24gQ09SUyB0byBjdXN0b20gZG9tYWluIHdoZW4gcHJvdmlkZWRcbiAgICBjb25zdCBjdXN0b21Eb21haW4gPSB0aGlzLnByb3BzLmRvbWFpbiA/PyB0aGlzLnByb3BzLmNkbj8uZG9tYWluTmFtZXM/LlswXTtcbiAgICBpZiAoY3VzdG9tRG9tYWluKSB7XG4gICAgICBiYXNlRW52Lk5FWFRfUFVCTElDX1NFUlZFUl9VUkwgPSBgaHR0cHM6Ly8ke2N1c3RvbURvbWFpbn1gO1xuICAgIH1cblxuICAgIHJldHVybiB7IC4uLmJhc2VFbnYsIC4uLnRoaXMucHJvcHMuZW52aXJvbm1lbnQgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ3JhbnRTZXJ2ZXJQZXJtaXNzaW9ucyhzZXJ2ZXI6IExhbWJkYUNvbXB1dGUpOiB2b2lkIHtcbiAgICBjb25zdCBzZXJ2ZXJGdW5jdGlvbiA9IHJlcXVpcmVGdW5jdGlvbihzZXJ2ZXIsIFwiU2VydmVyXCIpO1xuICAgIHRoaXMuX2NhY2hlQnVja2V0LmdyYW50UmVhZFdyaXRlKHNlcnZlckZ1bmN0aW9uKTtcbiAgICB0aGlzLl9tZWRpYUJ1Y2tldC5ncmFudFJlYWRXcml0ZShzZXJ2ZXJGdW5jdGlvbik7XG4gICAgdGhpcy5fdGFnQ2FjaGUuZ3JhbnRSZWFkV3JpdGVEYXRhKHNlcnZlckZ1bmN0aW9uKTtcbiAgICB0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZS5ncmFudFNlbmRNZXNzYWdlcyhzZXJ2ZXJGdW5jdGlvbik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUltYWdlTGFtYmRhKCk6IExhbWJkYUNvbXB1dGUge1xuICAgIGNvbnN0IHsgbWVtb3J5U2l6ZSwgdGltZW91dCwgZXBoZW1lcmFsU3RvcmFnZVNpemUgfSA9IHJlc29sdmVMYW1iZGFDb25maWcoXG4gICAgICB0aGlzLnByb3BzLmNvbXB1dGU/LmltYWdlT3B0aW1pc2F0aW9uLFxuICAgICAge1xuICAgICAgICBtZW1vcnk6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5JTUFHRV9NRU1PUlksXG4gICAgICAgIHRpbWVvdXQ6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5JTUFHRV9USU1FT1VUXG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbnN0IGltYWdlUHJvcHM6IENvZGVMYW1iZGFQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwibGFtYmRhXCIsXG4gICAgICBkZXBsb3ltZW50OiBcImNvZGVcIixcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KFxuICAgICAgICBgJHtQQVlMT0FEX0RFRkFVTFRTLlNPVVJDRX0vJHtQQVlMT0FEX0RFRkFVTFRTLk9QRU5ORVhULklNQUdFfWBcbiAgICAgICksXG4gICAgICBoYW5kbGVyOiBcImluZGV4LmhhbmRsZXJcIixcbiAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICBtZW1vcnlTaXplLFxuICAgICAgdGltZW91dCxcbiAgICAgIGVwaGVtZXJhbFN0b3JhZ2VTaXplLFxuICAgICAgZnVuY3Rpb25Vcmw6IHsgYXV0aFR5cGU6IEZ1bmN0aW9uVXJsQXV0aFR5cGUuTk9ORSB9LFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgQlVDS0VUX05BTUU6IHRoaXMuX2Fzc2V0c0J1Y2tldC5nZXRCdWNrZXROYW1lKCksXG4gICAgICAgIEJVQ0tFVF9LRVlfUFJFRklYOiBcIl9hc3NldHNcIlxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBpbWFnZSA9IHRoaXMuYXBwLmFkZENvbXB1dGUoXG4gICAgICBDb21wdXRlRmFjdG9yeS5idWlsZChgJHt0aGlzLnByb3BzLm5hbWV9LWltYWdlYCwgaW1hZ2VQcm9wcylcbiAgICApO1xuXG4gICAgY29uc3QgaW1hZ2VGdW5jdGlvbiA9IHJlcXVpcmVGdW5jdGlvbihpbWFnZSwgXCJJbWFnZU9wdGltaXNhdGlvblwiKTtcbiAgICB0aGlzLl9hc3NldHNCdWNrZXQuZ3JhbnRSZWFkKGltYWdlRnVuY3Rpb24pO1xuXG4gICAgcmV0dXJuIGltYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVSZXZhbGlkYXRpb25MYW1iZGEoKTogTGFtYmRhQ29tcHV0ZSB7XG4gICAgY29uc3QgeyBtZW1vcnlTaXplLCB0aW1lb3V0LCBlcGhlbWVyYWxTdG9yYWdlU2l6ZSB9ID0gcmVzb2x2ZUxhbWJkYUNvbmZpZyhcbiAgICAgIHRoaXMucHJvcHMuY29tcHV0ZT8ucmV2YWxpZGF0aW9uLFxuICAgICAge1xuICAgICAgICBtZW1vcnk6IFBBWUxPQURfREVGQVVMVFMuQ09NUFVURS5SRVZBTElEQVRJT05fTUVNT1JZLFxuICAgICAgICB0aW1lb3V0OiBQQVlMT0FEX0RFRkFVTFRTLkNPTVBVVEUuUkVWQUxJREFUSU9OX1RJTUVPVVRcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3QgcmV2YWxpZGF0aW9uUHJvcHM6IENvZGVMYW1iZGFQcm9wcyA9IHtcbiAgICAgIHR5cGU6IFwibGFtYmRhXCIsXG4gICAgICBkZXBsb3ltZW50OiBcImNvZGVcIixcbiAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KFxuICAgICAgICBgJHtQQVlMT0FEX0RFRkFVTFRTLlNPVVJDRX0vJHtQQVlMT0FEX0RFRkFVTFRTLk9QRU5ORVhULlJFVkFMSURBVElPTn1gXG4gICAgICApLFxuICAgICAgaGFuZGxlcjogXCJpbmRleC5oYW5kbGVyXCIsXG4gICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMl9YLFxuICAgICAgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgbWVtb3J5U2l6ZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBlcGhlbWVyYWxTdG9yYWdlU2l6ZSxcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIENBQ0hFX0RZTkFNT19UQUJMRTogdGhpcy5fdGFnQ2FjaGUuZ2V0VGFibGVOYW1lKCksXG4gICAgICAgIENBQ0hFX0JVQ0tFVF9OQU1FOiB0aGlzLl9jYWNoZUJ1Y2tldC5nZXRCdWNrZXROYW1lKClcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgcmV2YWxpZGF0aW9uID0gdGhpcy5hcHAuYWRkQ29tcHV0ZShcbiAgICAgIENvbXB1dGVGYWN0b3J5LmJ1aWxkKGAke3RoaXMucHJvcHMubmFtZX0tcmV2YWxpZGF0aW9uYCwgcmV2YWxpZGF0aW9uUHJvcHMpXG4gICAgKTtcblxuICAgIGNvbnN0IHJldmFsaWRhdGlvbkxhbWJkYSA9IHJldmFsaWRhdGlvbi5nZXRMYW1iZGFGdW5jdGlvbigpO1xuICAgIHJldmFsaWRhdGlvbkxhbWJkYS5hZGRTcXNFdmVudFNvdXJjZSh0aGlzLl9yZXZhbGlkYXRpb25RdWV1ZS5nZXRRdWV1ZSgpLCB7XG4gICAgICBiYXRjaFNpemU6IDVcbiAgICB9KTtcblxuICAgIGNvbnN0IHJldmFsaWRhdGlvbkZ1bmN0aW9uID0gcmVxdWlyZUZ1bmN0aW9uKHJldmFsaWRhdGlvbiwgXCJSZXZhbGlkYXRpb25cIik7XG4gICAgdGhpcy5fdGFnQ2FjaGUuZ3JhbnRSZWFkV3JpdGVEYXRhKHJldmFsaWRhdGlvbkZ1bmN0aW9uKTtcbiAgICB0aGlzLl9jYWNoZUJ1Y2tldC5ncmFudFJlYWRXcml0ZShyZXZhbGlkYXRpb25GdW5jdGlvbik7XG4gICAgdGhpcy5fcmV2YWxpZGF0aW9uUXVldWUuZ3JhbnRDb25zdW1lTWVzc2FnZXMocmV2YWxpZGF0aW9uRnVuY3Rpb24pO1xuXG4gICAgcmV0dXJuIHJldmFsaWRhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2RuKCk6IHZvaWQge1xuICAgIGNvbnN0IHsgZG9tYWluTmFtZXMsIGNlcnRpZmljYXRlIH0gPSB0aGlzLnJlc29sdmVEb21haW5Db25maWcoKTtcblxuICAgIGNvbnN0IGNkblByb3BzOiBTbWFydENkblByb3BzID0ge1xuICAgICAgb3JpZ2luVHlwZTogXCJhdXRvXCIsXG4gICAgICBvcmlnaW46IHRoaXMuX3NlcnZlcixcbiAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfRElTQUJMRURcIixcbiAgICAgIGRlZmF1bHRBbGxvd2VkTWV0aG9kczogXCJBTExcIixcbiAgICAgIGZvcndhcmRIb3N0SGVhZGVyOiB0cnVlLFxuICAgICAgcHJpY2VDbGFzczogXCJQcmljZUNsYXNzXzEwMFwiLFxuICAgICAgZG9tYWluTmFtZXMsXG4gICAgICBjZXJ0aWZpY2F0ZSxcbiAgICAgIGJlaGF2aW91cnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhQYXR0ZXJuOiBQQVlMT0FEX0RFRkFVTFRTLlBBVEhTLlNUQVRJQyxcbiAgICAgICAgICBvcmlnaW46IHRoaXMuX2Fzc2V0c0J1Y2tldCxcbiAgICAgICAgICBjYWNoZVBvbGljeTogXCJDQUNISU5HX09QVElNSVpFRFwiXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXRoUGF0dGVybjogUEFZTE9BRF9ERUZBVUxUUy5QQVRIUy5JTUFHRSxcbiAgICAgICAgICBvcmlnaW46IHRoaXMuX2ltYWdlT3B0aW1pc2F0aW9uLFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfT1BUSU1JWkVEXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhQYXR0ZXJuOiBQQVlMT0FEX0RFRkFVTFRTLlBBVEhTLkFQSSxcbiAgICAgICAgICBvcmlnaW46IHRoaXMuX3NlcnZlcixcbiAgICAgICAgICBjYWNoZVBvbGljeTogXCJDQUNISU5HX0RJU0FCTEVEXCIsXG4gICAgICAgICAgYWxsb3dlZE1ldGhvZHM6IFwiQUxMXCJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhQYXR0ZXJuOiBQQVlMT0FEX0RFRkFVTFRTLlBBVEhTLkFETUlOLFxuICAgICAgICAgIG9yaWdpbjogdGhpcy5fc2VydmVyLFxuICAgICAgICAgIGNhY2hlUG9saWN5OiBcIkNBQ0hJTkdfRElTQUJMRURcIixcbiAgICAgICAgICBhbGxvd2VkTWV0aG9kczogXCJBTExcIlxuICAgICAgICB9LFxuICAgICAgICAuLi4odGhpcy5wcm9wcy5jZG4/LmJlaGF2aW91cnMgPz8gW10pXG4gICAgICBdXG4gICAgfTtcblxuICAgIHRoaXMuX2NkbiA9IHRoaXMuYXBwLmFkZENkbihDZG5GYWN0b3J5LmJ1aWxkKHRoaXMucHJvcHMubmFtZSwgY2RuUHJvcHMpKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZURvbWFpbkNvbmZpZygpOiB7XG4gICAgZG9tYWluTmFtZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICAgIGNlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGUgfCB1bmRlZmluZWQ7XG4gICAgaG9zdGVkWm9uZTogUmV0dXJuVHlwZTx0eXBlb2YgSG9zdGVkWm9uZS5mcm9tTG9va3VwPiB8IHVuZGVmaW5lZDtcbiAgfSB7XG4gICAgaWYgKHRoaXMuX3Jlc29sdmVkRG9tYWluKSByZXR1cm4gdGhpcy5fcmVzb2x2ZWREb21haW47XG5cbiAgICBpZiAodGhpcy5wcm9wcy5kb21haW4pIHtcbiAgICAgIHRoaXMuX3Jlc29sdmVkRG9tYWluID0gdGhpcy5yZXNvbHZlU2ltcGxlRG9tYWluKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmNkbj8uZG9tYWluTmFtZXM/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5fcmVzb2x2ZWREb21haW4gPSB0aGlzLnJlc29sdmVBZHZhbmNlZERvbWFpbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZXNvbHZlZERvbWFpbiA9IHtcbiAgICAgICAgZG9tYWluTmFtZXM6IHVuZGVmaW5lZCxcbiAgICAgICAgY2VydGlmaWNhdGU6IHVuZGVmaW5lZCxcbiAgICAgICAgaG9zdGVkWm9uZTogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlZERvbWFpbjtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVNpbXBsZURvbWFpbigpOiB7XG4gICAgZG9tYWluTmFtZXM6IHN0cmluZ1tdO1xuICAgIGNlcnRpZmljYXRlOiBJQ2VydGlmaWNhdGU7XG4gICAgaG9zdGVkWm9uZTogUmV0dXJuVHlwZTx0eXBlb2YgSG9zdGVkWm9uZS5mcm9tTG9va3VwPjtcbiAgfSB7XG4gICAgY29uc3QgZG9tYWluID0gdGhpcy5wcm9wcy5kb21haW4hO1xuICAgIGNvbnN0IHJvb3REb21haW4gPSBleHRyYWN0Um9vdERvbWFpbihkb21haW4pO1xuXG4gICAgY29uc3QgaG9zdGVkWm9uZSA9IEhvc3RlZFpvbmUuZnJvbUxvb2t1cChcbiAgICAgIHRoaXMsXG4gICAgICBgJHt0aGlzLnBhc2NhbE5hbWV9SG9zdGVkWm9uZWAsXG4gICAgICB7IGRvbWFpbk5hbWU6IHJvb3REb21haW4gfVxuICAgICk7XG5cbiAgICBjb25zdCBjZXJ0aWZpY2F0ZSA9IG5ldyBDZXJ0aWZpY2F0ZSh0aGlzLCBgJHt0aGlzLnBhc2NhbE5hbWV9Q2VydGlmaWNhdGVgLCB7XG4gICAgICBkb21haW5OYW1lOiBkb21haW4sXG4gICAgICB2YWxpZGF0aW9uOiBDZXJ0aWZpY2F0ZVZhbGlkYXRpb24uZnJvbURucyhob3N0ZWRab25lKVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHsgZG9tYWluTmFtZXM6IFtkb21haW5dLCBjZXJ0aWZpY2F0ZSwgaG9zdGVkWm9uZSB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZXNvbHZlQWR2YW5jZWREb21haW4oKToge1xuICAgIGRvbWFpbk5hbWVzOiBzdHJpbmdbXTtcbiAgICBjZXJ0aWZpY2F0ZTogSUNlcnRpZmljYXRlIHwgdW5kZWZpbmVkO1xuICAgIGhvc3RlZFpvbmU6IHVuZGVmaW5lZDtcbiAgfSB7XG4gICAgY29uc3QgY2RuQ29uZmlnID0gdGhpcy5wcm9wcy5jZG4hO1xuICAgIGNvbnN0IGNlcnRpZmljYXRlID1cbiAgICAgIGNkbkNvbmZpZy5jZXJ0aWZpY2F0ZSA/P1xuICAgICAgKGNkbkNvbmZpZy5jZXJ0aWZpY2F0ZUFyblxuICAgICAgICA/IENlcnRpZmljYXRlLmZyb21DZXJ0aWZpY2F0ZUFybihcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBgJHt0aGlzLnBhc2NhbE5hbWV9Q2VydGlmaWNhdGVgLFxuICAgICAgICAgICAgY2RuQ29uZmlnLmNlcnRpZmljYXRlQXJuXG4gICAgICAgICAgKVxuICAgICAgICA6IHVuZGVmaW5lZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZG9tYWluTmFtZXM6IGNkbkNvbmZpZy5kb21haW5OYW1lcyEsXG4gICAgICBjZXJ0aWZpY2F0ZSxcbiAgICAgIGhvc3RlZFpvbmU6IHVuZGVmaW5lZFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURuc1JlY29yZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJvcHMuZG9tYWluKSByZXR1cm47XG5cbiAgICBjb25zdCB7IGhvc3RlZFpvbmUgfSA9IHRoaXMucmVzb2x2ZURvbWFpbkNvbmZpZygpO1xuICAgIGlmICghaG9zdGVkWm9uZSkgcmV0dXJuO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBETlMgcmVjb3JkIGluIHRoZSBDRE4gc3RhY2sgKG5vdCB0aGUgQ29tcHV0ZSBzdGFjayB3aGVyZSB0aGlzXG4gICAgLy8gUGF5bG9hZCBjb25zdHJ1Y3QgbGl2ZXMpIHRvIGF2b2lkIGEgY3ljbGljIGRlcGVuZGVuY3k6IENETiByZWZlcmVuY2VzIHRoZVxuICAgIC8vIHNlcnZlciBMYW1iZGEgRnVuY3Rpb25VcmwsIHNvIENvbXB1dGUgY2Fubm90IGFsc28gZGVwZW5kIG9uIENETi5cbiAgICBjb25zdCBjZG5TdGFjayA9IHRoaXMuYXBwLmdldERlZmF1bHRDZG5TdGFjaygpLmdldFN0YWNrKCk7XG4gICAgbmV3IEFSZWNvcmQoY2RuU3RhY2ssIGAke3RoaXMucGFzY2FsTmFtZX1BbGlhc1JlY29yZGAsIHtcbiAgICAgIHpvbmU6IGhvc3RlZFpvbmUsXG4gICAgICByZWNvcmROYW1lOiB0aGlzLnByb3BzLmRvbWFpbixcbiAgICAgIHRhcmdldDogUmVjb3JkVGFyZ2V0LmZyb21BbGlhcyhcbiAgICAgICAgbmV3IENsb3VkRnJvbnRUYXJnZXQodGhpcy5fY2RuLmdldERpc3RyaWJ1dGlvbigpKVxuICAgICAgKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBleHBvcnRQYXR0ZXJuT3V0cHV0cygpOiB2b2lkIHtcbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3RoaXMucGFzY2FsTmFtZX1QYXR0ZXJuVHlwZWAsIHtcbiAgICAgIGtleTogYCR7dGhpcy5wYXNjYWxOYW1lfVBhdHRlcm5UeXBlYCxcbiAgICAgIHZhbHVlOiBcInBheWxvYWRcIixcbiAgICAgIGRlc2NyaXB0aW9uOiBgUGF0dGVybiB0eXBlIGZvciAke3RoaXMucHJvcHMubmFtZX1gXG4gICAgfSk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3RoaXMucGFzY2FsTmFtZX1QYXR0ZXJuTmFtZWAsIHtcbiAgICAgIGtleTogYCR7dGhpcy5wYXNjYWxOYW1lfVBhdHRlcm5OYW1lYCxcbiAgICAgIHZhbHVlOiB0aGlzLnByb3BzLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogYFBhdHRlcm4gbmFtZSBmb3IgJHt0aGlzLnByb3BzLm5hbWV9YFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHt0aGlzLnBhc2NhbE5hbWV9UGF0dGVybkxhbWJkYXNgLCB7XG4gICAgICBrZXk6IGAke3RoaXMucGFzY2FsTmFtZX1QYXR0ZXJuTGFtYmRhc2AsXG4gICAgICB2YWx1ZTogW1xuICAgICAgICBgJHt0aGlzLnByb3BzLm5hbWV9LXNlcnZlcmAsXG4gICAgICAgIGAke3RoaXMucHJvcHMubmFtZX0taW1hZ2VgLFxuICAgICAgICBgJHt0aGlzLnByb3BzLm5hbWV9LXJldmFsaWRhdGlvbmBcbiAgICAgIF0uam9pbihcIixcIiksXG4gICAgICBkZXNjcmlwdGlvbjogYExhbWJkYSBjb25zdHJ1Y3QgcHJlZml4ZXMgZm9yIHBhdHRlcm4gJHt0aGlzLnByb3BzLm5hbWV9YFxuICAgIH0pO1xuXG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHt0aGlzLnBhc2NhbE5hbWV9UGF0dGVyblJlc291cmNlc2AsIHtcbiAgICAgIGtleTogYCR7dGhpcy5wYXNjYWxOYW1lfVBhdHRlcm5SZXNvdXJjZXNgLFxuICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgZGF0YWJhc2VzOiBbdGhpcy5wcm9wcy5uYW1lLCBgJHt0aGlzLnByb3BzLm5hbWV9LXRhZy1jYWNoZWBdLFxuICAgICAgICBzdG9yYWdlOiBbXG4gICAgICAgICAgYCR7dGhpcy5wcm9wcy5uYW1lfS1hc3NldHNgLFxuICAgICAgICAgIGAke3RoaXMucHJvcHMubmFtZX0tY2FjaGVgLFxuICAgICAgICAgIGAke3RoaXMucHJvcHMubmFtZX0tbWVkaWFgXG4gICAgICAgIF0sXG4gICAgICAgIGNkbjogdGhpcy5wcm9wcy5uYW1lXG4gICAgICB9KSxcbiAgICAgIGRlc2NyaXB0aW9uOiBgUmVsYXRlZCByZXNvdXJjZSBuYW1lcyBmb3IgcGF0dGVybiAke3RoaXMucHJvcHMubmFtZX1gXG4gICAgfSk7XG4gIH1cblxuICBnZXREYXRhYmFzZSgpOiBSZWxhdGlvbmFsRGF0YWJhc2Uge1xuICAgIHJldHVybiB0aGlzLl9kYXRhYmFzZTtcbiAgfVxuXG4gIGdldFNlcnZlcigpOiBMYW1iZGFDb21wdXRlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VydmVyO1xuICB9XG5cbiAgZ2V0SW1hZ2VPcHRpbWlzYXRpb24oKTogTGFtYmRhQ29tcHV0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2ltYWdlT3B0aW1pc2F0aW9uO1xuICB9XG5cbiAgZ2V0UmV2YWxpZGF0aW9uKCk6IExhbWJkYUNvbXB1dGUge1xuICAgIHJldHVybiB0aGlzLl9yZXZhbGlkYXRpb247XG4gIH1cblxuICBnZXRBc3NldHNCdWNrZXQoKTogU3RvcmFnZSB7XG4gICAgcmV0dXJuIHRoaXMuX2Fzc2V0c0J1Y2tldDtcbiAgfVxuXG4gIGdldENhY2hlQnVja2V0KCk6IFN0b3JhZ2Uge1xuICAgIHJldHVybiB0aGlzLl9jYWNoZUJ1Y2tldDtcbiAgfVxuXG4gIGdldE1lZGlhQnVja2V0KCk6IFN0b3JhZ2Uge1xuICAgIHJldHVybiB0aGlzLl9tZWRpYUJ1Y2tldDtcbiAgfVxuXG4gIGdldFRhZ0NhY2hlKCk6IER5bmFtb0RCRGF0YWJhc2Uge1xuICAgIHJldHVybiB0aGlzLl90YWdDYWNoZTtcbiAgfVxuXG4gIGdldFJldmFsaWRhdGlvblF1ZXVlKCk6IFF1ZXVlTWVzc2FnaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcmV2YWxpZGF0aW9uUXVldWU7XG4gIH1cblxuICBnZXRDZG4oKTogQ2RuIHtcbiAgICByZXR1cm4gdGhpcy5fY2RuO1xuICB9XG59XG4iXX0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SingletonFunction as singletonFunction, Function,
|
|
1
|
+
import { SingletonFunction as singletonFunction, Function, Code, type Runtime, Architecture, FunctionUrlAuthType, type FunctionUrlCorsOptions, type InvokeMode } from "aws-cdk-lib/aws-lambda";
|
|
2
2
|
import { type Bucket } from "aws-cdk-lib/aws-s3";
|
|
3
3
|
import { PolicyStatement, type IRole } from "aws-cdk-lib/aws-iam";
|
|
4
4
|
import { type IVpc } from "aws-cdk-lib/aws-ec2";
|
|
@@ -133,6 +133,17 @@ export declare class LambdaFunction extends Function {
|
|
|
133
133
|
* Stores base path and secret names as env vars for consumer code.
|
|
134
134
|
*/
|
|
135
135
|
private addSsmSecretsSupport;
|
|
136
|
+
/**
|
|
137
|
+
* Add the Fjall secrets resolver layer and set AWS_LAMBDA_EXEC_WRAPPER.
|
|
138
|
+
*
|
|
139
|
+
* The resolver is a bash wrapper + Node.js script that runs before the Lambda
|
|
140
|
+
* runtime. It calls the Extension HTTP API (localhost:2773) to resolve SSM
|
|
141
|
+
* parameters and Secrets Manager secrets, exporting them as plain environment
|
|
142
|
+
* variables so handler code can simply read process.env.
|
|
143
|
+
*
|
|
144
|
+
* The layer is created once per stack and shared across all Lambda functions.
|
|
145
|
+
*/
|
|
146
|
+
private addSecretsResolverLayer;
|
|
136
147
|
/**
|
|
137
148
|
* Derive SSM secrets path for Lambda functions.
|
|
138
149
|
* Pattern: /<appName>/lambda/<functionName>
|