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
|
@@ -156,4 +156,4 @@
|
|
|
156
156
|
* ```
|
|
157
157
|
*/
|
|
158
158
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
159
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RydWN0dXJlUmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvc3RydWN0dXJlL1N0cnVjdHVyZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EySkciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0cnVjdHVyZVJlY29yZGVyIOKAlCBwYXNzaXZlIG9ic2VydmVyIG9mIEJVSUxELVRJTUUgY2hhcnQgY29uc3RydWN0aW9uIGV2ZW50cy5cbiAqXG4gKiBUaGUgYnVpbGQtdGltZSB0d2luIG9mIGBGbG93UmVjb3JkZXJgLiBXaGVyZSBgRmxvd1JlY29yZGVyYCBvYnNlcnZlc1xuICogUlVOVElNRSBjb250cm9sLWZsb3cgdHJhbnNpdGlvbnMgKHBlci1leGVjdXRpb24gYHJ1bnRpbWVTdGFnZUlkYCxcbiAqIGl0ZXJhdGlvbiBjb3VudHMsIGVycm9ycywgcGF1c2VzKSwgYFN0cnVjdHVyZVJlY29yZGVyYCBvYnNlcnZlc1xuICogU1RBVElDIGNoYXJ0IHNoYXBlIGFzIGl0J3MgYXNzZW1ibGVkIGJ5IHRoZSBidWlsZGVyIOKAlCBldmVyeSBzcGVjXG4gKiBub2RlIGFkZGVkLCBldmVyeSBvdXRnb2luZyBlZGdlIHdpcmVkLCBldmVyeSBkZWNpZGVyIGNsb3NlZC5cbiAqXG4gKiBXaHkgdHdvIGludGVyZmFjZXMsIG5vdCBvbmVcbiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogICBCdWlsZCBhbmQgcnVudGltZSBldmVudHMgaGF2ZSBkaWZmZXJlbnQgSU5WQVJJQU5UUywgbm90IGp1c3RcbiAqICAgZGlmZmVyZW50IHRpbWluZzpcbiAqXG4gKiAgICAgLSBSdW50aW1lIGV2ZW50cyBjYXJyeSBgcnVudGltZVN0YWdlSWRgIChgW3N1YmZsb3dQYXRoL11zdGFnZUlkI05gKSxcbiAqICAgICAgIGBpdGVyYXRpb25gLCBgdHJhdmVyc2FsQ29udGV4dGAg4oCUIGxvYWQtYmVhcmluZyBmb3IgdGltZS10cmF2ZWxcbiAqICAgICAgIFVJcywgY29tbWl0LWxvZyBpbmRpY2VzLCBhbmQgYFNlcXVlbmNlU3RvcmU8VD5gIGNvbnN1bWVycy5cbiAqICAgICAgIE5PTkUgb2YgdGhlc2UgZXhpc3QgYXQgYnVpbGQgdGltZS5cbiAqXG4gKiAgICAgLSBCdWlsZCBldmVudHMgY2Fycnkgb25seSBgc3RhZ2VJZGAgKyBzdHJ1Y3R1cmFsIGZpZWxkcy4gTm9cbiAqICAgICAgIGV4ZWN1dGlvbiBpbmRleCwgbm8gaXRlcmF0aW9uLCBubyBzbmFwc2hvdC5cbiAqXG4gKiAgICAgLSBTb21lIGV2ZW50cyBoYXZlIG5vIGFuYWxvZyBhY3Jvc3MgcGhhc2VzOiBgb25QYXVzZWAgL1xuICogICAgICAgYG9uUmVzdW1lYCAvIGBvbkVycm9yYCAvIGBvblJ1blN0YXJ0YCBhcmUgcnVudGltZS1vbmx5O1xuICogICAgICAgYG9uRGVjaWRlckNvbXBsZXRlYCAvIGBvblN0YWdlQWRkZWRgIGFyZSBidWlsZC1vbmx5LlxuICpcbiAqICAgQSBzaW5nbGUgYEZsb3dSZWNvcmRlcmAgd2l0aCBgcGhhc2U6ICdzdGF0aWMnIHwgJ2R5bmFtaWMnYFxuICogICBkaXNjcmltaW5hdG9yIHdvdWxkIGZvcmNlIGV2ZXJ5IGNvbnN1bWVyIHRvIHdyaXRlXG4gKiAgIGBpZiAoZS5waGFzZSA9PT0gJ3N0YXRpYycpIC4uLmAgYnJhbmNoZXMgYW5kIHdvdWxkIGVyYXNlIHRoZVxuICogICBsZWFzdC1wcml2aWxlZ2UgYm91bmRhcnkgKGEgc3RhdGljLW9ubHkgY29uc3VtZXIgc2hvdWxkIE5PVFxuICogICBhY2NpZGVudGFsbHkgb2JzZXJ2ZSBydW50aW1lIGRhdGEg4oCUIGUuZy4sIGEgcHVibGljIGRvY3Mgc2l0ZVxuICogICByZW5kZXJpbmcgY2hhcnQgdG9wb2xvZ3kgbXVzdCBub3Qgc2VlIHNjb3BlIHZhbHVlcykuXG4gKlxuICogICBUd28gaW50ZXJmYWNlcywgc2FtZSBtZW50YWwgbW9kZWwsIGNsZWFuIHNlcGFyYXRpb24uIFR3b1xuICogICByZWdpc3RyYXRpb24gc2l0ZXMgc2hpcCB0b2RheSAocGljayB3aGljaGV2ZXIgZml0cyB5b3VyIGNhbGxcbiAqICAgc2l0ZSk6XG4gKlxuICogICAgIDEuICoqT3B0aW9ucy1iYWcqKiAocHJlZmVycmVkIHdoZW4gdGhlIHJlY29yZGVyIHNldCBpcyBrbm93blxuICogICAgICAgIGF0IGNvbnN0cnVjdGlvbiB0aW1lIOKAlCByZWdpc3RlcnMgQkVGT1JFIGBzdGFydCgpYCBzbyBldmVuXG4gKiAgICAgICAgdGhlIHNlZWQgZXZlbnQgZmlyZXMgdGhyb3VnaCB0aGUgbm9ybWFsIGRpc3BhdGNoZXIgZmFuLW91dCk6XG4gKiAgICAgICAgYGBgdHNcbiAqICAgICAgICBmbG93Q2hhcnQoJ3NlZWQnLCBmbiwgJ3NlZWQnLCB7IHN0cnVjdHVyZVJlY29yZGVyczogW3JlY10gfSlcbiAqICAgICAgICAgIC5hZGRGdW5jdGlvbignYScsIGZuQSwgJ2EnKS5idWlsZCgpO1xuICogICAgICAgIGBgYFxuICpcbiAqICAgICAyLiAqKkZsdWVudCoqIChwcmVmZXJyZWQgd2hlbiBhdHRhY2ggaXMgY29uZGl0aW9uYWwsIGxhdGUsIG9yXG4gKiAgICAgICAgaW4gYSBjaGFpbiBidWlsZGVyIOKAlCB0aGUganVzdC1hdHRhY2hlZCByZWNvcmRlciBnZXRzIGFcbiAqICAgICAgICBvbmUtdGltZSBzZWVkIHJlcGxheSBzbyBpdCBvYnNlcnZlcyB0aGUgcm9vdCBzdGFnZSk6XG4gKiAgICAgICAgYGBgdHNcbiAqICAgICAgICBmbG93Q2hhcnQoJ3NlZWQnLCBmbiwgJ3NlZWQnKVxuICogICAgICAgICAgLmF0dGFjaFN0cnVjdHVyZVJlY29yZGVyKHJlYylcbiAqICAgICAgICAgIC5hZGRGdW5jdGlvbignYScsIGZuQSwgJ2EnKS5idWlsZCgpO1xuICogICAgICAgIGBgYFxuICpcbiAqICAgQm90aCBkZWxpdmVyIHRoZSBzYW1lIGV2ZW50IHN0cmVhbSB0byB0aGUgc2FtZSByZWNvcmRlci4gU2VlIHRoZVxuICogICBgQGV4YW1wbGVgIGJsb2NrIGJlbG93IGZvciBhIGZ1bGx5LWZsZXNoZWQtb3V0IGltcGxlbWVudGF0aW9uLlxuICpcbiAqIExpZmVjeWNsZSArIG9yZGVyaW5nIGludmFyaWFudHNcbiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogICAtIEZpcmVzIFNZTkNIUk9OT1VTTFkgZHVyaW5nIGJ1aWxkZXIgY2hhaW4gY2FsbHMgKGFuZCBkdXJpbmdcbiAqICAgICBgLmJ1aWxkKClgIGZvciB0aGUgdGVybWluYWwgbm9kZSkgYXQgdGhlIG5hdHVyYWwgbW9tZW50IGVhY2hcbiAqICAgICBzcGVjIG11dGF0aW9uIGNvbXBsZXRlcy5cbiAqICAgLSBgb25TdGFnZUFkZGVkKEEpYCBhbmQgYG9uU3RhZ2VBZGRlZChCKWAgZmlyZSBCRUZPUkUgYW55XG4gKiAgICAgYG9uRWRnZUFkZGVkKHtmcm9tOiBBLCB0bzogQn0pYCDigJQgZW5kcG9pbnQgcmVnaXN0cmF0aW9uXG4gKiAgICAgaGFwcGVucyBiZWZvcmUgZWRnZSB3aXJpbmcuXG4gKiAgIC0gYG9uRGVjaWRlckNvbXBsZXRlKEQpYCBmaXJlcyBhdCBzdWItYnVpbGRlciBgLmVuZCgpYCB0aW1lLCBBRlRFUlxuICogICAgIGV2ZXJ5IGNoaWxkJ3MgYG9uU3RhZ2VBZGRlZGAgYW5kIGV2ZXJ5IGBvbkVkZ2VBZGRlZCh7ZnJvbTogRCxcbiAqICAgICB0bzogY2hpbGR9KWAuIE1hcmtzIHRoZSBkZWNpZGVyIGFzIG5vLWZ1cnRoZXItbXV0YXRpb24uXG4gKiAgIC0gYG9uU3ViZmxvd01vdW50ZWQoe3N1YmZsb3dJZH0pYCBmaXJlcyBvbmNlIHBlciBtb3VudC5cbiAqICAgICAqKk1PVU5ULU9OTFkqKjogcGFyZW50IHJlY29yZGVycyBkbyBOT1QgcmVjZWl2ZSBhIHJlcGxheSBvZlxuICogICAgIHRoZSBzdWJmbG93J3Mgb3duIGludGVybmFsIHN0cnVjdHVyZSBldmVudHMgKHRob3NlIGZpcmVkXG4gKiAgICAgZHVyaW5nIHRoZSBzdWJmbG93J3Mgb3duIGAuYnVpbGQoKWApLiBNYXRjaGVzIHRoZSBydW50aW1lXG4gKiAgICAgYG9uU3ViZmxvd0VudHJ5YCBzZW1hbnRpY3Mg4oCUIGNvbXBvc2l0aW9uIG92ZXIgcmVwbGF5LlxuICpcbiAqIEVycm9yIGlzb2xhdGlvbiAobWF0Y2hlcyBGbG93UmVjb3JkZXIgY29udHJhY3QpXG4gKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAqICAgLSBBIHRocm93aW5nIGhhbmRsZXIgaXMgY2F1Z2h0LCBsb2dnZWQgdmlhIGBpc0Rldk1vZGUoKWAgd2FybmluZyxcbiAqICAgICBhbmQgYWNjdW11bGF0ZWQgb24gYGJ1aWxkZXIuZ2V0U3RydWN0dXJlQnVpbGRFcnJvcnMoKWAgZm9yXG4gKiAgICAgcG9zdC1ob2MgaW5zcGVjdGlvbi5cbiAqICAgLSBTdWJzZXF1ZW50IHJlY29yZGVycyArIHN1YnNlcXVlbnQgZXZlbnRzIGZpcmUgbm9ybWFsbHk7IG9uZVxuICogICAgIG1pc2JlaGF2aW5nIHJlY29yZGVyIGNhbm5vdCBUSFJPVyBpdHMgd2F5IGludG8gYmxvY2tpbmdcbiAqICAgICBjb25zdHJ1Y3Rpb24uXG4gKiAgIC0gVGhlIGVycm9yc1tdIGFjY3VtdWxhdG9yIGlzIHNvZnQtY2FwcGVkICh+MTAwIGVudHJpZXMpIHdpdGggYVxuICogICAgIGBfX3RydW5jYXRlZF9fYCBzZW50aW5lbCByZWNvcmQgb25jZSB0aGUgY2FwIGlzIGhpdCwgdG8gcHJldmVudFxuICogICAgIHVuYm91bmRlZCBncm93dGggb24gY2hhdHR5IGJyb2tlbiByZWNvcmRlcnMuXG4gKiAgIC0gTm90ZTogdGhyb3cgaXNvbGF0aW9uIGRvZXMgTk9UIGRlZmVuZCBhZ2FpbnN0IGEgaGFuZGxlciB0aGF0XG4gKiAgICAgc3VjY2VlZHMgYXQgcnVudGltZSBidXQgbXV0YXRlcyBgZXZlbnQuc3BlY2AgdG8gY29ycnVwdCB0aGVcbiAqICAgICBjaGFydC4gU2VlIFwiU3BlYyBtdXRhdGlvblwiIGJlbG93LlxuICpcbiAqIFNwZWMgbXV0YXRpb24g4oCUIHJlYWRvbmx5LWJ5LWNvbnRyYWN0IChOT1QgcnVudGltZS1lbmZvcmNlZClcbiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogICAtIEV2ZW50IHBheWxvYWRzIHBhc3Mgc3BlYyByZWZlcmVuY2VzIHdoZXJlIHVzZWZ1bCAoZS5nLiwgYHNwZWNgXG4gKiAgICAgb24gYG9uU3RhZ2VBZGRlZGApLiBFdmVyeSBmaWVsZCBvbiBldmVyeSBldmVudCBwYXlsb2FkIGlzXG4gKiAgICAgbWFya2VkIGByZWFkb25seWAgaW4gVHlwZVNjcmlwdCDigJQgdGhlIHR5cGUgc3lzdGVtIHNpZ25hbHNcbiAqICAgICBjb25zdW1lciBpbnRlbnQgYXQgYXV0aG9yIHRpbWUuXG4gKiAgIC0gVGhlcmUgaXMgTk8gcnVudGltZSBmcmVlemUuIFRoZSBidWlsZGVyIGZpcmVzIGBvblN0YWdlQWRkZWRgXG4gKiAgICAgSU1NRURJQVRFTFkgd2hlbiBhIHNwZWMgbm9kZSBpcyBhZGRlZCwgQkVGT1JFIHRoZSBidWlsZGVyXG4gKiAgICAgd2lyZXMgdGhhdCBub2RlJ3MgYC5uZXh0YC9gLmNoaWxkcmVuYC9gLmxvb3BUYXJnZXRgIGluIHRoZVxuICogICAgIHN1YnNlcXVlbnQgYGFkZFhgIGNhbGwuIEZyZWV6aW5nIGhlcmUgd291bGQgYnJlYWsgdGhlXG4gKiAgICAgYnVpbGRlcidzIG93biBzdWJzZXF1ZW50IG11dGF0aW9uLlxuICogICAtIEhhbmRsZXIgbXV0YXRpb24gb2YgYGV2ZW50LnNwZWNgIGlzIERPQ1VNRU5URUQgVU5ERUZJTkVEXG4gKiAgICAgQkVIQVZJT1Ig4oCUIGl0IHdpbGwgc3VjY2VlZCBhdCBydW50aW1lLCBidXQgaXMgbm90IHN1cHBvcnRlZFxuICogICAgIGFuZCBkb3duc3RyZWFtIGNvbnN1bWVycyBtYXkgYnJlYWsuIFNwZWNpZmljYWxseSwgbXV0YXRpbmdcbiAqICAgICBgZXZlbnQuc3BlYy5mbmAsIGBldmVudC5zcGVjLmlkYCwgb3IgYGV2ZW50LnNwZWMuY2hpbGRyZW5gXG4gKiAgICAgY2FuIGNvcnJ1cHQgc3Vic2VxdWVudCBydW50aW1lIGJlaGF2aW9yIG9mIHRoZSBjaGFydC5cbiAqICAgLSAqKlRydXN0IG1vZGVsKio6IGF0dGFjaCBPTkxZIHJlY29yZGVycyBmcm9tIHRydXN0ZWQgY29kZSBwYXRocy5cbiAqICAgICBBIGhvc3RpbGUgb3IgYnVnZ3kgcmVjb3JkZXIgY2FuIGVmZmVjdGl2ZWx5IHN1YnN0aXR1dGUgc3RhZ2VcbiAqICAgICBmdW5jdGlvbnMgb3IgcmV3aXJlIHRoZSBjaGFydCBzdHJ1Y3R1cmUuIFRoZSBgcmVhZG9ubHlgXG4gKiAgICAgbWFya2VycyBjYW5ub3QgZGVmZW5kIGFnYWluc3QgaW50ZW50aW9uYWwgbXV0YXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjbGFzcyBUcmFjZVN0cnVjdHVyZVJlY29yZGVyIGltcGxlbWVudHMgU3RydWN0dXJlUmVjb3JkZXIge1xuICogICByZWFkb25seSBpZCA9ICd0cmFjZS1zdGF0aWMnO1xuICogICBub2RlczogWHlmbG93Tm9kZVtdID0gW107XG4gKiAgIGVkZ2VzOiBYeWZsb3dFZGdlW10gPSBbXTtcbiAqXG4gKiAgIG9uU3RhZ2VBZGRlZChlKSB7XG4gKiAgICAgLy8gTm9kZSByb2xlOiAnc3RhZ2UnIGlzIHRoZSBpbml0aWFsIHR5cGUuIElmIG91dGdvaW5nIGVkZ2VzXG4gKiAgICAgLy8gYXJyaXZlIHdpdGgga2luZCAnZm9yay1icmFuY2gnIC8gJ2RlY2lzaW9uLWJyYW5jaCcgdGhlIG5vZGVcbiAqICAgICAvLyBpcyBmdW5jdGlvbmluZyBhcyBhIGZvcmsvZGVjaWRlciDigJQgZGVyaXZlIHRoZSB2aXN1YWwgc3R5bGVcbiAqICAgICAvLyBmcm9tIHRob3NlIGVkZ2VzLCBub3QgZnJvbSBgZS50eXBlYCBhbG9uZS5cbiAqICAgICB0aGlzLm5vZGVzLnB1c2goeyBpZDogZS5zdGFnZUlkLCB0eXBlOiAnbGVuc1N0YWdlJywgZGF0YTogeyBsYWJlbDogZS5uYW1lIH0gfSk7XG4gKiAgIH1cbiAqICAgb25FZGdlQWRkZWQoZSkge1xuICogICAgIHRoaXMuZWRnZXMucHVzaCh7IGlkOiBgJHtlLmZyb219LT4ke2UudG99YCwgc291cmNlOiBlLmZyb20sIHRhcmdldDogZS50byB9KTtcbiAqICAgfVxuICogICBvblN1YmZsb3dNb3VudGVkKGUpIHtcbiAqICAgICB0aGlzLm5vZGVzLnB1c2goeyBpZDogZS5zdWJmbG93SWQsIHR5cGU6ICdzdWJmbG93JywgZGF0YTogeyBsYWJlbDogZS5zdWJmbG93TmFtZSB9IH0pO1xuICogICB9XG4gKiAgIG9uRGVjaWRlckNvbXBsZXRlKGUpIHtcbiAqICAgICAvLyBPcHRpb25hbDogZmluYWxpemUgbm9kZSBzdHlsaW5nIG5vdyB0aGF0IGJyYW5jaCBsaXN0IGlzIHNlYWxlZC5cbiAqICAgfVxuICogfVxuICpcbiAqIC8vIFJlZ2lzdHJhdGlvbiBvcHRpb24gQSDigJQgb3B0aW9ucy1iYWcgKHByZWZlcnJlZCB3aGVuIHJlY29yZGVyc1xuICogLy8gYXJlIGtub3duIHVwIGZyb250OyBhdHRhY2hlcyBCRUZPUkUgdGhlIHNlZWQgZXZlbnQgZmlyZXMpOlxuICogY29uc3QgcmVjID0gbmV3IFRyYWNlU3RydWN0dXJlUmVjb3JkZXIoKTtcbiAqIGNvbnN0IGJ1aWxkZXIgPSBmbG93Q2hhcnQoJ3NlZWQnLCBmbiwgJ3NlZWQnLCB7XG4gKiAgIHN0cnVjdHVyZVJlY29yZGVyczogW3JlY10sXG4gKiB9KS5hZGRGdW5jdGlvbignYScsIGZuQSwgJ2EnKTtcbiAqIGNvbnN0IGNoYXJ0ID0gYnVpbGRlci5idWlsZCgpO1xuICpcbiAqIC8vIFJlZ2lzdHJhdGlvbiBvcHRpb24gQiDigJQgZmx1ZW50IGNoYWluIChwcmVmZXJyZWQgZm9yIGNvbmRpdGlvbmFsXG4gKiAvLyBvciBsYXRlIGF0dGFjaDsgdGhlIGp1c3QtYXR0YWNoZWQgcmVjb3JkZXIgZ2V0cyBhIHNlZWQgcmVwbGF5KTpcbiAqIGNvbnN0IHJlYzIgPSBuZXcgVHJhY2VTdHJ1Y3R1cmVSZWNvcmRlcigpO1xuICogY29uc3QgYnVpbGRlcjIgPSBmbG93Q2hhcnQoJ3NlZWQnLCBmbiwgJ3NlZWQnKVxuICogICAuYXR0YWNoU3RydWN0dXJlUmVjb3JkZXIocmVjMilcbiAqICAgLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpO1xuICpcbiAqIC8vIEluc3BlY3QgYW55IHJlY29yZGVyIGVycm9ycyAoY2FsbCBvbiB0aGUgQlVJTERFUiwgbm90IHRoZSBjaGFydCk6XG4gKiBjb25zdCBlcnJvcnMgPSBidWlsZGVyLmdldFN0cnVjdHVyZUJ1aWxkRXJyb3JzKCk7XG4gKlxuICogPFJlYWN0RmxvdyBub2Rlcz17cmVjLm5vZGVzfSBlZGdlcz17cmVjLmVkZ2VzfSAvPlxuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGbG93Q2hhcnRTcGVjLCBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRXZlbnQgcGF5bG9hZCB0eXBlc1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogRXZlbnQgcGF5bG9hZCBmb3IgYFN0cnVjdHVyZVJlY29yZGVyLm9uU3RhZ2VBZGRlZGAuIEZpcmVzIGZvciBldmVyeVxuICogc3BlYyBub2RlIGFkZGVkIHRvIHRoZSBjaGFydCwgaW5jbHVkaW5nIHRoZSBzZWVkIChhZGRlZCB2aWFcbiAqIGBmbG93Q2hhcnQoKWAgZmFjdG9yeSkgYW5kIHN1YmZsb3cgbW91bnQgbm9kZXMuIEV4Y2x1ZGVzIHN5bnRoZXRpY1xuICogbG9vcC1yZWZlcmVuY2Ugbm9kZXMgKHRob3NlIGNhcnJ5IGBpc0xvb3BSZWZlcmVuY2U6IHRydWVgIG9uIHRoZVxuICogc3BlYzsgY29uc3VtZXJzIHNlZSB0aGVtIHZpYSB0aGUgc2VwYXJhdGUgYG9uTG9vcEVkZ2VBZGRlZGAgZXZlbnRcbiAqIGluc3RlYWQgb2YgYXMgZnJlc2ggc3RhZ2VzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQge1xuICAvKipcbiAgICogU3RhYmxlIGlkZW50aWZpZXIgZm9yIHRoaXMgbm9kZS4gQVQgRVZFTlQgRklSRSBUSU1FIHRoaXMgaXMgdGhlXG4gICAqIGJ1aWxkZXIncyBMT0NBTCBmb3JtIChubyBzdWJmbG93IHByZWZpeCDigJQgdGhlIHByZWZpeCBpcyBhcHBsaWVkXG4gICAqIGxhdGVyIGJ5IGBfcHJlZml4Tm9kZVRyZWVgIHdoZW4gdGhpcyBidWlsZGVyIGlzIG1vdW50ZWQgYXMgYVxuICAgKiBzdWJmbG93IGludG8gYSBwYXJlbnQpLlxuICAgKlxuICAgKiBOb3RlOiBgc3BlYy5pZGAgaXMgYSBMSVZFIHJlZmVyZW5jZS4gSWYgeW91IHJlYWQgaXQgQUZURVIgdGhpc1xuICAgKiBjaGFydCBoYXMgYmVlbiBtb3VudGVkIGFzIGEgc3ViZmxvdywgaXQgbWF5IGhhdmUgYmVlbiByZXdyaXR0ZW5cbiAgICogdG8gdGhlIEZVTEwgcHJlZml4ZWQgZm9ybS4gVXNlIGBzcGxpdFN0YWdlSWQoc3BlYy5pZClgIGZyb21cbiAgICogYGZvb3RwcmludGpzL3RyYWNlYCB0byBkZWNvbXBvc2UgaXQgYmFjayBpbnRvIGxvY2FsICsgc3ViZmxvd1BhdGguXG4gICAqXG4gICAqIENvcnJlbGF0aW5nIHdpdGggcnVudGltZSBldmVudHM6XG4gICAqICAgLSBTYW1lIGJ1aWxkZXIgKG5vIG1vdW50KSDihpJcbiAgICogICAgIGBldmVudC5zdGFnZUlkID09PSBwYXJzZVJ1bnRpbWVTdGFnZUlkKHJ1bnRpbWUpLnN0YWdlSWRgXG4gICAqICAgLSBUaGlzIGJ1aWxkZXIgbW91bnRlZCBhcyBzdWJmbG93IOKGkiB1c2UgYHNwbGl0U3RhZ2VJZGAgb24gdGhlXG4gICAqICAgICBwcmVmaXhlZCBmb3JtIChvciBgcGFyc2VSdW50aW1lU3RhZ2VJZGAgb24gdGhlIGZ1bGxcbiAgICogICAgIHJ1bnRpbWVTdGFnZUlkKSBiZWZvcmUgY29tcGFyaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VJZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgbGFiZWwgZm9yIHRoZSBub2RlLiAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTcGVjIG5vZGUgYHR5cGVgLiBMZXRzIHJlY29yZGVycyBicmFuY2ggb24gc3RhZ2UgdnMgZGVjaWRlciB2c1xuICAgKiAgZm9yayB2cyBzdWJmbG93IHdpdGhvdXQgcmUtZGVyaXZpbmcgZnJvbSBvdGhlciBmaWVsZHMuICovXG4gIHJlYWRvbmx5IHR5cGU6IE5vbk51bGxhYmxlPEZsb3dDaGFydFNwZWNbJ3R5cGUnXT47XG4gIC8qKiBUcnVlIGZvciBub2RlcyBhZGRlZCB2aWEgYGFkZFBhdXNhYmxlRnVuY3Rpb24oKWAg4oCUIHVzZWZ1bCBmb3JcbiAgICogIHZpc3VhbGlzZXJzIHRoYXQgd2FudCB0byBtYXJrIHN0YWdlcyB0aGF0IGNhbiBwYXVzZSBleGVjdXRpb24uICovXG4gIHJlYWRvbmx5IGlzUGF1c2FibGU/OiBib29sZWFuO1xuICAvKipcbiAgICogVGhlIG5hbWVzIGRlY2xhcmVkIG9uIHRoZSBzdGFnZSBBVCBFVkVOVCBGSVJFIFRJTUUgKGBvcHRpb25zLnRhZ3NgXG4gICAqIGxhbmRzIGJlZm9yZSB0aGlzIGV2ZW50IGZpcmVzOyBhYnNlbnQgd2hlbiBub25lIOKAlCB0aGUgXCJhYnNlbnQgd2hlblxuICAgKiBlbXB0eVwiIGxhdyB0aGUgY29tbWl0IGJ1bmRsZSBrZWVwcykuIE5hbWVzIGRlY2xhcmVkIGFmdGVyd2FyZHNcbiAgICogdGhyb3VnaCB0aGUgYC50YWcoLi4uKWAgY3Vyc29yIGRvb3IgYXJyaXZlIGFzIHRoZWlyIG93blxuICAgKiB7QGxpbmsgU3RydWN0dXJlUmVjb3JkZXIub25TdGFnZVRhZ2dlZH0gZXZlbnQg4oCUIGEgcmVjb3JkZXIgdGhhdFxuICAgKiBjb3BpZXMgZmllbGRzIGhlcmUgaW5zdGVhZCBvZiBob2xkaW5nIGBzcGVjYCB3b3VsZCBvdGhlcndpc2VcbiAgICogbmV2ZXIgbGVhcm4gb2YgdGhlbSAoOS4yNC4wKS5cbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIExpdmUgcmVmZXJlbmNlIHRvIHRoZSBmdWxsIHNwZWMgbm9kZSwgZm9yIGhhbmRsZXJzIHRoYXQgd2FudFxuICAgKiAgZGV0YWlscyBiZXlvbmQgdGhlIGRpc2NyaW1pbmF0b3IgZmllbGRzIGFib3ZlLiBNVVNUIE5PVCBiZVxuICAgKiAgbXV0YXRlZCBieSB0aGUgaGFuZGxlciDigJQgcmVhZG9ubHkgaXMgdHlwZS1sZXZlbCBpbnRlbnQ7IG5vXG4gICAqICBydW50aW1lIGZyZWV6ZS4gU2VlIFwiU3BlYyBtdXRhdGlvblwiIGluIHRoZSBmaWxlIGhlYWRlciBmb3IgdGhlXG4gICAqICB0cnVzdC1tb2RlbCBjYXZlYXRzLiAqL1xuICByZWFkb25seSBzcGVjOiBGbG93Q2hhcnRTcGVjO1xufVxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vblN0YWdlVGFnZ2VkYC4gRmlyZXMgd2hlbiBuYW1lc1xuICogbGFuZCBvbiBhIHN0YWdlIEFGVEVSIGl0cyBgb25TdGFnZUFkZGVkYCBhbHJlYWR5IGZpcmVkIOKAlCB0aGVcbiAqIGAudGFnKC4uLilgIGN1cnNvciBkb29yIChgZmxvd0NoYXJ0KC4uLikuYWRkRnVuY3Rpb24oLi4uKS50YWcoJ2EnKWApLlxuICogTmFtZXMgZGVjbGFyZWQgaW4gdGhlIHNhbWUgY2FsbCBhcyB0aGUgc3RhZ2UgKGBvcHRpb25zLnRhZ3NgLFxuICogYFN1YmZsb3dNb3VudE9wdGlvbnMudGFnc2ApIHJpZGUgYFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudC50YWdzYCBhbmRcbiAqIGRvIE5PVCBmaXJlIHRoaXM6IG9uZSBkZWNsYXJhdGlvbiwgb25lIGV2ZW50LiBgdGFnc2AgaXMgdGhlIENPTVBMRVRFXG4gKiBsaXN0IG9uIHRoZSBzdGFnZSBhZnRlciB0aGUgZG9vciDigJQgdGhlIGJ1aWxkZXIgcmVmdXNlcyBhIHNlY29uZFxuICogZGVjbGFyYXRpb24gb24gdGhlIHNhbWUgc3RhZ2UsIHNvIGl0IGlzIGFsc28gdGhlIG9ubHkgb25lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZVN0YWdlVGFnZ2VkRXZlbnQge1xuICAvKiogVGhlIGJ1aWxkZXIncyBMT0NBTCBzdGFnZSBpZCAoc2VlIGBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQuc3RhZ2VJZGApLiAqL1xuICByZWFkb25seSBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIG5vZGUuICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgLyoqIEV2ZXJ5IG5hbWUgbm93IGRlY2xhcmVkIG9uIHRoZSBzdGFnZS4gKi9cbiAgcmVhZG9ubHkgdGFnczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBMaXZlIHJlZmVyZW5jZSB0byB0aGUgc3BlYyBub2RlIOKAlCBzYW1lIGNhdmVhdHMgYXMgb24gYG9uU3RhZ2VBZGRlZGAuICovXG4gIHJlYWRvbmx5IHNwZWM6IEZsb3dDaGFydFNwZWM7XG59XG5cbi8qKiBFZGdlIGtpbmRzIHRoZSBidWlsZGVyIHByb2R1Y2VzIGF0IHN0cnVjdHVyYWwgdGltZS4gTWF0Y2hlcyB0aGVcbiAqICBmb290cHJpbnRqcyBjb250cm9sLWZsb3cgdm9jYWJ1bGFyeSB1c2VkIGF0IHJ1bnRpbWUuXG4gKlxuICogIFdoeSBubyBgc3ViZmxvdy1lbnRyeWAgaGVyZTogc3ViZmxvdyBtb3VudHMgdXNlIHRoZSBsaWZlY3ljbGVcbiAqICBldmVudCBgb25TdWJmbG93TW91bnRlZGAgKG5vdCBhbiBlZGdlIGV2ZW50KS4gSWYgYSBmdXR1cmUgdXNlIGNhc2VcbiAqICBuZWVkcyB0aGUgcGFyZW504oaSc3ViZmxvdy1yb290IGVkZ2UgYXMgYSBkaXN0aW5jdCBraW5kLCBpdCdsbCBiZVxuICogIGFkZGVkIHRoZW4g4oCUIFlBR05JIG5vdyAoUGFuZWwgMywgTDcuMiByZXZpZXcpLiAqL1xuZXhwb3J0IHR5cGUgU3RydWN0dXJlRWRnZUtpbmQgPVxuICB8ICduZXh0JyAvLyBsaW5lYXIgY2hhaW46IHByZXYubmV4dCA9IGN1cnJcbiAgfCAnZm9yay1icmFuY2gnIC8vIGZvcmsgcGFyZW50IOKGkiBwYXJhbGxlbCBjaGlsZFxuICB8ICdkZWNpc2lvbi1icmFuY2gnOyAvLyBkZWNpZGVyIOKGkiBicmFuY2ggY2hpbGRcblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25FZGdlQWRkZWRgLiBGaXJlcyB3aGVuZXZlclxuICogdGhlIGJ1aWxkZXIgd2lyZXMgYW4gb3V0Z29pbmcgZWRnZSBmcm9tIG9uZSBub2RlIHRvIGFub3RoZXIuIEJvdGhcbiAqIGVuZHBvaW50cyBoYXZlIGFscmVhZHkgYmVlbiBhbm5vdW5jZWQgdmlhIGBvblN0YWdlQWRkZWRgIGJ5IHRoZVxuICogdGltZSB0aGlzIGZpcmVzLlxuICpcbiAqIExvb3AgYmFjay1lZGdlcyBoYXZlIHRoZWlyIE9XTiBldmVudCAoYG9uTG9vcEVkZ2VBZGRlZGApIHNvXG4gKiBjb25zdW1lcnMgY2FuIHRoZW1lIHRoZW0gZGlzdGluY3RseSBhbmQgc28gYnVpbGQtdGltZSBldmVudHMgc3RheVxuICogZnJlZSBvZiB0aGUgcnVudGltZS1vbmx5IGBpdGVyYXRpb25gIGZpZWxkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50IHtcbiAgcmVhZG9ubHkgZnJvbTogc3RyaW5nO1xuICByZWFkb25seSB0bzogc3RyaW5nO1xuICByZWFkb25seSBraW5kOiBTdHJ1Y3R1cmVFZGdlS2luZDtcbiAgLyoqIE9wdGlvbmFsIGh1bWFuLXJlYWRhYmxlIGxhYmVsIOKAlCB1c2VkIHRvZGF5IGZvciBkZWNpZGVyIGJyYW5jaFxuICAgKiAga2V5cyAoZS5nLiwgYCdsb3cnYCwgYCdoaWdoJ2AsIGAnaGlnaCAoZGVmYXVsdCknYCkgYW5kIHBhcmFsbGVsXG4gICAqICBicmFuY2ggaWRzLiAqL1xuICByZWFkb25seSBsYWJlbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25Mb29wRWRnZUFkZGVkYC4gRmlyZXMgd2hlblxuICogYC5sb29wVG8odGFyZ2V0KWAgaW5zdGFsbHMgYSBiYWNrLWVkZ2UuIERpc3RpbmN0IGZyb21cbiAqIGBvbkVkZ2VBZGRlZGAgc28gY29uc3VtZXJzIGNhbiB0aGVtZSBiYWNrLWVkZ2VzIGRpZmZlcmVudGx5IGFuZFxuICogYmVjYXVzZSBydW50aW1lIGBvbkxvb3BgIGNhcnJpZXMgYGl0ZXJhdGlvbjogbnVtYmVyYCB3aGljaCBoYXMgbm9cbiAqIGJ1aWxkLXRpbWUgbWVhbmluZyDigJQga2VlcGluZyB0aGUgZXZlbnRzIHNlcGFyYXRlZCBhdm9pZHMgZm9yY2luZ1xuICogYW4gYGl0ZXJhdGlvbj86IG51bWJlcmAgbGllIGludG8gdGhlIHN0cnVjdHVyYWwgc2hhcGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50IHtcbiAgcmVhZG9ubHkgZnJvbTogc3RyaW5nO1xuICByZWFkb25seSB0bzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vbkRlY2lkZXJDb21wbGV0ZWAuIEZpcmVzXG4gKiB3aGVuIGEgZGVjaWRlciAvIHNlbGVjdG9yIHN1Yi1idWlsZGVyIGNsb3NlcyB2aWEgYC5lbmQoKWAuIEJ5IHRoZVxuICogdGltZSB0aGlzIGZpcmVzIGV2ZXJ5IGJyYW5jaCBoYXMgYmVlbiBhbm5vdW5jZWQgYW5kIHRoZVxuICogYGRlZmF1bHRCcmFuY2hgIChpZiBzZXQgdmlhIGAuc2V0RGVmYXVsdCgpYCkgaXMgZmluYWwuIExldHNcbiAqIHJlY29yZGVycyB0cmVhdCB0aGUgZGVjaWRlciBhcyBuby1mdXJ0aGVyLW11dGF0aW9uIGFuZCBzbmFwc2hvdFxuICogaXRzIGJyYW5jaCBsaXN0IGFzIGZpbmFsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50IHtcbiAgLyoqIERlY2lkZXIgLyBzZWxlY3RvciBzdGFnZSBpZC4gKi9cbiAgcmVhZG9ubHkgZGVjaWRlcjogc3RyaW5nO1xuICAvKiogU3BlYyB0eXBlIChgJ2RlY2lkZXInYCB2cyBgJ3NlbGVjdG9yJ2ApIOKAlCBleHBvc2VkIHNvIGNvbnN1bWVyc1xuICAgKiAgZG9uJ3QgbmVlZCB0byBsb29rIHVwIHRoZSBvcmlnaW5hbCBgb25TdGFnZUFkZGVkYCBldmVudC4gKi9cbiAgcmVhZG9ubHkgdHlwZTogJ2RlY2lkZXInIHwgJ3NlbGVjdG9yJztcbiAgLyoqIEJyYW5jaCBtZW1iZXIgaWRzIGluIGRlY2xhcmF0aW9uIG9yZGVyLiAqL1xuICByZWFkb25seSBicmFuY2hJZHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogRGVmYXVsdCBicmFuY2ggaWQgd2hlbiBzZXQgdmlhIGAuc2V0RGVmYXVsdCgpYDsgdW5kZWZpbmVkIHdoZW5cbiAgICogIG5vIGRlZmF1bHQgaXMgY29uZmlndXJlZCAoZS5nLiwgc2VsZWN0b3JzKS4gKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEJyYW5jaD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25TdWJmbG93TW91bnRlZGAuIEZpcmVzIG9uY2VcbiAqIHBlciBzdWJmbG93IG1vdW50IChgYWRkU3ViRmxvd0NoYXJ0YCAvIGBhZGRTdWJGbG93Q2hhcnROZXh0YCBhbmRcbiAqIHRoZWlyIGxhenkgdmFyaWFudHMpLlxuICpcbiAqICoqTU9VTlQtT05MWSBzZW1hbnRpY3MqKiDigJQgdGhlIHN1YmZsb3cncyBPV04gc3RydWN0dXJlIGV2ZW50c1xuICogKGV2ZXJ5IGBvblN0YWdlQWRkZWRgIC8gYG9uRWRnZUFkZGVkYCBpbnNpZGUgdGhlIHN1YmZsb3cpIGZpcmVkXG4gKiBkdXJpbmcgdGhlIHN1YmZsb3cncyBvd24gYC5idWlsZCgpYCwgYmVmb3JlIHRoZSBtb3VudC4gUGFyZW50XG4gKiByZWNvcmRlcnMgZG8gTk9UIHJlY2VpdmUgYSByZXBsYXkuIEluc3RlYWQsIHRoaXMgZXZlbnQgZGVsaXZlcnNcbiAqIHRoZSBzdWJmbG93J3MgZnVsbCBzdHJ1Y3R1cmUgdmlhIGBzdWJmbG93U3BlY2AsIGFuZCBjb25zdW1lcnMgY2FuXG4gKiB3YWxrIGl0IHZpYSBgd2Fsa1N1YmZsb3dTcGVjYCBmcm9tIGBmb290cHJpbnRqcy90cmFjZWAuXG4gKlxuICogVGhpcyBtYXRjaGVzIGBGbG93UmVjb3JkZXIub25TdWJmbG93RW50cnlgIHNlbWFudGljcyBhdCBydW50aW1lXG4gKiAocGFyZW50cyBzZWUgdGhlIGJvdW5kYXJ5LCBub3QgYSByZXBsYXkgb2YgaW50ZXJuYWxzKSBhbmRcbiAqIHByZXNlcnZlcyB0aGUgXCJvbmUgcHVycG9zZSBwZXIgcmVjb3JkZXJcIiBjb252ZW50aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQge1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyIHRoZSBwYXJlbnQgYXNzaWduZWQgYXQgbW91bnQuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dJZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgc3ViZmxvdyBuYW1lLiAqL1xuICByZWFkb25seSBzdWJmbG93TmFtZTogc3RyaW5nO1xuICAvKiogTW91bnQgbm9kZSBpZCBpbiB0aGUgcGFyZW50J3MgY2hhcnQuICovXG4gIHJlYWRvbmx5IHJvb3RTdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBUcnVlIHdoZW4gdGhlIG1vdW50IHVzZXMgbGF6eSByZXNvbHV0aW9uIChkZWZlcnJlZCBzdWJmbG93XG4gICAqICByZXNvbHV0aW9uIHVudGlsIGV4ZWN1dGlvbikuICovXG4gIHJlYWRvbmx5IGlzTGF6eT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtb3VudGVkIHN1YmZsb3cncyBjb21wbGV0ZSBzcGVjIOKAlCB0aGUgU0FNRSBPQkpFQ1RcbiAgICogKD09PSByZWZlcmVuY2UgZXF1YWxpdHkpIHJlYWNoYWJsZSB2aWEgYHN1YmZsb3cuYnVpbGRUaW1lU3RydWN0dXJlYFxuICAgKiBmb3IgdGhlIEZsb3dDaGFydCB0aGUgY29uc3VtZXIgcGFzc2VkIHRvIGBhZGRTdWJGbG93Q2hhcnRCcmFuY2hgIC9cbiAgICogYGFkZFN1YkZsb3dDaGFydGAgLyBgYWRkU3ViRmxvd0NoYXJ0TmV4dGAuXG4gICAqXG4gICAqIFVOREVGSU5FRCBmb3IgbGF6eSBtb3VudHMgYXQgYnVpbGQgdGltZSAoYGlzTGF6eTogdHJ1ZWApIOKAlCB0aGVcbiAgICogc3ViZmxvdydzIHN0cnVjdHVyZSBoYXNuJ3QgYmVlbiByZXNvbHZlZCB5ZXQuIENvbnN1bWVycyB3YWl0aW5nIG9uXG4gICAqIGxhenkgc3ViZmxvd3MgaGFuZGxlIHRoZSBydW50aW1lIGBvblN1YmZsb3dFbnRyeWAgZXZlbnQgaW5zdGVhZC5cbiAgICpcbiAgICogSW1tdXRhYmxlIHBvc3QtYnVpbGQ7IGNvbnN1bWVycyBNVVNUIE5PVCBtdXRhdGUuXG4gICAqXG4gICAqIEBpbnRlcm5hbCBgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlYCBpcyBsaWJyYXJ5LWludGVybmFsLlxuICAgKiAgICAgICAgICAgVXNlIGB3YWxrU3ViZmxvd1NwZWNgIGZyb20gYGZvb3RwcmludGpzL3RyYWNlYCBmb3IgdGhlXG4gICAqICAgICAgICAgICBzdGFibGUgcHVibGljIGNvbnRyYWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1NwZWM/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG5cbiAgLyoqXG4gICAqIExvY2FsIG1vdW50IGlkIG9mIHRoaXMgc3ViZmxvdyB3aXRoaW4gaXRzIHBhcmVudCDigJQgZXF1YWwgdG9cbiAgICogYHN1YmZsb3dJZGAgZm9yIHRvcC1sZXZlbCBtb3VudHMgKGUuZy4gYCdhdXRoJ2ApLCBjb21wb3NlZFxuICAgKiAoYCdhdXRoL3ZlcmlmeSdgKSBmb3IgbmVzdGVkIG1vdW50cyB3aG9zZSByZWNvcmRlciBpcyBhdHRhY2hlZFxuICAgKiB0byB0aGUgZ3JhbmRwYXJlbnQuIE1hdGNoZXMgcnVudGltZSBgdHJhdmVyc2FsQ29udGV4dC5zdWJmbG93UGF0aGBcbiAgICogc2VtYW50aWNzIOKAlCBORVZFUiBwcmVmaXhlZCB3aXRoIGBfX3Jvb3RfXy9gLlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg6IHN0cmluZztcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTdHJ1Y3R1cmVSZWNvcmRlciBpbnRlcmZhY2Vcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFBsdWdnYWJsZSBvYnNlcnZlciBmb3IgQlVJTEQtVElNRSBjaGFydCBjb25zdHJ1Y3Rpb24gZXZlbnRzLlxuICpcbiAqIEFsbCBtZXRob2RzIGFyZSBvcHRpb25hbCDigJQgaW1wbGVtZW50IG9ubHkgdGhlIGhvb2tzIHlvdSBuZWVkLlxuICogSGFuZGxlcnMgZmlyZSBTWU5DSFJPTk9VU0xZIGR1cmluZyBidWlsZGVyIG9wZXJhdGlvbnMgYW5kIGAuYnVpbGQoKWAuXG4gKiBBIHRocm93aW5nIGhhbmRsZXIgaXMgY2F1Z2h0IChzZWUgXCJFcnJvciBpc29sYXRpb25cIiBpbiB0aGUgZmlsZVxuICogaGVhZGVyKTsgc3Vic2VxdWVudCBkaXNwYXRjaCBjb250aW51ZXMuXG4gKlxuICogTGlmZWN5Y2xlOiBlYWNoIGBTdHJ1Y3R1cmVSZWNvcmRlcmAgaW5zdGFuY2UgaXMgcmVnaXN0ZXJlZCB2aWFcbiAqIEVJVEhFUiB0aGUgYGZsb3dDaGFydCgpYCBvcHRpb25zIGJhZyAoYHsgc3RydWN0dXJlUmVjb3JkZXJzOiBbcmVjXSB9YClcbiAqIE9SIHRoZSBmbHVlbnQgYC5hdHRhY2hTdHJ1Y3R1cmVSZWNvcmRlcihyZWMpYCBjaGFpbiDigJQgc2VlIHRoZSBmaWxlXG4gKiBoZWFkZXIgZm9yIHRoZSB0cmFkZS1vZmZzLiBSZWdpc3RyYXRpb24gYWZ0ZXIgYC5idWlsZCgpYCBpc1xuICogcmVqZWN0ZWQgKGNoYXJ0IGlzIHNlYWxlZCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlUmVjb3JkZXIge1xuICAvKipcbiAgICogU3RhYmxlIGlkZW50aWZpZXIg4oCUIHVzZWQgYnkgdGhlIGRpc3BhdGNoZXIgdG8gc2NvcGUgZXJyb3JcbiAgICogbWVzc2FnZXMgYW5kIHRvIHN1cHBvcnQgYGRldGFjaChpZClgIGxvb2t1cC5cbiAgICpcbiAgICogQ29udmVudGlvbiAobWF0Y2hlcyBgRmxvd1JlY29yZGVyLmlkYCBmcm9tIENMQVVERS5tZCk6XG4gICAqICAgLSBkb21haW4tcHJlZml4ZWQga2ViYWItY2FzZSAoYCdsZW5zLXN0cnVjdHVyZSdgLFxuICAgKiAgICAgYCdhZ2VudGZvb3RwcmludC1jb21wb3NpdGlvbidgLCBgJ3RyYWNlLWV4cGxhaW5hYmxlJ2ApXG4gICAqICAgLSBzYW1lIGlkIOKGkiBtdWx0aXBsZSByZWNvcmRlcnMgY29leGlzdCAoTk9UIGRlZHVwbGljYXRlZCBieVxuICAgKiAgICAgaWQ7IHRoZSBkaXNwYXRjaGVyIGZpcmVzIGV2ZXJ5IGF0dGFjaGVkIHJlY29yZGVyIHJlZ2FyZGxlc3MpXG4gICAqICAgLSBgZGV0YWNoKGlkKWAgcmVtb3ZlcyBFVkVSWSByZWNvcmRlciB3aXRoIHRoYXQgaWQg4oCUIGJlXG4gICAqICAgICBpbnRlbnRpb25hbCBhYm91dCByZXVzZSBpZiB5b3UgcmVseSBvbiBzZWxlY3RpdmUgZGV0YWNoXG4gICAqXG4gICAqIENob29zZSBhIHN0YWJsZSBpZCBhdCBtb2R1bGUgbG9hZCBhbmQgZG9uJ3QgcmFuZG9taXNlIGl0IGFjcm9zc1xuICAgKiBydW5zIOKAlCBpdCBsYW5kcyBpbiBgU3RydWN0dXJlQnVpbGRFcnJvci5yZWNvcmRlcklkYCBzbyBkZWJ1Z1xuICAgKiBvdXRwdXQgaXMgZ3JlcHBhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICBvblN0YWdlQWRkZWQ/KGV2ZW50OiBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQpOiB2b2lkO1xuICAvKiogTmFtZXMgdGhhdCBsYW5kZWQgb24gYSBzdGFnZSBhZnRlciBpdHMgYG9uU3RhZ2VBZGRlZGAgKHRoZSBgLnRhZygpYCBkb29yKS4gKi9cbiAgb25TdGFnZVRhZ2dlZD8oZXZlbnQ6IFN0cnVjdHVyZVN0YWdlVGFnZ2VkRXZlbnQpOiB2b2lkO1xuICBvbkVkZ2VBZGRlZD8oZXZlbnQ6IFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50KTogdm9pZDtcbiAgb25Mb29wRWRnZUFkZGVkPyhldmVudDogU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50KTogdm9pZDtcbiAgb25EZWNpZGVyQ29tcGxldGU/KGV2ZW50OiBTdHJ1Y3R1cmVEZWNpZGVyQ29tcGxldGVFdmVudCk6IHZvaWQ7XG4gIG9uU3ViZmxvd01vdW50ZWQ/KGV2ZW50OiBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50KTogdm9pZDtcbn1cbiJdfQ==
|
|
159
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RydWN0dXJlUmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvc3RydWN0dXJlL1N0cnVjdHVyZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EySkciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0cnVjdHVyZVJlY29yZGVyIOKAlCBwYXNzaXZlIG9ic2VydmVyIG9mIEJVSUxELVRJTUUgY2hhcnQgY29uc3RydWN0aW9uIGV2ZW50cy5cbiAqXG4gKiBUaGUgYnVpbGQtdGltZSB0d2luIG9mIGBGbG93UmVjb3JkZXJgLiBXaGVyZSBgRmxvd1JlY29yZGVyYCBvYnNlcnZlc1xuICogUlVOVElNRSBjb250cm9sLWZsb3cgdHJhbnNpdGlvbnMgKHBlci1leGVjdXRpb24gYHJ1bnRpbWVTdGFnZUlkYCxcbiAqIGl0ZXJhdGlvbiBjb3VudHMsIGVycm9ycywgcGF1c2VzKSwgYFN0cnVjdHVyZVJlY29yZGVyYCBvYnNlcnZlc1xuICogU1RBVElDIGNoYXJ0IHNoYXBlIGFzIGl0J3MgYXNzZW1ibGVkIGJ5IHRoZSBidWlsZGVyIOKAlCBldmVyeSBzcGVjXG4gKiBub2RlIGFkZGVkLCBldmVyeSBvdXRnb2luZyBlZGdlIHdpcmVkLCBldmVyeSBkZWNpZGVyIGNsb3NlZC5cbiAqXG4gKiBXaHkgdHdvIGludGVyZmFjZXMsIG5vdCBvbmVcbiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogICBCdWlsZCBhbmQgcnVudGltZSBldmVudHMgaGF2ZSBkaWZmZXJlbnQgSU5WQVJJQU5UUywgbm90IGp1c3RcbiAqICAgZGlmZmVyZW50IHRpbWluZzpcbiAqXG4gKiAgICAgLSBSdW50aW1lIGV2ZW50cyBjYXJyeSBgcnVudGltZVN0YWdlSWRgIChgW3N1YmZsb3dQYXRoL11zdGFnZUlkI05gKSxcbiAqICAgICAgIGBpdGVyYXRpb25gLCBgdHJhdmVyc2FsQ29udGV4dGAg4oCUIGxvYWQtYmVhcmluZyBmb3IgdGltZS10cmF2ZWxcbiAqICAgICAgIFVJcywgY29tbWl0LWxvZyBpbmRpY2VzLCBhbmQgYFNlcXVlbmNlU3RvcmU8VD5gIGNvbnN1bWVycy5cbiAqICAgICAgIE5PTkUgb2YgdGhlc2UgZXhpc3QgYXQgYnVpbGQgdGltZS5cbiAqXG4gKiAgICAgLSBCdWlsZCBldmVudHMgY2Fycnkgb25seSBgc3RhZ2VJZGAgKyBzdHJ1Y3R1cmFsIGZpZWxkcy4gTm9cbiAqICAgICAgIGV4ZWN1dGlvbiBpbmRleCwgbm8gaXRlcmF0aW9uLCBubyBzbmFwc2hvdC5cbiAqXG4gKiAgICAgLSBTb21lIGV2ZW50cyBoYXZlIG5vIGFuYWxvZyBhY3Jvc3MgcGhhc2VzOiBgb25QYXVzZWAgL1xuICogICAgICAgYG9uUmVzdW1lYCAvIGBvbkVycm9yYCAvIGBvblJ1blN0YXJ0YCBhcmUgcnVudGltZS1vbmx5O1xuICogICAgICAgYG9uRGVjaWRlckNvbXBsZXRlYCAvIGBvblN0YWdlQWRkZWRgIGFyZSBidWlsZC1vbmx5LlxuICpcbiAqICAgQSBzaW5nbGUgYEZsb3dSZWNvcmRlcmAgd2l0aCBgcGhhc2U6ICdzdGF0aWMnIHwgJ2R5bmFtaWMnYFxuICogICBkaXNjcmltaW5hdG9yIHdvdWxkIGZvcmNlIGV2ZXJ5IGNvbnN1bWVyIHRvIHdyaXRlXG4gKiAgIGBpZiAoZS5waGFzZSA9PT0gJ3N0YXRpYycpIC4uLmAgYnJhbmNoZXMgYW5kIHdvdWxkIGVyYXNlIHRoZVxuICogICBsZWFzdC1wcml2aWxlZ2UgYm91bmRhcnkgKGEgc3RhdGljLW9ubHkgY29uc3VtZXIgc2hvdWxkIE5PVFxuICogICBhY2NpZGVudGFsbHkgb2JzZXJ2ZSBydW50aW1lIGRhdGEg4oCUIGUuZy4sIGEgcHVibGljIGRvY3Mgc2l0ZVxuICogICByZW5kZXJpbmcgY2hhcnQgdG9wb2xvZ3kgbXVzdCBub3Qgc2VlIHNjb3BlIHZhbHVlcykuXG4gKlxuICogICBUd28gaW50ZXJmYWNlcywgc2FtZSBtZW50YWwgbW9kZWwsIGNsZWFuIHNlcGFyYXRpb24uIFR3b1xuICogICByZWdpc3RyYXRpb24gc2l0ZXMgc2hpcCB0b2RheSAocGljayB3aGljaGV2ZXIgZml0cyB5b3VyIGNhbGxcbiAqICAgc2l0ZSk6XG4gKlxuICogICAgIDEuICoqT3B0aW9ucy1iYWcqKiAocHJlZmVycmVkIHdoZW4gdGhlIHJlY29yZGVyIHNldCBpcyBrbm93blxuICogICAgICAgIGF0IGNvbnN0cnVjdGlvbiB0aW1lIOKAlCByZWdpc3RlcnMgQkVGT1JFIGBzdGFydCgpYCBzbyBldmVuXG4gKiAgICAgICAgdGhlIHNlZWQgZXZlbnQgZmlyZXMgdGhyb3VnaCB0aGUgbm9ybWFsIGRpc3BhdGNoZXIgZmFuLW91dCk6XG4gKiAgICAgICAgYGBgdHNcbiAqICAgICAgICBmbG93Q2hhcnQoJ3NlZWQnLCBmbiwgJ3NlZWQnLCB7IHN0cnVjdHVyZVJlY29yZGVyczogW3JlY10gfSlcbiAqICAgICAgICAgIC5hZGRGdW5jdGlvbignYScsIGZuQSwgJ2EnKS5idWlsZCgpO1xuICogICAgICAgIGBgYFxuICpcbiAqICAgICAyLiAqKkZsdWVudCoqIChwcmVmZXJyZWQgd2hlbiBhdHRhY2ggaXMgY29uZGl0aW9uYWwsIGxhdGUsIG9yXG4gKiAgICAgICAgaW4gYSBjaGFpbiBidWlsZGVyIOKAlCB0aGUganVzdC1hdHRhY2hlZCByZWNvcmRlciBnZXRzIGFcbiAqICAgICAgICBvbmUtdGltZSBzZWVkIHJlcGxheSBzbyBpdCBvYnNlcnZlcyB0aGUgcm9vdCBzdGFnZSk6XG4gKiAgICAgICAgYGBgdHNcbiAqICAgICAgICBmbG93Q2hhcnQoJ3NlZWQnLCBmbiwgJ3NlZWQnKVxuICogICAgICAgICAgLmF0dGFjaFN0cnVjdHVyZVJlY29yZGVyKHJlYylcbiAqICAgICAgICAgIC5hZGRGdW5jdGlvbignYScsIGZuQSwgJ2EnKS5idWlsZCgpO1xuICogICAgICAgIGBgYFxuICpcbiAqICAgQm90aCBkZWxpdmVyIHRoZSBzYW1lIGV2ZW50IHN0cmVhbSB0byB0aGUgc2FtZSByZWNvcmRlci4gU2VlIHRoZVxuICogICBgQGV4YW1wbGVgIGJsb2NrIGJlbG93IGZvciBhIGZ1bGx5LWZsZXNoZWQtb3V0IGltcGxlbWVudGF0aW9uLlxuICpcbiAqIExpZmVjeWNsZSArIG9yZGVyaW5nIGludmFyaWFudHNcbiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogICAtIEZpcmVzIFNZTkNIUk9OT1VTTFkgZHVyaW5nIGJ1aWxkZXIgY2hhaW4gY2FsbHMgKGFuZCBkdXJpbmdcbiAqICAgICBgLmJ1aWxkKClgIGZvciB0aGUgdGVybWluYWwgbm9kZSkgYXQgdGhlIG5hdHVyYWwgbW9tZW50IGVhY2hcbiAqICAgICBzcGVjIG11dGF0aW9uIGNvbXBsZXRlcy5cbiAqICAgLSBgb25TdGFnZUFkZGVkKEEpYCBhbmQgYG9uU3RhZ2VBZGRlZChCKWAgZmlyZSBCRUZPUkUgYW55XG4gKiAgICAgYG9uRWRnZUFkZGVkKHtmcm9tOiBBLCB0bzogQn0pYCDigJQgZW5kcG9pbnQgcmVnaXN0cmF0aW9uXG4gKiAgICAgaGFwcGVucyBiZWZvcmUgZWRnZSB3aXJpbmcuXG4gKiAgIC0gYG9uRGVjaWRlckNvbXBsZXRlKEQpYCBmaXJlcyBhdCBzdWItYnVpbGRlciBgLmVuZCgpYCB0aW1lLCBBRlRFUlxuICogICAgIGV2ZXJ5IGNoaWxkJ3MgYG9uU3RhZ2VBZGRlZGAgYW5kIGV2ZXJ5IGBvbkVkZ2VBZGRlZCh7ZnJvbTogRCxcbiAqICAgICB0bzogY2hpbGR9KWAuIE1hcmtzIHRoZSBkZWNpZGVyIGFzIG5vLWZ1cnRoZXItbXV0YXRpb24uXG4gKiAgIC0gYG9uU3ViZmxvd01vdW50ZWQoe3N1YmZsb3dJZH0pYCBmaXJlcyBvbmNlIHBlciBtb3VudC5cbiAqICAgICAqKk1PVU5ULU9OTFkqKjogcGFyZW50IHJlY29yZGVycyBkbyBOT1QgcmVjZWl2ZSBhIHJlcGxheSBvZlxuICogICAgIHRoZSBzdWJmbG93J3Mgb3duIGludGVybmFsIHN0cnVjdHVyZSBldmVudHMgKHRob3NlIGZpcmVkXG4gKiAgICAgZHVyaW5nIHRoZSBzdWJmbG93J3Mgb3duIGAuYnVpbGQoKWApLiBNYXRjaGVzIHRoZSBydW50aW1lXG4gKiAgICAgYG9uU3ViZmxvd0VudHJ5YCBzZW1hbnRpY3Mg4oCUIGNvbXBvc2l0aW9uIG92ZXIgcmVwbGF5LlxuICpcbiAqIEVycm9yIGlzb2xhdGlvbiAobWF0Y2hlcyBGbG93UmVjb3JkZXIgY29udHJhY3QpXG4gKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAqICAgLSBBIHRocm93aW5nIGhhbmRsZXIgaXMgY2F1Z2h0LCBsb2dnZWQgdmlhIGBpc0Rldk1vZGUoKWAgd2FybmluZyxcbiAqICAgICBhbmQgYWNjdW11bGF0ZWQgb24gYGJ1aWxkZXIuZ2V0U3RydWN0dXJlQnVpbGRFcnJvcnMoKWAgZm9yXG4gKiAgICAgcG9zdC1ob2MgaW5zcGVjdGlvbi5cbiAqICAgLSBTdWJzZXF1ZW50IHJlY29yZGVycyArIHN1YnNlcXVlbnQgZXZlbnRzIGZpcmUgbm9ybWFsbHk7IG9uZVxuICogICAgIG1pc2JlaGF2aW5nIHJlY29yZGVyIGNhbm5vdCBUSFJPVyBpdHMgd2F5IGludG8gYmxvY2tpbmdcbiAqICAgICBjb25zdHJ1Y3Rpb24uXG4gKiAgIC0gVGhlIGVycm9yc1tdIGFjY3VtdWxhdG9yIGlzIHNvZnQtY2FwcGVkICh+MTAwIGVudHJpZXMpIHdpdGggYVxuICogICAgIGBfX3RydW5jYXRlZF9fYCBzZW50aW5lbCByZWNvcmQgb25jZSB0aGUgY2FwIGlzIGhpdCwgdG8gcHJldmVudFxuICogICAgIHVuYm91bmRlZCBncm93dGggb24gY2hhdHR5IGJyb2tlbiByZWNvcmRlcnMuXG4gKiAgIC0gTm90ZTogdGhyb3cgaXNvbGF0aW9uIGRvZXMgTk9UIGRlZmVuZCBhZ2FpbnN0IGEgaGFuZGxlciB0aGF0XG4gKiAgICAgc3VjY2VlZHMgYXQgcnVudGltZSBidXQgbXV0YXRlcyBgZXZlbnQuc3BlY2AgdG8gY29ycnVwdCB0aGVcbiAqICAgICBjaGFydC4gU2VlIFwiU3BlYyBtdXRhdGlvblwiIGJlbG93LlxuICpcbiAqIFNwZWMgbXV0YXRpb24g4oCUIHJlYWRvbmx5LWJ5LWNvbnRyYWN0IChOT1QgcnVudGltZS1lbmZvcmNlZClcbiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogICAtIEV2ZW50IHBheWxvYWRzIHBhc3Mgc3BlYyByZWZlcmVuY2VzIHdoZXJlIHVzZWZ1bCAoZS5nLiwgYHNwZWNgXG4gKiAgICAgb24gYG9uU3RhZ2VBZGRlZGApLiBFdmVyeSBmaWVsZCBvbiBldmVyeSBldmVudCBwYXlsb2FkIGlzXG4gKiAgICAgbWFya2VkIGByZWFkb25seWAgaW4gVHlwZVNjcmlwdCDigJQgdGhlIHR5cGUgc3lzdGVtIHNpZ25hbHNcbiAqICAgICBjb25zdW1lciBpbnRlbnQgYXQgYXV0aG9yIHRpbWUuXG4gKiAgIC0gVGhlcmUgaXMgTk8gcnVudGltZSBmcmVlemUuIFRoZSBidWlsZGVyIGZpcmVzIGBvblN0YWdlQWRkZWRgXG4gKiAgICAgSU1NRURJQVRFTFkgd2hlbiBhIHNwZWMgbm9kZSBpcyBhZGRlZCwgQkVGT1JFIHRoZSBidWlsZGVyXG4gKiAgICAgd2lyZXMgdGhhdCBub2RlJ3MgYC5uZXh0YC9gLmNoaWxkcmVuYC9gLmxvb3BUYXJnZXRgIGluIHRoZVxuICogICAgIHN1YnNlcXVlbnQgYGFkZFhgIGNhbGwuIEZyZWV6aW5nIGhlcmUgd291bGQgYnJlYWsgdGhlXG4gKiAgICAgYnVpbGRlcidzIG93biBzdWJzZXF1ZW50IG11dGF0aW9uLlxuICogICAtIEhhbmRsZXIgbXV0YXRpb24gb2YgYGV2ZW50LnNwZWNgIGlzIERPQ1VNRU5URUQgVU5ERUZJTkVEXG4gKiAgICAgQkVIQVZJT1Ig4oCUIGl0IHdpbGwgc3VjY2VlZCBhdCBydW50aW1lLCBidXQgaXMgbm90IHN1cHBvcnRlZFxuICogICAgIGFuZCBkb3duc3RyZWFtIGNvbnN1bWVycyBtYXkgYnJlYWsuIFNwZWNpZmljYWxseSwgbXV0YXRpbmdcbiAqICAgICBgZXZlbnQuc3BlYy5mbmAsIGBldmVudC5zcGVjLmlkYCwgb3IgYGV2ZW50LnNwZWMuY2hpbGRyZW5gXG4gKiAgICAgY2FuIGNvcnJ1cHQgc3Vic2VxdWVudCBydW50aW1lIGJlaGF2aW9yIG9mIHRoZSBjaGFydC5cbiAqICAgLSAqKlRydXN0IG1vZGVsKio6IGF0dGFjaCBPTkxZIHJlY29yZGVycyBmcm9tIHRydXN0ZWQgY29kZSBwYXRocy5cbiAqICAgICBBIGhvc3RpbGUgb3IgYnVnZ3kgcmVjb3JkZXIgY2FuIGVmZmVjdGl2ZWx5IHN1YnN0aXR1dGUgc3RhZ2VcbiAqICAgICBmdW5jdGlvbnMgb3IgcmV3aXJlIHRoZSBjaGFydCBzdHJ1Y3R1cmUuIFRoZSBgcmVhZG9ubHlgXG4gKiAgICAgbWFya2VycyBjYW5ub3QgZGVmZW5kIGFnYWluc3QgaW50ZW50aW9uYWwgbXV0YXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjbGFzcyBUcmFjZVN0cnVjdHVyZVJlY29yZGVyIGltcGxlbWVudHMgU3RydWN0dXJlUmVjb3JkZXIge1xuICogICByZWFkb25seSBpZCA9ICd0cmFjZS1zdGF0aWMnO1xuICogICBub2RlczogWHlmbG93Tm9kZVtdID0gW107XG4gKiAgIGVkZ2VzOiBYeWZsb3dFZGdlW10gPSBbXTtcbiAqXG4gKiAgIG9uU3RhZ2VBZGRlZChlKSB7XG4gKiAgICAgLy8gTm9kZSByb2xlOiAnc3RhZ2UnIGlzIHRoZSBpbml0aWFsIHR5cGUuIElmIG91dGdvaW5nIGVkZ2VzXG4gKiAgICAgLy8gYXJyaXZlIHdpdGgga2luZCAnZm9yay1icmFuY2gnIC8gJ2RlY2lzaW9uLWJyYW5jaCcgdGhlIG5vZGVcbiAqICAgICAvLyBpcyBmdW5jdGlvbmluZyBhcyBhIGZvcmsvZGVjaWRlciDigJQgZGVyaXZlIHRoZSB2aXN1YWwgc3R5bGVcbiAqICAgICAvLyBmcm9tIHRob3NlIGVkZ2VzLCBub3QgZnJvbSBgZS50eXBlYCBhbG9uZS5cbiAqICAgICB0aGlzLm5vZGVzLnB1c2goeyBpZDogZS5zdGFnZUlkLCB0eXBlOiAnbGVuc1N0YWdlJywgZGF0YTogeyBsYWJlbDogZS5uYW1lIH0gfSk7XG4gKiAgIH1cbiAqICAgb25FZGdlQWRkZWQoZSkge1xuICogICAgIHRoaXMuZWRnZXMucHVzaCh7IGlkOiBgJHtlLmZyb219LT4ke2UudG99YCwgc291cmNlOiBlLmZyb20sIHRhcmdldDogZS50byB9KTtcbiAqICAgfVxuICogICBvblN1YmZsb3dNb3VudGVkKGUpIHtcbiAqICAgICB0aGlzLm5vZGVzLnB1c2goeyBpZDogZS5zdWJmbG93SWQsIHR5cGU6ICdzdWJmbG93JywgZGF0YTogeyBsYWJlbDogZS5zdWJmbG93TmFtZSB9IH0pO1xuICogICB9XG4gKiAgIG9uRGVjaWRlckNvbXBsZXRlKGUpIHtcbiAqICAgICAvLyBPcHRpb25hbDogZmluYWxpemUgbm9kZSBzdHlsaW5nIG5vdyB0aGF0IGJyYW5jaCBsaXN0IGlzIHNlYWxlZC5cbiAqICAgfVxuICogfVxuICpcbiAqIC8vIFJlZ2lzdHJhdGlvbiBvcHRpb24gQSDigJQgb3B0aW9ucy1iYWcgKHByZWZlcnJlZCB3aGVuIHJlY29yZGVyc1xuICogLy8gYXJlIGtub3duIHVwIGZyb250OyBhdHRhY2hlcyBCRUZPUkUgdGhlIHNlZWQgZXZlbnQgZmlyZXMpOlxuICogY29uc3QgcmVjID0gbmV3IFRyYWNlU3RydWN0dXJlUmVjb3JkZXIoKTtcbiAqIGNvbnN0IGJ1aWxkZXIgPSBmbG93Q2hhcnQoJ3NlZWQnLCBmbiwgJ3NlZWQnLCB7XG4gKiAgIHN0cnVjdHVyZVJlY29yZGVyczogW3JlY10sXG4gKiB9KS5hZGRGdW5jdGlvbignYScsIGZuQSwgJ2EnKTtcbiAqIGNvbnN0IGNoYXJ0ID0gYnVpbGRlci5idWlsZCgpO1xuICpcbiAqIC8vIFJlZ2lzdHJhdGlvbiBvcHRpb24gQiDigJQgZmx1ZW50IGNoYWluIChwcmVmZXJyZWQgZm9yIGNvbmRpdGlvbmFsXG4gKiAvLyBvciBsYXRlIGF0dGFjaDsgdGhlIGp1c3QtYXR0YWNoZWQgcmVjb3JkZXIgZ2V0cyBhIHNlZWQgcmVwbGF5KTpcbiAqIGNvbnN0IHJlYzIgPSBuZXcgVHJhY2VTdHJ1Y3R1cmVSZWNvcmRlcigpO1xuICogY29uc3QgYnVpbGRlcjIgPSBmbG93Q2hhcnQoJ3NlZWQnLCBmbiwgJ3NlZWQnKVxuICogICAuYXR0YWNoU3RydWN0dXJlUmVjb3JkZXIocmVjMilcbiAqICAgLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpO1xuICpcbiAqIC8vIEluc3BlY3QgYW55IHJlY29yZGVyIGVycm9ycyAoY2FsbCBvbiB0aGUgQlVJTERFUiwgbm90IHRoZSBjaGFydCk6XG4gKiBjb25zdCBlcnJvcnMgPSBidWlsZGVyLmdldFN0cnVjdHVyZUJ1aWxkRXJyb3JzKCk7XG4gKlxuICogPFJlYWN0RmxvdyBub2Rlcz17cmVjLm5vZGVzfSBlZGdlcz17cmVjLmVkZ2VzfSAvPlxuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGbG93Q2hhcnRTcGVjLCBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRXZlbnQgcGF5bG9hZCB0eXBlc1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogRXZlbnQgcGF5bG9hZCBmb3IgYFN0cnVjdHVyZVJlY29yZGVyLm9uU3RhZ2VBZGRlZGAuIEZpcmVzIGZvciBldmVyeVxuICogc3BlYyBub2RlIGFkZGVkIHRvIHRoZSBjaGFydCwgaW5jbHVkaW5nIHRoZSBzZWVkIChhZGRlZCB2aWFcbiAqIGBmbG93Q2hhcnQoKWAgZmFjdG9yeSkgYW5kIHN1YmZsb3cgbW91bnQgbm9kZXMuIEV4Y2x1ZGVzIHN5bnRoZXRpY1xuICogbG9vcC1yZWZlcmVuY2Ugbm9kZXMgKHRob3NlIGNhcnJ5IGBpc0xvb3BSZWZlcmVuY2U6IHRydWVgIG9uIHRoZVxuICogc3BlYzsgY29uc3VtZXJzIHNlZSB0aGVtIHZpYSB0aGUgc2VwYXJhdGUgYG9uTG9vcEVkZ2VBZGRlZGAgZXZlbnRcbiAqIGluc3RlYWQgb2YgYXMgZnJlc2ggc3RhZ2VzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQge1xuICAvKipcbiAgICogU3RhYmxlIGlkZW50aWZpZXIgZm9yIHRoaXMgbm9kZS4gQVQgRVZFTlQgRklSRSBUSU1FIHRoaXMgaXMgdGhlXG4gICAqIGJ1aWxkZXIncyBMT0NBTCBmb3JtIChubyBzdWJmbG93IHByZWZpeCDigJQgdGhlIHByZWZpeCBpcyBhcHBsaWVkXG4gICAqIGxhdGVyIGJ5IGBfcHJlZml4Tm9kZVRyZWVgIHdoZW4gdGhpcyBidWlsZGVyIGlzIG1vdW50ZWQgYXMgYVxuICAgKiBzdWJmbG93IGludG8gYSBwYXJlbnQpLlxuICAgKlxuICAgKiBOb3RlOiBgc3BlYy5pZGAgaXMgYSBMSVZFIHJlZmVyZW5jZS4gSWYgeW91IHJlYWQgaXQgQUZURVIgdGhpc1xuICAgKiBjaGFydCBoYXMgYmVlbiBtb3VudGVkIGFzIGEgc3ViZmxvdywgaXQgbWF5IGhhdmUgYmVlbiByZXdyaXR0ZW5cbiAgICogdG8gdGhlIEZVTEwgcHJlZml4ZWQgZm9ybS4gVXNlIGBzcGxpdFN0YWdlSWQoc3BlYy5pZClgIGZyb21cbiAgICogYGZvb3R0cmFjZWAgdG8gZGVjb21wb3NlIGl0IGJhY2sgaW50byBsb2NhbCArIHN1YmZsb3dQYXRoLlxuICAgKlxuICAgKiBDb3JyZWxhdGluZyB3aXRoIHJ1bnRpbWUgZXZlbnRzOlxuICAgKiAgIC0gU2FtZSBidWlsZGVyIChubyBtb3VudCkg4oaSXG4gICAqICAgICBgZXZlbnQuc3RhZ2VJZCA9PT0gcGFyc2VSdW50aW1lU3RhZ2VJZChydW50aW1lKS5zdGFnZUlkYFxuICAgKiAgIC0gVGhpcyBidWlsZGVyIG1vdW50ZWQgYXMgc3ViZmxvdyDihpIgdXNlIGBzcGxpdFN0YWdlSWRgIG9uIHRoZVxuICAgKiAgICAgcHJlZml4ZWQgZm9ybSAob3IgYHBhcnNlUnVudGltZVN0YWdlSWRgIG9uIHRoZSBmdWxsXG4gICAqICAgICBydW50aW1lU3RhZ2VJZCkgYmVmb3JlIGNvbXBhcmluZy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIGZvciB0aGUgbm9kZS4gKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKiogU3BlYyBub2RlIGB0eXBlYC4gTGV0cyByZWNvcmRlcnMgYnJhbmNoIG9uIHN0YWdlIHZzIGRlY2lkZXIgdnNcbiAgICogIGZvcmsgdnMgc3ViZmxvdyB3aXRob3V0IHJlLWRlcml2aW5nIGZyb20gb3RoZXIgZmllbGRzLiAqL1xuICByZWFkb25seSB0eXBlOiBOb25OdWxsYWJsZTxGbG93Q2hhcnRTcGVjWyd0eXBlJ10+O1xuICAvKiogVHJ1ZSBmb3Igbm9kZXMgYWRkZWQgdmlhIGBhZGRQYXVzYWJsZUZ1bmN0aW9uKClgIOKAlCB1c2VmdWwgZm9yXG4gICAqICB2aXN1YWxpc2VycyB0aGF0IHdhbnQgdG8gbWFyayBzdGFnZXMgdGhhdCBjYW4gcGF1c2UgZXhlY3V0aW9uLiAqL1xuICByZWFkb25seSBpc1BhdXNhYmxlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRoZSBuYW1lcyBkZWNsYXJlZCBvbiB0aGUgc3RhZ2UgQVQgRVZFTlQgRklSRSBUSU1FIChgb3B0aW9ucy50YWdzYFxuICAgKiBsYW5kcyBiZWZvcmUgdGhpcyBldmVudCBmaXJlczsgYWJzZW50IHdoZW4gbm9uZSDigJQgdGhlIFwiYWJzZW50IHdoZW5cbiAgICogZW1wdHlcIiBsYXcgdGhlIGNvbW1pdCBidW5kbGUga2VlcHMpLiBOYW1lcyBkZWNsYXJlZCBhZnRlcndhcmRzXG4gICAqIHRocm91Z2ggdGhlIGAudGFnKC4uLilgIGN1cnNvciBkb29yIGFycml2ZSBhcyB0aGVpciBvd25cbiAgICoge0BsaW5rIFN0cnVjdHVyZVJlY29yZGVyLm9uU3RhZ2VUYWdnZWR9IGV2ZW50IOKAlCBhIHJlY29yZGVyIHRoYXRcbiAgICogY29waWVzIGZpZWxkcyBoZXJlIGluc3RlYWQgb2YgaG9sZGluZyBgc3BlY2Agd291bGQgb3RoZXJ3aXNlXG4gICAqIG5ldmVyIGxlYXJuIG9mIHRoZW0gKDkuMjQuMCkuXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBMaXZlIHJlZmVyZW5jZSB0byB0aGUgZnVsbCBzcGVjIG5vZGUsIGZvciBoYW5kbGVycyB0aGF0IHdhbnRcbiAgICogIGRldGFpbHMgYmV5b25kIHRoZSBkaXNjcmltaW5hdG9yIGZpZWxkcyBhYm92ZS4gTVVTVCBOT1QgYmVcbiAgICogIG11dGF0ZWQgYnkgdGhlIGhhbmRsZXIg4oCUIHJlYWRvbmx5IGlzIHR5cGUtbGV2ZWwgaW50ZW50OyBub1xuICAgKiAgcnVudGltZSBmcmVlemUuIFNlZSBcIlNwZWMgbXV0YXRpb25cIiBpbiB0aGUgZmlsZSBoZWFkZXIgZm9yIHRoZVxuICAgKiAgdHJ1c3QtbW9kZWwgY2F2ZWF0cy4gKi9cbiAgcmVhZG9ubHkgc3BlYzogRmxvd0NoYXJ0U3BlYztcbn1cblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25TdGFnZVRhZ2dlZGAuIEZpcmVzIHdoZW4gbmFtZXNcbiAqIGxhbmQgb24gYSBzdGFnZSBBRlRFUiBpdHMgYG9uU3RhZ2VBZGRlZGAgYWxyZWFkeSBmaXJlZCDigJQgdGhlXG4gKiBgLnRhZyguLi4pYCBjdXJzb3IgZG9vciAoYGZsb3dDaGFydCguLi4pLmFkZEZ1bmN0aW9uKC4uLikudGFnKCdhJylgKS5cbiAqIE5hbWVzIGRlY2xhcmVkIGluIHRoZSBzYW1lIGNhbGwgYXMgdGhlIHN0YWdlIChgb3B0aW9ucy50YWdzYCxcbiAqIGBTdWJmbG93TW91bnRPcHRpb25zLnRhZ3NgKSByaWRlIGBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQudGFnc2AgYW5kXG4gKiBkbyBOT1QgZmlyZSB0aGlzOiBvbmUgZGVjbGFyYXRpb24sIG9uZSBldmVudC4gYHRhZ3NgIGlzIHRoZSBDT01QTEVURVxuICogbGlzdCBvbiB0aGUgc3RhZ2UgYWZ0ZXIgdGhlIGRvb3Ig4oCUIHRoZSBidWlsZGVyIHJlZnVzZXMgYSBzZWNvbmRcbiAqIGRlY2xhcmF0aW9uIG9uIHRoZSBzYW1lIHN0YWdlLCBzbyBpdCBpcyBhbHNvIHRoZSBvbmx5IG9uZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVTdGFnZVRhZ2dlZEV2ZW50IHtcbiAgLyoqIFRoZSBidWlsZGVyJ3MgTE9DQUwgc3RhZ2UgaWQgKHNlZSBgU3RydWN0dXJlU3RhZ2VBZGRlZEV2ZW50LnN0YWdlSWRgKS4gKi9cbiAgcmVhZG9ubHkgc3RhZ2VJZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgbGFiZWwgZm9yIHRoZSBub2RlLiAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKiBFdmVyeSBuYW1lIG5vdyBkZWNsYXJlZCBvbiB0aGUgc3RhZ2UuICovXG4gIHJlYWRvbmx5IHRhZ3M6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogTGl2ZSByZWZlcmVuY2UgdG8gdGhlIHNwZWMgbm9kZSDigJQgc2FtZSBjYXZlYXRzIGFzIG9uIGBvblN0YWdlQWRkZWRgLiAqL1xuICByZWFkb25seSBzcGVjOiBGbG93Q2hhcnRTcGVjO1xufVxuXG4vKiogRWRnZSBraW5kcyB0aGUgYnVpbGRlciBwcm9kdWNlcyBhdCBzdHJ1Y3R1cmFsIHRpbWUuIE1hdGNoZXMgdGhlXG4gKiAgZm9vdHByaW50anMgY29udHJvbC1mbG93IHZvY2FidWxhcnkgdXNlZCBhdCBydW50aW1lLlxuICpcbiAqICBXaHkgbm8gYHN1YmZsb3ctZW50cnlgIGhlcmU6IHN1YmZsb3cgbW91bnRzIHVzZSB0aGUgbGlmZWN5Y2xlXG4gKiAgZXZlbnQgYG9uU3ViZmxvd01vdW50ZWRgIChub3QgYW4gZWRnZSBldmVudCkuIElmIGEgZnV0dXJlIHVzZSBjYXNlXG4gKiAgbmVlZHMgdGhlIHBhcmVudOKGknN1YmZsb3ctcm9vdCBlZGdlIGFzIGEgZGlzdGluY3Qga2luZCwgaXQnbGwgYmVcbiAqICBhZGRlZCB0aGVuIOKAlCBZQUdOSSBub3cgKFBhbmVsIDMsIEw3LjIgcmV2aWV3KS4gKi9cbmV4cG9ydCB0eXBlIFN0cnVjdHVyZUVkZ2VLaW5kID1cbiAgfCAnbmV4dCcgLy8gbGluZWFyIGNoYWluOiBwcmV2Lm5leHQgPSBjdXJyXG4gIHwgJ2ZvcmstYnJhbmNoJyAvLyBmb3JrIHBhcmVudCDihpIgcGFyYWxsZWwgY2hpbGRcbiAgfCAnZGVjaXNpb24tYnJhbmNoJzsgLy8gZGVjaWRlciDihpIgYnJhbmNoIGNoaWxkXG5cbi8qKlxuICogRXZlbnQgcGF5bG9hZCBmb3IgYFN0cnVjdHVyZVJlY29yZGVyLm9uRWRnZUFkZGVkYC4gRmlyZXMgd2hlbmV2ZXJcbiAqIHRoZSBidWlsZGVyIHdpcmVzIGFuIG91dGdvaW5nIGVkZ2UgZnJvbSBvbmUgbm9kZSB0byBhbm90aGVyLiBCb3RoXG4gKiBlbmRwb2ludHMgaGF2ZSBhbHJlYWR5IGJlZW4gYW5ub3VuY2VkIHZpYSBgb25TdGFnZUFkZGVkYCBieSB0aGVcbiAqIHRpbWUgdGhpcyBmaXJlcy5cbiAqXG4gKiBMb29wIGJhY2stZWRnZXMgaGF2ZSB0aGVpciBPV04gZXZlbnQgKGBvbkxvb3BFZGdlQWRkZWRgKSBzb1xuICogY29uc3VtZXJzIGNhbiB0aGVtZSB0aGVtIGRpc3RpbmN0bHkgYW5kIHNvIGJ1aWxkLXRpbWUgZXZlbnRzIHN0YXlcbiAqIGZyZWUgb2YgdGhlIHJ1bnRpbWUtb25seSBgaXRlcmF0aW9uYCBmaWVsZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVFZGdlQWRkZWRFdmVudCB7XG4gIHJlYWRvbmx5IGZyb206IHN0cmluZztcbiAgcmVhZG9ubHkgdG86IHN0cmluZztcbiAgcmVhZG9ubHkga2luZDogU3RydWN0dXJlRWRnZUtpbmQ7XG4gIC8qKiBPcHRpb25hbCBodW1hbi1yZWFkYWJsZSBsYWJlbCDigJQgdXNlZCB0b2RheSBmb3IgZGVjaWRlciBicmFuY2hcbiAgICogIGtleXMgKGUuZy4sIGAnbG93J2AsIGAnaGlnaCdgLCBgJ2hpZ2ggKGRlZmF1bHQpJ2ApIGFuZCBwYXJhbGxlbFxuICAgKiAgYnJhbmNoIGlkcy4gKi9cbiAgcmVhZG9ubHkgbGFiZWw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXZlbnQgcGF5bG9hZCBmb3IgYFN0cnVjdHVyZVJlY29yZGVyLm9uTG9vcEVkZ2VBZGRlZGAuIEZpcmVzIHdoZW5cbiAqIGAubG9vcFRvKHRhcmdldClgIGluc3RhbGxzIGEgYmFjay1lZGdlLiBEaXN0aW5jdCBmcm9tXG4gKiBgb25FZGdlQWRkZWRgIHNvIGNvbnN1bWVycyBjYW4gdGhlbWUgYmFjay1lZGdlcyBkaWZmZXJlbnRseSBhbmRcbiAqIGJlY2F1c2UgcnVudGltZSBgb25Mb29wYCBjYXJyaWVzIGBpdGVyYXRpb246IG51bWJlcmAgd2hpY2ggaGFzIG5vXG4gKiBidWlsZC10aW1lIG1lYW5pbmcg4oCUIGtlZXBpbmcgdGhlIGV2ZW50cyBzZXBhcmF0ZWQgYXZvaWRzIGZvcmNpbmdcbiAqIGFuIGBpdGVyYXRpb24/OiBudW1iZXJgIGxpZSBpbnRvIHRoZSBzdHJ1Y3R1cmFsIHNoYXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZUxvb3BFZGdlQWRkZWRFdmVudCB7XG4gIHJlYWRvbmx5IGZyb206IHN0cmluZztcbiAgcmVhZG9ubHkgdG86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25EZWNpZGVyQ29tcGxldGVgLiBGaXJlc1xuICogd2hlbiBhIGRlY2lkZXIgLyBzZWxlY3RvciBzdWItYnVpbGRlciBjbG9zZXMgdmlhIGAuZW5kKClgLiBCeSB0aGVcbiAqIHRpbWUgdGhpcyBmaXJlcyBldmVyeSBicmFuY2ggaGFzIGJlZW4gYW5ub3VuY2VkIGFuZCB0aGVcbiAqIGBkZWZhdWx0QnJhbmNoYCAoaWYgc2V0IHZpYSBgLnNldERlZmF1bHQoKWApIGlzIGZpbmFsLiBMZXRzXG4gKiByZWNvcmRlcnMgdHJlYXQgdGhlIGRlY2lkZXIgYXMgbm8tZnVydGhlci1tdXRhdGlvbiBhbmQgc25hcHNob3RcbiAqIGl0cyBicmFuY2ggbGlzdCBhcyBmaW5hbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVEZWNpZGVyQ29tcGxldGVFdmVudCB7XG4gIC8qKiBEZWNpZGVyIC8gc2VsZWN0b3Igc3RhZ2UgaWQuICovXG4gIHJlYWRvbmx5IGRlY2lkZXI6IHN0cmluZztcbiAgLyoqIFNwZWMgdHlwZSAoYCdkZWNpZGVyJ2AgdnMgYCdzZWxlY3RvcidgKSDigJQgZXhwb3NlZCBzbyBjb25zdW1lcnNcbiAgICogIGRvbid0IG5lZWQgdG8gbG9vayB1cCB0aGUgb3JpZ2luYWwgYG9uU3RhZ2VBZGRlZGAgZXZlbnQuICovXG4gIHJlYWRvbmx5IHR5cGU6ICdkZWNpZGVyJyB8ICdzZWxlY3Rvcic7XG4gIC8qKiBCcmFuY2ggbWVtYmVyIGlkcyBpbiBkZWNsYXJhdGlvbiBvcmRlci4gKi9cbiAgcmVhZG9ubHkgYnJhbmNoSWRzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIERlZmF1bHQgYnJhbmNoIGlkIHdoZW4gc2V0IHZpYSBgLnNldERlZmF1bHQoKWA7IHVuZGVmaW5lZCB3aGVuXG4gICAqICBubyBkZWZhdWx0IGlzIGNvbmZpZ3VyZWQgKGUuZy4sIHNlbGVjdG9ycykuICovXG4gIHJlYWRvbmx5IGRlZmF1bHRCcmFuY2g/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXZlbnQgcGF5bG9hZCBmb3IgYFN0cnVjdHVyZVJlY29yZGVyLm9uU3ViZmxvd01vdW50ZWRgLiBGaXJlcyBvbmNlXG4gKiBwZXIgc3ViZmxvdyBtb3VudCAoYGFkZFN1YkZsb3dDaGFydGAgLyBgYWRkU3ViRmxvd0NoYXJ0TmV4dGAgYW5kXG4gKiB0aGVpciBsYXp5IHZhcmlhbnRzKS5cbiAqXG4gKiAqKk1PVU5ULU9OTFkgc2VtYW50aWNzKiog4oCUIHRoZSBzdWJmbG93J3MgT1dOIHN0cnVjdHVyZSBldmVudHNcbiAqIChldmVyeSBgb25TdGFnZUFkZGVkYCAvIGBvbkVkZ2VBZGRlZGAgaW5zaWRlIHRoZSBzdWJmbG93KSBmaXJlZFxuICogZHVyaW5nIHRoZSBzdWJmbG93J3Mgb3duIGAuYnVpbGQoKWAsIGJlZm9yZSB0aGUgbW91bnQuIFBhcmVudFxuICogcmVjb3JkZXJzIGRvIE5PVCByZWNlaXZlIGEgcmVwbGF5LiBJbnN0ZWFkLCB0aGlzIGV2ZW50IGRlbGl2ZXJzXG4gKiB0aGUgc3ViZmxvdydzIGZ1bGwgc3RydWN0dXJlIHZpYSBgc3ViZmxvd1NwZWNgLCBhbmQgY29uc3VtZXJzIGNhblxuICogd2FsayBpdCB2aWEgYHdhbGtTdWJmbG93U3BlY2AgZnJvbSBgZm9vdHByaW50anMvdHJhY2VgLlxuICpcbiAqIFRoaXMgbWF0Y2hlcyBgRmxvd1JlY29yZGVyLm9uU3ViZmxvd0VudHJ5YCBzZW1hbnRpY3MgYXQgcnVudGltZVxuICogKHBhcmVudHMgc2VlIHRoZSBib3VuZGFyeSwgbm90IGEgcmVwbGF5IG9mIGludGVybmFscykgYW5kXG4gKiBwcmVzZXJ2ZXMgdGhlIFwib25lIHB1cnBvc2UgcGVyIHJlY29yZGVyXCIgY29udmVudGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50IHtcbiAgLyoqIFN1YmZsb3cgaWRlbnRpZmllciB0aGUgcGFyZW50IGFzc2lnbmVkIGF0IG1vdW50LiAqL1xuICByZWFkb25seSBzdWJmbG93SWQ6IHN0cmluZztcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIHN1YmZsb3cgbmFtZS4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd05hbWU6IHN0cmluZztcbiAgLyoqIE1vdW50IG5vZGUgaWQgaW4gdGhlIHBhcmVudCdzIGNoYXJ0LiAqL1xuICByZWFkb25seSByb290U3RhZ2VJZDogc3RyaW5nO1xuICAvKiogVHJ1ZSB3aGVuIHRoZSBtb3VudCB1c2VzIGxhenkgcmVzb2x1dGlvbiAoZGVmZXJyZWQgc3ViZmxvd1xuICAgKiAgcmVzb2x1dGlvbiB1bnRpbCBleGVjdXRpb24pLiAqL1xuICByZWFkb25seSBpc0xhenk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbW91bnRlZCBzdWJmbG93J3MgY29tcGxldGUgc3BlYyDigJQgdGhlIFNBTUUgT0JKRUNUXG4gICAqICg9PT0gcmVmZXJlbmNlIGVxdWFsaXR5KSByZWFjaGFibGUgdmlhIGBzdWJmbG93LmJ1aWxkVGltZVN0cnVjdHVyZWBcbiAgICogZm9yIHRoZSBGbG93Q2hhcnQgdGhlIGNvbnN1bWVyIHBhc3NlZCB0byBgYWRkU3ViRmxvd0NoYXJ0QnJhbmNoYCAvXG4gICAqIGBhZGRTdWJGbG93Q2hhcnRgIC8gYGFkZFN1YkZsb3dDaGFydE5leHRgLlxuICAgKlxuICAgKiBVTkRFRklORUQgZm9yIGxhenkgbW91bnRzIGF0IGJ1aWxkIHRpbWUgKGBpc0xhenk6IHRydWVgKSDigJQgdGhlXG4gICAqIHN1YmZsb3cncyBzdHJ1Y3R1cmUgaGFzbid0IGJlZW4gcmVzb2x2ZWQgeWV0LiBDb25zdW1lcnMgd2FpdGluZyBvblxuICAgKiBsYXp5IHN1YmZsb3dzIGhhbmRsZSB0aGUgcnVudGltZSBgb25TdWJmbG93RW50cnlgIGV2ZW50IGluc3RlYWQuXG4gICAqXG4gICAqIEltbXV0YWJsZSBwb3N0LWJ1aWxkOyBjb25zdW1lcnMgTVVTVCBOT1QgbXV0YXRlLlxuICAgKlxuICAgKiBAaW50ZXJuYWwgYFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZWAgaXMgbGlicmFyeS1pbnRlcm5hbC5cbiAgICogICAgICAgICAgIFVzZSBgd2Fsa1N1YmZsb3dTcGVjYCBmcm9tIGBmb290cHJpbnRqcy90cmFjZWAgZm9yIHRoZVxuICAgKiAgICAgICAgICAgc3RhYmxlIHB1YmxpYyBjb250cmFjdC5cbiAgICovXG4gIHJlYWRvbmx5IHN1YmZsb3dTcGVjPzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuXG4gIC8qKlxuICAgKiBMb2NhbCBtb3VudCBpZCBvZiB0aGlzIHN1YmZsb3cgd2l0aGluIGl0cyBwYXJlbnQg4oCUIGVxdWFsIHRvXG4gICAqIGBzdWJmbG93SWRgIGZvciB0b3AtbGV2ZWwgbW91bnRzIChlLmcuIGAnYXV0aCdgKSwgY29tcG9zZWRcbiAgICogKGAnYXV0aC92ZXJpZnknYCkgZm9yIG5lc3RlZCBtb3VudHMgd2hvc2UgcmVjb3JkZXIgaXMgYXR0YWNoZWRcbiAgICogdG8gdGhlIGdyYW5kcGFyZW50LiBNYXRjaGVzIHJ1bnRpbWUgYHRyYXZlcnNhbENvbnRleHQuc3ViZmxvd1BhdGhgXG4gICAqIHNlbWFudGljcyDigJQgTkVWRVIgcHJlZml4ZWQgd2l0aCBgX19yb290X18vYC5cbiAgICovXG4gIHJlYWRvbmx5IHN1YmZsb3dQYXRoOiBzdHJpbmc7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU3RydWN0dXJlUmVjb3JkZXIgaW50ZXJmYWNlXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBQbHVnZ2FibGUgb2JzZXJ2ZXIgZm9yIEJVSUxELVRJTUUgY2hhcnQgY29uc3RydWN0aW9uIGV2ZW50cy5cbiAqXG4gKiBBbGwgbWV0aG9kcyBhcmUgb3B0aW9uYWwg4oCUIGltcGxlbWVudCBvbmx5IHRoZSBob29rcyB5b3UgbmVlZC5cbiAqIEhhbmRsZXJzIGZpcmUgU1lOQ0hST05PVVNMWSBkdXJpbmcgYnVpbGRlciBvcGVyYXRpb25zIGFuZCBgLmJ1aWxkKClgLlxuICogQSB0aHJvd2luZyBoYW5kbGVyIGlzIGNhdWdodCAoc2VlIFwiRXJyb3IgaXNvbGF0aW9uXCIgaW4gdGhlIGZpbGVcbiAqIGhlYWRlcik7IHN1YnNlcXVlbnQgZGlzcGF0Y2ggY29udGludWVzLlxuICpcbiAqIExpZmVjeWNsZTogZWFjaCBgU3RydWN0dXJlUmVjb3JkZXJgIGluc3RhbmNlIGlzIHJlZ2lzdGVyZWQgdmlhXG4gKiBFSVRIRVIgdGhlIGBmbG93Q2hhcnQoKWAgb3B0aW9ucyBiYWcgKGB7IHN0cnVjdHVyZVJlY29yZGVyczogW3JlY10gfWApXG4gKiBPUiB0aGUgZmx1ZW50IGAuYXR0YWNoU3RydWN0dXJlUmVjb3JkZXIocmVjKWAgY2hhaW4g4oCUIHNlZSB0aGUgZmlsZVxuICogaGVhZGVyIGZvciB0aGUgdHJhZGUtb2Zmcy4gUmVnaXN0cmF0aW9uIGFmdGVyIGAuYnVpbGQoKWAgaXNcbiAqIHJlamVjdGVkIChjaGFydCBpcyBzZWFsZWQpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZVJlY29yZGVyIHtcbiAgLyoqXG4gICAqIFN0YWJsZSBpZGVudGlmaWVyIOKAlCB1c2VkIGJ5IHRoZSBkaXNwYXRjaGVyIHRvIHNjb3BlIGVycm9yXG4gICAqIG1lc3NhZ2VzIGFuZCB0byBzdXBwb3J0IGBkZXRhY2goaWQpYCBsb29rdXAuXG4gICAqXG4gICAqIENvbnZlbnRpb24gKG1hdGNoZXMgYEZsb3dSZWNvcmRlci5pZGAgZnJvbSBDTEFVREUubWQpOlxuICAgKiAgIC0gZG9tYWluLXByZWZpeGVkIGtlYmFiLWNhc2UgKGAnbGVucy1zdHJ1Y3R1cmUnYCxcbiAgICogICAgIGAnYWdlbnRmb290cHJpbnQtY29tcG9zaXRpb24nYCwgYCd0cmFjZS1leHBsYWluYWJsZSdgKVxuICAgKiAgIC0gc2FtZSBpZCDihpIgbXVsdGlwbGUgcmVjb3JkZXJzIGNvZXhpc3QgKE5PVCBkZWR1cGxpY2F0ZWQgYnlcbiAgICogICAgIGlkOyB0aGUgZGlzcGF0Y2hlciBmaXJlcyBldmVyeSBhdHRhY2hlZCByZWNvcmRlciByZWdhcmRsZXNzKVxuICAgKiAgIC0gYGRldGFjaChpZClgIHJlbW92ZXMgRVZFUlkgcmVjb3JkZXIgd2l0aCB0aGF0IGlkIOKAlCBiZVxuICAgKiAgICAgaW50ZW50aW9uYWwgYWJvdXQgcmV1c2UgaWYgeW91IHJlbHkgb24gc2VsZWN0aXZlIGRldGFjaFxuICAgKlxuICAgKiBDaG9vc2UgYSBzdGFibGUgaWQgYXQgbW9kdWxlIGxvYWQgYW5kIGRvbid0IHJhbmRvbWlzZSBpdCBhY3Jvc3NcbiAgICogcnVucyDigJQgaXQgbGFuZHMgaW4gYFN0cnVjdHVyZUJ1aWxkRXJyb3IucmVjb3JkZXJJZGAgc28gZGVidWdcbiAgICogb3V0cHV0IGlzIGdyZXBwYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgb25TdGFnZUFkZGVkPyhldmVudDogU3RydWN0dXJlU3RhZ2VBZGRlZEV2ZW50KTogdm9pZDtcbiAgLyoqIE5hbWVzIHRoYXQgbGFuZGVkIG9uIGEgc3RhZ2UgYWZ0ZXIgaXRzIGBvblN0YWdlQWRkZWRgICh0aGUgYC50YWcoKWAgZG9vcikuICovXG4gIG9uU3RhZ2VUYWdnZWQ/KGV2ZW50OiBTdHJ1Y3R1cmVTdGFnZVRhZ2dlZEV2ZW50KTogdm9pZDtcbiAgb25FZGdlQWRkZWQ/KGV2ZW50OiBTdHJ1Y3R1cmVFZGdlQWRkZWRFdmVudCk6IHZvaWQ7XG4gIG9uTG9vcEVkZ2VBZGRlZD8oZXZlbnQ6IFN0cnVjdHVyZUxvb3BFZGdlQWRkZWRFdmVudCk6IHZvaWQ7XG4gIG9uRGVjaWRlckNvbXBsZXRlPyhldmVudDogU3RydWN0dXJlRGVjaWRlckNvbXBsZXRlRXZlbnQpOiB2b2lkO1xuICBvblN1YmZsb3dNb3VudGVkPyhldmVudDogU3RydWN0dXJlU3ViZmxvd01vdW50ZWRFdmVudCk6IHZvaWQ7XG59XG4iXX0=
|
|
@@ -18,11 +18,9 @@
|
|
|
18
18
|
* module — see the mapping notes in `policies.ts`.
|
|
19
19
|
*/
|
|
20
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
-
exports.SUMMARY_PREVIEW_LENGTH = exports.summarizeWriteValue = exports.summarizeValue = exports.summarizeReadValue = exports.READ_PREVIEW_LENGTH = exports.invokeRecorderHook = exports.
|
|
21
|
+
exports.SUMMARY_PREVIEW_LENGTH = exports.summarizeWriteValue = exports.summarizeValue = exports.summarizeReadValue = exports.READ_PREVIEW_LENGTH = exports.invokeRecorderHook = exports.hasCircularReference = void 0;
|
|
22
22
|
var circular_js_1 = require("./circular.js");
|
|
23
23
|
Object.defineProperty(exports, "hasCircularReference", { enumerable: true, get: function () { return circular_js_1.hasCircularReference; } });
|
|
24
|
-
var freeze_js_1 = require("./freeze.js");
|
|
25
|
-
Object.defineProperty(exports, "deepFreeze", { enumerable: true, get: function () { return freeze_js_1.deepFreeze; } });
|
|
26
24
|
var invokeHook_js_1 = require("./invokeHook.js");
|
|
27
25
|
Object.defineProperty(exports, "invokeRecorderHook", { enumerable: true, get: function () { return invokeHook_js_1.invokeRecorderHook; } });
|
|
28
26
|
var summarize_js_1 = require("./summarize.js");
|
|
@@ -31,4 +29,4 @@ Object.defineProperty(exports, "summarizeReadValue", { enumerable: true, get: fu
|
|
|
31
29
|
Object.defineProperty(exports, "summarizeValue", { enumerable: true, get: function () { return summarize_js_1.summarizeValue; } });
|
|
32
30
|
Object.defineProperty(exports, "summarizeWriteValue", { enumerable: true, get: function () { return summarize_js_1.summarizeWriteValue; } });
|
|
33
31
|
Object.defineProperty(exports, "SUMMARY_PREVIEW_LENGTH", { enumerable: true, get: function () { return summarize_js_1.SUMMARY_PREVIEW_LENGTH; } });
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDBCQUEwQjtBQUMxQjs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRzs7O0FBRUgsNkNBQXFEO0FBQTVDLG1IQUFBLG9CQUFvQixPQUFBO0FBQzdCLGlEQUFxRDtBQUE1QyxtSEFBQSxrQkFBa0IsT0FBQTtBQUczQiwrQ0FNd0I7QUFMdEIsbUhBQUEsbUJBQW1CLE9BQUE7QUFDbkIsa0hBQUEsa0JBQWtCLE9BQUE7QUFDbEIsOEdBQUEsY0FBYyxPQUFBO0FBQ2QsbUhBQUEsbUJBQW1CLE9BQUE7QUFDbkIsc0hBQUEsc0JBQXNCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuLyoqXG4gKiBjYXB0dXJlLyDigJQgU2hhcmVkIHZhbHVlLWNhcHR1cmUgLyByZXRlbnRpb24gcHJpbWl0aXZlcyAoemVybyBkZXBzLCBsZWFmXG4gKiBtb2R1bGUg4oCUIGBtZW1vcnkvYCBpbXBvcnRzIGl0LCBuZXZlciB0aGUgcmV2ZXJzZSkuXG4gKlxuICogT25lIGhvbWUgZm9yIFwid2hhdCBkbyB3ZSBrZWVwIGFib3V0IGEgdHJhY2tlZCBvcGVyYXRpb24ncyB2YWx1ZT9cIjpcbiAqICAgLSBgUmV0ZW50aW9uUG9saWN5YCDigJQgdGhlIGAnZnVsbCcgfCAnc3VtbWFyeScgfCAnb2ZmJ2AgZmFtaWx5IGJlaGluZCB0aGVcbiAqICAgICAjMTQgYHJlYWRUcmFja2luZ2AgYW5kICMxM2MtQSBgd3JpdGVUcmFja2luZ2AgZGlhbHMuXG4gKiAgIC0gYHN1bW1hcml6ZVJlYWRWYWx1ZWAgLyBgc3VtbWFyaXplV3JpdGVWYWx1ZWAg4oCUIHRoZSBwYXJhbWV0ZXJpemVkXG4gKiAgICAgc3VtbWFyeS1tYXJrZXIgYnVpbGRlcnMgc2hhcmluZyBvbmUgY2xhc3NpZmljYXRpb24gcGF0aC5cbiAqICAgLSBgc3VtbWFyaXplVmFsdWVgIOKAlCB0aGUgaHVtYW4tcmVhZGFibGUgbmFycmF0aXZlIG9uZS1saW5lci5cbiAqICAgLSBgaGFzQ2lyY3VsYXJSZWZlcmVuY2VgIOKAlCB0aGUgZGV2LW1vZGUgY3ljbGUgcHJvYmUgKGEgbGVhZikuXG4gKiAgIC0gYGludm9rZVJlY29yZGVySG9va2Ag4oCUIHRoZSBvbmUgXCJsb29rIHVwIHRoZSBob29rLCBiaW5kIGB0aGlzYCwgY2FsbCBpdFwiXG4gKiAgICAgcHJpbWl0aXZlIGJvdGggcmVjb3JkZXIgZGVsaXZlcnkgdGllcnMgc2hhcmUgKGEgbGVhZikuXG4gKlxuICogUkZDLTAwMSAoZGVmZXJyZWQgb2JzZXJ2ZXIgZGVsaXZlcnkpIGJ1aWxkcyBpdHMgY2FwdHVyZSB0aWVyIG9uIHRoaXNcbiAqIG1vZHVsZSDigJQgc2VlIHRoZSBtYXBwaW5nIG5vdGVzIGluIGBwb2xpY2llcy50c2AuXG4gKi9cblxuZXhwb3J0IHsgaGFzQ2lyY3VsYXJSZWZlcmVuY2UgfSBmcm9tICcuL2NpcmN1bGFyLmpzJztcbmV4cG9ydCB7IGludm9rZVJlY29yZGVySG9vayB9IGZyb20gJy4vaW52b2tlSG9vay5qcyc7XG5leHBvcnQgdHlwZSB7IFJldGVudGlvblBvbGljeSB9IGZyb20gJy4vcG9saWNpZXMuanMnO1xuZXhwb3J0IHR5cGUgeyBSZWFkU3VtbWFyeU1hcmtlciwgU3VtbWFyeVZhbHVlVHlwZSwgV3JpdGVTdW1tYXJ5TWFya2VyIH0gZnJvbSAnLi9zdW1tYXJpemUuanMnO1xuZXhwb3J0IHtcbiAgUkVBRF9QUkVWSUVXX0xFTkdUSCxcbiAgc3VtbWFyaXplUmVhZFZhbHVlLFxuICBzdW1tYXJpemVWYWx1ZSxcbiAgc3VtbWFyaXplV3JpdGVWYWx1ZSxcbiAgU1VNTUFSWV9QUkVWSUVXX0xFTkdUSCxcbn0gZnJvbSAnLi9zdW1tYXJpemUuanMnO1xuIl19
|
|
@@ -25,15 +25,15 @@
|
|
|
25
25
|
*/
|
|
26
26
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
27
|
exports.prefixNodeTree = void 0;
|
|
28
|
-
const
|
|
28
|
+
const foottrace_1 = require("foottrace");
|
|
29
29
|
function prefixNodeTree(node, prefix) {
|
|
30
30
|
if (!node)
|
|
31
31
|
return node;
|
|
32
32
|
const clone = { ...node };
|
|
33
|
-
clone.name = (0,
|
|
34
|
-
clone.id = (0,
|
|
33
|
+
clone.name = (0, foottrace_1.joinPath)(prefix, node.name);
|
|
34
|
+
clone.id = (0, foottrace_1.joinPath)(prefix, node.id);
|
|
35
35
|
if (clone.subflowId)
|
|
36
|
-
clone.subflowId = (0,
|
|
36
|
+
clone.subflowId = (0, foottrace_1.joinPath)(prefix, clone.subflowId);
|
|
37
37
|
if (clone.next)
|
|
38
38
|
clone.next = prefixNodeTree(clone.next, prefix);
|
|
39
39
|
if (clone.children)
|
|
@@ -41,4 +41,4 @@ function prefixNodeTree(node, prefix) {
|
|
|
41
41
|
return clone;
|
|
42
42
|
}
|
|
43
43
|
exports.prefixNodeTree = prefixNodeTree;
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlZml4Tm9kZVRyZWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9ncmFwaC9wcmVmaXhOb2RlVHJlZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHOzs7QUFFSCx5Q0FBcUM7QUFJckMsU0FBZ0IsY0FBYyxDQUFnQyxJQUFPLEVBQUUsTUFBYztJQUNuRixJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQ3ZCLE1BQU0sS0FBSyxHQUFNLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQztJQUM3QixLQUFLLENBQUMsSUFBSSxHQUFHLElBQUEsb0JBQVEsRUFBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pDLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBQSxvQkFBUSxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckMsSUFBSSxLQUFLLENBQUMsU0FBUztRQUFFLEtBQUssQ0FBQyxTQUFTLEdBQUcsSUFBQSxvQkFBUSxFQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDekUsSUFBSSxLQUFLLENBQUMsSUFBSTtRQUFFLEtBQUssQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEUsSUFBSSxLQUFLLENBQUMsUUFBUTtRQUFFLEtBQUssQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMxRixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFURCx3Q0FTQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcHJlZml4Tm9kZVRyZWUg4oCUIHRoZSBPTkUgc3ViZmxvdy1pZCBwcmVmaXhlciAoRjcsIDkuMzcuMCkuXG4gKlxuICogQSBtb3VudGVkIHN1YmZsb3cncyBub2RlIHRyZWUgaXMgcmUtYWRkcmVzc2VkIHVuZGVyIGl0cyBtb3VudDogZXZlcnkgYG5hbWVgLFxuICogYGlkYCBhbmQgbmVzdGVkIGBzdWJmbG93SWRgIGdhaW5zIGA8cHJlZml4Pi9gLiBUaGUgYnVpbGRlciBkb2VzIGl0IGF0IE1PVU5UXG4gKiB0aW1lIChgRmxvd0NoYXJ0QnVpbGRlciDCtyBfcHJlZml4Tm9kZVRyZWVgKTsgdGhlIHRyYXZlcnNlciBhdCBSVU4gdGltZSAobGF6eVxuICogc3ViZmxvd3MsIGFuZCB0aGUgZ2VuZXJhdGVkIGJyYW5jaGVzIG9mIGBhZGRQYXJhbGxlbEZvckVhY2hgKS4gQm90aCBjYWxsXG4gKiB0aGlzIGZ1bmN0aW9uLCBzbyBhIGNoYXJ0IGNvbWVzIG91dCBpZGVudGljYWwgZWl0aGVyIHdheSDigJQgdW50aWwgOS4zNi4wIHRoZXlcbiAqIHdlcmUgdHdvIGJ5dGUtdHdpbiBjb3BpZXMsIHBpbm5lZCBhZ2FpbnN0IGRyaWZ0IGJ5XG4gKiBgdGVzdC9saWIvZW5naW5lL2JyYW5jaC1zZWdtZW50LXByZWZpeGVyLWVxdWl2YWxlbmNlLnRlc3QudHNgLCB3aGljaCBub3dcbiAqIGd1YXJkcyB0aGUgb25lIGltcGxlbWVudGF0aW9uLlxuICpcbiAqIEdlbmVyYXRlZCBicmFuY2ggc2VnbWVudHMgKGA8c3RhZ2VJZD5+PGluZGV4PmAsIHNlZSBgaWRzL2JyYW5jaFNlZ21lbnQudHNgKVxuICogcmlkZSB0aGlzIGV4YWN0IHBhdGggd2l0aCBubyBzcGVjaWFsIGNhc2U6IGEgc2VnbWVudCBpcyBqdXN0IGEgcHJlZml4LCBzbyBhXG4gKiBicmFuY2gncyBpbm5lciBpZHMgYmVjb21lIGA8c2VnbWVudD4vPGlkPmAgYW5kIGl0cyBzdGFnZXMgYWRkcmVzcyBhc1xuICogYDxzZWdtZW50Pi88aWQ+IzxuPmAuXG4gKlxuICogTmV2ZXIgcmVmdXNlczogdGhlIGlkcyBpdCB3cml0ZXMgY2FycnkgYC9gIG9uIHB1cnBvc2UuIFRoZSByZWZ1c2FsIG9mXG4gKiByZXNlcnZlZCBjaGFyYWN0ZXJzIGlzIHRoZSBidWlsZGVyJ3MsIGF0IGl0cyBpZCBkb29ycyAoYHJlZnVzZVJlc2VydmVkSWRgKS5cbiAqXG4gKiBgYnJhbmNoSWRgIGlzIGxlZnQgVU5QUkVGSVhFRCDigJQgZGVjaWRlci9zZWxlY3RvciBtYXRjaGluZyByZWFkc1xuICogYGNoaWxkLmJyYW5jaElkID8/IGNoaWxkLmlkYC4gVGhlIGlucHV0IGlzIG5ldmVyIG11dGF0ZWQgKGVhY2ggbm9kZSBpcyBhXG4gKiBzaGFsbG93IGNsb25lKS5cbiAqL1xuXG5pbXBvcnQgeyBqb2luUGF0aCB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VOb2RlIH0gZnJvbSAnLi9TdGFnZU5vZGUuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4Tm9kZVRyZWU8TiBleHRlbmRzIFN0YWdlTm9kZTxhbnksIGFueT4+KG5vZGU6IE4sIHByZWZpeDogc3RyaW5nKTogTiB7XG4gIGlmICghbm9kZSkgcmV0dXJuIG5vZGU7XG4gIGNvbnN0IGNsb25lOiBOID0geyAuLi5ub2RlIH07XG4gIGNsb25lLm5hbWUgPSBqb2luUGF0aChwcmVmaXgsIG5vZGUubmFtZSk7XG4gIGNsb25lLmlkID0gam9pblBhdGgocHJlZml4LCBub2RlLmlkKTtcbiAgaWYgKGNsb25lLnN1YmZsb3dJZCkgY2xvbmUuc3ViZmxvd0lkID0gam9pblBhdGgocHJlZml4LCBjbG9uZS5zdWJmbG93SWQpO1xuICBpZiAoY2xvbmUubmV4dCkgY2xvbmUubmV4dCA9IHByZWZpeE5vZGVUcmVlKGNsb25lLm5leHQsIHByZWZpeCk7XG4gIGlmIChjbG9uZS5jaGlsZHJlbikgY2xvbmUuY2hpbGRyZW4gPSBjbG9uZS5jaGlsZHJlbi5tYXAoKGMpID0+IHByZWZpeE5vZGVUcmVlKGMsIHByZWZpeCkpO1xuICByZXR1cm4gY2xvbmU7XG59XG4iXX0=
|
|
@@ -174,9 +174,9 @@ class ResumeEntry {
|
|
|
174
174
|
}
|
|
175
175
|
/**
|
|
176
176
|
* A seed-only entry: each capture seeds the FIRST entry into its subflow,
|
|
177
|
-
* which then starts at its own root.
|
|
178
|
-
*
|
|
179
|
-
*
|
|
177
|
+
* which then starts at its own root. Pass it explicitly as `resume` to
|
|
178
|
+
* TraverserOptions or HandlerDeps — the same one-shot law, without a
|
|
179
|
+
* stand-in or a path. Prefer `plan` when resuming a checkpoint.
|
|
180
180
|
*/
|
|
181
181
|
static fromCaptures(captures) {
|
|
182
182
|
return new ResumeEntry(undefined, Object.entries(captures).map(([subflowId, seed]) => ({ subflowId, seed })));
|
|
@@ -453,4 +453,4 @@ function walksToItsStage(chart, subflows, fanOutGraph, pause, level) {
|
|
|
453
453
|
function ownEntry(record, key) {
|
|
454
454
|
return record && Object.prototype.hasOwnProperty.call(record, key) ? record[key] : undefined;
|
|
455
455
|
}
|
|
456
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzdW1lRW50cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9oYW5kbGVycy9SZXN1bWVFbnRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOERHOzs7QUFFSCxxREFBNEQ7QUFFNUQsbURBQXNFO0FBOEN0RSxNQUFhLFdBQVc7SUFDdEI7Ozs7O09BS0c7SUFDTSxLQUFLLENBQXNDO0lBQ3BELDZGQUE2RjtJQUNwRixrQkFBa0IsQ0FBcUM7SUFDaEU7Ozs7OztPQU1HO0lBQ00sa0JBQWtCLENBQXFCO0lBQ2hELGlGQUFpRjtJQUNoRSxPQUFPLENBQXVDO0lBRS9ELFlBQ0UsS0FBMEMsRUFDMUMsSUFBd0MsRUFDeEMsa0JBQTJDLEVBQzNDLGtCQUEyQjtRQUUzQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFDN0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBQzdDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O09BaUJHO0lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBZSxJQU96QjtRQUNDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3pELE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxFQUFnQixDQUFDO1FBRTdDLDBFQUEwRTtRQUMx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S0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzNFLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDOUIsS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLFNBQVMsQ0FBQztBQUMvRCxDQUFDO0FBRUQsbUdBQW1HO0FBQ25HLFNBQVMsUUFBUSxDQUFJLE1BQXFDLEVBQUUsR0FBVztJQUNyRSxPQUFPLE1BQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUMvRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXN1bWVFbnRyeSDigJQgdGhlIHJlc3VtZSdzIE9ORS1TSE9UIHJlLWVudHJ5IChNMiwgcGF1c2UvcmVzdW1lKS5cbiAqXG4gKiBBIHJlc3VtZSBoYXMgdG8gZ2V0IGJhY2sgdG8gYSBzdGFnZSBpbiB0aGUgbWlkZGxlIG9mIGEgY2hhcnQuIEl0IGRvZXMgdGhhdFxuICogd2l0aCBhIHNtYWxsIHN5bnRoZXRpYyBzdHJ1Y3R1cmU6IGEgc3RhbmQtaW4gZm9yIHRoZSBwYXVzZWQgc3RhZ2UgKHRoZVxuICogc3RhZ2UncyBvd24gbm9kZSB3aXRoIGl0cyBmdW5jdGlvbiBzd2FwcGVkIGZvciB0aGUgcmVzdW1lIGhhbGYg4oCUIG9yLCBmb3IgYW5cbiAqIGBpbnRlcnJ1cHQoKWAgcGF1c2UsIGZvciBpdHMgb3duIGZ1bmN0aW9uIHdpdGggdGhlIGFuc3dlciBkZXBvc2l0ZWQpLCBhbmQsXG4gKiBmb3IgYSBwYXVzZSBpbnNpZGUgc3ViZmxvd3MsIHRoZSBjaGVja3BvaW50J3MgY2FwdHVyZSBvZiBlYWNoIHN1YmZsb3cnc1xuICogc3RhdGUgb24gdGhlIHdheSBkb3duLlxuICpcbiAqIFRIRSBMQVc6IHRoYXQgc3RydWN0dXJlIGlzIHVzZWQgRVhBQ1RMWSBPTkNFLCBmb3IgdGhlIHJlLWVudHJ5LiBUaGUgc3RhbmQtaW5cbiAqIGlzIHdoZXJlIHRoZSByZXN1bWVkIHRyYXZlcnNhbCBTVEFSVFMgKG9yIHdoZXJlIHRoZSBsZWFmIHN1YmZsb3cncyB0cmF2ZXJzYWxcbiAqIHN0YXJ0cykg4oCUIGl0IGlzIG5ldmVyIGEgbm9kZSBhbnkgaWQgY2FuIHJlc29sdmUgdG8uIEVhY2ggc3ViZmxvdyBvbiB0aGUgcGF1c2VcbiAqIHBhdGggdGFrZXMgaXRzIHNlZWQgYW5kIGl0cyBlbnRyeSBwb2ludCBvbiBpdHMgRklSU1QgZW50cnkgYW5kIG5ldmVyIGFnYWluLlxuICogQWZ0ZXIgdGhhdCB0aGUgcnVuIGJlbG9uZ3MgdG8gdGhlIHJlYWwgY2hhcnQ6IGV2ZXJ5IGxvb3AgdGFyZ2V0LCBldmVyeSBsYXRlclxuICogc3ViZmxvdyBlbnRyeSAocmVhbCByb290LCBpbnB1dE1hcHBlciBydW5zKSwgZXZlcnkgcmUtdmlzaXQgb2YgdGhlIHBhdXNlZFxuICogc3RhZ2UgKHdoaWNoIHBhdXNlcyBhZ2FpbikgcmVzb2x2ZXMgYWdhaW5zdCB0aGUgY2hhcnQgYXMgYnVpbHQuXG4gKlxuICogT05FIFJVTEUgQVQgRVZFUlkgTEVWRUwg4oCUIHdoYXQgcnVucyBhZnRlciB0aGUgZW50cnkuIE9uIHRoZSBvcmlnaW5hbCBydW4sXG4gKiB3aGF0ZXZlciBESVNQQVRDSEVEIHRoZSBwYXVzZWQgc3RhZ2UgKG9yIHRoZSBtb3VudCBvZiB0aGUgbmV4dCBzdWJmbG93IG9uXG4gKiB0aGUgcGF0aCkg4oCUIGEgZGVjaWRlciwgYSBzZWxlY3RvciwgYSBmb3JrIOKAlCByYW4gaXRzIG93biBjb250aW51YXRpb24gb25jZVxuICogdGhhdCBjaGlsZCdzIGNoYWluIGVuZGVkOiB0aGUgZGVjaWRlcidzIGBuZXh0YCwgdGhlIGZvcmsncyBqb2luLiBBIHJlc3VtZVxuICogZW50ZXJzIEFUIHRoZSBjaGlsZCwgc28gdGhhdCBjb250aW51YXRpb24gbXVzdCBiZSBjYXJyaWVkOiB0aGUgZW50cnkgaXNcbiAqIHRoZSBjaGlsZCB3aXRoIHRoZSBlbmNsb3NpbmcgZGlzcGF0Y2hlcidzIGNvbnRpbnVhdGlvbiBhdHRhY2hlZCBhdCB0aGUgZW5kXG4gKiBvZiBpdHMgb3duIGNoYWluIChgeyAuLi5jaGlsZCwgbmV4dDogZGlzcGF0Y2hlci5uZXh0IH1gIGZvciBhIGNoYXJ0IHRoZVxuICogYnVpbGRlciBtYWRlKS4gSXQgaXMgcmVhZCBmcm9tIHRoZSBDSEFSVCwgbGV2ZWwgYnkgbGV2ZWwg4oCUIG5ldmVyIGZyb20gdGhlXG4gKiBjaGVja3BvaW50LCBzbyBhbiBlZGl0ZWQgY2hlY2twb2ludCBjYW5ub3QgcmVkaXJlY3QgYSBydW4g4oCUIGFuZCBpdCBsYW5kc1xuICogYXQgdGhlIGxldmVsIGl0IGJlbG9uZ3MgdG86IGEgdG9wLWxldmVsIGRlY2lkZXIncyBgbmV4dGAgcnVucyBhdCB0aGUgdG9wXG4gKiBsZXZlbCwgYWZ0ZXIgdGhlIHN1YmZsb3cncyBvdXRwdXRNYXBwZXIsIG5vdCBpbnNpZGUgdGhlIHN1YmZsb3cuXG4gKlxuICogUEFSQUxMRUwgU0lCTElOR1MgVEhBVCBQQVVTRUQgVE9PICg5LjI4LjApLiBXaGVuIHR3byBjaGlsZHJlbiBvZiBvbmVcbiAqIGZhbi1vdXQgcGF1c2VkLCB0aGUgY2hlY2twb2ludCBhc2tzIHRoZSBmaXJzdCBhbmQgY2FycmllcyB0aGUgb3RoZXJzXG4gKiAoYEZsb3djaGFydENoZWNrcG9pbnQucGVuZGluZ1BhdXNlc2ApLiBBdCB0aGF0IGZhbi1vdXQncyBsZXZlbCB0aGUgZW50cnkgaXNcbiAqIHRoZSBjaGlsZCdzIG93biBjaGFpbiBvbmx5IOKAlCBubyBqb2luIOKAlCBhbmQgb25jZSBpdCBlbmRzLCB0aGUgbmV4dCBzaWJsaW5nJ3NcbiAqIHBhdXNlIGlzIHJhaXNlZCBhZ2FpbiBhcyBpdCB3YXMgKGl0cyBxdWVzdGlvbiwgaXRzIGNhcHR1cmVkIHN0YXRlKSwgd2l0aG91dFxuICogcmUtcnVubmluZyBhbnl0aGluZy4gVGhlIGpvaW4gcnVucyBvbmx5IHdoZW4gdGhlIGxhc3Qgc2libGluZyBpcyByZXN1bWVkLlxuICpcbiAqIEJlZm9yZSA5LjI4LjAgdGhlIHN0cnVjdHVyZSBzdGF5ZWQgaW4gZm9yY2UgZm9yIHRoZSB3aG9sZSByZXN1bWVkIHJ1biDigJQgdGhlXG4gKiB0cmF2ZXJzYWwgd2FzIFJPT1RFRCBhdCB0aGUgc3RhbmQtaW4gKHNvIGEgbG9vcCBiYWNrIHRvIHRoZSBwYXVzZWQgaWQgcmUtcmFuXG4gKiB0aGUgcmVzdW1lIGhhbGYsIGFuZCBhIGxvb3AgdGFyZ2V0IHVwc3RyZWFtIG9mIHRoZSByZXN1bWUgcG9pbnQgd2FzXG4gKiB1bnJlYWNoYWJsZTogb25lIHN0YWdlIHJhbiwgdGhlbiB0aGUgcnVuIGVuZGVkIHNpbGVudGx5KSwgYW5kIHRoZSBsZWFmXG4gKiBzdWJmbG93J3Mgcm9vdCB3YXMgU1dBUFBFRCBmb3IgdGhlIHN0YW5kLWluIGluIHRoZSBzdWJmbG93IGRpY3Rpb25hcnkgKHNvIGFcbiAqIGxhdGVyIGVudHJ5IGludG8gaXQgd291bGQgcmUtcnVuIHRoZSByZXN1bWUgaGFsZiBvbiBhIHN0YWxlIHNlZWQpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBXaGF0IEZsb3dDaGFydEV4ZWN1dG9yLnJlc3VtZSgpIGJ1aWxkcyBmb3IgYSBwYXVzZSBhdCAnc2YtYS9zZi1iL2FzaydcbiAqIC8vIChzdWJmbG93UGF0aCBbJ3NmLWEnLCAnc2YtYS9zZi1iJ10pLCAnc2YtYS9zZi1iJyBtb3VudGVkIGFzIGEgZGVjaWRlclxuICogLy8gYnJhbmNoIGluc2lkZSBzZi1hIHdob3NlIGRlY2lkZXIgY29udGludWVzIHRvICdzZi1hL2FmdGVyJzpcbiAqIGNvbnN0IGVudHJ5ID0gUmVzdW1lRW50cnkucGxhbih7IHJvb3QsIHN1YmZsb3dzLCBwYXRoLCBjYXB0dXJlcywgc3RhbmRJbiB9KTtcbiAqIGVudHJ5LnN0YXJ0OyAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0b3AtbGV2ZWwgbW91bnQgb2YgJ3NmLWEnXG4gKiBlbnRyeS5lbnRlclN1YmZsb3coJ3NmLWEnKTsgICAgICAvLyB7IHNlZWQ6IHNmLWEncyBjYXB0dXJlLCBlbnRyeTogeyAuLi5tb3VudCBvZiAnc2YtYS9zZi1iJywgbmV4dDogc2YtYS9hZnRlciB9IH1cbiAqIGVudHJ5LmVudGVyU3ViZmxvdygnc2YtYS9zZi1iJyk7IC8vIHsgc2VlZDogc2YtYidzIGNhcHR1cmUsIGVudHJ5OiB0aGUgc3RhbmQtaW4gfVxuICogZW50cnkuZW50ZXJTdWJmbG93KCdzZi1hL3NmLWInKTsgLy8gdW5kZWZpbmVkIOKAlCBhIGxhdGVyIGVudHJ5IGlzIGFuIG9yZGluYXJ5IG9uZVxuICogYGBgXG4gKlxuICogQSBwYXVzZSB0d28gKG9yIG1vcmUpIHN1YmZsb3dzIGRlZXAgdGhlcmVmb3JlIHJlLWVudGVycyBlYWNoIG91dGVyIHN1YmZsb3dcbiAqIEFUIHRoZSBtb3VudCBvZiB0aGUgbmV4dCBvbmUg4oCUIHRoZSBvdXRlciBzdWJmbG93J3Mgc3RhZ2VzIGJlZm9yZSB0aGF0IG1vdW50XG4gKiBkbyBub3QgcnVuIGFnYWluICh0aGV5IGRpZCBiZWZvcmUgOS4yOC4wKS4gVGhlIG9uZSBleGNlcHRpb24gaXMgYSBkZWdyYWRlZFxuICogY2hlY2twb2ludCBtaXNzaW5nIGFuIG91dGVyIHN1YmZsb3cncyBjYXB0dXJlOiB0aGF0IHN1YmZsb3cgcmUtcnVucyBmcm9tIGl0c1xuICogcm9vdCB3aXRoIGl0cyBpbnB1dE1hcHBlciAoaXRzIGVhcmxpZXIgc3RhZ2VzIHJlY29tcHV0ZSB3aGF0IHRoZSBjYXB0dXJlXG4gKiB3b3VsZCBoYXZlIGhlbGQpLCBleGFjdGx5IGFzIDkuMjcuMCBkaWQuXG4gKi9cblxuaW1wb3J0IHsgZGVjb2RlUGVuZGluZ1BhdXNlcyB9IGZyb20gJy4uLy4uL3BhdXNlL3JlY29yZC5qcyc7XG5pbXBvcnQgdHlwZSB7IFBlbmRpbmdQYXVzZSB9IGZyb20gJy4uLy4uL3BhdXNlL3R5cGVzLmpzJztcbmltcG9ydCB7IGlzUGF1c2VkRXhlY3V0aW9uLCBQYXVzZVNpZ25hbCB9IGZyb20gJy4uLy4uL3BhdXNlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VOb2RlIH0gZnJvbSAnLi4vZ3JhcGgvU3RhZ2VOb2RlLmpzJztcblxuLyoqXG4gKiBBIHBhcmFsbGVsIHNpYmxpbmcncyBwYXVzZSwgcXVldWVkIGF0IHRoZSBsZXZlbCBvZiBpdHMgZmFuLW91dDogcmFpc2VkXG4gKiBhZ2FpbiB0aGVyZSBvbmNlIHRoZSByZXN1bWVkIGNoaWxkJ3MgY2hhaW4gZW5kcyAoc2VlIHtAbGluayByYWlzZVF1ZXVlZFBhdXNlfSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVkUGF1c2Uge1xuICAvKiogVGhlIHNpYmxpbmcncyBwYXVzZSBhcyB0aGUgY2hlY2twb2ludCBjYXJyaWVzIGl0IOKAlCBpdHMgcGF0aCBmcm9tIHRoZSB0b3AuICovXG4gIHJlYWRvbmx5IHBhdXNlOiBQZW5kaW5nUGF1c2U7XG4gIC8qKiBIb3cgbWFueSBzdWJmbG93cyBkZWVwIHRoZSBmYW4tb3V0IHNpdHMgKDAgPSB0aGUgdG9wIGxldmVsKS4gKi9cbiAgcmVhZG9ubHkgbGV2ZWw6IG51bWJlcjtcbiAgLyoqIFRoZSBzaWJsaW5nJ3MgcGF1c2VkIHN0YWdlJ3MgbmFtZSwgZm9yIHRoZSBgb25QYXVzZWAgZXZlbnQuICovXG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xufVxuXG4vKiogT25lIHN1YmZsb3cgYm91bmRhcnkgb24gdGhlIHdheSBiYWNrIHRvIGEgcGF1c2VkIHN0YWdlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXN1bWVIb3A8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIC8qKiBUaGUgcGF0aC1wcmVmaXhlZCBzdWJmbG93IGlkIChhIGBGbG93Y2hhcnRDaGVja3BvaW50LnN1YmZsb3dQYXRoYCBlbnRyeSkuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHN1YmZsb3cncyBzdGF0ZSBhdCB0aGUgcGF1c2UgKGBjaGVja3BvaW50LnN1YmZsb3dTdGF0ZXNbc3ViZmxvd0lkXWApLlxuICAgKiBTZWVkcyB0aGUgbmVzdGVkIHJ1bnRpbWUgSU5TVEVBRCBvZiB0aGUgaW5wdXRNYXBwZXIncyB2YWx1ZXMg4oCUIHRoZSBjYXB0dXJlXG4gICAqIGFscmVhZHkgaG9sZHMgdGhlIHBvc3QtaW5wdXQsIHByZS1wYXVzZSBtZW1vcnkgKHRoZSBpbnB1dE1hcHBlciBzdGlsbFxuICAgKiBydW5zLCBmb3IgdGhlIHN0YWdlcycgcmVhZC1vbmx5IGFyZ3Mgb25seSkuIEFic2VudCB3aGVuIHRoZSBjaGVja3BvaW50XG4gICAqIGhvbGRzIG5vIGNhcHR1cmUgZm9yIHRoaXMgc3ViZmxvdzsgdGhlIGlucHV0TWFwcGVyIHRoZW4gc2VlZHMgaXQsIGFzIG9uXG4gICAqIGFueSBlbnRyeS5cbiAgICovXG4gIHJlYWRvbmx5IHNlZWQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIFdoZXJlIHRoaXMgc3ViZmxvdydzIHRyYXZlcnNhbCBzdGFydHMgb24gdGhlIHJlLWVudHJ5OiB0aGUgbW91bnQgb2YgdGhlXG4gICAqIG5leHQgc3ViZmxvdyBvbiB0aGUgcGF0aCwgb3Ig4oCUIG9uIHRoZSBsYXN0IGhvcCDigJQgdGhlIHBhdXNlZCBzdGFnZSdzXG4gICAqIHN0YW5kLWluLCBlYWNoIHdpdGggaXRzIGRpc3BhdGNoZXIncyBjb250aW51YXRpb24gYXR0YWNoZWQgKHNlZSB0aGVcbiAgICogbW9kdWxlIGRvYykuIEFic2VudDogdGhlIHN1YmZsb3cncyBvd24gcm9vdCDigJQgYSBzZWVkLW9ubHkgaG9wIChzZWVcbiAgICoge0BsaW5rIFJlc3VtZUVudHJ5LmZyb21DYXB0dXJlc30pLCBvciBhbiBvdXRlciBzdWJmbG93IHdob3NlIGNhcHR1cmUgdGhlXG4gICAqIGNoZWNrcG9pbnQgbGFja3MuXG4gICAqL1xuICByZWFkb25seSBlbnRyeT86IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICAvKipcbiAgICogUGF1c2VzIG9mIHBhcmFsbGVsIHNpYmxpbmdzIHdob3NlIGZhbi1vdXQgc2l0cyBpbiBUSElTIHN1YmZsb3csIHJhaXNlZCBpblxuICAgKiBvcmRlciBvbmNlIGBlbnRyeWAncyBjaGFpbiBlbmRzICh0aGUgZmlyc3QgaXMgcmFpc2VkLCB0aGUgcmVzdCB3YWl0XG4gICAqIGJlaGluZCBpdCkuIEFic2VudCB3aGVuIG5vIHNpYmxpbmcgaXMgd2FpdGluZyBoZXJlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGVuZGluZ1BhdXNlcz86IHJlYWRvbmx5IFF1ZXVlZFBhdXNlW107XG59XG5cbmV4cG9ydCBjbGFzcyBSZXN1bWVFbnRyeTxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgLyoqXG4gICAqIFdoZXJlIHRoZSByZXN1bWVkIFRPUC1MRVZFTCB0cmF2ZXJzYWwgc3RhcnRzOiB0aGUgc3RhbmQtaW4gKGEgdG9wLWxldmVsXG4gICAqIHBhdXNlKSBvciB0aGUgbW91bnQgb2YgdGhlIGZpcnN0IHN1YmZsb3cgb24gdGhlIHBhdGgg4oCUIGVhY2ggd2l0aCBpdHNcbiAgICogZGlzcGF0Y2hlcidzIGNvbnRpbnVhdGlvbiBhdHRhY2hlZC4gYHVuZGVmaW5lZGAgZm9yIGEgc2VlZC1vbmx5IGVudHJ5IOKAlFxuICAgKiB0aGUgdHJhdmVyc2FsIHN0YXJ0cyBhdCBpdHMgcm9vdC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB8IHVuZGVmaW5lZDtcbiAgLyoqIFNpYmxpbmcgcGF1c2VzIHdob3NlIGZhbi1vdXQgc2l0cyBhdCB0aGUgVE9QIGxldmVsIOKAlCByYWlzZWQgb25jZSBgc3RhcnRgJ3MgY2hhaW4gZW5kcy4gKi9cbiAgcmVhZG9ubHkgc3RhcnRQZW5kaW5nUGF1c2VzOiByZWFkb25seSBRdWV1ZWRQYXVzZVtdIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogSG93IG1hbnkgc3RhZ2UgZXhlY3V0aW9ucyB0aGUgcmVzdW1lZCBydW4gbWFrZXMgYmVmb3JlIHRoZSBzdGFuZC1pbiBydW5zXG4gICAqIOKAlCBvbmUgcGVyIHN1YmZsb3cgb24gdGhlIHBhdGgsIGVhY2ggZW50ZXJlZCBhdCBpdHMgbW91bnQg4oCUIHNvIHRoZVxuICAgKiBleGVjdXRvcidzIGBvblJlc3VtZWAgbmFtZXMgdGhlIHN0YW5kLWluJ3Mgb3duIGBydW50aW1lU3RhZ2VJZGAuXG4gICAqIGB1bmRlZmluZWRgIHdoZW4gaXQgY2Fubm90IGJlIGtub3duIGJlZm9yZSB0aGUgcnVuOiBhbiBvdXRlciBzdWJmbG93XG4gICAqIG1pc3NpbmcgaXRzIGNhcHR1cmUgcmUtcnVucyBmcm9tIGl0cyByb290LlxuICAgKi9cbiAgcmVhZG9ubHkgc3RlcHNCZWZvcmVTdGFuZEluOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIC8qKiBIb3BzIG5vdCB0YWtlbiB5ZXQsIGJ5IHN1YmZsb3cgaWQuIEEgaG9wIGxlYXZlcyB0aGlzIG1hcCB3aGVuIGl0IGlzIHRha2VuLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHBlbmRpbmc6IE1hcDxzdHJpbmcsIFJlc3VtZUhvcDxUT3V0LCBUU2NvcGU+PjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgIHN0YXJ0OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB8IHVuZGVmaW5lZCxcbiAgICBob3BzOiByZWFkb25seSBSZXN1bWVIb3A8VE91dCwgVFNjb3BlPltdLFxuICAgIHN0YXJ0UGVuZGluZ1BhdXNlcz86IHJlYWRvbmx5IFF1ZXVlZFBhdXNlW10sXG4gICAgc3RlcHNCZWZvcmVTdGFuZEluPzogbnVtYmVyLFxuICApIHtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5zdGFydFBlbmRpbmdQYXVzZXMgPSBzdGFydFBlbmRpbmdQYXVzZXM7XG4gICAgdGhpcy5zdGVwc0JlZm9yZVN0YW5kSW4gPSBzdGVwc0JlZm9yZVN0YW5kSW47XG4gICAgdGhpcy5wZW5kaW5nID0gbmV3IE1hcChob3BzLm1hcCgoaG9wKSA9PiBbaG9wLnN1YmZsb3dJZCwgaG9wXSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBsYW4gdGhlIHJlLWVudHJ5IG9mIGEgcGF1c2VkIGNoYXJ0LiBFdmVyeSBtb3VudCBvbiB0aGUgcGF0aCwgZXZlcnlcbiAgICogZGlzcGF0Y2hlciBjb250aW51YXRpb24gYW5kIGV2ZXJ5IHdhaXRpbmcgc2libGluZyBpcyByZXNvbHZlZCBIRVJFLFxuICAgKiBhZ2FpbnN0IHRoZSBjaGFydCBhcyBidWlsdCwgYmVmb3JlIGEgc2luZ2xlIHN0YWdlIHJ1bnMg4oCUIHNvIGEgY2hlY2twb2ludFxuICAgKiB3aG9zZSBwYXRoIHRoZSBjaGFydCBjYW5ub3Qgd2FsayBpcyByZWZ1c2VkIHVwIGZyb250IGluc3RlYWQgb2YgcmVzdW1pbmdcbiAgICogaW50byB0aGUgd3Jvbmcgc2hhcGUuXG4gICAqXG4gICAqIEBwYXJhbSBhcmdzIC0gYHJvb3RgIGFuZCBgc3ViZmxvd3NgOiB0aGUgY2hhcnQgYXMgYnVpbHRcbiAgICogICAoYEZsb3dDaGFydC5yb290YCwgYEZsb3dDaGFydC5zdWJmbG93c2ApOyBgcGF0aGA6XG4gICAqICAgYGNoZWNrcG9pbnQuc3ViZmxvd1BhdGhgLCBvdXRlcm1vc3QgZmlyc3Q7IGBjYXB0dXJlc2A6XG4gICAqICAgYGNoZWNrcG9pbnQuc3ViZmxvd1N0YXRlc2AgKGEgZGV0YWNoZWQgY29weSk7IGBzdGFuZEluYDogdGhlIG5vZGUgdGhhdFxuICAgKiAgIHJ1bnMgdGhlIHJlc3VtZSBoYWxmIOKAlCB0aGUgcGF1c2VkIHN0YWdlJ3Mgb3duIG5vZGUsIGZ1bmN0aW9uIHN3YXBwZWRcbiAgICogICAoaXRzIGNvbnRpbnVhdGlvbiBpcyBhdHRhY2hlZCBoZXJlKTsgYHBlbmRpbmdQYXVzZXNgOlxuICAgKiAgIGBjaGVja3BvaW50LnBlbmRpbmdQYXVzZXNgIChhIGRldGFjaGVkIGNvcHkpLlxuICAgKiBAdGhyb3dzIHdoZW4gYSBzdWJmbG93IG9uIHRoZSBwYXRoIGlzIG1pc3NpbmcsIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2UsIG9yXG4gICAqICAgaXRzIG1vdW50IGNhbm5vdCBiZSByZWFjaGVkIGZyb20gdGhlIGVuY2xvc2luZyBncmFwaDsgb3Igd2hlbiBhIHBlbmRpbmdcbiAgICogICBwYXVzZSBpcyBtYWxmb3JtZWQgb3IgaXMgbm90IGEgcGFyYWxsZWwgc2libGluZyBvZiB0aGUgcGF1c2VkIHN0YWdlXG4gICAqL1xuICBzdGF0aWMgcGxhbjxUT3V0LCBUU2NvcGU+KGFyZ3M6IHtcbiAgICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgICBzdWJmbG93czogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB9PiB8IHVuZGVmaW5lZDtcbiAgICBwYXRoOiByZWFkb25seSBzdHJpbmdbXTtcbiAgICBjYXB0dXJlczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHwgdW5kZWZpbmVkO1xuICAgIHN0YW5kSW46IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICAgIHBlbmRpbmdQYXVzZXM/OiByZWFkb25seSBQZW5kaW5nUGF1c2VbXTtcbiAgfSk6IFJlc3VtZUVudHJ5PFRPdXQsIFRTY29wZT4ge1xuICAgIGNvbnN0IHsgcm9vdCwgc3ViZmxvd3MsIHBhdGgsIGNhcHR1cmVzLCBzdGFuZEluIH0gPSBhcmdzO1xuICAgIGNvbnN0IGNoYXJ0ID0gbmV3IENoYXJ0SW5kZXg8VE91dCwgVFNjb3BlPigpO1xuXG4gICAgLy8gMS4gV2FsayB0aGUgcGF0aDogdGhlIGdyYXBoIG9mIGV2ZXJ5IGxldmVsLCB0aGUgbW91bnQgb2YgZXZlcnkgc3ViZmxvdy5cbiAgICBjb25zdCBncmFwaHM6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W10gPSBbcm9vdF07XG4gICAgY29uc3QgbW91bnRzOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPltdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzdWJmbG93SWQgPSBwYXRoW2ldO1xuICAgICAgbW91bnRzLnB1c2goY2hhcnQub25seU1vdW50KGdyYXBoc1tpXSwgc3ViZmxvd0lkLCBpID09PSAwID8gJ3RoZSBmbG93Y2hhcnQnIDogYHN1YmZsb3cgJyR7cGF0aFtpIC0gMV19J2ApKTtcbiAgICAgIC8vIE93biBlbnRyaWVzIG9ubHk6IGEgcGF0aCBzZWdtZW50IGlzIGRhdGEgZnJvbSBhIHN0b3JlZCBjaGVja3BvaW50LFxuICAgICAgLy8gYW5kIGAnX19wcm90b19fJ2AgbXVzdCBub3QgcmVzb2x2ZSB0aHJvdWdoIHRoZSBwcm90b3R5cGUgY2hhaW4uXG4gICAgICBjb25zdCBkZWZpbml0aW9uID0gb3duRW50cnkoc3ViZmxvd3MsIHN1YmZsb3dJZCk7XG4gICAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW5ub3QgcmVzdW1lOiBzdWJmbG93ICcke3N1YmZsb3dJZH0nIGlzIG5vdCByZWdpc3RlcmVkIGluIHRoZSBmbG93Y2hhcnQuIGAgK1xuICAgICAgICAgICAgJ1RoZSBjaGFydCBtYXkgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSBjaGVja3BvaW50IHdhcyBjcmVhdGVkLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBncmFwaHMucHVzaChkZWZpbml0aW9uLnJvb3QpO1xuICAgIH1cbiAgICBjb25zdCBsZWFmTGV2ZWwgPSBwYXRoLmxlbmd0aDtcbiAgICAvLyBUaGUgcGF1c2VkIHN0YWdlJ3MgUkVBTCBub2RlIOKAlCB3aG9zZSBkaXNwYXRjaGVyIHRoZSBzdGFuZC1pbidzXG4gICAgLy8gY29udGludWF0aW9uIGNvbWVzIGZyb20uIChUaGUgZXhlY3V0b3IgYWxyZWFkeSBmb3VuZCBpdDsgYSBkaXJlY3RcbiAgICAvLyBjYWxsZXIncyBzdGFuZC1pbiB0aGF0IGlzIG5vdCBpbiB0aGUgbGVhZiBncmFwaCBzaW1wbHkgaGFzIG5vbmUuKVxuICAgIGNvbnN0IHBhdXNlZCA9IGNoYXJ0LnN0YWdlKGdyYXBoc1tsZWFmTGV2ZWxdLCBzdGFuZEluLmlkKTtcblxuICAgIC8vIDIuIFF1ZXVlIGV2ZXJ5IHdhaXRpbmcgc2libGluZyBwYXVzZSBhdCB0aGUgbGV2ZWwgb2YgaXRzIGZhbi1vdXQuXG4gICAgY29uc3QgcXVldWVzID0gcXVldWVTaWJsaW5nUGF1c2VzKGFyZ3MucGVuZGluZ1BhdXNlcywgeyBjaGFydCwgc3ViZmxvd3MsIHJvb3QsIHBhdGgsIGdyYXBocywgbW91bnRzLCBwYXVzZWQgfSk7XG5cbiAgICAvLyAzLiBUaGUgb25lLXNob3QgZW50cnkgb2YgZXZlcnkgbGV2ZWw6IHRoZSBjaGlsZCwgdGhlbiBpdHMgZGlzcGF0Y2hlcidzXG4gICAgLy8gICAgY29udGludWF0aW9uIOKAlCB1cCB0byB0aGUgZmFuLW91dCB3aGVuIHNpYmxpbmdzIHdhaXQgdGhlcmUuXG4gICAgY29uc3QgY2hpbGRBdCA9IChsZXZlbDogbnVtYmVyKSA9PiAobGV2ZWwgPCBsZWFmTGV2ZWwgPyBtb3VudHNbbGV2ZWxdIDogcGF1c2VkKTtcbiAgICBjb25zdCBlbnRyeUF0ID0gKGxldmVsOiBudW1iZXIpOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiA9PiB7XG4gICAgICBjb25zdCBjaGlsZCA9IGNoaWxkQXQobGV2ZWwpO1xuICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSBsZXZlbCA8IGxlYWZMZXZlbCA/IG1vdW50c1tsZXZlbF0gOiBzdGFuZEluO1xuICAgICAgaWYgKCFjaGlsZCkgcmV0dXJuIHJlcGxhY2VtZW50O1xuICAgICAgcmV0dXJuIGNoYXJ0LmVudHJ5KGdyYXBoc1tsZXZlbF0sIGNoaWxkLCByZXBsYWNlbWVudCwgcXVldWVzW2xldmVsXT8uZmFuT3V0KTtcbiAgICB9O1xuICAgIC8vIDQuIFRoZSBob3BzLiBBIHN1YmZsb3cgd2l0aCBubyBjYXB0dXJlIGlzIGVudGVyZWQgYXQgaXRzIFJPT1Qgd2l0aCBpdHNcbiAgICAvLyAgICBpbnB1dE1hcHBlciAoaXRzIGVhcmxpZXIgc3RhZ2VzIHJlY29tcHV0ZSB3aGF0IHRoZSBjYXB0dXJlIGhlbGQpIOKAlFxuICAgIC8vICAgIGV4Y2VwdCB0aGUgbGVhZiwgd2hvc2UgZW50cnkgaXMgYWx3YXlzIHRoZSBzdGFuZC1pbjogcmUtcnVubmluZyBpdFxuICAgIC8vICAgIGZyb20gaXRzIHJvb3Qgd291bGQgYXNrIGFnYWluIGFuZCBsb3NlIHRoZSBhbnN3ZXIuXG4gICAgY29uc3QgaG9wczogUmVzdW1lSG9wPFRPdXQsIFRTY29wZT5bXSA9IFtdO1xuICAgIGxldCBldmVyeUxldmVsQXRJdHNFbnRyeSA9IHRydWU7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzdWJmbG93SWQgPSBwYXRoW2ldO1xuICAgICAgY29uc3Qgc2VlZCA9IG93bkVudHJ5KGNhcHR1cmVzLCBzdWJmbG93SWQpO1xuICAgICAgY29uc3QgaXNMZWFmSG9wID0gaSA9PT0gcGF0aC5sZW5ndGggLSAxO1xuICAgICAgaWYgKHNlZWQgPT09IHVuZGVmaW5lZCAmJiAhaXNMZWFmSG9wKSB7XG4gICAgICAgIGV2ZXJ5TGV2ZWxBdEl0c0VudHJ5ID0gZmFsc2U7XG4gICAgICAgIGhvcHMucHVzaCh7IHN1YmZsb3dJZCB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCB3YWl0aW5nID0gcXVldWVzW2kgKyAxXT8ucGF1c2VzO1xuICAgICAgaG9wcy5wdXNoKHtcbiAgICAgICAgc3ViZmxvd0lkLFxuICAgICAgICAuLi4oc2VlZCAhPT0gdW5kZWZpbmVkICYmIHsgc2VlZCB9KSxcbiAgICAgICAgZW50cnk6IGVudHJ5QXQoaSArIDEpLFxuICAgICAgICAuLi4od2FpdGluZyAmJiB7IHBlbmRpbmdQYXVzZXM6IHdhaXRpbmcgfSksXG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gRXZlcnkgbGV2ZWwgZW50ZXJlZCBhdCBpdHMgZW50cnk6IG9uZSBleGVjdXRpb24gKHRoZSBtb3VudCkgcGVyIGxldmVsXG4gICAgLy8gcnVucyBiZWZvcmUgdGhlIHN0YW5kLWluLlxuICAgIHJldHVybiBuZXcgUmVzdW1lRW50cnkoZW50cnlBdCgwKSwgaG9wcywgcXVldWVzWzBdPy5wYXVzZXMsIGV2ZXJ5TGV2ZWxBdEl0c0VudHJ5ID8gcGF0aC5sZW5ndGggOiB1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc2VlZC1vbmx5IGVudHJ5OiBlYWNoIGNhcHR1cmUgc2VlZHMgdGhlIEZJUlNUIGVudHJ5IGludG8gaXRzIHN1YmZsb3csXG4gICAqIHdoaWNoIHRoZW4gc3RhcnRzIGF0IGl0cyBvd24gcm9vdC4gV2hhdCB0aGUgZGVwcmVjYXRlZFxuICAgKiBgc3ViZmxvd1N0YXRlc0ZvclJlc3VtZWAgb3B0aW9uIChUcmF2ZXJzZXJPcHRpb25zIC8gSGFuZGxlckRlcHMpIG1lYW5zXG4gICAqIHNpbmNlIDkuMjguMCDigJQgdGhlIHNhbWUgb25lLXNob3QgbGF3LCB3aXRob3V0IGEgc3RhbmQtaW4gb3IgYSBwYXRoLlxuICAgKi9cbiAgc3RhdGljIGZyb21DYXB0dXJlczxUT3V0LCBUU2NvcGU+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=
|
|
456
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzdW1lRW50cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS9oYW5kbGVycy9SZXN1bWVFbnRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOERHOzs7QUFFSCxxREFBNEQ7QUFFNUQsbURBQXNFO0FBOEN0RSxNQUFhLFdBQVc7SUFDdEI7Ozs7O09BS0c7SUFDTSxLQUFLLENBQXNDO0lBQ3BELDZGQUE2RjtJQUNwRixrQkFBa0IsQ0FBcUM7SUFDaEU7Ozs7OztPQU1HO0lBQ00sa0JBQWtCLENBQXFCO0lBQ2hELGlGQUFpRjtJQUNoRSxPQUFPLENBQXVDO0lBRS9ELFlBQ0UsS0FBMEMsRUFDMUMsSUFBd0MsRUFDeEMsa0JBQTJDLEVBQzNDLGtCQUEyQjtRQUUzQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFDN0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBQzdDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O09BaUJHO0lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBZSxJQU96QjtRQUNDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3pELE1BQU0sS0FBSyxHQUFHLElBQUksVUFBVSxFQUFnQixDQUFDO1FBRTdDLDBFQUEwRTtRQUMx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S0FBSyxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzNFLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDOUIsS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLFNBQVMsQ0FBQztBQUMvRCxDQUFDO0FBRUQsbUdBQW1HO0FBQ25HLFNBQVMsUUFBUSxDQUFJLE1BQXFDLEVBQUUsR0FBVztJQUNyRSxPQUFPLE1BQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUMvRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXN1bWVFbnRyeSDigJQgdGhlIHJlc3VtZSdzIE9ORS1TSE9UIHJlLWVudHJ5IChNMiwgcGF1c2UvcmVzdW1lKS5cbiAqXG4gKiBBIHJlc3VtZSBoYXMgdG8gZ2V0IGJhY2sgdG8gYSBzdGFnZSBpbiB0aGUgbWlkZGxlIG9mIGEgY2hhcnQuIEl0IGRvZXMgdGhhdFxuICogd2l0aCBhIHNtYWxsIHN5bnRoZXRpYyBzdHJ1Y3R1cmU6IGEgc3RhbmQtaW4gZm9yIHRoZSBwYXVzZWQgc3RhZ2UgKHRoZVxuICogc3RhZ2UncyBvd24gbm9kZSB3aXRoIGl0cyBmdW5jdGlvbiBzd2FwcGVkIGZvciB0aGUgcmVzdW1lIGhhbGYg4oCUIG9yLCBmb3IgYW5cbiAqIGBpbnRlcnJ1cHQoKWAgcGF1c2UsIGZvciBpdHMgb3duIGZ1bmN0aW9uIHdpdGggdGhlIGFuc3dlciBkZXBvc2l0ZWQpLCBhbmQsXG4gKiBmb3IgYSBwYXVzZSBpbnNpZGUgc3ViZmxvd3MsIHRoZSBjaGVja3BvaW50J3MgY2FwdHVyZSBvZiBlYWNoIHN1YmZsb3cnc1xuICogc3RhdGUgb24gdGhlIHdheSBkb3duLlxuICpcbiAqIFRIRSBMQVc6IHRoYXQgc3RydWN0dXJlIGlzIHVzZWQgRVhBQ1RMWSBPTkNFLCBmb3IgdGhlIHJlLWVudHJ5LiBUaGUgc3RhbmQtaW5cbiAqIGlzIHdoZXJlIHRoZSByZXN1bWVkIHRyYXZlcnNhbCBTVEFSVFMgKG9yIHdoZXJlIHRoZSBsZWFmIHN1YmZsb3cncyB0cmF2ZXJzYWxcbiAqIHN0YXJ0cykg4oCUIGl0IGlzIG5ldmVyIGEgbm9kZSBhbnkgaWQgY2FuIHJlc29sdmUgdG8uIEVhY2ggc3ViZmxvdyBvbiB0aGUgcGF1c2VcbiAqIHBhdGggdGFrZXMgaXRzIHNlZWQgYW5kIGl0cyBlbnRyeSBwb2ludCBvbiBpdHMgRklSU1QgZW50cnkgYW5kIG5ldmVyIGFnYWluLlxuICogQWZ0ZXIgdGhhdCB0aGUgcnVuIGJlbG9uZ3MgdG8gdGhlIHJlYWwgY2hhcnQ6IGV2ZXJ5IGxvb3AgdGFyZ2V0LCBldmVyeSBsYXRlclxuICogc3ViZmxvdyBlbnRyeSAocmVhbCByb290LCBpbnB1dE1hcHBlciBydW5zKSwgZXZlcnkgcmUtdmlzaXQgb2YgdGhlIHBhdXNlZFxuICogc3RhZ2UgKHdoaWNoIHBhdXNlcyBhZ2FpbikgcmVzb2x2ZXMgYWdhaW5zdCB0aGUgY2hhcnQgYXMgYnVpbHQuXG4gKlxuICogT05FIFJVTEUgQVQgRVZFUlkgTEVWRUwg4oCUIHdoYXQgcnVucyBhZnRlciB0aGUgZW50cnkuIE9uIHRoZSBvcmlnaW5hbCBydW4sXG4gKiB3aGF0ZXZlciBESVNQQVRDSEVEIHRoZSBwYXVzZWQgc3RhZ2UgKG9yIHRoZSBtb3VudCBvZiB0aGUgbmV4dCBzdWJmbG93IG9uXG4gKiB0aGUgcGF0aCkg4oCUIGEgZGVjaWRlciwgYSBzZWxlY3RvciwgYSBmb3JrIOKAlCByYW4gaXRzIG93biBjb250aW51YXRpb24gb25jZVxuICogdGhhdCBjaGlsZCdzIGNoYWluIGVuZGVkOiB0aGUgZGVjaWRlcidzIGBuZXh0YCwgdGhlIGZvcmsncyBqb2luLiBBIHJlc3VtZVxuICogZW50ZXJzIEFUIHRoZSBjaGlsZCwgc28gdGhhdCBjb250aW51YXRpb24gbXVzdCBiZSBjYXJyaWVkOiB0aGUgZW50cnkgaXNcbiAqIHRoZSBjaGlsZCB3aXRoIHRoZSBlbmNsb3NpbmcgZGlzcGF0Y2hlcidzIGNvbnRpbnVhdGlvbiBhdHRhY2hlZCBhdCB0aGUgZW5kXG4gKiBvZiBpdHMgb3duIGNoYWluIChgeyAuLi5jaGlsZCwgbmV4dDogZGlzcGF0Y2hlci5uZXh0IH1gIGZvciBhIGNoYXJ0IHRoZVxuICogYnVpbGRlciBtYWRlKS4gSXQgaXMgcmVhZCBmcm9tIHRoZSBDSEFSVCwgbGV2ZWwgYnkgbGV2ZWwg4oCUIG5ldmVyIGZyb20gdGhlXG4gKiBjaGVja3BvaW50LCBzbyBhbiBlZGl0ZWQgY2hlY2twb2ludCBjYW5ub3QgcmVkaXJlY3QgYSBydW4g4oCUIGFuZCBpdCBsYW5kc1xuICogYXQgdGhlIGxldmVsIGl0IGJlbG9uZ3MgdG86IGEgdG9wLWxldmVsIGRlY2lkZXIncyBgbmV4dGAgcnVucyBhdCB0aGUgdG9wXG4gKiBsZXZlbCwgYWZ0ZXIgdGhlIHN1YmZsb3cncyBvdXRwdXRNYXBwZXIsIG5vdCBpbnNpZGUgdGhlIHN1YmZsb3cuXG4gKlxuICogUEFSQUxMRUwgU0lCTElOR1MgVEhBVCBQQVVTRUQgVE9PICg5LjI4LjApLiBXaGVuIHR3byBjaGlsZHJlbiBvZiBvbmVcbiAqIGZhbi1vdXQgcGF1c2VkLCB0aGUgY2hlY2twb2ludCBhc2tzIHRoZSBmaXJzdCBhbmQgY2FycmllcyB0aGUgb3RoZXJzXG4gKiAoYEZsb3djaGFydENoZWNrcG9pbnQucGVuZGluZ1BhdXNlc2ApLiBBdCB0aGF0IGZhbi1vdXQncyBsZXZlbCB0aGUgZW50cnkgaXNcbiAqIHRoZSBjaGlsZCdzIG93biBjaGFpbiBvbmx5IOKAlCBubyBqb2luIOKAlCBhbmQgb25jZSBpdCBlbmRzLCB0aGUgbmV4dCBzaWJsaW5nJ3NcbiAqIHBhdXNlIGlzIHJhaXNlZCBhZ2FpbiBhcyBpdCB3YXMgKGl0cyBxdWVzdGlvbiwgaXRzIGNhcHR1cmVkIHN0YXRlKSwgd2l0aG91dFxuICogcmUtcnVubmluZyBhbnl0aGluZy4gVGhlIGpvaW4gcnVucyBvbmx5IHdoZW4gdGhlIGxhc3Qgc2libGluZyBpcyByZXN1bWVkLlxuICpcbiAqIEJlZm9yZSA5LjI4LjAgdGhlIHN0cnVjdHVyZSBzdGF5ZWQgaW4gZm9yY2UgZm9yIHRoZSB3aG9sZSByZXN1bWVkIHJ1biDigJQgdGhlXG4gKiB0cmF2ZXJzYWwgd2FzIFJPT1RFRCBhdCB0aGUgc3RhbmQtaW4gKHNvIGEgbG9vcCBiYWNrIHRvIHRoZSBwYXVzZWQgaWQgcmUtcmFuXG4gKiB0aGUgcmVzdW1lIGhhbGYsIGFuZCBhIGxvb3AgdGFyZ2V0IHVwc3RyZWFtIG9mIHRoZSByZXN1bWUgcG9pbnQgd2FzXG4gKiB1bnJlYWNoYWJsZTogb25lIHN0YWdlIHJhbiwgdGhlbiB0aGUgcnVuIGVuZGVkIHNpbGVudGx5KSwgYW5kIHRoZSBsZWFmXG4gKiBzdWJmbG93J3Mgcm9vdCB3YXMgU1dBUFBFRCBmb3IgdGhlIHN0YW5kLWluIGluIHRoZSBzdWJmbG93IGRpY3Rpb25hcnkgKHNvIGFcbiAqIGxhdGVyIGVudHJ5IGludG8gaXQgd291bGQgcmUtcnVuIHRoZSByZXN1bWUgaGFsZiBvbiBhIHN0YWxlIHNlZWQpLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBXaGF0IEZsb3dDaGFydEV4ZWN1dG9yLnJlc3VtZSgpIGJ1aWxkcyBmb3IgYSBwYXVzZSBhdCAnc2YtYS9zZi1iL2FzaydcbiAqIC8vIChzdWJmbG93UGF0aCBbJ3NmLWEnLCAnc2YtYS9zZi1iJ10pLCAnc2YtYS9zZi1iJyBtb3VudGVkIGFzIGEgZGVjaWRlclxuICogLy8gYnJhbmNoIGluc2lkZSBzZi1hIHdob3NlIGRlY2lkZXIgY29udGludWVzIHRvICdzZi1hL2FmdGVyJzpcbiAqIGNvbnN0IGVudHJ5ID0gUmVzdW1lRW50cnkucGxhbih7IHJvb3QsIHN1YmZsb3dzLCBwYXRoLCBjYXB0dXJlcywgc3RhbmRJbiB9KTtcbiAqIGVudHJ5LnN0YXJ0OyAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSB0b3AtbGV2ZWwgbW91bnQgb2YgJ3NmLWEnXG4gKiBlbnRyeS5lbnRlclN1YmZsb3coJ3NmLWEnKTsgICAgICAvLyB7IHNlZWQ6IHNmLWEncyBjYXB0dXJlLCBlbnRyeTogeyAuLi5tb3VudCBvZiAnc2YtYS9zZi1iJywgbmV4dDogc2YtYS9hZnRlciB9IH1cbiAqIGVudHJ5LmVudGVyU3ViZmxvdygnc2YtYS9zZi1iJyk7IC8vIHsgc2VlZDogc2YtYidzIGNhcHR1cmUsIGVudHJ5OiB0aGUgc3RhbmQtaW4gfVxuICogZW50cnkuZW50ZXJTdWJmbG93KCdzZi1hL3NmLWInKTsgLy8gdW5kZWZpbmVkIOKAlCBhIGxhdGVyIGVudHJ5IGlzIGFuIG9yZGluYXJ5IG9uZVxuICogYGBgXG4gKlxuICogQSBwYXVzZSB0d28gKG9yIG1vcmUpIHN1YmZsb3dzIGRlZXAgdGhlcmVmb3JlIHJlLWVudGVycyBlYWNoIG91dGVyIHN1YmZsb3dcbiAqIEFUIHRoZSBtb3VudCBvZiB0aGUgbmV4dCBvbmUg4oCUIHRoZSBvdXRlciBzdWJmbG93J3Mgc3RhZ2VzIGJlZm9yZSB0aGF0IG1vdW50XG4gKiBkbyBub3QgcnVuIGFnYWluICh0aGV5IGRpZCBiZWZvcmUgOS4yOC4wKS4gVGhlIG9uZSBleGNlcHRpb24gaXMgYSBkZWdyYWRlZFxuICogY2hlY2twb2ludCBtaXNzaW5nIGFuIG91dGVyIHN1YmZsb3cncyBjYXB0dXJlOiB0aGF0IHN1YmZsb3cgcmUtcnVucyBmcm9tIGl0c1xuICogcm9vdCB3aXRoIGl0cyBpbnB1dE1hcHBlciAoaXRzIGVhcmxpZXIgc3RhZ2VzIHJlY29tcHV0ZSB3aGF0IHRoZSBjYXB0dXJlXG4gKiB3b3VsZCBoYXZlIGhlbGQpLCBleGFjdGx5IGFzIDkuMjcuMCBkaWQuXG4gKi9cblxuaW1wb3J0IHsgZGVjb2RlUGVuZGluZ1BhdXNlcyB9IGZyb20gJy4uLy4uL3BhdXNlL3JlY29yZC5qcyc7XG5pbXBvcnQgdHlwZSB7IFBlbmRpbmdQYXVzZSB9IGZyb20gJy4uLy4uL3BhdXNlL3R5cGVzLmpzJztcbmltcG9ydCB7IGlzUGF1c2VkRXhlY3V0aW9uLCBQYXVzZVNpZ25hbCB9IGZyb20gJy4uLy4uL3BhdXNlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU3RhZ2VOb2RlIH0gZnJvbSAnLi4vZ3JhcGgvU3RhZ2VOb2RlLmpzJztcblxuLyoqXG4gKiBBIHBhcmFsbGVsIHNpYmxpbmcncyBwYXVzZSwgcXVldWVkIGF0IHRoZSBsZXZlbCBvZiBpdHMgZmFuLW91dDogcmFpc2VkXG4gKiBhZ2FpbiB0aGVyZSBvbmNlIHRoZSByZXN1bWVkIGNoaWxkJ3MgY2hhaW4gZW5kcyAoc2VlIHtAbGluayByYWlzZVF1ZXVlZFBhdXNlfSkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVldWVkUGF1c2Uge1xuICAvKiogVGhlIHNpYmxpbmcncyBwYXVzZSBhcyB0aGUgY2hlY2twb2ludCBjYXJyaWVzIGl0IOKAlCBpdHMgcGF0aCBmcm9tIHRoZSB0b3AuICovXG4gIHJlYWRvbmx5IHBhdXNlOiBQZW5kaW5nUGF1c2U7XG4gIC8qKiBIb3cgbWFueSBzdWJmbG93cyBkZWVwIHRoZSBmYW4tb3V0IHNpdHMgKDAgPSB0aGUgdG9wIGxldmVsKS4gKi9cbiAgcmVhZG9ubHkgbGV2ZWw6IG51bWJlcjtcbiAgLyoqIFRoZSBzaWJsaW5nJ3MgcGF1c2VkIHN0YWdlJ3MgbmFtZSwgZm9yIHRoZSBgb25QYXVzZWAgZXZlbnQuICovXG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xufVxuXG4vKiogT25lIHN1YmZsb3cgYm91bmRhcnkgb24gdGhlIHdheSBiYWNrIHRvIGEgcGF1c2VkIHN0YWdlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXN1bWVIb3A8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIC8qKiBUaGUgcGF0aC1wcmVmaXhlZCBzdWJmbG93IGlkIChhIGBGbG93Y2hhcnRDaGVja3BvaW50LnN1YmZsb3dQYXRoYCBlbnRyeSkuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHN1YmZsb3cncyBzdGF0ZSBhdCB0aGUgcGF1c2UgKGBjaGVja3BvaW50LnN1YmZsb3dTdGF0ZXNbc3ViZmxvd0lkXWApLlxuICAgKiBTZWVkcyB0aGUgbmVzdGVkIHJ1bnRpbWUgSU5TVEVBRCBvZiB0aGUgaW5wdXRNYXBwZXIncyB2YWx1ZXMg4oCUIHRoZSBjYXB0dXJlXG4gICAqIGFscmVhZHkgaG9sZHMgdGhlIHBvc3QtaW5wdXQsIHByZS1wYXVzZSBtZW1vcnkgKHRoZSBpbnB1dE1hcHBlciBzdGlsbFxuICAgKiBydW5zLCBmb3IgdGhlIHN0YWdlcycgcmVhZC1vbmx5IGFyZ3Mgb25seSkuIEFic2VudCB3aGVuIHRoZSBjaGVja3BvaW50XG4gICAqIGhvbGRzIG5vIGNhcHR1cmUgZm9yIHRoaXMgc3ViZmxvdzsgdGhlIGlucHV0TWFwcGVyIHRoZW4gc2VlZHMgaXQsIGFzIG9uXG4gICAqIGFueSBlbnRyeS5cbiAgICovXG4gIHJlYWRvbmx5IHNlZWQ/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIFdoZXJlIHRoaXMgc3ViZmxvdydzIHRyYXZlcnNhbCBzdGFydHMgb24gdGhlIHJlLWVudHJ5OiB0aGUgbW91bnQgb2YgdGhlXG4gICAqIG5leHQgc3ViZmxvdyBvbiB0aGUgcGF0aCwgb3Ig4oCUIG9uIHRoZSBsYXN0IGhvcCDigJQgdGhlIHBhdXNlZCBzdGFnZSdzXG4gICAqIHN0YW5kLWluLCBlYWNoIHdpdGggaXRzIGRpc3BhdGNoZXIncyBjb250aW51YXRpb24gYXR0YWNoZWQgKHNlZSB0aGVcbiAgICogbW9kdWxlIGRvYykuIEFic2VudDogdGhlIHN1YmZsb3cncyBvd24gcm9vdCDigJQgYSBzZWVkLW9ubHkgaG9wIChzZWVcbiAgICoge0BsaW5rIFJlc3VtZUVudHJ5LmZyb21DYXB0dXJlc30pLCBvciBhbiBvdXRlciBzdWJmbG93IHdob3NlIGNhcHR1cmUgdGhlXG4gICAqIGNoZWNrcG9pbnQgbGFja3MuXG4gICAqL1xuICByZWFkb25seSBlbnRyeT86IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICAvKipcbiAgICogUGF1c2VzIG9mIHBhcmFsbGVsIHNpYmxpbmdzIHdob3NlIGZhbi1vdXQgc2l0cyBpbiBUSElTIHN1YmZsb3csIHJhaXNlZCBpblxuICAgKiBvcmRlciBvbmNlIGBlbnRyeWAncyBjaGFpbiBlbmRzICh0aGUgZmlyc3QgaXMgcmFpc2VkLCB0aGUgcmVzdCB3YWl0XG4gICAqIGJlaGluZCBpdCkuIEFic2VudCB3aGVuIG5vIHNpYmxpbmcgaXMgd2FpdGluZyBoZXJlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGVuZGluZ1BhdXNlcz86IHJlYWRvbmx5IFF1ZXVlZFBhdXNlW107XG59XG5cbmV4cG9ydCBjbGFzcyBSZXN1bWVFbnRyeTxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgLyoqXG4gICAqIFdoZXJlIHRoZSByZXN1bWVkIFRPUC1MRVZFTCB0cmF2ZXJzYWwgc3RhcnRzOiB0aGUgc3RhbmQtaW4gKGEgdG9wLWxldmVsXG4gICAqIHBhdXNlKSBvciB0aGUgbW91bnQgb2YgdGhlIGZpcnN0IHN1YmZsb3cgb24gdGhlIHBhdGgg4oCUIGVhY2ggd2l0aCBpdHNcbiAgICogZGlzcGF0Y2hlcidzIGNvbnRpbnVhdGlvbiBhdHRhY2hlZC4gYHVuZGVmaW5lZGAgZm9yIGEgc2VlZC1vbmx5IGVudHJ5IOKAlFxuICAgKiB0aGUgdHJhdmVyc2FsIHN0YXJ0cyBhdCBpdHMgcm9vdC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB8IHVuZGVmaW5lZDtcbiAgLyoqIFNpYmxpbmcgcGF1c2VzIHdob3NlIGZhbi1vdXQgc2l0cyBhdCB0aGUgVE9QIGxldmVsIOKAlCByYWlzZWQgb25jZSBgc3RhcnRgJ3MgY2hhaW4gZW5kcy4gKi9cbiAgcmVhZG9ubHkgc3RhcnRQZW5kaW5nUGF1c2VzOiByZWFkb25seSBRdWV1ZWRQYXVzZVtdIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogSG93IG1hbnkgc3RhZ2UgZXhlY3V0aW9ucyB0aGUgcmVzdW1lZCBydW4gbWFrZXMgYmVmb3JlIHRoZSBzdGFuZC1pbiBydW5zXG4gICAqIOKAlCBvbmUgcGVyIHN1YmZsb3cgb24gdGhlIHBhdGgsIGVhY2ggZW50ZXJlZCBhdCBpdHMgbW91bnQg4oCUIHNvIHRoZVxuICAgKiBleGVjdXRvcidzIGBvblJlc3VtZWAgbmFtZXMgdGhlIHN0YW5kLWluJ3Mgb3duIGBydW50aW1lU3RhZ2VJZGAuXG4gICAqIGB1bmRlZmluZWRgIHdoZW4gaXQgY2Fubm90IGJlIGtub3duIGJlZm9yZSB0aGUgcnVuOiBhbiBvdXRlciBzdWJmbG93XG4gICAqIG1pc3NpbmcgaXRzIGNhcHR1cmUgcmUtcnVucyBmcm9tIGl0cyByb290LlxuICAgKi9cbiAgcmVhZG9ubHkgc3RlcHNCZWZvcmVTdGFuZEluOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIC8qKiBIb3BzIG5vdCB0YWtlbiB5ZXQsIGJ5IHN1YmZsb3cgaWQuIEEgaG9wIGxlYXZlcyB0aGlzIG1hcCB3aGVuIGl0IGlzIHRha2VuLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHBlbmRpbmc6IE1hcDxzdHJpbmcsIFJlc3VtZUhvcDxUT3V0LCBUU2NvcGU+PjtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxuICAgIHN0YXJ0OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB8IHVuZGVmaW5lZCxcbiAgICBob3BzOiByZWFkb25seSBSZXN1bWVIb3A8VE91dCwgVFNjb3BlPltdLFxuICAgIHN0YXJ0UGVuZGluZ1BhdXNlcz86IHJlYWRvbmx5IFF1ZXVlZFBhdXNlW10sXG4gICAgc3RlcHNCZWZvcmVTdGFuZEluPzogbnVtYmVyLFxuICApIHtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5zdGFydFBlbmRpbmdQYXVzZXMgPSBzdGFydFBlbmRpbmdQYXVzZXM7XG4gICAgdGhpcy5zdGVwc0JlZm9yZVN0YW5kSW4gPSBzdGVwc0JlZm9yZVN0YW5kSW47XG4gICAgdGhpcy5wZW5kaW5nID0gbmV3IE1hcChob3BzLm1hcCgoaG9wKSA9PiBbaG9wLnN1YmZsb3dJZCwgaG9wXSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBsYW4gdGhlIHJlLWVudHJ5IG9mIGEgcGF1c2VkIGNoYXJ0LiBFdmVyeSBtb3VudCBvbiB0aGUgcGF0aCwgZXZlcnlcbiAgICogZGlzcGF0Y2hlciBjb250aW51YXRpb24gYW5kIGV2ZXJ5IHdhaXRpbmcgc2libGluZyBpcyByZXNvbHZlZCBIRVJFLFxuICAgKiBhZ2FpbnN0IHRoZSBjaGFydCBhcyBidWlsdCwgYmVmb3JlIGEgc2luZ2xlIHN0YWdlIHJ1bnMg4oCUIHNvIGEgY2hlY2twb2ludFxuICAgKiB3aG9zZSBwYXRoIHRoZSBjaGFydCBjYW5ub3Qgd2FsayBpcyByZWZ1c2VkIHVwIGZyb250IGluc3RlYWQgb2YgcmVzdW1pbmdcbiAgICogaW50byB0aGUgd3Jvbmcgc2hhcGUuXG4gICAqXG4gICAqIEBwYXJhbSBhcmdzIC0gYHJvb3RgIGFuZCBgc3ViZmxvd3NgOiB0aGUgY2hhcnQgYXMgYnVpbHRcbiAgICogICAoYEZsb3dDaGFydC5yb290YCwgYEZsb3dDaGFydC5zdWJmbG93c2ApOyBgcGF0aGA6XG4gICAqICAgYGNoZWNrcG9pbnQuc3ViZmxvd1BhdGhgLCBvdXRlcm1vc3QgZmlyc3Q7IGBjYXB0dXJlc2A6XG4gICAqICAgYGNoZWNrcG9pbnQuc3ViZmxvd1N0YXRlc2AgKGEgZGV0YWNoZWQgY29weSk7IGBzdGFuZEluYDogdGhlIG5vZGUgdGhhdFxuICAgKiAgIHJ1bnMgdGhlIHJlc3VtZSBoYWxmIOKAlCB0aGUgcGF1c2VkIHN0YWdlJ3Mgb3duIG5vZGUsIGZ1bmN0aW9uIHN3YXBwZWRcbiAgICogICAoaXRzIGNvbnRpbnVhdGlvbiBpcyBhdHRhY2hlZCBoZXJlKTsgYHBlbmRpbmdQYXVzZXNgOlxuICAgKiAgIGBjaGVja3BvaW50LnBlbmRpbmdQYXVzZXNgIChhIGRldGFjaGVkIGNvcHkpLlxuICAgKiBAdGhyb3dzIHdoZW4gYSBzdWJmbG93IG9uIHRoZSBwYXRoIGlzIG1pc3NpbmcsIG1vdW50ZWQgbW9yZSB0aGFuIG9uY2UsIG9yXG4gICAqICAgaXRzIG1vdW50IGNhbm5vdCBiZSByZWFjaGVkIGZyb20gdGhlIGVuY2xvc2luZyBncmFwaDsgb3Igd2hlbiBhIHBlbmRpbmdcbiAgICogICBwYXVzZSBpcyBtYWxmb3JtZWQgb3IgaXMgbm90IGEgcGFyYWxsZWwgc2libGluZyBvZiB0aGUgcGF1c2VkIHN0YWdlXG4gICAqL1xuICBzdGF0aWMgcGxhbjxUT3V0LCBUU2NvcGU+KGFyZ3M6IHtcbiAgICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgICBzdWJmbG93czogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB9PiB8IHVuZGVmaW5lZDtcbiAgICBwYXRoOiByZWFkb25seSBzdHJpbmdbXTtcbiAgICBjYXB0dXJlczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHwgdW5kZWZpbmVkO1xuICAgIHN0YW5kSW46IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICAgIHBlbmRpbmdQYXVzZXM/OiByZWFkb25seSBQZW5kaW5nUGF1c2VbXTtcbiAgfSk6IFJlc3VtZUVudHJ5PFRPdXQsIFRTY29wZT4ge1xuICAgIGNvbnN0IHsgcm9vdCwgc3ViZmxvd3MsIHBhdGgsIGNhcHR1cmVzLCBzdGFuZEluIH0gPSBhcmdzO1xuICAgIGNvbnN0IGNoYXJ0ID0gbmV3IENoYXJ0SW5kZXg8VE91dCwgVFNjb3BlPigpO1xuXG4gICAgLy8gMS4gV2FsayB0aGUgcGF0aDogdGhlIGdyYXBoIG9mIGV2ZXJ5IGxldmVsLCB0aGUgbW91bnQgb2YgZXZlcnkgc3ViZmxvdy5cbiAgICBjb25zdCBncmFwaHM6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W10gPSBbcm9vdF07XG4gICAgY29uc3QgbW91bnRzOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPltdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzdWJmbG93SWQgPSBwYXRoW2ldO1xuICAgICAgbW91bnRzLnB1c2goY2hhcnQub25seU1vdW50KGdyYXBoc1tpXSwgc3ViZmxvd0lkLCBpID09PSAwID8gJ3RoZSBmbG93Y2hhcnQnIDogYHN1YmZsb3cgJyR7cGF0aFtpIC0gMV19J2ApKTtcbiAgICAgIC8vIE93biBlbnRyaWVzIG9ubHk6IGEgcGF0aCBzZWdtZW50IGlzIGRhdGEgZnJvbSBhIHN0b3JlZCBjaGVja3BvaW50LFxuICAgICAgLy8gYW5kIGAnX19wcm90b19fJ2AgbXVzdCBub3QgcmVzb2x2ZSB0aHJvdWdoIHRoZSBwcm90b3R5cGUgY2hhaW4uXG4gICAgICBjb25zdCBkZWZpbml0aW9uID0gb3duRW50cnkoc3ViZmxvd3MsIHN1YmZsb3dJZCk7XG4gICAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBDYW5ub3QgcmVzdW1lOiBzdWJmbG93ICcke3N1YmZsb3dJZH0nIGlzIG5vdCByZWdpc3RlcmVkIGluIHRoZSBmbG93Y2hhcnQuIGAgK1xuICAgICAgICAgICAgJ1RoZSBjaGFydCBtYXkgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSBjaGVja3BvaW50IHdhcyBjcmVhdGVkLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBncmFwaHMucHVzaChkZWZpbml0aW9uLnJvb3QpO1xuICAgIH1cbiAgICBjb25zdCBsZWFmTGV2ZWwgPSBwYXRoLmxlbmd0aDtcbiAgICAvLyBUaGUgcGF1c2VkIHN0YWdlJ3MgUkVBTCBub2RlIOKAlCB3aG9zZSBkaXNwYXRjaGVyIHRoZSBzdGFuZC1pbidzXG4gICAgLy8gY29udGludWF0aW9uIGNvbWVzIGZyb20uIChUaGUgZXhlY3V0b3IgYWxyZWFkeSBmb3VuZCBpdDsgYSBkaXJlY3RcbiAgICAvLyBjYWxsZXIncyBzdGFuZC1pbiB0aGF0IGlzIG5vdCBpbiB0aGUgbGVhZiBncmFwaCBzaW1wbHkgaGFzIG5vbmUuKVxuICAgIGNvbnN0IHBhdXNlZCA9IGNoYXJ0LnN0YWdlKGdyYXBoc1tsZWFmTGV2ZWxdLCBzdGFuZEluLmlkKTtcblxuICAgIC8vIDIuIFF1ZXVlIGV2ZXJ5IHdhaXRpbmcgc2libGluZyBwYXVzZSBhdCB0aGUgbGV2ZWwgb2YgaXRzIGZhbi1vdXQuXG4gICAgY29uc3QgcXVldWVzID0gcXVldWVTaWJsaW5nUGF1c2VzKGFyZ3MucGVuZGluZ1BhdXNlcywgeyBjaGFydCwgc3ViZmxvd3MsIHJvb3QsIHBhdGgsIGdyYXBocywgbW91bnRzLCBwYXVzZWQgfSk7XG5cbiAgICAvLyAzLiBUaGUgb25lLXNob3QgZW50cnkgb2YgZXZlcnkgbGV2ZWw6IHRoZSBjaGlsZCwgdGhlbiBpdHMgZGlzcGF0Y2hlcidzXG4gICAgLy8gICAgY29udGludWF0aW9uIOKAlCB1cCB0byB0aGUgZmFuLW91dCB3aGVuIHNpYmxpbmdzIHdhaXQgdGhlcmUuXG4gICAgY29uc3QgY2hpbGRBdCA9IChsZXZlbDogbnVtYmVyKSA9PiAobGV2ZWwgPCBsZWFmTGV2ZWwgPyBtb3VudHNbbGV2ZWxdIDogcGF1c2VkKTtcbiAgICBjb25zdCBlbnRyeUF0ID0gKGxldmVsOiBudW1iZXIpOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiA9PiB7XG4gICAgICBjb25zdCBjaGlsZCA9IGNoaWxkQXQobGV2ZWwpO1xuICAgICAgY29uc3QgcmVwbGFjZW1lbnQgPSBsZXZlbCA8IGxlYWZMZXZlbCA/IG1vdW50c1tsZXZlbF0gOiBzdGFuZEluO1xuICAgICAgaWYgKCFjaGlsZCkgcmV0dXJuIHJlcGxhY2VtZW50O1xuICAgICAgcmV0dXJuIGNoYXJ0LmVudHJ5KGdyYXBoc1tsZXZlbF0sIGNoaWxkLCByZXBsYWNlbWVudCwgcXVldWVzW2xldmVsXT8uZmFuT3V0KTtcbiAgICB9O1xuICAgIC8vIDQuIFRoZSBob3BzLiBBIHN1YmZsb3cgd2l0aCBubyBjYXB0dXJlIGlzIGVudGVyZWQgYXQgaXRzIFJPT1Qgd2l0aCBpdHNcbiAgICAvLyAgICBpbnB1dE1hcHBlciAoaXRzIGVhcmxpZXIgc3RhZ2VzIHJlY29tcHV0ZSB3aGF0IHRoZSBjYXB0dXJlIGhlbGQpIOKAlFxuICAgIC8vICAgIGV4Y2VwdCB0aGUgbGVhZiwgd2hvc2UgZW50cnkgaXMgYWx3YXlzIHRoZSBzdGFuZC1pbjogcmUtcnVubmluZyBpdFxuICAgIC8vICAgIGZyb20gaXRzIHJvb3Qgd291bGQgYXNrIGFnYWluIGFuZCBsb3NlIHRoZSBhbnN3ZXIuXG4gICAgY29uc3QgaG9wczogUmVzdW1lSG9wPFRPdXQsIFRTY29wZT5bXSA9IFtdO1xuICAgIGxldCBldmVyeUxldmVsQXRJdHNFbnRyeSA9IHRydWU7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBzdWJmbG93SWQgPSBwYXRoW2ldO1xuICAgICAgY29uc3Qgc2VlZCA9IG93bkVudHJ5KGNhcHR1cmVzLCBzdWJmbG93SWQpO1xuICAgICAgY29uc3QgaXNMZWFmSG9wID0gaSA9PT0gcGF0aC5sZW5ndGggLSAxO1xuICAgICAgaWYgKHNlZWQgPT09IHVuZGVmaW5lZCAmJiAhaXNMZWFmSG9wKSB7XG4gICAgICAgIGV2ZXJ5TGV2ZWxBdEl0c0VudHJ5ID0gZmFsc2U7XG4gICAgICAgIGhvcHMucHVzaCh7IHN1YmZsb3dJZCB9KTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCB3YWl0aW5nID0gcXVldWVzW2kgKyAxXT8ucGF1c2VzO1xuICAgICAgaG9wcy5wdXNoKHtcbiAgICAgICAgc3ViZmxvd0lkLFxuICAgICAgICAuLi4oc2VlZCAhPT0gdW5kZWZpbmVkICYmIHsgc2VlZCB9KSxcbiAgICAgICAgZW50cnk6IGVudHJ5QXQoaSArIDEpLFxuICAgICAgICAuLi4od2FpdGluZyAmJiB7IHBlbmRpbmdQYXVzZXM6IHdhaXRpbmcgfSksXG4gICAgICB9KTtcbiAgICB9XG4gICAgLy8gRXZlcnkgbGV2ZWwgZW50ZXJlZCBhdCBpdHMgZW50cnk6IG9uZSBleGVjdXRpb24gKHRoZSBtb3VudCkgcGVyIGxldmVsXG4gICAgLy8gcnVucyBiZWZvcmUgdGhlIHN0YW5kLWluLlxuICAgIHJldHVybiBuZXcgUmVzdW1lRW50cnkoZW50cnlBdCgwKSwgaG9wcywgcXVldWVzWzBdPy5wYXVzZXMsIGV2ZXJ5TGV2ZWxBdEl0c0VudHJ5ID8gcGF0aC5sZW5ndGggOiB1bmRlZmluZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgc2VlZC1vbmx5IGVudHJ5OiBlYWNoIGNhcHR1cmUgc2VlZHMgdGhlIEZJUlNUIGVudHJ5IGludG8gaXRzIHN1YmZsb3csXG4gICAqIHdoaWNoIHRoZW4gc3RhcnRzIGF0IGl0cyBvd24gcm9vdC4gUGFzcyBpdCBleHBsaWNpdGx5IGFzIGByZXN1bWVgIHRvXG4gICAqIFRyYXZlcnNlck9wdGlvbnMgb3IgSGFuZGxlckRlcHMg4oCUIHRoZSBzYW1lIG9uZS1zaG90IGxhdywgd2l0aG91dCBhXG4gICAqIHN0YW5kLWluIG9yIGEgcGF0aC4gUHJlZmVyIGBwbGFuYCB3aGVuIHJlc3VtaW5nIGEgY2hlY2twb2ludC5cbiAgICovXG4gIHN0YXRpYyBmcm9tQ2FwdHVyZXM8VE91dCwgVFNjb3BlPihjYXB0dXJlczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KTogUmVzdW1lRW50cnk8VE91dCwgVFNjb3BlPiB7XG4gICAgcmV0dXJuIG5ldyBSZXN1bWVFbnRyeTxUT3V0LCBUU2NvcGU+KFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgT2JqZWN0LmVudHJpZXMoY2FwdHVyZXMpLm1hcCgoW3N1YmZsb3dJZCwgc2VlZF0pID0+ICh7IHN1YmZsb3dJZCwgc2VlZCB9KSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmUtZW50cnkgaW50byBgc3ViZmxvd0lkYCwgdGFrZW4g4oCUIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhpcyBlbnRyeSBpc1xuICAgKiBhbiBvcmRpbmFyeSBvbmUgKHRoZSBzdWJmbG93IGlzIG9mZiB0aGUgcGF1c2UgcGF0aCwgb3IgaXRzIGhvcCB3YXMgYWxyZWFkeVxuICAgKiB0YWtlbikuIE9ORS1TSE9UOiBhIGhvcCBpcyByZXR1cm5lZCBhdCBtb3N0IG9uY2UsIHNvIGEgc2Vjb25kIGVudHJ5IGludG9cbiAgICogdGhlIHNhbWUgc3ViZmxvdyAoYSBsb29wIHBhc3NpbmcgaXRzIG1vdW50IGFnYWluKSBydW5zIHRoZSByZWFsIHN1YmZsb3dcbiAgICogZnJvbSBpdHMgcmVhbCByb290IHdpdGggaXRzIGlucHV0TWFwcGVyLlxuICAgKi9cbiAgZW50ZXJTdWJmbG93KHN1YmZsb3dJZDogc3RyaW5nKTogUmVzdW1lSG9wPFRPdXQsIFRTY29wZT4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGhvcCA9IHRoaXMucGVuZGluZy5nZXQoc3ViZmxvd0lkKTtcbiAgICBpZiAoaG9wICE9PSB1bmRlZmluZWQpIHRoaXMucGVuZGluZy5kZWxldGUoc3ViZmxvd0lkKTtcbiAgICByZXR1cm4gaG9wO1xuICB9XG5cbiAgLyoqIGB0cnVlYCBvbmNlIGV2ZXJ5IGhvcCBoYXMgYmVlbiB0YWtlbiDigJQgdGhlIHJlc3Qgb2YgdGhlIHJ1biBpcyBvcmRpbmFyeS4gKi9cbiAgZ2V0IHNwZW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBlbmRpbmcuc2l6ZSA9PT0gMDtcbiAgfVxufVxuXG4vLyDilIDilIAgUmFpc2luZyBhIHdhaXRpbmcgc2libGluZydzIHBhdXNlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFF1ZXVlIGBxdWV1ZWAgYmVoaW5kIGEgcGF1c2UgcGFzc2luZyB0aHJvdWdoIGl0cyBsZXZlbDogYSBwYXVzZSByYWlzZWRcbiAqIHdoaWxlIHNpYmxpbmdzIHN0aWxsIHdhaXQgbXVzdCBjYXJyeSB0aGVtIHRvIGl0cyBjaGVja3BvaW50LiBFYWNoIHBhdGggaXNcbiAqIGN1dCB0byB0aGF0IGxldmVsIOKAlCB0aGUgYnViYmxlLXVwIHByZXBlbmRzIHRoZSBsZXZlbHMgYWJvdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBxdWV1ZUJlaGluZChzaWduYWw6IFBhdXNlU2lnbmFsLCBxdWV1ZTogcmVhZG9ubHkgUXVldWVkUGF1c2VbXSk6IHZvaWQge1xuICBmb3IgKGNvbnN0IHsgcGF1c2UsIGxldmVsIH0gb2YgcXVldWUpIHtcbiAgICBzaWduYWwuYWRkUGVuZGluZ1BhdXNlKHsgLi4ucGF1c2UsIHN1YmZsb3dQYXRoOiBwYXVzZS5zdWJmbG93UGF0aC5zbGljZShsZXZlbCkgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgZmlyc3Qgd2FpdGluZyBzaWJsaW5nJ3MgcGF1c2UsIHJhaXNlZCBhZ2FpbiBhdCBpdHMgZmFuLW91dCdzIGxldmVsIOKAlFxuICogZXhhY3RseSBhcyBpdCBidWJibGVkIHVwIHRvIHRoYXQgbGV2ZWwgdGhlIGZpcnN0IHRpbWUgKGl0cyBzdGFnZSwgaXRzXG4gKiBxdWVzdGlvbiwgaXRzIG93biBzdWJmbG93IGNhcHR1cmVzKSwgbm90aGluZyByZS1ydW47IHRoZSByZXN0IG9mIHRoZSBxdWV1ZVxuICogd2FpdHMgYmVoaW5kIGl0LiBUaGUgc3ViZmxvd3MgQUJPVkUgdGhlIGZhbi1vdXQgY2FwdHVyZSB0aGVtc2VsdmVzIGFmcmVzaFxuICogYXMgaXQgYnViYmxlcyB1cCwgc28gdGhleSBjYXJyeSB3aGF0IHRoZSByZXN1bWVkIGNoaWxkIHdyb3RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmFpc2VRdWV1ZWRQYXVzZShxdWV1ZTogcmVhZG9ubHkgUXVldWVkUGF1c2VbXSk6IFBhdXNlU2lnbmFsIHtcbiAgY29uc3QgW2ZpcnN0LCAuLi5yZXN0XSA9IHF1ZXVlO1xuICBjb25zdCB7IHBhdXNlLCBsZXZlbCB9ID0gZmlyc3Q7XG4gIGNvbnN0IHNpZ25hbCA9IG5ldyBQYXVzZVNpZ25hbChwYXVzZS5wYXVzZURhdGEsIHBhdXNlLnBhdXNlZFN0YWdlSWQsIHBhdXNlLnBhdXNlZEJ5KTtcbiAgLy8gVGhlIHNpYmxpbmcgcGF1c2VkIGluIGFuIEVBUkxJRVIgcnVuOiBpdHMgb3duIGV4ZWN1dGlvbiwgbm90IHRoaXMgcnVuJ3MuXG4gIGlmIChpc1BhdXNlZEV4ZWN1dGlvbihwYXVzZS5wYXVzZWRFeGVjdXRpb24pKSB7XG4gICAgc2lnbmFsLnN0YW1wRXhlY3V0aW9uKHBhdXNlLnBhdXNlZEV4ZWN1dGlvbi5ydW50aW1lU3RhZ2VJZCwgcGF1c2UucGF1c2VkRXhlY3V0aW9uLnJ1bklkKTtcbiAgfVxuICBjb25zdCBiZWxvdyA9IHBhdXNlLnN1YmZsb3dQYXRoLnNsaWNlKGxldmVsKTtcbiAgZm9yIChsZXQgaSA9IGJlbG93Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBvd25FbnRyeShwYXVzZS5zdWJmbG93U3RhdGVzLCBiZWxvd1tpXSk7XG4gICAgaWYgKHN0YXRlICE9PSB1bmRlZmluZWQpIHNpZ25hbC5jYXB0dXJlU3ViZmxvd1Njb3BlKGJlbG93W2ldLCBzdGF0ZSk7XG4gICAgc2lnbmFsLnByZXBlbmRTdWJmbG93KGJlbG93W2ldKTtcbiAgfVxuICBxdWV1ZUJlaGluZChzaWduYWwsIHJlc3QpO1xuICByZXR1cm4gc2lnbmFsO1xufVxuXG4vLyDilIDilIAgUmVhZGluZyB0aGUgY2hhcnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogVGhlIG5vZGUgdGhhdCBtb3VudHMgYHN1YmZsb3dJZGAsIGZvdW5kIGJ5IERGUyBmcm9tIGBzdGFydGAgb3ZlciBgbmV4dGAgYW5kXG4gKiBgY2hpbGRyZW5gIChsb29wLXJlZiBzdHVicyBza2lwcGVkIOKAlCB0aGV5IHNoYXJlIHRoZWlyIHRhcmdldCdzIGlkIGFuZCBjYXJyeVxuICogbm90aGluZykuIEN5Y2xlLXNhZmUgKHZpc2l0ZWQgYnkgaWRlbnRpdHksIHNvIGFuIGFic2VudCBpZCB0ZXJtaW5hdGVzIHRvbyk7XG4gKiBmaXJzdCBtYXRjaCBpbiBERlMgcHJlLW9yZGVyIChjaGlsZHJlbiBiZWZvcmUgYG5leHRgLCBsaWtlIHRoZSBidWlsZGVyKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRNb3VudDxUT3V0LCBUU2NvcGU+KFxuICBzdGFydDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gIHN1YmZsb3dJZDogc3RyaW5nLFxuKTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IG5vZGUgb2YgZGlzcGF0Y2hlckluZGV4KHN0YXJ0KS5rZXlzKCkpIHtcbiAgICBpZiAobm9kZS5zdWJmbG93SWQgPT09IHN1YmZsb3dJZCkgcmV0dXJuIG5vZGU7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBFdmVyeSByZWFsIG5vZGUgb2Ygb25lIGxldmVsJ3MgZ3JhcGgsIGluIERGUyBwcmUtb3JkZXIsIG1hcHBlZCB0byB0aGVcbiAqIERJU1BBVENIRVIgd2hvc2UgY2hpbGQtY2hhaW4gaG9sZHMgaXQg4oCUIHRoZSBub2RlIHdob3NlIGBjaGlsZHJlbmAgaXRcbiAqIGRlc2NlbmRzIGZyb20gKGEgZGVjaWRlciwgYSBzZWxlY3RvciwgYSBmb3JrKSDigJQgb3IgYHVuZGVmaW5lZGAgZm9yIGEgbm9kZVxuICogb24gdGhlIGxldmVsJ3Mgb3duIHNwaW5lLiBMb29wIHN0dWJzIGFyZSBza2lwcGVkOyB2aXNpdGVkIGJ5IGlkZW50aXR5LCBzb1xuICogdHdvIG1vdW50cyBzaGFyaW5nIGFuIGlkIGFyZSBib3RoIGluZGV4ZWQgYW5kIGEgY3ljbGUgdGVybWluYXRlcy5cbiAqL1xuZnVuY3Rpb24gZGlzcGF0Y2hlckluZGV4PFRPdXQsIFRTY29wZT4oXG4gIHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuKTogTWFwPFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LCBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBpbmRleCA9IG5ldyBNYXA8U3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sIFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkPigpO1xuICBjb25zdCBzdGFjazogQXJyYXk8W1N0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LCBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB8IHVuZGVmaW5lZF0+ID0gW1tyb290LCB1bmRlZmluZWRdXTtcbiAgZm9yIChsZXQgdG9wID0gc3RhY2sucG9wKCk7IHRvcCAhPT0gdW5kZWZpbmVkOyB0b3AgPSBzdGFjay5wb3AoKSkge1xuICAgIGNvbnN0IFtub2RlLCBkaXNwYXRjaGVyXSA9IHRvcDtcbiAgICBpZiAobm9kZS5pc0xvb3BSZWYgfHwgaW5kZXguaGFzKG5vZGUpKSBjb250aW51ZTtcbiAgICBpbmRleC5zZXQobm9kZSwgZGlzcGF0Y2hlcik7XG4gICAgLy8gTElGTzogcHVzaCBgbmV4dGAgZmlyc3QgYW5kIGNoaWxkcmVuIHJldmVyc2VkLCBzbyBjaGlsZHJlbiBhcmUgdmlzaXRlZFxuICAgIC8vIGJlZm9yZSBgbmV4dGAgYW5kIHRoZSBmaXJzdCBjaGlsZCBmaXJzdCDigJQgcHJlLW9yZGVyLCBsaWtlIHRoZSBidWlsZGVyLlxuICAgIGlmIChub2RlLm5leHQpIHN0YWNrLnB1c2goW25vZGUubmV4dCwgZGlzcGF0Y2hlcl0pO1xuICAgIGlmIChub2RlLmNoaWxkcmVuKSB7XG4gICAgICBmb3IgKGxldCBpID0gbm9kZS5jaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgc3RhY2sucHVzaChbbm9kZS5jaGlsZHJlbltpXSwgbm9kZV0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaW5kZXg7XG59XG5cbi8qKiBPbmUgcGxhbidzIHZpZXcgb2YgdGhlIGNoYXJ0OiBlYWNoIGxldmVsJ3MgaW5kZXggYnVpbHQgb25jZS4gKi9cbmNsYXNzIENoYXJ0SW5kZXg8VE91dCwgVFNjb3BlPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5kZXhlcyA9IG5ldyBNYXA8XG4gICAgU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgTWFwPFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LCBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB8IHVuZGVmaW5lZD5cbiAgPigpO1xuXG4gIHByaXZhdGUgb2Yocm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4pIHtcbiAgICBsZXQgaW5kZXggPSB0aGlzLmluZGV4ZXMuZ2V0KHJvb3QpO1xuICAgIGlmICghaW5kZXgpIHtcbiAgICAgIGluZGV4ID0gZGlzcGF0Y2hlckluZGV4KHJvb3QpO1xuICAgICAgdGhpcy5pbmRleGVzLnNldChyb290LCBpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIC8qKiBFdmVyeSBtb3VudCBvZiBgc3ViZmxvd0lkYCBpbiBgcm9vdGAncyBncmFwaCwgaW4gREZTIHByZS1vcmRlci4gKi9cbiAgbW91bnRzT2Yocm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sIHN1YmZsb3dJZDogc3RyaW5nKTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT5bXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLm9mKHJvb3QpLmtleXMoKV0uZmlsdGVyKChub2RlKSA9PiBub2RlLnN1YmZsb3dJZCA9PT0gc3ViZmxvd0lkKTtcbiAgfVxuXG4gIC8qKiBUaGUgb25lIG1vdW50IG9mIGBzdWJmbG93SWRgIGluIGByb290YCdzIGdyYXBoIOKAlCByZWZ1c2VkIHdoZW4gYWJzZW50IG9yIGFtYmlndW91cy4gKi9cbiAgb25seU1vdW50KHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LCBzdWJmbG93SWQ6IHN0cmluZywgZ3JhcGhOYW1lOiBzdHJpbmcpOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB7XG4gICAgY29uc3QgZm91bmQgPSB0aGlzLm1vdW50c09mKHJvb3QsIHN1YmZsb3dJZCk7XG4gICAgaWYgKGZvdW5kLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHJlc3VtZTogdGhlIG1vdW50IG9mIHN1YmZsb3cgJyR7c3ViZmxvd0lkfScgaXMgbm90IHJlYWNoYWJsZSBmcm9tICR7Z3JhcGhOYW1lfS4gYCArXG4gICAgICAgICAgXCJUaGUgY2hlY2twb2ludCdzIHN1YmZsb3dQYXRoIGRvZXMgbm90IG1hdGNoIHRoaXMgY2hhcnQg4oCUIGl0IG1heSBoYXZlIGNoYW5nZWQgc2luY2UgdGhlIGNoZWNrcG9pbnQgd2FzIGNyZWF0ZWQuXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZm91bmQubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHJlc3VtZTogc3ViZmxvdyAnJHtzdWJmbG93SWR9JyBpcyBtb3VudGVkIG1vcmUgdGhhbiBvbmNlIGluICR7Z3JhcGhOYW1lfSBgICtcbiAgICAgICAgICBgKCR7Zm91bmQubWFwKChub2RlKSA9PiBgJyR7bm9kZS5uYW1lfSdgKS5qb2luKCcsICcpfSksIGFuZCBhIGNoZWNrcG9pbnQncyBzdWJmbG93UGF0aCBjYW5ub3Qgc2F5IHdoaWNoIGAgK1xuICAgICAgICAgICdtb3VudCBwYXVzZWQuIEdpdmUgZWFjaCBtb3VudCBpdHMgb3duIHN1YmZsb3cgaWQgdG8gbWFrZSBhIHBhdXNlIGluc2lkZSBpdCByZXN1bWFibGUuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBmb3VuZFswXTtcbiAgfVxuXG4gIC8qKiBUaGUgcmVhbCBzdGFnZSBgaWRgIGluIGByb290YCdzIGdyYXBoIChmaXJzdCBpbiBERlMgcHJlLW9yZGVyKSwgaWYgYW55LiAqL1xuICBzdGFnZShyb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiwgaWQ6IHN0cmluZyk6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkIHtcbiAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5vZihyb290KS5rZXlzKCkpIGlmIChub2RlLmlkID09PSBpZCkgcmV0dXJuIG5vZGU7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBUaGUgZGlzcGF0Y2hlciB3aG9zZSBjaGlsZC1jaGFpbiBob2xkcyBgbm9kZWAgaW4gYHJvb3RgJ3MgZ3JhcGggKGB1bmRlZmluZWRgIG9uIHRoZSBzcGluZSkuICovXG4gIGRpc3BhdGNoZXJPZihyb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiwgbm9kZTogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4pOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMub2Yocm9vdCkuZ2V0KG5vZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBvbmUtc2hvdCBlbnRyeSBmb3IgYGNoaWxkYCAoYSBtb3VudCBvbiB0aGUgcGF0aCwgb3IgdGhlIHBhdXNlZCBzdGFnZSlcbiAgICogaW4gYHJvb3RgJ3MgZ3JhcGg6IGByZXBsYWNlbWVudGAgKHRoZSBub2RlIHRoYXQgcnVucyDigJQgdGhlIG1vdW50IGl0c2VsZixcbiAgICogb3IgdGhlIHN0YW5kLWluKSB3aXRoIHdoYXQgcmFuIGFmdGVyIGBjaGlsZGAncyBjaGFpbiBvbiB0aGUgb3JpZ2luYWwgcnVuXG4gICAqIGF0dGFjaGVkIHdoZXJlIHRoYXQgY2hhaW4gZW5kcyDigJQgYHsgLi4uY2hpbGQsIG5leHQ6IGRpc3BhdGNoZXIubmV4dCB9YCBmb3JcbiAgICogYSBjaGFydCB0aGUgYnVpbGRlciBtYWRlOlxuICAgKlxuICAgKiAgIOKAoiBvbiB0aGUgbGV2ZWwncyBzcGluZTogbm90aGluZyB0byBhdHRhY2gg4oCUIHRoZSBzcGluZSBnb2VzIG9uIGJ5IGl0c2VsZjtcbiAgICogICDigKIgYSBERUNJREVSJ3Mgb3IgU0VMRUNUT1IncyBicmFuY2g6IHRoZSBkaXNwYXRjaGVyJ3MgYG5leHRgO1xuICAgKiAgIOKAoiBhIEZPUksgY2hpbGQ6IHRoZSBmb3JrJ3MgYG5leHRgIOKAlCBpdHMgam9pbi5cbiAgICpcbiAgICogUGFzdCBhIGRpc3BhdGNoZXIgd2l0aCBubyBgbmV4dGAsIHRoZSB3YWxrIGdvZXMgb24gT1VUV0FSRCB0byB0aGUgb25lXG4gICAqIGVuY2xvc2luZyBpdC4gSXQgc3RvcHMgYXQgYHN0b3BBdGAg4oCUIHRoZSBmYW4tb3V0IHdoZXJlIHNpYmxpbmdzIHN0aWxsXG4gICAqIHdhaXQsIHdob3NlIGpvaW4gbXVzdCBub3QgcnVuIHlldC4gTm90aGluZyB0byBhdHRhY2g6IGByZXBsYWNlbWVudGBcbiAgICogaXRzZWxmLlxuICAgKi9cbiAgZW50cnkoXG4gICAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gICAgY2hpbGQ6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICAgIHJlcGxhY2VtZW50OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgICBzdG9wQXQ6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkLFxuICApOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB7XG4gICAgcmV0dXJuIGFwcGVuZEF0Q2hhaW5FbmQocmVwbGFjZW1lbnQsIHRoaXMuYWZ0ZXIocm9vdCwgY2hpbGQsIHN0b3BBdCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoYXQgcnVucyBvbmNlIGBub2RlYCdzIGNoYWluIGVuZHM6IGl0cyBkaXNwYXRjaGVyJ3MgYG5leHRgIGNoYWluLCB0aGVuIOKAlFxuICAgKiB3aGVyZSBUSEFUIGVuZHMg4oCUIHRoZSBjb250aW51YXRpb24gb2YgdGhlIGRpc3BhdGNoZXIgZW5jbG9zaW5nIGl0LCBvdXR3YXJkLFxuICAgKiB1cCB0byBgc3RvcEF0YCAoZXhjbHVzaXZlKS4gYHVuZGVmaW5lZGAgb24gdGhlIHNwaW5lLlxuICAgKi9cbiAgcHJpdmF0ZSBhZnRlcihcbiAgICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgICBub2RlOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPixcbiAgICBzdG9wQXQ6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkLFxuICApOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXMuZGlzcGF0Y2hlck9mKHJvb3QsIG5vZGUpO1xuICAgIGlmIChkaXNwYXRjaGVyID09PSB1bmRlZmluZWQgfHwgZGlzcGF0Y2hlciA9PT0gc3RvcEF0KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IG91dGVyID0gdGhpcy5hZnRlcihyb290LCBkaXNwYXRjaGVyLCBzdG9wQXQpO1xuICAgIHJldHVybiBkaXNwYXRjaGVyLm5leHQgPyBhcHBlbmRBdENoYWluRW5kKGRpc3BhdGNoZXIubmV4dCwgb3V0ZXIpIDogb3V0ZXI7XG4gIH1cbn1cblxuLyoqXG4gKiBgc3RhcnRgJ3MgY2hhaW4gd2l0aCBgYWZ0ZXJgIGF0dGFjaGVkIHdoZXJlIGl0IGVuZHMg4oCUIHRoZSBjaGFpbidzIG5vZGVzXG4gKiBjb3BpZWQgb24gdGhlIHdheSAobmV2ZXIgcmVnaXN0ZXJlZCBhbnl3aGVyZTogaWRzIHN0aWxsIHJlc29sdmUgdG8gdGhlIHJlYWxcbiAqIG5vZGVzKS4gQSBjaGFpbiB0aGF0IGVuZHMgaW4gYSBsb29wIHN0dWIgKG9yIGxvb3BzIGJhY2sgb24gaXRzZWxmKSBpc1xuICogcmV0dXJuZWQgYXMgaXM6IGNvbnRyb2wgbGVhdmVzIGl0IHRocm91Z2ggdGhlIGxvb3AsIG5ldmVyIFwiYWZ0ZXJcIiBpdC5cbiAqL1xuZnVuY3Rpb24gYXBwZW5kQXRDaGFpbkVuZDxUT3V0LCBUU2NvcGU+KFxuICBzdGFydDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4sXG4gIGFmdGVyOiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB8IHVuZGVmaW5lZCxcbik6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHtcbiAgaWYgKGFmdGVyID09PSB1bmRlZmluZWQpIHJldHVybiBzdGFydDtcbiAgY29uc3QgY2hhaW46IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W10gPSBbXTtcbiAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8U3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4+KCk7XG4gIGZvciAobGV0IG5vZGU6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IHwgdW5kZWZpbmVkID0gc3RhcnQ7IG5vZGUgIT09IHVuZGVmaW5lZDsgbm9kZSA9IG5vZGUubmV4dCkge1xuICAgIGlmIChub2RlLmlzTG9vcFJlZiB8fCBzZWVuLmhhcyhub2RlKSkgcmV0dXJuIHN0YXJ0O1xuICAgIHNlZW4uYWRkKG5vZGUpO1xuICAgIGNoYWluLnB1c2gobm9kZSk7XG4gIH1cbiAgbGV0IG5leHQgPSBhZnRlcjtcbiAgZm9yIChsZXQgaSA9IGNoYWluLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBuZXh0ID0geyAuLi5jaGFpbltpXSwgbmV4dCB9O1xuICByZXR1cm4gbmV4dDtcbn1cblxuLy8g4pSA4pSAIFdhaXRpbmcgc2libGluZ3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBUaGUgc2libGluZyBwYXVzZXMgd2FpdGluZyBhdCBvbmUgbGV2ZWwsIGFuZCB0aGUgZmFuLW91dCB0aGV5IHdhaXQgaW4uICovXG5pbnRlcmZhY2UgTGV2ZWxRdWV1ZTxUT3V0LCBUU2NvcGU+IHtcbiAgcmVhZG9ubHkgZmFuT3V0OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgcmVhZG9ubHkgcGF1c2VzOiBRdWV1ZWRQYXVzZVtdO1xufVxuXG4vKipcbiAqIFBsYWNlIGBjaGVja3BvaW50LnBlbmRpbmdQYXVzZXNgIChkZWNvZGVkIOKAlCBgcGF1c2UvcmVjb3JkLnRzYCkgYW5kIHF1ZXVlIGVhY2ggYXQgdGhlXG4gKiBsZXZlbCBvZiBpdHMgZmFuLW91dDogdGhlIGRlcHRoIHdoZXJlIGl0cyBwYXRoIHBhcnRzIGZyb20gdGhlIHBhdXNlZFxuICogc3RhZ2Uncy4gVGhlcmUsIHRoZSBwYXVzZWQgc3RhZ2UncyBjaGlsZCAoYSBtb3VudCBvbiB0aGUgcGF0aCwgb3IgdGhlIHN0YWdlXG4gKiBpdHNlbGYpIGFuZCB0aGUgc2libGluZydzIG11c3QgYm90aCBoYW5nIG9mZiBPTkUgcGFyYWxsZWwgZGlzcGF0Y2hlciDigJQgYVxuICogZm9yayBvciBhIHNlbGVjdG9yIOKAlCBvciB0aGUgcmVjb3JkIGlzIG5vdCBhIHNpYmxpbmcgYW5kIHRoZSByZXN1bWUgaXNcbiAqIHJlZnVzZWQgcmF0aGVyIHRoYW4gYXNrZWQgYSBxdWVzdGlvbiB0aGUgY2hhcnQgY291bGQgbm90IGhhdmUgcmFpc2VkLlxuICovXG5mdW5jdGlvbiBxdWV1ZVNpYmxpbmdQYXVzZXM8VE91dCwgVFNjb3BlPihcbiAgcGVuZGluZzogcmVhZG9ubHkgUGVuZGluZ1BhdXNlW10gfCB1bmRlZmluZWQsXG4gIGF0OiB7XG4gICAgY2hhcnQ6IENoYXJ0SW5kZXg8VE91dCwgVFNjb3BlPjtcbiAgICBzdWJmbG93czogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB9PiB8IHVuZGVmaW5lZDtcbiAgICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgICBwYXRoOiByZWFkb25seSBzdHJpbmdbXTtcbiAgICBncmFwaHM6IHJlYWRvbmx5IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+W107XG4gICAgbW91bnRzOiByZWFkb25seSBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPltdO1xuICAgIHBhdXNlZDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfCB1bmRlZmluZWQ7XG4gIH0sXG4pOiBBcnJheTxMZXZlbFF1ZXVlPFRPdXQsIFRTY29wZT4gfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgcXVldWVzOiBBcnJheTxMZXZlbFF1ZXVlPFRPdXQsIFRTY29wZT4gfCB1bmRlZmluZWQ+ID0gW107XG4gIGlmIChwZW5kaW5nID09PSB1bmRlZmluZWQpIHJldHVybiBxdWV1ZXM7XG4gIC8vIFRoZSBjb2RlYydzIGNoZWNrIChgcGF1c2UvcmVjb3JkLnRzYCkg4oCUIGBwbGFuYCBpcyBhIHB1YmxpYyBkb29yIHRvbywgc28gaXRcbiAgLy8gbmV2ZXIgdGFrZXMgYSBzaWJsaW5nIHJlY29yZCB1bmNoZWNrZWQsIGhvd2V2ZXIgaXQgd2FzIGhhbmRlZCBvbmUuXG4gIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVQZW5kaW5nUGF1c2VzKHBlbmRpbmcpO1xuICBjb25zdCB7IGNoYXJ0LCBzdWJmbG93cywgcm9vdCwgcGF0aCwgZ3JhcGhzLCBtb3VudHMsIHBhdXNlZCB9ID0gYXQ7XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAvLyBFYWNoIHJlY29yZCdzIEZJRUxEUyBhcmUgY2hlY2tlZCBhYm92ZTsgaGVyZSBpdCBpcyBhc2tlZCB3aGV0aGVyIHRoZVxuICAvLyByZWNvcmQgZml0cyBUSElTIGNoYXJ0LlxuICBkZWNvZGVkLmZvckVhY2goKHBhdXNlLCBuKSA9PiB7XG4gICAgLy8gT25lIHJlY29yZCBwZXIgcGF1c2VkIHNpYmxpbmc6IGEgcmVwZWF0IHdvdWxkIGFzayB0aGUgc2FtZSBxdWVzdGlvbiB0d2ljZS5cbiAgICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShbcGF1c2Uuc3ViZmxvd1BhdGgsIHBhdXNlLnBhdXNlZFN0YWdlSWRdKTtcbiAgICBpZiAoc2Vlbi5oYXMoa2V5KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IHJlc3VtZTogY2hlY2twb2ludC5wZW5kaW5nUGF1c2VzWyR7bn1dICgnJHtwYXVzZS5wYXVzZWRTdGFnZUlkfScpIHJlcGVhdHMgYW4gZWFybGllciBlbnRyeS5gLFxuICAgICAgKTtcbiAgICB9XG4gICAgc2Vlbi5hZGQoa2V5KTtcbiAgICBsZXQgbGV2ZWwgPSAwO1xuICAgIHdoaWxlIChsZXZlbCA8IHBhdGgubGVuZ3RoICYmIGxldmVsIDwgcGF1c2Uuc3ViZmxvd1BhdGgubGVuZ3RoICYmIHBhdGhbbGV2ZWxdID09PSBwYXVzZS5zdWJmbG93UGF0aFtsZXZlbF0pIGxldmVsKys7XG4gICAgY29uc3QgZ3JhcGggPSBncmFwaHNbbGV2ZWxdO1xuICAgIGNvbnN0IG91cnMgPSBsZXZlbCA8IHBhdGgubGVuZ3RoID8gbW91bnRzW2xldmVsXSA6IHBhdXNlZDtcbiAgICBjb25zdCB0aGVpck1vdW50cyA9IGxldmVsIDwgcGF1c2Uuc3ViZmxvd1BhdGgubGVuZ3RoID8gY2hhcnQubW91bnRzT2YoZ3JhcGgsIHBhdXNlLnN1YmZsb3dQYXRoW2xldmVsXSkgOiBbXTtcbiAgICBjb25zdCB0aGVpcnMgPVxuICAgICAgbGV2ZWwgPCBwYXVzZS5zdWJmbG93UGF0aC5sZW5ndGhcbiAgICAgICAgPyB0aGVpck1vdW50cy5sZW5ndGggPT09IDFcbiAgICAgICAgICA/IHRoZWlyTW91bnRzWzBdXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgOiBjaGFydC5zdGFnZShncmFwaCwgcGF1c2UucGF1c2VkU3RhZ2VJZCk7XG4gICAgY29uc3QgZmFuT3V0ID0gb3VycyA/IGNoYXJ0LmRpc3BhdGNoZXJPZihncmFwaCwgb3VycykgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgaXNTaWJsaW5nID1cbiAgICAgIG91cnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgdGhlaXJzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG91cnMgIT09IHRoZWlycyAmJlxuICAgICAgZmFuT3V0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGNoYXJ0LmRpc3BhdGNoZXJPZihncmFwaCwgdGhlaXJzKSA9PT0gZmFuT3V0ICYmXG4gICAgICAhZmFuT3V0LmRlY2lkZXJGbiAmJlxuICAgICAgKHF1ZXVlc1tsZXZlbF0gPT09IHVuZGVmaW5lZCB8fCBxdWV1ZXNbbGV2ZWxdIS5mYW5PdXQgPT09IGZhbk91dCk7XG4gICAgaWYgKCFpc1NpYmxpbmcgfHwgIXdhbGtzVG9JdHNTdGFnZShjaGFydCwgc3ViZmxvd3MsIGdyYXBoLCBwYXVzZSwgbGV2ZWwpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgcmVzdW1lOiBjaGVja3BvaW50LnBlbmRpbmdQYXVzZXNbJHtufV0gKCcke3BhdXNlLnBhdXNlZFN0YWdlSWR9JykgaXMgbm90IGEgcGFyYWxsZWwgc2libGluZyBvZiBgICtcbiAgICAgICAgICBgdGhlIHBhdXNlZCBzdGFnZSAnJHtwYXVzZWQ/LmlkID8/ICc/J30nIGluIHRoaXMgY2hhcnQg4oCUIG5vIGZvcmsgb3Igc2VsZWN0b3IgcnVucyB0aGVtIGJvdGgsIG9yIGl0cyBgICtcbiAgICAgICAgICAncGF0aCBkb2VzIG5vdCBsZWFkIHRvIHRoYXQgc3RhZ2UuIFRoZSBjaGFydCBtYXkgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZSBjaGVja3BvaW50IHdhcyBjcmVhdGVkLicsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBsZWFmUm9vdCA9XG4gICAgICBwYXVzZS5zdWJmbG93UGF0aC5sZW5ndGggPT09IDAgPyByb290IDogb3duRW50cnkoc3ViZmxvd3MsIHBhdXNlLnN1YmZsb3dQYXRoW3BhdXNlLnN1YmZsb3dQYXRoLmxlbmd0aCAtIDFdKT8ucm9vdDtcbiAgICBjb25zdCBzdGFnZU5hbWUgPSAobGVhZlJvb3QgJiYgY2hhcnQuc3RhZ2UobGVhZlJvb3QsIHBhdXNlLnBhdXNlZFN0YWdlSWQpPy5uYW1lKSA/PyBwYXVzZS5wYXVzZWRTdGFnZUlkO1xuICAgIGNvbnN0IHF1ZXVlID0gKHF1ZXVlc1tsZXZlbF0gPz89IHsgZmFuT3V0OiBmYW5PdXQhLCBwYXVzZXM6IFtdIH0pO1xuICAgIHF1ZXVlLnBhdXNlcy5wdXNoKHsgcGF1c2UsIGxldmVsLCBzdGFnZU5hbWUgfSk7XG4gIH0pO1xuICByZXR1cm4gcXVldWVzO1xufVxuXG4vKipcbiAqIFdoZXRoZXIgYSB3YWl0aW5nIHNpYmxpbmcncyBXSE9MRSBwYXRoIGJlbG93IGl0cyBmYW4tb3V0IHdhbGtzIHRoaXMgY2hhcnQ6XG4gKiBldmVyeSBzZWdtZW50IHRoZSBvbmx5IG1vdW50IG9mIGl0cyBzdWJmbG93IGluIHRoZSBlbmNsb3NpbmcgZ3JhcGgsIGV2ZXJ5XG4gKiBzdWJmbG93IHJlZ2lzdGVyZWQsIGFuZCB0aGUgcGF1c2VkIHN0YWdlIGluIHRoZSBsYXN0IGdyYXBoIOKAlCBjaGVja2VkIGF0XG4gKiB0aGUgRklSU1QgcmVzdW1lLCBzbyBhIHRhbXBlcmVkIHJlY29yZCBpcyByZWZ1c2VkIHVwIGZyb250LCBub3Qgd2hlbiBpdHNcbiAqIHR1cm4gY29tZXMuXG4gKi9cbmZ1bmN0aW9uIHdhbGtzVG9JdHNTdGFnZTxUT3V0LCBUU2NvcGU+KFxuICBjaGFydDogQ2hhcnRJbmRleDxUT3V0LCBUU2NvcGU+LFxuICBzdWJmbG93czogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB9PiB8IHVuZGVmaW5lZCxcbiAgZmFuT3V0R3JhcGg6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+LFxuICBwYXVzZTogUGVuZGluZ1BhdXNlLFxuICBsZXZlbDogbnVtYmVyLFxuKTogYm9vbGVhbiB7XG4gIGxldCBncmFwaCA9IGZhbk91dEdyYXBoO1xuICBmb3IgKGxldCBpID0gbGV2ZWw7IGkgPCBwYXVzZS5zdWJmbG93UGF0aC5sZW5ndGg7IGkrKykge1xuICAgIGlmIChjaGFydC5tb3VudHNPZihncmFwaCwgcGF1c2Uuc3ViZmxvd1BhdGhbaV0pLmxlbmd0aCAhPT0gMSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSBvd25FbnRyeShzdWJmbG93cywgcGF1c2Uuc3ViZmxvd1BhdGhbaV0pO1xuICAgIGlmICghZGVmaW5pdGlvbikgcmV0dXJuIGZhbHNlO1xuICAgIGdyYXBoID0gZGVmaW5pdGlvbi5yb290O1xuICB9XG4gIHJldHVybiBjaGFydC5zdGFnZShncmFwaCwgcGF1c2UucGF1c2VkU3RhZ2VJZCkgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqIGByZWNvcmRba2V5XWAgb25seSB3aGVuIGl0IGlzIHRoZSByZWNvcmQncyBPV04gcHJvcGVydHkg4oCUIG5ldmVyIHRocm91Z2ggdGhlIHByb3RvdHlwZSBjaGFpbi4gKi9cbmZ1bmN0aW9uIG93bkVudHJ5PFQ+KHJlY29yZDogUmVjb3JkPHN0cmluZywgVD4gfCB1bmRlZmluZWQsIGtleTogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiByZWNvcmQgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlY29yZCwga2V5KSA/IHJlY29yZFtrZXldIDogdW5kZWZpbmVkO1xufVxuIl19
|