footprintjs 10.0.1 → 10.2.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 (368) hide show
  1. package/AGENTS.md +2 -1
  2. package/CLAUDE.md +61 -7
  3. package/README.md +136 -312
  4. package/dist/esm/index.d.ts +62 -2
  5. package/dist/esm/index.js +13 -6
  6. package/dist/esm/lib/attempt/anySignal.d.ts +19 -0
  7. package/dist/esm/lib/attempt/anySignal.js +39 -0
  8. package/dist/esm/lib/attempt/call.d.ts +88 -0
  9. package/dist/esm/lib/attempt/call.js +129 -0
  10. package/dist/esm/lib/attempt/category.d.ts +37 -0
  11. package/dist/esm/lib/attempt/category.js +131 -0
  12. package/dist/esm/lib/attempt/correlation.d.ts +95 -0
  13. package/dist/esm/lib/attempt/correlation.js +178 -0
  14. package/dist/esm/lib/attempt/deadline.d.ts +44 -0
  15. package/dist/esm/lib/attempt/deadline.js +101 -0
  16. package/dist/esm/lib/attempt/decision.d.ts +52 -0
  17. package/dist/esm/lib/attempt/decision.js +134 -0
  18. package/dist/esm/lib/attempt/effect.d.ts +76 -0
  19. package/dist/esm/lib/attempt/effect.js +160 -0
  20. package/dist/esm/lib/attempt/errors.d.ts +41 -0
  21. package/dist/esm/lib/attempt/errors.js +44 -0
  22. package/dist/esm/lib/attempt/index.d.ts +18 -0
  23. package/dist/esm/lib/attempt/index.js +15 -0
  24. package/dist/esm/lib/attempt/name.d.ts +21 -0
  25. package/dist/esm/lib/attempt/name.js +43 -0
  26. package/dist/esm/lib/attempt/observed.d.ts +66 -0
  27. package/dist/esm/lib/attempt/observed.js +171 -0
  28. package/dist/esm/lib/attempt/policy.d.ts +45 -0
  29. package/dist/esm/lib/attempt/policy.js +83 -0
  30. package/dist/esm/lib/attempt/record.d.ts +11 -0
  31. package/dist/esm/lib/attempt/record.js +24 -0
  32. package/dist/esm/lib/attempt/retryLoopContext.d.ts +18 -0
  33. package/dist/esm/lib/attempt/retryLoopContext.js +24 -0
  34. package/dist/esm/lib/attempt/retryLoopTypes.d.ts +18 -0
  35. package/dist/esm/lib/attempt/retryLoopTypes.js +2 -0
  36. package/dist/esm/lib/attempt/runner.d.ts +157 -0
  37. package/dist/esm/lib/attempt/runner.js +523 -0
  38. package/dist/esm/lib/attempt/standalone.d.ts +47 -0
  39. package/dist/esm/lib/attempt/standalone.js +126 -0
  40. package/dist/esm/lib/attempt/types.d.ts +453 -0
  41. package/dist/esm/lib/attempt/types.js +16 -0
  42. package/dist/esm/lib/budget/index.d.ts +9 -0
  43. package/dist/esm/lib/budget/index.js +9 -0
  44. package/dist/esm/lib/budget/timeBudget.d.ts +136 -0
  45. package/dist/esm/lib/budget/timeBudget.js +666 -0
  46. package/dist/esm/lib/builder/FlowChartBuilder.d.ts +88 -3
  47. package/dist/esm/lib/builder/FlowChartBuilder.js +199 -9
  48. package/dist/esm/lib/builder/retryLoop.d.ts +56 -0
  49. package/dist/esm/lib/builder/retryLoop.js +283 -0
  50. package/dist/esm/lib/builder/types.d.ts +35 -1
  51. package/dist/esm/lib/builder/types.js +1 -1
  52. package/dist/esm/lib/decide/decide.js +2 -2
  53. package/dist/esm/lib/decide/index.d.ts +1 -1
  54. package/dist/esm/lib/decide/index.js +2 -2
  55. package/dist/esm/lib/decide/types.d.ts +3 -0
  56. package/dist/esm/lib/decide/types.js +1 -8
  57. package/dist/esm/lib/engine/graph/StageNode.d.ts +11 -1
  58. package/dist/esm/lib/engine/graph/StageNode.js +1 -1
  59. package/dist/esm/lib/engine/graph/prefixNodeTree.js +5 -1
  60. package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +36 -6
  61. package/dist/esm/lib/engine/handlers/DeciderHandler.js +9 -5
  62. package/dist/esm/lib/engine/handlers/ResumeEntry.js +3 -1
  63. package/dist/esm/lib/engine/handlers/SelectorHandler.js +6 -5
  64. package/dist/esm/lib/engine/handlers/StageRunner.d.ts +8 -1
  65. package/dist/esm/lib/engine/handlers/StageRunner.js +36 -9
  66. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +24 -5
  67. package/dist/esm/lib/engine/handlers/commitStage.d.ts +7 -0
  68. package/dist/esm/lib/engine/handlers/commitStage.js +22 -4
  69. package/dist/esm/lib/engine/handlers/stageError.d.ts +9 -0
  70. package/dist/esm/lib/engine/handlers/stageError.js +23 -1
  71. package/dist/esm/lib/engine/index.d.ts +2 -2
  72. package/dist/esm/lib/engine/index.js +1 -1
  73. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +27 -13
  74. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +68 -40
  75. package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.d.ts +4 -1
  76. package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +19 -2
  77. package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.d.ts +22 -3
  78. package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.js +61 -9
  79. package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +1 -0
  80. package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
  81. package/dist/esm/lib/engine/narrative/formatting/sentences.d.ts +23 -0
  82. package/dist/esm/lib/engine/narrative/formatting/sentences.js +127 -1
  83. package/dist/esm/lib/engine/narrative/index.d.ts +2 -2
  84. package/dist/esm/lib/engine/narrative/index.js +1 -1
  85. package/dist/esm/lib/engine/narrative/narrativeTypes.d.ts +27 -21
  86. package/dist/esm/lib/engine/narrative/narrativeTypes.js +1 -1
  87. package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.d.ts +45 -2
  88. package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.js +55 -2
  89. package/dist/esm/lib/engine/narrative/recorders/index.d.ts +1 -1
  90. package/dist/esm/lib/engine/narrative/recorders/index.js +1 -1
  91. package/dist/esm/lib/engine/narrative/types.d.ts +74 -5
  92. package/dist/esm/lib/engine/narrative/types.js +1 -1
  93. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +59 -19
  94. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +194 -118
  95. package/dist/esm/lib/engine/traversalContext.d.ts +7 -2
  96. package/dist/esm/lib/engine/traversalContext.js +6 -3
  97. package/dist/esm/lib/engine/types.d.ts +52 -57
  98. package/dist/esm/lib/engine/types.js +1 -1
  99. package/dist/esm/lib/errors/terminalFailure.d.ts +29 -0
  100. package/dist/esm/lib/errors/terminalFailure.js +60 -0
  101. package/dist/esm/lib/{decide → filter}/evaluator.d.ts +7 -2
  102. package/dist/esm/lib/filter/evaluator.js +135 -0
  103. package/dist/esm/lib/ids/idempotencyKey.d.ts +14 -0
  104. package/dist/esm/lib/ids/idempotencyKey.js +24 -0
  105. package/dist/esm/lib/memory/StageContext.d.ts +123 -3
  106. package/dist/esm/lib/memory/StageContext.js +245 -4
  107. package/dist/esm/lib/memory/attention.d.ts +26 -0
  108. package/dist/esm/lib/memory/attention.js +171 -0
  109. package/dist/esm/lib/memory/borrowedMutation.d.ts +8 -0
  110. package/dist/esm/lib/memory/borrowedMutation.js +14 -1
  111. package/dist/esm/lib/memory/frameTypes.d.ts +38 -0
  112. package/dist/esm/lib/memory/frameTypes.js +3 -1
  113. package/dist/esm/lib/memory/redaction.d.ts +12 -0
  114. package/dist/esm/lib/memory/redaction.js +54 -5
  115. package/dist/esm/lib/pause/record.js +10 -1
  116. package/dist/esm/lib/pause/types.d.ts +19 -0
  117. package/dist/esm/lib/pause/types.js +17 -1
  118. package/dist/esm/lib/reactive/createTypedScope.js +3 -1
  119. package/dist/esm/lib/reactive/types.d.ts +36 -4
  120. package/dist/esm/lib/reactive/types.js +3 -1
  121. package/dist/esm/lib/recorder/AttemptRecorder.d.ts +141 -0
  122. package/dist/esm/lib/recorder/AttemptRecorder.js +412 -0
  123. package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +36 -2
  124. package/dist/esm/lib/recorder/ControlDepRecorder.js +50 -2
  125. package/dist/esm/lib/recorder/EmitRecorder.d.ts +3 -0
  126. package/dist/esm/lib/recorder/EmitRecorder.js +1 -1
  127. package/dist/esm/lib/recorder/InOutRecorder.d.ts +37 -1
  128. package/dist/esm/lib/recorder/InOutRecorder.js +75 -6
  129. package/dist/esm/lib/recorder/QualityRecorder.d.ts +32 -5
  130. package/dist/esm/lib/recorder/QualityRecorder.js +87 -29
  131. package/dist/esm/lib/recorder/TopologyRecorder.d.ts +35 -5
  132. package/dist/esm/lib/recorder/TopologyRecorder.js +76 -2
  133. package/dist/esm/lib/recorder/attemptMetricRows.d.ts +11 -0
  134. package/dist/esm/lib/recorder/attemptMetricRows.js +202 -0
  135. package/dist/esm/lib/recorder/attemptMetrics.d.ts +7 -0
  136. package/dist/esm/lib/recorder/attemptMetrics.js +165 -0
  137. package/dist/esm/lib/recorder/attemptMetricsTypes.d.ts +114 -0
  138. package/dist/esm/lib/recorder/attemptMetricsTypes.js +2 -0
  139. package/dist/esm/lib/recorder/attemptOTel.d.ts +78 -0
  140. package/dist/esm/lib/recorder/attemptOTel.js +107 -0
  141. package/dist/esm/lib/recorder/attemptSeries.d.ts +81 -0
  142. package/dist/esm/lib/recorder/attemptSeries.js +103 -0
  143. package/dist/esm/lib/recorder/hooks.d.ts +9 -0
  144. package/dist/esm/lib/recorder/hooks.js +4 -1
  145. package/dist/esm/lib/runner/DeferredObserverTier.js +13 -1
  146. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +54 -6
  147. package/dist/esm/lib/runner/ExecutionRuntime.js +57 -5
  148. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +46 -2
  149. package/dist/esm/lib/runner/FlowChartExecutor.js +330 -101
  150. package/dist/esm/lib/runner/RunnableChart.d.ts +6 -0
  151. package/dist/esm/lib/runner/RunnableChart.js +5 -1
  152. package/dist/esm/lib/runner/attach.d.ts +2 -1
  153. package/dist/esm/lib/runner/attach.js +8 -2
  154. package/dist/esm/lib/runner/checkpoint.js +3 -1
  155. package/dist/esm/lib/runner/deadline.d.ts +42 -0
  156. package/dist/esm/lib/runner/deadline.js +90 -0
  157. package/dist/esm/lib/runner/index.d.ts +3 -1
  158. package/dist/esm/lib/runner/index.js +2 -1
  159. package/dist/esm/lib/runner/options.d.ts +17 -0
  160. package/dist/esm/lib/runner/options.js +3 -1
  161. package/dist/esm/lib/runner/recordSink.d.ts +128 -0
  162. package/dist/esm/lib/runner/recordSink.js +296 -0
  163. package/dist/esm/lib/runner/resume.d.ts +3 -0
  164. package/dist/esm/lib/runner/resume.js +22 -2
  165. package/dist/esm/lib/runner/snapshot.d.ts +2 -2
  166. package/dist/esm/lib/runner/snapshot.js +6 -2
  167. package/dist/esm/lib/scope/ScopeFacade.d.ts +118 -4
  168. package/dist/esm/lib/scope/ScopeFacade.js +304 -7
  169. package/dist/esm/lib/scope/recorders/DebugRecorder.d.ts +17 -3
  170. package/dist/esm/lib/scope/recorders/DebugRecorder.js +79 -13
  171. package/dist/esm/lib/scope/recorders/MetricRecorder.d.ts +10 -0
  172. package/dist/esm/lib/scope/recorders/MetricRecorder.js +15 -2
  173. package/dist/esm/lib/scope/runtime.d.ts +3 -0
  174. package/dist/esm/lib/scope/runtime.js +1 -1
  175. package/dist/esm/lib/scope/types.d.ts +6 -0
  176. package/dist/esm/lib/scope/types.js +1 -1
  177. package/dist/esm/lib/sinks/fileSink.d.ts +135 -0
  178. package/dist/esm/lib/sinks/fileSink.js +387 -0
  179. package/dist/esm/recorders.d.ts +8 -2
  180. package/dist/esm/recorders.js +7 -1
  181. package/dist/esm/sinks.d.ts +23 -0
  182. package/dist/esm/sinks.js +23 -0
  183. package/dist/esm/trace.d.ts +2 -2
  184. package/dist/esm/trace.js +1 -1
  185. package/dist/index.js +77 -60
  186. package/dist/lib/attempt/anySignal.js +43 -0
  187. package/dist/lib/attempt/call.js +134 -0
  188. package/dist/lib/attempt/category.js +136 -0
  189. package/dist/lib/attempt/correlation.js +186 -0
  190. package/dist/lib/attempt/deadline.js +112 -0
  191. package/dist/lib/attempt/decision.js +139 -0
  192. package/dist/lib/attempt/effect.js +174 -0
  193. package/dist/lib/attempt/errors.js +49 -0
  194. package/dist/lib/attempt/index.js +26 -0
  195. package/dist/lib/attempt/name.js +48 -0
  196. package/dist/lib/attempt/observed.js +177 -0
  197. package/dist/lib/attempt/policy.js +92 -0
  198. package/dist/lib/attempt/record.js +29 -0
  199. package/dist/lib/attempt/retryLoopContext.js +31 -0
  200. package/dist/lib/attempt/retryLoopTypes.js +3 -0
  201. package/dist/lib/attempt/runner.js +530 -0
  202. package/dist/lib/attempt/standalone.js +130 -0
  203. package/dist/lib/attempt/types.js +17 -0
  204. package/dist/lib/budget/index.js +17 -0
  205. package/dist/lib/budget/timeBudget.js +674 -0
  206. package/dist/lib/builder/FlowChartBuilder.js +199 -9
  207. package/dist/lib/builder/retryLoop.js +287 -0
  208. package/dist/lib/builder/types.js +1 -1
  209. package/dist/lib/decide/decide.js +2 -2
  210. package/dist/lib/decide/index.js +2 -2
  211. package/dist/lib/decide/types.js +1 -8
  212. package/dist/lib/engine/graph/StageNode.js +1 -1
  213. package/dist/lib/engine/graph/prefixNodeTree.js +5 -1
  214. package/dist/lib/engine/handlers/ChildrenExecutor.js +36 -6
  215. package/dist/lib/engine/handlers/DeciderHandler.js +7 -3
  216. package/dist/lib/engine/handlers/ResumeEntry.js +3 -1
  217. package/dist/lib/engine/handlers/SelectorHandler.js +4 -3
  218. package/dist/lib/engine/handlers/StageRunner.js +36 -9
  219. package/dist/lib/engine/handlers/SubflowExecutor.js +24 -5
  220. package/dist/lib/engine/handlers/commitStage.js +24 -5
  221. package/dist/lib/engine/handlers/stageError.js +26 -2
  222. package/dist/lib/engine/index.js +1 -1
  223. package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +67 -39
  224. package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +19 -2
  225. package/dist/lib/engine/narrative/NarrativeFlowRecorder.js +60 -8
  226. package/dist/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
  227. package/dist/lib/engine/narrative/formatting/sentences.js +131 -2
  228. package/dist/lib/engine/narrative/index.js +1 -1
  229. package/dist/lib/engine/narrative/narrativeTypes.js +1 -1
  230. package/dist/lib/engine/narrative/recorders/ManifestFlowRecorder.js +55 -2
  231. package/dist/lib/engine/narrative/recorders/index.js +1 -1
  232. package/dist/lib/engine/narrative/types.js +1 -1
  233. package/dist/lib/engine/traversal/FlowchartTraverser.js +192 -116
  234. package/dist/lib/engine/traversalContext.js +6 -3
  235. package/dist/lib/engine/types.js +1 -1
  236. package/dist/lib/errors/terminalFailure.js +64 -0
  237. package/dist/lib/filter/evaluator.js +139 -0
  238. package/dist/lib/ids/idempotencyKey.js +28 -0
  239. package/dist/lib/memory/StageContext.js +246 -5
  240. package/dist/lib/memory/attention.js +175 -0
  241. package/dist/lib/memory/borrowedMutation.js +16 -2
  242. package/dist/lib/memory/frameTypes.js +3 -1
  243. package/dist/lib/memory/redaction.js +54 -5
  244. package/dist/lib/pause/record.js +10 -1
  245. package/dist/lib/pause/types.js +17 -1
  246. package/dist/lib/reactive/createTypedScope.js +3 -1
  247. package/dist/lib/reactive/types.js +3 -1
  248. package/dist/lib/recorder/AttemptRecorder.js +417 -0
  249. package/dist/lib/recorder/ControlDepRecorder.js +50 -2
  250. package/dist/lib/recorder/EmitRecorder.js +1 -1
  251. package/dist/lib/recorder/InOutRecorder.js +75 -6
  252. package/dist/lib/recorder/QualityRecorder.js +87 -29
  253. package/dist/lib/recorder/TopologyRecorder.js +76 -2
  254. package/dist/lib/recorder/attemptMetricRows.js +209 -0
  255. package/dist/lib/recorder/attemptMetrics.js +174 -0
  256. package/dist/lib/recorder/attemptMetricsTypes.js +3 -0
  257. package/dist/lib/recorder/attemptOTel.js +111 -0
  258. package/dist/lib/recorder/attemptSeries.js +113 -0
  259. package/dist/lib/recorder/hooks.js +4 -1
  260. package/dist/lib/runner/DeferredObserverTier.js +13 -1
  261. package/dist/lib/runner/ExecutionRuntime.js +57 -5
  262. package/dist/lib/runner/FlowChartExecutor.js +330 -101
  263. package/dist/lib/runner/RunnableChart.js +5 -1
  264. package/dist/lib/runner/attach.js +8 -2
  265. package/dist/lib/runner/checkpoint.js +3 -1
  266. package/dist/lib/runner/deadline.js +94 -0
  267. package/dist/lib/runner/index.js +4 -2
  268. package/dist/lib/runner/options.js +3 -1
  269. package/dist/lib/runner/recordSink.js +302 -0
  270. package/dist/lib/runner/resume.js +22 -2
  271. package/dist/lib/runner/snapshot.js +6 -2
  272. package/dist/lib/scope/ScopeFacade.js +303 -6
  273. package/dist/lib/scope/recorders/DebugRecorder.js +79 -13
  274. package/dist/lib/scope/recorders/MetricRecorder.js +15 -2
  275. package/dist/lib/scope/runtime.js +1 -1
  276. package/dist/lib/scope/types.js +1 -1
  277. package/dist/lib/sinks/fileSink.js +392 -0
  278. package/dist/recorders.js +10 -2
  279. package/dist/sinks.js +32 -0
  280. package/dist/trace.js +1 -1
  281. package/dist/types/index.d.ts +62 -2
  282. package/dist/types/lib/attempt/anySignal.d.ts +19 -0
  283. package/dist/types/lib/attempt/call.d.ts +88 -0
  284. package/dist/types/lib/attempt/category.d.ts +37 -0
  285. package/dist/types/lib/attempt/correlation.d.ts +95 -0
  286. package/dist/types/lib/attempt/deadline.d.ts +44 -0
  287. package/dist/types/lib/attempt/decision.d.ts +52 -0
  288. package/dist/types/lib/attempt/effect.d.ts +76 -0
  289. package/dist/types/lib/attempt/errors.d.ts +41 -0
  290. package/dist/types/lib/attempt/index.d.ts +18 -0
  291. package/dist/types/lib/attempt/name.d.ts +21 -0
  292. package/dist/types/lib/attempt/observed.d.ts +66 -0
  293. package/dist/types/lib/attempt/policy.d.ts +45 -0
  294. package/dist/types/lib/attempt/record.d.ts +11 -0
  295. package/dist/types/lib/attempt/retryLoopContext.d.ts +18 -0
  296. package/dist/types/lib/attempt/retryLoopTypes.d.ts +18 -0
  297. package/dist/types/lib/attempt/runner.d.ts +157 -0
  298. package/dist/types/lib/attempt/standalone.d.ts +47 -0
  299. package/dist/types/lib/attempt/types.d.ts +453 -0
  300. package/dist/types/lib/budget/index.d.ts +9 -0
  301. package/dist/types/lib/budget/timeBudget.d.ts +136 -0
  302. package/dist/types/lib/builder/FlowChartBuilder.d.ts +88 -3
  303. package/dist/types/lib/builder/retryLoop.d.ts +56 -0
  304. package/dist/types/lib/builder/types.d.ts +35 -1
  305. package/dist/types/lib/decide/index.d.ts +1 -1
  306. package/dist/types/lib/decide/types.d.ts +3 -0
  307. package/dist/types/lib/engine/graph/StageNode.d.ts +11 -1
  308. package/dist/types/lib/engine/handlers/StageRunner.d.ts +8 -1
  309. package/dist/types/lib/engine/handlers/commitStage.d.ts +7 -0
  310. package/dist/types/lib/engine/handlers/stageError.d.ts +9 -0
  311. package/dist/types/lib/engine/index.d.ts +2 -2
  312. package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +27 -13
  313. package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +4 -1
  314. package/dist/types/lib/engine/narrative/NarrativeFlowRecorder.d.ts +22 -3
  315. package/dist/types/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +1 -0
  316. package/dist/types/lib/engine/narrative/formatting/sentences.d.ts +23 -0
  317. package/dist/types/lib/engine/narrative/index.d.ts +2 -2
  318. package/dist/types/lib/engine/narrative/narrativeTypes.d.ts +27 -21
  319. package/dist/types/lib/engine/narrative/recorders/ManifestFlowRecorder.d.ts +45 -2
  320. package/dist/types/lib/engine/narrative/recorders/index.d.ts +1 -1
  321. package/dist/types/lib/engine/narrative/types.d.ts +74 -5
  322. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +59 -19
  323. package/dist/types/lib/engine/traversalContext.d.ts +7 -2
  324. package/dist/types/lib/engine/types.d.ts +52 -57
  325. package/dist/types/lib/errors/terminalFailure.d.ts +29 -0
  326. package/dist/types/lib/{decide → filter}/evaluator.d.ts +7 -2
  327. package/dist/types/lib/ids/idempotencyKey.d.ts +14 -0
  328. package/dist/types/lib/memory/StageContext.d.ts +123 -3
  329. package/dist/types/lib/memory/attention.d.ts +26 -0
  330. package/dist/types/lib/memory/borrowedMutation.d.ts +8 -0
  331. package/dist/types/lib/memory/frameTypes.d.ts +38 -0
  332. package/dist/types/lib/memory/redaction.d.ts +12 -0
  333. package/dist/types/lib/pause/types.d.ts +19 -0
  334. package/dist/types/lib/reactive/types.d.ts +36 -4
  335. package/dist/types/lib/recorder/AttemptRecorder.d.ts +141 -0
  336. package/dist/types/lib/recorder/ControlDepRecorder.d.ts +36 -2
  337. package/dist/types/lib/recorder/EmitRecorder.d.ts +3 -0
  338. package/dist/types/lib/recorder/InOutRecorder.d.ts +37 -1
  339. package/dist/types/lib/recorder/QualityRecorder.d.ts +32 -5
  340. package/dist/types/lib/recorder/TopologyRecorder.d.ts +35 -5
  341. package/dist/types/lib/recorder/attemptMetricRows.d.ts +11 -0
  342. package/dist/types/lib/recorder/attemptMetrics.d.ts +7 -0
  343. package/dist/types/lib/recorder/attemptMetricsTypes.d.ts +114 -0
  344. package/dist/types/lib/recorder/attemptOTel.d.ts +78 -0
  345. package/dist/types/lib/recorder/attemptSeries.d.ts +81 -0
  346. package/dist/types/lib/recorder/hooks.d.ts +9 -0
  347. package/dist/types/lib/runner/ExecutionRuntime.d.ts +54 -6
  348. package/dist/types/lib/runner/FlowChartExecutor.d.ts +46 -2
  349. package/dist/types/lib/runner/RunnableChart.d.ts +6 -0
  350. package/dist/types/lib/runner/attach.d.ts +2 -1
  351. package/dist/types/lib/runner/deadline.d.ts +42 -0
  352. package/dist/types/lib/runner/index.d.ts +3 -1
  353. package/dist/types/lib/runner/options.d.ts +17 -0
  354. package/dist/types/lib/runner/recordSink.d.ts +128 -0
  355. package/dist/types/lib/runner/resume.d.ts +3 -0
  356. package/dist/types/lib/runner/snapshot.d.ts +2 -2
  357. package/dist/types/lib/scope/ScopeFacade.d.ts +118 -4
  358. package/dist/types/lib/scope/recorders/DebugRecorder.d.ts +17 -3
  359. package/dist/types/lib/scope/recorders/MetricRecorder.d.ts +10 -0
  360. package/dist/types/lib/scope/runtime.d.ts +3 -0
  361. package/dist/types/lib/scope/types.d.ts +6 -0
  362. package/dist/types/lib/sinks/fileSink.d.ts +135 -0
  363. package/dist/types/recorders.d.ts +8 -2
  364. package/dist/types/sinks.d.ts +23 -0
  365. package/dist/types/trace.d.ts +2 -2
  366. package/package.json +20 -6
  367. package/dist/esm/lib/decide/evaluator.js +0 -130
  368. package/dist/lib/decide/evaluator.js +0 -134
@@ -0,0 +1,287 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.appendRetryLoop = void 0;
4
+ /** Explicit retry workflow: ordinary attempt → reconcile → decide → wait/loop nodes, one rule table. */
5
+ const foottrace_1 = require("foottrace");
6
+ const decision_js_1 = require("../attempt/decision.js");
7
+ const effect_js_1 = require("../attempt/effect.js");
8
+ const errors_js_1 = require("../attempt/errors.js");
9
+ const policy_js_1 = require("../attempt/policy.js");
10
+ const retryLoopContext_js_1 = require("../attempt/retryLoopContext.js");
11
+ const runner_js_1 = require("../attempt/runner.js");
12
+ const types_js_1 = require("../decide/types.js");
13
+ const interrupt_js_1 = require("../pause/interrupt.js");
14
+ const types_js_2 = require("../pause/types.js");
15
+ const runtime_js_1 = require("../scope/runtime.js");
16
+ const fail = (field) => {
17
+ throw new TypeError(`addRetryLoop: invalid ${field}`);
18
+ };
19
+ function appendRetryLoop(builder, id, supplied, stamp) {
20
+ // Snapshot named configuration once; never retain arbitrary caller fields or invoke a policy callback at build.
21
+ if (supplied === null || typeof supplied !== 'object')
22
+ fail('options');
23
+ const { touches, idempotencyKey, retry: given, attempt, reconcile, into = id, onStop = 'throw', wait = 'sleep', } = supplied;
24
+ if (given === null || typeof given !== 'object')
25
+ fail('retry');
26
+ const { attempts, timeoutMs, backoffMs, maxBackoffMs, retryOn } = given;
27
+ const retry = Object.freeze({ attempts, timeoutMs, backoffMs, maxBackoffMs, retryOn });
28
+ if ((0, policy_js_1.retryPolicyProblem)(retry) || !Number.isSafeInteger(attempts))
29
+ fail('retry policy');
30
+ if ((0, effect_js_1.touchesProblem)({ system: touches, idempotencyKey }, retry) || typeof idempotencyKey !== 'function')
31
+ fail('key rule or system');
32
+ if (typeof attempt !== 'function' || typeof reconcile !== 'function')
33
+ fail('attempt or reconciliation callback');
34
+ if (typeof into !== 'string' ||
35
+ !into ||
36
+ into.startsWith('$') ||
37
+ ['__proto__', 'constructor', 'prototype'].includes(into))
38
+ fail('state key');
39
+ if (onStop !== 'throw' && onStop !== 'continue')
40
+ fail('onStop');
41
+ if (wait !== 'sleep' && wait !== 'pause')
42
+ fail('wait');
43
+ const tag = `retry-loop:${id}`;
44
+ const callbackBudget = { role: 'callback', timeoutMs };
45
+ const waitBudget = {
46
+ role: 'wait',
47
+ waitMs: typeof backoffMs === 'function' ? maxBackoffMs : (0, policy_js_1.cappedWaitMs)((0, runner_js_1.resolveBackoffMs)(backoffMs, 1), maxBackoffMs),
48
+ };
49
+ const controlBudget = { role: 'control' };
50
+ const hostOf = (scope) => {
51
+ const host = (0, runtime_js_1.requireScopeRuntime)(scope).target;
52
+ if (typeof host.writeRetryLoopState !== 'function')
53
+ fail('scope capability (use a registered ScopeFacade target)');
54
+ return host;
55
+ };
56
+ const checked = (value) => {
57
+ if (value === undefined)
58
+ return undefined;
59
+ if (value === null || typeof value !== 'object')
60
+ fail('restored loop state');
61
+ const state = value;
62
+ if (state.error !== undefined &&
63
+ (state.error === null ||
64
+ typeof state.error !== 'object' ||
65
+ typeof state.error.message !== 'string' ||
66
+ Object.keys(state.error).some((key) => !['message', 'name', 'code'].includes(key))))
67
+ fail('restored loop error');
68
+ if (state.resumeAt !== undefined && (typeof state.resumeAt !== 'number' || !Number.isFinite(state.resumeAt)))
69
+ fail('restored wait time');
70
+ if (state.id !== id ||
71
+ state.of !== attempts ||
72
+ !Number.isInteger(state.attempt) ||
73
+ state.attempt < 1 ||
74
+ state.attempt > attempts ||
75
+ typeof state.idempotencyKey !== 'string' ||
76
+ state.idempotencyKey.trim() === '' ||
77
+ typeof state.series !== 'string' ||
78
+ typeof state.terminal !== 'boolean' ||
79
+ !['none', 'unknown', 'applied'].includes(state.effect) ||
80
+ typeof state.reconciled !== 'boolean' ||
81
+ typeof state.retryOn !== 'boolean' ||
82
+ !Number.isFinite(state.delayMs) ||
83
+ state.delayMs < 0)
84
+ fail('restored loop state');
85
+ try {
86
+ const parsed = (0, foottrace_1.parseRuntimeStageId)(state.series);
87
+ if (!/#\d+$/.test(state.series) || parsed.stageId !== id)
88
+ fail('restored loop series');
89
+ (0, effect_js_1.admitIdempotencyKey)('addRetryLoop', state.idempotencyKey);
90
+ }
91
+ catch {
92
+ fail('restored loop series');
93
+ }
94
+ return state;
95
+ };
96
+ const read = (host) => checked(host.getValue(into));
97
+ const identity = (state, phase) => Object.freeze({ id, series: state.series, attempt: state.attempt, of: attempts, phase });
98
+ const call = async (scope, host, state, phase, fn) => {
99
+ let record;
100
+ const logical = identity(state, phase);
101
+ const clear = (0, retryLoopContext_js_1.registerRetryLoopCall)(host, {
102
+ identity: logical,
103
+ record: (entry) => {
104
+ record = entry;
105
+ },
106
+ });
107
+ try {
108
+ const value = await host.call(phase === 'attempt' ? touches : `${touches}.reconcile`, (context) => fn(scope, Object.freeze({ ...context, idempotencyKey: state.idempotencyKey, retryLoop: logical })), { attempts: 1, ...(timeoutMs === undefined ? {} : { timeoutMs }) }, phase === 'attempt' ? { touches, idempotencyKey: state.idempotencyKey } : undefined);
109
+ return { value, record };
110
+ }
111
+ catch (error) {
112
+ if ((0, types_js_2.isPauseSignal)(error) || (0, interrupt_js_1.isInterruptSignal)(error))
113
+ throw error;
114
+ return { error, record };
115
+ }
116
+ finally {
117
+ clear();
118
+ }
119
+ };
120
+ builder
121
+ .addFunction(`Attempt ${id}`, async (scope) => {
122
+ const host = hostOf(scope);
123
+ const previous = read(host);
124
+ let state = previous && !previous.terminal
125
+ ? { ...previous, reconciled: false }
126
+ : {
127
+ id,
128
+ series: host.getAttempt().series,
129
+ attempt: 1,
130
+ of: attempts,
131
+ idempotencyKey: host.getAttempt().idempotencyKey,
132
+ effect: 'none',
133
+ reconciled: false,
134
+ delayMs: 0,
135
+ retryOn: true,
136
+ terminal: false,
137
+ };
138
+ host.writeRetryLoopState(into, state); // a pause re-runs from this committed operational key, never recomputes it
139
+ const result = await call(scope, host, state, 'attempt', attempt);
140
+ const record = result.record;
141
+ const failed = Object.hasOwn(result, 'error');
142
+ let allows = true;
143
+ let threw = false;
144
+ let delayMs = 0;
145
+ if (failed && state.attempt < attempts) {
146
+ const original = result.error instanceof errors_js_1.UnknownEffectError ? result.error.cause : result.error;
147
+ if (retryOn) {
148
+ try {
149
+ allows = retryOn(original) === true;
150
+ }
151
+ catch {
152
+ allows = false;
153
+ threw = true;
154
+ }
155
+ }
156
+ if (allows)
157
+ delayMs = (0, policy_js_1.cappedWaitMs)((0, runner_js_1.resolveBackoffMs)(backoffMs, state.attempt, original), maxBackoffMs);
158
+ }
159
+ state = {
160
+ ...state,
161
+ outcome: record?.outcome ?? (failed ? 'failed' : 'ok'),
162
+ effect: record?.effect ?? (failed ? 'unknown' : 'applied'),
163
+ category: record?.category,
164
+ ...(failed ? { error: host.serveRetryLoopError(result.error) } : { value: result.value }),
165
+ retryOn: allows,
166
+ ...(threw ? { retryOnThrew: true } : {}),
167
+ delayMs,
168
+ };
169
+ host.writeRetryLoopState(into, state);
170
+ }, id)
171
+ .touches(touches, {
172
+ idempotencyKey: (context) => {
173
+ const previous = checked(context.getState(into));
174
+ return previous && !previous.terminal ? previous.idempotencyKey : idempotencyKey(context);
175
+ },
176
+ })
177
+ .tag(tag);
178
+ stamp({ ...callbackBudget, passes: attempts });
179
+ builder
180
+ .addFunction(`Reconcile ${id}`, async (scope) => {
181
+ const host = hostOf(scope);
182
+ const state = read(host);
183
+ if (state.effect !== 'unknown')
184
+ return;
185
+ const result = await call(scope, host, state, 'reconcile', reconcile);
186
+ const valid = result.value === 'applied' || result.value === 'none' || result.value === 'unknown';
187
+ const effect = valid ? result.value : 'unknown';
188
+ host.writeRetryLoopState(into, {
189
+ ...state,
190
+ effect,
191
+ reconciled: true,
192
+ ...(Object.hasOwn(result, 'error')
193
+ ? { error: host.serveRetryLoopError(result.error) }
194
+ : !valid
195
+ ? { error: { name: 'TypeError', message: 'retry loop: invalid reconciliation outcome' } }
196
+ : {}),
197
+ });
198
+ }, `${id}-reconcile`)
199
+ .tag(tag);
200
+ stamp(callbackBudget);
201
+ const decider = builder.addDeciderFunction(`Decide ${id}`, (scope) => {
202
+ const host = hostOf(scope);
203
+ const state = read(host);
204
+ const context = host.getAttempt();
205
+ const left = context.timeLeftMs();
206
+ const inputs = {
207
+ outcome: state.effect === 'applied' ? 'ok' : state.outcome ?? 'failed',
208
+ category: state.category,
209
+ aborted: context.signal.aborted,
210
+ attempt: state.attempt,
211
+ of: attempts,
212
+ timeLeftMs: left,
213
+ delayMs: state.delayMs,
214
+ timeLeftAfterWaitMs: left - state.delayMs,
215
+ retryOn: state.retryOn && state.effect !== 'unknown',
216
+ keyPresent: true,
217
+ };
218
+ const decision = (0, decision_js_1.decideAttempt)((0, decision_js_1.retryRules)(retry), (key) => inputs[key]);
219
+ const evidence = {
220
+ ...decision.evidence,
221
+ retryLoop: Object.freeze({
222
+ id,
223
+ series: state.series,
224
+ attempt: state.attempt,
225
+ of: attempts,
226
+ effect: state.effect,
227
+ reconciled: state.reconciled,
228
+ next: decision.next,
229
+ reason: decision.reason,
230
+ }),
231
+ };
232
+ host.writeRetryLoopState(into, { ...state, decision: evidence, terminal: decision.next !== 'retry' });
233
+ return { branch: `${id}-${decision.next}`, [types_js_1.DECISION_RESULT]: true, evidence };
234
+ }, `${id}-decide`);
235
+ builder.tag(tag);
236
+ stamp(controlBudget);
237
+ const waitScope = async (scope) => {
238
+ const host = hostOf(scope);
239
+ const state = read(host);
240
+ const delay = state.resumeAt === undefined ? state.delayMs : Math.max(0, state.resumeAt - Date.now());
241
+ const signal = host.getAttempt().signal;
242
+ await (0, runner_js_1.sleep)(delay, signal);
243
+ if (signal.aborted)
244
+ throw signal.reason ?? new Error('retry loop aborted');
245
+ host.writeRetryLoopState(into, { ...state, attempt: state.attempt + 1, decision: undefined, resumeAt: undefined });
246
+ };
247
+ // Branch-list methods keep their builder cursor on the decider. The wait callback is an ordinary branch;
248
+ // pause mode uses interrupt semantics in that callback so its own stage resumes before it loops back.
249
+ const waitFn = wait === 'pause'
250
+ ? async (scope) => {
251
+ const host = hostOf(scope);
252
+ const state = read(host);
253
+ if (state.resumeAt === undefined)
254
+ host.writeRetryLoopState(into, { ...state, resumeAt: Date.now() + state.delayMs });
255
+ (0, interrupt_js_1.interrupt)(scope, { reason: `Retry ${id}`, expects: { resumeAt: read(host).resumeAt } });
256
+ await waitScope(scope);
257
+ }
258
+ : waitScope;
259
+ decider
260
+ .addFunctionBranch(`${id}-retry`, `Wait ${id}`, waitFn, undefined, { loopTo: id, tags: [tag] })
261
+ .addFunctionBranch(`${id}-done`, `Done ${id}`, () => undefined, undefined, { tags: [tag] })
262
+ .addFunctionBranch(`${id}-stop`, `Stop ${id}`, (scope) => {
263
+ if (onStop === 'continue')
264
+ return;
265
+ const host = hostOf(scope);
266
+ const state = read(host);
267
+ const cause = Object.assign(new Error(state.error?.message ?? 'retry loop stopped'), {
268
+ name: state.error?.name ?? 'Error',
269
+ ...(state.error?.code ? { code: state.error.code } : {}),
270
+ });
271
+ if (state.effect === 'unknown')
272
+ throw new errors_js_1.UnknownEffectError({
273
+ system: touches,
274
+ idempotencyKey: host.serveRetryLoopKey(state.idempotencyKey),
275
+ attempts: state.attempt,
276
+ cause,
277
+ });
278
+ throw cause;
279
+ }, undefined, { tags: [tag] })
280
+ .end();
281
+ // Branch nodes are assigned their bounded helper costs by the builder after construction.
282
+ stamp(waitBudget, `${id}-retry`);
283
+ stamp(controlBudget, `${id}-done`);
284
+ stamp(controlBudget, `${id}-stop`);
285
+ }
286
+ exports.appendRetryLoop = appendRetryLoop;
287
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnlMb29wLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9idWlsZGVyL3JldHJ5TG9vcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx3R0FBd0c7QUFDeEcseUNBQWdEO0FBRWhELHdEQUFtRTtBQUNuRSxvREFBMkU7QUFDM0Usb0RBQTBEO0FBQzFELG9EQUF3RTtBQUV4RSx3RUFBdUU7QUFFdkUsb0RBQStEO0FBWS9ELGlEQUFxRDtBQUNyRCx3REFBcUU7QUFDckUsZ0RBQWtEO0FBQ2xELG9EQUEwRDtBQXlFMUQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFhLEVBQVMsRUFBRTtJQUNwQyxNQUFNLElBQUksU0FBUyxDQUFDLHlCQUF5QixLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3hELENBQUMsQ0FBQztBQUVGLFNBQWdCLGVBQWUsQ0FDN0IsT0FBZ0IsRUFDaEIsRUFBVSxFQUNWLFFBQWtDLEVBQ2xDLEtBQXlEO0lBRXpELGdIQUFnSDtJQUNoSCxJQUFJLFFBQVEsS0FBSyxJQUFJLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUTtRQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2RSxNQUFNLEVBQ0osT0FBTyxFQUNQLGNBQWMsRUFDZCxLQUFLLEVBQUUsS0FBSyxFQUNaLE9BQU8sRUFDUCxTQUFTLEVBQ1QsSUFBSSxHQUFHLEVBQUUsRUFDVCxNQUFNLEdBQUcsT0FBTyxFQUNoQixJQUFJLEdBQUcsT0FBTyxHQUNmLEdBQUcsUUFBUSxDQUFDO0lBQ2IsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0QsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDeEUsTUFBTSxLQUFLLEdBQWdCLE1BQU0sQ0FBQyxNQUFN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QyxDQUFDO0FBQ3JDLENBQUM7QUFoVEQsMENBZ1RDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEV4cGxpY2l0IHJldHJ5IHdvcmtmbG93OiBvcmRpbmFyeSBhdHRlbXB0IOKGkiByZWNvbmNpbGUg4oaSIGRlY2lkZSDihpIgd2FpdC9sb29wIG5vZGVzLCBvbmUgcnVsZSB0YWJsZS4gKi9cbmltcG9ydCB7IHBhcnNlUnVudGltZVN0YWdlSWQgfSBmcm9tICdmb290dHJhY2UnO1xuXG5pbXBvcnQgeyBkZWNpZGVBdHRlbXB0LCByZXRyeVJ1bGVzIH0gZnJvbSAnLi4vYXR0ZW1wdC9kZWNpc2lvbi5qcyc7XG5pbXBvcnQgeyBhZG1pdElkZW1wb3RlbmN5S2V5LCB0b3VjaGVzUHJvYmxlbSB9IGZyb20gJy4uL2F0dGVtcHQvZWZmZWN0LmpzJztcbmltcG9ydCB7IFVua25vd25FZmZlY3RFcnJvciB9IGZyb20gJy4uL2F0dGVtcHQvZXJyb3JzLmpzJztcbmltcG9ydCB7IGNhcHBlZFdhaXRNcywgcmV0cnlQb2xpY3lQcm9ibGVtIH0gZnJvbSAnLi4vYXR0ZW1wdC9wb2xpY3kuanMnO1xuaW1wb3J0IHR5cGUgeyBSZXRyeUxvb3BCdWRnZXQgfSBmcm9tICcuLi9hdHRlbXB0L3JldHJ5TG9vcENvbnRleHQuanMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJSZXRyeUxvb3BDYWxsIH0gZnJvbSAnLi4vYXR0ZW1wdC9yZXRyeUxvb3BDb250ZXh0LmpzJztcbmltcG9ydCB0eXBlIHsgUmV0cnlMb29wQ2FsbCB9IGZyb20gJy4uL2F0dGVtcHQvcmV0cnlMb29wVHlwZXMuanMnO1xuaW1wb3J0IHsgcmVzb2x2ZUJhY2tvZmZNcywgc2xlZXAgfSBmcm9tICcuLi9hdHRlbXB0L3J1bm5lci5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEF0dGVtcHRDb250ZXh0LFxuICBBdHRlbXB0RWZmZWN0LFxuICBBdHRlbXB0RXJyb3IsXG4gIEF0dGVtcHRJbnB1dHMsXG4gIEF0dGVtcHRSZWNvcmQsXG4gIENhbGxPcHRpb25zLFxuICBJZGVtcG90ZW5jeUtleUNvbnRleHQsXG4gIFJldHJ5UG9saWN5LFxufSBmcm9tICcuLi9hdHRlbXB0L3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRGVjaXNpb25FdmlkZW5jZSB9IGZyb20gJy4uL2RlY2lkZS90eXBlcy5qcyc7XG5pbXBvcnQgeyBERUNJU0lPTl9SRVNVTFQgfSBmcm9tICcuLi9kZWNpZGUvdHlwZXMuanMnO1xuaW1wb3J0IHsgaW50ZXJydXB0LCBpc0ludGVycnVwdFNpZ25hbCB9IGZyb20gJy4uL3BhdXNlL2ludGVycnVwdC5qcyc7XG5pbXBvcnQgeyBpc1BhdXNlU2lnbmFsIH0gZnJvbSAnLi4vcGF1c2UvdHlwZXMuanMnO1xuaW1wb3J0IHsgcmVxdWlyZVNjb3BlUnVudGltZSB9IGZyb20gJy4uL3Njb3BlL3J1bnRpbWUuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5TG9vcENvbnRleHQgZXh0ZW5kcyBBdHRlbXB0Q29udGV4dCB7XG4gIHJlYWRvbmx5IHJldHJ5TG9vcDogUmV0cnlMb29wQ2FsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXRyeUxvb3BPcHRpb25zPFRTY29wZSA9IGFueSwgVFZhbHVlID0gdW5rbm93bj4ge1xuICByZWFkb25seSB0b3VjaGVzOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlkZW1wb3RlbmN5S2V5OiAoY29udGV4dDogSWRlbXBvdGVuY3lLZXlDb250ZXh0KSA9PiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJldHJ5OiBSZXRyeVBvbGljeTtcbiAgcmVhZG9ubHkgYXR0ZW1wdDogKHNjb3BlOiBUU2NvcGUsIGNvbnRleHQ6IFJldHJ5TG9vcENvbnRleHQpID0+IFRWYWx1ZSB8IFByb21pc2U8VFZhbHVlPjtcbiAgLyoqICdub25lJyBtdXN0IGF1dGhvcml0YXRpdmVseSBlc3RhYmxpc2ggdGhhdCB0aGUgb3BlcmF0aW9uIHdhcyBub3QgYXBwbGllZDsgYW4gZW1wdHkgc2VhcmNoIGlzIG5vdCBlbm91Z2guICovXG4gIHJlYWRvbmx5IHJlY29uY2lsZTogKHNjb3BlOiBUU2NvcGUsIGNvbnRleHQ6IFJldHJ5TG9vcENvbnRleHQpID0+IEF0dGVtcHRFZmZlY3QgfCBQcm9taXNlPEF0dGVtcHRFZmZlY3Q+O1xuICByZWFkb25seSBpbnRvPzogc3RyaW5nO1xuICByZWFkb25seSBvblN0b3A/OiAndGhyb3cnIHwgJ2NvbnRpbnVlJztcbiAgcmVhZG9ubHkgd2FpdD86ICdzbGVlcCcgfCAncGF1c2UnO1xufVxuXG4vKiogT3BlcmF0aW9uYWwgc3RhdGUgc3RheXMgcmVhbDsgbm9ybWFsIHN0YXRlIHJldGVudGlvbiBzY3J1YnMgc2VsZWN0ZWQga2V5cyBhbmQgZXZlcnkgZXJyb3IgaXMgYWxyZWFkeSBzZXJ2ZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5TG9vcFN0YXRlPFRWYWx1ZSA9IHVua25vd24+IHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc2VyaWVzOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGF0dGVtcHQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgb2Y6IG51bWJlcjtcbiAgcmVhZG9ubHkgaWRlbXBvdGVuY3lLZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgZWZmZWN0OiBBdHRlbXB0RWZmZWN0O1xuICByZWFkb25seSByZWNvbmNpbGVkOiBib29sZWFuO1xuICByZWFkb25seSBvdXRjb21lPzogQXR0ZW1wdFJlY29yZFsnb3V0Y29tZSddO1xuICByZWFkb25seSBjYXRlZ29yeT86IEF0dGVtcHRSZWNvcmRbJ2NhdGVnb3J5J107XG4gIHJlYWRvbmx5IGVycm9yPzogQXR0ZW1wdEVycm9yO1xuICByZWFkb25seSB2YWx1ZT86IFRWYWx1ZTtcbiAgcmVhZG9ubHkgZGVsYXlNczogbnVtYmVyO1xuICByZWFkb25seSByZXRyeU9uOiBib29sZWFuO1xuICByZWFkb25seSByZXRyeU9uVGhyZXc/OiB0cnVlO1xuICByZWFkb25seSBkZWNpc2lvbj86IERlY2lzaW9uRXZpZGVuY2U7XG4gIHJlYWRvbmx5IHRlcm1pbmFsOiBib29sZWFuO1xuICByZWFkb25seSByZXN1bWVBdD86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEhvc3Qge1xuICBnZXRWYWx1ZShrZXk6IHN0cmluZyk6IHVua25vd247XG4gIGdldEF0dGVtcHQoKTogQXR0ZW1wdENvbnRleHQ7XG4gIGNhbGw8VD4oXG4gICAgdGFyZ2V0OiBzdHJpbmcsXG4gICAgZm46IChjb250ZXh0OiBBdHRlbXB0Q29udGV4dCkgPT4gVCB8IFByb21pc2U8VD4sXG4gICAgcG9saWN5OiBSZXRyeVBvbGljeSxcbiAgICBvcHRpb25zPzogQ2FsbE9wdGlvbnMsXG4gICk6IFByb21pc2U8VD47XG4gIHdyaXRlUmV0cnlMb29wU3RhdGUoa2V5OiBzdHJpbmcsIHN0YXRlOiBSZXRyeUxvb3BTdGF0ZSk6IHZvaWQ7XG4gIHNlcnZlUmV0cnlMb29wS2V5KGtleTogc3RyaW5nKTogc3RyaW5nO1xuICBzZXJ2ZVJldHJ5TG9vcEVycm9yKGVycm9yOiB1bmtub3duKTogQXR0ZW1wdEVycm9yO1xufVxuXG4vKiogQnVpbGRlci1vbmx5IGNvbXBvc2l0aW9uIGludGVyZmFjZTsgbm8gcnVudGltZSBlbmdpbmUga2luZCBvciBuZXcgc2NvcGUgbWV0aG9kLiAqL1xuaW50ZXJmYWNlIEJ1aWxkZXIge1xuICBhZGRGdW5jdGlvbihuYW1lOiBzdHJpbmcsIGZuOiAoc2NvcGU6IGFueSkgPT4gYW55LCBpZDogc3RyaW5nKTogdGhpcztcbiAgYWRkUGF1c2FibGVGdW5jdGlvbihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgaGFuZGxlcjogeyBleGVjdXRlKHNjb3BlOiBhbnkpOiBhbnk7IHJlc3VtZShzY29wZTogYW55LCBpbnB1dDogdW5rbm93bik6IGFueSB9LFxuICAgIGlkOiBzdHJpbmcsXG4gICk6IHRoaXM7XG4gIGFkZERlY2lkZXJGdW5jdGlvbihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgZm46IChzY29wZTogYW55KSA9PiBhbnksXG4gICAgaWQ6IHN0cmluZyxcbiAgKToge1xuICAgIGFkZEZ1bmN0aW9uQnJhbmNoKGJyYW5jaDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGZuOiAoc2NvcGU6IGFueSkgPT4gYW55LCBpZD86IHN0cmluZywgb3B0aW9ucz86IGFueSk6IGFueTtcbiAgICBlbmQoKTogQnVpbGRlcjtcbiAgfTtcbiAgdG91Y2hlcyhzeXN0ZW06IHN0cmluZywgb3B0aW9uczogeyBpZGVtcG90ZW5jeUtleTogKGNvbnRleHQ6IElkZW1wb3RlbmN5S2V5Q29udGV4dCkgPT4gc3RyaW5nIH0pOiB0aGlzO1xuICB0YWcoLi4ubmFtZXM6IHN0cmluZ1tdKTogdGhpcztcbn1cblxuY29uc3QgZmFpbCA9IChmaWVsZDogc3RyaW5nKTogbmV2ZXIgPT4ge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKGBhZGRSZXRyeUxvb3A6IGludmFsaWQgJHtmaWVsZH1gKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRSZXRyeUxvb3A8VFNjb3BlPihcbiAgYnVpbGRlcjogQnVpbGRlcixcbiAgaWQ6IHN0cmluZyxcbiAgc3VwcGxpZWQ6IFJldHJ5TG9vcE9wdGlvbnM8VFNjb3BlPixcbiAgc3RhbXA6IChidWRnZXQ6IFJldHJ5TG9vcEJ1ZGdldCwgYnJhbmNoPzogc3RyaW5nKSA9PiB2b2lkLFxuKTogdm9pZCB7XG4gIC8vIFNuYXBzaG90IG5hbWVkIGNvbmZpZ3VyYXRpb24gb25jZTsgbmV2ZXIgcmV0YWluIGFyYml0cmFyeSBjYWxsZXIgZmllbGRzIG9yIGludm9rZSBhIHBvbGljeSBjYWxsYmFjayBhdCBidWlsZC5cbiAgaWYgKHN1cHBsaWVkID09PSBudWxsIHx8IHR5cGVvZiBzdXBwbGllZCAhPT0gJ29iamVjdCcpIGZhaWwoJ29wdGlvbnMnKTtcbiAgY29uc3Qge1xuICAgIHRvdWNoZXMsXG4gICAgaWRlbXBvdGVuY3lLZXksXG4gICAgcmV0cnk6IGdpdmVuLFxuICAgIGF0dGVtcHQsXG4gICAgcmVjb25jaWxlLFxuICAgIGludG8gPSBpZCxcbiAgICBvblN0b3AgPSAndGhyb3cnLFxuICAgIHdhaXQgPSAnc2xlZXAnLFxuICB9ID0gc3VwcGxpZWQ7XG4gIGlmIChnaXZlbiA9PT0gbnVsbCB8fCB0eXBlb2YgZ2l2ZW4gIT09ICdvYmplY3QnKSBmYWlsKCdyZXRyeScpO1xuICBjb25zdCB7IGF0dGVtcHRzLCB0aW1lb3V0TXMsIGJhY2tvZmZNcywgbWF4QmFja29mZk1zLCByZXRyeU9uIH0gPSBnaXZlbjtcbiAgY29uc3QgcmV0cnk6IFJldHJ5UG9saWN5ID0gT2JqZWN0LmZyZWV6ZSh7IGF0dGVtcHRzLCB0aW1lb3V0TXMsIGJhY2tvZmZNcywgbWF4QmFja29mZk1zLCByZXRyeU9uIH0pO1xuICBpZiAocmV0cnlQb2xpY3lQcm9ibGVtKHJldHJ5KSB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIoYXR0ZW1wdHMpKSBmYWlsKCdyZXRyeSBwb2xpY3knKTtcbiAgaWYgKHRvdWNoZXNQcm9ibGVtKHsgc3lzdGVtOiB0b3VjaGVzLCBpZGVtcG90ZW5jeUtleSB9LCByZXRyeSkgfHwgdHlwZW9mIGlkZW1wb3RlbmN5S2V5ICE9PSAnZnVuY3Rpb24nKVxuICAgIGZhaWwoJ2tleSBydWxlIG9yIHN5c3RlbScpO1xuICBpZiAodHlwZW9mIGF0dGVtcHQgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHJlY29uY2lsZSAhPT0gJ2Z1bmN0aW9uJykgZmFpbCgnYXR0ZW1wdCBvciByZWNvbmNpbGlhdGlvbiBjYWxsYmFjaycpO1xuICBpZiAoXG4gICAgdHlwZW9mIGludG8gIT09ICdzdHJpbmcnIHx8XG4gICAgIWludG8gfHxcbiAgICBpbnRvLnN0YXJ0c1dpdGgoJyQnKSB8fFxuICAgIFsnX19wcm90b19fJywgJ2NvbnN0cnVjdG9yJywgJ3Byb3RvdHlwZSddLmluY2x1ZGVzKGludG8pXG4gIClcbiAgICBmYWlsKCdzdGF0ZSBrZXknKTtcbiAgaWYgKG9uU3RvcCAhPT0gJ3Rocm93JyAmJiBvblN0b3AgIT09ICdjb250aW51ZScpIGZhaWwoJ29uU3RvcCcpO1xuICBpZiAod2FpdCAhPT0gJ3NsZWVwJyAmJiB3YWl0ICE9PSAncGF1c2UnKSBmYWlsKCd3YWl0Jyk7XG4gIGNvbnN0IHRhZyA9IGByZXRyeS1sb29wOiR7aWR9YDtcbiAgY29uc3QgY2FsbGJhY2tCdWRnZXQ6IFJldHJ5TG9vcEJ1ZGdldCA9IHsgcm9sZTogJ2NhbGxiYWNrJywgdGltZW91dE1zIH07XG4gIGNvbnN0IHdhaXRCdWRnZXQ6IFJldHJ5TG9vcEJ1ZGdldCA9IHtcbiAgICByb2xlOiAnd2FpdCcsXG4gICAgd2FpdE1zOiB0eXBlb2YgYmFja29mZk1zID09PSAnZnVuY3Rpb24nID8gbWF4QmFja29mZk1zIDogY2FwcGVkV2FpdE1zKHJlc29sdmVCYWNrb2ZmTXMoYmFja29mZk1zLCAxKSwgbWF4QmFja29mZk1zKSxcbiAgfTtcbiAgY29uc3QgY29udHJvbEJ1ZGdldDogUmV0cnlMb29wQnVkZ2V0ID0geyByb2xlOiAnY29udHJvbCcgfTtcblxuICBjb25zdCBob3N0T2YgPSAoc2NvcGU6IHVua25vd24pOiBIb3N0ID0+IHtcbiAgICBjb25zdCBob3N0ID0gcmVxdWlyZVNjb3BlUnVudGltZShzY29wZSkudGFyZ2V0IGFzIHVua25vd24gYXMgSG9zdDtcbiAgICBpZiAodHlwZW9mIGhvc3Qud3JpdGVSZXRyeUxvb3BTdGF0ZSAhPT0gJ2Z1bmN0aW9uJykgZmFpbCgnc2NvcGUgY2FwYWJpbGl0eSAodXNlIGEgcmVnaXN0ZXJlZCBTY29wZUZhY2FkZSB0YXJnZXQpJyk7XG4gICAgcmV0dXJuIGhvc3Q7XG4gIH07XG4gIGNvbnN0IGNoZWNrZWQgPSAodmFsdWU6IHVua25vd24pOiBSZXRyeUxvb3BTdGF0ZSB8IHVuZGVmaW5lZCA9PiB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIGZhaWwoJ3Jlc3RvcmVkIGxvb3Agc3RhdGUnKTtcbiAgICBjb25zdCBzdGF0ZSA9IHZhbHVlIGFzIFJldHJ5TG9vcFN0YXRlO1xuICAgIGlmIChcbiAgICAgIHN0YXRlLmVycm9yICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIChzdGF0ZS5lcnJvciA9PT0gbnVsbCB8fFxuICAgICAgICB0eXBlb2Ygc3RhdGUuZXJyb3IgIT09ICdvYmplY3QnIHx8XG4gICAgICAgIHR5cGVvZiBzdGF0ZS5lcnJvci5tZXNzYWdlICE9PSAnc3RyaW5nJyB8fFxuICAgICAgICBPYmplY3Qua2V5cyhzdGF0ZS5lcnJvcikuc29tZSgoa2V5KSA9PiAhWydtZXNzYWdlJywgJ25hbWUnLCAnY29kZSddLmluY2x1ZGVzKGtleSkpKVxuICAgIClcbiAgICAgIGZhaWwoJ3Jlc3RvcmVkIGxvb3AgZXJyb3InKTtcbiAgICBpZiAoc3RhdGUucmVzdW1lQXQgIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIHN0YXRlLnJlc3VtZUF0ICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzRmluaXRlKHN0YXRlLnJlc3VtZUF0KSkpXG4gICAgICBmYWlsKCdyZXN0b3JlZCB3YWl0IHRpbWUnKTtcbiAgICBpZiAoXG4gICAgICBzdGF0ZS5pZCAhPT0gaWQgfHxcbiAgICAgIHN0YXRlLm9mICE9PSBhdHRlbXB0cyB8fFxuICAgICAgIU51bWJlci5pc0ludGVnZXIoc3RhdGUuYXR0ZW1wdCkgfHxcbiAgICAgIHN0YXRlLmF0dGVtcHQgPCAxIHx8XG4gICAgICBzdGF0ZS5hdHRlbXB0ID4gYXR0ZW1wdHMgfHxcbiAgICAgIHR5cGVvZiBzdGF0ZS5pZGVtcG90ZW5jeUtleSAhPT0gJ3N0cmluZycgfHxcbiAgICAgIHN0YXRlLmlkZW1wb3RlbmN5S2V5LnRyaW0oKSA9PT0gJycgfHxcbiAgICAgIHR5cGVvZiBzdGF0ZS5zZXJpZXMgIT09ICdzdHJpbmcnIHx8XG4gICAgICB0eXBlb2Ygc3RhdGUudGVybWluYWwgIT09ICdib29sZWFuJyB8fFxuICAgICAgIVsnbm9uZScsICd1bmtub3duJywgJ2FwcGxpZWQnXS5pbmNsdWRlcyhzdGF0ZS5lZmZlY3QpIHx8XG4gICAgICB0eXBlb2Ygc3RhdGUucmVjb25jaWxlZCAhPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB0eXBlb2Ygc3RhdGUucmV0cnlPbiAhPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAhTnVtYmVyLmlzRmluaXRlKHN0YXRlLmRlbGF5TXMpIHx8XG4gICAgICBzdGF0ZS5kZWxheU1zIDwgMFxuICAgIClcbiAgICAgIGZhaWwoJ3Jlc3RvcmVkIGxvb3Agc3RhdGUnKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VSdW50aW1lU3RhZ2VJZChzdGF0ZS5zZXJpZXMpO1xuICAgICAgaWYgKCEvI1xcZCskLy50ZXN0KHN0YXRlLnNlcmllcykgfHwgcGFyc2VkLnN0YWdlSWQgIT09IGlkKSBmYWlsKCdyZXN0b3JlZCBsb29wIHNlcmllcycpO1xuICAgICAgYWRtaXRJZGVtcG90ZW5jeUtleSgnYWRkUmV0cnlMb29wJywgc3RhdGUuaWRlbXBvdGVuY3lLZXkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgZmFpbCgncmVzdG9yZWQgbG9vcCBzZXJpZXMnKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9O1xuICBjb25zdCByZWFkID0gKGhvc3Q6IEhvc3QpOiBSZXRyeUxvb3BTdGF0ZSB8IHVuZGVmaW5lZCA9PiBjaGVja2VkKGhvc3QuZ2V0VmFsdWUoaW50bykpO1xuICBjb25zdCBpZGVudGl0eSA9IChzdGF0ZTogUmV0cnlMb29wU3RhdGUsIHBoYXNlOiBSZXRyeUxvb3BDYWxsWydwaGFzZSddKTogUmV0cnlMb29wQ2FsbCA9PlxuICAgIE9iamVjdC5mcmVlemUoeyBpZCwgc2VyaWVzOiBzdGF0ZS5zZXJpZXMsIGF0dGVtcHQ6IHN0YXRlLmF0dGVtcHQsIG9mOiBhdHRlbXB0cywgcGhhc2UgfSk7XG4gIGNvbnN0IGNhbGwgPSBhc3luYyA8VD4oXG4gICAgc2NvcGU6IFRTY29wZSxcbiAgICBob3N0OiBIb3N0LFxuICAgIHN0YXRlOiBSZXRyeUxvb3BTdGF0ZSxcbiAgICBwaGFzZTogUmV0cnlMb29wQ2FsbFsncGhhc2UnXSxcbiAgICBmbjogKHNjb3BlOiBUU2NvcGUsIGNvbnRleHQ6IFJldHJ5TG9vcENvbnRleHQpID0+IFQgfCBQcm9taXNlPFQ+LFxuICApOiBQcm9taXNlPHsgdmFsdWU/OiBUOyBlcnJvcj86IHVua25vd247IHJlY29yZD86IEF0dGVtcHRSZWNvcmQgfT4gPT4ge1xuICAgIGxldCByZWNvcmQ6IEF0dGVtcHRSZWNvcmQgfCB1bmRlZmluZWQ7XG4gICAgY29uc3QgbG9naWNhbCA9IGlkZW50aXR5KHN0YXRlLCBwaGFzZSk7XG4gICAgY29uc3QgY2xlYXIgPSByZWdpc3RlclJldHJ5TG9vcENhbGwoaG9zdCwge1xuICAgICAgaWRlbnRpdHk6IGxvZ2ljYWwsXG4gICAgICByZWNvcmQ6IChlbnRyeSkgPT4ge1xuICAgICAgICByZWNvcmQgPSBlbnRyeTtcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgaG9zdC5jYWxsKFxuICAgICAgICBwaGFzZSA9PT0gJ2F0dGVtcHQnID8gdG91Y2hlcyA6IGAke3RvdWNoZXN9LnJlY29uY2lsZWAsXG4gICAgICAgIChjb250ZXh0KSA9PiBmbihzY29wZSwgT2JqZWN0LmZyZWV6ZSh7IC4uLmNvbnRleHQsIGlkZW1wb3RlbmN5S2V5OiBzdGF0ZS5pZGVtcG90ZW5jeUtleSwgcmV0cnlMb29wOiBsb2dpY2FsIH0pKSxcbiAgICAgICAgeyBhdHRlbXB0czogMSwgLi4uKHRpbWVvdXRNcyA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHRpbWVvdXRNcyB9KSB9LFxuICAgICAgICBwaGFzZSA9PT0gJ2F0dGVtcHQnID8geyB0b3VjaGVzLCBpZGVtcG90ZW5jeUtleTogc3RhdGUuaWRlbXBvdGVuY3lLZXkgfSA6IHVuZGVmaW5lZCxcbiAgICAgICk7XG4gICAgICByZXR1cm4geyB2YWx1ZSwgcmVjb3JkIH07XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChpc1BhdXNlU2lnbmFsKGVycm9yKSB8fCBpc0ludGVycnVwdFNpZ25hbChlcnJvcikpIHRocm93IGVycm9yO1xuICAgICAgcmV0dXJuIHsgZXJyb3IsIHJlY29yZCB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICBjbGVhcigpO1xuICAgIH1cbiAgfTtcblxuICBidWlsZGVyXG4gICAgLmFkZEZ1bmN0aW9uKFxuICAgICAgYEF0dGVtcHQgJHtpZH1gLFxuICAgICAgYXN5bmMgKHNjb3BlOiBUU2NvcGUpID0+IHtcbiAgICAgICAgY29uc3QgaG9zdCA9IGhvc3RPZihzY29wZSk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gcmVhZChob3N0KTtcbiAgICAgICAgbGV0IHN0YXRlOiBSZXRyeUxvb3BTdGF0ZSA9XG4gICAgICAgICAgcHJldmlvdXMgJiYgIXByZXZpb3VzLnRlcm1pbmFsXG4gICAgICAgICAgICA/IHsgLi4ucHJldmlvdXMsIHJlY29uY2lsZWQ6IGZhbHNlIH1cbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgIHNlcmllczogaG9zdC5nZXRBdHRlbXB0KCkuc2VyaWVzLFxuICAgICAgICAgICAgICAgIGF0dGVtcHQ6IDEsXG4gICAgICAgICAgICAgICAgb2Y6IGF0dGVtcHRzLFxuICAgICAgICAgICAgICAgIGlkZW1wb3RlbmN5S2V5OiBob3N0LmdldEF0dGVtcHQoKS5pZGVtcG90ZW5jeUtleSBhcyBzdHJpbmcsXG4gICAgICAgICAgICAgICAgZWZmZWN0OiAnbm9uZScsXG4gICAgICAgICAgICAgICAgcmVjb25jaWxlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGVsYXlNczogMCxcbiAgICAgICAgICAgICAgICByZXRyeU9uOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRlcm1pbmFsOiBmYWxzZSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgaG9zdC53cml0ZVJldHJ5TG9vcFN0YXRlKGludG8sIHN0YXRlKTsgLy8gYSBwYXVzZSByZS1ydW5zIGZyb20gdGhpcyBjb21taXR0ZWQgb3BlcmF0aW9uYWwga2V5LCBuZXZlciByZWNvbXB1dGVzIGl0XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNhbGwoc2NvcGUsIGhvc3QsIHN0YXRlLCAnYXR0ZW1wdCcsIGF0dGVtcHQpO1xuICAgICAgICBjb25zdCByZWNvcmQgPSByZXN1bHQucmVjb3JkO1xuICAgICAgICBjb25zdCBmYWlsZWQgPSBPYmplY3QuaGFzT3duKHJlc3VsdCwgJ2Vycm9yJyk7XG4gICAgICAgIGxldCBhbGxvd3MgPSB0cnVlO1xuICAgICAgICBsZXQgdGhyZXcgPSBmYWxzZTtcbiAgICAgICAgbGV0IGRlbGF5TXMgPSAwO1xuICAgICAgICBpZiAoZmFpbGVkICYmIHN0YXRlLmF0dGVtcHQgPCBhdHRlbXB0cykge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsID0gcmVzdWx0LmVycm9yIGluc3RhbmNlb2YgVW5rbm93bkVmZmVjdEVycm9yID8gcmVzdWx0LmVycm9yLmNhdXNlIDogcmVzdWx0LmVycm9yO1xuICAgICAgICAgIGlmIChyZXRyeU9uKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhbGxvd3MgPSByZXRyeU9uKG9yaWdpbmFsKSA9PT0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICBhbGxvd3MgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhyZXcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYWxsb3dzKSBkZWxheU1zID0gY2FwcGVkV2FpdE1zKHJlc29sdmVCYWNrb2ZmTXMoYmFja29mZk1zLCBzdGF0ZS5hdHRlbXB0LCBvcmlnaW5hbCksIG1heEJhY2tvZmZNcyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGUgPSB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgb3V0Y29tZTogcmVjb3JkPy5vdXRjb21lID8/IChmYWlsZWQgPyAnZmFpbGVkJyA6ICdvaycpLFxuICAgICAgICAgIGVmZmVjdDogcmVjb3JkPy5lZmZlY3QgPz8gKGZhaWxlZCA/ICd1bmtub3duJyA6ICdhcHBsaWVkJyksXG4gICAgICAgICAgY2F0ZWdvcnk6IHJlY29yZD8uY2F0ZWdvcnksXG4gICAgICAgICAgLi4uKGZhaWxlZCA/IHsgZXJyb3I6IGhvc3Quc2VydmVSZXRyeUxvb3BFcnJvcihyZXN1bHQuZXJyb3IpIH0gOiB7IHZhbHVlOiByZXN1bHQudmFsdWUgfSksXG4gICAgICAgICAgcmV0cnlPbjogYWxsb3dzLFxuICAgICAgICAgIC4uLih0aHJldyA/IHsgcmV0cnlPblRocmV3OiB0cnVlIH0gOiB7fSksXG4gICAgICAgICAgZGVsYXlNcyxcbiAgICAgICAgfTtcbiAgICAgICAgaG9zdC53cml0ZVJldHJ5TG9vcFN0YXRlKGludG8sIHN0YXRlKTtcbiAgICAgIH0sXG4gICAgICBpZCxcbiAgICApXG4gICAgLnRvdWNoZXModG91Y2hlcywge1xuICAgICAgaWRlbXBvdGVuY3lLZXk6IChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gY2hlY2tlZChjb250ZXh0LmdldFN0YXRlKGludG8pKTtcbiAgICAgICAgcmV0dXJuIHByZXZpb3VzICYmICFwcmV2aW91cy50ZXJtaW5hbCA/IHByZXZpb3VzLmlkZW1wb3RlbmN5S2V5IDogaWRlbXBvdGVuY3lLZXkoY29udGV4dCk7XG4gICAgICB9LFxuICAgIH0pXG4gICAgLnRhZyh0YWcpO1xuICBzdGFtcCh7IC4uLmNhbGxiYWNrQnVkZ2V0LCBwYXNzZXM6IGF0dGVtcHRzIH0pO1xuXG4gIGJ1aWxkZXJcbiAgICAuYWRkRnVuY3Rpb24oXG4gICAgICBgUmVjb25jaWxlICR7aWR9YCxcbiAgICAgIGFzeW5jIChzY29wZTogVFNjb3BlKSA9PiB7XG4gICAgICAgIGNvbnN0IGhvc3QgPSBob3N0T2Yoc2NvcGUpO1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHJlYWQoaG9zdCkgYXMgUmV0cnlMb29wU3RhdGU7XG4gICAgICAgIGlmIChzdGF0ZS5lZmZlY3QgIT09ICd1bmtub3duJykgcmV0dXJuO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjYWxsKHNjb3BlLCBob3N0LCBzdGF0ZSwgJ3JlY29uY2lsZScsIHJlY29uY2lsZSk7XG4gICAgICAgIGNvbnN0IHZhbGlkID0gcmVzdWx0LnZhbHVlID09PSAnYXBwbGllZCcgfHwgcmVzdWx0LnZhbHVlID09PSAnbm9uZScgfHwgcmVzdWx0LnZhbHVlID09PSAndW5rbm93bic7XG4gICAgICAgIGNvbnN0IGVmZmVjdCA9IHZhbGlkID8gKHJlc3VsdC52YWx1ZSBhcyBBdHRlbXB0RWZmZWN0KSA6ICd1bmtub3duJztcbiAgICAgICAgaG9zdC53cml0ZVJldHJ5TG9vcFN0YXRlKGludG8sIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBlZmZlY3QsXG4gICAgICAgICAgcmVjb25jaWxlZDogdHJ1ZSxcbiAgICAgICAgICAuLi4oT2JqZWN0Lmhhc093bihyZXN1bHQsICdlcnJvcicpXG4gICAgICAgICAgICA/IHsgZXJyb3I6IGhvc3Quc2VydmVSZXRyeUxvb3BFcnJvcihyZXN1bHQuZXJyb3IpIH1cbiAgICAgICAgICAgIDogIXZhbGlkXG4gICAgICAgICAgICA/IHsgZXJyb3I6IHsgbmFtZTogJ1R5cGVFcnJvcicsIG1lc3NhZ2U6ICdyZXRyeSBsb29wOiBpbnZhbGlkIHJlY29uY2lsaWF0aW9uIG91dGNvbWUnIH0gfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGAke2lkfS1yZWNvbmNpbGVgLFxuICAgIClcbiAgICAudGFnKHRhZyk7XG4gIHN0YW1wKGNhbGxiYWNrQnVkZ2V0KTtcblxuICBjb25zdCBkZWNpZGVyID0gYnVpbGRlci5hZGREZWNpZGVyRnVuY3Rpb24oXG4gICAgYERlY2lkZSAke2lkfWAsXG4gICAgKHNjb3BlOiBUU2NvcGUpID0+IHtcbiAgICAgIGNvbnN0IGhvc3QgPSBob3N0T2Yoc2NvcGUpO1xuICAgICAgY29uc3Qgc3RhdGUgPSByZWFkKGhvc3QpIGFzIFJldHJ5TG9vcFN0YXRlO1xuICAgICAgY29uc3QgY29udGV4dCA9IGhvc3QuZ2V0QXR0ZW1wdCgpO1xuICAgICAgY29uc3QgbGVmdCA9IGNvbnRleHQudGltZUxlZnRNcygpO1xuICAgICAgY29uc3QgaW5wdXRzOiBBdHRlbXB0SW5wdXRzID0ge1xuICAgICAgICBvdXRjb21lOiBzdGF0ZS5lZmZlY3QgPT09ICdhcHBsaWVkJyA/ICdvaycgOiBzdGF0ZS5vdXRjb21lID8/ICdmYWlsZWQnLFxuICAgICAgICBjYXRlZ29yeTogc3RhdGUuY2F0ZWdvcnksXG4gICAgICAgIGFib3J0ZWQ6IGNvbnRleHQuc2lnbmFsLmFib3J0ZWQsXG4gICAgICAgIGF0dGVtcHQ6IHN0YXRlLmF0dGVtcHQsXG4gICAgICAgIG9mOiBhdHRlbXB0cyxcbiAgICAgICAgdGltZUxlZnRNczogbGVmdCxcbiAgICAgICAgZGVsYXlNczogc3RhdGUuZGVsYXlNcyxcbiAgICAgICAgdGltZUxlZnRBZnRlcldhaXRNczogbGVmdCAtIHN0YXRlLmRlbGF5TXMsXG4gICAgICAgIHJldHJ5T246IHN0YXRlLnJldHJ5T24gJiYgc3RhdGUuZWZmZWN0ICE9PSAndW5rbm93bicsXG4gICAgICAgIGtleVByZXNlbnQ6IHRydWUsXG4gICAgICB9O1xuICAgICAgY29uc3QgZGVjaXNpb24gPSBkZWNpZGVBdHRlbXB0KHJldHJ5UnVsZXMocmV0cnkpLCAoa2V5KSA9PiBpbnB1dHNba2V5IGFzIGtleW9mIEF0dGVtcHRJbnB1dHNdKTtcbiAgICAgIGNvbnN0IGV2aWRlbmNlOiBEZWNpc2lvbkV2aWRlbmNlID0ge1xuICAgICAgICAuLi5kZWNpc2lvbi5ldmlkZW5jZSxcbiAgICAgICAgcmV0cnlMb29wOiBPYmplY3QuZnJlZXplKHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBzZXJpZXM6IHN0YXRlLnNlcmllcyxcbiAgICAgICAgICBhdHRlbXB0OiBzdGF0ZS5hdHRlbXB0LFxuICAgICAgICAgIG9mOiBhdHRlbXB0cyxcbiAgICAgICAgICBlZmZlY3Q6IHN0YXRlLmVmZmVjdCxcbiAgICAgICAgICByZWNvbmNpbGVkOiBzdGF0ZS5yZWNvbmNpbGVkLFxuICAgICAgICAgIG5leHQ6IGRlY2lzaW9uLm5leHQsXG4gICAgICAgICAgcmVhc29uOiBkZWNpc2lvbi5yZWFzb24sXG4gICAgICAgIH0pLFxuICAgICAgfTtcbiAgICAgIGhvc3Qud3JpdGVSZXRyeUxvb3BTdGF0ZShpbnRvLCB7IC4uLnN0YXRlLCBkZWNpc2lvbjogZXZpZGVuY2UsIHRlcm1pbmFsOiBkZWNpc2lvbi5uZXh0ICE9PSAncmV0cnknIH0pO1xuICAgICAgcmV0dXJuIHsgYnJhbmNoOiBgJHtpZH0tJHtkZWNpc2lvbi5uZXh0fWAsIFtERUNJU0lPTl9SRVNVTFRdOiB0cnVlLCBldmlkZW5jZSB9O1xuICAgIH0sXG4gICAgYCR7aWR9LWRlY2lkZWAsXG4gICk7XG4gIGJ1aWxkZXIudGFnKHRhZyk7XG4gIHN0YW1wKGNvbnRyb2xCdWRnZXQpO1xuXG4gIGNvbnN0IHdhaXRTY29wZSA9IGFzeW5jIChzY29wZTogVFNjb3BlKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3QgaG9zdCA9IGhvc3RPZihzY29wZSk7XG4gICAgY29uc3Qgc3RhdGUgPSByZWFkKGhvc3QpIGFzIFJldHJ5TG9vcFN0YXRlO1xuICAgIGNvbnN0IGRlbGF5ID0gc3RhdGUucmVzdW1lQXQgPT09IHVuZGVmaW5lZCA/IHN0YXRlLmRlbGF5TXMgOiBNYXRoLm1heCgwLCBzdGF0ZS5yZXN1bWVBdCAtIERhdGUubm93KCkpO1xuICAgIGNvbnN0IHNpZ25hbCA9IGhvc3QuZ2V0QXR0ZW1wdCgpLnNpZ25hbDtcbiAgICBhd2FpdCBzbGVlcChkZWxheSwgc2lnbmFsKTtcbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHRocm93IHNpZ25hbC5yZWFzb24gPz8gbmV3IEVycm9yKCdyZXRyeSBsb29wIGFib3J0ZWQnKTtcbiAgICBob3N0LndyaXRlUmV0cnlMb29wU3RhdGUoaW50bywgeyAuLi5zdGF0ZSwgYXR0ZW1wdDogc3RhdGUuYXR0ZW1wdCArIDEsIGRlY2lzaW9uOiB1bmRlZmluZWQsIHJlc3VtZUF0OiB1bmRlZmluZWQgfSk7XG4gIH07XG4gIC8vIEJyYW5jaC1saXN0IG1ldGhvZHMga2VlcCB0aGVpciBidWlsZGVyIGN1cnNvciBvbiB0aGUgZGVjaWRlci4gVGhlIHdhaXQgY2FsbGJhY2sgaXMgYW4gb3JkaW5hcnkgYnJhbmNoO1xuICAvLyBwYXVzZSBtb2RlIHVzZXMgaW50ZXJydXB0IHNlbWFudGljcyBpbiB0aGF0IGNhbGxiYWNrIHNvIGl0cyBvd24gc3RhZ2UgcmVzdW1lcyBiZWZvcmUgaXQgbG9vcHMgYmFjay5cbiAgY29uc3Qgd2FpdEZuID1cbiAgICB3YWl0ID09PSAncGF1c2UnXG4gICAgICA/IGFzeW5jIChzY29wZTogVFNjb3BlKSA9PiB7XG4gICAgICAgICAgY29uc3QgaG9zdCA9IGhvc3RPZihzY29wZSk7XG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSByZWFkKGhvc3QpIGFzIFJldHJ5TG9vcFN0YXRlO1xuICAgICAgICAgIGlmIChzdGF0ZS5yZXN1bWVBdCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgaG9zdC53cml0ZVJldHJ5TG9vcFN0YXRlKGludG8sIHsgLi4uc3RhdGUsIHJlc3VtZUF0OiBEYXRlLm5vdygpICsgc3RhdGUuZGVsYXlNcyB9KTtcbiAgICAgICAgICBpbnRlcnJ1cHQoc2NvcGUsIHsgcmVhc29uOiBgUmV0cnkgJHtpZH1gLCBleHBlY3RzOiB7IHJlc3VtZUF0OiAocmVhZChob3N0KSBhcyBSZXRyeUxvb3BTdGF0ZSkucmVzdW1lQXQgfSB9KTtcbiAgICAgICAgICBhd2FpdCB3YWl0U2NvcGUoc2NvcGUpO1xuICAgICAgICB9XG4gICAgICA6IHdhaXRTY29wZTtcbiAgZGVjaWRlclxuICAgIC5hZGRGdW5jdGlvbkJyYW5jaChgJHtpZH0tcmV0cnlgLCBgV2FpdCAke2lkfWAsIHdhaXRGbiwgdW5kZWZpbmVkLCB7IGxvb3BUbzogaWQsIHRhZ3M6IFt0YWddIH0pXG4gICAgLmFkZEZ1bmN0aW9uQnJhbmNoKGAke2lkfS1kb25lYCwgYERvbmUgJHtpZH1gLCAoKSA9PiB1bmRlZmluZWQsIHVuZGVmaW5lZCwgeyB0YWdzOiBbdGFnXSB9KVxuICAgIC5hZGRGdW5jdGlvbkJyYW5jaChcbiAgICAgIGAke2lkfS1zdG9wYCxcbiAgICAgIGBTdG9wICR7aWR9YCxcbiAgICAgIChzY29wZTogVFNjb3BlKSA9PiB7XG4gICAgICAgIGlmIChvblN0b3AgPT09ICdjb250aW51ZScpIHJldHVybjtcbiAgICAgICAgY29uc3QgaG9zdCA9IGhvc3RPZihzY29wZSk7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gcmVhZChob3N0KSBhcyBSZXRyeUxvb3BTdGF0ZTtcbiAgICAgICAgY29uc3QgY2F1c2UgPSBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihzdGF0ZS5lcnJvcj8ubWVzc2FnZSA/PyAncmV0cnkgbG9vcCBzdG9wcGVkJyksIHtcbiAgICAgICAgICBuYW1lOiBzdGF0ZS5lcnJvcj8ubmFtZSA/PyAnRXJyb3InLFxuICAgICAgICAgIC4uLihzdGF0ZS5lcnJvcj8uY29kZSA/IHsgY29kZTogc3RhdGUuZXJyb3IuY29kZSB9IDoge30pLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHN0YXRlLmVmZmVjdCA9PT0gJ3Vua25vd24nKVxuICAgICAgICAgIHRocm93IG5ldyBVbmtub3duRWZmZWN0RXJyb3Ioe1xuICAgICAgICAgICAgc3lzdGVtOiB0b3VjaGVzLFxuICAgICAgICAgICAgaWRlbXBvdGVuY3lLZXk6IGhvc3Quc2VydmVSZXRyeUxvb3BLZXkoc3RhdGUuaWRlbXBvdGVuY3lLZXkpLFxuICAgICAgICAgICAgYXR0ZW1wdHM6IHN0YXRlLmF0dGVtcHQsXG4gICAgICAgICAgICBjYXVzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgY2F1c2U7XG4gICAgICB9LFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgeyB0YWdzOiBbdGFnXSB9LFxuICAgIClcbiAgICAuZW5kKCk7XG4gIC8vIEJyYW5jaCBub2RlcyBhcmUgYXNzaWduZWQgdGhlaXIgYm91bmRlZCBoZWxwZXIgY29zdHMgYnkgdGhlIGJ1aWxkZXIgYWZ0ZXIgY29uc3RydWN0aW9uLlxuICBzdGFtcCh3YWl0QnVkZ2V0LCBgJHtpZH0tcmV0cnlgKTtcbiAgc3RhbXAoY29udHJvbEJ1ZGdldCwgYCR7aWR9LWRvbmVgKTtcbiAgc3RhbXAoY29udHJvbEJ1ZGdldCwgYCR7aWR9LXN0b3BgKTtcbn1cbiJdfQ==
@@ -13,4 +13,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
13
13
  exports.ArrayMergeMode = void 0;
14
14
  var types_js_1 = require("../engine/types.js");
15
15
  Object.defineProperty(exports, "ArrayMergeMode", { enumerable: true, get: function () { return types_js_1.ArrayMergeMode; } });
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7R0FTRzs7O0FBd0JILCtDQUFvRDtBQUEzQywwR0FBQSxjQUFjLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGJ1aWxkZXIvdHlwZXMudHMg4oCUIEFsbCB0eXBlcyB1c2VkIGJ5IHRoZSBidWlsZGVyIGxpYnJhcnkuXG4gKlxuICogU2hhcmVkIHR5cGVzIChTdGFnZU5vZGUsIFN0YWdlRnVuY3Rpb24sIGV0Yy4pIGFyZSBpbXBvcnRlZCBmcm9tIHRoZSBlbmdpbmUuXG4gKiBCdWlsZGVyLXNwZWNpZmljIHR5cGVzIChGbG93Q2hhcnRTcGVjLCBGbG93Q2hhcnQsIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSlcbiAqIGFyZSBkZWZpbmVkIGxvY2FsbHkg4oCUIHRoZXkgY2FycnkgYnVpbGRlci1vbmx5IGZpZWxkcyAoZGVzY3JpcHRpb24sIG91dHB1dE1hcHBlciwgZXRjLikuXG4gKlxuICogTk9URTogQWxsIGVuZ2luZSBpbXBvcnRzIGFyZSBgaW1wb3J0IHR5cGVgIOKAlCB6ZXJvIHJ1bnRpbWUgZGVwZW5kZW5jeS5cbiAqIFRoZSBidWlsZGVyIHJlbWFpbnMgc3RhbmRhbG9uZSBhdCBydW50aW1lLlxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VOb2RlIH0gZnJvbSAnLi4vZW5naW5lL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IElMb2dnZXIsIFJldHJ5UG9saWN5LCBTY29wZUZhY3RvcnksIFN0YWdlRnVuY3Rpb24gfSBmcm9tICcuLi9lbmdpbmUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTY29wZVByb3RlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vc2NvcGUvcHJvdGVjdGlvbi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0cnVjdHVyZVJlY29yZGVyIH0gZnJvbSAnLi9zdHJ1Y3R1cmUvU3RydWN0dXJlUmVjb3JkZXIuanMnO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFJlLWV4cG9ydHMgZnJvbSBlbmdpbmUgKGNhbm9uaWNhbCBkZWZpbml0aW9ucylcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSB7IFJlc3VtZUZuLCBTdGFnZU5vZGUgfSBmcm9tICcuLi9lbmdpbmUvZ3JhcGgvU3RhZ2VOb2RlLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgQnJhbmNoQ2hhcnQsXG4gIElMb2dnZXIsXG4gIFBhcmFsbGVsRm9yRWFjaENvbmZpZyxcbiAgUmV0cnlQb2xpY3ksXG4gIFN0YWdlRnVuY3Rpb24sXG4gIFN0cmVhbUNhbGxiYWNrLFxuICBTdHJlYW1IYW5kbGVycyxcbiAgU3RyZWFtTGlmZWN5Y2xlSGFuZGxlcixcbiAgU3RyZWFtVG9rZW5IYW5kbGVyLFxuICBTdWJmbG93TW91bnRPcHRpb25zLFxufSBmcm9tICcuLi9lbmdpbmUvdHlwZXMuanMnO1xuZXhwb3J0IHsgQXJyYXlNZXJnZU1vZGUgfSBmcm9tICcuLi9lbmdpbmUvdHlwZXMuanMnO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEFsaWFzZXNcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogUmVsYXhlZC1nZW5lcmljIGFsaWFzIGZvciBidWlsZGVyIGVyZ29ub21pY3MuICovXG5leHBvcnQgdHlwZSBTdGFnZUZuID0gU3RhZ2VGdW5jdGlvbjxhbnksIGFueT47XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2NvcGUgUHJvdGVjdGlvbiDigJQgY2Fub25pY2FsIGRlZmluaXRpb24gaW4gc2NvcGUvcHJvdGVjdGlvbi90eXBlcy50c1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIHsgU2NvcGVQcm90ZWN0aW9uTW9kZSB9O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFNlcmlhbGl6ZWQgUGlwZWxpbmUgU3RydWN0dXJlIChKU09OLXNhZmUsIGZvciB2aXN1YWxpemF0aW9uKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICB0eXBlOiAnc3RhZ2UnIHwgJ2RlY2lkZXInIHwgJ3NlbGVjdG9yJyB8ICdmb3JrJyB8ICdzdHJlYW1pbmcnIHwgJ3N1YmZsb3cnIHwgJ2xvb3AnO1xuICAvKiogU2VtYW50aWMgaWNvbiBoaW50IGZvciB2aXN1YWxpemF0aW9uIChlLmcuLCBcImxsbVwiLCBcInRvb2xcIiwgXCJyYWdcIiwgXCJhZ2VudFwiLCBcInN0YXJ0XCIpICovXG4gIGljb24/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZVtdO1xuICBuZXh0PzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBoYXNEZWNpZGVyPzogYm9vbGVhbjtcbiAgaGFzU2VsZWN0b3I/OiBib29sZWFuO1xuICBicmFuY2hJZHM/OiBzdHJpbmdbXTtcbiAgbG9vcFRhcmdldD86IHN0cmluZztcbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBpc1N1YmZsb3dSb290PzogYm9vbGVhbjtcbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIE5lc3RlZCBwaXBlbGluZSBzdHJ1Y3R1cmUgZm9yIGEgc3ViZmxvdyBub2RlLlxuICAgKiBXQVJOSU5HOiBBbnkgZnV0dXJlIHdhbGtlciB0aGF0IHRyYXZlcnNlcyB0aGlzIGZpZWxkIHJlY3Vyc2l2ZWx5IG11c3QgYXBwbHkgaXRzIG93blxuICAgKiBkZXB0aCBhbmQgY3ljbGUgZ3VhcmRzIGFjcm9zcyBib3RoIHRoZSBgbmV4dGAgY2hhaW4gYW5kIHRoaXMgbmVzdGVkIHN0cnVjdHVyZS5cbiAgICogQ2hhcnQgT3BlbkFQSSBnZW5lcmF0aW9uIHJlYWRzIHRoZSBidWlsZGVyLXByZXBhcmVkIGRlc2NyaXB0aW9uLCBub3QgdGhpcyBncmFwaC5cbiAgICovXG4gIHN1YmZsb3dTdHJ1Y3R1cmU/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIGl0ZXJhdGlvbkNvdW50PzogbnVtYmVyO1xuICAvKiogVHJ1ZSB3aGVuIHRoaXMgc3ViZmxvdyB1c2VzIGxhenkgcmVzb2x1dGlvbiAoZGVmZXJyZWQgdW50aWwgZXhlY3V0aW9uKS4gKi9cbiAgaXNMYXp5PzogYm9vbGVhbjtcbiAgLyoqIFRydWUgd2hlbiB0aGlzIG5vZGUgaXMgYSBiYWNrLWVkZ2UgcmVmZXJlbmNlIGNyZWF0ZWQgYnkgbG9vcFRvKCkg4oCUIG5vdCBhbiBleGVjdXRhYmxlIHN0YWdlLiAqL1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlLCB0aGlzIHN0YWdlIGNhbiBwYXVzZSBleGVjdXRpb24gKFBhdXNhYmxlSGFuZGxlciBwYXR0ZXJuKS4gKi9cbiAgaXNQYXVzYWJsZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUcnVlIGZvciBhbiBgYWRkUGFyYWxsZWxGb3JFYWNoYCBmYW4tb3V0IOKAlCBvbmUgYnJhbmNoIHBlciBpdGVtLCBjb3VudFxuICAgKiBkZWNpZGVkIGF0IHJ1bnRpbWUuIEEgZmxhZywgbm90IGEgdHlwZTogYHR5cGVgIHN0YXlzIGAnZm9yaydgIHNvIGV4aXN0aW5nXG4gICAqIGNvbnN1bWVycyBrZWVwIHJlbmRlcmluZyBpdCBhcyB0aGUgZmFuLW91dCBpdCBpcy5cbiAgICovXG4gIGlzRHluYW1pY1BhcmFsbGVsPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRvdGFsIGF0dGVtcHRzIHRoaXMgc3RhZ2UncyBmdW5jdGlvbiBtYXkgcnVuLCBmcm9tIGl0cyBkZWNsYXJlZFxuICAgKiB7QGxpbmsgUmV0cnlQb2xpY3l9LiBQcmVzZW50IG9ubHkgd2hlbiBhIHBvbGljeSB3YXMgZGVjbGFyZWQg4oCUIHRoZSBDT1VOVFxuICAgKiBvbmx5LCBiZWNhdXNlIGBiYWNrb2ZmTXNgIGFuZCBgcmV0cnlPbmAgY2FuIGJlIGZ1bmN0aW9ucyBhbmQgYSBKU09OLXNhZmVcbiAgICogc3BlYyBjYW5ub3QgY2FycnkgdGhvc2UuXG4gICAqXG4gICAqIFJlYWQgaXQgZnJvbSB0aGUgQlVJTFQgc3BlYyAoYGNoYXJ0LmJ1aWxkVGltZVN0cnVjdHVyZWAgLyBgdG9TcGVjKClgKSwgbm90XG4gICAqIGZyb20gYSBgU3RydWN0dXJlUmVjb3JkZXIub25TdGFnZUFkZGVkYCBldmVudDogdGhlIGAucmV0cnkoKWAgbW9kaWZpZXIgaXNcbiAgICogY2hhaW5lZCBBRlRFUiB0aGUgc3RhZ2UgaXMgYWRkZWQsIHNvIHRoZSBldmVudCBmaXJlcyBmaXJzdC4gVGhhdCBpcyB3aHlcbiAgICogdGhlcmUgaXMgbm8gYHJldHJ5QXR0ZW1wdHNgIGRpc2NyaW1pbmF0b3Igb24gdGhlIGV2ZW50IHBheWxvYWQg4oCUIGl0IHdvdWxkXG4gICAqIGJlIGB1bmRlZmluZWRgIGF0IGZpcmUgdGltZSBmb3IgZXhhY3RseSB0aGUgc3RhZ2VzIHRoYXQgaGF2ZSBhIHBvbGljeS5cbiAgICovXG4gIHJldHJ5QXR0ZW1wdHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBEZWNsYXJlZCB0YWdzICg5LjIxLjApIOKAlCB0aGUgTkFNRVMgdGhlIGF1dGhvciBwdXQgb24gdGhpcyBzdGFnZSBhdCBidWlsZFxuICAgKiB0aW1lLCBjb3BpZWQgYXMtaXMgKEpTT04tc2FmZSwgZnJlZSBzdHJpbmdzOyBmb290cHJpbnRqcyBvd25zIG5vXG4gICAqIHZvY2FidWxhcnkpLiBUaGUgTWFwIGFkdmVydGlzZXMgd2hhdCBhIGNoYXJ0IENBTiBwcm9kdWNlOyB0aGUgY29tbWl0XG4gICAqIGJ1bmRsZSAoYENvbW1pdEJ1bmRsZS50YWdzYCkgcmVjb3JkcyB3aGljaCBhIHJ1biBESUQgaGl0LiBBYnNlbnQgd2hlbiB0aGVcbiAgICogc3RhZ2UgZGVjbGFyZXMgbm9uZS4gU2FtZSByZWFkLWl0LWZyb20tdGhlLWJ1aWx0LXNwZWMgY2F2ZWF0IGFzXG4gICAqIGByZXRyeUF0dGVtcHRzYDogYC50YWcoKWAgaXMgY2hhaW5lZCBBRlRFUiBgb25TdGFnZUFkZGVkYCBmaXJlcy5cbiAgICovXG4gIHRhZ3M/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFNUUlVDVFVSRS1PTkxZOiBmb3IgYSBmb3JrL3NlbGVjdG9yL2RlY2lkZXIgYnJhbmNoLCB0aGUgZG93bnN0cmVhbSBzdGFnZVxuICAgKiBpZCBpdHMgY29udmVyZ2VuY2UgYG5leHRgIGVkZ2UgcG9pbnRzIHRvLCBpbnN0ZWFkIG9mIHRoZSBzaGFyZWQgbmV4dC1zdGFnZVxuICAgKiBpdHMgc2libGluZ3MgY29udmVyZ2UgYXQuIFNldCBmcm9tIGBTdWJmbG93TW91bnRPcHRpb25zLmNvbnZlcmdlQXRgOyByZWFkIGJ5XG4gICAqIGBfZmlyZU5leHRFZGdlRnJvbVBhcmVudGAgdG8gZXhwcmVzcyBhbiB1bmVxdWFsLWRlcHRoIG1lcmdlIChlLmcuIHRvb2xzIOKGklxuICAgKiBjYWxsLWxsbSwgYnlwYXNzaW5nIG1lc3NhZ2UtYXBpKS4gVmlzdWFsaXphdGlvbi1vbmx5IOKAlCBydW50aW1lIGNvbnZlcmdlbmNlXG4gICAqIGlzIHVuY2hhbmdlZC5cbiAgICovXG4gIGNvbnZlcmdlQXQ/OiBzdHJpbmc7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRmxvd0NoYXJ0U3BlYyAocHVyZSBKU09OLCBubyBmdW5jdGlvbnMg4oCUIGZvciBGReKGkkJFIHRyYW5zcG9ydClcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dDaGFydFNwZWMge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBOb2RlIHR5cGUg4oCUIG1hdGNoZXMgYFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZS50eXBlYCBmb3IgdmlzdWFsaXphdGlvbiBhbGlnbm1lbnQuICovXG4gIHR5cGU/OiAnc3RhZ2UnIHwgJ2RlY2lkZXInIHwgJ3NlbGVjdG9yJyB8ICdmb3JrJyB8ICdzdHJlYW1pbmcnIHwgJ3N1YmZsb3cnIHwgJ2xvb3AnO1xuICAvKiogU2VtYW50aWMgaWNvbiBoaW50IGZvciB2aXN1YWxpemF0aW9uIChlLmcuLCBcImxsbVwiLCBcInRvb2xcIiwgXCJyYWdcIiwgXCJhZ2VudFwiLCBcInN0YXJ0XCIpICovXG4gIGljb24/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IEZsb3dDaGFydFNwZWNbXTtcbiAgbmV4dD86IEZsb3dDaGFydFNwZWM7XG4gIGhhc0RlY2lkZXI/OiBib29sZWFuO1xuICBoYXNTZWxlY3Rvcj86IGJvb2xlYW47XG4gIGJyYW5jaElkcz86IHN0cmluZ1tdO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc1N0cmVhbWluZz86IGJvb2xlYW47XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBpc1BhcmFsbGVsQ2hpbGQ/OiBib29sZWFuO1xuICBwYXJhbGxlbEdyb3VwSWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICAvKiogVHJ1ZSB3aGVuIHRoaXMgbm9kZSBpcyBhIGJhY2stZWRnZSByZWZlcmVuY2UgY3JlYXRlZCBieSBsb29wVG8oKSDigJQgbm90IGFuIGV4ZWN1dGFibGUgc3RhZ2UuICovXG4gIGlzTG9vcFJlZmVyZW5jZT86IGJvb2xlYW47XG4gIC8qKiBUcnVlIGZvciBhbiBgYWRkUGFyYWxsZWxGb3JFYWNoYCBmYW4tb3V0IChgdHlwZWAgc3RheXMgYCdmb3JrJ2ApLiAqL1xuICBpc0R5bmFtaWNQYXJhbGxlbD86IGJvb2xlYW47XG4gIC8qKiBUb3RhbCBhdHRlbXB0cyBhbGxvd2VkIGJ5IHRoaXMgc3RhZ2UncyBkZWNsYXJlZCByZXRyeSBwb2xpY3kg4oCUIHRoZSBjb3VudFxuICAgKiAgb25seSAoc2VlIGBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUucmV0cnlBdHRlbXB0c2ApLiAqL1xuICByZXRyeUF0dGVtcHRzPzogbnVtYmVyO1xuICAvKiogRGVjbGFyZWQgdGFncyBvbiB0aGlzIHN0YWdlLCBhcy1pcyAoc2VlIGBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUudGFnc2ApLiAqL1xuICB0YWdzPzogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gZmxvd0NoYXJ0KCkgb3B0aW9ucyBiYWdcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIE9wdGlvbnMtYmFnIGFyZ3VtZW50IHNoYXBlIGZvciB0aGUgYGZsb3dDaGFydCgpYCBmYWN0b3J5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dDaGFydE9wdGlvbnMge1xuICAvKipcbiAgICogQnVpbGQtdGltZSByZWNvcmRlcnMgdG8gYXR0YWNoIEJFRk9SRSBgc3RhcnQoKWAgZmlyZXMuIEVxdWl2YWxlbnRcbiAgICogdG8gY2hhaW5pbmcgYC5hdHRhY2hTdHJ1Y3R1cmVSZWNvcmRlcihyZWMpYCBpbW1lZGlhdGVseSBhZnRlciB0aGVcbiAgICogZmFjdG9yeSByZXR1cm5zIOKAlCBidXQgcmVnaXN0ZXJlZCBFQVJMSUVSLCBzbyBldmVuIHRoZSBzZWVkIGV2ZW50XG4gICAqIGZpcmVzIHRocm91Z2ggdGhlIGRpc3BhdGNoZXIgd2l0aG91dCBuZWVkaW5nIHRoZSBzZWVkLXJlcGxheSBwYXRoLlxuICAgKlxuICAgKiBNdWx0aXBsZSByZWNvcmRlcnMgYXR0YWNoIGluIGFycmF5IG9yZGVyIChzYW1lIGFzXG4gICAqIGAuYXR0YWNoU3RydWN0dXJlUmVjb3JkZXJgIHJlcGVhdGVkKS4gU2VlIGBTdHJ1Y3R1cmVSZWNvcmRlcmAgSlNEb2NcbiAgICogZm9yIGV2ZW50IHNlbWFudGljcywgb3JkZXJpbmcgaW52YXJpYW50cywgYW5kIHRoZSB0cnVzdCBtb2RlbC5cbiAgICovXG4gIHN0cnVjdHVyZVJlY29yZGVycz86IFN0cnVjdHVyZVJlY29yZGVyW107XG4gIC8qKiBGcmVlLWZvcm0gZGVzY3JpcHRpb24gc2hvd24gb24gdGhlIHJvb3Qgc3BlYyBub2RlLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIE9ubHkgbWVhbmluZ2Z1bCBmb3IgYGZsb3dDaGFydFNlbGVjdG9yYCAoYSByb290IHNlbGVjdG9yKS4gV2hlbiB0aGVcbiAgICogc2VsZWN0b3IgcGlja3Mg4omlMiBicmFuY2hlcyB0aGV5IGZhbiBvdXQgaW4gcGFyYWxsZWw6IGBmYWlsRmFzdDogdHJ1ZWBcbiAgICogdXNlcyBgUHJvbWlzZS5hbGxgIChmaXJzdCBicmFuY2ggZXJyb3IgcmVqZWN0cyArIGFib3J0cyksIHRoZSBkZWZhdWx0XG4gICAqIHVzZXMgYFByb21pc2UuYWxsU2V0dGxlZGAgKGJlc3QtZWZmb3J0IOKAlCBhbGwgYnJhbmNoZXMgcnVuIGV2ZW4gaWYgc29tZVxuICAgKiBmYWlsKS4gVXNlIGZhaWwtZmFzdCB3aGVuIGFsbCBzZWxlY3RlZCBicmFuY2hlcyBhcmUgUkVRVUlSRUQuIElnbm9yZWQgZm9yXG4gICAqIG5vbi1zZWxlY3RvciBjaGFydHMuIFNhbWUgZmxhZyBgYWRkU2VsZWN0b3JGdW5jdGlvbmAgLyBgYWRkTGlzdE9mRnVuY3Rpb25gXG4gICAqIGV4cG9zZS5cbiAgICovXG4gIGZhaWxGYXN0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIERlY2xhcmF0aXZlIHJldHJ5IHBvbGljeSBmb3IgdGhlIGNoYXJ0J3MgRklSU1Qgc3RhZ2UgKHRoZSBvbmUgdGhpcyBmYWN0b3J5XG4gICAqIGRlY2xhcmVzKS4gTGF0ZXIgc3RhZ2VzIHVzZSB0aGUgYC5yZXRyeSgpYCBtb2RpZmllciwgb3IgdGhlIGByZXRyeWAgb3B0aW9uXG4gICAqIGF0IHRoZWlyIG93biBkZWNsYXJhdGlvbiBzaXRlLiBTZWUge0BsaW5rIFJldHJ5UG9saWN5fS5cbiAgICovXG4gIHJldHJ5PzogUmV0cnlQb2xpY3k7XG4gIC8qKlxuICAgKiBEZWNsYXJlZCB0YWdzIGZvciB0aGUgY2hhcnQncyBGSVJTVCBzdGFnZS4gTGF0ZXIgc3RhZ2VzIHVzZSB0aGUgYC50YWcoKWBcbiAgICogbW9kaWZpZXIsIG9yIHRoZSBgdGFnc2Agb3B0aW9uIGF0IHRoZWlyIG93biBkZWNsYXJhdGlvbiBzaXRlLiBBIHRhZyBpcyBhXG4gICAqIE5BTUUgZGVjbGFyZWQgYXQgYnVpbGQgdGltZSDigJQgbmV2ZXIgYSB2YWx1ZSDigJQgYW5kIGlzIHN0YW1wZWQgb24gZXZlcnlcbiAgICogY29tbWl0IGJ1bmRsZSB0aGUgc3RhZ2UgcmVjb3JkcyAoYENvbW1pdEJ1bmRsZS50YWdzYCksIHNvIGEgc3RvcmVkXG4gICAqIHJlY29yZGluZyBjYXJyaWVzIGl0cyBvd24gbWlsZXN0b25lcy4gU2VlIGBGbG93Q2hhcnRCdWlsZGVyLnRhZ2AuXG4gICAqL1xuICB0YWdzPzogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRmxvd0NoYXJ0IOKAlCBjb21waWxlZCBvdXRwdXQgb2YgYnVpbGQoKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIEZsb3dDaGFydDxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0ge1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgc3RhZ2VNYXA6IE1hcDxzdHJpbmcsIFN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPj47XG4gIHN1YmZsb3dzPzogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB9PjtcbiAgYnVpbGRUaW1lU3RydWN0dXJlOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIGVuYWJsZU5hcnJhdGl2ZT86IGJvb2xlYW47XG4gIGxvZ2dlcj86IElMb2dnZXI7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHN0YWdlRGVzY3JpcHRpb25zOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogSW5wdXQgc2NoZW1hIChab2Qgb3IgSlNPTiBTY2hlbWEpIOKAlCBkZWNsYXJlZCB2aWEgc2V0SW5wdXRTY2hlbWEoKSBvciAuY29udHJhY3QoKS4gKi9cbiAgaW5wdXRTY2hlbWE/OiB1bmtub3duO1xuICAvKiogT3V0cHV0IHNjaGVtYSAoWm9kIG9yIEpTT04gU2NoZW1hKSDigJQgZGVjbGFyZWQgdmlhIHNldE91dHB1dFNjaGVtYSgpIG9yIC5jb250cmFjdCgpLiAqL1xuICBvdXRwdXRTY2hlbWE/OiB1bmtub3duO1xuICAvKiogT3V0cHV0IG1hcHBlciDigJQgZXh0cmFjdHMgcmVzcG9uc2UgZnJvbSBmaW5hbCBzY29wZS4gKi9cbiAgb3V0cHV0TWFwcGVyPzogKGZpbmFsU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB1bmtub3duO1xuICAvKiogU2NvcGUgZmFjdG9yeSDigJQgYXV0by1lbWJlZGRlZCBieSBmbG93Q2hhcnQ8VD4oKS4gRXhlY3V0b3IgcmVhZHMgdGhpcyBpZiBubyBmYWN0b3J5IHBhcmFtLiAqL1xuICBzY29wZUZhY3Rvcnk/OiBTY29wZUZhY3Rvcnk8VFNjb3BlPjtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2ltcGxpZmllZCBQYXJhbGxlbCBTcGVjIChmb3IgYWRkTGlzdE9mRnVuY3Rpb24pXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgU2ltcGxpZmllZFBhcmFsbGVsU3BlYzxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGZuPzogU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+O1xuICAvKiogRGVjbGFyYXRpdmUgcmV0cnkgcG9saWN5IGZvciB0aGlzIGZvcmsgY2hpbGQuIEZvcmsgYnJhbmNoZXMgYXJlIHdoZXJlXG4gICAqICBmbGFreSBJL08gdXN1YWxseSBsaXZlcywgc28gZWFjaCBjaGlsZCBkZWNsYXJlcyBpdHMgb3duLiAqL1xuICByZXRyeT86IFJldHJ5UG9saWN5O1xuICAvKiogRGVjbGFyZWQgdGFncyBmb3IgdGhpcyBmb3JrIGNoaWxkIOKAlCBlYWNoIGNoaWxkJ3MgYnVuZGxlIGNhcnJpZXMgaXRzIG93bi4gKi9cbiAgdGFncz86IHJlYWRvbmx5IHN0cmluZ1tdO1xufTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBFeGVjT3B0aW9ucyAoZm9yIGV4ZWN1dGUoKSBjb252ZW5pZW5jZSDigJQgdXNlZCBieSBydW5uZXIgbGF5ZXIpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgRXhlY09wdGlvbnMgPSB7XG4gIGRlZmF1bHRzPzogdW5rbm93bjtcbiAgaW5pdGlhbD86IHVua25vd247XG4gIHJlYWRPbmx5PzogdW5rbm93bjtcbiAgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcj86IChlOiB1bmtub3duKSA9PiBib29sZWFuO1xuICBzY29wZVByb3RlY3Rpb25Nb2RlPzogU2NvcGVQcm90ZWN0aW9uTW9kZTtcbiAgZW5hYmxlTmFycmF0aXZlPzogYm9vbGVhbjtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU3ViZmxvd1JlZlxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1JlZiB7XG4gICRyZWY6IHN0cmluZztcbiAgbW91bnRJZDogc3RyaW5nO1xufVxuIl19
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7R0FTRzs7O0FBd0JILCtDQUFvRDtBQUEzQywwR0FBQSxjQUFjLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGJ1aWxkZXIvdHlwZXMudHMg4oCUIEFsbCB0eXBlcyB1c2VkIGJ5IHRoZSBidWlsZGVyIGxpYnJhcnkuXG4gKlxuICogU2hhcmVkIHR5cGVzIChTdGFnZU5vZGUsIFN0YWdlRnVuY3Rpb24sIGV0Yy4pIGFyZSBpbXBvcnRlZCBmcm9tIHRoZSBlbmdpbmUuXG4gKiBCdWlsZGVyLXNwZWNpZmljIHR5cGVzIChGbG93Q2hhcnRTcGVjLCBGbG93Q2hhcnQsIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSlcbiAqIGFyZSBkZWZpbmVkIGxvY2FsbHkg4oCUIHRoZXkgY2FycnkgYnVpbGRlci1vbmx5IGZpZWxkcyAoZGVzY3JpcHRpb24sIG91dHB1dE1hcHBlciwgZXRjLikuXG4gKlxuICogTk9URTogQWxsIGVuZ2luZSBpbXBvcnRzIGFyZSBgaW1wb3J0IHR5cGVgIOKAlCB6ZXJvIHJ1bnRpbWUgZGVwZW5kZW5jeS5cbiAqIFRoZSBidWlsZGVyIHJlbWFpbnMgc3RhbmRhbG9uZSBhdCBydW50aW1lLlxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VOb2RlIH0gZnJvbSAnLi4vZW5naW5lL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IElMb2dnZXIsIFJldHJ5UG9saWN5LCBTY29wZUZhY3RvcnksIFN0YWdlRnVuY3Rpb24sIFN0YWdlVG91Y2hlcyB9IGZyb20gJy4uL2VuZ2luZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNjb3BlUHJvdGVjdGlvbk1vZGUgfSBmcm9tICcuLi9zY29wZS9wcm90ZWN0aW9uL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU3RydWN0dXJlUmVjb3JkZXIgfSBmcm9tICcuL3N0cnVjdHVyZS9TdHJ1Y3R1cmVSZWNvcmRlci5qcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gUmUtZXhwb3J0cyBmcm9tIGVuZ2luZSAoY2Fub25pY2FsIGRlZmluaXRpb25zKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIHsgUmVzdW1lRm4sIFN0YWdlTm9kZSB9IGZyb20gJy4uL2VuZ2luZS9ncmFwaC9TdGFnZU5vZGUuanMnO1xuZXhwb3J0IHR5cGUge1xuICBCcmFuY2hDaGFydCxcbiAgSUxvZ2dlcixcbiAgUGFyYWxsZWxGb3JFYWNoQ29uZmlnLFxuICBSZXRyeVBvbGljeSxcbiAgU3RhZ2VGdW5jdGlvbixcbiAgU3RyZWFtQ2FsbGJhY2ssXG4gIFN0cmVhbUhhbmRsZXJzLFxuICBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyLFxuICBTdHJlYW1Ub2tlbkhhbmRsZXIsXG4gIFN1YmZsb3dNb3VudE9wdGlvbnMsXG59IGZyb20gJy4uL2VuZ2luZS90eXBlcy5qcyc7XG5leHBvcnQgeyBBcnJheU1lcmdlTW9kZSB9IGZyb20gJy4uL2VuZ2luZS90eXBlcy5qcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gQWxpYXNlc1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBSZWxheGVkLWdlbmVyaWMgYWxpYXMgZm9yIGJ1aWxkZXIgZXJnb25vbWljcy4gKi9cbmV4cG9ydCB0eXBlIFN0YWdlRm4gPSBTdGFnZUZ1bmN0aW9uPGFueSwgYW55PjtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTY29wZSBQcm90ZWN0aW9uIOKAlCBjYW5vbmljYWwgZGVmaW5pdGlvbiBpbiBzY29wZS9wcm90ZWN0aW9uL3R5cGVzLnRzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgeyBTY29wZVByb3RlY3Rpb25Nb2RlIH07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2VyaWFsaXplZCBQaXBlbGluZSBTdHJ1Y3R1cmUgKEpTT04tc2FmZSwgZm9yIHZpc3VhbGl6YXRpb24pXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6ICdzdGFnZScgfCAnZGVjaWRlcicgfCAnc2VsZWN0b3InIHwgJ2ZvcmsnIHwgJ3N0cmVhbWluZycgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG4gIC8qKiBTZW1hbnRpYyBpY29uIGhpbnQgZm9yIHZpc3VhbGl6YXRpb24gKGUuZy4sIFwibGxtXCIsIFwidG9vbFwiLCBcInJhZ1wiLCBcImFnZW50XCIsIFwic3RhcnRcIikgKi9cbiAgaWNvbj86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlW107XG4gIG5leHQ/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIGhhc0RlY2lkZXI/OiBib29sZWFuO1xuICBoYXNTZWxlY3Rvcj86IGJvb2xlYW47XG4gIGJyYW5jaElkcz86IHN0cmluZ1tdO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc1N0cmVhbWluZz86IGJvb2xlYW47XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBpc1BhcmFsbGVsQ2hpbGQ/OiBib29sZWFuO1xuICBwYXJhbGxlbEdyb3VwSWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogTmVzdGVkIHBpcGVsaW5lIHN0cnVjdHVyZSBmb3IgYSBzdWJmbG93IG5vZGUuXG4gICAqIFdBUk5JTkc6IEFueSBmdXR1cmUgd2Fsa2VyIHRoYXQgdHJhdmVyc2VzIHRoaXMgZmllbGQgcmVjdXJzaXZlbHkgbXVzdCBhcHBseSBpdHMgb3duXG4gICAqIGRlcHRoIGFuZCBjeWNsZSBndWFyZHMgYWNyb3NzIGJvdGggdGhlIGBuZXh0YCBjaGFpbiBhbmQgdGhpcyBuZXN0ZWQgc3RydWN0dXJlLlxuICAgKiBDaGFydCBPcGVuQVBJIGdlbmVyYXRpb24gcmVhZHMgdGhlIGJ1aWxkZXItcHJlcGFyZWQgZGVzY3JpcHRpb24sIG5vdCB0aGlzIGdyYXBoLlxuICAgKi9cbiAgc3ViZmxvd1N0cnVjdHVyZT86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgaXRlcmF0aW9uQ291bnQ/OiBudW1iZXI7XG4gIC8qKiBUcnVlIHdoZW4gdGhpcyBzdWJmbG93IHVzZXMgbGF6eSByZXNvbHV0aW9uIChkZWZlcnJlZCB1bnRpbCBleGVjdXRpb24pLiAqL1xuICBpc0xhenk/OiBib29sZWFuO1xuICAvKiogVHJ1ZSB3aGVuIHRoaXMgbm9kZSBpcyBhIGJhY2stZWRnZSByZWZlcmVuY2UgY3JlYXRlZCBieSBsb29wVG8oKSDigJQgbm90IGFuIGV4ZWN1dGFibGUgc3RhZ2UuICovXG4gIGlzTG9vcFJlZmVyZW5jZT86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIHRoaXMgc3RhZ2UgY2FuIHBhdXNlIGV4ZWN1dGlvbiAoUGF1c2FibGVIYW5kbGVyIHBhdHRlcm4pLiAqL1xuICBpc1BhdXNhYmxlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRydWUgZm9yIGFuIGBhZGRQYXJhbGxlbEZvckVhY2hgIGZhbi1vdXQg4oCUIG9uZSBicmFuY2ggcGVyIGl0ZW0sIGNvdW50XG4gICAqIGRlY2lkZWQgYXQgcnVudGltZS4gQSBmbGFnLCBub3QgYSB0eXBlOiBgdHlwZWAgc3RheXMgYCdmb3JrJ2Agc28gZXhpc3RpbmdcbiAgICogY29uc3VtZXJzIGtlZXAgcmVuZGVyaW5nIGl0IGFzIHRoZSBmYW4tb3V0IGl0IGlzLlxuICAgKi9cbiAgaXNEeW5hbWljUGFyYWxsZWw/OiBib29sZWFuO1xuICAvKipcbiAgICogVG90YWwgYXR0ZW1wdHMgdGhpcyBzdGFnZSdzIGZ1bmN0aW9uIG1heSBydW4sIGZyb20gaXRzIGRlY2xhcmVkXG4gICAqIHtAbGluayBSZXRyeVBvbGljeX0uIFByZXNlbnQgb25seSB3aGVuIGEgcG9saWN5IHdhcyBkZWNsYXJlZCDigJQgdGhlIENPVU5UXG4gICAqIG9ubHksIGJlY2F1c2UgYGJhY2tvZmZNc2AgYW5kIGByZXRyeU9uYCBjYW4gYmUgZnVuY3Rpb25zIGFuZCBhIEpTT04tc2FmZVxuICAgKiBzcGVjIGNhbm5vdCBjYXJyeSB0aG9zZS5cbiAgICpcbiAgICogUmVhZCBpdCBmcm9tIHRoZSBCVUlMVCBzcGVjIChgY2hhcnQuYnVpbGRUaW1lU3RydWN0dXJlYCAvIGB0b1NwZWMoKWApLCBub3RcbiAgICogZnJvbSBhIGBTdHJ1Y3R1cmVSZWNvcmRlci5vblN0YWdlQWRkZWRgIGV2ZW50OiB0aGUgYC5yZXRyeSgpYCBtb2RpZmllciBpc1xuICAgKiBjaGFpbmVkIEFGVEVSIHRoZSBzdGFnZSBpcyBhZGRlZCwgc28gdGhlIGV2ZW50IGZpcmVzIGZpcnN0LiBUaGF0IGlzIHdoeVxuICAgKiB0aGVyZSBpcyBubyBgcmV0cnlBdHRlbXB0c2AgZGlzY3JpbWluYXRvciBvbiB0aGUgZXZlbnQgcGF5bG9hZCDigJQgaXQgd291bGRcbiAgICogYmUgYHVuZGVmaW5lZGAgYXQgZmlyZSB0aW1lIGZvciBleGFjdGx5IHRoZSBzdGFnZXMgdGhhdCBoYXZlIGEgcG9saWN5LlxuICAgKi9cbiAgcmV0cnlBdHRlbXB0cz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBjYXAgb24gT05FIGF0dGVtcHQgb2YgdGhpcyBzdGFnZSwgZnJvbSBpdHMgZGVjbGFyZWQge0BsaW5rIFJldHJ5UG9saWN5fVxuICAgKiAoYHRpbWVvdXRNc2ApLiBQcmVzZW50IG9ubHkgd2hlbiBkZWNsYXJlZC4gV2l0aCBgcmV0cnlBdHRlbXB0c2AgaXQgaXMgd2hhdFxuICAgKiBib3VuZHMgdGhlIHN0YWdlIGluIHRpbWU6IGF0IG1vc3QgYHJldHJ5QXR0ZW1wdHMgw5cgdGltZW91dE1zYCBwbHVzIHRoZVxuICAgKiB3YWl0cyBiZXR3ZWVuIGF0dGVtcHRzIChgdGltZUJ1ZGdldGApLiBTYW1lIHJlYWQtaXQtZnJvbS10aGUtYnVpbHQtc3BlY1xuICAgKiBjYXZlYXQgYXMgYHJldHJ5QXR0ZW1wdHNgLlxuICAgKi9cbiAgdGltZW91dE1zPzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGNoYXJ0J3MgZGVjbGFyZWQgdGltZSBidWRnZXQgKGAuYnVkZ2V0KG1zKWApLCBvbiB0aGUgUk9PVCBzcGVjIG9ubHkg4oCUXG4gICAqIHRoZSBtb3N0IG1pbGxpc2Vjb25kcyBhIGNhbGxlciBnaXZlcyBvbmUgcnVuLiBgYnVpbGQoKWAgcmVmdXNlZCB0aGUgY2hhcnRcbiAgICogaWYgaXRzIGRlY2xhcmVkIHBvbGljaWVzIGNvdWxkIGFscmVhZHkgdGFrZSBsb25nZXIuIEFic2VudCB3aGVuIHVuZGVjbGFyZWQuXG4gICAqL1xuICBidWRnZXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBvdXRzaWRlIHN5c3RlbSB0aGlzIHN0YWdlIGNoYW5nZXMgKGAudG91Y2hlcyhzeXN0ZW0sIOKApilgLCAxMC4xKSDigJQgdGhlXG4gICAqIE5BTUUgb25seTsgdGhlIGtleSBydWxlIGlzIGEgZnVuY3Rpb24gYW5kIHN0YXlzIG9uIHRoZSBub2RlLiBQcmVzZW50IG9ubHlcbiAgICogd2hlbiBkZWNsYXJlZC4gU2FtZSByZWFkLWl0LWZyb20tdGhlLWJ1aWx0LXNwZWMgY2F2ZWF0IGFzIGByZXRyeUF0dGVtcHRzYC5cbiAgICovXG4gIHRvdWNoZXM/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEZWNsYXJlZCB0YWdzICg5LjIxLjApIOKAlCB0aGUgTkFNRVMgdGhlIGF1dGhvciBwdXQgb24gdGhpcyBzdGFnZSBhdCBidWlsZFxuICAgKiB0aW1lLCBjb3BpZWQgYXMtaXMgKEpTT04tc2FmZSwgZnJlZSBzdHJpbmdzOyBmb290cHJpbnRqcyBvd25zIG5vXG4gICAqIHZvY2FidWxhcnkpLiBUaGUgTWFwIGFkdmVydGlzZXMgd2hhdCBhIGNoYXJ0IENBTiBwcm9kdWNlOyB0aGUgY29tbWl0XG4gICAqIGJ1bmRsZSAoYENvbW1pdEJ1bmRsZS50YWdzYCkgcmVjb3JkcyB3aGljaCBhIHJ1biBESUQgaGl0LiBBYnNlbnQgd2hlbiB0aGVcbiAgICogc3RhZ2UgZGVjbGFyZXMgbm9uZS4gU2FtZSByZWFkLWl0LWZyb20tdGhlLWJ1aWx0LXNwZWMgY2F2ZWF0IGFzXG4gICAqIGByZXRyeUF0dGVtcHRzYDogYC50YWcoKWAgaXMgY2hhaW5lZCBBRlRFUiBgb25TdGFnZUFkZGVkYCBmaXJlcy5cbiAgICovXG4gIHRhZ3M/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFNUUlVDVFVSRS1PTkxZOiBmb3IgYSBmb3JrL3NlbGVjdG9yL2RlY2lkZXIgYnJhbmNoLCB0aGUgZG93bnN0cmVhbSBzdGFnZVxuICAgKiBpZCBpdHMgY29udmVyZ2VuY2UgYG5leHRgIGVkZ2UgcG9pbnRzIHRvLCBpbnN0ZWFkIG9mIHRoZSBzaGFyZWQgbmV4dC1zdGFnZVxuICAgKiBpdHMgc2libGluZ3MgY29udmVyZ2UgYXQuIFNldCBmcm9tIGBTdWJmbG93TW91bnRPcHRpb25zLmNvbnZlcmdlQXRgOyByZWFkIGJ5XG4gICAqIGBfZmlyZU5leHRFZGdlRnJvbVBhcmVudGAgdG8gZXhwcmVzcyBhbiB1bmVxdWFsLWRlcHRoIG1lcmdlIChlLmcuIHRvb2xzIOKGklxuICAgKiBjYWxsLWxsbSwgYnlwYXNzaW5nIG1lc3NhZ2UtYXBpKS4gVmlzdWFsaXphdGlvbi1vbmx5IOKAlCBydW50aW1lIGNvbnZlcmdlbmNlXG4gICAqIGlzIHVuY2hhbmdlZC5cbiAgICovXG4gIGNvbnZlcmdlQXQ/OiBzdHJpbmc7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRmxvd0NoYXJ0U3BlYyAocHVyZSBKU09OLCBubyBmdW5jdGlvbnMg4oCUIGZvciBGReKGkkJFIHRyYW5zcG9ydClcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dDaGFydFNwZWMge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBOb2RlIHR5cGUg4oCUIG1hdGNoZXMgYFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZS50eXBlYCBmb3IgdmlzdWFsaXphdGlvbiBhbGlnbm1lbnQuICovXG4gIHR5cGU/OiAnc3RhZ2UnIHwgJ2RlY2lkZXInIHwgJ3NlbGVjdG9yJyB8ICdmb3JrJyB8ICdzdHJlYW1pbmcnIHwgJ3N1YmZsb3cnIHwgJ2xvb3AnO1xuICAvKiogU2VtYW50aWMgaWNvbiBoaW50IGZvciB2aXN1YWxpemF0aW9uIChlLmcuLCBcImxsbVwiLCBcInRvb2xcIiwgXCJyYWdcIiwgXCJhZ2VudFwiLCBcInN0YXJ0XCIpICovXG4gIGljb24/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IEZsb3dDaGFydFNwZWNbXTtcbiAgbmV4dD86IEZsb3dDaGFydFNwZWM7XG4gIGhhc0RlY2lkZXI/OiBib29sZWFuO1xuICBoYXNTZWxlY3Rvcj86IGJvb2xlYW47XG4gIGJyYW5jaElkcz86IHN0cmluZ1tdO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc1N0cmVhbWluZz86IGJvb2xlYW47XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBpc1BhcmFsbGVsQ2hpbGQ/OiBib29sZWFuO1xuICBwYXJhbGxlbEdyb3VwSWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICAvKiogVHJ1ZSB3aGVuIHRoaXMgbm9kZSBpcyBhIGJhY2stZWRnZSByZWZlcmVuY2UgY3JlYXRlZCBieSBsb29wVG8oKSDigJQgbm90IGFuIGV4ZWN1dGFibGUgc3RhZ2UuICovXG4gIGlzTG9vcFJlZmVyZW5jZT86IGJvb2xlYW47XG4gIC8qKiBUcnVlIGZvciBhbiBgYWRkUGFyYWxsZWxGb3JFYWNoYCBmYW4tb3V0IChgdHlwZWAgc3RheXMgYCdmb3JrJ2ApLiAqL1xuICBpc0R5bmFtaWNQYXJhbGxlbD86IGJvb2xlYW47XG4gIC8qKiBUb3RhbCBhdHRlbXB0cyBhbGxvd2VkIGJ5IHRoaXMgc3RhZ2UncyBkZWNsYXJlZCByZXRyeSBwb2xpY3kg4oCUIHRoZSBjb3VudFxuICAgKiAgb25seSAoc2VlIGBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUucmV0cnlBdHRlbXB0c2ApLiAqL1xuICByZXRyeUF0dGVtcHRzPzogbnVtYmVyO1xuICAvKiogVGhlIGNhcCBvbiBvbmUgYXR0ZW1wdCAoc2VlIGBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUudGltZW91dE1zYCkuICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqIFRoZSBjaGFydCdzIGRlY2xhcmVkIHRpbWUgYnVkZ2V0LCBvbiB0aGUgcm9vdCBvbmx5IChzZWUgYFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZS5idWRnZXRNc2ApLiAqL1xuICBidWRnZXRNcz86IG51bWJlcjtcbiAgLyoqIFRoZSBvdXRzaWRlIHN5c3RlbSB0aGlzIHN0YWdlIGNoYW5nZXMsIGJ5IG5hbWUgKHNlZSBgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlLnRvdWNoZXNgKS4gKi9cbiAgdG91Y2hlcz86IHN0cmluZztcbiAgLyoqIERlY2xhcmVkIHRhZ3Mgb24gdGhpcyBzdGFnZSwgYXMtaXMgKHNlZSBgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlLnRhZ3NgKS4gKi9cbiAgdGFncz86IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIGZsb3dDaGFydCgpIG9wdGlvbnMgYmFnXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBPcHRpb25zLWJhZyBhcmd1bWVudCBzaGFwZSBmb3IgdGhlIGBmbG93Q2hhcnQoKWAgZmFjdG9yeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93Q2hhcnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIEJ1aWxkLXRpbWUgcmVjb3JkZXJzIHRvIGF0dGFjaCBCRUZPUkUgYHN0YXJ0KClgIGZpcmVzLiBFcXVpdmFsZW50XG4gICAqIHRvIGNoYWluaW5nIGAuYXR0YWNoU3RydWN0dXJlUmVjb3JkZXIocmVjKWAgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlXG4gICAqIGZhY3RvcnkgcmV0dXJucyDigJQgYnV0IHJlZ2lzdGVyZWQgRUFSTElFUiwgc28gZXZlbiB0aGUgc2VlZCBldmVudFxuICAgKiBmaXJlcyB0aHJvdWdoIHRoZSBkaXNwYXRjaGVyIHdpdGhvdXQgbmVlZGluZyB0aGUgc2VlZC1yZXBsYXkgcGF0aC5cbiAgICpcbiAgICogTXVsdGlwbGUgcmVjb3JkZXJzIGF0dGFjaCBpbiBhcnJheSBvcmRlciAoc2FtZSBhc1xuICAgKiBgLmF0dGFjaFN0cnVjdHVyZVJlY29yZGVyYCByZXBlYXRlZCkuIFNlZSBgU3RydWN0dXJlUmVjb3JkZXJgIEpTRG9jXG4gICAqIGZvciBldmVudCBzZW1hbnRpY3MsIG9yZGVyaW5nIGludmFyaWFudHMsIGFuZCB0aGUgdHJ1c3QgbW9kZWwuXG4gICAqL1xuICBzdHJ1Y3R1cmVSZWNvcmRlcnM/OiBTdHJ1Y3R1cmVSZWNvcmRlcltdO1xuICAvKiogRnJlZS1mb3JtIGRlc2NyaXB0aW9uIHNob3duIG9uIHRoZSByb290IHNwZWMgbm9kZS4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBPbmx5IG1lYW5pbmdmdWwgZm9yIGBmbG93Q2hhcnRTZWxlY3RvcmAgKGEgcm9vdCBzZWxlY3RvcikuIFdoZW4gdGhlXG4gICAqIHNlbGVjdG9yIHBpY2tzIOKJpTIgYnJhbmNoZXMgdGhleSBmYW4gb3V0IGluIHBhcmFsbGVsOiBgZmFpbEZhc3Q6IHRydWVgXG4gICAqIHVzZXMgYFByb21pc2UuYWxsYCAoZmlyc3QgYnJhbmNoIGVycm9yIHJlamVjdHMgKyBhYm9ydHMpLCB0aGUgZGVmYXVsdFxuICAgKiB1c2VzIGBQcm9taXNlLmFsbFNldHRsZWRgIChiZXN0LWVmZm9ydCDigJQgYWxsIGJyYW5jaGVzIHJ1biBldmVuIGlmIHNvbWVcbiAgICogZmFpbCkuIFVzZSBmYWlsLWZhc3Qgd2hlbiBhbGwgc2VsZWN0ZWQgYnJhbmNoZXMgYXJlIFJFUVVJUkVELiBJZ25vcmVkIGZvclxuICAgKiBub24tc2VsZWN0b3IgY2hhcnRzLiBTYW1lIGZsYWcgYGFkZFNlbGVjdG9yRnVuY3Rpb25gIC8gYGFkZExpc3RPZkZ1bmN0aW9uYFxuICAgKiBleHBvc2UuXG4gICAqL1xuICBmYWlsRmFzdD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBEZWNsYXJhdGl2ZSByZXRyeSBwb2xpY3kgZm9yIHRoZSBjaGFydCdzIEZJUlNUIHN0YWdlICh0aGUgb25lIHRoaXMgZmFjdG9yeVxuICAgKiBkZWNsYXJlcykuIExhdGVyIHN0YWdlcyB1c2UgdGhlIGAucmV0cnkoKWAgbW9kaWZpZXIsIG9yIHRoZSBgcmV0cnlgIG9wdGlvblxuICAgKiBhdCB0aGVpciBvd24gZGVjbGFyYXRpb24gc2l0ZS4gU2VlIHtAbGluayBSZXRyeVBvbGljeX0uXG4gICAqL1xuICByZXRyeT86IFJldHJ5UG9saWN5O1xuICAvKipcbiAgICogVGhlIG91dHNpZGUgc3lzdGVtIHRoZSBjaGFydCdzIEZJUlNUIHN0YWdlIGNoYW5nZXMsIGFuZCBpdHMgaWRlbXBvdGVuY3kta2V5XG4gICAqIHJ1bGUgKDEwLjEpLiBMYXRlciBzdGFnZXMgdXNlIHRoZSBgLnRvdWNoZXMoKWAgbW9kaWZpZXIsIG9yIHRoZSBgdG91Y2hlc2BcbiAgICogb3B0aW9uIGF0IHRoZWlyIG93biBkZWNsYXJhdGlvbiBzaXRlLiBTZWUge0BsaW5rIFN0YWdlVG91Y2hlc30uXG4gICAqL1xuICB0b3VjaGVzPzogU3RhZ2VUb3VjaGVzO1xuICAvKipcbiAgICogRGVjbGFyZWQgdGFncyBmb3IgdGhlIGNoYXJ0J3MgRklSU1Qgc3RhZ2UuIExhdGVyIHN0YWdlcyB1c2UgdGhlIGAudGFnKClgXG4gICAqIG1vZGlmaWVyLCBvciB0aGUgYHRhZ3NgIG9wdGlvbiBhdCB0aGVpciBvd24gZGVjbGFyYXRpb24gc2l0ZS4gQSB0YWcgaXMgYVxuICAgKiBOQU1FIGRlY2xhcmVkIGF0IGJ1aWxkIHRpbWUg4oCUIG5ldmVyIGEgdmFsdWUg4oCUIGFuZCBpcyBzdGFtcGVkIG9uIGV2ZXJ5XG4gICAqIGNvbW1pdCBidW5kbGUgdGhlIHN0YWdlIHJlY29yZHMgKGBDb21taXRCdW5kbGUudGFnc2ApLCBzbyBhIHN0b3JlZFxuICAgKiByZWNvcmRpbmcgY2FycmllcyBpdHMgb3duIG1pbGVzdG9uZXMuIFNlZSBgRmxvd0NoYXJ0QnVpbGRlci50YWdgLlxuICAgKi9cbiAgdGFncz86IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEZsb3dDaGFydCDigJQgY29tcGlsZWQgb3V0cHV0IG9mIGJ1aWxkKClcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBGbG93Q2hhcnQ8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IHtcbiAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIHN0YWdlTWFwOiBNYXA8c3RyaW5nLCBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4+O1xuICBzdWJmbG93cz86IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfT47XG4gIGJ1aWxkVGltZVN0cnVjdHVyZTogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBlbmFibGVOYXJyYXRpdmU/OiBib29sZWFuO1xuICBsb2dnZXI/OiBJTG9nZ2VyO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzdGFnZURlc2NyaXB0aW9uczogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIElucHV0IHNjaGVtYSAoWm9kIG9yIEpTT04gU2NoZW1hKSDigJQgZGVjbGFyZWQgdmlhIHNldElucHV0U2NoZW1hKCkgb3IgLmNvbnRyYWN0KCkuICovXG4gIGlucHV0U2NoZW1hPzogdW5rbm93bjtcbiAgLyoqIE91dHB1dCBzY2hlbWEgKFpvZCBvciBKU09OIFNjaGVtYSkg4oCUIGRlY2xhcmVkIHZpYSBzZXRPdXRwdXRTY2hlbWEoKSBvciAuY29udHJhY3QoKS4gKi9cbiAgb3V0cHV0U2NoZW1hPzogdW5rbm93bjtcbiAgLyoqIE91dHB1dCBtYXBwZXIg4oCUIGV4dHJhY3RzIHJlc3BvbnNlIGZyb20gZmluYWwgc2NvcGUuICovXG4gIG91dHB1dE1hcHBlcj86IChmaW5hbFNjb3BlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdW5rbm93bjtcbiAgLyoqIFNjb3BlIGZhY3Rvcnkg4oCUIGF1dG8tZW1iZWRkZWQgYnkgZmxvd0NoYXJ0PFQ+KCkuIEV4ZWN1dG9yIHJlYWRzIHRoaXMgaWYgbm8gZmFjdG9yeSBwYXJhbS4gKi9cbiAgc2NvcGVGYWN0b3J5PzogU2NvcGVGYWN0b3J5PFRTY29wZT47XG59O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFNpbXBsaWZpZWQgUGFyYWxsZWwgU3BlYyAoZm9yIGFkZExpc3RPZkZ1bmN0aW9uKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIFNpbXBsaWZpZWRQYXJhbGxlbFNwZWM8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBmbj86IFN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPjtcbiAgLyoqIERlY2xhcmF0aXZlIHJldHJ5IHBvbGljeSBmb3IgdGhpcyBmb3JrIGNoaWxkLiBGb3JrIGJyYW5jaGVzIGFyZSB3aGVyZVxuICAgKiAgZmxha3kgSS9PIHVzdWFsbHkgbGl2ZXMsIHNvIGVhY2ggY2hpbGQgZGVjbGFyZXMgaXRzIG93bi4gKi9cbiAgcmV0cnk/OiBSZXRyeVBvbGljeTtcbiAgLyoqIFRoZSBvdXRzaWRlIHN5c3RlbSB0aGlzIGZvcmsgY2hpbGQgY2hhbmdlcywgYW5kIGl0cyBrZXkgcnVsZSAoMTAuMSkuICovXG4gIHRvdWNoZXM/OiBTdGFnZVRvdWNoZXM7XG4gIC8qKiBEZWNsYXJlZCB0YWdzIGZvciB0aGlzIGZvcmsgY2hpbGQg4oCUIGVhY2ggY2hpbGQncyBidW5kbGUgY2FycmllcyBpdHMgb3duLiAqL1xuICB0YWdzPzogcmVhZG9ubHkgc3RyaW5nW107XG59O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEV4ZWNPcHRpb25zIChmb3IgZXhlY3V0ZSgpIGNvbnZlbmllbmNlIOKAlCB1c2VkIGJ5IHJ1bm5lciBsYXllcilcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBFeGVjT3B0aW9ucyA9IHtcbiAgZGVmYXVsdHM/OiB1bmtub3duO1xuICBpbml0aWFsPzogdW5rbm93bjtcbiAgcmVhZE9ubHk/OiB1bmtub3duO1xuICB0aHJvdHRsaW5nRXJyb3JDaGVja2VyPzogKGU6IHVua25vd24pID0+IGJvb2xlYW47XG4gIHNjb3BlUHJvdGVjdGlvbk1vZGU/OiBTY29wZVByb3RlY3Rpb25Nb2RlO1xuICBlbmFibGVOYXJyYXRpdmU/OiBib29sZWFuO1xufTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTdWJmbG93UmVmXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93UmVmIHtcbiAgJHJlZjogc3RyaW5nO1xuICBtb3VudElkOiBzdHJpbmc7XG59XG4iXX0=
@@ -12,8 +12,8 @@
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
13
  exports.select = exports.decide = void 0;
14
14
  const devMode_js_1 = require("../devMode.js");
15
+ const evaluator_js_1 = require("../filter/evaluator.js");
15
16
  const runtime_js_1 = require("../scope/runtime.js");
16
- const evaluator_js_1 = require("./evaluator.js");
17
17
  const evidence_js_1 = require("./evidence.js");
18
18
  const types_js_1 = require("./types.js");
19
19
  // -- Scope accessor helpers --------------------------------------------------
@@ -211,4 +211,4 @@ function select(scope, rules) {
211
211
  return { branches: selectedBranches, [types_js_1.DECISION_RESULT]: true, evidence };
212
212
  }
213
213
  exports.select = select;
214
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaWRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kZWNpZGUvZGVjaWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7O0dBU0c7OztBQUVILDhDQUEwQztBQUMxQyxvREFBa0U7QUFFbEUsaURBQWdEO0FBQ2hELCtDQUFrRDtBQWNsRCx5Q0FBNkM7QUFFN0MsK0VBQStFO0FBRS9FLFNBQVMsY0FBYyxDQUFDLEtBQWM7SUFDcEMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUEsd0NBQTJCLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7SUFDeEMsT0FBTztRQUNMLFFBQVEsRUFBRSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNsRCxRQUFRLEVBQUUsTUFBTSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDbEQsT0FBTyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQzNELFVBQVUsRUFBRSxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLO0tBQ3JELENBQUM7QUFDSixDQUFDO0FBRUQsK0VBQStFO0FBRS9FLFNBQVMsWUFBWSxDQUNuQixLQUFRLEVBQ1IsSUFBbUIsRUFDbkIsS0FBYSxFQUNiLFFBQXFDLEVBQ3JDLFFBQStCLEVBQy9CLE9BQWtDLEVBQ2xDLFVBQXFDO0lBRXJDLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3BDLG1GQUFtRjtRQUNuRixNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3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Ozs7R0FlRztBQUNILFNBQWdCLE1BQU0sQ0FBbUIsS0FBUSxFQUFFLEtBQXNCO0lBQ3ZFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFMUUsTUFBTSxjQUFjLEdBQW1CLEVBQUUsQ0FBQztJQUMxQyxNQUFNLGdCQUFnQixHQUFhLEVBQUUsQ0FBQztJQUV0QyxLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDNUMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQy9GLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFbEMsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFzQjtRQUNsQyxLQUFLLEVBQUUsY0FBYztRQUNyQixRQUFRLEVBQUUsZ0JBQWdCO0tBQzNCLENBQUM7SUFDRixPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLENBQUMsMEJBQWUsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUMzRSxDQUFDO0FBcEJELHdCQW9CQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZGVjaWRlL2RlY2lkZSAtLSBDb3JlIGRlY2lkZSgpIGFuZCBzZWxlY3QoKSBoZWxwZXIgZnVuY3Rpb25zLlxuICpcbiAqIGRlY2lkZSgpIGV2YWx1YXRlcyBydWxlcyBpbiBvcmRlciAoZmlyc3QtbWF0Y2gpIGFuZCByZXR1cm5zIGEgRGVjaXNpb25SZXN1bHQuXG4gKiBzZWxlY3QoKSBldmFsdWF0ZXMgQUxMIHJ1bGVzIGFuZCByZXR1cm5zIGEgU2VsZWN0aW9uUmVzdWx0IHdpdGggYWxsIG1hdGNoZXMuXG4gKlxuICogRWFjaCBydWxlJ3MgYHdoZW5gIGNhbiBiZTpcbiAqIC0gQSBmdW5jdGlvbjogKHMpID0+IHMuY3JlZGl0U2NvcmUgPiA3MDAgIChhdXRvLWNhcHR1cmVzIHJlYWRzIHZpYSB0ZW1wIHJlY29yZGVyKVxuICogLSBBIGZpbHRlcjogICB7IGNyZWRpdFNjb3JlOiB7IGd0OiA3MDAgfSB9IChjYXB0dXJlcyByZWFkcyArIG9wZXJhdG9ycyArIHRocmVzaG9sZHMpXG4gKi9cblxuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnLi4vZGV2TW9kZS5qcyc7XG5pbXBvcnQgeyByZXF1aXJlRGVjaXNpb25TY29wZVJ1bnRpbWUgfSBmcm9tICcuLi9zY29wZS9ydW50aW1lLmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVSZWNvcmRlciB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcbmltcG9ydCB7IGV2YWx1YXRlRmlsdGVyIH0gZnJvbSAnLi9ldmFsdWF0b3IuanMnO1xuaW1wb3J0IHsgRXZpZGVuY2VDb2xsZWN0b3IgfSBmcm9tICcuL2V2aWRlbmNlLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgRGVjaWRlUnVsZSxcbiAgRGVjaXNpb25FdmlkZW5jZSxcbiAgRGVjaXNpb25SZXN1bHQsXG4gIERlZmF1bHRCcmFuY2gsXG4gIEZpbHRlckNvbmRpdGlvbixcbiAgRmlsdGVyUnVsZUV2aWRlbmNlLFxuICBGdW5jdGlvblJ1bGVFdmlkZW5jZSxcbiAgUnVsZUV2aWRlbmNlLFxuICBTZWxlY3Rpb25FdmlkZW5jZSxcbiAgU2VsZWN0aW9uUmVzdWx0LFxuICBXaGVyZUZpbHRlcixcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBERUNJU0lPTl9SRVNVTFQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8gLS0gU2NvcGUgYWNjZXNzb3IgaGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBzY29wZUFjY2Vzc29ycyhzY29wZTogdW5rbm93bikge1xuICBjb25zdCB7IHRhcmdldCB9ID0gcmVxdWlyZURlY2lzaW9uU2NvcGVSdW50aW1lKHNjb3BlKTtcbiAgY29uc3Qga2V5cyA9IHRhcmdldC5nZXRSZWRhY3RlZEtleXM/LigpO1xuICByZXR1cm4ge1xuICAgIGF0dGFjaEZuOiB0YXJnZXQuYXR0YWNoU2NvcGVSZWNvcmRlcj8uYmluZCh0YXJnZXQpLFxuICAgIGRldGFjaEZuOiB0YXJnZXQuZGV0YWNoU2NvcGVSZWNvcmRlcj8uYmluZCh0YXJnZXQpLFxuICAgIHZhbHVlRm46IHRhcmdldC5nZXRWYWx1ZT8uYmluZCh0YXJnZXQpID8/ICgoKSA9PiB1bmRlZmluZWQpLFxuICAgIHJlZGFjdGVkRm46IChrZXk6IHN0cmluZykgPT4ga2V5cz8uaGFzKGtleSkgPz8gZmFsc2UsXG4gIH07XG59XG5cbi8vIC0tIGV2YWx1YXRlIGEgc2luZ2xlIHJ1bGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gZXZhbHVhdGVSdWxlPFMgZXh0ZW5kcyBvYmplY3Q+KFxuICBzY29wZTogUyxcbiAgcnVsZTogRGVjaWRlUnVsZTxTPixcbiAgaW5kZXg6IG51bWJlcixcbiAgYXR0YWNoRm4/OiAocjogU2NvcGVSZWNvcmRlcikgPT4gdm9pZCxcbiAgZGV0YWNoRm4/OiAoaWQ6IHN0cmluZykgPT4gdm9pZCxcbiAgdmFsdWVGbj86IChrZXk6IHN0cmluZykgPT4gdW5rbm93bixcbiAgcmVkYWN0ZWRGbj86IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbixcbik6IFJ1bGVFdmlkZW5jZSB7XG4gIGlmICh0eXBlb2YgcnVsZS53aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gRlVOQ1RJT04gUEFUSDogdGVtcCByZWNvcmRlciBjYXB0dXJlcyByZWFkcyAobGF6eSDigJQgc2tpcCBpZiBubyByZWNvcmRlciBzdXBwb3J0KVxuICAgIGNvbnN0IGhhc1JlY29yZGVyU3VwcG9ydCA9IEJvb2xlYW4oYXR0YWNoRm4pO1xuICAgIGNvbnN0IGNvbGxlY3RvciA9IGhhc1JlY29yZGVyU3VwcG9ydCA/IG5ldyBFdmlkZW5jZUNvbGxlY3RvcigpIDogdW5kZWZpbmVkO1xuICAgIGlmIChjb2xsZWN0b3IgJiYgYXR0YWNoRm4pIGF0dGFjaEZuKGNvbGxlY3Rvcik7XG5cbiAgICBsZXQgbWF0Y2hlZDogYm9vbGVhbjtcbiAgICBsZXQgbWF0Y2hFcnJvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBtYXRjaGVkID0gcnVsZS53aGVuKHNjb3BlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBtYXRjaGVkID0gZmFsc2U7XG4gICAgICAvLyBDYXB0dXJlIHRoZSBlcnJvciBmb3IgZGVidWdnaW5nIOKAlCBzdXJmYWNlIGl0IGluIGV2aWRlbmNlIGluc3RlYWQgb2Ygc3dhbGxvd2luZyBzaWxlbnRseVxuICAgICAgbWF0Y2hFcnJvciA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHJ1bGUubGFiZWwgPyBgICgnJHtydWxlLmxhYmVsfScpYCA6ICcnO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oYFtmb290cHJpbnRdIGRlY2lkZSgpIHJ1bGUgJHtpbmRleH0ke2xhYmVsfSB0aHJldyBkdXJpbmcgZXZhbHVhdGlvbjogJHttYXRjaEVycm9yfWApO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoY29sbGVjdG9yICYmIGRldGFjaEZuKSBkZXRhY2hGbihjb2xsZWN0b3IuaWQpO1xuICAgIH1cblxuICAgIGNvbnN0IGV2aWRlbmNlOiBGdW5jdGlvblJ1bGVFdmlkZW5jZSA9IHtcbiAgICAgIHR5cGU6ICdmdW5jdGlvbicsXG4gICAgICBydWxlSW5kZXg6IGluZGV4LFxuICAgICAgYnJhbmNoOiBydWxlLnRoZW4sXG4gICAgICBtYXRjaGVkLFxuICAgICAgbGFiZWw6IHJ1bGUubGFiZWwsXG4gICAgICAvLyBQYXJ0aWFsIHJlYWRzOiBpZiBydWxlIHRocmV3IGFmdGVyIHNvbWUgZ2V0VmFsdWUoKSBjYWxscywgY29sbGVjdG9yIGhvbGRzIHJlYWRzIHVwIHRvIHRoZSB0aHJvdyBwb2ludFxuICAgICAgaW5wdXRzOiBjb2xsZWN0b3I/LmdldElucHV0cygpID8/IFtdLFxuICAgICAgLi4uKG1hdGNoRXJyb3IgIT09IHVuZGVmaW5lZCAmJiB7IG1hdGNoRXJyb3IgfSksXG4gICAgfTtcbiAgICByZXR1cm4gZXZpZGVuY2U7XG4gIH0gZWxzZSB7XG4gICAgLy8gRklMVEVSIFBBVEg6IHJlYWRzIHZhbHVlcyBkaXJlY3RseSB2aWEgY2FsbGJhY2tzIChubyByZWNvcmRlcik7IGV4Y2VwdGlvbnMgdHJlYXRlZCBhcyBub24tbWF0Y2hcbiAgICBjb25zdCByZXNvbHZlZFZhbHVlRm4gPSB2YWx1ZUZuID8/ICgoKSA9PiB1bmRlZmluZWQpO1xuICAgIGNvbnN0IHJlc29sdmVkUmVkYWN0ZWRGbiA9IHJlZGFjdGVkRm4gPz8gKCgpID0+IGZhbHNlKTtcbiAgICBsZXQgZmlsdGVyTWF0Y2hlZCA9IGZhbHNlO1xuICAgIGxldCBmaWx0ZXJDb25kaXRpb25zOiBGaWx0ZXJDb25kaXRpb25bXSA9IFtdO1xuICAgIGxldCBtYXRjaEVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGV2YWx1YXRlRmlsdGVyKHJlc29sdmVkVmFsdWVGbiwgcmVzb2x2ZWRSZWRhY3RlZEZuLCBydWxlLndoZW4gYXMgV2hlcmVGaWx0ZXI8Uz4pO1xuICAgICAgZmlsdGVyTWF0Y2hlZCA9IHJlc3VsdC5tYXRjaGVkO1xuICAgICAgZmlsdGVyQ29uZGl0aW9ucyA9IHJlc3VsdC5jb25kaXRpb25zO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGZpbHRlck1hdGNoZWQgPSBmYWxzZTtcbiAgICAgIGZpbHRlckNvbmRpdGlvbnMgPSBbXTtcbiAgICAgIC8vIENhcHR1cmUgdGhlIGVycm9yIGZvciBkZWJ1Z2dpbmcg4oCUIHN1cmZhY2UgaXQgaW4gZXZpZGVuY2UgaW5zdGVhZCBvZiBzd2FsbG93aW5nIHNpbGVudGx5XG4gICAgICBtYXRjaEVycm9yID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gcnVsZS5sYWJlbCA/IGAgKCcke3J1bGUubGFiZWx9JylgIDogJyc7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gZGVjaWRlKCkgZmlsdGVyIHJ1bGUgJHtpbmRleH0ke2xhYmVsfSB0aHJldyBkdXJpbmcgZXZhbHVhdGlvbjogJHttYXRjaEVycm9yfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV2aWRlbmNlOiBGaWx0ZXJSdWxlRXZpZGVuY2UgPSB7XG4gICAgICB0eXBlOiAnZmlsdGVyJyxcbiAgICAgIHJ1bGVJbmRleDogaW5kZXgsXG4gICAgICBicmFuY2g6IHJ1bGUudGhlbixcbiAgICAgIG1hdGNoZWQ6IGZpbHRlck1hdGNoZWQsXG4gICAgICBsYWJlbDogcnVsZS5sYWJlbCxcbiAgICAgIGNvbmRpdGlvbnM6IGZpbHRlckNvbmRpdGlvbnMsXG4gICAgICAuLi4obWF0Y2hFcnJvciAhPT0gdW5kZWZpbmVkICYmIHsgbWF0Y2hFcnJvciB9KSxcbiAgICB9O1xuICAgIHJldHVybiBldmlkZW5jZTtcbiAgfVxufVxuXG4vLyAtLSBkZWZhdWx0IGJyYW5jaCBub3JtYWxpemF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQ29sbGFwc2VzIGJvdGgge0BsaW5rIERlZmF1bHRCcmFuY2h9IGZvcm1zIHRvIG9uZSBzaGFwZSwgb25jZSwgYXQgdGhlIHRvcCBvZlxuICogYGRlY2lkZSgpYC4gQSBiYXJlIHN0cmluZyB5aWVsZHMgYGxhYmVsOiB1bmRlZmluZWRgLCB3aGljaCBldmVyeSBkb3duc3RyZWFtXG4gKiBzcHJlYWQgdGhlbiBvbWl0cyDigJQgc28gdGhlIHN0cmluZyBjYWxsIHNpdGUgcHJvZHVjZXMgZXhhY3RseSB0aGUgZXZpZGVuY2UgaXRcbiAqIHByb2R1Y2VkIGJlZm9yZSB0aGlzIHBhcmFtZXRlciB3YXMgd2lkZW5lZC5cbiAqXG4gKiBPTkxZIHRoZSBvYmplY3QgZm9ybSBpcyB1bndyYXBwZWQ7IGV2ZXJ5IG90aGVyIHZhbHVlIHBhc3NlcyB0aHJvdWdoIGFzIHRoZVxuICogYnJhbmNoLCB1bnRvdWNoZWQuIFRoYXQgaXMgZGVsaWJlcmF0ZTogSmF2YVNjcmlwdCBjYWxsZXJzIHJlYWNoIGBkZWNpZGUoKWBcbiAqIHdpdGggdGhlIHRoaXJkIGFyZ3VtZW50IE1JU1NJTkcgKGEgcnVsZSBzZXQgdGhhdCBjb3ZlcnMgZXZlcnkgY2FzZSBuZXZlclxuICogY29uc3VsdHMgYSBkZWZhdWx0KSwgYW5kIGJlZm9yZSB0aGUgcGFyYW1ldGVyIHdpZGVuZWQgdGhhdCBgdW5kZWZpbmVkYFxuICogc2ltcGx5IGxhbmRlZCBvbiBgZXZpZGVuY2UuZGVmYXVsdGAuIEl0IHN0aWxsIGRvZXMg4oCUIGEgbm9ybWFsaXphdGlvbiB0aGF0XG4gKiBvbmx5IHVuZGVyc3Rvb2Qgc3RyaW5ncyB3b3VsZCB0dXJuIHRob3NlIGNhbGwgc2l0ZXMgaW50byBhIFR5cGVFcnJvci5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplRGVmYXVsdEJyYW5jaChkZWZhdWx0QnJhbmNoOiBEZWZhdWx0QnJhbmNoKTogeyBicmFuY2g6IHN0cmluZzsgbGFiZWw/OiBzdHJpbmcgfSB7XG4gIHJldHVybiB0eXBlb2YgZGVmYXVsdEJyYW5jaCA9PT0gJ29iamVjdCcgJiYgZGVmYXVsdEJyYW5jaCAhPT0gbnVsbFxuICAgID8gZGVmYXVsdEJyYW5jaFxuICAgIDogeyBicmFuY2g6IGRlZmF1bHRCcmFuY2ggYXMgc3RyaW5nIH07XG59XG5cbi8vIC0tIGRlY2lkZSgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgcnVsZXMgaW4gb3JkZXIgKGZpcnN0LW1hdGNoKS4gUmV0dXJucyBhIGJyYW5kZWQgRGVjaXNpb25SZXN1bHQuXG4gKlxuICogQHBhcmFtIHNjb3BlIC0gVHlwZWRTY29wZSBvciBTY29wZUZhY2FkZVxuICogQHBhcmFtIHJ1bGVzIC0gQXJyYXkgb2YgRGVjaWRlUnVsZSAoZnVuY3Rpb24gb3IgZmlsdGVyIHdoZW4gY2xhdXNlcylcbiAqIEBwYXJhbSBkZWZhdWx0QnJhbmNoIC0gQnJhbmNoIHRha2VuIHdoZW4gbm8gcnVsZSBtYXRjaGVzLiBFaXRoZXIgdGhlIGJyYW5jaFxuICogICBpZCAoYCdyZWplY3RlZCdgKSBvciB0aGUgaWQgcGx1cyB3aGF0IGZhbGxpbmcgYmFjayB0byBpdCBNRUFOU1xuICogICAoYHsgYnJhbmNoOiAncmVqZWN0ZWQnLCBsYWJlbDogJ05vIHJ1bGUgZmlyZWQnIH1gKS4gVGhlIGxhYmVsIGxhbmRzIG9uXG4gKiAgIGBldmlkZW5jZS5kZWZhdWx0TGFiZWxgIOKAlCB0aGUgZGVmYXVsdCBpcyBjaG9zZW4gYnkgbm8gcnVsZSwgc28gaXQgaXMgdGhlXG4gKiAgIG9uZSBicmFuY2ggdGhhdCBgcnVsZXNbXS5sYWJlbGAgY2FuIG5ldmVyIGRlc2NyaWJlLlxuICpcbiAqICoqRXJyb3IgYmVoYXZpb3I6KiogSWYgYSBgd2hlbmAgZnVuY3Rpb24gdGhyb3dzIGR1cmluZyBldmFsdWF0aW9uLCB0aGUgcnVsZSBpc1xuICogdHJlYXRlZCBhcyBub24tbWF0Y2hpbmcgKGBtYXRjaGVkOiBmYWxzZWApIGFuZCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBjYXB0dXJlZCBpblxuICogYG1hdGNoRXJyb3JgIG9uIHRoYXQgcnVsZSdzIGBSdWxlRXZpZGVuY2VgIGVudHJ5LiBFeGVjdXRpb24gY29udGludWVzIHdpdGhcbiAqIHN1YnNlcXVlbnQgcnVsZXM7IGVycm9ycyBkbyBub3QgcHJvcGFnYXRlIHRvIHRoZSBjYWxsZXIuXG4gKlxuICogKipFbXB0eS1maWx0ZXIgYmVoYXZpb3IgKGFudGktdmFjdW91cy10cnV0aCk6KiogYSBmaWx0ZXIgcnVsZSB3aG9zZSBgd2hlbmAgaXNcbiAqIGB7fWAgKG5vIGV2YWx1YWJsZSBjb25kaXRpb25zKSBORVZFUiBtYXRjaGVzLiBUaGlzIGRlbGliZXJhdGVseSBpbnZlcnRzIHRoZVxuICogUHJpc21hL1NRTCBgd2hlcmU6IHt9YCBpbnR1aXRpb24gKFwibWF0Y2ggZXZlcnl0aGluZ1wiKSDigJQgYSBydWxlIHRoYXQgYXNzZXJ0c1xuICogbm90aGluZyBtdXN0IG5vdCB3aW4gYSBicmFuY2ggb24gdmFjdW91cyB0cnV0aC4gVXNlIGBkZWZhdWx0QnJhbmNoYCBmb3IgdGhlXG4gKiBjYXRjaC1hbGwgaW5zdGVhZC4gVW5rbm93biBmaWx0ZXIgb3BlcmF0b3JzIGFsc28gbmV2ZXIgbWF0Y2ggKGRldiBtb2RlIHdhcm5zKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY2lkZTxTIGV4dGVuZHMgb2JqZWN0PihcbiAgc2NvcGU6IFMsXG4gIHJ1bGVzOiBEZWNpZGVSdWxlPFM+W10sXG4gIGRlZmF1bHRCcmFuY2g6IERlZmF1bHRCcmFuY2gsXG4pOiBEZWNpc2lvblJlc3VsdCB7XG4gIGNvbnN0IHsgYXR0YWNoRm4sIGRldGFjaEZuLCB2YWx1ZUZuLCByZWRhY3RlZEZuIH0gPSBzY29wZUFjY2Vzc29ycyhzY29wZSk7XG5cbiAgY29uc3QgeyBicmFuY2g6IGRlZmF1bHRCcmFuY2hJZCwgbGFiZWw6IGRlZmF1bHRMYWJlbCB9ID0gbm9ybWFsaXplRGVmYXVsdEJyYW5jaChkZWZhdWx0QnJhbmNoKTtcbiAgLy8gRGVjbGFyZWQgb25jZSwgc3ByZWFkIGludG8gQk9USCBleGl0cyBiZWxvdyDigJQgZGVsaWJlcmF0ZWx5LiBBIGRlZmF1bHQnc1xuICAvLyBtZWFuaW5nIGlzIGEgcHJvcGVydHkgb2YgdGhlIERFQ0lERVIsIG5vdCBvZiB0aGUgcnVuOiBpdCBtdXN0IGJlIGluIHRoZVxuICAvLyBldmlkZW5jZSBvZiB0aGUgcnVuIHdoZXJlIGEgcnVsZSB3b24ganVzdCBhcyBtdWNoIGFzIGluIHRoZSBydW4gdGhhdCBmZWxsXG4gIC8vIHRocm91Z2guIEVtaXQgaXQgb25seSBvbiB0aGUgZmFsbHRocm91Z2ggYW5kIGFueSBjb25zdW1lciBoYXJ2ZXN0aW5nIGJyYW5jaFxuICAvLyBtZWFuaW5ncyB3b3VsZCB3YXRjaCB0aGVtIGFwcGVhciBhbmQgZGlzYXBwZWFyIHdpdGggdGhlIGRhdGEuXG4gIGNvbnN0IGRlZmF1bHRNZWFuaW5nID0gZGVmYXVsdExhYmVsICE9PSB1bmRlZmluZWQgPyB7IGRlZmF1bHRMYWJlbCB9IDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGV2YWx1YXRlZFJ1bGVzOiBSdWxlRXZpZGVuY2VbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgW2luZGV4LCBydWxlXSBvZiBydWxlcy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBydWxlRXZpZGVuY2UgPSBldmFsdWF0ZVJ1bGUoc2NvcGUsIHJ1bGUsIGluZGV4LCBhdHRhY2hGbiwgZGV0YWNoRm4sIHZhbHVlRm4sIHJlZGFjdGVkRm4pO1xuICAgIGV2YWx1YXRlZFJ1bGVzLnB1c2gocnVsZUV2aWRlbmNlKTtcblxuICAgIGlmIChydWxlRXZpZGVuY2UubWF0Y2hlZCkge1xuICAgICAgY29uc3QgZXZpZGVuY2U6IERlY2lzaW9uRXZpZGVuY2UgPSB7XG4gICAgICAgIHJ1bGVzOiBldmFsdWF0ZWRSdWxlcyxcbiAgICAgICAgY2hvc2VuOiBydWxlLnRoZW4sXG4gICAgICAgIGRlZmF1bHQ6IGRlZmF1bHRCcmFuY2hJZCxcbiAgICAgICAgLi4uZGVmYXVsdE1lYW5pbmcsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgYnJhbmNoOiBydWxlLnRoZW4sIFtERUNJU0lPTl9SRVNVTFRdOiB0cnVlLCBldmlkZW5jZSB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIERlZmF1bHQ6IG5vIHJ1bGUgbWF0Y2hlZFxuICBjb25zdCBldmlkZW5jZTogRGVjaXNpb25FdmlkZW5jZSA9IHtcbiAgICBydWxlczogZXZhbHVhdGVkUnVsZXMsXG4gICAgY2hvc2VuOiBkZWZhdWx0QnJhbmNoSWQsXG4gICAgZGVmYXVsdDogZGVmYXVsdEJyYW5jaElkLFxuICAgIC4uLmRlZmF1bHRNZWFuaW5nLFxuICB9O1xuICByZXR1cm4geyBicmFuY2g6IGRlZmF1bHRCcmFuY2hJZCwgW0RFQ0lTSU9OX1JFU1VMVF06IHRydWUsIGV2aWRlbmNlIH07XG59XG5cbi8vIC0tIHNlbGVjdCgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgQUxMIHJ1bGVzIChub3QgZmlyc3QtbWF0Y2gpLiBSZXR1cm5zIGEgYnJhbmRlZCBTZWxlY3Rpb25SZXN1bHQuXG4gKlxuICogQHBhcmFtIHNjb3BlIC0gVHlwZWRTY29wZSBvciBTY29wZUZhY2FkZVxuICogQHBhcmFtIHJ1bGVzIC0gQXJyYXkgb2YgRGVjaWRlUnVsZSAoZnVuY3Rpb24gb3IgZmlsdGVyIHdoZW4gY2xhdXNlcylcbiAqXG4gKiAqKkVycm9yIGJlaGF2aW9yOioqIElmIGEgYHdoZW5gIGZ1bmN0aW9uIHRocm93cyBkdXJpbmcgZXZhbHVhdGlvbiwgdGhlIHJ1bGUgaXNcbiAqIHRyZWF0ZWQgYXMgbm9uLW1hdGNoaW5nIChgbWF0Y2hlZDogZmFsc2VgKSBhbmQgdGhlIGVycm9yIG1lc3NhZ2UgaXMgY2FwdHVyZWQgaW5cbiAqIGBtYXRjaEVycm9yYCBvbiB0aGF0IHJ1bGUncyBgUnVsZUV2aWRlbmNlYCBlbnRyeS4gRXZhbHVhdGlvbiBjb250aW51ZXMgd2l0aFxuICogcmVtYWluaW5nIHJ1bGVzOyBlcnJvcnMgZG8gbm90IHByb3BhZ2F0ZSB0byB0aGUgY2FsbGVyLlxuICpcbiAqICoqRW1wdHktZmlsdGVyIGJlaGF2aW9yIChhbnRpLXZhY3VvdXMtdHJ1dGgpOioqIGEgZmlsdGVyIHJ1bGUgd2hvc2UgYHdoZW5gIGlzXG4gKiBge31gIChubyBldmFsdWFibGUgY29uZGl0aW9ucykgTkVWRVIgbWF0Y2hlcyDigJQgc2FtZSBydWxlIGFzIGBkZWNpZGUoKWA7IGFuXG4gKiBhbHdheXMtc2VsZWN0ZWQgYnJhbmNoIG11c3QgYmUgZXhwcmVzc2VkIGV4cGxpY2l0bHksIG5vdCB2aWEgYW4gZW1wdHkgZmlsdGVyLlxuICogVW5rbm93biBmaWx0ZXIgb3BlcmF0b3JzIGFsc28gbmV2ZXIgbWF0Y2ggKGRldiBtb2RlIHdhcm5zKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlbGVjdDxTIGV4dGVuZHMgb2JqZWN0PihzY29wZTogUywgcnVsZXM6IERlY2lkZVJ1bGU8Uz5bXSk6IFNlbGVjdGlvblJlc3VsdCB7XG4gIGNvbnN0IHsgYXR0YWNoRm4sIGRldGFjaEZuLCB2YWx1ZUZuLCByZWRhY3RlZEZuIH0gPSBzY29wZUFjY2Vzc29ycyhzY29wZSk7XG5cbiAgY29uc3QgZXZhbHVhdGVkUnVsZXM6IFJ1bGVFdmlkZW5jZVtdID0gW107XG4gIGNvbnN0IHNlbGVjdGVkQnJhbmNoZXM6IHN0cmluZ1tdID0gW107XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIHJ1bGVdIG9mIHJ1bGVzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IHJ1bGVFdmlkZW5jZSA9IGV2YWx1YXRlUnVsZShzY29wZSwgcnVsZSwgaW5kZXgsIGF0dGFjaEZuLCBkZXRhY2hGbiwgdmFsdWVGbiwgcmVkYWN0ZWRGbik7XG4gICAgZXZhbHVhdGVkUnVsZXMucHVzaChydWxlRXZpZGVuY2UpO1xuXG4gICAgaWYgKHJ1bGVFdmlkZW5jZS5tYXRjaGVkKSB7XG4gICAgICBzZWxlY3RlZEJyYW5jaGVzLnB1c2gocnVsZS50aGVuKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBldmlkZW5jZTogU2VsZWN0aW9uRXZpZGVuY2UgPSB7XG4gICAgcnVsZXM6IGV2YWx1YXRlZFJ1bGVzLFxuICAgIHNlbGVjdGVkOiBzZWxlY3RlZEJyYW5jaGVzLFxuICB9O1xuICByZXR1cm4geyBicmFuY2hlczogc2VsZWN0ZWRCcmFuY2hlcywgW0RFQ0lTSU9OX1JFU1VMVF06IHRydWUsIGV2aWRlbmNlIH07XG59XG4iXX0=
214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaWRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kZWNpZGUvZGVjaWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7O0dBU0c7OztBQUVILDhDQUEwQztBQUMxQyx5REFBd0Q7QUFDeEQsb0RBQWtFO0FBRWxFLCtDQUFrRDtBQWNsRCx5Q0FBNkM7QUFFN0MsK0VBQStFO0FBRS9FLFNBQVMsY0FBYyxDQUFDLEtBQWM7SUFDcEMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUEsd0NBQTJCLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7SUFDeEMsT0FBTztRQUNMLFFBQVEsRUFBRSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNsRCxRQUFRLEVBQUUsTUFBTSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDbEQsT0FBTyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO1FBQzNELFVBQVUsRUFBRSxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLO0tBQ3JELENBQUM7QUFDSixDQUFDO0FBRUQsK0VBQStFO0FBRS9FLFNBQVMsWUFBWSxDQUNuQixLQUFRLEVBQ1IsSUFBbUIsRUFDbkIsS0FBYSxFQUNiLFFBQXFDLEVBQ3JDLFFBQStCLEVBQy9CLE9BQWtDLEVBQ2xDLFVBQXFDO0lBRXJDLElBQUksT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1FBQ3BDLG1GQUFtRjtRQUNuRixNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3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Ozs7R0FlRztBQUNILFNBQWdCLE1BQU0sQ0FBbUIsS0FBUSxFQUFFLEtBQXNCO0lBQ3ZFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFMUUsTUFBTSxjQUFjLEdBQW1CLEVBQUUsQ0FBQztJQUMxQyxNQUFNLGdCQUFnQixHQUFhLEVBQUUsQ0FBQztJQUV0QyxLQUFLLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDNUMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQy9GLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFbEMsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFzQjtRQUNsQyxLQUFLLEVBQUUsY0FBYztRQUNyQixRQUFRLEVBQUUsZ0JBQWdCO0tBQzNCLENBQUM7SUFDRixPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLENBQUMsMEJBQWUsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUMzRSxDQUFDO0FBcEJELHdCQW9CQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZGVjaWRlL2RlY2lkZSAtLSBDb3JlIGRlY2lkZSgpIGFuZCBzZWxlY3QoKSBoZWxwZXIgZnVuY3Rpb25zLlxuICpcbiAqIGRlY2lkZSgpIGV2YWx1YXRlcyBydWxlcyBpbiBvcmRlciAoZmlyc3QtbWF0Y2gpIGFuZCByZXR1cm5zIGEgRGVjaXNpb25SZXN1bHQuXG4gKiBzZWxlY3QoKSBldmFsdWF0ZXMgQUxMIHJ1bGVzIGFuZCByZXR1cm5zIGEgU2VsZWN0aW9uUmVzdWx0IHdpdGggYWxsIG1hdGNoZXMuXG4gKlxuICogRWFjaCBydWxlJ3MgYHdoZW5gIGNhbiBiZTpcbiAqIC0gQSBmdW5jdGlvbjogKHMpID0+IHMuY3JlZGl0U2NvcmUgPiA3MDAgIChhdXRvLWNhcHR1cmVzIHJlYWRzIHZpYSB0ZW1wIHJlY29yZGVyKVxuICogLSBBIGZpbHRlcjogICB7IGNyZWRpdFNjb3JlOiB7IGd0OiA3MDAgfSB9IChjYXB0dXJlcyByZWFkcyArIG9wZXJhdG9ycyArIHRocmVzaG9sZHMpXG4gKi9cblxuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnLi4vZGV2TW9kZS5qcyc7XG5pbXBvcnQgeyBldmFsdWF0ZUZpbHRlciB9IGZyb20gJy4uL2ZpbHRlci9ldmFsdWF0b3IuanMnO1xuaW1wb3J0IHsgcmVxdWlyZURlY2lzaW9uU2NvcGVSdW50aW1lIH0gZnJvbSAnLi4vc2NvcGUvcnVudGltZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFNjb3BlUmVjb3JkZXIgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgeyBFdmlkZW5jZUNvbGxlY3RvciB9IGZyb20gJy4vZXZpZGVuY2UuanMnO1xuaW1wb3J0IHR5cGUge1xuICBEZWNpZGVSdWxlLFxuICBEZWNpc2lvbkV2aWRlbmNlLFxuICBEZWNpc2lvblJlc3VsdCxcbiAgRGVmYXVsdEJyYW5jaCxcbiAgRmlsdGVyQ29uZGl0aW9uLFxuICBGaWx0ZXJSdWxlRXZpZGVuY2UsXG4gIEZ1bmN0aW9uUnVsZUV2aWRlbmNlLFxuICBSdWxlRXZpZGVuY2UsXG4gIFNlbGVjdGlvbkV2aWRlbmNlLFxuICBTZWxlY3Rpb25SZXN1bHQsXG4gIFdoZXJlRmlsdGVyLFxufSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IERFQ0lTSU9OX1JFU1VMVCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyAtLSBTY29wZSBhY2Nlc3NvciBoZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHNjb3BlQWNjZXNzb3JzKHNjb3BlOiB1bmtub3duKSB7XG4gIGNvbnN0IHsgdGFyZ2V0IH0gPSByZXF1aXJlRGVjaXNpb25TY29wZVJ1bnRpbWUoc2NvcGUpO1xuICBjb25zdCBrZXlzID0gdGFyZ2V0LmdldFJlZGFjdGVkS2V5cz8uKCk7XG4gIHJldHVybiB7XG4gICAgYXR0YWNoRm46IHRhcmdldC5hdHRhY2hTY29wZVJlY29yZGVyPy5iaW5kKHRhcmdldCksXG4gICAgZGV0YWNoRm46IHRhcmdldC5kZXRhY2hTY29wZVJlY29yZGVyPy5iaW5kKHRhcmdldCksXG4gICAgdmFsdWVGbjogdGFyZ2V0LmdldFZhbHVlPy5iaW5kKHRhcmdldCkgPz8gKCgpID0+IHVuZGVmaW5lZCksXG4gICAgcmVkYWN0ZWRGbjogKGtleTogc3RyaW5nKSA9PiBrZXlzPy5oYXMoa2V5KSA/PyBmYWxzZSxcbiAgfTtcbn1cblxuLy8gLS0gZXZhbHVhdGUgYSBzaW5nbGUgcnVsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBldmFsdWF0ZVJ1bGU8UyBleHRlbmRzIG9iamVjdD4oXG4gIHNjb3BlOiBTLFxuICBydWxlOiBEZWNpZGVSdWxlPFM+LFxuICBpbmRleDogbnVtYmVyLFxuICBhdHRhY2hGbj86IChyOiBTY29wZVJlY29yZGVyKSA9PiB2b2lkLFxuICBkZXRhY2hGbj86IChpZDogc3RyaW5nKSA9PiB2b2lkLFxuICB2YWx1ZUZuPzogKGtleTogc3RyaW5nKSA9PiB1bmtub3duLFxuICByZWRhY3RlZEZuPzogKGtleTogc3RyaW5nKSA9PiBib29sZWFuLFxuKTogUnVsZUV2aWRlbmNlIHtcbiAgaWYgKHR5cGVvZiBydWxlLndoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBGVU5DVElPTiBQQVRIOiB0ZW1wIHJlY29yZGVyIGNhcHR1cmVzIHJlYWRzIChsYXp5IOKAlCBza2lwIGlmIG5vIHJlY29yZGVyIHN1cHBvcnQpXG4gICAgY29uc3QgaGFzUmVjb3JkZXJTdXBwb3J0ID0gQm9vbGVhbihhdHRhY2hGbik7XG4gICAgY29uc3QgY29sbGVjdG9yID0gaGFzUmVjb3JkZXJTdXBwb3J0ID8gbmV3IEV2aWRlbmNlQ29sbGVjdG9yKCkgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGNvbGxlY3RvciAmJiBhdHRhY2hGbikgYXR0YWNoRm4oY29sbGVjdG9yKTtcblxuICAgIGxldCBtYXRjaGVkOiBib29sZWFuO1xuICAgIGxldCBtYXRjaEVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIG1hdGNoZWQgPSBydWxlLndoZW4oc2NvcGUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIG1hdGNoZWQgPSBmYWxzZTtcbiAgICAgIC8vIENhcHR1cmUgdGhlIGVycm9yIGZvciBkZWJ1Z2dpbmcg4oCUIHN1cmZhY2UgaXQgaW4gZXZpZGVuY2UgaW5zdGVhZCBvZiBzd2FsbG93aW5nIHNpbGVudGx5XG4gICAgICBtYXRjaEVycm9yID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gcnVsZS5sYWJlbCA/IGAgKCcke3J1bGUubGFiZWx9JylgIDogJyc7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gZGVjaWRlKCkgcnVsZSAke2luZGV4fSR7bGFiZWx9IHRocmV3IGR1cmluZyBldmFsdWF0aW9uOiAke21hdGNoRXJyb3J9YCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChjb2xsZWN0b3IgJiYgZGV0YWNoRm4pIGRldGFjaEZuKGNvbGxlY3Rvci5pZCk7XG4gICAgfVxuXG4gICAgY29uc3QgZXZpZGVuY2U6IEZ1bmN0aW9uUnVsZUV2aWRlbmNlID0ge1xuICAgICAgdHlwZTogJ2Z1bmN0aW9uJyxcbiAgICAgIHJ1bGVJbmRleDogaW5kZXgsXG4gICAgICBicmFuY2g6IHJ1bGUudGhlbixcbiAgICAgIG1hdGNoZWQsXG4gICAgICBsYWJlbDogcnVsZS5sYWJlbCxcbiAgICAgIC8vIFBhcnRpYWwgcmVhZHM6IGlmIHJ1bGUgdGhyZXcgYWZ0ZXIgc29tZSBnZXRWYWx1ZSgpIGNhbGxzLCBjb2xsZWN0b3IgaG9sZHMgcmVhZHMgdXAgdG8gdGhlIHRocm93IHBvaW50XG4gICAgICBpbnB1dHM6IGNvbGxlY3Rvcj8uZ2V0SW5wdXRzKCkgPz8gW10sXG4gICAgICAuLi4obWF0Y2hFcnJvciAhPT0gdW5kZWZpbmVkICYmIHsgbWF0Y2hFcnJvciB9KSxcbiAgICB9O1xuICAgIHJldHVybiBldmlkZW5jZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBGSUxURVIgUEFUSDogcmVhZHMgdmFsdWVzIGRpcmVjdGx5IHZpYSBjYWxsYmFja3MgKG5vIHJlY29yZGVyKTsgZXhjZXB0aW9ucyB0cmVhdGVkIGFzIG5vbi1tYXRjaFxuICAgIGNvbnN0IHJlc29sdmVkVmFsdWVGbiA9IHZhbHVlRm4gPz8gKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgcmVzb2x2ZWRSZWRhY3RlZEZuID0gcmVkYWN0ZWRGbiA/PyAoKCkgPT4gZmFsc2UpO1xuICAgIGxldCBmaWx0ZXJNYXRjaGVkID0gZmFsc2U7XG4gICAgbGV0IGZpbHRlckNvbmRpdGlvbnM6IEZpbHRlckNvbmRpdGlvbltdID0gW107XG4gICAgbGV0IG1hdGNoRXJyb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZXZhbHVhdGVGaWx0ZXIocmVzb2x2ZWRWYWx1ZUZuLCByZXNvbHZlZFJlZGFjdGVkRm4sIHJ1bGUud2hlbiBhcyBXaGVyZUZpbHRlcjxTPik7XG4gICAgICBmaWx0ZXJNYXRjaGVkID0gcmVzdWx0Lm1hdGNoZWQ7XG4gICAgICBmaWx0ZXJDb25kaXRpb25zID0gcmVzdWx0LmNvbmRpdGlvbnM7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZmlsdGVyTWF0Y2hlZCA9IGZhbHNlO1xuICAgICAgZmlsdGVyQ29uZGl0aW9ucyA9IFtdO1xuICAgICAgLy8gQ2FwdHVyZSB0aGUgZXJyb3IgZm9yIGRlYnVnZ2luZyDigJQgc3VyZmFjZSBpdCBpbiBldmlkZW5jZSBpbnN0ZWFkIG9mIHN3YWxsb3dpbmcgc2lsZW50bHlcbiAgICAgIG1hdGNoRXJyb3IgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBydWxlLmxhYmVsID8gYCAoJyR7cnVsZS5sYWJlbH0nKWAgOiAnJztcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKGBbZm9vdHByaW50XSBkZWNpZGUoKSBmaWx0ZXIgcnVsZSAke2luZGV4fSR7bGFiZWx9IHRocmV3IGR1cmluZyBldmFsdWF0aW9uOiAke21hdGNoRXJyb3J9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZXZpZGVuY2U6IEZpbHRlclJ1bGVFdmlkZW5jZSA9IHtcbiAgICAgIHR5cGU6ICdmaWx0ZXInLFxuICAgICAgcnVsZUluZGV4OiBpbmRleCxcbiAgICAgIGJyYW5jaDogcnVsZS50aGVuLFxuICAgICAgbWF0Y2hlZDogZmlsdGVyTWF0Y2hlZCxcbiAgICAgIGxhYmVsOiBydWxlLmxhYmVsLFxuICAgICAgY29uZGl0aW9uczogZmlsdGVyQ29uZGl0aW9ucyxcbiAgICAgIC4uLihtYXRjaEVycm9yICE9PSB1bmRlZmluZWQgJiYgeyBtYXRjaEVycm9yIH0pLFxuICAgIH07XG4gICAgcmV0dXJuIGV2aWRlbmNlO1xuICB9XG59XG5cbi8vIC0tIGRlZmF1bHQgYnJhbmNoIG5vcm1hbGl6YXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBDb2xsYXBzZXMgYm90aCB7QGxpbmsgRGVmYXVsdEJyYW5jaH0gZm9ybXMgdG8gb25lIHNoYXBlLCBvbmNlLCBhdCB0aGUgdG9wIG9mXG4gKiBgZGVjaWRlKClgLiBBIGJhcmUgc3RyaW5nIHlpZWxkcyBgbGFiZWw6IHVuZGVmaW5lZGAsIHdoaWNoIGV2ZXJ5IGRvd25zdHJlYW1cbiAqIHNwcmVhZCB0aGVuIG9taXRzIOKAlCBzbyB0aGUgc3RyaW5nIGNhbGwgc2l0ZSBwcm9kdWNlcyBleGFjdGx5IHRoZSBldmlkZW5jZSBpdFxuICogcHJvZHVjZWQgYmVmb3JlIHRoaXMgcGFyYW1ldGVyIHdhcyB3aWRlbmVkLlxuICpcbiAqIE9OTFkgdGhlIG9iamVjdCBmb3JtIGlzIHVud3JhcHBlZDsgZXZlcnkgb3RoZXIgdmFsdWUgcGFzc2VzIHRocm91Z2ggYXMgdGhlXG4gKiBicmFuY2gsIHVudG91Y2hlZC4gVGhhdCBpcyBkZWxpYmVyYXRlOiBKYXZhU2NyaXB0IGNhbGxlcnMgcmVhY2ggYGRlY2lkZSgpYFxuICogd2l0aCB0aGUgdGhpcmQgYXJndW1lbnQgTUlTU0lORyAoYSBydWxlIHNldCB0aGF0IGNvdmVycyBldmVyeSBjYXNlIG5ldmVyXG4gKiBjb25zdWx0cyBhIGRlZmF1bHQpLCBhbmQgYmVmb3JlIHRoZSBwYXJhbWV0ZXIgd2lkZW5lZCB0aGF0IGB1bmRlZmluZWRgXG4gKiBzaW1wbHkgbGFuZGVkIG9uIGBldmlkZW5jZS5kZWZhdWx0YC4gSXQgc3RpbGwgZG9lcyDigJQgYSBub3JtYWxpemF0aW9uIHRoYXRcbiAqIG9ubHkgdW5kZXJzdG9vZCBzdHJpbmdzIHdvdWxkIHR1cm4gdGhvc2UgY2FsbCBzaXRlcyBpbnRvIGEgVHlwZUVycm9yLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVEZWZhdWx0QnJhbmNoKGRlZmF1bHRCcmFuY2g6IERlZmF1bHRCcmFuY2gpOiB7IGJyYW5jaDogc3RyaW5nOyBsYWJlbD86IHN0cmluZyB9IHtcbiAgcmV0dXJuIHR5cGVvZiBkZWZhdWx0QnJhbmNoID09PSAnb2JqZWN0JyAmJiBkZWZhdWx0QnJhbmNoICE9PSBudWxsXG4gICAgPyBkZWZhdWx0QnJhbmNoXG4gICAgOiB7IGJyYW5jaDogZGVmYXVsdEJyYW5jaCBhcyBzdHJpbmcgfTtcbn1cblxuLy8gLS0gZGVjaWRlKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV2YWx1YXRlcyBydWxlcyBpbiBvcmRlciAoZmlyc3QtbWF0Y2gpLiBSZXR1cm5zIGEgYnJhbmRlZCBEZWNpc2lvblJlc3VsdC5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBUeXBlZFNjb3BlIG9yIFNjb3BlRmFjYWRlXG4gKiBAcGFyYW0gcnVsZXMgLSBBcnJheSBvZiBEZWNpZGVSdWxlIChmdW5jdGlvbiBvciBmaWx0ZXIgd2hlbiBjbGF1c2VzKVxuICogQHBhcmFtIGRlZmF1bHRCcmFuY2ggLSBCcmFuY2ggdGFrZW4gd2hlbiBubyBydWxlIG1hdGNoZXMuIEVpdGhlciB0aGUgYnJhbmNoXG4gKiAgIGlkIChgJ3JlamVjdGVkJ2ApIG9yIHRoZSBpZCBwbHVzIHdoYXQgZmFsbGluZyBiYWNrIHRvIGl0IE1FQU5TXG4gKiAgIChgeyBicmFuY2g6ICdyZWplY3RlZCcsIGxhYmVsOiAnTm8gcnVsZSBmaXJlZCcgfWApLiBUaGUgbGFiZWwgbGFuZHMgb25cbiAqICAgYGV2aWRlbmNlLmRlZmF1bHRMYWJlbGAg4oCUIHRoZSBkZWZhdWx0IGlzIGNob3NlbiBieSBubyBydWxlLCBzbyBpdCBpcyB0aGVcbiAqICAgb25lIGJyYW5jaCB0aGF0IGBydWxlc1tdLmxhYmVsYCBjYW4gbmV2ZXIgZGVzY3JpYmUuXG4gKlxuICogKipFcnJvciBiZWhhdmlvcjoqKiBJZiBhIGB3aGVuYCBmdW5jdGlvbiB0aHJvd3MgZHVyaW5nIGV2YWx1YXRpb24sIHRoZSBydWxlIGlzXG4gKiB0cmVhdGVkIGFzIG5vbi1tYXRjaGluZyAoYG1hdGNoZWQ6IGZhbHNlYCkgYW5kIHRoZSBlcnJvciBtZXNzYWdlIGlzIGNhcHR1cmVkIGluXG4gKiBgbWF0Y2hFcnJvcmAgb24gdGhhdCBydWxlJ3MgYFJ1bGVFdmlkZW5jZWAgZW50cnkuIEV4ZWN1dGlvbiBjb250aW51ZXMgd2l0aFxuICogc3Vic2VxdWVudCBydWxlczsgZXJyb3JzIGRvIG5vdCBwcm9wYWdhdGUgdG8gdGhlIGNhbGxlci5cbiAqXG4gKiAqKkVtcHR5LWZpbHRlciBiZWhhdmlvciAoYW50aS12YWN1b3VzLXRydXRoKToqKiBhIGZpbHRlciBydWxlIHdob3NlIGB3aGVuYCBpc1xuICogYHt9YCAobm8gZXZhbHVhYmxlIGNvbmRpdGlvbnMpIE5FVkVSIG1hdGNoZXMuIFRoaXMgZGVsaWJlcmF0ZWx5IGludmVydHMgdGhlXG4gKiBQcmlzbWEvU1FMIGB3aGVyZToge31gIGludHVpdGlvbiAoXCJtYXRjaCBldmVyeXRoaW5nXCIpIOKAlCBhIHJ1bGUgdGhhdCBhc3NlcnRzXG4gKiBub3RoaW5nIG11c3Qgbm90IHdpbiBhIGJyYW5jaCBvbiB2YWN1b3VzIHRydXRoLiBVc2UgYGRlZmF1bHRCcmFuY2hgIGZvciB0aGVcbiAqIGNhdGNoLWFsbCBpbnN0ZWFkLiBVbmtub3duIGZpbHRlciBvcGVyYXRvcnMgYWxzbyBuZXZlciBtYXRjaCAoZGV2IG1vZGUgd2FybnMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjaWRlPFMgZXh0ZW5kcyBvYmplY3Q+KFxuICBzY29wZTogUyxcbiAgcnVsZXM6IERlY2lkZVJ1bGU8Uz5bXSxcbiAgZGVmYXVsdEJyYW5jaDogRGVmYXVsdEJyYW5jaCxcbik6IERlY2lzaW9uUmVzdWx0IHtcbiAgY29uc3QgeyBhdHRhY2hGbiwgZGV0YWNoRm4sIHZhbHVlRm4sIHJlZGFjdGVkRm4gfSA9IHNjb3BlQWNjZXNzb3JzKHNjb3BlKTtcblxuICBjb25zdCB7IGJyYW5jaDogZGVmYXVsdEJyYW5jaElkLCBsYWJlbDogZGVmYXVsdExhYmVsIH0gPSBub3JtYWxpemVEZWZhdWx0QnJhbmNoKGRlZmF1bHRCcmFuY2gpO1xuICAvLyBEZWNsYXJlZCBvbmNlLCBzcHJlYWQgaW50byBCT1RIIGV4aXRzIGJlbG93IOKAlCBkZWxpYmVyYXRlbHkuIEEgZGVmYXVsdCdzXG4gIC8vIG1lYW5pbmcgaXMgYSBwcm9wZXJ0eSBvZiB0aGUgREVDSURFUiwgbm90IG9mIHRoZSBydW46IGl0IG11c3QgYmUgaW4gdGhlXG4gIC8vIGV2aWRlbmNlIG9mIHRoZSBydW4gd2hlcmUgYSBydWxlIHdvbiBqdXN0IGFzIG11Y2ggYXMgaW4gdGhlIHJ1biB0aGF0IGZlbGxcbiAgLy8gdGhyb3VnaC4gRW1pdCBpdCBvbmx5IG9uIHRoZSBmYWxsdGhyb3VnaCBhbmQgYW55IGNvbnN1bWVyIGhhcnZlc3RpbmcgYnJhbmNoXG4gIC8vIG1lYW5pbmdzIHdvdWxkIHdhdGNoIHRoZW0gYXBwZWFyIGFuZCBkaXNhcHBlYXIgd2l0aCB0aGUgZGF0YS5cbiAgY29uc3QgZGVmYXVsdE1lYW5pbmcgPSBkZWZhdWx0TGFiZWwgIT09IHVuZGVmaW5lZCA/IHsgZGVmYXVsdExhYmVsIH0gOiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgZXZhbHVhdGVkUnVsZXM6IFJ1bGVFdmlkZW5jZVtdID0gW107XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIHJ1bGVdIG9mIHJ1bGVzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IHJ1bGVFdmlkZW5jZSA9IGV2YWx1YXRlUnVsZShzY29wZSwgcnVsZSwgaW5kZXgsIGF0dGFjaEZuLCBkZXRhY2hGbiwgdmFsdWVGbiwgcmVkYWN0ZWRGbik7XG4gICAgZXZhbHVhdGVkUnVsZXMucHVzaChydWxlRXZpZGVuY2UpO1xuXG4gICAgaWYgKHJ1bGVFdmlkZW5jZS5tYXRjaGVkKSB7XG4gICAgICBjb25zdCBldmlkZW5jZTogRGVjaXNpb25FdmlkZW5jZSA9IHtcbiAgICAgICAgcnVsZXM6IGV2YWx1YXRlZFJ1bGVzLFxuICAgICAgICBjaG9zZW46IHJ1bGUudGhlbixcbiAgICAgICAgZGVmYXVsdDogZGVmYXVsdEJyYW5jaElkLFxuICAgICAgICAuLi5kZWZhdWx0TWVhbmluZyxcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBicmFuY2g6IHJ1bGUudGhlbiwgW0RFQ0lTSU9OX1JFU1VMVF06IHRydWUsIGV2aWRlbmNlIH07XG4gICAgfVxuICB9XG5cbiAgLy8gRGVmYXVsdDogbm8gcnVsZSBtYXRjaGVkXG4gIGNvbnN0IGV2aWRlbmNlOiBEZWNpc2lvbkV2aWRlbmNlID0ge1xuICAgIHJ1bGVzOiBldmFsdWF0ZWRSdWxlcyxcbiAgICBjaG9zZW46IGRlZmF1bHRCcmFuY2hJZCxcbiAgICBkZWZhdWx0OiBkZWZhdWx0QnJhbmNoSWQsXG4gICAgLi4uZGVmYXVsdE1lYW5pbmcsXG4gIH07XG4gIHJldHVybiB7IGJyYW5jaDogZGVmYXVsdEJyYW5jaElkLCBbREVDSVNJT05fUkVTVUxUXTogdHJ1ZSwgZXZpZGVuY2UgfTtcbn1cblxuLy8gLS0gc2VsZWN0KCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV2YWx1YXRlcyBBTEwgcnVsZXMgKG5vdCBmaXJzdC1tYXRjaCkuIFJldHVybnMgYSBicmFuZGVkIFNlbGVjdGlvblJlc3VsdC5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBUeXBlZFNjb3BlIG9yIFNjb3BlRmFjYWRlXG4gKiBAcGFyYW0gcnVsZXMgLSBBcnJheSBvZiBEZWNpZGVSdWxlIChmdW5jdGlvbiBvciBmaWx0ZXIgd2hlbiBjbGF1c2VzKVxuICpcbiAqICoqRXJyb3IgYmVoYXZpb3I6KiogSWYgYSBgd2hlbmAgZnVuY3Rpb24gdGhyb3dzIGR1cmluZyBldmFsdWF0aW9uLCB0aGUgcnVsZSBpc1xuICogdHJlYXRlZCBhcyBub24tbWF0Y2hpbmcgKGBtYXRjaGVkOiBmYWxzZWApIGFuZCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBjYXB0dXJlZCBpblxuICogYG1hdGNoRXJyb3JgIG9uIHRoYXQgcnVsZSdzIGBSdWxlRXZpZGVuY2VgIGVudHJ5LiBFdmFsdWF0aW9uIGNvbnRpbnVlcyB3aXRoXG4gKiByZW1haW5pbmcgcnVsZXM7IGVycm9ycyBkbyBub3QgcHJvcGFnYXRlIHRvIHRoZSBjYWxsZXIuXG4gKlxuICogKipFbXB0eS1maWx0ZXIgYmVoYXZpb3IgKGFudGktdmFjdW91cy10cnV0aCk6KiogYSBmaWx0ZXIgcnVsZSB3aG9zZSBgd2hlbmAgaXNcbiAqIGB7fWAgKG5vIGV2YWx1YWJsZSBjb25kaXRpb25zKSBORVZFUiBtYXRjaGVzIOKAlCBzYW1lIHJ1bGUgYXMgYGRlY2lkZSgpYDsgYW5cbiAqIGFsd2F5cy1zZWxlY3RlZCBicmFuY2ggbXVzdCBiZSBleHByZXNzZWQgZXhwbGljaXRseSwgbm90IHZpYSBhbiBlbXB0eSBmaWx0ZXIuXG4gKiBVbmtub3duIGZpbHRlciBvcGVyYXRvcnMgYWxzbyBuZXZlciBtYXRjaCAoZGV2IG1vZGUgd2FybnMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0PFMgZXh0ZW5kcyBvYmplY3Q+KHNjb3BlOiBTLCBydWxlczogRGVjaWRlUnVsZTxTPltdKTogU2VsZWN0aW9uUmVzdWx0IHtcbiAgY29uc3QgeyBhdHRhY2hGbiwgZGV0YWNoRm4sIHZhbHVlRm4sIHJlZGFjdGVkRm4gfSA9IHNjb3BlQWNjZXNzb3JzKHNjb3BlKTtcblxuICBjb25zdCBldmFsdWF0ZWRSdWxlczogUnVsZUV2aWRlbmNlW10gPSBbXTtcbiAgY29uc3Qgc2VsZWN0ZWRCcmFuY2hlczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgcnVsZV0gb2YgcnVsZXMuZW50cmllcygpKSB7XG4gICAgY29uc3QgcnVsZUV2aWRlbmNlID0gZXZhbHVhdGVSdWxlKHNjb3BlLCBydWxlLCBpbmRleCwgYXR0YWNoRm4sIGRldGFjaEZuLCB2YWx1ZUZuLCByZWRhY3RlZEZuKTtcbiAgICBldmFsdWF0ZWRSdWxlcy5wdXNoKHJ1bGVFdmlkZW5jZSk7XG5cbiAgICBpZiAocnVsZUV2aWRlbmNlLm1hdGNoZWQpIHtcbiAgICAgIHNlbGVjdGVkQnJhbmNoZXMucHVzaChydWxlLnRoZW4pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGV2aWRlbmNlOiBTZWxlY3Rpb25FdmlkZW5jZSA9IHtcbiAgICBydWxlczogZXZhbHVhdGVkUnVsZXMsXG4gICAgc2VsZWN0ZWQ6IHNlbGVjdGVkQnJhbmNoZXMsXG4gIH07XG4gIHJldHVybiB7IGJyYW5jaGVzOiBzZWxlY3RlZEJyYW5jaGVzLCBbREVDSVNJT05fUkVTVUxUXTogdHJ1ZSwgZXZpZGVuY2UgfTtcbn1cbiJdfQ==
@@ -16,9 +16,9 @@ var decide_js_1 = require("./decide.js");
16
16
  Object.defineProperty(exports, "decide", { enumerable: true, get: function () { return decide_js_1.decide; } });
17
17
  Object.defineProperty(exports, "select", { enumerable: true, get: function () { return decide_js_1.select; } });
18
18
  // Evaluator (for advanced use)
19
- var evaluator_js_1 = require("./evaluator.js");
19
+ var evaluator_js_1 = require("../filter/evaluator.js");
20
20
  Object.defineProperty(exports, "evaluateFilter", { enumerable: true, get: function () { return evaluator_js_1.evaluateFilter; } });
21
21
  // Evidence collector (for advanced use)
22
22
  var evidence_js_1 = require("./evidence.js");
23
23
  Object.defineProperty(exports, "EvidenceCollector", { enumerable: true, get: function () { return evidence_js_1.EvidenceCollector; } });
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2RlY2lkZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFvQkgsb0JBQW9CO0FBQ3BCLHVDQUE2QztBQUFwQywyR0FBQSxlQUFlLE9BQUE7QUFFeEIsaUJBQWlCO0FBQ2pCLHlDQUE2QztBQUFwQyxtR0FBQSxNQUFNLE9BQUE7QUFBRSxtR0FBQSxNQUFNLE9BQUE7QUFFdkIsK0JBQStCO0FBQy9CLCtDQUFnRDtBQUF2Qyw4R0FBQSxjQUFjLE9BQUE7QUFFdkIsd0NBQXdDO0FBQ3hDLDZDQUFrRDtBQUF6QyxnSEFBQSxpQkFBaUIsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZGVjaWRlLyAtLSBEZWNpc2lvbiByZWFzb25pbmcgY2FwdHVyZSBmb3IgZm9vdHByaW50anMuXG4gKlxuICogZGVjaWRlKCkgYW5kIHNlbGVjdCgpIGF1dG8tY2FwdHVyZSBldmlkZW5jZSBmcm9tIGRlY2lkZXIvc2VsZWN0b3IgZnVuY3Rpb25zOlxuICogLSBGdW5jdGlvbiB3aGVuOiAocykgPT4gcy5jcmVkaXRTY29yZSA+IDcwMCAgKGF1dG8tY2FwdHVyZXMgcmVhZHMpXG4gKiAtIEZpbHRlciB3aGVuOiAgeyBjcmVkaXRTY29yZTogeyBndDogNzAwIH0gfSAgKGNhcHR1cmVzIHJlYWRzICsgb3BlcmF0b3JzICsgdGhyZXNob2xkcylcbiAqL1xuXG4vLyBUeXBlc1xuZXhwb3J0IHR5cGUge1xuICBEZWNpZGVSdWxlLFxuICBEZWNpc2lvbkV2aWRlbmNlLFxuICBEZWNpc2lvblJlc3VsdCxcbiAgRGVmYXVsdEJyYW5jaCxcbiAgRmlsdGVyQ29uZGl0aW9uLFxuICBGaWx0ZXJPcHMsXG4gIEZpbHRlclJ1bGVFdmlkZW5jZSxcbiAgRnVuY3Rpb25SdWxlRXZpZGVuY2UsXG4gIFJlYWRJbnB1dCxcbiAgUnVsZUV2aWRlbmNlLFxuICBTZWxlY3Rpb25FdmlkZW5jZSxcbiAgU2VsZWN0aW9uUmVzdWx0LFxuICBXaGVuQ2xhdXNlLFxuICBXaGVyZUZpbHRlcixcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIFJ1bnRpbWUgY29uc3RhbnRzXG5leHBvcnQgeyBERUNJU0lPTl9SRVNVTFQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8gQ29yZSBmdW5jdGlvbnNcbmV4cG9ydCB7IGRlY2lkZSwgc2VsZWN0IH0gZnJvbSAnLi9kZWNpZGUuanMnO1xuXG4vLyBFdmFsdWF0b3IgKGZvciBhZHZhbmNlZCB1c2UpXG5leHBvcnQgeyBldmFsdWF0ZUZpbHRlciB9IGZyb20gJy4vZXZhbHVhdG9yLmpzJztcblxuLy8gRXZpZGVuY2UgY29sbGVjdG9yIChmb3IgYWR2YW5jZWQgdXNlKVxuZXhwb3J0IHsgRXZpZGVuY2VDb2xsZWN0b3IgfSBmcm9tICcuL2V2aWRlbmNlLmpzJztcbiJdfQ==
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2RlY2lkZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFvQkgsb0JBQW9CO0FBQ3BCLHVDQUE2QztBQUFwQywyR0FBQSxlQUFlLE9BQUE7QUFFeEIsaUJBQWlCO0FBQ2pCLHlDQUE2QztBQUFwQyxtR0FBQSxNQUFNLE9BQUE7QUFBRSxtR0FBQSxNQUFNLE9BQUE7QUFFdkIsK0JBQStCO0FBQy9CLHVEQUF3RDtBQUEvQyw4R0FBQSxjQUFjLE9BQUE7QUFFdkIsd0NBQXdDO0FBQ3hDLDZDQUFrRDtBQUF6QyxnSEFBQSxpQkFBaUIsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZGVjaWRlLyAtLSBEZWNpc2lvbiByZWFzb25pbmcgY2FwdHVyZSBmb3IgZm9vdHByaW50anMuXG4gKlxuICogZGVjaWRlKCkgYW5kIHNlbGVjdCgpIGF1dG8tY2FwdHVyZSBldmlkZW5jZSBmcm9tIGRlY2lkZXIvc2VsZWN0b3IgZnVuY3Rpb25zOlxuICogLSBGdW5jdGlvbiB3aGVuOiAocykgPT4gcy5jcmVkaXRTY29yZSA+IDcwMCAgKGF1dG8tY2FwdHVyZXMgcmVhZHMpXG4gKiAtIEZpbHRlciB3aGVuOiAgeyBjcmVkaXRTY29yZTogeyBndDogNzAwIH0gfSAgKGNhcHR1cmVzIHJlYWRzICsgb3BlcmF0b3JzICsgdGhyZXNob2xkcylcbiAqL1xuXG4vLyBUeXBlc1xuZXhwb3J0IHR5cGUge1xuICBEZWNpZGVSdWxlLFxuICBEZWNpc2lvbkV2aWRlbmNlLFxuICBEZWNpc2lvblJlc3VsdCxcbiAgRGVmYXVsdEJyYW5jaCxcbiAgRmlsdGVyQ29uZGl0aW9uLFxuICBGaWx0ZXJPcHMsXG4gIEZpbHRlclJ1bGVFdmlkZW5jZSxcbiAgRnVuY3Rpb25SdWxlRXZpZGVuY2UsXG4gIFJlYWRJbnB1dCxcbiAgUnVsZUV2aWRlbmNlLFxuICBTZWxlY3Rpb25FdmlkZW5jZSxcbiAgU2VsZWN0aW9uUmVzdWx0LFxuICBXaGVuQ2xhdXNlLFxuICBXaGVyZUZpbHRlcixcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIFJ1bnRpbWUgY29uc3RhbnRzXG5leHBvcnQgeyBERUNJU0lPTl9SRVNVTFQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8gQ29yZSBmdW5jdGlvbnNcbmV4cG9ydCB7IGRlY2lkZSwgc2VsZWN0IH0gZnJvbSAnLi9kZWNpZGUuanMnO1xuXG4vLyBFdmFsdWF0b3IgKGZvciBhZHZhbmNlZCB1c2UpXG5leHBvcnQgeyBldmFsdWF0ZUZpbHRlciB9IGZyb20gJy4uL2ZpbHRlci9ldmFsdWF0b3IuanMnO1xuXG4vLyBFdmlkZW5jZSBjb2xsZWN0b3IgKGZvciBhZHZhbmNlZCB1c2UpXG5leHBvcnQgeyBFdmlkZW5jZUNvbGxlY3RvciB9IGZyb20gJy4vZXZpZGVuY2UuanMnO1xuIl19