cdk-nextjs 0.7.5 → 0.7.7

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 (69) hide show
  1. package/.jsii +38 -38
  2. package/.jsii.tabl.json +1 -1
  3. package/README.md +12 -3
  4. package/assets/lambdas/post-deploy/post-deploy.lambda/index.js +31 -13
  5. package/docs/adapter-runtime.md +1 -1
  6. package/docs/caching-guide.md +11 -1
  7. package/docs/harness-coverage.md +11 -9
  8. package/lib/adapter/adapter.mjs +220 -149
  9. package/lib/adapter/aws-cache-store.d.ts +242 -7
  10. package/lib/adapter/aws-cache-store.js +520 -54
  11. package/lib/adapter/aws-cache-store.test.js +710 -3
  12. package/lib/adapter/build-outputs.js +23 -1
  13. package/lib/adapter/build-outputs.test.js +18 -1
  14. package/lib/adapter/cache-handler.d.ts +4 -3
  15. package/lib/adapter/cache-handler.js +1 -1
  16. package/lib/adapter/cache-handler.mjs +552 -91
  17. package/lib/adapter/cache-handler.test.js +31 -1
  18. package/lib/adapter/cache-utils.d.ts +68 -2
  19. package/lib/adapter/cache-utils.js +108 -2
  20. package/lib/adapter/cache-utils.test.js +45 -1
  21. package/lib/adapter/init-cache.d.ts +1 -1
  22. package/lib/adapter/init-cache.js +60 -37
  23. package/lib/adapter/init-cache.test.js +55 -2
  24. package/lib/adapter/local-file-cache-handler.d.ts +2 -2
  25. package/lib/adapter/local-file-cache-handler.js +4 -5
  26. package/lib/adapter/s3-cache-handler.d.ts +23 -7
  27. package/lib/adapter/s3-cache-handler.js +63 -27
  28. package/lib/adapter/s3-cache-handler.test.js +168 -1
  29. package/lib/adapter/use-cache-common.d.ts +53 -1
  30. package/lib/adapter/use-cache-common.js +121 -14
  31. package/lib/adapter/use-cache-common.test.js +138 -1
  32. package/lib/adapter/use-cache-default-handler.js +36 -6
  33. package/lib/adapter/use-cache-default-handler.mjs +557 -51
  34. package/lib/adapter/use-cache-handlers.test.js +247 -7
  35. package/lib/adapter/use-cache-remote-handler.js +10 -9
  36. package/lib/adapter/use-cache-remote-handler.mjs +597 -101
  37. package/lib/lambdas/post-deploy/prune-revalidation-table.d.ts +2 -1
  38. package/lib/lambdas/post-deploy/prune-revalidation-table.js +35 -13
  39. package/lib/lambdas/post-deploy/prune-revalidation-table.test.js +19 -1
  40. package/lib/nextjs-api.js +1 -1
  41. package/lib/nextjs-build/nextjs-build.d.ts +0 -7
  42. package/lib/nextjs-build/nextjs-build.js +4 -11
  43. package/lib/nextjs-build/nextjs-build.test.js +4 -3
  44. package/lib/nextjs-cache.js +1 -1
  45. package/lib/nextjs-compute/nextjs-containers.js +1 -1
  46. package/lib/nextjs-compute/nextjs-functions.js +1 -1
  47. package/lib/nextjs-distribution.js +1 -1
  48. package/lib/nextjs-post-deploy.js +1 -1
  49. package/lib/nextjs-static-assets.js +1 -1
  50. package/lib/root-constructs/nextjs-base-construct.js +1 -1
  51. package/lib/root-constructs/nextjs-global-containers.js +1 -1
  52. package/lib/root-constructs/nextjs-global-functions.js +1 -1
  53. package/lib/root-constructs/nextjs-regional-containers.js +1 -1
  54. package/lib/root-constructs/nextjs-regional-functions.js +1 -1
  55. package/lib/runtime/core.js +18 -4
  56. package/lib/runtime/core.test.js +17 -1
  57. package/lib/runtime/image.d.ts +19 -0
  58. package/lib/runtime/image.js +28 -2
  59. package/lib/runtime/image.test.js +43 -1
  60. package/lib/runtime/lambda.mjs +30 -6
  61. package/lib/runtime/server.mjs +30 -6
  62. package/lib/runtime/tag-manifest.d.ts +15 -0
  63. package/lib/runtime/tag-manifest.js +24 -0
  64. package/lib/runtime/tag-manifest.test.d.ts +1 -0
  65. package/lib/runtime/tag-manifest.test.js +21 -0
  66. package/lib/utils/deployment-build-id.d.ts +11 -0
  67. package/lib/utils/deployment-build-id.js +15 -0
  68. package/package.json +3 -3
  69. package/scripts/e2e-harness/README.md +1 -1
@@ -2,8 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  /* eslint-disable import/no-extraneous-dependencies */
4
4
  jest.mock("@aws-sdk/client-dynamodb");
5
+ const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
5
6
  const aws_cache_store_1 = require("./aws-cache-store");
6
7
  const use_cache_common_1 = require("./use-cache-common");
8
+ const tag_manifest_1 = require("../runtime/tag-manifest");
7
9
  /** A `TagMarkerTable` over a plain map, counting its calls. */
8
10
  function fakeMarkers(rows = new Map()) {
9
11
  const read = jest.fn(async (tags) => {
@@ -353,6 +355,13 @@ describe("TrackedTagMarkers with the revalidation log", () => {
353
355
  await b.tags.refresh();
354
356
  expect(b.log.query).toHaveBeenCalledTimes(2);
355
357
  });
358
+ it("asks with nothing tracked once an entry store relies on the log", async () => {
359
+ const { clock, b } = instances();
360
+ b.tags.judgeEntriesOf(() => Infinity);
361
+ clock.at += INTERVAL;
362
+ await b.tags.refresh();
363
+ expect(b.log.query).toHaveBeenCalledTimes(1);
364
+ });
356
365
  it("applies a row read again inside the lookback only once", async () => {
357
366
  const { clock, logRows, b } = instances();
358
367
  await b.tags.ensure(["posts"]);
@@ -475,6 +484,9 @@ describe("TrackedTagMarkers with the revalidation log", () => {
475
484
  clock.at += INTERVAL;
476
485
  await b.tags.refresh();
477
486
  expect(b.markers.read).toHaveBeenLastCalledWith(["posts"]);
487
+ // The re-read runs alongside the query, not waited for by `refresh`.
488
+ await b.markers.read.mock.results.at(-1).value;
489
+ await new Promise((resolve) => setImmediate(resolve));
478
490
  expect(b.tags.state(["posts"], createdAt())).toBe("expired");
479
491
  error.mockRestore();
480
492
  });
@@ -594,6 +606,109 @@ describe("EntryLru", () => {
594
606
  lru.set("b", stored(200));
595
607
  expect(lru.size).toBe(2);
596
608
  });
609
+ it("drops the entries past revalidate", () => {
610
+ const lru = new use_cache_common_1.EntryLru(1000);
611
+ lru.set("old", stored(100, { timestamp: 1000, revalidate: 1 }));
612
+ lru.set("new", stored(100, { timestamp: 1500, revalidate: 1 }));
613
+ expect(lru.holdsLive(2001)).toBe(true);
614
+ expect(lru.holdsLive(2501)).toBe(false);
615
+ // Asking is not a use: the entries go in `oldestTimestamp`'s scan.
616
+ expect(lru.size).toBe(2);
617
+ });
618
+ it("drops the entries past revalidate as it finds the oldest", () => {
619
+ const lru = new use_cache_common_1.EntryLru(1000);
620
+ lru.set("old", stored(100, { timestamp: 1000, revalidate: 1 }));
621
+ lru.set("new", stored(100, { timestamp: 1500, revalidate: 1 }));
622
+ expect(lru.oldestTimestamp(2001)).toBe(1500);
623
+ expect(lru.size).toBe(1);
624
+ expect(lru.oldestTimestamp()).toBe(1500);
625
+ });
626
+ it("knows its oldest entry's timestamp as entries come and go", () => {
627
+ const lru = new use_cache_common_1.EntryLru(250);
628
+ expect(lru.oldestTimestamp()).toBe(Infinity);
629
+ lru.set("a", stored(100, { timestamp: 2 }));
630
+ lru.set("b", stored(100, { timestamp: 1 }));
631
+ expect(lru.oldestTimestamp()).toBe(1);
632
+ lru.delete("b");
633
+ expect(lru.oldestTimestamp()).toBe(2);
634
+ // Evicted for space.
635
+ lru.set("c", stored(100, { timestamp: 3 }));
636
+ lru.set("d", stored(100, { timestamp: 4 }));
637
+ expect(lru.oldestTimestamp()).toBe(3);
638
+ });
639
+ it("starts its bound afresh once emptied", () => {
640
+ const lru = new use_cache_common_1.EntryLru(1000);
641
+ lru.set("a", stored(100, { timestamp: 100 }));
642
+ lru.delete("a");
643
+ lru.set("b", stored(100, { timestamp: 5000 }));
644
+ expect(lru.oldestBound()).toBe(5000);
645
+ });
646
+ it("drops the expired entries least recently used as it bounds", () => {
647
+ const lru = new use_cache_common_1.EntryLru(1000);
648
+ lru.set("old", stored(100, { timestamp: 1000, revalidate: 1 }));
649
+ lru.set("live", stored(100, { timestamp: 1500, revalidate: 10 }));
650
+ lru.set("behind", stored(100, { timestamp: 1200, revalidate: 1 }));
651
+ // Up to the first live entry: no scan past it.
652
+ expect(lru.oldestBound(2300)).toBe(1000);
653
+ expect(lru.size).toBe(2);
654
+ expect(lru.oldestTimestamp(2300)).toBe(1500);
655
+ });
656
+ it("bounds its oldest entry's timestamp from below between scans", () => {
657
+ const lru = new use_cache_common_1.EntryLru(1000);
658
+ const held = new Map();
659
+ let seed = 7;
660
+ const random = () => (seed = (seed * 16807) % 2147483647) / 2147483647;
661
+ for (let i = 0; i < 2000; i++) {
662
+ const key = `k${Math.floor(random() * 50)}`;
663
+ const timestamp = Math.floor(random() * 10_000);
664
+ if (random() < 0.2) {
665
+ lru.delete(key);
666
+ held.delete(key);
667
+ }
668
+ else {
669
+ lru.set(key, stored(100, { timestamp }));
670
+ held.delete(key);
671
+ held.set(key, timestamp);
672
+ while (held.size > lru.size) {
673
+ held.delete(held.keys().next().value);
674
+ }
675
+ }
676
+ const oldest = Math.min(Infinity, ...held.values());
677
+ expect(lru.oldestBound()).toBeLessThanOrEqual(oldest);
678
+ if (i % 100 === 0) {
679
+ expect(lru.oldestTimestamp()).toBe(oldest);
680
+ expect(lru.oldestBound()).toBe(oldest);
681
+ }
682
+ }
683
+ for (const key of held.keys()) {
684
+ lru.delete(key);
685
+ }
686
+ expect(lru.oldestBound()).toBe(Infinity);
687
+ });
688
+ it("knows its oldest entry's timestamp under eviction churn", () => {
689
+ const lru = new use_cache_common_1.EntryLru(1000);
690
+ const held = new Map();
691
+ let seed = 1;
692
+ const random = () => (seed = (seed * 16807) % 2147483647) / 2147483647;
693
+ for (let i = 0; i < 2000; i++) {
694
+ const key = `k${Math.floor(random() * 50)}`;
695
+ const timestamp = Math.floor(random() * 10_000);
696
+ if (random() < 0.2) {
697
+ lru.delete(key);
698
+ held.delete(key);
699
+ }
700
+ else {
701
+ lru.set(key, stored(100, { timestamp }));
702
+ held.delete(key);
703
+ held.set(key, timestamp);
704
+ // Evicted least recently used first, as the store does.
705
+ while (held.size > lru.size) {
706
+ held.delete(held.keys().next().value);
707
+ }
708
+ }
709
+ expect(lru.oldestTimestamp()).toBe(Math.min(Infinity, ...held.values()));
710
+ }
711
+ });
597
712
  });
598
713
  describe("entries", () => {
599
714
  it("reads a stream to the end", async () => {
@@ -643,4 +758,26 @@ describe("PendingSets", () => {
643
758
  await pending.wait("other");
644
759
  });
645
760
  });
646
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNhY2hlLWNvbW1vbi50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXIvdXNlLWNhY2hlLWNvbW1vbi50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0RBQXNEO0FBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUd0Qyx1REFPMkI7QUFDM0IseURBUTRCO0FBRTVCLCtEQUErRDtBQUMvRCxTQUFTLFdBQVcsQ0FBQyxPQUFPLElBQUksR0FBRyxFQUFxQjtJQUN0RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFjLEVBQUUsRUFBRTtRQUM1QyxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBcUIsQ0FBQztRQUMzQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUIsSUFBSSxHQUFHO2dCQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FDbkIsS0FBSyxFQUFFLEdBQVcsRUFBRSxFQUFVLEVBQUUsU0FBK0IsRUFBRSxFQUFFO1FBQ2pFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLEdBQUcsQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLENBQUM7YUFBTSxDQUFDO1lBQ04sR0FBRyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDakIs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QU8sR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUIsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUM7WUFDN0IsZ0JBQWdCLEVBQUUsRUFBRSxHQUFHLFFBQVE7WUFDL0IsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO1NBQ25DLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDM0IsTUFBTSxNQUFNLEdBQTJCLEVBQUUsQ0FBQztRQUMxQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDN0IsS0FBSyxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUM7WUFDckIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0IsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZCLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUMxRCxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BCLENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1RCxDQUFD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LENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0QsTUFBTSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQixJQUFJLEVBQUUsQ0FBQztRQUNQLE1BQU0sSUFBSSxDQUFDO1FBQ1gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixtQ0FBbUM7UUFDbkMsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5qZXN0Lm1vY2soXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIik7XG5cbmltcG9ydCB0eXBlIHsgQ2FjaGVFbnRyeSB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2xpYi9jYWNoZS1oYW5kbGVycy90eXBlc1wiO1xuaW1wb3J0IHtcbiAgTUFYX1JFVkFMSURBVElPTl9MT0dfR0FQX01TLFxuICBSZXZhbGlkYXRpb25Mb2csXG4gIFJldmFsaWRhdGlvbkxvZ1JvdyxcbiAgVGFnTWFya2VyLFxuICBUYWdNYXJrZXJUYWJsZSxcbiAgVHJhY2tlZFRhZ01hcmtlcnMsXG59IGZyb20gXCIuL2F3cy1jYWNoZS1zdG9yZVwiO1xuaW1wb3J0IHtcbiAgY2FjaGVFbnRyeU9mLFxuICBFbnRyeUxydSxcbiAgbm93LFxuICBQZW5kaW5nU2V0cyxcbiAgcmVhZFN0cmVhbSxcbiAgU3RvcmVkRW50cnksXG4gIHN0b3JlZEVudHJ5T2YsXG59IGZyb20gXCIuL3VzZS1jYWNoZS1jb21tb25cIjtcblxuLyoqIEEgYFRhZ01hcmtlclRhYmxlYCBvdmVyIGEgcGxhaW4gbWFwLCBjb3VudGluZyBpdHMgY2FsbHMuICovXG5mdW5jdGlvbiBmYWtlTWFya2Vycyhyb3dzID0gbmV3IE1hcDxzdHJpbmcsIFRhZ01hcmtlcj4oKSkge1xuICBjb25zdCByZWFkID0gamVzdC5mbihhc3luYyAodGFnczogc3RyaW5nW10pID0+IHtcbiAgICBjb25zdCBmb3VuZCA9IG5ldyBNYXA8c3RyaW5nLCBUYWdNYXJrZXI+KCk7XG4gICAgZm9yIChjb25zdCB0YWcgb2YgdGFncykge1xuICAgICAgY29uc3Qgcm93ID0gcm93cy5nZXQodGFnKTtcbiAgICAgIGlmIChyb3cpIGZvdW5kLnNldCh0YWcsIHsgLi4ucm93IH0pO1xuICAgIH1cbiAgICByZXR1cm4gZm91bmQ7XG4gIH0pO1xuICBjb25zdCB3cml0ZSA9IGplc3QuZm4oXG4gICAgYXN5bmMgKHRhZzogc3RyaW5nLCBhdDogbnVtYmVyLCBkdXJhdGlvbnM/OiB7IGV4cGlyZT86IG51bWJlciB9KSA9PiB7XG4gICAgICBjb25zdCByb3cgPSByb3dzLmdldCh0YWcpID8/IHt9O1xuICAgICAgaWYgKCFkdXJhdGlvbnMpIHtcbiAgICAgICAgcm93LnJldmFsaWRhdGVkQXQgPSBhdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvdy5zdGFsZUF0ID0gYXQ7XG4gICAgICAgIGlmIChkdXJhdGlvbnMuZXhwaXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByb3cuZXhwaXJlZEF0ID0gYXQgKyBkdXJhdGlvbnMuZXhwaXJlICogMTAwMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcm93cy5zZXQodGFnLCByb3cpO1xuICAgICAgLy8gYFJldHVyblZhbHVlczogXCJBTExfTkVXXCJgLCBhcyB0aGUgcmVhbCB0YWJsZSBhbnN3ZXJzLlxuICAgICAgcmV0dXJuIHsgLi4ucm93IH07XG4gICAgfSxcbiAgKTtcbiAgcmV0dXJuIHtcbiAgICByb3dzLFxuICAgIHJlYWQsXG4gICAgd3JpdGUsXG4gICAgdGFibGU6IHsgcmVhZCwgd3JpdGUgfSBhcyB1bmtub3duIGFzIFRhZ01hcmtlclRhYmxlLFxuICB9O1xufVxuXG4vKipcbiAqIEEgYFJldmFsaWRhdGlvbkxvZ2Agb3ZlciBhIHBsYWluIGFycmF5LCBjb3VudGluZyBpdHMgY2FsbHMuIEl0cyBxdWVyeSByZXR1cm5zXG4gKiB3aGF0IHRoZSByZWFsIG9uZSB3b3VsZDogZXZlcnkgcm93IGF0IG9yIGFmdGVyIGBzaW5jZWAsIG9sZGVzdCBmaXJzdC5cbiAqL1xuZnVuY3Rpb24gZmFrZUxvZyhyb3dzOiBSZXZhbGlkYXRpb25Mb2dSb3dbXSA9IFtdKSB7XG4gIGNvbnN0IHB1dCA9IGplc3QuZm4oYXN5bmMgKHRhZzogc3RyaW5nLCBhdDogbnVtYmVyLCBtYXJrZXI6IFRhZ01hcmtlcikgPT4ge1xuICAgIHJvd3MucHVzaCh7XG4gICAgICBzazogYCR7U3RyaW5nKGF0KS5wYWRTdGFydCgxNSwgXCIwXCIpfSMke3RhZ31gLFxuICAgICAgYXQsXG4gICAgICB0YWcsXG4gICAgICBtYXJrZXIsXG4gICAgfSk7XG4gIH0pO1xuICBjb25zdCBxdWVyeSA9IGplc3QuZm4oYXN5bmMgKHNpbmNlOiBudW1iZXIpID0+ICh7XG4gICAgcm93czogcm93cy5maWx0ZXIoKHJvdykgPT4gcm93LmF0ID49IHNpbmNlKS5zb3J0KChhLCBiKSA9PiBhLmF0IC0gYi5hdCksXG4gICAgdHJ1bmNhdGVkOiBmYWxzZSxcbiAgfSkpO1xuICByZXR1cm4ge1xuICAgIHJvd3MsXG4gICAgcHV0LFxuICAgIHF1ZXJ5LFxuICAgIGxvZzogeyBwdXQsIHF1ZXJ5IH0gYXMgdW5rbm93biBhcyBSZXZhbGlkYXRpb25Mb2csXG4gIH07XG59XG5cbi8qKiBBIHdhbGwgY2xvY2sgYSB0ZXN0IG1vdmVzIGJ5IGhhbmQuICovXG5mdW5jdGlvbiBmYWtlQ2xvY2soc3RhcnQgPSAxXzAwMF8wMDApIHtcbiAgY29uc3QgY2xvY2sgPSB7IGF0OiBzdGFydCwgbm93OiAoKSA9PiBjbG9jay5hdCB9O1xuICByZXR1cm4gY2xvY2s7XG59XG5cbmZ1bmN0aW9uIHN0cmVhbU9mKC4uLmNodW5rczogc3RyaW5nW10pOiBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5PiB7XG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgIHN0YXJ0KGNvbnRyb2xsZXIpIHtcbiAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoY2h1bmspKTtcbiAgICAgIH1cbiAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gc3RvcmVkKGJ5dGVzOiBudW1iZXIsIGV4dHJhOiBQYXJ0aWFsPFN0b3JlZEVudHJ5PiA9IHt9KTogU3RvcmVkRW50cnkge1xuICByZXR1cm4ge1xuICAgIHZhbHVlOiBuZXcgVWludDhBcnJheShieXRlcyksXG4gICAgdGFnczogW10sXG4gICAgc3RhbGU6IDMwMCxcbiAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgZXhwaXJlOiAzNjAwLFxuICAgIHJldmFsaWRhdGU6IDkwMCxcbiAgICAuLi5leHRyYSxcbiAgfTtcbn1cblxuZGVzY3JpYmUoXCJUcmFja2VkVGFnTWFya2Vyc1wiLCAoKSA9PiB7XG4gIGl0KFwicmVhZHMgYSB0YWcgdGhlIGZpcnN0IHRpbWUgaXQgaXMgbmVlZGVkLCBhbmQgbm90IGFnYWluXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtYXJrZXJzID0gZmFrZU1hcmtlcnMobmV3IE1hcChbW1wiYVwiLCB7IHJldmFsaWRhdGVkQXQ6IDUwIH1dXSkpO1xuICAgIGNvbnN0IHRhZ3MgPSBuZXcgVHJhY2tlZFRhZ01hcmtlcnMoe1xuICAgICAgbWFya2VyczogbWFya2Vycy50YWJsZSxcbiAgICAgIGxvZzogZmFrZUxvZygpLmxvZyxcbiAgICB9KTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKFt0YWdzLmVuc3VyZShbXCJhXCIsIFwiYlwiXSksIHRhZ3MuZW5zdXJlKFtcImFcIiwgXCJiXCJdKV0pO1xuICAgIGF3YWl0IHRhZ3MuZW5zdXJlKFtcImFcIiwgXCJiXCJdKTtcblxuICAgIGV4cGVjdChtYXJrZXJzLnJlYWQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICBleHBlY3QobWFya2Vycy5yZWFkKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChbXCJhXCIsIFwiYlwiXSk7XG4gICAgZXhwZWN0KHRhZ3Muc3RhdGUoW1wiYVwiXSwgNDApKS50b0JlKFwiZXhwaXJlZFwiKTtcbiAgICBleHBlY3QodGFncy5zdGF0ZShbXCJhXCJdLCA2MCkpLnRvQmUoXCJmcmVzaFwiKTtcbiAgICBleHBlY3QodGFncy5zdGF0ZShbXCJiXCJdLCA0MCkpLnRvQmUoXCJmcmVzaFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJhcHBsaWVzIGl0cyBvd24gcmV2YWxpZGF0aW9uIGF0IG9uY2UsIGFuZCB3cml0ZXMgaXQgb25jZSBmb3IgYm90aCBoYW5kbGVyc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbWFya2VycyA9IGZha2VNYXJrZXJzKCk7XG4gICAgY29uc3QgdGFncyA9IG5ldyBUcmFja2VkVGFnTWFya2Vycyh7XG4gICAgICBtYXJrZXJzOiBtYXJrZXJzLnRhYmxlLFxuICAgICAgbG9nOiBmYWtlTG9nKCkubG9nLFxuICAgIH0pO1xuICAgIGNvbnN0IGNyZWF0ZWRBdCA9IERhdGUubm93KCkgLSAxMDAwO1xuXG4gICAgLy8gV2hhdCBOZXh0LmpzIGRvZXM6IGB1cGRhdGVUYWdzYCBvbiB0aGUgZGVmYXVsdCBhbmQgdGhlIHJlbW90ZSBoYW5kbGVyLlxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRhZ3MudXBkYXRlKFtcImFcIiwgXCJiXCJdLCB7IGV4cGlyZTogMCB9KSxcbiAgICAgIHRhZ3MudXBkYXRlKFtcImFcIiwgXCJiXCJdLCB7IGV4cGlyZTogMCB9KSxcbiAgICBdKTtcblxuICAgIGV4cGVjdChtYXJrZXJzLndyaXRlKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG4gICAgZXhwZWN0KHRhZ3Muc3RhdGUoW1wiYlwiXSwgY3JlYXRlZEF0KSkudG9CZShcImV4cGlyZWRcIik7XG4gICAgZXhwZWN0KG1hcmtlcnMucm93cy5nZXQoXCJhXCIpKS50b0VxdWFsKHtcbiAgICAgIHN0YWxlQXQ6IGV4cGVjdC5hbnkoTnVtYmVyKSxcbiAgICAgIGV4cGlyZWRBdDogZXhwZWN0LmFueShOdW1iZXIpLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcImdpdmVzIGEgbGF0ZXIgcmV2YWxpZGF0aW9uIGl0cyBvd24gbWFya2VyIHdoaWxlIHRoZSBmaXJzdCBpcyBzdGlsbCB3cml0aW5nXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtYXJrZXJzID0gZmFrZU1hcmtlcnMoKTtcbiAgICBsZXQgcmVsZWFzZSA9ICgpID0+IHt9O1xuICAgIG1hcmtlcnMud3JpdGUubW9ja0ltcGxlbWVudGF0aW9uT25jZShcbiAgICAgIChfdGFnLCBhdCkgPT5cbiAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICByZWxlYXNlID0gKCkgPT4gcmVzb2x2ZSh7IHJldmFsaWRhdGVkQXQ6IGF0IH0pO1xuICAgICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IHRhZ3MgPSBuZXcgVHJhY2tlZFRhZ01hcmtlcnMoe1xuICAgICAgbWFya2VyczogbWFya2Vycy50YWJsZSxcbiAgICAgIGxvZzogZmFrZUxvZygpLmxvZyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGZpcnN0ID0gdGFncy51cGRhdGUoW1wieFwiXSwgdW5kZWZpbmVkKTtcbiAgICAvLyBBbm90aGVyIHJlcXVlc3QncyBgcmV2YWxpZGF0ZVRhZygneCcpYCwgYSB0dXJuIGxhdGVyLlxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRJbW1lZGlhdGUocmVzb2x2ZSkpO1xuICAgIGNvbnN0IHNlY29uZCA9IHRhZ3MudXBkYXRlKFtcInhcIl0sIHVuZGVmaW5lZCk7XG4gICAgcmVsZWFzZSgpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtmaXJzdCwgc2Vjb25kXSk7XG5cbiAgICBleHBlY3QobWFya2Vycy53cml0ZSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICAgIGNvbnN0IFtbLCBmaXJzdEF0XSwgWywgc2Vjb25kQXRdXSA9IG1hcmtlcnMud3JpdGUubW9jay5jYWxscztcbiAgICBleHBlY3Qoc2Vjb25kQXQpLnRvQmVHcmVhdGVyVGhhbihmaXJzdEF0KTtcbiAgfSk7XG5cbiAgaXQoXCJwdXRzIGEgc2xvdyBsb2cgcm93IGFnYWluIHVuZGVyIGEgZnJlc2ggdGltZXN0YW1wLCBzbyByZWFkZXJzIHNlZSBpdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY2xvY2sgPSBmYWtlQ2xvY2soKTtcbiAgICBjb25zdCBsb2cgPSBmYWtlTG9nKCk7XG4gICAgbG9nLnB1dC5tb2NrSW1wbGVtZW50YXRpb25PbmNlKGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFJlYWRlcnMnIGN1cnNvcnMgaGF2ZSBtb3ZlZCBwYXN0IHRoZSByb3cgYnkgdGhlIHRpbWUgaXQgc2hvd3MuXG4gICAgICBjbG9jay5hdCArPSAxMF8wMDA7XG4gICAgfSk7XG4gICAgY29uc3QgdGFncyA9IG5ldyBUcmFja2VkVGFnTWFya2Vycyh7XG4gICAgICBtYXJrZXJzOiBmYWtlTWFya2VycygpLnRhYmxlLFxuICAgICAgbG9nOiBsb2cubG9nLFxuICAgICAgY2xvY2s6IGNsb2NrLm5vdyxcbiAgICB9KTtcblxuICAgIGV4cGVjdChhd2FpdCB0YWdzLnVwZGF0ZShbXCJ4XCJdLCB1bmRlZmluZWQpKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChsb2cucHV0Lm1vY2suY2FsbHMubWFwKChbLCBhdF0pID0+IGF0KSkudG9FcXVhbChbXG4gICAgICAxXzAwMF8wMDAsIDFfMDEwXzAwMCxcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXBvcnRzIGEgbG9nIHJvdyBzbG93IHR3aWNlIGFzIG5vdCByZWNvcmRlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY2xvY2sgPSBmYWtlQ2xvY2soKTtcbiAgICBjb25zdCBsb2cgPSBmYWtlTG9nKCk7XG4gICAgbG9nLnB1dC5tb2NrSW1wbGVtZW50YXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgY2xvY2suYXQgKz0gMTBfMDAwO1xuICAgIH0pO1xuICAgIGNvbnN0IGVycm9yID0gamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgY29uc3QgdGFncyA9IG5ldyBUcmFja2VkVGFnTWFya2Vycyh7XG4gICAgICBtYXJrZXJzOiBmYWtlTWFya2VycygpLnRhYmxlLFxuICAgICAgbG9nOiBsb2cubG9nLFxuICAgICAgY2xvY2s6IGNsb2NrLm5vdyxcbiAgICB9KTtcblxuICAgIGV4cGVjdChhd2FpdCB0YWdzLnVwZGF0ZShbXCJ4XCJdLCB1bmRlZmluZWQpKS50b0JlKGZhbHNlKTtcbiAgICBleHBlY3QobG9nLnB1dCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICAgIGVycm9yLm1vY2tSZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KFwidHJhY2tzIHRoZSB3aG9sZSByb3cgaXRzIG93biB3cml0ZSByZXR1cm5zLCBub3QganVzdCB3aGF0IGl0IHNldFwiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gQW5vdGhlciBpbnN0YW5jZSdzIGB1cGRhdGVUYWdgIGZvciBhIHRhZyB0aGlzIG9uZSBkb2VzIG5vdCB0cmFjayB5ZXQuXG4gICAgY29uc3QgY3JlYXRlZEF0ID0gRGF0ZS5ub3coKSAtIDEwMDA7XG4gICAgY29uc3QgbWFya2VycyA9IGZha2VNYXJrZXJzKFxuICAgICAgbmV3IE1hcChbW1wicG9zdHNcIiwgeyByZXZhbGlkYXRlZEF0OiBjcmVhdGVkQXQgKyA1MDAgfV1dKSxcbiAgICApO1xuICAgIGNvbnN0IHRhZ3MgPSBuZXcgVHJhY2tlZFRhZ01hcmtlcnMoe1xuICAgICAgbWFya2VyczogbWFya2Vycy50YWJsZSxcbiAgICAgIGxvZzogZmFrZUxvZygpLmxvZyxcbiAgICB9KTtcblxuICAgIGF3YWl0IHRhZ3MudXBkYXRlKFtcInBvc3RzXCJdLCB7IGV4cGlyZTogMzYwMCB9KTtcblxuICAgIC8vIE9sZGVyIHRoYW4gdGhhdCBgdXBkYXRlVGFnYCwgc28gYSBibG9ja2luZyByZW5kZXIsIG5vdCBzdGFsZS13aGlsZS1yZXZhbGlkYXRlLlxuICAgIGV4cGVjdCh0YWdzLnN0YXRlKFtcInBvc3RzXCJdLCBjcmVhdGVkQXQpKS50b0JlKFwiZXhwaXJlZFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJtYXJrcyBhIHByb2ZpbGUncyByZXZhbGlkYXRpb24gc3RhbGUgdW50aWwgaXRzIGV4cGlyZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdGFncyA9IG5ldyBUcmFja2VkVGFnTWFya2Vycyh7fSk7XG4gICAgY29uc3QgY3JlYXRlZEF0ID0gRGF0ZS5ub3coKSAtIDEwMDA7XG4gICAgYXdhaXQgdGFncy51cGRhdGUoW1wiYVwiXSwgeyBleHBpcmU6IDM2MDAgfSk7XG4gICAgZXhwZWN0KHRhZ3Muc3RhdGUoW1wiYVwiXSwgY3JlYXRlZEF0KSkudG9CZShcInN0YWxlXCIpO1xuICAgIC8vIE5vdCBhbiBleHBpcmF0aW9uIHlldCwgc28gaW1wbGljaXQgdGFncyBhcmUgbm90IGFmZmVjdGVkIGVpdGhlci5cbiAgICBleHBlY3QodGFncy5leHBpcmF0aW9uKFtcImFcIl0pKS50b0JlKDApO1xuICB9KTtcblxuICAvLyBOZXh0LmpzIHN0YW1wcyBlbnRyaWVzIHdpdGggYHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZS5ub3coKWAsXG4gIC8vIHdoaWNoIGNhbiBydW4gYmVoaW5kIGBEYXRlLm5vdygpYC4gQSBtYXJrZXIgc3RhbXBlZCBvbiB0aGUgd2FsbCBjbG9jayB3b3VsZFxuICAvLyB0aGVuIHBvc3RkYXRlIGFuIGVudHJ5IHJlZ2VuZXJhdGVkIHJpZ2h0IGFmdGVyIHRoZSByZXZhbGlkYXRpb24sIHdoaWNoXG4gIC8vIHdvdWxkIHJlYWQgYXMgcmV2YWxpZGF0ZWQgYWdhaW4sIGFuZCBhZ2Fpbi5cbiAgaXQoXCJzdGFtcHMgbWFya2VycyBvbiB0aGUgY2xvY2sgZW50cmllcyBhcmUgc3RhbXBlZCB3aXRoXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB3YWxsID0gamVzdC5zcHlPbihEYXRlLCBcIm5vd1wiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbm93KCkgKyA1MDApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0YWdzID0gbmV3IFRyYWNrZWRUYWdNYXJrZXJzKHt9KTtcbiAgICAgIGF3YWl0IHRhZ3MudXBkYXRlKFtcImFcIl0sIHVuZGVmaW5lZCk7XG4gICAgICBjb25zdCByZWdlbmVyYXRlZCA9IG5vdygpICsgMTtcbiAgICAgIGV4cGVjdCh0YWdzLnN0YXRlKFtcImFcIl0sIHJlZ2VuZXJhdGVkKSkudG9CZShcImZyZXNoXCIpO1xuICAgICAgZXhwZWN0KHRhZ3Muc3RhdGUoW1wiYVwiXSwgcmVnZW5lcmF0ZWQgLSAxMDApKS50b0JlKFwiZXhwaXJlZFwiKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgd2FsbC5tb2NrUmVzdG9yZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoXCJyZXBvcnRzIHRoZSBsYXRlc3QgcGFzdCBleHBpcmF0aW9uIG9mIGltcGxpY2l0IHRhZ3NcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG1hcmtlcnMgPSBmYWtlTWFya2VycyhcbiAgICAgIG5ldyBNYXA8c3RyaW5nLCBUYWdNYXJrZXI+KFtcbiAgICAgICAgW1wiX05fVF8vYVwiLCB7IHJldmFsaWRhdGVkQXQ6IDEwMCB9XSxcbiAgICAgICAgW1wiX05fVF8vYlwiLCB7IHN0YWxlQXQ6IDE1MCwgZXhwaXJlZEF0OiAyMDAgfV0sXG4gICAgICAgIFtcIl9OX1RfL2NcIiwgeyBzdGFsZUF0OiAxNTAsIGV4cGlyZWRBdDogRGF0ZS5ub3coKSArIDYwXzAwMCB9XSxcbiAgICAgIF0pLFxuICAgICk7XG4gICAgY29uc3QgdGFncyA9IG5ldyBUcmFja2VkVGFnTWFya2Vycyh7XG4gICAgICBtYXJrZXJzOiBtYXJrZXJzLnRhYmxlLFxuICAgICAgbG9nOiBmYWtlTG9nKCkubG9nLFxuICAgIH0pO1xuICAgIGF3YWl0IHRhZ3MuZW5zdXJlKFtcIl9OX1RfL2FcIiwgXCJfTl9UXy9iXCIsIFwiX05fVF8vY1wiLCBcIl9OX1RfL2RcIl0pO1xuICAgIGV4cGVjdCh0YWdzLmV4cGlyYXRpb24oW1wiX05fVF8vYVwiLCBcIl9OX1RfL2JcIiwgXCJfTl9UXy9jXCJdKSkudG9CZSgyMDApO1xuICAgIGV4cGVjdCh0YWdzLmV4cGlyYXRpb24oW1wiX05fVF8vZFwiXSkpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIGl0KFwiZG9lcyBub3QgbGV0IGFuIGV2ZW50dWFsbHkgY29uc2lzdGVudCByZWFkIHVuZG8gaXRzIG93biB3cml0ZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbWFya2VycyA9IGZha2VNYXJrZXJzKCk7XG4gICAgY29uc3QgdGFncyA9IG5ldyBUcmFja2VkVGFnTWFya2Vycyh7XG4gICAgICBtYXJrZXJzOiBtYXJrZXJzLnRhYmxlLFxuICAgICAgbG9nOiBmYWtlTG9nKCkubG9nLFxuICAgICAgcmVmcmVzaEludGVydmFsTXM6IDAsXG4gICAgfSk7XG4gICAgYXdhaXQgdGFncy51cGRhdGUoW1wiYVwiXSwgdW5kZWZpbmVkKTtcbiAgICAvLyBUaGUgcmVhZCBkb2VzIG5vdCBzaG93IHRoZSB3cml0ZSB5ZXQuXG4gICAgbWFya2Vycy5yb3dzLmNsZWFyKCk7XG4gICAgYXdhaXQgdGFncy5yZWZyZXNoKCk7XG4gICAgZXhwZWN0KHRhZ3Muc3RhdGUoW1wiYVwiXSwgRGF0ZS5ub3coKSAtIDEwMDApKS50b0JlKFwiZXhwaXJlZFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJ0cmVhdHMgYSBmYWlsZWQgcmVhZCBhcyBmcmVzaCBhbmQgdHJpZXMgYWdhaW4gb24gdGhlIG5leHQgcmVmcmVzaFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbWFya2VycyA9IGZha2VNYXJrZXJzKG5ldyBNYXAoW1tcImFcIiwgeyByZXZhbGlkYXRlZEF0OiA1MCB9XV0pKTtcbiAgICBjb25zdCBlcnJvciA9IGplc3Quc3B5T24oY29uc29sZSwgXCJlcnJvclwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIG1hcmtlcnMucmVhZC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UobmV3IEVycm9yKFwidGhyb3R0bGVkXCIpKTtcbiAgICBjb25zdCB0YWdzID0gbmV3IFRyYWNrZWRUYWdNYXJrZXJzKHtcbiAgICAgIG1hcmtlcnM6IG1hcmtlcnMudGFibGUsXG4gICAgICBsb2c6IGZha2VMb2coKS5sb2csXG4gICAgICByZWZyZXNoSW50ZXJ2YWxNczogMCxcbiAgICB9KTtcblxuICAgIGF3YWl0IHRhZ3MuZW5zdXJlKFtcImFcIl0pO1xuICAgIGV4cGVjdCh0YWdzLnN0YXRlKFtcImFcIl0sIDQwKSkudG9CZShcImZyZXNoXCIpO1xuICAgIGF3YWl0IHRhZ3MucmVmcmVzaCgpO1xuICAgIGV4cGVjdCh0YWdzLnN0YXRlKFtcImFcIl0sIDQwKSkudG9CZShcImV4cGlyZWRcIik7XG4gICAgZXJyb3IubW9ja1Jlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoXCJmb3JnZXRzIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIHRhZyBwYXN0IGl0cyBib3VuZCwgYW5kIHJlYWRzIGl0IGFnYWluXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtYXJrZXJzID0gZmFrZU1hcmtlcnMoKTtcbiAgICBjb25zdCB0YWdzID0gbmV3IFRyYWNrZWRUYWdNYXJrZXJzKHtcbiAgICAgIG1hcmtlcnM6IG1hcmtlcnMudGFibGUsXG4gICAgICBsb2c6IGZha2VMb2coKS5sb2csXG4gICAgICBtYXhUcmFja2VkVGFnczogMixcbiAgICB9KTtcbiAgICBhd2FpdCB0YWdzLmVuc3VyZShbXCJhXCJdKTtcbiAgICBhd2FpdCB0YWdzLmVuc3VyZShbXCJiXCJdKTtcbiAgICBhd2FpdCB0YWdzLmVuc3VyZShbXCJhXCJdKTsgLy8gYGJgIGlzIG5vdyB0aGUgb2xkZXN0XG4gICAgYXdhaXQgdGFncy5lbnN1cmUoW1wiY1wiXSk7XG4gICAgbWFya2Vycy5yZWFkLm1vY2tDbGVhcigpO1xuXG4gICAgYXdhaXQgdGFncy5lbnN1cmUoW1wiYVwiLCBcImJcIiwgXCJjXCJdKTtcbiAgICBleHBlY3QobWFya2Vycy5yZWFkKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChbXCJiXCJdKTtcbiAgfSk7XG5cbiAgLy8gRXZlcnkgcGF0aCBpcyBhIHRhZyBvZiBpdHMgb3duLCBzbyBhbiBhcHAgb2YgMTAwMCB0YWdnZWQgcGFnZXMgbmVlZHMgMjAwMDpcbiAgLy8gdHJhY2tlZCAxMDAwIGF0IG1vc3QsIGhhbGYgaXRzIHJlcXVlc3RzIHJlLXJlYWQgYW4gZXZpY3RlZCBtYXJrZXIuXG4gIGl0KFwia2VlcHMgMjAwMCB0YWdzIGEgcGFnZSBlYWNoIHRyYWNrZWQsIHdpdGhvdXQgcmVhZGluZyB0aGVtIGFnYWluXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtYXJrZXJzID0gZmFrZU1hcmtlcnMoKTtcbiAgICBjb25zdCB0YWdzID0gbmV3IFRyYWNrZWRUYWdNYXJrZXJzKHtcbiAgICAgIG1hcmtlcnM6IG1hcmtlcnMudGFibGUsXG4gICAgICBsb2c6IGZha2VMb2coKS5sb2csXG4gICAgfSk7XG4gICAgY29uc3QgcGFnZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMDAwIH0sIChfLCBuKSA9PiBbXG4gICAgICBgaXRlbS0ke259YCxcbiAgICAgIGBfTl9UXy91c2UtY2FjaGUvJHtufWAsXG4gICAgXSk7XG4gICAgZm9yIChjb25zdCBwYWdlIG9mIHBhZ2VzKSBhd2FpdCB0YWdzLmVuc3VyZShwYWdlKTtcbiAgICBtYXJrZXJzLnJlYWQubW9ja0NsZWFyKCk7XG4gICAgZm9yIChjb25zdCBwYWdlIG9mIHBhZ2VzKSBhd2FpdCB0YWdzLmVuc3VyZShwYWdlKTtcbiAgICBleHBlY3QobWFya2Vycy5yZWFkKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcblxuICBpdChcImtlZXBzIHRhZ3MgbG9jYWwgdG8gdGhlIHByb2Nlc3Mgd2l0aG91dCBhIHRhYmxlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0YWdzID0gbmV3IFRyYWNrZWRUYWdNYXJrZXJzKHt9KTtcbiAgICBhd2FpdCB0YWdzLmVuc3VyZShbXCJhXCJdKTtcbiAgICBhd2FpdCB0YWdzLnJlZnJlc2goKTtcbiAgICBhd2FpdCB0YWdzLnVwZGF0ZShbXCJhXCJdLCB1bmRlZmluZWQpO1xuICAgIGV4cGVjdCh0YWdzLnN0YXRlKFtcImFcIl0sIERhdGUubm93KCkgLSAxMDAwKSkudG9CZShcImV4cGlyZWRcIik7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiVHJhY2tlZFRhZ01hcmtlcnMgd2l0aCB0aGUgcmV2YWxpZGF0aW9uIGxvZ1wiLCAoKSA9PiB7XG4gIGNvbnN0IElOVEVSVkFMID0gMTAwMDtcblxuICAvKiogVHdvIGluc3RhbmNlcywgYGFgIGFuZCBgYmAsIG92ZXIgb25lIHRhYmxlIGFuZCBvbmUgY2xvY2suICovXG4gIGZ1bmN0aW9uIGluc3RhbmNlcyhcbiAgICBvcHRpb25zOiB7IHJlc3luY0ludGVydmFsTXM/OiBudW1iZXI7IHJhbmRvbT86ICgpID0+IG51bWJlciB9ID0ge30sXG4gICkge1xuICAgIGNvbnN0IG1hcmtlclJvd3MgPSBuZXcgTWFwPHN0cmluZywgVGFnTWFya2VyPigpO1xuICAgIGNvbnN0IGxvZ1Jvd3M6IFJldmFsaWRhdGlvbkxvZ1Jvd1tdID0gW107XG4gICAgY29uc3QgY2xvY2sgPSBmYWtlQ2xvY2soKTtcbiAgICBjb25zdCBpbnN0YW5jZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IG1hcmtlcnMgPSBmYWtlTWFya2VycyhtYXJrZXJSb3dzKTtcbiAgICAgIGNvbnN0IGxvZyA9IGZha2VMb2cobG9nUm93cyk7XG4gICAgICBjb25zdCB0YWdzID0gbmV3IFRyYWNrZWRUYWdNYXJrZXJzKHtcbiAgICAgICAgbWFya2VyczogbWFya2Vycy50YWJsZSxcbiAgICAgICAgbG9nOiBsb2cubG9nLFxuICAgICAgICByZWZyZXNoSW50ZXJ2YWxNczogSU5URVJWQUwsXG4gICAgICAgIGNsb2NrOiBjbG9jay5ub3csXG4gICAgICAgIC8vIER1ZSBhdCB0aGUgZnVsbCBpbnRlcnZhbCB1bmxlc3MgYSB0ZXN0IGFza3Mgb3RoZXJ3aXNlLlxuICAgICAgICByYW5kb206ICgpID0+IDAsXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1hcmtlcnMsIGxvZywgdGFncyB9O1xuICAgIH07XG4gICAgcmV0dXJuIHsgY2xvY2ssIGxvZ1Jvd3MsIGluc3RhbmNlLCBhOiBpbnN0YW5jZSgpLCBiOiBpbnN0YW5jZSgpIH07XG4gIH1cblxuICBjb25zdCBjcmVhdGVkQXQgPSAoKSA9PiBub3coKSAtIDEwMDA7XG5cbiAgaXQoXCJyZWFjaGVzIGFub3RoZXIgaW5zdGFuY2Ugd2l0aGluIG9uZSBpbnRlcnZhbCwgaW4gb25lIFF1ZXJ5IGFuZCBubyBCYXRjaEdldEl0ZW1cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY2xvY2ssIGEsIGIgfSA9IGluc3RhbmNlcygpO1xuICAgIGF3YWl0IGIudGFncy5lbnN1cmUoW1wicG9zdHNcIl0pO1xuICAgIGIubWFya2Vycy5yZWFkLm1vY2tDbGVhcigpO1xuXG4gICAgYXdhaXQgYS50YWdzLnVwZGF0ZShbXCJwb3N0c1wiXSwgdW5kZWZpbmVkKTtcbiAgICBleHBlY3QoYS5sb2cucHV0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgIFwicG9zdHNcIixcbiAgICAgIGNsb2NrLmF0LFxuICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyByZXZhbGlkYXRlZEF0OiBleHBlY3QuYW55KE51bWJlcikgfSksXG4gICAgKTtcblxuICAgIGNsb2NrLmF0ICs9IElOVEVSVkFMO1xuICAgIGF3YWl0IGIudGFncy5yZWZyZXNoKCk7XG4gICAgZXhwZWN0KGIudGFncy5zdGF0ZShbXCJwb3N0c1wiXSwgY3JlYXRlZEF0KCkpKS50b0JlKFwiZXhwaXJlZFwiKTtcbiAgICBleHBlY3QoYi5sb2cucXVlcnkpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICBleHBlY3QoYi5tYXJrZXJzLnJlYWQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIGl0KFwiaXNzdWVzIG5vIHJlYWQgd2hpbGUgdGhlIGludGVydmFsIGhhcyBub3QgcGFzc2VkXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGNsb2NrLCBiIH0gPSBpbnN0YW5jZXMoKTtcbiAgICAvLyBOb3RoaW5nIHRyYWNrZWQ6IG5vdGhpbmcgdG8gYXNrLlxuICAgIGNsb2NrLmF0ICs9IElOVEVSVkFMO1xuICAgIGF3YWl0IGIudGFncy5yZWZyZXNoKCk7XG4gICAgZXhwZWN0KGIubG9nLnF1ZXJ5KS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuXG4gICAgYXdhaXQgYi50YWdzLmVuc3VyZShbXCJwb3N0c1wiXSk7XG5cbiAgICBiLm1hcmtlcnMucmVhZC5tb2NrQ2xlYXIoKTtcbiAgICAvLyBUaGF0IHJlZnJlc2ggc3RpbGwgY291bnRzOiB3aGF0IGlzIHRyYWNrZWQgc2luY2Ugd2FzIHJlYWQsIG9yIGlzIG5ldy5cbiAgICBhd2FpdCBiLnRhZ3MucmVmcmVzaCgpO1xuICAgIGV4cGVjdChiLmxvZy5xdWVyeSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcblxuICAgIGNsb2NrLmF0ICs9IElOVEVSVkFMO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtiLnRhZ3MucmVmcmVzaCgpLCBiLnRhZ3MucmVmcmVzaCgpXSk7XG4gICAgZXhwZWN0KGIubG9nLnF1ZXJ5KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cbiAgICBjbG9jay5hdCArPSBJTlRFUlZBTCAtIDE7XG4gICAgYXdhaXQgYi50YWdzLnJlZnJlc2goKTtcbiAgICBleHBlY3QoYi5sb2cucXVlcnkpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICBleHBlY3QoYi5tYXJrZXJzLnJlYWQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG5cbiAgICBjbG9jay5hdCArPSAxO1xuICAgIGF3YWl0IGIudGFncy5yZWZyZXNoKCk7XG4gICAgZXhwZWN0KGIubG9nLnF1ZXJ5KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG4gIH0pO1xuXG4gIGl0KFwiYXBwbGllcyBhIHJvdyByZWFkIGFnYWluIGluc2lkZSB0aGUgbG9va2JhY2sgb25seSBvbmNlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGNsb2NrLCBsb2dSb3dzLCBiIH0gPSBpbnN0YW5jZXMoKTtcbiAgICBhd2FpdCBiLnRhZ3MuZW5zdXJlKFtcInBvc3RzXCJdKTtcbiAgICBiLm1hcmtlcnMucmVhZC5tb2NrQ2xlYXIoKTtcbiAgICBsZXQgcmVhZHMgPSAwO1xuICAgIGNvbnN0IHJvdzogUmV2YWxpZGF0aW9uTG9nUm93ID0ge1xuICAgICAgc2s6IGAke2Nsb2NrLmF0fSNwb3N0c2AsXG4gICAgICBhdDogY2xvY2suYXQsXG4gICAgICB0YWc6IFwicG9zdHNcIixcbiAgICAgIGdldCBtYXJrZXIoKSB7XG4gICAgICAgIHJlYWRzKys7XG4gICAgICAgIHJldHVybiB7IHJldmFsaWRhdGVkQXQ6IG5vdygpIH07XG4gICAgICB9LFxuICAgIH07XG4gICAgLy8gVGhlIHNhbWUgcm93IHR3aWNlIGluIG9uZSBwYWdlLCBhbmQgYWdhaW4gb24gdGhlIG5leHQgcXVlcnkuXG4gICAgbG9nUm93cy5wdXNoKHJvdywgcm93KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgICBjbG9jay5hdCArPSBJTlRFUlZBTDtcbiAgICAgIGF3YWl0IGIudGFncy5yZWZyZXNoKCk7XG4gICAgfVxuICAgIGV4cGVjdChiLmxvZy5xdWVyeSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDMpO1xuICAgIGV4cGVjdChyZWFkcykudG9CZSgxKTtcbiAgICBleHBlY3QoYi50YWdzLnN0YXRlKFtcInBvc3RzXCJdLCBjcmVhdGVkQXQoKSkpLnRvQmUoXCJleHBpcmVkXCIpO1xuICB9KTtcblxuICAvLyBSZXBsaWNhdGlvbiBsYWcsIG9yIGEgd3JpdGVyIHdob3NlIGNsb2NrIHJ1bnMgYmVoaW5kOiB0aGUgcm93IHNob3dzIHVwXG4gIC8vIGFmdGVyIGEgcXVlcnkgdGhhdCBzaG91bGQgaGF2ZSBzZWVuIGl0LCB3aXRoIGEgc29ydCBrZXkgYmVmb3JlIGl0LlxuICBpdChcInN0aWxsIHNlZXMgYSByb3cgdGhhdCBhcHBlYXJzIHVwIHRvIHRoZSBsb29rYmFjayBsYXRlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGNsb2NrLCBsb2dSb3dzLCBiIH0gPSBpbnN0YW5jZXMoKTtcbiAgICBhd2FpdCBiLnRhZ3MuZW5zdXJlKFtcImxhdGVcIiwgXCJ0b28tbGF0ZVwiXSk7XG4gICAgYi5tYXJrZXJzLnJlYWQubW9ja0NsZWFyKCk7XG4gICAgY2xvY2suYXQgKz0gSU5URVJWQUw7XG4gICAgY29uc3QgZmlyc3RRdWVyeSA9IGNsb2NrLmF0O1xuICAgIGF3YWl0IGIudGFncy5yZWZyZXNoKCk7XG5cbiAgICBjb25zdCBtYXJrZXIgPSB7IHJldmFsaWRhdGVkQXQ6IG5vdygpIH07XG4gICAgbG9nUm93cy5wdXNoKFxuICAgICAgeyBzazogXCJsYXRlXCIsIGF0OiBmaXJzdFF1ZXJ5IC0gNTAwMCwgdGFnOiBcImxhdGVcIiwgbWFya2VyIH0sXG4gICAgICB7IHNrOiBcInRvby1sYXRlXCIsIGF0OiBmaXJzdFF1ZXJ5IC0gNTAwMSwgdGFnOiBcInRvby1sYXRlXCIsIG1hcmtlciB9LFxuICAgICk7XG4gICAgY2xvY2suYXQgKz0gSU5URVJWQUw7XG4gICAgYXdhaXQgYi50YWdzLnJlZnJlc2goKTtcbiAgICBleHBlY3QoYi5sb2cucXVlcnkpLnRvSGF2ZUJlZW5MYXN0Q2FsbGVkV2l0aChmaXJzdFF1ZXJ5IC0gNTAwMCk7XG4gICAgZXhwZWN0KGIudGFncy5zdGF0ZShbXCJsYXRlXCJdLCBjcmVhdGVkQXQoKSkpLnRvQmUoXCJleHBpcmVkXCIpO1xuICAgIC8vIFBhc3QgdGhlIGxvb2tiYWNrOiB3aGF0IHRoZSBwZXJpb2RpYyByZS1yZWFkIG9mIHRoZSBtYXJrZXJzIGlzIGZvci5cbiAgICBleHBlY3QoYi50YWdzLnN0YXRlKFtcInRvby1sYXRlXCJdLCBjcmVhdGVkQXQoKSkpLnRvQmUoXCJmcmVzaFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJmb3JnZXRzIGl0cyB0cmFja2VkIG1hcmtlcnMgYWZ0ZXIgYSBnYXAgdGhlIGxvZyBtYXkgbm90IGNvdmVyLCBhbmQgcmVhZHMgZWFjaCBhcyBpdCBpcyBuZWVkZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY2xvY2ssIGEsIGIgfSA9IGluc3RhbmNlcygpO1xuICAgIGF3YWl0IGIudGFncy5lbnN1cmUoW1wicG9zdHNcIiwgXCJvdGhlclwiXSk7XG4gICAgYXdhaXQgYS50YWdzLnVwZGF0ZShbXCJwb3N0c1wiXSwgdW5kZWZpbmVkKTtcblxuICAgIGNsb2NrLmF0ICs9IE1BWF9SRVZBTElEQVRJT05fTE9HX0dBUF9NUyArIDE7XG4gICAgY29uc3QgZ2FwRW5kID0gY2xvY2suYXQ7XG4gICAgYXdhaXQgYi50YWdzLnJlZnJlc2goKTtcbiAgICAvLyBObyBidXJzdCBvZiByZS1yZWFkcywgYW5kIG5vIHF1ZXJ5IG9mIGEgbG9nIHRoYXQgbWF5IGhhdmUgbG9zdCByb3dzLlxuICAgIGV4cGVjdChiLm1hcmtlcnMucmVhZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgIGV4cGVjdChiLmxvZy5xdWVyeSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcblxuICAgIGF3YWl0IGIudGFncy5lbnN1cmUoW1wicG9zdHNcIl0pO1xuICAgIGV4cGVjdChiLm1hcmtlcnMucmVhZCkudG9IYXZlQmVlbkxhc3RDYWxsZWRXaXRoKFtcInBvc3RzXCJdKTtcbiAgICBleHBlY3QoYi50YWdzLnN0YXRlKFtcInBvc3RzXCJdLCBjcmVhdGVkQXQoKSkpLnRvQmUoXCJleHBpcmVkXCIpO1xuXG4gICAgLy8gVGhlbiBiYWNrIG9uIHRoZSBsb2csIGZyb20ganVzdCBiZWZvcmUgdGhlIGdhcCBlbmRlZC5cbiAgICBjbG9jay5hdCArPSBJTlRFUlZBTDtcbiAgICBhd2FpdCBiLnRhZ3MucmVmcmVzaCgpO1xuICAgIGV4cGVjdChiLmxvZy5xdWVyeSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZ2FwRW5kIC0gNTAwMCk7XG4gIH0pO1xuXG4gIC8vIFJlLXJlYWRpbmcgZXZlcnkgdHJhY2tlZCBtYXJrZXIgYXQgb25jZSBpcyB+NSwwMDAgUkNVIGF0IDEwLDAwMCB0YWdzOiBtb3JlXG4gIC8vIHRoYW4gdGhlIG9uZSBwYXJ0aXRpb24gc2VydmVzIGluIGEgc2Vjb25kLlxuICBpdChcInJlLXJlYWRzIGVhY2ggdHJhY2tlZCBtYXJrZXIgb25jZSBwZXIgcmVzeW5jIGludGVydmFsLCBhdCBtb3N0IDEwMCBhIHJlZnJlc2hcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY2xvY2ssIGIgfSA9IGluc3RhbmNlcyh7IHJlc3luY0ludGVydmFsTXM6IDEwICogSU5URVJWQUwgfSk7XG4gICAgYXdhaXQgYi50YWdzLmVuc3VyZShBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNTAgfSwgKF8sIGkpID0+IGB0JHtpfWApKTtcbiAgICBiLm1hcmtlcnMucmVhZC5tb2NrQ2xlYXIoKTtcbiAgICBjb25zdCBzaXplczogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAxNDsgaSsrKSB7XG4gICAgICBjbG9jay5hdCArPSBJTlRFUlZBTDtcbiAgICAgIGIubWFya2Vycy5yZWFkLm1vY2tDbGVhcigpO1xuICAgICAgYXdhaXQgYi50YWdzLnJlZnJlc2goKTtcbiAgICAgIHNpemVzLnB1c2goYi5tYXJrZXJzLnJlYWQubW9jay5jYWxsc1swXT8uWzBdLmxlbmd0aCA/PyAwKTtcbiAgICB9XG4gICAgZXhwZWN0KGIubG9nLnF1ZXJ5KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMTQpO1xuICAgIC8vIER1ZSBhdCAxMCBpbnRlcnZhbHMsIG9sZGVzdCBmaXJzdCwgMTAwIHBlciByZWZyZXNoOyB0aGVuIG5vdCBhZ2Fpbi5cbiAgICBleHBlY3Qoc2l6ZXMpLnRvRXF1YWwoWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMCwgMTAwLCA1MCwgMCwgMF0pO1xuICAgIGV4cGVjdChiLm1hcmtlcnMucmVhZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgfSk7XG5cbiAgLy8gVGFncyBmaXJzdCByZWFkIHRvZ2V0aGVyIG11c3Qgbm90IGNvbWUgZHVlIHRvZ2V0aGVyIGV2ZXJ5IGludGVydmFsLlxuICBpdChcInNwcmVhZHMgd2hlbiBlYWNoIHRhZyBjb21lcyBkdWUgb3ZlciB0aGUgbGFzdCBxdWFydGVyIG9mIHRoZSBpbnRlcnZhbFwiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gRHVlIGF0IDEwLCA4Ljc1IGFuZCA3LjUgaW50ZXJ2YWxzLCBrbm93biBpbiB0aGF0IG9yZGVyOiB0aGUgb25lIGR1ZVxuICAgIC8vIGZpcnN0IGlzIGxhc3QsIGJlaGluZCB0d28gdGhhdCBhcmUgbm90IGR1ZSB5ZXQuXG4gICAgY29uc3QgcmFuZG9tcyA9IFswLCAwLjUsIDFdO1xuICAgIGNvbnN0IHsgY2xvY2ssIGIgfSA9IGluc3RhbmNlcyh7XG4gICAgICByZXN5bmNJbnRlcnZhbE1zOiAxMCAqIElOVEVSVkFMLFxuICAgICAgcmFuZG9tOiAoKSA9PiByYW5kb21zLnNoaWZ0KCkgPz8gMCxcbiAgICB9KTtcbiAgICBhd2FpdCBiLnRhZ3MuZW5zdXJlKFtcImxhdGVcIiwgXCJtaWRkbGVcIiwgXCJlYXJseVwiXSk7XG4gICAgYi5tYXJrZXJzLnJlYWQubW9ja0NsZWFyKCk7XG4gICAgY29uc3QgcmVhZEF0OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTA7IGkrKykge1xuICAgICAgY2xvY2suYXQgKz0gSU5URVJWQUw7XG4gICAgICBiLm1hcmtlcnMucmVhZC5tb2NrQ2xlYXIoKTtcbiAgICAgIGF3YWl0IGIudGFncy5yZWZyZXNoKCk7XG4gICAgICBmb3IgKGNvbnN0IHRhZyBvZiBiLm1hcmtlcnMucmVhZC5tb2NrLmNhbGxzWzBdPy5bMF0gPz8gW10pIHtcbiAgICAgICAgcmVhZEF0W3RhZ10gPz89IGk7XG4gICAgICB9XG4gICAgfVxuICAgIGV4cGVjdChyZWFkQXQpLnRvRXF1YWwoeyBlYXJseTogOCwgbWlkZGxlOiA5LCBsYXRlOiAxMCB9KTtcbiAgfSk7XG5cbiAgaXQoXCJyZS1yZWFkcyBhIG1hcmtlciBpdCBsZWFybmVkIG9mIGZyb20gaXRzIG93biB3cml0ZSBvbmx5IG9uY2UgdGhhdCBpcyBkdWVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY2xvY2ssIGEgfSA9IGluc3RhbmNlcyh7IHJlc3luY0ludGVydmFsTXM6IDEwICogSU5URVJWQUwgfSk7XG4gICAgYXdhaXQgYS50YWdzLmVuc3VyZShbXCJwb3N0c1wiXSk7XG4gICAgY2xvY2suYXQgKz0gOSAqIElOVEVSVkFMO1xuICAgIGF3YWl0IGEudGFncy51cGRhdGUoW1wicG9zdHNcIl0sIHVuZGVmaW5lZCk7XG4gICAgY2xvY2suYXQgKz0gMiAqIElOVEVSVkFMO1xuICAgIGF3YWl0IGEudGFncy5yZWZyZXNoKCk7XG4gICAgLy8gUmVhZCAxMSBpbnRlcnZhbHMgYWdvLCBidXQgd3JpdHRlbiAtIHNvIGtub3duIC0gMiBpbnRlcnZhbHMgYWdvLlxuICAgIGV4cGVjdChhLm1hcmtlcnMucmVhZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICB9KTtcblxuICBpdChcInJlYWRzIGEgdGFnIHdob3NlIGZpcnN0IHJlYWQgZmFpbGVkIGFnYWluIG9uIHRoZSBuZXh0IHJlZnJlc2hcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVycm9yID0gamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgY29uc3QgeyBjbG9jaywgYSwgYiB9ID0gaW5zdGFuY2VzKCk7XG4gICAgLy8gT25seSB0aGUgbWFya2VyIHJvdyBoYXMgaXQsIHNvIG9ubHkgcmVhZGluZyB0aGUgbWFya2VyIGZpbmRzIGl0LlxuICAgIGEubG9nLnB1dC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UobmV3IEVycm9yKFwidGhyb3R0bGVkXCIpKTtcbiAgICBhd2FpdCBhLnRhZ3MudXBkYXRlKFtcInBvc3RzXCJdLCB1bmRlZmluZWQpO1xuICAgIGIubWFya2Vycy5yZWFkLm1vY2tSZWplY3RlZFZhbHVlT25jZShuZXcgRXJyb3IoXCJ0aHJvdHRsZWRcIikpO1xuICAgIGF3YWl0IGIudGFncy5lbnN1cmUoW1wicG9zdHNcIl0pO1xuICAgIGV4cGVjdChiLnRhZ3Muc3RhdGUoW1wicG9zdHNcIl0sIGNyZWF0ZWRBdCgpKSkudG9CZShcImZyZXNoXCIpO1xuICAgIGNsb2NrLmF0ICs9IElOVEVSVkFMO1xuXG4gICAgYXdhaXQgYi50YWdzLnJlZnJlc2goKTtcbiAgICBleHBlY3QoYi5tYXJrZXJzLnJlYWQpLnRvSGF2ZUJlZW5MYXN0Q2FsbGVkV2l0aChbXCJwb3N0c1wiXSk7XG4gICAgZXhwZWN0KGIudGFncy5zdGF0ZShbXCJwb3N0c1wiXSwgY3JlYXRlZEF0KCkpKS50b0JlKFwiZXhwaXJlZFwiKTtcbiAgICBlcnJvci5tb2NrUmVzdG9yZSgpO1xuICB9KTtcblxuICBpdChcImZvcmdldHMgaXRzIHRyYWNrZWQgbWFya2VycyB3aGVuIHRoZSBsb2cgaGFzIG1vcmUgcm93cyB0aGFuIG9uZSBxdWVyeSByZWFkc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBjbG9jaywgYiB9ID0gaW5zdGFuY2VzKCk7XG4gICAgYXdhaXQgYi50YWdzLmVuc3VyZShbXCJwb3N0c1wiXSk7XG4gICAgYi5sb2cucXVlcnkubW9ja1Jlc29sdmVkVmFsdWVPbmNlKHsgcm93czogW10sIHRydW5jYXRlZDogdHJ1ZSB9KTtcbiAgICBjbG9jay5hdCArPSBJTlRFUlZBTDtcbiAgICBhd2FpdCBiLnRhZ3MucmVmcmVzaCgpO1xuICAgIGV4cGVjdChiLm1hcmtlcnMucmVhZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgIGF3YWl0IGIudGFncy5lbnN1cmUoW1wicG9zdHNcIl0pO1xuICAgIGV4cGVjdChiLm1hcmtlcnMucmVhZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICB9KTtcblxuICAvLyBUcmFja2luZyBpcyBwZXIgdGFnLCBub3QgcGVyIGVudHJ5OiBzdG9yaW5nIGEgbmV3IGVudHJ5IG11c3Qgbm90IHZvdWNoIGZvclxuICAvLyBhbiBvbGRlciBvbmUgd2l0aCB0aGUgc2FtZSB0YWcuIEIncyBsb2cgY3Vyc29yIHN0YXJ0cyBhZnRlciBDJ3NcbiAgLy8gcmV2YWxpZGF0aW9uLCBzbyBvbmx5IHJlYWRpbmcgdGhlIG1hcmtlciBzaG93cyBpdC5cbiAgaXQoXCJzdGlsbCByZWFkcyBhIHRhZydzIG1hcmtlciBhZnRlciBzdG9yaW5nIGFuIGVudHJ5IHdpdGggaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY2xvY2ssIGluc3RhbmNlLCBhOiBjIH0gPSBpbnN0YW5jZXMoKTtcbiAgICBjb25zdCBrMUNyZWF0ZWRBdCA9IGNyZWF0ZWRBdCgpO1xuICAgIGF3YWl0IGMudGFncy51cGRhdGUoW1wicG9zdHNcIl0sIHVuZGVmaW5lZCk7XG4gICAgY2xvY2suYXQgKz0gMTBfMDAwO1xuICAgIC8vIFN0YXJ0ZWQgYWZ0ZXIgdGhlIHJldmFsaWRhdGlvbjogaXRzIGxvZyBjdXJzb3IgaXMgcGFzdCBDJ3Mgcm93LlxuICAgIGNvbnN0IGIgPSBpbnN0YW5jZSgpO1xuICAgIGIudGFncy50cmFjayhbXCJwb3N0c1wiXSk7XG4gICAgYXdhaXQgYi50YWdzLmVuc3VyZShbXCJwb3N0c1wiXSk7XG4gICAgZXhwZWN0KGIubWFya2Vycy5yZWFkKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChbXCJwb3N0c1wiXSk7XG4gICAgZXhwZWN0KGIudGFncy5zdGF0ZShbXCJwb3N0c1wiXSwgazFDcmVhdGVkQXQpKS50b0JlKFwiZXhwaXJlZFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJzdGlsbCByZWFkcyBhIHRhZydzIG1hcmtlciBhZnRlciBzdG9yaW5nIGFuIGVudHJ5IHdpdGggaXQgZm9sbG93aW5nIGEgZm9yZ2V0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGNsb2NrLCBhLCBiIH0gPSBpbnN0YW5jZXMoKTtcbiAgICBhd2FpdCBiLnRhZ3MuZW5zdXJlKFtcInBvc3RzXCJdKTtcbiAgICBjb25zdCBrMUNyZWF0ZWRBdCA9IGNyZWF0ZWRBdCgpO1xuICAgIC8vIFJldmFsaWRhdGVkIHdoaWxlIGBiYCB3YXMgZnJvemVuIHBhc3Qgd2hhdCB0aGUgbG9nIGNvdmVycy5cbiAgICBjbG9jay5hdCArPSBNQVhfUkVWQUxJREFUSU9OX0xPR19HQVBfTVMgKyAxO1xuICAgIGEubG9nLnB1dC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UobmV3IEVycm9yKFwibG9zdFwiKSk7XG4gICAgY29uc3QgZXJyb3IgPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwiZXJyb3JcIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICBhd2FpdCBhLnRhZ3MudXBkYXRlKFtcInBvc3RzXCJdLCB1bmRlZmluZWQpO1xuICAgIGVycm9yLm1vY2tSZXN0b3JlKCk7XG4gICAgYXdhaXQgYi50YWdzLnJlZnJlc2goKTtcbiAgICBiLnRhZ3MudHJhY2soW1wicG9zdHNcIl0pO1xuICAgIGF3YWl0IGIudGFncy5lbnN1cmUoW1wicG9zdHNcIl0pO1xuICAgIGV4cGVjdChiLnRhZ3Muc3RhdGUoW1wicG9zdHNcIl0sIGsxQ3JlYXRlZEF0KSkudG9CZShcImV4cGlyZWRcIik7XG4gIH0pO1xuXG4gIGl0KFwiYXBwbGllcyBhIGxvZyByb3cgdGhhdCBsYW5kcyB3aGlsZSB0aGUgdGFnJ3MgZmlyc3QgcmVhZCBpcyBpbiBmbGlnaHRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY2xvY2ssIGEsIGIgfSA9IGluc3RhbmNlcygpO1xuICAgIC8vIFNvbWV0aGluZyB0cmFja2VkLCBzbyB0aGUgcmVmcmVzaCBxdWVyaWVzIHRoZSBsb2cuXG4gICAgYXdhaXQgYi50YWdzLmVuc3VyZShbXCJvdGhlclwiXSk7XG4gICAgbGV0IGFuc3dlciE6IChyZWFkOiBNYXA8c3RyaW5nLCBUYWdNYXJrZXI+KSA9PiB2b2lkO1xuICAgIC8vIEFuc3dlcmVkIGJlZm9yZSB0aGUgcmV2YWxpZGF0aW9uIGJlbG93LCBhcyBhIHJlYWQgcmFjaW5nIGl0IGNhbiBiZS5cbiAgICBiLm1hcmtlcnMucmVhZC5tb2NrSW1wbGVtZW50YXRpb25PbmNlKFxuICAgICAgKCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IChhbnN3ZXIgPSByZXNvbHZlKSksXG4gICAgKTtcbiAgICBjb25zdCBmaXJzdCA9IGIudGFncy5lbnN1cmUoW1wicG9zdHNcIl0pO1xuICAgIGF3YWl0IGEudGFncy51cGRhdGUoW1wicG9zdHNcIl0sIHVuZGVmaW5lZCk7XG4gICAgY2xvY2suYXQgKz0gSU5URVJWQUw7XG4gICAgYXdhaXQgYi50YWdzLnJlZnJlc2goKTtcbiAgICBhbnN3ZXIobmV3IE1hcCgpKTtcbiAgICBhd2FpdCBmaXJzdDtcbiAgICBleHBlY3QoYi50YWdzLnN0YXRlKFtcInBvc3RzXCJdLCBjcmVhdGVkQXQoKSkpLnRvQmUoXCJleHBpcmVkXCIpO1xuICB9KTtcblxuICBpdChcImlzIHZpc2libGUgYXQgb25jZSBvbiB0aGUgaW5zdGFuY2UgdGhhdCByYW4gdXBkYXRlVGFnXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGEgfSA9IGluc3RhbmNlcygpO1xuICAgIGEudGFncy50cmFjayhbXCJwb3N0c1wiXSk7XG4gICAgYXdhaXQgYS50YWdzLnVwZGF0ZShbXCJwb3N0c1wiXSwgdW5kZWZpbmVkKTtcbiAgICBleHBlY3QoYS50YWdzLnN0YXRlKFtcInBvc3RzXCJdLCBjcmVhdGVkQXQoKSkpLnRvQmUoXCJleHBpcmVkXCIpO1xuICAgIGV4cGVjdChhLm1hcmtlcnMud3JpdGUpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICBleHBlY3QoYS5sb2cucHV0KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gIH0pO1xuXG4gIGl0KFwia2VlcHMgaXRzIHRhZ3MgdGhyb3VnaCBhIGZhaWxlZCBxdWVyeSBhbmQgYXNrcyBhZ2FpbiBuZXh0IGludGVydmFsXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IGplc3Quc3B5T24oY29uc29sZSwgXCJlcnJvclwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIGNvbnN0IHsgY2xvY2ssIGEsIGIgfSA9IGluc3RhbmNlcygpO1xuICAgIGF3YWl0IGIudGFncy5lbnN1cmUoW1wicG9zdHNcIl0pO1xuICAgIGIubWFya2Vycy5yZWFkLm1vY2tDbGVhcigpO1xuICAgIGF3YWl0IGEudGFncy51cGRhdGUoW1wicG9zdHNcIl0sIHVuZGVmaW5lZCk7XG4gICAgYi5sb2cucXVlcnkubW9ja1JlamVjdGVkVmFsdWVPbmNlKG5ldyBFcnJvcihcInRocm90dGxlZFwiKSk7XG5cbiAgICBjbG9jay5hdCArPSBJTlRFUlZBTDtcbiAgICBjb25zdCBjdXJzb3IgPSBjbG9jay5hdCAtIElOVEVSVkFMIC0gNTAwMDtcbiAgICBhd2FpdCBiLnRhZ3MucmVmcmVzaCgpO1xuICAgIGV4cGVjdChiLnRhZ3Muc3RhdGUoW1wicG9zdHNcIl0sIGNyZWF0ZWRBdCgpKSkudG9CZShcImZyZXNoXCIpO1xuICAgIGV4cGVjdChlcnJvcikudG9IYXZlQmVlbkNhbGxlZCgpO1xuXG4gICAgY2xvY2suYXQgKz0gSU5URVJWQUw7XG4gICAgYXdhaXQgYi50YWdzLnJlZnJlc2goKTtcbiAgICAvLyBGcm9tIHRoZSBzYW1lIGN1cnNvciwgc28gbm90aGluZyB3cml0dGVuIG1lYW53aGlsZSBpcyBza2lwcGVkLlxuICAgIGV4cGVjdChiLmxvZy5xdWVyeSkudG9IYXZlQmVlbkxhc3RDYWxsZWRXaXRoKGN1cnNvcik7XG4gICAgZXhwZWN0KGIudGFncy5zdGF0ZShbXCJwb3N0c1wiXSwgY3JlYXRlZEF0KCkpKS50b0JlKFwiZXhwaXJlZFwiKTtcbiAgICBleHBlY3QoYi5tYXJrZXJzLnJlYWQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgZXJyb3IubW9ja1Jlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoXCJzdGlsbCB3cml0ZXMgdGhlIG1hcmtlciB3aGVuIHRoZSBsb2cgcm93IGZhaWxzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IGplc3Quc3B5T24oY29uc29sZSwgXCJlcnJvclwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIGNvbnN0IHsgYSB9ID0gaW5zdGFuY2VzKCk7XG4gICAgYS5sb2cucHV0Lm1vY2tSZWplY3RlZFZhbHVlT25jZShuZXcgRXJyb3IoXCJ0aHJvdHRsZWRcIikpO1xuICAgIGF3YWl0IGEudGFncy51cGRhdGUoW1wicG9zdHNcIl0sIHVuZGVmaW5lZCk7XG4gICAgZXhwZWN0KGEubWFya2Vycy5yb3dzLmdldChcInBvc3RzXCIpPy5yZXZhbGlkYXRlZEF0KS50b0VxdWFsKFxuICAgICAgZXhwZWN0LmFueShOdW1iZXIpLFxuICAgICk7XG4gICAgZXhwZWN0KGVycm9yKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvcmV2YWxpZGF0aW9uIGxvZy8pLFxuICAgICAgZXhwZWN0LmFueShFcnJvciksXG4gICAgKTtcbiAgICBlcnJvci5tb2NrUmVzdG9yZSgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIkVudHJ5THJ1XCIsICgpID0+IHtcbiAgaXQoXCJldmljdHMgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgZW50cmllcyBwYXN0IGl0cyBieXRlIGJvdW5kXCIsICgpID0+IHtcbiAgICBjb25zdCBscnUgPSBuZXcgRW50cnlMcnUoMjUwKTtcbiAgICBscnUuc2V0KFwiYVwiLCBzdG9yZWQoMTAwKSk7XG4gICAgbHJ1LnNldChcImJcIiwgc3RvcmVkKDEwMCkpO1xuICAgIGxydS5nZXQoXCJhXCIpO1xuICAgIGxydS5zZXQoXCJjXCIsIHN0b3JlZCgxMDApKTtcbiAgICBleHBlY3QobHJ1LmdldChcImJcIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3QobHJ1LmdldChcImFcIikpLnRvQmVEZWZpbmVkKCk7XG4gICAgZXhwZWN0KGxydS5nZXQoXCJjXCIpKS50b0JlRGVmaW5lZCgpO1xuICB9KTtcblxuICBpdChcImRvZXMgbm90IGtlZXAgYW4gZW50cnkgbGFyZ2VyIHRoYW4gdGhlIHdob2xlIGJvdW5kXCIsICgpID0+IHtcbiAgICBjb25zdCBscnUgPSBuZXcgRW50cnlMcnUoNTApO1xuICAgIGxydS5zZXQoXCJhXCIsIHN0b3JlZCgxMDApKTtcbiAgICBleHBlY3QobHJ1LnNpemUpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIGl0KFwiYWNjb3VudHMgZm9yIGEgcmVwbGFjZWQgZW50cnlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGxydSA9IG5ldyBFbnRyeUxydSgyNTApO1xuICAgIGxydS5zZXQoXCJhXCIsIHN0b3JlZCgyMDApKTtcbiAgICBscnUuc2V0KFwiYVwiLCBzdG9yZWQoMTApKTtcbiAgICBscnUuc2V0KFwiYlwiLCBzdG9yZWQoMjAwKSk7XG4gICAgZXhwZWN0KGxydS5zaXplKS50b0JlKDIpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcImVudHJpZXNcIiwgKCkgPT4ge1xuICBpdChcInJlYWRzIGEgc3RyZWFtIHRvIHRoZSBlbmRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgcmVhZFN0cmVhbShzdHJlYW1PZihcImFiXCIsIFwiY2RcIikpO1xuICAgIGV4cGVjdChuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYnl0ZXMpKS50b0JlKFwiYWJjZFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJyZWplY3RzIGEgc3RyZWFtIHRoYXQgZXJyb3JzIHBhcnQtd2F5XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBmYWlsaW5nID0gbmV3IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+KHtcbiAgICAgIHN0YXJ0KGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KFsxXSkpO1xuICAgICAgICBjb250cm9sbGVyLmVycm9yKG5ldyBFcnJvcihcInJlbmRlciBmYWlsZWRcIikpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgICBhd2FpdCBleHBlY3QocmVhZFN0cmVhbShmYWlsaW5nKSkucmVqZWN0cy50b1Rocm93KFwicmVuZGVyIGZhaWxlZFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJoYW5kcyBldmVyeSByZWFkZXIgaXRzIG93biBzdHJlYW1cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVudHJ5OiBDYWNoZUVudHJ5ID0ge1xuICAgICAgdmFsdWU6IHN0cmVhbU9mKFwicGF5bG9hZFwiKSxcbiAgICAgIHRhZ3M6IFtcInRcIl0sXG4gICAgICBzdGFsZTogMSxcbiAgICAgIHRpbWVzdGFtcDogMixcbiAgICAgIGV4cGlyZTogMyxcbiAgICAgIHJldmFsaWRhdGU6IDQsXG4gICAgfTtcbiAgICBjb25zdCBrZXB0ID0gYXdhaXQgc3RvcmVkRW50cnlPZihQcm9taXNlLnJlc29sdmUoZW50cnkpKTtcbiAgICBjb25zdCBmaXJzdCA9IGNhY2hlRW50cnlPZihrZXB0KTtcbiAgICBjb25zdCBzZWNvbmQgPSBjYWNoZUVudHJ5T2Yoa2VwdCwgLTEpO1xuICAgIGV4cGVjdChzZWNvbmQucmV2YWxpZGF0ZSkudG9CZSgtMSk7XG4gICAgZXhwZWN0KGZpcnN0LnRhZ3MpLnRvRXF1YWwoW1widFwiXSk7XG4gICAgZXhwZWN0KG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShhd2FpdCByZWFkU3RyZWFtKGZpcnN0LnZhbHVlKSkpLnRvQmUoXG4gICAgICBcInBheWxvYWRcIixcbiAgICApO1xuICAgIGV4cGVjdChuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYXdhaXQgcmVhZFN0cmVhbShzZWNvbmQudmFsdWUpKSkudG9CZShcbiAgICAgIFwicGF5bG9hZFwiLFxuICAgICk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiUGVuZGluZ1NldHNcIiwgKCkgPT4ge1xuICBpdChcImhvbGRzIGEgZ2V0IHVudGlsIHRoZSBzZXQgZm9yIGl0cyBrZXkgZW5kc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcGVuZGluZyA9IG5ldyBQZW5kaW5nU2V0cygpO1xuICAgIGNvbnN0IGRvbmUgPSBwZW5kaW5nLmJlZ2luKFwia1wiKTtcbiAgICBsZXQgd2FpdGVkID0gZmFsc2U7XG4gICAgY29uc3Qgd2FpdCA9IHBlbmRpbmcud2FpdChcImtcIikudGhlbigoKSA9PiAod2FpdGVkID0gdHJ1ZSkpO1xuICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIGV4cGVjdCh3YWl0ZWQpLnRvQmUoZmFsc2UpO1xuICAgIGRvbmUoKTtcbiAgICBhd2FpdCB3YWl0O1xuICAgIGV4cGVjdCh3YWl0ZWQpLnRvQmUodHJ1ZSk7XG4gICAgLy8gTm90aGluZyBwZW5kaW5nOiBubyB3YWl0IGF0IGFsbC5cbiAgICBhd2FpdCBwZW5kaW5nLndhaXQoXCJrXCIpO1xuICAgIGF3YWl0IHBlbmRpbmcud2FpdChcIm90aGVyXCIpO1xuICB9KTtcbn0pO1xuIl19
761
+ describe("sharedTagManifest", () => {
762
+ it("bounds each revalidation table request, failing it once timed out", () => {
763
+ const global = globalThis;
764
+ process.env.CDK_NEXTJS_REVALIDATION_TABLE_NAME = "table";
765
+ try {
766
+ (0, use_cache_common_1.sharedTagManifest)();
767
+ // A timeout that only warns leaves a request on a dead connection, and
768
+ // every request waiting on the refresh, hanging.
769
+ expect(client_dynamodb_1.DynamoDBClient).toHaveBeenCalledWith(expect.objectContaining({
770
+ requestHandler: {
771
+ requestTimeout: use_cache_common_1.TAG_TABLE_REQUEST_TIMEOUT_MS,
772
+ throwOnRequestTimeout: true,
773
+ socketTimeout: use_cache_common_1.TAG_TABLE_REQUEST_TIMEOUT_MS,
774
+ },
775
+ }));
776
+ }
777
+ finally {
778
+ delete process.env.CDK_NEXTJS_REVALIDATION_TABLE_NAME;
779
+ delete global[tag_manifest_1.TAG_MANIFEST_SYMBOL];
780
+ }
781
+ });
782
+ });
783
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlLWNhY2hlLWNvbW1vbi50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXIvdXNlLWNhY2hlLWNvbW1vbi50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0RBQXNEO0FBQ3RELElBQUksQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUV0Qyw4REFBMEQ7QUFFMUQsdURBTzJCO0FBQzNCLHlEQVU0QjtBQUM1QiwwREFBOEQ7QUFFOUQsK0RBQStEO0FBQy9ELFNBQVMsV0FBVyxDQUFDLE9BQU8sSUFBSSxHQUFHLEVBQXFCO0lBQ3RELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQWMsRUFBRSxFQUFFO1FBQzVDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFxQixDQUFDO1FBQzNDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdkIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixJQUFJLEdBQUc7Z0JBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxDQUNuQixLQUFLLEVBQUUsR0FBVyxFQUFFLEVBQVUsRUFBRSxTQUErQixFQUFFLEVBQUU7UUFDakUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsR0FBRyxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDekIsQ0FBQzthQUFNLENBQUM7WUFDTixHQUFHLENBQUMs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QUNULE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsQ0FBQztZQUN0RCxPQUFPLE1BQU0sQ0FBQyxrQ0FBbUIsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5qZXN0Lm1vY2soXCJAYXdzLXNkay9jbGllbnQtZHluYW1vZGJcIik7XG5cbmltcG9ydCB7IER5bmFtb0RCQ2xpZW50IH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1keW5hbW9kYlwiO1xuaW1wb3J0IHR5cGUgeyBDYWNoZUVudHJ5IH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvbGliL2NhY2hlLWhhbmRsZXJzL3R5cGVzXCI7XG5pbXBvcnQge1xuICBNQVhfUkVWQUxJREFUSU9OX0xPR19HQVBfTVMsXG4gIFJldmFsaWRhdGlvbkxvZyxcbiAgUmV2YWxpZGF0aW9uTG9nUm93LFxuICBUYWdNYXJrZXIsXG4gIFRhZ01hcmtlclRhYmxlLFxuICBUcmFja2VkVGFnTWFya2Vycyxcbn0gZnJvbSBcIi4vYXdzLWNhY2hlLXN0b3JlXCI7XG5pbXBvcnQge1xuICBjYWNoZUVudHJ5T2YsXG4gIEVudHJ5THJ1LFxuICBub3csXG4gIFBlbmRpbmdTZXRzLFxuICByZWFkU3RyZWFtLFxuICBzaGFyZWRUYWdNYW5pZmVzdCxcbiAgU3RvcmVkRW50cnksXG4gIHN0b3JlZEVudHJ5T2YsXG4gIFRBR19UQUJMRV9SRVFVRVNUX1RJTUVPVVRfTVMsXG59IGZyb20gXCIuL3VzZS1jYWNoZS1jb21tb25cIjtcbmltcG9ydCB7IFRBR19NQU5JRkVTVF9TWU1CT0wgfSBmcm9tIFwiLi4vcnVudGltZS90YWctbWFuaWZlc3RcIjtcblxuLyoqIEEgYFRhZ01hcmtlclRhYmxlYCBvdmVyIGEgcGxhaW4gbWFwLCBjb3VudGluZyBpdHMgY2FsbHMuICovXG5mdW5jdGlvbiBmYWtlTWFya2Vycyhyb3dzID0gbmV3IE1hcDxzdHJpbmcsIFRhZ01hcmtlcj4oKSkge1xuICBjb25zdCByZWFkID0gamVzdC5mbihhc3luYyAodGFnczogc3RyaW5nW10pID0+IHtcbiAgICBjb25zdCBmb3VuZCA9IG5ldyBNYXA8c3RyaW5nLCBUYWdNYXJrZXI+KCk7XG4gICAgZm9yIChjb25zdCB0YWcgb2YgdGFncykge1xuICAgICAgY29uc3Qgcm93ID0gcm93cy5nZXQodGFnKTtcbiAgICAgIGlmIChyb3cpIGZvdW5kLnNldCh0YWcsIHsgLi4ucm93IH0pO1xuICAgIH1cbiAgICByZXR1cm4gZm91bmQ7XG4gIH0pO1xuICBjb25zdCB3cml0ZSA9IGplc3QuZm4oXG4gICAgYXN5bmMgKHRhZzogc3RyaW5nLCBhdDogbnVtYmVyLCBkdXJhdGlvbnM/OiB7IGV4cGlyZT86IG51bWJlciB9KSA9PiB7XG4gICAgICBjb25zdCByb3cgPSByb3dzLmdldCh0YWcpID8/IHt9O1xuICAgICAgaWYgKCFkdXJhdGlvbnMpIHtcbiAgICAgICAgcm93LnJldmFsaWRhdGVkQXQgPSBhdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvdy5zdGFsZUF0ID0gYXQ7XG4gICAgICAgIGlmIChkdXJhdGlvbnMuZXhwaXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByb3cuZXhwaXJlZEF0ID0gYXQgKyBkdXJhdGlvbnMuZXhwaXJlICogMTAwMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcm93cy5zZXQodGFnLCByb3cpO1xuICAgICAgLy8gYFJldHVyblZhbHVlczogXCJBTExfTkVXXCJgLCBhcyB0aGUgcmVhbCB0YWJsZSBhbnN3ZXJzLlxuICAgICAgcmV0dXJuIHsgLi4ucm93IH07XG4gICAgfSxcbiAgKTtcbiAgcmV0dXJuIHtcbiAgICByb3dzLFxuICAgIHJlYWQsXG4gICAgd3JpdGUsXG4gICAgdGFibGU6IHsgcmVhZCwgd3JpdGUgfSBhcyB1bmtub3duIGFzIFRhZ01hcmtlclRhYmxlLFxuICB9O1xufVxuXG4vKipcbiAqIEEgYFJldmFsaWRhdGlvbkxvZ2Agb3ZlciBhIHBsYWluIGFycmF5LCBjb3VudGluZyBpdHMgY2FsbHMuIEl0cyBxdWVyeSByZXR1cm5zXG4gKiB3aGF0IHRoZSByZWFsIG9uZSB3b3VsZDogZXZlcnkgcm93IGF0IG9yIGFmdGVyIGBzaW5jZWAsIG9sZGVzdCBmaXJzdC5cbiAqL1xuZnVuY3Rpb24gZmFrZUxvZyhyb3dzOiBSZXZhbGlkYXRpb25Mb2dSb3dbXSA9IFtdKSB7XG4gIGNvbnN0IHB1dCA9IGplc3QuZm4oYXN5bmMgKHRhZzogc3RyaW5nLCBhdDogbnVtYmVyLCBtYXJrZXI6IFRhZ01hcmtlcikgPT4ge1xuICAgIHJvd3MucHVzaCh7XG4gICAgICBzazogYCR7U3RyaW5nKGF0KS5wYWRTdGFydCgxNSwgXCIwXCIpfSMke3RhZ31gLFxuICAgICAgYXQsXG4gICAgICB0YWcsXG4gICAgICBtYXJrZXIsXG4gICAgfSk7XG4gIH0pO1xuICBjb25zdCBxdWVyeSA9IGplc3QuZm4oYXN5bmMgKHNpbmNlOiBudW1iZXIpID0+ICh7XG4gICAgcm93czogcm93cy5maWx0ZXIoKHJvdykgPT4gcm93LmF0ID49IHNpbmNlKS5zb3J0KChhLCBiKSA9PiBhLmF0IC0gYi5hdCksXG4gICAgdHJ1bmNhdGVkOiBmYWxzZSxcbiAgfSkpO1xuICByZXR1cm4ge1xuICAgIHJvd3MsXG4gICAgcHV0LFxuICAgIHF1ZXJ5LFxuICAgIGxvZzogeyBwdXQsIHF1ZXJ5IH0gYXMgdW5rbm93biBhcyBSZXZhbGlkYXRpb25Mb2csXG4gIH07XG59XG5cbi8qKiBBIHdhbGwgY2xvY2sgYSB0ZXN0IG1vdmVzIGJ5IGhhbmQuICovXG5mdW5jdGlvbiBmYWtlQ2xvY2soc3RhcnQgPSAxXzAwMF8wMDApIHtcbiAgY29uc3QgY2xvY2sgPSB7IGF0OiBzdGFydCwgbm93OiAoKSA9PiBjbG9jay5hdCB9O1xuICByZXR1cm4gY2xvY2s7XG59XG5cbmZ1bmN0aW9uIHN0cmVhbU9mKC4uLmNodW5rczogc3RyaW5nW10pOiBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5PiB7XG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgIHN0YXJ0KGNvbnRyb2xsZXIpIHtcbiAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoY2h1bmspKTtcbiAgICAgIH1cbiAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICB9LFxuICB9KTtcbn1cblxuZnVuY3Rpb24gc3RvcmVkKGJ5dGVzOiBudW1iZXIsIGV4dHJhOiBQYXJ0aWFsPFN0b3JlZEVudHJ5PiA9IHt9KTogU3RvcmVkRW50cnkge1xuICByZXR1cm4ge1xuICAgIHZhbHVlOiBuZXcgVWludDhBcnJheShieXRlcyksXG4gICAgdGFnczogW10sXG4gICAgc3RhbGU6IDMwMCxcbiAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgZXhwaXJlOiAzNjAwLFxuICAgIHJldmFsaWRhdGU6IDkwMCxcbiAgICAuLi5leHRyYSxcbiAgfTtcbn1cblxuZGVzY3JpYmUoXCJUcmFja2VkVGFnTWFya2Vyc1wiLCAoKSA9PiB7XG4gIGl0KFwicmVhZHMgYSB0YWcgdGhlIGZpcnN0IHRpbWUgaXQgaXMgbmVlZGVkLCBhbmQgbm90IGFnYWluXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtYXJrZXJzID0gZmFrZU1hcmtlcnMobmV3IE1hcChbW1wiYVwiLCB7IHJldmFsaWRhdGVkQXQ6IDUwIH1dXSkpO1xuICAgIGNvbnN0IHRhZ3MgPSBuZXcgVHJhY2tlZFRhZ01hcmtlcnMoe1xuICAgICAgbWFya2VyczogbWFya2Vycy50YWJsZSxcbiAgICAgIGxvZzogZmFrZUxvZygpLmxvZyxcbiAgICB9KTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKFt0YWdzLmVuc3VyZShbXCJhXCIsIFwiYlwiXSksIHRhZ3MuZW5zdXJlKFtcImFcIiwgXCJiXCJdKV0pO1xuICAgIGF3YWl0IHRhZ3MuZW5zdXJlKFtcImFcIiwgXCJiXCJdKTtcblxuICAgIGV4cGVjdChtYXJrZXJzLnJlYWQpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICBleHBlY3QobWFya2Vycy5yZWFkKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChbXCJhXCIsIFwiYlwiXSk7XG4gICAgZXhwZWN0KHRhZ3Muc3RhdGUoW1wiYVwiXSwgNDApKS50b0JlKFwiZXhwaXJlZFwiKTtcbiAgICBleHBlY3QodGFncy5zdGF0ZShbXCJhXCJdLCA2MCkpLnRvQmUoXCJmcmVzaFwiKTtcbiAgICBleHBlY3QodGFncy5zdGF0ZShbXCJiXCJdLCA0MCkpLnRvQmUoXCJmcmVzaFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJhcHBsaWVzIGl0cyBvd24gcmV2YWxpZGF0aW9uIGF0IG9uY2UsIGFuZCB3cml0ZXMgaXQgb25jZSBmb3IgYm90aCBoYW5kbGVyc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbWFya2VycyA9IGZha2VNYXJrZXJzKCk7XG4gICAgY29uc3QgdGFncyA9IG5ldyBUcmFja2VkVGFnTWFya2Vycyh7XG4gICAgICBtYXJrZXJzOiBtYXJrZXJzLnRhYmxlLFxuICAgICAgbG9nOiBmYWtlTG9nKCkubG9nLFxuICAgIH0pO1xuICAgIGNvbnN0IGNyZWF0ZWRBdCA9IERhdGUubm93KCkgLSAxMDAwO1xuXG4gICAgLy8gV2hhdCBOZXh0LmpzIGRvZXM6IGB1cGRhdGVUYWdzYCBvbiB0aGUgZGVmYXVsdCBhbmQgdGhlIHJlbW90ZSBoYW5kbGVyLlxuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRhZ3MudXBkYXRlKFtcImFcIiwgXCJiXCJdLCB7IGV4cGlyZTogMCB9KSxcbiAgICAgIHRhZ3MudXBkYXRlKFtcImFcIiwgXCJiXCJdLCB7IGV4cGlyZTogMCB9KSxcbiAgICBdKTtcblxuICAgIGV4cGVjdChtYXJrZXJzLndyaXRlKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG4gICAgZXhwZWN0KHRhZ3Muc3RhdGUoW1wiYlwiXSwgY3JlYXRlZEF0KSkudG9CZShcImV4cGlyZWRcIik7XG4gICAgZXhwZWN0KG1hcmtlcnMucm93cy5nZXQoXCJhXCIpKS50b0VxdWFsKHtcbiAgICAgIHN0YWxlQXQ6IGV4cGVjdC5hbnkoTnVtYmVyKSxcbiAgICAgIGV4cGlyZWRBdDogZXhwZWN0LmFueShOdW1iZXIpLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcImdpdmVzIGEgbGF0ZXIgcmV2YWxpZGF0aW9uIGl0cyBvd24gbWFya2VyIHdoaWxlIHRoZSBmaXJzdCBpcyBzdGlsbCB3cml0aW5nXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtYXJrZXJzID0gZmFrZU1hcmtlcnMoKTtcbiAgICBsZXQgcmVsZWFzZSA9ICgpID0+IHt9O1xuICAgIG1hcmtlcnMud3JpdGUubW9ja0ltcGxlbWVudGF0aW9uT25jZShcbiAgICAgIChfdGFnLCBhdCkgPT5cbiAgICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICByZWxlYXNlID0gKCkgPT4gcmVzb2x2ZSh7IHJldmFsaWRhdGVkQXQ6IGF0IH0pO1xuICAgICAgICB9KSxcbiAgICApO1xuICAgIGNvbnN0IHRhZ3MgPSBuZXcgVHJhY2tlZFRhZ01hcmtlcnMoe1xuICAgICAgbWFya2VyczogbWFya2Vycy50YWJsZSxcbiAgICAgIGxvZzogZmFrZUxvZygpLmxvZyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGZpcnN0ID0gdGFncy51cGRhdGUoW1wieFwiXSwgdW5kZWZpbmVkKTtcbiAgICAvLyBBbm90aGVyIHJlcXVlc3QncyBgcmV2YWxpZGF0ZVRhZygneCcpYCwgYSB0dXJuIGxhdGVyLlxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRJbW1lZGlhdGUocmVzb2x2ZSkpO1xuICAgIGNvbnN0IHNlY29uZCA9IHRhZ3MudXBkYXRlKFtcInhcIl0sIHVuZGVmaW5lZCk7XG4gICAgcmVsZWFzZSgpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtmaXJzdCwgc2Vjb25kXSk7XG5cbiAgICBleHBlY3QobWFya2Vycy53cml0ZSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICAgIGNvbnN0IFtbLCBmaXJzdEF0XSwgWywgc2Vjb25kQXRdXSA9IG1hcmtlcnMud3JpdGUubW9jay5jYWxscztcbiAgICBleHBlY3Qoc2Vjb25kQXQpLnRvQmVHcmVhdGVyVGhhbihmaXJzdEF0KTtcbiAgfSk7XG5cbiAgaXQoXCJwdXRzIGEgc2xvdyBsb2cgcm93IGFnYWluIHVuZGVyIGEgZnJlc2ggdGltZXN0YW1wLCBzbyByZWFkZXJzIHNlZSBpdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY2xvY2sgPSBmYWtlQ2xvY2soKTtcbiAgICBjb25zdCBsb2cgPSBmYWtlTG9nKCk7XG4gICAgbG9nLnB1dC5tb2NrSW1wbGVtZW50YXRpb25PbmNlKGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFJlYWRlcnMnIGN1cnNvcnMgaGF2ZSBtb3ZlZCBwYXN0IHRoZSByb3cgYnkgdGhlIHRpbWUgaXQgc2hvd3MuXG4gICAgICBjbG9jay5hdCArPSAxMF8wMDA7XG4gICAgfSk7XG4gICAgY29uc3QgdGFncyA9IG5ldyBUcmFja2VkVGFnTWFya2Vycyh7XG4gICAgICBtYXJrZXJzOiBmYWtlTWFya2VycygpLnRhYmxlLFxuICAgICAgbG9nOiBsb2cubG9nLFxuICAgICAgY2xvY2s6IGNsb2NrLm5vdyxcbiAgICB9KTtcblxuICAgIGV4cGVjdChhd2FpdCB0YWdzLnVwZGF0ZShbXCJ4XCJdLCB1bmRlZmluZWQpKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChsb2cucHV0Lm1vY2suY2FsbHMubWFwKChbLCBhdF0pID0+IGF0KSkudG9FcXVhbChbXG4gICAgICAxXzAwMF8wMDAsIDFfMDEwXzAwMCxcbiAgICBdKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXBvcnRzIGEgbG9nIHJvdyBzbG93IHR3aWNlIGFzIG5vdCByZWNvcmRlZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY2xvY2sgPSBmYWtlQ2xvY2soKTtcbiAgICBjb25zdCBsb2cgPSBmYWtlTG9nKCk7XG4gICAgbG9nLnB1dC5tb2NrSW1wbGVtZW50YXRpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgY2xvY2suYXQgKz0gMTBfMDAwO1xuICAgIH0pO1xuICAgIGNvbnN0IGVycm9yID0gamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgY29uc3QgdGFncyA9IG5ldyBUcmFja2VkVGFnTWFya2Vycyh7XG4gICAgICBtYXJrZXJzOiBmYWtlTWFya2VycygpLnRhYmxlLFxuICAgICAgbG9nOiBsb2cubG9nLFxuICAgICAgY2xvY2s6IGNsb2NrLm5vdyxcbiAgICB9KTtcblxuICAgIGV4cGVjdChhd2FpdCB0YWdzLnVwZGF0ZShbXCJ4XCJdLCB1bmRlZmluZWQpKS50b0JlKGZhbHNlKTtcbiAgICBleHBlY3QobG9nLnB1dCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICAgIGVycm9yLm1vY2tSZXN0b3JlKCk7XG4gIH0pO1xuXG4gIGl0KFwidHJhY2tzIHRoZSB3aG9sZSByb3cgaXRzIG93biB3cml0ZSByZXR1cm5zLCBub3QganVzdCB3aGF0IGl0IHNldFwiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gQW5vdGhlciBpbnN0YW5jZSdzIGB1cGRhdGVUYWdgIGZvciBhIHRhZyB0aGlzIG9uZSBkb2VzIG5vdCB0cmFjayB5ZXQuXG4gICAgY29uc3QgY3JlYXRlZEF0ID0gRGF0ZS5ub3coKSAtIDEwMDA7XG4gICAgY29uc3QgbWFya2VycyA9IGZha2VNYXJrZXJzKFxuICAgICAgbmV3IE1hcChbW1wicG9zdHNcIiwgeyByZXZhbGlkYXRlZEF0OiBjcmVhdGVkQXQgKyA1MDAgfV1dKSxcbiAgICApO1xuICAgIGNvbnN0IHRhZ3MgPSBuZXcgVHJhY2tlZFRhZ01hcmtlcnMoe1xuICAgICAgbWFya2VyczogbWFya2Vycy50YWJsZSxcbiAgICAgIGxvZzogZmFrZUxvZygpLmxvZyxcbiAgICB9KTtcblxuICAgIGF3YWl0IHRhZ3MudXBkYXRlKFtcInBvc3RzXCJdLCB7IGV4cGlyZTogMzYwMCB9KTtcblxuICAgIC8vIE9sZGVyIHRoYW4gdGhhdCBgdXBkYXRlVGFnYCwgc28gYSBibG9ja2luZyByZW5kZXIsIG5vdCBzdGFsZS13aGlsZS1yZXZhbGlkYXRlLlxuICAgIGV4cGVjdCh0YWdzLnN0YXRlKFtcInBvc3RzXCJdLCBjcmVhdGVkQXQpKS50b0JlKFwiZXhwaXJlZFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJtYXJrcyBhIHByb2ZpbGUncyByZXZhbGlkYXRpb24gc3RhbGUgdW50aWwgaXRzIGV4cGlyZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdGFncyA9IG5ldyBUcmFja2VkVGFnTWFya2Vycyh7fSk7XG4gICAgY29uc3QgY3JlYXRlZEF0ID0gRGF0ZS5ub3coKSAtIDEwMDA7XG4gICAgYXdhaXQgdGFncy51cGRhdGUoW1wiYVwiXSwgeyBleHBpcmU6IDM2MDAgfSk7XG4gICAgZXhwZWN0KHRhZ3Muc3RhdGUoW1wiYVwiXSwgY3JlYXRlZEF0KSkudG9CZShcInN0YWxlXCIpO1xuICAgIC8vIE5vdCBhbiBleHBpcmF0aW9uIHlldCwgc28gaW1wbGljaXQgdGFncyBhcmUgbm90IGFmZmVjdGVkIGVpdGhlci5cbiAgICBleHBlY3QodGFncy5leHBpcmF0aW9uKFtcImFcIl0pKS50b0JlKDApO1xuICB9KTtcblxuICAvLyBOZXh0LmpzIHN0YW1wcyBlbnRyaWVzIHdpdGggYHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZS5ub3coKWAsXG4gIC8vIHdoaWNoIGNhbiBydW4gYmVoaW5kIGBEYXRlLm5vdygpYC4gQSBtYXJrZXIgc3RhbXBlZCBvbiB0aGUgd2FsbCBjbG9jayB3b3VsZFxuICAvLyB0aGVuIHBvc3RkYXRlIGFuIGVudHJ5IHJlZ2VuZXJhdGVkIHJpZ2h0IGFmdGVyIHRoZSByZXZhbGlkYXRpb24sIHdoaWNoXG4gIC8vIHdvdWxkIHJlYWQgYXMgcmV2YWxpZGF0ZWQgYWdhaW4sIGFuZCBhZ2Fpbi5cbiAgaXQoXCJzdGFtcHMgbWFya2VycyBvbiB0aGUgY2xvY2sgZW50cmllcyBhcmUgc3RhbXBlZCB3aXRoXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB3YWxsID0gamVzdC5zcHlPbihEYXRlLCBcIm5vd1wiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gbm93KCkgKyA1MDApO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0YWdzID0gbmV3IFRyYWNrZWRUYWdNYXJrZXJzKHt9KTtcbiAgICAgIGF3YWl0IHRhZ3MudXBkYXRlKFtcImFcIl0sIHVuZGVmaW5lZCk7XG4gICAgICBjb25zdCByZWdlbmVyYXRlZCA9IG5vdygpICsgMTtcbiAgICAgIGV4cGVjdCh0YWdzLnN0YXRlKFtcImFcIl0sIHJlZ2VuZXJhdGVkKSkudG9CZShcImZyZXNoXCIpO1xuICAgICAgZXhwZWN0KHRhZ3Muc3RhdGUoW1wiYVwiXSwgcmVnZW5lcmF0ZWQgLSAxMDApKS50b0JlKFwiZXhwaXJlZFwiKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgd2FsbC5tb2NrUmVzdG9yZSgpO1xuICAgIH1cbiAgfSk7XG5cbiAgaXQoXCJyZXBvcnRzIHRoZSBsYXRlc3QgcGFzdCBleHBpcmF0aW9uIG9mIGltcGxpY2l0IHRhZ3NcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG1hcmtlcnMgPSBmYWtlTWFya2VycyhcbiAgICAgIG5ldyBNYXA8c3RyaW5nLCBUYWdNYXJrZXI+KFtcbiAgICAgICAgW1wiX05fVF8vYVwiLCB7IHJldmFsaWRhdGVkQXQ6IDEwMCB9XSxcbiAgICAgICAgW1wiX05fVF8vYlwiLCB7IHN0YWxlQXQ6IDE1MCwgZXhwaXJlZEF0OiAyMDAgfV0sXG4gICAgICAgIFtcIl9OX1RfL2NcIiwgeyBzdGFsZUF0OiAxNTAsIGV4cGlyZWRBdDogRGF0ZS5ub3coKSArIDYwXzAwMCB9XSxcbiAgICAgIF0pLFxuICAgICk7XG4gICAgY29uc3QgdGFncyA9IG5ldyBUcmFja2VkVGFnTWFya2Vycyh7XG4gICAgICBtYXJrZXJzOiBtYXJrZXJzLnRhYmxlLFxuICAgICAgbG9nOiBmYWtlTG9nKCkubG9nLFxuICAgIH0pO1xuICAgIGF3YWl0IHRhZ3MuZW5zdXJlKFtcIl9OX1RfL2FcIiwgXCJfTl9UXy9iXCIsIFwiX05fVF8vY1wiLCBcIl9OX1RfL2RcIl0pO1xuICAgIGV4cGVjdCh0YWdzLmV4cGlyYXRpb24oW1wiX05fVF8vYVwiLCBcIl9OX1RfL2JcIiwgXCJfTl9UXy9jXCJdKSkudG9CZSgyMDApO1xuICAgIGV4cGVjdCh0YWdzLmV4cGlyYXRpb24oW1wiX05fVF8vZFwiXSkpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIGl0KFwiZG9lcyBub3QgbGV0IGFuIGV2ZW50dWFsbHkgY29uc2lzdGVudCByZWFkIHVuZG8gaXRzIG93biB3cml0ZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbWFya2VycyA9IGZha2VNYXJrZXJzKCk7XG4gICAgY29uc3QgdGFncyA9IG5ldyBUcmFja2VkVGFnTWFya2Vycyh7XG4gICAgICBtYXJrZXJzOiBtYXJrZXJzLnRhYmxlLFxuICAgICAgbG9nOiBmYWtlTG9nKCkubG9nLFxuICAgICAgcmVmcmVzaEludGVydmFsTXM6IDAsXG4gICAgfSk7XG4gICAgYXdhaXQgdGFncy51cGRhdGUoW1wiYVwiXSwgdW5kZWZpbmVkKTtcbiAgICAvLyBUaGUgcmVhZCBkb2VzIG5vdCBzaG93IHRoZSB3cml0ZSB5ZXQuXG4gICAgbWFya2Vycy5yb3dzLmNsZWFyKCk7XG4gICAgYXdhaXQgdGFncy5yZWZyZXNoKCk7XG4gICAgZXhwZWN0KHRhZ3Muc3RhdGUoW1wiYVwiXSwgRGF0ZS5ub3coKSAtIDEwMDApKS50b0JlKFwiZXhwaXJlZFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJ0cmVhdHMgYSBmYWlsZWQgcmVhZCBhcyBmcmVzaCBhbmQgdHJpZXMgYWdhaW4gb24gdGhlIG5leHQgcmVmcmVzaFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbWFya2VycyA9IGZha2VNYXJrZXJzKG5ldyBNYXAoW1tcImFcIiwgeyByZXZhbGlkYXRlZEF0OiA1MCB9XV0pKTtcbiAgICBjb25zdCBlcnJvciA9IGplc3Quc3B5T24oY29uc29sZSwgXCJlcnJvclwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIG1hcmtlcnMucmVhZC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UobmV3IEVycm9yKFwidGhyb3R0bGVkXCIpKTtcbiAgICBjb25zdCB0YWdzID0gbmV3IFRyYWNrZWRUYWdNYXJrZXJzKHtcbiAgICAgIG1hcmtlcnM6IG1hcmtlcnMudGFibGUsXG4gICAgICBsb2c6IGZha2VMb2coKS5sb2csXG4gICAgICByZWZyZXNoSW50ZXJ2YWxNczogMCxcbiAgICB9KTtcblxuICAgIGF3YWl0IHRhZ3MuZW5zdXJlKFtcImFcIl0pO1xuICAgIGV4cGVjdCh0YWdzLnN0YXRlKFtcImFcIl0sIDQwKSkudG9CZShcImZyZXNoXCIpO1xuICAgIGF3YWl0IHRhZ3MucmVmcmVzaCgpO1xuICAgIGV4cGVjdCh0YWdzLnN0YXRlKFtcImFcIl0sIDQwKSkudG9CZShcImV4cGlyZWRcIik7XG4gICAgZXJyb3IubW9ja1Jlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoXCJmb3JnZXRzIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIHRhZyBwYXN0IGl0cyBib3VuZCwgYW5kIHJlYWRzIGl0IGFnYWluXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtYXJrZXJzID0gZmFrZU1hcmtlcnMoKTtcbiAgICBjb25zdCB0YWdzID0gbmV3IFRyYWNrZWRUYWdNYXJrZXJzKHtcbiAgICAgIG1hcmtlcnM6IG1hcmtlcnMudGFibGUsXG4gICAgICBsb2c6IGZha2VMb2coKS5sb2csXG4gICAgICBtYXhUcmFja2VkVGFnczogMixcbiAgICB9KTtcbiAgICBhd2FpdCB0YWdzLmVuc3VyZShbXCJhXCJdKTtcbiAgICBhd2FpdCB0YWdzLmVuc3VyZShbXCJiXCJdKTtcbiAgICBhd2FpdCB0YWdzLmVuc3VyZShbXCJhXCJdKTsgLy8gYGJgIGlzIG5vdyB0aGUgb2xkZXN0XG4gICAgYXdhaXQgdGFncy5lbnN1cmUoW1wiY1wiXSk7XG4gICAgbWFya2Vycy5yZWFkLm1vY2tDbGVhcigpO1xuXG4gICAgYXdhaXQgdGFncy5lbnN1cmUoW1wiYVwiLCBcImJcIiwgXCJjXCJdKTtcbiAgICBleHBlY3QobWFya2Vycy5yZWFkKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChbXCJiXCJdKTtcbiAgfSk7XG5cbiAgLy8gRXZlcnkgcGF0aCBpcyBhIHRhZyBvZiBpdHMgb3duLCBzbyBhbiBhcHAgb2YgMTAwMCB0YWdnZWQgcGFnZXMgbmVlZHMgMjAwMDpcbiAgLy8gdHJhY2tlZCAxMDAwIGF0IG1vc3QsIGhhbGYgaXRzIHJlcXVlc3RzIHJlLXJlYWQgYW4gZXZpY3RlZCBtYXJrZXIuXG4gIGl0KFwia2VlcHMgMjAwMCB0YWdzIGEgcGFnZSBlYWNoIHRyYWNrZWQsIHdpdGhvdXQgcmVhZGluZyB0aGVtIGFnYWluXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBtYXJrZXJzID0gZmFrZU1hcmtlcnMoKTtcbiAgICBjb25zdCB0YWdzID0gbmV3IFRyYWNrZWRUYWdNYXJrZXJzKHtcbiAgICAgIG1hcmtlcnM6IG1hcmtlcnMudGFibGUsXG4gICAgICBsb2c6IGZha2VMb2coKS5sb2csXG4gICAgfSk7XG4gICAgY29uc3QgcGFnZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAxMDAwIH0sIChfLCBuKSA9PiBbXG4gICAgICBgaXRlbS0ke259YCxcbiAgICAgIGBfTl9UXy91c2UtY2FjaGUvJHtufWAsXG4gICAgXSk7XG4gICAgZm9yIChjb25zdCBwYWdlIG9mIHBhZ2VzKSBhd2FpdCB0YWdzLmVuc3VyZShwYWdlKTtcbiAgICBtYXJrZXJzLnJlYWQubW9ja0NsZWFyKCk7XG4gICAgZm9yIChjb25zdCBwYWdlIG9mIHBhZ2VzKSBhd2FpdCB0YWdzLmVuc3VyZShwYWdlKTtcbiAgICBleHBlY3QobWFya2Vycy5yZWFkKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcblxuICBpdChcImtlZXBzIHRhZ3MgbG9jYWwgdG8gdGhlIHByb2Nlc3Mgd2l0aG91dCBhIHRhYmxlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0YWdzID0gbmV3IFRyYWNrZWRUYWdNYXJrZXJzKHt9KTtcbiAgICBhd2FpdCB0YWdzLmVuc3VyZShbXCJhXCJdKTtcbiAgICBhd2FpdCB0YWdzLnJlZnJlc2goKTtcbiAgICBhd2FpdCB0YWdzLnVwZGF0ZShbXCJhXCJdLCB1bmRlZmluZWQpO1xuICAgIGV4cGVjdCh0YWdzLnN0YXRlKFtcImFcIl0sIERhdGUubm93KCkgLSAxMDAwKSkudG9CZShcImV4cGlyZWRcIik7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiVHJhY2tlZFRhZ01hcmtlcnMgd2l0aCB0aGUgcmV2YWxpZGF0aW9uIGxvZ1wiLCAoKSA9PiB7XG4gIGNvbnN0IElOVEVSVkFMID0gMTAwMDtcblxuICAvKiogVHdvIGluc3RhbmNlcywgYGFgIGFuZCBgYmAsIG92ZXIgb25lIHRhYmxlIGFuZCBvbmUgY2xvY2suICovXG4gIGZ1bmN0aW9uIGluc3RhbmNlcyhcbiAgICBvcHRpb25zOiB7IHJlc3luY0ludGVydmFsTXM/OiBudW1iZXI7IHJhbmRvbT86ICgpID0+IG51bWJlciB9ID0ge30sXG4gICkge1xuICAgIGNvbnN0IG1hcmtlclJvd3MgPSBuZXcgTWFwPHN0cmluZywgVGFnTWFya2VyPigpO1xuICAgIGNvbnN0IGxvZ1Jvd3M6IFJldmFsaWRhdGlvbkxvZ1Jvd1tdID0gW107XG4gICAgY29uc3QgY2xvY2sgPSBmYWtlQ2xvY2soKTtcbiAgICBjb25zdCBpbnN0YW5jZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IG1hcmtlcnMgPSBmYWtlTWFya2VycyhtYXJrZXJSb3dzKTtcbiAgICAgIGNvbnN0IGxvZyA9IGZha2VMb2cobG9nUm93cyk7XG4gICAgICBjb25zdCB0YWdzID0gbmV3IFRyYWNrZWRUYWdNYXJrZXJzKHtcbiAgICAgICAgbWFya2VyczogbWFya2Vycy50YWJsZSxcbiAgICAgICAgbG9nOiBsb2cubG9nLFxuICAgICAgICByZWZyZXNoSW50ZXJ2YWxNczogSU5URVJWQUwsXG4gICAgICAgIGNsb2NrOiBjbG9jay5ub3csXG4gICAgICAgIC8vIER1ZSBhdCB0aGUgZnVsbCBpbnRlcnZhbCB1bmxlc3MgYSB0ZXN0IGFza3Mgb3RoZXJ3aXNlLlxuICAgICAgICByYW5kb206ICgpID0+IDAsXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1hcmtlcnMsIGxvZywgdGFncyB9O1xuICAgIH07XG4gICAgcmV0dXJuIHsgY2xvY2ssIGxvZ1Jvd3MsIGluc3RhbmNlLCBhOiBpbnN0YW5jZSgpLCBiOiBpbnN0YW5jZSgpIH07XG4gIH1cblxuICBjb25zdCBjcmVhdGVkQXQgPSAoKSA9PiBub3coKSAtIDEwMDA7XG5cbiAgaXQoXCJyZWFjaGVzIGFub3RoZXIgaW5zdGFuY2Ugd2l0aGluIG9uZSBpbnRlcnZhbCwgaW4gb25lIFF1ZXJ5IGFuZCBubyBCYXRjaEdldEl0ZW1cIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY2xvY2ssIGEsIGIgfSA9IGluc3RhbmNlcygpO1xuICAgIGF3YWl0IGIudGFncy5lbnN1cmUoW1wicG9zdHNcIl0pO1xuICAgIGIubWFya2Vycy5yZWFkLm1vY2tDbGVhcigpO1xuXG4gICAgYXdhaXQgYS50YWdzLnVwZGF0ZShbXCJwb3N0c1wiXSwgdW5kZWZpbmVkKTtcbiAgICBleHBlY3QoYS5sb2cucHV0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgIFwicG9zdHNcIixcbiAgICAgIGNsb2NrLmF0LFxuICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoeyByZXZhbGlkYXRlZEF0OiBleHBlY3QuYW55KE51bWJlcikgfSksXG4gICAgKTtcblxuICAgIGNsb2NrLmF0ICs9IElOVEVSVkFMO1xuICAgIGF3YWl0IGIudGFncy5yZWZyZXNoKCk7XG4gICAgZXhwZWN0KGIudGFncy5zdGF0ZShbXCJwb3N0c1wiXSwgY3JlYXRlZEF0KCkpKS50b0JlKFwiZXhwaXJlZFwiKTtcbiAgICBleHBlY3QoYi5sb2cucXVlcnkpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICBleHBlY3QoYi5tYXJrZXJzLnJlYWQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIGl0KFwiaXNzdWVzIG5vIHJlYWQgd2hpbGUgdGhlIGludGVydmFsIGhhcyBub3QgcGFzc2VkXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGNsb2NrLCBiIH0gPSBpbnN0YW5jZXMoKTtcbiAgICAvLyBOb3RoaW5nIHRyYWNrZWQ6IG5vdGhpbmcgdG8gYXNrLlxuICAgIGNsb2NrLmF0ICs9IElOVEVSVkFMO1xuICAgIGF3YWl0IGIudGFncy5yZWZyZXNoKCk7XG4gICAgZXhwZWN0KGIubG9nLnF1ZXJ5KS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuXG4gICAgYXdhaXQgYi50YWdzLmVuc3VyZShbXCJwb3N0c1wiXSk7XG5cbiAgICBiLm1hcmtlcnMucmVhZC5tb2NrQ2xlYXIoKTtcbiAgICAvLyBUaGF0IHJlZnJlc2ggc3RpbGwgY291bnRzOiB3aGF0IGlzIHRyYWNrZWQgc2luY2Ugd2FzIHJlYWQsIG9yIGlzIG5ldy5cbiAgICBhd2FpdCBiLnRhZ3MucmVmcmVzaCgpO1xuICAgIGV4cGVjdChiLmxvZy5xdWVyeSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcblxuICAgIGNsb2NrLmF0ICs9IElOVEVSVkFMO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtiLnRhZ3MucmVmcmVzaCgpLCBiLnRhZ3MucmVmcmVzaCgpXSk7XG4gICAgZXhwZWN0KGIubG9nLnF1ZXJ5KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG5cbiAgICBjbG9jay5hdCArPSBJTlRFUlZBTCAtIDE7XG4gICAgYXdhaXQgYi50YWdzLnJlZnJlc2goKTtcbiAgICBleHBlY3QoYi5sb2cucXVlcnkpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICBleHBlY3QoYi5tYXJrZXJzLnJlYWQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG5cbiAgICBjbG9jay5hdCArPSAxO1xuICAgIGF3YWl0IGIudGFncy5yZWZyZXNoKCk7XG4gICAgZXhwZWN0KGIubG9nLnF1ZXJ5KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG4gIH0pO1xuXG4gIGl0KFwiYXNrcyB3aXRoIG5vdGhpbmcgdHJhY2tlZCBvbmNlIGFuIGVudHJ5IHN0b3JlIHJlbGllcyBvbiB0aGUgbG9nXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGNsb2NrLCBiIH0gPSBpbnN0YW5jZXMoKTtcbiAgICBiLnRhZ3MuanVkZ2VFbnRyaWVzT2YoKCkgPT4gSW5maW5pdHkpO1xuICAgIGNsb2NrLmF0ICs9IElOVEVSVkFMO1xuICAgIGF3YWl0IGIudGFncy5yZWZyZXNoKCk7XG4gICAgZXhwZWN0KGIubG9nLnF1ZXJ5KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gIH0pO1xuXG4gIGl0KFwiYXBwbGllcyBhIHJvdyByZWFkIGFnYWluIGluc2lkZSB0aGUgbG9va2JhY2sgb25seSBvbmNlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGNsb2NrLCBsb2dSb3dzLCBiIH0gPSBpbnN0YW5jZXMoKTtcbiAgICBhd2FpdCBiLnRhZ3MuZW5zdXJlKFtcInBvc3RzXCJdKTtcbiAgICBiLm1hcmtlcnMucmVhZC5tb2NrQ2xlYXIoKTtcbiAgICBsZXQgcmVhZHMgPSAwO1xuICAgIGNvbnN0IHJvdzogUmV2YWxpZGF0aW9uTG9nUm93ID0ge1xuICAgICAgc2s6IGAke2Nsb2NrLmF0fSNwb3N0c2AsXG4gICAgICBhdDogY2xvY2suYXQsXG4gICAgICB0YWc6IFwicG9zdHNcIixcbiAgICAgIGdldCBtYXJrZXIoKSB7XG4gICAgICAgIHJlYWRzKys7XG4gICAgICAgIHJldHVybiB7IHJldmFsaWRhdGVkQXQ6IG5vdygpIH07XG4gICAgICB9LFxuICAgIH07XG4gICAgLy8gVGhlIHNhbWUgcm93IHR3aWNlIGluIG9uZSBwYWdlLCBhbmQgYWdhaW4gb24gdGhlIG5leHQgcXVlcnkuXG4gICAgbG9nUm93cy5wdXNoKHJvdywgcm93KTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMzsgaSsrKSB7XG4gICAgICBjbG9jay5hdCArPSBJTlRFUlZBTDtcbiAgICAgIGF3YWl0IGIudGFncy5yZWZyZXNoKCk7XG4gICAgfVxuICAgIGV4cGVjdChiLmxvZy5xdWVyeSkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDMpO1xuICAgIGV4cGVjdChyZWFkcykudG9CZSgxKTtcbiAgICBleHBlY3QoYi50YWdzLnN0YXRlKFtcInBvc3RzXCJdLCBjcmVhdGVkQXQoKSkpLnRvQmUoXCJleHBpcmVkXCIpO1xuICB9KTtcblxuICAvLyBSZXBsaWNhdGlvbiBsYWcsIG9yIGEgd3JpdGVyIHdob3NlIGNsb2NrIHJ1bnMgYmVoaW5kOiB0aGUgcm93IHNob3dzIHVwXG4gIC8vIGFmdGVyIGEgcXVlcnkgdGhhdCBzaG91bGQgaGF2ZSBzZWVuIGl0LCB3aXRoIGEgc29ydCBrZXkgYmVmb3JlIGl0LlxuICBpdChcInN0aWxsIHNlZXMgYSByb3cgdGhhdCBhcHBlYXJzIHVwIHRvIHRoZSBsb29rYmFjayBsYXRlXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGNsb2NrLCBsb2dSb3dzLCBiIH0gPSBpbnN0YW5jZXMoKTtcbiAgICBhd2FpdCBiLnRhZ3MuZW5zdXJlKFtcImxhdGVcIiwgXCJ0b28tbGF0ZVwiXSk7XG4gICAgYi5tYXJrZXJzLnJlYWQubW9ja0NsZWFyKCk7XG4gICAgY2xvY2suYXQgKz0gSU5URVJWQUw7XG4gICAgY29uc3QgZmlyc3RRdWVyeSA9IGNsb2NrLmF0O1xuICAgIGF3YWl0IGIudGFncy5yZWZyZXNoKCk7XG5cbiAgICBjb25zdCBtYXJrZXIgPSB7IHJldmFsaWRhdGVkQXQ6IG5vdygpIH07XG4gICAgbG9nUm93cy5wdXNoKFxuICAgICAgeyBzazogXCJsYXRlXCIsIGF0OiBmaXJzdFF1ZXJ5IC0gNTAwMCwgdGFnOiBcImxhdGVcIiwgbWFya2VyIH0sXG4gICAgICB7IHNrOiBcInRvby1sYXRlXCIsIGF0OiBmaXJzdFF1ZXJ5IC0gNTAwMSwgdGFnOiBcInRvby1sYXRlXCIsIG1hcmtlciB9LFxuICAgICk7XG4gICAgY2xvY2suYXQgKz0gSU5URVJWQUw7XG4gICAgYXdhaXQgYi50YWdzLnJlZnJlc2goKTtcbiAgICBleHBlY3QoYi5sb2cucXVlcnkpLnRvSGF2ZUJlZW5MYXN0Q2FsbGVkV2l0aChmaXJzdFF1ZXJ5IC0gNTAwMCk7XG4gICAgZXhwZWN0KGIudGFncy5zdGF0ZShbXCJsYXRlXCJdLCBjcmVhdGVkQXQoKSkpLnRvQmUoXCJleHBpcmVkXCIpO1xuICAgIC8vIFBhc3QgdGhlIGxvb2tiYWNrOiB3aGF0IHRoZSBwZXJpb2RpYyByZS1yZWFkIG9mIHRoZSBtYXJrZXJzIGlzIGZvci5cbiAgICBleHBlY3QoYi50YWdzLnN0YXRlKFtcInRvby1sYXRlXCJdLCBjcmVhdGVkQXQoKSkpLnRvQmUoXCJmcmVzaFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJmb3JnZXRzIGl0cyB0cmFja2VkIG1hcmtlcnMgYWZ0ZXIgYSBnYXAgdGhlIGxvZyBtYXkgbm90IGNvdmVyLCBhbmQgcmVhZHMgZWFjaCBhcyBpdCBpcyBuZWVkZWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY2xvY2ssIGEsIGIgfSA9IGluc3RhbmNlcygpO1xuICAgIGF3YWl0IGIudGFncy5lbnN1cmUoW1wicG9zdHNcIiwgXCJvdGhlclwiXSk7XG4gICAgYXdhaXQgYS50YWdzLnVwZGF0ZShbXCJwb3N0c1wiXSwgdW5kZWZpbmVkKTtcblxuICAgIGNsb2NrLmF0ICs9IE1BWF9SRVZBTElEQVRJT05fTE9HX0dBUF9NUyArIDE7XG4gICAgY29uc3QgZ2FwRW5kID0gY2xvY2suYXQ7XG4gICAgYXdhaXQgYi50YWdzLnJlZnJlc2goKTtcbiAgICAvLyBObyBidXJzdCBvZiByZS1yZWFkcywgYW5kIG5vIHF1ZXJ5IG9mIGEgbG9nIHRoYXQgbWF5IGhhdmUgbG9zdCByb3dzLlxuICAgIGV4cGVjdChiLm1hcmtlcnMucmVhZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgIGV4cGVjdChiLmxvZy5xdWVyeSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcblxuICAgIGF3YWl0IGIudGFncy5lbnN1cmUoW1wicG9zdHNcIl0pO1xuICAgIGV4cGVjdChiLm1hcmtlcnMucmVhZCkudG9IYXZlQmVlbkxhc3RDYWxsZWRXaXRoKFtcInBvc3RzXCJdKTtcbiAgICBleHBlY3QoYi50YWdzLnN0YXRlKFtcInBvc3RzXCJdLCBjcmVhdGVkQXQoKSkpLnRvQmUoXCJleHBpcmVkXCIpO1xuXG4gICAgLy8gVGhlbiBiYWNrIG9uIHRoZSBsb2csIGZyb20ganVzdCBiZWZvcmUgdGhlIGdhcCBlbmRlZC5cbiAgICBjbG9jay5hdCArPSBJTlRFUlZBTDtcbiAgICBhd2FpdCBiLnRhZ3MucmVmcmVzaCgpO1xuICAgIGV4cGVjdChiLmxvZy5xdWVyeSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoZ2FwRW5kIC0gNTAwMCk7XG4gIH0pO1xuXG4gIC8vIFJlLXJlYWRpbmcgZXZlcnkgdHJhY2tlZCBtYXJrZXIgYXQgb25jZSBpcyB+NSwwMDAgUkNVIGF0IDEwLDAwMCB0YWdzOiBtb3JlXG4gIC8vIHRoYW4gdGhlIG9uZSBwYXJ0aXRpb24gc2VydmVzIGluIGEgc2Vjb25kLlxuICBpdChcInJlLXJlYWRzIGVhY2ggdHJhY2tlZCBtYXJrZXIgb25jZSBwZXIgcmVzeW5jIGludGVydmFsLCBhdCBtb3N0IDEwMCBhIHJlZnJlc2hcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY2xvY2ssIGIgfSA9IGluc3RhbmNlcyh7IHJlc3luY0ludGVydmFsTXM6IDEwICogSU5URVJWQUwgfSk7XG4gICAgYXdhaXQgYi50YWdzLmVuc3VyZShBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNTAgfSwgKF8sIGkpID0+IGB0JHtpfWApKTtcbiAgICBiLm1hcmtlcnMucmVhZC5tb2NrQ2xlYXIoKTtcbiAgICBjb25zdCBzaXplczogbnVtYmVyW10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSAxNDsgaSsrKSB7XG4gICAgICBjbG9jay5hdCArPSBJTlRFUlZBTDtcbiAgICAgIGIubWFya2Vycy5yZWFkLm1vY2tDbGVhcigpO1xuICAgICAgYXdhaXQgYi50YWdzLnJlZnJlc2goKTtcbiAgICAgIHNpemVzLnB1c2goYi5tYXJrZXJzLnJlYWQubW9jay5jYWxsc1swXT8uWzBdLmxlbmd0aCA/PyAwKTtcbiAgICB9XG4gICAgZXhwZWN0KGIubG9nLnF1ZXJ5KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMTQpO1xuICAgIC8vIER1ZSBhdCAxMCBpbnRlcnZhbHMsIG9sZGVzdCBmaXJzdCwgMTAwIHBlciByZWZyZXNoOyB0aGVuIG5vdCBhZ2Fpbi5cbiAgICBleHBlY3Qoc2l6ZXMpLnRvRXF1YWwoWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwMCwgMTAwLCA1MCwgMCwgMF0pO1xuICAgIGV4cGVjdChiLm1hcmtlcnMucmVhZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgfSk7XG5cbiAgLy8gVGFncyBmaXJzdCByZWFkIHRvZ2V0aGVyIG11c3Qgbm90IGNvbWUgZHVlIHRvZ2V0aGVyIGV2ZXJ5IGludGVydmFsLlxuICBpdChcInNwcmVhZHMgd2hlbiBlYWNoIHRhZyBjb21lcyBkdWUgb3ZlciB0aGUgbGFzdCBxdWFydGVyIG9mIHRoZSBpbnRlcnZhbFwiLCBhc3luYyAoKSA9PiB7XG4gICAgLy8gRHVlIGF0IDEwLCA4Ljc1IGFuZCA3LjUgaW50ZXJ2YWxzLCBrbm93biBpbiB0aGF0IG9yZGVyOiB0aGUgb25lIGR1ZVxuICAgIC8vIGZpcnN0IGlzIGxhc3QsIGJlaGluZCB0d28gdGhhdCBhcmUgbm90IGR1ZSB5ZXQuXG4gICAgY29uc3QgcmFuZG9tcyA9IFswLCAwLjUsIDFdO1xuICAgIGNvbnN0IHsgY2xvY2ssIGIgfSA9IGluc3RhbmNlcyh7XG4gICAgICByZXN5bmNJbnRlcnZhbE1zOiAxMCAqIElOVEVSVkFMLFxuICAgICAgcmFuZG9tOiAoKSA9PiByYW5kb21zLnNoaWZ0KCkgPz8gMCxcbiAgICB9KTtcbiAgICBhd2FpdCBiLnRhZ3MuZW5zdXJlKFtcImxhdGVcIiwgXCJtaWRkbGVcIiwgXCJlYXJseVwiXSk7XG4gICAgYi5tYXJrZXJzLnJlYWQubW9ja0NsZWFyKCk7XG4gICAgY29uc3QgcmVhZEF0OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTA7IGkrKykge1xuICAgICAgY2xvY2suYXQgKz0gSU5URVJWQUw7XG4gICAgICBiLm1hcmtlcnMucmVhZC5tb2NrQ2xlYXIoKTtcbiAgICAgIGF3YWl0IGIudGFncy5yZWZyZXNoKCk7XG4gICAgICBmb3IgKGNvbnN0IHRhZyBvZiBiLm1hcmtlcnMucmVhZC5tb2NrLmNhbGxzWzBdPy5bMF0gPz8gW10pIHtcbiAgICAgICAgcmVhZEF0W3RhZ10gPz89IGk7XG4gICAgICB9XG4gICAgfVxuICAgIGV4cGVjdChyZWFkQXQpLnRvRXF1YWwoeyBlYXJseTogOCwgbWlkZGxlOiA5LCBsYXRlOiAxMCB9KTtcbiAgfSk7XG5cbiAgaXQoXCJyZS1yZWFkcyBhIG1hcmtlciBpdCBsZWFybmVkIG9mIGZyb20gaXRzIG93biB3cml0ZSBvbmx5IG9uY2UgdGhhdCBpcyBkdWVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY2xvY2ssIGEgfSA9IGluc3RhbmNlcyh7IHJlc3luY0ludGVydmFsTXM6IDEwICogSU5URVJWQUwgfSk7XG4gICAgYXdhaXQgYS50YWdzLmVuc3VyZShbXCJwb3N0c1wiXSk7XG4gICAgY2xvY2suYXQgKz0gOSAqIElOVEVSVkFMO1xuICAgIGF3YWl0IGEudGFncy51cGRhdGUoW1wicG9zdHNcIl0sIHVuZGVmaW5lZCk7XG4gICAgY2xvY2suYXQgKz0gMiAqIElOVEVSVkFMO1xuICAgIGF3YWl0IGEudGFncy5yZWZyZXNoKCk7XG4gICAgLy8gUmVhZCAxMSBpbnRlcnZhbHMgYWdvLCBidXQgd3JpdHRlbiAtIHNvIGtub3duIC0gMiBpbnRlcnZhbHMgYWdvLlxuICAgIGV4cGVjdChhLm1hcmtlcnMucmVhZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICB9KTtcblxuICBpdChcInJlYWRzIGEgdGFnIHdob3NlIGZpcnN0IHJlYWQgZmFpbGVkIGFnYWluIG9uIHRoZSBuZXh0IHJlZnJlc2hcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGVycm9yID0gamVzdC5zcHlPbihjb25zb2xlLCBcImVycm9yXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gICAgY29uc3QgeyBjbG9jaywgYSwgYiB9ID0gaW5zdGFuY2VzKCk7XG4gICAgLy8gT25seSB0aGUgbWFya2VyIHJvdyBoYXMgaXQsIHNvIG9ubHkgcmVhZGluZyB0aGUgbWFya2VyIGZpbmRzIGl0LlxuICAgIGEubG9nLnB1dC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UobmV3IEVycm9yKFwidGhyb3R0bGVkXCIpKTtcbiAgICBhd2FpdCBhLnRhZ3MudXBkYXRlKFtcInBvc3RzXCJdLCB1bmRlZmluZWQpO1xuICAgIGIubWFya2Vycy5yZWFkLm1vY2tSZWplY3RlZFZhbHVlT25jZShuZXcgRXJyb3IoXCJ0aHJvdHRsZWRcIikpO1xuICAgIGF3YWl0IGIudGFncy5lbnN1cmUoW1wicG9zdHNcIl0pO1xuICAgIGV4cGVjdChiLnRhZ3Muc3RhdGUoW1wicG9zdHNcIl0sIGNyZWF0ZWRBdCgpKSkudG9CZShcImZyZXNoXCIpO1xuICAgIGNsb2NrLmF0ICs9IElOVEVSVkFMO1xuXG4gICAgYXdhaXQgYi50YWdzLnJlZnJlc2goKTtcbiAgICBleHBlY3QoYi5tYXJrZXJzLnJlYWQpLnRvSGF2ZUJlZW5MYXN0Q2FsbGVkV2l0aChbXCJwb3N0c1wiXSk7XG4gICAgLy8gVGhlIHJlLXJlYWQgcnVucyBhbG9uZ3NpZGUgdGhlIHF1ZXJ5LCBub3Qgd2FpdGVkIGZvciBieSBgcmVmcmVzaGAuXG4gICAgYXdhaXQgYi5tYXJrZXJzLnJlYWQubW9jay5yZXN1bHRzLmF0KC0xKSEudmFsdWU7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldEltbWVkaWF0ZShyZXNvbHZlKSk7XG4gICAgZXhwZWN0KGIudGFncy5zdGF0ZShbXCJwb3N0c1wiXSwgY3JlYXRlZEF0KCkpKS50b0JlKFwiZXhwaXJlZFwiKTtcbiAgICBlcnJvci5tb2NrUmVzdG9yZSgpO1xuICB9KTtcblxuICBpdChcImZvcmdldHMgaXRzIHRyYWNrZWQgbWFya2VycyB3aGVuIHRoZSBsb2cgaGFzIG1vcmUgcm93cyB0aGFuIG9uZSBxdWVyeSByZWFkc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBjbG9jaywgYiB9ID0gaW5zdGFuY2VzKCk7XG4gICAgYXdhaXQgYi50YWdzLmVuc3VyZShbXCJwb3N0c1wiXSk7XG4gICAgYi5sb2cucXVlcnkubW9ja1Jlc29sdmVkVmFsdWVPbmNlKHsgcm93czogW10sIHRydW5jYXRlZDogdHJ1ZSB9KTtcbiAgICBjbG9jay5hdCArPSBJTlRFUlZBTDtcbiAgICBhd2FpdCBiLnRhZ3MucmVmcmVzaCgpO1xuICAgIGV4cGVjdChiLm1hcmtlcnMucmVhZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICAgIGF3YWl0IGIudGFncy5lbnN1cmUoW1wicG9zdHNcIl0pO1xuICAgIGV4cGVjdChiLm1hcmtlcnMucmVhZCkudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDIpO1xuICB9KTtcblxuICAvLyBUcmFja2luZyBpcyBwZXIgdGFnLCBub3QgcGVyIGVudHJ5OiBzdG9yaW5nIGEgbmV3IGVudHJ5IG11c3Qgbm90IHZvdWNoIGZvclxuICAvLyBhbiBvbGRlciBvbmUgd2l0aCB0aGUgc2FtZSB0YWcuIEIncyBsb2cgY3Vyc29yIHN0YXJ0cyBhZnRlciBDJ3NcbiAgLy8gcmV2YWxpZGF0aW9uLCBzbyBvbmx5IHJlYWRpbmcgdGhlIG1hcmtlciBzaG93cyBpdC5cbiAgaXQoXCJzdGlsbCByZWFkcyBhIHRhZydzIG1hcmtlciBhZnRlciBzdG9yaW5nIGFuIGVudHJ5IHdpdGggaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY2xvY2ssIGluc3RhbmNlLCBhOiBjIH0gPSBpbnN0YW5jZXMoKTtcbiAgICBjb25zdCBrMUNyZWF0ZWRBdCA9IGNyZWF0ZWRBdCgpO1xuICAgIGF3YWl0IGMudGFncy51cGRhdGUoW1wicG9zdHNcIl0sIHVuZGVmaW5lZCk7XG4gICAgY2xvY2suYXQgKz0gMTBfMDAwO1xuICAgIC8vIFN0YXJ0ZWQgYWZ0ZXIgdGhlIHJldmFsaWRhdGlvbjogaXRzIGxvZyBjdXJzb3IgaXMgcGFzdCBDJ3Mgcm93LlxuICAgIGNvbnN0IGIgPSBpbnN0YW5jZSgpO1xuICAgIGIudGFncy50cmFjayhbXCJwb3N0c1wiXSk7XG4gICAgYXdhaXQgYi50YWdzLmVuc3VyZShbXCJwb3N0c1wiXSk7XG4gICAgZXhwZWN0KGIubWFya2Vycy5yZWFkKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChbXCJwb3N0c1wiXSk7XG4gICAgZXhwZWN0KGIudGFncy5zdGF0ZShbXCJwb3N0c1wiXSwgazFDcmVhdGVkQXQpKS50b0JlKFwiZXhwaXJlZFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJzdGlsbCByZWFkcyBhIHRhZydzIG1hcmtlciBhZnRlciBzdG9yaW5nIGFuIGVudHJ5IHdpdGggaXQgZm9sbG93aW5nIGEgZm9yZ2V0XCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGNsb2NrLCBhLCBiIH0gPSBpbnN0YW5jZXMoKTtcbiAgICBhd2FpdCBiLnRhZ3MuZW5zdXJlKFtcInBvc3RzXCJdKTtcbiAgICBjb25zdCBrMUNyZWF0ZWRBdCA9IGNyZWF0ZWRBdCgpO1xuICAgIC8vIFJldmFsaWRhdGVkIHdoaWxlIGBiYCB3YXMgZnJvemVuIHBhc3Qgd2hhdCB0aGUgbG9nIGNvdmVycy5cbiAgICBjbG9jay5hdCArPSBNQVhfUkVWQUxJREFUSU9OX0xPR19HQVBfTVMgKyAxO1xuICAgIGEubG9nLnB1dC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UobmV3IEVycm9yKFwibG9zdFwiKSk7XG4gICAgY29uc3QgZXJyb3IgPSBqZXN0LnNweU9uKGNvbnNvbGUsIFwiZXJyb3JcIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgICBhd2FpdCBhLnRhZ3MudXBkYXRlKFtcInBvc3RzXCJdLCB1bmRlZmluZWQpO1xuICAgIGVycm9yLm1vY2tSZXN0b3JlKCk7XG4gICAgYXdhaXQgYi50YWdzLnJlZnJlc2goKTtcbiAgICBiLnRhZ3MudHJhY2soW1wicG9zdHNcIl0pO1xuICAgIGF3YWl0IGIudGFncy5lbnN1cmUoW1wicG9zdHNcIl0pO1xuICAgIGV4cGVjdChiLnRhZ3Muc3RhdGUoW1wicG9zdHNcIl0sIGsxQ3JlYXRlZEF0KSkudG9CZShcImV4cGlyZWRcIik7XG4gIH0pO1xuXG4gIGl0KFwiYXBwbGllcyBhIGxvZyByb3cgdGhhdCBsYW5kcyB3aGlsZSB0aGUgdGFnJ3MgZmlyc3QgcmVhZCBpcyBpbiBmbGlnaHRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHsgY2xvY2ssIGEsIGIgfSA9IGluc3RhbmNlcygpO1xuICAgIC8vIFNvbWV0aGluZyB0cmFja2VkLCBzbyB0aGUgcmVmcmVzaCBxdWVyaWVzIHRoZSBsb2cuXG4gICAgYXdhaXQgYi50YWdzLmVuc3VyZShbXCJvdGhlclwiXSk7XG4gICAgbGV0IGFuc3dlciE6IChyZWFkOiBNYXA8c3RyaW5nLCBUYWdNYXJrZXI+KSA9PiB2b2lkO1xuICAgIC8vIEFuc3dlcmVkIGJlZm9yZSB0aGUgcmV2YWxpZGF0aW9uIGJlbG93LCBhcyBhIHJlYWQgcmFjaW5nIGl0IGNhbiBiZS5cbiAgICBiLm1hcmtlcnMucmVhZC5tb2NrSW1wbGVtZW50YXRpb25PbmNlKFxuICAgICAgKCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IChhbnN3ZXIgPSByZXNvbHZlKSksXG4gICAgKTtcbiAgICBjb25zdCBmaXJzdCA9IGIudGFncy5lbnN1cmUoW1wicG9zdHNcIl0pO1xuICAgIGF3YWl0IGEudGFncy51cGRhdGUoW1wicG9zdHNcIl0sIHVuZGVmaW5lZCk7XG4gICAgY2xvY2suYXQgKz0gSU5URVJWQUw7XG4gICAgYXdhaXQgYi50YWdzLnJlZnJlc2goKTtcbiAgICBhbnN3ZXIobmV3IE1hcCgpKTtcbiAgICBhd2FpdCBmaXJzdDtcbiAgICBleHBlY3QoYi50YWdzLnN0YXRlKFtcInBvc3RzXCJdLCBjcmVhdGVkQXQoKSkpLnRvQmUoXCJleHBpcmVkXCIpO1xuICB9KTtcblxuICBpdChcImlzIHZpc2libGUgYXQgb25jZSBvbiB0aGUgaW5zdGFuY2UgdGhhdCByYW4gdXBkYXRlVGFnXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB7IGEgfSA9IGluc3RhbmNlcygpO1xuICAgIGEudGFncy50cmFjayhbXCJwb3N0c1wiXSk7XG4gICAgYXdhaXQgYS50YWdzLnVwZGF0ZShbXCJwb3N0c1wiXSwgdW5kZWZpbmVkKTtcbiAgICBleHBlY3QoYS50YWdzLnN0YXRlKFtcInBvc3RzXCJdLCBjcmVhdGVkQXQoKSkpLnRvQmUoXCJleHBpcmVkXCIpO1xuICAgIGV4cGVjdChhLm1hcmtlcnMud3JpdGUpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgICBleHBlY3QoYS5sb2cucHV0KS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gIH0pO1xuXG4gIGl0KFwia2VlcHMgaXRzIHRhZ3MgdGhyb3VnaCBhIGZhaWxlZCBxdWVyeSBhbmQgYXNrcyBhZ2FpbiBuZXh0IGludGVydmFsXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IGplc3Quc3B5T24oY29uc29sZSwgXCJlcnJvclwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIGNvbnN0IHsgY2xvY2ssIGEsIGIgfSA9IGluc3RhbmNlcygpO1xuICAgIGF3YWl0IGIudGFncy5lbnN1cmUoW1wicG9zdHNcIl0pO1xuICAgIGIubWFya2Vycy5yZWFkLm1vY2tDbGVhcigpO1xuICAgIGF3YWl0IGEudGFncy51cGRhdGUoW1wicG9zdHNcIl0sIHVuZGVmaW5lZCk7XG4gICAgYi5sb2cucXVlcnkubW9ja1JlamVjdGVkVmFsdWVPbmNlKG5ldyBFcnJvcihcInRocm90dGxlZFwiKSk7XG5cbiAgICBjbG9jay5hdCArPSBJTlRFUlZBTDtcbiAgICBjb25zdCBjdXJzb3IgPSBjbG9jay5hdCAtIElOVEVSVkFMIC0gNTAwMDtcbiAgICBhd2FpdCBiLnRhZ3MucmVmcmVzaCgpO1xuICAgIGV4cGVjdChiLnRhZ3Muc3RhdGUoW1wicG9zdHNcIl0sIGNyZWF0ZWRBdCgpKSkudG9CZShcImZyZXNoXCIpO1xuICAgIGV4cGVjdChlcnJvcikudG9IYXZlQmVlbkNhbGxlZCgpO1xuXG4gICAgY2xvY2suYXQgKz0gSU5URVJWQUw7XG4gICAgYXdhaXQgYi50YWdzLnJlZnJlc2goKTtcbiAgICAvLyBGcm9tIHRoZSBzYW1lIGN1cnNvciwgc28gbm90aGluZyB3cml0dGVuIG1lYW53aGlsZSBpcyBza2lwcGVkLlxuICAgIGV4cGVjdChiLmxvZy5xdWVyeSkudG9IYXZlQmVlbkxhc3RDYWxsZWRXaXRoKGN1cnNvcik7XG4gICAgZXhwZWN0KGIudGFncy5zdGF0ZShbXCJwb3N0c1wiXSwgY3JlYXRlZEF0KCkpKS50b0JlKFwiZXhwaXJlZFwiKTtcbiAgICBleHBlY3QoYi5tYXJrZXJzLnJlYWQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgZXJyb3IubW9ja1Jlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoXCJzdGlsbCB3cml0ZXMgdGhlIG1hcmtlciB3aGVuIHRoZSBsb2cgcm93IGZhaWxzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IGplc3Quc3B5T24oY29uc29sZSwgXCJlcnJvclwiKS5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4ge30pO1xuICAgIGNvbnN0IHsgYSB9ID0gaW5zdGFuY2VzKCk7XG4gICAgYS5sb2cucHV0Lm1vY2tSZWplY3RlZFZhbHVlT25jZShuZXcgRXJyb3IoXCJ0aHJvdHRsZWRcIikpO1xuICAgIGF3YWl0IGEudGFncy51cGRhdGUoW1wicG9zdHNcIl0sIHVuZGVmaW5lZCk7XG4gICAgZXhwZWN0KGEubWFya2Vycy5yb3dzLmdldChcInBvc3RzXCIpPy5yZXZhbGlkYXRlZEF0KS50b0VxdWFsKFxuICAgICAgZXhwZWN0LmFueShOdW1iZXIpLFxuICAgICk7XG4gICAgZXhwZWN0KGVycm9yKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgIGV4cGVjdC5zdHJpbmdNYXRjaGluZygvcmV2YWxpZGF0aW9uIGxvZy8pLFxuICAgICAgZXhwZWN0LmFueShFcnJvciksXG4gICAgKTtcbiAgICBlcnJvci5tb2NrUmVzdG9yZSgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcIkVudHJ5THJ1XCIsICgpID0+IHtcbiAgaXQoXCJldmljdHMgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgZW50cmllcyBwYXN0IGl0cyBieXRlIGJvdW5kXCIsICgpID0+IHtcbiAgICBjb25zdCBscnUgPSBuZXcgRW50cnlMcnUoMjUwKTtcbiAgICBscnUuc2V0KFwiYVwiLCBzdG9yZWQoMTAwKSk7XG4gICAgbHJ1LnNldChcImJcIiwgc3RvcmVkKDEwMCkpO1xuICAgIGxydS5nZXQoXCJhXCIpO1xuICAgIGxydS5zZXQoXCJjXCIsIHN0b3JlZCgxMDApKTtcbiAgICBleHBlY3QobHJ1LmdldChcImJcIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgICBleHBlY3QobHJ1LmdldChcImFcIikpLnRvQmVEZWZpbmVkKCk7XG4gICAgZXhwZWN0KGxydS5nZXQoXCJjXCIpKS50b0JlRGVmaW5lZCgpO1xuICB9KTtcblxuICBpdChcImRvZXMgbm90IGtlZXAgYW4gZW50cnkgbGFyZ2VyIHRoYW4gdGhlIHdob2xlIGJvdW5kXCIsICgpID0+IHtcbiAgICBjb25zdCBscnUgPSBuZXcgRW50cnlMcnUoNTApO1xuICAgIGxydS5zZXQoXCJhXCIsIHN0b3JlZCgxMDApKTtcbiAgICBleHBlY3QobHJ1LnNpemUpLnRvQmUoMCk7XG4gIH0pO1xuXG4gIGl0KFwiYWNjb3VudHMgZm9yIGEgcmVwbGFjZWQgZW50cnlcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGxydSA9IG5ldyBFbnRyeUxydSgyNTApO1xuICAgIGxydS5zZXQoXCJhXCIsIHN0b3JlZCgyMDApKTtcbiAgICBscnUuc2V0KFwiYVwiLCBzdG9yZWQoMTApKTtcbiAgICBscnUuc2V0KFwiYlwiLCBzdG9yZWQoMjAwKSk7XG4gICAgZXhwZWN0KGxydS5zaXplKS50b0JlKDIpO1xuICB9KTtcblxuICBpdChcImRyb3BzIHRoZSBlbnRyaWVzIHBhc3QgcmV2YWxpZGF0ZVwiLCAoKSA9PiB7XG4gICAgY29uc3QgbHJ1ID0gbmV3IEVudHJ5THJ1KDEwMDApO1xuICAgIGxydS5zZXQoXCJvbGRcIiwgc3RvcmVkKDEwMCwgeyB0aW1lc3RhbXA6IDEwMDAsIHJldmFsaWRhdGU6IDEgfSkpO1xuICAgIGxydS5zZXQoXCJuZXdcIiwgc3RvcmVkKDEwMCwgeyB0aW1lc3RhbXA6IDE1MDAsIHJldmFsaWRhdGU6IDEgfSkpO1xuICAgIGV4cGVjdChscnUuaG9sZHNMaXZlKDIwMDEpKS50b0JlKHRydWUpO1xuICAgIGV4cGVjdChscnUuaG9sZHNMaXZlKDI1MDEpKS50b0JlKGZhbHNlKTtcbiAgICAvLyBBc2tpbmcgaXMgbm90IGEgdXNlOiB0aGUgZW50cmllcyBnbyBpbiBgb2xkZXN0VGltZXN0YW1wYCdzIHNjYW4uXG4gICAgZXhwZWN0KGxydS5zaXplKS50b0JlKDIpO1xuICB9KTtcblxuICBpdChcImRyb3BzIHRoZSBlbnRyaWVzIHBhc3QgcmV2YWxpZGF0ZSBhcyBpdCBmaW5kcyB0aGUgb2xkZXN0XCIsICgpID0+IHtcbiAgICBjb25zdCBscnUgPSBuZXcgRW50cnlMcnUoMTAwMCk7XG4gICAgbHJ1LnNldChcIm9sZFwiLCBzdG9yZWQoMTAwLCB7IHRpbWVzdGFtcDogMTAwMCwgcmV2YWxpZGF0ZTogMSB9KSk7XG4gICAgbHJ1LnNldChcIm5ld1wiLCBzdG9yZWQoMTAwLCB7IHRpbWVzdGFtcDogMTUwMCwgcmV2YWxpZGF0ZTogMSB9KSk7XG4gICAgZXhwZWN0KGxydS5vbGRlc3RUaW1lc3RhbXAoMjAwMSkpLnRvQmUoMTUwMCk7XG4gICAgZXhwZWN0KGxydS5zaXplKS50b0JlKDEpO1xuICAgIGV4cGVjdChscnUub2xkZXN0VGltZXN0YW1wKCkpLnRvQmUoMTUwMCk7XG4gIH0pO1xuXG4gIGl0KFwia25vd3MgaXRzIG9sZGVzdCBlbnRyeSdzIHRpbWVzdGFtcCBhcyBlbnRyaWVzIGNvbWUgYW5kIGdvXCIsICgpID0+IHtcbiAgICBjb25zdCBscnUgPSBuZXcgRW50cnlMcnUoMjUwKTtcbiAgICBleHBlY3QobHJ1Lm9sZGVzdFRpbWVzdGFtcCgpKS50b0JlKEluZmluaXR5KTtcbiAgICBscnUuc2V0KFwiYVwiLCBzdG9yZWQoMTAwLCB7IHRpbWVzdGFtcDogMiB9KSk7XG4gICAgbHJ1LnNldChcImJcIiwgc3RvcmVkKDEwMCwgeyB0aW1lc3RhbXA6IDEgfSkpO1xuICAgIGV4cGVjdChscnUub2xkZXN0VGltZXN0YW1wKCkpLnRvQmUoMSk7XG4gICAgbHJ1LmRlbGV0ZShcImJcIik7XG4gICAgZXhwZWN0KGxydS5vbGRlc3RUaW1lc3RhbXAoKSkudG9CZSgyKTtcbiAgICAvLyBFdmljdGVkIGZvciBzcGFjZS5cbiAgICBscnUuc2V0KFwiY1wiLCBzdG9yZWQoMTAwLCB7IHRpbWVzdGFtcDogMyB9KSk7XG4gICAgbHJ1LnNldChcImRcIiwgc3RvcmVkKDEwMCwgeyB0aW1lc3RhbXA6IDQgfSkpO1xuICAgIGV4cGVjdChscnUub2xkZXN0VGltZXN0YW1wKCkpLnRvQmUoMyk7XG4gIH0pO1xuXG4gIGl0KFwic3RhcnRzIGl0cyBib3VuZCBhZnJlc2ggb25jZSBlbXB0aWVkXCIsICgpID0+IHtcbiAgICBjb25zdCBscnUgPSBuZXcgRW50cnlMcnUoMTAwMCk7XG4gICAgbHJ1LnNldChcImFcIiwgc3RvcmVkKDEwMCwgeyB0aW1lc3RhbXA6IDEwMCB9KSk7XG4gICAgbHJ1LmRlbGV0ZShcImFcIik7XG4gICAgbHJ1LnNldChcImJcIiwgc3RvcmVkKDEwMCwgeyB0aW1lc3RhbXA6IDUwMDAgfSkpO1xuICAgIGV4cGVjdChscnUub2xkZXN0Qm91bmQoKSkudG9CZSg1MDAwKTtcbiAgfSk7XG5cbiAgaXQoXCJkcm9wcyB0aGUgZXhwaXJlZCBlbnRyaWVzIGxlYXN0IHJlY2VudGx5IHVzZWQgYXMgaXQgYm91bmRzXCIsICgpID0+IHtcbiAgICBjb25zdCBscnUgPSBuZXcgRW50cnlMcnUoMTAwMCk7XG4gICAgbHJ1LnNldChcIm9sZFwiLCBzdG9yZWQoMTAwLCB7IHRpbWVzdGFtcDogMTAwMCwgcmV2YWxpZGF0ZTogMSB9KSk7XG4gICAgbHJ1LnNldChcImxpdmVcIiwgc3RvcmVkKDEwMCwgeyB0aW1lc3RhbXA6IDE1MDAsIHJldmFsaWRhdGU6IDEwIH0pKTtcbiAgICBscnUuc2V0KFwiYmVoaW5kXCIsIHN0b3JlZCgxMDAsIHsgdGltZXN0YW1wOiAxMjAwLCByZXZhbGlkYXRlOiAxIH0pKTtcbiAgICAvLyBVcCB0byB0aGUgZmlyc3QgbGl2ZSBlbnRyeTogbm8gc2NhbiBwYXN0IGl0LlxuICAgIGV4cGVjdChscnUub2xkZXN0Qm91bmQoMjMwMCkpLnRvQmUoMTAwMCk7XG4gICAgZXhwZWN0KGxydS5zaXplKS50b0JlKDIpO1xuICAgIGV4cGVjdChscnUub2xkZXN0VGltZXN0YW1wKDIzMDApKS50b0JlKDE1MDApO1xuICB9KTtcblxuICBpdChcImJvdW5kcyBpdHMgb2xkZXN0IGVudHJ5J3MgdGltZXN0YW1wIGZyb20gYmVsb3cgYmV0d2VlbiBzY2Fuc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgbHJ1ID0gbmV3IEVudHJ5THJ1KDEwMDApO1xuICAgIGNvbnN0IGhlbGQgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIGxldCBzZWVkID0gNztcbiAgICBjb25zdCByYW5kb20gPSAoKSA9PiAoc2VlZCA9IChzZWVkICogMTY4MDcpICUgMjE0NzQ4MzY0NykgLyAyMTQ3NDgzNjQ3O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjAwMDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBgayR7TWF0aC5mbG9vcihyYW5kb20oKSAqIDUwKX1gO1xuICAgICAgY29uc3QgdGltZXN0YW1wID0gTWF0aC5mbG9vcihyYW5kb20oKSAqIDEwXzAwMCk7XG4gICAgICBpZiAocmFuZG9tKCkgPCAwLjIpIHtcbiAgICAgICAgbHJ1LmRlbGV0ZShrZXkpO1xuICAgICAgICBoZWxkLmRlbGV0ZShrZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbHJ1LnNldChrZXksIHN0b3JlZCgxMDAsIHsgdGltZXN0YW1wIH0pKTtcbiAgICAgICAgaGVsZC5kZWxldGUoa2V5KTtcbiAgICAgICAgaGVsZC5zZXQoa2V5LCB0aW1lc3RhbXApO1xuICAgICAgICB3aGlsZSAoaGVsZC5zaXplID4gbHJ1LnNpemUpIHtcbiAgICAgICAgICBoZWxkLmRlbGV0ZShoZWxkLmtleXMoKS5uZXh0KCkudmFsdWUhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3Qgb2xkZXN0ID0gTWF0aC5taW4oSW5maW5pdHksIC4uLmhlbGQudmFsdWVzKCkpO1xuICAgICAgZXhwZWN0KGxydS5vbGRlc3RCb3VuZCgpKS50b0JlTGVzc1RoYW5PckVxdWFsKG9sZGVzdCk7XG4gICAgICBpZiAoaSAlIDEwMCA9PT0gMCkge1xuICAgICAgICBleHBlY3QobHJ1Lm9sZGVzdFRpbWVzdGFtcCgpKS50b0JlKG9sZGVzdCk7XG4gICAgICAgIGV4cGVjdChscnUub2xkZXN0Qm91bmQoKSkudG9CZShvbGRlc3QpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBoZWxkLmtleXMoKSkge1xuICAgICAgbHJ1LmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgICBleHBlY3QobHJ1Lm9sZGVzdEJvdW5kKCkpLnRvQmUoSW5maW5pdHkpO1xuICB9KTtcblxuICBpdChcImtub3dzIGl0cyBvbGRlc3QgZW50cnkncyB0aW1lc3RhbXAgdW5kZXIgZXZpY3Rpb24gY2h1cm5cIiwgKCkgPT4ge1xuICAgIGNvbnN0IGxydSA9IG5ldyBFbnRyeUxydSgxMDAwKTtcbiAgICBjb25zdCBoZWxkID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICBsZXQgc2VlZCA9IDE7XG4gICAgY29uc3QgcmFuZG9tID0gKCkgPT4gKHNlZWQgPSAoc2VlZCAqIDE2ODA3KSAlIDIxNDc0ODM2NDcpIC8gMjE0NzQ4MzY0NztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDIwMDA7IGkrKykge1xuICAgICAgY29uc3Qga2V5ID0gYGske01hdGguZmxvb3IocmFuZG9tKCkgKiA1MCl9YDtcbiAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IE1hdGguZmxvb3IocmFuZG9tKCkgKiAxMF8wMDApO1xuICAgICAgaWYgKHJhbmRvbSgpIDwgMC4yKSB7XG4gICAgICAgIGxydS5kZWxldGUoa2V5KTtcbiAgICAgICAgaGVsZC5kZWxldGUoa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxydS5zZXQoa2V5LCBzdG9yZWQoMTAwLCB7IHRpbWVzdGFtcCB9KSk7XG4gICAgICAgIGhlbGQuZGVsZXRlKGtleSk7XG4gICAgICAgIGhlbGQuc2V0KGtleSwgdGltZXN0YW1wKTtcbiAgICAgICAgLy8gRXZpY3RlZCBsZWFzdCByZWNlbnRseSB1c2VkIGZpcnN0LCBhcyB0aGUgc3RvcmUgZG9lcy5cbiAgICAgICAgd2hpbGUgKGhlbGQuc2l6ZSA+IGxydS5zaXplKSB7XG4gICAgICAgICAgaGVsZC5kZWxldGUoaGVsZC5rZXlzKCkubmV4dCgpLnZhbHVlISk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV4cGVjdChscnUub2xkZXN0VGltZXN0YW1wKCkpLnRvQmUoTWF0aC5taW4oSW5maW5pdHksIC4uLmhlbGQudmFsdWVzKCkpKTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiZW50cmllc1wiLCAoKSA9PiB7XG4gIGl0KFwicmVhZHMgYSBzdHJlYW0gdG8gdGhlIGVuZFwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYnl0ZXMgPSBhd2FpdCByZWFkU3RyZWFtKHN0cmVhbU9mKFwiYWJcIiwgXCJjZFwiKSk7XG4gICAgZXhwZWN0KG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShieXRlcykpLnRvQmUoXCJhYmNkXCIpO1xuICB9KTtcblxuICBpdChcInJlamVjdHMgYSBzdHJlYW0gdGhhdCBlcnJvcnMgcGFydC13YXlcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGZhaWxpbmcgPSBuZXcgUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4oe1xuICAgICAgc3RhcnQoY29udHJvbGxlcikge1xuICAgICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoWzFdKSk7XG4gICAgICAgIGNvbnRyb2xsZXIuZXJyb3IobmV3IEVycm9yKFwicmVuZGVyIGZhaWxlZFwiKSk7XG4gICAgICB9LFxuICAgIH0pO1xuICAgIGF3YWl0IGV4cGVjdChyZWFkU3RyZWFtKGZhaWxpbmcpKS5yZWplY3RzLnRvVGhyb3coXCJyZW5kZXIgZmFpbGVkXCIpO1xuICB9KTtcblxuICBpdChcImhhbmRzIGV2ZXJ5IHJlYWRlciBpdHMgb3duIHN0cmVhbVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgZW50cnk6IENhY2hlRW50cnkgPSB7XG4gICAgICB2YWx1ZTogc3RyZWFtT2YoXCJwYXlsb2FkXCIpLFxuICAgICAgdGFnczogW1widFwiXSxcbiAgICAgIHN0YWxlOiAxLFxuICAgICAgdGltZXN0YW1wOiAyLFxuICAgICAgZXhwaXJlOiAzLFxuICAgICAgcmV2YWxpZGF0ZTogNCxcbiAgICB9O1xuICAgIGNvbnN0IGtlcHQgPSBhd2FpdCBzdG9yZWRFbnRyeU9mKFByb21pc2UucmVzb2x2ZShlbnRyeSkpO1xuICAgIGNvbnN0IGZpcnN0ID0gY2FjaGVFbnRyeU9mKGtlcHQpO1xuICAgIGNvbnN0IHNlY29uZCA9IGNhY2hlRW50cnlPZihrZXB0LCAtMSk7XG4gICAgZXhwZWN0KHNlY29uZC5yZXZhbGlkYXRlKS50b0JlKC0xKTtcbiAgICBleHBlY3QoZmlyc3QudGFncykudG9FcXVhbChbXCJ0XCJdKTtcbiAgICBleHBlY3QobmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGF3YWl0IHJlYWRTdHJlYW0oZmlyc3QudmFsdWUpKSkudG9CZShcbiAgICAgIFwicGF5bG9hZFwiLFxuICAgICk7XG4gICAgZXhwZWN0KG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShhd2FpdCByZWFkU3RyZWFtKHNlY29uZC52YWx1ZSkpKS50b0JlKFxuICAgICAgXCJwYXlsb2FkXCIsXG4gICAgKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJQZW5kaW5nU2V0c1wiLCAoKSA9PiB7XG4gIGl0KFwiaG9sZHMgYSBnZXQgdW50aWwgdGhlIHNldCBmb3IgaXRzIGtleSBlbmRzXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBwZW5kaW5nID0gbmV3IFBlbmRpbmdTZXRzKCk7XG4gICAgY29uc3QgZG9uZSA9IHBlbmRpbmcuYmVnaW4oXCJrXCIpO1xuICAgIGxldCB3YWl0ZWQgPSBmYWxzZTtcbiAgICBjb25zdCB3YWl0ID0gcGVuZGluZy53YWl0KFwia1wiKS50aGVuKCgpID0+ICh3YWl0ZWQgPSB0cnVlKSk7XG4gICAgYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgZXhwZWN0KHdhaXRlZCkudG9CZShmYWxzZSk7XG4gICAgZG9uZSgpO1xuICAgIGF3YWl0IHdhaXQ7XG4gICAgZXhwZWN0KHdhaXRlZCkudG9CZSh0cnVlKTtcbiAgICAvLyBOb3RoaW5nIHBlbmRpbmc6IG5vIHdhaXQgYXQgYWxsLlxuICAgIGF3YWl0IHBlbmRpbmcud2FpdChcImtcIik7XG4gICAgYXdhaXQgcGVuZGluZy53YWl0KFwib3RoZXJcIik7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwic2hhcmVkVGFnTWFuaWZlc3RcIiwgKCkgPT4ge1xuICBpdChcImJvdW5kcyBlYWNoIHJldmFsaWRhdGlvbiB0YWJsZSByZXF1ZXN0LCBmYWlsaW5nIGl0IG9uY2UgdGltZWQgb3V0XCIsICgpID0+IHtcbiAgICBjb25zdCBnbG9iYWwgPSBnbG9iYWxUaGlzIGFzIFJlY29yZDxzeW1ib2wsIHVua25vd24+O1xuICAgIHByb2Nlc3MuZW52LkNES19ORVhUSlNfUkVWQUxJREFUSU9OX1RBQkxFX05BTUUgPSBcInRhYmxlXCI7XG4gICAgdHJ5IHtcbiAgICAgIHNoYXJlZFRhZ01hbmlmZXN0KCk7XG4gICAgICAvLyBBIHRpbWVvdXQgdGhhdCBvbmx5IHdhcm5zIGxlYXZlcyBhIHJlcXVlc3Qgb24gYSBkZWFkIGNvbm5lY3Rpb24sIGFuZFxuICAgICAgLy8gZXZlcnkgcmVxdWVzdCB3YWl0aW5nIG9uIHRoZSByZWZyZXNoLCBoYW5naW5nLlxuICAgICAgZXhwZWN0KER5bmFtb0RCQ2xpZW50KS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgICAgZXhwZWN0Lm9iamVjdENvbnRhaW5pbmcoe1xuICAgICAgICAgIHJlcXVlc3RIYW5kbGVyOiB7XG4gICAgICAgICAgICByZXF1ZXN0VGltZW91dDogVEFHX1RBQkxFX1JFUVVFU1RfVElNRU9VVF9NUyxcbiAgICAgICAgICAgIHRocm93T25SZXF1ZXN0VGltZW91dDogdHJ1ZSxcbiAgICAgICAgICAgIHNvY2tldFRpbWVvdXQ6IFRBR19UQUJMRV9SRVFVRVNUX1RJTUVPVVRfTVMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBkZWxldGUgcHJvY2Vzcy5lbnYuQ0RLX05FWFRKU19SRVZBTElEQVRJT05fVEFCTEVfTkFNRTtcbiAgICAgIGRlbGV0ZSBnbG9iYWxbVEFHX01BTklGRVNUX1NZTUJPTF07XG4gICAgfVxuICB9KTtcbn0pO1xuIl19