footprintjs 9.24.0 → 9.26.0
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/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +4 -1
- package/dist/esm/lib/memory/utils.d.ts +10 -0
- package/dist/esm/lib/memory/utils.js +14 -2
- package/dist/esm/lib/runner/stringifySnapshot.d.ts +21 -0
- package/dist/esm/lib/runner/stringifySnapshot.js +122 -0
- package/dist/esm/lib/time-travel/stateAt.d.ts +26 -0
- package/dist/esm/lib/time-travel/stateAt.js +51 -35
- package/dist/esm/lib/time-travel/timeTravel.js +7 -3
- package/dist/index.js +6 -2
- package/dist/lib/memory/utils.js +17 -4
- package/dist/lib/runner/stringifySnapshot.js +126 -0
- package/dist/lib/time-travel/stateAt.js +53 -36
- package/dist/lib/time-travel/timeTravel.js +6 -2
- package/dist/types/index.d.ts +1 -0
- package/dist/types/lib/memory/utils.d.ts +10 -0
- package/dist/types/lib/runner/stringifySnapshot.d.ts +21 -0
- package/dist/types/lib/time-travel/stateAt.d.ts +26 -0
- package/package.json +2 -1
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* runs through `applySmartMerge`, the one verb switch the live commit itself
|
|
8
8
|
* uses. There is deliberately no second implementation of the verbs here.
|
|
9
9
|
*/
|
|
10
|
-
import {
|
|
10
|
+
import { applySmartMergeInto } from '../memory/utils.js';
|
|
11
11
|
import { readLog } from './bundles.js';
|
|
12
12
|
/** Deeply freeze a POJO tree so a fold result cannot be mutated by its holder. */
|
|
13
13
|
function freezeDeep(value) {
|
|
@@ -53,49 +53,65 @@ export function readSource(source) {
|
|
|
53
53
|
* With a single leg this is the 9.17.0 fold, unchanged.
|
|
54
54
|
*/
|
|
55
55
|
export function foldLegs(legs, legIdx, through) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
56
|
+
return foldLegsFrom(legs, legIdx, through).folded;
|
|
57
|
+
}
|
|
58
|
+
/** Apply `log[from + 1 .. end]` of one leg into `out`, collecting the leg's facts. */
|
|
59
|
+
function applyLeg(out, leg, from, end, redactedPaths, skipped) {
|
|
60
|
+
for (const gap of leg.gaps) {
|
|
61
|
+
if (gap.index > from && gap.index <= end)
|
|
62
|
+
(skipped ??= []).push(gap);
|
|
63
|
+
}
|
|
64
|
+
for (let i = from + 1; i <= end; i++) {
|
|
65
|
+
const bundle = leg.log[i];
|
|
66
|
+
if (!bundle)
|
|
67
|
+
continue;
|
|
68
|
+
for (const path of bundle.redactedPaths ?? [])
|
|
69
|
+
redactedPaths.add(path);
|
|
70
|
+
applySmartMergeInto(out, bundle.updates, bundle.overwrite, bundle.trace);
|
|
71
|
+
}
|
|
72
|
+
return skipped;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* The fold, resumable. ONE clone per fold: the base is cloned once (or `{}`
|
|
76
|
+
* stands in), every bundle is applied INTO that copy, and the state handed
|
|
77
|
+
* out is one more clone, frozen — so the working copy stays private and a
|
|
78
|
+
* later step can continue from it. Same answer as the 9.17.0 fold, pinned by
|
|
79
|
+
* test/lib/time-travel/fold-memo.test.ts against a fresh fold at every stop.
|
|
80
|
+
*/
|
|
81
|
+
export function foldLegsFrom(legs, legIdx, through, memo) {
|
|
82
|
+
const last = legs[legIdx];
|
|
83
|
+
const endOnLeg = last ? Math.min(through, last.log.length - 1) : -1;
|
|
84
|
+
const lastThrough = endOnLeg < -1 ? -1 : endOnLeg;
|
|
85
|
+
const resumable = memo !== undefined && memo.legIdx === legIdx && lastThrough >= memo.through;
|
|
86
|
+
let based = resumable ? memo.based : false;
|
|
87
|
+
let out = resumable ? memo.out : {};
|
|
88
|
+
const redactedPaths = new Set(resumable ? memo.redactedPaths : []);
|
|
89
|
+
let skipped = resumable && memo.skipped ? [...memo.skipped] : undefined;
|
|
90
|
+
if (resumable) {
|
|
91
|
+
if (last)
|
|
92
|
+
skipped = applyLeg(out, last, memo.through, lastThrough, redactedPaths, skipped);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
for (let leg = 0; leg <= legIdx && leg < legs.length; leg++) {
|
|
96
|
+
const source = legs[leg];
|
|
97
|
+
if (source.base && typeof source.base === 'object') {
|
|
98
|
+
out = structuredClone(source.base);
|
|
99
|
+
based = true;
|
|
100
|
+
}
|
|
101
|
+
const end = leg === legIdx ? lastThrough : source.log.length - 1;
|
|
102
|
+
skipped = applyLeg(out, source, -1, end, redactedPaths, skipped);
|
|
81
103
|
}
|
|
82
104
|
}
|
|
83
105
|
const basis = based ? 'initial+log' : 'log-only';
|
|
84
|
-
|
|
85
|
-
// Law 3, both halves. `applySmartMerge` clones what it OVERWRITES, but the
|
|
86
|
-
// merge arm's array union (`deepSmartMerge`) carries source element
|
|
87
|
-
// REFERENCES out of `bundle.updates`. Freezing that directly would freeze
|
|
88
|
-
// the engine's own recorded bundle — a read-only query mutating the
|
|
89
|
-
// record. Cloning first detaches those leaves, and costs one clone of the
|
|
90
|
-
// final state, not one per bundle.
|
|
106
|
+
const folded = {
|
|
91
107
|
state: freezeDeep(structuredClone(out)),
|
|
92
108
|
basis,
|
|
93
109
|
redacted: redactedPaths.size > 0,
|
|
94
110
|
redactedPaths: Object.freeze([...redactedPaths].sort()),
|
|
95
111
|
throughCommitIdx: lastThrough,
|
|
96
|
-
// ABSENT when clean: a fold over a live snapshot keeps the 9.17.0 shape.
|
|
97
112
|
...(skipped ? { skipped: Object.freeze(skipped) } : {}),
|
|
98
113
|
};
|
|
114
|
+
return { folded, memo: { legIdx, through: lastThrough, out, based, redactedPaths, skipped } };
|
|
99
115
|
}
|
|
100
116
|
/**
|
|
101
117
|
* Fold `source`'s log from its base up to and including `commitIdx`.
|
|
@@ -143,4 +159,4 @@ export function stateAt(source, commitIdx) {
|
|
|
143
159
|
const asked = Number.isNaN(commitIdx) ? -1 : Math.floor(commitIdx);
|
|
144
160
|
return foldLegs([readSource(source)], 0, asked);
|
|
145
161
|
}
|
|
146
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGVBdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdGltZS10cmF2ZWwvc3RhdGVBdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUdILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBR3ZDLGtGQUFrRjtBQUNsRixTQUFTLFVBQVUsQ0FBSSxLQUFRO0lBQzdCLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDOUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3BELE1BQU0sS0FBSyxHQUFJLEtBQWlDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEQsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQVNEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLE1BQThCO0lBQ3ZELE1BQU0sSUFBSSxHQUFJLE1BQWlFLEVBQUUsWUFBWSxDQUFDO0lBQzlGLElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUNoRCxNQUFNLE9BQU8sR0FBRyxNQUE0QyxDQUFDO0lBQzdELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FB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QyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsS0FBSztRQUNMLFFBQVEsRUFBRSxhQUFhLENBQUMsSUFBSSxHQUFHLENBQUM7UUFDaEMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3ZELGdCQUFnQixFQUFFLFdBQVc7UUFDN0IseUVBQXlFO1FBQ3pFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3hELENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9DRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUMsTUFBOEIsRUFBRSxTQUFpQjtJQUN2RSwyRUFBMkU7SUFDM0UseUVBQXlFO0lBQ3pFLHVFQUF1RTtJQUN2RSwyRUFBMkU7SUFDM0UsZUFBZTtJQUNmLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25FLE9BQU8sUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ2xELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHN0YXRlQXQg4oCUIHRoZSBmb2xkIGF0IGEgc3RvcC5cbiAqXG4gKiBUaGUgY29tbWl0IGxvZyBzdG9yZXMgRElGRlMuIFJlcGxheWluZyB0aGVtIG9udG8gdGhlIHJ1bidzIGZvbGQgYmFzZVxuICogcmVwcm9kdWNlcyB0aGUgc3RhdGUgYXMgaXQgc3Rvb2QgYWZ0ZXIgYW55IGNvbW1pdCDigJQgYnl0ZS1mb3ItYnl0ZSB0aGUgc3RhdGVcbiAqIHRoZSBuZXh0IHN0YWdlIHNhdywgaW4gYm90aCBgY29tbWl0VmFsdWVzYCBlbmNvZGluZ3MsIGJlY2F1c2UgdGhlIHJlcGxheVxuICogcnVucyB0aHJvdWdoIGBhcHBseVNtYXJ0TWVyZ2VgLCB0aGUgb25lIHZlcmIgc3dpdGNoIHRoZSBsaXZlIGNvbW1pdCBpdHNlbGZcbiAqIHVzZXMuIFRoZXJlIGlzIGRlbGliZXJhdGVseSBubyBzZWNvbmQgaW1wbGVtZW50YXRpb24gb2YgdGhlIHZlcmJzIGhlcmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21taXRCdW5kbGUsIE1lbW9yeVBhdGNoIH0gZnJvbSAnLi4vbWVtb3J5L3R5cGVzLmpzJztcbmltcG9ydCB7IGFwcGx5U21hcnRNZXJnZSB9IGZyb20gJy4uL21lbW9yeS91dGlscy5qcyc7XG5pbXBvcnQgeyByZWFkTG9nIH0gZnJvbSAnLi9idW5kbGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRm9sZEJhc2lzLCBGb2xkZWRTdGF0ZSwgRm9sZFNvdXJjZSwgTG9nR2FwIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKiBEZWVwbHkgZnJlZXplIGEgUE9KTyB0cmVlIHNvIGEgZm9sZCByZXN1bHQgY2Fubm90IGJlIG11dGF0ZWQgYnkgaXRzIGhvbGRlci4gKi9cbmZ1bmN0aW9uIGZyZWV6ZURlZXA8VD4odmFsdWU6IFQpOiBUIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiB2YWx1ZTtcbiAgT2JqZWN0LmZyZWV6ZSh2YWx1ZSk7XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHZhbHVlKSkge1xuICAgIGNvbnN0IGlubmVyID0gKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldO1xuICAgIGlmIChpbm5lciAmJiB0eXBlb2YgaW5uZXIgPT09ICdvYmplY3QnICYmICFPYmplY3QuaXNGcm96ZW4oaW5uZXIpKSBmcmVlemVEZWVwKGlubmVyKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKiBPbmUgc291cmNlLCByZWFkOiBpdHMgbG9nIChnYXBzIGhlbGQgaW4gcGxhY2UpIGFuZCBpdHMgZm9sZCBiYXNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFkU291cmNlIHtcbiAgcmVhZG9ubHkgbG9nOiByZWFkb25seSBDb21taXRCdW5kbGVbXTtcbiAgcmVhZG9ubHkgZ2FwczogcmVhZG9ubHkgTG9nR2FwW107XG4gIHJlYWRvbmx5IGJhc2U6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlYWQgd2hpY2hldmVyIHNoYXBlIHRoZSBjYWxsZXIgaGFuZGVkIHVzIOKAlCBgY29tbWl0TG9nYCAoYSBydW4gc25hcHNob3QpIG9yXG4gKiBgaGlzdG9yeWAgKGEgc3ViZmxvdydzIG93biBsb2cpIOKAlCBuYXJyb3dpbmcgdGhlIHJvd3MgdG8gY29tbWl0IGJ1bmRsZXMgYXMgaXRcbiAqIGdvZXMgKHNlZSBgYnVuZGxlcy50c2A6IGEgcm93IHRoYXQgaXMgbm90IG9uZSBiZWNvbWVzIGFuIGluZGV4LWhvbGRpbmcgZ2FwKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRTb3VyY2Uoc291cmNlOiBGb2xkU291cmNlIHwgdW5kZWZpbmVkKTogUmVhZFNvdXJjZSB7XG4gIGNvbnN0IGJhc2UgPSAoc291cmNlIGFzIHsgaW5pdGlhbFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfSB8IHVuZGVmaW5lZCk/LmluaXRpYWxTdGF0ZTtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiB7IGxvZzogW10sIGdhcHM6IFtdLCBiYXNlIH07XG4gIGNvbnN0IHdpdGhMb2cgPSBzb3VyY2UgYXMgeyBjb21taXRMb2c/OiByZWFkb25seSB1bmtub3duW10gfTtcbiAgY29uc3QgcmF3ID0gQXJyYXkuaXNBcnJheSh3aXRoTG9nLmNvbW1pdExvZylcbiAgICA/IHdpdGhMb2cuY29tbWl0TG9nXG4gICAgOiBBcnJheS5pc0FycmF5KChzb3VyY2UgYXMgeyBoaXN0b3J5PzogcmVhZG9ubHkgdW5rbm93bltdIH0pLmhpc3RvcnkpXG4gICAgPyAoc291cmNlIGFzIHsgaGlzdG9yeTogcmVhZG9ubHkgdW5rbm93bltdIH0pLmhpc3RvcnlcbiAgICA6IHVuZGVmaW5lZDtcbiAgY29uc3QgeyBsb2csIGdhcHMgfSA9IHJlYWRMb2cocmF3KTtcbiAgcmV0dXJuIHsgbG9nLCBnYXBzLCBiYXNlIH07XG59XG5cbi8qKlxuICogRm9sZCBvbmUgY2hhaW4gb2YgbGVnczogZXZlcnkgbGVnIEJFRk9SRSBgbGVnSWR4YCBpbiBmdWxsLCB0aGVuIGBsZWdJZHhgXG4gKiB0aHJvdWdoIGB0aHJvdWdoYC5cbiAqXG4gKiBUSEUgTEVHIFJVTEUuIEEgbGVnIHRoYXQgY2FycmllcyBpdHMgb3duIGBpbml0aWFsU3RhdGVgIFJFU1RBUlRTIHRoZVxuICogYWNjdW11bGF0aW9uIGZyb20gaXQg4oCUIG9uIGEgcGF1c2UvcmVzdW1lIHRoYXQgYmFzZSBJUyB0aGUgc3RhdGUgYXQgdGhlXG4gKiBwYXVzZSwgcmVjb3JkZWQgYnkgdGhlIGVuZ2luZSwgYW5kIGlzIGF1dGhvcml0YXRpdmUgb3ZlciBhbnl0aGluZyB0aGVcbiAqIHByZXZpb3VzIGxlZydzIGxvZyByZWJ1aWx0LiBBIGxlZyB3aXRoIG5vIGJhc2UgKGEgcHJlLTkuMTcgc25hcHNob3QsIGFcbiAqIGhhbmQtYnVpbHQgbG9nKSBDT05USU5VRVMgZnJvbSB3aGF0IHRoZSBlYXJsaWVyIGxlZ3MgZm9sZGVkLCB3aGljaCBpcyB0aGVcbiAqIGJlc3QgaG9uZXN0IGFuc3dlciBhdmFpbGFibGUgYW5kIGlzIGV4YWN0bHkgd2hhdCBgYmFzaXNgIHRoZW4gcmVwb3J0cy5cbiAqXG4gKiBXaXRoIGEgc2luZ2xlIGxlZyB0aGlzIGlzIHRoZSA5LjE3LjAgZm9sZCwgdW5jaGFuZ2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9sZExlZ3MobGVnczogcmVhZG9ubHkgUmVhZFNvdXJjZVtdLCBsZWdJZHg6IG51bWJlciwgdGhyb3VnaDogbnVtYmVyKTogRm9sZGVkU3RhdGUge1xuICBsZXQgYmFzZWQgPSBmYWxzZTtcbiAgbGV0IG91dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgY29uc3QgcmVkYWN0ZWRQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBsZXQgc2tpcHBlZDogTG9nR2FwW10gfCB1bmRlZmluZWQ7XG4gIGxldCBsYXN0VGhyb3VnaCA9IC0xO1xuXG4gIGZvciAobGV0IGxlZyA9IDA7IGxlZyA8PSBsZWdJZHggJiYgbGVnIDwgbGVncy5sZW5ndGg7IGxlZysrKSB7XG4gICAgY29uc3QgeyBsb2csIGdhcHMsIGJhc2UgfSA9IGxlZ3NbbGVnXTtcbiAgICBpZiAoYmFzZSAmJiB0eXBlb2YgYmFzZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIG91dCA9IHN0cnVjdHVyZWRDbG9uZShiYXNlKTtcbiAgICAgIGJhc2VkID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgZW5kID0gbGVnID09PSBsZWdJZHggPyBNYXRoLm1pbih0aHJvdWdoLCBsb2cubGVuZ3RoIC0gMSkgOiBsb2cubGVuZ3RoIC0gMTtcbiAgICBpZiAobGVnID09PSBsZWdJZHgpIGxhc3RUaHJvdWdoID0gZW5kIDwgLTEgPyAtMSA6IGVuZDtcbiAgICBmb3IgKGNvbnN0IGdhcCBvZiBnYXBzKSB7XG4gICAgICBpZiAoZ2FwLmluZGV4IDw9IGVuZCkgKHNraXBwZWQgPz89IFtdKS5wdXNoKGdhcCk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICBjb25zdCBidW5kbGUgPSBsb2dbaV07XG4gICAgICBpZiAoIWJ1bmRsZSkgY29udGludWU7XG4gICAgICBmb3IgKGNvbnN0IHBhdGggb2YgYnVuZGxlLnJlZGFjdGVkUGF0aHMgPz8gW10pIHJlZGFjdGVkUGF0aHMuYWRkKHBhdGgpO1xuICAgICAgb3V0ID0gYXBwbHlTbWFydE1lcmdlKG91dCwgYnVuZGxlLnVwZGF0ZXMgYXMgTWVtb3J5UGF0Y2gsIGJ1bmRsZS5vdmVyd3JpdGUgYXMgTWVtb3J5UGF0Y2gsIGJ1bmRsZS50cmFjZSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYmFzaXM6IEZvbGRCYXNpcyA9IGJhc2VkID8gJ2luaXRpYWwrbG9nJyA6ICdsb2ctb25seSc7XG4gIHJldHVybiB7XG4gICAgLy8gTGF3IDMsIGJvdGggaGFsdmVzLiBgYXBwbHlTbWFydE1lcmdlYCBjbG9uZXMgd2hhdCBpdCBPVkVSV1JJVEVTLCBidXQgdGhlXG4gICAgLy8gbWVyZ2UgYXJtJ3MgYXJyYXkgdW5pb24gKGBkZWVwU21hcnRNZXJnZWApIGNhcnJpZXMgc291cmNlIGVsZW1lbnRcbiAgICAvLyBSRUZFUkVOQ0VTIG91dCBvZiBgYnVuZGxlLnVwZGF0ZXNgLiBGcmVlemluZyB0aGF0IGRpcmVjdGx5IHdvdWxkIGZyZWV6ZVxuICAgIC8vIHRoZSBlbmdpbmUncyBvd24gcmVjb3JkZWQgYnVuZGxlIOKAlCBhIHJlYWQtb25seSBxdWVyeSBtdXRhdGluZyB0aGVcbiAgICAvLyByZWNvcmQuIENsb25pbmcgZmlyc3QgZGV0YWNoZXMgdGhvc2UgbGVhdmVzLCBhbmQgY29zdHMgb25lIGNsb25lIG9mIHRoZVxuICAgIC8vIGZpbmFsIHN0YXRlLCBub3Qgb25lIHBlciBidW5kbGUuXG4gICAgc3RhdGU6IGZyZWV6ZURlZXAoc3RydWN0dXJlZENsb25lKG91dCkpLFxuICAgIGJhc2lzLFxuICAgIHJlZGFjdGVkOiByZWRhY3RlZFBhdGhzLnNpemUgPiAwLFxuICAgIHJlZGFjdGVkUGF0aHM6IE9iamVjdC5mcmVlemUoWy4uLnJlZGFjdGVkUGF0aHNdLnNvcnQoKSksXG4gICAgdGhyb3VnaENvbW1pdElkeDogbGFzdFRocm91Z2gsXG4gICAgLy8gQUJTRU5UIHdoZW4gY2xlYW46IGEgZm9sZCBvdmVyIGEgbGl2ZSBzbmFwc2hvdCBrZWVwcyB0aGUgOS4xNy4wIHNoYXBlLlxuICAgIC4uLihza2lwcGVkID8geyBza2lwcGVkOiBPYmplY3QuZnJlZXplKHNraXBwZWQpIH0gOiB7fSksXG4gIH07XG59XG5cbi8qKlxuICogRm9sZCBgc291cmNlYCdzIGxvZyBmcm9tIGl0cyBiYXNlIHVwIHRvIGFuZCBpbmNsdWRpbmcgYGNvbW1pdElkeGAuXG4gKlxuICogQHBhcmFtIHNvdXJjZSAgICBBIHJ1biBzbmFwc2hvdCAoYGNvbW1pdExvZ2AgKyBgaW5pdGlhbFN0YXRlYCkgb3IgYSBzdWJmbG93XG4gKiAgICAgICAgICAgICAgICAgIHN1YnRyZWUgKGBoaXN0b3J5YCArIGBpbml0aWFsU3RhdGVgKS4gQm90aCBzcGVsbGluZ3Mgd29yayxcbiAqICAgICAgICAgICAgICAgICAgYW5kIHRoZSByb3dzIG1heSBiZSB1bnZhbGlkYXRlZCAoYHVua25vd25bXWApIOKAlCBhIHJvdyB0aGF0XG4gKiAgICAgICAgICAgICAgICAgIGlzIG5vdCBhIGNvbW1pdCBidW5kbGUgaXMgc2tpcHBlZCBhbmQgUkVQT1JURUQsIGJ5IGluZGV4LFxuICogICAgICAgICAgICAgICAgICBpbiB7QGxpbmsgRm9sZGVkU3RhdGUuc2tpcHBlZH0sIG5ldmVyIGNyYXNoZWQgb24uXG4gKiBAcGFyYW0gY29tbWl0SWR4IEFSUkFZIElOREVYIG9mIHRoZSBsYXN0IGJ1bmRsZSB0byBmb2xkLCBpbmNsdXNpdmUuIGAtMWBcbiAqICAgICAgICAgICAgICAgICAgKG9yIGFueSBuZWdhdGl2ZSkgZm9sZHMgbm90aGluZyBhbmQgcmV0dXJucyB0aGUgYmFzZSDigJRcbiAqICAgICAgICAgICAgICAgICAgdGhlIHN0YXRlIGJlZm9yZSB0aGUgcnVuJ3MgZmlyc3QgY29tbWl0LiBQYXN0IHRoZSBlbmRcbiAqICAgICAgICAgICAgICAgICAgY2xhbXBzIHRvIHRoZSBlbmQ7IHRoZSByZXN1bHQncyBgdGhyb3VnaENvbW1pdElkeGAgcmVwb3J0c1xuICogICAgICAgICAgICAgICAgICB3aGVyZSB0aGUgZm9sZCBhY3R1YWxseSBzdG9wcGVkLlxuICpcbiAqIEByZXR1cm5zIEEgZGV0YWNoZWQsIGRlZXBseSBmcm96ZW4gc3RhdGUgcGx1cyBob3cgaXQgd2FzIGRlcml2ZWQ6IGBiYXNpc2BcbiAqICAgc2F5cyB3aGV0aGVyIHRoZSByZWFsIGZvbGQgYmFzZSB3YXMgYXZhaWxhYmxlLCBgcmVkYWN0ZWRgIC9cbiAqICAgYHJlZGFjdGVkUGF0aHNgIHNheSB3aGVyZSB0aGUgbG9nIHdhcyBzY3J1YmJlZCBhdCB3cml0ZSB0aW1lLCBhbmRcbiAqICAgYHNraXBwZWRgIHNheXMgd2hpY2ggcm93cyBjb3VsZCBub3QgYmUgcmVhZC4gVGhlIGVuZ2luZSByZWRhY3RzIHZhbHVlcyBhc1xuICogICBpdCByZWNvcmRzIHRoZW0sIHNvIGEgcmVwbGF5IG9mIGEgcmVkYWN0ZWQgcnVuIHlpZWxkcyBgJ1JFREFDVEVEJ2AgaW5cbiAqICAgdGhvc2UgcGxhY2VzIOKAlCBjb3JyZWN0LCBhbmQgc2FpZCBvdXQgbG91ZCByYXRoZXIgdGhhbiBwcmVzZW50ZWQgYXMgdGhlXG4gKiAgIHJlYWwgdmFsdWUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNuYXBzaG90ID0gZXhlY3V0b3IuZ2V0U25hcHNob3QoKTtcbiAqIGNvbnN0IHsgc3RhdGUsIGJhc2lzIH0gPSBzdGF0ZUF0KHNuYXBzaG90LCAzKTsgICAvLyBhZnRlciB0aGUgNHRoIGNvbW1pdFxuICogY29uc29sZS5sb2coYmFzaXMsIHN0YXRlKTsgICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5pdGlhbCtsb2cnIHsgLi4uIH1cbiAqXG4gKiAvLyBBIHN1YmZsb3cncyBvd24gbG9nIGZvbGRzIGlkZW50aWNhbGx5OlxuICogY29uc3QgaW5uZXIgPSBnZXRTdWJ0cmVlU25hcHNob3Qoc25hcHNob3QsICdzZi1wYXltZW50JykhO1xuICogc3RhdGVBdChpbm5lciwgMCkuc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZnRlciB0aGUgc3ViZmxvdydzIGZpcnN0IGNvbW1pdFxuICpcbiAqIC8vIEEgU1RPUkVEIHJlY29yZGluZyBuZWVkcyBubyBjYXN0IOKAlCBpdHMgcm93cyBhcmUgYHVua25vd25bXWA6XG4gKiBjb25zdCBzdG9yZWQgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKHBhdGgsICd1dGY4JykpO1xuICogc3RhdGVBdChzdG9yZWQsIDMpLnNraXBwZWQ7ICAgICAgICAgICAgICAgICAgICAgICAvLyB1bmRlZmluZWQsIG9yIHRoZSBiYWQgcm93c1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZUF0KHNvdXJjZTogRm9sZFNvdXJjZSB8IHVuZGVmaW5lZCwgY29tbWl0SWR4OiBudW1iZXIpOiBGb2xkZWRTdGF0ZSB7XG4gIC8vIGBOYU5gIGlzIG91dCBvZiBjb250cmFjdDsgdHJlYXQgaXQgYXMgXCJmb2xkIG5vdGhpbmdcIiByYXRoZXIgdGhhbiBsZXR0aW5nXG4gIC8vIGl0IGZsb3cgdGhyb3VnaCB0aGUgYXJpdGhtZXRpYyBpbnRvIGB0aHJvdWdoQ29tbWl0SWR4YCwgd2hlcmUgaXQgd291bGRcbiAgLy8gc2VyaWFsaXplIGFzIGBudWxsYCBhbmQgdGVsbCBhIGNvbnN1bWVyIG5vdGhpbmcgYWJvdXQgd2hlcmUgdGhlIGZvbGRcbiAgLy8gc3RvcHBlZC4gKMKxSW5maW5pdHkgbmVlZHMgbm8gc3BlY2lhbCBjYXNlOiBpdCBjbGFtcHMgbGlrZSBhbnkgaW5kZXggcGFzdFxuICAvLyBlaXRoZXIgZW5kLilcbiAgY29uc3QgYXNrZWQgPSBOdW1iZXIuaXNOYU4oY29tbWl0SWR4KSA/IC0xIDogTWF0aC5mbG9vcihjb21taXRJZHgpO1xuICByZXR1cm4gZm9sZExlZ3MoW3JlYWRTb3VyY2Uoc291cmNlKV0sIDAsIGFza2VkKTtcbn1cbiJdfQ==
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGVBdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdGltZS10cmF2ZWwvc3RhdGVBdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUdILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHdkMsa0ZBQWtGO0FBQ2xGLFNBQVMsVUFBVSxDQUFJLEtBQVE7SUFDN0IsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM5RCxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDcEQsTUFBTSxLQUFLLEdBQUksS0FBaUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0RCxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBU0Q7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQUMsTUFBOEI7SUFDdkQsTUFBTSxJQUFJLEdBQUksTUFBaUUsRUFBRSxZQUFZLENBQUM7SUFDOUYsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2hELE1BQU0sT0FBTyxHQUFHLE1BQTRDLENBQUM7SUFDN0QsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUztRQUNuQixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBRSxNQUEyQyxDQUFDLE9BQU8sQ0FBQztZQUNyRSxDQUFDLENBQUUsTUFBMEMsQ0FBQyxPQUFPO1lBQ3JELENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDZCxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQyxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM3QixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxJQUEyQixFQUFFLE1BQWMsRUFBRSxPQUFlO0lBQ25GLE9BQU8sWUFBWSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3BELENBQUM7QUFrQkQsc0ZBQXNGO0FBQ3RGLFNBQVMsUUFBUSxDQUNmLEdBQTRCLEVBQzVCLEdBQWUsRUFDZixJQUFZLEVBQ1osR0FBVyxFQUNYLGFBQTBCLEVBQzFCLE9BQTZCO0lBRTdCLEtBQUssTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLElBQUksR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHO1lBQUUsQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU07WUFBRSxTQUFTO1FBQ3RCLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLGFBQWEsSUFBSSxFQUFFO1lBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RSxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLE9BQXNCLEVBQUUsTUFBTSxDQUFDLFNBQXdCLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pHLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsSUFBMkIsRUFDM0IsTUFBYyxFQUNkLE9BQWUsRUFDZixJQUFlO0lBRWYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sV0FBVyxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUNsRCxNQUFNLFNBQVMsR0FBRyxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssTUFBTSxJQUFJLFdBQVcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO0lBRTlGLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzNDLElBQUksR0FBRyxHQUE0QixTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM3RCxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBUyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLElBQUksT0FBTyxHQUF5QixTQUFTLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRTlGLElBQUksU0FBUyxFQUFFLENBQUM7UUFDZCxJQUFJLElBQUk7WUFBRSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdGLENBQUM7U0FBTSxDQUFDO1FBQ04sS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLE1BQU0sSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQzVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6QixJQUFJLE1BQU0sQ0FBQyxJQUFJLElBQUksT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUNuRCxHQUFHLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbkMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNmLENBQUM7WUFDRCxNQUFNLEdBQUcsR0FBRyxHQUFHLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNqRSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuRSxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFjLEtBQUssQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFDNUQsTUFBTSxNQUFNLEdBQWdCO1FBQzFCLEtBQUssRUFBRSxVQUFVLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLEtBQUs7UUFDTCxRQUFRLEVBQUUsYUFBYSxDQUFDLElBQUksR0FBRyxDQUFDO1FBQ2hDLGFBQWEsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2RCxnQkFBZ0IsRUFBRSxXQUFXO1FBQzdCLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQ3hELENBQUM7SUFDRixPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7QUFDaEcsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQ0c7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLE1BQThCLEVBQUUsU0FBaUI7SUFDdkUsMkVBQTJFO0lBQzNFLHlFQUF5RTtJQUN6RSx1RUFBdUU7SUFDdkUsMkVBQTJFO0lBQzNFLGVBQWU7SUFDZixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuRSxPQUFPLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBzdGF0ZUF0IOKAlCB0aGUgZm9sZCBhdCBhIHN0b3AuXG4gKlxuICogVGhlIGNvbW1pdCBsb2cgc3RvcmVzIERJRkZTLiBSZXBsYXlpbmcgdGhlbSBvbnRvIHRoZSBydW4ncyBmb2xkIGJhc2VcbiAqIHJlcHJvZHVjZXMgdGhlIHN0YXRlIGFzIGl0IHN0b29kIGFmdGVyIGFueSBjb21taXQg4oCUIGJ5dGUtZm9yLWJ5dGUgdGhlIHN0YXRlXG4gKiB0aGUgbmV4dCBzdGFnZSBzYXcsIGluIGJvdGggYGNvbW1pdFZhbHVlc2AgZW5jb2RpbmdzLCBiZWNhdXNlIHRoZSByZXBsYXlcbiAqIHJ1bnMgdGhyb3VnaCBgYXBwbHlTbWFydE1lcmdlYCwgdGhlIG9uZSB2ZXJiIHN3aXRjaCB0aGUgbGl2ZSBjb21taXQgaXRzZWxmXG4gKiB1c2VzLiBUaGVyZSBpcyBkZWxpYmVyYXRlbHkgbm8gc2Vjb25kIGltcGxlbWVudGF0aW9uIG9mIHRoZSB2ZXJicyBoZXJlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlLCBNZW1vcnlQYXRjaCB9IGZyb20gJy4uL21lbW9yeS90eXBlcy5qcyc7XG5pbXBvcnQgeyBhcHBseVNtYXJ0TWVyZ2VJbnRvIH0gZnJvbSAnLi4vbWVtb3J5L3V0aWxzLmpzJztcbmltcG9ydCB7IHJlYWRMb2cgfSBmcm9tICcuL2J1bmRsZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBGb2xkQmFzaXMsIEZvbGRlZFN0YXRlLCBGb2xkU291cmNlLCBMb2dHYXAgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqIERlZXBseSBmcmVlemUgYSBQT0pPIHRyZWUgc28gYSBmb2xkIHJlc3VsdCBjYW5ub3QgYmUgbXV0YXRlZCBieSBpdHMgaG9sZGVyLiAqL1xuZnVuY3Rpb24gZnJlZXplRGVlcDxUPih2YWx1ZTogVCk6IFQge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIHZhbHVlO1xuICBPYmplY3QuZnJlZXplKHZhbHVlKTtcbiAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModmFsdWUpKSB7XG4gICAgY29uc3QgaW5uZXIgPSAodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV07XG4gICAgaWYgKGlubmVyICYmIHR5cGVvZiBpbm5lciA9PT0gJ29iamVjdCcgJiYgIU9iamVjdC5pc0Zyb3plbihpbm5lcikpIGZyZWV6ZURlZXAoaW5uZXIpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqIE9uZSBzb3VyY2UsIHJlYWQ6IGl0cyBsb2cgKGdhcHMgaGVsZCBpbiBwbGFjZSkgYW5kIGl0cyBmb2xkIGJhc2UuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRTb3VyY2Uge1xuICByZWFkb25seSBsb2c6IHJlYWRvbmx5IENvbW1pdEJ1bmRsZVtdO1xuICByZWFkb25seSBnYXBzOiByZWFkb25seSBMb2dHYXBbXTtcbiAgcmVhZG9ubHkgYmFzZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUmVhZCB3aGljaGV2ZXIgc2hhcGUgdGhlIGNhbGxlciBoYW5kZWQgdXMg4oCUIGBjb21taXRMb2dgIChhIHJ1biBzbmFwc2hvdCkgb3JcbiAqIGBoaXN0b3J5YCAoYSBzdWJmbG93J3Mgb3duIGxvZykg4oCUIG5hcnJvd2luZyB0aGUgcm93cyB0byBjb21taXQgYnVuZGxlcyBhcyBpdFxuICogZ29lcyAoc2VlIGBidW5kbGVzLnRzYDogYSByb3cgdGhhdCBpcyBub3Qgb25lIGJlY29tZXMgYW4gaW5kZXgtaG9sZGluZyBnYXApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZFNvdXJjZShzb3VyY2U6IEZvbGRTb3VyY2UgfCB1bmRlZmluZWQpOiBSZWFkU291cmNlIHtcbiAgY29uc3QgYmFzZSA9IChzb3VyY2UgYXMgeyBpbml0aWFsU3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9IHwgdW5kZWZpbmVkKT8uaW5pdGlhbFN0YXRlO1xuICBpZiAoIXNvdXJjZSkgcmV0dXJuIHsgbG9nOiBbXSwgZ2FwczogW10sIGJhc2UgfTtcbiAgY29uc3Qgd2l0aExvZyA9IHNvdXJjZSBhcyB7IGNvbW1pdExvZz86IHJlYWRvbmx5IHVua25vd25bXSB9O1xuICBjb25zdCByYXcgPSBBcnJheS5pc0FycmF5KHdpdGhMb2cuY29tbWl0TG9nKVxuICAgID8gd2l0aExvZy5jb21taXRMb2dcbiAgICA6IEFycmF5LmlzQXJyYXkoKHNvdXJjZSBhcyB7IGhpc3Rvcnk/OiByZWFkb25seSB1bmtub3duW10gfSkuaGlzdG9yeSlcbiAgICA/IChzb3VyY2UgYXMgeyBoaXN0b3J5OiByZWFkb25seSB1bmtub3duW10gfSkuaGlzdG9yeVxuICAgIDogdW5kZWZpbmVkO1xuICBjb25zdCB7IGxvZywgZ2FwcyB9ID0gcmVhZExvZyhyYXcpO1xuICByZXR1cm4geyBsb2csIGdhcHMsIGJhc2UgfTtcbn1cblxuLyoqXG4gKiBGb2xkIG9uZSBjaGFpbiBvZiBsZWdzOiBldmVyeSBsZWcgQkVGT1JFIGBsZWdJZHhgIGluIGZ1bGwsIHRoZW4gYGxlZ0lkeGBcbiAqIHRocm91Z2ggYHRocm91Z2hgLlxuICpcbiAqIFRIRSBMRUcgUlVMRS4gQSBsZWcgdGhhdCBjYXJyaWVzIGl0cyBvd24gYGluaXRpYWxTdGF0ZWAgUkVTVEFSVFMgdGhlXG4gKiBhY2N1bXVsYXRpb24gZnJvbSBpdCDigJQgb24gYSBwYXVzZS9yZXN1bWUgdGhhdCBiYXNlIElTIHRoZSBzdGF0ZSBhdCB0aGVcbiAqIHBhdXNlLCByZWNvcmRlZCBieSB0aGUgZW5naW5lLCBhbmQgaXMgYXV0aG9yaXRhdGl2ZSBvdmVyIGFueXRoaW5nIHRoZVxuICogcHJldmlvdXMgbGVnJ3MgbG9nIHJlYnVpbHQuIEEgbGVnIHdpdGggbm8gYmFzZSAoYSBwcmUtOS4xNyBzbmFwc2hvdCwgYVxuICogaGFuZC1idWlsdCBsb2cpIENPTlRJTlVFUyBmcm9tIHdoYXQgdGhlIGVhcmxpZXIgbGVncyBmb2xkZWQsIHdoaWNoIGlzIHRoZVxuICogYmVzdCBob25lc3QgYW5zd2VyIGF2YWlsYWJsZSBhbmQgaXMgZXhhY3RseSB3aGF0IGBiYXNpc2AgdGhlbiByZXBvcnRzLlxuICpcbiAqIFdpdGggYSBzaW5nbGUgbGVnIHRoaXMgaXMgdGhlIDkuMTcuMCBmb2xkLCB1bmNoYW5nZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb2xkTGVncyhsZWdzOiByZWFkb25seSBSZWFkU291cmNlW10sIGxlZ0lkeDogbnVtYmVyLCB0aHJvdWdoOiBudW1iZXIpOiBGb2xkZWRTdGF0ZSB7XG4gIHJldHVybiBmb2xkTGVnc0Zyb20obGVncywgbGVnSWR4LCB0aHJvdWdoKS5mb2xkZWQ7XG59XG5cbi8qKlxuICogV2hhdCBhIGZvbGQgbGVhdmVzIGJlaGluZCBmb3IgdGhlIE5FWFQgb25lICg5LjI1LjApOiB0aGUgcHJpdmF0ZSB3b3JraW5nXG4gKiBjb3B5IGFuZCB0aGUgZmFjdHMgYWNjdW11bGF0ZWQgc28gZmFyLiBBIGN1cnNvciBzdGVwcGluZyBmb3J3YXJkIG9uIHRoZVxuICogc2FtZSBsZWcgaGFuZHMgaXQgYmFjayBhbmQgb25seSB0aGUgYnVuZGxlcyBhZnRlciBgdGhyb3VnaGAgYXJlIGFwcGxpZWQg4oCUXG4gKiBvbmUgYnVuZGxlIHBlciBzdGVwIGluc3RlYWQgb2YgYSByZXBsYXkgZnJvbSB0aGUgYmFzZS4gQW55IG90aGVyIGFzayAoYW5cbiAqIGVhcmxpZXIgc3RvcCwgYW5vdGhlciBsZWcpIGZvbGRzIGZyb20gc2NyYXRjaDsgdGhlIG1lbW8gaXMgbmV2ZXIgYSBjbGFpbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGb2xkTWVtbyB7XG4gIHJlYWRvbmx5IGxlZ0lkeDogbnVtYmVyO1xuICByZWFkb25seSB0aHJvdWdoOiBudW1iZXI7XG4gIHJlYWRvbmx5IG91dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHJlYWRvbmx5IGJhc2VkOiBib29sZWFuO1xuICByZWFkb25seSByZWRhY3RlZFBhdGhzOiBSZWFkb25seVNldDxzdHJpbmc+O1xuICByZWFkb25seSBza2lwcGVkOiByZWFkb25seSBMb2dHYXBbXSB8IHVuZGVmaW5lZDtcbn1cblxuLyoqIEFwcGx5IGBsb2dbZnJvbSArIDEgLi4gZW5kXWAgb2Ygb25lIGxlZyBpbnRvIGBvdXRgLCBjb2xsZWN0aW5nIHRoZSBsZWcncyBmYWN0cy4gKi9cbmZ1bmN0aW9uIGFwcGx5TGVnKFxuICBvdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBsZWc6IFJlYWRTb3VyY2UsXG4gIGZyb206IG51bWJlcixcbiAgZW5kOiBudW1iZXIsXG4gIHJlZGFjdGVkUGF0aHM6IFNldDxzdHJpbmc+LFxuICBza2lwcGVkOiBMb2dHYXBbXSB8IHVuZGVmaW5lZCxcbik6IExvZ0dhcFtdIHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBnYXAgb2YgbGVnLmdhcHMpIHtcbiAgICBpZiAoZ2FwLmluZGV4ID4gZnJvbSAmJiBnYXAuaW5kZXggPD0gZW5kKSAoc2tpcHBlZCA/Pz0gW10pLnB1c2goZ2FwKTtcbiAgfVxuICBmb3IgKGxldCBpID0gZnJvbSArIDE7IGkgPD0gZW5kOyBpKyspIHtcbiAgICBjb25zdCBidW5kbGUgPSBsZWcubG9nW2ldO1xuICAgIGlmICghYnVuZGxlKSBjb250aW51ZTtcbiAgICBmb3IgKGNvbnN0IHBhdGggb2YgYnVuZGxlLnJlZGFjdGVkUGF0aHMgPz8gW10pIHJlZGFjdGVkUGF0aHMuYWRkKHBhdGgpO1xuICAgIGFwcGx5U21hcnRNZXJnZUludG8ob3V0LCBidW5kbGUudXBkYXRlcyBhcyBNZW1vcnlQYXRjaCwgYnVuZGxlLm92ZXJ3cml0ZSBhcyBNZW1vcnlQYXRjaCwgYnVuZGxlLnRyYWNlKTtcbiAgfVxuICByZXR1cm4gc2tpcHBlZDtcbn1cblxuLyoqXG4gKiBUaGUgZm9sZCwgcmVzdW1hYmxlLiBPTkUgY2xvbmUgcGVyIGZvbGQ6IHRoZSBiYXNlIGlzIGNsb25lZCBvbmNlIChvciBge31gXG4gKiBzdGFuZHMgaW4pLCBldmVyeSBidW5kbGUgaXMgYXBwbGllZCBJTlRPIHRoYXQgY29weSwgYW5kIHRoZSBzdGF0ZSBoYW5kZWRcbiAqIG91dCBpcyBvbmUgbW9yZSBjbG9uZSwgZnJvemVuIOKAlCBzbyB0aGUgd29ya2luZyBjb3B5IHN0YXlzIHByaXZhdGUgYW5kIGFcbiAqIGxhdGVyIHN0ZXAgY2FuIGNvbnRpbnVlIGZyb20gaXQuIFNhbWUgYW5zd2VyIGFzIHRoZSA5LjE3LjAgZm9sZCwgcGlubmVkIGJ5XG4gKiB0ZXN0L2xpYi90aW1lLXRyYXZlbC9mb2xkLW1lbW8udGVzdC50cyBhZ2FpbnN0IGEgZnJlc2ggZm9sZCBhdCBldmVyeSBzdG9wLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9sZExlZ3NGcm9tKFxuICBsZWdzOiByZWFkb25seSBSZWFkU291cmNlW10sXG4gIGxlZ0lkeDogbnVtYmVyLFxuICB0aHJvdWdoOiBudW1iZXIsXG4gIG1lbW8/OiBGb2xkTWVtbyxcbik6IHsgcmVhZG9ubHkgZm9sZGVkOiBGb2xkZWRTdGF0ZTsgcmVhZG9ubHkgbWVtbzogRm9sZE1lbW8gfSB7XG4gIGNvbnN0IGxhc3QgPSBsZWdzW2xlZ0lkeF07XG4gIGNvbnN0IGVuZE9uTGVnID0gbGFzdCA/IE1hdGgubWluKHRocm91Z2gsIGxhc3QubG9nLmxlbmd0aCAtIDEpIDogLTE7XG4gIGNvbnN0IGxhc3RUaHJvdWdoID0gZW5kT25MZWcgPCAtMSA/IC0xIDogZW5kT25MZWc7XG4gIGNvbnN0IHJlc3VtYWJsZSA9IG1lbW8gIT09IHVuZGVmaW5lZCAmJiBtZW1vLmxlZ0lkeCA9PT0gbGVnSWR4ICYmIGxhc3RUaHJvdWdoID49IG1lbW8udGhyb3VnaDtcblxuICBsZXQgYmFzZWQgPSByZXN1bWFibGUgPyBtZW1vLmJhc2VkIDogZmFsc2U7XG4gIGxldCBvdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0gcmVzdW1hYmxlID8gbWVtby5vdXQgOiB7fTtcbiAgY29uc3QgcmVkYWN0ZWRQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPihyZXN1bWFibGUgPyBtZW1vLnJlZGFjdGVkUGF0aHMgOiBbXSk7XG4gIGxldCBza2lwcGVkOiBMb2dHYXBbXSB8IHVuZGVmaW5lZCA9IHJlc3VtYWJsZSAmJiBtZW1vLnNraXBwZWQgPyBbLi4ubWVtby5za2lwcGVkXSA6IHVuZGVmaW5lZDtcblxuICBpZiAocmVzdW1hYmxlKSB7XG4gICAgaWYgKGxhc3QpIHNraXBwZWQgPSBhcHBseUxlZyhvdXQsIGxhc3QsIG1lbW8udGhyb3VnaCwgbGFzdFRocm91Z2gsIHJlZGFjdGVkUGF0aHMsIHNraXBwZWQpO1xuICB9IGVsc2Uge1xuICAgIGZvciAobGV0IGxlZyA9IDA7IGxlZyA8PSBsZWdJZHggJiYgbGVnIDwgbGVncy5sZW5ndGg7IGxlZysrKSB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBsZWdzW2xlZ107XG4gICAgICBpZiAoc291cmNlLmJhc2UgJiYgdHlwZW9mIHNvdXJjZS5iYXNlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBvdXQgPSBzdHJ1Y3R1cmVkQ2xvbmUoc291cmNlLmJhc2UpO1xuICAgICAgICBiYXNlZCA9IHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCBlbmQgPSBsZWcgPT09IGxlZ0lkeCA/IGxhc3RUaHJvdWdoIDogc291cmNlLmxvZy5sZW5ndGggLSAxO1xuICAgICAgc2tpcHBlZCA9IGFwcGx5TGVnKG91dCwgc291cmNlLCAtMSwgZW5kLCByZWRhY3RlZFBhdGhzLCBza2lwcGVkKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBiYXNpczogRm9sZEJhc2lzID0gYmFzZWQgPyAnaW5pdGlhbCtsb2cnIDogJ2xvZy1vbmx5JztcbiAgY29uc3QgZm9sZGVkOiBGb2xkZWRTdGF0ZSA9IHtcbiAgICBzdGF0ZTogZnJlZXplRGVlcChzdHJ1Y3R1cmVkQ2xvbmUob3V0KSksXG4gICAgYmFzaXMsXG4gICAgcmVkYWN0ZWQ6IHJlZGFjdGVkUGF0aHMuc2l6ZSA+IDAsXG4gICAgcmVkYWN0ZWRQYXRoczogT2JqZWN0LmZyZWV6ZShbLi4ucmVkYWN0ZWRQYXRoc10uc29ydCgpKSxcbiAgICB0aHJvdWdoQ29tbWl0SWR4OiBsYXN0VGhyb3VnaCxcbiAgICAuLi4oc2tpcHBlZCA/IHsgc2tpcHBlZDogT2JqZWN0LmZyZWV6ZShza2lwcGVkKSB9IDoge30pLFxuICB9O1xuICByZXR1cm4geyBmb2xkZWQsIG1lbW86IHsgbGVnSWR4LCB0aHJvdWdoOiBsYXN0VGhyb3VnaCwgb3V0LCBiYXNlZCwgcmVkYWN0ZWRQYXRocywgc2tpcHBlZCB9IH07XG59XG5cbi8qKlxuICogRm9sZCBgc291cmNlYCdzIGxvZyBmcm9tIGl0cyBiYXNlIHVwIHRvIGFuZCBpbmNsdWRpbmcgYGNvbW1pdElkeGAuXG4gKlxuICogQHBhcmFtIHNvdXJjZSAgICBBIHJ1biBzbmFwc2hvdCAoYGNvbW1pdExvZ2AgKyBgaW5pdGlhbFN0YXRlYCkgb3IgYSBzdWJmbG93XG4gKiAgICAgICAgICAgICAgICAgIHN1YnRyZWUgKGBoaXN0b3J5YCArIGBpbml0aWFsU3RhdGVgKS4gQm90aCBzcGVsbGluZ3Mgd29yayxcbiAqICAgICAgICAgICAgICAgICAgYW5kIHRoZSByb3dzIG1heSBiZSB1bnZhbGlkYXRlZCAoYHVua25vd25bXWApIOKAlCBhIHJvdyB0aGF0XG4gKiAgICAgICAgICAgICAgICAgIGlzIG5vdCBhIGNvbW1pdCBidW5kbGUgaXMgc2tpcHBlZCBhbmQgUkVQT1JURUQsIGJ5IGluZGV4LFxuICogICAgICAgICAgICAgICAgICBpbiB7QGxpbmsgRm9sZGVkU3RhdGUuc2tpcHBlZH0sIG5ldmVyIGNyYXNoZWQgb24uXG4gKiBAcGFyYW0gY29tbWl0SWR4IEFSUkFZIElOREVYIG9mIHRoZSBsYXN0IGJ1bmRsZSB0byBmb2xkLCBpbmNsdXNpdmUuIGAtMWBcbiAqICAgICAgICAgICAgICAgICAgKG9yIGFueSBuZWdhdGl2ZSkgZm9sZHMgbm90aGluZyBhbmQgcmV0dXJucyB0aGUgYmFzZSDigJRcbiAqICAgICAgICAgICAgICAgICAgdGhlIHN0YXRlIGJlZm9yZSB0aGUgcnVuJ3MgZmlyc3QgY29tbWl0LiBQYXN0IHRoZSBlbmRcbiAqICAgICAgICAgICAgICAgICAgY2xhbXBzIHRvIHRoZSBlbmQ7IHRoZSByZXN1bHQncyBgdGhyb3VnaENvbW1pdElkeGAgcmVwb3J0c1xuICogICAgICAgICAgICAgICAgICB3aGVyZSB0aGUgZm9sZCBhY3R1YWxseSBzdG9wcGVkLlxuICpcbiAqIEByZXR1cm5zIEEgZGV0YWNoZWQsIGRlZXBseSBmcm96ZW4gc3RhdGUgcGx1cyBob3cgaXQgd2FzIGRlcml2ZWQ6IGBiYXNpc2BcbiAqICAgc2F5cyB3aGV0aGVyIHRoZSByZWFsIGZvbGQgYmFzZSB3YXMgYXZhaWxhYmxlLCBgcmVkYWN0ZWRgIC9cbiAqICAgYHJlZGFjdGVkUGF0aHNgIHNheSB3aGVyZSB0aGUgbG9nIHdhcyBzY3J1YmJlZCBhdCB3cml0ZSB0aW1lLCBhbmRcbiAqICAgYHNraXBwZWRgIHNheXMgd2hpY2ggcm93cyBjb3VsZCBub3QgYmUgcmVhZC4gVGhlIGVuZ2luZSByZWRhY3RzIHZhbHVlcyBhc1xuICogICBpdCByZWNvcmRzIHRoZW0sIHNvIGEgcmVwbGF5IG9mIGEgcmVkYWN0ZWQgcnVuIHlpZWxkcyBgJ1JFREFDVEVEJ2AgaW5cbiAqICAgdGhvc2UgcGxhY2VzIOKAlCBjb3JyZWN0LCBhbmQgc2FpZCBvdXQgbG91ZCByYXRoZXIgdGhhbiBwcmVzZW50ZWQgYXMgdGhlXG4gKiAgIHJlYWwgdmFsdWUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNuYXBzaG90ID0gZXhlY3V0b3IuZ2V0U25hcHNob3QoKTtcbiAqIGNvbnN0IHsgc3RhdGUsIGJhc2lzIH0gPSBzdGF0ZUF0KHNuYXBzaG90LCAzKTsgICAvLyBhZnRlciB0aGUgNHRoIGNvbW1pdFxuICogY29uc29sZS5sb2coYmFzaXMsIHN0YXRlKTsgICAgICAgICAgICAgICAgICAgICAgICAvLyAnaW5pdGlhbCtsb2cnIHsgLi4uIH1cbiAqXG4gKiAvLyBBIHN1YmZsb3cncyBvd24gbG9nIGZvbGRzIGlkZW50aWNhbGx5OlxuICogY29uc3QgaW5uZXIgPSBnZXRTdWJ0cmVlU25hcHNob3Qoc25hcHNob3QsICdzZi1wYXltZW50JykhO1xuICogc3RhdGVBdChpbm5lciwgMCkuc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZnRlciB0aGUgc3ViZmxvdydzIGZpcnN0IGNvbW1pdFxuICpcbiAqIC8vIEEgU1RPUkVEIHJlY29yZGluZyBuZWVkcyBubyBjYXN0IOKAlCBpdHMgcm93cyBhcmUgYHVua25vd25bXWA6XG4gKiBjb25zdCBzdG9yZWQgPSBKU09OLnBhcnNlKGF3YWl0IGZzLnJlYWRGaWxlKHBhdGgsICd1dGY4JykpO1xuICogc3RhdGVBdChzdG9yZWQsIDMpLnNraXBwZWQ7ICAgICAgICAgICAgICAgICAgICAgICAvLyB1bmRlZmluZWQsIG9yIHRoZSBiYWQgcm93c1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGF0ZUF0KHNvdXJjZTogRm9sZFNvdXJjZSB8IHVuZGVmaW5lZCwgY29tbWl0SWR4OiBudW1iZXIpOiBGb2xkZWRTdGF0ZSB7XG4gIC8vIGBOYU5gIGlzIG91dCBvZiBjb250cmFjdDsgdHJlYXQgaXQgYXMgXCJmb2xkIG5vdGhpbmdcIiByYXRoZXIgdGhhbiBsZXR0aW5nXG4gIC8vIGl0IGZsb3cgdGhyb3VnaCB0aGUgYXJpdGhtZXRpYyBpbnRvIGB0aHJvdWdoQ29tbWl0SWR4YCwgd2hlcmUgaXQgd291bGRcbiAgLy8gc2VyaWFsaXplIGFzIGBudWxsYCBhbmQgdGVsbCBhIGNvbnN1bWVyIG5vdGhpbmcgYWJvdXQgd2hlcmUgdGhlIGZvbGRcbiAgLy8gc3RvcHBlZC4gKMKxSW5maW5pdHkgbmVlZHMgbm8gc3BlY2lhbCBjYXNlOiBpdCBjbGFtcHMgbGlrZSBhbnkgaW5kZXggcGFzdFxuICAvLyBlaXRoZXIgZW5kLilcbiAgY29uc3QgYXNrZWQgPSBOdW1iZXIuaXNOYU4oY29tbWl0SWR4KSA/IC0xIDogTWF0aC5mbG9vcihjb21taXRJZHgpO1xuICByZXR1cm4gZm9sZExlZ3MoW3JlYWRTb3VyY2Uoc291cmNlKV0sIDAsIGFza2VkKTtcbn1cbiJdfQ==
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
import { isPlainish, readTree } from './bundles.js';
|
|
24
24
|
import { refuseChain } from './chain.js';
|
|
25
25
|
import { commitStopsStrategy } from './commitStops.js';
|
|
26
|
-
import {
|
|
26
|
+
import { foldLegsFrom, readSource } from './stateAt.js';
|
|
27
27
|
class Cursor {
|
|
28
28
|
stops;
|
|
29
29
|
path;
|
|
@@ -35,6 +35,8 @@ class Cursor {
|
|
|
35
35
|
options;
|
|
36
36
|
_marks;
|
|
37
37
|
step;
|
|
38
|
+
/** The last fold's working copy, so a step forward applies one bundle (9.25.0). */
|
|
39
|
+
foldMemo;
|
|
38
40
|
constructor(sources, options, path, parent, mountRuntimeStageId) {
|
|
39
41
|
this.sources = sources;
|
|
40
42
|
this.options = options;
|
|
@@ -155,7 +157,9 @@ class Cursor {
|
|
|
155
157
|
stateAt(stop) {
|
|
156
158
|
const target = stop ?? this.at();
|
|
157
159
|
const leg = target?.sourceIdx ?? 0;
|
|
158
|
-
const
|
|
160
|
+
const fold = foldLegsFrom(this.legs, leg, target ? target.lastCommitIdx : -1, this.foldMemo);
|
|
161
|
+
this.foldMemo = fold.memo;
|
|
162
|
+
const folded = fold.folded;
|
|
159
163
|
// Which leg the index belongs to, but only when there is more than one —
|
|
160
164
|
// a single-source fold keeps the 9.17.0 shape exactly.
|
|
161
165
|
return this.legs.length > 1 ? { ...folded, sourceIdx: leg } : folded;
|
|
@@ -354,4 +358,4 @@ export function timeTravel(snapshot, options = {}) {
|
|
|
354
358
|
}
|
|
355
359
|
return new Cursor(sources, options);
|
|
356
360
|
}
|
|
357
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZVRyYXZlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdGltZS10cmF2ZWwvdGltZVRyYXZlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQW1CLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFzQnJFLE1BQU0sTUFBTTtJQUNELEtBQUssQ0FBeUI7SUFDOUIsSUFBSSxDQUFxQjtJQUN6QixtQkFBbUIsQ0FBcUI7SUFDeEMsTUFBTSxDQUFnQztJQUN0QyxXQUFXLENBQVM7SUFFWixJQUFJLENBQXdCO0lBQzVCLE9BQU8sQ0FBOEI7SUFDckMsT0FBTyxDQUEyQjtJQUNsQyxNQUFNLENBQVM7SUFDeEIsSUFBSSxDQUFTO0lBRXJCLFlBQ0UsT0FBb0MsRUFDcEMsT0FBaUMsRUFDakMsSUFBYSxFQUNiLE1BQTBCLEVBQzFCLG1CQUE0QjtRQUU1QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUM7UUFDL0MsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJLENB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ZGVyJ3MgY3Vyc29yIG92ZXIgYSBmaW5pc2hlZCB0cmFjZS5cbiAqXG4gKiBUaGUgZml2ZSBsYXdzIHRoaXMgZmlsZSBpbXBsZW1lbnRzIChhbmQgdGhlIGZvbGRlciBSRUFETUUgc3RhdGVzIHdpdGggYW5cbiAqIGV4YW1wbGUgZWFjaCk6XG4gKlxuICogICAxLiBPTkUgY3Vyc29yLiBUaGlzIG9iamVjdCBob2xkcyB0aGUgb25seSBwb3NpdGlvbi4gYGRyaWxsKClgIHJldHVybnMgYVxuICogICAgICBzZXBhcmF0ZSBjdXJzb3Igb3ZlciBhIHNlcGFyYXRlIGxvZywgbmV2ZXIgYSBzZWNvbmQgcG9zaXRpb24gaGVyZS5cbiAqICAgMi4gQSBtaXNzIG5ldmVyIG1vdmVzLiBFdmVyeSByZWZ1c2FsIHJldHVybnMgdGhlIHJlYXNvbiBhbmQgbGVhdmVzIHRoZVxuICogICAgICBjdXJzb3IgZXhhY3RseSB3aGVyZSBpdCB3YXMuXG4gKiAgIDMuIEEgZm9sZCByZXN1bHQgaXMgZGV0YWNoZWQuIGBzdGF0ZUF0YCByZXR1cm5zIGZyb3plbiwgY2xvbmVkIHN0YXRlIHRoYXRcbiAqICAgICAgc2hhcmVzIG5vdGhpbmcgd2l0aCB0aGUgZW5naW5lLlxuICogICA0LiBNYXJrcyBsaXZlIGJlc2lkZSB0aGUgbG9nLiBUaGV5IGFyZSB0aGUgcmVhZGVyJ3Mgbm90ZXMsIG5ldmVyIHdyaXR0ZW5cbiAqICAgICAgaW50byB0aGUgcnVuJ3MgcmVjb3JkLlxuICogICA1LiBTdG9wcyBhcmUgREVSSVZFRCBmcm9tIHRoZSByZWNvcmRlZCBsb2cg4oCUIHJlYWQtdGltZSBxdWVyaWVzIG92ZXJcbiAqICAgICAgY29sbGVjdGVkIGRhdGEsIG5ldmVyIGEgcmUtd2FsayB0aGF0IGludmVudHMgd2hhdCB3YXMgbm90IHJlY29yZGVkLlxuICpcbiAqIEEgQ0hBSU4gKDkuMTguMCkgZG9lcyBub3QgYWRkIGEgc2l4dGggbGF3IGFuZCBkb2VzIG5vdCBiZW5kIHRoZXNlIGZpdmU6IGl0XG4gKiBpcyBzdGlsbCBvbmUgY3Vyc29yLCBvdmVyIHNvdXJjZXMgdGhhdCBhcmUgc3RpbGwgb25seSByZWFkLiBXaGF0IGl0IGFkZHMgaXNcbiAqIHRoYXQgdGhlIFNURVBTIHJ1biBhY3Jvc3MgYSBwYXVzZS9yZXN1bWUg4oCUIHNlZSBgY2hhaW4udHNgIGZvciB0aGUgb3JkZXJpbmdcbiAqIGFuZCBsaW5lYWdlIGNoZWNrcywgYW5kIGZvciB3aHkgY29tbWl0IGluZGljZXMgc3RheSBydW4tbG9jYWwuXG4gKi9cblxuaW1wb3J0IHsgaXNQbGFpbmlzaCwgcmVhZFRyZWUgfSBmcm9tICcuL2J1bmRsZXMuanMnO1xuaW1wb3J0IHsgcmVmdXNlQ2hhaW4gfSBmcm9tICcuL2NoYWluLmpzJztcbmltcG9ydCB7IGNvbW1pdFN0b3BzU3RyYXRlZ3kgfSBmcm9tICcuL2NvbW1pdFN0b3BzLmpzJztcbmltcG9ydCB7IHR5cGUgUmVhZFNvdXJjZSwgZm9sZExlZ3MsIHJlYWRTb3VyY2UgfSBmcm9tICcuL3N0YXRlQXQuanMnO1xuaW1wb3J0IHR5cGUge1xuICBGb2xkZWRTdGF0ZSxcbiAgTWFyayxcbiAgTW92ZSxcbiAgU3RvcCxcbiAgVGltZVRyYXZlbCxcbiAgVGltZVRyYXZlbE9wdGlvbnMsXG4gIFRpbWVUcmF2ZWxTb3VyY2UsXG4gIFRpbWVUcmF2ZWxTdHJhdGVneSxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKiBBIHN1YmZsb3cgcmVzdWx0IGFzIHRoaXMgbW9kdWxlIG5lZWRzIHRvIHJlYWQgaXQg4oCUIGR1Y2stdHlwZWQgb24gcHVycG9zZS4gKi9cbmludGVyZmFjZSBTdWJmbG93UmVzdWx0U2hhcGUge1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHRyZWVDb250ZXh0Pzoge1xuICAgIGhpc3Rvcnk/OiB1bmtub3duW107XG4gICAgaW5pdGlhbFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgc3RhZ2VDb250ZXh0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9O1xufVxuXG5jbGFzcyBDdXJzb3I8VE1ldGE+IGltcGxlbWVudHMgVGltZVRyYXZlbDxUTWV0YT4ge1xuICByZWFkb25seSBzdG9wczogcmVhZG9ubHkgU3RvcDxUTWV0YT5bXTtcbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBtb3VudFJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHBhcmVudDogVGltZVRyYXZlbDxUTWV0YT4gfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHNvdXJjZUNvdW50OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBsZWdzOiByZWFkb25seSBSZWFkU291cmNlW107XG4gIHByaXZhdGUgcmVhZG9ubHkgc291cmNlczogcmVhZG9ubHkgVGltZVRyYXZlbFNvdXJjZVtdO1xuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFRpbWVUcmF2ZWxPcHRpb25zPFRNZXRhPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFya3M6IE1hcmtbXTtcbiAgcHJpdmF0ZSBzdGVwOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc291cmNlczogcmVhZG9ubHkgVGltZVRyYXZlbFNvdXJjZVtdLFxuICAgIG9wdGlvbnM6IFRpbWVUcmF2ZWxPcHRpb25zPFRNZXRhPixcbiAgICBwYXRoPzogc3RyaW5nLFxuICAgIHBhcmVudD86IFRpbWVUcmF2ZWw8VE1ldGE+LFxuICAgIG1vdW50UnVudGltZVN0YWdlSWQ/OiBzdHJpbmcsXG4gICkge1xuICAgIHRoaXMuc291cmNlcyA9IHNvdXJjZXM7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgIHRoaXMubW91bnRSdW50aW1lU3RhZ2VJZCA9IG1vdW50UnVudGltZVN0YWdlSWQ7XG4gICAgdGhpcy5sZWdzID0gc291cmNlcy5tYXAoKHNvdXJjZSkgPT4gcmVhZFNvdXJjZShzb3VyY2UpKTtcbiAgICB0aGlzLnNvdXJjZUNvdW50ID0gc291cmNlcy5sZW5ndGg7XG5cbiAgICAvLyBUaGUgc2hpcHBlZCBzdHJhdGVneSBoYXMgbm8gdm9jYWJ1bGFyeSBvZiBpdHMgb3duIChgbWV0YWAgaXMgbmV2ZXIgc2V0KSxcbiAgICAvLyBzbyBpdCBzZXJ2ZXMgYW55IGBUTWV0YWAgYSBjYWxsZXIgYXNrZWQgZm9yLlxuICAgIGNvbnN0IHN0cmF0ZWd5ID0gb3B0aW9ucy5zdHJhdGVneSA/PyAoY29tbWl0U3RvcHNTdHJhdGVneSBhcyBUaW1lVHJhdmVsU3RyYXRlZ3k8VE1ldGE+KTtcbiAgICAvLyBPTkUgQ0FMTCBQRVIgU09VUkNFLCB3aXRoIHRoYXQgc291cmNlJ3Mgb3duIGxvZyBhbmQgdHJlZTogYSBzdHJhdGVneVxuICAgIC8vIG5ldmVyIGhhcyB0byBrbm93IGl0IGlzIHBhcnQgb2YgYSBjaGFpbiwgYW5kIGl0cyBpbmRpY2VzIHN0YXkgbG9jYWwgdG9cbiAgICAvLyB0aGUgbGVnIGl0IHdhcyBoYW5kZWQuXG4gICAgY29uc3QgcGVyU291cmNlID0gdGhpcy5sZWdzLm1hcCgobGVnLCBpKSA9PiBzdHJhdGVneS5zdG9wc0ZvcihsZWcubG9nLCByZWFkVHJlZShzb3VyY2VzW2ldLmV4ZWN1dGlvblRyZWUpKSk7XG4gICAgdGhpcy5zdG9wcyA9IE9iamVjdC5mcmVlemUoc291cmNlcy5sZW5ndGggPT09IDEgPyBwZXJTb3VyY2VbMF0gOiBjaGFpblN0b3BzKHBlclNvdXJjZSkpO1xuICAgIHRoaXMuX21hcmtzID0gWy4uLihvcHRpb25zLm1hcmtzID8/IFtdKV07XG4gICAgdGhpcy5zdGVwID0gMDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBQb3NpdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBhdCgpOiBTdG9wPFRNZXRhPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcHNbdGhpcy5zdGVwXTtcbiAgfVxuXG4gIHByaXZhdGUgbW92ZVRvKHN0ZXA6IG51bWJlcik6IE1vdmU8VE1ldGE+IHtcbiAgICBjb25zdCBmcm9tID0gdGhpcy5hdCgpO1xuICAgIHRoaXMuc3RlcCA9IHN0ZXA7XG4gICAgcmV0dXJuIHsgbW92ZWQ6IHRydWUsIGZyb20sIHRvOiB0aGlzLnN0b3BzW3N0ZXBdIH07XG4gIH1cblxuICAvKiogTGF3IDI6IGEgcmVmdXNhbCBuZXZlciB0b3VjaGVzIGB0aGlzLnN0ZXBgLiAqL1xuICBwcml2YXRlIHJlZnVzZShyZWFzb246ICdjbGFtcGVkJyB8ICdtaXNzJyB8ICdlbXB0eScsIG5lYXJlc3Q/OiBTdG9wPFRNZXRhPik6IE1vdmU8VE1ldGE+IHtcbiAgICBjb25zdCBhdCA9IHRoaXMuYXQoKTtcbiAgICByZXR1cm4gbmVhcmVzdCA/IHsgbW92ZWQ6IGZhbHNlLCByZWFzb24sIGF0LCBuZWFyZXN0IH0gOiB7IG1vdmVkOiBmYWxzZSwgcmVhc29uLCBhdCB9O1xuICB9XG5cbiAgZmlyc3QoKTogTW92ZTxUTWV0YT4ge1xuICAgIGlmICh0aGlzLnN0b3BzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMucmVmdXNlKCdlbXB0eScpO1xuICAgIGlmICh0aGlzLnN0ZXAgPT09IDApIHJldHVybiB0aGlzLnJlZnVzZSgnY2xhbXBlZCcpO1xuICAgIHJldHVybiB0aGlzLm1vdmVUbygwKTtcbiAgfVxuXG4gIGxhc3QoKTogTW92ZTxUTWV0YT4ge1xuICAgIGlmICh0aGlzLnN0b3BzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMucmVmdXNlKCdlbXB0eScpO1xuICAgIGNvbnN0IGVuZCA9IHRoaXMuc3RvcHMubGVuZ3RoIC0gMTtcbiAgICBpZiAodGhpcy5zdGVwID09PSBlbmQpIHJldHVybiB0aGlzLnJlZnVzZSgnY2xhbXBlZCcpO1xuICAgIHJldHVybiB0aGlzLm1vdmVUbyhlbmQpO1xuICB9XG5cbiAgcHJldigpOiBNb3ZlPFRNZXRhPiB7XG4gICAgaWYgKHRoaXMuc3RvcHMubGVuZ3RoID09PSAwKSByZXR1cm4gdGhpcy5yZWZ1c2UoJ2VtcHR5Jyk7XG4gICAgaWYgKHRoaXMuc3RlcCA9PT0gMCkgcmV0dXJuIHRoaXMucmVmdXNlKCdjbGFtcGVkJyk7XG4gICAgcmV0dXJuIHRoaXMubW92ZVRvKHRoaXMuc3RlcCAtIDEpO1xuICB9XG5cbiAgbmV4dCgpOiBNb3ZlPFRNZXRhPiB7XG4gICAgaWYgKHRoaXMuc3RvcHMubGVuZ3RoID09PSAwKSByZXR1cm4gdGhpcy5yZWZ1c2UoJ2VtcHR5Jyk7XG4gICAgaWYgKHRoaXMuc3RlcCA+PSB0aGlzLnN0b3BzLmxlbmd0aCAtIDEpIHJldHVybiB0aGlzLnJlZnVzZSgnY2xhbXBlZCcpO1xuICAgIHJldHVybiB0aGlzLm1vdmVUbyh0aGlzLnN0ZXAgKyAxKTtcbiAgfVxuXG4gIGp1bXBUbyh0YXJnZXQ6IG51bWJlciB8IHN0cmluZyk6IE1vdmU8VE1ldGE+IHtcbiAgICBpZiAodGhpcy5zdG9wcy5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLnJlZnVzZSgnZW1wdHknKTtcblxuICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3Qgc3RlcCA9IE1hdGgudHJ1bmModGFyZ2V0KTtcbiAgICAgIGlmIChOdW1iZXIuaXNOYU4oc3RlcCkpIHJldHVybiB0aGlzLnJlZnVzZSgnbWlzcycpO1xuICAgICAgaWYgKHN0ZXAgPCAwKSByZXR1cm4gdGhpcy5yZWZ1c2UoJ2NsYW1wZWQnLCB0aGlzLnN0b3BzWzBdKTtcbiAgICAgIGlmIChzdGVwID4gdGhpcy5zdG9wcy5sZW5ndGggLSAxKSByZXR1cm4gdGhpcy5yZWZ1c2UoJ2NsYW1wZWQnLCB0aGlzLnN0b3BzW3RoaXMuc3RvcHMubGVuZ3RoIC0gMV0pO1xuICAgICAgaWYgKHN0ZXAgPT09IHRoaXMuc3RlcCkgcmV0dXJuIHRoaXMucmVmdXNlKCdjbGFtcGVkJyk7XG4gICAgICByZXR1cm4gdGhpcy5tb3ZlVG8oc3RlcCk7XG4gICAgfVxuXG4gICAgLy8gYCcnYCBpcyBub3QgYW4gYWRkcmVzczogaXQgaXMgd2hhdCB0aGUgYm9va2VuZHMgYW5kIGFueSBwcmUtc3RhZ2VcbiAgICAvLyByb290IGNvbW1pdCBjYXJyeS4gVGhvc2UgYXJlIHJlYWNoZWQgYnkgc3RlcCwgbmV2ZXIgYnkgaWQuXG4gICAgaWYgKHRhcmdldCA9PT0gJycpIHJldHVybiB0aGlzLnJlZnVzZSgnbWlzcycpO1xuICAgIGNvbnN0IGhpdCA9IHRoaXMuc3RvcHMuZmluZCgoc3RvcCkgPT4gc3RvcC5ydW50aW1lU3RhZ2VJZCA9PT0gdGFyZ2V0KTtcbiAgICBpZiAoIWhpdCkgcmV0dXJuIHRoaXMucmVmdXNlKCdtaXNzJywgdGhpcy5uZWFyZXN0VG8odGFyZ2V0KSk7XG4gICAgaWYgKGhpdC5zdGVwID09PSB0aGlzLnN0ZXApIHJldHVybiB0aGlzLnJlZnVzZSgnY2xhbXBlZCcpO1xuICAgIHJldHVybiB0aGlzLm1vdmVUbyhoaXQuc3RlcCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNsb3Nlc3QgbmFtYWJsZSBzdG9wIGZvciBhIGBydW50aW1lU3RhZ2VJZGAgdGhhdCBpcyBub3Qgb24gdGhpcyBheGlzOlxuICAgKiB0aGUgbGFzdCBzdG9wIG9mIHRoZSBzYW1lIFNUQUdFIChhIGRpZmZlcmVudCBpdGVyYXRpb24gb2YgdGhlIHNhbWUgbm9kZSksXG4gICAqIGVsc2UgdGhlIGxhc3Qgc3RvcCB3aG9zZSBjb21taXQgcHJlY2VkZXMgdGhlIG1pc3NlZCBpZCdzIGV4ZWN1dGlvbiBpbmRleC5cbiAgICogTmFtaW5nIGEgbmVpZ2hib3VyIGlzIGEgY291cnRlc3kgZm9yIHRoZSBVSSDigJQgaXQgbmV2ZXIgbW92ZXMgdGhlIGN1cnNvci5cbiAgICovXG4gIHByaXZhdGUgbmVhcmVzdFRvKHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiBTdG9wPFRNZXRhPiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaGFzaCA9IHJ1bnRpbWVTdGFnZUlkLmxhc3RJbmRleE9mKCcjJyk7XG4gICAgaWYgKGhhc2ggPT09IC0xKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHN0YWdlUGFydCA9IHJ1bnRpbWVTdGFnZUlkLnNsaWNlKDAsIGhhc2gpO1xuICAgIGNvbnN0IHdhbnRlZCA9IE51bWJlci5wYXJzZUludChydW50aW1lU3RhZ2VJZC5zbGljZShoYXNoICsgMSksIDEwKTtcblxuICAgIGxldCBzYW1lU3RhZ2U6IFN0b3A8VE1ldGE+IHwgdW5kZWZpbmVkO1xuICAgIGxldCBieUluZGV4OiBTdG9wPFRNZXRhPiB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IHN0b3Agb2YgdGhpcy5zdG9wcykge1xuICAgICAgY29uc3Qgc3RvcEhhc2ggPSBzdG9wLnJ1bnRpbWVTdGFnZUlkLmxhc3RJbmRleE9mKCcjJyk7XG4gICAgICBpZiAoc3RvcEhhc2ggPT09IC0xKSBjb250aW51ZTtcbiAgICAgIGlmIChzdG9wLnJ1bnRpbWVTdGFnZUlkLnNsaWNlKDAsIHN0b3BIYXNoKSA9PT0gc3RhZ2VQYXJ0KSBzYW1lU3RhZ2UgPSBzdG9wO1xuICAgICAgaWYgKCFOdW1iZXIuaXNOYU4od2FudGVkKSkge1xuICAgICAgICBjb25zdCBpZHggPSBOdW1iZXIucGFyc2VJbnQoc3RvcC5ydW50aW1lU3RhZ2VJZC5zbGljZShzdG9wSGFzaCArIDEpLCAxMCk7XG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGlkeCkgJiYgaWR4IDw9IHdhbnRlZCkgYnlJbmRleCA9IHN0b3A7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzYW1lU3RhZ2UgPz8gYnlJbmRleDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBSZWFkaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHN0YXRlQXQoc3RvcD86IFN0b3A8VE1ldGE+KTogRm9sZGVkU3RhdGUge1xuICAgIGNvbnN0IHRhcmdldCA9IHN0b3AgPz8gdGhpcy5hdCgpO1xuICAgIGNvbnN0IGxlZyA9IHRhcmdldD8uc291cmNlSWR4ID8/IDA7XG4gICAgY29uc3QgZm9sZGVkID0gZm9sZExlZ3ModGhpcy5sZWdzLCBsZWcsIHRhcmdldCA/IHRhcmdldC5sYXN0Q29tbWl0SWR4IDogLTEpO1xuICAgIC8vIFdoaWNoIGxlZyB0aGUgaW5kZXggYmVsb25ncyB0bywgYnV0IG9ubHkgd2hlbiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIOKAlFxuICAgIC8vIGEgc2luZ2xlLXNvdXJjZSBmb2xkIGtlZXBzIHRoZSA5LjE3LjAgc2hhcGUgZXhhY3RseS5cbiAgICByZXR1cm4gdGhpcy5sZWdzLmxlbmd0aCA+IDEgPyB7IC4uLmZvbGRlZCwgc291cmNlSWR4OiBsZWcgfSA6IGZvbGRlZDtcbiAgfVxuXG4gIGNoYW5nZWRTaW5jZShmcm9tPzogU3RvcDxUTWV0YT4pOiByZWFkb25seSBzdHJpbmdbXSB7XG4gICAgY29uc3QgdG8gPSB0aGlzLmF0KCk7XG4gICAgaWYgKCF0bykgcmV0dXJuIE9iamVjdC5mcmVlemUoW10pO1xuICAgIGNvbnN0IHN0YXJ0ID0gZnJvbSA/PyB0aGlzLnN0b3BzW3RoaXMuc3RlcCAtIDFdO1xuICAgIC8vIE5vIGVhcmxpZXIgc3RvcCAod2UgYXJlIGF0IGAnc3RhcnQnYCkg4oeSIGV2ZXJ5dGhpbmcgdXAgdG8gaGVyZTogbm90aGluZ1xuICAgIC8vIG9uIGEgcnVuIGN1cnNvciwgYW5kIHRoZSBzdWJmbG93J3MgYGlucHV0TWFwcGVyYCBzZWVkIG9uIGEgZHJpbGxlZCBvbmVcbiAgICAvLyAodGhlIHN0YXJ0IGJvb2tlbmQgY292ZXJzIHRoZSBpZC1sZXNzIGNvbW1pdHMgdGhhdCBwcmVjZWRlIHN0YWdlIG9uZSkuXG4gICAgY29uc3QgdG9MZWcgPSB0by5zb3VyY2VJZHggPz8gMDtcbiAgICBjb25zdCBmcm9tTGVnID0gc3RhcnQgPyBzdGFydC5zb3VyY2VJZHggPz8gMCA6IHRvTGVnO1xuICAgIGNvbnN0IGFmdGVySWR4ID0gc3RhcnQgPyBzdGFydC5sYXN0Q29tbWl0SWR4IDogLTE7XG4gICAgY29uc3Qga2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIC8vIEEgcmFuZ2UgdGhhdCBjcm9zc2VzIGEgY2hhaW4gc2VhbSBpcyB3YWxrZWQgbGVnIGJ5IGxlZzogdGhlIHRhaWwgb2YgdGhlXG4gICAgLy8gbGVnIGl0IHN0YXJ0ZWQgaW4sIGV2ZXJ5IGxlZyBpbiBiZXR3ZWVuIHdob2xlLCB0aGVuIHRoZSBoZWFkIG9mIHRoZSBsZWdcbiAgICAvLyBpdCBlbmRzIGluLiBCYWNrd2FyZHMgcmFuZ2VzIHdhbGsgbm90aGluZyBhbmQgZ2l2ZSBgW11gLCBhcyBiZWZvcmUuXG4gICAgZm9yIChsZXQgbGVnID0gZnJvbUxlZzsgbGVnIDw9IHRvTGVnICYmIGxlZyA8IHRoaXMubGVncy5sZW5ndGg7IGxlZysrKSB7XG4gICAgICBjb25zdCBsb2cgPSB0aGlzLmxlZ3NbbGVnXS5sb2c7XG4gICAgICBjb25zdCBsbyA9IGxlZyA9PT0gZnJvbUxlZyA/IGFmdGVySWR4ICsgMSA6IDA7XG4gICAgICBjb25zdCBoaSA9IGxlZyA9PT0gdG9MZWcgPyB0by5sYXN0Q29tbWl0SWR4IDogbG9nLmxlbmd0aCAtIDE7XG4gICAgICBmb3IgKGxldCBpID0gbG87IGkgPD0gaGk7IGkrKykge1xuICAgICAgICBjb25zdCBidW5kbGUgPSBsb2dbaV07XG4gICAgICAgIGlmICghYnVuZGxlKSBjb250aW51ZTtcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBidW5kbGUudHJhY2UpIGtleXMuYWRkKGVudHJ5LnBhdGgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShbLi4ua2V5c10uc29ydCgpKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBNYXJrcyAobGF3IDQ6IGJlc2lkZSB0aGUgbG9nLCBuZXZlciBpbiBpdCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgbWFyayhuYW1lOiBzdHJpbmcsIHN0b3A/OiBTdG9wPFRNZXRhPik6IE1hcmsgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHRhcmdldCA9IHN0b3AgPz8gdGhpcy5hdCgpO1xuICAgIGlmICghdGFyZ2V0KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IGVudHJ5OiBNYXJrID0gT2JqZWN0LmZyZWV6ZSh7IG5hbWUsIHJ1bnRpbWVTdGFnZUlkOiB0YXJnZXQucnVudGltZVN0YWdlSWQsIHN0ZXA6IHRhcmdldC5zdGVwIH0pO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5fbWFya3MuZmluZEluZGV4KChtKSA9PiBtLm5hbWUgPT09IG5hbWUpO1xuICAgIGlmIChleGlzdGluZyA+PSAwKSB0aGlzLl9tYXJrc1tleGlzdGluZ10gPSBlbnRyeTtcbiAgICBlbHNlIHRoaXMuX21hcmtzLnB1c2goZW50cnkpO1xuICAgIHJldHVybiBlbnRyeTtcbiAgfVxuXG4gIG1hcmtzKCk6IHJlYWRvbmx5IE1hcmtbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoWy4uLnRoaXMuX21hcmtzXSk7XG4gIH1cblxuICBqdW1wVG9NYXJrKG5hbWU6IHN0cmluZyk6IE1vdmU8VE1ldGE+IHtcbiAgICBpZiAodGhpcy5zdG9wcy5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLnJlZnVzZSgnZW1wdHknKTtcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMuX21hcmtzLmZpbmQoKG0pID0+IG0ubmFtZSA9PT0gbmFtZSk7XG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuIHRoaXMucmVmdXNlKCdtaXNzJyk7XG4gICAgLy8gUmVzb2x2ZSBieSBydW50aW1lU3RhZ2VJZCBmaXJzdCDigJQgdGhlIGFkZHJlc3MgdGhhdCBzdXJ2aXZlcyBhIGNoYW5nZSBvZlxuICAgIC8vIHN0cmF0ZWd5IOKAlCBhbmQgZmFsbCBiYWNrIHRvIHRoZSByZW1lbWJlcmVkIHN0ZXAgb25seSBmb3IgdGhlIGJvb2tlbmRzLFxuICAgIC8vIHdoaWNoIGhhdmUgbm8gc3RhZ2UgaWQgb2YgdGhlaXIgb3duLlxuICAgIGNvbnN0IGJ5SWQgPSBlbnRyeS5ydW50aW1lU3RhZ2VJZFxuICAgICAgPyB0aGlzLnN0b3BzLmZpbmQoKHN0b3ApID0+IHN0b3AucnVudGltZVN0YWdlSWQgPT09IGVudHJ5LnJ1bnRpbWVTdGFnZUlkKVxuICAgICAgOiB0aGlzLnN0b3BzW2VudHJ5LnN0ZXBdO1xuICAgIGlmICghYnlJZCkgcmV0dXJuIHRoaXMucmVmdXNlKCdtaXNzJywgdGhpcy5uZWFyZXN0VG8oZW50cnkucnVudGltZVN0YWdlSWQpKTtcbiAgICBpZiAoYnlJZC5zdGVwID09PSB0aGlzLnN0ZXApIHJldHVybiB0aGlzLnJlZnVzZSgnY2xhbXBlZCcpO1xuICAgIHJldHVybiB0aGlzLm1vdmVUbyhieUlkLnN0ZXApO1xuICB9XG5cbiAgLy8g4pSA4pSAIERyaWxsaW5nIChsYXcgMTogYSBzZXBhcmF0ZSBjdXJzb3IsIG5vdCBhIHNlY29uZCBwb3NpdGlvbikg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgZHJpbGwobW91bnRSdW50aW1lU3RhZ2VJZDogc3RyaW5nKTogVGltZVRyYXZlbDxUTWV0YT4gfCB1bmRlZmluZWQge1xuICAgIC8vIE9uIGEgY2hhaW4sIHRoZSBtb3VudCBpcyBsb29rZWQgZm9yIGluIGV2ZXJ5IGxlZyDigJQgYSBzdWJmbG93IHRoYXQgcmFuXG4gICAgLy8gYmVmb3JlIHRoZSBwYXVzZSBpcyBpbiB0aGUgZmlyc3Qgc25hcHNob3QncyByZXN1bHRzLCBvbmUgdGhhdCByYW4gYWZ0ZXJcbiAgICAvLyBpcyBpbiB0aGUgc2Vjb25kJ3MuIElkcyBhcmUgdW5pcXVlIGFjcm9zcyBhIHNvdW5kIGNoYWluIChjaGFpbi50c1xuICAgIC8vIHJlZnVzZXMgb25lIHdoZXJlIHRoZXkgYXJlIG5vdCksIHNvIHRoZSBmaXJzdCBoaXQgaXMgdGhlIG9ubHkgaGl0LlxuICAgIGxldCByZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBsZXQgcmVzdWx0OiBTdWJmbG93UmVzdWx0U2hhcGUgfCB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBzb3VyY2Ugb2YgdGhpcy5zb3VyY2VzKSB7XG4gICAgICAvLyBBIHN0b3JlZCByZWNvcmRpbmcncyByZXN1bHRzIGFyZSBwYXJzZWQgSlNPTjogcmVhZCB0aGVtIGFzIGEgbWFwIG9ubHlcbiAgICAgIC8vIHdoZW4gdGhleSBhcmUgb25lLCBhbmQgYXMgXCJubyBzdWJmbG93c1wiIG90aGVyd2lzZS5cbiAgICAgIGlmICghaXNQbGFpbmlzaChzb3VyY2Uuc3ViZmxvd1Jlc3VsdHMpKSBjb250aW51ZTtcbiAgICAgIGNvbnN0IGhpdCA9IHNvdXJjZS5zdWJmbG93UmVzdWx0c1ttb3VudFJ1bnRpbWVTdGFnZUlkXSBhcyBTdWJmbG93UmVzdWx0U2hhcGUgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoaGl0KSB7XG4gICAgICAgIHJlc3VsdHMgPSBzb3VyY2Uuc3ViZmxvd1Jlc3VsdHM7XG4gICAgICAgIHJlc3VsdCA9IGhpdDtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHRyZWUgPSByZXN1bHQ/LnRyZWVDb250ZXh0O1xuICAgIGlmICghcmVzdWx0cyB8fCAhcmVzdWx0IHx8ICF0cmVlIHx8ICFBcnJheS5pc0FycmF5KHRyZWUuaGlzdG9yeSkpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAvLyBgcGF0aGAgaXMgdGhlIHN1YmZsb3cgUEFUSCDigJQgdGhlIHNhbWUgc3RyaW5nIGZvciBldmVyeSBpdGVyYXRpb24gb2YgYVxuICAgIC8vIG1vdW50IGluc2lkZSBhIGxvb3AuIGBtb3VudFJ1bnRpbWVTdGFnZUlkYCBpcyB0aGUgaXRlcmF0aW9uIGFjdHVhbGx5XG4gICAgLy8gb3BlbmVkLCBzbyBhIFVJIGNhbiBsYWJlbCBhbmQga2V5IHRocmVlIGRyaWxsIHBhbmVscyBvdmVyIGBzZngjMmAsXG4gICAgLy8gYHNmeCM4YCwgYHNmeCMxNGAgYXBhcnQgaW5zdGVhZCBvZiBjYWxsaW5nIGFsbCB0aHJlZSAnc2Z4Jy5cbiAgICBjb25zdCBjaGlsZFBhdGggPSByZXN1bHQuc3ViZmxvd0lkID8/IG1vdW50UnVudGltZVN0YWdlSWQ7XG4gICAgY29uc3QgY2hpbGQ6IFRpbWVUcmF2ZWxTb3VyY2UgPSB7XG4gICAgICAvLyBSb3dzIGFyZSBuYXJyb3dlZCBwZXIgYnVuZGxlIHdoZW4gdGhlIGNoaWxkIHJlYWRzIHRoZW0g4oCUIGEgc3RvcmVkXG4gICAgICAvLyByZWNvcmRpbmcncyBpbm5lciBoaXN0b3J5IG5lZWRzIG5vIGNhc3QgZWl0aGVyLlxuICAgICAgY29tbWl0TG9nOiB0cmVlLmhpc3RvcnksXG4gICAgICBpbml0aWFsU3RhdGU6IHRyZWUuaW5pdGlhbFN0YXRlLFxuICAgICAgZXhlY3V0aW9uVHJlZTogdHJlZS5zdGFnZUNvbnRleHRzLFxuICAgICAgLy8gTmVzdGVkIHN1YmZsb3cgcmVzdWx0cyBhcmUgbWVyZ2VkIFVQIGludG8gb25lIGZsYXQsIGR1YWwta2V5ZWQgbWFwLCBzb1xuICAgICAgLy8gdGhlIGNoaWxkIGNhbiBkcmlsbCBmdXJ0aGVyIHRocm91Z2ggdGhlIHNhbWUgbWFwLlxuICAgICAgc3ViZmxvd1Jlc3VsdHM6IHJlc3VsdHMsXG4gICAgfTtcbiAgICByZXR1cm4gbmV3IEN1cnNvcjxUTWV0YT4oW2NoaWxkXSwgeyBzdHJhdGVneTogdGhpcy5vcHRpb25zLnN0cmF0ZWd5IH0sIGNoaWxkUGF0aCwgdGhpcywgbW91bnRSdW50aW1lU3RhZ2VJZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZS1zdGVwIHBlci1zb3VyY2Ugc3RvcHMgaW50byBPTkUgYXhpcy5cbiAqXG4gKiBUaGUgSU5URVJJT1IgYm9va2VuZHMgZ286IGEgYCdzdGFydCdgIG9uIGFueSBsZWcgYnV0IHRoZSBmaXJzdCwgYW5kIGFuXG4gKiBgJ2VuZCdgIG9uIGFueSBsZWcgYnV0IHRoZSBsYXN0LCBhcmUgYm9va2VuZHMgb2YgYSBsZWcgYW5kIG5vdCBvZiB0aGUgcnVuIOKAlFxuICoga2VlcGluZyB0aGVtIHdvdWxkIHB1dCBcInRoZSBydW4gaXMgb3ZlclwiIGluIHRoZSBtaWRkbGUgb2YgdGhlIGF4aXMuIFRoZVxuICogY29tbWl0cyB0aGV5IGNvdmVyZWQgYXJlIG5vdCBvcnBoYW5lZDogYSBmb2xkIGFsd2F5cyByZXBsYXlzIGl0cyBsZWcgZnJvbVxuICogdGhhdCBsZWcncyBvd24gYmFzZSwgYW5kIGBjaGFuZ2VkU2luY2VgIHdhbGtzIGEgc2VhbS1jcm9zc2luZyByYW5nZSBsZWcgYnlcbiAqIGxlZyAoaW5jbHVkaW5nIHRoZSBoZWFkIG9mIHRoZSBsZWcgaXQgZW5kcyBpbikuIFRoZSBzdG9wcycgYGNvbW1pdElkeGAgL1xuICogYGxhc3RDb21taXRJZHhgIHJhbmdlcyBQQVJUSVRJT04gRUFDSCBMRUcsIG5ldmVyIHNwYW4gdGhlIHNlYW06IGEgc3RvcCdzXG4gKiByYW5nZSBlbmRzIGF0IGl0cyBvd24gbGVnJ3MgbGFzdCBpbmRleCwgYW5kIHRoZSBuZXh0IGxlZydzIGZpcnN0IHN0b3Agb3BlbnNcbiAqIGF0IHRoYXQgbGVnJ3MgMC5cbiAqL1xuZnVuY3Rpb24gY2hhaW5TdG9wczxUTWV0YT4ocGVyU291cmNlOiByZWFkb25seSBTdG9wPFRNZXRhPltdW10pOiBTdG9wPFRNZXRhPltdIHtcbiAgLy8gXCJJbnRlcmlvclwiIGlzIG1lYXN1cmVkIGFnYWluc3QgdGhlIGxlZ3MgdGhhdCBhY3R1YWxseSBDT05UUklCVVRFIHN0b3BzOiBhXG4gIC8vIGxlZyB3aG9zZSBsb2cgd2FzIGVtcHR5IGhhcyBubyBib29rZW5kcyB0byBkcm9wIGFuZCBtdXN0IG5vdCBtYWtlIGl0c1xuICAvLyBuZWlnaGJvdXIncyBgJ3N0YXJ0J2Agb3IgYCdlbmQnYCBpbnRlcmlvciDigJQgdGhlIGNoYWluZWQgYXhpcyBzdGlsbCBvcGVuc1xuICAvLyB3aXRoIHRoZSBmaXJzdCBzdG9wIHRoYXQgZXhpc3RzIGFuZCBjbG9zZXMgd2l0aCB0aGUgbGFzdC5cbiAgY29uc3QgY29udHJpYnV0aW5nID0gcGVyU291cmNlLm1hcCgoc3RvcHMpID0+IHN0b3BzLmxlbmd0aCA+IDApO1xuICBjb25zdCBmaXJzdExlZyA9IGNvbnRyaWJ1dGluZy5pbmRleE9mKHRydWUpO1xuICBjb25zdCBsYXN0TGVnID0gY29udHJpYnV0aW5nLmxhc3RJbmRleE9mKHRydWUpO1xuICBjb25zdCBvdXQ6IFN0b3A8VE1ldGE+W10gPSBbXTtcbiAgZm9yIChjb25zdCBbc291cmNlSWR4LCBzdG9wc10gb2YgcGVyU291cmNlLmVudHJpZXMoKSkge1xuICAgIGZvciAoY29uc3Qgc3RvcCBvZiBzdG9wcykge1xuICAgICAgaWYgKHNvdXJjZUlkeCA+IGZpcnN0TGVnICYmIHN0b3Aua2luZCA9PT0gJ3N0YXJ0JykgY29udGludWU7XG4gICAgICBpZiAoc291cmNlSWR4IDwgbGFzdExlZyAmJiBzdG9wLmtpbmQgPT09ICdlbmQnKSBjb250aW51ZTtcbiAgICAgIG91dC5wdXNoKHsgLi4uc3RvcCwgc3RlcDogb3V0Lmxlbmd0aCwgc291cmNlSWR4IH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG4vKipcbiAqIE9wZW4gYSByZWFkZXIncyBjdXJzb3Igb3ZlciBhIGZpbmlzaGVkIHJ1bi5cbiAqXG4gKiBOb3RoaW5nIGhlcmUgZXhlY3V0ZXMgYW55dGhpbmc6IGBzbmFwc2hvdGAgaXMgYSByZWNvcmQgb2YgYSBydW4gdGhhdCBhbHJlYWR5XG4gKiBoYXBwZW5lZCwgYW5kIGV2ZXJ5IHF1ZXN0aW9uIGlzIGFuc3dlcmVkIGJ5IHJlYWRpbmcgaXQuIEEgc3RvcmVkIEpTT05cbiAqIHNuYXBzaG90IHdvcmtzIGV4YWN0bHkgbGlrZSBhIGxpdmUgb25lIOKAlCBzaW5jZSA5LjE4LjAgaXRzIGBjb21taXRMb2dgIG1heSBiZVxuICogYW4gdW52YWxpZGF0ZWQgYHVua25vd25bXWAsIG5hcnJvd2VkIHBlciBidW5kbGUgd2hlcmUgdGhlIGZvbGQgcmVhZHMgaXQsIHNvXG4gKiBhIHJlcGxheWVkIHJlY29yZGluZyBuZWVkcyBubyBjYXN0LlxuICpcbiAqIEBwYXJhbSBzbmFwc2hvdCBgZXhlY3V0b3IuZ2V0U25hcHNob3QoKWAsIG9yIGFueSBvYmplY3Qgd2l0aCB0aGUgc2FtZVxuICogICBzaGFwZSDigJQgaW5jbHVkaW5nIG9uZSByb3VuZC10cmlwcGVkIHRocm91Z2ggSlNPTiwgb3IgYSBzdWJmbG93IHN1YnRyZWVcbiAqICAgKGBnZXRTdWJ0cmVlU25hcHNob3QoKWAsIHdob3NlIGxvZyBpcyBzcGVsbGVkIGBoaXN0b3J5YCkuIEFuIEFSUkFZIG9mIHRoZW1cbiAqICAgaXMgYSBDSEFJTjogYSBwYXVzZSBhbmQgaXRzIHJlc3VtZSByZWFkIGFzIG9uZSBheGlzIChzZWUgYmVsb3cpLlxuICogQHBhcmFtIG9wdGlvbnMgYHN0cmF0ZWd5YCBjaG9vc2VzIGhvdyBzdG9wcyBhcmUgZGVyaXZlZCAoZGVmYXVsdDpcbiAqICAgYGNvbW1pdFN0b3BzYCwgb25lIHN0b3AgcGVyIGV4ZWN1dGVkIHN0YWdlKTsgYG1hcmtzYCBzZWVkcyB0aGUgY3Vyc29yIHdpdGhcbiAqICAgYm9va21hcmtzLCBlLmcuIHJlc3RvcmVkIGZyb20gYSBzYXZlZCByZWFkaW5nIHNlc3Npb24uXG4gKlxuICogQHRocm93cyB3aGVuIGEgY2hhaW4gaXMgbm90IGluIHJ1biBvcmRlciwgb3IgaXRzIGxlZ3MgYXJlIG5vdCBmcm9tIG9uZVxuICogICBsaW5lYWdlIOKAlCB0aHJlZSBjaGVja3MsIGVhY2ggd2l0aCBpdHMgb3duIHJlYXNvbiAoc2VlIGBjaGFpbi50c2ApOlxuICogICBubyBgcnVudGltZVN0YWdlSWRgIG1heSBhcHBlYXIgaW4gdHdvIGxlZ3M7IGVhY2ggbGVnJ3MgZmlyc3QgZXhlY3V0aW9uXG4gKiAgIGluZGV4IG11c3QgYmUgcGFzdCB0aGUgcHJldmlvdXMgbGVnJ3MgbGFzdCAodGhlIGVuZ2luZSBuZXZlciByZXNldHMgdGhlXG4gKiAgIGNvdW50ZXIgYWNyb3NzIGEgcmVzdW1lKTsgYW5kIGVhY2ggbGVnJ3MgYGluaXRpYWxTdGF0ZWAgbXVzdCBkZWVwLWVxdWFsXG4gKiAgIHRoZSBzdGF0ZSB0aGUgbGVncyBiZWZvcmUgaXQgZm9sZCB0byDigJQgb24gYSByZXN1bWUgdGhhdCBiYXNlIElTIHRoZSBzdGF0ZVxuICogICBhdCB0aGUgcGF1c2UsIHNvIGEgZm9yZWlnbiBsZWcgd2hvc2UgaW5kaWNlcyBtZXJlbHkgaGFwcGVuIHRvIGJlIGhpZ2hlclxuICogICBpcyByZWZ1c2VkIHRvby4gVGhlIHRoaXJkIGNoZWNrIHJ1bnMgb25seSB3aGVyZSB0aGUgcmVjb3JkIGFsbG93cyBpdDogdGhlXG4gKiAgIGxhdGVyIGxlZyBtdXN0IGNhcnJ5IGFuIGBpbml0aWFsU3RhdGVgIGFuZCB0aGUgZWFybGllciBsZWdzIG11c3QgZm9sZCBmcm9tXG4gKiAgIGEgcmVhbCBiYXNlIHdpdGggbm8gdW5yZWFkYWJsZSByb3dzOyBvdGhlcndpc2UgKGFuIG9sZGVyIHJlY29yZGluZyB3aXRoXG4gKiAgIG5vIGJhc2UpIHRoZSBjaGFpbiByZXN0cyBvbiB0aGUgdHdvIGluZGV4IGNoZWNrcyBhbG9uZSwgYW5kIHRoZSBmb2xkJ3NcbiAqICAgYGJhc2lzYCBzYXlzIHdoYXQgaXQgc3Rvb2Qgb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHR0ID0gdGltZVRyYXZlbChleGVjdXRvci5nZXRTbmFwc2hvdCgpKTtcbiAqIHR0Lmp1bXBUbygnc2NvcmUtcmlzayM0Jyk7XG4gKiBjb25zb2xlLmxvZyh0dC5jaGFuZ2VkU2luY2UoKSk7ICAgICAgICAvLyBbJ3Jpc2tTY29yZScsICd0aWVyJ11cbiAqIGNvbnNvbGUubG9nKHR0LnN0YXRlQXQoKS5zdGF0ZSk7ICAgICAgIC8vIHN0YXRlIGFzIHRoYXQgc3RhZ2UgbGVmdCBpdFxuICogdHQubWFyaygndGhlIGJhZCBvbmUnKTtcbiAqIGNvbnN0IGlubmVyID0gdHQuZHJpbGwoJ3NmLXBheW1lbnQjNycpOyAvLyBhIHNlcGFyYXRlIGN1cnNvciwgaXRzIG93biBsb2dcbiAqXG4gKiAvLyBBIHBhdXNlIGFuZCBpdHMgcmVzdW1lLCByZWFkIGFzIE9ORSBheGlzOlxuICogY29uc3QgY2hhaW5lZCA9IHRpbWVUcmF2ZWwoW3BhdXNlZFNuYXBzaG90LCByZXN1bWVkU25hcHNob3RdKTtcbiAqIGNoYWluZWQubGFzdCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgcnVuJ3MgcmVhbCBlbmRcbiAqIGNoYWluZWQuYXQoKSEuc291cmNlSWR4OyAgICAgICAgICAgICAgICAvLyAxIOKAlCB3aGljaCBsZWcgdGhlIGluZGljZXMgYXJlIGluXG4gKiBjaGFpbmVkLmp1bXBUbygnYXBwcm92ZSMzJyk7ICAgICAgICAgICAgLy8gZmluZHMgaXQgaW4gZWl0aGVyIGxlZ1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0aW1lVHJhdmVsPFRNZXRhID0gdW5rbm93bj4oXG4gIHNuYXBzaG90OiBUaW1lVHJhdmVsU291cmNlIHwgcmVhZG9ubHkgVGltZVRyYXZlbFNvdXJjZVtdLFxuICBvcHRpb25zOiBUaW1lVHJhdmVsT3B0aW9uczxUTWV0YT4gPSB7fSxcbik6IFRpbWVUcmF2ZWw8VE1ldGE+IHtcbiAgY29uc3Qgc291cmNlcyA9IEFycmF5LmlzQXJyYXkoc25hcHNob3QpID8gKHNuYXBzaG90IGFzIHJlYWRvbmx5IFRpbWVUcmF2ZWxTb3VyY2VbXSkgOiBbc25hcHNob3QgYXMgVGltZVRyYXZlbFNvdXJjZV07XG4gIC8vIEEgb25lLWVsZW1lbnQgYXJyYXkgaXMgbm90IGEgY2hhaW46IGl0IGlzIHRoZSBwbGFpbiBjdXJzb3IsIGFuZCBza2lwcyB0aGVcbiAgLy8gbGluZWFnZSBjaGVja3MgYSBzaW5nbGUgc291cmNlIGNhbm5vdCBmYWlsLlxuICBpZiAoc291cmNlcy5sZW5ndGggIT09IDEpIHtcbiAgICBjb25zdCByZWZ1c2FsID0gcmVmdXNlQ2hhaW4oc291cmNlcy5tYXAoKHNvdXJjZSkgPT4gcmVhZFNvdXJjZShzb3VyY2UpKSk7XG4gICAgaWYgKHJlZnVzYWwpIHRocm93IG5ldyBFcnJvcihyZWZ1c2FsKTtcbiAgfVxuICByZXR1cm4gbmV3IEN1cnNvcjxUTWV0YT4oc291cmNlcywgb3B0aW9ucyk7XG59XG4iXX0=
|
|
361
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZVRyYXZlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdGltZS10cmF2ZWwvdGltZVRyYXZlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQWtDLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFzQnhGLE1BQU0sTUFBTTtJQUNELEtBQUssQ0FBeUI7SUFDOUIsSUFBSSxDQUFxQjtJQUN6QixtQkFBbUIsQ0FBcUI7SUFDeEMsTUFBTSxDQUFnQztJQUN0QyxXQUFXLENBQVM7SUFFWixJQUFJLENBQXdCO0lBQzVCLE9BQU8sQ0FBOEI7SUFDckMsT0FBTyxDQUEyQjtJQUNsQyxNQUFNLENBQVM7SUFDeEIsSUFBSSxDQUFTO0lBQ3JCLG1GQUFtRjtJQUMzRSxRQUFRLENBQXVCO0lBRXZDLFlBQ0UsT0FBb0MsRUFDcEMsT0FBaUMsRUFDakMsSUFBYSxFQUNiLE1BQTBCLEVBQzFCLG1CQUE0QjtRQUU1QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsbUJBQW1CLENBQUM7UUFDL0MsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFB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QyxPQUFPLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBQ0QsT0FBTyxJQUFJLE1BQU0sQ0FBUSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogdGltZVRyYXZlbCDigJQgYSByZWFkZXIncyBjdXJzb3Igb3ZlciBhIGZpbmlzaGVkIHRyYWNlLlxuICpcbiAqIFRoZSBmaXZlIGxhd3MgdGhpcyBmaWxlIGltcGxlbWVudHMgKGFuZCB0aGUgZm9sZGVyIFJFQURNRSBzdGF0ZXMgd2l0aCBhblxuICogZXhhbXBsZSBlYWNoKTpcbiAqXG4gKiAgIDEuIE9ORSBjdXJzb3IuIFRoaXMgb2JqZWN0IGhvbGRzIHRoZSBvbmx5IHBvc2l0aW9uLiBgZHJpbGwoKWAgcmV0dXJucyBhXG4gKiAgICAgIHNlcGFyYXRlIGN1cnNvciBvdmVyIGEgc2VwYXJhdGUgbG9nLCBuZXZlciBhIHNlY29uZCBwb3NpdGlvbiBoZXJlLlxuICogICAyLiBBIG1pc3MgbmV2ZXIgbW92ZXMuIEV2ZXJ5IHJlZnVzYWwgcmV0dXJucyB0aGUgcmVhc29uIGFuZCBsZWF2ZXMgdGhlXG4gKiAgICAgIGN1cnNvciBleGFjdGx5IHdoZXJlIGl0IHdhcy5cbiAqICAgMy4gQSBmb2xkIHJlc3VsdCBpcyBkZXRhY2hlZC4gYHN0YXRlQXRgIHJldHVybnMgZnJvemVuLCBjbG9uZWQgc3RhdGUgdGhhdFxuICogICAgICBzaGFyZXMgbm90aGluZyB3aXRoIHRoZSBlbmdpbmUuXG4gKiAgIDQuIE1hcmtzIGxpdmUgYmVzaWRlIHRoZSBsb2cuIFRoZXkgYXJlIHRoZSByZWFkZXIncyBub3RlcywgbmV2ZXIgd3JpdHRlblxuICogICAgICBpbnRvIHRoZSBydW4ncyByZWNvcmQuXG4gKiAgIDUuIFN0b3BzIGFyZSBERVJJVkVEIGZyb20gdGhlIHJlY29yZGVkIGxvZyDigJQgcmVhZC10aW1lIHF1ZXJpZXMgb3ZlclxuICogICAgICBjb2xsZWN0ZWQgZGF0YSwgbmV2ZXIgYSByZS13YWxrIHRoYXQgaW52ZW50cyB3aGF0IHdhcyBub3QgcmVjb3JkZWQuXG4gKlxuICogQSBDSEFJTiAoOS4xOC4wKSBkb2VzIG5vdCBhZGQgYSBzaXh0aCBsYXcgYW5kIGRvZXMgbm90IGJlbmQgdGhlc2UgZml2ZTogaXRcbiAqIGlzIHN0aWxsIG9uZSBjdXJzb3IsIG92ZXIgc291cmNlcyB0aGF0IGFyZSBzdGlsbCBvbmx5IHJlYWQuIFdoYXQgaXQgYWRkcyBpc1xuICogdGhhdCB0aGUgU1RFUFMgcnVuIGFjcm9zcyBhIHBhdXNlL3Jlc3VtZSDigJQgc2VlIGBjaGFpbi50c2AgZm9yIHRoZSBvcmRlcmluZ1xuICogYW5kIGxpbmVhZ2UgY2hlY2tzLCBhbmQgZm9yIHdoeSBjb21taXQgaW5kaWNlcyBzdGF5IHJ1bi1sb2NhbC5cbiAqL1xuXG5pbXBvcnQgeyBpc1BsYWluaXNoLCByZWFkVHJlZSB9IGZyb20gJy4vYnVuZGxlcy5qcyc7XG5pbXBvcnQgeyByZWZ1c2VDaGFpbiB9IGZyb20gJy4vY2hhaW4uanMnO1xuaW1wb3J0IHsgY29tbWl0U3RvcHNTdHJhdGVneSB9IGZyb20gJy4vY29tbWl0U3RvcHMuanMnO1xuaW1wb3J0IHsgdHlwZSBGb2xkTWVtbywgdHlwZSBSZWFkU291cmNlLCBmb2xkTGVnc0Zyb20sIHJlYWRTb3VyY2UgfSBmcm9tICcuL3N0YXRlQXQuanMnO1xuaW1wb3J0IHR5cGUge1xuICBGb2xkZWRTdGF0ZSxcbiAgTWFyayxcbiAgTW92ZSxcbiAgU3RvcCxcbiAgVGltZVRyYXZlbCxcbiAgVGltZVRyYXZlbE9wdGlvbnMsXG4gIFRpbWVUcmF2ZWxTb3VyY2UsXG4gIFRpbWVUcmF2ZWxTdHJhdGVneSxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKiBBIHN1YmZsb3cgcmVzdWx0IGFzIHRoaXMgbW9kdWxlIG5lZWRzIHRvIHJlYWQgaXQg4oCUIGR1Y2stdHlwZWQgb24gcHVycG9zZS4gKi9cbmludGVyZmFjZSBTdWJmbG93UmVzdWx0U2hhcGUge1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHRyZWVDb250ZXh0Pzoge1xuICAgIGhpc3Rvcnk/OiB1bmtub3duW107XG4gICAgaW5pdGlhbFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgc3RhZ2VDb250ZXh0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9O1xufVxuXG5jbGFzcyBDdXJzb3I8VE1ldGE+IGltcGxlbWVudHMgVGltZVRyYXZlbDxUTWV0YT4ge1xuICByZWFkb25seSBzdG9wczogcmVhZG9ubHkgU3RvcDxUTWV0YT5bXTtcbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBtb3VudFJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHBhcmVudDogVGltZVRyYXZlbDxUTWV0YT4gfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHNvdXJjZUNvdW50OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBsZWdzOiByZWFkb25seSBSZWFkU291cmNlW107XG4gIHByaXZhdGUgcmVhZG9ubHkgc291cmNlczogcmVhZG9ubHkgVGltZVRyYXZlbFNvdXJjZVtdO1xuICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM6IFRpbWVUcmF2ZWxPcHRpb25zPFRNZXRhPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFya3M6IE1hcmtbXTtcbiAgcHJpdmF0ZSBzdGVwOiBudW1iZXI7XG4gIC8qKiBUaGUgbGFzdCBmb2xkJ3Mgd29ya2luZyBjb3B5LCBzbyBhIHN0ZXAgZm9yd2FyZCBhcHBsaWVzIG9uZSBidW5kbGUgKDkuMjUuMCkuICovXG4gIHByaXZhdGUgZm9sZE1lbW86IEZvbGRNZW1vIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNvdXJjZXM6IHJlYWRvbmx5IFRpbWVUcmF2ZWxTb3VyY2VbXSxcbiAgICBvcHRpb25zOiBUaW1lVHJhdmVsT3B0aW9uczxUTWV0YT4sXG4gICAgcGF0aD86IHN0cmluZyxcbiAgICBwYXJlbnQ/OiBUaW1lVHJhdmVsPFRNZXRhPixcbiAgICBtb3VudFJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nLFxuICApIHtcbiAgICB0aGlzLnNvdXJjZXMgPSBzb3VyY2VzO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB0aGlzLm1vdW50UnVudGltZVN0YWdlSWQgPSBtb3VudFJ1bnRpbWVTdGFnZUlkO1xuICAgIHRoaXMubGVncyA9IHNvdXJjZXMubWFwKChzb3VyY2UpID0+IHJlYWRTb3VyY2Uoc291cmNlKSk7XG4gICAgdGhpcy5zb3VyY2VDb3VudCA9IHNvdXJjZXMubGVuZ3RoO1xuXG4gICAgLy8gVGhlIHNoaXBwZWQgc3RyYXRlZ3kgaGFzIG5vIHZvY2FidWxhcnkgb2YgaXRzIG93biAoYG1ldGFgIGlzIG5ldmVyIHNldCksXG4gICAgLy8gc28gaXQgc2VydmVzIGFueSBgVE1ldGFgIGEgY2FsbGVyIGFza2VkIGZvci5cbiAgICBjb25zdCBzdHJhdGVneSA9IG9wdGlvbnMuc3RyYXRlZ3kgPz8gKGNvbW1pdFN0b3BzU3RyYXRlZ3kgYXMgVGltZVRyYXZlbFN0cmF0ZWd5PFRNZXRhPik7XG4gICAgLy8gT05FIENBTEwgUEVSIFNPVVJDRSwgd2l0aCB0aGF0IHNvdXJjZSdzIG93biBsb2cgYW5kIHRyZWU6IGEgc3RyYXRlZ3lcbiAgICAvLyBuZXZlciBoYXMgdG8ga25vdyBpdCBpcyBwYXJ0IG9mIGEgY2hhaW4sIGFuZCBpdHMgaW5kaWNlcyBzdGF5IGxvY2FsIHRvXG4gICAgLy8gdGhlIGxlZyBpdCB3YXMgaGFuZGVkLlxuICAgIGNvbnN0IHBlclNvdXJjZSA9IHRoaXMubGVncy5tYXAoKGxlZywgaSkgPT4gc3RyYXRlZ3kuc3RvcHNGb3IobGVnLmxvZywgcmVhZFRyZWUoc291cmNlc1tpXS5leGVjdXRpb25UcmVlKSkpO1xuICAgIHRoaXMuc3RvcHMgPSBPYmplY3QuZnJlZXplKHNvdXJjZXMubGVuZ3RoID09PSAxID8gcGVyU291cmNlWzBdIDogY2hhaW5TdG9wcyhwZXJTb3VyY2UpKTtcbiAgICB0aGlzLl9tYXJrcyA9IFsuLi4ob3B0aW9ucy5tYXJrcyA/PyBbXSldO1xuICAgIHRoaXMuc3RlcCA9IDA7XG4gIH1cblxuICAvLyDilIDilIAgUG9zaXRpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgYXQoKTogU3RvcDxUTWV0YT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnN0b3BzW3RoaXMuc3RlcF07XG4gIH1cblxuICBwcml2YXRlIG1vdmVUbyhzdGVwOiBudW1iZXIpOiBNb3ZlPFRNZXRhPiB7XG4gICAgY29uc3QgZnJvbSA9IHRoaXMuYXQoKTtcbiAgICB0aGlzLnN0ZXAgPSBzdGVwO1xuICAgIHJldHVybiB7IG1vdmVkOiB0cnVlLCBmcm9tLCB0bzogdGhpcy5zdG9wc1tzdGVwXSB9O1xuICB9XG5cbiAgLyoqIExhdyAyOiBhIHJlZnVzYWwgbmV2ZXIgdG91Y2hlcyBgdGhpcy5zdGVwYC4gKi9cbiAgcHJpdmF0ZSByZWZ1c2UocmVhc29uOiAnY2xhbXBlZCcgfCAnbWlzcycgfCAnZW1wdHknLCBuZWFyZXN0PzogU3RvcDxUTWV0YT4pOiBNb3ZlPFRNZXRhPiB7XG4gICAgY29uc3QgYXQgPSB0aGlzLmF0KCk7XG4gICAgcmV0dXJuIG5lYXJlc3QgPyB7IG1vdmVkOiBmYWxzZSwgcmVhc29uLCBhdCwgbmVhcmVzdCB9IDogeyBtb3ZlZDogZmFsc2UsIHJlYXNvbiwgYXQgfTtcbiAgfVxuXG4gIGZpcnN0KCk6IE1vdmU8VE1ldGE+IHtcbiAgICBpZiAodGhpcy5zdG9wcy5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLnJlZnVzZSgnZW1wdHknKTtcbiAgICBpZiAodGhpcy5zdGVwID09PSAwKSByZXR1cm4gdGhpcy5yZWZ1c2UoJ2NsYW1wZWQnKTtcbiAgICByZXR1cm4gdGhpcy5tb3ZlVG8oMCk7XG4gIH1cblxuICBsYXN0KCk6IE1vdmU8VE1ldGE+IHtcbiAgICBpZiAodGhpcy5zdG9wcy5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLnJlZnVzZSgnZW1wdHknKTtcbiAgICBjb25zdCBlbmQgPSB0aGlzLnN0b3BzLmxlbmd0aCAtIDE7XG4gICAgaWYgKHRoaXMuc3RlcCA9PT0gZW5kKSByZXR1cm4gdGhpcy5yZWZ1c2UoJ2NsYW1wZWQnKTtcbiAgICByZXR1cm4gdGhpcy5tb3ZlVG8oZW5kKTtcbiAgfVxuXG4gIHByZXYoKTogTW92ZTxUTWV0YT4ge1xuICAgIGlmICh0aGlzLnN0b3BzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMucmVmdXNlKCdlbXB0eScpO1xuICAgIGlmICh0aGlzLnN0ZXAgPT09IDApIHJldHVybiB0aGlzLnJlZnVzZSgnY2xhbXBlZCcpO1xuICAgIHJldHVybiB0aGlzLm1vdmVUbyh0aGlzLnN0ZXAgLSAxKTtcbiAgfVxuXG4gIG5leHQoKTogTW92ZTxUTWV0YT4ge1xuICAgIGlmICh0aGlzLnN0b3BzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMucmVmdXNlKCdlbXB0eScpO1xuICAgIGlmICh0aGlzLnN0ZXAgPj0gdGhpcy5zdG9wcy5sZW5ndGggLSAxKSByZXR1cm4gdGhpcy5yZWZ1c2UoJ2NsYW1wZWQnKTtcbiAgICByZXR1cm4gdGhpcy5tb3ZlVG8odGhpcy5zdGVwICsgMSk7XG4gIH1cblxuICBqdW1wVG8odGFyZ2V0OiBudW1iZXIgfCBzdHJpbmcpOiBNb3ZlPFRNZXRhPiB7XG4gICAgaWYgKHRoaXMuc3RvcHMubGVuZ3RoID09PSAwKSByZXR1cm4gdGhpcy5yZWZ1c2UoJ2VtcHR5Jyk7XG5cbiAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbnN0IHN0ZXAgPSBNYXRoLnRydW5jKHRhcmdldCk7XG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKHN0ZXApKSByZXR1cm4gdGhpcy5yZWZ1c2UoJ21pc3MnKTtcbiAgICAgIGlmIChzdGVwIDwgMCkgcmV0dXJuIHRoaXMucmVmdXNlKCdjbGFtcGVkJywgdGhpcy5zdG9wc1swXSk7XG4gICAgICBpZiAoc3RlcCA+IHRoaXMuc3RvcHMubGVuZ3RoIC0gMSkgcmV0dXJuIHRoaXMucmVmdXNlKCdjbGFtcGVkJywgdGhpcy5zdG9wc1t0aGlzLnN0b3BzLmxlbmd0aCAtIDFdKTtcbiAgICAgIGlmIChzdGVwID09PSB0aGlzLnN0ZXApIHJldHVybiB0aGlzLnJlZnVzZSgnY2xhbXBlZCcpO1xuICAgICAgcmV0dXJuIHRoaXMubW92ZVRvKHN0ZXApO1xuICAgIH1cblxuICAgIC8vIGAnJ2AgaXMgbm90IGFuIGFkZHJlc3M6IGl0IGlzIHdoYXQgdGhlIGJvb2tlbmRzIGFuZCBhbnkgcHJlLXN0YWdlXG4gICAgLy8gcm9vdCBjb21taXQgY2FycnkuIFRob3NlIGFyZSByZWFjaGVkIGJ5IHN0ZXAsIG5ldmVyIGJ5IGlkLlxuICAgIGlmICh0YXJnZXQgPT09ICcnKSByZXR1cm4gdGhpcy5yZWZ1c2UoJ21pc3MnKTtcbiAgICBjb25zdCBoaXQgPSB0aGlzLnN0b3BzLmZpbmQoKHN0b3ApID0+IHN0b3AucnVudGltZVN0YWdlSWQgPT09IHRhcmdldCk7XG4gICAgaWYgKCFoaXQpIHJldHVybiB0aGlzLnJlZnVzZSgnbWlzcycsIHRoaXMubmVhcmVzdFRvKHRhcmdldCkpO1xuICAgIGlmIChoaXQuc3RlcCA9PT0gdGhpcy5zdGVwKSByZXR1cm4gdGhpcy5yZWZ1c2UoJ2NsYW1wZWQnKTtcbiAgICByZXR1cm4gdGhpcy5tb3ZlVG8oaGl0LnN0ZXApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjbG9zZXN0IG5hbWFibGUgc3RvcCBmb3IgYSBgcnVudGltZVN0YWdlSWRgIHRoYXQgaXMgbm90IG9uIHRoaXMgYXhpczpcbiAgICogdGhlIGxhc3Qgc3RvcCBvZiB0aGUgc2FtZSBTVEFHRSAoYSBkaWZmZXJlbnQgaXRlcmF0aW9uIG9mIHRoZSBzYW1lIG5vZGUpLFxuICAgKiBlbHNlIHRoZSBsYXN0IHN0b3Agd2hvc2UgY29tbWl0IHByZWNlZGVzIHRoZSBtaXNzZWQgaWQncyBleGVjdXRpb24gaW5kZXguXG4gICAqIE5hbWluZyBhIG5laWdoYm91ciBpcyBhIGNvdXJ0ZXN5IGZvciB0aGUgVUkg4oCUIGl0IG5ldmVyIG1vdmVzIHRoZSBjdXJzb3IuXG4gICAqL1xuICBwcml2YXRlIG5lYXJlc3RUbyhydW50aW1lU3RhZ2VJZDogc3RyaW5nKTogU3RvcDxUTWV0YT4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGhhc2ggPSBydW50aW1lU3RhZ2VJZC5sYXN0SW5kZXhPZignIycpO1xuICAgIGlmIChoYXNoID09PSAtMSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBzdGFnZVBhcnQgPSBydW50aW1lU3RhZ2VJZC5zbGljZSgwLCBoYXNoKTtcbiAgICBjb25zdCB3YW50ZWQgPSBOdW1iZXIucGFyc2VJbnQocnVudGltZVN0YWdlSWQuc2xpY2UoaGFzaCArIDEpLCAxMCk7XG5cbiAgICBsZXQgc2FtZVN0YWdlOiBTdG9wPFRNZXRhPiB8IHVuZGVmaW5lZDtcbiAgICBsZXQgYnlJbmRleDogU3RvcDxUTWV0YT4gfCB1bmRlZmluZWQ7XG4gICAgZm9yIChjb25zdCBzdG9wIG9mIHRoaXMuc3RvcHMpIHtcbiAgICAgIGNvbnN0IHN0b3BIYXNoID0gc3RvcC5ydW50aW1lU3RhZ2VJZC5sYXN0SW5kZXhPZignIycpO1xuICAgICAgaWYgKHN0b3BIYXNoID09PSAtMSkgY29udGludWU7XG4gICAgICBpZiAoc3RvcC5ydW50aW1lU3RhZ2VJZC5zbGljZSgwLCBzdG9wSGFzaCkgPT09IHN0YWdlUGFydCkgc2FtZVN0YWdlID0gc3RvcDtcbiAgICAgIGlmICghTnVtYmVyLmlzTmFOKHdhbnRlZCkpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gTnVtYmVyLnBhcnNlSW50KHN0b3AucnVudGltZVN0YWdlSWQuc2xpY2Uoc3RvcEhhc2ggKyAxKSwgMTApO1xuICAgICAgICBpZiAoIU51bWJlci5pc05hTihpZHgpICYmIGlkeCA8PSB3YW50ZWQpIGJ5SW5kZXggPSBzdG9wO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2FtZVN0YWdlID8/IGJ5SW5kZXg7XG4gIH1cblxuICAvLyDilIDilIAgUmVhZGluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBzdGF0ZUF0KHN0b3A/OiBTdG9wPFRNZXRhPik6IEZvbGRlZFN0YXRlIHtcbiAgICBjb25zdCB0YXJnZXQgPSBzdG9wID8/IHRoaXMuYXQoKTtcbiAgICBjb25zdCBsZWcgPSB0YXJnZXQ/LnNvdXJjZUlkeCA/PyAwO1xuICAgIGNvbnN0IGZvbGQgPSBmb2xkTGVnc0Zyb20odGhpcy5sZWdzLCBsZWcsIHRhcmdldCA/IHRhcmdldC5sYXN0Q29tbWl0SWR4IDogLTEsIHRoaXMuZm9sZE1lbW8pO1xuICAgIHRoaXMuZm9sZE1lbW8gPSBmb2xkLm1lbW87XG4gICAgY29uc3QgZm9sZGVkID0gZm9sZC5mb2xkZWQ7XG4gICAgLy8gV2hpY2ggbGVnIHRoZSBpbmRleCBiZWxvbmdzIHRvLCBidXQgb25seSB3aGVuIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUg4oCUXG4gICAgLy8gYSBzaW5nbGUtc291cmNlIGZvbGQga2VlcHMgdGhlIDkuMTcuMCBzaGFwZSBleGFjdGx5LlxuICAgIHJldHVybiB0aGlzLmxlZ3MubGVuZ3RoID4gMSA/IHsgLi4uZm9sZGVkLCBzb3VyY2VJZHg6IGxlZyB9IDogZm9sZGVkO1xuICB9XG5cbiAgY2hhbmdlZFNpbmNlKGZyb20/OiBTdG9wPFRNZXRhPik6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICBjb25zdCB0byA9IHRoaXMuYXQoKTtcbiAgICBpZiAoIXRvKSByZXR1cm4gT2JqZWN0LmZyZWV6ZShbXSk7XG4gICAgY29uc3Qgc3RhcnQgPSBmcm9tID8/IHRoaXMuc3RvcHNbdGhpcy5zdGVwIC0gMV07XG4gICAgLy8gTm8gZWFybGllciBzdG9wICh3ZSBhcmUgYXQgYCdzdGFydCdgKSDih5IgZXZlcnl0aGluZyB1cCB0byBoZXJlOiBub3RoaW5nXG4gICAgLy8gb24gYSBydW4gY3Vyc29yLCBhbmQgdGhlIHN1YmZsb3cncyBgaW5wdXRNYXBwZXJgIHNlZWQgb24gYSBkcmlsbGVkIG9uZVxuICAgIC8vICh0aGUgc3RhcnQgYm9va2VuZCBjb3ZlcnMgdGhlIGlkLWxlc3MgY29tbWl0cyB0aGF0IHByZWNlZGUgc3RhZ2Ugb25lKS5cbiAgICBjb25zdCB0b0xlZyA9IHRvLnNvdXJjZUlkeCA/PyAwO1xuICAgIGNvbnN0IGZyb21MZWcgPSBzdGFydCA/IHN0YXJ0LnNvdXJjZUlkeCA/PyAwIDogdG9MZWc7XG4gICAgY29uc3QgYWZ0ZXJJZHggPSBzdGFydCA/IHN0YXJ0Lmxhc3RDb21taXRJZHggOiAtMTtcbiAgICBjb25zdCBrZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgLy8gQSByYW5nZSB0aGF0IGNyb3NzZXMgYSBjaGFpbiBzZWFtIGlzIHdhbGtlZCBsZWcgYnkgbGVnOiB0aGUgdGFpbCBvZiB0aGVcbiAgICAvLyBsZWcgaXQgc3RhcnRlZCBpbiwgZXZlcnkgbGVnIGluIGJldHdlZW4gd2hvbGUsIHRoZW4gdGhlIGhlYWQgb2YgdGhlIGxlZ1xuICAgIC8vIGl0IGVuZHMgaW4uIEJhY2t3YXJkcyByYW5nZXMgd2FsayBub3RoaW5nIGFuZCBnaXZlIGBbXWAsIGFzIGJlZm9yZS5cbiAgICBmb3IgKGxldCBsZWcgPSBmcm9tTGVnOyBsZWcgPD0gdG9MZWcgJiYgbGVnIDwgdGhpcy5sZWdzLmxlbmd0aDsgbGVnKyspIHtcbiAgICAgIGNvbnN0IGxvZyA9IHRoaXMubGVnc1tsZWddLmxvZztcbiAgICAgIGNvbnN0IGxvID0gbGVnID09PSBmcm9tTGVnID8gYWZ0ZXJJZHggKyAxIDogMDtcbiAgICAgIGNvbnN0IGhpID0gbGVnID09PSB0b0xlZyA/IHRvLmxhc3RDb21taXRJZHggOiBsb2cubGVuZ3RoIC0gMTtcbiAgICAgIGZvciAobGV0IGkgPSBsbzsgaSA8PSBoaTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGJ1bmRsZSA9IGxvZ1tpXTtcbiAgICAgICAgaWYgKCFidW5kbGUpIGNvbnRpbnVlO1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGJ1bmRsZS50cmFjZSkga2V5cy5hZGQoZW50cnkucGF0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKFsuLi5rZXlzXS5zb3J0KCkpO1xuICB9XG5cbiAgLy8g4pSA4pSAIE1hcmtzIChsYXcgNDogYmVzaWRlIHRoZSBsb2csIG5ldmVyIGluIGl0KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBtYXJrKG5hbWU6IHN0cmluZywgc3RvcD86IFN0b3A8VE1ldGE+KTogTWFyayB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gc3RvcCA/PyB0aGlzLmF0KCk7XG4gICAgaWYgKCF0YXJnZXQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZW50cnk6IE1hcmsgPSBPYmplY3QuZnJlZXplKHsgbmFtZSwgcnVudGltZVN0YWdlSWQ6IHRhcmdldC5ydW50aW1lU3RhZ2VJZCwgc3RlcDogdGFyZ2V0LnN0ZXAgfSk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLl9tYXJrcy5maW5kSW5kZXgoKG0pID0+IG0ubmFtZSA9PT0gbmFtZSk7XG4gICAgaWYgKGV4aXN0aW5nID49IDApIHRoaXMuX21hcmtzW2V4aXN0aW5nXSA9IGVudHJ5O1xuICAgIGVsc2UgdGhpcy5fbWFya3MucHVzaChlbnRyeSk7XG4gICAgcmV0dXJuIGVudHJ5O1xuICB9XG5cbiAgbWFya3MoKTogcmVhZG9ubHkgTWFya1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShbLi4udGhpcy5fbWFya3NdKTtcbiAgfVxuXG4gIGp1bXBUb01hcmsobmFtZTogc3RyaW5nKTogTW92ZTxUTWV0YT4ge1xuICAgIGlmICh0aGlzLnN0b3BzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMucmVmdXNlKCdlbXB0eScpO1xuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5fbWFya3MuZmluZCgobSkgPT4gbS5uYW1lID09PSBuYW1lKTtcbiAgICBpZiAoIWVudHJ5KSByZXR1cm4gdGhpcy5yZWZ1c2UoJ21pc3MnKTtcbiAgICAvLyBSZXNvbHZlIGJ5IHJ1bnRpbWVTdGFnZUlkIGZpcnN0IOKAlCB0aGUgYWRkcmVzcyB0aGF0IHN1cnZpdmVzIGEgY2hhbmdlIG9mXG4gICAgLy8gc3RyYXRlZ3kg4oCUIGFuZCBmYWxsIGJhY2sgdG8gdGhlIHJlbWVtYmVyZWQgc3RlcCBvbmx5IGZvciB0aGUgYm9va2VuZHMsXG4gICAgLy8gd2hpY2ggaGF2ZSBubyBzdGFnZSBpZCBvZiB0aGVpciBvd24uXG4gICAgY29uc3QgYnlJZCA9IGVudHJ5LnJ1bnRpbWVTdGFnZUlkXG4gICAgICA/IHRoaXMuc3RvcHMuZmluZCgoc3RvcCkgPT4gc3RvcC5ydW50aW1lU3RhZ2VJZCA9PT0gZW50cnkucnVudGltZVN0YWdlSWQpXG4gICAgICA6IHRoaXMuc3RvcHNbZW50cnkuc3RlcF07XG4gICAgaWYgKCFieUlkKSByZXR1cm4gdGhpcy5yZWZ1c2UoJ21pc3MnLCB0aGlzLm5lYXJlc3RUbyhlbnRyeS5ydW50aW1lU3RhZ2VJZCkpO1xuICAgIGlmIChieUlkLnN0ZXAgPT09IHRoaXMuc3RlcCkgcmV0dXJuIHRoaXMucmVmdXNlKCdjbGFtcGVkJyk7XG4gICAgcmV0dXJuIHRoaXMubW92ZVRvKGJ5SWQuc3RlcCk7XG4gIH1cblxuICAvLyDilIDilIAgRHJpbGxpbmcgKGxhdyAxOiBhIHNlcGFyYXRlIGN1cnNvciwgbm90IGEgc2Vjb25kIHBvc2l0aW9uKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBkcmlsbChtb3VudFJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiBUaW1lVHJhdmVsPFRNZXRhPiB8IHVuZGVmaW5lZCB7XG4gICAgLy8gT24gYSBjaGFpbiwgdGhlIG1vdW50IGlzIGxvb2tlZCBmb3IgaW4gZXZlcnkgbGVnIOKAlCBhIHN1YmZsb3cgdGhhdCByYW5cbiAgICAvLyBiZWZvcmUgdGhlIHBhdXNlIGlzIGluIHRoZSBmaXJzdCBzbmFwc2hvdCdzIHJlc3VsdHMsIG9uZSB0aGF0IHJhbiBhZnRlclxuICAgIC8vIGlzIGluIHRoZSBzZWNvbmQncy4gSWRzIGFyZSB1bmlxdWUgYWNyb3NzIGEgc291bmQgY2hhaW4gKGNoYWluLnRzXG4gICAgLy8gcmVmdXNlcyBvbmUgd2hlcmUgdGhleSBhcmUgbm90KSwgc28gdGhlIGZpcnN0IGhpdCBpcyB0aGUgb25seSBoaXQuXG4gICAgbGV0IHJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIGxldCByZXN1bHQ6IFN1YmZsb3dSZXN1bHRTaGFwZSB8IHVuZGVmaW5lZDtcbiAgICBmb3IgKGNvbnN0IHNvdXJjZSBvZiB0aGlzLnNvdXJjZXMpIHtcbiAgICAgIC8vIEEgc3RvcmVkIHJlY29yZGluZydzIHJlc3VsdHMgYXJlIHBhcnNlZCBKU09OOiByZWFkIHRoZW0gYXMgYSBtYXAgb25seVxuICAgICAgLy8gd2hlbiB0aGV5IGFyZSBvbmUsIGFuZCBhcyBcIm5vIHN1YmZsb3dzXCIgb3RoZXJ3aXNlLlxuICAgICAgaWYgKCFpc1BsYWluaXNoKHNvdXJjZS5zdWJmbG93UmVzdWx0cykpIGNvbnRpbnVlO1xuICAgICAgY29uc3QgaGl0ID0gc291cmNlLnN1YmZsb3dSZXN1bHRzW21vdW50UnVudGltZVN0YWdlSWRdIGFzIFN1YmZsb3dSZXN1bHRTaGFwZSB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChoaXQpIHtcbiAgICAgICAgcmVzdWx0cyA9IHNvdXJjZS5zdWJmbG93UmVzdWx0cztcbiAgICAgICAgcmVzdWx0ID0gaGl0O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdHJlZSA9IHJlc3VsdD8udHJlZUNvbnRleHQ7XG4gICAgaWYgKCFyZXN1bHRzIHx8ICFyZXN1bHQgfHwgIXRyZWUgfHwgIUFycmF5LmlzQXJyYXkodHJlZS5oaXN0b3J5KSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIC8vIGBwYXRoYCBpcyB0aGUgc3ViZmxvdyBQQVRIIOKAlCB0aGUgc2FtZSBzdHJpbmcgZm9yIGV2ZXJ5IGl0ZXJhdGlvbiBvZiBhXG4gICAgLy8gbW91bnQgaW5zaWRlIGEgbG9vcC4gYG1vdW50UnVudGltZVN0YWdlSWRgIGlzIHRoZSBpdGVyYXRpb24gYWN0dWFsbHlcbiAgICAvLyBvcGVuZWQsIHNvIGEgVUkgY2FuIGxhYmVsIGFuZCBrZXkgdGhyZWUgZHJpbGwgcGFuZWxzIG92ZXIgYHNmeCMyYCxcbiAgICAvLyBgc2Z4IzhgLCBgc2Z4IzE0YCBhcGFydCBpbnN0ZWFkIG9mIGNhbGxpbmcgYWxsIHRocmVlICdzZngnLlxuICAgIGNvbnN0IGNoaWxkUGF0aCA9IHJlc3VsdC5zdWJmbG93SWQgPz8gbW91bnRSdW50aW1lU3RhZ2VJZDtcbiAgICBjb25zdCBjaGlsZDogVGltZVRyYXZlbFNvdXJjZSA9IHtcbiAgICAgIC8vIFJvd3MgYXJlIG5hcnJvd2VkIHBlciBidW5kbGUgd2hlbiB0aGUgY2hpbGQgcmVhZHMgdGhlbSDigJQgYSBzdG9yZWRcbiAgICAgIC8vIHJlY29yZGluZydzIGlubmVyIGhpc3RvcnkgbmVlZHMgbm8gY2FzdCBlaXRoZXIuXG4gICAgICBjb21taXRMb2c6IHRyZWUuaGlzdG9yeSxcbiAgICAgIGluaXRpYWxTdGF0ZTogdHJlZS5pbml0aWFsU3RhdGUsXG4gICAgICBleGVjdXRpb25UcmVlOiB0cmVlLnN0YWdlQ29udGV4dHMsXG4gICAgICAvLyBOZXN0ZWQgc3ViZmxvdyByZXN1bHRzIGFyZSBtZXJnZWQgVVAgaW50byBvbmUgZmxhdCwgZHVhbC1rZXllZCBtYXAsIHNvXG4gICAgICAvLyB0aGUgY2hpbGQgY2FuIGRyaWxsIGZ1cnRoZXIgdGhyb3VnaCB0aGUgc2FtZSBtYXAuXG4gICAgICBzdWJmbG93UmVzdWx0czogcmVzdWx0cyxcbiAgICB9O1xuICAgIHJldHVybiBuZXcgQ3Vyc29yPFRNZXRhPihbY2hpbGRdLCB7IHN0cmF0ZWd5OiB0aGlzLm9wdGlvbnMuc3RyYXRlZ3kgfSwgY2hpbGRQYXRoLCB0aGlzLCBtb3VudFJ1bnRpbWVTdGFnZUlkKTtcbiAgfVxufVxuXG4vKipcbiAqIFJlLXN0ZXAgcGVyLXNvdXJjZSBzdG9wcyBpbnRvIE9ORSBheGlzLlxuICpcbiAqIFRoZSBJTlRFUklPUiBib29rZW5kcyBnbzogYSBgJ3N0YXJ0J2Agb24gYW55IGxlZyBidXQgdGhlIGZpcnN0LCBhbmQgYW5cbiAqIGAnZW5kJ2Agb24gYW55IGxlZyBidXQgdGhlIGxhc3QsIGFyZSBib29rZW5kcyBvZiBhIGxlZyBhbmQgbm90IG9mIHRoZSBydW4g4oCUXG4gKiBrZWVwaW5nIHRoZW0gd291bGQgcHV0IFwidGhlIHJ1biBpcyBvdmVyXCIgaW4gdGhlIG1pZGRsZSBvZiB0aGUgYXhpcy4gVGhlXG4gKiBjb21taXRzIHRoZXkgY292ZXJlZCBhcmUgbm90IG9ycGhhbmVkOiBhIGZvbGQgYWx3YXlzIHJlcGxheXMgaXRzIGxlZyBmcm9tXG4gKiB0aGF0IGxlZydzIG93biBiYXNlLCBhbmQgYGNoYW5nZWRTaW5jZWAgd2Fsa3MgYSBzZWFtLWNyb3NzaW5nIHJhbmdlIGxlZyBieVxuICogbGVnIChpbmNsdWRpbmcgdGhlIGhlYWQgb2YgdGhlIGxlZyBpdCBlbmRzIGluKS4gVGhlIHN0b3BzJyBgY29tbWl0SWR4YCAvXG4gKiBgbGFzdENvbW1pdElkeGAgcmFuZ2VzIFBBUlRJVElPTiBFQUNIIExFRywgbmV2ZXIgc3BhbiB0aGUgc2VhbTogYSBzdG9wJ3NcbiAqIHJhbmdlIGVuZHMgYXQgaXRzIG93biBsZWcncyBsYXN0IGluZGV4LCBhbmQgdGhlIG5leHQgbGVnJ3MgZmlyc3Qgc3RvcCBvcGVuc1xuICogYXQgdGhhdCBsZWcncyAwLlxuICovXG5mdW5jdGlvbiBjaGFpblN0b3BzPFRNZXRhPihwZXJTb3VyY2U6IHJlYWRvbmx5IFN0b3A8VE1ldGE+W11bXSk6IFN0b3A8VE1ldGE+W10ge1xuICAvLyBcIkludGVyaW9yXCIgaXMgbWVhc3VyZWQgYWdhaW5zdCB0aGUgbGVncyB0aGF0IGFjdHVhbGx5IENPTlRSSUJVVEUgc3RvcHM6IGFcbiAgLy8gbGVnIHdob3NlIGxvZyB3YXMgZW1wdHkgaGFzIG5vIGJvb2tlbmRzIHRvIGRyb3AgYW5kIG11c3Qgbm90IG1ha2UgaXRzXG4gIC8vIG5laWdoYm91cidzIGAnc3RhcnQnYCBvciBgJ2VuZCdgIGludGVyaW9yIOKAlCB0aGUgY2hhaW5lZCBheGlzIHN0aWxsIG9wZW5zXG4gIC8vIHdpdGggdGhlIGZpcnN0IHN0b3AgdGhhdCBleGlzdHMgYW5kIGNsb3NlcyB3aXRoIHRoZSBsYXN0LlxuICBjb25zdCBjb250cmlidXRpbmcgPSBwZXJTb3VyY2UubWFwKChzdG9wcykgPT4gc3RvcHMubGVuZ3RoID4gMCk7XG4gIGNvbnN0IGZpcnN0TGVnID0gY29udHJpYnV0aW5nLmluZGV4T2YodHJ1ZSk7XG4gIGNvbnN0IGxhc3RMZWcgPSBjb250cmlidXRpbmcubGFzdEluZGV4T2YodHJ1ZSk7XG4gIGNvbnN0IG91dDogU3RvcDxUTWV0YT5bXSA9IFtdO1xuICBmb3IgKGNvbnN0IFtzb3VyY2VJZHgsIHN0b3BzXSBvZiBwZXJTb3VyY2UuZW50cmllcygpKSB7XG4gICAgZm9yIChjb25zdCBzdG9wIG9mIHN0b3BzKSB7XG4gICAgICBpZiAoc291cmNlSWR4ID4gZmlyc3RMZWcgJiYgc3RvcC5raW5kID09PSAnc3RhcnQnKSBjb250aW51ZTtcbiAgICAgIGlmIChzb3VyY2VJZHggPCBsYXN0TGVnICYmIHN0b3Aua2luZCA9PT0gJ2VuZCcpIGNvbnRpbnVlO1xuICAgICAgb3V0LnB1c2goeyAuLi5zdG9wLCBzdGVwOiBvdXQubGVuZ3RoLCBzb3VyY2VJZHggfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKlxuICogT3BlbiBhIHJlYWRlcidzIGN1cnNvciBvdmVyIGEgZmluaXNoZWQgcnVuLlxuICpcbiAqIE5vdGhpbmcgaGVyZSBleGVjdXRlcyBhbnl0aGluZzogYHNuYXBzaG90YCBpcyBhIHJlY29yZCBvZiBhIHJ1biB0aGF0IGFscmVhZHlcbiAqIGhhcHBlbmVkLCBhbmQgZXZlcnkgcXVlc3Rpb24gaXMgYW5zd2VyZWQgYnkgcmVhZGluZyBpdC4gQSBzdG9yZWQgSlNPTlxuICogc25hcHNob3Qgd29ya3MgZXhhY3RseSBsaWtlIGEgbGl2ZSBvbmUg4oCUIHNpbmNlIDkuMTguMCBpdHMgYGNvbW1pdExvZ2AgbWF5IGJlXG4gKiBhbiB1bnZhbGlkYXRlZCBgdW5rbm93bltdYCwgbmFycm93ZWQgcGVyIGJ1bmRsZSB3aGVyZSB0aGUgZm9sZCByZWFkcyBpdCwgc29cbiAqIGEgcmVwbGF5ZWQgcmVjb3JkaW5nIG5lZWRzIG5vIGNhc3QuXG4gKlxuICogQHBhcmFtIHNuYXBzaG90IGBleGVjdXRvci5nZXRTbmFwc2hvdCgpYCwgb3IgYW55IG9iamVjdCB3aXRoIHRoZSBzYW1lXG4gKiAgIHNoYXBlIOKAlCBpbmNsdWRpbmcgb25lIHJvdW5kLXRyaXBwZWQgdGhyb3VnaCBKU09OLCBvciBhIHN1YmZsb3cgc3VidHJlZVxuICogICAoYGdldFN1YnRyZWVTbmFwc2hvdCgpYCwgd2hvc2UgbG9nIGlzIHNwZWxsZWQgYGhpc3RvcnlgKS4gQW4gQVJSQVkgb2YgdGhlbVxuICogICBpcyBhIENIQUlOOiBhIHBhdXNlIGFuZCBpdHMgcmVzdW1lIHJlYWQgYXMgb25lIGF4aXMgKHNlZSBiZWxvdykuXG4gKiBAcGFyYW0gb3B0aW9ucyBgc3RyYXRlZ3lgIGNob29zZXMgaG93IHN0b3BzIGFyZSBkZXJpdmVkIChkZWZhdWx0OlxuICogICBgY29tbWl0U3RvcHNgLCBvbmUgc3RvcCBwZXIgZXhlY3V0ZWQgc3RhZ2UpOyBgbWFya3NgIHNlZWRzIHRoZSBjdXJzb3Igd2l0aFxuICogICBib29rbWFya3MsIGUuZy4gcmVzdG9yZWQgZnJvbSBhIHNhdmVkIHJlYWRpbmcgc2Vzc2lvbi5cbiAqXG4gKiBAdGhyb3dzIHdoZW4gYSBjaGFpbiBpcyBub3QgaW4gcnVuIG9yZGVyLCBvciBpdHMgbGVncyBhcmUgbm90IGZyb20gb25lXG4gKiAgIGxpbmVhZ2Ug4oCUIHRocmVlIGNoZWNrcywgZWFjaCB3aXRoIGl0cyBvd24gcmVhc29uIChzZWUgYGNoYWluLnRzYCk6XG4gKiAgIG5vIGBydW50aW1lU3RhZ2VJZGAgbWF5IGFwcGVhciBpbiB0d28gbGVnczsgZWFjaCBsZWcncyBmaXJzdCBleGVjdXRpb25cbiAqICAgaW5kZXggbXVzdCBiZSBwYXN0IHRoZSBwcmV2aW91cyBsZWcncyBsYXN0ICh0aGUgZW5naW5lIG5ldmVyIHJlc2V0cyB0aGVcbiAqICAgY291bnRlciBhY3Jvc3MgYSByZXN1bWUpOyBhbmQgZWFjaCBsZWcncyBgaW5pdGlhbFN0YXRlYCBtdXN0IGRlZXAtZXF1YWxcbiAqICAgdGhlIHN0YXRlIHRoZSBsZWdzIGJlZm9yZSBpdCBmb2xkIHRvIOKAlCBvbiBhIHJlc3VtZSB0aGF0IGJhc2UgSVMgdGhlIHN0YXRlXG4gKiAgIGF0IHRoZSBwYXVzZSwgc28gYSBmb3JlaWduIGxlZyB3aG9zZSBpbmRpY2VzIG1lcmVseSBoYXBwZW4gdG8gYmUgaGlnaGVyXG4gKiAgIGlzIHJlZnVzZWQgdG9vLiBUaGUgdGhpcmQgY2hlY2sgcnVucyBvbmx5IHdoZXJlIHRoZSByZWNvcmQgYWxsb3dzIGl0OiB0aGVcbiAqICAgbGF0ZXIgbGVnIG11c3QgY2FycnkgYW4gYGluaXRpYWxTdGF0ZWAgYW5kIHRoZSBlYXJsaWVyIGxlZ3MgbXVzdCBmb2xkIGZyb21cbiAqICAgYSByZWFsIGJhc2Ugd2l0aCBubyB1bnJlYWRhYmxlIHJvd3M7IG90aGVyd2lzZSAoYW4gb2xkZXIgcmVjb3JkaW5nIHdpdGhcbiAqICAgbm8gYmFzZSkgdGhlIGNoYWluIHJlc3RzIG9uIHRoZSB0d28gaW5kZXggY2hlY2tzIGFsb25lLCBhbmQgdGhlIGZvbGQnc1xuICogICBgYmFzaXNgIHNheXMgd2hhdCBpdCBzdG9vZCBvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgdHQgPSB0aW1lVHJhdmVsKGV4ZWN1dG9yLmdldFNuYXBzaG90KCkpO1xuICogdHQuanVtcFRvKCdzY29yZS1yaXNrIzQnKTtcbiAqIGNvbnNvbGUubG9nKHR0LmNoYW5nZWRTaW5jZSgpKTsgICAgICAgIC8vIFsncmlza1Njb3JlJywgJ3RpZXInXVxuICogY29uc29sZS5sb2codHQuc3RhdGVBdCgpLnN0YXRlKTsgICAgICAgLy8gc3RhdGUgYXMgdGhhdCBzdGFnZSBsZWZ0IGl0XG4gKiB0dC5tYXJrKCd0aGUgYmFkIG9uZScpO1xuICogY29uc3QgaW5uZXIgPSB0dC5kcmlsbCgnc2YtcGF5bWVudCM3Jyk7IC8vIGEgc2VwYXJhdGUgY3Vyc29yLCBpdHMgb3duIGxvZ1xuICpcbiAqIC8vIEEgcGF1c2UgYW5kIGl0cyByZXN1bWUsIHJlYWQgYXMgT05FIGF4aXM6XG4gKiBjb25zdCBjaGFpbmVkID0gdGltZVRyYXZlbChbcGF1c2VkU25hcHNob3QsIHJlc3VtZWRTbmFwc2hvdF0pO1xuICogY2hhaW5lZC5sYXN0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBydW4ncyByZWFsIGVuZFxuICogY2hhaW5lZC5hdCgpIS5zb3VyY2VJZHg7ICAgICAgICAgICAgICAgIC8vIDEg4oCUIHdoaWNoIGxlZyB0aGUgaW5kaWNlcyBhcmUgaW5cbiAqIGNoYWluZWQuanVtcFRvKCdhcHByb3ZlIzMnKTsgICAgICAgICAgICAvLyBmaW5kcyBpdCBpbiBlaXRoZXIgbGVnXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpbWVUcmF2ZWw8VE1ldGEgPSB1bmtub3duPihcbiAgc25hcHNob3Q6IFRpbWVUcmF2ZWxTb3VyY2UgfCByZWFkb25seSBUaW1lVHJhdmVsU291cmNlW10sXG4gIG9wdGlvbnM6IFRpbWVUcmF2ZWxPcHRpb25zPFRNZXRhPiA9IHt9LFxuKTogVGltZVRyYXZlbDxUTWV0YT4ge1xuICBjb25zdCBzb3VyY2VzID0gQXJyYXkuaXNBcnJheShzbmFwc2hvdCkgPyAoc25hcHNob3QgYXMgcmVhZG9ubHkgVGltZVRyYXZlbFNvdXJjZVtdKSA6IFtzbmFwc2hvdCBhcyBUaW1lVHJhdmVsU291cmNlXTtcbiAgLy8gQSBvbmUtZWxlbWVudCBhcnJheSBpcyBub3QgYSBjaGFpbjogaXQgaXMgdGhlIHBsYWluIGN1cnNvciwgYW5kIHNraXBzIHRoZVxuICAvLyBsaW5lYWdlIGNoZWNrcyBhIHNpbmdsZSBzb3VyY2UgY2Fubm90IGZhaWwuXG4gIGlmIChzb3VyY2VzLmxlbmd0aCAhPT0gMSkge1xuICAgIGNvbnN0IHJlZnVzYWwgPSByZWZ1c2VDaGFpbihzb3VyY2VzLm1hcCgoc291cmNlKSA9PiByZWFkU291cmNlKHNvdXJjZSkpKTtcbiAgICBpZiAocmVmdXNhbCkgdGhyb3cgbmV3IEVycm9yKHJlZnVzYWwpO1xuICB9XG4gIHJldHVybiBuZXcgQ3Vyc29yPFRNZXRhPihzb3VyY2VzLCBvcHRpb25zKTtcbn1cbiJdfQ==
|
package/dist/index.js
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* @module
|
|
16
16
|
*/
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
-
exports.isDevMode = exports.enableDevMode = exports.disableDevMode = exports.formatErrorInfo = exports.extractErrorInfo = exports.validateOrThrow = exports.validateAgainstSchema = exports.InputValidationError = exports.isZod = exports.isValidatable = exports.detectSchema = exports.interrupt = exports.CompositeRecorder = exports.listSubflowPaths = exports.getSubtreeSnapshot = exports.WindowedNarrativeFlowRecorder = exports.SilentNarrativeFlowRecorder = exports.SeparateNarrativeFlowRecorder = exports.RLENarrativeFlowRecorder = exports.ProgressiveNarrativeFlowRecorder = exports.MilestoneNarrativeFlowRecorder = exports.AdaptiveNarrativeFlowRecorder = exports.ManifestFlowRecorder = exports.NarrativeFlowRecorder = exports.isFlowEvent = exports.hasRecorderMethods = exports.hasFlowRecorderMethods = exports.hasEmitRecorderMethods = exports.RecorderOperation = exports.DebugRecorder = exports.MetricRecorder = exports.RunContext = exports.FlowChartExecutor = exports.select = exports.decide = exports.narrative = exports.flowChartSelector = exports.FlowChartBuilder = exports.flowChart = void 0;
|
|
18
|
+
exports.stringifySnapshot = exports.isDevMode = exports.enableDevMode = exports.disableDevMode = exports.formatErrorInfo = exports.extractErrorInfo = exports.validateOrThrow = exports.validateAgainstSchema = exports.InputValidationError = exports.isZod = exports.isValidatable = exports.detectSchema = exports.interrupt = exports.CompositeRecorder = exports.listSubflowPaths = exports.getSubtreeSnapshot = exports.WindowedNarrativeFlowRecorder = exports.SilentNarrativeFlowRecorder = exports.SeparateNarrativeFlowRecorder = exports.RLENarrativeFlowRecorder = exports.ProgressiveNarrativeFlowRecorder = exports.MilestoneNarrativeFlowRecorder = exports.AdaptiveNarrativeFlowRecorder = exports.ManifestFlowRecorder = exports.NarrativeFlowRecorder = exports.isFlowEvent = exports.hasRecorderMethods = exports.hasFlowRecorderMethods = exports.hasEmitRecorderMethods = exports.RecorderOperation = exports.DebugRecorder = exports.MetricRecorder = exports.RunContext = exports.FlowChartExecutor = exports.select = exports.decide = exports.narrative = exports.flowChartSelector = exports.FlowChartBuilder = exports.flowChart = void 0;
|
|
19
19
|
/** @category Quick Start */
|
|
20
20
|
var index_js_1 = require("./lib/builder/index.js");
|
|
21
21
|
Object.defineProperty(exports, "flowChart", { enumerable: true, get: function () { return index_js_1.flowChart; } });
|
|
@@ -125,4 +125,8 @@ Object.defineProperty(exports, "isDevMode", { enumerable: true, get: function ()
|
|
|
125
125
|
// `defineScopeFromZod` and the other zod-based scope helpers moved to the opt-in
|
|
126
126
|
// `footprintjs/zod` entry — keeping zod out of the core load path (it is an
|
|
127
127
|
// optional peer). Import them from 'footprintjs/zod'.
|
|
128
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHOzs7QUFTSCw0QkFBNEI7QUFDNUIsbURBQXdGO0FBQS9FLHFHQUFBLFNBQVMsT0FBQTtBQUFFLDRHQUFBLGdCQUFnQixPQUFBO0FBQUUsNkdBQUEsaUJBQWlCLE9BQUE7QUE2QnZELDRCQUE0QjtBQUM1QiwrQ0FBMkM7QUFBbEMseUdBQUEsU0FBUyxPQUFBO0FBb0JsQixtQ0FBbUM7QUFDbkMsa0RBQXVEO0FBQTlDLGtHQUFBLE1BQU0sT0FBQTtBQUFFLGtHQUFBLE1BQU0sT0FBQTtBQVl2QixvQkFBb0I7QUFDcEIsa0RBQTBEO0FBQWpELDZHQUFBLGlCQUFpQixPQUFBO0FBRTFCLG9CQUFvQjtBQUNwQixrREFBbUQ7QUFBMUMsc0dBQUEsVUFBVSxPQUFBO0FBcUJuQiwrQkFBK0I7QUFDL0IsaURBQXNEO0FBQTdDLDBHQUFBLGNBQWMsT0FBQTtBQUV2QiwrQkFBK0I7QUFDL0IsaURBQXFEO0FBQTVDLHlHQUFBLGFBQWEsT0FBQTtBQUV0QixvQ0FBb0M7QUFDcEMsb0RBQTREO0FBQW5ELDZHQUFBLGlCQUFpQixPQUFBO0FBbUMxQixxRUFBcUU7QUFDckUsb0RBS2lDO0FBSi9CLGtIQUFBLHNCQUFzQixPQUFBO0FBQ3RCLGtIQUFBLHNCQUFzQixPQUFBO0FBQ3RCLDhHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLHVHQUFBLFdBQVcsT0FBQTtBQWtEYiwrQkFBK0I7QUFDL0Isa0RBQThEO0FBQXJELGlIQUFBLHFCQUFxQixPQUFBO0FBSzlCLCtCQUErQjtBQUMvQixtREFBNkQ7QUFBcEQsaUhBQUEsb0JBQW9CLE9BQUE7QUFFN0IsK0JBQStCO0FBQy9CLG1EQUFzRTtBQUE3RCwwSEFBQSw2QkFBNkIsT0FBQTtBQUV0QywrQkFBK0I7QUFDL0IsbURBQXVFO0FBQTlELDJIQUFBLDhCQUE4QixPQUFBO0FBRXZDLCtCQUErQjtBQUMvQixtREFBeUU7QUFBaEUsNkhBQUEsZ0NBQWdDLE9BQUE7QUFFekMsK0JBQStCO0FBQy9CLG1EQUFpRTtBQUF4RCxxSEFBQSx3QkFBd0IsT0FBQTtBQUVqQywrQkFBK0I7QUFDL0IsbURBQXNFO0FBQTdELDBIQUFBLDZCQUE2QixPQUFBO0FBRXRDLCtCQUErQjtBQUMvQixtREFBb0U7QUFBM0Qsd0hBQUEsMkJBQTJCLE9BQUE7QUFFcEMsK0JBQStCO0FBQy9CLG1EQUFzRTtBQUE3RCwwSEFBQSw2QkFBNkIsT0FBQTtBQXlCdEMsdUNBQXVDO0FBQ3ZDLG1EQUE2RTtBQUFwRSwrR0FBQSxrQkFBa0IsT0FBQTtBQUFFLDZHQUFBLGdCQUFnQixPQUFBO0FBRTdDLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBRS9FLDhCQUE4QjtBQUM5QixxREFBNEQ7QUFBbkQsOEdBQUEsaUJBQWlCLE9BQUE7QUFvQjFCLDZCQUE2QjtBQUM3QixrREFBaUQ7QUFBeEMsc0dBQUEsU0FBUyxPQUFBO0FBaUVsQixzQ0FBc0M7QUFDdEMsbURBQTJFO0FBQWxFLHlHQUFBLFlBQVksT0FBQTtBQUFFLDBHQUFBLGFBQWEsT0FBQTtBQUFFLGtHQUFBLEtBQUssT0FBQTtBQUUzQyxzQ0FBc0M7QUFDdEMsbURBQXFHO0FBQTVGLGlIQUFBLG9CQUFvQixPQUFBO0FBQUUsa0hBQUEscUJBQXFCLE9BQUE7QUFBRSw0R0FBQSxlQUFlLE9BQUE7QUFTckUsZ0NBQWdDO0FBQ2hDLG1EQUEwRTtBQUFqRSw2R0FBQSxnQkFBZ0IsT0FBQTtBQUFFLDRHQUFBLGVBQWUsT0FBQTtBQUUxQywrRUFBK0U7QUFDL0UsaURBQWlEO0FBQ2pELCtFQUErRTtBQUUvRTs7Ozs7Ozs7Ozs7R0FXRztBQUNILG1FQUF5RjtBQUFoRixtSEFBQSxjQUFjLE9BQUE7QUFBRSxrSEFBQSxhQUFhLE9BQUE7QUFBRSw4R0FBQSxTQUFTLE9BQUE7QUFFakQsaUZBQWlGO0FBQ2pGLDRFQUE0RTtBQUM1RSxzREFBc0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZvb3RQcmludCDigJQgUHVibGljIEFQSSAodjMpXG4gKlxuICogVGhlIGZsb3djaGFydCBwYXR0ZXJuIGZvciBiYWNrZW5kIGNvZGUuXG4gKiBCdWlsZCDihpIgUnVuIOKGkiBPYnNlcnZlLlxuICpcbiAqICoqVGhyZWUgaW1wb3J0IHBhdGhzOioqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZmxvd0NoYXJ0LCBkZWNpZGUsIG5hcnJhdGl2ZSB9IGZyb20gJ2Zvb3RwcmludGpzJzsgICAgICAgICAgIC8vIG1haW4g4oCUIHN0YXJ0IGhlcmVcbiAqIGltcG9ydCB7IG1ldHJpY3MsIGRlYnVnLCBtYW5pZmVzdCB9ICAgICBmcm9tICdmb290cHJpbnRqcy9yZWNvcmRlcnMnOyAvLyByZWNvcmRlciBmYWN0b3JpZXNcbiAqIGltcG9ydCB7IFNoYXJlZE1lbW9yeSwgU3RhZ2VDb250ZXh0IH0gICBmcm9tICdmb290cHJpbnRqcy9hZHZhbmNlZCc7ICAvLyBpbnRlcm5hbHNcbiAqIGBgYFxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBRdWljayBTdGFydCDigJQgRXZlcnl0aGluZyB5b3UgbmVlZCBmb3IgOTAlIG9mIHVzZSBjYXNlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgdHlwZSB7IEZsb3dDaGFydCwgU3RhZ2VGdW5jdGlvbiBhcyBTdGFnZUhhbmRsZXIsIFN0cmVhbUhhbmRsZXJzIH0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB7IGZsb3dDaGFydCwgRmxvd0NoYXJ0QnVpbGRlciwgZmxvd0NoYXJ0U2VsZWN0b3IgfSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnRcbiAqXG4gKiBDb25maWcgZm9yIGAuYWRkUGFyYWxsZWxGb3JFYWNoKClgIOKAlCBvbmUgYnJhbmNoIHBlciBpdGVtLCBicmFuY2ggY291bnRcbiAqIGRlY2lkZWQgYXQgcnVuIHRpbWUgZnJvbSB0aGUgcGF5bG9hZC4gYG1heEJyYW5jaGVzYCBhbmQgYGludG9gIGFyZSByZXF1aXJlZFxuICogb24gcHVycG9zZSAoc2VlIGRvY3MvZGVzaWduL2V4ZWN1dGlvbi1jb250cm9sLm1kKS5cbiAqL1xuZXhwb3J0IHR5cGUgeyBCcmFuY2hDaGFydCwgUGFyYWxsZWxGb3JFYWNoQ29uZmlnLCBSZXRyeVBvbGljeSB9IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0IOKAlCBidWlsZC10aW1lIG9ic2VydmVyICh0d2luIG9mIEZsb3dSZWNvcmRlcikgKi9cbmV4cG9ydCB0eXBlIHtcbiAgU3RydWN0dXJlRGVjaWRlckNvbXBsZXRlRXZlbnQsXG4gIFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVFZGdlS2luZCxcbiAgU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVSZWNvcmRlcixcbiAgU3RydWN0dXJlU3RhZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdGFnZVRhZ2dlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50LFxufSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHR5cGUgeyBUeXBlZFN0YWdlRnVuY3Rpb24gfSBmcm9tICcuL2xpYi9idWlsZGVyL3R5cGVkRmxvd0NoYXJ0LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHR5cGUgeyBTY29wZU1ldGhvZHMsIFR5cGVkU2NvcGUgfSBmcm9tICcuL2xpYi9yZWFjdGl2ZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB7IG5hcnJhdGl2ZSB9IGZyb20gJy4vcmVjb3JkZXJzLmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGVjaXNpb24gQnJhbmNoaW5nIOKAlCBkZWNpZGUoKSAvIHNlbGVjdCgpIHdpdGggZXZpZGVuY2UgY2FwdHVyZVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IERlY2lzaW9uIEJyYW5jaGluZyAqL1xuZXhwb3J0IHR5cGUge1xuICBEZWNpZGVSdWxlLFxuICBEZWNpc2lvbkV2aWRlbmNlLFxuICBEZWNpc2lvblJlc3VsdCxcbiAgRGVmYXVsdEJyYW5jaCxcbiAgRmlsdGVyT3BzLFxuICBSdWxlRXZpZGVuY2UsXG4gIFNlbGVjdGlvbkV2aWRlbmNlLFxuICBTZWxlY3Rpb25SZXN1bHQsXG4gIFdoZW5DbGF1c2UsXG4gIFdoZXJlRmlsdGVyLFxufSBmcm9tICcuL2xpYi9kZWNpZGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IERlY2lzaW9uIEJyYW5jaGluZyAqL1xuZXhwb3J0IHsgZGVjaWRlLCBzZWxlY3QgfSBmcm9tICcuL2xpYi9kZWNpZGUvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSdW4g4oCUIEV4ZWN1dGUgY2hhcnRzIGFuZCBjb2xsZWN0IHJlc3VsdHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB0eXBlIHsgUnVuUmVzdWx0IH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB0eXBlIHsgRmxvd0NoYXJ0RXhlY3V0b3JPcHRpb25zIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB7IEZsb3dDaGFydEV4ZWN1dG9yIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB7IFJ1bkNvbnRleHQgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUgeyBDaGFydE9wZW5BUElPcHRpb25zLCBNQ1BUb29sRGVzY3JpcHRpb24sIFJ1bm5hYmxlRmxvd0NoYXJ0IH0gZnJvbSAnLi9saWIvcnVubmVyL1J1bm5hYmxlQ2hhcnQuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPYnNlcnZlIOKAlCBEYXRhIChzY29wZSByZWNvcmRlcnMsIGZpcmUgZHVyaW5nIHN0YWdlIGV4ZWN1dGlvbilcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEYXRhICovXG5leHBvcnQgdHlwZSB7XG4gIENvbW1pdEV2ZW50LFxuICBFcnJvckV2ZW50LFxuICBSZWFkRXZlbnQsXG4gIFJlZGFjdGlvblBvbGljeSxcbiAgUmVkYWN0aW9uUmVwb3J0LFxuICBTY29wZVJlY29yZGVyLFxuICBTdGFnZUV2ZW50LFxuICBXcml0ZUV2ZW50LFxufSBmcm9tICcuL2xpYi9zY29wZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGF0YSAqL1xuZXhwb3J0IHsgTWV0cmljUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9zY29wZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGF0YSAqL1xuZXhwb3J0IHsgRGVidWdSZWNvcmRlciB9IGZyb20gJy4vbGliL3Njb3BlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBPcGVyYXRpb24gKi9cbmV4cG9ydCB7IFJlY29yZGVyT3BlcmF0aW9uIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEZWxpdmVyeSB0aWVyIChSRkMtMDAxIGRlZmVycmVkIG9ic2VydmVycylcbiAqXG4gKiBFdmVyeSBgYXR0YWNoKlJlY29yZGVyYCBjYWxsIGFjY2VwdHMgYW4gb3B0aW9ucyBiYWc6XG4gKiBgZXhlY3V0b3IuYXR0YWNoU2NvcGVSZWNvcmRlcihyZWMsIHsgZGVsaXZlcnk6ICdkZWZlcnJlZCcgfSlgIHRha2VzIHRoZVxuICogcmVjb3JkZXIgT1VUIG9mIHRoZSBlbmdpbmUncyBob3QgcGF0aCDigJQgZXZlbnRzIGFyZSBjYXB0dXJlZCBpbnRvIG9uZVxuICogYm91bmRlZCwgdG90YWxseS1vcmRlcmVkIHF1ZXVlIGFuZCBkZWxpdmVyZWQgYXQgdGhlIG5leHQgbWljcm90YXNrXG4gKiBjaGVja3BvaW50IChcIm9uZSBiZWF0IGJlaGluZFwiKS4gT21pdCBgZGVsaXZlcnlgIGZvciB0aGUgaGlzdG9yaWNhbFxuICogc3luY2hyb25vdXMgY2FsbCAoYnl0ZS1pZGVudGljYWwgdG8gcHJldmlvdXMgcmVsZWFzZXMpLiBBY2NvdW50aW5nXG4gKiBzdXJmYWNlcyBvbiBgc25hcHNob3Qub2JzZXJ2ZXJTdGF0c2A7IGBleGVjdXRvci5kcmFpbk9ic2VydmVycygpYCBzZXR0bGVzXG4gKiBhc3luYyBsaXN0ZW5lcnMgYmVmb3JlIHNodXRkb3duLiBTZWUgYGRvY3MvZ3VpZGVzL29ic2VydmVycy1kZWZlcnJlZC5tZGAuXG4gKi9cbmV4cG9ydCB0eXBlIHtcbiAgQXR0YWNoUmVjb3JkZXJPcHRpb25zLFxuICBPYnNlcnZlckRlbGl2ZXJ5LFxuICBPYnNlcnZlckRyYWluUmVzdWx0LFxuICBPYnNlcnZlclN0YXRzLFxufSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEZWxpdmVyeSB0aWVyIChSRkMtMDAxIGRlZmVycmVkIG9ic2VydmVycylcbiAqXG4gKiBgQ2FwdHVyZVBvbGljeWAg4oCUIGhvdyBhIGRlZmVycmVkIGV2ZW50J3MgcGF5bG9hZCBpcyBtYXRlcmlhbGl6ZWQgYXRcbiAqIGNhcHR1cmUgdGltZSAoYCdzdW1tYXJ5J2AgZGVmYXVsdCAvIGAnY2xvbmUnYCAvIGAncmVmJ2ApLiBgT3ZlcmZsb3dQb2xpY3lgXG4gKiDigJQgd2hhdCBhIHNhdHVyYXRlZCBxdWV1ZSBkb2VzIChgJ2Ryb3Atb2xkZXN0J2AgZGVmYXVsdCAvIGAnc2FtcGxlJ2AgL1xuICogYCdibG9jaydgKS4gYERpc3BhdGNoZXJTdGF0c2AgLyBgTGlzdGVuZXJTdGF0c2Ag4oCUIHRoZSBhY2NvdW50aW5nIHNoYXBlc1xuICogZW1iZWRkZWQgaW4gYE9ic2VydmVyU3RhdHNgLiBUeXBlcyBvbmx5IOKAlCB0aGUgb2JzZXJ2ZXItcXVldWUgbW9kdWxlXG4gKiBpdHNlbGYgaXMgaW50ZXJuYWw7IGNvbnN1bWVycyB1c2UgdGhlIGF0dGFjaCBvcHRpb25zLlxuICovXG5leHBvcnQgdHlwZSB7IENhcHR1cmVQb2xpY3ksIERpc3BhdGNoZXJTdGF0cywgTGlzdGVuZXJTdGF0cywgT3ZlcmZsb3dQb2xpY3kgfSBmcm9tICcuL2xpYi9vYnNlcnZlci1xdWV1ZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgQ29tYmluZWQgKGJvdGggZGF0YS1mbG93IGFuZCBjb250cm9sLWZsb3cpICovXG5leHBvcnQgdHlwZSB7IENvbWJpbmVkUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIENvbWJpbmVkIChib3RoIGRhdGEtZmxvdyBhbmQgY29udHJvbC1mbG93KSAqL1xuZXhwb3J0IHtcbiAgaGFzRW1pdFJlY29yZGVyTWV0aG9kcyxcbiAgaGFzRmxvd1JlY29yZGVyTWV0aG9kcyxcbiAgaGFzUmVjb3JkZXJNZXRob2RzLFxuICBpc0Zsb3dFdmVudCxcbn0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBFbWl0ICh1c2VyLWF1dGhvcmVkIHN0cnVjdHVyZWQgZXZlbnRzKVxuICpcbiAqIFRoaXJkIG9ic2VydmVyIGNoYW5uZWwgKGFsb25nc2lkZSBgU2NvcGVSZWNvcmRlcmAgYW5kIGBGbG93UmVjb3JkZXJgKS4gQ29uc3VtZXJcbiAqIGNvZGUgY2FsbHMgYHNjb3BlLiRlbWl0KG5hbWUsIHBheWxvYWQpYCBmcm9tIGluc2lkZSBhIHN0YWdlOyBldmVyeSBhdHRhY2hlZFxuICogYEVtaXRSZWNvcmRlci5vbkVtaXQoZXZlbnQpYCBmaXJlcyBzeW5jaHJvbm91c2x5IHdpdGggc3RhZ2UtY29udGV4dFxuICogZW5yaWNobWVudC4gUGFzcy10aHJvdWdoIOKAlCBubyBidWZmZXJpbmcsIHplcm8gYWxsb2NhdGlvbiB3aGVuIG5vIHJlY29yZGVyXG4gKiBpcyBhdHRhY2hlZC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBFbWl0RXZlbnQsIEVtaXRSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT2JzZXJ2ZSDigJQgRmxvdyAoRmxvd1JlY29yZGVyLCBmaXJlcyBhZnRlciBzdGFnZSBleGVjdXRpb24pXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHR5cGUge1xuICBGbG93QnJlYWtFdmVudCxcbiAgRmxvd0RlY2lzaW9uRXZlbnQsXG4gIEZsb3dFcnJvckV2ZW50LFxuICBGbG93Rm9ya0V2ZW50LFxuICBGbG93TG9vcEV2ZW50LFxuICBGbG93TmV4dEV2ZW50LFxuICBGbG93UmVjb3JkZXIsXG4gIEZsb3dSdW5FdmVudCxcbiAgRmxvd1J1bkZhaWxlZEV2ZW50LFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG4gIEZsb3dTdGFnZVJldHJ5RXZlbnQsXG4gIEZsb3dTdWJmbG93RXZlbnQsXG4gIEZsb3dTdWJmbG93UmVnaXN0ZXJlZEV2ZW50LFxuICBUcmF2ZXJzYWxDb250ZXh0LFxufSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB0eXBlIHsgQ29tYmluZWROYXJyYXRpdmVFbnRyeSB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3dcbiAqXG4gKiBgTmFycmF0aXZlRm9ybWF0dGVyYCDigJQgcGx1Z2dhYmxlIGZvcm1hdHRlciB0aGF0IGNvbnZlcnRzIGV2ZW50IGNvbnRleHRcbiAqIG9iamVjdHMgaW50byB0aGUgdGV4dCBsaW5lcyBvZiB0aGUgbmFycmF0aXZlLiBQcmVmZXIgdGhpcyBuYW1lIGluIG5ld1xuICogY29kZTsgYE5hcnJhdGl2ZVJlbmRlcmVyYCBpcyBhIGRlcHJlY2F0ZWQgYWxpYXMgdGhhdCB3aWxsIGJlIHJlbW92ZWQgaW5cbiAqIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuXG4gKi9cbmV4cG9ydCB0eXBlIHsgTmFycmF0aXZlRm9ybWF0dGVyLCBOYXJyYXRpdmVSZW5kZXJlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7IE1hbmlmZXN0RW50cnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IE1hbmlmZXN0Rmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBBZGFwdGl2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgTWlsZXN0b25lTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBQcm9ncmVzc2l2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgUkxFTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBTZXBhcmF0ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgU2lsZW50TmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBXaW5kb3dlZE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNlbGYtRGVzY3JpYmluZyDigJQgLmNvbnRyYWN0KCksIHRvT3BlbkFQSSgpLCB0b01DUFRvb2woKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFNlbGYtRGVzY3JpYmluZyAqL1xuZXhwb3J0IHR5cGUge1xuICBGbG93Q2hhcnRDb250cmFjdCxcbiAgRmxvd0NoYXJ0Q29udHJhY3RPcHRpb25zLFxuICBKc29uU2NoZW1hLFxuICBPcGVuQVBJT3B0aW9ucyxcbiAgT3BlbkFQSVNwZWMsXG59IGZyb20gJy4vbGliL2NvbnRyYWN0L2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU25hcHNob3QgJiBDb21wb3NpdGlvbiDigJQgU3ViZmxvdyBuYXZpZ2F0aW9uIGFuZCBDb21wb3NhYmxlUnVubmVyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgU25hcHNob3QgJiBDb21wb3NpdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBDb21wb3NhYmxlUnVubmVyIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBTbmFwc2hvdCAmIENvbXBvc2l0aW9uICovXG5leHBvcnQgdHlwZSB7IFJlY29yZGVyU25hcHNob3QsIFJ1bnRpbWVTbmFwc2hvdCwgU3VidHJlZVNuYXBzaG90IH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBTbmFwc2hvdCAmIENvbXBvc2l0aW9uICovXG5leHBvcnQgeyBnZXRTdWJ0cmVlU25hcHNob3QsIGxpc3RTdWJmbG93UGF0aHMgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTY29wZVJlY29yZGVyIENvbXBvc2l0aW9uIOKAlCBCdW5kbGUgbXVsdGlwbGUgcmVjb3JkZXJzIGludG8gZG9tYWluIHByZXNldHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBTY29wZVJlY29yZGVyICovXG5leHBvcnQgeyBDb21wb3NpdGVSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUGF1c2UvUmVzdW1lIOKAlCBTZXJpYWxpemFibGUgY2hlY2twb2ludHMgZm9yIGxvbmctcnVubmluZyBvciBodW1hbi1pbi10aGUtbG9vcCBmbG93c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuLyoqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWUgKi9cbmV4cG9ydCB0eXBlIHsgRmxvd2NoYXJ0Q2hlY2twb2ludCwgUGF1c2FibGVIYW5kbGVyIH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWVcbiAqXG4gKiBgaW50ZXJydXB0KHNjb3BlLCB7IHJlYXNvbiwgZXhwZWN0cz8gfSlgIOKAlCBzdG9wIG1pZC1zdGFnZSB0byBhc2sgYSBxdWVzdGlvbixcbiAqIGFuZCBnZXQgdGhlIGFuc3dlciBiYWNrIGF0IHRoZSBzYW1lIGNhbGwgc2l0ZSB3aGVuIHRoZSBydW4gcmVzdW1lcy4gUmVzdW1lXG4gKiByZS1lbnRlcnMgdGhlIHN0YWdlIGZyb20gaXRzIFRPUCAoc3RhZ2VzIGFyZSBhdG9taWMpLCBzbyBrZWVwIHRoZSBoYWxmXG4gKiBiZWZvcmUgdGhlIGNhbGwgaWRlbXBvdGVudC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBJbnRlcnJ1cHRQYXlsb2FkIH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuZXhwb3J0IHsgaW50ZXJydXB0IH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNjb3BlUmVjb3JkZXIgKi9cbmV4cG9ydCB0eXBlIHsgQ29tcG9zaXRlU25hcHNob3QgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbmZpZ3VyYXRpb24g4oCUIFR5cGVzIHBhc3NlZCB0byBGbG93Q2hhcnRFeGVjdXRvciBhbmQgcnVuKClcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uICovXG5leHBvcnQgdHlwZSB7IEV4ZWN1dGlvbkVudiwgRXhlY3V0b3JSZXN1bHQsIFBhdXNlZFJlc3VsdCwgUnVuT3B0aW9ucyB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBTY29wZUZhY3RvcnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uXG4gKlxuICogUmVhZC10cmFja2luZyBwb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlUmVhZHNgICgjMTQpOlxuICogYCdmdWxsJ2AgKGRlZmF1bHQg4oCUIHBlci1yZWFkIHZhbHVlIGNsb25lLCBoaXN0b3JpY2FsIGJlaGF2aW9yKSAvXG4gKiBgJ3N1bW1hcnknYCAoY2hlYXAgYFJlYWRTdW1tYXJ5TWFya2VyYCBwZXIgcmVhZCkgLyBgJ29mZidgIChubyB0cmFja2luZyxcbiAqIHplcm8gcGVyLXJlYWQgY2xvbmUpLiBQYXNzIGFzIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgcmVhZFRyYWNraW5nIH0pYFxuICogb3IgY2FsbCBgZXhlY3V0b3Iuc2V0UmVhZFRyYWNraW5nKG1vZGUpYCBiZWZvcmUgYHJ1bigpYC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBSZWFkU3VtbWFyeU1hcmtlciwgUmVhZFRyYWNraW5nTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBXcml0ZS10cmFja2luZyBwb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlV3JpdGVzYCAoIzEzYy1BKSDigJQgdGhlXG4gKiBzaWJsaW5nIG9mIGBSZWFkVHJhY2tpbmdNb2RlYDsgYm90aCBhbGlhcyB0aGUgc2hhcmVkIGBSZXRlbnRpb25Qb2xpY3lgXG4gKiBmYW1pbHkgZnJvbSBgbGliL2NhcHR1cmVgLiBgJ2Z1bGwnYCAoZGVmYXVsdCDigJQgcGVyLXdyaXRlIHZhbHVlIGNsb25lLFxuICogaGlzdG9yaWNhbCBiZWhhdmlvcikgLyBgJ3N1bW1hcnknYCAoY2hlYXAgYFdyaXRlU3VtbWFyeU1hcmtlcmAgcGVyIHdyaXRlKVxuICogLyBgJ29mZidgIChubyB0cmFja2luZzsgYHN0YWdlV3JpdGVzYCBhYnNlbnQgYW5kIHRoZSBgb25Db21taXRgIG11dGF0aW9uc1xuICogcGF5bG9hZCBpcyBlbXB0eSDigJQgd3JpdGVzIHRoZW1zZWx2ZXMgc3RpbGwgY29tbWl0LCBhbmQgdGhlIGNvbW1pdCBsb2cgaXNcbiAqIHVuYWZmZWN0ZWQpLiBQYXNzIGFzIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgd3JpdGVUcmFja2luZyB9KWAgb3JcbiAqIGNhbGwgYGV4ZWN1dG9yLnNldFdyaXRlVHJhY2tpbmcobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICovXG5leHBvcnQgdHlwZSB7IFJldGVudGlvblBvbGljeSwgV3JpdGVTdW1tYXJ5TWFya2VyLCBXcml0ZVRyYWNraW5nTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBDb21taXQtdmFsdWVzIGVuY29kaW5nIGZvciB0aGUgQ09NTUlUIExPRyAoIzEzYy1CKSDigJQgdGhlIHRoaXJkIGRpYWwgb2ZcbiAqIHRoZSBmYW1pbHksIGFuZCB0aGUgb25seSBMT1NTTEVTUyBvbmUgKGl0IGNoYW5nZXMgdGhlIGxvZydzIGVuY29kaW5nLFxuICogbmV2ZXIgaXRzIGluZm9ybWF0aW9uKS4gYCdmdWxsJ2AgKGRlZmF1bHQg4oCUIGV2ZXJ5IHN1cnZpdmluZyBgc2V0YCBzdG9yZXNcbiAqIHRoZSBmdWxsIGZpbmFsIHZhbHVlLCBieXRlLWlkZW50aWNhbCB0byBoaXN0b3J5KSAvIGAnZGVsdGEnYCAoYXJyYXlcbiAqIG5ldC1jaGFuZ2VzIHRoYXQgYXJlIFwiYmFzZSBwbHVzIGEgdGFpbFwiIGNvbW1pdCBhcyBhbiBgYXBwZW5kYCB2ZXJiXG4gKiBzdG9yaW5nIG9ubHkgdGhlIHRhaWw7IGBkZWxldGVWYWx1ZSgpYCBjb21taXRzIGFzIGEgcmVhbCBgZGVsZXRlYCB2ZXJiO1xuICogb25lIHRyYWNlIGVudHJ5IHBlciBzdXJ2aXZpbmcgcGF0aCkuIFJlcGxheSByZWNvbnN0cnVjdHMgZXZlcnkgc3RlcCdzXG4gKiBmdWxsIHN0YXRlIGV4YWN0bHkuIENvbnN1bWVycyByZWFkaW5nIGBidW5kbGUub3ZlcndyaXRlW2tleV1gIGFzIHRoZSBmdWxsXG4gKiB2YWx1ZSBtdXN0IHVzZSBgY29tbWl0VmFsdWVBdGAgZnJvbSBgZm9vdHByaW50anMvdHJhY2VgLiBQYXNzIGFzXG4gKiBgbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0LCB7IGNvbW1pdFZhbHVlcyB9KWAgb3IgY2FsbFxuICogYGV4ZWN1dG9yLnNldENvbW1pdFZhbHVlcyhtb2RlKWAgYmVmb3JlIGBydW4oKWA7IHRoZSBhY3RpdmUgbW9kZSBpcyB0aGVcbiAqIHNuYXBzaG90IGRpc2NyaW1pbmFudCBgZ2V0U25hcHNob3QoKS5jb21taXRWYWx1ZXNgLlxuICovXG5leHBvcnQgdHlwZSB7IENvbW1pdFZhbHVlc01vZGUgfSBmcm9tICcuL2xpYi9tZW1vcnkvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb250cmFjdCAmIFZhbGlkYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBDb250cmFjdCAmIFZhbGlkYXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgU2NoZW1hS2luZCwgVmFsaWRhdGlvbklzc3VlLCBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBDb250cmFjdCAmIFZhbGlkYXRpb24gKi9cbmV4cG9ydCB7IGRldGVjdFNjaGVtYSwgaXNWYWxpZGF0YWJsZSwgaXNab2QgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IENvbnRyYWN0ICYgVmFsaWRhdGlvbiAqL1xuZXhwb3J0IHsgSW5wdXRWYWxpZGF0aW9uRXJyb3IsIHZhbGlkYXRlQWdhaW5zdFNjaGVtYSwgdmFsaWRhdGVPclRocm93IH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRXJyb3IgVXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgRXJyb3IgVXRpbGl0aWVzICovXG5leHBvcnQgdHlwZSB7IFN0cnVjdHVyZWRFcnJvckluZm8gfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IEVycm9yIFV0aWxpdGllcyAqL1xuZXhwb3J0IHsgZXh0cmFjdEVycm9ySW5mbywgZm9ybWF0RXJyb3JJbmZvIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGV2IFRvb2xzIOKAlCBNb2RlIGZsYWdzIGFuZCBab2Qgc2NvcGUgdXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQGNhdGVnb3J5IERldiBUb29sc1xuICpcbiAqIEdsb2JhbCBkZXYtbW9kZSBmbGFnLiBDYWxsIGBlbmFibGVEZXZNb2RlKClgIGF0IGFwcGxpY2F0aW9uIHN0YXJ0dXAgdG9cbiAqIHR1cm4gb24gZGV2ZWxvcGVyLW9ubHkgZGlhZ25vc3RpY3MgYWNyb3NzIHRoZSBsaWJyYXJ5IOKAlCBjaXJjdWxhci1yZWZlcmVuY2VcbiAqIGRldGVjdGlvbiBpbiBzY29wZSB3cml0ZXMsIHdhcm5pbmdzIHdoZW4gYSByZWNvcmRlciBoYXMgbm8gb2JzZXJ2ZXJcbiAqIG1ldGhvZHMsIHN1c3BpY2lvdXMtcHJlZGljYXRlIHdhcm5pbmdzIGluIGRlY2lkZS9zZWxlY3QsIHN0cnVjdHVyYWxcbiAqIGNoZWNrcyBpbiBgZ2V0U3VidHJlZVNuYXBzaG90YCwgYW5kIGFueSBmdXR1cmUgZGV2LW9ubHkgZGlhZ25vc3RpYy5cbiAqXG4gKiBQcm9kdWN0aW9uIGxlYXZlcyBpdCBPRkYgYnkgZGVmYXVsdCAoemVybyBvdmVyaGVhZCkuIFNlZSB0aGUgSlNEb2Mgb25cbiAqIGBlbmFibGVEZXZNb2RlYCBmb3IgdGhlIGZ1bGwgbGlzdCBhbmQgdXNhZ2UgZXhhbXBsZS5cbiAqL1xuZXhwb3J0IHsgZGlzYWJsZURldk1vZGUsIGVuYWJsZURldk1vZGUsIGlzRGV2TW9kZSB9IGZyb20gJy4vbGliL3Njb3BlL2RldGVjdENpcmN1bGFyLmpzJztcblxuLy8gYGRlZmluZVNjb3BlRnJvbVpvZGAgYW5kIHRoZSBvdGhlciB6b2QtYmFzZWQgc2NvcGUgaGVscGVycyBtb3ZlZCB0byB0aGUgb3B0LWluXG4vLyBgZm9vdHByaW50anMvem9kYCBlbnRyeSDigJQga2VlcGluZyB6b2Qgb3V0IG9mIHRoZSBjb3JlIGxvYWQgcGF0aCAoaXQgaXMgYW5cbi8vIG9wdGlvbmFsIHBlZXIpLiBJbXBvcnQgdGhlbSBmcm9tICdmb290cHJpbnRqcy96b2QnLlxuIl19
|
|
128
|
+
// A run's record as JSON without the engine's recursion limit (9.26.0): the
|
|
129
|
+
// same bytes JSON.stringify emits, for a deep `next` chain it cannot encode.
|
|
130
|
+
var stringifySnapshot_js_1 = require("./lib/runner/stringifySnapshot.js");
|
|
131
|
+
Object.defineProperty(exports, "stringifySnapshot", { enumerable: true, get: function () { return stringifySnapshot_js_1.stringifySnapshot; } });
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHOzs7QUFTSCw0QkFBNEI7QUFDNUIsbURBQXdGO0FBQS9FLHFHQUFBLFNBQVMsT0FBQTtBQUFFLDRHQUFBLGdCQUFnQixPQUFBO0FBQUUsNkdBQUEsaUJBQWlCLE9BQUE7QUE2QnZELDRCQUE0QjtBQUM1QiwrQ0FBMkM7QUFBbEMseUdBQUEsU0FBUyxPQUFBO0FBb0JsQixtQ0FBbUM7QUFDbkMsa0RBQXVEO0FBQTlDLGtHQUFBLE1BQU0sT0FBQTtBQUFFLGtHQUFBLE1BQU0sT0FBQTtBQVl2QixvQkFBb0I7QUFDcEIsa0RBQTBEO0FBQWpELDZHQUFBLGlCQUFpQixPQUFBO0FBRTFCLG9CQUFvQjtBQUNwQixrREFBbUQ7QUFBMUMsc0dBQUEsVUFBVSxPQUFBO0FBcUJuQiwrQkFBK0I7QUFDL0IsaURBQXNEO0FBQTdDLDBHQUFBLGNBQWMsT0FBQTtBQUV2QiwrQkFBK0I7QUFDL0IsaURBQXFEO0FBQTVDLHlHQUFBLGFBQWEsT0FBQTtBQUV0QixvQ0FBb0M7QUFDcEMsb0RBQTREO0FBQW5ELDZHQUFBLGlCQUFpQixPQUFBO0FBbUMxQixxRUFBcUU7QUFDckUsb0RBS2lDO0FBSi9CLGtIQUFBLHNCQUFzQixPQUFBO0FBQ3RCLGtIQUFBLHNCQUFzQixPQUFBO0FBQ3RCLDhHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLHVHQUFBLFdBQVcsT0FBQTtBQWtEYiwrQkFBK0I7QUFDL0Isa0RBQThEO0FBQXJELGlIQUFBLHFCQUFxQixPQUFBO0FBSzlCLCtCQUErQjtBQUMvQixtREFBNkQ7QUFBcEQsaUhBQUEsb0JBQW9CLE9BQUE7QUFFN0IsK0JBQStCO0FBQy9CLG1EQUFzRTtBQUE3RCwwSEFBQSw2QkFBNkIsT0FBQTtBQUV0QywrQkFBK0I7QUFDL0IsbURBQXVFO0FBQTlELDJIQUFBLDhCQUE4QixPQUFBO0FBRXZDLCtCQUErQjtBQUMvQixtREFBeUU7QUFBaEUsNkhBQUEsZ0NBQWdDLE9BQUE7QUFFekMsK0JBQStCO0FBQy9CLG1EQUFpRTtBQUF4RCxxSEFBQSx3QkFBd0IsT0FBQTtBQUVqQywrQkFBK0I7QUFDL0IsbURBQXNFO0FBQTdELDBIQUFBLDZCQUE2QixPQUFBO0FBRXRDLCtCQUErQjtBQUMvQixtREFBb0U7QUFBM0Qsd0hBQUEsMkJBQTJCLE9BQUE7QUFFcEMsK0JBQStCO0FBQy9CLG1EQUFzRTtBQUE3RCwwSEFBQSw2QkFBNkIsT0FBQTtBQXlCdEMsdUNBQXVDO0FBQ3ZDLG1EQUE2RTtBQUFwRSwrR0FBQSxrQkFBa0IsT0FBQTtBQUFFLDZHQUFBLGdCQUFnQixPQUFBO0FBRTdDLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBRS9FLDhCQUE4QjtBQUM5QixxREFBNEQ7QUFBbkQsOEdBQUEsaUJBQWlCLE9BQUE7QUFvQjFCLDZCQUE2QjtBQUM3QixrREFBaUQ7QUFBeEMsc0dBQUEsU0FBUyxPQUFBO0FBaUVsQixzQ0FBc0M7QUFDdEMsbURBQTJFO0FBQWxFLHlHQUFBLFlBQVksT0FBQTtBQUFFLDBHQUFBLGFBQWEsT0FBQTtBQUFFLGtHQUFBLEtBQUssT0FBQTtBQUUzQyxzQ0FBc0M7QUFDdEMsbURBQXFHO0FBQTVGLGlIQUFBLG9CQUFvQixPQUFBO0FBQUUsa0hBQUEscUJBQXFCLE9BQUE7QUFBRSw0R0FBQSxlQUFlLE9BQUE7QUFTckUsZ0NBQWdDO0FBQ2hDLG1EQUEwRTtBQUFqRSw2R0FBQSxnQkFBZ0IsT0FBQTtBQUFFLDRHQUFBLGVBQWUsT0FBQTtBQUUxQywrRUFBK0U7QUFDL0UsaURBQWlEO0FBQ2pELCtFQUErRTtBQUUvRTs7Ozs7Ozs7Ozs7R0FXRztBQUNILG1FQUF5RjtBQUFoRixtSEFBQSxjQUFjLE9BQUE7QUFBRSxrSEFBQSxhQUFhLE9BQUE7QUFBRSw4R0FBQSxTQUFTLE9BQUE7QUFFakQsaUZBQWlGO0FBQ2pGLDRFQUE0RTtBQUM1RSxzREFBc0Q7QUFDdEQsNEVBQTRFO0FBQzVFLDZFQUE2RTtBQUM3RSwwRUFBc0U7QUFBN0QseUhBQUEsaUJBQWlCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZvb3RQcmludCDigJQgUHVibGljIEFQSSAodjMpXG4gKlxuICogVGhlIGZsb3djaGFydCBwYXR0ZXJuIGZvciBiYWNrZW5kIGNvZGUuXG4gKiBCdWlsZCDihpIgUnVuIOKGkiBPYnNlcnZlLlxuICpcbiAqICoqVGhyZWUgaW1wb3J0IHBhdGhzOioqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZmxvd0NoYXJ0LCBkZWNpZGUsIG5hcnJhdGl2ZSB9IGZyb20gJ2Zvb3RwcmludGpzJzsgICAgICAgICAgIC8vIG1haW4g4oCUIHN0YXJ0IGhlcmVcbiAqIGltcG9ydCB7IG1ldHJpY3MsIGRlYnVnLCBtYW5pZmVzdCB9ICAgICBmcm9tICdmb290cHJpbnRqcy9yZWNvcmRlcnMnOyAvLyByZWNvcmRlciBmYWN0b3JpZXNcbiAqIGltcG9ydCB7IFNoYXJlZE1lbW9yeSwgU3RhZ2VDb250ZXh0IH0gICBmcm9tICdmb290cHJpbnRqcy9hZHZhbmNlZCc7ICAvLyBpbnRlcm5hbHNcbiAqIGBgYFxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBRdWljayBTdGFydCDigJQgRXZlcnl0aGluZyB5b3UgbmVlZCBmb3IgOTAlIG9mIHVzZSBjYXNlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgdHlwZSB7IEZsb3dDaGFydCwgU3RhZ2VGdW5jdGlvbiBhcyBTdGFnZUhhbmRsZXIsIFN0cmVhbUhhbmRsZXJzIH0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB7IGZsb3dDaGFydCwgRmxvd0NoYXJ0QnVpbGRlciwgZmxvd0NoYXJ0U2VsZWN0b3IgfSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnRcbiAqXG4gKiBDb25maWcgZm9yIGAuYWRkUGFyYWxsZWxGb3JFYWNoKClgIOKAlCBvbmUgYnJhbmNoIHBlciBpdGVtLCBicmFuY2ggY291bnRcbiAqIGRlY2lkZWQgYXQgcnVuIHRpbWUgZnJvbSB0aGUgcGF5bG9hZC4gYG1heEJyYW5jaGVzYCBhbmQgYGludG9gIGFyZSByZXF1aXJlZFxuICogb24gcHVycG9zZSAoc2VlIGRvY3MvZGVzaWduL2V4ZWN1dGlvbi1jb250cm9sLm1kKS5cbiAqL1xuZXhwb3J0IHR5cGUgeyBCcmFuY2hDaGFydCwgUGFyYWxsZWxGb3JFYWNoQ29uZmlnLCBSZXRyeVBvbGljeSB9IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0IOKAlCBidWlsZC10aW1lIG9ic2VydmVyICh0d2luIG9mIEZsb3dSZWNvcmRlcikgKi9cbmV4cG9ydCB0eXBlIHtcbiAgU3RydWN0dXJlRGVjaWRlckNvbXBsZXRlRXZlbnQsXG4gIFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVFZGdlS2luZCxcbiAgU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVSZWNvcmRlcixcbiAgU3RydWN0dXJlU3RhZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdGFnZVRhZ2dlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50LFxufSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHR5cGUgeyBUeXBlZFN0YWdlRnVuY3Rpb24gfSBmcm9tICcuL2xpYi9idWlsZGVyL3R5cGVkRmxvd0NoYXJ0LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHR5cGUgeyBTY29wZU1ldGhvZHMsIFR5cGVkU2NvcGUgfSBmcm9tICcuL2xpYi9yZWFjdGl2ZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB7IG5hcnJhdGl2ZSB9IGZyb20gJy4vcmVjb3JkZXJzLmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGVjaXNpb24gQnJhbmNoaW5nIOKAlCBkZWNpZGUoKSAvIHNlbGVjdCgpIHdpdGggZXZpZGVuY2UgY2FwdHVyZVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IERlY2lzaW9uIEJyYW5jaGluZyAqL1xuZXhwb3J0IHR5cGUge1xuICBEZWNpZGVSdWxlLFxuICBEZWNpc2lvbkV2aWRlbmNlLFxuICBEZWNpc2lvblJlc3VsdCxcbiAgRGVmYXVsdEJyYW5jaCxcbiAgRmlsdGVyT3BzLFxuICBSdWxlRXZpZGVuY2UsXG4gIFNlbGVjdGlvbkV2aWRlbmNlLFxuICBTZWxlY3Rpb25SZXN1bHQsXG4gIFdoZW5DbGF1c2UsXG4gIFdoZXJlRmlsdGVyLFxufSBmcm9tICcuL2xpYi9kZWNpZGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IERlY2lzaW9uIEJyYW5jaGluZyAqL1xuZXhwb3J0IHsgZGVjaWRlLCBzZWxlY3QgfSBmcm9tICcuL2xpYi9kZWNpZGUvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSdW4g4oCUIEV4ZWN1dGUgY2hhcnRzIGFuZCBjb2xsZWN0IHJlc3VsdHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB0eXBlIHsgUnVuUmVzdWx0IH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB0eXBlIHsgRmxvd0NoYXJ0RXhlY3V0b3JPcHRpb25zIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB7IEZsb3dDaGFydEV4ZWN1dG9yIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB7IFJ1bkNvbnRleHQgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUgeyBDaGFydE9wZW5BUElPcHRpb25zLCBNQ1BUb29sRGVzY3JpcHRpb24sIFJ1bm5hYmxlRmxvd0NoYXJ0IH0gZnJvbSAnLi9saWIvcnVubmVyL1J1bm5hYmxlQ2hhcnQuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPYnNlcnZlIOKAlCBEYXRhIChzY29wZSByZWNvcmRlcnMsIGZpcmUgZHVyaW5nIHN0YWdlIGV4ZWN1dGlvbilcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEYXRhICovXG5leHBvcnQgdHlwZSB7XG4gIENvbW1pdEV2ZW50LFxuICBFcnJvckV2ZW50LFxuICBSZWFkRXZlbnQsXG4gIFJlZGFjdGlvblBvbGljeSxcbiAgUmVkYWN0aW9uUmVwb3J0LFxuICBTY29wZVJlY29yZGVyLFxuICBTdGFnZUV2ZW50LFxuICBXcml0ZUV2ZW50LFxufSBmcm9tICcuL2xpYi9zY29wZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGF0YSAqL1xuZXhwb3J0IHsgTWV0cmljUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9zY29wZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGF0YSAqL1xuZXhwb3J0IHsgRGVidWdSZWNvcmRlciB9IGZyb20gJy4vbGliL3Njb3BlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBPcGVyYXRpb24gKi9cbmV4cG9ydCB7IFJlY29yZGVyT3BlcmF0aW9uIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEZWxpdmVyeSB0aWVyIChSRkMtMDAxIGRlZmVycmVkIG9ic2VydmVycylcbiAqXG4gKiBFdmVyeSBgYXR0YWNoKlJlY29yZGVyYCBjYWxsIGFjY2VwdHMgYW4gb3B0aW9ucyBiYWc6XG4gKiBgZXhlY3V0b3IuYXR0YWNoU2NvcGVSZWNvcmRlcihyZWMsIHsgZGVsaXZlcnk6ICdkZWZlcnJlZCcgfSlgIHRha2VzIHRoZVxuICogcmVjb3JkZXIgT1VUIG9mIHRoZSBlbmdpbmUncyBob3QgcGF0aCDigJQgZXZlbnRzIGFyZSBjYXB0dXJlZCBpbnRvIG9uZVxuICogYm91bmRlZCwgdG90YWxseS1vcmRlcmVkIHF1ZXVlIGFuZCBkZWxpdmVyZWQgYXQgdGhlIG5leHQgbWljcm90YXNrXG4gKiBjaGVja3BvaW50IChcIm9uZSBiZWF0IGJlaGluZFwiKS4gT21pdCBgZGVsaXZlcnlgIGZvciB0aGUgaGlzdG9yaWNhbFxuICogc3luY2hyb25vdXMgY2FsbCAoYnl0ZS1pZGVudGljYWwgdG8gcHJldmlvdXMgcmVsZWFzZXMpLiBBY2NvdW50aW5nXG4gKiBzdXJmYWNlcyBvbiBgc25hcHNob3Qub2JzZXJ2ZXJTdGF0c2A7IGBleGVjdXRvci5kcmFpbk9ic2VydmVycygpYCBzZXR0bGVzXG4gKiBhc3luYyBsaXN0ZW5lcnMgYmVmb3JlIHNodXRkb3duLiBTZWUgYGRvY3MvZ3VpZGVzL29ic2VydmVycy1kZWZlcnJlZC5tZGAuXG4gKi9cbmV4cG9ydCB0eXBlIHtcbiAgQXR0YWNoUmVjb3JkZXJPcHRpb25zLFxuICBPYnNlcnZlckRlbGl2ZXJ5LFxuICBPYnNlcnZlckRyYWluUmVzdWx0LFxuICBPYnNlcnZlclN0YXRzLFxufSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEZWxpdmVyeSB0aWVyIChSRkMtMDAxIGRlZmVycmVkIG9ic2VydmVycylcbiAqXG4gKiBgQ2FwdHVyZVBvbGljeWAg4oCUIGhvdyBhIGRlZmVycmVkIGV2ZW50J3MgcGF5bG9hZCBpcyBtYXRlcmlhbGl6ZWQgYXRcbiAqIGNhcHR1cmUgdGltZSAoYCdzdW1tYXJ5J2AgZGVmYXVsdCAvIGAnY2xvbmUnYCAvIGAncmVmJ2ApLiBgT3ZlcmZsb3dQb2xpY3lgXG4gKiDigJQgd2hhdCBhIHNhdHVyYXRlZCBxdWV1ZSBkb2VzIChgJ2Ryb3Atb2xkZXN0J2AgZGVmYXVsdCAvIGAnc2FtcGxlJ2AgL1xuICogYCdibG9jaydgKS4gYERpc3BhdGNoZXJTdGF0c2AgLyBgTGlzdGVuZXJTdGF0c2Ag4oCUIHRoZSBhY2NvdW50aW5nIHNoYXBlc1xuICogZW1iZWRkZWQgaW4gYE9ic2VydmVyU3RhdHNgLiBUeXBlcyBvbmx5IOKAlCB0aGUgb2JzZXJ2ZXItcXVldWUgbW9kdWxlXG4gKiBpdHNlbGYgaXMgaW50ZXJuYWw7IGNvbnN1bWVycyB1c2UgdGhlIGF0dGFjaCBvcHRpb25zLlxuICovXG5leHBvcnQgdHlwZSB7IENhcHR1cmVQb2xpY3ksIERpc3BhdGNoZXJTdGF0cywgTGlzdGVuZXJTdGF0cywgT3ZlcmZsb3dQb2xpY3kgfSBmcm9tICcuL2xpYi9vYnNlcnZlci1xdWV1ZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgQ29tYmluZWQgKGJvdGggZGF0YS1mbG93IGFuZCBjb250cm9sLWZsb3cpICovXG5leHBvcnQgdHlwZSB7IENvbWJpbmVkUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIENvbWJpbmVkIChib3RoIGRhdGEtZmxvdyBhbmQgY29udHJvbC1mbG93KSAqL1xuZXhwb3J0IHtcbiAgaGFzRW1pdFJlY29yZGVyTWV0aG9kcyxcbiAgaGFzRmxvd1JlY29yZGVyTWV0aG9kcyxcbiAgaGFzUmVjb3JkZXJNZXRob2RzLFxuICBpc0Zsb3dFdmVudCxcbn0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBFbWl0ICh1c2VyLWF1dGhvcmVkIHN0cnVjdHVyZWQgZXZlbnRzKVxuICpcbiAqIFRoaXJkIG9ic2VydmVyIGNoYW5uZWwgKGFsb25nc2lkZSBgU2NvcGVSZWNvcmRlcmAgYW5kIGBGbG93UmVjb3JkZXJgKS4gQ29uc3VtZXJcbiAqIGNvZGUgY2FsbHMgYHNjb3BlLiRlbWl0KG5hbWUsIHBheWxvYWQpYCBmcm9tIGluc2lkZSBhIHN0YWdlOyBldmVyeSBhdHRhY2hlZFxuICogYEVtaXRSZWNvcmRlci5vbkVtaXQoZXZlbnQpYCBmaXJlcyBzeW5jaHJvbm91c2x5IHdpdGggc3RhZ2UtY29udGV4dFxuICogZW5yaWNobWVudC4gUGFzcy10aHJvdWdoIOKAlCBubyBidWZmZXJpbmcsIHplcm8gYWxsb2NhdGlvbiB3aGVuIG5vIHJlY29yZGVyXG4gKiBpcyBhdHRhY2hlZC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBFbWl0RXZlbnQsIEVtaXRSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT2JzZXJ2ZSDigJQgRmxvdyAoRmxvd1JlY29yZGVyLCBmaXJlcyBhZnRlciBzdGFnZSBleGVjdXRpb24pXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHR5cGUge1xuICBGbG93QnJlYWtFdmVudCxcbiAgRmxvd0RlY2lzaW9uRXZlbnQsXG4gIEZsb3dFcnJvckV2ZW50LFxuICBGbG93Rm9ya0V2ZW50LFxuICBGbG93TG9vcEV2ZW50LFxuICBGbG93TmV4dEV2ZW50LFxuICBGbG93UmVjb3JkZXIsXG4gIEZsb3dSdW5FdmVudCxcbiAgRmxvd1J1bkZhaWxlZEV2ZW50LFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG4gIEZsb3dTdGFnZVJldHJ5RXZlbnQsXG4gIEZsb3dTdWJmbG93RXZlbnQsXG4gIEZsb3dTdWJmbG93UmVnaXN0ZXJlZEV2ZW50LFxuICBUcmF2ZXJzYWxDb250ZXh0LFxufSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB0eXBlIHsgQ29tYmluZWROYXJyYXRpdmVFbnRyeSB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3dcbiAqXG4gKiBgTmFycmF0aXZlRm9ybWF0dGVyYCDigJQgcGx1Z2dhYmxlIGZvcm1hdHRlciB0aGF0IGNvbnZlcnRzIGV2ZW50IGNvbnRleHRcbiAqIG9iamVjdHMgaW50byB0aGUgdGV4dCBsaW5lcyBvZiB0aGUgbmFycmF0aXZlLiBQcmVmZXIgdGhpcyBuYW1lIGluIG5ld1xuICogY29kZTsgYE5hcnJhdGl2ZVJlbmRlcmVyYCBpcyBhIGRlcHJlY2F0ZWQgYWxpYXMgdGhhdCB3aWxsIGJlIHJlbW92ZWQgaW5cbiAqIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuXG4gKi9cbmV4cG9ydCB0eXBlIHsgTmFycmF0aXZlRm9ybWF0dGVyLCBOYXJyYXRpdmVSZW5kZXJlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7IE1hbmlmZXN0RW50cnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IE1hbmlmZXN0Rmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBBZGFwdGl2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgTWlsZXN0b25lTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBQcm9ncmVzc2l2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgUkxFTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBTZXBhcmF0ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgU2lsZW50TmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBXaW5kb3dlZE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNlbGYtRGVzY3JpYmluZyDigJQgLmNvbnRyYWN0KCksIHRvT3BlbkFQSSgpLCB0b01DUFRvb2woKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFNlbGYtRGVzY3JpYmluZyAqL1xuZXhwb3J0IHR5cGUge1xuICBGbG93Q2hhcnRDb250cmFjdCxcbiAgRmxvd0NoYXJ0Q29udHJhY3RPcHRpb25zLFxuICBKc29uU2NoZW1hLFxuICBPcGVuQVBJT3B0aW9ucyxcbiAgT3BlbkFQSVNwZWMsXG59IGZyb20gJy4vbGliL2NvbnRyYWN0L2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU25hcHNob3QgJiBDb21wb3NpdGlvbiDigJQgU3ViZmxvdyBuYXZpZ2F0aW9uIGFuZCBDb21wb3NhYmxlUnVubmVyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgU25hcHNob3QgJiBDb21wb3NpdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBDb21wb3NhYmxlUnVubmVyIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBTbmFwc2hvdCAmIENvbXBvc2l0aW9uICovXG5leHBvcnQgdHlwZSB7IFJlY29yZGVyU25hcHNob3QsIFJ1bnRpbWVTbmFwc2hvdCwgU3VidHJlZVNuYXBzaG90IH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBTbmFwc2hvdCAmIENvbXBvc2l0aW9uICovXG5leHBvcnQgeyBnZXRTdWJ0cmVlU25hcHNob3QsIGxpc3RTdWJmbG93UGF0aHMgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTY29wZVJlY29yZGVyIENvbXBvc2l0aW9uIOKAlCBCdW5kbGUgbXVsdGlwbGUgcmVjb3JkZXJzIGludG8gZG9tYWluIHByZXNldHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBTY29wZVJlY29yZGVyICovXG5leHBvcnQgeyBDb21wb3NpdGVSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUGF1c2UvUmVzdW1lIOKAlCBTZXJpYWxpemFibGUgY2hlY2twb2ludHMgZm9yIGxvbmctcnVubmluZyBvciBodW1hbi1pbi10aGUtbG9vcCBmbG93c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuLyoqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWUgKi9cbmV4cG9ydCB0eXBlIHsgRmxvd2NoYXJ0Q2hlY2twb2ludCwgUGF1c2FibGVIYW5kbGVyIH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWVcbiAqXG4gKiBgaW50ZXJydXB0KHNjb3BlLCB7IHJlYXNvbiwgZXhwZWN0cz8gfSlgIOKAlCBzdG9wIG1pZC1zdGFnZSB0byBhc2sgYSBxdWVzdGlvbixcbiAqIGFuZCBnZXQgdGhlIGFuc3dlciBiYWNrIGF0IHRoZSBzYW1lIGNhbGwgc2l0ZSB3aGVuIHRoZSBydW4gcmVzdW1lcy4gUmVzdW1lXG4gKiByZS1lbnRlcnMgdGhlIHN0YWdlIGZyb20gaXRzIFRPUCAoc3RhZ2VzIGFyZSBhdG9taWMpLCBzbyBrZWVwIHRoZSBoYWxmXG4gKiBiZWZvcmUgdGhlIGNhbGwgaWRlbXBvdGVudC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBJbnRlcnJ1cHRQYXlsb2FkIH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuZXhwb3J0IHsgaW50ZXJydXB0IH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNjb3BlUmVjb3JkZXIgKi9cbmV4cG9ydCB0eXBlIHsgQ29tcG9zaXRlU25hcHNob3QgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbmZpZ3VyYXRpb24g4oCUIFR5cGVzIHBhc3NlZCB0byBGbG93Q2hhcnRFeGVjdXRvciBhbmQgcnVuKClcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uICovXG5leHBvcnQgdHlwZSB7IEV4ZWN1dGlvbkVudiwgRXhlY3V0b3JSZXN1bHQsIFBhdXNlZFJlc3VsdCwgUnVuT3B0aW9ucyB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBTY29wZUZhY3RvcnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uXG4gKlxuICogUmVhZC10cmFja2luZyBwb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlUmVhZHNgICgjMTQpOlxuICogYCdmdWxsJ2AgKGRlZmF1bHQg4oCUIHBlci1yZWFkIHZhbHVlIGNsb25lLCBoaXN0b3JpY2FsIGJlaGF2aW9yKSAvXG4gKiBgJ3N1bW1hcnknYCAoY2hlYXAgYFJlYWRTdW1tYXJ5TWFya2VyYCBwZXIgcmVhZCkgLyBgJ29mZidgIChubyB0cmFja2luZyxcbiAqIHplcm8gcGVyLXJlYWQgY2xvbmUpLiBQYXNzIGFzIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgcmVhZFRyYWNraW5nIH0pYFxuICogb3IgY2FsbCBgZXhlY3V0b3Iuc2V0UmVhZFRyYWNraW5nKG1vZGUpYCBiZWZvcmUgYHJ1bigpYC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBSZWFkU3VtbWFyeU1hcmtlciwgUmVhZFRyYWNraW5nTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBXcml0ZS10cmFja2luZyBwb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlV3JpdGVzYCAoIzEzYy1BKSDigJQgdGhlXG4gKiBzaWJsaW5nIG9mIGBSZWFkVHJhY2tpbmdNb2RlYDsgYm90aCBhbGlhcyB0aGUgc2hhcmVkIGBSZXRlbnRpb25Qb2xpY3lgXG4gKiBmYW1pbHkgZnJvbSBgbGliL2NhcHR1cmVgLiBgJ2Z1bGwnYCAoZGVmYXVsdCDigJQgcGVyLXdyaXRlIHZhbHVlIGNsb25lLFxuICogaGlzdG9yaWNhbCBiZWhhdmlvcikgLyBgJ3N1bW1hcnknYCAoY2hlYXAgYFdyaXRlU3VtbWFyeU1hcmtlcmAgcGVyIHdyaXRlKVxuICogLyBgJ29mZidgIChubyB0cmFja2luZzsgYHN0YWdlV3JpdGVzYCBhYnNlbnQgYW5kIHRoZSBgb25Db21taXRgIG11dGF0aW9uc1xuICogcGF5bG9hZCBpcyBlbXB0eSDigJQgd3JpdGVzIHRoZW1zZWx2ZXMgc3RpbGwgY29tbWl0LCBhbmQgdGhlIGNvbW1pdCBsb2cgaXNcbiAqIHVuYWZmZWN0ZWQpLiBQYXNzIGFzIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgd3JpdGVUcmFja2luZyB9KWAgb3JcbiAqIGNhbGwgYGV4ZWN1dG9yLnNldFdyaXRlVHJhY2tpbmcobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICovXG5leHBvcnQgdHlwZSB7IFJldGVudGlvblBvbGljeSwgV3JpdGVTdW1tYXJ5TWFya2VyLCBXcml0ZVRyYWNraW5nTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBDb21taXQtdmFsdWVzIGVuY29kaW5nIGZvciB0aGUgQ09NTUlUIExPRyAoIzEzYy1CKSDigJQgdGhlIHRoaXJkIGRpYWwgb2ZcbiAqIHRoZSBmYW1pbHksIGFuZCB0aGUgb25seSBMT1NTTEVTUyBvbmUgKGl0IGNoYW5nZXMgdGhlIGxvZydzIGVuY29kaW5nLFxuICogbmV2ZXIgaXRzIGluZm9ybWF0aW9uKS4gYCdmdWxsJ2AgKGRlZmF1bHQg4oCUIGV2ZXJ5IHN1cnZpdmluZyBgc2V0YCBzdG9yZXNcbiAqIHRoZSBmdWxsIGZpbmFsIHZhbHVlLCBieXRlLWlkZW50aWNhbCB0byBoaXN0b3J5KSAvIGAnZGVsdGEnYCAoYXJyYXlcbiAqIG5ldC1jaGFuZ2VzIHRoYXQgYXJlIFwiYmFzZSBwbHVzIGEgdGFpbFwiIGNvbW1pdCBhcyBhbiBgYXBwZW5kYCB2ZXJiXG4gKiBzdG9yaW5nIG9ubHkgdGhlIHRhaWw7IGBkZWxldGVWYWx1ZSgpYCBjb21taXRzIGFzIGEgcmVhbCBgZGVsZXRlYCB2ZXJiO1xuICogb25lIHRyYWNlIGVudHJ5IHBlciBzdXJ2aXZpbmcgcGF0aCkuIFJlcGxheSByZWNvbnN0cnVjdHMgZXZlcnkgc3RlcCdzXG4gKiBmdWxsIHN0YXRlIGV4YWN0bHkuIENvbnN1bWVycyByZWFkaW5nIGBidW5kbGUub3ZlcndyaXRlW2tleV1gIGFzIHRoZSBmdWxsXG4gKiB2YWx1ZSBtdXN0IHVzZSBgY29tbWl0VmFsdWVBdGAgZnJvbSBgZm9vdHByaW50anMvdHJhY2VgLiBQYXNzIGFzXG4gKiBgbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0LCB7IGNvbW1pdFZhbHVlcyB9KWAgb3IgY2FsbFxuICogYGV4ZWN1dG9yLnNldENvbW1pdFZhbHVlcyhtb2RlKWAgYmVmb3JlIGBydW4oKWA7IHRoZSBhY3RpdmUgbW9kZSBpcyB0aGVcbiAqIHNuYXBzaG90IGRpc2NyaW1pbmFudCBgZ2V0U25hcHNob3QoKS5jb21taXRWYWx1ZXNgLlxuICovXG5leHBvcnQgdHlwZSB7IENvbW1pdFZhbHVlc01vZGUgfSBmcm9tICcuL2xpYi9tZW1vcnkvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb250cmFjdCAmIFZhbGlkYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBDb250cmFjdCAmIFZhbGlkYXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgU2NoZW1hS2luZCwgVmFsaWRhdGlvbklzc3VlLCBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBDb250cmFjdCAmIFZhbGlkYXRpb24gKi9cbmV4cG9ydCB7IGRldGVjdFNjaGVtYSwgaXNWYWxpZGF0YWJsZSwgaXNab2QgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IENvbnRyYWN0ICYgVmFsaWRhdGlvbiAqL1xuZXhwb3J0IHsgSW5wdXRWYWxpZGF0aW9uRXJyb3IsIHZhbGlkYXRlQWdhaW5zdFNjaGVtYSwgdmFsaWRhdGVPclRocm93IH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRXJyb3IgVXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgRXJyb3IgVXRpbGl0aWVzICovXG5leHBvcnQgdHlwZSB7IFN0cnVjdHVyZWRFcnJvckluZm8gfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IEVycm9yIFV0aWxpdGllcyAqL1xuZXhwb3J0IHsgZXh0cmFjdEVycm9ySW5mbywgZm9ybWF0RXJyb3JJbmZvIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGV2IFRvb2xzIOKAlCBNb2RlIGZsYWdzIGFuZCBab2Qgc2NvcGUgdXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQGNhdGVnb3J5IERldiBUb29sc1xuICpcbiAqIEdsb2JhbCBkZXYtbW9kZSBmbGFnLiBDYWxsIGBlbmFibGVEZXZNb2RlKClgIGF0IGFwcGxpY2F0aW9uIHN0YXJ0dXAgdG9cbiAqIHR1cm4gb24gZGV2ZWxvcGVyLW9ubHkgZGlhZ25vc3RpY3MgYWNyb3NzIHRoZSBsaWJyYXJ5IOKAlCBjaXJjdWxhci1yZWZlcmVuY2VcbiAqIGRldGVjdGlvbiBpbiBzY29wZSB3cml0ZXMsIHdhcm5pbmdzIHdoZW4gYSByZWNvcmRlciBoYXMgbm8gb2JzZXJ2ZXJcbiAqIG1ldGhvZHMsIHN1c3BpY2lvdXMtcHJlZGljYXRlIHdhcm5pbmdzIGluIGRlY2lkZS9zZWxlY3QsIHN0cnVjdHVyYWxcbiAqIGNoZWNrcyBpbiBgZ2V0U3VidHJlZVNuYXBzaG90YCwgYW5kIGFueSBmdXR1cmUgZGV2LW9ubHkgZGlhZ25vc3RpYy5cbiAqXG4gKiBQcm9kdWN0aW9uIGxlYXZlcyBpdCBPRkYgYnkgZGVmYXVsdCAoemVybyBvdmVyaGVhZCkuIFNlZSB0aGUgSlNEb2Mgb25cbiAqIGBlbmFibGVEZXZNb2RlYCBmb3IgdGhlIGZ1bGwgbGlzdCBhbmQgdXNhZ2UgZXhhbXBsZS5cbiAqL1xuZXhwb3J0IHsgZGlzYWJsZURldk1vZGUsIGVuYWJsZURldk1vZGUsIGlzRGV2TW9kZSB9IGZyb20gJy4vbGliL3Njb3BlL2RldGVjdENpcmN1bGFyLmpzJztcblxuLy8gYGRlZmluZVNjb3BlRnJvbVpvZGAgYW5kIHRoZSBvdGhlciB6b2QtYmFzZWQgc2NvcGUgaGVscGVycyBtb3ZlZCB0byB0aGUgb3B0LWluXG4vLyBgZm9vdHByaW50anMvem9kYCBlbnRyeSDigJQga2VlcGluZyB6b2Qgb3V0IG9mIHRoZSBjb3JlIGxvYWQgcGF0aCAoaXQgaXMgYW5cbi8vIG9wdGlvbmFsIHBlZXIpLiBJbXBvcnQgdGhlbSBmcm9tICdmb290cHJpbnRqcy96b2QnLlxuLy8gQSBydW4ncyByZWNvcmQgYXMgSlNPTiB3aXRob3V0IHRoZSBlbmdpbmUncyByZWN1cnNpb24gbGltaXQgKDkuMjYuMCk6IHRoZVxuLy8gc2FtZSBieXRlcyBKU09OLnN0cmluZ2lmeSBlbWl0cywgZm9yIGEgZGVlcCBgbmV4dGAgY2hhaW4gaXQgY2Fubm90IGVuY29kZS5cbmV4cG9ydCB7IHN0cmluZ2lmeVNuYXBzaG90IH0gZnJvbSAnLi9saWIvcnVubmVyL3N0cmluZ2lmeVNuYXBzaG90LmpzJztcbiJdfQ==
|