footprintjs 9.48.2 → 10.0.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/AGENTS.md +12 -10
- package/CLAUDE.md +21 -23
- package/README.md +1 -1
- package/dist/advanced.js +71 -128
- package/dist/esm/advanced.d.ts +24 -58
- package/dist/esm/advanced.js +13 -51
- package/dist/esm/index.d.ts +5 -8
- package/dist/esm/index.js +3 -3
- package/dist/esm/lib/builder/FlowChartBuilder.d.ts +1 -1
- package/dist/esm/lib/builder/FlowChartBuilder.js +3 -3
- package/dist/esm/lib/builder/structure/StructureRecorder.d.ts +1 -1
- package/dist/esm/lib/builder/structure/StructureRecorder.js +1 -1
- package/dist/esm/lib/capture/index.d.ts +0 -1
- package/dist/esm/lib/capture/index.js +1 -2
- package/dist/esm/lib/engine/graph/prefixNodeTree.js +2 -2
- package/dist/esm/lib/engine/handlers/ResumeEntry.d.ts +3 -3
- package/dist/esm/lib/engine/handlers/ResumeEntry.js +4 -4
- package/dist/esm/lib/engine/handlers/SubflowExecutor.d.ts +1 -2
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +4 -8
- package/dist/esm/lib/engine/index.d.ts +1 -1
- package/dist/esm/lib/engine/index.js +1 -1
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +4 -4
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +1 -1
- package/dist/esm/lib/engine/narrative/index.d.ts +1 -1
- package/dist/esm/lib/engine/narrative/index.js +1 -1
- package/dist/esm/lib/engine/narrative/narrativeTypes.d.ts +1 -11
- package/dist/esm/lib/engine/narrative/narrativeTypes.js +1 -1
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +2 -10
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +4 -6
- package/dist/esm/lib/engine/traversalContext.d.ts +1 -1
- package/dist/esm/lib/engine/traversalContext.js +2 -2
- package/dist/esm/lib/engine/types.d.ts +2 -10
- package/dist/esm/lib/engine/types.js +1 -1
- package/dist/esm/lib/engine/walkSubflowSpec.js +2 -2
- package/dist/esm/lib/ids/reservedIds.js +2 -2
- package/dist/esm/lib/memory/DiagnosticCollector.js +2 -2
- package/dist/esm/lib/memory/StageContext.d.ts +2 -4
- package/dist/esm/lib/memory/StageContext.js +2 -2
- package/dist/esm/lib/memory/borrowedMutation.js +2 -2
- package/dist/esm/lib/memory/index.d.ts +6 -21
- package/dist/esm/lib/memory/index.js +4 -22
- package/dist/esm/lib/memory/redaction.d.ts +1 -1
- package/dist/esm/lib/memory/redaction.js +2 -2
- package/dist/esm/lib/memory/runPolicy.d.ts +3 -2
- package/dist/esm/lib/memory/runPolicy.js +1 -1
- package/dist/esm/lib/reactive/createTypedScope.js +2 -2
- package/dist/esm/lib/reactive/writeTraps.js +2 -2
- package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +3 -2
- package/dist/esm/lib/recorder/ControlDepRecorder.js +3 -2
- package/dist/esm/lib/recorder/EmitRecorder.d.ts +1 -1
- package/dist/esm/lib/recorder/EmitRecorder.js +1 -1
- package/dist/esm/lib/recorder/InOutRecorder.js +2 -2
- package/dist/esm/lib/recorder/qualityTrace.d.ts +1 -1
- package/dist/esm/lib/recorder/qualityTrace.js +2 -2
- package/dist/esm/lib/runner/DeferredObserverTier.js +2 -2
- package/dist/esm/lib/runner/ExecutionRuntime.d.ts +4 -5
- package/dist/esm/lib/runner/ExecutionRuntime.js +2 -5
- package/dist/esm/lib/runner/FlowChartExecutor.d.ts +1 -1
- package/dist/esm/lib/runner/FlowChartExecutor.js +1 -1
- package/dist/esm/lib/runner/getSubtreeSnapshot.d.ts +1 -1
- package/dist/esm/lib/runner/getSubtreeSnapshot.js +4 -4
- package/dist/esm/lib/runner/resume.js +2 -2
- package/dist/esm/lib/runner/snapshot.js +3 -2
- package/dist/esm/lib/scope/ScopeFacade.js +2 -2
- package/dist/esm/lib/scope/state/zod/scopeFactory.js +2 -2
- package/dist/esm/recorders.d.ts +2 -3
- package/dist/esm/recorders.js +1 -1
- package/dist/esm/trace.d.ts +11 -57
- package/dist/esm/trace.js +10 -68
- package/dist/index.js +3 -3
- package/dist/lib/builder/FlowChartBuilder.js +5 -5
- package/dist/lib/builder/structure/StructureRecorder.js +1 -1
- package/dist/lib/capture/index.js +2 -4
- package/dist/lib/engine/graph/prefixNodeTree.js +5 -5
- package/dist/lib/engine/handlers/ResumeEntry.js +4 -4
- package/dist/lib/engine/handlers/SubflowExecutor.js +5 -9
- package/dist/lib/engine/index.js +1 -1
- package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +1 -1
- package/dist/lib/engine/narrative/index.js +1 -1
- package/dist/lib/engine/narrative/narrativeTypes.js +1 -1
- package/dist/lib/engine/traversal/FlowchartTraverser.js +8 -10
- package/dist/lib/engine/traversalContext.js +4 -4
- package/dist/lib/engine/types.js +1 -1
- package/dist/lib/engine/walkSubflowSpec.js +3 -3
- package/dist/lib/ids/reservedIds.js +5 -5
- package/dist/lib/memory/DiagnosticCollector.js +3 -3
- package/dist/lib/memory/StageContext.js +3 -3
- package/dist/lib/memory/borrowedMutation.js +3 -3
- package/dist/lib/memory/index.js +7 -42
- package/dist/lib/memory/redaction.js +3 -3
- package/dist/lib/memory/runPolicy.js +1 -1
- package/dist/lib/reactive/createTypedScope.js +3 -3
- package/dist/lib/reactive/writeTraps.js +4 -4
- package/dist/lib/recorder/ControlDepRecorder.js +3 -2
- package/dist/lib/recorder/EmitRecorder.js +1 -1
- package/dist/lib/recorder/InOutRecorder.js +3 -3
- package/dist/lib/recorder/qualityTrace.js +4 -4
- package/dist/lib/runner/DeferredObserverTier.js +3 -3
- package/dist/lib/runner/ExecutionRuntime.js +6 -9
- package/dist/lib/runner/FlowChartExecutor.js +1 -1
- package/dist/lib/runner/getSubtreeSnapshot.js +6 -6
- package/dist/lib/runner/resume.js +3 -3
- package/dist/lib/runner/snapshot.js +6 -5
- package/dist/lib/scope/ScopeFacade.js +3 -3
- package/dist/lib/scope/state/zod/scopeFactory.js +4 -4
- package/dist/recorders.js +1 -1
- package/dist/trace.js +18 -120
- package/dist/types/advanced.d.ts +24 -58
- package/dist/types/index.d.ts +5 -8
- package/dist/types/lib/builder/FlowChartBuilder.d.ts +1 -1
- package/dist/types/lib/builder/structure/StructureRecorder.d.ts +1 -1
- package/dist/types/lib/capture/index.d.ts +0 -1
- package/dist/types/lib/engine/handlers/ResumeEntry.d.ts +3 -3
- package/dist/types/lib/engine/handlers/SubflowExecutor.d.ts +1 -2
- package/dist/types/lib/engine/index.d.ts +1 -1
- package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +4 -4
- package/dist/types/lib/engine/narrative/index.d.ts +1 -1
- package/dist/types/lib/engine/narrative/narrativeTypes.d.ts +1 -11
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +2 -10
- package/dist/types/lib/engine/traversalContext.d.ts +1 -1
- package/dist/types/lib/engine/types.d.ts +2 -10
- package/dist/types/lib/memory/StageContext.d.ts +2 -4
- package/dist/types/lib/memory/index.d.ts +6 -21
- package/dist/types/lib/memory/redaction.d.ts +1 -1
- package/dist/types/lib/memory/runPolicy.d.ts +3 -2
- package/dist/types/lib/recorder/ControlDepRecorder.d.ts +3 -2
- package/dist/types/lib/recorder/EmitRecorder.d.ts +1 -1
- package/dist/types/lib/recorder/qualityTrace.d.ts +1 -1
- package/dist/types/lib/runner/ExecutionRuntime.d.ts +4 -5
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +1 -1
- package/dist/types/lib/runner/getSubtreeSnapshot.d.ts +1 -1
- package/dist/types/recorders.d.ts +2 -3
- package/dist/types/trace.d.ts +11 -57
- package/package.json +6 -15
- package/dist/esm/lib/capture/freeze.d.ts +0 -91
- package/dist/esm/lib/capture/freeze.js +0 -314
- package/dist/esm/lib/capture/ownData.d.ts +0 -7
- package/dist/esm/lib/capture/ownData.js +0 -15
- package/dist/esm/lib/capture/valueKinds.d.ts +0 -57
- package/dist/esm/lib/capture/valueKinds.js +0 -142
- package/dist/esm/lib/ids/runtimeStageId.d.ts +0 -173
- package/dist/esm/lib/ids/runtimeStageId.js +0 -194
- package/dist/esm/lib/memory/EventLog.d.ts +0 -105
- package/dist/esm/lib/memory/EventLog.js +0 -148
- package/dist/esm/lib/memory/RecordFrame.d.ts +0 -232
- package/dist/esm/lib/memory/RecordFrame.js +0 -296
- package/dist/esm/lib/memory/SharedMemory.d.ts +0 -46
- package/dist/esm/lib/memory/SharedMemory.js +0 -88
- package/dist/esm/lib/memory/TransactionBuffer.d.ts +0 -521
- package/dist/esm/lib/memory/TransactionBuffer.js +0 -946
- package/dist/esm/lib/memory/admission.d.ts +0 -81
- package/dist/esm/lib/memory/admission.js +0 -153
- package/dist/esm/lib/memory/backtrack.d.ts +0 -286
- package/dist/esm/lib/memory/backtrack.js +0 -457
- package/dist/esm/lib/memory/commitLogUtils.d.ts +0 -217
- package/dist/esm/lib/memory/commitLogUtils.js +0 -384
- package/dist/esm/lib/memory/deltaEncoding.d.ts +0 -66
- package/dist/esm/lib/memory/deltaEncoding.js +0 -122
- package/dist/esm/lib/memory/equality.d.ts +0 -93
- package/dist/esm/lib/memory/equality.js +0 -262
- package/dist/esm/lib/memory/eventPosition.d.ts +0 -18
- package/dist/esm/lib/memory/eventPosition.js +0 -2
- package/dist/esm/lib/memory/honesty.d.ts +0 -93
- package/dist/esm/lib/memory/honesty.js +0 -92
- package/dist/esm/lib/memory/keyPaths.d.ts +0 -125
- package/dist/esm/lib/memory/keyPaths.js +0 -227
- package/dist/esm/lib/memory/logModel.d.ts +0 -76
- package/dist/esm/lib/memory/logModel.js +0 -364
- package/dist/esm/lib/memory/merge.d.ts +0 -26
- package/dist/esm/lib/memory/merge.js +0 -60
- package/dist/esm/lib/memory/pathOps.d.ts +0 -115
- package/dist/esm/lib/memory/pathOps.js +0 -290
- package/dist/esm/lib/memory/paths.d.ts +0 -52
- package/dist/esm/lib/memory/paths.js +0 -57
- package/dist/esm/lib/memory/placeholders.d.ts +0 -39
- package/dist/esm/lib/memory/placeholders.js +0 -40
- package/dist/esm/lib/memory/recordCommit.d.ts +0 -45
- package/dist/esm/lib/memory/recordCommit.js +0 -61
- package/dist/esm/lib/memory/scrub.d.ts +0 -53
- package/dist/esm/lib/memory/scrub.js +0 -74
- package/dist/esm/lib/memory/types.d.ts +0 -209
- package/dist/esm/lib/memory/types.js +0 -10
- package/dist/esm/lib/memory/utils.d.ts +0 -73
- package/dist/esm/lib/memory/utils.js +0 -159
- package/dist/esm/lib/memory/verbs.d.ts +0 -333
- package/dist/esm/lib/memory/verbs.js +0 -427
- package/dist/esm/lib/recorder/CommitRangeIndex.d.ts +0 -147
- package/dist/esm/lib/recorder/CommitRangeIndex.js +0 -207
- package/dist/esm/lib/scope/detectCircular.d.ts +0 -13
- package/dist/esm/lib/scope/detectCircular.js +0 -14
- package/dist/esm/lib/scope/recorders/summarizeValue.d.ts +0 -5
- package/dist/esm/lib/scope/recorders/summarizeValue.js +0 -6
- package/dist/esm/lib/slice/elementProvenance.d.ts +0 -81
- package/dist/esm/lib/slice/elementProvenance.js +0 -190
- package/dist/esm/lib/slice/forwardSliceForKey.d.ts +0 -88
- package/dist/esm/lib/slice/forwardSliceForKey.js +0 -243
- package/dist/esm/lib/slice/index.d.ts +0 -25
- package/dist/esm/lib/slice/index.js +0 -25
- package/dist/esm/lib/slice/keyIndex.d.ts +0 -137
- package/dist/esm/lib/slice/keyIndex.js +0 -293
- package/dist/esm/lib/slice/keyTimeline.d.ts +0 -49
- package/dist/esm/lib/slice/keyTimeline.js +0 -113
- package/dist/esm/lib/slice/keysReadSources.d.ts +0 -51
- package/dist/esm/lib/slice/keysReadSources.js +0 -95
- package/dist/esm/lib/slice/serialize.d.ts +0 -78
- package/dist/esm/lib/slice/serialize.js +0 -278
- package/dist/esm/lib/slice/sliceForKey.d.ts +0 -47
- package/dist/esm/lib/slice/sliceForKey.js +0 -88
- package/dist/esm/lib/slice/types.d.ts +0 -567
- package/dist/esm/lib/slice/types.js +0 -25
- package/dist/esm/lib/time-travel/axis.d.ts +0 -119
- package/dist/esm/lib/time-travel/axis.js +0 -179
- package/dist/esm/lib/time-travel/bundles.d.ts +0 -77
- package/dist/esm/lib/time-travel/bundles.js +0 -136
- package/dist/esm/lib/time-travel/chain.d.ts +0 -93
- package/dist/esm/lib/time-travel/chain.js +0 -188
- package/dist/esm/lib/time-travel/commitStops.d.ts +0 -55
- package/dist/esm/lib/time-travel/commitStops.js +0 -202
- package/dist/esm/lib/time-travel/index.d.ts +0 -22
- package/dist/esm/lib/time-travel/index.js +0 -21
- package/dist/esm/lib/time-travel/stateAt.d.ts +0 -102
- package/dist/esm/lib/time-travel/stateAt.js +0 -153
- package/dist/esm/lib/time-travel/tagStops.d.ts +0 -72
- package/dist/esm/lib/time-travel/tagStops.js +0 -102
- package/dist/esm/lib/time-travel/timeTravel.d.ts +0 -70
- package/dist/esm/lib/time-travel/timeTravel.js +0 -360
- package/dist/esm/lib/time-travel/types.d.ts +0 -470
- package/dist/esm/lib/time-travel/types.js +0 -23
- package/dist/esm/write.d.ts +0 -47
- package/dist/esm/write.js +0 -46
- package/dist/lib/capture/freeze.js +0 -320
- package/dist/lib/capture/ownData.js +0 -19
- package/dist/lib/capture/valueKinds.js +0 -146
- package/dist/lib/ids/runtimeStageId.js +0 -210
- package/dist/lib/memory/EventLog.js +0 -152
- package/dist/lib/memory/RecordFrame.js +0 -300
- package/dist/lib/memory/SharedMemory.js +0 -92
- package/dist/lib/memory/TransactionBuffer.js +0 -950
- package/dist/lib/memory/admission.js +0 -159
- package/dist/lib/memory/backtrack.js +0 -463
- package/dist/lib/memory/commitLogUtils.js +0 -399
- package/dist/lib/memory/deltaEncoding.js +0 -128
- package/dist/lib/memory/equality.js +0 -266
- package/dist/lib/memory/eventPosition.js +0 -3
- package/dist/lib/memory/honesty.js +0 -95
- package/dist/lib/memory/keyPaths.js +0 -243
- package/dist/lib/memory/logModel.js +0 -372
- package/dist/lib/memory/merge.js +0 -64
- package/dist/lib/memory/pathOps.js +0 -306
- package/dist/lib/memory/paths.js +0 -62
- package/dist/lib/memory/placeholders.js +0 -43
- package/dist/lib/memory/recordCommit.js +0 -65
- package/dist/lib/memory/scrub.js +0 -79
- package/dist/lib/memory/types.js +0 -11
- package/dist/lib/memory/utils.js +0 -178
- package/dist/lib/memory/verbs.js +0 -444
- package/dist/lib/recorder/CommitRangeIndex.js +0 -211
- package/dist/lib/scope/detectCircular.js +0 -21
- package/dist/lib/scope/recorders/summarizeValue.js +0 -10
- package/dist/lib/slice/elementProvenance.js +0 -195
- package/dist/lib/slice/forwardSliceForKey.js +0 -247
- package/dist/lib/slice/index.js +0 -42
- package/dist/lib/slice/keyIndex.js +0 -313
- package/dist/lib/slice/keyTimeline.js +0 -117
- package/dist/lib/slice/keysReadSources.js +0 -101
- package/dist/lib/slice/serialize.js +0 -286
- package/dist/lib/slice/sliceForKey.js +0 -93
- package/dist/lib/slice/types.js +0 -26
- package/dist/lib/time-travel/axis.js +0 -184
- package/dist/lib/time-travel/bundles.js +0 -144
- package/dist/lib/time-travel/chain.js +0 -193
- package/dist/lib/time-travel/commitStops.js +0 -206
- package/dist/lib/time-travel/index.js +0 -32
- package/dist/lib/time-travel/stateAt.js +0 -160
- package/dist/lib/time-travel/tagStops.js +0 -106
- package/dist/lib/time-travel/timeTravel.js +0 -364
- package/dist/lib/time-travel/types.js +0 -24
- package/dist/types/lib/capture/freeze.d.ts +0 -91
- package/dist/types/lib/capture/ownData.d.ts +0 -7
- package/dist/types/lib/capture/valueKinds.d.ts +0 -57
- package/dist/types/lib/ids/runtimeStageId.d.ts +0 -173
- package/dist/types/lib/memory/EventLog.d.ts +0 -105
- package/dist/types/lib/memory/RecordFrame.d.ts +0 -232
- package/dist/types/lib/memory/SharedMemory.d.ts +0 -46
- package/dist/types/lib/memory/TransactionBuffer.d.ts +0 -521
- package/dist/types/lib/memory/admission.d.ts +0 -81
- package/dist/types/lib/memory/backtrack.d.ts +0 -286
- package/dist/types/lib/memory/commitLogUtils.d.ts +0 -217
- package/dist/types/lib/memory/deltaEncoding.d.ts +0 -66
- package/dist/types/lib/memory/equality.d.ts +0 -93
- package/dist/types/lib/memory/eventPosition.d.ts +0 -18
- package/dist/types/lib/memory/honesty.d.ts +0 -93
- package/dist/types/lib/memory/keyPaths.d.ts +0 -125
- package/dist/types/lib/memory/logModel.d.ts +0 -76
- package/dist/types/lib/memory/merge.d.ts +0 -26
- package/dist/types/lib/memory/pathOps.d.ts +0 -115
- package/dist/types/lib/memory/paths.d.ts +0 -52
- package/dist/types/lib/memory/placeholders.d.ts +0 -39
- package/dist/types/lib/memory/recordCommit.d.ts +0 -45
- package/dist/types/lib/memory/scrub.d.ts +0 -53
- package/dist/types/lib/memory/types.d.ts +0 -209
- package/dist/types/lib/memory/utils.d.ts +0 -73
- package/dist/types/lib/memory/verbs.d.ts +0 -333
- package/dist/types/lib/recorder/CommitRangeIndex.d.ts +0 -147
- package/dist/types/lib/scope/detectCircular.d.ts +0 -13
- package/dist/types/lib/scope/recorders/summarizeValue.d.ts +0 -5
- package/dist/types/lib/slice/elementProvenance.d.ts +0 -81
- package/dist/types/lib/slice/forwardSliceForKey.d.ts +0 -88
- package/dist/types/lib/slice/index.d.ts +0 -25
- package/dist/types/lib/slice/keyIndex.d.ts +0 -137
- package/dist/types/lib/slice/keyTimeline.d.ts +0 -49
- package/dist/types/lib/slice/keysReadSources.d.ts +0 -51
- package/dist/types/lib/slice/serialize.d.ts +0 -78
- package/dist/types/lib/slice/sliceForKey.d.ts +0 -47
- package/dist/types/lib/slice/types.d.ts +0 -567
- package/dist/types/lib/time-travel/axis.d.ts +0 -119
- package/dist/types/lib/time-travel/bundles.d.ts +0 -77
- package/dist/types/lib/time-travel/chain.d.ts +0 -93
- package/dist/types/lib/time-travel/commitStops.d.ts +0 -55
- package/dist/types/lib/time-travel/index.d.ts +0 -22
- package/dist/types/lib/time-travel/stateAt.d.ts +0 -102
- package/dist/types/lib/time-travel/tagStops.d.ts +0 -72
- package/dist/types/lib/time-travel/timeTravel.d.ts +0 -70
- package/dist/types/lib/time-travel/types.d.ts +0 -470
- package/dist/types/write.d.ts +0 -47
- package/dist/write.js +0 -52
|
@@ -173,7 +173,7 @@ export interface StructureStageAddedEvent {
|
|
|
173
173
|
* Note: `spec.id` is a LIVE reference. If you read it AFTER this
|
|
174
174
|
* chart has been mounted as a subflow, it may have been rewritten
|
|
175
175
|
* to the FULL prefixed form. Use `splitStageId(spec.id)` from
|
|
176
|
-
* `
|
|
176
|
+
* `foottrace` to decompose it back into local + subflowPath.
|
|
177
177
|
*
|
|
178
178
|
* Correlating with runtime events:
|
|
179
179
|
* - Same builder (no mount) →
|
|
@@ -155,4 +155,4 @@
|
|
|
155
155
|
* ```
|
|
156
156
|
*/
|
|
157
157
|
export {};
|
|
158
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RydWN0dXJlUmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvc3RydWN0dXJlL1N0cnVjdHVyZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJKRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3RydWN0dXJlUmVjb3JkZXIg4oCUIHBhc3NpdmUgb2JzZXJ2ZXIgb2YgQlVJTEQtVElNRSBjaGFydCBjb25zdHJ1Y3Rpb24gZXZlbnRzLlxuICpcbiAqIFRoZSBidWlsZC10aW1lIHR3aW4gb2YgYEZsb3dSZWNvcmRlcmAuIFdoZXJlIGBGbG93UmVjb3JkZXJgIG9ic2VydmVzXG4gKiBSVU5USU1FIGNvbnRyb2wtZmxvdyB0cmFuc2l0aW9ucyAocGVyLWV4ZWN1dGlvbiBgcnVudGltZVN0YWdlSWRgLFxuICogaXRlcmF0aW9uIGNvdW50cywgZXJyb3JzLCBwYXVzZXMpLCBgU3RydWN0dXJlUmVjb3JkZXJgIG9ic2VydmVzXG4gKiBTVEFUSUMgY2hhcnQgc2hhcGUgYXMgaXQncyBhc3NlbWJsZWQgYnkgdGhlIGJ1aWxkZXIg4oCUIGV2ZXJ5IHNwZWNcbiAqIG5vZGUgYWRkZWQsIGV2ZXJ5IG91dGdvaW5nIGVkZ2Ugd2lyZWQsIGV2ZXJ5IGRlY2lkZXIgY2xvc2VkLlxuICpcbiAqIFdoeSB0d28gaW50ZXJmYWNlcywgbm90IG9uZVxuICog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiAgIEJ1aWxkIGFuZCBydW50aW1lIGV2ZW50cyBoYXZlIGRpZmZlcmVudCBJTlZBUklBTlRTLCBub3QganVzdFxuICogICBkaWZmZXJlbnQgdGltaW5nOlxuICpcbiAqICAgICAtIFJ1bnRpbWUgZXZlbnRzIGNhcnJ5IGBydW50aW1lU3RhZ2VJZGAgKGBbc3ViZmxvd1BhdGgvXXN0YWdlSWQjTmApLFxuICogICAgICAgYGl0ZXJhdGlvbmAsIGB0cmF2ZXJzYWxDb250ZXh0YCDigJQgbG9hZC1iZWFyaW5nIGZvciB0aW1lLXRyYXZlbFxuICogICAgICAgVUlzLCBjb21taXQtbG9nIGluZGljZXMsIGFuZCBgU2VxdWVuY2VTdG9yZTxUPmAgY29uc3VtZXJzLlxuICogICAgICAgTk9ORSBvZiB0aGVzZSBleGlzdCBhdCBidWlsZCB0aW1lLlxuICpcbiAqICAgICAtIEJ1aWxkIGV2ZW50cyBjYXJyeSBvbmx5IGBzdGFnZUlkYCArIHN0cnVjdHVyYWwgZmllbGRzLiBOb1xuICogICAgICAgZXhlY3V0aW9uIGluZGV4LCBubyBpdGVyYXRpb24sIG5vIHNuYXBzaG90LlxuICpcbiAqICAgICAtIFNvbWUgZXZlbnRzIGhhdmUgbm8gYW5hbG9nIGFjcm9zcyBwaGFzZXM6IGBvblBhdXNlYCAvXG4gKiAgICAgICBgb25SZXN1bWVgIC8gYG9uRXJyb3JgIC8gYG9uUnVuU3RhcnRgIGFyZSBydW50aW1lLW9ubHk7XG4gKiAgICAgICBgb25EZWNpZGVyQ29tcGxldGVgIC8gYG9uU3RhZ2VBZGRlZGAgYXJlIGJ1aWxkLW9ubHkuXG4gKlxuICogICBBIHNpbmdsZSBgRmxvd1JlY29yZGVyYCB3aXRoIGBwaGFzZTogJ3N0YXRpYycgfCAnZHluYW1pYydgXG4gKiAgIGRpc2NyaW1pbmF0b3Igd291bGQgZm9yY2UgZXZlcnkgY29uc3VtZXIgdG8gd3JpdGVcbiAqICAgYGlmIChlLnBoYXNlID09PSAnc3RhdGljJykgLi4uYCBicmFuY2hlcyBhbmQgd291bGQgZXJhc2UgdGhlXG4gKiAgIGxlYXN0LXByaXZpbGVnZSBib3VuZGFyeSAoYSBzdGF0aWMtb25seSBjb25zdW1lciBzaG91bGQgTk9UXG4gKiAgIGFjY2lkZW50YWxseSBvYnNlcnZlIHJ1bnRpbWUgZGF0YSDigJQgZS5nLiwgYSBwdWJsaWMgZG9jcyBzaXRlXG4gKiAgIHJlbmRlcmluZyBjaGFydCB0b3BvbG9neSBtdXN0IG5vdCBzZWUgc2NvcGUgdmFsdWVzKS5cbiAqXG4gKiAgIFR3byBpbnRlcmZhY2VzLCBzYW1lIG1lbnRhbCBtb2RlbCwgY2xlYW4gc2VwYXJhdGlvbi4gVHdvXG4gKiAgIHJlZ2lzdHJhdGlvbiBzaXRlcyBzaGlwIHRvZGF5IChwaWNrIHdoaWNoZXZlciBmaXRzIHlvdXIgY2FsbFxuICogICBzaXRlKTpcbiAqXG4gKiAgICAgMS4gKipPcHRpb25zLWJhZyoqIChwcmVmZXJyZWQgd2hlbiB0aGUgcmVjb3JkZXIgc2V0IGlzIGtub3duXG4gKiAgICAgICAgYXQgY29uc3RydWN0aW9uIHRpbWUg4oCUIHJlZ2lzdGVycyBCRUZPUkUgYHN0YXJ0KClgIHNvIGV2ZW5cbiAqICAgICAgICB0aGUgc2VlZCBldmVudCBmaXJlcyB0aHJvdWdoIHRoZSBub3JtYWwgZGlzcGF0Y2hlciBmYW4tb3V0KTpcbiAqICAgICAgICBgYGB0c1xuICogICAgICAgIGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcsIHsgc3RydWN0dXJlUmVjb3JkZXJzOiBbcmVjXSB9KVxuICogICAgICAgICAgLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpLmJ1aWxkKCk7XG4gKiAgICAgICAgYGBgXG4gKlxuICogICAgIDIuICoqRmx1ZW50KiogKHByZWZlcnJlZCB3aGVuIGF0dGFjaCBpcyBjb25kaXRpb25hbCwgbGF0ZSwgb3JcbiAqICAgICAgICBpbiBhIGNoYWluIGJ1aWxkZXIg4oCUIHRoZSBqdXN0LWF0dGFjaGVkIHJlY29yZGVyIGdldHMgYVxuICogICAgICAgIG9uZS10aW1lIHNlZWQgcmVwbGF5IHNvIGl0IG9ic2VydmVzIHRoZSByb290IHN0YWdlKTpcbiAqICAgICAgICBgYGB0c1xuICogICAgICAgIGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcpXG4gKiAgICAgICAgICAuYXR0YWNoU3RydWN0dXJlUmVjb3JkZXIocmVjKVxuICogICAgICAgICAgLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpLmJ1aWxkKCk7XG4gKiAgICAgICAgYGBgXG4gKlxuICogICBCb3RoIGRlbGl2ZXIgdGhlIHNhbWUgZXZlbnQgc3RyZWFtIHRvIHRoZSBzYW1lIHJlY29yZGVyLiBTZWUgdGhlXG4gKiAgIGBAZXhhbXBsZWAgYmxvY2sgYmVsb3cgZm9yIGEgZnVsbHktZmxlc2hlZC1vdXQgaW1wbGVtZW50YXRpb24uXG4gKlxuICogTGlmZWN5Y2xlICsgb3JkZXJpbmcgaW52YXJpYW50c1xuICog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiAgIC0gRmlyZXMgU1lOQ0hST05PVVNMWSBkdXJpbmcgYnVpbGRlciBjaGFpbiBjYWxscyAoYW5kIGR1cmluZ1xuICogICAgIGAuYnVpbGQoKWAgZm9yIHRoZSB0ZXJtaW5hbCBub2RlKSBhdCB0aGUgbmF0dXJhbCBtb21lbnQgZWFjaFxuICogICAgIHNwZWMgbXV0YXRpb24gY29tcGxldGVzLlxuICogICAtIGBvblN0YWdlQWRkZWQoQSlgIGFuZCBgb25TdGFnZUFkZGVkKEIpYCBmaXJlIEJFRk9SRSBhbnlcbiAqICAgICBgb25FZGdlQWRkZWQoe2Zyb206IEEsIHRvOiBCfSlgIOKAlCBlbmRwb2ludCByZWdpc3RyYXRpb25cbiAqICAgICBoYXBwZW5zIGJlZm9yZSBlZGdlIHdpcmluZy5cbiAqICAgLSBgb25EZWNpZGVyQ29tcGxldGUoRClgIGZpcmVzIGF0IHN1Yi1idWlsZGVyIGAuZW5kKClgIHRpbWUsIEFGVEVSXG4gKiAgICAgZXZlcnkgY2hpbGQncyBgb25TdGFnZUFkZGVkYCBhbmQgZXZlcnkgYG9uRWRnZUFkZGVkKHtmcm9tOiBELFxuICogICAgIHRvOiBjaGlsZH0pYC4gTWFya3MgdGhlIGRlY2lkZXIgYXMgbm8tZnVydGhlci1tdXRhdGlvbi5cbiAqICAgLSBgb25TdWJmbG93TW91bnRlZCh7c3ViZmxvd0lkfSlgIGZpcmVzIG9uY2UgcGVyIG1vdW50LlxuICogICAgICoqTU9VTlQtT05MWSoqOiBwYXJlbnQgcmVjb3JkZXJzIGRvIE5PVCByZWNlaXZlIGEgcmVwbGF5IG9mXG4gKiAgICAgdGhlIHN1YmZsb3cncyBvd24gaW50ZXJuYWwgc3RydWN0dXJlIGV2ZW50cyAodGhvc2UgZmlyZWRcbiAqICAgICBkdXJpbmcgdGhlIHN1YmZsb3cncyBvd24gYC5idWlsZCgpYCkuIE1hdGNoZXMgdGhlIHJ1bnRpbWVcbiAqICAgICBgb25TdWJmbG93RW50cnlgIHNlbWFudGljcyDigJQgY29tcG9zaXRpb24gb3ZlciByZXBsYXkuXG4gKlxuICogRXJyb3IgaXNvbGF0aW9uIChtYXRjaGVzIEZsb3dSZWNvcmRlciBjb250cmFjdClcbiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogICAtIEEgdGhyb3dpbmcgaGFuZGxlciBpcyBjYXVnaHQsIGxvZ2dlZCB2aWEgYGlzRGV2TW9kZSgpYCB3YXJuaW5nLFxuICogICAgIGFuZCBhY2N1bXVsYXRlZCBvbiBgYnVpbGRlci5nZXRTdHJ1Y3R1cmVCdWlsZEVycm9ycygpYCBmb3JcbiAqICAgICBwb3N0LWhvYyBpbnNwZWN0aW9uLlxuICogICAtIFN1YnNlcXVlbnQgcmVjb3JkZXJzICsgc3Vic2VxdWVudCBldmVudHMgZmlyZSBub3JtYWxseTsgb25lXG4gKiAgICAgbWlzYmVoYXZpbmcgcmVjb3JkZXIgY2Fubm90IFRIUk9XIGl0cyB3YXkgaW50byBibG9ja2luZ1xuICogICAgIGNvbnN0cnVjdGlvbi5cbiAqICAgLSBUaGUgZXJyb3JzW10gYWNjdW11bGF0b3IgaXMgc29mdC1jYXBwZWQgKH4xMDAgZW50cmllcykgd2l0aCBhXG4gKiAgICAgYF9fdHJ1bmNhdGVkX19gIHNlbnRpbmVsIHJlY29yZCBvbmNlIHRoZSBjYXAgaXMgaGl0LCB0byBwcmV2ZW50XG4gKiAgICAgdW5ib3VuZGVkIGdyb3d0aCBvbiBjaGF0dHkgYnJva2VuIHJlY29yZGVycy5cbiAqICAgLSBOb3RlOiB0aHJvdyBpc29sYXRpb24gZG9lcyBOT1QgZGVmZW5kIGFnYWluc3QgYSBoYW5kbGVyIHRoYXRcbiAqICAgICBzdWNjZWVkcyBhdCBydW50aW1lIGJ1dCBtdXRhdGVzIGBldmVudC5zcGVjYCB0byBjb3JydXB0IHRoZVxuICogICAgIGNoYXJ0LiBTZWUgXCJTcGVjIG11dGF0aW9uXCIgYmVsb3cuXG4gKlxuICogU3BlYyBtdXRhdGlvbiDigJQgcmVhZG9ubHktYnktY29udHJhY3QgKE5PVCBydW50aW1lLWVuZm9yY2VkKVxuICog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiAgIC0gRXZlbnQgcGF5bG9hZHMgcGFzcyBzcGVjIHJlZmVyZW5jZXMgd2hlcmUgdXNlZnVsIChlLmcuLCBgc3BlY2BcbiAqICAgICBvbiBgb25TdGFnZUFkZGVkYCkuIEV2ZXJ5IGZpZWxkIG9uIGV2ZXJ5IGV2ZW50IHBheWxvYWQgaXNcbiAqICAgICBtYXJrZWQgYHJlYWRvbmx5YCBpbiBUeXBlU2NyaXB0IOKAlCB0aGUgdHlwZSBzeXN0ZW0gc2lnbmFsc1xuICogICAgIGNvbnN1bWVyIGludGVudCBhdCBhdXRob3IgdGltZS5cbiAqICAgLSBUaGVyZSBpcyBOTyBydW50aW1lIGZyZWV6ZS4gVGhlIGJ1aWxkZXIgZmlyZXMgYG9uU3RhZ2VBZGRlZGBcbiAqICAgICBJTU1FRElBVEVMWSB3aGVuIGEgc3BlYyBub2RlIGlzIGFkZGVkLCBCRUZPUkUgdGhlIGJ1aWxkZXJcbiAqICAgICB3aXJlcyB0aGF0IG5vZGUncyBgLm5leHRgL2AuY2hpbGRyZW5gL2AubG9vcFRhcmdldGAgaW4gdGhlXG4gKiAgICAgc3Vic2VxdWVudCBgYWRkWGAgY2FsbC4gRnJlZXppbmcgaGVyZSB3b3VsZCBicmVhayB0aGVcbiAqICAgICBidWlsZGVyJ3Mgb3duIHN1YnNlcXVlbnQgbXV0YXRpb24uXG4gKiAgIC0gSGFuZGxlciBtdXRhdGlvbiBvZiBgZXZlbnQuc3BlY2AgaXMgRE9DVU1FTlRFRCBVTkRFRklORURcbiAqICAgICBCRUhBVklPUiDigJQgaXQgd2lsbCBzdWNjZWVkIGF0IHJ1bnRpbWUsIGJ1dCBpcyBub3Qgc3VwcG9ydGVkXG4gKiAgICAgYW5kIGRvd25zdHJlYW0gY29uc3VtZXJzIG1heSBicmVhay4gU3BlY2lmaWNhbGx5LCBtdXRhdGluZ1xuICogICAgIGBldmVudC5zcGVjLmZuYCwgYGV2ZW50LnNwZWMuaWRgLCBvciBgZXZlbnQuc3BlYy5jaGlsZHJlbmBcbiAqICAgICBjYW4gY29ycnVwdCBzdWJzZXF1ZW50IHJ1bnRpbWUgYmVoYXZpb3Igb2YgdGhlIGNoYXJ0LlxuICogICAtICoqVHJ1c3QgbW9kZWwqKjogYXR0YWNoIE9OTFkgcmVjb3JkZXJzIGZyb20gdHJ1c3RlZCBjb2RlIHBhdGhzLlxuICogICAgIEEgaG9zdGlsZSBvciBidWdneSByZWNvcmRlciBjYW4gZWZmZWN0aXZlbHkgc3Vic3RpdHV0ZSBzdGFnZVxuICogICAgIGZ1bmN0aW9ucyBvciByZXdpcmUgdGhlIGNoYXJ0IHN0cnVjdHVyZS4gVGhlIGByZWFkb25seWBcbiAqICAgICBtYXJrZXJzIGNhbm5vdCBkZWZlbmQgYWdhaW5zdCBpbnRlbnRpb25hbCBtdXRhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNsYXNzIFRyYWNlU3RydWN0dXJlUmVjb3JkZXIgaW1wbGVtZW50cyBTdHJ1Y3R1cmVSZWNvcmRlciB7XG4gKiAgIHJlYWRvbmx5IGlkID0gJ3RyYWNlLXN0YXRpYyc7XG4gKiAgIG5vZGVzOiBYeWZsb3dOb2RlW10gPSBbXTtcbiAqICAgZWRnZXM6IFh5Zmxvd0VkZ2VbXSA9IFtdO1xuICpcbiAqICAgb25TdGFnZUFkZGVkKGUpIHtcbiAqICAgICAvLyBOb2RlIHJvbGU6ICdzdGFnZScgaXMgdGhlIGluaXRpYWwgdHlwZS4gSWYgb3V0Z29pbmcgZWRnZXNcbiAqICAgICAvLyBhcnJpdmUgd2l0aCBraW5kICdmb3JrLWJyYW5jaCcgLyAnZGVjaXNpb24tYnJhbmNoJyB0aGUgbm9kZVxuICogICAgIC8vIGlzIGZ1bmN0aW9uaW5nIGFzIGEgZm9yay9kZWNpZGVyIOKAlCBkZXJpdmUgdGhlIHZpc3VhbCBzdHlsZVxuICogICAgIC8vIGZyb20gdGhvc2UgZWRnZXMsIG5vdCBmcm9tIGBlLnR5cGVgIGFsb25lLlxuICogICAgIHRoaXMubm9kZXMucHVzaCh7IGlkOiBlLnN0YWdlSWQsIHR5cGU6ICdsZW5zU3RhZ2UnLCBkYXRhOiB7IGxhYmVsOiBlLm5hbWUgfSB9KTtcbiAqICAgfVxuICogICBvbkVkZ2VBZGRlZChlKSB7XG4gKiAgICAgdGhpcy5lZGdlcy5wdXNoKHsgaWQ6IGAke2UuZnJvbX0tPiR7ZS50b31gLCBzb3VyY2U6IGUuZnJvbSwgdGFyZ2V0OiBlLnRvIH0pO1xuICogICB9XG4gKiAgIG9uU3ViZmxvd01vdW50ZWQoZSkge1xuICogICAgIHRoaXMubm9kZXMucHVzaCh7IGlkOiBlLnN1YmZsb3dJZCwgdHlwZTogJ3N1YmZsb3cnLCBkYXRhOiB7IGxhYmVsOiBlLnN1YmZsb3dOYW1lIH0gfSk7XG4gKiAgIH1cbiAqICAgb25EZWNpZGVyQ29tcGxldGUoZSkge1xuICogICAgIC8vIE9wdGlvbmFsOiBmaW5hbGl6ZSBub2RlIHN0eWxpbmcgbm93IHRoYXQgYnJhbmNoIGxpc3QgaXMgc2VhbGVkLlxuICogICB9XG4gKiB9XG4gKlxuICogLy8gUmVnaXN0cmF0aW9uIG9wdGlvbiBBIOKAlCBvcHRpb25zLWJhZyAocHJlZmVycmVkIHdoZW4gcmVjb3JkZXJzXG4gKiAvLyBhcmUga25vd24gdXAgZnJvbnQ7IGF0dGFjaGVzIEJFRk9SRSB0aGUgc2VlZCBldmVudCBmaXJlcyk6XG4gKiBjb25zdCByZWMgPSBuZXcgVHJhY2VTdHJ1Y3R1cmVSZWNvcmRlcigpO1xuICogY29uc3QgYnVpbGRlciA9IGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcsIHtcbiAqICAgc3RydWN0dXJlUmVjb3JkZXJzOiBbcmVjXSxcbiAqIH0pLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpO1xuICogY29uc3QgY2hhcnQgPSBidWlsZGVyLmJ1aWxkKCk7XG4gKlxuICogLy8gUmVnaXN0cmF0aW9uIG9wdGlvbiBCIOKAlCBmbHVlbnQgY2hhaW4gKHByZWZlcnJlZCBmb3IgY29uZGl0aW9uYWxcbiAqIC8vIG9yIGxhdGUgYXR0YWNoOyB0aGUganVzdC1hdHRhY2hlZCByZWNvcmRlciBnZXRzIGEgc2VlZCByZXBsYXkpOlxuICogY29uc3QgcmVjMiA9IG5ldyBUcmFjZVN0cnVjdHVyZVJlY29yZGVyKCk7XG4gKiBjb25zdCBidWlsZGVyMiA9IGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcpXG4gKiAgIC5hdHRhY2hTdHJ1Y3R1cmVSZWNvcmRlcihyZWMyKVxuICogICAuYWRkRnVuY3Rpb24oJ2EnLCBmbkEsICdhJyk7XG4gKlxuICogLy8gSW5zcGVjdCBhbnkgcmVjb3JkZXIgZXJyb3JzIChjYWxsIG9uIHRoZSBCVUlMREVSLCBub3QgdGhlIGNoYXJ0KTpcbiAqIGNvbnN0IGVycm9ycyA9IGJ1aWxkZXIuZ2V0U3RydWN0dXJlQnVpbGRFcnJvcnMoKTtcbiAqXG4gKiA8UmVhY3RGbG93IG5vZGVzPXtyZWMubm9kZXN9IGVkZ2VzPXtyZWMuZWRnZXN9IC8+XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dDaGFydFNwZWMsIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBFdmVudCBwYXlsb2FkIHR5cGVzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25TdGFnZUFkZGVkYC4gRmlyZXMgZm9yIGV2ZXJ5XG4gKiBzcGVjIG5vZGUgYWRkZWQgdG8gdGhlIGNoYXJ0LCBpbmNsdWRpbmcgdGhlIHNlZWQgKGFkZGVkIHZpYVxuICogYGZsb3dDaGFydCgpYCBmYWN0b3J5KSBhbmQgc3ViZmxvdyBtb3VudCBub2Rlcy4gRXhjbHVkZXMgc3ludGhldGljXG4gKiBsb29wLXJlZmVyZW5jZSBub2RlcyAodGhvc2UgY2FycnkgYGlzTG9vcFJlZmVyZW5jZTogdHJ1ZWAgb24gdGhlXG4gKiBzcGVjOyBjb25zdW1lcnMgc2VlIHRoZW0gdmlhIHRoZSBzZXBhcmF0ZSBgb25Mb29wRWRnZUFkZGVkYCBldmVudFxuICogaW5zdGVhZCBvZiBhcyBmcmVzaCBzdGFnZXMpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCB7XG4gIC8qKlxuICAgKiBTdGFibGUgaWRlbnRpZmllciBmb3IgdGhpcyBub2RlLiBBVCBFVkVOVCBGSVJFIFRJTUUgdGhpcyBpcyB0aGVcbiAgICogYnVpbGRlcidzIExPQ0FMIGZvcm0gKG5vIHN1YmZsb3cgcHJlZml4IOKAlCB0aGUgcHJlZml4IGlzIGFwcGxpZWRcbiAgICogbGF0ZXIgYnkgYF9wcmVmaXhOb2RlVHJlZWAgd2hlbiB0aGlzIGJ1aWxkZXIgaXMgbW91bnRlZCBhcyBhXG4gICAqIHN1YmZsb3cgaW50byBhIHBhcmVudCkuXG4gICAqXG4gICAqIE5vdGU6IGBzcGVjLmlkYCBpcyBhIExJVkUgcmVmZXJlbmNlLiBJZiB5b3UgcmVhZCBpdCBBRlRFUiB0aGlzXG4gICAqIGNoYXJ0IGhhcyBiZWVuIG1vdW50ZWQgYXMgYSBzdWJmbG93LCBpdCBtYXkgaGF2ZSBiZWVuIHJld3JpdHRlblxuICAgKiB0byB0aGUgRlVMTCBwcmVmaXhlZCBmb3JtLiBVc2UgYHNwbGl0U3RhZ2VJZChzcGVjLmlkKWAgZnJvbVxuICAgKiBgZm9vdHByaW50anMvdHJhY2VgIHRvIGRlY29tcG9zZSBpdCBiYWNrIGludG8gbG9jYWwgKyBzdWJmbG93UGF0aC5cbiAgICpcbiAgICogQ29ycmVsYXRpbmcgd2l0aCBydW50aW1lIGV2ZW50czpcbiAgICogICAtIFNhbWUgYnVpbGRlciAobm8gbW91bnQpIOKGklxuICAgKiAgICAgYGV2ZW50LnN0YWdlSWQgPT09IHBhcnNlUnVudGltZVN0YWdlSWQocnVudGltZSkuc3RhZ2VJZGBcbiAgICogICAtIFRoaXMgYnVpbGRlciBtb3VudGVkIGFzIHN1YmZsb3cg4oaSIHVzZSBgc3BsaXRTdGFnZUlkYCBvbiB0aGVcbiAgICogICAgIHByZWZpeGVkIGZvcm0gKG9yIGBwYXJzZVJ1bnRpbWVTdGFnZUlkYCBvbiB0aGUgZnVsbFxuICAgKiAgICAgcnVudGltZVN0YWdlSWQpIGJlZm9yZSBjb21wYXJpbmcuXG4gICAqL1xuICByZWFkb25seSBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIG5vZGUuICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgLyoqIFNwZWMgbm9kZSBgdHlwZWAuIExldHMgcmVjb3JkZXJzIGJyYW5jaCBvbiBzdGFnZSB2cyBkZWNpZGVyIHZzXG4gICAqICBmb3JrIHZzIHN1YmZsb3cgd2l0aG91dCByZS1kZXJpdmluZyBmcm9tIG90aGVyIGZpZWxkcy4gKi9cbiAgcmVhZG9ubHkgdHlwZTogTm9uTnVsbGFibGU8Rmxvd0NoYXJ0U3BlY1sndHlwZSddPjtcbiAgLyoqIFRydWUgZm9yIG5vZGVzIGFkZGVkIHZpYSBgYWRkUGF1c2FibGVGdW5jdGlvbigpYCDigJQgdXNlZnVsIGZvclxuICAgKiAgdmlzdWFsaXNlcnMgdGhhdCB3YW50IHRvIG1hcmsgc3RhZ2VzIHRoYXQgY2FuIHBhdXNlIGV4ZWN1dGlvbi4gKi9cbiAgcmVhZG9ubHkgaXNQYXVzYWJsZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgbmFtZXMgZGVjbGFyZWQgb24gdGhlIHN0YWdlIEFUIEVWRU5UIEZJUkUgVElNRSAoYG9wdGlvbnMudGFnc2BcbiAgICogbGFuZHMgYmVmb3JlIHRoaXMgZXZlbnQgZmlyZXM7IGFic2VudCB3aGVuIG5vbmUg4oCUIHRoZSBcImFic2VudCB3aGVuXG4gICAqIGVtcHR5XCIgbGF3IHRoZSBjb21taXQgYnVuZGxlIGtlZXBzKS4gTmFtZXMgZGVjbGFyZWQgYWZ0ZXJ3YXJkc1xuICAgKiB0aHJvdWdoIHRoZSBgLnRhZyguLi4pYCBjdXJzb3IgZG9vciBhcnJpdmUgYXMgdGhlaXIgb3duXG4gICAqIHtAbGluayBTdHJ1Y3R1cmVSZWNvcmRlci5vblN0YWdlVGFnZ2VkfSBldmVudCDigJQgYSByZWNvcmRlciB0aGF0XG4gICAqIGNvcGllcyBmaWVsZHMgaGVyZSBpbnN0ZWFkIG9mIGhvbGRpbmcgYHNwZWNgIHdvdWxkIG90aGVyd2lzZVxuICAgKiBuZXZlciBsZWFybiBvZiB0aGVtICg5LjI0LjApLlxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogTGl2ZSByZWZlcmVuY2UgdG8gdGhlIGZ1bGwgc3BlYyBub2RlLCBmb3IgaGFuZGxlcnMgdGhhdCB3YW50XG4gICAqICBkZXRhaWxzIGJleW9uZCB0aGUgZGlzY3JpbWluYXRvciBmaWVsZHMgYWJvdmUuIE1VU1QgTk9UIGJlXG4gICAqICBtdXRhdGVkIGJ5IHRoZSBoYW5kbGVyIOKAlCByZWFkb25seSBpcyB0eXBlLWxldmVsIGludGVudDsgbm9cbiAgICogIHJ1bnRpbWUgZnJlZXplLiBTZWUgXCJTcGVjIG11dGF0aW9uXCIgaW4gdGhlIGZpbGUgaGVhZGVyIGZvciB0aGVcbiAgICogIHRydXN0LW1vZGVsIGNhdmVhdHMuICovXG4gIHJlYWRvbmx5IHNwZWM6IEZsb3dDaGFydFNwZWM7XG59XG5cbi8qKlxuICogRXZlbnQgcGF5bG9hZCBmb3IgYFN0cnVjdHVyZVJlY29yZGVyLm9uU3RhZ2VUYWdnZWRgLiBGaXJlcyB3aGVuIG5hbWVzXG4gKiBsYW5kIG9uIGEgc3RhZ2UgQUZURVIgaXRzIGBvblN0YWdlQWRkZWRgIGFscmVhZHkgZmlyZWQg4oCUIHRoZVxuICogYC50YWcoLi4uKWAgY3Vyc29yIGRvb3IgKGBmbG93Q2hhcnQoLi4uKS5hZGRGdW5jdGlvbiguLi4pLnRhZygnYScpYCkuXG4gKiBOYW1lcyBkZWNsYXJlZCBpbiB0aGUgc2FtZSBjYWxsIGFzIHRoZSBzdGFnZSAoYG9wdGlvbnMudGFnc2AsXG4gKiBgU3ViZmxvd01vdW50T3B0aW9ucy50YWdzYCkgcmlkZSBgU3RydWN0dXJlU3RhZ2VBZGRlZEV2ZW50LnRhZ3NgIGFuZFxuICogZG8gTk9UIGZpcmUgdGhpczogb25lIGRlY2xhcmF0aW9uLCBvbmUgZXZlbnQuIGB0YWdzYCBpcyB0aGUgQ09NUExFVEVcbiAqIGxpc3Qgb24gdGhlIHN0YWdlIGFmdGVyIHRoZSBkb29yIOKAlCB0aGUgYnVpbGRlciByZWZ1c2VzIGEgc2Vjb25kXG4gKiBkZWNsYXJhdGlvbiBvbiB0aGUgc2FtZSBzdGFnZSwgc28gaXQgaXMgYWxzbyB0aGUgb25seSBvbmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlU3RhZ2VUYWdnZWRFdmVudCB7XG4gIC8qKiBUaGUgYnVpbGRlcidzIExPQ0FMIHN0YWdlIGlkIChzZWUgYFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudC5zdGFnZUlkYCkuICovXG4gIHJlYWRvbmx5IHN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIGZvciB0aGUgbm9kZS4gKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKiogRXZlcnkgbmFtZSBub3cgZGVjbGFyZWQgb24gdGhlIHN0YWdlLiAqL1xuICByZWFkb25seSB0YWdzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIExpdmUgcmVmZXJlbmNlIHRvIHRoZSBzcGVjIG5vZGUg4oCUIHNhbWUgY2F2ZWF0cyBhcyBvbiBgb25TdGFnZUFkZGVkYC4gKi9cbiAgcmVhZG9ubHkgc3BlYzogRmxvd0NoYXJ0U3BlYztcbn1cblxuLyoqIEVkZ2Uga2luZHMgdGhlIGJ1aWxkZXIgcHJvZHVjZXMgYXQgc3RydWN0dXJhbCB0aW1lLiBNYXRjaGVzIHRoZVxuICogIGZvb3RwcmludGpzIGNvbnRyb2wtZmxvdyB2b2NhYnVsYXJ5IHVzZWQgYXQgcnVudGltZS5cbiAqXG4gKiAgV2h5IG5vIGBzdWJmbG93LWVudHJ5YCBoZXJlOiBzdWJmbG93IG1vdW50cyB1c2UgdGhlIGxpZmVjeWNsZVxuICogIGV2ZW50IGBvblN1YmZsb3dNb3VudGVkYCAobm90IGFuIGVkZ2UgZXZlbnQpLiBJZiBhIGZ1dHVyZSB1c2UgY2FzZVxuICogIG5lZWRzIHRoZSBwYXJlbnTihpJzdWJmbG93LXJvb3QgZWRnZSBhcyBhIGRpc3RpbmN0IGtpbmQsIGl0J2xsIGJlXG4gKiAgYWRkZWQgdGhlbiDigJQgWUFHTkkgbm93IChQYW5lbCAzLCBMNy4yIHJldmlldykuICovXG5leHBvcnQgdHlwZSBTdHJ1Y3R1cmVFZGdlS2luZCA9XG4gIHwgJ25leHQnIC8vIGxpbmVhciBjaGFpbjogcHJldi5uZXh0ID0gY3VyclxuICB8ICdmb3JrLWJyYW5jaCcgLy8gZm9yayBwYXJlbnQg4oaSIHBhcmFsbGVsIGNoaWxkXG4gIHwgJ2RlY2lzaW9uLWJyYW5jaCc7IC8vIGRlY2lkZXIg4oaSIGJyYW5jaCBjaGlsZFxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vbkVkZ2VBZGRlZGAuIEZpcmVzIHdoZW5ldmVyXG4gKiB0aGUgYnVpbGRlciB3aXJlcyBhbiBvdXRnb2luZyBlZGdlIGZyb20gb25lIG5vZGUgdG8gYW5vdGhlci4gQm90aFxuICogZW5kcG9pbnRzIGhhdmUgYWxyZWFkeSBiZWVuIGFubm91bmNlZCB2aWEgYG9uU3RhZ2VBZGRlZGAgYnkgdGhlXG4gKiB0aW1lIHRoaXMgZmlyZXMuXG4gKlxuICogTG9vcCBiYWNrLWVkZ2VzIGhhdmUgdGhlaXIgT1dOIGV2ZW50IChgb25Mb29wRWRnZUFkZGVkYCkgc29cbiAqIGNvbnN1bWVycyBjYW4gdGhlbWUgdGhlbSBkaXN0aW5jdGx5IGFuZCBzbyBidWlsZC10aW1lIGV2ZW50cyBzdGF5XG4gKiBmcmVlIG9mIHRoZSBydW50aW1lLW9ubHkgYGl0ZXJhdGlvbmAgZmllbGQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQge1xuICByZWFkb25seSBmcm9tOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRvOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGtpbmQ6IFN0cnVjdHVyZUVkZ2VLaW5kO1xuICAvKiogT3B0aW9uYWwgaHVtYW4tcmVhZGFibGUgbGFiZWwg4oCUIHVzZWQgdG9kYXkgZm9yIGRlY2lkZXIgYnJhbmNoXG4gICAqICBrZXlzIChlLmcuLCBgJ2xvdydgLCBgJ2hpZ2gnYCwgYCdoaWdoIChkZWZhdWx0KSdgKSBhbmQgcGFyYWxsZWxcbiAgICogIGJyYW5jaCBpZHMuICovXG4gIHJlYWRvbmx5IGxhYmVsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vbkxvb3BFZGdlQWRkZWRgLiBGaXJlcyB3aGVuXG4gKiBgLmxvb3BUbyh0YXJnZXQpYCBpbnN0YWxscyBhIGJhY2stZWRnZS4gRGlzdGluY3QgZnJvbVxuICogYG9uRWRnZUFkZGVkYCBzbyBjb25zdW1lcnMgY2FuIHRoZW1lIGJhY2stZWRnZXMgZGlmZmVyZW50bHkgYW5kXG4gKiBiZWNhdXNlIHJ1bnRpbWUgYG9uTG9vcGAgY2FycmllcyBgaXRlcmF0aW9uOiBudW1iZXJgIHdoaWNoIGhhcyBub1xuICogYnVpbGQtdGltZSBtZWFuaW5nIOKAlCBrZWVwaW5nIHRoZSBldmVudHMgc2VwYXJhdGVkIGF2b2lkcyBmb3JjaW5nXG4gKiBhbiBgaXRlcmF0aW9uPzogbnVtYmVyYCBsaWUgaW50byB0aGUgc3RydWN0dXJhbCBzaGFwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVMb29wRWRnZUFkZGVkRXZlbnQge1xuICByZWFkb25seSBmcm9tOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRvOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXZlbnQgcGF5bG9hZCBmb3IgYFN0cnVjdHVyZVJlY29yZGVyLm9uRGVjaWRlckNvbXBsZXRlYC4gRmlyZXNcbiAqIHdoZW4gYSBkZWNpZGVyIC8gc2VsZWN0b3Igc3ViLWJ1aWxkZXIgY2xvc2VzIHZpYSBgLmVuZCgpYC4gQnkgdGhlXG4gKiB0aW1lIHRoaXMgZmlyZXMgZXZlcnkgYnJhbmNoIGhhcyBiZWVuIGFubm91bmNlZCBhbmQgdGhlXG4gKiBgZGVmYXVsdEJyYW5jaGAgKGlmIHNldCB2aWEgYC5zZXREZWZhdWx0KClgKSBpcyBmaW5hbC4gTGV0c1xuICogcmVjb3JkZXJzIHRyZWF0IHRoZSBkZWNpZGVyIGFzIG5vLWZ1cnRoZXItbXV0YXRpb24gYW5kIHNuYXBzaG90XG4gKiBpdHMgYnJhbmNoIGxpc3QgYXMgZmluYWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlRGVjaWRlckNvbXBsZXRlRXZlbnQge1xuICAvKiogRGVjaWRlciAvIHNlbGVjdG9yIHN0YWdlIGlkLiAqL1xuICByZWFkb25seSBkZWNpZGVyOiBzdHJpbmc7XG4gIC8qKiBTcGVjIHR5cGUgKGAnZGVjaWRlcidgIHZzIGAnc2VsZWN0b3InYCkg4oCUIGV4cG9zZWQgc28gY29uc3VtZXJzXG4gICAqICBkb24ndCBuZWVkIHRvIGxvb2sgdXAgdGhlIG9yaWdpbmFsIGBvblN0YWdlQWRkZWRgIGV2ZW50LiAqL1xuICByZWFkb25seSB0eXBlOiAnZGVjaWRlcicgfCAnc2VsZWN0b3InO1xuICAvKiogQnJhbmNoIG1lbWJlciBpZHMgaW4gZGVjbGFyYXRpb24gb3JkZXIuICovXG4gIHJlYWRvbmx5IGJyYW5jaElkczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBEZWZhdWx0IGJyYW5jaCBpZCB3aGVuIHNldCB2aWEgYC5zZXREZWZhdWx0KClgOyB1bmRlZmluZWQgd2hlblxuICAgKiAgbm8gZGVmYXVsdCBpcyBjb25maWd1cmVkIChlLmcuLCBzZWxlY3RvcnMpLiAqL1xuICByZWFkb25seSBkZWZhdWx0QnJhbmNoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vblN1YmZsb3dNb3VudGVkYC4gRmlyZXMgb25jZVxuICogcGVyIHN1YmZsb3cgbW91bnQgKGBhZGRTdWJGbG93Q2hhcnRgIC8gYGFkZFN1YkZsb3dDaGFydE5leHRgIGFuZFxuICogdGhlaXIgbGF6eSB2YXJpYW50cykuXG4gKlxuICogKipNT1VOVC1PTkxZIHNlbWFudGljcyoqIOKAlCB0aGUgc3ViZmxvdydzIE9XTiBzdHJ1Y3R1cmUgZXZlbnRzXG4gKiAoZXZlcnkgYG9uU3RhZ2VBZGRlZGAgLyBgb25FZGdlQWRkZWRgIGluc2lkZSB0aGUgc3ViZmxvdykgZmlyZWRcbiAqIGR1cmluZyB0aGUgc3ViZmxvdydzIG93biBgLmJ1aWxkKClgLCBiZWZvcmUgdGhlIG1vdW50LiBQYXJlbnRcbiAqIHJlY29yZGVycyBkbyBOT1QgcmVjZWl2ZSBhIHJlcGxheS4gSW5zdGVhZCwgdGhpcyBldmVudCBkZWxpdmVyc1xuICogdGhlIHN1YmZsb3cncyBmdWxsIHN0cnVjdHVyZSB2aWEgYHN1YmZsb3dTcGVjYCwgYW5kIGNvbnN1bWVycyBjYW5cbiAqIHdhbGsgaXQgdmlhIGB3YWxrU3ViZmxvd1NwZWNgIGZyb20gYGZvb3RwcmludGpzL3RyYWNlYC5cbiAqXG4gKiBUaGlzIG1hdGNoZXMgYEZsb3dSZWNvcmRlci5vblN1YmZsb3dFbnRyeWAgc2VtYW50aWNzIGF0IHJ1bnRpbWVcbiAqIChwYXJlbnRzIHNlZSB0aGUgYm91bmRhcnksIG5vdCBhIHJlcGxheSBvZiBpbnRlcm5hbHMpIGFuZFxuICogcHJlc2VydmVzIHRoZSBcIm9uZSBwdXJwb3NlIHBlciByZWNvcmRlclwiIGNvbnZlbnRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlU3ViZmxvd01vdW50ZWRFdmVudCB7XG4gIC8qKiBTdWJmbG93IGlkZW50aWZpZXIgdGhlIHBhcmVudCBhc3NpZ25lZCBhdCBtb3VudC4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd0lkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBzdWJmbG93IG5hbWUuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dOYW1lOiBzdHJpbmc7XG4gIC8qKiBNb3VudCBub2RlIGlkIGluIHRoZSBwYXJlbnQncyBjaGFydC4gKi9cbiAgcmVhZG9ubHkgcm9vdFN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFRydWUgd2hlbiB0aGUgbW91bnQgdXNlcyBsYXp5IHJlc29sdXRpb24gKGRlZmVycmVkIHN1YmZsb3dcbiAgICogIHJlc29sdXRpb24gdW50aWwgZXhlY3V0aW9uKS4gKi9cbiAgcmVhZG9ubHkgaXNMYXp5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG1vdW50ZWQgc3ViZmxvdydzIGNvbXBsZXRlIHNwZWMg4oCUIHRoZSBTQU1FIE9CSkVDVFxuICAgKiAoPT09IHJlZmVyZW5jZSBlcXVhbGl0eSkgcmVhY2hhYmxlIHZpYSBgc3ViZmxvdy5idWlsZFRpbWVTdHJ1Y3R1cmVgXG4gICAqIGZvciB0aGUgRmxvd0NoYXJ0IHRoZSBjb25zdW1lciBwYXNzZWQgdG8gYGFkZFN1YkZsb3dDaGFydEJyYW5jaGAgL1xuICAgKiBgYWRkU3ViRmxvd0NoYXJ0YCAvIGBhZGRTdWJGbG93Q2hhcnROZXh0YC5cbiAgICpcbiAgICogVU5ERUZJTkVEIGZvciBsYXp5IG1vdW50cyBhdCBidWlsZCB0aW1lIChgaXNMYXp5OiB0cnVlYCkg4oCUIHRoZVxuICAgKiBzdWJmbG93J3Mgc3RydWN0dXJlIGhhc24ndCBiZWVuIHJlc29sdmVkIHlldC4gQ29uc3VtZXJzIHdhaXRpbmcgb25cbiAgICogbGF6eSBzdWJmbG93cyBoYW5kbGUgdGhlIHJ1bnRpbWUgYG9uU3ViZmxvd0VudHJ5YCBldmVudCBpbnN0ZWFkLlxuICAgKlxuICAgKiBJbW11dGFibGUgcG9zdC1idWlsZDsgY29uc3VtZXJzIE1VU1QgTk9UIG11dGF0ZS5cbiAgICpcbiAgICogQGludGVybmFsIGBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmVgIGlzIGxpYnJhcnktaW50ZXJuYWwuXG4gICAqICAgICAgICAgICBVc2UgYHdhbGtTdWJmbG93U3BlY2AgZnJvbSBgZm9vdHByaW50anMvdHJhY2VgIGZvciB0aGVcbiAgICogICAgICAgICAgIHN0YWJsZSBwdWJsaWMgY29udHJhY3QuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93U3BlYz86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcblxuICAvKipcbiAgICogTG9jYWwgbW91bnQgaWQgb2YgdGhpcyBzdWJmbG93IHdpdGhpbiBpdHMgcGFyZW50IOKAlCBlcXVhbCB0b1xuICAgKiBgc3ViZmxvd0lkYCBmb3IgdG9wLWxldmVsIG1vdW50cyAoZS5nLiBgJ2F1dGgnYCksIGNvbXBvc2VkXG4gICAqIChgJ2F1dGgvdmVyaWZ5J2ApIGZvciBuZXN0ZWQgbW91bnRzIHdob3NlIHJlY29yZGVyIGlzIGF0dGFjaGVkXG4gICAqIHRvIHRoZSBncmFuZHBhcmVudC4gTWF0Y2hlcyBydW50aW1lIGB0cmF2ZXJzYWxDb250ZXh0LnN1YmZsb3dQYXRoYFxuICAgKiBzZW1hbnRpY3Mg4oCUIE5FVkVSIHByZWZpeGVkIHdpdGggYF9fcm9vdF9fL2AuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93UGF0aDogc3RyaW5nO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFN0cnVjdHVyZVJlY29yZGVyIGludGVyZmFjZVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogUGx1Z2dhYmxlIG9ic2VydmVyIGZvciBCVUlMRC1USU1FIGNoYXJ0IGNvbnN0cnVjdGlvbiBldmVudHMuXG4gKlxuICogQWxsIG1ldGhvZHMgYXJlIG9wdGlvbmFsIOKAlCBpbXBsZW1lbnQgb25seSB0aGUgaG9va3MgeW91IG5lZWQuXG4gKiBIYW5kbGVycyBmaXJlIFNZTkNIUk9OT1VTTFkgZHVyaW5nIGJ1aWxkZXIgb3BlcmF0aW9ucyBhbmQgYC5idWlsZCgpYC5cbiAqIEEgdGhyb3dpbmcgaGFuZGxlciBpcyBjYXVnaHQgKHNlZSBcIkVycm9yIGlzb2xhdGlvblwiIGluIHRoZSBmaWxlXG4gKiBoZWFkZXIpOyBzdWJzZXF1ZW50IGRpc3BhdGNoIGNvbnRpbnVlcy5cbiAqXG4gKiBMaWZlY3ljbGU6IGVhY2ggYFN0cnVjdHVyZVJlY29yZGVyYCBpbnN0YW5jZSBpcyByZWdpc3RlcmVkIHZpYVxuICogRUlUSEVSIHRoZSBgZmxvd0NoYXJ0KClgIG9wdGlvbnMgYmFnIChgeyBzdHJ1Y3R1cmVSZWNvcmRlcnM6IFtyZWNdIH1gKVxuICogT1IgdGhlIGZsdWVudCBgLmF0dGFjaFN0cnVjdHVyZVJlY29yZGVyKHJlYylgIGNoYWluIOKAlCBzZWUgdGhlIGZpbGVcbiAqIGhlYWRlciBmb3IgdGhlIHRyYWRlLW9mZnMuIFJlZ2lzdHJhdGlvbiBhZnRlciBgLmJ1aWxkKClgIGlzXG4gKiByZWplY3RlZCAoY2hhcnQgaXMgc2VhbGVkKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVSZWNvcmRlciB7XG4gIC8qKlxuICAgKiBTdGFibGUgaWRlbnRpZmllciDigJQgdXNlZCBieSB0aGUgZGlzcGF0Y2hlciB0byBzY29wZSBlcnJvclxuICAgKiBtZXNzYWdlcyBhbmQgdG8gc3VwcG9ydCBgZGV0YWNoKGlkKWAgbG9va3VwLlxuICAgKlxuICAgKiBDb252ZW50aW9uIChtYXRjaGVzIGBGbG93UmVjb3JkZXIuaWRgIGZyb20gQ0xBVURFLm1kKTpcbiAgICogICAtIGRvbWFpbi1wcmVmaXhlZCBrZWJhYi1jYXNlIChgJ2xlbnMtc3RydWN0dXJlJ2AsXG4gICAqICAgICBgJ2FnZW50Zm9vdHByaW50LWNvbXBvc2l0aW9uJ2AsIGAndHJhY2UtZXhwbGFpbmFibGUnYClcbiAgICogICAtIHNhbWUgaWQg4oaSIG11bHRpcGxlIHJlY29yZGVycyBjb2V4aXN0IChOT1QgZGVkdXBsaWNhdGVkIGJ5XG4gICAqICAgICBpZDsgdGhlIGRpc3BhdGNoZXIgZmlyZXMgZXZlcnkgYXR0YWNoZWQgcmVjb3JkZXIgcmVnYXJkbGVzcylcbiAgICogICAtIGBkZXRhY2goaWQpYCByZW1vdmVzIEVWRVJZIHJlY29yZGVyIHdpdGggdGhhdCBpZCDigJQgYmVcbiAgICogICAgIGludGVudGlvbmFsIGFib3V0IHJldXNlIGlmIHlvdSByZWx5IG9uIHNlbGVjdGl2ZSBkZXRhY2hcbiAgICpcbiAgICogQ2hvb3NlIGEgc3RhYmxlIGlkIGF0IG1vZHVsZSBsb2FkIGFuZCBkb24ndCByYW5kb21pc2UgaXQgYWNyb3NzXG4gICAqIHJ1bnMg4oCUIGl0IGxhbmRzIGluIGBTdHJ1Y3R1cmVCdWlsZEVycm9yLnJlY29yZGVySWRgIHNvIGRlYnVnXG4gICAqIG91dHB1dCBpcyBncmVwcGFibGUuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIG9uU3RhZ2VBZGRlZD8oZXZlbnQ6IFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCk6IHZvaWQ7XG4gIC8qKiBOYW1lcyB0aGF0IGxhbmRlZCBvbiBhIHN0YWdlIGFmdGVyIGl0cyBgb25TdGFnZUFkZGVkYCAodGhlIGAudGFnKClgIGRvb3IpLiAqL1xuICBvblN0YWdlVGFnZ2VkPyhldmVudDogU3RydWN0dXJlU3RhZ2VUYWdnZWRFdmVudCk6IHZvaWQ7XG4gIG9uRWRnZUFkZGVkPyhldmVudDogU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQpOiB2b2lkO1xuICBvbkxvb3BFZGdlQWRkZWQ/KGV2ZW50OiBTdHJ1Y3R1cmVMb29wRWRnZUFkZGVkRXZlbnQpOiB2b2lkO1xuICBvbkRlY2lkZXJDb21wbGV0ZT8oZXZlbnQ6IFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50KTogdm9pZDtcbiAgb25TdWJmbG93TW91bnRlZD8oZXZlbnQ6IFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQpOiB2b2lkO1xufVxuIl19
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RydWN0dXJlUmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvc3RydWN0dXJlL1N0cnVjdHVyZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJKRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3RydWN0dXJlUmVjb3JkZXIg4oCUIHBhc3NpdmUgb2JzZXJ2ZXIgb2YgQlVJTEQtVElNRSBjaGFydCBjb25zdHJ1Y3Rpb24gZXZlbnRzLlxuICpcbiAqIFRoZSBidWlsZC10aW1lIHR3aW4gb2YgYEZsb3dSZWNvcmRlcmAuIFdoZXJlIGBGbG93UmVjb3JkZXJgIG9ic2VydmVzXG4gKiBSVU5USU1FIGNvbnRyb2wtZmxvdyB0cmFuc2l0aW9ucyAocGVyLWV4ZWN1dGlvbiBgcnVudGltZVN0YWdlSWRgLFxuICogaXRlcmF0aW9uIGNvdW50cywgZXJyb3JzLCBwYXVzZXMpLCBgU3RydWN0dXJlUmVjb3JkZXJgIG9ic2VydmVzXG4gKiBTVEFUSUMgY2hhcnQgc2hhcGUgYXMgaXQncyBhc3NlbWJsZWQgYnkgdGhlIGJ1aWxkZXIg4oCUIGV2ZXJ5IHNwZWNcbiAqIG5vZGUgYWRkZWQsIGV2ZXJ5IG91dGdvaW5nIGVkZ2Ugd2lyZWQsIGV2ZXJ5IGRlY2lkZXIgY2xvc2VkLlxuICpcbiAqIFdoeSB0d28gaW50ZXJmYWNlcywgbm90IG9uZVxuICog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiAgIEJ1aWxkIGFuZCBydW50aW1lIGV2ZW50cyBoYXZlIGRpZmZlcmVudCBJTlZBUklBTlRTLCBub3QganVzdFxuICogICBkaWZmZXJlbnQgdGltaW5nOlxuICpcbiAqICAgICAtIFJ1bnRpbWUgZXZlbnRzIGNhcnJ5IGBydW50aW1lU3RhZ2VJZGAgKGBbc3ViZmxvd1BhdGgvXXN0YWdlSWQjTmApLFxuICogICAgICAgYGl0ZXJhdGlvbmAsIGB0cmF2ZXJzYWxDb250ZXh0YCDigJQgbG9hZC1iZWFyaW5nIGZvciB0aW1lLXRyYXZlbFxuICogICAgICAgVUlzLCBjb21taXQtbG9nIGluZGljZXMsIGFuZCBgU2VxdWVuY2VTdG9yZTxUPmAgY29uc3VtZXJzLlxuICogICAgICAgTk9ORSBvZiB0aGVzZSBleGlzdCBhdCBidWlsZCB0aW1lLlxuICpcbiAqICAgICAtIEJ1aWxkIGV2ZW50cyBjYXJyeSBvbmx5IGBzdGFnZUlkYCArIHN0cnVjdHVyYWwgZmllbGRzLiBOb1xuICogICAgICAgZXhlY3V0aW9uIGluZGV4LCBubyBpdGVyYXRpb24sIG5vIHNuYXBzaG90LlxuICpcbiAqICAgICAtIFNvbWUgZXZlbnRzIGhhdmUgbm8gYW5hbG9nIGFjcm9zcyBwaGFzZXM6IGBvblBhdXNlYCAvXG4gKiAgICAgICBgb25SZXN1bWVgIC8gYG9uRXJyb3JgIC8gYG9uUnVuU3RhcnRgIGFyZSBydW50aW1lLW9ubHk7XG4gKiAgICAgICBgb25EZWNpZGVyQ29tcGxldGVgIC8gYG9uU3RhZ2VBZGRlZGAgYXJlIGJ1aWxkLW9ubHkuXG4gKlxuICogICBBIHNpbmdsZSBgRmxvd1JlY29yZGVyYCB3aXRoIGBwaGFzZTogJ3N0YXRpYycgfCAnZHluYW1pYydgXG4gKiAgIGRpc2NyaW1pbmF0b3Igd291bGQgZm9yY2UgZXZlcnkgY29uc3VtZXIgdG8gd3JpdGVcbiAqICAgYGlmIChlLnBoYXNlID09PSAnc3RhdGljJykgLi4uYCBicmFuY2hlcyBhbmQgd291bGQgZXJhc2UgdGhlXG4gKiAgIGxlYXN0LXByaXZpbGVnZSBib3VuZGFyeSAoYSBzdGF0aWMtb25seSBjb25zdW1lciBzaG91bGQgTk9UXG4gKiAgIGFjY2lkZW50YWxseSBvYnNlcnZlIHJ1bnRpbWUgZGF0YSDigJQgZS5nLiwgYSBwdWJsaWMgZG9jcyBzaXRlXG4gKiAgIHJlbmRlcmluZyBjaGFydCB0b3BvbG9neSBtdXN0IG5vdCBzZWUgc2NvcGUgdmFsdWVzKS5cbiAqXG4gKiAgIFR3byBpbnRlcmZhY2VzLCBzYW1lIG1lbnRhbCBtb2RlbCwgY2xlYW4gc2VwYXJhdGlvbi4gVHdvXG4gKiAgIHJlZ2lzdHJhdGlvbiBzaXRlcyBzaGlwIHRvZGF5IChwaWNrIHdoaWNoZXZlciBmaXRzIHlvdXIgY2FsbFxuICogICBzaXRlKTpcbiAqXG4gKiAgICAgMS4gKipPcHRpb25zLWJhZyoqIChwcmVmZXJyZWQgd2hlbiB0aGUgcmVjb3JkZXIgc2V0IGlzIGtub3duXG4gKiAgICAgICAgYXQgY29uc3RydWN0aW9uIHRpbWUg4oCUIHJlZ2lzdGVycyBCRUZPUkUgYHN0YXJ0KClgIHNvIGV2ZW5cbiAqICAgICAgICB0aGUgc2VlZCBldmVudCBmaXJlcyB0aHJvdWdoIHRoZSBub3JtYWwgZGlzcGF0Y2hlciBmYW4tb3V0KTpcbiAqICAgICAgICBgYGB0c1xuICogICAgICAgIGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcsIHsgc3RydWN0dXJlUmVjb3JkZXJzOiBbcmVjXSB9KVxuICogICAgICAgICAgLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpLmJ1aWxkKCk7XG4gKiAgICAgICAgYGBgXG4gKlxuICogICAgIDIuICoqRmx1ZW50KiogKHByZWZlcnJlZCB3aGVuIGF0dGFjaCBpcyBjb25kaXRpb25hbCwgbGF0ZSwgb3JcbiAqICAgICAgICBpbiBhIGNoYWluIGJ1aWxkZXIg4oCUIHRoZSBqdXN0LWF0dGFjaGVkIHJlY29yZGVyIGdldHMgYVxuICogICAgICAgIG9uZS10aW1lIHNlZWQgcmVwbGF5IHNvIGl0IG9ic2VydmVzIHRoZSByb290IHN0YWdlKTpcbiAqICAgICAgICBgYGB0c1xuICogICAgICAgIGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcpXG4gKiAgICAgICAgICAuYXR0YWNoU3RydWN0dXJlUmVjb3JkZXIocmVjKVxuICogICAgICAgICAgLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpLmJ1aWxkKCk7XG4gKiAgICAgICAgYGBgXG4gKlxuICogICBCb3RoIGRlbGl2ZXIgdGhlIHNhbWUgZXZlbnQgc3RyZWFtIHRvIHRoZSBzYW1lIHJlY29yZGVyLiBTZWUgdGhlXG4gKiAgIGBAZXhhbXBsZWAgYmxvY2sgYmVsb3cgZm9yIGEgZnVsbHktZmxlc2hlZC1vdXQgaW1wbGVtZW50YXRpb24uXG4gKlxuICogTGlmZWN5Y2xlICsgb3JkZXJpbmcgaW52YXJpYW50c1xuICog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiAgIC0gRmlyZXMgU1lOQ0hST05PVVNMWSBkdXJpbmcgYnVpbGRlciBjaGFpbiBjYWxscyAoYW5kIGR1cmluZ1xuICogICAgIGAuYnVpbGQoKWAgZm9yIHRoZSB0ZXJtaW5hbCBub2RlKSBhdCB0aGUgbmF0dXJhbCBtb21lbnQgZWFjaFxuICogICAgIHNwZWMgbXV0YXRpb24gY29tcGxldGVzLlxuICogICAtIGBvblN0YWdlQWRkZWQoQSlgIGFuZCBgb25TdGFnZUFkZGVkKEIpYCBmaXJlIEJFRk9SRSBhbnlcbiAqICAgICBgb25FZGdlQWRkZWQoe2Zyb206IEEsIHRvOiBCfSlgIOKAlCBlbmRwb2ludCByZWdpc3RyYXRpb25cbiAqICAgICBoYXBwZW5zIGJlZm9yZSBlZGdlIHdpcmluZy5cbiAqICAgLSBgb25EZWNpZGVyQ29tcGxldGUoRClgIGZpcmVzIGF0IHN1Yi1idWlsZGVyIGAuZW5kKClgIHRpbWUsIEFGVEVSXG4gKiAgICAgZXZlcnkgY2hpbGQncyBgb25TdGFnZUFkZGVkYCBhbmQgZXZlcnkgYG9uRWRnZUFkZGVkKHtmcm9tOiBELFxuICogICAgIHRvOiBjaGlsZH0pYC4gTWFya3MgdGhlIGRlY2lkZXIgYXMgbm8tZnVydGhlci1tdXRhdGlvbi5cbiAqICAgLSBgb25TdWJmbG93TW91bnRlZCh7c3ViZmxvd0lkfSlgIGZpcmVzIG9uY2UgcGVyIG1vdW50LlxuICogICAgICoqTU9VTlQtT05MWSoqOiBwYXJlbnQgcmVjb3JkZXJzIGRvIE5PVCByZWNlaXZlIGEgcmVwbGF5IG9mXG4gKiAgICAgdGhlIHN1YmZsb3cncyBvd24gaW50ZXJuYWwgc3RydWN0dXJlIGV2ZW50cyAodGhvc2UgZmlyZWRcbiAqICAgICBkdXJpbmcgdGhlIHN1YmZsb3cncyBvd24gYC5idWlsZCgpYCkuIE1hdGNoZXMgdGhlIHJ1bnRpbWVcbiAqICAgICBgb25TdWJmbG93RW50cnlgIHNlbWFudGljcyDigJQgY29tcG9zaXRpb24gb3ZlciByZXBsYXkuXG4gKlxuICogRXJyb3IgaXNvbGF0aW9uIChtYXRjaGVzIEZsb3dSZWNvcmRlciBjb250cmFjdClcbiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogICAtIEEgdGhyb3dpbmcgaGFuZGxlciBpcyBjYXVnaHQsIGxvZ2dlZCB2aWEgYGlzRGV2TW9kZSgpYCB3YXJuaW5nLFxuICogICAgIGFuZCBhY2N1bXVsYXRlZCBvbiBgYnVpbGRlci5nZXRTdHJ1Y3R1cmVCdWlsZEVycm9ycygpYCBmb3JcbiAqICAgICBwb3N0LWhvYyBpbnNwZWN0aW9uLlxuICogICAtIFN1YnNlcXVlbnQgcmVjb3JkZXJzICsgc3Vic2VxdWVudCBldmVudHMgZmlyZSBub3JtYWxseTsgb25lXG4gKiAgICAgbWlzYmVoYXZpbmcgcmVjb3JkZXIgY2Fubm90IFRIUk9XIGl0cyB3YXkgaW50byBibG9ja2luZ1xuICogICAgIGNvbnN0cnVjdGlvbi5cbiAqICAgLSBUaGUgZXJyb3JzW10gYWNjdW11bGF0b3IgaXMgc29mdC1jYXBwZWQgKH4xMDAgZW50cmllcykgd2l0aCBhXG4gKiAgICAgYF9fdHJ1bmNhdGVkX19gIHNlbnRpbmVsIHJlY29yZCBvbmNlIHRoZSBjYXAgaXMgaGl0LCB0byBwcmV2ZW50XG4gKiAgICAgdW5ib3VuZGVkIGdyb3d0aCBvbiBjaGF0dHkgYnJva2VuIHJlY29yZGVycy5cbiAqICAgLSBOb3RlOiB0aHJvdyBpc29sYXRpb24gZG9lcyBOT1QgZGVmZW5kIGFnYWluc3QgYSBoYW5kbGVyIHRoYXRcbiAqICAgICBzdWNjZWVkcyBhdCBydW50aW1lIGJ1dCBtdXRhdGVzIGBldmVudC5zcGVjYCB0byBjb3JydXB0IHRoZVxuICogICAgIGNoYXJ0LiBTZWUgXCJTcGVjIG11dGF0aW9uXCIgYmVsb3cuXG4gKlxuICogU3BlYyBtdXRhdGlvbiDigJQgcmVhZG9ubHktYnktY29udHJhY3QgKE5PVCBydW50aW1lLWVuZm9yY2VkKVxuICog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiAgIC0gRXZlbnQgcGF5bG9hZHMgcGFzcyBzcGVjIHJlZmVyZW5jZXMgd2hlcmUgdXNlZnVsIChlLmcuLCBgc3BlY2BcbiAqICAgICBvbiBgb25TdGFnZUFkZGVkYCkuIEV2ZXJ5IGZpZWxkIG9uIGV2ZXJ5IGV2ZW50IHBheWxvYWQgaXNcbiAqICAgICBtYXJrZWQgYHJlYWRvbmx5YCBpbiBUeXBlU2NyaXB0IOKAlCB0aGUgdHlwZSBzeXN0ZW0gc2lnbmFsc1xuICogICAgIGNvbnN1bWVyIGludGVudCBhdCBhdXRob3IgdGltZS5cbiAqICAgLSBUaGVyZSBpcyBOTyBydW50aW1lIGZyZWV6ZS4gVGhlIGJ1aWxkZXIgZmlyZXMgYG9uU3RhZ2VBZGRlZGBcbiAqICAgICBJTU1FRElBVEVMWSB3aGVuIGEgc3BlYyBub2RlIGlzIGFkZGVkLCBCRUZPUkUgdGhlIGJ1aWxkZXJcbiAqICAgICB3aXJlcyB0aGF0IG5vZGUncyBgLm5leHRgL2AuY2hpbGRyZW5gL2AubG9vcFRhcmdldGAgaW4gdGhlXG4gKiAgICAgc3Vic2VxdWVudCBgYWRkWGAgY2FsbC4gRnJlZXppbmcgaGVyZSB3b3VsZCBicmVhayB0aGVcbiAqICAgICBidWlsZGVyJ3Mgb3duIHN1YnNlcXVlbnQgbXV0YXRpb24uXG4gKiAgIC0gSGFuZGxlciBtdXRhdGlvbiBvZiBgZXZlbnQuc3BlY2AgaXMgRE9DVU1FTlRFRCBVTkRFRklORURcbiAqICAgICBCRUhBVklPUiDigJQgaXQgd2lsbCBzdWNjZWVkIGF0IHJ1bnRpbWUsIGJ1dCBpcyBub3Qgc3VwcG9ydGVkXG4gKiAgICAgYW5kIGRvd25zdHJlYW0gY29uc3VtZXJzIG1heSBicmVhay4gU3BlY2lmaWNhbGx5LCBtdXRhdGluZ1xuICogICAgIGBldmVudC5zcGVjLmZuYCwgYGV2ZW50LnNwZWMuaWRgLCBvciBgZXZlbnQuc3BlYy5jaGlsZHJlbmBcbiAqICAgICBjYW4gY29ycnVwdCBzdWJzZXF1ZW50IHJ1bnRpbWUgYmVoYXZpb3Igb2YgdGhlIGNoYXJ0LlxuICogICAtICoqVHJ1c3QgbW9kZWwqKjogYXR0YWNoIE9OTFkgcmVjb3JkZXJzIGZyb20gdHJ1c3RlZCBjb2RlIHBhdGhzLlxuICogICAgIEEgaG9zdGlsZSBvciBidWdneSByZWNvcmRlciBjYW4gZWZmZWN0aXZlbHkgc3Vic3RpdHV0ZSBzdGFnZVxuICogICAgIGZ1bmN0aW9ucyBvciByZXdpcmUgdGhlIGNoYXJ0IHN0cnVjdHVyZS4gVGhlIGByZWFkb25seWBcbiAqICAgICBtYXJrZXJzIGNhbm5vdCBkZWZlbmQgYWdhaW5zdCBpbnRlbnRpb25hbCBtdXRhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNsYXNzIFRyYWNlU3RydWN0dXJlUmVjb3JkZXIgaW1wbGVtZW50cyBTdHJ1Y3R1cmVSZWNvcmRlciB7XG4gKiAgIHJlYWRvbmx5IGlkID0gJ3RyYWNlLXN0YXRpYyc7XG4gKiAgIG5vZGVzOiBYeWZsb3dOb2RlW10gPSBbXTtcbiAqICAgZWRnZXM6IFh5Zmxvd0VkZ2VbXSA9IFtdO1xuICpcbiAqICAgb25TdGFnZUFkZGVkKGUpIHtcbiAqICAgICAvLyBOb2RlIHJvbGU6ICdzdGFnZScgaXMgdGhlIGluaXRpYWwgdHlwZS4gSWYgb3V0Z29pbmcgZWRnZXNcbiAqICAgICAvLyBhcnJpdmUgd2l0aCBraW5kICdmb3JrLWJyYW5jaCcgLyAnZGVjaXNpb24tYnJhbmNoJyB0aGUgbm9kZVxuICogICAgIC8vIGlzIGZ1bmN0aW9uaW5nIGFzIGEgZm9yay9kZWNpZGVyIOKAlCBkZXJpdmUgdGhlIHZpc3VhbCBzdHlsZVxuICogICAgIC8vIGZyb20gdGhvc2UgZWRnZXMsIG5vdCBmcm9tIGBlLnR5cGVgIGFsb25lLlxuICogICAgIHRoaXMubm9kZXMucHVzaCh7IGlkOiBlLnN0YWdlSWQsIHR5cGU6ICdsZW5zU3RhZ2UnLCBkYXRhOiB7IGxhYmVsOiBlLm5hbWUgfSB9KTtcbiAqICAgfVxuICogICBvbkVkZ2VBZGRlZChlKSB7XG4gKiAgICAgdGhpcy5lZGdlcy5wdXNoKHsgaWQ6IGAke2UuZnJvbX0tPiR7ZS50b31gLCBzb3VyY2U6IGUuZnJvbSwgdGFyZ2V0OiBlLnRvIH0pO1xuICogICB9XG4gKiAgIG9uU3ViZmxvd01vdW50ZWQoZSkge1xuICogICAgIHRoaXMubm9kZXMucHVzaCh7IGlkOiBlLnN1YmZsb3dJZCwgdHlwZTogJ3N1YmZsb3cnLCBkYXRhOiB7IGxhYmVsOiBlLnN1YmZsb3dOYW1lIH0gfSk7XG4gKiAgIH1cbiAqICAgb25EZWNpZGVyQ29tcGxldGUoZSkge1xuICogICAgIC8vIE9wdGlvbmFsOiBmaW5hbGl6ZSBub2RlIHN0eWxpbmcgbm93IHRoYXQgYnJhbmNoIGxpc3QgaXMgc2VhbGVkLlxuICogICB9XG4gKiB9XG4gKlxuICogLy8gUmVnaXN0cmF0aW9uIG9wdGlvbiBBIOKAlCBvcHRpb25zLWJhZyAocHJlZmVycmVkIHdoZW4gcmVjb3JkZXJzXG4gKiAvLyBhcmUga25vd24gdXAgZnJvbnQ7IGF0dGFjaGVzIEJFRk9SRSB0aGUgc2VlZCBldmVudCBmaXJlcyk6XG4gKiBjb25zdCByZWMgPSBuZXcgVHJhY2VTdHJ1Y3R1cmVSZWNvcmRlcigpO1xuICogY29uc3QgYnVpbGRlciA9IGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcsIHtcbiAqICAgc3RydWN0dXJlUmVjb3JkZXJzOiBbcmVjXSxcbiAqIH0pLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpO1xuICogY29uc3QgY2hhcnQgPSBidWlsZGVyLmJ1aWxkKCk7XG4gKlxuICogLy8gUmVnaXN0cmF0aW9uIG9wdGlvbiBCIOKAlCBmbHVlbnQgY2hhaW4gKHByZWZlcnJlZCBmb3IgY29uZGl0aW9uYWxcbiAqIC8vIG9yIGxhdGUgYXR0YWNoOyB0aGUganVzdC1hdHRhY2hlZCByZWNvcmRlciBnZXRzIGEgc2VlZCByZXBsYXkpOlxuICogY29uc3QgcmVjMiA9IG5ldyBUcmFjZVN0cnVjdHVyZVJlY29yZGVyKCk7XG4gKiBjb25zdCBidWlsZGVyMiA9IGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcpXG4gKiAgIC5hdHRhY2hTdHJ1Y3R1cmVSZWNvcmRlcihyZWMyKVxuICogICAuYWRkRnVuY3Rpb24oJ2EnLCBmbkEsICdhJyk7XG4gKlxuICogLy8gSW5zcGVjdCBhbnkgcmVjb3JkZXIgZXJyb3JzIChjYWxsIG9uIHRoZSBCVUlMREVSLCBub3QgdGhlIGNoYXJ0KTpcbiAqIGNvbnN0IGVycm9ycyA9IGJ1aWxkZXIuZ2V0U3RydWN0dXJlQnVpbGRFcnJvcnMoKTtcbiAqXG4gKiA8UmVhY3RGbG93IG5vZGVzPXtyZWMubm9kZXN9IGVkZ2VzPXtyZWMuZWRnZXN9IC8+XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dDaGFydFNwZWMsIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBFdmVudCBwYXlsb2FkIHR5cGVzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25TdGFnZUFkZGVkYC4gRmlyZXMgZm9yIGV2ZXJ5XG4gKiBzcGVjIG5vZGUgYWRkZWQgdG8gdGhlIGNoYXJ0LCBpbmNsdWRpbmcgdGhlIHNlZWQgKGFkZGVkIHZpYVxuICogYGZsb3dDaGFydCgpYCBmYWN0b3J5KSBhbmQgc3ViZmxvdyBtb3VudCBub2Rlcy4gRXhjbHVkZXMgc3ludGhldGljXG4gKiBsb29wLXJlZmVyZW5jZSBub2RlcyAodGhvc2UgY2FycnkgYGlzTG9vcFJlZmVyZW5jZTogdHJ1ZWAgb24gdGhlXG4gKiBzcGVjOyBjb25zdW1lcnMgc2VlIHRoZW0gdmlhIHRoZSBzZXBhcmF0ZSBgb25Mb29wRWRnZUFkZGVkYCBldmVudFxuICogaW5zdGVhZCBvZiBhcyBmcmVzaCBzdGFnZXMpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCB7XG4gIC8qKlxuICAgKiBTdGFibGUgaWRlbnRpZmllciBmb3IgdGhpcyBub2RlLiBBVCBFVkVOVCBGSVJFIFRJTUUgdGhpcyBpcyB0aGVcbiAgICogYnVpbGRlcidzIExPQ0FMIGZvcm0gKG5vIHN1YmZsb3cgcHJlZml4IOKAlCB0aGUgcHJlZml4IGlzIGFwcGxpZWRcbiAgICogbGF0ZXIgYnkgYF9wcmVmaXhOb2RlVHJlZWAgd2hlbiB0aGlzIGJ1aWxkZXIgaXMgbW91bnRlZCBhcyBhXG4gICAqIHN1YmZsb3cgaW50byBhIHBhcmVudCkuXG4gICAqXG4gICAqIE5vdGU6IGBzcGVjLmlkYCBpcyBhIExJVkUgcmVmZXJlbmNlLiBJZiB5b3UgcmVhZCBpdCBBRlRFUiB0aGlzXG4gICAqIGNoYXJ0IGhhcyBiZWVuIG1vdW50ZWQgYXMgYSBzdWJmbG93LCBpdCBtYXkgaGF2ZSBiZWVuIHJld3JpdHRlblxuICAgKiB0byB0aGUgRlVMTCBwcmVmaXhlZCBmb3JtLiBVc2UgYHNwbGl0U3RhZ2VJZChzcGVjLmlkKWAgZnJvbVxuICAgKiBgZm9vdHRyYWNlYCB0byBkZWNvbXBvc2UgaXQgYmFjayBpbnRvIGxvY2FsICsgc3ViZmxvd1BhdGguXG4gICAqXG4gICAqIENvcnJlbGF0aW5nIHdpdGggcnVudGltZSBldmVudHM6XG4gICAqICAgLSBTYW1lIGJ1aWxkZXIgKG5vIG1vdW50KSDihpJcbiAgICogICAgIGBldmVudC5zdGFnZUlkID09PSBwYXJzZVJ1bnRpbWVTdGFnZUlkKHJ1bnRpbWUpLnN0YWdlSWRgXG4gICAqICAgLSBUaGlzIGJ1aWxkZXIgbW91bnRlZCBhcyBzdWJmbG93IOKGkiB1c2UgYHNwbGl0U3RhZ2VJZGAgb24gdGhlXG4gICAqICAgICBwcmVmaXhlZCBmb3JtIChvciBgcGFyc2VSdW50aW1lU3RhZ2VJZGAgb24gdGhlIGZ1bGxcbiAgICogICAgIHJ1bnRpbWVTdGFnZUlkKSBiZWZvcmUgY29tcGFyaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VJZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgbGFiZWwgZm9yIHRoZSBub2RlLiAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTcGVjIG5vZGUgYHR5cGVgLiBMZXRzIHJlY29yZGVycyBicmFuY2ggb24gc3RhZ2UgdnMgZGVjaWRlciB2c1xuICAgKiAgZm9yayB2cyBzdWJmbG93IHdpdGhvdXQgcmUtZGVyaXZpbmcgZnJvbSBvdGhlciBmaWVsZHMuICovXG4gIHJlYWRvbmx5IHR5cGU6IE5vbk51bGxhYmxlPEZsb3dDaGFydFNwZWNbJ3R5cGUnXT47XG4gIC8qKiBUcnVlIGZvciBub2RlcyBhZGRlZCB2aWEgYGFkZFBhdXNhYmxlRnVuY3Rpb24oKWAg4oCUIHVzZWZ1bCBmb3JcbiAgICogIHZpc3VhbGlzZXJzIHRoYXQgd2FudCB0byBtYXJrIHN0YWdlcyB0aGF0IGNhbiBwYXVzZSBleGVjdXRpb24uICovXG4gIHJlYWRvbmx5IGlzUGF1c2FibGU/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIG5hbWVzIGRlY2xhcmVkIG9uIHRoZSBzdGFnZSBBVCBFVkVOVCBGSVJFIFRJTUUgKGBvcHRpb25zLnRhZ3NgXG4gICAqIGxhbmRzIGJlZm9yZSB0aGlzIGV2ZW50IGZpcmVzOyBhYnNlbnQgd2hlbiBub25lIOKAlCB0aGUgXCJhYnNlbnQgd2hlblxuICAgKiBlbXB0eVwiIGxhdyB0aGUgY29tbWl0IGJ1bmRsZSBrZWVwcykuIE5hbWVzIGRlY2xhcmVkIGFmdGVyd2FyZHNcbiAgICogdGhyb3VnaCB0aGUgYC50YWcoLi4uKWAgY3Vyc29yIGRvb3IgYXJyaXZlIGFzIHRoZWlyIG93blxuICAgKiB7QGxpbmsgU3RydWN0dXJlUmVjb3JkZXIub25TdGFnZVRhZ2dlZH0gZXZlbnQg4oCUIGEgcmVjb3JkZXIgdGhhdFxuICAgKiBjb3BpZXMgZmllbGRzIGhlcmUgaW5zdGVhZCBvZiBob2xkaW5nIGBzcGVjYCB3b3VsZCBvdGhlcndpc2VcbiAgICogbmV2ZXIgbGVhcm4gb2YgdGhlbSAoOS4yNC4wKS5cbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIExpdmUgcmVmZXJlbmNlIHRvIHRoZSBmdWxsIHNwZWMgbm9kZSwgZm9yIGhhbmRsZXJzIHRoYXQgd2FudFxuICAgKiAgZGV0YWlscyBiZXlvbmQgdGhlIGRpc2NyaW1pbmF0b3IgZmllbGRzIGFib3ZlLiBNVVNUIE5PVCBiZVxuICAgKiAgbXV0YXRlZCBieSB0aGUgaGFuZGxlciDigJQgcmVhZG9ubHkgaXMgdHlwZS1sZXZlbCBpbnRlbnQ7IG5vXG4gICAqICBydW50aW1lIGZyZWV6ZS4gU2VlIFwiU3BlYyBtdXRhdGlvblwiIGluIHRoZSBmaWxlIGhlYWRlciBmb3IgdGhlXG4gICAqICB0cnVzdC1tb2RlbCBjYXZlYXRzLiAqL1xuICByZWFkb25seSBzcGVjOiBGbG93Q2hhcnRTcGVjO1xufVxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vblN0YWdlVGFnZ2VkYC4gRmlyZXMgd2hlbiBuYW1lc1xuICogbGFuZCBvbiBhIHN0YWdlIEFGVEVSIGl0cyBgb25TdGFnZUFkZGVkYCBhbHJlYWR5IGZpcmVkIOKAlCB0aGVcbiAqIGAudGFnKC4uLilgIGN1cnNvciBkb29yIChgZmxvd0NoYXJ0KC4uLikuYWRkRnVuY3Rpb24oLi4uKS50YWcoJ2EnKWApLlxuICogTmFtZXMgZGVjbGFyZWQgaW4gdGhlIHNhbWUgY2FsbCBhcyB0aGUgc3RhZ2UgKGBvcHRpb25zLnRhZ3NgLFxuICogYFN1YmZsb3dNb3VudE9wdGlvbnMudGFnc2ApIHJpZGUgYFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudC50YWdzYCBhbmRcbiAqIGRvIE5PVCBmaXJlIHRoaXM6IG9uZSBkZWNsYXJhdGlvbiwgb25lIGV2ZW50LiBgdGFnc2AgaXMgdGhlIENPTVBMRVRFXG4gKiBsaXN0IG9uIHRoZSBzdGFnZSBhZnRlciB0aGUgZG9vciDigJQgdGhlIGJ1aWxkZXIgcmVmdXNlcyBhIHNlY29uZFxuICogZGVjbGFyYXRpb24gb24gdGhlIHNhbWUgc3RhZ2UsIHNvIGl0IGlzIGFsc28gdGhlIG9ubHkgb25lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZVN0YWdlVGFnZ2VkRXZlbnQge1xuICAvKiogVGhlIGJ1aWxkZXIncyBMT0NBTCBzdGFnZSBpZCAoc2VlIGBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQuc3RhZ2VJZGApLiAqL1xuICByZWFkb25seSBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIG5vZGUuICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgLyoqIEV2ZXJ5IG5hbWUgbm93IGRlY2xhcmVkIG9uIHRoZSBzdGFnZS4gKi9cbiAgcmVhZG9ubHkgdGFnczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBMaXZlIHJlZmVyZW5jZSB0byB0aGUgc3BlYyBub2RlIOKAlCBzYW1lIGNhdmVhdHMgYXMgb24gYG9uU3RhZ2VBZGRlZGAuICovXG4gIHJlYWRvbmx5IHNwZWM6IEZsb3dDaGFydFNwZWM7XG59XG5cbi8qKiBFZGdlIGtpbmRzIHRoZSBidWlsZGVyIHByb2R1Y2VzIGF0IHN0cnVjdHVyYWwgdGltZS4gTWF0Y2hlcyB0aGVcbiAqICBmb290cHJpbnRqcyBjb250cm9sLWZsb3cgdm9jYWJ1bGFyeSB1c2VkIGF0IHJ1bnRpbWUuXG4gKlxuICogIFdoeSBubyBgc3ViZmxvdy1lbnRyeWAgaGVyZTogc3ViZmxvdyBtb3VudHMgdXNlIHRoZSBsaWZlY3ljbGVcbiAqICBldmVudCBgb25TdWJmbG93TW91bnRlZGAgKG5vdCBhbiBlZGdlIGV2ZW50KS4gSWYgYSBmdXR1cmUgdXNlIGNhc2VcbiAqICBuZWVkcyB0aGUgcGFyZW504oaSc3ViZmxvdy1yb290IGVkZ2UgYXMgYSBkaXN0aW5jdCBraW5kLCBpdCdsbCBiZVxuICogIGFkZGVkIHRoZW4g4oCUIFlBR05JIG5vdyAoUGFuZWwgMywgTDcuMiByZXZpZXcpLiAqL1xuZXhwb3J0IHR5cGUgU3RydWN0dXJlRWRnZUtpbmQgPVxuICB8ICduZXh0JyAvLyBsaW5lYXIgY2hhaW46IHByZXYubmV4dCA9IGN1cnJcbiAgfCAnZm9yay1icmFuY2gnIC8vIGZvcmsgcGFyZW50IOKGkiBwYXJhbGxlbCBjaGlsZFxuICB8ICdkZWNpc2lvbi1icmFuY2gnOyAvLyBkZWNpZGVyIOKGkiBicmFuY2ggY2hpbGRcblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25FZGdlQWRkZWRgLiBGaXJlcyB3aGVuZXZlclxuICogdGhlIGJ1aWxkZXIgd2lyZXMgYW4gb3V0Z29pbmcgZWRnZSBmcm9tIG9uZSBub2RlIHRvIGFub3RoZXIuIEJvdGhcbiAqIGVuZHBvaW50cyBoYXZlIGFscmVhZHkgYmVlbiBhbm5vdW5jZWQgdmlhIGBvblN0YWdlQWRkZWRgIGJ5IHRoZVxuICogdGltZSB0aGlzIGZpcmVzLlxuICpcbiAqIExvb3AgYmFjay1lZGdlcyBoYXZlIHRoZWlyIE9XTiBldmVudCAoYG9uTG9vcEVkZ2VBZGRlZGApIHNvXG4gKiBjb25zdW1lcnMgY2FuIHRoZW1lIHRoZW0gZGlzdGluY3RseSBhbmQgc28gYnVpbGQtdGltZSBldmVudHMgc3RheVxuICogZnJlZSBvZiB0aGUgcnVudGltZS1vbmx5IGBpdGVyYXRpb25gIGZpZWxkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50IHtcbiAgcmVhZG9ubHkgZnJvbTogc3RyaW5nO1xuICByZWFkb25seSB0bzogc3RyaW5nO1xuICByZWFkb25seSBraW5kOiBTdHJ1Y3R1cmVFZGdlS2luZDtcbiAgLyoqIE9wdGlvbmFsIGh1bWFuLXJlYWRhYmxlIGxhYmVsIOKAlCB1c2VkIHRvZGF5IGZvciBkZWNpZGVyIGJyYW5jaFxuICAgKiAga2V5cyAoZS5nLiwgYCdsb3cnYCwgYCdoaWdoJ2AsIGAnaGlnaCAoZGVmYXVsdCknYCkgYW5kIHBhcmFsbGVsXG4gICAqICBicmFuY2ggaWRzLiAqL1xuICByZWFkb25seSBsYWJlbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25Mb29wRWRnZUFkZGVkYC4gRmlyZXMgd2hlblxuICogYC5sb29wVG8odGFyZ2V0KWAgaW5zdGFsbHMgYSBiYWNrLWVkZ2UuIERpc3RpbmN0IGZyb21cbiAqIGBvbkVkZ2VBZGRlZGAgc28gY29uc3VtZXJzIGNhbiB0aGVtZSBiYWNrLWVkZ2VzIGRpZmZlcmVudGx5IGFuZFxuICogYmVjYXVzZSBydW50aW1lIGBvbkxvb3BgIGNhcnJpZXMgYGl0ZXJhdGlvbjogbnVtYmVyYCB3aGljaCBoYXMgbm9cbiAqIGJ1aWxkLXRpbWUgbWVhbmluZyDigJQga2VlcGluZyB0aGUgZXZlbnRzIHNlcGFyYXRlZCBhdm9pZHMgZm9yY2luZ1xuICogYW4gYGl0ZXJhdGlvbj86IG51bWJlcmAgbGllIGludG8gdGhlIHN0cnVjdHVyYWwgc2hhcGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50IHtcbiAgcmVhZG9ubHkgZnJvbTogc3RyaW5nO1xuICByZWFkb25seSB0bzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vbkRlY2lkZXJDb21wbGV0ZWAuIEZpcmVzXG4gKiB3aGVuIGEgZGVjaWRlciAvIHNlbGVjdG9yIHN1Yi1idWlsZGVyIGNsb3NlcyB2aWEgYC5lbmQoKWAuIEJ5IHRoZVxuICogdGltZSB0aGlzIGZpcmVzIGV2ZXJ5IGJyYW5jaCBoYXMgYmVlbiBhbm5vdW5jZWQgYW5kIHRoZVxuICogYGRlZmF1bHRCcmFuY2hgIChpZiBzZXQgdmlhIGAuc2V0RGVmYXVsdCgpYCkgaXMgZmluYWwuIExldHNcbiAqIHJlY29yZGVycyB0cmVhdCB0aGUgZGVjaWRlciBhcyBuby1mdXJ0aGVyLW11dGF0aW9uIGFuZCBzbmFwc2hvdFxuICogaXRzIGJyYW5jaCBsaXN0IGFzIGZpbmFsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50IHtcbiAgLyoqIERlY2lkZXIgLyBzZWxlY3RvciBzdGFnZSBpZC4gKi9cbiAgcmVhZG9ubHkgZGVjaWRlcjogc3RyaW5nO1xuICAvKiogU3BlYyB0eXBlIChgJ2RlY2lkZXInYCB2cyBgJ3NlbGVjdG9yJ2ApIOKAlCBleHBvc2VkIHNvIGNvbnN1bWVyc1xuICAgKiAgZG9uJ3QgbmVlZCB0byBsb29rIHVwIHRoZSBvcmlnaW5hbCBgb25TdGFnZUFkZGVkYCBldmVudC4gKi9cbiAgcmVhZG9ubHkgdHlwZTogJ2RlY2lkZXInIHwgJ3NlbGVjdG9yJztcbiAgLyoqIEJyYW5jaCBtZW1iZXIgaWRzIGluIGRlY2xhcmF0aW9uIG9yZGVyLiAqL1xuICByZWFkb25seSBicmFuY2hJZHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogRGVmYXVsdCBicmFuY2ggaWQgd2hlbiBzZXQgdmlhIGAuc2V0RGVmYXVsdCgpYDsgdW5kZWZpbmVkIHdoZW5cbiAgICogIG5vIGRlZmF1bHQgaXMgY29uZmlndXJlZCAoZS5nLiwgc2VsZWN0b3JzKS4gKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEJyYW5jaD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25TdWJmbG93TW91bnRlZGAuIEZpcmVzIG9uY2VcbiAqIHBlciBzdWJmbG93IG1vdW50IChgYWRkU3ViRmxvd0NoYXJ0YCAvIGBhZGRTdWJGbG93Q2hhcnROZXh0YCBhbmRcbiAqIHRoZWlyIGxhenkgdmFyaWFudHMpLlxuICpcbiAqICoqTU9VTlQtT05MWSBzZW1hbnRpY3MqKiDigJQgdGhlIHN1YmZsb3cncyBPV04gc3RydWN0dXJlIGV2ZW50c1xuICogKGV2ZXJ5IGBvblN0YWdlQWRkZWRgIC8gYG9uRWRnZUFkZGVkYCBpbnNpZGUgdGhlIHN1YmZsb3cpIGZpcmVkXG4gKiBkdXJpbmcgdGhlIHN1YmZsb3cncyBvd24gYC5idWlsZCgpYCwgYmVmb3JlIHRoZSBtb3VudC4gUGFyZW50XG4gKiByZWNvcmRlcnMgZG8gTk9UIHJlY2VpdmUgYSByZXBsYXkuIEluc3RlYWQsIHRoaXMgZXZlbnQgZGVsaXZlcnNcbiAqIHRoZSBzdWJmbG93J3MgZnVsbCBzdHJ1Y3R1cmUgdmlhIGBzdWJmbG93U3BlY2AsIGFuZCBjb25zdW1lcnMgY2FuXG4gKiB3YWxrIGl0IHZpYSBgd2Fsa1N1YmZsb3dTcGVjYCBmcm9tIGBmb290cHJpbnRqcy90cmFjZWAuXG4gKlxuICogVGhpcyBtYXRjaGVzIGBGbG93UmVjb3JkZXIub25TdWJmbG93RW50cnlgIHNlbWFudGljcyBhdCBydW50aW1lXG4gKiAocGFyZW50cyBzZWUgdGhlIGJvdW5kYXJ5LCBub3QgYSByZXBsYXkgb2YgaW50ZXJuYWxzKSBhbmRcbiAqIHByZXNlcnZlcyB0aGUgXCJvbmUgcHVycG9zZSBwZXIgcmVjb3JkZXJcIiBjb252ZW50aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQge1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyIHRoZSBwYXJlbnQgYXNzaWduZWQgYXQgbW91bnQuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dJZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgc3ViZmxvdyBuYW1lLiAqL1xuICByZWFkb25seSBzdWJmbG93TmFtZTogc3RyaW5nO1xuICAvKiogTW91bnQgbm9kZSBpZCBpbiB0aGUgcGFyZW50J3MgY2hhcnQuICovXG4gIHJlYWRvbmx5IHJvb3RTdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBUcnVlIHdoZW4gdGhlIG1vdW50IHVzZXMgbGF6eSByZXNvbHV0aW9uIChkZWZlcnJlZCBzdWJmbG93XG4gICAqICByZXNvbHV0aW9uIHVudGlsIGV4ZWN1dGlvbikuICovXG4gIHJlYWRvbmx5IGlzTGF6eT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtb3VudGVkIHN1YmZsb3cncyBjb21wbGV0ZSBzcGVjIOKAlCB0aGUgU0FNRSBPQkpFQ1RcbiAgICogKD09PSByZWZlcmVuY2UgZXF1YWxpdHkpIHJlYWNoYWJsZSB2aWEgYHN1YmZsb3cuYnVpbGRUaW1lU3RydWN0dXJlYFxuICAgKiBmb3IgdGhlIEZsb3dDaGFydCB0aGUgY29uc3VtZXIgcGFzc2VkIHRvIGBhZGRTdWJGbG93Q2hhcnRCcmFuY2hgIC9cbiAgICogYGFkZFN1YkZsb3dDaGFydGAgLyBgYWRkU3ViRmxvd0NoYXJ0TmV4dGAuXG4gICAqXG4gICAqIFVOREVGSU5FRCBmb3IgbGF6eSBtb3VudHMgYXQgYnVpbGQgdGltZSAoYGlzTGF6eTogdHJ1ZWApIOKAlCB0aGVcbiAgICogc3ViZmxvdydzIHN0cnVjdHVyZSBoYXNuJ3QgYmVlbiByZXNvbHZlZCB5ZXQuIENvbnN1bWVycyB3YWl0aW5nIG9uXG4gICAqIGxhenkgc3ViZmxvd3MgaGFuZGxlIHRoZSBydW50aW1lIGBvblN1YmZsb3dFbnRyeWAgZXZlbnQgaW5zdGVhZC5cbiAgICpcbiAgICogSW1tdXRhYmxlIHBvc3QtYnVpbGQ7IGNvbnN1bWVycyBNVVNUIE5PVCBtdXRhdGUuXG4gICAqXG4gICAqIEBpbnRlcm5hbCBgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlYCBpcyBsaWJyYXJ5LWludGVybmFsLlxuICAgKiAgICAgICAgICAgVXNlIGB3YWxrU3ViZmxvd1NwZWNgIGZyb20gYGZvb3RwcmludGpzL3RyYWNlYCBmb3IgdGhlXG4gICAqICAgICAgICAgICBzdGFibGUgcHVibGljIGNvbnRyYWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1NwZWM/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG5cbiAgLyoqXG4gICAqIExvY2FsIG1vdW50IGlkIG9mIHRoaXMgc3ViZmxvdyB3aXRoaW4gaXRzIHBhcmVudCDigJQgZXF1YWwgdG9cbiAgICogYHN1YmZsb3dJZGAgZm9yIHRvcC1sZXZlbCBtb3VudHMgKGUuZy4gYCdhdXRoJ2ApLCBjb21wb3NlZFxuICAgKiAoYCdhdXRoL3ZlcmlmeSdgKSBmb3IgbmVzdGVkIG1vdW50cyB3aG9zZSByZWNvcmRlciBpcyBhdHRhY2hlZFxuICAgKiB0byB0aGUgZ3JhbmRwYXJlbnQuIE1hdGNoZXMgcnVudGltZSBgdHJhdmVyc2FsQ29udGV4dC5zdWJmbG93UGF0aGBcbiAgICogc2VtYW50aWNzIOKAlCBORVZFUiBwcmVmaXhlZCB3aXRoIGBfX3Jvb3RfXy9gLlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg6IHN0cmluZztcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTdHJ1Y3R1cmVSZWNvcmRlciBpbnRlcmZhY2Vcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFBsdWdnYWJsZSBvYnNlcnZlciBmb3IgQlVJTEQtVElNRSBjaGFydCBjb25zdHJ1Y3Rpb24gZXZlbnRzLlxuICpcbiAqIEFsbCBtZXRob2RzIGFyZSBvcHRpb25hbCDigJQgaW1wbGVtZW50IG9ubHkgdGhlIGhvb2tzIHlvdSBuZWVkLlxuICogSGFuZGxlcnMgZmlyZSBTWU5DSFJPTk9VU0xZIGR1cmluZyBidWlsZGVyIG9wZXJhdGlvbnMgYW5kIGAuYnVpbGQoKWAuXG4gKiBBIHRocm93aW5nIGhhbmRsZXIgaXMgY2F1Z2h0IChzZWUgXCJFcnJvciBpc29sYXRpb25cIiBpbiB0aGUgZmlsZVxuICogaGVhZGVyKTsgc3Vic2VxdWVudCBkaXNwYXRjaCBjb250aW51ZXMuXG4gKlxuICogTGlmZWN5Y2xlOiBlYWNoIGBTdHJ1Y3R1cmVSZWNvcmRlcmAgaW5zdGFuY2UgaXMgcmVnaXN0ZXJlZCB2aWFcbiAqIEVJVEhFUiB0aGUgYGZsb3dDaGFydCgpYCBvcHRpb25zIGJhZyAoYHsgc3RydWN0dXJlUmVjb3JkZXJzOiBbcmVjXSB9YClcbiAqIE9SIHRoZSBmbHVlbnQgYC5hdHRhY2hTdHJ1Y3R1cmVSZWNvcmRlcihyZWMpYCBjaGFpbiDigJQgc2VlIHRoZSBmaWxlXG4gKiBoZWFkZXIgZm9yIHRoZSB0cmFkZS1vZmZzLiBSZWdpc3RyYXRpb24gYWZ0ZXIgYC5idWlsZCgpYCBpc1xuICogcmVqZWN0ZWQgKGNoYXJ0IGlzIHNlYWxlZCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlUmVjb3JkZXIge1xuICAvKipcbiAgICogU3RhYmxlIGlkZW50aWZpZXIg4oCUIHVzZWQgYnkgdGhlIGRpc3BhdGNoZXIgdG8gc2NvcGUgZXJyb3JcbiAgICogbWVzc2FnZXMgYW5kIHRvIHN1cHBvcnQgYGRldGFjaChpZClgIGxvb2t1cC5cbiAgICpcbiAgICogQ29udmVudGlvbiAobWF0Y2hlcyBgRmxvd1JlY29yZGVyLmlkYCBmcm9tIENMQVVERS5tZCk6XG4gICAqICAgLSBkb21haW4tcHJlZml4ZWQga2ViYWItY2FzZSAoYCdsZW5zLXN0cnVjdHVyZSdgLFxuICAgKiAgICAgYCdhZ2VudGZvb3RwcmludC1jb21wb3NpdGlvbidgLCBgJ3RyYWNlLWV4cGxhaW5hYmxlJ2ApXG4gICAqICAgLSBzYW1lIGlkIOKGkiBtdWx0aXBsZSByZWNvcmRlcnMgY29leGlzdCAoTk9UIGRlZHVwbGljYXRlZCBieVxuICAgKiAgICAgaWQ7IHRoZSBkaXNwYXRjaGVyIGZpcmVzIGV2ZXJ5IGF0dGFjaGVkIHJlY29yZGVyIHJlZ2FyZGxlc3MpXG4gICAqICAgLSBgZGV0YWNoKGlkKWAgcmVtb3ZlcyBFVkVSWSByZWNvcmRlciB3aXRoIHRoYXQgaWQg4oCUIGJlXG4gICAqICAgICBpbnRlbnRpb25hbCBhYm91dCByZXVzZSBpZiB5b3UgcmVseSBvbiBzZWxlY3RpdmUgZGV0YWNoXG4gICAqXG4gICAqIENob29zZSBhIHN0YWJsZSBpZCBhdCBtb2R1bGUgbG9hZCBhbmQgZG9uJ3QgcmFuZG9taXNlIGl0IGFjcm9zc1xuICAgKiBydW5zIOKAlCBpdCBsYW5kcyBpbiBgU3RydWN0dXJlQnVpbGRFcnJvci5yZWNvcmRlcklkYCBzbyBkZWJ1Z1xuICAgKiBvdXRwdXQgaXMgZ3JlcHBhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICBvblN0YWdlQWRkZWQ/KGV2ZW50OiBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQpOiB2b2lkO1xuICAvKiogTmFtZXMgdGhhdCBsYW5kZWQgb24gYSBzdGFnZSBhZnRlciBpdHMgYG9uU3RhZ2VBZGRlZGAgKHRoZSBgLnRhZygpYCBkb29yKS4gKi9cbiAgb25TdGFnZVRhZ2dlZD8oZXZlbnQ6IFN0cnVjdHVyZVN0YWdlVGFnZ2VkRXZlbnQpOiB2b2lkO1xuICBvbkVkZ2VBZGRlZD8oZXZlbnQ6IFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50KTogdm9pZDtcbiAgb25Mb29wRWRnZUFkZGVkPyhldmVudDogU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50KTogdm9pZDtcbiAgb25EZWNpZGVyQ29tcGxldGU/KGV2ZW50OiBTdHJ1Y3R1cmVEZWNpZGVyQ29tcGxldGVFdmVudCk6IHZvaWQ7XG4gIG9uU3ViZmxvd01vdW50ZWQ/KGV2ZW50OiBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50KTogdm9pZDtcbn1cbiJdfQ==
|
|
@@ -16,7 +16,6 @@
|
|
|
16
16
|
* module — see the mapping notes in `policies.ts`.
|
|
17
17
|
*/
|
|
18
18
|
export { hasCircularReference } from './circular.js';
|
|
19
|
-
export { type ArrayWalk, deepFreeze } from './freeze.js';
|
|
20
19
|
export { invokeRecorderHook } from './invokeHook.js';
|
|
21
20
|
export type { RetentionPolicy } from './policies.js';
|
|
22
21
|
export type { ReadSummaryMarker, SummaryValueType, WriteSummaryMarker } from './summarize.js';
|
|
@@ -17,7 +17,6 @@
|
|
|
17
17
|
* module — see the mapping notes in `policies.ts`.
|
|
18
18
|
*/
|
|
19
19
|
export { hasCircularReference } from './circular.js';
|
|
20
|
-
export { deepFreeze } from './freeze.js';
|
|
21
20
|
export { invokeRecorderHook } from './invokeHook.js';
|
|
22
21
|
export { READ_PREVIEW_LENGTH, summarizeReadValue, summarizeValue, summarizeWriteValue, SUMMARY_PREVIEW_LENGTH, } from './summarize.js';
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEJBQTBCO0FBQzFCOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBRUgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR3JELE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsc0JBQXNCLEdBQ3ZCLE1BQU0sZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuLyoqXG4gKiBjYXB0dXJlLyDigJQgU2hhcmVkIHZhbHVlLWNhcHR1cmUgLyByZXRlbnRpb24gcHJpbWl0aXZlcyAoemVybyBkZXBzLCBsZWFmXG4gKiBtb2R1bGUg4oCUIGBtZW1vcnkvYCBpbXBvcnRzIGl0LCBuZXZlciB0aGUgcmV2ZXJzZSkuXG4gKlxuICogT25lIGhvbWUgZm9yIFwid2hhdCBkbyB3ZSBrZWVwIGFib3V0IGEgdHJhY2tlZCBvcGVyYXRpb24ncyB2YWx1ZT9cIjpcbiAqICAgLSBgUmV0ZW50aW9uUG9saWN5YCDigJQgdGhlIGAnZnVsbCcgfCAnc3VtbWFyeScgfCAnb2ZmJ2AgZmFtaWx5IGJlaGluZCB0aGVcbiAqICAgICAjMTQgYHJlYWRUcmFja2luZ2AgYW5kICMxM2MtQSBgd3JpdGVUcmFja2luZ2AgZGlhbHMuXG4gKiAgIC0gYHN1bW1hcml6ZVJlYWRWYWx1ZWAgLyBgc3VtbWFyaXplV3JpdGVWYWx1ZWAg4oCUIHRoZSBwYXJhbWV0ZXJpemVkXG4gKiAgICAgc3VtbWFyeS1tYXJrZXIgYnVpbGRlcnMgc2hhcmluZyBvbmUgY2xhc3NpZmljYXRpb24gcGF0aC5cbiAqICAgLSBgc3VtbWFyaXplVmFsdWVgIOKAlCB0aGUgaHVtYW4tcmVhZGFibGUgbmFycmF0aXZlIG9uZS1saW5lci5cbiAqICAgLSBgaGFzQ2lyY3VsYXJSZWZlcmVuY2VgIOKAlCB0aGUgZGV2LW1vZGUgY3ljbGUgcHJvYmUgKGEgbGVhZikuXG4gKiAgIC0gYGludm9rZVJlY29yZGVySG9va2Ag4oCUIHRoZSBvbmUgXCJsb29rIHVwIHRoZSBob29rLCBiaW5kIGB0aGlzYCwgY2FsbCBpdFwiXG4gKiAgICAgcHJpbWl0aXZlIGJvdGggcmVjb3JkZXIgZGVsaXZlcnkgdGllcnMgc2hhcmUgKGEgbGVhZikuXG4gKlxuICogUkZDLTAwMSAoZGVmZXJyZWQgb2JzZXJ2ZXIgZGVsaXZlcnkpIGJ1aWxkcyBpdHMgY2FwdHVyZSB0aWVyIG9uIHRoaXNcbiAqIG1vZHVsZSDigJQgc2VlIHRoZSBtYXBwaW5nIG5vdGVzIGluIGBwb2xpY2llcy50c2AuXG4gKi9cblxuZXhwb3J0IHsgaGFzQ2lyY3VsYXJSZWZlcmVuY2UgfSBmcm9tICcuL2NpcmN1bGFyLmpzJztcbmV4cG9ydCB7IGludm9rZVJlY29yZGVySG9vayB9IGZyb20gJy4vaW52b2tlSG9vay5qcyc7XG5leHBvcnQgdHlwZSB7IFJldGVudGlvblBvbGljeSB9IGZyb20gJy4vcG9saWNpZXMuanMnO1xuZXhwb3J0IHR5cGUgeyBSZWFkU3VtbWFyeU1hcmtlciwgU3VtbWFyeVZhbHVlVHlwZSwgV3JpdGVTdW1tYXJ5TWFya2VyIH0gZnJvbSAnLi9zdW1tYXJpemUuanMnO1xuZXhwb3J0IHtcbiAgUkVBRF9QUkVWSUVXX0xFTkdUSCxcbiAgc3VtbWFyaXplUmVhZFZhbHVlLFxuICBzdW1tYXJpemVWYWx1ZSxcbiAgc3VtbWFyaXplV3JpdGVWYWx1ZSxcbiAgU1VNTUFSWV9QUkVWSUVXX0xFTkdUSCxcbn0gZnJvbSAnLi9zdW1tYXJpemUuanMnO1xuIl19
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
* `child.branchId ?? child.id`. The input is never mutated (each node is a
|
|
23
23
|
* shallow clone).
|
|
24
24
|
*/
|
|
25
|
-
import { joinPath } from '
|
|
25
|
+
import { joinPath } from 'foottrace';
|
|
26
26
|
export function prefixNodeTree(node, prefix) {
|
|
27
27
|
if (!node)
|
|
28
28
|
return node;
|
|
@@ -37,4 +37,4 @@ export function prefixNodeTree(node, prefix) {
|
|
|
37
37
|
clone.children = clone.children.map((c) => prefixNodeTree(c, prefix));
|
|
38
38
|
return clone;
|
|
39
39
|
}
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZml4Tm9kZVRyZWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9ncmFwaC9wcmVmaXhOb2RlVHJlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBSXJDLE1BQU0sVUFBVSxjQUFjLENBQWdDLElBQU8sRUFBRSxNQUFjO0lBQ25GLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDdkIsTUFBTSxLQUFLLEdBQU0sRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO0lBQzdCLEtBQUssQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekMsS0FBSyxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxJQUFJLEtBQUssQ0FBQyxTQUFTO1FBQUUsS0FBSyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6RSxJQUFJLEtBQUssQ0FBQyxJQUFJO1FBQUUsS0FBSyxDQUFDLElBQUksR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoRSxJQUFJLEtBQUssQ0FBQyxRQUFRO1FBQUUsS0FBSyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzFGLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcHJlZml4Tm9kZVRyZWUg4oCUIHRoZSBPTkUgc3ViZmxvdy1pZCBwcmVmaXhlciAoRjcsIDkuMzcuMCkuXG4gKlxuICogQSBtb3VudGVkIHN1YmZsb3cncyBub2RlIHRyZWUgaXMgcmUtYWRkcmVzc2VkIHVuZGVyIGl0cyBtb3VudDogZXZlcnkgYG5hbWVgLFxuICogYGlkYCBhbmQgbmVzdGVkIGBzdWJmbG93SWRgIGdhaW5zIGA8cHJlZml4Pi9gLiBUaGUgYnVpbGRlciBkb2VzIGl0IGF0IE1PVU5UXG4gKiB0aW1lIChgRmxvd0NoYXJ0QnVpbGRlciDCtyBfcHJlZml4Tm9kZVRyZWVgKTsgdGhlIHRyYXZlcnNlciBhdCBSVU4gdGltZSAobGF6eVxuICogc3ViZmxvd3MsIGFuZCB0aGUgZ2VuZXJhdGVkIGJyYW5jaGVzIG9mIGBhZGRQYXJhbGxlbEZvckVhY2hgKS4gQm90aCBjYWxsXG4gKiB0aGlzIGZ1bmN0aW9uLCBzbyBhIGNoYXJ0IGNvbWVzIG91dCBpZGVudGljYWwgZWl0aGVyIHdheSDigJQgdW50aWwgOS4zNi4wIHRoZXlcbiAqIHdlcmUgdHdvIGJ5dGUtdHdpbiBjb3BpZXMsIHBpbm5lZCBhZ2FpbnN0IGRyaWZ0IGJ5XG4gKiBgdGVzdC9saWIvZW5naW5lL2JyYW5jaC1zZWdtZW50LXByZWZpeGVyLWVxdWl2YWxlbmNlLnRlc3QudHNgLCB3aGljaCBub3dcbiAqIGd1YXJkcyB0aGUgb25lIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIEdlbmVyYXRlZCBicmFuY2ggc2VnbWVudHMgKGA8c3RhZ2VJZD5+PGluZGV4PmAsIHNlZSBgaWRzL2JyYW5jaFNlZ21lbnQudHNgKVxuICogcmlkZSB0aGlzIGV4YWN0IHBhdGggd2l0aCBubyBzcGVjaWFsIGNhc2U6IGEgc2VnbWVudCBpcyBqdXN0IGEgcHJlZml4LCBzbyBhXG4gKiBicmFuY2gncyBpbm5lciBpZHMgYmVjb21lIGA8c2VnbWVudD4vPGlkPmAgYW5kIGl0cyBzdGFnZXMgYWRkcmVzcyBhc1xuICogYDxzZWdtZW50Pi88aWQ+IzxuPmAuXG4gKlxuICogTmV2ZXIgcmVmdXNlczogdGhlIGlkcyBpdCB3cml0ZXMgY2FycnkgYC9gIG9uIHB1cnBvc2UuIFRoZSByZWZ1c2FsIG9mXG4gKiByZXNlcnZlZCBjaGFyYWN0ZXJzIGlzIHRoZSBidWlsZGVyJ3MsIGF0IGl0cyBpZCBkb29ycyAoYHJlZnVzZVJlc2VydmVkSWRgKS5cbiAqXG4gKiBgYnJhbmNoSWRgIGlzIGxlZnQgVU5QUkVGSVhFRCDigJQgZGVjaWRlci9zZWxlY3RvciBtYXRjaGluZyByZWFkc1xuICogYGNoaWxkLmJyYW5jaElkID8/IGNoaWxkLmlkYC4gVGhlIGlucHV0IGlzIG5ldmVyIG11dGF0ZWQgKGVhY2ggbm9kZSBpcyBhXG4gKiBzaGFsbG93IGNsb25lKS5cbiAqL1xuXG5pbXBvcnQgeyBqb2luUGF0aCB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VOb2RlIH0gZnJvbSAnLi9TdGFnZU5vZGUuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4Tm9kZVRyZWU8TiBleHRlbmRzIFN0YWdlTm9kZTxhbnksIGFueT4+KG5vZGU6IE4sIHByZWZpeDogc3RyaW5nKTogTiB7XG4gIGlmICghbm9kZSkgcmV0dXJuIG5vZGU7XG4gIGNvbnN0IGNsb25lOiBOID0geyAuLi5ub2RlIH07XG4gIGNsb25lLm5hbWUgPSBqb2luUGF0aChwcmVmaXgsIG5vZGUubmFtZSk7XG4gIGNsb25lLmlkID0gam9pblBhdGgocHJlZml4LCBub2RlLmlkKTtcbiAgaWYgKGNsb25lLnN1YmZsb3dJZCkgY2xvbmUuc3ViZmxvd0lkID0gam9pblBhdGgocHJlZml4LCBjbG9uZS5zdWJmbG93SWQpO1xuICBpZiAoY2xvbmUubmV4dCkgY2xvbmUubmV4dCA9IHByZWZpeE5vZGVUcmVlKGNsb25lLm5leHQsIHByZWZpeCk7XG4gIGlmIChjbG9uZS5jaGlsZHJlbikgY2xvbmUuY2hpbGRyZW4gPSBjbG9uZS5jaGlsZHJlbi5tYXAoKGMpID0+IHByZWZpeE5vZGVUcmVlKGMsIHByZWZpeCkpO1xuICByZXR1cm4gY2xvbmU7XG59XG4iXX0=
|
|
@@ -156,9 +156,9 @@ export declare class ResumeEntry<TOut = any, TScope = any> {
|
|
|
156
156
|
}): ResumeEntry<TOut, TScope>;
|
|
157
157
|
/**
|
|
158
158
|
* A seed-only entry: each capture seeds the FIRST entry into its subflow,
|
|
159
|
-
* which then starts at its own root.
|
|
160
|
-
*
|
|
161
|
-
*
|
|
159
|
+
* which then starts at its own root. Pass it explicitly as `resume` to
|
|
160
|
+
* TraverserOptions or HandlerDeps — the same one-shot law, without a
|
|
161
|
+
* stand-in or a path. Prefer `plan` when resuming a checkpoint.
|
|
162
162
|
*/
|
|
163
163
|
static fromCaptures<TOut, TScope>(captures: Record<string, Record<string, unknown>>): ResumeEntry<TOut, TScope>;
|
|
164
164
|
/**
|
|
@@ -171,9 +171,9 @@ export class ResumeEntry {
|
|
|
171
171
|
}
|
|
172
172
|
/**
|
|
173
173
|
* A seed-only entry: each capture seeds the FIRST entry into its subflow,
|
|
174
|
-
* which then starts at its own root.
|
|
175
|
-
*
|
|
176
|
-
*
|
|
174
|
+
* which then starts at its own root. Pass it explicitly as `resume` to
|
|
175
|
+
* TraverserOptions or HandlerDeps — the same one-shot law, without a
|
|
176
|
+
* stand-in or a path. Prefer `plan` when resuming a checkpoint.
|
|
177
177
|
*/
|
|
178
178
|
static fromCaptures(captures) {
|
|
179
179
|
return new ResumeEntry(undefined, Object.entries(captures).map(([subflowId, seed]) => ({ subflowId, seed })));
|
|
@@ -446,4 +446,4 @@ function walksToItsStage(chart, subflows, fanOutGraph, pause, level) {
|
|
|
446
446
|
function ownEntry(record, key) {
|
|
447
447
|
return record && Object.prototype.hasOwnProperty.call(record, key) ? record[key] : undefined;
|
|
448
448
|
}
|
|
449
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzdW1lRW50cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9oYW5kbGVycy9SZXN1bWVFbnRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4REc7QUFFSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUE4Q3RFLE1BQU0sT0FBTyxXQUFXO0lBQ3RCOzs7OztPQUtHO0lBQ00sS0FBSyxDQUFzQztJQUNwRCw2RkFBNkY7SUFDcEYsa0JBQWtCLENBQXFDO0lBQ2hFOzs7Ozs7T0FNRztJQUNNLGtCQUFrQixDQUFxQjtJQUNoRCxpRkFBaUY7SUFDaEUsT0FBTyxDQUF1QztJQUUvRCxZQUNFLEtBQTBDLEVBQzFDLElBQXdDLEVBQ3hDLGtCQUEyQyxFQUMzQyxrQkFBMkI7UUFFM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBQzdDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUM3QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztPQWlCRztJQUNILE1BQU0sQ0FBQyxJQUFJLENBQWUsSUFPekI7UUFDQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8s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O1FBQ3RELElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDM0UsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUM5QixLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztJQUMxQixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssU0FBUyxDQUFDO0FBQy9ELENBQUM7QUFFRCxtR0FBbUc7QUFDbkcsU0FBUyxRQUFRLENBQUksTUFBcUMsRUFBRSxHQUFXO0lBQ3JFLE9BQU8sTUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQy9GLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlc3VtZUVudHJ5IOKAlCB0aGUgcmVzdW1lJ3MgT05FLVNIT1QgcmUtZW50cnkgKE0yLCBwYXVzZS9yZXN1bWUpLlxuICpcbiAqIEEgcmVzdW1lIGhhcyB0byBnZXQgYmFjayB0byBhIHN0YWdlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGFydC4gSXQgZG9lcyB0aGF0XG4gKiB3aXRoIGEgc21hbGwgc3ludGhldGljIHN0cnVjdHVyZTogYSBzdGFuZC1pbiBmb3IgdGhlIHBhdXNlZCBzdGFnZSAodGhlXG4gKiBzdGFnZSdzIG93biBub2RlIHdpdGggaXRzIGZ1bmN0aW9uIHN3YXBwZWQgZm9yIHRoZSByZXN1bWUgaGFsZiDigJQgb3IsIGZvciBhblxuICogYGludGVycnVwdCgpYCBwYXVzZSwgZm9yIGl0cyBvd24gZnVuY3Rpb24gd2l0aCB0aGUgYW5zd2VyIGRlcG9zaXRlZCksIGFuZCxcbiAqIGZvciBhIHBhdXNlIGluc2lkZSBzdWJmbG93cywgdGhlIGNoZWNrcG9pbnQncyBjYXB0dXJlIG9mIGVhY2ggc3ViZmxvdydzXG4gKiBzdGF0ZSBvbiB0aGUgd2F5IGRvd24uXG4gKlxuICogVEhFIExBVzogdGhhdCBzdHJ1Y3R1cmUgaXMgdXNlZCBFWEFDVExZIE9OQ0UsIGZvciB0aGUgcmUtZW50cnkuIFRoZSBzdGFuZC1pblxuICogaXMgd2hlcmUgdGhlIHJlc3VtZWQgdHJhdmVyc2FsIFNUQVJUUyAob3Igd2hlcmUgdGhlIGxlYWYgc3ViZmxvdydzIHRyYXZlcnNhbFxuICogc3RhcnRzKSDigJQgaXQgaXMgbmV2ZXIgYSBub2RlIGFueSBpZCBjYW4gcmVzb2x2ZSB0by4gRWFjaCBzdWJmbG93IG9uIHRoZSBwYXVzZVxuICogcGF0aCB0YWtlcyBpdHMgc2VlZCBhbmQgaXRzIGVudHJ5IHBvaW50IG9uIGl0cyBGSVJTVCBlbnRyeSBhbmQgbmV2ZXIgYWdhaW4uXG4gKiBBZnRlciB0aGF0IHRoZSBydW4gYmVsb25ncyB0byB0aGUgcmVhbCBjaGFydDogZXZlcnkgbG9vcCB0YXJnZXQsIGV2ZXJ5IGxhdGVyXG4gKiBzdWJmbG93IGVudHJ5IChyZWFsIHJvb3QsIGlucHV0TWFwcGVyIHJ1bnMpLCBldmVyeSByZS12aXNpdCBvZiB0aGUgcGF1c2VkXG4gKiBzdGFnZSAod2hpY2ggcGF1c2VzIGFnYWluKSByZXNvbHZlcyBhZ2FpbnN0IHRoZSBjaGFydCBhcyBidWlsdC5cbiAqXG4gKiBPTkUgUlVMRSBBVCBFVkVSWSBMRVZFTCDigJQgd2hhdCBydW5zIGFmdGVyIHRoZSBlbnRyeS4gT24gdGhlIG9yaWdpbmFsIHJ1bixcbiAqIHdoYXRldmVyIERJU1BBVENIRUQgdGhlIHBhdXNlZCBzdGFnZSAob3IgdGhlIG1vdW50IG9mIHRoZSBuZXh0IHN1YmZsb3cgb25cbiAqIHRoZSBwYXRoKSDigJQgYSBkZWNpZGVyLCBhIHNlbGVjdG9yLCBhIGZvcmsg4oCUIHJhbiBpdHMgb3duIGNvbnRpbnVhdGlvbiBvbmNlXG4gKiB0aGF0IGNoaWxkJ3MgY2hhaW4gZW5kZWQ6IHRoZSBkZWNpZGVyJ3MgYG5leHRgLCB0aGUgZm9yaydzIGpvaW4uIEEgcmVzdW1lXG4gKiBlbnRlcnMgQVQgdGhlIGNoaWxkLCBzbyB0aGF0IGNvbnRpbnVhdGlvbiBtdXN0IGJlIGNhcnJpZWQ6IHRoZSBlbnRyeSBpc1xuICogdGhlIGNoaWxkIHdpdGggdGhlIGVuY2xvc2luZyBkaXNwYXRjaGVyJ3MgY29udGludWF0aW9uIGF0dGFjaGVkIGF0IHRoZSBlbmRcbiAqIG9mIGl0cyBvd24gY2hhaW4gKGB7IC4uLmNoaWxkLCBuZXh0OiBkaXNwYXRjaGVyLm5leHQgfWAgZm9yIGEgY2hhcnQgdGhlXG4gKiBidWlsZGVyIG1hZGUpLiBJdCBpcyByZWFkIGZyb20gdGhlIENIQVJULCBsZXZlbCBieSBsZXZlbCDigJQgbmV2ZXIgZnJvbSB0aGVcbiAqIGNoZWNrcG9pbnQsIHNvIGFuIGVkaXRlZCBjaGVja3BvaW50IGNhbm5vdCByZWRpcmVjdCBhIHJ1biDigJQgYW5kIGl0IGxhbmRzXG4gKiBhdCB0aGUgbGV2ZWwgaXQgYmVsb25ncyB0bzogYSB0b3AtbGV2ZWwgZGVjaWRlcidzIGBuZXh0YCBydW5zIGF0IHRoZSB0b3BcbiAqIGxldmVsLCBhZnRlciB0aGUgc3ViZmxvdydzIG91dHB1dE1hcHBlciwgbm90IGluc2lkZSB0aGUgc3ViZmxvdy5cbiAqXG4gKiBQQVJBTExFTCBTSUJMSU5HUyBUSEFUIFBBVVNFRCBUT08gKDkuMjguMCkuIFdoZW4gdHdvIGNoaWxkcmVuIG9mIG9uZVxuICogZmFuLW91dCBwYXVzZWQsIHRoZSBjaGVja3BvaW50IGFza3MgdGhlIGZpcnN0IGFuZCBjYXJyaWVzIHRoZSBvdGhlcnNcbiAqIChgRmxvd2NoYXJ0Q2hlY2twb2ludC5wZW5kaW5nUGF1c2VzYCkuIEF0IHRoYXQgZmFuLW91dCdzIGxldmVsIHRoZSBlbnRyeSBpc1xuICogdGhlIGNoaWxkJ3Mgb3duIGNoYWluIG9ubHkg4oCUIG5vIGpvaW4g4oCUIGFuZCBvbmNlIGl0IGVuZHMsIHRoZSBuZXh0IHNpYmxpbmcnc1xuICogcGF1c2UgaXMgcmFpc2VkIGFnYWluIGFzIGl0IHdhcyAoaXRzIHF1ZXN0aW9uLCBpdHMgY2FwdHVyZWQgc3RhdGUpLCB3aXRob3V0XG4gKiByZS1ydW5uaW5nIGFueXRoaW5nLiBUaGUgam9pbiBydW5zIG9ubHkgd2hlbiB0aGUgbGFzdCBzaWJsaW5nIGlzIHJlc3VtZWQuXG4gKlxuICogQmVmb3JlIDkuMjguMCB0aGUgc3RydWN0dXJlIHN0YXllZCBpbiBmb3JjZSBmb3IgdGhlIHdob2xlIHJlc3VtZWQgcnVuIOKAlCB0aGVcbiAqIHRyYXZlcnNhbCB3YXMgUk9PVEVEIGF0IHRoZSBzdGFuZC1pbiAoc28gYSBsb29wIGJhY2sgdG8gdGhlIHBhdXNlZCBpZCByZS1yYW5cbiAqIHRoZSByZXN1bWUgaGFsZiwgYW5kIGEgbG9vcCB0YXJnZXQgdXBzdHJlYW0gb2YgdGhlIHJlc3VtZSBwb2ludCB3YXNcbiAqIHVucmVhY2hhYmxlOiBvbmUgc3RhZ2UgcmFuLCB0aGVuIHRoZSBydW4gZW5kZWQgc2lsZW50bHkpLCBhbmQgdGhlIGxlYWZcbiAqIHN1YmZsb3cncyByb290IHdhcyBTV0FQUEVEIGZvciB0aGUgc3RhbmQtaW4gaW4gdGhlIHN1YmZsb3cgZGljdGlvbmFyeSAoc28gYVxuICogbGF0ZXIgZW50cnkgaW50byBpdCB3b3VsZCByZS1ydW4gdGhlIHJlc3VtZSBoYWxmIG9uIGEgc3RhbGUgc2VlZCkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIFdoYXQgRmxvd0NoYXJ0RXhlY3V0b3IucmVzdW1lKCkgYnVpbGRzIGZvciBhIHBhdXNlIGF0ICdzZi1hL3NmLWIvYXNrJ1xuICogLy8gKHN1YmZsb3dQYXRoIFsnc2YtYScsICdzZi1hL3NmLWInXSksICdzZi1hL3NmLWInIG1vdW50ZWQgYXMgYSBkZWNpZGVyXG4gKiAvLyBicmFuY2ggaW5zaWRlIHNmLWEgd2hvc2UgZGVjaWRlciBjb250aW51ZXMgdG8gJ3NmLWEvYWZ0ZXInOlxuICogY29uc3QgZW50cnkgPSBSZXN1bWVFbnRyeS5wbGFuKHsgcm9vdCwgc3ViZmxvd3MsIHBhdGgsIGNhcHR1cmVzLCBzdGFuZEluIH0pO1xuICogZW50cnkuc3RhcnQ7ICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHRvcC1sZXZlbCBtb3VudCBvZiAnc2YtYSdcbiAqIGVudHJ5LmVudGVyU3ViZmxvdygnc2YtYScpOyAgICAgIC8vIHsgc2VlZDogc2YtYSdzIGNhcHR1cmUsIGVudHJ5OiB7IC4uLm1vdW50IG9mICdzZi1hL3NmLWInLCBuZXh0OiBzZi1hL2FmdGVyIH0gfVxuICogZW50cnkuZW50ZXJTdWJmbG93KCdzZi1hL3NmLWInKTsgLy8geyBzZWVkOiBzZi1iJ3MgY2FwdHVyZSwgZW50cnk6IHRoZSBzdGFuZC1pbiB9XG4gKiBlbnRyeS5lbnRlclN1YmZsb3coJ3NmLWEvc2YtYicpOyAvLyB1bmRlZmluZWQg4oCUIGEgbGF0ZXIgZW50cnkgaXMgYW4gb3JkaW5hcnkgb25lXG4gKiBgYGBcbiAqXG4gKiBBIHBhdXNlIHR3byAob3IgbW9yZSkgc3ViZmxvd3MgZGVlcCB0aGVyZWZvcmUgcmUtZW50ZXJzIGVhY2ggb3V0ZXIgc3ViZmxvd1xuICogQVQgdGhlIG1vdW50IG9mIHRoZSBuZXh0IG9uZSDigJQgdGhlIG91dGVyIHN1YmZsb3cncyBzdGFnZXMgYmVmb3JlIHRoYXQgbW91bnRcbiAqIGRvIG5vdCBydW4gYWdhaW4gKHRoZXkgZGlkIGJlZm9yZSA5LjI4LjApLiBUaGUgb25lIGV4Y2VwdGlvbiBpcyBhIGRlZ3JhZGVkXG4gKiBjaGVja3BvaW50IG1pc3NpbmcgYW4gb3V0ZXIgc3ViZmxvdydzIGNhcHR1cmU6IHRoYXQgc3ViZmxvdyByZS1ydW5zIGZyb20gaXRzXG4gKiByb290IHdpdGggaXRzIGlucHV0TWFwcGVyIChpdHMgZWFybGllciBzdGFnZXMgcmVjb21wdXRlIHdoYXQgdGhlIGNhcHR1cmVcbiAqIHdvdWxkIGhhdmUgaGVsZCksIGV4YWN0bHkgYXMgOS4yNy4wIGRpZC5cbiAqL1xuXG5pbXBvcnQgeyBkZWNvZGVQZW5kaW5nUGF1c2VzIH0gZnJvbSAnLi4vLi4vcGF1c2UvcmVjb3JkLmpzJztcbmltcG9ydCB0eXBlIHsgUGVuZGluZ1BhdXNlIH0gZnJvbSAnLi4vLi4vcGF1c2UvdHlwZXMuanMnO1xuaW1wb3J0IHsgaXNQYXVzZWRFeGVjdXRpb24sIFBhdXNlU2lnbmFsIH0gZnJvbSAnLi4vLi4vcGF1c2UvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZU5vZGUgfSBmcm9tICcuLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuXG4vKipcbiAqIEEgcGFyYWxsZWwgc2libGluZydzIHBhdXNlLCBxdWV1ZWQgYXQgdGhlIGxldmVsIG9mIGl0cyBmYW4tb3V0OiByYWlzZWRcbiAqIGFnYWluIHRoZXJlIG9uY2UgdGhlIHJlc3VtZWQgY2hpbGQncyBjaGFpbiBlbmRzIChzZWUge0BsaW5rIHJhaXNlUXVldWVkUGF1c2V9KS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWV1ZWRQYXVzZSB7XG4gIC8qKiBUaGUgc2libGluZydzIHBhdXNlIGFzIHRoZSBjaGVja3BvaW50IGNhcnJpZXMgaXQg4oCUIGl0cyBwYXRoIGZyb20gdGhlIHRvcC4gKi9cbiAgcmVhZG9ubHkgcGF1c2U6IFBlbmRpbmdQYXVzZTtcbiAgLyoqIEhvdyBtYW55IHN1YmZsb3dzIGRlZXAgdGhlIGZhbi1vdXQgc2l0cyAoMCA9IHRoZSB0b3AgbGV2ZWwpLiAqL1xuICByZWFkb25seSBsZXZlbDogbnVtYmVyO1xuICAvKiogVGhlIHNpYmxpbmcncyBwYXVzZWQgc3RhZ2UncyBuYW1lLCBmb3IgdGhlIGBvblBhdXNlYCBldmVudC4gKi9cbiAgcmVhZG9ubHkgc3RhZ2VOYW1lOiBzdHJpbmc7XG59XG5cbi8qKiBPbmUgc3ViZmxvdyBib3VuZGFyeSBvbiB0aGUgd2F5IGJhY2sgdG8gYSBwYXVzZWQgc3RhZ2UuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3VtZUhvcDxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgLyoqIFRoZSBwYXRoLXByZWZpeGVkIHN1YmZsb3cgaWQgKGEgYEZsb3djaGFydENoZWNrcG9pbnQuc3ViZmxvd1BhdGhgIGVudHJ5KS4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd0lkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc3ViZmxvdydzIHN0YXRlIGF0IHRoZSBwYXVzZSAoYGNoZWNrcG9pbnQuc3ViZmxvd1N0YXRlc1tzdWJmbG93SWRdYCkuXG4gICAqIFNlZWRzIHRoZSBuZXN0ZWQgcnVudGltZSBJTlNURUFEIG9mIHRoZSBpbnB1dE1hcHBlcidzIHZhbHVlcyDigJQgdGhlIGNhcHR1cmVcbiAgICogYWxyZWFkeSBob2xkcyB0aGUgcG9zdC1pbnB1dCwgcHJlLXBhdXNlIG1lbW9yeSAodGhlIGlucHV0TWFwcGVyIHN0aWxsXG4gICAqIHJ1bnMsIGZvciB0aGUgc3RhZ2VzJyByZWFkLW9ubHkgYXJncyBvbmx5KS4gQWJzZW50IHdoZW4gdGhlIGNoZWNrcG9pbnRcbiAgICogaG9sZHMgbm8gY2FwdHVyZSBmb3IgdGhpcyBzdWJmbG93OyB0aGUgaW5wdXRNYXBwZXIgdGhlbiBzZWVkcyBpdCwgYXMgb25cbiAgICogYW55IGVudHJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgc2VlZD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKipcbiAgICogV2hlcmUgdGhpcyBzdWJmbG93J3MgdHJhdmVyc2FsIHN0YXJ0cyBvbiB0aGUgcmUtZW50cnk6IHRoZSBtb3VudCBvZiB0aGVcbiAgICogbmV4dCBzdWJmbG93IG9uIHRoZSBwYXRoLCBvciDigJQgb24gdGhlIGxhc3QgaG9wIOKAlCB0aGUgcGF1c2VkIHN0YWdlJ3NcbiAgICogc3RhbmQtaW4sIGVhY2ggd2l0aCBpdHMgZGlzcGF0Y2hlcidzIGNvbnRpbnVhdGlvbiBhdHRhY2hlZCAoc2VlIHRoZVxuICAgKiBtb2R1bGUgZG9jKS4gQWJzZW50OiB0aGUgc3ViZmxvdydzIG93biByb290IOKAlCBhIHNlZWQtb25seSBob3AgKHNlZVxuICAgKiB7QGxpbmsgUmVzdW1lRW50cnkuZnJvbUNhcHR1cmVzfSksIG9yIGFuIG91dGVyIHN1YmZsb3cgd2hvc2UgY2FwdHVyZSB0aGVcbiAgICogY2hlY2twb2ludCBsYWNrcy5cbiAgICovXG4gIHJlYWRvbmx5IGVudHJ5PzogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIC8qKlxuICAgKiBQYXVzZXMgb2YgcGFyYWxsZWwgc2libGluZ3Mgd2hvc2UgZmFuLW91dCBzaXRzIGluIFRISVMgc3ViZmxvdywgcmFpc2VkIGluXG4gICAqIG9yZGVyIG9uY2UgYGVudHJ5YCdzIGNoYWluIGVuZHMgKHRoZSBmaXJzdCBpcyByYWlzZWQsIHRoZSByZXN0IHdhaXRcbiAgICogYmVoaW5kIGl0KS4gQWJzZW50IHdoZW4gbm8gc2libGluZyBpcyB3YWl0aW5nIGhlcmUuXG4gICAqL1xuICByZWFkb25seSBwZW5kaW5nUGF1c2VzPzogcmVhZG9ubHkgUXVldWVkUGF1c2VbXTtcbn1cblxuZXhwb3J0IGNsYXNzIFJlc3VtZUVudHJ5PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICAvKipcbiAgICogV2hlcmUgdGhlIHJlc3VtZWQgVE9QLUxFVkVMIHRyYXZlcnNhbCBzdGFydHM6IHRoZSBzdGFuZC1pbiAoYSB0b3AtbGV2ZWxcbiAgICogcGF1c2UpIG9yIHRoZSBtb3VudCBvZiB0aGUgZmlyc3Qgc3ViZmxvdyBvbiB0aGUgcGF0aCDigJQgZWFjaCB3aXRoIGl0c1xuICAgKiBkaXNwYXRjaGVyJ3MgY29udGludWF0aW9uIGF0dGFjaGVkLiBgdW5kZWZpbmVkYCBmb3IgYSBzZWVkLW9ubHkgZW50cnkg4oCUXG4gICAqIHRoZSB0cmF2ZXJzYWwgc3RhcnRzIGF0IGl0cyByb290LlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnQ6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkO1xuICAvKiogU2libGluZyBwYXVzZXMgd2hvc2UgZmFuLW91dCBzaXRzIGF0IHRoZSBUT1AgbGV2ZWwg4oCUIHJhaXNlZCBvbmNlIGBzdGFydGAncyBjaGFpbiBlbmRzLiAqL1xuICByZWFkb25seSBzdGFydFBlbmRpbmdQYXVzZXM6IHJlYWRvbmx5IFF1ZXVlZFBhdXNlW10gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBIb3cgbWFueSBzdGFnZSBleGVjdXRpb25zIHRoZSByZXN1bWVkIHJ1biBtYWtlcyBiZWZvcmUgdGhlIHN0YW5kLWluIHJ1bnNcbiAgICog4oCUIG9uZSBwZXIgc3ViZmxvdyBvbiB0aGUgcGF0aCwgZWFjaCBlbnRlcmVkIGF0IGl0cyBtb3VudCDigJQgc28gdGhlXG4gICAqIGV4ZWN1dG9yJ3MgYG9uUmVzdW1lYCBuYW1lcyB0aGUgc3RhbmQtaW4ncyBvd24gYHJ1bnRpbWVTdGFnZUlkYC5cbiAgICogYHVuZGVmaW5lZGAgd2hlbiBpdCBjYW5ub3QgYmUga25vd24gYmVmb3JlIHRoZSBydW46IGFuIG91dGVyIHN1YmZsb3dcbiAgICogbWlzc2luZyBpdHMgY2FwdHVyZSByZS1ydW5zIGZyb20gaXRzIHJvb3QuXG4gICAqL1xuICByZWFkb25seSBzdGVwc0JlZm9yZVN0YW5kSW46IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgLyoqIEhvcHMgbm90IHRha2VuIHlldCwgYnkgc3ViZmxvdyBpZC4gQSBob3AgbGVhdmVzIHRoaXMgbWFwIHdoZW4gaXQgaXMgdGFrZW4uICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcGVuZGluZzogTWFwPHN0cmluZywgUmVzdW1lSG9wPFRPdXQsIFRTY29wZT4+O1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgc3RhcnQ6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkLFxuICAgIGhvcHM6IHJlYWRvbmx5IFJlc3VtZUhvcDxUT3V0LCBUU2NvcGU+W10sXG4gICAgc3RhcnRQZW5kaW5nUGF1c2VzPzogcmVhZG9ubHkgUXVldWVkUGF1c2VbXSxcbiAgICBzdGVwc0JlZm9yZVN0YW5kSW4/OiBudW1iZXIsXG4gICkge1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLnN0YXJ0UGVuZGluZ1BhdXNlcyA9IHN0YXJ0UGVuZGluZ1BhdXNlcztcbiAgICB0aGlzLnN0ZXBzQmVmb3JlU3RhbmRJbiA9IHN0ZXBzQmVmb3JlU3RhbmRJbjtcbiAgICB0aGlzLnBlbmRpbmcgPSBuZXcgTWFwKGhvcHMubWFwKChob3ApID0+IFtob3Auc3ViZmxvd0lkLCBob3BdKSk7XG4gIH1cblxuICAvKipcbiAgICogUGxhbiB0aGUgcmUtZW50cnkgb2YgYSBwYXVzZWQgY2hhcnQuIEV2ZXJ5IG1vdW50IG9uIHRoZSBwYXRoLCBldmVyeVxuICAgKiBkaXNwYXRjaGVyIGNvbnRpbnVhdGlvbiBhbmQgZXZlcnkgd2FpdGluZyBzaWJsaW5nIGlzIHJlc29sdmVkIEhFUkUsXG4gICAqIGFnYWluc3QgdGhlIGNoYXJ0IGFzIGJ1aWx0LCBiZWZvcmUgYSBzaW5nbGUgc3RhZ2UgcnVucyDigJQgc28gYSBjaGVja3BvaW50XG4gICAqIHdob3NlIHBhdGggdGhlIGNoYXJ0IGNhbm5vdCB3YWxrIGlzIHJlZnVzZWQgdXAgZnJvbnQgaW5zdGVhZCBvZiByZXN1bWluZ1xuICAgKiBpbnRvIHRoZSB3cm9uZyBzaGFwZS5cbiAgICpcbiAgICogQHBhcmFtIGFyZ3MgLSBgcm9vdGAgYW5kIGBzdWJmbG93c2A6IHRoZSBjaGFydCBhcyBidWlsdFxuICAgKiAgIChgRmxvd0NoYXJ0LnJvb3RgLCBgRmxvd0NoYXJ0LnN1YmZsb3dzYCk7IGBwYXRoYDpcbiAgICogICBgY2hlY2twb2ludC5zdWJmbG93UGF0aGAsIG91dGVybW9zdCBmaXJzdDsgYGNhcHR1cmVzYDpcbiAgICogICBgY2hlY2twb2ludC5zdWJmbG93U3RhdGVzYCAoYSBkZXRhY2hlZCBjb3B5KTsgYHN0YW5kSW5gOiB0aGUgbm9kZSB0aGF0XG4gICAqICAgcnVucyB0aGUgcmVzdW1lIGhhbGYg4oCUIHRoZSBwYXVzZWQgc3RhZ2UncyBvd24gbm9kZSwgZnVuY3Rpb24gc3dhcHBlZFxuICAgKiAgIChpdHMgY29udGludWF0aW9uIGlzIGF0dGFjaGVkIGhlcmUpOyBgcGVuZGluZ1BhdXNlc2A6XG4gICAqICAgYGNoZWNrcG9pbnQucGVuZGluZ1BhdXNlc2AgKGEgZGV0YWNoZWQgY29weSkuXG4gICAqIEB0aHJvd3Mgd2hlbiBhIHN1YmZsb3cgb24gdGhlIHBhdGggaXMgbWlzc2luZywgbW91bnRlZCBtb3JlIHRoYW4gb25jZSwgb3JcbiAgICogICBpdHMgbW91bnQgY2Fubm90IGJlIHJlYWNoZWQgZnJvbSB0aGUgZW5jbG9zaW5nIGdyYXBoOyBvciB3aGVuIGEgcGVuZGluZ1xuICAgKiAgIHBhdXNlIGlzIG1hbGZvcm1lZCBvciBpcyBub3QgYSBwYXJhbGxlbCBzaWJsaW5nIG9mIHRoZSBwYXVzZWQgc3RhZ2VcbiAgICovXG4gIHN0YXRpYyBwbGFuPFRPdXQsIFRTY29wZT4oYXJnczoge1xuICAgIHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICAgIHN1YmZsb3dzOiBSZWNvcmQ8c3RyaW5nLCB7IHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IH0+IHwgdW5kZWZpbmVkO1xuICAgIHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAgIGNhcHR1cmVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gfCB1bmRlZmluZWQ7XG4gICAgc3RhbmRJbjogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gICAgcGVuZGluZ1BhdXNlcz86IHJlYWRvbmx5IFBlbmRpbmdQYXVzZVtdO1xuICB9KTogUmVzdW1lRW50cnk8VE91dCwgVFNjb3BlPiB7XG4gICAgY29uc3QgeyByb290LCBzdWJmbG93cywgcGF0aCwgY2FwdHVyZXMsIHN0YW5kSW4gfSA9IGFyZ3M7XG4gICAgY29uc3QgY2hhcnQgPSBuZXcgQ2hhcnRJbmRleDxUT3V0LCBUU2NvcGU+KCk7XG5cbiAgICAvLyAxLiBXYWxrIHRoZSBwYXRoOiB0aGUgZ3JhcGggb2YgZXZlcnkgbGV2ZWwsIHRoZSBtb3VudCBvZiBldmVyeSBzdWJmbG93LlxuICAgIGNvbnN0IGdyYXBoczogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT5bXSA9IFtyb290XTtcbiAgICBjb25zdCBtb3VudHM6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHN1YmZsb3dJZCA9IHBhdGhbaV07XG4gICAgICBtb3VudHMucHVzaChjaGFydC5vbmx5TW91bnQoZ3JhcGhzW2ldLCBzdWJmbG93SWQsIGkgPT09IDAgPyAndGhlIGZsb3djaGFydCcgOiBgc3ViZmxvdyAnJHtwYXRoW2kgLSAxXX0nYCkpO1xuICAgICAgLy8gT3duIGVudHJpZXMgb25seTogYSBwYXRoIHNlZ21lbnQgaXMgZGF0YSBmcm9tIGEgc3RvcmVkIGNoZWNrcG9pbnQsXG4gICAgICAvLyBhbmQgYCdfX3Byb3RvX18nYCBtdXN0IG5vdCByZXNvbHZlIHRocm91Z2ggdGhlIHByb3RvdHlwZSBjaGFpbi5cbiAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBvd25FbnRyeShzdWJmbG93cywgc3ViZmxvd0lkKTtcbiAgICAgIGlmICghZGVmaW5pdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENhbm5vdCByZXN1bWU6IHN1YmZsb3cgJyR7c3ViZmxvd0lkfScgaXMgbm90IHJlZ2lzdGVyZWQgaW4gdGhlIGZsb3djaGFydC4gYCArXG4gICAgICAgICAgICAnVGhlIGNoYXJ0IG1heSBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIGNoZWNrcG9pbnQgd2FzIGNyZWF0ZWQuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGdyYXBocy5wdXNoKGRlZmluaXRpb24ucm9vdCk7XG4gICAgfVxuICAgIGNvbnN0IGxlYWZMZXZlbCA9IHBhdGgubGVuZ3RoO1xuICAgIC8vIFRoZSBwYXVzZWQgc3RhZ2UncyBSRUFMIG5vZGUg4oCUIHdob3NlIGRpc3BhdGNoZXIgdGhlIHN0YW5kLWluJ3NcbiAgICAvLyBjb250aW51YXRpb24gY29tZXMgZnJvbS4gKFRoZSBleGVjdXRvciBhbHJlYWR5IGZvdW5kIGl0OyBhIGRpcmVjdFxuICAgIC8vIGNhbGxlcidzIHN0YW5kLWluIHRoYXQgaXMgbm90IGluIHRoZSBsZWFmIGdyYXBoIHNpbXBseSBoYXMgbm9uZS4pXG4gICAgY29uc3QgcGF1c2VkID0gY2hhcnQuc3RhZ2UoZ3JhcGhzW2xlYWZMZXZlbF0sIHN0YW5kSW4uaWQpO1xuXG4gICAgLy8gMi4gUXVldWUgZXZlcnkgd2FpdGluZyBzaWJsaW5nIHBhdXNlIGF0IHRoZSBsZXZlbCBvZiBpdHMgZmFuLW91dC5cbiAgICBjb25zdCBxdWV1ZXMgPSBxdWV1ZVNpYmxpbmdQYXVzZXMoYXJncy5wZW5kaW5nUGF1c2VzLCB7IGNoYXJ0LCBzdWJmbG93cywgcm9vdCwgcGF0aCwgZ3JhcGhzLCBtb3VudHMsIHBhdXNlZCB9KTtcblxuICAgIC8vIDMuIFRoZSBvbmUtc2hvdCBlbnRyeSBvZiBldmVyeSBsZXZlbDogdGhlIGNoaWxkLCB0aGVuIGl0cyBkaXNwYXRjaGVyJ3NcbiAgICAvLyAgICBjb250aW51YXRpb24g4oCUIHVwIHRvIHRoZSBmYW4tb3V0IHdoZW4gc2libGluZ3Mgd2FpdCB0aGVyZS5cbiAgICBjb25zdCBjaGlsZEF0ID0gKGxldmVsOiBudW1iZXIpID0+IChsZXZlbCA8IGxlYWZMZXZlbCA/IG1vdW50c1tsZXZlbF0gOiBwYXVzZWQpO1xuICAgIGNvbnN0IGVudHJ5QXQgPSAobGV2ZWw6IG51bWJlcik6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+ID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRBdChsZXZlbCk7XG4gICAgICBjb25zdCByZXBsYWNlbWVudCA9IGxldmVsIDwgbGVhZkxldmVsID8gbW91bnRzW2xldmVsXSA6IHN0YW5kSW47XG4gICAgICBpZiAoIWNoaWxkKSByZXR1cm4gcmVwbGFjZW1lbnQ7XG4gICAgICByZXR1cm4gY2hhcnQuZW50cnkoZ3JhcGhzW2xldmVsXSwgY2hpbGQsIHJlcGxhY2VtZW50LCBxdWV1ZXNbbGV2ZWxdPy5mYW5PdXQpO1xuICAgIH07XG4gICAgLy8gNC4gVGhlIGhvcHMuIEEgc3ViZmxvdyB3aXRoIG5vIGNhcHR1cmUgaXMgZW50ZXJlZCBhdCBpdHMgUk9PVCB3aXRoIGl0c1xuICAgIC8vICAgIGlucHV0TWFwcGVyIChpdHMgZWFybGllciBzdGFnZXMgcmVjb21wdXRlIHdoYXQgdGhlIGNhcHR1cmUgaGVsZCkg4oCUXG4gICAgLy8gICAgZXhjZXB0IHRoZSBsZWFmLCB3aG9zZSBlbnRyeSBpcyBhbHdheXMgdGhlIHN0YW5kLWluOiByZS1ydW5uaW5nIGl0XG4gICAgLy8gICAgZnJvbSBpdHMgcm9vdCB3b3VsZCBhc2sgYWdhaW4gYW5kIGxvc2UgdGhlIGFuc3dlci5cbiAgICBjb25zdCBob3BzOiBSZXN1bWVIb3A8VE91dCwgVFNjb3BlPltdID0gW107XG4gICAgbGV0IGV2ZXJ5TGV2ZWxBdEl0c0VudHJ5ID0gdHJ1ZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHN1YmZsb3dJZCA9IHBhdGhbaV07XG4gICAgICBjb25zdCBzZWVkID0gb3duRW50cnkoY2FwdHVyZXMsIHN1YmZsb3dJZCk7XG4gICAgICBjb25zdCBpc0xlYWZIb3AgPSBpID09PSBwYXRoLmxlbmd0aCAtIDE7XG4gICAgICBpZiAoc2VlZCA9PT0gdW5kZWZpbmVkICYmICFpc0xlYWZIb3ApIHtcbiAgICAgICAgZXZlcnlMZXZlbEF0SXRzRW50cnkgPSBmYWxzZTtcbiAgICAgICAgaG9wcy5wdXNoKHsgc3ViZmxvd0lkIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHdhaXRpbmcgPSBxdWV1ZXNbaSArIDFdPy5wYXVzZXM7XG4gICAgICBob3BzLnB1c2goe1xuICAgICAgICBzdWJmbG93SWQsXG4gICAgICAgIC4uLihzZWVkICE9PSB1bmRlZmluZWQgJiYgeyBzZWVkIH0pLFxuICAgICAgICBlbnRyeTogZW50cnlBdChpICsgMSksXG4gICAgICAgIC4uLih3YWl0aW5nICYmIHsgcGVuZGluZ1BhdXNlczogd2FpdGluZyB9KSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBFdmVyeSBsZXZlbCBlbnRlcmVkIGF0IGl0cyBlbnRyeTogb25lIGV4ZWN1dGlvbiAodGhlIG1vdW50KSBwZXIgbGV2ZWxcbiAgICAvLyBydW5zIGJlZm9yZSB0aGUgc3RhbmQtaW4uXG4gICAgcmV0dXJuIG5ldyBSZXN1bWVFbnRyeShlbnRyeUF0KDApLCBob3BzLCBxdWV1ZXNbMF0/LnBhdXNlcywgZXZlcnlMZXZlbEF0SXRzRW50cnkgPyBwYXRoLmxlbmd0aCA6IHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogQSBzZWVkLW9ubHkgZW50cnk6IGVhY2ggY2FwdHVyZSBzZWVkcyB0aGUgRklSU1QgZW50cnkgaW50byBpdHMgc3ViZmxvdyxcbiAgICogd2hpY2ggdGhlbiBzdGFydHMgYXQgaXRzIG93biByb290LiBXaGF0IHRoZSBkZXByZWNhdGVkXG4gICAqIGBzdWJmbG93U3RhdGVzRm9yUmVzdW1lYCBvcHRpb24gKFRyYXZlcnNlck9wdGlvbnMgLyBIYW5kbGVyRGVwcykgbWVhbnNcbiAgICogc2luY2UgOS4yOC4wIOKAlCB0aGUgc2FtZSBvbmUtc2hvdCBsYXcsIHdpdGhvdXQgYSBzdGFuZC1pbiBvciBhIHBhdGguXG4gICAqL1xuICBzdGF0aWMgZnJvbUNhcHR1cmVzPFRPdXQsIFRTY29wZT4oY2FwdHVyZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pik6IFJlc3VtZUVudHJ5PFRPdXQsIFRTY29wZT4ge1xuICAgIHJldHVybiBuZXcgUmVzdW1lRW50cnk8VE91dCwgVFNjb3BlPihcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIE9iamVjdC5lbnRyaWVzKGNhcHR1cmVzKS5tYXAoKFtzdWJmbG93SWQsIHNlZWRdKSA9PiAoeyBzdWJmbG93SWQsIHNlZWQgfSkpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlLWVudHJ5IGludG8gYHN1YmZsb3dJZGAsIHRha2VuIOKAlCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoaXMgZW50cnkgaXNcbiAgICogYW4gb3JkaW5hcnkgb25lICh0aGUgc3ViZmxvdyBpcyBvZmYgdGhlIHBhdXNlIHBhdGgsIG9yIGl0cyBob3Agd2FzIGFscmVhZHlcbiAgICogdGFrZW4pLiBPTkUtU0hPVDogYSBob3AgaXMgcmV0dXJuZWQgYXQgbW9zdCBvbmNlLCBzbyBhIHNlY29uZCBlbnRyeSBpbnRvXG4gICAqIHRoZSBzYW1lIHN1YmZsb3cgKGEgbG9vcCBwYXNzaW5nIGl0cyBtb3VudCBhZ2FpbikgcnVucyB0aGUgcmVhbCBzdWJmbG93XG4gICAqIGZyb20gaXRzIHJlYWwgcm9vdCB3aXRoIGl0cyBpbnB1dE1hcHBlci5cbiAgICovXG4gIGVudGVyU3ViZmxvdyhzdWJmbG93SWQ6IHN0cmluZyk6IFJlc3VtZUhvcDxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBob3AgPSB0aGlzLnBlbmRpbmcuZ2V0KHN1YmZsb3dJZCk7XG4gICAgaWYgKGhvcCAhPT0gdW5kZWZpbmVkKSB0aGlzLnBlbmRpbmcuZGVsZXRlKHN1YmZsb3dJZCk7XG4gICAgcmV0dXJuIGhvcDtcbiAgfVxuXG4gIC8qKiBgdHJ1ZWAgb25jZSBldmVyeSBob3AgaGFzIGJlZW4gdGFrZW4g4oCUIHRoZSByZXN0IG9mIHRoZSBydW4gaXMgb3JkaW5hcnkuICovXG4gIGdldCBzcGVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wZW5kaW5nLnNpemUgPT09IDA7XG4gIH1cbn1cblxuLy8g4pSA4pSAIFJhaXNpbmcgYSB3YWl0aW5nIHNpYmxpbmcncyBwYXVzZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBRdWV1ZSBgcXVldWVgIGJlaGluZCBhIHBhdXNlIHBhc3NpbmcgdGhyb3VnaCBpdHMgbGV2ZWw6IGEgcGF1c2UgcmFpc2VkXG4gKiB3aGlsZSBzaWJsaW5ncyBzdGlsbCB3YWl0IG11c3QgY2FycnkgdGhlbSB0byBpdHMgY2hlY2twb2ludC4gRWFjaCBwYXRoIGlzXG4gKiBjdXQgdG8gdGhhdCBsZXZlbCDigJQgdGhlIGJ1YmJsZS11cCBwcmVwZW5kcyB0aGUgbGV2ZWxzIGFib3ZlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcXVldWVCZWhpbmQoc2lnbmFsOiBQYXVzZVNpZ25hbCwgcXVldWU6IHJlYWRvbmx5IFF1ZXVlZFBhdXNlW10pOiB2b2lkIHtcbiAgZm9yIChjb25zdCB7IHBhdXNlLCBsZXZlbCB9IG9mIHF1ZXVlKSB7XG4gICAgc2lnbmFsLmFkZFBlbmRpbmdQYXVzZSh7IC4uLnBhdXNlLCBzdWJmbG93UGF0aDogcGF1c2Uuc3ViZmxvd1BhdGguc2xpY2UobGV2ZWwpIH0pO1xuICB9XG59XG5cbi8qKlxuICogVGhlIGZpcnN0IHdhaXRpbmcgc2libGluZydzIHBhdXNlLCByYWlzZWQgYWdhaW4gYXQgaXRzIGZhbi1vdXQncyBsZXZlbCDigJRcbiAqIGV4YWN0bHkgYXMgaXQgYnViYmxlZCB1cCB0byB0aGF0IGxldmVsIHRoZSBmaXJzdCB0aW1lIChpdHMgc3RhZ2UsIGl0c1xuICogcXVlc3Rpb24sIGl0cyBvd24gc3ViZmxvdyBjYXB0dXJlcyksIG5vdGhpbmcgcmUtcnVuOyB0aGUgcmVzdCBvZiB0aGUgcXVldWVcbiAqIHdhaXRzIGJlaGluZCBpdC4gVGhlIHN1YmZsb3dzIEFCT1ZFIHRoZSBmYW4tb3V0IGNhcHR1cmUgdGhlbXNlbHZlcyBhZnJlc2hcbiAqIGFzIGl0IGJ1YmJsZXMgdXAsIHNvIHRoZXkgY2Fycnkgd2hhdCB0aGUgcmVzdW1lZCBjaGlsZCB3cm90ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhaXNlUXVldWVkUGF1c2UocXVldWU6IHJlYWRvbmx5IFF1ZXVlZFBhdXNlW10pOiBQYXVzZVNpZ25hbCB7XG4gIGNvbnN0IFtmaXJzdCwgLi4ucmVzdF0gPSBxdWV1ZTtcbiAgY29uc3QgeyBwYXVzZSwgbGV2ZWwgfSA9IGZpcnN0O1xuICBjb25zdCBzaWduYWwgPSBuZXcgUGF1c2VTaWduYWwocGF1c2UucGF1c2VEYXRhLCBwYXVzZS5wYXVzZWRTdGFnZUlkLCBwYXVzZS5wYXVzZWRCeSk7XG4gIC8vIFRoZSBzaWJsaW5nIHBhdXNlZCBpbiBhbiBFQVJMSUVSIHJ1bjogaXRzIG93biBleGVjdXRpb24sIG5vdCB0aGlzIHJ1bidzLlxuICBpZiAoaXNQYXVzZWRFeGVjdXRpb24ocGF1c2UucGF1c2VkRXhlY3V0aW9uKSkge1xuICAgIHNpZ25hbC5zdGFtcEV4ZWN1dGlvbihwYXVzZS5wYXVzZWRFeGVjdXRpb24ucnVudGltZVN0YWdlSWQsIHBhdXNlLnBhdXNlZEV4ZWN1dGlvbi5ydW5JZCk7XG4gIH1cbiAgY29uc3QgYmVsb3cgPSBwYXVzZS5zdWJmbG93UGF0aC5zbGljZShsZXZlbCk7XG4gIGZvciAobGV0IGkgPSBiZWxvdy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IHN0YXRlID0gb3duRW50cnkocGF1c2Uuc3ViZmxvd1N0YXRlcywgYmVsb3dbaV0pO1xuICAgIGlmIChzdGF0ZSAhPT0gdW5kZWZpbmVkKSBzaWduYWwuY2FwdHVyZVN1YmZsb3dTY29wZShiZWxvd1tpXSwgc3RhdGUpO1xuICAgIHNpZ25hbC5wcmVwZW5kU3ViZmxvdyhiZWxvd1tpXSk7XG4gIH1cbiAgcXVldWVCZWhpbmQoc2lnbmFsLCByZXN0KTtcbiAgcmV0dXJuIHNpZ25hbDtcbn1cblxuLy8g4pSA4pSAIFJlYWRpbmcgdGhlIGNoYXJ0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFRoZSBub2RlIHRoYXQgbW91bnRzIGBzdWJmbG93SWRgLCBmb3VuZCBieSBERlMgZnJvbSBgc3RhcnRgIG92ZXIgYG5leHRgIGFuZFxuICogYGNoaWxkcmVuYCAobG9vcC1yZWYgc3R1YnMgc2tpcHBlZCDigJQgdGhleSBzaGFyZSB0aGVpciB0YXJnZXQncyBpZCBhbmQgY2FycnlcbiAqIG5vdGhpbmcpLiBDeWNsZS1zYWZlICh2aXNpdGVkIGJ5IGlkZW50aXR5LCBzbyBhbiBhYnNlbnQgaWQgdGVybWluYXRlcyB0b28pO1xuICogZmlyc3QgbWF0Y2ggaW4gREZTIHByZS1vcmRlciAoY2hpbGRyZW4gYmVmb3JlIGBuZXh0YCwgbGlrZSB0aGUgYnVpbGRlcikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTW91bnQ8VE91dCwgVFNjb3BlPihcbiAgc3RhcnQ6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICBzdWJmbG93SWQ6IHN0cmluZyxcbik6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkIHtcbiAgZm9yIChjb25zdCBub2RlIG9mIGRpc3BhdGNoZXJJbmRleChzdGFydCkua2V5cygpKSB7XG4gICAgaWYgKG5vZGUuc3ViZmxvd0lkID09PSBzdWJmbG93SWQpIHJldHVybiBub2RlO1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRXZlcnkgcmVhbCBub2RlIG9mIG9uZSBsZXZlbCdzIGdyYXBoLCBpbiBERlMgcHJlLW9yZGVyLCBtYXBwZWQgdG8gdGhlXG4gKiBESVNQQVRDSEVSIHdob3NlIGNoaWxkLWNoYWluIGhvbGRzIGl0IOKAlCB0aGUgbm9kZSB3aG9zZSBgY2hpbGRyZW5gIGl0XG4gKiBkZXNjZW5kcyBmcm9tIChhIGRlY2lkZXIsIGEgc2VsZWN0b3IsIGEgZm9yaykg4oCUIG9yIGB1bmRlZmluZWRgIGZvciBhIG5vZGVcbiAqIG9uIHRoZSBsZXZlbCdzIG93biBzcGluZS4gTG9vcCBzdHVicyBhcmUgc2tpcHBlZDsgdmlzaXRlZCBieSBpZGVudGl0eSwgc29cbiAqIHR3byBtb3VudHMgc2hhcmluZyBhbiBpZCBhcmUgYm90aCBpbmRleGVkIGFuZCBhIGN5Y2xlIHRlcm1pbmF0ZXMuXG4gKi9cbmZ1bmN0aW9uIGRpc3BhdGNoZXJJbmRleDxUT3V0LCBUU2NvcGU+KFxuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbik6IE1hcDxTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiwgU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgaW5kZXggPSBuZXcgTWFwPFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LCBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB8IHVuZGVmaW5lZD4oKTtcbiAgY29uc3Qgc3RhY2s6IEFycmF5PFtTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiwgU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfCB1bmRlZmluZWRdPiA9IFtbcm9vdCwgdW5kZWZpbmVkXV07XG4gIGZvciAobGV0IHRvcCA9IHN0YWNrLnBvcCgpOyB0b3AgIT09IHVuZGVmaW5lZDsgdG9wID0gc3RhY2sucG9wKCkpIHtcbiAgICBjb25zdCBbbm9kZSwgZGlzcGF0Y2hlcl0gPSB0b3A7XG4gICAgaWYgKG5vZGUuaXNMb29wUmVmIHx8IGluZGV4Lmhhcyhub2RlKSkgY29udGludWU7XG4gICAgaW5kZXguc2V0KG5vZGUsIGRpc3BhdGNoZXIpO1xuICAgIC8vIExJRk86IHB1c2ggYG5leHRgIGZpcnN0IGFuZCBjaGlsZHJlbiByZXZlcnNlZCwgc28gY2hpbGRyZW4gYXJlIHZpc2l0ZWRcbiAgICAvLyBiZWZvcmUgYG5leHRgIGFuZCB0aGUgZmlyc3QgY2hpbGQgZmlyc3Qg4oCUIHByZS1vcmRlciwgbGlrZSB0aGUgYnVpbGRlci5cbiAgICBpZiAobm9kZS5uZXh0KSBzdGFjay5wdXNoKFtub2RlLm5leHQsIGRpc3BhdGNoZXJdKTtcbiAgICBpZiAobm9kZS5jaGlsZHJlbikge1xuICAgICAgZm9yIChsZXQgaSA9IG5vZGUuY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHN0YWNrLnB1c2goW25vZGUuY2hpbGRyZW5baV0sIG5vZGVdKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGluZGV4O1xufVxuXG4vKiogT25lIHBsYW4ncyB2aWV3IG9mIHRoZSBjaGFydDogZWFjaCBsZXZlbCdzIGluZGV4IGJ1aWx0IG9uY2UuICovXG5jbGFzcyBDaGFydEluZGV4PFRPdXQsIFRTY29wZT4ge1xuICBwcml2YXRlIHJlYWRvbmx5IGluZGV4ZXMgPSBuZXcgTWFwPFxuICAgIFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIE1hcDxTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiwgU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfCB1bmRlZmluZWQ+XG4gID4oKTtcblxuICBwcml2YXRlIG9mKHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+KSB7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5pbmRleGVzLmdldChyb290KTtcbiAgICBpZiAoIWluZGV4KSB7XG4gICAgICBpbmRleCA9IGRpc3BhdGNoZXJJbmRleChyb290KTtcbiAgICAgIHRoaXMuaW5kZXhlcy5zZXQocm9vdCwgaW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICAvKiogRXZlcnkgbW91bnQgb2YgYHN1YmZsb3dJZGAgaW4gYHJvb3RgJ3MgZ3JhcGgsIGluIERGUyBwcmUtb3JkZXIuICovXG4gIG1vdW50c09mKHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LCBzdWJmbG93SWQ6IHN0cmluZyk6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W10ge1xuICAgIHJldHVybiBbLi4udGhpcy5vZihyb290KS5rZXlzKCldLmZpbHRlcigobm9kZSkgPT4gbm9kZS5zdWJmbG93SWQgPT09IHN1YmZsb3dJZCk7XG4gIH1cblxuICAvKiogVGhlIG9uZSBtb3VudCBvZiBgc3ViZmxvd0lkYCBpbiBgcm9vdGAncyBncmFwaCDigJQgcmVmdXNlZCB3aGVuIGFic2VudCBvciBhbWJpZ3VvdXMuICovXG4gIG9ubHlNb3VudChyb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiwgc3ViZmxvd0lkOiBzdHJpbmcsIGdyYXBoTmFtZTogc3RyaW5nKTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4ge1xuICAgIGNvbnN0IGZvdW5kID0gdGhpcy5tb3VudHNPZihyb290LCBzdWJmbG93SWQpO1xuICAgIGlmIChmb3VuZC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCByZXN1bWU6IHRoZSBtb3VudCBvZiBzdWJmbG93ICcke3N1YmZsb3dJZH0nIGlzIG5vdCByZWFjaGFibGUgZnJvbSAke2dyYXBoTmFtZX0uIGAgK1xuICAgICAgICAgIFwiVGhlIGNoZWNrcG9pbnQncyBzdWJmbG93UGF0aCBkb2VzIG5vdCBtYXRjaCB0aGlzIGNoYXJ0IOKAlCBpdCBtYXkgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSBjaGVja3BvaW50IHdhcyBjcmVhdGVkLlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGZvdW5kLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCByZXN1bWU6IHN1YmZsb3cgJyR7c3ViZmxvd0lkfScgaXMgbW91bnRlZCBtb3JlIHRoYW4gb25jZSBpbiAke2dyYXBoTmFtZX0gYCArXG4gICAgICAgICAgYCgke2ZvdW5kLm1hcCgobm9kZSkgPT4gYCcke25vZGUubmFtZX0nYCkuam9pbignLCAnKX0pLCBhbmQgYSBjaGVja3BvaW50J3Mgc3ViZmxvd1BhdGggY2Fubm90IHNheSB3aGljaCBgICtcbiAgICAgICAgICAnbW91bnQgcGF1c2VkLiBHaXZlIGVhY2ggbW91bnQgaXRzIG93biBzdWJmbG93IGlkIHRvIG1ha2UgYSBwYXVzZSBpbnNpZGUgaXQgcmVzdW1hYmxlLicsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZm91bmRbMF07XG4gIH1cblxuICAvKiogVGhlIHJlYWwgc3RhZ2UgYGlkYCBpbiBgcm9vdGAncyBncmFwaCAoZmlyc3QgaW4gREZTIHByZS1vcmRlciksIGlmIGFueS4gKi9cbiAgc3RhZ2Uocm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sIGlkOiBzdHJpbmcpOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB8IHVuZGVmaW5lZCB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIHRoaXMub2Yocm9vdCkua2V5cygpKSBpZiAobm9kZS5pZCA9PT0gaWQpIHJldHVybiBub2RlO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogVGhlIGRpc3BhdGNoZXIgd2hvc2UgY2hpbGQtY2hhaW4gaG9sZHMgYG5vZGVgIGluIGByb290YCdzIGdyYXBoIChgdW5kZWZpbmVkYCBvbiB0aGUgc3BpbmUpLiAqL1xuICBkaXNwYXRjaGVyT2Yocm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+KTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLm9mKHJvb3QpLmdldChub2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgb25lLXNob3QgZW50cnkgZm9yIGBjaGlsZGAgKGEgbW91bnQgb24gdGhlIHBhdGgsIG9yIHRoZSBwYXVzZWQgc3RhZ2UpXG4gICAqIGluIGByb290YCdzIGdyYXBoOiBgcmVwbGFjZW1lbnRgICh0aGUgbm9kZSB0aGF0IHJ1bnMg4oCUIHRoZSBtb3VudCBpdHNlbGYsXG4gICAqIG9yIHRoZSBzdGFuZC1pbikgd2l0aCB3aGF0IHJhbiBhZnRlciBgY2hpbGRgJ3MgY2hhaW4gb24gdGhlIG9yaWdpbmFsIHJ1blxuICAgKiBhdHRhY2hlZCB3aGVyZSB0aGF0IGNoYWluIGVuZHMg4oCUIGB7IC4uLmNoaWxkLCBuZXh0OiBkaXNwYXRjaGVyLm5leHQgfWAgZm9yXG4gICAqIGEgY2hhcnQgdGhlIGJ1aWxkZXIgbWFkZTpcbiAgICpcbiAgICogICDigKIgb24gdGhlIGxldmVsJ3Mgc3BpbmU6IG5vdGhpbmcgdG8gYXR0YWNoIOKAlCB0aGUgc3BpbmUgZ29lcyBvbiBieSBpdHNlbGY7XG4gICAqICAg4oCiIGEgREVDSURFUidzIG9yIFNFTEVDVE9SJ3MgYnJhbmNoOiB0aGUgZGlzcGF0Y2hlcidzIGBuZXh0YDtcbiAgICogICDigKIgYSBGT1JLIGNoaWxkOiB0aGUgZm9yaydzIGBuZXh0YCDigJQgaXRzIGpvaW4uXG4gICAqXG4gICAqIFBhc3QgYSBkaXNwYXRjaGVyIHdpdGggbm8gYG5leHRgLCB0aGUgd2FsayBnb2VzIG9uIE9VVFdBUkQgdG8gdGhlIG9uZVxuICAgKiBlbmNsb3NpbmcgaXQuIEl0IHN0b3BzIGF0IGBzdG9wQXRgIOKAlCB0aGUgZmFuLW91dCB3aGVyZSBzaWJsaW5ncyBzdGlsbFxuICAgKiB3YWl0LCB3aG9zZSBqb2luIG11c3Qgbm90IHJ1biB5ZXQuIE5vdGhpbmcgdG8gYXR0YWNoOiBgcmVwbGFjZW1lbnRgXG4gICAqIGl0c2VsZi5cbiAgICovXG4gIGVudHJ5KFxuICAgIHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIGNoaWxkOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgICByZXBsYWNlbWVudDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgc3RvcEF0OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB8IHVuZGVmaW5lZCxcbiAgKTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4ge1xuICAgIHJldHVybiBhcHBlbmRBdENoYWluRW5kKHJlcGxhY2VtZW50LCB0aGlzLmFmdGVyKHJvb3QsIGNoaWxkLCBzdG9wQXQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGF0IHJ1bnMgb25jZSBgbm9kZWAncyBjaGFpbiBlbmRzOiBpdHMgZGlzcGF0Y2hlcidzIGBuZXh0YCBjaGFpbiwgdGhlbiDigJRcbiAgICogd2hlcmUgVEhBVCBlbmRzIOKAlCB0aGUgY29udGludWF0aW9uIG9mIHRoZSBkaXNwYXRjaGVyIGVuY2xvc2luZyBpdCwgb3V0d2FyZCxcbiAgICogdXAgdG8gYHN0b3BBdGAgKGV4Y2x1c2l2ZSkuIGB1bmRlZmluZWRgIG9uIHRoZSBzcGluZS5cbiAgICovXG4gIHByaXZhdGUgYWZ0ZXIoXG4gICAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgc3RvcEF0OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB8IHVuZGVmaW5lZCxcbiAgKTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzLmRpc3BhdGNoZXJPZihyb290LCBub2RlKTtcbiAgICBpZiAoZGlzcGF0Y2hlciA9PT0gdW5kZWZpbmVkIHx8IGRpc3BhdGNoZXIgPT09IHN0b3BBdCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCBvdXRlciA9IHRoaXMuYWZ0ZXIocm9vdCwgZGlzcGF0Y2hlciwgc3RvcEF0KTtcbiAgICByZXR1cm4gZGlzcGF0Y2hlci5uZXh0ID8gYXBwZW5kQXRDaGFpbkVuZChkaXNwYXRjaGVyLm5leHQsIG91dGVyKSA6IG91dGVyO1xuICB9XG59XG5cbi8qKlxuICogYHN0YXJ0YCdzIGNoYWluIHdpdGggYGFmdGVyYCBhdHRhY2hlZCB3aGVyZSBpdCBlbmRzIOKAlCB0aGUgY2hhaW4ncyBub2Rlc1xuICogY29waWVkIG9uIHRoZSB3YXkgKG5ldmVyIHJlZ2lzdGVyZWQgYW55d2hlcmU6IGlkcyBzdGlsbCByZXNvbHZlIHRvIHRoZSByZWFsXG4gKiBub2RlcykuIEEgY2hhaW4gdGhhdCBlbmRzIGluIGEgbG9vcCBzdHViIChvciBsb29wcyBiYWNrIG9uIGl0c2VsZikgaXNcbiAqIHJldHVybmVkIGFzIGlzOiBjb250cm9sIGxlYXZlcyBpdCB0aHJvdWdoIHRoZSBsb29wLCBuZXZlciBcImFmdGVyXCIgaXQuXG4gKi9cbmZ1bmN0aW9uIGFwcGVuZEF0Q2hhaW5FbmQ8VE91dCwgVFNjb3BlPihcbiAgc3RhcnQ6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICBhZnRlcjogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfCB1bmRlZmluZWQsXG4pOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB7XG4gIGlmIChhZnRlciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gc3RhcnQ7XG4gIGNvbnN0IGNoYWluOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPltdID0gW107XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+PigpO1xuICBmb3IgKGxldCBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB8IHVuZGVmaW5lZCA9IHN0YXJ0OyBub2RlICE9PSB1bmRlZmluZWQ7IG5vZGUgPSBub2RlLm5leHQpIHtcbiAgICBpZiAobm9kZS5pc0xvb3BSZWYgfHwgc2Vlbi5oYXMobm9kZSkpIHJldHVybiBzdGFydDtcbiAgICBzZWVuLmFkZChub2RlKTtcbiAgICBjaGFpbi5wdXNoKG5vZGUpO1xuICB9XG4gIGxldCBuZXh0ID0gYWZ0ZXI7XG4gIGZvciAobGV0IGkgPSBjaGFpbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgbmV4dCA9IHsgLi4uY2hhaW5baV0sIG5leHQgfTtcbiAgcmV0dXJuIG5leHQ7XG59XG5cbi8vIOKUgOKUgCBXYWl0aW5nIHNpYmxpbmdzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogVGhlIHNpYmxpbmcgcGF1c2VzIHdhaXRpbmcgYXQgb25lIGxldmVsLCBhbmQgdGhlIGZhbi1vdXQgdGhleSB3YWl0IGluLiAqL1xuaW50ZXJmYWNlIExldmVsUXVldWU8VE91dCwgVFNjb3BlPiB7XG4gIHJlYWRvbmx5IGZhbk91dDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIHJlYWRvbmx5IHBhdXNlczogUXVldWVkUGF1c2VbXTtcbn1cblxuLyoqXG4gKiBQbGFjZSBgY2hlY2twb2ludC5wZW5kaW5nUGF1c2VzYCAoZGVjb2RlZCDigJQgYHBhdXNlL3JlY29yZC50c2ApIGFuZCBxdWV1ZSBlYWNoIGF0IHRoZVxuICogbGV2ZWwgb2YgaXRzIGZhbi1vdXQ6IHRoZSBkZXB0aCB3aGVyZSBpdHMgcGF0aCBwYXJ0cyBmcm9tIHRoZSBwYXVzZWRcbiAqIHN0YWdlJ3MuIFRoZXJlLCB0aGUgcGF1c2VkIHN0YWdlJ3MgY2hpbGQgKGEgbW91bnQgb24gdGhlIHBhdGgsIG9yIHRoZSBzdGFnZVxuICogaXRzZWxmKSBhbmQgdGhlIHNpYmxpbmcncyBtdXN0IGJvdGggaGFuZyBvZmYgT05FIHBhcmFsbGVsIGRpc3BhdGNoZXIg4oCUIGFcbiAqIGZvcmsgb3IgYSBzZWxlY3RvciDigJQgb3IgdGhlIHJlY29yZCBpcyBub3QgYSBzaWJsaW5nIGFuZCB0aGUgcmVzdW1lIGlzXG4gKiByZWZ1c2VkIHJhdGhlciB0aGFuIGFza2VkIGEgcXVlc3Rpb24gdGhlIGNoYXJ0IGNvdWxkIG5vdCBoYXZlIHJhaXNlZC5cbiAqL1xuZnVuY3Rpb24gcXVldWVTaWJsaW5nUGF1c2VzPFRPdXQsIFRTY29wZT4oXG4gIHBlbmRpbmc6IHJlYWRvbmx5IFBlbmRpbmdQYXVzZVtdIHwgdW5kZWZpbmVkLFxuICBhdDoge1xuICAgIGNoYXJ0OiBDaGFydEluZGV4PFRPdXQsIFRTY29wZT47XG4gICAgc3ViZmxvd3M6IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfT4gfCB1bmRlZmluZWQ7XG4gICAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gICAgcGF0aDogcmVhZG9ubHkgc3RyaW5nW107XG4gICAgZ3JhcGhzOiByZWFkb25seSBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPltdO1xuICAgIG1vdW50czogcmVhZG9ubHkgU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT5bXTtcbiAgICBwYXVzZWQ6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkO1xuICB9LFxuKTogQXJyYXk8TGV2ZWxRdWV1ZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHF1ZXVlczogQXJyYXk8TGV2ZWxRdWV1ZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkPiA9IFtdO1xuICBpZiAocGVuZGluZyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gcXVldWVzO1xuICAvLyBUaGUgY29kZWMncyBjaGVjayAoYHBhdXNlL3JlY29yZC50c2ApIOKAlCBgcGxhbmAgaXMgYSBwdWJsaWMgZG9vciB0b28sIHNvIGl0XG4gIC8vIG5ldmVyIHRha2VzIGEgc2libGluZyByZWNvcmQgdW5jaGVja2VkLCBob3dldmVyIGl0IHdhcyBoYW5kZWQgb25lLlxuICBjb25zdCBkZWNvZGVkID0gZGVjb2RlUGVuZGluZ1BhdXNlcyhwZW5kaW5nKTtcbiAgY29uc3QgeyBjaGFydCwgc3ViZmxvd3MsIHJvb3QsIHBhdGgsIGdyYXBocywgbW91bnRzLCBwYXVzZWQgfSA9IGF0O1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgLy8gRWFjaCByZWNvcmQncyBGSUVMRFMgYXJlIGNoZWNrZWQgYWJvdmU7IGhlcmUgaXQgaXMgYXNrZWQgd2hldGhlciB0aGVcbiAgLy8gcmVjb3JkIGZpdHMgVEhJUyBjaGFydC5cbiAgZGVjb2RlZC5mb3JFYWNoKChwYXVzZSwgbikgPT4ge1xuICAgIC8vIE9uZSByZWNvcmQgcGVyIHBhdXNlZCBzaWJsaW5nOiBhIHJlcGVhdCB3b3VsZCBhc2sgdGhlIHNhbWUgcXVlc3Rpb24gdHdpY2UuXG4gICAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoW3BhdXNlLnN1YmZsb3dQYXRoLCBwYXVzZS5wYXVzZWRTdGFnZUlkXSk7XG4gICAgaWYgKHNlZW4uaGFzKGtleSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCByZXN1bWU6IGNoZWNrcG9pbnQucGVuZGluZ1BhdXNlc1ske259XSAoJyR7cGF1c2UucGF1c2VkU3RhZ2VJZH0nKSByZXBlYXRzIGFuIGVhcmxpZXIgZW50cnkuYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHNlZW4uYWRkKGtleSk7XG4gICAgbGV0IGxldmVsID0gMDtcbiAgICB3aGlsZSAobGV2ZWwgPCBwYXRoLmxlbmd0aCAmJiBsZXZlbCA8IHBhdXNlLnN1YmZsb3dQYXRoLmxlbmd0aCAmJiBwYXRoW2xldmVsXSA9PT0gcGF1c2Uuc3ViZmxvd1BhdGhbbGV2ZWxdKSBsZXZlbCsrO1xuICAgIGNvbnN0IGdyYXBoID0gZ3JhcGhzW2xldmVsXTtcbiAgICBjb25zdCBvdXJzID0gbGV2ZWwgPCBwYXRoLmxlbmd0aCA/IG1vdW50c1tsZXZlbF0gOiBwYXVzZWQ7XG4gICAgY29uc3QgdGhlaXJNb3VudHMgPSBsZXZlbCA8IHBhdXNlLnN1YmZsb3dQYXRoLmxlbmd0aCA/IGNoYXJ0Lm1vdW50c09mKGdyYXBoLCBwYXVzZS5zdWJmbG93UGF0aFtsZXZlbF0pIDogW107XG4gICAgY29uc3QgdGhlaXJzID1cbiAgICAgIGxldmVsIDwgcGF1c2Uuc3ViZmxvd1BhdGgubGVuZ3RoXG4gICAgICAgID8gdGhlaXJNb3VudHMubGVuZ3RoID09PSAxXG4gICAgICAgICAgPyB0aGVpck1vdW50c1swXVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIDogY2hhcnQuc3RhZ2UoZ3JhcGgsIHBhdXNlLnBhdXNlZFN0YWdlSWQpO1xuICAgIGNvbnN0IGZhbk91dCA9IG91cnMgPyBjaGFydC5kaXNwYXRjaGVyT2YoZ3JhcGgsIG91cnMpIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGlzU2libGluZyA9XG4gICAgICBvdXJzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHRoZWlycyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBvdXJzICE9PSB0aGVpcnMgJiZcbiAgICAgIGZhbk91dCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBjaGFydC5kaXNwYXRjaGVyT2YoZ3JhcGgsIHRoZWlycykgPT09IGZhbk91dCAmJlxuICAgICAgIWZhbk91dC5kZWNpZGVyRm4gJiZcbiAgICAgIChxdWV1ZXNbbGV2ZWxdID09PSB1bmRlZmluZWQgfHwgcXVldWVzW2xldmVsXSEuZmFuT3V0ID09PSBmYW5PdXQpO1xuICAgIGlmICghaXNTaWJsaW5nIHx8ICF3YWxrc1RvSXRzU3RhZ2UoY2hhcnQsIHN1YmZsb3dzLCBncmFwaCwgcGF1c2UsIGxldmVsKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHJlc3VtZTogY2hlY2twb2ludC5wZW5kaW5nUGF1c2VzWyR7bn1dICgnJHtwYXVzZS5wYXVzZWRTdGFnZUlkfScpIGlzIG5vdCBhIHBhcmFsbGVsIHNpYmxpbmcgb2YgYCArXG4gICAgICAgICAgYHRoZSBwYXVzZWQgc3RhZ2UgJyR7cGF1c2VkPy5pZCA/PyAnPyd9JyBpbiB0aGlzIGNoYXJ0IOKAlCBubyBmb3JrIG9yIHNlbGVjdG9yIHJ1bnMgdGhlbSBib3RoLCBvciBpdHMgYCArXG4gICAgICAgICAgJ3BhdGggZG9lcyBub3QgbGVhZCB0byB0aGF0IHN0YWdlLiBUaGUgY2hhcnQgbWF5IGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgY2hlY2twb2ludCB3YXMgY3JlYXRlZC4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgbGVhZlJvb3QgPVxuICAgICAgcGF1c2Uuc3ViZmxvd1BhdGgubGVuZ3RoID09PSAwID8gcm9vdCA6IG93bkVudHJ5KHN1YmZsb3dzLCBwYXVzZS5zdWJmbG93UGF0aFtwYXVzZS5zdWJmbG93UGF0aC5sZW5ndGggLSAxXSk/LnJvb3Q7XG4gICAgY29uc3Qgc3RhZ2VOYW1lID0gKGxlYWZSb290ICYmIGNoYXJ0LnN0YWdlKGxlYWZSb290LCBwYXVzZS5wYXVzZWRTdGFnZUlkKT8ubmFtZSkgPz8gcGF1c2UucGF1c2VkU3RhZ2VJZDtcbiAgICBjb25zdCBxdWV1ZSA9IChxdWV1ZXNbbGV2ZWxdID8/PSB7IGZhbk91dDogZmFuT3V0ISwgcGF1c2VzOiBbXSB9KTtcbiAgICBxdWV1ZS5wYXVzZXMucHVzaCh7IHBhdXNlLCBsZXZlbCwgc3RhZ2VOYW1lIH0pO1xuICB9KTtcbiAgcmV0dXJuIHF1ZXVlcztcbn1cblxuLyoqXG4gKiBXaGV0aGVyIGEgd2FpdGluZyBzaWJsaW5nJ3MgV0hPTEUgcGF0aCBiZWxvdyBpdHMgZmFuLW91dCB3YWxrcyB0aGlzIGNoYXJ0OlxuICogZXZlcnkgc2VnbWVudCB0aGUgb25seSBtb3VudCBvZiBpdHMgc3ViZmxvdyBpbiB0aGUgZW5jbG9zaW5nIGdyYXBoLCBldmVyeVxuICogc3ViZmxvdyByZWdpc3RlcmVkLCBhbmQgdGhlIHBhdXNlZCBzdGFnZSBpbiB0aGUgbGFzdCBncmFwaCDigJQgY2hlY2tlZCBhdFxuICogdGhlIEZJUlNUIHJlc3VtZSwgc28gYSB0YW1wZXJlZCByZWNvcmQgaXMgcmVmdXNlZCB1cCBmcm9udCwgbm90IHdoZW4gaXRzXG4gKiB0dXJuIGNvbWVzLlxuICovXG5mdW5jdGlvbiB3YWxrc1RvSXRzU3RhZ2U8VE91dCwgVFNjb3BlPihcbiAgY2hhcnQ6IENoYXJ0SW5kZXg8VE91dCwgVFNjb3BlPixcbiAgc3ViZmxvd3M6IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfT4gfCB1bmRlZmluZWQsXG4gIGZhbk91dEdyYXBoOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgcGF1c2U6IFBlbmRpbmdQYXVzZSxcbiAgbGV2ZWw6IG51bWJlcixcbik6IGJvb2xlYW4ge1xuICBsZXQgZ3JhcGggPSBmYW5PdXRHcmFwaDtcbiAgZm9yIChsZXQgaSA9IGxldmVsOyBpIDwgcGF1c2Uuc3ViZmxvd1BhdGgubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoY2hhcnQubW91bnRzT2YoZ3JhcGgsIHBhdXNlLnN1YmZsb3dQYXRoW2ldKS5sZW5ndGggIT09IDEpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gb3duRW50cnkoc3ViZmxvd3MsIHBhdXNlLnN1YmZsb3dQYXRoW2ldKTtcbiAgICBpZiAoIWRlZmluaXRpb24pIHJldHVybiBmYWxzZTtcbiAgICBncmFwaCA9IGRlZmluaXRpb24ucm9vdDtcbiAgfVxuICByZXR1cm4gY2hhcnQuc3RhZ2UoZ3JhcGgsIHBhdXNlLnBhdXNlZFN0YWdlSWQpICE9PSB1bmRlZmluZWQ7XG59XG5cbi8qKiBgcmVjb3JkW2tleV1gIG9ubHkgd2hlbiBpdCBpcyB0aGUgcmVjb3JkJ3MgT1dOIHByb3BlcnR5IOKAlCBuZXZlciB0aHJvdWdoIHRoZSBwcm90b3R5cGUgY2hhaW4uICovXG5mdW5jdGlvbiBvd25FbnRyeTxUPihyZWNvcmQ6IFJlY29yZDxzdHJpbmcsIFQ+IHwgdW5kZWZpbmVkLCBrZXk6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuICByZXR1cm4gcmVjb3JkICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZWNvcmQsIGtleSkgPyByZWNvcmRba2V5XSA6IHVuZGVmaW5lZDtcbn1cbiJdfQ==
|
|
449
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzdW1lRW50cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9oYW5kbGVycy9SZXN1bWVFbnRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4REc7QUFFSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUE4Q3RFLE1BQU0sT0FBTyxXQUFXO0lBQ3RCOzs7OztPQUtHO0lBQ00sS0FBSyxDQUFzQztJQUNwRCw2RkFBNkY7SUFDcEYsa0JBQWtCLENBQXFDO0lBQ2hFOzs7Ozs7T0FNRztJQUNNLGtCQUFrQixDQUFxQjtJQUNoRCxpRkFBaUY7SUFDaEUsT0FBTyxDQUF1QztJQUUvRCxZQUNFLEtBQTBDLEVBQzFDLElBQXdDLEVBQ3hDLGtCQUEyQyxFQUMzQyxrQkFBMkI7UUFFM0IsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBQzdDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUM3QyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztPQWlCRztJQUNILE1BQU0sQ0FBQyxJQUFJLENBQWUsSUFPekI7UUFDQyxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8s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O1FBQ3RELElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDM0UsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUM5QixLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztJQUMxQixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUssU0FBUyxDQUFDO0FBQy9ELENBQUM7QUFFRCxtR0FBbUc7QUFDbkcsU0FBUyxRQUFRLENBQUksTUFBcUMsRUFBRSxHQUFXO0lBQ3JFLE9BQU8sTUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQy9GLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJlc3VtZUVudHJ5IOKAlCB0aGUgcmVzdW1lJ3MgT05FLVNIT1QgcmUtZW50cnkgKE0yLCBwYXVzZS9yZXN1bWUpLlxuICpcbiAqIEEgcmVzdW1lIGhhcyB0byBnZXQgYmFjayB0byBhIHN0YWdlIGluIHRoZSBtaWRkbGUgb2YgYSBjaGFydC4gSXQgZG9lcyB0aGF0XG4gKiB3aXRoIGEgc21hbGwgc3ludGhldGljIHN0cnVjdHVyZTogYSBzdGFuZC1pbiBmb3IgdGhlIHBhdXNlZCBzdGFnZSAodGhlXG4gKiBzdGFnZSdzIG93biBub2RlIHdpdGggaXRzIGZ1bmN0aW9uIHN3YXBwZWQgZm9yIHRoZSByZXN1bWUgaGFsZiDigJQgb3IsIGZvciBhblxuICogYGludGVycnVwdCgpYCBwYXVzZSwgZm9yIGl0cyBvd24gZnVuY3Rpb24gd2l0aCB0aGUgYW5zd2VyIGRlcG9zaXRlZCksIGFuZCxcbiAqIGZvciBhIHBhdXNlIGluc2lkZSBzdWJmbG93cywgdGhlIGNoZWNrcG9pbnQncyBjYXB0dXJlIG9mIGVhY2ggc3ViZmxvdydzXG4gKiBzdGF0ZSBvbiB0aGUgd2F5IGRvd24uXG4gKlxuICogVEhFIExBVzogdGhhdCBzdHJ1Y3R1cmUgaXMgdXNlZCBFWEFDVExZIE9OQ0UsIGZvciB0aGUgcmUtZW50cnkuIFRoZSBzdGFuZC1pblxuICogaXMgd2hlcmUgdGhlIHJlc3VtZWQgdHJhdmVyc2FsIFNUQVJUUyAob3Igd2hlcmUgdGhlIGxlYWYgc3ViZmxvdydzIHRyYXZlcnNhbFxuICogc3RhcnRzKSDigJQgaXQgaXMgbmV2ZXIgYSBub2RlIGFueSBpZCBjYW4gcmVzb2x2ZSB0by4gRWFjaCBzdWJmbG93IG9uIHRoZSBwYXVzZVxuICogcGF0aCB0YWtlcyBpdHMgc2VlZCBhbmQgaXRzIGVudHJ5IHBvaW50IG9uIGl0cyBGSVJTVCBlbnRyeSBhbmQgbmV2ZXIgYWdhaW4uXG4gKiBBZnRlciB0aGF0IHRoZSBydW4gYmVsb25ncyB0byB0aGUgcmVhbCBjaGFydDogZXZlcnkgbG9vcCB0YXJnZXQsIGV2ZXJ5IGxhdGVyXG4gKiBzdWJmbG93IGVudHJ5IChyZWFsIHJvb3QsIGlucHV0TWFwcGVyIHJ1bnMpLCBldmVyeSByZS12aXNpdCBvZiB0aGUgcGF1c2VkXG4gKiBzdGFnZSAod2hpY2ggcGF1c2VzIGFnYWluKSByZXNvbHZlcyBhZ2FpbnN0IHRoZSBjaGFydCBhcyBidWlsdC5cbiAqXG4gKiBPTkUgUlVMRSBBVCBFVkVSWSBMRVZFTCDigJQgd2hhdCBydW5zIGFmdGVyIHRoZSBlbnRyeS4gT24gdGhlIG9yaWdpbmFsIHJ1bixcbiAqIHdoYXRldmVyIERJU1BBVENIRUQgdGhlIHBhdXNlZCBzdGFnZSAob3IgdGhlIG1vdW50IG9mIHRoZSBuZXh0IHN1YmZsb3cgb25cbiAqIHRoZSBwYXRoKSDigJQgYSBkZWNpZGVyLCBhIHNlbGVjdG9yLCBhIGZvcmsg4oCUIHJhbiBpdHMgb3duIGNvbnRpbnVhdGlvbiBvbmNlXG4gKiB0aGF0IGNoaWxkJ3MgY2hhaW4gZW5kZWQ6IHRoZSBkZWNpZGVyJ3MgYG5leHRgLCB0aGUgZm9yaydzIGpvaW4uIEEgcmVzdW1lXG4gKiBlbnRlcnMgQVQgdGhlIGNoaWxkLCBzbyB0aGF0IGNvbnRpbnVhdGlvbiBtdXN0IGJlIGNhcnJpZWQ6IHRoZSBlbnRyeSBpc1xuICogdGhlIGNoaWxkIHdpdGggdGhlIGVuY2xvc2luZyBkaXNwYXRjaGVyJ3MgY29udGludWF0aW9uIGF0dGFjaGVkIGF0IHRoZSBlbmRcbiAqIG9mIGl0cyBvd24gY2hhaW4gKGB7IC4uLmNoaWxkLCBuZXh0OiBkaXNwYXRjaGVyLm5leHQgfWAgZm9yIGEgY2hhcnQgdGhlXG4gKiBidWlsZGVyIG1hZGUpLiBJdCBpcyByZWFkIGZyb20gdGhlIENIQVJULCBsZXZlbCBieSBsZXZlbCDigJQgbmV2ZXIgZnJvbSB0aGVcbiAqIGNoZWNrcG9pbnQsIHNvIGFuIGVkaXRlZCBjaGVja3BvaW50IGNhbm5vdCByZWRpcmVjdCBhIHJ1biDigJQgYW5kIGl0IGxhbmRzXG4gKiBhdCB0aGUgbGV2ZWwgaXQgYmVsb25ncyB0bzogYSB0b3AtbGV2ZWwgZGVjaWRlcidzIGBuZXh0YCBydW5zIGF0IHRoZSB0b3BcbiAqIGxldmVsLCBhZnRlciB0aGUgc3ViZmxvdydzIG91dHB1dE1hcHBlciwgbm90IGluc2lkZSB0aGUgc3ViZmxvdy5cbiAqXG4gKiBQQVJBTExFTCBTSUJMSU5HUyBUSEFUIFBBVVNFRCBUT08gKDkuMjguMCkuIFdoZW4gdHdvIGNoaWxkcmVuIG9mIG9uZVxuICogZmFuLW91dCBwYXVzZWQsIHRoZSBjaGVja3BvaW50IGFza3MgdGhlIGZpcnN0IGFuZCBjYXJyaWVzIHRoZSBvdGhlcnNcbiAqIChgRmxvd2NoYXJ0Q2hlY2twb2ludC5wZW5kaW5nUGF1c2VzYCkuIEF0IHRoYXQgZmFuLW91dCdzIGxldmVsIHRoZSBlbnRyeSBpc1xuICogdGhlIGNoaWxkJ3Mgb3duIGNoYWluIG9ubHkg4oCUIG5vIGpvaW4g4oCUIGFuZCBvbmNlIGl0IGVuZHMsIHRoZSBuZXh0IHNpYmxpbmcnc1xuICogcGF1c2UgaXMgcmFpc2VkIGFnYWluIGFzIGl0IHdhcyAoaXRzIHF1ZXN0aW9uLCBpdHMgY2FwdHVyZWQgc3RhdGUpLCB3aXRob3V0XG4gKiByZS1ydW5uaW5nIGFueXRoaW5nLiBUaGUgam9pbiBydW5zIG9ubHkgd2hlbiB0aGUgbGFzdCBzaWJsaW5nIGlzIHJlc3VtZWQuXG4gKlxuICogQmVmb3JlIDkuMjguMCB0aGUgc3RydWN0dXJlIHN0YXllZCBpbiBmb3JjZSBmb3IgdGhlIHdob2xlIHJlc3VtZWQgcnVuIOKAlCB0aGVcbiAqIHRyYXZlcnNhbCB3YXMgUk9PVEVEIGF0IHRoZSBzdGFuZC1pbiAoc28gYSBsb29wIGJhY2sgdG8gdGhlIHBhdXNlZCBpZCByZS1yYW5cbiAqIHRoZSByZXN1bWUgaGFsZiwgYW5kIGEgbG9vcCB0YXJnZXQgdXBzdHJlYW0gb2YgdGhlIHJlc3VtZSBwb2ludCB3YXNcbiAqIHVucmVhY2hhYmxlOiBvbmUgc3RhZ2UgcmFuLCB0aGVuIHRoZSBydW4gZW5kZWQgc2lsZW50bHkpLCBhbmQgdGhlIGxlYWZcbiAqIHN1YmZsb3cncyByb290IHdhcyBTV0FQUEVEIGZvciB0aGUgc3RhbmQtaW4gaW4gdGhlIHN1YmZsb3cgZGljdGlvbmFyeSAoc28gYVxuICogbGF0ZXIgZW50cnkgaW50byBpdCB3b3VsZCByZS1ydW4gdGhlIHJlc3VtZSBoYWxmIG9uIGEgc3RhbGUgc2VlZCkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIFdoYXQgRmxvd0NoYXJ0RXhlY3V0b3IucmVzdW1lKCkgYnVpbGRzIGZvciBhIHBhdXNlIGF0ICdzZi1hL3NmLWIvYXNrJ1xuICogLy8gKHN1YmZsb3dQYXRoIFsnc2YtYScsICdzZi1hL3NmLWInXSksICdzZi1hL3NmLWInIG1vdW50ZWQgYXMgYSBkZWNpZGVyXG4gKiAvLyBicmFuY2ggaW5zaWRlIHNmLWEgd2hvc2UgZGVjaWRlciBjb250aW51ZXMgdG8gJ3NmLWEvYWZ0ZXInOlxuICogY29uc3QgZW50cnkgPSBSZXN1bWVFbnRyeS5wbGFuKHsgcm9vdCwgc3ViZmxvd3MsIHBhdGgsIGNhcHR1cmVzLCBzdGFuZEluIH0pO1xuICogZW50cnkuc3RhcnQ7ICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHRvcC1sZXZlbCBtb3VudCBvZiAnc2YtYSdcbiAqIGVudHJ5LmVudGVyU3ViZmxvdygnc2YtYScpOyAgICAgIC8vIHsgc2VlZDogc2YtYSdzIGNhcHR1cmUsIGVudHJ5OiB7IC4uLm1vdW50IG9mICdzZi1hL3NmLWInLCBuZXh0OiBzZi1hL2FmdGVyIH0gfVxuICogZW50cnkuZW50ZXJTdWJmbG93KCdzZi1hL3NmLWInKTsgLy8geyBzZWVkOiBzZi1iJ3MgY2FwdHVyZSwgZW50cnk6IHRoZSBzdGFuZC1pbiB9XG4gKiBlbnRyeS5lbnRlclN1YmZsb3coJ3NmLWEvc2YtYicpOyAvLyB1bmRlZmluZWQg4oCUIGEgbGF0ZXIgZW50cnkgaXMgYW4gb3JkaW5hcnkgb25lXG4gKiBgYGBcbiAqXG4gKiBBIHBhdXNlIHR3byAob3IgbW9yZSkgc3ViZmxvd3MgZGVlcCB0aGVyZWZvcmUgcmUtZW50ZXJzIGVhY2ggb3V0ZXIgc3ViZmxvd1xuICogQVQgdGhlIG1vdW50IG9mIHRoZSBuZXh0IG9uZSDigJQgdGhlIG91dGVyIHN1YmZsb3cncyBzdGFnZXMgYmVmb3JlIHRoYXQgbW91bnRcbiAqIGRvIG5vdCBydW4gYWdhaW4gKHRoZXkgZGlkIGJlZm9yZSA5LjI4LjApLiBUaGUgb25lIGV4Y2VwdGlvbiBpcyBhIGRlZ3JhZGVkXG4gKiBjaGVja3BvaW50IG1pc3NpbmcgYW4gb3V0ZXIgc3ViZmxvdydzIGNhcHR1cmU6IHRoYXQgc3ViZmxvdyByZS1ydW5zIGZyb20gaXRzXG4gKiByb290IHdpdGggaXRzIGlucHV0TWFwcGVyIChpdHMgZWFybGllciBzdGFnZXMgcmVjb21wdXRlIHdoYXQgdGhlIGNhcHR1cmVcbiAqIHdvdWxkIGhhdmUgaGVsZCksIGV4YWN0bHkgYXMgOS4yNy4wIGRpZC5cbiAqL1xuXG5pbXBvcnQgeyBkZWNvZGVQZW5kaW5nUGF1c2VzIH0gZnJvbSAnLi4vLi4vcGF1c2UvcmVjb3JkLmpzJztcbmltcG9ydCB0eXBlIHsgUGVuZGluZ1BhdXNlIH0gZnJvbSAnLi4vLi4vcGF1c2UvdHlwZXMuanMnO1xuaW1wb3J0IHsgaXNQYXVzZWRFeGVjdXRpb24sIFBhdXNlU2lnbmFsIH0gZnJvbSAnLi4vLi4vcGF1c2UvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZU5vZGUgfSBmcm9tICcuLi9ncmFwaC9TdGFnZU5vZGUuanMnO1xuXG4vKipcbiAqIEEgcGFyYWxsZWwgc2libGluZydzIHBhdXNlLCBxdWV1ZWQgYXQgdGhlIGxldmVsIG9mIGl0cyBmYW4tb3V0OiByYWlzZWRcbiAqIGFnYWluIHRoZXJlIG9uY2UgdGhlIHJlc3VtZWQgY2hpbGQncyBjaGFpbiBlbmRzIChzZWUge0BsaW5rIHJhaXNlUXVldWVkUGF1c2V9KS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWV1ZWRQYXVzZSB7XG4gIC8qKiBUaGUgc2libGluZydzIHBhdXNlIGFzIHRoZSBjaGVja3BvaW50IGNhcnJpZXMgaXQg4oCUIGl0cyBwYXRoIGZyb20gdGhlIHRvcC4gKi9cbiAgcmVhZG9ubHkgcGF1c2U6IFBlbmRpbmdQYXVzZTtcbiAgLyoqIEhvdyBtYW55IHN1YmZsb3dzIGRlZXAgdGhlIGZhbi1vdXQgc2l0cyAoMCA9IHRoZSB0b3AgbGV2ZWwpLiAqL1xuICByZWFkb25seSBsZXZlbDogbnVtYmVyO1xuICAvKiogVGhlIHNpYmxpbmcncyBwYXVzZWQgc3RhZ2UncyBuYW1lLCBmb3IgdGhlIGBvblBhdXNlYCBldmVudC4gKi9cbiAgcmVhZG9ubHkgc3RhZ2VOYW1lOiBzdHJpbmc7XG59XG5cbi8qKiBPbmUgc3ViZmxvdyBib3VuZGFyeSBvbiB0aGUgd2F5IGJhY2sgdG8gYSBwYXVzZWQgc3RhZ2UuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc3VtZUhvcDxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgLyoqIFRoZSBwYXRoLXByZWZpeGVkIHN1YmZsb3cgaWQgKGEgYEZsb3djaGFydENoZWNrcG9pbnQuc3ViZmxvd1BhdGhgIGVudHJ5KS4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd0lkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc3ViZmxvdydzIHN0YXRlIGF0IHRoZSBwYXVzZSAoYGNoZWNrcG9pbnQuc3ViZmxvd1N0YXRlc1tzdWJmbG93SWRdYCkuXG4gICAqIFNlZWRzIHRoZSBuZXN0ZWQgcnVudGltZSBJTlNURUFEIG9mIHRoZSBpbnB1dE1hcHBlcidzIHZhbHVlcyDigJQgdGhlIGNhcHR1cmVcbiAgICogYWxyZWFkeSBob2xkcyB0aGUgcG9zdC1pbnB1dCwgcHJlLXBhdXNlIG1lbW9yeSAodGhlIGlucHV0TWFwcGVyIHN0aWxsXG4gICAqIHJ1bnMsIGZvciB0aGUgc3RhZ2VzJyByZWFkLW9ubHkgYXJncyBvbmx5KS4gQWJzZW50IHdoZW4gdGhlIGNoZWNrcG9pbnRcbiAgICogaG9sZHMgbm8gY2FwdHVyZSBmb3IgdGhpcyBzdWJmbG93OyB0aGUgaW5wdXRNYXBwZXIgdGhlbiBzZWVkcyBpdCwgYXMgb25cbiAgICogYW55IGVudHJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgc2VlZD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKipcbiAgICogV2hlcmUgdGhpcyBzdWJmbG93J3MgdHJhdmVyc2FsIHN0YXJ0cyBvbiB0aGUgcmUtZW50cnk6IHRoZSBtb3VudCBvZiB0aGVcbiAgICogbmV4dCBzdWJmbG93IG9uIHRoZSBwYXRoLCBvciDigJQgb24gdGhlIGxhc3QgaG9wIOKAlCB0aGUgcGF1c2VkIHN0YWdlJ3NcbiAgICogc3RhbmQtaW4sIGVhY2ggd2l0aCBpdHMgZGlzcGF0Y2hlcidzIGNvbnRpbnVhdGlvbiBhdHRhY2hlZCAoc2VlIHRoZVxuICAgKiBtb2R1bGUgZG9jKS4gQWJzZW50OiB0aGUgc3ViZmxvdydzIG93biByb290IOKAlCBhIHNlZWQtb25seSBob3AgKHNlZVxuICAgKiB7QGxpbmsgUmVzdW1lRW50cnkuZnJvbUNhcHR1cmVzfSksIG9yIGFuIG91dGVyIHN1YmZsb3cgd2hvc2UgY2FwdHVyZSB0aGVcbiAgICogY2hlY2twb2ludCBsYWNrcy5cbiAgICovXG4gIHJlYWRvbmx5IGVudHJ5PzogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIC8qKlxuICAgKiBQYXVzZXMgb2YgcGFyYWxsZWwgc2libGluZ3Mgd2hvc2UgZmFuLW91dCBzaXRzIGluIFRISVMgc3ViZmxvdywgcmFpc2VkIGluXG4gICAqIG9yZGVyIG9uY2UgYGVudHJ5YCdzIGNoYWluIGVuZHMgKHRoZSBmaXJzdCBpcyByYWlzZWQsIHRoZSByZXN0IHdhaXRcbiAgICogYmVoaW5kIGl0KS4gQWJzZW50IHdoZW4gbm8gc2libGluZyBpcyB3YWl0aW5nIGhlcmUuXG4gICAqL1xuICByZWFkb25seSBwZW5kaW5nUGF1c2VzPzogcmVhZG9ubHkgUXVldWVkUGF1c2VbXTtcbn1cblxuZXhwb3J0IGNsYXNzIFJlc3VtZUVudHJ5PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICAvKipcbiAgICogV2hlcmUgdGhlIHJlc3VtZWQgVE9QLUxFVkVMIHRyYXZlcnNhbCBzdGFydHM6IHRoZSBzdGFuZC1pbiAoYSB0b3AtbGV2ZWxcbiAgICogcGF1c2UpIG9yIHRoZSBtb3VudCBvZiB0aGUgZmlyc3Qgc3ViZmxvdyBvbiB0aGUgcGF0aCDigJQgZWFjaCB3aXRoIGl0c1xuICAgKiBkaXNwYXRjaGVyJ3MgY29udGludWF0aW9uIGF0dGFjaGVkLiBgdW5kZWZpbmVkYCBmb3IgYSBzZWVkLW9ubHkgZW50cnkg4oCUXG4gICAqIHRoZSB0cmF2ZXJzYWwgc3RhcnRzIGF0IGl0cyByb290LlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnQ6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkO1xuICAvKiogU2libGluZyBwYXVzZXMgd2hvc2UgZmFuLW91dCBzaXRzIGF0IHRoZSBUT1AgbGV2ZWwg4oCUIHJhaXNlZCBvbmNlIGBzdGFydGAncyBjaGFpbiBlbmRzLiAqL1xuICByZWFkb25seSBzdGFydFBlbmRpbmdQYXVzZXM6IHJlYWRvbmx5IFF1ZXVlZFBhdXNlW10gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBIb3cgbWFueSBzdGFnZSBleGVjdXRpb25zIHRoZSByZXN1bWVkIHJ1biBtYWtlcyBiZWZvcmUgdGhlIHN0YW5kLWluIHJ1bnNcbiAgICog4oCUIG9uZSBwZXIgc3ViZmxvdyBvbiB0aGUgcGF0aCwgZWFjaCBlbnRlcmVkIGF0IGl0cyBtb3VudCDigJQgc28gdGhlXG4gICAqIGV4ZWN1dG9yJ3MgYG9uUmVzdW1lYCBuYW1lcyB0aGUgc3RhbmQtaW4ncyBvd24gYHJ1bnRpbWVTdGFnZUlkYC5cbiAgICogYHVuZGVmaW5lZGAgd2hlbiBpdCBjYW5ub3QgYmUga25vd24gYmVmb3JlIHRoZSBydW46IGFuIG91dGVyIHN1YmZsb3dcbiAgICogbWlzc2luZyBpdHMgY2FwdHVyZSByZS1ydW5zIGZyb20gaXRzIHJvb3QuXG4gICAqL1xuICByZWFkb25seSBzdGVwc0JlZm9yZVN0YW5kSW46IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgLyoqIEhvcHMgbm90IHRha2VuIHlldCwgYnkgc3ViZmxvdyBpZC4gQSBob3AgbGVhdmVzIHRoaXMgbWFwIHdoZW4gaXQgaXMgdGFrZW4uICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcGVuZGluZzogTWFwPHN0cmluZywgUmVzdW1lSG9wPFRPdXQsIFRTY29wZT4+O1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgc3RhcnQ6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkLFxuICAgIGhvcHM6IHJlYWRvbmx5IFJlc3VtZUhvcDxUT3V0LCBUU2NvcGU+W10sXG4gICAgc3RhcnRQZW5kaW5nUGF1c2VzPzogcmVhZG9ubHkgUXVldWVkUGF1c2VbXSxcbiAgICBzdGVwc0JlZm9yZVN0YW5kSW4/OiBudW1iZXIsXG4gICkge1xuICAgIHRoaXMuc3RhcnQgPSBzdGFydDtcbiAgICB0aGlzLnN0YXJ0UGVuZGluZ1BhdXNlcyA9IHN0YXJ0UGVuZGluZ1BhdXNlcztcbiAgICB0aGlzLnN0ZXBzQmVmb3JlU3RhbmRJbiA9IHN0ZXBzQmVmb3JlU3RhbmRJbjtcbiAgICB0aGlzLnBlbmRpbmcgPSBuZXcgTWFwKGhvcHMubWFwKChob3ApID0+IFtob3Auc3ViZmxvd0lkLCBob3BdKSk7XG4gIH1cblxuICAvKipcbiAgICogUGxhbiB0aGUgcmUtZW50cnkgb2YgYSBwYXVzZWQgY2hhcnQuIEV2ZXJ5IG1vdW50IG9uIHRoZSBwYXRoLCBldmVyeVxuICAgKiBkaXNwYXRjaGVyIGNvbnRpbnVhdGlvbiBhbmQgZXZlcnkgd2FpdGluZyBzaWJsaW5nIGlzIHJlc29sdmVkIEhFUkUsXG4gICAqIGFnYWluc3QgdGhlIGNoYXJ0IGFzIGJ1aWx0LCBiZWZvcmUgYSBzaW5nbGUgc3RhZ2UgcnVucyDigJQgc28gYSBjaGVja3BvaW50XG4gICAqIHdob3NlIHBhdGggdGhlIGNoYXJ0IGNhbm5vdCB3YWxrIGlzIHJlZnVzZWQgdXAgZnJvbnQgaW5zdGVhZCBvZiByZXN1bWluZ1xuICAgKiBpbnRvIHRoZSB3cm9uZyBzaGFwZS5cbiAgICpcbiAgICogQHBhcmFtIGFyZ3MgLSBgcm9vdGAgYW5kIGBzdWJmbG93c2A6IHRoZSBjaGFydCBhcyBidWlsdFxuICAgKiAgIChgRmxvd0NoYXJ0LnJvb3RgLCBgRmxvd0NoYXJ0LnN1YmZsb3dzYCk7IGBwYXRoYDpcbiAgICogICBgY2hlY2twb2ludC5zdWJmbG93UGF0aGAsIG91dGVybW9zdCBmaXJzdDsgYGNhcHR1cmVzYDpcbiAgICogICBgY2hlY2twb2ludC5zdWJmbG93U3RhdGVzYCAoYSBkZXRhY2hlZCBjb3B5KTsgYHN0YW5kSW5gOiB0aGUgbm9kZSB0aGF0XG4gICAqICAgcnVucyB0aGUgcmVzdW1lIGhhbGYg4oCUIHRoZSBwYXVzZWQgc3RhZ2UncyBvd24gbm9kZSwgZnVuY3Rpb24gc3dhcHBlZFxuICAgKiAgIChpdHMgY29udGludWF0aW9uIGlzIGF0dGFjaGVkIGhlcmUpOyBgcGVuZGluZ1BhdXNlc2A6XG4gICAqICAgYGNoZWNrcG9pbnQucGVuZGluZ1BhdXNlc2AgKGEgZGV0YWNoZWQgY29weSkuXG4gICAqIEB0aHJvd3Mgd2hlbiBhIHN1YmZsb3cgb24gdGhlIHBhdGggaXMgbWlzc2luZywgbW91bnRlZCBtb3JlIHRoYW4gb25jZSwgb3JcbiAgICogICBpdHMgbW91bnQgY2Fubm90IGJlIHJlYWNoZWQgZnJvbSB0aGUgZW5jbG9zaW5nIGdyYXBoOyBvciB3aGVuIGEgcGVuZGluZ1xuICAgKiAgIHBhdXNlIGlzIG1hbGZvcm1lZCBvciBpcyBub3QgYSBwYXJhbGxlbCBzaWJsaW5nIG9mIHRoZSBwYXVzZWQgc3RhZ2VcbiAgICovXG4gIHN0YXRpYyBwbGFuPFRPdXQsIFRTY29wZT4oYXJnczoge1xuICAgIHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICAgIHN1YmZsb3dzOiBSZWNvcmQ8c3RyaW5nLCB7IHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IH0+IHwgdW5kZWZpbmVkO1xuICAgIHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAgIGNhcHR1cmVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gfCB1bmRlZmluZWQ7XG4gICAgc3RhbmRJbjogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gICAgcGVuZGluZ1BhdXNlcz86IHJlYWRvbmx5IFBlbmRpbmdQYXVzZVtdO1xuICB9KTogUmVzdW1lRW50cnk8VE91dCwgVFNjb3BlPiB7XG4gICAgY29uc3QgeyByb290LCBzdWJmbG93cywgcGF0aCwgY2FwdHVyZXMsIHN0YW5kSW4gfSA9IGFyZ3M7XG4gICAgY29uc3QgY2hhcnQgPSBuZXcgQ2hhcnRJbmRleDxUT3V0LCBUU2NvcGU+KCk7XG5cbiAgICAvLyAxLiBXYWxrIHRoZSBwYXRoOiB0aGUgZ3JhcGggb2YgZXZlcnkgbGV2ZWwsIHRoZSBtb3VudCBvZiBldmVyeSBzdWJmbG93LlxuICAgIGNvbnN0IGdyYXBoczogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT5bXSA9IFtyb290XTtcbiAgICBjb25zdCBtb3VudHM6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W10gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHN1YmZsb3dJZCA9IHBhdGhbaV07XG4gICAgICBtb3VudHMucHVzaChjaGFydC5vbmx5TW91bnQoZ3JhcGhzW2ldLCBzdWJmbG93SWQsIGkgPT09IDAgPyAndGhlIGZsb3djaGFydCcgOiBgc3ViZmxvdyAnJHtwYXRoW2kgLSAxXX0nYCkpO1xuICAgICAgLy8gT3duIGVudHJpZXMgb25seTogYSBwYXRoIHNlZ21lbnQgaXMgZGF0YSBmcm9tIGEgc3RvcmVkIGNoZWNrcG9pbnQsXG4gICAgICAvLyBhbmQgYCdfX3Byb3RvX18nYCBtdXN0IG5vdCByZXNvbHZlIHRocm91Z2ggdGhlIHByb3RvdHlwZSBjaGFpbi5cbiAgICAgIGNvbnN0IGRlZmluaXRpb24gPSBvd25FbnRyeShzdWJmbG93cywgc3ViZmxvd0lkKTtcbiAgICAgIGlmICghZGVmaW5pdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYENhbm5vdCByZXN1bWU6IHN1YmZsb3cgJyR7c3ViZmxvd0lkfScgaXMgbm90IHJlZ2lzdGVyZWQgaW4gdGhlIGZsb3djaGFydC4gYCArXG4gICAgICAgICAgICAnVGhlIGNoYXJ0IG1heSBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIGNoZWNrcG9pbnQgd2FzIGNyZWF0ZWQuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGdyYXBocy5wdXNoKGRlZmluaXRpb24ucm9vdCk7XG4gICAgfVxuICAgIGNvbnN0IGxlYWZMZXZlbCA9IHBhdGgubGVuZ3RoO1xuICAgIC8vIFRoZSBwYXVzZWQgc3RhZ2UncyBSRUFMIG5vZGUg4oCUIHdob3NlIGRpc3BhdGNoZXIgdGhlIHN0YW5kLWluJ3NcbiAgICAvLyBjb250aW51YXRpb24gY29tZXMgZnJvbS4gKFRoZSBleGVjdXRvciBhbHJlYWR5IGZvdW5kIGl0OyBhIGRpcmVjdFxuICAgIC8vIGNhbGxlcidzIHN0YW5kLWluIHRoYXQgaXMgbm90IGluIHRoZSBsZWFmIGdyYXBoIHNpbXBseSBoYXMgbm9uZS4pXG4gICAgY29uc3QgcGF1c2VkID0gY2hhcnQuc3RhZ2UoZ3JhcGhzW2xlYWZMZXZlbF0sIHN0YW5kSW4uaWQpO1xuXG4gICAgLy8gMi4gUXVldWUgZXZlcnkgd2FpdGluZyBzaWJsaW5nIHBhdXNlIGF0IHRoZSBsZXZlbCBvZiBpdHMgZmFuLW91dC5cbiAgICBjb25zdCBxdWV1ZXMgPSBxdWV1ZVNpYmxpbmdQYXVzZXMoYXJncy5wZW5kaW5nUGF1c2VzLCB7IGNoYXJ0LCBzdWJmbG93cywgcm9vdCwgcGF0aCwgZ3JhcGhzLCBtb3VudHMsIHBhdXNlZCB9KTtcblxuICAgIC8vIDMuIFRoZSBvbmUtc2hvdCBlbnRyeSBvZiBldmVyeSBsZXZlbDogdGhlIGNoaWxkLCB0aGVuIGl0cyBkaXNwYXRjaGVyJ3NcbiAgICAvLyAgICBjb250aW51YXRpb24g4oCUIHVwIHRvIHRoZSBmYW4tb3V0IHdoZW4gc2libGluZ3Mgd2FpdCB0aGVyZS5cbiAgICBjb25zdCBjaGlsZEF0ID0gKGxldmVsOiBudW1iZXIpID0+IChsZXZlbCA8IGxlYWZMZXZlbCA/IG1vdW50c1tsZXZlbF0gOiBwYXVzZWQpO1xuICAgIGNvbnN0IGVudHJ5QXQgPSAobGV2ZWw6IG51bWJlcik6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+ID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRBdChsZXZlbCk7XG4gICAgICBjb25zdCByZXBsYWNlbWVudCA9IGxldmVsIDwgbGVhZkxldmVsID8gbW91bnRzW2xldmVsXSA6IHN0YW5kSW47XG4gICAgICBpZiAoIWNoaWxkKSByZXR1cm4gcmVwbGFjZW1lbnQ7XG4gICAgICByZXR1cm4gY2hhcnQuZW50cnkoZ3JhcGhzW2xldmVsXSwgY2hpbGQsIHJlcGxhY2VtZW50LCBxdWV1ZXNbbGV2ZWxdPy5mYW5PdXQpO1xuICAgIH07XG4gICAgLy8gNC4gVGhlIGhvcHMuIEEgc3ViZmxvdyB3aXRoIG5vIGNhcHR1cmUgaXMgZW50ZXJlZCBhdCBpdHMgUk9PVCB3aXRoIGl0c1xuICAgIC8vICAgIGlucHV0TWFwcGVyIChpdHMgZWFybGllciBzdGFnZXMgcmVjb21wdXRlIHdoYXQgdGhlIGNhcHR1cmUgaGVsZCkg4oCUXG4gICAgLy8gICAgZXhjZXB0IHRoZSBsZWFmLCB3aG9zZSBlbnRyeSBpcyBhbHdheXMgdGhlIHN0YW5kLWluOiByZS1ydW5uaW5nIGl0XG4gICAgLy8gICAgZnJvbSBpdHMgcm9vdCB3b3VsZCBhc2sgYWdhaW4gYW5kIGxvc2UgdGhlIGFuc3dlci5cbiAgICBjb25zdCBob3BzOiBSZXN1bWVIb3A8VE91dCwgVFNjb3BlPltdID0gW107XG4gICAgbGV0IGV2ZXJ5TGV2ZWxBdEl0c0VudHJ5ID0gdHJ1ZTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHN1YmZsb3dJZCA9IHBhdGhbaV07XG4gICAgICBjb25zdCBzZWVkID0gb3duRW50cnkoY2FwdHVyZXMsIHN1YmZsb3dJZCk7XG4gICAgICBjb25zdCBpc0xlYWZIb3AgPSBpID09PSBwYXRoLmxlbmd0aCAtIDE7XG4gICAgICBpZiAoc2VlZCA9PT0gdW5kZWZpbmVkICYmICFpc0xlYWZIb3ApIHtcbiAgICAgICAgZXZlcnlMZXZlbEF0SXRzRW50cnkgPSBmYWxzZTtcbiAgICAgICAgaG9wcy5wdXNoKHsgc3ViZmxvd0lkIH0pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHdhaXRpbmcgPSBxdWV1ZXNbaSArIDFdPy5wYXVzZXM7XG4gICAgICBob3BzLnB1c2goe1xuICAgICAgICBzdWJmbG93SWQsXG4gICAgICAgIC4uLihzZWVkICE9PSB1bmRlZmluZWQgJiYgeyBzZWVkIH0pLFxuICAgICAgICBlbnRyeTogZW50cnlBdChpICsgMSksXG4gICAgICAgIC4uLih3YWl0aW5nICYmIHsgcGVuZGluZ1BhdXNlczogd2FpdGluZyB9KSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBFdmVyeSBsZXZlbCBlbnRlcmVkIGF0IGl0cyBlbnRyeTogb25lIGV4ZWN1dGlvbiAodGhlIG1vdW50KSBwZXIgbGV2ZWxcbiAgICAvLyBydW5zIGJlZm9yZSB0aGUgc3RhbmQtaW4uXG4gICAgcmV0dXJuIG5ldyBSZXN1bWVFbnRyeShlbnRyeUF0KDApLCBob3BzLCBxdWV1ZXNbMF0/LnBhdXNlcywgZXZlcnlMZXZlbEF0SXRzRW50cnkgPyBwYXRoLmxlbmd0aCA6IHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogQSBzZWVkLW9ubHkgZW50cnk6IGVhY2ggY2FwdHVyZSBzZWVkcyB0aGUgRklSU1QgZW50cnkgaW50byBpdHMgc3ViZmxvdyxcbiAgICogd2hpY2ggdGhlbiBzdGFydHMgYXQgaXRzIG93biByb290LiBQYXNzIGl0IGV4cGxpY2l0bHkgYXMgYHJlc3VtZWAgdG9cbiAgICogVHJhdmVyc2VyT3B0aW9ucyBvciBIYW5kbGVyRGVwcyDigJQgdGhlIHNhbWUgb25lLXNob3QgbGF3LCB3aXRob3V0IGFcbiAgICogc3RhbmQtaW4gb3IgYSBwYXRoLiBQcmVmZXIgYHBsYW5gIHdoZW4gcmVzdW1pbmcgYSBjaGVja3BvaW50LlxuICAgKi9cbiAgc3RhdGljIGZyb21DYXB0dXJlczxUT3V0LCBUU2NvcGU+KGNhcHR1cmVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pOiBSZXN1bWVFbnRyeTxUT3V0LCBUU2NvcGU+IHtcbiAgICByZXR1cm4gbmV3IFJlc3VtZUVudHJ5PFRPdXQsIFRTY29wZT4oXG4gICAgICB1bmRlZmluZWQsXG4gICAgICBPYmplY3QuZW50cmllcyhjYXB0dXJlcykubWFwKChbc3ViZmxvd0lkLCBzZWVkXSkgPT4gKHsgc3ViZmxvd0lkLCBzZWVkIH0pKSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZS1lbnRyeSBpbnRvIGBzdWJmbG93SWRgLCB0YWtlbiDigJQgb3IgYHVuZGVmaW5lZGAgd2hlbiB0aGlzIGVudHJ5IGlzXG4gICAqIGFuIG9yZGluYXJ5IG9uZSAodGhlIHN1YmZsb3cgaXMgb2ZmIHRoZSBwYXVzZSBwYXRoLCBvciBpdHMgaG9wIHdhcyBhbHJlYWR5XG4gICAqIHRha2VuKS4gT05FLVNIT1Q6IGEgaG9wIGlzIHJldHVybmVkIGF0IG1vc3Qgb25jZSwgc28gYSBzZWNvbmQgZW50cnkgaW50b1xuICAgKiB0aGUgc2FtZSBzdWJmbG93IChhIGxvb3AgcGFzc2luZyBpdHMgbW91bnQgYWdhaW4pIHJ1bnMgdGhlIHJlYWwgc3ViZmxvd1xuICAgKiBmcm9tIGl0cyByZWFsIHJvb3Qgd2l0aCBpdHMgaW5wdXRNYXBwZXIuXG4gICAqL1xuICBlbnRlclN1YmZsb3coc3ViZmxvd0lkOiBzdHJpbmcpOiBSZXN1bWVIb3A8VE91dCwgVFNjb3BlPiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaG9wID0gdGhpcy5wZW5kaW5nLmdldChzdWJmbG93SWQpO1xuICAgIGlmIChob3AgIT09IHVuZGVmaW5lZCkgdGhpcy5wZW5kaW5nLmRlbGV0ZShzdWJmbG93SWQpO1xuICAgIHJldHVybiBob3A7XG4gIH1cblxuICAvKiogYHRydWVgIG9uY2UgZXZlcnkgaG9wIGhhcyBiZWVuIHRha2VuIOKAlCB0aGUgcmVzdCBvZiB0aGUgcnVuIGlzIG9yZGluYXJ5LiAqL1xuICBnZXQgc3BlbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGVuZGluZy5zaXplID09PSAwO1xuICB9XG59XG5cbi8vIOKUgOKUgCBSYWlzaW5nIGEgd2FpdGluZyBzaWJsaW5nJ3MgcGF1c2Ug4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogUXVldWUgYHF1ZXVlYCBiZWhpbmQgYSBwYXVzZSBwYXNzaW5nIHRocm91Z2ggaXRzIGxldmVsOiBhIHBhdXNlIHJhaXNlZFxuICogd2hpbGUgc2libGluZ3Mgc3RpbGwgd2FpdCBtdXN0IGNhcnJ5IHRoZW0gdG8gaXRzIGNoZWNrcG9pbnQuIEVhY2ggcGF0aCBpc1xuICogY3V0IHRvIHRoYXQgbGV2ZWwg4oCUIHRoZSBidWJibGUtdXAgcHJlcGVuZHMgdGhlIGxldmVscyBhYm92ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHF1ZXVlQmVoaW5kKHNpZ25hbDogUGF1c2VTaWduYWwsIHF1ZXVlOiByZWFkb25seSBRdWV1ZWRQYXVzZVtdKTogdm9pZCB7XG4gIGZvciAoY29uc3QgeyBwYXVzZSwgbGV2ZWwgfSBvZiBxdWV1ZSkge1xuICAgIHNpZ25hbC5hZGRQZW5kaW5nUGF1c2UoeyAuLi5wYXVzZSwgc3ViZmxvd1BhdGg6IHBhdXNlLnN1YmZsb3dQYXRoLnNsaWNlKGxldmVsKSB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBmaXJzdCB3YWl0aW5nIHNpYmxpbmcncyBwYXVzZSwgcmFpc2VkIGFnYWluIGF0IGl0cyBmYW4tb3V0J3MgbGV2ZWwg4oCUXG4gKiBleGFjdGx5IGFzIGl0IGJ1YmJsZWQgdXAgdG8gdGhhdCBsZXZlbCB0aGUgZmlyc3QgdGltZSAoaXRzIHN0YWdlLCBpdHNcbiAqIHF1ZXN0aW9uLCBpdHMgb3duIHN1YmZsb3cgY2FwdHVyZXMpLCBub3RoaW5nIHJlLXJ1bjsgdGhlIHJlc3Qgb2YgdGhlIHF1ZXVlXG4gKiB3YWl0cyBiZWhpbmQgaXQuIFRoZSBzdWJmbG93cyBBQk9WRSB0aGUgZmFuLW91dCBjYXB0dXJlIHRoZW1zZWx2ZXMgYWZyZXNoXG4gKiBhcyBpdCBidWJibGVzIHVwLCBzbyB0aGV5IGNhcnJ5IHdoYXQgdGhlIHJlc3VtZWQgY2hpbGQgd3JvdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByYWlzZVF1ZXVlZFBhdXNlKHF1ZXVlOiByZWFkb25seSBRdWV1ZWRQYXVzZVtdKTogUGF1c2VTaWduYWwge1xuICBjb25zdCBbZmlyc3QsIC4uLnJlc3RdID0gcXVldWU7XG4gIGNvbnN0IHsgcGF1c2UsIGxldmVsIH0gPSBmaXJzdDtcbiAgY29uc3Qgc2lnbmFsID0gbmV3IFBhdXNlU2lnbmFsKHBhdXNlLnBhdXNlRGF0YSwgcGF1c2UucGF1c2VkU3RhZ2VJZCwgcGF1c2UucGF1c2VkQnkpO1xuICAvLyBUaGUgc2libGluZyBwYXVzZWQgaW4gYW4gRUFSTElFUiBydW46IGl0cyBvd24gZXhlY3V0aW9uLCBub3QgdGhpcyBydW4ncy5cbiAgaWYgKGlzUGF1c2VkRXhlY3V0aW9uKHBhdXNlLnBhdXNlZEV4ZWN1dGlvbikpIHtcbiAgICBzaWduYWwuc3RhbXBFeGVjdXRpb24ocGF1c2UucGF1c2VkRXhlY3V0aW9uLnJ1bnRpbWVTdGFnZUlkLCBwYXVzZS5wYXVzZWRFeGVjdXRpb24ucnVuSWQpO1xuICB9XG4gIGNvbnN0IGJlbG93ID0gcGF1c2Uuc3ViZmxvd1BhdGguc2xpY2UobGV2ZWwpO1xuICBmb3IgKGxldCBpID0gYmVsb3cubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBjb25zdCBzdGF0ZSA9IG93bkVudHJ5KHBhdXNlLnN1YmZsb3dTdGF0ZXMsIGJlbG93W2ldKTtcbiAgICBpZiAoc3RhdGUgIT09IHVuZGVmaW5lZCkgc2lnbmFsLmNhcHR1cmVTdWJmbG93U2NvcGUoYmVsb3dbaV0sIHN0YXRlKTtcbiAgICBzaWduYWwucHJlcGVuZFN1YmZsb3coYmVsb3dbaV0pO1xuICB9XG4gIHF1ZXVlQmVoaW5kKHNpZ25hbCwgcmVzdCk7XG4gIHJldHVybiBzaWduYWw7XG59XG5cbi8vIOKUgOKUgCBSZWFkaW5nIHRoZSBjaGFydCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBUaGUgbm9kZSB0aGF0IG1vdW50cyBgc3ViZmxvd0lkYCwgZm91bmQgYnkgREZTIGZyb20gYHN0YXJ0YCBvdmVyIGBuZXh0YCBhbmRcbiAqIGBjaGlsZHJlbmAgKGxvb3AtcmVmIHN0dWJzIHNraXBwZWQg4oCUIHRoZXkgc2hhcmUgdGhlaXIgdGFyZ2V0J3MgaWQgYW5kIGNhcnJ5XG4gKiBub3RoaW5nKS4gQ3ljbGUtc2FmZSAodmlzaXRlZCBieSBpZGVudGl0eSwgc28gYW4gYWJzZW50IGlkIHRlcm1pbmF0ZXMgdG9vKTtcbiAqIGZpcnN0IG1hdGNoIGluIERGUyBwcmUtb3JkZXIgKGNoaWxkcmVuIGJlZm9yZSBgbmV4dGAsIGxpa2UgdGhlIGJ1aWxkZXIpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZE1vdW50PFRPdXQsIFRTY29wZT4oXG4gIHN0YXJ0OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgc3ViZmxvd0lkOiBzdHJpbmcsXG4pOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3Qgbm9kZSBvZiBkaXNwYXRjaGVySW5kZXgoc3RhcnQpLmtleXMoKSkge1xuICAgIGlmIChub2RlLnN1YmZsb3dJZCA9PT0gc3ViZmxvd0lkKSByZXR1cm4gbm9kZTtcbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEV2ZXJ5IHJlYWwgbm9kZSBvZiBvbmUgbGV2ZWwncyBncmFwaCwgaW4gREZTIHByZS1vcmRlciwgbWFwcGVkIHRvIHRoZVxuICogRElTUEFUQ0hFUiB3aG9zZSBjaGlsZC1jaGFpbiBob2xkcyBpdCDigJQgdGhlIG5vZGUgd2hvc2UgYGNoaWxkcmVuYCBpdFxuICogZGVzY2VuZHMgZnJvbSAoYSBkZWNpZGVyLCBhIHNlbGVjdG9yLCBhIGZvcmspIOKAlCBvciBgdW5kZWZpbmVkYCBmb3IgYSBub2RlXG4gKiBvbiB0aGUgbGV2ZWwncyBvd24gc3BpbmUuIExvb3Agc3R1YnMgYXJlIHNraXBwZWQ7IHZpc2l0ZWQgYnkgaWRlbnRpdHksIHNvXG4gKiB0d28gbW91bnRzIHNoYXJpbmcgYW4gaWQgYXJlIGJvdGggaW5kZXhlZCBhbmQgYSBjeWNsZSB0ZXJtaW5hdGVzLlxuICovXG5mdW5jdGlvbiBkaXNwYXRjaGVySW5kZXg8VE91dCwgVFNjb3BlPihcbiAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4pOiBNYXA8U3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sIFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IGluZGV4ID0gbmV3IE1hcDxTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiwgU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfCB1bmRlZmluZWQ+KCk7XG4gIGNvbnN0IHN0YWNrOiBBcnJheTxbU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sIFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkXT4gPSBbW3Jvb3QsIHVuZGVmaW5lZF1dO1xuICBmb3IgKGxldCB0b3AgPSBzdGFjay5wb3AoKTsgdG9wICE9PSB1bmRlZmluZWQ7IHRvcCA9IHN0YWNrLnBvcCgpKSB7XG4gICAgY29uc3QgW25vZGUsIGRpc3BhdGNoZXJdID0gdG9wO1xuICAgIGlmIChub2RlLmlzTG9vcFJlZiB8fCBpbmRleC5oYXMobm9kZSkpIGNvbnRpbnVlO1xuICAgIGluZGV4LnNldChub2RlLCBkaXNwYXRjaGVyKTtcbiAgICAvLyBMSUZPOiBwdXNoIGBuZXh0YCBmaXJzdCBhbmQgY2hpbGRyZW4gcmV2ZXJzZWQsIHNvIGNoaWxkcmVuIGFyZSB2aXNpdGVkXG4gICAgLy8gYmVmb3JlIGBuZXh0YCBhbmQgdGhlIGZpcnN0IGNoaWxkIGZpcnN0IOKAlCBwcmUtb3JkZXIsIGxpa2UgdGhlIGJ1aWxkZXIuXG4gICAgaWYgKG5vZGUubmV4dCkgc3RhY2sucHVzaChbbm9kZS5uZXh0LCBkaXNwYXRjaGVyXSk7XG4gICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgIGZvciAobGV0IGkgPSBub2RlLmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBzdGFjay5wdXNoKFtub2RlLmNoaWxkcmVuW2ldLCBub2RlXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBpbmRleDtcbn1cblxuLyoqIE9uZSBwbGFuJ3MgdmlldyBvZiB0aGUgY2hhcnQ6IGVhY2ggbGV2ZWwncyBpbmRleCBidWlsdCBvbmNlLiAqL1xuY2xhc3MgQ2hhcnRJbmRleDxUT3V0LCBUU2NvcGU+IHtcbiAgcHJpdmF0ZSByZWFkb25seSBpbmRleGVzID0gbmV3IE1hcDxcbiAgICBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgICBNYXA8U3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sIFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkPlxuICA+KCk7XG5cbiAgcHJpdmF0ZSBvZihyb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPikge1xuICAgIGxldCBpbmRleCA9IHRoaXMuaW5kZXhlcy5nZXQocm9vdCk7XG4gICAgaWYgKCFpbmRleCkge1xuICAgICAgaW5kZXggPSBkaXNwYXRjaGVySW5kZXgocm9vdCk7XG4gICAgICB0aGlzLmluZGV4ZXMuc2V0KHJvb3QsIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgLyoqIEV2ZXJ5IG1vdW50IG9mIGBzdWJmbG93SWRgIGluIGByb290YCdzIGdyYXBoLCBpbiBERlMgcHJlLW9yZGVyLiAqL1xuICBtb3VudHNPZihyb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiwgc3ViZmxvd0lkOiBzdHJpbmcpOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMub2Yocm9vdCkua2V5cygpXS5maWx0ZXIoKG5vZGUpID0+IG5vZGUuc3ViZmxvd0lkID09PSBzdWJmbG93SWQpO1xuICB9XG5cbiAgLyoqIFRoZSBvbmUgbW91bnQgb2YgYHN1YmZsb3dJZGAgaW4gYHJvb3RgJ3MgZ3JhcGgg4oCUIHJlZnVzZWQgd2hlbiBhYnNlbnQgb3IgYW1iaWd1b3VzLiAqL1xuICBvbmx5TW91bnQocm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sIHN1YmZsb3dJZDogc3RyaW5nLCBncmFwaE5hbWU6IHN0cmluZyk6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHtcbiAgICBjb25zdCBmb3VuZCA9IHRoaXMubW91bnRzT2Yocm9vdCwgc3ViZmxvd0lkKTtcbiAgICBpZiAoZm91bmQubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgcmVzdW1lOiB0aGUgbW91bnQgb2Ygc3ViZmxvdyAnJHtzdWJmbG93SWR9JyBpcyBub3QgcmVhY2hhYmxlIGZyb20gJHtncmFwaE5hbWV9LiBgICtcbiAgICAgICAgICBcIlRoZSBjaGVja3BvaW50J3Mgc3ViZmxvd1BhdGggZG9lcyBub3QgbWF0Y2ggdGhpcyBjaGFydCDigJQgaXQgbWF5IGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgY2hlY2twb2ludCB3YXMgY3JlYXRlZC5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChmb3VuZC5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgcmVzdW1lOiBzdWJmbG93ICcke3N1YmZsb3dJZH0nIGlzIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2UgaW4gJHtncmFwaE5hbWV9IGAgK1xuICAgICAgICAgIGAoJHtmb3VuZC5tYXAoKG5vZGUpID0+IGAnJHtub2RlLm5hbWV9J2ApLmpvaW4oJywgJyl9KSwgYW5kIGEgY2hlY2twb2ludCdzIHN1YmZsb3dQYXRoIGNhbm5vdCBzYXkgd2hpY2ggYCArXG4gICAgICAgICAgJ21vdW50IHBhdXNlZC4gR2l2ZSBlYWNoIG1vdW50IGl0cyBvd24gc3ViZmxvdyBpZCB0byBtYWtlIGEgcGF1c2UgaW5zaWRlIGl0IHJlc3VtYWJsZS4nLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvdW5kWzBdO1xuICB9XG5cbiAgLyoqIFRoZSByZWFsIHN0YWdlIGBpZGAgaW4gYHJvb3RgJ3MgZ3JhcGggKGZpcnN0IGluIERGUyBwcmUtb3JkZXIpLCBpZiBhbnkuICovXG4gIHN0YWdlKHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LCBpZDogc3RyaW5nKTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfCB1bmRlZmluZWQge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLm9mKHJvb3QpLmtleXMoKSkgaWYgKG5vZGUuaWQgPT09IGlkKSByZXR1cm4gbm9kZTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIFRoZSBkaXNwYXRjaGVyIHdob3NlIGNoaWxkLWNoYWluIGhvbGRzIGBub2RlYCBpbiBgcm9vdGAncyBncmFwaCAoYHVuZGVmaW5lZGAgb24gdGhlIHNwaW5lKS4gKi9cbiAgZGlzcGF0Y2hlck9mKHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LCBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPik6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5vZihyb290KS5nZXQobm9kZSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG9uZS1zaG90IGVudHJ5IGZvciBgY2hpbGRgIChhIG1vdW50IG9uIHRoZSBwYXRoLCBvciB0aGUgcGF1c2VkIHN0YWdlKVxuICAgKiBpbiBgcm9vdGAncyBncmFwaDogYHJlcGxhY2VtZW50YCAodGhlIG5vZGUgdGhhdCBydW5zIOKAlCB0aGUgbW91bnQgaXRzZWxmLFxuICAgKiBvciB0aGUgc3RhbmQtaW4pIHdpdGggd2hhdCByYW4gYWZ0ZXIgYGNoaWxkYCdzIGNoYWluIG9uIHRoZSBvcmlnaW5hbCBydW5cbiAgICogYXR0YWNoZWQgd2hlcmUgdGhhdCBjaGFpbiBlbmRzIOKAlCBgeyAuLi5jaGlsZCwgbmV4dDogZGlzcGF0Y2hlci5uZXh0IH1gIGZvclxuICAgKiBhIGNoYXJ0IHRoZSBidWlsZGVyIG1hZGU6XG4gICAqXG4gICAqICAg4oCiIG9uIHRoZSBsZXZlbCdzIHNwaW5lOiBub3RoaW5nIHRvIGF0dGFjaCDigJQgdGhlIHNwaW5lIGdvZXMgb24gYnkgaXRzZWxmO1xuICAgKiAgIOKAoiBhIERFQ0lERVIncyBvciBTRUxFQ1RPUidzIGJyYW5jaDogdGhlIGRpc3BhdGNoZXIncyBgbmV4dGA7XG4gICAqICAg4oCiIGEgRk9SSyBjaGlsZDogdGhlIGZvcmsncyBgbmV4dGAg4oCUIGl0cyBqb2luLlxuICAgKlxuICAgKiBQYXN0IGEgZGlzcGF0Y2hlciB3aXRoIG5vIGBuZXh0YCwgdGhlIHdhbGsgZ29lcyBvbiBPVVRXQVJEIHRvIHRoZSBvbmVcbiAgICogZW5jbG9zaW5nIGl0LiBJdCBzdG9wcyBhdCBgc3RvcEF0YCDigJQgdGhlIGZhbi1vdXQgd2hlcmUgc2libGluZ3Mgc3RpbGxcbiAgICogd2FpdCwgd2hvc2Ugam9pbiBtdXN0IG5vdCBydW4geWV0LiBOb3RoaW5nIHRvIGF0dGFjaDogYHJlcGxhY2VtZW50YFxuICAgKiBpdHNlbGYuXG4gICAqL1xuICBlbnRyeShcbiAgICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgICBjaGlsZDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgcmVwbGFjZW1lbnQ6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIHN0b3BBdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfCB1bmRlZmluZWQsXG4gICk6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHtcbiAgICByZXR1cm4gYXBwZW5kQXRDaGFpbkVuZChyZXBsYWNlbWVudCwgdGhpcy5hZnRlcihyb290LCBjaGlsZCwgc3RvcEF0KSk7XG4gIH1cblxuICAvKipcbiAgICogV2hhdCBydW5zIG9uY2UgYG5vZGVgJ3MgY2hhaW4gZW5kczogaXRzIGRpc3BhdGNoZXIncyBgbmV4dGAgY2hhaW4sIHRoZW4g4oCUXG4gICAqIHdoZXJlIFRIQVQgZW5kcyDigJQgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgZGlzcGF0Y2hlciBlbmNsb3NpbmcgaXQsIG91dHdhcmQsXG4gICAqIHVwIHRvIGBzdG9wQXRgIChleGNsdXNpdmUpLiBgdW5kZWZpbmVkYCBvbiB0aGUgc3BpbmUuXG4gICAqL1xuICBwcml2YXRlIGFmdGVyKFxuICAgIHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIHN0b3BBdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfCB1bmRlZmluZWQsXG4gICk6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpcy5kaXNwYXRjaGVyT2Yocm9vdCwgbm9kZSk7XG4gICAgaWYgKGRpc3BhdGNoZXIgPT09IHVuZGVmaW5lZCB8fCBkaXNwYXRjaGVyID09PSBzdG9wQXQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgb3V0ZXIgPSB0aGlzLmFmdGVyKHJvb3QsIGRpc3BhdGNoZXIsIHN0b3BBdCk7XG4gICAgcmV0dXJuIGRpc3BhdGNoZXIubmV4dCA/IGFwcGVuZEF0Q2hhaW5FbmQoZGlzcGF0Y2hlci5uZXh0LCBvdXRlcikgOiBvdXRlcjtcbiAgfVxufVxuXG4vKipcbiAqIGBzdGFydGAncyBjaGFpbiB3aXRoIGBhZnRlcmAgYXR0YWNoZWQgd2hlcmUgaXQgZW5kcyDigJQgdGhlIGNoYWluJ3Mgbm9kZXNcbiAqIGNvcGllZCBvbiB0aGUgd2F5IChuZXZlciByZWdpc3RlcmVkIGFueXdoZXJlOiBpZHMgc3RpbGwgcmVzb2x2ZSB0byB0aGUgcmVhbFxuICogbm9kZXMpLiBBIGNoYWluIHRoYXQgZW5kcyBpbiBhIGxvb3Agc3R1YiAob3IgbG9vcHMgYmFjayBvbiBpdHNlbGYpIGlzXG4gKiByZXR1cm5lZCBhcyBpczogY29udHJvbCBsZWF2ZXMgaXQgdGhyb3VnaCB0aGUgbG9vcCwgbmV2ZXIgXCJhZnRlclwiIGl0LlxuICovXG5mdW5jdGlvbiBhcHBlbmRBdENoYWluRW5kPFRPdXQsIFRTY29wZT4oXG4gIHN0YXJ0OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgYWZ0ZXI6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkLFxuKTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4ge1xuICBpZiAoYWZ0ZXIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHN0YXJ0O1xuICBjb25zdCBjaGFpbjogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT5bXSA9IFtdO1xuICBjb25zdCBzZWVuID0gbmV3IFNldDxTdGFnZU5vZGU8VE91dCwgVFNjb3BlPj4oKTtcbiAgZm9yIChsZXQgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfCB1bmRlZmluZWQgPSBzdGFydDsgbm9kZSAhPT0gdW5kZWZpbmVkOyBub2RlID0gbm9kZS5uZXh0KSB7XG4gICAgaWYgKG5vZGUuaXNMb29wUmVmIHx8IHNlZW4uaGFzKG5vZGUpKSByZXR1cm4gc3RhcnQ7XG4gICAgc2Vlbi5hZGQobm9kZSk7XG4gICAgY2hhaW4ucHVzaChub2RlKTtcbiAgfVxuICBsZXQgbmV4dCA9IGFmdGVyO1xuICBmb3IgKGxldCBpID0gY2hhaW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIG5leHQgPSB7IC4uLmNoYWluW2ldLCBuZXh0IH07XG4gIHJldHVybiBuZXh0O1xufVxuXG4vLyDilIDilIAgV2FpdGluZyBzaWJsaW5ncyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFRoZSBzaWJsaW5nIHBhdXNlcyB3YWl0aW5nIGF0IG9uZSBsZXZlbCwgYW5kIHRoZSBmYW4tb3V0IHRoZXkgd2FpdCBpbi4gKi9cbmludGVyZmFjZSBMZXZlbFF1ZXVlPFRPdXQsIFRTY29wZT4ge1xuICByZWFkb25seSBmYW5PdXQ6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICByZWFkb25seSBwYXVzZXM6IFF1ZXVlZFBhdXNlW107XG59XG5cbi8qKlxuICogUGxhY2UgYGNoZWNrcG9pbnQucGVuZGluZ1BhdXNlc2AgKGRlY29kZWQg4oCUIGBwYXVzZS9yZWNvcmQudHNgKSBhbmQgcXVldWUgZWFjaCBhdCB0aGVcbiAqIGxldmVsIG9mIGl0cyBmYW4tb3V0OiB0aGUgZGVwdGggd2hlcmUgaXRzIHBhdGggcGFydHMgZnJvbSB0aGUgcGF1c2VkXG4gKiBzdGFnZSdzLiBUaGVyZSwgdGhlIHBhdXNlZCBzdGFnZSdzIGNoaWxkIChhIG1vdW50IG9uIHRoZSBwYXRoLCBvciB0aGUgc3RhZ2VcbiAqIGl0c2VsZikgYW5kIHRoZSBzaWJsaW5nJ3MgbXVzdCBib3RoIGhhbmcgb2ZmIE9ORSBwYXJhbGxlbCBkaXNwYXRjaGVyIOKAlCBhXG4gKiBmb3JrIG9yIGEgc2VsZWN0b3Ig4oCUIG9yIHRoZSByZWNvcmQgaXMgbm90IGEgc2libGluZyBhbmQgdGhlIHJlc3VtZSBpc1xuICogcmVmdXNlZCByYXRoZXIgdGhhbiBhc2tlZCBhIHF1ZXN0aW9uIHRoZSBjaGFydCBjb3VsZCBub3QgaGF2ZSByYWlzZWQuXG4gKi9cbmZ1bmN0aW9uIHF1ZXVlU2libGluZ1BhdXNlczxUT3V0LCBUU2NvcGU+KFxuICBwZW5kaW5nOiByZWFkb25seSBQZW5kaW5nUGF1c2VbXSB8IHVuZGVmaW5lZCxcbiAgYXQ6IHtcbiAgICBjaGFydDogQ2hhcnRJbmRleDxUT3V0LCBUU2NvcGU+O1xuICAgIHN1YmZsb3dzOiBSZWNvcmQ8c3RyaW5nLCB7IHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IH0+IHwgdW5kZWZpbmVkO1xuICAgIHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICAgIHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAgIGdyYXBoczogcmVhZG9ubHkgU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT5bXTtcbiAgICBtb3VudHM6IHJlYWRvbmx5IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W107XG4gICAgcGF1c2VkOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB8IHVuZGVmaW5lZDtcbiAgfSxcbik6IEFycmF5PExldmVsUXVldWU8VE91dCwgVFNjb3BlPiB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBxdWV1ZXM6IEFycmF5PExldmVsUXVldWU8VE91dCwgVFNjb3BlPiB8IHVuZGVmaW5lZD4gPSBbXTtcbiAgaWYgKHBlbmRpbmcgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHF1ZXVlcztcbiAgLy8gVGhlIGNvZGVjJ3MgY2hlY2sgKGBwYXVzZS9yZWNvcmQudHNgKSDigJQgYHBsYW5gIGlzIGEgcHVibGljIGRvb3IgdG9vLCBzbyBpdFxuICAvLyBuZXZlciB0YWtlcyBhIHNpYmxpbmcgcmVjb3JkIHVuY2hlY2tlZCwgaG93ZXZlciBpdCB3YXMgaGFuZGVkIG9uZS5cbiAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVBlbmRpbmdQYXVzZXMocGVuZGluZyk7XG4gIGNvbnN0IHsgY2hhcnQsIHN1YmZsb3dzLCByb290LCBwYXRoLCBncmFwaHMsIG1vdW50cywgcGF1c2VkIH0gPSBhdDtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIC8vIEVhY2ggcmVjb3JkJ3MgRklFTERTIGFyZSBjaGVja2VkIGFib3ZlOyBoZXJlIGl0IGlzIGFza2VkIHdoZXRoZXIgdGhlXG4gIC8vIHJlY29yZCBmaXRzIFRISVMgY2hhcnQuXG4gIGRlY29kZWQuZm9yRWFjaCgocGF1c2UsIG4pID0+IHtcbiAgICAvLyBPbmUgcmVjb3JkIHBlciBwYXVzZWQgc2libGluZzogYSByZXBlYXQgd291bGQgYXNrIHRoZSBzYW1lIHF1ZXN0aW9uIHR3aWNlLlxuICAgIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtwYXVzZS5zdWJmbG93UGF0aCwgcGF1c2UucGF1c2VkU3RhZ2VJZF0pO1xuICAgIGlmIChzZWVuLmhhcyhrZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgcmVzdW1lOiBjaGVja3BvaW50LnBlbmRpbmdQYXVzZXNbJHtufV0gKCcke3BhdXNlLnBhdXNlZFN0YWdlSWR9JykgcmVwZWF0cyBhbiBlYXJsaWVyIGVudHJ5LmAsXG4gICAgICApO1xuICAgIH1cbiAgICBzZWVuLmFkZChrZXkpO1xuICAgIGxldCBsZXZlbCA9IDA7XG4gICAgd2hpbGUgKGxldmVsIDwgcGF0aC5sZW5ndGggJiYgbGV2ZWwgPCBwYXVzZS5zdWJmbG93UGF0aC5sZW5ndGggJiYgcGF0aFtsZXZlbF0gPT09IHBhdXNlLnN1YmZsb3dQYXRoW2xldmVsXSkgbGV2ZWwrKztcbiAgICBjb25zdCBncmFwaCA9IGdyYXBoc1tsZXZlbF07XG4gICAgY29uc3Qgb3VycyA9IGxldmVsIDwgcGF0aC5sZW5ndGggPyBtb3VudHNbbGV2ZWxdIDogcGF1c2VkO1xuICAgIGNvbnN0IHRoZWlyTW91bnRzID0gbGV2ZWwgPCBwYXVzZS5zdWJmbG93UGF0aC5sZW5ndGggPyBjaGFydC5tb3VudHNPZihncmFwaCwgcGF1c2Uuc3ViZmxvd1BhdGhbbGV2ZWxdKSA6IFtdO1xuICAgIGNvbnN0IHRoZWlycyA9XG4gICAgICBsZXZlbCA8IHBhdXNlLnN1YmZsb3dQYXRoLmxlbmd0aFxuICAgICAgICA/IHRoZWlyTW91bnRzLmxlbmd0aCA9PT0gMVxuICAgICAgICAgID8gdGhlaXJNb3VudHNbMF1cbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICA6IGNoYXJ0LnN0YWdlKGdyYXBoLCBwYXVzZS5wYXVzZWRTdGFnZUlkKTtcbiAgICBjb25zdCBmYW5PdXQgPSBvdXJzID8gY2hhcnQuZGlzcGF0Y2hlck9mKGdyYXBoLCBvdXJzKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBpc1NpYmxpbmcgPVxuICAgICAgb3VycyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICB0aGVpcnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgb3VycyAhPT0gdGhlaXJzICYmXG4gICAgICBmYW5PdXQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgY2hhcnQuZGlzcGF0Y2hlck9mKGdyYXBoLCB0aGVpcnMpID09PSBmYW5PdXQgJiZcbiAgICAgICFmYW5PdXQuZGVjaWRlckZuICYmXG4gICAgICAocXVldWVzW2xldmVsXSA9PT0gdW5kZWZpbmVkIHx8IHF1ZXVlc1tsZXZlbF0hLmZhbk91dCA9PT0gZmFuT3V0KTtcbiAgICBpZiAoIWlzU2libGluZyB8fCAhd2Fsa3NUb0l0c1N0YWdlKGNoYXJ0LCBzdWJmbG93cywgZ3JhcGgsIHBhdXNlLCBsZXZlbCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCByZXN1bWU6IGNoZWNrcG9pbnQucGVuZGluZ1BhdXNlc1ske259XSAoJyR7cGF1c2UucGF1c2VkU3RhZ2VJZH0nKSBpcyBub3QgYSBwYXJhbGxlbCBzaWJsaW5nIG9mIGAgK1xuICAgICAgICAgIGB0aGUgcGF1c2VkIHN0YWdlICcke3BhdXNlZD8uaWQgPz8gJz8nfScgaW4gdGhpcyBjaGFydCDigJQgbm8gZm9yayBvciBzZWxlY3RvciBydW5zIHRoZW0gYm90aCwgb3IgaXRzIGAgK1xuICAgICAgICAgICdwYXRoIGRvZXMgbm90IGxlYWQgdG8gdGhhdCBzdGFnZS4gVGhlIGNoYXJ0IG1heSBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIGNoZWNrcG9pbnQgd2FzIGNyZWF0ZWQuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IGxlYWZSb290ID1cbiAgICAgIHBhdXNlLnN1YmZsb3dQYXRoLmxlbmd0aCA9PT0gMCA/IHJvb3QgOiBvd25FbnRyeShzdWJmbG93cywgcGF1c2Uuc3ViZmxvd1BhdGhbcGF1c2Uuc3ViZmxvd1BhdGgubGVuZ3RoIC0gMV0pPy5yb290O1xuICAgIGNvbnN0IHN0YWdlTmFtZSA9IChsZWFmUm9vdCAmJiBjaGFydC5zdGFnZShsZWFmUm9vdCwgcGF1c2UucGF1c2VkU3RhZ2VJZCk/Lm5hbWUpID8/IHBhdXNlLnBhdXNlZFN0YWdlSWQ7XG4gICAgY29uc3QgcXVldWUgPSAocXVldWVzW2xldmVsXSA/Pz0geyBmYW5PdXQ6IGZhbk91dCEsIHBhdXNlczogW10gfSk7XG4gICAgcXVldWUucGF1c2VzLnB1c2goeyBwYXVzZSwgbGV2ZWwsIHN0YWdlTmFtZSB9KTtcbiAgfSk7XG4gIHJldHVybiBxdWV1ZXM7XG59XG5cbi8qKlxuICogV2hldGhlciBhIHdhaXRpbmcgc2libGluZydzIFdIT0xFIHBhdGggYmVsb3cgaXRzIGZhbi1vdXQgd2Fsa3MgdGhpcyBjaGFydDpcbiAqIGV2ZXJ5IHNlZ21lbnQgdGhlIG9ubHkgbW91bnQgb2YgaXRzIHN1YmZsb3cgaW4gdGhlIGVuY2xvc2luZyBncmFwaCwgZXZlcnlcbiAqIHN1YmZsb3cgcmVnaXN0ZXJlZCwgYW5kIHRoZSBwYXVzZWQgc3RhZ2UgaW4gdGhlIGxhc3QgZ3JhcGgg4oCUIGNoZWNrZWQgYXRcbiAqIHRoZSBGSVJTVCByZXN1bWUsIHNvIGEgdGFtcGVyZWQgcmVjb3JkIGlzIHJlZnVzZWQgdXAgZnJvbnQsIG5vdCB3aGVuIGl0c1xuICogdHVybiBjb21lcy5cbiAqL1xuZnVuY3Rpb24gd2Fsa3NUb0l0c1N0YWdlPFRPdXQsIFRTY29wZT4oXG4gIGNoYXJ0OiBDaGFydEluZGV4PFRPdXQsIFRTY29wZT4sXG4gIHN1YmZsb3dzOiBSZWNvcmQ8c3RyaW5nLCB7IHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IH0+IHwgdW5kZWZpbmVkLFxuICBmYW5PdXRHcmFwaDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gIHBhdXNlOiBQZW5kaW5nUGF1c2UsXG4gIGxldmVsOiBudW1iZXIsXG4pOiBib29sZWFuIHtcbiAgbGV0IGdyYXBoID0gZmFuT3V0R3JhcGg7XG4gIGZvciAobGV0IGkgPSBsZXZlbDsgaSA8IHBhdXNlLnN1YmZsb3dQYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGNoYXJ0Lm1vdW50c09mKGdyYXBoLCBwYXVzZS5zdWJmbG93UGF0aFtpXSkubGVuZ3RoICE9PSAxKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IG93bkVudHJ5KHN1YmZsb3dzLCBwYXVzZS5zdWJmbG93UGF0aFtpXSk7XG4gICAgaWYgKCFkZWZpbml0aW9uKSByZXR1cm4gZmFsc2U7XG4gICAgZ3JhcGggPSBkZWZpbml0aW9uLnJvb3Q7XG4gIH1cbiAgcmV0dXJuIGNoYXJ0LnN0YWdlKGdyYXBoLCBwYXVzZS5wYXVzZWRTdGFnZUlkKSAhPT0gdW5kZWZpbmVkO1xufVxuXG4vKiogYHJlY29yZFtrZXldYCBvbmx5IHdoZW4gaXQgaXMgdGhlIHJlY29yZCdzIE9XTiBwcm9wZXJ0eSDigJQgbmV2ZXIgdGhyb3VnaCB0aGUgcHJvdG90eXBlIGNoYWluLiAqL1xuZnVuY3Rpb24gb3duRW50cnk8VD4ocmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBUPiB8IHVuZGVmaW5lZCwga2V5OiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHJlY29yZCAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocmVjb3JkLCBrZXkpID8gcmVjb3JkW2tleV0gOiB1bmRlZmluZWQ7XG59XG4iXX0=
|
|
@@ -21,8 +21,7 @@ export declare class SubflowExecutor<TOut = any, TScope = any> {
|
|
|
21
21
|
private deps;
|
|
22
22
|
private traverserFactory;
|
|
23
23
|
/**
|
|
24
|
-
* The resume's one-shot re-entry (`deps.resume`)
|
|
25
|
-
* from the deprecated `deps.subflowStatesForResume`. Undefined on a normal
|
|
24
|
+
* The resume's one-shot re-entry (`deps.resume`). Undefined on a normal
|
|
26
25
|
* run. Asked once per subflow entry — see {@link ResumeEntry}.
|
|
27
26
|
*/
|
|
28
27
|
private readonly resume;
|