@fjall/components-infrastructure 0.87.20 → 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 +14 -18
- package/dist/lib/app.js +58 -41
- package/dist/lib/config/aws/accountId.js +1 -2
- package/dist/lib/config/aws/backupGlobalSettings.js +1 -2
- package/dist/lib/config/aws/costAllocationTags.js +3 -4
- package/dist/lib/config/aws/identityCenter.d.ts +4 -4
- package/dist/lib/config/aws/identityCenter.js +17 -63
- package/dist/lib/config/aws/identityCenterGroupMembership.js +27 -42
- package/dist/lib/config/aws/index.d.ts +0 -8
- package/dist/lib/config/aws/index.js +1 -9
- package/dist/lib/config/aws/ipamDelegateAdmin.js +1 -2
- package/dist/lib/config/aws/ipamPoolId.js +1 -2
- package/dist/lib/config/aws/organisationId.js +1 -2
- package/dist/lib/config/aws/organisationsAccess.js +1 -2
- package/dist/lib/config/aws/ramSharing.js +1 -2
- 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.d.ts +12 -0
- package/dist/lib/patterns/aws/account.js +73 -0
- package/dist/lib/patterns/aws/buildkite.js +1 -2
- package/dist/lib/patterns/aws/cdn.d.ts +5 -10
- package/dist/lib/patterns/aws/cdn.js +5 -13
- package/dist/lib/patterns/aws/compute.d.ts +20 -3
- package/dist/lib/patterns/aws/compute.js +29 -5
- package/dist/lib/patterns/aws/database.d.ts +3 -3
- package/dist/lib/patterns/aws/database.js +18 -15
- package/dist/lib/patterns/aws/index.d.ts +4 -3
- package/dist/lib/patterns/aws/index.js +6 -4
- package/dist/lib/patterns/aws/interfaces/index.d.ts +2 -1
- package/dist/lib/patterns/aws/interfaces/index.js +8 -5
- package/dist/lib/patterns/aws/interfaces/organisation.d.ts +22 -0
- package/dist/lib/patterns/aws/interfaces/organisation.js +28 -0
- package/dist/lib/patterns/aws/interfaces/pattern.d.ts +5 -5
- package/dist/lib/patterns/aws/interfaces/pattern.js +1 -1
- package/dist/lib/patterns/aws/interfaces/storage.d.ts +10 -120
- package/dist/lib/patterns/aws/interfaces/storage.js +6 -43
- package/dist/lib/patterns/aws/organisation.d.ts +38 -0
- package/dist/lib/patterns/aws/organisation.js +92 -0
- package/dist/lib/patterns/aws/organisationFactory.d.ts +20 -0
- package/dist/lib/patterns/aws/organisationFactory.js +24 -0
- package/dist/lib/patterns/aws/pattern.d.ts +1 -1
- package/dist/lib/patterns/aws/pattern.js +1 -1
- package/dist/lib/patterns/aws/payload.d.ts +6 -5
- package/dist/lib/patterns/aws/payload.js +92 -42
- package/dist/lib/patterns/aws/platform.d.ts +11 -0
- package/dist/lib/patterns/aws/platform.js +29 -0
- package/dist/lib/patterns/aws/storage.d.ts +40 -125
- package/dist/lib/patterns/aws/storage.js +63 -191
- package/dist/lib/resources/aws/compute/ec2.d.ts +1 -1
- package/dist/lib/resources/aws/compute/ec2.js +3 -4
- package/dist/lib/resources/aws/compute/ecs.d.ts +6 -9
- package/dist/lib/resources/aws/compute/ecs.js +58 -26
- package/dist/lib/resources/aws/compute/lambda.d.ts +14 -1
- package/dist/lib/resources/aws/compute/lambda.js +45 -13
- package/dist/lib/resources/aws/database/rdsAurora.d.ts +1 -0
- package/dist/lib/resources/aws/database/rdsAurora.js +16 -16
- package/dist/lib/resources/aws/database/rdsAuroraGlobal.d.ts +1 -0
- package/dist/lib/resources/aws/database/rdsAuroraGlobal.js +14 -10
- package/dist/lib/resources/aws/database/rdsInstance.d.ts +5 -4
- package/dist/lib/resources/aws/database/rdsInstance.js +18 -7
- package/dist/lib/resources/aws/iam/identityCenter/assignment.d.ts +0 -2
- package/dist/lib/resources/aws/iam/identityCenter/assignment.js +9 -46
- package/dist/lib/resources/aws/iam/identityCenter/attachManagedPolicy.js +1 -2
- package/dist/lib/resources/aws/iam/identityCenter/group.d.ts +1 -3
- package/dist/lib/resources/aws/iam/identityCenter/group.js +7 -85
- package/dist/lib/resources/aws/iam/identityCenter/permissionSet.d.ts +1 -3
- package/dist/lib/resources/aws/iam/identityCenter/permissionSet.js +9 -96
- package/dist/lib/resources/aws/index.d.ts +1 -0
- package/dist/lib/resources/aws/index.js +2 -1
- package/dist/lib/resources/aws/logging/cloudTrail.js +7 -4
- package/dist/lib/resources/aws/networking/ipamPool.js +76 -5
- package/dist/lib/resources/aws/organisation/index.d.ts +4 -0
- package/dist/lib/resources/aws/organisation/index.js +10 -0
- package/dist/lib/resources/aws/organisation/organisation.d.ts +12 -0
- package/dist/lib/resources/aws/organisation/organisation.js +14 -0
- package/dist/lib/resources/aws/organisation/organisationAccount.d.ts +18 -0
- package/dist/lib/resources/aws/organisation/organisationAccount.js +31 -0
- package/dist/lib/resources/aws/organisation/organisationPolicy.d.ts +13 -0
- package/dist/lib/resources/aws/organisation/organisationPolicy.js +32 -0
- package/dist/lib/resources/aws/organisation/organisationalUnit.d.ts +10 -0
- package/dist/lib/resources/aws/organisation/organisationalUnit.js +9 -0
- package/dist/lib/resources/aws/secrets/kms.js +10 -7
- package/dist/lib/resources/aws/secrets/parameter.js +5 -4
- package/dist/lib/resources/aws/storage/ecr.d.ts +3 -1
- package/dist/lib/resources/aws/storage/ecr.js +3 -3
- package/dist/lib/resources/aws/storage/s3.d.ts +6 -39
- package/dist/lib/resources/aws/storage/s3.js +31 -34
- package/dist/lib/utils/capitaliseString.d.ts +12 -0
- package/dist/lib/utils/capitaliseString.js +30 -0
- package/dist/lib/utils/capitalizeString.d.ts +11 -0
- package/dist/lib/utils/capitalizeString.js +24 -1
- package/dist/lib/utils/getConfig.d.ts +5 -1
- package/dist/lib/utils/getConfig.js +9 -1
- package/dist/lib/utils/index.d.ts +1 -0
- package/dist/lib/utils/index.js +2 -1
- package/dist/lib/utils/resourceNaming.d.ts +22 -19
- package/dist/lib/utils/resourceNaming.js +39 -35
- package/package.json +5 -6
|
@@ -13,9 +13,11 @@ const secrets_1 = require("../secrets");
|
|
|
13
13
|
const customResource_1 = require("../utilities/customResource");
|
|
14
14
|
const database_1 = require("../../../patterns/aws/database");
|
|
15
15
|
const resourceNaming_1 = require("../../../utils/resourceNaming");
|
|
16
|
+
const capitaliseString_1 = require("../../../utils/capitaliseString");
|
|
16
17
|
class RdsInstance extends constructs_1.Construct {
|
|
17
18
|
constructor(scope, id, props) {
|
|
18
19
|
super(scope, id);
|
|
20
|
+
this.constructId = id;
|
|
19
21
|
this.port = props.port || 35255;
|
|
20
22
|
this.vpc = props.vpc;
|
|
21
23
|
// PostgreSQL fallback for direct usage - ensure engine and engineConfig match
|
|
@@ -43,6 +45,7 @@ class RdsInstance extends constructs_1.Construct {
|
|
|
43
45
|
? props.snapshotUsername
|
|
44
46
|
: (props.credentials?.username ?? this.engineConfig.defaultUsername);
|
|
45
47
|
this.databaseCredentials = new secrets_1.Secret(this, `${props.databaseName}Credentials`, {
|
|
48
|
+
// TODO: revert to this.constructId after webapp redeploy (temp fix to preserve existing instance identifiers)
|
|
46
49
|
secretName: resourceNaming_1.ResourceNaming.credentialsSecretName(props.databaseName),
|
|
47
50
|
generateSecretString: {
|
|
48
51
|
secretStringTemplate: JSON.stringify({
|
|
@@ -112,6 +115,7 @@ class RdsInstance extends constructs_1.Construct {
|
|
|
112
115
|
enablePerformanceInsights: piEnabled,
|
|
113
116
|
performanceInsightEncryptionKey: performanceInsightsEncryptionKey,
|
|
114
117
|
performanceInsightRetention: performanceInsightsRetention,
|
|
118
|
+
// TODO: revert to this.constructId after webapp redeploy (temp fix to preserve existing instance identifiers)
|
|
115
119
|
instanceIdentifier: resourceNaming_1.ResourceNaming.dbInstanceId(props.databaseName),
|
|
116
120
|
instanceType: props.instanceType
|
|
117
121
|
? new aws_ec2_1.InstanceType(props.instanceType)
|
|
@@ -148,6 +152,7 @@ class RdsInstance extends constructs_1.Construct {
|
|
|
148
152
|
rotationConfig?.automaticallyAfter) ||
|
|
149
153
|
aws_cdk_lib_1.Duration.days(30);
|
|
150
154
|
this.masterSecret = new secrets_1.Secret(this, `${props.databaseName}MasterSecret`, {
|
|
155
|
+
// TODO: revert to this.constructId after webapp redeploy (temp fix to preserve existing instance identifiers)
|
|
151
156
|
secretName: resourceNaming_1.ResourceNaming.masterSecretName(props.databaseName)
|
|
152
157
|
});
|
|
153
158
|
new aws_secretsmanager_1.SecretRotation(this, `${props.databaseName}SecretRotation`, {
|
|
@@ -160,6 +165,8 @@ class RdsInstance extends constructs_1.Construct {
|
|
|
160
165
|
});
|
|
161
166
|
}
|
|
162
167
|
addProxy(props) {
|
|
168
|
+
if (!props.proxy)
|
|
169
|
+
return;
|
|
163
170
|
const proxyConfig = props.proxy;
|
|
164
171
|
const vpcSubnets = proxyConfig.vpcSubnets ?? {
|
|
165
172
|
subnetType: aws_ec2_1.SubnetType.PRIVATE_WITH_EGRESS
|
|
@@ -171,6 +178,7 @@ class RdsInstance extends constructs_1.Construct {
|
|
|
171
178
|
// Allow proxy to connect to database
|
|
172
179
|
this.databaseSecurityGroup.addIngressRule(this.databaseProxySecurityGroup, aws_ec2_1.Port.tcp(this.port), "Allow RDS Proxy to connect to database");
|
|
173
180
|
this.databaseProxy = new aws_rds_1.DatabaseProxy(this, `${props.databaseName}DatabaseProxy`, {
|
|
181
|
+
// TODO: revert to this.constructId after webapp redeploy (temp fix to preserve existing instance identifiers)
|
|
174
182
|
dbProxyName: resourceNaming_1.ResourceNaming.proxyName(props.databaseName),
|
|
175
183
|
proxyTarget: aws_rds_1.ProxyTarget.fromInstance(this.database),
|
|
176
184
|
secrets: [this.databaseCredentials.secret],
|
|
@@ -184,13 +192,16 @@ class RdsInstance extends constructs_1.Construct {
|
|
|
184
192
|
maxConnectionsPercent: proxyConfig.maxConnections,
|
|
185
193
|
maxIdleConnectionsPercent: proxyConfig.maxIdleConnections
|
|
186
194
|
});
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
195
|
+
const outputName = (0, capitaliseString_1.toPascalCase)(props.databaseName || this.constructId);
|
|
196
|
+
new aws_cdk_lib_1.CfnOutput(this, `${outputName}ProxyEndpointOutput`, {
|
|
197
|
+
key: `${outputName}ProxyEndpoint`,
|
|
198
|
+
exportName: `${outputName}ProxyEndpoint`,
|
|
190
199
|
value: this.databaseProxy.endpoint
|
|
191
200
|
});
|
|
192
201
|
}
|
|
193
202
|
addReadReplica(props) {
|
|
203
|
+
if (!props.readReplica)
|
|
204
|
+
return;
|
|
194
205
|
const replicaConfig = props.readReplica;
|
|
195
206
|
const replicaInstanceType = replicaConfig.instanceType ?? props.instanceType ?? "t4g.large";
|
|
196
207
|
const piEnabled = props.performanceInsights !== false;
|
|
@@ -211,10 +222,11 @@ class RdsInstance extends constructs_1.Construct {
|
|
|
211
222
|
// Deletion waiter ensures primary is "available" before CloudFormation deletes it.
|
|
212
223
|
// When the read replica is deleted, the primary enters "modifying" state.
|
|
213
224
|
// Without this waiter, the final snapshot creation fails.
|
|
225
|
+
// TODO: revert to this.constructId after webapp redeploy (temp fix to preserve existing instance identifiers)
|
|
214
226
|
const instanceId = resourceNaming_1.ResourceNaming.dbInstanceId(props.databaseName);
|
|
215
227
|
const waiterTimeout = aws_cdk_lib_1.Duration.minutes(10);
|
|
216
228
|
const deletionWaiter = new customResource_1.CustomResource(this, `${props.databaseName}DeletionWaiter`, {
|
|
217
|
-
runtime: aws_lambda_1.Runtime.
|
|
229
|
+
runtime: aws_lambda_1.Runtime.NODEJS_22_X,
|
|
218
230
|
timeout: waiterTimeout.plus(aws_cdk_lib_1.Duration.seconds(30)),
|
|
219
231
|
lambdaDescription: `${props.databaseName} deletion waiter`,
|
|
220
232
|
inlineCode: `
|
|
@@ -280,6 +292,7 @@ exports.handler = async (event) => {
|
|
|
280
292
|
performanceInsightRetention: piEnabled
|
|
281
293
|
? this.getPerformanceInsightRetention(piConfig?.retentionPeriod ?? 7)
|
|
282
294
|
: undefined,
|
|
295
|
+
// TODO: revert to this.constructId after webapp redeploy (temp fix to preserve existing instance identifiers)
|
|
283
296
|
instanceIdentifier: resourceNaming_1.ResourceNaming.readReplicaId(props.databaseName),
|
|
284
297
|
instanceType: new aws_ec2_1.InstanceType(replicaInstanceType),
|
|
285
298
|
availabilityZone: replicaConfig.availabilityZone,
|
|
@@ -304,8 +317,6 @@ exports.handler = async (event) => {
|
|
|
304
317
|
return aws_rds_1.PerformanceInsightRetention.MONTHS_6;
|
|
305
318
|
case 372:
|
|
306
319
|
return aws_rds_1.PerformanceInsightRetention.MONTHS_12;
|
|
307
|
-
case 731:
|
|
308
|
-
return aws_rds_1.PerformanceInsightRetention.LONG_TERM;
|
|
309
320
|
default:
|
|
310
321
|
return aws_rds_1.PerformanceInsightRetention.MONTHS_1;
|
|
311
322
|
}
|
|
@@ -339,4 +350,4 @@ exports.handler = async (event) => {
|
|
|
339
350
|
}
|
|
340
351
|
}
|
|
341
352
|
exports.RdsInstance = RdsInstance;
|
|
342
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzSW5zdGFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9kYXRhYmFzZS9yZHNJbnN0YW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBaUU7QUFDakUsaURBUTZCO0FBQzdCLGlEQWdCNkI7QUFDN0IsdUVBR3dDO0FBQ3hDLHVEQUFpRDtBQUNqRCxpREFBOEQ7QUFDOUQsMkNBQXVDO0FBQ3ZDLGdDQUF1QztBQUN2Qyx3Q0FBd0Q7QUFDeEQsZ0VBQTZEO0FBRTdELDZEQVN3QztBQUN4QyxrRUFBK0Q7QUErQi9ELE1BQWEsV0FBWSxTQUFRLHNCQUFTO0lBY3hDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZTtRQUN2RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO1FBRXJCLDhFQUE4RTtRQUM5RSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLElBQUk7WUFDeEMsZUFBZSxFQUFFLFVBQVU7WUFDM0IsYUFBYSxFQUFFLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBRTtZQUN2QyxlQUFlLEVBQUUsOENBQThDO1NBQ2hFLENBQUM7UUFFRixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXhCLDBFQUEwRTtRQUMxRSxNQUFNLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxXQUFXLEVBQUUsY0FBYyxLQUFLLEtBQUssQ0FBQztRQUMzRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUss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RSxDQUFDLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUExY0Qsa0NBMGNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2ZuT3V0cHV0LCBEdXJhdGlvbiwgUmVtb3ZhbFBvbGljeSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgQ29ubmVjdGlvbnMsXG4gIHR5cGUgSUNvbm5lY3RhYmxlLFxuICBJbnN0YW5jZVR5cGUsXG4gIHR5cGUgSVZwYyxcbiAgUG9ydCxcbiAgdHlwZSBTdWJuZXRTZWxlY3Rpb24sXG4gIFN1Ym5ldFR5cGVcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7XG4gIENhQ2VydGlmaWNhdGUsXG4gIENyZWRlbnRpYWxzLFxuICBEYXRhYmFzZUluc3RhbmNlLFxuICBEYXRhYmFzZUluc3RhbmNlRnJvbVNuYXBzaG90LFxuICBEYXRhYmFzZUluc3RhbmNlRW5naW5lLFxuICBEYXRhYmFzZUluc3RhbmNlUmVhZFJlcGxpY2EsXG4gIERhdGFiYXNlUHJveHksXG4gIHR5cGUgSURhdGFiYXNlSW5zdGFuY2UsXG4gIHR5cGUgSUluc3RhbmNlRW5naW5lLFxuICBQYXJhbWV0ZXJHcm91cCxcbiAgUGVyZm9ybWFuY2VJbnNpZ2h0UmV0ZW50aW9uLFxuICBQb3N0Z3Jlc0VuZ2luZVZlcnNpb24sXG4gIFByb3h5VGFyZ2V0LFxuICBTbmFwc2hvdENyZWRlbnRpYWxzLFxuICBTdG9yYWdlVHlwZVxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXJkc1wiO1xuaW1wb3J0IHtcbiAgU2VjcmV0Um90YXRpb24sXG4gIFNlY3JldFJvdGF0aW9uQXBwbGljYXRpb25cbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiO1xuaW1wb3J0IHsgUnVudGltZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQsIEVmZmVjdCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgU2VjdXJpdHlHcm91cCB9IGZyb20gXCIuLi9pYW1cIjtcbmltcG9ydCB7IEN1c3RvbWVyTWFuYWdlZEtleSwgU2VjcmV0IH0gZnJvbSBcIi4uL3NlY3JldHNcIjtcbmltcG9ydCB7IEN1c3RvbVJlc291cmNlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jdXN0b21SZXNvdXJjZVwiO1xuaW1wb3J0IHsgdHlwZSBTdGFja0J1aWxkZXIgfSBmcm9tIFwiLi4vYmFzZS9hd3NTdGFja1wiO1xuaW1wb3J0IHtcbiAgdHlwZSBFbmdpbmVDb25maWcsXG4gIHR5cGUgUHJveHlDb25maWcsXG4gIHR5cGUgUmVhZFJlcGxpY2FDb25maWcsXG4gIHR5cGUgQ3JlZGVudGlhbHNDb25maWcsXG4gIHR5cGUgRW5jcnlwdGlvbkNvbmZpZyxcbiAgdHlwZSBQZXJmb3JtYW5jZUluc2lnaHRzQ29uZmlnLFxuICBpc0F3c01hbmFnZWRLZXksXG4gIGlzQ01LUmVxdWVzdGVkXG59IGZyb20gXCIuLi8uLi8uLi9wYXR0ZXJucy9hd3MvZGF0YWJhc2VcIjtcbmltcG9ydCB7IFJlc291cmNlTmFtaW5nIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3Jlc291cmNlTmFtaW5nXCI7XG5cbmludGVyZmFjZSBSZHNQcm9wcyB7XG4gIHZwYzogSVZwYztcbiAgZGF0YWJhc2VOYW1lPzogc3RyaW5nO1xuICBlbmdpbmU/OiBJSW5zdGFuY2VFbmdpbmU7XG4gIGVuZ2luZUNvbmZpZz86IEVuZ2luZUNvbmZpZztcbiAgaW5zdGFuY2VUeXBlPzogc3RyaW5nO1xuICBtYXhBbGxvY2F0ZWRTdG9yYWdlPzogbnVtYmVyO1xuICBhbGxvY2F0ZWRTdG9yYWdlPzogbnVtYmVyO1xuICBiYWNrdXBSZXRlbnRpb24/OiBEdXJhdGlvbjtcbiAgcHJlZmVycmVkQmFja3VwV2luZG93Pzogc3RyaW5nO1xuICBjbHVzdGVySWRlbnRpZmllcj86IHN0cmluZztcbiAgbW9uaXRvcmluZ0ludGVydmFsPzogRHVyYXRpb247XG4gIHByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93Pzogc3RyaW5nO1xuICBwb3J0PzogbnVtYmVyO1xuICBwZXJmb3JtYW5jZUluc2lnaHRzPzogUGVyZm9ybWFuY2VJbnNpZ2h0c0NvbmZpZyB8IGZhbHNlO1xuICBzZWN1cml0eUdyb3VwSWRzPzogc3RyaW5nW107XG4gIG11bHRpQXo/OiBib29sZWFuO1xuICBwcm94eT86IFByb3h5Q29uZmlnIHwgZmFsc2U7XG4gIHJlYWRSZXBsaWNhPzogUmVhZFJlcGxpY2FDb25maWcgfCBmYWxzZTtcbiAgY3JlZGVudGlhbHM/OiBDcmVkZW50aWFsc0NvbmZpZztcbiAgZW5jcnlwdGlvbj86IEVuY3J5cHRpb25Db25maWc7XG4gIHB1YmxpY2x5QWNjZXNzaWJsZT86IGJvb2xlYW47XG4gIGRlbGV0aW9uUHJvdGVjdGlvbj86IGJvb2xlYW47XG4gIC8qKiBBUk4gb3IgaWRlbnRpZmllciBvZiBEQiBpbnN0YW5jZSBzbmFwc2hvdCB0byByZXN0b3JlIGZyb20gKi9cbiAgc25hcHNob3RJZGVudGlmaWVyPzogc3RyaW5nO1xuICAvKiogVXNlcm5hbWUgZnJvbSB0aGUgc25hcHNob3QgKHJlcXVpcmVkIHdoZW4gcmVzdG9yaW5nIGZyb20gc25hcHNob3QgdG8gcmVzZXQgcGFzc3dvcmQpICovXG4gIHNuYXBzaG90VXNlcm5hbWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBSZHNJbnN0YW5jZSBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElDb25uZWN0YWJsZSB7XG4gIHB1YmxpYyBjb25uZWN0aW9ucyE6IENvbm5lY3Rpb25zO1xuICBwdWJsaWMgZGF0YWJhc2VTZWN1cml0eUdyb3VwITogU2VjdXJpdHlHcm91cDtcbiAgcHVibGljIHZwYyE6IElWcGM7XG5cbiAgcHJpdmF0ZSBwb3J0ITogbnVtYmVyO1xuICBwcml2YXRlIGVuZ2luZUNvbmZpZyE6IEVuZ2luZUNvbmZpZztcbiAgcHJpdmF0ZSBkYXRhYmFzZUNyZWRlbnRpYWxzITogU2VjcmV0O1xuICBwcml2YXRlIGRhdGFiYXNlITogSURhdGFiYXNlSW5zdGFuY2U7XG4gIHByaXZhdGUgbWFzdGVyU2VjcmV0ITogU2VjcmV0O1xuICBwcml2YXRlIGRhdGFiYXNlUHJveHkhOiBEYXRhYmFzZVByb3h5O1xuICBwcml2YXRlIGRhdGFiYXNlUHJveHlTZWN1cml0eUdyb3VwITogU2VjdXJpdHlHcm91cDtcbiAgcHJpdmF0ZSByZWFkUmVwbGljYVNlY3VyaXR5R3JvdXAhOiBTZWN1cml0eUdyb3VwO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSZHNQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLnBvcnQgPSBwcm9wcy5wb3J0IHx8IDM1MjU1O1xuICAgIHRoaXMudnBjID0gcHJvcHMudnBjO1xuXG4gICAgLy8gUG9zdGdyZVNRTCBmYWxsYmFjayBmb3IgZGlyZWN0IHVzYWdlIC0gZW5zdXJlIGVuZ2luZSBhbmQgZW5naW5lQ29uZmlnIG1hdGNoXG4gICAgdGhpcy5lbmdpbmVDb25maWcgPSBwcm9wcy5lbmdpbmVDb25maWcgPz8ge1xuICAgICAgZGVmYXVsdFVzZXJuYW1lOiBcInBvc3RncmVzXCIsXG4gICAgICBzc2xQYXJhbWV0ZXJzOiB7IFwicmRzLmZvcmNlX3NzbFwiOiBcIjFcIiB9LFxuICAgICAgcm90YXRpb25BcHBOYW1lOiBcIlNlY3JldHNNYW5hZ2VyUkRTUG9zdGdyZVNRTFJvdGF0aW9uTXVsdGlVc2VyXCJcbiAgICB9O1xuXG4gICAgdGhpcy5hZGREYXRhYmFzZShwcm9wcyk7XG5cbiAgICAvLyBTZWNyZXQgcm90YXRpb24gZW5hYmxlZCBieSBkZWZhdWx0IChvcHQtb3V0IHdpdGggc2VjcmV0Um90YXRpb246IGZhbHNlKVxuICAgIGNvbnN0IHNlY3JldFJvdGF0aW9uRGlzYWJsZWQgPSBwcm9wcy5jcmVkZW50aWFscz8uc2VjcmV0Um90YXRpb24gPT09IGZhbHNlO1xuICAgIGlmICghc2VjcmV0Um90YXRpb25EaXNhYmxlZCkge1xuICAgICAgdGhpcy5yb3RhdGVTZWNyZXQocHJvcHMpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5wcm94eSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLnByb3h5ICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5hZGRQcm94eShwcm9wcyk7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnJlYWRSZXBsaWNhICE9PSB1bmRlZmluZWQgJiYgcHJvcHMucmVhZFJlcGxpY2EgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmFkZFJlYWRSZXBsaWNhKHByb3BzKTtcbiAgICB9XG4gIH1cblxuICBhZGREYXRhYmFzZShwcm9wczogUmRzUHJvcHMpIHtcbiAgICAvLyBVc2VybmFtZSBwcmlvcml0eTogc25hcHNob3RVc2VybmFtZSA+IGNyZWRlbnRpYWxzLnVzZXJuYW1lID4gZW5naW5lIGRlZmF1bHRcbiAgICBjb25zdCB1c2VybmFtZSA9XG4gICAgICBwcm9wcy5zbmFwc2hvdElkZW50aWZpZXIgJiYgcHJvcHMuc25hcHNob3RVc2VybmFtZVxuICAgICAgICA/IHByb3BzLnNuYXBzaG90VXNlcm5hbWVcbiAgICAgICAgOiAocHJvcHMuY3JlZGVudGlhbHM/LnVzZXJuYW1lID8/IHRoaXMuZW5naW5lQ29uZmlnLmRlZmF1bHRVc2VybmFtZSk7XG4gICAgdGhpcy5kYXRhYmFzZUNyZWRlbnRpYWxzID0gbmV3IFNlY3JldChcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9Q3JlZGVudGlhbHNgLFxuICAgICAge1xuICAgICAgICBzZWNyZXROYW1lOiBSZXNvdXJjZU5hbWluZy5jcmVkZW50aWFsc1NlY3JldE5hbWUocHJvcHMuZGF0YWJhc2VOYW1lISksXG4gICAgICAgIGdlbmVyYXRlU2VjcmV0U3RyaW5nOiB7XG4gICAgICAgICAgc2VjcmV0U3RyaW5nVGVtcGxhdGU6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIHVzZXJuYW1lXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZXhjbHVkZVB1bmN0dWF0aW9uOiB0cnVlLFxuICAgICAgICAgIGluY2x1ZGVTcGFjZTogZmFsc2UsXG4gICAgICAgICAgZ2VuZXJhdGVTdHJpbmdLZXk6IFwicGFzc3dvcmRcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcblxuICAgIHRoaXMuZGF0YWJhc2VTZWN1cml0eUdyb3VwID0gbmV3IFNlY3VyaXR5R3JvdXAoXG4gICAgICB0aGlzLFxuICAgICAgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVNlY3VyaXR5R3JvdXBgLFxuICAgICAge1xuICAgICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFNlY3VyaXR5IGdyb3VwIGZvciBSRFMgZGF0YWJhc2UgaW5zdGFuY2UgJHtwcm9wcy5kYXRhYmFzZU5hbWV9YFxuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBTZWxmLXJlZmVyZW5jaW5nIHJ1bGUgZm9yIG11bHRpLUFaIGNvbW11bmljYXRpb25cbiAgICB0aGlzLmRhdGFiYXNlU2VjdXJpdHlHcm91cC5hZGRJbmdyZXNzUnVsZShcbiAgICAgIHRoaXMuZGF0YWJhc2VTZWN1cml0eUdyb3VwLFxuICAgICAgUG9ydC50Y3AodGhpcy5wb3J0KVxuICAgICk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gbmV3IENvbm5lY3Rpb25zKHtcbiAgICAgIHNlY3VyaXR5R3JvdXBzOiBbdGhpcy5kYXRhYmFzZVNlY3VyaXR5R3JvdXBdLFxuICAgICAgZGVmYXVsdFBvcnQ6IFBvcnQudGNwKHRoaXMucG9ydClcbiAgICB9KTtcblxuICAgIGNvbnN0IHN0b3JhZ2VFbmNyeXB0aW9uS2V5ID0gaXNDTUtSZXF1ZXN0ZWQocHJvcHMuZW5jcnlwdGlvbj8uc3RvcmFnZUtleSlcbiAgICAgID8gbmV3IEN1c3RvbWVyTWFuYWdlZEtleShcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1DbHVzdGVyRW5jcnlwdGlvbktleWAsXG4gICAgICAgICAgeyBhbGlhc05hbWU6IGBjbWsvcmRzLyR7cHJvcHMuZGF0YWJhc2VOYW1lfS9lbmNyeXB0aW9uS2V5YCB9XG4gICAgICAgICkua2V5XG4gICAgICA6IGlzQXdzTWFuYWdlZEtleShwcm9wcy5lbmNyeXB0aW9uPy5zdG9yYWdlS2V5KSB8fFxuICAgICAgICAgIHByb3BzLmVuY3J5cHRpb24/LnN0b3JhZ2VLZXkgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHVuZGVmaW5lZFxuICAgICAgICA6IHByb3BzLmVuY3J5cHRpb24/LnN0b3JhZ2VLZXk7XG5cbiAgICBjb25zdCBwaUVuYWJsZWQgPSBwcm9wcy5wZXJmb3JtYW5jZUluc2lnaHRzICE9PSBmYWxzZTtcbiAgICBjb25zdCBwaUNvbmZpZyA9XG4gICAgICBwaUVuYWJsZWQgJiYgdHlwZW9mIHByb3BzLnBlcmZvcm1hbmNlSW5zaWdodHMgPT09IFwib2JqZWN0XCJcbiAgICAgICAgPyBwcm9wcy5wZXJmb3JtYW5jZUluc2lnaHRzXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgcGVyZm9ybWFuY2VJbnNpZ2h0c0VuY3J5cHRpb25LZXkgPVxuICAgICAgcGlFbmFibGVkICYmIGlzQ01LUmVxdWVzdGVkKHBpQ29uZmlnPy5lbmNyeXB0aW9uS2V5KVxuICAgICAgICA/IG5ldyBDdXN0b21lck1hbmFnZWRLZXkoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVBlcmZvcm1hbmNlSW5zaWdodHNLZXlgLFxuICAgICAgICAgICAgeyBhbGlhc05hbWU6IGBjbWsvcmRzLyR7cHJvcHMuZGF0YWJhc2VOYW1lfS9JbnNpZ2h0c0tleWAgfVxuICAgICAgICAgICkua2V5XG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgcGVyZm9ybWFuY2VJbnNpZ2h0c1JldGVudGlvbiA9IHBpRW5hYmxlZFxuICAgICAgPyB0aGlzLmdldFBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvbihwaUNvbmZpZz8ucmV0ZW50aW9uUGVyaW9kID8/IDcpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGVuZ2luZSA9XG4gICAgICBwcm9wcy5lbmdpbmUgfHxcbiAgICAgIERhdGFiYXNlSW5zdGFuY2VFbmdpbmUucG9zdGdyZXMoe1xuICAgICAgICB2ZXJzaW9uOiBQb3N0Z3Jlc0VuZ2luZVZlcnNpb24uVkVSXzE3XzVcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgcGFyYW1ldGVyR3JvdXAgPSBuZXcgUGFyYW1ldGVyR3JvdXAoXG4gICAgICB0aGlzLFxuICAgICAgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVBhcmFtZXRlckdyb3VwYCxcbiAgICAgIHtcbiAgICAgICAgZW5naW5lLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFBhcmFtZXRlciBncm91cCBmb3IgJHtwcm9wcy5kYXRhYmFzZU5hbWV9IHdpdGggc2VjdXJpdHkgZGVmYXVsdHNgLFxuICAgICAgICBwYXJhbWV0ZXJzOiB0aGlzLmVuZ2luZUNvbmZpZy5zc2xQYXJhbWV0ZXJzXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIFVzZSBQVUJMSUMgc3VibmV0IGZvciBwdWJsaWNseUFjY2Vzc2libGUgZGF0YWJhc2VzIChlLmcuLCB0aW5rZXJlciB0aWVyIHdpdGhvdXQgTkFUKVxuICAgIGNvbnN0IHN1Ym5ldFR5cGUgPSBwcm9wcy5wdWJsaWNseUFjY2Vzc2libGVcbiAgICAgID8gU3VibmV0VHlwZS5QVUJMSUNcbiAgICAgIDogU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTO1xuXG4gICAgY29uc3QgY29tbW9uSW5zdGFuY2VQcm9wcyA9IHtcbiAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICB2cGNTdWJuZXRzOiB7XG4gICAgICAgIHN1Ym5ldFR5cGVcbiAgICAgIH0sXG4gICAgICBzZWN1cml0eUdyb3VwczogW3RoaXMuZGF0YWJhc2VTZWN1cml0eUdyb3VwXSxcbiAgICAgIGVuZ2luZSxcbiAgICAgIHBhcmFtZXRlckdyb3VwLFxuICAgICAgYWxsb2NhdGVkU3RvcmFnZTogcHJvcHMuYWxsb2NhdGVkU3RvcmFnZSxcbiAgICAgIGJhY2t1cFJldGVudGlvbjogcHJvcHMuYmFja3VwUmV0ZW50aW9uIHx8IER1cmF0aW9uLmRheXMoMTQpLFxuICAgICAgcHJlZmVycmVkQmFja3VwV2luZG93OiBwcm9wcy5wcmVmZXJyZWRCYWNrdXBXaW5kb3cgfHwgXCIwMjowMC0wMzowMFwiLFxuICAgICAgc3RvcmFnZUVuY3J5cHRlZDogdHJ1ZSxcbiAgICAgIHN0b3JhZ2VFbmNyeXB0aW9uS2V5LFxuICAgICAgc3RvcmFnZVR5cGU6IFN0b3JhZ2VUeXBlLkdQMyxcbiAgICAgIGNhQ2VydGlmaWNhdGU6IENhQ2VydGlmaWNhdGUuUkRTX0NBX1JTQTQwOTZfRzEsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LlNOQVBTSE9ULFxuICAgICAgZGVsZXRlQXV0b21hdGVkQmFja3VwczogZmFsc2UsXG4gICAgICBlbmFibGVQZXJmb3JtYW5jZUluc2lnaHRzOiBwaUVuYWJsZWQsXG4gICAgICBwZXJmb3JtYW5jZUluc2lnaHRFbmNyeXB0aW9uS2V5OiBwZXJmb3JtYW5jZUluc2lnaHRzRW5jcnlwdGlvbktleSxcbiAgICAgIHBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvbjogcGVyZm9ybWFuY2VJbnNpZ2h0c1JldGVudGlvbixcbiAgICAgIGluc3RhbmNlSWRlbnRpZmllcjogUmVzb3VyY2VOYW1pbmcuZGJJbnN0YW5jZUlkKHByb3BzLmRhdGFiYXNlTmFtZSEpLFxuICAgICAgaW5zdGFuY2VUeXBlOiBwcm9wcy5pbnN0YW5jZVR5cGVcbiAgICAgICAgPyBuZXcgSW5zdGFuY2VUeXBlKHByb3BzLmluc3RhbmNlVHlwZSlcbiAgICAgICAgOiBuZXcgSW5zdGFuY2VUeXBlKFwidDRnLmxhcmdlXCIpLFxuICAgICAgbWF4QWxsb2NhdGVkU3RvcmFnZTogcHJvcHMubWF4QWxsb2NhdGVkU3RvcmFnZSB8fCA1MDAsXG4gICAgICBtb25pdG9yaW5nSW50ZXJ2YWw6IHByb3BzLm1vbml0b3JpbmdJbnRlcnZhbCB8fCBEdXJhdGlvbi5taW51dGVzKDEpLFxuICAgICAgbXVsdGlBejogcHJvcHMubXVsdGlBeiAhPT0gZmFsc2UsXG4gICAgICBwb3J0OiB0aGlzLnBvcnQsXG4gICAgICBkZWxldGlvblByb3RlY3Rpb246IHByb3BzLmRlbGV0aW9uUHJvdGVjdGlvbiA/PyB0cnVlLFxuICAgICAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c6XG4gICAgICAgIHByb3BzLnByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93IHx8IFwiU2F0OjEyOjMwLVNhdDoyMDozMFwiLFxuICAgICAgcHVibGljbHlBY2Nlc3NpYmxlOiBwcm9wcy5wdWJsaWNseUFjY2Vzc2libGUgPz8gZmFsc2VcbiAgICB9O1xuXG4gICAgaWYgKHByb3BzLnNuYXBzaG90SWRlbnRpZmllcikge1xuICAgICAgLy8gQ3JlYXRlIGZyb20gc25hcHNob3RcbiAgICAgIHRoaXMuZGF0YWJhc2UgPSBuZXcgRGF0YWJhc2VJbnN0YW5jZUZyb21TbmFwc2hvdChcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfURhdGFiYXNlYCxcbiAgICAgICAge1xuICAgICAgICAgIC4uLmNvbW1vbkluc3RhbmNlUHJvcHMsXG4gICAgICAgICAgc25hcHNob3RJZGVudGlmaWVyOiBwcm9wcy5zbmFwc2hvdElkZW50aWZpZXIsXG4gICAgICAgICAgLy8gRm9yIHNuYXBzaG90cywgY3JlZGVudGlhbHMgYXJlIHVzZWQgdG8gcmVzZXQgdGhlIHBhc3N3b3JkXG4gICAgICAgICAgY3JlZGVudGlhbHM6IFNuYXBzaG90Q3JlZGVudGlhbHMuZnJvbVNlY3JldChcbiAgICAgICAgICAgIHRoaXMuZGF0YWJhc2VDcmVkZW50aWFscy5zZWNyZXRcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENyZWF0ZSBuZXcgaW5zdGFuY2VcbiAgICAgIHRoaXMuZGF0YWJhc2UgPSBuZXcgRGF0YWJhc2VJbnN0YW5jZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfURhdGFiYXNlYCxcbiAgICAgICAge1xuICAgICAgICAgIC4uLmNvbW1vbkluc3RhbmNlUHJvcHMsXG4gICAgICAgICAgZGF0YWJhc2VOYW1lOiBwcm9wcy5kYXRhYmFzZU5hbWUsXG4gICAgICAgICAgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxzLmZyb21TZWNyZXQodGhpcy5kYXRhYmFzZUNyZWRlbnRpYWxzLnNlY3JldClcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByb3RhdGVTZWNyZXQocHJvcHM6IFJkc1Byb3BzKSB7XG4gICAgY29uc3Qgcm90YXRpb25Db25maWcgPSBwcm9wcy5jcmVkZW50aWFscz8uc2VjcmV0Um90YXRpb247XG4gICAgY29uc3Qgcm90YXRpb25QZXJpb2QgPVxuICAgICAgKHR5cGVvZiByb3RhdGlvbkNvbmZpZyA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICByb3RhdGlvbkNvbmZpZz8uYXV0b21hdGljYWxseUFmdGVyKSB8fFxuICAgICAgRHVyYXRpb24uZGF5cygzMCk7XG5cbiAgICB0aGlzLm1hc3RlclNlY3JldCA9IG5ldyBTZWNyZXQodGhpcywgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfU1hc3RlclNlY3JldGAsIHtcbiAgICAgIHNlY3JldE5hbWU6IFJlc291cmNlTmFtaW5nLm1hc3RlclNlY3JldE5hbWUocHJvcHMuZGF0YWJhc2VOYW1lISlcbiAgICB9KTtcblxuICAgIG5ldyBTZWNyZXRSb3RhdGlvbih0aGlzLCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9U2VjcmV0Um90YXRpb25gLCB7XG4gICAgICBhcHBsaWNhdGlvbjogbmV3IFNlY3JldFJvdGF0aW9uQXBwbGljYXRpb24oXG4gICAgICAgIHRoaXMuZW5naW5lQ29uZmlnLnJvdGF0aW9uQXBwTmFtZSxcbiAgICAgICAgXCIxLjEuMzY3XCIsXG4gICAgICAgIHsgaXNNdWx0aVVzZXI6IHRydWUgfVxuICAgICAgKSxcbiAgICAgIHNlY3JldDogdGhpcy5kYXRhYmFzZUNyZWRlbnRpYWxzLnNlY3JldCxcbiAgICAgIG1hc3RlclNlY3JldDogdGhpcy5tYXN0ZXJTZWNyZXQuc2VjcmV0LFxuICAgICAgdGFyZ2V0OiB0aGlzLmRhdGFiYXNlLFxuICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgIGF1dG9tYXRpY2FsbHlBZnRlcjogcm90YXRpb25QZXJpb2RcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFByb3h5KHByb3BzOiBSZHNQcm9wcykge1xuICAgIGNvbnN0IHByb3h5Q29uZmlnID0gcHJvcHMucHJveHkgYXMgUHJveHlDb25maWc7XG4gICAgY29uc3QgdnBjU3VibmV0czogU3VibmV0U2VsZWN0aW9uID0gcHJveHlDb25maWcudnBjU3VibmV0cyA/PyB7XG4gICAgICBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1NcbiAgICB9O1xuXG4gICAgdGhpcy5kYXRhYmFzZVByb3h5U2VjdXJpdHlHcm91cCA9IG5ldyBTZWN1cml0eUdyb3VwKFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1Qcm94eVNlY3VyaXR5R3JvdXBgLFxuICAgICAge1xuICAgICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFNlY3VyaXR5IGdyb3VwIGZvciBSRFMgUHJveHkgZm9yICR7cHJvcHMuZGF0YWJhc2VOYW1lfWBcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gQWxsb3cgcHJveHkgdG8gY29ubmVjdCB0byBkYXRhYmFzZVxuICAgIHRoaXMuZGF0YWJhc2VTZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKFxuICAgICAgdGhpcy5kYXRhYmFzZVByb3h5U2VjdXJpdHlHcm91cCxcbiAgICAgIFBvcnQudGNwKHRoaXMucG9ydCksXG4gICAgICBcIkFsbG93IFJEUyBQcm94eSB0byBjb25uZWN0IHRvIGRhdGFiYXNlXCJcbiAgICApO1xuXG4gICAgdGhpcy5kYXRhYmFzZVByb3h5ID0gbmV3IERhdGFiYXNlUHJveHkoXG4gICAgICB0aGlzLFxuICAgICAgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfURhdGFiYXNlUHJveHlgLFxuICAgICAge1xuICAgICAgICBkYlByb3h5TmFtZTogUmVzb3VyY2VOYW1pbmcucHJveHlOYW1lKHByb3BzLmRhdGFiYXNlTmFtZSEpLFxuICAgICAgICBwcm94eVRhcmdldDogUHJveHlUYXJnZXQuZnJvbUluc3RhbmNlKHRoaXMuZGF0YWJhc2UpLFxuICAgICAgICBzZWNyZXRzOiBbdGhpcy5kYXRhYmFzZUNyZWRlbnRpYWxzLnNlY3JldF0sXG4gICAgICAgIHNlY3VyaXR5R3JvdXBzOiBbdGhpcy5kYXRhYmFzZVByb3h5U2VjdXJpdHlHcm91cF0sXG4gICAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICAgIHZwY1N1Ym5ldHMsXG4gICAgICAgIHJlcXVpcmVUTFM6IHByb3h5Q29uZmlnLnJlcXVpcmVUTFMgPz8gdHJ1ZSxcbiAgICAgICAgYm9ycm93VGltZW91dDogcHJveHlDb25maWcuY29ubmVjdGlvbkJvcnJvd1RpbWVvdXRcbiAgICAgICAgICA/IER1cmF0aW9uLnNlY29uZHMocHJveHlDb25maWcuY29ubmVjdGlvbkJvcnJvd1RpbWVvdXQpXG4gICAgICAgICAgOiBEdXJhdGlvbi5zZWNvbmRzKDEyMCksXG4gICAgICAgIG1heENvbm5lY3Rpb25zUGVyY2VudDogcHJveHlDb25maWcubWF4Q29ubmVjdGlvbnMsXG4gICAgICAgIG1heElkbGVDb25uZWN0aW9uc1BlcmNlbnQ6IHByb3h5Q29uZmlnLm1heElkbGVDb25uZWN0aW9uc1xuICAgICAgfVxuICAgICk7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1Qcm94eUVuZHBvaW50T3V0cHV0YCwge1xuICAgICAga2V5OiBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UHJveHlFbmRwb2ludGAsXG4gICAgICBleHBvcnROYW1lOiBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UHJveHlFbmRwb2ludGAsXG4gICAgICB2YWx1ZTogdGhpcy5kYXRhYmFzZVByb3h5LmVuZHBvaW50XG4gICAgfSk7XG4gIH1cblxuICBhZGRSZWFkUmVwbGljYShwcm9wczogUmRzUHJvcHMpIHtcbiAgICBjb25zdCByZXBsaWNhQ29uZmlnID0gcHJvcHMucmVhZFJlcGxpY2EgYXMgUmVhZFJlcGxpY2FDb25maWc7XG4gICAgY29uc3QgcmVwbGljYUluc3RhbmNlVHlwZSA9XG4gICAgICByZXBsaWNhQ29uZmlnLmluc3RhbmNlVHlwZSA/PyBwcm9wcy5pbnN0YW5jZVR5cGUgPz8gXCJ0NGcubGFyZ2VcIjtcblxuICAgIGNvbnN0IHBpRW5hYmxlZCA9IHByb3BzLnBlcmZvcm1hbmNlSW5zaWdodHMgIT09IGZhbHNlO1xuICAgIGNvbnN0IHBpQ29uZmlnID1cbiAgICAgIHBpRW5hYmxlZCAmJiB0eXBlb2YgcHJvcHMucGVyZm9ybWFuY2VJbnNpZ2h0cyA9PT0gXCJvYmplY3RcIlxuICAgICAgICA/IHByb3BzLnBlcmZvcm1hbmNlSW5zaWdodHNcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCByZWFkUmVwbGljYVBlcmZvcm1hbmNlSW5zaWdodHNLZXkgPVxuICAgICAgcGlFbmFibGVkICYmIGlzQ01LUmVxdWVzdGVkKHBpQ29uZmlnPy5lbmNyeXB0aW9uS2V5KVxuICAgICAgICA/IG5ldyBDdXN0b21lck1hbmFnZWRLZXkoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfVJlYWRSZXBsaWNhUmVhZGVySW5zaWdodHNLZXlgLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhbGlhc05hbWU6IGBjbWsvcmRzLyR7cHJvcHMuZGF0YWJhc2VOYW1lfS9SZWFkUmVwbGljYUluc2lnaHRzS2V5YFxuICAgICAgICAgICAgfVxuICAgICAgICAgICkua2V5XG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5yZWFkUmVwbGljYVNlY3VyaXR5R3JvdXAgPSBuZXcgU2VjdXJpdHlHcm91cChcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UmVhZFJlcGxpY2FTZWN1cml0eUdyb3VwYCxcbiAgICAgIHtcbiAgICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgICAgZGVzY3JpcHRpb246IGBTZWN1cml0eSBncm91cCBmb3IgUkRTIHJlYWQgcmVwbGljYSBvZiAke3Byb3BzLmRhdGFiYXNlTmFtZX1gXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEFsbG93IHByaW1hcnkgZGF0YWJhc2UgdG8gcmVwbGljYXRlIHRvIHJlYWQgcmVwbGljYVxuICAgIHRoaXMucmVhZFJlcGxpY2FTZWN1cml0eUdyb3VwLmFkZEluZ3Jlc3NSdWxlKFxuICAgICAgdGhpcy5kYXRhYmFzZVNlY3VyaXR5R3JvdXAsXG4gICAgICBQb3J0LnRjcCh0aGlzLnBvcnQpLFxuICAgICAgXCJBbGxvdyBwcmltYXJ5IGRhdGFiYXNlIHRvIHJlcGxpY2F0ZSB0byByZWFkIHJlcGxpY2FcIlxuICAgICk7XG5cbiAgICAvLyBEZWxldGlvbiB3YWl0ZXIgZW5zdXJlcyBwcmltYXJ5IGlzIFwiYXZhaWxhYmxlXCIgYmVmb3JlIENsb3VkRm9ybWF0aW9uIGRlbGV0ZXMgaXQuXG4gICAgLy8gV2hlbiB0aGUgcmVhZCByZXBsaWNhIGlzIGRlbGV0ZWQsIHRoZSBwcmltYXJ5IGVudGVycyBcIm1vZGlmeWluZ1wiIHN0YXRlLlxuICAgIC8vIFdpdGhvdXQgdGhpcyB3YWl0ZXIsIHRoZSBmaW5hbCBzbmFwc2hvdCBjcmVhdGlvbiBmYWlscy5cbiAgICBjb25zdCBpbnN0YW5jZUlkID0gUmVzb3VyY2VOYW1pbmcuZGJJbnN0YW5jZUlkKHByb3BzLmRhdGFiYXNlTmFtZSEpO1xuICAgIGNvbnN0IHdhaXRlclRpbWVvdXQgPSBEdXJhdGlvbi5taW51dGVzKDEwKTtcbiAgICBjb25zdCBkZWxldGlvbldhaXRlciA9IG5ldyBDdXN0b21SZXNvdXJjZShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9RGVsZXRpb25XYWl0ZXJgLFxuICAgICAge1xuICAgICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18xOF9YLFxuICAgICAgICB0aW1lb3V0OiB3YWl0ZXJUaW1lb3V0LnBsdXMoRHVyYXRpb24uc2Vjb25kcygzMCkpLFxuICAgICAgICBsYW1iZGFEZXNjcmlwdGlvbjogYCR7cHJvcHMuZGF0YWJhc2VOYW1lfSBkZWxldGlvbiB3YWl0ZXJgLFxuICAgICAgICBpbmxpbmVDb2RlOiBgXG5jb25zdCB7IFJEU0NsaWVudCB9ID0gcmVxdWlyZSgnQGF3cy1zZGsvY2xpZW50LXJkcycpO1xuY29uc3QgeyB3YWl0VW50aWxEQkluc3RhbmNlQXZhaWxhYmxlIH0gPSByZXF1aXJlKCdAYXdzLXNkay9jbGllbnQtcmRzJyk7XG5cbmV4cG9ydHMuaGFuZGxlciA9IGFzeW5jIChldmVudCkgPT4ge1xuICBjb25zb2xlLmxvZygnRXZlbnQ6JywgSlNPTi5zdHJpbmdpZnkoZXZlbnQsIG51bGwsIDIpKTtcbiAgY29uc3QgaW5zdGFuY2VJZCA9IGV2ZW50LlJlc291cmNlUHJvcGVydGllcy5JbnN0YW5jZUlkZW50aWZpZXI7XG4gIGNvbnN0IHBoeXNpY2FsUmVzb3VyY2VJZCA9IGV2ZW50LlBoeXNpY2FsUmVzb3VyY2VJZCB8fCBldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCB8fCAncmRzLWRlbGV0aW9uLXdhaXRlcic7XG5cbiAgaWYgKGV2ZW50LlJlcXVlc3RUeXBlID09PSAnRGVsZXRlJykge1xuICAgIGNvbnNvbGUubG9nKCdXYWl0aW5nIGZvciBpbnN0YW5jZSB0byBiZSBhdmFpbGFibGU6JywgaW5zdGFuY2VJZCk7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IFJEU0NsaWVudCh7fSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHdhaXRVbnRpbERCSW5zdGFuY2VBdmFpbGFibGUoXG4gICAgICAgIHsgY2xpZW50LCBtYXhXYWl0VGltZTogJHt3YWl0ZXJUaW1lb3V0LnRvU2Vjb25kcygpfSwgbWluRGVsYXk6IDEwLCBtYXhEZWxheTogMzAgfSxcbiAgICAgICAgeyBEQkluc3RhbmNlSWRlbnRpZmllcjogaW5zdGFuY2VJZCB9XG4gICAgICApO1xuICAgICAgY29uc29sZS5sb2coJ0luc3RhbmNlIGlzIGF2YWlsYWJsZSwgZGVsZXRpb24gY2FuIHByb2NlZWQnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yLm5hbWUgPT09ICdSZXNvdXJjZU5vdEZvdW5kRXJyb3InIHx8XG4gICAgICAgICAgZXJyb3IubWVzc2FnZT8uaW5jbHVkZXMoJ0RCSW5zdGFuY2VOb3RGb3VuZCcpIHx8XG4gICAgICAgICAgZXJyb3Iuc3RhdGUgPT09ICdGQUlMVVJFJykge1xuICAgICAgICBjb25zb2xlLmxvZygnSW5zdGFuY2Ugbm90IGZvdW5kIG9yIHdhaXRlciBmYWlsZWQsIHByb2NlZWRpbmcgd2l0aCBkZWxldGlvbicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2FpdGluZyBmb3IgaW5zdGFuY2U6JywgZXJyb3IpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgUGh5c2ljYWxSZXNvdXJjZUlkOiBwaHlzaWNhbFJlc291cmNlSWQgfTtcbn07XG4gICAgICAgIGAsXG4gICAgICAgIGlubGluZVBvbGljeTogW1xuICAgICAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgICBhY3Rpb25zOiBbXCJyZHM6RGVzY3JpYmVEQkluc3RhbmNlc1wiXSxcbiAgICAgICAgICAgIHJlc291cmNlczogW1wiKlwiXVxuICAgICAgICAgIH0pXG4gICAgICAgIF0sXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBJbnN0YW5jZUlkZW50aWZpZXI6IGluc3RhbmNlSWQsXG4gICAgICAgICAgVmVyc2lvbjogXCIxLjAuMFwiXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuXG4gICAgZGVsZXRpb25XYWl0ZXIucmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMuZGF0YWJhc2UpO1xuXG4gICAgY29uc3QgcmVhZFJlcGxpY2EgPSBuZXcgRGF0YWJhc2VJbnN0YW5jZVJlYWRSZXBsaWNhKFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1SZWFkUmVwbGljYWAsXG4gICAgICB7XG4gICAgICAgIHNvdXJjZURhdGFiYXNlSW5zdGFuY2U6IHRoaXMuZGF0YWJhc2UsXG4gICAgICAgIHZwYzogdGhpcy52cGMsXG4gICAgICAgIHZwY1N1Ym5ldHM6IHtcbiAgICAgICAgICBzdWJuZXRUeXBlOiBTdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1NcbiAgICAgICAgfSxcbiAgICAgICAgc2VjdXJpdHlHcm91cHM6IFt0aGlzLnJlYWRSZXBsaWNhU2VjdXJpdHlHcm91cF0sXG4gICAgICAgIGFsbG9jYXRlZFN0b3JhZ2U6IHByb3BzLmFsbG9jYXRlZFN0b3JhZ2UsXG4gICAgICAgIHN0b3JhZ2VFbmNyeXB0ZWQ6IHRydWUsXG4gICAgICAgIHN0b3JhZ2VUeXBlOiBTdG9yYWdlVHlwZS5HUDMsXG4gICAgICAgIGNhQ2VydGlmaWNhdGU6IENhQ2VydGlmaWNhdGUuUkRTX0NBX1JTQTQwOTZfRzEsXG4gICAgICAgIHJlbW92YWxQb2xpY3k6IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICAgICAgZGVsZXRlQXV0b21hdGVkQmFja3VwczogZmFsc2UsXG4gICAgICAgIGVuYWJsZVBlcmZvcm1hbmNlSW5zaWdodHM6IHBpRW5hYmxlZCxcbiAgICAgICAgcGVyZm9ybWFuY2VJbnNpZ2h0RW5jcnlwdGlvbktleTogcmVhZFJlcGxpY2FQZXJmb3JtYW5jZUluc2lnaHRzS2V5LFxuICAgICAgICBwZXJmb3JtYW5jZUluc2lnaHRSZXRlbnRpb246IHBpRW5hYmxlZFxuICAgICAgICAgID8gdGhpcy5nZXRQZXJmb3JtYW5jZUluc2lnaHRSZXRlbnRpb24ocGlDb25maWc/LnJldGVudGlvblBlcmlvZCA/PyA3KVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBpbnN0YW5jZUlkZW50aWZpZXI6IFJlc291cmNlTmFtaW5nLnJlYWRSZXBsaWNhSWQocHJvcHMuZGF0YWJhc2VOYW1lISksXG4gICAgICAgIGluc3RhbmNlVHlwZTogbmV3IEluc3RhbmNlVHlwZShyZXBsaWNhSW5zdGFuY2VUeXBlKSxcbiAgICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogcmVwbGljYUNvbmZpZy5hdmFpbGFiaWxpdHlab25lLFxuICAgICAgICBtYXhBbGxvY2F0ZWRTdG9yYWdlOiBwcm9wcy5tYXhBbGxvY2F0ZWRTdG9yYWdlIHx8IDUwMCxcbiAgICAgICAgbW9uaXRvcmluZ0ludGVydmFsOiBwcm9wcy5tb25pdG9yaW5nSW50ZXJ2YWwgfHwgRHVyYXRpb24ubWludXRlcygxKSxcbiAgICAgICAgbXVsdGlBejogcHJvcHMubXVsdGlBeiAhPT0gZmFsc2UsXG4gICAgICAgIHBvcnQ6IHRoaXMucG9ydCxcbiAgICAgICAgZGVsZXRpb25Qcm90ZWN0aW9uOiBwcm9wcy5kZWxldGlvblByb3RlY3Rpb24gPz8gdHJ1ZSxcbiAgICAgICAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c6XG4gICAgICAgICAgcHJvcHMucHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3cgfHwgXCJTYXQ6MTI6MzAtU2F0OjIwOjMwXCJcbiAgICAgIH1cbiAgICApO1xuXG4gICAgcmVhZFJlcGxpY2Eubm9kZS5hZGREZXBlbmRlbmN5KGRlbGV0aW9uV2FpdGVyLnJlc291cmNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGVyZm9ybWFuY2VJbnNpZ2h0UmV0ZW50aW9uKFxuICAgIGRheXM/OiBudW1iZXJcbiAgKTogUGVyZm9ybWFuY2VJbnNpZ2h0UmV0ZW50aW9uIHtcbiAgICBzd2l0Y2ggKGRheXMpIHtcbiAgICAgIGNhc2UgNzpcbiAgICAgICAgcmV0dXJuIFBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvbi5ERUZBVUxUO1xuICAgICAgY2FzZSAzMTpcbiAgICAgICAgcmV0dXJuIFBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvbi5NT05USFNfMTtcbiAgICAgIGNhc2UgOTM6XG4gICAgICAgIHJldHVybiBQZXJmb3JtYW5jZUluc2lnaHRSZXRlbnRpb24uTU9OVEhTXzM7XG4gICAgICBjYXNlIDE4NjpcbiAgICAgICAgcmV0dXJuIFBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvbi5NT05USFNfNjtcbiAgICAgIGNhc2UgMzcyOlxuICAgICAgICByZXR1cm4gUGVyZm9ybWFuY2VJbnNpZ2h0UmV0ZW50aW9uLk1PTlRIU18xMjtcbiAgICAgIGNhc2UgNzMxOlxuICAgICAgICByZXR1cm4gUGVyZm9ybWFuY2VJbnNpZ2h0UmV0ZW50aW9uLkxPTkdfVEVSTTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBQZXJmb3JtYW5jZUluc2lnaHRSZXRlbnRpb24uTU9OVEhTXzE7XG4gICAgfVxuICB9XG5cbiAgZ2V0SG9zdEVuZHBvaW50KCkge1xuICAgIGlmICh0aGlzLmRhdGFiYXNlUHJveHkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFiYXNlUHJveHkuZW5kcG9pbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFiYXNlLmRiSW5zdGFuY2VFbmRwb2ludEFkZHJlc3M7XG4gICAgfVxuICB9XG5cbiAgZ2V0SG9zdFBvcnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMucG9ydCk7XG4gIH1cblxuICBnZXRDcmVkZW50aWFscygpOiBTZWNyZXQge1xuICAgIHJldHVybiB0aGlzLmRhdGFiYXNlQ3JlZGVudGlhbHM7XG4gIH1cblxuICBzdGF0aWMgYnVpbGQoaWQ6IHN0cmluZywgcHJvcHM6IFJkc1Byb3BzKTogKHNiOiBTdGFja0J1aWxkZXIpID0+IENvbnN0cnVjdCB7XG4gICAgcmV0dXJuIChzYjogU3RhY2tCdWlsZGVyKSA9PiB7XG4gICAgICBjb25zdCBuZXdQcm9wczogUmRzUHJvcHMgPSB7XG4gICAgICAgIC4uLnByb3BzLFxuICAgICAgICAuLi57XG4gICAgICAgICAgdnBjOiAoc2IuZ2V0TmV0d29yaygpIGFzIElWcGMpIHx8IHByb3BzLnZwYyxcbiAgICAgICAgICBzZWN1cml0eUdyb3VwSWRzOiBwcm9wcz8uc2VjdXJpdHlHcm91cElkcyA/PyBbXSxcbiAgICAgICAgICBkYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlTmFtZSB8fCBgJHtpZC5yZXBsYWNlKFwiUmRzXCIsIFwiXCIpfWBcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIG5ldyB0aGlzKHNiLmdldFN0YWNrKCksIGlkLCBuZXdQcm9wcyk7XG4gICAgfTtcbiAgfVxufVxuIl19
|
|
353
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmRzSW5zdGFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9kYXRhYmFzZS9yZHNJbnN0YW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBaUU7QUFDakUsaURBUTZCO0FBQzdCLGlEQWdCNkI7QUFDN0IsdUVBR3dDO0FBQ3hDLHVEQUFpRDtBQUNqRCxpREFBOEQ7QUFDOUQsMkNBQXVDO0FBQ3ZDLGdDQUF1QztBQUN2Qyx3Q0FBd0Q7QUFDeEQsZ0VBQTZEO0FBRTdELDZEQVN3QztBQUN4QyxrRUFBK0Q7QUFDL0Qsc0VBQStEO0FBK0IvRCxNQUFhLFdBQVksU0FBUSxzQkFBUztJQWdCeEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFlO1FBQ3ZELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFFckIsOEVBQThFO1FBQzlFLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLFlBQVksSUFBSTtZQUN4QyxlQUFlLEVBQUUsVUFBVTtZQUMzQixhQUFhLEVBQUUsRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFO1lBQ3ZDLGVBQWUsRUFBRSw4Q0FBOEM7U0FDaEUsQ0FBQztRQUVGLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEIsMEVBQTBFO1FBQzFFLE1BQU0sc0JBQXNCLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxjQUFjLEtBQUssS0FBSyxDQUFDO1FBQzNFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxD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QUMsVUFBVSxFQUFXLElBQUksS0FBSyxDQUFDLEdBQUc7b0JBQzNDLGdCQUFnQixFQUFFLEtBQUssRUFBRSxnQkFBZ0IsSUFBSSxFQUFFO29CQUMvQyxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVksSUFBSSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFO2lCQUMvRDthQUNGLENBQUM7WUFFRixPQUFPLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBcGRELGtDQW9kQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENmbk91dHB1dCwgRHVyYXRpb24sIFJlbW92YWxQb2xpY3kgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7XG4gIENvbm5lY3Rpb25zLFxuICB0eXBlIElDb25uZWN0YWJsZSxcbiAgSW5zdGFuY2VUeXBlLFxuICB0eXBlIElWcGMsXG4gIFBvcnQsXG4gIHR5cGUgU3VibmV0U2VsZWN0aW9uLFxuICBTdWJuZXRUeXBlXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQge1xuICBDYUNlcnRpZmljYXRlLFxuICBDcmVkZW50aWFscyxcbiAgRGF0YWJhc2VJbnN0YW5jZSxcbiAgRGF0YWJhc2VJbnN0YW5jZUZyb21TbmFwc2hvdCxcbiAgRGF0YWJhc2VJbnN0YW5jZUVuZ2luZSxcbiAgRGF0YWJhc2VJbnN0YW5jZVJlYWRSZXBsaWNhLFxuICBEYXRhYmFzZVByb3h5LFxuICB0eXBlIElEYXRhYmFzZUluc3RhbmNlLFxuICB0eXBlIElJbnN0YW5jZUVuZ2luZSxcbiAgUGFyYW1ldGVyR3JvdXAsXG4gIFBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvbixcbiAgUG9zdGdyZXNFbmdpbmVWZXJzaW9uLFxuICBQcm94eVRhcmdldCxcbiAgU25hcHNob3RDcmVkZW50aWFscyxcbiAgU3RvcmFnZVR5cGVcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1yZHNcIjtcbmltcG9ydCB7XG4gIFNlY3JldFJvdGF0aW9uLFxuICBTZWNyZXRSb3RhdGlvbkFwcGxpY2F0aW9uXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc2VjcmV0c21hbmFnZXJcIjtcbmltcG9ydCB7IFJ1bnRpbWUgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50LCBFZmZlY3QgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFNlY3VyaXR5R3JvdXAgfSBmcm9tIFwiLi4vaWFtXCI7XG5pbXBvcnQgeyBDdXN0b21lck1hbmFnZWRLZXksIFNlY3JldCB9IGZyb20gXCIuLi9zZWNyZXRzXCI7XG5pbXBvcnQgeyBDdXN0b21SZXNvdXJjZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY3VzdG9tUmVzb3VyY2VcIjtcbmltcG9ydCB7IHR5cGUgU3RhY2tCdWlsZGVyIH0gZnJvbSBcIi4uL2Jhc2UvYXdzU3RhY2tcIjtcbmltcG9ydCB7XG4gIHR5cGUgRW5naW5lQ29uZmlnLFxuICB0eXBlIFByb3h5Q29uZmlnLFxuICB0eXBlIFJlYWRSZXBsaWNhQ29uZmlnLFxuICB0eXBlIENyZWRlbnRpYWxzQ29uZmlnLFxuICB0eXBlIEVuY3J5cHRpb25Db25maWcsXG4gIHR5cGUgUGVyZm9ybWFuY2VJbnNpZ2h0c0NvbmZpZyxcbiAgaXNBd3NNYW5hZ2VkS2V5LFxuICBpc0NNS1JlcXVlc3RlZFxufSBmcm9tIFwiLi4vLi4vLi4vcGF0dGVybnMvYXdzL2RhdGFiYXNlXCI7XG5pbXBvcnQgeyBSZXNvdXJjZU5hbWluZyB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9yZXNvdXJjZU5hbWluZ1wiO1xuaW1wb3J0IHsgdG9QYXNjYWxDYXNlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL2NhcGl0YWxpc2VTdHJpbmdcIjtcblxuaW50ZXJmYWNlIFJkc1Byb3BzIHtcbiAgdnBjOiBJVnBjO1xuICBkYXRhYmFzZU5hbWU/OiBzdHJpbmc7XG4gIGVuZ2luZT86IElJbnN0YW5jZUVuZ2luZTtcbiAgZW5naW5lQ29uZmlnPzogRW5naW5lQ29uZmlnO1xuICBpbnN0YW5jZVR5cGU/OiBzdHJpbmc7XG4gIG1heEFsbG9jYXRlZFN0b3JhZ2U/OiBudW1iZXI7XG4gIGFsbG9jYXRlZFN0b3JhZ2U/OiBudW1iZXI7XG4gIGJhY2t1cFJldGVudGlvbj86IER1cmF0aW9uO1xuICBwcmVmZXJyZWRCYWNrdXBXaW5kb3c/OiBzdHJpbmc7XG4gIGNsdXN0ZXJJZGVudGlmaWVyPzogc3RyaW5nO1xuICBtb25pdG9yaW5nSW50ZXJ2YWw/OiBEdXJhdGlvbjtcbiAgcHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3c/OiBzdHJpbmc7XG4gIHBvcnQ/OiBudW1iZXI7XG4gIHBlcmZvcm1hbmNlSW5zaWdodHM/OiBQZXJmb3JtYW5jZUluc2lnaHRzQ29uZmlnIHwgZmFsc2U7XG4gIHNlY3VyaXR5R3JvdXBJZHM/OiBzdHJpbmdbXTtcbiAgbXVsdGlBej86IGJvb2xlYW47XG4gIHByb3h5PzogUHJveHlDb25maWcgfCBmYWxzZTtcbiAgcmVhZFJlcGxpY2E/OiBSZWFkUmVwbGljYUNvbmZpZyB8IGZhbHNlO1xuICBjcmVkZW50aWFscz86IENyZWRlbnRpYWxzQ29uZmlnO1xuICBlbmNyeXB0aW9uPzogRW5jcnlwdGlvbkNvbmZpZztcbiAgcHVibGljbHlBY2Nlc3NpYmxlPzogYm9vbGVhbjtcbiAgZGVsZXRpb25Qcm90ZWN0aW9uPzogYm9vbGVhbjtcbiAgLyoqIEFSTiBvciBpZGVudGlmaWVyIG9mIERCIGluc3RhbmNlIHNuYXBzaG90IHRvIHJlc3RvcmUgZnJvbSAqL1xuICBzbmFwc2hvdElkZW50aWZpZXI/OiBzdHJpbmc7XG4gIC8qKiBVc2VybmFtZSBmcm9tIHRoZSBzbmFwc2hvdCAocmVxdWlyZWQgd2hlbiByZXN0b3JpbmcgZnJvbSBzbmFwc2hvdCB0byByZXNldCBwYXNzd29yZCkgKi9cbiAgc25hcHNob3RVc2VybmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFJkc0luc3RhbmNlIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSUNvbm5lY3RhYmxlIHtcbiAgcHVibGljIGNvbm5lY3Rpb25zITogQ29ubmVjdGlvbnM7XG4gIHB1YmxpYyBkYXRhYmFzZVNlY3VyaXR5R3JvdXAhOiBTZWN1cml0eUdyb3VwO1xuICBwdWJsaWMgdnBjITogSVZwYztcblxuICBwcml2YXRlIHBvcnQhOiBudW1iZXI7XG4gIHByaXZhdGUgZW5naW5lQ29uZmlnITogRW5naW5lQ29uZmlnO1xuICBwcml2YXRlIGRhdGFiYXNlQ3JlZGVudGlhbHMhOiBTZWNyZXQ7XG4gIHByaXZhdGUgZGF0YWJhc2UhOiBJRGF0YWJhc2VJbnN0YW5jZTtcbiAgcHJpdmF0ZSBtYXN0ZXJTZWNyZXQ/OiBTZWNyZXQ7XG4gIHByaXZhdGUgZGF0YWJhc2VQcm94eT86IERhdGFiYXNlUHJveHk7XG4gIHByaXZhdGUgZGF0YWJhc2VQcm94eVNlY3VyaXR5R3JvdXA/OiBTZWN1cml0eUdyb3VwO1xuICBwcml2YXRlIHJlYWRSZXBsaWNhU2VjdXJpdHlHcm91cD86IFNlY3VyaXR5R3JvdXA7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjb25zdHJ1Y3RJZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSZHNQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLmNvbnN0cnVjdElkID0gaWQ7XG4gICAgdGhpcy5wb3J0ID0gcHJvcHMucG9ydCB8fCAzNTI1NTtcbiAgICB0aGlzLnZwYyA9IHByb3BzLnZwYztcblxuICAgIC8vIFBvc3RncmVTUUwgZmFsbGJhY2sgZm9yIGRpcmVjdCB1c2FnZSAtIGVuc3VyZSBlbmdpbmUgYW5kIGVuZ2luZUNvbmZpZyBtYXRjaFxuICAgIHRoaXMuZW5naW5lQ29uZmlnID0gcHJvcHMuZW5naW5lQ29uZmlnID8/IHtcbiAgICAgIGRlZmF1bHRVc2VybmFtZTogXCJwb3N0Z3Jlc1wiLFxuICAgICAgc3NsUGFyYW1ldGVyczogeyBcInJkcy5mb3JjZV9zc2xcIjogXCIxXCIgfSxcbiAgICAgIHJvdGF0aW9uQXBwTmFtZTogXCJTZWNyZXRzTWFuYWdlclJEU1Bvc3RncmVTUUxSb3RhdGlvbk11bHRpVXNlclwiXG4gICAgfTtcblxuICAgIHRoaXMuYWRkRGF0YWJhc2UocHJvcHMpO1xuXG4gICAgLy8gU2VjcmV0IHJvdGF0aW9uIGVuYWJsZWQgYnkgZGVmYXVsdCAob3B0LW91dCB3aXRoIHNlY3JldFJvdGF0aW9uOiBmYWxzZSlcbiAgICBjb25zdCBzZWNyZXRSb3RhdGlvbkRpc2FibGVkID0gcHJvcHMuY3JlZGVudGlhbHM/LnNlY3JldFJvdGF0aW9uID09PSBmYWxzZTtcbiAgICBpZiAoIXNlY3JldFJvdGF0aW9uRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMucm90YXRlU2VjcmV0KHByb3BzKTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMucHJveHkgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5wcm94eSAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYWRkUHJveHkocHJvcHMpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5yZWFkUmVwbGljYSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLnJlYWRSZXBsaWNhICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5hZGRSZWFkUmVwbGljYShwcm9wcyk7XG4gICAgfVxuICB9XG5cbiAgYWRkRGF0YWJhc2UocHJvcHM6IFJkc1Byb3BzKSB7XG4gICAgLy8gVXNlcm5hbWUgcHJpb3JpdHk6IHNuYXBzaG90VXNlcm5hbWUgPiBjcmVkZW50aWFscy51c2VybmFtZSA+IGVuZ2luZSBkZWZhdWx0XG4gICAgY29uc3QgdXNlcm5hbWUgPVxuICAgICAgcHJvcHMuc25hcHNob3RJZGVudGlmaWVyICYmIHByb3BzLnNuYXBzaG90VXNlcm5hbWVcbiAgICAgICAgPyBwcm9wcy5zbmFwc2hvdFVzZXJuYW1lXG4gICAgICAgIDogKHByb3BzLmNyZWRlbnRpYWxzPy51c2VybmFtZSA/PyB0aGlzLmVuZ2luZUNvbmZpZy5kZWZhdWx0VXNlcm5hbWUpO1xuICAgIHRoaXMuZGF0YWJhc2VDcmVkZW50aWFscyA9IG5ldyBTZWNyZXQoXG4gICAgICB0aGlzLFxuICAgICAgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfUNyZWRlbnRpYWxzYCxcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETzogcmV2ZXJ0IHRvIHRoaXMuY29uc3RydWN0SWQgYWZ0ZXIgd2ViYXBwIHJlZGVwbG95ICh0ZW1wIGZpeCB0byBwcmVzZXJ2ZSBleGlzdGluZyBpbnN0YW5jZSBpZGVudGlmaWVycylcbiAgICAgICAgc2VjcmV0TmFtZTogUmVzb3VyY2VOYW1pbmcuY3JlZGVudGlhbHNTZWNyZXROYW1lKHByb3BzLmRhdGFiYXNlTmFtZSEpLFxuICAgICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICAgIHNlY3JldFN0cmluZ1RlbXBsYXRlOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICB1c2VybmFtZVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGV4Y2x1ZGVQdW5jdHVhdGlvbjogdHJ1ZSxcbiAgICAgICAgICBpbmNsdWRlU3BhY2U6IGZhbHNlLFxuICAgICAgICAgIGdlbmVyYXRlU3RyaW5nS2V5OiBcInBhc3N3b3JkXCJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG5cbiAgICB0aGlzLmRhdGFiYXNlU2VjdXJpdHlHcm91cCA9IG5ldyBTZWN1cml0eUdyb3VwKFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1TZWN1cml0eUdyb3VwYCxcbiAgICAgIHtcbiAgICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgICAgZGVzY3JpcHRpb246IGBTZWN1cml0eSBncm91cCBmb3IgUkRTIGRhdGFiYXNlIGluc3RhbmNlICR7cHJvcHMuZGF0YWJhc2VOYW1lfWBcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gU2VsZi1yZWZlcmVuY2luZyBydWxlIGZvciBtdWx0aS1BWiBjb21tdW5pY2F0aW9uXG4gICAgdGhpcy5kYXRhYmFzZVNlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUoXG4gICAgICB0aGlzLmRhdGFiYXNlU2VjdXJpdHlHcm91cCxcbiAgICAgIFBvcnQudGNwKHRoaXMucG9ydClcbiAgICApO1xuXG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IG5ldyBDb25uZWN0aW9ucyh7XG4gICAgICBzZWN1cml0eUdyb3VwczogW3RoaXMuZGF0YWJhc2VTZWN1cml0eUdyb3VwXSxcbiAgICAgIGRlZmF1bHRQb3J0OiBQb3J0LnRjcCh0aGlzLnBvcnQpXG4gICAgfSk7XG5cbiAgICBjb25zdCBzdG9yYWdlRW5jcnlwdGlvbktleSA9IGlzQ01LUmVxdWVzdGVkKHByb3BzLmVuY3J5cHRpb24/LnN0b3JhZ2VLZXkpXG4gICAgICA/IG5ldyBDdXN0b21lck1hbmFnZWRLZXkoXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9Q2x1c3RlckVuY3J5cHRpb25LZXlgLFxuICAgICAgICAgIHsgYWxpYXNOYW1lOiBgY21rL3Jkcy8ke3Byb3BzLmRhdGFiYXNlTmFtZX0vZW5jcnlwdGlvbktleWAgfVxuICAgICAgICApLmtleVxuICAgICAgOiBpc0F3c01hbmFnZWRLZXkocHJvcHMuZW5jcnlwdGlvbj8uc3RvcmFnZUtleSkgfHxcbiAgICAgICAgICBwcm9wcy5lbmNyeXB0aW9uPy5zdG9yYWdlS2V5ID09PSB1bmRlZmluZWRcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiBwcm9wcy5lbmNyeXB0aW9uPy5zdG9yYWdlS2V5O1xuXG4gICAgY29uc3QgcGlFbmFibGVkID0gcHJvcHMucGVyZm9ybWFuY2VJbnNpZ2h0cyAhPT0gZmFsc2U7XG4gICAgY29uc3QgcGlDb25maWcgPVxuICAgICAgcGlFbmFibGVkICYmIHR5cGVvZiBwcm9wcy5wZXJmb3JtYW5jZUluc2lnaHRzID09PSBcIm9iamVjdFwiXG4gICAgICAgID8gcHJvcHMucGVyZm9ybWFuY2VJbnNpZ2h0c1xuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHBlcmZvcm1hbmNlSW5zaWdodHNFbmNyeXB0aW9uS2V5ID1cbiAgICAgIHBpRW5hYmxlZCAmJiBpc0NNS1JlcXVlc3RlZChwaUNvbmZpZz8uZW5jcnlwdGlvbktleSlcbiAgICAgICAgPyBuZXcgQ3VzdG9tZXJNYW5hZ2VkS2V5KFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1QZXJmb3JtYW5jZUluc2lnaHRzS2V5YCxcbiAgICAgICAgICAgIHsgYWxpYXNOYW1lOiBgY21rL3Jkcy8ke3Byb3BzLmRhdGFiYXNlTmFtZX0vSW5zaWdodHNLZXlgIH1cbiAgICAgICAgICApLmtleVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHBlcmZvcm1hbmNlSW5zaWdodHNSZXRlbnRpb24gPSBwaUVuYWJsZWRcbiAgICAgID8gdGhpcy5nZXRQZXJmb3JtYW5jZUluc2lnaHRSZXRlbnRpb24ocGlDb25maWc/LnJldGVudGlvblBlcmlvZCA/PyA3KVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBlbmdpbmUgPVxuICAgICAgcHJvcHMuZW5naW5lIHx8XG4gICAgICBEYXRhYmFzZUluc3RhbmNlRW5naW5lLnBvc3RncmVzKHtcbiAgICAgICAgdmVyc2lvbjogUG9zdGdyZXNFbmdpbmVWZXJzaW9uLlZFUl8xN181XG4gICAgICB9KTtcblxuICAgIGNvbnN0IHBhcmFtZXRlckdyb3VwID0gbmV3IFBhcmFtZXRlckdyb3VwKFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1QYXJhbWV0ZXJHcm91cGAsXG4gICAgICB7XG4gICAgICAgIGVuZ2luZSxcbiAgICAgICAgZGVzY3JpcHRpb246IGBQYXJhbWV0ZXIgZ3JvdXAgZm9yICR7cHJvcHMuZGF0YWJhc2VOYW1lfSB3aXRoIHNlY3VyaXR5IGRlZmF1bHRzYCxcbiAgICAgICAgcGFyYW1ldGVyczogdGhpcy5lbmdpbmVDb25maWcuc3NsUGFyYW1ldGVyc1xuICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBVc2UgUFVCTElDIHN1Ym5ldCBmb3IgcHVibGljbHlBY2Nlc3NpYmxlIGRhdGFiYXNlcyAoZS5nLiwgdGlua2VyZXIgdGllciB3aXRob3V0IE5BVClcbiAgICBjb25zdCBzdWJuZXRUeXBlID0gcHJvcHMucHVibGljbHlBY2Nlc3NpYmxlXG4gICAgICA/IFN1Ym5ldFR5cGUuUFVCTElDXG4gICAgICA6IFN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUztcblxuICAgIGNvbnN0IGNvbW1vbkluc3RhbmNlUHJvcHMgPSB7XG4gICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgdnBjU3VibmV0czoge1xuICAgICAgICBzdWJuZXRUeXBlXG4gICAgICB9LFxuICAgICAgc2VjdXJpdHlHcm91cHM6IFt0aGlzLmRhdGFiYXNlU2VjdXJpdHlHcm91cF0sXG4gICAgICBlbmdpbmUsXG4gICAgICBwYXJhbWV0ZXJHcm91cCxcbiAgICAgIGFsbG9jYXRlZFN0b3JhZ2U6IHByb3BzLmFsbG9jYXRlZFN0b3JhZ2UsXG4gICAgICBiYWNrdXBSZXRlbnRpb246IHByb3BzLmJhY2t1cFJldGVudGlvbiB8fCBEdXJhdGlvbi5kYXlzKDE0KSxcbiAgICAgIHByZWZlcnJlZEJhY2t1cFdpbmRvdzogcHJvcHMucHJlZmVycmVkQmFja3VwV2luZG93IHx8IFwiMDI6MDAtMDM6MDBcIixcbiAgICAgIHN0b3JhZ2VFbmNyeXB0ZWQ6IHRydWUsXG4gICAgICBzdG9yYWdlRW5jcnlwdGlvbktleSxcbiAgICAgIHN0b3JhZ2VUeXBlOiBTdG9yYWdlVHlwZS5HUDMsXG4gICAgICBjYUNlcnRpZmljYXRlOiBDYUNlcnRpZmljYXRlLlJEU19DQV9SU0E0MDk2X0cxLFxuICAgICAgcmVtb3ZhbFBvbGljeTogUmVtb3ZhbFBvbGljeS5TTkFQU0hPVCxcbiAgICAgIGRlbGV0ZUF1dG9tYXRlZEJhY2t1cHM6IGZhbHNlLFxuICAgICAgZW5hYmxlUGVyZm9ybWFuY2VJbnNpZ2h0czogcGlFbmFibGVkLFxuICAgICAgcGVyZm9ybWFuY2VJbnNpZ2h0RW5jcnlwdGlvbktleTogcGVyZm9ybWFuY2VJbnNpZ2h0c0VuY3J5cHRpb25LZXksXG4gICAgICBwZXJmb3JtYW5jZUluc2lnaHRSZXRlbnRpb246IHBlcmZvcm1hbmNlSW5zaWdodHNSZXRlbnRpb24sXG4gICAgICAvLyBUT0RPOiByZXZlcnQgdG8gdGhpcy5jb25zdHJ1Y3RJZCBhZnRlciB3ZWJhcHAgcmVkZXBsb3kgKHRlbXAgZml4IHRvIHByZXNlcnZlIGV4aXN0aW5nIGluc3RhbmNlIGlkZW50aWZpZXJzKVxuICAgICAgaW5zdGFuY2VJZGVudGlmaWVyOiBSZXNvdXJjZU5hbWluZy5kYkluc3RhbmNlSWQocHJvcHMuZGF0YWJhc2VOYW1lISksXG4gICAgICBpbnN0YW5jZVR5cGU6IHByb3BzLmluc3RhbmNlVHlwZVxuICAgICAgICA/IG5ldyBJbnN0YW5jZVR5cGUocHJvcHMuaW5zdGFuY2VUeXBlKVxuICAgICAgICA6IG5ldyBJbnN0YW5jZVR5cGUoXCJ0NGcubGFyZ2VcIiksXG4gICAgICBtYXhBbGxvY2F0ZWRTdG9yYWdlOiBwcm9wcy5tYXhBbGxvY2F0ZWRTdG9yYWdlIHx8IDUwMCxcbiAgICAgIG1vbml0b3JpbmdJbnRlcnZhbDogcHJvcHMubW9uaXRvcmluZ0ludGVydmFsIHx8IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgICBtdWx0aUF6OiBwcm9wcy5tdWx0aUF6ICE9PSBmYWxzZSxcbiAgICAgIHBvcnQ6IHRoaXMucG9ydCxcbiAgICAgIGRlbGV0aW9uUHJvdGVjdGlvbjogcHJvcHMuZGVsZXRpb25Qcm90ZWN0aW9uID8/IHRydWUsXG4gICAgICBwcmVmZXJyZWRNYWludGVuYW5jZVdpbmRvdzpcbiAgICAgICAgcHJvcHMucHJlZmVycmVkTWFpbnRlbmFuY2VXaW5kb3cgfHwgXCJTYXQ6MTI6MzAtU2F0OjIwOjMwXCIsXG4gICAgICBwdWJsaWNseUFjY2Vzc2libGU6IHByb3BzLnB1YmxpY2x5QWNjZXNzaWJsZSA/PyBmYWxzZVxuICAgIH07XG5cbiAgICBpZiAocHJvcHMuc25hcHNob3RJZGVudGlmaWVyKSB7XG4gICAgICAvLyBDcmVhdGUgZnJvbSBzbmFwc2hvdFxuICAgICAgdGhpcy5kYXRhYmFzZSA9IG5ldyBEYXRhYmFzZUluc3RhbmNlRnJvbVNuYXBzaG90KFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9RGF0YWJhc2VgLFxuICAgICAgICB7XG4gICAgICAgICAgLi4uY29tbW9uSW5zdGFuY2VQcm9wcyxcbiAgICAgICAgICBzbmFwc2hvdElkZW50aWZpZXI6IHByb3BzLnNuYXBzaG90SWRlbnRpZmllcixcbiAgICAgICAgICAvLyBGb3Igc25hcHNob3RzLCBjcmVkZW50aWFscyBhcmUgdXNlZCB0byByZXNldCB0aGUgcGFzc3dvcmRcbiAgICAgICAgICBjcmVkZW50aWFsczogU25hcHNob3RDcmVkZW50aWFscy5mcm9tU2VjcmV0KFxuICAgICAgICAgICAgdGhpcy5kYXRhYmFzZUNyZWRlbnRpYWxzLnNlY3JldFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3JlYXRlIG5ldyBpbnN0YW5jZVxuICAgICAgdGhpcy5kYXRhYmFzZSA9IG5ldyBEYXRhYmFzZUluc3RhbmNlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9RGF0YWJhc2VgLFxuICAgICAgICB7XG4gICAgICAgICAgLi4uY29tbW9uSW5zdGFuY2VQcm9wcyxcbiAgICAgICAgICBkYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlTmFtZSxcbiAgICAgICAgICBjcmVkZW50aWFsczogQ3JlZGVudGlhbHMuZnJvbVNlY3JldCh0aGlzLmRhdGFiYXNlQ3JlZGVudGlhbHMuc2VjcmV0KVxuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJvdGF0ZVNlY3JldChwcm9wczogUmRzUHJvcHMpIHtcbiAgICBjb25zdCByb3RhdGlvbkNvbmZpZyA9IHByb3BzLmNyZWRlbnRpYWxzPy5zZWNyZXRSb3RhdGlvbjtcbiAgICBjb25zdCByb3RhdGlvblBlcmlvZCA9XG4gICAgICAodHlwZW9mIHJvdGF0aW9uQ29uZmlnID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgIHJvdGF0aW9uQ29uZmlnPy5hdXRvbWF0aWNhbGx5QWZ0ZXIpIHx8XG4gICAgICBEdXJhdGlvbi5kYXlzKDMwKTtcblxuICAgIHRoaXMubWFzdGVyU2VjcmV0ID0gbmV3IFNlY3JldCh0aGlzLCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9TWFzdGVyU2VjcmV0YCwge1xuICAgICAgLy8gVE9ETzogcmV2ZXJ0IHRvIHRoaXMuY29uc3RydWN0SWQgYWZ0ZXIgd2ViYXBwIHJlZGVwbG95ICh0ZW1wIGZpeCB0byBwcmVzZXJ2ZSBleGlzdGluZyBpbnN0YW5jZSBpZGVudGlmaWVycylcbiAgICAgIHNlY3JldE5hbWU6IFJlc291cmNlTmFtaW5nLm1hc3RlclNlY3JldE5hbWUocHJvcHMuZGF0YWJhc2VOYW1lISlcbiAgICB9KTtcblxuICAgIG5ldyBTZWNyZXRSb3RhdGlvbih0aGlzLCBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9U2VjcmV0Um90YXRpb25gLCB7XG4gICAgICBhcHBsaWNhdGlvbjogbmV3IFNlY3JldFJvdGF0aW9uQXBwbGljYXRpb24oXG4gICAgICAgIHRoaXMuZW5naW5lQ29uZmlnLnJvdGF0aW9uQXBwTmFtZSxcbiAgICAgICAgXCIxLjEuMzY3XCIsXG4gICAgICAgIHsgaXNNdWx0aVVzZXI6IHRydWUgfVxuICAgICAgKSxcbiAgICAgIHNlY3JldDogdGhpcy5kYXRhYmFzZUNyZWRlbnRpYWxzLnNlY3JldCxcbiAgICAgIG1hc3RlclNlY3JldDogdGhpcy5tYXN0ZXJTZWNyZXQuc2VjcmV0LFxuICAgICAgdGFyZ2V0OiB0aGlzLmRhdGFiYXNlLFxuICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgIGF1dG9tYXRpY2FsbHlBZnRlcjogcm90YXRpb25QZXJpb2RcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFByb3h5KHByb3BzOiBSZHNQcm9wcykge1xuICAgIGlmICghcHJvcHMucHJveHkpIHJldHVybjtcbiAgICBjb25zdCBwcm94eUNvbmZpZyA9IHByb3BzLnByb3h5O1xuICAgIGNvbnN0IHZwY1N1Ym5ldHM6IFN1Ym5ldFNlbGVjdGlvbiA9IHByb3h5Q29uZmlnLnZwY1N1Ym5ldHMgPz8ge1xuICAgICAgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTXG4gICAgfTtcblxuICAgIHRoaXMuZGF0YWJhc2VQcm94eVNlY3VyaXR5R3JvdXAgPSBuZXcgU2VjdXJpdHlHcm91cChcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UHJveHlTZWN1cml0eUdyb3VwYCxcbiAgICAgIHtcbiAgICAgICAgdnBjOiB0aGlzLnZwYyxcbiAgICAgICAgZGVzY3JpcHRpb246IGBTZWN1cml0eSBncm91cCBmb3IgUkRTIFByb3h5IGZvciAke3Byb3BzLmRhdGFiYXNlTmFtZX1gXG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIEFsbG93IHByb3h5IHRvIGNvbm5lY3QgdG8gZGF0YWJhc2VcbiAgICB0aGlzLmRhdGFiYXNlU2VjdXJpdHlHcm91cC5hZGRJbmdyZXNzUnVsZShcbiAgICAgIHRoaXMuZGF0YWJhc2VQcm94eVNlY3VyaXR5R3JvdXAsXG4gICAgICBQb3J0LnRjcCh0aGlzLnBvcnQpLFxuICAgICAgXCJBbGxvdyBSRFMgUHJveHkgdG8gY29ubmVjdCB0byBkYXRhYmFzZVwiXG4gICAgKTtcblxuICAgIHRoaXMuZGF0YWJhc2VQcm94eSA9IG5ldyBEYXRhYmFzZVByb3h5KFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1EYXRhYmFzZVByb3h5YCxcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETzogcmV2ZXJ0IHRvIHRoaXMuY29uc3RydWN0SWQgYWZ0ZXIgd2ViYXBwIHJlZGVwbG95ICh0ZW1wIGZpeCB0byBwcmVzZXJ2ZSBleGlzdGluZyBpbnN0YW5jZSBpZGVudGlmaWVycylcbiAgICAgICAgZGJQcm94eU5hbWU6IFJlc291cmNlTmFtaW5nLnByb3h5TmFtZShwcm9wcy5kYXRhYmFzZU5hbWUhKSxcbiAgICAgICAgcHJveHlUYXJnZXQ6IFByb3h5VGFyZ2V0LmZyb21JbnN0YW5jZSh0aGlzLmRhdGFiYXNlKSxcbiAgICAgICAgc2VjcmV0czogW3RoaXMuZGF0YWJhc2VDcmVkZW50aWFscy5zZWNyZXRdLFxuICAgICAgICBzZWN1cml0eUdyb3VwczogW3RoaXMuZGF0YWJhc2VQcm94eVNlY3VyaXR5R3JvdXBdLFxuICAgICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgICB2cGNTdWJuZXRzLFxuICAgICAgICByZXF1aXJlVExTOiBwcm94eUNvbmZpZy5yZXF1aXJlVExTID8/IHRydWUsXG4gICAgICAgIGJvcnJvd1RpbWVvdXQ6IHByb3h5Q29uZmlnLmNvbm5lY3Rpb25Cb3Jyb3dUaW1lb3V0XG4gICAgICAgICAgPyBEdXJhdGlvbi5zZWNvbmRzKHByb3h5Q29uZmlnLmNvbm5lY3Rpb25Cb3Jyb3dUaW1lb3V0KVxuICAgICAgICAgIDogRHVyYXRpb24uc2Vjb25kcygxMjApLFxuICAgICAgICBtYXhDb25uZWN0aW9uc1BlcmNlbnQ6IHByb3h5Q29uZmlnLm1heENvbm5lY3Rpb25zLFxuICAgICAgICBtYXhJZGxlQ29ubmVjdGlvbnNQZXJjZW50OiBwcm94eUNvbmZpZy5tYXhJZGxlQ29ubmVjdGlvbnNcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3Qgb3V0cHV0TmFtZSA9IHRvUGFzY2FsQ2FzZShwcm9wcy5kYXRhYmFzZU5hbWUgfHwgdGhpcy5jb25zdHJ1Y3RJZCk7XG4gICAgbmV3IENmbk91dHB1dCh0aGlzLCBgJHtvdXRwdXROYW1lfVByb3h5RW5kcG9pbnRPdXRwdXRgLCB7XG4gICAgICBrZXk6IGAke291dHB1dE5hbWV9UHJveHlFbmRwb2ludGAsXG4gICAgICBleHBvcnROYW1lOiBgJHtvdXRwdXROYW1lfVByb3h5RW5kcG9pbnRgLFxuICAgICAgdmFsdWU6IHRoaXMuZGF0YWJhc2VQcm94eS5lbmRwb2ludFxuICAgIH0pO1xuICB9XG5cbiAgYWRkUmVhZFJlcGxpY2EocHJvcHM6IFJkc1Byb3BzKSB7XG4gICAgaWYgKCFwcm9wcy5yZWFkUmVwbGljYSkgcmV0dXJuO1xuICAgIGNvbnN0IHJlcGxpY2FDb25maWcgPSBwcm9wcy5yZWFkUmVwbGljYTtcbiAgICBjb25zdCByZXBsaWNhSW5zdGFuY2VUeXBlID1cbiAgICAgIHJlcGxpY2FDb25maWcuaW5zdGFuY2VUeXBlID8/IHByb3BzLmluc3RhbmNlVHlwZSA/PyBcInQ0Zy5sYXJnZVwiO1xuXG4gICAgY29uc3QgcGlFbmFibGVkID0gcHJvcHMucGVyZm9ybWFuY2VJbnNpZ2h0cyAhPT0gZmFsc2U7XG4gICAgY29uc3QgcGlDb25maWcgPVxuICAgICAgcGlFbmFibGVkICYmIHR5cGVvZiBwcm9wcy5wZXJmb3JtYW5jZUluc2lnaHRzID09PSBcIm9iamVjdFwiXG4gICAgICAgID8gcHJvcHMucGVyZm9ybWFuY2VJbnNpZ2h0c1xuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHJlYWRSZXBsaWNhUGVyZm9ybWFuY2VJbnNpZ2h0c0tleSA9XG4gICAgICBwaUVuYWJsZWQgJiYgaXNDTUtSZXF1ZXN0ZWQocGlDb25maWc/LmVuY3J5cHRpb25LZXkpXG4gICAgICAgID8gbmV3IEN1c3RvbWVyTWFuYWdlZEtleShcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UmVhZFJlcGxpY2FSZWFkZXJJbnNpZ2h0c0tleWAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFsaWFzTmFtZTogYGNtay9yZHMvJHtwcm9wcy5kYXRhYmFzZU5hbWV9L1JlYWRSZXBsaWNhSW5zaWdodHNLZXlgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKS5rZXlcbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICB0aGlzLnJlYWRSZXBsaWNhU2VjdXJpdHlHcm91cCA9IG5ldyBTZWN1cml0eUdyb3VwKFxuICAgICAgdGhpcyxcbiAgICAgIGAke3Byb3BzLmRhdGFiYXNlTmFtZX1SZWFkUmVwbGljYVNlY3VyaXR5R3JvdXBgLFxuICAgICAge1xuICAgICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFNlY3VyaXR5IGdyb3VwIGZvciBSRFMgcmVhZCByZXBsaWNhIG9mICR7cHJvcHMuZGF0YWJhc2VOYW1lfWBcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gQWxsb3cgcHJpbWFyeSBkYXRhYmFzZSB0byByZXBsaWNhdGUgdG8gcmVhZCByZXBsaWNhXG4gICAgdGhpcy5yZWFkUmVwbGljYVNlY3VyaXR5R3JvdXAuYWRkSW5ncmVzc1J1bGUoXG4gICAgICB0aGlzLmRhdGFiYXNlU2VjdXJpdHlHcm91cCxcbiAgICAgIFBvcnQudGNwKHRoaXMucG9ydCksXG4gICAgICBcIkFsbG93IHByaW1hcnkgZGF0YWJhc2UgdG8gcmVwbGljYXRlIHRvIHJlYWQgcmVwbGljYVwiXG4gICAgKTtcblxuICAgIC8vIERlbGV0aW9uIHdhaXRlciBlbnN1cmVzIHByaW1hcnkgaXMgXCJhdmFpbGFibGVcIiBiZWZvcmUgQ2xvdWRGb3JtYXRpb24gZGVsZXRlcyBpdC5cbiAgICAvLyBXaGVuIHRoZSByZWFkIHJlcGxpY2EgaXMgZGVsZXRlZCwgdGhlIHByaW1hcnkgZW50ZXJzIFwibW9kaWZ5aW5nXCIgc3RhdGUuXG4gICAgLy8gV2l0aG91dCB0aGlzIHdhaXRlciwgdGhlIGZpbmFsIHNuYXBzaG90IGNyZWF0aW9uIGZhaWxzLlxuICAgIC8vIFRPRE86IHJldmVydCB0byB0aGlzLmNvbnN0cnVjdElkIGFmdGVyIHdlYmFwcCByZWRlcGxveSAodGVtcCBmaXggdG8gcHJlc2VydmUgZXhpc3RpbmcgaW5zdGFuY2UgaWRlbnRpZmllcnMpXG4gICAgY29uc3QgaW5zdGFuY2VJZCA9IFJlc291cmNlTmFtaW5nLmRiSW5zdGFuY2VJZChwcm9wcy5kYXRhYmFzZU5hbWUhKTtcbiAgICBjb25zdCB3YWl0ZXJUaW1lb3V0ID0gRHVyYXRpb24ubWludXRlcygxMCk7XG4gICAgY29uc3QgZGVsZXRpb25XYWl0ZXIgPSBuZXcgQ3VzdG9tUmVzb3VyY2UoXG4gICAgICB0aGlzLFxuICAgICAgYCR7cHJvcHMuZGF0YWJhc2VOYW1lfURlbGV0aW9uV2FpdGVyYCxcbiAgICAgIHtcbiAgICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjJfWCxcbiAgICAgICAgdGltZW91dDogd2FpdGVyVGltZW91dC5wbHVzKER1cmF0aW9uLnNlY29uZHMoMzApKSxcbiAgICAgICAgbGFtYmRhRGVzY3JpcHRpb246IGAke3Byb3BzLmRhdGFiYXNlTmFtZX0gZGVsZXRpb24gd2FpdGVyYCxcbiAgICAgICAgaW5saW5lQ29kZTogYFxuY29uc3QgeyBSRFNDbGllbnQgfSA9IHJlcXVpcmUoJ0Bhd3Mtc2RrL2NsaWVudC1yZHMnKTtcbmNvbnN0IHsgd2FpdFVudGlsREJJbnN0YW5jZUF2YWlsYWJsZSB9ID0gcmVxdWlyZSgnQGF3cy1zZGsvY2xpZW50LXJkcycpO1xuXG5leHBvcnRzLmhhbmRsZXIgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgY29uc29sZS5sb2coJ0V2ZW50OicsIEpTT04uc3RyaW5naWZ5KGV2ZW50LCBudWxsLCAyKSk7XG4gIGNvbnN0IGluc3RhbmNlSWQgPSBldmVudC5SZXNvdXJjZVByb3BlcnRpZXMuSW5zdGFuY2VJZGVudGlmaWVyO1xuICBjb25zdCBwaHlzaWNhbFJlc291cmNlSWQgPSBldmVudC5QaHlzaWNhbFJlc291cmNlSWQgfHwgZXZlbnQuTG9naWNhbFJlc291cmNlSWQgfHwgJ3Jkcy1kZWxldGlvbi13YWl0ZXInO1xuXG4gIGlmIChldmVudC5SZXF1ZXN0VHlwZSA9PT0gJ0RlbGV0ZScpIHtcbiAgICBjb25zb2xlLmxvZygnV2FpdGluZyBmb3IgaW5zdGFuY2UgdG8gYmUgYXZhaWxhYmxlOicsIGluc3RhbmNlSWQpO1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBSRFNDbGllbnQoe30pO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB3YWl0VW50aWxEQkluc3RhbmNlQXZhaWxhYmxlKFxuICAgICAgICB7IGNsaWVudCwgbWF4V2FpdFRpbWU6ICR7d2FpdGVyVGltZW91dC50b1NlY29uZHMoKX0sIG1pbkRlbGF5OiAxMCwgbWF4RGVsYXk6IDMwIH0sXG4gICAgICAgIHsgREJJbnN0YW5jZUlkZW50aWZpZXI6IGluc3RhbmNlSWQgfVxuICAgICAgKTtcbiAgICAgIGNvbnNvbGUubG9nKCdJbnN0YW5jZSBpcyBhdmFpbGFibGUsIGRlbGV0aW9uIGNhbiBwcm9jZWVkJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5uYW1lID09PSAnUmVzb3VyY2VOb3RGb3VuZEVycm9yJyB8fFxuICAgICAgICAgIGVycm9yLm1lc3NhZ2U/LmluY2x1ZGVzKCdEQkluc3RhbmNlTm90Rm91bmQnKSB8fFxuICAgICAgICAgIGVycm9yLnN0YXRlID09PSAnRkFJTFVSRScpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0luc3RhbmNlIG5vdCBmb3VuZCBvciB3YWl0ZXIgZmFpbGVkLCBwcm9jZWVkaW5nIHdpdGggZGVsZXRpb24nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdhaXRpbmcgZm9yIGluc3RhbmNlOicsIGVycm9yKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB7IFBoeXNpY2FsUmVzb3VyY2VJZDogcGh5c2ljYWxSZXNvdXJjZUlkIH07XG59O1xuICAgICAgICBgLFxuICAgICAgICBpbmxpbmVQb2xpY3k6IFtcbiAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgICAgYWN0aW9uczogW1wicmRzOkRlc2NyaWJlREJJbnN0YW5jZXNcIl0sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgICAgICB9KVxuICAgICAgICBdLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgSW5zdGFuY2VJZGVudGlmaWVyOiBpbnN0YW5jZUlkLFxuICAgICAgICAgIFZlcnNpb246IFwiMS4wLjBcIlxuICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcblxuICAgIGRlbGV0aW9uV2FpdGVyLnJlc291cmNlLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLmRhdGFiYXNlKTtcblxuICAgIGNvbnN0IHJlYWRSZXBsaWNhID0gbmV3IERhdGFiYXNlSW5zdGFuY2VSZWFkUmVwbGljYShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtwcm9wcy5kYXRhYmFzZU5hbWV9UmVhZFJlcGxpY2FgLFxuICAgICAge1xuICAgICAgICBzb3VyY2VEYXRhYmFzZUluc3RhbmNlOiB0aGlzLmRhdGFiYXNlLFxuICAgICAgICB2cGM6IHRoaXMudnBjLFxuICAgICAgICB2cGNTdWJuZXRzOiB7XG4gICAgICAgICAgc3VibmV0VHlwZTogU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTXG4gICAgICAgIH0sXG4gICAgICAgIHNlY3VyaXR5R3JvdXBzOiBbdGhpcy5yZWFkUmVwbGljYVNlY3VyaXR5R3JvdXBdLFxuICAgICAgICBhbGxvY2F0ZWRTdG9yYWdlOiBwcm9wcy5hbGxvY2F0ZWRTdG9yYWdlLFxuICAgICAgICBzdG9yYWdlRW5jcnlwdGVkOiB0cnVlLFxuICAgICAgICBzdG9yYWdlVHlwZTogU3RvcmFnZVR5cGUuR1AzLFxuICAgICAgICBjYUNlcnRpZmljYXRlOiBDYUNlcnRpZmljYXRlLlJEU19DQV9SU0E0MDk2X0cxLFxuICAgICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgICAgIGRlbGV0ZUF1dG9tYXRlZEJhY2t1cHM6IGZhbHNlLFxuICAgICAgICBlbmFibGVQZXJmb3JtYW5jZUluc2lnaHRzOiBwaUVuYWJsZWQsXG4gICAgICAgIHBlcmZvcm1hbmNlSW5zaWdodEVuY3J5cHRpb25LZXk6IHJlYWRSZXBsaWNhUGVyZm9ybWFuY2VJbnNpZ2h0c0tleSxcbiAgICAgICAgcGVyZm9ybWFuY2VJbnNpZ2h0UmV0ZW50aW9uOiBwaUVuYWJsZWRcbiAgICAgICAgICA/IHRoaXMuZ2V0UGVyZm9ybWFuY2VJbnNpZ2h0UmV0ZW50aW9uKHBpQ29uZmlnPy5yZXRlbnRpb25QZXJpb2QgPz8gNylcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgLy8gVE9ETzogcmV2ZXJ0IHRvIHRoaXMuY29uc3RydWN0SWQgYWZ0ZXIgd2ViYXBwIHJlZGVwbG95ICh0ZW1wIGZpeCB0byBwcmVzZXJ2ZSBleGlzdGluZyBpbnN0YW5jZSBpZGVudGlmaWVycylcbiAgICAgICAgaW5zdGFuY2VJZGVudGlmaWVyOiBSZXNvdXJjZU5hbWluZy5yZWFkUmVwbGljYUlkKHByb3BzLmRhdGFiYXNlTmFtZSEpLFxuICAgICAgICBpbnN0YW5jZVR5cGU6IG5ldyBJbnN0YW5jZVR5cGUocmVwbGljYUluc3RhbmNlVHlwZSksXG4gICAgICAgIGF2YWlsYWJpbGl0eVpvbmU6IHJlcGxpY2FDb25maWcuYXZhaWxhYmlsaXR5Wm9uZSxcbiAgICAgICAgbWF4QWxsb2NhdGVkU3RvcmFnZTogcHJvcHMubWF4QWxsb2NhdGVkU3RvcmFnZSB8fCA1MDAsXG4gICAgICAgIG1vbml0b3JpbmdJbnRlcnZhbDogcHJvcHMubW9uaXRvcmluZ0ludGVydmFsIHx8IER1cmF0aW9uLm1pbnV0ZXMoMSksXG4gICAgICAgIG11bHRpQXo6IHByb3BzLm11bHRpQXogIT09IGZhbHNlLFxuICAgICAgICBwb3J0OiB0aGlzLnBvcnQsXG4gICAgICAgIGRlbGV0aW9uUHJvdGVjdGlvbjogcHJvcHMuZGVsZXRpb25Qcm90ZWN0aW9uID8/IHRydWUsXG4gICAgICAgIHByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93OlxuICAgICAgICAgIHByb3BzLnByZWZlcnJlZE1haW50ZW5hbmNlV2luZG93IHx8IFwiU2F0OjEyOjMwLVNhdDoyMDozMFwiXG4gICAgICB9XG4gICAgKTtcblxuICAgIHJlYWRSZXBsaWNhLm5vZGUuYWRkRGVwZW5kZW5jeShkZWxldGlvbldhaXRlci5yZXNvdXJjZSk7XG4gIH1cblxuICBwcml2YXRlIGdldFBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvbihcbiAgICBkYXlzPzogbnVtYmVyXG4gICk6IFBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvbiB7XG4gICAgc3dpdGNoIChkYXlzKSB7XG4gICAgICBjYXNlIDc6XG4gICAgICAgIHJldHVybiBQZXJmb3JtYW5jZUluc2lnaHRSZXRlbnRpb24uREVGQVVMVDtcbiAgICAgIGNhc2UgMzE6XG4gICAgICAgIHJldHVybiBQZXJmb3JtYW5jZUluc2lnaHRSZXRlbnRpb24uTU9OVEhTXzE7XG4gICAgICBjYXNlIDkzOlxuICAgICAgICByZXR1cm4gUGVyZm9ybWFuY2VJbnNpZ2h0UmV0ZW50aW9uLk1PTlRIU18zO1xuICAgICAgY2FzZSAxODY6XG4gICAgICAgIHJldHVybiBQZXJmb3JtYW5jZUluc2lnaHRSZXRlbnRpb24uTU9OVEhTXzY7XG4gICAgICBjYXNlIDM3MjpcbiAgICAgICAgcmV0dXJuIFBlcmZvcm1hbmNlSW5zaWdodFJldGVudGlvbi5NT05USFNfMTI7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gUGVyZm9ybWFuY2VJbnNpZ2h0UmV0ZW50aW9uLk1PTlRIU18xO1xuICAgIH1cbiAgfVxuXG4gIGdldEhvc3RFbmRwb2ludCgpIHtcbiAgICBpZiAodGhpcy5kYXRhYmFzZVByb3h5KSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhYmFzZVByb3h5LmVuZHBvaW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhYmFzZS5kYkluc3RhbmNlRW5kcG9pbnRBZGRyZXNzO1xuICAgIH1cbiAgfVxuXG4gIGdldEhvc3RQb3J0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFN0cmluZyh0aGlzLnBvcnQpO1xuICB9XG5cbiAgZ2V0Q3JlZGVudGlhbHMoKTogU2VjcmV0IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhYmFzZUNyZWRlbnRpYWxzO1xuICB9XG5cbiAgc3RhdGljIGJ1aWxkKGlkOiBzdHJpbmcsIHByb3BzOiBSZHNQcm9wcyk6IChzYjogU3RhY2tCdWlsZGVyKSA9PiBDb25zdHJ1Y3Qge1xuICAgIHJldHVybiAoc2I6IFN0YWNrQnVpbGRlcikgPT4ge1xuICAgICAgY29uc3QgbmV3UHJvcHM6IFJkc1Byb3BzID0ge1xuICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgLi4ue1xuICAgICAgICAgIHZwYzogKHNiLmdldE5ldHdvcmsoKSBhcyBJVnBjKSB8fCBwcm9wcy52cGMsXG4gICAgICAgICAgc2VjdXJpdHlHcm91cElkczogcHJvcHM/LnNlY3VyaXR5R3JvdXBJZHMgPz8gW10sXG4gICAgICAgICAgZGF0YWJhc2VOYW1lOiBwcm9wcy5kYXRhYmFzZU5hbWUgfHwgYCR7aWQucmVwbGFjZShcIlJkc1wiLCBcIlwiKX1gXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBuZXcgdGhpcyhzYi5nZXRTdGFjaygpLCBpZCwgbmV3UHJvcHMpO1xuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Construct } from "constructs";
|
|
2
|
-
import { type Role } from "..";
|
|
3
2
|
export declare class Assignment extends Construct {
|
|
4
3
|
constructor(scope: Construct, id: string, props: {
|
|
5
4
|
instanceArn: string;
|
|
@@ -8,6 +7,5 @@ export declare class Assignment extends Construct {
|
|
|
8
7
|
principalId: string;
|
|
9
8
|
targetType: string;
|
|
10
9
|
targetId: string;
|
|
11
|
-
role: Role;
|
|
12
10
|
});
|
|
13
11
|
}
|
|
@@ -2,56 +2,19 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Assignment = void 0;
|
|
4
4
|
const constructs_1 = require("constructs");
|
|
5
|
-
const
|
|
6
|
-
const awsCustomResource_1 = require("../../utilities/awsCustomResource");
|
|
5
|
+
const aws_sso_1 = require("aws-cdk-lib/aws-sso");
|
|
7
6
|
class Assignment extends constructs_1.Construct {
|
|
8
7
|
constructor(scope, id, props) {
|
|
9
8
|
super(scope, id);
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
InstanceArn: props.instanceArn,
|
|
18
|
-
TargetId: props.targetId,
|
|
19
|
-
TargetType: props.targetType,
|
|
20
|
-
PermissionSetArn: props.permissionSetArn,
|
|
21
|
-
PrincipalType: props.principalType,
|
|
22
|
-
PrincipalId: props.principalId
|
|
23
|
-
},
|
|
24
|
-
physicalResourceId: customResources.PhysicalResourceId.of(physicalId)
|
|
25
|
-
},
|
|
26
|
-
onDelete: {
|
|
27
|
-
service: "sso-admin",
|
|
28
|
-
action: "DeleteAccountAssignment", // https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sso-admin/command/DeleteAccountAssignmentCommand
|
|
29
|
-
parameters: {
|
|
30
|
-
InstanceArn: props.instanceArn,
|
|
31
|
-
TargetId: props.targetId,
|
|
32
|
-
TargetType: props.targetType,
|
|
33
|
-
PermissionSetArn: props.permissionSetArn,
|
|
34
|
-
PrincipalType: props.principalType,
|
|
35
|
-
PrincipalId: props.principalId
|
|
36
|
-
}
|
|
37
|
-
},
|
|
38
|
-
policy: customResources.AwsCustomResourcePolicy.fromSdkCalls({
|
|
39
|
-
resources: ["*"]
|
|
40
|
-
}),
|
|
41
|
-
// TODO: Lock down permissions, when we're ready to troubleshoot intermittent policy errors
|
|
42
|
-
// role: props.role,
|
|
43
|
-
// policy: customResources.AwsCustomResourcePolicy.fromStatements([
|
|
44
|
-
// new PolicyStatement({
|
|
45
|
-
// actions: [
|
|
46
|
-
// "sso:CreateAccountAssignment",
|
|
47
|
-
// "sso:DeleteAccountAssignment"
|
|
48
|
-
// ],
|
|
49
|
-
// resources: ["*"]
|
|
50
|
-
// })
|
|
51
|
-
// ]),
|
|
52
|
-
resourceType: "Custom::SSOAccountAssignment"
|
|
9
|
+
new aws_sso_1.CfnAssignment(this, "Assignment", {
|
|
10
|
+
instanceArn: props.instanceArn,
|
|
11
|
+
targetId: props.targetId,
|
|
12
|
+
targetType: props.targetType,
|
|
13
|
+
permissionSetArn: props.permissionSetArn,
|
|
14
|
+
principalType: props.principalType,
|
|
15
|
+
principalId: props.principalId
|
|
53
16
|
});
|
|
54
17
|
}
|
|
55
18
|
}
|
|
56
19
|
exports.Assignment = Assignment;
|
|
57
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzaWdubWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL2lhbS9pZGVudGl0eUNlbnRlci9hc3NpZ25tZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2QyxpREFBb0Q7QUFFcEQsTUFBYSxVQUFXLFNBQVEsc0JBQVM7SUFDdkMsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FPQztRQUVELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSx1QkFBYSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7WUFDcEMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7WUFDNUIsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtZQUN4QyxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWE7WUFDbEMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1NBQy9CLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXhCRCxnQ0F3QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgQ2ZuQXNzaWdubWVudCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3NvXCI7XG5cbmV4cG9ydCBjbGFzcyBBc3NpZ25tZW50IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiB7XG4gICAgICBpbnN0YW5jZUFybjogc3RyaW5nO1xuICAgICAgcGVybWlzc2lvblNldEFybjogc3RyaW5nO1xuICAgICAgcHJpbmNpcGFsVHlwZTogc3RyaW5nO1xuICAgICAgcHJpbmNpcGFsSWQ6IHN0cmluZztcbiAgICAgIHRhcmdldFR5cGU6IHN0cmluZztcbiAgICAgIHRhcmdldElkOiBzdHJpbmc7XG4gICAgfVxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgbmV3IENmbkFzc2lnbm1lbnQodGhpcywgXCJBc3NpZ25tZW50XCIsIHtcbiAgICAgIGluc3RhbmNlQXJuOiBwcm9wcy5pbnN0YW5jZUFybixcbiAgICAgIHRhcmdldElkOiBwcm9wcy50YXJnZXRJZCxcbiAgICAgIHRhcmdldFR5cGU6IHByb3BzLnRhcmdldFR5cGUsXG4gICAgICBwZXJtaXNzaW9uU2V0QXJuOiBwcm9wcy5wZXJtaXNzaW9uU2V0QXJuLFxuICAgICAgcHJpbmNpcGFsVHlwZTogcHJvcHMucHJpbmNpcGFsVHlwZSxcbiAgICAgIHByaW5jaXBhbElkOiBwcm9wcy5wcmluY2lwYWxJZFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -8,7 +8,6 @@ class AttachManagedPolicy extends constructs_1.Construct {
|
|
|
8
8
|
constructor(scope, id, props) {
|
|
9
9
|
super(scope, id);
|
|
10
10
|
new awsCustomResource_1.AwsCustomResource(this, "attachManagedPolicy", {
|
|
11
|
-
functionName: `attachPolicyToPermissionSet${props.permissionSet}`,
|
|
12
11
|
onCreate: {
|
|
13
12
|
service: "sso-admin",
|
|
14
13
|
action: "AttachManagedPolicyToPermissionSet", // https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/sso-admin/command/AttachManagedPolicyToPermissionSetCommand
|
|
@@ -49,4 +48,4 @@ class AttachManagedPolicy extends constructs_1.Construct {
|
|
|
49
48
|
}
|
|
50
49
|
}
|
|
51
50
|
exports.AttachManagedPolicy = AttachManagedPolicy;
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoTWFuYWdlZFBvbGljeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYi9yZXNvdXJjZXMvYXdzL2lhbS9pZGVudGl0eUNlbnRlci9hdHRhY2hNYW5hZ2VkUG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2QyxnRUFBZ0U7QUFDaEUseUVBQXNFO0FBV3RFLE1BQWEsbUJBQW9CLFNBQVEsc0JBQVM7SUFDaEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUErQjtRQUN2RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQUkscUNBQWlCLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFO1lBQ2pELFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsV0FBVztnQkFDcEIsTUFBTSxFQUFFLG9DQUFvQyxFQUFFLDRIQUE0SDtnQkFDMUssVUFBVSxFQUFFO29CQUNWLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztvQkFDOUIsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtvQkFDeEMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtpQkFDekM7Z0JBQ0Qsa0JBQWtCLEVBQUUsZUFBZSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FDdkQscUNBQXFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FDM0Q7YUFDRjtZQUNELFFBQVEsRUFBRTtnQkFDUixPQUFPLEVBQUUsV0FBVztnQkFDcEIsTUFBTSxFQUFFLHNDQUFzQyxFQUFFLCtIQUErSDtnQkFDL0ssVUFBVSxFQUFFO29CQUNWLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztvQkFDOUIsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtvQkFDeEMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtpQkFDekM7YUFDRjtZQUNELE1BQU0sRUFBRSxlQUFlLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDO2dCQUMzRCxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7YUFDakIsQ0FBQztZQUNGLDJGQUEyRjtZQUMzRixvQkFBb0I7WUFDcEIsbUVBQW1FO1lBQ25FLDBCQUEwQjtZQUMxQixpQkFBaUI7WUFDakIsc0NBQXNDO1lBQ3RDLGtEQUFrRDtZQUNsRCxvREFBb0Q7WUFDcEQsMEJBQTBCO1lBQzFCLFNBQVM7WUFDVCx1QkFBdUI7WUFDdkIsT0FBTztZQUNQLE1BQU07WUFDTixZQUFZLEVBQUUsdUJBQXVCO1NBQ3RDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQTdDRCxrREE2Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0ICogYXMgY3VzdG9tUmVzb3VyY2VzIGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBBd3NDdXN0b21SZXNvdXJjZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXdzQ3VzdG9tUmVzb3VyY2VcIjtcbmltcG9ydCB7IHR5cGUgUm9sZSB9IGZyb20gXCIuLlwiO1xuXG5pbnRlcmZhY2UgQXR0YWNoTWFuYWdlZFBvbGljeVByb3BzIHtcbiAgaW5zdGFuY2VBcm46IHN0cmluZztcbiAgcGVybWlzc2lvblNldDogc3RyaW5nO1xuICBwZXJtaXNzaW9uU2V0QXJuOiBzdHJpbmc7XG4gIG1hbmFnZWRQb2xpY3lBcm46IHN0cmluZztcbiAgcm9sZTogUm9sZTtcbn1cblxuZXhwb3J0IGNsYXNzIEF0dGFjaE1hbmFnZWRQb2xpY3kgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQXR0YWNoTWFuYWdlZFBvbGljeVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIG5ldyBBd3NDdXN0b21SZXNvdXJjZSh0aGlzLCBcImF0dGFjaE1hbmFnZWRQb2xpY3lcIiwge1xuICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJzc28tYWRtaW5cIixcbiAgICAgICAgYWN0aW9uOiBcIkF0dGFjaE1hbmFnZWRQb2xpY3lUb1Blcm1pc3Npb25TZXRcIiwgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvdjMvbGF0ZXN0L2NsaWVudC9zc28tYWRtaW4vY29tbWFuZC9BdHRhY2hNYW5hZ2VkUG9saWN5VG9QZXJtaXNzaW9uU2V0Q29tbWFuZFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgSW5zdGFuY2VBcm46IHByb3BzLmluc3RhbmNlQXJuLFxuICAgICAgICAgIFBlcm1pc3Npb25TZXRBcm46IHByb3BzLnBlcm1pc3Npb25TZXRBcm4sXG4gICAgICAgICAgTWFuYWdlZFBvbGljeUFybjogcHJvcHMubWFuYWdlZFBvbGljeUFyblxuICAgICAgICB9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IGN1c3RvbVJlc291cmNlcy5QaHlzaWNhbFJlc291cmNlSWQub2YoXG4gICAgICAgICAgYGF0dGFjaE1hbmFnZWRQb2xpY3lUb1Blcm1pc3Npb25TZXQke3Byb3BzLnBlcm1pc3Npb25TZXR9YFxuICAgICAgICApXG4gICAgICB9LFxuICAgICAgb25EZWxldGU6IHtcbiAgICAgICAgc2VydmljZTogXCJzc28tYWRtaW5cIixcbiAgICAgICAgYWN0aW9uOiBcIkRldGFjaE1hbmFnZWRQb2xpY3lGcm9tUGVybWlzc2lvblNldFwiLCAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy92My9sYXRlc3QvY2xpZW50L3Nzby1hZG1pbi9jb21tYW5kL0RldGFjaE1hbmFnZWRQb2xpY3lGcm9tUGVybWlzc2lvblNldENvbW1hbmQvXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBJbnN0YW5jZUFybjogcHJvcHMuaW5zdGFuY2VBcm4sXG4gICAgICAgICAgUGVybWlzc2lvblNldEFybjogcHJvcHMucGVybWlzc2lvblNldEFybixcbiAgICAgICAgICBNYW5hZ2VkUG9saWN5QXJuOiBwcm9wcy5tYW5hZ2VkUG9saWN5QXJuXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBwb2xpY3k6IGN1c3RvbVJlc291cmNlcy5Bd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU2RrQ2FsbHMoe1xuICAgICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgIH0pLFxuICAgICAgLy8gVE9ETzogTG9jayBkb3duIHBlcm1pc3Npb25zLCB3aGVuIHdlJ3JlIHJlYWR5IHRvIHRyb3VibGVzaG9vdCBpbnRlcm1pdHRlbnQgcG9saWN5IGVycm9yc1xuICAgICAgLy8gcm9sZTogcHJvcHMucm9sZSxcbiAgICAgIC8vIHBvbGljeTogY3VzdG9tUmVzb3VyY2VzLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LmZyb21TdGF0ZW1lbnRzKFtcbiAgICAgIC8vICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAvLyAgICAgYWN0aW9uczogW1xuICAgICAgLy8gICAgICAgXCJzc286UHJvdmlzaW9uUGVybWlzc2lvblNldFwiLFxuICAgICAgLy8gICAgICAgXCJzc286QXR0YWNoTWFuYWdlZFBvbGljeVRvUGVybWlzc2lvblNldFwiLFxuICAgICAgLy8gICAgICAgXCJzc286RGV0YWNoTWFuYWdlZFBvbGljeUZyb21QZXJtaXNzaW9uU2V0XCIsXG4gICAgICAvLyAgICAgICBcInNzbzpUYWdSZXNvdXJjZVwiXG4gICAgICAvLyAgICAgXSxcbiAgICAgIC8vICAgICByZXNvdXJjZXM6IFtcIipcIl1cbiAgICAgIC8vICAgfSlcbiAgICAgIC8vIF0pLFxuICAgICAgcmVzb3VyY2VUeXBlOiBcIkN1c3RvbTo6UGVybWlzc2lvblNldFwiXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { Construct } from "constructs";
|
|
2
|
-
import { type Role } from "..";
|
|
3
2
|
interface GroupProps {
|
|
4
3
|
displayName: string;
|
|
5
4
|
identityStoreId: string;
|
|
6
5
|
description?: string;
|
|
7
|
-
role: Role;
|
|
8
6
|
}
|
|
9
7
|
export declare class Group extends Construct {
|
|
10
|
-
private
|
|
8
|
+
private cfnGroup;
|
|
11
9
|
constructor(scope: Construct, id: string, props: GroupProps);
|
|
12
10
|
getGroupId(): string;
|
|
13
11
|
}
|
|
@@ -2,97 +2,19 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Group = void 0;
|
|
4
4
|
const constructs_1 = require("constructs");
|
|
5
|
-
const
|
|
6
|
-
const awsCustomResource_1 = require("../../utilities/awsCustomResource");
|
|
5
|
+
const aws_identitystore_1 = require("aws-cdk-lib/aws-identitystore");
|
|
7
6
|
class Group extends constructs_1.Construct {
|
|
8
7
|
constructor(scope, id, props) {
|
|
9
8
|
super(scope, id);
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
onCreate: {
|
|
15
|
-
service: "identitystore",
|
|
16
|
-
action: "CreateGroup", // https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/identitystore/command/CreateGroupCommand
|
|
17
|
-
parameters: {
|
|
18
|
-
DisplayName: props.displayName,
|
|
19
|
-
IdentityStoreId: props.identityStoreId,
|
|
20
|
-
Description: props.description
|
|
21
|
-
},
|
|
22
|
-
physicalResourceId: customResources.PhysicalResourceId.of(physicalId)
|
|
23
|
-
},
|
|
24
|
-
role: props.role
|
|
25
|
-
// TODO: Lock down permissions, when we're ready to troubleshoot intermittent policy errors
|
|
26
|
-
// policy: customResources.AwsCustomResourcePolicy.fromStatements([
|
|
27
|
-
// new PolicyStatement({
|
|
28
|
-
// actions: ["identitystore:CreateGroup"],
|
|
29
|
-
// resources: ["*"]
|
|
30
|
-
// })
|
|
31
|
-
// ])
|
|
32
|
-
});
|
|
33
|
-
this.groupId = createGroup.getResponseField("GroupId");
|
|
34
|
-
// Update Group
|
|
35
|
-
const updateGroup = new awsCustomResource_1.AwsCustomResource(this, "updateIdentityStoreGroup", {
|
|
36
|
-
functionName: `updateIdentityStoreGroup${props.displayName}`,
|
|
37
|
-
onUpdate: {
|
|
38
|
-
service: "identitystore",
|
|
39
|
-
action: "UpdateGroup", // https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/identitystore/command/UpdateGroupCommand
|
|
40
|
-
parameters: {
|
|
41
|
-
GroupId: this.groupId,
|
|
42
|
-
IdentityStoreId: props.identityStoreId,
|
|
43
|
-
// TODO: Suppport taking in any changes and updating them
|
|
44
|
-
Operations: [
|
|
45
|
-
{
|
|
46
|
-
AttributePath: "DisplayName",
|
|
47
|
-
AttributeValue: props.displayName
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
AttributePath: "Description",
|
|
51
|
-
AttributeValue: props.description
|
|
52
|
-
}
|
|
53
|
-
]
|
|
54
|
-
},
|
|
55
|
-
physicalResourceId: customResources.PhysicalResourceId.of(physicalId)
|
|
56
|
-
},
|
|
57
|
-
role: props.role,
|
|
58
|
-
// TODO: Lock down permissions, when we're ready to troubleshoot intermittent policy errors
|
|
59
|
-
// policy: customResources.AwsCustomResourcePolicy.fromStatements([
|
|
60
|
-
// new PolicyStatement({
|
|
61
|
-
// actions: ["identitystore:UpdateGroup"],
|
|
62
|
-
// resources: ["*"]
|
|
63
|
-
// })
|
|
64
|
-
// ]),
|
|
65
|
-
resourceType: "Custom::Group"
|
|
66
|
-
});
|
|
67
|
-
// Delete Group
|
|
68
|
-
const deleteGroup = new awsCustomResource_1.AwsCustomResource(this, "deleteIdentityStoreGroup", {
|
|
69
|
-
functionName: `deleteIdentityStoreGroup${props.displayName}`,
|
|
70
|
-
onDelete: {
|
|
71
|
-
service: "identitystore",
|
|
72
|
-
action: "DeleteGroup", // https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/identitystore/command/DeleteGroupCommand
|
|
73
|
-
parameters: {
|
|
74
|
-
GroupId: this.groupId,
|
|
75
|
-
IdentityStoreId: props.identityStoreId
|
|
76
|
-
}
|
|
77
|
-
},
|
|
78
|
-
role: props.role,
|
|
79
|
-
// TODO: Lock down permissions, when we're ready to troubleshoot intermittent policy errors
|
|
80
|
-
// policy: customResources.AwsCustomResourcePolicy.fromStatements([
|
|
81
|
-
// new PolicyStatement({
|
|
82
|
-
// actions: ["identitystore:DeleteGroup"],
|
|
83
|
-
// resources: ["*"]
|
|
84
|
-
// })
|
|
85
|
-
// ]),
|
|
86
|
-
resourceType: "Custom::Group"
|
|
87
|
-
});
|
|
88
|
-
// Implement Dependable to make construct dependable
|
|
89
|
-
constructs_1.Dependable.implement(this, {
|
|
90
|
-
dependencyRoots: [createGroup, updateGroup, deleteGroup]
|
|
9
|
+
this.cfnGroup = new aws_identitystore_1.CfnGroup(this, "Group", {
|
|
10
|
+
displayName: props.displayName,
|
|
11
|
+
identityStoreId: props.identityStoreId,
|
|
12
|
+
description: props.description
|
|
91
13
|
});
|
|
92
14
|
}
|
|
93
15
|
getGroupId() {
|
|
94
|
-
return this.
|
|
16
|
+
return this.cfnGroup.attrGroupId;
|
|
95
17
|
}
|
|
96
18
|
}
|
|
97
19
|
exports.Group = Group;
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWIvcmVzb3VyY2VzL2F3cy9pYW0vaWRlbnRpdHlDZW50ZXIvZ3JvdXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQXVDO0FBQ3ZDLHFFQUF5RDtBQVF6RCxNQUFhLEtBQU0sU0FBUSxzQkFBUztJQUdsQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWlCO1FBQ3pELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLDRCQUFRLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRTtZQUMxQyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlO1lBQ3RDLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztTQUMvQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sVUFBVTtRQUNmLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7SUFDbkMsQ0FBQztDQUNGO0FBaEJELHNCQWdCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBDZm5Hcm91cCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWRlbnRpdHlzdG9yZVwiO1xuXG5pbnRlcmZhY2UgR3JvdXBQcm9wcyB7XG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XG4gIGlkZW50aXR5U3RvcmVJZDogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEdyb3VwIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHJpdmF0ZSBjZm5Hcm91cDogQ2ZuR3JvdXA7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEdyb3VwUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5jZm5Hcm91cCA9IG5ldyBDZm5Hcm91cCh0aGlzLCBcIkdyb3VwXCIsIHtcbiAgICAgIGRpc3BsYXlOYW1lOiBwcm9wcy5kaXNwbGF5TmFtZSxcbiAgICAgIGlkZW50aXR5U3RvcmVJZDogcHJvcHMuaWRlbnRpdHlTdG9yZUlkLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0R3JvdXBJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNmbkdyb3VwLmF0dHJHcm91cElkO1xuICB9XG59XG4iXX0=
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { Construct } from "constructs";
|
|
2
2
|
import { type KeyValue } from "../../../../types";
|
|
3
|
-
import { type Role } from "..";
|
|
4
3
|
export declare class PermissionSet extends Construct {
|
|
5
|
-
private
|
|
4
|
+
private cfnPermissionSet;
|
|
6
5
|
constructor(scope: Construct, id: string, props: {
|
|
7
6
|
name: string;
|
|
8
7
|
instanceArn: string;
|
|
9
8
|
description?: string;
|
|
10
|
-
role: Role;
|
|
11
9
|
managedPolicies?: string[];
|
|
12
10
|
tags?: KeyValue[];
|
|
13
11
|
});
|