footprintjs 9.23.2 → 9.24.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 +4 -4
- package/dist/advanced.js +6 -3
- package/dist/esm/advanced.d.ts +1 -1
- package/dist/esm/advanced.js +2 -2
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/lib/builder/FlowChartBuilder.d.ts +1 -0
- package/dist/esm/lib/builder/FlowChartBuilder.js +17 -1
- package/dist/esm/lib/builder/index.d.ts +1 -1
- package/dist/esm/lib/builder/index.js +1 -1
- package/dist/esm/lib/builder/structure/StructureRecorder.d.ts +32 -0
- package/dist/esm/lib/builder/structure/StructureRecorder.js +1 -1
- package/dist/esm/lib/builder/structure/StructureRecorderDispatcher.d.ts +2 -1
- package/dist/esm/lib/builder/structure/StructureRecorderDispatcher.js +13 -1
- package/dist/esm/lib/engine/handlers/ParallelForEachHandler.d.ts +8 -0
- package/dist/esm/lib/engine/handlers/ParallelForEachHandler.js +11 -2
- package/dist/esm/lib/engine/handlers/SubflowInputMapper.d.ts +10 -1
- package/dist/esm/lib/engine/handlers/SubflowInputMapper.js +36 -6
- package/dist/esm/lib/reactive/arrayTraps.js +14 -12
- package/dist/esm/lib/reactive/createTypedScope.js +20 -12
- package/dist/esm/lib/reactive/handles.d.ts +46 -0
- package/dist/esm/lib/reactive/handles.js +105 -0
- package/dist/esm/lib/reactive/index.d.ts +1 -0
- package/dist/esm/lib/reactive/index.js +2 -1
- package/dist/esm/lib/reactive/structuralWrite.d.ts +0 -15
- package/dist/esm/lib/reactive/structuralWrite.js +10 -28
- package/dist/esm/lib/reactive/writeTraps.d.ts +4 -3
- package/dist/esm/lib/reactive/writeTraps.js +8 -6
- package/dist/index.js +1 -1
- package/dist/lib/builder/FlowChartBuilder.js +17 -1
- package/dist/lib/builder/index.js +1 -1
- package/dist/lib/builder/structure/StructureRecorder.js +1 -1
- package/dist/lib/builder/structure/StructureRecorderDispatcher.js +13 -1
- package/dist/lib/engine/handlers/ParallelForEachHandler.js +11 -2
- package/dist/lib/engine/handlers/SubflowInputMapper.js +36 -6
- package/dist/lib/reactive/arrayTraps.js +14 -12
- package/dist/lib/reactive/createTypedScope.js +20 -12
- package/dist/lib/reactive/handles.js +112 -0
- package/dist/lib/reactive/index.js +6 -2
- package/dist/lib/reactive/structuralWrite.js +11 -30
- package/dist/lib/reactive/writeTraps.js +7 -5
- package/dist/types/advanced.d.ts +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/lib/builder/FlowChartBuilder.d.ts +1 -0
- package/dist/types/lib/builder/index.d.ts +1 -1
- package/dist/types/lib/builder/structure/StructureRecorder.d.ts +32 -0
- package/dist/types/lib/builder/structure/StructureRecorderDispatcher.d.ts +2 -1
- package/dist/types/lib/engine/handlers/ParallelForEachHandler.d.ts +8 -0
- package/dist/types/lib/engine/handlers/SubflowInputMapper.d.ts +10 -1
- package/dist/types/lib/reactive/handles.d.ts +46 -0
- package/dist/types/lib/reactive/index.d.ts +1 -0
- package/dist/types/lib/reactive/structuralWrite.d.ts +0 -15
- package/dist/types/lib/reactive/writeTraps.d.ts +4 -3
- package/package.json +1 -1
|
@@ -8,4 +8,4 @@ export { DeciderList, FlowChartBuilder, SelectorFnList } from './FlowChartBuilde
|
|
|
8
8
|
export { flowChart, flowChartSelector, specToStageNode } from './FlowChartBuilder.js';
|
|
9
9
|
export type { BranchChart, ExecOptions, FlowChart, FlowChartOptions, FlowChartSpec, ILogger, ParallelForEachConfig, RetryPolicy, ScopeProtectionMode, SerializedPipelineStructure, SimplifiedParallelSpec, StageFn, StageFunction, StageNode, StreamCallback, StreamHandlers, StreamLifecycleHandler, StreamTokenHandler, SubflowMountOptions, SubflowRef, } from './types.js';
|
|
10
10
|
export { ArrayMergeMode } from './types.js';
|
|
11
|
-
export type { StructureDeciderCompleteEvent, StructureEdgeAddedEvent, StructureEdgeKind, StructureLoopEdgeAddedEvent, StructureRecorder, StructureStageAddedEvent, StructureSubflowMountedEvent, } from './structure/StructureRecorder.js';
|
|
11
|
+
export type { StructureDeciderCompleteEvent, StructureEdgeAddedEvent, StructureEdgeKind, StructureLoopEdgeAddedEvent, StructureRecorder, StructureStageAddedEvent, StructureStageTaggedEvent, StructureSubflowMountedEvent, } from './structure/StructureRecorder.js';
|
|
@@ -10,4 +10,4 @@ export { DeciderList, FlowChartBuilder, SelectorFnList } from './FlowChartBuilde
|
|
|
10
10
|
// Factory & utilities
|
|
11
11
|
export { flowChart, flowChartSelector, specToStageNode } from './FlowChartBuilder.js';
|
|
12
12
|
export { ArrayMergeMode } from './types.js';
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEJBQTBCO0FBQzFCOzs7OztHQUtHO0FBRUgsVUFBVTtBQUNWLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEYsc0JBQXNCO0FBQ3RCLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUF5QnRGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuLyoqXG4gKiBidWlsZGVyLyDigJQgRmxvd2NoYXJ0IGNvbnN0cnVjdGlvbiBsaWJyYXJ5ICh6ZXJvIGRlcHMgb24gb2xkIGNvZGUpXG4gKlxuICogRmx1ZW50IEFQSSBmb3IgYnVpbGRpbmcgU3RhZ2VOb2RlIHRyZWVzIGFuZCBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUuXG4gKiBDYW4gYmUgdXNlZCBzdGFuZGFsb25lIGZvciBidWlsZGluZyBmbG93Y2hhcnQgc3BlY3Mgd2l0aG91dCBleGVjdXRpb24uXG4gKi9cblxuLy8gQ2xhc3Nlc1xuZXhwb3J0IHsgRGVjaWRlckxpc3QsIEZsb3dDaGFydEJ1aWxkZXIsIFNlbGVjdG9yRm5MaXN0IH0gZnJvbSAnLi9GbG93Q2hhcnRCdWlsZGVyLmpzJztcblxuLy8gRmFjdG9yeSAmIHV0aWxpdGllc1xuZXhwb3J0IHsgZmxvd0NoYXJ0LCBmbG93Q2hhcnRTZWxlY3Rvciwgc3BlY1RvU3RhZ2VOb2RlIH0gZnJvbSAnLi9GbG93Q2hhcnRCdWlsZGVyLmpzJztcblxuLy8gVHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgQnJhbmNoQ2hhcnQsXG4gIEV4ZWNPcHRpb25zLFxuICBGbG93Q2hhcnQsXG4gIEZsb3dDaGFydE9wdGlvbnMsXG4gIEZsb3dDaGFydFNwZWMsXG4gIElMb2dnZXIsXG4gIFBhcmFsbGVsRm9yRWFjaENvbmZpZyxcbiAgUmV0cnlQb2xpY3ksXG4gIFNjb3BlUHJvdGVjdGlvbk1vZGUsXG4gIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSxcbiAgU2ltcGxpZmllZFBhcmFsbGVsU3BlYyxcbiAgU3RhZ2VGbixcbiAgU3RhZ2VGdW5jdGlvbixcbiAgU3RhZ2VOb2RlLFxuICBTdHJlYW1DYWxsYmFjayxcbiAgU3RyZWFtSGFuZGxlcnMsXG4gIFN0cmVhbUxpZmVjeWNsZUhhbmRsZXIsXG4gIFN0cmVhbVRva2VuSGFuZGxlcixcbiAgU3ViZmxvd01vdW50T3B0aW9ucyxcbiAgU3ViZmxvd1JlZixcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5leHBvcnQgeyBBcnJheU1lcmdlTW9kZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyDilIDilIAgTDcg4oCUIFN0cnVjdHVyYWwgb2JzZXJ2ZXIgc3VyZmFjZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIGBTdHJ1Y3R1cmVSZWNvcmRlcmAgaXMgdGhlIGJ1aWxkLXRpbWUgdHdpbiBvZiBgRmxvd1JlY29yZGVyYC4gVG9nZXRoZXIgdGhleVxuLy8gY292ZXIgYm90aCBwaGFzZXMgb2YgY2hhcnQgbGlmZSDigJQgc2VlIGBTdHJ1Y3R1cmVSZWNvcmRlci50c2AgSlNEb2MgZm9yIHRoZVxuLy8gYXJjaGl0ZWN0dXJhbCByYXRpb25hbGUgKHdoeSB0d28gaW50ZXJmYWNlcywgbm90IG9uZSBwaGFzZS10YWdnZWQgZXZlbnQpLlxuZXhwb3J0IHR5cGUge1xuICBTdHJ1Y3R1cmVEZWNpZGVyQ29tcGxldGVFdmVudCxcbiAgU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZUVkZ2VLaW5kLFxuICBTdHJ1Y3R1cmVMb29wRWRnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZVJlY29yZGVyLFxuICBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZVN0YWdlVGFnZ2VkRXZlbnQsXG4gIFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQsXG59IGZyb20gJy4vc3RydWN0dXJlL1N0cnVjdHVyZVJlY29yZGVyLmpzJztcbiJdfQ==
|
|
@@ -191,6 +191,16 @@ export interface StructureStageAddedEvent {
|
|
|
191
191
|
/** True for nodes added via `addPausableFunction()` — useful for
|
|
192
192
|
* visualisers that want to mark stages that can pause execution. */
|
|
193
193
|
readonly isPausable?: boolean;
|
|
194
|
+
/**
|
|
195
|
+
* The names declared on the stage AT EVENT FIRE TIME (`options.tags`
|
|
196
|
+
* lands before this event fires; absent when none — the "absent when
|
|
197
|
+
* empty" law the commit bundle keeps). Names declared afterwards
|
|
198
|
+
* through the `.tag(...)` cursor door arrive as their own
|
|
199
|
+
* {@link StructureRecorder.onStageTagged} event — a recorder that
|
|
200
|
+
* copies fields here instead of holding `spec` would otherwise
|
|
201
|
+
* never learn of them (9.24.0).
|
|
202
|
+
*/
|
|
203
|
+
readonly tags?: readonly string[];
|
|
194
204
|
/** Live reference to the full spec node, for handlers that want
|
|
195
205
|
* details beyond the discriminator fields above. MUST NOT be
|
|
196
206
|
* mutated by the handler — readonly is type-level intent; no
|
|
@@ -198,6 +208,26 @@ export interface StructureStageAddedEvent {
|
|
|
198
208
|
* trust-model caveats. */
|
|
199
209
|
readonly spec: FlowChartSpec;
|
|
200
210
|
}
|
|
211
|
+
/**
|
|
212
|
+
* Event payload for `StructureRecorder.onStageTagged`. Fires when names
|
|
213
|
+
* land on a stage AFTER its `onStageAdded` already fired — the
|
|
214
|
+
* `.tag(...)` cursor door (`flowChart(...).addFunction(...).tag('a')`).
|
|
215
|
+
* Names declared in the same call as the stage (`options.tags`,
|
|
216
|
+
* `SubflowMountOptions.tags`) ride `StructureStageAddedEvent.tags` and
|
|
217
|
+
* do NOT fire this: one declaration, one event. `tags` is the COMPLETE
|
|
218
|
+
* list on the stage after the door — the builder refuses a second
|
|
219
|
+
* declaration on the same stage, so it is also the only one.
|
|
220
|
+
*/
|
|
221
|
+
export interface StructureStageTaggedEvent {
|
|
222
|
+
/** The builder's LOCAL stage id (see `StructureStageAddedEvent.stageId`). */
|
|
223
|
+
readonly stageId: string;
|
|
224
|
+
/** Human-readable label for the node. */
|
|
225
|
+
readonly name: string;
|
|
226
|
+
/** Every name now declared on the stage. */
|
|
227
|
+
readonly tags: readonly string[];
|
|
228
|
+
/** Live reference to the spec node — same caveats as on `onStageAdded`. */
|
|
229
|
+
readonly spec: FlowChartSpec;
|
|
230
|
+
}
|
|
201
231
|
/** Edge kinds the builder produces at structural time. Matches the
|
|
202
232
|
* footprintjs control-flow vocabulary used at runtime.
|
|
203
233
|
*
|
|
@@ -342,6 +372,8 @@ export interface StructureRecorder {
|
|
|
342
372
|
*/
|
|
343
373
|
readonly id: string;
|
|
344
374
|
onStageAdded?(event: StructureStageAddedEvent): void;
|
|
375
|
+
/** Names that landed on a stage after its `onStageAdded` (the `.tag()` door). */
|
|
376
|
+
onStageTagged?(event: StructureStageTaggedEvent): void;
|
|
345
377
|
onEdgeAdded?(event: StructureEdgeAddedEvent): void;
|
|
346
378
|
onLoopEdgeAdded?(event: StructureLoopEdgeAddedEvent): void;
|
|
347
379
|
onDeciderComplete?(event: StructureDeciderCompleteEvent): void;
|
|
@@ -155,4 +155,4 @@
|
|
|
155
155
|
* ```
|
|
156
156
|
*/
|
|
157
157
|
export {};
|
|
158
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RydWN0dXJlUmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvc3RydWN0dXJlL1N0cnVjdHVyZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJKRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3RydWN0dXJlUmVjb3JkZXIg4oCUIHBhc3NpdmUgb2JzZXJ2ZXIgb2YgQlVJTEQtVElNRSBjaGFydCBjb25zdHJ1Y3Rpb24gZXZlbnRzLlxuICpcbiAqIFRoZSBidWlsZC10aW1lIHR3aW4gb2YgYEZsb3dSZWNvcmRlcmAuIFdoZXJlIGBGbG93UmVjb3JkZXJgIG9ic2VydmVzXG4gKiBSVU5USU1FIGNvbnRyb2wtZmxvdyB0cmFuc2l0aW9ucyAocGVyLWV4ZWN1dGlvbiBgcnVudGltZVN0YWdlSWRgLFxuICogaXRlcmF0aW9uIGNvdW50cywgZXJyb3JzLCBwYXVzZXMpLCBgU3RydWN0dXJlUmVjb3JkZXJgIG9ic2VydmVzXG4gKiBTVEFUSUMgY2hhcnQgc2hhcGUgYXMgaXQncyBhc3NlbWJsZWQgYnkgdGhlIGJ1aWxkZXIg4oCUIGV2ZXJ5IHNwZWNcbiAqIG5vZGUgYWRkZWQsIGV2ZXJ5IG91dGdvaW5nIGVkZ2Ugd2lyZWQsIGV2ZXJ5IGRlY2lkZXIgY2xvc2VkLlxuICpcbiAqIFdoeSB0d28gaW50ZXJmYWNlcywgbm90IG9uZVxuICog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiAgIEJ1aWxkIGFuZCBydW50aW1lIGV2ZW50cyBoYXZlIGRpZmZlcmVudCBJTlZBUklBTlRTLCBub3QganVzdFxuICogICBkaWZmZXJlbnQgdGltaW5nOlxuICpcbiAqICAgICAtIFJ1bnRpbWUgZXZlbnRzIGNhcnJ5IGBydW50aW1lU3RhZ2VJZGAgKGBbc3ViZmxvd1BhdGgvXXN0YWdlSWQjTmApLFxuICogICAgICAgYGl0ZXJhdGlvbmAsIGB0cmF2ZXJzYWxDb250ZXh0YCDigJQgbG9hZC1iZWFyaW5nIGZvciB0aW1lLXRyYXZlbFxuICogICAgICAgVUlzLCBjb21taXQtbG9nIGluZGljZXMsIGFuZCBgU2VxdWVuY2VTdG9yZTxUPmAgY29uc3VtZXJzLlxuICogICAgICAgTk9ORSBvZiB0aGVzZSBleGlzdCBhdCBidWlsZCB0aW1lLlxuICpcbiAqICAgICAtIEJ1aWxkIGV2ZW50cyBjYXJyeSBvbmx5IGBzdGFnZUlkYCArIHN0cnVjdHVyYWwgZmllbGRzLiBOb1xuICogICAgICAgZXhlY3V0aW9uIGluZGV4LCBubyBpdGVyYXRpb24sIG5vIHNuYXBzaG90LlxuICpcbiAqICAgICAtIFNvbWUgZXZlbnRzIGhhdmUgbm8gYW5hbG9nIGFjcm9zcyBwaGFzZXM6IGBvblBhdXNlYCAvXG4gKiAgICAgICBgb25SZXN1bWVgIC8gYG9uRXJyb3JgIC8gYG9uUnVuU3RhcnRgIGFyZSBydW50aW1lLW9ubHk7XG4gKiAgICAgICBgb25EZWNpZGVyQ29tcGxldGVgIC8gYG9uU3RhZ2VBZGRlZGAgYXJlIGJ1aWxkLW9ubHkuXG4gKlxuICogICBBIHNpbmdsZSBgRmxvd1JlY29yZGVyYCB3aXRoIGBwaGFzZTogJ3N0YXRpYycgfCAnZHluYW1pYydgXG4gKiAgIGRpc2NyaW1pbmF0b3Igd291bGQgZm9yY2UgZXZlcnkgY29uc3VtZXIgdG8gd3JpdGVcbiAqICAgYGlmIChlLnBoYXNlID09PSAnc3RhdGljJykgLi4uYCBicmFuY2hlcyBhbmQgd291bGQgZXJhc2UgdGhlXG4gKiAgIGxlYXN0LXByaXZpbGVnZSBib3VuZGFyeSAoYSBzdGF0aWMtb25seSBjb25zdW1lciBzaG91bGQgTk9UXG4gKiAgIGFjY2lkZW50YWxseSBvYnNlcnZlIHJ1bnRpbWUgZGF0YSDigJQgZS5nLiwgYSBwdWJsaWMgZG9jcyBzaXRlXG4gKiAgIHJlbmRlcmluZyBjaGFydCB0b3BvbG9neSBtdXN0IG5vdCBzZWUgc2NvcGUgdmFsdWVzKS5cbiAqXG4gKiAgIFR3byBpbnRlcmZhY2VzLCBzYW1lIG1lbnRhbCBtb2RlbCwgY2xlYW4gc2VwYXJhdGlvbi4gVHdvXG4gKiAgIHJlZ2lzdHJhdGlvbiBzaXRlcyBzaGlwIHRvZGF5IChwaWNrIHdoaWNoZXZlciBmaXRzIHlvdXIgY2FsbFxuICogICBzaXRlKTpcbiAqXG4gKiAgICAgMS4gKipPcHRpb25zLWJhZyoqIChwcmVmZXJyZWQgd2hlbiB0aGUgcmVjb3JkZXIgc2V0IGlzIGtub3duXG4gKiAgICAgICAgYXQgY29uc3RydWN0aW9uIHRpbWUg4oCUIHJlZ2lzdGVycyBCRUZPUkUgYHN0YXJ0KClgIHNvIGV2ZW5cbiAqICAgICAgICB0aGUgc2VlZCBldmVudCBmaXJlcyB0aHJvdWdoIHRoZSBub3JtYWwgZGlzcGF0Y2hlciBmYW4tb3V0KTpcbiAqICAgICAgICBgYGB0c1xuICogICAgICAgIGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcsIHsgc3RydWN0dXJlUmVjb3JkZXJzOiBbcmVjXSB9KVxuICogICAgICAgICAgLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpLmJ1aWxkKCk7XG4gKiAgICAgICAgYGBgXG4gKlxuICogICAgIDIuICoqRmx1ZW50KiogKHByZWZlcnJlZCB3aGVuIGF0dGFjaCBpcyBjb25kaXRpb25hbCwgbGF0ZSwgb3JcbiAqICAgICAgICBpbiBhIGNoYWluIGJ1aWxkZXIg4oCUIHRoZSBqdXN0LWF0dGFjaGVkIHJlY29yZGVyIGdldHMgYVxuICogICAgICAgIG9uZS10aW1lIHNlZWQgcmVwbGF5IHNvIGl0IG9ic2VydmVzIHRoZSByb290IHN0YWdlKTpcbiAqICAgICAgICBgYGB0c1xuICogICAgICAgIGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcpXG4gKiAgICAgICAgICAuYXR0YWNoU3RydWN0dXJlUmVjb3JkZXIocmVjKVxuICogICAgICAgICAgLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpLmJ1aWxkKCk7XG4gKiAgICAgICAgYGBgXG4gKlxuICogICBCb3RoIGRlbGl2ZXIgdGhlIHNhbWUgZXZlbnQgc3RyZWFtIHRvIHRoZSBzYW1lIHJlY29yZGVyLiBTZWUgdGhlXG4gKiAgIGBAZXhhbXBsZWAgYmxvY2sgYmVsb3cgZm9yIGEgZnVsbHktZmxlc2hlZC1vdXQgaW1wbGVtZW50YXRpb24uXG4gKlxuICogTGlmZWN5Y2xlICsgb3JkZXJpbmcgaW52YXJpYW50c1xuICog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiAgIC0gRmlyZXMgU1lOQ0hST05PVVNMWSBkdXJpbmcgYnVpbGRlciBjaGFpbiBjYWxscyAoYW5kIGR1cmluZ1xuICogICAgIGAuYnVpbGQoKWAgZm9yIHRoZSB0ZXJtaW5hbCBub2RlKSBhdCB0aGUgbmF0dXJhbCBtb21lbnQgZWFjaFxuICogICAgIHNwZWMgbXV0YXRpb24gY29tcGxldGVzLlxuICogICAtIGBvblN0YWdlQWRkZWQoQSlgIGFuZCBgb25TdGFnZUFkZGVkKEIpYCBmaXJlIEJFRk9SRSBhbnlcbiAqICAgICBgb25FZGdlQWRkZWQoe2Zyb206IEEsIHRvOiBCfSlgIOKAlCBlbmRwb2ludCByZWdpc3RyYXRpb25cbiAqICAgICBoYXBwZW5zIGJlZm9yZSBlZGdlIHdpcmluZy5cbiAqICAgLSBgb25EZWNpZGVyQ29tcGxldGUoRClgIGZpcmVzIGF0IHN1Yi1idWlsZGVyIGAuZW5kKClgIHRpbWUsIEFGVEVSXG4gKiAgICAgZXZlcnkgY2hpbGQncyBgb25TdGFnZUFkZGVkYCBhbmQgZXZlcnkgYG9uRWRnZUFkZGVkKHtmcm9tOiBELFxuICogICAgIHRvOiBjaGlsZH0pYC4gTWFya3MgdGhlIGRlY2lkZXIgYXMgbm8tZnVydGhlci1tdXRhdGlvbi5cbiAqICAgLSBgb25TdWJmbG93TW91bnRlZCh7c3ViZmxvd0lkfSlgIGZpcmVzIG9uY2UgcGVyIG1vdW50LlxuICogICAgICoqTU9VTlQtT05MWSoqOiBwYXJlbnQgcmVjb3JkZXJzIGRvIE5PVCByZWNlaXZlIGEgcmVwbGF5IG9mXG4gKiAgICAgdGhlIHN1YmZsb3cncyBvd24gaW50ZXJuYWwgc3RydWN0dXJlIGV2ZW50cyAodGhvc2UgZmlyZWRcbiAqICAgICBkdXJpbmcgdGhlIHN1YmZsb3cncyBvd24gYC5idWlsZCgpYCkuIE1hdGNoZXMgdGhlIHJ1bnRpbWVcbiAqICAgICBgb25TdWJmbG93RW50cnlgIHNlbWFudGljcyDigJQgY29tcG9zaXRpb24gb3ZlciByZXBsYXkuXG4gKlxuICogRXJyb3IgaXNvbGF0aW9uIChtYXRjaGVzIEZsb3dSZWNvcmRlciBjb250cmFjdClcbiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogICAtIEEgdGhyb3dpbmcgaGFuZGxlciBpcyBjYXVnaHQsIGxvZ2dlZCB2aWEgYGlzRGV2TW9kZSgpYCB3YXJuaW5nLFxuICogICAgIGFuZCBhY2N1bXVsYXRlZCBvbiBgYnVpbGRlci5nZXRTdHJ1Y3R1cmVCdWlsZEVycm9ycygpYCBmb3JcbiAqICAgICBwb3N0LWhvYyBpbnNwZWN0aW9uLlxuICogICAtIFN1YnNlcXVlbnQgcmVjb3JkZXJzICsgc3Vic2VxdWVudCBldmVudHMgZmlyZSBub3JtYWxseTsgb25lXG4gKiAgICAgbWlzYmVoYXZpbmcgcmVjb3JkZXIgY2Fubm90IFRIUk9XIGl0cyB3YXkgaW50byBibG9ja2luZ1xuICogICAgIGNvbnN0cnVjdGlvbi5cbiAqICAgLSBUaGUgZXJyb3JzW10gYWNjdW11bGF0b3IgaXMgc29mdC1jYXBwZWQgKH4xMDAgZW50cmllcykgd2l0aCBhXG4gKiAgICAgYF9fdHJ1bmNhdGVkX19gIHNlbnRpbmVsIHJlY29yZCBvbmNlIHRoZSBjYXAgaXMgaGl0LCB0byBwcmV2ZW50XG4gKiAgICAgdW5ib3VuZGVkIGdyb3d0aCBvbiBjaGF0dHkgYnJva2VuIHJlY29yZGVycy5cbiAqICAgLSBOb3RlOiB0aHJvdyBpc29sYXRpb24gZG9lcyBOT1QgZGVmZW5kIGFnYWluc3QgYSBoYW5kbGVyIHRoYXRcbiAqICAgICBzdWNjZWVkcyBhdCBydW50aW1lIGJ1dCBtdXRhdGVzIGBldmVudC5zcGVjYCB0byBjb3JydXB0IHRoZVxuICogICAgIGNoYXJ0LiBTZWUgXCJTcGVjIG11dGF0aW9uXCIgYmVsb3cuXG4gKlxuICogU3BlYyBtdXRhdGlvbiDigJQgcmVhZG9ubHktYnktY29udHJhY3QgKE5PVCBydW50aW1lLWVuZm9yY2VkKVxuICog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiAgIC0gRXZlbnQgcGF5bG9hZHMgcGFzcyBzcGVjIHJlZmVyZW5jZXMgd2hlcmUgdXNlZnVsIChlLmcuLCBgc3BlY2BcbiAqICAgICBvbiBgb25TdGFnZUFkZGVkYCkuIEV2ZXJ5IGZpZWxkIG9uIGV2ZXJ5IGV2ZW50IHBheWxvYWQgaXNcbiAqICAgICBtYXJrZWQgYHJlYWRvbmx5YCBpbiBUeXBlU2NyaXB0IOKAlCB0aGUgdHlwZSBzeXN0ZW0gc2lnbmFsc1xuICogICAgIGNvbnN1bWVyIGludGVudCBhdCBhdXRob3IgdGltZS5cbiAqICAgLSBUaGVyZSBpcyBOTyBydW50aW1lIGZyZWV6ZS4gVGhlIGJ1aWxkZXIgZmlyZXMgYG9uU3RhZ2VBZGRlZGBcbiAqICAgICBJTU1FRElBVEVMWSB3aGVuIGEgc3BlYyBub2RlIGlzIGFkZGVkLCBCRUZPUkUgdGhlIGJ1aWxkZXJcbiAqICAgICB3aXJlcyB0aGF0IG5vZGUncyBgLm5leHRgL2AuY2hpbGRyZW5gL2AubG9vcFRhcmdldGAgaW4gdGhlXG4gKiAgICAgc3Vic2VxdWVudCBgYWRkWGAgY2FsbC4gRnJlZXppbmcgaGVyZSB3b3VsZCBicmVhayB0aGVcbiAqICAgICBidWlsZGVyJ3Mgb3duIHN1YnNlcXVlbnQgbXV0YXRpb24uXG4gKiAgIC0gSGFuZGxlciBtdXRhdGlvbiBvZiBgZXZlbnQuc3BlY2AgaXMgRE9DVU1FTlRFRCBVTkRFRklORURcbiAqICAgICBCRUhBVklPUiDigJQgaXQgd2lsbCBzdWNjZWVkIGF0IHJ1bnRpbWUsIGJ1dCBpcyBub3Qgc3VwcG9ydGVkXG4gKiAgICAgYW5kIGRvd25zdHJlYW0gY29uc3VtZXJzIG1heSBicmVhay4gU3BlY2lmaWNhbGx5LCBtdXRhdGluZ1xuICogICAgIGBldmVudC5zcGVjLmZuYCwgYGV2ZW50LnNwZWMuaWRgLCBvciBgZXZlbnQuc3BlYy5jaGlsZHJlbmBcbiAqICAgICBjYW4gY29ycnVwdCBzdWJzZXF1ZW50IHJ1bnRpbWUgYmVoYXZpb3Igb2YgdGhlIGNoYXJ0LlxuICogICAtICoqVHJ1c3QgbW9kZWwqKjogYXR0YWNoIE9OTFkgcmVjb3JkZXJzIGZyb20gdHJ1c3RlZCBjb2RlIHBhdGhzLlxuICogICAgIEEgaG9zdGlsZSBvciBidWdneSByZWNvcmRlciBjYW4gZWZmZWN0aXZlbHkgc3Vic3RpdHV0ZSBzdGFnZVxuICogICAgIGZ1bmN0aW9ucyBvciByZXdpcmUgdGhlIGNoYXJ0IHN0cnVjdHVyZS4gVGhlIGByZWFkb25seWBcbiAqICAgICBtYXJrZXJzIGNhbm5vdCBkZWZlbmQgYWdhaW5zdCBpbnRlbnRpb25hbCBtdXRhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNsYXNzIFRyYWNlU3RydWN0dXJlUmVjb3JkZXIgaW1wbGVtZW50cyBTdHJ1Y3R1cmVSZWNvcmRlciB7XG4gKiAgIHJlYWRvbmx5IGlkID0gJ3RyYWNlLXN0YXRpYyc7XG4gKiAgIG5vZGVzOiBYeWZsb3dOb2RlW10gPSBbXTtcbiAqICAgZWRnZXM6IFh5Zmxvd0VkZ2VbXSA9IFtdO1xuICpcbiAqICAgb25TdGFnZUFkZGVkKGUpIHtcbiAqICAgICAvLyBOb2RlIHJvbGU6ICdzdGFnZScgaXMgdGhlIGluaXRpYWwgdHlwZS4gSWYgb3V0Z29pbmcgZWRnZXNcbiAqICAgICAvLyBhcnJpdmUgd2l0aCBraW5kICdmb3JrLWJyYW5jaCcgLyAnZGVjaXNpb24tYnJhbmNoJyB0aGUgbm9kZVxuICogICAgIC8vIGlzIGZ1bmN0aW9uaW5nIGFzIGEgZm9yay9kZWNpZGVyIOKAlCBkZXJpdmUgdGhlIHZpc3VhbCBzdHlsZVxuICogICAgIC8vIGZyb20gdGhvc2UgZWRnZXMsIG5vdCBmcm9tIGBlLnR5cGVgIGFsb25lLlxuICogICAgIHRoaXMubm9kZXMucHVzaCh7IGlkOiBlLnN0YWdlSWQsIHR5cGU6ICdsZW5zU3RhZ2UnLCBkYXRhOiB7IGxhYmVsOiBlLm5hbWUgfSB9KTtcbiAqICAgfVxuICogICBvbkVkZ2VBZGRlZChlKSB7XG4gKiAgICAgdGhpcy5lZGdlcy5wdXNoKHsgaWQ6IGAke2UuZnJvbX0tPiR7ZS50b31gLCBzb3VyY2U6IGUuZnJvbSwgdGFyZ2V0OiBlLnRvIH0pO1xuICogICB9XG4gKiAgIG9uU3ViZmxvd01vdW50ZWQoZSkge1xuICogICAgIHRoaXMubm9kZXMucHVzaCh7IGlkOiBlLnN1YmZsb3dJZCwgdHlwZTogJ3N1YmZsb3cnLCBkYXRhOiB7IGxhYmVsOiBlLnN1YmZsb3dOYW1lIH0gfSk7XG4gKiAgIH1cbiAqICAgb25EZWNpZGVyQ29tcGxldGUoZSkge1xuICogICAgIC8vIE9wdGlvbmFsOiBmaW5hbGl6ZSBub2RlIHN0eWxpbmcgbm93IHRoYXQgYnJhbmNoIGxpc3QgaXMgc2VhbGVkLlxuICogICB9XG4gKiB9XG4gKlxuICogLy8gUmVnaXN0cmF0aW9uIG9wdGlvbiBBIOKAlCBvcHRpb25zLWJhZyAocHJlZmVycmVkIHdoZW4gcmVjb3JkZXJzXG4gKiAvLyBhcmUga25vd24gdXAgZnJvbnQ7IGF0dGFjaGVzIEJFRk9SRSB0aGUgc2VlZCBldmVudCBmaXJlcyk6XG4gKiBjb25zdCByZWMgPSBuZXcgVHJhY2VTdHJ1Y3R1cmVSZWNvcmRlcigpO1xuICogY29uc3QgYnVpbGRlciA9IGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcsIHtcbiAqICAgc3RydWN0dXJlUmVjb3JkZXJzOiBbcmVjXSxcbiAqIH0pLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpO1xuICogY29uc3QgY2hhcnQgPSBidWlsZGVyLmJ1aWxkKCk7XG4gKlxuICogLy8gUmVnaXN0cmF0aW9uIG9wdGlvbiBCIOKAlCBmbHVlbnQgY2hhaW4gKHByZWZlcnJlZCBmb3IgY29uZGl0aW9uYWxcbiAqIC8vIG9yIGxhdGUgYXR0YWNoOyB0aGUganVzdC1hdHRhY2hlZCByZWNvcmRlciBnZXRzIGEgc2VlZCByZXBsYXkpOlxuICogY29uc3QgcmVjMiA9IG5ldyBUcmFjZVN0cnVjdHVyZVJlY29yZGVyKCk7XG4gKiBjb25zdCBidWlsZGVyMiA9IGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcpXG4gKiAgIC5hdHRhY2hTdHJ1Y3R1cmVSZWNvcmRlcihyZWMyKVxuICogICAuYWRkRnVuY3Rpb24oJ2EnLCBmbkEsICdhJyk7XG4gKlxuICogLy8gSW5zcGVjdCBhbnkgcmVjb3JkZXIgZXJyb3JzIChjYWxsIG9uIHRoZSBCVUlMREVSLCBub3QgdGhlIGNoYXJ0KTpcbiAqIGNvbnN0IGVycm9ycyA9IGJ1aWxkZXIuZ2V0U3RydWN0dXJlQnVpbGRFcnJvcnMoKTtcbiAqXG4gKiA8UmVhY3RGbG93IG5vZGVzPXtyZWMubm9kZXN9IGVkZ2VzPXtyZWMuZWRnZXN9IC8+XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dDaGFydFNwZWMsIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBFdmVudCBwYXlsb2FkIHR5cGVzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25TdGFnZUFkZGVkYC4gRmlyZXMgZm9yIGV2ZXJ5XG4gKiBzcGVjIG5vZGUgYWRkZWQgdG8gdGhlIGNoYXJ0LCBpbmNsdWRpbmcgdGhlIHNlZWQgKGFkZGVkIHZpYVxuICogYGZsb3dDaGFydCgpYCBmYWN0b3J5KSBhbmQgc3ViZmxvdyBtb3VudCBub2Rlcy4gRXhjbHVkZXMgc3ludGhldGljXG4gKiBsb29wLXJlZmVyZW5jZSBub2RlcyAodGhvc2UgY2FycnkgYGlzTG9vcFJlZmVyZW5jZTogdHJ1ZWAgb24gdGhlXG4gKiBzcGVjOyBjb25zdW1lcnMgc2VlIHRoZW0gdmlhIHRoZSBzZXBhcmF0ZSBgb25Mb29wRWRnZUFkZGVkYCBldmVudFxuICogaW5zdGVhZCBvZiBhcyBmcmVzaCBzdGFnZXMpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCB7XG4gIC8qKlxuICAgKiBTdGFibGUgaWRlbnRpZmllciBmb3IgdGhpcyBub2RlLiBBVCBFVkVOVCBGSVJFIFRJTUUgdGhpcyBpcyB0aGVcbiAgICogYnVpbGRlcidzIExPQ0FMIGZvcm0gKG5vIHN1YmZsb3cgcHJlZml4IOKAlCB0aGUgcHJlZml4IGlzIGFwcGxpZWRcbiAgICogbGF0ZXIgYnkgYF9wcmVmaXhOb2RlVHJlZWAgd2hlbiB0aGlzIGJ1aWxkZXIgaXMgbW91bnRlZCBhcyBhXG4gICAqIHN1YmZsb3cgaW50byBhIHBhcmVudCkuXG4gICAqXG4gICAqIE5vdGU6IGBzcGVjLmlkYCBpcyBhIExJVkUgcmVmZXJlbmNlLiBJZiB5b3UgcmVhZCBpdCBBRlRFUiB0aGlzXG4gICAqIGNoYXJ0IGhhcyBiZWVuIG1vdW50ZWQgYXMgYSBzdWJmbG93LCBpdCBtYXkgaGF2ZSBiZWVuIHJld3JpdHRlblxuICAgKiB0byB0aGUgRlVMTCBwcmVmaXhlZCBmb3JtLiBVc2UgYHNwbGl0U3RhZ2VJZChzcGVjLmlkKWAgZnJvbVxuICAgKiBgZm9vdHByaW50anMvdHJhY2VgIHRvIGRlY29tcG9zZSBpdCBiYWNrIGludG8gbG9jYWwgKyBzdWJmbG93UGF0aC5cbiAgICpcbiAgICogQ29ycmVsYXRpbmcgd2l0aCBydW50aW1lIGV2ZW50czpcbiAgICogICAtIFNhbWUgYnVpbGRlciAobm8gbW91bnQpIOKGklxuICAgKiAgICAgYGV2ZW50LnN0YWdlSWQgPT09IHBhcnNlUnVudGltZVN0YWdlSWQocnVudGltZSkuc3RhZ2VJZGBcbiAgICogICAtIFRoaXMgYnVpbGRlciBtb3VudGVkIGFzIHN1YmZsb3cg4oaSIHVzZSBgc3BsaXRTdGFnZUlkYCBvbiB0aGVcbiAgICogICAgIHByZWZpeGVkIGZvcm0gKG9yIGBwYXJzZVJ1bnRpbWVTdGFnZUlkYCBvbiB0aGUgZnVsbFxuICAgKiAgICAgcnVudGltZVN0YWdlSWQpIGJlZm9yZSBjb21wYXJpbmcuXG4gICAqL1xuICByZWFkb25seSBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIG5vZGUuICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgLyoqIFNwZWMgbm9kZSBgdHlwZWAuIExldHMgcmVjb3JkZXJzIGJyYW5jaCBvbiBzdGFnZSB2cyBkZWNpZGVyIHZzXG4gICAqICBmb3JrIHZzIHN1YmZsb3cgd2l0aG91dCByZS1kZXJpdmluZyBmcm9tIG90aGVyIGZpZWxkcy4gKi9cbiAgcmVhZG9ubHkgdHlwZTogTm9uTnVsbGFibGU8Rmxvd0NoYXJ0U3BlY1sndHlwZSddPjtcbiAgLyoqIFRydWUgZm9yIG5vZGVzIGFkZGVkIHZpYSBgYWRkUGF1c2FibGVGdW5jdGlvbigpYCDigJQgdXNlZnVsIGZvclxuICAgKiAgdmlzdWFsaXNlcnMgdGhhdCB3YW50IHRvIG1hcmsgc3RhZ2VzIHRoYXQgY2FuIHBhdXNlIGV4ZWN1dGlvbi4gKi9cbiAgcmVhZG9ubHkgaXNQYXVzYWJsZT86IGJvb2xlYW47XG4gIC8qKiBMaXZlIHJlZmVyZW5jZSB0byB0aGUgZnVsbCBzcGVjIG5vZGUsIGZvciBoYW5kbGVycyB0aGF0IHdhbnRcbiAgICogIGRldGFpbHMgYmV5b25kIHRoZSBkaXNjcmltaW5hdG9yIGZpZWxkcyBhYm92ZS4gTVVTVCBOT1QgYmVcbiAgICogIG11dGF0ZWQgYnkgdGhlIGhhbmRsZXIg4oCUIHJlYWRvbmx5IGlzIHR5cGUtbGV2ZWwgaW50ZW50OyBub1xuICAgKiAgcnVudGltZSBmcmVlemUuIFNlZSBcIlNwZWMgbXV0YXRpb25cIiBpbiB0aGUgZmlsZSBoZWFkZXIgZm9yIHRoZVxuICAgKiAgdHJ1c3QtbW9kZWwgY2F2ZWF0cy4gKi9cbiAgcmVhZG9ubHkgc3BlYzogRmxvd0NoYXJ0U3BlYztcbn1cblxuLyoqIEVkZ2Uga2luZHMgdGhlIGJ1aWxkZXIgcHJvZHVjZXMgYXQgc3RydWN0dXJhbCB0aW1lLiBNYXRjaGVzIHRoZVxuICogIGZvb3RwcmludGpzIGNvbnRyb2wtZmxvdyB2b2NhYnVsYXJ5IHVzZWQgYXQgcnVudGltZS5cbiAqXG4gKiAgV2h5IG5vIGBzdWJmbG93LWVudHJ5YCBoZXJlOiBzdWJmbG93IG1vdW50cyB1c2UgdGhlIGxpZmVjeWNsZVxuICogIGV2ZW50IGBvblN1YmZsb3dNb3VudGVkYCAobm90IGFuIGVkZ2UgZXZlbnQpLiBJZiBhIGZ1dHVyZSB1c2UgY2FzZVxuICogIG5lZWRzIHRoZSBwYXJlbnTihpJzdWJmbG93LXJvb3QgZWRnZSBhcyBhIGRpc3RpbmN0IGtpbmQsIGl0J2xsIGJlXG4gKiAgYWRkZWQgdGhlbiDigJQgWUFHTkkgbm93IChQYW5lbCAzLCBMNy4yIHJldmlldykuICovXG5leHBvcnQgdHlwZSBTdHJ1Y3R1cmVFZGdlS2luZCA9XG4gIHwgJ25leHQnIC8vIGxpbmVhciBjaGFpbjogcHJldi5uZXh0ID0gY3VyclxuICB8ICdmb3JrLWJyYW5jaCcgLy8gZm9yayBwYXJlbnQg4oaSIHBhcmFsbGVsIGNoaWxkXG4gIHwgJ2RlY2lzaW9uLWJyYW5jaCc7IC8vIGRlY2lkZXIg4oaSIGJyYW5jaCBjaGlsZFxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vbkVkZ2VBZGRlZGAuIEZpcmVzIHdoZW5ldmVyXG4gKiB0aGUgYnVpbGRlciB3aXJlcyBhbiBvdXRnb2luZyBlZGdlIGZyb20gb25lIG5vZGUgdG8gYW5vdGhlci4gQm90aFxuICogZW5kcG9pbnRzIGhhdmUgYWxyZWFkeSBiZWVuIGFubm91bmNlZCB2aWEgYG9uU3RhZ2VBZGRlZGAgYnkgdGhlXG4gKiB0aW1lIHRoaXMgZmlyZXMuXG4gKlxuICogTG9vcCBiYWNrLWVkZ2VzIGhhdmUgdGhlaXIgT1dOIGV2ZW50IChgb25Mb29wRWRnZUFkZGVkYCkgc29cbiAqIGNvbnN1bWVycyBjYW4gdGhlbWUgdGhlbSBkaXN0aW5jdGx5IGFuZCBzbyBidWlsZC10aW1lIGV2ZW50cyBzdGF5XG4gKiBmcmVlIG9mIHRoZSBydW50aW1lLW9ubHkgYGl0ZXJhdGlvbmAgZmllbGQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQge1xuICByZWFkb25seSBmcm9tOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRvOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGtpbmQ6IFN0cnVjdHVyZUVkZ2VLaW5kO1xuICAvKiogT3B0aW9uYWwgaHVtYW4tcmVhZGFibGUgbGFiZWwg4oCUIHVzZWQgdG9kYXkgZm9yIGRlY2lkZXIgYnJhbmNoXG4gICAqICBrZXlzIChlLmcuLCBgJ2xvdydgLCBgJ2hpZ2gnYCwgYCdoaWdoIChkZWZhdWx0KSdgKSBhbmQgcGFyYWxsZWxcbiAgICogIGJyYW5jaCBpZHMuICovXG4gIHJlYWRvbmx5IGxhYmVsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vbkxvb3BFZGdlQWRkZWRgLiBGaXJlcyB3aGVuXG4gKiBgLmxvb3BUbyh0YXJnZXQpYCBpbnN0YWxscyBhIGJhY2stZWRnZS4gRGlzdGluY3QgZnJvbVxuICogYG9uRWRnZUFkZGVkYCBzbyBjb25zdW1lcnMgY2FuIHRoZW1lIGJhY2stZWRnZXMgZGlmZmVyZW50bHkgYW5kXG4gKiBiZWNhdXNlIHJ1bnRpbWUgYG9uTG9vcGAgY2FycmllcyBgaXRlcmF0aW9uOiBudW1iZXJgIHdoaWNoIGhhcyBub1xuICogYnVpbGQtdGltZSBtZWFuaW5nIOKAlCBrZWVwaW5nIHRoZSBldmVudHMgc2VwYXJhdGVkIGF2b2lkcyBmb3JjaW5nXG4gKiBhbiBgaXRlcmF0aW9uPzogbnVtYmVyYCBsaWUgaW50byB0aGUgc3RydWN0dXJhbCBzaGFwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVMb29wRWRnZUFkZGVkRXZlbnQge1xuICByZWFkb25seSBmcm9tOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRvOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXZlbnQgcGF5bG9hZCBmb3IgYFN0cnVjdHVyZVJlY29yZGVyLm9uRGVjaWRlckNvbXBsZXRlYC4gRmlyZXNcbiAqIHdoZW4gYSBkZWNpZGVyIC8gc2VsZWN0b3Igc3ViLWJ1aWxkZXIgY2xvc2VzIHZpYSBgLmVuZCgpYC4gQnkgdGhlXG4gKiB0aW1lIHRoaXMgZmlyZXMgZXZlcnkgYnJhbmNoIGhhcyBiZWVuIGFubm91bmNlZCBhbmQgdGhlXG4gKiBgZGVmYXVsdEJyYW5jaGAgKGlmIHNldCB2aWEgYC5zZXREZWZhdWx0KClgKSBpcyBmaW5hbC4gTGV0c1xuICogcmVjb3JkZXJzIHRyZWF0IHRoZSBkZWNpZGVyIGFzIG5vLWZ1cnRoZXItbXV0YXRpb24gYW5kIHNuYXBzaG90XG4gKiBpdHMgYnJhbmNoIGxpc3QgYXMgZmluYWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlRGVjaWRlckNvbXBsZXRlRXZlbnQge1xuICAvKiogRGVjaWRlciAvIHNlbGVjdG9yIHN0YWdlIGlkLiAqL1xuICByZWFkb25seSBkZWNpZGVyOiBzdHJpbmc7XG4gIC8qKiBTcGVjIHR5cGUgKGAnZGVjaWRlcidgIHZzIGAnc2VsZWN0b3InYCkg4oCUIGV4cG9zZWQgc28gY29uc3VtZXJzXG4gICAqICBkb24ndCBuZWVkIHRvIGxvb2sgdXAgdGhlIG9yaWdpbmFsIGBvblN0YWdlQWRkZWRgIGV2ZW50LiAqL1xuICByZWFkb25seSB0eXBlOiAnZGVjaWRlcicgfCAnc2VsZWN0b3InO1xuICAvKiogQnJhbmNoIG1lbWJlciBpZHMgaW4gZGVjbGFyYXRpb24gb3JkZXIuICovXG4gIHJlYWRvbmx5IGJyYW5jaElkczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBEZWZhdWx0IGJyYW5jaCBpZCB3aGVuIHNldCB2aWEgYC5zZXREZWZhdWx0KClgOyB1bmRlZmluZWQgd2hlblxuICAgKiAgbm8gZGVmYXVsdCBpcyBjb25maWd1cmVkIChlLmcuLCBzZWxlY3RvcnMpLiAqL1xuICByZWFkb25seSBkZWZhdWx0QnJhbmNoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vblN1YmZsb3dNb3VudGVkYC4gRmlyZXMgb25jZVxuICogcGVyIHN1YmZsb3cgbW91bnQgKGBhZGRTdWJGbG93Q2hhcnRgIC8gYGFkZFN1YkZsb3dDaGFydE5leHRgIGFuZFxuICogdGhlaXIgbGF6eSB2YXJpYW50cykuXG4gKlxuICogKipNT1VOVC1PTkxZIHNlbWFudGljcyoqIOKAlCB0aGUgc3ViZmxvdydzIE9XTiBzdHJ1Y3R1cmUgZXZlbnRzXG4gKiAoZXZlcnkgYG9uU3RhZ2VBZGRlZGAgLyBgb25FZGdlQWRkZWRgIGluc2lkZSB0aGUgc3ViZmxvdykgZmlyZWRcbiAqIGR1cmluZyB0aGUgc3ViZmxvdydzIG93biBgLmJ1aWxkKClgLCBiZWZvcmUgdGhlIG1vdW50LiBQYXJlbnRcbiAqIHJlY29yZGVycyBkbyBOT1QgcmVjZWl2ZSBhIHJlcGxheS4gSW5zdGVhZCwgdGhpcyBldmVudCBkZWxpdmVyc1xuICogdGhlIHN1YmZsb3cncyBmdWxsIHN0cnVjdHVyZSB2aWEgYHN1YmZsb3dTcGVjYCwgYW5kIGNvbnN1bWVycyBjYW5cbiAqIHdhbGsgaXQgdmlhIGB3YWxrU3ViZmxvd1NwZWNgIGZyb20gYGZvb3RwcmludGpzL3RyYWNlYC5cbiAqXG4gKiBUaGlzIG1hdGNoZXMgYEZsb3dSZWNvcmRlci5vblN1YmZsb3dFbnRyeWAgc2VtYW50aWNzIGF0IHJ1bnRpbWVcbiAqIChwYXJlbnRzIHNlZSB0aGUgYm91bmRhcnksIG5vdCBhIHJlcGxheSBvZiBpbnRlcm5hbHMpIGFuZFxuICogcHJlc2VydmVzIHRoZSBcIm9uZSBwdXJwb3NlIHBlciByZWNvcmRlclwiIGNvbnZlbnRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlU3ViZmxvd01vdW50ZWRFdmVudCB7XG4gIC8qKiBTdWJmbG93IGlkZW50aWZpZXIgdGhlIHBhcmVudCBhc3NpZ25lZCBhdCBtb3VudC4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd0lkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBzdWJmbG93IG5hbWUuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dOYW1lOiBzdHJpbmc7XG4gIC8qKiBNb3VudCBub2RlIGlkIGluIHRoZSBwYXJlbnQncyBjaGFydC4gKi9cbiAgcmVhZG9ubHkgcm9vdFN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFRydWUgd2hlbiB0aGUgbW91bnQgdXNlcyBsYXp5IHJlc29sdXRpb24gKGRlZmVycmVkIHN1YmZsb3dcbiAgICogIHJlc29sdXRpb24gdW50aWwgZXhlY3V0aW9uKS4gKi9cbiAgcmVhZG9ubHkgaXNMYXp5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG1vdW50ZWQgc3ViZmxvdydzIGNvbXBsZXRlIHNwZWMg4oCUIHRoZSBTQU1FIE9CSkVDVFxuICAgKiAoPT09IHJlZmVyZW5jZSBlcXVhbGl0eSkgcmVhY2hhYmxlIHZpYSBgc3ViZmxvdy5idWlsZFRpbWVTdHJ1Y3R1cmVgXG4gICAqIGZvciB0aGUgRmxvd0NoYXJ0IHRoZSBjb25zdW1lciBwYXNzZWQgdG8gYGFkZFN1YkZsb3dDaGFydEJyYW5jaGAgL1xuICAgKiBgYWRkU3ViRmxvd0NoYXJ0YCAvIGBhZGRTdWJGbG93Q2hhcnROZXh0YC5cbiAgICpcbiAgICogVU5ERUZJTkVEIGZvciBsYXp5IG1vdW50cyBhdCBidWlsZCB0aW1lIChgaXNMYXp5OiB0cnVlYCkg4oCUIHRoZVxuICAgKiBzdWJmbG93J3Mgc3RydWN0dXJlIGhhc24ndCBiZWVuIHJlc29sdmVkIHlldC4gQ29uc3VtZXJzIHdhaXRpbmcgb25cbiAgICogbGF6eSBzdWJmbG93cyBoYW5kbGUgdGhlIHJ1bnRpbWUgYG9uU3ViZmxvd0VudHJ5YCBldmVudCBpbnN0ZWFkLlxuICAgKlxuICAgKiBJbW11dGFibGUgcG9zdC1idWlsZDsgY29uc3VtZXJzIE1VU1QgTk9UIG11dGF0ZS5cbiAgICpcbiAgICogQGludGVybmFsIGBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmVgIGlzIGxpYnJhcnktaW50ZXJuYWwuXG4gICAqICAgICAgICAgICBVc2UgYHdhbGtTdWJmbG93U3BlY2AgZnJvbSBgZm9vdHByaW50anMvdHJhY2VgIGZvciB0aGVcbiAgICogICAgICAgICAgIHN0YWJsZSBwdWJsaWMgY29udHJhY3QuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93U3BlYz86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcblxuICAvKipcbiAgICogTG9jYWwgbW91bnQgaWQgb2YgdGhpcyBzdWJmbG93IHdpdGhpbiBpdHMgcGFyZW50IOKAlCBlcXVhbCB0b1xuICAgKiBgc3ViZmxvd0lkYCBmb3IgdG9wLWxldmVsIG1vdW50cyAoZS5nLiBgJ2F1dGgnYCksIGNvbXBvc2VkXG4gICAqIChgJ2F1dGgvdmVyaWZ5J2ApIGZvciBuZXN0ZWQgbW91bnRzIHdob3NlIHJlY29yZGVyIGlzIGF0dGFjaGVkXG4gICAqIHRvIHRoZSBncmFuZHBhcmVudC4gTWF0Y2hlcyBydW50aW1lIGB0cmF2ZXJzYWxDb250ZXh0LnN1YmZsb3dQYXRoYFxuICAgKiBzZW1hbnRpY3Mg4oCUIE5FVkVSIHByZWZpeGVkIHdpdGggYF9fcm9vdF9fL2AuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93UGF0aDogc3RyaW5nO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFN0cnVjdHVyZVJlY29yZGVyIGludGVyZmFjZVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogUGx1Z2dhYmxlIG9ic2VydmVyIGZvciBCVUlMRC1USU1FIGNoYXJ0IGNvbnN0cnVjdGlvbiBldmVudHMuXG4gKlxuICogQWxsIG1ldGhvZHMgYXJlIG9wdGlvbmFsIOKAlCBpbXBsZW1lbnQgb25seSB0aGUgaG9va3MgeW91IG5lZWQuXG4gKiBIYW5kbGVycyBmaXJlIFNZTkNIUk9OT1VTTFkgZHVyaW5nIGJ1aWxkZXIgb3BlcmF0aW9ucyBhbmQgYC5idWlsZCgpYC5cbiAqIEEgdGhyb3dpbmcgaGFuZGxlciBpcyBjYXVnaHQgKHNlZSBcIkVycm9yIGlzb2xhdGlvblwiIGluIHRoZSBmaWxlXG4gKiBoZWFkZXIpOyBzdWJzZXF1ZW50IGRpc3BhdGNoIGNvbnRpbnVlcy5cbiAqXG4gKiBMaWZlY3ljbGU6IGVhY2ggYFN0cnVjdHVyZVJlY29yZGVyYCBpbnN0YW5jZSBpcyByZWdpc3RlcmVkIHZpYVxuICogRUlUSEVSIHRoZSBgZmxvd0NoYXJ0KClgIG9wdGlvbnMgYmFnIChgeyBzdHJ1Y3R1cmVSZWNvcmRlcnM6IFtyZWNdIH1gKVxuICogT1IgdGhlIGZsdWVudCBgLmF0dGFjaFN0cnVjdHVyZVJlY29yZGVyKHJlYylgIGNoYWluIOKAlCBzZWUgdGhlIGZpbGVcbiAqIGhlYWRlciBmb3IgdGhlIHRyYWRlLW9mZnMuIFJlZ2lzdHJhdGlvbiBhZnRlciBgLmJ1aWxkKClgIGlzXG4gKiByZWplY3RlZCAoY2hhcnQgaXMgc2VhbGVkKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVSZWNvcmRlciB7XG4gIC8qKlxuICAgKiBTdGFibGUgaWRlbnRpZmllciDigJQgdXNlZCBieSB0aGUgZGlzcGF0Y2hlciB0byBzY29wZSBlcnJvclxuICAgKiBtZXNzYWdlcyBhbmQgdG8gc3VwcG9ydCBgZGV0YWNoKGlkKWAgbG9va3VwLlxuICAgKlxuICAgKiBDb252ZW50aW9uIChtYXRjaGVzIGBGbG93UmVjb3JkZXIuaWRgIGZyb20gQ0xBVURFLm1kKTpcbiAgICogICAtIGRvbWFpbi1wcmVmaXhlZCBrZWJhYi1jYXNlIChgJ2xlbnMtc3RydWN0dXJlJ2AsXG4gICAqICAgICBgJ2FnZW50Zm9vdHByaW50LWNvbXBvc2l0aW9uJ2AsIGAndHJhY2UtZXhwbGFpbmFibGUnYClcbiAgICogICAtIHNhbWUgaWQg4oaSIG11bHRpcGxlIHJlY29yZGVycyBjb2V4aXN0IChOT1QgZGVkdXBsaWNhdGVkIGJ5XG4gICAqICAgICBpZDsgdGhlIGRpc3BhdGNoZXIgZmlyZXMgZXZlcnkgYXR0YWNoZWQgcmVjb3JkZXIgcmVnYXJkbGVzcylcbiAgICogICAtIGBkZXRhY2goaWQpYCByZW1vdmVzIEVWRVJZIHJlY29yZGVyIHdpdGggdGhhdCBpZCDigJQgYmVcbiAgICogICAgIGludGVudGlvbmFsIGFib3V0IHJldXNlIGlmIHlvdSByZWx5IG9uIHNlbGVjdGl2ZSBkZXRhY2hcbiAgICpcbiAgICogQ2hvb3NlIGEgc3RhYmxlIGlkIGF0IG1vZHVsZSBsb2FkIGFuZCBkb24ndCByYW5kb21pc2UgaXQgYWNyb3NzXG4gICAqIHJ1bnMg4oCUIGl0IGxhbmRzIGluIGBTdHJ1Y3R1cmVCdWlsZEVycm9yLnJlY29yZGVySWRgIHNvIGRlYnVnXG4gICAqIG91dHB1dCBpcyBncmVwcGFibGUuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIG9uU3RhZ2VBZGRlZD8oZXZlbnQ6IFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCk6IHZvaWQ7XG4gIG9uRWRnZUFkZGVkPyhldmVudDogU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQpOiB2b2lkO1xuICBvbkxvb3BFZGdlQWRkZWQ/KGV2ZW50OiBTdHJ1Y3R1cmVMb29wRWRnZUFkZGVkRXZlbnQpOiB2b2lkO1xuICBvbkRlY2lkZXJDb21wbGV0ZT8oZXZlbnQ6IFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50KTogdm9pZDtcbiAgb25TdWJmbG93TW91bnRlZD8oZXZlbnQ6IFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQpOiB2b2lkO1xufVxuIl19
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RydWN0dXJlUmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvc3RydWN0dXJlL1N0cnVjdHVyZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJKRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3RydWN0dXJlUmVjb3JkZXIg4oCUIHBhc3NpdmUgb2JzZXJ2ZXIgb2YgQlVJTEQtVElNRSBjaGFydCBjb25zdHJ1Y3Rpb24gZXZlbnRzLlxuICpcbiAqIFRoZSBidWlsZC10aW1lIHR3aW4gb2YgYEZsb3dSZWNvcmRlcmAuIFdoZXJlIGBGbG93UmVjb3JkZXJgIG9ic2VydmVzXG4gKiBSVU5USU1FIGNvbnRyb2wtZmxvdyB0cmFuc2l0aW9ucyAocGVyLWV4ZWN1dGlvbiBgcnVudGltZVN0YWdlSWRgLFxuICogaXRlcmF0aW9uIGNvdW50cywgZXJyb3JzLCBwYXVzZXMpLCBgU3RydWN0dXJlUmVjb3JkZXJgIG9ic2VydmVzXG4gKiBTVEFUSUMgY2hhcnQgc2hhcGUgYXMgaXQncyBhc3NlbWJsZWQgYnkgdGhlIGJ1aWxkZXIg4oCUIGV2ZXJ5IHNwZWNcbiAqIG5vZGUgYWRkZWQsIGV2ZXJ5IG91dGdvaW5nIGVkZ2Ugd2lyZWQsIGV2ZXJ5IGRlY2lkZXIgY2xvc2VkLlxuICpcbiAqIFdoeSB0d28gaW50ZXJmYWNlcywgbm90IG9uZVxuICog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiAgIEJ1aWxkIGFuZCBydW50aW1lIGV2ZW50cyBoYXZlIGRpZmZlcmVudCBJTlZBUklBTlRTLCBub3QganVzdFxuICogICBkaWZmZXJlbnQgdGltaW5nOlxuICpcbiAqICAgICAtIFJ1bnRpbWUgZXZlbnRzIGNhcnJ5IGBydW50aW1lU3RhZ2VJZGAgKGBbc3ViZmxvd1BhdGgvXXN0YWdlSWQjTmApLFxuICogICAgICAgYGl0ZXJhdGlvbmAsIGB0cmF2ZXJzYWxDb250ZXh0YCDigJQgbG9hZC1iZWFyaW5nIGZvciB0aW1lLXRyYXZlbFxuICogICAgICAgVUlzLCBjb21taXQtbG9nIGluZGljZXMsIGFuZCBgU2VxdWVuY2VTdG9yZTxUPmAgY29uc3VtZXJzLlxuICogICAgICAgTk9ORSBvZiB0aGVzZSBleGlzdCBhdCBidWlsZCB0aW1lLlxuICpcbiAqICAgICAtIEJ1aWxkIGV2ZW50cyBjYXJyeSBvbmx5IGBzdGFnZUlkYCArIHN0cnVjdHVyYWwgZmllbGRzLiBOb1xuICogICAgICAgZXhlY3V0aW9uIGluZGV4LCBubyBpdGVyYXRpb24sIG5vIHNuYXBzaG90LlxuICpcbiAqICAgICAtIFNvbWUgZXZlbnRzIGhhdmUgbm8gYW5hbG9nIGFjcm9zcyBwaGFzZXM6IGBvblBhdXNlYCAvXG4gKiAgICAgICBgb25SZXN1bWVgIC8gYG9uRXJyb3JgIC8gYG9uUnVuU3RhcnRgIGFyZSBydW50aW1lLW9ubHk7XG4gKiAgICAgICBgb25EZWNpZGVyQ29tcGxldGVgIC8gYG9uU3RhZ2VBZGRlZGAgYXJlIGJ1aWxkLW9ubHkuXG4gKlxuICogICBBIHNpbmdsZSBgRmxvd1JlY29yZGVyYCB3aXRoIGBwaGFzZTogJ3N0YXRpYycgfCAnZHluYW1pYydgXG4gKiAgIGRpc2NyaW1pbmF0b3Igd291bGQgZm9yY2UgZXZlcnkgY29uc3VtZXIgdG8gd3JpdGVcbiAqICAgYGlmIChlLnBoYXNlID09PSAnc3RhdGljJykgLi4uYCBicmFuY2hlcyBhbmQgd291bGQgZXJhc2UgdGhlXG4gKiAgIGxlYXN0LXByaXZpbGVnZSBib3VuZGFyeSAoYSBzdGF0aWMtb25seSBjb25zdW1lciBzaG91bGQgTk9UXG4gKiAgIGFjY2lkZW50YWxseSBvYnNlcnZlIHJ1bnRpbWUgZGF0YSDigJQgZS5nLiwgYSBwdWJsaWMgZG9jcyBzaXRlXG4gKiAgIHJlbmRlcmluZyBjaGFydCB0b3BvbG9neSBtdXN0IG5vdCBzZWUgc2NvcGUgdmFsdWVzKS5cbiAqXG4gKiAgIFR3byBpbnRlcmZhY2VzLCBzYW1lIG1lbnRhbCBtb2RlbCwgY2xlYW4gc2VwYXJhdGlvbi4gVHdvXG4gKiAgIHJlZ2lzdHJhdGlvbiBzaXRlcyBzaGlwIHRvZGF5IChwaWNrIHdoaWNoZXZlciBmaXRzIHlvdXIgY2FsbFxuICogICBzaXRlKTpcbiAqXG4gKiAgICAgMS4gKipPcHRpb25zLWJhZyoqIChwcmVmZXJyZWQgd2hlbiB0aGUgcmVjb3JkZXIgc2V0IGlzIGtub3duXG4gKiAgICAgICAgYXQgY29uc3RydWN0aW9uIHRpbWUg4oCUIHJlZ2lzdGVycyBCRUZPUkUgYHN0YXJ0KClgIHNvIGV2ZW5cbiAqICAgICAgICB0aGUgc2VlZCBldmVudCBmaXJlcyB0aHJvdWdoIHRoZSBub3JtYWwgZGlzcGF0Y2hlciBmYW4tb3V0KTpcbiAqICAgICAgICBgYGB0c1xuICogICAgICAgIGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcsIHsgc3RydWN0dXJlUmVjb3JkZXJzOiBbcmVjXSB9KVxuICogICAgICAgICAgLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpLmJ1aWxkKCk7XG4gKiAgICAgICAgYGBgXG4gKlxuICogICAgIDIuICoqRmx1ZW50KiogKHByZWZlcnJlZCB3aGVuIGF0dGFjaCBpcyBjb25kaXRpb25hbCwgbGF0ZSwgb3JcbiAqICAgICAgICBpbiBhIGNoYWluIGJ1aWxkZXIg4oCUIHRoZSBqdXN0LWF0dGFjaGVkIHJlY29yZGVyIGdldHMgYVxuICogICAgICAgIG9uZS10aW1lIHNlZWQgcmVwbGF5IHNvIGl0IG9ic2VydmVzIHRoZSByb290IHN0YWdlKTpcbiAqICAgICAgICBgYGB0c1xuICogICAgICAgIGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcpXG4gKiAgICAgICAgICAuYXR0YWNoU3RydWN0dXJlUmVjb3JkZXIocmVjKVxuICogICAgICAgICAgLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpLmJ1aWxkKCk7XG4gKiAgICAgICAgYGBgXG4gKlxuICogICBCb3RoIGRlbGl2ZXIgdGhlIHNhbWUgZXZlbnQgc3RyZWFtIHRvIHRoZSBzYW1lIHJlY29yZGVyLiBTZWUgdGhlXG4gKiAgIGBAZXhhbXBsZWAgYmxvY2sgYmVsb3cgZm9yIGEgZnVsbHktZmxlc2hlZC1vdXQgaW1wbGVtZW50YXRpb24uXG4gKlxuICogTGlmZWN5Y2xlICsgb3JkZXJpbmcgaW52YXJpYW50c1xuICog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiAgIC0gRmlyZXMgU1lOQ0hST05PVVNMWSBkdXJpbmcgYnVpbGRlciBjaGFpbiBjYWxscyAoYW5kIGR1cmluZ1xuICogICAgIGAuYnVpbGQoKWAgZm9yIHRoZSB0ZXJtaW5hbCBub2RlKSBhdCB0aGUgbmF0dXJhbCBtb21lbnQgZWFjaFxuICogICAgIHNwZWMgbXV0YXRpb24gY29tcGxldGVzLlxuICogICAtIGBvblN0YWdlQWRkZWQoQSlgIGFuZCBgb25TdGFnZUFkZGVkKEIpYCBmaXJlIEJFRk9SRSBhbnlcbiAqICAgICBgb25FZGdlQWRkZWQoe2Zyb206IEEsIHRvOiBCfSlgIOKAlCBlbmRwb2ludCByZWdpc3RyYXRpb25cbiAqICAgICBoYXBwZW5zIGJlZm9yZSBlZGdlIHdpcmluZy5cbiAqICAgLSBgb25EZWNpZGVyQ29tcGxldGUoRClgIGZpcmVzIGF0IHN1Yi1idWlsZGVyIGAuZW5kKClgIHRpbWUsIEFGVEVSXG4gKiAgICAgZXZlcnkgY2hpbGQncyBgb25TdGFnZUFkZGVkYCBhbmQgZXZlcnkgYG9uRWRnZUFkZGVkKHtmcm9tOiBELFxuICogICAgIHRvOiBjaGlsZH0pYC4gTWFya3MgdGhlIGRlY2lkZXIgYXMgbm8tZnVydGhlci1tdXRhdGlvbi5cbiAqICAgLSBgb25TdWJmbG93TW91bnRlZCh7c3ViZmxvd0lkfSlgIGZpcmVzIG9uY2UgcGVyIG1vdW50LlxuICogICAgICoqTU9VTlQtT05MWSoqOiBwYXJlbnQgcmVjb3JkZXJzIGRvIE5PVCByZWNlaXZlIGEgcmVwbGF5IG9mXG4gKiAgICAgdGhlIHN1YmZsb3cncyBvd24gaW50ZXJuYWwgc3RydWN0dXJlIGV2ZW50cyAodGhvc2UgZmlyZWRcbiAqICAgICBkdXJpbmcgdGhlIHN1YmZsb3cncyBvd24gYC5idWlsZCgpYCkuIE1hdGNoZXMgdGhlIHJ1bnRpbWVcbiAqICAgICBgb25TdWJmbG93RW50cnlgIHNlbWFudGljcyDigJQgY29tcG9zaXRpb24gb3ZlciByZXBsYXkuXG4gKlxuICogRXJyb3IgaXNvbGF0aW9uIChtYXRjaGVzIEZsb3dSZWNvcmRlciBjb250cmFjdClcbiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogICAtIEEgdGhyb3dpbmcgaGFuZGxlciBpcyBjYXVnaHQsIGxvZ2dlZCB2aWEgYGlzRGV2TW9kZSgpYCB3YXJuaW5nLFxuICogICAgIGFuZCBhY2N1bXVsYXRlZCBvbiBgYnVpbGRlci5nZXRTdHJ1Y3R1cmVCdWlsZEVycm9ycygpYCBmb3JcbiAqICAgICBwb3N0LWhvYyBpbnNwZWN0aW9uLlxuICogICAtIFN1YnNlcXVlbnQgcmVjb3JkZXJzICsgc3Vic2VxdWVudCBldmVudHMgZmlyZSBub3JtYWxseTsgb25lXG4gKiAgICAgbWlzYmVoYXZpbmcgcmVjb3JkZXIgY2Fubm90IFRIUk9XIGl0cyB3YXkgaW50byBibG9ja2luZ1xuICogICAgIGNvbnN0cnVjdGlvbi5cbiAqICAgLSBUaGUgZXJyb3JzW10gYWNjdW11bGF0b3IgaXMgc29mdC1jYXBwZWQgKH4xMDAgZW50cmllcykgd2l0aCBhXG4gKiAgICAgYF9fdHJ1bmNhdGVkX19gIHNlbnRpbmVsIHJlY29yZCBvbmNlIHRoZSBjYXAgaXMgaGl0LCB0byBwcmV2ZW50XG4gKiAgICAgdW5ib3VuZGVkIGdyb3d0aCBvbiBjaGF0dHkgYnJva2VuIHJlY29yZGVycy5cbiAqICAgLSBOb3RlOiB0aHJvdyBpc29sYXRpb24gZG9lcyBOT1QgZGVmZW5kIGFnYWluc3QgYSBoYW5kbGVyIHRoYXRcbiAqICAgICBzdWNjZWVkcyBhdCBydW50aW1lIGJ1dCBtdXRhdGVzIGBldmVudC5zcGVjYCB0byBjb3JydXB0IHRoZVxuICogICAgIGNoYXJ0LiBTZWUgXCJTcGVjIG11dGF0aW9uXCIgYmVsb3cuXG4gKlxuICogU3BlYyBtdXRhdGlvbiDigJQgcmVhZG9ubHktYnktY29udHJhY3QgKE5PVCBydW50aW1lLWVuZm9yY2VkKVxuICog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiAgIC0gRXZlbnQgcGF5bG9hZHMgcGFzcyBzcGVjIHJlZmVyZW5jZXMgd2hlcmUgdXNlZnVsIChlLmcuLCBgc3BlY2BcbiAqICAgICBvbiBgb25TdGFnZUFkZGVkYCkuIEV2ZXJ5IGZpZWxkIG9uIGV2ZXJ5IGV2ZW50IHBheWxvYWQgaXNcbiAqICAgICBtYXJrZWQgYHJlYWRvbmx5YCBpbiBUeXBlU2NyaXB0IOKAlCB0aGUgdHlwZSBzeXN0ZW0gc2lnbmFsc1xuICogICAgIGNvbnN1bWVyIGludGVudCBhdCBhdXRob3IgdGltZS5cbiAqICAgLSBUaGVyZSBpcyBOTyBydW50aW1lIGZyZWV6ZS4gVGhlIGJ1aWxkZXIgZmlyZXMgYG9uU3RhZ2VBZGRlZGBcbiAqICAgICBJTU1FRElBVEVMWSB3aGVuIGEgc3BlYyBub2RlIGlzIGFkZGVkLCBCRUZPUkUgdGhlIGJ1aWxkZXJcbiAqICAgICB3aXJlcyB0aGF0IG5vZGUncyBgLm5leHRgL2AuY2hpbGRyZW5gL2AubG9vcFRhcmdldGAgaW4gdGhlXG4gKiAgICAgc3Vic2VxdWVudCBgYWRkWGAgY2FsbC4gRnJlZXppbmcgaGVyZSB3b3VsZCBicmVhayB0aGVcbiAqICAgICBidWlsZGVyJ3Mgb3duIHN1YnNlcXVlbnQgbXV0YXRpb24uXG4gKiAgIC0gSGFuZGxlciBtdXRhdGlvbiBvZiBgZXZlbnQuc3BlY2AgaXMgRE9DVU1FTlRFRCBVTkRFRklORURcbiAqICAgICBCRUhBVklPUiDigJQgaXQgd2lsbCBzdWNjZWVkIGF0IHJ1bnRpbWUsIGJ1dCBpcyBub3Qgc3VwcG9ydGVkXG4gKiAgICAgYW5kIGRvd25zdHJlYW0gY29uc3VtZXJzIG1heSBicmVhay4gU3BlY2lmaWNhbGx5LCBtdXRhdGluZ1xuICogICAgIGBldmVudC5zcGVjLmZuYCwgYGV2ZW50LnNwZWMuaWRgLCBvciBgZXZlbnQuc3BlYy5jaGlsZHJlbmBcbiAqICAgICBjYW4gY29ycnVwdCBzdWJzZXF1ZW50IHJ1bnRpbWUgYmVoYXZpb3Igb2YgdGhlIGNoYXJ0LlxuICogICAtICoqVHJ1c3QgbW9kZWwqKjogYXR0YWNoIE9OTFkgcmVjb3JkZXJzIGZyb20gdHJ1c3RlZCBjb2RlIHBhdGhzLlxuICogICAgIEEgaG9zdGlsZSBvciBidWdneSByZWNvcmRlciBjYW4gZWZmZWN0aXZlbHkgc3Vic3RpdHV0ZSBzdGFnZVxuICogICAgIGZ1bmN0aW9ucyBvciByZXdpcmUgdGhlIGNoYXJ0IHN0cnVjdHVyZS4gVGhlIGByZWFkb25seWBcbiAqICAgICBtYXJrZXJzIGNhbm5vdCBkZWZlbmQgYWdhaW5zdCBpbnRlbnRpb25hbCBtdXRhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNsYXNzIFRyYWNlU3RydWN0dXJlUmVjb3JkZXIgaW1wbGVtZW50cyBTdHJ1Y3R1cmVSZWNvcmRlciB7XG4gKiAgIHJlYWRvbmx5IGlkID0gJ3RyYWNlLXN0YXRpYyc7XG4gKiAgIG5vZGVzOiBYeWZsb3dOb2RlW10gPSBbXTtcbiAqICAgZWRnZXM6IFh5Zmxvd0VkZ2VbXSA9IFtdO1xuICpcbiAqICAgb25TdGFnZUFkZGVkKGUpIHtcbiAqICAgICAvLyBOb2RlIHJvbGU6ICdzdGFnZScgaXMgdGhlIGluaXRpYWwgdHlwZS4gSWYgb3V0Z29pbmcgZWRnZXNcbiAqICAgICAvLyBhcnJpdmUgd2l0aCBraW5kICdmb3JrLWJyYW5jaCcgLyAnZGVjaXNpb24tYnJhbmNoJyB0aGUgbm9kZVxuICogICAgIC8vIGlzIGZ1bmN0aW9uaW5nIGFzIGEgZm9yay9kZWNpZGVyIOKAlCBkZXJpdmUgdGhlIHZpc3VhbCBzdHlsZVxuICogICAgIC8vIGZyb20gdGhvc2UgZWRnZXMsIG5vdCBmcm9tIGBlLnR5cGVgIGFsb25lLlxuICogICAgIHRoaXMubm9kZXMucHVzaCh7IGlkOiBlLnN0YWdlSWQsIHR5cGU6ICdsZW5zU3RhZ2UnLCBkYXRhOiB7IGxhYmVsOiBlLm5hbWUgfSB9KTtcbiAqICAgfVxuICogICBvbkVkZ2VBZGRlZChlKSB7XG4gKiAgICAgdGhpcy5lZGdlcy5wdXNoKHsgaWQ6IGAke2UuZnJvbX0tPiR7ZS50b31gLCBzb3VyY2U6IGUuZnJvbSwgdGFyZ2V0OiBlLnRvIH0pO1xuICogICB9XG4gKiAgIG9uU3ViZmxvd01vdW50ZWQoZSkge1xuICogICAgIHRoaXMubm9kZXMucHVzaCh7IGlkOiBlLnN1YmZsb3dJZCwgdHlwZTogJ3N1YmZsb3cnLCBkYXRhOiB7IGxhYmVsOiBlLnN1YmZsb3dOYW1lIH0gfSk7XG4gKiAgIH1cbiAqICAgb25EZWNpZGVyQ29tcGxldGUoZSkge1xuICogICAgIC8vIE9wdGlvbmFsOiBmaW5hbGl6ZSBub2RlIHN0eWxpbmcgbm93IHRoYXQgYnJhbmNoIGxpc3QgaXMgc2VhbGVkLlxuICogICB9XG4gKiB9XG4gKlxuICogLy8gUmVnaXN0cmF0aW9uIG9wdGlvbiBBIOKAlCBvcHRpb25zLWJhZyAocHJlZmVycmVkIHdoZW4gcmVjb3JkZXJzXG4gKiAvLyBhcmUga25vd24gdXAgZnJvbnQ7IGF0dGFjaGVzIEJFRk9SRSB0aGUgc2VlZCBldmVudCBmaXJlcyk6XG4gKiBjb25zdCByZWMgPSBuZXcgVHJhY2VTdHJ1Y3R1cmVSZWNvcmRlcigpO1xuICogY29uc3QgYnVpbGRlciA9IGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcsIHtcbiAqICAgc3RydWN0dXJlUmVjb3JkZXJzOiBbcmVjXSxcbiAqIH0pLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpO1xuICogY29uc3QgY2hhcnQgPSBidWlsZGVyLmJ1aWxkKCk7XG4gKlxuICogLy8gUmVnaXN0cmF0aW9uIG9wdGlvbiBCIOKAlCBmbHVlbnQgY2hhaW4gKHByZWZlcnJlZCBmb3IgY29uZGl0aW9uYWxcbiAqIC8vIG9yIGxhdGUgYXR0YWNoOyB0aGUganVzdC1hdHRhY2hlZCByZWNvcmRlciBnZXRzIGEgc2VlZCByZXBsYXkpOlxuICogY29uc3QgcmVjMiA9IG5ldyBUcmFjZVN0cnVjdHVyZVJlY29yZGVyKCk7XG4gKiBjb25zdCBidWlsZGVyMiA9IGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcpXG4gKiAgIC5hdHRhY2hTdHJ1Y3R1cmVSZWNvcmRlcihyZWMyKVxuICogICAuYWRkRnVuY3Rpb24oJ2EnLCBmbkEsICdhJyk7XG4gKlxuICogLy8gSW5zcGVjdCBhbnkgcmVjb3JkZXIgZXJyb3JzIChjYWxsIG9uIHRoZSBCVUlMREVSLCBub3QgdGhlIGNoYXJ0KTpcbiAqIGNvbnN0IGVycm9ycyA9IGJ1aWxkZXIuZ2V0U3RydWN0dXJlQnVpbGRFcnJvcnMoKTtcbiAqXG4gKiA8UmVhY3RGbG93IG5vZGVzPXtyZWMubm9kZXN9IGVkZ2VzPXtyZWMuZWRnZXN9IC8+XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dDaGFydFNwZWMsIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBFdmVudCBwYXlsb2FkIHR5cGVzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25TdGFnZUFkZGVkYC4gRmlyZXMgZm9yIGV2ZXJ5XG4gKiBzcGVjIG5vZGUgYWRkZWQgdG8gdGhlIGNoYXJ0LCBpbmNsdWRpbmcgdGhlIHNlZWQgKGFkZGVkIHZpYVxuICogYGZsb3dDaGFydCgpYCBmYWN0b3J5KSBhbmQgc3ViZmxvdyBtb3VudCBub2Rlcy4gRXhjbHVkZXMgc3ludGhldGljXG4gKiBsb29wLXJlZmVyZW5jZSBub2RlcyAodGhvc2UgY2FycnkgYGlzTG9vcFJlZmVyZW5jZTogdHJ1ZWAgb24gdGhlXG4gKiBzcGVjOyBjb25zdW1lcnMgc2VlIHRoZW0gdmlhIHRoZSBzZXBhcmF0ZSBgb25Mb29wRWRnZUFkZGVkYCBldmVudFxuICogaW5zdGVhZCBvZiBhcyBmcmVzaCBzdGFnZXMpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCB7XG4gIC8qKlxuICAgKiBTdGFibGUgaWRlbnRpZmllciBmb3IgdGhpcyBub2RlLiBBVCBFVkVOVCBGSVJFIFRJTUUgdGhpcyBpcyB0aGVcbiAgICogYnVpbGRlcidzIExPQ0FMIGZvcm0gKG5vIHN1YmZsb3cgcHJlZml4IOKAlCB0aGUgcHJlZml4IGlzIGFwcGxpZWRcbiAgICogbGF0ZXIgYnkgYF9wcmVmaXhOb2RlVHJlZWAgd2hlbiB0aGlzIGJ1aWxkZXIgaXMgbW91bnRlZCBhcyBhXG4gICAqIHN1YmZsb3cgaW50byBhIHBhcmVudCkuXG4gICAqXG4gICAqIE5vdGU6IGBzcGVjLmlkYCBpcyBhIExJVkUgcmVmZXJlbmNlLiBJZiB5b3UgcmVhZCBpdCBBRlRFUiB0aGlzXG4gICAqIGNoYXJ0IGhhcyBiZWVuIG1vdW50ZWQgYXMgYSBzdWJmbG93LCBpdCBtYXkgaGF2ZSBiZWVuIHJld3JpdHRlblxuICAgKiB0byB0aGUgRlVMTCBwcmVmaXhlZCBmb3JtLiBVc2UgYHNwbGl0U3RhZ2VJZChzcGVjLmlkKWAgZnJvbVxuICAgKiBgZm9vdHByaW50anMvdHJhY2VgIHRvIGRlY29tcG9zZSBpdCBiYWNrIGludG8gbG9jYWwgKyBzdWJmbG93UGF0aC5cbiAgICpcbiAgICogQ29ycmVsYXRpbmcgd2l0aCBydW50aW1lIGV2ZW50czpcbiAgICogICAtIFNhbWUgYnVpbGRlciAobm8gbW91bnQpIOKGklxuICAgKiAgICAgYGV2ZW50LnN0YWdlSWQgPT09IHBhcnNlUnVudGltZVN0YWdlSWQocnVudGltZSkuc3RhZ2VJZGBcbiAgICogICAtIFRoaXMgYnVpbGRlciBtb3VudGVkIGFzIHN1YmZsb3cg4oaSIHVzZSBgc3BsaXRTdGFnZUlkYCBvbiB0aGVcbiAgICogICAgIHByZWZpeGVkIGZvcm0gKG9yIGBwYXJzZVJ1bnRpbWVTdGFnZUlkYCBvbiB0aGUgZnVsbFxuICAgKiAgICAgcnVudGltZVN0YWdlSWQpIGJlZm9yZSBjb21wYXJpbmcuXG4gICAqL1xuICByZWFkb25seSBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIG5vZGUuICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgLyoqIFNwZWMgbm9kZSBgdHlwZWAuIExldHMgcmVjb3JkZXJzIGJyYW5jaCBvbiBzdGFnZSB2cyBkZWNpZGVyIHZzXG4gICAqICBmb3JrIHZzIHN1YmZsb3cgd2l0aG91dCByZS1kZXJpdmluZyBmcm9tIG90aGVyIGZpZWxkcy4gKi9cbiAgcmVhZG9ubHkgdHlwZTogTm9uTnVsbGFibGU8Rmxvd0NoYXJ0U3BlY1sndHlwZSddPjtcbiAgLyoqIFRydWUgZm9yIG5vZGVzIGFkZGVkIHZpYSBgYWRkUGF1c2FibGVGdW5jdGlvbigpYCDigJQgdXNlZnVsIGZvclxuICAgKiAgdmlzdWFsaXNlcnMgdGhhdCB3YW50IHRvIG1hcmsgc3RhZ2VzIHRoYXQgY2FuIHBhdXNlIGV4ZWN1dGlvbi4gKi9cbiAgcmVhZG9ubHkgaXNQYXVzYWJsZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgbmFtZXMgZGVjbGFyZWQgb24gdGhlIHN0YWdlIEFUIEVWRU5UIEZJUkUgVElNRSAoYG9wdGlvbnMudGFnc2BcbiAgICogbGFuZHMgYmVmb3JlIHRoaXMgZXZlbnQgZmlyZXM7IGFic2VudCB3aGVuIG5vbmUg4oCUIHRoZSBcImFic2VudCB3aGVuXG4gICAqIGVtcHR5XCIgbGF3IHRoZSBjb21taXQgYnVuZGxlIGtlZXBzKS4gTmFtZXMgZGVjbGFyZWQgYWZ0ZXJ3YXJkc1xuICAgKiB0aHJvdWdoIHRoZSBgLnRhZyguLi4pYCBjdXJzb3IgZG9vciBhcnJpdmUgYXMgdGhlaXIgb3duXG4gICAqIHtAbGluayBTdHJ1Y3R1cmVSZWNvcmRlci5vblN0YWdlVGFnZ2VkfSBldmVudCDigJQgYSByZWNvcmRlciB0aGF0XG4gICAqIGNvcGllcyBmaWVsZHMgaGVyZSBpbnN0ZWFkIG9mIGhvbGRpbmcgYHNwZWNgIHdvdWxkIG90aGVyd2lzZVxuICAgKiBuZXZlciBsZWFybiBvZiB0aGVtICg5LjI0LjApLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogTGl2ZSByZWZlcmVuY2UgdG8gdGhlIGZ1bGwgc3BlYyBub2RlLCBmb3IgaGFuZGxlcnMgdGhhdCB3YW50XG4gICAqICBkZXRhaWxzIGJleW9uZCB0aGUgZGlzY3JpbWluYXRvciBmaWVsZHMgYWJvdmUuIE1VU1QgTk9UIGJlXG4gICAqICBtdXRhdGVkIGJ5IHRoZSBoYW5kbGVyIOKAlCByZWFkb25seSBpcyB0eXBlLWxldmVsIGludGVudDsgbm9cbiAgICogIHJ1bnRpbWUgZnJlZXplLiBTZWUgXCJTcGVjIG11dGF0aW9uXCIgaW4gdGhlIGZpbGUgaGVhZGVyIGZvciB0aGVcbiAgICogIHRydXN0LW1vZGVsIGNhdmVhdHMuICovXG4gIHJlYWRvbmx5IHNwZWM6IEZsb3dDaGFydFNwZWM7XG59XG5cbi8qKlxuICogRXZlbnQgcGF5bG9hZCBmb3IgYFN0cnVjdHVyZVJlY29yZGVyLm9uU3RhZ2VUYWdnZWRgLiBGaXJlcyB3aGVuIG5hbWVzXG4gKiBsYW5kIG9uIGEgc3RhZ2UgQUZURVIgaXRzIGBvblN0YWdlQWRkZWRgIGFscmVhZHkgZmlyZWQg4oCUIHRoZVxuICogYC50YWcoLi4uKWAgY3Vyc29yIGRvb3IgKGBmbG93Q2hhcnQoLi4uKS5hZGRGdW5jdGlvbiguLi4pLnRhZygnYScpYCkuXG4gKiBOYW1lcyBkZWNsYXJlZCBpbiB0aGUgc2FtZSBjYWxsIGFzIHRoZSBzdGFnZSAoYG9wdGlvbnMudGFnc2AsXG4gKiBgU3ViZmxvd01vdW50T3B0aW9ucy50YWdzYCkgcmlkZSBgU3RydWN0dXJlU3RhZ2VBZGRlZEV2ZW50LnRhZ3NgIGFuZFxuICogZG8gTk9UIGZpcmUgdGhpczogb25lIGRlY2xhcmF0aW9uLCBvbmUgZXZlbnQuIGB0YWdzYCBpcyB0aGUgQ09NUExFVEVcbiAqIGxpc3Qgb24gdGhlIHN0YWdlIGFmdGVyIHRoZSBkb29yIOKAlCB0aGUgYnVpbGRlciByZWZ1c2VzIGEgc2Vjb25kXG4gKiBkZWNsYXJhdGlvbiBvbiB0aGUgc2FtZSBzdGFnZSwgc28gaXQgaXMgYWxzbyB0aGUgb25seSBvbmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlU3RhZ2VUYWdnZWRFdmVudCB7XG4gIC8qKiBUaGUgYnVpbGRlcidzIExPQ0FMIHN0YWdlIGlkIChzZWUgYFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudC5zdGFnZUlkYCkuICovXG4gIHJlYWRvbmx5IHN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIGZvciB0aGUgbm9kZS4gKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKiogRXZlcnkgbmFtZSBub3cgZGVjbGFyZWQgb24gdGhlIHN0YWdlLiAqL1xuICByZWFkb25seSB0YWdzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIExpdmUgcmVmZXJlbmNlIHRvIHRoZSBzcGVjIG5vZGUg4oCUIHNhbWUgY2F2ZWF0cyBhcyBvbiBgb25TdGFnZUFkZGVkYC4gKi9cbiAgcmVhZG9ubHkgc3BlYzogRmxvd0NoYXJ0U3BlYztcbn1cblxuLyoqIEVkZ2Uga2luZHMgdGhlIGJ1aWxkZXIgcHJvZHVjZXMgYXQgc3RydWN0dXJhbCB0aW1lLiBNYXRjaGVzIHRoZVxuICogIGZvb3RwcmludGpzIGNvbnRyb2wtZmxvdyB2b2NhYnVsYXJ5IHVzZWQgYXQgcnVudGltZS5cbiAqXG4gKiAgV2h5IG5vIGBzdWJmbG93LWVudHJ5YCBoZXJlOiBzdWJmbG93IG1vdW50cyB1c2UgdGhlIGxpZmVjeWNsZVxuICogIGV2ZW50IGBvblN1YmZsb3dNb3VudGVkYCAobm90IGFuIGVkZ2UgZXZlbnQpLiBJZiBhIGZ1dHVyZSB1c2UgY2FzZVxuICogIG5lZWRzIHRoZSBwYXJlbnTihpJzdWJmbG93LXJvb3QgZWRnZSBhcyBhIGRpc3RpbmN0IGtpbmQsIGl0J2xsIGJlXG4gKiAgYWRkZWQgdGhlbiDigJQgWUFHTkkgbm93IChQYW5lbCAzLCBMNy4yIHJldmlldykuICovXG5leHBvcnQgdHlwZSBTdHJ1Y3R1cmVFZGdlS2luZCA9XG4gIHwgJ25leHQnIC8vIGxpbmVhciBjaGFpbjogcHJldi5uZXh0ID0gY3VyclxuICB8ICdmb3JrLWJyYW5jaCcgLy8gZm9yayBwYXJlbnQg4oaSIHBhcmFsbGVsIGNoaWxkXG4gIHwgJ2RlY2lzaW9uLWJyYW5jaCc7IC8vIGRlY2lkZXIg4oaSIGJyYW5jaCBjaGlsZFxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vbkVkZ2VBZGRlZGAuIEZpcmVzIHdoZW5ldmVyXG4gKiB0aGUgYnVpbGRlciB3aXJlcyBhbiBvdXRnb2luZyBlZGdlIGZyb20gb25lIG5vZGUgdG8gYW5vdGhlci4gQm90aFxuICogZW5kcG9pbnRzIGhhdmUgYWxyZWFkeSBiZWVuIGFubm91bmNlZCB2aWEgYG9uU3RhZ2VBZGRlZGAgYnkgdGhlXG4gKiB0aW1lIHRoaXMgZmlyZXMuXG4gKlxuICogTG9vcCBiYWNrLWVkZ2VzIGhhdmUgdGhlaXIgT1dOIGV2ZW50IChgb25Mb29wRWRnZUFkZGVkYCkgc29cbiAqIGNvbnN1bWVycyBjYW4gdGhlbWUgdGhlbSBkaXN0aW5jdGx5IGFuZCBzbyBidWlsZC10aW1lIGV2ZW50cyBzdGF5XG4gKiBmcmVlIG9mIHRoZSBydW50aW1lLW9ubHkgYGl0ZXJhdGlvbmAgZmllbGQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQge1xuICByZWFkb25seSBmcm9tOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRvOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGtpbmQ6IFN0cnVjdHVyZUVkZ2VLaW5kO1xuICAvKiogT3B0aW9uYWwgaHVtYW4tcmVhZGFibGUgbGFiZWwg4oCUIHVzZWQgdG9kYXkgZm9yIGRlY2lkZXIgYnJhbmNoXG4gICAqICBrZXlzIChlLmcuLCBgJ2xvdydgLCBgJ2hpZ2gnYCwgYCdoaWdoIChkZWZhdWx0KSdgKSBhbmQgcGFyYWxsZWxcbiAgICogIGJyYW5jaCBpZHMuICovXG4gIHJlYWRvbmx5IGxhYmVsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vbkxvb3BFZGdlQWRkZWRgLiBGaXJlcyB3aGVuXG4gKiBgLmxvb3BUbyh0YXJnZXQpYCBpbnN0YWxscyBhIGJhY2stZWRnZS4gRGlzdGluY3QgZnJvbVxuICogYG9uRWRnZUFkZGVkYCBzbyBjb25zdW1lcnMgY2FuIHRoZW1lIGJhY2stZWRnZXMgZGlmZmVyZW50bHkgYW5kXG4gKiBiZWNhdXNlIHJ1bnRpbWUgYG9uTG9vcGAgY2FycmllcyBgaXRlcmF0aW9uOiBudW1iZXJgIHdoaWNoIGhhcyBub1xuICogYnVpbGQtdGltZSBtZWFuaW5nIOKAlCBrZWVwaW5nIHRoZSBldmVudHMgc2VwYXJhdGVkIGF2b2lkcyBmb3JjaW5nXG4gKiBhbiBgaXRlcmF0aW9uPzogbnVtYmVyYCBsaWUgaW50byB0aGUgc3RydWN0dXJhbCBzaGFwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVMb29wRWRnZUFkZGVkRXZlbnQge1xuICByZWFkb25seSBmcm9tOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRvOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXZlbnQgcGF5bG9hZCBmb3IgYFN0cnVjdHVyZVJlY29yZGVyLm9uRGVjaWRlckNvbXBsZXRlYC4gRmlyZXNcbiAqIHdoZW4gYSBkZWNpZGVyIC8gc2VsZWN0b3Igc3ViLWJ1aWxkZXIgY2xvc2VzIHZpYSBgLmVuZCgpYC4gQnkgdGhlXG4gKiB0aW1lIHRoaXMgZmlyZXMgZXZlcnkgYnJhbmNoIGhhcyBiZWVuIGFubm91bmNlZCBhbmQgdGhlXG4gKiBgZGVmYXVsdEJyYW5jaGAgKGlmIHNldCB2aWEgYC5zZXREZWZhdWx0KClgKSBpcyBmaW5hbC4gTGV0c1xuICogcmVjb3JkZXJzIHRyZWF0IHRoZSBkZWNpZGVyIGFzIG5vLWZ1cnRoZXItbXV0YXRpb24gYW5kIHNuYXBzaG90XG4gKiBpdHMgYnJhbmNoIGxpc3QgYXMgZmluYWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlRGVjaWRlckNvbXBsZXRlRXZlbnQge1xuICAvKiogRGVjaWRlciAvIHNlbGVjdG9yIHN0YWdlIGlkLiAqL1xuICByZWFkb25seSBkZWNpZGVyOiBzdHJpbmc7XG4gIC8qKiBTcGVjIHR5cGUgKGAnZGVjaWRlcidgIHZzIGAnc2VsZWN0b3InYCkg4oCUIGV4cG9zZWQgc28gY29uc3VtZXJzXG4gICAqICBkb24ndCBuZWVkIHRvIGxvb2sgdXAgdGhlIG9yaWdpbmFsIGBvblN0YWdlQWRkZWRgIGV2ZW50LiAqL1xuICByZWFkb25seSB0eXBlOiAnZGVjaWRlcicgfCAnc2VsZWN0b3InO1xuICAvKiogQnJhbmNoIG1lbWJlciBpZHMgaW4gZGVjbGFyYXRpb24gb3JkZXIuICovXG4gIHJlYWRvbmx5IGJyYW5jaElkczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBEZWZhdWx0IGJyYW5jaCBpZCB3aGVuIHNldCB2aWEgYC5zZXREZWZhdWx0KClgOyB1bmRlZmluZWQgd2hlblxuICAgKiAgbm8gZGVmYXVsdCBpcyBjb25maWd1cmVkIChlLmcuLCBzZWxlY3RvcnMpLiAqL1xuICByZWFkb25seSBkZWZhdWx0QnJhbmNoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vblN1YmZsb3dNb3VudGVkYC4gRmlyZXMgb25jZVxuICogcGVyIHN1YmZsb3cgbW91bnQgKGBhZGRTdWJGbG93Q2hhcnRgIC8gYGFkZFN1YkZsb3dDaGFydE5leHRgIGFuZFxuICogdGhlaXIgbGF6eSB2YXJpYW50cykuXG4gKlxuICogKipNT1VOVC1PTkxZIHNlbWFudGljcyoqIOKAlCB0aGUgc3ViZmxvdydzIE9XTiBzdHJ1Y3R1cmUgZXZlbnRzXG4gKiAoZXZlcnkgYG9uU3RhZ2VBZGRlZGAgLyBgb25FZGdlQWRkZWRgIGluc2lkZSB0aGUgc3ViZmxvdykgZmlyZWRcbiAqIGR1cmluZyB0aGUgc3ViZmxvdydzIG93biBgLmJ1aWxkKClgLCBiZWZvcmUgdGhlIG1vdW50LiBQYXJlbnRcbiAqIHJlY29yZGVycyBkbyBOT1QgcmVjZWl2ZSBhIHJlcGxheS4gSW5zdGVhZCwgdGhpcyBldmVudCBkZWxpdmVyc1xuICogdGhlIHN1YmZsb3cncyBmdWxsIHN0cnVjdHVyZSB2aWEgYHN1YmZsb3dTcGVjYCwgYW5kIGNvbnN1bWVycyBjYW5cbiAqIHdhbGsgaXQgdmlhIGB3YWxrU3ViZmxvd1NwZWNgIGZyb20gYGZvb3RwcmludGpzL3RyYWNlYC5cbiAqXG4gKiBUaGlzIG1hdGNoZXMgYEZsb3dSZWNvcmRlci5vblN1YmZsb3dFbnRyeWAgc2VtYW50aWNzIGF0IHJ1bnRpbWVcbiAqIChwYXJlbnRzIHNlZSB0aGUgYm91bmRhcnksIG5vdCBhIHJlcGxheSBvZiBpbnRlcm5hbHMpIGFuZFxuICogcHJlc2VydmVzIHRoZSBcIm9uZSBwdXJwb3NlIHBlciByZWNvcmRlclwiIGNvbnZlbnRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlU3ViZmxvd01vdW50ZWRFdmVudCB7XG4gIC8qKiBTdWJmbG93IGlkZW50aWZpZXIgdGhlIHBhcmVudCBhc3NpZ25lZCBhdCBtb3VudC4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd0lkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBzdWJmbG93IG5hbWUuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dOYW1lOiBzdHJpbmc7XG4gIC8qKiBNb3VudCBub2RlIGlkIGluIHRoZSBwYXJlbnQncyBjaGFydC4gKi9cbiAgcmVhZG9ubHkgcm9vdFN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFRydWUgd2hlbiB0aGUgbW91bnQgdXNlcyBsYXp5IHJlc29sdXRpb24gKGRlZmVycmVkIHN1YmZsb3dcbiAgICogIHJlc29sdXRpb24gdW50aWwgZXhlY3V0aW9uKS4gKi9cbiAgcmVhZG9ubHkgaXNMYXp5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG1vdW50ZWQgc3ViZmxvdydzIGNvbXBsZXRlIHNwZWMg4oCUIHRoZSBTQU1FIE9CSkVDVFxuICAgKiAoPT09IHJlZmVyZW5jZSBlcXVhbGl0eSkgcmVhY2hhYmxlIHZpYSBgc3ViZmxvdy5idWlsZFRpbWVTdHJ1Y3R1cmVgXG4gICAqIGZvciB0aGUgRmxvd0NoYXJ0IHRoZSBjb25zdW1lciBwYXNzZWQgdG8gYGFkZFN1YkZsb3dDaGFydEJyYW5jaGAgL1xuICAgKiBgYWRkU3ViRmxvd0NoYXJ0YCAvIGBhZGRTdWJGbG93Q2hhcnROZXh0YC5cbiAgICpcbiAgICogVU5ERUZJTkVEIGZvciBsYXp5IG1vdW50cyBhdCBidWlsZCB0aW1lIChgaXNMYXp5OiB0cnVlYCkg4oCUIHRoZVxuICAgKiBzdWJmbG93J3Mgc3RydWN0dXJlIGhhc24ndCBiZWVuIHJlc29sdmVkIHlldC4gQ29uc3VtZXJzIHdhaXRpbmcgb25cbiAgICogbGF6eSBzdWJmbG93cyBoYW5kbGUgdGhlIHJ1bnRpbWUgYG9uU3ViZmxvd0VudHJ5YCBldmVudCBpbnN0ZWFkLlxuICAgKlxuICAgKiBJbW11dGFibGUgcG9zdC1idWlsZDsgY29uc3VtZXJzIE1VU1QgTk9UIG11dGF0ZS5cbiAgICpcbiAgICogQGludGVybmFsIGBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmVgIGlzIGxpYnJhcnktaW50ZXJuYWwuXG4gICAqICAgICAgICAgICBVc2UgYHdhbGtTdWJmbG93U3BlY2AgZnJvbSBgZm9vdHByaW50anMvdHJhY2VgIGZvciB0aGVcbiAgICogICAgICAgICAgIHN0YWJsZSBwdWJsaWMgY29udHJhY3QuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93U3BlYz86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcblxuICAvKipcbiAgICogTG9jYWwgbW91bnQgaWQgb2YgdGhpcyBzdWJmbG93IHdpdGhpbiBpdHMgcGFyZW50IOKAlCBlcXVhbCB0b1xuICAgKiBgc3ViZmxvd0lkYCBmb3IgdG9wLWxldmVsIG1vdW50cyAoZS5nLiBgJ2F1dGgnYCksIGNvbXBvc2VkXG4gICAqIChgJ2F1dGgvdmVyaWZ5J2ApIGZvciBuZXN0ZWQgbW91bnRzIHdob3NlIHJlY29yZGVyIGlzIGF0dGFjaGVkXG4gICAqIHRvIHRoZSBncmFuZHBhcmVudC4gTWF0Y2hlcyBydW50aW1lIGB0cmF2ZXJzYWxDb250ZXh0LnN1YmZsb3dQYXRoYFxuICAgKiBzZW1hbnRpY3Mg4oCUIE5FVkVSIHByZWZpeGVkIHdpdGggYF9fcm9vdF9fL2AuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93UGF0aDogc3RyaW5nO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFN0cnVjdHVyZVJlY29yZGVyIGludGVyZmFjZVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogUGx1Z2dhYmxlIG9ic2VydmVyIGZvciBCVUlMRC1USU1FIGNoYXJ0IGNvbnN0cnVjdGlvbiBldmVudHMuXG4gKlxuICogQWxsIG1ldGhvZHMgYXJlIG9wdGlvbmFsIOKAlCBpbXBsZW1lbnQgb25seSB0aGUgaG9va3MgeW91IG5lZWQuXG4gKiBIYW5kbGVycyBmaXJlIFNZTkNIUk9OT1VTTFkgZHVyaW5nIGJ1aWxkZXIgb3BlcmF0aW9ucyBhbmQgYC5idWlsZCgpYC5cbiAqIEEgdGhyb3dpbmcgaGFuZGxlciBpcyBjYXVnaHQgKHNlZSBcIkVycm9yIGlzb2xhdGlvblwiIGluIHRoZSBmaWxlXG4gKiBoZWFkZXIpOyBzdWJzZXF1ZW50IGRpc3BhdGNoIGNvbnRpbnVlcy5cbiAqXG4gKiBMaWZlY3ljbGU6IGVhY2ggYFN0cnVjdHVyZVJlY29yZGVyYCBpbnN0YW5jZSBpcyByZWdpc3RlcmVkIHZpYVxuICogRUlUSEVSIHRoZSBgZmxvd0NoYXJ0KClgIG9wdGlvbnMgYmFnIChgeyBzdHJ1Y3R1cmVSZWNvcmRlcnM6IFtyZWNdIH1gKVxuICogT1IgdGhlIGZsdWVudCBgLmF0dGFjaFN0cnVjdHVyZVJlY29yZGVyKHJlYylgIGNoYWluIOKAlCBzZWUgdGhlIGZpbGVcbiAqIGhlYWRlciBmb3IgdGhlIHRyYWRlLW9mZnMuIFJlZ2lzdHJhdGlvbiBhZnRlciBgLmJ1aWxkKClgIGlzXG4gKiByZWplY3RlZCAoY2hhcnQgaXMgc2VhbGVkKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVSZWNvcmRlciB7XG4gIC8qKlxuICAgKiBTdGFibGUgaWRlbnRpZmllciDigJQgdXNlZCBieSB0aGUgZGlzcGF0Y2hlciB0byBzY29wZSBlcnJvclxuICAgKiBtZXNzYWdlcyBhbmQgdG8gc3VwcG9ydCBgZGV0YWNoKGlkKWAgbG9va3VwLlxuICAgKlxuICAgKiBDb252ZW50aW9uIChtYXRjaGVzIGBGbG93UmVjb3JkZXIuaWRgIGZyb20gQ0xBVURFLm1kKTpcbiAgICogICAtIGRvbWFpbi1wcmVmaXhlZCBrZWJhYi1jYXNlIChgJ2xlbnMtc3RydWN0dXJlJ2AsXG4gICAqICAgICBgJ2FnZW50Zm9vdHByaW50LWNvbXBvc2l0aW9uJ2AsIGAndHJhY2UtZXhwbGFpbmFibGUnYClcbiAgICogICAtIHNhbWUgaWQg4oaSIG11bHRpcGxlIHJlY29yZGVycyBjb2V4aXN0IChOT1QgZGVkdXBsaWNhdGVkIGJ5XG4gICAqICAgICBpZDsgdGhlIGRpc3BhdGNoZXIgZmlyZXMgZXZlcnkgYXR0YWNoZWQgcmVjb3JkZXIgcmVnYXJkbGVzcylcbiAgICogICAtIGBkZXRhY2goaWQpYCByZW1vdmVzIEVWRVJZIHJlY29yZGVyIHdpdGggdGhhdCBpZCDigJQgYmVcbiAgICogICAgIGludGVudGlvbmFsIGFib3V0IHJldXNlIGlmIHlvdSByZWx5IG9uIHNlbGVjdGl2ZSBkZXRhY2hcbiAgICpcbiAgICogQ2hvb3NlIGEgc3RhYmxlIGlkIGF0IG1vZHVsZSBsb2FkIGFuZCBkb24ndCByYW5kb21pc2UgaXQgYWNyb3NzXG4gICAqIHJ1bnMg4oCUIGl0IGxhbmRzIGluIGBTdHJ1Y3R1cmVCdWlsZEVycm9yLnJlY29yZGVySWRgIHNvIGRlYnVnXG4gICAqIG91dHB1dCBpcyBncmVwcGFibGUuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIG9uU3RhZ2VBZGRlZD8oZXZlbnQ6IFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCk6IHZvaWQ7XG4gIC8qKiBOYW1lcyB0aGF0IGxhbmRlZCBvbiBhIHN0YWdlIGFmdGVyIGl0cyBgb25TdGFnZUFkZGVkYCAodGhlIGAudGFnKClgIGRvb3IpLiAqL1xuICBvblN0YWdlVGFnZ2VkPyhldmVudDogU3RydWN0dXJlU3RhZ2VUYWdnZWRFdmVudCk6IHZvaWQ7XG4gIG9uRWRnZUFkZGVkPyhldmVudDogU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQpOiB2b2lkO1xuICBvbkxvb3BFZGdlQWRkZWQ/KGV2ZW50OiBTdHJ1Y3R1cmVMb29wRWRnZUFkZGVkRXZlbnQpOiB2b2lkO1xuICBvbkRlY2lkZXJDb21wbGV0ZT8oZXZlbnQ6IFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50KTogdm9pZDtcbiAgb25TdWJmbG93TW91bnRlZD8oZXZlbnQ6IFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQpOiB2b2lkO1xufVxuIl19
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
* FlowChartBuilder (L7.3).
|
|
25
25
|
*/
|
|
26
26
|
import type { FlowChartSpec } from '../types.js';
|
|
27
|
-
import type { StructureDeciderCompleteEvent, StructureEdgeAddedEvent, StructureLoopEdgeAddedEvent, StructureRecorder, StructureStageAddedEvent, StructureSubflowMountedEvent } from './StructureRecorder.js';
|
|
27
|
+
import type { StructureDeciderCompleteEvent, StructureEdgeAddedEvent, StructureLoopEdgeAddedEvent, StructureRecorder, StructureStageAddedEvent, StructureStageTaggedEvent, StructureSubflowMountedEvent } from './StructureRecorder.js';
|
|
28
28
|
/** Structured error captured when a recorder throws. Read post-build
|
|
29
29
|
* via `builder.getStructureBuildErrors()` — call on the BUILDER
|
|
30
30
|
* reference (NOT the chart returned by `.build()`). Capture the
|
|
@@ -57,6 +57,7 @@ export declare class StructureRecorderDispatcher {
|
|
|
57
57
|
/** Read accumulated errors from this build. Returns a defensive copy. */
|
|
58
58
|
getErrors(): StructureBuildError[];
|
|
59
59
|
fireStageAdded(event: StructureStageAddedEvent): void;
|
|
60
|
+
fireStageTagged(event: StructureStageTaggedEvent): void;
|
|
60
61
|
fireEdgeAdded(event: StructureEdgeAddedEvent): void;
|
|
61
62
|
fireLoopEdgeAdded(event: StructureLoopEdgeAddedEvent): void;
|
|
62
63
|
fireDeciderComplete(event: StructureDeciderCompleteEvent): void;
|
|
@@ -80,6 +80,18 @@ export class StructureRecorderDispatcher {
|
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
|
+
fireStageTagged(event) {
|
|
84
|
+
if (this.recorders.length === 0)
|
|
85
|
+
return;
|
|
86
|
+
for (const r of this.recorders) {
|
|
87
|
+
try {
|
|
88
|
+
r.onStageTagged?.(event);
|
|
89
|
+
}
|
|
90
|
+
catch (err) {
|
|
91
|
+
this.recordError(r.id, 'onStageTagged', err);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
83
95
|
fireEdgeAdded(event) {
|
|
84
96
|
if (this.recorders.length === 0)
|
|
85
97
|
return;
|
|
@@ -168,4 +180,4 @@ export class StructureRecorderDispatcher {
|
|
|
168
180
|
}
|
|
169
181
|
}
|
|
170
182
|
}
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9idWlsZGVyL3N0cnVjdHVyZS9TdHJ1Y3R1cmVSZWNvcmRlckRpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQTJCMUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQztBQUV2QyxNQUFNLE9BQU8sMkJBQTJCO0lBQzlCLFNBQVMsR0FBd0IsRUFBRSxDQUFDO0lBQzNCLE1BQU0sR0FBMEIsRUFBRSxDQUFDO0lBQzVDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFFM0I7d0VBQ29FO0lBQ3BFLE1BQU0sQ0FBQyxRQUEyQjtRQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsK0NBQStDO0lBQy9DLE1BQU0sQ0FBQyxFQUFVO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7MkRBQ3VEO0lBQ3ZELFlBQVk7UUFDVixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELCtCQUErQjtJQUMvQixlQUFlLENBQWtELEVBQVU7UUFDekUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQWtCLENBQUM7SUFDbEUsQ0FBQztJQUVELHlFQUF5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QyxJQUFJLENBQ1Ysc0RBQXNELFVBQVUsY0FBYyxNQUFNLEtBQUssT0FBTyxJQUFJO2dCQUNsRywwREFBMEQsQ0FDN0QsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0cnVjdHVyZVJlY29yZGVyRGlzcGF0Y2hlciDigJQgRmFucyBidWlsZC10aW1lIHN0cnVjdHVyZSBldmVudHMgb3V0IHRvIE5cbiAqIGF0dGFjaGVkIGBTdHJ1Y3R1cmVSZWNvcmRlcmAgaW5zdGFuY2VzLlxuICpcbiAqIE1pcnJvcnMgYEZsb3dSZWNvcmRlckRpc3BhdGNoZXJgIChlbmdpbmUvbmFycmF0aXZlLykgZXhhY3RseTpcbiAqXG4gKiAgIC0gYHJlY29yZGVyczogU3RydWN0dXJlUmVjb3JkZXJbXWAg4oCUIGF0dGFjaCBvcmRlciBwcmVzZXJ2ZWRcbiAqICAgLSBwZXItZXZlbnQgZmlyZSBtZXRob2RzIGVhcmx5LXJldHVybiB3aGVuIG5vIHJlY29yZGVycyBhdHRhY2hlZFxuICogICAgICh6ZXJvLWFsbG9jYXRpb24gZmFzdCBwYXRoKVxuICogICAtIHBlci1yZWNvcmRlciB0cnkvY2F0Y2ggaXNvbGF0ZXMgZXJyb3JzOyBvbmUgYmFkIHJlY29yZGVyIGNhbm5vdFxuICogICAgIGNhc2NhZGUgaW50byB0aGUgY2hhaW4gYnVpbGQgb3Igc2libGluZyByZWNvcmRlcnNcbiAqICAgLSBlcnJvcnMgcm91dGUgdG8gQk9USCB0aGUgZGV2LW1vZGUgY29uc29sZSB3YXJuaW5nIChtYXRjaGVzXG4gKiAgICAgRmxvd1JlY29yZGVyRGlzcGF0Y2hlcikgQU5EIGEgc3RydWN0dXJlZCBgYnVpbGRFcnJvcnNgXG4gKiAgICAgYWNjdW11bGF0b3Igc28gY29uc3VtZXJzIGNhbiBpbnNwZWN0IGZhaWx1cmVzIHBvc3QtYnVpbGRcbiAqICAgLSBzcGVjIHBheWxvYWRzIGFyZSBOT1QgZnJvemVuIGF0IGRpc3BhdGNoIHRpbWUg4oCUIGhhbmRsZXJzIG11c3RcbiAqICAgICByZXNwZWN0IHRoZSBgcmVhZG9ubHlgIG1hcmtlcnMgb24gZXZlbnQgcGF5bG9hZCB0eXBlcyAodGhlXG4gKiAgICAgYnVpbGRlciBzdGlsbCBuZWVkcyB0byBtdXRhdGUgYHNwZWMubmV4dGAgYWZ0ZXIgdGhlIGltbWVkaWF0ZVxuICogICAgIGBvblN0YWdlQWRkZWRgIGZpcmVzOyBzZWUgYGZpcmVTdGFnZUFkZGVkYCBmb3IgdGhlIGZ1bGwgbm90ZSxcbiAqICAgICBhbmQgYFN0cnVjdHVyZVJlY29yZGVyLnRzYCBoZWFkZXIgXCJTcGVjIG11dGF0aW9uXCIgZm9yIHRoZVxuICogICAgIHRydXN0LW1vZGVsIGltcGxpY2F0aW9ucylcbiAqXG4gKiBUaGUgZGlzcGF0Y2hlciBpdHNlbGYgb3ducyBOTyBjaGFydCBzdGF0ZS4gVGhlIGJ1aWxkZXIgb3ducyB0aGVcbiAqIGRpc3BhdGNoZXI7IGV2ZW50cyBmaXJlIGZyb20gdGhlIG5hdHVyYWwgbXV0YXRpb24gcG9pbnRzIGluXG4gKiBGbG93Q2hhcnRCdWlsZGVyIChMNy4zKS5cbiAqL1xuXG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICcuLi8uLi9zY29wZS9kZXRlY3RDaXJjdWxhci5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3dDaGFydFNwZWMgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50LFxuICBTdHJ1Y3R1cmVFZGdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVSZWNvcmRlcixcbiAgU3RydWN0dXJlU3RhZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50LFxufSBmcm9tICcuL1N0cnVjdHVyZVJlY29yZGVyLmpzJztcblxuLyoqIFN0cnVjdHVyZWQgZXJyb3IgY2FwdHVyZWQgd2hlbiBhIHJlY29yZGVyIHRocm93cy4gUmVhZCBwb3N0LWJ1aWxkXG4gKiAgdmlhIGBidWlsZGVyLmdldFN0cnVjdHVyZUJ1aWxkRXJyb3JzKClgIOKAlCBjYWxsIG9uIHRoZSBCVUlMREVSXG4gKiAgcmVmZXJlbmNlIChOT1QgdGhlIGNoYXJ0IHJldHVybmVkIGJ5IGAuYnVpbGQoKWApLiBDYXB0dXJlIHRoZVxuICogIGJ1aWxkZXIgcmVmZXJlbmNlIGJlZm9yZSBgLmJ1aWxkKClgIGlmIHlvdSBuZWVkIHBvc3QtYnVpbGQgYWNjZXNzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVCdWlsZEVycm9yIHtcbiAgLyoqIFdoaWNoIHJlY29yZGVyJ3MgaGFuZGxlciB0aHJldy4gKi9cbiAgcmVhZG9ubHkgcmVjb3JkZXJJZDogc3RyaW5nO1xuICAvKiogV2hpY2ggZXZlbnQgbWV0aG9kIChgJ29uU3RhZ2VBZGRlZCdgLCBgJ29uRWRnZUFkZGVkJ2AsIC4uLikuICovXG4gIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xuICAvKiogRXJyb3IgbWVzc2FnZSBleHRyYWN0ZWQgZnJvbSB0aGUgdGhyb3duIHZhbHVlLiAqL1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG4gIC8qKiBUaGUgb3JpZ2luYWwgdGhyb3duIHZhbHVlIOKAlCBgRXJyb3JgIGluc3RhbmNlIG9yIHdoYXRldmVyIHRoZVxuICAgKiAgcmVjb3JkZXIgdGhyZXcuIFVzZWZ1bCB3aGVuIGRpYWdub3NpcyBuZWVkcyBhIHN0YWNrIHRyYWNlLiAqL1xuICByZWFkb25seSBlcnJvcjogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBTb2Z0IGNhcCBvbiB0aGUgYGVycm9yc1tdYCBhY2N1bXVsYXRvci4gQnVpbGRzIHdpdGggdGhvdXNhbmRzIG9mXG4gKiBzdGFnZXMgYW5kIGEgbWlzYmVoYXZpbmcgcmVjb3JkZXIgdGhhdCB0aHJvd3Mgb24gZXZlcnkgZXZlbnQgd291bGRcbiAqIG90aGVyd2lzZSByZXRhaW4gdW5ib3VuZGVkIGB7cmVjb3JkZXJJZCwgbWV0aG9kLCBtZXNzYWdlLCBlcnJvcn1gXG4gKiByZWNvcmRzIOKAlCBlYWNoIGNsb3Npbmcgb3ZlciB0aGUgdGhyb3duIHZhbHVlIChvZnRlbiBhbiBFcnJvciB3aXRoXG4gKiBhIGNhcHR1cmVkIHN0YWNrKSwgcHJldmVudGluZyBHQyBvZiBhbnkgY2xvc3VyZSBkYXRhIHRoZSB0aHJvd1xuICogY2FwdHVyZWQuIFRoZSBjYXAgaXMgZm9yIGRpYWdub3Npcywgbm90IGZvcmVuc2ljIGNvbXBsZXRlbmVzcztcbiAqIG9uY2UgZXhjZWVkZWQsIGEgc2luZ2xlIHNlbnRpbmVsIHJlY29yZCBzaWduYWxzIHRydW5jYXRpb24uXG4gKi9cbmNvbnN0IFNUUlVDVFVSRV9CVUlMRF9FUlJPUlNfQ0FQID0gMTAwO1xuXG5leHBvcnQgY2xhc3MgU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyIHtcbiAgcHJpdmF0ZSByZWNvcmRlcnM6IFN0cnVjdHVyZVJlY29yZGVyW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvcnM6IFN0cnVjdHVyZUJ1aWxkRXJyb3JbXSA9IFtdO1xuICBwcml2YXRlIF90cnVuY2F0ZWQgPSBmYWxzZTtcblxuICAvKiogQXR0YWNoIGEgYFN0cnVjdHVyZVJlY29yZGVyYC4gTXVsdGlwbGUgcmVjb3JkZXJzIHdpdGggdGhlIHNhbWVcbiAgICogIGlkIGFyZSBhbGxvd2VkOyB0aGUgY29udmVudGlvbiBpcyBvbmUgaWQgcGVyIGxvZ2ljYWwgY29uY2Vybi4gKi9cbiAgYXR0YWNoKHJlY29yZGVyOiBTdHJ1Y3R1cmVSZWNvcmRlcik6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkZXJzLnB1c2gocmVjb3JkZXIpO1xuICB9XG5cbiAgLyoqIERldGFjaCBldmVyeSByZWNvcmRlciB3aXRoIHRoZSBnaXZlbiBpZC4gKi9cbiAgZGV0YWNoKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZGVycyA9IHRoaXMucmVjb3JkZXJzLmZpbHRlcigocikgPT4gci5pZCAhPT0gaWQpO1xuICB9XG5cbiAgLyoqIERlZmVuc2l2ZSBjb3B5IG9mIHRoZSBhdHRhY2hlZCByZWNvcmRlcnMg4oCUIHVzZWQgaW4gdGVzdHMgKyBieVxuICAgKiAgdG9vbGluZyB0aGF0IHdhbnRzIHRvIGluc3BlY3Qgd2hhdCdzIHJlZ2lzdGVyZWQuICovXG4gIGdldFJlY29yZGVycygpOiBTdHJ1Y3R1cmVSZWNvcmRlcltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMucmVjb3JkZXJzXTtcbiAgfVxuXG4gIC8qKiBGaW5kIG9uZSByZWNvcmRlciBieSBpZC4gKi9cbiAgZ2V0UmVjb3JkZXJCeUlkPFQgZXh0ZW5kcyBTdHJ1Y3R1cmVSZWNvcmRlciA9IFN0cnVjdHVyZVJlY29yZGVyPihpZDogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVjb3JkZXJzLmZpbmQoKHIpID0+IHIuaWQgPT09IGlkKSBhcyBUIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIFJlYWQgYWNjdW11bGF0ZWQgZXJyb3JzIGZyb20gdGhpcyBidWlsZC4gUmV0dXJucyBhIGRlZmVuc2l2ZSBjb3B5LiAqL1xuICBnZXRFcnJvcnMoKTogU3RydWN0dXJlQnVpbGRFcnJvcltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuZXJyb3JzXTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBmaXJlKiBtZXRob2RzIOKAlCBjYWxsZWQgYnkgdGhlIGJ1aWxkZXIgYXQgZWFjaCBldmVudCBtb21lbnQg4pSA4pSA4pSA4pSA4pSAXG5cbiAgZmlyZVN0YWdlQWRkZWQoZXZlbnQ6IFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAvLyBOT1RFOiBgZXZlbnQuc3BlY2AgaXMgTk9UIGZyb3plbiBoZXJlLiBgb25TdGFnZUFkZGVkYCBmaXJlc1xuICAgIC8vIElNTUVESUFURUxZIHdoZW4gYSBzcGVjIG5vZGUgaXMgYWRkZWQg4oCUIHRoZSBidWlsZGVyIHN0aWxsIG5lZWRzXG4gICAgLy8gdG8gbXV0YXRlIGBzcGVjLm5leHRgIGxhdGVyIChpbiB0aGUgc3Vic2VxdWVudCBgYWRkWGAgY2FsbCkuXG4gICAgLy8gRnJlZXppbmcgaGVyZSB3b3VsZCBicmVhayB0aGUgYnVpbGRlci4gSGFuZGxlciBtdXRhdGlvbiBvZlxuICAgIC8vIGBldmVudC5zcGVjYCBpcyBkb2N1bWVudGVkIGFzIHVuZGVmaW5lZCBiZWhhdmlvciDigJQgc2VlIHRoZVxuICAgIC8vIFN0cnVjdHVyZVJlY29yZGVyIHR5cGUncyBKU0RvYyArIHJlYWRvbmx5IG1hcmtlcnMgb24gdGhlXG4gICAgLy8gZXZlbnQgcGF5bG9hZCBpbnRlcmZhY2UuXG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uU3RhZ2VBZGRlZD8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnJlY29yZEVycm9yKHIuaWQsICdvblN0YWdlQWRkZWQnLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpcmVFZGdlQWRkZWQoZXZlbnQ6IFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIC8vIE5vIHNwZWMgb24gdGhpcyBldmVudCDigJQgcGFzcyB0aHJvdWdoLlxuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vbkVkZ2VBZGRlZD8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnJlY29yZEVycm9yKHIuaWQsICdvbkVkZ2VBZGRlZCcsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmlyZUxvb3BFZGdlQWRkZWQoZXZlbnQ6IFN0cnVjdHVyZUxvb3BFZGdlQWRkZWRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25Mb29wRWRnZUFkZGVkPy4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMucmVjb3JkRXJyb3Ioci5pZCwgJ29uTG9vcEVkZ2VBZGRlZCcsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmlyZURlY2lkZXJDb21wbGV0ZShldmVudDogU3RydWN0dXJlRGVjaWRlckNvbXBsZXRlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uRGVjaWRlckNvbXBsZXRlPy4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMucmVjb3JkRXJyb3Ioci5pZCwgJ29uRGVjaWRlckNvbXBsZXRlJywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaXJlU3ViZmxvd01vdW50ZWQoZXZlbnQ6IFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uU3ViZmxvd01vdW50ZWQ/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRFcnJvcihyLmlkLCAnb25TdWJmbG93TW91bnRlZCcsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4dGVybmFsbHktY2FsbGFibGUgZXJyb3IgY2FwdHVyZSBmb3IgZXZlbnRzIHRoZSBidWlsZGVyIGZpcmVzXG4gICAqIE9VVFNJREUgdGhlIG5vcm1hbCBmaXJlKiBmYW4tb3V0IHBhdGgg4oCUIHNwZWNpZmljYWxseSB0aGUgc2VlZFxuICAgKiByZXBsYXkgaW4gYEZsb3dDaGFydEJ1aWxkZXIuYXR0YWNoU3RydWN0dXJlUmVjb3JkZXIoKWAsIHdoaWNoXG4gICAqIHRhcmdldHMgb25lIHNwZWNpZmljIHJlY29yZGVyIHJhdGhlciB0aGFuIGV2ZXJ5IGF0dGFjaGVkIHJlY29yZGVyLlxuICAgKlxuICAgKiBTYW1lIG9ic2VydmFiaWxpdHkgY29udHJhY3QgYXMgdGhlIGludGVybmFsIGByZWNvcmRFcnJvcmA6XG4gICAqIGFjY3VtdWxhdGVzIG9uIGBnZXRFcnJvcnMoKWAgQU5EIGxvZ3MgaW4gZGV2IG1vZGUuXG4gICAqL1xuICByZWNvcmRFcnJvckZvclJlcGxheShyZWNvcmRlcklkOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nLCBlcnI6IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZEVycm9yKHJlY29yZGVySWQsIG1ldGhvZCwgZXJyKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBJbnRlcm5hbHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJpdmF0ZSByZWNvcmRFcnJvcihyZWNvcmRlcklkOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nLCBlcnI6IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBlID0gZXJyIGFzIHsgbWVzc2FnZT86IHVua25vd24gfSB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBtZXNzYWdlID0gdHlwZW9mIGU/Lm1lc3NhZ2UgPT09ICdzdHJpbmcnID8gZS5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgLy8gU29mdCBjYXAgdG8gcHJldmVudCB1bmJvdW5kZWQgZ3Jvd3RoICsgY2xvc3VyZSByZXRlbnRpb24uIE9uY2VcbiAgICAvLyBoaXQsIHB1c2ggYSBzaW5nbGUgc2VudGluZWwgZGVzY3JpYmluZyB0aGUgdHJ1bmNhdGlvbiBhbmQgZHJvcFxuICAgIC8vIGZ1cnRoZXIgcmVjb3JkcyBvbiB0aGUgZmxvb3IgKHN0aWxsIGxvZyBpbiBkZXYgbW9kZSBzbyB0aGVcbiAgICAvLyBjb25zdW1lciBub3RpY2VzIHRoZSBzcGFtIGF0IGl0cyBzb3VyY2UpLlxuICAgIGlmICh0aGlzLmVycm9ycy5sZW5ndGggPCBTVFJVQ1RVUkVfQlVJTERfRVJST1JTX0NBUCkge1xuICAgICAgdGhpcy5lcnJvcnMucHVzaCh7IHJlY29yZGVySWQsIG1ldGhvZCwgbWVzc2FnZSwgZXJyb3I6IGVyciB9KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLl90cnVuY2F0ZWQpIHtcbiAgICAgIHRoaXMuX3RydW5jYXRlZCA9IHRydWU7XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKHtcbiAgICAgICAgcmVjb3JkZXJJZDogJ19fdHJ1bmNhdGVkX18nLFxuICAgICAgICBtZXRob2Q6ICdfX3RydW5jYXRlZF9fJyxcbiAgICAgICAgbWVzc2FnZTogYFN0cnVjdHVyZVJlY29yZGVyRGlzcGF0Y2hlcjogZXJyb3IgYWNjdW11bGF0b3IgdHJ1bmNhdGVkIGF0ICR7U1RSVUNUVVJFX0JVSUxEX0VSUk9SU19DQVB9IGVudHJpZXM7IGZ1cnRoZXIgZXJyb3JzIHN1cHByZXNzZWQuYCxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW2Zvb3RwcmludF0gU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyOiByZWNvcmRlciBcIiR7cmVjb3JkZXJJZH1cIiB0aHJldyBpbiAke21ldGhvZH06ICR7bWVzc2FnZX0uIGAgK1xuICAgICAgICAgICdTZWUgYnVpbGRlci5nZXRTdHJ1Y3R1cmVCdWlsZEVycm9ycygpIGZvciB0aGUgZnVsbCBsaXN0LicsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKiogUmUtZXhwb3J0IHRoZSBGbG93Q2hhcnRTcGVjIHR5cGUgZm9yIGRvd25zdHJlYW0gdHlwZSBjb21wbGV0ZW5lc3MuICovXG5leHBvcnQgdHlwZSB7IEZsb3dDaGFydFNwZWMgfTtcbiJdfQ==
|
|
183
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9idWlsZGVyL3N0cnVjdHVyZS9TdHJ1Y3R1cmVSZWNvcmRlckRpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQTRCMUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQztBQUV2QyxNQUFNLE9BQU8sMkJBQTJCO0lBQzlCLFNBQVMsR0FBd0IsRUFBRSxDQUFDO0lBQzNCLE1BQU0sR0FBMEIsRUFBRSxDQUFDO0lBQzVDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFFM0I7d0VBQ29FO0lBQ3BFLE1BQU0sQ0FBQyxRQUEyQjtRQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsK0NBQStDO0lBQy9DLE1BQU0sQ0FBQyxFQUFVO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7MkRBQ3VEO0lBQ3ZELFlBQVk7UUFDVixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELCtCQUErQjtJQUMvQixlQUFlLENBQWtELEVBQVU7UUFDekUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQWtCLENBQUM7SUFDbEUsQ0FBQztJQUVELHlFQUF5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R0FBRyxFQUFFLENBQUMsQ0FBQztRQUNoRSxDQUFDO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDZixVQUFVLEVBQUUsZUFBZTtnQkFDM0IsTUFBTSxFQUFFLGVBQWU7Z0JBQ3ZCLE9BQU8sRUFBRSwrREFBK0QsMEJBQTBCLHNDQUFzQztnQkFDeEksS0FBSyxFQUFFLElBQUk7YUFDWixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ2hCLHNDQUFzQztZQUN0QyxPQUFPLENBQUMsSUFBSSxDQUNWLHNEQUFzRCxVQUFVLGNBQWMsTUFBTSxLQUFLLE9BQU8sSUFBSTtnQkFDbEcsMERBQTBELENBQzdELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTdHJ1Y3R1cmVSZWNvcmRlckRpc3BhdGNoZXIg4oCUIEZhbnMgYnVpbGQtdGltZSBzdHJ1Y3R1cmUgZXZlbnRzIG91dCB0byBOXG4gKiBhdHRhY2hlZCBgU3RydWN0dXJlUmVjb3JkZXJgIGluc3RhbmNlcy5cbiAqXG4gKiBNaXJyb3JzIGBGbG93UmVjb3JkZXJEaXNwYXRjaGVyYCAoZW5naW5lL25hcnJhdGl2ZS8pIGV4YWN0bHk6XG4gKlxuICogICAtIGByZWNvcmRlcnM6IFN0cnVjdHVyZVJlY29yZGVyW11gIOKAlCBhdHRhY2ggb3JkZXIgcHJlc2VydmVkXG4gKiAgIC0gcGVyLWV2ZW50IGZpcmUgbWV0aG9kcyBlYXJseS1yZXR1cm4gd2hlbiBubyByZWNvcmRlcnMgYXR0YWNoZWRcbiAqICAgICAoemVyby1hbGxvY2F0aW9uIGZhc3QgcGF0aClcbiAqICAgLSBwZXItcmVjb3JkZXIgdHJ5L2NhdGNoIGlzb2xhdGVzIGVycm9yczsgb25lIGJhZCByZWNvcmRlciBjYW5ub3RcbiAqICAgICBjYXNjYWRlIGludG8gdGhlIGNoYWluIGJ1aWxkIG9yIHNpYmxpbmcgcmVjb3JkZXJzXG4gKiAgIC0gZXJyb3JzIHJvdXRlIHRvIEJPVEggdGhlIGRldi1tb2RlIGNvbnNvbGUgd2FybmluZyAobWF0Y2hlc1xuICogICAgIEZsb3dSZWNvcmRlckRpc3BhdGNoZXIpIEFORCBhIHN0cnVjdHVyZWQgYGJ1aWxkRXJyb3JzYFxuICogICAgIGFjY3VtdWxhdG9yIHNvIGNvbnN1bWVycyBjYW4gaW5zcGVjdCBmYWlsdXJlcyBwb3N0LWJ1aWxkXG4gKiAgIC0gc3BlYyBwYXlsb2FkcyBhcmUgTk9UIGZyb3plbiBhdCBkaXNwYXRjaCB0aW1lIOKAlCBoYW5kbGVycyBtdXN0XG4gKiAgICAgcmVzcGVjdCB0aGUgYHJlYWRvbmx5YCBtYXJrZXJzIG9uIGV2ZW50IHBheWxvYWQgdHlwZXMgKHRoZVxuICogICAgIGJ1aWxkZXIgc3RpbGwgbmVlZHMgdG8gbXV0YXRlIGBzcGVjLm5leHRgIGFmdGVyIHRoZSBpbW1lZGlhdGVcbiAqICAgICBgb25TdGFnZUFkZGVkYCBmaXJlczsgc2VlIGBmaXJlU3RhZ2VBZGRlZGAgZm9yIHRoZSBmdWxsIG5vdGUsXG4gKiAgICAgYW5kIGBTdHJ1Y3R1cmVSZWNvcmRlci50c2AgaGVhZGVyIFwiU3BlYyBtdXRhdGlvblwiIGZvciB0aGVcbiAqICAgICB0cnVzdC1tb2RlbCBpbXBsaWNhdGlvbnMpXG4gKlxuICogVGhlIGRpc3BhdGNoZXIgaXRzZWxmIG93bnMgTk8gY2hhcnQgc3RhdGUuIFRoZSBidWlsZGVyIG93bnMgdGhlXG4gKiBkaXNwYXRjaGVyOyBldmVudHMgZmlyZSBmcm9tIHRoZSBuYXR1cmFsIG11dGF0aW9uIHBvaW50cyBpblxuICogRmxvd0NoYXJ0QnVpbGRlciAoTDcuMykuXG4gKi9cblxuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnLi4vLi4vc2NvcGUvZGV0ZWN0Q2lyY3VsYXIuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93Q2hhcnRTcGVjIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBTdHJ1Y3R1cmVEZWNpZGVyQ29tcGxldGVFdmVudCxcbiAgU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZUxvb3BFZGdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlUmVjb3JkZXIsXG4gIFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlU3RhZ2VUYWdnZWRFdmVudCxcbiAgU3RydWN0dXJlU3ViZmxvd01vdW50ZWRFdmVudCxcbn0gZnJvbSAnLi9TdHJ1Y3R1cmVSZWNvcmRlci5qcyc7XG5cbi8qKiBTdHJ1Y3R1cmVkIGVycm9yIGNhcHR1cmVkIHdoZW4gYSByZWNvcmRlciB0aHJvd3MuIFJlYWQgcG9zdC1idWlsZFxuICogIHZpYSBgYnVpbGRlci5nZXRTdHJ1Y3R1cmVCdWlsZEVycm9ycygpYCDigJQgY2FsbCBvbiB0aGUgQlVJTERFUlxuICogIHJlZmVyZW5jZSAoTk9UIHRoZSBjaGFydCByZXR1cm5lZCBieSBgLmJ1aWxkKClgKS4gQ2FwdHVyZSB0aGVcbiAqICBidWlsZGVyIHJlZmVyZW5jZSBiZWZvcmUgYC5idWlsZCgpYCBpZiB5b3UgbmVlZCBwb3N0LWJ1aWxkIGFjY2Vzcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlQnVpbGRFcnJvciB7XG4gIC8qKiBXaGljaCByZWNvcmRlcidzIGhhbmRsZXIgdGhyZXcuICovXG4gIHJlYWRvbmx5IHJlY29yZGVySWQ6IHN0cmluZztcbiAgLyoqIFdoaWNoIGV2ZW50IG1ldGhvZCAoYCdvblN0YWdlQWRkZWQnYCwgYCdvbkVkZ2VBZGRlZCdgLCAuLi4pLiAqL1xuICByZWFkb25seSBtZXRob2Q6IHN0cmluZztcbiAgLyoqIEVycm9yIG1lc3NhZ2UgZXh0cmFjdGVkIGZyb20gdGhlIHRocm93biB2YWx1ZS4gKi9cbiAgcmVhZG9ubHkgbWVzc2FnZTogc3RyaW5nO1xuICAvKiogVGhlIG9yaWdpbmFsIHRocm93biB2YWx1ZSDigJQgYEVycm9yYCBpbnN0YW5jZSBvciB3aGF0ZXZlciB0aGVcbiAgICogIHJlY29yZGVyIHRocmV3LiBVc2VmdWwgd2hlbiBkaWFnbm9zaXMgbmVlZHMgYSBzdGFjayB0cmFjZS4gKi9cbiAgcmVhZG9ubHkgZXJyb3I6IHVua25vd247XG59XG5cbi8qKlxuICogU29mdCBjYXAgb24gdGhlIGBlcnJvcnNbXWAgYWNjdW11bGF0b3IuIEJ1aWxkcyB3aXRoIHRob3VzYW5kcyBvZlxuICogc3RhZ2VzIGFuZCBhIG1pc2JlaGF2aW5nIHJlY29yZGVyIHRoYXQgdGhyb3dzIG9uIGV2ZXJ5IGV2ZW50IHdvdWxkXG4gKiBvdGhlcndpc2UgcmV0YWluIHVuYm91bmRlZCBge3JlY29yZGVySWQsIG1ldGhvZCwgbWVzc2FnZSwgZXJyb3J9YFxuICogcmVjb3JkcyDigJQgZWFjaCBjbG9zaW5nIG92ZXIgdGhlIHRocm93biB2YWx1ZSAob2Z0ZW4gYW4gRXJyb3Igd2l0aFxuICogYSBjYXB0dXJlZCBzdGFjayksIHByZXZlbnRpbmcgR0Mgb2YgYW55IGNsb3N1cmUgZGF0YSB0aGUgdGhyb3dcbiAqIGNhcHR1cmVkLiBUaGUgY2FwIGlzIGZvciBkaWFnbm9zaXMsIG5vdCBmb3JlbnNpYyBjb21wbGV0ZW5lc3M7XG4gKiBvbmNlIGV4Y2VlZGVkLCBhIHNpbmdsZSBzZW50aW5lbCByZWNvcmQgc2lnbmFscyB0cnVuY2F0aW9uLlxuICovXG5jb25zdCBTVFJVQ1RVUkVfQlVJTERfRVJST1JTX0NBUCA9IDEwMDtcblxuZXhwb3J0IGNsYXNzIFN0cnVjdHVyZVJlY29yZGVyRGlzcGF0Y2hlciB7XG4gIHByaXZhdGUgcmVjb3JkZXJzOiBTdHJ1Y3R1cmVSZWNvcmRlcltdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JzOiBTdHJ1Y3R1cmVCdWlsZEVycm9yW10gPSBbXTtcbiAgcHJpdmF0ZSBfdHJ1bmNhdGVkID0gZmFsc2U7XG5cbiAgLyoqIEF0dGFjaCBhIGBTdHJ1Y3R1cmVSZWNvcmRlcmAuIE11bHRpcGxlIHJlY29yZGVycyB3aXRoIHRoZSBzYW1lXG4gICAqICBpZCBhcmUgYWxsb3dlZDsgdGhlIGNvbnZlbnRpb24gaXMgb25lIGlkIHBlciBsb2dpY2FsIGNvbmNlcm4uICovXG4gIGF0dGFjaChyZWNvcmRlcjogU3RydWN0dXJlUmVjb3JkZXIpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZGVycy5wdXNoKHJlY29yZGVyKTtcbiAgfVxuXG4gIC8qKiBEZXRhY2ggZXZlcnkgcmVjb3JkZXIgd2l0aCB0aGUgZ2l2ZW4gaWQuICovXG4gIGRldGFjaChpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRlcnMgPSB0aGlzLnJlY29yZGVycy5maWx0ZXIoKHIpID0+IHIuaWQgIT09IGlkKTtcbiAgfVxuXG4gIC8qKiBEZWZlbnNpdmUgY29weSBvZiB0aGUgYXR0YWNoZWQgcmVjb3JkZXJzIOKAlCB1c2VkIGluIHRlc3RzICsgYnlcbiAgICogIHRvb2xpbmcgdGhhdCB3YW50cyB0byBpbnNwZWN0IHdoYXQncyByZWdpc3RlcmVkLiAqL1xuICBnZXRSZWNvcmRlcnMoKTogU3RydWN0dXJlUmVjb3JkZXJbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLnJlY29yZGVyc107XG4gIH1cblxuICAvKiogRmluZCBvbmUgcmVjb3JkZXIgYnkgaWQuICovXG4gIGdldFJlY29yZGVyQnlJZDxUIGV4dGVuZHMgU3RydWN0dXJlUmVjb3JkZXIgPSBTdHJ1Y3R1cmVSZWNvcmRlcj4oaWQ6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnJlY29yZGVycy5maW5kKChyKSA9PiByLmlkID09PSBpZCkgYXMgVCB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBSZWFkIGFjY3VtdWxhdGVkIGVycm9ycyBmcm9tIHRoaXMgYnVpbGQuIFJldHVybnMgYSBkZWZlbnNpdmUgY29weS4gKi9cbiAgZ2V0RXJyb3JzKCk6IFN0cnVjdHVyZUJ1aWxkRXJyb3JbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmVycm9yc107XG4gIH1cblxuICAvLyDilIDilIAgZmlyZSogbWV0aG9kcyDigJQgY2FsbGVkIGJ5IHRoZSBidWlsZGVyIGF0IGVhY2ggZXZlbnQgbW9tZW50IOKUgOKUgOKUgOKUgOKUgFxuXG4gIGZpcmVTdGFnZUFkZGVkKGV2ZW50OiBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgLy8gTk9URTogYGV2ZW50LnNwZWNgIGlzIE5PVCBmcm96ZW4gaGVyZS4gYG9uU3RhZ2VBZGRlZGAgZmlyZXNcbiAgICAvLyBJTU1FRElBVEVMWSB3aGVuIGEgc3BlYyBub2RlIGlzIGFkZGVkIOKAlCB0aGUgYnVpbGRlciBzdGlsbCBuZWVkc1xuICAgIC8vIHRvIG11dGF0ZSBgc3BlYy5uZXh0YCBsYXRlciAoaW4gdGhlIHN1YnNlcXVlbnQgYGFkZFhgIGNhbGwpLlxuICAgIC8vIEZyZWV6aW5nIGhlcmUgd291bGQgYnJlYWsgdGhlIGJ1aWxkZXIuIEhhbmRsZXIgbXV0YXRpb24gb2ZcbiAgICAvLyBgZXZlbnQuc3BlY2AgaXMgZG9jdW1lbnRlZCBhcyB1bmRlZmluZWQgYmVoYXZpb3Ig4oCUIHNlZSB0aGVcbiAgICAvLyBTdHJ1Y3R1cmVSZWNvcmRlciB0eXBlJ3MgSlNEb2MgKyByZWFkb25seSBtYXJrZXJzIG9uIHRoZVxuICAgIC8vIGV2ZW50IHBheWxvYWQgaW50ZXJmYWNlLlxuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vblN0YWdlQWRkZWQ/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRFcnJvcihyLmlkLCAnb25TdGFnZUFkZGVkJywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaXJlU3RhZ2VUYWdnZWQoZXZlbnQ6IFN0cnVjdHVyZVN0YWdlVGFnZ2VkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uU3RhZ2VUYWdnZWQ/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRFcnJvcihyLmlkLCAnb25TdGFnZVRhZ2dlZCcsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmlyZUVkZ2VBZGRlZChldmVudDogU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgLy8gTm8gc3BlYyBvbiB0aGlzIGV2ZW50IOKAlCBwYXNzIHRocm91Z2guXG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uRWRnZUFkZGVkPy4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMucmVjb3JkRXJyb3Ioci5pZCwgJ29uRWRnZUFkZGVkJywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaXJlTG9vcEVkZ2VBZGRlZChldmVudDogU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vbkxvb3BFZGdlQWRkZWQ/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRFcnJvcihyLmlkLCAnb25Mb29wRWRnZUFkZGVkJywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaXJlRGVjaWRlckNvbXBsZXRlKGV2ZW50OiBTdHJ1Y3R1cmVEZWNpZGVyQ29tcGxldGVFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25EZWNpZGVyQ29tcGxldGU/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRFcnJvcihyLmlkLCAnb25EZWNpZGVyQ29tcGxldGUnLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpcmVTdWJmbG93TW91bnRlZChldmVudDogU3RydWN0dXJlU3ViZmxvd01vdW50ZWRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25TdWJmbG93TW91bnRlZD8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnJlY29yZEVycm9yKHIuaWQsICdvblN1YmZsb3dNb3VudGVkJywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXh0ZXJuYWxseS1jYWxsYWJsZSBlcnJvciBjYXB0dXJlIGZvciBldmVudHMgdGhlIGJ1aWxkZXIgZmlyZXNcbiAgICogT1VUU0lERSB0aGUgbm9ybWFsIGZpcmUqIGZhbi1vdXQgcGF0aCDigJQgc3BlY2lmaWNhbGx5IHRoZSBzZWVkXG4gICAqIHJlcGxheSBpbiBgRmxvd0NoYXJ0QnVpbGRlci5hdHRhY2hTdHJ1Y3R1cmVSZWNvcmRlcigpYCwgd2hpY2hcbiAgICogdGFyZ2V0cyBvbmUgc3BlY2lmaWMgcmVjb3JkZXIgcmF0aGVyIHRoYW4gZXZlcnkgYXR0YWNoZWQgcmVjb3JkZXIuXG4gICAqXG4gICAqIFNhbWUgb2JzZXJ2YWJpbGl0eSBjb250cmFjdCBhcyB0aGUgaW50ZXJuYWwgYHJlY29yZEVycm9yYDpcbiAgICogYWNjdW11bGF0ZXMgb24gYGdldEVycm9ycygpYCBBTkQgbG9ncyBpbiBkZXYgbW9kZS5cbiAgICovXG4gIHJlY29yZEVycm9yRm9yUmVwbGF5KHJlY29yZGVySWQ6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIGVycjogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkRXJyb3IocmVjb3JkZXJJZCwgbWV0aG9kLCBlcnIpO1xuICB9XG5cbiAgLy8g4pSA4pSAIEludGVybmFscyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBwcml2YXRlIHJlY29yZEVycm9yKHJlY29yZGVySWQ6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIGVycjogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IGUgPSBlcnIgYXMgeyBtZXNzYWdlPzogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0eXBlb2YgZT8ubWVzc2FnZSA9PT0gJ3N0cmluZycgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAvLyBTb2Z0IGNhcCB0byBwcmV2ZW50IHVuYm91bmRlZCBncm93dGggKyBjbG9zdXJlIHJldGVudGlvbi4gT25jZVxuICAgIC8vIGhpdCwgcHVzaCBhIHNpbmdsZSBzZW50aW5lbCBkZXNjcmliaW5nIHRoZSB0cnVuY2F0aW9uIGFuZCBkcm9wXG4gICAgLy8gZnVydGhlciByZWNvcmRzIG9uIHRoZSBmbG9vciAoc3RpbGwgbG9nIGluIGRldiBtb2RlIHNvIHRoZVxuICAgIC8vIGNvbnN1bWVyIG5vdGljZXMgdGhlIHNwYW0gYXQgaXRzIHNvdXJjZSkuXG4gICAgaWYgKHRoaXMuZXJyb3JzLmxlbmd0aCA8IFNUUlVDVFVSRV9CVUlMRF9FUlJPUlNfQ0FQKSB7XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKHsgcmVjb3JkZXJJZCwgbWV0aG9kLCBtZXNzYWdlLCBlcnJvcjogZXJyIH0pO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuX3RydW5jYXRlZCkge1xuICAgICAgdGhpcy5fdHJ1bmNhdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goe1xuICAgICAgICByZWNvcmRlcklkOiAnX190cnVuY2F0ZWRfXycsXG4gICAgICAgIG1ldGhvZDogJ19fdHJ1bmNhdGVkX18nLFxuICAgICAgICBtZXNzYWdlOiBgU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyOiBlcnJvciBhY2N1bXVsYXRvciB0cnVuY2F0ZWQgYXQgJHtTVFJVQ1RVUkVfQlVJTERfRVJST1JTX0NBUH0gZW50cmllczsgZnVydGhlciBlcnJvcnMgc3VwcHJlc3NlZC5gLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbZm9vdHByaW50XSBTdHJ1Y3R1cmVSZWNvcmRlckRpc3BhdGNoZXI6IHJlY29yZGVyIFwiJHtyZWNvcmRlcklkfVwiIHRocmV3IGluICR7bWV0aG9kfTogJHttZXNzYWdlfS4gYCArXG4gICAgICAgICAgJ1NlZSBidWlsZGVyLmdldFN0cnVjdHVyZUJ1aWxkRXJyb3JzKCkgZm9yIHRoZSBmdWxsIGxpc3QuJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8qKiBSZS1leHBvcnQgdGhlIEZsb3dDaGFydFNwZWMgdHlwZSBmb3IgZG93bnN0cmVhbSB0eXBlIGNvbXBsZXRlbmVzcy4gKi9cbmV4cG9ydCB0eXBlIHsgRmxvd0NoYXJ0U3BlYyB9O1xuIl19
|
|
@@ -83,6 +83,14 @@ export declare class ParallelForEachHandler<TOut = any, TScope = any> {
|
|
|
83
83
|
/**
|
|
84
84
|
* Evaluate the items selector against the live scope. A non-array return is
|
|
85
85
|
* a chart bug, not a runtime condition — it fails loudly, naming the stage.
|
|
86
|
+
*
|
|
87
|
+
* The selector reads the typed scope, so what it returns is usually the
|
|
88
|
+
* scope's own array HANDLE (a Proxy bound to the parent stage) and every
|
|
89
|
+
* `items[index]` an element handle. The items are about to cross into
|
|
90
|
+
* branch runtimes — closed over by `branch(item, index)` and seeded as the
|
|
91
|
+
* branch's `item` — so they are taken as VALUES here (`unwrapHandles`,
|
|
92
|
+
* reactive/handles.ts). 9.22.0–9.23.2 seeded the handle itself and every
|
|
93
|
+
* branch over an object item failed at its seed commit (DataCloneError).
|
|
86
94
|
*/
|
|
87
95
|
private resolveItems;
|
|
88
96
|
/** Generate one subflow-mount node per branch, registering each branch chart. */
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
* follows its fan-out event — unavoidable and honest: the result is not
|
|
51
51
|
* knowable until the branches settle.
|
|
52
52
|
*/
|
|
53
|
+
import { unwrapHandles } from '../../reactive/handles.js';
|
|
53
54
|
import { IS_TYPED_SCOPE } from '../../reactive/types.js';
|
|
54
55
|
import { createProtectedScope } from '../../scope/protection/createProtectedScope.js';
|
|
55
56
|
import { buildBranchSegment } from '../branchSegment.js';
|
|
@@ -124,9 +125,17 @@ export class ParallelForEachHandler {
|
|
|
124
125
|
/**
|
|
125
126
|
* Evaluate the items selector against the live scope. A non-array return is
|
|
126
127
|
* a chart bug, not a runtime condition — it fails loudly, naming the stage.
|
|
128
|
+
*
|
|
129
|
+
* The selector reads the typed scope, so what it returns is usually the
|
|
130
|
+
* scope's own array HANDLE (a Proxy bound to the parent stage) and every
|
|
131
|
+
* `items[index]` an element handle. The items are about to cross into
|
|
132
|
+
* branch runtimes — closed over by `branch(item, index)` and seeded as the
|
|
133
|
+
* branch's `item` — so they are taken as VALUES here (`unwrapHandles`,
|
|
134
|
+
* reactive/handles.ts). 9.22.0–9.23.2 seeded the handle itself and every
|
|
135
|
+
* branch over an object item failed at its seed commit (DataCloneError).
|
|
127
136
|
*/
|
|
128
137
|
resolveItems(config, scope, node) {
|
|
129
|
-
const items = config.items(scope);
|
|
138
|
+
const items = unwrapHandles(config.items(scope));
|
|
130
139
|
if (items === undefined || items === null)
|
|
131
140
|
return [];
|
|
132
141
|
if (!Array.isArray(items)) {
|
|
@@ -218,4 +227,4 @@ function notify(scope, method) {
|
|
|
218
227
|
if (s && typeof s[method] === 'function')
|
|
219
228
|
s[method]();
|
|
220
229
|
}
|
|
221
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFyYWxsZWxGb3JFYWNoSGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL2hhbmRsZXJzL1BhcmFsbGVsRm9yRWFjaEhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1ERztBQUdILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN0RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQXNCekQsTUFBTSxPQUFPLHNCQUFzQjtJQUV2QjtJQUNBO0lBQ0E7SUFIVixZQUNVLElBQStCLEVBQy9CLGdCQUFnRCxFQUNoRCxLQUF5QztRQUZ6QyxTQUFJLEdBQUosSUFBSSxDQUEyQjtRQUMvQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWdDO1FBQ2hELFVBQUssR0FBTCxLQUFLLENBQW9DO0lBQ2hELENBQUM7SUFFSjs7O09BR0c7SUFDSCxLQUFLLENBQUMsR0FBRyxDQUNQLElBQTZCLEVBQzdCLE9BQXFCLEVBQ3JCLFVBQThCLEVBQzlCLGdCQUFrQztRQUVsQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBeUQsQ0FBQztRQUU5RSwwRUFBMEU7UUFDMUUsNEVBQTRFO1FBQzVFLHFFQUFxRTtRQUNyRSx3RUFBd0U7UUFDeEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMvRyxNQUFNLFlBQVksR0FBRyxRQUFRLElBQUssUUFBZ0IsQ0FBQyxj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WUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssWUFBWSxDQUFDLFFBQWdCLEVBQUUsT0FBcUIsRUFBRSxJQUFZLEVBQUUsT0FBa0I7UUFDNUYsTUFBTSxDQUFDLEdBQUcsUUFBOEMsQ0FBQztRQUN6RCxJQUFJLE9BQU8sQ0FBQyxFQUFFLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN0QyxDQUFDLENBQUMsU0FBbUQsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdEUsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxFQUFFLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNyQyxDQUFDLENBQUMsUUFBa0QsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDckUsT0FBTztRQUNULENBQUM7UUFDRCx1RUFBdUU7UUFDdkUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNGO0FBRUQsb0VBQW9FO0FBQ3BFLFNBQVMsTUFBTSxDQUFDLEtBQWMsRUFBRSxNQUE2QztJQUMzRSxNQUFNLENBQUMsR0FBRyxLQUE0QyxDQUFDO0lBQ3ZELElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLFVBQVU7UUFBRyxDQUFDLENBQUMsTUFBTSxDQUFnQixFQUFFLENBQUM7QUFDeEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGFyYWxsZWxGb3JFYWNoSGFuZGxlciDigJQgZHluYW1pYyBmYW4tb3V0OiBvbmUgYnJhbmNoIHBlciBpdGVtLCBicmFuY2ggQ09VTlRcbiAqIGRlY2lkZWQgYXQgcnVudGltZSBmcm9tIHRoZSBwYXlsb2FkLlxuICpcbiAqIERlc2lnbjogZG9jcy9kZXNpZ24vZXhlY3V0aW9uLWNvbnRyb2wubWQgKEQxICsgRDIpLiBSb3VuZCBCIGJ1aWxkcyBleGFjdGx5XG4gKiB0aGF0IGRvY3VtZW50LlxuICpcbiAqICMjIFdoYXQgdGhpcyBoYW5kbGVyIGRvZXMgTk9UIGludmVudFxuICpcbiAqIEFsbW9zdCBldmVyeXRoaW5nIGhlcmUgaXMgZXhpc3RpbmcgbWFjaGluZXJ5LCB3aXJlZCB0b2dldGhlcjpcbiAqXG4gKiAtICoqRWFjaCBicmFuY2ggaXMgYSBnZW5lcmF0ZWQgU1VCRkxPVy4qKiBJdHMgcGF0aCBzZWdtZW50IGlzXG4gKiAgIGA8cGFyZW50U3RhZ2VJZD5+PGluZGV4PmAgKHNlZSBgZW5naW5lL2JyYW5jaFNlZ21lbnQudHNgKSDigJQgYSBzdWJmbG93UGF0aFxuICogICBzZWdtZW50IGluIHRoZSBncmFtbWFyIHRoYXQgYWxyZWFkeSBzaGlwcywgTk9UIGEgbmV3IGRlbGltaXRlciBjbGFzcy4gU28gYVxuICogICBicmFuY2ggZ2V0cywgZm9yIGZyZWU6IGEgZnJlc2ggaXNvbGF0ZWQgYEV4ZWN1dGlvblJ1bnRpbWVgIChicmFuY2hlcyBjYW5ub3RcbiAqICAgY29ycnVwdCBlYWNoIG90aGVyJ3MgaW4tZmxpZ2h0IHN0YXRlKSwgdGhlIGlucHV0TWFwcGVyIHNlYW0gZm9yIGZlZWRpbmcgdGhlXG4gKiAgIGl0ZW0gaW4sIGFuZCDigJQgdGhlIHBvaW50IG9mIHRoZSB3aG9sZSBkZXNpZ24g4oCUIGBwYXJzZVJ1bnRpbWVTdGFnZUlkYCxcbiAqICAgYGNhdXNhbENoYWluYCwgYHNsaWNlRm9yS2V5YCBhbmQgYGZvcndhcmRTbGljZUZvcktleWAgcmVhZGluZyBicmFuY2hcbiAqICAgY29tbWl0cyB3aXRoIFpFUk8gY2hhbmdlcywgYmVjYXVzZSB0aGUgaWQgc2hhcGUgSVMgdGhlIHNoaXBwZWQgc2hhcGUuXG4gKiAtICoqVGhlIGZhbi1vdXQgaXRzZWxmIGlzIGBDaGlsZHJlbkV4ZWN1dG9yYC4qKiBUaGF0IGlzIHdoYXQgbWFrZXMgdGhlXG4gKiAgIGZhaWx1cmUgcG9saWN5IFwiUGFyYWxsZWwncyBleGlzdGluZyBmYWlsdXJlIHBvbGljeVwiIHJhdGhlciB0aGFuIGEgc2Vjb25kXG4gKiAgIG9uZTogYGZhaWxGYXN0YCDihpIgYFByb21pc2UuYWxsYCwgb3RoZXJ3aXNlIGJlc3QtZWZmb3J0IGBQcm9taXNlLmFsbFNldHRsZWRgLlxuICogICBJdCBhbHNvIGZpcmVzIGBvbkZvcmtgICsgYG9uU3RhZ2VFeGVjdXRlZCgnZm9yaycpYCBhbmQgYnViYmxlcyBhXG4gKiAgIGBQYXVzZVNpZ25hbGAgb3V0IG9mIGEgYnJhbmNoLCBhbGwgdW5jaGFuZ2VkLlxuICpcbiAqICMjIFRoZSBsYXdzIHRoaXMgaGFuZGxlciBvd25zXG4gKlxuICogKipPcmRlciBpcyBpdGVtcyBvcmRlci4qKiBSZXN1bHRzIGFyZSBhc3NlbWJsZWQgYnkgaW5kZXggZnJvbSB0aGUgZmFuLW91dCdzXG4gKiBrZXllZCByZXN1bHRzLCBuZXZlciBieSBjb21wbGV0aW9uIG9yZGVyLCBhbmQgbGFuZCBhcyBPTkUgYXJyYXkgd3JpdGUgb24gdGhlXG4gKiBwYXJlbnQg4oCUIHNvIGBpbnRvW2ldYCBpcyBhbHdheXMgYnJhbmNoIGBpYCdzIHJlc3VsdCBubyBtYXR0ZXIgd2hpY2ggYnJhbmNoXG4gKiBmaW5pc2hlZCBmaXJzdC4gQSBmYWlsZWQgYnJhbmNoIChiZXN0LWVmZm9ydCBtb2RlKSBsZWF2ZXMgYHVuZGVmaW5lZGAgaW4gaXRzXG4gKiBzbG90OyB3aGljaCBicmFuY2ggZmFpbGVkIGlzIG5vdCByZXBvcnRlZCBoZXJlLCBiZWNhdXNlIHRoYXQgZ2FwIGlzXG4gKiBwcmUtZXhpc3RpbmcgaW4gdGhlIHBhcmFsbGVsIGZhbi1vdXQgYW5kIG5vdCB0aGlzIGZlYXR1cmUncyB0byB3aWRlbi5cbiAqXG4gKiAqKm1heEJyYW5jaGVzIHRydW5jYXRlcywgYW5kIHNheXMgc28uKiogSXRlbXMgcGFzdCB0aGUgY2VpbGluZyBkbyBub3QgcnVuLlxuICogVGhlIHRydW5jYXRpb24gaXMgcmVjb3JkZWQgaW4gdGhlIHN0YWdlJ3Mgb3duIGNvbW1pdC12aXNpYmxlIGxvZyBhbmQgYXMgYVxuICogZmxvdyBtZXNzYWdlIOKAlCBib3VuZGVkIGV4ZWN1dGlvbiwgc3RhdGVkLCBuZXZlciBzaWxlbnQuXG4gKlxuICogKipCcmFuY2ggY2hhcnRzIGFyZSByZS1yZWdpc3RlcmVkIG9uIEVWRVJZIHZpc2l0LioqIFRoZSBnZW5lcmF0ZWQgc2VnbWVudHNcbiAqIGFyZSBzdGFibGUgYWNyb3NzIGxvb3AgaXRlcmF0aW9ucywgYW5kIHN1YmZsb3cgcmVnaXN0cmF0aW9uIGlzIG5vcm1hbGx5XG4gKiBmaXJzdC13cml0ZS13aW5zIOKAlCB3aGljaCB3b3VsZCBtZWFuIGEgbG9vcGluZyBmYW4tb3V0IHNpbGVudGx5IHJlLWV4ZWN1dGluZ1xuICogaXRlcmF0aW9uIDEncyBicmFuY2ggY2hhcnRzIGZvcmV2ZXIsIGV2ZW4gd2hlbiB0aGUgZmFjdG9yeSByZXR1cm5zIGRpZmZlcmVudFxuICogY2hhcnRzLiBUaGlzIGhhbmRsZXIgb3ZlcndyaXRlcyBpbnN0ZWFkLiBQZXItaXRlcmF0aW9uIHJlc3VsdHMgc3RheVxuICogYWRkcmVzc2FibGUgdGhyb3VnaCB0aGUgbW91bnQncyBgcnVudGltZVN0YWdlSWRgIGtleSwgZXhhY3RseSBhcyB0aGV5IGRvIGZvclxuICogYSBoYW5kLWF1dGhvcmVkIGxvb3Bpbmcgc3ViZmxvdy5cbiAqXG4gKiAqKkV2ZW50IG9yZGVyLioqIGBvblN0YWdlU3RhcnRgIOKGkiB0aGUgYGl0ZW1zYCByZWFkIOKGkiBgb25Gb3JrYCDihpIgYnJhbmNoZXMg4oaSXG4gKiB0aGUgb3JkZXJlZC1hcnJheSB3cml0ZSDihpIgYG9uU3RhZ2VFbmRgIOKGkiBgb25Db21taXRgLiBUaGUgc3RhZ2UncyBvd24gY29tbWl0XG4gKiB0aGVyZWZvcmUgbGFuZHMgQUZURVIgaXRzIGBvbkZvcmtgLCB3aGljaCBpcyB0aGUgb25lIHBsYWNlIGEgc3RhZ2UncyBjb21taXRcbiAqIGZvbGxvd3MgaXRzIGZhbi1vdXQgZXZlbnQg4oCUIHVuYXZvaWRhYmxlIGFuZCBob25lc3Q6IHRoZSByZXN1bHQgaXMgbm90XG4gKiBrbm93YWJsZSB1bnRpbCB0aGUgYnJhbmNoZXMgc2V0dGxlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgeyBJU19UWVBFRF9TQ09QRSB9IGZyb20gJy4uLy4uL3JlYWN0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB7IGNyZWF0ZVByb3RlY3RlZFNjb3BlIH0gZnJvbSAnLi4vLi4vc2NvcGUvcHJvdGVjdGlvbi9jcmVhdGVQcm90ZWN0ZWRTY29wZS5qcyc7XG5pbXBvcnQgeyBidWlsZEJyYW5jaFNlZ21lbnQgfSBmcm9tICcuLi9icmFuY2hTZWdtZW50LmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VOb2RlIH0gZnJvbSAnLi4vZ3JhcGgvU3RhZ2VOb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgVHJhdmVyc2FsQ29udGV4dCB9IGZyb20gJy4uL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEJyYW5jaENoYXJ0LCBIYW5kbGVyRGVwcywgTm9kZVJlc3VsdFR5cGUsIFBhcmFsbGVsRm9yRWFjaENvbmZpZyB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgQ2hpbGRyZW5FeGVjdXRvciB9IGZyb20gJy4vQ2hpbGRyZW5FeGVjdXRvci5qcyc7XG5cbi8qKlxuICogVHJhdmVyc2VyLW93bmVkIG9wZXJhdGlvbnMgdGhlIGhhbmRsZXIgbmVlZHMuIFBhc3NlZCBhcyBmdW5jdGlvbnMgKG5vdCB0aGVcbiAqIHRyYXZlcnNlcikgc28gdGhlIGhhbmRsZXIga2VlcHMgdGhlIHNhbWUgbm8tYmFjay1yZWZlcmVuY2Ugc2hhcGUgYXMgZXZlcnlcbiAqIG90aGVyIGhhbmRsZXIgaW4gdGhpcyBkaXJlY3RvcnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyYWxsZWxGb3JFYWNoSG9va3M8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIC8qKiBUaGUgdHJhdmVyc2VyJ3MgYHByZWZpeE5vZGVUcmVlYCDigJQgYnl0ZS10d2luIG9mIHRoZSBidWlsZGVyJ3MgYF9wcmVmaXhOb2RlVHJlZWAuICovXG4gIHByZWZpeE5vZGVUcmVlKG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LCBwcmVmaXg6IHN0cmluZyk6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICAvKiogUmVnaXN0ZXIgKE9WRVJXUklUSU5HKSBhIGdlbmVyYXRlZCBicmFuY2ggc3ViZmxvdyArIGl0cyBzdGFnZSBmdW5jdGlvbnMuICovXG4gIHJlZ2lzdGVyQnJhbmNoU3ViZmxvdyhzdWJmbG93SWQ6IHN0cmluZywgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sIGNoYXJ0OiBCcmFuY2hDaGFydCk6IHZvaWQ7XG4gIC8qKiBSZWFkIGEgY29tcGxldGVkIGJyYW5jaCdzIGZpbmFsIHNoYXJlZCBzdGF0ZSwgZm9yIHRoZSBgc3ViZmxvd091dHB1dCA/PyBzdGF0ZWAgZmFsbGJhY2suICovXG4gIGJyYW5jaFNoYXJlZFN0YXRlKHN1YmZsb3dJZDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gIC8qKiBNaXJyb3IgdGhlIGdlbmVyYXRlZCBicmFuY2hlcyBpbnRvIHRoZSBydW50aW1lIHN0cnVjdHVyZSwgZm9yIHZpc3VhbGl6YXRpb24uICovXG4gIHJlY29yZEJyYW5jaFN0cnVjdHVyZShub2RlSWQ6IHN0cmluZywgYnJhbmNoZXM6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W10pOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgUGFyYWxsZWxGb3JFYWNoSGFuZGxlcjxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkZXBzOiBIYW5kbGVyRGVwczxUT3V0LCBUU2NvcGU+LFxuICAgIHByaXZhdGUgY2hpbGRyZW5FeGVjdXRvcjogQ2hpbGRyZW5FeGVjdXRvcjxUT3V0LCBUU2NvcGU+LFxuICAgIHByaXZhdGUgaG9va3M6IFBhcmFsbGVsRm9yRWFjaEhvb2tzPFRPdXQsIFRTY29wZT4sXG4gICkge31cblxuICAvKipcbiAgICogUnVuIHRoZSBmYW4tb3V0IHRvIGNvbXBsZXRpb24gYW5kIGNvbW1pdCB0aGUgb3JkZXJlZCByZXN1bHRzLlxuICAgKiBSZXR1cm5zIHRoZSByZXN1bHRzIGFycmF5ICh0aGUgc3RhZ2UncyBvdXRwdXQpLlxuICAgKi9cbiAgYXN5bmMgcnVuKFxuICAgIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIGNvbnRleHQ6IFN0YWdlQ29udGV4dCxcbiAgICBicmFuY2hQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgdHJhdmVyc2FsQ29udGV4dDogVHJhdmVyc2FsQ29udGV4dCxcbiAgKTogUHJvbWlzZTx1bmtub3duW10+IHtcbiAgICBjb25zdCBjb25maWcgPSBub2RlLnBhcmFsbGVsRm9yRWFjaCBhcyBQYXJhbGxlbEZvckVhY2hDb25maWc8dW5rbm93biwgVFNjb3BlPjtcblxuICAgIC8vIFNhbWUgc2NvcGUgY29uc3RydWN0aW9uIFN0YWdlUnVubmVyIHBlcmZvcm1zLCBwcm90ZWN0aW9uIGluY2x1ZGVkOiB0aGlzXG4gICAgLy8gc3RhZ2UgaGFzIG5vIHVzZXIgZnVuY3Rpb24sIGJ1dCBgaXRlbXMoc2NvcGUpYCBJUyB1c2VyIGNvZGUsIHNvIGl0cyByZWFkc1xuICAgIC8vIGFyZSB0cmFja2VkIGFuZCBhIHN0cmF5IGFzc2lnbm1lbnQgaW5zaWRlIGl0IGlzIGNhdWdodCBieSB0aGUgc2FtZVxuICAgIC8vIHByb3RlY3Rpb24gZXZlcnkgb3RoZXIgc3RhZ2UgZ2V0cy4gKFR5cGVkU2NvcGUgYnJpbmdzIGl0cyBvd24gcHJveHkuKVxuICAgIGNvbnN0IHJhd1Njb3BlID0gdGhpcy5kZXBzLnNjb3BlRmFjdG9yeShjb250ZXh0LCBub2RlLm5hbWUsIHRoaXMuZGVwcy5yZWFkT25seUNvbnRleHQsIHRoaXMuZGVwcy5leGVjdXRpb25FbnYpO1xuICAgIGNvbnN0IGlzVHlwZWRTY29wZSA9IHJhd1Njb3BlICYmIChyYXdTY29wZSBhcyBhbnkpW0lTX1RZUEVEX1NDT1BFXSA9PT0gdHJ1ZTtcbiAgICBjb25zdCBzY29wZSA9IGlzVHlwZWRTY29wZVxuICAgICAgPyByYXdTY29wZVxuICAgICAgOiAoY3JlYXRlUHJvdGVjdGVkU2NvcGUocmF3U2NvcGUgYXMgb2JqZWN0LCB7XG4gICAgICAgICAgbW9kZTogdGhpcy5kZXBzLnNjb3BlUHJvdGVjdGlvbk1vZGUsXG4gICAgICAgICAgc3RhZ2VOYW1lOiBub2RlLm5hbWUsXG4gICAgICAgIH0pIGFzIFRTY29wZSk7XG4gICAgbm90aWZ5KHJhd1Njb3BlLCAnbm90aWZ5U3RhZ2VTdGFydCcpO1xuXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnJlc29sdmVJdGVtcyhjb25maWcsIHNjb3BlLCBub2RlKTtcbiAgICBjb25zdCB0b3RhbCA9IGl0ZW1zLmxlbmd0aDtcbiAgICBjb25zdCBicmFuY2hDb3VudCA9IE1hdGgubWluKHRvdGFsLCBjb25maWcubWF4QnJhbmNoZXMpO1xuICAgIGNvbnN0IHRydW5jYXRlZCA9IHRvdGFsID4gYnJhbmNoQ291bnQ7XG5cbiAgICBjb250ZXh0LmFkZExvZygncGFyYWxsZWxGb3JFYWNoJywge1xuICAgICAgaXRlbXM6IHRvdGFsLFxuICAgICAgYnJhbmNoZXM6IGJyYW5jaENvdW50LFxuICAgICAgbWF4QnJhbmNoZXM6IGNvbmZpZy5tYXhCcmFuY2hlcyxcbiAgICAgIHRydW5jYXRlZCxcbiAgICAgIGludG86IGNvbmZpZy5pbnRvLFxuICAgIH0pO1xuICAgIGlmICh0cnVuY2F0ZWQpIHtcbiAgICAgIC8vIFN0YXRlZCwgbm90IHNpbGVudCDigJQgaW4gdGhlIHN0YWdlJ3Mgb3duIGZsb3cgbWVzc2FnZXMgQU5EIGl0cyBsb2dzIGFib3ZlLlxuICAgICAgY29udGV4dC5hZGRGbG93RGVidWdNZXNzYWdlKFxuICAgICAgICAnY2hpbGRyZW4nLFxuICAgICAgICBgbWF4QnJhbmNoZXMgcmVhY2hlZDogcnVubmluZyAke2JyYW5jaENvdW50fSBvZiAke3RvdGFsfSBpdGVtcyAoJHt0b3RhbCAtIGJyYW5jaENvdW50fSBub3QgcnVuKWAsXG4gICAgICAgIHsgY291bnQ6IGJyYW5jaENvdW50IH0sXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCByZXN1bHRzOiB1bmtub3duW107XG4gICAgaWYgKGJyYW5jaENvdW50ID09PSAwKSB7XG4gICAgICAvLyBaZXJvIGl0ZW1zID0gemVybyBicmFuY2hlczogbm8gZmFuLW91dCBldmVudCwgYW4gZW1wdHkgb3JkZXJlZCBhcnJheS5cbiAgICAgIHJlc3VsdHMgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYnJhbmNoZXMgPSB0aGlzLmJ1aWxkQnJhbmNoZXMobm9kZSwgaXRlbXMsIGJyYW5jaENvdW50KTtcbiAgICAgIHRoaXMuaG9va3MucmVjb3JkQnJhbmNoU3RydWN0dXJlKG5vZGUuaWQsIGJyYW5jaGVzKTtcblxuICAgICAgLy8gVGhlIGZhbi1vdXQgbm9kZSBoYW5kZWQgdG8gQ2hpbGRyZW5FeGVjdXRvciBpcyBhIHRlbXAgdmlldyBjYXJyeWluZyB0aGVcbiAgICAgIC8vIGdlbmVyYXRlZCBicmFuY2hlcyAoc2FtZSBzaGFwZSBgZXhlY3V0ZVNlbGVjdGVkQ2hpbGRyZW5gIHVzZXMgZm9yIGl0c1xuICAgICAgLy8gc2VsZWN0ZWQgc3Vic2V0KSDigJQgdGhlIHNoYXJlZCBncmFwaCBub2RlIGlzIG5ldmVyIG11dGF0ZWQsIHNvIGEgbG9vcFxuICAgICAgLy8gcmV2aXNpdCByZWdlbmVyYXRlcyBjbGVhbmx5LlxuICAgICAgY29uc3QgZm9ya1ZpZXc6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+ID0ge1xuICAgICAgICAuLi5ub2RlLFxuICAgICAgICBjaGlsZHJlbjogYnJhbmNoZXMsXG4gICAgICAgIC4uLihjb25maWcuZmFpbEZhc3QgIT09IHVuZGVmaW5lZCAmJiB7IGZhaWxGYXN0OiBjb25maWcuZmFpbEZhc3QgfSksXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjaGlsZFJlc3VsdHMgPSBhd2FpdCB0aGlzLmNoaWxkcmVuRXhlY3V0b3IuZXhlY3V0ZU5vZGVDaGlsZHJlbihcbiAgICAgICAgZm9ya1ZpZXcsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgYnJhbmNoUGF0aCxcbiAgICAgICAgdHJhdmVyc2FsQ29udGV4dCxcbiAgICAgICk7XG5cbiAgICAgIHJlc3VsdHMgPSB0aGlzLmNvbGxlY3RPcmRlcmVkKG5vZGUsIGJyYW5jaENvdW50LCBjaGlsZFJlc3VsdHMpO1xuICAgIH1cblxuICAgIHRoaXMud3JpdGVSZXN1bHRzKHJhd1Njb3BlLCBjb250ZXh0LCBjb25maWcuaW50bywgcmVzdWx0cyk7XG4gICAgbm90aWZ5KHJhd1Njb3BlLCAnbm90aWZ5U3RhZ2VFbmQnKTtcbiAgICBjb250ZXh0LmNvbW1pdCgpO1xuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGUgdGhlIGl0ZW1zIHNlbGVjdG9yIGFnYWluc3QgdGhlIGxpdmUgc2NvcGUuIEEgbm9uLWFycmF5IHJldHVybiBpc1xuICAgKiBhIGNoYXJ0IGJ1Zywgbm90IGEgcnVudGltZSBjb25kaXRpb24g4oCUIGl0IGZhaWxzIGxvdWRseSwgbmFtaW5nIHRoZSBzdGFnZS5cbiAgICovXG4gIHByaXZhdGUgcmVzb2x2ZUl0ZW1zKFxuICAgIGNvbmZpZzogUGFyYWxsZWxGb3JFYWNoQ29uZmlnPHVua25vd24sIFRTY29wZT4sXG4gICAgc2NvcGU6IFRTY29wZSxcbiAgICBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgKTogcmVhZG9ubHkgdW5rbm93bltdIHtcbiAgICBjb25zdCBpdGVtcyA9IGNvbmZpZy5pdGVtcyhzY29wZSk7XG4gICAgaWYgKGl0ZW1zID09PSB1bmRlZmluZWQgfHwgaXRlbXMgPT09IG51bGwpIHJldHVybiBbXTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBwYXJhbGxlbEZvckVhY2ggJyR7bm9kZS5pZH0nOiBpdGVtcygpIG11c3QgcmV0dXJuIGFuIGFycmF5IChnb3QgJHt0eXBlb2YgaXRlbXN9KS4gYCArXG4gICAgICAgICAgJ1JldHVybiBbXSB0byBydW4gemVybyBicmFuY2hlcy4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGl0ZW1zO1xuICB9XG5cbiAgLyoqIEdlbmVyYXRlIG9uZSBzdWJmbG93LW1vdW50IG5vZGUgcGVyIGJyYW5jaCwgcmVnaXN0ZXJpbmcgZWFjaCBicmFuY2ggY2hhcnQuICovXG4gIHByaXZhdGUgYnVpbGRCcmFuY2hlcyhcbiAgICBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgICBpdGVtczogcmVhZG9ubHkgdW5rbm93bltdLFxuICAgIGJyYW5jaENvdW50OiBudW1iZXIsXG4gICk6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W10ge1xuICAgIGNvbnN0IGNvbmZpZyA9IG5vZGUucGFyYWxsZWxGb3JFYWNoIGFzIFBhcmFsbGVsRm9yRWFjaENvbmZpZzx1bmtub3duLCBUU2NvcGU+O1xuICAgIGNvbnN0IGJyYW5jaGVzOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPltdID0gW107XG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYnJhbmNoQ291bnQ7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpbmRleF07XG4gICAgICBjb25zdCBzdWJmbG93SWQgPSBidWlsZEJyYW5jaFNlZ21lbnQobm9kZS5pZCwgaW5kZXgpO1xuICAgICAgY29uc3QgY2hhcnQgPSBjb25maWcuYnJhbmNoKGl0ZW0sIGluZGV4KTtcbiAgICAgIGlmICghY2hhcnQgfHwgIWNoYXJ0LnJvb3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBwYXJhbGxlbEZvckVhY2ggJyR7bm9kZS5pZH0nOiBicmFuY2goaXRlbSwgJHtpbmRleH0pIG11c3QgcmV0dXJuIGEgYnVpbHQgY2hhcnQgYCArXG4gICAgICAgICAgICAnKHRoZSByZXN1bHQgb2YgZmxvd0NoYXJ0KC4uLikuYnVpbGQoKSkuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gU2FtZSBwcmVmaXhpbmcgYSBsYXp5IHN1YmZsb3cgZ2V0cyDigJQgdGhlIGJyYW5jaCdzIGlubmVyIGlkcyBiZWNvbWVcbiAgICAgIC8vIGA8c2VnbWVudD4vPGlkPmAsIHNvIGl0cyBzdGFnZXMgYWRkcmVzcyBhcyBgPHNlZ21lbnQ+LzxpZD4jPG4+YC5cbiAgICAgIGNvbnN0IHByZWZpeGVkUm9vdCA9IHRoaXMuaG9va3MucHJlZml4Tm9kZVRyZWUoY2hhcnQucm9vdCBhcyBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiwgc3ViZmxvd0lkKTtcbiAgICAgIHRoaXMuaG9va3MucmVnaXN0ZXJCcmFuY2hTdWJmbG93KHN1YmZsb3dJZCwgcHJlZml4ZWRSb290LCBjaGFydCk7XG5cbiAgICAgIGJyYW5jaGVzLnB1c2goe1xuICAgICAgICBuYW1lOiBgJHtub2RlLm5hbWV9IFske2luZGV4fV1gLFxuICAgICAgICBpZDogc3ViZmxvd0lkLFxuICAgICAgICBpc1N1YmZsb3dSb290OiB0cnVlLFxuICAgICAgICBzdWJmbG93SWQsXG4gICAgICAgIHN1YmZsb3dOYW1lOiBgJHtub2RlLm5hbWV9IFske2luZGV4fV1gLFxuICAgICAgICBzdWJmbG93TW91bnRPcHRpb25zOiB7XG4gICAgICAgICAgLy8gRDEncyBcImlucHV0TWFwcGVyIHNlYW0gZm9yIGZlZWRpbmcgdGhlIGl0ZW0gaW5cIjogdGhlIGl0ZW0gaXNcbiAgICAgICAgICAvLyB2aXNpYmxlIElOIHRoZSBicmFuY2gncyBzY29wZSAoYW5kIHNvIGluIGl0cyBjb21taXQgbG9nKSBhcyB3ZWxsIGFzXG4gICAgICAgICAgLy8gY2xvc2VkIG92ZXIgYnkgdGhlIGZhY3Rvcnkg4oCUIHByb3ZlbmFuY2UgYmVhdHMgYSBoaWRkZW4gY2xvc3VyZS5cbiAgICAgICAgICBpbnB1dE1hcHBlcjogKCkgPT4gKHsgaXRlbSwgaW5kZXggfSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnJhbmNoZXM7XG4gIH1cblxuICAvKipcbiAgICogQXNzZW1ibGUgcmVzdWx0cyBpbiBJVEVNUyBvcmRlciDigJQgbmV2ZXIgY29tcGxldGlvbiBvcmRlci5cbiAgICpcbiAgICogVGhlIGJyYW5jaCdzIHZhbHVlIGlzIGl0cyBzdWJmbG93IG91dHB1dCwgZmFsbGluZyBiYWNrIHRvIHRoZSBicmFuY2gnc1xuICAgKiBmaW5hbCBzaGFyZWQgc3RhdGUgKHRoZSBUeXBlZFNjb3BlIGNhc2UsIHdoZXJlIHN0YWdlIGZ1bmN0aW9ucyByZXR1cm5cbiAgICogdm9pZCkg4oCUIHRoZSBzYW1lIGBzdWJmbG93T3V0cHV0ID8/IHNoYXJlZFN0YXRlYCBydWxlIGBTdWJmbG93RXhlY3V0b3JgXG4gICAqIGFwcGxpZXMgdG8gYW4gb3V0cHV0TWFwcGVyLlxuICAgKi9cbiAgcHJpdmF0ZSBjb2xsZWN0T3JkZXJlZChcbiAgICBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgICBicmFuY2hDb3VudDogbnVtYmVyLFxuICAgIGNoaWxkUmVzdWx0czogUmVjb3JkPHN0cmluZywgTm9kZVJlc3VsdFR5cGU+LFxuICApOiB1bmtub3duW10ge1xuICAgIGNvbnN0IG9yZGVyZWQ6IHVua25vd25bXSA9IFtdO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBicmFuY2hDb3VudDsgaW5kZXgrKykge1xuICAgICAgY29uc3Qgc3ViZmxvd0lkID0gYnVpbGRCcmFuY2hTZWdtZW50KG5vZGUuaWQsIGluZGV4KTtcbiAgICAgIGNvbnN0IGVudHJ5ID0gY2hpbGRSZXN1bHRzW3N1YmZsb3dJZF07XG4gICAgICBpZiAoZW50cnkgPT09IHVuZGVmaW5lZCB8fCBlbnRyeS5pc0Vycm9yKSB7XG4gICAgICAgIC8vIEJlc3QtZWZmb3J0IG1vZGU6IGEgZmFpbGVkIGJyYW5jaCBrZWVwcyBpdHMgU0xPVCAob3JkZXIgaXMgaXRlbXNcbiAgICAgICAgLy8gb3JkZXIpIHdpdGggYW4gdW5kZWZpbmVkIHZhbHVlLiBmYWlsRmFzdCBtb2RlIG5ldmVyIHJlYWNoZXMgaGVyZSDigJRcbiAgICAgICAgLy8gdGhlIGVycm9yIGFscmVhZHkgcmVqZWN0ZWQgdGhlIHdob2xlIHN0YWdlLlxuICAgICAgICBvcmRlcmVkLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBvcmRlcmVkLnB1c2goZW50cnkucmVzdWx0ID8/IHRoaXMuaG9va3MuYnJhbmNoU2hhcmVkU3RhdGUoc3ViZmxvd0lkKSk7XG4gICAgfVxuICAgIHJldHVybiBvcmRlcmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyaXRlIHRoZSBvcmRlcmVkIGFycmF5IGFzIE9ORSB2YWx1ZSBvbiB0aGUgcGFyZW50IHNjb3BlLlxuICAgKlxuICAgKiBgJHNldFZhbHVlYCBkZWxpYmVyYXRlbHksIHdoZXJlIGF2YWlsYWJsZTogdGhlIFR5cGVkU2NvcGUgc2V0IHRyYXBcbiAgICogSlNPTi1yb3VuZC10cmlwcyBldmVyeSBvYmplY3Qgd3JpdGUgKERhdGXihpJzdHJpbmcsIE1hcOKGknt9KSwgYW5kIGJyYW5jaFxuICAgKiByZXN1bHRzIGFyZSBleGFjdGx5IHRoZSBraW5kIG9mIHBheWxvYWQgdGhhdCB3b3VsZCBzaWxlbnRseSBkZWdyYWRlLlxuICAgKi9cbiAgcHJpdmF0ZSB3cml0ZVJlc3VsdHMocmF3U2NvcGU6IFRTY29wZSwgY29udGV4dDogU3RhZ2VDb250ZXh0LCBpbnRvOiBzdHJpbmcsIHJlc3VsdHM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGNvbnN0IHMgPSByYXdTY29wZSBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmICh0eXBlb2Ygcz8uJHNldFZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAocy4kc2V0VmFsdWUgYXMgKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkoaW50bywgcmVzdWx0cyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygcz8uc2V0VmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIChzLnNldFZhbHVlIGFzIChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHZvaWQpKGludG8sIHJlc3VsdHMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBObyBmYWNhZGUgKGhhbmQtcm9sbGVkIHNjb3BlIGZhY3RvcnkpIOKAlCB3cml0ZSBzdHJhaWdodCB0byB0aGUgZnJhbWUuXG4gICAgY29udGV4dC5zZXRHbG9iYWwoaW50bywgcmVzdWx0cyk7XG4gIH1cbn1cblxuLyoqIEZpcmUgYSBzY29wZSBsaWZlY3ljbGUgbm90aWZpY2F0aW9uIGlmIHRoZSBzY29wZSBzdXBwb3J0cyBpdC4gKi9cbmZ1bmN0aW9uIG5vdGlmeShzY29wZTogdW5rbm93biwgbWV0aG9kOiAnbm90aWZ5U3RhZ2VTdGFydCcgfCAnbm90aWZ5U3RhZ2VFbmQnKTogdm9pZCB7XG4gIGNvbnN0IHMgPSBzY29wZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgaWYgKHMgJiYgdHlwZW9mIHNbbWV0aG9kXSA9PT0gJ2Z1bmN0aW9uJykgKHNbbWV0aG9kXSBhcyAoKSA9PiB2b2lkKSgpO1xufVxuIl19
|
|
230
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFyYWxsZWxGb3JFYWNoSGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL2hhbmRsZXJzL1BhcmFsbGVsRm9yRWFjaEhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1ERztBQUdILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDdEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFzQnpELE1BQU0sT0FBTyxzQkFBc0I7SUFFdkI7SUFDQTtJQUNBO0lBSFYsWUFDVSxJQUErQixFQUMvQixnQkFBZ0QsRUFDaEQsS0FBeUM7UUFGekMsU0FBSSxHQUFKLElBQUksQ0FBMkI7UUFDL0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFnQztRQUNoRCxVQUFLLEdBQUwsS0FBSyxDQUFvQztJQUNoRCxDQUFDO0lBRUo7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLEdBQUcsQ0FDUCxJQUE2QixFQUM3QixPQUFxQixFQUNyQixVQUE4QixFQUM5QixnQkFBa0M7UUFFbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGVBQXlELENBQUM7UUFFOUUsMEVBQTBFO1FBQzFFLDRFQUE0RTtRQUM1RSxxRUFBcUU7UUFDckUsd0VBQXdFO1FBQ3hFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7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QztnQkFDOUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDeEIsU0FBUztZQUNYLENBQUM7WUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssWUFBWSxDQUFDLFFBQWdCLEVBQUUsT0FBcUIsRUFBRSxJQUFZLEVBQUUsT0FBa0I7UUFDNUYsTUFBTSxDQUFDLEdBQUcsUUFBOEMsQ0FBQztRQUN6RCxJQUFJLE9BQU8sQ0FBQyxFQUFFLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN0QyxDQUFDLENBQUMsU0FBbUQsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdEUsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxFQUFFLFFBQVEsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNyQyxDQUFDLENBQUMsUUFBa0QsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDckUsT0FBTztRQUNULENBQUM7UUFDRCx1RUFBdUU7UUFDdkUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztDQUNGO0FBRUQsb0VBQW9FO0FBQ3BFLFNBQVMsTUFBTSxDQUFDLEtBQWMsRUFBRSxNQUE2QztJQUMzRSxNQUFNLENBQUMsR0FBRyxLQUE0QyxDQUFDO0lBQ3ZELElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLFVBQVU7UUFBRyxDQUFDLENBQUMsTUFBTSxDQUFnQixFQUFFLENBQUM7QUFDeEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGFyYWxsZWxGb3JFYWNoSGFuZGxlciDigJQgZHluYW1pYyBmYW4tb3V0OiBvbmUgYnJhbmNoIHBlciBpdGVtLCBicmFuY2ggQ09VTlRcbiAqIGRlY2lkZWQgYXQgcnVudGltZSBmcm9tIHRoZSBwYXlsb2FkLlxuICpcbiAqIERlc2lnbjogZG9jcy9kZXNpZ24vZXhlY3V0aW9uLWNvbnRyb2wubWQgKEQxICsgRDIpLiBSb3VuZCBCIGJ1aWxkcyBleGFjdGx5XG4gKiB0aGF0IGRvY3VtZW50LlxuICpcbiAqICMjIFdoYXQgdGhpcyBoYW5kbGVyIGRvZXMgTk9UIGludmVudFxuICpcbiAqIEFsbW9zdCBldmVyeXRoaW5nIGhlcmUgaXMgZXhpc3RpbmcgbWFjaGluZXJ5LCB3aXJlZCB0b2dldGhlcjpcbiAqXG4gKiAtICoqRWFjaCBicmFuY2ggaXMgYSBnZW5lcmF0ZWQgU1VCRkxPVy4qKiBJdHMgcGF0aCBzZWdtZW50IGlzXG4gKiAgIGA8cGFyZW50U3RhZ2VJZD5+PGluZGV4PmAgKHNlZSBgZW5naW5lL2JyYW5jaFNlZ21lbnQudHNgKSDigJQgYSBzdWJmbG93UGF0aFxuICogICBzZWdtZW50IGluIHRoZSBncmFtbWFyIHRoYXQgYWxyZWFkeSBzaGlwcywgTk9UIGEgbmV3IGRlbGltaXRlciBjbGFzcy4gU28gYVxuICogICBicmFuY2ggZ2V0cywgZm9yIGZyZWU6IGEgZnJlc2ggaXNvbGF0ZWQgYEV4ZWN1dGlvblJ1bnRpbWVgIChicmFuY2hlcyBjYW5ub3RcbiAqICAgY29ycnVwdCBlYWNoIG90aGVyJ3MgaW4tZmxpZ2h0IHN0YXRlKSwgdGhlIGlucHV0TWFwcGVyIHNlYW0gZm9yIGZlZWRpbmcgdGhlXG4gKiAgIGl0ZW0gaW4sIGFuZCDigJQgdGhlIHBvaW50IG9mIHRoZSB3aG9sZSBkZXNpZ24g4oCUIGBwYXJzZVJ1bnRpbWVTdGFnZUlkYCxcbiAqICAgYGNhdXNhbENoYWluYCwgYHNsaWNlRm9yS2V5YCBhbmQgYGZvcndhcmRTbGljZUZvcktleWAgcmVhZGluZyBicmFuY2hcbiAqICAgY29tbWl0cyB3aXRoIFpFUk8gY2hhbmdlcywgYmVjYXVzZSB0aGUgaWQgc2hhcGUgSVMgdGhlIHNoaXBwZWQgc2hhcGUuXG4gKiAtICoqVGhlIGZhbi1vdXQgaXRzZWxmIGlzIGBDaGlsZHJlbkV4ZWN1dG9yYC4qKiBUaGF0IGlzIHdoYXQgbWFrZXMgdGhlXG4gKiAgIGZhaWx1cmUgcG9saWN5IFwiUGFyYWxsZWwncyBleGlzdGluZyBmYWlsdXJlIHBvbGljeVwiIHJhdGhlciB0aGFuIGEgc2Vjb25kXG4gKiAgIG9uZTogYGZhaWxGYXN0YCDihpIgYFByb21pc2UuYWxsYCwgb3RoZXJ3aXNlIGJlc3QtZWZmb3J0IGBQcm9taXNlLmFsbFNldHRsZWRgLlxuICogICBJdCBhbHNvIGZpcmVzIGBvbkZvcmtgICsgYG9uU3RhZ2VFeGVjdXRlZCgnZm9yaycpYCBhbmQgYnViYmxlcyBhXG4gKiAgIGBQYXVzZVNpZ25hbGAgb3V0IG9mIGEgYnJhbmNoLCBhbGwgdW5jaGFuZ2VkLlxuICpcbiAqICMjIFRoZSBsYXdzIHRoaXMgaGFuZGxlciBvd25zXG4gKlxuICogKipPcmRlciBpcyBpdGVtcyBvcmRlci4qKiBSZXN1bHRzIGFyZSBhc3NlbWJsZWQgYnkgaW5kZXggZnJvbSB0aGUgZmFuLW91dCdzXG4gKiBrZXllZCByZXN1bHRzLCBuZXZlciBieSBjb21wbGV0aW9uIG9yZGVyLCBhbmQgbGFuZCBhcyBPTkUgYXJyYXkgd3JpdGUgb24gdGhlXG4gKiBwYXJlbnQg4oCUIHNvIGBpbnRvW2ldYCBpcyBhbHdheXMgYnJhbmNoIGBpYCdzIHJlc3VsdCBubyBtYXR0ZXIgd2hpY2ggYnJhbmNoXG4gKiBmaW5pc2hlZCBmaXJzdC4gQSBmYWlsZWQgYnJhbmNoIChiZXN0LWVmZm9ydCBtb2RlKSBsZWF2ZXMgYHVuZGVmaW5lZGAgaW4gaXRzXG4gKiBzbG90OyB3aGljaCBicmFuY2ggZmFpbGVkIGlzIG5vdCByZXBvcnRlZCBoZXJlLCBiZWNhdXNlIHRoYXQgZ2FwIGlzXG4gKiBwcmUtZXhpc3RpbmcgaW4gdGhlIHBhcmFsbGVsIGZhbi1vdXQgYW5kIG5vdCB0aGlzIGZlYXR1cmUncyB0byB3aWRlbi5cbiAqXG4gKiAqKm1heEJyYW5jaGVzIHRydW5jYXRlcywgYW5kIHNheXMgc28uKiogSXRlbXMgcGFzdCB0aGUgY2VpbGluZyBkbyBub3QgcnVuLlxuICogVGhlIHRydW5jYXRpb24gaXMgcmVjb3JkZWQgaW4gdGhlIHN0YWdlJ3Mgb3duIGNvbW1pdC12aXNpYmxlIGxvZyBhbmQgYXMgYVxuICogZmxvdyBtZXNzYWdlIOKAlCBib3VuZGVkIGV4ZWN1dGlvbiwgc3RhdGVkLCBuZXZlciBzaWxlbnQuXG4gKlxuICogKipCcmFuY2ggY2hhcnRzIGFyZSByZS1yZWdpc3RlcmVkIG9uIEVWRVJZIHZpc2l0LioqIFRoZSBnZW5lcmF0ZWQgc2VnbWVudHNcbiAqIGFyZSBzdGFibGUgYWNyb3NzIGxvb3AgaXRlcmF0aW9ucywgYW5kIHN1YmZsb3cgcmVnaXN0cmF0aW9uIGlzIG5vcm1hbGx5XG4gKiBmaXJzdC13cml0ZS13aW5zIOKAlCB3aGljaCB3b3VsZCBtZWFuIGEgbG9vcGluZyBmYW4tb3V0IHNpbGVudGx5IHJlLWV4ZWN1dGluZ1xuICogaXRlcmF0aW9uIDEncyBicmFuY2ggY2hhcnRzIGZvcmV2ZXIsIGV2ZW4gd2hlbiB0aGUgZmFjdG9yeSByZXR1cm5zIGRpZmZlcmVudFxuICogY2hhcnRzLiBUaGlzIGhhbmRsZXIgb3ZlcndyaXRlcyBpbnN0ZWFkLiBQZXItaXRlcmF0aW9uIHJlc3VsdHMgc3RheVxuICogYWRkcmVzc2FibGUgdGhyb3VnaCB0aGUgbW91bnQncyBgcnVudGltZVN0YWdlSWRgIGtleSwgZXhhY3RseSBhcyB0aGV5IGRvIGZvclxuICogYSBoYW5kLWF1dGhvcmVkIGxvb3Bpbmcgc3ViZmxvdy5cbiAqXG4gKiAqKkV2ZW50IG9yZGVyLioqIGBvblN0YWdlU3RhcnRgIOKGkiB0aGUgYGl0ZW1zYCByZWFkIOKGkiBgb25Gb3JrYCDihpIgYnJhbmNoZXMg4oaSXG4gKiB0aGUgb3JkZXJlZC1hcnJheSB3cml0ZSDihpIgYG9uU3RhZ2VFbmRgIOKGkiBgb25Db21taXRgLiBUaGUgc3RhZ2UncyBvd24gY29tbWl0XG4gKiB0aGVyZWZvcmUgbGFuZHMgQUZURVIgaXRzIGBvbkZvcmtgLCB3aGljaCBpcyB0aGUgb25lIHBsYWNlIGEgc3RhZ2UncyBjb21taXRcbiAqIGZvbGxvd3MgaXRzIGZhbi1vdXQgZXZlbnQg4oCUIHVuYXZvaWRhYmxlIGFuZCBob25lc3Q6IHRoZSByZXN1bHQgaXMgbm90XG4gKiBrbm93YWJsZSB1bnRpbCB0aGUgYnJhbmNoZXMgc2V0dGxlLlxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgeyB1bndyYXBIYW5kbGVzIH0gZnJvbSAnLi4vLi4vcmVhY3RpdmUvaGFuZGxlcy5qcyc7XG5pbXBvcnQgeyBJU19UWVBFRF9TQ09QRSB9IGZyb20gJy4uLy4uL3JlYWN0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB7IGNyZWF0ZVByb3RlY3RlZFNjb3BlIH0gZnJvbSAnLi4vLi4vc2NvcGUvcHJvdGVjdGlvbi9jcmVhdGVQcm90ZWN0ZWRTY29wZS5qcyc7XG5pbXBvcnQgeyBidWlsZEJyYW5jaFNlZ21lbnQgfSBmcm9tICcuLi9icmFuY2hTZWdtZW50LmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VOb2RlIH0gZnJvbSAnLi4vZ3JhcGgvU3RhZ2VOb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgVHJhdmVyc2FsQ29udGV4dCB9IGZyb20gJy4uL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEJyYW5jaENoYXJ0LCBIYW5kbGVyRGVwcywgTm9kZVJlc3VsdFR5cGUsIFBhcmFsbGVsRm9yRWFjaENvbmZpZyB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgQ2hpbGRyZW5FeGVjdXRvciB9IGZyb20gJy4vQ2hpbGRyZW5FeGVjdXRvci5qcyc7XG5cbi8qKlxuICogVHJhdmVyc2VyLW93bmVkIG9wZXJhdGlvbnMgdGhlIGhhbmRsZXIgbmVlZHMuIFBhc3NlZCBhcyBmdW5jdGlvbnMgKG5vdCB0aGVcbiAqIHRyYXZlcnNlcikgc28gdGhlIGhhbmRsZXIga2VlcHMgdGhlIHNhbWUgbm8tYmFjay1yZWZlcmVuY2Ugc2hhcGUgYXMgZXZlcnlcbiAqIG90aGVyIGhhbmRsZXIgaW4gdGhpcyBkaXJlY3RvcnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyYWxsZWxGb3JFYWNoSG9va3M8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIC8qKiBUaGUgdHJhdmVyc2VyJ3MgYHByZWZpeE5vZGVUcmVlYCDigJQgYnl0ZS10d2luIG9mIHRoZSBidWlsZGVyJ3MgYF9wcmVmaXhOb2RlVHJlZWAuICovXG4gIHByZWZpeE5vZGVUcmVlKG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LCBwcmVmaXg6IHN0cmluZyk6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICAvKiogUmVnaXN0ZXIgKE9WRVJXUklUSU5HKSBhIGdlbmVyYXRlZCBicmFuY2ggc3ViZmxvdyArIGl0cyBzdGFnZSBmdW5jdGlvbnMuICovXG4gIHJlZ2lzdGVyQnJhbmNoU3ViZmxvdyhzdWJmbG93SWQ6IHN0cmluZywgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sIGNoYXJ0OiBCcmFuY2hDaGFydCk6IHZvaWQ7XG4gIC8qKiBSZWFkIGEgY29tcGxldGVkIGJyYW5jaCdzIGZpbmFsIHNoYXJlZCBzdGF0ZSwgZm9yIHRoZSBgc3ViZmxvd091dHB1dCA/PyBzdGF0ZWAgZmFsbGJhY2suICovXG4gIGJyYW5jaFNoYXJlZFN0YXRlKHN1YmZsb3dJZDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gIC8qKiBNaXJyb3IgdGhlIGdlbmVyYXRlZCBicmFuY2hlcyBpbnRvIHRoZSBydW50aW1lIHN0cnVjdHVyZSwgZm9yIHZpc3VhbGl6YXRpb24uICovXG4gIHJlY29yZEJyYW5jaFN0cnVjdHVyZShub2RlSWQ6IHN0cmluZywgYnJhbmNoZXM6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W10pOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgUGFyYWxsZWxGb3JFYWNoSGFuZGxlcjxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBkZXBzOiBIYW5kbGVyRGVwczxUT3V0LCBUU2NvcGU+LFxuICAgIHByaXZhdGUgY2hpbGRyZW5FeGVjdXRvcjogQ2hpbGRyZW5FeGVjdXRvcjxUT3V0LCBUU2NvcGU+LFxuICAgIHByaXZhdGUgaG9va3M6IFBhcmFsbGVsRm9yRWFjaEhvb2tzPFRPdXQsIFRTY29wZT4sXG4gICkge31cblxuICAvKipcbiAgICogUnVuIHRoZSBmYW4tb3V0IHRvIGNvbXBsZXRpb24gYW5kIGNvbW1pdCB0aGUgb3JkZXJlZCByZXN1bHRzLlxuICAgKiBSZXR1cm5zIHRoZSByZXN1bHRzIGFycmF5ICh0aGUgc3RhZ2UncyBvdXRwdXQpLlxuICAgKi9cbiAgYXN5bmMgcnVuKFxuICAgIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIGNvbnRleHQ6IFN0YWdlQ29udGV4dCxcbiAgICBicmFuY2hQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgdHJhdmVyc2FsQ29udGV4dDogVHJhdmVyc2FsQ29udGV4dCxcbiAgKTogUHJvbWlzZTx1bmtub3duW10+IHtcbiAgICBjb25zdCBjb25maWcgPSBub2RlLnBhcmFsbGVsRm9yRWFjaCBhcyBQYXJhbGxlbEZvckVhY2hDb25maWc8dW5rbm93biwgVFNjb3BlPjtcblxuICAgIC8vIFNhbWUgc2NvcGUgY29uc3RydWN0aW9uIFN0YWdlUnVubmVyIHBlcmZvcm1zLCBwcm90ZWN0aW9uIGluY2x1ZGVkOiB0aGlzXG4gICAgLy8gc3RhZ2UgaGFzIG5vIHVzZXIgZnVuY3Rpb24sIGJ1dCBgaXRlbXMoc2NvcGUpYCBJUyB1c2VyIGNvZGUsIHNvIGl0cyByZWFkc1xuICAgIC8vIGFyZSB0cmFja2VkIGFuZCBhIHN0cmF5IGFzc2lnbm1lbnQgaW5zaWRlIGl0IGlzIGNhdWdodCBieSB0aGUgc2FtZVxuICAgIC8vIHByb3RlY3Rpb24gZXZlcnkgb3RoZXIgc3RhZ2UgZ2V0cy4gKFR5cGVkU2NvcGUgYnJpbmdzIGl0cyBvd24gcHJveHkuKVxuICAgIGNvbnN0IHJhd1Njb3BlID0gdGhpcy5kZXBzLnNjb3BlRmFjdG9yeShjb250ZXh0LCBub2RlLm5hbWUsIHRoaXMuZGVwcy5yZWFkT25seUNvbnRleHQsIHRoaXMuZGVwcy5leGVjdXRpb25FbnYpO1xuICAgIGNvbnN0IGlzVHlwZWRTY29wZSA9IHJhd1Njb3BlICYmIChyYXdTY29wZSBhcyBhbnkpW0lTX1RZUEVEX1NDT1BFXSA9PT0gdHJ1ZTtcbiAgICBjb25zdCBzY29wZSA9IGlzVHlwZWRTY29wZVxuICAgICAgPyByYXdTY29wZVxuICAgICAgOiAoY3JlYXRlUHJvdGVjdGVkU2NvcGUocmF3U2NvcGUgYXMgb2JqZWN0LCB7XG4gICAgICAgICAgbW9kZTogdGhpcy5kZXBzLnNjb3BlUHJvdGVjdGlvbk1vZGUsXG4gICAgICAgICAgc3RhZ2VOYW1lOiBub2RlLm5hbWUsXG4gICAgICAgIH0pIGFzIFRTY29wZSk7XG4gICAgbm90aWZ5KHJhd1Njb3BlLCAnbm90aWZ5U3RhZ2VTdGFydCcpO1xuXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnJlc29sdmVJdGVtcyhjb25maWcsIHNjb3BlLCBub2RlKTtcbiAgICBjb25zdCB0b3RhbCA9IGl0ZW1zLmxlbmd0aDtcbiAgICBjb25zdCBicmFuY2hDb3VudCA9IE1hdGgubWluKHRvdGFsLCBjb25maWcubWF4QnJhbmNoZXMpO1xuICAgIGNvbnN0IHRydW5jYXRlZCA9IHRvdGFsID4gYnJhbmNoQ291bnQ7XG5cbiAgICBjb250ZXh0LmFkZExvZygncGFyYWxsZWxGb3JFYWNoJywge1xuICAgICAgaXRlbXM6IHRvdGFsLFxuICAgICAgYnJhbmNoZXM6IGJyYW5jaENvdW50LFxuICAgICAgbWF4QnJhbmNoZXM6IGNvbmZpZy5tYXhCcmFuY2hlcyxcbiAgICAgIHRydW5jYXRlZCxcbiAgICAgIGludG86IGNvbmZpZy5pbnRvLFxuICAgIH0pO1xuICAgIGlmICh0cnVuY2F0ZWQpIHtcbiAgICAgIC8vIFN0YXRlZCwgbm90IHNpbGVudCDigJQgaW4gdGhlIHN0YWdlJ3Mgb3duIGZsb3cgbWVzc2FnZXMgQU5EIGl0cyBsb2dzIGFib3ZlLlxuICAgICAgY29udGV4dC5hZGRGbG93RGVidWdNZXNzYWdlKFxuICAgICAgICAnY2hpbGRyZW4nLFxuICAgICAgICBgbWF4QnJhbmNoZXMgcmVhY2hlZDogcnVubmluZyAke2JyYW5jaENvdW50fSBvZiAke3RvdGFsfSBpdGVtcyAoJHt0b3RhbCAtIGJyYW5jaENvdW50fSBub3QgcnVuKWAsXG4gICAgICAgIHsgY291bnQ6IGJyYW5jaENvdW50IH0sXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCByZXN1bHRzOiB1bmtub3duW107XG4gICAgaWYgKGJyYW5jaENvdW50ID09PSAwKSB7XG4gICAgICAvLyBaZXJvIGl0ZW1zID0gemVybyBicmFuY2hlczogbm8gZmFuLW91dCBldmVudCwgYW4gZW1wdHkgb3JkZXJlZCBhcnJheS5cbiAgICAgIHJlc3VsdHMgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgYnJhbmNoZXMgPSB0aGlzLmJ1aWxkQnJhbmNoZXMobm9kZSwgaXRlbXMsIGJyYW5jaENvdW50KTtcbiAgICAgIHRoaXMuaG9va3MucmVjb3JkQnJhbmNoU3RydWN0dXJlKG5vZGUuaWQsIGJyYW5jaGVzKTtcblxuICAgICAgLy8gVGhlIGZhbi1vdXQgbm9kZSBoYW5kZWQgdG8gQ2hpbGRyZW5FeGVjdXRvciBpcyBhIHRlbXAgdmlldyBjYXJyeWluZyB0aGVcbiAgICAgIC8vIGdlbmVyYXRlZCBicmFuY2hlcyAoc2FtZSBzaGFwZSBgZXhlY3V0ZVNlbGVjdGVkQ2hpbGRyZW5gIHVzZXMgZm9yIGl0c1xuICAgICAgLy8gc2VsZWN0ZWQgc3Vic2V0KSDigJQgdGhlIHNoYXJlZCBncmFwaCBub2RlIGlzIG5ldmVyIG11dGF0ZWQsIHNvIGEgbG9vcFxuICAgICAgLy8gcmV2aXNpdCByZWdlbmVyYXRlcyBjbGVhbmx5LlxuICAgICAgY29uc3QgZm9ya1ZpZXc6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+ID0ge1xuICAgICAgICAuLi5ub2RlLFxuICAgICAgICBjaGlsZHJlbjogYnJhbmNoZXMsXG4gICAgICAgIC4uLihjb25maWcuZmFpbEZhc3QgIT09IHVuZGVmaW5lZCAmJiB7IGZhaWxGYXN0OiBjb25maWcuZmFpbEZhc3QgfSksXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBjaGlsZFJlc3VsdHMgPSBhd2FpdCB0aGlzLmNoaWxkcmVuRXhlY3V0b3IuZXhlY3V0ZU5vZGVDaGlsZHJlbihcbiAgICAgICAgZm9ya1ZpZXcsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgYnJhbmNoUGF0aCxcbiAgICAgICAgdHJhdmVyc2FsQ29udGV4dCxcbiAgICAgICk7XG5cbiAgICAgIHJlc3VsdHMgPSB0aGlzLmNvbGxlY3RPcmRlcmVkKG5vZGUsIGJyYW5jaENvdW50LCBjaGlsZFJlc3VsdHMpO1xuICAgIH1cblxuICAgIHRoaXMud3JpdGVSZXN1bHRzKHJhd1Njb3BlLCBjb250ZXh0LCBjb25maWcuaW50bywgcmVzdWx0cyk7XG4gICAgbm90aWZ5KHJhd1Njb3BlLCAnbm90aWZ5U3RhZ2VFbmQnKTtcbiAgICBjb250ZXh0LmNvbW1pdCgpO1xuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGUgdGhlIGl0ZW1zIHNlbGVjdG9yIGFnYWluc3QgdGhlIGxpdmUgc2NvcGUuIEEgbm9uLWFycmF5IHJldHVybiBpc1xuICAgKiBhIGNoYXJ0IGJ1Zywgbm90IGEgcnVudGltZSBjb25kaXRpb24g4oCUIGl0IGZhaWxzIGxvdWRseSwgbmFtaW5nIHRoZSBzdGFnZS5cbiAgICpcbiAgICogVGhlIHNlbGVjdG9yIHJlYWRzIHRoZSB0eXBlZCBzY29wZSwgc28gd2hhdCBpdCByZXR1cm5zIGlzIHVzdWFsbHkgdGhlXG4gICAqIHNjb3BlJ3Mgb3duIGFycmF5IEhBTkRMRSAoYSBQcm94eSBib3VuZCB0byB0aGUgcGFyZW50IHN0YWdlKSBhbmQgZXZlcnlcbiAgICogYGl0ZW1zW2luZGV4XWAgYW4gZWxlbWVudCBoYW5kbGUuIFRoZSBpdGVtcyBhcmUgYWJvdXQgdG8gY3Jvc3MgaW50b1xuICAgKiBicmFuY2ggcnVudGltZXMg4oCUIGNsb3NlZCBvdmVyIGJ5IGBicmFuY2goaXRlbSwgaW5kZXgpYCBhbmQgc2VlZGVkIGFzIHRoZVxuICAgKiBicmFuY2gncyBgaXRlbWAg4oCUIHNvIHRoZXkgYXJlIHRha2VuIGFzIFZBTFVFUyBoZXJlIChgdW53cmFwSGFuZGxlc2AsXG4gICAqIHJlYWN0aXZlL2hhbmRsZXMudHMpLiA5LjIyLjDigJM5LjIzLjIgc2VlZGVkIHRoZSBoYW5kbGUgaXRzZWxmIGFuZCBldmVyeVxuICAgKiBicmFuY2ggb3ZlciBhbiBvYmplY3QgaXRlbSBmYWlsZWQgYXQgaXRzIHNlZWQgY29tbWl0IChEYXRhQ2xvbmVFcnJvcikuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVJdGVtcyhcbiAgICBjb25maWc6IFBhcmFsbGVsRm9yRWFjaENvbmZpZzx1bmtub3duLCBUU2NvcGU+LFxuICAgIHNjb3BlOiBUU2NvcGUsXG4gICAgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICk6IHJlYWRvbmx5IHVua25vd25bXSB7XG4gICAgY29uc3QgaXRlbXMgPSB1bndyYXBIYW5kbGVzKGNvbmZpZy5pdGVtcyhzY29wZSkpO1xuICAgIGlmIChpdGVtcyA9PT0gdW5kZWZpbmVkIHx8IGl0ZW1zID09PSBudWxsKSByZXR1cm4gW107XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgcGFyYWxsZWxGb3JFYWNoICcke25vZGUuaWR9JzogaXRlbXMoKSBtdXN0IHJldHVybiBhbiBhcnJheSAoZ290ICR7dHlwZW9mIGl0ZW1zfSkuIGAgK1xuICAgICAgICAgICdSZXR1cm4gW10gdG8gcnVuIHplcm8gYnJhbmNoZXMuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIC8qKiBHZW5lcmF0ZSBvbmUgc3ViZmxvdy1tb3VudCBub2RlIHBlciBicmFuY2gsIHJlZ2lzdGVyaW5nIGVhY2ggYnJhbmNoIGNoYXJ0LiAqL1xuICBwcml2YXRlIGJ1aWxkQnJhbmNoZXMoXG4gICAgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgaXRlbXM6IHJlYWRvbmx5IHVua25vd25bXSxcbiAgICBicmFuY2hDb3VudDogbnVtYmVyLFxuICApOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPltdIHtcbiAgICBjb25zdCBjb25maWcgPSBub2RlLnBhcmFsbGVsRm9yRWFjaCBhcyBQYXJhbGxlbEZvckVhY2hDb25maWc8dW5rbm93biwgVFNjb3BlPjtcbiAgICBjb25zdCBicmFuY2hlczogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT5bXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGJyYW5jaENvdW50OyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBpdGVtID0gaXRlbXNbaW5kZXhdO1xuICAgICAgY29uc3Qgc3ViZmxvd0lkID0gYnVpbGRCcmFuY2hTZWdtZW50KG5vZGUuaWQsIGluZGV4KTtcbiAgICAgIGNvbnN0IGNoYXJ0ID0gY29uZmlnLmJyYW5jaChpdGVtLCBpbmRleCk7XG4gICAgICBpZiAoIWNoYXJ0IHx8ICFjaGFydC5yb290KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgcGFyYWxsZWxGb3JFYWNoICcke25vZGUuaWR9JzogYnJhbmNoKGl0ZW0sICR7aW5kZXh9KSBtdXN0IHJldHVybiBhIGJ1aWx0IGNoYXJ0IGAgK1xuICAgICAgICAgICAgJyh0aGUgcmVzdWx0IG9mIGZsb3dDaGFydCguLi4pLmJ1aWxkKCkpLicsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNhbWUgcHJlZml4aW5nIGEgbGF6eSBzdWJmbG93IGdldHMg4oCUIHRoZSBicmFuY2gncyBpbm5lciBpZHMgYmVjb21lXG4gICAgICAvLyBgPHNlZ21lbnQ+LzxpZD5gLCBzbyBpdHMgc3RhZ2VzIGFkZHJlc3MgYXMgYDxzZWdtZW50Pi88aWQ+IzxuPmAuXG4gICAgICBjb25zdCBwcmVmaXhlZFJvb3QgPSB0aGlzLmhvb2tzLnByZWZpeE5vZGVUcmVlKGNoYXJ0LnJvb3QgYXMgU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sIHN1YmZsb3dJZCk7XG4gICAgICB0aGlzLmhvb2tzLnJlZ2lzdGVyQnJhbmNoU3ViZmxvdyhzdWJmbG93SWQsIHByZWZpeGVkUm9vdCwgY2hhcnQpO1xuXG4gICAgICBicmFuY2hlcy5wdXNoKHtcbiAgICAgICAgbmFtZTogYCR7bm9kZS5uYW1lfSBbJHtpbmRleH1dYCxcbiAgICAgICAgaWQ6IHN1YmZsb3dJZCxcbiAgICAgICAgaXNTdWJmbG93Um9vdDogdHJ1ZSxcbiAgICAgICAgc3ViZmxvd0lkLFxuICAgICAgICBzdWJmbG93TmFtZTogYCR7bm9kZS5uYW1lfSBbJHtpbmRleH1dYCxcbiAgICAgICAgc3ViZmxvd01vdW50T3B0aW9uczoge1xuICAgICAgICAgIC8vIEQxJ3MgXCJpbnB1dE1hcHBlciBzZWFtIGZvciBmZWVkaW5nIHRoZSBpdGVtIGluXCI6IHRoZSBpdGVtIGlzXG4gICAgICAgICAgLy8gdmlzaWJsZSBJTiB0aGUgYnJhbmNoJ3Mgc2NvcGUgKGFuZCBzbyBpbiBpdHMgY29tbWl0IGxvZykgYXMgd2VsbCBhc1xuICAgICAgICAgIC8vIGNsb3NlZCBvdmVyIGJ5IHRoZSBmYWN0b3J5IOKAlCBwcm92ZW5hbmNlIGJlYXRzIGEgaGlkZGVuIGNsb3N1cmUuXG4gICAgICAgICAgaW5wdXRNYXBwZXI6ICgpID0+ICh7IGl0ZW0sIGluZGV4IH0pLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJyYW5jaGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFzc2VtYmxlIHJlc3VsdHMgaW4gSVRFTVMgb3JkZXIg4oCUIG5ldmVyIGNvbXBsZXRpb24gb3JkZXIuXG4gICAqXG4gICAqIFRoZSBicmFuY2gncyB2YWx1ZSBpcyBpdHMgc3ViZmxvdyBvdXRwdXQsIGZhbGxpbmcgYmFjayB0byB0aGUgYnJhbmNoJ3NcbiAgICogZmluYWwgc2hhcmVkIHN0YXRlICh0aGUgVHlwZWRTY29wZSBjYXNlLCB3aGVyZSBzdGFnZSBmdW5jdGlvbnMgcmV0dXJuXG4gICAqIHZvaWQpIOKAlCB0aGUgc2FtZSBgc3ViZmxvd091dHB1dCA/PyBzaGFyZWRTdGF0ZWAgcnVsZSBgU3ViZmxvd0V4ZWN1dG9yYFxuICAgKiBhcHBsaWVzIHRvIGFuIG91dHB1dE1hcHBlci5cbiAgICovXG4gIHByaXZhdGUgY29sbGVjdE9yZGVyZWQoXG4gICAgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgYnJhbmNoQ291bnQ6IG51bWJlcixcbiAgICBjaGlsZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIE5vZGVSZXN1bHRUeXBlPixcbiAgKTogdW5rbm93bltdIHtcbiAgICBjb25zdCBvcmRlcmVkOiB1bmtub3duW10gPSBbXTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYnJhbmNoQ291bnQ7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IHN1YmZsb3dJZCA9IGJ1aWxkQnJhbmNoU2VnbWVudChub2RlLmlkLCBpbmRleCk7XG4gICAgICBjb25zdCBlbnRyeSA9IGNoaWxkUmVzdWx0c1tzdWJmbG93SWRdO1xuICAgICAgaWYgKGVudHJ5ID09PSB1bmRlZmluZWQgfHwgZW50cnkuaXNFcnJvcikge1xuICAgICAgICAvLyBCZXN0LWVmZm9ydCBtb2RlOiBhIGZhaWxlZCBicmFuY2gga2VlcHMgaXRzIFNMT1QgKG9yZGVyIGlzIGl0ZW1zXG4gICAgICAgIC8vIG9yZGVyKSB3aXRoIGFuIHVuZGVmaW5lZCB2YWx1ZS4gZmFpbEZhc3QgbW9kZSBuZXZlciByZWFjaGVzIGhlcmUg4oCUXG4gICAgICAgIC8vIHRoZSBlcnJvciBhbHJlYWR5IHJlamVjdGVkIHRoZSB3aG9sZSBzdGFnZS5cbiAgICAgICAgb3JkZXJlZC5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgb3JkZXJlZC5wdXNoKGVudHJ5LnJlc3VsdCA/PyB0aGlzLmhvb2tzLmJyYW5jaFNoYXJlZFN0YXRlKHN1YmZsb3dJZCkpO1xuICAgIH1cbiAgICByZXR1cm4gb3JkZXJlZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZSB0aGUgb3JkZXJlZCBhcnJheSBhcyBPTkUgdmFsdWUgb24gdGhlIHBhcmVudCBzY29wZS5cbiAgICpcbiAgICogYCRzZXRWYWx1ZWAgZGVsaWJlcmF0ZWx5LCB3aGVyZSBhdmFpbGFibGU6IHRoZSBUeXBlZFNjb3BlIHNldCB0cmFwXG4gICAqIEpTT04tcm91bmQtdHJpcHMgZXZlcnkgb2JqZWN0IHdyaXRlIChEYXRl4oaSc3RyaW5nLCBNYXDihpJ7fSksIGFuZCBicmFuY2hcbiAgICogcmVzdWx0cyBhcmUgZXhhY3RseSB0aGUga2luZCBvZiBwYXlsb2FkIHRoYXQgd291bGQgc2lsZW50bHkgZGVncmFkZS5cbiAgICovXG4gIHByaXZhdGUgd3JpdGVSZXN1bHRzKHJhd1Njb3BlOiBUU2NvcGUsIGNvbnRleHQ6IFN0YWdlQ29udGV4dCwgaW50bzogc3RyaW5nLCByZXN1bHRzOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICBjb25zdCBzID0gcmF3U2NvcGUgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAodHlwZW9mIHM/LiRzZXRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgKHMuJHNldFZhbHVlIGFzIChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pID0+IHZvaWQpKGludG8sIHJlc3VsdHMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHM/LnNldFZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAocy5zZXRWYWx1ZSBhcyAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKSA9PiB2b2lkKShpbnRvLCByZXN1bHRzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gTm8gZmFjYWRlIChoYW5kLXJvbGxlZCBzY29wZSBmYWN0b3J5KSDigJQgd3JpdGUgc3RyYWlnaHQgdG8gdGhlIGZyYW1lLlxuICAgIGNvbnRleHQuc2V0R2xvYmFsKGludG8sIHJlc3VsdHMpO1xuICB9XG59XG5cbi8qKiBGaXJlIGEgc2NvcGUgbGlmZWN5Y2xlIG5vdGlmaWNhdGlvbiBpZiB0aGUgc2NvcGUgc3VwcG9ydHMgaXQuICovXG5mdW5jdGlvbiBub3RpZnkoc2NvcGU6IHVua25vd24sIG1ldGhvZDogJ25vdGlmeVN0YWdlU3RhcnQnIHwgJ25vdGlmeVN0YWdlRW5kJyk6IHZvaWQge1xuICBjb25zdCBzID0gc2NvcGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gIGlmIChzICYmIHR5cGVvZiBzW21ldGhvZF0gPT09ICdmdW5jdGlvbicpIChzW21ldGhvZF0gYXMgKCkgPT4gdm9pZCkoKTtcbn1cbiJdfQ==
|
|
@@ -15,7 +15,16 @@
|
|
|
15
15
|
*/
|
|
16
16
|
import type { StageContext } from '../../memory/StageContext.js';
|
|
17
17
|
import type { HandlerDeps, IExecutionRuntime, SubflowMountOptions } from '../types.js';
|
|
18
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* Extract values from parent scope using inputMapper.
|
|
20
|
+
*
|
|
21
|
+
* What a mapper returns is a VALUE, not a handle: the mapper read the parent's
|
|
22
|
+
* typed scope, so its result may be — or hold — a Proxy bound to the parent
|
|
23
|
+
* stage, and the seed commit below clones it (`structuredClone`, which cannot
|
|
24
|
+
* clone a Proxy). `unwrapHandles` (reactive/handles.ts) swaps each for the
|
|
25
|
+
* value behind it, O(1), Dates and Maps intact; a handle-free result passes
|
|
26
|
+
* through by reference.
|
|
27
|
+
*/
|
|
19
28
|
export declare function extractParentScopeValues<TParentScope, TSubflowInput>(parentScope: TParentScope, options?: SubflowMountOptions<TParentScope, TSubflowInput>): TSubflowInput | Record<string, unknown>;
|
|
20
29
|
/**
|
|
21
30
|
* Get the initial scope values for a subflow.
|