footprintjs 4.12.2 → 4.13.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/CLAUDE.md +111 -0
- package/README.md +29 -1
- package/dist/esm/index.js +16 -3
- package/dist/esm/lib/engine/graph/StageNode.js +2 -3
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +29 -1
- package/dist/esm/lib/engine/handlers/types.js +1 -1
- package/dist/esm/lib/engine/index.js +1 -1
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +176 -41
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +8 -3
- package/dist/esm/lib/engine/narrative/index.js +1 -1
- package/dist/esm/lib/engine/narrative/narrativeTypes.js +1 -1
- package/dist/esm/lib/engine/narrative/types.js +1 -1
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +60 -36
- package/dist/esm/lib/engine/types.js +1 -1
- package/dist/esm/lib/reactive/createTypedScope.js +6 -3
- package/dist/esm/lib/reactive/types.js +2 -1
- package/dist/esm/lib/recorder/CombinedRecorder.js +211 -0
- package/dist/esm/lib/recorder/EmitRecorder.js +62 -0
- package/dist/esm/lib/recorder/index.js +2 -1
- package/dist/esm/lib/runner/FlowChartExecutor.js +123 -1
- package/dist/esm/lib/scope/ScopeFacade.js +117 -1
- package/dist/esm/lib/scope/detectCircular.js +74 -5
- package/dist/esm/lib/scope/types.js +1 -1
- package/dist/esm/recorders.js +1 -1
- package/dist/index.js +50 -32
- package/dist/lib/engine/graph/StageNode.js +2 -3
- package/dist/lib/engine/handlers/SubflowExecutor.js +29 -1
- package/dist/lib/engine/handlers/types.js +1 -1
- package/dist/lib/engine/index.js +1 -1
- package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +176 -41
- package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +8 -3
- package/dist/lib/engine/narrative/index.js +1 -1
- package/dist/lib/engine/narrative/narrativeTypes.js +1 -1
- package/dist/lib/engine/narrative/types.js +1 -1
- package/dist/lib/engine/traversal/FlowchartTraverser.js +60 -36
- package/dist/lib/engine/types.js +1 -1
- package/dist/lib/reactive/createTypedScope.js +6 -3
- package/dist/lib/reactive/types.js +2 -1
- package/dist/lib/recorder/CombinedRecorder.js +218 -0
- package/dist/lib/recorder/EmitRecorder.js +63 -0
- package/dist/lib/recorder/index.js +7 -2
- package/dist/lib/runner/FlowChartExecutor.js +123 -1
- package/dist/lib/scope/ScopeFacade.js +117 -1
- package/dist/lib/scope/detectCircular.js +74 -5
- package/dist/lib/scope/types.js +1 -1
- package/dist/recorders.js +1 -1
- package/dist/types/index.d.ts +36 -2
- package/dist/types/lib/engine/graph/StageNode.d.ts +3 -7
- package/dist/types/lib/engine/handlers/SubflowExecutor.d.ts +2 -3
- package/dist/types/lib/engine/handlers/types.d.ts +19 -3
- package/dist/types/lib/engine/index.d.ts +1 -1
- package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +38 -17
- package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +1 -1
- package/dist/types/lib/engine/narrative/index.d.ts +1 -1
- package/dist/types/lib/engine/narrative/narrativeTypes.d.ts +70 -6
- package/dist/types/lib/engine/narrative/types.d.ts +24 -2
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +18 -0
- package/dist/types/lib/engine/types.d.ts +66 -0
- package/dist/types/lib/reactive/types.d.ts +61 -3
- package/dist/types/lib/recorder/CombinedRecorder.d.ts +173 -0
- package/dist/types/lib/recorder/EmitRecorder.d.ts +135 -0
- package/dist/types/lib/recorder/index.d.ts +3 -0
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +85 -0
- package/dist/types/lib/scope/ScopeFacade.d.ts +40 -0
- package/dist/types/lib/scope/detectCircular.d.ts +30 -3
- package/dist/types/lib/scope/types.d.ts +21 -0
- package/dist/types/recorders.d.ts +3 -2
- package/package.json +1 -2
|
@@ -179,20 +179,130 @@ export class ScopeFacade {
|
|
|
179
179
|
}
|
|
180
180
|
}
|
|
181
181
|
// ── Debug / Diagnostics ──────────────────────────────────────────────────
|
|
182
|
+
//
|
|
183
|
+
// These legacy methods still write to the `StageContext` diagnostic
|
|
184
|
+
// side bags (logContext / errorContext / metricContext / evalContext) for
|
|
185
|
+
// snapshot inclusion. They ALSO fire through the Emit channel so any
|
|
186
|
+
// attached `EmitRecorder` sees them in real time — closing the
|
|
187
|
+
// long-standing gap where `$debug`/`$metric` went to unobserved bags.
|
|
182
188
|
addDebugInfo(key, value) {
|
|
183
189
|
this._stageContext.addLog(key, value);
|
|
190
|
+
this.emitEvent(`log.debug.${key}`, { key, value, level: 'debug' });
|
|
184
191
|
}
|
|
185
192
|
addDebugMessage(value) {
|
|
186
193
|
this._stageContext.addLog('messages', [value]);
|
|
194
|
+
this.emitEvent('log.debug.messages', { value, level: 'debug' });
|
|
187
195
|
}
|
|
188
196
|
addErrorInfo(key, value) {
|
|
189
197
|
this._stageContext.addError(key, value);
|
|
198
|
+
this.emitEvent(`log.error.${key}`, { key, value, level: 'error' });
|
|
190
199
|
}
|
|
191
200
|
addMetric(metricName, value) {
|
|
192
201
|
this._stageContext.addMetric(metricName, value);
|
|
202
|
+
this.emitEvent(`metric.${metricName}`, { name: metricName, value });
|
|
193
203
|
}
|
|
194
204
|
addEval(metricName, value) {
|
|
195
205
|
this._stageContext.addEval(metricName, value);
|
|
206
|
+
this.emitEvent(`eval.${metricName}`, { name: metricName, value });
|
|
207
|
+
}
|
|
208
|
+
// ── Emit — Phase 3 primary primitive ─────────────────────────────────────
|
|
209
|
+
/**
|
|
210
|
+
* Fire a structured event to every attached recorder implementing
|
|
211
|
+
* `onEmit`. Synchronous, in-order, pass-through — no buffering.
|
|
212
|
+
*
|
|
213
|
+
* - **Fast-path**: zero allocation + zero cost when no recorders are
|
|
214
|
+
* attached (early return on empty list).
|
|
215
|
+
* - **Enrichment**: library auto-adds `stageName`, `runtimeStageId`,
|
|
216
|
+
* `subflowPath`, `pipelineId`, `timestamp` to the event.
|
|
217
|
+
* - **Redaction**: `RedactionPolicy.emitPatterns` regexes are matched
|
|
218
|
+
* against `name` — matched events have their payload replaced with
|
|
219
|
+
* `'[REDACTED]'` before dispatch.
|
|
220
|
+
* - **Error isolation**: a throwing `onEmit` does not propagate — it is
|
|
221
|
+
* caught and routed to `onError` on remaining recorders, matching the
|
|
222
|
+
* pattern used by other scope events.
|
|
223
|
+
*
|
|
224
|
+
* Consumers call this via the `scope.$emit(name, payload)` scope method;
|
|
225
|
+
* the method routes here via `createTypedScope`.
|
|
226
|
+
*/
|
|
227
|
+
emitEvent(name, payload) {
|
|
228
|
+
var _a;
|
|
229
|
+
// Fast-path: zero work when no recorders are attached.
|
|
230
|
+
if (this._recorders.length === 0)
|
|
231
|
+
return;
|
|
232
|
+
// Redaction: if the event name matches any emitPattern, replace payload
|
|
233
|
+
// with '[REDACTED]' BEFORE constructing the event (no leak through
|
|
234
|
+
// copy-on-write, no way for recorders to see the raw value).
|
|
235
|
+
let finalPayload = payload;
|
|
236
|
+
const patterns = (_a = this._redactionPolicy) === null || _a === void 0 ? void 0 : _a.emitPatterns;
|
|
237
|
+
if (patterns && patterns.length > 0) {
|
|
238
|
+
for (const pattern of patterns) {
|
|
239
|
+
if (pattern.test(name)) {
|
|
240
|
+
finalPayload = '[REDACTED]';
|
|
241
|
+
break;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
// Build the enriched event once; pass the same reference to all
|
|
246
|
+
// recorders. Since EmitEvent is `readonly`, sharing is safe.
|
|
247
|
+
const event = {
|
|
248
|
+
name,
|
|
249
|
+
payload: finalPayload,
|
|
250
|
+
stageName: this._stageName,
|
|
251
|
+
runtimeStageId: this._stageContext.runtimeStageId,
|
|
252
|
+
subflowPath: this._getSubflowPath(),
|
|
253
|
+
pipelineId: this._stageContext.runId,
|
|
254
|
+
timestamp: Date.now(),
|
|
255
|
+
};
|
|
256
|
+
// Dispatch with error isolation — same pattern as _invokeHook uses for
|
|
257
|
+
// other scope events. A throwing recorder's error is surfaced via
|
|
258
|
+
// onError on the other recorders; the emit loop continues unaffected.
|
|
259
|
+
for (const recorder of this._recorders) {
|
|
260
|
+
const onEmit = recorder.onEmit;
|
|
261
|
+
if (typeof onEmit !== 'function')
|
|
262
|
+
continue;
|
|
263
|
+
try {
|
|
264
|
+
onEmit.call(recorder, event);
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
this._invokeHook('onError', {
|
|
268
|
+
stageName: this._stageName,
|
|
269
|
+
stageId: this._stageContext.stageId,
|
|
270
|
+
runtimeStageId: this._stageContext.runtimeStageId,
|
|
271
|
+
pipelineId: this._stageContext.runId,
|
|
272
|
+
timestamp: Date.now(),
|
|
273
|
+
error: error,
|
|
274
|
+
operation: 'write',
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Build the subflowPath (outer → inner) for event enrichment.
|
|
281
|
+
*
|
|
282
|
+
* Parses from `runtimeStageId` which has the format
|
|
283
|
+
* `[subflowPath/]stageId#executionIndex` (see `lib/engine/runtimeStageId.ts`).
|
|
284
|
+
* Subflow isolation prevents walking the parent-chain across boundaries,
|
|
285
|
+
* so the runtimeStageId — globally unique, includes full path — is the
|
|
286
|
+
* canonical source of truth for the subflow hierarchy at emit time.
|
|
287
|
+
*
|
|
288
|
+
* Examples:
|
|
289
|
+
* 'seed#0' → [] (root)
|
|
290
|
+
* 'sf-inner/inner#5' → ['sf-inner']
|
|
291
|
+
* 'sf-a/sf-b/stage#3' → ['sf-a', 'sf-b'] (nested)
|
|
292
|
+
*/
|
|
293
|
+
_getSubflowPath() {
|
|
294
|
+
const rtid = this._stageContext.runtimeStageId;
|
|
295
|
+
if (!rtid)
|
|
296
|
+
return ScopeFacade._EMPTY_SUBFLOW_PATH;
|
|
297
|
+
// Strip the trailing `#executionIndex` to isolate the path portion.
|
|
298
|
+
const hashIdx = rtid.lastIndexOf('#');
|
|
299
|
+
const pathPortion = hashIdx >= 0 ? rtid.slice(0, hashIdx) : rtid;
|
|
300
|
+
// pathPortion is now `[subflowPath/]stageId`. Split on '/' and drop the
|
|
301
|
+
// last segment (stageId) — what remains is the subflow path.
|
|
302
|
+
const segments = pathPortion.split('/');
|
|
303
|
+
if (segments.length <= 1)
|
|
304
|
+
return ScopeFacade._EMPTY_SUBFLOW_PATH;
|
|
305
|
+
return Object.freeze(segments.slice(0, -1));
|
|
196
306
|
}
|
|
197
307
|
// ── Non-Tracking State Inspection (for TypedScope proxy internals) ──────
|
|
198
308
|
/** Returns all state keys without firing onRead. Used by TypedScope ownKeys/has traps. */
|
|
@@ -489,6 +599,12 @@ export class ScopeFacade {
|
|
|
489
599
|
}
|
|
490
600
|
}
|
|
491
601
|
ScopeFacade.BRAND = Symbol.for('ScopeFacade@v1');
|
|
602
|
+
/**
|
|
603
|
+
* Shared sentinel returned by `_getSubflowPath()` for root-level stages
|
|
604
|
+
* (no subflow nesting). Avoids per-call allocation of a fresh
|
|
605
|
+
* `Object.freeze([])` on every `emitEvent` in the common no-subflow case.
|
|
606
|
+
*/
|
|
607
|
+
ScopeFacade._EMPTY_SUBFLOW_PATH = Object.freeze([]);
|
|
492
608
|
/**
|
|
493
609
|
* Maximum key length (characters) that will be tested against regex redaction
|
|
494
610
|
* patterns. Keys longer than this are skipped for pattern matching to prevent
|
|
@@ -498,4 +614,4 @@ ScopeFacade.BRAND = Symbol.for('ScopeFacade@v1');
|
|
|
498
614
|
* 256 characters comfortably exceeds any realistic scope-state key name.
|
|
499
615
|
*/
|
|
500
616
|
ScopeFacade._MAX_PATTERN_KEY_LEN = 256;
|
|
501
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NvcGVGYWNhZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3Njb3BlL1Njb3BlRmFjYWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBR0gsT0FBTyxFQUFFLFNBQVMsSUFBSSxTQUFTLEVBQUUsU0FBUyxJQUFJLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdwRixNQUFNLE9BQU8sV0FBVztJQWtCdEIsWUFBWSxPQUFxQixFQUFFLFNBQWlCLEVBQUUsY0FBd0IsRUFBRSxZQUEyQjtRQUxuRyxlQUFVLEdBQWUsRUFBRSxDQUFDO1FBRzVCLHlCQUFvQixHQUE2QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBR2pFLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzVCLElBQUksQ0FBQyxlQUFlLEdBQUcsY0FBYyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUV2Qyw4RkFBOEY7UUFDOUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ2pELElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFD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T0FBTyxNQUFNLEtBQUssVUFBVSxFQUFFLENBQUM7b0JBQ2hDLE1BQW1DLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDN0QsQ0FBQztZQUNILENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRTt3QkFDMUIsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO3dCQUMxQixPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPO3dCQUNuQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjO3dCQUNqRCxVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLO3dCQUNwQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTt3QkFDckIsS0FBSyxFQUFFLEtBQWM7d0JBQ3JCLFNBQVMsRUFBRSxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTztxQkFDakYsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7O0FBbmlCc0IsaUJBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEFBQS9CLENBQWdDO0FBK2U1RDs7Ozs7OztHQU9HO0FBQ3FCLGdDQUFvQixHQUFHLEdBQUcsQUFBTixDQUFPIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTY29wZUZhY2FkZSDigJQgQmFzZSBjbGFzcyB0aGF0IGxpYnJhcnkgY29uc3VtZXJzIGV4dGVuZCB0byBjcmVhdGUgY3VzdG9tIHNjb3BlIGNsYXNzZXNcbiAqXG4gKiBXcmFwcyBTdGFnZUNvbnRleHQgKGZyb20gbWVtb3J5LykgdG8gcHJvdmlkZSBhIGNvbnN1bWVyLWZyaWVuZGx5IEFQSSBmb3JcbiAqIHN0YXRlIGFjY2VzcywgZGVidWcgbG9nZ2luZywgbWV0cmljcywgYW5kIHJlY29yZGVyIGhvb2tzLlxuICpcbiAqIENvbnN1bWVycyBleHRlbmQgdGhpcyBjbGFzcyB0byBhZGQgZG9tYWluLXNwZWNpZmljIHByb3BlcnRpZXM6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogY2xhc3MgTXlTY29wZSBleHRlbmRzIFNjb3BlRmFjYWRlIHtcbiAqICAgZ2V0IHVzZXJOYW1lKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmdldFZhbHVlKCduYW1lJykgYXMgc3RyaW5nOyB9XG4gKiAgIHNldCB1c2VyTmFtZSh2YWx1ZTogc3RyaW5nKSB7IHRoaXMuc2V0VmFsdWUoJ25hbWUnLCB2YWx1ZSk7IH1cbiAqIH1cbiAqIGBgYFxuICovXG5cbmltcG9ydCB0eXBlIHsgRXhlY3V0aW9uRW52IH0gZnJvbSAnLi4vZW5naW5lL3R5cGVzLmpzJztcbmltcG9ydCB7IG5hdGl2ZUhhcyBhcyBsb2Rhc2hIYXMsIG5hdGl2ZVNldCBhcyBsb2Rhc2hTZXQgfSBmcm9tICcuLi9tZW1vcnkvcGF0aE9wcy5qcyc7XG5pbXBvcnQgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuLi9tZW1vcnkvU3RhZ2VDb250ZXh0LmpzJztcbmltcG9ydCB7IGhhc0NpcmN1bGFyUmVmZXJlbmNlLCBpc0Rldk1vZGUgfSBmcm9tICcuL2RldGVjdENpcmN1bGFyLmpzJztcbmltcG9ydCB7IGFzc2VydE5vdFJlYWRvbmx5LCBjcmVhdGVGcm96ZW5BcmdzIH0gZnJvbSAnLi9wcm90ZWN0aW9uL3JlYWRvbmx5SW5wdXQuanMnO1xuaW1wb3J0IHR5cGUgeyBDb21taXRFdmVudCwgUmVjb3JkZXIsIFJlZGFjdGlvblBvbGljeSwgUmVkYWN0aW9uUmVwb3J0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBTY29wZUZhY2FkZSB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQlJBTkQgPSBTeW1ib2wuZm9yKCdTY29wZUZhY2FkZUB2MScpO1xuXG4gIHByb3RlY3RlZCBfc3RhZ2VDb250ZXh0OiBTdGFnZUNvbnRleHQ7XG4gIHByb3RlY3RlZCBfc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIHByb3RlY3RlZCByZWFkb25seSBfcmVhZE9ubHlWYWx1ZXM/OiB1bmtub3duO1xuXG4gIC8qKiBDYWNoZWQgZGVlcGx5LWZyb3plbiBjb3B5IG9mIHJlYWRPbmx5VmFsdWVzIGZvciBnZXRBcmdzKCkuIENyZWF0ZWQgb25jZS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfZnJvemVuQXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqIEV4ZWN1dGlvbiBlbnZpcm9ubWVudCDigJQgcmVhZC1vbmx5LCBpbmhlcml0ZWQgZnJvbSBwYXJlbnQgZXhlY3V0b3IuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4ZWN1dGlvbkVudjogUmVhZG9ubHk8RXhlY3V0aW9uRW52PjtcblxuICBwcml2YXRlIF9yZWNvcmRlcnM6IFJlY29yZGVyW10gPSBbXTtcbiAgcHJpdmF0ZSBfcmVkYWN0ZWRLZXlzOiBTZXQ8c3RyaW5nPjtcbiAgcHJpdmF0ZSBfcmVkYWN0aW9uUG9saWN5OiBSZWRhY3Rpb25Qb2xpY3kgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX3JlZGFjdGVkRmllbGRzQnlLZXk6IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PiA9IG5ldyBNYXAoKTtcblxuICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBTdGFnZUNvbnRleHQsIHN0YWdlTmFtZTogc3RyaW5nLCByZWFkT25seVZhbHVlcz86IHVua25vd24sIGV4ZWN1dGlvbkVudj86IEV4ZWN1dGlvbkVudikge1xuICAgIHRoaXMuX3N0YWdlQ29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5fc3RhZ2VOYW1lID0gc3RhZ2VOYW1lO1xuICAgIHRoaXMuX3JlYWRPbmx5VmFsdWVzID0gcmVhZE9ubHlWYWx1ZXM7XG4gICAgdGhpcy5fZnJvemVuQXJncyA9IGNyZWF0ZUZyb3plbkFyZ3MocmVhZE9ubHlWYWx1ZXMpO1xuICAgIHRoaXMuX2V4ZWN1dGlvbkVudiA9IE9iamVjdC5mcmVlemUoeyAuLi5leGVjdXRpb25FbnYgfSk7XG4gICAgdGhpcy5fcmVkYWN0ZWRLZXlzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAvLyBSZWdpc3RlciBhcyBjb21taXQgb2JzZXJ2ZXIgc28gUmVjb3JkZXIub25Db21taXQgZmlyZXMgd2hlbiBTdGFnZUNvbnRleHQuY29tbWl0KCkgaXMgY2FsbGVkXG4gICAgdGhpcy5fc3RhZ2VDb250ZXh0LnNldENvbW1pdE9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcbiAgICAgIHRoaXMuX29uQ29tbWl0RmlyZWQobXV0YXRpb25zKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaGFyZSBhIHJlZGFjdGVkLWtleXMgc2V0IGFjcm9zcyBtdWx0aXBsZSBTY29wZUZhY2FkZSBpbnN0YW5jZXMuXG4gICAqIENhbGwgdGhpcyB0byBtYWtlIHJlZGFjdGlvbiBwZXJzaXN0IGFjcm9zcyBzdGFnZXMgaW4gdGhlIHNhbWUgcGlwZWxpbmUuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgdXNlU2hhcmVkUmVkYWN0ZWRLZXlzKHNoYXJlZFNldDogU2V0PHN0cmluZz4pOiB2b2lkIHtcbiAgICB0aGlzLl9yZWRhY3RlZEtleXMgPSBzaGFyZWRTZXQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCByZWRhY3RlZC1rZXlzIHNldCAoZm9yIHNoYXJpbmcgd2l0aCBvdGhlciBzY29wZXMpLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGdldFJlZGFjdGVkS2V5cygpOiBTZXQ8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZGFjdGVkS2V5cztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhIGRlY2xhcmF0aXZlIHJlZGFjdGlvbiBwb2xpY3kuIFRoZSBwb2xpY3kgaXMgYWRkaXRpdmUg4oCUXG4gICAqIGl0IHdvcmtzIGFsb25nc2lkZSBtYW51YWwgYHNldFZhbHVlKC4uLiwgdHJ1ZSlgIGNhbGxzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVzZVJlZGFjdGlvblBvbGljeShwb2xpY3k6IFJlZGFjdGlvblBvbGljeSk6IHZvaWQge1xuICAgIHRoaXMuX3JlZGFjdGlvblBvbGljeSA9IHBvbGljeTtcbiAgICAvLyBQcmUtcG9wdWxhdGUgZmllbGQtbGV2ZWwgcmVkYWN0aW9uIG1hcCBmcm9tIHBvbGljeVxuICAgIGlmIChwb2xpY3kuZmllbGRzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGZpZWxkc10gb2YgT2JqZWN0LmVudHJpZXMocG9saWN5LmZpZWxkcykpIHtcbiAgICAgICAgdGhpcy5fcmVkYWN0ZWRGaWVsZHNCeUtleS5zZXQoa2V5LCBuZXcgU2V0KGZpZWxkcykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgZ2V0UmVkYWN0aW9uUG9saWN5KCk6IFJlZGFjdGlvblBvbGljeSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3JlZGFjdGlvblBvbGljeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgY29tcGxpYW5jZS1mcmllbmRseSByZXBvcnQgb2YgYWxsIHJlZGFjdGlvbiBhY3Rpdml0eS5cbiAgICogTmV2ZXIgaW5jbHVkZXMgYWN0dWFsIHZhbHVlcyDigJQgb25seSBrZXkgbmFtZXMsIGZpZWxkIG5hbWVzLCBhbmQgcGF0dGVybnMuXG4gICAqL1xuICBnZXRSZWRhY3Rpb25SZXBvcnQoKTogUmVkYWN0aW9uUmVwb3J0IHtcbiAgICBjb25zdCBmaWVsZFJlZGFjdGlvbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgZmllbGRzXSBvZiB0aGlzLl9yZWRhY3RlZEZpZWxkc0J5S2V5KSB7XG4gICAgICBmaWVsZFJlZGFjdGlvbnNba2V5XSA9IFsuLi5maWVsZHNdO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcmVkYWN0ZWRLZXlzOiBbLi4udGhpcy5fcmVkYWN0ZWRLZXlzXSxcbiAgICAgIGZpZWxkUmVkYWN0aW9ucyxcbiAgICAgIHBhdHRlcm5zOiAodGhpcy5fcmVkYWN0aW9uUG9saWN5Py5wYXR0ZXJucyA/PyBbXSkubWFwKChwKSA9PiBwLnNvdXJjZSksXG4gICAgfTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBSZWNvcmRlciBNYW5hZ2VtZW50IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGF0dGFjaFJlY29yZGVyKHJlY29yZGVyOiBSZWNvcmRlcik6IHZvaWQge1xuICAgIC8vIFJlcGxhY2UgZXhpc3RpbmcgcmVjb3JkZXIgd2l0aCBzYW1lIElEIChpZGVtcG90ZW50IOKAlCBwcmV2ZW50cyBkb3VibGUtY291bnRpbmcpXG4gICAgdGhpcy5fcmVjb3JkZXJzID0gdGhpcy5fcmVjb3JkZXJzLmZpbHRlcigocikgPT4gci5pZCAhPT0gcmVjb3JkZXIuaWQpO1xuICAgIHRoaXMuX3JlY29yZGVycy5wdXNoKHJlY29yZGVyKTtcbiAgfVxuXG4gIGRldGFjaFJlY29yZGVyKHJlY29yZGVySWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX3JlY29yZGVycyA9IHRoaXMuX3JlY29yZGVycy5maWx0ZXIoKHIpID0+IHIuaWQgIT09IHJlY29yZGVySWQpO1xuICB9XG5cbiAgZ2V0UmVjb3JkZXJzKCk6IFJlY29yZGVyW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fcmVjb3JkZXJzXTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgbm90aWZ5U3RhZ2VTdGFydCgpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnZva2VIb29rKCdvblN0YWdlU3RhcnQnLCB7XG4gICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgbm90aWZ5U3RhZ2VFbmQoZHVyYXRpb24/OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnZva2VIb29rKCdvblN0YWdlRW5kJywge1xuICAgICAgc3RhZ2VOYW1lOiB0aGlzLl9zdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQuc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICBwaXBlbGluZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVuSWQsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBkdXJhdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgbm90aWZ5UGF1c2UocGF1c2VEYXRhPzogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuX2ludm9rZUhvb2soJ29uUGF1c2UnLCB7XG4gICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIHBhdXNlRGF0YSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgbm90aWZ5UmVzdW1lKGhhc0lucHV0OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5faW52b2tlSG9vaygnb25SZXN1bWUnLCB7XG4gICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGhhc0lucHV0LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBub3RpZnlDb21taXQobXV0YXRpb25zOiBDb21taXRFdmVudFsnbXV0YXRpb25zJ10pOiB2b2lkIHtcbiAgICB0aGlzLl9pbnZva2VIb29rKCdvbkNvbW1pdCcsIHtcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5fc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgcGlwZWxpbmVJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bklkLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgbXV0YXRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIENhbGxlZCBieSBTdGFnZUNvbnRleHQuY29tbWl0KCkgb2JzZXJ2ZXIuIENvbnZlcnRzIHRyYWNrZWQgd3JpdGVzIHRvIENvbW1pdEV2ZW50IGZvcm1hdC5cbiAgICogIEVycm9ycyBhcmUgY2F1Z2h0IHRvIHByZXZlbnQgcmVjb3JkZXIgaXNzdWVzIGZyb20gYWJvcnRpbmcgdGhlIHRyYXZlcnNhbC4gKi9cbiAgcHJpdmF0ZSBfb25Db21taXRGaXJlZChtdXRhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHsgdmFsdWU6IHVua25vd247IG9wZXJhdGlvbjogJ3NldCcgfCAndXBkYXRlJyB8ICdkZWxldGUnIH0+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3JlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb21taXRNdXRhdGlvbnM6IENvbW1pdEV2ZW50WydtdXRhdGlvbnMnXSA9IE9iamVjdC5lbnRyaWVzKG11dGF0aW9ucykubWFwKChba2V5LCBlbnRyeV0pID0+IHtcbiAgICAgICAgY29uc3QgaXNSZWRhY3RlZCA9IHRoaXMuX2lzS2V5UmVkYWN0ZWQoa2V5KSB8fCB0aGlzLl9pc1BvbGljeVJlZGFjdGVkKGtleSk7XG4gICAgICAgIGNvbnN0IGZpZWxkU2V0ID0gdGhpcy5fcmVkYWN0ZWRGaWVsZHNCeUtleS5nZXQoa2V5KTtcblxuICAgICAgICBsZXQgcmVjb3JkZXJWYWx1ZTogdW5rbm93bjtcbiAgICAgICAgaWYgKGlzUmVkYWN0ZWQpIHtcbiAgICAgICAgICByZWNvcmRlclZhbHVlID0gJ1tSRURBQ1RFRF0nO1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkU2V0ICYmIGVudHJ5LnZhbHVlICYmIHR5cGVvZiBlbnRyeS52YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICByZWNvcmRlclZhbHVlID0gdGhpcy5fc2NydWJGaWVsZHMoZW50cnkudmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGZpZWxkU2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWNvcmRlclZhbHVlID0gZW50cnkudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGtleSxcbiAgICAgICAgICB2YWx1ZTogcmVjb3JkZXJWYWx1ZSxcbiAgICAgICAgICBvcGVyYXRpb246IGVudHJ5Lm9wZXJhdGlvbixcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm5vdGlmeUNvbW1pdChjb21taXRNdXRhdGlvbnMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gU3dhbGxvdyDigJQgcmVjb3JkZXIgZXJyb3JzIG11c3Qgbm90IGFib3J0IHRoZSB0cmF2ZXJzYWwuXG4gICAgICAvLyBJbmRpdmlkdWFsIHJlY29yZGVyIGVycm9ycyBhcmUgYWxyZWFkeSBpc29sYXRlZCBieSBfaW52b2tlSG9vay5cbiAgICB9XG4gIH1cblxuICAvLyDilIDilIAgRGVidWcgLyBEaWFnbm9zdGljcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBhZGREZWJ1Z0luZm8oa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fc3RhZ2VDb250ZXh0LmFkZExvZyhrZXksIHZhbHVlKTtcbiAgfVxuXG4gIGFkZERlYnVnTWVzc2FnZSh2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMuX3N0YWdlQ29udGV4dC5hZGRMb2coJ21lc3NhZ2VzJywgW3ZhbHVlXSk7XG4gIH1cblxuICBhZGRFcnJvckluZm8oa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fc3RhZ2VDb250ZXh0LmFkZEVycm9yKGtleSwgdmFsdWUpO1xuICB9XG5cbiAgYWRkTWV0cmljKG1ldHJpY05hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICB0aGlzLl9zdGFnZUNvbnRleHQuYWRkTWV0cmljKG1ldHJpY05hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIGFkZEV2YWwobWV0cmljTmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMuX3N0YWdlQ29udGV4dC5hZGRFdmFsKG1ldHJpY05hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBOb24tVHJhY2tpbmcgU3RhdGUgSW5zcGVjdGlvbiAoZm9yIFR5cGVkU2NvcGUgcHJveHkgaW50ZXJuYWxzKSDilIDilIDilIDilIDilIDilIBcblxuICAvKiogUmV0dXJucyBhbGwgc3RhdGUga2V5cyB3aXRob3V0IGZpcmluZyBvblJlYWQuIFVzZWQgYnkgVHlwZWRTY29wZSBvd25LZXlzL2hhcyB0cmFwcy4gKi9cbiAgZ2V0U3RhdGVLZXlzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzbmFwc2hvdCA9IHRoaXMuX3N0YWdlQ29udGV4dC5nZXRWYWx1ZShbXSwgdW5kZWZpbmVkKTtcbiAgICBpZiAoIXNuYXBzaG90IHx8IHR5cGVvZiBzbmFwc2hvdCAhPT0gJ29iamVjdCcpIHJldHVybiBbXTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc25hcHNob3QgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICB9XG5cbiAgLyoqIENoZWNrIGtleSBleGlzdGVuY2Ugd2l0aG91dCBmaXJpbmcgb25SZWFkLiBVc2VkIGJ5IFR5cGVkU2NvcGUgaGFzIHRyYXAuXG4gICAqICBDb250cmFjdDogcmV0dXJucyBmYWxzZSBmb3Iga2V5cyBuZXZlciBzZXQgT1Iga2V5cyBzZXQgdG8gdW5kZWZpbmVkLlxuICAgKiAgVGhpcyBtYXRjaGVzIGRlbGV0ZVZhbHVlKCkgc2VtYW50aWNzIChzZXRzIHRvIHVuZGVmaW5lZCA9IGRlbGV0ZWQpLiAqL1xuICBoYXNLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhZ2VDb250ZXh0LmdldFZhbHVlKFtdLCBrZXkpICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogUmVhZCBzdGF0ZSB3aXRob3V0IGZpcmluZyBvblJlYWQuIFVzZWQgYnkgYXJyYXkgcHJveHkgZ2V0Q3VycmVudCgpIHRvIGF2b2lkXG4gICAqICBwaGFudG9tIHJlYWRzIG9uIGludGVybmFsIGFycmF5IG9wZXJhdGlvbnMgKC5sZW5ndGgsIC5oYXMsIGl0ZXJhdGlvbiwgZXRjLikuXG4gICAqICBUaGUgaW5pdGlhbCBwcm9wZXJ0eSBhY2Nlc3MgZmlyZXMgb25lIHRyYWNrZWQgb25SZWFkIHZpYSBnZXRWYWx1ZSgpOyBzdWJzZXF1ZW50XG4gICAqICBpbnRlcm5hbCBhcnJheSBvcGVyYXRpb25zIHVzZSB0aGlzIG1ldGhvZCB0byBzdGF5IHNpbGVudC5cbiAgICogIE5PVEU6IExpa2UgZ2V0VmFsdWUoKSwgcmV0dXJucyB0aGUgcmF3IHZhbHVlIHRvIHRoZSBjYWxsZXIuIFJlZGFjdGlvbiBhcHBsaWVzXG4gICAqICBvbmx5IHRvIHJlY29yZGVyIGRpc3BhdGNoIOKAlCBpdCBkb2VzIG5vdCBmaWx0ZXIgdGhlIHJldHVybmVkIHZhbHVlLiBUaGlzIG1hdGNoZXNcbiAgICogIHRoZSBleGlzdGluZyBnZXRWYWx1ZSgpIGNvbnRyYWN0IHdoZXJlIHVzZXIgY29kZSBhbHdheXMgcmVjZWl2ZXMgcmF3IGRhdGEuICovXG4gIGdldFZhbHVlU2lsZW50KGtleT86IHN0cmluZyk6IHVua25vd24ge1xuICAgIHJldHVybiB0aGlzLl9zdGFnZUNvbnRleHQuZ2V0VmFsdWVEaXJlY3QoW10sIGtleSk7XG4gIH1cblxuICAvLyDilIDilIAgU3RhdGUgQWNjZXNzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGdldEluaXRpYWxWYWx1ZUZvcihrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9zdGFnZUNvbnRleHQuZ2V0R2xvYmFsPy4oa2V5KTtcbiAgfVxuXG4gIGdldFZhbHVlKGtleT86IHN0cmluZykge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fc3RhZ2VDb250ZXh0LmdldFZhbHVlKFtdLCBrZXkpO1xuXG4gICAgaWYgKHRoaXMuX3JlY29yZGVycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBpc1JlZGFjdGVkID0ga2V5ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5faXNLZXlSZWRhY3RlZChrZXkpO1xuICAgICAgY29uc3QgZmllbGRTZXQgPSBrZXkgIT09IHVuZGVmaW5lZCA/IHRoaXMuX3JlZGFjdGVkRmllbGRzQnlLZXkuZ2V0KGtleSkgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGxldCByZWNvcmRlclZhbHVlOiB1bmtub3duO1xuICAgICAgaWYgKGlzUmVkYWN0ZWQpIHtcbiAgICAgICAgcmVjb3JkZXJWYWx1ZSA9ICdbUkVEQUNURURdJztcbiAgICAgIH0gZWxzZSBpZiAoZmllbGRTZXQgJiYgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZWNvcmRlclZhbHVlID0gdGhpcy5fc2NydWJGaWVsZHModmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGZpZWxkU2V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29yZGVyVmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faW52b2tlSG9vaygnb25SZWFkJywge1xuICAgICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlOiByZWNvcmRlclZhbHVlLFxuICAgICAgICByZWRhY3RlZDogaXNSZWRhY3RlZCB8fCBmaWVsZFNldCAhPT0gdW5kZWZpbmVkIHx8IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHNldFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgc2hvdWxkUmVkYWN0PzogYm9vbGVhbiwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICBhc3NlcnROb3RSZWFkb25seSh0aGlzLl9yZWFkT25seVZhbHVlcywga2V5LCAnd3JpdGUnKTtcblxuICAgIC8vIERldi1tb2RlOiB3YXJuIGlmIHRoZSB2YWx1ZSBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2VzLlxuICAgIC8vIENoZWNrIEFGVEVSIGFzc2VydE5vdFJlYWRvbmx5IOKAlCBkb24ndCB3YXJuIGZvciB3cml0ZXMgdGhhdCB3aWxsIGJlIGJsb2NrZWQuXG4gICAgLy8gQ2lyY3VsYXIgdmFsdWVzIHdvcmsgKHRlcm1pbmFsIHByb3h5IGhhbmRsZXMgdGhlbSkgYnV0IGNhbiBwcm9kdWNlXG4gICAgLy8gc3VycHJpc2luZyBiZWhhdmlvciBpbiBuYXJyYXRpdmUsIEpTT04gc2VyaWFsaXphdGlvbiwgYW5kIHNuYXBzaG90cy5cbiAgICBpZiAoaXNEZXZNb2RlKCkgJiYgdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKGhhc0NpcmN1bGFyUmVmZXJlbmNlKHZhbHVlKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFtmb290cHJpbnRdIENpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiBzZXRWYWx1ZSgnJHtrZXl9JykuIGAgK1xuICAgICAgICAgICAgJ1dyaXRlcyBwYXN0IHRoZSBjeWNsZSBkZXB0aCB3aWxsIHVzZSB0ZXJtaW5hbCBwcm94eSB0cmFja2luZy4gJyArXG4gICAgICAgICAgICAnQ29uc2lkZXIgZmxhdHRlbmluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBdXRvLXJlZGFjdCBpZiBrZXkgbWF0Y2hlcyBwb2xpY3kgKGV4YWN0IGtleXMgb3IgcGF0dGVybnMpLCBvciBpZiB0aGUga2V5IHdhc1xuICAgIC8vIHByZXZpb3VzbHkgbWFya2VkIHJlZGFjdGVkIChlLmcuIGNhcnJpZWQgb3ZlciBmcm9tIGEgc3ViZmxvdyB2aWEgb3V0cHV0TWFwcGVyKS5cbiAgICBjb25zdCBlZmZlY3RpdmVSZWRhY3QgPSBzaG91bGRSZWRhY3QgfHwgdGhpcy5faXNQb2xpY3lSZWRhY3RlZChrZXkpIHx8IHRoaXMuX3JlZGFjdGVkS2V5cy5oYXMoa2V5KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3N0YWdlQ29udGV4dC5zZXRPYmplY3QoW10sIGtleSwgdmFsdWUsIGVmZmVjdGl2ZVJlZGFjdCwgZGVzY3JpcHRpb24pO1xuXG4gICAgaWYgKGVmZmVjdGl2ZVJlZGFjdCkge1xuICAgICAgdGhpcy5fcmVkYWN0ZWRLZXlzLmFkZChrZXkpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBmaWVsZC1sZXZlbCByZWRhY3Rpb24gZnJvbSBwb2xpY3lcbiAgICBjb25zdCBmaWVsZFNldCA9IHRoaXMuX3JlZGFjdGVkRmllbGRzQnlLZXkuZ2V0KGtleSk7XG5cbiAgICBpZiAodGhpcy5fcmVjb3JkZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCByZWNvcmRlclZhbHVlOiB1bmtub3duO1xuICAgICAgaWYgKGVmZmVjdGl2ZVJlZGFjdCkge1xuICAgICAgICByZWNvcmRlclZhbHVlID0gJ1tSRURBQ1RFRF0nO1xuICAgICAgfSBlbHNlIGlmIChmaWVsZFNldCAmJiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJlY29yZGVyVmFsdWUgPSB0aGlzLl9zY3J1YkZpZWxkcyh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgZmllbGRTZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVjb3JkZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pbnZva2VIb29rKCdvbldyaXRlJywge1xuICAgICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlOiByZWNvcmRlclZhbHVlLFxuICAgICAgICBvcGVyYXRpb246ICdzZXQnLFxuICAgICAgICByZWRhY3RlZDogZWZmZWN0aXZlUmVkYWN0IHx8IGZpZWxkU2V0ICE9PSB1bmRlZmluZWQgfHwgdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHVwZGF0ZVZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICBhc3NlcnROb3RSZWFkb25seSh0aGlzLl9yZWFkT25seVZhbHVlcywga2V5LCAnd3JpdGUnKTtcblxuICAgIC8vIERldi1tb2RlOiBzYW1lIGNpcmN1bGFyIGNoZWNrIGFzIHNldFZhbHVlIChtZXJnZSB0YXJnZXRzIGNhbiBiZSBjaXJjdWxhciB0b28pXG4gICAgaWYgKGlzRGV2TW9kZSgpICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChoYXNDaXJjdWxhclJlZmVyZW5jZSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbZm9vdHByaW50XSBDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gdXBkYXRlVmFsdWUoJyR7a2V5fScpLiBgICtcbiAgICAgICAgICAgICdDb25zaWRlciBmbGF0dGVuaW5nIHRoZSBkYXRhIHN0cnVjdHVyZS4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGlzUmVkYWN0ZWQgPSB0aGlzLl9pc0tleVJlZGFjdGVkKGtleSkgfHwgdGhpcy5faXNQb2xpY3lSZWRhY3RlZChrZXkpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3N0YWdlQ29udGV4dC51cGRhdGVPYmplY3QoW10sIGtleSwgdmFsdWUsIGRlc2NyaXB0aW9uLCBpc1JlZGFjdGVkKTtcblxuICAgIGlmICh0aGlzLl9yZWNvcmRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmllbGRTZXQgPSB0aGlzLl9yZWRhY3RlZEZpZWxkc0J5S2V5LmdldChrZXkpO1xuXG4gICAgICBsZXQgcmVjb3JkZXJWYWx1ZTogdW5rbm93bjtcbiAgICAgIGlmIChpc1JlZGFjdGVkKSB7XG4gICAgICAgIHJlY29yZGVyVmFsdWUgPSAnW1JFREFDVEVEXSc7XG4gICAgICB9IGVsc2UgaWYgKGZpZWxkU2V0ICYmIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmVjb3JkZXJWYWx1ZSA9IHRoaXMuX3NjcnViRmllbGRzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBmaWVsZFNldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWNvcmRlclZhbHVlID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2ludm9rZUhvb2soJ29uV3JpdGUnLCB7XG4gICAgICAgIHN0YWdlTmFtZTogdGhpcy5fc3RhZ2VOYW1lLFxuICAgICAgICBzdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQuc3RhZ2VJZCxcbiAgICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCxcbiAgICAgICAgcGlwZWxpbmVJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bklkLFxuICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgIGtleSxcbiAgICAgICAgdmFsdWU6IHJlY29yZGVyVmFsdWUsXG4gICAgICAgIG9wZXJhdGlvbjogJ3VwZGF0ZScsXG4gICAgICAgIHJlZGFjdGVkOiBpc1JlZGFjdGVkIHx8IGZpZWxkU2V0ICE9PSB1bmRlZmluZWQgfHwgdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGRlbGV0ZVZhbHVlKGtleTogc3RyaW5nLCBkZXNjcmlwdGlvbj86IHN0cmluZykge1xuICAgIGFzc2VydE5vdFJlYWRvbmx5KHRoaXMuX3JlYWRPbmx5VmFsdWVzLCBrZXksICdkZWxldGUnKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3N0YWdlQ29udGV4dC5zZXRPYmplY3QoW10sIGtleSwgdW5kZWZpbmVkLCBmYWxzZSwgZGVzY3JpcHRpb24gPz8gYGRlbGV0ZWQgJHtrZXl9YCwgJ2RlbGV0ZScpO1xuXG4gICAgLy8gRGVsZXRpbmcgYSByZWRhY3RlZCBrZXkgY2xlYXJzIGl0cyByZWRhY3Rpb24gc3RhdHVzXG4gICAgdGhpcy5fcmVkYWN0ZWRLZXlzLmRlbGV0ZShrZXkpO1xuXG4gICAgaWYgKHRoaXMuX3JlY29yZGVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9pbnZva2VIb29rKCdvbldyaXRlJywge1xuICAgICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIG9wZXJhdGlvbjogJ2RlbGV0ZScsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBzZXRHbG9iYWwoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBkZXNjcmlwdGlvbj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9zdGFnZUNvbnRleHQuc2V0R2xvYmFsPy4oa2V5LCB2YWx1ZSwgZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBnZXRHbG9iYWwoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhZ2VDb250ZXh0LmdldEdsb2JhbD8uKGtleSk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHNldE9iamVjdEluUm9vdChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhZ2VDb250ZXh0LnNldFJvb3Q/LihrZXksIHZhbHVlKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBSZWFkLW9ubHkgKyBtaXNjIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSByZWFkb25seSBpbnB1dCB2YWx1ZXMgcGFzc2VkIHRvIHRoaXMgcGlwZWxpbmUsIGNhc3QgdG8gYFRgLlxuICAgKiBUaGUgcmV0dXJuZWQgb2JqZWN0IGlzIGRlZXBseSBmcm96ZW4g4oCUIGFueSBhdHRlbXB0IHRvIG11dGF0ZSBpdCB0aHJvd3MuXG4gICAqIENhY2hlZCBhdCBjb25zdHJ1Y3Rpb24gdGltZSBmb3IgemVyby1hbGxvY2F0aW9uIHJlcGVhdGVkIGFjY2Vzcy5cbiAgICpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB7IGFwcGxpY2FudE5hbWUsIGluY29tZSB9ID0gc2NvcGUuZ2V0QXJnczx7IGFwcGxpY2FudE5hbWU6IHN0cmluZzsgaW5jb21lOiBudW1iZXIgfT4oKTtcbiAgICogYGBgXG4gICAqL1xuICBnZXRBcmdzPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX2Zyb3plbkFyZ3MgYXMgVDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSBpbmZyYXN0cnVjdHVyZSB2YWx1ZXNcbiAgICogdGhhdCBwcm9wYWdhdGUgdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzIChsaWtlIGBwcm9jZXNzLmVudmAgZm9yIGZsb3djaGFydHMpLlxuICAgKlxuICAgKiBDb250YWluczogc2lnbmFsIChhYm9ydCksIHRpbWVvdXRNcywgdHJhY2VJZC5cbiAgICogRnJvemVuIGF0IGNvbnN0cnVjdGlvbiB0aW1lLiBJbmhlcml0ZWQgYnkgc3ViZmxvd3MgYXV0b21hdGljYWxseS5cbiAgICpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB7IHNpZ25hbCwgdHJhY2VJZCB9ID0gc2NvcGUuZ2V0RW52KCk7XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0RW52KCk6IFJlYWRvbmx5PEV4ZWN1dGlvbkVudj4ge1xuICAgIHJldHVybiB0aGlzLl9leGVjdXRpb25FbnY7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIGdldFBpcGVsaW5lSWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBJbnRlcm5hbCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogQ2hlY2tzIGlmIGEga2V5IGlzIHJlZGFjdGVkIChleHBsaWNpdCBfcmVkYWN0ZWRLZXlzIHNldCkuICovXG4gIHByaXZhdGUgX2lzS2V5UmVkYWN0ZWQoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVkYWN0ZWRLZXlzLmhhcyhrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIGtleSBzaG91bGQgYmUgYXV0by1yZWRhY3RlZCBieSB0aGUgcG9saWN5IChleGFjdCBrZXlzICsgcGF0dGVybnMpLlxuICAgKlxuICAgKiBSZURvUyBndWFyZDogcGF0dGVybiB0ZXN0aW5nIGlzIGNhcHBlZCBhdCBNQVhfUEFUVEVSTl9LRVlfTEVOIGNoYXJhY3RlcnMuXG4gICAqIFNjb3BlIHN0YXRlIGtleXMgYXJlIGFsd2F5cyBzaG9ydCBpZGVudGlmaWVyczsgYW55IGtleSBleGNlZWRpbmcgdGhlIGNhcFxuICAgKiBpcyBhbG1vc3QgY2VydGFpbmx5IG5vdCBhIGxlZ2l0aW1hdGUgc2NvcGUga2V5LCBzbyBza2lwcGluZyBwYXR0ZXJuIG1hdGNoaW5nXG4gICAqIGZvciBpdCBkb2VzIG5vdCByaXNrIGxlYWtpbmcgUElJLiBFeGFjdC1rZXkgbWF0Y2hpbmcgKEFycmF5LmluY2x1ZGVzKSBpc1xuICAgKiBzdGlsbCBhcHBsaWVkIHJlZ2FyZGxlc3Mgb2YgbGVuZ3RoIGFuZCBpcyBub3QgdnVsbmVyYWJsZSB0byBSZURvUy5cbiAgICovXG4gIHByaXZhdGUgX2lzUG9saWN5UmVkYWN0ZWQoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuX3JlZGFjdGlvblBvbGljeSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0aGlzLl9yZWRhY3Rpb25Qb2xpY3kua2V5cz8uaW5jbHVkZXMoa2V5KSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMuX3JlZGFjdGlvblBvbGljeS5wYXR0ZXJucykge1xuICAgICAgaWYgKGtleS5sZW5ndGggPiBTY29wZUZhY2FkZS5fTUFYX1BBVFRFUk5fS0VZX0xFTikge1xuICAgICAgICAvLyBEZXYtbW9kZSB3YXJuaW5nOiBwYXR0ZXJuIG1hdGNoaW5nIHdhcyBzaWxlbnRseSBza2lwcGVkIGZvciB0aGlzIGtleS5cbiAgICAgICAgLy8gVXNlIHBvbGljeS5rZXlzIGZvciBleGFjdCBtYXRjaGluZyBvZiBsb25nIGtleSBuYW1lcy5cbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgW2Zvb3RwcmludF0gUmVkYWN0aW9uUG9saWN5OiBrZXkgJyR7a2V5LnNsaWNlKDAsIDQwKX0uLi4nICgke2tleS5sZW5ndGh9IGNoYXJzKSBleGNlZWRzIGAgK1xuICAgICAgICAgICAgICAndGhlIHBhdHRlcm4tbWF0Y2hpbmcgbGVuZ3RoIGNhcCBhbmQgd2FzIHNraXBwZWQuICcgK1xuICAgICAgICAgICAgICAnVXNlIHBvbGljeS5rZXlzIGZvciBleGFjdCBtYXRjaGluZyBvZiBsb25nIGtleSBuYW1lcy4nLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLl9yZWRhY3Rpb25Qb2xpY3kucGF0dGVybnMpIHtcbiAgICAgICAgICBwLmxhc3RJbmRleCA9IDA7IC8vIFJlc2V0IHN0YXRlZnVsIGdsb2JhbC9zdGlja3kgcmVnZXhlc1xuICAgICAgICAgIGlmIChwLnRlc3Qoa2V5KSkgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1heGltdW0ga2V5IGxlbmd0aCAoY2hhcmFjdGVycykgdGhhdCB3aWxsIGJlIHRlc3RlZCBhZ2FpbnN0IHJlZ2V4IHJlZGFjdGlvblxuICAgKiBwYXR0ZXJucy4gS2V5cyBsb25nZXIgdGhhbiB0aGlzIGFyZSBza2lwcGVkIGZvciBwYXR0ZXJuIG1hdGNoaW5nIHRvIHByZXZlbnRcbiAgICogUmVEb1M6IGEgcGF0aG9sb2dpY2FsIHJlZ2V4IHRlc3RlZCBhZ2FpbnN0IGFuIHVuYm91bmRlZGx5IGxvbmcga2V5IHN0cmluZ1xuICAgKiBjYW4gY2F1c2UgY2F0YXN0cm9waGljIGJhY2t0cmFja2luZy5cbiAgICpcbiAgICogMjU2IGNoYXJhY3RlcnMgY29tZm9ydGFibHkgZXhjZWVkcyBhbnkgcmVhbGlzdGljIHNjb3BlLXN0YXRlIGtleSBuYW1lLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX01BWF9QQVRURVJOX0tFWV9MRU4gPSAyNTY7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBkZWVwLWNsb25lZCBjb3B5IHdpdGggc3BlY2lmaWVkIGZpZWxkcyByZXBsYWNlZCBieSAnW1JFREFDVEVEXScuXG4gICAqIFN1cHBvcnRzIGRvdC1ub3RhdGlvbiBwYXRocyAoZS5nLiAnYWRkcmVzcy56aXAnKSBmb3IgbmVzdGVkIG9iamVjdHMuXG4gICAqL1xuICBwcml2YXRlIF9zY3J1YkZpZWxkcyhvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBmaWVsZHM6IFNldDxzdHJpbmc+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IGNvcHkgPSBzdHJ1Y3R1cmVkQ2xvbmUob2JqKTtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmluY2x1ZGVzKCcuJykgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb3B5LCBmaWVsZCkpIHtcbiAgICAgICAgLy8gRG90LW5vdGF0aW9uIHBhdGgg4oaSIGRlZXAgc2NydWIgKG9ubHkgaWYgbm90IGEgbGl0ZXJhbCBmbGF0IGtleSlcbiAgICAgICAgaWYgKGxvZGFzaEhhcyhjb3B5LCBmaWVsZCkpIHtcbiAgICAgICAgICBsb2Rhc2hTZXQoY29weSwgZmllbGQsICdbUkVEQUNURURdJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29weSwgZmllbGQpKSB7XG4gICAgICAgICAgY29weVtmaWVsZF0gPSAnW1JFREFDVEVEXSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHk7XG4gIH1cblxuICBwcml2YXRlIF9pbnZva2VIb29rKGhvb2s6IGtleW9mIE9taXQ8UmVjb3JkZXIsICdpZCc+LCBldmVudDogdW5rbm93bik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgcmVjb3JkZXIgb2YgdGhpcy5fcmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBob29rRm4gPSByZWNvcmRlcltob29rXTtcbiAgICAgICAgaWYgKHR5cGVvZiBob29rRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAoaG9va0ZuIGFzIChldmVudDogdW5rbm93bikgPT4gdm9pZCkuY2FsbChyZWNvcmRlciwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoaG9vayAhPT0gJ29uRXJyb3InKSB7XG4gICAgICAgICAgdGhpcy5faW52b2tlSG9vaygnb25FcnJvcicsIHtcbiAgICAgICAgICAgIHN0YWdlTmFtZTogdGhpcy5fc3RhZ2VOYW1lLFxuICAgICAgICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICAgICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICAgICAgcGlwZWxpbmVJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bklkLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yIGFzIEVycm9yLFxuICAgICAgICAgICAgb3BlcmF0aW9uOiBob29rID09PSAnb25SZWFkJyA/ICdyZWFkJyA6IGhvb2sgPT09ICdvbkNvbW1pdCcgPyAnY29tbWl0JyA6ICd3cml0ZScsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
617
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2NvcGVGYWNhZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3Njb3BlL1Njb3BlRmFjYWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBR0gsT0FBTyxFQUFFLFNBQVMsSUFBSSxTQUFTLEVBQUUsU0FBUyxJQUFJLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdwRixNQUFNLE9BQU8sV0FBVztJQXlCdEIsWUFBWSxPQUFxQixFQUFFLFNBQWlCLEVBQUUsY0FBd0IsRUFBRSxZQUEyQjtRQUxuRyxlQUFVLEdBQWUsRUFBRSxDQUFDO1FBRzVCLHlCQUFvQixHQUE2QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBR2pFLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDO1FBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzVCLElBQUksQ0FBQyxlQUFlLEdBQUcsY0FBYyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUV2Qyw4RkFBOEY7UUFDOUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ2pELElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFD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VTt3QkFDMUIsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTzt3QkFDbkMsY0FBYyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYzt3QkFDakQsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSzt3QkFDcEMsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7d0JBQ3JCLEtBQUssRUFBRSxLQUFjO3dCQUNyQixTQUFTLEVBQUUsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU87cUJBQ2pGLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDOztBQXhwQnNCLGlCQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxBQUEvQixDQUFnQztBQUU1RDs7OztHQUlHO0FBQ3FCLCtCQUFtQixHQUFzQixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxBQUF2QyxDQUF3QztBQTZsQm5GOzs7Ozs7O0dBT0c7QUFDcUIsZ0NBQW9CLEdBQUcsR0FBRyxBQUFOLENBQU8iLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNjb3BlRmFjYWRlIOKAlCBCYXNlIGNsYXNzIHRoYXQgbGlicmFyeSBjb25zdW1lcnMgZXh0ZW5kIHRvIGNyZWF0ZSBjdXN0b20gc2NvcGUgY2xhc3Nlc1xuICpcbiAqIFdyYXBzIFN0YWdlQ29udGV4dCAoZnJvbSBtZW1vcnkvKSB0byBwcm92aWRlIGEgY29uc3VtZXItZnJpZW5kbHkgQVBJIGZvclxuICogc3RhdGUgYWNjZXNzLCBkZWJ1ZyBsb2dnaW5nLCBtZXRyaWNzLCBhbmQgcmVjb3JkZXIgaG9va3MuXG4gKlxuICogQ29uc3VtZXJzIGV4dGVuZCB0aGlzIGNsYXNzIHRvIGFkZCBkb21haW4tc3BlY2lmaWMgcHJvcGVydGllczpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjbGFzcyBNeVNjb3BlIGV4dGVuZHMgU2NvcGVGYWNhZGUge1xuICogICBnZXQgdXNlck5hbWUoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoJ25hbWUnKSBhcyBzdHJpbmc7IH1cbiAqICAgc2V0IHVzZXJOYW1lKHZhbHVlOiBzdHJpbmcpIHsgdGhpcy5zZXRWYWx1ZSgnbmFtZScsIHZhbHVlKTsgfVxuICogfVxuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBFeGVjdXRpb25FbnYgfSBmcm9tICcuLi9lbmdpbmUvdHlwZXMuanMnO1xuaW1wb3J0IHsgbmF0aXZlSGFzIGFzIGxvZGFzaEhhcywgbmF0aXZlU2V0IGFzIGxvZGFzaFNldCB9IGZyb20gJy4uL21lbW9yeS9wYXRoT3BzLmpzJztcbmltcG9ydCB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4uL21lbW9yeS9TdGFnZUNvbnRleHQuanMnO1xuaW1wb3J0IHsgaGFzQ2lyY3VsYXJSZWZlcmVuY2UsIGlzRGV2TW9kZSB9IGZyb20gJy4vZGV0ZWN0Q2lyY3VsYXIuanMnO1xuaW1wb3J0IHsgYXNzZXJ0Tm90UmVhZG9ubHksIGNyZWF0ZUZyb3plbkFyZ3MgfSBmcm9tICcuL3Byb3RlY3Rpb24vcmVhZG9ubHlJbnB1dC5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEV2ZW50LCBSZWNvcmRlciwgUmVkYWN0aW9uUG9saWN5LCBSZWRhY3Rpb25SZXBvcnQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGNsYXNzIFNjb3BlRmFjYWRlIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBCUkFORCA9IFN5bWJvbC5mb3IoJ1Njb3BlRmFjYWRlQHYxJyk7XG5cbiAgLyoqXG4gICAqIFNoYXJlZCBzZW50aW5lbCByZXR1cm5lZCBieSBgX2dldFN1YmZsb3dQYXRoKClgIGZvciByb290LWxldmVsIHN0YWdlc1xuICAgKiAobm8gc3ViZmxvdyBuZXN0aW5nKS4gQXZvaWRzIHBlci1jYWxsIGFsbG9jYXRpb24gb2YgYSBmcmVzaFxuICAgKiBgT2JqZWN0LmZyZWV6ZShbXSlgIG9uIGV2ZXJ5IGBlbWl0RXZlbnRgIGluIHRoZSBjb21tb24gbm8tc3ViZmxvdyBjYXNlLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX0VNUFRZX1NVQkZMT1dfUEFUSDogcmVhZG9ubHkgc3RyaW5nW10gPSBPYmplY3QuZnJlZXplKFtdKTtcblxuICBwcm90ZWN0ZWQgX3N0YWdlQ29udGV4dDogU3RhZ2VDb250ZXh0O1xuICBwcm90ZWN0ZWQgX3N0YWdlTmFtZTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3JlYWRPbmx5VmFsdWVzPzogdW5rbm93bjtcblxuICAvKiogQ2FjaGVkIGRlZXBseS1mcm96ZW4gY29weSBvZiByZWFkT25seVZhbHVlcyBmb3IgZ2V0QXJncygpLiBDcmVhdGVkIG9uY2UuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Zyb3plbkFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKiBFeGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSwgaW5oZXJpdGVkIGZyb20gcGFyZW50IGV4ZWN1dG9yLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9leGVjdXRpb25FbnY6IFJlYWRvbmx5PEV4ZWN1dGlvbkVudj47XG5cbiAgcHJpdmF0ZSBfcmVjb3JkZXJzOiBSZWNvcmRlcltdID0gW107XG4gIHByaXZhdGUgX3JlZGFjdGVkS2V5czogU2V0PHN0cmluZz47XG4gIHByaXZhdGUgX3JlZGFjdGlvblBvbGljeTogUmVkYWN0aW9uUG9saWN5IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIF9yZWRhY3RlZEZpZWxkc0J5S2V5OiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4gPSBuZXcgTWFwKCk7XG5cbiAgY29uc3RydWN0b3IoY29udGV4dDogU3RhZ2VDb250ZXh0LCBzdGFnZU5hbWU6IHN0cmluZywgcmVhZE9ubHlWYWx1ZXM/OiB1bmtub3duLCBleGVjdXRpb25FbnY/OiBFeGVjdXRpb25FbnYpIHtcbiAgICB0aGlzLl9zdGFnZUNvbnRleHQgPSBjb250ZXh0O1xuICAgIHRoaXMuX3N0YWdlTmFtZSA9IHN0YWdlTmFtZTtcbiAgICB0aGlzLl9yZWFkT25seVZhbHVlcyA9IHJlYWRPbmx5VmFsdWVzO1xuICAgIHRoaXMuX2Zyb3plbkFyZ3MgPSBjcmVhdGVGcm96ZW5BcmdzKHJlYWRPbmx5VmFsdWVzKTtcbiAgICB0aGlzLl9leGVjdXRpb25FbnYgPSBPYmplY3QuZnJlZXplKHsgLi4uZXhlY3V0aW9uRW52IH0pO1xuICAgIHRoaXMuX3JlZGFjdGVkS2V5cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgLy8gUmVnaXN0ZXIgYXMgY29tbWl0IG9ic2VydmVyIHNvIFJlY29yZGVyLm9uQ29tbWl0IGZpcmVzIHdoZW4gU3RhZ2VDb250ZXh0LmNvbW1pdCgpIGlzIGNhbGxlZFxuICAgIHRoaXMuX3N0YWdlQ29udGV4dC5zZXRDb21taXRPYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XG4gICAgICB0aGlzLl9vbkNvbW1pdEZpcmVkKG11dGF0aW9ucyk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2hhcmUgYSByZWRhY3RlZC1rZXlzIHNldCBhY3Jvc3MgbXVsdGlwbGUgU2NvcGVGYWNhZGUgaW5zdGFuY2VzLlxuICAgKiBDYWxsIHRoaXMgdG8gbWFrZSByZWRhY3Rpb24gcGVyc2lzdCBhY3Jvc3Mgc3RhZ2VzIGluIHRoZSBzYW1lIHBpcGVsaW5lLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHVzZVNoYXJlZFJlZGFjdGVkS2V5cyhzaGFyZWRTZXQ6IFNldDxzdHJpbmc+KTogdm9pZCB7XG4gICAgdGhpcy5fcmVkYWN0ZWRLZXlzID0gc2hhcmVkU2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgcmVkYWN0ZWQta2V5cyBzZXQgKGZvciBzaGFyaW5nIHdpdGggb3RoZXIgc2NvcGVzKS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBnZXRSZWRhY3RlZEtleXMoKTogU2V0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9yZWRhY3RlZEtleXM7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgYSBkZWNsYXJhdGl2ZSByZWRhY3Rpb24gcG9saWN5LiBUaGUgcG9saWN5IGlzIGFkZGl0aXZlIOKAlFxuICAgKiBpdCB3b3JrcyBhbG9uZ3NpZGUgbWFudWFsIGBzZXRWYWx1ZSguLi4sIHRydWUpYCBjYWxscy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICB1c2VSZWRhY3Rpb25Qb2xpY3kocG9saWN5OiBSZWRhY3Rpb25Qb2xpY3kpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWRhY3Rpb25Qb2xpY3kgPSBwb2xpY3k7XG4gICAgLy8gUHJlLXBvcHVsYXRlIGZpZWxkLWxldmVsIHJlZGFjdGlvbiBtYXAgZnJvbSBwb2xpY3lcbiAgICBpZiAocG9saWN5LmZpZWxkcykge1xuICAgICAgZm9yIChjb25zdCBba2V5LCBmaWVsZHNdIG9mIE9iamVjdC5lbnRyaWVzKHBvbGljeS5maWVsZHMpKSB7XG4gICAgICAgIHRoaXMuX3JlZGFjdGVkRmllbGRzQnlLZXkuc2V0KGtleSwgbmV3IFNldChmaWVsZHMpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIGdldFJlZGFjdGlvblBvbGljeSgpOiBSZWRhY3Rpb25Qb2xpY3kgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9yZWRhY3Rpb25Qb2xpY3k7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGNvbXBsaWFuY2UtZnJpZW5kbHkgcmVwb3J0IG9mIGFsbCByZWRhY3Rpb24gYWN0aXZpdHkuXG4gICAqIE5ldmVyIGluY2x1ZGVzIGFjdHVhbCB2YWx1ZXMg4oCUIG9ubHkga2V5IG5hbWVzLCBmaWVsZCBuYW1lcywgYW5kIHBhdHRlcm5zLlxuICAgKi9cbiAgZ2V0UmVkYWN0aW9uUmVwb3J0KCk6IFJlZGFjdGlvblJlcG9ydCB7XG4gICAgY29uc3QgZmllbGRSZWRhY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIGZpZWxkc10gb2YgdGhpcy5fcmVkYWN0ZWRGaWVsZHNCeUtleSkge1xuICAgICAgZmllbGRSZWRhY3Rpb25zW2tleV0gPSBbLi4uZmllbGRzXTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlZGFjdGVkS2V5czogWy4uLnRoaXMuX3JlZGFjdGVkS2V5c10sXG4gICAgICBmaWVsZFJlZGFjdGlvbnMsXG4gICAgICBwYXR0ZXJuczogKHRoaXMuX3JlZGFjdGlvblBvbGljeT8ucGF0dGVybnMgPz8gW10pLm1hcCgocCkgPT4gcC5zb3VyY2UpLFxuICAgIH07XG4gIH1cblxuICAvLyDilIDilIAgUmVjb3JkZXIgTWFuYWdlbWVudCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBhdHRhY2hSZWNvcmRlcihyZWNvcmRlcjogUmVjb3JkZXIpOiB2b2lkIHtcbiAgICAvLyBSZXBsYWNlIGV4aXN0aW5nIHJlY29yZGVyIHdpdGggc2FtZSBJRCAoaWRlbXBvdGVudCDigJQgcHJldmVudHMgZG91YmxlLWNvdW50aW5nKVxuICAgIHRoaXMuX3JlY29yZGVycyA9IHRoaXMuX3JlY29yZGVycy5maWx0ZXIoKHIpID0+IHIuaWQgIT09IHJlY29yZGVyLmlkKTtcbiAgICB0aGlzLl9yZWNvcmRlcnMucHVzaChyZWNvcmRlcik7XG4gIH1cblxuICBkZXRhY2hSZWNvcmRlcihyZWNvcmRlcklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWNvcmRlcnMgPSB0aGlzLl9yZWNvcmRlcnMuZmlsdGVyKChyKSA9PiByLmlkICE9PSByZWNvcmRlcklkKTtcbiAgfVxuXG4gIGdldFJlY29yZGVycygpOiBSZWNvcmRlcltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3JlY29yZGVyc107XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIG5vdGlmeVN0YWdlU3RhcnQoKTogdm9pZCB7XG4gICAgdGhpcy5faW52b2tlSG9vaygnb25TdGFnZVN0YXJ0Jywge1xuICAgICAgc3RhZ2VOYW1lOiB0aGlzLl9zdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQuc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICBwaXBlbGluZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVuSWQsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgfSk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIG5vdGlmeVN0YWdlRW5kKGR1cmF0aW9uPzogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5faW52b2tlSG9vaygnb25TdGFnZUVuZCcsIHtcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5fc3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgcGlwZWxpbmVJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bklkLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgZHVyYXRpb24sXG4gICAgfSk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIG5vdGlmeVBhdXNlKHBhdXNlRGF0YT86IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLl9pbnZva2VIb29rKCdvblBhdXNlJywge1xuICAgICAgc3RhZ2VOYW1lOiB0aGlzLl9zdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQuc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICBwaXBlbGluZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVuSWQsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBwYXVzZURhdGEsXG4gICAgfSk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIG5vdGlmeVJlc3VtZShoYXNJbnB1dDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2ludm9rZUhvb2soJ29uUmVzdW1lJywge1xuICAgICAgc3RhZ2VOYW1lOiB0aGlzLl9zdGFnZU5hbWUsXG4gICAgICBzdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQuc3RhZ2VJZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICBwaXBlbGluZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVuSWQsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBoYXNJbnB1dCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgbm90aWZ5Q29tbWl0KG11dGF0aW9uczogQ29tbWl0RXZlbnRbJ211dGF0aW9ucyddKTogdm9pZCB7XG4gICAgdGhpcy5faW52b2tlSG9vaygnb25Db21taXQnLCB7XG4gICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgIHN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5zdGFnZUlkLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIG11dGF0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBDYWxsZWQgYnkgU3RhZ2VDb250ZXh0LmNvbW1pdCgpIG9ic2VydmVyLiBDb252ZXJ0cyB0cmFja2VkIHdyaXRlcyB0byBDb21taXRFdmVudCBmb3JtYXQuXG4gICAqICBFcnJvcnMgYXJlIGNhdWdodCB0byBwcmV2ZW50IHJlY29yZGVyIGlzc3VlcyBmcm9tIGFib3J0aW5nIHRoZSB0cmF2ZXJzYWwuICovXG4gIHByaXZhdGUgX29uQ29tbWl0RmlyZWQobXV0YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiB1bmtub3duOyBvcGVyYXRpb246ICdzZXQnIHwgJ3VwZGF0ZScgfCAnZGVsZXRlJyB9Pik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgY29tbWl0TXV0YXRpb25zOiBDb21taXRFdmVudFsnbXV0YXRpb25zJ10gPSBPYmplY3QuZW50cmllcyhtdXRhdGlvbnMpLm1hcCgoW2tleSwgZW50cnldKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzUmVkYWN0ZWQgPSB0aGlzLl9pc0tleVJlZGFjdGVkKGtleSkgfHwgdGhpcy5faXNQb2xpY3lSZWRhY3RlZChrZXkpO1xuICAgICAgICBjb25zdCBmaWVsZFNldCA9IHRoaXMuX3JlZGFjdGVkRmllbGRzQnlLZXkuZ2V0KGtleSk7XG5cbiAgICAgICAgbGV0IHJlY29yZGVyVmFsdWU6IHVua25vd247XG4gICAgICAgIGlmIChpc1JlZGFjdGVkKSB7XG4gICAgICAgICAgcmVjb3JkZXJWYWx1ZSA9ICdbUkVEQUNURURdJztcbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZFNldCAmJiBlbnRyeS52YWx1ZSAmJiB0eXBlb2YgZW50cnkudmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgcmVjb3JkZXJWYWx1ZSA9IHRoaXMuX3NjcnViRmllbGRzKGVudHJ5LnZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBmaWVsZFNldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVjb3JkZXJWYWx1ZSA9IGVudHJ5LnZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAgdmFsdWU6IHJlY29yZGVyVmFsdWUsXG4gICAgICAgICAgb3BlcmF0aW9uOiBlbnRyeS5vcGVyYXRpb24sXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ub3RpZnlDb21taXQoY29tbWl0TXV0YXRpb25zKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFN3YWxsb3cg4oCUIHJlY29yZGVyIGVycm9ycyBtdXN0IG5vdCBhYm9ydCB0aGUgdHJhdmVyc2FsLlxuICAgICAgLy8gSW5kaXZpZHVhbCByZWNvcmRlciBlcnJvcnMgYXJlIGFscmVhZHkgaXNvbGF0ZWQgYnkgX2ludm9rZUhvb2suXG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIERlYnVnIC8gRGlhZ25vc3RpY3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIC8vXG4gIC8vIFRoZXNlIGxlZ2FjeSBtZXRob2RzIHN0aWxsIHdyaXRlIHRvIHRoZSBgU3RhZ2VDb250ZXh0YCBkaWFnbm9zdGljXG4gIC8vIHNpZGUgYmFncyAobG9nQ29udGV4dCAvIGVycm9yQ29udGV4dCAvIG1ldHJpY0NvbnRleHQgLyBldmFsQ29udGV4dCkgZm9yXG4gIC8vIHNuYXBzaG90IGluY2x1c2lvbi4gVGhleSBBTFNPIGZpcmUgdGhyb3VnaCB0aGUgRW1pdCBjaGFubmVsIHNvIGFueVxuICAvLyBhdHRhY2hlZCBgRW1pdFJlY29yZGVyYCBzZWVzIHRoZW0gaW4gcmVhbCB0aW1lIOKAlCBjbG9zaW5nIHRoZVxuICAvLyBsb25nLXN0YW5kaW5nIGdhcCB3aGVyZSBgJGRlYnVnYC9gJG1ldHJpY2Agd2VudCB0byB1bm9ic2VydmVkIGJhZ3MuXG5cbiAgYWRkRGVidWdJbmZvKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMuX3N0YWdlQ29udGV4dC5hZGRMb2coa2V5LCB2YWx1ZSk7XG4gICAgdGhpcy5lbWl0RXZlbnQoYGxvZy5kZWJ1Zy4ke2tleX1gLCB7IGtleSwgdmFsdWUsIGxldmVsOiAnZGVidWcnIH0pO1xuICB9XG5cbiAgYWRkRGVidWdNZXNzYWdlKHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fc3RhZ2VDb250ZXh0LmFkZExvZygnbWVzc2FnZXMnLCBbdmFsdWVdKTtcbiAgICB0aGlzLmVtaXRFdmVudCgnbG9nLmRlYnVnLm1lc3NhZ2VzJywgeyB2YWx1ZSwgbGV2ZWw6ICdkZWJ1ZycgfSk7XG4gIH1cblxuICBhZGRFcnJvckluZm8oa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fc3RhZ2VDb250ZXh0LmFkZEVycm9yKGtleSwgdmFsdWUpO1xuICAgIHRoaXMuZW1pdEV2ZW50KGBsb2cuZXJyb3IuJHtrZXl9YCwgeyBrZXksIHZhbHVlLCBsZXZlbDogJ2Vycm9yJyB9KTtcbiAgfVxuXG4gIGFkZE1ldHJpYyhtZXRyaWNOYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSB7XG4gICAgdGhpcy5fc3RhZ2VDb250ZXh0LmFkZE1ldHJpYyhtZXRyaWNOYW1lLCB2YWx1ZSk7XG4gICAgdGhpcy5lbWl0RXZlbnQoYG1ldHJpYy4ke21ldHJpY05hbWV9YCwgeyBuYW1lOiBtZXRyaWNOYW1lLCB2YWx1ZSB9KTtcbiAgfVxuXG4gIGFkZEV2YWwobWV0cmljTmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMuX3N0YWdlQ29udGV4dC5hZGRFdmFsKG1ldHJpY05hbWUsIHZhbHVlKTtcbiAgICB0aGlzLmVtaXRFdmVudChgZXZhbC4ke21ldHJpY05hbWV9YCwgeyBuYW1lOiBtZXRyaWNOYW1lLCB2YWx1ZSB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBFbWl0IOKAlCBQaGFzZSAzIHByaW1hcnkgcHJpbWl0aXZlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBGaXJlIGEgc3RydWN0dXJlZCBldmVudCB0byBldmVyeSBhdHRhY2hlZCByZWNvcmRlciBpbXBsZW1lbnRpbmdcbiAgICogYG9uRW1pdGAuIFN5bmNocm9ub3VzLCBpbi1vcmRlciwgcGFzcy10aHJvdWdoIOKAlCBubyBidWZmZXJpbmcuXG4gICAqXG4gICAqIC0gKipGYXN0LXBhdGgqKjogemVybyBhbGxvY2F0aW9uICsgemVybyBjb3N0IHdoZW4gbm8gcmVjb3JkZXJzIGFyZVxuICAgKiAgIGF0dGFjaGVkIChlYXJseSByZXR1cm4gb24gZW1wdHkgbGlzdCkuXG4gICAqIC0gKipFbnJpY2htZW50Kio6IGxpYnJhcnkgYXV0by1hZGRzIGBzdGFnZU5hbWVgLCBgcnVudGltZVN0YWdlSWRgLFxuICAgKiAgIGBzdWJmbG93UGF0aGAsIGBwaXBlbGluZUlkYCwgYHRpbWVzdGFtcGAgdG8gdGhlIGV2ZW50LlxuICAgKiAtICoqUmVkYWN0aW9uKio6IGBSZWRhY3Rpb25Qb2xpY3kuZW1pdFBhdHRlcm5zYCByZWdleGVzIGFyZSBtYXRjaGVkXG4gICAqICAgYWdhaW5zdCBgbmFtZWAg4oCUIG1hdGNoZWQgZXZlbnRzIGhhdmUgdGhlaXIgcGF5bG9hZCByZXBsYWNlZCB3aXRoXG4gICAqICAgYCdbUkVEQUNURURdJ2AgYmVmb3JlIGRpc3BhdGNoLlxuICAgKiAtICoqRXJyb3IgaXNvbGF0aW9uKio6IGEgdGhyb3dpbmcgYG9uRW1pdGAgZG9lcyBub3QgcHJvcGFnYXRlIOKAlCBpdCBpc1xuICAgKiAgIGNhdWdodCBhbmQgcm91dGVkIHRvIGBvbkVycm9yYCBvbiByZW1haW5pbmcgcmVjb3JkZXJzLCBtYXRjaGluZyB0aGVcbiAgICogICBwYXR0ZXJuIHVzZWQgYnkgb3RoZXIgc2NvcGUgZXZlbnRzLlxuICAgKlxuICAgKiBDb25zdW1lcnMgY2FsbCB0aGlzIHZpYSB0aGUgYHNjb3BlLiRlbWl0KG5hbWUsIHBheWxvYWQpYCBzY29wZSBtZXRob2Q7XG4gICAqIHRoZSBtZXRob2Qgcm91dGVzIGhlcmUgdmlhIGBjcmVhdGVUeXBlZFNjb3BlYC5cbiAgICovXG4gIGVtaXRFdmVudChuYW1lOiBzdHJpbmcsIHBheWxvYWQ6IHVua25vd24pOiB2b2lkIHtcbiAgICAvLyBGYXN0LXBhdGg6IHplcm8gd29yayB3aGVuIG5vIHJlY29yZGVycyBhcmUgYXR0YWNoZWQuXG4gICAgaWYgKHRoaXMuX3JlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcblxuICAgIC8vIFJlZGFjdGlvbjogaWYgdGhlIGV2ZW50IG5hbWUgbWF0Y2hlcyBhbnkgZW1pdFBhdHRlcm4sIHJlcGxhY2UgcGF5bG9hZFxuICAgIC8vIHdpdGggJ1tSRURBQ1RFRF0nIEJFRk9SRSBjb25zdHJ1Y3RpbmcgdGhlIGV2ZW50IChubyBsZWFrIHRocm91Z2hcbiAgICAvLyBjb3B5LW9uLXdyaXRlLCBubyB3YXkgZm9yIHJlY29yZGVycyB0byBzZWUgdGhlIHJhdyB2YWx1ZSkuXG4gICAgbGV0IGZpbmFsUGF5bG9hZDogdW5rbm93biA9IHBheWxvYWQ7XG4gICAgY29uc3QgcGF0dGVybnMgPSB0aGlzLl9yZWRhY3Rpb25Qb2xpY3k/LmVtaXRQYXR0ZXJucztcbiAgICBpZiAocGF0dGVybnMgJiYgcGF0dGVybnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7XG4gICAgICAgIGlmIChwYXR0ZXJuLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICBmaW5hbFBheWxvYWQgPSAnW1JFREFDVEVEXSc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBCdWlsZCB0aGUgZW5yaWNoZWQgZXZlbnQgb25jZTsgcGFzcyB0aGUgc2FtZSByZWZlcmVuY2UgdG8gYWxsXG4gICAgLy8gcmVjb3JkZXJzLiBTaW5jZSBFbWl0RXZlbnQgaXMgYHJlYWRvbmx5YCwgc2hhcmluZyBpcyBzYWZlLlxuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgbmFtZSxcbiAgICAgIHBheWxvYWQ6IGZpbmFsUGF5bG9hZCxcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5fc3RhZ2VOYW1lLFxuICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dQYXRoOiB0aGlzLl9nZXRTdWJmbG93UGF0aCgpLFxuICAgICAgcGlwZWxpbmVJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bklkLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgIH0gYXMgY29uc3Q7XG5cbiAgICAvLyBEaXNwYXRjaCB3aXRoIGVycm9yIGlzb2xhdGlvbiDigJQgc2FtZSBwYXR0ZXJuIGFzIF9pbnZva2VIb29rIHVzZXMgZm9yXG4gICAgLy8gb3RoZXIgc2NvcGUgZXZlbnRzLiBBIHRocm93aW5nIHJlY29yZGVyJ3MgZXJyb3IgaXMgc3VyZmFjZWQgdmlhXG4gICAgLy8gb25FcnJvciBvbiB0aGUgb3RoZXIgcmVjb3JkZXJzOyB0aGUgZW1pdCBsb29wIGNvbnRpbnVlcyB1bmFmZmVjdGVkLlxuICAgIGZvciAoY29uc3QgcmVjb3JkZXIgb2YgdGhpcy5fcmVjb3JkZXJzKSB7XG4gICAgICBjb25zdCBvbkVtaXQgPSByZWNvcmRlci5vbkVtaXQ7XG4gICAgICBpZiAodHlwZW9mIG9uRW1pdCAhPT0gJ2Z1bmN0aW9uJykgY29udGludWU7XG4gICAgICB0cnkge1xuICAgICAgICBvbkVtaXQuY2FsbChyZWNvcmRlciwgZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5faW52b2tlSG9vaygnb25FcnJvcicsIHtcbiAgICAgICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgICAgICBzdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQuc3RhZ2VJZCxcbiAgICAgICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgICAgZXJyb3I6IGVycm9yIGFzIEVycm9yLFxuICAgICAgICAgIG9wZXJhdGlvbjogJ3dyaXRlJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBzdWJmbG93UGF0aCAob3V0ZXIg4oaSIGlubmVyKSBmb3IgZXZlbnQgZW5yaWNobWVudC5cbiAgICpcbiAgICogUGFyc2VzIGZyb20gYHJ1bnRpbWVTdGFnZUlkYCB3aGljaCBoYXMgdGhlIGZvcm1hdFxuICAgKiBgW3N1YmZsb3dQYXRoL11zdGFnZUlkI2V4ZWN1dGlvbkluZGV4YCAoc2VlIGBsaWIvZW5naW5lL3J1bnRpbWVTdGFnZUlkLnRzYCkuXG4gICAqIFN1YmZsb3cgaXNvbGF0aW9uIHByZXZlbnRzIHdhbGtpbmcgdGhlIHBhcmVudC1jaGFpbiBhY3Jvc3MgYm91bmRhcmllcyxcbiAgICogc28gdGhlIHJ1bnRpbWVTdGFnZUlkIOKAlCBnbG9iYWxseSB1bmlxdWUsIGluY2x1ZGVzIGZ1bGwgcGF0aCDigJQgaXMgdGhlXG4gICAqIGNhbm9uaWNhbCBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoZSBzdWJmbG93IGhpZXJhcmNoeSBhdCBlbWl0IHRpbWUuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKiAgICdzZWVkIzAnICAgICAgICAgICAgICAgICDihpIgW10gICAgICAgICAgICAgICAgICAgIChyb290KVxuICAgKiAgICdzZi1pbm5lci9pbm5lciM1JyAgICAgICDihpIgWydzZi1pbm5lciddXG4gICAqICAgJ3NmLWEvc2YtYi9zdGFnZSMzJyAgICAgIOKGkiBbJ3NmLWEnLCAnc2YtYiddICAgICAgKG5lc3RlZClcbiAgICovXG4gIHByaXZhdGUgX2dldFN1YmZsb3dQYXRoKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICBjb25zdCBydGlkID0gdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkO1xuICAgIGlmICghcnRpZCkgcmV0dXJuIFNjb3BlRmFjYWRlLl9FTVBUWV9TVUJGTE9XX1BBVEg7XG4gICAgLy8gU3RyaXAgdGhlIHRyYWlsaW5nIGAjZXhlY3V0aW9uSW5kZXhgIHRvIGlzb2xhdGUgdGhlIHBhdGggcG9ydGlvbi5cbiAgICBjb25zdCBoYXNoSWR4ID0gcnRpZC5sYXN0SW5kZXhPZignIycpO1xuICAgIGNvbnN0IHBhdGhQb3J0aW9uID0gaGFzaElkeCA+PSAwID8gcnRpZC5zbGljZSgwLCBoYXNoSWR4KSA6IHJ0aWQ7XG4gICAgLy8gcGF0aFBvcnRpb24gaXMgbm93IGBbc3ViZmxvd1BhdGgvXXN0YWdlSWRgLiBTcGxpdCBvbiAnLycgYW5kIGRyb3AgdGhlXG4gICAgLy8gbGFzdCBzZWdtZW50IChzdGFnZUlkKSDigJQgd2hhdCByZW1haW5zIGlzIHRoZSBzdWJmbG93IHBhdGguXG4gICAgY29uc3Qgc2VnbWVudHMgPSBwYXRoUG9ydGlvbi5zcGxpdCgnLycpO1xuICAgIGlmIChzZWdtZW50cy5sZW5ndGggPD0gMSkgcmV0dXJuIFNjb3BlRmFjYWRlLl9FTVBUWV9TVUJGTE9XX1BBVEg7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoc2VnbWVudHMuc2xpY2UoMCwgLTEpKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBOb24tVHJhY2tpbmcgU3RhdGUgSW5zcGVjdGlvbiAoZm9yIFR5cGVkU2NvcGUgcHJveHkgaW50ZXJuYWxzKSDilIDilIDilIDilIDilIDilIBcblxuICAvKiogUmV0dXJucyBhbGwgc3RhdGUga2V5cyB3aXRob3V0IGZpcmluZyBvblJlYWQuIFVzZWQgYnkgVHlwZWRTY29wZSBvd25LZXlzL2hhcyB0cmFwcy4gKi9cbiAgZ2V0U3RhdGVLZXlzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzbmFwc2hvdCA9IHRoaXMuX3N0YWdlQ29udGV4dC5nZXRWYWx1ZShbXSwgdW5kZWZpbmVkKTtcbiAgICBpZiAoIXNuYXBzaG90IHx8IHR5cGVvZiBzbmFwc2hvdCAhPT0gJ29iamVjdCcpIHJldHVybiBbXTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoc25hcHNob3QgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICB9XG5cbiAgLyoqIENoZWNrIGtleSBleGlzdGVuY2Ugd2l0aG91dCBmaXJpbmcgb25SZWFkLiBVc2VkIGJ5IFR5cGVkU2NvcGUgaGFzIHRyYXAuXG4gICAqICBDb250cmFjdDogcmV0dXJucyBmYWxzZSBmb3Iga2V5cyBuZXZlciBzZXQgT1Iga2V5cyBzZXQgdG8gdW5kZWZpbmVkLlxuICAgKiAgVGhpcyBtYXRjaGVzIGRlbGV0ZVZhbHVlKCkgc2VtYW50aWNzIChzZXRzIHRvIHVuZGVmaW5lZCA9IGRlbGV0ZWQpLiAqL1xuICBoYXNLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhZ2VDb250ZXh0LmdldFZhbHVlKFtdLCBrZXkpICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogUmVhZCBzdGF0ZSB3aXRob3V0IGZpcmluZyBvblJlYWQuIFVzZWQgYnkgYXJyYXkgcHJveHkgZ2V0Q3VycmVudCgpIHRvIGF2b2lkXG4gICAqICBwaGFudG9tIHJlYWRzIG9uIGludGVybmFsIGFycmF5IG9wZXJhdGlvbnMgKC5sZW5ndGgsIC5oYXMsIGl0ZXJhdGlvbiwgZXRjLikuXG4gICAqICBUaGUgaW5pdGlhbCBwcm9wZXJ0eSBhY2Nlc3MgZmlyZXMgb25lIHRyYWNrZWQgb25SZWFkIHZpYSBnZXRWYWx1ZSgpOyBzdWJzZXF1ZW50XG4gICAqICBpbnRlcm5hbCBhcnJheSBvcGVyYXRpb25zIHVzZSB0aGlzIG1ldGhvZCB0byBzdGF5IHNpbGVudC5cbiAgICogIE5PVEU6IExpa2UgZ2V0VmFsdWUoKSwgcmV0dXJucyB0aGUgcmF3IHZhbHVlIHRvIHRoZSBjYWxsZXIuIFJlZGFjdGlvbiBhcHBsaWVzXG4gICAqICBvbmx5IHRvIHJlY29yZGVyIGRpc3BhdGNoIOKAlCBpdCBkb2VzIG5vdCBmaWx0ZXIgdGhlIHJldHVybmVkIHZhbHVlLiBUaGlzIG1hdGNoZXNcbiAgICogIHRoZSBleGlzdGluZyBnZXRWYWx1ZSgpIGNvbnRyYWN0IHdoZXJlIHVzZXIgY29kZSBhbHdheXMgcmVjZWl2ZXMgcmF3IGRhdGEuICovXG4gIGdldFZhbHVlU2lsZW50KGtleT86IHN0cmluZyk6IHVua25vd24ge1xuICAgIHJldHVybiB0aGlzLl9zdGFnZUNvbnRleHQuZ2V0VmFsdWVEaXJlY3QoW10sIGtleSk7XG4gIH1cblxuICAvLyDilIDilIAgU3RhdGUgQWNjZXNzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGdldEluaXRpYWxWYWx1ZUZvcihrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9zdGFnZUNvbnRleHQuZ2V0R2xvYmFsPy4oa2V5KTtcbiAgfVxuXG4gIGdldFZhbHVlKGtleT86IHN0cmluZykge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fc3RhZ2VDb250ZXh0LmdldFZhbHVlKFtdLCBrZXkpO1xuXG4gICAgaWYgKHRoaXMuX3JlY29yZGVycy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBpc1JlZGFjdGVkID0ga2V5ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5faXNLZXlSZWRhY3RlZChrZXkpO1xuICAgICAgY29uc3QgZmllbGRTZXQgPSBrZXkgIT09IHVuZGVmaW5lZCA/IHRoaXMuX3JlZGFjdGVkRmllbGRzQnlLZXkuZ2V0KGtleSkgOiB1bmRlZmluZWQ7XG5cbiAgICAgIGxldCByZWNvcmRlclZhbHVlOiB1bmtub3duO1xuICAgICAgaWYgKGlzUmVkYWN0ZWQpIHtcbiAgICAgICAgcmVjb3JkZXJWYWx1ZSA9ICdbUkVEQUNURURdJztcbiAgICAgIH0gZWxzZSBpZiAoZmllbGRTZXQgJiYgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICByZWNvcmRlclZhbHVlID0gdGhpcy5fc2NydWJGaWVsZHModmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGZpZWxkU2V0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlY29yZGVyVmFsdWUgPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faW52b2tlSG9vaygnb25SZWFkJywge1xuICAgICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlOiByZWNvcmRlclZhbHVlLFxuICAgICAgICByZWRhY3RlZDogaXNSZWRhY3RlZCB8fCBmaWVsZFNldCAhPT0gdW5kZWZpbmVkIHx8IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHNldFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgc2hvdWxkUmVkYWN0PzogYm9vbGVhbiwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICBhc3NlcnROb3RSZWFkb25seSh0aGlzLl9yZWFkT25seVZhbHVlcywga2V5LCAnd3JpdGUnKTtcblxuICAgIC8vIERldi1tb2RlOiB3YXJuIGlmIHRoZSB2YWx1ZSBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2VzLlxuICAgIC8vIENoZWNrIEFGVEVSIGFzc2VydE5vdFJlYWRvbmx5IOKAlCBkb24ndCB3YXJuIGZvciB3cml0ZXMgdGhhdCB3aWxsIGJlIGJsb2NrZWQuXG4gICAgLy8gQ2lyY3VsYXIgdmFsdWVzIHdvcmsgKHRlcm1pbmFsIHByb3h5IGhhbmRsZXMgdGhlbSkgYnV0IGNhbiBwcm9kdWNlXG4gICAgLy8gc3VycHJpc2luZyBiZWhhdmlvciBpbiBuYXJyYXRpdmUsIEpTT04gc2VyaWFsaXphdGlvbiwgYW5kIHNuYXBzaG90cy5cbiAgICBpZiAoaXNEZXZNb2RlKCkgJiYgdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKGhhc0NpcmN1bGFyUmVmZXJlbmNlKHZhbHVlKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFtmb290cHJpbnRdIENpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiBzZXRWYWx1ZSgnJHtrZXl9JykuIGAgK1xuICAgICAgICAgICAgJ1dyaXRlcyBwYXN0IHRoZSBjeWNsZSBkZXB0aCB3aWxsIHVzZSB0ZXJtaW5hbCBwcm94eSB0cmFja2luZy4gJyArXG4gICAgICAgICAgICAnQ29uc2lkZXIgZmxhdHRlbmluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBdXRvLXJlZGFjdCBpZiBrZXkgbWF0Y2hlcyBwb2xpY3kgKGV4YWN0IGtleXMgb3IgcGF0dGVybnMpLCBvciBpZiB0aGUga2V5IHdhc1xuICAgIC8vIHByZXZpb3VzbHkgbWFya2VkIHJlZGFjdGVkIChlLmcuIGNhcnJpZWQgb3ZlciBmcm9tIGEgc3ViZmxvdyB2aWEgb3V0cHV0TWFwcGVyKS5cbiAgICBjb25zdCBlZmZlY3RpdmVSZWRhY3QgPSBzaG91bGRSZWRhY3QgfHwgdGhpcy5faXNQb2xpY3lSZWRhY3RlZChrZXkpIHx8IHRoaXMuX3JlZGFjdGVkS2V5cy5oYXMoa2V5KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3N0YWdlQ29udGV4dC5zZXRPYmplY3QoW10sIGtleSwgdmFsdWUsIGVmZmVjdGl2ZVJlZGFjdCwgZGVzY3JpcHRpb24pO1xuXG4gICAgaWYgKGVmZmVjdGl2ZVJlZGFjdCkge1xuICAgICAgdGhpcy5fcmVkYWN0ZWRLZXlzLmFkZChrZXkpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBmaWVsZC1sZXZlbCByZWRhY3Rpb24gZnJvbSBwb2xpY3lcbiAgICBjb25zdCBmaWVsZFNldCA9IHRoaXMuX3JlZGFjdGVkRmllbGRzQnlLZXkuZ2V0KGtleSk7XG5cbiAgICBpZiAodGhpcy5fcmVjb3JkZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCByZWNvcmRlclZhbHVlOiB1bmtub3duO1xuICAgICAgaWYgKGVmZmVjdGl2ZVJlZGFjdCkge1xuICAgICAgICByZWNvcmRlclZhbHVlID0gJ1tSRURBQ1RFRF0nO1xuICAgICAgfSBlbHNlIGlmIChmaWVsZFNldCAmJiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJlY29yZGVyVmFsdWUgPSB0aGlzLl9zY3J1YkZpZWxkcyh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgZmllbGRTZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVjb3JkZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9pbnZva2VIb29rKCdvbldyaXRlJywge1xuICAgICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlOiByZWNvcmRlclZhbHVlLFxuICAgICAgICBvcGVyYXRpb246ICdzZXQnLFxuICAgICAgICByZWRhY3RlZDogZWZmZWN0aXZlUmVkYWN0IHx8IGZpZWxkU2V0ICE9PSB1bmRlZmluZWQgfHwgdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHVwZGF0ZVZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgZGVzY3JpcHRpb24/OiBzdHJpbmcpIHtcbiAgICBhc3NlcnROb3RSZWFkb25seSh0aGlzLl9yZWFkT25seVZhbHVlcywga2V5LCAnd3JpdGUnKTtcblxuICAgIC8vIERldi1tb2RlOiBzYW1lIGNpcmN1bGFyIGNoZWNrIGFzIHNldFZhbHVlIChtZXJnZSB0YXJnZXRzIGNhbiBiZSBjaXJjdWxhciB0b28pXG4gICAgaWYgKGlzRGV2TW9kZSgpICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChoYXNDaXJjdWxhclJlZmVyZW5jZSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbZm9vdHByaW50XSBDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gdXBkYXRlVmFsdWUoJyR7a2V5fScpLiBgICtcbiAgICAgICAgICAgICdDb25zaWRlciBmbGF0dGVuaW5nIHRoZSBkYXRhIHN0cnVjdHVyZS4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGlzUmVkYWN0ZWQgPSB0aGlzLl9pc0tleVJlZGFjdGVkKGtleSkgfHwgdGhpcy5faXNQb2xpY3lSZWRhY3RlZChrZXkpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3N0YWdlQ29udGV4dC51cGRhdGVPYmplY3QoW10sIGtleSwgdmFsdWUsIGRlc2NyaXB0aW9uLCBpc1JlZGFjdGVkKTtcblxuICAgIGlmICh0aGlzLl9yZWNvcmRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmllbGRTZXQgPSB0aGlzLl9yZWRhY3RlZEZpZWxkc0J5S2V5LmdldChrZXkpO1xuXG4gICAgICBsZXQgcmVjb3JkZXJWYWx1ZTogdW5rbm93bjtcbiAgICAgIGlmIChpc1JlZGFjdGVkKSB7XG4gICAgICAgIHJlY29yZGVyVmFsdWUgPSAnW1JFREFDVEVEXSc7XG4gICAgICB9IGVsc2UgaWYgKGZpZWxkU2V0ICYmIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmVjb3JkZXJWYWx1ZSA9IHRoaXMuX3NjcnViRmllbGRzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBmaWVsZFNldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWNvcmRlclZhbHVlID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2ludm9rZUhvb2soJ29uV3JpdGUnLCB7XG4gICAgICAgIHN0YWdlTmFtZTogdGhpcy5fc3RhZ2VOYW1lLFxuICAgICAgICBzdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQuc3RhZ2VJZCxcbiAgICAgICAgcnVudGltZVN0YWdlSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW50aW1lU3RhZ2VJZCxcbiAgICAgICAgcGlwZWxpbmVJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bklkLFxuICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgIGtleSxcbiAgICAgICAgdmFsdWU6IHJlY29yZGVyVmFsdWUsXG4gICAgICAgIG9wZXJhdGlvbjogJ3VwZGF0ZScsXG4gICAgICAgIHJlZGFjdGVkOiBpc1JlZGFjdGVkIHx8IGZpZWxkU2V0ICE9PSB1bmRlZmluZWQgfHwgdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGRlbGV0ZVZhbHVlKGtleTogc3RyaW5nLCBkZXNjcmlwdGlvbj86IHN0cmluZykge1xuICAgIGFzc2VydE5vdFJlYWRvbmx5KHRoaXMuX3JlYWRPbmx5VmFsdWVzLCBrZXksICdkZWxldGUnKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3N0YWdlQ29udGV4dC5zZXRPYmplY3QoW10sIGtleSwgdW5kZWZpbmVkLCBmYWxzZSwgZGVzY3JpcHRpb24gPz8gYGRlbGV0ZWQgJHtrZXl9YCwgJ2RlbGV0ZScpO1xuXG4gICAgLy8gRGVsZXRpbmcgYSByZWRhY3RlZCBrZXkgY2xlYXJzIGl0cyByZWRhY3Rpb24gc3RhdHVzXG4gICAgdGhpcy5fcmVkYWN0ZWRLZXlzLmRlbGV0ZShrZXkpO1xuXG4gICAgaWYgKHRoaXMuX3JlY29yZGVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9pbnZva2VIb29rKCdvbldyaXRlJywge1xuICAgICAgICBzdGFnZU5hbWU6IHRoaXMuX3N0YWdlTmFtZSxcbiAgICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICAgIHJ1bnRpbWVTdGFnZUlkOiB0aGlzLl9zdGFnZUNvbnRleHQucnVudGltZVN0YWdlSWQsXG4gICAgICAgIHBpcGVsaW5lSWQ6IHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZCxcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICBrZXksXG4gICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgIG9wZXJhdGlvbjogJ2RlbGV0ZScsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBzZXRHbG9iYWwoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBkZXNjcmlwdGlvbj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9zdGFnZUNvbnRleHQuc2V0R2xvYmFsPy4oa2V5LCB2YWx1ZSwgZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBnZXRHbG9iYWwoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhZ2VDb250ZXh0LmdldEdsb2JhbD8uKGtleSk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHNldE9iamVjdEluUm9vdChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhZ2VDb250ZXh0LnNldFJvb3Q/LihrZXksIHZhbHVlKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBSZWFkLW9ubHkgKyBtaXNjIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSByZWFkb25seSBpbnB1dCB2YWx1ZXMgcGFzc2VkIHRvIHRoaXMgcGlwZWxpbmUsIGNhc3QgdG8gYFRgLlxuICAgKiBUaGUgcmV0dXJuZWQgb2JqZWN0IGlzIGRlZXBseSBmcm96ZW4g4oCUIGFueSBhdHRlbXB0IHRvIG11dGF0ZSBpdCB0aHJvd3MuXG4gICAqIENhY2hlZCBhdCBjb25zdHJ1Y3Rpb24gdGltZSBmb3IgemVyby1hbGxvY2F0aW9uIHJlcGVhdGVkIGFjY2Vzcy5cbiAgICpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB7IGFwcGxpY2FudE5hbWUsIGluY29tZSB9ID0gc2NvcGUuZ2V0QXJnczx7IGFwcGxpY2FudE5hbWU6IHN0cmluZzsgaW5jb21lOiBudW1iZXIgfT4oKTtcbiAgICogYGBgXG4gICAqL1xuICBnZXRBcmdzPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oKTogVCB7XG4gICAgcmV0dXJuIHRoaXMuX2Zyb3plbkFyZ3MgYXMgVDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSBpbmZyYXN0cnVjdHVyZSB2YWx1ZXNcbiAgICogdGhhdCBwcm9wYWdhdGUgdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzIChsaWtlIGBwcm9jZXNzLmVudmAgZm9yIGZsb3djaGFydHMpLlxuICAgKlxuICAgKiBDb250YWluczogc2lnbmFsIChhYm9ydCksIHRpbWVvdXRNcywgdHJhY2VJZC5cbiAgICogRnJvemVuIGF0IGNvbnN0cnVjdGlvbiB0aW1lLiBJbmhlcml0ZWQgYnkgc3ViZmxvd3MgYXV0b21hdGljYWxseS5cbiAgICpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB7IHNpZ25hbCwgdHJhY2VJZCB9ID0gc2NvcGUuZ2V0RW52KCk7XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0RW52KCk6IFJlYWRvbmx5PEV4ZWN1dGlvbkVudj4ge1xuICAgIHJldHVybiB0aGlzLl9leGVjdXRpb25FbnY7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIGdldFBpcGVsaW5lSWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YWdlQ29udGV4dC5ydW5JZDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBJbnRlcm5hbCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogQ2hlY2tzIGlmIGEga2V5IGlzIHJlZGFjdGVkIChleHBsaWNpdCBfcmVkYWN0ZWRLZXlzIHNldCkuICovXG4gIHByaXZhdGUgX2lzS2V5UmVkYWN0ZWQoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVkYWN0ZWRLZXlzLmhhcyhrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIGtleSBzaG91bGQgYmUgYXV0by1yZWRhY3RlZCBieSB0aGUgcG9saWN5IChleGFjdCBrZXlzICsgcGF0dGVybnMpLlxuICAgKlxuICAgKiBSZURvUyBndWFyZDogcGF0dGVybiB0ZXN0aW5nIGlzIGNhcHBlZCBhdCBNQVhfUEFUVEVSTl9LRVlfTEVOIGNoYXJhY3RlcnMuXG4gICAqIFNjb3BlIHN0YXRlIGtleXMgYXJlIGFsd2F5cyBzaG9ydCBpZGVudGlmaWVyczsgYW55IGtleSBleGNlZWRpbmcgdGhlIGNhcFxuICAgKiBpcyBhbG1vc3QgY2VydGFpbmx5IG5vdCBhIGxlZ2l0aW1hdGUgc2NvcGUga2V5LCBzbyBza2lwcGluZyBwYXR0ZXJuIG1hdGNoaW5nXG4gICAqIGZvciBpdCBkb2VzIG5vdCByaXNrIGxlYWtpbmcgUElJLiBFeGFjdC1rZXkgbWF0Y2hpbmcgKEFycmF5LmluY2x1ZGVzKSBpc1xuICAgKiBzdGlsbCBhcHBsaWVkIHJlZ2FyZGxlc3Mgb2YgbGVuZ3RoIGFuZCBpcyBub3QgdnVsbmVyYWJsZSB0byBSZURvUy5cbiAgICovXG4gIHByaXZhdGUgX2lzUG9saWN5UmVkYWN0ZWQoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuX3JlZGFjdGlvblBvbGljeSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICh0aGlzLl9yZWRhY3Rpb25Qb2xpY3kua2V5cz8uaW5jbHVkZXMoa2V5KSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMuX3JlZGFjdGlvblBvbGljeS5wYXR0ZXJucykge1xuICAgICAgaWYgKGtleS5sZW5ndGggPiBTY29wZUZhY2FkZS5fTUFYX1BBVFRFUk5fS0VZX0xFTikge1xuICAgICAgICAvLyBEZXYtbW9kZSB3YXJuaW5nOiBwYXR0ZXJuIG1hdGNoaW5nIHdhcyBzaWxlbnRseSBza2lwcGVkIGZvciB0aGlzIGtleS5cbiAgICAgICAgLy8gVXNlIHBvbGljeS5rZXlzIGZvciBleGFjdCBtYXRjaGluZyBvZiBsb25nIGtleSBuYW1lcy5cbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgW2Zvb3RwcmludF0gUmVkYWN0aW9uUG9saWN5OiBrZXkgJyR7a2V5LnNsaWNlKDAsIDQwKX0uLi4nICgke2tleS5sZW5ndGh9IGNoYXJzKSBleGNlZWRzIGAgK1xuICAgICAgICAgICAgICAndGhlIHBhdHRlcm4tbWF0Y2hpbmcgbGVuZ3RoIGNhcCBhbmQgd2FzIHNraXBwZWQuICcgK1xuICAgICAgICAgICAgICAnVXNlIHBvbGljeS5rZXlzIGZvciBleGFjdCBtYXRjaGluZyBvZiBsb25nIGtleSBuYW1lcy4nLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLl9yZWRhY3Rpb25Qb2xpY3kucGF0dGVybnMpIHtcbiAgICAgICAgICBwLmxhc3RJbmRleCA9IDA7IC8vIFJlc2V0IHN0YXRlZnVsIGdsb2JhbC9zdGlja3kgcmVnZXhlc1xuICAgICAgICAgIGlmIChwLnRlc3Qoa2V5KSkgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIE1heGltdW0ga2V5IGxlbmd0aCAoY2hhcmFjdGVycykgdGhhdCB3aWxsIGJlIHRlc3RlZCBhZ2FpbnN0IHJlZ2V4IHJlZGFjdGlvblxuICAgKiBwYXR0ZXJucy4gS2V5cyBsb25nZXIgdGhhbiB0aGlzIGFyZSBza2lwcGVkIGZvciBwYXR0ZXJuIG1hdGNoaW5nIHRvIHByZXZlbnRcbiAgICogUmVEb1M6IGEgcGF0aG9sb2dpY2FsIHJlZ2V4IHRlc3RlZCBhZ2FpbnN0IGFuIHVuYm91bmRlZGx5IGxvbmcga2V5IHN0cmluZ1xuICAgKiBjYW4gY2F1c2UgY2F0YXN0cm9waGljIGJhY2t0cmFja2luZy5cbiAgICpcbiAgICogMjU2IGNoYXJhY3RlcnMgY29tZm9ydGFibHkgZXhjZWVkcyBhbnkgcmVhbGlzdGljIHNjb3BlLXN0YXRlIGtleSBuYW1lLlxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX01BWF9QQVRURVJOX0tFWV9MRU4gPSAyNTY7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBkZWVwLWNsb25lZCBjb3B5IHdpdGggc3BlY2lmaWVkIGZpZWxkcyByZXBsYWNlZCBieSAnW1JFREFDVEVEXScuXG4gICAqIFN1cHBvcnRzIGRvdC1ub3RhdGlvbiBwYXRocyAoZS5nLiAnYWRkcmVzcy56aXAnKSBmb3IgbmVzdGVkIG9iamVjdHMuXG4gICAqL1xuICBwcml2YXRlIF9zY3J1YkZpZWxkcyhvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBmaWVsZHM6IFNldDxzdHJpbmc+KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGNvbnN0IGNvcHkgPSBzdHJ1Y3R1cmVkQ2xvbmUob2JqKTtcbiAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgaWYgKGZpZWxkLmluY2x1ZGVzKCcuJykgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb3B5LCBmaWVsZCkpIHtcbiAgICAgICAgLy8gRG90LW5vdGF0aW9uIHBhdGgg4oaSIGRlZXAgc2NydWIgKG9ubHkgaWYgbm90IGEgbGl0ZXJhbCBmbGF0IGtleSlcbiAgICAgICAgaWYgKGxvZGFzaEhhcyhjb3B5LCBmaWVsZCkpIHtcbiAgICAgICAgICBsb2Rhc2hTZXQoY29weSwgZmllbGQsICdbUkVEQUNURURdJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29weSwgZmllbGQpKSB7XG4gICAgICAgICAgY29weVtmaWVsZF0gPSAnW1JFREFDVEVEXSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvcHk7XG4gIH1cblxuICBwcml2YXRlIF9pbnZva2VIb29rKGhvb2s6IGtleW9mIE9taXQ8UmVjb3JkZXIsICdpZCc+LCBldmVudDogdW5rbm93bik6IHZvaWQge1xuICAgIGZvciAoY29uc3QgcmVjb3JkZXIgb2YgdGhpcy5fcmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBob29rRm4gPSByZWNvcmRlcltob29rXTtcbiAgICAgICAgaWYgKHR5cGVvZiBob29rRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAoaG9va0ZuIGFzIChldmVudDogdW5rbm93bikgPT4gdm9pZCkuY2FsbChyZWNvcmRlciwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoaG9vayAhPT0gJ29uRXJyb3InKSB7XG4gICAgICAgICAgdGhpcy5faW52b2tlSG9vaygnb25FcnJvcicsIHtcbiAgICAgICAgICAgIHN0YWdlTmFtZTogdGhpcy5fc3RhZ2VOYW1lLFxuICAgICAgICAgICAgc3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnN0YWdlSWQsXG4gICAgICAgICAgICBydW50aW1lU3RhZ2VJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICAgICAgcGlwZWxpbmVJZDogdGhpcy5fc3RhZ2VDb250ZXh0LnJ1bklkLFxuICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgZXJyb3I6IGVycm9yIGFzIEVycm9yLFxuICAgICAgICAgICAgb3BlcmF0aW9uOiBob29rID09PSAnb25SZWFkJyA/ICdyZWFkJyA6IGhvb2sgPT09ICdvbkNvbW1pdCcgPyAnY29tbWl0JyA6ICd3cml0ZScsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -39,18 +39,87 @@ export function hasCircularReference(value, ancestors = new WeakSet()) {
|
|
|
39
39
|
ancestors.delete(value); // backtrack — allow diamond references
|
|
40
40
|
return false;
|
|
41
41
|
}
|
|
42
|
-
/**
|
|
42
|
+
/**
|
|
43
|
+
* Global dev-mode flag for the whole `footprintjs` library.
|
|
44
|
+
*
|
|
45
|
+
* ## What it gates
|
|
46
|
+
*
|
|
47
|
+
* Multiple library subsystems use `isDevMode()` to decide whether to run
|
|
48
|
+
* expensive or noisy developer-only checks. Production leaves it OFF (the
|
|
49
|
+
* default) to avoid the cost and keep logs clean. Turning it ON enables:
|
|
50
|
+
*
|
|
51
|
+
* - Circular-reference detection in `ScopeFacade.setValue()` (O(n) per write).
|
|
52
|
+
* - Warnings when `attachCombinedRecorder()` receives a recorder with no
|
|
53
|
+
* observer methods (likely mistake — easy to forget an `on*` handler).
|
|
54
|
+
* - Warnings from `decide()` / `select()` when a predicate or rule shape
|
|
55
|
+
* looks suspicious.
|
|
56
|
+
* - Structural-integrity warnings in `getSubtreeSnapshot()`.
|
|
57
|
+
* - Any future developer-only diagnostic added to the library.
|
|
58
|
+
*
|
|
59
|
+
* ## How to enable
|
|
60
|
+
*
|
|
61
|
+
* Call `enableDevMode()` once at application startup (typically near your
|
|
62
|
+
* executor construction):
|
|
63
|
+
*
|
|
64
|
+
* ```ts
|
|
65
|
+
* import { enableDevMode } from 'footprintjs';
|
|
66
|
+
*
|
|
67
|
+
* if (process.env.NODE_ENV !== 'production') {
|
|
68
|
+
* enableDevMode();
|
|
69
|
+
* }
|
|
70
|
+
* ```
|
|
71
|
+
*
|
|
72
|
+
* Alternatively, gate on your own flag — the point is that production stays
|
|
73
|
+
* silent and fast, development is loud and helpful.
|
|
74
|
+
*
|
|
75
|
+
* ## Contract
|
|
76
|
+
*
|
|
77
|
+
* - Default: OFF. A library import does NOT enable dev-mode automatically.
|
|
78
|
+
* - Global: one flag controls all library dev diagnostics. A consumer who
|
|
79
|
+
* calls `disableDevMode()` silences every dev warning at once.
|
|
80
|
+
* - Process-wide: not per-executor. Enabling mid-run affects subsequent
|
|
81
|
+
* operations but does not retroactively replay missed checks.
|
|
82
|
+
* - Safe in production: when OFF, every gated check is a cheap `!flag`
|
|
83
|
+
* branch and adds negligible overhead.
|
|
84
|
+
*/
|
|
43
85
|
let devModeEnabled = false;
|
|
44
|
-
/**
|
|
86
|
+
/**
|
|
87
|
+
* Enable dev-mode diagnostics across the whole library.
|
|
88
|
+
*
|
|
89
|
+
* When on, the library performs developer-only checks (circular references,
|
|
90
|
+
* empty recorder detection, suspicious predicate shapes, etc.) and emits
|
|
91
|
+
* `console.warn` messages to help you catch mistakes early.
|
|
92
|
+
*
|
|
93
|
+
* Call once at application startup. See the module header for the full
|
|
94
|
+
* list of what dev-mode gates.
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ```ts
|
|
98
|
+
* import { enableDevMode } from 'footprintjs';
|
|
99
|
+
* if (process.env.NODE_ENV !== 'production') enableDevMode();
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
45
102
|
export function enableDevMode() {
|
|
46
103
|
devModeEnabled = true;
|
|
47
104
|
}
|
|
48
|
-
/**
|
|
105
|
+
/**
|
|
106
|
+
* Disable dev-mode diagnostics across the whole library (default state).
|
|
107
|
+
*
|
|
108
|
+
* All dev-only checks become no-ops. Safe to call in production paths —
|
|
109
|
+
* typically the default never needs to be re-asserted, but this is the
|
|
110
|
+
* documented way to turn the flag off if your code enabled it earlier.
|
|
111
|
+
*/
|
|
49
112
|
export function disableDevMode() {
|
|
50
113
|
devModeEnabled = false;
|
|
51
114
|
}
|
|
52
|
-
/**
|
|
115
|
+
/**
|
|
116
|
+
* Returns whether dev-mode diagnostics are currently enabled.
|
|
117
|
+
*
|
|
118
|
+
* Library internals call this before running any dev-only check. Consumers
|
|
119
|
+
* rarely need to call it directly — prefer `enableDevMode()` at startup and
|
|
120
|
+
* let the library gate its own diagnostics internally.
|
|
121
|
+
*/
|
|
53
122
|
export function isDevMode() {
|
|
54
123
|
return devModeEnabled;
|
|
55
124
|
}
|
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZWN0Q2lyY3VsYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3Njb3BlL2RldGVjdENpcmN1bGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUg7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEtBQWMsRUFBRSxZQUE2QixJQUFJLE9BQU8sRUFBRTtJQUM3RixJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBRTlELHFGQUFxRjtJQUNyRixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDdEMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksb0JBQW9CLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQztnQkFBRSxPQUFPLElBQUksQ0FBQztRQUN6RCxDQUFDO1FBQ0QsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLHVDQUF1QztRQUNoRSxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxNQUFNLElBQUksR0FBSSxLQUFpQyxDQUFDLFdBQVcsQ0FBQztJQUM1RCxJQUFJLElBQUksS0FBSyxTQUFTLElBQUksSUFBSSxLQUFLLE1BQU07UUFBRSxPQUFPLEtBQUssQ0FBQyxDQUFDLHdCQUF3QjtJQUVqRixJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDdEMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVyQixLQUFLLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBZ0MsQ0FBQyxFQUFFLENBQUM7UUFDaEUsSUFBSSxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7SUFDdEQsQ0FBQztJQUNELFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyx1Q0FBdUM7SUFDaEUsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBDRztBQUNILElBQUksY0FBYyxHQUFHLEtBQUssQ0FBQztBQUUzQjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLFVBQVUsYUFBYTtJQUMzQixjQUFjLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsY0FBYztJQUM1QixjQUFjLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsU0FBUztJQUN2QixPQUFPLGNBQWMsQ0FBQztBQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBkZXRlY3RDaXJjdWxhciDigJQgRGV2LW1vZGUgY2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGlvbiBmb3Igc2NvcGUgdmFsdWVzLlxuICpcbiAqIENoZWNrcyBpZiBhIHZhbHVlIGNvbnRhaW5zIGNpcmN1bGFyIHJlZmVyZW5jZXMgdXNpbmcgYSBXZWFrU2V0IHRyYXZlcnNhbC5cbiAqIE8obikgd2hlcmUgbiA9IHRvdGFsIG5lc3RlZCBvYmplY3RzLiBVc2VzIFdlYWtTZXQgc28gbm8gbWVtb3J5IGxlYWsuXG4gKlxuICogR2F0ZWQgYnkgdGhlIGNhbGxlciDigJQgb25seSBjYWxsZWQgaW4gZGV2IG1vZGUgdG8gYXZvaWQgcHJvZHVjdGlvbiBvdmVyaGVhZC5cbiAqIFNhbWUgYXBwcm9hY2ggYXMgSW1tZXIgKGRldGVjdCBhbmQgd2FybiBhdCBydW50aW1lKS5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWUgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlcy5cbiAqIE9ubHkgY2hlY2tzIHBsYWluIG9iamVjdHMgYW5kIGFycmF5cyDigJQgY2xhc3MgaW5zdGFuY2VzLCBEYXRlLCBNYXAsIGV0Yy4gYXJlIHNraXBwZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNDaXJjdWxhclJlZmVyZW5jZSh2YWx1ZTogdW5rbm93biwgYW5jZXN0b3JzOiBXZWFrU2V0PG9iamVjdD4gPSBuZXcgV2Vha1NldCgpKTogYm9vbGVhbiB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG5cbiAgLy8gU2tpcCBub24tcGxhaW4gb2JqZWN0cyAoRGF0ZSwgTWFwLCBTZXQsIGNsYXNzIGluc3RhbmNlcykg4oCUIHNhbWUgYXMgYWxsb3dsaXN0IGxvZ2ljXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGlmIChhbmNlc3RvcnMuaGFzKHZhbHVlKSkgcmV0dXJuIHRydWU7XG4gICAgYW5jZXN0b3JzLmFkZCh2YWx1ZSk7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHZhbHVlKSB7XG4gICAgICBpZiAoaGFzQ2lyY3VsYXJSZWZlcmVuY2UoaXRlbSwgYW5jZXN0b3JzKSkgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGFuY2VzdG9ycy5kZWxldGUodmFsdWUpOyAvLyBiYWNrdHJhY2sg4oCUIGFsbG93IGRpYW1vbmQgcmVmZXJlbmNlc1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGN0b3IgPSAodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmNvbnN0cnVjdG9yO1xuICBpZiAoY3RvciAhPT0gdW5kZWZpbmVkICYmIGN0b3IgIT09IE9iamVjdCkgcmV0dXJuIGZhbHNlOyAvLyBjbGFzcyBpbnN0YW5jZSDigJQgc2tpcFxuXG4gIGlmIChhbmNlc3RvcnMuaGFzKHZhbHVlKSkgcmV0dXJuIHRydWU7XG4gIGFuY2VzdG9ycy5hZGQodmFsdWUpO1xuXG4gIGZvciAoY29uc3QgdiBvZiBPYmplY3QudmFsdWVzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KSkge1xuICAgIGlmIChoYXNDaXJjdWxhclJlZmVyZW5jZSh2LCBhbmNlc3RvcnMpKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICBhbmNlc3RvcnMuZGVsZXRlKHZhbHVlKTsgLy8gYmFja3RyYWNrIOKAlCBhbGxvdyBkaWFtb25kIHJlZmVyZW5jZXNcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEdsb2JhbCBkZXYtbW9kZSBmbGFnIGZvciB0aGUgd2hvbGUgYGZvb3RwcmludGpzYCBsaWJyYXJ5LlxuICpcbiAqICMjIFdoYXQgaXQgZ2F0ZXNcbiAqXG4gKiBNdWx0aXBsZSBsaWJyYXJ5IHN1YnN5c3RlbXMgdXNlIGBpc0Rldk1vZGUoKWAgdG8gZGVjaWRlIHdoZXRoZXIgdG8gcnVuXG4gKiBleHBlbnNpdmUgb3Igbm9pc3kgZGV2ZWxvcGVyLW9ubHkgY2hlY2tzLiBQcm9kdWN0aW9uIGxlYXZlcyBpdCBPRkYgKHRoZVxuICogZGVmYXVsdCkgdG8gYXZvaWQgdGhlIGNvc3QgYW5kIGtlZXAgbG9ncyBjbGVhbi4gVHVybmluZyBpdCBPTiBlbmFibGVzOlxuICpcbiAqICAgLSBDaXJjdWxhci1yZWZlcmVuY2UgZGV0ZWN0aW9uIGluIGBTY29wZUZhY2FkZS5zZXRWYWx1ZSgpYCAoTyhuKSBwZXIgd3JpdGUpLlxuICogICAtIFdhcm5pbmdzIHdoZW4gYGF0dGFjaENvbWJpbmVkUmVjb3JkZXIoKWAgcmVjZWl2ZXMgYSByZWNvcmRlciB3aXRoIG5vXG4gKiAgICAgb2JzZXJ2ZXIgbWV0aG9kcyAobGlrZWx5IG1pc3Rha2Ug4oCUIGVhc3kgdG8gZm9yZ2V0IGFuIGBvbipgIGhhbmRsZXIpLlxuICogICAtIFdhcm5pbmdzIGZyb20gYGRlY2lkZSgpYCAvIGBzZWxlY3QoKWAgd2hlbiBhIHByZWRpY2F0ZSBvciBydWxlIHNoYXBlXG4gKiAgICAgbG9va3Mgc3VzcGljaW91cy5cbiAqICAgLSBTdHJ1Y3R1cmFsLWludGVncml0eSB3YXJuaW5ncyBpbiBgZ2V0U3VidHJlZVNuYXBzaG90KClgLlxuICogICAtIEFueSBmdXR1cmUgZGV2ZWxvcGVyLW9ubHkgZGlhZ25vc3RpYyBhZGRlZCB0byB0aGUgbGlicmFyeS5cbiAqXG4gKiAjIyBIb3cgdG8gZW5hYmxlXG4gKlxuICogQ2FsbCBgZW5hYmxlRGV2TW9kZSgpYCBvbmNlIGF0IGFwcGxpY2F0aW9uIHN0YXJ0dXAgKHR5cGljYWxseSBuZWFyIHlvdXJcbiAqIGV4ZWN1dG9yIGNvbnN0cnVjdGlvbik6XG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGVuYWJsZURldk1vZGUgfSBmcm9tICdmb290cHJpbnRqcyc7XG4gKlxuICogaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAqICAgZW5hYmxlRGV2TW9kZSgpO1xuICogfVxuICogYGBgXG4gKlxuICogQWx0ZXJuYXRpdmVseSwgZ2F0ZSBvbiB5b3VyIG93biBmbGFnIOKAlCB0aGUgcG9pbnQgaXMgdGhhdCBwcm9kdWN0aW9uIHN0YXlzXG4gKiBzaWxlbnQgYW5kIGZhc3QsIGRldmVsb3BtZW50IGlzIGxvdWQgYW5kIGhlbHBmdWwuXG4gKlxuICogIyMgQ29udHJhY3RcbiAqXG4gKiAtIERlZmF1bHQ6IE9GRi4gQSBsaWJyYXJ5IGltcG9ydCBkb2VzIE5PVCBlbmFibGUgZGV2LW1vZGUgYXV0b21hdGljYWxseS5cbiAqIC0gR2xvYmFsOiBvbmUgZmxhZyBjb250cm9scyBhbGwgbGlicmFyeSBkZXYgZGlhZ25vc3RpY3MuIEEgY29uc3VtZXIgd2hvXG4gKiAgIGNhbGxzIGBkaXNhYmxlRGV2TW9kZSgpYCBzaWxlbmNlcyBldmVyeSBkZXYgd2FybmluZyBhdCBvbmNlLlxuICogLSBQcm9jZXNzLXdpZGU6IG5vdCBwZXItZXhlY3V0b3IuIEVuYWJsaW5nIG1pZC1ydW4gYWZmZWN0cyBzdWJzZXF1ZW50XG4gKiAgIG9wZXJhdGlvbnMgYnV0IGRvZXMgbm90IHJldHJvYWN0aXZlbHkgcmVwbGF5IG1pc3NlZCBjaGVja3MuXG4gKiAtIFNhZmUgaW4gcHJvZHVjdGlvbjogd2hlbiBPRkYsIGV2ZXJ5IGdhdGVkIGNoZWNrIGlzIGEgY2hlYXAgYCFmbGFnYFxuICogICBicmFuY2ggYW5kIGFkZHMgbmVnbGlnaWJsZSBvdmVyaGVhZC5cbiAqL1xubGV0IGRldk1vZGVFbmFibGVkID0gZmFsc2U7XG5cbi8qKlxuICogRW5hYmxlIGRldi1tb2RlIGRpYWdub3N0aWNzIGFjcm9zcyB0aGUgd2hvbGUgbGlicmFyeS5cbiAqXG4gKiBXaGVuIG9uLCB0aGUgbGlicmFyeSBwZXJmb3JtcyBkZXZlbG9wZXItb25seSBjaGVja3MgKGNpcmN1bGFyIHJlZmVyZW5jZXMsXG4gKiBlbXB0eSByZWNvcmRlciBkZXRlY3Rpb24sIHN1c3BpY2lvdXMgcHJlZGljYXRlIHNoYXBlcywgZXRjLikgYW5kIGVtaXRzXG4gKiBgY29uc29sZS53YXJuYCBtZXNzYWdlcyB0byBoZWxwIHlvdSBjYXRjaCBtaXN0YWtlcyBlYXJseS5cbiAqXG4gKiBDYWxsIG9uY2UgYXQgYXBwbGljYXRpb24gc3RhcnR1cC4gU2VlIHRoZSBtb2R1bGUgaGVhZGVyIGZvciB0aGUgZnVsbFxuICogbGlzdCBvZiB3aGF0IGRldi1tb2RlIGdhdGVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZW5hYmxlRGV2TW9kZSB9IGZyb20gJ2Zvb3RwcmludGpzJztcbiAqIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSBlbmFibGVEZXZNb2RlKCk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuYWJsZURldk1vZGUoKTogdm9pZCB7XG4gIGRldk1vZGVFbmFibGVkID0gdHJ1ZTtcbn1cblxuLyoqXG4gKiBEaXNhYmxlIGRldi1tb2RlIGRpYWdub3N0aWNzIGFjcm9zcyB0aGUgd2hvbGUgbGlicmFyeSAoZGVmYXVsdCBzdGF0ZSkuXG4gKlxuICogQWxsIGRldi1vbmx5IGNoZWNrcyBiZWNvbWUgbm8tb3BzLiBTYWZlIHRvIGNhbGwgaW4gcHJvZHVjdGlvbiBwYXRocyDigJRcbiAqIHR5cGljYWxseSB0aGUgZGVmYXVsdCBuZXZlciBuZWVkcyB0byBiZSByZS1hc3NlcnRlZCwgYnV0IHRoaXMgaXMgdGhlXG4gKiBkb2N1bWVudGVkIHdheSB0byB0dXJuIHRoZSBmbGFnIG9mZiBpZiB5b3VyIGNvZGUgZW5hYmxlZCBpdCBlYXJsaWVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGlzYWJsZURldk1vZGUoKTogdm9pZCB7XG4gIGRldk1vZGVFbmFibGVkID0gZmFsc2U7XG59XG5cbi8qKlxuICogUmV0dXJucyB3aGV0aGVyIGRldi1tb2RlIGRpYWdub3N0aWNzIGFyZSBjdXJyZW50bHkgZW5hYmxlZC5cbiAqXG4gKiBMaWJyYXJ5IGludGVybmFscyBjYWxsIHRoaXMgYmVmb3JlIHJ1bm5pbmcgYW55IGRldi1vbmx5IGNoZWNrLiBDb25zdW1lcnNcbiAqIHJhcmVseSBuZWVkIHRvIGNhbGwgaXQgZGlyZWN0bHkg4oCUIHByZWZlciBgZW5hYmxlRGV2TW9kZSgpYCBhdCBzdGFydHVwIGFuZFxuICogbGV0IHRoZSBsaWJyYXJ5IGdhdGUgaXRzIG93biBkaWFnbm9zdGljcyBpbnRlcm5hbGx5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEZXZNb2RlKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZGV2TW9kZUVuYWJsZWQ7XG59XG4iXX0=
|
|
@@ -6,4 +6,4 @@
|
|
|
6
6
|
* attached to Scope instances to observe read/write/commit operations.
|
|
7
7
|
*/
|
|
8
8
|
export {};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3Njb3BlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2NvcGUgVHlwZSBEZWZpbml0aW9uc1xuICpcbiAqIENvcmUgdHlwZXMgZm9yIHRoZSBjb21wb3NhYmxlIFNjb3BlIHN5c3RlbSB3aXRoIHBsdWdnYWJsZSBSZWNvcmRlcnMuXG4gKiBBcmNoaXRlY3R1cmUgZm9sbG93cyBjb21wb3NpdGlvbi1vdmVyLWluaGVyaXRhbmNlOiBSZWNvcmRlcnMgYXJlXG4gKiBhdHRhY2hlZCB0byBTY29wZSBpbnN0YW5jZXMgdG8gb2JzZXJ2ZSByZWFkL3dyaXRlL2NvbW1pdCBvcGVyYXRpb25zLlxuICovXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEV2ZW50IFR5cGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkZXJDb250ZXh0IHtcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIC8qKiBTdGFibGUgc3RhZ2UgaWRlbnRpZmllciAobWF0Y2hlcyBzcGVjIG5vZGUgaWQpLiAqL1xuICBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBVbmlxdWUgcGVyLWV4ZWN1dGlvbi1zdGVwIGlkZW50aWZpZXIuIEZvcm1hdDogW3N1YmZsb3dQYXRoL11zdGFnZUlkI2V4ZWN1dGlvbkluZGV4ICovXG4gIHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lSWQ6IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhZEV2ZW50IGV4dGVuZHMgUmVjb3JkZXJDb250ZXh0IHtcbiAga2V5Pzogc3RyaW5nO1xuICB2YWx1ZTogdW5rbm93bjtcbiAgLyoqIFRydWUgd2hlbiB0aGUgdmFsdWUgaGFzIGJlZW4gcmVkYWN0ZWQgZm9yIFBJSSBwcm90ZWN0aW9uLiAqL1xuICByZWRhY3RlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV3JpdGVFdmVudCBleHRlbmRzIFJlY29yZGVyQ29udGV4dCB7XG4gIGtleTogc3RyaW5nO1xuICB2YWx1ZTogdW5rbm93bjtcbiAgb3BlcmF0aW9uOiAnc2V0JyB8ICd1cGRhdGUnIHwgJ2RlbGV0ZSc7XG4gIC8qKiBUcnVlIHdoZW4gdGhlIHZhbHVlIGhhcyBiZWVuIHJlZGFjdGVkIGZvciBQSUkgcHJvdGVjdGlvbi4gKi9cbiAgcmVkYWN0ZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1pdEV2ZW50IGV4dGVuZHMgUmVjb3JkZXJDb250ZXh0IHtcbiAgbXV0YXRpb25zOiBBcnJheTx7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdmFsdWU6IHVua25vd247XG4gICAgb3BlcmF0aW9uOiAnc2V0JyB8ICd1cGRhdGUnIHwgJ2RlbGV0ZSc7XG4gIH0+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yRXZlbnQgZXh0ZW5kcyBSZWNvcmRlckNvbnRleHQge1xuICBlcnJvcjogRXJyb3I7XG4gIG9wZXJhdGlvbjogJ3JlYWQnIHwgJ3dyaXRlJyB8ICdjb21taXQnO1xuICBrZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2VFdmVudCBleHRlbmRzIFJlY29yZGVyQ29udGV4dCB7XG4gIGR1cmF0aW9uPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhdXNlRXZlbnQgZXh0ZW5kcyBSZWNvcmRlckNvbnRleHQge1xuICBwYXVzZURhdGE/OiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3VtZUV2ZW50IGV4dGVuZHMgUmVjb3JkZXJDb250ZXh0IHtcbiAgaGFzSW5wdXQ6IGJvb2xlYW47XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJlZGFjdGlvbiBQb2xpY3lcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBEZWNsYXJhdGl2ZSByZWRhY3Rpb24gY29uZmlndXJhdGlvbiDigJQgZGVmaW5lIG9uY2UsIGFwcGxpZWQgZXZlcnl3aGVyZS5cbiAqXG4gKiBDb25maWd1cmUgYXQgdGhlIHNjb3BlIGNsYXNzIGxldmVsIChzdGF0aWMgcHJvcGVydHkpIG9yIHBhc3MgdG9cbiAqIEZsb3dDaGFydEV4ZWN1dG9yIHRvIGFwcGx5IGFjcm9zcyBhbGwgc3RhZ2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZGFjdGlvblBvbGljeSB7XG4gIC8qKiBFeGFjdCBrZXkgbmFtZXMgdG8gYWx3YXlzIHJlZGFjdCAoZS5nLiBbJ3NzbicsICdjcmVkaXRDYXJkJ10pLiAqL1xuICBrZXlzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBSZWdleCBwYXR0ZXJucyDigJQgYW55IGtleSBtYXRjaGluZyBhIHBhdHRlcm4gaXMgYXV0by1yZWRhY3RlZC5cbiAgICpcbiAgICogUGF0dGVybiBtYXRjaGluZyBpcyBza2lwcGVkIGZvciBrZXlzIHRoYXQgZXhjZWVkIGFuIGludGVybmFsIGxlbmd0aCBjYXBcbiAgICogKGRlc2lnbmVkIHRvIHByZXZlbnQgUmVEb1Mgb24gcGF0aG9sb2dpY2FsIHBhdHRlcm5zKS4gRm9yIHZlcnkgbG9uZyBrZXlcbiAgICogbmFtZXMsIHVzZSBga2V5c2AgKGV4YWN0IG1hdGNoKSBpbnN0ZWFkIG9mIHBhdHRlcm5zLlxuICAgKi9cbiAgcGF0dGVybnM/OiBSZWdFeHBbXTtcbiAgLyoqIEZpZWxkLWxldmVsIHJlZGFjdGlvbiB3aXRoaW4gb2JqZWN0cyDigJQga2V5IOKGkiBhcnJheSBvZiBmaWVsZHMgdG8gc2NydWIuXG4gICAqICBTdXBwb3J0cyBkb3Qtbm90YXRpb24gZm9yIG5lc3RlZCBwYXRocyAoZS5nLiAnYWRkcmVzcy56aXAnKS4gKi9cbiAgZmllbGRzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3Njb3BlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2NvcGUgVHlwZSBEZWZpbml0aW9uc1xuICpcbiAqIENvcmUgdHlwZXMgZm9yIHRoZSBjb21wb3NhYmxlIFNjb3BlIHN5c3RlbSB3aXRoIHBsdWdnYWJsZSBSZWNvcmRlcnMuXG4gKiBBcmNoaXRlY3R1cmUgZm9sbG93cyBjb21wb3NpdGlvbi1vdmVyLWluaGVyaXRhbmNlOiBSZWNvcmRlcnMgYXJlXG4gKiBhdHRhY2hlZCB0byBTY29wZSBpbnN0YW5jZXMgdG8gb2JzZXJ2ZSByZWFkL3dyaXRlL2NvbW1pdCBvcGVyYXRpb25zLlxuICovXG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEV2ZW50IFR5cGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVjb3JkZXJDb250ZXh0IHtcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIC8qKiBTdGFibGUgc3RhZ2UgaWRlbnRpZmllciAobWF0Y2hlcyBzcGVjIG5vZGUgaWQpLiAqL1xuICBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBVbmlxdWUgcGVyLWV4ZWN1dGlvbi1zdGVwIGlkZW50aWZpZXIuIEZvcm1hdDogW3N1YmZsb3dQYXRoL11zdGFnZUlkI2V4ZWN1dGlvbkluZGV4ICovXG4gIHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lSWQ6IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhZEV2ZW50IGV4dGVuZHMgUmVjb3JkZXJDb250ZXh0IHtcbiAga2V5Pzogc3RyaW5nO1xuICB2YWx1ZTogdW5rbm93bjtcbiAgLyoqIFRydWUgd2hlbiB0aGUgdmFsdWUgaGFzIGJlZW4gcmVkYWN0ZWQgZm9yIFBJSSBwcm90ZWN0aW9uLiAqL1xuICByZWRhY3RlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV3JpdGVFdmVudCBleHRlbmRzIFJlY29yZGVyQ29udGV4dCB7XG4gIGtleTogc3RyaW5nO1xuICB2YWx1ZTogdW5rbm93bjtcbiAgb3BlcmF0aW9uOiAnc2V0JyB8ICd1cGRhdGUnIHwgJ2RlbGV0ZSc7XG4gIC8qKiBUcnVlIHdoZW4gdGhlIHZhbHVlIGhhcyBiZWVuIHJlZGFjdGVkIGZvciBQSUkgcHJvdGVjdGlvbi4gKi9cbiAgcmVkYWN0ZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbW1pdEV2ZW50IGV4dGVuZHMgUmVjb3JkZXJDb250ZXh0IHtcbiAgbXV0YXRpb25zOiBBcnJheTx7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdmFsdWU6IHVua25vd247XG4gICAgb3BlcmF0aW9uOiAnc2V0JyB8ICd1cGRhdGUnIHwgJ2RlbGV0ZSc7XG4gIH0+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yRXZlbnQgZXh0ZW5kcyBSZWNvcmRlckNvbnRleHQge1xuICBlcnJvcjogRXJyb3I7XG4gIG9wZXJhdGlvbjogJ3JlYWQnIHwgJ3dyaXRlJyB8ICdjb21taXQnO1xuICBrZXk/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhZ2VFdmVudCBleHRlbmRzIFJlY29yZGVyQ29udGV4dCB7XG4gIGR1cmF0aW9uPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhdXNlRXZlbnQgZXh0ZW5kcyBSZWNvcmRlckNvbnRleHQge1xuICBwYXVzZURhdGE/OiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlc3VtZUV2ZW50IGV4dGVuZHMgUmVjb3JkZXJDb250ZXh0IHtcbiAgaGFzSW5wdXQ6IGJvb2xlYW47XG59XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJlZGFjdGlvbiBQb2xpY3lcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBEZWNsYXJhdGl2ZSByZWRhY3Rpb24gY29uZmlndXJhdGlvbiDigJQgZGVmaW5lIG9uY2UsIGFwcGxpZWQgZXZlcnl3aGVyZS5cbiAqXG4gKiBDb25maWd1cmUgYXQgdGhlIHNjb3BlIGNsYXNzIGxldmVsIChzdGF0aWMgcHJvcGVydHkpIG9yIHBhc3MgdG9cbiAqIEZsb3dDaGFydEV4ZWN1dG9yIHRvIGFwcGx5IGFjcm9zcyBhbGwgc3RhZ2VzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZGFjdGlvblBvbGljeSB7XG4gIC8qKiBFeGFjdCBrZXkgbmFtZXMgdG8gYWx3YXlzIHJlZGFjdCAoZS5nLiBbJ3NzbicsICdjcmVkaXRDYXJkJ10pLiAqL1xuICBrZXlzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBSZWdleCBwYXR0ZXJucyDigJQgYW55IGtleSBtYXRjaGluZyBhIHBhdHRlcm4gaXMgYXV0by1yZWRhY3RlZC5cbiAgICpcbiAgICogUGF0dGVybiBtYXRjaGluZyBpcyBza2lwcGVkIGZvciBrZXlzIHRoYXQgZXhjZWVkIGFuIGludGVybmFsIGxlbmd0aCBjYXBcbiAgICogKGRlc2lnbmVkIHRvIHByZXZlbnQgUmVEb1Mgb24gcGF0aG9sb2dpY2FsIHBhdHRlcm5zKS4gRm9yIHZlcnkgbG9uZyBrZXlcbiAgICogbmFtZXMsIHVzZSBga2V5c2AgKGV4YWN0IG1hdGNoKSBpbnN0ZWFkIG9mIHBhdHRlcm5zLlxuICAgKi9cbiAgcGF0dGVybnM/OiBSZWdFeHBbXTtcbiAgLyoqIEZpZWxkLWxldmVsIHJlZGFjdGlvbiB3aXRoaW4gb2JqZWN0cyDigJQga2V5IOKGkiBhcnJheSBvZiBmaWVsZHMgdG8gc2NydWIuXG4gICAqICBTdXBwb3J0cyBkb3Qtbm90YXRpb24gZm9yIG5lc3RlZCBwYXRocyAoZS5nLiAnYWRkcmVzcy56aXAnKS4gKi9cbiAgZmllbGRzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuICAvKipcbiAgICogUmVnZXggcGF0dGVybnMgbWF0Y2hlZCBhZ2FpbnN0IGBFbWl0RXZlbnQubmFtZWAgZm9yIGBzY29wZS4kZW1pdCguLi4pYFxuICAgKiBjYWxscy4gQW55IGVtaXQgZXZlbnQgd2hvc2UgbmFtZSBtYXRjaGVzIGhhcyBpdHMgcGF5bG9hZCByZXBsYWNlZCB3aXRoXG4gICAqIHRoZSBzdHJpbmcgYCdbUkVEQUNURURdJ2AgYmVmb3JlIGRpc3BhdGNoIHRvIHJlY29yZGVycy5cbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICogYGBgdHNcbiAgICogeyBlbWl0UGF0dGVybnM6IFsvXFwuYXV0aFxcLi8sIC9cXC5iaWxsaW5nXFwuL10gfVxuICAgKiAvLyBIaWRlcyBwYXlsb2FkcyBvZiBldmVudHMgbGlrZSAnbXlhcHAuYXV0aC5jaGVjaycgYW5kICdteWFwcC5iaWxsaW5nLnNwZW5kJ1xuICAgKiBgYGBcbiAgICovXG4gIGVtaXRQYXR0ZXJucz86IFJlZ0V4cFtdO1xufVxuXG4vKipcbiAqIENvbXBsaWFuY2UtZnJpZW5kbHkgcmVwb3J0IG9mIHdoYXQgd2FzIHJlZGFjdGVkLiBOZXZlciBpbmNsdWRlcyB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVkYWN0aW9uUmVwb3J0IHtcbiAgLyoqIEtleXMgZnVsbHkgcmVkYWN0ZWQgKGV4YWN0IG1hdGNoIG9yIHBhdHRlcm4gbWF0Y2gpLiAqL1xuICByZWRhY3RlZEtleXM6IHN0cmluZ1tdO1xuICAvKiogS2V5cyB3aXRoIGZpZWxkLWxldmVsIHJlZGFjdGlvbiDihpIgd2hpY2ggZmllbGRzIHdlcmUgc2NydWJiZWQuICovXG4gIGZpZWxkUmVkYWN0aW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuICAvKiogU291cmNlIHN0cmluZ3Mgb2YgcmVnaXN0ZXJlZCBwYXR0ZXJucy4gKi9cbiAgcGF0dGVybnM6IHN0cmluZ1tdO1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSZWNvcmRlciBJbnRlcmZhY2Vcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBQbHVnZ2FibGUgb2JzZXJ2ZXIgZm9yIHNjb3BlIG9wZXJhdGlvbnMuXG4gKlxuICogQWxsIG1ldGhvZHMgYXJlIG9wdGlvbmFsIOKAlCBpbXBsZW1lbnQgb25seSB0aGUgaG9va3MgeW91IG5lZWQuXG4gKiBSZWNvcmRlcnMgYXJlIGludm9rZWQgc3luY2hyb25vdXNseSBpbiBhdHRhY2htZW50IG9yZGVyLlxuICogSWYgYSByZWNvcmRlciB0aHJvd3MsIHRoZSBlcnJvciBpcyBjYXVnaHQgYW5kIHBhc3NlZCB0byBvbkVycm9yXG4gKiBob29rcyBvZiBvdGhlciByZWNvcmRlcnM7IHRoZSBzY29wZSBvcGVyYXRpb24gY29udGludWVzIG5vcm1hbGx5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZGVyIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgb25SZWFkPyhldmVudDogUmVhZEV2ZW50KTogdm9pZDtcbiAgb25Xcml0ZT8oZXZlbnQ6IFdyaXRlRXZlbnQpOiB2b2lkO1xuICBvbkNvbW1pdD8oZXZlbnQ6IENvbW1pdEV2ZW50KTogdm9pZDtcbiAgb25FcnJvcj8oZXZlbnQ6IEVycm9yRXZlbnQpOiB2b2lkO1xuICBvblN0YWdlU3RhcnQ/KGV2ZW50OiBTdGFnZUV2ZW50KTogdm9pZDtcbiAgb25TdGFnZUVuZD8oZXZlbnQ6IFN0YWdlRXZlbnQpOiB2b2lkO1xuICBvblBhdXNlPyhldmVudDogUGF1c2VFdmVudCk6IHZvaWQ7XG4gIG9uUmVzdW1lPyhldmVudDogUmVzdW1lRXZlbnQpOiB2b2lkO1xuICAvKipcbiAgICogRmlyZXMgZm9yIGV2ZXJ5IGBzY29wZS4kZW1pdChuYW1lLCBwYXlsb2FkKWAgY2FsbCBkdXJpbmcgYSBzdGFnZS5cbiAgICogT3B0aW9uYWwg4oCUIGltcGxlbWVudCBvbmx5IGlmIHlvdSB3YW50IHRvIG9ic2VydmUgY29uc3VtZXItZW1pdHRlZFxuICAgKiBzdHJ1Y3R1cmVkIGV2ZW50cy4gU2VlIGBFbWl0UmVjb3JkZXJgIGZvciB0aGUgZm9jdXNlZCBpbnRlcmZhY2VcbiAgICogKHN0cnVjdHVyYWxseSBjb21wYXRpYmxlOyB0aGlzIGZpZWxkIGlzIHRoZSBzYW1lIHNoYXBlKS5cbiAgICpcbiAgICogQHNlZSBFbWl0UmVjb3JkZXIgaW4gYHNyYy9saWIvcmVjb3JkZXIvRW1pdFJlY29yZGVyLnRzYFxuICAgKi9cbiAgb25FbWl0PyhldmVudDogaW1wb3J0KCcuLi9yZWNvcmRlci9FbWl0UmVjb3JkZXIuanMnKS5FbWl0RXZlbnQpOiB2b2lkO1xuICAvKiogUmVzZXQgc3RhdGUgYmVmb3JlIGVhY2ggZXhlY3V0b3IucnVuKCkg4oCUIHByZXZlbnRzIGNyb3NzLXJ1biBhY2N1bXVsYXRpb24uICovXG4gIGNsZWFyPygpOiB2b2lkO1xuICAvKiogRXhwb3NlIGNvbGxlY3RlZCBkYXRhIGZvciBpbmNsdXNpb24gaW4gZXhlY3V0b3IuZ2V0U25hcHNob3QoKS5yZWNvcmRlcnMuICovXG4gIHRvU25hcHNob3Q/KCk6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgcHJlZmVycmVkT3BlcmF0aW9uPzogJ3RyYW5zbGF0ZScgfCAnYWNjdW11bGF0ZScgfCAnYWdncmVnYXRlJztcbiAgICBkYXRhOiB1bmtub3duO1xuICB9O1xufVxuIl19
|
package/dist/esm/recorders.js
CHANGED
|
@@ -84,4 +84,4 @@ export function windowed(maxEntries) {
|
|
|
84
84
|
return new WindowedNarrativeFlowRecorder(maxEntries);
|
|
85
85
|
}
|
|
86
86
|
export { CompositeRecorder } from './lib/recorder/index.js';
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
87
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlY29yZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNIOzs7Ozs7O0dBT0c7QUFHSCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxxREFBcUQsQ0FBQztBQWdCaEcsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sbUVBQW1FLENBQUM7QUFFbEgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDaEcsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDcEgsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sbUVBQW1FLENBQUM7QUFHbEgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQVN6RSxNQUFNLFVBQVUsU0FBUyxDQUFDLE9BQTBDO0lBQ2xFLE1BQU0sR0FBRyxHQUFHLElBQUkseUJBQXlCLENBQUMsT0FBTyxDQUFzQixDQUFDO0lBQ3hFLEdBQUcsQ0FBQyxLQUFLLEdBQUc7UUFDVixPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUM3QixDQUFDLENBQUM7SUFDRixHQUFHLENBQUMsVUFBVSxHQUFHO1FBQ2YsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDM0IsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBWUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxPQUErQjtJQUNyRCxNQUFNLEdBQUcsR0FBRyxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQW9CLENBQUM7SUFDM0QsR0FBRyxDQUFDLEtBQUssR0FBRztRQUNWLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFVBQVUsQ0FBQztJQUN0QyxDQUFDLENBQUM7SUFDRixHQUFHLENBQUMsTUFBTSxHQUFHO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsV0FBVyxDQUFDO0lBQ3ZDLENBQUMsQ0FBQztJQUNGLEdBQUcsQ0FBQyxPQUFPLEdBQUc7UUFDWixPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxZQUFZLENBQUM7SUFDeEMsQ0FBQyxDQUFDO0lBQ0YsR0FBRyxDQUFDLEtBQUssR0FBRyxVQUFnQyxJQUFZO1FBQ3RELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDLENBQUM7SUFDRixHQUFHLENBQUMsR0FBRyxHQUFHO1FBQ1IsT0FBTyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDM0IsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBUUQsTUFBTSxVQUFVLEtBQUssQ0FBQyxPQUE4QjtJQUNsRCxNQUFNLEdBQUcsR0FBRyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQWtCLENBQUM7SUFDeEQsR0FBRyxDQUFDLElBQUksR0FBRztRQUNULE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzNCLENBQUMsQ0FBQztJQUNGLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQVFELE1BQU0sVUFBVSxRQUFRO0lBQ3RCLE1BQU0sR0FBRyxHQUFHLElBQUksb0JBQW9CLEVBQXNCLENBQUM7SUFDM0QsR0FBRyxDQUFDLE9BQU8sR0FBRztRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzVCLENBQUMsQ0FBQztJQUNGLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVELHFDQUFxQztBQUVyQyxNQUFNLFVBQVUsUUFBUTtJQUN0QixPQUFPLElBQUksNkJBQTZCLEVBQUUsQ0FBQztBQUM3QyxDQUFDO0FBQ0QsTUFBTSxVQUFVLFNBQVM7SUFDdkIsT0FBTyxJQUFJLDhCQUE4QixFQUFFLENBQUM7QUFDOUMsQ0FBQztBQUNELE1BQU0sVUFBVSxRQUFRLENBQUMsVUFBbUI7SUFDMUMsT0FBTyxJQUFJLDZCQUE2QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFzQkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGZvb3RwcmludGpzL3JlY29yZGVycyDigJQgRmFjdG9yeSBmdW5jdGlvbnMgZm9yIGJ1aWx0LWluIHJlY29yZGVycy5cbiAqXG4gKiBQcmVmZXIgdGhlc2UgZmFjdG9yeSBmdW5jdGlvbnMgb3ZlciBjb25zdHJ1Y3RpbmcgcmVjb3JkZXIgY2xhc3NlcyBkaXJlY3RseS5cbiAqIEVhY2ggZmFjdG9yeSByZXR1cm5zIHRoZSByZWNvcmRlciBpbnN0YW5jZSBlbnJpY2hlZCB3aXRoIHNob3J0IGNvbnZlbmllbmNlIG1ldGhvZHMuXG4gKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IG5hcnJhdGl2ZSwgbWV0cmljcywgZGVidWcsIG1hbmlmZXN0IH0gZnJvbSAnZm9vdHByaW50anMvcmVjb3JkZXJzJztcbiAqXG4gKiBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGFydFxuICogICAucmVjb3JkZXIobmFycmF0aXZlKCkpXG4gKiAgIC5yZWNvcmRlcihtZXRyaWNzKCkpXG4gKiAgIC5ydW4oKTtcbiAqIGBgYFxuICpcbiAqIEBtb2R1bGUgcmVjb3JkZXJzXG4gKi9cbi8qKlxuICogZm9vdHByaW50anMvcmVjb3JkZXJzIC0tIEZhY3RvcnkgZnVuY3Rpb25zIGZvciBidWlsdC1pbiByZWNvcmRlcnMuXG4gKlxuICogSW1wb3J0OiBpbXBvcnQgeyBuYXJyYXRpdmUsIG1ldHJpY3MsIGRlYnVnLCBtYW5pZmVzdCB9IGZyb20gJ2Zvb3RwcmludGpzL3JlY29yZGVycyc7XG4gKlxuICogRWFjaCBmYWN0b3J5IHJldHVybnMgdGhlIHJhdyByZWNvcmRlciBpbnN0YW5jZSB3aXRoIGFkZGVkIHNob3J0IGNvbnZlbmllbmNlIG1ldGhvZHMuXG4gKiBQYXNzIGRpcmVjdGx5IHRvIGNoYXJ0LnJlY29yZGVyKCkuIE5vIHdyYXBwaW5nLCBubyBwcm94eWluZyAtLSBqdXN0IHRoZSBjbGFzcyArIHNob3J0Y3V0cy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXJPcHRpb25zIH0gZnJvbSAnLi9saWIvZW5naW5lL25hcnJhdGl2ZS9Db21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyLmpzJztcbmltcG9ydCB7IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvbmFycmF0aXZlL0NvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIuanMnO1xuaW1wb3J0IHR5cGUge1xuICBCcmVha1JlbmRlckNvbnRleHQsXG4gIENvbWJpbmVkTmFycmF0aXZlRW50cnksXG4gIERlY2lzaW9uUmVuZGVyQ29udGV4dCxcbiAgRW1pdFJlbmRlckNvbnRleHQsXG4gIEVycm9yUmVuZGVyQ29udGV4dCxcbiAgRm9ya1JlbmRlckNvbnRleHQsXG4gIExvb3BSZW5kZXJDb250ZXh0LFxuICBOYXJyYXRpdmVGb3JtYXR0ZXIsXG4gIE5hcnJhdGl2ZVJlbmRlcmVyLFxuICBPcFJlbmRlckNvbnRleHQsXG4gIFNlbGVjdGVkUmVuZGVyQ29udGV4dCxcbiAgU3RhZ2VSZW5kZXJDb250ZXh0LFxuICBTdWJmbG93UmVuZGVyQ29udGV4dCxcbn0gZnJvbSAnLi9saWIvZW5naW5lL25hcnJhdGl2ZS9uYXJyYXRpdmVUeXBlcy5qcyc7XG5pbXBvcnQgeyBBZGFwdGl2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9uYXJyYXRpdmUvcmVjb3JkZXJzL0FkYXB0aXZlTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmltcG9ydCB0eXBlIHsgTWFuaWZlc3RFbnRyeSB9IGZyb20gJy4vbGliL2VuZ2luZS9uYXJyYXRpdmUvcmVjb3JkZXJzL01hbmlmZXN0Rmxvd1JlY29yZGVyLmpzJztcbmltcG9ydCB7IE1hbmlmZXN0Rmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL25hcnJhdGl2ZS9yZWNvcmRlcnMvTWFuaWZlc3RGbG93UmVjb3JkZXIuanMnO1xuaW1wb3J0IHsgTWlsZXN0b25lTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL25hcnJhdGl2ZS9yZWNvcmRlcnMvTWlsZXN0b25lTmFycmF0aXZlRmxvd1JlY29yZGVyLmpzJztcbmltcG9ydCB7IFdpbmRvd2VkTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL25hcnJhdGl2ZS9yZWNvcmRlcnMvV2luZG93ZWROYXJyYXRpdmVGbG93UmVjb3JkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBFbWl0RXZlbnQsIEVtaXRSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL0VtaXRSZWNvcmRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IERlYnVnRW50cnksIERlYnVnUmVjb3JkZXJPcHRpb25zIH0gZnJvbSAnLi9saWIvc2NvcGUvcmVjb3JkZXJzL0RlYnVnUmVjb3JkZXIuanMnO1xuaW1wb3J0IHsgRGVidWdSZWNvcmRlciB9IGZyb20gJy4vbGliL3Njb3BlL3JlY29yZGVycy9EZWJ1Z1JlY29yZGVyLmpzJztcbmltcG9ydCB0eXBlIHsgQWdncmVnYXRlZE1ldHJpY3MsIE1ldHJpY1JlY29yZGVyT3B0aW9ucywgU3RhZ2VNZXRyaWNzIH0gZnJvbSAnLi9saWIvc2NvcGUvcmVjb3JkZXJzL01ldHJpY1JlY29yZGVyLmpzJztcbmltcG9ydCB7IE1ldHJpY1JlY29yZGVyIH0gZnJvbSAnLi9saWIvc2NvcGUvcmVjb3JkZXJzL01ldHJpY1JlY29yZGVyLmpzJztcblxuLy8gLS0tLSBOYXJyYXRpdmUgLS0tLVxuXG5leHBvcnQgdHlwZSBOYXJyYXRpdmVJbnN0YW5jZSA9IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIgJiB7XG4gIGxpbmVzKCk6IHN0cmluZ1tdO1xuICBzdHJ1Y3R1cmVkKCk6IENvbWJpbmVkTmFycmF0aXZlRW50cnlbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBuYXJyYXRpdmUob3B0aW9ucz86IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXJPcHRpb25zKTogTmFycmF0aXZlSW5zdGFuY2Uge1xuICBjb25zdCByZWMgPSBuZXcgQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlcihvcHRpb25zKSBhcyBOYXJyYXRpdmVJbnN0YW5jZTtcbiAgcmVjLmxpbmVzID0gZnVuY3Rpb24gKHRoaXM6IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROYXJyYXRpdmUoKTtcbiAgfTtcbiAgcmVjLnN0cnVjdHVyZWQgPSBmdW5jdGlvbiAodGhpczogQ29tYmluZWROYXJyYXRpdmVSZWNvcmRlcikge1xuICAgIHJldHVybiB0aGlzLmdldEVudHJpZXMoKTtcbiAgfTtcbiAgcmV0dXJuIHJlYztcbn1cblxuLy8gLS0tLSBNZXRyaWNzIC0tLS1cblxuZXhwb3J0IHR5cGUgTWV0cmljc0luc3RhbmNlID0gTWV0cmljUmVjb3JkZXIgJiB7XG4gIHJlYWRzKCk6IG51bWJlcjtcbiAgd3JpdGVzKCk6IG51bWJlcjtcbiAgY29tbWl0cygpOiBudW1iZXI7XG4gIHN0YWdlKG5hbWU6IHN0cmluZyk6IFN0YWdlTWV0cmljcyB8IHVuZGVmaW5lZDtcbiAgYWxsKCk6IEFnZ3JlZ2F0ZWRNZXRyaWNzO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG1ldHJpY3Mob3B0aW9ucz86IE1ldHJpY1JlY29yZGVyT3B0aW9ucyk6IE1ldHJpY3NJbnN0YW5jZSB7XG4gIGNvbnN0IHJlYyA9IG5ldyBNZXRyaWNSZWNvcmRlcihvcHRpb25zKSBhcyBNZXRyaWNzSW5zdGFuY2U7XG4gIHJlYy5yZWFkcyA9IGZ1bmN0aW9uICh0aGlzOiBNZXRyaWNSZWNvcmRlcikge1xuICAgIHJldHVybiB0aGlzLmdldE1ldHJpY3MoKS50b3RhbFJlYWRzO1xuICB9O1xuICByZWMud3JpdGVzID0gZnVuY3Rpb24gKHRoaXM6IE1ldHJpY1JlY29yZGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TWV0cmljcygpLnRvdGFsV3JpdGVzO1xuICB9O1xuICByZWMuY29tbWl0cyA9IGZ1bmN0aW9uICh0aGlzOiBNZXRyaWNSZWNvcmRlcikge1xuICAgIHJldHVybiB0aGlzLmdldE1ldHJpY3MoKS50b3RhbENvbW1pdHM7XG4gIH07XG4gIHJlYy5zdGFnZSA9IGZ1bmN0aW9uICh0aGlzOiBNZXRyaWNSZWNvcmRlciwgbmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhZ2VNZXRyaWNzKG5hbWUpO1xuICB9O1xuICByZWMuYWxsID0gZnVuY3Rpb24gKHRoaXM6IE1ldHJpY1JlY29yZGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TWV0cmljcygpO1xuICB9O1xuICByZXR1cm4gcmVjO1xufVxuXG4vLyAtLS0tIERlYnVnIC0tLS1cblxuZXhwb3J0IHR5cGUgRGVidWdJbnN0YW5jZSA9IERlYnVnUmVjb3JkZXIgJiB7XG4gIGxvZ3MoKTogRGVidWdFbnRyeVtdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlYnVnKG9wdGlvbnM/OiBEZWJ1Z1JlY29yZGVyT3B0aW9ucyk6IERlYnVnSW5zdGFuY2Uge1xuICBjb25zdCByZWMgPSBuZXcgRGVidWdSZWNvcmRlcihvcHRpb25zKSBhcyBEZWJ1Z0luc3RhbmNlO1xuICByZWMubG9ncyA9IGZ1bmN0aW9uICh0aGlzOiBEZWJ1Z1JlY29yZGVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RW50cmllcygpO1xuICB9O1xuICByZXR1cm4gcmVjO1xufVxuXG4vLyAtLS0tIE1hbmlmZXN0IC0tLS1cblxuZXhwb3J0IHR5cGUgTWFuaWZlc3RJbnN0YW5jZSA9IE1hbmlmZXN0Rmxvd1JlY29yZGVyICYge1xuICBlbnRyaWVzKCk6IE1hbmlmZXN0RW50cnlbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBtYW5pZmVzdCgpOiBNYW5pZmVzdEluc3RhbmNlIHtcbiAgY29uc3QgcmVjID0gbmV3IE1hbmlmZXN0Rmxvd1JlY29yZGVyKCkgYXMgTWFuaWZlc3RJbnN0YW5jZTtcbiAgcmVjLmVudHJpZXMgPSBmdW5jdGlvbiAodGhpczogTWFuaWZlc3RGbG93UmVjb3JkZXIpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRNYW5pZmVzdCgpO1xuICB9O1xuICByZXR1cm4gcmVjO1xufVxuXG4vLyAtLS0tIEZsb3cgcmVjb3JkZXIgc3RyYXRlZ2llcyAtLS0tXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGFwdGl2ZSgpIHtcbiAgcmV0dXJuIG5ldyBBZGFwdGl2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlcigpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1pbGVzdG9uZSgpIHtcbiAgcmV0dXJuIG5ldyBNaWxlc3RvbmVOYXJyYXRpdmVGbG93UmVjb3JkZXIoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3aW5kb3dlZChtYXhFbnRyaWVzPzogbnVtYmVyKSB7XG4gIHJldHVybiBuZXcgV2luZG93ZWROYXJyYXRpdmVGbG93UmVjb3JkZXIobWF4RW50cmllcyk7XG59XG5cbi8vIC0tLS0gUmUtZXhwb3J0ZWQgdHlwZXMgLS0tLVxuZXhwb3J0IHR5cGUge1xuICBCcmVha1JlbmRlckNvbnRleHQsXG4gIENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXJPcHRpb25zLFxuICBEZWNpc2lvblJlbmRlckNvbnRleHQsXG4gIEVtaXRFdmVudCxcbiAgRW1pdFJlY29yZGVyLFxuICBFbWl0UmVuZGVyQ29udGV4dCxcbiAgRXJyb3JSZW5kZXJDb250ZXh0LFxuICBGb3JrUmVuZGVyQ29udGV4dCxcbiAgTG9vcFJlbmRlckNvbnRleHQsXG4gIE5hcnJhdGl2ZUZvcm1hdHRlcixcbiAgTmFycmF0aXZlUmVuZGVyZXIsXG4gIE9wUmVuZGVyQ29udGV4dCxcbiAgU2VsZWN0ZWRSZW5kZXJDb250ZXh0LFxuICBTdGFnZVJlbmRlckNvbnRleHQsXG4gIFN1YmZsb3dSZW5kZXJDb250ZXh0LFxufTtcbmV4cG9ydCB0eXBlIHsgQWdncmVnYXRlZE1ldHJpY3MsIE1ldHJpY1JlY29yZGVyT3B0aW9ucywgU3RhZ2VNZXRyaWNzIH07XG5leHBvcnQgdHlwZSB7IENvbXBvc2l0ZVNuYXBzaG90IH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuZXhwb3J0IHsgQ29tcG9zaXRlUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG4iXX0=
|