footprintjs 9.44.1 → 9.44.2

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 (34) hide show
  1. package/CLAUDE.md +4 -3
  2. package/dist/esm/lib/capture/freeze.d.ts +51 -7
  3. package/dist/esm/lib/capture/freeze.js +289 -24
  4. package/dist/esm/lib/capture/valueKinds.d.ts +57 -0
  5. package/dist/esm/lib/capture/valueKinds.js +142 -0
  6. package/dist/esm/lib/memory/EventLog.d.ts +24 -6
  7. package/dist/esm/lib/memory/EventLog.js +30 -10
  8. package/dist/esm/lib/memory/admission.js +4 -3
  9. package/dist/esm/lib/memory/borrowedMutation.js +2 -2
  10. package/dist/esm/lib/memory/equality.d.ts +55 -19
  11. package/dist/esm/lib/memory/equality.js +154 -51
  12. package/dist/esm/lib/memory/logModel.js +11 -4
  13. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +4 -1
  14. package/dist/esm/lib/runner/ExecutionRuntime.js +15 -10
  15. package/dist/esm/lib/runner/snapshot.js +17 -3
  16. package/dist/esm/lib/slice/elementProvenance.js +2 -2
  17. package/dist/esm/lib/time-travel/chain.js +28 -26
  18. package/dist/lib/capture/freeze.js +292 -25
  19. package/dist/lib/capture/valueKinds.js +146 -0
  20. package/dist/lib/memory/EventLog.js +29 -9
  21. package/dist/lib/memory/admission.js +4 -3
  22. package/dist/lib/memory/borrowedMutation.js +2 -2
  23. package/dist/lib/memory/equality.js +154 -51
  24. package/dist/lib/memory/logModel.js +11 -4
  25. package/dist/lib/runner/ExecutionRuntime.js +14 -9
  26. package/dist/lib/runner/snapshot.js +16 -2
  27. package/dist/lib/slice/elementProvenance.js +2 -2
  28. package/dist/lib/time-travel/chain.js +27 -25
  29. package/dist/types/lib/capture/freeze.d.ts +51 -7
  30. package/dist/types/lib/capture/valueKinds.d.ts +57 -0
  31. package/dist/types/lib/memory/EventLog.d.ts +24 -6
  32. package/dist/types/lib/memory/equality.d.ts +55 -19
  33. package/dist/types/lib/runner/ExecutionRuntime.d.ts +4 -1
  34. package/package.json +2 -1
@@ -14,11 +14,17 @@
14
14
  * (`verbs.ts · foldRows` detaches, `StageContext · retainedForm` clones) — pinned by
15
15
  * test/lib/memory/property/record-reachability.property.test.ts.
16
16
  *
17
- * Named holes — what `Object.freeze` cannot reach stays mutable: Map and Set contents, a Date's
18
- * time, the bytes of a typed array (skipped: a non-empty one cannot be frozen), and an object hung
19
- * on an array EXPANDO (arrays are walked by index — `deepFreeze`'s `'indices'` walk, which keeps
20
- * the freeze inside its budget). A frozen RegExp's `lastIndex` is read-only, so a `/g` or `/y`
21
- * regex read from a bundle throws when `exec` or `replace` advance it.
17
+ * What `Object.freeze` cannot seal — a Date's time, a Map's or Set's entries, a buffer's bytes, a
18
+ * RegExp, an Error's stack — is never handed out to a reader (9.44.2): `record` remembers that a
19
+ * bundle holds such a value (`capture/freeze.ts · freezeRecord`), and `list()` — like the public
20
+ * snapshot, `runner/snapshot.ts · servedSnapshot` — serves that bundle as a copy of its open paths
21
+ * (`serveRecord`, mapped at its first serve): fresh frozen containers down to each such value, a
22
+ * fresh copy of it, every other part the log's own. A reader edits only its own copy; every later
23
+ * serve reads the record as recorded. `recorded()` is the engine's own, unserved read. Named holes: an object hung on an array EXPANDO (arrays are walked
24
+ * by index — the `'indices'` walk, which keeps the freeze inside its budget; an expando is out of
25
+ * contract for state) and a `SharedArrayBuffer` (every copy shares its memory). A frozen RegExp's
26
+ * `lastIndex` is read-only, so a `/g` or `/y` regex read from a bundle throws when `exec` or
27
+ * `replace` advance it.
22
28
  */
23
29
  Object.defineProperty(exports, "__esModule", { value: true });
24
30
  exports.EventLog = void 0;
@@ -91,12 +97,26 @@ class EventLog {
91
97
  */
92
98
  record(bundle) {
93
99
  bundle.idx = this.steps.length;
94
- (0, freeze_js_1.deepFreeze)(bundle, 'indices');
100
+ (0, freeze_js_1.freezeRecord)(bundle, 'indices');
95
101
  this.steps.push(bundle);
96
102
  }
97
- /** Gets all recorded commit bundles — the live array; every bundle in it is frozen. */
103
+ /**
104
+ * Every recorded commit bundle, AS SERVED (9.44.2): a new array each call; a bundle freezing sealed
105
+ * whole is the log's own (frozen) object, one holding a Date, Map, buffer … is a copy of its open
106
+ * paths (`capture/freeze.ts · serveRecord`) — the reader's own, so no edit reaches the log.
107
+ */
98
108
  list() {
99
- return this.steps;
109
+ return this.steps.map(freeze_js_1.serveRecord);
110
+ }
111
+ /**
112
+ * @internal The bundles as the log holds them — each frozen, NOT served — in a new array, so a holder's
113
+ * `splice` reaches only its own. For the engine's own snapshot (`ExecutionRuntime · getSnapshot`, which
114
+ * a subflow mount takes once per mount), so the run serves nothing; a reader is served by `list()` and
115
+ * `getSnapshot().commitLog`. A known open door (CHANGELOG 9.44.2): a holder of these bundles can still
116
+ * edit a Date, Map or buffer inside them.
117
+ */
118
+ recorded() {
119
+ return this.steps.slice();
100
120
  }
101
121
  /** Number of recorded commits. */
102
122
  get length() {
@@ -129,4 +149,4 @@ class EventLog {
129
149
  }
130
150
  }
131
151
  exports.EventLog = EventLog;
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRMb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL21lbW9yeS9FdmVudExvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHOzs7QUFFSCxvREFBa0Q7QUFHbEQseUNBQWlEO0FBRWpELE1BQWEsUUFBUTtJQUNuQiw2REFBNkQ7SUFDckQsSUFBSSxDQUFNO0lBQ2xCLHNDQUFzQztJQUM5QixLQUFLLEdBQW1CLEVBQUUsQ0FBQztJQUMzQixhQUFhLENBQWM7SUFDM0Isb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0lBRXJDLFlBQVksYUFBa0I7UUFDNUIsdUVBQXVFO1FBQ3ZFLHNFQUFzRTtRQUN0RSxzRUFBc0U7UUFDdEUsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILGVBQWU7UUFDYixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW9CRztJQUNILFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsSUFBQSw4QkFBbUIsRUFBQyxHQUFHLEVBQUUsT0FBc0IsRUFBRSxTQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxNQUFvQjtRQUN6QixNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQy9CLElBQUEsc0JBQVUsRUFBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELHVGQUF1RjtJQUN2RixJQUFJO1FBQ0YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxrQ0FBa0M7SUFDbEMsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUMzQixDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsd0ZBQXdGO0lBQ3hGLFdBQVcsQ0FBQyxRQUFnQixFQUFFLFNBQTRCO1FBQ3hELElBQUksSUFBSSxDQUFDLG9CQUFvQjtZQUFFLE9BQU87UUFDdEMsSUFBSSxDQUFDLGFBQWEsS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQsK0ZBQStGO0lBQy9GLGVBQWUsQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQzFDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRUQsOENBQThDO0lBQzlDLEtBQUs7UUFDSCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQix3RUFBd0U7UUFDeEUsc0VBQXNFO1FBQ3RFLHVFQUF1RTtRQUN2RSxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztRQUMvQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0lBQ25DLENBQUM7Q0FDRjtBQS9HRCw0QkErR0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEV2ZW50TG9nIOKAlCBUaW1lLXRyYXZlbCBzbmFwc2hvdCBzdG9yYWdlIGZvciBmbG93Y2hhcnQgZXhlY3V0aW9uXG4gKlxuICogTGlrZSBnaXQgaGlzdG9yeTogc3RvcmVzIGNvbW1pdCBidW5kbGVzIChkaWZmcyksIG5vdCBmdWxsIHNuYXBzaG90cy5cbiAqXG4gKiBUSEUgUkVDT1JEIElTIElNTVVUQUJMRSBGUk9NIGByZWNvcmRgIChGMywgcnVsaW5nIFIzKS4gRXZlcnkgYnVuZGxlIGlzIGRlZXAtZnJvemVuIGFzIGl0IGlzXG4gKiByZWNvcmRlZCDigJQgdGhlIGJ1bmRsZSwgYG92ZXJ3cml0ZWAgYW5kIGB1cGRhdGVzYCBhdCBldmVyeSBkZXB0aCwgdGhlIHRyYWNlIGFuZCBlYWNoIHJvdywgdGhlXG4gKiByb3cncyBgcmVhZEtleXNgLCBgcmVkYWN0ZWRQYXRoc2AsIGB0YWdzYCwgYHVudHJhY2tlZFNvdXJjZXNgIOKAlCBzbyBhIGhvbGRlciBvZiBhIHNuYXBzaG90IGNhbiBub1xuICogbG9uZ2VyIHJld3JpdGUgdGhlIGhpc3RvcnkgZXZlcnkgbGF0ZXIgYW5zd2VyIGlzIGZvbGRlZCBmcm9tOiBhbiBhc3NpZ25tZW50IGludG8gYSBidW5kbGUgdGhyb3dzXG4gKiBhIGBUeXBlRXJyb3JgIGluIHN0cmljdCBjb2RlLiBTYWZlIGJlY2F1c2Ugbm90aGluZyBvdXRzaWRlIHRoZSBsb2cgaG9sZHMgYSBidW5kbGUncyBjb250YWluZXJzOlxuICogdGhlIGxvZydzIHBheWxvYWQgaXMgdGhlIGNvbW1pdCdzIG93biBjb3B5IChgU3RhZ2VDb250ZXh0IMK3IGNvbW1pdGAgaGFuZHMgaXQgdGhlIG91dHB1dCBvZlxuICogYHNjcnViUGF0Y2hgKSwgYW5kIGxpdmUgc3RhdGUsIHRoZSByZWRhY3RlZCBtaXJyb3IgYW5kIHdyaXRlIHJldGVudGlvbiBlYWNoIHRha2UgdGhlaXIgb3duIGNvcHlcbiAqIChgdmVyYnMudHMgwrcgZm9sZFJvd3NgIGRldGFjaGVzLCBgU3RhZ2VDb250ZXh0IMK3IHJldGFpbmVkRm9ybWAgY2xvbmVzKSDigJQgcGlubmVkIGJ5XG4gKiB0ZXN0L2xpYi9tZW1vcnkvcHJvcGVydHkvcmVjb3JkLXJlYWNoYWJpbGl0eS5wcm9wZXJ0eS50ZXN0LnRzLlxuICpcbiAqIE5hbWVkIGhvbGVzIOKAlCB3aGF0IGBPYmplY3QuZnJlZXplYCBjYW5ub3QgcmVhY2ggc3RheXMgbXV0YWJsZTogTWFwIGFuZCBTZXQgY29udGVudHMsIGEgRGF0ZSdzXG4gKiB0aW1lLCB0aGUgYnl0ZXMgb2YgYSB0eXBlZCBhcnJheSAoc2tpcHBlZDogYSBub24tZW1wdHkgb25lIGNhbm5vdCBiZSBmcm96ZW4pLCBhbmQgYW4gb2JqZWN0IGh1bmdcbiAqIG9uIGFuIGFycmF5IEVYUEFORE8gKGFycmF5cyBhcmUgd2Fsa2VkIGJ5IGluZGV4IOKAlCBgZGVlcEZyZWV6ZWAncyBgJ2luZGljZXMnYCB3YWxrLCB3aGljaCBrZWVwc1xuICogdGhlIGZyZWV6ZSBpbnNpZGUgaXRzIGJ1ZGdldCkuIEEgZnJvemVuIFJlZ0V4cCdzIGBsYXN0SW5kZXhgIGlzIHJlYWQtb25seSwgc28gYSBgL2dgIG9yIGAveWBcbiAqIHJlZ2V4IHJlYWQgZnJvbSBhIGJ1bmRsZSB0aHJvd3Mgd2hlbiBgZXhlY2Agb3IgYHJlcGxhY2VgIGFkdmFuY2UgaXQuXG4gKi9cblxuaW1wb3J0IHsgZGVlcEZyZWV6ZSB9IGZyb20gJy4uL2NhcHR1cmUvZnJlZXplLmpzJztcbmltcG9ydCB0eXBlIHsgRW1pdFNvdXJjZVBvc2l0aW9uLCBMb2dBZGRyZXNzIH0gZnJvbSAnLi9ldmVudFBvc2l0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlLCBNZW1vcnlQYXRjaCB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgYXBwbHlTbWFydE1lcmdlSW50byB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG5leHBvcnQgY2xhc3MgRXZlbnRMb2cge1xuICAvKiogQmFzZSBzbmFwc2hvdCBCRUZPUkUgdGhlIGZpcnN0IHN0YWdlIG11dGF0ZXMgYW55dGhpbmcuICovXG4gIHByaXZhdGUgYmFzZTogYW55O1xuICAvKiogT3JkZXJlZCBsaXN0IG9mIGNvbW1pdCBidW5kbGVzLiAqL1xuICBwcml2YXRlIHN0ZXBzOiBDb21taXRCdW5kbGVbXSA9IFtdO1xuICBwcml2YXRlIHNvdXJjZUFkZHJlc3M/OiBMb2dBZGRyZXNzO1xuICBwcml2YXRlIHNvdXJjZUFkZHJlc3NSZXRpcmVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoaW5pdGlhbE1lbW9yeTogYW55KSB7XG4gICAgLy8gTm9ybWFsaXNlZCB0byBhbiBvYmplY3Q6IHRoZSBiYXNlIGlzIGEgU1RBVEUsIGFuZCBldmVyeSBmb2xkIG92ZXIgaXRcbiAgICAvLyAoYG1hdGVyaWFsaXNlYCwgYHN0YXRlQXRgKSBhcHBsaWVzIHBhdGggd3JpdGVzIHRvIGl0LiBgdW5kZWZpbmVkYCDigJRcbiAgICAvLyB3aGF0IGEgcnVuIHdpdGggbm8gYGluaXRpYWxDb250ZXh0YCB1c2VkIHRvIHN0b3JlIGhlcmUg4oCUIG1hZGUgZXZlcnlcbiAgICAvLyBvbmUgb2YgdGhvc2UgZm9sZHMgdGhyb3cgb24gdGhlIGZpcnN0IGBzZXRgLlxuICAgIHRoaXMuYmFzZSA9IGluaXRpYWxNZW1vcnkgPT09IHVuZGVmaW5lZCA/IHt9IDogc3RydWN0dXJlZENsb25lKGluaXRpYWxNZW1vcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkIEJBU0Ug4oCUIHRoZSBzdGF0ZSBhcyBpdCBzdG9vZCBiZWZvcmUgdGhlIGZpcnN0IGNvbW1pdC5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgb3RoZXIgaGFsZiBvZiB0aGUgY29tbWl0IGxvZzogYnVuZGxlcyBhcmUgRElGRlMsIHNvIGEgbG9nXG4gICAqIGFsb25lIGNhbm5vdCByZWNvbnN0cnVjdCBzdGF0ZSB0aGF0IHdhcyBzZWVkZWQgYmVmb3JlIHRoZSBydW4gKGFuXG4gICAqIGV4ZWN1dG9yIGBpbml0aWFsQ29udGV4dGAsIGBkZWZhdWx0VmFsdWVzRm9yQ29udGV4dGAsIGEgcmVzdW1lJ3NcbiAgICogYGNoZWNrcG9pbnQuc2hhcmVkU3RhdGVgLCBhIHN1YmZsb3cncyBgaW5wdXRNYXBwZXJgIHNlZWQpLiBUcmF2ZWxsaW5nXG4gICAqIHdpdGggdGhlIGxvZyDigJQgYFJ1bnRpbWVTbmFwc2hvdC5pbml0aWFsU3RhdGVgIOKAlCBpcyB3aGF0IGxldHMgYW4gT0ZGTElORVxuICAgKiBjb25zdW1lciBmb2xkOyB3aXRob3V0IGl0IHRoZSBob25lc3QgYW5zd2VyIGlzIGEgcGFydGlhbCBvbmVcbiAgICogKGBzdGF0ZUF0YCdzIGBiYXNpczogJ2xvZy1vbmx5J2ApLlxuICAgKlxuICAgKiBSZXR1cm5zIGEgZnJlc2ggZGV0YWNoZWQgY2xvbmUgb24gZXZlcnkgY2FsbCDigJQgdGhlIGNhbGxlciBvd25zIGl0LlxuICAgKi9cbiAgZ2V0SW5pdGlhbFN0YXRlKCk6IGFueSB7XG4gICAgcmV0dXJuIHN0cnVjdHVyZWRDbG9uZSh0aGlzLmJhc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlY29uc3RydWN0cyB0aGUgZnVsbCBzdGF0ZSBhdCBhbnkgZ2l2ZW4gc3RlcC5cbiAgICogUmVwbGF5cyBjb21taXRzIGZyb20gdGhlIGJlZ2lubmluZyDigJQgTyhuKSBidXQgbG93IG1lbW9yeSBmb290cHJpbnQuXG4gICAqXG4gICAqIElOREVYIENPTlZFTlRJT04g4oCUIGBzdGVwSWR4YCBpcyBFWENMVVNJVkU6IGBtYXRlcmlhbGlzZSgzKWAgZm9sZHMgY29tbWl0c1xuICAgKiAwLCAxIGFuZCAyLiBgc3RhdGVBdChzb3VyY2UsIGNvbW1pdElkeClgIChmb290cHJpbnRqcy90cmFjZSkgZm9sZHMgdGhlXG4gICAqIHNhbWUgbG9nIGJ1dCBpdHMgYGNvbW1pdElkeGAgaXMgSU5DTFVTSVZFLCBiZWNhdXNlIGEgcmVhZGVyJ3MgY3Vyc29yIGFza3NcbiAgICogXCJ0aGUgc3RhdGUgQVQgdGhpcyBzdG9wXCIsIHdoaWNoIG11c3QgaW5jbHVkZSB0aGF0IHN0b3AncyBvd24gY29tbWl0LiBUd29cbiAgICogZm9sZHMgb3ZlciBvbmUgbG9nIHdpdGggb3Bwb3NpdGUgY29udmVudGlvbnM6IGNoZWNrIHdoaWNoIG9uZSB5b3UgaG9sZC5cbiAgICpcbiAgICogT25lIGNsb25lIG9mIHRoZSBiYXNlIHBlciBjYWxsLCB0aGVuIGV2ZXJ5IGJ1bmRsZSByZXBsYXllZCBJTlRPIHRoYXRcbiAgICogcHJpdmF0ZSBjb3B5IChgYXBwbHlTbWFydE1lcmdlSW50b2Ag4oCUIHRoZSBsaXZlIGNvbW1pdCdzIGNvcHktb24td3JpdGUgbGF3XG4gICAqIGJlbG93IHRoZSByb290LCA5LjI5LjAsIHNvIHRoZSBmb2xkIGFuZCB0aGUgbGl2ZSBzdGF0ZSBhZ3JlZSBhdCBldmVyeVxuICAgKiBwYXRoKS4gVGhlIHJlc3VsdCBpcyB0aGUgY2FsbGVyJ3M6IGl0IHNoYXJlcyBub3RoaW5nIHdpdGggdGhlIGJhc2Ugb3JcbiAgICogdGhlIGxvZy5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgU2luY2UgOS4zMy4wIOKAlCB1c2UgYHN0YXRlQXRgIGZyb20gYGZvb3RwcmludGpzL3RyYWNlYCwgd2hpY2ggZm9sZHMgdGhlIHNhbWUgbG9nXG4gICAqIGZyb20gdGhlIHNhbWUgYmFzZSAoYFJ1bnRpbWVTbmFwc2hvdC5pbml0aWFsU3RhdGVgKSBhbmQgc2F5cyBob3cgaXQgd2FzIGRlcml2ZWQgKGBiYXNpc2ApLlxuICAgKiBOb3RoaW5nIGluIHRoZSBsaWJyYXJ5IGNhbGxzIHRoaXM7IGl0IHN0YXlzIGZvciBvbmUgbWlub3IgYW5kIGlzIHRoZW4gcmVtb3ZlZC4gTWluZCB0aGVcbiAgICogaW5kZXg6IGBtYXRlcmlhbGlzZShuKWAgZm9sZHMgY29tbWl0cyBgMC4ubi0xYCwgYHN0YXRlQXQoc291cmNlLCBuIC0gMSlgIHRoZSBzYW1lIGNvbW1pdHMuXG4gICAqL1xuICBtYXRlcmlhbGlzZShzdGVwSWR4ID0gdGhpcy5zdGVwcy5sZW5ndGgpOiBhbnkge1xuICAgIGNvbnN0IG91dCA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLmJhc2UpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RlcElkeDsgaSsrKSB7XG4gICAgICBjb25zdCB7IG92ZXJ3cml0ZSwgdXBkYXRlcywgdHJhY2UgfSA9IHRoaXMuc3RlcHNbaV07XG4gICAgICBhcHBseVNtYXJ0TWVyZ2VJbnRvKG91dCwgdXBkYXRlcyBhcyBNZW1vcnlQYXRjaCwgb3ZlcndyaXRlIGFzIE1lbW9yeVBhdGNoLCB0cmFjZSk7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICAvKipcbiAgICogUGVyc2lzdHMgYSBjb21taXQgYnVuZGxlIGZvciBhIGZpbmlzaGVkIHN0YWdlLCBhbmQgRlJFRVpFUyBpdCAoc2VlIHRoZSBtb2R1bGUgZG9jKTogdGhlIGJ1bmRsZVxuICAgKiBpcyBzdGFtcGVkIHdpdGggaXRzIHBvc2l0aW9uLCB0aGVuIGRlZXAtZnJvemVuLCB0aGVuIGFwcGVuZGVkLiBUaGUgZW5naW5lIGhhbmRzIGl0IGEgYnVuZGxlXG4gICAqIGJ1aWx0IGZvciB0aGUgbG9nIGFsb25lOyBhIGNhbGxlciBvZiB0aGlzIGNsYXNzIChgZm9vdHByaW50anMvYWR2YW5jZWRgKSBoYW5kcyBvdmVyIGEgYnVuZGxlIGl0XG4gICAqIHdpbGwgbm8gbG9uZ2VyIGVkaXQg4oCUIGl0cyBvd24gb2JqZWN0IGlzIHRoZSBvbmUgZnJvemVuLlxuICAgKi9cbiAgcmVjb3JkKGJ1bmRsZTogQ29tbWl0QnVuZGxlKTogdm9pZCB7XG4gICAgYnVuZGxlLmlkeCA9IHRoaXMuc3RlcHMubGVuZ3RoO1xuICAgIGRlZXBGcmVlemUoYnVuZGxlLCAnaW5kaWNlcycpO1xuICAgIHRoaXMuc3RlcHMucHVzaChidW5kbGUpO1xuICB9XG5cbiAgLyoqIEdldHMgYWxsIHJlY29yZGVkIGNvbW1pdCBidW5kbGVzIOKAlCB0aGUgbGl2ZSBhcnJheTsgZXZlcnkgYnVuZGxlIGluIGl0IGlzIGZyb3plbi4gKi9cbiAgbGlzdCgpOiBDb21taXRCdW5kbGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHM7XG4gIH1cblxuICAvKiogTnVtYmVyIG9mIHJlY29yZGVkIGNvbW1pdHMuICovXG4gIGdldCBsZW5ndGgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwcy5sZW5ndGg7XG4gIH1cblxuICAvKiogSW1tdXRhYmxlIGlkZW50aXR5IG9mIHRoaXMgbG9nLCBhYnNlbnQgdW50aWwgdGhlIGVuZ2luZSBiaW5kcyBpdC4gKi9cbiAgZ2V0IGFkZHJlc3MoKTogTG9nQWRkcmVzcyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlQWRkcmVzcztcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgQmluZCBvbmNlOyByZXN1bWluZyB0aGUgc2FtZSBsb2cgbXVzdCBub3QgcmVuYW1lIGl0cyBlYXJsaWVyIHBvc2l0aW9ucy4gKi9cbiAgYmluZEFkZHJlc3MobG9nUnVuSWQ6IHN0cmluZywgZHJpbGxQYXRoOiByZWFkb25seSBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNvdXJjZUFkZHJlc3NSZXRpcmVkKSByZXR1cm47XG4gICAgdGhpcy5zb3VyY2VBZGRyZXNzID8/PSBPYmplY3QuZnJlZXplKHsgbG9nUnVuSWQsIGRyaWxsUGF0aDogT2JqZWN0LmZyZWV6ZShbLi4uZHJpbGxQYXRoXSkgfSk7XG4gIH1cblxuICAvKiogTygxKSBzb3VyY2UtdGltZSBjYXB0dXJlLiBObyBjb3VudGVyLCBvYnNlcnZlciBib29ra2VlcGluZywgb3IgZnV0dXJlIGNvbW1pdCBwcmVkaWN0aW9uLiAqL1xuICBjYXB0dXJlUG9zaXRpb24ocnVuSWQ6IHN0cmluZyk6IEVtaXRTb3VyY2VQb3NpdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCF0aGlzLnNvdXJjZUFkZHJlc3MpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyBydW5JZCwgLi4udGhpcy5zb3VyY2VBZGRyZXNzLCBjb21taXR0ZWRUaHJvdWdoSWR4OiB0aGlzLnN0ZXBzLmxlbmd0aCAtIDEgfSk7XG4gIH1cblxuICAvKiogV2lwZXMgaGlzdG9yeSAodXNlZnVsIGZvciB0ZXN0IHJlc2V0cykuICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMuc3RlcHMgPSBbXTtcbiAgICAvLyBBIHJlc2V0IHByZWZpeCBjYW5ub3QgcmV1c2Ugb2xkIGNvb3JkaW5hdGVzLCBldmVuIGlmIGFub3RoZXIgc3RhZ2Ugb2ZcbiAgICAvLyB0aGUgU0FNRSBsZWcgYmluZHMgaXQgYWdhaW4uIEtlZXAgY2xlYXIncyBkYXRhIGJlaGF2aW9yLCBidXQgcmV0aXJlXG4gICAgLy8gYWRkcmVzc2luZyBmb3IgdGhpcyBsb2c7IGtub3duIGNvb3JkaW5hdGVzIHJlcXVpcmUgYSBmcmVzaCBFdmVudExvZy5cbiAgICB0aGlzLnNvdXJjZUFkZHJlc3MgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5zb3VyY2VBZGRyZXNzUmV0aXJlZCA9IHRydWU7XG4gIH1cbn1cbiJdfQ==
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRMb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL21lbW9yeS9FdmVudExvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHOzs7QUFFSCxvREFBaUU7QUFHakUseUNBQWlEO0FBRWpELE1BQWEsUUFBUTtJQUNuQiw2REFBNkQ7SUFDckQsSUFBSSxDQUFNO0lBQ2xCLHNDQUFzQztJQUM5QixLQUFLLEdBQW1CLEVBQUUsQ0FBQztJQUMzQixhQUFhLENBQWM7SUFDM0Isb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0lBRXJDLFlBQVksYUFBa0I7UUFDNUIsdUVBQXVFO1FBQ3ZFLHNFQUFzRTtRQUN0RSxzRUFBc0U7UUFDdEUsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILGVBQWU7UUFDYixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW9CRztJQUNILFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsSUFBQSw4QkFBbUIsRUFBQyxHQUFHLEVBQUUsT0FBc0IsRUFBRSxTQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxNQUFvQjtRQUN6QixNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQy9CLElBQUEsd0JBQVksRUFBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxJQUFJO1FBQ0YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyx1QkFBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzNCLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCx3RkFBd0Y7SUFDeEYsV0FBVyxDQUFDLFFBQWdCLEVBQUUsU0FBNEI7UUFDeEQsSUFBSSxJQUFJLENBQUMsb0JBQW9CO1lBQUUsT0FBTztRQUN0QyxJQUFJLENBQUMsYUFBYSxLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCwrRkFBK0Y7SUFDL0YsZUFBZSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDMUMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLHdFQUF3RTtRQUN4RSxzRUFBc0U7UUFDdEUsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7SUFDbkMsQ0FBQztDQUNGO0FBOUhELDRCQThIQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXZlbnRMb2cg4oCUIFRpbWUtdHJhdmVsIHNuYXBzaG90IHN0b3JhZ2UgZm9yIGZsb3djaGFydCBleGVjdXRpb25cbiAqXG4gKiBMaWtlIGdpdCBoaXN0b3J5OiBzdG9yZXMgY29tbWl0IGJ1bmRsZXMgKGRpZmZzKSwgbm90IGZ1bGwgc25hcHNob3RzLlxuICpcbiAqIFRIRSBSRUNPUkQgSVMgSU1NVVRBQkxFIEZST00gYHJlY29yZGAgKEYzLCBydWxpbmcgUjMpLiBFdmVyeSBidW5kbGUgaXMgZGVlcC1mcm96ZW4gYXMgaXQgaXNcbiAqIHJlY29yZGVkIOKAlCB0aGUgYnVuZGxlLCBgb3ZlcndyaXRlYCBhbmQgYHVwZGF0ZXNgIGF0IGV2ZXJ5IGRlcHRoLCB0aGUgdHJhY2UgYW5kIGVhY2ggcm93LCB0aGVcbiAqIHJvdydzIGByZWFkS2V5c2AsIGByZWRhY3RlZFBhdGhzYCwgYHRhZ3NgLCBgdW50cmFja2VkU291cmNlc2Ag4oCUIHNvIGEgaG9sZGVyIG9mIGEgc25hcHNob3QgY2FuIG5vXG4gKiBsb25nZXIgcmV3cml0ZSB0aGUgaGlzdG9yeSBldmVyeSBsYXRlciBhbnN3ZXIgaXMgZm9sZGVkIGZyb206IGFuIGFzc2lnbm1lbnQgaW50byBhIGJ1bmRsZSB0aHJvd3NcbiAqIGEgYFR5cGVFcnJvcmAgaW4gc3RyaWN0IGNvZGUuIFNhZmUgYmVjYXVzZSBub3RoaW5nIG91dHNpZGUgdGhlIGxvZyBob2xkcyBhIGJ1bmRsZSdzIGNvbnRhaW5lcnM6XG4gKiB0aGUgbG9nJ3MgcGF5bG9hZCBpcyB0aGUgY29tbWl0J3Mgb3duIGNvcHkgKGBTdGFnZUNvbnRleHQgwrcgY29tbWl0YCBoYW5kcyBpdCB0aGUgb3V0cHV0IG9mXG4gKiBgc2NydWJQYXRjaGApLCBhbmQgbGl2ZSBzdGF0ZSwgdGhlIHJlZGFjdGVkIG1pcnJvciBhbmQgd3JpdGUgcmV0ZW50aW9uIGVhY2ggdGFrZSB0aGVpciBvd24gY29weVxuICogKGB2ZXJicy50cyDCtyBmb2xkUm93c2AgZGV0YWNoZXMsIGBTdGFnZUNvbnRleHQgwrcgcmV0YWluZWRGb3JtYCBjbG9uZXMpIOKAlCBwaW5uZWQgYnlcbiAqIHRlc3QvbGliL21lbW9yeS9wcm9wZXJ0eS9yZWNvcmQtcmVhY2hhYmlsaXR5LnByb3BlcnR5LnRlc3QudHMuXG4gKlxuICogV2hhdCBgT2JqZWN0LmZyZWV6ZWAgY2Fubm90IHNlYWwg4oCUIGEgRGF0ZSdzIHRpbWUsIGEgTWFwJ3Mgb3IgU2V0J3MgZW50cmllcywgYSBidWZmZXIncyBieXRlcywgYVxuICogUmVnRXhwLCBhbiBFcnJvcidzIHN0YWNrIOKAlCBpcyBuZXZlciBoYW5kZWQgb3V0IHRvIGEgcmVhZGVyICg5LjQ0LjIpOiBgcmVjb3JkYCByZW1lbWJlcnMgdGhhdCBhXG4gKiBidW5kbGUgaG9sZHMgc3VjaCBhIHZhbHVlIChgY2FwdHVyZS9mcmVlemUudHMgwrcgZnJlZXplUmVjb3JkYCksIGFuZCBgbGlzdCgpYCDigJQgbGlrZSB0aGUgcHVibGljXG4gKiBzbmFwc2hvdCwgYHJ1bm5lci9zbmFwc2hvdC50cyDCtyBzZXJ2ZWRTbmFwc2hvdGAg4oCUIHNlcnZlcyB0aGF0IGJ1bmRsZSBhcyBhIGNvcHkgb2YgaXRzIG9wZW4gcGF0aHNcbiAqIChgc2VydmVSZWNvcmRgLCBtYXBwZWQgYXQgaXRzIGZpcnN0IHNlcnZlKTogZnJlc2ggZnJvemVuIGNvbnRhaW5lcnMgZG93biB0byBlYWNoIHN1Y2ggdmFsdWUsIGFcbiAqIGZyZXNoIGNvcHkgb2YgaXQsIGV2ZXJ5IG90aGVyIHBhcnQgdGhlIGxvZydzIG93bi4gQSByZWFkZXIgZWRpdHMgb25seSBpdHMgb3duIGNvcHk7IGV2ZXJ5IGxhdGVyXG4gKiBzZXJ2ZSByZWFkcyB0aGUgcmVjb3JkIGFzIHJlY29yZGVkLiBgcmVjb3JkZWQoKWAgaXMgdGhlIGVuZ2luZSdzIG93biwgdW5zZXJ2ZWQgcmVhZC4gTmFtZWQgaG9sZXM6IGFuIG9iamVjdCBodW5nIG9uIGFuIGFycmF5IEVYUEFORE8gKGFycmF5cyBhcmUgd2Fsa2VkXG4gKiBieSBpbmRleCDigJQgdGhlIGAnaW5kaWNlcydgIHdhbGssIHdoaWNoIGtlZXBzIHRoZSBmcmVlemUgaW5zaWRlIGl0cyBidWRnZXQ7IGFuIGV4cGFuZG8gaXMgb3V0IG9mXG4gKiBjb250cmFjdCBmb3Igc3RhdGUpIGFuZCBhIGBTaGFyZWRBcnJheUJ1ZmZlcmAgKGV2ZXJ5IGNvcHkgc2hhcmVzIGl0cyBtZW1vcnkpLiBBIGZyb3plbiBSZWdFeHAnc1xuICogYGxhc3RJbmRleGAgaXMgcmVhZC1vbmx5LCBzbyBhIGAvZ2Agb3IgYC95YCByZWdleCByZWFkIGZyb20gYSBidW5kbGUgdGhyb3dzIHdoZW4gYGV4ZWNgIG9yXG4gKiBgcmVwbGFjZWAgYWR2YW5jZSBpdC5cbiAqL1xuXG5pbXBvcnQgeyBmcmVlemVSZWNvcmQsIHNlcnZlUmVjb3JkIH0gZnJvbSAnLi4vY2FwdHVyZS9mcmVlemUuanMnO1xuaW1wb3J0IHR5cGUgeyBFbWl0U291cmNlUG9zaXRpb24sIExvZ0FkZHJlc3MgfSBmcm9tICcuL2V2ZW50UG9zaXRpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBDb21taXRCdW5kbGUsIE1lbW9yeVBhdGNoIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBhcHBseVNtYXJ0TWVyZ2VJbnRvIH0gZnJvbSAnLi91dGlscy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBFdmVudExvZyB7XG4gIC8qKiBCYXNlIHNuYXBzaG90IEJFRk9SRSB0aGUgZmlyc3Qgc3RhZ2UgbXV0YXRlcyBhbnl0aGluZy4gKi9cbiAgcHJpdmF0ZSBiYXNlOiBhbnk7XG4gIC8qKiBPcmRlcmVkIGxpc3Qgb2YgY29tbWl0IGJ1bmRsZXMuICovXG4gIHByaXZhdGUgc3RlcHM6IENvbW1pdEJ1bmRsZVtdID0gW107XG4gIHByaXZhdGUgc291cmNlQWRkcmVzcz86IExvZ0FkZHJlc3M7XG4gIHByaXZhdGUgc291cmNlQWRkcmVzc1JldGlyZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihpbml0aWFsTWVtb3J5OiBhbnkpIHtcbiAgICAvLyBOb3JtYWxpc2VkIHRvIGFuIG9iamVjdDogdGhlIGJhc2UgaXMgYSBTVEFURSwgYW5kIGV2ZXJ5IGZvbGQgb3ZlciBpdFxuICAgIC8vIChgbWF0ZXJpYWxpc2VgLCBgc3RhdGVBdGApIGFwcGxpZXMgcGF0aCB3cml0ZXMgdG8gaXQuIGB1bmRlZmluZWRgIOKAlFxuICAgIC8vIHdoYXQgYSBydW4gd2l0aCBubyBgaW5pdGlhbENvbnRleHRgIHVzZWQgdG8gc3RvcmUgaGVyZSDigJQgbWFkZSBldmVyeVxuICAgIC8vIG9uZSBvZiB0aG9zZSBmb2xkcyB0aHJvdyBvbiB0aGUgZmlyc3QgYHNldGAuXG4gICAgdGhpcy5iYXNlID0gaW5pdGlhbE1lbW9yeSA9PT0gdW5kZWZpbmVkID8ge30gOiBzdHJ1Y3R1cmVkQ2xvbmUoaW5pdGlhbE1lbW9yeSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZvbGQgQkFTRSDigJQgdGhlIHN0YXRlIGFzIGl0IHN0b29kIGJlZm9yZSB0aGUgZmlyc3QgY29tbWl0LlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBvdGhlciBoYWxmIG9mIHRoZSBjb21taXQgbG9nOiBidW5kbGVzIGFyZSBESUZGUywgc28gYSBsb2dcbiAgICogYWxvbmUgY2Fubm90IHJlY29uc3RydWN0IHN0YXRlIHRoYXQgd2FzIHNlZWRlZCBiZWZvcmUgdGhlIHJ1biAoYW5cbiAgICogZXhlY3V0b3IgYGluaXRpYWxDb250ZXh0YCwgYGRlZmF1bHRWYWx1ZXNGb3JDb250ZXh0YCwgYSByZXN1bWUnc1xuICAgKiBgY2hlY2twb2ludC5zaGFyZWRTdGF0ZWAsIGEgc3ViZmxvdydzIGBpbnB1dE1hcHBlcmAgc2VlZCkuIFRyYXZlbGxpbmdcbiAgICogd2l0aCB0aGUgbG9nIOKAlCBgUnVudGltZVNuYXBzaG90LmluaXRpYWxTdGF0ZWAg4oCUIGlzIHdoYXQgbGV0cyBhbiBPRkZMSU5FXG4gICAqIGNvbnN1bWVyIGZvbGQ7IHdpdGhvdXQgaXQgdGhlIGhvbmVzdCBhbnN3ZXIgaXMgYSBwYXJ0aWFsIG9uZVxuICAgKiAoYHN0YXRlQXRgJ3MgYGJhc2lzOiAnbG9nLW9ubHknYCkuXG4gICAqXG4gICAqIFJldHVybnMgYSBmcmVzaCBkZXRhY2hlZCBjbG9uZSBvbiBldmVyeSBjYWxsIOKAlCB0aGUgY2FsbGVyIG93bnMgaXQuXG4gICAqL1xuICBnZXRJbml0aWFsU3RhdGUoKTogYW55IHtcbiAgICByZXR1cm4gc3RydWN0dXJlZENsb25lKHRoaXMuYmFzZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb25zdHJ1Y3RzIHRoZSBmdWxsIHN0YXRlIGF0IGFueSBnaXZlbiBzdGVwLlxuICAgKiBSZXBsYXlzIGNvbW1pdHMgZnJvbSB0aGUgYmVnaW5uaW5nIOKAlCBPKG4pIGJ1dCBsb3cgbWVtb3J5IGZvb3RwcmludC5cbiAgICpcbiAgICogSU5ERVggQ09OVkVOVElPTiDigJQgYHN0ZXBJZHhgIGlzIEVYQ0xVU0lWRTogYG1hdGVyaWFsaXNlKDMpYCBmb2xkcyBjb21taXRzXG4gICAqIDAsIDEgYW5kIDIuIGBzdGF0ZUF0KHNvdXJjZSwgY29tbWl0SWR4KWAgKGZvb3RwcmludGpzL3RyYWNlKSBmb2xkcyB0aGVcbiAgICogc2FtZSBsb2cgYnV0IGl0cyBgY29tbWl0SWR4YCBpcyBJTkNMVVNJVkUsIGJlY2F1c2UgYSByZWFkZXIncyBjdXJzb3IgYXNrc1xuICAgKiBcInRoZSBzdGF0ZSBBVCB0aGlzIHN0b3BcIiwgd2hpY2ggbXVzdCBpbmNsdWRlIHRoYXQgc3RvcCdzIG93biBjb21taXQuIFR3b1xuICAgKiBmb2xkcyBvdmVyIG9uZSBsb2cgd2l0aCBvcHBvc2l0ZSBjb252ZW50aW9uczogY2hlY2sgd2hpY2ggb25lIHlvdSBob2xkLlxuICAgKlxuICAgKiBPbmUgY2xvbmUgb2YgdGhlIGJhc2UgcGVyIGNhbGwsIHRoZW4gZXZlcnkgYnVuZGxlIHJlcGxheWVkIElOVE8gdGhhdFxuICAgKiBwcml2YXRlIGNvcHkgKGBhcHBseVNtYXJ0TWVyZ2VJbnRvYCDigJQgdGhlIGxpdmUgY29tbWl0J3MgY29weS1vbi13cml0ZSBsYXdcbiAgICogYmVsb3cgdGhlIHJvb3QsIDkuMjkuMCwgc28gdGhlIGZvbGQgYW5kIHRoZSBsaXZlIHN0YXRlIGFncmVlIGF0IGV2ZXJ5XG4gICAqIHBhdGgpLiBUaGUgcmVzdWx0IGlzIHRoZSBjYWxsZXInczogaXQgc2hhcmVzIG5vdGhpbmcgd2l0aCB0aGUgYmFzZSBvclxuICAgKiB0aGUgbG9nLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBTaW5jZSA5LjMzLjAg4oCUIHVzZSBgc3RhdGVBdGAgZnJvbSBgZm9vdHByaW50anMvdHJhY2VgLCB3aGljaCBmb2xkcyB0aGUgc2FtZSBsb2dcbiAgICogZnJvbSB0aGUgc2FtZSBiYXNlIChgUnVudGltZVNuYXBzaG90LmluaXRpYWxTdGF0ZWApIGFuZCBzYXlzIGhvdyBpdCB3YXMgZGVyaXZlZCAoYGJhc2lzYCkuXG4gICAqIE5vdGhpbmcgaW4gdGhlIGxpYnJhcnkgY2FsbHMgdGhpczsgaXQgc3RheXMgZm9yIG9uZSBtaW5vciBhbmQgaXMgdGhlbiByZW1vdmVkLiBNaW5kIHRoZVxuICAgKiBpbmRleDogYG1hdGVyaWFsaXNlKG4pYCBmb2xkcyBjb21taXRzIGAwLi5uLTFgLCBgc3RhdGVBdChzb3VyY2UsIG4gLSAxKWAgdGhlIHNhbWUgY29tbWl0cy5cbiAgICovXG4gIG1hdGVyaWFsaXNlKHN0ZXBJZHggPSB0aGlzLnN0ZXBzLmxlbmd0aCk6IGFueSB7XG4gICAgY29uc3Qgb3V0ID0gc3RydWN0dXJlZENsb25lKHRoaXMuYmFzZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGVwSWR4OyBpKyspIHtcbiAgICAgIGNvbnN0IHsgb3ZlcndyaXRlLCB1cGRhdGVzLCB0cmFjZSB9ID0gdGhpcy5zdGVwc1tpXTtcbiAgICAgIGFwcGx5U21hcnRNZXJnZUludG8ob3V0LCB1cGRhdGVzIGFzIE1lbW9yeVBhdGNoLCBvdmVyd3JpdGUgYXMgTWVtb3J5UGF0Y2gsIHRyYWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJzaXN0cyBhIGNvbW1pdCBidW5kbGUgZm9yIGEgZmluaXNoZWQgc3RhZ2UsIGFuZCBGUkVFWkVTIGl0IChzZWUgdGhlIG1vZHVsZSBkb2MpOiB0aGUgYnVuZGxlXG4gICAqIGlzIHN0YW1wZWQgd2l0aCBpdHMgcG9zaXRpb24sIHRoZW4gZGVlcC1mcm96ZW4sIHRoZW4gYXBwZW5kZWQuIFRoZSBlbmdpbmUgaGFuZHMgaXQgYSBidW5kbGVcbiAgICogYnVpbHQgZm9yIHRoZSBsb2cgYWxvbmU7IGEgY2FsbGVyIG9mIHRoaXMgY2xhc3MgKGBmb290cHJpbnRqcy9hZHZhbmNlZGApIGhhbmRzIG92ZXIgYSBidW5kbGUgaXRcbiAgICogd2lsbCBubyBsb25nZXIgZWRpdCDigJQgaXRzIG93biBvYmplY3QgaXMgdGhlIG9uZSBmcm96ZW4uXG4gICAqL1xuICByZWNvcmQoYnVuZGxlOiBDb21taXRCdW5kbGUpOiB2b2lkIHtcbiAgICBidW5kbGUuaWR4ID0gdGhpcy5zdGVwcy5sZW5ndGg7XG4gICAgZnJlZXplUmVjb3JkKGJ1bmRsZSwgJ2luZGljZXMnKTtcbiAgICB0aGlzLnN0ZXBzLnB1c2goYnVuZGxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmVyeSByZWNvcmRlZCBjb21taXQgYnVuZGxlLCBBUyBTRVJWRUQgKDkuNDQuMik6IGEgbmV3IGFycmF5IGVhY2ggY2FsbDsgYSBidW5kbGUgZnJlZXppbmcgc2VhbGVkXG4gICAqIHdob2xlIGlzIHRoZSBsb2cncyBvd24gKGZyb3plbikgb2JqZWN0LCBvbmUgaG9sZGluZyBhIERhdGUsIE1hcCwgYnVmZmVyIOKApiBpcyBhIGNvcHkgb2YgaXRzIG9wZW5cbiAgICogcGF0aHMgKGBjYXB0dXJlL2ZyZWV6ZS50cyDCtyBzZXJ2ZVJlY29yZGApIOKAlCB0aGUgcmVhZGVyJ3Mgb3duLCBzbyBubyBlZGl0IHJlYWNoZXMgdGhlIGxvZy5cbiAgICovXG4gIGxpc3QoKTogQ29tbWl0QnVuZGxlW10ge1xuICAgIHJldHVybiB0aGlzLnN0ZXBzLm1hcChzZXJ2ZVJlY29yZCk7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsIFRoZSBidW5kbGVzIGFzIHRoZSBsb2cgaG9sZHMgdGhlbSDigJQgZWFjaCBmcm96ZW4sIE5PVCBzZXJ2ZWQg4oCUIGluIGEgbmV3IGFycmF5LCBzbyBhIGhvbGRlcidzXG4gICAqIGBzcGxpY2VgIHJlYWNoZXMgb25seSBpdHMgb3duLiBGb3IgdGhlIGVuZ2luZSdzIG93biBzbmFwc2hvdCAoYEV4ZWN1dGlvblJ1bnRpbWUgwrcgZ2V0U25hcHNob3RgLCB3aGljaFxuICAgKiBhIHN1YmZsb3cgbW91bnQgdGFrZXMgb25jZSBwZXIgbW91bnQpLCBzbyB0aGUgcnVuIHNlcnZlcyBub3RoaW5nOyBhIHJlYWRlciBpcyBzZXJ2ZWQgYnkgYGxpc3QoKWAgYW5kXG4gICAqIGBnZXRTbmFwc2hvdCgpLmNvbW1pdExvZ2AuIEEga25vd24gb3BlbiBkb29yIChDSEFOR0VMT0cgOS40NC4yKTogYSBob2xkZXIgb2YgdGhlc2UgYnVuZGxlcyBjYW4gc3RpbGxcbiAgICogZWRpdCBhIERhdGUsIE1hcCBvciBidWZmZXIgaW5zaWRlIHRoZW0uXG4gICAqL1xuICByZWNvcmRlZCgpOiBDb21taXRCdW5kbGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHMuc2xpY2UoKTtcbiAgfVxuXG4gIC8qKiBOdW1iZXIgb2YgcmVjb3JkZWQgY29tbWl0cy4gKi9cbiAgZ2V0IGxlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnN0ZXBzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKiBJbW11dGFibGUgaWRlbnRpdHkgb2YgdGhpcyBsb2csIGFic2VudCB1bnRpbCB0aGUgZW5naW5lIGJpbmRzIGl0LiAqL1xuICBnZXQgYWRkcmVzcygpOiBMb2dBZGRyZXNzIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2VBZGRyZXNzO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCBCaW5kIG9uY2U7IHJlc3VtaW5nIHRoZSBzYW1lIGxvZyBtdXN0IG5vdCByZW5hbWUgaXRzIGVhcmxpZXIgcG9zaXRpb25zLiAqL1xuICBiaW5kQWRkcmVzcyhsb2dSdW5JZDogc3RyaW5nLCBkcmlsbFBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc291cmNlQWRkcmVzc1JldGlyZWQpIHJldHVybjtcbiAgICB0aGlzLnNvdXJjZUFkZHJlc3MgPz89IE9iamVjdC5mcmVlemUoeyBsb2dSdW5JZCwgZHJpbGxQYXRoOiBPYmplY3QuZnJlZXplKFsuLi5kcmlsbFBhdGhdKSB9KTtcbiAgfVxuXG4gIC8qKiBPKDEpIHNvdXJjZS10aW1lIGNhcHR1cmUuIE5vIGNvdW50ZXIsIG9ic2VydmVyIGJvb2trZWVwaW5nLCBvciBmdXR1cmUgY29tbWl0IHByZWRpY3Rpb24uICovXG4gIGNhcHR1cmVQb3NpdGlvbihydW5JZDogc3RyaW5nKTogRW1pdFNvdXJjZVBvc2l0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuc291cmNlQWRkcmVzcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IHJ1bklkLCAuLi50aGlzLnNvdXJjZUFkZHJlc3MsIGNvbW1pdHRlZFRocm91Z2hJZHg6IHRoaXMuc3RlcHMubGVuZ3RoIC0gMSB9KTtcbiAgfVxuXG4gIC8qKiBXaXBlcyBoaXN0b3J5ICh1c2VmdWwgZm9yIHRlc3QgcmVzZXRzKS4gKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5zdGVwcyA9IFtdO1xuICAgIC8vIEEgcmVzZXQgcHJlZml4IGNhbm5vdCByZXVzZSBvbGQgY29vcmRpbmF0ZXMsIGV2ZW4gaWYgYW5vdGhlciBzdGFnZSBvZlxuICAgIC8vIHRoZSBTQU1FIGxlZyBiaW5kcyBpdCBhZ2Fpbi4gS2VlcCBjbGVhcidzIGRhdGEgYmVoYXZpb3IsIGJ1dCByZXRpcmVcbiAgICAvLyBhZGRyZXNzaW5nIGZvciB0aGlzIGxvZzsga25vd24gY29vcmRpbmF0ZXMgcmVxdWlyZSBhIGZyZXNoIEV2ZW50TG9nLlxuICAgIHRoaXMuc291cmNlQWRkcmVzcyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNvdXJjZUFkZHJlc3NSZXRpcmVkID0gdHJ1ZTtcbiAgfVxufVxuIl19
@@ -52,10 +52,11 @@ function foldsBack(fold, workingCopy, family, address) {
52
52
  return false;
53
53
  const folded = (0, pathOps_js_1.nativeGet)(fold, segments);
54
54
  const read = (0, pathOps_js_1.nativeGet)(workingCopy, segments);
55
- if ((0, utils_js_1.deepEqual)(folded, read))
55
+ // Both sides are the same values as a record holds them: an opaque one (a Blob) is never the same object.
56
+ if ((0, utils_js_1.deepEqual)(folded, read, 'copies'))
56
57
  return true;
57
58
  family.held = { value: structuredClone(read) };
58
- return (0, utils_js_1.deepEqual)(folded, family.held.value);
59
+ return (0, utils_js_1.deepEqual)(folded, family.held.value, 'copies');
59
60
  }
60
61
  /**
61
62
  * Every staged path grouped under its SHALLOWEST staged ancestor-or-self —
@@ -155,4 +156,4 @@ function shallowestIn(path, touched) {
155
156
  }
156
157
  return path;
157
158
  }
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvYWRtaXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7OztBQUVILDZDQUF3RTtBQUV4RSx5Q0FBdUQ7QUFrQ3ZEOzs7O0dBSUc7QUFDSCxTQUFnQixhQUFhLENBQzNCLFNBQWUsRUFDZixJQUFhLEVBQ2IsV0FBb0IsRUFDcEIsR0FBd0IsRUFDeEIsT0FBMEI7SUFFMUIsTUFBTSxJQUFJLEdBQUcsSUFBQSxrQkFBTyxFQUFDLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BGLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELElBQUksS0FBc0MsQ0FBQztJQUMzQyxLQUFLLE1BQU0sTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO1lBQUUsQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFDRCxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3ZFLENBQUM7QUFkRCxzQ0FjQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxJQUFhLEVBQUUsV0FBb0IsRUFBRSxNQUFjLEVBQUUsT0FBMEI7SUFDaEcsTUFBTSxRQUFR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QUFJLElBQUksQ0FBQyxDQUFDLElBQUEsd0JBQVcsRUFBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztJQUM1RixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLFFBQVEsQ0FBQyxDQUFVLEVBQUUsQ0FBVSxFQUFFLEdBQVc7SUFDbkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDbkMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLE1BQU07UUFBRSxPQUFPLElBQUksQ0FBQztJQUNyRyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDOUMsQ0FBQztBQUVELDJGQUEyRjtBQUMzRixTQUFTLFlBQVksQ0FBQyxJQUFZLEVBQUUsT0FBcUM7SUFDdkUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUM1QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFLLENBQUMsQ0FBQztJQUNuQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBSyxDQUFDLENBQUM7UUFDbEQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUFFLE9BQU8sUUFBUSxDQUFDO0lBQzdDLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGFkbWlzc2lvbi50cyDigJQgdGhlIGFkbWl0dGVkIHJlY29yZCdzIGNoZWNrICg5LjMwLjApOiBkb2VzIGEgY29tbWl0J3MgYnVuZGxlXG4gKiBmb2xkIGJhY2sgdG8gd2hhdCBpdHMgc3RhZ2UgcmVhZD8gKGRvY3MvZGVzaWduLzIwMjYtMTAtYWRtaXR0ZWQtcmVjb3JkLm1kKVxuICpcbiAqIFRIRSBMQVc6IGEgY29tbWl0IGlzIGFkbWl0dGVkIG9ubHkgaWYgaXRzIGJ1bmRsZSwgcmVwbGF5ZWQgb250byB0aGUgc3RhdGVcbiAqIHRoZSBzdGFnZSBiZWdhbiBmcm9tLCBnaXZlcyBiYWNrIHRoZSBzdGFnZSdzIHJlYWQteW91ci13cml0ZXMgdmlldyBhdCBldmVyeVxuICogcGF0aCB0aGUgc3RhZ2UgdG91Y2hlZCDigJQgYW5kIGF0IGV2ZXJ5IGNvbnRhaW5lciBhbmQgYXJyYXkgc2xvdCBpdHMgd3JpdGVzXG4gKiBtYWRlIG9uIHRoZSB3YXkgdGhlcmUsIGJlbG93IHRoZSBzdGFnZSdzIGFkZHJlc3MuXG4gKlxuICogUHVyZTogaGFuZGVkIHRoZSBjYW5kaWRhdGUgcm93cywgdGhlIHN0YWdlJ3MgZGlmZiBiYXNlLCBpdHMgd29ya2luZyBjb3B5LFxuICogaXRzIG9wIHRyYWNlIGFuZCBpdHMgYWRkcmVzcywge0BsaW5rIGxvc3N5RmFtaWxpZXN9IGFuc3dlcnMgd2hpY2ggZmFtaWxpZXNcbiAqIG9mIHRvdWNoZWQgcGF0aHMgZG8gbm90IGZvbGQgYmFjay4gYFRyYW5zYWN0aW9uQnVmZmVyIMK3IGFkbWl0YCBhc2tzIG9uY2UgcGVyXG4gKiBjb21taXQgdGhhdCBzdGFnZWQgYSBgbWVyZ2VgIG9yIGEgbmVzdGVkIG9wLCBhbmQgbGF5cyB0aGUgcm93cyBvdXQgYWdhaW5cbiAqIHdpdGggdGhvc2UgZmFtaWxpZXMgd3JpdHRlbiBhcyB3aGF0IHRoZSBzdGFnZSByZWFkLiBUaGUgZm9sZCBpcyB0aGUgb25lXG4gKiB2ZXJiIGxhdyAoe0BsaW5rIGRyeUZvbGR9LCBubyBjbG9uZSk7IHRoZSBjb21wYXJlIGlzIHtAbGluayBkZWVwRXF1YWx9LlxuICovXG5cbmltcG9ydCB7IGlzQ29udGFpbmVyLCBuYXRpdmVHZXQgYXMgX2dldCwgb3duQ2hpbGQgfSBmcm9tICcuL3BhdGhPcHMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlQYXRjaCwgVHJhY2VFbnRyeSB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgZGVlcEVxdWFsLCBERUxJTSwgZHJ5Rm9sZCB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG4vKiogVGhlIHJvd3MgYSBwYXlsb2FkIGlzIGJ1aWx0IGZyb20sIGJlZm9yZSB0aGUgY29tbWl0IG5hbWVzIGl0cyByZWRhY3RlZCBwYXRocy4gKi9cbmV4cG9ydCB0eXBlIFJvd3MgPSB7IG92ZXJ3cml0ZTogTWVtb3J5UGF0Y2g7IHVwZGF0ZXM6IE1lbW9yeVBhdGNoOyB0cmFjZTogVHJhY2VFbnRyeVtdIH07XG5cbi8qKiBPbmUgc3RhZ2VkIG9wLCBhcyBgVHJhbnNhY3Rpb25CdWZmZXJgIHJlY29yZHMgaXQuICovXG5leHBvcnQgdHlwZSBTdGFnZWRPcCA9IHsgcGF0aDogc3RyaW5nOyB2ZXJiOiBzdHJpbmc7IHJlYWRLZXlzPzogc3RyaW5nW10gfTtcblxuLyoqIEEgc3RhZ2VkIHBhdGggaW4gYSB7QGxpbmsgRmFtaWx5fSwgd2l0aCBpdHMgbGFzdCBvcCdzIHJlYWQgcHJlZml4LiAqL1xuZXhwb3J0IHR5cGUgTWVtYmVyID0geyBwYXRoOiBzdHJpbmc7IHJlYWRLZXlzPzogc3RyaW5nW10gfTtcblxuLyoqXG4gKiBBIGZhbWlseSBvZiBUT1VDSEVEIHBhdGhzOiBldmVyeSBzdGFnZWQgcGF0aCB1bmRlciBpdHMgc2hhbGxvd2VzdCBzdGFnZWRcbiAqIGFuY2VzdG9yLW9yLXNlbGYg4oCUIHRoZSB1bml0IHRoZSBjaGVjayB2ZXJpZmllcyBhbmQsIHdoZW4gaXQgZG9lcyBub3QgZm9sZFxuICogYmFjaywgdGhlIHVuaXQgcmUtZW5jb2RlZC4gVHdvIGZhbWlsaWVzIG5ldmVyIG92ZXJsYXAuXG4gKi9cbmV4cG9ydCB0eXBlIEZhbWlseSA9IHtcbiAgcm9vdDogc3RyaW5nO1xuICByb290U2VnbWVudHM6IHN0cmluZ1tdO1xuICAvKiogSXRzIHN0YWdlZCBwYXRocywgYnkgbGFzdCB0b3VjaC4gKi9cbiAgbWVtYmVyczogTWVtYmVyW107XG4gIC8qKiBJbmRleCBpbiB0aGUgb3AgdHJhY2Ugb2YgdGhlIGZhbWlseSdzIGxhc3Qgb3A6IHdoZXJlIGl0cyByZS1lbmNvZGVkIHJvd3MgZ28uICovXG4gIHNsb3Q6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSByb290J3MgcmVhZC1iYWNrIGFzIGEgcmVjb3JkIGNhbiBob2xkIGl0IOKAlCBpdHMgYHN0cnVjdHVyZWRDbG9uZWAsXG4gICAqIGJveGVkIOKAlCB3aGVuIHRoZSBjaGVjayB0b29rIG9uZSAoe0BsaW5rIGZvbGRzQmFja30pOyB0aGUgcmUtZW5jb2RpbmdcbiAgICogcmV1c2VzIGl0LlxuICAgKi9cbiAgaGVsZD86IHsgdmFsdWU6IHVua25vd24gfTtcbn07XG5cbi8qKiBUaGUgZmFtaWxpZXMgd2hvc2Ugcm93cyBkaWQgbm90IGZvbGQgYmFjaywgYW5kIHdoaWNoIGZhbWlseSBldmVyeSBzdGFnZWQgcGF0aCBpcyBpbi4gKi9cbmV4cG9ydCB0eXBlIExvc3N5ID0geyByb290T2Y6IE1hcDxzdHJpbmcsIHN0cmluZz47IGZhbWlsaWVzOiBNYXA8c3RyaW5nLCBGYW1pbHk+IH07XG5cbi8qKlxuICogVGhlIGZhbWlsaWVzIG9mIGBvcHNgIHdob3NlIGNhbmRpZGF0ZSByb3dzIGRvIG5vdCBmb2xkIGJhY2sgdG8gd2hhdCB0aGVcbiAqIHN0YWdlIHJlYWQg4oCUIGB1bmRlZmluZWRgIHdoZW4gZXZlcnkgZmFtaWx5IGRvZXMuIEVhY2ggZmFtaWx5IFJPT1QgaXNcbiAqIGNvbXBhcmVkICh7QGxpbmsgZm9sZHNCYWNrfSk6IGl0cyB2YWx1ZSBhbmQgdGhlIHdheSBkb3duIHRvIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9zc3lGYW1pbGllcyhcbiAgY2FuZGlkYXRlOiBSb3dzLFxuICBiYXNlOiB1bmtub3duLFxuICB3b3JraW5nQ29weTogdW5rbm93bixcbiAgb3BzOiByZWFkb25seSBTdGFnZWRPcFtdLFxuICBhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSxcbik6IExvc3N5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZm9sZCA9IGRyeUZvbGQoYmFzZSwgY2FuZGlkYXRlLnVwZGF0ZXMsIGNhbmRpZGF0ZS5vdmVyd3JpdGUsIGNhbmRpZGF0ZS50cmFjZSk7XG4gIGNvbnN0IHsgcm9vdE9mLCBmYW1pbGllcyB9ID0gdG91Y2hlZEZhbWlsaWVzKG9wcyk7XG4gIGxldCBsb3NzeTogTWFwPHN0cmluZywgRmFtaWx5PiB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBmYW1pbHkgb2YgZmFtaWxpZXMudmFsdWVzKCkpIHtcbiAgICBpZiAoIWZvbGRzQmFjayhmb2xkLCB3b3JraW5nQ29weSwgZmFtaWx5LCBhZGRyZXNzKSkgKGxvc3N5ID8/PSBuZXcgTWFwKCkpLnNldChmYW1pbHkucm9vdCwgZmFtaWx5KTtcbiAgfVxuICByZXR1cm4gbG9zc3kgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHsgcm9vdE9mLCBmYW1pbGllczogbG9zc3kgfTtcbn1cblxuLyoqXG4gKiBEb2VzIHRoZSBmb2xkIGdpdmUgYmFjayB3aGF0IHRoZSBzdGFnZSByZWFkIGF0IGEgZmFtaWx5IHJvb3Q/IFRoZSB3YXkgZG93blxuICogKHtAbGluayBzcGluZUhlbGR9KSwgdGhlbiB0aGUgdmFsdWUgYnkge0BsaW5rIGRlZXBFcXVhbH0gKGEgcm9vdCBjb3ZlcnMgZXZlcnlcbiAqIGRlc2NlbmRhbnQ7IGFuIG93biBgdW5kZWZpbmVkYCBpcyBhIGRlbGV0ZWQga2V5KSDigJQgYWdhaW5zdCB0aGUgcmVhZC1iYWNrIGFzXG4gKiBhIHJlY29yZCBjYW4gaG9sZCBpdC4gQSByZWNvcmQgaG9sZHMgYHN0cnVjdHVyZWRDbG9uZWBzIG9mIHdoYXQgYSBzdGFnZVxuICogd3JvdGUgKHN0YXRlIHZhbHVlcyBtdXN0IHN1cnZpdmUgb25lKSwgYW5kIGEgZmV3IHZhbHVlcyBkbyBub3Qgc3Vydml2ZSBvbmVcbiAqIHdob2xlOiBhbiBgRXJyb3JgJ3Mgb3duIGZpZWxkcyBhcmUgZHJvcHBlZC4gV2hlbiB0aGUgZm9sZCBlcXVhbHMgdGhlXG4gKiByZWFkLWJhY2sncyBjbG9uZSwgbm8gcm93IGNvdWxkIGhvbGQgbW9yZSwgYW5kIHRoZSBmYW1pbHkgaXMgYWRtaXR0ZWQgYXMgaXRcbiAqIGlzOyB0aGUgY2xvbmUsIHRha2VuIG9ubHkgZm9yIGEgcm9vdCB0aGUgY2hlYXAgY29tcGFyZSByZWZ1c2VkLCBpcyBrZXB0IGZvclxuICogdGhlIHJlLWVuY29kaW5nLlxuICovXG5mdW5jdGlvbiBmb2xkc0JhY2soZm9sZDogdW5rbm93biwgd29ya2luZ0NvcHk6IHVua25vd24sIGZhbWlseTogRmFtaWx5LCBhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICBjb25zdCBzZWdtZW50cyA9IGZhbWlseS5yb290U2VnbWVudHM7XG4gIGlmICghc3BpbmVIZWxkKGZvbGQsIHdvcmtpbmdDb3B5LCBzZWdtZW50cywgYWRkcmVzcykpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgZm9sZGVkID0gX2dldChmb2xkLCBzZWdtZW50cyk7XG4gIGNvbnN0IHJlYWQgPSBfZ2V0KHdvcmtpbmdDb3B5LCBzZWdtZW50cyk7XG4gIGlmIChkZWVwRXF1YWwoZm9sZGVkLCByZWFkKSkgcmV0dXJuIHRydWU7XG4gIGZhbWlseS5oZWxkID0geyB2YWx1ZTogc3RydWN0dXJlZENsb25lKHJlYWQpIH07XG4gIHJldHVybiBkZWVwRXF1YWwoZm9sZGVkLCBmYW1pbHkuaGVsZC52YWx1ZSk7XG59XG5cbi8qKlxuICogRXZlcnkgc3RhZ2VkIHBhdGggZ3JvdXBlZCB1bmRlciBpdHMgU0hBTExPV0VTVCBzdGFnZWQgYW5jZXN0b3Itb3Itc2VsZiDigJRcbiAqIG92ZXIgVE9VQ0hFRCBwYXRocywgbm90IHN1cnZpdmluZyBvbmVzOiBhbiBvcCB0aGUgbmV0LWNoYW5nZSBmaWx0ZXIgZHJvcHNcbiAqIGNhbiBzdGlsbCBoYXZlIGNoYW5nZWQgd2hhdCB0aGUgc3RhZ2UgcmVhZHMgKEwtMSkuIE1lbWJlcnMgYXJlIGxpc3RlZCBieVxuICogbGFzdCB0b3VjaDsgYSBmYW1pbHkncyBzbG90IGlzIGl0cyBsYXN0IG9wLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG91Y2hlZEZhbWlsaWVzKG9wczogcmVhZG9ubHkgU3RhZ2VkT3BbXSk6IHtcbiAgcm9vdE9mOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICBmYW1pbGllczogTWFwPHN0cmluZywgRmFtaWx5Pjtcbn0ge1xuICBjb25zdCB0b3VjaGVzID0gbmV3IE1hcDxzdHJpbmcsIHsgbGFzdDogbnVtYmVyOyByZWFkS2V5cz86IHN0cmluZ1tdIH0+KCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdG91Y2hlcy5kZWxldGUob3BzW2ldLnBhdGgpOyAvLyByZS1pbnNlcnQ6IHRoZSBNYXAncyBvcmRlciBpcyBsYXN0LXRvdWNoIG9yZGVyXG4gICAgdG91Y2hlcy5zZXQob3BzW2ldLnBhdGgsIHsgbGFzdDogaSwgcmVhZEtleXM6IG9wc1tpXS5yZWFkS2V5cyB9KTtcbiAgfVxuICBjb25zdCByb290T2YgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICBjb25zdCBmYW1pbGllcyA9IG5ldyBNYXA8c3RyaW5nLCBGYW1pbHk+KCk7XG4gIGZvciAoY29uc3QgW3BhdGgsIHRvdWNoXSBvZiB0b3VjaGVzKSB7XG4gICAgY29uc3Qgcm9vdCA9IHNoYWxsb3dlc3RJbihwYXRoLCB0b3VjaGVzKTtcbiAgICByb290T2Yuc2V0KHBhdGgsIHJvb3QpO1xuICAgIGxldCBmYW1pbHkgPSBmYW1pbGllcy5nZXQocm9vdCk7XG4gICAgaWYgKGZhbWlseSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmYW1pbHkgPSB7IHJvb3QsIHJvb3RTZWdtZW50czogcm9vdC5zcGxpdChERUxJTSksIG1lbWJlcnM6IFtdLCBzbG90OiB0b3VjaC5sYXN0IH07XG4gICAgICBmYW1pbGllcy5zZXQocm9vdCwgZmFtaWx5KTtcbiAgICB9XG4gICAgZmFtaWx5Lm1lbWJlcnMucHVzaCh7IHBhdGgsIHJlYWRLZXlzOiB0b3VjaC5yZWFkS2V5cyB9KTtcbiAgICBpZiAodG91Y2gubGFzdCA+IGZhbWlseS5zbG90KSBmYW1pbHkuc2xvdCA9IHRvdWNoLmxhc3Q7XG4gIH1cbiAgcmV0dXJuIHsgcm9vdE9mLCBmYW1pbGllcyB9O1xufVxuXG4vKipcbiAqIEhvdyBtYW55IGxlYWRpbmcgc2VnbWVudHMgb2YgYHBhdGhgIGFyZSB0aGUgc3RhZ2UncyBgYWRkcmVzc2Ag4oCUIGl0cyBsZW5ndGhcbiAqIHdoZW4gYHBhdGhgIGxpZXMgc3RyaWN0bHkgYmVsb3cgaXQsIGVsc2UgMC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZHJlc3NEZXB0aE9mKHBhdGg6IHJlYWRvbmx5IChzdHJpbmcgfCBudW1iZXIpW10sIGFkZHJlc3M6IHJlYWRvbmx5IHN0cmluZ1tdKTogbnVtYmVyIHtcbiAgY29uc3QgZGVwdGggPSBhZGRyZXNzLmxlbmd0aDtcbiAgaWYgKGRlcHRoID09PSAwIHx8IHBhdGgubGVuZ3RoIDw9IGRlcHRoKSByZXR1cm4gMDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKSBpZiAoU3RyaW5nKHBhdGhbaV0pICE9PSBhZGRyZXNzW2ldKSByZXR1cm4gMDtcbiAgcmV0dXJuIGRlcHRoO1xufVxuXG4vKipcbiAqIEwtMTogYSBuZXN0ZWQgb3AgdGhyb3VnaCBhbiBhYnNlbnQgb3IgcHJpbWl0aXZlIHBhcmVudCBtYWtlcyB0aGF0IHBhcmVudCBhXG4gKiBjb250YWluZXIgaW4gdGhlIHdvcmtpbmcgY29weSDigJQgYW5kIHdoZW4gdGhlIG9wIGl0c2VsZiBjaGFuZ2VzIG5vdGhpbmcgKGFcbiAqIGRlbGV0ZSBvZiBhIGtleSB0aGF0IHdhcyBuZXZlciB0aGVyZSkgbm8gcm93IGlzIGxlZnQgdG8gbWFrZSBpdCBpbiB0aGVcbiAqIGZvbGQsIHNvIHRoZSBzdGFnZSByZWFkcyBiYWNrIGEgY29udGFpbmVyIHRoZSByZWNvcmQgbmV2ZXIgbWVudGlvbnMuIFRoZVxuICogc2FtZSBvcCBvbiBhbiBBUlJBWSBwYXJlbnQgcGFzdCBpdHMgZW5kIGdyb3dzIGl0IChgZGVsZXRlIGEuMGAgb24gYFtdYFxuICogcmVhZHMgYmFjayBgW3VuZGVmaW5lZF1gKS4gRXZlcnkgY29udGFpbmVyIHRoZSB3b3JraW5nIGNvcHkgaG9sZHMgb24gdGhlXG4gKiB3YXkgdG8gYHNlZ21lbnRzYCwgYW5kIGV2ZXJ5IGFycmF5IHNsb3QgZWFjaCBzdGVwIGxhbmRzIGluLCBtdXN0IGJlIG9uZSB0aGVcbiAqIGZvbGQgaG9sZHMgdG9vIOKAlCBiZWxvdyB0aGUgc3RhZ2UncyBhZGRyZXNzLCB3aG9zZSBjb250YWluZXJzIGFyZSB3aGVyZSBpdFxuICogd3JpdGVzLCBub3QgYSB2YWx1ZSBpdCByZWFkcy5cbiAqL1xuZnVuY3Rpb24gc3BpbmVIZWxkKGZvbGQ6IHVua25vd24sIHdvcmtpbmdDb3B5OiB1bmtub3duLCBzZWdtZW50czogc3RyaW5nW10sIGFkZHJlc3M6IHJlYWRvbmx5IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gIGNvbnN0IGZyb20gPSBhZGRyZXNzRGVwdGhPZihzZWdtZW50cywgYWRkcmVzcyk7XG4gIGxldCBmOiB1bmtub3duID0gZm9sZDtcbiAgbGV0IHc6IHVua25vd24gPSB3b3JraW5nQ29weTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpID49IGZyb20gJiYgIXNsb3RIZWxkKGYsIHcsIHNlZ21lbnRzW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpID09PSBzZWdtZW50cy5sZW5ndGggLSAxKSByZXR1cm4gdHJ1ZTtcbiAgICBmID0gb3duQ2hpbGQoZiwgc2VnbWVudHNbaV0pO1xuICAgIHcgPSBvd25DaGlsZCh3LCBzZWdtZW50c1tpXSk7XG4gICAgaWYgKCFpc0NvbnRhaW5lcih3KSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKGkgPj0gZnJvbSAmJiAoIWlzQ29udGFpbmVyKGYpIHx8IEFycmF5LmlzQXJyYXkoZikgIT09IEFycmF5LmlzQXJyYXkodykpKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogRG9lcyB0aGUgZm9sZCBob2xkIGV2ZXJ5IGFycmF5IHNsb3QgdGhlIHdvcmtpbmcgY29weSdzIGNvbnRhaW5lciBgd2AgaG9sZHNcbiAqIGF0IGBrZXlgPyBPbmx5IGFuIGFycmF5IGNhbiBiZSBncm93biBieSBhIHdyaXRlIHRoYXQgY2hhbmdlcyBub3RoaW5nIGVsc2VcbiAqIChhbiBpbmRleCBwYXN0IGl0cyBlbmQsIHNldCB0byBgdW5kZWZpbmVkYCk7IGFuIG9iamVjdCdzIG93biBgdW5kZWZpbmVkYFxuICoga2V5IGlzIGEgZGVsZXRlZCBrZXkgdG8gZXZlcnkgcmVhZGVyLCBzbyBvYmplY3RzIGFsd2F5cyBwYXNzLlxuICovXG5mdW5jdGlvbiBzbG90SGVsZChmOiB1bmtub3duLCB3OiB1bmtub3duLCBrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkodykpIHJldHVybiB0cnVlO1xuICBjb25zdCBpbmRleCA9IE51bWJlcihrZXkpO1xuICBpZiAoIU51bWJlci5pc0ludGVnZXIoaW5kZXgpIHx8IGluZGV4IDwgMCB8fCBTdHJpbmcoaW5kZXgpICE9PSBrZXkgfHwgaW5kZXggPj0gdy5sZW5ndGgpIHJldHVybiB0cnVlO1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShmKSAmJiBpbmRleCA8IGYubGVuZ3RoO1xufVxuXG4vKiogVGhlIHNoYWxsb3dlc3Qgb2YgYHBhdGhgIGFuZCBpdHMgYW5jZXN0b3JzIHRoYXQgYHRvdWNoZWRgIGhvbGRzIOKAlCBpdHMgZmFtaWx5J3Mgcm9vdC4gKi9cbmZ1bmN0aW9uIHNoYWxsb3dlc3RJbihwYXRoOiBzdHJpbmcsIHRvdWNoZWQ6IFJlYWRvbmx5TWFwPHN0cmluZywgdW5rbm93bj4pOiBzdHJpbmcge1xuICBpZiAocGF0aC5pbmRleE9mKERFTElNKSA9PT0gLTEpIHJldHVybiBwYXRoO1xuICBjb25zdCBzZWdtZW50cyA9IHBhdGguc3BsaXQoREVMSU0pO1xuICBmb3IgKGxldCBpID0gMTsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYW5jZXN0b3IgPSBzZWdtZW50cy5zbGljZSgwLCBpKS5qb2luKERFTElNKTtcbiAgICBpZiAodG91Y2hlZC5oYXMoYW5jZXN0b3IpKSByZXR1cm4gYW5jZXN0b3I7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG4iXX0=
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvYWRtaXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7OztBQUVILDZDQUF3RTtBQUV4RSx5Q0FBdUQ7QUFrQ3ZEOzs7O0dBSUc7QUFDSCxTQUFnQixhQUFhLENBQzNCLFNBQWUsRUFDZixJQUFhLEVBQ2IsV0FBb0IsRUFDcEIsR0FBd0IsRUFDeEIsT0FBMEI7SUFFMUIsTUFBTSxJQUFJLEdBQUcsSUFBQSxrQkFBTyxFQUFDLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BGLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELElBQUksS0FBc0MsQ0FBQztJQUMzQyxLQUFLLE1BQU0sTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDO1lBQUUsQ0FBQyxLQUFLLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFDRCxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3ZFLENBQUM7QUFkRCxzQ0FjQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxJQUFhLEVBQUUsV0FBb0IsRUFBRSxNQUFjLEVBQUUsT0FBMEI7SUFDaEcsTUFBTSxRQUFR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QU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBSyxDQUFDLENBQUM7UUFDbEQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztZQUFFLE9BQU8sUUFBUSxDQUFDO0lBQzdDLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGFkbWlzc2lvbi50cyDigJQgdGhlIGFkbWl0dGVkIHJlY29yZCdzIGNoZWNrICg5LjMwLjApOiBkb2VzIGEgY29tbWl0J3MgYnVuZGxlXG4gKiBmb2xkIGJhY2sgdG8gd2hhdCBpdHMgc3RhZ2UgcmVhZD8gKGRvY3MvZGVzaWduLzIwMjYtMTAtYWRtaXR0ZWQtcmVjb3JkLm1kKVxuICpcbiAqIFRIRSBMQVc6IGEgY29tbWl0IGlzIGFkbWl0dGVkIG9ubHkgaWYgaXRzIGJ1bmRsZSwgcmVwbGF5ZWQgb250byB0aGUgc3RhdGVcbiAqIHRoZSBzdGFnZSBiZWdhbiBmcm9tLCBnaXZlcyBiYWNrIHRoZSBzdGFnZSdzIHJlYWQteW91ci13cml0ZXMgdmlldyBhdCBldmVyeVxuICogcGF0aCB0aGUgc3RhZ2UgdG91Y2hlZCDigJQgYW5kIGF0IGV2ZXJ5IGNvbnRhaW5lciBhbmQgYXJyYXkgc2xvdCBpdHMgd3JpdGVzXG4gKiBtYWRlIG9uIHRoZSB3YXkgdGhlcmUsIGJlbG93IHRoZSBzdGFnZSdzIGFkZHJlc3MuXG4gKlxuICogUHVyZTogaGFuZGVkIHRoZSBjYW5kaWRhdGUgcm93cywgdGhlIHN0YWdlJ3MgZGlmZiBiYXNlLCBpdHMgd29ya2luZyBjb3B5LFxuICogaXRzIG9wIHRyYWNlIGFuZCBpdHMgYWRkcmVzcywge0BsaW5rIGxvc3N5RmFtaWxpZXN9IGFuc3dlcnMgd2hpY2ggZmFtaWxpZXNcbiAqIG9mIHRvdWNoZWQgcGF0aHMgZG8gbm90IGZvbGQgYmFjay4gYFRyYW5zYWN0aW9uQnVmZmVyIMK3IGFkbWl0YCBhc2tzIG9uY2UgcGVyXG4gKiBjb21taXQgdGhhdCBzdGFnZWQgYSBgbWVyZ2VgIG9yIGEgbmVzdGVkIG9wLCBhbmQgbGF5cyB0aGUgcm93cyBvdXQgYWdhaW5cbiAqIHdpdGggdGhvc2UgZmFtaWxpZXMgd3JpdHRlbiBhcyB3aGF0IHRoZSBzdGFnZSByZWFkLiBUaGUgZm9sZCBpcyB0aGUgb25lXG4gKiB2ZXJiIGxhdyAoe0BsaW5rIGRyeUZvbGR9LCBubyBjbG9uZSk7IHRoZSBjb21wYXJlIGlzIHtAbGluayBkZWVwRXF1YWx9LlxuICovXG5cbmltcG9ydCB7IGlzQ29udGFpbmVyLCBuYXRpdmVHZXQgYXMgX2dldCwgb3duQ2hpbGQgfSBmcm9tICcuL3BhdGhPcHMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1vcnlQYXRjaCwgVHJhY2VFbnRyeSB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgZGVlcEVxdWFsLCBERUxJTSwgZHJ5Rm9sZCB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG4vKiogVGhlIHJvd3MgYSBwYXlsb2FkIGlzIGJ1aWx0IGZyb20sIGJlZm9yZSB0aGUgY29tbWl0IG5hbWVzIGl0cyByZWRhY3RlZCBwYXRocy4gKi9cbmV4cG9ydCB0eXBlIFJvd3MgPSB7IG92ZXJ3cml0ZTogTWVtb3J5UGF0Y2g7IHVwZGF0ZXM6IE1lbW9yeVBhdGNoOyB0cmFjZTogVHJhY2VFbnRyeVtdIH07XG5cbi8qKiBPbmUgc3RhZ2VkIG9wLCBhcyBgVHJhbnNhY3Rpb25CdWZmZXJgIHJlY29yZHMgaXQuICovXG5leHBvcnQgdHlwZSBTdGFnZWRPcCA9IHsgcGF0aDogc3RyaW5nOyB2ZXJiOiBzdHJpbmc7IHJlYWRLZXlzPzogc3RyaW5nW10gfTtcblxuLyoqIEEgc3RhZ2VkIHBhdGggaW4gYSB7QGxpbmsgRmFtaWx5fSwgd2l0aCBpdHMgbGFzdCBvcCdzIHJlYWQgcHJlZml4LiAqL1xuZXhwb3J0IHR5cGUgTWVtYmVyID0geyBwYXRoOiBzdHJpbmc7IHJlYWRLZXlzPzogc3RyaW5nW10gfTtcblxuLyoqXG4gKiBBIGZhbWlseSBvZiBUT1VDSEVEIHBhdGhzOiBldmVyeSBzdGFnZWQgcGF0aCB1bmRlciBpdHMgc2hhbGxvd2VzdCBzdGFnZWRcbiAqIGFuY2VzdG9yLW9yLXNlbGYg4oCUIHRoZSB1bml0IHRoZSBjaGVjayB2ZXJpZmllcyBhbmQsIHdoZW4gaXQgZG9lcyBub3QgZm9sZFxuICogYmFjaywgdGhlIHVuaXQgcmUtZW5jb2RlZC4gVHdvIGZhbWlsaWVzIG5ldmVyIG92ZXJsYXAuXG4gKi9cbmV4cG9ydCB0eXBlIEZhbWlseSA9IHtcbiAgcm9vdDogc3RyaW5nO1xuICByb290U2VnbWVudHM6IHN0cmluZ1tdO1xuICAvKiogSXRzIHN0YWdlZCBwYXRocywgYnkgbGFzdCB0b3VjaC4gKi9cbiAgbWVtYmVyczogTWVtYmVyW107XG4gIC8qKiBJbmRleCBpbiB0aGUgb3AgdHJhY2Ugb2YgdGhlIGZhbWlseSdzIGxhc3Qgb3A6IHdoZXJlIGl0cyByZS1lbmNvZGVkIHJvd3MgZ28uICovXG4gIHNsb3Q6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSByb290J3MgcmVhZC1iYWNrIGFzIGEgcmVjb3JkIGNhbiBob2xkIGl0IOKAlCBpdHMgYHN0cnVjdHVyZWRDbG9uZWAsXG4gICAqIGJveGVkIOKAlCB3aGVuIHRoZSBjaGVjayB0b29rIG9uZSAoe0BsaW5rIGZvbGRzQmFja30pOyB0aGUgcmUtZW5jb2RpbmdcbiAgICogcmV1c2VzIGl0LlxuICAgKi9cbiAgaGVsZD86IHsgdmFsdWU6IHVua25vd24gfTtcbn07XG5cbi8qKiBUaGUgZmFtaWxpZXMgd2hvc2Ugcm93cyBkaWQgbm90IGZvbGQgYmFjaywgYW5kIHdoaWNoIGZhbWlseSBldmVyeSBzdGFnZWQgcGF0aCBpcyBpbi4gKi9cbmV4cG9ydCB0eXBlIExvc3N5ID0geyByb290T2Y6IE1hcDxzdHJpbmcsIHN0cmluZz47IGZhbWlsaWVzOiBNYXA8c3RyaW5nLCBGYW1pbHk+IH07XG5cbi8qKlxuICogVGhlIGZhbWlsaWVzIG9mIGBvcHNgIHdob3NlIGNhbmRpZGF0ZSByb3dzIGRvIG5vdCBmb2xkIGJhY2sgdG8gd2hhdCB0aGVcbiAqIHN0YWdlIHJlYWQg4oCUIGB1bmRlZmluZWRgIHdoZW4gZXZlcnkgZmFtaWx5IGRvZXMuIEVhY2ggZmFtaWx5IFJPT1QgaXNcbiAqIGNvbXBhcmVkICh7QGxpbmsgZm9sZHNCYWNrfSk6IGl0cyB2YWx1ZSBhbmQgdGhlIHdheSBkb3duIHRvIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9zc3lGYW1pbGllcyhcbiAgY2FuZGlkYXRlOiBSb3dzLFxuICBiYXNlOiB1bmtub3duLFxuICB3b3JraW5nQ29weTogdW5rbm93bixcbiAgb3BzOiByZWFkb25seSBTdGFnZWRPcFtdLFxuICBhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSxcbik6IExvc3N5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZm9sZCA9IGRyeUZvbGQoYmFzZSwgY2FuZGlkYXRlLnVwZGF0ZXMsIGNhbmRpZGF0ZS5vdmVyd3JpdGUsIGNhbmRpZGF0ZS50cmFjZSk7XG4gIGNvbnN0IHsgcm9vdE9mLCBmYW1pbGllcyB9ID0gdG91Y2hlZEZhbWlsaWVzKG9wcyk7XG4gIGxldCBsb3NzeTogTWFwPHN0cmluZywgRmFtaWx5PiB8IHVuZGVmaW5lZDtcbiAgZm9yIChjb25zdCBmYW1pbHkgb2YgZmFtaWxpZXMudmFsdWVzKCkpIHtcbiAgICBpZiAoIWZvbGRzQmFjayhmb2xkLCB3b3JraW5nQ29weSwgZmFtaWx5LCBhZGRyZXNzKSkgKGxvc3N5ID8/PSBuZXcgTWFwKCkpLnNldChmYW1pbHkucm9vdCwgZmFtaWx5KTtcbiAgfVxuICByZXR1cm4gbG9zc3kgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHsgcm9vdE9mLCBmYW1pbGllczogbG9zc3kgfTtcbn1cblxuLyoqXG4gKiBEb2VzIHRoZSBmb2xkIGdpdmUgYmFjayB3aGF0IHRoZSBzdGFnZSByZWFkIGF0IGEgZmFtaWx5IHJvb3Q/IFRoZSB3YXkgZG93blxuICogKHtAbGluayBzcGluZUhlbGR9KSwgdGhlbiB0aGUgdmFsdWUgYnkge0BsaW5rIGRlZXBFcXVhbH0gKGEgcm9vdCBjb3ZlcnMgZXZlcnlcbiAqIGRlc2NlbmRhbnQ7IGFuIG93biBgdW5kZWZpbmVkYCBpcyBhIGRlbGV0ZWQga2V5KSDigJQgYWdhaW5zdCB0aGUgcmVhZC1iYWNrIGFzXG4gKiBhIHJlY29yZCBjYW4gaG9sZCBpdC4gQSByZWNvcmQgaG9sZHMgYHN0cnVjdHVyZWRDbG9uZWBzIG9mIHdoYXQgYSBzdGFnZVxuICogd3JvdGUgKHN0YXRlIHZhbHVlcyBtdXN0IHN1cnZpdmUgb25lKSwgYW5kIGEgZmV3IHZhbHVlcyBkbyBub3Qgc3Vydml2ZSBvbmVcbiAqIHdob2xlOiBhbiBgRXJyb3JgJ3Mgb3duIGZpZWxkcyBhcmUgZHJvcHBlZC4gV2hlbiB0aGUgZm9sZCBlcXVhbHMgdGhlXG4gKiByZWFkLWJhY2sncyBjbG9uZSwgbm8gcm93IGNvdWxkIGhvbGQgbW9yZSwgYW5kIHRoZSBmYW1pbHkgaXMgYWRtaXR0ZWQgYXMgaXRcbiAqIGlzOyB0aGUgY2xvbmUsIHRha2VuIG9ubHkgZm9yIGEgcm9vdCB0aGUgY2hlYXAgY29tcGFyZSByZWZ1c2VkLCBpcyBrZXB0IGZvclxuICogdGhlIHJlLWVuY29kaW5nLlxuICovXG5mdW5jdGlvbiBmb2xkc0JhY2soZm9sZDogdW5rbm93biwgd29ya2luZ0NvcHk6IHVua25vd24sIGZhbWlseTogRmFtaWx5LCBhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICBjb25zdCBzZWdtZW50cyA9IGZhbWlseS5yb290U2VnbWVudHM7XG4gIGlmICghc3BpbmVIZWxkKGZvbGQsIHdvcmtpbmdDb3B5LCBzZWdtZW50cywgYWRkcmVzcykpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgZm9sZGVkID0gX2dldChmb2xkLCBzZWdtZW50cyk7XG4gIGNvbnN0IHJlYWQgPSBfZ2V0KHdvcmtpbmdDb3B5LCBzZWdtZW50cyk7XG4gIC8vIEJvdGggc2lkZXMgYXJlIHRoZSBzYW1lIHZhbHVlcyBhcyBhIHJlY29yZCBob2xkcyB0aGVtOiBhbiBvcGFxdWUgb25lIChhIEJsb2IpIGlzIG5ldmVyIHRoZSBzYW1lIG9iamVjdC5cbiAgaWYgKGRlZXBFcXVhbChmb2xkZWQsIHJlYWQsICdjb3BpZXMnKSkgcmV0dXJuIHRydWU7XG4gIGZhbWlseS5oZWxkID0geyB2YWx1ZTogc3RydWN0dXJlZENsb25lKHJlYWQpIH07XG4gIHJldHVybiBkZWVwRXF1YWwoZm9sZGVkLCBmYW1pbHkuaGVsZC52YWx1ZSwgJ2NvcGllcycpO1xufVxuXG4vKipcbiAqIEV2ZXJ5IHN0YWdlZCBwYXRoIGdyb3VwZWQgdW5kZXIgaXRzIFNIQUxMT1dFU1Qgc3RhZ2VkIGFuY2VzdG9yLW9yLXNlbGYg4oCUXG4gKiBvdmVyIFRPVUNIRUQgcGF0aHMsIG5vdCBzdXJ2aXZpbmcgb25lczogYW4gb3AgdGhlIG5ldC1jaGFuZ2UgZmlsdGVyIGRyb3BzXG4gKiBjYW4gc3RpbGwgaGF2ZSBjaGFuZ2VkIHdoYXQgdGhlIHN0YWdlIHJlYWRzIChMLTEpLiBNZW1iZXJzIGFyZSBsaXN0ZWQgYnlcbiAqIGxhc3QgdG91Y2g7IGEgZmFtaWx5J3Mgc2xvdCBpcyBpdHMgbGFzdCBvcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvdWNoZWRGYW1pbGllcyhvcHM6IHJlYWRvbmx5IFN0YWdlZE9wW10pOiB7XG4gIHJvb3RPZjogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgZmFtaWxpZXM6IE1hcDxzdHJpbmcsIEZhbWlseT47XG59IHtcbiAgY29uc3QgdG91Y2hlcyA9IG5ldyBNYXA8c3RyaW5nLCB7IGxhc3Q6IG51bWJlcjsgcmVhZEtleXM/OiBzdHJpbmdbXSB9PigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykge1xuICAgIHRvdWNoZXMuZGVsZXRlKG9wc1tpXS5wYXRoKTsgLy8gcmUtaW5zZXJ0OiB0aGUgTWFwJ3Mgb3JkZXIgaXMgbGFzdC10b3VjaCBvcmRlclxuICAgIHRvdWNoZXMuc2V0KG9wc1tpXS5wYXRoLCB7IGxhc3Q6IGksIHJlYWRLZXlzOiBvcHNbaV0ucmVhZEtleXMgfSk7XG4gIH1cbiAgY29uc3Qgcm9vdE9mID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgY29uc3QgZmFtaWxpZXMgPSBuZXcgTWFwPHN0cmluZywgRmFtaWx5PigpO1xuICBmb3IgKGNvbnN0IFtwYXRoLCB0b3VjaF0gb2YgdG91Y2hlcykge1xuICAgIGNvbnN0IHJvb3QgPSBzaGFsbG93ZXN0SW4ocGF0aCwgdG91Y2hlcyk7XG4gICAgcm9vdE9mLnNldChwYXRoLCByb290KTtcbiAgICBsZXQgZmFtaWx5ID0gZmFtaWxpZXMuZ2V0KHJvb3QpO1xuICAgIGlmIChmYW1pbHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmFtaWx5ID0geyByb290LCByb290U2VnbWVudHM6IHJvb3Quc3BsaXQoREVMSU0pLCBtZW1iZXJzOiBbXSwgc2xvdDogdG91Y2gubGFzdCB9O1xuICAgICAgZmFtaWxpZXMuc2V0KHJvb3QsIGZhbWlseSk7XG4gICAgfVxuICAgIGZhbWlseS5tZW1iZXJzLnB1c2goeyBwYXRoLCByZWFkS2V5czogdG91Y2gucmVhZEtleXMgfSk7XG4gICAgaWYgKHRvdWNoLmxhc3QgPiBmYW1pbHkuc2xvdCkgZmFtaWx5LnNsb3QgPSB0b3VjaC5sYXN0O1xuICB9XG4gIHJldHVybiB7IHJvb3RPZiwgZmFtaWxpZXMgfTtcbn1cblxuLyoqXG4gKiBIb3cgbWFueSBsZWFkaW5nIHNlZ21lbnRzIG9mIGBwYXRoYCBhcmUgdGhlIHN0YWdlJ3MgYGFkZHJlc3NgIOKAlCBpdHMgbGVuZ3RoXG4gKiB3aGVuIGBwYXRoYCBsaWVzIHN0cmljdGx5IGJlbG93IGl0LCBlbHNlIDAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRyZXNzRGVwdGhPZihwYXRoOiByZWFkb25seSAoc3RyaW5nIHwgbnVtYmVyKVtdLCBhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSk6IG51bWJlciB7XG4gIGNvbnN0IGRlcHRoID0gYWRkcmVzcy5sZW5ndGg7XG4gIGlmIChkZXB0aCA9PT0gMCB8fCBwYXRoLmxlbmd0aCA8PSBkZXB0aCkgcmV0dXJuIDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVwdGg7IGkrKykgaWYgKFN0cmluZyhwYXRoW2ldKSAhPT0gYWRkcmVzc1tpXSkgcmV0dXJuIDA7XG4gIHJldHVybiBkZXB0aDtcbn1cblxuLyoqXG4gKiBMLTE6IGEgbmVzdGVkIG9wIHRocm91Z2ggYW4gYWJzZW50IG9yIHByaW1pdGl2ZSBwYXJlbnQgbWFrZXMgdGhhdCBwYXJlbnQgYVxuICogY29udGFpbmVyIGluIHRoZSB3b3JraW5nIGNvcHkg4oCUIGFuZCB3aGVuIHRoZSBvcCBpdHNlbGYgY2hhbmdlcyBub3RoaW5nIChhXG4gKiBkZWxldGUgb2YgYSBrZXkgdGhhdCB3YXMgbmV2ZXIgdGhlcmUpIG5vIHJvdyBpcyBsZWZ0IHRvIG1ha2UgaXQgaW4gdGhlXG4gKiBmb2xkLCBzbyB0aGUgc3RhZ2UgcmVhZHMgYmFjayBhIGNvbnRhaW5lciB0aGUgcmVjb3JkIG5ldmVyIG1lbnRpb25zLiBUaGVcbiAqIHNhbWUgb3Agb24gYW4gQVJSQVkgcGFyZW50IHBhc3QgaXRzIGVuZCBncm93cyBpdCAoYGRlbGV0ZSBhLjBgIG9uIGBbXWBcbiAqIHJlYWRzIGJhY2sgYFt1bmRlZmluZWRdYCkuIEV2ZXJ5IGNvbnRhaW5lciB0aGUgd29ya2luZyBjb3B5IGhvbGRzIG9uIHRoZVxuICogd2F5IHRvIGBzZWdtZW50c2AsIGFuZCBldmVyeSBhcnJheSBzbG90IGVhY2ggc3RlcCBsYW5kcyBpbiwgbXVzdCBiZSBvbmUgdGhlXG4gKiBmb2xkIGhvbGRzIHRvbyDigJQgYmVsb3cgdGhlIHN0YWdlJ3MgYWRkcmVzcywgd2hvc2UgY29udGFpbmVycyBhcmUgd2hlcmUgaXRcbiAqIHdyaXRlcywgbm90IGEgdmFsdWUgaXQgcmVhZHMuXG4gKi9cbmZ1bmN0aW9uIHNwaW5lSGVsZChmb2xkOiB1bmtub3duLCB3b3JraW5nQ29weTogdW5rbm93biwgc2VnbWVudHM6IHN0cmluZ1tdLCBhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICBjb25zdCBmcm9tID0gYWRkcmVzc0RlcHRoT2Yoc2VnbWVudHMsIGFkZHJlc3MpO1xuICBsZXQgZjogdW5rbm93biA9IGZvbGQ7XG4gIGxldCB3OiB1bmtub3duID0gd29ya2luZ0NvcHk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaSA+PSBmcm9tICYmICFzbG90SGVsZChmLCB3LCBzZWdtZW50c1tpXSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaSA9PT0gc2VnbWVudHMubGVuZ3RoIC0gMSkgcmV0dXJuIHRydWU7XG4gICAgZiA9IG93bkNoaWxkKGYsIHNlZ21lbnRzW2ldKTtcbiAgICB3ID0gb3duQ2hpbGQodywgc2VnbWVudHNbaV0pO1xuICAgIGlmICghaXNDb250YWluZXIodykpIHJldHVybiB0cnVlO1xuICAgIGlmIChpID49IGZyb20gJiYgKCFpc0NvbnRhaW5lcihmKSB8fCBBcnJheS5pc0FycmF5KGYpICE9PSBBcnJheS5pc0FycmF5KHcpKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIERvZXMgdGhlIGZvbGQgaG9sZCBldmVyeSBhcnJheSBzbG90IHRoZSB3b3JraW5nIGNvcHkncyBjb250YWluZXIgYHdgIGhvbGRzXG4gKiBhdCBga2V5YD8gT25seSBhbiBhcnJheSBjYW4gYmUgZ3Jvd24gYnkgYSB3cml0ZSB0aGF0IGNoYW5nZXMgbm90aGluZyBlbHNlXG4gKiAoYW4gaW5kZXggcGFzdCBpdHMgZW5kLCBzZXQgdG8gYHVuZGVmaW5lZGApOyBhbiBvYmplY3QncyBvd24gYHVuZGVmaW5lZGBcbiAqIGtleSBpcyBhIGRlbGV0ZWQga2V5IHRvIGV2ZXJ5IHJlYWRlciwgc28gb2JqZWN0cyBhbHdheXMgcGFzcy5cbiAqL1xuZnVuY3Rpb24gc2xvdEhlbGQoZjogdW5rbm93biwgdzogdW5rbm93biwga2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHcpKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgaW5kZXggPSBOdW1iZXIoa2V5KTtcbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGluZGV4KSB8fCBpbmRleCA8IDAgfHwgU3RyaW5nKGluZGV4KSAhPT0ga2V5IHx8IGluZGV4ID49IHcubGVuZ3RoKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZikgJiYgaW5kZXggPCBmLmxlbmd0aDtcbn1cblxuLyoqIFRoZSBzaGFsbG93ZXN0IG9mIGBwYXRoYCBhbmQgaXRzIGFuY2VzdG9ycyB0aGF0IGB0b3VjaGVkYCBob2xkcyDigJQgaXRzIGZhbWlseSdzIHJvb3QuICovXG5mdW5jdGlvbiBzaGFsbG93ZXN0SW4ocGF0aDogc3RyaW5nLCB0b3VjaGVkOiBSZWFkb25seU1hcDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHtcbiAgaWYgKHBhdGguaW5kZXhPZihERUxJTSkgPT09IC0xKSByZXR1cm4gcGF0aDtcbiAgY29uc3Qgc2VnbWVudHMgPSBwYXRoLnNwbGl0KERFTElNKTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFuY2VzdG9yID0gc2VnbWVudHMuc2xpY2UoMCwgaSkuam9pbihERUxJTSk7XG4gICAgaWYgKHRvdWNoZWQuaGFzKGFuY2VzdG9yKSkgcmV0dXJuIGFuY2VzdG9yO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuIl19
@@ -48,7 +48,7 @@ function joinSegment(prefix, segment, intoArray) {
48
48
  * `deepEqual`, and stops at the first disagreement.
49
49
  */
50
50
  function firstDifferingPath(before, after, prefix = '', depth = 0) {
51
- if ((0, utils_js_1.deepEqual)(before, after))
51
+ if ((0, utils_js_1.deepEqual)(before, after, 'copies'))
52
52
  return undefined;
53
53
  if (depth >= 24)
54
54
  return prefix; // pathological nesting — name what we have
@@ -134,4 +134,4 @@ function borrowedMutationMessage(stageName, key, path) {
134
134
  'which the scope proxy cannot intercept.');
135
135
  }
136
136
  exports.borrowedMutationMessage = borrowedMutationMessage;
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9ycm93ZWRNdXRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2JvcnJvd2VkTXV0YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7OztBQUVILHlDQUF1QztBQUV2Qyw4RUFBOEU7QUFDOUUsU0FBUyxXQUFXLENBQUMsTUFBYyxFQUFFLE9BQWUsRUFBRSxTQUFrQjtJQUN0RSxJQUFJLFNBQVM7UUFBRSxPQUFPLEdBQUcsTUFBTSxJQUFJLE9BQU8sR0FBRyxDQUFDO0lBQzlDLE9BQU8sTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUMxRCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLE1BQWUsRUFBRSxLQUFjLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBQztJQUN4RixJQUFJLElBQUEsb0JBQVMsRUFBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDL0MsSUFBSSxLQUFLLElBQUksRUFBRTtRQUFFLE9BQU8sTUFBTSxDQUFDLENBQUMsMkNBQTJDO0lBQzNFLElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFFaEgsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxJQUFJLGFBQWEsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBRTFELElBQUksYUFBYSxFQUFFLENBQUM7UUFDbEIsTUFBTSxDQUFDLEdBQUcsTUFBbUIsQ0FBQztRQUM5QixNQUFNLENBQUMsR0FBRyxLQUFrQixDQUFDO1FBQzdCLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTTtZQUFFLE9BQU8sTUFBTSxDQUFDO1FBQ3pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDbEMsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDL0YsSUFBSSxNQUFNLEtBQUssU0FBUztnQkFBRSxPQUFPLE1BQU0sQ0FBQztRQUMxQyxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFHLE1BQWlDLENBQUM7SUFDNUMsTUFBTSxDQUFDLEdBQUcsS0FBZ0MsQ0FBQztJQUMzQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdELEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDOUYsSUFBSSxNQUFNLEtBQUssU0FBUztZQUFFLE9BQU8sTUFBTSxDQUFDO0lBQzFDLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBM0JELGdEQTJCQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxTQUFpQixFQUFFLGNBQWtDLEVBQUUsR0FBVztJQUNqRyxNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsR0FBRyxDQUFDO0lBQ3RGLE9BQU8sQ0FDTCxxQkFBcUIsSUFBSSxnRUFBZ0UsR0FBRyxLQUFLO1FBQ2pHLHNHQUFzRztRQUN0RyxpR0FBaUc7UUFDakcsMEZBQTBGO1FBQzFGLHVFQUF1RSxDQUN4RSxDQUFDO0FBQ0osQ0FBQztBQVRELDRDQVNDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLFNBQWlCLEVBQUUsR0FBVyxFQUFFLElBQVk7SUFDbkYsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pFLE9BQU8sQ0FDTCxzQkFBc0IsU0FBUyxlQUFlLEtBQUssb0RBQW9EO1FBQ3ZHLG9HQUFvRztRQUNwRyx3R0FBd0c7UUFDeEcsOEZBQThGO1FBQzlGLHVCQUF1QixHQUFHLHdFQUF3RTtRQUNsRyw0Q0FBNEMsQ0FDN0MsQ0FBQztBQUNKLENBQUM7QUFWRCw0REFVQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQix1QkFBdUIsQ0FBQyxTQUFpQixFQUFFLEdBQVcsRUFBRSxJQUFZO0lBQ2xGLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6RSxPQUFPLENBQ0wsc0JBQXNCLFNBQVMsZUFBZSxLQUFLLHdDQUF3QztRQUMzRixvR0FBb0c7UUFDcEcsbUdBQW1HO1FBQ25HLDREQUE0RDtRQUM1RCwwQ0FBMEM7UUFDMUMsS0FBSztRQUNMLHlEQUF5RDtRQUN6RCx3REFBd0QsR0FBRyxjQUFjO1FBQ3pFLDZGQUE2RjtRQUM3Rix5Q0FBeUMsQ0FDMUMsQ0FBQztBQUNKLENBQUM7QUFkRCwwREFjQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbWVtb3J5L2JvcnJvd2VkTXV0YXRpb24g4oCUIHRoZSBob25lc3QgYm91bmRhcnkncyB0d28gdGV4dHM6IHRoZSBkZXYtbW9kZVxuICogUkVQT1JUIGZvciBhIHdyaXRlIHRoZSBlbmdpbmUgY2Fubm90IHNlZSAoe0BsaW5rIGJvcnJvd2VkTXV0YXRpb25NZXNzYWdlfSlcbiAqIGFuZCB0aGUgUkVGVVNBTCBmb3IgYSB3cml0ZSBmcm9tIGEgaGFuZGxlIGhlbGQgcGFzdCBpdHMgc3RhZ2VcbiAqICh7QGxpbmsgZGVhZEZyYW1lTWVzc2FnZX0sIHRocm93biBieSBgU3RhZ2VDb250ZXh0LnN0YWdlV3JpdGVgKS5cbiAqXG4gKiDilIDilIAgVGhlIGhvbmVzdCBib3VuZGFyeSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAqIFRoZSB0eXBlZCBzY29wZSBpbnRlcmNlcHRzIGV2ZXJ5IHdyaXRlIGl0IGNhbiByZWFjaDogYSBwcm9wZXJ0eSBhdCBhbnlcbiAqIGRlcHRoLCBhbiBpbmRleGVkIGVsZW1lbnQsIGFuIGFycmF5IG1ldGhvZC4gV2hhdCBpdCBjYW5ub3QgcmVhY2ggaXMgYW5cbiAqIGVsZW1lbnQgaGFuZGVkIG91dCBieSBhIFJFQUQgTUVUSE9EIOKAlCBgZmluZGAsIGBmaWx0ZXJgLCBgZm9y4oCmb2ZgLCBgZm9yRWFjaGAsXG4gKiBkZXN0cnVjdHVyaW5nIOKAlCBiZWNhdXNlIHdyYXBwaW5nIHRob3NlIHdvdWxkIG1lYW4gcmV0dXJuaW5nIHByb3hpZXMgb3V0IG9mXG4gKiBldmVyeSByZWFkIChgbWFwYCB3b3VsZCBidWlsZCBhbiBhcnJheSBvZiBwcm94aWVzLCBgZmlsdGVyYCB3b3VsZCBjb21wYXJlXG4gKiBwcm94aWVzLCBhIHJldHVybmVkIHZhbHVlIHdvdWxkIGVzY2FwZSB0aGUgc3RhZ2Ugc3RpbGwgYm91bmQgdG8gaXQpLiBUaGF0IGlzXG4gKiBhIGNvc3QgdGhlIGxpYnJhcnkgc2hvdWxkIG5vdCBwYXksIGFuZCBhIHNlbWFudGljIGNoYW5nZSBpdCBzaG91bGQgbm90IG1ha2UuXG4gKlxuICogU28gdGhlIGFuc3dlciBmb3IgdGhhdCBmYW1pbHkgaXMgbm90IGludGVyY2VwdGlvbiDigJQgaXQgaXMgYSBSRVBPUlQuIEEgcmVhZFxuICogaXMgQk9SUk9XRUQ7IG11dGF0aW5nIGl0IGluIHBsYWNlIGlzIG91dCBvZiBjb250cmFjdC4gVGhpcyBtb2R1bGUgZGV0ZWN0cyB0aGVcbiAqIHZpb2xhdGlvbiBhZnRlciB0aGUgZmFjdCBhbmQgbmFtZXMgaXQgKGEgZGV2LW1vZGUgd2FybmluZyBhdCBjb21taXQg4oCUIHRoZVxuICogd3JpdGUgYWxyZWFkeSBoYXBwZW5lZCwgc28gaXQgY2Fubm90IGJlIHJlZnVzZWQpLCBpbnN0ZWFkIG9mIGxldHRpbmcgdGhlIHJ1blxuICogZW5kIHdpdGggYSBjb21taXQgbG9nIHRoYXQgZGlzYWdyZWVzIHdpdGggZmluYWwgc3RhdGUgYW5kIG5vdGhpbmcgc2F5aW5nIHNvLlxuICpcbiAqIOKUgOKUgCBIb3cg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiBgcmVhZFRyYWNraW5nOiAnZnVsbCdgICh0aGUgZGVmYXVsdCkgYWxyZWFkeSByZXRhaW5zIGEgQ0xPTkUgb2YgZXZlcnkgdmFsdWVcbiAqIGEgc3RhZ2UgcmVhZC4gQXQgY29tbWl0LCBhIGtleSB0aGUgc3RhZ2UgcmVhZCBidXQgbmV2ZXIgV1JPVEUgbXVzdCBzdGlsbFxuICogaG9sZCB3aGF0IGl0IGhlbGQgYXQgcmVhZCB0aW1lIOKAlCBjb21taXR0ZWQgc3RhdGUgaXMgaW1tdXRhYmxlLWFmdGVyLXN3YXAgYW5kXG4gKiB0aGUgYnVmZmVyJ3Mgd29ya2luZyBjb3B5IGlzIHByaXZhdGUuIElmIGl0IGRpZmZlcnMsIHRoZSBvbmx5IHRoaW5nIHRoYXQgY2FuXG4gKiBoYXZlIGNoYW5nZWQgaXQgaXMgdGhlIHN0YWdlIGl0c2VsZiwgaW4gcGxhY2UuXG4gKlxuICogRGV2LW1vZGUgb25seSAoYGVuYWJsZURldk1vZGUoKWApLCBzbyB0aGUgZGVmYXVsdCBydW4gcGF5cyBub3RoaW5nIGFuZCBpdHNcbiAqIGJ5dGVzIGFyZSB1bmNoYW5nZWQuXG4gKi9cblxuaW1wb3J0IHsgZGVlcEVxdWFsIH0gZnJvbSAnLi91dGlscy5qcyc7XG5cbi8qKiBSZW5kZXIgb25lIHBhdGggc2VnbWVudCBmb3IgYSBodW1hbjogYGxpbmVzWzBdLnF0eWAsIG5vdCBgbGluZXMuMC5xdHlgLiAqL1xuZnVuY3Rpb24gam9pblNlZ21lbnQocHJlZml4OiBzdHJpbmcsIHNlZ21lbnQ6IHN0cmluZywgaW50b0FycmF5OiBib29sZWFuKTogc3RyaW5nIHtcbiAgaWYgKGludG9BcnJheSkgcmV0dXJuIGAke3ByZWZpeH1bJHtzZWdtZW50fV1gO1xuICByZXR1cm4gcHJlZml4ID09PSAnJyA/IHNlZ21lbnQgOiBgJHtwcmVmaXh9LiR7c2VnbWVudH1gO1xufVxuXG4vKipcbiAqIFRoZSBmaXJzdCBwYXRoIGF0IHdoaWNoIGBhZnRlcmAgc3RvcHMgYWdyZWVpbmcgd2l0aCBgYmVmb3JlYCwgb3IgYHVuZGVmaW5lZGBcbiAqIHdoZW4gdGhleSBhcmUgc3RydWN0dXJhbGx5IGVxdWFsLiBEZXB0aC1maXJzdCwgb3duIGtleXMgb25seSDigJQgdGhlIHNhbWVcbiAqIHNoYXBlcyBgZGVlcEVxdWFsYCBoYW5kbGVzLCBzaW5jZSBjb21taXR0ZWQgc3RhdGUgaXMgSlNPTi1zaGFwZWQuXG4gKlxuICogQ3ljbGUtc2FmZSBieSBjb25zdHJ1Y3Rpb246IGl0IG9ubHkgcmVjdXJzZXMgaW50byBwYWlycyB0aGF0IGFyZSBub3QgYWxyZWFkeVxuICogYGRlZXBFcXVhbGAsIGFuZCBzdG9wcyBhdCB0aGUgZmlyc3QgZGlzYWdyZWVtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlyc3REaWZmZXJpbmdQYXRoKGJlZm9yZTogdW5rbm93biwgYWZ0ZXI6IHVua25vd24sIHByZWZpeCA9ICcnLCBkZXB0aCA9IDApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoZGVlcEVxdWFsKGJlZm9yZSwgYWZ0ZXIpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoZGVwdGggPj0gMjQpIHJldHVybiBwcmVmaXg7IC8vIHBhdGhvbG9naWNhbCBuZXN0aW5nIOKAlCBuYW1lIHdoYXQgd2UgaGF2ZVxuICBpZiAoYmVmb3JlID09PSBudWxsIHx8IGFmdGVyID09PSBudWxsIHx8IHR5cGVvZiBiZWZvcmUgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBhZnRlciAhPT0gJ29iamVjdCcpIHJldHVybiBwcmVmaXg7XG5cbiAgY29uc3QgYmVmb3JlSXNBcnJheSA9IEFycmF5LmlzQXJyYXkoYmVmb3JlKTtcbiAgaWYgKGJlZm9yZUlzQXJyYXkgIT09IEFycmF5LmlzQXJyYXkoYWZ0ZXIpKSByZXR1cm4gcHJlZml4O1xuXG4gIGlmIChiZWZvcmVJc0FycmF5KSB7XG4gICAgY29uc3QgYSA9IGJlZm9yZSBhcyB1bmtub3duW107XG4gICAgY29uc3QgYiA9IGFmdGVyIGFzIHVua25vd25bXTtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gcHJlZml4O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZGVlcGVyID0gZmlyc3REaWZmZXJpbmdQYXRoKGFbaV0sIGJbaV0sIGpvaW5TZWdtZW50KHByZWZpeCwgU3RyaW5nKGkpLCB0cnVlKSwgZGVwdGggKyAxKTtcbiAgICAgIGlmIChkZWVwZXIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZXBlcjtcbiAgICB9XG4gICAgcmV0dXJuIHByZWZpeDtcbiAgfVxuXG4gIGNvbnN0IGEgPSBiZWZvcmUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGIgPSBhZnRlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3Qga2V5cyA9IG5ldyBTZXQoWy4uLk9iamVjdC5rZXlzKGEpLCAuLi5PYmplY3Qua2V5cyhiKV0pO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3QgZGVlcGVyID0gZmlyc3REaWZmZXJpbmdQYXRoKGFba2V5XSwgYltrZXldLCBqb2luU2VnbWVudChwcmVmaXgsIGtleSwgZmFsc2UpLCBkZXB0aCArIDEpO1xuICAgIGlmIChkZWVwZXIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZXBlcjtcbiAgfVxuICByZXR1cm4gcHJlZml4O1xufVxuXG4vKipcbiAqIFRoZSByZWZ1c2FsIHRleHQgZm9yIGEgd3JpdGUgdGhhdCByZWFjaGVkIGEgZnJhbWUgQUZURVIgaXRzIHN0YWdlIGNvbW1pdHRlZC5cbiAqIEEgc2NvcGUsIGFuZCBldmVyeSBwcm94eSByZWFkIG91dCBvZiBpdCwgaXMgYm91bmQgdG8gdGhlIHN0YWdlIGl0IHdhcyBoYW5kZWRcbiAqIHRvOyBrZXB0IHBhc3QgdGhhdCBzdGFnZSdzIGNvbW1pdCBpdCBoYXMgbm8gZnJhbWUgdG8gbGFuZCBpbiwgc28gdGhlIHdyaXRlXG4gKiB3b3VsZCBzaXQgaW4gYSBidWZmZXIgbm90aGluZyBldmVyIGNvbW1pdHMg4oCUIG5vIHRyYWNlIHJvdywgc3RhdGUgdW5jaGFuZ2VkLlxuICogVGhlIHRocm93IHN1cmZhY2VzIGluIHRoZSBzdGFnZSB0aGF0IG1hZGUgdGhlIHdyaXRlICh0aGUgZW5naW5lJ3MgZXJyb3JcbiAqIHBhdGggbmFtZXMgaXQpOyB0aGlzIHRleHQgbmFtZXMgdGhlIHN0YWdlIHRoZSBoYW5kbGUgY2FtZSBmcm9tLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVhZEZyYW1lTWVzc2FnZShzdGFnZU5hbWU6IHN0cmluZywgcnVudGltZVN0YWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwga2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBmcm9tID0gcnVudGltZVN0YWdlSWQgPyBgXCIke3N0YWdlTmFtZX1cIiAoJHtydW50aW1lU3RhZ2VJZH0pYCA6IGBcIiR7c3RhZ2VOYW1lfVwiYDtcbiAgcmV0dXJuIChcbiAgICBgW2Zvb3RwcmludF0gU3RhZ2UgJHtmcm9tfSBoYXMgYWxyZWFkeSBjb21taXR0ZWQg4oCUIGl0cyBzY29wZSBpcyBkZWFkLCBhbmQgYSB3cml0ZSB0byBcXGAke2tleX1cXGAgYCArXG4gICAgJ2p1c3QgcmVhY2hlZCBpdCBmcm9tIGEgbGF0ZXIgc3RhZ2UgKHRoaXMgZXJyb3IgaXMgcmFpc2VkIGluIHRoYXQgc3RhZ2UpLiBBIHNjb3BlLCBhbmQgYW55dGhpbmcgcmVhZCAnICtcbiAgICAnb3V0IG9mIGl0IChgc2NvcGUua2AsIGBzY29wZS5rLmFyclswXWApLCBiZWxvbmdzIHRvIHRoZSBzdGFnZSBpdCB3YXMgaGFuZGVkIHRvOyBoZWxkIHBhc3QgdGhhdCAnICtcbiAgICBcInN0YWdlJ3MgY29tbWl0IGl0IGhhcyBubyBmcmFtZSB0byBsYW5kIGluLCBzbyB0aGUgd3JpdGUgd291bGQgdmFuaXNoIHdpdGggbm8gdHJhY2Ugcm93LiBcIiArXG4gICAgXCJSZWFkIHRoZSBrZXkgYWdhaW4gdGhyb3VnaCB0aGUgQ1VSUkVOVCBzdGFnZSdzIHNjb3BlIGFuZCB3cml0ZSB0aGVyZS5cIlxuICApO1xufVxuXG4vKipcbiAqIFRoZSB3YXJuaW5nIHRleHQgZm9yIGEga2V5IHRoZSBzdGFnZSBXUk9URSBhZnRlciBjaGFuZ2luZywgaW4gcGxhY2UsIHRoZVxuICogY29tbWl0dGVkIHZhbHVlIGl0IGhhZCByZWFkIGJlZm9yZSBpdHMgZmlyc3Qgd3JpdGUgKGNvcHktb24td3JpdGUsIDkuMjkuMCkuXG4gKiBUaGUgY29tbWl0IGNvbXBhcmVzIHdoYXQgdGhlIHN0YWdlIHdyb3RlIGFnYWluc3QgY29tbWl0dGVkIHN0YXRlIOKAlCB0aGVcbiAqIG9iamVjdCB0aGUgaW4tcGxhY2UgY2hhbmdlIGFsc28gbW92ZWQg4oCUIHNvIGl0IHJlY29yZHMgbm8gY2hhbmdlOiBsaXZlIHN0YXRlXG4gKiBrZWVwcyB0aGUgZWRpdCwgdGhlIGxvZyBhbmQgZXZlcnkgZm9sZCBkbyBub3QuICg5LjI4LjAgcmVjb3JkZWQgaXQgd2hlbiB0aGVcbiAqIGVkaXQgY2FtZSBhZnRlciB0aGUgZmlyc3Qgd3JpdGUsIGJ5IGFjY2lkZW50IG9mIGEgd2hvbGUtc3RhdGUgY2xvbmUuKVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWl0dGVkTXV0YXRpb25NZXNzYWdlKHN0YWdlTmFtZTogc3RyaW5nLCBrZXk6IHN0cmluZywgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgd2hlcmUgPSBwYXRoID09PSAnJyA/IGtleSA6IGAke2tleX0uJHtwYXRofWAucmVwbGFjZSgvXFwuXFxbL2csICdbJyk7XG4gIHJldHVybiAoXG4gICAgYFtmb290cHJpbnRdIFN0YWdlIFwiJHtzdGFnZU5hbWV9XCIgY2hhbmdlZCBcXGAke3doZXJlfVxcYCBJTiBQTEFDRSBvbiB0aGUgY29tbWl0dGVkIHZhbHVlIGl0IHJlYWQgYmVmb3JlIGAgK1xuICAgICdpdHMgZmlyc3Qgd3JpdGUsIHRoZW4gd3JvdGUgdGhlIGtleS4gVGhlIGNvbW1pdCBjb21wYXJlcyB0aGUgd3JpdHRlbiB2YWx1ZSB3aXRoIGNvbW1pdHRlZCBzdGF0ZSDigJQgJyArXG4gICAgJ3doaWNoIHRoZSBpbi1wbGFjZSBjaGFuZ2UgYWxzbyBtb3ZlZCDigJQgc28gaXQgcmVjb3JkcyBOTyBjaGFuZ2U6IGxpdmUgc3RhdGUga2VlcHMgdGhlIGVkaXQsIHRoZSBjb21taXQgJyArXG4gICAgJ2xvZyBhbmQgZXZlcnkgcmVhZGVyIHRoYXQgZm9sZHMgaXQgZG8gbm90LiBSZWFkcyBhcmUgQk9SUk9XRUQuIEJ1aWxkIHRoZSBuZXh0IHZhbHVlIGluc3RlYWQgJyArXG4gICAgYChcXGBzY29wZS4kc2V0VmFsdWUoJyR7a2V5fScsIHsgLi4udmFsdWUsIOKApiB9KVxcYCksIG9yIHJlYWQgdGhlIGtleSBhZ2FpbiBhZnRlciB0aGUgc3RhZ2UncyBmaXJzdCBgICtcbiAgICBcIndyaXRlIOKAlCB0aGF0IHJlYWQgaXMgdGhlIHN0YWdlJ3Mgb3duIGNvcHkuXCJcbiAgKTtcbn1cblxuLyoqXG4gKiBUaGUgd2FybmluZyB0ZXh0LiBOYW1lcyB0aGUgc3RhZ2UsIHRoZSBleGFjdCBwYXRoIHRoYXQgbW92ZWQsIGFuZCB0aGUgdHdvXG4gKiB3YXlzIHRvIHdyaXRlIGl0IGJhY2sg4oCUIGJlY2F1c2UgXCJ5b3UgbXV0YXRlZCBzb21ldGhpbmdcIiBpcyBub3QgYWN0aW9uYWJsZVxuICogYW5kIHRoaXMgaXMgdGhlIG9uZSBmYWlsdXJlIG1vZGUgdGhlIHdob2xlIGRlc2lnbiBleGlzdHMgdG8gcHJldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJvcnJvd2VkTXV0YXRpb25NZXNzYWdlKHN0YWdlTmFtZTogc3RyaW5nLCBrZXk6IHN0cmluZywgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgd2hlcmUgPSBwYXRoID09PSAnJyA/IGtleSA6IGAke2tleX0uJHtwYXRofWAucmVwbGFjZSgvXFwuXFxbL2csICdbJyk7XG4gIHJldHVybiAoXG4gICAgYFtmb290cHJpbnRdIFN0YWdlIFwiJHtzdGFnZU5hbWV9XCIgY2hhbmdlZCBcXGAke3doZXJlfVxcYCBJTiBQTEFDRSwgb24gYSB2YWx1ZSBpdCBvbmx5IHJlYWQuIGAgK1xuICAgICdmb290cHJpbnQgbmV2ZXIgc2F3IHRoYXQgd3JpdGU6IHRoZXJlIGlzIG5vIHRyYWNlIHJvdyBmb3IgaXQsIHNvIHRoZSBjb21taXQgbG9nLCB0aGUgY2F1c2FsIGNoYWluICcgK1xuICAgICdhbmQgZXZlcnkgcmVhZGVyIHRoYXQgZm9sZHMgdGhlIGxvZyB3aWxsIGRpc2FncmVlIHdpdGggZmluYWwgc3RhdGUg4oCUIGFuZCB1bmRlciBhIGRpZmZlcmVudCB3cml0ZSAnICtcbiAgICAnb3JkZXIgdGhlIGNoYW5nZSBpcyBkcm9wcGVkIGVudGlyZWx5LiBSZWFkcyBhcmUgQk9SUk9XRUQuICcgK1xuICAgICdXcml0ZSB0aHJvdWdoIHRoZSBzY29wZSBpbnN0ZWFkIChgc2NvcGUuJyArXG4gICAgd2hlcmUgK1xuICAgICcgPSDigKZgIOKAlCBwcm9wZXJ0eSBhbmQgaW5kZXhlZCBhY2Nlc3MgYXJlIGJvdGggdHJhY2tlZCksICcgK1xuICAgIGBvciBoYW5kIGJhY2sgdGhlIHdob2xlIHZhbHVlIHdpdGggXFxgc2NvcGUuJHNldFZhbHVlKCcke2tleX0nLCBuZXh0KVxcYC4gYCArXG4gICAgJ1RoaXMgdXN1YWxseSBjb21lcyBmcm9tIG11dGF0aW5nIGFuIGVsZW1lbnQgcmVhY2hlZCBieSBgZmluZGAvYGZpbHRlcmAvYGZvcuKApm9mYC9gZm9yRWFjaGAsICcgK1xuICAgICd3aGljaCB0aGUgc2NvcGUgcHJveHkgY2Fubm90IGludGVyY2VwdC4nXG4gICk7XG59XG4iXX0=
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9ycm93ZWRNdXRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2JvcnJvd2VkTXV0YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7OztBQUVILHlDQUF1QztBQUV2Qyw4RUFBOEU7QUFDOUUsU0FBUyxXQUFXLENBQUMsTUFBYyxFQUFFLE9BQWUsRUFBRSxTQUFrQjtJQUN0RSxJQUFJLFNBQVM7UUFBRSxPQUFPLEdBQUcsTUFBTSxJQUFJLE9BQU8sR0FBRyxDQUFDO0lBQzlDLE9BQU8sTUFBTSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUMxRCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLE1BQWUsRUFBRSxLQUFjLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBQztJQUN4RixJQUFJLElBQUEsb0JBQVMsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3pELElBQUksS0FBSyxJQUFJLEVBQUU7UUFBRSxPQUFPLE1BQU0sQ0FBQyxDQUFDLDJDQUEyQztJQUMzRSxJQUFJLE1BQU0sS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sTUFBTSxDQUFDO0lBRWhILE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUMsSUFBSSxhQUFhLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUUxRCxJQUFJLGFBQWEs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LEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekUsT0FBTyxDQUNMLHNCQUFzQixTQUFTLGVBQWUsS0FBSyx3Q0FBd0M7UUFDM0Ysb0dBQW9HO1FBQ3BHLG1HQUFtRztRQUNuRyw0REFBNEQ7UUFDNUQsMENBQTBDO1FBQzFDLEtBQUs7UUFDTCx5REFBeUQ7UUFDekQsd0RBQXdELEdBQUcsY0FBYztRQUN6RSw2RkFBNkY7UUFDN0YseUNBQXlDLENBQzFDLENBQUM7QUFDSixDQUFDO0FBZEQsMERBY0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIG1lbW9yeS9ib3Jyb3dlZE11dGF0aW9uIOKAlCB0aGUgaG9uZXN0IGJvdW5kYXJ5J3MgdHdvIHRleHRzOiB0aGUgZGV2LW1vZGVcbiAqIFJFUE9SVCBmb3IgYSB3cml0ZSB0aGUgZW5naW5lIGNhbm5vdCBzZWUgKHtAbGluayBib3Jyb3dlZE11dGF0aW9uTWVzc2FnZX0pXG4gKiBhbmQgdGhlIFJFRlVTQUwgZm9yIGEgd3JpdGUgZnJvbSBhIGhhbmRsZSBoZWxkIHBhc3QgaXRzIHN0YWdlXG4gKiAoe0BsaW5rIGRlYWRGcmFtZU1lc3NhZ2V9LCB0aHJvd24gYnkgYFN0YWdlQ29udGV4dC5zdGFnZVdyaXRlYCkuXG4gKlxuICog4pSA4pSAIFRoZSBob25lc3QgYm91bmRhcnkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiBUaGUgdHlwZWQgc2NvcGUgaW50ZXJjZXB0cyBldmVyeSB3cml0ZSBpdCBjYW4gcmVhY2g6IGEgcHJvcGVydHkgYXQgYW55XG4gKiBkZXB0aCwgYW4gaW5kZXhlZCBlbGVtZW50LCBhbiBhcnJheSBtZXRob2QuIFdoYXQgaXQgY2Fubm90IHJlYWNoIGlzIGFuXG4gKiBlbGVtZW50IGhhbmRlZCBvdXQgYnkgYSBSRUFEIE1FVEhPRCDigJQgYGZpbmRgLCBgZmlsdGVyYCwgYGZvcuKApm9mYCwgYGZvckVhY2hgLFxuICogZGVzdHJ1Y3R1cmluZyDigJQgYmVjYXVzZSB3cmFwcGluZyB0aG9zZSB3b3VsZCBtZWFuIHJldHVybmluZyBwcm94aWVzIG91dCBvZlxuICogZXZlcnkgcmVhZCAoYG1hcGAgd291bGQgYnVpbGQgYW4gYXJyYXkgb2YgcHJveGllcywgYGZpbHRlcmAgd291bGQgY29tcGFyZVxuICogcHJveGllcywgYSByZXR1cm5lZCB2YWx1ZSB3b3VsZCBlc2NhcGUgdGhlIHN0YWdlIHN0aWxsIGJvdW5kIHRvIGl0KS4gVGhhdCBpc1xuICogYSBjb3N0IHRoZSBsaWJyYXJ5IHNob3VsZCBub3QgcGF5LCBhbmQgYSBzZW1hbnRpYyBjaGFuZ2UgaXQgc2hvdWxkIG5vdCBtYWtlLlxuICpcbiAqIFNvIHRoZSBhbnN3ZXIgZm9yIHRoYXQgZmFtaWx5IGlzIG5vdCBpbnRlcmNlcHRpb24g4oCUIGl0IGlzIGEgUkVQT1JULiBBIHJlYWRcbiAqIGlzIEJPUlJPV0VEOyBtdXRhdGluZyBpdCBpbiBwbGFjZSBpcyBvdXQgb2YgY29udHJhY3QuIFRoaXMgbW9kdWxlIGRldGVjdHMgdGhlXG4gKiB2aW9sYXRpb24gYWZ0ZXIgdGhlIGZhY3QgYW5kIG5hbWVzIGl0IChhIGRldi1tb2RlIHdhcm5pbmcgYXQgY29tbWl0IOKAlCB0aGVcbiAqIHdyaXRlIGFscmVhZHkgaGFwcGVuZWQsIHNvIGl0IGNhbm5vdCBiZSByZWZ1c2VkKSwgaW5zdGVhZCBvZiBsZXR0aW5nIHRoZSBydW5cbiAqIGVuZCB3aXRoIGEgY29tbWl0IGxvZyB0aGF0IGRpc2FncmVlcyB3aXRoIGZpbmFsIHN0YXRlIGFuZCBub3RoaW5nIHNheWluZyBzby5cbiAqXG4gKiDilIDilIAgSG93IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogYHJlYWRUcmFja2luZzogJ2Z1bGwnYCAodGhlIGRlZmF1bHQpIGFscmVhZHkgcmV0YWlucyBhIENMT05FIG9mIGV2ZXJ5IHZhbHVlXG4gKiBhIHN0YWdlIHJlYWQuIEF0IGNvbW1pdCwgYSBrZXkgdGhlIHN0YWdlIHJlYWQgYnV0IG5ldmVyIFdST1RFIG11c3Qgc3RpbGxcbiAqIGhvbGQgd2hhdCBpdCBoZWxkIGF0IHJlYWQgdGltZSDigJQgY29tbWl0dGVkIHN0YXRlIGlzIGltbXV0YWJsZS1hZnRlci1zd2FwIGFuZFxuICogdGhlIGJ1ZmZlcidzIHdvcmtpbmcgY29weSBpcyBwcml2YXRlLiBJZiBpdCBkaWZmZXJzLCB0aGUgb25seSB0aGluZyB0aGF0IGNhblxuICogaGF2ZSBjaGFuZ2VkIGl0IGlzIHRoZSBzdGFnZSBpdHNlbGYsIGluIHBsYWNlLlxuICpcbiAqIERldi1tb2RlIG9ubHkgKGBlbmFibGVEZXZNb2RlKClgKSwgc28gdGhlIGRlZmF1bHQgcnVuIHBheXMgbm90aGluZyBhbmQgaXRzXG4gKiBieXRlcyBhcmUgdW5jaGFuZ2VkLlxuICovXG5cbmltcG9ydCB7IGRlZXBFcXVhbCB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG4vKiogUmVuZGVyIG9uZSBwYXRoIHNlZ21lbnQgZm9yIGEgaHVtYW46IGBsaW5lc1swXS5xdHlgLCBub3QgYGxpbmVzLjAucXR5YC4gKi9cbmZ1bmN0aW9uIGpvaW5TZWdtZW50KHByZWZpeDogc3RyaW5nLCBzZWdtZW50OiBzdHJpbmcsIGludG9BcnJheTogYm9vbGVhbik6IHN0cmluZyB7XG4gIGlmIChpbnRvQXJyYXkpIHJldHVybiBgJHtwcmVmaXh9WyR7c2VnbWVudH1dYDtcbiAgcmV0dXJuIHByZWZpeCA9PT0gJycgPyBzZWdtZW50IDogYCR7cHJlZml4fS4ke3NlZ21lbnR9YDtcbn1cblxuLyoqXG4gKiBUaGUgZmlyc3QgcGF0aCBhdCB3aGljaCBgYWZ0ZXJgIHN0b3BzIGFncmVlaW5nIHdpdGggYGJlZm9yZWAsIG9yIGB1bmRlZmluZWRgXG4gKiB3aGVuIHRoZXkgYXJlIHN0cnVjdHVyYWxseSBlcXVhbC4gRGVwdGgtZmlyc3QsIG93biBrZXlzIG9ubHkg4oCUIHRoZSBzYW1lXG4gKiBzaGFwZXMgYGRlZXBFcXVhbGAgaGFuZGxlcywgc2luY2UgY29tbWl0dGVkIHN0YXRlIGlzIEpTT04tc2hhcGVkLlxuICpcbiAqIEN5Y2xlLXNhZmUgYnkgY29uc3RydWN0aW9uOiBpdCBvbmx5IHJlY3Vyc2VzIGludG8gcGFpcnMgdGhhdCBhcmUgbm90IGFscmVhZHlcbiAqIGBkZWVwRXF1YWxgLCBhbmQgc3RvcHMgYXQgdGhlIGZpcnN0IGRpc2FncmVlbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0RGlmZmVyaW5nUGF0aChiZWZvcmU6IHVua25vd24sIGFmdGVyOiB1bmtub3duLCBwcmVmaXggPSAnJywgZGVwdGggPSAwKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGRlZXBFcXVhbChiZWZvcmUsIGFmdGVyLCAnY29waWVzJykpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChkZXB0aCA+PSAyNCkgcmV0dXJuIHByZWZpeDsgLy8gcGF0aG9sb2dpY2FsIG5lc3Rpbmcg4oCUIG5hbWUgd2hhdCB3ZSBoYXZlXG4gIGlmIChiZWZvcmUgPT09IG51bGwgfHwgYWZ0ZXIgPT09IG51bGwgfHwgdHlwZW9mIGJlZm9yZSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIGFmdGVyICE9PSAnb2JqZWN0JykgcmV0dXJuIHByZWZpeDtcblxuICBjb25zdCBiZWZvcmVJc0FycmF5ID0gQXJyYXkuaXNBcnJheShiZWZvcmUpO1xuICBpZiAoYmVmb3JlSXNBcnJheSAhPT0gQXJyYXkuaXNBcnJheShhZnRlcikpIHJldHVybiBwcmVmaXg7XG5cbiAgaWYgKGJlZm9yZUlzQXJyYXkpIHtcbiAgICBjb25zdCBhID0gYmVmb3JlIGFzIHVua25vd25bXTtcbiAgICBjb25zdCBiID0gYWZ0ZXIgYXMgdW5rbm93bltdO1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBwcmVmaXg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBkZWVwZXIgPSBmaXJzdERpZmZlcmluZ1BhdGgoYVtpXSwgYltpXSwgam9pblNlZ21lbnQocHJlZml4LCBTdHJpbmcoaSksIHRydWUpLCBkZXB0aCArIDEpO1xuICAgICAgaWYgKGRlZXBlciAhPT0gdW5kZWZpbmVkKSByZXR1cm4gZGVlcGVyO1xuICAgIH1cbiAgICByZXR1cm4gcHJlZml4O1xuICB9XG5cbiAgY29uc3QgYSA9IGJlZm9yZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3QgYiA9IGFmdGVyIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBrZXlzID0gbmV3IFNldChbLi4uT2JqZWN0LmtleXMoYSksIC4uLk9iamVjdC5rZXlzKGIpXSk7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICBjb25zdCBkZWVwZXIgPSBmaXJzdERpZmZlcmluZ1BhdGgoYVtrZXldLCBiW2tleV0sIGpvaW5TZWdtZW50KHByZWZpeCwga2V5LCBmYWxzZSksIGRlcHRoICsgMSk7XG4gICAgaWYgKGRlZXBlciAhPT0gdW5kZWZpbmVkKSByZXR1cm4gZGVlcGVyO1xuICB9XG4gIHJldHVybiBwcmVmaXg7XG59XG5cbi8qKlxuICogVGhlIHJlZnVzYWwgdGV4dCBmb3IgYSB3cml0ZSB0aGF0IHJlYWNoZWQgYSBmcmFtZSBBRlRFUiBpdHMgc3RhZ2UgY29tbWl0dGVkLlxuICogQSBzY29wZSwgYW5kIGV2ZXJ5IHByb3h5IHJlYWQgb3V0IG9mIGl0LCBpcyBib3VuZCB0byB0aGUgc3RhZ2UgaXQgd2FzIGhhbmRlZFxuICogdG87IGtlcHQgcGFzdCB0aGF0IHN0YWdlJ3MgY29tbWl0IGl0IGhhcyBubyBmcmFtZSB0byBsYW5kIGluLCBzbyB0aGUgd3JpdGVcbiAqIHdvdWxkIHNpdCBpbiBhIGJ1ZmZlciBub3RoaW5nIGV2ZXIgY29tbWl0cyDigJQgbm8gdHJhY2Ugcm93LCBzdGF0ZSB1bmNoYW5nZWQuXG4gKiBUaGUgdGhyb3cgc3VyZmFjZXMgaW4gdGhlIHN0YWdlIHRoYXQgbWFkZSB0aGUgd3JpdGUgKHRoZSBlbmdpbmUncyBlcnJvclxuICogcGF0aCBuYW1lcyBpdCk7IHRoaXMgdGV4dCBuYW1lcyB0aGUgc3RhZ2UgdGhlIGhhbmRsZSBjYW1lIGZyb20uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWFkRnJhbWVNZXNzYWdlKHN0YWdlTmFtZTogc3RyaW5nLCBydW50aW1lU3RhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGZyb20gPSBydW50aW1lU3RhZ2VJZCA/IGBcIiR7c3RhZ2VOYW1lfVwiICgke3J1bnRpbWVTdGFnZUlkfSlgIDogYFwiJHtzdGFnZU5hbWV9XCJgO1xuICByZXR1cm4gKFxuICAgIGBbZm9vdHByaW50XSBTdGFnZSAke2Zyb219IGhhcyBhbHJlYWR5IGNvbW1pdHRlZCDigJQgaXRzIHNjb3BlIGlzIGRlYWQsIGFuZCBhIHdyaXRlIHRvIFxcYCR7a2V5fVxcYCBgICtcbiAgICAnanVzdCByZWFjaGVkIGl0IGZyb20gYSBsYXRlciBzdGFnZSAodGhpcyBlcnJvciBpcyByYWlzZWQgaW4gdGhhdCBzdGFnZSkuIEEgc2NvcGUsIGFuZCBhbnl0aGluZyByZWFkICcgK1xuICAgICdvdXQgb2YgaXQgKGBzY29wZS5rYCwgYHNjb3BlLmsuYXJyWzBdYCksIGJlbG9uZ3MgdG8gdGhlIHN0YWdlIGl0IHdhcyBoYW5kZWQgdG87IGhlbGQgcGFzdCB0aGF0ICcgK1xuICAgIFwic3RhZ2UncyBjb21taXQgaXQgaGFzIG5vIGZyYW1lIHRvIGxhbmQgaW4sIHNvIHRoZSB3cml0ZSB3b3VsZCB2YW5pc2ggd2l0aCBubyB0cmFjZSByb3cuIFwiICtcbiAgICBcIlJlYWQgdGhlIGtleSBhZ2FpbiB0aHJvdWdoIHRoZSBDVVJSRU5UIHN0YWdlJ3Mgc2NvcGUgYW5kIHdyaXRlIHRoZXJlLlwiXG4gICk7XG59XG5cbi8qKlxuICogVGhlIHdhcm5pbmcgdGV4dCBmb3IgYSBrZXkgdGhlIHN0YWdlIFdST1RFIGFmdGVyIGNoYW5naW5nLCBpbiBwbGFjZSwgdGhlXG4gKiBjb21taXR0ZWQgdmFsdWUgaXQgaGFkIHJlYWQgYmVmb3JlIGl0cyBmaXJzdCB3cml0ZSAoY29weS1vbi13cml0ZSwgOS4yOS4wKS5cbiAqIFRoZSBjb21taXQgY29tcGFyZXMgd2hhdCB0aGUgc3RhZ2Ugd3JvdGUgYWdhaW5zdCBjb21taXR0ZWQgc3RhdGUg4oCUIHRoZVxuICogb2JqZWN0IHRoZSBpbi1wbGFjZSBjaGFuZ2UgYWxzbyBtb3ZlZCDigJQgc28gaXQgcmVjb3JkcyBubyBjaGFuZ2U6IGxpdmUgc3RhdGVcbiAqIGtlZXBzIHRoZSBlZGl0LCB0aGUgbG9nIGFuZCBldmVyeSBmb2xkIGRvIG5vdC4gKDkuMjguMCByZWNvcmRlZCBpdCB3aGVuIHRoZVxuICogZWRpdCBjYW1lIGFmdGVyIHRoZSBmaXJzdCB3cml0ZSwgYnkgYWNjaWRlbnQgb2YgYSB3aG9sZS1zdGF0ZSBjbG9uZS4pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21taXR0ZWRNdXRhdGlvbk1lc3NhZ2Uoc3RhZ2VOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB3aGVyZSA9IHBhdGggPT09ICcnID8ga2V5IDogYCR7a2V5fS4ke3BhdGh9YC5yZXBsYWNlKC9cXC5cXFsvZywgJ1snKTtcbiAgcmV0dXJuIChcbiAgICBgW2Zvb3RwcmludF0gU3RhZ2UgXCIke3N0YWdlTmFtZX1cIiBjaGFuZ2VkIFxcYCR7d2hlcmV9XFxgIElOIFBMQUNFIG9uIHRoZSBjb21taXR0ZWQgdmFsdWUgaXQgcmVhZCBiZWZvcmUgYCArXG4gICAgJ2l0cyBmaXJzdCB3cml0ZSwgdGhlbiB3cm90ZSB0aGUga2V5LiBUaGUgY29tbWl0IGNvbXBhcmVzIHRoZSB3cml0dGVuIHZhbHVlIHdpdGggY29tbWl0dGVkIHN0YXRlIOKAlCAnICtcbiAgICAnd2hpY2ggdGhlIGluLXBsYWNlIGNoYW5nZSBhbHNvIG1vdmVkIOKAlCBzbyBpdCByZWNvcmRzIE5PIGNoYW5nZTogbGl2ZSBzdGF0ZSBrZWVwcyB0aGUgZWRpdCwgdGhlIGNvbW1pdCAnICtcbiAgICAnbG9nIGFuZCBldmVyeSByZWFkZXIgdGhhdCBmb2xkcyBpdCBkbyBub3QuIFJlYWRzIGFyZSBCT1JST1dFRC4gQnVpbGQgdGhlIG5leHQgdmFsdWUgaW5zdGVhZCAnICtcbiAgICBgKFxcYHNjb3BlLiRzZXRWYWx1ZSgnJHtrZXl9JywgeyAuLi52YWx1ZSwg4oCmIH0pXFxgKSwgb3IgcmVhZCB0aGUga2V5IGFnYWluIGFmdGVyIHRoZSBzdGFnZSdzIGZpcnN0IGAgK1xuICAgIFwid3JpdGUg4oCUIHRoYXQgcmVhZCBpcyB0aGUgc3RhZ2UncyBvd24gY29weS5cIlxuICApO1xufVxuXG4vKipcbiAqIFRoZSB3YXJuaW5nIHRleHQuIE5hbWVzIHRoZSBzdGFnZSwgdGhlIGV4YWN0IHBhdGggdGhhdCBtb3ZlZCwgYW5kIHRoZSB0d29cbiAqIHdheXMgdG8gd3JpdGUgaXQgYmFjayDigJQgYmVjYXVzZSBcInlvdSBtdXRhdGVkIHNvbWV0aGluZ1wiIGlzIG5vdCBhY3Rpb25hYmxlXG4gKiBhbmQgdGhpcyBpcyB0aGUgb25lIGZhaWx1cmUgbW9kZSB0aGUgd2hvbGUgZGVzaWduIGV4aXN0cyB0byBwcmV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYm9ycm93ZWRNdXRhdGlvbk1lc3NhZ2Uoc3RhZ2VOYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB3aGVyZSA9IHBhdGggPT09ICcnID8ga2V5IDogYCR7a2V5fS4ke3BhdGh9YC5yZXBsYWNlKC9cXC5cXFsvZywgJ1snKTtcbiAgcmV0dXJuIChcbiAgICBgW2Zvb3RwcmludF0gU3RhZ2UgXCIke3N0YWdlTmFtZX1cIiBjaGFuZ2VkIFxcYCR7d2hlcmV9XFxgIElOIFBMQUNFLCBvbiBhIHZhbHVlIGl0IG9ubHkgcmVhZC4gYCArXG4gICAgJ2Zvb3RwcmludCBuZXZlciBzYXcgdGhhdCB3cml0ZTogdGhlcmUgaXMgbm8gdHJhY2Ugcm93IGZvciBpdCwgc28gdGhlIGNvbW1pdCBsb2csIHRoZSBjYXVzYWwgY2hhaW4gJyArXG4gICAgJ2FuZCBldmVyeSByZWFkZXIgdGhhdCBmb2xkcyB0aGUgbG9nIHdpbGwgZGlzYWdyZWUgd2l0aCBmaW5hbCBzdGF0ZSDigJQgYW5kIHVuZGVyIGEgZGlmZmVyZW50IHdyaXRlICcgK1xuICAgICdvcmRlciB0aGUgY2hhbmdlIGlzIGRyb3BwZWQgZW50aXJlbHkuIFJlYWRzIGFyZSBCT1JST1dFRC4gJyArXG4gICAgJ1dyaXRlIHRocm91Z2ggdGhlIHNjb3BlIGluc3RlYWQgKGBzY29wZS4nICtcbiAgICB3aGVyZSArXG4gICAgJyA9IOKApmAg4oCUIHByb3BlcnR5IGFuZCBpbmRleGVkIGFjY2VzcyBhcmUgYm90aCB0cmFja2VkKSwgJyArXG4gICAgYG9yIGhhbmQgYmFjayB0aGUgd2hvbGUgdmFsdWUgd2l0aCBcXGBzY29wZS4kc2V0VmFsdWUoJyR7a2V5fScsIG5leHQpXFxgLiBgICtcbiAgICAnVGhpcyB1c3VhbGx5IGNvbWVzIGZyb20gbXV0YXRpbmcgYW4gZWxlbWVudCByZWFjaGVkIGJ5IGBmaW5kYC9gZmlsdGVyYC9gZm9y4oCmb2ZgL2Bmb3JFYWNoYCwgJyArXG4gICAgJ3doaWNoIHRoZSBzY29wZSBwcm94eSBjYW5ub3QgaW50ZXJjZXB0LidcbiAgKTtcbn1cbiJdfQ==