footprintjs 9.44.0 → 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.
- package/CLAUDE.md +6 -5
- package/dist/esm/lib/capture/freeze.d.ts +51 -7
- package/dist/esm/lib/capture/freeze.js +289 -24
- package/dist/esm/lib/capture/valueKinds.d.ts +57 -0
- package/dist/esm/lib/capture/valueKinds.js +142 -0
- package/dist/esm/lib/memory/EventLog.d.ts +24 -6
- package/dist/esm/lib/memory/EventLog.js +30 -10
- package/dist/esm/lib/memory/admission.js +4 -3
- package/dist/esm/lib/memory/borrowedMutation.js +2 -2
- package/dist/esm/lib/memory/equality.d.ts +55 -19
- package/dist/esm/lib/memory/equality.js +154 -51
- package/dist/esm/lib/memory/logModel.js +11 -4
- package/dist/esm/lib/memory/redaction.d.ts +21 -0
- package/dist/esm/lib/memory/redaction.js +64 -7
- package/dist/esm/lib/runner/ExecutionRuntime.d.ts +4 -1
- package/dist/esm/lib/runner/ExecutionRuntime.js +15 -10
- package/dist/esm/lib/runner/snapshot.js +17 -3
- package/dist/esm/lib/slice/elementProvenance.js +2 -2
- package/dist/esm/lib/time-travel/chain.js +28 -26
- package/dist/lib/capture/freeze.js +292 -25
- package/dist/lib/capture/valueKinds.js +146 -0
- package/dist/lib/memory/EventLog.js +29 -9
- package/dist/lib/memory/admission.js +4 -3
- package/dist/lib/memory/borrowedMutation.js +2 -2
- package/dist/lib/memory/equality.js +154 -51
- package/dist/lib/memory/logModel.js +11 -4
- package/dist/lib/memory/redaction.js +66 -8
- package/dist/lib/runner/ExecutionRuntime.js +14 -9
- package/dist/lib/runner/snapshot.js +16 -2
- package/dist/lib/slice/elementProvenance.js +2 -2
- package/dist/lib/time-travel/chain.js +27 -25
- package/dist/types/lib/capture/freeze.d.ts +51 -7
- package/dist/types/lib/capture/valueKinds.d.ts +57 -0
- package/dist/types/lib/memory/EventLog.d.ts +24 -6
- package/dist/types/lib/memory/equality.d.ts +55 -19
- package/dist/types/lib/memory/redaction.d.ts +21 -0
- package/dist/types/lib/runner/ExecutionRuntime.d.ts +4 -1
- package/package.json +2 -1
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* valueKinds.ts — what KIND of value a record holds: the one classifier.
|
|
3
|
+
*
|
|
4
|
+
* WHY. Committed state is what survives `structuredClone` (an engine invariant), so the values a
|
|
5
|
+
* record holds are the kinds the clone keeps. Two laws need the kind, and both ask here:
|
|
6
|
+
*
|
|
7
|
+
* - what counts as a CHANGE (`memory/equality.ts · deepEqual`): two values are equal when a record
|
|
8
|
+
* holds the same thing for both, compared kind by kind. Until 9.44.2 only Date, Map and Set had a
|
|
9
|
+
* kind; a RegExp, an Error, a boxed number, a buffer, a DataView or a Blob was compared as an
|
|
10
|
+
* object with no own keys — equal to any other of its kind — so replacing one committed no row
|
|
11
|
+
* and live state kept the old value;
|
|
12
|
+
* - what a served record must COPY (`capture/freeze.ts · freezeRecord` / `serveRecord`):
|
|
13
|
+
* `Object.freeze` seals only the kinds whose content is their own properties ({@link SEALABLE}).
|
|
14
|
+
*
|
|
15
|
+
* A leaf: imports nothing (`capture/` is L0, below `memory/`).
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* kindOf(new Date(0)); // 'date'
|
|
20
|
+
* kindOf(new (class Point { x = 1 })()); // 'plain' — its clone is a plain object
|
|
21
|
+
* kindOf(new Blob(['a'])); // 'opaque' — its clone keeps content this library cannot read
|
|
22
|
+
* SEALABLE.date; // false — setTime writes a slot Object.freeze cannot reach
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
/** Every kind a record can hold. */
|
|
26
|
+
export type ValueKind =
|
|
27
|
+
/** An object the clone keeps as its own enumerable keys — a class instance included. */
|
|
28
|
+
'plain' | 'array' | 'date' | 'regexp' | 'map' | 'set' | 'error'
|
|
29
|
+
/** A boxed primitive: `new Number(1)`, `new String('a')`, `new Boolean(true)`, `Object(1n)`. */
|
|
30
|
+
| 'boxed'
|
|
31
|
+
/** An `ArrayBuffer` (a `SharedArrayBuffer` too: shared memory is out of contract for state). */
|
|
32
|
+
| 'buffer'
|
|
33
|
+
/** A typed array or a `DataView`. */
|
|
34
|
+
| 'view'
|
|
35
|
+
/** Any other object the clone keeps as itself (a Blob, a File, a `DOMException`): content unread here. */
|
|
36
|
+
| 'opaque';
|
|
37
|
+
/**
|
|
38
|
+
* Does `Object.freeze` seal every part of a value of this kind? True only where the content is the
|
|
39
|
+
* value's own properties (or a slot nothing can write). A `Record`, so a new kind does not compile
|
|
40
|
+
* until it is decided here.
|
|
41
|
+
*/
|
|
42
|
+
export declare const SEALABLE: {
|
|
43
|
+
readonly [K in ValueKind]: boolean;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* The kind of an object, as a record holds it. A plain object or an array — the bulk of state —
|
|
47
|
+
* costs one `Array.isArray` and one `getPrototypeOf`; a built-in a tag and one brand-checked read.
|
|
48
|
+
* The brand is the value's own slot, so a subclass (a `Map` subclass is a `'map'`, Node's `Buffer` a
|
|
49
|
+
* `'view'`) and a value from another realm land on their kind.
|
|
50
|
+
*
|
|
51
|
+
* Any other object is classified by WHAT ITS CLONE IS, once per prototype: a class instance comes
|
|
52
|
+
* back a plain object (`'plain'`), a fake built-in (`Object.create(Date.prototype)`, or a class whose
|
|
53
|
+
* `Symbol.toStringTag` says `'Date'`) comes back `{}` (`'plain'`), and a host object comes back as
|
|
54
|
+
* itself (`'opaque'`). A prototype whose instance the clone refuses is `'opaque'` — remembered too:
|
|
55
|
+
* it cannot be held, and its commit will refuse it.
|
|
56
|
+
*/
|
|
57
|
+
export declare function kindOf(value: object): ValueKind;
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* valueKinds.ts — what KIND of value a record holds: the one classifier.
|
|
3
|
+
*
|
|
4
|
+
* WHY. Committed state is what survives `structuredClone` (an engine invariant), so the values a
|
|
5
|
+
* record holds are the kinds the clone keeps. Two laws need the kind, and both ask here:
|
|
6
|
+
*
|
|
7
|
+
* - what counts as a CHANGE (`memory/equality.ts · deepEqual`): two values are equal when a record
|
|
8
|
+
* holds the same thing for both, compared kind by kind. Until 9.44.2 only Date, Map and Set had a
|
|
9
|
+
* kind; a RegExp, an Error, a boxed number, a buffer, a DataView or a Blob was compared as an
|
|
10
|
+
* object with no own keys — equal to any other of its kind — so replacing one committed no row
|
|
11
|
+
* and live state kept the old value;
|
|
12
|
+
* - what a served record must COPY (`capture/freeze.ts · freezeRecord` / `serveRecord`):
|
|
13
|
+
* `Object.freeze` seals only the kinds whose content is their own properties ({@link SEALABLE}).
|
|
14
|
+
*
|
|
15
|
+
* A leaf: imports nothing (`capture/` is L0, below `memory/`).
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* kindOf(new Date(0)); // 'date'
|
|
20
|
+
* kindOf(new (class Point { x = 1 })()); // 'plain' — its clone is a plain object
|
|
21
|
+
* kindOf(new Blob(['a'])); // 'opaque' — its clone keeps content this library cannot read
|
|
22
|
+
* SEALABLE.date; // false — setTime writes a slot Object.freeze cannot reach
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* Does `Object.freeze` seal every part of a value of this kind? True only where the content is the
|
|
27
|
+
* value's own properties (or a slot nothing can write). A `Record`, so a new kind does not compile
|
|
28
|
+
* until it is decided here.
|
|
29
|
+
*/
|
|
30
|
+
export const SEALABLE = /* @__PURE__ */ Object.freeze({
|
|
31
|
+
plain: true,
|
|
32
|
+
array: true,
|
|
33
|
+
boxed: true,
|
|
34
|
+
date: false, // setTime & co. write its time value
|
|
35
|
+
regexp: false, // compile() rewrites source and flags, even on a frozen one
|
|
36
|
+
map: false, // set / delete / clear
|
|
37
|
+
set: false, // add / delete / clear
|
|
38
|
+
error: false, // V8's own `stack` accessor writes through a frozen error
|
|
39
|
+
buffer: false, // its bytes, through any view; transfer() detaches it
|
|
40
|
+
view: false, // index writes, set, fill, sort, copyWithin …
|
|
41
|
+
opaque: false, // content this library cannot read — never assumed sealed
|
|
42
|
+
});
|
|
43
|
+
/** What a brand check returns, when it does not throw, for a value without the slot. */
|
|
44
|
+
const NOT_BRAND = Symbol('not the brand');
|
|
45
|
+
/**
|
|
46
|
+
* A built-in kind is known by its BRAND — an internal slot only the real thing has — never by its
|
|
47
|
+
* prototype: `Object.create(RegExp.prototype)` is not a RegExp (its clone is `{}`), and reading
|
|
48
|
+
* `source` from it throws. The candidate comes from `Object.prototype.toString` (one call), then ONE
|
|
49
|
+
* brand-checked read confirms it; a value that fails it is classified by its clone instead.
|
|
50
|
+
*/
|
|
51
|
+
const BRANDS =
|
|
52
|
+
/* @__PURE__ */ brandTable();
|
|
53
|
+
function brandTable() {
|
|
54
|
+
const getter = (proto, key) => {
|
|
55
|
+
const get = proto && Object.getOwnPropertyDescriptor(proto, key)?.get;
|
|
56
|
+
return get ? (value) => get.call(value) : undefined;
|
|
57
|
+
};
|
|
58
|
+
const global = globalThis;
|
|
59
|
+
const isError = Error.isError;
|
|
60
|
+
const rows = [
|
|
61
|
+
['Date', 'date', (value) => Date.prototype.getTime.call(value)],
|
|
62
|
+
['RegExp', 'regexp', getter(RegExp.prototype, 'source')],
|
|
63
|
+
['Map', 'map', getter(Map.prototype, 'size')],
|
|
64
|
+
['Set', 'set', getter(Set.prototype, 'size')],
|
|
65
|
+
// An error's tag comes from its own [[ErrorData]] slot: no Error prototype carries a toStringTag. Where
|
|
66
|
+
// the brand check `Error.isError` is missing (Node 22), a tag a getter supplies is therefore a spoof.
|
|
67
|
+
['Error', 'error', (value) => ((isError ? isError(value) : untagged(value)) ? true : NOT_BRAND)],
|
|
68
|
+
['Number', 'boxed', (value) => Number.prototype.valueOf.call(value)],
|
|
69
|
+
['String', 'boxed', (value) => String.prototype.valueOf.call(value)],
|
|
70
|
+
['Boolean', 'boxed', (value) => Boolean.prototype.valueOf.call(value)],
|
|
71
|
+
['BigInt', 'boxed', (value) => (global.BigInt?.prototype).valueOf.call(value)],
|
|
72
|
+
['ArrayBuffer', 'buffer', getter(ArrayBuffer.prototype, 'byteLength')],
|
|
73
|
+
['SharedArrayBuffer', 'buffer', getter(global.SharedArrayBuffer?.prototype, 'byteLength')],
|
|
74
|
+
];
|
|
75
|
+
const table = new Map();
|
|
76
|
+
for (const [name, kind, check] of rows)
|
|
77
|
+
if (check)
|
|
78
|
+
table.set(`[object ${name}]`, { kind, check });
|
|
79
|
+
return table;
|
|
80
|
+
}
|
|
81
|
+
/** No `Symbol.toStringTag` on the value or its prototypes: its tag came from a slot. */
|
|
82
|
+
function untagged(value) {
|
|
83
|
+
return value[Symbol.toStringTag] === undefined;
|
|
84
|
+
}
|
|
85
|
+
/** The kind of a built-in value, by its brand — `undefined` for anything else. */
|
|
86
|
+
function builtinKind(value) {
|
|
87
|
+
if (ArrayBuffer.isView(value))
|
|
88
|
+
return 'view'; // a brand check of its own: [[ViewedArrayBuffer]]
|
|
89
|
+
const brand = BRANDS.get(Object.prototype.toString.call(value));
|
|
90
|
+
if (brand === undefined)
|
|
91
|
+
return undefined;
|
|
92
|
+
try {
|
|
93
|
+
return brand.check(value) === NOT_BRAND ? undefined : brand.kind;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return undefined; // the prototype without the slot
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/** Prototypes classified by a probe clone of their first instance (see {@link kindOf}). */
|
|
100
|
+
const PROBED = new WeakMap();
|
|
101
|
+
/**
|
|
102
|
+
* The kind of an object, as a record holds it. A plain object or an array — the bulk of state —
|
|
103
|
+
* costs one `Array.isArray` and one `getPrototypeOf`; a built-in a tag and one brand-checked read.
|
|
104
|
+
* The brand is the value's own slot, so a subclass (a `Map` subclass is a `'map'`, Node's `Buffer` a
|
|
105
|
+
* `'view'`) and a value from another realm land on their kind.
|
|
106
|
+
*
|
|
107
|
+
* Any other object is classified by WHAT ITS CLONE IS, once per prototype: a class instance comes
|
|
108
|
+
* back a plain object (`'plain'`), a fake built-in (`Object.create(Date.prototype)`, or a class whose
|
|
109
|
+
* `Symbol.toStringTag` says `'Date'`) comes back `{}` (`'plain'`), and a host object comes back as
|
|
110
|
+
* itself (`'opaque'`). A prototype whose instance the clone refuses is `'opaque'` — remembered too:
|
|
111
|
+
* it cannot be held, and its commit will refuse it.
|
|
112
|
+
*/
|
|
113
|
+
export function kindOf(value) {
|
|
114
|
+
if (Array.isArray(value))
|
|
115
|
+
return 'array';
|
|
116
|
+
const proto = Object.getPrototypeOf(value);
|
|
117
|
+
if (proto === Object.prototype || proto === null)
|
|
118
|
+
return 'plain';
|
|
119
|
+
return builtinKind(value) ?? PROBED.get(proto) ?? probe(value, proto);
|
|
120
|
+
}
|
|
121
|
+
function probe(value, proto) {
|
|
122
|
+
let kind;
|
|
123
|
+
try {
|
|
124
|
+
const clone = structuredClone(value);
|
|
125
|
+
kind = clone === null || typeof clone !== 'object' ? 'opaque' : kindOfClone(clone);
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
kind = 'opaque';
|
|
129
|
+
}
|
|
130
|
+
PROBED.set(proto, kind);
|
|
131
|
+
return kind;
|
|
132
|
+
}
|
|
133
|
+
/** The kind of a CLONE — a value of this realm, so its prototype or its brand decides it. */
|
|
134
|
+
function kindOfClone(clone) {
|
|
135
|
+
if (Array.isArray(clone))
|
|
136
|
+
return 'array';
|
|
137
|
+
const proto = Object.getPrototypeOf(clone);
|
|
138
|
+
if (proto === Object.prototype || proto === null)
|
|
139
|
+
return 'plain';
|
|
140
|
+
return builtinKind(clone) ?? 'opaque';
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWVLaW5kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY2FwdHVyZS92YWx1ZUtpbmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQXFCSDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUEyQyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUM1RixLQUFLLEVBQUUsSUFBSTtJQUNYLEtBQUssRUFBRSxJQUFJO0lBQ1gsS0FBSyxFQUFFLElBQUk7SUFDWCxJQUFJLEVBQUUsS0FBSyxFQUFFLHFDQUFxQztJQUNsRCxNQUFNLEVBQUUsS0FBSyxFQUFFLDREQUE0RDtJQUMzRSxHQUFHLEVBQUUsS0FBSyxFQUFFLHVCQUF1QjtJQUNuQyxHQUFHLEVBQUUsS0FBSyxFQUFFLHVCQUF1QjtJQUNuQyxLQUFLLEVBQUUsS0FBSyxFQUFFLDBEQUEwRDtJQUN4RSxNQUFNLEVBQUUsS0FBSyxFQUFFLHNEQUFzRDtJQUNyRSxJQUFJLEVBQUUsS0FBSyxFQUFFLDhDQUE4QztJQUMzRCxNQUFNLEVBQUUsS0FBSyxFQUFFLDBEQUEwRDtDQUMxRSxDQUFDLENBQUM7QUFFSCx3RkFBd0Y7QUFDeEYsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBRTFDOzs7OztHQUtHO0FBQ0gsTUFBTSxNQUFNO0FBQ1YsZUFBZSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBRS9CLFNBQVMsVUFBVTtJQUNqQixNQUFNLE1BQU0sR0FBRyxDQUFDLEtBQXlCLEVBQUUsR0FBVyxFQUE0QyxFQUFFO1FBQ2xHLE1BQU0sR0FBRyxHQUFHLEtBQUssSUFBSSxNQUFNLENBQUMsd0JBQXdCLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQztRQUN0RSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUN0RCxDQUFDLENBQUM7SUFDRixNQUFNLE1BQU0sR0FBRyxVQUEyRSxDQUFDO0lBQzNGLE1BQU0sT0FBTyxHQUFJLEtBQThELENBQUMsT0FBTyxDQUFDO0lBQ3hGLE1BQU0sSUFBSSxHQUF5RTtRQUNqRixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvRCxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEQsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM3Qyx3R0FBd0c7UUFDeEcsc0dBQXNHO1FBQ3RHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0RSxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFvQyxDQUFBLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RyxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDdEUsQ0FBQyxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7S0FDM0YsQ0FBQztJQUNGLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFrRSxDQUFDO0lBQ3hGLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSTtRQUFFLElBQUksS0FBSztZQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxJQUFJLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2xHLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELHdGQUF3RjtBQUN4RixTQUFTLFFBQVEsQ0FBQyxLQUFhO0lBQzdCLE9BQVEsS0FBaUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssU0FBUyxDQUFDO0FBQzlFLENBQUM7QUFFRCxrRkFBa0Y7QUFDbEYsU0FBUyxXQUFXLENBQUMsS0FBYTtJQUNoQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxNQUFNLENBQUMsQ0FBQyxrREFBa0Q7SUFDaEcsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNoRSxJQUFJLEtBQUssS0FBSyxTQUFTO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDMUMsSUFBSSxDQUFDO1FBQ0gsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQ25FLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLFNBQVMsQ0FBQyxDQUFDLGlDQUFpQztJQUNyRCxDQUFDO0FBQ0gsQ0FBQztBQUVELDJGQUEyRjtBQUMzRixNQUFNLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBcUIsQ0FBQztBQUVoRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQUMsS0FBYTtJQUNsQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDekMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxJQUFJLEtBQUssS0FBSyxNQUFNLENBQUMsU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDakUsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxLQUFhLEVBQUUsS0FBYTtJQUN6QyxJQUFJLElBQWUsQ0FBQztJQUNwQixJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBWSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUMsSUFBSSxHQUFHLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsSUFBSSxHQUFHLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDeEIsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsNkZBQTZGO0FBQzdGLFNBQVMsV0FBVyxDQUFDLEtBQWE7SUFDaEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sT0FBTyxDQUFDO0lBQ3pDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsSUFBSSxLQUFLLEtBQUssTUFBTSxDQUFDLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSTtRQUFFLE9BQU8sT0FBTyxDQUFDO0lBQ2pFLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQztBQUN4QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB2YWx1ZUtpbmRzLnRzIOKAlCB3aGF0IEtJTkQgb2YgdmFsdWUgYSByZWNvcmQgaG9sZHM6IHRoZSBvbmUgY2xhc3NpZmllci5cbiAqXG4gKiBXSFkuIENvbW1pdHRlZCBzdGF0ZSBpcyB3aGF0IHN1cnZpdmVzIGBzdHJ1Y3R1cmVkQ2xvbmVgIChhbiBlbmdpbmUgaW52YXJpYW50KSwgc28gdGhlIHZhbHVlcyBhXG4gKiByZWNvcmQgaG9sZHMgYXJlIHRoZSBraW5kcyB0aGUgY2xvbmUga2VlcHMuIFR3byBsYXdzIG5lZWQgdGhlIGtpbmQsIGFuZCBib3RoIGFzayBoZXJlOlxuICpcbiAqICAgLSB3aGF0IGNvdW50cyBhcyBhIENIQU5HRSAoYG1lbW9yeS9lcXVhbGl0eS50cyDCtyBkZWVwRXF1YWxgKTogdHdvIHZhbHVlcyBhcmUgZXF1YWwgd2hlbiBhIHJlY29yZFxuICogICAgIGhvbGRzIHRoZSBzYW1lIHRoaW5nIGZvciBib3RoLCBjb21wYXJlZCBraW5kIGJ5IGtpbmQuIFVudGlsIDkuNDQuMiBvbmx5IERhdGUsIE1hcCBhbmQgU2V0IGhhZCBhXG4gKiAgICAga2luZDsgYSBSZWdFeHAsIGFuIEVycm9yLCBhIGJveGVkIG51bWJlciwgYSBidWZmZXIsIGEgRGF0YVZpZXcgb3IgYSBCbG9iIHdhcyBjb21wYXJlZCBhcyBhblxuICogICAgIG9iamVjdCB3aXRoIG5vIG93biBrZXlzIOKAlCBlcXVhbCB0byBhbnkgb3RoZXIgb2YgaXRzIGtpbmQg4oCUIHNvIHJlcGxhY2luZyBvbmUgY29tbWl0dGVkIG5vIHJvd1xuICogICAgIGFuZCBsaXZlIHN0YXRlIGtlcHQgdGhlIG9sZCB2YWx1ZTtcbiAqICAgLSB3aGF0IGEgc2VydmVkIHJlY29yZCBtdXN0IENPUFkgKGBjYXB0dXJlL2ZyZWV6ZS50cyDCtyBmcmVlemVSZWNvcmRgIC8gYHNlcnZlUmVjb3JkYCk6XG4gKiAgICAgYE9iamVjdC5mcmVlemVgIHNlYWxzIG9ubHkgdGhlIGtpbmRzIHdob3NlIGNvbnRlbnQgaXMgdGhlaXIgb3duIHByb3BlcnRpZXMgKHtAbGluayBTRUFMQUJMRX0pLlxuICpcbiAqIEEgbGVhZjogaW1wb3J0cyBub3RoaW5nIChgY2FwdHVyZS9gIGlzIEwwLCBiZWxvdyBgbWVtb3J5L2ApLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBraW5kT2YobmV3IERhdGUoMCkpOyAgICAgICAgICAgICAgICAgICAgLy8gJ2RhdGUnXG4gKiBraW5kT2YobmV3IChjbGFzcyBQb2ludCB7IHggPSAxIH0pKCkpOyAgLy8gJ3BsYWluJyDigJQgaXRzIGNsb25lIGlzIGEgcGxhaW4gb2JqZWN0XG4gKiBraW5kT2YobmV3IEJsb2IoWydhJ10pKTsgICAgICAgICAgICAgICAgLy8gJ29wYXF1ZScg4oCUIGl0cyBjbG9uZSBrZWVwcyBjb250ZW50IHRoaXMgbGlicmFyeSBjYW5ub3QgcmVhZFxuICogU0VBTEFCTEUuZGF0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZhbHNlIOKAlCBzZXRUaW1lIHdyaXRlcyBhIHNsb3QgT2JqZWN0LmZyZWV6ZSBjYW5ub3QgcmVhY2hcbiAqIGBgYFxuICovXG5cbi8qKiBFdmVyeSBraW5kIGEgcmVjb3JkIGNhbiBob2xkLiAqL1xuZXhwb3J0IHR5cGUgVmFsdWVLaW5kID1cbiAgLyoqIEFuIG9iamVjdCB0aGUgY2xvbmUga2VlcHMgYXMgaXRzIG93biBlbnVtZXJhYmxlIGtleXMg4oCUIGEgY2xhc3MgaW5zdGFuY2UgaW5jbHVkZWQuICovXG4gIHwgJ3BsYWluJ1xuICB8ICdhcnJheSdcbiAgfCAnZGF0ZSdcbiAgfCAncmVnZXhwJ1xuICB8ICdtYXAnXG4gIHwgJ3NldCdcbiAgfCAnZXJyb3InXG4gIC8qKiBBIGJveGVkIHByaW1pdGl2ZTogYG5ldyBOdW1iZXIoMSlgLCBgbmV3IFN0cmluZygnYScpYCwgYG5ldyBCb29sZWFuKHRydWUpYCwgYE9iamVjdCgxbilgLiAqL1xuICB8ICdib3hlZCdcbiAgLyoqIEFuIGBBcnJheUJ1ZmZlcmAgKGEgYFNoYXJlZEFycmF5QnVmZmVyYCB0b286IHNoYXJlZCBtZW1vcnkgaXMgb3V0IG9mIGNvbnRyYWN0IGZvciBzdGF0ZSkuICovXG4gIHwgJ2J1ZmZlcidcbiAgLyoqIEEgdHlwZWQgYXJyYXkgb3IgYSBgRGF0YVZpZXdgLiAqL1xuICB8ICd2aWV3J1xuICAvKiogQW55IG90aGVyIG9iamVjdCB0aGUgY2xvbmUga2VlcHMgYXMgaXRzZWxmIChhIEJsb2IsIGEgRmlsZSwgYSBgRE9NRXhjZXB0aW9uYCk6IGNvbnRlbnQgdW5yZWFkIGhlcmUuICovXG4gIHwgJ29wYXF1ZSc7XG5cbi8qKlxuICogRG9lcyBgT2JqZWN0LmZyZWV6ZWAgc2VhbCBldmVyeSBwYXJ0IG9mIGEgdmFsdWUgb2YgdGhpcyBraW5kPyBUcnVlIG9ubHkgd2hlcmUgdGhlIGNvbnRlbnQgaXMgdGhlXG4gKiB2YWx1ZSdzIG93biBwcm9wZXJ0aWVzIChvciBhIHNsb3Qgbm90aGluZyBjYW4gd3JpdGUpLiBBIGBSZWNvcmRgLCBzbyBhIG5ldyBraW5kIGRvZXMgbm90IGNvbXBpbGVcbiAqIHVudGlsIGl0IGlzIGRlY2lkZWQgaGVyZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFNFQUxBQkxFOiB7IHJlYWRvbmx5IFtLIGluIFZhbHVlS2luZF06IGJvb2xlYW4gfSA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuZnJlZXplKHtcbiAgcGxhaW46IHRydWUsXG4gIGFycmF5OiB0cnVlLFxuICBib3hlZDogdHJ1ZSxcbiAgZGF0ZTogZmFsc2UsIC8vIHNldFRpbWUgJiBjby4gd3JpdGUgaXRzIHRpbWUgdmFsdWVcbiAgcmVnZXhwOiBmYWxzZSwgLy8gY29tcGlsZSgpIHJld3JpdGVzIHNvdXJjZSBhbmQgZmxhZ3MsIGV2ZW4gb24gYSBmcm96ZW4gb25lXG4gIG1hcDogZmFsc2UsIC8vIHNldCAvIGRlbGV0ZSAvIGNsZWFyXG4gIHNldDogZmFsc2UsIC8vIGFkZCAvIGRlbGV0ZSAvIGNsZWFyXG4gIGVycm9yOiBmYWxzZSwgLy8gVjgncyBvd24gYHN0YWNrYCBhY2Nlc3NvciB3cml0ZXMgdGhyb3VnaCBhIGZyb3plbiBlcnJvclxuICBidWZmZXI6IGZhbHNlLCAvLyBpdHMgYnl0ZXMsIHRocm91Z2ggYW55IHZpZXc7IHRyYW5zZmVyKCkgZGV0YWNoZXMgaXRcbiAgdmlldzogZmFsc2UsIC8vIGluZGV4IHdyaXRlcywgc2V0LCBmaWxsLCBzb3J0LCBjb3B5V2l0aGluIOKAplxuICBvcGFxdWU6IGZhbHNlLCAvLyBjb250ZW50IHRoaXMgbGlicmFyeSBjYW5ub3QgcmVhZCDigJQgbmV2ZXIgYXNzdW1lZCBzZWFsZWRcbn0pO1xuXG4vKiogV2hhdCBhIGJyYW5kIGNoZWNrIHJldHVybnMsIHdoZW4gaXQgZG9lcyBub3QgdGhyb3csIGZvciBhIHZhbHVlIHdpdGhvdXQgdGhlIHNsb3QuICovXG5jb25zdCBOT1RfQlJBTkQgPSBTeW1ib2woJ25vdCB0aGUgYnJhbmQnKTtcblxuLyoqXG4gKiBBIGJ1aWx0LWluIGtpbmQgaXMga25vd24gYnkgaXRzIEJSQU5EIOKAlCBhbiBpbnRlcm5hbCBzbG90IG9ubHkgdGhlIHJlYWwgdGhpbmcgaGFzIOKAlCBuZXZlciBieSBpdHNcbiAqIHByb3RvdHlwZTogYE9iamVjdC5jcmVhdGUoUmVnRXhwLnByb3RvdHlwZSlgIGlzIG5vdCBhIFJlZ0V4cCAoaXRzIGNsb25lIGlzIGB7fWApLCBhbmQgcmVhZGluZ1xuICogYHNvdXJjZWAgZnJvbSBpdCB0aHJvd3MuIFRoZSBjYW5kaWRhdGUgY29tZXMgZnJvbSBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AgKG9uZSBjYWxsKSwgdGhlbiBPTkVcbiAqIGJyYW5kLWNoZWNrZWQgcmVhZCBjb25maXJtcyBpdDsgYSB2YWx1ZSB0aGF0IGZhaWxzIGl0IGlzIGNsYXNzaWZpZWQgYnkgaXRzIGNsb25lIGluc3RlYWQuXG4gKi9cbmNvbnN0IEJSQU5EUzogUmVhZG9ubHlNYXA8c3RyaW5nLCB7IHJlYWRvbmx5IGtpbmQ6IFZhbHVlS2luZDsgcmVhZG9ubHkgY2hlY2s6ICh2YWx1ZTogb2JqZWN0KSA9PiB1bmtub3duIH0+ID1cbiAgLyogQF9fUFVSRV9fICovIGJyYW5kVGFibGUoKTtcblxuZnVuY3Rpb24gYnJhbmRUYWJsZSgpOiBNYXA8c3RyaW5nLCB7IGtpbmQ6IFZhbHVlS2luZDsgY2hlY2s6ICh2YWx1ZTogb2JqZWN0KSA9PiB1bmtub3duIH0+IHtcbiAgY29uc3QgZ2V0dGVyID0gKHByb3RvOiBvYmplY3QgfCB1bmRlZmluZWQsIGtleTogc3RyaW5nKTogKCh2YWx1ZTogb2JqZWN0KSA9PiB1bmtub3duKSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgZ2V0ID0gcHJvdG8gJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywga2V5KT8uZ2V0O1xuICAgIHJldHVybiBnZXQgPyAodmFsdWUpID0+IGdldC5jYWxsKHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgfTtcbiAgY29uc3QgZ2xvYmFsID0gZ2xvYmFsVGhpcyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHsgcHJvdG90eXBlPzogb2JqZWN0IH0gfCB1bmRlZmluZWQ+O1xuICBjb25zdCBpc0Vycm9yID0gKEVycm9yIGFzIHVua25vd24gYXMgeyBpc0Vycm9yPzogKHZhbHVlOiB1bmtub3duKSA9PiBib29sZWFuIH0pLmlzRXJyb3I7XG4gIGNvbnN0IHJvd3M6IEFycmF5PFtzdHJpbmcsIFZhbHVlS2luZCwgKCh2YWx1ZTogb2JqZWN0KSA9PiB1bmtub3duKSB8IHVuZGVmaW5lZF0+ID0gW1xuICAgIFsnRGF0ZScsICdkYXRlJywgKHZhbHVlKSA9PiBEYXRlLnByb3RvdHlwZS5nZXRUaW1lLmNhbGwodmFsdWUpXSxcbiAgICBbJ1JlZ0V4cCcsICdyZWdleHAnLCBnZXR0ZXIoUmVnRXhwLnByb3RvdHlwZSwgJ3NvdXJjZScpXSxcbiAgICBbJ01hcCcsICdtYXAnLCBnZXR0ZXIoTWFwLnByb3RvdHlwZSwgJ3NpemUnKV0sXG4gICAgWydTZXQnLCAnc2V0JywgZ2V0dGVyKFNldC5wcm90b3R5cGUsICdzaXplJyldLFxuICAgIC8vIEFuIGVycm9yJ3MgdGFnIGNvbWVzIGZyb20gaXRzIG93biBbW0Vycm9yRGF0YV1dIHNsb3Q6IG5vIEVycm9yIHByb3RvdHlwZSBjYXJyaWVzIGEgdG9TdHJpbmdUYWcuIFdoZXJlXG4gICAgLy8gdGhlIGJyYW5kIGNoZWNrIGBFcnJvci5pc0Vycm9yYCBpcyBtaXNzaW5nIChOb2RlIDIyKSwgYSB0YWcgYSBnZXR0ZXIgc3VwcGxpZXMgaXMgdGhlcmVmb3JlIGEgc3Bvb2YuXG4gICAgWydFcnJvcicsICdlcnJvcicsICh2YWx1ZSkgPT4gKChpc0Vycm9yID8gaXNFcnJvcih2YWx1ZSkgOiB1bnRhZ2dlZCh2YWx1ZSkpID8gdHJ1ZSA6IE5PVF9CUkFORCldLFxuICAgIFsnTnVtYmVyJywgJ2JveGVkJywgKHZhbHVlKSA9PiBOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YuY2FsbCh2YWx1ZSldLFxuICAgIFsnU3RyaW5nJywgJ2JveGVkJywgKHZhbHVlKSA9PiBTdHJpbmcucHJvdG90eXBlLnZhbHVlT2YuY2FsbCh2YWx1ZSldLFxuICAgIFsnQm9vbGVhbicsICdib3hlZCcsICh2YWx1ZSkgPT4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKHZhbHVlKV0sXG4gICAgWydCaWdJbnQnLCAnYm94ZWQnLCAodmFsdWUpID0+IChnbG9iYWwuQmlnSW50Py5wcm90b3R5cGUgYXMgeyB2YWx1ZU9mKCk6IHVua25vd24gfSkudmFsdWVPZi5jYWxsKHZhbHVlKV0sXG4gICAgWydBcnJheUJ1ZmZlcicsICdidWZmZXInLCBnZXR0ZXIoQXJyYXlCdWZmZXIucHJvdG90eXBlLCAnYnl0ZUxlbmd0aCcpXSxcbiAgICBbJ1NoYXJlZEFycmF5QnVmZmVyJywgJ2J1ZmZlcicsIGdldHRlcihnbG9iYWwuU2hhcmVkQXJyYXlCdWZmZXI/LnByb3RvdHlwZSwgJ2J5dGVMZW5ndGgnKV0sXG4gIF07XG4gIGNvbnN0IHRhYmxlID0gbmV3IE1hcDxzdHJpbmcsIHsga2luZDogVmFsdWVLaW5kOyBjaGVjazogKHZhbHVlOiBvYmplY3QpID0+IHVua25vd24gfT4oKTtcbiAgZm9yIChjb25zdCBbbmFtZSwga2luZCwgY2hlY2tdIG9mIHJvd3MpIGlmIChjaGVjaykgdGFibGUuc2V0KGBbb2JqZWN0ICR7bmFtZX1dYCwgeyBraW5kLCBjaGVjayB9KTtcbiAgcmV0dXJuIHRhYmxlO1xufVxuXG4vKiogTm8gYFN5bWJvbC50b1N0cmluZ1RhZ2Agb24gdGhlIHZhbHVlIG9yIGl0cyBwcm90b3R5cGVzOiBpdHMgdGFnIGNhbWUgZnJvbSBhIHNsb3QuICovXG5mdW5jdGlvbiB1bnRhZ2dlZCh2YWx1ZTogb2JqZWN0KTogYm9vbGVhbiB7XG4gIHJldHVybiAodmFsdWUgYXMgUmVjb3JkPHN5bWJvbCwgdW5rbm93bj4pW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09IHVuZGVmaW5lZDtcbn1cblxuLyoqIFRoZSBraW5kIG9mIGEgYnVpbHQtaW4gdmFsdWUsIGJ5IGl0cyBicmFuZCDigJQgYHVuZGVmaW5lZGAgZm9yIGFueXRoaW5nIGVsc2UuICovXG5mdW5jdGlvbiBidWlsdGluS2luZCh2YWx1ZTogb2JqZWN0KTogVmFsdWVLaW5kIHwgdW5kZWZpbmVkIHtcbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkpIHJldHVybiAndmlldyc7IC8vIGEgYnJhbmQgY2hlY2sgb2YgaXRzIG93bjogW1tWaWV3ZWRBcnJheUJ1ZmZlcl1dXG4gIGNvbnN0IGJyYW5kID0gQlJBTkRTLmdldChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpKTtcbiAgaWYgKGJyYW5kID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGJyYW5kLmNoZWNrKHZhbHVlKSA9PT0gTk9UX0JSQU5EID8gdW5kZWZpbmVkIDogYnJhbmQua2luZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gdGhlIHByb3RvdHlwZSB3aXRob3V0IHRoZSBzbG90XG4gIH1cbn1cblxuLyoqIFByb3RvdHlwZXMgY2xhc3NpZmllZCBieSBhIHByb2JlIGNsb25lIG9mIHRoZWlyIGZpcnN0IGluc3RhbmNlIChzZWUge0BsaW5rIGtpbmRPZn0pLiAqL1xuY29uc3QgUFJPQkVEID0gbmV3IFdlYWtNYXA8b2JqZWN0LCBWYWx1ZUtpbmQ+KCk7XG5cbi8qKlxuICogVGhlIGtpbmQgb2YgYW4gb2JqZWN0LCBhcyBhIHJlY29yZCBob2xkcyBpdC4gQSBwbGFpbiBvYmplY3Qgb3IgYW4gYXJyYXkg4oCUIHRoZSBidWxrIG9mIHN0YXRlIOKAlFxuICogY29zdHMgb25lIGBBcnJheS5pc0FycmF5YCBhbmQgb25lIGBnZXRQcm90b3R5cGVPZmA7IGEgYnVpbHQtaW4gYSB0YWcgYW5kIG9uZSBicmFuZC1jaGVja2VkIHJlYWQuXG4gKiBUaGUgYnJhbmQgaXMgdGhlIHZhbHVlJ3Mgb3duIHNsb3QsIHNvIGEgc3ViY2xhc3MgKGEgYE1hcGAgc3ViY2xhc3MgaXMgYSBgJ21hcCdgLCBOb2RlJ3MgYEJ1ZmZlcmAgYVxuICogYCd2aWV3J2ApIGFuZCBhIHZhbHVlIGZyb20gYW5vdGhlciByZWFsbSBsYW5kIG9uIHRoZWlyIGtpbmQuXG4gKlxuICogQW55IG90aGVyIG9iamVjdCBpcyBjbGFzc2lmaWVkIGJ5IFdIQVQgSVRTIENMT05FIElTLCBvbmNlIHBlciBwcm90b3R5cGU6IGEgY2xhc3MgaW5zdGFuY2UgY29tZXNcbiAqIGJhY2sgYSBwbGFpbiBvYmplY3QgKGAncGxhaW4nYCksIGEgZmFrZSBidWlsdC1pbiAoYE9iamVjdC5jcmVhdGUoRGF0ZS5wcm90b3R5cGUpYCwgb3IgYSBjbGFzcyB3aG9zZVxuICogYFN5bWJvbC50b1N0cmluZ1RhZ2Agc2F5cyBgJ0RhdGUnYCkgY29tZXMgYmFjayBge31gIChgJ3BsYWluJ2ApLCBhbmQgYSBob3N0IG9iamVjdCBjb21lcyBiYWNrIGFzXG4gKiBpdHNlbGYgKGAnb3BhcXVlJ2ApLiBBIHByb3RvdHlwZSB3aG9zZSBpbnN0YW5jZSB0aGUgY2xvbmUgcmVmdXNlcyBpcyBgJ29wYXF1ZSdgIOKAlCByZW1lbWJlcmVkIHRvbzpcbiAqIGl0IGNhbm5vdCBiZSBoZWxkLCBhbmQgaXRzIGNvbW1pdCB3aWxsIHJlZnVzZSBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGtpbmRPZih2YWx1ZTogb2JqZWN0KTogVmFsdWVLaW5kIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gJ2FycmF5JztcbiAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IE9iamVjdC5wcm90b3R5cGUgfHwgcHJvdG8gPT09IG51bGwpIHJldHVybiAncGxhaW4nO1xuICByZXR1cm4gYnVpbHRpbktpbmQodmFsdWUpID8/IFBST0JFRC5nZXQocHJvdG8pID8/IHByb2JlKHZhbHVlLCBwcm90byk7XG59XG5cbmZ1bmN0aW9uIHByb2JlKHZhbHVlOiBvYmplY3QsIHByb3RvOiBvYmplY3QpOiBWYWx1ZUtpbmQge1xuICBsZXQga2luZDogVmFsdWVLaW5kO1xuICB0cnkge1xuICAgIGNvbnN0IGNsb25lOiB1bmtub3duID0gc3RydWN0dXJlZENsb25lKHZhbHVlKTtcbiAgICBraW5kID0gY2xvbmUgPT09IG51bGwgfHwgdHlwZW9mIGNsb25lICE9PSAnb2JqZWN0JyA/ICdvcGFxdWUnIDoga2luZE9mQ2xvbmUoY2xvbmUpO1xuICB9IGNhdGNoIHtcbiAgICBraW5kID0gJ29wYXF1ZSc7XG4gIH1cbiAgUFJPQkVELnNldChwcm90bywga2luZCk7XG4gIHJldHVybiBraW5kO1xufVxuXG4vKiogVGhlIGtpbmQgb2YgYSBDTE9ORSDigJQgYSB2YWx1ZSBvZiB0aGlzIHJlYWxtLCBzbyBpdHMgcHJvdG90eXBlIG9yIGl0cyBicmFuZCBkZWNpZGVzIGl0LiAqL1xuZnVuY3Rpb24ga2luZE9mQ2xvbmUoY2xvbmU6IG9iamVjdCk6IFZhbHVlS2luZCB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNsb25lKSkgcmV0dXJuICdhcnJheSc7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNsb25lKTtcbiAgaWYgKHByb3RvID09PSBPYmplY3QucHJvdG90eXBlIHx8IHByb3RvID09PSBudWxsKSByZXR1cm4gJ3BsYWluJztcbiAgcmV0dXJuIGJ1aWx0aW5LaW5kKGNsb25lKSA/PyAnb3BhcXVlJztcbn1cbiJdfQ==
|
|
@@ -13,11 +13,17 @@
|
|
|
13
13
|
* (`verbs.ts · foldRows` detaches, `StageContext · retainedForm` clones) — pinned by
|
|
14
14
|
* test/lib/memory/property/record-reachability.property.test.ts.
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
16
|
+
* What `Object.freeze` cannot seal — a Date's time, a Map's or Set's entries, a buffer's bytes, a
|
|
17
|
+
* RegExp, an Error's stack — is never handed out to a reader (9.44.2): `record` remembers that a
|
|
18
|
+
* bundle holds such a value (`capture/freeze.ts · freezeRecord`), and `list()` — like the public
|
|
19
|
+
* snapshot, `runner/snapshot.ts · servedSnapshot` — serves that bundle as a copy of its open paths
|
|
20
|
+
* (`serveRecord`, mapped at its first serve): fresh frozen containers down to each such value, a
|
|
21
|
+
* fresh copy of it, every other part the log's own. A reader edits only its own copy; every later
|
|
22
|
+
* 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
|
|
23
|
+
* by index — the `'indices'` walk, which keeps the freeze inside its budget; an expando is out of
|
|
24
|
+
* contract for state) and a `SharedArrayBuffer` (every copy shares its memory). A frozen RegExp's
|
|
25
|
+
* `lastIndex` is read-only, so a `/g` or `/y` regex read from a bundle throws when `exec` or
|
|
26
|
+
* `replace` advance it.
|
|
21
27
|
*/
|
|
22
28
|
import type { EmitSourcePosition, LogAddress } from './eventPosition.js';
|
|
23
29
|
import type { CommitBundle } from './types.js';
|
|
@@ -72,8 +78,20 @@ export declare class EventLog {
|
|
|
72
78
|
* will no longer edit — its own object is the one frozen.
|
|
73
79
|
*/
|
|
74
80
|
record(bundle: CommitBundle): void;
|
|
75
|
-
/**
|
|
81
|
+
/**
|
|
82
|
+
* Every recorded commit bundle, AS SERVED (9.44.2): a new array each call; a bundle freezing sealed
|
|
83
|
+
* whole is the log's own (frozen) object, one holding a Date, Map, buffer … is a copy of its open
|
|
84
|
+
* paths (`capture/freeze.ts · serveRecord`) — the reader's own, so no edit reaches the log.
|
|
85
|
+
*/
|
|
76
86
|
list(): CommitBundle[];
|
|
87
|
+
/**
|
|
88
|
+
* @internal The bundles as the log holds them — each frozen, NOT served — in a new array, so a holder's
|
|
89
|
+
* `splice` reaches only its own. For the engine's own snapshot (`ExecutionRuntime · getSnapshot`, which
|
|
90
|
+
* a subflow mount takes once per mount), so the run serves nothing; a reader is served by `list()` and
|
|
91
|
+
* `getSnapshot().commitLog`. A known open door (CHANGELOG 9.44.2): a holder of these bundles can still
|
|
92
|
+
* edit a Date, Map or buffer inside them.
|
|
93
|
+
*/
|
|
94
|
+
recorded(): CommitBundle[];
|
|
77
95
|
/** Number of recorded commits. */
|
|
78
96
|
get length(): number;
|
|
79
97
|
/** Immutable identity of this log, absent until the engine binds it. */
|
|
@@ -13,13 +13,19 @@
|
|
|
13
13
|
* (`verbs.ts · foldRows` detaches, `StageContext · retainedForm` clones) — pinned by
|
|
14
14
|
* test/lib/memory/property/record-reachability.property.test.ts.
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
16
|
+
* What `Object.freeze` cannot seal — a Date's time, a Map's or Set's entries, a buffer's bytes, a
|
|
17
|
+
* RegExp, an Error's stack — is never handed out to a reader (9.44.2): `record` remembers that a
|
|
18
|
+
* bundle holds such a value (`capture/freeze.ts · freezeRecord`), and `list()` — like the public
|
|
19
|
+
* snapshot, `runner/snapshot.ts · servedSnapshot` — serves that bundle as a copy of its open paths
|
|
20
|
+
* (`serveRecord`, mapped at its first serve): fresh frozen containers down to each such value, a
|
|
21
|
+
* fresh copy of it, every other part the log's own. A reader edits only its own copy; every later
|
|
22
|
+
* 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
|
|
23
|
+
* by index — the `'indices'` walk, which keeps the freeze inside its budget; an expando is out of
|
|
24
|
+
* contract for state) and a `SharedArrayBuffer` (every copy shares its memory). A frozen RegExp's
|
|
25
|
+
* `lastIndex` is read-only, so a `/g` or `/y` regex read from a bundle throws when `exec` or
|
|
26
|
+
* `replace` advance it.
|
|
21
27
|
*/
|
|
22
|
-
import {
|
|
28
|
+
import { freezeRecord, serveRecord } from '../capture/freeze.js';
|
|
23
29
|
import { applySmartMergeInto } from './utils.js';
|
|
24
30
|
export class EventLog {
|
|
25
31
|
/** Base snapshot BEFORE the first stage mutates anything. */
|
|
@@ -88,12 +94,26 @@ export class EventLog {
|
|
|
88
94
|
*/
|
|
89
95
|
record(bundle) {
|
|
90
96
|
bundle.idx = this.steps.length;
|
|
91
|
-
|
|
97
|
+
freezeRecord(bundle, 'indices');
|
|
92
98
|
this.steps.push(bundle);
|
|
93
99
|
}
|
|
94
|
-
/**
|
|
100
|
+
/**
|
|
101
|
+
* Every recorded commit bundle, AS SERVED (9.44.2): a new array each call; a bundle freezing sealed
|
|
102
|
+
* whole is the log's own (frozen) object, one holding a Date, Map, buffer … is a copy of its open
|
|
103
|
+
* paths (`capture/freeze.ts · serveRecord`) — the reader's own, so no edit reaches the log.
|
|
104
|
+
*/
|
|
95
105
|
list() {
|
|
96
|
-
return this.steps;
|
|
106
|
+
return this.steps.map(serveRecord);
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* @internal The bundles as the log holds them — each frozen, NOT served — in a new array, so a holder's
|
|
110
|
+
* `splice` reaches only its own. For the engine's own snapshot (`ExecutionRuntime · getSnapshot`, which
|
|
111
|
+
* a subflow mount takes once per mount), so the run serves nothing; a reader is served by `list()` and
|
|
112
|
+
* `getSnapshot().commitLog`. A known open door (CHANGELOG 9.44.2): a holder of these bundles can still
|
|
113
|
+
* edit a Date, Map or buffer inside them.
|
|
114
|
+
*/
|
|
115
|
+
recorded() {
|
|
116
|
+
return this.steps.slice();
|
|
97
117
|
}
|
|
98
118
|
/** Number of recorded commits. */
|
|
99
119
|
get length() {
|
|
@@ -125,4 +145,4 @@ export class EventLog {
|
|
|
125
145
|
this.sourceAddressRetired = true;
|
|
126
146
|
}
|
|
127
147
|
}
|
|
128
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRMb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9FdmVudExvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWpELE1BQU0sT0FBTyxRQUFRO0lBQ25CLDZEQUE2RDtJQUNyRCxJQUFJLENBQU07SUFDbEIsc0NBQXNDO0lBQzlCLEtBQUssR0FBbUIsRUFBRSxDQUFDO0lBQzNCLGFBQWEsQ0FBYztJQUMzQixvQkFBb0IsR0FBRyxLQUFLLENBQUM7SUFFckMsWUFBWSxhQUFrQjtRQUM1Qix1RUFBdUU7UUFDdkUsc0VBQXNFO1FBQ3RFLHNFQUFzRTtRQUN0RSwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLElBQUksR0FBRyxhQUFhLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsZUFBZTtRQUNiLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bb0JHO0lBQ0gsV0FBVyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07UUFDckMsTUFBTSxHQUFHLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwRCxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsT0FBc0IsRUFBRSxTQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxNQUFvQjtRQUN6QixNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQy9CLFVBQVUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELHVGQUF1RjtJQUN2RixJQUFJO1FBQ0YsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxrQ0FBa0M7SUFDbEMsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUMzQixDQUFDO0lBRUQsd0VBQXdFO0lBQ3hFLElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsd0ZBQXdGO0lBQ3hGLFdBQVcsQ0FBQyxRQUFnQixFQUFFLFNBQTRCO1FBQ3hELElBQUksSUFBSSxDQUFDLG9CQUFvQjtZQUFFLE9BQU87UUFDdEMsSUFBSSxDQUFDLGFBQWEsS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvRixDQUFDO0lBRUQsK0ZBQStGO0lBQy9GLGVBQWUsQ0FBQyxLQUFhO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQzFDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRUQsOENBQThDO0lBQzlDLEtBQUs7UUFDSCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNoQix3RUFBd0U7UUFDeEUsc0VBQXNFO1FBQ3RFLHVFQUF1RTtRQUN2RSxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztRQUMvQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0lBQ25DLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXZlbnRMb2cg4oCUIFRpbWUtdHJhdmVsIHNuYXBzaG90IHN0b3JhZ2UgZm9yIGZsb3djaGFydCBleGVjdXRpb25cbiAqXG4gKiBMaWtlIGdpdCBoaXN0b3J5OiBzdG9yZXMgY29tbWl0IGJ1bmRsZXMgKGRpZmZzKSwgbm90IGZ1bGwgc25hcHNob3RzLlxuICpcbiAqIFRIRSBSRUNPUkQgSVMgSU1NVVRBQkxFIEZST00gYHJlY29yZGAgKEYzLCBydWxpbmcgUjMpLiBFdmVyeSBidW5kbGUgaXMgZGVlcC1mcm96ZW4gYXMgaXQgaXNcbiAqIHJlY29yZGVkIOKAlCB0aGUgYnVuZGxlLCBgb3ZlcndyaXRlYCBhbmQgYHVwZGF0ZXNgIGF0IGV2ZXJ5IGRlcHRoLCB0aGUgdHJhY2UgYW5kIGVhY2ggcm93LCB0aGVcbiAqIHJvdydzIGByZWFkS2V5c2AsIGByZWRhY3RlZFBhdGhzYCwgYHRhZ3NgLCBgdW50cmFja2VkU291cmNlc2Ag4oCUIHNvIGEgaG9sZGVyIG9mIGEgc25hcHNob3QgY2FuIG5vXG4gKiBsb25nZXIgcmV3cml0ZSB0aGUgaGlzdG9yeSBldmVyeSBsYXRlciBhbnN3ZXIgaXMgZm9sZGVkIGZyb206IGFuIGFzc2lnbm1lbnQgaW50byBhIGJ1bmRsZSB0aHJvd3NcbiAqIGEgYFR5cGVFcnJvcmAgaW4gc3RyaWN0IGNvZGUuIFNhZmUgYmVjYXVzZSBub3RoaW5nIG91dHNpZGUgdGhlIGxvZyBob2xkcyBhIGJ1bmRsZSdzIGNvbnRhaW5lcnM6XG4gKiB0aGUgbG9nJ3MgcGF5bG9hZCBpcyB0aGUgY29tbWl0J3Mgb3duIGNvcHkgKGBTdGFnZUNvbnRleHQgwrcgY29tbWl0YCBoYW5kcyBpdCB0aGUgb3V0cHV0IG9mXG4gKiBgc2NydWJQYXRjaGApLCBhbmQgbGl2ZSBzdGF0ZSwgdGhlIHJlZGFjdGVkIG1pcnJvciBhbmQgd3JpdGUgcmV0ZW50aW9uIGVhY2ggdGFrZSB0aGVpciBvd24gY29weVxuICogKGB2ZXJicy50cyDCtyBmb2xkUm93c2AgZGV0YWNoZXMsIGBTdGFnZUNvbnRleHQgwrcgcmV0YWluZWRGb3JtYCBjbG9uZXMpIOKAlCBwaW5uZWQgYnlcbiAqIHRlc3QvbGliL21lbW9yeS9wcm9wZXJ0eS9yZWNvcmQtcmVhY2hhYmlsaXR5LnByb3BlcnR5LnRlc3QudHMuXG4gKlxuICogTmFtZWQgaG9sZXMg4oCUIHdoYXQgYE9iamVjdC5mcmVlemVgIGNhbm5vdCByZWFjaCBzdGF5cyBtdXRhYmxlOiBNYXAgYW5kIFNldCBjb250ZW50cywgYSBEYXRlJ3NcbiAqIHRpbWUsIHRoZSBieXRlcyBvZiBhIHR5cGVkIGFycmF5IChza2lwcGVkOiBhIG5vbi1lbXB0eSBvbmUgY2Fubm90IGJlIGZyb3plbiksIGFuZCBhbiBvYmplY3QgaHVuZ1xuICogb24gYW4gYXJyYXkgRVhQQU5ETyAoYXJyYXlzIGFyZSB3YWxrZWQgYnkgaW5kZXgg4oCUIGBkZWVwRnJlZXplYCdzIGAnaW5kaWNlcydgIHdhbGssIHdoaWNoIGtlZXBzXG4gKiB0aGUgZnJlZXplIGluc2lkZSBpdHMgYnVkZ2V0KS4gQSBmcm96ZW4gUmVnRXhwJ3MgYGxhc3RJbmRleGAgaXMgcmVhZC1vbmx5LCBzbyBhIGAvZ2Agb3IgYC95YFxuICogcmVnZXggcmVhZCBmcm9tIGEgYnVuZGxlIHRocm93cyB3aGVuIGBleGVjYCBvciBgcmVwbGFjZWAgYWR2YW5jZSBpdC5cbiAqL1xuXG5pbXBvcnQgeyBkZWVwRnJlZXplIH0gZnJvbSAnLi4vY2FwdHVyZS9mcmVlemUuanMnO1xuaW1wb3J0IHR5cGUgeyBFbWl0U291cmNlUG9zaXRpb24sIExvZ0FkZHJlc3MgfSBmcm9tICcuL2V2ZW50UG9zaXRpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBDb21taXRCdW5kbGUsIE1lbW9yeVBhdGNoIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBhcHBseVNtYXJ0TWVyZ2VJbnRvIH0gZnJvbSAnLi91dGlscy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBFdmVudExvZyB7XG4gIC8qKiBCYXNlIHNuYXBzaG90IEJFRk9SRSB0aGUgZmlyc3Qgc3RhZ2UgbXV0YXRlcyBhbnl0aGluZy4gKi9cbiAgcHJpdmF0ZSBiYXNlOiBhbnk7XG4gIC8qKiBPcmRlcmVkIGxpc3Qgb2YgY29tbWl0IGJ1bmRsZXMuICovXG4gIHByaXZhdGUgc3RlcHM6IENvbW1pdEJ1bmRsZVtdID0gW107XG4gIHByaXZhdGUgc291cmNlQWRkcmVzcz86IExvZ0FkZHJlc3M7XG4gIHByaXZhdGUgc291cmNlQWRkcmVzc1JldGlyZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihpbml0aWFsTWVtb3J5OiBhbnkpIHtcbiAgICAvLyBOb3JtYWxpc2VkIHRvIGFuIG9iamVjdDogdGhlIGJhc2UgaXMgYSBTVEFURSwgYW5kIGV2ZXJ5IGZvbGQgb3ZlciBpdFxuICAgIC8vIChgbWF0ZXJpYWxpc2VgLCBgc3RhdGVBdGApIGFwcGxpZXMgcGF0aCB3cml0ZXMgdG8gaXQuIGB1bmRlZmluZWRgIOKAlFxuICAgIC8vIHdoYXQgYSBydW4gd2l0aCBubyBgaW5pdGlhbENvbnRleHRgIHVzZWQgdG8gc3RvcmUgaGVyZSDigJQgbWFkZSBldmVyeVxuICAgIC8vIG9uZSBvZiB0aG9zZSBmb2xkcyB0aHJvdyBvbiB0aGUgZmlyc3QgYHNldGAuXG4gICAgdGhpcy5iYXNlID0gaW5pdGlhbE1lbW9yeSA9PT0gdW5kZWZpbmVkID8ge30gOiBzdHJ1Y3R1cmVkQ2xvbmUoaW5pdGlhbE1lbW9yeSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZvbGQgQkFTRSDigJQgdGhlIHN0YXRlIGFzIGl0IHN0b29kIGJlZm9yZSB0aGUgZmlyc3QgY29tbWl0LlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBvdGhlciBoYWxmIG9mIHRoZSBjb21taXQgbG9nOiBidW5kbGVzIGFyZSBESUZGUywgc28gYSBsb2dcbiAgICogYWxvbmUgY2Fubm90IHJlY29uc3RydWN0IHN0YXRlIHRoYXQgd2FzIHNlZWRlZCBiZWZvcmUgdGhlIHJ1biAoYW5cbiAgICogZXhlY3V0b3IgYGluaXRpYWxDb250ZXh0YCwgYGRlZmF1bHRWYWx1ZXNGb3JDb250ZXh0YCwgYSByZXN1bWUnc1xuICAgKiBgY2hlY2twb2ludC5zaGFyZWRTdGF0ZWAsIGEgc3ViZmxvdydzIGBpbnB1dE1hcHBlcmAgc2VlZCkuIFRyYXZlbGxpbmdcbiAgICogd2l0aCB0aGUgbG9nIOKAlCBgUnVudGltZVNuYXBzaG90LmluaXRpYWxTdGF0ZWAg4oCUIGlzIHdoYXQgbGV0cyBhbiBPRkZMSU5FXG4gICAqIGNvbnN1bWVyIGZvbGQ7IHdpdGhvdXQgaXQgdGhlIGhvbmVzdCBhbnN3ZXIgaXMgYSBwYXJ0aWFsIG9uZVxuICAgKiAoYHN0YXRlQXRgJ3MgYGJhc2lzOiAnbG9nLW9ubHknYCkuXG4gICAqXG4gICAqIFJldHVybnMgYSBmcmVzaCBkZXRhY2hlZCBjbG9uZSBvbiBldmVyeSBjYWxsIOKAlCB0aGUgY2FsbGVyIG93bnMgaXQuXG4gICAqL1xuICBnZXRJbml0aWFsU3RhdGUoKTogYW55IHtcbiAgICByZXR1cm4gc3RydWN0dXJlZENsb25lKHRoaXMuYmFzZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb25zdHJ1Y3RzIHRoZSBmdWxsIHN0YXRlIGF0IGFueSBnaXZlbiBzdGVwLlxuICAgKiBSZXBsYXlzIGNvbW1pdHMgZnJvbSB0aGUgYmVnaW5uaW5nIOKAlCBPKG4pIGJ1dCBsb3cgbWVtb3J5IGZvb3RwcmludC5cbiAgICpcbiAgICogSU5ERVggQ09OVkVOVElPTiDigJQgYHN0ZXBJZHhgIGlzIEVYQ0xVU0lWRTogYG1hdGVyaWFsaXNlKDMpYCBmb2xkcyBjb21taXRzXG4gICAqIDAsIDEgYW5kIDIuIGBzdGF0ZUF0KHNvdXJjZSwgY29tbWl0SWR4KWAgKGZvb3RwcmludGpzL3RyYWNlKSBmb2xkcyB0aGVcbiAgICogc2FtZSBsb2cgYnV0IGl0cyBgY29tbWl0SWR4YCBpcyBJTkNMVVNJVkUsIGJlY2F1c2UgYSByZWFkZXIncyBjdXJzb3IgYXNrc1xuICAgKiBcInRoZSBzdGF0ZSBBVCB0aGlzIHN0b3BcIiwgd2hpY2ggbXVzdCBpbmNsdWRlIHRoYXQgc3RvcCdzIG93biBjb21taXQuIFR3b1xuICAgKiBmb2xkcyBvdmVyIG9uZSBsb2cgd2l0aCBvcHBvc2l0ZSBjb252ZW50aW9uczogY2hlY2sgd2hpY2ggb25lIHlvdSBob2xkLlxuICAgKlxuICAgKiBPbmUgY2xvbmUgb2YgdGhlIGJhc2UgcGVyIGNhbGwsIHRoZW4gZXZlcnkgYnVuZGxlIHJlcGxheWVkIElOVE8gdGhhdFxuICAgKiBwcml2YXRlIGNvcHkgKGBhcHBseVNtYXJ0TWVyZ2VJbnRvYCDigJQgdGhlIGxpdmUgY29tbWl0J3MgY29weS1vbi13cml0ZSBsYXdcbiAgICogYmVsb3cgdGhlIHJvb3QsIDkuMjkuMCwgc28gdGhlIGZvbGQgYW5kIHRoZSBsaXZlIHN0YXRlIGFncmVlIGF0IGV2ZXJ5XG4gICAqIHBhdGgpLiBUaGUgcmVzdWx0IGlzIHRoZSBjYWxsZXInczogaXQgc2hhcmVzIG5vdGhpbmcgd2l0aCB0aGUgYmFzZSBvclxuICAgKiB0aGUgbG9nLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBTaW5jZSA5LjMzLjAg4oCUIHVzZSBgc3RhdGVBdGAgZnJvbSBgZm9vdHByaW50anMvdHJhY2VgLCB3aGljaCBmb2xkcyB0aGUgc2FtZSBsb2dcbiAgICogZnJvbSB0aGUgc2FtZSBiYXNlIChgUnVudGltZVNuYXBzaG90LmluaXRpYWxTdGF0ZWApIGFuZCBzYXlzIGhvdyBpdCB3YXMgZGVyaXZlZCAoYGJhc2lzYCkuXG4gICAqIE5vdGhpbmcgaW4gdGhlIGxpYnJhcnkgY2FsbHMgdGhpczsgaXQgc3RheXMgZm9yIG9uZSBtaW5vciBhbmQgaXMgdGhlbiByZW1vdmVkLiBNaW5kIHRoZVxuICAgKiBpbmRleDogYG1hdGVyaWFsaXNlKG4pYCBmb2xkcyBjb21taXRzIGAwLi5uLTFgLCBgc3RhdGVBdChzb3VyY2UsIG4gLSAxKWAgdGhlIHNhbWUgY29tbWl0cy5cbiAgICovXG4gIG1hdGVyaWFsaXNlKHN0ZXBJZHggPSB0aGlzLnN0ZXBzLmxlbmd0aCk6IGFueSB7XG4gICAgY29uc3Qgb3V0ID0gc3RydWN0dXJlZENsb25lKHRoaXMuYmFzZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGVwSWR4OyBpKyspIHtcbiAgICAgIGNvbnN0IHsgb3ZlcndyaXRlLCB1cGRhdGVzLCB0cmFjZSB9ID0gdGhpcy5zdGVwc1tpXTtcbiAgICAgIGFwcGx5U21hcnRNZXJnZUludG8ob3V0LCB1cGRhdGVzIGFzIE1lbW9yeVBhdGNoLCBvdmVyd3JpdGUgYXMgTWVtb3J5UGF0Y2gsIHRyYWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJzaXN0cyBhIGNvbW1pdCBidW5kbGUgZm9yIGEgZmluaXNoZWQgc3RhZ2UsIGFuZCBGUkVFWkVTIGl0IChzZWUgdGhlIG1vZHVsZSBkb2MpOiB0aGUgYnVuZGxlXG4gICAqIGlzIHN0YW1wZWQgd2l0aCBpdHMgcG9zaXRpb24sIHRoZW4gZGVlcC1mcm96ZW4sIHRoZW4gYXBwZW5kZWQuIFRoZSBlbmdpbmUgaGFuZHMgaXQgYSBidW5kbGVcbiAgICogYnVpbHQgZm9yIHRoZSBsb2cgYWxvbmU7IGEgY2FsbGVyIG9mIHRoaXMgY2xhc3MgKGBmb290cHJpbnRqcy9hZHZhbmNlZGApIGhhbmRzIG92ZXIgYSBidW5kbGUgaXRcbiAgICogd2lsbCBubyBsb25nZXIgZWRpdCDigJQgaXRzIG93biBvYmplY3QgaXMgdGhlIG9uZSBmcm96ZW4uXG4gICAqL1xuICByZWNvcmQoYnVuZGxlOiBDb21taXRCdW5kbGUpOiB2b2lkIHtcbiAgICBidW5kbGUuaWR4ID0gdGhpcy5zdGVwcy5sZW5ndGg7XG4gICAgZGVlcEZyZWV6ZShidW5kbGUsICdpbmRpY2VzJyk7XG4gICAgdGhpcy5zdGVwcy5wdXNoKGJ1bmRsZSk7XG4gIH1cblxuICAvKiogR2V0cyBhbGwgcmVjb3JkZWQgY29tbWl0IGJ1bmRsZXMg4oCUIHRoZSBsaXZlIGFycmF5OyBldmVyeSBidW5kbGUgaW4gaXQgaXMgZnJvemVuLiAqL1xuICBsaXN0KCk6IENvbW1pdEJ1bmRsZVtdIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwcztcbiAgfVxuXG4gIC8qKiBOdW1iZXIgb2YgcmVjb3JkZWQgY29tbWl0cy4gKi9cbiAgZ2V0IGxlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnN0ZXBzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKiBJbW11dGFibGUgaWRlbnRpdHkgb2YgdGhpcyBsb2csIGFic2VudCB1bnRpbCB0aGUgZW5naW5lIGJpbmRzIGl0LiAqL1xuICBnZXQgYWRkcmVzcygpOiBMb2dBZGRyZXNzIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2VBZGRyZXNzO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCBCaW5kIG9uY2U7IHJlc3VtaW5nIHRoZSBzYW1lIGxvZyBtdXN0IG5vdCByZW5hbWUgaXRzIGVhcmxpZXIgcG9zaXRpb25zLiAqL1xuICBiaW5kQWRkcmVzcyhsb2dSdW5JZDogc3RyaW5nLCBkcmlsbFBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc291cmNlQWRkcmVzc1JldGlyZWQpIHJldHVybjtcbiAgICB0aGlzLnNvdXJjZUFkZHJlc3MgPz89IE9iamVjdC5mcmVlemUoeyBsb2dSdW5JZCwgZHJpbGxQYXRoOiBPYmplY3QuZnJlZXplKFsuLi5kcmlsbFBhdGhdKSB9KTtcbiAgfVxuXG4gIC8qKiBPKDEpIHNvdXJjZS10aW1lIGNhcHR1cmUuIE5vIGNvdW50ZXIsIG9ic2VydmVyIGJvb2trZWVwaW5nLCBvciBmdXR1cmUgY29tbWl0IHByZWRpY3Rpb24uICovXG4gIGNhcHR1cmVQb3NpdGlvbihydW5JZDogc3RyaW5nKTogRW1pdFNvdXJjZVBvc2l0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuc291cmNlQWRkcmVzcykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7IHJ1bklkLCAuLi50aGlzLnNvdXJjZUFkZHJlc3MsIGNvbW1pdHRlZFRocm91Z2hJZHg6IHRoaXMuc3RlcHMubGVuZ3RoIC0gMSB9KTtcbiAgfVxuXG4gIC8qKiBXaXBlcyBoaXN0b3J5ICh1c2VmdWwgZm9yIHRlc3QgcmVzZXRzKS4gKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5zdGVwcyA9IFtdO1xuICAgIC8vIEEgcmVzZXQgcHJlZml4IGNhbm5vdCByZXVzZSBvbGQgY29vcmRpbmF0ZXMsIGV2ZW4gaWYgYW5vdGhlciBzdGFnZSBvZlxuICAgIC8vIHRoZSBTQU1FIGxlZyBiaW5kcyBpdCBhZ2Fpbi4gS2VlcCBjbGVhcidzIGRhdGEgYmVoYXZpb3IsIGJ1dCByZXRpcmVcbiAgICAvLyBhZGRyZXNzaW5nIGZvciB0aGlzIGxvZzsga25vd24gY29vcmRpbmF0ZXMgcmVxdWlyZSBhIGZyZXNoIEV2ZW50TG9nLlxuICAgIHRoaXMuc291cmNlQWRkcmVzcyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNvdXJjZUFkZHJlc3NSZXRpcmVkID0gdHJ1ZTtcbiAgfVxufVxuIl19
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRMb2cuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9FdmVudExvZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVqRCxNQUFNLE9BQU8sUUFBUTtJQUNuQiw2REFBNkQ7SUFDckQsSUFBSSxDQUFNO0lBQ2xCLHNDQUFzQztJQUM5QixLQUFLLEdBQW1CLEVBQUUsQ0FBQztJQUMzQixhQUFhLENBQWM7SUFDM0Isb0JBQW9CLEdBQUcsS0FBSyxDQUFDO0lBRXJDLFlBQVksYUFBa0I7UUFDNUIsdUVBQXVFO1FBQ3ZFLHNFQUFzRTtRQUN0RSxzRUFBc0U7UUFDdEUsK0NBQStDO1FBQy9DLElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILGVBQWU7UUFDYixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW9CRztJQUNILFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1FBQ3JDLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEQsbUJBQW1CLENBQUMsR0FBRyxFQUFFLE9BQXNCLEVBQUUsU0FBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRixDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsTUFBb0I7UUFDekIsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUMvQixZQUFZLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSTtRQUNGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGtDQUFrQztJQUNsQyxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzNCLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCx3RkFBd0Y7SUFDeEYsV0FBVyxDQUFDLFFBQWdCLEVBQUUsU0FBNEI7UUFDeEQsSUFBSSxJQUFJLENBQUMsb0JBQW9CO1lBQUUsT0FBTztRQUN0QyxJQUFJLENBQUMsYUFBYSxLQUFLLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCwrRkFBK0Y7SUFDL0YsZUFBZSxDQUFDLEtBQWE7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDMUMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFRCw4Q0FBOEM7SUFDOUMsS0FBSztRQUNILElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLHdFQUF3RTtRQUN4RSxzRUFBc0U7UUFDdEUsdUVBQXVFO1FBQ3ZFLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1FBQy9CLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7SUFDbkMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFdmVudExvZyDigJQgVGltZS10cmF2ZWwgc25hcHNob3Qgc3RvcmFnZSBmb3IgZmxvd2NoYXJ0IGV4ZWN1dGlvblxuICpcbiAqIExpa2UgZ2l0IGhpc3Rvcnk6IHN0b3JlcyBjb21taXQgYnVuZGxlcyAoZGlmZnMpLCBub3QgZnVsbCBzbmFwc2hvdHMuXG4gKlxuICogVEhFIFJFQ09SRCBJUyBJTU1VVEFCTEUgRlJPTSBgcmVjb3JkYCAoRjMsIHJ1bGluZyBSMykuIEV2ZXJ5IGJ1bmRsZSBpcyBkZWVwLWZyb3plbiBhcyBpdCBpc1xuICogcmVjb3JkZWQg4oCUIHRoZSBidW5kbGUsIGBvdmVyd3JpdGVgIGFuZCBgdXBkYXRlc2AgYXQgZXZlcnkgZGVwdGgsIHRoZSB0cmFjZSBhbmQgZWFjaCByb3csIHRoZVxuICogcm93J3MgYHJlYWRLZXlzYCwgYHJlZGFjdGVkUGF0aHNgLCBgdGFnc2AsIGB1bnRyYWNrZWRTb3VyY2VzYCDigJQgc28gYSBob2xkZXIgb2YgYSBzbmFwc2hvdCBjYW4gbm9cbiAqIGxvbmdlciByZXdyaXRlIHRoZSBoaXN0b3J5IGV2ZXJ5IGxhdGVyIGFuc3dlciBpcyBmb2xkZWQgZnJvbTogYW4gYXNzaWdubWVudCBpbnRvIGEgYnVuZGxlIHRocm93c1xuICogYSBgVHlwZUVycm9yYCBpbiBzdHJpY3QgY29kZS4gU2FmZSBiZWNhdXNlIG5vdGhpbmcgb3V0c2lkZSB0aGUgbG9nIGhvbGRzIGEgYnVuZGxlJ3MgY29udGFpbmVyczpcbiAqIHRoZSBsb2cncyBwYXlsb2FkIGlzIHRoZSBjb21taXQncyBvd24gY29weSAoYFN0YWdlQ29udGV4dCDCtyBjb21taXRgIGhhbmRzIGl0IHRoZSBvdXRwdXQgb2ZcbiAqIGBzY3J1YlBhdGNoYCksIGFuZCBsaXZlIHN0YXRlLCB0aGUgcmVkYWN0ZWQgbWlycm9yIGFuZCB3cml0ZSByZXRlbnRpb24gZWFjaCB0YWtlIHRoZWlyIG93biBjb3B5XG4gKiAoYHZlcmJzLnRzIMK3IGZvbGRSb3dzYCBkZXRhY2hlcywgYFN0YWdlQ29udGV4dCDCtyByZXRhaW5lZEZvcm1gIGNsb25lcykg4oCUIHBpbm5lZCBieVxuICogdGVzdC9saWIvbWVtb3J5L3Byb3BlcnR5L3JlY29yZC1yZWFjaGFiaWxpdHkucHJvcGVydHkudGVzdC50cy5cbiAqXG4gKiBXaGF0IGBPYmplY3QuZnJlZXplYCBjYW5ub3Qgc2VhbCDigJQgYSBEYXRlJ3MgdGltZSwgYSBNYXAncyBvciBTZXQncyBlbnRyaWVzLCBhIGJ1ZmZlcidzIGJ5dGVzLCBhXG4gKiBSZWdFeHAsIGFuIEVycm9yJ3Mgc3RhY2sg4oCUIGlzIG5ldmVyIGhhbmRlZCBvdXQgdG8gYSByZWFkZXIgKDkuNDQuMik6IGByZWNvcmRgIHJlbWVtYmVycyB0aGF0IGFcbiAqIGJ1bmRsZSBob2xkcyBzdWNoIGEgdmFsdWUgKGBjYXB0dXJlL2ZyZWV6ZS50cyDCtyBmcmVlemVSZWNvcmRgKSwgYW5kIGBsaXN0KClgIOKAlCBsaWtlIHRoZSBwdWJsaWNcbiAqIHNuYXBzaG90LCBgcnVubmVyL3NuYXBzaG90LnRzIMK3IHNlcnZlZFNuYXBzaG90YCDigJQgc2VydmVzIHRoYXQgYnVuZGxlIGFzIGEgY29weSBvZiBpdHMgb3BlbiBwYXRoc1xuICogKGBzZXJ2ZVJlY29yZGAsIG1hcHBlZCBhdCBpdHMgZmlyc3Qgc2VydmUpOiBmcmVzaCBmcm96ZW4gY29udGFpbmVycyBkb3duIHRvIGVhY2ggc3VjaCB2YWx1ZSwgYVxuICogZnJlc2ggY29weSBvZiBpdCwgZXZlcnkgb3RoZXIgcGFydCB0aGUgbG9nJ3Mgb3duLiBBIHJlYWRlciBlZGl0cyBvbmx5IGl0cyBvd24gY29weTsgZXZlcnkgbGF0ZXJcbiAqIHNlcnZlIHJlYWRzIHRoZSByZWNvcmQgYXMgcmVjb3JkZWQuIGByZWNvcmRlZCgpYCBpcyB0aGUgZW5naW5lJ3Mgb3duLCB1bnNlcnZlZCByZWFkLiBOYW1lZCBob2xlczogYW4gb2JqZWN0IGh1bmcgb24gYW4gYXJyYXkgRVhQQU5ETyAoYXJyYXlzIGFyZSB3YWxrZWRcbiAqIGJ5IGluZGV4IOKAlCB0aGUgYCdpbmRpY2VzJ2Agd2Fsaywgd2hpY2gga2VlcHMgdGhlIGZyZWV6ZSBpbnNpZGUgaXRzIGJ1ZGdldDsgYW4gZXhwYW5kbyBpcyBvdXQgb2ZcbiAqIGNvbnRyYWN0IGZvciBzdGF0ZSkgYW5kIGEgYFNoYXJlZEFycmF5QnVmZmVyYCAoZXZlcnkgY29weSBzaGFyZXMgaXRzIG1lbW9yeSkuIEEgZnJvemVuIFJlZ0V4cCdzXG4gKiBgbGFzdEluZGV4YCBpcyByZWFkLW9ubHksIHNvIGEgYC9nYCBvciBgL3lgIHJlZ2V4IHJlYWQgZnJvbSBhIGJ1bmRsZSB0aHJvd3Mgd2hlbiBgZXhlY2Agb3JcbiAqIGByZXBsYWNlYCBhZHZhbmNlIGl0LlxuICovXG5cbmltcG9ydCB7IGZyZWV6ZVJlY29yZCwgc2VydmVSZWNvcmQgfSBmcm9tICcuLi9jYXB0dXJlL2ZyZWV6ZS5qcyc7XG5pbXBvcnQgdHlwZSB7IEVtaXRTb3VyY2VQb3NpdGlvbiwgTG9nQWRkcmVzcyB9IGZyb20gJy4vZXZlbnRQb3NpdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSwgTWVtb3J5UGF0Y2ggfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGFwcGx5U21hcnRNZXJnZUludG8gfSBmcm9tICcuL3V0aWxzLmpzJztcblxuZXhwb3J0IGNsYXNzIEV2ZW50TG9nIHtcbiAgLyoqIEJhc2Ugc25hcHNob3QgQkVGT1JFIHRoZSBmaXJzdCBzdGFnZSBtdXRhdGVzIGFueXRoaW5nLiAqL1xuICBwcml2YXRlIGJhc2U6IGFueTtcbiAgLyoqIE9yZGVyZWQgbGlzdCBvZiBjb21taXQgYnVuZGxlcy4gKi9cbiAgcHJpdmF0ZSBzdGVwczogQ29tbWl0QnVuZGxlW10gPSBbXTtcbiAgcHJpdmF0ZSBzb3VyY2VBZGRyZXNzPzogTG9nQWRkcmVzcztcbiAgcHJpdmF0ZSBzb3VyY2VBZGRyZXNzUmV0aXJlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKGluaXRpYWxNZW1vcnk6IGFueSkge1xuICAgIC8vIE5vcm1hbGlzZWQgdG8gYW4gb2JqZWN0OiB0aGUgYmFzZSBpcyBhIFNUQVRFLCBhbmQgZXZlcnkgZm9sZCBvdmVyIGl0XG4gICAgLy8gKGBtYXRlcmlhbGlzZWAsIGBzdGF0ZUF0YCkgYXBwbGllcyBwYXRoIHdyaXRlcyB0byBpdC4gYHVuZGVmaW5lZGAg4oCUXG4gICAgLy8gd2hhdCBhIHJ1biB3aXRoIG5vIGBpbml0aWFsQ29udGV4dGAgdXNlZCB0byBzdG9yZSBoZXJlIOKAlCBtYWRlIGV2ZXJ5XG4gICAgLy8gb25lIG9mIHRob3NlIGZvbGRzIHRocm93IG9uIHRoZSBmaXJzdCBgc2V0YC5cbiAgICB0aGlzLmJhc2UgPSBpbml0aWFsTWVtb3J5ID09PSB1bmRlZmluZWQgPyB7fSA6IHN0cnVjdHVyZWRDbG9uZShpbml0aWFsTWVtb3J5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZm9sZCBCQVNFIOKAlCB0aGUgc3RhdGUgYXMgaXQgc3Rvb2QgYmVmb3JlIHRoZSBmaXJzdCBjb21taXQuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIG90aGVyIGhhbGYgb2YgdGhlIGNvbW1pdCBsb2c6IGJ1bmRsZXMgYXJlIERJRkZTLCBzbyBhIGxvZ1xuICAgKiBhbG9uZSBjYW5ub3QgcmVjb25zdHJ1Y3Qgc3RhdGUgdGhhdCB3YXMgc2VlZGVkIGJlZm9yZSB0aGUgcnVuIChhblxuICAgKiBleGVjdXRvciBgaW5pdGlhbENvbnRleHRgLCBgZGVmYXVsdFZhbHVlc0ZvckNvbnRleHRgLCBhIHJlc3VtZSdzXG4gICAqIGBjaGVja3BvaW50LnNoYXJlZFN0YXRlYCwgYSBzdWJmbG93J3MgYGlucHV0TWFwcGVyYCBzZWVkKS4gVHJhdmVsbGluZ1xuICAgKiB3aXRoIHRoZSBsb2cg4oCUIGBSdW50aW1lU25hcHNob3QuaW5pdGlhbFN0YXRlYCDigJQgaXMgd2hhdCBsZXRzIGFuIE9GRkxJTkVcbiAgICogY29uc3VtZXIgZm9sZDsgd2l0aG91dCBpdCB0aGUgaG9uZXN0IGFuc3dlciBpcyBhIHBhcnRpYWwgb25lXG4gICAqIChgc3RhdGVBdGAncyBgYmFzaXM6ICdsb2ctb25seSdgKS5cbiAgICpcbiAgICogUmV0dXJucyBhIGZyZXNoIGRldGFjaGVkIGNsb25lIG9uIGV2ZXJ5IGNhbGwg4oCUIHRoZSBjYWxsZXIgb3ducyBpdC5cbiAgICovXG4gIGdldEluaXRpYWxTdGF0ZSgpOiBhbnkge1xuICAgIHJldHVybiBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5iYXNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvbnN0cnVjdHMgdGhlIGZ1bGwgc3RhdGUgYXQgYW55IGdpdmVuIHN0ZXAuXG4gICAqIFJlcGxheXMgY29tbWl0cyBmcm9tIHRoZSBiZWdpbm5pbmcg4oCUIE8obikgYnV0IGxvdyBtZW1vcnkgZm9vdHByaW50LlxuICAgKlxuICAgKiBJTkRFWCBDT05WRU5USU9OIOKAlCBgc3RlcElkeGAgaXMgRVhDTFVTSVZFOiBgbWF0ZXJpYWxpc2UoMylgIGZvbGRzIGNvbW1pdHNcbiAgICogMCwgMSBhbmQgMi4gYHN0YXRlQXQoc291cmNlLCBjb21taXRJZHgpYCAoZm9vdHByaW50anMvdHJhY2UpIGZvbGRzIHRoZVxuICAgKiBzYW1lIGxvZyBidXQgaXRzIGBjb21taXRJZHhgIGlzIElOQ0xVU0lWRSwgYmVjYXVzZSBhIHJlYWRlcidzIGN1cnNvciBhc2tzXG4gICAqIFwidGhlIHN0YXRlIEFUIHRoaXMgc3RvcFwiLCB3aGljaCBtdXN0IGluY2x1ZGUgdGhhdCBzdG9wJ3Mgb3duIGNvbW1pdC4gVHdvXG4gICAqIGZvbGRzIG92ZXIgb25lIGxvZyB3aXRoIG9wcG9zaXRlIGNvbnZlbnRpb25zOiBjaGVjayB3aGljaCBvbmUgeW91IGhvbGQuXG4gICAqXG4gICAqIE9uZSBjbG9uZSBvZiB0aGUgYmFzZSBwZXIgY2FsbCwgdGhlbiBldmVyeSBidW5kbGUgcmVwbGF5ZWQgSU5UTyB0aGF0XG4gICAqIHByaXZhdGUgY29weSAoYGFwcGx5U21hcnRNZXJnZUludG9gIOKAlCB0aGUgbGl2ZSBjb21taXQncyBjb3B5LW9uLXdyaXRlIGxhd1xuICAgKiBiZWxvdyB0aGUgcm9vdCwgOS4yOS4wLCBzbyB0aGUgZm9sZCBhbmQgdGhlIGxpdmUgc3RhdGUgYWdyZWUgYXQgZXZlcnlcbiAgICogcGF0aCkuIFRoZSByZXN1bHQgaXMgdGhlIGNhbGxlcidzOiBpdCBzaGFyZXMgbm90aGluZyB3aXRoIHRoZSBiYXNlIG9yXG4gICAqIHRoZSBsb2cuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFNpbmNlIDkuMzMuMCDigJQgdXNlIGBzdGF0ZUF0YCBmcm9tIGBmb290cHJpbnRqcy90cmFjZWAsIHdoaWNoIGZvbGRzIHRoZSBzYW1lIGxvZ1xuICAgKiBmcm9tIHRoZSBzYW1lIGJhc2UgKGBSdW50aW1lU25hcHNob3QuaW5pdGlhbFN0YXRlYCkgYW5kIHNheXMgaG93IGl0IHdhcyBkZXJpdmVkIChgYmFzaXNgKS5cbiAgICogTm90aGluZyBpbiB0aGUgbGlicmFyeSBjYWxscyB0aGlzOyBpdCBzdGF5cyBmb3Igb25lIG1pbm9yIGFuZCBpcyB0aGVuIHJlbW92ZWQuIE1pbmQgdGhlXG4gICAqIGluZGV4OiBgbWF0ZXJpYWxpc2UobilgIGZvbGRzIGNvbW1pdHMgYDAuLm4tMWAsIGBzdGF0ZUF0KHNvdXJjZSwgbiAtIDEpYCB0aGUgc2FtZSBjb21taXRzLlxuICAgKi9cbiAgbWF0ZXJpYWxpc2Uoc3RlcElkeCA9IHRoaXMuc3RlcHMubGVuZ3RoKTogYW55IHtcbiAgICBjb25zdCBvdXQgPSBzdHJ1Y3R1cmVkQ2xvbmUodGhpcy5iYXNlKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ZXBJZHg7IGkrKykge1xuICAgICAgY29uc3QgeyBvdmVyd3JpdGUsIHVwZGF0ZXMsIHRyYWNlIH0gPSB0aGlzLnN0ZXBzW2ldO1xuICAgICAgYXBwbHlTbWFydE1lcmdlSW50byhvdXQsIHVwZGF0ZXMgYXMgTWVtb3J5UGF0Y2gsIG92ZXJ3cml0ZSBhcyBNZW1vcnlQYXRjaCwgdHJhY2UpO1xuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcnNpc3RzIGEgY29tbWl0IGJ1bmRsZSBmb3IgYSBmaW5pc2hlZCBzdGFnZSwgYW5kIEZSRUVaRVMgaXQgKHNlZSB0aGUgbW9kdWxlIGRvYyk6IHRoZSBidW5kbGVcbiAgICogaXMgc3RhbXBlZCB3aXRoIGl0cyBwb3NpdGlvbiwgdGhlbiBkZWVwLWZyb3plbiwgdGhlbiBhcHBlbmRlZC4gVGhlIGVuZ2luZSBoYW5kcyBpdCBhIGJ1bmRsZVxuICAgKiBidWlsdCBmb3IgdGhlIGxvZyBhbG9uZTsgYSBjYWxsZXIgb2YgdGhpcyBjbGFzcyAoYGZvb3RwcmludGpzL2FkdmFuY2VkYCkgaGFuZHMgb3ZlciBhIGJ1bmRsZSBpdFxuICAgKiB3aWxsIG5vIGxvbmdlciBlZGl0IOKAlCBpdHMgb3duIG9iamVjdCBpcyB0aGUgb25lIGZyb3plbi5cbiAgICovXG4gIHJlY29yZChidW5kbGU6IENvbW1pdEJ1bmRsZSk6IHZvaWQge1xuICAgIGJ1bmRsZS5pZHggPSB0aGlzLnN0ZXBzLmxlbmd0aDtcbiAgICBmcmVlemVSZWNvcmQoYnVuZGxlLCAnaW5kaWNlcycpO1xuICAgIHRoaXMuc3RlcHMucHVzaChidW5kbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2ZXJ5IHJlY29yZGVkIGNvbW1pdCBidW5kbGUsIEFTIFNFUlZFRCAoOS40NC4yKTogYSBuZXcgYXJyYXkgZWFjaCBjYWxsOyBhIGJ1bmRsZSBmcmVlemluZyBzZWFsZWRcbiAgICogd2hvbGUgaXMgdGhlIGxvZydzIG93biAoZnJvemVuKSBvYmplY3QsIG9uZSBob2xkaW5nIGEgRGF0ZSwgTWFwLCBidWZmZXIg4oCmIGlzIGEgY29weSBvZiBpdHMgb3BlblxuICAgKiBwYXRocyAoYGNhcHR1cmUvZnJlZXplLnRzIMK3IHNlcnZlUmVjb3JkYCkg4oCUIHRoZSByZWFkZXIncyBvd24sIHNvIG5vIGVkaXQgcmVhY2hlcyB0aGUgbG9nLlxuICAgKi9cbiAgbGlzdCgpOiBDb21taXRCdW5kbGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHMubWFwKHNlcnZlUmVjb3JkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgVGhlIGJ1bmRsZXMgYXMgdGhlIGxvZyBob2xkcyB0aGVtIOKAlCBlYWNoIGZyb3plbiwgTk9UIHNlcnZlZCDigJQgaW4gYSBuZXcgYXJyYXksIHNvIGEgaG9sZGVyJ3NcbiAgICogYHNwbGljZWAgcmVhY2hlcyBvbmx5IGl0cyBvd24uIEZvciB0aGUgZW5naW5lJ3Mgb3duIHNuYXBzaG90IChgRXhlY3V0aW9uUnVudGltZSDCtyBnZXRTbmFwc2hvdGAsIHdoaWNoXG4gICAqIGEgc3ViZmxvdyBtb3VudCB0YWtlcyBvbmNlIHBlciBtb3VudCksIHNvIHRoZSBydW4gc2VydmVzIG5vdGhpbmc7IGEgcmVhZGVyIGlzIHNlcnZlZCBieSBgbGlzdCgpYCBhbmRcbiAgICogYGdldFNuYXBzaG90KCkuY29tbWl0TG9nYC4gQSBrbm93biBvcGVuIGRvb3IgKENIQU5HRUxPRyA5LjQ0LjIpOiBhIGhvbGRlciBvZiB0aGVzZSBidW5kbGVzIGNhbiBzdGlsbFxuICAgKiBlZGl0IGEgRGF0ZSwgTWFwIG9yIGJ1ZmZlciBpbnNpZGUgdGhlbS5cbiAgICovXG4gIHJlY29yZGVkKCk6IENvbW1pdEJ1bmRsZVtdIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwcy5zbGljZSgpO1xuICB9XG5cbiAgLyoqIE51bWJlciBvZiByZWNvcmRlZCBjb21taXRzLiAqL1xuICBnZXQgbGVuZ3RoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHMubGVuZ3RoO1xuICB9XG5cbiAgLyoqIEltbXV0YWJsZSBpZGVudGl0eSBvZiB0aGlzIGxvZywgYWJzZW50IHVudGlsIHRoZSBlbmdpbmUgYmluZHMgaXQuICovXG4gIGdldCBhZGRyZXNzKCk6IExvZ0FkZHJlc3MgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZUFkZHJlc3M7XG4gIH1cblxuICAvKiogQGludGVybmFsIEJpbmQgb25jZTsgcmVzdW1pbmcgdGhlIHNhbWUgbG9nIG11c3Qgbm90IHJlbmFtZSBpdHMgZWFybGllciBwb3NpdGlvbnMuICovXG4gIGJpbmRBZGRyZXNzKGxvZ1J1bklkOiBzdHJpbmcsIGRyaWxsUGF0aDogcmVhZG9ubHkgc3RyaW5nW10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zb3VyY2VBZGRyZXNzUmV0aXJlZCkgcmV0dXJuO1xuICAgIHRoaXMuc291cmNlQWRkcmVzcyA/Pz0gT2JqZWN0LmZyZWV6ZSh7IGxvZ1J1bklkLCBkcmlsbFBhdGg6IE9iamVjdC5mcmVlemUoWy4uLmRyaWxsUGF0aF0pIH0pO1xuICB9XG5cbiAgLyoqIE8oMSkgc291cmNlLXRpbWUgY2FwdHVyZS4gTm8gY291bnRlciwgb2JzZXJ2ZXIgYm9va2tlZXBpbmcsIG9yIGZ1dHVyZSBjb21taXQgcHJlZGljdGlvbi4gKi9cbiAgY2FwdHVyZVBvc2l0aW9uKHJ1bklkOiBzdHJpbmcpOiBFbWl0U291cmNlUG9zaXRpb24gfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5zb3VyY2VBZGRyZXNzKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHsgcnVuSWQsIC4uLnRoaXMuc291cmNlQWRkcmVzcywgY29tbWl0dGVkVGhyb3VnaElkeDogdGhpcy5zdGVwcy5sZW5ndGggLSAxIH0pO1xuICB9XG5cbiAgLyoqIFdpcGVzIGhpc3RvcnkgKHVzZWZ1bCBmb3IgdGVzdCByZXNldHMpLiAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnN0ZXBzID0gW107XG4gICAgLy8gQSByZXNldCBwcmVmaXggY2Fubm90IHJldXNlIG9sZCBjb29yZGluYXRlcywgZXZlbiBpZiBhbm90aGVyIHN0YWdlIG9mXG4gICAgLy8gdGhlIFNBTUUgbGVnIGJpbmRzIGl0IGFnYWluLiBLZWVwIGNsZWFyJ3MgZGF0YSBiZWhhdmlvciwgYnV0IHJldGlyZVxuICAgIC8vIGFkZHJlc3NpbmcgZm9yIHRoaXMgbG9nOyBrbm93biBjb29yZGluYXRlcyByZXF1aXJlIGEgZnJlc2ggRXZlbnRMb2cuXG4gICAgdGhpcy5zb3VyY2VBZGRyZXNzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc291cmNlQWRkcmVzc1JldGlyZWQgPSB0cnVlO1xuICB9XG59XG4iXX0=
|
|
@@ -48,10 +48,11 @@ function foldsBack(fold, workingCopy, family, address) {
|
|
|
48
48
|
return false;
|
|
49
49
|
const folded = _get(fold, segments);
|
|
50
50
|
const read = _get(workingCopy, segments);
|
|
51
|
-
|
|
51
|
+
// Both sides are the same values as a record holds them: an opaque one (a Blob) is never the same object.
|
|
52
|
+
if (deepEqual(folded, read, 'copies'))
|
|
52
53
|
return true;
|
|
53
54
|
family.held = { value: structuredClone(read) };
|
|
54
|
-
return deepEqual(folded, family.held.value);
|
|
55
|
+
return deepEqual(folded, family.held.value, 'copies');
|
|
55
56
|
}
|
|
56
57
|
/**
|
|
57
58
|
* Every staged path grouped under its SHALLOWEST staged ancestor-or-self —
|
|
@@ -149,4 +150,4 @@ function shallowestIn(path, touched) {
|
|
|
149
150
|
}
|
|
150
151
|
return path;
|
|
151
152
|
}
|
|
152
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvYWRtaXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBa0N2RDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsU0FBZSxFQUNmLElBQWEsRUFDYixXQUFvQixFQUNwQixHQUF3QixFQUN4QixPQUEwQjtJQUUxQixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEYsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsSUFBSSxLQUFzQyxDQUFDO0lBQzNDLEtBQUssTUFBTSxNQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUM7WUFBRSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUNELE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDdkUsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxJQUFhLEVBQUUsV0FBb0IsRUFBRSxNQUFjLEVBQUUsT0FBMEI7SUFDaEcsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ25FLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDcEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN6QyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDekMsTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLEtBQUssRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztJQUMvQyxPQUFPLFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLEdBQXdCO0lBSXRELE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFpRCxDQUFDO0lBQ3pFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDcEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxpREFBaUQ7UUFDOUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ3pDLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQzNDLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekIsTUFBTSxHQUFHLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsRixRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBQ0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELElBQUksS0FBSyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSTtZQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztJQUN6RCxDQUFDO0lBQ0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUM5QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxJQUFrQyxFQUFFLE9BQTBCO0lBQzNGLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDN0IsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksS0FBSztRQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFO1FBQUUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQztZQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdFLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxJQUFhLEVBQUUsV0FBb0IsRUFBRSxRQUFrQixFQUFFLE9BQTBCO0lBQ3BHLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0MsSUFBSSxDQUFDLEdBQVksSUFBSSxDQUFDO0lBQ3RCLElBQUksQ0FBQyxHQUFZLFdBQVcsQ0FBQztJQUM3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzVELElBQUksQ0FBQyxLQUFLLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzNDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7SUFDNUYsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxRQUFRLENBQUMsQ0FBVSxFQUFFLENBQVUsRUFBRSxHQUFXO0lBQ25ELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ25DLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDckcsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzlDLENBQUM7QUFFRCwyRkFBMkY7QUFDM0YsU0FBUyxZQUFZLENBQUMsSUFBWSxFQUFFLE9BQXFDO0lBQ3ZFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUM1QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFBRSxPQUFPLFFBQVEsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBhZG1pc3Npb24udHMg4oCUIHRoZSBhZG1pdHRlZCByZWNvcmQncyBjaGVjayAoOS4zMC4wKTogZG9lcyBhIGNvbW1pdCdzIGJ1bmRsZVxuICogZm9sZCBiYWNrIHRvIHdoYXQgaXRzIHN0YWdlIHJlYWQ/IChkb2NzL2Rlc2lnbi8yMDI2LTEwLWFkbWl0dGVkLXJlY29yZC5tZClcbiAqXG4gKiBUSEUgTEFXOiBhIGNvbW1pdCBpcyBhZG1pdHRlZCBvbmx5IGlmIGl0cyBidW5kbGUsIHJlcGxheWVkIG9udG8gdGhlIHN0YXRlXG4gKiB0aGUgc3RhZ2UgYmVnYW4gZnJvbSwgZ2l2ZXMgYmFjayB0aGUgc3RhZ2UncyByZWFkLXlvdXItd3JpdGVzIHZpZXcgYXQgZXZlcnlcbiAqIHBhdGggdGhlIHN0YWdlIHRvdWNoZWQg4oCUIGFuZCBhdCBldmVyeSBjb250YWluZXIgYW5kIGFycmF5IHNsb3QgaXRzIHdyaXRlc1xuICogbWFkZSBvbiB0aGUgd2F5IHRoZXJlLCBiZWxvdyB0aGUgc3RhZ2UncyBhZGRyZXNzLlxuICpcbiAqIFB1cmU6IGhhbmRlZCB0aGUgY2FuZGlkYXRlIHJvd3MsIHRoZSBzdGFnZSdzIGRpZmYgYmFzZSwgaXRzIHdvcmtpbmcgY29weSxcbiAqIGl0cyBvcCB0cmFjZSBhbmQgaXRzIGFkZHJlc3MsIHtAbGluayBsb3NzeUZhbWlsaWVzfSBhbnN3ZXJzIHdoaWNoIGZhbWlsaWVzXG4gKiBvZiB0b3VjaGVkIHBhdGhzIGRvIG5vdCBmb2xkIGJhY2suIGBUcmFuc2FjdGlvbkJ1ZmZlciDCtyBhZG1pdGAgYXNrcyBvbmNlIHBlclxuICogY29tbWl0IHRoYXQgc3RhZ2VkIGEgYG1lcmdlYCBvciBhIG5lc3RlZCBvcCwgYW5kIGxheXMgdGhlIHJvd3Mgb3V0IGFnYWluXG4gKiB3aXRoIHRob3NlIGZhbWlsaWVzIHdyaXR0ZW4gYXMgd2hhdCB0aGUgc3RhZ2UgcmVhZC4gVGhlIGZvbGQgaXMgdGhlIG9uZVxuICogdmVyYiBsYXcgKHtAbGluayBkcnlGb2xkfSwgbm8gY2xvbmUpOyB0aGUgY29tcGFyZSBpcyB7QGxpbmsgZGVlcEVxdWFsfS5cbiAqL1xuXG5pbXBvcnQgeyBpc0NvbnRhaW5lciwgbmF0aXZlR2V0IGFzIF9nZXQsIG93bkNoaWxkIH0gZnJvbSAnLi9wYXRoT3BzLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtb3J5UGF0Y2gsIFRyYWNlRW50cnkgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGRlZXBFcXVhbCwgREVMSU0sIGRyeUZvbGQgfSBmcm9tICcuL3V0aWxzLmpzJztcblxuLyoqIFRoZSByb3dzIGEgcGF5bG9hZCBpcyBidWlsdCBmcm9tLCBiZWZvcmUgdGhlIGNvbW1pdCBuYW1lcyBpdHMgcmVkYWN0ZWQgcGF0aHMuICovXG5leHBvcnQgdHlwZSBSb3dzID0geyBvdmVyd3JpdGU6IE1lbW9yeVBhdGNoOyB1cGRhdGVzOiBNZW1vcnlQYXRjaDsgdHJhY2U6IFRyYWNlRW50cnlbXSB9O1xuXG4vKiogT25lIHN0YWdlZCBvcCwgYXMgYFRyYW5zYWN0aW9uQnVmZmVyYCByZWNvcmRzIGl0LiAqL1xuZXhwb3J0IHR5cGUgU3RhZ2VkT3AgPSB7IHBhdGg6IHN0cmluZzsgdmVyYjogc3RyaW5nOyByZWFkS2V5cz86IHN0cmluZ1tdIH07XG5cbi8qKiBBIHN0YWdlZCBwYXRoIGluIGEge0BsaW5rIEZhbWlseX0sIHdpdGggaXRzIGxhc3Qgb3AncyByZWFkIHByZWZpeC4gKi9cbmV4cG9ydCB0eXBlIE1lbWJlciA9IHsgcGF0aDogc3RyaW5nOyByZWFkS2V5cz86IHN0cmluZ1tdIH07XG5cbi8qKlxuICogQSBmYW1pbHkgb2YgVE9VQ0hFRCBwYXRoczogZXZlcnkgc3RhZ2VkIHBhdGggdW5kZXIgaXRzIHNoYWxsb3dlc3Qgc3RhZ2VkXG4gKiBhbmNlc3Rvci1vci1zZWxmIOKAlCB0aGUgdW5pdCB0aGUgY2hlY2sgdmVyaWZpZXMgYW5kLCB3aGVuIGl0IGRvZXMgbm90IGZvbGRcbiAqIGJhY2ssIHRoZSB1bml0IHJlLWVuY29kZWQuIFR3byBmYW1pbGllcyBuZXZlciBvdmVybGFwLlxuICovXG5leHBvcnQgdHlwZSBGYW1pbHkgPSB7XG4gIHJvb3Q6IHN0cmluZztcbiAgcm9vdFNlZ21lbnRzOiBzdHJpbmdbXTtcbiAgLyoqIEl0cyBzdGFnZWQgcGF0aHMsIGJ5IGxhc3QgdG91Y2guICovXG4gIG1lbWJlcnM6IE1lbWJlcltdO1xuICAvKiogSW5kZXggaW4gdGhlIG9wIHRyYWNlIG9mIHRoZSBmYW1pbHkncyBsYXN0IG9wOiB3aGVyZSBpdHMgcmUtZW5jb2RlZCByb3dzIGdvLiAqL1xuICBzbG90OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgcm9vdCdzIHJlYWQtYmFjayBhcyBhIHJlY29yZCBjYW4gaG9sZCBpdCDigJQgaXRzIGBzdHJ1Y3R1cmVkQ2xvbmVgLFxuICAgKiBib3hlZCDigJQgd2hlbiB0aGUgY2hlY2sgdG9vayBvbmUgKHtAbGluayBmb2xkc0JhY2t9KTsgdGhlIHJlLWVuY29kaW5nXG4gICAqIHJldXNlcyBpdC5cbiAgICovXG4gIGhlbGQ/OiB7IHZhbHVlOiB1bmtub3duIH07XG59O1xuXG4vKiogVGhlIGZhbWlsaWVzIHdob3NlIHJvd3MgZGlkIG5vdCBmb2xkIGJhY2ssIGFuZCB3aGljaCBmYW1pbHkgZXZlcnkgc3RhZ2VkIHBhdGggaXMgaW4uICovXG5leHBvcnQgdHlwZSBMb3NzeSA9IHsgcm9vdE9mOiBNYXA8c3RyaW5nLCBzdHJpbmc+OyBmYW1pbGllczogTWFwPHN0cmluZywgRmFtaWx5PiB9O1xuXG4vKipcbiAqIFRoZSBmYW1pbGllcyBvZiBgb3BzYCB3aG9zZSBjYW5kaWRhdGUgcm93cyBkbyBub3QgZm9sZCBiYWNrIHRvIHdoYXQgdGhlXG4gKiBzdGFnZSByZWFkIOKAlCBgdW5kZWZpbmVkYCB3aGVuIGV2ZXJ5IGZhbWlseSBkb2VzLiBFYWNoIGZhbWlseSBST09UIGlzXG4gKiBjb21wYXJlZCAoe0BsaW5rIGZvbGRzQmFja30pOiBpdHMgdmFsdWUgYW5kIHRoZSB3YXkgZG93biB0byBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvc3N5RmFtaWxpZXMoXG4gIGNhbmRpZGF0ZTogUm93cyxcbiAgYmFzZTogdW5rbm93bixcbiAgd29ya2luZ0NvcHk6IHVua25vd24sXG4gIG9wczogcmVhZG9ubHkgU3RhZ2VkT3BbXSxcbiAgYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10sXG4pOiBMb3NzeSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGZvbGQgPSBkcnlGb2xkKGJhc2UsIGNhbmRpZGF0ZS51cGRhdGVzLCBjYW5kaWRhdGUub3ZlcndyaXRlLCBjYW5kaWRhdGUudHJhY2UpO1xuICBjb25zdCB7IHJvb3RPZiwgZmFtaWxpZXMgfSA9IHRvdWNoZWRGYW1pbGllcyhvcHMpO1xuICBsZXQgbG9zc3k6IE1hcDxzdHJpbmcsIEZhbWlseT4gfCB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3QgZmFtaWx5IG9mIGZhbWlsaWVzLnZhbHVlcygpKSB7XG4gICAgaWYgKCFmb2xkc0JhY2soZm9sZCwgd29ya2luZ0NvcHksIGZhbWlseSwgYWRkcmVzcykpIChsb3NzeSA/Pz0gbmV3IE1hcCgpKS5zZXQoZmFtaWx5LnJvb3QsIGZhbWlseSk7XG4gIH1cbiAgcmV0dXJuIGxvc3N5ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB7IHJvb3RPZiwgZmFtaWxpZXM6IGxvc3N5IH07XG59XG5cbi8qKlxuICogRG9lcyB0aGUgZm9sZCBnaXZlIGJhY2sgd2hhdCB0aGUgc3RhZ2UgcmVhZCBhdCBhIGZhbWlseSByb290PyBUaGUgd2F5IGRvd25cbiAqICh7QGxpbmsgc3BpbmVIZWxkfSksIHRoZW4gdGhlIHZhbHVlIGJ5IHtAbGluayBkZWVwRXF1YWx9IChhIHJvb3QgY292ZXJzIGV2ZXJ5XG4gKiBkZXNjZW5kYW50OyBhbiBvd24gYHVuZGVmaW5lZGAgaXMgYSBkZWxldGVkIGtleSkg4oCUIGFnYWluc3QgdGhlIHJlYWQtYmFjayBhc1xuICogYSByZWNvcmQgY2FuIGhvbGQgaXQuIEEgcmVjb3JkIGhvbGRzIGBzdHJ1Y3R1cmVkQ2xvbmVgcyBvZiB3aGF0IGEgc3RhZ2VcbiAqIHdyb3RlIChzdGF0ZSB2YWx1ZXMgbXVzdCBzdXJ2aXZlIG9uZSksIGFuZCBhIGZldyB2YWx1ZXMgZG8gbm90IHN1cnZpdmUgb25lXG4gKiB3aG9sZTogYW4gYEVycm9yYCdzIG93biBmaWVsZHMgYXJlIGRyb3BwZWQuIFdoZW4gdGhlIGZvbGQgZXF1YWxzIHRoZVxuICogcmVhZC1iYWNrJ3MgY2xvbmUsIG5vIHJvdyBjb3VsZCBob2xkIG1vcmUsIGFuZCB0aGUgZmFtaWx5IGlzIGFkbWl0dGVkIGFzIGl0XG4gKiBpczsgdGhlIGNsb25lLCB0YWtlbiBvbmx5IGZvciBhIHJvb3QgdGhlIGNoZWFwIGNvbXBhcmUgcmVmdXNlZCwgaXMga2VwdCBmb3JcbiAqIHRoZSByZS1lbmNvZGluZy5cbiAqL1xuZnVuY3Rpb24gZm9sZHNCYWNrKGZvbGQ6IHVua25vd24sIHdvcmtpbmdDb3B5OiB1bmtub3duLCBmYW1pbHk6IEZhbWlseSwgYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10pOiBib29sZWFuIHtcbiAgY29uc3Qgc2VnbWVudHMgPSBmYW1pbHkucm9vdFNlZ21lbnRzO1xuICBpZiAoIXNwaW5lSGVsZChmb2xkLCB3b3JraW5nQ29weSwgc2VnbWVudHMsIGFkZHJlc3MpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGZvbGRlZCA9IF9nZXQoZm9sZCwgc2VnbWVudHMpO1xuICBjb25zdCByZWFkID0gX2dldCh3b3JraW5nQ29weSwgc2VnbWVudHMpO1xuICBpZiAoZGVlcEVxdWFsKGZvbGRlZCwgcmVhZCkpIHJldHVybiB0cnVlO1xuICBmYW1pbHkuaGVsZCA9IHsgdmFsdWU6IHN0cnVjdHVyZWRDbG9uZShyZWFkKSB9O1xuICByZXR1cm4gZGVlcEVxdWFsKGZvbGRlZCwgZmFtaWx5LmhlbGQudmFsdWUpO1xufVxuXG4vKipcbiAqIEV2ZXJ5IHN0YWdlZCBwYXRoIGdyb3VwZWQgdW5kZXIgaXRzIFNIQUxMT1dFU1Qgc3RhZ2VkIGFuY2VzdG9yLW9yLXNlbGYg4oCUXG4gKiBvdmVyIFRPVUNIRUQgcGF0aHMsIG5vdCBzdXJ2aXZpbmcgb25lczogYW4gb3AgdGhlIG5ldC1jaGFuZ2UgZmlsdGVyIGRyb3BzXG4gKiBjYW4gc3RpbGwgaGF2ZSBjaGFuZ2VkIHdoYXQgdGhlIHN0YWdlIHJlYWRzIChMLTEpLiBNZW1iZXJzIGFyZSBsaXN0ZWQgYnlcbiAqIGxhc3QgdG91Y2g7IGEgZmFtaWx5J3Mgc2xvdCBpcyBpdHMgbGFzdCBvcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvdWNoZWRGYW1pbGllcyhvcHM6IHJlYWRvbmx5IFN0YWdlZE9wW10pOiB7XG4gIHJvb3RPZjogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgZmFtaWxpZXM6IE1hcDxzdHJpbmcsIEZhbWlseT47XG59IHtcbiAgY29uc3QgdG91Y2hlcyA9IG5ldyBNYXA8c3RyaW5nLCB7IGxhc3Q6IG51bWJlcjsgcmVhZEtleXM/OiBzdHJpbmdbXSB9PigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IG9wcy5sZW5ndGg7IGkrKykge1xuICAgIHRvdWNoZXMuZGVsZXRlKG9wc1tpXS5wYXRoKTsgLy8gcmUtaW5zZXJ0OiB0aGUgTWFwJ3Mgb3JkZXIgaXMgbGFzdC10b3VjaCBvcmRlclxuICAgIHRvdWNoZXMuc2V0KG9wc1tpXS5wYXRoLCB7IGxhc3Q6IGksIHJlYWRLZXlzOiBvcHNbaV0ucmVhZEtleXMgfSk7XG4gIH1cbiAgY29uc3Qgcm9vdE9mID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgY29uc3QgZmFtaWxpZXMgPSBuZXcgTWFwPHN0cmluZywgRmFtaWx5PigpO1xuICBmb3IgKGNvbnN0IFtwYXRoLCB0b3VjaF0gb2YgdG91Y2hlcykge1xuICAgIGNvbnN0IHJvb3QgPSBzaGFsbG93ZXN0SW4ocGF0aCwgdG91Y2hlcyk7XG4gICAgcm9vdE9mLnNldChwYXRoLCByb290KTtcbiAgICBsZXQgZmFtaWx5ID0gZmFtaWxpZXMuZ2V0KHJvb3QpO1xuICAgIGlmIChmYW1pbHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmFtaWx5ID0geyByb290LCByb290U2VnbWVudHM6IHJvb3Quc3BsaXQoREVMSU0pLCBtZW1iZXJzOiBbXSwgc2xvdDogdG91Y2gubGFzdCB9O1xuICAgICAgZmFtaWxpZXMuc2V0KHJvb3QsIGZhbWlseSk7XG4gICAgfVxuICAgIGZhbWlseS5tZW1iZXJzLnB1c2goeyBwYXRoLCByZWFkS2V5czogdG91Y2gucmVhZEtleXMgfSk7XG4gICAgaWYgKHRvdWNoLmxhc3QgPiBmYW1pbHkuc2xvdCkgZmFtaWx5LnNsb3QgPSB0b3VjaC5sYXN0O1xuICB9XG4gIHJldHVybiB7IHJvb3RPZiwgZmFtaWxpZXMgfTtcbn1cblxuLyoqXG4gKiBIb3cgbWFueSBsZWFkaW5nIHNlZ21lbnRzIG9mIGBwYXRoYCBhcmUgdGhlIHN0YWdlJ3MgYGFkZHJlc3NgIOKAlCBpdHMgbGVuZ3RoXG4gKiB3aGVuIGBwYXRoYCBsaWVzIHN0cmljdGx5IGJlbG93IGl0LCBlbHNlIDAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRyZXNzRGVwdGhPZihwYXRoOiByZWFkb25seSAoc3RyaW5nIHwgbnVtYmVyKVtdLCBhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSk6IG51bWJlciB7XG4gIGNvbnN0IGRlcHRoID0gYWRkcmVzcy5sZW5ndGg7XG4gIGlmIChkZXB0aCA9PT0gMCB8fCBwYXRoLmxlbmd0aCA8PSBkZXB0aCkgcmV0dXJuIDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZGVwdGg7IGkrKykgaWYgKFN0cmluZyhwYXRoW2ldKSAhPT0gYWRkcmVzc1tpXSkgcmV0dXJuIDA7XG4gIHJldHVybiBkZXB0aDtcbn1cblxuLyoqXG4gKiBMLTE6IGEgbmVzdGVkIG9wIHRocm91Z2ggYW4gYWJzZW50IG9yIHByaW1pdGl2ZSBwYXJlbnQgbWFrZXMgdGhhdCBwYXJlbnQgYVxuICogY29udGFpbmVyIGluIHRoZSB3b3JraW5nIGNvcHkg4oCUIGFuZCB3aGVuIHRoZSBvcCBpdHNlbGYgY2hhbmdlcyBub3RoaW5nIChhXG4gKiBkZWxldGUgb2YgYSBrZXkgdGhhdCB3YXMgbmV2ZXIgdGhlcmUpIG5vIHJvdyBpcyBsZWZ0IHRvIG1ha2UgaXQgaW4gdGhlXG4gKiBmb2xkLCBzbyB0aGUgc3RhZ2UgcmVhZHMgYmFjayBhIGNvbnRhaW5lciB0aGUgcmVjb3JkIG5ldmVyIG1lbnRpb25zLiBUaGVcbiAqIHNhbWUgb3Agb24gYW4gQVJSQVkgcGFyZW50IHBhc3QgaXRzIGVuZCBncm93cyBpdCAoYGRlbGV0ZSBhLjBgIG9uIGBbXWBcbiAqIHJlYWRzIGJhY2sgYFt1bmRlZmluZWRdYCkuIEV2ZXJ5IGNvbnRhaW5lciB0aGUgd29ya2luZyBjb3B5IGhvbGRzIG9uIHRoZVxuICogd2F5IHRvIGBzZWdtZW50c2AsIGFuZCBldmVyeSBhcnJheSBzbG90IGVhY2ggc3RlcCBsYW5kcyBpbiwgbXVzdCBiZSBvbmUgdGhlXG4gKiBmb2xkIGhvbGRzIHRvbyDigJQgYmVsb3cgdGhlIHN0YWdlJ3MgYWRkcmVzcywgd2hvc2UgY29udGFpbmVycyBhcmUgd2hlcmUgaXRcbiAqIHdyaXRlcywgbm90IGEgdmFsdWUgaXQgcmVhZHMuXG4gKi9cbmZ1bmN0aW9uIHNwaW5lSGVsZChmb2xkOiB1bmtub3duLCB3b3JraW5nQ29weTogdW5rbm93biwgc2VnbWVudHM6IHN0cmluZ1tdLCBhZGRyZXNzOiByZWFkb25seSBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICBjb25zdCBmcm9tID0gYWRkcmVzc0RlcHRoT2Yoc2VnbWVudHMsIGFkZHJlc3MpO1xuICBsZXQgZjogdW5rbm93biA9IGZvbGQ7XG4gIGxldCB3OiB1bmtub3duID0gd29ya2luZ0NvcHk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaSA+PSBmcm9tICYmICFzbG90SGVsZChmLCB3LCBzZWdtZW50c1tpXSkpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoaSA9PT0gc2VnbWVudHMubGVuZ3RoIC0gMSkgcmV0dXJuIHRydWU7XG4gICAgZiA9IG93bkNoaWxkKGYsIHNlZ21lbnRzW2ldKTtcbiAgICB3ID0gb3duQ2hpbGQodywgc2VnbWVudHNbaV0pO1xuICAgIGlmICghaXNDb250YWluZXIodykpIHJldHVybiB0cnVlO1xuICAgIGlmIChpID49IGZyb20gJiYgKCFpc0NvbnRhaW5lcihmKSB8fCBBcnJheS5pc0FycmF5KGYpICE9PSBBcnJheS5pc0FycmF5KHcpKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIERvZXMgdGhlIGZvbGQgaG9sZCBldmVyeSBhcnJheSBzbG90IHRoZSB3b3JraW5nIGNvcHkncyBjb250YWluZXIgYHdgIGhvbGRzXG4gKiBhdCBga2V5YD8gT25seSBhbiBhcnJheSBjYW4gYmUgZ3Jvd24gYnkgYSB3cml0ZSB0aGF0IGNoYW5nZXMgbm90aGluZyBlbHNlXG4gKiAoYW4gaW5kZXggcGFzdCBpdHMgZW5kLCBzZXQgdG8gYHVuZGVmaW5lZGApOyBhbiBvYmplY3QncyBvd24gYHVuZGVmaW5lZGBcbiAqIGtleSBpcyBhIGRlbGV0ZWQga2V5IHRvIGV2ZXJ5IHJlYWRlciwgc28gb2JqZWN0cyBhbHdheXMgcGFzcy5cbiAqL1xuZnVuY3Rpb24gc2xvdEhlbGQoZjogdW5rbm93biwgdzogdW5rbm93biwga2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHcpKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgaW5kZXggPSBOdW1iZXIoa2V5KTtcbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGluZGV4KSB8fCBpbmRleCA8IDAgfHwgU3RyaW5nKGluZGV4KSAhPT0ga2V5IHx8IGluZGV4ID49IHcubGVuZ3RoKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZikgJiYgaW5kZXggPCBmLmxlbmd0aDtcbn1cblxuLyoqIFRoZSBzaGFsbG93ZXN0IG9mIGBwYXRoYCBhbmQgaXRzIGFuY2VzdG9ycyB0aGF0IGB0b3VjaGVkYCBob2xkcyDigJQgaXRzIGZhbWlseSdzIHJvb3QuICovXG5mdW5jdGlvbiBzaGFsbG93ZXN0SW4ocGF0aDogc3RyaW5nLCB0b3VjaGVkOiBSZWFkb25seU1hcDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nIHtcbiAgaWYgKHBhdGguaW5kZXhPZihERUxJTSkgPT09IC0xKSByZXR1cm4gcGF0aDtcbiAgY29uc3Qgc2VnbWVudHMgPSBwYXRoLnNwbGl0KERFTElNKTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBzZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGFuY2VzdG9yID0gc2VnbWVudHMuc2xpY2UoMCwgaSkuam9pbihERUxJTSk7XG4gICAgaWYgKHRvdWNoZWQuaGFzKGFuY2VzdG9yKSkgcmV0dXJuIGFuY2VzdG9yO1xuICB9XG4gIHJldHVybiBwYXRoO1xufVxuIl19
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRtaXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvYWRtaXNzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBa0N2RDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FDM0IsU0FBZSxFQUNmLElBQWEsRUFDYixXQUFvQixFQUNwQixHQUF3QixFQUN4QixPQUEwQjtJQUUxQixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEYsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsSUFBSSxLQUFzQyxDQUFDO0lBQzNDLEtBQUssTUFBTSxNQUFNLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUM7WUFBRSxDQUFDLEtBQUssS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUNELE9BQU8sS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDdkUsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxJQUFhLEVBQUUsV0FBb0IsRUFBRSxNQUFjLEVBQUUsT0FBMEI7SUFDaEcsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ25FLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDcEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN6QywwR0FBMEc7SUFDMUcsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNuRCxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQy9DLE9BQU8sU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLEdBQXdCO0lBSXRELE1BQU0sT0FBTyxHQUFHLElBQUksR0FBRyxFQUFpRCxDQUFDO0lBQ3pFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDcEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxpREFBaUQ7UUFDOUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ3pDLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQzNDLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekIsTUFBTSxHQUFHLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsRixRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBQ0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELElBQUksS0FBSyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSTtZQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztJQUN6RCxDQUFDO0lBQ0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUM5QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxJQUFrQyxFQUFFLE9BQTBCO0lBQzNGLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDN0IsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksS0FBSztRQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFO1FBQUUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQztZQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdFLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFTLFNBQVMsQ0FBQyxJQUFhLEVBQUUsV0FBb0IsRUFBRSxRQUFrQixFQUFFLE9BQTBCO0lBQ3BHLE1BQU0sSUFBSSxHQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0MsSUFBSSxDQUFDLEdBQVksSUFBSSxDQUFDO0lBQ3RCLElBQUksQ0FBQyxHQUFZLFdBQVcsQ0FBQztJQUM3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzVELElBQUksQ0FBQyxLQUFLLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzNDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7SUFDNUYsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxRQUFRLENBQUMsQ0FBVSxFQUFFLENBQVUsRUFBRSxHQUFXO0lBQ25ELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ25DLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDckcsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQzlDLENBQUM7QUFFRCwyRkFBMkY7QUFDM0YsU0FBUyxZQUFZLENBQUMsSUFBWSxFQUFFLE9BQXFDO0lBQ3ZFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUM1QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFBRSxPQUFPLFFBQVEsQ0FBQztJQUM3QyxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBhZG1pc3Npb24udHMg4oCUIHRoZSBhZG1pdHRlZCByZWNvcmQncyBjaGVjayAoOS4zMC4wKTogZG9lcyBhIGNvbW1pdCdzIGJ1bmRsZVxuICogZm9sZCBiYWNrIHRvIHdoYXQgaXRzIHN0YWdlIHJlYWQ/IChkb2NzL2Rlc2lnbi8yMDI2LTEwLWFkbWl0dGVkLXJlY29yZC5tZClcbiAqXG4gKiBUSEUgTEFXOiBhIGNvbW1pdCBpcyBhZG1pdHRlZCBvbmx5IGlmIGl0cyBidW5kbGUsIHJlcGxheWVkIG9udG8gdGhlIHN0YXRlXG4gKiB0aGUgc3RhZ2UgYmVnYW4gZnJvbSwgZ2l2ZXMgYmFjayB0aGUgc3RhZ2UncyByZWFkLXlvdXItd3JpdGVzIHZpZXcgYXQgZXZlcnlcbiAqIHBhdGggdGhlIHN0YWdlIHRvdWNoZWQg4oCUIGFuZCBhdCBldmVyeSBjb250YWluZXIgYW5kIGFycmF5IHNsb3QgaXRzIHdyaXRlc1xuICogbWFkZSBvbiB0aGUgd2F5IHRoZXJlLCBiZWxvdyB0aGUgc3RhZ2UncyBhZGRyZXNzLlxuICpcbiAqIFB1cmU6IGhhbmRlZCB0aGUgY2FuZGlkYXRlIHJvd3MsIHRoZSBzdGFnZSdzIGRpZmYgYmFzZSwgaXRzIHdvcmtpbmcgY29weSxcbiAqIGl0cyBvcCB0cmFjZSBhbmQgaXRzIGFkZHJlc3MsIHtAbGluayBsb3NzeUZhbWlsaWVzfSBhbnN3ZXJzIHdoaWNoIGZhbWlsaWVzXG4gKiBvZiB0b3VjaGVkIHBhdGhzIGRvIG5vdCBmb2xkIGJhY2suIGBUcmFuc2FjdGlvbkJ1ZmZlciDCtyBhZG1pdGAgYXNrcyBvbmNlIHBlclxuICogY29tbWl0IHRoYXQgc3RhZ2VkIGEgYG1lcmdlYCBvciBhIG5lc3RlZCBvcCwgYW5kIGxheXMgdGhlIHJvd3Mgb3V0IGFnYWluXG4gKiB3aXRoIHRob3NlIGZhbWlsaWVzIHdyaXR0ZW4gYXMgd2hhdCB0aGUgc3RhZ2UgcmVhZC4gVGhlIGZvbGQgaXMgdGhlIG9uZVxuICogdmVyYiBsYXcgKHtAbGluayBkcnlGb2xkfSwgbm8gY2xvbmUpOyB0aGUgY29tcGFyZSBpcyB7QGxpbmsgZGVlcEVxdWFsfS5cbiAqL1xuXG5pbXBvcnQgeyBpc0NvbnRhaW5lciwgbmF0aXZlR2V0IGFzIF9nZXQsIG93bkNoaWxkIH0gZnJvbSAnLi9wYXRoT3BzLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtb3J5UGF0Y2gsIFRyYWNlRW50cnkgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGRlZXBFcXVhbCwgREVMSU0sIGRyeUZvbGQgfSBmcm9tICcuL3V0aWxzLmpzJztcblxuLyoqIFRoZSByb3dzIGEgcGF5bG9hZCBpcyBidWlsdCBmcm9tLCBiZWZvcmUgdGhlIGNvbW1pdCBuYW1lcyBpdHMgcmVkYWN0ZWQgcGF0aHMuICovXG5leHBvcnQgdHlwZSBSb3dzID0geyBvdmVyd3JpdGU6IE1lbW9yeVBhdGNoOyB1cGRhdGVzOiBNZW1vcnlQYXRjaDsgdHJhY2U6IFRyYWNlRW50cnlbXSB9O1xuXG4vKiogT25lIHN0YWdlZCBvcCwgYXMgYFRyYW5zYWN0aW9uQnVmZmVyYCByZWNvcmRzIGl0LiAqL1xuZXhwb3J0IHR5cGUgU3RhZ2VkT3AgPSB7IHBhdGg6IHN0cmluZzsgdmVyYjogc3RyaW5nOyByZWFkS2V5cz86IHN0cmluZ1tdIH07XG5cbi8qKiBBIHN0YWdlZCBwYXRoIGluIGEge0BsaW5rIEZhbWlseX0sIHdpdGggaXRzIGxhc3Qgb3AncyByZWFkIHByZWZpeC4gKi9cbmV4cG9ydCB0eXBlIE1lbWJlciA9IHsgcGF0aDogc3RyaW5nOyByZWFkS2V5cz86IHN0cmluZ1tdIH07XG5cbi8qKlxuICogQSBmYW1pbHkgb2YgVE9VQ0hFRCBwYXRoczogZXZlcnkgc3RhZ2VkIHBhdGggdW5kZXIgaXRzIHNoYWxsb3dlc3Qgc3RhZ2VkXG4gKiBhbmNlc3Rvci1vci1zZWxmIOKAlCB0aGUgdW5pdCB0aGUgY2hlY2sgdmVyaWZpZXMgYW5kLCB3aGVuIGl0IGRvZXMgbm90IGZvbGRcbiAqIGJhY2ssIHRoZSB1bml0IHJlLWVuY29kZWQuIFR3byBmYW1pbGllcyBuZXZlciBvdmVybGFwLlxuICovXG5leHBvcnQgdHlwZSBGYW1pbHkgPSB7XG4gIHJvb3Q6IHN0cmluZztcbiAgcm9vdFNlZ21lbnRzOiBzdHJpbmdbXTtcbiAgLyoqIEl0cyBzdGFnZWQgcGF0aHMsIGJ5IGxhc3QgdG91Y2guICovXG4gIG1lbWJlcnM6IE1lbWJlcltdO1xuICAvKiogSW5kZXggaW4gdGhlIG9wIHRyYWNlIG9mIHRoZSBmYW1pbHkncyBsYXN0IG9wOiB3aGVyZSBpdHMgcmUtZW5jb2RlZCByb3dzIGdvLiAqL1xuICBzbG90OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgcm9vdCdzIHJlYWQtYmFjayBhcyBhIHJlY29yZCBjYW4gaG9sZCBpdCDigJQgaXRzIGBzdHJ1Y3R1cmVkQ2xvbmVgLFxuICAgKiBib3hlZCDigJQgd2hlbiB0aGUgY2hlY2sgdG9vayBvbmUgKHtAbGluayBmb2xkc0JhY2t9KTsgdGhlIHJlLWVuY29kaW5nXG4gICAqIHJldXNlcyBpdC5cbiAgICovXG4gIGhlbGQ/OiB7IHZhbHVlOiB1bmtub3duIH07XG59O1xuXG4vKiogVGhlIGZhbWlsaWVzIHdob3NlIHJvd3MgZGlkIG5vdCBmb2xkIGJhY2ssIGFuZCB3aGljaCBmYW1pbHkgZXZlcnkgc3RhZ2VkIHBhdGggaXMgaW4uICovXG5leHBvcnQgdHlwZSBMb3NzeSA9IHsgcm9vdE9mOiBNYXA8c3RyaW5nLCBzdHJpbmc+OyBmYW1pbGllczogTWFwPHN0cmluZywgRmFtaWx5PiB9O1xuXG4vKipcbiAqIFRoZSBmYW1pbGllcyBvZiBgb3BzYCB3aG9zZSBjYW5kaWRhdGUgcm93cyBkbyBub3QgZm9sZCBiYWNrIHRvIHdoYXQgdGhlXG4gKiBzdGFnZSByZWFkIOKAlCBgdW5kZWZpbmVkYCB3aGVuIGV2ZXJ5IGZhbWlseSBkb2VzLiBFYWNoIGZhbWlseSBST09UIGlzXG4gKiBjb21wYXJlZCAoe0BsaW5rIGZvbGRzQmFja30pOiBpdHMgdmFsdWUgYW5kIHRoZSB3YXkgZG93biB0byBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvc3N5RmFtaWxpZXMoXG4gIGNhbmRpZGF0ZTogUm93cyxcbiAgYmFzZTogdW5rbm93bixcbiAgd29ya2luZ0NvcHk6IHVua25vd24sXG4gIG9wczogcmVhZG9ubHkgU3RhZ2VkT3BbXSxcbiAgYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10sXG4pOiBMb3NzeSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGZvbGQgPSBkcnlGb2xkKGJhc2UsIGNhbmRpZGF0ZS51cGRhdGVzLCBjYW5kaWRhdGUub3ZlcndyaXRlLCBjYW5kaWRhdGUudHJhY2UpO1xuICBjb25zdCB7IHJvb3RPZiwgZmFtaWxpZXMgfSA9IHRvdWNoZWRGYW1pbGllcyhvcHMpO1xuICBsZXQgbG9zc3k6IE1hcDxzdHJpbmcsIEZhbWlseT4gfCB1bmRlZmluZWQ7XG4gIGZvciAoY29uc3QgZmFtaWx5IG9mIGZhbWlsaWVzLnZhbHVlcygpKSB7XG4gICAgaWYgKCFmb2xkc0JhY2soZm9sZCwgd29ya2luZ0NvcHksIGZhbWlseSwgYWRkcmVzcykpIChsb3NzeSA/Pz0gbmV3IE1hcCgpKS5zZXQoZmFtaWx5LnJvb3QsIGZhbWlseSk7XG4gIH1cbiAgcmV0dXJuIGxvc3N5ID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiB7IHJvb3RPZiwgZmFtaWxpZXM6IGxvc3N5IH07XG59XG5cbi8qKlxuICogRG9lcyB0aGUgZm9sZCBnaXZlIGJhY2sgd2hhdCB0aGUgc3RhZ2UgcmVhZCBhdCBhIGZhbWlseSByb290PyBUaGUgd2F5IGRvd25cbiAqICh7QGxpbmsgc3BpbmVIZWxkfSksIHRoZW4gdGhlIHZhbHVlIGJ5IHtAbGluayBkZWVwRXF1YWx9IChhIHJvb3QgY292ZXJzIGV2ZXJ5XG4gKiBkZXNjZW5kYW50OyBhbiBvd24gYHVuZGVmaW5lZGAgaXMgYSBkZWxldGVkIGtleSkg4oCUIGFnYWluc3QgdGhlIHJlYWQtYmFjayBhc1xuICogYSByZWNvcmQgY2FuIGhvbGQgaXQuIEEgcmVjb3JkIGhvbGRzIGBzdHJ1Y3R1cmVkQ2xvbmVgcyBvZiB3aGF0IGEgc3RhZ2VcbiAqIHdyb3RlIChzdGF0ZSB2YWx1ZXMgbXVzdCBzdXJ2aXZlIG9uZSksIGFuZCBhIGZldyB2YWx1ZXMgZG8gbm90IHN1cnZpdmUgb25lXG4gKiB3aG9sZTogYW4gYEVycm9yYCdzIG93biBmaWVsZHMgYXJlIGRyb3BwZWQuIFdoZW4gdGhlIGZvbGQgZXF1YWxzIHRoZVxuICogcmVhZC1iYWNrJ3MgY2xvbmUsIG5vIHJvdyBjb3VsZCBob2xkIG1vcmUsIGFuZCB0aGUgZmFtaWx5IGlzIGFkbWl0dGVkIGFzIGl0XG4gKiBpczsgdGhlIGNsb25lLCB0YWtlbiBvbmx5IGZvciBhIHJvb3QgdGhlIGNoZWFwIGNvbXBhcmUgcmVmdXNlZCwgaXMga2VwdCBmb3JcbiAqIHRoZSByZS1lbmNvZGluZy5cbiAqL1xuZnVuY3Rpb24gZm9sZHNCYWNrKGZvbGQ6IHVua25vd24sIHdvcmtpbmdDb3B5OiB1bmtub3duLCBmYW1pbHk6IEZhbWlseSwgYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10pOiBib29sZWFuIHtcbiAgY29uc3Qgc2VnbWVudHMgPSBmYW1pbHkucm9vdFNlZ21lbnRzO1xuICBpZiAoIXNwaW5lSGVsZChmb2xkLCB3b3JraW5nQ29weSwgc2VnbWVudHMsIGFkZHJlc3MpKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IGZvbGRlZCA9IF9nZXQoZm9sZCwgc2VnbWVudHMpO1xuICBjb25zdCByZWFkID0gX2dldCh3b3JraW5nQ29weSwgc2VnbWVudHMpO1xuICAvLyBCb3RoIHNpZGVzIGFyZSB0aGUgc2FtZSB2YWx1ZXMgYXMgYSByZWNvcmQgaG9sZHMgdGhlbTogYW4gb3BhcXVlIG9uZSAoYSBCbG9iKSBpcyBuZXZlciB0aGUgc2FtZSBvYmplY3QuXG4gIGlmIChkZWVwRXF1YWwoZm9sZGVkLCByZWFkLCAnY29waWVzJykpIHJldHVybiB0cnVlO1xuICBmYW1pbHkuaGVsZCA9IHsgdmFsdWU6IHN0cnVjdHVyZWRDbG9uZShyZWFkKSB9O1xuICByZXR1cm4gZGVlcEVxdWFsKGZvbGRlZCwgZmFtaWx5LmhlbGQudmFsdWUsICdjb3BpZXMnKTtcbn1cblxuLyoqXG4gKiBFdmVyeSBzdGFnZWQgcGF0aCBncm91cGVkIHVuZGVyIGl0cyBTSEFMTE9XRVNUIHN0YWdlZCBhbmNlc3Rvci1vci1zZWxmIOKAlFxuICogb3ZlciBUT1VDSEVEIHBhdGhzLCBub3Qgc3Vydml2aW5nIG9uZXM6IGFuIG9wIHRoZSBuZXQtY2hhbmdlIGZpbHRlciBkcm9wc1xuICogY2FuIHN0aWxsIGhhdmUgY2hhbmdlZCB3aGF0IHRoZSBzdGFnZSByZWFkcyAoTC0xKS4gTWVtYmVycyBhcmUgbGlzdGVkIGJ5XG4gKiBsYXN0IHRvdWNoOyBhIGZhbWlseSdzIHNsb3QgaXMgaXRzIGxhc3Qgb3AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b3VjaGVkRmFtaWxpZXMob3BzOiByZWFkb25seSBTdGFnZWRPcFtdKToge1xuICByb290T2Y6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gIGZhbWlsaWVzOiBNYXA8c3RyaW5nLCBGYW1pbHk+O1xufSB7XG4gIGNvbnN0IHRvdWNoZXMgPSBuZXcgTWFwPHN0cmluZywgeyBsYXN0OiBudW1iZXI7IHJlYWRLZXlzPzogc3RyaW5nW10gfT4oKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcHMubGVuZ3RoOyBpKyspIHtcbiAgICB0b3VjaGVzLmRlbGV0ZShvcHNbaV0ucGF0aCk7IC8vIHJlLWluc2VydDogdGhlIE1hcCdzIG9yZGVyIGlzIGxhc3QtdG91Y2ggb3JkZXJcbiAgICB0b3VjaGVzLnNldChvcHNbaV0ucGF0aCwgeyBsYXN0OiBpLCByZWFkS2V5czogb3BzW2ldLnJlYWRLZXlzIH0pO1xuICB9XG4gIGNvbnN0IHJvb3RPZiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIGNvbnN0IGZhbWlsaWVzID0gbmV3IE1hcDxzdHJpbmcsIEZhbWlseT4oKTtcbiAgZm9yIChjb25zdCBbcGF0aCwgdG91Y2hdIG9mIHRvdWNoZXMpIHtcbiAgICBjb25zdCByb290ID0gc2hhbGxvd2VzdEluKHBhdGgsIHRvdWNoZXMpO1xuICAgIHJvb3RPZi5zZXQocGF0aCwgcm9vdCk7XG4gICAgbGV0IGZhbWlseSA9IGZhbWlsaWVzLmdldChyb290KTtcbiAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZhbWlseSA9IHsgcm9vdCwgcm9vdFNlZ21lbnRzOiByb290LnNwbGl0KERFTElNKSwgbWVtYmVyczogW10sIHNsb3Q6IHRvdWNoLmxhc3QgfTtcbiAgICAgIGZhbWlsaWVzLnNldChyb290LCBmYW1pbHkpO1xuICAgIH1cbiAgICBmYW1pbHkubWVtYmVycy5wdXNoKHsgcGF0aCwgcmVhZEtleXM6IHRvdWNoLnJlYWRLZXlzIH0pO1xuICAgIGlmICh0b3VjaC5sYXN0ID4gZmFtaWx5LnNsb3QpIGZhbWlseS5zbG90ID0gdG91Y2gubGFzdDtcbiAgfVxuICByZXR1cm4geyByb290T2YsIGZhbWlsaWVzIH07XG59XG5cbi8qKlxuICogSG93IG1hbnkgbGVhZGluZyBzZWdtZW50cyBvZiBgcGF0aGAgYXJlIHRoZSBzdGFnZSdzIGBhZGRyZXNzYCDigJQgaXRzIGxlbmd0aFxuICogd2hlbiBgcGF0aGAgbGllcyBzdHJpY3RseSBiZWxvdyBpdCwgZWxzZSAwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkcmVzc0RlcHRoT2YocGF0aDogcmVhZG9ubHkgKHN0cmluZyB8IG51bWJlcilbXSwgYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10pOiBudW1iZXIge1xuICBjb25zdCBkZXB0aCA9IGFkZHJlc3MubGVuZ3RoO1xuICBpZiAoZGVwdGggPT09IDAgfHwgcGF0aC5sZW5ndGggPD0gZGVwdGgpIHJldHVybiAwO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGRlcHRoOyBpKyspIGlmIChTdHJpbmcocGF0aFtpXSkgIT09IGFkZHJlc3NbaV0pIHJldHVybiAwO1xuICByZXR1cm4gZGVwdGg7XG59XG5cbi8qKlxuICogTC0xOiBhIG5lc3RlZCBvcCB0aHJvdWdoIGFuIGFic2VudCBvciBwcmltaXRpdmUgcGFyZW50IG1ha2VzIHRoYXQgcGFyZW50IGFcbiAqIGNvbnRhaW5lciBpbiB0aGUgd29ya2luZyBjb3B5IOKAlCBhbmQgd2hlbiB0aGUgb3AgaXRzZWxmIGNoYW5nZXMgbm90aGluZyAoYVxuICogZGVsZXRlIG9mIGEga2V5IHRoYXQgd2FzIG5ldmVyIHRoZXJlKSBubyByb3cgaXMgbGVmdCB0byBtYWtlIGl0IGluIHRoZVxuICogZm9sZCwgc28gdGhlIHN0YWdlIHJlYWRzIGJhY2sgYSBjb250YWluZXIgdGhlIHJlY29yZCBuZXZlciBtZW50aW9ucy4gVGhlXG4gKiBzYW1lIG9wIG9uIGFuIEFSUkFZIHBhcmVudCBwYXN0IGl0cyBlbmQgZ3Jvd3MgaXQgKGBkZWxldGUgYS4wYCBvbiBgW11gXG4gKiByZWFkcyBiYWNrIGBbdW5kZWZpbmVkXWApLiBFdmVyeSBjb250YWluZXIgdGhlIHdvcmtpbmcgY29weSBob2xkcyBvbiB0aGVcbiAqIHdheSB0byBgc2VnbWVudHNgLCBhbmQgZXZlcnkgYXJyYXkgc2xvdCBlYWNoIHN0ZXAgbGFuZHMgaW4sIG11c3QgYmUgb25lIHRoZVxuICogZm9sZCBob2xkcyB0b28g4oCUIGJlbG93IHRoZSBzdGFnZSdzIGFkZHJlc3MsIHdob3NlIGNvbnRhaW5lcnMgYXJlIHdoZXJlIGl0XG4gKiB3cml0ZXMsIG5vdCBhIHZhbHVlIGl0IHJlYWRzLlxuICovXG5mdW5jdGlvbiBzcGluZUhlbGQoZm9sZDogdW5rbm93biwgd29ya2luZ0NvcHk6IHVua25vd24sIHNlZ21lbnRzOiBzdHJpbmdbXSwgYWRkcmVzczogcmVhZG9ubHkgc3RyaW5nW10pOiBib29sZWFuIHtcbiAgY29uc3QgZnJvbSA9IGFkZHJlc3NEZXB0aE9mKHNlZ21lbnRzLCBhZGRyZXNzKTtcbiAgbGV0IGY6IHVua25vd24gPSBmb2xkO1xuICBsZXQgdzogdW5rbm93biA9IHdvcmtpbmdDb3B5O1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGkgPj0gZnJvbSAmJiAhc2xvdEhlbGQoZiwgdywgc2VnbWVudHNbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGkgPT09IHNlZ21lbnRzLmxlbmd0aCAtIDEpIHJldHVybiB0cnVlO1xuICAgIGYgPSBvd25DaGlsZChmLCBzZWdtZW50c1tpXSk7XG4gICAgdyA9IG93bkNoaWxkKHcsIHNlZ21lbnRzW2ldKTtcbiAgICBpZiAoIWlzQ29udGFpbmVyKHcpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoaSA+PSBmcm9tICYmICghaXNDb250YWluZXIoZikgfHwgQXJyYXkuaXNBcnJheShmKSAhPT0gQXJyYXkuaXNBcnJheSh3KSkpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBEb2VzIHRoZSBmb2xkIGhvbGQgZXZlcnkgYXJyYXkgc2xvdCB0aGUgd29ya2luZyBjb3B5J3MgY29udGFpbmVyIGB3YCBob2xkc1xuICogYXQgYGtleWA/IE9ubHkgYW4gYXJyYXkgY2FuIGJlIGdyb3duIGJ5IGEgd3JpdGUgdGhhdCBjaGFuZ2VzIG5vdGhpbmcgZWxzZVxuICogKGFuIGluZGV4IHBhc3QgaXRzIGVuZCwgc2V0IHRvIGB1bmRlZmluZWRgKTsgYW4gb2JqZWN0J3Mgb3duIGB1bmRlZmluZWRgXG4gKiBrZXkgaXMgYSBkZWxldGVkIGtleSB0byBldmVyeSByZWFkZXIsIHNvIG9iamVjdHMgYWx3YXlzIHBhc3MuXG4gKi9cbmZ1bmN0aW9uIHNsb3RIZWxkKGY6IHVua25vd24sIHc6IHVua25vd24sIGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICghQXJyYXkuaXNBcnJheSh3KSkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IGluZGV4ID0gTnVtYmVyKGtleSk7XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihpbmRleCkgfHwgaW5kZXggPCAwIHx8IFN0cmluZyhpbmRleCkgIT09IGtleSB8fCBpbmRleCA+PSB3Lmxlbmd0aCkgcmV0dXJuIHRydWU7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGYpICYmIGluZGV4IDwgZi5sZW5ndGg7XG59XG5cbi8qKiBUaGUgc2hhbGxvd2VzdCBvZiBgcGF0aGAgYW5kIGl0cyBhbmNlc3RvcnMgdGhhdCBgdG91Y2hlZGAgaG9sZHMg4oCUIGl0cyBmYW1pbHkncyByb290LiAqL1xuZnVuY3Rpb24gc2hhbGxvd2VzdEluKHBhdGg6IHN0cmluZywgdG91Y2hlZDogUmVhZG9ubHlNYXA8c3RyaW5nLCB1bmtub3duPik6IHN0cmluZyB7XG4gIGlmIChwYXRoLmluZGV4T2YoREVMSU0pID09PSAtMSkgcmV0dXJuIHBhdGg7XG4gIGNvbnN0IHNlZ21lbnRzID0gcGF0aC5zcGxpdChERUxJTSk7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhbmNlc3RvciA9IHNlZ21lbnRzLnNsaWNlKDAsIGkpLmpvaW4oREVMSU0pO1xuICAgIGlmICh0b3VjaGVkLmhhcyhhbmNlc3RvcikpIHJldHVybiBhbmNlc3RvcjtcbiAgfVxuICByZXR1cm4gcGF0aDtcbn1cbiJdfQ==
|
|
@@ -45,7 +45,7 @@ function joinSegment(prefix, segment, intoArray) {
|
|
|
45
45
|
* `deepEqual`, and stops at the first disagreement.
|
|
46
46
|
*/
|
|
47
47
|
export function firstDifferingPath(before, after, prefix = '', depth = 0) {
|
|
48
|
-
if (deepEqual(before, after))
|
|
48
|
+
if (deepEqual(before, after, 'copies'))
|
|
49
49
|
return undefined;
|
|
50
50
|
if (depth >= 24)
|
|
51
51
|
return prefix; // pathological nesting — name what we have
|
|
@@ -127,4 +127,4 @@ export function borrowedMutationMessage(stageName, key, path) {
|
|
|
127
127
|
'This usually comes from mutating an element reached by `find`/`filter`/`for…of`/`forEach`, ' +
|
|
128
128
|
'which the scope proxy cannot intercept.');
|
|
129
129
|
}
|
|
130
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9ycm93ZWRNdXRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2JvcnJvd2VkTXV0YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdkMsOEVBQThFO0FBQzlFLFNBQVMsV0FBVyxDQUFDLE1BQWMsRUFBRSxPQUFlLEVBQUUsU0FBa0I7SUFDdEUsSUFBSSxTQUFTO1FBQUUsT0FBTyxHQUFHLE1BQU0sSUFBSSxPQUFPLEdBQUcsQ0FBQztJQUM5QyxPQUFPLE1BQU0sS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7QUFDMUQsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsTUFBZSxFQUFFLEtBQWMsRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLEtBQUssR0FBRyxDQUFDO0lBQ3hGLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUMvQyxJQUFJLEtBQUssSUFBSSxFQUFFO1FBQUUsT0FBTyxNQUFNLENBQUMsQ0FBQywyQ0FBMkM7SUFDM0UsSUFBSSxNQUFNLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLE1BQU0sQ0FBQztJQUVoSCxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLElBQUksYUFBYSxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxNQUFNLENBQUM7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QUFHLENBQUMsQ0FBQztJQUN6RSxPQUFPLENBQ0wsc0JBQXNCLFNBQVMsZUFBZSxLQUFLLHdDQUF3QztRQUMzRixvR0FBb0c7UUFDcEcsbUdBQW1HO1FBQ25HLDREQUE0RDtRQUM1RCwwQ0FBMEM7UUFDMUMsS0FBSztRQUNMLHlEQUF5RDtRQUN6RCx3REFBd0QsR0FBRyxjQUFjO1FBQ3pFLDZGQUE2RjtRQUM3Rix5Q0FBeUMsQ0FDMUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIG1lbW9yeS9ib3Jyb3dlZE11dGF0aW9uIOKAlCB0aGUgaG9uZXN0IGJvdW5kYXJ5J3MgdHdvIHRleHRzOiB0aGUgZGV2LW1vZGVcbiAqIFJFUE9SVCBmb3IgYSB3cml0ZSB0aGUgZW5naW5lIGNhbm5vdCBzZWUgKHtAbGluayBib3Jyb3dlZE11dGF0aW9uTWVzc2FnZX0pXG4gKiBhbmQgdGhlIFJFRlVTQUwgZm9yIGEgd3JpdGUgZnJvbSBhIGhhbmRsZSBoZWxkIHBhc3QgaXRzIHN0YWdlXG4gKiAoe0BsaW5rIGRlYWRGcmFtZU1lc3NhZ2V9LCB0aHJvd24gYnkgYFN0YWdlQ29udGV4dC5zdGFnZVdyaXRlYCkuXG4gKlxuICog4pSA4pSAIFRoZSBob25lc3QgYm91bmRhcnkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiBUaGUgdHlwZWQgc2NvcGUgaW50ZXJjZXB0cyBldmVyeSB3cml0ZSBpdCBjYW4gcmVhY2g6IGEgcHJvcGVydHkgYXQgYW55XG4gKiBkZXB0aCwgYW4gaW5kZXhlZCBlbGVtZW50LCBhbiBhcnJheSBtZXRob2QuIFdoYXQgaXQgY2Fubm90IHJlYWNoIGlzIGFuXG4gKiBlbGVtZW50IGhhbmRlZCBvdXQgYnkgYSBSRUFEIE1FVEhPRCDigJQgYGZpbmRgLCBgZmlsdGVyYCwgYGZvcuKApm9mYCwgYGZvckVhY2hgLFxuICogZGVzdHJ1Y3R1cmluZyDigJQgYmVjYXVzZSB3cmFwcGluZyB0aG9zZSB3b3VsZCBtZWFuIHJldHVybmluZyBwcm94aWVzIG91dCBvZlxuICogZXZlcnkgcmVhZCAoYG1hcGAgd291bGQgYnVpbGQgYW4gYXJyYXkgb2YgcHJveGllcywgYGZpbHRlcmAgd291bGQgY29tcGFyZVxuICogcHJveGllcywgYSByZXR1cm5lZCB2YWx1ZSB3b3VsZCBlc2NhcGUgdGhlIHN0YWdlIHN0aWxsIGJvdW5kIHRvIGl0KS4gVGhhdCBpc1xuICogYSBjb3N0IHRoZSBsaWJyYXJ5IHNob3VsZCBub3QgcGF5LCBhbmQgYSBzZW1hbnRpYyBjaGFuZ2UgaXQgc2hvdWxkIG5vdCBtYWtlLlxuICpcbiAqIFNvIHRoZSBhbnN3ZXIgZm9yIHRoYXQgZmFtaWx5IGlzIG5vdCBpbnRlcmNlcHRpb24g4oCUIGl0IGlzIGEgUkVQT1JULiBBIHJlYWRcbiAqIGlzIEJPUlJPV0VEOyBtdXRhdGluZyBpdCBpbiBwbGFjZSBpcyBvdXQgb2YgY29udHJhY3QuIFRoaXMgbW9kdWxlIGRldGVjdHMgdGhlXG4gKiB2aW9sYXRpb24gYWZ0ZXIgdGhlIGZhY3QgYW5kIG5hbWVzIGl0IChhIGRldi1tb2RlIHdhcm5pbmcgYXQgY29tbWl0IOKAlCB0aGVcbiAqIHdyaXRlIGFscmVhZHkgaGFwcGVuZWQsIHNvIGl0IGNhbm5vdCBiZSByZWZ1c2VkKSwgaW5zdGVhZCBvZiBsZXR0aW5nIHRoZSBydW5cbiAqIGVuZCB3aXRoIGEgY29tbWl0IGxvZyB0aGF0IGRpc2FncmVlcyB3aXRoIGZpbmFsIHN0YXRlIGFuZCBub3RoaW5nIHNheWluZyBzby5cbiAqXG4gKiDilIDilIAgSG93IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogYHJlYWRUcmFja2luZzogJ2Z1bGwnYCAodGhlIGRlZmF1bHQpIGFscmVhZHkgcmV0YWlucyBhIENMT05FIG9mIGV2ZXJ5IHZhbHVlXG4gKiBhIHN0YWdlIHJlYWQuIEF0IGNvbW1pdCwgYSBrZXkgdGhlIHN0YWdlIHJlYWQgYnV0IG5ldmVyIFdST1RFIG11c3Qgc3RpbGxcbiAqIGhvbGQgd2hhdCBpdCBoZWxkIGF0IHJlYWQgdGltZSDigJQgY29tbWl0dGVkIHN0YXRlIGlzIGltbXV0YWJsZS1hZnRlci1zd2FwIGFuZFxuICogdGhlIGJ1ZmZlcidzIHdvcmtpbmcgY29weSBpcyBwcml2YXRlLiBJZiBpdCBkaWZmZXJzLCB0aGUgb25seSB0aGluZyB0aGF0IGNhblxuICogaGF2ZSBjaGFuZ2VkIGl0IGlzIHRoZSBzdGFnZSBpdHNlbGYsIGluIHBsYWNlLlxuICpcbiAqIERldi1tb2RlIG9ubHkgKGBlbmFibGVEZXZNb2RlKClgKSwgc28gdGhlIGRlZmF1bHQgcnVuIHBheXMgbm90aGluZyBhbmQgaXRzXG4gKiBieXRlcyBhcmUgdW5jaGFuZ2VkLlxuICovXG5cbmltcG9ydCB7IGRlZXBFcXVhbCB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG4vKiogUmVuZGVyIG9uZSBwYXRoIHNlZ21lbnQgZm9yIGEgaHVtYW46IGBsaW5lc1swXS5xdHlgLCBub3QgYGxpbmVzLjAucXR5YC4gKi9cbmZ1bmN0aW9uIGpvaW5TZWdtZW50KHByZWZpeDogc3RyaW5nLCBzZWdtZW50OiBzdHJpbmcsIGludG9BcnJheTogYm9vbGVhbik6IHN0cmluZyB7XG4gIGlmIChpbnRvQXJyYXkpIHJldHVybiBgJHtwcmVmaXh9WyR7c2VnbWVudH1dYDtcbiAgcmV0dXJuIHByZWZpeCA9PT0gJycgPyBzZWdtZW50IDogYCR7cHJlZml4fS4ke3NlZ21lbnR9YDtcbn1cblxuLyoqXG4gKiBUaGUgZmlyc3QgcGF0aCBhdCB3aGljaCBgYWZ0ZXJgIHN0b3BzIGFncmVlaW5nIHdpdGggYGJlZm9yZWAsIG9yIGB1bmRlZmluZWRgXG4gKiB3aGVuIHRoZXkgYXJlIHN0cnVjdHVyYWxseSBlcXVhbC4gRGVwdGgtZmlyc3QsIG93biBrZXlzIG9ubHkg4oCUIHRoZSBzYW1lXG4gKiBzaGFwZXMgYGRlZXBFcXVhbGAgaGFuZGxlcywgc2luY2UgY29tbWl0dGVkIHN0YXRlIGlzIEpTT04tc2hhcGVkLlxuICpcbiAqIEN5Y2xlLXNhZmUgYnkgY29uc3RydWN0aW9uOiBpdCBvbmx5IHJlY3Vyc2VzIGludG8gcGFpcnMgdGhhdCBhcmUgbm90IGFscmVhZHlcbiAqIGBkZWVwRXF1YWxgLCBhbmQgc3RvcHMgYXQgdGhlIGZpcnN0IGRpc2FncmVlbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0RGlmZmVyaW5nUGF0aChiZWZvcmU6IHVua25vd24sIGFmdGVyOiB1bmtub3duLCBwcmVmaXggPSAnJywgZGVwdGggPSAwKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGRlZXBFcXVhbChiZWZvcmUsIGFmdGVyKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKGRlcHRoID49IDI0KSByZXR1cm4gcHJlZml4OyAvLyBwYXRob2xvZ2ljYWwgbmVzdGluZyDigJQgbmFtZSB3aGF0IHdlIGhhdmVcbiAgaWYgKGJlZm9yZSA9PT0gbnVsbCB8fCBhZnRlciA9PT0gbnVsbCB8fCB0eXBlb2YgYmVmb3JlICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgYWZ0ZXIgIT09ICdvYmplY3QnKSByZXR1cm4gcHJlZml4O1xuXG4gIGNvbnN0IGJlZm9yZUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGJlZm9yZSk7XG4gIGlmIChiZWZvcmVJc0FycmF5ICE9PSBBcnJheS5pc0FycmF5KGFmdGVyKSkgcmV0dXJuIHByZWZpeDtcblxuICBpZiAoYmVmb3JlSXNBcnJheSkge1xuICAgIGNvbnN0IGEgPSBiZWZvcmUgYXMgdW5rbm93bltdO1xuICAgIGNvbnN0IGIgPSBhZnRlciBhcyB1bmtub3duW107XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIHByZWZpeDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGRlZXBlciA9IGZpcnN0RGlmZmVyaW5nUGF0aChhW2ldLCBiW2ldLCBqb2luU2VnbWVudChwcmVmaXgsIFN0cmluZyhpKSwgdHJ1ZSksIGRlcHRoICsgMSk7XG4gICAgICBpZiAoZGVlcGVyICE9PSB1bmRlZmluZWQpIHJldHVybiBkZWVwZXI7XG4gICAgfVxuICAgIHJldHVybiBwcmVmaXg7XG4gIH1cblxuICBjb25zdCBhID0gYmVmb3JlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjb25zdCBiID0gYWZ0ZXIgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGtleXMgPSBuZXcgU2V0KFsuLi5PYmplY3Qua2V5cyhhKSwgLi4uT2JqZWN0LmtleXMoYildKTtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGNvbnN0IGRlZXBlciA9IGZpcnN0RGlmZmVyaW5nUGF0aChhW2tleV0sIGJba2V5XSwgam9pblNlZ21lbnQocHJlZml4LCBrZXksIGZhbHNlKSwgZGVwdGggKyAxKTtcbiAgICBpZiAoZGVlcGVyICE9PSB1bmRlZmluZWQpIHJldHVybiBkZWVwZXI7XG4gIH1cbiAgcmV0dXJuIHByZWZpeDtcbn1cblxuLyoqXG4gKiBUaGUgcmVmdXNhbCB0ZXh0IGZvciBhIHdyaXRlIHRoYXQgcmVhY2hlZCBhIGZyYW1lIEFGVEVSIGl0cyBzdGFnZSBjb21taXR0ZWQuXG4gKiBBIHNjb3BlLCBhbmQgZXZlcnkgcHJveHkgcmVhZCBvdXQgb2YgaXQsIGlzIGJvdW5kIHRvIHRoZSBzdGFnZSBpdCB3YXMgaGFuZGVkXG4gKiB0bzsga2VwdCBwYXN0IHRoYXQgc3RhZ2UncyBjb21taXQgaXQgaGFzIG5vIGZyYW1lIHRvIGxhbmQgaW4sIHNvIHRoZSB3cml0ZVxuICogd291bGQgc2l0IGluIGEgYnVmZmVyIG5vdGhpbmcgZXZlciBjb21taXRzIOKAlCBubyB0cmFjZSByb3csIHN0YXRlIHVuY2hhbmdlZC5cbiAqIFRoZSB0aHJvdyBzdXJmYWNlcyBpbiB0aGUgc3RhZ2UgdGhhdCBtYWRlIHRoZSB3cml0ZSAodGhlIGVuZ2luZSdzIGVycm9yXG4gKiBwYXRoIG5hbWVzIGl0KTsgdGhpcyB0ZXh0IG5hbWVzIHRoZSBzdGFnZSB0aGUgaGFuZGxlIGNhbWUgZnJvbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlYWRGcmFtZU1lc3NhZ2Uoc3RhZ2VOYW1lOiBzdHJpbmcsIHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQsIGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgZnJvbSA9IHJ1bnRpbWVTdGFnZUlkID8gYFwiJHtzdGFnZU5hbWV9XCIgKCR7cnVudGltZVN0YWdlSWR9KWAgOiBgXCIke3N0YWdlTmFtZX1cImA7XG4gIHJldHVybiAoXG4gICAgYFtmb290cHJpbnRdIFN0YWdlICR7ZnJvbX0gaGFzIGFscmVhZHkgY29tbWl0dGVkIOKAlCBpdHMgc2NvcGUgaXMgZGVhZCwgYW5kIGEgd3JpdGUgdG8gXFxgJHtrZXl9XFxgIGAgK1xuICAgICdqdXN0IHJlYWNoZWQgaXQgZnJvbSBhIGxhdGVyIHN0YWdlICh0aGlzIGVycm9yIGlzIHJhaXNlZCBpbiB0aGF0IHN0YWdlKS4gQSBzY29wZSwgYW5kIGFueXRoaW5nIHJlYWQgJyArXG4gICAgJ291dCBvZiBpdCAoYHNjb3BlLmtgLCBgc2NvcGUuay5hcnJbMF1gKSwgYmVsb25ncyB0byB0aGUgc3RhZ2UgaXQgd2FzIGhhbmRlZCB0bzsgaGVsZCBwYXN0IHRoYXQgJyArXG4gICAgXCJzdGFnZSdzIGNvbW1pdCBpdCBoYXMgbm8gZnJhbWUgdG8gbGFuZCBpbiwgc28gdGhlIHdyaXRlIHdvdWxkIHZhbmlzaCB3aXRoIG5vIHRyYWNlIHJvdy4gXCIgK1xuICAgIFwiUmVhZCB0aGUga2V5IGFnYWluIHRocm91Z2ggdGhlIENVUlJFTlQgc3RhZ2UncyBzY29wZSBhbmQgd3JpdGUgdGhlcmUuXCJcbiAgKTtcbn1cblxuLyoqXG4gKiBUaGUgd2FybmluZyB0ZXh0IGZvciBhIGtleSB0aGUgc3RhZ2UgV1JPVEUgYWZ0ZXIgY2hhbmdpbmcsIGluIHBsYWNlLCB0aGVcbiAqIGNvbW1pdHRlZCB2YWx1ZSBpdCBoYWQgcmVhZCBiZWZvcmUgaXRzIGZpcnN0IHdyaXRlIChjb3B5LW9uLXdyaXRlLCA5LjI5LjApLlxuICogVGhlIGNvbW1pdCBjb21wYXJlcyB3aGF0IHRoZSBzdGFnZSB3cm90ZSBhZ2FpbnN0IGNvbW1pdHRlZCBzdGF0ZSDigJQgdGhlXG4gKiBvYmplY3QgdGhlIGluLXBsYWNlIGNoYW5nZSBhbHNvIG1vdmVkIOKAlCBzbyBpdCByZWNvcmRzIG5vIGNoYW5nZTogbGl2ZSBzdGF0ZVxuICoga2VlcHMgdGhlIGVkaXQsIHRoZSBsb2cgYW5kIGV2ZXJ5IGZvbGQgZG8gbm90LiAoOS4yOC4wIHJlY29yZGVkIGl0IHdoZW4gdGhlXG4gKiBlZGl0IGNhbWUgYWZ0ZXIgdGhlIGZpcnN0IHdyaXRlLCBieSBhY2NpZGVudCBvZiBhIHdob2xlLXN0YXRlIGNsb25lLilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1pdHRlZE11dGF0aW9uTWVzc2FnZShzdGFnZU5hbWU6IHN0cmluZywga2V5OiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHdoZXJlID0gcGF0aCA9PT0gJycgPyBrZXkgOiBgJHtrZXl9LiR7cGF0aH1gLnJlcGxhY2UoL1xcLlxcWy9nLCAnWycpO1xuICByZXR1cm4gKFxuICAgIGBbZm9vdHByaW50XSBTdGFnZSBcIiR7c3RhZ2VOYW1lfVwiIGNoYW5nZWQgXFxgJHt3aGVyZX1cXGAgSU4gUExBQ0Ugb24gdGhlIGNvbW1pdHRlZCB2YWx1ZSBpdCByZWFkIGJlZm9yZSBgICtcbiAgICAnaXRzIGZpcnN0IHdyaXRlLCB0aGVuIHdyb3RlIHRoZSBrZXkuIFRoZSBjb21taXQgY29tcGFyZXMgdGhlIHdyaXR0ZW4gdmFsdWUgd2l0aCBjb21taXR0ZWQgc3RhdGUg4oCUICcgK1xuICAgICd3aGljaCB0aGUgaW4tcGxhY2UgY2hhbmdlIGFsc28gbW92ZWQg4oCUIHNvIGl0IHJlY29yZHMgTk8gY2hhbmdlOiBsaXZlIHN0YXRlIGtlZXBzIHRoZSBlZGl0LCB0aGUgY29tbWl0ICcgK1xuICAgICdsb2cgYW5kIGV2ZXJ5IHJlYWRlciB0aGF0IGZvbGRzIGl0IGRvIG5vdC4gUmVhZHMgYXJlIEJPUlJPV0VELiBCdWlsZCB0aGUgbmV4dCB2YWx1ZSBpbnN0ZWFkICcgK1xuICAgIGAoXFxgc2NvcGUuJHNldFZhbHVlKCcke2tleX0nLCB7IC4uLnZhbHVlLCDigKYgfSlcXGApLCBvciByZWFkIHRoZSBrZXkgYWdhaW4gYWZ0ZXIgdGhlIHN0YWdlJ3MgZmlyc3QgYCArXG4gICAgXCJ3cml0ZSDigJQgdGhhdCByZWFkIGlzIHRoZSBzdGFnZSdzIG93biBjb3B5LlwiXG4gICk7XG59XG5cbi8qKlxuICogVGhlIHdhcm5pbmcgdGV4dC4gTmFtZXMgdGhlIHN0YWdlLCB0aGUgZXhhY3QgcGF0aCB0aGF0IG1vdmVkLCBhbmQgdGhlIHR3b1xuICogd2F5cyB0byB3cml0ZSBpdCBiYWNrIOKAlCBiZWNhdXNlIFwieW91IG11dGF0ZWQgc29tZXRoaW5nXCIgaXMgbm90IGFjdGlvbmFibGVcbiAqIGFuZCB0aGlzIGlzIHRoZSBvbmUgZmFpbHVyZSBtb2RlIHRoZSB3aG9sZSBkZXNpZ24gZXhpc3RzIHRvIHByZXZlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBib3Jyb3dlZE11dGF0aW9uTWVzc2FnZShzdGFnZU5hbWU6IHN0cmluZywga2V5OiBzdHJpbmcsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHdoZXJlID0gcGF0aCA9PT0gJycgPyBrZXkgOiBgJHtrZXl9LiR7cGF0aH1gLnJlcGxhY2UoL1xcLlxcWy9nLCAnWycpO1xuICByZXR1cm4gKFxuICAgIGBbZm9vdHByaW50XSBTdGFnZSBcIiR7c3RhZ2VOYW1lfVwiIGNoYW5nZWQgXFxgJHt3aGVyZX1cXGAgSU4gUExBQ0UsIG9uIGEgdmFsdWUgaXQgb25seSByZWFkLiBgICtcbiAgICAnZm9vdHByaW50IG5ldmVyIHNhdyB0aGF0IHdyaXRlOiB0aGVyZSBpcyBubyB0cmFjZSByb3cgZm9yIGl0LCBzbyB0aGUgY29tbWl0IGxvZywgdGhlIGNhdXNhbCBjaGFpbiAnICtcbiAgICAnYW5kIGV2ZXJ5IHJlYWRlciB0aGF0IGZvbGRzIHRoZSBsb2cgd2lsbCBkaXNhZ3JlZSB3aXRoIGZpbmFsIHN0YXRlIOKAlCBhbmQgdW5kZXIgYSBkaWZmZXJlbnQgd3JpdGUgJyArXG4gICAgJ29yZGVyIHRoZSBjaGFuZ2UgaXMgZHJvcHBlZCBlbnRpcmVseS4gUmVhZHMgYXJlIEJPUlJPV0VELiAnICtcbiAgICAnV3JpdGUgdGhyb3VnaCB0aGUgc2NvcGUgaW5zdGVhZCAoYHNjb3BlLicgK1xuICAgIHdoZXJlICtcbiAgICAnID0g4oCmYCDigJQgcHJvcGVydHkgYW5kIGluZGV4ZWQgYWNjZXNzIGFyZSBib3RoIHRyYWNrZWQpLCAnICtcbiAgICBgb3IgaGFuZCBiYWNrIHRoZSB3aG9sZSB2YWx1ZSB3aXRoIFxcYHNjb3BlLiRzZXRWYWx1ZSgnJHtrZXl9JywgbmV4dClcXGAuIGAgK1xuICAgICdUaGlzIHVzdWFsbHkgY29tZXMgZnJvbSBtdXRhdGluZyBhbiBlbGVtZW50IHJlYWNoZWQgYnkgYGZpbmRgL2BmaWx0ZXJgL2Bmb3LigKZvZmAvYGZvckVhY2hgLCAnICtcbiAgICAnd2hpY2ggdGhlIHNjb3BlIHByb3h5IGNhbm5vdCBpbnRlcmNlcHQuJ1xuICApO1xufVxuIl19
|
|
130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9ycm93ZWRNdXRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2JvcnJvd2VkTXV0YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQThCRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdkMsOEVBQThFO0FBQzlFLFNBQVMsV0FBVyxDQUFDLE1BQWMsRUFBRSxPQUFlLEVBQUUsU0FBa0I7SUFDdEUsSUFBSSxTQUFTO1FBQUUsT0FBTyxHQUFHLE1BQU0sSUFBSSxPQUFPLEdBQUcsQ0FBQztJQUM5QyxPQUFPLE1BQU0sS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7QUFDMUQsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsTUFBZSxFQUFFLEtBQWMsRUFBRSxNQUFNLEdBQUcsRUFBRSxFQUFFLEtBQUssR0FBRyxDQUFDO0lBQ3hGLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDekQsSUFBSSxLQUFLLElBQUksRUFBRTtRQUFFLE9BQU8sTUFBTSxDQUFDLENBQUMsMkNBQTJDO0lBQzNFLElBQUksTUFBTSxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFFaEgsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxJQUFJLGFBQWEsS0FBSyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8s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QUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekUsT0FBTyxDQUNMLHNCQUFzQixTQUFTLGVBQWUsS0FBSyx3Q0FBd0M7UUFDM0Ysb0dBQW9HO1FBQ3BHLG1HQUFtRztRQUNuRyw0REFBNEQ7UUFDNUQsMENBQTBDO1FBQzFDLEtBQUs7UUFDTCx5REFBeUQ7UUFDekQsd0RBQXdELEdBQUcsY0FBYztRQUN6RSw2RkFBNkY7UUFDN0YseUNBQXlDLENBQzFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBtZW1vcnkvYm9ycm93ZWRNdXRhdGlvbiDigJQgdGhlIGhvbmVzdCBib3VuZGFyeSdzIHR3byB0ZXh0czogdGhlIGRldi1tb2RlXG4gKiBSRVBPUlQgZm9yIGEgd3JpdGUgdGhlIGVuZ2luZSBjYW5ub3Qgc2VlICh7QGxpbmsgYm9ycm93ZWRNdXRhdGlvbk1lc3NhZ2V9KVxuICogYW5kIHRoZSBSRUZVU0FMIGZvciBhIHdyaXRlIGZyb20gYSBoYW5kbGUgaGVsZCBwYXN0IGl0cyBzdGFnZVxuICogKHtAbGluayBkZWFkRnJhbWVNZXNzYWdlfSwgdGhyb3duIGJ5IGBTdGFnZUNvbnRleHQuc3RhZ2VXcml0ZWApLlxuICpcbiAqIOKUgOKUgCBUaGUgaG9uZXN0IGJvdW5kYXJ5IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogVGhlIHR5cGVkIHNjb3BlIGludGVyY2VwdHMgZXZlcnkgd3JpdGUgaXQgY2FuIHJlYWNoOiBhIHByb3BlcnR5IGF0IGFueVxuICogZGVwdGgsIGFuIGluZGV4ZWQgZWxlbWVudCwgYW4gYXJyYXkgbWV0aG9kLiBXaGF0IGl0IGNhbm5vdCByZWFjaCBpcyBhblxuICogZWxlbWVudCBoYW5kZWQgb3V0IGJ5IGEgUkVBRCBNRVRIT0Qg4oCUIGBmaW5kYCwgYGZpbHRlcmAsIGBmb3LigKZvZmAsIGBmb3JFYWNoYCxcbiAqIGRlc3RydWN0dXJpbmcg4oCUIGJlY2F1c2Ugd3JhcHBpbmcgdGhvc2Ugd291bGQgbWVhbiByZXR1cm5pbmcgcHJveGllcyBvdXQgb2ZcbiAqIGV2ZXJ5IHJlYWQgKGBtYXBgIHdvdWxkIGJ1aWxkIGFuIGFycmF5IG9mIHByb3hpZXMsIGBmaWx0ZXJgIHdvdWxkIGNvbXBhcmVcbiAqIHByb3hpZXMsIGEgcmV0dXJuZWQgdmFsdWUgd291bGQgZXNjYXBlIHRoZSBzdGFnZSBzdGlsbCBib3VuZCB0byBpdCkuIFRoYXQgaXNcbiAqIGEgY29zdCB0aGUgbGlicmFyeSBzaG91bGQgbm90IHBheSwgYW5kIGEgc2VtYW50aWMgY2hhbmdlIGl0IHNob3VsZCBub3QgbWFrZS5cbiAqXG4gKiBTbyB0aGUgYW5zd2VyIGZvciB0aGF0IGZhbWlseSBpcyBub3QgaW50ZXJjZXB0aW9uIOKAlCBpdCBpcyBhIFJFUE9SVC4gQSByZWFkXG4gKiBpcyBCT1JST1dFRDsgbXV0YXRpbmcgaXQgaW4gcGxhY2UgaXMgb3V0IG9mIGNvbnRyYWN0LiBUaGlzIG1vZHVsZSBkZXRlY3RzIHRoZVxuICogdmlvbGF0aW9uIGFmdGVyIHRoZSBmYWN0IGFuZCBuYW1lcyBpdCAoYSBkZXYtbW9kZSB3YXJuaW5nIGF0IGNvbW1pdCDigJQgdGhlXG4gKiB3cml0ZSBhbHJlYWR5IGhhcHBlbmVkLCBzbyBpdCBjYW5ub3QgYmUgcmVmdXNlZCksIGluc3RlYWQgb2YgbGV0dGluZyB0aGUgcnVuXG4gKiBlbmQgd2l0aCBhIGNvbW1pdCBsb2cgdGhhdCBkaXNhZ3JlZXMgd2l0aCBmaW5hbCBzdGF0ZSBhbmQgbm90aGluZyBzYXlpbmcgc28uXG4gKlxuICog4pSA4pSAIEhvdyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAqIGByZWFkVHJhY2tpbmc6ICdmdWxsJ2AgKHRoZSBkZWZhdWx0KSBhbHJlYWR5IHJldGFpbnMgYSBDTE9ORSBvZiBldmVyeSB2YWx1ZVxuICogYSBzdGFnZSByZWFkLiBBdCBjb21taXQsIGEga2V5IHRoZSBzdGFnZSByZWFkIGJ1dCBuZXZlciBXUk9URSBtdXN0IHN0aWxsXG4gKiBob2xkIHdoYXQgaXQgaGVsZCBhdCByZWFkIHRpbWUg4oCUIGNvbW1pdHRlZCBzdGF0ZSBpcyBpbW11dGFibGUtYWZ0ZXItc3dhcCBhbmRcbiAqIHRoZSBidWZmZXIncyB3b3JraW5nIGNvcHkgaXMgcHJpdmF0ZS4gSWYgaXQgZGlmZmVycywgdGhlIG9ubHkgdGhpbmcgdGhhdCBjYW5cbiAqIGhhdmUgY2hhbmdlZCBpdCBpcyB0aGUgc3RhZ2UgaXRzZWxmLCBpbiBwbGFjZS5cbiAqXG4gKiBEZXYtbW9kZSBvbmx5IChgZW5hYmxlRGV2TW9kZSgpYCksIHNvIHRoZSBkZWZhdWx0IHJ1biBwYXlzIG5vdGhpbmcgYW5kIGl0c1xuICogYnl0ZXMgYXJlIHVuY2hhbmdlZC5cbiAqL1xuXG5pbXBvcnQgeyBkZWVwRXF1YWwgfSBmcm9tICcuL3V0aWxzLmpzJztcblxuLyoqIFJlbmRlciBvbmUgcGF0aCBzZWdtZW50IGZvciBhIGh1bWFuOiBgbGluZXNbMF0ucXR5YCwgbm90IGBsaW5lcy4wLnF0eWAuICovXG5mdW5jdGlvbiBqb2luU2VnbWVudChwcmVmaXg6IHN0cmluZywgc2VnbWVudDogc3RyaW5nLCBpbnRvQXJyYXk6IGJvb2xlYW4pOiBzdHJpbmcge1xuICBpZiAoaW50b0FycmF5KSByZXR1cm4gYCR7cHJlZml4fVske3NlZ21lbnR9XWA7XG4gIHJldHVybiBwcmVmaXggPT09ICcnID8gc2VnbWVudCA6IGAke3ByZWZpeH0uJHtzZWdtZW50fWA7XG59XG5cbi8qKlxuICogVGhlIGZpcnN0IHBhdGggYXQgd2hpY2ggYGFmdGVyYCBzdG9wcyBhZ3JlZWluZyB3aXRoIGBiZWZvcmVgLCBvciBgdW5kZWZpbmVkYFxuICogd2hlbiB0aGV5IGFyZSBzdHJ1Y3R1cmFsbHkgZXF1YWwuIERlcHRoLWZpcnN0LCBvd24ga2V5cyBvbmx5IOKAlCB0aGUgc2FtZVxuICogc2hhcGVzIGBkZWVwRXF1YWxgIGhhbmRsZXMsIHNpbmNlIGNvbW1pdHRlZCBzdGF0ZSBpcyBKU09OLXNoYXBlZC5cbiAqXG4gKiBDeWNsZS1zYWZlIGJ5IGNvbnN0cnVjdGlvbjogaXQgb25seSByZWN1cnNlcyBpbnRvIHBhaXJzIHRoYXQgYXJlIG5vdCBhbHJlYWR5XG4gKiBgZGVlcEVxdWFsYCwgYW5kIHN0b3BzIGF0IHRoZSBmaXJzdCBkaXNhZ3JlZW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdERpZmZlcmluZ1BhdGgoYmVmb3JlOiB1bmtub3duLCBhZnRlcjogdW5rbm93biwgcHJlZml4ID0gJycsIGRlcHRoID0gMCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChkZWVwRXF1YWwoYmVmb3JlLCBhZnRlciwgJ2NvcGllcycpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoZGVwdGggPj0gMjQpIHJldHVybiBwcmVmaXg7IC8vIHBhdGhvbG9naWNhbCBuZXN0aW5nIOKAlCBuYW1lIHdoYXQgd2UgaGF2ZVxuICBpZiAoYmVmb3JlID09PSBudWxsIHx8IGFmdGVyID09PSBudWxsIHx8IHR5cGVvZiBiZWZvcmUgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBhZnRlciAhPT0gJ29iamVjdCcpIHJldHVybiBwcmVmaXg7XG5cbiAgY29uc3QgYmVmb3JlSXNBcnJheSA9IEFycmF5LmlzQXJyYXkoYmVmb3JlKTtcbiAgaWYgKGJlZm9yZUlzQXJyYXkgIT09IEFycmF5LmlzQXJyYXkoYWZ0ZXIpKSByZXR1cm4gcHJlZml4O1xuXG4gIGlmIChiZWZvcmVJc0FycmF5KSB7XG4gICAgY29uc3QgYSA9IGJlZm9yZSBhcyB1bmtub3duW107XG4gICAgY29uc3QgYiA9IGFmdGVyIGFzIHVua25vd25bXTtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gcHJlZml4O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZGVlcGVyID0gZmlyc3REaWZmZXJpbmdQYXRoKGFbaV0sIGJbaV0sIGpvaW5TZWdtZW50KHByZWZpeCwgU3RyaW5nKGkpLCB0cnVlKSwgZGVwdGggKyAxKTtcbiAgICAgIGlmIChkZWVwZXIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZXBlcjtcbiAgICB9XG4gICAgcmV0dXJuIHByZWZpeDtcbiAgfVxuXG4gIGNvbnN0IGEgPSBiZWZvcmUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGNvbnN0IGIgPSBhZnRlciBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uc3Qga2V5cyA9IG5ldyBTZXQoWy4uLk9iamVjdC5rZXlzKGEpLCAuLi5PYmplY3Qua2V5cyhiKV0pO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgY29uc3QgZGVlcGVyID0gZmlyc3REaWZmZXJpbmdQYXRoKGFba2V5XSwgYltrZXldLCBqb2luU2VnbWVudChwcmVmaXgsIGtleSwgZmFsc2UpLCBkZXB0aCArIDEpO1xuICAgIGlmIChkZWVwZXIgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGRlZXBlcjtcbiAgfVxuICByZXR1cm4gcHJlZml4O1xufVxuXG4vKipcbiAqIFRoZSByZWZ1c2FsIHRleHQgZm9yIGEgd3JpdGUgdGhhdCByZWFjaGVkIGEgZnJhbWUgQUZURVIgaXRzIHN0YWdlIGNvbW1pdHRlZC5cbiAqIEEgc2NvcGUsIGFuZCBldmVyeSBwcm94eSByZWFkIG91dCBvZiBpdCwgaXMgYm91bmQgdG8gdGhlIHN0YWdlIGl0IHdhcyBoYW5kZWRcbiAqIHRvOyBrZXB0IHBhc3QgdGhhdCBzdGFnZSdzIGNvbW1pdCBpdCBoYXMgbm8gZnJhbWUgdG8gbGFuZCBpbiwgc28gdGhlIHdyaXRlXG4gKiB3b3VsZCBzaXQgaW4gYSBidWZmZXIgbm90aGluZyBldmVyIGNvbW1pdHMg4oCUIG5vIHRyYWNlIHJvdywgc3RhdGUgdW5jaGFuZ2VkLlxuICogVGhlIHRocm93IHN1cmZhY2VzIGluIHRoZSBzdGFnZSB0aGF0IG1hZGUgdGhlIHdyaXRlICh0aGUgZW5naW5lJ3MgZXJyb3JcbiAqIHBhdGggbmFtZXMgaXQpOyB0aGlzIHRleHQgbmFtZXMgdGhlIHN0YWdlIHRoZSBoYW5kbGUgY2FtZSBmcm9tLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVhZEZyYW1lTWVzc2FnZShzdGFnZU5hbWU6IHN0cmluZywgcnVudGltZVN0YWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwga2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBmcm9tID0gcnVudGltZVN0YWdlSWQgPyBgXCIke3N0YWdlTmFtZX1cIiAoJHtydW50aW1lU3RhZ2VJZH0pYCA6IGBcIiR7c3RhZ2VOYW1lfVwiYDtcbiAgcmV0dXJuIChcbiAgICBgW2Zvb3RwcmludF0gU3RhZ2UgJHtmcm9tfSBoYXMgYWxyZWFkeSBjb21taXR0ZWQg4oCUIGl0cyBzY29wZSBpcyBkZWFkLCBhbmQgYSB3cml0ZSB0byBcXGAke2tleX1cXGAgYCArXG4gICAgJ2p1c3QgcmVhY2hlZCBpdCBmcm9tIGEgbGF0ZXIgc3RhZ2UgKHRoaXMgZXJyb3IgaXMgcmFpc2VkIGluIHRoYXQgc3RhZ2UpLiBBIHNjb3BlLCBhbmQgYW55dGhpbmcgcmVhZCAnICtcbiAgICAnb3V0IG9mIGl0IChgc2NvcGUua2AsIGBzY29wZS5rLmFyclswXWApLCBiZWxvbmdzIHRvIHRoZSBzdGFnZSBpdCB3YXMgaGFuZGVkIHRvOyBoZWxkIHBhc3QgdGhhdCAnICtcbiAgICBcInN0YWdlJ3MgY29tbWl0IGl0IGhhcyBubyBmcmFtZSB0byBsYW5kIGluLCBzbyB0aGUgd3JpdGUgd291bGQgdmFuaXNoIHdpdGggbm8gdHJhY2Ugcm93LiBcIiArXG4gICAgXCJSZWFkIHRoZSBrZXkgYWdhaW4gdGhyb3VnaCB0aGUgQ1VSUkVOVCBzdGFnZSdzIHNjb3BlIGFuZCB3cml0ZSB0aGVyZS5cIlxuICApO1xufVxuXG4vKipcbiAqIFRoZSB3YXJuaW5nIHRleHQgZm9yIGEga2V5IHRoZSBzdGFnZSBXUk9URSBhZnRlciBjaGFuZ2luZywgaW4gcGxhY2UsIHRoZVxuICogY29tbWl0dGVkIHZhbHVlIGl0IGhhZCByZWFkIGJlZm9yZSBpdHMgZmlyc3Qgd3JpdGUgKGNvcHktb24td3JpdGUsIDkuMjkuMCkuXG4gKiBUaGUgY29tbWl0IGNvbXBhcmVzIHdoYXQgdGhlIHN0YWdlIHdyb3RlIGFnYWluc3QgY29tbWl0dGVkIHN0YXRlIOKAlCB0aGVcbiAqIG9iamVjdCB0aGUgaW4tcGxhY2UgY2hhbmdlIGFsc28gbW92ZWQg4oCUIHNvIGl0IHJlY29yZHMgbm8gY2hhbmdlOiBsaXZlIHN0YXRlXG4gKiBrZWVwcyB0aGUgZWRpdCwgdGhlIGxvZyBhbmQgZXZlcnkgZm9sZCBkbyBub3QuICg5LjI4LjAgcmVjb3JkZWQgaXQgd2hlbiB0aGVcbiAqIGVkaXQgY2FtZSBhZnRlciB0aGUgZmlyc3Qgd3JpdGUsIGJ5IGFjY2lkZW50IG9mIGEgd2hvbGUtc3RhdGUgY2xvbmUuKVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWl0dGVkTXV0YXRpb25NZXNzYWdlKHN0YWdlTmFtZTogc3RyaW5nLCBrZXk6IHN0cmluZywgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgd2hlcmUgPSBwYXRoID09PSAnJyA/IGtleSA6IGAke2tleX0uJHtwYXRofWAucmVwbGFjZSgvXFwuXFxbL2csICdbJyk7XG4gIHJldHVybiAoXG4gICAgYFtmb290cHJpbnRdIFN0YWdlIFwiJHtzdGFnZU5hbWV9XCIgY2hhbmdlZCBcXGAke3doZXJlfVxcYCBJTiBQTEFDRSBvbiB0aGUgY29tbWl0dGVkIHZhbHVlIGl0IHJlYWQgYmVmb3JlIGAgK1xuICAgICdpdHMgZmlyc3Qgd3JpdGUsIHRoZW4gd3JvdGUgdGhlIGtleS4gVGhlIGNvbW1pdCBjb21wYXJlcyB0aGUgd3JpdHRlbiB2YWx1ZSB3aXRoIGNvbW1pdHRlZCBzdGF0ZSDigJQgJyArXG4gICAgJ3doaWNoIHRoZSBpbi1wbGFjZSBjaGFuZ2UgYWxzbyBtb3ZlZCDigJQgc28gaXQgcmVjb3JkcyBOTyBjaGFuZ2U6IGxpdmUgc3RhdGUga2VlcHMgdGhlIGVkaXQsIHRoZSBjb21taXQgJyArXG4gICAgJ2xvZyBhbmQgZXZlcnkgcmVhZGVyIHRoYXQgZm9sZHMgaXQgZG8gbm90LiBSZWFkcyBhcmUgQk9SUk9XRUQuIEJ1aWxkIHRoZSBuZXh0IHZhbHVlIGluc3RlYWQgJyArXG4gICAgYChcXGBzY29wZS4kc2V0VmFsdWUoJyR7a2V5fScsIHsgLi4udmFsdWUsIOKApiB9KVxcYCksIG9yIHJlYWQgdGhlIGtleSBhZ2FpbiBhZnRlciB0aGUgc3RhZ2UncyBmaXJzdCBgICtcbiAgICBcIndyaXRlIOKAlCB0aGF0IHJlYWQgaXMgdGhlIHN0YWdlJ3Mgb3duIGNvcHkuXCJcbiAgKTtcbn1cblxuLyoqXG4gKiBUaGUgd2FybmluZyB0ZXh0LiBOYW1lcyB0aGUgc3RhZ2UsIHRoZSBleGFjdCBwYXRoIHRoYXQgbW92ZWQsIGFuZCB0aGUgdHdvXG4gKiB3YXlzIHRvIHdyaXRlIGl0IGJhY2sg4oCUIGJlY2F1c2UgXCJ5b3UgbXV0YXRlZCBzb21ldGhpbmdcIiBpcyBub3QgYWN0aW9uYWJsZVxuICogYW5kIHRoaXMgaXMgdGhlIG9uZSBmYWlsdXJlIG1vZGUgdGhlIHdob2xlIGRlc2lnbiBleGlzdHMgdG8gcHJldmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJvcnJvd2VkTXV0YXRpb25NZXNzYWdlKHN0YWdlTmFtZTogc3RyaW5nLCBrZXk6IHN0cmluZywgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgd2hlcmUgPSBwYXRoID09PSAnJyA/IGtleSA6IGAke2tleX0uJHtwYXRofWAucmVwbGFjZSgvXFwuXFxbL2csICdbJyk7XG4gIHJldHVybiAoXG4gICAgYFtmb290cHJpbnRdIFN0YWdlIFwiJHtzdGFnZU5hbWV9XCIgY2hhbmdlZCBcXGAke3doZXJlfVxcYCBJTiBQTEFDRSwgb24gYSB2YWx1ZSBpdCBvbmx5IHJlYWQuIGAgK1xuICAgICdmb290cHJpbnQgbmV2ZXIgc2F3IHRoYXQgd3JpdGU6IHRoZXJlIGlzIG5vIHRyYWNlIHJvdyBmb3IgaXQsIHNvIHRoZSBjb21taXQgbG9nLCB0aGUgY2F1c2FsIGNoYWluICcgK1xuICAgICdhbmQgZXZlcnkgcmVhZGVyIHRoYXQgZm9sZHMgdGhlIGxvZyB3aWxsIGRpc2FncmVlIHdpdGggZmluYWwgc3RhdGUg4oCUIGFuZCB1bmRlciBhIGRpZmZlcmVudCB3cml0ZSAnICtcbiAgICAnb3JkZXIgdGhlIGNoYW5nZSBpcyBkcm9wcGVkIGVudGlyZWx5LiBSZWFkcyBhcmUgQk9SUk9XRUQuICcgK1xuICAgICdXcml0ZSB0aHJvdWdoIHRoZSBzY29wZSBpbnN0ZWFkIChgc2NvcGUuJyArXG4gICAgd2hlcmUgK1xuICAgICcgPSDigKZgIOKAlCBwcm9wZXJ0eSBhbmQgaW5kZXhlZCBhY2Nlc3MgYXJlIGJvdGggdHJhY2tlZCksICcgK1xuICAgIGBvciBoYW5kIGJhY2sgdGhlIHdob2xlIHZhbHVlIHdpdGggXFxgc2NvcGUuJHNldFZhbHVlKCcke2tleX0nLCBuZXh0KVxcYC4gYCArXG4gICAgJ1RoaXMgdXN1YWxseSBjb21lcyBmcm9tIG11dGF0aW5nIGFuIGVsZW1lbnQgcmVhY2hlZCBieSBgZmluZGAvYGZpbHRlcmAvYGZvcuKApm9mYC9gZm9yRWFjaGAsICcgK1xuICAgICd3aGljaCB0aGUgc2NvcGUgcHJveHkgY2Fubm90IGludGVyY2VwdC4nXG4gICk7XG59XG4iXX0=
|