cdk-nextjs 0.7.4 → 0.7.6

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 (51) hide show
  1. package/.jsii +37 -37
  2. package/docs/adapter-runtime.md +1 -1
  3. package/docs/harness-coverage.md +9 -8
  4. package/lib/adapter/adapter.mjs +220 -149
  5. package/lib/adapter/aws-cache-store.d.ts +28 -4
  6. package/lib/adapter/aws-cache-store.js +52 -21
  7. package/lib/adapter/aws-cache-store.test.js +36 -1
  8. package/lib/adapter/build-outputs.js +23 -1
  9. package/lib/adapter/build-outputs.test.js +18 -1
  10. package/lib/adapter/cache-handler.d.ts +4 -3
  11. package/lib/adapter/cache-handler.js +1 -1
  12. package/lib/adapter/cache-handler.mjs +131 -61
  13. package/lib/adapter/cache-handler.test.js +31 -1
  14. package/lib/adapter/cache-utils.d.ts +68 -2
  15. package/lib/adapter/cache-utils.js +108 -2
  16. package/lib/adapter/cache-utils.test.js +45 -1
  17. package/lib/adapter/init-cache.d.ts +1 -1
  18. package/lib/adapter/init-cache.js +60 -37
  19. package/lib/adapter/init-cache.test.js +55 -2
  20. package/lib/adapter/local-file-cache-handler.d.ts +2 -2
  21. package/lib/adapter/local-file-cache-handler.js +4 -5
  22. package/lib/adapter/s3-cache-handler.d.ts +23 -7
  23. package/lib/adapter/s3-cache-handler.js +63 -27
  24. package/lib/adapter/s3-cache-handler.test.js +168 -1
  25. package/lib/adapter/use-cache-default-handler.mjs +32 -9
  26. package/lib/adapter/use-cache-remote-handler.js +2 -3
  27. package/lib/adapter/use-cache-remote-handler.mjs +81 -61
  28. package/lib/nextjs-api.js +1 -1
  29. package/lib/nextjs-build/nextjs-build.d.ts +0 -7
  30. package/lib/nextjs-build/nextjs-build.js +4 -11
  31. package/lib/nextjs-build/nextjs-build.test.js +4 -3
  32. package/lib/nextjs-cache.js +1 -1
  33. package/lib/nextjs-compute/nextjs-containers.js +1 -1
  34. package/lib/nextjs-compute/nextjs-functions.js +1 -1
  35. package/lib/nextjs-distribution.js +1 -1
  36. package/lib/nextjs-post-deploy.js +1 -1
  37. package/lib/nextjs-static-assets.js +1 -1
  38. package/lib/root-constructs/nextjs-base-construct.js +1 -1
  39. package/lib/root-constructs/nextjs-global-containers.js +1 -1
  40. package/lib/root-constructs/nextjs-global-functions.js +1 -1
  41. package/lib/root-constructs/nextjs-regional-containers.js +1 -1
  42. package/lib/root-constructs/nextjs-regional-functions.js +1 -1
  43. package/lib/runtime/image.d.ts +19 -0
  44. package/lib/runtime/image.js +28 -2
  45. package/lib/runtime/image.test.js +43 -1
  46. package/lib/runtime/lambda.mjs +14 -3
  47. package/lib/runtime/server.mjs +14 -3
  48. package/lib/utils/deployment-build-id.d.ts +11 -0
  49. package/lib/utils/deployment-build-id.js +15 -0
  50. package/package.json +3 -3
  51. package/scripts/e2e-harness/README.md +1 -1
@@ -152,6 +152,29 @@ describe("TagMarkerTable", () => {
152
152
  expiredAt: undefined,
153
153
  });
154
154
  });
155
+ it("keys a tag past the sort key limit by its hash, and reads it back as the tag", async () => {
156
+ // `revalidatePath` on a long path: an implicit tag is as long as the path.
157
+ const tag = `_N_T_/${"p".repeat(1100)}`;
158
+ send.mockResolvedValue({});
159
+ await table.write(tag, 1000, undefined);
160
+ const written = commandInput(send.mock.calls[0][0], client_dynamodb_1.UpdateItemCommand);
161
+ expect(written.Key.sk.S).toBe((0, aws_cache_store_1.hashedTag)(tag));
162
+ expect((0, aws_cache_store_1.hashedTag)(tag)).toMatch(/^#[0-9a-f]{64}$/);
163
+ send.mockReset();
164
+ send.mockImplementation((command) => {
165
+ const { RequestItems } = commandInput(command, client_dynamodb_1.BatchGetItemCommand);
166
+ return Promise.resolve({
167
+ Responses: {
168
+ tbl: RequestItems.tbl.Keys.map(({ sk }) => ({
169
+ sk,
170
+ revalidatedAt: { N: "7" },
171
+ })),
172
+ },
173
+ });
174
+ });
175
+ const markers = await table.read([tag, "short"]);
176
+ expect([...markers.keys()].sort()).toEqual(["short", tag].sort());
177
+ });
155
178
  // A read-back after the write is eventually consistent, so it can return
156
179
  // the marker from before it: the writer tracks what the write returned.
157
180
  it("returns the row as the write left it", async () => {
@@ -269,6 +292,18 @@ describe("RevalidationLog", () => {
269
292
  },
270
293
  ]);
271
294
  });
295
+ it("hashes a tag too long for the sort key, carrying it in longTag", async () => {
296
+ const tag = `_N_T_/${"p".repeat(1100)}`;
297
+ send.mockResolvedValue({});
298
+ await log.put(tag, 1000, { revalidatedAt: 5 });
299
+ const { Item } = commandInput(send.mock.calls[0][0], client_dynamodb_1.PutItemCommand);
300
+ expect(Item.sk.S).toBe(`000000000001000#${(0, aws_cache_store_1.hashedTag)(tag)}`);
301
+ expect(Item.longTag).toEqual({ S: tag });
302
+ send.mockReset();
303
+ send.mockResolvedValueOnce({ Items: [{ ...Item }] });
304
+ const { rows } = await log.query(0);
305
+ expect(rows.map((row) => row.tag)).toEqual([tag]);
306
+ });
272
307
  it("stops after its page bound and says so", async () => {
273
308
  send.mockResolvedValue({
274
309
  Items: [],
@@ -358,4 +393,4 @@ describe("TrackedTagMarkers", () => {
358
393
  expect(read).toHaveBeenCalledTimes(2);
359
394
  });
360
395
  });
361
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWNhY2hlLXN0b3JlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRhcHRlci9hd3MtY2FjaGUtc3RvcmUudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNEQUFzRDtBQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBRXRDLDhEQU1rQztBQUNsQyxrREFLNEI7QUFDNUIsdURBZ0IyQjtBQUUzQixnRUFBZ0U7QUFDaEUsTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUFnQixFQUFFLElBQWEsRUFBRSxFQUFFO0lBQ3ZELE1BQU0sSUFBSSxHQUFHLElBQWlCLENBQUM7SUFDL0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRSxDQUFDLENBQUM7QUFFRixRQUFRLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFO0lBQ3JDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDeEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLE9BQU8sQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0gsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNaLE9BQU8sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDBDQUEwQyxFQUFFLEdBQUcsRUFBRTtRQUNsRCxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixHQUFHLFFBQVEsQ0FBQztRQUNwRCxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxHQUFHLE9BQU8sQ0FBQztR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QUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXpDLEtBQUssSUFBSSxJQUFJLENBQUM7UUFDZCxNQUFNLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN4QixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELGdEQUFnRDtRQUNoRCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuamVzdC5tb2NrKFwiQGF3cy1zZGsvY2xpZW50LXMzXCIpO1xuamVzdC5tb2NrKFwiQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiXCIpO1xuXG5pbXBvcnQge1xuICBCYXRjaEdldEl0ZW1Db21tYW5kLFxuICBEeW5hbW9EQkNsaWVudCxcbiAgUHV0SXRlbUNvbW1hbmQsXG4gIFF1ZXJ5Q29tbWFuZCxcbiAgVXBkYXRlSXRlbUNvbW1hbmQsXG59IGZyb20gXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIjtcbmltcG9ydCB7XG4gIEdldE9iamVjdENvbW1hbmQsXG4gIE5vU3VjaEtleSxcbiAgUHV0T2JqZWN0Q29tbWFuZCxcbiAgUzNDbGllbnQsXG59IGZyb20gXCJAYXdzLXNkay9jbGllbnQtczNcIjtcbmltcG9ydCB7XG4gIGJ1aWxkUzNLZXksXG4gIENhY2hlQnVja2V0LFxuICBtYXJrZXJGb3IsXG4gIG1hcmtlclN0YXRlLFxuICBtYXJrZXJVcGRhdGUsXG4gIG1lcmdlTWFya2VycyxcbiAgcmVzb2x2ZUF3c0NhY2hlQ29uZmlnLFxuICBSRVZBTElEQVRJT05fTE9HX01BWF9QQUdFUyxcbiAgUkVWQUxJREFUSU9OX0xPR19UVExfTVMsXG4gIFJldmFsaWRhdGlvbkxvZyxcbiAgUmV2YWxpZGF0aW9uTG9nUm93LFxuICBUYWdNYXJrZXIsXG4gIFRhZ01hcmtlclRhYmxlLFxuICBUcmFja2VkVGFnTWFya2VycyxcbiAgdXNlQ2FjaGVTM0tleSxcbn0gZnJvbSBcIi4vYXdzLWNhY2hlLXN0b3JlXCI7XG5cbi8qKiBUaGUgaW5wdXQgYW4gYXV0b21vY2tlZCBTREsgY29tbWFuZCB3YXMgY29uc3RydWN0ZWQgd2l0aC4gKi9cbmNvbnN0IGNvbW1hbmRJbnB1dCA9IChjb21tYW5kOiB1bmtub3duLCB0eXBlOiB1bmtub3duKSA9PiB7XG4gIGNvbnN0IG1vY2sgPSB0eXBlIGFzIGplc3QuTW9jaztcbiAgcmV0dXJuIG1vY2subW9jay5jYWxsc1ttb2NrLm1vY2suaW5zdGFuY2VzLmluZGV4T2YoY29tbWFuZCldWzBdO1xufTtcblxuZGVzY3JpYmUoXCJyZXNvbHZlQXdzQ2FjaGVDb25maWdcIiwgKCkgPT4ge1xuICBjb25zdCBlbnYgPSBwcm9jZXNzLmVudjtcbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgcHJvY2Vzcy5lbnYgPSB7IC4uLmVudiB9O1xuICB9KTtcbiAgYWZ0ZXJBbGwoKCkgPT4ge1xuICAgIHByb2Nlc3MuZW52ID0gZW52O1xuICB9KTtcblxuICBpdChcInJlYWRzIHRoZSBlbnZpcm9ubWVudCB0aGUgY29uc3RydWN0cyBzZXRcIiwgKCkgPT4ge1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfQ0FDSEVfQlVDS0VUX05BTUUgPSBcImJ1Y2tldFwiO1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfUkVWQUxJREFUSU9OX1RBQkxFX05BTUUgPSBcInRhYmxlXCI7XG4gICAgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19CVUlMRF9JRCA9IFwiYnVpbGRcIjtcbiAgICBwcm9jZXNzLmVudi5BV1NfUkVHSU9OID0gXCJldS13ZXN0LTFcIjtcbiAgICBleHBlY3QocmVzb2x2ZUF3c0NhY2hlQ29uZmlnKCkpLnRvRXF1YWwoe1xuICAgICAgYnVja2V0TmFtZTogXCJidWNrZXRcIixcbiAgICAgIHRhYmxlTmFtZTogXCJ0YWJsZVwiLFxuICAgICAgYnVpbGRJZDogXCJidWlsZFwiLFxuICAgICAgcmVnaW9uOiBcImV1LXdlc3QtMVwiLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcInJlcG9ydHMgd2hhdCBpcyB1bnNldCBhcyBlbXB0eVwiLCAoKSA9PiB7XG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfQ0FDSEVfQlVDS0VUX05BTUU7XG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfUkVWQUxJREFUSU9OX1RBQkxFX05BTUU7XG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LkNES19ORVhUSlNfQlVJTERfSUQ7XG4gICAgZGVsZXRlIHByb2Nlc3MuZW52LkFXU19SRUdJT047XG4gICAgZXhwZWN0KHJlc29sdmVBd3NDYWNoZUNvbmZpZygpKS50b0VxdWFsKHtcbiAgICAgIGJ1Y2tldE5hbWU6IFwiXCIsXG4gICAgICB0YWJsZU5hbWU6IFwiXCIsXG4gICAgICBidWlsZElkOiBcIlwiLFxuICAgICAgcmVnaW9uOiBcInVzLWVhc3QtMVwiLFxuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIlMzIGtleXNcIiwgKCkgPT4ge1xuICBpdChcImtlZXBzIHRoZSBpbmNyZW1lbnRhbCBjYWNoZSdzIHtidWlsZElkfS97a2V5fS5qc29uIGNvbnZlbnRpb25cIiwgKCkgPT4ge1xuICAgIGV4cGVjdChidWlsZFMzS2V5KFwiYlwiLCBcIi9cIikpLnRvQmUoXCJiL2luZGV4Lmpzb25cIik7XG4gICAgZXhwZWN0KGJ1aWxkUzNLZXkoXCJiXCIsIFwiXCIpKS50b0JlKFwiYi9pbmRleC5qc29uXCIpO1xuICAgIGV4cGVjdChidWlsZFMzS2V5KFwiYlwiLCBcIi9ibG9nL3Bvc3RcIikpLnRvQmUoXCJiL2Jsb2cvcG9zdC5qc29uXCIpO1xuICAgIGV4cGVjdChidWlsZFMzS2V5KFwiYlwiLCBcImFiYzEyM1wiKSkudG9CZShcImIvYWJjMTIzLmpzb25cIik7XG4gIH0pO1xuXG4gIGl0KFwicHV0cyAndXNlIGNhY2hlJyBlbnRyaWVzIHdoZXJlIG5vIGluY3JlbWVudGFsIGtleSBjYW4gbGFuZFwiLCAoKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gdXNlQ2FjaGVTM0tleShcImJcIiwgXCJmXCIucmVwZWF0KDY0KSk7XG4gICAgZXhwZWN0KGtleSkudG9CZShgYi9fdXNlLWNhY2hlLyR7XCJmXCIucmVwZWF0KDY0KX0uZW50cnlgKTtcbiAgICAvLyBFdmVuIGEgcm91dGUgc3BlbGxlZCBsaWtlIHRoZSB1c2UtY2FjaGUga2V5IGdldHMgYC5qc29uYCBhcHBlbmRlZC5cbiAgICBleHBlY3QoYnVpbGRTM0tleShcImJcIiwgYC9fdXNlLWNhY2hlLyR7XCJmXCIucmVwZWF0KDY0KX0uZW50cnlgKSkubm90LnRvQmUoXG4gICAgICBrZXksXG4gICAgKTtcbiAgICBleHBlY3Qoa2V5LmVuZHNXaXRoKFwiLmpzb25cIikpLnRvQmUoZmFsc2UpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInRhZyBtYXJrZXJzXCIsICgpID0+IHtcbiAgaXQoXCJ3cml0ZXMgd2hhdCBtYXJrZXJGb3IgYXBwbGllcyBsb2NhbGx5XCIsICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IGR1cmF0aW9ucyBvZiBbdW5kZWZpbmVkLCB7fSwgeyBleHBpcmU6IDYwIH1dKSB7XG4gICAgICBjb25zdCB1cGRhdGUgPSBtYXJrZXJVcGRhdGUoMTAwMCwgZHVyYXRpb25zKTtcbiAgICAgIGNvbnN0IGxvY2FsID0gbWFya2VyRm9yKDEwMDAsIGR1cmF0aW9ucyk7XG4gICAgICBjb25zdCB3cml0dGVuOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICAgIHVwZGF0ZS5FeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzISxcbiAgICAgICkpIHtcbiAgICAgICAgd3JpdHRlbltuYW1lLnNsaWNlKDEpXSA9IE51bWJlcih2YWx1ZS5OKTtcbiAgICAgIH1cbiAgICAgIGV4cGVjdCh3cml0dGVuKS50b0VxdWFsKGxvY2FsKTtcbiAgICB9XG4gICAgZXhwZWN0KG1hcmtlckZvcigxMDAwLCB7IGV4cGlyZTogNjAgfSkpLnRvRXF1YWwoe1xuICAgICAgc3RhbGVBdDogMTAwMCxcbiAgICAgIGV4cGlyZWRBdDogNjEwMDAsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwia2VlcHMgYW4gZWFybGllciBleHBpcmVkQXQgYSBwcm9maWxlIHdpdGggbm8gZXhwaXJlIGxlYXZlc1wiLCAoKSA9PiB7XG4gICAgLy8gVGhlIHJvdyBrZWVwcyBpdCAoYFNFVCBzdGFsZUF0YCBvbmx5KSwgc28gYW4gaW5zdGFuY2UgbGVhcm5pbmcgb2YgdGhlXG4gICAgLy8gc2Vjb25kIHJldmFsaWRhdGlvbiBmcm9tIHRoZSBsb2cgaGFzIHRvIGtlZXAgaXQgdG9vLlxuICAgIGNvbnN0IGZpcnN0ID0gbWFya2VyRm9yKDEwMDAsIHsgZXhwaXJlOiA2MCB9KTtcbiAgICBjb25zdCBzZWNvbmQgPSBtYXJrZXJGb3IoMjAwMCwge30pO1xuICAgIGV4cGVjdChtZXJnZU1hcmtlcnMoZmlyc3QsIHNlY29uZCkpLnRvRXF1YWwoe1xuICAgICAgc3RhbGVBdDogMjAwMCxcbiAgICAgIGV4cGlyZWRBdDogNjEwMDAsXG4gICAgfSk7XG4gICAgZXhwZWN0KG1lcmdlTWFya2VycyhzZWNvbmQsIGZpcnN0KSkudG9FcXVhbCh7XG4gICAgICBzdGFsZUF0OiAyMDAwLFxuICAgICAgZXhwaXJlZEF0OiA2MTAwMCxcbiAgICB9KTtcbiAgICAvLyBBIG5ld2VyIGBleHBpcmVgIHN0aWxsIHJlcGxhY2VzIGl0LlxuICAgIGV4cGVjdChtZXJnZU1hcmtlcnMoZmlyc3QsIG1hcmtlckZvcigyMDAwLCB7IGV4cGlyZTogMSB9KSkpLnRvRXF1YWwoe1xuICAgICAgc3RhbGVBdDogMjAwMCxcbiAgICAgIGV4cGlyZWRBdDogMzAwMCxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJqdWRnZXMgYW4gZW50cnkgdGhlIHdheSB0aGUgaW5jcmVtZW50YWwgY2FjaGUgYWx3YXlzIGhhc1wiLCAoKSA9PiB7XG4gICAgLy8gRXhwaXJlZCBvdXRyaWdodCBhZnRlciBjcmVhdGlvbi5cbiAgICBleHBlY3QobWFya2VyU3RhdGUoeyByZXZhbGlkYXRlZEF0OiAyMCB9LCAxMCwgMzApKS50b0JlKFwiZXhwaXJlZFwiKTtcbiAgICAvLyBSZXZhbGlkYXRlZCBiZWZvcmUgdGhlIGVudHJ5IHdhcyBjcmVhdGVkOiBubyBlZmZlY3QuXG4gICAgZXhwZWN0KG1hcmtlclN0YXRlKHsgcmV2YWxpZGF0ZWRBdDogNSB9LCAxMCwgMzApKS50b0JlKFwiZnJlc2hcIik7XG4gICAgLy8gQSBwcm9maWxlOiBzdGFsZSBub3csIGV4cGlyZWQgb25jZSBgZXhwaXJlZEF0YCBwYXNzZXMuXG4gICAgZXhwZWN0KG1hcmtlclN0YXRlKHsgc3RhbGVBdDogMjAsIGV4cGlyZWRBdDogNTAgfSwgMTAsIDMwKSkudG9CZShcInN0YWxlXCIpO1xuICAgIGV4cGVjdChtYXJrZXJTdGF0ZSh7IHN0YWxlQXQ6IDIwLCBleHBpcmVkQXQ6IDUwIH0sIDEwLCA2MCkpLnRvQmUoXCJleHBpcmVkXCIpO1xuICAgIC8vIGBleHBpcmU6IDBgOiBzdGFsZSBhbmQgZXhwaXJlZCBhdCBvbmNlLlxuICAgIGV4cGVjdChtYXJrZXJTdGF0ZSh7IHN0YWxlQXQ6IDIwLCBleHBpcmVkQXQ6IDIwIH0sIDEwLCAzMCkpLnRvQmUoXCJleHBpcmVkXCIpO1xuICAgIGV4cGVjdChtYXJrZXJTdGF0ZSh7fSwgMTAsIDMwKSkudG9CZShcImZyZXNoXCIpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIlRhZ01hcmtlclRhYmxlXCIsICgpID0+IHtcbiAgY29uc3Qgc2VuZCA9IGplc3QuZm4oKTtcbiAgbGV0IHRhYmxlOiBUYWdNYXJrZXJUYWJsZTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBzZW5kLm1vY2tSZXNldCgpO1xuICAgIChEeW5hbW9EQkNsaWVudCBhcyBqZXN0Lk1vY2spLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiAoeyBzZW5kIH0pKTtcbiAgICB0YWJsZSA9IG5ldyBUYWdNYXJrZXJUYWJsZShuZXcgRHluYW1vREJDbGllbnQoe30pLCBcInRibFwiLCBcImJ1aWxkXCIpO1xuICB9KTtcblxuICBpdChcIndyaXRlcyB0aGUgbWFya2VyIHJvdyB1bmRlciB0aGUgYnVpbGRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIHNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgIGF3YWl0IHRhYmxlLndyaXRlKFwicG9zdHNcIiwgMTAwMCwgeyBleHBpcmU6IDEgfSk7XG4gICAgY29uc3QgaW5wdXQgPSBjb21tYW5kSW5wdXQoc2VuZC5tb2NrLmNhbGxzWzBdWzBdLCBVcGRhdGVJdGVtQ29tbWFuZCk7XG4gICAgZXhwZWN0KGlucHV0KS50b0VxdWFsKHtcbiAgICAgIFRhYmxlTmFtZTogXCJ0YmxcIixcbiAgICAgIEtleTogeyBwazogeyBTOiBcImJ1aWxkXCIgfSwgc2s6IHsgUzogXCJwb3N0c1wiIH0gfSxcbiAgICAgIFVwZGF0ZUV4cHJlc3Npb246IFwiU0VUIHN0YWxlQXQgPSA6c3RhbGVBdCwgZXhwaXJlZEF0ID0gOmV4cGlyZWRBdFwiLFxuICAgICAgRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICBcIjpzdGFsZUF0XCI6IHsgTjogXCIxMDAwXCIgfSxcbiAgICAgICAgXCI6ZXhwaXJlZEF0XCI6IHsgTjogXCIyMDAwXCIgfSxcbiAgICAgIH0sXG4gICAgICBSZXR1cm5WYWx1ZXM6IFwiQUxMX05FV1wiLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcInJlYWRzIG1hcmtlcnMgaW4gYmF0Y2hlcyBvZiAxMDAgYW5kIHBhcnNlcyB0aGVtXCIsIGFzeW5jICgpID0+IHtcbiAgICBzZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT4ge1xuICAgICAgY29uc3QgeyBSZXF1ZXN0SXRlbXMgfSA9IGNvbW1hbmRJbnB1dChjb21tYW5kLCBCYXRjaEdldEl0ZW1Db21tYW5kKTtcbiAgICAgIGNvbnN0IGtleXMgPSBSZXF1ZXN0SXRlbXMudGJsLktleXMgYXMgeyBzazogeyBTOiBzdHJpbmcgfSB9W107XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgUmVzcG9uc2VzOiB7XG4gICAgICAgICAgdGJsOiBrZXlzXG4gICAgICAgICAgICAuZmlsdGVyKCh7IHNrIH0pID0+IHNrLlMuZW5kc1dpdGgoXCIwXCIpKVxuICAgICAgICAgICAgLm1hcCgoeyBzayB9KSA9PiAoeyBzaywgcmV2YWxpZGF0ZWRBdDogeyBOOiBcIjdcIiB9IH0pKSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHRhZ3MgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxNTAgfSwgKF8sIGkpID0+IGB0JHtpfWApO1xuICAgIGNvbnN0IG1hcmtlcnMgPSBhd2FpdCB0YWJsZS5yZWFkKFsuLi50YWdzLCBcInQwXCJdKTtcbiAgICBleHBlY3Qoc2VuZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICAgIGV4cGVjdChtYXJrZXJzLnNpemUpLnRvQmUoMTUpO1xuICAgIGV4cGVjdChtYXJrZXJzLmdldChcInQxMFwiKSkudG9FcXVhbCh7XG4gICAgICByZXZhbGlkYXRlZEF0OiA3LFxuICAgICAgc3RhbGVBdDogdW5kZWZpbmVkLFxuICAgICAgZXhwaXJlZEF0OiB1bmRlZmluZWQsXG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIEEgcmVhZC1iYWNrIGFmdGVyIHRoZSB3cml0ZSBpcyBldmVudHVhbGx5IGNvbnNpc3RlbnQsIHNvIGl0IGNhbiByZXR1cm5cbiAgLy8gdGhlIG1hcmtlciBmcm9tIGJlZm9yZSBpdDogdGhlIHdyaXRlciB0cmFja3Mgd2hhdCB0aGUgd3JpdGUgcmV0dXJuZWQuXG4gIGl0KFwicmV0dXJucyB0aGUgcm93IGFzIHRoZSB3cml0ZSBsZWZ0IGl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBzZW5kLm1vY2tSZXNvbHZlZFZhbHVlT25jZSh7XG4gICAgICBBdHRyaWJ1dGVzOiB7XG4gICAgICAgIHNrOiB7IFM6IFwicG9zdHNcIiB9LFxuICAgICAgICByZXZhbGlkYXRlZEF0OiB7IE46IFwiNTAwMFwiIH0sXG4gICAgICAgIHN0YWxlQXQ6IHsgTjogXCIxMFwiIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGV4cGVjdChhd2FpdCB0YWJsZS53cml0ZShcInBvc3RzXCIsIDUwMDAsIHVuZGVmaW5lZCkpLnRvRXF1YWwoe1xuICAgICAgcmV2YWxpZGF0ZWRBdDogNTAwMCxcbiAgICAgIHN0YWxlQXQ6IDEwLFxuICAgICAgZXhwaXJlZEF0OiB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgc2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2Uoe30pO1xuICAgIGV4cGVjdChhd2FpdCB0YWJsZS53cml0ZShcInBvc3RzXCIsIDYwMDAsIHVuZGVmaW5lZCkpLnRvQmVVbmRlZmluZWQoKTtcbiAgfSk7XG5cbiAgaXQoXCJhc2tzIGFnYWluIGZvciB1bnByb2Nlc3NlZCBrZXlzLCBhbmQgZ2l2ZXMgdXAgYWZ0ZXIgdGhyZWUgdHJpZXNcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVucHJvY2Vzc2VkID0ge1xuICAgICAgVW5wcm9jZXNzZWRLZXlzOiB7XG4gICAgICAgIHRibDogeyBLZXlzOiBbeyBwazogeyBTOiBcImJ1aWxkXCIgfSwgc2s6IHsgUzogXCJhXCIgfSB9XSB9LFxuICAgICAgfSxcbiAgICB9O1xuICAgIHNlbmQubW9ja1Jlc29sdmVkVmFsdWVPbmNlKHVucHJvY2Vzc2VkKS5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2Uoe1xuICAgICAgUmVzcG9uc2VzOiB7IHRibDogW3sgc2s6IHsgUzogXCJhXCIgfSwgc3RhbGVBdDogeyBOOiBcIjNcIiB9IH1dIH0sXG4gICAgfSk7XG4gICAgZXhwZWN0KChhd2FpdCB0YWJsZS5yZWFkKFtcImFcIl0pKS5nZXQoXCJhXCIpPy5zdGFsZUF0KS50b0JlKDMpO1xuXG4gICAgc2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh1bnByb2Nlc3NlZCk7XG4gICAgYXdhaXQgZXhwZWN0KHRhYmxlLnJlYWQoW1wiYVwiXSkpLnJlamVjdHMudG9UaHJvdygvdW5yZWFkIGFmdGVyIHJldHJ5aW5nLyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiUmV2YWxpZGF0aW9uTG9nXCIsICgpID0+IHtcbiAgY29uc3Qgc2VuZCA9IGplc3QuZm4oKTtcbiAgbGV0IGxvZzogUmV2YWxpZGF0aW9uTG9nO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHNlbmQubW9ja1Jlc2V0KCk7XG4gICAgKER5bmFtb0RCQ2xpZW50IGFzIGplc3QuTW9jaykubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+ICh7IHNlbmQgfSkpO1xuICAgIGxvZyA9IG5ldyBSZXZhbGlkYXRpb25Mb2cobmV3IER5bmFtb0RCQ2xpZW50KHt9KSwgXCJ0YmxcIiwgXCJidWlsZFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJwdXRzIG9uZSByb3cgcGVyIHJldmFsaWRhdGlvbiB1bmRlciB0aGUgYnVpbGQncyBsb2csIHdpdGggYSBUVExcIiwgYXN5bmMgKCkgPT4ge1xuICAgIHNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgIGNvbnN0IGF0ID0gMV83MjdfMDAwXzAwMF8xMjM7XG4gICAgYXdhaXQgbG9nLnB1dChcInVzZXIjNDJcIiwgYXQsIHsgc3RhbGVBdDogNSwgZXhwaXJlZEF0OiA2IH0pO1xuICAgIGV4cGVjdChjb21tYW5kSW5wdXQoc2VuZC5tb2NrLmNhbGxzWzBdWzBdLCBQdXRJdGVtQ29tbWFuZCkpLnRvRXF1YWwoe1xuICAgICAgVGFibGVOYW1lOiBcInRibFwiLFxuICAgICAgSXRlbToge1xuICAgICAgICBwazogeyBTOiBcImJ1aWxkI2xvZ1wiIH0sXG4gICAgICAgIHNrOiB7IFM6IFwiMDAxNzI3MDAwMDAwMTIzI3VzZXIjNDJcIiB9LFxuICAgICAgICB0dGw6IHsgTjogU3RyaW5nKE1hdGguY2VpbCgoYXQgKyBSRVZBTElEQVRJT05fTE9HX1RUTF9NUykgLyAxMDAwKSkgfSxcbiAgICAgICAgc3RhbGVBdDogeyBOOiBcIjVcIiB9LFxuICAgICAgICBleHBpcmVkQXQ6IHsgTjogXCI2XCIgfSxcbiAgICAgIH0sXG4gICAgICBDb25kaXRpb25FeHByZXNzaW9uOiBcImF0dHJpYnV0ZV9ub3RfZXhpc3RzKHNrKVwiLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcIm1vdmVzIGEgcm93IHRvIHRoZSBuZXh0IG1pbGxpc2Vjb25kIHJhdGhlciB0aGFuIG92ZXJ3cml0ZSBhbm90aGVyIHJldmFsaWRhdGlvblwiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gYHVwZGF0ZVRhZygneCcpYCBhbmQgYHJldmFsaWRhdGVUYWcoJ3gnLCAnbWF4JylgIGluIG9uZSBtaWxsaXNlY29uZC5cbiAgICBjb25zdCB0YWtlbiA9IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKFwidGFrZW5cIiksIHtcbiAgICAgIG5hbWU6IFwiQ29uZGl0aW9uYWxDaGVja0ZhaWxlZEV4Y2VwdGlvblwiLFxuICAgIH0pO1xuICAgIHNlbmQubW9ja1JlamVjdGVkVmFsdWVPbmNlKHRha2VuKS5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2Uoe30pO1xuICAgIGF3YWl0IGxvZy5wdXQoXCJ4XCIsIDEwMDAuNSwgeyByZXZhbGlkYXRlZEF0OiA1IH0pO1xuICAgIGV4cGVjdChcbiAgICAgIHNlbmQubW9jay5jYWxscy5tYXAoXG4gICAgICAgIChbY29tbWFuZF0pID0+IGNvbW1hbmRJbnB1dChjb21tYW5kLCBQdXRJdGVtQ29tbWFuZCkuSXRlbS5zay5TLFxuICAgICAgKSxcbiAgICApLnRvRXF1YWwoW1wiMDAwMDAwMDAwMDAxMDAwI3hcIiwgXCIwMDAwMDAwMDAwMDEwMDEjeFwiXSk7XG4gIH0pO1xuXG4gIGl0KFwiZ2l2ZXMgdXAgYWZ0ZXIgYSBib3VuZGVkIG51bWJlciBvZiBjb2xsaXNpb25zLCBhbmQgb24gb3RoZXIgZXJyb3JzIGF0IG9uY2VcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHRha2VuID0gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoXCJ0YWtlblwiKSwge1xuICAgICAgbmFtZTogXCJDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uXCIsXG4gICAgfSk7XG4gICAgc2VuZC5tb2NrUmVqZWN0ZWRWYWx1ZSh0YWtlbik7XG4gICAgYXdhaXQgZXhwZWN0KGxvZy5wdXQoXCJ4XCIsIDEwMDAsIHt9KSkucmVqZWN0cy50b0JlKHRha2VuKTtcbiAgICBleHBlY3Qoc2VuZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDUpO1xuXG4gICAgc2VuZC5tb2NrUmVzZXQoKTtcbiAgICBjb25zdCB0aHJvdHRsZWQgPSBuZXcgRXJyb3IoXCJ0aHJvdHRsZWRcIik7XG4gICAgc2VuZC5tb2NrUmVqZWN0ZWRWYWx1ZSh0aHJvdHRsZWQpO1xuICAgIGF3YWl0IGV4cGVjdChsb2cucHV0KFwieFwiLCAxMDAwLCB7fSkpLnJlamVjdHMudG9CZSh0aHJvdHRsZWQpO1xuICAgIGV4cGVjdChzZW5kKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gIH0pO1xuXG4gIGl0KFwicXVlcmllcyBmcm9tIGEgemVyby1wYWRkZWQgY3Vyc29yIGFuZCBwYXJzZXMgdGhlIHRhZyBhZnRlciBpdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgc2VuZFxuICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlT25jZSh7XG4gICAgICAgIEl0ZW1zOiBbXG4gICAgICAgICAgeyBzazogeyBTOiBcIjAwMDAwMDAwMDAwMTAwMCNhXCIgfSwgcmV2YWxpZGF0ZWRBdDogeyBOOiBcIjdcIiB9IH0sXG4gICAgICAgICAgeyBzazogeyBTOiBcIm5vdCBhIGxvZyByb3dcIiB9IH0sXG4gICAgICAgIF0sXG4gICAgICAgIExhc3RFdmFsdWF0ZWRLZXk6IHsgcGs6IHsgUzogXCJidWlsZCNsb2dcIiB9LCBzazogeyBTOiBcInhcIiB9IH0sXG4gICAgICB9KVxuICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlT25jZSh7XG4gICAgICAgIEl0ZW1zOiBbeyBzazogeyBTOiBcIjAwMDAwMDAwMDAwMjAwMCN1c2VyIzQyXCIgfSwgc3RhbGVBdDogeyBOOiBcIjhcIiB9IH1dLFxuICAgICAgfSk7XG4gICAgY29uc3QgeyByb3dzLCB0cnVuY2F0ZWQgfSA9IGF3YWl0IGxvZy5xdWVyeSg5OTkuNSk7XG5cbiAgICBjb25zdCBmaXJzdCA9IGNvbW1hbmRJbnB1dChzZW5kLm1vY2suY2FsbHNbMF1bMF0sIFF1ZXJ5Q29tbWFuZCk7XG4gICAgZXhwZWN0KGZpcnN0KS50b01hdGNoT2JqZWN0KHtcbiAgICAgIFRhYmxlTmFtZTogXCJ0YmxcIixcbiAgICAgIEtleUNvbmRpdGlvbkV4cHJlc3Npb246IFwicGsgPSA6cGsgQU5EIHNrID49IDpzaW5jZVwiLFxuICAgICAgRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICBcIjpwa1wiOiB7IFM6IFwiYnVpbGQjbG9nXCIgfSxcbiAgICAgICAgXCI6c2luY2VcIjogeyBTOiBcIjAwMDAwMDAwMDAwMDk5OVwiIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGV4cGVjdChcbiAgICAgIGNvbW1hbmRJbnB1dChzZW5kLm1vY2suY2FsbHNbMV1bMF0sIFF1ZXJ5Q29tbWFuZCkuRXhjbHVzaXZlU3RhcnRLZXksXG4gICAgKS50b0VxdWFsKHsgcGs6IHsgUzogXCJidWlsZCNsb2dcIiB9LCBzazogeyBTOiBcInhcIiB9IH0pO1xuICAgIGV4cGVjdCh0cnVuY2F0ZWQpLnRvQmUoZmFsc2UpO1xuICAgIGV4cGVjdChyb3dzKS50b0VxdWFsKFtcbiAgICAgIHtcbiAgICAgICAgc2s6IFwiMDAwMDAwMDAwMDAxMDAwI2FcIixcbiAgICAgICAgYXQ6IDEwMDAsXG4gICAgICAgIHRhZzogXCJhXCIsXG4gICAgICAgIG1hcmtlcjogeyByZXZhbGlkYXRlZEF0OiA3LCBzdGFsZUF0OiB1bmRlZmluZWQsIGV4cGlyZWRBdDogdW5kZWZpbmVkIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzazogXCIwMDAwMDAwMDAwMDIwMDAjdXNlciM0MlwiLFxuICAgICAgICBhdDogMjAwMCxcbiAgICAgICAgdGFnOiBcInVzZXIjNDJcIixcbiAgICAgICAgbWFya2VyOiB7IHJldmFsaWRhdGVkQXQ6IHVuZGVmaW5lZCwgc3RhbGVBdDogOCwgZXhwaXJlZEF0OiB1bmRlZmluZWQgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH0pO1xuXG4gIGl0KFwic3RvcHMgYWZ0ZXIgaXRzIHBhZ2UgYm91bmQgYW5kIHNheXMgc29cIiwgYXN5bmMgKCkgPT4ge1xuICAgIHNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgSXRlbXM6IFtdLFxuICAgICAgTGFzdEV2YWx1YXRlZEtleTogeyBwazogeyBTOiBcImJ1aWxkI2xvZ1wiIH0sIHNrOiB7IFM6IFwieFwiIH0gfSxcbiAgICB9KTtcbiAgICBleHBlY3QoKGF3YWl0IGxvZy5xdWVyeSgwKSkudHJ1bmNhdGVkKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChzZW5kKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoUkVWQUxJREFUSU9OX0xPR19NQVhfUEFHRVMpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIkNhY2hlQnVja2V0XCIsICgpID0+IHtcbiAgY29uc3Qgc2VuZCA9IGplc3QuZm4oKTtcbiAgbGV0IGJ1Y2tldDogQ2FjaGVCdWNrZXQ7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgc2VuZC5tb2NrUmVzZXQoKTtcbiAgICAoUzNDbGllbnQgYXMgamVzdC5Nb2NrKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHsgc2VuZCB9KSk7XG4gICAgYnVja2V0ID0gbmV3IENhY2hlQnVja2V0KG5ldyBTM0NsaWVudCh7fSksIFwiYmt0XCIpO1xuICB9KTtcblxuICBpdChcInJlYWRzIGFuIG9iamVjdCBhcyB0ZXh0XCIsIGFzeW5jICgpID0+IHtcbiAgICBzZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgIEJvZHk6IHsgdHJhbnNmb3JtVG9TdHJpbmc6IGplc3QuZm4oKS5tb2NrUmVzb2x2ZWRWYWx1ZShcInt9XCIpIH0sXG4gICAgICBDb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgfSk7XG4gICAgZXhwZWN0KGF3YWl0IGJ1Y2tldC5nZXQoXCJrXCIpKS50b0JlKFwie31cIik7XG4gICAgZXhwZWN0KGNvbW1hbmRJbnB1dChzZW5kLm1vY2suY2FsbHNbMF1bMF0sIEdldE9iamVjdENvbW1hbmQpKS50b0VxdWFsKHtcbiAgICAgIEJ1Y2tldDogXCJia3RcIixcbiAgICAgIEtleTogXCJrXCIsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwiYW5zd2VycyBhIG1pc3Npbmcgb2JqZWN0IG9yIGJvZHkgd2l0aCB1bmRlZmluZWQsIGFuZCB0aHJvd3MgdGhlIHJlc3RcIiwgYXN5bmMgKCkgPT4ge1xuICAgIHNlbmQubW9ja1JlamVjdGVkVmFsdWVPbmNlKFxuICAgICAgbmV3IE5vU3VjaEtleSh7IG1lc3NhZ2U6IFwibWlzc2luZ1wiLCAkbWV0YWRhdGE6IHt9IH0pLFxuICAgICk7XG4gICAgZXhwZWN0KGF3YWl0IGJ1Y2tldC5nZXQoXCJrXCIpKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgc2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2UoeyBCb2R5OiBudWxsIH0pO1xuICAgIGV4cGVjdChhd2FpdCBidWNrZXQuZ2V0KFwia1wiKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIHNlbmQubW9ja1JlamVjdGVkVmFsdWVPbmNlKG5ldyBFcnJvcihcIkFjY2Vzc0RlbmllZFwiKSk7XG4gICAgYXdhaXQgZXhwZWN0KGJ1Y2tldC5nZXQoXCJrXCIpKS5yZWplY3RzLnRvVGhyb3coXCJBY2Nlc3NEZW5pZWRcIik7XG4gIH0pO1xuXG4gIGl0KFwid3JpdGVzIEpTT05cIiwgYXN5bmMgKCkgPT4ge1xuICAgIHNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgIGF3YWl0IGJ1Y2tldC5wdXRKc29uKFwia1wiLCBcInt9XCIpO1xuICAgIGV4cGVjdChjb21tYW5kSW5wdXQoc2VuZC5tb2NrLmNhbGxzWzBdWzBdLCBQdXRPYmplY3RDb21tYW5kKSkudG9FcXVhbCh7XG4gICAgICBCdWNrZXQ6IFwiYmt0XCIsXG4gICAgICBLZXk6IFwia1wiLFxuICAgICAgQm9keTogXCJ7fVwiLFxuICAgICAgQ29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLFxuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIlRyYWNrZWRUYWdNYXJrZXJzXCIsICgpID0+IHtcbiAgaXQoXCJkb2VzIG5vdCBza2lwIGEgcm93IGZvciBhbiB1bnRyYWNrZWQgdGFnIHRoYXQgaXRzIGZpcnN0IHJlYWQgbWlzc2VkXCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBUaGUgd3JpdGVyIHB1dHMgdGhlIGxvZyByb3cgYW5kIHRoZSBtYXJrZXIgYXQgdGhlIHNhbWUgdGltZSwgYW5kIHRoZVxuICAgIC8vIG1hcmtlciByZWFkIGlzIGV2ZW50dWFsbHkgY29uc2lzdGVudDogYHJlZnJlc2hgIGNhbiBzZWUgdGhlIHJvdywgdGhlblxuICAgIC8vIGBlbnN1cmVgIHJlYWQgdGhlIG1hcmtlciBmcm9tIGJlZm9yZSBpdC4gTWFya2VkIGFwcGxpZWQgd2hpbGUgdGhlIHRhZ1xuICAgIC8vIHdhcyB1bnRyYWNrZWQsIHRoZSByb3cgd2FzIHNraXBwZWQgYnkgZXZlcnkgcXVlcnkgdGhlIGxvb2tiYWNrIHJldHVybmVkXG4gICAgLy8gaXQgdG8sIGFuZCB0aGUgaW5zdGFuY2Ugc2VydmVkIHRoZSBzdGFsZSBlbnRyeSB1bnRpbCB0aGUgcm9sbGluZyByZS1yZWFkLlxuICAgIGxldCBjbG9jayA9IDFfMDAwXzAwMDtcbiAgICBjb25zdCByZXZhbGlkYXRlZEF0ID0gOTk5XzAwMDtcbiAgICBjb25zdCByb3c6IFJldmFsaWRhdGlvbkxvZ1JvdyA9IHtcbiAgICAgIHNrOiBgJHtTdHJpbmcoY2xvY2spLnBhZFN0YXJ0KDE1LCBcIjBcIil9I3Bvc3RzYCxcbiAgICAgIGF0OiBjbG9jayxcbiAgICAgIHRhZzogXCJwb3N0c1wiLFxuICAgICAgbWFya2VyOiB7IHJldmFsaWRhdGVkQXQgfSxcbiAgICB9O1xuICAgIGNvbnN0IHF1ZXJ5ID0gamVzdC5mbihhc3luYyAoc2luY2U6IG51bWJlcikgPT4gKHtcbiAgICAgIHJvd3M6IFtyb3ddLmZpbHRlcigocikgPT4gci5hdCA+PSBzaW5jZSksXG4gICAgICB0cnVuY2F0ZWQ6IGZhbHNlLFxuICAgIH0pKTtcbiAgICAvLyBBIHJlcGxpY2EgdGhhdCBoYXMgbm90IHNlZW4gdGhlIHdyaXRlIHlldC5cbiAgICBjb25zdCByZWFkID0gamVzdC5mbihhc3luYyAoKSA9PiBuZXcgTWFwPHN0cmluZywgVGFnTWFya2VyPigpKTtcbiAgICBjb25zdCBtYXJrZXJzID0gbmV3IFRyYWNrZWRUYWdNYXJrZXJzKHtcbiAgICAgIG1hcmtlcnM6IHsgcmVhZCB9IGFzIHVua25vd24gYXMgVGFnTWFya2VyVGFibGUsXG4gICAgICBsb2c6IHsgcXVlcnkgfSBhcyB1bmtub3duIGFzIFJldmFsaWRhdGlvbkxvZyxcbiAgICAgIHJlZnJlc2hJbnRlcnZhbE1zOiAxMDAwLFxuICAgICAgY2xvY2s6ICgpID0+IGNsb2NrLFxuICAgICAgcmFuZG9tOiAoKSA9PiAwLFxuICAgIH0pO1xuICAgIC8vIFNvbWV0aGluZyB0cmFja2VkLCBzbyB0aGUgcmVmcmVzaCBxdWVyaWVzIHRoZSBsb2cuXG4gICAgYXdhaXQgbWFya2Vycy5lbnN1cmUoW1wib3RoZXJcIl0pO1xuXG4gICAgY2xvY2sgKz0gMTAwMDtcbiAgICBhd2FpdCBtYXJrZXJzLnJlZnJlc2goKTtcbiAgICBhd2FpdCBtYXJrZXJzLmVuc3VyZShbXCJwb3N0c1wiXSk7XG4gICAgZXhwZWN0KG1hcmtlcnMuZ2V0KFwicG9zdHNcIikpLnRvRXF1YWwoe30pO1xuXG4gICAgY2xvY2sgKz0gMTAwMDtcbiAgICBhd2FpdCBtYXJrZXJzLnJlZnJlc2goKTtcbiAgICBleHBlY3QocXVlcnkpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTtcbiAgICBleHBlY3QobWFya2Vycy5nZXQoXCJwb3N0c1wiKSkudG9FcXVhbCh7IHJldmFsaWRhdGVkQXQgfSk7XG4gICAgLy8gT25seSB0aGUgb25lIHJlYWQgZWFjaCB0YWcncyBmaXJzdCB1c2UgY29zdHMuXG4gICAgZXhwZWN0KHJlYWQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTtcbiAgfSk7XG59KTtcbiJdfQ==
396
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWNhY2hlLXN0b3JlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWRhcHRlci9hd3MtY2FjaGUtc3RvcmUudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNEQUFzRDtBQUN0RCxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBRXRDLDhEQU1rQztBQUNsQyxrREFLNEI7QUFDNUIsdURBaUIyQjtBQUUzQixnRUFBZ0U7QUFDaEUsTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUFnQixFQUFFLElBQWEsRUFBRSxFQUFFO0lBQ3ZELE1BQU0sSUFBSSxHQUFHLElBQWlCLENBQUM7SUFDL0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRSxDQUFDLENBQUM7QUFFRixRQUFRLENBQUMsdUJBQXVCLEVBQUUsR0FBRyxFQUFFO0lBQ3JDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7SUFDeEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLE9BQU8sQ0FBQyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0gsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUNaLE9BQU8sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ3BCLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDBDQUEwQyxFQUFFLEdBQUcsRUFBRTtRQUNsRCxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixHQUFHLFFBQVEsQ0FBQztRQUNwRCxPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxHQUFHLE9BQU8sQ0FBQztR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LElBQUk7WUFDdkIsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUs7WUFDbEIsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7U0FDaEIsQ0FBQyxDQUFDO1FBQ0gscURBQXFEO1FBQ3JELE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFaEMsS0FBSyxJQUFJLElBQUksQ0FBQztRQUNkLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDaEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFekMsS0FBSyxJQUFJLElBQUksQ0FBQztRQUNkLE1BQU0sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDeEQsZ0RBQWdEO1FBQ2hELE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5qZXN0Lm1vY2soXCJAYXdzLXNkay9jbGllbnQtczNcIik7XG5qZXN0Lm1vY2soXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIik7XG5cbmltcG9ydCB7XG4gIEJhdGNoR2V0SXRlbUNvbW1hbmQsXG4gIER5bmFtb0RCQ2xpZW50LFxuICBQdXRJdGVtQ29tbWFuZCxcbiAgUXVlcnlDb21tYW5kLFxuICBVcGRhdGVJdGVtQ29tbWFuZCxcbn0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1keW5hbW9kYlwiO1xuaW1wb3J0IHtcbiAgR2V0T2JqZWN0Q29tbWFuZCxcbiAgTm9TdWNoS2V5LFxuICBQdXRPYmplY3RDb21tYW5kLFxuICBTM0NsaWVudCxcbn0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1zM1wiO1xuaW1wb3J0IHtcbiAgYnVpbGRTM0tleSxcbiAgQ2FjaGVCdWNrZXQsXG4gIGhhc2hlZFRhZyxcbiAgbWFya2VyRm9yLFxuICBtYXJrZXJTdGF0ZSxcbiAgbWFya2VyVXBkYXRlLFxuICBtZXJnZU1hcmtlcnMsXG4gIHJlc29sdmVBd3NDYWNoZUNvbmZpZyxcbiAgUkVWQUxJREFUSU9OX0xPR19NQVhfUEFHRVMsXG4gIFJFVkFMSURBVElPTl9MT0dfVFRMX01TLFxuICBSZXZhbGlkYXRpb25Mb2csXG4gIFJldmFsaWRhdGlvbkxvZ1JvdyxcbiAgVGFnTWFya2VyLFxuICBUYWdNYXJrZXJUYWJsZSxcbiAgVHJhY2tlZFRhZ01hcmtlcnMsXG4gIHVzZUNhY2hlUzNLZXksXG59IGZyb20gXCIuL2F3cy1jYWNoZS1zdG9yZVwiO1xuXG4vKiogVGhlIGlucHV0IGFuIGF1dG9tb2NrZWQgU0RLIGNvbW1hbmQgd2FzIGNvbnN0cnVjdGVkIHdpdGguICovXG5jb25zdCBjb21tYW5kSW5wdXQgPSAoY29tbWFuZDogdW5rbm93biwgdHlwZTogdW5rbm93bikgPT4ge1xuICBjb25zdCBtb2NrID0gdHlwZSBhcyBqZXN0Lk1vY2s7XG4gIHJldHVybiBtb2NrLm1vY2suY2FsbHNbbW9jay5tb2NrLmluc3RhbmNlcy5pbmRleE9mKGNvbW1hbmQpXVswXTtcbn07XG5cbmRlc2NyaWJlKFwicmVzb2x2ZUF3c0NhY2hlQ29uZmlnXCIsICgpID0+IHtcbiAgY29uc3QgZW52ID0gcHJvY2Vzcy5lbnY7XG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIHByb2Nlc3MuZW52ID0geyAuLi5lbnYgfTtcbiAgfSk7XG4gIGFmdGVyQWxsKCgpID0+IHtcbiAgICBwcm9jZXNzLmVudiA9IGVudjtcbiAgfSk7XG5cbiAgaXQoXCJyZWFkcyB0aGUgZW52aXJvbm1lbnQgdGhlIGNvbnN0cnVjdHMgc2V0XCIsICgpID0+IHtcbiAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0NBQ0hFX0JVQ0tFVF9OQU1FID0gXCJidWNrZXRcIjtcbiAgICBwcm9jZXNzLmVudi5DREtfTkVYVEpTX1JFVkFMSURBVElPTl9UQUJMRV9OQU1FID0gXCJ0YWJsZVwiO1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfQlVJTERfSUQgPSBcImJ1aWxkXCI7XG4gICAgcHJvY2Vzcy5lbnYuQVdTX1JFR0lPTiA9IFwiZXUtd2VzdC0xXCI7XG4gICAgZXhwZWN0KHJlc29sdmVBd3NDYWNoZUNvbmZpZygpKS50b0VxdWFsKHtcbiAgICAgIGJ1Y2tldE5hbWU6IFwiYnVja2V0XCIsXG4gICAgICB0YWJsZU5hbWU6IFwidGFibGVcIixcbiAgICAgIGJ1aWxkSWQ6IFwiYnVpbGRcIixcbiAgICAgIHJlZ2lvbjogXCJldS13ZXN0LTFcIixcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJyZXBvcnRzIHdoYXQgaXMgdW5zZXQgYXMgZW1wdHlcIiwgKCkgPT4ge1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0NBQ0hFX0JVQ0tFVF9OQU1FO1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX1JFVkFMSURBVElPTl9UQUJMRV9OQU1FO1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5DREtfTkVYVEpTX0JVSUxEX0lEO1xuICAgIGRlbGV0ZSBwcm9jZXNzLmVudi5BV1NfUkVHSU9OO1xuICAgIGV4cGVjdChyZXNvbHZlQXdzQ2FjaGVDb25maWcoKSkudG9FcXVhbCh7XG4gICAgICBidWNrZXROYW1lOiBcIlwiLFxuICAgICAgdGFibGVOYW1lOiBcIlwiLFxuICAgICAgYnVpbGRJZDogXCJcIixcbiAgICAgIHJlZ2lvbjogXCJ1cy1lYXN0LTFcIixcbiAgICB9KTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJTMyBrZXlzXCIsICgpID0+IHtcbiAgaXQoXCJrZWVwcyB0aGUgaW5jcmVtZW50YWwgY2FjaGUncyB7YnVpbGRJZH0ve2tleX0uanNvbiBjb252ZW50aW9uXCIsICgpID0+IHtcbiAgICBleHBlY3QoYnVpbGRTM0tleShcImJcIiwgXCIvXCIpKS50b0JlKFwiYi9pbmRleC5qc29uXCIpO1xuICAgIGV4cGVjdChidWlsZFMzS2V5KFwiYlwiLCBcIlwiKSkudG9CZShcImIvaW5kZXguanNvblwiKTtcbiAgICBleHBlY3QoYnVpbGRTM0tleShcImJcIiwgXCIvYmxvZy9wb3N0XCIpKS50b0JlKFwiYi9ibG9nL3Bvc3QuanNvblwiKTtcbiAgICBleHBlY3QoYnVpbGRTM0tleShcImJcIiwgXCJhYmMxMjNcIikpLnRvQmUoXCJiL2FiYzEyMy5qc29uXCIpO1xuICB9KTtcblxuICBpdChcInB1dHMgJ3VzZSBjYWNoZScgZW50cmllcyB3aGVyZSBubyBpbmNyZW1lbnRhbCBrZXkgY2FuIGxhbmRcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGtleSA9IHVzZUNhY2hlUzNLZXkoXCJiXCIsIFwiZlwiLnJlcGVhdCg2NCkpO1xuICAgIGV4cGVjdChrZXkpLnRvQmUoYGIvX3VzZS1jYWNoZS8ke1wiZlwiLnJlcGVhdCg2NCl9LmVudHJ5YCk7XG4gICAgLy8gRXZlbiBhIHJvdXRlIHNwZWxsZWQgbGlrZSB0aGUgdXNlLWNhY2hlIGtleSBnZXRzIGAuanNvbmAgYXBwZW5kZWQuXG4gICAgZXhwZWN0KGJ1aWxkUzNLZXkoXCJiXCIsIGAvX3VzZS1jYWNoZS8ke1wiZlwiLnJlcGVhdCg2NCl9LmVudHJ5YCkpLm5vdC50b0JlKFxuICAgICAga2V5LFxuICAgICk7XG4gICAgZXhwZWN0KGtleS5lbmRzV2l0aChcIi5qc29uXCIpKS50b0JlKGZhbHNlKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJ0YWcgbWFya2Vyc1wiLCAoKSA9PiB7XG4gIGl0KFwid3JpdGVzIHdoYXQgbWFya2VyRm9yIGFwcGxpZXMgbG9jYWxseVwiLCAoKSA9PiB7XG4gICAgZm9yIChjb25zdCBkdXJhdGlvbnMgb2YgW3VuZGVmaW5lZCwge30sIHsgZXhwaXJlOiA2MCB9XSkge1xuICAgICAgY29uc3QgdXBkYXRlID0gbWFya2VyVXBkYXRlKDEwMDAsIGR1cmF0aW9ucyk7XG4gICAgICBjb25zdCBsb2NhbCA9IG1hcmtlckZvcigxMDAwLCBkdXJhdGlvbnMpO1xuICAgICAgY29uc3Qgd3JpdHRlbjogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgICB1cGRhdGUuRXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlcyEsXG4gICAgICApKSB7XG4gICAgICAgIHdyaXR0ZW5bbmFtZS5zbGljZSgxKV0gPSBOdW1iZXIodmFsdWUuTik7XG4gICAgICB9XG4gICAgICBleHBlY3Qod3JpdHRlbikudG9FcXVhbChsb2NhbCk7XG4gICAgfVxuICAgIGV4cGVjdChtYXJrZXJGb3IoMTAwMCwgeyBleHBpcmU6IDYwIH0pKS50b0VxdWFsKHtcbiAgICAgIHN0YWxlQXQ6IDEwMDAsXG4gICAgICBleHBpcmVkQXQ6IDYxMDAwLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcImtlZXBzIGFuIGVhcmxpZXIgZXhwaXJlZEF0IGEgcHJvZmlsZSB3aXRoIG5vIGV4cGlyZSBsZWF2ZXNcIiwgKCkgPT4ge1xuICAgIC8vIFRoZSByb3cga2VlcHMgaXQgKGBTRVQgc3RhbGVBdGAgb25seSksIHNvIGFuIGluc3RhbmNlIGxlYXJuaW5nIG9mIHRoZVxuICAgIC8vIHNlY29uZCByZXZhbGlkYXRpb24gZnJvbSB0aGUgbG9nIGhhcyB0byBrZWVwIGl0IHRvby5cbiAgICBjb25zdCBmaXJzdCA9IG1hcmtlckZvcigxMDAwLCB7IGV4cGlyZTogNjAgfSk7XG4gICAgY29uc3Qgc2Vjb25kID0gbWFya2VyRm9yKDIwMDAsIHt9KTtcbiAgICBleHBlY3QobWVyZ2VNYXJrZXJzKGZpcnN0LCBzZWNvbmQpKS50b0VxdWFsKHtcbiAgICAgIHN0YWxlQXQ6IDIwMDAsXG4gICAgICBleHBpcmVkQXQ6IDYxMDAwLFxuICAgIH0pO1xuICAgIGV4cGVjdChtZXJnZU1hcmtlcnMoc2Vjb25kLCBmaXJzdCkpLnRvRXF1YWwoe1xuICAgICAgc3RhbGVBdDogMjAwMCxcbiAgICAgIGV4cGlyZWRBdDogNjEwMDAsXG4gICAgfSk7XG4gICAgLy8gQSBuZXdlciBgZXhwaXJlYCBzdGlsbCByZXBsYWNlcyBpdC5cbiAgICBleHBlY3QobWVyZ2VNYXJrZXJzKGZpcnN0LCBtYXJrZXJGb3IoMjAwMCwgeyBleHBpcmU6IDEgfSkpKS50b0VxdWFsKHtcbiAgICAgIHN0YWxlQXQ6IDIwMDAsXG4gICAgICBleHBpcmVkQXQ6IDMwMDAsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwianVkZ2VzIGFuIGVudHJ5IHRoZSB3YXkgdGhlIGluY3JlbWVudGFsIGNhY2hlIGFsd2F5cyBoYXNcIiwgKCkgPT4ge1xuICAgIC8vIEV4cGlyZWQgb3V0cmlnaHQgYWZ0ZXIgY3JlYXRpb24uXG4gICAgZXhwZWN0KG1hcmtlclN0YXRlKHsgcmV2YWxpZGF0ZWRBdDogMjAgfSwgMTAsIDMwKSkudG9CZShcImV4cGlyZWRcIik7XG4gICAgLy8gUmV2YWxpZGF0ZWQgYmVmb3JlIHRoZSBlbnRyeSB3YXMgY3JlYXRlZDogbm8gZWZmZWN0LlxuICAgIGV4cGVjdChtYXJrZXJTdGF0ZSh7IHJldmFsaWRhdGVkQXQ6IDUgfSwgMTAsIDMwKSkudG9CZShcImZyZXNoXCIpO1xuICAgIC8vIEEgcHJvZmlsZTogc3RhbGUgbm93LCBleHBpcmVkIG9uY2UgYGV4cGlyZWRBdGAgcGFzc2VzLlxuICAgIGV4cGVjdChtYXJrZXJTdGF0ZSh7IHN0YWxlQXQ6IDIwLCBleHBpcmVkQXQ6IDUwIH0sIDEwLCAzMCkpLnRvQmUoXCJzdGFsZVwiKTtcbiAgICBleHBlY3QobWFya2VyU3RhdGUoeyBzdGFsZUF0OiAyMCwgZXhwaXJlZEF0OiA1MCB9LCAxMCwgNjApKS50b0JlKFwiZXhwaXJlZFwiKTtcbiAgICAvLyBgZXhwaXJlOiAwYDogc3RhbGUgYW5kIGV4cGlyZWQgYXQgb25jZS5cbiAgICBleHBlY3QobWFya2VyU3RhdGUoeyBzdGFsZUF0OiAyMCwgZXhwaXJlZEF0OiAyMCB9LCAxMCwgMzApKS50b0JlKFwiZXhwaXJlZFwiKTtcbiAgICBleHBlY3QobWFya2VyU3RhdGUoe30sIDEwLCAzMCkpLnRvQmUoXCJmcmVzaFwiKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJUYWdNYXJrZXJUYWJsZVwiLCAoKSA9PiB7XG4gIGNvbnN0IHNlbmQgPSBqZXN0LmZuKCk7XG4gIGxldCB0YWJsZTogVGFnTWFya2VyVGFibGU7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgc2VuZC5tb2NrUmVzZXQoKTtcbiAgICAoRHluYW1vREJDbGllbnQgYXMgamVzdC5Nb2NrKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHsgc2VuZCB9KSk7XG4gICAgdGFibGUgPSBuZXcgVGFnTWFya2VyVGFibGUobmV3IER5bmFtb0RCQ2xpZW50KHt9KSwgXCJ0YmxcIiwgXCJidWlsZFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJ3cml0ZXMgdGhlIG1hcmtlciByb3cgdW5kZXIgdGhlIGJ1aWxkXCIsIGFzeW5jICgpID0+IHtcbiAgICBzZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHt9KTtcbiAgICBhd2FpdCB0YWJsZS53cml0ZShcInBvc3RzXCIsIDEwMDAsIHsgZXhwaXJlOiAxIH0pO1xuICAgIGNvbnN0IGlucHV0ID0gY29tbWFuZElucHV0KHNlbmQubW9jay5jYWxsc1swXVswXSwgVXBkYXRlSXRlbUNvbW1hbmQpO1xuICAgIGV4cGVjdChpbnB1dCkudG9FcXVhbCh7XG4gICAgICBUYWJsZU5hbWU6IFwidGJsXCIsXG4gICAgICBLZXk6IHsgcGs6IHsgUzogXCJidWlsZFwiIH0sIHNrOiB7IFM6IFwicG9zdHNcIiB9IH0sXG4gICAgICBVcGRhdGVFeHByZXNzaW9uOiBcIlNFVCBzdGFsZUF0ID0gOnN0YWxlQXQsIGV4cGlyZWRBdCA9IDpleHBpcmVkQXRcIixcbiAgICAgIEV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXM6IHtcbiAgICAgICAgXCI6c3RhbGVBdFwiOiB7IE46IFwiMTAwMFwiIH0sXG4gICAgICAgIFwiOmV4cGlyZWRBdFwiOiB7IE46IFwiMjAwMFwiIH0sXG4gICAgICB9LFxuICAgICAgUmV0dXJuVmFsdWVzOiBcIkFMTF9ORVdcIixcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJyZWFkcyBtYXJrZXJzIGluIGJhdGNoZXMgb2YgMTAwIGFuZCBwYXJzZXMgdGhlbVwiLCBhc3luYyAoKSA9PiB7XG4gICAgc2VuZC5tb2NrSW1wbGVtZW50YXRpb24oKGNvbW1hbmQ6IHVua25vd24pID0+IHtcbiAgICAgIGNvbnN0IHsgUmVxdWVzdEl0ZW1zIH0gPSBjb21tYW5kSW5wdXQoY29tbWFuZCwgQmF0Y2hHZXRJdGVtQ29tbWFuZCk7XG4gICAgICBjb25zdCBrZXlzID0gUmVxdWVzdEl0ZW1zLnRibC5LZXlzIGFzIHsgc2s6IHsgUzogc3RyaW5nIH0gfVtdO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh7XG4gICAgICAgIFJlc3BvbnNlczoge1xuICAgICAgICAgIHRibDoga2V5c1xuICAgICAgICAgICAgLmZpbHRlcigoeyBzayB9KSA9PiBzay5TLmVuZHNXaXRoKFwiMFwiKSlcbiAgICAgICAgICAgIC5tYXAoKHsgc2sgfSkgPT4gKHsgc2ssIHJldmFsaWRhdGVkQXQ6IHsgTjogXCI3XCIgfSB9KSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCB0YWdzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTUwIH0sIChfLCBpKSA9PiBgdCR7aX1gKTtcbiAgICBjb25zdCBtYXJrZXJzID0gYXdhaXQgdGFibGUucmVhZChbLi4udGFncywgXCJ0MFwiXSk7XG4gICAgZXhwZWN0KHNlbmQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTtcbiAgICBleHBlY3QobWFya2Vycy5zaXplKS50b0JlKDE1KTtcbiAgICBleHBlY3QobWFya2Vycy5nZXQoXCJ0MTBcIikpLnRvRXF1YWwoe1xuICAgICAgcmV2YWxpZGF0ZWRBdDogNyxcbiAgICAgIHN0YWxlQXQ6IHVuZGVmaW5lZCxcbiAgICAgIGV4cGlyZWRBdDogdW5kZWZpbmVkLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcImtleXMgYSB0YWcgcGFzdCB0aGUgc29ydCBrZXkgbGltaXQgYnkgaXRzIGhhc2gsIGFuZCByZWFkcyBpdCBiYWNrIGFzIHRoZSB0YWdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIC8vIGByZXZhbGlkYXRlUGF0aGAgb24gYSBsb25nIHBhdGg6IGFuIGltcGxpY2l0IHRhZyBpcyBhcyBsb25nIGFzIHRoZSBwYXRoLlxuICAgIGNvbnN0IHRhZyA9IGBfTl9UXy8ke1wicFwiLnJlcGVhdCgxMTAwKX1gO1xuICAgIHNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgIGF3YWl0IHRhYmxlLndyaXRlKHRhZywgMTAwMCwgdW5kZWZpbmVkKTtcbiAgICBjb25zdCB3cml0dGVuID0gY29tbWFuZElucHV0KHNlbmQubW9jay5jYWxsc1swXVswXSwgVXBkYXRlSXRlbUNvbW1hbmQpO1xuICAgIGV4cGVjdCh3cml0dGVuLktleS5zay5TKS50b0JlKGhhc2hlZFRhZyh0YWcpKTtcbiAgICBleHBlY3QoaGFzaGVkVGFnKHRhZykpLnRvTWF0Y2goL14jWzAtOWEtZl17NjR9JC8pO1xuXG4gICAgc2VuZC5tb2NrUmVzZXQoKTtcbiAgICBzZW5kLm1vY2tJbXBsZW1lbnRhdGlvbigoY29tbWFuZDogdW5rbm93bikgPT4ge1xuICAgICAgY29uc3QgeyBSZXF1ZXN0SXRlbXMgfSA9IGNvbW1hbmRJbnB1dChjb21tYW5kLCBCYXRjaEdldEl0ZW1Db21tYW5kKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICBSZXNwb25zZXM6IHtcbiAgICAgICAgICB0Ymw6IFJlcXVlc3RJdGVtcy50YmwuS2V5cy5tYXAoKHsgc2sgfTogeyBzazogdW5rbm93biB9KSA9PiAoe1xuICAgICAgICAgICAgc2ssXG4gICAgICAgICAgICByZXZhbGlkYXRlZEF0OiB7IE46IFwiN1wiIH0sXG4gICAgICAgICAgfSkpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgbWFya2VycyA9IGF3YWl0IHRhYmxlLnJlYWQoW3RhZywgXCJzaG9ydFwiXSk7XG4gICAgZXhwZWN0KFsuLi5tYXJrZXJzLmtleXMoKV0uc29ydCgpKS50b0VxdWFsKFtcInNob3J0XCIsIHRhZ10uc29ydCgpKTtcbiAgfSk7XG5cbiAgLy8gQSByZWFkLWJhY2sgYWZ0ZXIgdGhlIHdyaXRlIGlzIGV2ZW50dWFsbHkgY29uc2lzdGVudCwgc28gaXQgY2FuIHJldHVyblxuICAvLyB0aGUgbWFya2VyIGZyb20gYmVmb3JlIGl0OiB0aGUgd3JpdGVyIHRyYWNrcyB3aGF0IHRoZSB3cml0ZSByZXR1cm5lZC5cbiAgaXQoXCJyZXR1cm5zIHRoZSByb3cgYXMgdGhlIHdyaXRlIGxlZnQgaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIHNlbmQubW9ja1Jlc29sdmVkVmFsdWVPbmNlKHtcbiAgICAgIEF0dHJpYnV0ZXM6IHtcbiAgICAgICAgc2s6IHsgUzogXCJwb3N0c1wiIH0sXG4gICAgICAgIHJldmFsaWRhdGVkQXQ6IHsgTjogXCI1MDAwXCIgfSxcbiAgICAgICAgc3RhbGVBdDogeyBOOiBcIjEwXCIgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZXhwZWN0KGF3YWl0IHRhYmxlLndyaXRlKFwicG9zdHNcIiwgNTAwMCwgdW5kZWZpbmVkKSkudG9FcXVhbCh7XG4gICAgICByZXZhbGlkYXRlZEF0OiA1MDAwLFxuICAgICAgc3RhbGVBdDogMTAsXG4gICAgICBleHBpcmVkQXQ6IHVuZGVmaW5lZCxcbiAgICB9KTtcbiAgICBzZW5kLm1vY2tSZXNvbHZlZFZhbHVlT25jZSh7fSk7XG4gICAgZXhwZWN0KGF3YWl0IHRhYmxlLndyaXRlKFwicG9zdHNcIiwgNjAwMCwgdW5kZWZpbmVkKSkudG9CZVVuZGVmaW5lZCgpO1xuICB9KTtcblxuICBpdChcImFza3MgYWdhaW4gZm9yIHVucHJvY2Vzc2VkIGtleXMsIGFuZCBnaXZlcyB1cCBhZnRlciB0aHJlZSB0cmllc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdW5wcm9jZXNzZWQgPSB7XG4gICAgICBVbnByb2Nlc3NlZEtleXM6IHtcbiAgICAgICAgdGJsOiB7IEtleXM6IFt7IHBrOiB7IFM6IFwiYnVpbGRcIiB9LCBzazogeyBTOiBcImFcIiB9IH1dIH0sXG4gICAgICB9LFxuICAgIH07XG4gICAgc2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2UodW5wcm9jZXNzZWQpLm1vY2tSZXNvbHZlZFZhbHVlT25jZSh7XG4gICAgICBSZXNwb25zZXM6IHsgdGJsOiBbeyBzazogeyBTOiBcImFcIiB9LCBzdGFsZUF0OiB7IE46IFwiM1wiIH0gfV0gfSxcbiAgICB9KTtcbiAgICBleHBlY3QoKGF3YWl0IHRhYmxlLnJlYWQoW1wiYVwiXSkpLmdldChcImFcIik/LnN0YWxlQXQpLnRvQmUoMyk7XG5cbiAgICBzZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHVucHJvY2Vzc2VkKTtcbiAgICBhd2FpdCBleHBlY3QodGFibGUucmVhZChbXCJhXCJdKSkucmVqZWN0cy50b1Rocm93KC91bnJlYWQgYWZ0ZXIgcmV0cnlpbmcvKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJSZXZhbGlkYXRpb25Mb2dcIiwgKCkgPT4ge1xuICBjb25zdCBzZW5kID0gamVzdC5mbigpO1xuICBsZXQgbG9nOiBSZXZhbGlkYXRpb25Mb2c7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgc2VuZC5tb2NrUmVzZXQoKTtcbiAgICAoRHluYW1vREJDbGllbnQgYXMgamVzdC5Nb2NrKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHsgc2VuZCB9KSk7XG4gICAgbG9nID0gbmV3IFJldmFsaWRhdGlvbkxvZyhuZXcgRHluYW1vREJDbGllbnQoe30pLCBcInRibFwiLCBcImJ1aWxkXCIpO1xuICB9KTtcblxuICBpdChcInB1dHMgb25lIHJvdyBwZXIgcmV2YWxpZGF0aW9uIHVuZGVyIHRoZSBidWlsZCdzIGxvZywgd2l0aCBhIFRUTFwiLCBhc3luYyAoKSA9PiB7XG4gICAgc2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgY29uc3QgYXQgPSAxXzcyN18wMDBfMDAwXzEyMztcbiAgICBhd2FpdCBsb2cucHV0KFwidXNlciM0MlwiLCBhdCwgeyBzdGFsZUF0OiA1LCBleHBpcmVkQXQ6IDYgfSk7XG4gICAgZXhwZWN0KGNvbW1hbmRJbnB1dChzZW5kLm1vY2suY2FsbHNbMF1bMF0sIFB1dEl0ZW1Db21tYW5kKSkudG9FcXVhbCh7XG4gICAgICBUYWJsZU5hbWU6IFwidGJsXCIsXG4gICAgICBJdGVtOiB7XG4gICAgICAgIHBrOiB7IFM6IFwiYnVpbGQjbG9nXCIgfSxcbiAgICAgICAgc2s6IHsgUzogXCIwMDE3MjcwMDAwMDAxMjMjdXNlciM0MlwiIH0sXG4gICAgICAgIHR0bDogeyBOOiBTdHJpbmcoTWF0aC5jZWlsKChhdCArIFJFVkFMSURBVElPTl9MT0dfVFRMX01TKSAvIDEwMDApKSB9LFxuICAgICAgICBzdGFsZUF0OiB7IE46IFwiNVwiIH0sXG4gICAgICAgIGV4cGlyZWRBdDogeyBOOiBcIjZcIiB9LFxuICAgICAgfSxcbiAgICAgIENvbmRpdGlvbkV4cHJlc3Npb246IFwiYXR0cmlidXRlX25vdF9leGlzdHMoc2spXCIsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwibW92ZXMgYSByb3cgdG8gdGhlIG5leHQgbWlsbGlzZWNvbmQgcmF0aGVyIHRoYW4gb3ZlcndyaXRlIGFub3RoZXIgcmV2YWxpZGF0aW9uXCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBgdXBkYXRlVGFnKCd4JylgIGFuZCBgcmV2YWxpZGF0ZVRhZygneCcsICdtYXgnKWAgaW4gb25lIG1pbGxpc2Vjb25kLlxuICAgIGNvbnN0IHRha2VuID0gT2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoXCJ0YWtlblwiKSwge1xuICAgICAgbmFtZTogXCJDb25kaXRpb25hbENoZWNrRmFpbGVkRXhjZXB0aW9uXCIsXG4gICAgfSk7XG4gICAgc2VuZC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UodGFrZW4pLm1vY2tSZXNvbHZlZFZhbHVlT25jZSh7fSk7XG4gICAgYXdhaXQgbG9nLnB1dChcInhcIiwgMTAwMC41LCB7IHJldmFsaWRhdGVkQXQ6IDUgfSk7XG4gICAgZXhwZWN0KFxuICAgICAgc2VuZC5tb2NrLmNhbGxzLm1hcChcbiAgICAgICAgKFtjb21tYW5kXSkgPT4gY29tbWFuZElucHV0KGNvbW1hbmQsIFB1dEl0ZW1Db21tYW5kKS5JdGVtLnNrLlMsXG4gICAgICApLFxuICAgICkudG9FcXVhbChbXCIwMDAwMDAwMDAwMDEwMDAjeFwiLCBcIjAwMDAwMDAwMDAwMTAwMSN4XCJdKTtcbiAgfSk7XG5cbiAgaXQoXCJnaXZlcyB1cCBhZnRlciBhIGJvdW5kZWQgbnVtYmVyIG9mIGNvbGxpc2lvbnMsIGFuZCBvbiBvdGhlciBlcnJvcnMgYXQgb25jZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdGFrZW4gPSBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihcInRha2VuXCIpLCB7XG4gICAgICBuYW1lOiBcIkNvbmRpdGlvbmFsQ2hlY2tGYWlsZWRFeGNlcHRpb25cIixcbiAgICB9KTtcbiAgICBzZW5kLm1vY2tSZWplY3RlZFZhbHVlKHRha2VuKTtcbiAgICBhd2FpdCBleHBlY3QobG9nLnB1dChcInhcIiwgMTAwMCwge30pKS5yZWplY3RzLnRvQmUodGFrZW4pO1xuICAgIGV4cGVjdChzZW5kKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoNSk7XG5cbiAgICBzZW5kLm1vY2tSZXNldCgpO1xuICAgIGNvbnN0IHRocm90dGxlZCA9IG5ldyBFcnJvcihcInRocm90dGxlZFwiKTtcbiAgICBzZW5kLm1vY2tSZWplY3RlZFZhbHVlKHRocm90dGxlZCk7XG4gICAgYXdhaXQgZXhwZWN0KGxvZy5wdXQoXCJ4XCIsIDEwMDAsIHt9KSkucmVqZWN0cy50b0JlKHRocm90dGxlZCk7XG4gICAgZXhwZWN0KHNlbmQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgfSk7XG5cbiAgaXQoXCJxdWVyaWVzIGZyb20gYSB6ZXJvLXBhZGRlZCBjdXJzb3IgYW5kIHBhcnNlcyB0aGUgdGFnIGFmdGVyIGl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBzZW5kXG4gICAgICAubW9ja1Jlc29sdmVkVmFsdWVPbmNlKHtcbiAgICAgICAgSXRlbXM6IFtcbiAgICAgICAgICB7IHNrOiB7IFM6IFwiMDAwMDAwMDAwMDAxMDAwI2FcIiB9LCByZXZhbGlkYXRlZEF0OiB7IE46IFwiN1wiIH0gfSxcbiAgICAgICAgICB7IHNrOiB7IFM6IFwibm90IGEgbG9nIHJvd1wiIH0gfSxcbiAgICAgICAgXSxcbiAgICAgICAgTGFzdEV2YWx1YXRlZEtleTogeyBwazogeyBTOiBcImJ1aWxkI2xvZ1wiIH0sIHNrOiB7IFM6IFwieFwiIH0gfSxcbiAgICAgIH0pXG4gICAgICAubW9ja1Jlc29sdmVkVmFsdWVPbmNlKHtcbiAgICAgICAgSXRlbXM6IFt7IHNrOiB7IFM6IFwiMDAwMDAwMDAwMDAyMDAwI3VzZXIjNDJcIiB9LCBzdGFsZUF0OiB7IE46IFwiOFwiIH0gfV0sXG4gICAgICB9KTtcbiAgICBjb25zdCB7IHJvd3MsIHRydW5jYXRlZCB9ID0gYXdhaXQgbG9nLnF1ZXJ5KDk5OS41KTtcblxuICAgIGNvbnN0IGZpcnN0ID0gY29tbWFuZElucHV0KHNlbmQubW9jay5jYWxsc1swXVswXSwgUXVlcnlDb21tYW5kKTtcbiAgICBleHBlY3QoZmlyc3QpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgVGFibGVOYW1lOiBcInRibFwiLFxuICAgICAgS2V5Q29uZGl0aW9uRXhwcmVzc2lvbjogXCJwayA9IDpwayBBTkQgc2sgPj0gOnNpbmNlXCIsXG4gICAgICBFeHByZXNzaW9uQXR0cmlidXRlVmFsdWVzOiB7XG4gICAgICAgIFwiOnBrXCI6IHsgUzogXCJidWlsZCNsb2dcIiB9LFxuICAgICAgICBcIjpzaW5jZVwiOiB7IFM6IFwiMDAwMDAwMDAwMDAwOTk5XCIgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgZXhwZWN0KFxuICAgICAgY29tbWFuZElucHV0KHNlbmQubW9jay5jYWxsc1sxXVswXSwgUXVlcnlDb21tYW5kKS5FeGNsdXNpdmVTdGFydEtleSxcbiAgICApLnRvRXF1YWwoeyBwazogeyBTOiBcImJ1aWxkI2xvZ1wiIH0sIHNrOiB7IFM6IFwieFwiIH0gfSk7XG4gICAgZXhwZWN0KHRydW5jYXRlZCkudG9CZShmYWxzZSk7XG4gICAgZXhwZWN0KHJvd3MpLnRvRXF1YWwoW1xuICAgICAge1xuICAgICAgICBzazogXCIwMDAwMDAwMDAwMDEwMDAjYVwiLFxuICAgICAgICBhdDogMTAwMCxcbiAgICAgICAgdGFnOiBcImFcIixcbiAgICAgICAgbWFya2VyOiB7IHJldmFsaWRhdGVkQXQ6IDcsIHN0YWxlQXQ6IHVuZGVmaW5lZCwgZXhwaXJlZEF0OiB1bmRlZmluZWQgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNrOiBcIjAwMDAwMDAwMDAwMjAwMCN1c2VyIzQyXCIsXG4gICAgICAgIGF0OiAyMDAwLFxuICAgICAgICB0YWc6IFwidXNlciM0MlwiLFxuICAgICAgICBtYXJrZXI6IHsgcmV2YWxpZGF0ZWRBdDogdW5kZWZpbmVkLCBzdGFsZUF0OiA4LCBleHBpcmVkQXQ6IHVuZGVmaW5lZCB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoXCJoYXNoZXMgYSB0YWcgdG9vIGxvbmcgZm9yIHRoZSBzb3J0IGtleSwgY2FycnlpbmcgaXQgaW4gbG9uZ1RhZ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdGFnID0gYF9OX1RfLyR7XCJwXCIucmVwZWF0KDExMDApfWA7XG4gICAgc2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7fSk7XG4gICAgYXdhaXQgbG9nLnB1dCh0YWcsIDEwMDAsIHsgcmV2YWxpZGF0ZWRBdDogNSB9KTtcbiAgICBjb25zdCB7IEl0ZW0gfSA9IGNvbW1hbmRJbnB1dChzZW5kLm1vY2suY2FsbHNbMF1bMF0sIFB1dEl0ZW1Db21tYW5kKTtcbiAgICBleHBlY3QoSXRlbS5zay5TKS50b0JlKGAwMDAwMDAwMDAwMDEwMDAjJHtoYXNoZWRUYWcodGFnKX1gKTtcbiAgICBleHBlY3QoSXRlbS5sb25nVGFnKS50b0VxdWFsKHsgUzogdGFnIH0pO1xuXG4gICAgc2VuZC5tb2NrUmVzZXQoKTtcbiAgICBzZW5kLm1vY2tSZXNvbHZlZFZhbHVlT25jZSh7IEl0ZW1zOiBbeyAuLi5JdGVtIH1dIH0pO1xuICAgIGNvbnN0IHsgcm93cyB9ID0gYXdhaXQgbG9nLnF1ZXJ5KDApO1xuICAgIGV4cGVjdChyb3dzLm1hcCgocm93KSA9PiByb3cudGFnKSkudG9FcXVhbChbdGFnXSk7XG4gIH0pO1xuXG4gIGl0KFwic3RvcHMgYWZ0ZXIgaXRzIHBhZ2UgYm91bmQgYW5kIHNheXMgc29cIiwgYXN5bmMgKCkgPT4ge1xuICAgIHNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgSXRlbXM6IFtdLFxuICAgICAgTGFzdEV2YWx1YXRlZEtleTogeyBwazogeyBTOiBcImJ1aWxkI2xvZ1wiIH0sIHNrOiB7IFM6IFwieFwiIH0gfSxcbiAgICB9KTtcbiAgICBleHBlY3QoKGF3YWl0IGxvZy5xdWVyeSgwKSkudHJ1bmNhdGVkKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChzZW5kKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoUkVWQUxJREFUSU9OX0xPR19NQVhfUEFHRVMpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIkNhY2hlQnVja2V0XCIsICgpID0+IHtcbiAgY29uc3Qgc2VuZCA9IGplc3QuZm4oKTtcbiAgbGV0IGJ1Y2tldDogQ2FjaGVCdWNrZXQ7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgc2VuZC5tb2NrUmVzZXQoKTtcbiAgICAoUzNDbGllbnQgYXMgamVzdC5Nb2NrKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gKHsgc2VuZCB9KSk7XG4gICAgYnVja2V0ID0gbmV3IENhY2hlQnVja2V0KG5ldyBTM0NsaWVudCh7fSksIFwiYmt0XCIpO1xuICB9KTtcblxuICBpdChcInJlYWRzIGFuIG9iamVjdCBhcyB0ZXh0XCIsIGFzeW5jICgpID0+IHtcbiAgICBzZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgIEJvZHk6IHsgdHJhbnNmb3JtVG9TdHJpbmc6IGplc3QuZm4oKS5tb2NrUmVzb2x2ZWRWYWx1ZShcInt9XCIpIH0sXG4gICAgICBDb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgfSk7XG4gICAgZXhwZWN0KGF3YWl0IGJ1Y2tldC5nZXQoXCJrXCIpKS50b0JlKFwie31cIik7XG4gICAgZXhwZWN0KGNvbW1hbmRJbnB1dChzZW5kLm1vY2suY2FsbHNbMF1bMF0sIEdldE9iamVjdENvbW1hbmQpKS50b0VxdWFsKHtcbiAgICAgIEJ1Y2tldDogXCJia3RcIixcbiAgICAgIEtleTogXCJrXCIsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwiYW5zd2VycyBhIG1pc3Npbmcgb2JqZWN0IG9yIGJvZHkgd2l0aCB1bmRlZmluZWQsIGFuZCB0aHJvd3MgdGhlIHJlc3RcIiwgYXN5bmMgKCkgPT4ge1xuICAgIHNlbmQubW9ja1JlamVjdGVkVmFsdWVPbmNlKFxuICAgICAgbmV3IE5vU3VjaEtleSh7IG1lc3NhZ2U6IFwibWlzc2luZ1wiLCAkbWV0YWRhdGE6IHt9IH0pLFxuICAgICk7XG4gICAgZXhwZWN0KGF3YWl0IGJ1Y2tldC5nZXQoXCJrXCIpKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgc2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZU9uY2UoeyBCb2R5OiBudWxsIH0pO1xuICAgIGV4cGVjdChhd2FpdCBidWNrZXQuZ2V0KFwia1wiKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIHNlbmQubW9ja1JlamVjdGVkVmFsdWVPbmNlKG5ldyBFcnJvcihcIkFjY2Vzc0RlbmllZFwiKSk7XG4gICAgYXdhaXQgZXhwZWN0KGJ1Y2tldC5nZXQoXCJrXCIpKS5yZWplY3RzLnRvVGhyb3coXCJBY2Nlc3NEZW5pZWRcIik7XG4gIH0pO1xuXG4gIGl0KFwid3JpdGVzIEpTT05cIiwgYXN5bmMgKCkgPT4ge1xuICAgIHNlbmQubW9ja1Jlc29sdmVkVmFsdWUoe30pO1xuICAgIGF3YWl0IGJ1Y2tldC5wdXRKc29uKFwia1wiLCBcInt9XCIpO1xuICAgIGV4cGVjdChjb21tYW5kSW5wdXQoc2VuZC5tb2NrLmNhbGxzWzBdWzBdLCBQdXRPYmplY3RDb21tYW5kKSkudG9FcXVhbCh7XG4gICAgICBCdWNrZXQ6IFwiYmt0XCIsXG4gICAgICBLZXk6IFwia1wiLFxuICAgICAgQm9keTogXCJ7fVwiLFxuICAgICAgQ29udGVudFR5cGU6IFwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOFwiLFxuICAgIH0pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIlRyYWNrZWRUYWdNYXJrZXJzXCIsICgpID0+IHtcbiAgaXQoXCJkb2VzIG5vdCBza2lwIGEgcm93IGZvciBhbiB1bnRyYWNrZWQgdGFnIHRoYXQgaXRzIGZpcnN0IHJlYWQgbWlzc2VkXCIsIGFzeW5jICgpID0+IHtcbiAgICAvLyBUaGUgd3JpdGVyIHB1dHMgdGhlIGxvZyByb3cgYW5kIHRoZSBtYXJrZXIgYXQgdGhlIHNhbWUgdGltZSwgYW5kIHRoZVxuICAgIC8vIG1hcmtlciByZWFkIGlzIGV2ZW50dWFsbHkgY29uc2lzdGVudDogYHJlZnJlc2hgIGNhbiBzZWUgdGhlIHJvdywgdGhlblxuICAgIC8vIGBlbnN1cmVgIHJlYWQgdGhlIG1hcmtlciBmcm9tIGJlZm9yZSBpdC4gTWFya2VkIGFwcGxpZWQgd2hpbGUgdGhlIHRhZ1xuICAgIC8vIHdhcyB1bnRyYWNrZWQsIHRoZSByb3cgd2FzIHNraXBwZWQgYnkgZXZlcnkgcXVlcnkgdGhlIGxvb2tiYWNrIHJldHVybmVkXG4gICAgLy8gaXQgdG8sIGFuZCB0aGUgaW5zdGFuY2Ugc2VydmVkIHRoZSBzdGFsZSBlbnRyeSB1bnRpbCB0aGUgcm9sbGluZyByZS1yZWFkLlxuICAgIGxldCBjbG9jayA9IDFfMDAwXzAwMDtcbiAgICBjb25zdCByZXZhbGlkYXRlZEF0ID0gOTk5XzAwMDtcbiAgICBjb25zdCByb3c6IFJldmFsaWRhdGlvbkxvZ1JvdyA9IHtcbiAgICAgIHNrOiBgJHtTdHJpbmcoY2xvY2spLnBhZFN0YXJ0KDE1LCBcIjBcIil9I3Bvc3RzYCxcbiAgICAgIGF0OiBjbG9jayxcbiAgICAgIHRhZzogXCJwb3N0c1wiLFxuICAgICAgbWFya2VyOiB7IHJldmFsaWRhdGVkQXQgfSxcbiAgICB9O1xuICAgIGNvbnN0IHF1ZXJ5ID0gamVzdC5mbihhc3luYyAoc2luY2U6IG51bWJlcikgPT4gKHtcbiAgICAgIHJvd3M6IFtyb3ddLmZpbHRlcigocikgPT4gci5hdCA+PSBzaW5jZSksXG4gICAgICB0cnVuY2F0ZWQ6IGZhbHNlLFxuICAgIH0pKTtcbiAgICAvLyBBIHJlcGxpY2EgdGhhdCBoYXMgbm90IHNlZW4gdGhlIHdyaXRlIHlldC5cbiAgICBjb25zdCByZWFkID0gamVzdC5mbihhc3luYyAoKSA9PiBuZXcgTWFwPHN0cmluZywgVGFnTWFya2VyPigpKTtcbiAgICBjb25zdCBtYXJrZXJzID0gbmV3IFRyYWNrZWRUYWdNYXJrZXJzKHtcbiAgICAgIG1hcmtlcnM6IHsgcmVhZCB9IGFzIHVua25vd24gYXMgVGFnTWFya2VyVGFibGUsXG4gICAgICBsb2c6IHsgcXVlcnkgfSBhcyB1bmtub3duIGFzIFJldmFsaWRhdGlvbkxvZyxcbiAgICAgIHJlZnJlc2hJbnRlcnZhbE1zOiAxMDAwLFxuICAgICAgY2xvY2s6ICgpID0+IGNsb2NrLFxuICAgICAgcmFuZG9tOiAoKSA9PiAwLFxuICAgIH0pO1xuICAgIC8vIFNvbWV0aGluZyB0cmFja2VkLCBzbyB0aGUgcmVmcmVzaCBxdWVyaWVzIHRoZSBsb2cuXG4gICAgYXdhaXQgbWFya2Vycy5lbnN1cmUoW1wib3RoZXJcIl0pO1xuXG4gICAgY2xvY2sgKz0gMTAwMDtcbiAgICBhd2FpdCBtYXJrZXJzLnJlZnJlc2goKTtcbiAgICBhd2FpdCBtYXJrZXJzLmVuc3VyZShbXCJwb3N0c1wiXSk7XG4gICAgZXhwZWN0KG1hcmtlcnMuZ2V0KFwicG9zdHNcIikpLnRvRXF1YWwoe30pO1xuXG4gICAgY2xvY2sgKz0gMTAwMDtcbiAgICBhd2FpdCBtYXJrZXJzLnJlZnJlc2goKTtcbiAgICBleHBlY3QocXVlcnkpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTtcbiAgICBleHBlY3QobWFya2Vycy5nZXQoXCJwb3N0c1wiKSkudG9FcXVhbCh7IHJldmFsaWRhdGVkQXQgfSk7XG4gICAgLy8gT25seSB0aGUgb25lIHJlYWQgZWFjaCB0YWcncyBmaXJzdCB1c2UgY29zdHMuXG4gICAgZXhwZWN0KHJlYWQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTtcbiAgfSk7XG59KTtcbiJdfQ==