footprintjs 10.4.0 → 10.6.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.
Files changed (122) hide show
  1. package/README.md +63 -25
  2. package/dist/esm/index.d.ts +1 -0
  3. package/dist/esm/index.js +1 -1
  4. package/dist/esm/lib/capture/historyData.d.ts +6 -2
  5. package/dist/esm/lib/capture/historyData.js +18 -1
  6. package/dist/esm/lib/capture/historyNote.d.ts +2 -2
  7. package/dist/esm/lib/capture/historyNote.js +11 -6
  8. package/dist/esm/lib/capture/historyTypes.d.ts +1 -1
  9. package/dist/esm/lib/capture/historyTypes.js +1 -1
  10. package/dist/esm/lib/capture/nativeSourceAddress.d.ts +3 -0
  11. package/dist/esm/lib/capture/nativeSourceAddress.js +15 -0
  12. package/dist/esm/lib/capture/readSources.d.ts +20 -3
  13. package/dist/esm/lib/capture/readSources.js +41 -12
  14. package/dist/esm/lib/capture/sinkSettlement.d.ts +6 -0
  15. package/dist/esm/lib/capture/sinkSettlement.js +10 -0
  16. package/dist/esm/lib/capture/sourceOwnership.d.ts +21 -0
  17. package/dist/esm/lib/capture/sourceOwnership.js +133 -0
  18. package/dist/esm/lib/capture/sourceOwnershipFormat.d.ts +35 -0
  19. package/dist/esm/lib/capture/sourceOwnershipFormat.js +31 -0
  20. package/dist/esm/lib/capture/sourceReadCounts.d.ts +18 -0
  21. package/dist/esm/lib/capture/sourceReadCounts.js +27 -0
  22. package/dist/esm/lib/capture/sourceReferenceBudget.d.ts +10 -0
  23. package/dist/esm/lib/capture/sourceReferenceBudget.js +21 -0
  24. package/dist/esm/lib/capture/storedReadSourceCounts.d.ts +7 -0
  25. package/dist/esm/lib/capture/storedReadSourceCounts.js +82 -0
  26. package/dist/esm/lib/capture/storedReadSources.d.ts +4 -0
  27. package/dist/esm/lib/capture/storedReadSources.js +120 -0
  28. package/dist/esm/lib/capture/storedSourceOwnership.d.ts +8 -0
  29. package/dist/esm/lib/capture/storedSourceOwnership.js +100 -0
  30. package/dist/esm/lib/engine/handlers/StageRunner.js +2 -1
  31. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +11 -2
  32. package/dist/esm/lib/engine/handlers/servedSubflowResults.js +13 -2
  33. package/dist/esm/lib/engine/types.d.ts +2 -1
  34. package/dist/esm/lib/engine/types.js +1 -1
  35. package/dist/esm/lib/memory/StageContext.d.ts +4 -0
  36. package/dist/esm/lib/memory/StageContext.js +40 -7
  37. package/dist/esm/lib/memory/frameTypes.d.ts +5 -0
  38. package/dist/esm/lib/memory/frameTypes.js +1 -1
  39. package/dist/esm/lib/memory/logAddress.d.ts +3 -0
  40. package/dist/esm/lib/memory/logAddress.js +7 -0
  41. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +2 -0
  42. package/dist/esm/lib/runner/ExecutionRuntime.js +65 -8
  43. package/dist/esm/lib/runner/FlowChartExecutor.js +4 -2
  44. package/dist/esm/lib/runner/captureHistory.js +16 -10
  45. package/dist/esm/lib/runner/readStoredCapture.d.ts +4 -2
  46. package/dist/esm/lib/runner/readStoredCapture.js +3 -3
  47. package/dist/esm/lib/runner/recordSink.js +2 -10
  48. package/dist/esm/lib/runner/storedCaptureAdmission.js +10 -8
  49. package/dist/esm/lib/scope/ScopeFacade.js +2 -2
  50. package/dist/esm/lib/sinks/indexedAdmission.d.ts +14 -0
  51. package/dist/esm/lib/sinks/indexedAdmission.js +77 -0
  52. package/dist/esm/lib/sinks/indexedIO.d.ts +14 -0
  53. package/dist/esm/lib/sinks/indexedIO.js +96 -0
  54. package/dist/esm/lib/sinks/indexedRecordFile.d.ts +3 -0
  55. package/dist/esm/lib/sinks/indexedRecordFile.js +120 -0
  56. package/dist/esm/lib/sinks/indexedScan.d.ts +6 -0
  57. package/dist/esm/lib/sinks/indexedScan.js +73 -0
  58. package/dist/esm/lib/sinks/indexedTypes.d.ts +60 -0
  59. package/dist/esm/lib/sinks/indexedTypes.js +2 -0
  60. package/dist/esm/sinks.d.ts +2 -0
  61. package/dist/esm/sinks.js +2 -1
  62. package/dist/index.js +1 -1
  63. package/dist/lib/capture/historyData.js +21 -2
  64. package/dist/lib/capture/historyNote.js +9 -4
  65. package/dist/lib/capture/historyTypes.js +1 -1
  66. package/dist/lib/capture/nativeSourceAddress.js +19 -0
  67. package/dist/lib/capture/readSources.js +44 -13
  68. package/dist/lib/capture/sinkSettlement.js +14 -0
  69. package/dist/lib/capture/sourceOwnership.js +138 -0
  70. package/dist/lib/capture/sourceOwnershipFormat.js +35 -0
  71. package/dist/lib/capture/sourceReadCounts.js +31 -0
  72. package/dist/lib/capture/sourceReferenceBudget.js +25 -0
  73. package/dist/lib/capture/storedReadSourceCounts.js +86 -0
  74. package/dist/lib/capture/storedReadSources.js +124 -0
  75. package/dist/lib/capture/storedSourceOwnership.js +104 -0
  76. package/dist/lib/engine/handlers/StageRunner.js +2 -1
  77. package/dist/lib/engine/handlers/SubflowExecutor.js +11 -2
  78. package/dist/lib/engine/handlers/servedSubflowResults.js +13 -2
  79. package/dist/lib/engine/types.js +1 -1
  80. package/dist/lib/memory/StageContext.js +40 -7
  81. package/dist/lib/memory/frameTypes.js +1 -1
  82. package/dist/lib/memory/logAddress.js +11 -0
  83. package/dist/lib/runner/ExecutionRuntime.js +65 -8
  84. package/dist/lib/runner/FlowChartExecutor.js +4 -2
  85. package/dist/lib/runner/captureHistory.js +15 -9
  86. package/dist/lib/runner/readStoredCapture.js +2 -2
  87. package/dist/lib/runner/recordSink.js +6 -14
  88. package/dist/lib/runner/storedCaptureAdmission.js +9 -7
  89. package/dist/lib/scope/ScopeFacade.js +2 -2
  90. package/dist/lib/sinks/indexedAdmission.js +85 -0
  91. package/dist/lib/sinks/indexedIO.js +106 -0
  92. package/dist/lib/sinks/indexedRecordFile.js +124 -0
  93. package/dist/lib/sinks/indexedScan.js +77 -0
  94. package/dist/lib/sinks/indexedTypes.js +3 -0
  95. package/dist/sinks.js +4 -2
  96. package/dist/types/index.d.ts +1 -0
  97. package/dist/types/lib/capture/historyData.d.ts +6 -2
  98. package/dist/types/lib/capture/historyNote.d.ts +2 -2
  99. package/dist/types/lib/capture/historyTypes.d.ts +1 -1
  100. package/dist/types/lib/capture/nativeSourceAddress.d.ts +3 -0
  101. package/dist/types/lib/capture/readSources.d.ts +20 -3
  102. package/dist/types/lib/capture/sinkSettlement.d.ts +6 -0
  103. package/dist/types/lib/capture/sourceOwnership.d.ts +21 -0
  104. package/dist/types/lib/capture/sourceOwnershipFormat.d.ts +35 -0
  105. package/dist/types/lib/capture/sourceReadCounts.d.ts +18 -0
  106. package/dist/types/lib/capture/sourceReferenceBudget.d.ts +10 -0
  107. package/dist/types/lib/capture/storedReadSourceCounts.d.ts +7 -0
  108. package/dist/types/lib/capture/storedReadSources.d.ts +4 -0
  109. package/dist/types/lib/capture/storedSourceOwnership.d.ts +8 -0
  110. package/dist/types/lib/engine/types.d.ts +2 -1
  111. package/dist/types/lib/memory/StageContext.d.ts +4 -0
  112. package/dist/types/lib/memory/frameTypes.d.ts +5 -0
  113. package/dist/types/lib/memory/logAddress.d.ts +3 -0
  114. package/dist/types/lib/runner/ExecutionRuntime.d.ts +2 -0
  115. package/dist/types/lib/runner/readStoredCapture.d.ts +4 -2
  116. package/dist/types/lib/sinks/indexedAdmission.d.ts +14 -0
  117. package/dist/types/lib/sinks/indexedIO.d.ts +14 -0
  118. package/dist/types/lib/sinks/indexedRecordFile.d.ts +3 -0
  119. package/dist/types/lib/sinks/indexedScan.d.ts +6 -0
  120. package/dist/types/lib/sinks/indexedTypes.d.ts +60 -0
  121. package/dist/types/sinks.d.ts +2 -0
  122. package/package.json +1 -1
package/README.md CHANGED
@@ -1,14 +1,36 @@
1
- # FootPrint
2
-
3
- **Connected runtime logs for people and AI agents.**
4
-
5
- > Don't make the agent guess connections your program already knew.
1
+ <div align="center">
2
+ <h1>FootPrint</h1>
3
+ <p><strong>Connected runtime logs for people and AI agents.</strong></p>
4
+ <p><em>Don't make the agent guess connections your program already knew.</em></p>
5
+
6
+ <p>
7
+ <a href="https://github.com/footprintjs/footPrint/actions/workflows/ci.yml"><img src="https://github.com/footprintjs/footPrint/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI status"></a>
8
+ <a href="https://www.npmjs.com/package/footprintjs"><img src="https://img.shields.io/npm/v/footprintjs.svg" alt="npm version"></a>
9
+ <a href="https://www.npmjs.com/package/footprintjs"><img src="https://img.shields.io/npm/dm/footprintjs.svg?label=downloads" alt="Monthly npm downloads"></a>
10
+ <a href="https://github.com/footprintjs/footPrint/blob/main/CONTRIBUTING.md#making-changes"><!-- coverage-badge --><img src="https://img.shields.io/badge/coverage-98%25-brightgreen.svg" alt="coverage: 98%"><!-- /coverage-badge --></a>
11
+ <a href="https://github.com/footprintjs/footPrint/blob/main/package.json"><img src="https://img.shields.io/node/v/footprintjs?label=Node.js" alt="Supported Node.js versions"></a>
12
+ <a href="https://github.com/footprintjs/footPrint/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/footprintjs?color=blue" alt="MIT license"></a>
13
+ </p>
14
+
15
+ <p>
16
+ <a href="https://footprintjs.github.io/footPrint/"><strong>Documentation</strong></a> &middot;
17
+ <a href="https://footprintjs.github.io/footprint-playground/"><strong>Playground</strong></a> &middot;
18
+ <a href="https://github.com/footprintjs/footPrint/tree/main/ai-instructions"><strong>AI instructions</strong></a> &middot;
19
+ <a href="https://github.com/footprintjs/footPrint/blob/main/docs/provenance-governance-and-limits.md"><strong>Provenance and limits</strong></a>
20
+ </p>
21
+ </div>
6
22
 
7
23
  FootPrint is the **flowchart pattern for inspectable workflows**. Write your logic as named stages, tracked state, and explicit decisions. As the workflow executes, FootPrint captures connected evidence of its data activity, execution path, and evaluated decisions.
8
24
 
9
25
  **The evidence is captured during execution—not reconstructed by an LLM afterward.** People and AI agents can investigate the same recorded run. No model is required to generate the record.
10
26
 
11
- [Documentation](https://footprintjs.github.io/footPrint/) · [Playground](https://footprintjs.github.io/footprint-playground/) · [AI instructions](https://github.com/footprintjs/footPrint/tree/main/ai-instructions) · [Provenance, governance and limits](docs/provenance-governance-and-limits.md)
27
+ <p align="center">
28
+ <a href="https://footprintjs.github.io/footprint-playground/">
29
+ <img src="https://raw.githubusercontent.com/footprintjs/footPrint/main/assets/hero.gif" alt="FootPrint demo: run a sample loan workflow and inspect its stages, state and recorded dependencies" width="800">
30
+ </a>
31
+ <br>
32
+ <sub>A recorded workflow in action. Open the playground to try it.</sub>
33
+ </p>
12
34
 
13
35
  ## AI can read your logs. Can it follow the decision?
14
36
 
@@ -130,29 +152,45 @@ The next question might be: **“Did `LoadImage` load a thumbnail instead of the
130
152
 
131
153
  ### An agent building your application
132
154
 
133
- Give the coding agent a workflow it can investigate:
155
+ FootPrint works in ordinary applications that have **no LLM at runtime**. Your coding agent can use the recorded run while it builds and debugs the application.
156
+
157
+ The development loop is straightforward:
158
+
159
+ 1. **Build** the workflow as named stages with tracked state and explicit decisions.
160
+ 2. **Run** the application with the required recorders enabled.
161
+ 3. **Inspect** a wrong outcome: follow its recorded producer, relevant reads, and governing decisions.
162
+ 4. **Repair and verify** with a regression test and a fresh run.
163
+
164
+ Send the relevant trace slice to the coding agent. A focused slice can reduce the log context you need to provide; actual token use and development speed depend on the model, tooling, and workflow. The record gives the agent evidence to work from, while missing evidence stays unknown.
165
+
166
+ Give your coding agent this instruction:
134
167
 
135
- > Build this workflow with FootPrint. Track relevant state, use explicit decision helpers, and attach the required recorders before execution. When an outcome is wrong, inspect its recorded producer, inputs, and governing decisions. Separate evidence from hypotheses, then verify the repair with regression tests.
168
+ > Build this workflow with FootPrint. Track relevant state, use explicit decision helpers, and attach the required recorders before execution. When an outcome is wrong, inspect its recorded producer, inputs, and governing decisions. Separate established evidence from hypotheses, keep missing evidence unknown, and verify each repair with a regression test and a new run.
136
169
 
137
- The application does **not** need an LLM at runtime. Start with the [AI instruction files](https://github.com/footprintjs/footPrint/tree/main/ai-instructions) and [AGENTS.md](https://github.com/footprintjs/footPrint/blob/main/AGENTS.md).
170
+ Start with the [AI instruction files](https://github.com/footprintjs/footPrint/tree/main/ai-instructions) and [AGENTS.md](https://github.com/footprintjs/footPrint/blob/main/AGENTS.md).
138
171
 
139
172
  ### An agent inside your application
140
173
 
141
174
  A running agent can consume workflow results and their evidence to investigate or explain an outcome. [AgentFootprint](https://github.com/footprintjs/agentfootprint) applies this approach to agent workflows, including context and tool activity. In both uses, the model reads evidence; it does not create the execution history.
142
175
 
143
- ## Workflows and libraries—not only backends
176
+ ## An ecosystem of reusable libraries
144
177
 
145
- Use the pattern at meaningful workflow boundaries, not necessarily around every helper function.
178
+ FootPrint can be the execution foundation for a reusable library, as well as an application. Use it at meaningful workflow boundaries, not necessarily around every helper function. A library can expose a focused API while retaining the recorded steps and decisions behind its results.
146
179
 
147
- | Project | Focus |
180
+ | Library | What it adds |
148
181
  | --- | --- |
149
- | [AgentFootprint](https://github.com/footprintjs/agentfootprint) | Agent execution, context, and tool-call evidence. |
182
+ | [AgentFootprint](https://github.com/footprintjs/agentfootprint) | An agent runtime with context, tools, and execution evidence. |
183
+ | [StoryDeck](https://github.com/footprintjs/storydeck) | One structured content model with article, scroll, and presentation views; optional FootPrint integration. |
184
+ | [StoryReel](https://github.com/footprintjs/storyreel) | A filmmaking pipeline with FootPrint stages and a making-of record. |
185
+ | [Blueprint](https://www.npmjs.com/package/footprint-blueprint) | A modular platform framework with shared execution evidence and focused import paths. |
186
+ | [Smallbusiness](https://www.npmjs.com/package/smallbusiness-footprint) | Configurable commerce workflows built on Blueprint for different shop types. |
187
+ | [Datapipeline](https://www.npmjs.com/package/footprintjs-datapipeline) | Collection and derivation flows with traceable execution evidence. |
150
188
  | [HCI Footprint](https://github.com/footprintjs/hcifootprint) | Explicit application actions and journeys for human–agent interaction. |
151
189
  | [VizFootprint](https://github.com/footprintjs/vizfootprint) | Analysis workflows and recorded exploration. |
152
- | [StoryDeck](https://github.com/footprintjs/storydeck) | One content model with article, scroll, and presentation views. |
153
- | [StoryReel](https://github.com/footprintjs/storyreel) | A film-making pipeline with FootPrint stages and a making-of record. |
154
190
 
155
- These projects have different dependencies and maturity; they are not identical wrappers. StoryReel's [pipeline](https://github.com/footprintjs/storyreel/blob/main/src/pipeline.mjs) is a concrete example beyond agent applications.
191
+ These libraries have different dependencies and maturity. They do not all require AgentFootprint: StoryReel and Datapipeline use FootPrint directly, Smallbusiness builds on Blueprint, and StoryDeck makes its FootPrint integration optional. StoryReel's [pipeline](https://github.com/footprintjs/storyreel/blob/main/src/pipeline.mjs) is a concrete example beyond agent applications.
192
+
193
+ When those workflows capture the required evidence, a person or coding agent can follow a result back through the library's recorded execution instead of working from disconnected messages. Evidence that was not captured remains unknown.
156
194
 
157
195
  ## Two packages, separate responsibilities
158
196
 
@@ -171,6 +209,15 @@ Use `addRetryLoop` when an outside operation may happen even though its response
171
209
 
172
210
  See the [builder rule and in-memory example](src/lib/builder/README.md#explicit-retries-that-reconcile-an-outside-operation) and the [runnable keyed-retry example](examples/runtime-features/retry/06-explicit-reconciliation.ts). Physical call outcomes remain unchanged; separate `retryLoop` metadata records the workflow pass and decision.
173
211
 
212
+ ## Attempt metrics and evidence references
213
+
214
+ `attempts()` from `footprintjs/recorders` collects payload-free attempt facts during traversal. Use `byTarget()`,
215
+ `byRun()`, bounded `slowest()` exemplars and `series()` to follow native calls and explicit retry decisions; optional
216
+ `AttemptStore` adapters support cross-run queries. Row/exemplar/I/O limits disclose omitted or pending evidence.
217
+ `toOTel()` returns histogram/sum JSON without sending it anywhere. Durations are summed work time; orchestration
218
+ completion is not provider confirmation. See [the metric guide](docs/guides/attempt-metrics.md) and
219
+ [the stored-trace navigation example](examples/runtime-features/retry/07-attempt-metrics-and-trace.ts).
220
+
174
221
  ## What the record cannot prove
175
222
 
176
223
  - **Correctness or real-world cause.** Recorded program dependencies do not prove the requirement is right, the result is correct, or a model's interpretation is sound.
@@ -184,12 +231,3 @@ For provenance, European governance terminology, disclosure controls, OpenTeleme
184
231
  [API and guides](https://footprintjs.github.io/footPrint/) · [Examples](https://footprintjs.github.io/footprint-playground/) · [Contributing](https://github.com/footprintjs/footPrint/blob/main/CONTRIBUTING.md) · [MIT license](https://github.com/footprintjs/footPrint/blob/main/LICENSE)
185
232
 
186
233
  **Capture the connections during execution. Let people and agents investigate the evidence.**
187
-
188
- ### Attempt metrics and evidence references
189
-
190
- `attempts()` from `footprintjs/recorders` collects payload-free attempt facts during traversal. Use `byTarget()`,
191
- `byRun()`, bounded `slowest()` exemplars and `series()` to follow native calls and explicit retry decisions; optional
192
- `AttemptStore` adapters support cross-run queries. Row/exemplar/I/O limits disclose omitted or pending evidence.
193
- `toOTel()` returns histogram/sum JSON without sending it anywhere. Durations are summed work time; orchestration
194
- completion is not provider confirmation. See [the metric guide](docs/guides/attempt-metrics.md) and
195
- [the stored-trace navigation example](examples/runtime-features/retry/07-attempt-metrics-and-trace.ts).
@@ -286,4 +286,5 @@ export type { RetryLoopCall, RetryLoopDecision, RetryLoopIdentity } from './lib/
286
286
  export type { RetryLoopContext, RetryLoopOptions, RetryLoopState } from './lib/builder/retryLoop.js';
287
287
  export type { CaptureChannelStatus, CaptureLimitation, NativeCaptureNote, RecorderCaptureAcknowledgement, } from './lib/capture/nativeCoverage.js';
288
288
  export type { EngineReadSources, NativeCaptureObservation, NativeReadCaptureNote, SourceLimitation, } from './lib/capture/readSources.js';
289
+ export type { SourceExecutionOwnership, SourceOwnershipGap, SourceOwnershipWitness, } from './lib/capture/sourceOwnershipFormat.js';
289
290
  export { stringifySnapshot } from './lib/runner/stringifySnapshot.js';
package/dist/esm/index.js CHANGED
@@ -95,4 +95,4 @@ export { extractErrorInfo, formatErrorInfo } from './lib/engine/index.js';
95
95
  */
96
96
  export { disableDevMode, enableDevMode, isDevMode } from './lib/devMode.js';
97
97
  export { stringifySnapshot } from './lib/runner/stringifySnapshot.js';
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFTSCw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBc0N4RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFRbkQsNEJBQTRCO0FBQzVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQW9CM0MsbUNBQW1DO0FBQ25DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFpRHZEOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBV3JILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBZ0MvRixvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBUXhELG9CQUFvQjtBQUNwQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBcUJuRCwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRELCtCQUErQjtBQUMvQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFckQsb0NBQW9DO0FBQ3BDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBbUM1RCxxRUFBcUU7QUFDckUsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsa0JBQWtCLEVBQ2xCLFdBQVcsR0FDWixNQUFNLHlCQUF5QixDQUFDO0FBa0RqQywrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFLOUQsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTdELCtCQUErQjtBQUMvQixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdkUsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXpFLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVqRSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEUsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXBFLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQW1CdEUsdUNBQXVDO0FBQ3ZDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTdFLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBRS9FLDhCQUE4QjtBQUM5QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQTBCNUQsNkJBQTZCO0FBQzdCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWdFakQsc0NBQXNDO0FBQ3RDLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTNFLHNDQUFzQztBQUN0QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFTckcsZ0NBQWdDO0FBQ2hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRSwrRUFBK0U7QUFDL0UsaURBQWlEO0FBQ2pELCtFQUErRTtBQUUvRTs7Ozs7Ozs7Ozs7R0FXRztBQUNILE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBcUI1RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRm9vdFByaW50IOKAlCBQdWJsaWMgQVBJICh2MylcbiAqXG4gKiBUaGUgZmxvd2NoYXJ0IHBhdHRlcm4gZm9yIGJhY2tlbmQgY29kZS5cbiAqIEJ1aWxkIOKGkiBSdW4g4oaSIE9ic2VydmUuXG4gKlxuICogKipUaGUgY29tbW9uIGltcG9ydCBwYXRoczoqKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZsb3dDaGFydCwgZGVjaWRlLCBuYXJyYXRpdmUgfSBmcm9tICdmb290cHJpbnRqcyc7ICAgICAgICAgICAvLyBtYWluIOKAlCBzdGFydCBoZXJlXG4gKiBpbXBvcnQgeyBtZXRyaWNzLCBkZWJ1ZywgbWFuaWZlc3QgfSAgICAgZnJvbSAnZm9vdHByaW50anMvcmVjb3JkZXJzJzsgLy8gcmVjb3JkZXIgZmFjdG9yaWVzXG4gKiBpbXBvcnQgeyBzdGF0ZUF0LCBjYXVzYWxDaGFpbiB9IGZyb20gJ2Zvb3R0cmFjZSc7ICAgICAvLyByZWFkIGEgZmluaXNoZWQgcnVuXG4gKiBpbXBvcnQgeyBSZWNvcmRGcmFtZSwgRXZlbnRMb2cgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnOyAgICAgLy8gd3JpdGUgYSByZWNvcmQgeW91cnNlbGZcbiAqIGltcG9ydCB7IFN0YWdlQ29udGV4dCB9ICAgICAgICAgICAgICAgICBmcm9tICdmb290cHJpbnRqcy9hZHZhbmNlZCc7ICAvLyBlbmdpbmUgaW50ZXJuYWxzXG4gKiBgYGBcbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUXVpY2sgU3RhcnQg4oCUIEV2ZXJ5dGhpbmcgeW91IG5lZWQgZm9yIDkwJSBvZiB1c2UgY2FzZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHR5cGUgeyBGbG93Q2hhcnQsIFN0YWdlRnVuY3Rpb24gYXMgU3RhZ2VIYW5kbGVyLCBTdHJlYW1IYW5kbGVycyB9IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgeyBmbG93Q2hhcnQsIEZsb3dDaGFydEJ1aWxkZXIsIGZsb3dDaGFydFNlbGVjdG9yIH0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0XG4gKlxuICogQ29uZmlnIGZvciBgLmFkZFBhcmFsbGVsRm9yRWFjaCgpYCDigJQgb25lIGJyYW5jaCBwZXIgaXRlbSwgYnJhbmNoIGNvdW50XG4gKiBkZWNpZGVkIGF0IHJ1biB0aW1lIGZyb20gdGhlIHBheWxvYWQuIGBtYXhCcmFuY2hlc2AgYW5kIGBpbnRvYCBhcmUgcmVxdWlyZWRcbiAqIG9uIHB1cnBvc2UgKHNlZSBkb2NzL2Rlc2lnbi9leGVjdXRpb24tY29udHJvbC5tZCkuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQnJhbmNoQ2hhcnQsIFBhcmFsbGVsRm9yRWFjaENvbmZpZywgUmV0cnlQb2xpY3kgfSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCDigJQgYnVpbGQtdGltZSBvYnNlcnZlciAodHdpbiBvZiBGbG93UmVjb3JkZXIpICovXG5leHBvcnQgdHlwZSB7XG4gIFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50LFxuICBTdHJ1Y3R1cmVFZGdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlRWRnZUtpbmQsXG4gIFN0cnVjdHVyZUxvb3BFZGdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlUmVjb3JkZXIsXG4gIFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlU3RhZ2VUYWdnZWRFdmVudCxcbiAgU3RydWN0dXJlU3ViZmxvd01vdW50ZWRFdmVudCxcbn0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IFRpbWUgQnVkZ2V0XG4gKlxuICogYHRpbWVCdWRnZXQoY2hhcnQpYCDigJQgdGhlIHNsb3dlc3QgYSBjaGFydCBjYW4gdGFrZSwgZnJvbSBpdHMgZGVjbGFyZWQgcmV0cnkgcG9saWNpZXMgKGBhdHRlbXB0cyDDlyB0aW1lb3V0TXNgIHBsdXNcbiAqIHRoZSB3YWl0cywgc3VtbWVkIGFsb25nIHRoZSBzbG93ZXN0IHBhdGgpLCBhbmQgZXZlcnkgc3RhZ2UgdGhhdCBtYWtlcyBhIHBhdGggdW5ib3VuZGVkLCBieSBuYW1lLiBgLmJ1ZGdldChtcylgXG4gKiBkZWNsYXJlcyB0aGUgY2FsbGVyJ3MgY29udHJhY3Q7IGBidWlsZCgpYCByZWZ1c2VzIGEgY2hhcnQgdGhhdCBjYW5ub3Qga2VlcCBpdC4gQWxzbyBgY2hhcnQudGltZUJ1ZGdldCgpYC5cbiAqL1xuZXhwb3J0IHR5cGUge1xuICBCdWRnZXRBc3N1bXB0aW9ucyxcbiAgQnVkZ2V0U3RlcCxcbiAgVGltZUJ1ZGdldE9wdGlvbnMsXG4gIFRpbWVCdWRnZXRSZXBvcnQsXG4gIFVuYm91bmRlZFJlYXNvbixcbiAgVW5ib3VuZGVkU3RhZ2UsXG59IGZyb20gJy4vbGliL2J1ZGdldC9pbmRleC5qcyc7XG5leHBvcnQgeyB0aW1lQnVkZ2V0IH0gZnJvbSAnLi9saWIvYnVkZ2V0L2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHR5cGUgeyBUeXBlZFN0YWdlRnVuY3Rpb24gfSBmcm9tICcuL2xpYi9idWlsZGVyL3R5cGVkRmxvd0NoYXJ0LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHR5cGUgeyBTY29wZU1ldGhvZHMsIFR5cGVkU2NvcGUgfSBmcm9tICcuL2xpYi9yZWFjdGl2ZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB7IG5hcnJhdGl2ZSB9IGZyb20gJy4vcmVjb3JkZXJzLmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGVjaXNpb24gQnJhbmNoaW5nIOKAlCBkZWNpZGUoKSAvIHNlbGVjdCgpIHdpdGggZXZpZGVuY2UgY2FwdHVyZVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IERlY2lzaW9uIEJyYW5jaGluZyAqL1xuZXhwb3J0IHR5cGUge1xuICBEZWNpZGVSdWxlLFxuICBEZWNpc2lvbkV2aWRlbmNlLFxuICBEZWNpc2lvblJlc3VsdCxcbiAgRGVmYXVsdEJyYW5jaCxcbiAgRmlsdGVyT3BzLFxuICBSdWxlRXZpZGVuY2UsXG4gIFNlbGVjdGlvbkV2aWRlbmNlLFxuICBTZWxlY3Rpb25SZXN1bHQsXG4gIFdoZW5DbGF1c2UsXG4gIFdoZXJlRmlsdGVyLFxufSBmcm9tICcuL2xpYi9kZWNpZGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IERlY2lzaW9uIEJyYW5jaGluZyAqL1xuZXhwb3J0IHsgZGVjaWRlLCBzZWxlY3QgfSBmcm9tICcuL2xpYi9kZWNpZGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IEVycm9ycyAqL1xuZXhwb3J0IHR5cGUgeyBUZXJtaW5hbEZhaWx1cmVDb250ZXh0IH0gZnJvbSAnLi9saWIvZXJyb3JzL3Rlcm1pbmFsRmFpbHVyZS5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEF0dGVtcHRzIOKAlCBldmVyeSB0cnkgb2YgYSByZXRyaWVkIHN0YWdlLCBhbmQgdGhlIGRlY2lzaW9uIHRoYXQgZm9sbG93ZWQgaXRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBAY2F0ZWdvcnkgQXR0ZW1wdHNcbiAqXG4gKiBPbmUgYEF0dGVtcHRSZWNvcmRgIHBlciBhdHRlbXB0IG9mIGEgc3RhZ2Ugd2l0aCBhIGRlY2xhcmVkIGByZXRyeWAgcG9saWN5LCBhIGB0aW1lb3V0TXNgLCBvciBhIHJ1biBkZWFkbGluZSDigJRcbiAqIHRpbWluZywgb3V0Y29tZSwgZmFpbHVyZSBjYXRlZ29yeSwgYW5kIHRoZSByZXRyeS1vci1zdG9wIGRlY2lzaW9uIGFzIGBEZWNpc2lvbkV2aWRlbmNlYCDigJQgb24gdGhlIHN0YWdlJ3NcbiAqIGV4ZWN1dGlvbi10cmVlIG5vZGUgKGBTdGFnZVNuYXBzaG90LmF0dGVtcHRzYCAvIGBhdHRlbXB0U3VtbWFyeWApIGFuZCBvbiBgRmxvd1JlY29yZGVyLm9uQXR0ZW1wdGAuXG4gKiBBIGNhbGwgYSBzdGFnZSBtYWtlcyB0aHJvdWdoIGBzY29wZS4kY2FsbGAgaXMgcmVjb3JkZWQgdGhlIHNhbWUgd2F5IChraW5kIGAnY2FsbCdgKSwgYW5kIHNvIGlzIGFuIFNESydzIG93biByZXRyeVxuICogYW4gYWRhcHRlciByZXBvcnRzIHRocm91Z2ggYG9ic2VydmVkKClgIChgT2JzZXJ2ZWRBdHRlbXB0YCwga2luZCBgJ29ic2VydmVkJ2ApLiBgQXR0ZW1wdENvbnRleHRgIGlzIHdoYXRcbiAqIGBzY29wZS4kYXR0ZW1wdCgpYCByZXR1cm5zLCBhbmQgd2hhdCBhIGNhbGwncyBmdW5jdGlvbiBnZXRzICh0aGUgYXR0ZW1wdCdzIHNpZ25hbCwgdGhlIHRpbWUgbGVmdCwgYG9ic2VydmVkYCk7XG4gKiBgTGF0ZVdyaXRlYCBpcyBhIHdyaXRlIChvciBjYWxsKSBhbiBlbmRlZCBhdHRlbXB0IHRyaWVkIChgU3RhZ2VTbmFwc2hvdC5sYXRlV3JpdGVzYCkuIEEgc3RhZ2UgdGhhdCBjaGFuZ2VzIGFuXG4gKiBvdXRzaWRlIHN5c3RlbSBkZWNsYXJlcyBpdCAoYFN0YWdlVG91Y2hlc2AsIGAudG91Y2hlcygpYCksIGFuZCBhIGNhbGwgZG9lcyAoYENhbGxPcHRpb25zYCk6IGV2ZXJ5IGF0dGVtcHQgdGhlblxuICogY2FycmllcyBpdHMgYEF0dGVtcHRFZmZlY3RgLCBhbmQgdGhlIGtleSBydWxlIGlzIGhhbmRlZCBhbiBgSWRlbXBvdGVuY3lLZXlDb250ZXh0YCBvbmNlIHBlciBleGVjdXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIHtcbiAgQXR0ZW1wdENhdGVnb3J5LFxuICBBdHRlbXB0Q29udGV4dCxcbiAgQXR0ZW1wdEVmZmVjdCxcbiAgQXR0ZW1wdEVycm9yLFxuICBBdHRlbXB0SW5wdXRzLFxuICBBdHRlbXB0S2luZCxcbiAgQXR0ZW1wdE5leHQsXG4gIEF0dGVtcHRPcHRpb25zLFxuICBBdHRlbXB0T3V0Y29tZSxcbiAgQXR0ZW1wdFJlYXNvbixcbiAgQXR0ZW1wdFJlY29yZCxcbiAgQXR0ZW1wdFN1bW1hcnksXG4gIENhbGxPcHRpb25zLFxuICBJZGVtcG90ZW5jeUtleUNvbnRleHQsXG4gIExhdGVXcml0ZSxcbiAgT2JzZXJ2ZWRBdHRlbXB0LFxuICBTdGFnZVRvdWNoZXMsXG4gIFVua25vd25FZmZlY3RJbml0LFxufSBmcm9tICcuL2xpYi9hdHRlbXB0L2luZGV4LmpzJztcbi8qKlxuICogQGNhdGVnb3J5IEF0dGVtcHRzXG4gKlxuICogQW4gYXR0ZW1wdCBieSBuYW1lIChgc2VyaWVzYCArIGBhdHRlbXB0YCkgYW5kIHBlci1vdXRjb21lIGNvdW50cyDigJQgd2hhdCByZWNvcmRlciByb3dzIGhvbGQgb2YgYXR0ZW1wdHMuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQXR0ZW1wdE91dGNvbWVDb3VudHMsIEF0dGVtcHRSZWYgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9hdHRlbXB0U2VyaWVzLmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgQXR0ZW1wdHNcbiAqXG4gKiBgYXR0ZW1wdCgpYCDigJQgdGhlIGF0dGVtcHQgcnVubmVyIGZvciBjb2RlIHRoYXQgaXMgbm90IGEgc3RhZ2UgKHJlY29yZHMgZ28gdG8gaXRzIGBvbkF0dGVtcHRgKTsgYGVycm9yQ2F0ZWdvcnlgXG4gKiDigJQgdGhlIG9uZSBmYWlsdXJlIGNsYXNzaWZpZXIgKHNldmVuIGZpeGVkIGNhdGVnb3JpZXMpOyBgcmV0cnlSdWxlc2Ag4oCUIHRoZSBvbmUgcmV0cnkgcnVsZSB0YWJsZSwgYXMgYGRlY2lkZSgpYFxuICogcnVsZXM7IHRoZSBhdHRlbXB0IGNvbnRyYWN0J3MgdHdvIGVycm9ycy5cbiAqL1xuZXhwb3J0IHsgYXR0ZW1wdCwgQXR0ZW1wdFRpbWVvdXRFcnJvciwgZXJyb3JDYXRlZ29yeSwgcmV0cnlSdWxlcywgVW5rbm93bkVmZmVjdEVycm9yIH0gZnJvbSAnLi9saWIvYXR0ZW1wdC9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvcnJlbGF0aW9uXG4gKlxuICogVGhlIHJ1bidzIGNvcnJlbGF0aW9uICgxMC4xKTogYGVudi50cmFjZXBhcmVudGAgKFczQywgcGFyc2VkIHN0cmljdGx5KSBvciBgZW52LnRyYWNlSWRgICsgYGVudi5vcGVyYXRpb25JZGBcbiAqIGJlY29tZSBPTkUgZnJvemVuIGBSdW5Db3JyZWxhdGlvbmAgcGVyIHJ1biDigJQgb24gYGdldFNuYXBzaG90KCkuY29ycmVsYXRpb25gLCBldmVyeSBmbG93IGV2ZW50J3NcbiAqIGB0cmF2ZXJzYWxDb250ZXh0LmNvcnJlbGF0aW9uYCBhbmQgZXZlcnkgc2NvcGUgYW5kIGVtaXQgZXZlbnQncyBgY29ycmVsYXRpb25gLiBgcGFyc2VUcmFjZXBhcmVudGAgL1xuICogYGZvcm1hdFRyYWNlcGFyZW50YCBhcmUgdGhlIFczQyBjb2RlYzsgYSByZWZ1c2VkIGhlYWRlciB0aHJvd3MgYFRyYWNlcGFyZW50RXJyb3JgIHdpdGggYSBuYW1lZCBgcmVhc29uYC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBQYXJzZWRUcmFjZXBhcmVudCwgUnVuQ29ycmVsYXRpb24sIFRyYWNlcGFyZW50RmllbGRzLCBUcmFjZXBhcmVudFJlZnVzYWwgfSBmcm9tICcuL2xpYi9hdHRlbXB0L2luZGV4LmpzJztcbmV4cG9ydCB7IGZvcm1hdFRyYWNlcGFyZW50LCBwYXJzZVRyYWNlcGFyZW50LCBUcmFjZXBhcmVudEVycm9yIH0gZnJvbSAnLi9saWIvYXR0ZW1wdC9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJ1biDigJQgRXhlY3V0ZSBjaGFydHMgYW5kIGNvbGxlY3QgcmVzdWx0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUge1xuICBDYXB0dXJlSGlzdG9yeU9wdGlvbnMsXG4gIENhcHR1cmVIaXN0b3J5UmVjZWlwdCxcbiAgQ2FwdHVyZUhpc3RvcnlTdGF0dXMsXG4gIENhcHR1cmVIaXN0b3J5VGFyZ2V0LFxufSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuZXhwb3J0IHR5cGUgeyBSdW5SZXN1bHQgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUgeyBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnMgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIFRoZSBjcmFzaC1zYWZlIHJlY29yZCAoMTAuMSk6IHRoZSBleGVjdXRvcidzIGBzaW5rYCBvcHRpb24sIGl0cyBhY2NvdW50aW5nIG9uIGBnZXRTbmFwc2hvdCgpLnNpbmtgLFxuICogYGV4ZWN1dG9yLmZsdXNoUmVjb3JkKClgJ3MgcmVzdWx0LCBhbmQgdGhlIGVycm9yIGEgcnVuIHdpdGggYG9uRmFpbHVyZTogJ2ZhaWwnYCByZWplY3RzIHdpdGguIFRoZSBwb3J0XG4gKiAoYFJlY29yZFNpbmtgLCBgbWVtb3J5U2lua2ApIGlzIGBmb290dHJhY2Uvd3JpdGVgJ3M7IHRoZSBmaWxlIGFkYXB0ZXIgaXMgYGZvb3RwcmludGpzL3NpbmtzYC5cbiAqIEBjYXRlZ29yeSBSdW5cbiAqL1xuZXhwb3J0IHR5cGUge1xuICBSZWNvcmRGbHVzaFJlc3VsdCxcbiAgUmVjb3JkU2lua0ZhaWx1cmVNb2RlLFxuICBSZWNvcmRTaW5rRmx1c2hNb2RlLFxuICBSZWNvcmRTaW5rT3B0aW9uLFxuICBSZWNvcmRTaW5rT3B0aW9ucyxcbiAgUmVjb3JkU2lua1N0YXRzLFxufSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB7IFJlY29yZFNpbmtFcnJvciB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKlxuICogVGhlIGZvdXIgb2JzZXJ2YWJpbGl0eSBkaWFscyBgRmxvd0NoYXJ0RXhlY3V0b3JPcHRpb25zYCBpbmhlcml0cy5cbiAqIEBjYXRlZ29yeSBSdW5cbiAqL1xuZXhwb3J0IHR5cGUgeyBSdW5EaWFscyB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgeyBGbG93Q2hhcnRFeGVjdXRvciB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgeyBSdW5Db250ZXh0IH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB0eXBlIHsgQ2hhcnRPcGVuQVBJT3B0aW9ucywgTUNQVG9vbERlc2NyaXB0aW9uLCBSdW5uYWJsZUZsb3dDaGFydCB9IGZyb20gJy4vbGliL3J1bm5lci9SdW5uYWJsZUNoYXJ0LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT2JzZXJ2ZSDigJQgRGF0YSAoc2NvcGUgcmVjb3JkZXJzLCBmaXJlIGR1cmluZyBzdGFnZSBleGVjdXRpb24pXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGF0YSAqL1xuZXhwb3J0IHR5cGUge1xuICBDb21taXRFdmVudCxcbiAgRXJyb3JFdmVudCxcbiAgUmVhZEV2ZW50LFxuICBSZWRhY3Rpb25Qb2xpY3ksXG4gIFJlZGFjdGlvblJlcG9ydCxcbiAgU2NvcGVSZWNvcmRlcixcbiAgU3RhZ2VFdmVudCxcbiAgV3JpdGVFdmVudCxcbn0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERhdGEgKi9cbmV4cG9ydCB7IE1ldHJpY1JlY29yZGVyIH0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERhdGEgKi9cbmV4cG9ydCB7IERlYnVnUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9zY29wZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgT3BlcmF0aW9uICovXG5leHBvcnQgeyBSZWNvcmRlck9wZXJhdGlvbiB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGVsaXZlcnkgdGllciAoUkZDLTAwMSBkZWZlcnJlZCBvYnNlcnZlcnMpXG4gKlxuICogRXZlcnkgYGF0dGFjaCpSZWNvcmRlcmAgY2FsbCBhY2NlcHRzIGFuIG9wdGlvbnMgYmFnOlxuICogYGV4ZWN1dG9yLmF0dGFjaFNjb3BlUmVjb3JkZXIocmVjLCB7IGRlbGl2ZXJ5OiAnZGVmZXJyZWQnIH0pYCB0YWtlcyB0aGVcbiAqIHJlY29yZGVyIE9VVCBvZiB0aGUgZW5naW5lJ3MgaG90IHBhdGgg4oCUIGV2ZW50cyBhcmUgY2FwdHVyZWQgaW50byBvbmVcbiAqIGJvdW5kZWQsIHRvdGFsbHktb3JkZXJlZCBxdWV1ZSBhbmQgZGVsaXZlcmVkIGF0IHRoZSBuZXh0IG1pY3JvdGFza1xuICogY2hlY2twb2ludCAoXCJvbmUgYmVhdCBiZWhpbmRcIikuIE9taXQgYGRlbGl2ZXJ5YCBmb3IgdGhlIGhpc3RvcmljYWxcbiAqIHN5bmNocm9ub3VzIGNhbGwgKGJ5dGUtaWRlbnRpY2FsIHRvIHByZXZpb3VzIHJlbGVhc2VzKS4gQWNjb3VudGluZ1xuICogc3VyZmFjZXMgb24gYHNuYXBzaG90Lm9ic2VydmVyU3RhdHNgOyBgZXhlY3V0b3IuZHJhaW5PYnNlcnZlcnMoKWAgc2V0dGxlc1xuICogYXN5bmMgbGlzdGVuZXJzIGJlZm9yZSBzaHV0ZG93bi4gU2VlIGBkb2NzL2d1aWRlcy9vYnNlcnZlcnMtZGVmZXJyZWQubWRgLlxuICovXG5leHBvcnQgdHlwZSB7XG4gIEF0dGFjaFJlY29yZGVyT3B0aW9ucyxcbiAgT2JzZXJ2ZXJEZWxpdmVyeSxcbiAgT2JzZXJ2ZXJEcmFpblJlc3VsdCxcbiAgT2JzZXJ2ZXJTdGF0cyxcbn0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGVsaXZlcnkgdGllciAoUkZDLTAwMSBkZWZlcnJlZCBvYnNlcnZlcnMpXG4gKlxuICogYENhcHR1cmVQb2xpY3lgIOKAlCBob3cgYSBkZWZlcnJlZCBldmVudCdzIHBheWxvYWQgaXMgbWF0ZXJpYWxpemVkIGF0XG4gKiBjYXB0dXJlIHRpbWUgKGAnY2xvbmUnYCBieSBkZWZhdWx0IGZvciBhdHRhY2ggb3B0aW9ucyAvIGAnc3VtbWFyeSdgIC8gYCdyZWYnYCkuIGBPdmVyZmxvd1BvbGljeWBcbiAqIOKAlCB3aGF0IGEgc2F0dXJhdGVkIHF1ZXVlIGRvZXMgKGAnZHJvcC1vbGRlc3QnYCBkZWZhdWx0IC8gYCdzYW1wbGUnYCAvXG4gKiBgJ2Jsb2NrJ2ApLiBgRGlzcGF0Y2hlclN0YXRzYCAvIGBMaXN0ZW5lclN0YXRzYCDigJQgdGhlIGFjY291bnRpbmcgc2hhcGVzXG4gKiBlbWJlZGRlZCBpbiBgT2JzZXJ2ZXJTdGF0c2AuIFR5cGVzIG9ubHkg4oCUIHRoZSBvYnNlcnZlci1xdWV1ZSBtb2R1bGVcbiAqIGl0c2VsZiBpcyBpbnRlcm5hbDsgY29uc3VtZXJzIHVzZSB0aGUgYXR0YWNoIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZVBvbGljeSwgRGlzcGF0Y2hlclN0YXRzLCBMaXN0ZW5lclN0YXRzLCBPdmVyZmxvd1BvbGljeSB9IGZyb20gJy4vbGliL29ic2VydmVyLXF1ZXVlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBDb21iaW5lZCAoYm90aCBkYXRhLWZsb3cgYW5kIGNvbnRyb2wtZmxvdykgKi9cbmV4cG9ydCB0eXBlIHsgQ29tYmluZWRSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgQ29tYmluZWQgKGJvdGggZGF0YS1mbG93IGFuZCBjb250cm9sLWZsb3cpICovXG5leHBvcnQge1xuICBoYXNFbWl0UmVjb3JkZXJNZXRob2RzLFxuICBoYXNGbG93UmVjb3JkZXJNZXRob2RzLFxuICBoYXNSZWNvcmRlck1ldGhvZHMsXG4gIGlzRmxvd0V2ZW50LFxufSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEVtaXQgKHVzZXItYXV0aG9yZWQgc3RydWN0dXJlZCBldmVudHMpXG4gKlxuICogVGhpcmQgb2JzZXJ2ZXIgY2hhbm5lbCAoYWxvbmdzaWRlIGBTY29wZVJlY29yZGVyYCBhbmQgYEZsb3dSZWNvcmRlcmApLiBDb25zdW1lclxuICogY29kZSBjYWxscyBgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgIGZyb20gaW5zaWRlIGEgc3RhZ2U7IGV2ZXJ5IGF0dGFjaGVkXG4gKiBgRW1pdFJlY29yZGVyLm9uRW1pdChldmVudClgIGZpcmVzIHN5bmNocm9ub3VzbHkgd2l0aCBzdGFnZS1jb250ZXh0XG4gKiBlbnJpY2htZW50LiBQYXNzLXRocm91Z2gg4oCUIG5vIGJ1ZmZlcmluZywgemVybyBhbGxvY2F0aW9uIHdoZW4gbm8gcmVjb3JkZXJcbiAqIGlzIGF0dGFjaGVkLlxuICovXG5leHBvcnQgdHlwZSB7IEVtaXRFdmVudCwgRW1pdFJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPYnNlcnZlIOKAlCBGbG93IChGbG93UmVjb3JkZXIsIGZpcmVzIGFmdGVyIHN0YWdlIGV4ZWN1dGlvbilcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7XG4gIEZsb3dBdHRlbXB0RXZlbnQsXG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dGb3JrRXZlbnQsXG4gIEZsb3dMb29wRXZlbnQsXG4gIEZsb3dOZXh0RXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1J1bkV2ZW50LFxuICBGbG93UnVuRmFpbGVkRXZlbnQsXG4gIEZsb3dTZWxlY3RlZEV2ZW50LFxuICBGbG93U3RhZ2VFdmVudCxcbiAgRmxvd1N0YWdlUmV0cnlFdmVudCxcbiAgRmxvd1N1YmZsb3dFdmVudCxcbiAgRmxvd1N1YmZsb3dSZWdpc3RlcmVkRXZlbnQsXG4gIEZsb3dUaHJvdHRsZWRFdmVudCxcbiAgUmVzdW1lTGluayxcbiAgVHJhdmVyc2FsQ29udGV4dCxcbn0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7IENvbWJpbmVkTmFycmF0aXZlRW50cnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93XG4gKlxuICogYE5hcnJhdGl2ZUZvcm1hdHRlcmAg4oCUIHBsdWdnYWJsZSBmb3JtYXR0ZXIgdGhhdCBjb252ZXJ0cyBldmVudCBjb250ZXh0XG4gKiBvYmplY3RzIGludG8gdGhlIHRleHQgbGluZXMgb2YgdGhlIG5hcnJhdGl2ZS5cbiAqL1xuZXhwb3J0IHR5cGUgeyBOYXJyYXRpdmVGb3JtYXR0ZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHR5cGUgeyBNYW5pZmVzdEF0dGVtcHRSb3csIE1hbmlmZXN0RW50cnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IE1hbmlmZXN0Rmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBBZGFwdGl2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgTWlsZXN0b25lTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBQcm9ncmVzc2l2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgUkxFTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBTZXBhcmF0ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgU2lsZW50TmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBXaW5kb3dlZE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNlbGYtRGVzY3JpYmluZyDigJQgLmNvbnRyYWN0KCksIHRvT3BlbkFQSSgpLCB0b01DUFRvb2woKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFNlbGYtRGVzY3JpYmluZyAqL1xuZXhwb3J0IHR5cGUgeyBKc29uU2NoZW1hIH0gZnJvbSAnLi9saWIvY29udHJhY3QvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTbmFwc2hvdCAmIENvbXBvc2l0aW9uIOKAlCBTdWJmbG93IG5hdmlnYXRpb24gYW5kIENvbXBvc2FibGVSdW5uZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBTbmFwc2hvdCAmIENvbXBvc2l0aW9uICovXG5leHBvcnQgdHlwZSB7IENvbXBvc2FibGVSdW5uZXIgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNuYXBzaG90ICYgQ29tcG9zaXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgUmVjb3JkZXJTbmFwc2hvdCwgUnVudGltZVNuYXBzaG90LCBTdWJ0cmVlU25hcHNob3QgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNuYXBzaG90ICYgQ29tcG9zaXRpb24gKi9cbmV4cG9ydCB7IGdldFN1YnRyZWVTbmFwc2hvdCwgbGlzdFN1YmZsb3dQYXRocyB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNjb3BlUmVjb3JkZXIgQ29tcG9zaXRpb24g4oCUIEJ1bmRsZSBtdWx0aXBsZSByZWNvcmRlcnMgaW50byBkb21haW4gcHJlc2V0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFNjb3BlUmVjb3JkZXIgKi9cbmV4cG9ydCB7IENvbXBvc2l0ZVJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQYXVzZS9SZXN1bWUg4oCUIFNlcmlhbGl6YWJsZSBjaGVja3BvaW50cyBmb3IgbG9uZy1ydW5uaW5nIG9yIGh1bWFuLWluLXRoZS1sb29wIGZsb3dzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgUGF1c2UvUmVzdW1lICovXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuZXhwb3J0IHR5cGUge1xuICBGbG93Y2hhcnRDaGVja3BvaW50LFxuICBQYXVzYWJsZUhhbmRsZXIsXG4gIFBhdXNlZEV4ZWN1dGlvbixcbiAgUGVuZGluZ1BhdXNlLFxuICBSZWRhY3Rpb25NYXJrcyxcbn0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWVcbiAqXG4gKiBgaW50ZXJydXB0KHNjb3BlLCB7IHJlYXNvbiwgZXhwZWN0cz8gfSlgIOKAlCBzdG9wIG1pZC1zdGFnZSB0byBhc2sgYSBxdWVzdGlvbixcbiAqIGFuZCBnZXQgdGhlIGFuc3dlciBiYWNrIGF0IHRoZSBzYW1lIGNhbGwgc2l0ZSB3aGVuIHRoZSBydW4gcmVzdW1lcy4gUmVzdW1lXG4gKiByZS1lbnRlcnMgdGhlIHN0YWdlIGZyb20gaXRzIFRPUCAoc3RhZ2VzIGFyZSBhdG9taWMpLCBzbyBrZWVwIHRoZSBoYWxmXG4gKiBiZWZvcmUgdGhlIGNhbGwgaWRlbXBvdGVudC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBJbnRlcnJ1cHRQYXlsb2FkIH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuZXhwb3J0IHsgaW50ZXJydXB0IH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNjb3BlUmVjb3JkZXIgKi9cbmV4cG9ydCB0eXBlIHsgQ29tcG9zaXRlU25hcHNob3QgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbmZpZ3VyYXRpb24g4oCUIFR5cGVzIHBhc3NlZCB0byBGbG93Q2hhcnRFeGVjdXRvciBhbmQgcnVuKClcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uICovXG5leHBvcnQgdHlwZSB7IEV4ZWN1dGlvbkVudiwgRXhlY3V0b3JSZXN1bHQsIFBhdXNlZFJlc3VsdCwgUnVuT3B0aW9ucyB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBTY29wZUZhY3RvcnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uXG4gKlxuICogUmVhZC10cmFja2luZyBwb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlUmVhZHNgICgjMTQpOlxuICogYCdmdWxsJ2AgKGRlZmF1bHQg4oCUIHBlci1yZWFkIHZhbHVlIGNsb25lLCBoaXN0b3JpY2FsIGJlaGF2aW9yKSAvXG4gKiBgJ3N1bW1hcnknYCAoY2hlYXAgYFJlYWRTdW1tYXJ5TWFya2VyYCBwZXIgcmVhZCkgLyBgJ29mZidgIChubyB0cmFja2luZyxcbiAqIHplcm8gcGVyLXJlYWQgY2xvbmUpLiBQYXNzIGFzIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgcmVhZFRyYWNraW5nIH0pYFxuICogb3IgY2FsbCBgZXhlY3V0b3Iuc2V0UmVhZFRyYWNraW5nKG1vZGUpYCBiZWZvcmUgYHJ1bigpYC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBSZWFkU3VtbWFyeU1hcmtlciwgUmVhZFRyYWNraW5nTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBXcml0ZS10cmFja2luZyBwb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlV3JpdGVzYCAoIzEzYy1BKSDigJQgdGhlXG4gKiBzaWJsaW5nIG9mIGBSZWFkVHJhY2tpbmdNb2RlYDsgYm90aCBhbGlhcyB0aGUgc2hhcmVkIGBSZXRlbnRpb25Qb2xpY3lgXG4gKiBmYW1pbHkgZnJvbSBgbGliL2NhcHR1cmVgLiBgJ2Z1bGwnYCAoZGVmYXVsdCDigJQgcGVyLXdyaXRlIHZhbHVlIGNsb25lLFxuICogaGlzdG9yaWNhbCBiZWhhdmlvcikgLyBgJ3N1bW1hcnknYCAoY2hlYXAgYFdyaXRlU3VtbWFyeU1hcmtlcmAgcGVyIHdyaXRlKVxuICogLyBgJ29mZidgIChubyB0cmFja2luZzsgYHN0YWdlV3JpdGVzYCBhYnNlbnQgYW5kIHRoZSBgb25Db21taXRgIG11dGF0aW9uc1xuICogcGF5bG9hZCBpcyBlbXB0eSDigJQgd3JpdGVzIHRoZW1zZWx2ZXMgc3RpbGwgY29tbWl0LCBhbmQgdGhlIGNvbW1pdCBsb2cgaXNcbiAqIHVuYWZmZWN0ZWQpLiBQYXNzIGFzIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgd3JpdGVUcmFja2luZyB9KWAgb3JcbiAqIGNhbGwgYGV4ZWN1dG9yLnNldFdyaXRlVHJhY2tpbmcobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICovXG5leHBvcnQgdHlwZSB7IFJldGVudGlvblBvbGljeSwgV3JpdGVTdW1tYXJ5TWFya2VyLCBXcml0ZVRyYWNraW5nTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBDb21taXQtdmFsdWVzIGVuY29kaW5nIGZvciB0aGUgQ09NTUlUIExPRyAoIzEzYy1CKSDigJQgdGhlIHRoaXJkIGRpYWwgb2ZcbiAqIHRoZSBmYW1pbHksIGFuZCB0aGUgb25seSBMT1NTTEVTUyBvbmUgKGl0IGNoYW5nZXMgdGhlIGxvZydzIGVuY29kaW5nLFxuICogbmV2ZXIgaXRzIGluZm9ybWF0aW9uKS4gYCdmdWxsJ2AgKGRlZmF1bHQg4oCUIGV2ZXJ5IHN1cnZpdmluZyBgc2V0YCBzdG9yZXNcbiAqIHRoZSBmdWxsIGZpbmFsIHZhbHVlLCBieXRlLWlkZW50aWNhbCB0byBoaXN0b3J5KSAvIGAnZGVsdGEnYCAoYXJyYXlcbiAqIG5ldC1jaGFuZ2VzIHRoYXQgYXJlIFwiYmFzZSBwbHVzIGEgdGFpbFwiIGNvbW1pdCBhcyBhbiBgYXBwZW5kYCB2ZXJiXG4gKiBzdG9yaW5nIG9ubHkgdGhlIHRhaWw7IGBkZWxldGVWYWx1ZSgpYCBjb21taXRzIGFzIGEgcmVhbCBgZGVsZXRlYCB2ZXJiO1xuICogb25lIHRyYWNlIGVudHJ5IHBlciBzdXJ2aXZpbmcgcGF0aCkuIFJlcGxheSByZWNvbnN0cnVjdHMgZXZlcnkgc3RlcCdzXG4gKiBmdWxsIHN0YXRlIGV4YWN0bHkuIENvbnN1bWVycyByZWFkaW5nIGBidW5kbGUub3ZlcndyaXRlW2tleV1gIGFzIHRoZSBmdWxsXG4gKiB2YWx1ZSBtdXN0IHVzZSBgY29tbWl0VmFsdWVBdGAgZnJvbSBgZm9vdHRyYWNlYC4gUGFzcyBhc1xuICogYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyBjb21taXRWYWx1ZXMgfSlgIG9yIGNhbGxcbiAqIGBleGVjdXRvci5zZXRDb21taXRWYWx1ZXMobW9kZSlgIGJlZm9yZSBgcnVuKClgOyB0aGUgYWN0aXZlIG1vZGUgaXMgdGhlXG4gKiBzbmFwc2hvdCBkaXNjcmltaW5hbnQgYGdldFNuYXBzaG90KCkuY29tbWl0VmFsdWVzYC5cbiAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb250cmFjdCAmIFZhbGlkYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBDb250cmFjdCAmIFZhbGlkYXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgU2NoZW1hS2luZCwgVmFsaWRhdGlvbklzc3VlLCBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBDb250cmFjdCAmIFZhbGlkYXRpb24gKi9cbmV4cG9ydCB7IGRldGVjdFNjaGVtYSwgaXNWYWxpZGF0YWJsZSwgaXNab2QgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IENvbnRyYWN0ICYgVmFsaWRhdGlvbiAqL1xuZXhwb3J0IHsgSW5wdXRWYWxpZGF0aW9uRXJyb3IsIHZhbGlkYXRlQWdhaW5zdFNjaGVtYSwgdmFsaWRhdGVPclRocm93IH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRXJyb3IgVXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgRXJyb3IgVXRpbGl0aWVzICovXG5leHBvcnQgdHlwZSB7IFN0cnVjdHVyZWRFcnJvckluZm8gfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IEVycm9yIFV0aWxpdGllcyAqL1xuZXhwb3J0IHsgZXh0cmFjdEVycm9ySW5mbywgZm9ybWF0RXJyb3JJbmZvIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGV2IFRvb2xzIOKAlCBNb2RlIGZsYWdzIGFuZCBab2Qgc2NvcGUgdXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQGNhdGVnb3J5IERldiBUb29sc1xuICpcbiAqIEdsb2JhbCBkZXYtbW9kZSBmbGFnLiBDYWxsIGBlbmFibGVEZXZNb2RlKClgIGF0IGFwcGxpY2F0aW9uIHN0YXJ0dXAgdG9cbiAqIHR1cm4gb24gZGV2ZWxvcGVyLW9ubHkgZGlhZ25vc3RpY3MgYWNyb3NzIHRoZSBsaWJyYXJ5IOKAlCBjaXJjdWxhci1yZWZlcmVuY2VcbiAqIGRldGVjdGlvbiBpbiBzY29wZSB3cml0ZXMsIHdhcm5pbmdzIHdoZW4gYSByZWNvcmRlciBoYXMgbm8gb2JzZXJ2ZXJcbiAqIG1ldGhvZHMsIHN1c3BpY2lvdXMtcHJlZGljYXRlIHdhcm5pbmdzIGluIGRlY2lkZS9zZWxlY3QsIHN0cnVjdHVyYWxcbiAqIGNoZWNrcyBpbiBgZ2V0U3VidHJlZVNuYXBzaG90YCwgYW5kIGFueSBmdXR1cmUgZGV2LW9ubHkgZGlhZ25vc3RpYy5cbiAqXG4gKiBQcm9kdWN0aW9uIGxlYXZlcyBpdCBPRkYgYnkgZGVmYXVsdCAoemVybyBvdmVyaGVhZCkuIFNlZSB0aGUgSlNEb2Mgb25cbiAqIGBlbmFibGVEZXZNb2RlYCBmb3IgdGhlIGZ1bGwgbGlzdCBhbmQgdXNhZ2UgZXhhbXBsZS5cbiAqL1xuZXhwb3J0IHsgZGlzYWJsZURldk1vZGUsIGVuYWJsZURldk1vZGUsIGlzRGV2TW9kZSB9IGZyb20gJy4vbGliL2Rldk1vZGUuanMnO1xuXG4vLyBgZGVmaW5lU2NvcGVGcm9tWm9kYCBhbmQgdGhlIG90aGVyIHpvZC1iYXNlZCBzY29wZSBoZWxwZXJzIG1vdmVkIHRvIHRoZSBvcHQtaW5cbi8vIGBmb290cHJpbnRqcy96b2RgIGVudHJ5IOKAlCBrZWVwaW5nIHpvZCBvdXQgb2YgdGhlIGNvcmUgbG9hZCBwYXRoIChpdCBpcyBhblxuLy8gb3B0aW9uYWwgcGVlcikuIEltcG9ydCB0aGVtIGZyb20gJ2Zvb3RwcmludGpzL3pvZCcuXG4vLyBBIHJ1bidzIHJlY29yZCBhcyBKU09OIHdpdGhvdXQgdGhlIGVuZ2luZSdzIHJlY3Vyc2lvbiBsaW1pdCAoOS4yNi4wKTogdGhlXG4vLyBzYW1lIGJ5dGVzIEpTT04uc3RyaW5naWZ5IGVtaXRzLCBmb3IgYSBkZWVwIGBuZXh0YCBjaGFpbiBpdCBjYW5ub3QgZW5jb2RlLlxuZXhwb3J0IHR5cGUgeyBSZXRyeUxvb3BDYWxsLCBSZXRyeUxvb3BEZWNpc2lvbiwgUmV0cnlMb29wSWRlbnRpdHkgfSBmcm9tICcuL2xpYi9hdHRlbXB0L3JldHJ5TG9vcFR5cGVzLmpzJztcbmV4cG9ydCB0eXBlIHsgUmV0cnlMb29wQ29udGV4dCwgUmV0cnlMb29wT3B0aW9ucywgUmV0cnlMb29wU3RhdGUgfSBmcm9tICcuL2xpYi9idWlsZGVyL3JldHJ5TG9vcC5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIENhcHR1cmVDaGFubmVsU3RhdHVzLFxuICBDYXB0dXJlTGltaXRhdGlvbixcbiAgTmF0aXZlQ2FwdHVyZU5vdGUsXG4gIFJlY29yZGVyQ2FwdHVyZUFja25vd2xlZGdlbWVudCxcbn0gZnJvbSAnLi9saWIvY2FwdHVyZS9uYXRpdmVDb3ZlcmFnZS5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEVuZ2luZVJlYWRTb3VyY2VzLFxuICBOYXRpdmVDYXB0dXJlT2JzZXJ2YXRpb24sXG4gIE5hdGl2ZVJlYWRDYXB0dXJlTm90ZSxcbiAgU291cmNlTGltaXRhdGlvbixcbn0gZnJvbSAnLi9saWIvY2FwdHVyZS9yZWFkU291cmNlcy5qcyc7XG5leHBvcnQgeyBzdHJpbmdpZnlTbmFwc2hvdCB9IGZyb20gJy4vbGliL3J1bm5lci9zdHJpbmdpZnlTbmFwc2hvdC5qcyc7XG4iXX0=
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFTSCw0QkFBNEI7QUFDNUIsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBc0N4RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFRbkQsNEJBQTRCO0FBQzVCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQW9CM0MsbUNBQW1DO0FBQ25DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFpRHZEOzs7Ozs7R0FNRztBQUNILE9BQU8sRUFBRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBV3JILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBZ0MvRixvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBUXhELG9CQUFvQjtBQUNwQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRCxvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBcUJuRCwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXRELCtCQUErQjtBQUMvQixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFckQsb0NBQW9DO0FBQ3BDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBbUM1RCxxRUFBcUU7QUFDckUsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsa0JBQWtCLEVBQ2xCLFdBQVcsR0FDWixNQUFNLHlCQUF5QixDQUFDO0FBa0RqQywrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFLOUQsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTdELCtCQUErQjtBQUMvQixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV0RSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdkUsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXpFLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVqRSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEUsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXBFLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQW1CdEUsdUNBQXVDO0FBQ3ZDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTdFLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBRS9FLDhCQUE4QjtBQUM5QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQTBCNUQsNkJBQTZCO0FBQzdCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQWdFakQsc0NBQXNDO0FBQ3RDLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTNFLHNDQUFzQztBQUN0QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFTckcsZ0NBQWdDO0FBQ2hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRSwrRUFBK0U7QUFDL0UsaURBQWlEO0FBQ2pELCtFQUErRTtBQUUvRTs7Ozs7Ozs7Ozs7R0FXRztBQUNILE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBMEI1RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRm9vdFByaW50IOKAlCBQdWJsaWMgQVBJICh2MylcbiAqXG4gKiBUaGUgZmxvd2NoYXJ0IHBhdHRlcm4gZm9yIGJhY2tlbmQgY29kZS5cbiAqIEJ1aWxkIOKGkiBSdW4g4oaSIE9ic2VydmUuXG4gKlxuICogKipUaGUgY29tbW9uIGltcG9ydCBwYXRoczoqKlxuICogYGBgdHNcbiAqIGltcG9ydCB7IGZsb3dDaGFydCwgZGVjaWRlLCBuYXJyYXRpdmUgfSBmcm9tICdmb290cHJpbnRqcyc7ICAgICAgICAgICAvLyBtYWluIOKAlCBzdGFydCBoZXJlXG4gKiBpbXBvcnQgeyBtZXRyaWNzLCBkZWJ1ZywgbWFuaWZlc3QgfSAgICAgZnJvbSAnZm9vdHByaW50anMvcmVjb3JkZXJzJzsgLy8gcmVjb3JkZXIgZmFjdG9yaWVzXG4gKiBpbXBvcnQgeyBzdGF0ZUF0LCBjYXVzYWxDaGFpbiB9IGZyb20gJ2Zvb3R0cmFjZSc7ICAgICAvLyByZWFkIGEgZmluaXNoZWQgcnVuXG4gKiBpbXBvcnQgeyBSZWNvcmRGcmFtZSwgRXZlbnRMb2cgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnOyAgICAgLy8gd3JpdGUgYSByZWNvcmQgeW91cnNlbGZcbiAqIGltcG9ydCB7IFN0YWdlQ29udGV4dCB9ICAgICAgICAgICAgICAgICBmcm9tICdmb290cHJpbnRqcy9hZHZhbmNlZCc7ICAvLyBlbmdpbmUgaW50ZXJuYWxzXG4gKiBgYGBcbiAqXG4gKiBAbW9kdWxlXG4gKi9cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUXVpY2sgU3RhcnQg4oCUIEV2ZXJ5dGhpbmcgeW91IG5lZWQgZm9yIDkwJSBvZiB1c2UgY2FzZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHR5cGUgeyBGbG93Q2hhcnQsIFN0YWdlRnVuY3Rpb24gYXMgU3RhZ2VIYW5kbGVyLCBTdHJlYW1IYW5kbGVycyB9IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgeyBmbG93Q2hhcnQsIEZsb3dDaGFydEJ1aWxkZXIsIGZsb3dDaGFydFNlbGVjdG9yIH0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0XG4gKlxuICogQ29uZmlnIGZvciBgLmFkZFBhcmFsbGVsRm9yRWFjaCgpYCDigJQgb25lIGJyYW5jaCBwZXIgaXRlbSwgYnJhbmNoIGNvdW50XG4gKiBkZWNpZGVkIGF0IHJ1biB0aW1lIGZyb20gdGhlIHBheWxvYWQuIGBtYXhCcmFuY2hlc2AgYW5kIGBpbnRvYCBhcmUgcmVxdWlyZWRcbiAqIG9uIHB1cnBvc2UgKHNlZSBkb2NzL2Rlc2lnbi9leGVjdXRpb24tY29udHJvbC5tZCkuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQnJhbmNoQ2hhcnQsIFBhcmFsbGVsRm9yRWFjaENvbmZpZywgUmV0cnlQb2xpY3kgfSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCDigJQgYnVpbGQtdGltZSBvYnNlcnZlciAodHdpbiBvZiBGbG93UmVjb3JkZXIpICovXG5leHBvcnQgdHlwZSB7XG4gIFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50LFxuICBTdHJ1Y3R1cmVFZGdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlRWRnZUtpbmQsXG4gIFN0cnVjdHVyZUxvb3BFZGdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlUmVjb3JkZXIsXG4gIFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlU3RhZ2VUYWdnZWRFdmVudCxcbiAgU3RydWN0dXJlU3ViZmxvd01vdW50ZWRFdmVudCxcbn0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IFRpbWUgQnVkZ2V0XG4gKlxuICogYHRpbWVCdWRnZXQoY2hhcnQpYCDigJQgdGhlIHNsb3dlc3QgYSBjaGFydCBjYW4gdGFrZSwgZnJvbSBpdHMgZGVjbGFyZWQgcmV0cnkgcG9saWNpZXMgKGBhdHRlbXB0cyDDlyB0aW1lb3V0TXNgIHBsdXNcbiAqIHRoZSB3YWl0cywgc3VtbWVkIGFsb25nIHRoZSBzbG93ZXN0IHBhdGgpLCBhbmQgZXZlcnkgc3RhZ2UgdGhhdCBtYWtlcyBhIHBhdGggdW5ib3VuZGVkLCBieSBuYW1lLiBgLmJ1ZGdldChtcylgXG4gKiBkZWNsYXJlcyB0aGUgY2FsbGVyJ3MgY29udHJhY3Q7IGBidWlsZCgpYCByZWZ1c2VzIGEgY2hhcnQgdGhhdCBjYW5ub3Qga2VlcCBpdC4gQWxzbyBgY2hhcnQudGltZUJ1ZGdldCgpYC5cbiAqL1xuZXhwb3J0IHR5cGUge1xuICBCdWRnZXRBc3N1bXB0aW9ucyxcbiAgQnVkZ2V0U3RlcCxcbiAgVGltZUJ1ZGdldE9wdGlvbnMsXG4gIFRpbWVCdWRnZXRSZXBvcnQsXG4gIFVuYm91bmRlZFJlYXNvbixcbiAgVW5ib3VuZGVkU3RhZ2UsXG59IGZyb20gJy4vbGliL2J1ZGdldC9pbmRleC5qcyc7XG5leHBvcnQgeyB0aW1lQnVkZ2V0IH0gZnJvbSAnLi9saWIvYnVkZ2V0L2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHR5cGUgeyBUeXBlZFN0YWdlRnVuY3Rpb24gfSBmcm9tICcuL2xpYi9idWlsZGVyL3R5cGVkRmxvd0NoYXJ0LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHR5cGUgeyBTY29wZU1ldGhvZHMsIFR5cGVkU2NvcGUgfSBmcm9tICcuL2xpYi9yZWFjdGl2ZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB7IG5hcnJhdGl2ZSB9IGZyb20gJy4vcmVjb3JkZXJzLmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGVjaXNpb24gQnJhbmNoaW5nIOKAlCBkZWNpZGUoKSAvIHNlbGVjdCgpIHdpdGggZXZpZGVuY2UgY2FwdHVyZVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IERlY2lzaW9uIEJyYW5jaGluZyAqL1xuZXhwb3J0IHR5cGUge1xuICBEZWNpZGVSdWxlLFxuICBEZWNpc2lvbkV2aWRlbmNlLFxuICBEZWNpc2lvblJlc3VsdCxcbiAgRGVmYXVsdEJyYW5jaCxcbiAgRmlsdGVyT3BzLFxuICBSdWxlRXZpZGVuY2UsXG4gIFNlbGVjdGlvbkV2aWRlbmNlLFxuICBTZWxlY3Rpb25SZXN1bHQsXG4gIFdoZW5DbGF1c2UsXG4gIFdoZXJlRmlsdGVyLFxufSBmcm9tICcuL2xpYi9kZWNpZGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IERlY2lzaW9uIEJyYW5jaGluZyAqL1xuZXhwb3J0IHsgZGVjaWRlLCBzZWxlY3QgfSBmcm9tICcuL2xpYi9kZWNpZGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IEVycm9ycyAqL1xuZXhwb3J0IHR5cGUgeyBUZXJtaW5hbEZhaWx1cmVDb250ZXh0IH0gZnJvbSAnLi9saWIvZXJyb3JzL3Rlcm1pbmFsRmFpbHVyZS5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEF0dGVtcHRzIOKAlCBldmVyeSB0cnkgb2YgYSByZXRyaWVkIHN0YWdlLCBhbmQgdGhlIGRlY2lzaW9uIHRoYXQgZm9sbG93ZWQgaXRcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBAY2F0ZWdvcnkgQXR0ZW1wdHNcbiAqXG4gKiBPbmUgYEF0dGVtcHRSZWNvcmRgIHBlciBhdHRlbXB0IG9mIGEgc3RhZ2Ugd2l0aCBhIGRlY2xhcmVkIGByZXRyeWAgcG9saWN5LCBhIGB0aW1lb3V0TXNgLCBvciBhIHJ1biBkZWFkbGluZSDigJRcbiAqIHRpbWluZywgb3V0Y29tZSwgZmFpbHVyZSBjYXRlZ29yeSwgYW5kIHRoZSByZXRyeS1vci1zdG9wIGRlY2lzaW9uIGFzIGBEZWNpc2lvbkV2aWRlbmNlYCDigJQgb24gdGhlIHN0YWdlJ3NcbiAqIGV4ZWN1dGlvbi10cmVlIG5vZGUgKGBTdGFnZVNuYXBzaG90LmF0dGVtcHRzYCAvIGBhdHRlbXB0U3VtbWFyeWApIGFuZCBvbiBgRmxvd1JlY29yZGVyLm9uQXR0ZW1wdGAuXG4gKiBBIGNhbGwgYSBzdGFnZSBtYWtlcyB0aHJvdWdoIGBzY29wZS4kY2FsbGAgaXMgcmVjb3JkZWQgdGhlIHNhbWUgd2F5IChraW5kIGAnY2FsbCdgKSwgYW5kIHNvIGlzIGFuIFNESydzIG93biByZXRyeVxuICogYW4gYWRhcHRlciByZXBvcnRzIHRocm91Z2ggYG9ic2VydmVkKClgIChgT2JzZXJ2ZWRBdHRlbXB0YCwga2luZCBgJ29ic2VydmVkJ2ApLiBgQXR0ZW1wdENvbnRleHRgIGlzIHdoYXRcbiAqIGBzY29wZS4kYXR0ZW1wdCgpYCByZXR1cm5zLCBhbmQgd2hhdCBhIGNhbGwncyBmdW5jdGlvbiBnZXRzICh0aGUgYXR0ZW1wdCdzIHNpZ25hbCwgdGhlIHRpbWUgbGVmdCwgYG9ic2VydmVkYCk7XG4gKiBgTGF0ZVdyaXRlYCBpcyBhIHdyaXRlIChvciBjYWxsKSBhbiBlbmRlZCBhdHRlbXB0IHRyaWVkIChgU3RhZ2VTbmFwc2hvdC5sYXRlV3JpdGVzYCkuIEEgc3RhZ2UgdGhhdCBjaGFuZ2VzIGFuXG4gKiBvdXRzaWRlIHN5c3RlbSBkZWNsYXJlcyBpdCAoYFN0YWdlVG91Y2hlc2AsIGAudG91Y2hlcygpYCksIGFuZCBhIGNhbGwgZG9lcyAoYENhbGxPcHRpb25zYCk6IGV2ZXJ5IGF0dGVtcHQgdGhlblxuICogY2FycmllcyBpdHMgYEF0dGVtcHRFZmZlY3RgLCBhbmQgdGhlIGtleSBydWxlIGlzIGhhbmRlZCBhbiBgSWRlbXBvdGVuY3lLZXlDb250ZXh0YCBvbmNlIHBlciBleGVjdXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIHtcbiAgQXR0ZW1wdENhdGVnb3J5LFxuICBBdHRlbXB0Q29udGV4dCxcbiAgQXR0ZW1wdEVmZmVjdCxcbiAgQXR0ZW1wdEVycm9yLFxuICBBdHRlbXB0SW5wdXRzLFxuICBBdHRlbXB0S2luZCxcbiAgQXR0ZW1wdE5leHQsXG4gIEF0dGVtcHRPcHRpb25zLFxuICBBdHRlbXB0T3V0Y29tZSxcbiAgQXR0ZW1wdFJlYXNvbixcbiAgQXR0ZW1wdFJlY29yZCxcbiAgQXR0ZW1wdFN1bW1hcnksXG4gIENhbGxPcHRpb25zLFxuICBJZGVtcG90ZW5jeUtleUNvbnRleHQsXG4gIExhdGVXcml0ZSxcbiAgT2JzZXJ2ZWRBdHRlbXB0LFxuICBTdGFnZVRvdWNoZXMsXG4gIFVua25vd25FZmZlY3RJbml0LFxufSBmcm9tICcuL2xpYi9hdHRlbXB0L2luZGV4LmpzJztcbi8qKlxuICogQGNhdGVnb3J5IEF0dGVtcHRzXG4gKlxuICogQW4gYXR0ZW1wdCBieSBuYW1lIChgc2VyaWVzYCArIGBhdHRlbXB0YCkgYW5kIHBlci1vdXRjb21lIGNvdW50cyDigJQgd2hhdCByZWNvcmRlciByb3dzIGhvbGQgb2YgYXR0ZW1wdHMuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQXR0ZW1wdE91dGNvbWVDb3VudHMsIEF0dGVtcHRSZWYgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9hdHRlbXB0U2VyaWVzLmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgQXR0ZW1wdHNcbiAqXG4gKiBgYXR0ZW1wdCgpYCDigJQgdGhlIGF0dGVtcHQgcnVubmVyIGZvciBjb2RlIHRoYXQgaXMgbm90IGEgc3RhZ2UgKHJlY29yZHMgZ28gdG8gaXRzIGBvbkF0dGVtcHRgKTsgYGVycm9yQ2F0ZWdvcnlgXG4gKiDigJQgdGhlIG9uZSBmYWlsdXJlIGNsYXNzaWZpZXIgKHNldmVuIGZpeGVkIGNhdGVnb3JpZXMpOyBgcmV0cnlSdWxlc2Ag4oCUIHRoZSBvbmUgcmV0cnkgcnVsZSB0YWJsZSwgYXMgYGRlY2lkZSgpYFxuICogcnVsZXM7IHRoZSBhdHRlbXB0IGNvbnRyYWN0J3MgdHdvIGVycm9ycy5cbiAqL1xuZXhwb3J0IHsgYXR0ZW1wdCwgQXR0ZW1wdFRpbWVvdXRFcnJvciwgZXJyb3JDYXRlZ29yeSwgcmV0cnlSdWxlcywgVW5rbm93bkVmZmVjdEVycm9yIH0gZnJvbSAnLi9saWIvYXR0ZW1wdC9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvcnJlbGF0aW9uXG4gKlxuICogVGhlIHJ1bidzIGNvcnJlbGF0aW9uICgxMC4xKTogYGVudi50cmFjZXBhcmVudGAgKFczQywgcGFyc2VkIHN0cmljdGx5KSBvciBgZW52LnRyYWNlSWRgICsgYGVudi5vcGVyYXRpb25JZGBcbiAqIGJlY29tZSBPTkUgZnJvemVuIGBSdW5Db3JyZWxhdGlvbmAgcGVyIHJ1biDigJQgb24gYGdldFNuYXBzaG90KCkuY29ycmVsYXRpb25gLCBldmVyeSBmbG93IGV2ZW50J3NcbiAqIGB0cmF2ZXJzYWxDb250ZXh0LmNvcnJlbGF0aW9uYCBhbmQgZXZlcnkgc2NvcGUgYW5kIGVtaXQgZXZlbnQncyBgY29ycmVsYXRpb25gLiBgcGFyc2VUcmFjZXBhcmVudGAgL1xuICogYGZvcm1hdFRyYWNlcGFyZW50YCBhcmUgdGhlIFczQyBjb2RlYzsgYSByZWZ1c2VkIGhlYWRlciB0aHJvd3MgYFRyYWNlcGFyZW50RXJyb3JgIHdpdGggYSBuYW1lZCBgcmVhc29uYC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBQYXJzZWRUcmFjZXBhcmVudCwgUnVuQ29ycmVsYXRpb24sIFRyYWNlcGFyZW50RmllbGRzLCBUcmFjZXBhcmVudFJlZnVzYWwgfSBmcm9tICcuL2xpYi9hdHRlbXB0L2luZGV4LmpzJztcbmV4cG9ydCB7IGZvcm1hdFRyYWNlcGFyZW50LCBwYXJzZVRyYWNlcGFyZW50LCBUcmFjZXBhcmVudEVycm9yIH0gZnJvbSAnLi9saWIvYXR0ZW1wdC9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFJ1biDigJQgRXhlY3V0ZSBjaGFydHMgYW5kIGNvbGxlY3QgcmVzdWx0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUge1xuICBDYXB0dXJlSGlzdG9yeU9wdGlvbnMsXG4gIENhcHR1cmVIaXN0b3J5UmVjZWlwdCxcbiAgQ2FwdHVyZUhpc3RvcnlTdGF0dXMsXG4gIENhcHR1cmVIaXN0b3J5VGFyZ2V0LFxufSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuZXhwb3J0IHR5cGUgeyBSdW5SZXN1bHQgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUgeyBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnMgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIFRoZSBjcmFzaC1zYWZlIHJlY29yZCAoMTAuMSk6IHRoZSBleGVjdXRvcidzIGBzaW5rYCBvcHRpb24sIGl0cyBhY2NvdW50aW5nIG9uIGBnZXRTbmFwc2hvdCgpLnNpbmtgLFxuICogYGV4ZWN1dG9yLmZsdXNoUmVjb3JkKClgJ3MgcmVzdWx0LCBhbmQgdGhlIGVycm9yIGEgcnVuIHdpdGggYG9uRmFpbHVyZTogJ2ZhaWwnYCByZWplY3RzIHdpdGguIFRoZSBwb3J0XG4gKiAoYFJlY29yZFNpbmtgLCBgbWVtb3J5U2lua2ApIGlzIGBmb290dHJhY2Uvd3JpdGVgJ3M7IHRoZSBmaWxlIGFkYXB0ZXIgaXMgYGZvb3RwcmludGpzL3NpbmtzYC5cbiAqIEBjYXRlZ29yeSBSdW5cbiAqL1xuZXhwb3J0IHR5cGUge1xuICBSZWNvcmRGbHVzaFJlc3VsdCxcbiAgUmVjb3JkU2lua0ZhaWx1cmVNb2RlLFxuICBSZWNvcmRTaW5rRmx1c2hNb2RlLFxuICBSZWNvcmRTaW5rT3B0aW9uLFxuICBSZWNvcmRTaW5rT3B0aW9ucyxcbiAgUmVjb3JkU2lua1N0YXRzLFxufSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB7IFJlY29yZFNpbmtFcnJvciB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKlxuICogVGhlIGZvdXIgb2JzZXJ2YWJpbGl0eSBkaWFscyBgRmxvd0NoYXJ0RXhlY3V0b3JPcHRpb25zYCBpbmhlcml0cy5cbiAqIEBjYXRlZ29yeSBSdW5cbiAqL1xuZXhwb3J0IHR5cGUgeyBSdW5EaWFscyB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgeyBGbG93Q2hhcnRFeGVjdXRvciB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUnVuICovXG5leHBvcnQgeyBSdW5Db250ZXh0IH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB0eXBlIHsgQ2hhcnRPcGVuQVBJT3B0aW9ucywgTUNQVG9vbERlc2NyaXB0aW9uLCBSdW5uYWJsZUZsb3dDaGFydCB9IGZyb20gJy4vbGliL3J1bm5lci9SdW5uYWJsZUNoYXJ0LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT2JzZXJ2ZSDigJQgRGF0YSAoc2NvcGUgcmVjb3JkZXJzLCBmaXJlIGR1cmluZyBzdGFnZSBleGVjdXRpb24pXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGF0YSAqL1xuZXhwb3J0IHR5cGUge1xuICBDb21taXRFdmVudCxcbiAgRXJyb3JFdmVudCxcbiAgUmVhZEV2ZW50LFxuICBSZWRhY3Rpb25Qb2xpY3ksXG4gIFJlZGFjdGlvblJlcG9ydCxcbiAgU2NvcGVSZWNvcmRlcixcbiAgU3RhZ2VFdmVudCxcbiAgV3JpdGVFdmVudCxcbn0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERhdGEgKi9cbmV4cG9ydCB7IE1ldHJpY1JlY29yZGVyIH0gZnJvbSAnLi9saWIvc2NvcGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIERhdGEgKi9cbmV4cG9ydCB7IERlYnVnUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9zY29wZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgT3BlcmF0aW9uICovXG5leHBvcnQgeyBSZWNvcmRlck9wZXJhdGlvbiB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGVsaXZlcnkgdGllciAoUkZDLTAwMSBkZWZlcnJlZCBvYnNlcnZlcnMpXG4gKlxuICogRXZlcnkgYGF0dGFjaCpSZWNvcmRlcmAgY2FsbCBhY2NlcHRzIGFuIG9wdGlvbnMgYmFnOlxuICogYGV4ZWN1dG9yLmF0dGFjaFNjb3BlUmVjb3JkZXIocmVjLCB7IGRlbGl2ZXJ5OiAnZGVmZXJyZWQnIH0pYCB0YWtlcyB0aGVcbiAqIHJlY29yZGVyIE9VVCBvZiB0aGUgZW5naW5lJ3MgaG90IHBhdGgg4oCUIGV2ZW50cyBhcmUgY2FwdHVyZWQgaW50byBvbmVcbiAqIGJvdW5kZWQsIHRvdGFsbHktb3JkZXJlZCBxdWV1ZSBhbmQgZGVsaXZlcmVkIGF0IHRoZSBuZXh0IG1pY3JvdGFza1xuICogY2hlY2twb2ludCAoXCJvbmUgYmVhdCBiZWhpbmRcIikuIE9taXQgYGRlbGl2ZXJ5YCBmb3IgdGhlIGhpc3RvcmljYWxcbiAqIHN5bmNocm9ub3VzIGNhbGwgKGJ5dGUtaWRlbnRpY2FsIHRvIHByZXZpb3VzIHJlbGVhc2VzKS4gQWNjb3VudGluZ1xuICogc3VyZmFjZXMgb24gYHNuYXBzaG90Lm9ic2VydmVyU3RhdHNgOyBgZXhlY3V0b3IuZHJhaW5PYnNlcnZlcnMoKWAgc2V0dGxlc1xuICogYXN5bmMgbGlzdGVuZXJzIGJlZm9yZSBzaHV0ZG93bi4gU2VlIGBkb2NzL2d1aWRlcy9vYnNlcnZlcnMtZGVmZXJyZWQubWRgLlxuICovXG5leHBvcnQgdHlwZSB7XG4gIEF0dGFjaFJlY29yZGVyT3B0aW9ucyxcbiAgT2JzZXJ2ZXJEZWxpdmVyeSxcbiAgT2JzZXJ2ZXJEcmFpblJlc3VsdCxcbiAgT2JzZXJ2ZXJTdGF0cyxcbn0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGVsaXZlcnkgdGllciAoUkZDLTAwMSBkZWZlcnJlZCBvYnNlcnZlcnMpXG4gKlxuICogYENhcHR1cmVQb2xpY3lgIOKAlCBob3cgYSBkZWZlcnJlZCBldmVudCdzIHBheWxvYWQgaXMgbWF0ZXJpYWxpemVkIGF0XG4gKiBjYXB0dXJlIHRpbWUgKGAnY2xvbmUnYCBieSBkZWZhdWx0IGZvciBhdHRhY2ggb3B0aW9ucyAvIGAnc3VtbWFyeSdgIC8gYCdyZWYnYCkuIGBPdmVyZmxvd1BvbGljeWBcbiAqIOKAlCB3aGF0IGEgc2F0dXJhdGVkIHF1ZXVlIGRvZXMgKGAnZHJvcC1vbGRlc3QnYCBkZWZhdWx0IC8gYCdzYW1wbGUnYCAvXG4gKiBgJ2Jsb2NrJ2ApLiBgRGlzcGF0Y2hlclN0YXRzYCAvIGBMaXN0ZW5lclN0YXRzYCDigJQgdGhlIGFjY291bnRpbmcgc2hhcGVzXG4gKiBlbWJlZGRlZCBpbiBgT2JzZXJ2ZXJTdGF0c2AuIFR5cGVzIG9ubHkg4oCUIHRoZSBvYnNlcnZlci1xdWV1ZSBtb2R1bGVcbiAqIGl0c2VsZiBpcyBpbnRlcm5hbDsgY29uc3VtZXJzIHVzZSB0aGUgYXR0YWNoIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCB0eXBlIHsgQ2FwdHVyZVBvbGljeSwgRGlzcGF0Y2hlclN0YXRzLCBMaXN0ZW5lclN0YXRzLCBPdmVyZmxvd1BvbGljeSB9IGZyb20gJy4vbGliL29ic2VydmVyLXF1ZXVlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBDb21iaW5lZCAoYm90aCBkYXRhLWZsb3cgYW5kIGNvbnRyb2wtZmxvdykgKi9cbmV4cG9ydCB0eXBlIHsgQ29tYmluZWRSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgQ29tYmluZWQgKGJvdGggZGF0YS1mbG93IGFuZCBjb250cm9sLWZsb3cpICovXG5leHBvcnQge1xuICBoYXNFbWl0UmVjb3JkZXJNZXRob2RzLFxuICBoYXNGbG93UmVjb3JkZXJNZXRob2RzLFxuICBoYXNSZWNvcmRlck1ldGhvZHMsXG4gIGlzRmxvd0V2ZW50LFxufSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEVtaXQgKHVzZXItYXV0aG9yZWQgc3RydWN0dXJlZCBldmVudHMpXG4gKlxuICogVGhpcmQgb2JzZXJ2ZXIgY2hhbm5lbCAoYWxvbmdzaWRlIGBTY29wZVJlY29yZGVyYCBhbmQgYEZsb3dSZWNvcmRlcmApLiBDb25zdW1lclxuICogY29kZSBjYWxscyBgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgIGZyb20gaW5zaWRlIGEgc3RhZ2U7IGV2ZXJ5IGF0dGFjaGVkXG4gKiBgRW1pdFJlY29yZGVyLm9uRW1pdChldmVudClgIGZpcmVzIHN5bmNocm9ub3VzbHkgd2l0aCBzdGFnZS1jb250ZXh0XG4gKiBlbnJpY2htZW50LiBQYXNzLXRocm91Z2gg4oCUIG5vIGJ1ZmZlcmluZywgemVybyBhbGxvY2F0aW9uIHdoZW4gbm8gcmVjb3JkZXJcbiAqIGlzIGF0dGFjaGVkLlxuICovXG5leHBvcnQgdHlwZSB7IEVtaXRFdmVudCwgRW1pdFJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPYnNlcnZlIOKAlCBGbG93IChGbG93UmVjb3JkZXIsIGZpcmVzIGFmdGVyIHN0YWdlIGV4ZWN1dGlvbilcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7XG4gIEZsb3dBdHRlbXB0RXZlbnQsXG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dGb3JrRXZlbnQsXG4gIEZsb3dMb29wRXZlbnQsXG4gIEZsb3dOZXh0RXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1J1bkV2ZW50LFxuICBGbG93UnVuRmFpbGVkRXZlbnQsXG4gIEZsb3dTZWxlY3RlZEV2ZW50LFxuICBGbG93U3RhZ2VFdmVudCxcbiAgRmxvd1N0YWdlUmV0cnlFdmVudCxcbiAgRmxvd1N1YmZsb3dFdmVudCxcbiAgRmxvd1N1YmZsb3dSZWdpc3RlcmVkRXZlbnQsXG4gIEZsb3dUaHJvdHRsZWRFdmVudCxcbiAgUmVzdW1lTGluayxcbiAgVHJhdmVyc2FsQ29udGV4dCxcbn0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7IENvbWJpbmVkTmFycmF0aXZlRW50cnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93XG4gKlxuICogYE5hcnJhdGl2ZUZvcm1hdHRlcmAg4oCUIHBsdWdnYWJsZSBmb3JtYXR0ZXIgdGhhdCBjb252ZXJ0cyBldmVudCBjb250ZXh0XG4gKiBvYmplY3RzIGludG8gdGhlIHRleHQgbGluZXMgb2YgdGhlIG5hcnJhdGl2ZS5cbiAqL1xuZXhwb3J0IHR5cGUgeyBOYXJyYXRpdmVGb3JtYXR0ZXIgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHR5cGUgeyBNYW5pZmVzdEF0dGVtcHRSb3csIE1hbmlmZXN0RW50cnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IE1hbmlmZXN0Rmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBBZGFwdGl2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgTWlsZXN0b25lTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBQcm9ncmVzc2l2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgUkxFTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBTZXBhcmF0ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgU2lsZW50TmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBXaW5kb3dlZE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNlbGYtRGVzY3JpYmluZyDigJQgLmNvbnRyYWN0KCksIHRvT3BlbkFQSSgpLCB0b01DUFRvb2woKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFNlbGYtRGVzY3JpYmluZyAqL1xuZXhwb3J0IHR5cGUgeyBKc29uU2NoZW1hIH0gZnJvbSAnLi9saWIvY29udHJhY3QvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTbmFwc2hvdCAmIENvbXBvc2l0aW9uIOKAlCBTdWJmbG93IG5hdmlnYXRpb24gYW5kIENvbXBvc2FibGVSdW5uZXJcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBTbmFwc2hvdCAmIENvbXBvc2l0aW9uICovXG5leHBvcnQgdHlwZSB7IENvbXBvc2FibGVSdW5uZXIgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNuYXBzaG90ICYgQ29tcG9zaXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgUmVjb3JkZXJTbmFwc2hvdCwgUnVudGltZVNuYXBzaG90LCBTdWJ0cmVlU25hcHNob3QgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNuYXBzaG90ICYgQ29tcG9zaXRpb24gKi9cbmV4cG9ydCB7IGdldFN1YnRyZWVTbmFwc2hvdCwgbGlzdFN1YmZsb3dQYXRocyB9IGZyb20gJy4vbGliL3J1bm5lci9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNjb3BlUmVjb3JkZXIgQ29tcG9zaXRpb24g4oCUIEJ1bmRsZSBtdWx0aXBsZSByZWNvcmRlcnMgaW50byBkb21haW4gcHJlc2V0c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFNjb3BlUmVjb3JkZXIgKi9cbmV4cG9ydCB7IENvbXBvc2l0ZVJlY29yZGVyIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBQYXVzZS9SZXN1bWUg4oCUIFNlcmlhbGl6YWJsZSBjaGVja3BvaW50cyBmb3IgbG9uZy1ydW5uaW5nIG9yIGh1bWFuLWluLXRoZS1sb29wIGZsb3dzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgUGF1c2UvUmVzdW1lICovXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuZXhwb3J0IHR5cGUge1xuICBGbG93Y2hhcnRDaGVja3BvaW50LFxuICBQYXVzYWJsZUhhbmRsZXIsXG4gIFBhdXNlZEV4ZWN1dGlvbixcbiAgUGVuZGluZ1BhdXNlLFxuICBSZWRhY3Rpb25NYXJrcyxcbn0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWVcbiAqXG4gKiBgaW50ZXJydXB0KHNjb3BlLCB7IHJlYXNvbiwgZXhwZWN0cz8gfSlgIOKAlCBzdG9wIG1pZC1zdGFnZSB0byBhc2sgYSBxdWVzdGlvbixcbiAqIGFuZCBnZXQgdGhlIGFuc3dlciBiYWNrIGF0IHRoZSBzYW1lIGNhbGwgc2l0ZSB3aGVuIHRoZSBydW4gcmVzdW1lcy4gUmVzdW1lXG4gKiByZS1lbnRlcnMgdGhlIHN0YWdlIGZyb20gaXRzIFRPUCAoc3RhZ2VzIGFyZSBhdG9taWMpLCBzbyBrZWVwIHRoZSBoYWxmXG4gKiBiZWZvcmUgdGhlIGNhbGwgaWRlbXBvdGVudC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBJbnRlcnJ1cHRQYXlsb2FkIH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuZXhwb3J0IHsgaW50ZXJydXB0IH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNjb3BlUmVjb3JkZXIgKi9cbmV4cG9ydCB0eXBlIHsgQ29tcG9zaXRlU25hcHNob3QgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbmZpZ3VyYXRpb24g4oCUIFR5cGVzIHBhc3NlZCB0byBGbG93Q2hhcnRFeGVjdXRvciBhbmQgcnVuKClcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uICovXG5leHBvcnQgdHlwZSB7IEV4ZWN1dGlvbkVudiwgRXhlY3V0b3JSZXN1bHQsIFBhdXNlZFJlc3VsdCwgUnVuT3B0aW9ucyB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBTY29wZUZhY3RvcnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uXG4gKlxuICogUmVhZC10cmFja2luZyBwb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlUmVhZHNgICgjMTQpOlxuICogYCdmdWxsJ2AgKGRlZmF1bHQg4oCUIHBlci1yZWFkIHZhbHVlIGNsb25lLCBoaXN0b3JpY2FsIGJlaGF2aW9yKSAvXG4gKiBgJ3N1bW1hcnknYCAoY2hlYXAgYFJlYWRTdW1tYXJ5TWFya2VyYCBwZXIgcmVhZCkgLyBgJ29mZidgIChubyB0cmFja2luZyxcbiAqIHplcm8gcGVyLXJlYWQgY2xvbmUpLiBQYXNzIGFzIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgcmVhZFRyYWNraW5nIH0pYFxuICogb3IgY2FsbCBgZXhlY3V0b3Iuc2V0UmVhZFRyYWNraW5nKG1vZGUpYCBiZWZvcmUgYHJ1bigpYC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBSZWFkU3VtbWFyeU1hcmtlciwgUmVhZFRyYWNraW5nTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBXcml0ZS10cmFja2luZyBwb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlV3JpdGVzYCAoIzEzYy1BKSDigJQgdGhlXG4gKiBzaWJsaW5nIG9mIGBSZWFkVHJhY2tpbmdNb2RlYDsgYm90aCBhbGlhcyB0aGUgc2hhcmVkIGBSZXRlbnRpb25Qb2xpY3lgXG4gKiBmYW1pbHkgZnJvbSBgbGliL2NhcHR1cmVgLiBgJ2Z1bGwnYCAoZGVmYXVsdCDigJQgcGVyLXdyaXRlIHZhbHVlIGNsb25lLFxuICogaGlzdG9yaWNhbCBiZWhhdmlvcikgLyBgJ3N1bW1hcnknYCAoY2hlYXAgYFdyaXRlU3VtbWFyeU1hcmtlcmAgcGVyIHdyaXRlKVxuICogLyBgJ29mZidgIChubyB0cmFja2luZzsgYHN0YWdlV3JpdGVzYCBhYnNlbnQgYW5kIHRoZSBgb25Db21taXRgIG11dGF0aW9uc1xuICogcGF5bG9hZCBpcyBlbXB0eSDigJQgd3JpdGVzIHRoZW1zZWx2ZXMgc3RpbGwgY29tbWl0LCBhbmQgdGhlIGNvbW1pdCBsb2cgaXNcbiAqIHVuYWZmZWN0ZWQpLiBQYXNzIGFzIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgd3JpdGVUcmFja2luZyB9KWAgb3JcbiAqIGNhbGwgYGV4ZWN1dG9yLnNldFdyaXRlVHJhY2tpbmcobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICovXG5leHBvcnQgdHlwZSB7IFJldGVudGlvblBvbGljeSwgV3JpdGVTdW1tYXJ5TWFya2VyLCBXcml0ZVRyYWNraW5nTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBDb21taXQtdmFsdWVzIGVuY29kaW5nIGZvciB0aGUgQ09NTUlUIExPRyAoIzEzYy1CKSDigJQgdGhlIHRoaXJkIGRpYWwgb2ZcbiAqIHRoZSBmYW1pbHksIGFuZCB0aGUgb25seSBMT1NTTEVTUyBvbmUgKGl0IGNoYW5nZXMgdGhlIGxvZydzIGVuY29kaW5nLFxuICogbmV2ZXIgaXRzIGluZm9ybWF0aW9uKS4gYCdmdWxsJ2AgKGRlZmF1bHQg4oCUIGV2ZXJ5IHN1cnZpdmluZyBgc2V0YCBzdG9yZXNcbiAqIHRoZSBmdWxsIGZpbmFsIHZhbHVlLCBieXRlLWlkZW50aWNhbCB0byBoaXN0b3J5KSAvIGAnZGVsdGEnYCAoYXJyYXlcbiAqIG5ldC1jaGFuZ2VzIHRoYXQgYXJlIFwiYmFzZSBwbHVzIGEgdGFpbFwiIGNvbW1pdCBhcyBhbiBgYXBwZW5kYCB2ZXJiXG4gKiBzdG9yaW5nIG9ubHkgdGhlIHRhaWw7IGBkZWxldGVWYWx1ZSgpYCBjb21taXRzIGFzIGEgcmVhbCBgZGVsZXRlYCB2ZXJiO1xuICogb25lIHRyYWNlIGVudHJ5IHBlciBzdXJ2aXZpbmcgcGF0aCkuIFJlcGxheSByZWNvbnN0cnVjdHMgZXZlcnkgc3RlcCdzXG4gKiBmdWxsIHN0YXRlIGV4YWN0bHkuIENvbnN1bWVycyByZWFkaW5nIGBidW5kbGUub3ZlcndyaXRlW2tleV1gIGFzIHRoZSBmdWxsXG4gKiB2YWx1ZSBtdXN0IHVzZSBgY29tbWl0VmFsdWVBdGAgZnJvbSBgZm9vdHRyYWNlYC4gUGFzcyBhc1xuICogYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyBjb21taXRWYWx1ZXMgfSlgIG9yIGNhbGxcbiAqIGBleGVjdXRvci5zZXRDb21taXRWYWx1ZXMobW9kZSlgIGJlZm9yZSBgcnVuKClgOyB0aGUgYWN0aXZlIG1vZGUgaXMgdGhlXG4gKiBzbmFwc2hvdCBkaXNjcmltaW5hbnQgYGdldFNuYXBzaG90KCkuY29tbWl0VmFsdWVzYC5cbiAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb250cmFjdCAmIFZhbGlkYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBDb250cmFjdCAmIFZhbGlkYXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgU2NoZW1hS2luZCwgVmFsaWRhdGlvbklzc3VlLCBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBDb250cmFjdCAmIFZhbGlkYXRpb24gKi9cbmV4cG9ydCB7IGRldGVjdFNjaGVtYSwgaXNWYWxpZGF0YWJsZSwgaXNab2QgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IENvbnRyYWN0ICYgVmFsaWRhdGlvbiAqL1xuZXhwb3J0IHsgSW5wdXRWYWxpZGF0aW9uRXJyb3IsIHZhbGlkYXRlQWdhaW5zdFNjaGVtYSwgdmFsaWRhdGVPclRocm93IH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRXJyb3IgVXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgRXJyb3IgVXRpbGl0aWVzICovXG5leHBvcnQgdHlwZSB7IFN0cnVjdHVyZWRFcnJvckluZm8gfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IEVycm9yIFV0aWxpdGllcyAqL1xuZXhwb3J0IHsgZXh0cmFjdEVycm9ySW5mbywgZm9ybWF0RXJyb3JJbmZvIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGV2IFRvb2xzIOKAlCBNb2RlIGZsYWdzIGFuZCBab2Qgc2NvcGUgdXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQGNhdGVnb3J5IERldiBUb29sc1xuICpcbiAqIEdsb2JhbCBkZXYtbW9kZSBmbGFnLiBDYWxsIGBlbmFibGVEZXZNb2RlKClgIGF0IGFwcGxpY2F0aW9uIHN0YXJ0dXAgdG9cbiAqIHR1cm4gb24gZGV2ZWxvcGVyLW9ubHkgZGlhZ25vc3RpY3MgYWNyb3NzIHRoZSBsaWJyYXJ5IOKAlCBjaXJjdWxhci1yZWZlcmVuY2VcbiAqIGRldGVjdGlvbiBpbiBzY29wZSB3cml0ZXMsIHdhcm5pbmdzIHdoZW4gYSByZWNvcmRlciBoYXMgbm8gb2JzZXJ2ZXJcbiAqIG1ldGhvZHMsIHN1c3BpY2lvdXMtcHJlZGljYXRlIHdhcm5pbmdzIGluIGRlY2lkZS9zZWxlY3QsIHN0cnVjdHVyYWxcbiAqIGNoZWNrcyBpbiBgZ2V0U3VidHJlZVNuYXBzaG90YCwgYW5kIGFueSBmdXR1cmUgZGV2LW9ubHkgZGlhZ25vc3RpYy5cbiAqXG4gKiBQcm9kdWN0aW9uIGxlYXZlcyBpdCBPRkYgYnkgZGVmYXVsdCAoemVybyBvdmVyaGVhZCkuIFNlZSB0aGUgSlNEb2Mgb25cbiAqIGBlbmFibGVEZXZNb2RlYCBmb3IgdGhlIGZ1bGwgbGlzdCBhbmQgdXNhZ2UgZXhhbXBsZS5cbiAqL1xuZXhwb3J0IHsgZGlzYWJsZURldk1vZGUsIGVuYWJsZURldk1vZGUsIGlzRGV2TW9kZSB9IGZyb20gJy4vbGliL2Rldk1vZGUuanMnO1xuXG4vLyBgZGVmaW5lU2NvcGVGcm9tWm9kYCBhbmQgdGhlIG90aGVyIHpvZC1iYXNlZCBzY29wZSBoZWxwZXJzIG1vdmVkIHRvIHRoZSBvcHQtaW5cbi8vIGBmb290cHJpbnRqcy96b2RgIGVudHJ5IOKAlCBrZWVwaW5nIHpvZCBvdXQgb2YgdGhlIGNvcmUgbG9hZCBwYXRoIChpdCBpcyBhblxuLy8gb3B0aW9uYWwgcGVlcikuIEltcG9ydCB0aGVtIGZyb20gJ2Zvb3RwcmludGpzL3pvZCcuXG4vLyBBIHJ1bidzIHJlY29yZCBhcyBKU09OIHdpdGhvdXQgdGhlIGVuZ2luZSdzIHJlY3Vyc2lvbiBsaW1pdCAoOS4yNi4wKTogdGhlXG4vLyBzYW1lIGJ5dGVzIEpTT04uc3RyaW5naWZ5IGVtaXRzLCBmb3IgYSBkZWVwIGBuZXh0YCBjaGFpbiBpdCBjYW5ub3QgZW5jb2RlLlxuZXhwb3J0IHR5cGUgeyBSZXRyeUxvb3BDYWxsLCBSZXRyeUxvb3BEZWNpc2lvbiwgUmV0cnlMb29wSWRlbnRpdHkgfSBmcm9tICcuL2xpYi9hdHRlbXB0L3JldHJ5TG9vcFR5cGVzLmpzJztcbmV4cG9ydCB0eXBlIHsgUmV0cnlMb29wQ29udGV4dCwgUmV0cnlMb29wT3B0aW9ucywgUmV0cnlMb29wU3RhdGUgfSBmcm9tICcuL2xpYi9idWlsZGVyL3JldHJ5TG9vcC5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIENhcHR1cmVDaGFubmVsU3RhdHVzLFxuICBDYXB0dXJlTGltaXRhdGlvbixcbiAgTmF0aXZlQ2FwdHVyZU5vdGUsXG4gIFJlY29yZGVyQ2FwdHVyZUFja25vd2xlZGdlbWVudCxcbn0gZnJvbSAnLi9saWIvY2FwdHVyZS9uYXRpdmVDb3ZlcmFnZS5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEVuZ2luZVJlYWRTb3VyY2VzLFxuICBOYXRpdmVDYXB0dXJlT2JzZXJ2YXRpb24sXG4gIE5hdGl2ZVJlYWRDYXB0dXJlTm90ZSxcbiAgU291cmNlTGltaXRhdGlvbixcbn0gZnJvbSAnLi9saWIvY2FwdHVyZS9yZWFkU291cmNlcy5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIFNvdXJjZUV4ZWN1dGlvbk93bmVyc2hpcCxcbiAgU291cmNlT3duZXJzaGlwR2FwLFxuICBTb3VyY2VPd25lcnNoaXBXaXRuZXNzLFxufSBmcm9tICcuL2xpYi9jYXB0dXJlL3NvdXJjZU93bmVyc2hpcEZvcm1hdC5qcyc7XG5leHBvcnQgeyBzdHJpbmdpZnlTbmFwc2hvdCB9IGZyb20gJy4vbGliL3J1bm5lci9zdHJpbmdpZnlTbmFwc2hvdC5qcyc7XG4iXX0=
@@ -1,9 +1,13 @@
1
1
  /** @internal Fixed diagnostic only; never carries source values, paths or adapter errors. */
2
2
  export declare class HistoryDataError extends Error {
3
- readonly code: 'too-large' | 'invalid-data';
4
- constructor(code: 'too-large' | 'invalid-data');
3
+ readonly code: 'too-large' | 'invalid-data' | 'source-validation-limit';
4
+ constructor(code: 'too-large' | 'invalid-data' | 'source-validation-limit');
5
5
  }
6
+ /** Fixed boundary reasons; no untrusted error text leaves the engine. */
7
+ export declare function historyFailureReason(error: unknown, boundary: 'evidence' | 'history'): string;
6
8
  /** @internal Copy bounded inert JSON data without invoking accessors, toJSON or application coercion. */
7
9
  export declare function copyHistoryData(value: unknown, maxBytes: number, onOmitted?: (path: readonly string[]) => void): unknown;
8
10
  /** @internal Integrity of this JSON representation, not a value fingerprint or an authenticity signature. */
9
11
  export declare function historyDigest(value: unknown): Promise<string>;
12
+ /** One field order for both sides of the evidence digest; optional source/absence fields cannot drift. */
13
+ export declare function historyEvidence(value: Record<string, unknown>): Record<string, unknown>;
@@ -6,6 +6,16 @@ export class HistoryDataError extends Error {
6
6
  this.code = code;
7
7
  }
8
8
  }
9
+ /** Fixed boundary reasons; no untrusted error text leaves the engine. */
10
+ export function historyFailureReason(error, boundary) {
11
+ if (error instanceof HistoryDataError) {
12
+ if (error.code === 'source-validation-limit')
13
+ return 'source-validation-limit';
14
+ if (error.code === 'too-large')
15
+ return `${boundary}-too-large`;
16
+ }
17
+ return `${boundary}-refused`;
18
+ }
9
19
  /** @internal Copy bounded inert JSON data without invoking accessors, toJSON or application coercion. */
10
20
  export function copyHistoryData(value, maxBytes, onOmitted) {
11
21
  let bytes = 0;
@@ -76,4 +86,11 @@ export async function historyDigest(value) {
76
86
  const digest = await globalThis.crypto.subtle.digest('SHA-256', bytes);
77
87
  return Array.from(new Uint8Array(digest), (n) => n.toString(16).padStart(2, '0')).join('');
78
88
  }
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeURhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvaGlzdG9yeURhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkZBQTZGO0FBQzdGLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxLQUFLO0lBQ3BCO0lBQXJCLFlBQXFCLElBQWtDO1FBQ3JELEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUQ3RSxTQUFJLEdBQUosSUFBSSxDQUE4QjtJQUV2RCxDQUFDO0NBQ0Y7QUFFRCx5R0FBeUc7QUFDekcsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsS0FBYyxFQUNkLFFBQWdCLEVBQ2hCLFNBQTZDO0lBRTdDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNkLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUNkLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUNsQyxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQVksRUFBUSxFQUFFO1FBQ3BDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLEdBQUcsS0FBSztZQUFFLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1RSxLQUFLLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDckMsSUFBSSxLQUFLLEdBQUcsUUFBUTtZQUFFLE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoRSxDQUFDLENBQUM7SUFDRixNQUFNLElBQUksR0FBRyxDQUFDLElBQWEsRUFBRSxLQUFhLEVBQUUsSUFBYyxFQUFXLEVBQUU7UUFDckUsSUFBSSxFQUFFLEtBQUssR0FBRyxP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Q0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAaW50ZXJuYWwgRml4ZWQgZGlhZ25vc3RpYyBvbmx5OyBuZXZlciBjYXJyaWVzIHNvdXJjZSB2YWx1ZXMsIHBhdGhzIG9yIGFkYXB0ZXIgZXJyb3JzLiAqL1xuZXhwb3J0IGNsYXNzIEhpc3RvcnlEYXRhRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvZGU6ICd0b28tbGFyZ2UnIHwgJ2ludmFsaWQtZGF0YScpIHtcbiAgICBzdXBlcihjb2RlID09PSAndG9vLWxhcmdlJyA/ICdDYXB0dXJlIGhpc3RvcnkgZGF0YSB0b28gbGFyZ2UnIDogJ0NhcHR1cmUgaGlzdG9yeSBkYXRhIHJlZnVzZWQnKTtcbiAgfVxufVxuXG4vKiogQGludGVybmFsIENvcHkgYm91bmRlZCBpbmVydCBKU09OIGRhdGEgd2l0aG91dCBpbnZva2luZyBhY2Nlc3NvcnMsIHRvSlNPTiBvciBhcHBsaWNhdGlvbiBjb2VyY2lvbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb3B5SGlzdG9yeURhdGEoXG4gIHZhbHVlOiB1bmtub3duLFxuICBtYXhCeXRlczogbnVtYmVyLFxuICBvbk9taXR0ZWQ/OiAocGF0aDogcmVhZG9ubHkgc3RyaW5nW10pID0+IHZvaWQsXG4pOiB1bmtub3duIHtcbiAgbGV0IGJ5dGVzID0gMDtcbiAgbGV0IG5vZGVzID0gMDtcbiAgY29uc3QgYW5jZXN0b3JzID0gbmV3IFNldDxvYmplY3Q+KCk7XG4gIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgY29uc3QgY2hhcmdlID0gKHRleHQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIGlmICh0ZXh0Lmxlbmd0aCA+IG1heEJ5dGVzIC0gYnl0ZXMpIHRocm93IG5ldyBIaXN0b3J5RGF0YUVycm9yKCd0b28tbGFyZ2UnKTtcbiAgICBieXRlcyArPSBlbmNvZGVyLmVuY29kZSh0ZXh0KS5sZW5ndGg7XG4gICAgaWYgKGJ5dGVzID4gbWF4Qnl0ZXMpIHRocm93IG5ldyBIaXN0b3J5RGF0YUVycm9yKCd0b28tbGFyZ2UnKTtcbiAgfTtcbiAgY29uc3QgY29weSA9IChpdGVtOiB1bmtub3duLCBkZXB0aDogbnVtYmVyLCBwYXRoOiBzdHJpbmdbXSk6IHVua25vd24gPT4ge1xuICAgIGlmICgrK25vZGVzID4gMTAwXzAwMCB8fCBkZXB0aCA+IDI1NikgdGhyb3cgbmV3IEhpc3RvcnlEYXRhRXJyb3IoJ2ludmFsaWQtZGF0YScpO1xuICAgIGlmIChpdGVtID09PSBudWxsIHx8IHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgaXRlbSA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnbnVtYmVyJyAmJiAoIU51bWJlci5pc0Zpbml0ZShpdGVtKSB8fCBPYmplY3QuaXMoaXRlbSwgLTApKSlcbiAgICAgICAgdGhyb3cgbmV3IEhpc3RvcnlEYXRhRXJyb3IoJ2ludmFsaWQtZGF0YScpO1xuICAgICAgY2hhcmdlKEpTT04uc3RyaW5naWZ5KGl0ZW0pKTtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgICBpZiAoIWl0ZW0gfHwgdHlwZW9mIGl0ZW0gIT09ICdvYmplY3QnIHx8IGFuY2VzdG9ycy5oYXMoaXRlbSkpIHRocm93IG5ldyBIaXN0b3J5RGF0YUVycm9yKCdpbnZhbGlkLWRhdGEnKTtcbiAgICBjb25zdCBhcnJheSA9IEFycmF5LmlzQXJyYXkoaXRlbSk7XG4gICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihpdGVtKSAhPT0gKGFycmF5ID8gQXJyYXkucHJvdG90eXBlIDogT2JqZWN0LnByb3RvdHlwZSkpXG4gICAgICB0aHJvdyBuZXcgSGlzdG9yeURhdGFFcnJvcignaW52YWxpZC1kYXRhJyk7XG4gICAgYW5jZXN0b3JzLmFkZChpdGVtKTtcbiAgICBjaGFyZ2UoYXJyYXkgPyAnW10nIDogJ3t9Jyk7XG4gICAgY29uc3Qgb3V0cHV0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVua25vd25bXSA9IGFycmF5ID8gW10gOiB7fTtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaXRlbSk7XG4gICAgaWYgKGtleXMubGVuZ3RoID4gMTAwXzAwMCAtIG5vZGVzKSB0aHJvdyBuZXcgSGlzdG9yeURhdGFFcnJvcignaW52YWxpZC1kYXRhJyk7XG4gICAgLy8gQXJyYXlzIG11c3QgYmUgZGVuc2UgSlNPTiBhcnJheXMgd2l0aG91dCBleHRyYSBwcm9wZXJ0aWVzLiBObyBzaWxlbnQgZHJvcHBpbmcgb2YgaG9sZXMgb3IgZXhwYW5kb3MuXG4gICAgaWYgKGFycmF5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXRlbSwgJ2xlbmd0aCcpPy52YWx1ZSAhPT0ga2V5cy5sZW5ndGgpXG4gICAgICB0aHJvdyBuZXcgSGlzdG9yeURhdGFFcnJvcignaW52YWxpZC1kYXRhJyk7XG4gICAgbGV0IHdyaXR0ZW4gPSAwO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdGVtLCBrZXkpO1xuICAgICAgaWYgKCFwcm9wZXJ0eSB8fCAhT2JqZWN0Lmhhc093bihwcm9wZXJ0eSwgJ3ZhbHVlJykpIHRocm93IG5ldyBIaXN0b3J5RGF0YUVycm9yKCdpbnZhbGlkLWRhdGEnKTtcbiAgICAgIGlmIChhcnJheSAmJiBrZXkgIT09IFN0cmluZyh3cml0dGVuKSkgdGhyb3cgbmV3IEhpc3RvcnlEYXRhRXJyb3IoJ2ludmFsaWQtZGF0YScpO1xuICAgICAgLy8gT3JkaW5hcnkgSlNPTiBvYmplY3Qgb21pc3Npb24uIEFycmF5cy9yb290IHVuZGVmaW5lZCByZW1haW4gcmVmdXNlZDsgbm8gc25hcHNob3QtZmllbGQgYWxsb3ctbGlzdC5cbiAgICAgIGlmIChwcm9wZXJ0eS52YWx1ZSA9PT0gdW5kZWZpbmVkICYmICFhcnJheSkge1xuICAgICAgICBvbk9taXR0ZWQ/LihbLi4ucGF0aCwga2V5XSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHdyaXR0ZW4rKykgY2hhcmdlKCcsJyk7XG4gICAgICBpZiAoIWFycmF5KSBjaGFyZ2UoSlNPTi5zdHJpbmdpZnkoa2V5KSArICc6Jyk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob3V0cHV0LCBrZXksIHtcbiAgICAgICAgdmFsdWU6IGNvcHkocHJvcGVydHkudmFsdWUsIGRlcHRoICsgMSwgWy4uLnBhdGgsIGtleV0pLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGFuY2VzdG9ycy5kZWxldGUoaXRlbSk7XG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUob3V0cHV0KTtcbiAgfTtcbiAgcmV0dXJuIGNvcHkodmFsdWUsIDAsIFtdKTtcbn1cblxuLyoqIEBpbnRlcm5hbCBJbnRlZ3JpdHkgb2YgdGhpcyBKU09OIHJlcHJlc2VudGF0aW9uLCBub3QgYSB2YWx1ZSBmaW5nZXJwcmludCBvciBhbiBhdXRoZW50aWNpdHkgc2lnbmF0dXJlLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhpc3RvcnlEaWdlc3QodmFsdWU6IHVua25vd24pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBieXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICBjb25zdCBkaWdlc3QgPSBhd2FpdCBnbG9iYWxUaGlzLmNyeXB0by5zdWJ0bGUuZGlnZXN0KCdTSEEtMjU2JywgYnl0ZXMpO1xuICByZXR1cm4gQXJyYXkuZnJvbShuZXcgVWludDhBcnJheShkaWdlc3QpLCAobikgPT4gbi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyk7XG59XG4iXX0=
89
+ /** One field order for both sides of the evidence digest; optional source/absence fields cannot drift. */
90
+ export function historyEvidence(value) {
91
+ const fields = ['capture', 'executionTree', 'recorders', 'readSources', 'absent'];
92
+ if (Object.keys(value).some((key) => key !== 'target' && !fields.includes(key)))
93
+ throw new HistoryDataError('invalid-data');
94
+ return Object.fromEntries(fields.filter((key) => Object.hasOwn(value, key)).map((key) => [key, value[key]]));
95
+ }
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeURhdGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvaGlzdG9yeURhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNkZBQTZGO0FBQzdGLE1BQU0sT0FBTyxnQkFBaUIsU0FBUSxLQUFLO0lBQ3BCO0lBQXJCLFlBQXFCLElBQThEO1FBQ2pGLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUQ3RSxTQUFJLEdBQUosSUFBSSxDQUEwRDtJQUVuRixDQUFDO0NBQ0Y7QUFFRCx5RUFBeUU7QUFDekUsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEtBQWMsRUFBRSxRQUFnQztJQUNuRixJQUFJLEtBQUssWUFBWSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RDLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyx5QkFBeUI7WUFBRSxPQUFPLHlCQUF5QixDQUFDO1FBQy9FLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXO1lBQUUsT0FBTyxHQUFHLFFBQVEsWUFBWSxDQUFDO0lBQ2pFLENBQUM7SUFDRCxPQUFPLEdBQUcsUUFBUSxVQUFVLENBQUM7QUFDL0IsQ0FBQztBQUVELHlHQUF5RztBQUN6RyxNQUFNLFVBQVUsZUFBZSxDQUM3QixLQUFjLEVBQ2QsUUFBZ0IsRUFDaEIsU0FBNkM7SUFFN0MsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUNwQyxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBWSxFQUFRLEVBQUU7UUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsR0FBRyxLQUFLO1lB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b25seTsgbmV2ZXIgY2FycmllcyBzb3VyY2UgdmFsdWVzLCBwYXRocyBvciBhZGFwdGVyIGVycm9ycy4gKi9cbmV4cG9ydCBjbGFzcyBIaXN0b3J5RGF0YUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb2RlOiAndG9vLWxhcmdlJyB8ICdpbnZhbGlkLWRhdGEnIHwgJ3NvdXJjZS12YWxpZGF0aW9uLWxpbWl0Jykge1xuICAgIHN1cGVyKGNvZGUgPT09ICd0b28tbGFyZ2UnID8gJ0NhcHR1cmUgaGlzdG9yeSBkYXRhIHRvbyBsYXJnZScgOiAnQ2FwdHVyZSBoaXN0b3J5IGRhdGEgcmVmdXNlZCcpO1xuICB9XG59XG5cbi8qKiBGaXhlZCBib3VuZGFyeSByZWFzb25zOyBubyB1bnRydXN0ZWQgZXJyb3IgdGV4dCBsZWF2ZXMgdGhlIGVuZ2luZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaXN0b3J5RmFpbHVyZVJlYXNvbihlcnJvcjogdW5rbm93biwgYm91bmRhcnk6ICdldmlkZW5jZScgfCAnaGlzdG9yeScpOiBzdHJpbmcge1xuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIaXN0b3J5RGF0YUVycm9yKSB7XG4gICAgaWYgKGVycm9yLmNvZGUgPT09ICdzb3VyY2UtdmFsaWRhdGlvbi1saW1pdCcpIHJldHVybiAnc291cmNlLXZhbGlkYXRpb24tbGltaXQnO1xuICAgIGlmIChlcnJvci5jb2RlID09PSAndG9vLWxhcmdlJykgcmV0dXJuIGAke2JvdW5kYXJ5fS10b28tbGFyZ2VgO1xuICB9XG4gIHJldHVybiBgJHtib3VuZGFyeX0tcmVmdXNlZGA7XG59XG5cbi8qKiBAaW50ZXJuYWwgQ29weSBib3VuZGVkIGluZXJ0IEpTT04gZGF0YSB3aXRob3V0IGludm9raW5nIGFjY2Vzc29ycywgdG9KU09OIG9yIGFwcGxpY2F0aW9uIGNvZXJjaW9uLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlIaXN0b3J5RGF0YShcbiAgdmFsdWU6IHVua25vd24sXG4gIG1heEJ5dGVzOiBudW1iZXIsXG4gIG9uT21pdHRlZD86IChwYXRoOiByZWFkb25seSBzdHJpbmdbXSkgPT4gdm9pZCxcbik6IHVua25vd24ge1xuICBsZXQgYnl0ZXMgPSAwO1xuICBsZXQgbm9kZXMgPSAwO1xuICBjb25zdCBhbmNlc3RvcnMgPSBuZXcgU2V0PG9iamVjdD4oKTtcbiAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICBjb25zdCBjaGFyZ2UgPSAodGV4dDogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgaWYgKHRleHQubGVuZ3RoID4gbWF4Qnl0ZXMgLSBieXRlcykgdGhyb3cgbmV3IEhpc3RvcnlEYXRhRXJyb3IoJ3Rvby1sYXJnZScpO1xuICAgIGJ5dGVzICs9IGVuY29kZXIuZW5jb2RlKHRleHQpLmxlbmd0aDtcbiAgICBpZiAoYnl0ZXMgPiBtYXhCeXRlcykgdGhyb3cgbmV3IEhpc3RvcnlEYXRhRXJyb3IoJ3Rvby1sYXJnZScpO1xuICB9O1xuICBjb25zdCBjb3B5ID0gKGl0ZW06IHVua25vd24sIGRlcHRoOiBudW1iZXIsIHBhdGg6IHN0cmluZ1tdKTogdW5rbm93biA9PiB7XG4gICAgaWYgKCsrbm9kZXMgPiAxMDBfMDAwIHx8IGRlcHRoID4gMjU2KSB0aHJvdyBuZXcgSGlzdG9yeURhdGFFcnJvcignaW52YWxpZC1kYXRhJyk7XG4gICAgaWYgKGl0ZW0gPT09IG51bGwgfHwgdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBpdGVtID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGl0ZW0gPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdudW1iZXInICYmICghTnVtYmVyLmlzRmluaXRlKGl0ZW0pIHx8IE9iamVjdC5pcyhpdGVtLCAtMCkpKVxuICAgICAgICB0aHJvdyBuZXcgSGlzdG9yeURhdGFFcnJvcignaW52YWxpZC1kYXRhJyk7XG4gICAgICBjaGFyZ2UoSlNPTi5zdHJpbmdpZnkoaXRlbSkpO1xuICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuICAgIGlmICghaXRlbSB8fCB0eXBlb2YgaXRlbSAhPT0gJ29iamVjdCcgfHwgYW5jZXN0b3JzLmhhcyhpdGVtKSkgdGhyb3cgbmV3IEhpc3RvcnlEYXRhRXJyb3IoJ2ludmFsaWQtZGF0YScpO1xuICAgIGNvbnN0IGFycmF5ID0gQXJyYXkuaXNBcnJheShpdGVtKTtcbiAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKGl0ZW0pICE9PSAoYXJyYXkgPyBBcnJheS5wcm90b3R5cGUgOiBPYmplY3QucHJvdG90eXBlKSlcbiAgICAgIHRocm93IG5ldyBIaXN0b3J5RGF0YUVycm9yKCdpbnZhbGlkLWRhdGEnKTtcbiAgICBhbmNlc3RvcnMuYWRkKGl0ZW0pO1xuICAgIGNoYXJnZShhcnJheSA/ICdbXScgOiAne30nKTtcbiAgICBjb25zdCBvdXRwdXQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5rbm93bltdID0gYXJyYXkgPyBbXSA6IHt9O1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpdGVtKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPiAxMDBfMDAwIC0gbm9kZXMpIHRocm93IG5ldyBIaXN0b3J5RGF0YUVycm9yKCdpbnZhbGlkLWRhdGEnKTtcbiAgICAvLyBBcnJheXMgbXVzdCBiZSBkZW5zZSBKU09OIGFycmF5cyB3aXRob3V0IGV4dHJhIHByb3BlcnRpZXMuIE5vIHNpbGVudCBkcm9wcGluZyBvZiBob2xlcyBvciBleHBhbmRvcy5cbiAgICBpZiAoYXJyYXkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdGVtLCAnbGVuZ3RoJyk/LnZhbHVlICE9PSBrZXlzLmxlbmd0aClcbiAgICAgIHRocm93IG5ldyBIaXN0b3J5RGF0YUVycm9yKCdpbnZhbGlkLWRhdGEnKTtcbiAgICBsZXQgd3JpdHRlbiA9IDA7XG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0ZW0sIGtleSk7XG4gICAgICBpZiAoIXByb3BlcnR5IHx8ICFPYmplY3QuaGFzT3duKHByb3BlcnR5LCAndmFsdWUnKSkgdGhyb3cgbmV3IEhpc3RvcnlEYXRhRXJyb3IoJ2ludmFsaWQtZGF0YScpO1xuICAgICAgaWYgKGFycmF5ICYmIGtleSAhPT0gU3RyaW5nKHdyaXR0ZW4pKSB0aHJvdyBuZXcgSGlzdG9yeURhdGFFcnJvcignaW52YWxpZC1kYXRhJyk7XG4gICAgICAvLyBPcmRpbmFyeSBKU09OIG9iamVjdCBvbWlzc2lvbi4gQXJyYXlzL3Jvb3QgdW5kZWZpbmVkIHJlbWFpbiByZWZ1c2VkOyBubyBzbmFwc2hvdC1maWVsZCBhbGxvdy1saXN0LlxuICAgICAgaWYgKHByb3BlcnR5LnZhbHVlID09PSB1bmRlZmluZWQgJiYgIWFycmF5KSB7XG4gICAgICAgIG9uT21pdHRlZD8uKFsuLi5wYXRoLCBrZXldKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAod3JpdHRlbisrKSBjaGFyZ2UoJywnKTtcbiAgICAgIGlmICghYXJyYXkpIGNoYXJnZShKU09OLnN0cmluZ2lmeShrZXkpICsgJzonKTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvdXRwdXQsIGtleSwge1xuICAgICAgICB2YWx1ZTogY29weShwcm9wZXJ0eS52YWx1ZSwgZGVwdGggKyAxLCBbLi4ucGF0aCwga2V5XSksXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG4gICAgYW5jZXN0b3JzLmRlbGV0ZShpdGVtKTtcbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShvdXRwdXQpO1xuICB9O1xuICByZXR1cm4gY29weSh2YWx1ZSwgMCwgW10pO1xufVxuXG4vKiogQGludGVybmFsIEludGVncml0eSBvZiB0aGlzIEpTT04gcmVwcmVzZW50YXRpb24sIG5vdCBhIHZhbHVlIGZpbmdlcnByaW50IG9yIGFuIGF1dGhlbnRpY2l0eSBzaWduYXR1cmUuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGlzdG9yeURpZ2VzdCh2YWx1ZTogdW5rbm93bik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSk7XG4gIGNvbnN0IGRpZ2VzdCA9IGF3YWl0IGdsb2JhbFRoaXMuY3J5cHRvLnN1YnRsZS5kaWdlc3QoJ1NIQS0yNTYnLCBieXRlcyk7XG4gIHJldHVybiBBcnJheS5mcm9tKG5ldyBVaW50OEFycmF5KGRpZ2VzdCksIChuKSA9PiBuLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpKS5qb2luKCcnKTtcbn1cblxuLyoqIE9uZSBmaWVsZCBvcmRlciBmb3IgYm90aCBzaWRlcyBvZiB0aGUgZXZpZGVuY2UgZGlnZXN0OyBvcHRpb25hbCBzb3VyY2UvYWJzZW5jZSBmaWVsZHMgY2Fubm90IGRyaWZ0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhpc3RvcnlFdmlkZW5jZSh2YWx1ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IGZpZWxkcyA9IFsnY2FwdHVyZScsICdleGVjdXRpb25UcmVlJywgJ3JlY29yZGVycycsICdyZWFkU291cmNlcycsICdhYnNlbnQnXTtcbiAgaWYgKE9iamVjdC5rZXlzKHZhbHVlKS5zb21lKChrZXkpID0+IGtleSAhPT0gJ3RhcmdldCcgJiYgIWZpZWxkcy5pbmNsdWRlcyhrZXkpKSlcbiAgICB0aHJvdyBuZXcgSGlzdG9yeURhdGFFcnJvcignaW52YWxpZC1kYXRhJyk7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoZmllbGRzLmZpbHRlcigoa2V5KSA9PiBPYmplY3QuaGFzT3duKHZhbHVlLCBrZXkpKS5tYXAoKGtleSkgPT4gW2tleSwgdmFsdWVba2V5XV0pKTtcbn1cbiJdfQ==
@@ -1,4 +1,4 @@
1
1
  import type { CaptureHistoryTarget } from './historyTypes.js';
2
- import type { NativeCaptureNote } from './nativeCoverage.js';
2
+ import type { NativeCaptureObservation } from './readSources.js';
3
3
  /** @internal Called only after the bounded inert-data copier. Retains native observations, not storage authority. */
4
- export declare function historyNote(value: unknown, target: CaptureHistoryTarget): NativeCaptureNote | undefined;
4
+ export declare function historyNote(value: unknown, target: CaptureHistoryTarget): NativeCaptureObservation | undefined;
@@ -1,11 +1,12 @@
1
- import { CAPTURE_BASE_LIMITATIONS } from './nativeCoverage.js';
2
- import { copyChannels, copyIdentity, copyLimitations, copyModes } from './noteShape.js';
1
+ import { CAPTURE_BASE_LIMITATIONS, CAPTURE_CHANNEL_STATUSES, isCaptureValue } from './nativeCoverage.js';
2
+ import { copyChannels, copyIdentity, copyLimitations, copyModes, copyObservedChannels, ownData } from './noteShape.js';
3
3
  /** @internal Called only after the bounded inert-data copier. Retains native observations, not storage authority. */
4
4
  export function historyNote(value, target) {
5
5
  if (!value || typeof value !== 'object')
6
6
  return undefined;
7
7
  const v = value;
8
- const identity = copyIdentity(v, true);
8
+ const version = ownData(v, 'version') === 2 ? 2 : 1;
9
+ const identity = copyIdentity(v, true, version);
9
10
  const limitations = copyLimitations(v.limitations);
10
11
  if (!identity ||
11
12
  JSON.stringify(identity) !== JSON.stringify(copyIdentity(target)) ||
@@ -16,9 +17,13 @@ export function historyNote(value, target) {
16
17
  !v.modes ||
17
18
  !v.channels ||
18
19
  !limitations ||
19
- !CAPTURE_BASE_LIMITATIONS.every((g) => limitations.includes(g)) ||
20
+ !CAPTURE_BASE_LIMITATIONS.filter((g) => version === 1 || g !== 'read-sources-not-collected').every((g) => limitations.includes(g)) ||
20
21
  !copyModes(v.modes, true) ||
21
- !copyChannels(v.channels, true))
22
+ !(version === 1 ? copyChannels(v.channels, true) : copyObservedChannels(v.channels)) ||
23
+ (version === 2 &&
24
+ (!isCaptureValue(v.channels.readSources, CAPTURE_CHANNEL_STATUSES) ||
25
+ Object.keys(v.channels).length !== 5 ||
26
+ limitations.includes('read-sources-not-collected'))))
22
27
  return undefined;
23
28
  // Reject extra metadata rather than handing arbitrary stored fields out as native facts.
24
29
  if (Object.keys(v).some((k) => ![
@@ -49,4 +54,4 @@ export function historyNote(value, target) {
49
54
  return undefined;
50
55
  return v;
51
56
  }
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeU5vdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvaGlzdG9yeU5vdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhGLHFIQUFxSDtBQUNySCxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQWMsRUFBRSxNQUE0QjtJQUN0RSxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUMxRCxNQUFNLENBQUMsR0FBRyxLQUEwQixDQUFDO0lBQ3JDLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkMsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNuRCxJQUNFLENBQUMsUUFBUTtRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLEtBQUssS0FBSyxVQUFVO1FBQ3RCLENBQUMsQ0FBQyxXQUFXLEtBQUssYUFBYTtRQUMvQixDQUFDLENBQUMsQ0FBQyxRQUFRO1FBQ1gsQ0FBQyxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQyxLQUFLO1FBQ1IsQ0FBQyxDQUFDLENBQUMsUUFBUTtRQUNYLENBQUMsV0FBVztRQUNaLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDO1FBQ3pCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO1FBRS9CLE9BQU8sU0FBUyxDQUFDO0lBQ25CLHlGQUF5RjtJQUN6RixJQUNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNqQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0osQ0FBQztRQUNDLFNBQVM7UUFDVCxPQUFPO1FBQ1AsT0FBTztRQUNQLFlBQVk7UUFDWixTQUFTO1FBQ1QsVUFBVTtRQUNWLE9BQU87UUFDUCxVQUFVO1FBQ1YsYUFBYTtRQUNiLGFBQWE7S0FDZCxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FDaEI7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUNuQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssU0FBUyxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDN0YsSUFDRSxPQUFPO1FBQ1AsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNuRCxDQUFDLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDNUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxVQUFVLElBQUksQ0FBQyxLQUFLLE9BQU8sQ0FBQztZQUNuRSxDQUFDLE9BQU8sQ0FBQyxLQUFLO2dCQUNaLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssT0FBTyxJQUFJLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQztvQkFDOUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEtBQUs7b0JBQy9CLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLEtBQUssUUFBUTtvQkFDaEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFbkQsT0FBTyxTQUFTLENBQUM7SUFDbkIsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDYXB0dXJlSGlzdG9yeVRhcmdldCB9IGZyb20gJy4vaGlzdG9yeVR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgTmF0aXZlQ2FwdHVyZU5vdGUgfSBmcm9tICcuL25hdGl2ZUNvdmVyYWdlLmpzJztcbmltcG9ydCB7IENBUFRVUkVfQkFTRV9MSU1JVEFUSU9OUyB9IGZyb20gJy4vbmF0aXZlQ292ZXJhZ2UuanMnO1xuaW1wb3J0IHsgY29weUNoYW5uZWxzLCBjb3B5SWRlbnRpdHksIGNvcHlMaW1pdGF0aW9ucywgY29weU1vZGVzIH0gZnJvbSAnLi9ub3RlU2hhcGUuanMnO1xuXG4vKiogQGludGVybmFsIENhbGxlZCBvbmx5IGFmdGVyIHRoZSBib3VuZGVkIGluZXJ0LWRhdGEgY29waWVyLiBSZXRhaW5zIG5hdGl2ZSBvYnNlcnZhdGlvbnMsIG5vdCBzdG9yYWdlIGF1dGhvcml0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaXN0b3J5Tm90ZSh2YWx1ZTogdW5rbm93biwgdGFyZ2V0OiBDYXB0dXJlSGlzdG9yeVRhcmdldCk6IE5hdGl2ZUNhcHR1cmVOb3RlIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCB2ID0gdmFsdWUgYXMgTmF0aXZlQ2FwdHVyZU5vdGU7XG4gIGNvbnN0IGlkZW50aXR5ID0gY29weUlkZW50aXR5KHYsIHRydWUpO1xuICBjb25zdCBsaW1pdGF0aW9ucyA9IGNvcHlMaW1pdGF0aW9ucyh2LmxpbWl0YXRpb25zKTtcbiAgaWYgKFxuICAgICFpZGVudGl0eSB8fFxuICAgIEpTT04uc3RyaW5naWZ5KGlkZW50aXR5KSAhPT0gSlNPTi5zdHJpbmdpZnkoY29weUlkZW50aXR5KHRhcmdldCkpIHx8XG4gICAgdi5zY29wZSAhPT0gJ3Jvb3QtbG9nJyB8fFxuICAgIHYucGVyc2lzdGVuY2UgIT09ICdtZW1vcnktb25seScgfHxcbiAgICAhdi5ib3VuZGFyeSB8fFxuICAgICFbJ2NvbXBsZXRlZCcsICdmYWlsZWQnLCAncGF1c2VkJywgJ2NhbmNlbGxlZCddLmluY2x1ZGVzKHYuYm91bmRhcnkuc3RhdHVzKSB8fFxuICAgICF2Lm1vZGVzIHx8XG4gICAgIXYuY2hhbm5lbHMgfHxcbiAgICAhbGltaXRhdGlvbnMgfHxcbiAgICAhQ0FQVFVSRV9CQVNFX0xJTUlUQVRJT05TLmV2ZXJ5KChnKSA9PiBsaW1pdGF0aW9ucy5pbmNsdWRlcyhnKSkgfHxcbiAgICAhY29weU1vZGVzKHYubW9kZXMsIHRydWUpIHx8XG4gICAgIWNvcHlDaGFubmVscyh2LmNoYW5uZWxzLCB0cnVlKVxuICApXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgLy8gUmVqZWN0IGV4dHJhIG1ldGFkYXRhIHJhdGhlciB0aGFuIGhhbmRpbmcgYXJiaXRyYXJ5IHN0b3JlZCBmaWVsZHMgb3V0IGFzIG5hdGl2ZSBmYWN0cy5cbiAgaWYgKFxuICAgIE9iamVjdC5rZXlzKHYpLnNvbWUoXG4gICAgICAoaykgPT5cbiAgICAgICAgIVtcbiAgICAgICAgICAndmVyc2lvbicsXG4gICAgICAgICAgJ3J1bklkJyxcbiAgICAgICAgICAnc2NvcGUnLFxuICAgICAgICAgICdsb2dBZGRyZXNzJyxcbiAgICAgICAgICAnY29tbWl0cycsXG4gICAgICAgICAgJ2JvdW5kYXJ5JyxcbiAgICAgICAgICAnbW9kZXMnLFxuICAgICAgICAgICdjaGFubmVscycsXG4gICAgICAgICAgJ3BlcnNpc3RlbmNlJyxcbiAgICAgICAgICAnbGltaXRhdGlvbnMnLFxuICAgICAgICBdLmluY2x1ZGVzKGspLFxuICAgIClcbiAgKVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGZhaWx1cmUgPSB2LmJvdW5kYXJ5LmZhaWx1cmU7XG4gIGlmIChPYmplY3Qua2V5cyh2LmJvdW5kYXJ5KS5zb21lKChrKSA9PiBrICE9PSAnc3RhdHVzJyAmJiBrICE9PSAnZmFpbHVyZScpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAoXG4gICAgZmFpbHVyZSAmJlxuICAgICghWydmYWlsZWQnLCAnY2FuY2VsbGVkJ10uaW5jbHVkZXModi5ib3VuZGFyeS5zdGF0dXMpIHx8XG4gICAgICAhWyd0aW1lb3V0JywgJ3JhdGUtbGltaXRlZCcsICdzZXJ2ZXInLCAnbmV0d29yaycsICdhdXRoJywgJ3Blcm1hbmVudCcsICd1bmtub3duJ10uaW5jbHVkZXMoZmFpbHVyZS5jYXRlZ29yeSkgfHxcbiAgICAgIE9iamVjdC5rZXlzKGZhaWx1cmUpLnNvbWUoKGspID0+IGsgIT09ICdjYXRlZ29yeScgJiYgayAhPT0gJ3N0YWdlJykgfHxcbiAgICAgIChmYWlsdXJlLnN0YWdlICYmXG4gICAgICAgIChPYmplY3Qua2V5cyhmYWlsdXJlLnN0YWdlKS5zb21lKChrKSA9PiBrICE9PSAncnVuSWQnICYmIGsgIT09ICdydW50aW1lU3RhZ2VJZCcpIHx8XG4gICAgICAgICAgZmFpbHVyZS5zdGFnZS5ydW5JZCAhPT0gdi5ydW5JZCB8fFxuICAgICAgICAgIHR5cGVvZiBmYWlsdXJlLnN0YWdlLnJ1bnRpbWVTdGFnZUlkICE9PSAnc3RyaW5nJyB8fFxuICAgICAgICAgIGZhaWx1cmUuc3RhZ2UucnVudGltZVN0YWdlSWQubGVuZ3RoID4gMTAyNCkpKVxuICApXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHY7XG59XG4iXX0=
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeU5vdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NhcHR1cmUvaGlzdG9yeU5vdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHdCQUF3QixFQUFFLHdCQUF3QixFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pHLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdkgscUhBQXFIO0FBQ3JILE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBYyxFQUFFLE1BQTRCO0lBQ3RFLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzFELE1BQU0sQ0FBQyxHQUFHLEtBQWlDLENBQUM7SUFDNUMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hELE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkQsSUFDRSxDQUFDLFFBQVE7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxLQUFLLEtBQUssVUFBVTtRQUN0QixDQUFDLENBQUMsV0FBVyxLQUFLLGFBQWE7UUFDL0IsQ0FBQyxDQUFDLENBQUMsUUFBUTtRQUNYLENBQUMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxF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S0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVuRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixPQUFPLENBQUMsQ0FBQztBQUNYLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENhcHR1cmVIaXN0b3J5VGFyZ2V0IH0gZnJvbSAnLi9oaXN0b3J5VHlwZXMuanMnO1xuaW1wb3J0IHsgQ0FQVFVSRV9CQVNFX0xJTUlUQVRJT05TLCBDQVBUVVJFX0NIQU5ORUxfU1RBVFVTRVMsIGlzQ2FwdHVyZVZhbHVlIH0gZnJvbSAnLi9uYXRpdmVDb3ZlcmFnZS5qcyc7XG5pbXBvcnQgeyBjb3B5Q2hhbm5lbHMsIGNvcHlJZGVudGl0eSwgY29weUxpbWl0YXRpb25zLCBjb3B5TW9kZXMsIGNvcHlPYnNlcnZlZENoYW5uZWxzLCBvd25EYXRhIH0gZnJvbSAnLi9ub3RlU2hhcGUuanMnO1xuaW1wb3J0IHR5cGUgeyBOYXRpdmVDYXB0dXJlT2JzZXJ2YXRpb24gfSBmcm9tICcuL3JlYWRTb3VyY2VzLmpzJztcblxuLyoqIEBpbnRlcm5hbCBDYWxsZWQgb25seSBhZnRlciB0aGUgYm91bmRlZCBpbmVydC1kYXRhIGNvcGllci4gUmV0YWlucyBuYXRpdmUgb2JzZXJ2YXRpb25zLCBub3Qgc3RvcmFnZSBhdXRob3JpdHkuICovXG5leHBvcnQgZnVuY3Rpb24gaGlzdG9yeU5vdGUodmFsdWU6IHVua25vd24sIHRhcmdldDogQ2FwdHVyZUhpc3RvcnlUYXJnZXQpOiBOYXRpdmVDYXB0dXJlT2JzZXJ2YXRpb24gfCB1bmRlZmluZWQge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHYgPSB2YWx1ZSBhcyBOYXRpdmVDYXB0dXJlT2JzZXJ2YXRpb247XG4gIGNvbnN0IHZlcnNpb24gPSBvd25EYXRhKHYsICd2ZXJzaW9uJykgPT09IDIgPyAyIDogMTtcbiAgY29uc3QgaWRlbnRpdHkgPSBjb3B5SWRlbnRpdHkodiwgdHJ1ZSwgdmVyc2lvbik7XG4gIGNvbnN0IGxpbWl0YXRpb25zID0gY29weUxpbWl0YXRpb25zKHYubGltaXRhdGlvbnMpO1xuICBpZiAoXG4gICAgIWlkZW50aXR5IHx8XG4gICAgSlNPTi5zdHJpbmdpZnkoaWRlbnRpdHkpICE9PSBKU09OLnN0cmluZ2lmeShjb3B5SWRlbnRpdHkodGFyZ2V0KSkgfHxcbiAgICB2LnNjb3BlICE9PSAncm9vdC1sb2cnIHx8XG4gICAgdi5wZXJzaXN0ZW5jZSAhPT0gJ21lbW9yeS1vbmx5JyB8fFxuICAgICF2LmJvdW5kYXJ5IHx8XG4gICAgIVsnY29tcGxldGVkJywgJ2ZhaWxlZCcsICdwYXVzZWQnLCAnY2FuY2VsbGVkJ10uaW5jbHVkZXModi5ib3VuZGFyeS5zdGF0dXMpIHx8XG4gICAgIXYubW9kZXMgfHxcbiAgICAhdi5jaGFubmVscyB8fFxuICAgICFsaW1pdGF0aW9ucyB8fFxuICAgICFDQVBUVVJFX0JBU0VfTElNSVRBVElPTlMuZmlsdGVyKChnKSA9PiB2ZXJzaW9uID09PSAxIHx8IGcgIT09ICdyZWFkLXNvdXJjZXMtbm90LWNvbGxlY3RlZCcpLmV2ZXJ5KChnKSA9PlxuICAgICAgbGltaXRhdGlvbnMuaW5jbHVkZXMoZyksXG4gICAgKSB8fFxuICAgICFjb3B5TW9kZXModi5tb2RlcywgdHJ1ZSkgfHxcbiAgICAhKHZlcnNpb24gPT09IDEgPyBjb3B5Q2hhbm5lbHModi5jaGFubmVscywgdHJ1ZSkgOiBjb3B5T2JzZXJ2ZWRDaGFubmVscyh2LmNoYW5uZWxzKSkgfHxcbiAgICAodmVyc2lvbiA9PT0gMiAmJlxuICAgICAgKCFpc0NhcHR1cmVWYWx1ZSh2LmNoYW5uZWxzLnJlYWRTb3VyY2VzLCBDQVBUVVJFX0NIQU5ORUxfU1RBVFVTRVMpIHx8XG4gICAgICAgIE9iamVjdC5rZXlzKHYuY2hhbm5lbHMpLmxlbmd0aCAhPT0gNSB8fFxuICAgICAgICBsaW1pdGF0aW9ucy5pbmNsdWRlcygncmVhZC1zb3VyY2VzLW5vdC1jb2xsZWN0ZWQnKSkpXG4gIClcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAvLyBSZWplY3QgZXh0cmEgbWV0YWRhdGEgcmF0aGVyIHRoYW4gaGFuZGluZyBhcmJpdHJhcnkgc3RvcmVkIGZpZWxkcyBvdXQgYXMgbmF0aXZlIGZhY3RzLlxuICBpZiAoXG4gICAgT2JqZWN0LmtleXModikuc29tZShcbiAgICAgIChrKSA9PlxuICAgICAgICAhW1xuICAgICAgICAgICd2ZXJzaW9uJyxcbiAgICAgICAgICAncnVuSWQnLFxuICAgICAgICAgICdzY29wZScsXG4gICAgICAgICAgJ2xvZ0FkZHJlc3MnLFxuICAgICAgICAgICdjb21taXRzJyxcbiAgICAgICAgICAnYm91bmRhcnknLFxuICAgICAgICAgICdtb2RlcycsXG4gICAgICAgICAgJ2NoYW5uZWxzJyxcbiAgICAgICAgICAncGVyc2lzdGVuY2UnLFxuICAgICAgICAgICdsaW1pdGF0aW9ucycsXG4gICAgICAgIF0uaW5jbHVkZXMoayksXG4gICAgKVxuICApXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgZmFpbHVyZSA9IHYuYm91bmRhcnkuZmFpbHVyZTtcbiAgaWYgKE9iamVjdC5rZXlzKHYuYm91bmRhcnkpLnNvbWUoKGspID0+IGsgIT09ICdzdGF0dXMnICYmIGsgIT09ICdmYWlsdXJlJykpIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChcbiAgICBmYWlsdXJlICYmXG4gICAgKCFbJ2ZhaWxlZCcsICdjYW5jZWxsZWQnXS5pbmNsdWRlcyh2LmJvdW5kYXJ5LnN0YXR1cykgfHxcbiAgICAgICFbJ3RpbWVvdXQnLCAncmF0ZS1saW1pdGVkJywgJ3NlcnZlcicsICduZXR3b3JrJywgJ2F1dGgnLCAncGVybWFuZW50JywgJ3Vua25vd24nXS5pbmNsdWRlcyhmYWlsdXJlLmNhdGVnb3J5KSB8fFxuICAgICAgT2JqZWN0LmtleXMoZmFpbHVyZSkuc29tZSgoaykgPT4gayAhPT0gJ2NhdGVnb3J5JyAmJiBrICE9PSAnc3RhZ2UnKSB8fFxuICAgICAgKGZhaWx1cmUuc3RhZ2UgJiZcbiAgICAgICAgKE9iamVjdC5rZXlzKGZhaWx1cmUuc3RhZ2UpLnNvbWUoKGspID0+IGsgIT09ICdydW5JZCcgJiYgayAhPT0gJ3J1bnRpbWVTdGFnZUlkJykgfHxcbiAgICAgICAgICBmYWlsdXJlLnN0YWdlLnJ1bklkICE9PSB2LnJ1bklkIHx8XG4gICAgICAgICAgdHlwZW9mIGZhaWx1cmUuc3RhZ2UucnVudGltZVN0YWdlSWQgIT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgZmFpbHVyZS5zdGFnZS5ydW50aW1lU3RhZ2VJZC5sZW5ndGggPiAxMDI0KSkpXG4gIClcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gdjtcbn1cbiJdfQ==
@@ -4,7 +4,7 @@ export interface CaptureHistoryTarget {
4
4
  readonly version: 1;
5
5
  readonly evidenceId: string;
6
6
  readonly runId: string;
7
- /** SHA-256 of the exact inert JSON evidence plus canonical commit log and served starting state. */
7
+ /** SHA-256 of the exact inert JSON evidence (including opted-in source metadata) plus canonical commit log and served starting state. */
8
8
  readonly digest: string;
9
9
  readonly logAddress: LogAddress;
10
10
  readonly commits: {
@@ -1,4 +1,4 @@
1
1
  /** @internal Opaque note names; Foottrace keeps them without interpreting engine metadata. */
2
2
  export const CAPTURE_HISTORY_NOTE = 'capture-history';
3
3
  export const CAPTURE_RECEIPT_NOTE = 'capture-receipt';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeVR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXB0dXJlL2hpc3RvcnlUeXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQ0EsOEZBQThGO0FBQzlGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGlCQUFpQixDQUFDO0FBQ3RELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBMb2dBZGRyZXNzIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuLyoqIEV4YWN0IHJvb3Qgc2VnbWVudCBhbmQgZXZpZGVuY2UgZW50cnkgYWNrbm93bGVkZ2VkIGJ5IGEgc3RvcmFnZSBhZGFwdGVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXB0dXJlSGlzdG9yeVRhcmdldCB7XG4gIHJlYWRvbmx5IHZlcnNpb246IDE7XG4gIHJlYWRvbmx5IGV2aWRlbmNlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcnVuSWQ6IHN0cmluZztcbiAgLyoqIFNIQS0yNTYgb2YgdGhlIGV4YWN0IGluZXJ0IEpTT04gZXZpZGVuY2UgcGx1cyBjYW5vbmljYWwgY29tbWl0IGxvZyBhbmQgc2VydmVkIHN0YXJ0aW5nIHN0YXRlLiAqL1xuICByZWFkb25seSBkaWdlc3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9nQWRkcmVzczogTG9nQWRkcmVzcztcbiAgcmVhZG9ubHkgY29tbWl0czogeyByZWFkb25seSBmcm9tOiBudW1iZXI7IHJlYWRvbmx5IHRvOiBudW1iZXIgfTtcbn1cblxuLyoqIEFkYXB0ZXIgYXNzZXJ0aW9uIGFib3V0IHRoZSBwcmVjZWRpbmcgZXZpZGVuY2UgYW5kIGVuZCBlbnRyeSwgbm90IGFib3V0IHRoaXMgcmVjZWlwdCdzIGRlbGl2ZXJ5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXB0dXJlSGlzdG9yeVJlY2VpcHQgZXh0ZW5kcyBDYXB0dXJlSGlzdG9yeVRhcmdldCB7XG4gIHJlYWRvbmx5IGR1cmFiaWxpdHk6ICdkdXJhYmxlJztcbn1cblxuLyoqIEV4cGxpY2l0IGhvc3Qtb3duZWQgZHVyYWJpbGl0eSBjYXBhYmlsaXR5LiBBIG5vcm1hbCBSZWNvcmRTaW5rLmZsdXNoIGlzIG5vdCB0aGlzIHByb21pc2UuICovXG5leHBvcnQgaW50ZXJmYWNlIENhcHR1cmVIaXN0b3J5T3B0aW9ucyB7XG4gIC8qKiBSZXNvbHZlIG9ubHkgYWZ0ZXIgdGhpcyB0YXJnZXQncyBldmlkZW5jZSwgY29tbWl0cyBhbmQgZW5kIGVudHJ5IGFyZSBkdXJhYmx5IHN0b3JlZCB0b2dldGhlci4gKi9cbiAgcmVhZG9ubHkgYWNrbm93bGVkZ2U6IChcbiAgICB0YXJnZXQ6IENhcHR1cmVIaXN0b3J5VGFyZ2V0LFxuICAgIGNvbnRleHQ6IHsgcmVhZG9ubHkgc2lnbmFsOiBBYm9ydFNpZ25hbCB9LFxuICApID0+IFByb21pc2U8Q2FwdHVyZUhpc3RvcnlSZWNlaXB0PjtcbiAgLyoqIE1heGltdW0gVVRGLTggYnl0ZXMgb2YgdGhlIGV2aWRlbmNlIHBheWxvYWQgYW5kIHRhcmdldC4gRGVmYXVsdCAxIE1pQiwgbWF4aW11bSA4IE1pQi4gKi9cbiAgcmVhZG9ubHkgbWF4Qnl0ZXM/OiBudW1iZXI7XG4gIC8qKiBUb3RhbCB0aW1lIGFsbG93ZWQgZm9yIGV2aWRlbmNlIGRlbGl2ZXJ5LCBhY2tub3dsZWRnZW1lbnQgYW5kIHJlY2VpcHQgZGVsaXZlcnkuIERlZmF1bHQgMTBzLCBtYXhpbXVtIDMwcy4gKi9cbiAgcmVhZG9ubHkgdGltZW91dE1zPzogbnVtYmVyO1xufVxuXG4vKiogUGVyc2lzdGVuY2UgcmVzdWx0IG9ubHkuIEFuIGFja25vd2xlZGdlZCBmYWlsZWQvcGF1c2VkIHByZWZpeCBpcyBub3QgYSBjb21wbGV0ZWQgYnVzaW5lc3Mgd29ya2Zsb3cuICovXG5leHBvcnQgdHlwZSBDYXB0dXJlSGlzdG9yeVN0YXR1cyA9XG4gIHwgeyByZWFkb25seSBzdGF0dXM6ICdhY2tub3dsZWRnZWQnIH1cbiAgfCB7IHJlYWRvbmx5IHN0YXR1czogJ3Vua25vd24nOyByZWFkb25seSByZWFzb246IHN0cmluZyB9O1xuXG4vKiogQGludGVybmFsIE9wYXF1ZSBub3RlIG5hbWVzOyBGb290dHJhY2Uga2VlcHMgdGhlbSB3aXRob3V0IGludGVycHJldGluZyBlbmdpbmUgbWV0YWRhdGEuICovXG5leHBvcnQgY29uc3QgQ0FQVFVSRV9ISVNUT1JZX05PVEUgPSAnY2FwdHVyZS1oaXN0b3J5JztcbmV4cG9ydCBjb25zdCBDQVBUVVJFX1JFQ0VJUFRfTk9URSA9ICdjYXB0dXJlLXJlY2VpcHQnO1xuIl19
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeVR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXB0dXJlL2hpc3RvcnlUeXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFvQ0EsOEZBQThGO0FBQzlGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGlCQUFpQixDQUFDO0FBQ3RELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBMb2dBZGRyZXNzIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuLyoqIEV4YWN0IHJvb3Qgc2VnbWVudCBhbmQgZXZpZGVuY2UgZW50cnkgYWNrbm93bGVkZ2VkIGJ5IGEgc3RvcmFnZSBhZGFwdGVyLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXB0dXJlSGlzdG9yeVRhcmdldCB7XG4gIHJlYWRvbmx5IHZlcnNpb246IDE7XG4gIHJlYWRvbmx5IGV2aWRlbmNlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcnVuSWQ6IHN0cmluZztcbiAgLyoqIFNIQS0yNTYgb2YgdGhlIGV4YWN0IGluZXJ0IEpTT04gZXZpZGVuY2UgKGluY2x1ZGluZyBvcHRlZC1pbiBzb3VyY2UgbWV0YWRhdGEpIHBsdXMgY2Fub25pY2FsIGNvbW1pdCBsb2cgYW5kIHNlcnZlZCBzdGFydGluZyBzdGF0ZS4gKi9cbiAgcmVhZG9ubHkgZGlnZXN0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxvZ0FkZHJlc3M6IExvZ0FkZHJlc3M7XG4gIHJlYWRvbmx5IGNvbW1pdHM6IHsgcmVhZG9ubHkgZnJvbTogbnVtYmVyOyByZWFkb25seSB0bzogbnVtYmVyIH07XG59XG5cbi8qKiBBZGFwdGVyIGFzc2VydGlvbiBhYm91dCB0aGUgcHJlY2VkaW5nIGV2aWRlbmNlIGFuZCBlbmQgZW50cnksIG5vdCBhYm91dCB0aGlzIHJlY2VpcHQncyBkZWxpdmVyeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwdHVyZUhpc3RvcnlSZWNlaXB0IGV4dGVuZHMgQ2FwdHVyZUhpc3RvcnlUYXJnZXQge1xuICByZWFkb25seSBkdXJhYmlsaXR5OiAnZHVyYWJsZSc7XG59XG5cbi8qKiBFeHBsaWNpdCBob3N0LW93bmVkIGR1cmFiaWxpdHkgY2FwYWJpbGl0eS4gQSBub3JtYWwgUmVjb3JkU2luay5mbHVzaCBpcyBub3QgdGhpcyBwcm9taXNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYXB0dXJlSGlzdG9yeU9wdGlvbnMge1xuICAvKiogUmVzb2x2ZSBvbmx5IGFmdGVyIHRoaXMgdGFyZ2V0J3MgZXZpZGVuY2UsIGNvbW1pdHMgYW5kIGVuZCBlbnRyeSBhcmUgZHVyYWJseSBzdG9yZWQgdG9nZXRoZXIuICovXG4gIHJlYWRvbmx5IGFja25vd2xlZGdlOiAoXG4gICAgdGFyZ2V0OiBDYXB0dXJlSGlzdG9yeVRhcmdldCxcbiAgICBjb250ZXh0OiB7IHJlYWRvbmx5IHNpZ25hbDogQWJvcnRTaWduYWwgfSxcbiAgKSA9PiBQcm9taXNlPENhcHR1cmVIaXN0b3J5UmVjZWlwdD47XG4gIC8qKiBNYXhpbXVtIFVURi04IGJ5dGVzIG9mIHRoZSBldmlkZW5jZSBwYXlsb2FkIGFuZCB0YXJnZXQuIERlZmF1bHQgMSBNaUIsIG1heGltdW0gOCBNaUIuICovXG4gIHJlYWRvbmx5IG1heEJ5dGVzPzogbnVtYmVyO1xuICAvKiogVG90YWwgdGltZSBhbGxvd2VkIGZvciBldmlkZW5jZSBkZWxpdmVyeSwgYWNrbm93bGVkZ2VtZW50IGFuZCByZWNlaXB0IGRlbGl2ZXJ5LiBEZWZhdWx0IDEwcywgbWF4aW11bSAzMHMuICovXG4gIHJlYWRvbmx5IHRpbWVvdXRNcz86IG51bWJlcjtcbn1cblxuLyoqIFBlcnNpc3RlbmNlIHJlc3VsdCBvbmx5LiBBbiBhY2tub3dsZWRnZWQgZmFpbGVkL3BhdXNlZCBwcmVmaXggaXMgbm90IGEgY29tcGxldGVkIGJ1c2luZXNzIHdvcmtmbG93LiAqL1xuZXhwb3J0IHR5cGUgQ2FwdHVyZUhpc3RvcnlTdGF0dXMgPVxuICB8IHsgcmVhZG9ubHkgc3RhdHVzOiAnYWNrbm93bGVkZ2VkJyB9XG4gIHwgeyByZWFkb25seSBzdGF0dXM6ICd1bmtub3duJzsgcmVhZG9ubHkgcmVhc29uOiBzdHJpbmcgfTtcblxuLyoqIEBpbnRlcm5hbCBPcGFxdWUgbm90ZSBuYW1lczsgRm9vdHRyYWNlIGtlZXBzIHRoZW0gd2l0aG91dCBpbnRlcnByZXRpbmcgZW5naW5lIG1ldGFkYXRhLiAqL1xuZXhwb3J0IGNvbnN0IENBUFRVUkVfSElTVE9SWV9OT1RFID0gJ2NhcHR1cmUtaGlzdG9yeSc7XG5leHBvcnQgY29uc3QgQ0FQVFVSRV9SRUNFSVBUX05PVEUgPSAnY2FwdHVyZS1yZWNlaXB0JztcbiJdfQ==
@@ -0,0 +1,3 @@
1
+ import type { LogAddress } from 'foottrace';
2
+ /** Native structural admission only: no user heap, options, sink or source selection participates. */
3
+ export declare function supportsNativeSourceAddress(address: LogAddress): boolean;
@@ -0,0 +1,15 @@
1
+ import { createReadSourceRecord, decodeReadSourceSnapshot, SharedMemory } from 'foottrace/write';
2
+ let emptyNativeBook;
3
+ /** Native structural admission only: no user heap, options, sink or source selection participates. */
4
+ export function supportsNativeSourceAddress(address) {
5
+ if (!emptyNativeBook) {
6
+ // Let the published writer supply its own wire version, limits and empty envelope.
7
+ // Lazy: default-off executions never allocate this inert validation fixture.
8
+ const book = createReadSourceRecord(new SharedMemory(), { logRunId: 'source-address-admission', drillPath: [] });
9
+ emptyNativeBook = book.snapshot();
10
+ book.retire();
11
+ }
12
+ // The native codec owns all address bounds. This candidate is never served as observed evidence.
13
+ return decodeReadSourceSnapshot({ ...emptyNativeBook, address }) !== undefined;
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF0aXZlU291cmNlQWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvY2FwdHVyZS9uYXRpdmVTb3VyY2VBZGRyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSx3QkFBd0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVqRyxJQUFJLGVBQStDLENBQUM7QUFFcEQsc0dBQXNHO0FBQ3RHLE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxPQUFtQjtJQUM3RCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDckIsbUZBQW1GO1FBQ25GLDZFQUE2RTtRQUM3RSxNQUFNLElBQUksR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLFlBQVksRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLDBCQUEwQixFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pILGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxpR0FBaUc7SUFDakcsT0FBTyx3QkFBd0IsQ0FBQyxFQUFFLEdBQUcsZUFBZSxFQUFFLE9BQU8sRUFBRSxDQUFDLEtBQUssU0FBUyxDQUFDO0FBQ2pGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExvZ0FkZHJlc3MgfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHR5cGUgeyBSZWFkU291cmNlU25hcHNob3QgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnO1xuaW1wb3J0IHsgY3JlYXRlUmVhZFNvdXJjZVJlY29yZCwgZGVjb2RlUmVhZFNvdXJjZVNuYXBzaG90LCBTaGFyZWRNZW1vcnkgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnO1xuXG5sZXQgZW1wdHlOYXRpdmVCb29rOiBSZWFkU291cmNlU25hcHNob3QgfCB1bmRlZmluZWQ7XG5cbi8qKiBOYXRpdmUgc3RydWN0dXJhbCBhZG1pc3Npb24gb25seTogbm8gdXNlciBoZWFwLCBvcHRpb25zLCBzaW5rIG9yIHNvdXJjZSBzZWxlY3Rpb24gcGFydGljaXBhdGVzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzTmF0aXZlU291cmNlQWRkcmVzcyhhZGRyZXNzOiBMb2dBZGRyZXNzKTogYm9vbGVhbiB7XG4gIGlmICghZW1wdHlOYXRpdmVCb29rKSB7XG4gICAgLy8gTGV0IHRoZSBwdWJsaXNoZWQgd3JpdGVyIHN1cHBseSBpdHMgb3duIHdpcmUgdmVyc2lvbiwgbGltaXRzIGFuZCBlbXB0eSBlbnZlbG9wZS5cbiAgICAvLyBMYXp5OiBkZWZhdWx0LW9mZiBleGVjdXRpb25zIG5ldmVyIGFsbG9jYXRlIHRoaXMgaW5lcnQgdmFsaWRhdGlvbiBmaXh0dXJlLlxuICAgIGNvbnN0IGJvb2sgPSBjcmVhdGVSZWFkU291cmNlUmVjb3JkKG5ldyBTaGFyZWRNZW1vcnkoKSwgeyBsb2dSdW5JZDogJ3NvdXJjZS1hZGRyZXNzLWFkbWlzc2lvbicsIGRyaWxsUGF0aDogW10gfSk7XG4gICAgZW1wdHlOYXRpdmVCb29rID0gYm9vay5zbmFwc2hvdCgpO1xuICAgIGJvb2sucmV0aXJlKCk7XG4gIH1cbiAgLy8gVGhlIG5hdGl2ZSBjb2RlYyBvd25zIGFsbCBhZGRyZXNzIGJvdW5kcy4gVGhpcyBjYW5kaWRhdGUgaXMgbmV2ZXIgc2VydmVkIGFzIG9ic2VydmVkIGV2aWRlbmNlLlxuICByZXR1cm4gZGVjb2RlUmVhZFNvdXJjZVNuYXBzaG90KHsgLi4uZW1wdHlOYXRpdmVCb29rLCBhZGRyZXNzIH0pICE9PSB1bmRlZmluZWQ7XG59XG4iXX0=
@@ -1,11 +1,12 @@
1
1
  import type { ReadSourceRecord, ReadSourceSnapshot } from 'foottrace/write';
2
2
  import type { CaptureChannelStatus, NativeCaptureNote } from './nativeCoverage.js';
3
+ import { SourceOwnershipCollector } from './sourceOwnership.js';
4
+ import type { SourceOwnershipWitness } from './sourceOwnershipFormat.js';
3
5
  /** Engine coverage only. Source descriptors and their codec belong to foottrace/write. */
4
- export declare const SOURCE_LIMITATIONS: readonly ["privacy-active", "identity-unavailable", "untracked-read", "custom-scope", "child-source-ownership", "resumed-source-ownership", "sink-source-unsupported", "source-history-not-included", "source-capture-failed", "redacted-source-export"];
6
+ export declare const SOURCE_LIMITATIONS: readonly ["privacy-active", "identity-unavailable", "untracked-read", "custom-scope", "child-source-ownership", "source-address-unsupported", "resumed-source-ownership", "sink-source-unsupported", "source-history-not-included", "source-capture-failed", "redacted-source-export"];
5
7
  export type SourceLimitation = (typeof SOURCE_LIMITATIONS)[number];
6
8
  /** Packet 3 is an in-memory observation, not a stored-history acknowledgement. */
7
- export interface EngineReadSources {
8
- readonly version: 1;
9
+ interface EngineReadSourcesBase {
9
10
  readonly runId: string;
10
11
  readonly persistence: 'memory-only';
11
12
  readonly commits: {
@@ -17,6 +18,14 @@ export interface EngineReadSources {
17
18
  /** Absent means unknown ownership, never an observed-empty book. */
18
19
  readonly record?: ReadSourceSnapshot;
19
20
  }
21
+ /** Legacy observations remain readable; only v2 contains independently collected ownership. */
22
+ export type EngineReadSources = EngineReadSourcesBase & ({
23
+ readonly version: 1;
24
+ readonly ownership?: never;
25
+ } | {
26
+ readonly version: 2;
27
+ readonly ownership: SourceOwnershipWitness;
28
+ });
20
29
  /** A new discriminant prevents strict v1 readers from accepting new completeness claims. */
21
30
  export interface NativeReadCaptureNote extends Omit<NativeCaptureNote, 'version' | 'channels'> {
22
31
  readonly version: 2;
@@ -30,9 +39,12 @@ export declare class EngineReadSourceCapture {
30
39
  readonly runId: string;
31
40
  private readonly book?;
32
41
  readonly from: number;
42
+ readonly ownership?: SourceOwnershipCollector;
33
43
  private readonly gaps;
34
44
  private sealed?;
45
+ private retired;
35
46
  get observing(): boolean;
47
+ get active(): boolean;
36
48
  constructor(runId: string, book?: ReadSourceRecord | undefined, gap?: SourceLimitation, from?: number);
37
49
  limit(gap: SourceLimitation): void;
38
50
  retire(): void;
@@ -41,3 +53,8 @@ export declare class EngineReadSourceCapture {
41
53
  }
42
54
  /** Keep the v1 producer unchanged. Only explicitly enabled source observations acquire v2. */
43
55
  export declare function withReadSources(note: NativeCaptureNote, sources: EngineReadSources): NativeReadCaptureNote;
56
+ /** One status rule shared by native observations and stored admission; storage cannot upgrade coverage. */
57
+ export declare function readSourceStatus(record: ReadSourceSnapshot | undefined, limitations: number): CaptureChannelStatus;
58
+ /** Redacted exports withhold every reference, including those captured before a later privacy mark. */
59
+ export declare function redactReadSources(source: EngineReadSources): EngineReadSources;
60
+ export {};