cdk-nextjs 0.5.14 → 0.5.15
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/.jsii +40 -40
- package/docs/caching-guide.md +3 -0
- package/lib/adapter/cache-handler.mjs +50916 -13061
- package/lib/adapter/memory-cache-handler.d.ts +1 -1
- package/lib/adapter/memory-cache-handler.js +17 -11
- package/lib/adapter/memory-cache-handler.test.js +57 -1
- package/lib/adapter/s3-cache-handler.d.ts +33 -0
- package/lib/adapter/s3-cache-handler.js +96 -1
- package/lib/adapter/s3-cache-handler.test.js +66 -1
- package/lib/nextjs-api.js +1 -1
- package/lib/nextjs-build/nextjs-build.js +1 -1
- package/lib/nextjs-cache.js +1 -1
- package/lib/nextjs-compute/nextjs-containers.js +1 -1
- package/lib/nextjs-compute/nextjs-functions.js +1 -1
- package/lib/nextjs-distribution.js +1 -1
- package/lib/nextjs-post-deploy.js +1 -1
- package/lib/nextjs-static-assets.js +1 -1
- package/lib/root-constructs/nextjs-base-construct.js +1 -1
- package/lib/root-constructs/nextjs-global-containers.d.ts +15 -0
- package/lib/root-constructs/nextjs-global-containers.js +57 -2
- package/lib/root-constructs/nextjs-global-functions.d.ts +16 -0
- package/lib/root-constructs/nextjs-global-functions.js +56 -2
- package/lib/root-constructs/nextjs-regional-containers.js +1 -1
- package/lib/root-constructs/nextjs-regional-functions.js +1 -1
- package/package.json +2 -1
|
@@ -8,17 +8,26 @@ exports.S3CacheHandler = void 0;
|
|
|
8
8
|
S3 and DynamoDB cache handler for Next.js incremental cache
|
|
9
9
|
*/
|
|
10
10
|
/* eslint-disable import/no-extraneous-dependencies */
|
|
11
|
+
const node_crypto_1 = require("node:crypto");
|
|
11
12
|
const node_path_1 = require("node:path");
|
|
13
|
+
const client_cloudfront_1 = require("@aws-sdk/client-cloudfront");
|
|
12
14
|
const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
|
|
13
15
|
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
16
|
+
const client_ssm_1 = require("@aws-sdk/client-ssm");
|
|
14
17
|
const debug_1 = __importDefault(require("debug"));
|
|
15
18
|
const cache_utils_1 = require("./cache-utils");
|
|
16
19
|
class S3CacheHandler {
|
|
17
20
|
s3Client;
|
|
18
21
|
dynamoClient;
|
|
22
|
+
cloudFrontClient;
|
|
23
|
+
ssmClient;
|
|
19
24
|
s3Config;
|
|
20
25
|
dynamoConfig;
|
|
26
|
+
cloudFrontConfig;
|
|
21
27
|
debug = (0, debug_1.default)("cdk-nextjs:cache-handler:s3");
|
|
28
|
+
// Cached for the lifetime of this instance (i.e. the compute instance) once
|
|
29
|
+
// resolved, since a deployment's distribution ID never changes at runtime.
|
|
30
|
+
cachedDistributionId = null;
|
|
22
31
|
constructor(options) {
|
|
23
32
|
const buildId = process.env.CDK_NEXTJS_BUILD_ID || "";
|
|
24
33
|
// Initialize S3 configuration from environment variables and options
|
|
@@ -37,11 +46,28 @@ class S3CacheHandler {
|
|
|
37
46
|
region: options.dynamoConfig?.region || process.env.AWS_REGION || "us-east-1",
|
|
38
47
|
buildId: options.dynamoConfig?.buildId || buildId,
|
|
39
48
|
};
|
|
49
|
+
// Initialize CloudFront configuration from environment variables and options.
|
|
50
|
+
// Only set for CloudFront-fronted deployments (NextjsGlobalFunctions/Containers).
|
|
51
|
+
// When unset, on-demand revalidation skips CDN invalidation and relies on the
|
|
52
|
+
// distribution's cache policy TTL (driven by the origin's Cache-Control header)
|
|
53
|
+
// to eventually pick up fresh content.
|
|
54
|
+
this.cloudFrontConfig = {
|
|
55
|
+
distributionIdParameterName: options.cloudFrontConfig?.distributionIdParameterName ||
|
|
56
|
+
process.env.CDK_NEXTJS_DISTRIBUTION_ID_PARAM_NAME ||
|
|
57
|
+
"",
|
|
58
|
+
region: options.cloudFrontConfig?.region ||
|
|
59
|
+
process.env.AWS_REGION ||
|
|
60
|
+
"us-east-1",
|
|
61
|
+
};
|
|
40
62
|
// Initialize AWS clients
|
|
41
63
|
this.s3Client = new client_s3_1.S3Client({ region: this.s3Config.region });
|
|
42
64
|
this.dynamoClient = new client_dynamodb_1.DynamoDBClient({
|
|
43
65
|
region: this.dynamoConfig.region,
|
|
44
66
|
});
|
|
67
|
+
this.cloudFrontClient = new client_cloudfront_1.CloudFrontClient({
|
|
68
|
+
region: this.cloudFrontConfig.region,
|
|
69
|
+
});
|
|
70
|
+
this.ssmClient = new client_ssm_1.SSMClient({ region: this.cloudFrontConfig.region });
|
|
45
71
|
if (!this.s3Config.bucketName) {
|
|
46
72
|
console.warn("CDK_NEXTJS_CACHE_BUCKET_NAME environment variable not set, S3 cache disabled");
|
|
47
73
|
}
|
|
@@ -260,7 +286,76 @@ class S3CacheHandler {
|
|
|
260
286
|
});
|
|
261
287
|
await Promise.all(deletePromises.filter(Boolean));
|
|
262
288
|
}
|
|
289
|
+
// Invalidate the CDN edge cache so CloudFront-fronted deployments don't
|
|
290
|
+
// keep serving stale responses until the cache policy's TTL naturally expires.
|
|
291
|
+
if (this.cloudFrontConfig.distributionIdParameterName) {
|
|
292
|
+
const invalidationPaths = cacheKeys
|
|
293
|
+
.filter((s3Key) => Boolean(s3Key))
|
|
294
|
+
.map((s3Key) => this.s3KeyToInvalidationPath(s3Key));
|
|
295
|
+
await this.invalidateCloudFrontPaths(invalidationPaths);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Reverses `buildS3Key` to recover the request path CloudFront cached the
|
|
301
|
+
* response under. Fetch-cache entries (opaque hash keys, not page routes)
|
|
302
|
+
* translate to a path that won't match anything cached, which is harmless.
|
|
303
|
+
*/
|
|
304
|
+
s3KeyToInvalidationPath(s3Key) {
|
|
305
|
+
const prefix = `${this.s3Config.buildId}/`;
|
|
306
|
+
const withoutPrefix = s3Key.startsWith(prefix)
|
|
307
|
+
? s3Key.slice(prefix.length)
|
|
308
|
+
: s3Key;
|
|
309
|
+
const withoutSuffix = withoutPrefix.endsWith(".json")
|
|
310
|
+
? withoutPrefix.slice(0, -".json".length)
|
|
311
|
+
: withoutPrefix;
|
|
312
|
+
return withoutSuffix === "index" ? "/" : `/${withoutSuffix}`;
|
|
313
|
+
}
|
|
314
|
+
async invalidateCloudFrontPaths(paths) {
|
|
315
|
+
const uniquePaths = Array.from(new Set(paths));
|
|
316
|
+
if (uniquePaths.length === 0) {
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
try {
|
|
320
|
+
const distributionId = await this.getDistributionId();
|
|
321
|
+
if (!distributionId) {
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
this.debug(`CLOUDFRONT INVALIDATION: [${uniquePaths.join(", ")}] on distribution ${distributionId}`);
|
|
325
|
+
await this.cloudFrontClient.send(new client_cloudfront_1.CreateInvalidationCommand({
|
|
326
|
+
DistributionId: distributionId,
|
|
327
|
+
InvalidationBatch: {
|
|
328
|
+
CallerReference: (0, node_crypto_1.randomUUID)(),
|
|
329
|
+
Paths: {
|
|
330
|
+
Quantity: uniquePaths.length,
|
|
331
|
+
Items: uniquePaths,
|
|
332
|
+
},
|
|
333
|
+
},
|
|
334
|
+
}));
|
|
335
|
+
}
|
|
336
|
+
catch (error) {
|
|
337
|
+
// Log but don't fail - the S3/DynamoDB invalidation already succeeded,
|
|
338
|
+
// and the CloudFront cache policy TTL provides an eventual fallback.
|
|
339
|
+
console.warn("Failed to create CloudFront invalidation:", error);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Resolves the distribution's physical ID via SSM Parameter Store, caching
|
|
344
|
+
* it for the lifetime of this instance. See `CloudFrontInvalidationConfig`
|
|
345
|
+
* for why this indirection (rather than a plain env var) is necessary.
|
|
346
|
+
*/
|
|
347
|
+
async getDistributionId() {
|
|
348
|
+
if (this.cachedDistributionId) {
|
|
349
|
+
return this.cachedDistributionId;
|
|
350
|
+
}
|
|
351
|
+
if (!this.cloudFrontConfig.distributionIdParameterName) {
|
|
352
|
+
return null;
|
|
263
353
|
}
|
|
354
|
+
const response = await this.ssmClient.send(new client_ssm_1.GetParameterCommand({
|
|
355
|
+
Name: this.cloudFrontConfig.distributionIdParameterName,
|
|
356
|
+
}));
|
|
357
|
+
this.cachedDistributionId = response.Parameter?.Value || null;
|
|
358
|
+
return this.cachedDistributionId;
|
|
264
359
|
}
|
|
265
360
|
async resetRequestCache() {
|
|
266
361
|
// This handler doesn't maintain request-level cache state
|
|
@@ -354,4 +449,4 @@ class S3CacheHandler {
|
|
|
354
449
|
}
|
|
355
450
|
}
|
|
356
451
|
exports.S3CacheHandler = S3CacheHandler;
|
|
357
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMtY2FjaGUtaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZGFwdGVyL3MzLWNhY2hlLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0VBRUU7QUFDRixzREFBc0Q7QUFDdEQseUNBQWlDO0FBQ2pDLDhEQUlrQztBQUNsQyxrREFNNEI7QUFDNUIsa0RBQTZCO0FBYTdCLCtDQUE4RTtBQW9COUUsTUFBYSxjQUFjO0lBQ2pCLFFBQVEsQ0FBVztJQUNuQixZQUFZLENBQWlCO0lBQzdCLFFBQVEsQ0FBZ0I7SUFDeEIsWUFBWSxDQUE2QjtJQUN6QyxLQUFLLEdBQUcsSUFBQSxlQUFRLEVBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUV4RCxZQUFZLE9BQThCO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDO1FBRXRELHFFQUFxRTtRQUNyRSxJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ2QsVUFBVSxFQUNSLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBVTtnQkFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEI7Z0JBQ3hDLEVBQUU7WUFDSixNQUFNLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksV0FBVztZQUN6RSxPQUFPLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxPQUFPLElBQUksT0FBTztTQUM5QyxDQUFDO1FBRUYsMkVBQTJFO1FBQzNFLElBQUksQ0FBQyxZQUFZLEdBQUc7WUFDbEIsU0FBUyxFQUNQLE9BQU8sQ0FBQyxZQUFZLEVBQUUsU0FBUztnQkFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0M7Z0JBQzlDLEVBQUU7WUFDSixNQUFNLEVBQ0osT0FBTyxDQUFDLFlBQVksRUFBRSxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFV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RUFBRSxLQUFLO2FBQ1gsQ0FBQyxDQUFDO1lBRUgsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsdURBQXVEO1lBQ3ZELE9BQU8sQ0FBQyxJQUFJLENBQUMseUNBQXlDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUEzYUQsd0NBMmFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgUzMgYW5kIER5bmFtb0RCIGNhY2hlIGhhbmRsZXIgZm9yIE5leHQuanMgaW5jcmVtZW50YWwgY2FjaGVcbiovXG4vKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQge1xuICBEeW5hbW9EQkNsaWVudCxcbiAgUXVlcnlDb21tYW5kLFxuICBVcGRhdGVJdGVtQ29tbWFuZCxcbn0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1keW5hbW9kYlwiO1xuaW1wb3J0IHtcbiAgUzNDbGllbnQsXG4gIEdldE9iamVjdENvbW1hbmQsXG4gIFB1dE9iamVjdENvbW1hbmQsXG4gIERlbGV0ZU9iamVjdENvbW1hbmQsXG4gIE5vU3VjaEtleSxcbn0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1zM1wiO1xuaW1wb3J0IGdldERlYnVnIGZyb20gXCJkZWJ1Z1wiO1xuaW1wb3J0IHtcbiAgQ2FjaGVIYW5kbGVyLFxuICBDYWNoZUhhbmRsZXJWYWx1ZSxcbiAgQ2FjaGVIYW5kbGVyQ29udGV4dCxcbn0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvbGliL2luY3JlbWVudGFsLWNhY2hlXCI7XG5pbXBvcnQge1xuICBJbmNyZW1lbnRhbENhY2hlVmFsdWUsXG4gIEdldEluY3JlbWVudGFsRmV0Y2hDYWNoZUNvbnRleHQsXG4gIEdldEluY3JlbWVudGFsUmVzcG9uc2VDYWNoZUNvbnRleHQsXG4gIFNldEluY3JlbWVudGFsRmV0Y2hDYWNoZUNvbnRleHQsXG4gIFNldEluY3JlbWVudGFsUmVzcG9uc2VDYWNoZUNvbnRleHQsXG59IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL3Jlc3BvbnNlLWNhY2hlXCI7XG5pbXBvcnQgeyBzZXJpYWxpemVDYWNoZVZhbHVlLCBwYXJzZUNhY2hlVmFsdWUsIGdldFRhZ3MgfSBmcm9tIFwiLi9jYWNoZS11dGlsc1wiO1xuXG5pbnRlcmZhY2UgUzNDYWNoZUNvbmZpZyB7XG4gIGJ1Y2tldE5hbWU6IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIGJ1aWxkSWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIER5bmFtb0RCUmV2YWxpZGF0aW9uQ29uZmlnIHtcbiAgdGFibGVOYW1lOiBzdHJpbmc7XG4gIHJlZ2lvbjogc3RyaW5nO1xuICBidWlsZElkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUzNDYWNoZUhhbmRsZXJPcHRpb25zIHtcbiAgY29udGV4dDogQ2FjaGVIYW5kbGVyQ29udGV4dDtcbiAgczNDb25maWc/OiBQYXJ0aWFsPFMzQ2FjaGVDb25maWc+O1xuICBkeW5hbW9Db25maWc/OiBQYXJ0aWFsPER5bmFtb0RCUmV2YWxpZGF0aW9uQ29uZmlnPjtcbn1cblxuZXhwb3J0IGNsYXNzIFMzQ2FjaGVIYW5kbGVyIGltcGxlbWVudHMgQ2FjaGVIYW5kbGVyIHtcbiAgcHJpdmF0ZSBzM0NsaWVudDogUzNDbGllbnQ7XG4gIHByaXZhdGUgZHluYW1vQ2xpZW50OiBEeW5hbW9EQkNsaWVudDtcbiAgcHJpdmF0ZSBzM0NvbmZpZzogUzNDYWNoZUNvbmZpZztcbiAgcHJpdmF0ZSBkeW5hbW9Db25maWc6IER5bmFtb0RCUmV2YWxpZGF0aW9uQ29uZmlnO1xuICBwcml2YXRlIGRlYnVnID0gZ2V0RGVidWcoXCJjZGstbmV4dGpzOmNhY2hlLWhhbmRsZXI6czNcIik7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogUzNDYWNoZUhhbmRsZXJPcHRpb25zKSB7XG4gICAgY29uc3QgYnVpbGRJZCA9IHByb2Nlc3MuZW52LkNES19ORVhUSlNfQlVJTERfSUQgfHwgXCJcIjtcblxuICAgIC8vIEluaXRpYWxpemUgUzMgY29uZmlndXJhdGlvbiBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgb3B0aW9uc1xuICAgIHRoaXMuczNDb25maWcgPSB7XG4gICAgICBidWNrZXROYW1lOlxuICAgICAgICBvcHRpb25zLnMzQ29uZmlnPy5idWNrZXROYW1lIHx8XG4gICAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfQ0FDSEVfQlVDS0VUX05BTUUgfHxcbiAgICAgICAgXCJcIixcbiAgICAgIHJlZ2lvbjogb3B0aW9ucy5zM0NvbmZpZz8ucmVnaW9uIHx8IHByb2Nlc3MuZW52LkFXU19SRUdJT04gfHwgXCJ1cy1lYXN0LTFcIixcbiAgICAgIGJ1aWxkSWQ6IG9wdGlvbnMuczNDb25maWc/LmJ1aWxkSWQgfHwgYnVpbGRJZCxcbiAgICB9O1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBEeW5hbW9EQiBjb25maWd1cmF0aW9uIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCBvcHRpb25zXG4gICAgdGhpcy5keW5hbW9Db25maWcgPSB7XG4gICAgICB0YWJsZU5hbWU6XG4gICAgICAgIG9wdGlvbnMuZHluYW1vQ29uZmlnPy50YWJsZU5hbWUgfHxcbiAgICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19SRVZBTElEQVRJT05fVEFCTEVfTkFNRSB8fFxuICAgICAgICBcIlwiLFxuICAgICAgcmVnaW9uOlxuICAgICAgICBvcHRpb25zLmR5bmFtb0NvbmZpZz8ucmVnaW9uIHx8IHByb2Nlc3MuZW52LkFXU19SRUdJT04gfHwgXCJ1cy1lYXN0LTFcIixcbiAgICAgIGJ1aWxkSWQ6IG9wdGlvbnMuZHluYW1vQ29uZmlnPy5idWlsZElkIHx8IGJ1aWxkSWQsXG4gICAgfTtcblxuICAgIC8vIEluaXRpYWxpemUgQVdTIGNsaWVudHNcbiAgICB0aGlzLnMzQ2xpZW50ID0gbmV3IFMzQ2xpZW50KHsgcmVnaW9uOiB0aGlzLnMzQ29uZmlnLnJlZ2lvbiB9KTtcbiAgICB0aGlzLmR5bmFtb0NsaWVudCA9IG5ldyBEeW5hbW9EQkNsaWVudCh7XG4gICAgICByZWdpb246IHRoaXMuZHluYW1vQ29uZmlnLnJlZ2lvbixcbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5zM0NvbmZpZy5idWNrZXROYW1lKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiQ0RLX05FWFRKU19DQUNIRV9CVUNLRVRfTkFNRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBub3Qgc2V0LCBTMyBjYWNoZSBkaXNhYmxlZFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZHluYW1vQ29uZmlnLnRhYmxlTmFtZSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIkNES19ORVhUSlNfUkVWQUxJREFUSU9OX1RBQkxFX05BTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgbm90IHNldCwgcmV2YWxpZGF0aW9uIHRyYWNraW5nIGRpc2FibGVkXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghYnVpbGRJZCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIkNES19ORVhUSlNfQlVJTERfSUQgZW52aXJvbm1lbnQgdmFyaWFibGUgbm90IHNldCwgY2FjaGUgaXNvbGF0aW9uIG1heSBub3Qgd29yayBjb3JyZWN0bHlcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gTG9nIHRoZSBvcHRpb25zIGZvciBkZWJ1Z2dpbmcgKG9wdGlvbmFsIHVzYWdlIHRvIGF2b2lkIHVudXNlZCBwYXJhbWV0ZXIgd2FybmluZylcbiAgICBpZiAob3B0aW9ucy5jb250ZXh0LmRldikge1xuICAgICAgdGhpcy5kZWJ1ZyhcIlMzRHluYW1vQ2FjaGVIYW5kbGVyIGluaXRpYWxpemVkIGluIGRldmVsb3BtZW50IG1vZGVcIik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0KFxuICAgIGNhY2hlS2V5OiBzdHJpbmcsXG4gICAgY3R4OiBHZXRJbmNyZW1lbnRhbEZldGNoQ2FjaGVDb250ZXh0IHwgR2V0SW5jcmVtZW50YWxSZXNwb25zZUNhY2hlQ29udGV4dCxcbiAgKTogUHJvbWlzZTxDYWNoZUhhbmRsZXJWYWx1ZSB8IG51bGw+IHtcbiAgICB0cnkge1xuICAgICAgLy8gTG9nIGNvbnRleHQgZm9yIGRlYnVnZ2luZyAob3B0aW9uYWwgdXNhZ2UgdG8gYXZvaWQgdW51c2VkIHBhcmFtZXRlciB3YXJuaW5nKVxuICAgICAgaWYgKGN0eC5raW5kKSB7XG4gICAgICAgIHRoaXMuZGVidWcoXG4gICAgICAgICAgYFMzIGNhY2hlIGdldCBvcGVyYXRpb24gZm9yICR7Y2FjaGVLZXl9IHdpdGgga2luZDogJHtjdHgua2luZH1gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuczNDb25maWcuYnVja2V0TmFtZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgczNLZXkgPSB0aGlzLmJ1aWxkUzNLZXkoY2FjaGVLZXkpO1xuXG4gICAgICBjb25zdCBjb21tYW5kID0gbmV3IEdldE9iamVjdENvbW1hbmQoe1xuICAgICAgICBCdWNrZXQ6IHRoaXMuczNDb25maWcuYnVja2V0TmFtZSxcbiAgICAgICAgS2V5OiBzM0tleSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuczNDbGllbnQuc2VuZChjb21tYW5kKTtcblxuICAgICAgaWYgKCFyZXNwb25zZS5Cb2R5KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBIYW5kbGUgZGlmZmVyZW50IGNvbnRlbnQgdHlwZXMgYXBwcm9wcmlhdGVseSBmb3IgZG9jdW1lbnRlZCBmb3JtYXRzXG4gICAgICBsZXQgY2FjaGVWYWx1ZTogQ2FjaGVIYW5kbGVyVmFsdWU7XG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlc3BvbnNlLkNvbnRlbnRUeXBlIHx8IFwiYXBwbGljYXRpb24vanNvblwiO1xuXG4gICAgICAvLyBIYW5kbGUgdGV4dC1iYXNlZCBkYXRhIChKU09OLCBIVE1MLCBwbGFpbiB0ZXh0KSAtIGFsbCBkb2N1bWVudGVkIGZvcm1hdHMgYXJlIHRleHQtYmFzZWRcbiAgICAgIGNvbnN0IGJvZHlTdHJpbmcgPSBhd2FpdCByZXNwb25zZS5Cb2R5LnRyYW5zZm9ybVRvU3RyaW5nKFwidXRmLThcIik7XG5cbiAgICAgIGlmIChjb250ZW50VHlwZS5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL2pzb25cIikpIHtcbiAgICAgICAgLy8gUGFyc2UgdGhlIHN0b3JlZCBDYWNoZUhhbmRsZXJWYWx1ZSBkaXJlY3RseVxuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHBhcnNlQ2FjaGVWYWx1ZShib2R5U3RyaW5nKTtcblxuICAgICAgICAvLyBFeHRyYWN0IHRoZSBhY3R1YWwgQ2FjaGVIYW5kbGVyVmFsdWUgKHdpdGhvdXQgdGFncykgZm9yIHJldHVyblxuICAgICAgICBjYWNoZVZhbHVlID0ge1xuICAgICAgICAgIGxhc3RNb2RpZmllZDogcGFyc2VkVmFsdWUubGFzdE1vZGlmaWVkLFxuICAgICAgICAgIHZhbHVlOiBwYXJzZWRWYWx1ZS52YWx1ZSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBDaGVjayBpZiBjYWNoZSBoYXMgYmVlbiBpbnZhbGlkYXRlZCBieSB0YWcgcmV2YWxpZGF0aW9uXG4gICAgICAgIGNvbnN0IHN0b3JlZFRhZ3MgPSBwYXJzZWRWYWx1ZS50YWdzIHx8IFtdO1xuICAgICAgICBpZiAoc3RvcmVkVGFncy5sZW5ndGggPiAwICYmIHRoaXMuZHluYW1vQ29uZmlnLnRhYmxlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IGlzSW52YWxpZGF0ZWQgPSBhd2FpdCB0aGlzLmNoZWNrSWZSZXZhbGlkYXRlZChcbiAgICAgICAgICAgIGNhY2hlVmFsdWUubGFzdE1vZGlmaWVkLFxuICAgICAgICAgICAgc3RvcmVkVGFncyxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChpc0ludmFsaWRhdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGBTMyBDQUNIRSBJTlZBTElEQVRFRCBCWSBUQUc6ICR7Y2FjaGVLZXl9YCk7XG4gICAgICAgICAgICAvLyBEZWxldGUgdGhlIHN0YWxlIFMzIGVudHJ5XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZVMzRW50cnkoczNLZXkpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhgSW52YWxpZCBjb250ZW50IHR5cGU6ICR7Y29udGVudFR5cGV9YCk7XG4gICAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiBzaW5jZSB3ZSBhbHdheXMgc3RvcmUgYXMgSlNPTiBub3dcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGVidWcoYFMzIENBQ0hFIEhJVDogJHtjYWNoZUtleX0gKCR7czNLZXl9KWApO1xuXG4gICAgICByZXR1cm4gY2FjaGVWYWx1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTm9TdWNoS2V5KSB7XG4gICAgICAgIHRoaXMuZGVidWcoYFMzIENBQ0hFIE1JU1M6ICR7Y2FjaGVLZXl9YCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICAvLyBMb2cgYWN0dWFsIGVycm9ycyAobm90IGNhY2hlIG1pc3NlcylcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHJldHJpZXZpbmcgY2FjaGUgZnJvbSBTMzpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzZXQoXG4gICAgY2FjaGVLZXk6IHN0cmluZyxcbiAgICBkYXRhOiBJbmNyZW1lbnRhbENhY2hlVmFsdWUgfCBudWxsLFxuICAgIGN0eDogU2V0SW5jcmVtZW50YWxGZXRjaENhY2hlQ29udGV4dCB8IFNldEluY3JlbWVudGFsUmVzcG9uc2VDYWNoZUNvbnRleHQsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgLy8gRGVsZXRlIGZyb20gUzMgYW5kIER5bmFtb0RCXG4gICAgICAgIHRoaXMuZGVidWcoYFMzIENBQ0hFIERFTEVURTogJHtjYWNoZUtleX1gKTtcblxuICAgICAgICBpZiAoIXRoaXMuczNDb25maWcuYnVja2V0TmFtZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJ1aWxkIFMzIGtleSB3aXRob3V0IG5lZWRpbmcgdG8ga25vdyB0aGUga2luZFxuICAgICAgICBjb25zdCBzM0tleSA9IHRoaXMuYnVpbGRTM0tleShjYWNoZUtleSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkZWxldGVDb21tYW5kID0gbmV3IERlbGV0ZU9iamVjdENvbW1hbmQoe1xuICAgICAgICAgICAgQnVja2V0OiB0aGlzLnMzQ29uZmlnLmJ1Y2tldE5hbWUsXG4gICAgICAgICAgICBLZXk6IHMzS2V5LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGF3YWl0IHRoaXMuczNDbGllbnQuc2VuZChkZWxldGVDb21tYW5kKTtcbiAgICAgICAgICB0aGlzLmRlYnVnKGBTMyBDQUNIRSBERUxFVEVEOiAke3MzS2V5fWApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE5vU3VjaEtleSkge1xuICAgICAgICAgICAgdGhpcy5kZWJ1ZyhgRmFpbGVkIHRvIGRlbGV0ZSBTMyBrZXkgJHtzM0tleX06YCwgZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86IEFsc28gZGVsZXRlIHRhZyBhc3NvY2lhdGlvbnMgZnJvbSBEeW5hbW9EQiBpZiBuZWVkZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBEZWJ1ZyBsb2dnaW5nIHRvIHVuZGVyc3RhbmQgd2hhdCBkYXRhIGlzIGJlaW5nIGNhY2hlZFxuICAgICAgY29uc3QgdGFncyA9IGdldFRhZ3MoY3R4KTtcbiAgICAgIHRoaXMuZGVidWcoYFMzIENBQ0hFIFNFVDogS2V5OiAke2NhY2hlS2V5fSwgdGFnczogJHt0YWdzIHx8IFwibm9uZVwifWApO1xuXG4gICAgICAvLyBOb3RlOiBjdHgudGFncyBhcmUgYXZhaWxhYmxlIGJ1dCByZXZhbGlkYXRpb24gaXMgaGFuZGxlZCBzZXBhcmF0ZWx5IGluIHJldmFsaWRhdGVUYWcgbWV0aG9kXG4gICAgICAvLyBMb2cgdGFncyBmb3IgZGVidWdnaW5nIGlmIHByZXNlbnQgKG9ubHkgaW4gU2V0SW5jcmVtZW50YWxGZXRjaENhY2hlQ29udGV4dClcbiAgICAgIGlmICh0YWdzICYmIHRhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmRlYnVnKGBTMyBjYWNoZSBlbnRyeSBmb3IgJHtjYWNoZUtleX0gaGFzIHRhZ3M6YCwgdGFncyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5zM0NvbmZpZy5idWNrZXROYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgczNLZXkgPSB0aGlzLmJ1aWxkUzNLZXkoY2FjaGVLZXkpO1xuXG4gICAgICAvLyBDcmVhdGUgQ2FjaGVIYW5kbGVyVmFsdWUgc3RydWN0dXJlIGZvciBTMyBzdG9yYWdlIHdpdGggdGFnc1xuICAgICAgY29uc3QgY2FjaGVIYW5kbGVyVmFsdWU6IENhY2hlSGFuZGxlclZhbHVlID0ge1xuICAgICAgICBsYXN0TW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgICAgIHZhbHVlOiBkYXRhLFxuICAgICAgfTtcblxuICAgICAgLy8gU3RvcmUgdGFncyB3aXRoIHRoZSBjYWNoZSBlbnRyeSBmb3IgcmV2YWxpZGF0aW9uIGNoZWNraW5nXG4gICAgICBjb25zdCBjYWNoZUVudHJ5V2l0aFRhZ3MgPSB7XG4gICAgICAgIC4uLmNhY2hlSGFuZGxlclZhbHVlLFxuICAgICAgICB0YWdzOiB0YWdzIHx8IFtdLFxuICAgICAgfTtcblxuICAgICAgLy8gU2VyaWFsaXplIHdpdGggY3VzdG9tIGhhbmRsaW5nIGZvciBNYXAgYW5kIEJ1ZmZlciBvYmplY3RzXG4gICAgICBjb25zdCBib2R5ID0gc2VyaWFsaXplQ2FjaGVWYWx1ZShjYWNoZUVudHJ5V2l0aFRhZ3MpO1xuXG4gICAgICBjb25zdCBjb21tYW5kID0gbmV3IFB1dE9iamVjdENvbW1hbmQoe1xuICAgICAgICBCdWNrZXQ6IHRoaXMuczNDb25maWcuYnVja2V0TmFtZSxcbiAgICAgICAgS2V5OiBzM0tleSxcbiAgICAgICAgQm9keTogYm9keSxcbiAgICAgICAgQ29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLCAvLyBBbHdheXMgSlNPTiBzaW5jZSB3ZSBzdG9yZSBDYWNoZUhhbmRsZXJWYWx1ZVxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHRoaXMuczNDbGllbnQuc2VuZChjb21tYW5kKTtcblxuICAgICAgdGhpcy5kZWJ1ZyhgUzMgQ0FDSEUgU1RPUkVEOiAke2NhY2hlS2V5fSAoJHtkYXRhLmtpbmR9KWApO1xuXG4gICAgICAvLyBTdG9yZSB0YWctdG8tY2FjaGUta2V5IG1hcHBpbmdzIGluIER5bmFtb0RCIGZvciByZXZhbGlkYXRpb25cbiAgICAgIGlmICh0YWdzICYmIHRhZ3MubGVuZ3RoID4gMCAmJiB0aGlzLmR5bmFtb0NvbmZpZy50YWJsZU5hbWUpIHtcbiAgICAgICAgdGhpcy5kZWJ1ZyhgU1RPUklORyBUQUdTOiAke2NhY2hlS2V5fSAtPiBbJHt0YWdzLmpvaW4oXCIsIFwiKX1dYCk7XG4gICAgICAgIGF3YWl0IHRoaXMuc3RvcmVEeW5hbW9EQlRhZ01hcHBpbmdzKHMzS2V5LCB0YWdzKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIHN0b3JpbmcgY2FjaGUgdG8gUzM6XCIsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZXZhbGlkYXRlVGFnKHRhZzogc3RyaW5nIHwgc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0YWdzID0gQXJyYXkuaXNBcnJheSh0YWcpID8gdGFnIDogW3RhZ107XG4gICAgdGhpcy5kZWJ1ZyhgUkVWQUxJREFUSU5HIFRBR1M6IFske3RhZ3Muam9pbihcIiwgXCIpfV1gKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoIXRoaXMuZHluYW1vQ29uZmlnLnRhYmxlTmFtZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFByb2Nlc3MgYWxsIHRhZ3MgaW4gcGFyYWxsZWwgZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodGFncy5tYXAoKHQpID0+IHRoaXMucmV2YWxpZGF0ZVNpbmdsZVRhZyh0KSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3IgdXBkYXRpbmcgcmV2YWxpZGF0aW9uIG1ldGFkYXRhOlwiLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZXZhbGlkYXRlU2luZ2xlVGFnKHRhZzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gUXVlcnkgYWxsIHBhdGhzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRhZ1xuICAgIGNvbnN0IHF1ZXJ5Q29tbWFuZCA9IG5ldyBRdWVyeUNvbW1hbmQoe1xuICAgICAgVGFibGVOYW1lOiB0aGlzLmR5bmFtb0NvbmZpZy50YWJsZU5hbWUsXG4gICAgICBLZXlDb25kaXRpb25FeHByZXNzaW9uOiBcInBrID0gOnBrIEFORCBiZWdpbnNfd2l0aChzaywgOnNrUHJlZml4KVwiLFxuICAgICAgRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICBcIjpwa1wiOiB7IFM6IHRoaXMuZHluYW1vQ29uZmlnLmJ1aWxkSWQgfSxcbiAgICAgICAgXCI6c2tQcmVmaXhcIjogeyBTOiBgJHt0YWd9I2AgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBxdWVyeVJlc3BvbnNlID0gYXdhaXQgdGhpcy5keW5hbW9DbGllbnQuc2VuZChxdWVyeUNvbW1hbmQpO1xuXG4gICAgaWYgKHF1ZXJ5UmVzcG9uc2UuSXRlbXMpIHtcbiAgICAgIC8vIEV4dHJhY3QgUzMga2V5cyBmcm9tIHNvcnQga2V5cyAoZm9ybWF0OiBcInRhZyNzM0tleVwiKVxuICAgICAgY29uc3QgY2FjaGVLZXlzID0gcXVlcnlSZXNwb25zZS5JdGVtcy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3Qgc2sgPSBpdGVtLnNrPy5TO1xuICAgICAgICBpZiAoc2spIHtcbiAgICAgICAgICBjb25zdCBoYXNoSW5kZXggPSBzay5pbmRleE9mKFwiI1wiKTtcbiAgICAgICAgICByZXR1cm4gaGFzaEluZGV4ICE9PSAtMSA/IHNrLnN1YnN0cmluZyhoYXNoSW5kZXggKyAxKSA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICAgIHRoaXMuZGVidWcoXG4gICAgICAgIGBUQUcgJHt0YWd9OiBGb3VuZCAke2NhY2hlS2V5cy5sZW5ndGh9IGNhY2hlIGVudHJpZXMgdG8gaW52YWxpZGF0ZWAsXG4gICAgICApO1xuXG4gICAgICAvLyBVcGRhdGUgcmV2YWxpZGF0aW9uIHRpbWVzdGFtcCBmb3IgYWxsIGNhY2hlIGtleXMgd2l0aCB0aGlzIHRhZ1xuICAgICAgY29uc3QgdXBkYXRlUHJvbWlzZXMgPSBxdWVyeVJlc3BvbnNlLkl0ZW1zLm1hcChhc3luYyAoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCBzayA9IGl0ZW0uc2s/LlM7XG4gICAgICAgIGlmIChzaykge1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZUNvbW1hbmQgPSBuZXcgVXBkYXRlSXRlbUNvbW1hbmQoe1xuICAgICAgICAgICAgVGFibGVOYW1lOiB0aGlzLmR5bmFtb0NvbmZpZy50YWJsZU5hbWUsXG4gICAgICAgICAgICBLZXk6IHtcbiAgICAgICAgICAgICAgcGs6IHsgUzogdGhpcy5keW5hbW9Db25maWcuYnVpbGRJZCB9LFxuICAgICAgICAgICAgICBzazogeyBTOiBzayB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFVwZGF0ZUV4cHJlc3Npb246IFwiU0VUIHJldmFsaWRhdGVkQXQgPSA6dGltZXN0YW1wXCIsXG4gICAgICAgICAgICBFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzOiB7XG4gICAgICAgICAgICAgIFwiOnRpbWVzdGFtcFwiOiB7IE46IERhdGUubm93KCkudG9TdHJpbmcoKSB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiB0aGlzLmR5bmFtb0NsaWVudC5zZW5kKHVwZGF0ZUNvbW1hbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIH0pO1xuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbCh1cGRhdGVQcm9taXNlcy5maWx0ZXIoQm9vbGVhbikpO1xuXG4gICAgICAvLyBEZWxldGUgdGhlIGNvcnJlc3BvbmRpbmcgUzMgY2FjaGUgZW50cmllcyB0byBpbnZhbGlkYXRlIHRoZW1cbiAgICAgIGlmICh0aGlzLnMzQ29uZmlnLmJ1Y2tldE5hbWUpIHtcbiAgICAgICAgY29uc3QgZGVsZXRlUHJvbWlzZXMgPSBjYWNoZUtleXMubWFwKGFzeW5jIChzM0tleSkgPT4ge1xuICAgICAgICAgIGlmIChzM0tleSkge1xuICAgICAgICAgICAgY29uc3QgZGVsZXRlQ29tbWFuZCA9IG5ldyBEZWxldGVPYmplY3RDb21tYW5kKHtcbiAgICAgICAgICAgICAgQnVja2V0OiB0aGlzLnMzQ29uZmlnLmJ1Y2tldE5hbWUsXG4gICAgICAgICAgICAgIEtleTogczNLZXksXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zM0NsaWVudC5zZW5kKGRlbGV0ZUNvbW1hbmQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gTG9nIGJ1dCBkb24ndCBmYWlsIC0gdGhlIGVudHJ5IG1pZ2h0IG5vdCBleGlzdCBpbiBTM1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBkZWxldGUgUzMgY2FjaGUgZW50cnkgJHtzM0tleX06YCwgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoZGVsZXRlUHJvbWlzZXMuZmlsdGVyKEJvb2xlYW4pKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyByZXNldFJlcXVlc3RDYWNoZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBUaGlzIGhhbmRsZXIgZG9lc24ndCBtYWludGFpbiByZXF1ZXN0LWxldmVsIGNhY2hlIHN0YXRlXG4gICAgLy8gVGhlIGFjdHVhbCBjYWNoZSBjbGVhcmluZyBpcyBoYW5kbGVkIGJ5IHRoZSBtZW1vcnkgY2FjaGUgaGFuZGxlclxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFMzS2V5KGNhY2hlS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIFVzZSBCVUlMRF9JRCBwcmVmaXhpbmc6IHtidWlsZElkfS97Y2FjaGVLZXl9Lmpzb25cblxuICAgIC8vIEhhbmRsZSBlZGdlIGNhc2VzOlxuICAgIC8vIC0gUm9vdCBwYXRoIFwiL1wiIHNob3VsZCBiZWNvbWUgXCJpbmRleFwiIG9yIHNpbWlsYXJcbiAgICAvLyAtIFJlbW92ZSBsZWFkaW5nIHNsYXNoZXMgdG8gcHJldmVudCBlbXB0eSBmb2xkZXJzXG4gICAgbGV0IGNsZWFuQ2FjaGVLZXkgPSBjYWNoZUtleTtcblxuICAgIGlmIChjYWNoZUtleSA9PT0gXCIvXCIgfHwgY2FjaGVLZXkgPT09IFwiXCIpIHtcbiAgICAgIGNsZWFuQ2FjaGVLZXkgPSBcImluZGV4XCI7XG4gICAgfSBlbHNlIGlmIChjYWNoZUtleS5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgY2xlYW5DYWNoZUtleSA9IGNhY2hlS2V5LnNsaWNlKDEpO1xuICAgIH1cblxuICAgIHJldHVybiBqb2luKHRoaXMuczNDb25maWcuYnVpbGRJZCwgYCR7Y2xlYW5DYWNoZUtleX0uanNvbmApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdG9yZUR5bmFtb0RCVGFnTWFwcGluZ3MoXG4gICAgczNLZXk6IHN0cmluZyxcbiAgICB0YWdzOiBzdHJpbmdbXSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVwZGF0ZVByb21pc2VzID0gdGFncy5tYXAoYXN5bmMgKHRhZykgPT4ge1xuICAgICAgICBjb25zdCB0YWdDYWNoZUtleSA9IGAke3RhZ30jJHtzM0tleX1gO1xuICAgICAgICBjb25zdCB1cGRhdGVDb21tYW5kID0gbmV3IFVwZGF0ZUl0ZW1Db21tYW5kKHtcbiAgICAgICAgICBUYWJsZU5hbWU6IHRoaXMuZHluYW1vQ29uZmlnLnRhYmxlTmFtZSxcbiAgICAgICAgICBLZXk6IHtcbiAgICAgICAgICAgIHBrOiB7IFM6IHRoaXMuZHluYW1vQ29uZmlnLmJ1aWxkSWQgfSxcbiAgICAgICAgICAgIHNrOiB7IFM6IHRhZ0NhY2hlS2V5IH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBVcGRhdGVFeHByZXNzaW9uOlxuICAgICAgICAgICAgXCJTRVQgY3JlYXRlZEF0ID0gaWZfbm90X2V4aXN0cyhjcmVhdGVkQXQsIDpub3cpLCByZXZhbGlkYXRlZEF0ID0gOm5vd1wiLFxuICAgICAgICAgIEV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXM6IHtcbiAgICAgICAgICAgIFwiOm5vd1wiOiB7IE46IERhdGUubm93KCkudG9TdHJpbmcoKSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuZHluYW1vQ2xpZW50LnNlbmQodXBkYXRlQ29tbWFuZCk7XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodXBkYXRlUHJvbWlzZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igc3RvcmluZyBEeW5hbW9EQiB0YWcgbWFwcGluZ3M6XCIsIGVycm9yKTtcbiAgICAgIC8vIERvbid0IHRocm93IC0gY2FjaGUgc3RvcmFnZSBzaG91bGQgY29udGludWUgZXZlbiBpZiB0YWcgbWFwcGluZyBmYWlsc1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tJZlJldmFsaWRhdGVkKFxuICAgIGNhY2hlTGFzdE1vZGlmaWVkOiBudW1iZXIsXG4gICAgdGFnczogc3RyaW5nW10sXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBDaGVjayBlYWNoIHRhZyB0byBzZWUgaWYgaXQgaGFzIGJlZW4gcmV2YWxpZGF0ZWQgYWZ0ZXIgdGhlIGNhY2hlIHdhcyBjcmVhdGVkXG4gICAgICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5Q29tbWFuZCA9IG5ldyBRdWVyeUNvbW1hbmQoe1xuICAgICAgICAgIFRhYmxlTmFtZTogdGhpcy5keW5hbW9Db25maWcudGFibGVOYW1lLFxuICAgICAgICAgIEtleUNvbmRpdGlvbkV4cHJlc3Npb246IFwicGsgPSA6cGsgQU5EIGJlZ2luc193aXRoKHNrLCA6c2tQcmVmaXgpXCIsXG4gICAgICAgICAgRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICAgXCI6cGtcIjogeyBTOiB0aGlzLmR5bmFtb0NvbmZpZy5idWlsZElkIH0sXG4gICAgICAgICAgICBcIjpza1ByZWZpeFwiOiB7IFM6IGAke3RhZ30jYCB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgUHJvamVjdGlvbkV4cHJlc3Npb246IFwicmV2YWxpZGF0ZWRBdFwiLFxuICAgICAgICAgIExpbWl0OiAxLCAvLyBXZSBvbmx5IG5lZWQgdG8gY2hlY2sgaWYgYW55IGVudHJ5IGV4aXN0cyB3aXRoIHRoaXMgdGFnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHF1ZXJ5UmVzcG9uc2UgPSBhd2FpdCB0aGlzLmR5bmFtb0NsaWVudC5zZW5kKHF1ZXJ5Q29tbWFuZCk7XG5cbiAgICAgICAgaWYgKHF1ZXJ5UmVzcG9uc2UuSXRlbXMgJiYgcXVlcnlSZXNwb25zZS5JdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcmV2YWxpZGF0ZWRBdCA9IHF1ZXJ5UmVzcG9uc2UuSXRlbXNbMF0ucmV2YWxpZGF0ZWRBdD8uTjtcbiAgICAgICAgICBpZiAocmV2YWxpZGF0ZWRBdCAmJiBwYXJzZUludChyZXZhbGlkYXRlZEF0KSA+IGNhY2hlTGFzdE1vZGlmaWVkKSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKFxuICAgICAgICAgICAgICBgVGFnICR7dGFnfSB3YXMgcmV2YWxpZGF0ZWQgYXQgJHtyZXZhbGlkYXRlZEF0fSwgY2FjaGUgY3JlYXRlZCBhdCAke2NhY2hlTGFzdE1vZGlmaWVkfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIENhY2hlIGlzIGludmFsaWRhdGVkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTsgLy8gQ2FjaGUgaXMgc3RpbGwgdmFsaWRcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGNoZWNraW5nIGNhY2hlIHJldmFsaWRhdGlvbjpcIiwgZXJyb3IpO1xuICAgICAgLy8gT24gZXJyb3IsIGFzc3VtZSBjYWNoZSBpcyB2YWxpZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjYWNoZSBtaXNzZXNcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlbGV0ZVMzRW50cnkoczNLZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXRoaXMuczNDb25maWcuYnVja2V0TmFtZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlbGV0ZUNvbW1hbmQgPSBuZXcgRGVsZXRlT2JqZWN0Q29tbWFuZCh7XG4gICAgICAgIEJ1Y2tldDogdGhpcy5zM0NvbmZpZy5idWNrZXROYW1lLFxuICAgICAgICBLZXk6IHMzS2V5LFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHRoaXMuczNDbGllbnQuc2VuZChkZWxldGVDb21tYW5kKTtcbiAgICAgIHRoaXMuZGVidWcoYERlbGV0ZWQgc3RhbGUgUzMgY2FjaGUgZW50cnk6ICR7czNLZXl9YCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIExvZyBidXQgZG9uJ3QgZmFpbCAtIHRoZSBlbnRyeSBtaWdodCBub3QgZXhpc3QgaW4gUzNcbiAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIGRlbGV0ZSBzdGFsZSBTMyBjYWNoZSBlbnRyeSAke3MzS2V5fTpgLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
452
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMtY2FjaGUtaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZGFwdGVyL3MzLWNhY2hlLWhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0VBRUU7QUFDRixzREFBc0Q7QUFDdEQsNkNBQXlDO0FBQ3pDLHlDQUFpQztBQUNqQyxrRUFHb0M7QUFDcEMsOERBSWtDO0FBQ2xDLGtEQU00QjtBQUM1QixvREFBcUU7QUFDckUsa0RBQTZCO0FBYTdCLCtDQUE4RTtBQXFDOUUsTUFBYSxjQUFjO0lBQ2pCLFFBQVEsQ0FBVztJQUNuQixZQUFZLENBQWlCO0lBQzdCLGdCQUFnQixDQUFtQjtJQUNuQyxTQUFTLENBQVk7SUFDckIsUUFBUSxDQUFnQjtJQUN4QixZQUFZLENBQTZCO0lBQ3pDLGdCQUFnQixDQUErQjtJQUMvQyxLQUFLLEdBQUcsSUFBQSxlQUFRLEVBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUV4RCw0RUFBNEU7SUFDNUUsMkVBQTJFO0lBQ25FLG9CQUFvQixHQUFrQixJQUFJLENBQUM7SUFFbkQsWUFBWSxPQUE4QjtRQUN4QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixJQUFJLEVBQUUsQ0FBQztRQUV0RCxxRUFBcUU7UUFDckUsSUFBSSxDQUFDLFFBQVEsR0FBRztZQUNkLFVBQVUsRUFDUixPQUFPLENBQUMsUUFBUSxFQUFFLFVBQVU7Z0JBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCO2dCQUN4QyxFQUFFO1lBQ0osTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsTUFBTSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLFdBQVc7WUFDekUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxJQUFJLE9BQU87U0FDOUMsQ0FBQztRQUVGLDJFQUEyRTtRQUMzRSxJQUFJLENBQUMsWUFBWSxHQUFHO1lBQ2xCLFNB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LENBQUM7WUFDeEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLHVEQUF1RDtZQUN2RCxPQUFPLENBQUMsSUFBSSxDQUFDLHlDQUF5QyxLQUFLLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6RSxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBM2hCRCx3Q0EyaEJDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgUzMgYW5kIER5bmFtb0RCIGNhY2hlIGhhbmRsZXIgZm9yIE5leHQuanMgaW5jcmVtZW50YWwgY2FjaGVcbiovXG4vKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCB7IHJhbmRvbVVVSUQgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQge1xuICBDbG91ZEZyb250Q2xpZW50LFxuICBDcmVhdGVJbnZhbGlkYXRpb25Db21tYW5kLFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LWNsb3VkZnJvbnRcIjtcbmltcG9ydCB7XG4gIER5bmFtb0RCQ2xpZW50LFxuICBRdWVyeUNvbW1hbmQsXG4gIFVwZGF0ZUl0ZW1Db21tYW5kLFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiXCI7XG5pbXBvcnQge1xuICBTM0NsaWVudCxcbiAgR2V0T2JqZWN0Q29tbWFuZCxcbiAgUHV0T2JqZWN0Q29tbWFuZCxcbiAgRGVsZXRlT2JqZWN0Q29tbWFuZCxcbiAgTm9TdWNoS2V5LFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXMzXCI7XG5pbXBvcnQgeyBTU01DbGllbnQsIEdldFBhcmFtZXRlckNvbW1hbmQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXNzbVwiO1xuaW1wb3J0IGdldERlYnVnIGZyb20gXCJkZWJ1Z1wiO1xuaW1wb3J0IHtcbiAgQ2FjaGVIYW5kbGVyLFxuICBDYWNoZUhhbmRsZXJWYWx1ZSxcbiAgQ2FjaGVIYW5kbGVyQ29udGV4dCxcbn0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvbGliL2luY3JlbWVudGFsLWNhY2hlXCI7XG5pbXBvcnQge1xuICBJbmNyZW1lbnRhbENhY2hlVmFsdWUsXG4gIEdldEluY3JlbWVudGFsRmV0Y2hDYWNoZUNvbnRleHQsXG4gIEdldEluY3JlbWVudGFsUmVzcG9uc2VDYWNoZUNvbnRleHQsXG4gIFNldEluY3JlbWVudGFsRmV0Y2hDYWNoZUNvbnRleHQsXG4gIFNldEluY3JlbWVudGFsUmVzcG9uc2VDYWNoZUNvbnRleHQsXG59IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL3Jlc3BvbnNlLWNhY2hlXCI7XG5pbXBvcnQgeyBzZXJpYWxpemVDYWNoZVZhbHVlLCBwYXJzZUNhY2hlVmFsdWUsIGdldFRhZ3MgfSBmcm9tIFwiLi9jYWNoZS11dGlsc1wiO1xuXG5pbnRlcmZhY2UgUzNDYWNoZUNvbmZpZyB7XG4gIGJ1Y2tldE5hbWU6IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG4gIGJ1aWxkSWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIER5bmFtb0RCUmV2YWxpZGF0aW9uQ29uZmlnIHtcbiAgdGFibGVOYW1lOiBzdHJpbmc7XG4gIHJlZ2lvbjogc3RyaW5nO1xuICBidWlsZElkOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBDbG91ZEZyb250SW52YWxpZGF0aW9uQ29uZmlnIHtcbiAgLyoqXG4gICAqIE5hbWUgKG5vdCB2YWx1ZSkgb2YgdGhlIFNTTSBQYXJhbWV0ZXIgaG9sZGluZyB0aGUgZGlzdHJpYnV0aW9uIElELlxuICAgKlxuICAgKiBUaGUgZGlzdHJpYnV0aW9uIElEIGl0c2VsZiBjYW4ndCBiZSBwYXNzZWQgYXMgYSBwbGFpbiBlbnYgdmFyOiBDREtcbiAgICogY29uc3RydWN0cyB0aGUgTGFtYmRhL0ZhcmdhdGUgdGFzayBiZWZvcmUgdGhlIGRpc3RyaWJ1dGlvbiBleGlzdHMgKHRoZVxuICAgKiBkaXN0cmlidXRpb24ncyBvcmlnaW4gcmVmZXJlbmNlcyB0aGUgY29tcHV0ZSdzIGZ1bmN0aW9uIFVSTC9BTEIpLCBzb1xuICAgKiBlbWJlZGRpbmcgdGhlIGRpc3RyaWJ1dGlvbidzIHBoeXNpY2FsIElEIGRpcmVjdGx5IGluIHRoZSBjb21wdXRlJ3NcbiAgICogZW52aXJvbm1lbnQgb3IgSUFNIHBvbGljeSB3b3VsZCBjcmVhdGUgYSBjaXJjdWxhciBDbG91ZEZvcm1hdGlvblxuICAgKiBkZXBlbmRlbmN5LiBUaGUgcGFyYW1ldGVyICpuYW1lKiBpcyBzdGF0aWMgYW5kIGtub3duIGF0IHN5bnRoIHRpbWUsIHNvXG4gICAqIGl0IGNhbiBiZSBzYWZlbHkgZW1iZWRkZWQ7IG9ubHkgaXRzICp2YWx1ZSogZGVwZW5kcyBvbiB0aGUgZGlzdHJpYnV0aW9uLlxuICAgKi9cbiAgZGlzdHJpYnV0aW9uSWRQYXJhbWV0ZXJOYW1lOiBzdHJpbmc7XG4gIHJlZ2lvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFMzQ2FjaGVIYW5kbGVyT3B0aW9ucyB7XG4gIGNvbnRleHQ6IENhY2hlSGFuZGxlckNvbnRleHQ7XG4gIHMzQ29uZmlnPzogUGFydGlhbDxTM0NhY2hlQ29uZmlnPjtcbiAgZHluYW1vQ29uZmlnPzogUGFydGlhbDxEeW5hbW9EQlJldmFsaWRhdGlvbkNvbmZpZz47XG4gIGNsb3VkRnJvbnRDb25maWc/OiBQYXJ0aWFsPENsb3VkRnJvbnRJbnZhbGlkYXRpb25Db25maWc+O1xufVxuXG5leHBvcnQgY2xhc3MgUzNDYWNoZUhhbmRsZXIgaW1wbGVtZW50cyBDYWNoZUhhbmRsZXIge1xuICBwcml2YXRlIHMzQ2xpZW50OiBTM0NsaWVudDtcbiAgcHJpdmF0ZSBkeW5hbW9DbGllbnQ6IER5bmFtb0RCQ2xpZW50O1xuICBwcml2YXRlIGNsb3VkRnJvbnRDbGllbnQ6IENsb3VkRnJvbnRDbGllbnQ7XG4gIHByaXZhdGUgc3NtQ2xpZW50OiBTU01DbGllbnQ7XG4gIHByaXZhdGUgczNDb25maWc6IFMzQ2FjaGVDb25maWc7XG4gIHByaXZhdGUgZHluYW1vQ29uZmlnOiBEeW5hbW9EQlJldmFsaWRhdGlvbkNvbmZpZztcbiAgcHJpdmF0ZSBjbG91ZEZyb250Q29uZmlnOiBDbG91ZEZyb250SW52YWxpZGF0aW9uQ29uZmlnO1xuICBwcml2YXRlIGRlYnVnID0gZ2V0RGVidWcoXCJjZGstbmV4dGpzOmNhY2hlLWhhbmRsZXI6czNcIik7XG5cbiAgLy8gQ2FjaGVkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhpcyBpbnN0YW5jZSAoaS5lLiB0aGUgY29tcHV0ZSBpbnN0YW5jZSkgb25jZVxuICAvLyByZXNvbHZlZCwgc2luY2UgYSBkZXBsb3ltZW50J3MgZGlzdHJpYnV0aW9uIElEIG5ldmVyIGNoYW5nZXMgYXQgcnVudGltZS5cbiAgcHJpdmF0ZSBjYWNoZWREaXN0cmlidXRpb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogUzNDYWNoZUhhbmRsZXJPcHRpb25zKSB7XG4gICAgY29uc3QgYnVpbGRJZCA9IHByb2Nlc3MuZW52LkNES19ORVhUSlNfQlVJTERfSUQgfHwgXCJcIjtcblxuICAgIC8vIEluaXRpYWxpemUgUzMgY29uZmlndXJhdGlvbiBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcyBhbmQgb3B0aW9uc1xuICAgIHRoaXMuczNDb25maWcgPSB7XG4gICAgICBidWNrZXROYW1lOlxuICAgICAgICBvcHRpb25zLnMzQ29uZmlnPy5idWNrZXROYW1lIHx8XG4gICAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfQ0FDSEVfQlVDS0VUX05BTUUgfHxcbiAgICAgICAgXCJcIixcbiAgICAgIHJlZ2lvbjogb3B0aW9ucy5zM0NvbmZpZz8ucmVnaW9uIHx8IHByb2Nlc3MuZW52LkFXU19SRUdJT04gfHwgXCJ1cy1lYXN0LTFcIixcbiAgICAgIGJ1aWxkSWQ6IG9wdGlvbnMuczNDb25maWc/LmJ1aWxkSWQgfHwgYnVpbGRJZCxcbiAgICB9O1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBEeW5hbW9EQiBjb25maWd1cmF0aW9uIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCBvcHRpb25zXG4gICAgdGhpcy5keW5hbW9Db25maWcgPSB7XG4gICAgICB0YWJsZU5hbWU6XG4gICAgICAgIG9wdGlvbnMuZHluYW1vQ29uZmlnPy50YWJsZU5hbWUgfHxcbiAgICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19SRVZBTElEQVRJT05fVEFCTEVfTkFNRSB8fFxuICAgICAgICBcIlwiLFxuICAgICAgcmVnaW9uOlxuICAgICAgICBvcHRpb25zLmR5bmFtb0NvbmZpZz8ucmVnaW9uIHx8IHByb2Nlc3MuZW52LkFXU19SRUdJT04gfHwgXCJ1cy1lYXN0LTFcIixcbiAgICAgIGJ1aWxkSWQ6IG9wdGlvbnMuZHluYW1vQ29uZmlnPy5idWlsZElkIHx8IGJ1aWxkSWQsXG4gICAgfTtcblxuICAgIC8vIEluaXRpYWxpemUgQ2xvdWRGcm9udCBjb25maWd1cmF0aW9uIGZyb20gZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCBvcHRpb25zLlxuICAgIC8vIE9ubHkgc2V0IGZvciBDbG91ZEZyb250LWZyb250ZWQgZGVwbG95bWVudHMgKE5leHRqc0dsb2JhbEZ1bmN0aW9ucy9Db250YWluZXJzKS5cbiAgICAvLyBXaGVuIHVuc2V0LCBvbi1kZW1hbmQgcmV2YWxpZGF0aW9uIHNraXBzIENETiBpbnZhbGlkYXRpb24gYW5kIHJlbGllcyBvbiB0aGVcbiAgICAvLyBkaXN0cmlidXRpb24ncyBjYWNoZSBwb2xpY3kgVFRMIChkcml2ZW4gYnkgdGhlIG9yaWdpbidzIENhY2hlLUNvbnRyb2wgaGVhZGVyKVxuICAgIC8vIHRvIGV2ZW50dWFsbHkgcGljayB1cCBmcmVzaCBjb250ZW50LlxuICAgIHRoaXMuY2xvdWRGcm9udENvbmZpZyA9IHtcbiAgICAgIGRpc3RyaWJ1dGlvbklkUGFyYW1ldGVyTmFtZTpcbiAgICAgICAgb3B0aW9ucy5jbG91ZEZyb250Q29uZmlnPy5kaXN0cmlidXRpb25JZFBhcmFtZXRlck5hbWUgfHxcbiAgICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSB8fFxuICAgICAgICBcIlwiLFxuICAgICAgcmVnaW9uOlxuICAgICAgICBvcHRpb25zLmNsb3VkRnJvbnRDb25maWc/LnJlZ2lvbiB8fFxuICAgICAgICBwcm9jZXNzLmVudi5BV1NfUkVHSU9OIHx8XG4gICAgICAgIFwidXMtZWFzdC0xXCIsXG4gICAgfTtcblxuICAgIC8vIEluaXRpYWxpemUgQVdTIGNsaWVudHNcbiAgICB0aGlzLnMzQ2xpZW50ID0gbmV3IFMzQ2xpZW50KHsgcmVnaW9uOiB0aGlzLnMzQ29uZmlnLnJlZ2lvbiB9KTtcbiAgICB0aGlzLmR5bmFtb0NsaWVudCA9IG5ldyBEeW5hbW9EQkNsaWVudCh7XG4gICAgICByZWdpb246IHRoaXMuZHluYW1vQ29uZmlnLnJlZ2lvbixcbiAgICB9KTtcbiAgICB0aGlzLmNsb3VkRnJvbnRDbGllbnQgPSBuZXcgQ2xvdWRGcm9udENsaWVudCh7XG4gICAgICByZWdpb246IHRoaXMuY2xvdWRGcm9udENvbmZpZy5yZWdpb24sXG4gICAgfSk7XG4gICAgdGhpcy5zc21DbGllbnQgPSBuZXcgU1NNQ2xpZW50KHsgcmVnaW9uOiB0aGlzLmNsb3VkRnJvbnRDb25maWcucmVnaW9uIH0pO1xuXG4gICAgaWYgKCF0aGlzLnMzQ29uZmlnLmJ1Y2tldE5hbWUpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJDREtfTkVYVEpTX0NBQ0hFX0JVQ0tFVF9OQU1FIGVudmlyb25tZW50IHZhcmlhYmxlIG5vdCBzZXQsIFMzIGNhY2hlIGRpc2FibGVkXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5keW5hbW9Db25maWcudGFibGVOYW1lKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiQ0RLX05FWFRKU19SRVZBTElEQVRJT05fVEFCTEVfTkFNRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBub3Qgc2V0LCByZXZhbGlkYXRpb24gdHJhY2tpbmcgZGlzYWJsZWRcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFidWlsZElkKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiQ0RLX05FWFRKU19CVUlMRF9JRCBlbnZpcm9ubWVudCB2YXJpYWJsZSBub3Qgc2V0LCBjYWNoZSBpc29sYXRpb24gbWF5IG5vdCB3b3JrIGNvcnJlY3RseVwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBMb2cgdGhlIG9wdGlvbnMgZm9yIGRlYnVnZ2luZyAob3B0aW9uYWwgdXNhZ2UgdG8gYXZvaWQgdW51c2VkIHBhcmFtZXRlciB3YXJuaW5nKVxuICAgIGlmIChvcHRpb25zLmNvbnRleHQuZGV2KSB7XG4gICAgICB0aGlzLmRlYnVnKFwiUzNEeW5hbW9DYWNoZUhhbmRsZXIgaW5pdGlhbGl6ZWQgaW4gZGV2ZWxvcG1lbnQgbW9kZVwiKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXQoXG4gICAgY2FjaGVLZXk6IHN0cmluZyxcbiAgICBjdHg6IEdldEluY3JlbWVudGFsRmV0Y2hDYWNoZUNvbnRleHQgfCBHZXRJbmNyZW1lbnRhbFJlc3BvbnNlQ2FjaGVDb250ZXh0LFxuICApOiBQcm9taXNlPENhY2hlSGFuZGxlclZhbHVlIHwgbnVsbD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBMb2cgY29udGV4dCBmb3IgZGVidWdnaW5nIChvcHRpb25hbCB1c2FnZSB0byBhdm9pZCB1bnVzZWQgcGFyYW1ldGVyIHdhcm5pbmcpXG4gICAgICBpZiAoY3R4LmtpbmQpIHtcbiAgICAgICAgdGhpcy5kZWJ1ZyhcbiAgICAgICAgICBgUzMgY2FjaGUgZ2V0IG9wZXJhdGlvbiBmb3IgJHtjYWNoZUtleX0gd2l0aCBraW5kOiAke2N0eC5raW5kfWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5zM0NvbmZpZy5idWNrZXROYW1lKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzM0tleSA9IHRoaXMuYnVpbGRTM0tleShjYWNoZUtleSk7XG5cbiAgICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgR2V0T2JqZWN0Q29tbWFuZCh7XG4gICAgICAgIEJ1Y2tldDogdGhpcy5zM0NvbmZpZy5idWNrZXROYW1lLFxuICAgICAgICBLZXk6IHMzS2V5LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zM0NsaWVudC5zZW5kKGNvbW1hbmQpO1xuXG4gICAgICBpZiAoIXJlc3BvbnNlLkJvZHkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIEhhbmRsZSBkaWZmZXJlbnQgY29udGVudCB0eXBlcyBhcHByb3ByaWF0ZWx5IGZvciBkb2N1bWVudGVkIGZvcm1hdHNcbiAgICAgIGxldCBjYWNoZVZhbHVlOiBDYWNoZUhhbmRsZXJWYWx1ZTtcbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuQ29udGVudFR5cGUgfHwgXCJhcHBsaWNhdGlvbi9qc29uXCI7XG5cbiAgICAgIC8vIEhhbmRsZSB0ZXh0LWJhc2VkIGRhdGEgKEpTT04sIEhUTUwsIHBsYWluIHRleHQpIC0gYWxsIGRvY3VtZW50ZWQgZm9ybWF0cyBhcmUgdGV4dC1iYXNlZFxuICAgICAgY29uc3QgYm9keVN0cmluZyA9IGF3YWl0IHJlc3BvbnNlLkJvZHkudHJhbnNmb3JtVG9TdHJpbmcoXCJ1dGYtOFwiKTtcblxuICAgICAgaWYgKGNvbnRlbnRUeXBlLmluY2x1ZGVzKFwiYXBwbGljYXRpb24vanNvblwiKSkge1xuICAgICAgICAvLyBQYXJzZSB0aGUgc3RvcmVkIENhY2hlSGFuZGxlclZhbHVlIGRpcmVjdGx5XG4gICAgICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gcGFyc2VDYWNoZVZhbHVlKGJvZHlTdHJpbmcpO1xuXG4gICAgICAgIC8vIEV4dHJhY3QgdGhlIGFjdHVhbCBDYWNoZUhhbmRsZXJWYWx1ZSAod2l0aG91dCB0YWdzKSBmb3IgcmV0dXJuXG4gICAgICAgIGNhY2hlVmFsdWUgPSB7XG4gICAgICAgICAgbGFzdE1vZGlmaWVkOiBwYXJzZWRWYWx1ZS5sYXN0TW9kaWZpZWQsXG4gICAgICAgICAgdmFsdWU6IHBhcnNlZFZhbHVlLnZhbHVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIENoZWNrIGlmIGNhY2hlIGhhcyBiZWVuIGludmFsaWRhdGVkIGJ5IHRhZyByZXZhbGlkYXRpb25cbiAgICAgICAgY29uc3Qgc3RvcmVkVGFncyA9IHBhcnNlZFZhbHVlLnRhZ3MgfHwgW107XG4gICAgICAgIGlmIChzdG9yZWRUYWdzLmxlbmd0aCA+IDAgJiYgdGhpcy5keW5hbW9Db25maWcudGFibGVOYW1lKSB7XG4gICAgICAgICAgY29uc3QgaXNJbnZhbGlkYXRlZCA9IGF3YWl0IHRoaXMuY2hlY2tJZlJldmFsaWRhdGVkKFxuICAgICAgICAgICAgY2FjaGVWYWx1ZS5sYXN0TW9kaWZpZWQsXG4gICAgICAgICAgICBzdG9yZWRUYWdzLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGlzSW52YWxpZGF0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoYFMzIENBQ0hFIElOVkFMSURBVEVEIEJZIFRBRzogJHtjYWNoZUtleX1gKTtcbiAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgc3RhbGUgUzMgZW50cnlcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZGVsZXRlUzNFbnRyeShzM0tleSk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJbnZhbGlkIGNvbnRlbnQgdHlwZTogJHtjb250ZW50VHlwZX1gKTtcbiAgICAgICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFwcGVuIHNpbmNlIHdlIGFsd2F5cyBzdG9yZSBhcyBKU09OIG5vd1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kZWJ1ZyhgUzMgQ0FDSEUgSElUOiAke2NhY2hlS2V5fSAoJHtzM0tleX0pYCk7XG5cbiAgICAgIHJldHVybiBjYWNoZVZhbHVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBOb1N1Y2hLZXkpIHtcbiAgICAgICAgdGhpcy5kZWJ1ZyhgUzMgQ0FDSEUgTUlTUzogJHtjYWNoZUtleX1gKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIExvZyBhY3R1YWwgZXJyb3JzIChub3QgY2FjaGUgbWlzc2VzKVxuICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgcmV0cmlldmluZyBjYWNoZSBmcm9tIFMzOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNldChcbiAgICBjYWNoZUtleTogc3RyaW5nLFxuICAgIGRhdGE6IEluY3JlbWVudGFsQ2FjaGVWYWx1ZSB8IG51bGwsXG4gICAgY3R4OiBTZXRJbmNyZW1lbnRhbEZldGNoQ2FjaGVDb250ZXh0IHwgU2V0SW5jcmVtZW50YWxSZXNwb25zZUNhY2hlQ29udGV4dCxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAvLyBEZWxldGUgZnJvbSBTMyBhbmQgRHluYW1vREJcbiAgICAgICAgdGhpcy5kZWJ1ZyhgUzMgQ0FDSEUgREVMRVRFOiAke2NhY2hlS2V5fWApO1xuXG4gICAgICAgIGlmICghdGhpcy5zM0NvbmZpZy5idWNrZXROYW1lKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQnVpbGQgUzMga2V5IHdpdGhvdXQgbmVlZGluZyB0byBrbm93IHRoZSBraW5kXG4gICAgICAgIGNvbnN0IHMzS2V5ID0gdGhpcy5idWlsZFMzS2V5KGNhY2hlS2V5KTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRlbGV0ZUNvbW1hbmQgPSBuZXcgRGVsZXRlT2JqZWN0Q29tbWFuZCh7XG4gICAgICAgICAgICBCdWNrZXQ6IHRoaXMuczNDb25maWcuYnVja2V0TmFtZSxcbiAgICAgICAgICAgIEtleTogczNLZXksXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zM0NsaWVudC5zZW5kKGRlbGV0ZUNvbW1hbmQpO1xuICAgICAgICAgIHRoaXMuZGVidWcoYFMzIENBQ0hFIERFTEVURUQ6ICR7czNLZXl9YCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTm9TdWNoS2V5KSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKGBGYWlsZWQgdG8gZGVsZXRlIFMzIGtleSAke3MzS2V5fTpgLCBlcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogQWxzbyBkZWxldGUgdGFnIGFzc29jaWF0aW9ucyBmcm9tIER5bmFtb0RCIGlmIG5lZWRlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIERlYnVnIGxvZ2dpbmcgdG8gdW5kZXJzdGFuZCB3aGF0IGRhdGEgaXMgYmVpbmcgY2FjaGVkXG4gICAgICBjb25zdCB0YWdzID0gZ2V0VGFncyhjdHgpO1xuICAgICAgdGhpcy5kZWJ1ZyhgUzMgQ0FDSEUgU0VUOiBLZXk6ICR7Y2FjaGVLZXl9LCB0YWdzOiAke3RhZ3MgfHwgXCJub25lXCJ9YCk7XG5cbiAgICAgIC8vIE5vdGU6IGN0eC50YWdzIGFyZSBhdmFpbGFibGUgYnV0IHJldmFsaWRhdGlvbiBpcyBoYW5kbGVkIHNlcGFyYXRlbHkgaW4gcmV2YWxpZGF0ZVRhZyBtZXRob2RcbiAgICAgIC8vIExvZyB0YWdzIGZvciBkZWJ1Z2dpbmcgaWYgcHJlc2VudCAob25seSBpbiBTZXRJbmNyZW1lbnRhbEZldGNoQ2FjaGVDb250ZXh0KVxuICAgICAgaWYgKHRhZ3MgJiYgdGFncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuZGVidWcoYFMzIGNhY2hlIGVudHJ5IGZvciAke2NhY2hlS2V5fSBoYXMgdGFnczpgLCB0YWdzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLnMzQ29uZmlnLmJ1Y2tldE5hbWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzM0tleSA9IHRoaXMuYnVpbGRTM0tleShjYWNoZUtleSk7XG5cbiAgICAgIC8vIENyZWF0ZSBDYWNoZUhhbmRsZXJWYWx1ZSBzdHJ1Y3R1cmUgZm9yIFMzIHN0b3JhZ2Ugd2l0aCB0YWdzXG4gICAgICBjb25zdCBjYWNoZUhhbmRsZXJWYWx1ZTogQ2FjaGVIYW5kbGVyVmFsdWUgPSB7XG4gICAgICAgIGxhc3RNb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgICAgdmFsdWU6IGRhdGEsXG4gICAgICB9O1xuXG4gICAgICAvLyBTdG9yZSB0YWdzIHdpdGggdGhlIGNhY2hlIGVudHJ5IGZvciByZXZhbGlkYXRpb24gY2hlY2tpbmdcbiAgICAgIGNvbnN0IGNhY2hlRW50cnlXaXRoVGFncyA9IHtcbiAgICAgICAgLi4uY2FjaGVIYW5kbGVyVmFsdWUsXG4gICAgICAgIHRhZ3M6IHRhZ3MgfHwgW10sXG4gICAgICB9O1xuXG4gICAgICAvLyBTZXJpYWxpemUgd2l0aCBjdXN0b20gaGFuZGxpbmcgZm9yIE1hcCBhbmQgQnVmZmVyIG9iamVjdHNcbiAgICAgIGNvbnN0IGJvZHkgPSBzZXJpYWxpemVDYWNoZVZhbHVlKGNhY2hlRW50cnlXaXRoVGFncyk7XG5cbiAgICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgUHV0T2JqZWN0Q29tbWFuZCh7XG4gICAgICAgIEJ1Y2tldDogdGhpcy5zM0NvbmZpZy5idWNrZXROYW1lLFxuICAgICAgICBLZXk6IHMzS2V5LFxuICAgICAgICBCb2R5OiBib2R5LFxuICAgICAgICBDb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCIsIC8vIEFsd2F5cyBKU09OIHNpbmNlIHdlIHN0b3JlIENhY2hlSGFuZGxlclZhbHVlXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgdGhpcy5zM0NsaWVudC5zZW5kKGNvbW1hbmQpO1xuXG4gICAgICB0aGlzLmRlYnVnKGBTMyBDQUNIRSBTVE9SRUQ6ICR7Y2FjaGVLZXl9ICgke2RhdGEua2luZH0pYCk7XG5cbiAgICAgIC8vIFN0b3JlIHRhZy10by1jYWNoZS1rZXkgbWFwcGluZ3MgaW4gRHluYW1vREIgZm9yIHJldmFsaWRhdGlvblxuICAgICAgaWYgKHRhZ3MgJiYgdGFncy5sZW5ndGggPiAwICYmIHRoaXMuZHluYW1vQ29uZmlnLnRhYmxlTmFtZSkge1xuICAgICAgICB0aGlzLmRlYnVnKGBTVE9SSU5HIFRBR1M6ICR7Y2FjaGVLZXl9IC0+IFske3RhZ3Muam9pbihcIiwgXCIpfV1gKTtcbiAgICAgICAgYXdhaXQgdGhpcy5zdG9yZUR5bmFtb0RCVGFnTWFwcGluZ3MoczNLZXksIHRhZ3MpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igc3RvcmluZyBjYWNoZSB0byBTMzpcIiwgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJldmFsaWRhdGVUYWcodGFnOiBzdHJpbmcgfCBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRhZ3MgPSBBcnJheS5pc0FycmF5KHRhZykgPyB0YWcgOiBbdGFnXTtcbiAgICB0aGlzLmRlYnVnKGBSRVZBTElEQVRJTkcgVEFHUzogWyR7dGFncy5qb2luKFwiLCBcIil9XWApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghdGhpcy5keW5hbW9Db25maWcudGFibGVOYW1lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gUHJvY2VzcyBhbGwgdGFncyBpbiBwYXJhbGxlbCBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbCh0YWdzLm1hcCgodCkgPT4gdGhpcy5yZXZhbGlkYXRlU2luZ2xlVGFnKHQpKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciB1cGRhdGluZyByZXZhbGlkYXRpb24gbWV0YWRhdGE6XCIsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJldmFsaWRhdGVTaW5nbGVUYWcodGFnOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBRdWVyeSBhbGwgcGF0aHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGFnXG4gICAgY29uc3QgcXVlcnlDb21tYW5kID0gbmV3IFF1ZXJ5Q29tbWFuZCh7XG4gICAgICBUYWJsZU5hbWU6IHRoaXMuZHluYW1vQ29uZmlnLnRhYmxlTmFtZSxcbiAgICAgIEtleUNvbmRpdGlvbkV4cHJlc3Npb246IFwicGsgPSA6cGsgQU5EIGJlZ2luc193aXRoKHNrLCA6c2tQcmVmaXgpXCIsXG4gICAgICBFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzOiB7XG4gICAgICAgIFwiOnBrXCI6IHsgUzogdGhpcy5keW5hbW9Db25maWcuYnVpbGRJZCB9LFxuICAgICAgICBcIjpza1ByZWZpeFwiOiB7IFM6IGAke3RhZ30jYCB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHF1ZXJ5UmVzcG9uc2UgPSBhd2FpdCB0aGlzLmR5bmFtb0NsaWVudC5zZW5kKHF1ZXJ5Q29tbWFuZCk7XG5cbiAgICBpZiAocXVlcnlSZXNwb25zZS5JdGVtcykge1xuICAgICAgLy8gRXh0cmFjdCBTMyBrZXlzIGZyb20gc29ydCBrZXlzIChmb3JtYXQ6IFwidGFnI3MzS2V5XCIpXG4gICAgICBjb25zdCBjYWNoZUtleXMgPSBxdWVyeVJlc3BvbnNlLkl0ZW1zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICBjb25zdCBzayA9IGl0ZW0uc2s/LlM7XG4gICAgICAgIGlmIChzaykge1xuICAgICAgICAgIGNvbnN0IGhhc2hJbmRleCA9IHNrLmluZGV4T2YoXCIjXCIpO1xuICAgICAgICAgIHJldHVybiBoYXNoSW5kZXggIT09IC0xID8gc2suc3Vic3RyaW5nKGhhc2hJbmRleCArIDEpIDogbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pLmZpbHRlcihCb29sZWFuKTtcblxuICAgICAgdGhpcy5kZWJ1ZyhcbiAgICAgICAgYFRBRyAke3RhZ306IEZvdW5kICR7Y2FjaGVLZXlzLmxlbmd0aH0gY2FjaGUgZW50cmllcyB0byBpbnZhbGlkYXRlYCxcbiAgICAgICk7XG5cbiAgICAgIC8vIFVwZGF0ZSByZXZhbGlkYXRpb24gdGltZXN0YW1wIGZvciBhbGwgY2FjaGUga2V5cyB3aXRoIHRoaXMgdGFnXG4gICAgICBjb25zdCB1cGRhdGVQcm9taXNlcyA9IHF1ZXJ5UmVzcG9uc2UuSXRlbXMubWFwKGFzeW5jIChpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IHNrID0gaXRlbS5zaz8uUztcbiAgICAgICAgaWYgKHNrKSB7XG4gICAgICAgICAgY29uc3QgdXBkYXRlQ29tbWFuZCA9IG5ldyBVcGRhdGVJdGVtQ29tbWFuZCh7XG4gICAgICAgICAgICBUYWJsZU5hbWU6IHRoaXMuZHluYW1vQ29uZmlnLnRhYmxlTmFtZSxcbiAgICAgICAgICAgIEtleToge1xuICAgICAgICAgICAgICBwazogeyBTOiB0aGlzLmR5bmFtb0NvbmZpZy5idWlsZElkIH0sXG4gICAgICAgICAgICAgIHNrOiB7IFM6IHNrIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgVXBkYXRlRXhwcmVzc2lvbjogXCJTRVQgcmV2YWxpZGF0ZWRBdCA9IDp0aW1lc3RhbXBcIixcbiAgICAgICAgICAgIEV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXM6IHtcbiAgICAgICAgICAgICAgXCI6dGltZXN0YW1wXCI6IHsgTjogRGF0ZS5ub3coKS50b1N0cmluZygpIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuZHluYW1vQ2xpZW50LnNlbmQodXBkYXRlQ29tbWFuZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHVwZGF0ZVByb21pc2VzLmZpbHRlcihCb29sZWFuKSk7XG5cbiAgICAgIC8vIERlbGV0ZSB0aGUgY29ycmVzcG9uZGluZyBTMyBjYWNoZSBlbnRyaWVzIHRvIGludmFsaWRhdGUgdGhlbVxuICAgICAgaWYgKHRoaXMuczNDb25maWcuYnVja2V0TmFtZSkge1xuICAgICAgICBjb25zdCBkZWxldGVQcm9taXNlcyA9IGNhY2hlS2V5cy5tYXAoYXN5bmMgKHMzS2V5KSA9PiB7XG4gICAgICAgICAgaWYgKHMzS2V5KSB7XG4gICAgICAgICAgICBjb25zdCBkZWxldGVDb21tYW5kID0gbmV3IERlbGV0ZU9iamVjdENvbW1hbmQoe1xuICAgICAgICAgICAgICBCdWNrZXQ6IHRoaXMuczNDb25maWcuYnVja2V0TmFtZSxcbiAgICAgICAgICAgICAgS2V5OiBzM0tleSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhd2FpdCB0aGlzLnMzQ2xpZW50LnNlbmQoZGVsZXRlQ29tbWFuZCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAvLyBMb2cgYnV0IGRvbid0IGZhaWwgLSB0aGUgZW50cnkgbWlnaHQgbm90IGV4aXN0IGluIFMzXG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIGRlbGV0ZSBTMyBjYWNoZSBlbnRyeSAke3MzS2V5fTpgLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChkZWxldGVQcm9taXNlcy5maWx0ZXIoQm9vbGVhbikpO1xuICAgICAgfVxuXG4gICAgICAvLyBJbnZhbGlkYXRlIHRoZSBDRE4gZWRnZSBjYWNoZSBzbyBDbG91ZEZyb250LWZyb250ZWQgZGVwbG95bWVudHMgZG9uJ3RcbiAgICAgIC8vIGtlZXAgc2VydmluZyBzdGFsZSByZXNwb25zZXMgdW50aWwgdGhlIGNhY2hlIHBvbGljeSdzIFRUTCBuYXR1cmFsbHkgZXhwaXJlcy5cbiAgICAgIGlmICh0aGlzLmNsb3VkRnJvbnRDb25maWcuZGlzdHJpYnV0aW9uSWRQYXJhbWV0ZXJOYW1lKSB7XG4gICAgICAgIGNvbnN0IGludmFsaWRhdGlvblBhdGhzID0gY2FjaGVLZXlzXG4gICAgICAgICAgLmZpbHRlcigoczNLZXkpOiBzM0tleSBpcyBzdHJpbmcgPT4gQm9vbGVhbihzM0tleSkpXG4gICAgICAgICAgLm1hcCgoczNLZXkpID0+IHRoaXMuczNLZXlUb0ludmFsaWRhdGlvblBhdGgoczNLZXkpKTtcbiAgICAgICAgYXdhaXQgdGhpcy5pbnZhbGlkYXRlQ2xvdWRGcm9udFBhdGhzKGludmFsaWRhdGlvblBhdGhzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV2ZXJzZXMgYGJ1aWxkUzNLZXlgIHRvIHJlY292ZXIgdGhlIHJlcXVlc3QgcGF0aCBDbG91ZEZyb250IGNhY2hlZCB0aGVcbiAgICogcmVzcG9uc2UgdW5kZXIuIEZldGNoLWNhY2hlIGVudHJpZXMgKG9wYXF1ZSBoYXNoIGtleXMsIG5vdCBwYWdlIHJvdXRlcylcbiAgICogdHJhbnNsYXRlIHRvIGEgcGF0aCB0aGF0IHdvbid0IG1hdGNoIGFueXRoaW5nIGNhY2hlZCwgd2hpY2ggaXMgaGFybWxlc3MuXG4gICAqL1xuICBwcml2YXRlIHMzS2V5VG9JbnZhbGlkYXRpb25QYXRoKHMzS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHByZWZpeCA9IGAke3RoaXMuczNDb25maWcuYnVpbGRJZH0vYDtcbiAgICBjb25zdCB3aXRob3V0UHJlZml4ID0gczNLZXkuc3RhcnRzV2l0aChwcmVmaXgpXG4gICAgICA/IHMzS2V5LnNsaWNlKHByZWZpeC5sZW5ndGgpXG4gICAgICA6IHMzS2V5O1xuICAgIGNvbnN0IHdpdGhvdXRTdWZmaXggPSB3aXRob3V0UHJlZml4LmVuZHNXaXRoKFwiLmpzb25cIilcbiAgICAgID8gd2l0aG91dFByZWZpeC5zbGljZSgwLCAtXCIuanNvblwiLmxlbmd0aClcbiAgICAgIDogd2l0aG91dFByZWZpeDtcblxuICAgIHJldHVybiB3aXRob3V0U3VmZml4ID09PSBcImluZGV4XCIgPyBcIi9cIiA6IGAvJHt3aXRob3V0U3VmZml4fWA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGludmFsaWRhdGVDbG91ZEZyb250UGF0aHMocGF0aHM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdW5pcXVlUGF0aHMgPSBBcnJheS5mcm9tKG5ldyBTZXQocGF0aHMpKTtcbiAgICBpZiAodW5pcXVlUGF0aHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRpc3RyaWJ1dGlvbklkID0gYXdhaXQgdGhpcy5nZXREaXN0cmlidXRpb25JZCgpO1xuICAgICAgaWYgKCFkaXN0cmlidXRpb25JZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGVidWcoXG4gICAgICAgIGBDTE9VREZST05UIElOVkFMSURBVElPTjogWyR7dW5pcXVlUGF0aHMuam9pbihcIiwgXCIpfV0gb24gZGlzdHJpYnV0aW9uICR7ZGlzdHJpYnV0aW9uSWR9YCxcbiAgICAgICk7XG5cbiAgICAgIGF3YWl0IHRoaXMuY2xvdWRGcm9udENsaWVudC5zZW5kKFxuICAgICAgICBuZXcgQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCh7XG4gICAgICAgICAgRGlzdHJpYnV0aW9uSWQ6IGRpc3RyaWJ1dGlvbklkLFxuICAgICAgICAgIEludmFsaWRhdGlvbkJhdGNoOiB7XG4gICAgICAgICAgICBDYWxsZXJSZWZlcmVuY2U6IHJhbmRvbVVVSUQoKSxcbiAgICAgICAgICAgIFBhdGhzOiB7XG4gICAgICAgICAgICAgIFF1YW50aXR5OiB1bmlxdWVQYXRocy5sZW5ndGgsXG4gICAgICAgICAgICAgIEl0ZW1zOiB1bmlxdWVQYXRocyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBMb2cgYnV0IGRvbid0IGZhaWwgLSB0aGUgUzMvRHluYW1vREIgaW52YWxpZGF0aW9uIGFscmVhZHkgc3VjY2VlZGVkLFxuICAgICAgLy8gYW5kIHRoZSBDbG91ZEZyb250IGNhY2hlIHBvbGljeSBUVEwgcHJvdmlkZXMgYW4gZXZlbnR1YWwgZmFsbGJhY2suXG4gICAgICBjb25zb2xlLndhcm4oXCJGYWlsZWQgdG8gY3JlYXRlIENsb3VkRnJvbnQgaW52YWxpZGF0aW9uOlwiLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBkaXN0cmlidXRpb24ncyBwaHlzaWNhbCBJRCB2aWEgU1NNIFBhcmFtZXRlciBTdG9yZSwgY2FjaGluZ1xuICAgKiBpdCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoaXMgaW5zdGFuY2UuIFNlZSBgQ2xvdWRGcm9udEludmFsaWRhdGlvbkNvbmZpZ2BcbiAgICogZm9yIHdoeSB0aGlzIGluZGlyZWN0aW9uIChyYXRoZXIgdGhhbiBhIHBsYWluIGVudiB2YXIpIGlzIG5lY2Vzc2FyeS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0RGlzdHJpYnV0aW9uSWQoKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gICAgaWYgKHRoaXMuY2FjaGVkRGlzdHJpYnV0aW9uSWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmNhY2hlZERpc3RyaWJ1dGlvbklkO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jbG91ZEZyb250Q29uZmlnLmRpc3RyaWJ1dGlvbklkUGFyYW1ldGVyTmFtZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNzbUNsaWVudC5zZW5kKFxuICAgICAgbmV3IEdldFBhcmFtZXRlckNvbW1hbmQoe1xuICAgICAgICBOYW1lOiB0aGlzLmNsb3VkRnJvbnRDb25maWcuZGlzdHJpYnV0aW9uSWRQYXJhbWV0ZXJOYW1lLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHRoaXMuY2FjaGVkRGlzdHJpYnV0aW9uSWQgPSByZXNwb25zZS5QYXJhbWV0ZXI/LlZhbHVlIHx8IG51bGw7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVkRGlzdHJpYnV0aW9uSWQ7XG4gIH1cblxuICBhc3luYyByZXNldFJlcXVlc3RDYWNoZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBUaGlzIGhhbmRsZXIgZG9lc24ndCBtYWludGFpbiByZXF1ZXN0LWxldmVsIGNhY2hlIHN0YXRlXG4gICAgLy8gVGhlIGFjdHVhbCBjYWNoZSBjbGVhcmluZyBpcyBoYW5kbGVkIGJ5IHRoZSBtZW1vcnkgY2FjaGUgaGFuZGxlclxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFMzS2V5KGNhY2hlS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIC8vIFVzZSBCVUlMRF9JRCBwcmVmaXhpbmc6IHtidWlsZElkfS97Y2FjaGVLZXl9Lmpzb25cblxuICAgIC8vIEhhbmRsZSBlZGdlIGNhc2VzOlxuICAgIC8vIC0gUm9vdCBwYXRoIFwiL1wiIHNob3VsZCBiZWNvbWUgXCJpbmRleFwiIG9yIHNpbWlsYXJcbiAgICAvLyAtIFJlbW92ZSBsZWFkaW5nIHNsYXNoZXMgdG8gcHJldmVudCBlbXB0eSBmb2xkZXJzXG4gICAgbGV0IGNsZWFuQ2FjaGVLZXkgPSBjYWNoZUtleTtcblxuICAgIGlmIChjYWNoZUtleSA9PT0gXCIvXCIgfHwgY2FjaGVLZXkgPT09IFwiXCIpIHtcbiAgICAgIGNsZWFuQ2FjaGVLZXkgPSBcImluZGV4XCI7XG4gICAgfSBlbHNlIGlmIChjYWNoZUtleS5zdGFydHNXaXRoKFwiL1wiKSkge1xuICAgICAgY2xlYW5DYWNoZUtleSA9IGNhY2hlS2V5LnNsaWNlKDEpO1xuICAgIH1cblxuICAgIHJldHVybiBqb2luKHRoaXMuczNDb25maWcuYnVpbGRJZCwgYCR7Y2xlYW5DYWNoZUtleX0uanNvbmApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdG9yZUR5bmFtb0RCVGFnTWFwcGluZ3MoXG4gICAgczNLZXk6IHN0cmluZyxcbiAgICB0YWdzOiBzdHJpbmdbXSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVwZGF0ZVByb21pc2VzID0gdGFncy5tYXAoYXN5bmMgKHRhZykgPT4ge1xuICAgICAgICBjb25zdCB0YWdDYWNoZUtleSA9IGAke3RhZ30jJHtzM0tleX1gO1xuICAgICAgICBjb25zdCB1cGRhdGVDb21tYW5kID0gbmV3IFVwZGF0ZUl0ZW1Db21tYW5kKHtcbiAgICAgICAgICBUYWJsZU5hbWU6IHRoaXMuZHluYW1vQ29uZmlnLnRhYmxlTmFtZSxcbiAgICAgICAgICBLZXk6IHtcbiAgICAgICAgICAgIHBrOiB7IFM6IHRoaXMuZHluYW1vQ29uZmlnLmJ1aWxkSWQgfSxcbiAgICAgICAgICAgIHNrOiB7IFM6IHRhZ0NhY2hlS2V5IH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBVcGRhdGVFeHByZXNzaW9uOlxuICAgICAgICAgICAgXCJTRVQgY3JlYXRlZEF0ID0gaWZfbm90X2V4aXN0cyhjcmVhdGVkQXQsIDpub3cpLCByZXZhbGlkYXRlZEF0ID0gOm5vd1wiLFxuICAgICAgICAgIEV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXM6IHtcbiAgICAgICAgICAgIFwiOm5vd1wiOiB7IE46IERhdGUubm93KCkudG9TdHJpbmcoKSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGF3YWl0IHRoaXMuZHluYW1vQ2xpZW50LnNlbmQodXBkYXRlQ29tbWFuZCk7XG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwodXBkYXRlUHJvbWlzZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igc3RvcmluZyBEeW5hbW9EQiB0YWcgbWFwcGluZ3M6XCIsIGVycm9yKTtcbiAgICAgIC8vIERvbid0IHRocm93IC0gY2FjaGUgc3RvcmFnZSBzaG91bGQgY29udGludWUgZXZlbiBpZiB0YWcgbWFwcGluZyBmYWlsc1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tJZlJldmFsaWRhdGVkKFxuICAgIGNhY2hlTGFzdE1vZGlmaWVkOiBudW1iZXIsXG4gICAgdGFnczogc3RyaW5nW10sXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICAvLyBDaGVjayBlYWNoIHRhZyB0byBzZWUgaWYgaXQgaGFzIGJlZW4gcmV2YWxpZGF0ZWQgYWZ0ZXIgdGhlIGNhY2hlIHdhcyBjcmVhdGVkXG4gICAgICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5Q29tbWFuZCA9IG5ldyBRdWVyeUNvbW1hbmQoe1xuICAgICAgICAgIFRhYmxlTmFtZTogdGhpcy5keW5hbW9Db25maWcudGFibGVOYW1lLFxuICAgICAgICAgIEtleUNvbmRpdGlvbkV4cHJlc3Npb246IFwicGsgPSA6cGsgQU5EIGJlZ2luc193aXRoKHNrLCA6c2tQcmVmaXgpXCIsXG4gICAgICAgICAgRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICAgXCI6cGtcIjogeyBTOiB0aGlzLmR5bmFtb0NvbmZpZy5idWlsZElkIH0sXG4gICAgICAgICAgICBcIjpza1ByZWZpeFwiOiB7IFM6IGAke3RhZ30jYCB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgUHJvamVjdGlvbkV4cHJlc3Npb246IFwicmV2YWxpZGF0ZWRBdFwiLFxuICAgICAgICAgIExpbWl0OiAxLCAvLyBXZSBvbmx5IG5lZWQgdG8gY2hlY2sgaWYgYW55IGVudHJ5IGV4aXN0cyB3aXRoIHRoaXMgdGFnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHF1ZXJ5UmVzcG9uc2UgPSBhd2FpdCB0aGlzLmR5bmFtb0NsaWVudC5zZW5kKHF1ZXJ5Q29tbWFuZCk7XG5cbiAgICAgICAgaWYgKHF1ZXJ5UmVzcG9uc2UuSXRlbXMgJiYgcXVlcnlSZXNwb25zZS5JdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcmV2YWxpZGF0ZWRBdCA9IHF1ZXJ5UmVzcG9uc2UuSXRlbXNbMF0ucmV2YWxpZGF0ZWRBdD8uTjtcbiAgICAgICAgICBpZiAocmV2YWxpZGF0ZWRBdCAmJiBwYXJzZUludChyZXZhbGlkYXRlZEF0KSA+IGNhY2hlTGFzdE1vZGlmaWVkKSB7XG4gICAgICAgICAgICB0aGlzLmRlYnVnKFxuICAgICAgICAgICAgICBgVGFnICR7dGFnfSB3YXMgcmV2YWxpZGF0ZWQgYXQgJHtyZXZhbGlkYXRlZEF0fSwgY2FjaGUgY3JlYXRlZCBhdCAke2NhY2hlTGFzdE1vZGlmaWVkfWAsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIENhY2hlIGlzIGludmFsaWRhdGVkXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTsgLy8gQ2FjaGUgaXMgc3RpbGwgdmFsaWRcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGNoZWNraW5nIGNhY2hlIHJldmFsaWRhdGlvbjpcIiwgZXJyb3IpO1xuICAgICAgLy8gT24gZXJyb3IsIGFzc3VtZSBjYWNoZSBpcyB2YWxpZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjYWNoZSBtaXNzZXNcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlbGV0ZVMzRW50cnkoczNLZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBpZiAoIXRoaXMuczNDb25maWcuYnVja2V0TmFtZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRlbGV0ZUNvbW1hbmQgPSBuZXcgRGVsZXRlT2JqZWN0Q29tbWFuZCh7XG4gICAgICAgIEJ1Y2tldDogdGhpcy5zM0NvbmZpZy5idWNrZXROYW1lLFxuICAgICAgICBLZXk6IHMzS2V5LFxuICAgICAgfSk7XG5cbiAgICAgIGF3YWl0IHRoaXMuczNDbGllbnQuc2VuZChkZWxldGVDb21tYW5kKTtcbiAgICAgIHRoaXMuZGVidWcoYERlbGV0ZWQgc3RhbGUgUzMgY2FjaGUgZW50cnk6ICR7czNLZXl9YCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIExvZyBidXQgZG9uJ3QgZmFpbCAtIHRoZSBlbnRyeSBtaWdodCBub3QgZXhpc3QgaW4gUzNcbiAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIGRlbGV0ZSBzdGFsZSBTMyBjYWNoZSBlbnRyeSAke3MzS2V5fTpgLCBlcnJvcik7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -4,17 +4,29 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
// Mock AWS SDK
|
|
5
5
|
jest.mock("@aws-sdk/client-s3");
|
|
6
6
|
jest.mock("@aws-sdk/client-dynamodb");
|
|
7
|
+
jest.mock("@aws-sdk/client-cloudfront");
|
|
8
|
+
jest.mock("@aws-sdk/client-ssm");
|
|
9
|
+
const client_cloudfront_1 = require("@aws-sdk/client-cloudfront");
|
|
7
10
|
const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
|
|
8
11
|
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
12
|
+
const client_ssm_1 = require("@aws-sdk/client-ssm");
|
|
9
13
|
const s3_cache_handler_1 = require("./s3-cache-handler");
|
|
10
14
|
const mockS3Send = jest.fn();
|
|
11
15
|
const mockDynamoSend = jest.fn();
|
|
16
|
+
const mockCloudFrontSend = jest.fn();
|
|
17
|
+
const mockSsmSend = jest.fn();
|
|
12
18
|
client_s3_1.S3Client.mockImplementation(() => ({
|
|
13
19
|
send: mockS3Send,
|
|
14
20
|
}));
|
|
15
21
|
client_dynamodb_1.DynamoDBClient.mockImplementation(() => ({
|
|
16
22
|
send: mockDynamoSend,
|
|
17
23
|
}));
|
|
24
|
+
client_cloudfront_1.CloudFrontClient.mockImplementation(() => ({
|
|
25
|
+
send: mockCloudFrontSend,
|
|
26
|
+
}));
|
|
27
|
+
client_ssm_1.SSMClient.mockImplementation(() => ({
|
|
28
|
+
send: mockSsmSend,
|
|
29
|
+
}));
|
|
18
30
|
describe("S3DynamoCacheHandler", () => {
|
|
19
31
|
let handler;
|
|
20
32
|
let mockContext;
|
|
@@ -38,6 +50,8 @@ describe("S3DynamoCacheHandler", () => {
|
|
|
38
50
|
// Reset mocks
|
|
39
51
|
mockS3Send.mockReset();
|
|
40
52
|
mockDynamoSend.mockReset();
|
|
53
|
+
mockCloudFrontSend.mockReset();
|
|
54
|
+
mockSsmSend.mockReset();
|
|
41
55
|
});
|
|
42
56
|
afterEach(() => {
|
|
43
57
|
// Clean up environment variables
|
|
@@ -45,6 +59,7 @@ describe("S3DynamoCacheHandler", () => {
|
|
|
45
59
|
delete process.env.CDK_NEXTJS_REVALIDATION_TABLE_NAME;
|
|
46
60
|
delete process.env.CDK_NEXTJS_BUILD_ID;
|
|
47
61
|
delete process.env.AWS_REGION;
|
|
62
|
+
delete process.env.CDK_NEXTJS_DISTRIBUTION_ID_PARAM_NAME;
|
|
48
63
|
// Restore console.warn
|
|
49
64
|
jest.restoreAllMocks();
|
|
50
65
|
});
|
|
@@ -186,6 +201,56 @@ describe("S3DynamoCacheHandler", () => {
|
|
|
186
201
|
// Should not throw
|
|
187
202
|
await expect(handler.revalidateTag("error-tag")).resolves.not.toThrow();
|
|
188
203
|
});
|
|
204
|
+
it("should create a CloudFront invalidation for affected paths when a distribution parameter is configured", async () => {
|
|
205
|
+
process.env.CDK_NEXTJS_DISTRIBUTION_ID_PARAM_NAME = "test-param-name";
|
|
206
|
+
const handlerWithDistribution = new s3_cache_handler_1.S3CacheHandler({
|
|
207
|
+
context: mockContext,
|
|
208
|
+
});
|
|
209
|
+
const mockQueryResponse = {
|
|
210
|
+
Items: [
|
|
211
|
+
{ sk: { S: "test-tag#test-build-id/isr/1.json" } },
|
|
212
|
+
{ sk: { S: "test-tag#test-build-id/isr/2.json" } },
|
|
213
|
+
],
|
|
214
|
+
};
|
|
215
|
+
mockDynamoSend.mockResolvedValueOnce(mockQueryResponse);
|
|
216
|
+
mockDynamoSend.mockResolvedValue({}); // For update commands
|
|
217
|
+
mockS3Send.mockResolvedValue({}); // For delete commands
|
|
218
|
+
mockSsmSend.mockResolvedValue({
|
|
219
|
+
Parameter: { Value: "test-distribution-id" },
|
|
220
|
+
});
|
|
221
|
+
mockCloudFrontSend.mockResolvedValue({});
|
|
222
|
+
await handlerWithDistribution.revalidateTag("test-tag");
|
|
223
|
+
expect(mockSsmSend).toHaveBeenCalledWith(expect.any(Object));
|
|
224
|
+
expect(mockCloudFrontSend).toHaveBeenCalledWith(expect.any(client_cloudfront_1.CreateInvalidationCommand));
|
|
225
|
+
const [invalidationInput] = client_cloudfront_1.CreateInvalidationCommand.mock.calls[0];
|
|
226
|
+
expect(invalidationInput.DistributionId).toBe("test-distribution-id");
|
|
227
|
+
expect(invalidationInput.InvalidationBatch.Paths.Items).toEqual(expect.arrayContaining(["/isr/1", "/isr/2"]));
|
|
228
|
+
});
|
|
229
|
+
it("should not call SSM or CloudFront when no distribution parameter is configured", async () => {
|
|
230
|
+
const mockQueryResponse = {
|
|
231
|
+
Items: [{ sk: { S: "test-tag#test-build-id/isr/1.json" } }],
|
|
232
|
+
};
|
|
233
|
+
mockDynamoSend.mockResolvedValueOnce(mockQueryResponse);
|
|
234
|
+
mockDynamoSend.mockResolvedValue({});
|
|
235
|
+
mockS3Send.mockResolvedValue({});
|
|
236
|
+
await handler.revalidateTag("test-tag");
|
|
237
|
+
expect(mockSsmSend).not.toHaveBeenCalled();
|
|
238
|
+
expect(mockCloudFrontSend).not.toHaveBeenCalled();
|
|
239
|
+
});
|
|
240
|
+
it("should handle SSM/CloudFront invalidation errors gracefully", async () => {
|
|
241
|
+
process.env.CDK_NEXTJS_DISTRIBUTION_ID_PARAM_NAME = "test-param-name";
|
|
242
|
+
const handlerWithDistribution = new s3_cache_handler_1.S3CacheHandler({
|
|
243
|
+
context: mockContext,
|
|
244
|
+
});
|
|
245
|
+
const mockQueryResponse = {
|
|
246
|
+
Items: [{ sk: { S: "test-tag#test-build-id/isr/1.json" } }],
|
|
247
|
+
};
|
|
248
|
+
mockDynamoSend.mockResolvedValueOnce(mockQueryResponse);
|
|
249
|
+
mockDynamoSend.mockResolvedValue({});
|
|
250
|
+
mockS3Send.mockResolvedValue({});
|
|
251
|
+
mockSsmSend.mockRejectedValueOnce(new Error("SSM Error"));
|
|
252
|
+
await expect(handlerWithDistribution.revalidateTag("test-tag")).resolves.not.toThrow();
|
|
253
|
+
});
|
|
189
254
|
});
|
|
190
255
|
describe("resetRequestCache", () => {
|
|
191
256
|
it("should complete without errors", async () => {
|
|
@@ -211,4 +276,4 @@ describe("S3DynamoCacheHandler", () => {
|
|
|
211
276
|
});
|
|
212
277
|
});
|
|
213
278
|
});
|
|
214
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMtY2FjaGUtaGFuZGxlci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXIvczMtY2FjaGUtaGFuZGxlci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0RBQXNEO0FBQ3RELGVBQWU7QUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBRXRDLDhEQUlrQztBQUNsQyxrREFLNEI7QUFPNUIseURBQW9EO0FBRXBELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUM3QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFFaEMsb0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNoRCxJQUFJLEVBQUUsVUFBVTtDQUNqQixDQUFDLENBQUMsQ0FBQztBQUVILGdDQUE0QixDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDdEQsSUFBSSxFQUFFLGNBQWM7Q0FDckIsQ0FBQyxDQUFDLENBQUM7QUFFSixRQUFRLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxFQUFFO0lBQ3BDLElBQUksT0FBdUIsQ0FBQztJQUM1QixJQUFJLFdBQWdDLENBQUM7SUFFckMseUNBQXlDO0lBQ3pDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxJQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUMsVUFBVSxFQUFFLElBQWE7UUFDekIsSUFBSTtLQUNMLENBQUMsQ0FBQztJQUVILFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxXQUFXLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUF5QixDQUFDO1FBRXBELCtCQUErQjtRQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixHQUFHLGFBQWEsQ0FBQztRQUN6RCxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxHQUFHLFlBQVksQ0FBQztRQUM5RCxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixHQUFHLGVBQWUsQ0FBQztRQUNsRCxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7UUFFckMsNEVBQTRFO1FBQzVFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFakQsT0FBTyxHQUFHLElBQUksaUNBQWMsQ0FBQztZQUMzQixPQUFPLEVBQUUsV0FBVztTQUNyQixDQUFDLENBQUM7UUFFSCxjQUFjO1FBQ2QsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3ZCLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUM3QixDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixpQ0FBaUM7UUFDakMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDO1FBQ2hELE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQztRQUN0RCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUM7UUFDdkMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztRQUU5Qix1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7UUFDbkIsRUFBRSxDQUFDLHFEQUFxRCxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ25FLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQztZQUVoRCxNQUFNLG9CQUFvQixHQUFHLElBQUksaUNBQWMsQ0FBQztnQkFDOUMsT0FBTyxFQUFFLFdBQVc7YUFDckIsQ0FBQyxDQUFDO1lBRUgsTUFBTSxNQUFNLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFO2dCQUN4RCxJQUFJLGdEQUErQjtnQkFDbkMsVUFBVSxFQUFFLEtBQUs7YUFDbEIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtDQUErQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzdELE1BQU0sUUFBUSxHQUEwQjtnQkFDdEMsSUFBSSwyQ0FBMEI7Z0JBQzlCLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLE9BQU8sRUFBRSxTQUFTO2dCQUNsQixPQUFPLEVBQUUsU0FBUztnQkFDbEIsU0FBUyxFQUFFLFNBQVM7Z0JBQ3BCLFdBQVcsRUFBRSxTQUFTO2dCQUN0QixNQUFNLEVBQUUsU0FBUzthQUNsQixDQUFDO1lBRUYsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLFlBQVksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUN4QixLQUFLLEVBQUUsUUFBUTthQUNoQixDQUFDO1lBRUYsVUFBVSxDQUFDLHFCQUFxQixDQUFDO2dCQUMvQixJQUFJLEVBQUU7b0JBQ0osaUJBQWlCLEVBQUUsSUFBSTt5QkFDcEIsRUFBRSxFQUFFO3lCQUNKLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ2pEO2dCQUNELFdBQVcsRUFBRSxrQkFBa0I7YUFDaEMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRTtnQkFDM0MsSUFBSSxnREFBK0I7Z0JBQ25DLFVBQVUsRUFBRSxLQUFLO2FBQ2xCLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsNEJBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZDQUE2QyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzNELFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQztnQkFDL0IsSUFBSSxFQUFFLElBQUk7YUFDWCxDQUFDLENBQUM7WUFFSCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFO2dCQUM5QyxJQUFJLGdEQUErQjtnQkFDbkMsVUFBVSxFQUFFLEtBQUs7YUFDbEIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHlDQUF5QyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3ZELFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBRXhELE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzVDLElBQUksZ0RBQStCO2dCQUNuQyxVQUFVLEVBQUUsS0FBSzthQUNsQixDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO1FBQ25CLEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM5QyxNQUFNLFFBQVEsR0FBMEI7Z0JBQ3RDLElBQUksMkNBQTBCO2dCQUM5QixJQUFJLEVBQUUsdUJBQXVCO2dCQUM3QixPQUFPLEVBQUUsU0FBUztnQkFDbEIsT0FBTyxFQUFFLFNBQVM7Z0JBQ2xCLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixXQUFXLEVBQUUsU0FBUztnQkFDdEIsTUFBTSxFQUFFLFNBQVM7YUFDbEIsQ0FBQztZQUVGLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFFckMsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFbkUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsNEJBQWdCLENBQUMsQ0FBQyxDQUFDO1lBQ3RFLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxvQkFBb0IsQ0FDekMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxtQ0FBaUIsQ0FBQyxDQUM5QixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbURBQW1ELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDakUsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDO1lBRWhELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxpQ0FBYyxDQUFDO2dCQUM5QyxPQUFPLEVBQUUsV0FBVzthQUNyQixDQUFDLENBQUM7WUFFSCxNQUFNLFFBQVEsR0FBMEI7Z0JBQ3RDLElBQUksMkNBQTBCO2dCQUM5QixJQUFJLEVBQUUsd0JBQXdCO2dCQUM5QixPQUFPLEVBQUUsU0FBUztnQkFDbEIsT0FBTyxFQUFFLFNBQVM7Z0JBQ2xCLFNBQVMsRUFBRSxTQUFTO2dCQUNwQixXQUFXLEVBQUUsU0FBUztnQkFDdEIsTUFBTSxFQUFFLFNBQVM7YUFDbEIsQ0FBQztZQUVGLE1BQU0sb0JBQW9CLENBQUMsR0FBRyxDQUM1QixlQUFlLEVBQ2YsUUFBUSxFQUNSLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUNyQixDQUFDO1lBRUYsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2xELE1BQU0sUUFBUSxHQUEwQjtnQkFDdEMsSUFBSSwyQ0FBMEI7Z0JBQzlCLElBQUksRUFBRSx5QkFBeUI7Z0JBQy9CLE9BQU8sRUFBRSxTQUFTO2dCQUNsQixPQUFPLEVBQUUsU0FBUztnQkFDbEIsU0FBUyxFQUFFLFNBQVM7Z0JBQ3BCLFdBQVcsRUFBRSxTQUFTO2dCQUN0QixNQUFNLEVBQUUsU0FBUzthQUNsQixDQUFDO1lBRUYsVUFBVSxDQUFDLHFCQUFxQixDQUFDLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFFNUQsbUJBQW1CO1lBQ25CLE1BQU0sTUFBTSxDQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUN6RCxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxlQUFlLEVBQUUsR0FBRyxFQUFFO1FBQzdCLEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUMzRCxNQUFNLGlCQUFpQixHQUFHO2dCQUN4QixLQUFLLEVBQUU7b0JBQ0wsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsRUFBRTtvQkFDckMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsc0JBQXNCLEVBQUUsRUFBRTtpQkFDdEM7YUFDRixDQUFDO1lBRUYsY0FBYyxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDeEQsY0FBYyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsc0JBQXNCO1lBQzVELFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLHNCQUFzQjtZQUV4RCxNQUFNLE9BQU8sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFeEMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsOEJBQVksQ0FBQyxDQUFDLENBQUM7WUFDdEUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLG9CQUFvQixDQUN6QyxNQUFNLENBQUMsR0FBRyxDQUFDLG1DQUFpQixDQUFDLENBQzlCLENBQUM7WUFDRixNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQywrQkFBbUIsQ0FBQyxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNkRBQTZELEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDM0UsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxDQUFDO1lBRXRELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxpQ0FBYyxDQUFDO2dCQUM3QyxPQUFPLEVBQUUsV0FBVzthQUNyQixDQUFDLENBQUM7WUFFSCxNQUFNLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUVwRCxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMENBQTBDLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDeEQsY0FBYyxDQUFDLHFCQUFxQixDQUFDLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUVsRSxtQkFBbUI7WUFDbkIsTUFBTSxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7UUFDakMsRUFBRSxDQUFDLGdDQUFnQyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzlDLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEdBQUcsRUFBRTtRQUNwQyxFQUFFLENBQUMsNENBQTRDLEVBQUUsR0FBRyxFQUFFO1lBQ3BELE1BQU0sYUFBYSxHQUFHLElBQUksaUNBQWMsQ0FBQztnQkFDdkMsT0FBTyxFQUFFLFdBQVc7Z0JBQ3BCLFFBQVEsRUFBRTtvQkFDUixVQUFVLEVBQUUsZUFBZTtvQkFDM0IsTUFBTSxFQUFFLFdBQVc7b0JBQ25CLE9BQU8sRUFBRSxjQUFjO2lCQUN4QjtnQkFDRCxZQUFZLEVBQUU7b0JBQ1osU0FBUyxFQUFFLGNBQWM7b0JBQ3pCLE1BQU0sRUFBRSxXQUFXO29CQUNuQixPQUFPLEVBQUUsY0FBYztpQkFDeEI7YUFDRixDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDdEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG4vLyBNb2NrIEFXUyBTREtcbmplc3QubW9jayhcIkBhd3Mtc2RrL2NsaWVudC1zM1wiKTtcbmplc3QubW9jayhcIkBhd3Mtc2RrL2NsaWVudC1keW5hbW9kYlwiKTtcblxuaW1wb3J0IHtcbiAgRHluYW1vREJDbGllbnQsXG4gIFF1ZXJ5Q29tbWFuZCxcbiAgVXBkYXRlSXRlbUNvbW1hbmQsXG59IGZyb20gXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIjtcbmltcG9ydCB7XG4gIFMzQ2xpZW50LFxuICBHZXRPYmplY3RDb21tYW5kLFxuICBQdXRPYmplY3RDb21tYW5kLFxuICBEZWxldGVPYmplY3RDb21tYW5kLFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXMzXCI7XG5pbXBvcnQgeyBDYWNoZUhhbmRsZXJDb250ZXh0IH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvbGliL2luY3JlbWVudGFsLWNhY2hlXCI7XG5pbXBvcnQge1xuICBJbmNyZW1lbnRhbENhY2hlVmFsdWUsXG4gIENhY2hlZFJvdXRlS2luZCxcbiAgSW5jcmVtZW50YWxDYWNoZUtpbmQsXG59IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL3Jlc3BvbnNlLWNhY2hlXCI7XG5pbXBvcnQgeyBTM0NhY2hlSGFuZGxlciB9IGZyb20gXCIuL3MzLWNhY2hlLWhhbmRsZXJcIjtcblxuY29uc3QgbW9ja1MzU2VuZCA9IGplc3QuZm4oKTtcbmNvbnN0IG1vY2tEeW5hbW9TZW5kID0gamVzdC5mbigpO1xuXG4oUzNDbGllbnQgYXMgamVzdC5Nb2NrKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHtcbiAgc2VuZDogbW9ja1MzU2VuZCxcbn0pKTtcblxuKER5bmFtb0RCQ2xpZW50IGFzIGplc3QuTW9jaykubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gIHNlbmQ6IG1vY2tEeW5hbW9TZW5kLFxufSkpO1xuXG5kZXNjcmliZShcIlMzRHluYW1vQ2FjaGVIYW5kbGVyXCIsICgpID0+IHtcbiAgbGV0IGhhbmRsZXI6IFMzQ2FjaGVIYW5kbGVyO1xuICBsZXQgbW9ja0NvbnRleHQ6IENhY2hlSGFuZGxlckNvbnRleHQ7XG5cbiAgLy8gSGVscGVyIHRvIGNyZWF0ZSBzZXQgY29udGV4dCB3aXRoIHRhZ3NcbiAgY29uc3QgY3JlYXRlU2V0Q29udGV4dCA9ICh0YWdzOiBzdHJpbmdbXSkgPT4gKHtcbiAgICBmZXRjaENhY2hlOiB0cnVlIGFzIGNvbnN0LFxuICAgIHRhZ3MsXG4gIH0pO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG1vY2tDb250ZXh0ID0geyBkZXY6IGZhbHNlIH0gYXMgQ2FjaGVIYW5kbGVyQ29udGV4dDtcblxuICAgIC8vIFNldCB1cCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0NBQ0hFX0JVQ0tFVF9OQU1FID0gXCJ0ZXN0LWJ1Y2tldFwiO1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfUkVWQUxJREFUSU9OX1RBQkxFX05BTUUgPSBcInRlc3QtdGFibGVcIjtcbiAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0JVSUxEX0lEID0gXCJ0ZXN0LWJ1aWxkLWlkXCI7XG4gICAgcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTiA9IFwidXMtZWFzdC0xXCI7XG5cbiAgICAvLyBTdXBwcmVzcyBleHBlY3RlZCB3YXJuaW5ncyBnbG9iYWxseSAodGVzdHMgZGVsaWJlcmF0ZWx5IHRyaWdnZXIgd2FybmluZ3MpXG4gICAgamVzdC5zcHlPbihjb25zb2xlLCBcIndhcm5cIikubW9ja0ltcGxlbWVudGF0aW9uKCk7XG5cbiAgICBoYW5kbGVyID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgIH0pO1xuXG4gICAgLy8gUmVzZXQgbW9ja3NcbiAgICBtb2NrUzNTZW5kLm1vY2tSZXNldCgpO1xuICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tSZXNldCgpO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIC8vIENsZWFuIHVwIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0NBQ0hFX0JVQ0tFVF9OQU1FO1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX1JFVkFMSURBVElPTl9UQUJMRV9OQU1FO1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0JVSUxEX0lEO1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5BV1NfUkVHSU9OO1xuXG4gICAgLy8gUmVzdG9yZSBjb25zb2xlLndhcm5cbiAgICBqZXN0LnJlc3RvcmVBbGxNb2NrcygpO1xuICB9KTtcblxuICBkZXNjcmliZShcImdldFwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIG51bGwgd2hlbiBTMyBidWNrZXQgaXMgbm90IGNvbmZpZ3VyZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfQ0FDSEVfQlVDS0VUX05BTUU7XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRob3V0QnVja2V0ID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlcldpdGhvdXRCdWNrZXQuZ2V0KFwidGVzdC1rZXlcIiwge1xuICAgICAgICBraW5kOiBJbmNyZW1lbnRhbENhY2hlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCByZXRyaWV2ZSBhbmQgcGFyc2UgY2FjaGUgdmFsdWUgZnJvbSBTM1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YTogSW5jcmVtZW50YWxDYWNoZVZhbHVlID0ge1xuICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGh0bWw6IFwiPGh0bWw+dGVzdDwvaHRtbD5cIixcbiAgICAgICAgcnNjRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB1bmRlZmluZWQsXG4gICAgICAgIHBvc3Rwb25lZDogdW5kZWZpbmVkLFxuICAgICAgICBzZWdtZW50RGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBzdGF0dXM6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGNhY2hlVmFsdWUgPSB7XG4gICAgICAgIGxhc3RNb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgICAgdmFsdWU6IHRlc3REYXRhLFxuICAgICAgfTtcblxuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2Uoe1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgdHJhbnNmb3JtVG9TdHJpbmc6IGplc3RcbiAgICAgICAgICAgIC5mbigpXG4gICAgICAgICAgICAubW9ja1Jlc29sdmVkVmFsdWUoSlNPTi5zdHJpbmdpZnkoY2FjaGVWYWx1ZSkpLFxuICAgICAgICB9LFxuICAgICAgICBDb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5nZXQoXCJ0ZXN0LWtleVwiLCB7XG4gICAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGNhY2hlVmFsdWUpO1xuICAgICAgZXhwZWN0KG1vY2tTM1NlbmQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5hbnkoR2V0T2JqZWN0Q29tbWFuZCkpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIG51bGwgd2hlbiBTMyBvYmplY3Qgbm90IGZvdW5kXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWVPbmNlKHtcbiAgICAgICAgQm9keTogbnVsbCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmdldChcIm1pc3Npbmcta2V5XCIsIHtcbiAgICAgICAga2luZDogSW5jcmVtZW50YWxDYWNoZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIFMzIGVycm9ycyBhbmQgcmV0dXJuIG51bGxcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UobmV3IEVycm9yKFwiUzMgRXJyb3JcIikpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmdldChcImVycm9yLWtleVwiLCB7XG4gICAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJzZXRcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHN0b3JlIGNhY2hlIHZhbHVlIGluIFMzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3REYXRhOiBJbmNyZW1lbnRhbENhY2hlVmFsdWUgPSB7XG4gICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaHRtbDogXCI8aHRtbD5zZXQgdGVzdDwvaHRtbD5cIixcbiAgICAgICAgcnNjRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB1bmRlZmluZWQsXG4gICAgICAgIHBvc3Rwb25lZDogdW5kZWZpbmVkLFxuICAgICAgICBzZWdtZW50RGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBzdGF0dXM6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWVPbmNlKHt9KTtcbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlci5zZXQoXCJzZXQta2V5XCIsIHRlc3REYXRhLCBjcmVhdGVTZXRDb250ZXh0KFtcInRhZzFcIl0pKTtcblxuICAgICAgZXhwZWN0KG1vY2tTM1NlbmQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5hbnkoUHV0T2JqZWN0Q29tbWFuZCkpO1xuICAgICAgZXhwZWN0KG1vY2tEeW5hbW9TZW5kKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0LmFueShVcGRhdGVJdGVtQ29tbWFuZCksXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgbm90IHN0b3JlIHdoZW4gUzMgYnVja2V0IGlzIG5vdCBjb25maWd1cmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0NBQ0hFX0JVQ0tFVF9OQU1FO1xuXG4gICAgICBjb25zdCBoYW5kbGVyV2l0aG91dEJ1Y2tldCA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlc3REYXRhOiBJbmNyZW1lbnRhbENhY2hlVmFsdWUgPSB7XG4gICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaHRtbDogXCI8aHRtbD5ubyBidWNrZXQ8L2h0bWw+XCIsXG4gICAgICAgIHJzY0RhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgaGVhZGVyczogdW5kZWZpbmVkLFxuICAgICAgICBwb3N0cG9uZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VnbWVudERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhdHVzOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBoYW5kbGVyV2l0aG91dEJ1Y2tldC5zZXQoXG4gICAgICAgIFwibm8tYnVja2V0LWtleVwiLFxuICAgICAgICB0ZXN0RGF0YSxcbiAgICAgICAgY3JlYXRlU2V0Q29udGV4dChbXSksXG4gICAgICApO1xuXG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBTMyBlcnJvcnMgZ3JhY2VmdWxseVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YTogSW5jcmVtZW50YWxDYWNoZVZhbHVlID0ge1xuICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGh0bWw6IFwiPGh0bWw+ZXJyb3IgdGVzdDwvaHRtbD5cIixcbiAgICAgICAgcnNjRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB1bmRlZmluZWQsXG4gICAgICAgIHBvc3Rwb25lZDogdW5kZWZpbmVkLFxuICAgICAgICBzZWdtZW50RGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBzdGF0dXM6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIG1vY2tTM1NlbmQubW9ja1JlamVjdGVkVmFsdWVPbmNlKG5ldyBFcnJvcihcIlMzIFB1dCBFcnJvclwiKSk7XG5cbiAgICAgIC8vIFNob3VsZCBub3QgdGhyb3dcbiAgICAgIGF3YWl0IGV4cGVjdChcbiAgICAgICAgaGFuZGxlci5zZXQoXCJlcnJvci1rZXlcIiwgdGVzdERhdGEsIGNyZWF0ZVNldENvbnRleHQoW10pKSxcbiAgICAgICkucmVzb2x2ZXMubm90LnRvVGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJyZXZhbGlkYXRlVGFnXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBxdWVyeSBEeW5hbW9EQiBhbmQgZGVsZXRlIFMzIGVudHJpZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgbW9ja1F1ZXJ5UmVzcG9uc2UgPSB7XG4gICAgICAgIEl0ZW1zOiBbXG4gICAgICAgICAgeyBzazogeyBTOiBcInRlc3QtdGFnI2NhY2hlLWtleS0xXCIgfSB9LFxuICAgICAgICAgIHsgc2s6IHsgUzogXCJ0ZXN0LXRhZyNjYWNoZS1rZXktMlwiIH0gfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tSZXNvbHZlZFZhbHVlT25jZShtb2NrUXVlcnlSZXNwb25zZSk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7IC8vIEZvciB1cGRhdGUgY29tbWFuZHNcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pOyAvLyBGb3IgZGVsZXRlIGNvbW1hbmRzXG5cbiAgICAgIGF3YWl0IGhhbmRsZXIucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuXG4gICAgICBleHBlY3QobW9ja0R5bmFtb1NlbmQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5hbnkoUXVlcnlDb21tYW5kKSk7XG4gICAgICBleHBlY3QobW9ja0R5bmFtb1NlbmQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBleHBlY3QuYW55KFVwZGF0ZUl0ZW1Db21tYW5kKSxcbiAgICAgICk7XG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LmFueShEZWxldGVPYmplY3RDb21tYW5kKSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBub3QgcmV2YWxpZGF0ZSB3aGVuIER5bmFtb0RCIHRhYmxlIGlzIG5vdCBjb25maWd1cmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX1JFVkFMSURBVElPTl9UQUJMRV9OQU1FO1xuXG4gICAgICBjb25zdCBoYW5kbGVyV2l0aG91dFRhYmxlID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlcldpdGhvdXRUYWJsZS5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIGV4cGVjdChtb2NrRHluYW1vU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBEeW5hbW9EQiBlcnJvcnMgZ3JhY2VmdWxseVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UobmV3IEVycm9yKFwiRHluYW1vREIgRXJyb3JcIikpO1xuXG4gICAgICAvLyBTaG91bGQgbm90IHRocm93XG4gICAgICBhd2FpdCBleHBlY3QoaGFuZGxlci5yZXZhbGlkYXRlVGFnKFwiZXJyb3ItdGFnXCIpKS5yZXNvbHZlcy5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcInJlc2V0UmVxdWVzdENhY2hlXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBjb21wbGV0ZSB3aXRob3V0IGVycm9yc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBleHBlY3QoaGFuZGxlci5yZXNldFJlcXVlc3RDYWNoZSgpKS5yZXNvbHZlcy5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShcImN1c3RvbSBjb25maWd1cmF0aW9uXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBhY2NlcHQgY3VzdG9tIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21IYW5kbGVyID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICAgIHMzQ29uZmlnOiB7XG4gICAgICAgICAgYnVja2V0TmFtZTogXCJjdXN0b20tYnVja2V0XCIsXG4gICAgICAgICAgcmVnaW9uOiBcImV1LXdlc3QtMVwiLFxuICAgICAgICAgIGJ1aWxkSWQ6IFwiY3VzdG9tLWJ1aWxkXCIsXG4gICAgICAgIH0sXG4gICAgICAgIGR5bmFtb0NvbmZpZzoge1xuICAgICAgICAgIHRhYmxlTmFtZTogXCJjdXN0b20tdGFibGVcIixcbiAgICAgICAgICByZWdpb246IFwiZXUtd2VzdC0xXCIsXG4gICAgICAgICAgYnVpbGRJZDogXCJjdXN0b20tYnVpbGRcIixcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QoY3VzdG9tSGFuZGxlcikudG9CZURlZmluZWQoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
279
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMtY2FjaGUtaGFuZGxlci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXIvczMtY2FjaGUtaGFuZGxlci50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0RBQXNEO0FBQ3RELGVBQWU7QUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQztBQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFFakMsa0VBR29DO0FBQ3BDLDhEQUlrQztBQUNsQyxrREFLNEI7QUFDNUIsb0RBQWdEO0FBT2hELHlEQUFvRDtBQUVwRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDN0IsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2pDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3JDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUU3QixvQkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELElBQUksRUFBRSxVQUFVO0NBQ2pCLENBQUMsQ0FBQyxDQUFDO0FBRUgsZ0NBQTRCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN0RCxJQUFJLEVBQUUsY0FBYztDQUNyQixDQUFDLENBQUMsQ0FBQztBQUVILG9DQUE4QixDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDeEQsSUFBSSxFQUFFLGtCQUFrQjtDQUN6QixDQUFDLENBQUMsQ0FBQztBQUVILHNCQUF1QixDQUFDLGtCQUFrQixDQUFDLEdBQUcs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QUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLEVBQUU7UUFDcEMsRUFBRSxDQUFDLDRDQUE0QyxFQUFFLEdBQUcsRUFBRTtZQUNwRCxNQUFNLGFBQWEsR0FBRyxJQUFJLGlDQUFjLENBQUM7Z0JBQ3ZDLE9BQU8sRUFBRSxXQUFXO2dCQUNwQixRQUFRLEVBQUU7b0JBQ1IsVUFBVSxFQUFFLGVBQWU7b0JBQzNCLE1BQU0sRUFBRSxXQUFXO29CQUNuQixPQUFPLEVBQUUsY0FBYztpQkFDeEI7Z0JBQ0QsWUFBWSxFQUFFO29CQUNaLFNBQVMsRUFBRSxjQUFjO29CQUN6QixNQUFNLEVBQUUsV0FBVztvQkFDbkIsT0FBTyxFQUFFLGNBQWM7aUJBQ3hCO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuLy8gTW9jayBBV1MgU0RLXG5qZXN0Lm1vY2soXCJAYXdzLXNkay9jbGllbnQtczNcIik7XG5qZXN0Lm1vY2soXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIik7XG5qZXN0Lm1vY2soXCJAYXdzLXNkay9jbGllbnQtY2xvdWRmcm9udFwiKTtcbmplc3QubW9jayhcIkBhd3Mtc2RrL2NsaWVudC1zc21cIik7XG5cbmltcG9ydCB7XG4gIENsb3VkRnJvbnRDbGllbnQsXG4gIENyZWF0ZUludmFsaWRhdGlvbkNvbW1hbmQsXG59IGZyb20gXCJAYXdzLXNkay9jbGllbnQtY2xvdWRmcm9udFwiO1xuaW1wb3J0IHtcbiAgRHluYW1vREJDbGllbnQsXG4gIFF1ZXJ5Q29tbWFuZCxcbiAgVXBkYXRlSXRlbUNvbW1hbmQsXG59IGZyb20gXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIjtcbmltcG9ydCB7XG4gIFMzQ2xpZW50LFxuICBHZXRPYmplY3RDb21tYW5kLFxuICBQdXRPYmplY3RDb21tYW5kLFxuICBEZWxldGVPYmplY3RDb21tYW5kLFxufSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXMzXCI7XG5pbXBvcnQgeyBTU01DbGllbnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXNzbVwiO1xuaW1wb3J0IHsgQ2FjaGVIYW5kbGVyQ29udGV4dCB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2xpYi9pbmNyZW1lbnRhbC1jYWNoZVwiO1xuaW1wb3J0IHtcbiAgSW5jcmVtZW50YWxDYWNoZVZhbHVlLFxuICBDYWNoZWRSb3V0ZUtpbmQsXG4gIEluY3JlbWVudGFsQ2FjaGVLaW5kLFxufSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9yZXNwb25zZS1jYWNoZVwiO1xuaW1wb3J0IHsgUzNDYWNoZUhhbmRsZXIgfSBmcm9tIFwiLi9zMy1jYWNoZS1oYW5kbGVyXCI7XG5cbmNvbnN0IG1vY2tTM1NlbmQgPSBqZXN0LmZuKCk7XG5jb25zdCBtb2NrRHluYW1vU2VuZCA9IGplc3QuZm4oKTtcbmNvbnN0IG1vY2tDbG91ZEZyb250U2VuZCA9IGplc3QuZm4oKTtcbmNvbnN0IG1vY2tTc21TZW5kID0gamVzdC5mbigpO1xuXG4oUzNDbGllbnQgYXMgamVzdC5Nb2NrKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHtcbiAgc2VuZDogbW9ja1MzU2VuZCxcbn0pKTtcblxuKER5bmFtb0RCQ2xpZW50IGFzIGplc3QuTW9jaykubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7XG4gIHNlbmQ6IG1vY2tEeW5hbW9TZW5kLFxufSkpO1xuXG4oQ2xvdWRGcm9udENsaWVudCBhcyBqZXN0Lk1vY2spLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoe1xuICBzZW5kOiBtb2NrQ2xvdWRGcm9udFNlbmQsXG59KSk7XG5cbihTU01DbGllbnQgYXMgamVzdC5Nb2NrKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHtcbiAgc2VuZDogbW9ja1NzbVNlbmQsXG59KSk7XG5cbmRlc2NyaWJlKFwiUzNEeW5hbW9DYWNoZUhhbmRsZXJcIiwgKCkgPT4ge1xuICBsZXQgaGFuZGxlcjogUzNDYWNoZUhhbmRsZXI7XG4gIGxldCBtb2NrQ29udGV4dDogQ2FjaGVIYW5kbGVyQ29udGV4dDtcblxuICAvLyBIZWxwZXIgdG8gY3JlYXRlIHNldCBjb250ZXh0IHdpdGggdGFnc1xuICBjb25zdCBjcmVhdGVTZXRDb250ZXh0ID0gKHRhZ3M6IHN0cmluZ1tdKSA9PiAoe1xuICAgIGZldGNoQ2FjaGU6IHRydWUgYXMgY29uc3QsXG4gICAgdGFncyxcbiAgfSk7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgbW9ja0NvbnRleHQgPSB7IGRldjogZmFsc2UgfSBhcyBDYWNoZUhhbmRsZXJDb250ZXh0O1xuXG4gICAgLy8gU2V0IHVwIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfQ0FDSEVfQlVDS0VUX05BTUUgPSBcInRlc3QtYnVja2V0XCI7XG4gICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19SRVZBTElEQVRJT05fVEFCTEVfTkFNRSA9IFwidGVzdC10YWJsZVwiO1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfQlVJTERfSUQgPSBcInRlc3QtYnVpbGQtaWRcIjtcbiAgICBwcm9jZXNzLmVudi5BV1NfUkVHSU9OID0gXCJ1cy1lYXN0LTFcIjtcblxuICAgIC8vIFN1cHByZXNzIGV4cGVjdGVkIHdhcm5pbmdzIGdsb2JhbGx5ICh0ZXN0cyBkZWxpYmVyYXRlbHkgdHJpZ2dlciB3YXJuaW5ncylcbiAgICBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKTtcblxuICAgIGhhbmRsZXIgPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgfSk7XG5cbiAgICAvLyBSZXNldCBtb2Nrc1xuICAgIG1vY2tTM1NlbmQubW9ja1Jlc2V0KCk7XG4gICAgbW9ja0R5bmFtb1NlbmQubW9ja1Jlc2V0KCk7XG4gICAgbW9ja0Nsb3VkRnJvbnRTZW5kLm1vY2tSZXNldCgpO1xuICAgIG1vY2tTc21TZW5kLm1vY2tSZXNldCgpO1xuICB9KTtcblxuICBhZnRlckVhY2goKCkgPT4ge1xuICAgIC8vIENsZWFuIHVwIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0NBQ0hFX0JVQ0tFVF9OQU1FO1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX1JFVkFMSURBVElPTl9UQUJMRV9OQU1FO1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0JVSUxEX0lEO1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5BV1NfUkVHSU9OO1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FO1xuXG4gICAgLy8gUmVzdG9yZSBjb25zb2xlLndhcm5cbiAgICBqZXN0LnJlc3RvcmVBbGxNb2NrcygpO1xuICB9KTtcblxuICBkZXNjcmliZShcImdldFwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIG51bGwgd2hlbiBTMyBidWNrZXQgaXMgbm90IGNvbmZpZ3VyZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfQ0FDSEVfQlVDS0VUX05BTUU7XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJXaXRob3V0QnVja2V0ID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlcldpdGhvdXRCdWNrZXQuZ2V0KFwidGVzdC1rZXlcIiwge1xuICAgICAgICBraW5kOiBJbmNyZW1lbnRhbENhY2hlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaXNGYWxsYmFjazogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvQmVOdWxsKCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCByZXRyaWV2ZSBhbmQgcGFyc2UgY2FjaGUgdmFsdWUgZnJvbSBTM1wiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YTogSW5jcmVtZW50YWxDYWNoZVZhbHVlID0ge1xuICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGh0bWw6IFwiPGh0bWw+dGVzdDwvaHRtbD5cIixcbiAgICAgICAgcnNjRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB1bmRlZmluZWQsXG4gICAgICAgIHBvc3Rwb25lZDogdW5kZWZpbmVkLFxuICAgICAgICBzZWdtZW50RGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBzdGF0dXM6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGNhY2hlVmFsdWUgPSB7XG4gICAgICAgIGxhc3RNb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgICAgdmFsdWU6IHRlc3REYXRhLFxuICAgICAgfTtcblxuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2Uoe1xuICAgICAgICBCb2R5OiB7XG4gICAgICAgICAgdHJhbnNmb3JtVG9TdHJpbmc6IGplc3RcbiAgICAgICAgICAgIC5mbigpXG4gICAgICAgICAgICAubW9ja1Jlc29sdmVkVmFsdWUoSlNPTi5zdHJpbmdpZnkoY2FjaGVWYWx1ZSkpLFxuICAgICAgICB9LFxuICAgICAgICBDb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlci5nZXQoXCJ0ZXN0LWtleVwiLCB7XG4gICAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGNhY2hlVmFsdWUpO1xuICAgICAgZXhwZWN0KG1vY2tTM1NlbmQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5hbnkoR2V0T2JqZWN0Q29tbWFuZCkpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgcmV0dXJuIG51bGwgd2hlbiBTMyBvYmplY3Qgbm90IGZvdW5kXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWVPbmNlKHtcbiAgICAgICAgQm9keTogbnVsbCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmdldChcIm1pc3Npbmcta2V5XCIsIHtcbiAgICAgICAga2luZDogSW5jcmVtZW50YWxDYWNoZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0JlTnVsbCgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgaGFuZGxlIFMzIGVycm9ycyBhbmQgcmV0dXJuIG51bGxcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgbW9ja1MzU2VuZC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UobmV3IEVycm9yKFwiUzMgRXJyb3JcIikpO1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBoYW5kbGVyLmdldChcImVycm9yLWtleVwiLCB7XG4gICAgICAgIGtpbmQ6IEluY3JlbWVudGFsQ2FjaGVLaW5kLkFQUF9QQUdFLFxuICAgICAgICBpc0ZhbGxiYWNrOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJzZXRcIiwgKCkgPT4ge1xuICAgIGl0KFwic2hvdWxkIHN0b3JlIGNhY2hlIHZhbHVlIGluIFMzXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3REYXRhOiBJbmNyZW1lbnRhbENhY2hlVmFsdWUgPSB7XG4gICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaHRtbDogXCI8aHRtbD5zZXQgdGVzdDwvaHRtbD5cIixcbiAgICAgICAgcnNjRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB1bmRlZmluZWQsXG4gICAgICAgIHBvc3Rwb25lZDogdW5kZWZpbmVkLFxuICAgICAgICBzZWdtZW50RGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBzdGF0dXM6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWVPbmNlKHt9KTtcbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlci5zZXQoXCJzZXQta2V5XCIsIHRlc3REYXRhLCBjcmVhdGVTZXRDb250ZXh0KFtcInRhZzFcIl0pKTtcblxuICAgICAgZXhwZWN0KG1vY2tTM1NlbmQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5hbnkoUHV0T2JqZWN0Q29tbWFuZCkpO1xuICAgICAgZXhwZWN0KG1vY2tEeW5hbW9TZW5kKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0LmFueShVcGRhdGVJdGVtQ29tbWFuZCksXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgbm90IHN0b3JlIHdoZW4gUzMgYnVja2V0IGlzIG5vdCBjb25maWd1cmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0NBQ0hFX0JVQ0tFVF9OQU1FO1xuXG4gICAgICBjb25zdCBoYW5kbGVyV2l0aG91dEJ1Y2tldCA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHRlc3REYXRhOiBJbmNyZW1lbnRhbENhY2hlVmFsdWUgPSB7XG4gICAgICAgIGtpbmQ6IENhY2hlZFJvdXRlS2luZC5BUFBfUEFHRSxcbiAgICAgICAgaHRtbDogXCI8aHRtbD5ubyBidWNrZXQ8L2h0bWw+XCIsXG4gICAgICAgIHJzY0RhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgaGVhZGVyczogdW5kZWZpbmVkLFxuICAgICAgICBwb3N0cG9uZWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VnbWVudERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgc3RhdHVzOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICBhd2FpdCBoYW5kbGVyV2l0aG91dEJ1Y2tldC5zZXQoXG4gICAgICAgIFwibm8tYnVja2V0LWtleVwiLFxuICAgICAgICB0ZXN0RGF0YSxcbiAgICAgICAgY3JlYXRlU2V0Q29udGV4dChbXSksXG4gICAgICApO1xuXG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBTMyBlcnJvcnMgZ3JhY2VmdWxseVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0RGF0YTogSW5jcmVtZW50YWxDYWNoZVZhbHVlID0ge1xuICAgICAgICBraW5kOiBDYWNoZWRSb3V0ZUtpbmQuQVBQX1BBR0UsXG4gICAgICAgIGh0bWw6IFwiPGh0bWw+ZXJyb3IgdGVzdDwvaHRtbD5cIixcbiAgICAgICAgcnNjRGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBoZWFkZXJzOiB1bmRlZmluZWQsXG4gICAgICAgIHBvc3Rwb25lZDogdW5kZWZpbmVkLFxuICAgICAgICBzZWdtZW50RGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBzdGF0dXM6IHVuZGVmaW5lZCxcbiAgICAgIH07XG5cbiAgICAgIG1vY2tTM1NlbmQubW9ja1JlamVjdGVkVmFsdWVPbmNlKG5ldyBFcnJvcihcIlMzIFB1dCBFcnJvclwiKSk7XG5cbiAgICAgIC8vIFNob3VsZCBub3QgdGhyb3dcbiAgICAgIGF3YWl0IGV4cGVjdChcbiAgICAgICAgaGFuZGxlci5zZXQoXCJlcnJvci1rZXlcIiwgdGVzdERhdGEsIGNyZWF0ZVNldENvbnRleHQoW10pKSxcbiAgICAgICkucmVzb2x2ZXMubm90LnRvVGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJyZXZhbGlkYXRlVGFnXCIsICgpID0+IHtcbiAgICBpdChcInNob3VsZCBxdWVyeSBEeW5hbW9EQiBhbmQgZGVsZXRlIFMzIGVudHJpZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgbW9ja1F1ZXJ5UmVzcG9uc2UgPSB7XG4gICAgICAgIEl0ZW1zOiBbXG4gICAgICAgICAgeyBzazogeyBTOiBcInRlc3QtdGFnI2NhY2hlLWtleS0xXCIgfSB9LFxuICAgICAgICAgIHsgc2s6IHsgUzogXCJ0ZXN0LXRhZyNjYWNoZS1rZXktMlwiIH0gfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tSZXNvbHZlZFZhbHVlT25jZShtb2NrUXVlcnlSZXNwb25zZSk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7IC8vIEZvciB1cGRhdGUgY29tbWFuZHNcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pOyAvLyBGb3IgZGVsZXRlIGNvbW1hbmRzXG5cbiAgICAgIGF3YWl0IGhhbmRsZXIucmV2YWxpZGF0ZVRhZyhcInRlc3QtdGFnXCIpO1xuXG4gICAgICBleHBlY3QobW9ja0R5bmFtb1NlbmQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGV4cGVjdC5hbnkoUXVlcnlDb21tYW5kKSk7XG4gICAgICBleHBlY3QobW9ja0R5bmFtb1NlbmQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgICBleHBlY3QuYW55KFVwZGF0ZUl0ZW1Db21tYW5kKSxcbiAgICAgICk7XG4gICAgICBleHBlY3QobW9ja1MzU2VuZCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZXhwZWN0LmFueShEZWxldGVPYmplY3RDb21tYW5kKSk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBub3QgcmV2YWxpZGF0ZSB3aGVuIER5bmFtb0RCIHRhYmxlIGlzIG5vdCBjb25maWd1cmVkXCIsIGFzeW5jICgpID0+IHtcbiAgICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX1JFVkFMSURBVElPTl9UQUJMRV9OQU1FO1xuXG4gICAgICBjb25zdCBoYW5kbGVyV2l0aG91dFRhYmxlID0gbmV3IFMzQ2FjaGVIYW5kbGVyKHtcbiAgICAgICAgY29udGV4dDogbW9ja0NvbnRleHQsXG4gICAgICB9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlcldpdGhvdXRUYWJsZS5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIGV4cGVjdChtb2NrRHluYW1vU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICB9KTtcblxuICAgIGl0KFwic2hvdWxkIGhhbmRsZSBEeW5hbW9EQiBlcnJvcnMgZ3JhY2VmdWxseVwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UobmV3IEVycm9yKFwiRHluYW1vREIgRXJyb3JcIikpO1xuXG4gICAgICAvLyBTaG91bGQgbm90IHRocm93XG4gICAgICBhd2FpdCBleHBlY3QoaGFuZGxlci5yZXZhbGlkYXRlVGFnKFwiZXJyb3ItdGFnXCIpKS5yZXNvbHZlcy5ub3QudG9UaHJvdygpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzaG91bGQgY3JlYXRlIGEgQ2xvdWRGcm9udCBpbnZhbGlkYXRpb24gZm9yIGFmZmVjdGVkIHBhdGhzIHdoZW4gYSBkaXN0cmlidXRpb24gcGFyYW1ldGVyIGlzIGNvbmZpZ3VyZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRSA9IFwidGVzdC1wYXJhbS1uYW1lXCI7XG4gICAgICBjb25zdCBoYW5kbGVyV2l0aERpc3RyaWJ1dGlvbiA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG1vY2tRdWVyeVJlc3BvbnNlID0ge1xuICAgICAgICBJdGVtczogW1xuICAgICAgICAgIHsgc2s6IHsgUzogXCJ0ZXN0LXRhZyN0ZXN0LWJ1aWxkLWlkL2lzci8xLmpzb25cIiB9IH0sXG4gICAgICAgICAgeyBzazogeyBTOiBcInRlc3QtdGFnI3Rlc3QtYnVpbGQtaWQvaXNyLzIuanNvblwiIH0gfSxcbiAgICAgICAgXSxcbiAgICAgIH07XG5cbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tSZXNvbHZlZFZhbHVlT25jZShtb2NrUXVlcnlSZXNwb25zZSk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7IC8vIEZvciB1cGRhdGUgY29tbWFuZHNcbiAgICAgIG1vY2tTM1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pOyAvLyBGb3IgZGVsZXRlIGNvbW1hbmRzXG4gICAgICBtb2NrU3NtU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICAgIFBhcmFtZXRlcjogeyBWYWx1ZTogXCJ0ZXN0LWRpc3RyaWJ1dGlvbi1pZFwiIH0sXG4gICAgICB9KTtcbiAgICAgIG1vY2tDbG91ZEZyb250U2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG5cbiAgICAgIGF3YWl0IGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKTtcblxuICAgICAgZXhwZWN0KG1vY2tTc21TZW5kKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChleHBlY3QuYW55KE9iamVjdCkpO1xuICAgICAgZXhwZWN0KG1vY2tDbG91ZEZyb250U2VuZCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgIGV4cGVjdC5hbnkoQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCksXG4gICAgICApO1xuICAgICAgY29uc3QgW2ludmFsaWRhdGlvbklucHV0XSA9IChcbiAgICAgICAgQ3JlYXRlSW52YWxpZGF0aW9uQ29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9ja1xuICAgICAgKS5tb2NrLmNhbGxzWzBdO1xuICAgICAgZXhwZWN0KGludmFsaWRhdGlvbklucHV0LkRpc3RyaWJ1dGlvbklkKS50b0JlKFwidGVzdC1kaXN0cmlidXRpb24taWRcIik7XG4gICAgICBleHBlY3QoaW52YWxpZGF0aW9uSW5wdXQuSW52YWxpZGF0aW9uQmF0Y2guUGF0aHMuSXRlbXMpLnRvRXF1YWwoXG4gICAgICAgIGV4cGVjdC5hcnJheUNvbnRhaW5pbmcoW1wiL2lzci8xXCIsIFwiL2lzci8yXCJdKSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBub3QgY2FsbCBTU00gb3IgQ2xvdWRGcm9udCB3aGVuIG5vIGRpc3RyaWJ1dGlvbiBwYXJhbWV0ZXIgaXMgY29uZmlndXJlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBtb2NrUXVlcnlSZXNwb25zZSA9IHtcbiAgICAgICAgSXRlbXM6IFt7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9pc3IvMS5qc29uXCIgfSB9XSxcbiAgICAgIH07XG5cbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tSZXNvbHZlZFZhbHVlT25jZShtb2NrUXVlcnlSZXNwb25zZSk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcblxuICAgICAgYXdhaXQgaGFuZGxlci5yZXZhbGlkYXRlVGFnKFwidGVzdC10YWdcIik7XG5cbiAgICAgIGV4cGVjdChtb2NrU3NtU2VuZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgIGV4cGVjdChtb2NrQ2xvdWRGcm9udFNlbmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgfSk7XG5cbiAgICBpdChcInNob3VsZCBoYW5kbGUgU1NNL0Nsb3VkRnJvbnQgaW52YWxpZGF0aW9uIGVycm9ycyBncmFjZWZ1bGx5XCIsIGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUUgPSBcInRlc3QtcGFyYW0tbmFtZVwiO1xuICAgICAgY29uc3QgaGFuZGxlcldpdGhEaXN0cmlidXRpb24gPSBuZXcgUzNDYWNoZUhhbmRsZXIoe1xuICAgICAgICBjb250ZXh0OiBtb2NrQ29udGV4dCxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBtb2NrUXVlcnlSZXNwb25zZSA9IHtcbiAgICAgICAgSXRlbXM6IFt7IHNrOiB7IFM6IFwidGVzdC10YWcjdGVzdC1idWlsZC1pZC9pc3IvMS5qc29uXCIgfSB9XSxcbiAgICAgIH07XG5cbiAgICAgIG1vY2tEeW5hbW9TZW5kLm1vY2tSZXNvbHZlZFZhbHVlT25jZShtb2NrUXVlcnlSZXNwb25zZSk7XG4gICAgICBtb2NrRHluYW1vU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgICBtb2NrUzNTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICAgIG1vY2tTc21TZW5kLm1vY2tSZWplY3RlZFZhbHVlT25jZShuZXcgRXJyb3IoXCJTU00gRXJyb3JcIikpO1xuXG4gICAgICBhd2FpdCBleHBlY3QoXG4gICAgICAgIGhhbmRsZXJXaXRoRGlzdHJpYnV0aW9uLnJldmFsaWRhdGVUYWcoXCJ0ZXN0LXRhZ1wiKSxcbiAgICAgICkucmVzb2x2ZXMubm90LnRvVGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJyZXNldFJlcXVlc3RDYWNoZVwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgY29tcGxldGUgd2l0aG91dCBlcnJvcnNcIiwgYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgZXhwZWN0KGhhbmRsZXIucmVzZXRSZXF1ZXN0Q2FjaGUoKSkucmVzb2x2ZXMubm90LnRvVGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJjdXN0b20gY29uZmlndXJhdGlvblwiLCAoKSA9PiB7XG4gICAgaXQoXCJzaG91bGQgYWNjZXB0IGN1c3RvbSBjb25maWd1cmF0aW9uIG9wdGlvbnNcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tSGFuZGxlciA9IG5ldyBTM0NhY2hlSGFuZGxlcih7XG4gICAgICAgIGNvbnRleHQ6IG1vY2tDb250ZXh0LFxuICAgICAgICBzM0NvbmZpZzoge1xuICAgICAgICAgIGJ1Y2tldE5hbWU6IFwiY3VzdG9tLWJ1Y2tldFwiLFxuICAgICAgICAgIHJlZ2lvbjogXCJldS13ZXN0LTFcIixcbiAgICAgICAgICBidWlsZElkOiBcImN1c3RvbS1idWlsZFwiLFxuICAgICAgICB9LFxuICAgICAgICBkeW5hbW9Db25maWc6IHtcbiAgICAgICAgICB0YWJsZU5hbWU6IFwiY3VzdG9tLXRhYmxlXCIsXG4gICAgICAgICAgcmVnaW9uOiBcImV1LXdlc3QtMVwiLFxuICAgICAgICAgIGJ1aWxkSWQ6IFwiY3VzdG9tLWJ1aWxkXCIsXG4gICAgICAgIH0sXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KGN1c3RvbUhhbmRsZXIpLnRvQmVEZWZpbmVkKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
package/lib/nextjs-api.js
CHANGED
|
@@ -10,7 +10,7 @@ const constructs_1 = require("constructs");
|
|
|
10
10
|
* Creates an API Gateway REST API for Next.js applications
|
|
11
11
|
*/
|
|
12
12
|
class NextjsApi extends constructs_1.Construct {
|
|
13
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsApi", version: "0.5.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsApi", version: "0.5.15" };
|
|
14
14
|
/**
|
|
15
15
|
* The API Gateway REST API
|
|
16
16
|
*/
|
|
@@ -21,7 +21,7 @@ const debug = (0, debug_1.default)("cdk-nextjs:nextjs-build");
|
|
|
21
21
|
* @link https://nextjs.org/docs/pages/api-reference/next-config-js/output
|
|
22
22
|
*/
|
|
23
23
|
class NextjsBuild extends constructs_1.Construct {
|
|
24
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsBuild", version: "0.5.
|
|
24
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsBuild", version: "0.5.15" };
|
|
25
25
|
/**
|
|
26
26
|
* Unique id for Next.js build. Used to partition cache storage and as
|
|
27
27
|
* metadata for static assets in S3 bucket.
|
package/lib/nextjs-cache.js
CHANGED
|
@@ -13,7 +13,7 @@ const constants_1 = require("./constants");
|
|
|
13
13
|
* Next.js Cache construct providing unified S3 and DynamoDB cache management.
|
|
14
14
|
*/
|
|
15
15
|
class NextjsCache extends constructs_1.Construct {
|
|
16
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsCache", version: "0.5.
|
|
16
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsCache", version: "0.5.15" };
|
|
17
17
|
cacheBucket;
|
|
18
18
|
revalidationTable;
|
|
19
19
|
buildId;
|
|
@@ -18,7 +18,7 @@ const constants_1 = require("../constants");
|
|
|
18
18
|
* Fargate.
|
|
19
19
|
*/
|
|
20
20
|
class NextjsContainers extends constructs_1.Construct {
|
|
21
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsContainers", version: "0.5.
|
|
21
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsContainers", version: "0.5.15" };
|
|
22
22
|
albFargateService;
|
|
23
23
|
ecsCluster;
|
|
24
24
|
url;
|
|
@@ -15,7 +15,7 @@ const get_architecture_1 = require("../utils/get-architecture");
|
|
|
15
15
|
* Run Next.js in functions on AWS with AWS Lambda.
|
|
16
16
|
*/
|
|
17
17
|
class NextjsFunctions extends constructs_1.Construct {
|
|
18
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsFunctions", version: "0.5.
|
|
18
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsFunctions", version: "0.5.15" };
|
|
19
19
|
function;
|
|
20
20
|
functionUrl;
|
|
21
21
|
props;
|
|
@@ -8,7 +8,7 @@ const aws_cloudfront_origins_1 = require("aws-cdk-lib/aws-cloudfront-origins");
|
|
|
8
8
|
const constructs_1 = require("constructs");
|
|
9
9
|
const constants_1 = require("./constants");
|
|
10
10
|
class NextjsDistribution extends constructs_1.Construct {
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsDistribution", version: "0.5.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsDistribution", version: "0.5.15" };
|
|
12
12
|
distribution;
|
|
13
13
|
props;
|
|
14
14
|
/**
|
|
@@ -17,7 +17,7 @@ const get_architecture_1 = require("./utils/get-architecture");
|
|
|
17
17
|
* current build id AND are older than `msTtl`
|
|
18
18
|
*/
|
|
19
19
|
class NextjsPostDeploy extends constructs_1.Construct {
|
|
20
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsPostDeploy", version: "0.5.
|
|
20
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsPostDeploy", version: "0.5.15" };
|
|
21
21
|
customResource;
|
|
22
22
|
lambdaFunction;
|
|
23
23
|
props;
|
|
@@ -14,7 +14,7 @@ const constants_1 = require("./constants");
|
|
|
14
14
|
* Creates S3 Bucket for public and _next/static assets and deploys them using S3Deployment.
|
|
15
15
|
*/
|
|
16
16
|
class NextjsStaticAssets extends constructs_1.Construct {
|
|
17
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsStaticAssets", version: "0.5.
|
|
17
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsStaticAssets", version: "0.5.15" };
|
|
18
18
|
bucket;
|
|
19
19
|
deployment;
|
|
20
20
|
stagingDir;
|