footprintjs 9.9.0 → 9.10.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 +9 -9
- package/CLAUDE.md +82 -753
- package/README.md +51 -20
- package/dist/esm/advanced.d.ts +52 -0
- package/dist/esm/detach.d.ts +59 -0
- package/dist/esm/index.d.ts +202 -0
- package/dist/esm/lib/builder/FlowChartBuilder.d.ts +475 -0
- package/dist/esm/lib/builder/FlowChartBuilder.js +4 -3
- package/dist/esm/lib/builder/index.d.ts +11 -0
- package/dist/esm/lib/builder/structure/StructureRecorder.d.ts +349 -0
- package/dist/esm/lib/builder/structure/StructureRecorderDispatcher.d.ts +77 -0
- package/dist/esm/lib/builder/typedFlowChart.d.ts +25 -0
- package/dist/esm/lib/builder/types.d.ts +154 -0
- package/dist/esm/lib/capture/envelope.d.ts +169 -0
- package/dist/esm/lib/capture/index.d.ts +16 -0
- package/dist/esm/lib/capture/policies.d.ts +42 -0
- package/dist/esm/lib/capture/summarize.d.ts +65 -0
- package/dist/esm/lib/contract/defineContract.d.ts +18 -0
- package/dist/esm/lib/contract/index.d.ts +14 -0
- package/dist/esm/lib/contract/openapi.d.ts +18 -0
- package/dist/esm/lib/contract/schema.d.ts +13 -0
- package/dist/esm/lib/contract/types.d.ts +105 -0
- package/dist/esm/lib/decide/decide.d.ts +47 -0
- package/dist/esm/lib/decide/evaluator.d.ts +39 -0
- package/dist/esm/lib/decide/evidence.d.ts +22 -0
- package/dist/esm/lib/decide/index.d.ts +12 -0
- package/dist/esm/lib/decide/types.d.ts +111 -0
- package/dist/esm/lib/detach/drivers/immediate.d.ts +39 -0
- package/dist/esm/lib/detach/drivers/microtaskBatch.d.ts +57 -0
- package/dist/esm/lib/detach/drivers/sendBeacon.d.ts +38 -0
- package/dist/esm/lib/detach/drivers/setImmediate.d.ts +32 -0
- package/dist/esm/lib/detach/drivers/setTimeout.d.ts +34 -0
- package/dist/esm/lib/detach/drivers/workerThread.d.ts +50 -0
- package/dist/esm/lib/detach/flush.d.ts +62 -0
- package/dist/esm/lib/detach/handle.d.ts +83 -0
- package/dist/esm/lib/detach/registry.d.ts +82 -0
- package/dist/esm/lib/detach/runChild.d.ts +41 -0
- package/dist/esm/lib/detach/spawn.d.ts +64 -0
- package/dist/esm/lib/detach/types.d.ts +200 -0
- package/dist/esm/lib/engine/errors/errorInfo.d.ts +46 -0
- package/dist/esm/lib/engine/errors/index.d.ts +2 -0
- package/dist/esm/lib/engine/graph/StageNode.d.ts +108 -0
- package/dist/esm/lib/engine/graph/index.d.ts +2 -0
- package/dist/esm/lib/engine/handlers/ChildrenExecutor.d.ts +32 -0
- package/dist/esm/lib/engine/handlers/ContinuationResolver.d.ts +95 -0
- package/dist/esm/lib/engine/handlers/DeciderHandler.d.ts +56 -0
- package/dist/esm/lib/engine/handlers/NodeResolver.d.ts +41 -0
- package/dist/esm/lib/engine/handlers/RuntimeStructureManager.d.ts +37 -0
- package/dist/esm/lib/engine/handlers/SelectorHandler.d.ts +27 -0
- package/dist/esm/lib/engine/handlers/StageRunner.d.ts +17 -0
- package/dist/esm/lib/engine/handlers/SubflowExecutor.d.ts +34 -0
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +8 -1
- package/dist/esm/lib/engine/handlers/SubflowInputMapper.d.ts +40 -0
- package/dist/esm/lib/engine/handlers/index.d.ts +13 -0
- package/dist/esm/lib/engine/handlers/types.d.ts +32 -0
- package/dist/esm/lib/engine/index.d.ts +28 -0
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +139 -0
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.d.ts +47 -0
- package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.d.ts +34 -0
- package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +27 -0
- package/dist/esm/lib/engine/narrative/index.d.ts +15 -0
- package/dist/esm/lib/engine/narrative/narrativeTypes.d.ts +196 -0
- package/dist/esm/lib/engine/narrative/recorders/AdaptiveNarrativeFlowRecorder.d.ts +25 -0
- package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.d.ts +69 -0
- package/dist/esm/lib/engine/narrative/recorders/MilestoneNarrativeFlowRecorder.d.ts +24 -0
- package/dist/esm/lib/engine/narrative/recorders/ProgressiveNarrativeFlowRecorder.d.ts +30 -0
- package/dist/esm/lib/engine/narrative/recorders/RLENarrativeFlowRecorder.d.ts +25 -0
- package/dist/esm/lib/engine/narrative/recorders/SeparateNarrativeFlowRecorder.d.ts +32 -0
- package/dist/esm/lib/engine/narrative/recorders/SilentNarrativeFlowRecorder.d.ts +25 -0
- package/dist/esm/lib/engine/narrative/recorders/WindowedNarrativeFlowRecorder.d.ts +29 -0
- package/dist/esm/lib/engine/narrative/recorders/index.d.ts +9 -0
- package/dist/esm/lib/engine/narrative/types.d.ts +384 -0
- package/dist/esm/lib/engine/runtimeStageId.d.ts +103 -0
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +376 -0
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +1 -1
- package/dist/esm/lib/engine/traversal/index.d.ts +2 -0
- package/dist/esm/lib/engine/types.d.ts +417 -0
- package/dist/esm/lib/engine/walkSubflowSpec.d.ts +95 -0
- package/dist/esm/lib/memory/DiagnosticCollector.d.ts +33 -0
- package/dist/esm/lib/memory/EventLog.d.ts +27 -0
- package/dist/esm/lib/memory/SharedMemory.d.ts +31 -0
- package/dist/esm/lib/memory/StageContext.d.ts +368 -0
- package/dist/esm/lib/memory/StageContext.js +44 -2
- package/dist/esm/lib/memory/TransactionBuffer.d.ts +183 -0
- package/dist/esm/lib/memory/TransactionBuffer.js +35 -13
- package/dist/esm/lib/memory/backtrack.d.ts +252 -0
- package/dist/esm/lib/memory/backtrack.js +79 -8
- package/dist/esm/lib/memory/commitLogUtils.d.ts +41 -0
- package/dist/esm/lib/memory/index.d.ts +14 -0
- package/dist/esm/lib/memory/pathOps.d.ts +54 -0
- package/dist/esm/lib/memory/types.d.ts +230 -0
- package/dist/esm/lib/memory/types.js +1 -1
- package/dist/esm/lib/memory/utils.d.ts +124 -0
- package/dist/esm/lib/observer-queue/deferredDispatcher.d.ts +169 -0
- package/dist/esm/lib/observer-queue/flushDriver.d.ts +124 -0
- package/dist/esm/lib/observer-queue/index.d.ts +25 -0
- package/dist/esm/lib/observer-queue/mergedQueue.d.ts +85 -0
- package/dist/esm/lib/observer-queue/ring.d.ts +99 -0
- package/dist/esm/lib/pause/index.d.ts +2 -0
- package/dist/esm/lib/pause/types.d.ts +238 -0
- package/dist/esm/lib/pause/types.js +2 -2
- package/dist/esm/lib/reactive/allowlist.d.ts +30 -0
- package/dist/esm/lib/reactive/arrayTraps.d.ts +23 -0
- package/dist/esm/lib/reactive/createTypedScope.d.ts +24 -0
- package/dist/esm/lib/reactive/index.d.ts +14 -0
- package/dist/esm/lib/reactive/pathBuilder.d.ts +31 -0
- package/dist/esm/lib/reactive/types.d.ts +159 -0
- package/dist/esm/lib/reactive/types.js +1 -1
- package/dist/esm/lib/recorder/BoundaryStateStore.d.ts +115 -0
- package/dist/esm/lib/recorder/CombinedRecorder.d.ts +215 -0
- package/dist/esm/lib/recorder/CombinedRecorder.js +2 -2
- package/dist/esm/lib/recorder/CommitRangeIndex.d.ts +147 -0
- package/dist/esm/lib/recorder/CompositeRecorder.d.ts +95 -0
- package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +133 -0
- package/dist/esm/lib/recorder/EmitRecorder.d.ts +135 -0
- package/dist/esm/lib/recorder/InOutRecorder.d.ts +176 -0
- package/dist/esm/lib/recorder/KeyedStore.d.ts +70 -0
- package/dist/esm/lib/recorder/QualityRecorder.d.ts +122 -0
- package/dist/esm/lib/recorder/RecorderOperation.d.ts +35 -0
- package/dist/esm/lib/recorder/SequenceStore.d.ts +120 -0
- package/dist/esm/lib/recorder/TopologyRecorder.d.ts +165 -0
- package/dist/esm/lib/recorder/TopologyRecorder.js +1 -1
- package/dist/esm/lib/recorder/index.d.ts +9 -0
- package/dist/esm/lib/recorder/invokeHook.d.ts +32 -0
- package/dist/esm/lib/recorder/qualityTrace.d.ts +54 -0
- package/dist/esm/lib/runner/ComposableRunner.d.ts +33 -0
- package/dist/esm/lib/runner/DeferredObserverTier.d.ts +204 -0
- package/dist/esm/lib/runner/ExecutionRuntime.d.ts +162 -0
- package/dist/esm/lib/runner/ExecutionRuntime.js +16 -1
- package/dist/esm/lib/runner/FlowChartExecutor.d.ts +660 -0
- package/dist/esm/lib/runner/FlowChartExecutor.js +35 -3
- package/dist/esm/lib/runner/RunContext.d.ts +42 -0
- package/dist/esm/lib/runner/RunnableChart.d.ts +57 -0
- package/dist/esm/lib/runner/checkpointSanitize.d.ts +44 -0
- package/dist/esm/lib/runner/getSubtreeSnapshot.d.ts +70 -0
- package/dist/esm/lib/runner/index.d.ts +11 -0
- package/dist/esm/lib/runner/runId.d.ts +45 -0
- package/dist/esm/lib/runner/validateInput.d.ts +11 -0
- package/dist/esm/lib/schema/detect.d.ts +32 -0
- package/dist/esm/lib/schema/errors.d.ts +36 -0
- package/dist/esm/lib/schema/index.d.ts +14 -0
- package/dist/esm/lib/schema/validate.d.ts +33 -0
- package/dist/esm/lib/scope/ScopeFacade.d.ts +250 -0
- package/dist/esm/lib/scope/detectCircular.d.ts +47 -0
- package/dist/esm/lib/scope/index.d.ts +16 -0
- package/dist/esm/lib/scope/protection/createProtectedScope.d.ts +9 -0
- package/dist/esm/lib/scope/protection/index.d.ts +2 -0
- package/dist/esm/lib/scope/protection/readonlyInput.d.ts +26 -0
- package/dist/esm/lib/scope/protection/types.d.ts +13 -0
- package/dist/esm/lib/scope/providers/baseStateCompatible.d.ts +24 -0
- package/dist/esm/lib/scope/providers/guards.d.ts +14 -0
- package/dist/esm/lib/scope/providers/index.d.ts +6 -0
- package/dist/esm/lib/scope/providers/providers.d.ts +8 -0
- package/dist/esm/lib/scope/providers/registry.d.ts +11 -0
- package/dist/esm/lib/scope/providers/resolve.d.ts +8 -0
- package/dist/esm/lib/scope/providers/types.d.ts +40 -0
- package/dist/esm/lib/scope/recorders/DebugRecorder.d.ts +63 -0
- package/dist/esm/lib/scope/recorders/MetricRecorder.d.ts +125 -0
- package/dist/esm/lib/scope/recorders/index.d.ts +5 -0
- package/dist/esm/lib/scope/recorders/summarizeValue.d.ts +7 -0
- package/dist/esm/lib/scope/recorders/summarizeValue.js +3 -3
- package/dist/esm/lib/scope/state/installResolvers.d.ts +4 -0
- package/dist/esm/lib/scope/state/zod/defineScopeFromZod.d.ts +9 -0
- package/dist/esm/lib/scope/state/zod/index.d.ts +5 -0
- package/dist/esm/lib/scope/state/zod/resolver.d.ts +5 -0
- package/dist/esm/lib/scope/state/zod/schema/builder.d.ts +12 -0
- package/dist/esm/lib/scope/state/zod/scopeFactory.d.ts +9 -0
- package/dist/esm/lib/scope/state/zod/utils/validateHelper.d.ts +25 -0
- package/dist/esm/lib/scope/types.d.ts +142 -0
- package/dist/esm/lib/slice/elementProvenance.d.ts +74 -0
- package/dist/esm/lib/slice/elementProvenance.js +181 -0
- package/dist/esm/lib/slice/index.d.ts +16 -0
- package/dist/esm/lib/slice/index.js +16 -0
- package/dist/esm/lib/slice/keysReadSources.d.ts +51 -0
- package/dist/esm/lib/slice/keysReadSources.js +96 -0
- package/dist/esm/lib/slice/serialize.d.ts +40 -0
- package/dist/esm/lib/slice/serialize.js +97 -0
- package/dist/esm/lib/slice/sliceForKey.d.ts +47 -0
- package/dist/esm/lib/slice/sliceForKey.js +72 -0
- package/dist/esm/lib/slice/types.d.ts +240 -0
- package/dist/esm/lib/slice/types.js +20 -0
- package/dist/esm/recorders.d.ts +70 -0
- package/dist/esm/trace.d.ts +57 -0
- package/dist/esm/trace.js +2 -1
- package/dist/esm/zod.d.ts +18 -0
- package/dist/lib/builder/FlowChartBuilder.js +4 -3
- package/dist/lib/engine/handlers/SubflowExecutor.js +8 -1
- package/dist/lib/engine/traversal/FlowchartTraverser.js +1 -1
- package/dist/lib/memory/StageContext.js +44 -2
- package/dist/lib/memory/TransactionBuffer.js +35 -13
- package/dist/lib/memory/backtrack.js +79 -8
- package/dist/lib/memory/types.js +1 -1
- package/dist/lib/pause/types.js +2 -2
- package/dist/lib/reactive/types.js +1 -1
- package/dist/lib/recorder/CombinedRecorder.js +2 -2
- package/dist/lib/recorder/TopologyRecorder.js +1 -1
- package/dist/lib/runner/ExecutionRuntime.js +16 -1
- package/dist/lib/runner/FlowChartExecutor.js +35 -3
- package/dist/lib/scope/recorders/summarizeValue.js +3 -3
- package/dist/lib/slice/elementProvenance.js +186 -0
- package/dist/lib/slice/index.js +28 -0
- package/dist/lib/slice/keysReadSources.js +102 -0
- package/dist/lib/slice/serialize.js +102 -0
- package/dist/lib/slice/sliceForKey.js +77 -0
- package/dist/lib/slice/types.js +21 -0
- package/dist/trace.js +12 -2
- package/dist/types/lib/builder/FlowChartBuilder.d.ts +25 -2
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +1 -1
- package/dist/types/lib/memory/StageContext.d.ts +28 -1
- package/dist/types/lib/memory/TransactionBuffer.d.ts +10 -1
- package/dist/types/lib/memory/backtrack.d.ts +26 -0
- package/dist/types/lib/memory/types.d.ts +26 -0
- package/dist/types/lib/pause/types.d.ts +4 -3
- package/dist/types/lib/reactive/types.d.ts +1 -1
- package/dist/types/lib/recorder/CombinedRecorder.d.ts +1 -1
- package/dist/types/lib/recorder/TopologyRecorder.d.ts +1 -1
- package/dist/types/lib/runner/ExecutionRuntime.d.ts +15 -1
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +34 -3
- package/dist/types/lib/scope/recorders/summarizeValue.d.ts +2 -2
- package/dist/types/lib/slice/elementProvenance.d.ts +74 -0
- package/dist/types/lib/slice/index.d.ts +16 -0
- package/dist/types/lib/slice/keysReadSources.d.ts +51 -0
- package/dist/types/lib/slice/serialize.d.ts +40 -0
- package/dist/types/lib/slice/sliceForKey.d.ts +47 -0
- package/dist/types/lib/slice/types.d.ts +240 -0
- package/dist/types/trace.d.ts +3 -0
- package/package.json +75 -21
|
@@ -163,6 +163,7 @@ function causalChain(commitLog, startId, getKeysRead, options) {
|
|
|
163
163
|
const maxNodes = options?.maxNodes ?? 100;
|
|
164
164
|
const controlDeps = options?.controlDeps;
|
|
165
165
|
const weigh = options?.weigh;
|
|
166
|
+
const perWrite = options?.edgeAttribution === 'per-write';
|
|
166
167
|
// RFC-003 D4 — truncation visibility. Set only when a limit actually
|
|
167
168
|
// cuts the slice; surfaced on the root as `truncated` so a consumer can
|
|
168
169
|
// never mistake a truncated slice for a complete one.
|
|
@@ -193,8 +194,45 @@ function causalChain(commitLog, startId, getKeysRead, options) {
|
|
|
193
194
|
...incompleteSourcesFragment(startCommit),
|
|
194
195
|
};
|
|
195
196
|
nodeMap.set(startId, root);
|
|
196
|
-
//
|
|
197
|
-
|
|
197
|
+
// ── #P1 per-write attribution machinery (inert under 'stage') ──────────
|
|
198
|
+
// expandedReads: per node, the reads already queued for expansion — late
|
|
199
|
+
// links via additional keys re-enqueue only the DELTA, so the slice grows
|
|
200
|
+
// monotonically toward the stage-level ceiling and terminates (each key
|
|
201
|
+
// expands at most once per node). fullyExpanded: nodes that fell back to
|
|
202
|
+
// stage level (no readKeys on a linking entry) — nothing left to add.
|
|
203
|
+
const expandedReads = new Map();
|
|
204
|
+
const fullyExpanded = new Set();
|
|
205
|
+
/**
|
|
206
|
+
* Resolve a node's expansion read-set for the given linking WRITTEN keys.
|
|
207
|
+
* Per-write mode with provenance present → union of the linking writes'
|
|
208
|
+
* temporal-prefix `readKeys`. Any linking entry WITHOUT `readKeys` (or no
|
|
209
|
+
* linkKeys at all) → honest stage-level fallback, flagged via the second
|
|
210
|
+
* tuple member so the caller marks the node fully expanded.
|
|
211
|
+
*/
|
|
212
|
+
function readsForLinks(commit, linkKeys) {
|
|
213
|
+
if (!perWrite || !linkKeys || linkKeys.length === 0) {
|
|
214
|
+
return [getKeysRead(commit.runtimeStageId), true];
|
|
215
|
+
}
|
|
216
|
+
const union = new Set();
|
|
217
|
+
for (const linkKey of linkKeys) {
|
|
218
|
+
const entry = commit.trace.find((t) => t.path === linkKey);
|
|
219
|
+
if (!entry || entry.readKeys === undefined) {
|
|
220
|
+
// Mixed/dial-off log — degrade THIS node to stage level, honestly.
|
|
221
|
+
return [getKeysRead(commit.runtimeStageId), true];
|
|
222
|
+
}
|
|
223
|
+
for (const rk of entry.readKeys)
|
|
224
|
+
union.add(rk);
|
|
225
|
+
}
|
|
226
|
+
return [[...union], false];
|
|
227
|
+
}
|
|
228
|
+
// BFS/worklist queue: [node, commitIdx, depth, keysToExpand]
|
|
229
|
+
const [rootReads, rootIsFull] = perWrite
|
|
230
|
+
? readsForLinks(startCommit, options?.rootLinkKeys)
|
|
231
|
+
: [getKeysRead(startId), true];
|
|
232
|
+
expandedReads.set(startId, new Set(rootReads));
|
|
233
|
+
if (rootIsFull)
|
|
234
|
+
fullyExpanded.add(startId);
|
|
235
|
+
const queue = [[root, startIdx, 0, rootReads]];
|
|
198
236
|
let visited = 1;
|
|
199
237
|
/**
|
|
200
238
|
* Link `node → parent` (creating + enqueueing the parent when new).
|
|
@@ -204,6 +242,14 @@ function causalChain(commitLog, startId, getKeysRead, options) {
|
|
|
204
242
|
*/
|
|
205
243
|
function linkParent(node, parentCommit, kind, key, depth) {
|
|
206
244
|
const parentId = parentCommit.runtimeStageId;
|
|
245
|
+
// #P1: the parent's expansion reads, resolved LAZILY (only for new nodes
|
|
246
|
+
// or per-write re-expansion — duplicate links under 'stage' pay nothing).
|
|
247
|
+
// Data links expand through the reads that fed the parent's write of
|
|
248
|
+
// `key`; control links expand the decider at stage level (a decision
|
|
249
|
+
// depends on everything it read).
|
|
250
|
+
const resolveLinkReads = () => kind === 'data'
|
|
251
|
+
? readsForLinks(parentCommit, key !== undefined ? [key] : undefined)
|
|
252
|
+
: [getKeysRead(parentId), true];
|
|
207
253
|
let parentNode = nodeMap.get(parentId);
|
|
208
254
|
if (!parentNode) {
|
|
209
255
|
// New node — create and enqueue (respecting the node budget)
|
|
@@ -229,7 +275,29 @@ function causalChain(commitLog, startId, getKeysRead, options) {
|
|
|
229
275
|
};
|
|
230
276
|
nodeMap.set(parentId, parentNode);
|
|
231
277
|
visited++;
|
|
232
|
-
|
|
278
|
+
const [linkReads, linkIsFull] = resolveLinkReads();
|
|
279
|
+
expandedReads.set(parentId, new Set(linkReads));
|
|
280
|
+
if (linkIsFull)
|
|
281
|
+
fullyExpanded.add(parentId);
|
|
282
|
+
queue.push([parentNode, parentIdx, depth + 1, linkReads]);
|
|
283
|
+
}
|
|
284
|
+
else if (perWrite && !fullyExpanded.has(parentId)) {
|
|
285
|
+
// #P1 worklist: an EXISTING node linked via another key may owe more
|
|
286
|
+
// expansion — enqueue only the reads not yet expanded (monotone; the
|
|
287
|
+
// node budget is untouched, no node is created). Re-expansion keeps
|
|
288
|
+
// the node's ORIGINAL depth so its parents get a consistent depth+1.
|
|
289
|
+
const [linkReads, linkIsFull] = resolveLinkReads();
|
|
290
|
+
const expanded = expandedReads.get(parentId);
|
|
291
|
+
const delta = linkReads.filter((k) => !expanded.has(k));
|
|
292
|
+
if (linkIsFull)
|
|
293
|
+
fullyExpanded.add(parentId);
|
|
294
|
+
if (delta.length > 0) {
|
|
295
|
+
for (const k of delta)
|
|
296
|
+
expanded.add(k);
|
|
297
|
+
const parentIdx = idxMap.get(parentId);
|
|
298
|
+
if (parentIdx !== undefined)
|
|
299
|
+
queue.push([parentNode, parentIdx, parentNode.depth, delta]);
|
|
300
|
+
}
|
|
233
301
|
}
|
|
234
302
|
// DAG merge: one parents[] entry per distinct parent (historical shape)
|
|
235
303
|
if (!node.parents.some((p) => p.runtimeStageId === parentId)) {
|
|
@@ -255,17 +323,20 @@ function causalChain(commitLog, startId, getKeysRead, options) {
|
|
|
255
323
|
}
|
|
256
324
|
}
|
|
257
325
|
while (queue.length > 0) {
|
|
258
|
-
const [node, commitIdx, depth] = queue.shift();
|
|
326
|
+
const [node, commitIdx, depth, keysToExpand] = queue.shift();
|
|
259
327
|
if (depth >= maxDepth) {
|
|
260
328
|
// D4: only a node that still HAD something to expand counts as a cut
|
|
261
329
|
// (a leaf at the horizon truncates nothing).
|
|
262
|
-
if (
|
|
330
|
+
if (keysToExpand.length > 0 || controlDeps?.(node.runtimeStageId) !== undefined) {
|
|
263
331
|
truncatedByDepth = true;
|
|
264
332
|
}
|
|
265
333
|
continue;
|
|
266
334
|
}
|
|
267
|
-
// Data edges: for each key read, find who wrote
|
|
268
|
-
|
|
335
|
+
// Data edges: for each key in this expansion's read-set, find who wrote
|
|
336
|
+
// it. Under 'stage' this is the node's full read-set (historical
|
|
337
|
+
// behavior); under 'per-write' it is the linking writes' temporal prefix
|
|
338
|
+
// (or a worklist delta on re-expansion).
|
|
339
|
+
const keysRead = keysToExpand;
|
|
269
340
|
for (const key of keysRead) {
|
|
270
341
|
const writer = findWriter(key, commitIdx);
|
|
271
342
|
if (!writer)
|
|
@@ -384,4 +455,4 @@ exports.formatCausalChain = formatCausalChain;
|
|
|
384
455
|
// ── Exported for testing (internal) ────────────────────────────────────
|
|
385
456
|
/** @internal Exposed for testing the strategy selection. */
|
|
386
457
|
exports._REVERSE_INDEX_THRESHOLD = REVERSE_INDEX_THRESHOLD;
|
|
387
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3RyYWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvYmFja3RyYWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0RHOzs7QUFFSCxrRUFBdUQ7QUFDdkQsMkRBQXFEO0FBMklyRCwwRUFBMEU7QUFFMUU7Ozs7R0FJRztBQUNILE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBUXBDLGtFQUFrRTtBQUNsRSxTQUFTLGdCQUFnQixDQUFDLFNBQXlCO0lBQ2pELE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFBLGtDQUFjLEVBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGtCQUFrQixDQUFDLFNBQXlCO0lBQ25ELGtFQUFrRTtJQUNsRSxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQztJQUMxQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzFDLEtBQUssTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDVCxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNULEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN6QixDQUFDO1lBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFD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QW1CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGlDQUFpQyxDQUMvRyxDQUFDO1FBQ0osQ0FBQztRQUVELEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FDRixNQUFNLEVBQ04sTUFBTSxHQUFHLENBQUMsRUFDVixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FDcEQsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVkLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksa0JBQWtCLENBQUM7YUFDeEcsTUFBTSxDQUFDLE9BQU8sQ0FBQzthQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNkLEtBQUssQ0FBQyxJQUFJLENBQUMsc0JBQXNCLE1BQU0sNENBQTRDLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFyREQsOENBcURDO0FBRUQsMEVBQTBFO0FBRTFFLDREQUE0RDtBQUMvQyxRQUFBLHdCQUF3QixHQUFHLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBiYWNrdHJhY2sudHMg4oCUIEJhY2t3YXJkIGNhdXNhbCBjaGFpbiBhbmFseXNpcyBvbiB0aGUgY29tbWl0IGxvZy5cbiAqXG4gKiBJbXBsZW1lbnRzICoqYmFja3dhcmQgcHJvZ3JhbSBzbGljaW5nKiogKFdlaXNlciAxOTg0LCB0aGluLXNsaWNlIHZhcmlhbnQpOlxuICogZ2l2ZW4gYSBzdGFydGluZyBleGVjdXRpb24gc3RlcCwgd2FsayBiYWNrd2FyZHMgdGhyb3VnaCByZWFk4oaSd3JpdGVcbiAqIGRlcGVuZGVuY2llcyB0byBidWlsZCB0aGUgY2F1c2FsIERBRyB0aGF0IHByb2R1Y2VkIHRoZSBkYXRhIGF0IHRoYXQgc3RlcC5cbiAqXG4gKiAjIyBBbGdvcml0aG1cbiAqXG4gKiBCRlMgb24gdGhlIGltcGxpY2l0IGRlcGVuZGVuY3kgZ3JhcGggd2hlcmUgZWRnZXMgcnVuIGZyb20gcmVhZGVyIOKGkiB3cml0ZXIuXG4gKlxuICogMS4gTG9jYXRlIHN0YXJ0SWQgaW4gY29tbWl0TG9nIOKGkiByb290IG5vZGVcbiAqIDIuIEdldCBrZXlzUmVhZCBmb3Igcm9vdCB2aWEgYGdldEtleXNSZWFkYCBjYWxsYmFja1xuICogMy4gRm9yIGVhY2gga2V5IHJlYWQsIGZpbmQgd2hvIGxhc3Qgd3JvdGUgaXQgYmVmb3JlIHRoaXMgc3RlcCDihpIgcGFyZW50IGNvbW1pdFxuICogNC4gQ3JlYXRlIHBhcmVudCBDYXVzYWxOb2RlLCBsaW5rIHRvIHJvb3QucGFyZW50c1xuICogNS4gRW5xdWV1ZSBwYXJlbnQuIFJlcGVhdCB1bnRpbCBxdWV1ZSBlbXB0eSBvciBsaW1pdHMgaGl0LlxuICpcbiAqIE91dHB1dCBpcyBhICoqREFHKiogKG5vdCBhIGxpbmtlZCBsaXN0KTogYSBzdGFnZSByZWFkaW5nIGBjcmVkaXRTY29yZWAgQU5EIGBkdGlgXG4gKiBmcm9tIGRpZmZlcmVudCB3cml0ZXJzIGhhcyB0d28gcGFyZW50cy5cbiAqXG4gKiAjIyBTdGFnZWQgT3B0aW1pemF0aW9uXG4gKlxuICogVHdvIHdyaXRlci1sb29rdXAgc3RyYXRlZ2llcywgY2hvc2VuIGF1dG9tYXRpY2FsbHkgYnkgY29tbWl0IGxvZyBzaXplOlxuICpcbiAqIHwgU3RyYXRlZ3kgfCBXaGVuIHwgQ29tcGxleGl0eSBwZXIgbG9va3VwIHxcbiAqIHwtLS0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCBMaW5lYXIgc2NhbiB8IE4g4omkIDI1NiB8IE8oTikg4oCUIHNpbXBsZSBiYWNrd2FyZCBzY2FuIHxcbiAqIHwgUmV2ZXJzZSBpbmRleCB8IE4gPiAyNTYgfCBPKEsgbG9nIE4pIOKAlCBwcmVidWlsdCBrZXnihpJbaW5kaWNlc10sIGJpbmFyeSBzZWFyY2ggfFxuICpcbiAqIFRoZSB0aHJlc2hvbGQgKDI1NikgaXMgY2hvc2VuIHNvIHRoZSBPKE4pIGJ1aWxkIGNvc3Qgb2YgdGhlIHJldmVyc2UgaW5kZXhcbiAqIGlzIGFtb3J0aXplZCBvdmVyIHRoZSBCRlMgdHJhdmVyc2FsLiBCZWxvdyAyNTYsIGxpbmVhciBzY2FuIHdpbnMgYmVjYXVzZVxuICogdGhlcmUncyBubyBpbmRleCBidWlsZCBvdmVyaGVhZC4gVGhlIGNvbnN1bWVyIG5ldmVyIHNlZXMgdGhpcyDigJQgYGNhdXNhbENoYWluKClgXG4gKiBwaWNrcyB0aGUgcmlnaHQgc3RyYXRlZ3kgaW50ZXJuYWxseSAobGlrZSBhIHF1ZXJ5IG9wdGltaXplciBjaG9vc2luZyBiZXR3ZWVuXG4gKiBzZXF1ZW50aWFsIHNjYW4gdnMgaW5kZXggc2NhbiBiYXNlZCBvbiB0YWJsZSBzaXplKS5cbiAqXG4gKiAjIyBDb21wbGV4aXR5XG4gKlxuICogLSAqKlNtYWxsIGxvZ3MgKE4g4omkIDI1Nik6KiogTyhWIMOXIEsgw5cgTikgdG90YWwuIFY9dmlzaXRlZCwgSz1hdmcga2V5cy9ub2RlLlxuICogLSAqKkxhcmdlIGxvZ3MgKE4gPiAyNTYpOioqIE8oTiDDlyBVKSBpbmRleCBidWlsZCArIE8oViDDlyBLIMOXIGxvZyBOKSBsb29rdXBzLlxuICogICBVID0gdW5pcXVlIGtleXMuIEFtb3J0aXplZCBvdmVyIGFsbCBCRlMgaG9wcy5cbiAqXG4gKiAjIyBSZWZlcmVuY2VzXG4gKlxuICogLSBXZWlzZXIsIE0uICgxOTg0KS4gXCJQcm9ncmFtIFNsaWNpbmcuXCIgSUVFRSBUU0UuXG4gKiAtIFNyaWRoYXJhbiwgTS4gZXQgYWwuICgyMDA3KS4gXCJUaGluIFNsaWNpbmcuXCIgUExESS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgY2F1c2FsQ2hhaW4sIGZsYXR0ZW5DYXVzYWxEQUcsIGZvcm1hdENhdXNhbENoYWluIH0gZnJvbSAnZm9vdHByaW50anMvdHJhY2UnO1xuICpcbiAqIGNvbnN0IGRhZyA9IGNhdXNhbENoYWluKGNvbW1pdExvZywgJ2RlY2lkZSMyJywgKGlkKSA9PiByZWNvcmRlci5nZXRLZXlzUmVhZChpZCkpO1xuICogY29uc3QgZmxhdCA9IGZsYXR0ZW5DYXVzYWxEQUcoZGFnKTsgICAgIC8vIEJGUy1vcmRlcmVkIGZsYXQgbGlzdFxuICogY29uc29sZS5sb2coZm9ybWF0Q2F1c2FsQ2hhaW4oZGFnKSk7ICAgICAvLyBodW1hbi1yZWFkYWJsZVxuICogYGBgXG4gKi9cblxuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnLi4vc2NvcGUvZGV0ZWN0Q2lyY3VsYXIuanMnO1xuaW1wb3J0IHsgZmluZExhc3RXcml0ZXIgfSBmcm9tICcuL2NvbW1pdExvZ1V0aWxzLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlLCBVbnRyYWNrZWRTb3VyY2UgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8g4pSA4pSAIFR5cGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogQSBzaW5nbGUgbm9kZSBpbiB0aGUgY2F1c2FsIERBRy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2F1c2FsTm9kZSB7XG4gIC8qKiBVbmlxdWUgZXhlY3V0aW9uIHN0ZXAgaWRlbnRpZmllci4gKi9cbiAgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFN0YWJsZSBzdGFnZSBpZGVudGlmaWVyLiAqL1xuICBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBzdGFnZSBuYW1lLiAqL1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgLyoqIEtleXMgdGhpcyBzdGFnZSB3cm90ZSAoZnJvbSBpdHMgQ29tbWl0QnVuZGxlLnRyYWNlKS4gKi9cbiAga2V5c1dyaXR0ZW46IHN0cmluZ1tdO1xuICAvKiogVGhlIGtleSB3aG9zZSByZWFk4oaSd3JpdGUgZGVwZW5kZW5jeSBsaW5rZWQgdGhpcyBub2RlIHRvIGl0cyBjaGlsZC4gRW1wdHkgZm9yIHRoZSByb290LiAqL1xuICBsaW5rZWRCeTogc3RyaW5nO1xuICAvKiogQkZTIGRlcHRoIGZyb20gdGhlIHN0YXJ0aW5nIG5vZGUgKDAgPSBzdGFydCkuICovXG4gIGRlcHRoOiBudW1iZXI7XG4gIC8qKlxuICAgKiBQYXJlbnQgbm9kZXMg4oCUIHN0YWdlcyB0aGlzIG5vZGUgZGVwZW5kcyBvbi4gREFHOiBtdWx0aXBsZSBwYXJlbnRzXG4gICAqIHBvc3NpYmxlLiBLRVBUIGZvciBjb21wYXRpYmlsaXR5OyB3aXRoIHRoZSBgY29udHJvbERlcHNgIG9wdGlvblxuICAgKiAoUkZDLTAwMyBEMykgZ292ZXJuaW5nIGRlY2lkZXJzIGFwcGVhciBoZXJlIHRvby4gRm9yIHR5cGVkL2tleWVkL1xuICAgKiB3ZWlnaHRlZCBkZXRhaWwgdXNlIHtAbGluayBwYXJlbnRFZGdlc30uXG4gICAqL1xuICBwYXJlbnRzOiBDYXVzYWxOb2RlW107XG4gIC8qKlxuICAgKiBSRkMtMDAzIEQzIOKAlCBvbmUgZWRnZSBwZXIgZGVwZW5kZW5jeSBMSU5LIChub3QgcGVyIHBhcmVudCk6IGEgbm9kZVxuICAgKiByZWFkaW5nIHR3byBrZXlzIGZyb20gdGhlIHNhbWUgd3JpdGVyIGhhcyBPTkUgZW50cnkgaW4ge0BsaW5rIHBhcmVudHN9XG4gICAqIGJ1dCBUV08gYCdkYXRhJ2AgZWRnZXMgaGVyZS4gQ29udHJvbCBkZXBlbmRlbmNpZXMgKHZpYSB0aGVcbiAgICogYGNvbnRyb2xEZXBzYCBvcHRpb24pIGFkZCBhIGAnY29udHJvbCdgIGVkZ2UgdG8gdGhlIGdvdmVybmluZyBkZWNpZGVyLlxuICAgKi9cbiAgcGFyZW50RWRnZXM6IENhdXNhbEVkZ2VbXTtcbiAgLyoqXG4gICAqIFJGQy0wMDMgRDIgaG9uZXN0eSBtYXJrZXIg4oCUIHN0YW1wZWQgZnJvbSB0aGUgc3RhZ2Unc1xuICAgKiBgQ29tbWl0QnVuZGxlLnVudHJhY2tlZFNvdXJjZXNgLiBQcmVzZW50IHdoZW4gdGhpcyBzdGFnZSBBTFNPIGNvbnN1bWVkXG4gICAqIHVudHJhY2tlZCByZWFkIHBhdGhzIChgYXJnc2AgLyBgZW52YCAvIHVuc2hhZG93ZWQgYHNpbGVudGAgcmVhZHMpOiB0aGVcbiAgICogYmFja3dhcmQgc2xpY2UgdGhyb3VnaCB0aGlzIG5vZGUgbWF5IGJlIGluY29tcGxldGUsIGJlY2F1c2UgdGhvc2UgcmVhZHNcbiAgICogcHJvZHVjZSBubyByZWFk4oaSd3JpdGUgZWRnZSB0byBmb2xsb3cuIGBmb3JtYXRDYXVzYWxDaGFpbmAgcmVuZGVycyB0aGlzXG4gICAqIGFzIGEgYOKaoCDigKYgc2xpY2UgbWF5IGJlIGluY29tcGxldGUgaGVyZWAgbGluZS4gQWJzZW50IHdoZW4gdGhlIHN0YWdlJ3NcbiAgICogcmVhZHMgd2VyZSBmdWxseSB0cmFja2VkLlxuICAgKi9cbiAgaW5jb21wbGV0ZVNvdXJjZXM/OiBSZWFkb25seUFycmF5PFVudHJhY2tlZFNvdXJjZT47XG4gIC8qKlxuICAgKiBSRkMtMDAzIEQ0IHRydW5jYXRpb24gdmlzaWJpbGl0eSDigJQgc2V0IG9uIHRoZSBST09UIG5vZGUgb25seSwgYW5kIG9ubHlcbiAgICogd2hlbiBhIGxpbWl0IGFjdHVhbGx5IGN1dCB0aGUgc2xpY2U6IGBieURlcHRoYCB3aGVuIGEgbm9kZSBhdCB0aGVcbiAgICogYG1heERlcHRoYCBob3Jpem9uIHN0aWxsIGhhZCBlZGdlcyB0byBleHBhbmQsIGBieU5vZGVzYCB3aGVuIHRoZVxuICAgKiBgbWF4Tm9kZXNgIGJ1ZGdldCBibG9ja2VkIGNyZWF0aW5nIGEgZGlzY292ZXJlZCBwYXJlbnQuIEFic2VudCB3aGVuIHRoZVxuICAgKiBzbGljZSBpcyBjb21wbGV0ZS4gRGV2IG1vZGUgKGBlbmFibGVEZXZNb2RlKClgKSBhbHNvIHdhcm5zIG9uXG4gICAqIHRydW5jYXRpb24sIGFuZCBgZm9ybWF0Q2F1c2FsQ2hhaW5gIGFwcGVuZHMgYSBg4pqgIHNsaWNlIHRydW5jYXRlZCDigKZgXG4gICAqIGxpbmUg4oCUIGEgY29uc3VtZXIgbXVzdCBuZXZlciBtaXN0YWtlIGEgdHJ1bmNhdGVkIHNsaWNlIGZvciBhIGZ1bGwgb25lLlxuICAgKi9cbiAgdHJ1bmNhdGVkPzogeyBieURlcHRoOiBib29sZWFuOyBieU5vZGVzOiBib29sZWFuIH07XG59XG5cbi8qKlxuICogUkZDLTAwMyBEMyDigJQgYSB0eXBlZCBkZXBlbmRlbmN5IGVkZ2UgZnJvbSBhIGNoaWxkIG5vZGUgdG8gb25lIHBhcmVudC5cbiAqXG4gKiAtIGBraW5kOiAnZGF0YSdgICAgIOKAlCByZWFk4oaSd3JpdGUgZGVwZW5kZW5jeTsgYGtleWAgaXMgdGhlIHN0YXRlIGtleS5cbiAqIC0gYGtpbmQ6ICdjb250cm9sJ2Ag4oCUIHRoZSBwYXJlbnQgaXMgdGhlIGRlY2lkZXIvc2VsZWN0b3Igd2hvc2UgZGVjaXNpb25cbiAqICAgYWxsb3dlZCB0aGUgY2hpbGQgdG8gcnVuOyBga2V5YCBpcyB0aGUgZGVjaWRlKCkgcnVsZSBsYWJlbCB3aGVuIHByZXNlbnQuXG4gKlxuICogYHdlaWdodGAgZGVmYXVsdHMgdG8gMS4wOyB0aGUgYHdlaWdoYCBob29rIChSRkMtMDAzIEQ0KSBjYW4gb3ZlcnJpZGUgaXQuXG4gKiBUaGUgZW5naW5lIGl0c2VsZiBORVZFUiBjb21wdXRlcyB3ZWlnaHRzIOKAlCBzZW1hbnRpY3MgYmVsb25nIHRvIHRoZVxuICogY29uc3VtZXItaW5qZWN0ZWQgd2VpZ2hlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXVzYWxFZGdlIHtcbiAgcGFyZW50OiBDYXVzYWxOb2RlO1xuICBraW5kOiAnZGF0YScgfCAnY29udHJvbCc7XG4gIGtleT86IHN0cmluZztcbiAgd2VpZ2h0OiBudW1iZXI7XG59XG5cbi8qKlxuICogUkZDLTAwMyBEMyDigJQgYSBjb250cm9sIGRlcGVuZGVuY3kgcmVzb2x2ZWQgZm9yIG9uZSBleGVjdXRpb24gc3RlcDpcbiAqIHdoaWNoIGRlY2lkZXIvc2VsZWN0b3IgZXhlY3V0aW9uIGFsbG93ZWQgdGhpcyBzdGFnZSB0byBydW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udHJvbERlcGVuZGVuY3kge1xuICAvKiogcnVudGltZVN0YWdlSWQgb2YgdGhlIGdvdmVybmluZyBkZWNpZGVyL3NlbGVjdG9yIGV4ZWN1dGlvbiBzdGVwLiAqL1xuICBkZWNpZGVySWQ6IHN0cmluZztcbiAgLyoqIFRoZSBkZWNpZGUoKSBydWxlIGxhYmVsIGZvciB0aGUgY2hvc2VuIGJyYW5jaCwgd2hlbiBwcmVzZW50LiAqL1xuICBsYWJlbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSRkMtMDAzIEQzIOKAlCBjYWxsYmFjayByZXNvbHZpbmcgdGhlIGdvdmVybmluZyBkZWNpZGVyIGZvciBhbiBleGVjdXRpb25cbiAqIHN0ZXAuIFJldHVybiBgdW5kZWZpbmVkYCB3aGVuIHRoZSBzdGVwIGlzIG5vdCBjb250cm9sLWRlcGVuZGVudCBvbiBhbnlcbiAqIHJlY29yZGVkIGRlY2lzaW9uLiBCdWlsZCBvbmUgd2l0aCBgY29udHJvbERlcFJlY29yZGVyKClgIGZyb21cbiAqIGBmb290cHJpbnRqcy90cmFjZWAsIG9yIHN1cHBseSB5b3VyIG93bi5cbiAqL1xuZXhwb3J0IHR5cGUgQ29udHJvbERlcExvb2t1cCA9IChydW50aW1lU3RhZ2VJZDogc3RyaW5nKSA9PiBDb250cm9sRGVwZW5kZW5jeSB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBSRkMtMDAzIEQ0IOKAlCBjb25zdW1lci1pbmplY3RlZCBlZGdlIHdlaWdoZXIuIENhbGxlZCBvbmNlIHBlciBjcmVhdGVkXG4gKiBlZGdlOyByZXR1cm4gYSB3ZWlnaHQsIG9yIGB1bmRlZmluZWRgIHRvIGtlZXAgdGhlIGRlZmF1bHQgMS4wLiBUaGVcbiAqIEVOR0lORSBuZXZlciBjb21wdXRlcyB3ZWlnaHRzICh6ZXJvIG5ldyBkZXBlbmRlbmNpZXMg4oCUIHNlbWFudGljcyBsaWtlXG4gKiBlbWJlZGRpbmcgc2ltaWxhcml0eSBvciBGREwgaW5mbHVlbmNlIGJlbG9uZyB0byBkb3duc3RyZWFtIGxpYnJhcmllcyxcbiAqIHRoZSBzYW1lIHBsdWctaW4gcGF0dGVybiBhcyBgTmFycmF0aXZlRm9ybWF0dGVyYCkuIFdlaWdodHMgcmVuZGVyIGluXG4gKiBgZm9ybWF0Q2F1c2FsQ2hhaW5gIGFzIGDihpAgdmlhIHN5c3RlbVByb21wdCAoMC4xOClgLlxuICovXG5leHBvcnQgdHlwZSBFZGdlV2VpZ2hlciA9IChcbiAgY2hpbGQ6IENhdXNhbE5vZGUsXG4gIHBhcmVudDogQ2F1c2FsTm9kZSxcbiAga2V5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGtpbmQ6ICdkYXRhJyB8ICdjb250cm9sJyxcbikgPT4gbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4vKiogT3B0aW9ucyBmb3IgY2F1c2FsQ2hhaW4oKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2F1c2FsQ2hhaW5PcHRpb25zIHtcbiAgLyoqIE1heGltdW0gQkZTIGRlcHRoIChkZWZhdWx0OiAyMCkuIFByZXZlbnRzIHJ1bmF3YXkgdHJhdmVyc2FsLiAqL1xuICBtYXhEZXB0aD86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gdG90YWwgbm9kZXMgdG8gdmlzaXQgKGRlZmF1bHQ6IDEwMCkuIEhhcmQgY2FwIGZvciBzYWZldHkuICovXG4gIG1heE5vZGVzPzogbnVtYmVyO1xuICAvKipcbiAgICogUkZDLTAwMyBEMyDigJQgY29udHJvbC1kZXBlbmRlbmNlIGxvb2t1cC4gV2hlbiBwcm92aWRlZCwgZXhwYW5kaW5nIGEgbm9kZVxuICAgKiBBTFNPIGxpbmtzIGEgYCdjb250cm9sJ2AgZWRnZSB0byBpdHMgZ292ZXJuaW5nIGRlY2lkZXIgKGxhYmVsZWQgYnkgdGhlXG4gICAqIGRlY2lkZSgpIHJ1bGUgbGFiZWwgd2hlbiBwcmVzZW50KTsgdGhlIGRlY2lkZXIgbm9kZSB0aGVuIGV4cGFuZHNcbiAgICogbm9ybWFsbHkgdGhyb3VnaCBpdHMgb3duIGRhdGEgcmVhZHMsIHNvIGNoYWlucyBsaWtlXG4gICAqIGBzdGF0dXMg4oaQIFtjb250cm9sXSBDbGFzc2lmeVJpc2sg4oaQIFtkYXRhOiBjcmVkaXRTY29yZV0gUHVsbEJ1cmVhdWBcbiAgICogcmVzb2x2ZSBlbmQtdG8tZW5kLiBXaXRob3V0IHRoaXMgb3B0aW9uIGJlaGF2aW9yIGlzIHVuY2hhbmdlZC5cbiAgICovXG4gIGNvbnRyb2xEZXBzPzogQ29udHJvbERlcExvb2t1cDtcbiAgLyoqXG4gICAqIFJGQy0wMDMgRDQg4oCUIGVkZ2Ugd2VpZ2hlci4gU3RhbXBzIGBDYXVzYWxFZGdlLndlaWdodGAgYXQgZWRnZSBjcmVhdGlvbjtcbiAgICogYHVuZGVmaW5lZGAgKG9yIG5vIHdlaWdoZXIpIOKGkiAxLjAuIFNlZSB7QGxpbmsgRWRnZVdlaWdoZXJ9LlxuICAgKi9cbiAgd2VpZ2g/OiBFZGdlV2VpZ2hlcjtcbn1cblxuLyoqXG4gKiBDYWxsYmFjayB0aGF0IHJldHVybnMgdGhlIGtleXMgYSBzdGFnZSByZWFkIGR1cmluZyBleGVjdXRpb24uXG4gKiBUaGUgYmFja3RyYWNrZXIgY2FsbHMgdGhpcyBmb3IgZWFjaCB2aXNpdGVkIG5vZGUgdG8gZGV0ZXJtaW5lXG4gKiB3aGljaCByZWFk4oaSd3JpdGUgZWRnZXMgdG8gZm9sbG93LlxuICpcbiAqIEltcGxlbWVudG9yczogUXVhbGl0eVJlY29yZGVyIHRyYWNrcyBrZXlzUmVhZCBwZXIgc3RlcCxcbiAqIG9yIGJ1aWxkIGEgTWFwPHJ1bnRpbWVTdGFnZUlkLCBzdHJpbmdbXT4gZnJvbSBTY29wZVJlY29yZGVyLm9uUmVhZCBldmVudHMuXG4gKi9cbmV4cG9ydCB0eXBlIEtleXNSZWFkTG9va3VwID0gKHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpID0+IHN0cmluZ1tdO1xuXG4vLyDilIDilIAgU3RhZ2VkIG9wdGltaXphdGlvbjogd3JpdGVyIGxvb2t1cCBzdHJhdGVnaWVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFRocmVzaG9sZCBmb3Igc3dpdGNoaW5nIGZyb20gbGluZWFyIHNjYW4gdG8gcmV2ZXJzZSBpbmRleC5cbiAqIEJlbG93IHRoaXMsIE8oTikgc2NhbiBpcyBmYXN0ZXIgKG5vIGluZGV4IGJ1aWxkIGNvc3QpLlxuICogQWJvdmUgdGhpcywgTyhsb2cgTikgYmluYXJ5IHNlYXJjaCB3aW5zLlxuICovXG5jb25zdCBSRVZFUlNFX0lOREVYX1RIUkVTSE9MRCA9IDI1NjtcblxuLyoqXG4gKiBXcml0ZXIgbG9va3VwIGZ1bmN0aW9uIHNpZ25hdHVyZS5cbiAqIFJldHVybnMgdGhlIENvbW1pdEJ1bmRsZSB0aGF0IGxhc3Qgd3JvdGUgYGtleWAgYmVmb3JlIHBvc2l0aW9uIGBiZWZvcmVJZHhgLlxuICovXG50eXBlIFdyaXRlckxvb2t1cCA9IChrZXk6IHN0cmluZywgYmVmb3JlSWR4OiBudW1iZXIpID0+IENvbW1pdEJ1bmRsZSB8IHVuZGVmaW5lZDtcblxuLyoqIFN0cmF0ZWd5IDE6IExpbmVhciBzY2FuIOKAlCBPKE4pIHBlciBsb29rdXAsIHplcm8gc2V0dXAgY29zdC4gKi9cbmZ1bmN0aW9uIGxpbmVhclNjYW5Mb29rdXAoY29tbWl0TG9nOiBDb21taXRCdW5kbGVbXSk6IFdyaXRlckxvb2t1cCB7XG4gIHJldHVybiAoa2V5LCBiZWZvcmVJZHgpID0+IGZpbmRMYXN0V3JpdGVyKGNvbW1pdExvZywga2V5LCBiZWZvcmVJZHgpO1xufVxuXG4vKipcbiAqIFN0cmF0ZWd5IDI6IFJldmVyc2UgaW5kZXgg4oCUIE8oTsOXVSkgYnVpbGQsIE8obG9nIE4pIHBlciBsb29rdXAuXG4gKiBCdWlsZHMgYSBNYXA8a2V5LCBzb3J0ZWRJbmRpY2VzW10+IHdoZXJlIGluZGljZXMgYXJlIGNvbW1pdCBwb3NpdGlvbnNcbiAqIHRoYXQgd3JvdGUgdGhhdCBrZXkuIExvb2t1cCB1c2VzIGJpbmFyeSBzZWFyY2ggdG8gZmluZCB0aGUgbGFzdCB3cml0ZXJcbiAqIGJlZm9yZSBhIGdpdmVuIHBvc2l0aW9uLlxuICovXG5mdW5jdGlvbiByZXZlcnNlSW5kZXhMb29rdXAoY29tbWl0TG9nOiBDb21taXRCdW5kbGVbXSk6IFdyaXRlckxvb2t1cCB7XG4gIC8vIEJ1aWxkOiBrZXkg4oaSIHNvcnRlZCBhcnJheSBvZiBjb21taXQgaW5kaWNlcyB0aGF0IHdyb3RlIHRoaXMga2V5XG4gIGNvbnN0IGluZGV4ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcltdPigpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbW1pdExvZy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAoY29uc3QgdCBvZiBjb21taXRMb2dbaV0udHJhY2UpIHtcbiAgICAgIGxldCBhcnIgPSBpbmRleC5nZXQodC5wYXRoKTtcbiAgICAgIGlmICghYXJyKSB7XG4gICAgICAgIGFyciA9IFtdO1xuICAgICAgICBpbmRleC5zZXQodC5wYXRoLCBhcnIpO1xuICAgICAgfVxuICAgICAgYXJyLnB1c2goaSk7IC8vIGFscmVhZHkgc29ydGVkICh3ZSBpdGVyYXRlIGluIG9yZGVyKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoa2V5OiBzdHJpbmcsIGJlZm9yZUlkeDogbnVtYmVyKTogQ29tbWl0QnVuZGxlIHwgdW5kZWZpbmVkID0+IHtcbiAgICBjb25zdCBpbmRpY2VzID0gaW5kZXguZ2V0KGtleSk7XG4gICAgaWYgKCFpbmRpY2VzIHx8IGluZGljZXMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgLy8gQmluYXJ5IHNlYXJjaDogZmluZCBsYXJnZXN0IGluZGV4IDwgYmVmb3JlSWR4XG4gICAgbGV0IGxvID0gMDtcbiAgICBsZXQgaGkgPSBpbmRpY2VzLmxlbmd0aCAtIDE7XG4gICAgbGV0IHJlc3VsdCA9IC0xO1xuXG4gICAgd2hpbGUgKGxvIDw9IGhpKSB7XG4gICAgICBjb25zdCBtaWQgPSAobG8gKyBoaSkgPj4+IDE7XG4gICAgICBpZiAoaW5kaWNlc1ttaWRdIDwgYmVmb3JlSWR4KSB7XG4gICAgICAgIHJlc3VsdCA9IGluZGljZXNbbWlkXTtcbiAgICAgICAgbG8gPSBtaWQgKyAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGkgPSBtaWQgLSAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQgPj0gMCA/IGNvbW1pdExvZ1tyZXN1bHRdIDogdW5kZWZpbmVkO1xuICB9O1xufVxuXG4vKipcbiAqIFN0YWdlZCBvcHRpbWl6YXRpb246IHBpY2sgdGhlIHJpZ2h0IHdyaXRlci1sb29rdXAgc3RyYXRlZ3kgYmFzZWQgb24gZGF0YSBzaXplLlxuICpcbiAqIExpa2UgYSBkYXRhYmFzZSBxdWVyeSBvcHRpbWl6ZXIgY2hvb3NpbmcgYmV0d2VlbiBzZXF1ZW50aWFsIHNjYW4gYW5kIGluZGV4IHNjYW46XG4gKlxuICogLSAqKlNtYWxsIGxvZyAo4omkIDI1Nik6KiogTGluZWFyIHNjYW4gd2lucy4gWmVybyBzZXR1cCBjb3N0LCBnb29kIGNhY2hlIGxvY2FsaXR5LlxuICogICBUaGUgb3ZlcmhlYWQgb2YgYnVpbGRpbmcgYSByZXZlcnNlIGluZGV4IGlzbid0IHdvcnRoIGl0IGZvciBzaG9ydCBsb2dzLlxuICpcbiAqIC0gKipMYXJnZSBsb2cgKD4gMjU2KToqKiBSZXZlcnNlIGluZGV4IHdpbnMuIE8oTsOXVSkgdXBmcm9udCBidWlsZCBjb3N0IGlzIGFtb3J0aXplZFxuICogICBhY3Jvc3MgYWxsIEJGUyBob3BzLiBFYWNoIGxvb2t1cCBiZWNvbWVzIE8obG9nIE4pIHZpYSBiaW5hcnkgc2VhcmNoIGluc3RlYWQgb2YgTyhOKS5cbiAqICAgRm9yIGFuIGFnZW50IGxvb3Agd2l0aCA1MDAgaXRlcmF0aW9ucyBhbmQgNSBrZXlzIHBlciBob3AsIHRoaXMgaXMgNTAww5c1w5dsb2coNTAwKeKJiDIySyBvcHNcbiAqICAgdnMgNTAww5c1w5c1MDA9MS4yNU0gb3BzIHdpdGggbGluZWFyIHNjYW4uXG4gKlxuICogVGhlIGNhbGxlciBuZXZlciBzZWVzIHRoaXMg4oCUIGBjYXVzYWxDaGFpbigpYCBwaWNrcyBhdXRvbWF0aWNhbGx5LlxuICovXG5mdW5jdGlvbiBjcmVhdGVXcml0ZXJMb29rdXAoY29tbWl0TG9nOiBDb21taXRCdW5kbGVbXSk6IFdyaXRlckxvb2t1cCB7XG4gIGlmIChjb21taXRMb2cubGVuZ3RoIDw9IFJFVkVSU0VfSU5ERVhfVEhSRVNIT0xEKSB7XG4gICAgcmV0dXJuIGxpbmVhclNjYW5Mb29rdXAoY29tbWl0TG9nKTtcbiAgfVxuICByZXR1cm4gcmV2ZXJzZUluZGV4TG9va3VwKGNvbW1pdExvZyk7XG59XG5cbi8vIOKUgOKUgCBDb3JlIGFsZ29yaXRobSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBSRkMtMDAzIEQyOiB0aGUgYGluY29tcGxldGVTb3VyY2VzYCBub2RlIGZyYWdtZW50IGZvciBhIGNvbW1pdCDigJQgYHt9YFxuICogd2hlbiB0aGUgc3RhZ2UgY29uc3VtZWQgbm8gdW50cmFja2VkIHJlYWQgcGF0aHMsIGtlZXBpbmcgdGhlIGZpZWxkXG4gKiBBQlNFTlQgKG5vdCBlbXB0eS1hcnJheS12YWx1ZWQpIGZvciBmdWxseS10cmFja2VkIHN0YWdlcy5cbiAqL1xuZnVuY3Rpb24gaW5jb21wbGV0ZVNvdXJjZXNGcmFnbWVudChjb21taXQ6IENvbW1pdEJ1bmRsZSk6IHsgaW5jb21wbGV0ZVNvdXJjZXM/OiBSZWFkb25seUFycmF5PFVudHJhY2tlZFNvdXJjZT4gfSB7XG4gIGlmICghY29tbWl0LnVudHJhY2tlZFNvdXJjZXMgfHwgY29tbWl0LnVudHJhY2tlZFNvdXJjZXMubGVuZ3RoID09PSAwKSByZXR1cm4ge307XG4gIHJldHVybiB7IGluY29tcGxldGVTb3VyY2VzOiBjb21taXQudW50cmFja2VkU291cmNlcyB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBjYXVzYWwgREFHIHJvb3RlZCBhdCBgc3RhcnRJZGAgYnkgd2Fsa2luZyBiYWNrd2FyZHNcbiAqIHRocm91Z2ggcmVhZOKGkndyaXRlIGRlcGVuZGVuY2llcyBpbiB0aGUgY29tbWl0IGxvZy5cbiAqXG4gKiBBdXRvbWF0aWNhbGx5IHNlbGVjdHMgdGhlIG9wdGltYWwgd3JpdGVyIGxvb2t1cCBzdHJhdGVneTpcbiAqIC0gTGluZWFyIHNjYW4gZm9yIHNtYWxsIGxvZ3MgKOKJpCAyNTYgY29tbWl0cylcbiAqIC0gUmV2ZXJzZSBpbmRleCB3aXRoIGJpbmFyeSBzZWFyY2ggZm9yIGxhcmdlIGxvZ3MgKD4gMjU2IGNvbW1pdHMpXG4gKlxuICogUHJvZHVjZXMgYSBEQUcgKG5vdCBhIHRyZWUpOiBpZiB0d28gY2hpbGRyZW4gYm90aCByZWFkIGZyb20gdGhlIHNhbWVcbiAqIHBhcmVudCwgdGhlIHBhcmVudCBub2RlIGlzIHNoYXJlZCAoZGVkdXBlZCBieSBydW50aW1lU3RhZ2VJZCkuXG4gKlxuICogQHBhcmFtIGNvbW1pdExvZyAgIE9yZGVyZWQgY29tbWl0IGJ1bmRsZXMgZnJvbSBleGVjdXRvci5nZXRTbmFwc2hvdCgpLmNvbW1pdExvZ1xuICogQHBhcmFtIHN0YXJ0SWQgICAgIHJ1bnRpbWVTdGFnZUlkIHRvIHN0YXJ0IGJhY2t0cmFja2luZyBmcm9tXG4gKiBAcGFyYW0gZ2V0S2V5c1JlYWQgQ2FsbGJhY2sgcmV0dXJuaW5nIGtleXMgcmVhZCBieSBhIGdpdmVuIGV4ZWN1dGlvbiBzdGVwXG4gKiBAcGFyYW0gb3B0aW9ucyAgICAgRGVwdGggYW5kIG5vZGUgbGltaXRzXG4gKiBAcmV0dXJucyBSb290IENhdXNhbE5vZGUgd2l0aCAucGFyZW50cyBmb3JtaW5nIHRoZSBEQUcsIG9yIHVuZGVmaW5lZCBpZiBzdGFydElkIG5vdCBmb3VuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2F1c2FsQ2hhaW4oXG4gIGNvbW1pdExvZzogQ29tbWl0QnVuZGxlW10sXG4gIHN0YXJ0SWQ6IHN0cmluZyxcbiAgZ2V0S2V5c1JlYWQ6IEtleXNSZWFkTG9va3VwLFxuICBvcHRpb25zPzogQ2F1c2FsQ2hhaW5PcHRpb25zLFxuKTogQ2F1c2FsTm9kZSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG1heERlcHRoID0gb3B0aW9ucz8ubWF4RGVwdGggPz8gMjA7XG4gIGNvbnN0IG1heE5vZGVzID0gb3B0aW9ucz8ubWF4Tm9kZXMgPz8gMTAwO1xuICBjb25zdCBjb250cm9sRGVwcyA9IG9wdGlvbnM/LmNvbnRyb2xEZXBzO1xuICBjb25zdCB3ZWlnaCA9IG9wdGlvbnM/LndlaWdoO1xuXG4gIC8vIFJGQy0wMDMgRDQg4oCUIHRydW5jYXRpb24gdmlzaWJpbGl0eS4gU2V0IG9ubHkgd2hlbiBhIGxpbWl0IGFjdHVhbGx5XG4gIC8vIGN1dHMgdGhlIHNsaWNlOyBzdXJmYWNlZCBvbiB0aGUgcm9vdCBhcyBgdHJ1bmNhdGVkYCBzbyBhIGNvbnN1bWVyIGNhblxuICAvLyBuZXZlciBtaXN0YWtlIGEgdHJ1bmNhdGVkIHNsaWNlIGZvciBhIGNvbXBsZXRlIG9uZS5cbiAgbGV0IHRydW5jYXRlZEJ5RGVwdGggPSBmYWxzZTtcbiAgbGV0IHRydW5jYXRlZEJ5Tm9kZXMgPSBmYWxzZTtcblxuICAvLyBCdWlsZCBwb3NpdGlvbiBpbmRleDogcnVudGltZVN0YWdlSWQg4oaSIGFycmF5IHBvc2l0aW9uIChPKG4pIG9uY2UpXG4gIGNvbnN0IGlkeE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29tbWl0TG9nLmxlbmd0aDsgaSsrKSB7XG4gICAgaWR4TWFwLnNldChjb21taXRMb2dbaV0ucnVudGltZVN0YWdlSWQsIGkpO1xuICB9XG5cbiAgY29uc3Qgc3RhcnRJZHggPSBpZHhNYXAuZ2V0KHN0YXJ0SWQpO1xuICBpZiAoc3RhcnRJZHggPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBzdGFydENvbW1pdCA9IGNvbW1pdExvZ1tzdGFydElkeF07XG5cbiAgLy8gUGljayB3cml0ZXIgbG9va3VwIHN0cmF0ZWd5IGJhc2VkIG9uIGxvZyBzaXplXG4gIGNvbnN0IGZpbmRXcml0ZXIgPSBjcmVhdGVXcml0ZXJMb29rdXAoY29tbWl0TG9nKTtcblxuICAvLyBOb2RlIGRlZHVwIG1hcDogcnVudGltZVN0YWdlSWQg4oaSIENhdXNhbE5vZGUgKGVuc3VyZXMgREFHLCBub3QgdHJlZSlcbiAgY29uc3Qgbm9kZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBDYXVzYWxOb2RlPigpO1xuXG4gIGNvbnN0IHJvb3Q6IENhdXNhbE5vZGUgPSB7XG4gICAgcnVudGltZVN0YWdlSWQ6IHN0YXJ0SWQsXG4gICAgc3RhZ2VJZDogc3RhcnRDb21taXQuc3RhZ2VJZCxcbiAgICBzdGFnZU5hbWU6IHN0YXJ0Q29tbWl0LnN0YWdlLFxuICAgIGtleXNXcml0dGVuOiBzdGFydENvbW1pdC50cmFjZS5tYXAoKHQpID0+IHQucGF0aCksXG4gICAgbGlua2VkQnk6ICcnLFxuICAgIGRlcHRoOiAwLFxuICAgIHBhcmVudHM6IFtdLFxuICAgIHBhcmVudEVkZ2VzOiBbXSxcbiAgICAuLi5pbmNvbXBsZXRlU291cmNlc0ZyYWdtZW50KHN0YXJ0Q29tbWl0KSxcbiAgfTtcbiAgbm9kZU1hcC5zZXQoc3RhcnRJZCwgcm9vdCk7XG5cbiAgLy8gQkZTIHF1ZXVlOiBbbm9kZSwgY29tbWl0SWR4LCBkZXB0aF1cbiAgY29uc3QgcXVldWU6IEFycmF5PFtDYXVzYWxOb2RlLCBudW1iZXIsIG51bWJlcl0+ID0gW1tyb290LCBzdGFydElkeCwgMF1dO1xuICBsZXQgdmlzaXRlZCA9IDE7XG5cbiAgLyoqXG4gICAqIExpbmsgYG5vZGUg4oaSIHBhcmVudGAgKGNyZWF0aW5nICsgZW5xdWV1ZWluZyB0aGUgcGFyZW50IHdoZW4gbmV3KS5cbiAgICogU2hhcmVkIGJ5IGRhdGEtZWRnZSBleHBhbnNpb24gKHJlYWTihpJ3cml0ZSkgYW5kIGNvbnRyb2wtZWRnZSBleHBhbnNpb25cbiAgICogKEQzKS4gT25lIENhdXNhbEVkZ2UgcGVyIGRpc3RpbmN0IChwYXJlbnQsIGtpbmQsIGtleSkgbGluazsgYHBhcmVudHNgXG4gICAqIGtlZXBzIGl0cyBoaXN0b3JpY2FsIG9uZS1lbnRyeS1wZXItcGFyZW50IGRlZHVwLlxuICAgKi9cbiAgZnVuY3Rpb24gbGlua1BhcmVudChcbiAgICBub2RlOiBDYXVzYWxOb2RlLFxuICAgIHBhcmVudENvbW1pdDogQ29tbWl0QnVuZGxlLFxuICAgIGtpbmQ6ICdkYXRhJyB8ICdjb250cm9sJyxcbiAgICBrZXk6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBkZXB0aDogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBwYXJlbnRJZCA9IHBhcmVudENvbW1pdC5ydW50aW1lU3RhZ2VJZDtcblxuICAgIGxldCBwYXJlbnROb2RlID0gbm9kZU1hcC5nZXQocGFyZW50SWQpO1xuICAgIGlmICghcGFyZW50Tm9kZSkge1xuICAgICAgLy8gTmV3IG5vZGUg4oCUIGNyZWF0ZSBhbmQgZW5xdWV1ZSAocmVzcGVjdGluZyB0aGUgbm9kZSBidWRnZXQpXG4gICAgICBpZiAodmlzaXRlZCA+PSBtYXhOb2Rlcykge1xuICAgICAgICB0cnVuY2F0ZWRCeU5vZGVzID0gdHJ1ZTsgLy8gRDQ6IGEgZGlzY292ZXJlZCBwYXJlbnQgd2FzIGRyb3BwZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJlbnRJZHggPSBpZHhNYXAuZ2V0KHBhcmVudElkKTtcbiAgICAgIGlmIChwYXJlbnRJZHggPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuXG4gICAgICBwYXJlbnROb2RlID0ge1xuICAgICAgICBydW50aW1lU3RhZ2VJZDogcGFyZW50SWQsXG4gICAgICAgIHN0YWdlSWQ6IHBhcmVudENvbW1pdC5zdGFnZUlkLFxuICAgICAgICBzdGFnZU5hbWU6IHBhcmVudENvbW1pdC5zdGFnZSxcbiAgICAgICAga2V5c1dyaXR0ZW46IHBhcmVudENvbW1pdC50cmFjZS5tYXAoKHQpID0+IHQucGF0aCksXG4gICAgICAgIC8vIGxpbmtlZEJ5IHN0YXlzIGEgREFUQS1rZXkgY29uY2VwdCAoYmFjay1jb21wYXQpIOKAlCBjb250cm9sLWxpbmtlZFxuICAgICAgICAvLyBub2RlcyBjYXJyeSB0aGVpciBsYWJlbCBvbiB0aGUgZWRnZSBpbnN0ZWFkLlxuICAgICAgICBsaW5rZWRCeToga2luZCA9PT0gJ2RhdGEnID8ga2V5ID8/ICcnIDogJycsXG4gICAgICAgIGRlcHRoOiBkZXB0aCArIDEsXG4gICAgICAgIHBhcmVudHM6IFtdLFxuICAgICAgICBwYXJlbnRFZGdlczogW10sXG4gICAgICAgIC4uLmluY29tcGxldGVTb3VyY2VzRnJhZ21lbnQocGFyZW50Q29tbWl0KSxcbiAgICAgIH07XG4gICAgICBub2RlTWFwLnNldChwYXJlbnRJZCwgcGFyZW50Tm9kZSk7XG4gICAgICB2aXNpdGVkKys7XG4gICAgICBxdWV1ZS5wdXNoKFtwYXJlbnROb2RlLCBwYXJlbnRJZHgsIGRlcHRoICsgMV0pO1xuICAgIH1cblxuICAgIC8vIERBRyBtZXJnZTogb25lIHBhcmVudHNbXSBlbnRyeSBwZXIgZGlzdGluY3QgcGFyZW50IChoaXN0b3JpY2FsIHNoYXBlKVxuICAgIGlmICghbm9kZS5wYXJlbnRzLnNvbWUoKHApID0+IHAucnVudGltZVN0YWdlSWQgPT09IHBhcmVudElkKSkge1xuICAgICAgbm9kZS5wYXJlbnRzLnB1c2gocGFyZW50Tm9kZSk7XG4gICAgfVxuICAgIC8vIE9uZSBlZGdlIHBlciBkaXN0aW5jdCAocGFyZW50LCBraW5kLCBrZXkpIGxpbmsuIFRoZSB3ZWlnaGVyIChENClcbiAgICAvLyBzdGFtcHMgdGhlIHdlaWdodCBhdCBjcmVhdGlvbjsgYHVuZGVmaW5lZGAg4oaSIDEuMCDigJQgdGhlIGVuZ2luZSBuZXZlclxuICAgIC8vIGNvbXB1dGVzIHdlaWdodHMgaXRzZWxmLlxuICAgIGlmICghbm9kZS5wYXJlbnRFZGdlcy5zb21lKChlKSA9PiBlLnBhcmVudC5ydW50aW1lU3RhZ2VJZCA9PT0gcGFyZW50SWQgJiYgZS5raW5kID09PSBraW5kICYmIGUua2V5ID09PSBrZXkpKSB7XG4gICAgICAvLyBFcnJvciBpc29sYXRpb24gKHJldmlldyBmaW5kaW5nKTogYSBjb25zdW1lciB3ZWlnaGVyIHRoYXQgdGhyb3dzXG4gICAgICAvLyBtdXN0IGRlZ3JhZGUgdG8gdGhlIGRlZmF1bHQgd2VpZ2h0LCBuZXZlciBjcmFzaCB0aGUgc2xpY2Ug4oCUIHRoZVxuICAgICAgLy8gc2FtZSBjb250cmFjdCBldmVyeSBvdGhlciBjb25zdW1lciBjYWxsYmFjayBpbiB0aGUgbGlicmFyeSBnZXRzLlxuICAgICAgbGV0IHdlaWdodCA9IDEuMDtcbiAgICAgIGlmICh3ZWlnaCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHdlaWdodCA9IHdlaWdoKG5vZGUsIHBhcmVudE5vZGUsIGtleSwga2luZCkgPz8gMS4wO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvKiB3ZWlnaGVyIHRocmV3IOKAlCBrZWVwIDEuMCwgdGhlIHNsaWNlIHN0YXlzIHVzYWJsZSAqL1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBub2RlLnBhcmVudEVkZ2VzLnB1c2goeyBwYXJlbnQ6IHBhcmVudE5vZGUsIGtpbmQsIGtleSwgd2VpZ2h0IH0pO1xuICAgIH1cbiAgfVxuXG4gIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgW25vZGUsIGNvbW1pdElkeCwgZGVwdGhdID0gcXVldWUuc2hpZnQoKSE7XG5cbiAgICBpZiAoZGVwdGggPj0gbWF4RGVwdGgpIHtcbiAgICAgIC8vIEQ0OiBvbmx5IGEgbm9kZSB0aGF0IHN0aWxsIEhBRCBzb21ldGhpbmcgdG8gZXhwYW5kIGNvdW50cyBhcyBhIGN1dFxuICAgICAgLy8gKGEgbGVhZiBhdCB0aGUgaG9yaXpvbiB0cnVuY2F0ZXMgbm90aGluZykuXG4gICAgICBpZiAoZ2V0S2V5c1JlYWQobm9kZS5ydW50aW1lU3RhZ2VJZCkubGVuZ3RoID4gMCB8fCBjb250cm9sRGVwcz8uKG5vZGUucnVudGltZVN0YWdlSWQpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdHJ1bmNhdGVkQnlEZXB0aCA9IHRydWU7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBEYXRhIGVkZ2VzOiBmb3IgZWFjaCBrZXkgcmVhZCwgZmluZCB3aG8gd3JvdGUgaXRcbiAgICBjb25zdCBrZXlzUmVhZCA9IGdldEtleXNSZWFkKG5vZGUucnVudGltZVN0YWdlSWQpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXNSZWFkKSB7XG4gICAgICBjb25zdCB3cml0ZXIgPSBmaW5kV3JpdGVyKGtleSwgY29tbWl0SWR4KTtcbiAgICAgIGlmICghd3JpdGVyKSBjb250aW51ZTtcbiAgICAgIGxpbmtQYXJlbnQobm9kZSwgd3JpdGVyLCAnZGF0YScsIGtleSwgZGVwdGgpO1xuICAgIH1cblxuICAgIC8vIENvbnRyb2wgZWRnZSAoUkZDLTAwMyBEMyk6IGxpbmsgdGhlIGdvdmVybmluZyBkZWNpZGVyLCBsYWJlbGVkIGJ5IHRoZVxuICAgIC8vIGRlY2lkZSgpIHJ1bGUgbGFiZWwgd2hlbiBwcmVzZW50LiBUaGUgZGVjaWRlciBub2RlIHRoZW4gZXhwYW5kc1xuICAgIC8vIG5vcm1hbGx5IHRocm91Z2ggaXRzIG93biBkYXRhIHJlYWRzIChhbmQgaXRzIG93biBjb250cm9sIHBhcmVudCkuXG4gICAgaWYgKGNvbnRyb2xEZXBzKSB7XG4gICAgICBjb25zdCBkZXAgPSBjb250cm9sRGVwcyhub2RlLnJ1bnRpbWVTdGFnZUlkKTtcbiAgICAgIGlmIChkZXApIHtcbiAgICAgICAgY29uc3QgZGVjaWRlcklkeCA9IGlkeE1hcC5nZXQoZGVwLmRlY2lkZXJJZCk7XG4gICAgICAgIGlmIChkZWNpZGVySWR4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsaW5rUGFyZW50KG5vZGUsIGNvbW1pdExvZ1tkZWNpZGVySWR4XSwgJ2NvbnRyb2wnLCBkZXAubGFiZWwsIGRlcHRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJGQy0wMDMgRDQg4oCUIHRydW5jYXRpb24gdmlzaWJpbGl0eSBvbiB0aGUgcm9vdCAoYWJzZW50IHdoZW4gY29tcGxldGUpLlxuICBpZiAodHJ1bmNhdGVkQnlEZXB0aCB8fCB0cnVuY2F0ZWRCeU5vZGVzKSB7XG4gICAgcm9vdC50cnVuY2F0ZWQgPSB7IGJ5RGVwdGg6IHRydW5jYXRlZEJ5RGVwdGgsIGJ5Tm9kZXM6IHRydW5jYXRlZEJ5Tm9kZXMgfTtcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbZm9vdHByaW50XSBjYXVzYWxDaGFpbignJHtzdGFydElkfScpIHRydW5jYXRlZCBieSBgICtcbiAgICAgICAgICBgJHtbdHJ1bmNhdGVkQnlEZXB0aCAmJiBgbWF4RGVwdGggKCR7bWF4RGVwdGh9KWAsIHRydW5jYXRlZEJ5Tm9kZXMgJiYgYG1heE5vZGVzICgke21heE5vZGVzfSlgXVxuICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgLmpvaW4oJyArICcpfSDigJQgdGhlIHNsaWNlIGlzIGluY29tcGxldGUuIFJhaXNlIHRoZSBsaW1pdHMgb3IgbmFycm93IGtleXNSZWFkLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByb290O1xufVxuXG4vLyDilIDilIAgVXRpbGl0aWVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIEZsYXR0ZW4gdGhlIGNhdXNhbCBEQUcgaW50byBhIEJGUy1vcmRlcmVkIGxpc3Qgb2Ygbm9kZXMuXG4gKiBFYWNoIG5vZGUgYXBwZWFycyBleGFjdGx5IG9uY2UgKGZpcnN0IG9jY3VycmVuY2UgYnkgQkZTIG9yZGVyKS5cbiAqIFVzZWZ1bCBmb3IgbGluZWFyIGRpc3BsYXkgb3IgaXRlcmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbkNhdXNhbERBRyhyb290OiBDYXVzYWxOb2RlKTogQ2F1c2FsTm9kZVtdIHtcbiAgY29uc3QgcmVzdWx0OiBDYXVzYWxOb2RlW10gPSBbXTtcbiAgY29uc3QgdmlzaXRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBxdWV1ZTogQ2F1c2FsTm9kZVtdID0gW3Jvb3RdO1xuXG4gIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgbm9kZSA9IHF1ZXVlLnNoaWZ0KCkhO1xuICAgIGlmICh2aXNpdGVkLmhhcyhub2RlLnJ1bnRpbWVTdGFnZUlkKSkgY29udGludWU7XG4gICAgdmlzaXRlZC5hZGQobm9kZS5ydW50aW1lU3RhZ2VJZCk7XG4gICAgcmVzdWx0LnB1c2gobm9kZSk7XG5cbiAgICBmb3IgKGNvbnN0IHBhcmVudCBvZiBub2RlLnBhcmVudHMpIHtcbiAgICAgIGlmICghdmlzaXRlZC5oYXMocGFyZW50LnJ1bnRpbWVTdGFnZUlkKSkge1xuICAgICAgICBxdWV1ZS5wdXNoKHBhcmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBGb3JtYXQgYSBjYXVzYWwgREFHIGFzIGh1bWFuLXJlYWRhYmxlIGluZGVudGVkIHRleHQuXG4gKiBTaG93cyB0aGUgZGVwZW5kZW5jeSBjaGFpbiB3aXRoIGRlcHRoIGluZGVudGF0aW9uIGFuZCBsaW5rZWQtYnkga2V5cy5cbiAqXG4gKiBSRkMtMDAzIEQyOiBub2RlcyB0aGF0IGNvbnN1bWVkIHVudHJhY2tlZCByZWFkIHBhdGhzIHJlbmRlciBhbiBleHRyYVxuICogYOKaoCBhbHNvIGNvbnN1bWVkIOKApiDigJQgc2xpY2UgbWF5IGJlIGluY29tcGxldGUgaGVyZWAgbGluZSwgc28gYSBjb25zdW1lclxuICogKGh1bWFuIG9yIExMTSkgZGVidWdnaW5nIGZyb20gdGhlIHNsaWNlIGlzIFRPTEQgd2hlbiBpdCBpcyBpbmNvbXBsZXRlLlxuICpcbiAqIFJGQy0wMDMgRDM6IGNvbnRyb2wgZWRnZXMgcmVuZGVyIGFzIGDihpAgW2NvbnRyb2w6IDxydWxlIGxhYmVsPl1gXG4gKiAobGFiZWwgb21pdHRlZCB3aGVuIHRoZSBkZWNpc2lvbiBjYXJyaWVkIG5vbmUpLiBEYXRhIHJlbmRlcmluZyBpc1xuICogYnl0ZS1pZGVudGljYWwgdG8gdGhlIHByZS1EMyBvdXRwdXQg4oCUIGDihpAgdmlhIDxrZXk+YCBmcm9tIHRoZSBub2RlJ3NcbiAqIGRpc2NvdmVyeS10aW1lIGBsaW5rZWRCeWAuXG4gKlxuICogUkZDLTAwMyBENDogZWRnZSB3ZWlnaHRzIGZyb20gdGhlIGB3ZWlnaGAgaG9vayByZW5kZXIgYXMgYSBzdWZmaXgg4oCUXG4gKiBg4oaQIHZpYSBzeXN0ZW1Qcm9tcHQgKDAuMTgpYCDigJQgb25seSB3aGVuIOKJoCAxLjAsIHNvIHVud2VpZ2h0ZWQgb3V0cHV0IGlzXG4gKiB1bmNoYW5nZWQuIEEgdHJ1bmNhdGVkIHNsaWNlIChyb290LnRydW5jYXRlZCkgYXBwZW5kcyBhIGZpbmFsXG4gKiBg4pqgIHNsaWNlIHRydW5jYXRlZCDigKZgIGxpbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRDYXVzYWxDaGFpbihyb290OiBDYXVzYWxOb2RlKTogc3RyaW5nIHtcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBjb25zdCB3ZWlnaHRTdWZmaXggPSAoZWRnZTogQ2F1c2FsRWRnZSB8IHVuZGVmaW5lZCk6IHN0cmluZyA9PlxuICAgIGVkZ2UgIT09IHVuZGVmaW5lZCAmJiBlZGdlLndlaWdodCAhPT0gMSA/IGAgKCR7ZWRnZS53ZWlnaHR9KWAgOiAnJztcblxuICBmdW5jdGlvbiB3YWxrKG5vZGU6IENhdXNhbE5vZGUsIGluZGVudDogbnVtYmVyLCBlZGdlc0Zyb21DaGlsZD86IENhdXNhbEVkZ2VbXSk6IHZvaWQge1xuICAgIGlmICh2aXNpdGVkLmhhcyhub2RlLnJ1bnRpbWVTdGFnZUlkKSkge1xuICAgICAgbGluZXMucHVzaChgJHsnICAnLnJlcGVhdChpbmRlbnQpfeKGsyAke25vZGUucnVudGltZVN0YWdlSWR9IChzZWUgYWJvdmUpYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZpc2l0ZWQuYWRkKG5vZGUucnVudGltZVN0YWdlSWQpO1xuXG4gICAgY29uc3QgbGlua1BhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChub2RlLmxpbmtlZEJ5KSB7XG4gICAgICBjb25zdCBkYXRhRWRnZSA9IGVkZ2VzRnJvbUNoaWxkPy5maW5kKChlKSA9PiBlLmtpbmQgPT09ICdkYXRhJyk7XG4gICAgICBsaW5rUGFydHMucHVzaChgdmlhICR7bm9kZS5saW5rZWRCeX0ke3dlaWdodFN1ZmZpeChkYXRhRWRnZSl9YCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbnRyb2xFZGdlID0gZWRnZXNGcm9tQ2hpbGQ/LmZpbmQoKGUpID0+IGUua2luZCA9PT0gJ2NvbnRyb2wnKTtcbiAgICBpZiAoY29udHJvbEVkZ2UpIHtcbiAgICAgIGxpbmtQYXJ0cy5wdXNoKGBbY29udHJvbCR7Y29udHJvbEVkZ2Uua2V5ID8gYDogJHtjb250cm9sRWRnZS5rZXl9YCA6ICcnfV0ke3dlaWdodFN1ZmZpeChjb250cm9sRWRnZSl9YCk7XG4gICAgfVxuICAgIGNvbnN0IGxpbmsgPSBsaW5rUGFydHMubGVuZ3RoID4gMCA/IGAg4oaQICR7bGlua1BhcnRzLmpvaW4oJyDihpAgJyl9YCA6ICcnO1xuXG4gICAgY29uc3Qgd3JpdGVzID0gbm9kZS5rZXlzV3JpdHRlbi5sZW5ndGggPiAwID8gYCBbd3JvdGU6ICR7bm9kZS5rZXlzV3JpdHRlbi5qb2luKCcsICcpfV1gIDogJyc7XG4gICAgbGluZXMucHVzaChgJHsnICAnLnJlcGVhdChpbmRlbnQpfSR7bm9kZS5zdGFnZU5hbWV9ICgke25vZGUucnVudGltZVN0YWdlSWR9KSR7bGlua30ke3dyaXRlc31gKTtcblxuICAgIGlmIChub2RlLmluY29tcGxldGVTb3VyY2VzICYmIG5vZGUuaW5jb21wbGV0ZVNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgbGluZXMucHVzaChcbiAgICAgICAgYCR7JyAgJy5yZXBlYXQoaW5kZW50ICsgMSl94pqgIGFsc28gY29uc3VtZWQgJHtub2RlLmluY29tcGxldGVTb3VyY2VzLmpvaW4oJy8nKX0g4oCUIHNsaWNlIG1heSBiZSBpbmNvbXBsZXRlIGhlcmVgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHBhcmVudCBvZiBub2RlLnBhcmVudHMpIHtcbiAgICAgIHdhbGsoXG4gICAgICAgIHBhcmVudCxcbiAgICAgICAgaW5kZW50ICsgMSxcbiAgICAgICAgbm9kZS5wYXJlbnRFZGdlcy5maWx0ZXIoKGUpID0+IGUucGFyZW50ID09PSBwYXJlbnQpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICB3YWxrKHJvb3QsIDApO1xuXG4gIGlmIChyb290LnRydW5jYXRlZCkge1xuICAgIGNvbnN0IGNhdXNlcyA9IFtyb290LnRydW5jYXRlZC5ieURlcHRoICYmICdtYXhEZXB0aCByZWFjaGVkJywgcm9vdC50cnVuY2F0ZWQuYnlOb2RlcyAmJiAnbWF4Tm9kZXMgcmVhY2hlZCddXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAuam9pbignLCAnKTtcbiAgICBsaW5lcy5wdXNoKGDimqAgc2xpY2UgdHJ1bmNhdGVkICgke2NhdXNlc30pIOKAlCBvbGRlciBjYXVzZXMgZXhpc3QgYmV5b25kIHRoaXMgaG9yaXpvbmApO1xuICB9XG5cbiAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG4vLyDilIDilIAgRXhwb3J0ZWQgZm9yIHRlc3RpbmcgKGludGVybmFsKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIEBpbnRlcm5hbCBFeHBvc2VkIGZvciB0ZXN0aW5nIHRoZSBzdHJhdGVneSBzZWxlY3Rpb24uICovXG5leHBvcnQgY29uc3QgX1JFVkVSU0VfSU5ERVhfVEhSRVNIT0xEID0gUkVWRVJTRV9JTkRFWF9USFJFU0hPTEQ7XG4iXX0=
|
|
458
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja3RyYWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvYmFja3RyYWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0RHOzs7QUFFSCxrRUFBdUQ7QUFDdkQsMkRBQXFEO0FBcUtyRCwwRUFBMEU7QUFFMUU7Ozs7R0FJRztBQUNILE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBUXBDLGtFQUFrRTtBQUNsRSxTQUFTLGdCQUFnQixDQUFDLFNBQXlCO0lBQ2pELE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFBLGtDQUFjLEVBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUN2RSxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGtCQUFrQixDQUFDLFNBQXlCO0lBQ25ELGtFQUFrRTtJQUNsRSxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQztJQUMxQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQzFDLEtBQUssTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25DLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDVCxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNULEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN6QixDQUFDO1lBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFD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O0lBRUQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVkLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksa0JBQWtCLENBQUM7YUFDeEcsTUFBTSxDQUFDLE9BQU8sQ0FBQzthQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNkLEtBQUssQ0FBQyxJQUFJLENBQUMsc0JBQXNCLE1BQU0sNENBQTRDLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFyREQsOENBcURDO0FBRUQsMEVBQTBFO0FBRTFFLDREQUE0RDtBQUMvQyxRQUFBLHdCQUF3QixHQUFHLHVCQUF1QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBiYWNrdHJhY2sudHMg4oCUIEJhY2t3YXJkIGNhdXNhbCBjaGFpbiBhbmFseXNpcyBvbiB0aGUgY29tbWl0IGxvZy5cbiAqXG4gKiBJbXBsZW1lbnRzICoqYmFja3dhcmQgcHJvZ3JhbSBzbGljaW5nKiogKFdlaXNlciAxOTg0LCB0aGluLXNsaWNlIHZhcmlhbnQpOlxuICogZ2l2ZW4gYSBzdGFydGluZyBleGVjdXRpb24gc3RlcCwgd2FsayBiYWNrd2FyZHMgdGhyb3VnaCByZWFk4oaSd3JpdGVcbiAqIGRlcGVuZGVuY2llcyB0byBidWlsZCB0aGUgY2F1c2FsIERBRyB0aGF0IHByb2R1Y2VkIHRoZSBkYXRhIGF0IHRoYXQgc3RlcC5cbiAqXG4gKiAjIyBBbGdvcml0aG1cbiAqXG4gKiBCRlMgb24gdGhlIGltcGxpY2l0IGRlcGVuZGVuY3kgZ3JhcGggd2hlcmUgZWRnZXMgcnVuIGZyb20gcmVhZGVyIOKGkiB3cml0ZXIuXG4gKlxuICogMS4gTG9jYXRlIHN0YXJ0SWQgaW4gY29tbWl0TG9nIOKGkiByb290IG5vZGVcbiAqIDIuIEdldCBrZXlzUmVhZCBmb3Igcm9vdCB2aWEgYGdldEtleXNSZWFkYCBjYWxsYmFja1xuICogMy4gRm9yIGVhY2gga2V5IHJlYWQsIGZpbmQgd2hvIGxhc3Qgd3JvdGUgaXQgYmVmb3JlIHRoaXMgc3RlcCDihpIgcGFyZW50IGNvbW1pdFxuICogNC4gQ3JlYXRlIHBhcmVudCBDYXVzYWxOb2RlLCBsaW5rIHRvIHJvb3QucGFyZW50c1xuICogNS4gRW5xdWV1ZSBwYXJlbnQuIFJlcGVhdCB1bnRpbCBxdWV1ZSBlbXB0eSBvciBsaW1pdHMgaGl0LlxuICpcbiAqIE91dHB1dCBpcyBhICoqREFHKiogKG5vdCBhIGxpbmtlZCBsaXN0KTogYSBzdGFnZSByZWFkaW5nIGBjcmVkaXRTY29yZWAgQU5EIGBkdGlgXG4gKiBmcm9tIGRpZmZlcmVudCB3cml0ZXJzIGhhcyB0d28gcGFyZW50cy5cbiAqXG4gKiAjIyBTdGFnZWQgT3B0aW1pemF0aW9uXG4gKlxuICogVHdvIHdyaXRlci1sb29rdXAgc3RyYXRlZ2llcywgY2hvc2VuIGF1dG9tYXRpY2FsbHkgYnkgY29tbWl0IGxvZyBzaXplOlxuICpcbiAqIHwgU3RyYXRlZ3kgfCBXaGVuIHwgQ29tcGxleGl0eSBwZXIgbG9va3VwIHxcbiAqIHwtLS0tLS0tLS0tfC0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCBMaW5lYXIgc2NhbiB8IE4g4omkIDI1NiB8IE8oTikg4oCUIHNpbXBsZSBiYWNrd2FyZCBzY2FuIHxcbiAqIHwgUmV2ZXJzZSBpbmRleCB8IE4gPiAyNTYgfCBPKEsgbG9nIE4pIOKAlCBwcmVidWlsdCBrZXnihpJbaW5kaWNlc10sIGJpbmFyeSBzZWFyY2ggfFxuICpcbiAqIFRoZSB0aHJlc2hvbGQgKDI1NikgaXMgY2hvc2VuIHNvIHRoZSBPKE4pIGJ1aWxkIGNvc3Qgb2YgdGhlIHJldmVyc2UgaW5kZXhcbiAqIGlzIGFtb3J0aXplZCBvdmVyIHRoZSBCRlMgdHJhdmVyc2FsLiBCZWxvdyAyNTYsIGxpbmVhciBzY2FuIHdpbnMgYmVjYXVzZVxuICogdGhlcmUncyBubyBpbmRleCBidWlsZCBvdmVyaGVhZC4gVGhlIGNvbnN1bWVyIG5ldmVyIHNlZXMgdGhpcyDigJQgYGNhdXNhbENoYWluKClgXG4gKiBwaWNrcyB0aGUgcmlnaHQgc3RyYXRlZ3kgaW50ZXJuYWxseSAobGlrZSBhIHF1ZXJ5IG9wdGltaXplciBjaG9vc2luZyBiZXR3ZWVuXG4gKiBzZXF1ZW50aWFsIHNjYW4gdnMgaW5kZXggc2NhbiBiYXNlZCBvbiB0YWJsZSBzaXplKS5cbiAqXG4gKiAjIyBDb21wbGV4aXR5XG4gKlxuICogLSAqKlNtYWxsIGxvZ3MgKE4g4omkIDI1Nik6KiogTyhWIMOXIEsgw5cgTikgdG90YWwuIFY9dmlzaXRlZCwgSz1hdmcga2V5cy9ub2RlLlxuICogLSAqKkxhcmdlIGxvZ3MgKE4gPiAyNTYpOioqIE8oTiDDlyBVKSBpbmRleCBidWlsZCArIE8oViDDlyBLIMOXIGxvZyBOKSBsb29rdXBzLlxuICogICBVID0gdW5pcXVlIGtleXMuIEFtb3J0aXplZCBvdmVyIGFsbCBCRlMgaG9wcy5cbiAqXG4gKiAjIyBSZWZlcmVuY2VzXG4gKlxuICogLSBXZWlzZXIsIE0uICgxOTg0KS4gXCJQcm9ncmFtIFNsaWNpbmcuXCIgSUVFRSBUU0UuXG4gKiAtIFNyaWRoYXJhbiwgTS4gZXQgYWwuICgyMDA3KS4gXCJUaGluIFNsaWNpbmcuXCIgUExESS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgY2F1c2FsQ2hhaW4sIGZsYXR0ZW5DYXVzYWxEQUcsIGZvcm1hdENhdXNhbENoYWluIH0gZnJvbSAnZm9vdHByaW50anMvdHJhY2UnO1xuICpcbiAqIGNvbnN0IGRhZyA9IGNhdXNhbENoYWluKGNvbW1pdExvZywgJ2RlY2lkZSMyJywgKGlkKSA9PiByZWNvcmRlci5nZXRLZXlzUmVhZChpZCkpO1xuICogY29uc3QgZmxhdCA9IGZsYXR0ZW5DYXVzYWxEQUcoZGFnKTsgICAgIC8vIEJGUy1vcmRlcmVkIGZsYXQgbGlzdFxuICogY29uc29sZS5sb2coZm9ybWF0Q2F1c2FsQ2hhaW4oZGFnKSk7ICAgICAvLyBodW1hbi1yZWFkYWJsZVxuICogYGBgXG4gKi9cblxuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnLi4vc2NvcGUvZGV0ZWN0Q2lyY3VsYXIuanMnO1xuaW1wb3J0IHsgZmluZExhc3RXcml0ZXIgfSBmcm9tICcuL2NvbW1pdExvZ1V0aWxzLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlLCBVbnRyYWNrZWRTb3VyY2UgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8g4pSA4pSAIFR5cGVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogQSBzaW5nbGUgbm9kZSBpbiB0aGUgY2F1c2FsIERBRy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2F1c2FsTm9kZSB7XG4gIC8qKiBVbmlxdWUgZXhlY3V0aW9uIHN0ZXAgaWRlbnRpZmllci4gKi9cbiAgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFN0YWJsZSBzdGFnZSBpZGVudGlmaWVyLiAqL1xuICBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBzdGFnZSBuYW1lLiAqL1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgLyoqIEtleXMgdGhpcyBzdGFnZSB3cm90ZSAoZnJvbSBpdHMgQ29tbWl0QnVuZGxlLnRyYWNlKS4gKi9cbiAga2V5c1dyaXR0ZW46IHN0cmluZ1tdO1xuICAvKiogVGhlIGtleSB3aG9zZSByZWFk4oaSd3JpdGUgZGVwZW5kZW5jeSBsaW5rZWQgdGhpcyBub2RlIHRvIGl0cyBjaGlsZC4gRW1wdHkgZm9yIHRoZSByb290LiAqL1xuICBsaW5rZWRCeTogc3RyaW5nO1xuICAvKiogQkZTIGRlcHRoIGZyb20gdGhlIHN0YXJ0aW5nIG5vZGUgKDAgPSBzdGFydCkuICovXG4gIGRlcHRoOiBudW1iZXI7XG4gIC8qKlxuICAgKiBQYXJlbnQgbm9kZXMg4oCUIHN0YWdlcyB0aGlzIG5vZGUgZGVwZW5kcyBvbi4gREFHOiBtdWx0aXBsZSBwYXJlbnRzXG4gICAqIHBvc3NpYmxlLiBLRVBUIGZvciBjb21wYXRpYmlsaXR5OyB3aXRoIHRoZSBgY29udHJvbERlcHNgIG9wdGlvblxuICAgKiAoUkZDLTAwMyBEMykgZ292ZXJuaW5nIGRlY2lkZXJzIGFwcGVhciBoZXJlIHRvby4gRm9yIHR5cGVkL2tleWVkL1xuICAgKiB3ZWlnaHRlZCBkZXRhaWwgdXNlIHtAbGluayBwYXJlbnRFZGdlc30uXG4gICAqL1xuICBwYXJlbnRzOiBDYXVzYWxOb2RlW107XG4gIC8qKlxuICAgKiBSRkMtMDAzIEQzIOKAlCBvbmUgZWRnZSBwZXIgZGVwZW5kZW5jeSBMSU5LIChub3QgcGVyIHBhcmVudCk6IGEgbm9kZVxuICAgKiByZWFkaW5nIHR3byBrZXlzIGZyb20gdGhlIHNhbWUgd3JpdGVyIGhhcyBPTkUgZW50cnkgaW4ge0BsaW5rIHBhcmVudHN9XG4gICAqIGJ1dCBUV08gYCdkYXRhJ2AgZWRnZXMgaGVyZS4gQ29udHJvbCBkZXBlbmRlbmNpZXMgKHZpYSB0aGVcbiAgICogYGNvbnRyb2xEZXBzYCBvcHRpb24pIGFkZCBhIGAnY29udHJvbCdgIGVkZ2UgdG8gdGhlIGdvdmVybmluZyBkZWNpZGVyLlxuICAgKi9cbiAgcGFyZW50RWRnZXM6IENhdXNhbEVkZ2VbXTtcbiAgLyoqXG4gICAqIFJGQy0wMDMgRDIgaG9uZXN0eSBtYXJrZXIg4oCUIHN0YW1wZWQgZnJvbSB0aGUgc3RhZ2Unc1xuICAgKiBgQ29tbWl0QnVuZGxlLnVudHJhY2tlZFNvdXJjZXNgLiBQcmVzZW50IHdoZW4gdGhpcyBzdGFnZSBBTFNPIGNvbnN1bWVkXG4gICAqIHVudHJhY2tlZCByZWFkIHBhdGhzIChgYXJnc2AgLyBgZW52YCAvIHVuc2hhZG93ZWQgYHNpbGVudGAgcmVhZHMpOiB0aGVcbiAgICogYmFja3dhcmQgc2xpY2UgdGhyb3VnaCB0aGlzIG5vZGUgbWF5IGJlIGluY29tcGxldGUsIGJlY2F1c2UgdGhvc2UgcmVhZHNcbiAgICogcHJvZHVjZSBubyByZWFk4oaSd3JpdGUgZWRnZSB0byBmb2xsb3cuIGBmb3JtYXRDYXVzYWxDaGFpbmAgcmVuZGVycyB0aGlzXG4gICAqIGFzIGEgYOKaoCDigKYgc2xpY2UgbWF5IGJlIGluY29tcGxldGUgaGVyZWAgbGluZS4gQWJzZW50IHdoZW4gdGhlIHN0YWdlJ3NcbiAgICogcmVhZHMgd2VyZSBmdWxseSB0cmFja2VkLlxuICAgKi9cbiAgaW5jb21wbGV0ZVNvdXJjZXM/OiBSZWFkb25seUFycmF5PFVudHJhY2tlZFNvdXJjZT47XG4gIC8qKlxuICAgKiBSRkMtMDAzIEQ0IHRydW5jYXRpb24gdmlzaWJpbGl0eSDigJQgc2V0IG9uIHRoZSBST09UIG5vZGUgb25seSwgYW5kIG9ubHlcbiAgICogd2hlbiBhIGxpbWl0IGFjdHVhbGx5IGN1dCB0aGUgc2xpY2U6IGBieURlcHRoYCB3aGVuIGEgbm9kZSBhdCB0aGVcbiAgICogYG1heERlcHRoYCBob3Jpem9uIHN0aWxsIGhhZCBlZGdlcyB0byBleHBhbmQsIGBieU5vZGVzYCB3aGVuIHRoZVxuICAgKiBgbWF4Tm9kZXNgIGJ1ZGdldCBibG9ja2VkIGNyZWF0aW5nIGEgZGlzY292ZXJlZCBwYXJlbnQuIEFic2VudCB3aGVuIHRoZVxuICAgKiBzbGljZSBpcyBjb21wbGV0ZS4gRGV2IG1vZGUgKGBlbmFibGVEZXZNb2RlKClgKSBhbHNvIHdhcm5zIG9uXG4gICAqIHRydW5jYXRpb24sIGFuZCBgZm9ybWF0Q2F1c2FsQ2hhaW5gIGFwcGVuZHMgYSBg4pqgIHNsaWNlIHRydW5jYXRlZCDigKZgXG4gICAqIGxpbmUg4oCUIGEgY29uc3VtZXIgbXVzdCBuZXZlciBtaXN0YWtlIGEgdHJ1bmNhdGVkIHNsaWNlIGZvciBhIGZ1bGwgb25lLlxuICAgKi9cbiAgdHJ1bmNhdGVkPzogeyBieURlcHRoOiBib29sZWFuOyBieU5vZGVzOiBib29sZWFuIH07XG59XG5cbi8qKlxuICogUkZDLTAwMyBEMyDigJQgYSB0eXBlZCBkZXBlbmRlbmN5IGVkZ2UgZnJvbSBhIGNoaWxkIG5vZGUgdG8gb25lIHBhcmVudC5cbiAqXG4gKiAtIGBraW5kOiAnZGF0YSdgICAgIOKAlCByZWFk4oaSd3JpdGUgZGVwZW5kZW5jeTsgYGtleWAgaXMgdGhlIHN0YXRlIGtleS5cbiAqIC0gYGtpbmQ6ICdjb250cm9sJ2Ag4oCUIHRoZSBwYXJlbnQgaXMgdGhlIGRlY2lkZXIvc2VsZWN0b3Igd2hvc2UgZGVjaXNpb25cbiAqICAgYWxsb3dlZCB0aGUgY2hpbGQgdG8gcnVuOyBga2V5YCBpcyB0aGUgZGVjaWRlKCkgcnVsZSBsYWJlbCB3aGVuIHByZXNlbnQuXG4gKlxuICogYHdlaWdodGAgZGVmYXVsdHMgdG8gMS4wOyB0aGUgYHdlaWdoYCBob29rIChSRkMtMDAzIEQ0KSBjYW4gb3ZlcnJpZGUgaXQuXG4gKiBUaGUgZW5naW5lIGl0c2VsZiBORVZFUiBjb21wdXRlcyB3ZWlnaHRzIOKAlCBzZW1hbnRpY3MgYmVsb25nIHRvIHRoZVxuICogY29uc3VtZXItaW5qZWN0ZWQgd2VpZ2hlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXVzYWxFZGdlIHtcbiAgcGFyZW50OiBDYXVzYWxOb2RlO1xuICBraW5kOiAnZGF0YScgfCAnY29udHJvbCc7XG4gIGtleT86IHN0cmluZztcbiAgd2VpZ2h0OiBudW1iZXI7XG59XG5cbi8qKlxuICogUkZDLTAwMyBEMyDigJQgYSBjb250cm9sIGRlcGVuZGVuY3kgcmVzb2x2ZWQgZm9yIG9uZSBleGVjdXRpb24gc3RlcDpcbiAqIHdoaWNoIGRlY2lkZXIvc2VsZWN0b3IgZXhlY3V0aW9uIGFsbG93ZWQgdGhpcyBzdGFnZSB0byBydW4uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udHJvbERlcGVuZGVuY3kge1xuICAvKiogcnVudGltZVN0YWdlSWQgb2YgdGhlIGdvdmVybmluZyBkZWNpZGVyL3NlbGVjdG9yIGV4ZWN1dGlvbiBzdGVwLiAqL1xuICBkZWNpZGVySWQ6IHN0cmluZztcbiAgLyoqIFRoZSBkZWNpZGUoKSBydWxlIGxhYmVsIGZvciB0aGUgY2hvc2VuIGJyYW5jaCwgd2hlbiBwcmVzZW50LiAqL1xuICBsYWJlbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSRkMtMDAzIEQzIOKAlCBjYWxsYmFjayByZXNvbHZpbmcgdGhlIGdvdmVybmluZyBkZWNpZGVyIGZvciBhbiBleGVjdXRpb25cbiAqIHN0ZXAuIFJldHVybiBgdW5kZWZpbmVkYCB3aGVuIHRoZSBzdGVwIGlzIG5vdCBjb250cm9sLWRlcGVuZGVudCBvbiBhbnlcbiAqIHJlY29yZGVkIGRlY2lzaW9uLiBCdWlsZCBvbmUgd2l0aCBgY29udHJvbERlcFJlY29yZGVyKClgIGZyb21cbiAqIGBmb290cHJpbnRqcy90cmFjZWAsIG9yIHN1cHBseSB5b3VyIG93bi5cbiAqL1xuZXhwb3J0IHR5cGUgQ29udHJvbERlcExvb2t1cCA9IChydW50aW1lU3RhZ2VJZDogc3RyaW5nKSA9PiBDb250cm9sRGVwZW5kZW5jeSB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBSRkMtMDAzIEQ0IOKAlCBjb25zdW1lci1pbmplY3RlZCBlZGdlIHdlaWdoZXIuIENhbGxlZCBvbmNlIHBlciBjcmVhdGVkXG4gKiBlZGdlOyByZXR1cm4gYSB3ZWlnaHQsIG9yIGB1bmRlZmluZWRgIHRvIGtlZXAgdGhlIGRlZmF1bHQgMS4wLiBUaGVcbiAqIEVOR0lORSBuZXZlciBjb21wdXRlcyB3ZWlnaHRzICh6ZXJvIG5ldyBkZXBlbmRlbmNpZXMg4oCUIHNlbWFudGljcyBsaWtlXG4gKiBlbWJlZGRpbmcgc2ltaWxhcml0eSBvciBGREwgaW5mbHVlbmNlIGJlbG9uZyB0byBkb3duc3RyZWFtIGxpYnJhcmllcyxcbiAqIHRoZSBzYW1lIHBsdWctaW4gcGF0dGVybiBhcyBgTmFycmF0aXZlRm9ybWF0dGVyYCkuIFdlaWdodHMgcmVuZGVyIGluXG4gKiBgZm9ybWF0Q2F1c2FsQ2hhaW5gIGFzIGDihpAgdmlhIHN5c3RlbVByb21wdCAoMC4xOClgLlxuICovXG5leHBvcnQgdHlwZSBFZGdlV2VpZ2hlciA9IChcbiAgY2hpbGQ6IENhdXNhbE5vZGUsXG4gIHBhcmVudDogQ2F1c2FsTm9kZSxcbiAga2V5OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIGtpbmQ6ICdkYXRhJyB8ICdjb250cm9sJyxcbikgPT4gbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4vKiogT3B0aW9ucyBmb3IgY2F1c2FsQ2hhaW4oKS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2F1c2FsQ2hhaW5PcHRpb25zIHtcbiAgLyoqIE1heGltdW0gQkZTIGRlcHRoIChkZWZhdWx0OiAyMCkuIFByZXZlbnRzIHJ1bmF3YXkgdHJhdmVyc2FsLiAqL1xuICBtYXhEZXB0aD86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gdG90YWwgbm9kZXMgdG8gdmlzaXQgKGRlZmF1bHQ6IDEwMCkuIEhhcmQgY2FwIGZvciBzYWZldHkuICovXG4gIG1heE5vZGVzPzogbnVtYmVyO1xuICAvKipcbiAgICogUkZDLTAwMyBEMyDigJQgY29udHJvbC1kZXBlbmRlbmNlIGxvb2t1cC4gV2hlbiBwcm92aWRlZCwgZXhwYW5kaW5nIGEgbm9kZVxuICAgKiBBTFNPIGxpbmtzIGEgYCdjb250cm9sJ2AgZWRnZSB0byBpdHMgZ292ZXJuaW5nIGRlY2lkZXIgKGxhYmVsZWQgYnkgdGhlXG4gICAqIGRlY2lkZSgpIHJ1bGUgbGFiZWwgd2hlbiBwcmVzZW50KTsgdGhlIGRlY2lkZXIgbm9kZSB0aGVuIGV4cGFuZHNcbiAgICogbm9ybWFsbHkgdGhyb3VnaCBpdHMgb3duIGRhdGEgcmVhZHMsIHNvIGNoYWlucyBsaWtlXG4gICAqIGBzdGF0dXMg4oaQIFtjb250cm9sXSBDbGFzc2lmeVJpc2sg4oaQIFtkYXRhOiBjcmVkaXRTY29yZV0gUHVsbEJ1cmVhdWBcbiAgICogcmVzb2x2ZSBlbmQtdG8tZW5kLiBXaXRob3V0IHRoaXMgb3B0aW9uIGJlaGF2aW9yIGlzIHVuY2hhbmdlZC5cbiAgICovXG4gIGNvbnRyb2xEZXBzPzogQ29udHJvbERlcExvb2t1cDtcbiAgLyoqXG4gICAqIFJGQy0wMDMgRDQg4oCUIGVkZ2Ugd2VpZ2hlci4gU3RhbXBzIGBDYXVzYWxFZGdlLndlaWdodGAgYXQgZWRnZSBjcmVhdGlvbjtcbiAgICogYHVuZGVmaW5lZGAgKG9yIG5vIHdlaWdoZXIpIOKGkiAxLjAuIFNlZSB7QGxpbmsgRWRnZVdlaWdoZXJ9LlxuICAgKi9cbiAgd2VpZ2g/OiBFZGdlV2VpZ2hlcjtcbiAgLyoqXG4gICAqICNQMSDigJQgaG93IGEgbm9kZSdzIGV4cGFuc2lvbiByZWFkLXNldCBpcyBkZXJpdmVkOlxuICAgKlxuICAgKiAtIGAnc3RhZ2UnYCAoZGVmYXVsdCwgaGlzdG9yaWNhbCkg4oCUIGV2ZXJ5IHZpc2l0ZWQgbm9kZSBleHBhbmRzIHRocm91Z2hcbiAgICogICBBTEwgb2YgaXRzIHN0YWdlJ3MgcmVhZHMgKGBnZXRLZXlzUmVhZGApLiBBIHN0YWdlIHJlYWRpbmcgYGEsYmAgYW5kXG4gICAqICAgd3JpdGluZyBgeCx5YCBsaW5rcyBib3RoIHJlYWRzIGFzIGNhdXNlcyBvZiBib3RoIHdyaXRlcyDigJQgYSBzb3VuZCBidXRcbiAgICogICBjb2Fyc2Ugb3Zlci1hcHByb3hpbWF0aW9uLlxuICAgKiAtIGAncGVyLXdyaXRlJ2Ag4oCUIHdoZW4gdGhlIGNvbW1pdCBsb2cgY2FycmllcyBwZXItd3JpdGUgcmVhZCBwcm92ZW5hbmNlXG4gICAqICAgKGBUcmFjZUVudHJ5LnJlYWRLZXlzYCwgcmVjb3JkZWQgdW5kZXIgdGhlIGV4ZWN1dG9yJ3NcbiAgICogICBgd3JpdGVQcm92ZW5hbmNlOiAncmVhZHMtcHJlZml4J2AgZGlhbCksIGEgbm9kZSByZWFjaGVkIHZpYSBrZXkgYGtgXG4gICAqICAgZXhwYW5kcyB0aHJvdWdoIE9OTFkgdGhlIHJlYWRzIHRoYXQgcHJlY2VkZWQgaXRzIHdyaXRlIG9mIGBrYFxuICAgKiAgICh0ZW1wb3JhbCBwcmVmaXgpLiBOb2RlcyBsaW5rZWQgbGF0ZXIgdmlhIGFkZGl0aW9uYWwga2V5cyBhcmVcbiAgICogICBpbmNyZW1lbnRhbGx5IHJlLWV4cGFuZGVkIHdpdGgganVzdCB0aGUgbmV3IHJlYWRzICh3b3JrbGlzdCDigJQgdGhlXG4gICAqICAgc2xpY2Ugb25seSBldmVyIEdST1dTIHRvd2FyZCB0aGUgc3RhZ2UtbGV2ZWwgY2VpbGluZykuIEhPTkVTVFxuICAgKiAgIEZBTExCQUNLOiBhbnkgbGluayB3aG9zZSB0cmFjZSBlbnRyeSBsYWNrcyBgcmVhZEtleXNgIGV4cGFuZHMgdGhhdFxuICAgKiAgIG5vZGUgYXQgc3RhZ2UgbGV2ZWwg4oCUIG1peGVkIG9yIGRpYWwtb2ZmIGxvZ3MgZGVncmFkZSB0byBgJ3N0YWdlJ2BcbiAgICogICBiZWhhdmlvciBleGFjdGx5LCBuZXZlciB0byBzaWxlbmNlLlxuICAgKi9cbiAgZWRnZUF0dHJpYnV0aW9uPzogJ3N0YWdlJyB8ICdwZXItd3JpdGUnO1xuICAvKipcbiAgICogI1AxIOKAlCB0aGUgd3JpdHRlbiBrZXlzIHRoYXQgYW5jaG9yIHRoZSBST09UJ3MgZXhwYW5zaW9uIHVuZGVyXG4gICAqIGAncGVyLXdyaXRlJ2AgKGUuZy4gYHNsaWNlRm9yS2V5YCBwYXNzZXMgdGhlIHNsaWNlZCBrZXksIHNvIHRoZSByb290XG4gICAqIGV4cGFuZHMgdGhyb3VnaCB0aGUgcmVhZHMgdGhhdCBmZWQgVEhBVCB3cml0ZSwgbm90IHRoZSB3aG9sZSBzdGFnZSkuXG4gICAqIElnbm9yZWQgdW5kZXIgYCdzdGFnZSdgLiBVbnNldCDihpIgcm9vdCBleHBhbmRzIGF0IHN0YWdlIGxldmVsLlxuICAgKi9cbiAgcm9vdExpbmtLZXlzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ2FsbGJhY2sgdGhhdCByZXR1cm5zIHRoZSBrZXlzIGEgc3RhZ2UgcmVhZCBkdXJpbmcgZXhlY3V0aW9uLlxuICogVGhlIGJhY2t0cmFja2VyIGNhbGxzIHRoaXMgZm9yIGVhY2ggdmlzaXRlZCBub2RlIHRvIGRldGVybWluZVxuICogd2hpY2ggcmVhZOKGkndyaXRlIGVkZ2VzIHRvIGZvbGxvdy5cbiAqXG4gKiBJbXBsZW1lbnRvcnM6IFF1YWxpdHlSZWNvcmRlciB0cmFja3Mga2V5c1JlYWQgcGVyIHN0ZXAsXG4gKiBvciBidWlsZCBhIE1hcDxydW50aW1lU3RhZ2VJZCwgc3RyaW5nW10+IGZyb20gU2NvcGVSZWNvcmRlci5vblJlYWQgZXZlbnRzLlxuICovXG5leHBvcnQgdHlwZSBLZXlzUmVhZExvb2t1cCA9IChydW50aW1lU3RhZ2VJZDogc3RyaW5nKSA9PiBzdHJpbmdbXTtcblxuLy8g4pSA4pSAIFN0YWdlZCBvcHRpbWl6YXRpb246IHdyaXRlciBsb29rdXAgc3RyYXRlZ2llcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBUaHJlc2hvbGQgZm9yIHN3aXRjaGluZyBmcm9tIGxpbmVhciBzY2FuIHRvIHJldmVyc2UgaW5kZXguXG4gKiBCZWxvdyB0aGlzLCBPKE4pIHNjYW4gaXMgZmFzdGVyIChubyBpbmRleCBidWlsZCBjb3N0KS5cbiAqIEFib3ZlIHRoaXMsIE8obG9nIE4pIGJpbmFyeSBzZWFyY2ggd2lucy5cbiAqL1xuY29uc3QgUkVWRVJTRV9JTkRFWF9USFJFU0hPTEQgPSAyNTY7XG5cbi8qKlxuICogV3JpdGVyIGxvb2t1cCBmdW5jdGlvbiBzaWduYXR1cmUuXG4gKiBSZXR1cm5zIHRoZSBDb21taXRCdW5kbGUgdGhhdCBsYXN0IHdyb3RlIGBrZXlgIGJlZm9yZSBwb3NpdGlvbiBgYmVmb3JlSWR4YC5cbiAqL1xudHlwZSBXcml0ZXJMb29rdXAgPSAoa2V5OiBzdHJpbmcsIGJlZm9yZUlkeDogbnVtYmVyKSA9PiBDb21taXRCdW5kbGUgfCB1bmRlZmluZWQ7XG5cbi8qKiBTdHJhdGVneSAxOiBMaW5lYXIgc2NhbiDigJQgTyhOKSBwZXIgbG9va3VwLCB6ZXJvIHNldHVwIGNvc3QuICovXG5mdW5jdGlvbiBsaW5lYXJTY2FuTG9va3VwKGNvbW1pdExvZzogQ29tbWl0QnVuZGxlW10pOiBXcml0ZXJMb29rdXAge1xuICByZXR1cm4gKGtleSwgYmVmb3JlSWR4KSA9PiBmaW5kTGFzdFdyaXRlcihjb21taXRMb2csIGtleSwgYmVmb3JlSWR4KTtcbn1cblxuLyoqXG4gKiBTdHJhdGVneSAyOiBSZXZlcnNlIGluZGV4IOKAlCBPKE7Dl1UpIGJ1aWxkLCBPKGxvZyBOKSBwZXIgbG9va3VwLlxuICogQnVpbGRzIGEgTWFwPGtleSwgc29ydGVkSW5kaWNlc1tdPiB3aGVyZSBpbmRpY2VzIGFyZSBjb21taXQgcG9zaXRpb25zXG4gKiB0aGF0IHdyb3RlIHRoYXQga2V5LiBMb29rdXAgdXNlcyBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgdGhlIGxhc3Qgd3JpdGVyXG4gKiBiZWZvcmUgYSBnaXZlbiBwb3NpdGlvbi5cbiAqL1xuZnVuY3Rpb24gcmV2ZXJzZUluZGV4TG9va3VwKGNvbW1pdExvZzogQ29tbWl0QnVuZGxlW10pOiBXcml0ZXJMb29rdXAge1xuICAvLyBCdWlsZDoga2V5IOKGkiBzb3J0ZWQgYXJyYXkgb2YgY29tbWl0IGluZGljZXMgdGhhdCB3cm90ZSB0aGlzIGtleVxuICBjb25zdCBpbmRleCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXJbXT4oKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21taXRMb2cubGVuZ3RoOyBpKyspIHtcbiAgICBmb3IgKGNvbnN0IHQgb2YgY29tbWl0TG9nW2ldLnRyYWNlKSB7XG4gICAgICBsZXQgYXJyID0gaW5kZXguZ2V0KHQucGF0aCk7XG4gICAgICBpZiAoIWFycikge1xuICAgICAgICBhcnIgPSBbXTtcbiAgICAgICAgaW5kZXguc2V0KHQucGF0aCwgYXJyKTtcbiAgICAgIH1cbiAgICAgIGFyci5wdXNoKGkpOyAvLyBhbHJlYWR5IHNvcnRlZCAod2UgaXRlcmF0ZSBpbiBvcmRlcilcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGtleTogc3RyaW5nLCBiZWZvcmVJZHg6IG51bWJlcik6IENvbW1pdEJ1bmRsZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgaW5kaWNlcyA9IGluZGV4LmdldChrZXkpO1xuICAgIGlmICghaW5kaWNlcyB8fCBpbmRpY2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIC8vIEJpbmFyeSBzZWFyY2g6IGZpbmQgbGFyZ2VzdCBpbmRleCA8IGJlZm9yZUlkeFxuICAgIGxldCBsbyA9IDA7XG4gICAgbGV0IGhpID0gaW5kaWNlcy5sZW5ndGggLSAxO1xuICAgIGxldCByZXN1bHQgPSAtMTtcblxuICAgIHdoaWxlIChsbyA8PSBoaSkge1xuICAgICAgY29uc3QgbWlkID0gKGxvICsgaGkpID4+PiAxO1xuICAgICAgaWYgKGluZGljZXNbbWlkXSA8IGJlZm9yZUlkeCkge1xuICAgICAgICByZXN1bHQgPSBpbmRpY2VzW21pZF07XG4gICAgICAgIGxvID0gbWlkICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhpID0gbWlkIC0gMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0ID49IDAgPyBjb21taXRMb2dbcmVzdWx0XSA6IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxuLyoqXG4gKiBTdGFnZWQgb3B0aW1pemF0aW9uOiBwaWNrIHRoZSByaWdodCB3cml0ZXItbG9va3VwIHN0cmF0ZWd5IGJhc2VkIG9uIGRhdGEgc2l6ZS5cbiAqXG4gKiBMaWtlIGEgZGF0YWJhc2UgcXVlcnkgb3B0aW1pemVyIGNob29zaW5nIGJldHdlZW4gc2VxdWVudGlhbCBzY2FuIGFuZCBpbmRleCBzY2FuOlxuICpcbiAqIC0gKipTbWFsbCBsb2cgKOKJpCAyNTYpOioqIExpbmVhciBzY2FuIHdpbnMuIFplcm8gc2V0dXAgY29zdCwgZ29vZCBjYWNoZSBsb2NhbGl0eS5cbiAqICAgVGhlIG92ZXJoZWFkIG9mIGJ1aWxkaW5nIGEgcmV2ZXJzZSBpbmRleCBpc24ndCB3b3J0aCBpdCBmb3Igc2hvcnQgbG9ncy5cbiAqXG4gKiAtICoqTGFyZ2UgbG9nICg+IDI1Nik6KiogUmV2ZXJzZSBpbmRleCB3aW5zLiBPKE7Dl1UpIHVwZnJvbnQgYnVpbGQgY29zdCBpcyBhbW9ydGl6ZWRcbiAqICAgYWNyb3NzIGFsbCBCRlMgaG9wcy4gRWFjaCBsb29rdXAgYmVjb21lcyBPKGxvZyBOKSB2aWEgYmluYXJ5IHNlYXJjaCBpbnN0ZWFkIG9mIE8oTikuXG4gKiAgIEZvciBhbiBhZ2VudCBsb29wIHdpdGggNTAwIGl0ZXJhdGlvbnMgYW5kIDUga2V5cyBwZXIgaG9wLCB0aGlzIGlzIDUwMMOXNcOXbG9nKDUwMCniiYgyMksgb3BzXG4gKiAgIHZzIDUwMMOXNcOXNTAwPTEuMjVNIG9wcyB3aXRoIGxpbmVhciBzY2FuLlxuICpcbiAqIFRoZSBjYWxsZXIgbmV2ZXIgc2VlcyB0aGlzIOKAlCBgY2F1c2FsQ2hhaW4oKWAgcGlja3MgYXV0b21hdGljYWxseS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlV3JpdGVyTG9va3VwKGNvbW1pdExvZzogQ29tbWl0QnVuZGxlW10pOiBXcml0ZXJMb29rdXAge1xuICBpZiAoY29tbWl0TG9nLmxlbmd0aCA8PSBSRVZFUlNFX0lOREVYX1RIUkVTSE9MRCkge1xuICAgIHJldHVybiBsaW5lYXJTY2FuTG9va3VwKGNvbW1pdExvZyk7XG4gIH1cbiAgcmV0dXJuIHJldmVyc2VJbmRleExvb2t1cChjb21taXRMb2cpO1xufVxuXG4vLyDilIDilIAgQ29yZSBhbGdvcml0aG0g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogUkZDLTAwMyBEMjogdGhlIGBpbmNvbXBsZXRlU291cmNlc2Agbm9kZSBmcmFnbWVudCBmb3IgYSBjb21taXQg4oCUIGB7fWBcbiAqIHdoZW4gdGhlIHN0YWdlIGNvbnN1bWVkIG5vIHVudHJhY2tlZCByZWFkIHBhdGhzLCBrZWVwaW5nIHRoZSBmaWVsZFxuICogQUJTRU5UIChub3QgZW1wdHktYXJyYXktdmFsdWVkKSBmb3IgZnVsbHktdHJhY2tlZCBzdGFnZXMuXG4gKi9cbmZ1bmN0aW9uIGluY29tcGxldGVTb3VyY2VzRnJhZ21lbnQoY29tbWl0OiBDb21taXRCdW5kbGUpOiB7IGluY29tcGxldGVTb3VyY2VzPzogUmVhZG9ubHlBcnJheTxVbnRyYWNrZWRTb3VyY2U+IH0ge1xuICBpZiAoIWNvbW1pdC51bnRyYWNrZWRTb3VyY2VzIHx8IGNvbW1pdC51bnRyYWNrZWRTb3VyY2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHt9O1xuICByZXR1cm4geyBpbmNvbXBsZXRlU291cmNlczogY29tbWl0LnVudHJhY2tlZFNvdXJjZXMgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgY2F1c2FsIERBRyByb290ZWQgYXQgYHN0YXJ0SWRgIGJ5IHdhbGtpbmcgYmFja3dhcmRzXG4gKiB0aHJvdWdoIHJlYWTihpJ3cml0ZSBkZXBlbmRlbmNpZXMgaW4gdGhlIGNvbW1pdCBsb2cuXG4gKlxuICogQXV0b21hdGljYWxseSBzZWxlY3RzIHRoZSBvcHRpbWFsIHdyaXRlciBsb29rdXAgc3RyYXRlZ3k6XG4gKiAtIExpbmVhciBzY2FuIGZvciBzbWFsbCBsb2dzICjiiaQgMjU2IGNvbW1pdHMpXG4gKiAtIFJldmVyc2UgaW5kZXggd2l0aCBiaW5hcnkgc2VhcmNoIGZvciBsYXJnZSBsb2dzICg+IDI1NiBjb21taXRzKVxuICpcbiAqIFByb2R1Y2VzIGEgREFHIChub3QgYSB0cmVlKTogaWYgdHdvIGNoaWxkcmVuIGJvdGggcmVhZCBmcm9tIHRoZSBzYW1lXG4gKiBwYXJlbnQsIHRoZSBwYXJlbnQgbm9kZSBpcyBzaGFyZWQgKGRlZHVwZWQgYnkgcnVudGltZVN0YWdlSWQpLlxuICpcbiAqIEBwYXJhbSBjb21taXRMb2cgICBPcmRlcmVkIGNvbW1pdCBidW5kbGVzIGZyb20gZXhlY3V0b3IuZ2V0U25hcHNob3QoKS5jb21taXRMb2dcbiAqIEBwYXJhbSBzdGFydElkICAgICBydW50aW1lU3RhZ2VJZCB0byBzdGFydCBiYWNrdHJhY2tpbmcgZnJvbVxuICogQHBhcmFtIGdldEtleXNSZWFkIENhbGxiYWNrIHJldHVybmluZyBrZXlzIHJlYWQgYnkgYSBnaXZlbiBleGVjdXRpb24gc3RlcFxuICogQHBhcmFtIG9wdGlvbnMgICAgIERlcHRoIGFuZCBub2RlIGxpbWl0c1xuICogQHJldHVybnMgUm9vdCBDYXVzYWxOb2RlIHdpdGggLnBhcmVudHMgZm9ybWluZyB0aGUgREFHLCBvciB1bmRlZmluZWQgaWYgc3RhcnRJZCBub3QgZm91bmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhdXNhbENoYWluKFxuICBjb21taXRMb2c6IENvbW1pdEJ1bmRsZVtdLFxuICBzdGFydElkOiBzdHJpbmcsXG4gIGdldEtleXNSZWFkOiBLZXlzUmVhZExvb2t1cCxcbiAgb3B0aW9ucz86IENhdXNhbENoYWluT3B0aW9ucyxcbik6IENhdXNhbE5vZGUgfCB1bmRlZmluZWQge1xuICBjb25zdCBtYXhEZXB0aCA9IG9wdGlvbnM/Lm1heERlcHRoID8/IDIwO1xuICBjb25zdCBtYXhOb2RlcyA9IG9wdGlvbnM/Lm1heE5vZGVzID8/IDEwMDtcbiAgY29uc3QgY29udHJvbERlcHMgPSBvcHRpb25zPy5jb250cm9sRGVwcztcbiAgY29uc3Qgd2VpZ2ggPSBvcHRpb25zPy53ZWlnaDtcbiAgY29uc3QgcGVyV3JpdGUgPSBvcHRpb25zPy5lZGdlQXR0cmlidXRpb24gPT09ICdwZXItd3JpdGUnO1xuXG4gIC8vIFJGQy0wMDMgRDQg4oCUIHRydW5jYXRpb24gdmlzaWJpbGl0eS4gU2V0IG9ubHkgd2hlbiBhIGxpbWl0IGFjdHVhbGx5XG4gIC8vIGN1dHMgdGhlIHNsaWNlOyBzdXJmYWNlZCBvbiB0aGUgcm9vdCBhcyBgdHJ1bmNhdGVkYCBzbyBhIGNvbnN1bWVyIGNhblxuICAvLyBuZXZlciBtaXN0YWtlIGEgdHJ1bmNhdGVkIHNsaWNlIGZvciBhIGNvbXBsZXRlIG9uZS5cbiAgbGV0IHRydW5jYXRlZEJ5RGVwdGggPSBmYWxzZTtcbiAgbGV0IHRydW5jYXRlZEJ5Tm9kZXMgPSBmYWxzZTtcblxuICAvLyBCdWlsZCBwb3NpdGlvbiBpbmRleDogcnVudGltZVN0YWdlSWQg4oaSIGFycmF5IHBvc2l0aW9uIChPKG4pIG9uY2UpXG4gIGNvbnN0IGlkeE1hcCA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29tbWl0TG9nLmxlbmd0aDsgaSsrKSB7XG4gICAgaWR4TWFwLnNldChjb21taXRMb2dbaV0ucnVudGltZVN0YWdlSWQsIGkpO1xuICB9XG5cbiAgY29uc3Qgc3RhcnRJZHggPSBpZHhNYXAuZ2V0KHN0YXJ0SWQpO1xuICBpZiAoc3RhcnRJZHggPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBzdGFydENvbW1pdCA9IGNvbW1pdExvZ1tzdGFydElkeF07XG5cbiAgLy8gUGljayB3cml0ZXIgbG9va3VwIHN0cmF0ZWd5IGJhc2VkIG9uIGxvZyBzaXplXG4gIGNvbnN0IGZpbmRXcml0ZXIgPSBjcmVhdGVXcml0ZXJMb29rdXAoY29tbWl0TG9nKTtcblxuICAvLyBOb2RlIGRlZHVwIG1hcDogcnVudGltZVN0YWdlSWQg4oaSIENhdXNhbE5vZGUgKGVuc3VyZXMgREFHLCBub3QgdHJlZSlcbiAgY29uc3Qgbm9kZU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBDYXVzYWxOb2RlPigpO1xuXG4gIGNvbnN0IHJvb3Q6IENhdXNhbE5vZGUgPSB7XG4gICAgcnVudGltZVN0YWdlSWQ6IHN0YXJ0SWQsXG4gICAgc3RhZ2VJZDogc3RhcnRDb21taXQuc3RhZ2VJZCxcbiAgICBzdGFnZU5hbWU6IHN0YXJ0Q29tbWl0LnN0YWdlLFxuICAgIGtleXNXcml0dGVuOiBzdGFydENvbW1pdC50cmFjZS5tYXAoKHQpID0+IHQucGF0aCksXG4gICAgbGlua2VkQnk6ICcnLFxuICAgIGRlcHRoOiAwLFxuICAgIHBhcmVudHM6IFtdLFxuICAgIHBhcmVudEVkZ2VzOiBbXSxcbiAgICAuLi5pbmNvbXBsZXRlU291cmNlc0ZyYWdtZW50KHN0YXJ0Q29tbWl0KSxcbiAgfTtcbiAgbm9kZU1hcC5zZXQoc3RhcnRJZCwgcm9vdCk7XG5cbiAgLy8g4pSA4pSAICNQMSBwZXItd3JpdGUgYXR0cmlidXRpb24gbWFjaGluZXJ5IChpbmVydCB1bmRlciAnc3RhZ2UnKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gZXhwYW5kZWRSZWFkczogcGVyIG5vZGUsIHRoZSByZWFkcyBhbHJlYWR5IHF1ZXVlZCBmb3IgZXhwYW5zaW9uIOKAlCBsYXRlXG4gIC8vIGxpbmtzIHZpYSBhZGRpdGlvbmFsIGtleXMgcmUtZW5xdWV1ZSBvbmx5IHRoZSBERUxUQSwgc28gdGhlIHNsaWNlIGdyb3dzXG4gIC8vIG1vbm90b25pY2FsbHkgdG93YXJkIHRoZSBzdGFnZS1sZXZlbCBjZWlsaW5nIGFuZCB0ZXJtaW5hdGVzIChlYWNoIGtleVxuICAvLyBleHBhbmRzIGF0IG1vc3Qgb25jZSBwZXIgbm9kZSkuIGZ1bGx5RXhwYW5kZWQ6IG5vZGVzIHRoYXQgZmVsbCBiYWNrIHRvXG4gIC8vIHN0YWdlIGxldmVsIChubyByZWFkS2V5cyBvbiBhIGxpbmtpbmcgZW50cnkpIOKAlCBub3RoaW5nIGxlZnQgdG8gYWRkLlxuICBjb25zdCBleHBhbmRlZFJlYWRzID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuICBjb25zdCBmdWxseUV4cGFuZGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgYSBub2RlJ3MgZXhwYW5zaW9uIHJlYWQtc2V0IGZvciB0aGUgZ2l2ZW4gbGlua2luZyBXUklUVEVOIGtleXMuXG4gICAqIFBlci13cml0ZSBtb2RlIHdpdGggcHJvdmVuYW5jZSBwcmVzZW50IOKGkiB1bmlvbiBvZiB0aGUgbGlua2luZyB3cml0ZXMnXG4gICAqIHRlbXBvcmFsLXByZWZpeCBgcmVhZEtleXNgLiBBbnkgbGlua2luZyBlbnRyeSBXSVRIT1VUIGByZWFkS2V5c2AgKG9yIG5vXG4gICAqIGxpbmtLZXlzIGF0IGFsbCkg4oaSIGhvbmVzdCBzdGFnZS1sZXZlbCBmYWxsYmFjaywgZmxhZ2dlZCB2aWEgdGhlIHNlY29uZFxuICAgKiB0dXBsZSBtZW1iZXIgc28gdGhlIGNhbGxlciBtYXJrcyB0aGUgbm9kZSBmdWxseSBleHBhbmRlZC5cbiAgICovXG4gIGZ1bmN0aW9uIHJlYWRzRm9yTGlua3MoY29tbWl0OiBDb21taXRCdW5kbGUsIGxpbmtLZXlzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCk6IFtzdHJpbmdbXSwgYm9vbGVhbl0ge1xuICAgIGlmICghcGVyV3JpdGUgfHwgIWxpbmtLZXlzIHx8IGxpbmtLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtnZXRLZXlzUmVhZChjb21taXQucnVudGltZVN0YWdlSWQpLCB0cnVlXTtcbiAgICB9XG4gICAgY29uc3QgdW5pb24gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IGxpbmtLZXkgb2YgbGlua0tleXMpIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gY29tbWl0LnRyYWNlLmZpbmQoKHQpID0+IHQucGF0aCA9PT0gbGlua0tleSk7XG4gICAgICBpZiAoIWVudHJ5IHx8IGVudHJ5LnJlYWRLZXlzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gTWl4ZWQvZGlhbC1vZmYgbG9nIOKAlCBkZWdyYWRlIFRISVMgbm9kZSB0byBzdGFnZSBsZXZlbCwgaG9uZXN0bHkuXG4gICAgICAgIHJldHVybiBbZ2V0S2V5c1JlYWQoY29tbWl0LnJ1bnRpbWVTdGFnZUlkKSwgdHJ1ZV07XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHJrIG9mIGVudHJ5LnJlYWRLZXlzKSB1bmlvbi5hZGQocmspO1xuICAgIH1cbiAgICByZXR1cm4gW1suLi51bmlvbl0sIGZhbHNlXTtcbiAgfVxuXG4gIC8vIEJGUy93b3JrbGlzdCBxdWV1ZTogW25vZGUsIGNvbW1pdElkeCwgZGVwdGgsIGtleXNUb0V4cGFuZF1cbiAgY29uc3QgW3Jvb3RSZWFkcywgcm9vdElzRnVsbF0gPSBwZXJXcml0ZVxuICAgID8gcmVhZHNGb3JMaW5rcyhzdGFydENvbW1pdCwgb3B0aW9ucz8ucm9vdExpbmtLZXlzKVxuICAgIDogW2dldEtleXNSZWFkKHN0YXJ0SWQpLCB0cnVlXTtcbiAgZXhwYW5kZWRSZWFkcy5zZXQoc3RhcnRJZCwgbmV3IFNldChyb290UmVhZHMpKTtcbiAgaWYgKHJvb3RJc0Z1bGwpIGZ1bGx5RXhwYW5kZWQuYWRkKHN0YXJ0SWQpO1xuICBjb25zdCBxdWV1ZTogQXJyYXk8W0NhdXNhbE5vZGUsIG51bWJlciwgbnVtYmVyLCBzdHJpbmdbXV0+ID0gW1tyb290LCBzdGFydElkeCwgMCwgcm9vdFJlYWRzXV07XG4gIGxldCB2aXNpdGVkID0gMTtcblxuICAvKipcbiAgICogTGluayBgbm9kZSDihpIgcGFyZW50YCAoY3JlYXRpbmcgKyBlbnF1ZXVlaW5nIHRoZSBwYXJlbnQgd2hlbiBuZXcpLlxuICAgKiBTaGFyZWQgYnkgZGF0YS1lZGdlIGV4cGFuc2lvbiAocmVhZOKGkndyaXRlKSBhbmQgY29udHJvbC1lZGdlIGV4cGFuc2lvblxuICAgKiAoRDMpLiBPbmUgQ2F1c2FsRWRnZSBwZXIgZGlzdGluY3QgKHBhcmVudCwga2luZCwga2V5KSBsaW5rOyBgcGFyZW50c2BcbiAgICoga2VlcHMgaXRzIGhpc3RvcmljYWwgb25lLWVudHJ5LXBlci1wYXJlbnQgZGVkdXAuXG4gICAqL1xuICBmdW5jdGlvbiBsaW5rUGFyZW50KFxuICAgIG5vZGU6IENhdXNhbE5vZGUsXG4gICAgcGFyZW50Q29tbWl0OiBDb21taXRCdW5kbGUsXG4gICAga2luZDogJ2RhdGEnIHwgJ2NvbnRyb2wnLFxuICAgIGtleTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGRlcHRoOiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmVudElkID0gcGFyZW50Q29tbWl0LnJ1bnRpbWVTdGFnZUlkO1xuICAgIC8vICNQMTogdGhlIHBhcmVudCdzIGV4cGFuc2lvbiByZWFkcywgcmVzb2x2ZWQgTEFaSUxZIChvbmx5IGZvciBuZXcgbm9kZXNcbiAgICAvLyBvciBwZXItd3JpdGUgcmUtZXhwYW5zaW9uIOKAlCBkdXBsaWNhdGUgbGlua3MgdW5kZXIgJ3N0YWdlJyBwYXkgbm90aGluZykuXG4gICAgLy8gRGF0YSBsaW5rcyBleHBhbmQgdGhyb3VnaCB0aGUgcmVhZHMgdGhhdCBmZWQgdGhlIHBhcmVudCdzIHdyaXRlIG9mXG4gICAgLy8gYGtleWA7IGNvbnRyb2wgbGlua3MgZXhwYW5kIHRoZSBkZWNpZGVyIGF0IHN0YWdlIGxldmVsIChhIGRlY2lzaW9uXG4gICAgLy8gZGVwZW5kcyBvbiBldmVyeXRoaW5nIGl0IHJlYWQpLlxuICAgIGNvbnN0IHJlc29sdmVMaW5rUmVhZHMgPSAoKTogW3N0cmluZ1tdLCBib29sZWFuXSA9PlxuICAgICAga2luZCA9PT0gJ2RhdGEnXG4gICAgICAgID8gcmVhZHNGb3JMaW5rcyhwYXJlbnRDb21taXQsIGtleSAhPT0gdW5kZWZpbmVkID8gW2tleV0gOiB1bmRlZmluZWQpXG4gICAgICAgIDogW2dldEtleXNSZWFkKHBhcmVudElkKSwgdHJ1ZV07XG5cbiAgICBsZXQgcGFyZW50Tm9kZSA9IG5vZGVNYXAuZ2V0KHBhcmVudElkKTtcbiAgICBpZiAoIXBhcmVudE5vZGUpIHtcbiAgICAgIC8vIE5ldyBub2RlIOKAlCBjcmVhdGUgYW5kIGVucXVldWUgKHJlc3BlY3RpbmcgdGhlIG5vZGUgYnVkZ2V0KVxuICAgICAgaWYgKHZpc2l0ZWQgPj0gbWF4Tm9kZXMpIHtcbiAgICAgICAgdHJ1bmNhdGVkQnlOb2RlcyA9IHRydWU7IC8vIEQ0OiBhIGRpc2NvdmVyZWQgcGFyZW50IHdhcyBkcm9wcGVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcGFyZW50SWR4ID0gaWR4TWFwLmdldChwYXJlbnRJZCk7XG4gICAgICBpZiAocGFyZW50SWR4ID09PSB1bmRlZmluZWQpIHJldHVybjtcblxuICAgICAgcGFyZW50Tm9kZSA9IHtcbiAgICAgICAgcnVudGltZVN0YWdlSWQ6IHBhcmVudElkLFxuICAgICAgICBzdGFnZUlkOiBwYXJlbnRDb21taXQuc3RhZ2VJZCxcbiAgICAgICAgc3RhZ2VOYW1lOiBwYXJlbnRDb21taXQuc3RhZ2UsXG4gICAgICAgIGtleXNXcml0dGVuOiBwYXJlbnRDb21taXQudHJhY2UubWFwKCh0KSA9PiB0LnBhdGgpLFxuICAgICAgICAvLyBsaW5rZWRCeSBzdGF5cyBhIERBVEEta2V5IGNvbmNlcHQgKGJhY2stY29tcGF0KSDigJQgY29udHJvbC1saW5rZWRcbiAgICAgICAgLy8gbm9kZXMgY2FycnkgdGhlaXIgbGFiZWwgb24gdGhlIGVkZ2UgaW5zdGVhZC5cbiAgICAgICAgbGlua2VkQnk6IGtpbmQgPT09ICdkYXRhJyA/IGtleSA/PyAnJyA6ICcnLFxuICAgICAgICBkZXB0aDogZGVwdGggKyAxLFxuICAgICAgICBwYXJlbnRzOiBbXSxcbiAgICAgICAgcGFyZW50RWRnZXM6IFtdLFxuICAgICAgICAuLi5pbmNvbXBsZXRlU291cmNlc0ZyYWdtZW50KHBhcmVudENvbW1pdCksXG4gICAgICB9O1xuICAgICAgbm9kZU1hcC5zZXQocGFyZW50SWQsIHBhcmVudE5vZGUpO1xuICAgICAgdmlzaXRlZCsrO1xuICAgICAgY29uc3QgW2xpbmtSZWFkcywgbGlua0lzRnVsbF0gPSByZXNvbHZlTGlua1JlYWRzKCk7XG4gICAgICBleHBhbmRlZFJlYWRzLnNldChwYXJlbnRJZCwgbmV3IFNldChsaW5rUmVhZHMpKTtcbiAgICAgIGlmIChsaW5rSXNGdWxsKSBmdWxseUV4cGFuZGVkLmFkZChwYXJlbnRJZCk7XG4gICAgICBxdWV1ZS5wdXNoKFtwYXJlbnROb2RlLCBwYXJlbnRJZHgsIGRlcHRoICsgMSwgbGlua1JlYWRzXSk7XG4gICAgfSBlbHNlIGlmIChwZXJXcml0ZSAmJiAhZnVsbHlFeHBhbmRlZC5oYXMocGFyZW50SWQpKSB7XG4gICAgICAvLyAjUDEgd29ya2xpc3Q6IGFuIEVYSVNUSU5HIG5vZGUgbGlua2VkIHZpYSBhbm90aGVyIGtleSBtYXkgb3dlIG1vcmVcbiAgICAgIC8vIGV4cGFuc2lvbiDigJQgZW5xdWV1ZSBvbmx5IHRoZSByZWFkcyBub3QgeWV0IGV4cGFuZGVkIChtb25vdG9uZTsgdGhlXG4gICAgICAvLyBub2RlIGJ1ZGdldCBpcyB1bnRvdWNoZWQsIG5vIG5vZGUgaXMgY3JlYXRlZCkuIFJlLWV4cGFuc2lvbiBrZWVwc1xuICAgICAgLy8gdGhlIG5vZGUncyBPUklHSU5BTCBkZXB0aCBzbyBpdHMgcGFyZW50cyBnZXQgYSBjb25zaXN0ZW50IGRlcHRoKzEuXG4gICAgICBjb25zdCBbbGlua1JlYWRzLCBsaW5rSXNGdWxsXSA9IHJlc29sdmVMaW5rUmVhZHMoKTtcbiAgICAgIGNvbnN0IGV4cGFuZGVkID0gZXhwYW5kZWRSZWFkcy5nZXQocGFyZW50SWQpITtcbiAgICAgIGNvbnN0IGRlbHRhID0gbGlua1JlYWRzLmZpbHRlcigoaykgPT4gIWV4cGFuZGVkLmhhcyhrKSk7XG4gICAgICBpZiAobGlua0lzRnVsbCkgZnVsbHlFeHBhbmRlZC5hZGQocGFyZW50SWQpO1xuICAgICAgaWYgKGRlbHRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yIChjb25zdCBrIG9mIGRlbHRhKSBleHBhbmRlZC5hZGQoayk7XG4gICAgICAgIGNvbnN0IHBhcmVudElkeCA9IGlkeE1hcC5nZXQocGFyZW50SWQpO1xuICAgICAgICBpZiAocGFyZW50SWR4ICE9PSB1bmRlZmluZWQpIHF1ZXVlLnB1c2goW3BhcmVudE5vZGUsIHBhcmVudElkeCwgcGFyZW50Tm9kZS5kZXB0aCwgZGVsdGFdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEQUcgbWVyZ2U6IG9uZSBwYXJlbnRzW10gZW50cnkgcGVyIGRpc3RpbmN0IHBhcmVudCAoaGlzdG9yaWNhbCBzaGFwZSlcbiAgICBpZiAoIW5vZGUucGFyZW50cy5zb21lKChwKSA9PiBwLnJ1bnRpbWVTdGFnZUlkID09PSBwYXJlbnRJZCkpIHtcbiAgICAgIG5vZGUucGFyZW50cy5wdXNoKHBhcmVudE5vZGUpO1xuICAgIH1cbiAgICAvLyBPbmUgZWRnZSBwZXIgZGlzdGluY3QgKHBhcmVudCwga2luZCwga2V5KSBsaW5rLiBUaGUgd2VpZ2hlciAoRDQpXG4gICAgLy8gc3RhbXBzIHRoZSB3ZWlnaHQgYXQgY3JlYXRpb247IGB1bmRlZmluZWRgIOKGkiAxLjAg4oCUIHRoZSBlbmdpbmUgbmV2ZXJcbiAgICAvLyBjb21wdXRlcyB3ZWlnaHRzIGl0c2VsZi5cbiAgICBpZiAoIW5vZGUucGFyZW50RWRnZXMuc29tZSgoZSkgPT4gZS5wYXJlbnQucnVudGltZVN0YWdlSWQgPT09IHBhcmVudElkICYmIGUua2luZCA9PT0ga2luZCAmJiBlLmtleSA9PT0ga2V5KSkge1xuICAgICAgLy8gRXJyb3IgaXNvbGF0aW9uIChyZXZpZXcgZmluZGluZyk6IGEgY29uc3VtZXIgd2VpZ2hlciB0aGF0IHRocm93c1xuICAgICAgLy8gbXVzdCBkZWdyYWRlIHRvIHRoZSBkZWZhdWx0IHdlaWdodCwgbmV2ZXIgY3Jhc2ggdGhlIHNsaWNlIOKAlCB0aGVcbiAgICAgIC8vIHNhbWUgY29udHJhY3QgZXZlcnkgb3RoZXIgY29uc3VtZXIgY2FsbGJhY2sgaW4gdGhlIGxpYnJhcnkgZ2V0cy5cbiAgICAgIGxldCB3ZWlnaHQgPSAxLjA7XG4gICAgICBpZiAod2VpZ2gpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB3ZWlnaHQgPSB3ZWlnaChub2RlLCBwYXJlbnROb2RlLCBrZXksIGtpbmQpID8/IDEuMDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLyogd2VpZ2hlciB0aHJldyDigJQga2VlcCAxLjAsIHRoZSBzbGljZSBzdGF5cyB1c2FibGUgKi9cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbm9kZS5wYXJlbnRFZGdlcy5wdXNoKHsgcGFyZW50OiBwYXJlbnROb2RlLCBraW5kLCBrZXksIHdlaWdodCB9KTtcbiAgICB9XG4gIH1cblxuICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IFtub2RlLCBjb21taXRJZHgsIGRlcHRoLCBrZXlzVG9FeHBhbmRdID0gcXVldWUuc2hpZnQoKSE7XG5cbiAgICBpZiAoZGVwdGggPj0gbWF4RGVwdGgpIHtcbiAgICAgIC8vIEQ0OiBvbmx5IGEgbm9kZSB0aGF0IHN0aWxsIEhBRCBzb21ldGhpbmcgdG8gZXhwYW5kIGNvdW50cyBhcyBhIGN1dFxuICAgICAgLy8gKGEgbGVhZiBhdCB0aGUgaG9yaXpvbiB0cnVuY2F0ZXMgbm90aGluZykuXG4gICAgICBpZiAoa2V5c1RvRXhwYW5kLmxlbmd0aCA+IDAgfHwgY29udHJvbERlcHM/Lihub2RlLnJ1bnRpbWVTdGFnZUlkKSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRydW5jYXRlZEJ5RGVwdGggPSB0cnVlO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gRGF0YSBlZGdlczogZm9yIGVhY2gga2V5IGluIHRoaXMgZXhwYW5zaW9uJ3MgcmVhZC1zZXQsIGZpbmQgd2hvIHdyb3RlXG4gICAgLy8gaXQuIFVuZGVyICdzdGFnZScgdGhpcyBpcyB0aGUgbm9kZSdzIGZ1bGwgcmVhZC1zZXQgKGhpc3RvcmljYWxcbiAgICAvLyBiZWhhdmlvcik7IHVuZGVyICdwZXItd3JpdGUnIGl0IGlzIHRoZSBsaW5raW5nIHdyaXRlcycgdGVtcG9yYWwgcHJlZml4XG4gICAgLy8gKG9yIGEgd29ya2xpc3QgZGVsdGEgb24gcmUtZXhwYW5zaW9uKS5cbiAgICBjb25zdCBrZXlzUmVhZCA9IGtleXNUb0V4cGFuZDtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzUmVhZCkge1xuICAgICAgY29uc3Qgd3JpdGVyID0gZmluZFdyaXRlcihrZXksIGNvbW1pdElkeCk7XG4gICAgICBpZiAoIXdyaXRlcikgY29udGludWU7XG4gICAgICBsaW5rUGFyZW50KG5vZGUsIHdyaXRlciwgJ2RhdGEnLCBrZXksIGRlcHRoKTtcbiAgICB9XG5cbiAgICAvLyBDb250cm9sIGVkZ2UgKFJGQy0wMDMgRDMpOiBsaW5rIHRoZSBnb3Zlcm5pbmcgZGVjaWRlciwgbGFiZWxlZCBieSB0aGVcbiAgICAvLyBkZWNpZGUoKSBydWxlIGxhYmVsIHdoZW4gcHJlc2VudC4gVGhlIGRlY2lkZXIgbm9kZSB0aGVuIGV4cGFuZHNcbiAgICAvLyBub3JtYWxseSB0aHJvdWdoIGl0cyBvd24gZGF0YSByZWFkcyAoYW5kIGl0cyBvd24gY29udHJvbCBwYXJlbnQpLlxuICAgIGlmIChjb250cm9sRGVwcykge1xuICAgICAgY29uc3QgZGVwID0gY29udHJvbERlcHMobm9kZS5ydW50aW1lU3RhZ2VJZCk7XG4gICAgICBpZiAoZGVwKSB7XG4gICAgICAgIGNvbnN0IGRlY2lkZXJJZHggPSBpZHhNYXAuZ2V0KGRlcC5kZWNpZGVySWQpO1xuICAgICAgICBpZiAoZGVjaWRlcklkeCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgbGlua1BhcmVudChub2RlLCBjb21taXRMb2dbZGVjaWRlcklkeF0sICdjb250cm9sJywgZGVwLmxhYmVsLCBkZXB0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSRkMtMDAzIEQ0IOKAlCB0cnVuY2F0aW9uIHZpc2liaWxpdHkgb24gdGhlIHJvb3QgKGFic2VudCB3aGVuIGNvbXBsZXRlKS5cbiAgaWYgKHRydW5jYXRlZEJ5RGVwdGggfHwgdHJ1bmNhdGVkQnlOb2Rlcykge1xuICAgIHJvb3QudHJ1bmNhdGVkID0geyBieURlcHRoOiB0cnVuY2F0ZWRCeURlcHRoLCBieU5vZGVzOiB0cnVuY2F0ZWRCeU5vZGVzIH07XG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW2Zvb3RwcmludF0gY2F1c2FsQ2hhaW4oJyR7c3RhcnRJZH0nKSB0cnVuY2F0ZWQgYnkgYCArXG4gICAgICAgICAgYCR7W3RydW5jYXRlZEJ5RGVwdGggJiYgYG1heERlcHRoICgke21heERlcHRofSlgLCB0cnVuY2F0ZWRCeU5vZGVzICYmIGBtYXhOb2RlcyAoJHttYXhOb2Rlc30pYF1cbiAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgIC5qb2luKCcgKyAnKX0g4oCUIHRoZSBzbGljZSBpcyBpbmNvbXBsZXRlLiBSYWlzZSB0aGUgbGltaXRzIG9yIG5hcnJvdyBrZXlzUmVhZC5gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcm9vdDtcbn1cblxuLy8g4pSA4pSAIFV0aWxpdGllcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBGbGF0dGVuIHRoZSBjYXVzYWwgREFHIGludG8gYSBCRlMtb3JkZXJlZCBsaXN0IG9mIG5vZGVzLlxuICogRWFjaCBub2RlIGFwcGVhcnMgZXhhY3RseSBvbmNlIChmaXJzdCBvY2N1cnJlbmNlIGJ5IEJGUyBvcmRlcikuXG4gKiBVc2VmdWwgZm9yIGxpbmVhciBkaXNwbGF5IG9yIGl0ZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5DYXVzYWxEQUcocm9vdDogQ2F1c2FsTm9kZSk6IENhdXNhbE5vZGVbXSB7XG4gIGNvbnN0IHJlc3VsdDogQ2F1c2FsTm9kZVtdID0gW107XG4gIGNvbnN0IHZpc2l0ZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgcXVldWU6IENhdXNhbE5vZGVbXSA9IFtyb290XTtcblxuICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IG5vZGUgPSBxdWV1ZS5zaGlmdCgpITtcbiAgICBpZiAodmlzaXRlZC5oYXMobm9kZS5ydW50aW1lU3RhZ2VJZCkpIGNvbnRpbnVlO1xuICAgIHZpc2l0ZWQuYWRkKG5vZGUucnVudGltZVN0YWdlSWQpO1xuICAgIHJlc3VsdC5wdXNoKG5vZGUpO1xuXG4gICAgZm9yIChjb25zdCBwYXJlbnQgb2Ygbm9kZS5wYXJlbnRzKSB7XG4gICAgICBpZiAoIXZpc2l0ZWQuaGFzKHBhcmVudC5ydW50aW1lU3RhZ2VJZCkpIHtcbiAgICAgICAgcXVldWUucHVzaChwYXJlbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRm9ybWF0IGEgY2F1c2FsIERBRyBhcyBodW1hbi1yZWFkYWJsZSBpbmRlbnRlZCB0ZXh0LlxuICogU2hvd3MgdGhlIGRlcGVuZGVuY3kgY2hhaW4gd2l0aCBkZXB0aCBpbmRlbnRhdGlvbiBhbmQgbGlua2VkLWJ5IGtleXMuXG4gKlxuICogUkZDLTAwMyBEMjogbm9kZXMgdGhhdCBjb25zdW1lZCB1bnRyYWNrZWQgcmVhZCBwYXRocyByZW5kZXIgYW4gZXh0cmFcbiAqIGDimqAgYWxzbyBjb25zdW1lZCDigKYg4oCUIHNsaWNlIG1heSBiZSBpbmNvbXBsZXRlIGhlcmVgIGxpbmUsIHNvIGEgY29uc3VtZXJcbiAqIChodW1hbiBvciBMTE0pIGRlYnVnZ2luZyBmcm9tIHRoZSBzbGljZSBpcyBUT0xEIHdoZW4gaXQgaXMgaW5jb21wbGV0ZS5cbiAqXG4gKiBSRkMtMDAzIEQzOiBjb250cm9sIGVkZ2VzIHJlbmRlciBhcyBg4oaQIFtjb250cm9sOiA8cnVsZSBsYWJlbD5dYFxuICogKGxhYmVsIG9taXR0ZWQgd2hlbiB0aGUgZGVjaXNpb24gY2FycmllZCBub25lKS4gRGF0YSByZW5kZXJpbmcgaXNcbiAqIGJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBwcmUtRDMgb3V0cHV0IOKAlCBg4oaQIHZpYSA8a2V5PmAgZnJvbSB0aGUgbm9kZSdzXG4gKiBkaXNjb3ZlcnktdGltZSBgbGlua2VkQnlgLlxuICpcbiAqIFJGQy0wMDMgRDQ6IGVkZ2Ugd2VpZ2h0cyBmcm9tIHRoZSBgd2VpZ2hgIGhvb2sgcmVuZGVyIGFzIGEgc3VmZml4IOKAlFxuICogYOKGkCB2aWEgc3lzdGVtUHJvbXB0ICgwLjE4KWAg4oCUIG9ubHkgd2hlbiDiiaAgMS4wLCBzbyB1bndlaWdodGVkIG91dHB1dCBpc1xuICogdW5jaGFuZ2VkLiBBIHRydW5jYXRlZCBzbGljZSAocm9vdC50cnVuY2F0ZWQpIGFwcGVuZHMgYSBmaW5hbFxuICogYOKaoCBzbGljZSB0cnVuY2F0ZWQg4oCmYCBsaW5lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0Q2F1c2FsQ2hhaW4ocm9vdDogQ2F1c2FsTm9kZSk6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCB2aXNpdGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgY29uc3Qgd2VpZ2h0U3VmZml4ID0gKGVkZ2U6IENhdXNhbEVkZ2UgfCB1bmRlZmluZWQpOiBzdHJpbmcgPT5cbiAgICBlZGdlICE9PSB1bmRlZmluZWQgJiYgZWRnZS53ZWlnaHQgIT09IDEgPyBgICgke2VkZ2Uud2VpZ2h0fSlgIDogJyc7XG5cbiAgZnVuY3Rpb24gd2Fsayhub2RlOiBDYXVzYWxOb2RlLCBpbmRlbnQ6IG51bWJlciwgZWRnZXNGcm9tQ2hpbGQ/OiBDYXVzYWxFZGdlW10pOiB2b2lkIHtcbiAgICBpZiAodmlzaXRlZC5oYXMobm9kZS5ydW50aW1lU3RhZ2VJZCkpIHtcbiAgICAgIGxpbmVzLnB1c2goYCR7JyAgJy5yZXBlYXQoaW5kZW50KX3ihrMgJHtub2RlLnJ1bnRpbWVTdGFnZUlkfSAoc2VlIGFib3ZlKWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2aXNpdGVkLmFkZChub2RlLnJ1bnRpbWVTdGFnZUlkKTtcblxuICAgIGNvbnN0IGxpbmtQYXJ0czogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAobm9kZS5saW5rZWRCeSkge1xuICAgICAgY29uc3QgZGF0YUVkZ2UgPSBlZGdlc0Zyb21DaGlsZD8uZmluZCgoZSkgPT4gZS5raW5kID09PSAnZGF0YScpO1xuICAgICAgbGlua1BhcnRzLnB1c2goYHZpYSAke25vZGUubGlua2VkQnl9JHt3ZWlnaHRTdWZmaXgoZGF0YUVkZ2UpfWApO1xuICAgIH1cbiAgICBjb25zdCBjb250cm9sRWRnZSA9IGVkZ2VzRnJvbUNoaWxkPy5maW5kKChlKSA9PiBlLmtpbmQgPT09ICdjb250cm9sJyk7XG4gICAgaWYgKGNvbnRyb2xFZGdlKSB7XG4gICAgICBsaW5rUGFydHMucHVzaChgW2NvbnRyb2wke2NvbnRyb2xFZGdlLmtleSA/IGA6ICR7Y29udHJvbEVkZ2Uua2V5fWAgOiAnJ31dJHt3ZWlnaHRTdWZmaXgoY29udHJvbEVkZ2UpfWApO1xuICAgIH1cbiAgICBjb25zdCBsaW5rID0gbGlua1BhcnRzLmxlbmd0aCA+IDAgPyBgIOKGkCAke2xpbmtQYXJ0cy5qb2luKCcg4oaQICcpfWAgOiAnJztcblxuICAgIGNvbnN0IHdyaXRlcyA9IG5vZGUua2V5c1dyaXR0ZW4ubGVuZ3RoID4gMCA/IGAgW3dyb3RlOiAke25vZGUua2V5c1dyaXR0ZW4uam9pbignLCAnKX1dYCA6ICcnO1xuICAgIGxpbmVzLnB1c2goYCR7JyAgJy5yZXBlYXQoaW5kZW50KX0ke25vZGUuc3RhZ2VOYW1lfSAoJHtub2RlLnJ1bnRpbWVTdGFnZUlkfSkke2xpbmt9JHt3cml0ZXN9YCk7XG5cbiAgICBpZiAobm9kZS5pbmNvbXBsZXRlU291cmNlcyAmJiBub2RlLmluY29tcGxldGVTb3VyY2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxpbmVzLnB1c2goXG4gICAgICAgIGAkeycgICcucmVwZWF0KGluZGVudCArIDEpfeKaoCBhbHNvIGNvbnN1bWVkICR7bm9kZS5pbmNvbXBsZXRlU291cmNlcy5qb2luKCcvJyl9IOKAlCBzbGljZSBtYXkgYmUgaW5jb21wbGV0ZSBoZXJlYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwYXJlbnQgb2Ygbm9kZS5wYXJlbnRzKSB7XG4gICAgICB3YWxrKFxuICAgICAgICBwYXJlbnQsXG4gICAgICAgIGluZGVudCArIDEsXG4gICAgICAgIG5vZGUucGFyZW50RWRnZXMuZmlsdGVyKChlKSA9PiBlLnBhcmVudCA9PT0gcGFyZW50KSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgd2Fsayhyb290LCAwKTtcblxuICBpZiAocm9vdC50cnVuY2F0ZWQpIHtcbiAgICBjb25zdCBjYXVzZXMgPSBbcm9vdC50cnVuY2F0ZWQuYnlEZXB0aCAmJiAnbWF4RGVwdGggcmVhY2hlZCcsIHJvb3QudHJ1bmNhdGVkLmJ5Tm9kZXMgJiYgJ21heE5vZGVzIHJlYWNoZWQnXVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLmpvaW4oJywgJyk7XG4gICAgbGluZXMucHVzaChg4pqgIHNsaWNlIHRydW5jYXRlZCAoJHtjYXVzZXN9KSDigJQgb2xkZXIgY2F1c2VzIGV4aXN0IGJleW9uZCB0aGlzIGhvcml6b25gKTtcbiAgfVxuXG4gIHJldHVybiBsaW5lcy5qb2luKCdcXG4nKTtcbn1cblxuLy8g4pSA4pSAIEV4cG9ydGVkIGZvciB0ZXN0aW5nIChpbnRlcm5hbCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBAaW50ZXJuYWwgRXhwb3NlZCBmb3IgdGVzdGluZyB0aGUgc3RyYXRlZ3kgc2VsZWN0aW9uLiAqL1xuZXhwb3J0IGNvbnN0IF9SRVZFUlNFX0lOREVYX1RIUkVTSE9MRCA9IFJFVkVSU0VfSU5ERVhfVEhSRVNIT0xEO1xuIl19
|
package/dist/lib/memory/types.js
CHANGED
|
@@ -13,4 +13,4 @@ exports.SUMMARY_PREVIEW_LENGTH = exports.READ_PREVIEW_LENGTH = void 0;
|
|
|
13
13
|
var summarize_js_1 = require("../capture/summarize.js");
|
|
14
14
|
Object.defineProperty(exports, "READ_PREVIEW_LENGTH", { enumerable: true, get: function () { return summarize_js_1.READ_PREVIEW_LENGTH; } });
|
|
15
15
|
Object.defineProperty(exports, "SUMMARY_PREVIEW_LENGTH", { enumerable: true, get: function () { return summarize_js_1.SUMMARY_PREVIEW_LENGTH; } });
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL21lbW9yeS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7OztBQXVHSCx3REFBc0Y7QUFBN0UsbUhBQUEsbUJBQW1CLE9BQUE7QUFBRSxzSEFBQSxzQkFBc0IsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogdHlwZXMudHMg4oCUIENvcmUgdHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIG1lbW9yeSBsaWJyYXJ5XG4gKlxuICogWmVybyBkZXBlbmRlbmNpZXMgb24gb2xkIGNvZGUgb3Igb3RoZXIgbGlicmFyaWVzIGluIHRoaXMgcGFja2FnZSwgd2l0aCBvbmVcbiAqIGRlbGliZXJhdGUgZXhjZXB0aW9uOiBgY2FwdHVyZS9gIOKAlCB0aGUgc3RhbmRhbG9uZSBsZWFmIG1vZHVsZSBob2xkaW5nIHRoZVxuICogc2hhcmVkIHJldGVudGlvbi1wb2xpY3kgZmFtaWx5IGFuZCBzdW1tYXJ5LW1hcmtlciBidWlsZGVycyAoZXh0cmFjdGVkIGZyb21cbiAqIGhlcmUgaW4gIzEzYy1BIHNvIHRoZSByZWFkIGFuZCB3cml0ZSBkaWFscywgYW5kIGxhdGVyIFJGQy0wMDEsIHNoYXJlIG9uZVxuICogaW1wbGVtZW50YXRpb24pLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmV0ZW50aW9uUG9saWN5IH0gZnJvbSAnLi4vY2FwdHVyZS9wb2xpY2llcy5qcyc7XG5cbi8vIOKUgOKUgCBQYXRjaCAmIFRyYWNlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogQSBmbGF0IGtleS12YWx1ZSBiYWcgcmVwcmVzZW50aW5nIGEgc3RhdGUgcGF0Y2ggKG92ZXJ3cml0ZSBvciBtZXJnZSkuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeVBhdGNoIHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG4vKiogQSBzaW5nbGUgZW50cnkgaW4gdGhlIGNocm9ub2xvZ2ljYWwgb3BlcmF0aW9uIHRyYWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFjZUVudHJ5IHtcbiAgLyoqIENhbm9uaWNhbCBwYXRoIHN0cmluZyAoc2VnbWVudHMgam9pbmVkIGJ5IERFTElNKS4gKi9cbiAgcGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogLSBgJ3NldCdgICAgIOKAlCBoYXJkIG92ZXJ3cml0ZTsgYG92ZXJ3cml0ZVtwYXRoXWAgaG9sZHMgdGhlIGZ1bGwgZmluYWwgdmFsdWUuXG4gICAqIC0gYCdtZXJnZSdgICDigJQgZGVlcCB1bmlvbiBtZXJnZTsgYHVwZGF0ZXNbcGF0aF1gIGhvbGRzIHRoZSBhY2N1bXVsYXRlZCBkZWx0YS5cbiAgICogLSBgJ2FwcGVuZCdgIOKAlCAoIzEzYy1CLCBwcm9kdWNlZCBvbmx5IHVuZGVyIHtAbGluayBDb21taXRWYWx1ZXNNb2RlfVxuICAgKiAgIGAnZGVsdGEnYCkgdGhlIHBhdGgncyBmaW5hbCB2YWx1ZSBpcyBpdHMgYmFzZSB2YWx1ZSBwbHVzIGEgdGFpbCBvZiBuZXdcbiAgICogICB0cmFpbGluZyBlbGVtZW50czsgYG92ZXJ3cml0ZVtwYXRoXWAgaG9sZHMgT05MWSB0aGUgdGFpbC4gUmVwbGF5XG4gICAqICAgcmVjb25zdHJ1Y3RzIGJ5IGNvbmNhdGVuYXRpb24uIE5PVCBpZGVtcG90ZW50IOKAlCBkZWx0YS1tb2RlIGJ1bmRsZXNcbiAgICogICBjYXJyeSBleGFjdGx5IG9uZSB0cmFjZSBlbnRyeSBwZXIgc3Vydml2aW5nIHBhdGguXG4gICAqIC0gYCdkZWxldGUnYCDigJQgKCMxM2MtQiwgcHJvZHVjZWQgb25seSB1bmRlciBgJ2RlbHRhJ2A7IGFic29yYnMgYmFja2xvZ1xuICAgKiAgIEI4KSB0aGUga2V5IHdhcyBleHBsaWNpdGx5IHJlbW92ZWQgdmlhIGBkZWxldGVWYWx1ZSgpYC4gUmVwbGF5IHJlbW92ZXNcbiAgICogICB0aGUga2V5LiBgb3ZlcndyaXRlW3BhdGhdYCBzdGlsbCBFTlVNRVJBVEVTIHRoZSBwYXRoICh2YWx1ZVxuICAgKiAgIGB1bmRlZmluZWRgKSBzbyBrZXktc2V0IGNvbnN1bWVycyBrZWVwIHNlZWluZyB0aGUgY2hhbmdlZCBrZXkuXG4gICAqXG4gICAqIGBvdmVyd3JpdGVgIHZhbHVlcyBhcmUgdGhlcmVmb3JlIFZFUkItUVVBTElGSUVEOiBjb25zdW1lcnMgdGhhdCByZWFkXG4gICAqIGBidW5kbGUub3ZlcndyaXRlW2tleV1gIGFzIFwidGhlIGZ1bGwgdmFsdWUgd3JpdHRlblwiIG11c3QgdXNlXG4gICAqIGBjb21taXRWYWx1ZUF0KGNvbW1pdExvZywgaWR4LCBrZXkpYCAoZnJvbSBgZm9vdHByaW50anMvdHJhY2VgKSB3aGVuIHRoZVxuICAgKiBsb2cgbWF5IGNvbnRhaW4gZGVsdGEtbW9kZSBidW5kbGVzLlxuICAgKi9cbiAgdmVyYjogJ3NldCcgfCAnbWVyZ2UnIHwgJ2FwcGVuZCcgfCAnZGVsZXRlJztcbn1cblxuLyoqXG4gKiBSRkMtMDAzIEQyIOKAlCByZWFkIHBhdGhzIHRoYXQgQllQQVNTIHJlYWQgdHJhY2tpbmc6XG4gKiAtIGAnYXJncydgICAg4oCUIHRoZSBzdGFnZSBjYWxsZWQgYGdldEFyZ3MoKWAgLyBgJGdldEFyZ3MoKWAgd2l0aCBub24tZW1wdHlcbiAqICAgcnVuIGlucHV0IChmcm96ZW4sIHVudHJhY2tlZCBieSBkZXNpZ24pXG4gKiAtIGAnZW52J2AgICAg4oCUIHRoZSBzdGFnZSBjYWxsZWQgYGdldEVudigpYCAvIGAkZ2V0RW52KClgIHdpdGggYSBub24tZW1wdHlcbiAqICAgZXhlY3V0aW9uIGVudmlyb25tZW50IChmcm96ZW4sIHVudHJhY2tlZCBieSBkZXNpZ24pXG4gKiAtIGAnc2lsZW50J2Ag4oCUIHRoZSBzdGFnZSBwZXJmb3JtZWQgYSBzaWxlbnQgcmVhZCAoYGdldFZhbHVlU2lsZW50YCAvXG4gKiAgIGBnZXRWYWx1ZURpcmVjdGApIG9mIGEga2V5IGl0IG5ldmVyIHRyYWNrZWQtcmVhZCBpbiB0aGUgc2FtZSBzdGFnZS5cbiAqICAgU2lsZW50IHJlYWRzIFNIQURPV0VEIGJ5IGEgdHJhY2tlZCByZWFkIG9mIHRoZSBzYW1lIGtleSBpbiB0aGUgc2FtZVxuICogICBzdGFnZSAoVHlwZWRTY29wZSBhcnJheS1wcm94eSBpbnRlcm5hbHMsIGAkYmF0Y2hBcnJheWApIGFyZSBOT1RcbiAqICAgZmxhZ2dlZCDigJQgdGhlaXIgcmVhZOKGkndyaXRlIGVkZ2UgaXMgYWxyZWFkeSBjYXB0dXJlZC5cbiAqL1xuZXhwb3J0IHR5cGUgVW50cmFja2VkU291cmNlID0gJ2FyZ3MnIHwgJ2VudicgfCAnc2lsZW50JztcblxuLyoqIFRoZSBhdG9taWMgYnVuZGxlIHByb2R1Y2VkIGJ5IFRyYW5zYWN0aW9uQnVmZmVyLmNvbW1pdCgpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21taXRCdW5kbGUge1xuICAvKiogQXV0by1hc3NpZ25lZCBzdGVwIGluZGV4IChzZXQgYnkgRXZlbnRMb2cucmVjb3JkKS4gKi9cbiAgaWR4PzogbnVtYmVyO1xuICAvKiogSHVtYW4tcmVhZGFibGUgc3RhZ2UgbmFtZS4gKi9cbiAgc3RhZ2U6IHN0cmluZztcbiAgLyoqIFN0YWJsZSBzdGFnZSBpZGVudGlmaWVyIChtYXRjaGVzIHNwZWMgbm9kZSBpZCkuICovXG4gIHN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFVuaXF1ZSBwZXItZXhlY3V0aW9uLXN0ZXAgaWRlbnRpZmllci4gRm9ybWF0OiBbc3ViZmxvd1BhdGgvXXN0YWdlSWQjZXhlY3V0aW9uSW5kZXggKi9cbiAgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIENocm9ub2xvZ2ljYWwgd3JpdGUgbG9nIGZvciBkZXRlcm1pbmlzdGljIHJlcGxheS4gKi9cbiAgdHJhY2U6IFRyYWNlRW50cnlbXTtcbiAgLyoqIFBhdGhzIHRoYXQgc2hvdWxkIGJlIHJlZGFjdGVkIGluIFVJIChzZW5zaXRpdmUgZGF0YSkuICovXG4gIHJlZGFjdGVkUGF0aHM6IHN0cmluZ1tdO1xuICAvKiogSGFyZCBvdmVyd3JpdGUgcGF0Y2hlcy4gKi9cbiAgb3ZlcndyaXRlOiBNZW1vcnlQYXRjaDtcbiAgLyoqIERlZXAgbWVyZ2UgcGF0Y2hlcy4gKi9cbiAgdXBkYXRlczogTWVtb3J5UGF0Y2g7XG4gIC8qKlxuICAgKiBSRkMtMDAzIEQyIGhvbmVzdHkgbWFya2VycyDigJQgdW50cmFja2VkIHJlYWQgcGF0aHMgdGhpcyBzdGFnZSBjb25zdW1lZFxuICAgKiAoc2VlIHtAbGluayBVbnRyYWNrZWRTb3VyY2V9KS4gQUJTRU5UIHdoZW4gdGhlIHN0YWdlIHVzZWQgbm9uZSwgc29cbiAgICogY2hhcnRzIHRoYXQgbmV2ZXIgdG91Y2ggdGhvc2UgcGF0aHMga2VlcCBieXRlLWlkZW50aWNhbCBjb21taXQgbG9ncy5cbiAgICogQ2F1c2FsLXNsaWNlIGNvbnN1bWVycyAoYGNhdXNhbENoYWluYC9gZm9ybWF0Q2F1c2FsQ2hhaW5gKSBzdXJmYWNlIHRoaXNcbiAgICogYXMgXCJzbGljZSBtYXkgYmUgaW5jb21wbGV0ZSBoZXJlXCIuIFJlc2lkdWFsIGxpbWl0YXRpb24gKGJ5IGRlc2lnbik6XG4gICAqIHZhbHVlcyBzbXVnZ2xlZCB0aHJvdWdoIEpTIGNsb3N1cmVzIGFyZSB1bmRldGVjdGFibGUuXG4gICAqL1xuICB1bnRyYWNrZWRTb3VyY2VzPzogUmVhZG9ubHlBcnJheTxVbnRyYWNrZWRTb3VyY2U+O1xufVxuXG4vLyDilIDilIAgRmxvdyBDb250cm9sIE5hcnJhdGl2ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFR5cGVzIG9mIGNvbnRyb2wgZmxvdyBkZWNpc2lvbnMgY2FwdHVyZWQgYnkgdGhlIGV4ZWN1dGlvbiBlbmdpbmUuICovXG5leHBvcnQgdHlwZSBGbG93Q29udHJvbFR5cGUgPSAnbmV4dCcgfCAnYnJhbmNoJyB8ICdjaGlsZHJlbicgfCAnc2VsZWN0ZWQnIHwgJ3N1YmZsb3cnIHwgJ2xvb3AnO1xuXG4vKiogQSBzaW5nbGUgZmxvdyBjb250cm9sIG5hcnJhdGl2ZSBlbnRyeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd01lc3NhZ2Uge1xuICB0eXBlOiBGbG93Q29udHJvbFR5cGU7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHRhcmdldFN0YWdlPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIHJhdGlvbmFsZT86IHN0cmluZztcbiAgY291bnQ/OiBudW1iZXI7XG4gIGl0ZXJhdGlvbj86IG51bWJlcjtcbiAgdGltZXN0YW1wPzogbnVtYmVyO1xufVxuXG4vLyDilIDilIAgUmVhZCAvIFdyaXRlIFRyYWNraW5nICgjMTQsICMxM2MtQSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vL1xuLy8gVGhlIHBvbGljeSBmYW1pbHkgYW5kIG1hcmtlciBzaGFwZXMgYXJlIG93bmVkIGJ5IGBjYXB0dXJlL2AgKHNoYXJlZCB3aXRoXG4vLyB0aGUgd3JpdGUgZGlhbCBhbmQsIGxhdGVyLCBSRkMtMDAxJ3MgZGVmZXJyZWQtb2JzZXJ2ZXIgY2FwdHVyZSB0aWVyKS5cbi8vIFJlLWV4cG9ydGVkIGhlcmUgc28gZXZlcnkgcHJlLWV4dHJhY3Rpb24gaW1wb3J0IHBhdGgga2VlcHMgd29ya2luZy5cblxuZXhwb3J0IHR5cGUgeyBSZXRlbnRpb25Qb2xpY3kgfSBmcm9tICcuLi9jYXB0dXJlL3BvbGljaWVzLmpzJztcbmV4cG9ydCB0eXBlIHsgUmVhZFN1bW1hcnlNYXJrZXIsIFdyaXRlU3VtbWFyeU1hcmtlciB9IGZyb20gJy4uL2NhcHR1cmUvc3VtbWFyaXplLmpzJztcbmV4cG9ydCB7IFJFQURfUFJFVklFV19MRU5HVEgsIFNVTU1BUllfUFJFVklFV19MRU5HVEggfSBmcm9tICcuLi9jYXB0dXJlL3N1bW1hcml6ZS5qcyc7XG5cbi8qKlxuICogUG9saWN5IGZvciBob3cgdHJhY2tlZCByZWFkcyBhcmUgcmVjb3JkZWQgaW50byBgU3RhZ2VTbmFwc2hvdC5zdGFnZVJlYWRzYC5cbiAqXG4gKiAtIGAnZnVsbCdgIChkZWZhdWx0KSDigJQgZXZlcnkgdHJhY2tlZCByZWFkIGBzdHJ1Y3R1cmVkQ2xvbmVgcyB0aGUgdmFsdWUgaW50b1xuICogICB0aGUgc3RhZ2UncyByZWFkIHZpZXcuIEJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBoaXN0b3JpY2FsIGJlaGF2aW9yOyB0aGlzIGlzXG4gKiAgIHdoYXQgc25hcHNob3QgY29uc3VtZXJzIChsZW5zLCBhZ2VudGZvb3RwcmludCkgc2VlIHRvZGF5LlxuICogLSBgJ3N1bW1hcnknYCDigJQgcmVhZHMgcmVjb3JkIGEgY2hlYXAge0BsaW5rIFJlYWRTdW1tYXJ5TWFya2VyfSAodHlwZSArIHNpemVcbiAqICAgcHJveHkgKyBzaG9ydCBwcmV2aWV3KSBpbnN0ZWFkIG9mIHRoZSBjbG9uZWQgdmFsdWUuIE8oMSktaXNoIHBlciByZWFkIOKAlFxuICogICBubyB2YWx1ZSBjbG9uZSwgbm8gc2VyaWFsaXphdGlvbiBvZiBsYXJnZSBvYmplY3RzLlxuICogLSBgJ29mZidgIOKAlCByZWFkcyBhcmUgbm90IHJlY29yZGVkIGF0IGFsbDsgYHN0YWdlUmVhZHNgIGlzIGFic2VudCBmcm9tIHRoZVxuICogICBzbmFwc2hvdC4gWmVybyBwZXItcmVhZCBjb3N0LiBWYWx1ZXMgYXJlIHN0aWxsIHJlYWRhYmxlLCBhbmQgdGhlXG4gKiAgIGBTY29wZVJlY29yZGVyLm9uUmVhZGAgZXZlbnQgc3RpbGwgZmlyZXMgKGl0IHBhc3NlcyB0aGUgbGl2ZSByZWZlcmVuY2UgYW5kXG4gKiAgIG5ldmVyIGNsb25lZCkg4oCUIHNvIG5hcnJhdGl2ZSBvdXRwdXQgaXMgaWRlbnRpY2FsIGluIGV2ZXJ5IG1vZGUuIFRoZSBwb2xpY3lcbiAqICAgc2NvcGVzIE9OTFkgdGhlIHNuYXBzaG90J3MgYHN0YWdlUmVhZHNgIHBheWxvYWQuXG4gKlxuICogU2V0IHZpYSBgbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0LCB7IHJlYWRUcmFja2luZyB9KWAgb3JcbiAqIGBleGVjdXRvci5zZXRSZWFkVHJhY2tpbmcobW9kZSlgIChiZWZvcmUgYHJ1bigpYCkuXG4gKlxuICogQWxpYXMgb2YgdGhlIHNoYXJlZCB7QGxpbmsgUmV0ZW50aW9uUG9saWN5fSBmYW1pbHkgKCMxM2MtQSkg4oCUIGtlcHQgYXMgdGhlXG4gKiBzaGlwcGVkIHB1YmxpYyBuYW1lIGZvciB0aGUgcmVhZCBkaWFsLlxuICovXG5leHBvcnQgdHlwZSBSZWFkVHJhY2tpbmdNb2RlID0gUmV0ZW50aW9uUG9saWN5O1xuXG4vKipcbiAqIFBvbGljeSBmb3IgaG93IHRyYWNrZWQgd3JpdGVzIGFyZSByZWNvcmRlZCBpbnRvIGBTdGFnZVNuYXBzaG90LnN0YWdlV3JpdGVzYFxuICogKCMxM2MtQSkg4oCUIHRoZSBzaWJsaW5nIG9mIHtAbGluayBSZWFkVHJhY2tpbmdNb2RlfS5cbiAqXG4gKiAtIGAnZnVsbCdgIChkZWZhdWx0KSDigJQgZXZlcnkgdHJhY2tlZCB3cml0ZSBgc3RydWN0dXJlZENsb25lYHMgdGhlIHZhbHVlIGludG9cbiAqICAgdGhlIHN0YWdlJ3Mgd3JpdGUgdmlldy4gQnl0ZS1pZGVudGljYWwgdG8gdGhlIGhpc3RvcmljYWwgYmVoYXZpb3IuXG4gKiAtIGAnc3VtbWFyeSdgIOKAlCB3cml0ZXMgcmVjb3JkIGEgY2hlYXAge0BsaW5rIFdyaXRlU3VtbWFyeU1hcmtlcn0gaW5zdGVhZCBvZlxuICogICB0aGUgY2xvbmVkIHZhbHVlLlxuICogLSBgJ29mZidgIOKAlCB3cml0ZXMgYXJlIG5vdCByZWNvcmRlZCBhdCBhbGw7IGBzdGFnZVdyaXRlc2AgaXMgYWJzZW50IGZyb20gdGhlXG4gKiAgIHNuYXBzaG90LiBUaGUgd3JpdGVzIHRoZW1zZWx2ZXMgc3RpbGwgY29tbWl0IHRvIHNoYXJlZCBzdGF0ZSBhbmQgc3RpbGxcbiAqICAgYXBwZWFyIGluIHRoZSBjb21taXQgbG9nIOKAlCBvbmx5IHRoZSBwZXItc3RhZ2Ugc25hcHNob3QgYm9va2tlZXBpbmcgKGFuZFxuICogICB0aGVyZWZvcmUgdGhlIGNvbW1pdCBvYnNlcnZlcidzIG11dGF0aW9ucyBwYXlsb2FkKSBpcyBhZmZlY3RlZC4gKFRoZVxuICogICBjb21taXQgbG9nJ3Mgb3duIHZhbHVlIGVuY29kaW5nIGhhcyBpdHMgb3duIGxvc3NsZXNzIGRpYWwg4oCUXG4gKiAgIHtAbGluayBDb21taXRWYWx1ZXNNb2RlfSwgIzEzYy1CLilcbiAqXG4gKiBTZXQgdmlhIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgd3JpdGVUcmFja2luZyB9KWAgb3JcbiAqIGBleGVjdXRvci5zZXRXcml0ZVRyYWNraW5nKG1vZGUpYCAoYmVmb3JlIGBydW4oKWApLiBTZWVcbiAqIGBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnMud3JpdGVUcmFja2luZ2AgZm9yIHRoZSBmdWxsIG9ic2VydmFibGUtY29uc2VxdWVuY2VcbiAqIGNvbnRyYWN0IChvbkNvbW1pdCBwYXlsb2FkLCByZWRhY3Rpb24gcHJlY2VkZW5jZSwgd2hhdCBpcyBPVVQgb2Ygc2NvcGUpLlxuICovXG5leHBvcnQgdHlwZSBXcml0ZVRyYWNraW5nTW9kZSA9IFJldGVudGlvblBvbGljeTtcblxuLyoqXG4gKiBQb2xpY3kgZm9yIGhvdyBjb21taXQtYnVuZGxlIFZBTFVFUyBhcmUgZW5jb2RlZCBpbnRvIHRoZSBjb21taXQgbG9nXG4gKiAoIzEzYy1CKSDigJQgY29tcGxldGVzIHRoZSBgcmVhZFRyYWNraW5nYC9gd3JpdGVUcmFja2luZ2AgZGlhbCBmYW1pbHkuXG4gKiBVbmxpa2UgdGhvc2UgdHdvICh3aGljaCBnYXRlIGxvc3N5IHNuYXBzaG90IGJvb2trZWVwaW5nKSwgdGhpcyBkaWFsIGlzXG4gKiAqKmxvc3NsZXNzIGluIGJvdGggbW9kZXMqKiDigJQgaXQgY2hhbmdlcyB0aGUgY29tbWl0IGxvZydzICplbmNvZGluZyosXG4gKiBuZXZlciBpdHMgKmluZm9ybWF0aW9uKjsgYW55IHN0ZXAncyBmdWxsIHN0YXRlIHN0YXlzIGV4YWN0bHlcbiAqIHJlY29uc3RydWN0YWJsZSBieSByZXBsYXkuXG4gKlxuICogLSBgJ2Z1bGwnYCAoZGVmYXVsdCkg4oCUIGV2ZXJ5IHN1cnZpdmluZyBgc2V0YCBwYXRoIHN0b3JlcyB0aGUgZnVsbCBmaW5hbFxuICogICB2YWx1ZSwgb25lIHRyYWNlIGVudHJ5IHBlciBvcGVyYXRpb24uIEJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBoaXN0b3JpY2FsXG4gKiAgIGJlaGF2aW9yLlxuICogLSBgJ2RlbHRhJ2Ag4oCUIHR3byBjaGFuZ2VzLCBib3RoIHJlcGxheS1jb3ZlcmVkIGJ5IGBhcHBseVNtYXJ0TWVyZ2VgOlxuICogICAxLiAqKmBhcHBlbmRgIGRldGVjdGlvbioqOiB3aGVuIGEgcGF0aCdzIG5ldCBjaGFuZ2UgaXMgXCJ0aGUgYmFzZSBhcnJheVxuICogICAgICBwbHVzIG5ldyB0cmFpbGluZyBlbGVtZW50c1wiIChzdHJpY3QgcHJlZml4KSwgdGhlIGJ1bmRsZSByZWNvcmRzIE9OTFlcbiAqICAgICAgdGhlIHRhaWwgdW5kZXIgYSBgdmVyYjogJ2FwcGVuZCdgIHRyYWNlIGVudHJ5IOKAlCB0aGUgZ3Jvd2luZy1oaXN0b3J5XG4gKiAgICAgIGNvbW1pdCBsb2cgYmVjb21lcyBsaW5lYXIgaW4gdGFpbCBzaXplIGluc3RlYWQgb2YgTyhOwrIpIHJldGFpbmVkLlxuICogICAgICBBIHJlYWwgYHZlcmI6ICdkZWxldGUnYCBlbnRyeSByZXBsYWNlcyB0aGUgYHNldDogdW5kZWZpbmVkYCBmbGF0dGVuaW5nXG4gKiAgICAgIGZvciBgZGVsZXRlVmFsdWUoKWAgKGNsb3NlcyB0aGUgZG9jdW1lbnRlZCBNZW1vcnlQYXRjaCBsaW1pdGF0aW9uKS5cbiAqICAgMi4gKipPbmUgdHJhY2UgZW50cnkgcGVyIHN1cnZpdmluZyBwYXRoKiogKGFwcGVuZCBpcyBub3QgaWRlbXBvdGVudCBvblxuICogICAgICByZXBsYXkpOiB0aGUgdmVyYiBpcyByZXNvbHZlZCBmcm9tIHRoZSBwYXRoJ3MgYmFzZeKGkmZpbmFsIHJlbGF0aW9uc2hpcFxuICogICAgICBhbmQgb3AgbWl4OyBlbnRyaWVzIGFyZSBvcmRlcmVkIGJ5IGVhY2ggcGF0aCdzIExBU1QgdG91Y2guXG4gKlxuICogSG9uZXN0IGNvc3Qgbm90ZTogYXBwZW5kIGRldGVjdGlvbiBpcyBORVcgd2FsbCB3b3JrIOKAlCBhbiBPKHxiYXNlfClcbiAqIHN0cnVjdHVyYWwgcHJlZml4IGNvbXBhcmUgcGVyIGFycmF5LXNldCBwYXRoIHBlciBjb21taXQgKHRvZGF5J3NcbiAqIGBkZWVwRXF1YWxgIGZhc3QtZmFpbHMgb24gbGVuZ3RoIGluIE8oMSkgZm9yIGEgZ3Jvd24gYXJyYXkpLiBPbiBhIGhpdCB0aGVcbiAqIGNvbW1pdCBnZXRzIGNoZWFwZXIgaW4gYm90aCB3YWxsIGFuZCBoZWFwICh0aGUgTyh8ZmluYWx8KSBjbG9uZSBzaHJpbmtzIHRvXG4gKiBPKHx0YWlsfCkpOyBvbiBhIG1pc3MgaXQgcGF5cyBjb21wYXJlICsgZnVsbCBjbG9uZS4gYCdmdWxsJ2AgcGF5cyB6ZXJvIOKAlFxuICogdGhlIGRldGVjdGlvbiBicmFuY2ggaXMgbW9kZS1nYXRlZC5cbiAqXG4gKiBTZXQgdmlhIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgY29tbWl0VmFsdWVzIH0pYCBvclxuICogYGV4ZWN1dG9yLnNldENvbW1pdFZhbHVlcyhtb2RlKWAgKGJlZm9yZSBgcnVuKClgKS4gVGhlIGFjdGl2ZSBtb2RlIGlzXG4gKiBzdXJmYWNlZCBhcyB0aGUgc25hcHNob3QgZGlzY3JpbWluYW50IGBSdW50aW1lU25hcHNob3QuY29tbWl0VmFsdWVzYC5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tbWl0VmFsdWVzTW9kZSA9ICdmdWxsJyB8ICdkZWx0YSc7XG5cbi8vIOKUgOKUgCBTdGFnZSBTbmFwc2hvdCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFNlcmlhbGlzYWJsZSByZXByZXNlbnRhdGlvbiBvZiBhIHN0YWdlJ3Mgc3RhdGUgKGZvciBkZWJ1Z2dpbmcgLyB2aXN1YWxpc2F0aW9uKS4gKi9cbmV4cG9ydCB0eXBlIFN0YWdlU25hcHNob3QgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBVbmlxdWUgcGVyLWV4ZWN1dGlvbi1zdGVwIGlkZW50aWZpZXIuIEZvcm1hdDogW3N1YmZsb3dQYXRoL11zdGFnZUlkI2V4ZWN1dGlvbkluZGV4ICovXG4gIHJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGlzIHN0YWdlIGRvZXMgKGZyb20gYnVpbGRlcikuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyIOKAlCBwcmVzZW50IHdoZW4gdGhpcyBzdGFnZSBpcyBhIHN1YmZsb3cgZW50cnkgcG9pbnQuICovXG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgaXNEZWNpZGVyPzogYm9vbGVhbjtcbiAgaXNGb3JrPzogYm9vbGVhbjtcbiAgLyoqIFVzZXItbGV2ZWwgd3JpdGVzIG1hZGUgYnkgdGhpcyBzdGFnZSAocHJlLW5hbWVzcGFjZSBrZXlzIOKGkiB2YWx1ZXMpLlxuICAgKiAgU2hhcGUgZGVwZW5kcyBvbiB7QGxpbmsgV3JpdGVUcmFja2luZ01vZGV9OiBjbG9uZWQgdmFsdWVzIHVuZGVyIGAnZnVsbCdgXG4gICAqICAoZGVmYXVsdCksIHtAbGluayBXcml0ZVN1bW1hcnlNYXJrZXJ9cyB1bmRlciBgJ3N1bW1hcnknYCwgYWJzZW50IHVuZGVyXG4gICAqICBgJ29mZidgLiBSZWRhY3RlZCB3cml0ZXMgc2hvdyBgJ1tSRURBQ1RFRF0nYCByZWdhcmRsZXNzIG9mIG1vZGUuICovXG4gIHN0YWdlV3JpdGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBVc2VyLWxldmVsIHJlYWRzIG1hZGUgYnkgdGhpcyBzdGFnZSAocHJlLW5hbWVzcGFjZSBrZXlzIOKGkiB2YWx1ZXMgYXQgcmVhZFxuICAgKiAgdGltZSkuIFNoYXBlIGRlcGVuZHMgb24ge0BsaW5rIFJlYWRUcmFja2luZ01vZGV9OiBjbG9uZWQgdmFsdWVzIHVuZGVyXG4gICAqICBgJ2Z1bGwnYCAoZGVmYXVsdCksIHtAbGluayBSZWFkU3VtbWFyeU1hcmtlcn1zIHVuZGVyIGAnc3VtbWFyeSdgLCBhYnNlbnRcbiAgICogIHVuZGVyIGAnb2ZmJ2AuICovXG4gIHN0YWdlUmVhZHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbG9nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGVycm9yczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIG1ldHJpY3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBldmFsczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGZsb3dNZXNzYWdlcz86IEZsb3dNZXNzYWdlW107XG4gIG5leHQ/OiBTdGFnZVNuYXBzaG90O1xuICBjaGlsZHJlbj86IFN0YWdlU25hcHNob3RbXTtcbn07XG5cbi8vIOKUgOKUgCBTY29wZSBGYWN0b3J5IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogRm9yd2FyZC1kZWNsYXJlZCBzbyBTdGFnZUNvbnRleHQgY2FuIGFjY2VwdCBpdCB3aXRob3V0IGltcG9ydGluZyBzY29wZS8uICovXG5leHBvcnQgdHlwZSBTY29wZUZhY3Rvcnk8VFNjb3BlPiA9IChjb3JlOiBTdGFnZUNvbnRleHQsIHN0YWdlTmFtZTogc3RyaW5nLCByZWFkT25seUNvbnRleHQ/OiB1bmtub3duKSA9PiBUU2NvcGU7XG5cbi8vIOKUgOKUgCBTdGFnZUNvbnRleHQgKGZvcndhcmQgcmVmZXJlbmNlIGZvciBTY29wZUZhY3RvcnkpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vLyBUaGUgYWN0dWFsIGNsYXNzIGxpdmVzIGluIFN0YWdlQ29udGV4dC50czsgd2UganVzdCBuZWVkIHRoZSB0eXBlIGhlcmUgZm9yXG4vLyB0aGUgU2NvcGVGYWN0b3J5IGdlbmVyaWMuIFR5cGVTY3JpcHQncyBpbXBvcnQtdHlwZSBoYW5kbGVzIHRoaXM6XG5pbXBvcnQgdHlwZSB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4vU3RhZ2VDb250ZXh0LmpzJztcbiJdfQ==
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL21lbW9yeS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7O0dBUUc7OztBQW9ISCx3REFBc0Y7QUFBN0UsbUhBQUEsbUJBQW1CLE9BQUE7QUFBRSxzSEFBQSxzQkFBc0IsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogdHlwZXMudHMg4oCUIENvcmUgdHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIG1lbW9yeSBsaWJyYXJ5XG4gKlxuICogWmVybyBkZXBlbmRlbmNpZXMgb24gb2xkIGNvZGUgb3Igb3RoZXIgbGlicmFyaWVzIGluIHRoaXMgcGFja2FnZSwgd2l0aCBvbmVcbiAqIGRlbGliZXJhdGUgZXhjZXB0aW9uOiBgY2FwdHVyZS9gIOKAlCB0aGUgc3RhbmRhbG9uZSBsZWFmIG1vZHVsZSBob2xkaW5nIHRoZVxuICogc2hhcmVkIHJldGVudGlvbi1wb2xpY3kgZmFtaWx5IGFuZCBzdW1tYXJ5LW1hcmtlciBidWlsZGVycyAoZXh0cmFjdGVkIGZyb21cbiAqIGhlcmUgaW4gIzEzYy1BIHNvIHRoZSByZWFkIGFuZCB3cml0ZSBkaWFscywgYW5kIGxhdGVyIFJGQy0wMDEsIHNoYXJlIG9uZVxuICogaW1wbGVtZW50YXRpb24pLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmV0ZW50aW9uUG9saWN5IH0gZnJvbSAnLi4vY2FwdHVyZS9wb2xpY2llcy5qcyc7XG5cbi8vIOKUgOKUgCBQYXRjaCAmIFRyYWNlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogQSBmbGF0IGtleS12YWx1ZSBiYWcgcmVwcmVzZW50aW5nIGEgc3RhdGUgcGF0Y2ggKG92ZXJ3cml0ZSBvciBtZXJnZSkuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeVBhdGNoIHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG4vKiogQSBzaW5nbGUgZW50cnkgaW4gdGhlIGNocm9ub2xvZ2ljYWwgb3BlcmF0aW9uIHRyYWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFjZUVudHJ5IHtcbiAgLyoqIENhbm9uaWNhbCBwYXRoIHN0cmluZyAoc2VnbWVudHMgam9pbmVkIGJ5IERFTElNKS4gKi9cbiAgcGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogUGVyLXdyaXRlIHJlYWQgcHJvdmVuYW5jZSAoI1AxKSDigJQgdGhlIGtleXMgdGhpcyBzdGFnZSBoYWQgVFJBQ0tFRC1SRUFEIGF0XG4gICAqIHRoZSBtb21lbnQgdGhpcyBwYXRoIHdhcyAobGFzdCkgd3JpdHRlbjogdGhlIHRlbXBvcmFsLXByZWZpeCBhdHRyaWJ1dGlvblxuICAgKiB0aGF0IGxldHMgc2xpY2VzIGxpbmsgYSBzcGVjaWZpYyB3cml0ZSB0byBvbmx5IHRoZSByZWFkcyB0aGF0IGNvdWxkIGhhdmVcbiAgICogZmVkIGl0IChhIHN0YWdlIHJlYWRpbmcgYGEsYmAgYW5kIHdyaXRpbmcgYHgseWAgbm8gbG9uZ2VyIGltcGxpZXMgeOKGkGIpLlxuICAgKiBBQlNFTlQgdW5sZXNzIHRoZSBgd3JpdGVQcm92ZW5hbmNlOiAncmVhZHMtcHJlZml4J2AgZGlhbCBpcyBvbiDigJQgY2hhcnRzXG4gICAqIHRoYXQgbmV2ZXIgZW5hYmxlIGl0IGtlZXAgYnl0ZS1pZGVudGljYWwgY29tbWl0IGxvZ3MuIFJlYWQgcHJlZml4ZXMgb25seVxuICAgKiBncm93IGR1cmluZyBhIHN0YWdlLCBzbyB1bmRlciBkZWx0YSBtb2RlJ3Mgb25lLWVudHJ5LXBlci1wYXRoIGRlZHVwIHRoZVxuICAgKiBMQVNUIHdyaXRlJ3MgcHJlZml4ID09IHRoZSB1bmlvbiBhY3Jvc3MgYWxsIG9mIHRoYXQgcGF0aCdzIHdyaXRlcy5cbiAgICogSG9uZXN0IGNlaWxpbmc6IGEgd3JpdGUgd2l0aCBOTyB0cmFja2VkIHJlYWRzIGJlZm9yZSBpdCByZWNvcmRzIGBbXWAg4oCUXG4gICAqIFwiZGVwZW5kZWQgb24gbm8gdHJhY2tlZCByZWFkc1wiIGlzIGluZm9ybWF0aW9uLCBub3QgYWJzZW5jZS5cbiAgICovXG4gIHJlYWRLZXlzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiAtIGAnc2V0J2AgICAg4oCUIGhhcmQgb3ZlcndyaXRlOyBgb3ZlcndyaXRlW3BhdGhdYCBob2xkcyB0aGUgZnVsbCBmaW5hbCB2YWx1ZS5cbiAgICogLSBgJ21lcmdlJ2AgIOKAlCBkZWVwIHVuaW9uIG1lcmdlOyBgdXBkYXRlc1twYXRoXWAgaG9sZHMgdGhlIGFjY3VtdWxhdGVkIGRlbHRhLlxuICAgKiAtIGAnYXBwZW5kJ2Ag4oCUICgjMTNjLUIsIHByb2R1Y2VkIG9ubHkgdW5kZXIge0BsaW5rIENvbW1pdFZhbHVlc01vZGV9XG4gICAqICAgYCdkZWx0YSdgKSB0aGUgcGF0aCdzIGZpbmFsIHZhbHVlIGlzIGl0cyBiYXNlIHZhbHVlIHBsdXMgYSB0YWlsIG9mIG5ld1xuICAgKiAgIHRyYWlsaW5nIGVsZW1lbnRzOyBgb3ZlcndyaXRlW3BhdGhdYCBob2xkcyBPTkxZIHRoZSB0YWlsLiBSZXBsYXlcbiAgICogICByZWNvbnN0cnVjdHMgYnkgY29uY2F0ZW5hdGlvbi4gTk9UIGlkZW1wb3RlbnQg4oCUIGRlbHRhLW1vZGUgYnVuZGxlc1xuICAgKiAgIGNhcnJ5IGV4YWN0bHkgb25lIHRyYWNlIGVudHJ5IHBlciBzdXJ2aXZpbmcgcGF0aC5cbiAgICogLSBgJ2RlbGV0ZSdgIOKAlCAoIzEzYy1CLCBwcm9kdWNlZCBvbmx5IHVuZGVyIGAnZGVsdGEnYDsgYWJzb3JicyBiYWNrbG9nXG4gICAqICAgQjgpIHRoZSBrZXkgd2FzIGV4cGxpY2l0bHkgcmVtb3ZlZCB2aWEgYGRlbGV0ZVZhbHVlKClgLiBSZXBsYXkgcmVtb3Zlc1xuICAgKiAgIHRoZSBrZXkuIGBvdmVyd3JpdGVbcGF0aF1gIHN0aWxsIEVOVU1FUkFURVMgdGhlIHBhdGggKHZhbHVlXG4gICAqICAgYHVuZGVmaW5lZGApIHNvIGtleS1zZXQgY29uc3VtZXJzIGtlZXAgc2VlaW5nIHRoZSBjaGFuZ2VkIGtleS5cbiAgICpcbiAgICogYG92ZXJ3cml0ZWAgdmFsdWVzIGFyZSB0aGVyZWZvcmUgVkVSQi1RVUFMSUZJRUQ6IGNvbnN1bWVycyB0aGF0IHJlYWRcbiAgICogYGJ1bmRsZS5vdmVyd3JpdGVba2V5XWAgYXMgXCJ0aGUgZnVsbCB2YWx1ZSB3cml0dGVuXCIgbXVzdCB1c2VcbiAgICogYGNvbW1pdFZhbHVlQXQoY29tbWl0TG9nLCBpZHgsIGtleSlgIChmcm9tIGBmb290cHJpbnRqcy90cmFjZWApIHdoZW4gdGhlXG4gICAqIGxvZyBtYXkgY29udGFpbiBkZWx0YS1tb2RlIGJ1bmRsZXMuXG4gICAqL1xuICB2ZXJiOiAnc2V0JyB8ICdtZXJnZScgfCAnYXBwZW5kJyB8ICdkZWxldGUnO1xufVxuXG4vKipcbiAqIFJGQy0wMDMgRDIg4oCUIHJlYWQgcGF0aHMgdGhhdCBCWVBBU1MgcmVhZCB0cmFja2luZzpcbiAqIC0gYCdhcmdzJ2AgICDigJQgdGhlIHN0YWdlIGNhbGxlZCBgZ2V0QXJncygpYCAvIGAkZ2V0QXJncygpYCB3aXRoIG5vbi1lbXB0eVxuICogICBydW4gaW5wdXQgKGZyb3plbiwgdW50cmFja2VkIGJ5IGRlc2lnbilcbiAqIC0gYCdlbnYnYCAgICDigJQgdGhlIHN0YWdlIGNhbGxlZCBgZ2V0RW52KClgIC8gYCRnZXRFbnYoKWAgd2l0aCBhIG5vbi1lbXB0eVxuICogICBleGVjdXRpb24gZW52aXJvbm1lbnQgKGZyb3plbiwgdW50cmFja2VkIGJ5IGRlc2lnbilcbiAqIC0gYCdzaWxlbnQnYCDigJQgdGhlIHN0YWdlIHBlcmZvcm1lZCBhIHNpbGVudCByZWFkIChgZ2V0VmFsdWVTaWxlbnRgIC9cbiAqICAgYGdldFZhbHVlRGlyZWN0YCkgb2YgYSBrZXkgaXQgbmV2ZXIgdHJhY2tlZC1yZWFkIGluIHRoZSBzYW1lIHN0YWdlLlxuICogICBTaWxlbnQgcmVhZHMgU0hBRE9XRUQgYnkgYSB0cmFja2VkIHJlYWQgb2YgdGhlIHNhbWUga2V5IGluIHRoZSBzYW1lXG4gKiAgIHN0YWdlIChUeXBlZFNjb3BlIGFycmF5LXByb3h5IGludGVybmFscywgYCRiYXRjaEFycmF5YCkgYXJlIE5PVFxuICogICBmbGFnZ2VkIOKAlCB0aGVpciByZWFk4oaSd3JpdGUgZWRnZSBpcyBhbHJlYWR5IGNhcHR1cmVkLlxuICovXG5leHBvcnQgdHlwZSBVbnRyYWNrZWRTb3VyY2UgPSAnYXJncycgfCAnZW52JyB8ICdzaWxlbnQnO1xuXG4vKiogVGhlIGF0b21pYyBidW5kbGUgcHJvZHVjZWQgYnkgVHJhbnNhY3Rpb25CdWZmZXIuY29tbWl0KCkuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1pdEJ1bmRsZSB7XG4gIC8qKiBBdXRvLWFzc2lnbmVkIHN0ZXAgaW5kZXggKHNldCBieSBFdmVudExvZy5yZWNvcmQpLiAqL1xuICBpZHg/OiBudW1iZXI7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBzdGFnZSBuYW1lLiAqL1xuICBzdGFnZTogc3RyaW5nO1xuICAvKiogU3RhYmxlIHN0YWdlIGlkZW50aWZpZXIgKG1hdGNoZXMgc3BlYyBub2RlIGlkKS4gKi9cbiAgc3RhZ2VJZDogc3RyaW5nO1xuICAvKiogVW5pcXVlIHBlci1leGVjdXRpb24tc3RlcCBpZGVudGlmaWVyLiBGb3JtYXQ6IFtzdWJmbG93UGF0aC9dc3RhZ2VJZCNleGVjdXRpb25JbmRleCAqL1xuICBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICAvKiogQ2hyb25vbG9naWNhbCB3cml0ZSBsb2cgZm9yIGRldGVybWluaXN0aWMgcmVwbGF5LiAqL1xuICB0cmFjZTogVHJhY2VFbnRyeVtdO1xuICAvKiogUGF0aHMgdGhhdCBzaG91bGQgYmUgcmVkYWN0ZWQgaW4gVUkgKHNlbnNpdGl2ZSBkYXRhKS4gKi9cbiAgcmVkYWN0ZWRQYXRoczogc3RyaW5nW107XG4gIC8qKiBIYXJkIG92ZXJ3cml0ZSBwYXRjaGVzLiAqL1xuICBvdmVyd3JpdGU6IE1lbW9yeVBhdGNoO1xuICAvKiogRGVlcCBtZXJnZSBwYXRjaGVzLiAqL1xuICB1cGRhdGVzOiBNZW1vcnlQYXRjaDtcbiAgLyoqXG4gICAqIFJGQy0wMDMgRDIgaG9uZXN0eSBtYXJrZXJzIOKAlCB1bnRyYWNrZWQgcmVhZCBwYXRocyB0aGlzIHN0YWdlIGNvbnN1bWVkXG4gICAqIChzZWUge0BsaW5rIFVudHJhY2tlZFNvdXJjZX0pLiBBQlNFTlQgd2hlbiB0aGUgc3RhZ2UgdXNlZCBub25lLCBzb1xuICAgKiBjaGFydHMgdGhhdCBuZXZlciB0b3VjaCB0aG9zZSBwYXRocyBrZWVwIGJ5dGUtaWRlbnRpY2FsIGNvbW1pdCBsb2dzLlxuICAgKiBDYXVzYWwtc2xpY2UgY29uc3VtZXJzIChgY2F1c2FsQ2hhaW5gL2Bmb3JtYXRDYXVzYWxDaGFpbmApIHN1cmZhY2UgdGhpc1xuICAgKiBhcyBcInNsaWNlIG1heSBiZSBpbmNvbXBsZXRlIGhlcmVcIi4gUmVzaWR1YWwgbGltaXRhdGlvbiAoYnkgZGVzaWduKTpcbiAgICogdmFsdWVzIHNtdWdnbGVkIHRocm91Z2ggSlMgY2xvc3VyZXMgYXJlIHVuZGV0ZWN0YWJsZS5cbiAgICovXG4gIHVudHJhY2tlZFNvdXJjZXM/OiBSZWFkb25seUFycmF5PFVudHJhY2tlZFNvdXJjZT47XG59XG5cbi8vIOKUgOKUgCBGbG93IENvbnRyb2wgTmFycmF0aXZlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogVHlwZXMgb2YgY29udHJvbCBmbG93IGRlY2lzaW9ucyBjYXB0dXJlZCBieSB0aGUgZXhlY3V0aW9uIGVuZ2luZS4gKi9cbmV4cG9ydCB0eXBlIEZsb3dDb250cm9sVHlwZSA9ICduZXh0JyB8ICdicmFuY2gnIHwgJ2NoaWxkcmVuJyB8ICdzZWxlY3RlZCcgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG5cbi8qKiBBIHNpbmdsZSBmbG93IGNvbnRyb2wgbmFycmF0aXZlIGVudHJ5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93TWVzc2FnZSB7XG4gIHR5cGU6IEZsb3dDb250cm9sVHlwZTtcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgdGFyZ2V0U3RhZ2U/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgcmF0aW9uYWxlPzogc3RyaW5nO1xuICBjb3VudD86IG51bWJlcjtcbiAgaXRlcmF0aW9uPzogbnVtYmVyO1xuICB0aW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgCBSZWFkIC8gV3JpdGUgVHJhY2tpbmcgKCMxNCwgIzEzYy1BKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vXG4vLyBUaGUgcG9saWN5IGZhbWlseSBhbmQgbWFya2VyIHNoYXBlcyBhcmUgb3duZWQgYnkgYGNhcHR1cmUvYCAoc2hhcmVkIHdpdGhcbi8vIHRoZSB3cml0ZSBkaWFsIGFuZCwgbGF0ZXIsIFJGQy0wMDEncyBkZWZlcnJlZC1vYnNlcnZlciBjYXB0dXJlIHRpZXIpLlxuLy8gUmUtZXhwb3J0ZWQgaGVyZSBzbyBldmVyeSBwcmUtZXh0cmFjdGlvbiBpbXBvcnQgcGF0aCBrZWVwcyB3b3JraW5nLlxuXG5leHBvcnQgdHlwZSB7IFJldGVudGlvblBvbGljeSB9IGZyb20gJy4uL2NhcHR1cmUvcG9saWNpZXMuanMnO1xuZXhwb3J0IHR5cGUgeyBSZWFkU3VtbWFyeU1hcmtlciwgV3JpdGVTdW1tYXJ5TWFya2VyIH0gZnJvbSAnLi4vY2FwdHVyZS9zdW1tYXJpemUuanMnO1xuZXhwb3J0IHsgUkVBRF9QUkVWSUVXX0xFTkdUSCwgU1VNTUFSWV9QUkVWSUVXX0xFTkdUSCB9IGZyb20gJy4uL2NhcHR1cmUvc3VtbWFyaXplLmpzJztcblxuLyoqXG4gKiBQZXItd3JpdGUgcmVhZC1wcm92ZW5hbmNlIHBvbGljeSAoI1AxKSDigJQgdGhlIGZvdXJ0aCBkaWFsIG9mIHRoZVxuICogcmVhZFRyYWNraW5nL3dyaXRlVHJhY2tpbmcvY29tbWl0VmFsdWVzIGZhbWlseSwgc2FtZSA2LXNpdGUgcHJvcGFnYXRpb25cbiAqIHBhdHRlcm4gKGV4ZWN1dG9yIG9wdGlvbiDihpIgRXhlY3V0aW9uUnVudGltZS51c2UqIOKGkiByb290IFN0YWdlQ29udGV4dCDihpJcbiAqIGNyZWF0ZU5leHQvY3JlYXRlQ2hpbGQgaW5oZXJpdGFuY2Ug4oaSIFN1YmZsb3dFeGVjdXRvciBkdWNrLXB1c2gpLlxuICpcbiAqIC0gYCdvZmYnYCAoZGVmYXVsdCkg4oCUIHplcm8gY29zdCwgYnl0ZS1pZGVudGljYWwgY29tbWl0IGxvZ3MuXG4gKiAtIGAncmVhZHMtcHJlZml4J2Ag4oCUIGV2ZXJ5IGNvbW1pdHRlZCB7QGxpbmsgVHJhY2VFbnRyeX0gY2Fycmllc1xuICogICBgcmVhZEtleXNgOiB0aGUga2V5cyB0cmFja2VkLXJlYWQgQkVGT1JFIHRoYXQgd3JpdGUgKHRlbXBvcmFsLXByZWZpeFxuICogICBhdHRyaWJ1dGlvbikuIENvc3Q6IG9uZSBTZXQtdG8tYXJyYXkgY29weSBwZXIgd3JpdGUuIENvbnN1bWVkIGJ5XG4gKiAgIGBjYXVzYWxDaGFpbmAncyBgZWRnZUF0dHJpYnV0aW9uOiAncGVyLXdyaXRlJ2AgYW5kIHRoZSBzbGljZSBsYXllci5cbiAqL1xuZXhwb3J0IHR5cGUgV3JpdGVQcm92ZW5hbmNlTW9kZSA9ICdvZmYnIHwgJ3JlYWRzLXByZWZpeCc7XG5cbi8qKlxuICogUG9saWN5IGZvciBob3cgdHJhY2tlZCByZWFkcyBhcmUgcmVjb3JkZWQgaW50byBgU3RhZ2VTbmFwc2hvdC5zdGFnZVJlYWRzYC5cbiAqXG4gKiAtIGAnZnVsbCdgIChkZWZhdWx0KSDigJQgZXZlcnkgdHJhY2tlZCByZWFkIGBzdHJ1Y3R1cmVkQ2xvbmVgcyB0aGUgdmFsdWUgaW50b1xuICogICB0aGUgc3RhZ2UncyByZWFkIHZpZXcuIEJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBoaXN0b3JpY2FsIGJlaGF2aW9yOyB0aGlzIGlzXG4gKiAgIHdoYXQgc25hcHNob3QgY29uc3VtZXJzIChsZW5zLCBhZ2VudGZvb3RwcmludCkgc2VlIHRvZGF5LlxuICogLSBgJ3N1bW1hcnknYCDigJQgcmVhZHMgcmVjb3JkIGEgY2hlYXAge0BsaW5rIFJlYWRTdW1tYXJ5TWFya2VyfSAodHlwZSArIHNpemVcbiAqICAgcHJveHkgKyBzaG9ydCBwcmV2aWV3KSBpbnN0ZWFkIG9mIHRoZSBjbG9uZWQgdmFsdWUuIE8oMSktaXNoIHBlciByZWFkIOKAlFxuICogICBubyB2YWx1ZSBjbG9uZSwgbm8gc2VyaWFsaXphdGlvbiBvZiBsYXJnZSBvYmplY3RzLlxuICogLSBgJ29mZidgIOKAlCByZWFkcyBhcmUgbm90IHJlY29yZGVkIGF0IGFsbDsgYHN0YWdlUmVhZHNgIGlzIGFic2VudCBmcm9tIHRoZVxuICogICBzbmFwc2hvdC4gWmVybyBwZXItcmVhZCBjb3N0LiBWYWx1ZXMgYXJlIHN0aWxsIHJlYWRhYmxlLCBhbmQgdGhlXG4gKiAgIGBTY29wZVJlY29yZGVyLm9uUmVhZGAgZXZlbnQgc3RpbGwgZmlyZXMgKGl0IHBhc3NlcyB0aGUgbGl2ZSByZWZlcmVuY2UgYW5kXG4gKiAgIG5ldmVyIGNsb25lZCkg4oCUIHNvIG5hcnJhdGl2ZSBvdXRwdXQgaXMgaWRlbnRpY2FsIGluIGV2ZXJ5IG1vZGUuIFRoZSBwb2xpY3lcbiAqICAgc2NvcGVzIE9OTFkgdGhlIHNuYXBzaG90J3MgYHN0YWdlUmVhZHNgIHBheWxvYWQuXG4gKlxuICogU2V0IHZpYSBgbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0LCB7IHJlYWRUcmFja2luZyB9KWAgb3JcbiAqIGBleGVjdXRvci5zZXRSZWFkVHJhY2tpbmcobW9kZSlgIChiZWZvcmUgYHJ1bigpYCkuXG4gKlxuICogQWxpYXMgb2YgdGhlIHNoYXJlZCB7QGxpbmsgUmV0ZW50aW9uUG9saWN5fSBmYW1pbHkgKCMxM2MtQSkg4oCUIGtlcHQgYXMgdGhlXG4gKiBzaGlwcGVkIHB1YmxpYyBuYW1lIGZvciB0aGUgcmVhZCBkaWFsLlxuICovXG5leHBvcnQgdHlwZSBSZWFkVHJhY2tpbmdNb2RlID0gUmV0ZW50aW9uUG9saWN5O1xuXG4vKipcbiAqIFBvbGljeSBmb3IgaG93IHRyYWNrZWQgd3JpdGVzIGFyZSByZWNvcmRlZCBpbnRvIGBTdGFnZVNuYXBzaG90LnN0YWdlV3JpdGVzYFxuICogKCMxM2MtQSkg4oCUIHRoZSBzaWJsaW5nIG9mIHtAbGluayBSZWFkVHJhY2tpbmdNb2RlfS5cbiAqXG4gKiAtIGAnZnVsbCdgIChkZWZhdWx0KSDigJQgZXZlcnkgdHJhY2tlZCB3cml0ZSBgc3RydWN0dXJlZENsb25lYHMgdGhlIHZhbHVlIGludG9cbiAqICAgdGhlIHN0YWdlJ3Mgd3JpdGUgdmlldy4gQnl0ZS1pZGVudGljYWwgdG8gdGhlIGhpc3RvcmljYWwgYmVoYXZpb3IuXG4gKiAtIGAnc3VtbWFyeSdgIOKAlCB3cml0ZXMgcmVjb3JkIGEgY2hlYXAge0BsaW5rIFdyaXRlU3VtbWFyeU1hcmtlcn0gaW5zdGVhZCBvZlxuICogICB0aGUgY2xvbmVkIHZhbHVlLlxuICogLSBgJ29mZidgIOKAlCB3cml0ZXMgYXJlIG5vdCByZWNvcmRlZCBhdCBhbGw7IGBzdGFnZVdyaXRlc2AgaXMgYWJzZW50IGZyb20gdGhlXG4gKiAgIHNuYXBzaG90LiBUaGUgd3JpdGVzIHRoZW1zZWx2ZXMgc3RpbGwgY29tbWl0IHRvIHNoYXJlZCBzdGF0ZSBhbmQgc3RpbGxcbiAqICAgYXBwZWFyIGluIHRoZSBjb21taXQgbG9nIOKAlCBvbmx5IHRoZSBwZXItc3RhZ2Ugc25hcHNob3QgYm9va2tlZXBpbmcgKGFuZFxuICogICB0aGVyZWZvcmUgdGhlIGNvbW1pdCBvYnNlcnZlcidzIG11dGF0aW9ucyBwYXlsb2FkKSBpcyBhZmZlY3RlZC4gKFRoZVxuICogICBjb21taXQgbG9nJ3Mgb3duIHZhbHVlIGVuY29kaW5nIGhhcyBpdHMgb3duIGxvc3NsZXNzIGRpYWwg4oCUXG4gKiAgIHtAbGluayBDb21taXRWYWx1ZXNNb2RlfSwgIzEzYy1CLilcbiAqXG4gKiBTZXQgdmlhIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgd3JpdGVUcmFja2luZyB9KWAgb3JcbiAqIGBleGVjdXRvci5zZXRXcml0ZVRyYWNraW5nKG1vZGUpYCAoYmVmb3JlIGBydW4oKWApLiBTZWVcbiAqIGBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnMud3JpdGVUcmFja2luZ2AgZm9yIHRoZSBmdWxsIG9ic2VydmFibGUtY29uc2VxdWVuY2VcbiAqIGNvbnRyYWN0IChvbkNvbW1pdCBwYXlsb2FkLCByZWRhY3Rpb24gcHJlY2VkZW5jZSwgd2hhdCBpcyBPVVQgb2Ygc2NvcGUpLlxuICovXG5leHBvcnQgdHlwZSBXcml0ZVRyYWNraW5nTW9kZSA9IFJldGVudGlvblBvbGljeTtcblxuLyoqXG4gKiBQb2xpY3kgZm9yIGhvdyBjb21taXQtYnVuZGxlIFZBTFVFUyBhcmUgZW5jb2RlZCBpbnRvIHRoZSBjb21taXQgbG9nXG4gKiAoIzEzYy1CKSDigJQgY29tcGxldGVzIHRoZSBgcmVhZFRyYWNraW5nYC9gd3JpdGVUcmFja2luZ2AgZGlhbCBmYW1pbHkuXG4gKiBVbmxpa2UgdGhvc2UgdHdvICh3aGljaCBnYXRlIGxvc3N5IHNuYXBzaG90IGJvb2trZWVwaW5nKSwgdGhpcyBkaWFsIGlzXG4gKiAqKmxvc3NsZXNzIGluIGJvdGggbW9kZXMqKiDigJQgaXQgY2hhbmdlcyB0aGUgY29tbWl0IGxvZydzICplbmNvZGluZyosXG4gKiBuZXZlciBpdHMgKmluZm9ybWF0aW9uKjsgYW55IHN0ZXAncyBmdWxsIHN0YXRlIHN0YXlzIGV4YWN0bHlcbiAqIHJlY29uc3RydWN0YWJsZSBieSByZXBsYXkuXG4gKlxuICogLSBgJ2Z1bGwnYCAoZGVmYXVsdCkg4oCUIGV2ZXJ5IHN1cnZpdmluZyBgc2V0YCBwYXRoIHN0b3JlcyB0aGUgZnVsbCBmaW5hbFxuICogICB2YWx1ZSwgb25lIHRyYWNlIGVudHJ5IHBlciBvcGVyYXRpb24uIEJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBoaXN0b3JpY2FsXG4gKiAgIGJlaGF2aW9yLlxuICogLSBgJ2RlbHRhJ2Ag4oCUIHR3byBjaGFuZ2VzLCBib3RoIHJlcGxheS1jb3ZlcmVkIGJ5IGBhcHBseVNtYXJ0TWVyZ2VgOlxuICogICAxLiAqKmBhcHBlbmRgIGRldGVjdGlvbioqOiB3aGVuIGEgcGF0aCdzIG5ldCBjaGFuZ2UgaXMgXCJ0aGUgYmFzZSBhcnJheVxuICogICAgICBwbHVzIG5ldyB0cmFpbGluZyBlbGVtZW50c1wiIChzdHJpY3QgcHJlZml4KSwgdGhlIGJ1bmRsZSByZWNvcmRzIE9OTFlcbiAqICAgICAgdGhlIHRhaWwgdW5kZXIgYSBgdmVyYjogJ2FwcGVuZCdgIHRyYWNlIGVudHJ5IOKAlCB0aGUgZ3Jvd2luZy1oaXN0b3J5XG4gKiAgICAgIGNvbW1pdCBsb2cgYmVjb21lcyBsaW5lYXIgaW4gdGFpbCBzaXplIGluc3RlYWQgb2YgTyhOwrIpIHJldGFpbmVkLlxuICogICAgICBBIHJlYWwgYHZlcmI6ICdkZWxldGUnYCBlbnRyeSByZXBsYWNlcyB0aGUgYHNldDogdW5kZWZpbmVkYCBmbGF0dGVuaW5nXG4gKiAgICAgIGZvciBgZGVsZXRlVmFsdWUoKWAgKGNsb3NlcyB0aGUgZG9jdW1lbnRlZCBNZW1vcnlQYXRjaCBsaW1pdGF0aW9uKS5cbiAqICAgMi4gKipPbmUgdHJhY2UgZW50cnkgcGVyIHN1cnZpdmluZyBwYXRoKiogKGFwcGVuZCBpcyBub3QgaWRlbXBvdGVudCBvblxuICogICAgICByZXBsYXkpOiB0aGUgdmVyYiBpcyByZXNvbHZlZCBmcm9tIHRoZSBwYXRoJ3MgYmFzZeKGkmZpbmFsIHJlbGF0aW9uc2hpcFxuICogICAgICBhbmQgb3AgbWl4OyBlbnRyaWVzIGFyZSBvcmRlcmVkIGJ5IGVhY2ggcGF0aCdzIExBU1QgdG91Y2guXG4gKlxuICogSG9uZXN0IGNvc3Qgbm90ZTogYXBwZW5kIGRldGVjdGlvbiBpcyBORVcgd2FsbCB3b3JrIOKAlCBhbiBPKHxiYXNlfClcbiAqIHN0cnVjdHVyYWwgcHJlZml4IGNvbXBhcmUgcGVyIGFycmF5LXNldCBwYXRoIHBlciBjb21taXQgKHRvZGF5J3NcbiAqIGBkZWVwRXF1YWxgIGZhc3QtZmFpbHMgb24gbGVuZ3RoIGluIE8oMSkgZm9yIGEgZ3Jvd24gYXJyYXkpLiBPbiBhIGhpdCB0aGVcbiAqIGNvbW1pdCBnZXRzIGNoZWFwZXIgaW4gYm90aCB3YWxsIGFuZCBoZWFwICh0aGUgTyh8ZmluYWx8KSBjbG9uZSBzaHJpbmtzIHRvXG4gKiBPKHx0YWlsfCkpOyBvbiBhIG1pc3MgaXQgcGF5cyBjb21wYXJlICsgZnVsbCBjbG9uZS4gYCdmdWxsJ2AgcGF5cyB6ZXJvIOKAlFxuICogdGhlIGRldGVjdGlvbiBicmFuY2ggaXMgbW9kZS1nYXRlZC5cbiAqXG4gKiBTZXQgdmlhIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgY29tbWl0VmFsdWVzIH0pYCBvclxuICogYGV4ZWN1dG9yLnNldENvbW1pdFZhbHVlcyhtb2RlKWAgKGJlZm9yZSBgcnVuKClgKS4gVGhlIGFjdGl2ZSBtb2RlIGlzXG4gKiBzdXJmYWNlZCBhcyB0aGUgc25hcHNob3QgZGlzY3JpbWluYW50IGBSdW50aW1lU25hcHNob3QuY29tbWl0VmFsdWVzYC5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tbWl0VmFsdWVzTW9kZSA9ICdmdWxsJyB8ICdkZWx0YSc7XG5cbi8vIOKUgOKUgCBTdGFnZSBTbmFwc2hvdCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFNlcmlhbGlzYWJsZSByZXByZXNlbnRhdGlvbiBvZiBhIHN0YWdlJ3Mgc3RhdGUgKGZvciBkZWJ1Z2dpbmcgLyB2aXN1YWxpc2F0aW9uKS4gKi9cbmV4cG9ydCB0eXBlIFN0YWdlU25hcHNob3QgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBVbmlxdWUgcGVyLWV4ZWN1dGlvbi1zdGVwIGlkZW50aWZpZXIuIEZvcm1hdDogW3N1YmZsb3dQYXRoL11zdGFnZUlkI2V4ZWN1dGlvbkluZGV4ICovXG4gIHJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGlzIHN0YWdlIGRvZXMgKGZyb20gYnVpbGRlcikuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyIOKAlCBwcmVzZW50IHdoZW4gdGhpcyBzdGFnZSBpcyBhIHN1YmZsb3cgZW50cnkgcG9pbnQuICovXG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgaXNEZWNpZGVyPzogYm9vbGVhbjtcbiAgaXNGb3JrPzogYm9vbGVhbjtcbiAgLyoqIFVzZXItbGV2ZWwgd3JpdGVzIG1hZGUgYnkgdGhpcyBzdGFnZSAocHJlLW5hbWVzcGFjZSBrZXlzIOKGkiB2YWx1ZXMpLlxuICAgKiAgU2hhcGUgZGVwZW5kcyBvbiB7QGxpbmsgV3JpdGVUcmFja2luZ01vZGV9OiBjbG9uZWQgdmFsdWVzIHVuZGVyIGAnZnVsbCdgXG4gICAqICAoZGVmYXVsdCksIHtAbGluayBXcml0ZVN1bW1hcnlNYXJrZXJ9cyB1bmRlciBgJ3N1bW1hcnknYCwgYWJzZW50IHVuZGVyXG4gICAqICBgJ29mZidgLiBSZWRhY3RlZCB3cml0ZXMgc2hvdyBgJ1tSRURBQ1RFRF0nYCByZWdhcmRsZXNzIG9mIG1vZGUuICovXG4gIHN0YWdlV3JpdGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBVc2VyLWxldmVsIHJlYWRzIG1hZGUgYnkgdGhpcyBzdGFnZSAocHJlLW5hbWVzcGFjZSBrZXlzIOKGkiB2YWx1ZXMgYXQgcmVhZFxuICAgKiAgdGltZSkuIFNoYXBlIGRlcGVuZHMgb24ge0BsaW5rIFJlYWRUcmFja2luZ01vZGV9OiBjbG9uZWQgdmFsdWVzIHVuZGVyXG4gICAqICBgJ2Z1bGwnYCAoZGVmYXVsdCksIHtAbGluayBSZWFkU3VtbWFyeU1hcmtlcn1zIHVuZGVyIGAnc3VtbWFyeSdgLCBhYnNlbnRcbiAgICogIHVuZGVyIGAnb2ZmJ2AuICovXG4gIHN0YWdlUmVhZHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbG9nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGVycm9yczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIG1ldHJpY3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBldmFsczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGZsb3dNZXNzYWdlcz86IEZsb3dNZXNzYWdlW107XG4gIG5leHQ/OiBTdGFnZVNuYXBzaG90O1xuICBjaGlsZHJlbj86IFN0YWdlU25hcHNob3RbXTtcbn07XG5cbi8vIOKUgOKUgCBTY29wZSBGYWN0b3J5IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogRm9yd2FyZC1kZWNsYXJlZCBzbyBTdGFnZUNvbnRleHQgY2FuIGFjY2VwdCBpdCB3aXRob3V0IGltcG9ydGluZyBzY29wZS8uICovXG5leHBvcnQgdHlwZSBTY29wZUZhY3Rvcnk8VFNjb3BlPiA9IChjb3JlOiBTdGFnZUNvbnRleHQsIHN0YWdlTmFtZTogc3RyaW5nLCByZWFkT25seUNvbnRleHQ/OiB1bmtub3duKSA9PiBUU2NvcGU7XG5cbi8vIOKUgOKUgCBTdGFnZUNvbnRleHQgKGZvcndhcmQgcmVmZXJlbmNlIGZvciBTY29wZUZhY3RvcnkpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vLyBUaGUgYWN0dWFsIGNsYXNzIGxpdmVzIGluIFN0YWdlQ29udGV4dC50czsgd2UganVzdCBuZWVkIHRoZSB0eXBlIGhlcmUgZm9yXG4vLyB0aGUgU2NvcGVGYWN0b3J5IGdlbmVyaWMuIFR5cGVTY3JpcHQncyBpbXBvcnQtdHlwZSBoYW5kbGVzIHRoaXM6XG5pbXBvcnQgdHlwZSB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4vU3RhZ2VDb250ZXh0LmpzJztcbiJdfQ==
|
package/dist/lib/pause/types.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* each level adding its subflow ID to the path.
|
|
8
8
|
*
|
|
9
9
|
* The checkpoint captures:
|
|
10
|
-
* -
|
|
10
|
+
* - pausedStageId + subflowPath: the paused stage's id and its subflow path
|
|
11
11
|
* - sharedState: scope at the pause point
|
|
12
12
|
* - executionTree: completed stages for BTS/narrative
|
|
13
13
|
* - pauseData: question, reason, or metadata from $pause()
|
|
@@ -133,4 +133,4 @@ function isPauseSignal(error) {
|
|
|
133
133
|
Object.prototype.hasOwnProperty.call(error, 'stageId')));
|
|
134
134
|
}
|
|
135
135
|
exports.isPauseSignal = isPauseSignal;
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3BhdXNlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7OztBQUVILCtEQUErRDtBQUUvRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLFdBQVksU0FBUSxLQUFLO0lBQ3BDLHVEQUF1RDtJQUM5QyxTQUFTLENBQVU7SUFDNUIsNENBQTRDO0lBQ25DLE9BQU8sQ0FBUztJQUN6Qix5RUFBeUU7SUFDakUsWUFBWSxDQUFXO0lBRS9COzs7Ozs7Ozs7O09BVUc7SUFDSyxlQUFlLENBQVU7SUFDekIsb0JBQW9CLENBQVU7SUFFdEM7Ozs7Ozs7Ozs7O09BV0c7SUFDSyxjQUFjLEdBQTRDLEVBQUUsQ0FBQztJQUVyRSxZQUFZLElBQWEsRUFBRSxPQUFlO1FBQ3hDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLHVGQUF1RjtRQUN2RixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxrRUFBa0U7SUFDbEUsY0FBYyxDQUFDLFNBQWlCO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsMEVBQTBFO0lBQzFFLElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLGNBQXNCLEVBQUUsbUJBQTRCO1FBQzdELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUM7WUFDdEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLG1CQUFtQixDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsbUJBQW1CLENBQUMsU0FBaUIsRUFBRSxLQUE4QjtRQUNuRSxpRUFBaUU7UUFDakUsbUVBQW1FO1FBQ25FLDREQUE0RDtRQUM1RCxrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVELGdEQUFnRDtJQUNoRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBbkdELGtDQW1HQztBQXVLRCwrREFBK0Q7QUFFL0QsZ0VBQWdFO0FBQ2hFLFNBQWdCLGFBQWEsQ0FBQyxLQUFjO0lBQzFDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUssS0FBcUIsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDO0FBQzlGLENBQUM7QUFGRCxzQ0FFQztBQUVELHdHQUF3RztBQUN4RyxTQUFnQixhQUFhLENBQUMsS0FBYztJQUMxQyxPQUFPLENBQ0wsS0FBSyxZQUFZLFdBQVc7UUFDNUIsQ0FBQyxLQUFLLFlBQVksS0FBSztZQUNyQixLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWE7WUFDNUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUM7WUFDeEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUMxRCxDQUFDO0FBQ0osQ0FBQztBQVJELHNDQVFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXVzZS9SZXN1bWUg4oCUIHNlcmlhbGl6YWJsZSBjaGVja3BvaW50IGZvciBsb25nLXJ1bm5pbmcgb3IgaHVtYW4taW4tdGhlLWxvb3AgZmxvd3MuXG4gKlxuICogQSBzdGFnZSBzaWduYWxzIHBhdXNlIGJ5IGNhbGxpbmcgYHNjb3BlLiRwYXVzZShkYXRhKWAgd2hpY2ggdGhyb3dzIGEgUGF1c2VTaWduYWwuXG4gKiBUaGUgc2lnbmFsIGJ1YmJsZXMgdXAgdGhyb3VnaCBTdWJmbG93RXhlY3V0b3Ig4oaSIEZsb3djaGFydFRyYXZlcnNlciDihpIgRmxvd0NoYXJ0RXhlY3V0b3IsXG4gKiBlYWNoIGxldmVsIGFkZGluZyBpdHMgc3ViZmxvdyBJRCB0byB0aGUgcGF0aC5cbiAqXG4gKiBUaGUgY2hlY2twb2ludCBjYXB0dXJlczpcbiAqICAgLSBwYXVzZWRQYXRoOiBmdWxsIHBhdGggdG8gdGhlIHBhdXNlZCBzdGFnZSAoZS5nLiwgWydzZi1wYXltZW50JywgJ2FwcHJvdmUnXSlcbiAqICAgLSBzaGFyZWRTdGF0ZTogc2NvcGUgYXQgdGhlIHBhdXNlIHBvaW50XG4gKiAgIC0gZXhlY3V0aW9uVHJlZTogY29tcGxldGVkIHN0YWdlcyBmb3IgQlRTL25hcnJhdGl2ZVxuICogICAtIHBhdXNlRGF0YTogcXVlc3Rpb24sIHJlYXNvbiwgb3IgbWV0YWRhdGEgZnJvbSAkcGF1c2UoKVxuICpcbiAqIFJlc3VtZSByZWJ1aWxkcyB0aGUgZmxvd2NoYXJ0LCByZXN0b3JlcyBzY29wZSwgbmF2aWdhdGVzIHRvIHRoZSBwYXVzZWQgc3RhZ2UsXG4gKiBpbmplY3RzIHJlc3VtZUlucHV0LCBhbmQgY29udGludWVzIHRyYXZlcnNhbC5cbiAqXG4gKiBTdXBwb3J0ZWQgdG9wb2xvZ2llczogbGluZWFyLCBzdWJmbG93LCBsYXp5IHN1YmZsb3csIGxvb3AsIG5lc3RlZCBzdWJmbG93IGluIGxvb3AuXG4gKi9cblxuLy8g4pSA4pSAIFBhdXNlU2lnbmFsIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFRocm93biBieSBgc2NvcGUuJHBhdXNlKClgIHRvIHNpZ25hbCB0aGF0IGV4ZWN1dGlvbiBzaG91bGQgc3RvcFxuICogYW5kIGNyZWF0ZSBhIHNlcmlhbGl6YWJsZSBjaGVja3BvaW50LlxuICpcbiAqIEJ1YmJsZXMgdXAgdGhyb3VnaCBTdWJmbG93RXhlY3V0b3IgKHdoaWNoIHByZXBlbmRzIHN1YmZsb3cgSUQgdG8gcGF0aClcbiAqIGFuZCBpcyBjYXVnaHQgYnkgRmxvd2NoYXJ0VHJhdmVyc2VyL0Zsb3dDaGFydEV4ZWN1dG9yLlxuICovXG5leHBvcnQgY2xhc3MgUGF1c2VTaWduYWwgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKiBEYXRhIGZyb20gJHBhdXNlKCkg4oCUIHF1ZXN0aW9uLCByZWFzb24sIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBwYXVzZURhdGE6IHVua25vd247XG4gIC8qKiBJRCBvZiB0aGUgc3RhZ2UgdGhhdCBjYWxsZWQgJHBhdXNlKCkuICovXG4gIHJlYWRvbmx5IHN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFBhdGggdGhyb3VnaCBzdWJmbG93cyB0byB0aGUgcGF1c2VkIHN0YWdlLiBCdWlsdCBkdXJpbmcgYnViYmxlLXVwLiAqL1xuICBwcml2YXRlIF9zdWJmbG93UGF0aDogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEludm9rZXIgY29udGV4dCDigJQgZW5yaWNoZWQgZHVyaW5nIGJ1YmJsZS11cCB3aGVuIGEgUGF1c2VTaWduYWwgcGFzc2VzXG4gICAqIHRocm91Z2ggYSBkZWNpZGVyLCBzZWxlY3Rvciwgb3IgZm9yayBoYW5kbGVyLlxuICAgKlxuICAgKiBUaGUgaW52b2tlciBpcyB0aGUgc3RhZ2UgdGhhdCBjYWxsZWQgZXhlY3V0ZU5vZGUoKSBvbiB0aGUgcGF1c2VkIGNoaWxkLlxuICAgKiBDYXB0dXJlZCBkdXJpbmcgdHJhdmVyc2FsIChub3QgcmVjb25zdHJ1Y3RlZCBmcm9tIHRoZSB0cmVlKS5cbiAgICpcbiAgICogYGNvbnRpbnVhdGlvblN0YWdlSWRgIGlzIHRoZSBpbnZva2VyJ3MgYC5uZXh0YCBub2RlIOKAlCB3aGVyZSBleGVjdXRpb25cbiAgICogc2hvdWxkIGNvbnRpbnVlIGFmdGVyIHJlc3VtZS4gV2l0aG91dCB0aGlzLCBicmFuY2ggY2hpbGRyZW4gaGF2ZSBub1xuICAgKiBgLm5leHRgIHBvaW50ZXIgYW5kIHJlc3VtZSB3b3VsZCB0ZXJtaW5hdGUgZWFybHkuXG4gICAqL1xuICBwcml2YXRlIF9pbnZva2VyU3RhZ2VJZD86IHN0cmluZztcbiAgcHJpdmF0ZSBfY29udGludWF0aW9uU3RhZ2VJZD86IHN0cmluZztcblxuICAvKipcbiAgICogU3ViZmxvdyBzY29wZSBjYXB0dXJlIOKAlCBwb3B1bGF0ZWQgZHVyaW5nIGJ1YmJsZS11cCBieVxuICAgKiBgU3ViZmxvd0V4ZWN1dG9yYCByaWdodCBiZWZvcmUgcmUtdGhyb3cuIEVhY2ggZW50cnkgaXMgb25lXG4gICAqIHN1YmZsb3cncyBwcmUtcGF1c2Ugc2hhcmVkIHN0YXRlLCBrZXllZCBieSB0aGUgcGF0aC1wcmVmaXhlZFxuICAgKiBzdWJmbG93IGlkIChtYXRjaGVzIGBzdWJmbG93UGF0aGApLlxuICAgKlxuICAgKiBXaXRob3V0IHRoaXMsIHRoZSBuZXN0ZWQgYFNoYXJlZE1lbW9yeWAgaXMgZ2FyYmFnZS1jb2xsZWN0ZWRcbiAgICogYmVmb3JlIHRoZSBjaGVja3BvaW50IGlzIGJ1aWx0LiBPbiByZXN1bWUsIHRoZSBpbm5lciBydW50aW1lIGlzXG4gICAqIHJlLWNyZWF0ZWQgZW1wdHkgYW5kIHJlc3VtZSBoYW5kbGVycyByZWFkaW5nIHByZS1wYXVzZSBzY29wZVxuICAgKiAoZS5nLiwgYW4gQWdlbnQncyBgc2NvcGUuaGlzdG9yeWAsIGBzY29wZS5wYXVzZWRUb29sQ2FsbElkYClcbiAgICogY3Jhc2ggd2l0aCBcIlggaXMgbm90IGl0ZXJhYmxlXCIgLyB1bmRlZmluZWQuXG4gICAqL1xuICBwcml2YXRlIF9zdWJmbG93U3RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiB1bmtub3duLCBzdGFnZUlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcignRXhlY3V0aW9uIHBhdXNlZCcpO1xuICAgIHRoaXMubmFtZSA9ICdQYXVzZVNpZ25hbCc7XG4gICAgdGhpcy5wYXVzZURhdGEgPSBkYXRhO1xuICAgIHRoaXMuc3RhZ2VJZCA9IHN0YWdlSWQ7XG4gICAgdGhpcy5fc3ViZmxvd1BhdGggPSBbXTtcbiAgICAvLyBQYXVzZVNpZ25hbCBpcyBjb250cm9sIGZsb3csIG5vdCBhIHJlYWwgZXJyb3Ig4oCUIHN0YWNrIHRyYWNlIGhhcyBubyBkaWFnbm9zdGljIHZhbHVlLlxuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgfVxuXG4gIGdldCBzdWJmbG93UGF0aCgpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmZsb3dQYXRoO1xuICB9XG5cbiAgLyoqIFByZXBlbmQgYSBzdWJmbG93IElEIHRvIHRoZSBwYXRoIChjYWxsZWQgZHVyaW5nIGJ1YmJsZS11cCkuICovXG4gIHByZXBlbmRTdWJmbG93KHN1YmZsb3dJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fc3ViZmxvd1BhdGgudW5zaGlmdChzdWJmbG93SWQpO1xuICB9XG5cbiAgLyoqIFRoZSBzdGFnZSB0aGF0IGludm9rZWQgdGhlIHBhdXNlZCBjaGlsZCAoZGVjaWRlciwgc2VsZWN0b3IsIGZvcmspLiAqL1xuICBnZXQgaW52b2tlclN0YWdlSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW52b2tlclN0YWdlSWQ7XG4gIH1cblxuICAvKiogV2hlcmUgZXhlY3V0aW9uIHNob3VsZCBjb250aW51ZSBhZnRlciByZXN1bWUgKGludm9rZXIncyBuZXh0IG5vZGUpLiAqL1xuICBnZXQgY29udGludWF0aW9uU3RhZ2VJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9jb250aW51YXRpb25TdGFnZUlkO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YW1wIHRoZSBpbnZva2VyIGNvbnRleHQgZHVyaW5nIGJ1YmJsZS11cC5cbiAgICogQ2FsbGVkIGJ5IGRlY2lkZXIvc2VsZWN0b3IvZm9yayBoYW5kbGVycyB3aGVuIGNhdGNoaW5nIGEgY2hpbGQncyBQYXVzZVNpZ25hbC5cbiAgICogRmlyc3QgaW52b2tlciB3aW5zIChpbm5lcm1vc3QpIOKAlCBzdWJzZXF1ZW50IGNhbGxzIGFyZSBuby1vcHMuXG4gICAqL1xuICBzZXRJbnZva2VyKGludm9rZXJTdGFnZUlkOiBzdHJpbmcsIGNvbnRpbnVhdGlvblN0YWdlSWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2ludm9rZXJTdGFnZUlkKSB7XG4gICAgICB0aGlzLl9pbnZva2VyU3RhZ2VJZCA9IGludm9rZXJTdGFnZUlkO1xuICAgICAgdGhpcy5fY29udGludWF0aW9uU3RhZ2VJZCA9IGNvbnRpbnVhdGlvblN0YWdlSWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhcHR1cmUgYSBzdWJmbG93J3MgaXNvbGF0ZWQgU2hhcmVkTWVtb3J5IGF0IHRoZSBtb21lbnQgaXRzXG4gICAqIHRyYXZlcnNhbCB0aHJldy4gQ2FsbGVkIGJ5IGBTdWJmbG93RXhlY3V0b3JgIG9uY2UgcGVyIHN1YmZsb3dcbiAgICogYm91bmRhcnkgb24gdGhlIGJ1YmJsZS11cCBwYXRoLiBFYWNoIGNhcHR1cmUgaXMga2V5ZWQgYnkgdGhlXG4gICAqIHBhdGgtcHJlZml4ZWQgc3ViZmxvdyBpZCAodGhlIHNhbWUgaWQgdXNlZCBpbiBgc3ViZmxvd1BhdGhgKS5cbiAgICpcbiAgICogSW5uZXJtb3N0LWZpcnN0OiBhIGRlZXAgYFNlcXVlbmNlKEFnZW50KC4uLikpYCBwYXVzZSBjYXB0dXJlcyB0aGVcbiAgICogYWdlbnQncyBzdWJmbG93IGZpcnN0LCB0aGVuIGl0cyBwYXJlbnQncywgYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3RcbiAgICogbW91bnQuIFRoZSBmdWxsIG5lc3Qgc3Vydml2ZXMgaW50byBgY2hlY2twb2ludC5zdWJmbG93U3RhdGVzYC5cbiAgICovXG4gIGNhcHR1cmVTdWJmbG93U2NvcGUoc3ViZmxvd0lkOiBzdHJpbmcsIHN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IHZvaWQge1xuICAgIC8vIERlZmVuc2l2ZSBzaGFsbG93IGNsb25lIHNvIGxhdGVyIG11dGF0aW9ucyBvbiB0aGUgc291cmNlIGRvbid0XG4gICAgLy8gYmxlZWQgaW50byB0aGUgY2FwdHVyZWQgc25hcHNob3QuIERlZXAgY2xvbmluZyBpcyB0aGUgY29uc3VtZXInc1xuICAgIC8vIHJlc3BvbnNpYmlsaXR5ICh0aGUgcmVzdW1lIHRhcmdldCBtYXkgbm90IGV2ZW4gYmUgb24gdGhpc1xuICAgIC8vIHByb2Nlc3MpOyBTaGFyZWRNZW1vcnkgdmFsdWVzIGFyZSBjb252ZW50aW9uYWxseSBKU09OLWZyaWVuZGx5LlxuICAgIHRoaXMuX3N1YmZsb3dTdGF0ZXNbc3ViZmxvd0lkXSA9IHsgLi4uc3RhdGUgfTtcbiAgfVxuXG4gIC8qKiBDYXB0dXJlZCBzdWJmbG93IHNjb3BlcyAocmVhZC1vbmx5IHZpZXcpLiAqL1xuICBnZXQgc3ViZmxvd1N0YXRlcygpOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4+IHtcbiAgICByZXR1cm4gdGhpcy5fc3ViZmxvd1N0YXRlcztcbiAgfVxufVxuXG4vLyDilIDilIAgUGF1c2VSZXN1bHQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogUmV0dXJuZWQgYnkgYSBwYXVzYWJsZSBzdGFnZSdzIGV4ZWN1dGUvcmVzdW1lIGZ1bmN0aW9uIHRvIHNpZ25hbCBwYXVzZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXhlY3V0ZTogYXN5bmMgKHNjb3BlKSA9PiB7XG4gKiAgIHNjb3BlLm9yZGVySWQgPSAnMTIzJztcbiAqICAgcmV0dXJuIHsgcGF1c2U6IHRydWUsIGRhdGE6IHsgcXVlc3Rpb246ICdBcHByb3ZlIG9yZGVyIDEyMz8nIH0gfTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhdXNlUmVzdWx0IHtcbiAgcmVhZG9ubHkgcGF1c2U6IHRydWU7XG4gIC8qKiBEYXRhIHRvIGluY2x1ZGUgaW4gdGhlIGNoZWNrcG9pbnQg4oCUIHF1ZXN0aW9uLCByZWFzb24sIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBkYXRhPzogdW5rbm93bjtcbn1cblxuLy8g4pSA4pSAIEZsb3djaGFydENoZWNrcG9pbnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogU2VyaWFsaXphYmxlIGNoZWNrcG9pbnQg4oCUIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIHJlc3VtZSBhIHBhdXNlZCBmbG93Y2hhcnQuXG4gKlxuICogSlNPTi1zYWZlOiBubyBmdW5jdGlvbnMsIG5vIGNsYXNzIGluc3RhbmNlcywgbm8gU0RLIGNsaWVudHMuXG4gKiBTdG9yZSBhbnl3aGVyZTogUmVkaXMsIFBvc3RncmVzLCBsb2NhbFN0b3JhZ2UsIGEgZmlsZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gU2F2ZVxuICogY29uc3QgY2hlY2twb2ludCA9IGV4ZWN1dG9yLmdldENoZWNrcG9pbnQoKTsgLy8gYWZ0ZXIgcGF1c2VcbiAqIGF3YWl0IHJlZGlzLnNldChgc2Vzc2lvbjoke2lkfWAsIEpTT04uc3RyaW5naWZ5KGNoZWNrcG9pbnQpKTtcbiAqXG4gKiAvLyBSZXN1bWUgKGhvdXJzIGxhdGVyLCBwb3NzaWJseSBkaWZmZXJlbnQgc2VydmVyKVxuICogY29uc3QgY2hlY2twb2ludCA9IEpTT04ucGFyc2UoYXdhaXQgcmVkaXMuZ2V0KGBzZXNzaW9uOiR7aWR9YCkpO1xuICogY29uc3QgZXhlY3V0b3IgPSBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQpO1xuICogYXdhaXQgZXhlY3V0b3IucmVzdW1lKGNoZWNrcG9pbnQsIHsgYXBwcm92ZWQ6IHRydWUgfSk7XG4gKiBgYGBcbiAqL1xuLyoqXG4gKiBTZXJpYWxpemFibGUgY2hlY2twb2ludCDigJQgZXZlcnl0aGluZyBuZWVkZWQgdG8gcmVzdW1lIGEgcGF1c2VkIGZsb3djaGFydC5cbiAqXG4gKiBUaGUgZXhlY3V0aW9uIHRyZWUgSVMgdGhlIHRyYXZlcnNlZCBwYXRoLiBUaGUgbGVhZiBub2RlIHdpdGggc3RhdHVzICdwYXVzZWQnXG4gKiBJUyB0aGUgY3Vyc29yLiBObyBzZXBhcmF0ZSBwYXRoIGFycmF5IG5lZWRlZCDigJQgdGhlIHRyZWUgc3RydWN0dXJlIGNhcHR1cmVzXG4gKiB0aGUgZnVsbCBuZXN0aW5nIChpbmNsdWRpbmcgc3ViZmxvd3MpLlxuICpcbiAqIEpTT04tc2FmZTogbm8gZnVuY3Rpb25zLCBubyBjbGFzcyBpbnN0YW5jZXMsIG5vIFNESyBjbGllbnRzLlxuICogU3RvcmUgYW55d2hlcmU6IFJlZGlzLCBQb3N0Z3JlcywgbG9jYWxTdG9yYWdlLCBhIGZpbGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGNoZWNrcG9pbnQgPSBleGVjdXRvci5nZXRDaGVja3BvaW50KCk7IC8vIGFmdGVyIHBhdXNlXG4gKiBhd2FpdCByZWRpcy5zZXQoYHNlc3Npb246JHtpZH1gLCBKU09OLnN0cmluZ2lmeShjaGVja3BvaW50KSk7XG4gKlxuICogLy8gUmVzdW1lIChob3VycyBsYXRlciwgcG9zc2libHkgZGlmZmVyZW50IHNlcnZlcilcbiAqIGNvbnN0IGNoZWNrcG9pbnQgPSBKU09OLnBhcnNlKGF3YWl0IHJlZGlzLmdldChgc2Vzc2lvbjoke2lkfWApKTtcbiAqIGNvbnN0IGV4ZWN1dG9yID0gbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0KTtcbiAqIGF3YWl0IGV4ZWN1dG9yLnJlc3VtZShjaGVja3BvaW50LCB7IGFwcHJvdmVkOiB0cnVlIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd2NoYXJ0Q2hlY2twb2ludCB7XG4gIC8qKiBTY29wZSBzdGF0ZSBhdCB0aGUgcGF1c2UgcG9pbnQg4oCUIGFsbCBzaGFyZWQgbWVtb3J5IGtleS92YWx1ZXMuICovXG4gIHJlYWRvbmx5IHNoYXJlZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKiogRXhlY3V0aW9uIHRyZWUg4oCUIHRoZSB0cmF2ZXJzZWQgcGF0aC4gVGhlIGxlYWYgd2l0aCBzdGF0dXMgJ3BhdXNlZCcgaXMgdGhlIGN1cnNvci5cbiAgICogIENvbnRhaW5zIHN1YmZsb3cgbmVzdGluZy4gVXNlZCBmb3IgQlRTIHZpc3VhbGl6YXRpb24gYW5kIHRvIGZpbmQgdGhlIHJlc3VtZSBwb2ludC4gKi9cbiAgcmVhZG9ubHkgZXhlY3V0aW9uVHJlZTogdW5rbm93bjtcblxuICAvKiogSUQgb2YgdGhlIHN0YWdlIHRoYXQgcGF1c2VkLiBVc2VkIGJ5IHJlc3VtZSgpIHRvIGZpbmQgdGhlIG5vZGUgaW4gdGhlIGdyYXBoLiAqL1xuICByZWFkb25seSBwYXVzZWRTdGFnZUlkOiBzdHJpbmc7XG5cbiAgLyoqIFBhdGggdGhyb3VnaCBzdWJmbG93cyB0byB0aGUgcGF1c2VkIHN0YWdlIChlLmcuLCBbJ3NmLXBheW1lbnQnLCAnc2YtdmFsaWRhdGlvbiddKS5cbiAgICogIEVtcHR5IGFycmF5IHdoZW4gcGF1c2VkIGF0IHRoZSB0b3AgbGV2ZWwuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKiogRGF0YSBmcm9tICRwYXVzZSgpIOKAlCBxdWVzdGlvbiwgcmVhc29uLCBtZXRhZGF0YS4gKi9cbiAgcmVhZG9ubHkgcGF1c2VEYXRhPzogdW5rbm93bjtcblxuICAvKiogU3ViZmxvdyByZXN1bHRzIGNvbGxlY3RlZCBiZWZvcmUgdGhlIHBhdXNlLiAqL1xuICByZWFkb25seSBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBTdWJmbG93IHNjb3BlIGNhcHR1cmUg4oCUIG9uZSBlbnRyeSBwZXIgc3ViZmxvdyBib3VuZGFyeSBvbiB0aGUgcGF0aFxuICAgKiB0byB0aGUgcGF1c2VkIHN0YWdlLiBLZXllZCBieSBwYXRoLXByZWZpeGVkIHN1YmZsb3cgaWQgKG1hdGNoZXNcbiAgICogYHN1YmZsb3dQYXRoYCBlbnRyaWVzKS4gRWFjaCB2YWx1ZSBpcyB0aGUgc3ViZmxvdydzIHByZS1wYXVzZVxuICAgKiBzaGFyZWQgc3RhdGUuXG4gICAqXG4gICAqIEFsd2F5cyBwcmVzZW50IChlbXB0eSBge31gIGZvciByb290LWxldmVsIHBhdXNlcyB3aGVyZSBubyBzdWJmbG93c1xuICAgKiB3ZXJlIGVudGVyZWQpLiBPbiByZXN1bWUsIGBTdWJmbG93RXhlY3V0b3JgIHNlZWRzIGVhY2ggbmVzdGVkIHJ1bnRpbWVcbiAgICogZnJvbSB0aGlzIG1hcCAoYW5kIHNraXBzIHRoZSBpbnB1dE1hcHBlcikgc28gcmVzdW1lIGhhbmRsZXJzIHNlZVxuICAgKiBwcmUtcGF1c2Ugc2NvcGUgYWNyb3NzIHNhbWUtZXhlY3V0b3IgQU5EIGNyb3NzLWV4ZWN1dG9yIHJlc3RhcnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1N0YXRlczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuXG4gIC8qKiBTdGFnZSB0aGF0IGludm9rZWQgdGhlIHBhdXNlZCBjaGlsZCAoZGVjaWRlciwgc2VsZWN0b3IsIGZvcmspLiBBYnNlbnQgZm9yIGxpbmVhciBwYXVzZXMuICovXG4gIHJlYWRvbmx5IGludm9rZXJTdGFnZUlkPzogc3RyaW5nO1xuXG4gIC8qKiBXaGVyZSB0byBjb250aW51ZSBhZnRlciByZXN1bWUg4oCUIHRoZSBpbnZva2VyJ3MgbmV4dCBub2RlIElELiBBYnNlbnQgZm9yIGxpbmVhciBwYXVzZXMuICovXG4gIHJlYWRvbmx5IGNvbnRpbnVhdGlvblN0YWdlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqIFRpbWVzdGFtcCBvZiB3aGVuIHRoZSBwYXVzZSBvY2N1cnJlZC4gKi9cbiAgcmVhZG9ubHkgcGF1c2VkQXQ6IG51bWJlcjtcbn1cblxuLy8g4pSA4pSAIFBhdXNhYmxlSGFuZGxlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBIYW5kbGVyIGZvciBhIHBhdXNhYmxlIHN0YWdlIOKAlCBoYXMgdHdvIHBoYXNlczogZXhlY3V0ZSBhbmQgcmVzdW1lLlxuICpcbiAqIGBleGVjdXRlYCBydW5zIHRoZSBmaXJzdCB0aW1lLiBJdCBjYW4gcmV0dXJuIGB7IHBhdXNlOiB0cnVlIH1gIHRvIHBhdXNlLlxuICogYHJlc3VtZWAgcnVucyB3aGVuIHRoZSBmbG93Y2hhcnQgaXMgcmVzdW1lZC4gSXQgcmVjZWl2ZXMgdGhlIHJlc3VtZSBpbnB1dC5cbiAqXG4gKiBCb3RoIHBoYXNlcyByZWNlaXZlIHRoZSBzYW1lIHNjb3BlLiBBZnRlciBleGVjdXRlIHBhdXNlcywgdGhlIHNjb3BlIHN0YXRlXG4gKiBpcyBwcmVzZXJ2ZWQgaW4gdGhlIGNoZWNrcG9pbnQuIE9uIHJlc3VtZSwgdGhlIHNjb3BlIGlzIHJlc3RvcmVkIGJlZm9yZVxuICogY2FsbGluZyByZXN1bWUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC5hZGRQYXVzYWJsZUZ1bmN0aW9uKCdBcHByb3ZlT3JkZXInLCB7XG4gKiAgIGV4ZWN1dGU6IGFzeW5jIChzY29wZSkgPT4ge1xuICogICAgIHNjb3BlLm9yZGVySWQgPSAnMTIzJztcbiAqICAgICBzY29wZS5hbW91bnQgPSAyOTk7XG4gKiAgICAgcmV0dXJuIHsgcGF1c2U6IHRydWUsIGRhdGE6IHsgcXVlc3Rpb246IGBBcHByb3ZlICQke3Njb3BlLmFtb3VudH0gcmVmdW5kP2AgfSB9O1xuICogICB9LFxuICogICByZXN1bWU6IGFzeW5jIChzY29wZSwgaW5wdXQpID0+IHtcbiAqICAgICBzY29wZS5hcHByb3ZlZCA9IGlucHV0LmFwcHJvdmVkO1xuICogICAgIHNjb3BlLmFwcHJvdmVyID0gaW5wdXQuYXBwcm92ZXI7XG4gKiAgIH0sXG4gKiB9LCAnYXBwcm92ZS1vcmRlcicsICdNYW5hZ2VyIGFwcHJvdmFsIGdhdGUnKVxuICpcbiAqIC8vIExhdGVyIOKAlCByZXN1bWUgd2l0aCBodW1hbidzIGFuc3dlclxuICogYXdhaXQgZXhlY3V0b3IucmVzdW1lKGNoZWNrcG9pbnQsIHsgYXBwcm92ZWQ6IHRydWUsIGFwcHJvdmVyOiAnSmFuZScgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXVzYWJsZUhhbmRsZXI8VFNjb3BlID0gYW55LCBUSW5wdXQgPSB1bmtub3duLCBUUGF1c2VEYXRhID0gdW5rbm93bj4ge1xuICAvKipcbiAgICogRmlyc3QtcnVuIHBoYXNlLiBSZXR1cm4gZGF0YSB0byBwYXVzZSwgb3Igdm9pZC91bmRlZmluZWQgdG8gY29udGludWUgbm9ybWFsbHkuXG4gICAqXG4gICAqIEFueSBub24tdm9pZCByZXR1cm4gdmFsdWUgYmVjb21lcyB0aGUgYHBhdXNlRGF0YWAgaW4gdGhlIGNoZWNrcG9pbnQuXG4gICAqIFRoZSBjb25zdW1lciBkZWZpbmVzIHRoZSBgVFBhdXNlRGF0YWAgdHlwZSDigJQgdGhlIEZFIHVzZXMgaXQgdG8gcmVuZGVyXG4gICAqIHRoZSByaWdodCBVSSAoZm9ybSBmaWVsZHMsIGFwcHJvdmFsIGJ1dHRvbnMsIGV0Yy4pLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFRQYXVzZURhdGEgPSB7IHF1ZXN0aW9uOiBzdHJpbmc7IHJpc2tMZXZlbDogc3RyaW5nIH1cbiAgICogY29uc3QgaGFuZGxlcjogUGF1c2FibGVIYW5kbGVyPE15U3RhdGUsIHsgYXBwcm92ZWQ6IGJvb2xlYW4gfSwgeyBxdWVzdGlvbjogc3RyaW5nOyByaXNrTGV2ZWw6IHN0cmluZyB9PiA9IHtcbiAgICogICBleGVjdXRlOiBhc3luYyAoc2NvcGUpID0+IHtcbiAgICogICAgIHJldHVybiB7IHF1ZXN0aW9uOiBgQXBwcm92ZSBvcmRlciAke3Njb3BlLm9yZGVySWR9P2AsIHJpc2tMZXZlbDogJ2hpZ2gnIH07XG4gICAqICAgfSxcbiAgICogICByZXN1bWU6IGFzeW5jIChzY29wZSwgaW5wdXQpID0+IHtcbiAgICogICAgIHNjb3BlLmFwcHJvdmVkID0gaW5wdXQuYXBwcm92ZWQ7XG4gICAqICAgfSxcbiAgICogfTtcbiAgICogYGBgXG4gICAqL1xuICBleGVjdXRlOiAoc2NvcGU6IFRTY29wZSkgPT4gUHJvbWlzZTxUUGF1c2VEYXRhIHwgdm9pZD4gfCBUUGF1c2VEYXRhIHwgdm9pZDtcbiAgLyoqXG4gICAqIFJlc3VtZSBwaGFzZS4gQ2FsbGVkIHdpdGggdGhlIHJlc3VtZSBpbnB1dCB3aGVuIGV4ZWN1dGlvbiBjb250aW51ZXMuXG4gICAqXG4gICAqIFRoZSBzY29wZSBpcyByZXN0b3JlZCBmcm9tIHRoZSBjaGVja3BvaW50J3MgYHNoYXJlZFN0YXRlYC4gV3JpdGVzIGR1cmluZ1xuICAgKiBgcmVzdW1lYCBhcmUgY29tbWl0dGVkIGFuZCB2aXNpYmxlIHRvIHN1YnNlcXVlbnQgc3RhZ2VzLlxuICAgKi9cbiAgcmVzdW1lOiAoc2NvcGU6IFRTY29wZSwgaW5wdXQ6IFRJbnB1dCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG59XG5cbi8vIOKUgOKUgCBUeXBlIGd1YXJkIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhIFBhdXNlUmVzdWx0IChzdGFnZSB3YW50cyB0byBwYXVzZSkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXVzZVJlc3VsdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFBhdXNlUmVzdWx0IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgKHZhbHVlIGFzIFBhdXNlUmVzdWx0KS5wYXVzZSA9PT0gdHJ1ZTtcbn1cblxuLyoqIENoZWNrIGlmIGFuIGVycm9yIGlzIGEgUGF1c2VTaWduYWwuIFVzZXMgaW5zdGFuY2VvZiArIG5hbWUgYnJhbmQgZmFsbGJhY2sgZm9yIGNyb3NzLXJlYWxtIHNhZmV0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdXNlU2lnbmFsKGVycm9yOiB1bmtub3duKTogZXJyb3IgaXMgUGF1c2VTaWduYWwge1xuICByZXR1cm4gKFxuICAgIGVycm9yIGluc3RhbmNlb2YgUGF1c2VTaWduYWwgfHxcbiAgICAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJlxuICAgICAgZXJyb3IubmFtZSA9PT0gJ1BhdXNlU2lnbmFsJyAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVycm9yLCAncGF1c2VEYXRhJykgJiZcbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlcnJvciwgJ3N0YWdlSWQnKSlcbiAgKTtcbn1cbiJdfQ==
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3BhdXNlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7OztBQUVILCtEQUErRDtBQUUvRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLFdBQVksU0FBUSxLQUFLO0lBQ3BDLHVEQUF1RDtJQUM5QyxTQUFTLENBQVU7SUFDNUIsNENBQTRDO0lBQ25DLE9BQU8sQ0FBUztJQUN6Qix5RUFBeUU7SUFDakUsWUFBWSxDQUFXO0lBRS9COzs7Ozs7Ozs7O09BVUc7SUFDSyxlQUFlLENBQVU7SUFDekIsb0JBQW9CLENBQVU7SUFFdEM7Ozs7Ozs7Ozs7O09BV0c7SUFDSyxjQUFjLEdBQTRDLEVBQUUsQ0FBQztJQUVyRSxZQUFZLElBQWEsRUFBRSxPQUFlO1FBQ3hDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLHVGQUF1RjtRQUN2RixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNsQixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxrRUFBa0U7SUFDbEUsY0FBYyxDQUFDLFNBQWlCO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBRUQsMEVBQTBFO0lBQzFFLElBQUksbUJBQW1CO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLGNBQXNCLEVBQUUsbUJBQTRCO1FBQzdELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUM7WUFDdEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLG1CQUFtQixDQUFDO1FBQ2xELENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsbUJBQW1CLENBQUMsU0FBaUIsRUFBRSxLQUE4QjtRQUNuRSxpRUFBaUU7UUFDakUsbUVBQW1FO1FBQ25FLDREQUE0RDtRQUM1RCxrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVELGdEQUFnRDtJQUNoRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBbkdELGtDQW1HQztBQXdLRCwrREFBK0Q7QUFFL0QsZ0VBQWdFO0FBQ2hFLFNBQWdCLGFBQWEsQ0FBQyxLQUFjO0lBQzFDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUssS0FBcUIsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDO0FBQzlGLENBQUM7QUFGRCxzQ0FFQztBQUVELHdHQUF3RztBQUN4RyxTQUFnQixhQUFhLENBQUMsS0FBYztJQUMxQyxPQUFPLENBQ0wsS0FBSyxZQUFZLFdBQVc7UUFDNUIsQ0FBQyxLQUFLLFlBQVksS0FBSztZQUNyQixLQUFLLENBQUMsSUFBSSxLQUFLLGFBQWE7WUFDNUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUM7WUFDeEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUMxRCxDQUFDO0FBQ0osQ0FBQztBQVJELHNDQVFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXVzZS9SZXN1bWUg4oCUIHNlcmlhbGl6YWJsZSBjaGVja3BvaW50IGZvciBsb25nLXJ1bm5pbmcgb3IgaHVtYW4taW4tdGhlLWxvb3AgZmxvd3MuXG4gKlxuICogQSBzdGFnZSBzaWduYWxzIHBhdXNlIGJ5IGNhbGxpbmcgYHNjb3BlLiRwYXVzZShkYXRhKWAgd2hpY2ggdGhyb3dzIGEgUGF1c2VTaWduYWwuXG4gKiBUaGUgc2lnbmFsIGJ1YmJsZXMgdXAgdGhyb3VnaCBTdWJmbG93RXhlY3V0b3Ig4oaSIEZsb3djaGFydFRyYXZlcnNlciDihpIgRmxvd0NoYXJ0RXhlY3V0b3IsXG4gKiBlYWNoIGxldmVsIGFkZGluZyBpdHMgc3ViZmxvdyBJRCB0byB0aGUgcGF0aC5cbiAqXG4gKiBUaGUgY2hlY2twb2ludCBjYXB0dXJlczpcbiAqICAgLSBwYXVzZWRTdGFnZUlkICsgc3ViZmxvd1BhdGg6IHRoZSBwYXVzZWQgc3RhZ2UncyBpZCBhbmQgaXRzIHN1YmZsb3cgcGF0aFxuICogICAtIHNoYXJlZFN0YXRlOiBzY29wZSBhdCB0aGUgcGF1c2UgcG9pbnRcbiAqICAgLSBleGVjdXRpb25UcmVlOiBjb21wbGV0ZWQgc3RhZ2VzIGZvciBCVFMvbmFycmF0aXZlXG4gKiAgIC0gcGF1c2VEYXRhOiBxdWVzdGlvbiwgcmVhc29uLCBvciBtZXRhZGF0YSBmcm9tICRwYXVzZSgpXG4gKlxuICogUmVzdW1lIHJlYnVpbGRzIHRoZSBmbG93Y2hhcnQsIHJlc3RvcmVzIHNjb3BlLCBuYXZpZ2F0ZXMgdG8gdGhlIHBhdXNlZCBzdGFnZSxcbiAqIGluamVjdHMgcmVzdW1lSW5wdXQsIGFuZCBjb250aW51ZXMgdHJhdmVyc2FsLlxuICpcbiAqIFN1cHBvcnRlZCB0b3BvbG9naWVzOiBsaW5lYXIsIHN1YmZsb3csIGxhenkgc3ViZmxvdywgbG9vcCwgbmVzdGVkIHN1YmZsb3cgaW4gbG9vcC5cbiAqL1xuXG4vLyDilIDilIAgUGF1c2VTaWduYWwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogVGhyb3duIGJ5IGBzY29wZS4kcGF1c2UoKWAgdG8gc2lnbmFsIHRoYXQgZXhlY3V0aW9uIHNob3VsZCBzdG9wXG4gKiBhbmQgY3JlYXRlIGEgc2VyaWFsaXphYmxlIGNoZWNrcG9pbnQuXG4gKlxuICogQnViYmxlcyB1cCB0aHJvdWdoIFN1YmZsb3dFeGVjdXRvciAod2hpY2ggcHJlcGVuZHMgc3ViZmxvdyBJRCB0byBwYXRoKVxuICogYW5kIGlzIGNhdWdodCBieSBGbG93Y2hhcnRUcmF2ZXJzZXIvRmxvd0NoYXJ0RXhlY3V0b3IuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXVzZVNpZ25hbCBleHRlbmRzIEVycm9yIHtcbiAgLyoqIERhdGEgZnJvbSAkcGF1c2UoKSDigJQgcXVlc3Rpb24sIHJlYXNvbiwgbWV0YWRhdGEuICovXG4gIHJlYWRvbmx5IHBhdXNlRGF0YTogdW5rbm93bjtcbiAgLyoqIElEIG9mIHRoZSBzdGFnZSB0aGF0IGNhbGxlZCAkcGF1c2UoKS4gKi9cbiAgcmVhZG9ubHkgc3RhZ2VJZDogc3RyaW5nO1xuICAvKiogUGF0aCB0aHJvdWdoIHN1YmZsb3dzIHRvIHRoZSBwYXVzZWQgc3RhZ2UuIEJ1aWx0IGR1cmluZyBidWJibGUtdXAuICovXG4gIHByaXZhdGUgX3N1YmZsb3dQYXRoOiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSW52b2tlciBjb250ZXh0IOKAlCBlbnJpY2hlZCBkdXJpbmcgYnViYmxlLXVwIHdoZW4gYSBQYXVzZVNpZ25hbCBwYXNzZXNcbiAgICogdGhyb3VnaCBhIGRlY2lkZXIsIHNlbGVjdG9yLCBvciBmb3JrIGhhbmRsZXIuXG4gICAqXG4gICAqIFRoZSBpbnZva2VyIGlzIHRoZSBzdGFnZSB0aGF0IGNhbGxlZCBleGVjdXRlTm9kZSgpIG9uIHRoZSBwYXVzZWQgY2hpbGQuXG4gICAqIENhcHR1cmVkIGR1cmluZyB0cmF2ZXJzYWwgKG5vdCByZWNvbnN0cnVjdGVkIGZyb20gdGhlIHRyZWUpLlxuICAgKlxuICAgKiBgY29udGludWF0aW9uU3RhZ2VJZGAgaXMgdGhlIGludm9rZXIncyBgLm5leHRgIG5vZGUg4oCUIHdoZXJlIGV4ZWN1dGlvblxuICAgKiBzaG91bGQgY29udGludWUgYWZ0ZXIgcmVzdW1lLiBXaXRob3V0IHRoaXMsIGJyYW5jaCBjaGlsZHJlbiBoYXZlIG5vXG4gICAqIGAubmV4dGAgcG9pbnRlciBhbmQgcmVzdW1lIHdvdWxkIHRlcm1pbmF0ZSBlYXJseS5cbiAgICovXG4gIHByaXZhdGUgX2ludm9rZXJTdGFnZUlkPzogc3RyaW5nO1xuICBwcml2YXRlIF9jb250aW51YXRpb25TdGFnZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdWJmbG93IHNjb3BlIGNhcHR1cmUg4oCUIHBvcHVsYXRlZCBkdXJpbmcgYnViYmxlLXVwIGJ5XG4gICAqIGBTdWJmbG93RXhlY3V0b3JgIHJpZ2h0IGJlZm9yZSByZS10aHJvdy4gRWFjaCBlbnRyeSBpcyBvbmVcbiAgICogc3ViZmxvdydzIHByZS1wYXVzZSBzaGFyZWQgc3RhdGUsIGtleWVkIGJ5IHRoZSBwYXRoLXByZWZpeGVkXG4gICAqIHN1YmZsb3cgaWQgKG1hdGNoZXMgYHN1YmZsb3dQYXRoYCkuXG4gICAqXG4gICAqIFdpdGhvdXQgdGhpcywgdGhlIG5lc3RlZCBgU2hhcmVkTWVtb3J5YCBpcyBnYXJiYWdlLWNvbGxlY3RlZFxuICAgKiBiZWZvcmUgdGhlIGNoZWNrcG9pbnQgaXMgYnVpbHQuIE9uIHJlc3VtZSwgdGhlIGlubmVyIHJ1bnRpbWUgaXNcbiAgICogcmUtY3JlYXRlZCBlbXB0eSBhbmQgcmVzdW1lIGhhbmRsZXJzIHJlYWRpbmcgcHJlLXBhdXNlIHNjb3BlXG4gICAqIChlLmcuLCBhbiBBZ2VudCdzIGBzY29wZS5oaXN0b3J5YCwgYHNjb3BlLnBhdXNlZFRvb2xDYWxsSWRgKVxuICAgKiBjcmFzaCB3aXRoIFwiWCBpcyBub3QgaXRlcmFibGVcIiAvIHVuZGVmaW5lZC5cbiAgICovXG4gIHByaXZhdGUgX3N1YmZsb3dTdGF0ZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IHVua25vd24sIHN0YWdlSWQ6IHN0cmluZykge1xuICAgIHN1cGVyKCdFeGVjdXRpb24gcGF1c2VkJyk7XG4gICAgdGhpcy5uYW1lID0gJ1BhdXNlU2lnbmFsJztcbiAgICB0aGlzLnBhdXNlRGF0YSA9IGRhdGE7XG4gICAgdGhpcy5zdGFnZUlkID0gc3RhZ2VJZDtcbiAgICB0aGlzLl9zdWJmbG93UGF0aCA9IFtdO1xuICAgIC8vIFBhdXNlU2lnbmFsIGlzIGNvbnRyb2wgZmxvdywgbm90IGEgcmVhbCBlcnJvciDigJQgc3RhY2sgdHJhY2UgaGFzIG5vIGRpYWdub3N0aWMgdmFsdWUuXG4gICAgdGhpcy5zdGFjayA9ICcnO1xuICB9XG5cbiAgZ2V0IHN1YmZsb3dQYXRoKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViZmxvd1BhdGg7XG4gIH1cblxuICAvKiogUHJlcGVuZCBhIHN1YmZsb3cgSUQgdG8gdGhlIHBhdGggKGNhbGxlZCBkdXJpbmcgYnViYmxlLXVwKS4gKi9cbiAgcHJlcGVuZFN1YmZsb3coc3ViZmxvd0lkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJmbG93UGF0aC51bnNoaWZ0KHN1YmZsb3dJZCk7XG4gIH1cblxuICAvKiogVGhlIHN0YWdlIHRoYXQgaW52b2tlZCB0aGUgcGF1c2VkIGNoaWxkIChkZWNpZGVyLCBzZWxlY3RvciwgZm9yaykuICovXG4gIGdldCBpbnZva2VyU3RhZ2VJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbnZva2VyU3RhZ2VJZDtcbiAgfVxuXG4gIC8qKiBXaGVyZSBleGVjdXRpb24gc2hvdWxkIGNvbnRpbnVlIGFmdGVyIHJlc3VtZSAoaW52b2tlcidzIG5leHQgbm9kZSkuICovXG4gIGdldCBjb250aW51YXRpb25TdGFnZUlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRpbnVhdGlvblN0YWdlSWQ7XG4gIH1cblxuICAvKipcbiAgICogU3RhbXAgdGhlIGludm9rZXIgY29udGV4dCBkdXJpbmcgYnViYmxlLXVwLlxuICAgKiBDYWxsZWQgYnkgZGVjaWRlci9zZWxlY3Rvci9mb3JrIGhhbmRsZXJzIHdoZW4gY2F0Y2hpbmcgYSBjaGlsZCdzIFBhdXNlU2lnbmFsLlxuICAgKiBGaXJzdCBpbnZva2VyIHdpbnMgKGlubmVybW9zdCkg4oCUIHN1YnNlcXVlbnQgY2FsbHMgYXJlIG5vLW9wcy5cbiAgICovXG4gIHNldEludm9rZXIoaW52b2tlclN0YWdlSWQ6IHN0cmluZywgY29udGludWF0aW9uU3RhZ2VJZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW52b2tlclN0YWdlSWQpIHtcbiAgICAgIHRoaXMuX2ludm9rZXJTdGFnZUlkID0gaW52b2tlclN0YWdlSWQ7XG4gICAgICB0aGlzLl9jb250aW51YXRpb25TdGFnZUlkID0gY29udGludWF0aW9uU3RhZ2VJZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FwdHVyZSBhIHN1YmZsb3cncyBpc29sYXRlZCBTaGFyZWRNZW1vcnkgYXQgdGhlIG1vbWVudCBpdHNcbiAgICogdHJhdmVyc2FsIHRocmV3LiBDYWxsZWQgYnkgYFN1YmZsb3dFeGVjdXRvcmAgb25jZSBwZXIgc3ViZmxvd1xuICAgKiBib3VuZGFyeSBvbiB0aGUgYnViYmxlLXVwIHBhdGguIEVhY2ggY2FwdHVyZSBpcyBrZXllZCBieSB0aGVcbiAgICogcGF0aC1wcmVmaXhlZCBzdWJmbG93IGlkICh0aGUgc2FtZSBpZCB1c2VkIGluIGBzdWJmbG93UGF0aGApLlxuICAgKlxuICAgKiBJbm5lcm1vc3QtZmlyc3Q6IGEgZGVlcCBgU2VxdWVuY2UoQWdlbnQoLi4uKSlgIHBhdXNlIGNhcHR1cmVzIHRoZVxuICAgKiBhZ2VudCdzIHN1YmZsb3cgZmlyc3QsIHRoZW4gaXRzIHBhcmVudCdzLCBhbGwgdGhlIHdheSB0byB0aGUgcm9vdFxuICAgKiBtb3VudC4gVGhlIGZ1bGwgbmVzdCBzdXJ2aXZlcyBpbnRvIGBjaGVja3BvaW50LnN1YmZsb3dTdGF0ZXNgLlxuICAgKi9cbiAgY2FwdHVyZVN1YmZsb3dTY29wZShzdWJmbG93SWQ6IHN0cmluZywgc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgLy8gRGVmZW5zaXZlIHNoYWxsb3cgY2xvbmUgc28gbGF0ZXIgbXV0YXRpb25zIG9uIHRoZSBzb3VyY2UgZG9uJ3RcbiAgICAvLyBibGVlZCBpbnRvIHRoZSBjYXB0dXJlZCBzbmFwc2hvdC4gRGVlcCBjbG9uaW5nIGlzIHRoZSBjb25zdW1lcidzXG4gICAgLy8gcmVzcG9uc2liaWxpdHkgKHRoZSByZXN1bWUgdGFyZ2V0IG1heSBub3QgZXZlbiBiZSBvbiB0aGlzXG4gICAgLy8gcHJvY2Vzcyk7IFNoYXJlZE1lbW9yeSB2YWx1ZXMgYXJlIGNvbnZlbnRpb25hbGx5IEpTT04tZnJpZW5kbHkuXG4gICAgdGhpcy5fc3ViZmxvd1N0YXRlc1tzdWJmbG93SWRdID0geyAuLi5zdGF0ZSB9O1xuICB9XG5cbiAgLyoqIENhcHR1cmVkIHN1YmZsb3cgc2NvcGVzIChyZWFkLW9ubHkgdmlldykuICovXG4gIGdldCBzdWJmbG93U3RhdGVzKCk6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ge1xuICAgIHJldHVybiB0aGlzLl9zdWJmbG93U3RhdGVzO1xuICB9XG59XG5cbi8vIOKUgOKUgCBQYXVzZVJlc3VsdCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBSZXR1cm5lZCBieSBhIHBhdXNhYmxlIHN0YWdlJ3MgZXhlY3V0ZS9yZXN1bWUgZnVuY3Rpb24gdG8gc2lnbmFsIHBhdXNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleGVjdXRlOiBhc3luYyAoc2NvcGUpID0+IHtcbiAqICAgc2NvcGUub3JkZXJJZCA9ICcxMjMnO1xuICogICByZXR1cm4geyBwYXVzZTogdHJ1ZSwgZGF0YTogeyBxdWVzdGlvbjogJ0FwcHJvdmUgb3JkZXIgMTIzPycgfSB9O1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF1c2VSZXN1bHQge1xuICByZWFkb25seSBwYXVzZTogdHJ1ZTtcbiAgLyoqIERhdGEgdG8gaW5jbHVkZSBpbiB0aGUgY2hlY2twb2ludCDigJQgcXVlc3Rpb24sIHJlYXNvbiwgbWV0YWRhdGEuICovXG4gIHJlYWRvbmx5IGRhdGE/OiB1bmtub3duO1xufVxuXG4vLyDilIDilIAgRmxvd2NoYXJ0Q2hlY2twb2ludCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBTZXJpYWxpemFibGUgY2hlY2twb2ludCDigJQgZXZlcnl0aGluZyBuZWVkZWQgdG8gcmVzdW1lIGEgcGF1c2VkIGZsb3djaGFydC5cbiAqXG4gKiBKU09OLXNhZmU6IG5vIGZ1bmN0aW9ucywgbm8gY2xhc3MgaW5zdGFuY2VzLCBubyBTREsgY2xpZW50cy5cbiAqIFN0b3JlIGFueXdoZXJlOiBSZWRpcywgUG9zdGdyZXMsIGxvY2FsU3RvcmFnZSwgYSBmaWxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBTYXZlXG4gKiBjb25zdCBjaGVja3BvaW50ID0gZXhlY3V0b3IuZ2V0Q2hlY2twb2ludCgpOyAvLyBhZnRlciBwYXVzZVxuICogYXdhaXQgcmVkaXMuc2V0KGBzZXNzaW9uOiR7aWR9YCwgSlNPTi5zdHJpbmdpZnkoY2hlY2twb2ludCkpO1xuICpcbiAqIC8vIFJlc3VtZSAoaG91cnMgbGF0ZXIsIHBvc3NpYmx5IGRpZmZlcmVudCBzZXJ2ZXIpXG4gKiBjb25zdCBjaGVja3BvaW50ID0gSlNPTi5wYXJzZShhd2FpdCByZWRpcy5nZXQoYHNlc3Npb246JHtpZH1gKSk7XG4gKiBjb25zdCBleGVjdXRvciA9IG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCk7XG4gKiBhd2FpdCBleGVjdXRvci5yZXN1bWUoY2hlY2twb2ludCwgeyBhcHByb3ZlZDogdHJ1ZSB9KTtcbiAqIGBgYFxuICovXG4vKipcbiAqIFNlcmlhbGl6YWJsZSBjaGVja3BvaW50IOKAlCBldmVyeXRoaW5nIG5lZWRlZCB0byByZXN1bWUgYSBwYXVzZWQgZmxvd2NoYXJ0LlxuICpcbiAqIFRoZSBleGVjdXRpb24gdHJlZSBJUyB0aGUgdHJhdmVyc2VkIHBhdGguIFRoZSBsZWFmIG5vZGUgd2l0aCBzdGF0dXMgJ3BhdXNlZCdcbiAqIElTIHRoZSBjdXJzb3IuIE5vIHNlcGFyYXRlIHBhdGggYXJyYXkgbmVlZGVkIOKAlCB0aGUgdHJlZSBzdHJ1Y3R1cmUgY2FwdHVyZXNcbiAqIHRoZSBmdWxsIG5lc3RpbmcgKGluY2x1ZGluZyBzdWJmbG93cykuXG4gKlxuICogSlNPTi1zYWZlOiBubyBmdW5jdGlvbnMsIG5vIGNsYXNzIGluc3RhbmNlcywgbm8gU0RLIGNsaWVudHMuXG4gKiBTdG9yZSBhbnl3aGVyZTogUmVkaXMsIFBvc3RncmVzLCBsb2NhbFN0b3JhZ2UsIGEgZmlsZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY2hlY2twb2ludCA9IGV4ZWN1dG9yLmdldENoZWNrcG9pbnQoKTsgLy8gYWZ0ZXIgcGF1c2VcbiAqIGF3YWl0IHJlZGlzLnNldChgc2Vzc2lvbjoke2lkfWAsIEpTT04uc3RyaW5naWZ5KGNoZWNrcG9pbnQpKTtcbiAqXG4gKiAvLyBSZXN1bWUgKGhvdXJzIGxhdGVyLCBwb3NzaWJseSBkaWZmZXJlbnQgc2VydmVyKVxuICogY29uc3QgY2hlY2twb2ludCA9IEpTT04ucGFyc2UoYXdhaXQgcmVkaXMuZ2V0KGBzZXNzaW9uOiR7aWR9YCkpO1xuICogY29uc3QgZXhlY3V0b3IgPSBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQpO1xuICogYXdhaXQgZXhlY3V0b3IucmVzdW1lKGNoZWNrcG9pbnQsIHsgYXBwcm92ZWQ6IHRydWUgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93Y2hhcnRDaGVja3BvaW50IHtcbiAgLyoqIFNjb3BlIHN0YXRlIGF0IHRoZSBwYXVzZSBwb2ludCDigJQgYWxsIHNoYXJlZCBtZW1vcnkga2V5L3ZhbHVlcy4gKi9cbiAgcmVhZG9ubHkgc2hhcmVkU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKiBFeGVjdXRpb24gdHJlZSDigJQgdGhlIHRyYXZlcnNlZCBwYXRoLiBUaGUgbGVhZiB3aXRoIHN0YXR1cyAncGF1c2VkJyBpcyB0aGUgY3Vyc29yLlxuICAgKiAgQ29udGFpbnMgc3ViZmxvdyBuZXN0aW5nLiBVc2VkIGZvciBCVFMgdmlzdWFsaXphdGlvbiBhbmQgdG8gZmluZCB0aGUgcmVzdW1lIHBvaW50LiAqL1xuICByZWFkb25seSBleGVjdXRpb25UcmVlOiB1bmtub3duO1xuXG4gIC8qKiBJRCBvZiB0aGUgc3RhZ2UgdGhhdCBwYXVzZWQuIFVzZWQgYnkgcmVzdW1lKCkgdG8gZmluZCB0aGUgbm9kZSBpbiB0aGUgZ3JhcGguICovXG4gIHJlYWRvbmx5IHBhdXNlZFN0YWdlSWQ6IHN0cmluZztcblxuICAvKiogUGF0aCB0aHJvdWdoIHN1YmZsb3dzIHRvIHRoZSBwYXVzZWQgc3RhZ2UgKGUuZy4sIFsnc2YtcGF5bWVudCcsICdzZi12YWxpZGF0aW9uJ10pLlxuICAgKiAgRW1wdHkgYXJyYXkgd2hlbiBwYXVzZWQgYXQgdGhlIHRvcCBsZXZlbC4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKiBEYXRhIGZyb20gJHBhdXNlKCkg4oCUIHF1ZXN0aW9uLCByZWFzb24sIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBwYXVzZURhdGE/OiB1bmtub3duO1xuXG4gIC8qKiBTdWJmbG93IHJlc3VsdHMgY29sbGVjdGVkIGJlZm9yZSB0aGUgcGF1c2UuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dSZXN1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFN1YmZsb3cgc2NvcGUgY2FwdHVyZSDigJQgb25lIGVudHJ5IHBlciBzdWJmbG93IGJvdW5kYXJ5IG9uIHRoZSBwYXRoXG4gICAqIHRvIHRoZSBwYXVzZWQgc3RhZ2UuIEtleWVkIGJ5IHBhdGgtcHJlZml4ZWQgc3ViZmxvdyBpZCAobWF0Y2hlc1xuICAgKiBgc3ViZmxvd1BhdGhgIGVudHJpZXMpLiBFYWNoIHZhbHVlIGlzIHRoZSBzdWJmbG93J3MgcHJlLXBhdXNlXG4gICAqIHNoYXJlZCBzdGF0ZS5cbiAgICpcbiAgICogQWx3YXlzIHByZXNlbnQgKGVtcHR5IGB7fWAgZm9yIHJvb3QtbGV2ZWwgcGF1c2VzIHdoZXJlIG5vIHN1YmZsb3dzXG4gICAqIHdlcmUgZW50ZXJlZCkuIE9uIHJlc3VtZSwgYFN1YmZsb3dFeGVjdXRvcmAgc2VlZHMgZWFjaCBuZXN0ZWQgcnVudGltZVxuICAgKiBmcm9tIHRoaXMgbWFwIChhbmQgc2tpcHMgdGhlIGlucHV0TWFwcGVyKSBzbyByZXN1bWUgaGFuZGxlcnMgc2VlXG4gICAqIHByZS1wYXVzZSBzY29wZSBhY3Jvc3Mgc2FtZS1leGVjdXRvciBBTkQgY3Jvc3MtZXhlY3V0b3IgcmVzdGFydHMuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93U3RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cbiAgLyoqIFN0YWdlIHRoYXQgaW52b2tlZCB0aGUgcGF1c2VkIGNoaWxkIChkZWNpZGVyLCBzZWxlY3RvciwgZm9yaykuIEFic2VudCBmb3IgbGluZWFyIHBhdXNlcy4gKi9cbiAgcmVhZG9ubHkgaW52b2tlclN0YWdlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqIFdoZXJlIHRvIGNvbnRpbnVlIGFmdGVyIHJlc3VtZSDigJQgdGhlIGludm9rZXIncyBuZXh0IG5vZGUgSUQuIEFic2VudCBmb3IgbGluZWFyIHBhdXNlcy4gKi9cbiAgcmVhZG9ubHkgY29udGludWF0aW9uU3RhZ2VJZD86IHN0cmluZztcblxuICAvKiogVGltZXN0YW1wIG9mIHdoZW4gdGhlIHBhdXNlIG9jY3VycmVkLiAqL1xuICByZWFkb25seSBwYXVzZWRBdDogbnVtYmVyO1xufVxuXG4vLyDilIDilIAgUGF1c2FibGVIYW5kbGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIEhhbmRsZXIgZm9yIGEgcGF1c2FibGUgc3RhZ2Ug4oCUIGhhcyB0d28gcGhhc2VzOiBleGVjdXRlIGFuZCByZXN1bWUuXG4gKlxuICogYGV4ZWN1dGVgIHJ1bnMgdGhlIGZpcnN0IHRpbWUuIFJldHVybiBhbnkgbm9uLXZvaWQgdmFsdWUgdG8gcGF1c2UgKHRoYXQgdmFsdWVcbiAqIGJlY29tZXMgdGhlIGNoZWNrcG9pbnQncyBgcGF1c2VEYXRhYCk7IHJldHVybiB2b2lkL3VuZGVmaW5lZCB0byBjb250aW51ZSBub3JtYWxseS5cbiAqIGByZXN1bWVgIHJ1bnMgd2hlbiB0aGUgZmxvd2NoYXJ0IGlzIHJlc3VtZWQuIEl0IHJlY2VpdmVzIHRoZSByZXN1bWUgaW5wdXQuXG4gKlxuICogQm90aCBwaGFzZXMgcmVjZWl2ZSB0aGUgc2FtZSBzY29wZS4gQWZ0ZXIgZXhlY3V0ZSBwYXVzZXMsIHRoZSBzY29wZSBzdGF0ZVxuICogaXMgcHJlc2VydmVkIGluIHRoZSBjaGVja3BvaW50LiBPbiByZXN1bWUsIHRoZSBzY29wZSBpcyByZXN0b3JlZCBiZWZvcmVcbiAqIGNhbGxpbmcgcmVzdW1lLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAuYWRkUGF1c2FibGVGdW5jdGlvbignQXBwcm92ZU9yZGVyJywge1xuICogICBleGVjdXRlOiBhc3luYyAoc2NvcGUpID0+IHtcbiAqICAgICBzY29wZS5vcmRlcklkID0gJzEyMyc7XG4gKiAgICAgc2NvcGUuYW1vdW50ID0gMjk5O1xuICogICAgIHJldHVybiB7IHF1ZXN0aW9uOiBgQXBwcm92ZSAkJHtzY29wZS5hbW91bnR9IHJlZnVuZD9gIH07XG4gKiAgIH0sXG4gKiAgIHJlc3VtZTogYXN5bmMgKHNjb3BlLCBpbnB1dCkgPT4ge1xuICogICAgIHNjb3BlLmFwcHJvdmVkID0gaW5wdXQuYXBwcm92ZWQ7XG4gKiAgICAgc2NvcGUuYXBwcm92ZXIgPSBpbnB1dC5hcHByb3ZlcjtcbiAqICAgfSxcbiAqIH0sICdhcHByb3ZlLW9yZGVyJywgJ01hbmFnZXIgYXBwcm92YWwgZ2F0ZScpXG4gKlxuICogLy8gTGF0ZXIg4oCUIHJlc3VtZSB3aXRoIGh1bWFuJ3MgYW5zd2VyXG4gKiBhd2FpdCBleGVjdXRvci5yZXN1bWUoY2hlY2twb2ludCwgeyBhcHByb3ZlZDogdHJ1ZSwgYXBwcm92ZXI6ICdKYW5lJyB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhdXNhYmxlSGFuZGxlcjxUU2NvcGUgPSBhbnksIFRJbnB1dCA9IHVua25vd24sIFRQYXVzZURhdGEgPSB1bmtub3duPiB7XG4gIC8qKlxuICAgKiBGaXJzdC1ydW4gcGhhc2UuIFJldHVybiBkYXRhIHRvIHBhdXNlLCBvciB2b2lkL3VuZGVmaW5lZCB0byBjb250aW51ZSBub3JtYWxseS5cbiAgICpcbiAgICogQW55IG5vbi12b2lkIHJldHVybiB2YWx1ZSBiZWNvbWVzIHRoZSBgcGF1c2VEYXRhYCBpbiB0aGUgY2hlY2twb2ludC5cbiAgICogVGhlIGNvbnN1bWVyIGRlZmluZXMgdGhlIGBUUGF1c2VEYXRhYCB0eXBlIOKAlCB0aGUgRkUgdXNlcyBpdCB0byByZW5kZXJcbiAgICogdGhlIHJpZ2h0IFVJIChmb3JtIGZpZWxkcywgYXBwcm92YWwgYnV0dG9ucywgZXRjLikuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gVFBhdXNlRGF0YSA9IHsgcXVlc3Rpb246IHN0cmluZzsgcmlza0xldmVsOiBzdHJpbmcgfVxuICAgKiBjb25zdCBoYW5kbGVyOiBQYXVzYWJsZUhhbmRsZXI8TXlTdGF0ZSwgeyBhcHByb3ZlZDogYm9vbGVhbiB9LCB7IHF1ZXN0aW9uOiBzdHJpbmc7IHJpc2tMZXZlbDogc3RyaW5nIH0+ID0ge1xuICAgKiAgIGV4ZWN1dGU6IGFzeW5jIChzY29wZSkgPT4ge1xuICAgKiAgICAgcmV0dXJuIHsgcXVlc3Rpb246IGBBcHByb3ZlIG9yZGVyICR7c2NvcGUub3JkZXJJZH0/YCwgcmlza0xldmVsOiAnaGlnaCcgfTtcbiAgICogICB9LFxuICAgKiAgIHJlc3VtZTogYXN5bmMgKHNjb3BlLCBpbnB1dCkgPT4ge1xuICAgKiAgICAgc2NvcGUuYXBwcm92ZWQgPSBpbnB1dC5hcHByb3ZlZDtcbiAgICogICB9LFxuICAgKiB9O1xuICAgKiBgYGBcbiAgICovXG4gIGV4ZWN1dGU6IChzY29wZTogVFNjb3BlKSA9PiBQcm9taXNlPFRQYXVzZURhdGEgfCB2b2lkPiB8IFRQYXVzZURhdGEgfCB2b2lkO1xuICAvKipcbiAgICogUmVzdW1lIHBoYXNlLiBDYWxsZWQgd2l0aCB0aGUgcmVzdW1lIGlucHV0IHdoZW4gZXhlY3V0aW9uIGNvbnRpbnVlcy5cbiAgICpcbiAgICogVGhlIHNjb3BlIGlzIHJlc3RvcmVkIGZyb20gdGhlIGNoZWNrcG9pbnQncyBgc2hhcmVkU3RhdGVgLiBXcml0ZXMgZHVyaW5nXG4gICAqIGByZXN1bWVgIGFyZSBjb21taXR0ZWQgYW5kIHZpc2libGUgdG8gc3Vic2VxdWVudCBzdGFnZXMuXG4gICAqL1xuICByZXN1bWU6IChzY29wZTogVFNjb3BlLCBpbnB1dDogVElucHV0KSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcbn1cblxuLy8g4pSA4pSAIFR5cGUgZ3VhcmQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBDaGVjayBpZiBhIHZhbHVlIGlzIGEgUGF1c2VSZXN1bHQgKHN0YWdlIHdhbnRzIHRvIHBhdXNlKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdXNlUmVzdWx0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUGF1c2VSZXN1bHQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiAodmFsdWUgYXMgUGF1c2VSZXN1bHQpLnBhdXNlID09PSB0cnVlO1xufVxuXG4vKiogQ2hlY2sgaWYgYW4gZXJyb3IgaXMgYSBQYXVzZVNpZ25hbC4gVXNlcyBpbnN0YW5jZW9mICsgbmFtZSBicmFuZCBmYWxsYmFjayBmb3IgY3Jvc3MtcmVhbG0gc2FmZXR5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGF1c2VTaWduYWwoZXJyb3I6IHVua25vd24pOiBlcnJvciBpcyBQYXVzZVNpZ25hbCB7XG4gIHJldHVybiAoXG4gICAgZXJyb3IgaW5zdGFuY2VvZiBQYXVzZVNpZ25hbCB8fFxuICAgIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmXG4gICAgICBlcnJvci5uYW1lID09PSAnUGF1c2VTaWduYWwnICYmXG4gICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXJyb3IsICdwYXVzZURhdGEnKSAmJlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVycm9yLCAnc3RhZ2VJZCcpKVxuICApO1xufVxuIl19
|