cdk-nextjs 0.7.10 → 0.7.11

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.
Files changed (54) hide show
  1. package/.jsii +3 -3
  2. package/README.md +1 -1
  3. package/docs/harness-coverage.md +1 -1
  4. package/docs/nextjs-private-apis.md +128 -0
  5. package/lib/adapter/adapter.mjs +276 -24
  6. package/lib/adapter/build-outputs.d.ts +1 -1
  7. package/lib/adapter/build-outputs.js +29 -13
  8. package/lib/adapter/build-outputs.test.js +35 -7
  9. package/lib/adapter/cache-handler.d.ts +1 -1
  10. package/lib/adapter/cache-handler.js +1 -1
  11. package/lib/adapter/cache-kinds.d.ts +12 -1
  12. package/lib/adapter/cache-kinds.js +16 -4
  13. package/lib/adapter/init-cache.js +7 -7
  14. package/lib/adapter/local-file-cache-handler.d.ts +1 -1
  15. package/lib/adapter/local-file-cache-handler.js +1 -1
  16. package/lib/adapter/memory-cache-handler.d.ts +2 -2
  17. package/lib/adapter/memory-cache-handler.js +1 -1
  18. package/lib/adapter/s3-cache-handler.d.ts +2 -2
  19. package/lib/adapter/s3-cache-handler.js +1 -1
  20. package/lib/adapter/use-cache-common.d.ts +1 -1
  21. package/lib/adapter/use-cache-common.js +1 -1
  22. package/lib/adapter/use-cache-common.test.js +1 -1
  23. package/lib/adapter/use-cache-default-handler.d.ts +1 -1
  24. package/lib/adapter/use-cache-default-handler.js +1 -1
  25. package/lib/adapter/use-cache-handlers.test.js +1 -1
  26. package/lib/adapter/use-cache-remote-handler.d.ts +1 -1
  27. package/lib/adapter/use-cache-remote-handler.js +1 -1
  28. package/lib/cdk-nextjs-version.d.ts +10 -0
  29. package/lib/cdk-nextjs-version.js +15 -0
  30. package/lib/nextjs-api.js +1 -1
  31. package/lib/nextjs-build/nextjs-build.js +7 -6
  32. package/lib/nextjs-build/nextjs-build.test.js +16 -3
  33. package/lib/nextjs-cache.js +1 -1
  34. package/lib/nextjs-compute/nextjs-containers.js +1 -1
  35. package/lib/nextjs-compute/nextjs-functions.js +1 -1
  36. package/lib/nextjs-distribution.js +5 -5
  37. package/lib/nextjs-post-deploy.js +1 -1
  38. package/lib/nextjs-static-assets.js +1 -1
  39. package/lib/root-constructs/nextjs-base-construct.js +1 -1
  40. package/lib/root-constructs/nextjs-global-containers.js +1 -1
  41. package/lib/root-constructs/nextjs-global-functions.js +1 -1
  42. package/lib/root-constructs/nextjs-regional-containers.js +1 -1
  43. package/lib/root-constructs/nextjs-regional-functions.js +1 -1
  44. package/lib/runtime/core.test.js +17 -8
  45. package/lib/runtime/dispatch.js +4 -5
  46. package/lib/runtime/image.js +43 -32
  47. package/lib/runtime/image.test.js +27 -26
  48. package/lib/runtime/lambda.mjs +276 -36
  49. package/lib/runtime/manifest.d.ts +34 -8
  50. package/lib/runtime/manifest.js +7 -5
  51. package/lib/runtime/server.mjs +276 -36
  52. package/package.json +1 -1
  53. package/scripts/capture-adapter-fixture.mjs +13 -1
  54. package/scripts/zero-config-build.mjs +5 -1
@@ -8,6 +8,7 @@ const node_path_1 = require("node:path");
8
8
  const aws_cdk_lib_1 = require("aws-cdk-lib");
9
9
  const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
10
10
  const nextjs_build_1 = require("./nextjs-build");
11
+ const cdk_nextjs_version_1 = require("../cdk-nextjs-version");
11
12
  const constants_1 = require("../constants");
12
13
  const deployment_build_id_1 = require("../utils/deployment-build-id");
13
14
  let dir;
@@ -388,13 +389,25 @@ describe("NextjsBuild with skipBuild and no build output", () => {
388
389
  })).toThrow(/cdk-nextjs adapter manifest not found/);
389
390
  });
390
391
  });
392
+ describe("NextjsBuild with a build from another cdk-nextjs", () => {
393
+ it("rejects a manifest stamped with a different cdk-nextjs version", () => {
394
+ write((0, node_path_1.join)(dir, ".next", "BUILD_ID"), "b1");
395
+ write((0, node_path_1.join)(dir, ".next", "cdk-nextjs-adapter", "manifest.json"), JSON.stringify({ cdkNextjsVersion: "0.6.2", buildId: "b1" }));
396
+ expect(() => new nextjs_build_1.NextjsBuild(new aws_cdk_lib_1.Stack(new aws_cdk_lib_1.App(), "Stack"), "Build", {
397
+ buildCommand: "true",
398
+ buildDirectory: dir,
399
+ nextjsType: constants_1.NextjsType.REGIONAL_FUNCTIONS,
400
+ skipBuild: true,
401
+ })).toThrow(/written by\s+cdk-nextjs 0\.6\.2/);
402
+ });
403
+ });
391
404
  describe("NextjsBuild with a build split by other functionGroups", () => {
392
405
  it("rejects a build whose groups kept their names but not their routes", () => {
393
406
  // Moving `/reports/**` into `api` keeps the group names, and a names-only
394
407
  // check let CloudFront send `reports/*` to a zip without those routes.
395
408
  write((0, node_path_1.join)(dir, ".next", "BUILD_ID"), "b1");
396
409
  write((0, node_path_1.join)(dir, ".next", "cdk-nextjs-adapter", "manifest.json"), JSON.stringify({
397
- version: 1,
410
+ cdkNextjsVersion: cdk_nextjs_version_1.CDK_NEXTJS_VERSION,
398
411
  buildId: "b1",
399
412
  relativeProjectDir: "",
400
413
  config: { basePath: "", assetPrefix: "", trailingSlash: false },
@@ -414,7 +427,7 @@ describe("NextjsBuild with a build split by other functionGroups", () => {
414
427
  // Only the stale check is under test: past it, the unstaged roots throw.
415
428
  write((0, node_path_1.join)(dir, ".next", "BUILD_ID"), "b1");
416
429
  write((0, node_path_1.join)(dir, ".next", "cdk-nextjs-adapter", "manifest.json"), JSON.stringify({
417
- version: 1,
430
+ cdkNextjsVersion: cdk_nextjs_version_1.CDK_NEXTJS_VERSION,
418
431
  buildId: "b1",
419
432
  relativeProjectDir: "",
420
433
  config: { basePath: "", assetPrefix: "", trailingSlash: false },
@@ -459,4 +472,4 @@ describe("deploymentArchitecture", () => {
459
472
  expect((0, nextjs_build_1.deploymentArchitecture)(props).name).toBe(host);
460
473
  });
461
474
  });
462
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWJ1aWxkLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmV4dGpzLWJ1aWxkL25leHRqcy1idWlsZC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0RBQXNEO0FBQ3RELDJEQUFrRDtBQUNsRCxxQ0FVaUI7QUFDakIscUNBQWlDO0FBQ2pDLHlDQUFpQztBQUNqQyw2Q0FBeUM7QUFDekMsdURBQXNEO0FBQ3RELGlEQWF3QjtBQUN4Qiw0Q0FBMEM7QUFDMUMsc0VBQWlFO0FBRWpFLElBQUksR0FBVyxDQUFDO0FBRWhCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7SUFDZCxHQUFHLEdBQUcsSUFBQSxxQkFBVyxFQUFDLElBQUEsZ0JBQUksRUFBQyxJQUFBLGdCQUFNLEdBQUUsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDLENBQUM7QUFFSCxTQUFTLENBQUMsR0FBRyxFQUFFO0lBQ2IsSUFBQSxnQkFBTSxFQUFDLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7QUFDaEQsQ0FBQyxDQUFDLENBQUM7QUFFSCxTQUFTLEtBQUssQ0FBQyxJQUFZLEVBQUUsT0FBZTtJQUMxQyxJQUFBLG1CQUFTLEVBQUMsSUFBQSxnQkFBSSxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELElBQUEsdUJBQWEsRUFBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsY0FBYyxDQUFDLElBQVk7SUFDbEMsTUFBTSxLQUFLLEdBQUcsSUFBQSxnQkFBSSxFQUNoQixJQUFJLEVBQ0osb0RBQW9ELENBQ3JELENBQUM7SUFDRixLQUFLLENBQ0gsSUFBQSxnQkFBSSxFQUFDLEtBQUssRUFBRSxjQUFj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SSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUMsQ0FBQyxDQUFDO0lBRUgsMkVBQTJFO0lBQzNFLHlFQUF5RTtJQUN6RSxFQUFFLENBQUMsZ0VBQWdFLEVBQUUsR0FBRyxFQUFFO1FBQ3hFLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLHlCQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyx5QkFBWSxDQUFDLE1BQU0sQ0FBQztRQUMzRSxNQUFNLENBQUMsSUFBQSxxQ0FBc0IsRUFBQyxFQUFFLEdBQUcsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN4RSxLQUFLLENBQ04sQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLEdBQUcsRUFBRTtRQUM1RCxNQUFNLEtBQUssR0FBRztZQUNaLEdBQUcsSUFBSTtZQUNQLFVBQVUsRUFBRSxzQkFBVSxDQUFDLG1CQUFtQjtZQUMxQyxZQUFZLEVBQ1YsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMseUJBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLHlCQUFZLENBQUMsTUFBTTtTQUMvRCxDQUFDO1FBQ0YsTUFBTSxDQUFDLElBQUEscUNBQXNCLEVBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCB7IGV4ZWNGaWxlU3luYyB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7XG4gIGV4aXN0c1N5bmMsXG4gIG1rZGlyU3luYyxcbiAgbWtkdGVtcFN5bmMsXG4gIHJlYWRkaXJTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIHJlYWxwYXRoU3luYyxcbiAgcm1TeW5jLFxuICBzeW1saW5rU3luYyxcbiAgd3JpdGVGaWxlU3luYyxcbn0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQXBwLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQXJjaGl0ZWN0dXJlIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7XG4gIGRlcGxveW1lbnRBcmNoaXRlY3R1cmUsXG4gIGZpbmRGb3JlaWduTmF0aXZlUGFja2FnZXMsXG4gIGlzU2hhcnBCaW5hcnlQYWNrYWdlLFxuICBsaXN0VHJlZSxcbiAgbmF0aXZlQmluYXJ5UGxhdGZvcm0sXG4gIE5leHRqc0J1aWxkLFxuICBwYXRjaENsaWVudENodW5rLFxuICBwaWNrU3RhZ2VkU2hhcnBQYWNrYWdlLFxuICByZXNvbHZlTmV4dFNoYXJwLFxuICBzaGFycEJpbmFyeURpcixcbiAgc3RvcmVkU2l6ZSxcbiAgd3JpdGVQdWJsaWNGaWxlTGlzdCxcbn0gZnJvbSBcIi4vbmV4dGpzLWJ1aWxkXCI7XG5pbXBvcnQgeyBOZXh0anNUeXBlIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgZGVwbG95bWVudEJ1aWxkSWQgfSBmcm9tIFwiLi4vdXRpbHMvZGVwbG95bWVudC1idWlsZC1pZFwiO1xuXG5sZXQgZGlyOiBzdHJpbmc7XG5cbmJlZm9yZUVhY2goKCkgPT4ge1xuICBkaXIgPSBta2R0ZW1wU3luYyhqb2luKHRtcGRpcigpLCBcIm5leHRqcy1idWlsZC10ZXN0LVwiKSk7XG59KTtcblxuYWZ0ZXJFYWNoKCgpID0+IHtcbiAgcm1TeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xufSk7XG5cbmZ1bmN0aW9uIHdyaXRlKHBhdGg6IHN0cmluZywgY29udGVudDogc3RyaW5nKSB7XG4gIG1rZGlyU3luYyhqb2luKHBhdGgsIFwiLi5cIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB3cml0ZUZpbGVTeW5jKHBhdGgsIGNvbnRlbnQpO1xufVxuXG4vKipcbiAqIFRoZSBsYXlvdXQgcG5wbSBzdGFnZXM6IGBzaGFycGAncyBmaWxlcyBpbiB0aGUgdmlydHVhbCBzdG9yZSwgcmVhY2hlZCB0aHJvdWdoXG4gKiBsaW5rcyBmcm9tIHRoZSBhcHAgYW5kIGZyb20gYG5leHRgLlxuICovXG5mdW5jdGlvbiBzdGFnZVBucG1TaGFycChyb290OiBzdHJpbmcpIHtcbiAgY29uc3Qgc3RvcmUgPSBqb2luKFxuICAgIHJvb3QsXG4gICAgXCJub2RlX21vZHVsZXMvLnBucG0vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICApO1xuICB3cml0ZShcbiAgICBqb2luKHN0b3JlLCBcInBhY2thZ2UuanNvblwiKSxcbiAgICBKU09OLnN0cmluZ2lmeSh7IG5hbWU6IFwic2hhcnBcIiwgbWFpbjogXCJpbmRleC5qc1wiIH0pLFxuICApO1xuICB3cml0ZShcbiAgICBqb2luKHN0b3JlLCBcImluZGV4LmpzXCIpLFxuICAgICdtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJAaW1nL3NoYXJwLWxpbnV4LXg2NFwiKTsnLFxuICApO1xuICBta2RpclN5bmMoam9pbihyb290LCBcIm5vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2L25vZGVfbW9kdWxlc1wiKSwge1xuICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgfSk7XG4gIHN5bWxpbmtTeW5jKFxuICAgIFwiLi4vLi4vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgIGpvaW4ocm9vdCwgXCJub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNi9ub2RlX21vZHVsZXMvc2hhcnBcIiksXG4gICk7XG4gIG1rZGlyU3luYyhqb2luKHJvb3QsIFwiYXBwcy93ZWIvbm9kZV9tb2R1bGVzXCIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgc3ltbGlua1N5bmMoXG4gICAgXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgIGpvaW4ocm9vdCwgXCJhcHBzL3dlYi9ub2RlX21vZHVsZXMvc2hhcnBcIiksXG4gICk7XG59XG5cbmRlc2NyaWJlKFwic2hhcnBCaW5hcnlEaXJcIiwgKCkgPT4ge1xuICBpdChcImlzIHJlYWNoYWJsZSBmcm9tIGV2ZXJ5IGNvcHkgb2Ygc2hhcnAsIGxpbmtzIGtlcHQgb3IgZGVyZWZlcmVuY2VkXCIsICgpID0+IHtcbiAgICAvLyBUaGUgemlwIGFuZCB0aGUgaW1hZ2Uga2VlcCBsaW5rcywgc28gdGhlIHN0b3JlIGNvcHkgbG9hZHM7IGEgZGVyZWZlcmVuY2VkXG4gICAgLy8gY29weSByZXNvbHZlcyBgQGltZy8uLi5gIGZyb20gd2hlcmUgaXQgc2l0cywgbmV2ZXIgZnJvbSB0aGUgc3RvcmUuXG4gICAgY29uc3Qgc3RhZ2VkID0gam9pbihkaXIsIFwic3RhZ2VkXCIpO1xuICAgIHN0YWdlUG5wbVNoYXJwKHN0YWdlZCk7XG4gICAgY29uc3QgYmluYXJ5ID0gam9pbihzaGFycEJpbmFyeURpcihzdGFnZWQpLCBcInNoYXJwLWxpbnV4LXg2NFwiKTtcbiAgICB3cml0ZShcbiAgICAgIGpvaW4oYmluYXJ5LCBcInBhY2thZ2UuanNvblwiKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHsgbmFtZTogXCJAaW1nL3NoYXJwLWxpbnV4LXg2NFwiLCBtYWluOiBcImluZGV4LmpzXCIgfSksXG4gICAgKTtcbiAgICB3cml0ZShqb2luKGJpbmFyeSwgXCJpbmRleC5qc1wiKSwgJ21vZHVsZS5leHBvcnRzID0gXCJsb2FkZWRcIjsnKTtcblxuICAgIGNvbnN0IHppcHBlZCA9IGpvaW4oZGlyLCBcInppcHBlZFwiKTtcbiAgICAvLyBgY3AgLVJMYCwgbm90IGBjcFN5bmNgJ3MgYGRlcmVmZXJlbmNlYCwgd2hpY2ggb25seSByZXNvbHZlcyB0aGUgdG9wLWxldmVsXG4gICAgLy8gc291cmNlIGFuZCByZS1saW5rcyBldmVyeXRoaW5nIHVuZGVyIGl0IHRvIHRoZSBvcmlnaW5hbC5cbiAgICBleGVjRmlsZVN5bmMoXCJjcFwiLCBbXCItUkxcIiwgc3RhZ2VkLCB6aXBwZWRdKTtcblxuICAgIGZvciAoY29uc3Qgcm9vdCBvZiBbc3RhZ2VkLCB6aXBwZWRdKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvcHkgb2YgW1xuICAgICAgICBcImFwcHMvd2ViL25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgICAgICBcIm5vZGVfbW9kdWxlcy8ucG5wbS9uZXh0QDE2L25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgICAgICBcIm5vZGVfbW9kdWxlcy8ucG5wbS9zaGFycEAwLjM0LjUvbm9kZV9tb2R1bGVzL3NoYXJwXCIsXG4gICAgICBdKSB7XG4gICAgICAgIC8vIEEgcmVhbCBgbm9kZWAsIG5vdCBqZXN0J3MgYHJlcXVpcmVgLCB3aG9zZSByZXNvbHZlciBkaWZmZXJzIGZyb21cbiAgICAgICAgLy8gTm9kZSdzIGluIGhvdyBpdCB3YWxrcyB1cCBmcm9tIGEgbW9kdWxlLlxuICAgICAgICBleHBlY3QoXG4gICAgICAgICAgZXhlY0ZpbGVTeW5jKFxuICAgICAgICAgICAgcHJvY2Vzcy5leGVjUGF0aCxcbiAgICAgICAgICAgIFtcIi1wXCIsIGByZXF1aXJlKCR7SlNPTi5zdHJpbmdpZnkoam9pbihyb290LCBjb3B5KSl9KWBdLFxuICAgICAgICAgICAgeyBlbmNvZGluZzogXCJ1dGYtOFwiIH0sXG4gICAgICAgICAgKS50cmltKCksXG4gICAgICAgICkudG9CZShcImxvYWRlZFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiaXNTaGFycEJpbmFyeVBhY2thZ2VcIiwgKCkgPT4ge1xuICBpdC5lYWNoKFtcbiAgICBbXCJub2RlX21vZHVsZXMvQGltZ1wiLCBcInNoYXJwLWxpbnV4LXg2NFwiLCB0cnVlXSxcbiAgICBbXCJub2RlX21vZHVsZXMvQGltZ1wiLCBcInNoYXJwLWxpbnV4bXVzbC1hcm02NFwiLCB0cnVlXSxcbiAgICBbXCJub2RlX21vZHVsZXMvQGltZ1wiLCBcInNoYXJwLWxpYnZpcHMtZGFyd2luLWFybTY0XCIsIHRydWVdLFxuICAgIFtcImFwcHMvd2ViL25vZGVfbW9kdWxlcy9AaW1nXCIsIFwic2hhcnAtZGFyd2luLWFybTY0XCIsIHRydWVdLFxuICAgIFtcIm5vZGVfbW9kdWxlcy8ucG5wbVwiLCBcIkBpbWcrc2hhcnAtZGFyd2luLWFybTY0QDAuMzQuNVwiLCB0cnVlXSxcbiAgICBbXCJub2RlX21vZHVsZXMvLnBucG1cIiwgXCJAaW1nK3NoYXJwLWxpYnZpcHMtZGFyd2luLWFybTY0QDEuMi40XCIsIHRydWVdLFxuICAgIFtcbiAgICAgIFwibm9kZV9tb2R1bGVzLy5wbnBtL3NoYXJwQDAuMzQuNS9ub2RlX21vZHVsZXMvQGltZ1wiLFxuICAgICAgXCJzaGFycC1saW51eC14NjRcIixcbiAgICAgIHRydWUsXG4gICAgXSxcbiAgICAvLyBBIHJvdXRlIHNlZ21lbnQsIG5vdCBhIHBhY2thZ2UuXG4gICAgW1wiLm5leHQvc2VydmVyL2FwcFwiLCBcInNoYXJwLWVkZ2VzXCIsIGZhbHNlXSxcbiAgICAvLyBVbnJlbGF0ZWQgYHNoYXJwLWAgZGVwZW5kZW5jaWVzLlxuICAgIFtcIm5vZGVfbW9kdWxlc1wiLCBcInNoYXJwLWljb1wiLCBmYWxzZV0sXG4gICAgW1wibm9kZV9tb2R1bGVzLy5wbnBtXCIsIFwic2hhcnAtcGhhc2hAMi4wLjBcIiwgZmFsc2VdLFxuICAgIFtcIm5vZGVfbW9kdWxlcy8ucG5wbVwiLCBcInNoYXJwQDAuMzQuNVwiLCBmYWxzZV0sXG4gICAgLy8gYHNoYXJwYCBpdHNlbGYsIHRoZSBKUyB3cmFwcGVyIHRoYXQgbG9hZHMgdGhlIGJpbmFyeS5cbiAgICBbXCJub2RlX21vZHVsZXNcIiwgXCJzaGFycFwiLCBmYWxzZV0sXG4gICAgW1wibm9kZV9tb2R1bGVzL0BpbWdcIiwgXCJjb2xvdXJcIiwgZmFsc2VdLFxuICAgIC8vIEFwcCBkaXJlY3RvcmllcyB0aGF0IGhhcHBlbiB0byBzaGFyZSB0aGUgbmFtZXMsIG91dHNpZGUgYG5vZGVfbW9kdWxlc2AuXG4gICAgW1wiYXBwcy93ZWIvQGltZ1wiLCBcInNoYXJwLWxpbnV4LXg2NFwiLCBmYWxzZV0sXG4gICAgW1wiYXBwcy93ZWIvLnBucG1cIiwgXCJAaW1nK3NoYXJwLWxpbnV4LXg2NEAwLjM0LjVcIiwgZmFsc2VdLFxuICBdKShcIiVzLyVzIGlzICVzXCIsIChwYXJlbnQsIG5hbWUsIGV4cGVjdGVkKSA9PiB7XG4gICAgZXhwZWN0KGlzU2hhcnBCaW5hcnlQYWNrYWdlKGpvaW4oZGlyLCBwYXJlbnQpLCBuYW1lKSkudG9CZShleHBlY3RlZCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwicGlja1N0YWdlZFNoYXJwUGFja2FnZVwiLCAoKSA9PiB7XG4gIGl0KFwicmV0dXJucyB1bmRlZmluZWQgd2hlbiB0aGUgdHJlZSBoYXMgbm8gc2hhcnBcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChwaWNrU3RhZ2VkU2hhcnBQYWNrYWdlKFtdKSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcblxuICBpdChcInByZWZlcnMgdGhlIHNob3J0ZXN0IHBhdGgsIHRoZSBjbG9zZXN0IHRvIGEgaG9pc3RlZCBpbnN0YWxsXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBwaWNrU3RhZ2VkU2hhcnBQYWNrYWdlKFtcbiAgICAgICAgXCIvci9ub2RlX21vZHVsZXMvLnBucG0vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgICAgICBcIi9yL2FwcHMvd2ViL25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgICAgICBcIi9yL25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgICAgXSksXG4gICAgKS50b0JlKFwiL3Ivbm9kZV9tb2R1bGVzL3NoYXJwXCIpO1xuICB9KTtcblxuICBpdChcImJyZWFrcyBhIGxlbmd0aCB0aWUgYnkgbmFtZSwgd2hhdGV2ZXIgb3JkZXIgdGhlIHdhbGsgZm91bmQgdGhlbSBpblwiLCAoKSA9PiB7XG4gICAgY29uc3QgYSA9IFwiL3Ivbm9kZV9tb2R1bGVzLy5wbnBtL3NoYXJwQDAuMzQuNC9ub2RlX21vZHVsZXMvc2hhcnBcIjtcbiAgICBjb25zdCBiID0gXCIvci9ub2RlX21vZHVsZXMvLnBucG0vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9zaGFycFwiO1xuICAgIGV4cGVjdChwaWNrU3RhZ2VkU2hhcnBQYWNrYWdlKFtiLCBhXSkpLnRvQmUoYSk7XG4gICAgZXhwZWN0KHBpY2tTdGFnZWRTaGFycFBhY2thZ2UoW2EsIGJdKSkudG9CZShhKTtcbiAgfSk7XG5cbiAgLy8gbnBtIG5lc3RzIG5leHQncyBvd24gYHNoYXJwYCB3aGVuIHRoZSBhcHAncyBob2lzdGVkIG9uZSBpcyBhbm90aGVyIHZlcnNpb247XG4gIC8vIHRoZSBiaW5hcmllcyBoYXZlIHRvIG1hdGNoIHRoZSBjb3B5IHRoZSBpbWFnZSBvcHRpbWl6ZXIgbG9hZHMuXG4gIGl0KFwicGlja3MgdGhlIGNvcHkgdGhlIHN0YWdlZCBuZXh0IHJlc29sdmVzLCBvdmVyIGEgc2hvcnRlciBvbmVcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJvb3QgPSBqb2luKGRpciwgXCJzdGFnZWRcIik7XG4gICAgY29uc3QgaG9pc3RlZCA9IGpvaW4ocm9vdCwgXCJub2RlX21vZHVsZXMvc2hhcnBcIik7XG4gICAgY29uc3QgbmVzdGVkID0gam9pbihyb290LCBcIm5vZGVfbW9kdWxlcy9uZXh0L25vZGVfbW9kdWxlcy9zaGFycFwiKTtcbiAgICBmb3IgKGNvbnN0IHNoYXJwIG9mIFtob2lzdGVkLCBuZXN0ZWRdKSB7XG4gICAgICB3cml0ZShcbiAgICAgICAgam9pbihzaGFycCwgXCJwYWNrYWdlLmpzb25cIiksXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHsgbmFtZTogXCJzaGFycFwiLCBtYWluOiBcImluZGV4LmpzXCIgfSksXG4gICAgICApO1xuICAgICAgd3JpdGUoam9pbihzaGFycCwgXCJpbmRleC5qc1wiKSwgXCJcIik7XG4gICAgfVxuICAgIHdyaXRlKFxuICAgICAgam9pbihyb290LCBcIm5vZGVfbW9kdWxlcy9uZXh0L3BhY2thZ2UuanNvblwiKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHsgbmFtZTogXCJuZXh0XCIgfSksXG4gICAgKTtcbiAgICBjb25zdCBuZXh0U2hhcnAgPSByZXNvbHZlTmV4dFNoYXJwKGpvaW4ocm9vdCwgXCJhcHBzL3dlYlwiKSk7XG4gICAgZXhwZWN0KG5leHRTaGFycCkudG9CZShqb2luKHJlYWxwYXRoU3luYyhuZXN0ZWQpLCBcImluZGV4LmpzXCIpKTtcbiAgICBleHBlY3QocGlja1N0YWdlZFNoYXJwUGFja2FnZShbaG9pc3RlZCwgbmVzdGVkXSwgbmV4dFNoYXJwKSkudG9CZShuZXN0ZWQpO1xuICB9KTtcblxuICBpdChcInJlc29sdmVzIG5vdGhpbmcgd2hlbiB0aGUgc3RhZ2VkIHRyZWUgaGFzIG5vIG5leHRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChyZXNvbHZlTmV4dFNoYXJwKGpvaW4oZGlyLCBcImFwcHMvd2ViXCIpKSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIlNoYXJwIHN0YWdpbmcgZm9yIHRoZSBkZXBsb3ltZW50IHRhcmdldFwiLCAoKSA9PiB7XG4gIC8vIEEgdmVyc2lvbiBubyByZWFsIGBzaGFycGAgcGlucywgc28gdGhlIHRhcmJhbGxzIHNlZWRlZCBpbnRvIHRoZSBzaGFyZWRcbiAgLy8gZG93bmxvYWQgY2FjaGUgYmVsb3cgYXJlIG5ldmVyIG1pc3Rha2VuIGZvciAob3IgY2xvYmJlcikgcmVhbCBvbmVzLlxuICBjb25zdCBWRVJTSU9OID0gXCIwLjAuMC1jZGstbmV4dGpzLXRlc3RcIjtcbiAgY29uc3QgY2FjaGVEaXIgPSBqb2luKHRtcGRpcigpLCBcImNkay1uZXh0anMtc2hhcnAtY2FjaGVcIik7XG4gIGNvbnN0IHNlZWRlZDogc3RyaW5nW10gPSBbXTtcblxuICBhZnRlckFsbCgoKSA9PiB7XG4gICAgZm9yIChjb25zdCBmaWxlIG9mIHNlZWRlZCkgcm1TeW5jKGZpbGUsIHsgZm9yY2U6IHRydWUgfSk7XG4gIH0pO1xuXG4gIC8qKiBTZWVkIHRoZSBkb3dubG9hZCBjYWNoZSBzbyB0aGUgaW5zdGFsbCBydW5zIHdpdGhvdXQgdGhlIHJlZ2lzdHJ5LiAqL1xuICBmdW5jdGlvbiBzZWVkQ2FjaGUobmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcGtnID0gam9pbihkaXIsIFwidGd6XCIsIG5hbWUsIFwicGFja2FnZVwiKTtcbiAgICB3cml0ZShqb2luKHBrZywgXCJwYWNrYWdlLmpzb25cIiksIEpTT04uc3RyaW5naWZ5KHsgbmFtZTogYEBpbWcvJHtuYW1lfWAgfSkpO1xuICAgIG1rZGlyU3luYyhjYWNoZURpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgY29uc3QgdGd6ID0gam9pbihjYWNoZURpciwgYCR7bmFtZX0tJHtWRVJTSU9OfS50Z3pgKTtcbiAgICBleGVjRmlsZVN5bmMoXCJ0YXJcIiwgW1wiLWN6ZlwiLCB0Z3osIFwiLUNcIiwgam9pbihwa2csIFwiLi5cIiksIFwicGFja2FnZVwiXSk7XG4gICAgc2VlZGVkLnB1c2godGd6KTtcbiAgfVxuXG4gIC8vIFByaXZhdGU6IHRoZSBtZXRob2RzIGBOZXh0anNCdWlsZGAgcnVucyBwZXIgZGVwbG95bWVudCByb290LCB3aGljaCBvbmx5XG4gIC8vIHRvdWNoIHRoZSBmaWxlc3lzdGVtLCBzbyB0aGV5IHJ1biBoZXJlIHdpdGhvdXQgYSBjb25zdHJ1Y3QuXG4gIGNvbnN0IGJ1aWxkID0gTmV4dGpzQnVpbGQucHJvdG90eXBlIGFzIHVua25vd24gYXMge1xuICAgIHJlbW92ZUV4aXN0aW5nU2hhcnBCaW5hcmllcyhcbiAgICAgIHJvb3Q6IHN0cmluZyxcbiAgICAgIHByb2plY3REaXI6IHN0cmluZyxcbiAgICApOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgc3RhZ2VTaGFycEZvclRhcmdldChcbiAgICAgIHJvb3Q6IHsgbmFtZTogc3RyaW5nOyBwYXRoOiBzdHJpbmcgfSxcbiAgICAgIHByb2plY3REaXI6IHN0cmluZyxcbiAgICAgIHBsYXRmb3JtOiBzdHJpbmcsXG4gICAgKTogdm9pZDtcbiAgfTtcblxuICAvKiogQSBzdGFnZWQgcG5wbSBgc2hhcnBgIHRoYXQgcGlucyB0ZXN0LXZlcnNpb24gYmluYXJpZXMgZm9yIGBwbGF0Zm9ybWAuICovXG4gIGZ1bmN0aW9uIHN0YWdlUGlubmVkU2hhcnAocm9vdDogc3RyaW5nLCBwbGF0Zm9ybTogc3RyaW5nKSB7XG4gICAgc3RhZ2VQbnBtU2hhcnAocm9vdCk7XG4gICAgd3JpdGUoXG4gICAgICBqb2luKFxuICAgICAgICByb290LFxuICAgICAgICBcIm5vZGVfbW9kdWxlcy8ucG5wbS9zaGFycEAwLjM0LjUvbm9kZV9tb2R1bGVzL3NoYXJwL3BhY2thZ2UuanNvblwiLFxuICAgICAgKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgbmFtZTogXCJzaGFycFwiLFxuICAgICAgICB2ZXJzaW9uOiBcIjAuMzQuNVwiLFxuICAgICAgICBvcHRpb25hbERlcGVuZGVuY2llczoge1xuICAgICAgICAgIFtgQGltZy9zaGFycC0ke3BsYXRmb3JtfWBdOiBWRVJTSU9OLFxuICAgICAgICAgIFtgQGltZy9zaGFycC1saWJ2aXBzLSR7cGxhdGZvcm19YF06IFZFUlNJT04sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBbYHNoYXJwLSR7cGxhdGZvcm19YCwgYHNoYXJwLWxpYnZpcHMtJHtwbGF0Zm9ybX1gXSkge1xuICAgICAgc2VlZENhY2hlKG5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIGl0LmVhY2goW1xuICAgIFtcImxpbnV4LXg2NFwiLCBcImRhcndpbi1hcm02NFwiXSxcbiAgICBbXCJsaW51eC1hcm02NFwiLCBcImxpbnV4LXg2NFwiXSxcbiAgICBbXCJsaW51eG11c2wtYXJtNjRcIiwgXCJsaW51eC14NjRcIl0sXG4gIF0pKFxuICAgIFwicmVwbGFjZXMgdGhlIGhvc3QncyBiaW5hcmllcyB3aXRoICVzIG9uZXMsIGxlYXZpbmcgbG9vay1hbGlrZXNcIixcbiAgICAocGxhdGZvcm0sIGhvc3QpID0+IHtcbiAgICAgIGNvbnN0IHJvb3QgPSBqb2luKGRpciwgXCJzdGFnZWRcIik7XG4gICAgICBzdGFnZVBucG1TaGFycChyb290KTtcbiAgICAgIGNvbnN0IHN0b3JlID0gam9pbihcbiAgICAgICAgcm9vdCxcbiAgICAgICAgXCJub2RlX21vZHVsZXMvLnBucG0vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgICAgKTtcbiAgICAgIHdyaXRlKFxuICAgICAgICBqb2luKHN0b3JlLCBcInBhY2thZ2UuanNvblwiKSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIG5hbWU6IFwic2hhcnBcIixcbiAgICAgICAgICB2ZXJzaW9uOiBcIjAuMzQuNVwiLFxuICAgICAgICAgIG9wdGlvbmFsRGVwZW5kZW5jaWVzOiB7XG4gICAgICAgICAgICBbYEBpbWcvc2hhcnAtJHtwbGF0Zm9ybX1gXTogVkVSU0lPTixcbiAgICAgICAgICAgIFtgQGltZy9zaGFycC1saWJ2aXBzLSR7cGxhdGZvcm19YF06IFZFUlNJT04sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgICAgLy8gVGhlIGhvc3QncyBiaW5hcmllcyBhcyBwbnBtIHN0YWdlcyB0aGVtOiBpbiB0aGUgc3RvcmUsIGxpbmtlZCBmcm9tXG4gICAgICAvLyBuZXh0IHRvIGBzaGFycGAsIGFuZCAoaG9pc3RlZCkgYXQgdGhlIHJvb3QuXG4gICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgW2BzaGFycC0ke2hvc3R9YCwgYHNoYXJwLWxpYnZpcHMtJHtob3N0fWBdKSB7XG4gICAgICAgIHdyaXRlKFxuICAgICAgICAgIGpvaW4oXG4gICAgICAgICAgICByb290LFxuICAgICAgICAgICAgYG5vZGVfbW9kdWxlcy8ucG5wbS9AaW1nKyR7bmFtZX1AMC4zNC41L25vZGVfbW9kdWxlcy9AaW1nLyR7bmFtZX0vcGFja2FnZS5qc29uYCxcbiAgICAgICAgICApLFxuICAgICAgICAgIFwie31cIixcbiAgICAgICAgKTtcbiAgICAgICAgbWtkaXJTeW5jKFxuICAgICAgICAgIGpvaW4ocm9vdCwgXCJub2RlX21vZHVsZXMvLnBucG0vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9AaW1nXCIpLFxuICAgICAgICAgIHsgcmVjdXJzaXZlOiB0cnVlIH0sXG4gICAgICAgICk7XG4gICAgICAgIHN5bWxpbmtTeW5jKFxuICAgICAgICAgIGAuLi8uLi8uLi9AaW1nKyR7bmFtZX1AMC4zNC41L25vZGVfbW9kdWxlcy9AaW1nLyR7bmFtZX1gLFxuICAgICAgICAgIGpvaW4oXG4gICAgICAgICAgICByb290LFxuICAgICAgICAgICAgYG5vZGVfbW9kdWxlcy8ucG5wbS9zaGFycEAwLjM0LjUvbm9kZV9tb2R1bGVzL0BpbWcvJHtuYW1lfWAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgd3JpdGUoam9pbihyb290LCBgbm9kZV9tb2R1bGVzL0BpbWcvJHtuYW1lfS9wYWNrYWdlLmpzb25gKSwgXCJ7fVwiKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxvb2thbGlrZXMgPSBbXG4gICAgICAgIFwiYXBwcy93ZWIvLm5leHQvc2VydmVyL2FwcC9zaGFycC1lZGdlcy9wYWdlLmpzXCIsXG4gICAgICAgIFwibm9kZV9tb2R1bGVzLy5wbnBtL3NoYXJwLWljb0AwLjEuNS9ub2RlX21vZHVsZXMvc2hhcnAtaWNvL3BhY2thZ2UuanNvblwiLFxuICAgICAgICBcImFwcHMvd2ViL25vZGVfbW9kdWxlcy9zaGFycC1pY28vcGFja2FnZS5qc29uXCIsXG4gICAgICBdO1xuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGxvb2thbGlrZXMpIHdyaXRlKGpvaW4ocm9vdCwgZmlsZSksIFwiXCIpO1xuICAgICAgZm9yIChjb25zdCBuYW1lIG9mIFtgc2hhcnAtJHtwbGF0Zm9ybX1gLCBgc2hhcnAtbGlidmlwcy0ke3BsYXRmb3JtfWBdKSB7XG4gICAgICAgIHNlZWRDYWNoZShuYW1lKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc291cmNlID0gYnVpbGQucmVtb3ZlRXhpc3RpbmdTaGFycEJpbmFyaWVzKFxuICAgICAgICByb290LFxuICAgICAgICBqb2luKHJvb3QsIFwiYXBwcy93ZWJcIiksXG4gICAgICApO1xuICAgICAgZXhwZWN0KHNvdXJjZSkudG9CZShzdG9yZSk7XG4gICAgICBidWlsZC5zdGFnZVNoYXJwRm9yVGFyZ2V0KFxuICAgICAgICB7IG5hbWU6IFwiZGVmYXVsdFwiLCBwYXRoOiByb290IH0sXG4gICAgICAgIGpvaW4ocm9vdCwgXCJhcHBzL3dlYlwiKSxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICApO1xuXG4gICAgICBleHBlY3QocmVhZGRpclN5bmMoc2hhcnBCaW5hcnlEaXIocm9vdCkpLnNvcnQoKSkudG9FcXVhbChcbiAgICAgICAgW2BzaGFycC0ke3BsYXRmb3JtfWAsIGBzaGFycC1saWJ2aXBzLSR7cGxhdGZvcm19YF0uc29ydCgpLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgSlNPTi5wYXJzZShcbiAgICAgICAgICByZWFkRmlsZVN5bmMoXG4gICAgICAgICAgICBqb2luKHNoYXJwQmluYXJ5RGlyKHJvb3QpLCBgc2hhcnAtJHtwbGF0Zm9ybX0vcGFja2FnZS5qc29uYCksXG4gICAgICAgICAgICBcInV0Zi04XCIsXG4gICAgICAgICAgKSxcbiAgICAgICAgKS5uYW1lLFxuICAgICAgKS50b0JlKGBAaW1nL3NoYXJwLSR7cGxhdGZvcm19YCk7XG4gICAgICAvLyBObyBob3N0IGJpbmFyeSBzdXJ2aXZlcywgZGFuZ2xpbmcgbGluayBvciBvdGhlcndpc2UuXG4gICAgICBleHBlY3QoXG4gICAgICAgIGxpc3RUcmVlKHJvb3QpLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUuaW5jbHVkZXMoaG9zdCkpLFxuICAgICAgKS50b0VxdWFsKFtdKTtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBsb29rYWxpa2VzKSB7XG4gICAgICAgIGV4cGVjdChleGlzdHNTeW5jKGpvaW4ocm9vdCwgZmlsZSkpKS50b0JlKHRydWUpO1xuICAgICAgfVxuICAgIH0sXG4gICk7XG5cbiAgaXQoXCJ3YXJucyBhbmQgaW5zdGFsbHMgbm90aGluZyB3aGVuIHRoZSBidWlsZCBzdGFnZWQgbm8gc2hhcnBcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHJvb3QgPSBqb2luKGRpciwgXCJzdGFnZWRcIik7XG4gICAgd3JpdGUoam9pbihyb290LCBcImFwcHMvd2ViL3NlcnZlci5qc1wiKSwgXCJcIik7XG4gICAgY29uc3Qgd2FybiA9IGplc3Quc3B5T24oY29uc29sZSwgXCJ3YXJuXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgY29uc3Qgc291cmNlID0gYnVpbGQucmVtb3ZlRXhpc3RpbmdTaGFycEJpbmFyaWVzKFxuICAgICAgcm9vdCxcbiAgICAgIGpvaW4ocm9vdCwgXCJhcHBzL3dlYlwiKSxcbiAgICApO1xuICAgIGV4cGVjdChzb3VyY2UpLnRvQmVVbmRlZmluZWQoKTtcbiAgICBidWlsZC5zdGFnZVNoYXJwRm9yVGFyZ2V0KFxuICAgICAgeyBuYW1lOiBcImRlZmF1bHRcIiwgcGF0aDogcm9vdCB9LFxuICAgICAgam9pbihyb290LCBcImFwcHMvd2ViXCIpLFxuICAgICAgXCJsaW51eC1hcm02NFwiLFxuICAgICk7XG4gICAgZXhwZWN0KGV4aXN0c1N5bmMoc2hhcnBCaW5hcnlEaXIocm9vdCkpKS50b0JlKGZhbHNlKTtcbiAgICBleHBlY3Qod2FybikudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICBleHBlY3Quc3RyaW5nQ29udGFpbmluZygnXCJzaGFycFwiIG5vdCBmb3VuZCcpLFxuICAgICk7XG4gICAgd2Fybi5tb2NrUmVzdG9yZSgpO1xuICB9KTtcblxuICBkZXNjcmliZShcInBlciBmdW5jdGlvbiBncm91cFwiLCAoKSA9PiB7XG4gICAgY29uc3QgcGxhdGZvcm0gPSBcImxpbnV4LWFybTY0XCI7XG4gICAgY29uc3Qgc3RhZ2UgPSAobmFtZTogc3RyaW5nKSA9PlxuICAgICAgYnVpbGQuc3RhZ2VTaGFycEZvclRhcmdldChcbiAgICAgICAgeyBuYW1lLCBwYXRoOiBqb2luKGRpciwgXCJzdGFnZWRcIikgfSxcbiAgICAgICAgam9pbihkaXIsIFwic3RhZ2VkL2FwcHMvd2ViXCIpLFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgICk7XG5cbiAgICAvLyBPbmx5IGBkZWZhdWx0YCBzZXJ2ZXMgYC9fbmV4dC9pbWFnZWAsIHNvIGEgZ3JvdXAgd2l0aG91dCBzaGFycCBpcyBub3JtYWwuXG4gICAgaXQoXCJpbnN0YWxscyBub3RoaW5nIGFuZCBzdGF5cyBxdWlldCBmb3IgYSBncm91cCB3aXRob3V0IHNoYXJwXCIsICgpID0+IHtcbiAgICAgIHdyaXRlKGpvaW4oZGlyLCBcInN0YWdlZC9hcHBzL3dlYi9zZXJ2ZXIuanNcIiksIFwiXCIpO1xuICAgICAgY29uc3Qgd2FybiA9IGplc3Quc3B5T24oY29uc29sZSwgXCJ3YXJuXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgICBzdGFnZShcImFwaVwiKTtcbiAgICAgIGV4cGVjdChleGlzdHNTeW5jKHNoYXJwQmluYXJ5RGlyKGpvaW4oZGlyLCBcInN0YWdlZFwiKSkpKS50b0JlKGZhbHNlKTtcbiAgICAgIGV4cGVjdCh3YXJuKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgd2Fybi5tb2NrUmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJ3YXJucyBmb3IgZGVmYXVsdCB3aXRob3V0IHNoYXJwLCB3aGljaCBjYW4ndCBvcHRpbWl6ZSBpbWFnZXNcIiwgKCkgPT4ge1xuICAgICAgd3JpdGUoam9pbihkaXIsIFwic3RhZ2VkL2FwcHMvd2ViL3NlcnZlci5qc1wiKSwgXCJcIik7XG4gICAgICBjb25zdCB3YXJuID0gamVzdC5zcHlPbihjb25zb2xlLCBcIndhcm5cIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICAgIHN0YWdlKFwiZGVmYXVsdFwiKTtcbiAgICAgIGV4cGVjdCh3YXJuKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ1wic2hhcnBcIiBub3QgZm91bmQnKSxcbiAgICAgICk7XG4gICAgICB3YXJuLm1vY2tSZXN0b3JlKCk7XG4gICAgfSk7XG5cbiAgICBpdChcImluc3RhbGxzIHRoZSB0YXJnZXQncyBiaW5hcmllcyBmb3IgYSBncm91cCB3aG9zZSBvd24gcm91dGVzIHVzZSBzaGFycFwiLCAoKSA9PiB7XG4gICAgICBzdGFnZVBpbm5lZFNoYXJwKGpvaW4oZGlyLCBcInN0YWdlZFwiKSwgcGxhdGZvcm0pO1xuICAgICAgc3RhZ2UoXCJhcGlcIik7XG4gICAgICBleHBlY3QocmVhZGRpclN5bmMoc2hhcnBCaW5hcnlEaXIoam9pbihkaXIsIFwic3RhZ2VkXCIpKSkuc29ydCgpKS50b0VxdWFsKFxuICAgICAgICBbYHNoYXJwLSR7cGxhdGZvcm19YCwgYHNoYXJwLWxpYnZpcHMtJHtwbGF0Zm9ybX1gXS5zb3J0KCksXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImRlcGxveW1lbnRCdWlsZElkXCIsICgpID0+IHtcbiAgaXQoXCJpcyBOZXh0LmpzJ3MgYnVpbGQgSUQgd2hlbiB0aGUgYXBwIHNldHMgbm8gZGVwbG95bWVudElkXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBkZXBsb3ltZW50QnVpbGRJZCh7IGJ1aWxkSWQ6IFwiYjFcIiwgY29uZmlnOiB7IGRlcGxveW1lbnRJZDogXCJcIiB9IH0pLFxuICAgICkudG9CZShcImIxXCIpO1xuICB9KTtcblxuICAvLyBXaXRoIGBORVhUX0RFUExPWU1FTlRfSURgLCBOZXh0J3MgQlVJTERfSUQgaXMgYSBjb25zdGFudCwgc28gd2l0aG91dCB0aGVcbiAgLy8gc3VmZml4IGV2ZXJ5IGRlcGxveW1lbnQgd291bGQgc2hhcmUgb25lIGNhY2hlIHBhcnRpdGlvbi5cbiAgaXQoXCJpcyBzdWZmaXhlZCB3aXRoIHRoZSBkZXBsb3ltZW50SWQgd2hlbiB0aGUgYXBwIHNldHMgb25lXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICBkZXBsb3ltZW50QnVpbGRJZCh7IGJ1aWxkSWQ6IFwiYjFcIiwgY29uZmlnOiB7IGRlcGxveW1lbnRJZDogXCJkN1wiIH0gfSksXG4gICAgKS50b0JlKFwiYjEtZDdcIik7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwibGlzdFRyZWVcIiwgKCkgPT4ge1xuICBpdChcImxpc3RzIGxpbmtzIHdpdGhvdXQgZGVzY2VuZGluZyBpbnRvIHRoZW0sIHNvIGEgY3ljbGUgZW5kc1wiLCAoKSA9PiB7XG4gICAgd3JpdGUoam9pbihkaXIsIFwicGFja2FnZXMvYS9pbmRleC5qc1wiKSwgXCJcIik7XG4gICAgd3JpdGUoam9pbihkaXIsIFwicGFja2FnZXMvYi9pbmRleC5qc1wiKSwgXCJcIik7XG4gICAgbWtkaXJTeW5jKGpvaW4oZGlyLCBcInBhY2thZ2VzL2Evbm9kZV9tb2R1bGVzL0BvcmdcIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIG1rZGlyU3luYyhqb2luKGRpciwgXCJwYWNrYWdlcy9iL25vZGVfbW9kdWxlcy9Ab3JnXCIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBzeW1saW5rU3luYyhcIi4uLy4uLy4uL2JcIiwgam9pbihkaXIsIFwicGFja2FnZXMvYS9ub2RlX21vZHVsZXMvQG9yZy9iXCIpKTtcbiAgICBzeW1saW5rU3luYyhcIi4uLy4uLy4uL2FcIiwgam9pbihkaXIsIFwicGFja2FnZXMvYi9ub2RlX21vZHVsZXMvQG9yZy9hXCIpKTtcblxuICAgIGNvbnN0IGZpbGVzID0gbGlzdFRyZWUoZGlyKVxuICAgICAgLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IFwiaW5kZXguanNcIilcbiAgICAgIC5tYXAoKGVudHJ5KSA9PiBlbnRyeS5wYXJlbnRQYXRoKTtcbiAgICBleHBlY3QoZmlsZXMuc29ydCgpKS50b0VxdWFsKFtcbiAgICAgIGpvaW4oZGlyLCBcInBhY2thZ2VzL2FcIiksXG4gICAgICBqb2luKGRpciwgXCJwYWNrYWdlcy9iXCIpLFxuICAgIF0pO1xuICB9KTtcbn0pO1xuXG4vKiogQSBgLm5vZGVgIGZpbGUgY2FycnlpbmcganVzdCBlbm91Z2ggaGVhZGVyIHRvIGJlIHJlYWQgYXMgYHBsYXRmb3JtYC4gKi9cbmZ1bmN0aW9uIHdyaXRlQWRkb24oXG4gIHBhdGg6IHN0cmluZyxcbiAgcGxhdGZvcm06IFwibGludXgtYXJtNjRcIiB8IFwibGludXgteDY0XCIgfCBcImRhcndpblwiLFxuKSB7XG4gIGNvbnN0IGhlYWRlciA9IEJ1ZmZlci5hbGxvYygyMCk7XG4gIGlmIChwbGF0Zm9ybSA9PT0gXCJkYXJ3aW5cIikge1xuICAgIGhlYWRlci53cml0ZVVJbnQzMkJFKDB4Y2ZmYWVkZmUsIDApO1xuICB9IGVsc2Uge1xuICAgIGhlYWRlci53cml0ZVVJbnQzMkJFKDB4N2Y0NTRjNDYsIDApO1xuICAgIGhlYWRlcls1XSA9IDE7XG4gICAgaGVhZGVyLndyaXRlVUludDE2TEUocGxhdGZvcm0gPT09IFwibGludXgtYXJtNjRcIiA/IDE4MyA6IDYyLCAxOCk7XG4gIH1cbiAgbWtkaXJTeW5jKGpvaW4ocGF0aCwgXCIuLlwiKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIHdyaXRlRmlsZVN5bmMocGF0aCwgaGVhZGVyKTtcbn1cblxuZGVzY3JpYmUoXCJuYXRpdmVCaW5hcnlQbGF0Zm9ybVwiLCAoKSA9PiB7XG4gIGl0LmVhY2goW1wibGludXgtYXJtNjRcIiwgXCJsaW51eC14NjRcIiwgXCJkYXJ3aW5cIl0gYXMgY29uc3QpKFxuICAgIFwicmVhZHMgJXMgZnJvbSB0aGUgaGVhZGVyXCIsXG4gICAgKHBsYXRmb3JtKSA9PiB7XG4gICAgICB3cml0ZUFkZG9uKGpvaW4oZGlyLCBcImEubm9kZVwiKSwgcGxhdGZvcm0pO1xuICAgICAgZXhwZWN0KG5hdGl2ZUJpbmFyeVBsYXRmb3JtKGpvaW4oZGlyLCBcImEubm9kZVwiKSkpLnRvQmUocGxhdGZvcm0pO1xuICAgIH0sXG4gICk7XG5cbiAgaXQoXCJyZXR1cm5zIHVuZGVmaW5lZCBmb3IgYSBmaWxlIHRoYXQgaXNuJ3QgYSBiaW5hcnlcIiwgKCkgPT4ge1xuICAgIHdyaXRlKGpvaW4oZGlyLCBcImEubm9kZVwiKSwgXCJub3QgYSBiaW5hcnlcIik7XG4gICAgZXhwZWN0KG5hdGl2ZUJpbmFyeVBsYXRmb3JtKGpvaW4oZGlyLCBcImEubm9kZVwiKSkpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJmaW5kRm9yZWlnbk5hdGl2ZVBhY2thZ2VzXCIsICgpID0+IHtcbiAgY29uc3QgcGtnID0gKHBhdGg6IHN0cmluZykgPT4gd3JpdGUoam9pbihkaXIsIHBhdGgsIFwicGFja2FnZS5qc29uXCIpLCBcInt9XCIpO1xuXG4gIGl0KFwibmFtZXMgYSBwYWNrYWdlIHdpdGggb25seSBhbm90aGVyIHBsYXRmb3JtJ3MgYWRkb25cIiwgKCkgPT4ge1xuICAgIGNvbnN0IGdsaWRlID0gXCJub2RlX21vZHVsZXMvQHZhbGtleS92YWxrZXktZ2xpZGUtZGFyd2luLWFybTY0XCI7XG4gICAgcGtnKGdsaWRlKTtcbiAgICB3cml0ZUFkZG9uKGpvaW4oZGlyLCBnbGlkZSwgXCJidWlsZC9nbGlkZS5ub2RlXCIpLCBcImRhcndpblwiKTtcblxuICAgIGV4cGVjdChmaW5kRm9yZWlnbk5hdGl2ZVBhY2thZ2VzKGRpciwgXCJsaW51eC1hcm02NFwiKSkudG9FcXVhbChbZ2xpZGVdKTtcbiAgfSk7XG5cbiAgaXQoXCJwYXNzZXMgYSBwYWNrYWdlIHdpdGggdGhlIHRhcmdldCdzIGFkZG9uLCBldmVuIGJlc2lkZSBvdGhlcnNcIiwgKCkgPT4ge1xuICAgIHBrZyhcIm5vZGVfbW9kdWxlcy9va1wiKTtcbiAgICB3cml0ZUFkZG9uKGpvaW4oZGlyLCBcIm5vZGVfbW9kdWxlcy9vay9hLm5vZGVcIiksIFwibGludXgtYXJtNjRcIik7XG4gICAgcGtnKFwibm9kZV9tb2R1bGVzL3ByZWJ1aWx0XCIpO1xuICAgIHdyaXRlQWRkb24oXG4gICAgICBqb2luKGRpciwgXCJub2RlX21vZHVsZXMvcHJlYnVpbHQvcHJlYnVpbGRzL2Rhcndpbi1hcm02NC9hLm5vZGVcIiksXG4gICAgICBcImRhcndpblwiLFxuICAgICk7XG4gICAgd3JpdGVBZGRvbihcbiAgICAgIGpvaW4oZGlyLCBcIm5vZGVfbW9kdWxlcy9wcmVidWlsdC9wcmVidWlsZHMvbGludXgtYXJtNjQvYS5ub2RlXCIpLFxuICAgICAgXCJsaW51eC1hcm02NFwiLFxuICAgICk7XG4gICAgd3JpdGUoam9pbihkaXIsIFwibm9kZV9tb2R1bGVzL29rL25vdGVzLm5vZGVcIiksIFwidGV4dFwiKTtcblxuICAgIGV4cGVjdChmaW5kRm9yZWlnbk5hdGl2ZVBhY2thZ2VzKGRpciwgXCJsaW51eC1hcm02NFwiKSkudG9FcXVhbChbXSk7XG4gIH0pO1xuXG4gIGl0KFwidGVsbHMgYXJjaGl0ZWN0dXJlcyBhcGFydFwiLCAoKSA9PiB7XG4gICAgcGtnKFwibm9kZV9tb2R1bGVzL3g2NFwiKTtcbiAgICB3cml0ZUFkZG9uKGpvaW4oZGlyLCBcIm5vZGVfbW9kdWxlcy94NjQvYS5ub2RlXCIpLCBcImxpbnV4LXg2NFwiKTtcblxuICAgIGV4cGVjdChmaW5kRm9yZWlnbk5hdGl2ZVBhY2thZ2VzKGRpciwgXCJsaW51eC1hcm02NFwiKSkudG9FcXVhbChbXG4gICAgICBcIm5vZGVfbW9kdWxlcy94NjRcIixcbiAgICBdKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJzdG9yZWRTaXplXCIsICgpID0+IHtcbiAgaXQoXCJjb3VudHMgYSBsaW5rIGFzIGl0cyB0YXJnZXQgcGF0aCwgYXMgdGhlIHppcCBzdG9yZXMgaXRcIiwgKCkgPT4ge1xuICAgIHdyaXRlKGpvaW4oZGlyLCBcInN0b3JlL3BrZy9maWxlXCIpLCBcInhcIi5yZXBlYXQoMTAwKSk7XG4gICAgbWtkaXJTeW5jKGpvaW4oZGlyLCBcImFcIikpO1xuICAgIHN5bWxpbmtTeW5jKFwiLi4vc3RvcmUvcGtnXCIsIGpvaW4oZGlyLCBcImEvcGtnXCIpKTtcblxuICAgIGV4cGVjdChzdG9yZWRTaXplKGRpcikpLnRvQmUoMTAwICsgXCIuLi9zdG9yZS9wa2dcIi5sZW5ndGgpO1xuICB9KTtcblxuICBpdChcInRlcm1pbmF0ZXMgb24gYSBjeWNsZSBhbmQgY291bnRzIGEgZGFuZ2xpbmcgbGlua1wiLCAoKSA9PiB7XG4gICAgd3JpdGUoam9pbihkaXIsIFwiYS9maWxlXCIpLCBcInhcIi5yZXBlYXQoMTApKTtcbiAgICBzeW1saW5rU3luYyhcIi4uXCIsIGpvaW4oZGlyLCBcImEvdXBcIikpO1xuICAgIHN5bWxpbmtTeW5jKFwibWlzc2luZ1wiLCBqb2luKGRpciwgXCJhL2RhbmdsaW5nXCIpKTtcblxuICAgIGV4cGVjdChzdG9yZWRTaXplKGRpcikpLnRvQmUoMTAgKyBcIi4uXCIubGVuZ3RoICsgXCJtaXNzaW5nXCIubGVuZ3RoKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJwYXRjaENsaWVudENodW5rXCIsICgpID0+IHtcbiAgY29uc3QgY2h1bmsgPSBcImNvbnNvbGUubG9nKCdhcHAnKTtcIjtcblxuICBpdChcInByZXBlbmRzIHRoZSBwYXRjaCBvbmNlXCIsICgpID0+IHtcbiAgICBjb25zdCBwYXRjaGVkID0gcGF0Y2hDbGllbnRDaHVuayhjaHVuaywgXCJQQVRDSF9WMVwiLCBcImNodW5rLmpzXCIpITtcbiAgICBleHBlY3QocGF0Y2hlZCkudG9NYXRjaCgvXlxcL1xcKiBjZGstbmV4dGpzOnBhdGNoLWZldGNoIFswLTlhLWZdezE2fSBcXCpcXC9cXG4vKTtcbiAgICBleHBlY3QocGF0Y2hlZCkudG9Db250YWluKFwiUEFUQ0hfVjFcIik7XG4gICAgZXhwZWN0KHBhdGNoZWQuZW5kc1dpdGgoYFxcbiR7Y2h1bmt9YCkpLnRvQmUodHJ1ZSk7XG4gICAgZXhwZWN0KHBhdGNoQ2xpZW50Q2h1bmsocGF0Y2hlZCwgXCJQQVRDSF9WMVwiLCBcImNodW5rLmpzXCIpKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xuXG4gIGl0KFwicmVwbGFjZXMgYSBwYXRjaCBmcm9tIGFub3RoZXIgY2RrLW5leHRqcyB2ZXJzaW9uXCIsICgpID0+IHtcbiAgICBjb25zdCBvbGQgPSBwYXRjaENsaWVudENodW5rKGNodW5rLCBcIlBBVENIX1YxXCIsIFwiY2h1bmsuanNcIikhO1xuICAgIGNvbnN0IHVwZGF0ZWQgPSBwYXRjaENsaWVudENodW5rKG9sZCwgXCJQQVRDSF9WMlwiLCBcImNodW5rLmpzXCIpITtcblxuICAgIGV4cGVjdCh1cGRhdGVkKS50b0NvbnRhaW4oXCJQQVRDSF9WMlwiKTtcbiAgICBleHBlY3QodXBkYXRlZCkubm90LnRvQ29udGFpbihcIlBBVENIX1YxXCIpO1xuICAgIGV4cGVjdCh1cGRhdGVkLmVuZHNXaXRoKGBcXG4ke2NodW5rfWApKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdCh1cGRhdGVkKS50b0JlKHBhdGNoQ2xpZW50Q2h1bmsoY2h1bmssIFwiUEFUQ0hfVjJcIiwgXCJjaHVuay5qc1wiKSk7XG4gIH0pO1xuXG4gIGl0KFwicmVmdXNlcyBhIHBhdGNoIHdpdGhvdXQgYW4gZW5kIG1hcmtlciByYXRoZXIgdGhhbiBzdGFja2luZyBvbiBpdFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KCgpID0+XG4gICAgICBwYXRjaENsaWVudENodW5rKFxuICAgICAgICBgLyogY2RrLW5leHRqczpwYXRjaC1mZXRjaCAqL1xcbk9MRFxcbiR7Y2h1bmt9YCxcbiAgICAgICAgXCJQQVRDSF9WMlwiLFxuICAgICAgICBcImNodW5rLmpzXCIsXG4gICAgICApLFxuICAgICkudG9UaHJvdygvUmUtcnVuIGBuZXh0IGJ1aWxkYC8pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIndyaXRlUHVibGljRmlsZUxpc3RcIiwgKCkgPT4ge1xuICBpdChcImxpc3RzIHB1YmxpYy8gdGhlIHdheSB0aGUgcnVudGltZSBsaXN0cyBpdCBvZmYgZGlza1wiLCAoKSA9PiB7XG4gICAgLy8gV3JpdHRlbiBhdCBzeW50aCwgYWZ0ZXIgdGhlIGJ1aWxkIGNvbW1hbmQsIHNvIGEgYHBvc3RidWlsZGAgZmlsZSAoaGVyZVxuICAgIC8vIGBzaXRlbWFwLnhtbGApIGlzIGxpc3RlZDsgYSBsaW5rZWQgZGlyZWN0b3J5IGlzIGZvbGxvd2VkLlxuICAgIGNvbnN0IHB1YmxpY0RpciA9IGpvaW4oZGlyLCBcInB1YmxpY1wiKTtcbiAgICB3cml0ZShqb2luKHB1YmxpY0RpciwgXCJzaXRlbWFwLnhtbFwiKSwgXCI8dXJsc2V0Lz5cIik7XG4gICAgd3JpdGUoam9pbihwdWJsaWNEaXIsIFwiaW1hZ2VzXCIsIFwibG9nb0AyeC5wbmdcIiksIFwicG5nXCIpO1xuICAgIHdyaXRlKGpvaW4oZGlyLCBcInNoYXJlZFwiLCBcImhlbGxvIGUyZS50eHRcIiksIFwiaGlcIik7XG4gICAgc3ltbGlua1N5bmMoam9pbihkaXIsIFwic2hhcmVkXCIpLCBqb2luKHB1YmxpY0RpciwgXCJzdGF0aWNcIikpO1xuICAgIGNvbnN0IHJ1bnRpbWVEaXIgPSBqb2luKGRpciwgXCJjZGstbmV4dGpzLXJ1bnRpbWVcIik7XG4gICAgbWtkaXJTeW5jKHJ1bnRpbWVEaXIpO1xuICAgIHdyaXRlUHVibGljRmlsZUxpc3QocnVudGltZURpciwgcHVibGljRGlyKTtcbiAgICBleHBlY3QoXG4gICAgICBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhqb2luKHJ1bnRpbWVEaXIsIFwicHVibGljLWZpbGVzLmpzb25cIiksIFwidXRmLThcIikpLFxuICAgICkudG9FcXVhbChbXCJpbWFnZXMvbG9nb0AyeC5wbmdcIiwgXCJzaXRlbWFwLnhtbFwiLCBcInN0YXRpYy9oZWxsbyBlMmUudHh0XCJdKTtcbiAgfSk7XG5cbiAgaXQoXCJ3cml0ZXMgYW4gZW1wdHkgbGlzdCBmb3IgYW4gYXBwIHdpdGhvdXQgcHVibGljL1wiLCAoKSA9PiB7XG4gICAgd3JpdGVQdWJsaWNGaWxlTGlzdChkaXIsIGpvaW4oZGlyLCBcInB1YmxpY1wiKSk7XG4gICAgZXhwZWN0KFxuICAgICAgSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoam9pbihkaXIsIFwicHVibGljLWZpbGVzLmpzb25cIiksIFwidXRmLThcIikpLFxuICAgICkudG9FcXVhbChbXSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiTmV4dGpzQnVpbGQgd2l0aCBza2lwQnVpbGQgYW5kIG5vIGJ1aWxkIG91dHB1dFwiLCAoKSA9PiB7XG4gIGl0KFwicmVwb3J0cyB0aGUgbWlzc2luZyBhZGFwdGVyIG1hbmlmZXN0LCBub3QgYSBiYXJlIEVOT0VOVFwiLCAoKSA9PiB7XG4gICAgLy8gYEdMT0JBTF9GVU5DVElPTlNgIHBhdGNoZXMgYC5uZXh0L3N0YXRpYy9jaHVua3NgLCB3aGljaCB1c2VkIHRvIGJlIHJlYWRcbiAgICAvLyBmaXJzdCBhbmQgZmFpbCBvbiB0aGUgbWlzc2luZyBkaXJlY3RvcnkuXG4gICAgZXhwZWN0KFxuICAgICAgKCkgPT5cbiAgICAgICAgbmV3IE5leHRqc0J1aWxkKG5ldyBTdGFjayhuZXcgQXBwKCksIFwiU3RhY2tcIiksIFwiQnVpbGRcIiwge1xuICAgICAgICAgIGJ1aWxkQ29tbWFuZDogXCJ0cnVlXCIsXG4gICAgICAgICAgYnVpbGREaXJlY3Rvcnk6IGRpcixcbiAgICAgICAgICBuZXh0anNUeXBlOiBOZXh0anNUeXBlLkdMT0JBTF9GVU5DVElPTlMsXG4gICAgICAgICAgc2tpcEJ1aWxkOiB0cnVlLFxuICAgICAgICB9KSxcbiAgICApLnRvVGhyb3coL2Nkay1uZXh0anMgYWRhcHRlciBtYW5pZmVzdCBub3QgZm91bmQvKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJOZXh0anNCdWlsZCB3aXRoIGEgYnVpbGQgc3BsaXQgYnkgb3RoZXIgZnVuY3Rpb25Hcm91cHNcIiwgKCkgPT4ge1xuICBpdChcInJlamVjdHMgYSBidWlsZCB3aG9zZSBncm91cHMga2VwdCB0aGVpciBuYW1lcyBidXQgbm90IHRoZWlyIHJvdXRlc1wiLCAoKSA9PiB7XG4gICAgLy8gTW92aW5nIGAvcmVwb3J0cy8qKmAgaW50byBgYXBpYCBrZWVwcyB0aGUgZ3JvdXAgbmFtZXMsIGFuZCBhIG5hbWVzLW9ubHlcbiAgICAvLyBjaGVjayBsZXQgQ2xvdWRGcm9udCBzZW5kIGByZXBvcnRzLypgIHRvIGEgemlwIHdpdGhvdXQgdGhvc2Ugcm91dGVzLlxuICAgIHdyaXRlKGpvaW4oZGlyLCBcIi5uZXh0XCIsIFwiQlVJTERfSURcIiksIFwiYjFcIik7XG4gICAgd3JpdGUoXG4gICAgICBqb2luKGRpciwgXCIubmV4dFwiLCBcImNkay1uZXh0anMtYWRhcHRlclwiLCBcIm1hbmlmZXN0Lmpzb25cIiksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIGJ1aWxkSWQ6IFwiYjFcIixcbiAgICAgICAgcmVsYXRpdmVQcm9qZWN0RGlyOiBcIlwiLFxuICAgICAgICBjb25maWc6IHsgYmFzZVBhdGg6IFwiXCIsIGFzc2V0UHJlZml4OiBcIlwiLCB0cmFpbGluZ1NsYXNoOiBmYWxzZSB9LFxuICAgICAgICBlbnRyeXBvaW50czoge30sXG4gICAgICAgIGdyb3VwczogeyBkZWZhdWx0OiBbXSwgYXBpOiBbXSB9LFxuICAgICAgICBmdW5jdGlvbkdyb3VwczogW3sgbmFtZTogXCJhcGlcIiwgcm91dGVzOiBbXCIvYXBpLyoqXCJdIH1dLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBleHBlY3QoXG4gICAgICAoKSA9PlxuICAgICAgICBuZXcgTmV4dGpzQnVpbGQobmV3IFN0YWNrKG5ldyBBcHAoKSwgXCJTdGFja1wiKSwgXCJCdWlsZFwiLCB7XG4gICAgICAgICAgYnVpbGRDb21tYW5kOiBcInRydWVcIixcbiAgICAgICAgICBidWlsZERpcmVjdG9yeTogZGlyLFxuICAgICAgICAgIG5leHRqc1R5cGU6IE5leHRqc1R5cGUuUkVHSU9OQUxfRlVOQ1RJT05TLFxuICAgICAgICAgIHNraXBCdWlsZDogdHJ1ZSxcbiAgICAgICAgICBmdW5jdGlvbkdyb3VwczogW3sgbmFtZTogXCJhcGlcIiwgcm91dGVzOiBbXCIvYXBpLyoqXCIsIFwiL3JlcG9ydHMvKipcIl0gfV0sXG4gICAgICAgIH0pLFxuICAgICkudG9UaHJvdygvYnVpbGQgb3V0cHV0IGlzXFxzK3N0YWxlLyk7XG4gIH0pO1xuXG4gIGl0KFwiYWNjZXB0cyBhIGJ1aWxkIHdob3NlIGdyb3VwcyBhbmQgcm91dGVzIHdlcmUgb25seSBsaXN0ZWQgaW4gYW5vdGhlciBvcmRlclwiLCAoKSA9PiB7XG4gICAgLy8gT25seSB0aGUgc3RhbGUgY2hlY2sgaXMgdW5kZXIgdGVzdDogcGFzdCBpdCwgdGhlIHVuc3RhZ2VkIHJvb3RzIHRocm93LlxuICAgIHdyaXRlKGpvaW4oZGlyLCBcIi5uZXh0XCIsIFwiQlVJTERfSURcIiksIFwiYjFcIik7XG4gICAgd3JpdGUoXG4gICAgICBqb2luKGRpciwgXCIubmV4dFwiLCBcImNkay1uZXh0anMtYWRhcHRlclwiLCBcIm1hbmlmZXN0Lmpzb25cIiksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIGJ1aWxkSWQ6IFwiYjFcIixcbiAgICAgICAgcmVsYXRpdmVQcm9qZWN0RGlyOiBcIlwiLFxuICAgICAgICBjb25maWc6IHsgYmFzZVBhdGg6IFwiXCIsIGFzc2V0UHJlZml4OiBcIlwiLCB0cmFpbGluZ1NsYXNoOiBmYWxzZSB9LFxuICAgICAgICBlbnRyeXBvaW50czoge30sXG4gICAgICAgIGdyb3VwczogeyBkZWZhdWx0OiBbXSwgYXBpOiBbXSwgZG9jczogW10gfSxcbiAgICAgICAgZnVuY3Rpb25Hcm91cHM6IFtcbiAgICAgICAgICB7IG5hbWU6IFwiYXBpXCIsIHJvdXRlczogW1wiL2FwaS8qKlwiLCBcIi9yZXBvcnRzLyoqXCJdIH0sXG4gICAgICAgICAgeyBuYW1lOiBcImRvY3NcIiwgcm91dGVzOiBbXCIvZG9jcy8qKlwiXSB9LFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBleHBlY3QoXG4gICAgICAoKSA9PlxuICAgICAgICBuZXcgTmV4dGpzQnVpbGQobmV3IFN0YWNrKG5ldyBBcHAoKSwgXCJTdGFja1wiKSwgXCJCdWlsZFwiLCB7XG4gICAgICAgICAgYnVpbGRDb21tYW5kOiBcInRydWVcIixcbiAgICAgICAgICBidWlsZERpcmVjdG9yeTogZGlyLFxuICAgICAgICAgIG5leHRqc1R5cGU6IE5leHRqc1R5cGUuUkVHSU9OQUxfRlVOQ1RJT05TLFxuICAgICAgICAgIHNraXBCdWlsZDogdHJ1ZSxcbiAgICAgICAgICBmdW5jdGlvbkdyb3VwczogW1xuICAgICAgICAgICAgeyBuYW1lOiBcImRvY3NcIiwgcm91dGVzOiBbXCIvZG9jcy8qKlwiXSB9LFxuICAgICAgICAgICAgeyBuYW1lOiBcImFwaVwiLCByb3V0ZXM6IFtcIi9yZXBvcnRzLyoqXCIsIFwiL2FwaS8qKlwiXSB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICkubm90LnRvVGhyb3coL3N0YWxlLyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiZGVwbG95bWVudEFyY2hpdGVjdHVyZVwiLCAoKSA9PiB7XG4gIGNvbnN0IGJhc2UgPSB7IGJ1aWxkQ29tbWFuZDogXCJcIiwgYnVpbGREaXJlY3Rvcnk6IFwiXCIgfTtcbiAgY29uc3QgZnVuY3Rpb25zID0geyAuLi5iYXNlLCBuZXh0anNUeXBlOiBOZXh0anNUeXBlLkdMT0JBTF9GVU5DVElPTlMgfTtcblxuICBjb25zdCBob3N0ID0gcHJvY2Vzcy5hcmNoLnN0YXJ0c1dpdGgoXCJhcm1cIikgPyBcImFybTY0XCIgOiBcIng4Nl82NFwiO1xuXG4gIGl0KFwic3RhZ2VzIHRoZSBGdW5jdGlvbnMgdHlwZXMgZm9yIHRoZSBzeW50aCBtYWNoaW5lIHVubGVzcyB0b2xkIG90aGVyd2lzZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KGRlcGxveW1lbnRBcmNoaXRlY3R1cmUoZnVuY3Rpb25zKS5uYW1lKS50b0JlKGhvc3QpO1xuICB9KTtcblxuICAvLyBUaGUgcG9pbnQgb2YgaG9ub3JpbmcgdGhlIHByb3A6IGBzaGFycGAgZm9yIGFub3RoZXIgYXJjaGl0ZWN0dXJlIGlzIG9ubHlcbiAgLy8gYSBkb3dubG9hZCwgc28gdGhlIGJ1aWxkIG5vIGxvbmdlciBoYXMgdG8gcnVuIHdoZXJlIHRoZSBmdW5jdGlvbiB3aWxsLlxuICBpdChcInN0YWdlcyBmb3IgdGhlIGFyY2hpdGVjdHVyZSBhc2tlZCBmb3IsIG5vdCB0aGUgc3ludGggbWFjaGluZSdzXCIsICgpID0+IHtcbiAgICBjb25zdCBvdGhlciA9IGhvc3QgPT09IFwiYXJtNjRcIiA/IEFyY2hpdGVjdHVyZS5YODZfNjQgOiBBcmNoaXRlY3R1cmUuQVJNXzY0O1xuICAgIGV4cGVjdChkZXBsb3ltZW50QXJjaGl0ZWN0dXJlKHsgLi4uZnVuY3Rpb25zLCBhcmNoaXRlY3R1cmU6IG90aGVyIH0pKS50b0JlKFxuICAgICAgb3RoZXIsXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJmb2xsb3dzIHRoZSBzeW50aCBtYWNoaW5lIGZvciB0aGUgQ29udGFpbmVycyB0eXBlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgcHJvcHMgPSB7XG4gICAgICAuLi5iYXNlLFxuICAgICAgbmV4dGpzVHlwZTogTmV4dGpzVHlwZS5SRUdJT05BTF9DT05UQUlORVJTLFxuICAgICAgYXJjaGl0ZWN0dXJlOlxuICAgICAgICBob3N0ID09PSBcImFybTY0XCIgPyBBcmNoaXRlY3R1cmUuWDg2XzY0IDogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICB9O1xuICAgIGV4cGVjdChkZXBsb3ltZW50QXJjaGl0ZWN0dXJlKHByb3BzKS5uYW1lKS50b0JlKGhvc3QpO1xuICB9KTtcbn0pO1xuIl19
475
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWJ1aWxkLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbmV4dGpzLWJ1aWxkL25leHRqcy1idWlsZC50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0RBQXNEO0FBQ3RELDJEQUFrRDtBQUNsRCxxQ0FVaUI7QUFDakIscUNBQWlDO0FBQ2pDLHlDQUFpQztBQUNqQyw2Q0FBeUM7QUFDekMsdURBQXNEO0FBQ3RELGlEQWF3QjtBQUN4Qiw4REFBMkQ7QUFDM0QsNENBQTBDO0FBQzFDLHNFQUFpRTtBQUVqRSxJQUFJLEdBQVcsQ0FBQztBQUVoQixVQUFVLENBQUMsR0FBRyxFQUFFO0lBQ2QsR0FBRyxHQUFHLElBQUEscUJBQVcsRUFBQyxJQUFBLGdCQUFJLEVBQUMsSUFBQSxnQkFBTSxHQUFFLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtJQUNiLElBQUEsZ0JBQU0sRUFBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELENBQUMsQ0FBQyxDQUFDO0FBRUgsU0FBUyxLQUFLLENBQUMsSUFBWSxFQUFFLE9BQWU7SUFDMUMsSUFBQSxtQkFBUyxFQUFDLElBQUEsZ0JBQUksRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNqRCxJQUFBLHVCQUFhLEVBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxJQUFZO0lBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUEsZ0JBQUksRUFDaEIsSUFBSSxFQUNKLG9EQUFvRCxDQUNyRCxDQUFDO0lBQ0YsS0FBSyxDQUNILElBQUEsZ0JBQUksRUFBQyxL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QUFZLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDeEUsS0FBSyxDQUNOLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyxvREFBb0QsRUFBRSxHQUFHLEVBQUU7UUFDNUQsTUFBTSxLQUFLLEdBQUc7WUFDWixHQUFHLElBQUk7WUFDUCxVQUFVLEVBQUUsc0JBQVUsQ0FBQyxtQkFBbUI7WUFDMUMsWUFBWSxFQUNWLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLHlCQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyx5QkFBWSxDQUFDLE1BQU07U0FDL0QsQ0FBQztRQUNGLE1BQU0sQ0FBQyxJQUFBLHFDQUFzQixFQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4RCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgeyBleGVjRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQge1xuICBleGlzdHNTeW5jLFxuICBta2RpclN5bmMsXG4gIG1rZHRlbXBTeW5jLFxuICByZWFkZGlyU3luYyxcbiAgcmVhZEZpbGVTeW5jLFxuICByZWFscGF0aFN5bmMsXG4gIHJtU3luYyxcbiAgc3ltbGlua1N5bmMsXG4gIHdyaXRlRmlsZVN5bmMsXG59IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyB0bXBkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IEFwcCwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IEFyY2hpdGVjdHVyZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQge1xuICBkZXBsb3ltZW50QXJjaGl0ZWN0dXJlLFxuICBmaW5kRm9yZWlnbk5hdGl2ZVBhY2thZ2VzLFxuICBpc1NoYXJwQmluYXJ5UGFja2FnZSxcbiAgbGlzdFRyZWUsXG4gIG5hdGl2ZUJpbmFyeVBsYXRmb3JtLFxuICBOZXh0anNCdWlsZCxcbiAgcGF0Y2hDbGllbnRDaHVuayxcbiAgcGlja1N0YWdlZFNoYXJwUGFja2FnZSxcbiAgcmVzb2x2ZU5leHRTaGFycCxcbiAgc2hhcnBCaW5hcnlEaXIsXG4gIHN0b3JlZFNpemUsXG4gIHdyaXRlUHVibGljRmlsZUxpc3QsXG59IGZyb20gXCIuL25leHRqcy1idWlsZFwiO1xuaW1wb3J0IHsgQ0RLX05FWFRKU19WRVJTSU9OIH0gZnJvbSBcIi4uL2Nkay1uZXh0anMtdmVyc2lvblwiO1xuaW1wb3J0IHsgTmV4dGpzVHlwZSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGRlcGxveW1lbnRCdWlsZElkIH0gZnJvbSBcIi4uL3V0aWxzL2RlcGxveW1lbnQtYnVpbGQtaWRcIjtcblxubGV0IGRpcjogc3RyaW5nO1xuXG5iZWZvcmVFYWNoKCgpID0+IHtcbiAgZGlyID0gbWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgXCJuZXh0anMtYnVpbGQtdGVzdC1cIikpO1xufSk7XG5cbmFmdGVyRWFjaCgoKSA9PiB7XG4gIHJtU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbn0pO1xuXG5mdW5jdGlvbiB3cml0ZShwYXRoOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZykge1xuICBta2RpclN5bmMoam9pbihwYXRoLCBcIi4uXCIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgd3JpdGVGaWxlU3luYyhwYXRoLCBjb250ZW50KTtcbn1cblxuLyoqXG4gKiBUaGUgbGF5b3V0IHBucG0gc3RhZ2VzOiBgc2hhcnBgJ3MgZmlsZXMgaW4gdGhlIHZpcnR1YWwgc3RvcmUsIHJlYWNoZWQgdGhyb3VnaFxuICogbGlua3MgZnJvbSB0aGUgYXBwIGFuZCBmcm9tIGBuZXh0YC5cbiAqL1xuZnVuY3Rpb24gc3RhZ2VQbnBtU2hhcnAocm9vdDogc3RyaW5nKSB7XG4gIGNvbnN0IHN0b3JlID0gam9pbihcbiAgICByb290LFxuICAgIFwibm9kZV9tb2R1bGVzLy5wbnBtL3NoYXJwQDAuMzQuNS9ub2RlX21vZHVsZXMvc2hhcnBcIixcbiAgKTtcbiAgd3JpdGUoXG4gICAgam9pbihzdG9yZSwgXCJwYWNrYWdlLmpzb25cIiksXG4gICAgSlNPTi5zdHJpbmdpZnkoeyBuYW1lOiBcInNoYXJwXCIsIG1haW46IFwiaW5kZXguanNcIiB9KSxcbiAgKTtcbiAgd3JpdGUoXG4gICAgam9pbihzdG9yZSwgXCJpbmRleC5qc1wiKSxcbiAgICAnbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiQGltZy9zaGFycC1saW51eC14NjRcIik7JyxcbiAgKTtcbiAgbWtkaXJTeW5jKGpvaW4ocm9vdCwgXCJub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNi9ub2RlX21vZHVsZXNcIiksIHtcbiAgICByZWN1cnNpdmU6IHRydWUsXG4gIH0pO1xuICBzeW1saW5rU3luYyhcbiAgICBcIi4uLy4uL3NoYXJwQDAuMzQuNS9ub2RlX21vZHVsZXMvc2hhcnBcIixcbiAgICBqb2luKHJvb3QsIFwibm9kZV9tb2R1bGVzLy5wbnBtL25leHRAMTYvbm9kZV9tb2R1bGVzL3NoYXJwXCIpLFxuICApO1xuICBta2RpclN5bmMoam9pbihyb290LCBcImFwcHMvd2ViL25vZGVfbW9kdWxlc1wiKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIHN5bWxpbmtTeW5jKFxuICAgIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3NoYXJwQDAuMzQuNS9ub2RlX21vZHVsZXMvc2hhcnBcIixcbiAgICBqb2luKHJvb3QsIFwiYXBwcy93ZWIvbm9kZV9tb2R1bGVzL3NoYXJwXCIpLFxuICApO1xufVxuXG5kZXNjcmliZShcInNoYXJwQmluYXJ5RGlyXCIsICgpID0+IHtcbiAgaXQoXCJpcyByZWFjaGFibGUgZnJvbSBldmVyeSBjb3B5IG9mIHNoYXJwLCBsaW5rcyBrZXB0IG9yIGRlcmVmZXJlbmNlZFwiLCAoKSA9PiB7XG4gICAgLy8gVGhlIHppcCBhbmQgdGhlIGltYWdlIGtlZXAgbGlua3MsIHNvIHRoZSBzdG9yZSBjb3B5IGxvYWRzOyBhIGRlcmVmZXJlbmNlZFxuICAgIC8vIGNvcHkgcmVzb2x2ZXMgYEBpbWcvLi4uYCBmcm9tIHdoZXJlIGl0IHNpdHMsIG5ldmVyIGZyb20gdGhlIHN0b3JlLlxuICAgIGNvbnN0IHN0YWdlZCA9IGpvaW4oZGlyLCBcInN0YWdlZFwiKTtcbiAgICBzdGFnZVBucG1TaGFycChzdGFnZWQpO1xuICAgIGNvbnN0IGJpbmFyeSA9IGpvaW4oc2hhcnBCaW5hcnlEaXIoc3RhZ2VkKSwgXCJzaGFycC1saW51eC14NjRcIik7XG4gICAgd3JpdGUoXG4gICAgICBqb2luKGJpbmFyeSwgXCJwYWNrYWdlLmpzb25cIiksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7IG5hbWU6IFwiQGltZy9zaGFycC1saW51eC14NjRcIiwgbWFpbjogXCJpbmRleC5qc1wiIH0pLFxuICAgICk7XG4gICAgd3JpdGUoam9pbihiaW5hcnksIFwiaW5kZXguanNcIiksICdtb2R1bGUuZXhwb3J0cyA9IFwibG9hZGVkXCI7Jyk7XG5cbiAgICBjb25zdCB6aXBwZWQgPSBqb2luKGRpciwgXCJ6aXBwZWRcIik7XG4gICAgLy8gYGNwIC1STGAsIG5vdCBgY3BTeW5jYCdzIGBkZXJlZmVyZW5jZWAsIHdoaWNoIG9ubHkgcmVzb2x2ZXMgdGhlIHRvcC1sZXZlbFxuICAgIC8vIHNvdXJjZSBhbmQgcmUtbGlua3MgZXZlcnl0aGluZyB1bmRlciBpdCB0byB0aGUgb3JpZ2luYWwuXG4gICAgZXhlY0ZpbGVTeW5jKFwiY3BcIiwgW1wiLVJMXCIsIHN0YWdlZCwgemlwcGVkXSk7XG5cbiAgICBmb3IgKGNvbnN0IHJvb3Qgb2YgW3N0YWdlZCwgemlwcGVkXSkge1xuICAgICAgZm9yIChjb25zdCBjb3B5IG9mIFtcbiAgICAgICAgXCJhcHBzL3dlYi9ub2RlX21vZHVsZXMvc2hhcnBcIixcbiAgICAgICAgXCJub2RlX21vZHVsZXMvLnBucG0vbmV4dEAxNi9ub2RlX21vZHVsZXMvc2hhcnBcIixcbiAgICAgICAgXCJub2RlX21vZHVsZXMvLnBucG0vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9zaGFycFwiLFxuICAgICAgXSkge1xuICAgICAgICAvLyBBIHJlYWwgYG5vZGVgLCBub3QgamVzdCdzIGByZXF1aXJlYCwgd2hvc2UgcmVzb2x2ZXIgZGlmZmVycyBmcm9tXG4gICAgICAgIC8vIE5vZGUncyBpbiBob3cgaXQgd2Fsa3MgdXAgZnJvbSBhIG1vZHVsZS5cbiAgICAgICAgZXhwZWN0KFxuICAgICAgICAgIGV4ZWNGaWxlU3luYyhcbiAgICAgICAgICAgIHByb2Nlc3MuZXhlY1BhdGgsXG4gICAgICAgICAgICBbXCItcFwiLCBgcmVxdWlyZSgke0pTT04uc3RyaW5naWZ5KGpvaW4ocm9vdCwgY29weSkpfSlgXSxcbiAgICAgICAgICAgIHsgZW5jb2Rpbmc6IFwidXRmLThcIiB9LFxuICAgICAgICAgICkudHJpbSgpLFxuICAgICAgICApLnRvQmUoXCJsb2FkZWRcIik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImlzU2hhcnBCaW5hcnlQYWNrYWdlXCIsICgpID0+IHtcbiAgaXQuZWFjaChbXG4gICAgW1wibm9kZV9tb2R1bGVzL0BpbWdcIiwgXCJzaGFycC1saW51eC14NjRcIiwgdHJ1ZV0sXG4gICAgW1wibm9kZV9tb2R1bGVzL0BpbWdcIiwgXCJzaGFycC1saW51eG11c2wtYXJtNjRcIiwgdHJ1ZV0sXG4gICAgW1wibm9kZV9tb2R1bGVzL0BpbWdcIiwgXCJzaGFycC1saWJ2aXBzLWRhcndpbi1hcm02NFwiLCB0cnVlXSxcbiAgICBbXCJhcHBzL3dlYi9ub2RlX21vZHVsZXMvQGltZ1wiLCBcInNoYXJwLWRhcndpbi1hcm02NFwiLCB0cnVlXSxcbiAgICBbXCJub2RlX21vZHVsZXMvLnBucG1cIiwgXCJAaW1nK3NoYXJwLWRhcndpbi1hcm02NEAwLjM0LjVcIiwgdHJ1ZV0sXG4gICAgW1wibm9kZV9tb2R1bGVzLy5wbnBtXCIsIFwiQGltZytzaGFycC1saWJ2aXBzLWRhcndpbi1hcm02NEAxLjIuNFwiLCB0cnVlXSxcbiAgICBbXG4gICAgICBcIm5vZGVfbW9kdWxlcy8ucG5wbS9zaGFycEAwLjM0LjUvbm9kZV9tb2R1bGVzL0BpbWdcIixcbiAgICAgIFwic2hhcnAtbGludXgteDY0XCIsXG4gICAgICB0cnVlLFxuICAgIF0sXG4gICAgLy8gQSByb3V0ZSBzZWdtZW50LCBub3QgYSBwYWNrYWdlLlxuICAgIFtcIi5uZXh0L3NlcnZlci9hcHBcIiwgXCJzaGFycC1lZGdlc1wiLCBmYWxzZV0sXG4gICAgLy8gVW5yZWxhdGVkIGBzaGFycC1gIGRlcGVuZGVuY2llcy5cbiAgICBbXCJub2RlX21vZHVsZXNcIiwgXCJzaGFycC1pY29cIiwgZmFsc2VdLFxuICAgIFtcIm5vZGVfbW9kdWxlcy8ucG5wbVwiLCBcInNoYXJwLXBoYXNoQDIuMC4wXCIsIGZhbHNlXSxcbiAgICBbXCJub2RlX21vZHVsZXMvLnBucG1cIiwgXCJzaGFycEAwLjM0LjVcIiwgZmFsc2VdLFxuICAgIC8vIGBzaGFycGAgaXRzZWxmLCB0aGUgSlMgd3JhcHBlciB0aGF0IGxvYWRzIHRoZSBiaW5hcnkuXG4gICAgW1wibm9kZV9tb2R1bGVzXCIsIFwic2hhcnBcIiwgZmFsc2VdLFxuICAgIFtcIm5vZGVfbW9kdWxlcy9AaW1nXCIsIFwiY29sb3VyXCIsIGZhbHNlXSxcbiAgICAvLyBBcHAgZGlyZWN0b3JpZXMgdGhhdCBoYXBwZW4gdG8gc2hhcmUgdGhlIG5hbWVzLCBvdXRzaWRlIGBub2RlX21vZHVsZXNgLlxuICAgIFtcImFwcHMvd2ViL0BpbWdcIiwgXCJzaGFycC1saW51eC14NjRcIiwgZmFsc2VdLFxuICAgIFtcImFwcHMvd2ViLy5wbnBtXCIsIFwiQGltZytzaGFycC1saW51eC14NjRAMC4zNC41XCIsIGZhbHNlXSxcbiAgXSkoXCIlcy8lcyBpcyAlc1wiLCAocGFyZW50LCBuYW1lLCBleHBlY3RlZCkgPT4ge1xuICAgIGV4cGVjdChpc1NoYXJwQmluYXJ5UGFja2FnZShqb2luKGRpciwgcGFyZW50KSwgbmFtZSkpLnRvQmUoZXhwZWN0ZWQpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInBpY2tTdGFnZWRTaGFycFBhY2thZ2VcIiwgKCkgPT4ge1xuICBpdChcInJldHVybnMgdW5kZWZpbmVkIHdoZW4gdGhlIHRyZWUgaGFzIG5vIHNoYXJwXCIsICgpID0+IHtcbiAgICBleHBlY3QocGlja1N0YWdlZFNoYXJwUGFja2FnZShbXSkpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJwcmVmZXJzIHRoZSBzaG9ydGVzdCBwYXRoLCB0aGUgY2xvc2VzdCB0byBhIGhvaXN0ZWQgaW5zdGFsbFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgcGlja1N0YWdlZFNoYXJwUGFja2FnZShbXG4gICAgICAgIFwiL3Ivbm9kZV9tb2R1bGVzLy5wbnBtL3NoYXJwQDAuMzQuNS9ub2RlX21vZHVsZXMvc2hhcnBcIixcbiAgICAgICAgXCIvci9hcHBzL3dlYi9ub2RlX21vZHVsZXMvc2hhcnBcIixcbiAgICAgICAgXCIvci9ub2RlX21vZHVsZXMvc2hhcnBcIixcbiAgICAgIF0pLFxuICAgICkudG9CZShcIi9yL25vZGVfbW9kdWxlcy9zaGFycFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJicmVha3MgYSBsZW5ndGggdGllIGJ5IG5hbWUsIHdoYXRldmVyIG9yZGVyIHRoZSB3YWxrIGZvdW5kIHRoZW0gaW5cIiwgKCkgPT4ge1xuICAgIGNvbnN0IGEgPSBcIi9yL25vZGVfbW9kdWxlcy8ucG5wbS9zaGFycEAwLjM0LjQvbm9kZV9tb2R1bGVzL3NoYXJwXCI7XG4gICAgY29uc3QgYiA9IFwiL3Ivbm9kZV9tb2R1bGVzLy5wbnBtL3NoYXJwQDAuMzQuNS9ub2RlX21vZHVsZXMvc2hhcnBcIjtcbiAgICBleHBlY3QocGlja1N0YWdlZFNoYXJwUGFja2FnZShbYiwgYV0pKS50b0JlKGEpO1xuICAgIGV4cGVjdChwaWNrU3RhZ2VkU2hhcnBQYWNrYWdlKFthLCBiXSkpLnRvQmUoYSk7XG4gIH0pO1xuXG4gIC8vIG5wbSBuZXN0cyBuZXh0J3Mgb3duIGBzaGFycGAgd2hlbiB0aGUgYXBwJ3MgaG9pc3RlZCBvbmUgaXMgYW5vdGhlciB2ZXJzaW9uO1xuICAvLyB0aGUgYmluYXJpZXMgaGF2ZSB0byBtYXRjaCB0aGUgY29weSB0aGUgaW1hZ2Ugb3B0aW1pemVyIGxvYWRzLlxuICBpdChcInBpY2tzIHRoZSBjb3B5IHRoZSBzdGFnZWQgbmV4dCByZXNvbHZlcywgb3ZlciBhIHNob3J0ZXIgb25lXCIsICgpID0+IHtcbiAgICBjb25zdCByb290ID0gam9pbihkaXIsIFwic3RhZ2VkXCIpO1xuICAgIGNvbnN0IGhvaXN0ZWQgPSBqb2luKHJvb3QsIFwibm9kZV9tb2R1bGVzL3NoYXJwXCIpO1xuICAgIGNvbnN0IG5lc3RlZCA9IGpvaW4ocm9vdCwgXCJub2RlX21vZHVsZXMvbmV4dC9ub2RlX21vZHVsZXMvc2hhcnBcIik7XG4gICAgZm9yIChjb25zdCBzaGFycCBvZiBbaG9pc3RlZCwgbmVzdGVkXSkge1xuICAgICAgd3JpdGUoXG4gICAgICAgIGpvaW4oc2hhcnAsIFwicGFja2FnZS5qc29uXCIpLFxuICAgICAgICBKU09OLnN0cmluZ2lmeSh7IG5hbWU6IFwic2hhcnBcIiwgbWFpbjogXCJpbmRleC5qc1wiIH0pLFxuICAgICAgKTtcbiAgICAgIHdyaXRlKGpvaW4oc2hhcnAsIFwiaW5kZXguanNcIiksIFwiXCIpO1xuICAgIH1cbiAgICB3cml0ZShcbiAgICAgIGpvaW4ocm9vdCwgXCJub2RlX21vZHVsZXMvbmV4dC9wYWNrYWdlLmpzb25cIiksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7IG5hbWU6IFwibmV4dFwiIH0pLFxuICAgICk7XG4gICAgY29uc3QgbmV4dFNoYXJwID0gcmVzb2x2ZU5leHRTaGFycChqb2luKHJvb3QsIFwiYXBwcy93ZWJcIikpO1xuICAgIGV4cGVjdChuZXh0U2hhcnApLnRvQmUoam9pbihyZWFscGF0aFN5bmMobmVzdGVkKSwgXCJpbmRleC5qc1wiKSk7XG4gICAgZXhwZWN0KHBpY2tTdGFnZWRTaGFycFBhY2thZ2UoW2hvaXN0ZWQsIG5lc3RlZF0sIG5leHRTaGFycCkpLnRvQmUobmVzdGVkKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXNvbHZlcyBub3RoaW5nIHdoZW4gdGhlIHN0YWdlZCB0cmVlIGhhcyBubyBuZXh0XCIsICgpID0+IHtcbiAgICBleHBlY3QocmVzb2x2ZU5leHRTaGFycChqb2luKGRpciwgXCJhcHBzL3dlYlwiKSkpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJTaGFycCBzdGFnaW5nIGZvciB0aGUgZGVwbG95bWVudCB0YXJnZXRcIiwgKCkgPT4ge1xuICAvLyBBIHZlcnNpb24gbm8gcmVhbCBgc2hhcnBgIHBpbnMsIHNvIHRoZSB0YXJiYWxscyBzZWVkZWQgaW50byB0aGUgc2hhcmVkXG4gIC8vIGRvd25sb2FkIGNhY2hlIGJlbG93IGFyZSBuZXZlciBtaXN0YWtlbiBmb3IgKG9yIGNsb2JiZXIpIHJlYWwgb25lcy5cbiAgY29uc3QgVkVSU0lPTiA9IFwiMC4wLjAtY2RrLW5leHRqcy10ZXN0XCI7XG4gIGNvbnN0IGNhY2hlRGlyID0gam9pbih0bXBkaXIoKSwgXCJjZGstbmV4dGpzLXNoYXJwLWNhY2hlXCIpO1xuICBjb25zdCBzZWVkZWQ6IHN0cmluZ1tdID0gW107XG5cbiAgYWZ0ZXJBbGwoKCkgPT4ge1xuICAgIGZvciAoY29uc3QgZmlsZSBvZiBzZWVkZWQpIHJtU3luYyhmaWxlLCB7IGZvcmNlOiB0cnVlIH0pO1xuICB9KTtcblxuICAvKiogU2VlZCB0aGUgZG93bmxvYWQgY2FjaGUgc28gdGhlIGluc3RhbGwgcnVucyB3aXRob3V0IHRoZSByZWdpc3RyeS4gKi9cbiAgZnVuY3Rpb24gc2VlZENhY2hlKG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHBrZyA9IGpvaW4oZGlyLCBcInRnelwiLCBuYW1lLCBcInBhY2thZ2VcIik7XG4gICAgd3JpdGUoam9pbihwa2csIFwicGFja2FnZS5qc29uXCIpLCBKU09OLnN0cmluZ2lmeSh7IG5hbWU6IGBAaW1nLyR7bmFtZX1gIH0pKTtcbiAgICBta2RpclN5bmMoY2FjaGVEaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGNvbnN0IHRneiA9IGpvaW4oY2FjaGVEaXIsIGAke25hbWV9LSR7VkVSU0lPTn0udGd6YCk7XG4gICAgZXhlY0ZpbGVTeW5jKFwidGFyXCIsIFtcIi1jemZcIiwgdGd6LCBcIi1DXCIsIGpvaW4ocGtnLCBcIi4uXCIpLCBcInBhY2thZ2VcIl0pO1xuICAgIHNlZWRlZC5wdXNoKHRneik7XG4gIH1cblxuICAvLyBQcml2YXRlOiB0aGUgbWV0aG9kcyBgTmV4dGpzQnVpbGRgIHJ1bnMgcGVyIGRlcGxveW1lbnQgcm9vdCwgd2hpY2ggb25seVxuICAvLyB0b3VjaCB0aGUgZmlsZXN5c3RlbSwgc28gdGhleSBydW4gaGVyZSB3aXRob3V0IGEgY29uc3RydWN0LlxuICBjb25zdCBidWlsZCA9IE5leHRqc0J1aWxkLnByb3RvdHlwZSBhcyB1bmtub3duIGFzIHtcbiAgICByZW1vdmVFeGlzdGluZ1NoYXJwQmluYXJpZXMoXG4gICAgICByb290OiBzdHJpbmcsXG4gICAgICBwcm9qZWN0RGlyOiBzdHJpbmcsXG4gICAgKTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHN0YWdlU2hhcnBGb3JUYXJnZXQoXG4gICAgICByb290OiB7IG5hbWU6IHN0cmluZzsgcGF0aDogc3RyaW5nIH0sXG4gICAgICBwcm9qZWN0RGlyOiBzdHJpbmcsXG4gICAgICBwbGF0Zm9ybTogc3RyaW5nLFxuICAgICk6IHZvaWQ7XG4gIH07XG5cbiAgLyoqIEEgc3RhZ2VkIHBucG0gYHNoYXJwYCB0aGF0IHBpbnMgdGVzdC12ZXJzaW9uIGJpbmFyaWVzIGZvciBgcGxhdGZvcm1gLiAqL1xuICBmdW5jdGlvbiBzdGFnZVBpbm5lZFNoYXJwKHJvb3Q6IHN0cmluZywgcGxhdGZvcm06IHN0cmluZykge1xuICAgIHN0YWdlUG5wbVNoYXJwKHJvb3QpO1xuICAgIHdyaXRlKFxuICAgICAgam9pbihcbiAgICAgICAgcm9vdCxcbiAgICAgICAgXCJub2RlX21vZHVsZXMvLnBucG0vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9zaGFycC9wYWNrYWdlLmpzb25cIixcbiAgICAgICksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIG5hbWU6IFwic2hhcnBcIixcbiAgICAgICAgdmVyc2lvbjogXCIwLjM0LjVcIixcbiAgICAgICAgb3B0aW9uYWxEZXBlbmRlbmNpZXM6IHtcbiAgICAgICAgICBbYEBpbWcvc2hhcnAtJHtwbGF0Zm9ybX1gXTogVkVSU0lPTixcbiAgICAgICAgICBbYEBpbWcvc2hhcnAtbGlidmlwcy0ke3BsYXRmb3JtfWBdOiBWRVJTSU9OLFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgW2BzaGFycC0ke3BsYXRmb3JtfWAsIGBzaGFycC1saWJ2aXBzLSR7cGxhdGZvcm19YF0pIHtcbiAgICAgIHNlZWRDYWNoZShuYW1lKTtcbiAgICB9XG4gIH1cblxuICBpdC5lYWNoKFtcbiAgICBbXCJsaW51eC14NjRcIiwgXCJkYXJ3aW4tYXJtNjRcIl0sXG4gICAgW1wibGludXgtYXJtNjRcIiwgXCJsaW51eC14NjRcIl0sXG4gICAgW1wibGludXhtdXNsLWFybTY0XCIsIFwibGludXgteDY0XCJdLFxuICBdKShcbiAgICBcInJlcGxhY2VzIHRoZSBob3N0J3MgYmluYXJpZXMgd2l0aCAlcyBvbmVzLCBsZWF2aW5nIGxvb2stYWxpa2VzXCIsXG4gICAgKHBsYXRmb3JtLCBob3N0KSA9PiB7XG4gICAgICBjb25zdCByb290ID0gam9pbihkaXIsIFwic3RhZ2VkXCIpO1xuICAgICAgc3RhZ2VQbnBtU2hhcnAocm9vdCk7XG4gICAgICBjb25zdCBzdG9yZSA9IGpvaW4oXG4gICAgICAgIHJvb3QsXG4gICAgICAgIFwibm9kZV9tb2R1bGVzLy5wbnBtL3NoYXJwQDAuMzQuNS9ub2RlX21vZHVsZXMvc2hhcnBcIixcbiAgICAgICk7XG4gICAgICB3cml0ZShcbiAgICAgICAgam9pbihzdG9yZSwgXCJwYWNrYWdlLmpzb25cIiksXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBuYW1lOiBcInNoYXJwXCIsXG4gICAgICAgICAgdmVyc2lvbjogXCIwLjM0LjVcIixcbiAgICAgICAgICBvcHRpb25hbERlcGVuZGVuY2llczoge1xuICAgICAgICAgICAgW2BAaW1nL3NoYXJwLSR7cGxhdGZvcm19YF06IFZFUlNJT04sXG4gICAgICAgICAgICBbYEBpbWcvc2hhcnAtbGlidmlwcy0ke3BsYXRmb3JtfWBdOiBWRVJTSU9OLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICAgIC8vIFRoZSBob3N0J3MgYmluYXJpZXMgYXMgcG5wbSBzdGFnZXMgdGhlbTogaW4gdGhlIHN0b3JlLCBsaW5rZWQgZnJvbVxuICAgICAgLy8gbmV4dCB0byBgc2hhcnBgLCBhbmQgKGhvaXN0ZWQpIGF0IHRoZSByb290LlxuICAgICAgZm9yIChjb25zdCBuYW1lIG9mIFtgc2hhcnAtJHtob3N0fWAsIGBzaGFycC1saWJ2aXBzLSR7aG9zdH1gXSkge1xuICAgICAgICB3cml0ZShcbiAgICAgICAgICBqb2luKFxuICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgIGBub2RlX21vZHVsZXMvLnBucG0vQGltZyske25hbWV9QDAuMzQuNS9ub2RlX21vZHVsZXMvQGltZy8ke25hbWV9L3BhY2thZ2UuanNvbmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgICBcInt9XCIsXG4gICAgICAgICk7XG4gICAgICAgIG1rZGlyU3luYyhcbiAgICAgICAgICBqb2luKHJvb3QsIFwibm9kZV9tb2R1bGVzLy5wbnBtL3NoYXJwQDAuMzQuNS9ub2RlX21vZHVsZXMvQGltZ1wiKSxcbiAgICAgICAgICB7IHJlY3Vyc2l2ZTogdHJ1ZSB9LFxuICAgICAgICApO1xuICAgICAgICBzeW1saW5rU3luYyhcbiAgICAgICAgICBgLi4vLi4vLi4vQGltZyske25hbWV9QDAuMzQuNS9ub2RlX21vZHVsZXMvQGltZy8ke25hbWV9YCxcbiAgICAgICAgICBqb2luKFxuICAgICAgICAgICAgcm9vdCxcbiAgICAgICAgICAgIGBub2RlX21vZHVsZXMvLnBucG0vc2hhcnBAMC4zNC41L25vZGVfbW9kdWxlcy9AaW1nLyR7bmFtZX1gLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHdyaXRlKGpvaW4ocm9vdCwgYG5vZGVfbW9kdWxlcy9AaW1nLyR7bmFtZX0vcGFja2FnZS5qc29uYCksIFwie31cIik7XG4gICAgICB9XG4gICAgICBjb25zdCBsb29rYWxpa2VzID0gW1xuICAgICAgICBcImFwcHMvd2ViLy5uZXh0L3NlcnZlci9hcHAvc2hhcnAtZWRnZXMvcGFnZS5qc1wiLFxuICAgICAgICBcIm5vZGVfbW9kdWxlcy8ucG5wbS9zaGFycC1pY29AMC4xLjUvbm9kZV9tb2R1bGVzL3NoYXJwLWljby9wYWNrYWdlLmpzb25cIixcbiAgICAgICAgXCJhcHBzL3dlYi9ub2RlX21vZHVsZXMvc2hhcnAtaWNvL3BhY2thZ2UuanNvblwiLFxuICAgICAgXTtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBsb29rYWxpa2VzKSB3cml0ZShqb2luKHJvb3QsIGZpbGUpLCBcIlwiKTtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBbYHNoYXJwLSR7cGxhdGZvcm19YCwgYHNoYXJwLWxpYnZpcHMtJHtwbGF0Zm9ybX1gXSkge1xuICAgICAgICBzZWVkQ2FjaGUobmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNvdXJjZSA9IGJ1aWxkLnJlbW92ZUV4aXN0aW5nU2hhcnBCaW5hcmllcyhcbiAgICAgICAgcm9vdCxcbiAgICAgICAgam9pbihyb290LCBcImFwcHMvd2ViXCIpLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChzb3VyY2UpLnRvQmUoc3RvcmUpO1xuICAgICAgYnVpbGQuc3RhZ2VTaGFycEZvclRhcmdldChcbiAgICAgICAgeyBuYW1lOiBcImRlZmF1bHRcIiwgcGF0aDogcm9vdCB9LFxuICAgICAgICBqb2luKHJvb3QsIFwiYXBwcy93ZWJcIiksXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHJlYWRkaXJTeW5jKHNoYXJwQmluYXJ5RGlyKHJvb3QpKS5zb3J0KCkpLnRvRXF1YWwoXG4gICAgICAgIFtgc2hhcnAtJHtwbGF0Zm9ybX1gLCBgc2hhcnAtbGlidmlwcy0ke3BsYXRmb3JtfWBdLnNvcnQoKSxcbiAgICAgICk7XG4gICAgICBleHBlY3QoXG4gICAgICAgIEpTT04ucGFyc2UoXG4gICAgICAgICAgcmVhZEZpbGVTeW5jKFxuICAgICAgICAgICAgam9pbihzaGFycEJpbmFyeURpcihyb290KSwgYHNoYXJwLSR7cGxhdGZvcm19L3BhY2thZ2UuanNvbmApLFxuICAgICAgICAgICAgXCJ1dGYtOFwiLFxuICAgICAgICAgICksXG4gICAgICAgICkubmFtZSxcbiAgICAgICkudG9CZShgQGltZy9zaGFycC0ke3BsYXRmb3JtfWApO1xuICAgICAgLy8gTm8gaG9zdCBiaW5hcnkgc3Vydml2ZXMsIGRhbmdsaW5nIGxpbmsgb3Igb3RoZXJ3aXNlLlxuICAgICAgZXhwZWN0KFxuICAgICAgICBsaXN0VHJlZShyb290KS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5uYW1lLmluY2x1ZGVzKGhvc3QpKSxcbiAgICAgICkudG9FcXVhbChbXSk7XG4gICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgbG9va2FsaWtlcykge1xuICAgICAgICBleHBlY3QoZXhpc3RzU3luYyhqb2luKHJvb3QsIGZpbGUpKSkudG9CZSh0cnVlKTtcbiAgICAgIH1cbiAgICB9LFxuICApO1xuXG4gIGl0KFwid2FybnMgYW5kIGluc3RhbGxzIG5vdGhpbmcgd2hlbiB0aGUgYnVpbGQgc3RhZ2VkIG5vIHNoYXJwXCIsICgpID0+IHtcbiAgICBjb25zdCByb290ID0gam9pbihkaXIsIFwic3RhZ2VkXCIpO1xuICAgIHdyaXRlKGpvaW4ocm9vdCwgXCJhcHBzL3dlYi9zZXJ2ZXIuanNcIiksIFwiXCIpO1xuICAgIGNvbnN0IHdhcm4gPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIGNvbnN0IHNvdXJjZSA9IGJ1aWxkLnJlbW92ZUV4aXN0aW5nU2hhcnBCaW5hcmllcyhcbiAgICAgIHJvb3QsXG4gICAgICBqb2luKHJvb3QsIFwiYXBwcy93ZWJcIiksXG4gICAgKTtcbiAgICBleHBlY3Qoc291cmNlKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgYnVpbGQuc3RhZ2VTaGFycEZvclRhcmdldChcbiAgICAgIHsgbmFtZTogXCJkZWZhdWx0XCIsIHBhdGg6IHJvb3QgfSxcbiAgICAgIGpvaW4ocm9vdCwgXCJhcHBzL3dlYlwiKSxcbiAgICAgIFwibGludXgtYXJtNjRcIixcbiAgICApO1xuICAgIGV4cGVjdChleGlzdHNTeW5jKHNoYXJwQmluYXJ5RGlyKHJvb3QpKSkudG9CZShmYWxzZSk7XG4gICAgZXhwZWN0KHdhcm4pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFxuICAgICAgZXhwZWN0LnN0cmluZ0NvbnRhaW5pbmcoJ1wic2hhcnBcIiBub3QgZm91bmQnKSxcbiAgICApO1xuICAgIHdhcm4ubW9ja1Jlc3RvcmUoKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoXCJwZXIgZnVuY3Rpb24gZ3JvdXBcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHBsYXRmb3JtID0gXCJsaW51eC1hcm02NFwiO1xuICAgIGNvbnN0IHN0YWdlID0gKG5hbWU6IHN0cmluZykgPT5cbiAgICAgIGJ1aWxkLnN0YWdlU2hhcnBGb3JUYXJnZXQoXG4gICAgICAgIHsgbmFtZSwgcGF0aDogam9pbihkaXIsIFwic3RhZ2VkXCIpIH0sXG4gICAgICAgIGpvaW4oZGlyLCBcInN0YWdlZC9hcHBzL3dlYlwiKSxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICApO1xuXG4gICAgLy8gT25seSBgZGVmYXVsdGAgc2VydmVzIGAvX25leHQvaW1hZ2VgLCBzbyBhIGdyb3VwIHdpdGhvdXQgc2hhcnAgaXMgbm9ybWFsLlxuICAgIGl0KFwiaW5zdGFsbHMgbm90aGluZyBhbmQgc3RheXMgcXVpZXQgZm9yIGEgZ3JvdXAgd2l0aG91dCBzaGFycFwiLCAoKSA9PiB7XG4gICAgICB3cml0ZShqb2luKGRpciwgXCJzdGFnZWQvYXBwcy93ZWIvc2VydmVyLmpzXCIpLCBcIlwiKTtcbiAgICAgIGNvbnN0IHdhcm4gPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwid2FyblwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgICAgc3RhZ2UoXCJhcGlcIik7XG4gICAgICBleHBlY3QoZXhpc3RzU3luYyhzaGFycEJpbmFyeURpcihqb2luKGRpciwgXCJzdGFnZWRcIikpKSkudG9CZShmYWxzZSk7XG4gICAgICBleHBlY3Qod2Fybikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgIHdhcm4ubW9ja1Jlc3RvcmUoKTtcbiAgICB9KTtcblxuICAgIGl0KFwid2FybnMgZm9yIGRlZmF1bHQgd2l0aG91dCBzaGFycCwgd2hpY2ggY2FuJ3Qgb3B0aW1pemUgaW1hZ2VzXCIsICgpID0+IHtcbiAgICAgIHdyaXRlKGpvaW4oZGlyLCBcInN0YWdlZC9hcHBzL3dlYi9zZXJ2ZXIuanNcIiksIFwiXCIpO1xuICAgICAgY29uc3Qgd2FybiA9IGplc3Quc3B5T24oY29uc29sZSwgXCJ3YXJuXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgICBzdGFnZShcImRlZmF1bHRcIik7XG4gICAgICBleHBlY3Qod2FybikudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICAgIGV4cGVjdC5zdHJpbmdDb250YWluaW5nKCdcInNoYXJwXCIgbm90IGZvdW5kJyksXG4gICAgICApO1xuICAgICAgd2Fybi5tb2NrUmVzdG9yZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJpbnN0YWxscyB0aGUgdGFyZ2V0J3MgYmluYXJpZXMgZm9yIGEgZ3JvdXAgd2hvc2Ugb3duIHJvdXRlcyB1c2Ugc2hhcnBcIiwgKCkgPT4ge1xuICAgICAgc3RhZ2VQaW5uZWRTaGFycChqb2luKGRpciwgXCJzdGFnZWRcIiksIHBsYXRmb3JtKTtcbiAgICAgIHN0YWdlKFwiYXBpXCIpO1xuICAgICAgZXhwZWN0KHJlYWRkaXJTeW5jKHNoYXJwQmluYXJ5RGlyKGpvaW4oZGlyLCBcInN0YWdlZFwiKSkpLnNvcnQoKSkudG9FcXVhbChcbiAgICAgICAgW2BzaGFycC0ke3BsYXRmb3JtfWAsIGBzaGFycC1saWJ2aXBzLSR7cGxhdGZvcm19YF0uc29ydCgpLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJkZXBsb3ltZW50QnVpbGRJZFwiLCAoKSA9PiB7XG4gIGl0KFwiaXMgTmV4dC5qcydzIGJ1aWxkIElEIHdoZW4gdGhlIGFwcCBzZXRzIG5vIGRlcGxveW1lbnRJZFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgZGVwbG95bWVudEJ1aWxkSWQoeyBidWlsZElkOiBcImIxXCIsIGNvbmZpZzogeyBkZXBsb3ltZW50SWQ6IFwiXCIgfSB9KSxcbiAgICApLnRvQmUoXCJiMVwiKTtcbiAgfSk7XG5cbiAgLy8gV2l0aCBgTkVYVF9ERVBMT1lNRU5UX0lEYCwgTmV4dCdzIEJVSUxEX0lEIGlzIGEgY29uc3RhbnQsIHNvIHdpdGhvdXQgdGhlXG4gIC8vIHN1ZmZpeCBldmVyeSBkZXBsb3ltZW50IHdvdWxkIHNoYXJlIG9uZSBjYWNoZSBwYXJ0aXRpb24uXG4gIGl0KFwiaXMgc3VmZml4ZWQgd2l0aCB0aGUgZGVwbG95bWVudElkIHdoZW4gdGhlIGFwcCBzZXRzIG9uZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgZGVwbG95bWVudEJ1aWxkSWQoeyBidWlsZElkOiBcImIxXCIsIGNvbmZpZzogeyBkZXBsb3ltZW50SWQ6IFwiZDdcIiB9IH0pLFxuICAgICkudG9CZShcImIxLWQ3XCIpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImxpc3RUcmVlXCIsICgpID0+IHtcbiAgaXQoXCJsaXN0cyBsaW5rcyB3aXRob3V0IGRlc2NlbmRpbmcgaW50byB0aGVtLCBzbyBhIGN5Y2xlIGVuZHNcIiwgKCkgPT4ge1xuICAgIHdyaXRlKGpvaW4oZGlyLCBcInBhY2thZ2VzL2EvaW5kZXguanNcIiksIFwiXCIpO1xuICAgIHdyaXRlKGpvaW4oZGlyLCBcInBhY2thZ2VzL2IvaW5kZXguanNcIiksIFwiXCIpO1xuICAgIG1rZGlyU3luYyhqb2luKGRpciwgXCJwYWNrYWdlcy9hL25vZGVfbW9kdWxlcy9Ab3JnXCIpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBta2RpclN5bmMoam9pbihkaXIsIFwicGFja2FnZXMvYi9ub2RlX21vZHVsZXMvQG9yZ1wiKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgc3ltbGlua1N5bmMoXCIuLi8uLi8uLi9iXCIsIGpvaW4oZGlyLCBcInBhY2thZ2VzL2Evbm9kZV9tb2R1bGVzL0BvcmcvYlwiKSk7XG4gICAgc3ltbGlua1N5bmMoXCIuLi8uLi8uLi9hXCIsIGpvaW4oZGlyLCBcInBhY2thZ2VzL2Ivbm9kZV9tb2R1bGVzL0BvcmcvYVwiKSk7XG5cbiAgICBjb25zdCBmaWxlcyA9IGxpc3RUcmVlKGRpcilcbiAgICAgIC5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBcImluZGV4LmpzXCIpXG4gICAgICAubWFwKChlbnRyeSkgPT4gZW50cnkucGFyZW50UGF0aCk7XG4gICAgZXhwZWN0KGZpbGVzLnNvcnQoKSkudG9FcXVhbChbXG4gICAgICBqb2luKGRpciwgXCJwYWNrYWdlcy9hXCIpLFxuICAgICAgam9pbihkaXIsIFwicGFja2FnZXMvYlwiKSxcbiAgICBdKTtcbiAgfSk7XG59KTtcblxuLyoqIEEgYC5ub2RlYCBmaWxlIGNhcnJ5aW5nIGp1c3QgZW5vdWdoIGhlYWRlciB0byBiZSByZWFkIGFzIGBwbGF0Zm9ybWAuICovXG5mdW5jdGlvbiB3cml0ZUFkZG9uKFxuICBwYXRoOiBzdHJpbmcsXG4gIHBsYXRmb3JtOiBcImxpbnV4LWFybTY0XCIgfCBcImxpbnV4LXg2NFwiIHwgXCJkYXJ3aW5cIixcbikge1xuICBjb25zdCBoZWFkZXIgPSBCdWZmZXIuYWxsb2MoMjApO1xuICBpZiAocGxhdGZvcm0gPT09IFwiZGFyd2luXCIpIHtcbiAgICBoZWFkZXIud3JpdGVVSW50MzJCRSgweGNmZmFlZGZlLCAwKTtcbiAgfSBlbHNlIHtcbiAgICBoZWFkZXIud3JpdGVVSW50MzJCRSgweDdmNDU0YzQ2LCAwKTtcbiAgICBoZWFkZXJbNV0gPSAxO1xuICAgIGhlYWRlci53cml0ZVVJbnQxNkxFKHBsYXRmb3JtID09PSBcImxpbnV4LWFybTY0XCIgPyAxODMgOiA2MiwgMTgpO1xuICB9XG4gIG1rZGlyU3luYyhqb2luKHBhdGgsIFwiLi5cIiksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB3cml0ZUZpbGVTeW5jKHBhdGgsIGhlYWRlcik7XG59XG5cbmRlc2NyaWJlKFwibmF0aXZlQmluYXJ5UGxhdGZvcm1cIiwgKCkgPT4ge1xuICBpdC5lYWNoKFtcImxpbnV4LWFybTY0XCIsIFwibGludXgteDY0XCIsIFwiZGFyd2luXCJdIGFzIGNvbnN0KShcbiAgICBcInJlYWRzICVzIGZyb20gdGhlIGhlYWRlclwiLFxuICAgIChwbGF0Zm9ybSkgPT4ge1xuICAgICAgd3JpdGVBZGRvbihqb2luKGRpciwgXCJhLm5vZGVcIiksIHBsYXRmb3JtKTtcbiAgICAgIGV4cGVjdChuYXRpdmVCaW5hcnlQbGF0Zm9ybShqb2luKGRpciwgXCJhLm5vZGVcIikpKS50b0JlKHBsYXRmb3JtKTtcbiAgICB9LFxuICApO1xuXG4gIGl0KFwicmV0dXJucyB1bmRlZmluZWQgZm9yIGEgZmlsZSB0aGF0IGlzbid0IGEgYmluYXJ5XCIsICgpID0+IHtcbiAgICB3cml0ZShqb2luKGRpciwgXCJhLm5vZGVcIiksIFwibm90IGEgYmluYXJ5XCIpO1xuICAgIGV4cGVjdChuYXRpdmVCaW5hcnlQbGF0Zm9ybShqb2luKGRpciwgXCJhLm5vZGVcIikpKS50b0JlVW5kZWZpbmVkKCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiZmluZEZvcmVpZ25OYXRpdmVQYWNrYWdlc1wiLCAoKSA9PiB7XG4gIGNvbnN0IHBrZyA9IChwYXRoOiBzdHJpbmcpID0+IHdyaXRlKGpvaW4oZGlyLCBwYXRoLCBcInBhY2thZ2UuanNvblwiKSwgXCJ7fVwiKTtcblxuICBpdChcIm5hbWVzIGEgcGFja2FnZSB3aXRoIG9ubHkgYW5vdGhlciBwbGF0Zm9ybSdzIGFkZG9uXCIsICgpID0+IHtcbiAgICBjb25zdCBnbGlkZSA9IFwibm9kZV9tb2R1bGVzL0B2YWxrZXkvdmFsa2V5LWdsaWRlLWRhcndpbi1hcm02NFwiO1xuICAgIHBrZyhnbGlkZSk7XG4gICAgd3JpdGVBZGRvbihqb2luKGRpciwgZ2xpZGUsIFwiYnVpbGQvZ2xpZGUubm9kZVwiKSwgXCJkYXJ3aW5cIik7XG5cbiAgICBleHBlY3QoZmluZEZvcmVpZ25OYXRpdmVQYWNrYWdlcyhkaXIsIFwibGludXgtYXJtNjRcIikpLnRvRXF1YWwoW2dsaWRlXSk7XG4gIH0pO1xuXG4gIGl0KFwicGFzc2VzIGEgcGFja2FnZSB3aXRoIHRoZSB0YXJnZXQncyBhZGRvbiwgZXZlbiBiZXNpZGUgb3RoZXJzXCIsICgpID0+IHtcbiAgICBwa2coXCJub2RlX21vZHVsZXMvb2tcIik7XG4gICAgd3JpdGVBZGRvbihqb2luKGRpciwgXCJub2RlX21vZHVsZXMvb2svYS5ub2RlXCIpLCBcImxpbnV4LWFybTY0XCIpO1xuICAgIHBrZyhcIm5vZGVfbW9kdWxlcy9wcmVidWlsdFwiKTtcbiAgICB3cml0ZUFkZG9uKFxuICAgICAgam9pbihkaXIsIFwibm9kZV9tb2R1bGVzL3ByZWJ1aWx0L3ByZWJ1aWxkcy9kYXJ3aW4tYXJtNjQvYS5ub2RlXCIpLFxuICAgICAgXCJkYXJ3aW5cIixcbiAgICApO1xuICAgIHdyaXRlQWRkb24oXG4gICAgICBqb2luKGRpciwgXCJub2RlX21vZHVsZXMvcHJlYnVpbHQvcHJlYnVpbGRzL2xpbnV4LWFybTY0L2Eubm9kZVwiKSxcbiAgICAgIFwibGludXgtYXJtNjRcIixcbiAgICApO1xuICAgIHdyaXRlKGpvaW4oZGlyLCBcIm5vZGVfbW9kdWxlcy9vay9ub3Rlcy5ub2RlXCIpLCBcInRleHRcIik7XG5cbiAgICBleHBlY3QoZmluZEZvcmVpZ25OYXRpdmVQYWNrYWdlcyhkaXIsIFwibGludXgtYXJtNjRcIikpLnRvRXF1YWwoW10pO1xuICB9KTtcblxuICBpdChcInRlbGxzIGFyY2hpdGVjdHVyZXMgYXBhcnRcIiwgKCkgPT4ge1xuICAgIHBrZyhcIm5vZGVfbW9kdWxlcy94NjRcIik7XG4gICAgd3JpdGVBZGRvbihqb2luKGRpciwgXCJub2RlX21vZHVsZXMveDY0L2Eubm9kZVwiKSwgXCJsaW51eC14NjRcIik7XG5cbiAgICBleHBlY3QoZmluZEZvcmVpZ25OYXRpdmVQYWNrYWdlcyhkaXIsIFwibGludXgtYXJtNjRcIikpLnRvRXF1YWwoW1xuICAgICAgXCJub2RlX21vZHVsZXMveDY0XCIsXG4gICAgXSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwic3RvcmVkU2l6ZVwiLCAoKSA9PiB7XG4gIGl0KFwiY291bnRzIGEgbGluayBhcyBpdHMgdGFyZ2V0IHBhdGgsIGFzIHRoZSB6aXAgc3RvcmVzIGl0XCIsICgpID0+IHtcbiAgICB3cml0ZShqb2luKGRpciwgXCJzdG9yZS9wa2cvZmlsZVwiKSwgXCJ4XCIucmVwZWF0KDEwMCkpO1xuICAgIG1rZGlyU3luYyhqb2luKGRpciwgXCJhXCIpKTtcbiAgICBzeW1saW5rU3luYyhcIi4uL3N0b3JlL3BrZ1wiLCBqb2luKGRpciwgXCJhL3BrZ1wiKSk7XG5cbiAgICBleHBlY3Qoc3RvcmVkU2l6ZShkaXIpKS50b0JlKDEwMCArIFwiLi4vc3RvcmUvcGtnXCIubGVuZ3RoKTtcbiAgfSk7XG5cbiAgaXQoXCJ0ZXJtaW5hdGVzIG9uIGEgY3ljbGUgYW5kIGNvdW50cyBhIGRhbmdsaW5nIGxpbmtcIiwgKCkgPT4ge1xuICAgIHdyaXRlKGpvaW4oZGlyLCBcImEvZmlsZVwiKSwgXCJ4XCIucmVwZWF0KDEwKSk7XG4gICAgc3ltbGlua1N5bmMoXCIuLlwiLCBqb2luKGRpciwgXCJhL3VwXCIpKTtcbiAgICBzeW1saW5rU3luYyhcIm1pc3NpbmdcIiwgam9pbihkaXIsIFwiYS9kYW5nbGluZ1wiKSk7XG5cbiAgICBleHBlY3Qoc3RvcmVkU2l6ZShkaXIpKS50b0JlKDEwICsgXCIuLlwiLmxlbmd0aCArIFwibWlzc2luZ1wiLmxlbmd0aCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwicGF0Y2hDbGllbnRDaHVua1wiLCAoKSA9PiB7XG4gIGNvbnN0IGNodW5rID0gXCJjb25zb2xlLmxvZygnYXBwJyk7XCI7XG5cbiAgaXQoXCJwcmVwZW5kcyB0aGUgcGF0Y2ggb25jZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgcGF0Y2hlZCA9IHBhdGNoQ2xpZW50Q2h1bmsoY2h1bmssIFwiUEFUQ0hfVjFcIiwgXCJjaHVuay5qc1wiKSE7XG4gICAgZXhwZWN0KHBhdGNoZWQpLnRvTWF0Y2goL15cXC9cXCogY2RrLW5leHRqczpwYXRjaC1mZXRjaCBbMC05YS1mXXsxNn0gXFwqXFwvXFxuLyk7XG4gICAgZXhwZWN0KHBhdGNoZWQpLnRvQ29udGFpbihcIlBBVENIX1YxXCIpO1xuICAgIGV4cGVjdChwYXRjaGVkLmVuZHNXaXRoKGBcXG4ke2NodW5rfWApKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChwYXRjaENsaWVudENodW5rKHBhdGNoZWQsIFwiUEFUQ0hfVjFcIiwgXCJjaHVuay5qc1wiKSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcblxuICBpdChcInJlcGxhY2VzIGEgcGF0Y2ggZnJvbSBhbm90aGVyIGNkay1uZXh0anMgdmVyc2lvblwiLCAoKSA9PiB7XG4gICAgY29uc3Qgb2xkID0gcGF0Y2hDbGllbnRDaHVuayhjaHVuaywgXCJQQVRDSF9WMVwiLCBcImNodW5rLmpzXCIpITtcbiAgICBjb25zdCB1cGRhdGVkID0gcGF0Y2hDbGllbnRDaHVuayhvbGQsIFwiUEFUQ0hfVjJcIiwgXCJjaHVuay5qc1wiKSE7XG5cbiAgICBleHBlY3QodXBkYXRlZCkudG9Db250YWluKFwiUEFUQ0hfVjJcIik7XG4gICAgZXhwZWN0KHVwZGF0ZWQpLm5vdC50b0NvbnRhaW4oXCJQQVRDSF9WMVwiKTtcbiAgICBleHBlY3QodXBkYXRlZC5lbmRzV2l0aChgXFxuJHtjaHVua31gKSkudG9CZSh0cnVlKTtcbiAgICBleHBlY3QodXBkYXRlZCkudG9CZShwYXRjaENsaWVudENodW5rKGNodW5rLCBcIlBBVENIX1YyXCIsIFwiY2h1bmsuanNcIikpO1xuICB9KTtcblxuICBpdChcInJlZnVzZXMgYSBwYXRjaCB3aXRob3V0IGFuIGVuZCBtYXJrZXIgcmF0aGVyIHRoYW4gc3RhY2tpbmcgb24gaXRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdCgoKSA9PlxuICAgICAgcGF0Y2hDbGllbnRDaHVuayhcbiAgICAgICAgYC8qIGNkay1uZXh0anM6cGF0Y2gtZmV0Y2ggKi9cXG5PTERcXG4ke2NodW5rfWAsXG4gICAgICAgIFwiUEFUQ0hfVjJcIixcbiAgICAgICAgXCJjaHVuay5qc1wiLFxuICAgICAgKSxcbiAgICApLnRvVGhyb3coL1JlLXJ1biBgbmV4dCBidWlsZGAvKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJ3cml0ZVB1YmxpY0ZpbGVMaXN0XCIsICgpID0+IHtcbiAgaXQoXCJsaXN0cyBwdWJsaWMvIHRoZSB3YXkgdGhlIHJ1bnRpbWUgbGlzdHMgaXQgb2ZmIGRpc2tcIiwgKCkgPT4ge1xuICAgIC8vIFdyaXR0ZW4gYXQgc3ludGgsIGFmdGVyIHRoZSBidWlsZCBjb21tYW5kLCBzbyBhIGBwb3N0YnVpbGRgIGZpbGUgKGhlcmVcbiAgICAvLyBgc2l0ZW1hcC54bWxgKSBpcyBsaXN0ZWQ7IGEgbGlua2VkIGRpcmVjdG9yeSBpcyBmb2xsb3dlZC5cbiAgICBjb25zdCBwdWJsaWNEaXIgPSBqb2luKGRpciwgXCJwdWJsaWNcIik7XG4gICAgd3JpdGUoam9pbihwdWJsaWNEaXIsIFwic2l0ZW1hcC54bWxcIiksIFwiPHVybHNldC8+XCIpO1xuICAgIHdyaXRlKGpvaW4ocHVibGljRGlyLCBcImltYWdlc1wiLCBcImxvZ29AMngucG5nXCIpLCBcInBuZ1wiKTtcbiAgICB3cml0ZShqb2luKGRpciwgXCJzaGFyZWRcIiwgXCJoZWxsbyBlMmUudHh0XCIpLCBcImhpXCIpO1xuICAgIHN5bWxpbmtTeW5jKGpvaW4oZGlyLCBcInNoYXJlZFwiKSwgam9pbihwdWJsaWNEaXIsIFwic3RhdGljXCIpKTtcbiAgICBjb25zdCBydW50aW1lRGlyID0gam9pbihkaXIsIFwiY2RrLW5leHRqcy1ydW50aW1lXCIpO1xuICAgIG1rZGlyU3luYyhydW50aW1lRGlyKTtcbiAgICB3cml0ZVB1YmxpY0ZpbGVMaXN0KHJ1bnRpbWVEaXIsIHB1YmxpY0Rpcik7XG4gICAgZXhwZWN0KFxuICAgICAgSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMoam9pbihydW50aW1lRGlyLCBcInB1YmxpYy1maWxlcy5qc29uXCIpLCBcInV0Zi04XCIpKSxcbiAgICApLnRvRXF1YWwoW1wiaW1hZ2VzL2xvZ29AMngucG5nXCIsIFwic2l0ZW1hcC54bWxcIiwgXCJzdGF0aWMvaGVsbG8gZTJlLnR4dFwiXSk7XG4gIH0pO1xuXG4gIGl0KFwid3JpdGVzIGFuIGVtcHR5IGxpc3QgZm9yIGFuIGFwcCB3aXRob3V0IHB1YmxpYy9cIiwgKCkgPT4ge1xuICAgIHdyaXRlUHVibGljRmlsZUxpc3QoZGlyLCBqb2luKGRpciwgXCJwdWJsaWNcIikpO1xuICAgIGV4cGVjdChcbiAgICAgIEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKGpvaW4oZGlyLCBcInB1YmxpYy1maWxlcy5qc29uXCIpLCBcInV0Zi04XCIpKSxcbiAgICApLnRvRXF1YWwoW10pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIk5leHRqc0J1aWxkIHdpdGggc2tpcEJ1aWxkIGFuZCBubyBidWlsZCBvdXRwdXRcIiwgKCkgPT4ge1xuICBpdChcInJlcG9ydHMgdGhlIG1pc3NpbmcgYWRhcHRlciBtYW5pZmVzdCwgbm90IGEgYmFyZSBFTk9FTlRcIiwgKCkgPT4ge1xuICAgIC8vIGBHTE9CQUxfRlVOQ1RJT05TYCBwYXRjaGVzIGAubmV4dC9zdGF0aWMvY2h1bmtzYCwgd2hpY2ggdXNlZCB0byBiZSByZWFkXG4gICAgLy8gZmlyc3QgYW5kIGZhaWwgb24gdGhlIG1pc3NpbmcgZGlyZWN0b3J5LlxuICAgIGV4cGVjdChcbiAgICAgICgpID0+XG4gICAgICAgIG5ldyBOZXh0anNCdWlsZChuZXcgU3RhY2sobmV3IEFwcCgpLCBcIlN0YWNrXCIpLCBcIkJ1aWxkXCIsIHtcbiAgICAgICAgICBidWlsZENvbW1hbmQ6IFwidHJ1ZVwiLFxuICAgICAgICAgIGJ1aWxkRGlyZWN0b3J5OiBkaXIsXG4gICAgICAgICAgbmV4dGpzVHlwZTogTmV4dGpzVHlwZS5HTE9CQUxfRlVOQ1RJT05TLFxuICAgICAgICAgIHNraXBCdWlsZDogdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgKS50b1Rocm93KC9jZGstbmV4dGpzIGFkYXB0ZXIgbWFuaWZlc3Qgbm90IGZvdW5kLyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiTmV4dGpzQnVpbGQgd2l0aCBhIGJ1aWxkIGZyb20gYW5vdGhlciBjZGstbmV4dGpzXCIsICgpID0+IHtcbiAgaXQoXCJyZWplY3RzIGEgbWFuaWZlc3Qgc3RhbXBlZCB3aXRoIGEgZGlmZmVyZW50IGNkay1uZXh0anMgdmVyc2lvblwiLCAoKSA9PiB7XG4gICAgd3JpdGUoam9pbihkaXIsIFwiLm5leHRcIiwgXCJCVUlMRF9JRFwiKSwgXCJiMVwiKTtcbiAgICB3cml0ZShcbiAgICAgIGpvaW4oZGlyLCBcIi5uZXh0XCIsIFwiY2RrLW5leHRqcy1hZGFwdGVyXCIsIFwibWFuaWZlc3QuanNvblwiKSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHsgY2RrTmV4dGpzVmVyc2lvbjogXCIwLjYuMlwiLCBidWlsZElkOiBcImIxXCIgfSksXG4gICAgKTtcbiAgICBleHBlY3QoXG4gICAgICAoKSA9PlxuICAgICAgICBuZXcgTmV4dGpzQnVpbGQobmV3IFN0YWNrKG5ldyBBcHAoKSwgXCJTdGFja1wiKSwgXCJCdWlsZFwiLCB7XG4gICAgICAgICAgYnVpbGRDb21tYW5kOiBcInRydWVcIixcbiAgICAgICAgICBidWlsZERpcmVjdG9yeTogZGlyLFxuICAgICAgICAgIG5leHRqc1R5cGU6IE5leHRqc1R5cGUuUkVHSU9OQUxfRlVOQ1RJT05TLFxuICAgICAgICAgIHNraXBCdWlsZDogdHJ1ZSxcbiAgICAgICAgfSksXG4gICAgKS50b1Rocm93KC93cml0dGVuIGJ5XFxzK2Nkay1uZXh0anMgMFxcLjZcXC4yLyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiTmV4dGpzQnVpbGQgd2l0aCBhIGJ1aWxkIHNwbGl0IGJ5IG90aGVyIGZ1bmN0aW9uR3JvdXBzXCIsICgpID0+IHtcbiAgaXQoXCJyZWplY3RzIGEgYnVpbGQgd2hvc2UgZ3JvdXBzIGtlcHQgdGhlaXIgbmFtZXMgYnV0IG5vdCB0aGVpciByb3V0ZXNcIiwgKCkgPT4ge1xuICAgIC8vIE1vdmluZyBgL3JlcG9ydHMvKipgIGludG8gYGFwaWAga2VlcHMgdGhlIGdyb3VwIG5hbWVzLCBhbmQgYSBuYW1lcy1vbmx5XG4gICAgLy8gY2hlY2sgbGV0IENsb3VkRnJvbnQgc2VuZCBgcmVwb3J0cy8qYCB0byBhIHppcCB3aXRob3V0IHRob3NlIHJvdXRlcy5cbiAgICB3cml0ZShqb2luKGRpciwgXCIubmV4dFwiLCBcIkJVSUxEX0lEXCIpLCBcImIxXCIpO1xuICAgIHdyaXRlKFxuICAgICAgam9pbihkaXIsIFwiLm5leHRcIiwgXCJjZGstbmV4dGpzLWFkYXB0ZXJcIiwgXCJtYW5pZmVzdC5qc29uXCIpLFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjZGtOZXh0anNWZXJzaW9uOiBDREtfTkVYVEpTX1ZFUlNJT04sXG4gICAgICAgIGJ1aWxkSWQ6IFwiYjFcIixcbiAgICAgICAgcmVsYXRpdmVQcm9qZWN0RGlyOiBcIlwiLFxuICAgICAgICBjb25maWc6IHsgYmFzZVBhdGg6IFwiXCIsIGFzc2V0UHJlZml4OiBcIlwiLCB0cmFpbGluZ1NsYXNoOiBmYWxzZSB9LFxuICAgICAgICBlbnRyeXBvaW50czoge30sXG4gICAgICAgIGdyb3VwczogeyBkZWZhdWx0OiBbXSwgYXBpOiBbXSB9LFxuICAgICAgICBmdW5jdGlvbkdyb3VwczogW3sgbmFtZTogXCJhcGlcIiwgcm91dGVzOiBbXCIvYXBpLyoqXCJdIH1dLFxuICAgICAgfSksXG4gICAgKTtcbiAgICBleHBlY3QoXG4gICAgICAoKSA9PlxuICAgICAgICBuZXcgTmV4dGpzQnVpbGQobmV3IFN0YWNrKG5ldyBBcHAoKSwgXCJTdGFja1wiKSwgXCJCdWlsZFwiLCB7XG4gICAgICAgICAgYnVpbGRDb21tYW5kOiBcInRydWVcIixcbiAgICAgICAgICBidWlsZERpcmVjdG9yeTogZGlyLFxuICAgICAgICAgIG5leHRqc1R5cGU6IE5leHRqc1R5cGUuUkVHSU9OQUxfRlVOQ1RJT05TLFxuICAgICAgICAgIHNraXBCdWlsZDogdHJ1ZSxcbiAgICAgICAgICBmdW5jdGlvbkdyb3VwczogW3sgbmFtZTogXCJhcGlcIiwgcm91dGVzOiBbXCIvYXBpLyoqXCIsIFwiL3JlcG9ydHMvKipcIl0gfV0sXG4gICAgICAgIH0pLFxuICAgICkudG9UaHJvdygvYnVpbGQgb3V0cHV0IGlzXFxzK3N0YWxlLyk7XG4gIH0pO1xuXG4gIGl0KFwiYWNjZXB0cyBhIGJ1aWxkIHdob3NlIGdyb3VwcyBhbmQgcm91dGVzIHdlcmUgb25seSBsaXN0ZWQgaW4gYW5vdGhlciBvcmRlclwiLCAoKSA9PiB7XG4gICAgLy8gT25seSB0aGUgc3RhbGUgY2hlY2sgaXMgdW5kZXIgdGVzdDogcGFzdCBpdCwgdGhlIHVuc3RhZ2VkIHJvb3RzIHRocm93LlxuICAgIHdyaXRlKGpvaW4oZGlyLCBcIi5uZXh0XCIsIFwiQlVJTERfSURcIiksIFwiYjFcIik7XG4gICAgd3JpdGUoXG4gICAgICBqb2luKGRpciwgXCIubmV4dFwiLCBcImNkay1uZXh0anMtYWRhcHRlclwiLCBcIm1hbmlmZXN0Lmpzb25cIiksXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGNka05leHRqc1ZlcnNpb246IENES19ORVhUSlNfVkVSU0lPTixcbiAgICAgICAgYnVpbGRJZDogXCJiMVwiLFxuICAgICAgICByZWxhdGl2ZVByb2plY3REaXI6IFwiXCIsXG4gICAgICAgIGNvbmZpZzogeyBiYXNlUGF0aDogXCJcIiwgYXNzZXRQcmVmaXg6IFwiXCIsIHRyYWlsaW5nU2xhc2g6IGZhbHNlIH0sXG4gICAgICAgIGVudHJ5cG9pbnRzOiB7fSxcbiAgICAgICAgZ3JvdXBzOiB7IGRlZmF1bHQ6IFtdLCBhcGk6IFtdLCBkb2NzOiBbXSB9LFxuICAgICAgICBmdW5jdGlvbkdyb3VwczogW1xuICAgICAgICAgIHsgbmFtZTogXCJhcGlcIiwgcm91dGVzOiBbXCIvYXBpLyoqXCIsIFwiL3JlcG9ydHMvKipcIl0gfSxcbiAgICAgICAgICB7IG5hbWU6IFwiZG9jc1wiLCByb3V0ZXM6IFtcIi9kb2NzLyoqXCJdIH0sXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIGV4cGVjdChcbiAgICAgICgpID0+XG4gICAgICAgIG5ldyBOZXh0anNCdWlsZChuZXcgU3RhY2sobmV3IEFwcCgpLCBcIlN0YWNrXCIpLCBcIkJ1aWxkXCIsIHtcbiAgICAgICAgICBidWlsZENvbW1hbmQ6IFwidHJ1ZVwiLFxuICAgICAgICAgIGJ1aWxkRGlyZWN0b3J5OiBkaXIsXG4gICAgICAgICAgbmV4dGpzVHlwZTogTmV4dGpzVHlwZS5SRUdJT05BTF9GVU5DVElPTlMsXG4gICAgICAgICAgc2tpcEJ1aWxkOiB0cnVlLFxuICAgICAgICAgIGZ1bmN0aW9uR3JvdXBzOiBbXG4gICAgICAgICAgICB7IG5hbWU6IFwiZG9jc1wiLCByb3V0ZXM6IFtcIi9kb2NzLyoqXCJdIH0sXG4gICAgICAgICAgICB7IG5hbWU6IFwiYXBpXCIsIHJvdXRlczogW1wiL3JlcG9ydHMvKipcIiwgXCIvYXBpLyoqXCJdIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgKS5ub3QudG9UaHJvdygvc3RhbGUvKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJkZXBsb3ltZW50QXJjaGl0ZWN0dXJlXCIsICgpID0+IHtcbiAgY29uc3QgYmFzZSA9IHsgYnVpbGRDb21tYW5kOiBcIlwiLCBidWlsZERpcmVjdG9yeTogXCJcIiB9O1xuICBjb25zdCBmdW5jdGlvbnMgPSB7IC4uLmJhc2UsIG5leHRqc1R5cGU6IE5leHRqc1R5cGUuR0xPQkFMX0ZVTkNUSU9OUyB9O1xuXG4gIGNvbnN0IGhvc3QgPSBwcm9jZXNzLmFyY2guc3RhcnRzV2l0aChcImFybVwiKSA/IFwiYXJtNjRcIiA6IFwieDg2XzY0XCI7XG5cbiAgaXQoXCJzdGFnZXMgdGhlIEZ1bmN0aW9ucyB0eXBlcyBmb3IgdGhlIHN5bnRoIG1hY2hpbmUgdW5sZXNzIHRvbGQgb3RoZXJ3aXNlXCIsICgpID0+IHtcbiAgICBleHBlY3QoZGVwbG95bWVudEFyY2hpdGVjdHVyZShmdW5jdGlvbnMpLm5hbWUpLnRvQmUoaG9zdCk7XG4gIH0pO1xuXG4gIC8vIFRoZSBwb2ludCBvZiBob25vcmluZyB0aGUgcHJvcDogYHNoYXJwYCBmb3IgYW5vdGhlciBhcmNoaXRlY3R1cmUgaXMgb25seVxuICAvLyBhIGRvd25sb2FkLCBzbyB0aGUgYnVpbGQgbm8gbG9uZ2VyIGhhcyB0byBydW4gd2hlcmUgdGhlIGZ1bmN0aW9uIHdpbGwuXG4gIGl0KFwic3RhZ2VzIGZvciB0aGUgYXJjaGl0ZWN0dXJlIGFza2VkIGZvciwgbm90IHRoZSBzeW50aCBtYWNoaW5lJ3NcIiwgKCkgPT4ge1xuICAgIGNvbnN0IG90aGVyID0gaG9zdCA9PT0gXCJhcm02NFwiID8gQXJjaGl0ZWN0dXJlLlg4Nl82NCA6IEFyY2hpdGVjdHVyZS5BUk1fNjQ7XG4gICAgZXhwZWN0KGRlcGxveW1lbnRBcmNoaXRlY3R1cmUoeyAuLi5mdW5jdGlvbnMsIGFyY2hpdGVjdHVyZTogb3RoZXIgfSkpLnRvQmUoXG4gICAgICBvdGhlcixcbiAgICApO1xuICB9KTtcblxuICBpdChcImZvbGxvd3MgdGhlIHN5bnRoIG1hY2hpbmUgZm9yIHRoZSBDb250YWluZXJzIHR5cGVzXCIsICgpID0+IHtcbiAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgIC4uLmJhc2UsXG4gICAgICBuZXh0anNUeXBlOiBOZXh0anNUeXBlLlJFR0lPTkFMX0NPTlRBSU5FUlMsXG4gICAgICBhcmNoaXRlY3R1cmU6XG4gICAgICAgIGhvc3QgPT09IFwiYXJtNjRcIiA/IEFyY2hpdGVjdHVyZS5YODZfNjQgOiBBcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgIH07XG4gICAgZXhwZWN0KGRlcGxveW1lbnRBcmNoaXRlY3R1cmUocHJvcHMpLm5hbWUpLnRvQmUoaG9zdCk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -86,7 +86,7 @@ function sizeOfDirectory(dir) {
86
86
  * Next.js Cache construct providing unified S3 and DynamoDB cache management.
87
87
  */
88
88
  class NextjsCache extends constructs_1.Construct {
89
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsCache", version: "0.7.10" };
89
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsCache", version: "0.7.11" };
90
90
  cacheBucket;
91
91
  revalidationTable;
92
92
  buildId;
@@ -19,7 +19,7 @@ const constants_1 = require("../constants");
19
19
  * Fargate.
20
20
  */
21
21
  class NextjsContainers extends constructs_1.Construct {
22
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsContainers", version: "0.7.10" };
22
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsContainers", version: "0.7.11" };
23
23
  albFargateService;
24
24
  ecsCluster;
25
25
  url;
@@ -23,7 +23,7 @@ const zip_directory_1 = require("../utils/zip-directory");
23
23
  * `awslambda.streamifyResponse` directly.
24
24
  */
25
25
  class NextjsFunctions extends constructs_1.Construct {
26
- static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsFunctions", version: "0.7.10" };
26
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsFunctions", version: "0.7.11" };
27
27
  /**
28
28
  * The `default` group's function: the one the distribution's default behavior
29
29
  * targets, and the only one at all unless `functionGroups` is used.