footprintjs 9.48.2 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (326) hide show
  1. package/AGENTS.md +12 -10
  2. package/CLAUDE.md +21 -23
  3. package/README.md +1 -1
  4. package/dist/advanced.js +71 -128
  5. package/dist/esm/advanced.d.ts +24 -58
  6. package/dist/esm/advanced.js +13 -51
  7. package/dist/esm/index.d.ts +5 -8
  8. package/dist/esm/index.js +3 -3
  9. package/dist/esm/lib/builder/FlowChartBuilder.d.ts +1 -1
  10. package/dist/esm/lib/builder/FlowChartBuilder.js +3 -3
  11. package/dist/esm/lib/builder/structure/StructureRecorder.d.ts +1 -1
  12. package/dist/esm/lib/builder/structure/StructureRecorder.js +1 -1
  13. package/dist/esm/lib/capture/index.d.ts +0 -1
  14. package/dist/esm/lib/capture/index.js +1 -2
  15. package/dist/esm/lib/engine/graph/prefixNodeTree.js +2 -2
  16. package/dist/esm/lib/engine/handlers/ResumeEntry.d.ts +3 -3
  17. package/dist/esm/lib/engine/handlers/ResumeEntry.js +4 -4
  18. package/dist/esm/lib/engine/handlers/SubflowExecutor.d.ts +1 -2
  19. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +4 -8
  20. package/dist/esm/lib/engine/index.d.ts +1 -1
  21. package/dist/esm/lib/engine/index.js +1 -1
  22. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +4 -4
  23. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +1 -1
  24. package/dist/esm/lib/engine/narrative/index.d.ts +1 -1
  25. package/dist/esm/lib/engine/narrative/index.js +1 -1
  26. package/dist/esm/lib/engine/narrative/narrativeTypes.d.ts +1 -11
  27. package/dist/esm/lib/engine/narrative/narrativeTypes.js +1 -1
  28. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +2 -10
  29. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +4 -6
  30. package/dist/esm/lib/engine/traversalContext.d.ts +1 -1
  31. package/dist/esm/lib/engine/traversalContext.js +2 -2
  32. package/dist/esm/lib/engine/types.d.ts +2 -10
  33. package/dist/esm/lib/engine/types.js +1 -1
  34. package/dist/esm/lib/engine/walkSubflowSpec.js +2 -2
  35. package/dist/esm/lib/ids/reservedIds.js +2 -2
  36. package/dist/esm/lib/memory/DiagnosticCollector.js +2 -2
  37. package/dist/esm/lib/memory/StageContext.d.ts +2 -4
  38. package/dist/esm/lib/memory/StageContext.js +2 -2
  39. package/dist/esm/lib/memory/borrowedMutation.js +2 -2
  40. package/dist/esm/lib/memory/index.d.ts +6 -21
  41. package/dist/esm/lib/memory/index.js +4 -22
  42. package/dist/esm/lib/memory/redaction.d.ts +1 -1
  43. package/dist/esm/lib/memory/redaction.js +2 -2
  44. package/dist/esm/lib/memory/runPolicy.d.ts +3 -2
  45. package/dist/esm/lib/memory/runPolicy.js +1 -1
  46. package/dist/esm/lib/reactive/createTypedScope.js +2 -2
  47. package/dist/esm/lib/reactive/writeTraps.js +2 -2
  48. package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +3 -2
  49. package/dist/esm/lib/recorder/ControlDepRecorder.js +3 -2
  50. package/dist/esm/lib/recorder/EmitRecorder.d.ts +1 -1
  51. package/dist/esm/lib/recorder/EmitRecorder.js +1 -1
  52. package/dist/esm/lib/recorder/InOutRecorder.js +2 -2
  53. package/dist/esm/lib/recorder/qualityTrace.d.ts +1 -1
  54. package/dist/esm/lib/recorder/qualityTrace.js +2 -2
  55. package/dist/esm/lib/runner/DeferredObserverTier.js +2 -2
  56. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +4 -5
  57. package/dist/esm/lib/runner/ExecutionRuntime.js +2 -5
  58. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +1 -1
  59. package/dist/esm/lib/runner/FlowChartExecutor.js +1 -1
  60. package/dist/esm/lib/runner/getSubtreeSnapshot.d.ts +1 -1
  61. package/dist/esm/lib/runner/getSubtreeSnapshot.js +4 -4
  62. package/dist/esm/lib/runner/resume.js +2 -2
  63. package/dist/esm/lib/runner/snapshot.js +3 -2
  64. package/dist/esm/lib/scope/ScopeFacade.js +2 -2
  65. package/dist/esm/lib/scope/state/zod/scopeFactory.js +2 -2
  66. package/dist/esm/recorders.d.ts +2 -3
  67. package/dist/esm/recorders.js +1 -1
  68. package/dist/esm/trace.d.ts +11 -57
  69. package/dist/esm/trace.js +10 -68
  70. package/dist/index.js +3 -3
  71. package/dist/lib/builder/FlowChartBuilder.js +5 -5
  72. package/dist/lib/builder/structure/StructureRecorder.js +1 -1
  73. package/dist/lib/capture/index.js +2 -4
  74. package/dist/lib/engine/graph/prefixNodeTree.js +5 -5
  75. package/dist/lib/engine/handlers/ResumeEntry.js +4 -4
  76. package/dist/lib/engine/handlers/SubflowExecutor.js +5 -9
  77. package/dist/lib/engine/index.js +1 -1
  78. package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +1 -1
  79. package/dist/lib/engine/narrative/index.js +1 -1
  80. package/dist/lib/engine/narrative/narrativeTypes.js +1 -1
  81. package/dist/lib/engine/traversal/FlowchartTraverser.js +8 -10
  82. package/dist/lib/engine/traversalContext.js +4 -4
  83. package/dist/lib/engine/types.js +1 -1
  84. package/dist/lib/engine/walkSubflowSpec.js +3 -3
  85. package/dist/lib/ids/reservedIds.js +5 -5
  86. package/dist/lib/memory/DiagnosticCollector.js +3 -3
  87. package/dist/lib/memory/StageContext.js +3 -3
  88. package/dist/lib/memory/borrowedMutation.js +3 -3
  89. package/dist/lib/memory/index.js +7 -42
  90. package/dist/lib/memory/redaction.js +3 -3
  91. package/dist/lib/memory/runPolicy.js +1 -1
  92. package/dist/lib/reactive/createTypedScope.js +3 -3
  93. package/dist/lib/reactive/writeTraps.js +4 -4
  94. package/dist/lib/recorder/ControlDepRecorder.js +3 -2
  95. package/dist/lib/recorder/EmitRecorder.js +1 -1
  96. package/dist/lib/recorder/InOutRecorder.js +3 -3
  97. package/dist/lib/recorder/qualityTrace.js +4 -4
  98. package/dist/lib/runner/DeferredObserverTier.js +3 -3
  99. package/dist/lib/runner/ExecutionRuntime.js +6 -9
  100. package/dist/lib/runner/FlowChartExecutor.js +1 -1
  101. package/dist/lib/runner/getSubtreeSnapshot.js +6 -6
  102. package/dist/lib/runner/resume.js +3 -3
  103. package/dist/lib/runner/snapshot.js +6 -5
  104. package/dist/lib/scope/ScopeFacade.js +3 -3
  105. package/dist/lib/scope/state/zod/scopeFactory.js +4 -4
  106. package/dist/recorders.js +1 -1
  107. package/dist/trace.js +18 -120
  108. package/dist/types/advanced.d.ts +24 -58
  109. package/dist/types/index.d.ts +5 -8
  110. package/dist/types/lib/builder/FlowChartBuilder.d.ts +1 -1
  111. package/dist/types/lib/builder/structure/StructureRecorder.d.ts +1 -1
  112. package/dist/types/lib/capture/index.d.ts +0 -1
  113. package/dist/types/lib/engine/handlers/ResumeEntry.d.ts +3 -3
  114. package/dist/types/lib/engine/handlers/SubflowExecutor.d.ts +1 -2
  115. package/dist/types/lib/engine/index.d.ts +1 -1
  116. package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +4 -4
  117. package/dist/types/lib/engine/narrative/index.d.ts +1 -1
  118. package/dist/types/lib/engine/narrative/narrativeTypes.d.ts +1 -11
  119. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +2 -10
  120. package/dist/types/lib/engine/traversalContext.d.ts +1 -1
  121. package/dist/types/lib/engine/types.d.ts +2 -10
  122. package/dist/types/lib/memory/StageContext.d.ts +2 -4
  123. package/dist/types/lib/memory/index.d.ts +6 -21
  124. package/dist/types/lib/memory/redaction.d.ts +1 -1
  125. package/dist/types/lib/memory/runPolicy.d.ts +3 -2
  126. package/dist/types/lib/recorder/ControlDepRecorder.d.ts +3 -2
  127. package/dist/types/lib/recorder/EmitRecorder.d.ts +1 -1
  128. package/dist/types/lib/recorder/qualityTrace.d.ts +1 -1
  129. package/dist/types/lib/runner/ExecutionRuntime.d.ts +4 -5
  130. package/dist/types/lib/runner/FlowChartExecutor.d.ts +1 -1
  131. package/dist/types/lib/runner/getSubtreeSnapshot.d.ts +1 -1
  132. package/dist/types/recorders.d.ts +2 -3
  133. package/dist/types/trace.d.ts +11 -57
  134. package/package.json +6 -15
  135. package/dist/esm/lib/capture/freeze.d.ts +0 -91
  136. package/dist/esm/lib/capture/freeze.js +0 -314
  137. package/dist/esm/lib/capture/ownData.d.ts +0 -7
  138. package/dist/esm/lib/capture/ownData.js +0 -15
  139. package/dist/esm/lib/capture/valueKinds.d.ts +0 -57
  140. package/dist/esm/lib/capture/valueKinds.js +0 -142
  141. package/dist/esm/lib/ids/runtimeStageId.d.ts +0 -173
  142. package/dist/esm/lib/ids/runtimeStageId.js +0 -194
  143. package/dist/esm/lib/memory/EventLog.d.ts +0 -105
  144. package/dist/esm/lib/memory/EventLog.js +0 -148
  145. package/dist/esm/lib/memory/RecordFrame.d.ts +0 -232
  146. package/dist/esm/lib/memory/RecordFrame.js +0 -296
  147. package/dist/esm/lib/memory/SharedMemory.d.ts +0 -46
  148. package/dist/esm/lib/memory/SharedMemory.js +0 -88
  149. package/dist/esm/lib/memory/TransactionBuffer.d.ts +0 -521
  150. package/dist/esm/lib/memory/TransactionBuffer.js +0 -946
  151. package/dist/esm/lib/memory/admission.d.ts +0 -81
  152. package/dist/esm/lib/memory/admission.js +0 -153
  153. package/dist/esm/lib/memory/backtrack.d.ts +0 -286
  154. package/dist/esm/lib/memory/backtrack.js +0 -457
  155. package/dist/esm/lib/memory/commitLogUtils.d.ts +0 -217
  156. package/dist/esm/lib/memory/commitLogUtils.js +0 -384
  157. package/dist/esm/lib/memory/deltaEncoding.d.ts +0 -66
  158. package/dist/esm/lib/memory/deltaEncoding.js +0 -122
  159. package/dist/esm/lib/memory/equality.d.ts +0 -93
  160. package/dist/esm/lib/memory/equality.js +0 -262
  161. package/dist/esm/lib/memory/eventPosition.d.ts +0 -18
  162. package/dist/esm/lib/memory/eventPosition.js +0 -2
  163. package/dist/esm/lib/memory/honesty.d.ts +0 -93
  164. package/dist/esm/lib/memory/honesty.js +0 -92
  165. package/dist/esm/lib/memory/keyPaths.d.ts +0 -125
  166. package/dist/esm/lib/memory/keyPaths.js +0 -227
  167. package/dist/esm/lib/memory/logModel.d.ts +0 -76
  168. package/dist/esm/lib/memory/logModel.js +0 -364
  169. package/dist/esm/lib/memory/merge.d.ts +0 -26
  170. package/dist/esm/lib/memory/merge.js +0 -60
  171. package/dist/esm/lib/memory/pathOps.d.ts +0 -115
  172. package/dist/esm/lib/memory/pathOps.js +0 -290
  173. package/dist/esm/lib/memory/paths.d.ts +0 -52
  174. package/dist/esm/lib/memory/paths.js +0 -57
  175. package/dist/esm/lib/memory/placeholders.d.ts +0 -39
  176. package/dist/esm/lib/memory/placeholders.js +0 -40
  177. package/dist/esm/lib/memory/recordCommit.d.ts +0 -45
  178. package/dist/esm/lib/memory/recordCommit.js +0 -61
  179. package/dist/esm/lib/memory/scrub.d.ts +0 -53
  180. package/dist/esm/lib/memory/scrub.js +0 -74
  181. package/dist/esm/lib/memory/types.d.ts +0 -209
  182. package/dist/esm/lib/memory/types.js +0 -10
  183. package/dist/esm/lib/memory/utils.d.ts +0 -73
  184. package/dist/esm/lib/memory/utils.js +0 -159
  185. package/dist/esm/lib/memory/verbs.d.ts +0 -333
  186. package/dist/esm/lib/memory/verbs.js +0 -427
  187. package/dist/esm/lib/recorder/CommitRangeIndex.d.ts +0 -147
  188. package/dist/esm/lib/recorder/CommitRangeIndex.js +0 -207
  189. package/dist/esm/lib/scope/detectCircular.d.ts +0 -13
  190. package/dist/esm/lib/scope/detectCircular.js +0 -14
  191. package/dist/esm/lib/scope/recorders/summarizeValue.d.ts +0 -5
  192. package/dist/esm/lib/scope/recorders/summarizeValue.js +0 -6
  193. package/dist/esm/lib/slice/elementProvenance.d.ts +0 -81
  194. package/dist/esm/lib/slice/elementProvenance.js +0 -190
  195. package/dist/esm/lib/slice/forwardSliceForKey.d.ts +0 -88
  196. package/dist/esm/lib/slice/forwardSliceForKey.js +0 -243
  197. package/dist/esm/lib/slice/index.d.ts +0 -25
  198. package/dist/esm/lib/slice/index.js +0 -25
  199. package/dist/esm/lib/slice/keyIndex.d.ts +0 -137
  200. package/dist/esm/lib/slice/keyIndex.js +0 -293
  201. package/dist/esm/lib/slice/keyTimeline.d.ts +0 -49
  202. package/dist/esm/lib/slice/keyTimeline.js +0 -113
  203. package/dist/esm/lib/slice/keysReadSources.d.ts +0 -51
  204. package/dist/esm/lib/slice/keysReadSources.js +0 -95
  205. package/dist/esm/lib/slice/serialize.d.ts +0 -78
  206. package/dist/esm/lib/slice/serialize.js +0 -278
  207. package/dist/esm/lib/slice/sliceForKey.d.ts +0 -47
  208. package/dist/esm/lib/slice/sliceForKey.js +0 -88
  209. package/dist/esm/lib/slice/types.d.ts +0 -567
  210. package/dist/esm/lib/slice/types.js +0 -25
  211. package/dist/esm/lib/time-travel/axis.d.ts +0 -119
  212. package/dist/esm/lib/time-travel/axis.js +0 -179
  213. package/dist/esm/lib/time-travel/bundles.d.ts +0 -77
  214. package/dist/esm/lib/time-travel/bundles.js +0 -136
  215. package/dist/esm/lib/time-travel/chain.d.ts +0 -93
  216. package/dist/esm/lib/time-travel/chain.js +0 -188
  217. package/dist/esm/lib/time-travel/commitStops.d.ts +0 -55
  218. package/dist/esm/lib/time-travel/commitStops.js +0 -202
  219. package/dist/esm/lib/time-travel/index.d.ts +0 -22
  220. package/dist/esm/lib/time-travel/index.js +0 -21
  221. package/dist/esm/lib/time-travel/stateAt.d.ts +0 -102
  222. package/dist/esm/lib/time-travel/stateAt.js +0 -153
  223. package/dist/esm/lib/time-travel/tagStops.d.ts +0 -72
  224. package/dist/esm/lib/time-travel/tagStops.js +0 -102
  225. package/dist/esm/lib/time-travel/timeTravel.d.ts +0 -70
  226. package/dist/esm/lib/time-travel/timeTravel.js +0 -360
  227. package/dist/esm/lib/time-travel/types.d.ts +0 -470
  228. package/dist/esm/lib/time-travel/types.js +0 -23
  229. package/dist/esm/write.d.ts +0 -47
  230. package/dist/esm/write.js +0 -46
  231. package/dist/lib/capture/freeze.js +0 -320
  232. package/dist/lib/capture/ownData.js +0 -19
  233. package/dist/lib/capture/valueKinds.js +0 -146
  234. package/dist/lib/ids/runtimeStageId.js +0 -210
  235. package/dist/lib/memory/EventLog.js +0 -152
  236. package/dist/lib/memory/RecordFrame.js +0 -300
  237. package/dist/lib/memory/SharedMemory.js +0 -92
  238. package/dist/lib/memory/TransactionBuffer.js +0 -950
  239. package/dist/lib/memory/admission.js +0 -159
  240. package/dist/lib/memory/backtrack.js +0 -463
  241. package/dist/lib/memory/commitLogUtils.js +0 -399
  242. package/dist/lib/memory/deltaEncoding.js +0 -128
  243. package/dist/lib/memory/equality.js +0 -266
  244. package/dist/lib/memory/eventPosition.js +0 -3
  245. package/dist/lib/memory/honesty.js +0 -95
  246. package/dist/lib/memory/keyPaths.js +0 -243
  247. package/dist/lib/memory/logModel.js +0 -372
  248. package/dist/lib/memory/merge.js +0 -64
  249. package/dist/lib/memory/pathOps.js +0 -306
  250. package/dist/lib/memory/paths.js +0 -62
  251. package/dist/lib/memory/placeholders.js +0 -43
  252. package/dist/lib/memory/recordCommit.js +0 -65
  253. package/dist/lib/memory/scrub.js +0 -79
  254. package/dist/lib/memory/types.js +0 -11
  255. package/dist/lib/memory/utils.js +0 -178
  256. package/dist/lib/memory/verbs.js +0 -444
  257. package/dist/lib/recorder/CommitRangeIndex.js +0 -211
  258. package/dist/lib/scope/detectCircular.js +0 -21
  259. package/dist/lib/scope/recorders/summarizeValue.js +0 -10
  260. package/dist/lib/slice/elementProvenance.js +0 -195
  261. package/dist/lib/slice/forwardSliceForKey.js +0 -247
  262. package/dist/lib/slice/index.js +0 -42
  263. package/dist/lib/slice/keyIndex.js +0 -313
  264. package/dist/lib/slice/keyTimeline.js +0 -117
  265. package/dist/lib/slice/keysReadSources.js +0 -101
  266. package/dist/lib/slice/serialize.js +0 -286
  267. package/dist/lib/slice/sliceForKey.js +0 -93
  268. package/dist/lib/slice/types.js +0 -26
  269. package/dist/lib/time-travel/axis.js +0 -184
  270. package/dist/lib/time-travel/bundles.js +0 -144
  271. package/dist/lib/time-travel/chain.js +0 -193
  272. package/dist/lib/time-travel/commitStops.js +0 -206
  273. package/dist/lib/time-travel/index.js +0 -32
  274. package/dist/lib/time-travel/stateAt.js +0 -160
  275. package/dist/lib/time-travel/tagStops.js +0 -106
  276. package/dist/lib/time-travel/timeTravel.js +0 -364
  277. package/dist/lib/time-travel/types.js +0 -24
  278. package/dist/types/lib/capture/freeze.d.ts +0 -91
  279. package/dist/types/lib/capture/ownData.d.ts +0 -7
  280. package/dist/types/lib/capture/valueKinds.d.ts +0 -57
  281. package/dist/types/lib/ids/runtimeStageId.d.ts +0 -173
  282. package/dist/types/lib/memory/EventLog.d.ts +0 -105
  283. package/dist/types/lib/memory/RecordFrame.d.ts +0 -232
  284. package/dist/types/lib/memory/SharedMemory.d.ts +0 -46
  285. package/dist/types/lib/memory/TransactionBuffer.d.ts +0 -521
  286. package/dist/types/lib/memory/admission.d.ts +0 -81
  287. package/dist/types/lib/memory/backtrack.d.ts +0 -286
  288. package/dist/types/lib/memory/commitLogUtils.d.ts +0 -217
  289. package/dist/types/lib/memory/deltaEncoding.d.ts +0 -66
  290. package/dist/types/lib/memory/equality.d.ts +0 -93
  291. package/dist/types/lib/memory/eventPosition.d.ts +0 -18
  292. package/dist/types/lib/memory/honesty.d.ts +0 -93
  293. package/dist/types/lib/memory/keyPaths.d.ts +0 -125
  294. package/dist/types/lib/memory/logModel.d.ts +0 -76
  295. package/dist/types/lib/memory/merge.d.ts +0 -26
  296. package/dist/types/lib/memory/pathOps.d.ts +0 -115
  297. package/dist/types/lib/memory/paths.d.ts +0 -52
  298. package/dist/types/lib/memory/placeholders.d.ts +0 -39
  299. package/dist/types/lib/memory/recordCommit.d.ts +0 -45
  300. package/dist/types/lib/memory/scrub.d.ts +0 -53
  301. package/dist/types/lib/memory/types.d.ts +0 -209
  302. package/dist/types/lib/memory/utils.d.ts +0 -73
  303. package/dist/types/lib/memory/verbs.d.ts +0 -333
  304. package/dist/types/lib/recorder/CommitRangeIndex.d.ts +0 -147
  305. package/dist/types/lib/scope/detectCircular.d.ts +0 -13
  306. package/dist/types/lib/scope/recorders/summarizeValue.d.ts +0 -5
  307. package/dist/types/lib/slice/elementProvenance.d.ts +0 -81
  308. package/dist/types/lib/slice/forwardSliceForKey.d.ts +0 -88
  309. package/dist/types/lib/slice/index.d.ts +0 -25
  310. package/dist/types/lib/slice/keyIndex.d.ts +0 -137
  311. package/dist/types/lib/slice/keyTimeline.d.ts +0 -49
  312. package/dist/types/lib/slice/keysReadSources.d.ts +0 -51
  313. package/dist/types/lib/slice/serialize.d.ts +0 -78
  314. package/dist/types/lib/slice/sliceForKey.d.ts +0 -47
  315. package/dist/types/lib/slice/types.d.ts +0 -567
  316. package/dist/types/lib/time-travel/axis.d.ts +0 -119
  317. package/dist/types/lib/time-travel/bundles.d.ts +0 -77
  318. package/dist/types/lib/time-travel/chain.d.ts +0 -93
  319. package/dist/types/lib/time-travel/commitStops.d.ts +0 -55
  320. package/dist/types/lib/time-travel/index.d.ts +0 -22
  321. package/dist/types/lib/time-travel/stateAt.d.ts +0 -102
  322. package/dist/types/lib/time-travel/tagStops.d.ts +0 -72
  323. package/dist/types/lib/time-travel/timeTravel.d.ts +0 -70
  324. package/dist/types/lib/time-travel/types.d.ts +0 -470
  325. package/dist/types/write.d.ts +0 -47
  326. package/dist/write.js +0 -52
@@ -29,9 +29,10 @@
29
29
  * rule's marks. The mirror STORE is not policy — each runtime (a subflow has its own) keeps
30
30
  * its own store when `mirror` is set.
31
31
  */
32
+ import type { CommitValuesMode } from 'foottrace';
33
+ import type { WriteProvenanceMode } from 'foottrace/write';
32
34
  import type { ReadTrackingMode, WriteTrackingMode } from './frameTypes.js';
33
35
  import type { RedactionRule } from './redaction.js';
34
- import type { CommitValuesMode, WriteProvenanceMode } from './types.js';
35
36
  /**
36
37
  * The four observability dials as an executor takes them — every field optional, an absent
37
38
  * one is its default. `FlowChartExecutorOptions` extends this interface.
@@ -102,7 +103,7 @@ export interface RunDials {
102
103
  *
103
104
  * Consumers that read `bundle.overwrite[key]` as "the full value written"
104
105
  * must switch to `commitValueAt(commitLog, idx, key)` from
105
- * `footprintjs/trace` — under `'delta'` that value is verb-qualified (an
106
+ * `foottrace` — under `'delta'` that value is verb-qualified (an
106
107
  * `append` bundle holds only the tail). Path-tier consumers
107
108
  * (`findLastWriter`, `causalChain`, narrative, lens highlights) are
108
109
  * unaffected. The active mode is surfaced as
@@ -66,4 +66,4 @@ export function withRedaction(policy, redaction) {
66
66
  export function derivePolicy(policy, patch) {
67
67
  return Object.freeze({ ...policy, ...patch });
68
68
  }
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuUG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvcnVuUG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFnSEgseUdBQXlHO0FBQ3pHLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN2RSxZQUFZLEVBQUUsTUFBTTtJQUNwQixhQUFhLEVBQUUsTUFBTTtJQUNyQixZQUFZLEVBQUUsTUFBTTtJQUNwQixlQUFlLEVBQUUsS0FBSztDQUN2QixDQUFDLENBQUM7QUFFSCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBMEIsQ0FBQztBQUV2RSwyR0FBMkc7QUFDM0csTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQWMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsYUFBYSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBRWhHLG1GQUFtRjtBQUNuRixNQUFNLFVBQVUsU0FBUyxDQUFDLFFBQWtCLEVBQUUsRUFBRSxTQUF5QixFQUFFLE1BQU0sR0FBRyxLQUFLO0lBQ3ZGLE1BQU0sUUFBUSxHQUE0QixFQUFFLEdBQUcsYUFBYSxFQUFFLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzVGLElBQUksU0FBUztRQUFFLFFBQVEsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzlDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQXlCLENBQUM7QUFDekQsQ0FBQztBQUVELHFGQUFxRjtBQUNyRixNQUFNLFVBQVUsU0FBUyxDQUFDLE1BQWdCO0lBQ3hDLE1BQU0sS0FBSyxHQUE0QixFQUFFLENBQUM7SUFDMUMsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVO1FBQUUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUztZQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUYsT0FBTyxLQUFpQixDQUFDO0FBQzNCLENBQUM7QUFFRCw2RkFBNkY7QUFDN0YsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFpQixFQUFFLFNBQXdCO0lBQ3ZFLE9BQU8sWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLE1BQWlCLEVBQUUsS0FBeUI7SUFDdkUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJ1blBvbGljeSDigJQgd2hhdCBhIHJ1biByZXRhaW5zLCBlbmNvZGVzIGFuZCBzY3J1YnMsIGFzIE9ORSBpbW11dGFibGUgb2JqZWN0IChGNSkuXG4gKlxuICogV0hZLiBBIHJ1biBjYXJyaWVzIHNpeCBzZXR0aW5ncyB0aGF0IGV2ZXJ5IHN0YWdlIGZyYW1lIG11c3QgYWdyZWUgb246IHRoZSBmb3VyXG4gKiBvYnNlcnZhYmlsaXR5IGRpYWxzIChgcmVhZFRyYWNraW5nYCwgYHdyaXRlVHJhY2tpbmdgLCBgY29tbWl0VmFsdWVzYCwgYHdyaXRlUHJvdmVuYW5jZWApLFxuICogdGhlIHJlZGFjdGlvbiBydWxlLCBhbmQgd2hldGhlciBhIHJlZGFjdGVkIG1pcnJvciBpcyBrZXB0LiBVbnRpbCA5LjM0LjAgZWFjaCBvbmUgd2FzXG4gKiBjb3BpZWQgZmllbGQgYnkgZmllbGQgZG93biB0aHJlZSBzZXBhcmF0ZSBwYXRocyDigJQgYEV4ZWN1dGlvblJ1bnRpbWUudXNlKmAgb24gdGhlIHJvb3QsXG4gKiBgU3RhZ2VDb250ZXh0LmNyZWF0ZU5leHRgL2BjcmVhdGVDaGlsZGAgKHNpeCBhc3NpZ25tZW50cyBlYWNoKSwgYW5kIGEgZHVjay10eXBlZCBwdXNoIHBlclxuICogZGlhbCBpbiBgU3ViZmxvd0V4ZWN1dG9yYCDigJQgc28gYSBuZXcgZGlhbCBtZWFudCBzaXggZWRpdHMsIGFuZCBhIG1pc3NlZCBvbmUgcmFuIGEgc3ViZmxvd1xuICogb24gdGhlIGRlZmF1bHQgc2lsZW50bHkuIE5vdyB0aGUgZXhlY3V0b3IgYnVpbGRzIE9ORSBwb2xpY3kgcGVyIHJ1biAoYW5kIHBlciByZXN1bWUpLCB0aGVcbiAqIHJ1bnRpbWUgaW5zdGFsbHMgaXQgb24gaXRzIHJvb3QgZnJhbWUsIGFuZCBldmVyeSBmcmFtZSBob2xkcyBpdCBCWSBSRUZFUkVOQ0U6IGEgY2hpbGQsIGFcbiAqIGNvbnRpbnVhdGlvbiBhbmQgYSBzdWJmbG93J3Mgcm9vdCAoaXRzIHNlZWQgZnJhbWUgaW5jbHVkZWQpIGFsbCBwb2ludCBhdCB0aGUgc2FtZSBvYmplY3QuXG4gKiBUaGUgYm9ycm93ZWQgaWRlYSBpcyBHbydzIGBjb250ZXh0LkNvbnRleHRgIC8gT3BlblRlbGVtZXRyeSdzIGBDb250ZXh0YDogYW4gaW1tdXRhYmxlIHZhbHVlXG4gKiBoYW5kZWQgZG93biwgbmV2ZXIgY29waWVkIGFwYXJ0LlxuICpcbiAqIEFERElORyBBIERJQUwgaXMgdHdvIGZpbGVzOiBhIGZpZWxkICsgaXRzIGRlZmF1bHQgaGVyZSAoe0BsaW5rIFJ1bkRpYWxzfSxcbiAqIHtAbGluayBESUFMX0RFRkFVTFRTfSksIGFuZCB0aGUgZnJhbWUgY29kZSB0aGF0IHJlYWRzIGBwb2xpY3kuPGRpYWw+YCAoYFN0YWdlQ29udGV4dGApLiBUaGVcbiAqIGV4ZWN1dG9yJ3Mgb3B0aW9ucyBpbmhlcml0IHtAbGluayBSdW5EaWFsc30sIHBpY2tzIHRoZW0gd2l0aCB7QGxpbmsgcGlja0RpYWxzfSwgYW5kIGV2ZXJ5XG4gKiBwcm9wYWdhdGlvbiBwYXRoIGNhcnJpZXMgdGhlIHdob2xlIG9iamVjdCDigJQgbm9uZSBvZiB0aGVtIG5hbWVzIGEgZGlhbC5cbiAqXG4gKiBgYGB0c1xuICogY29uc3QgcG9saWN5ID0gcnVuUG9saWN5KHsgY29tbWl0VmFsdWVzOiAnZGVsdGEnIH0sIHJ1bGUsIHRydWUpO1xuICogcG9saWN5LnJlYWRUcmFja2luZzsgLy8gJ2Z1bGwnIOKAlCBhbiBhYnNlbnQgZGlhbCBpcyBpdHMgZGVmYXVsdFxuICogT2JqZWN0LmlzRnJvemVuKHBvbGljeSk7IC8vIHRydWUg4oCUIGEgZnJhbWUgY2FuIG5ldmVyIGVkaXQgd2hhdCBpdHMgc2libGluZ3Mgc2hhcmVcbiAqIGBgYFxuICpcbiAqIFRoZSBSVUxFIGluc2lkZSBpcyBzaGFyZWQgdG9vLCBhbmQgaXMgaXRzZWxmIHN0YXRlZnVsIGJ5IGRlc2lnbiAocGVyLWNhbGwgYHNldFZhbHVlKGssIHYsXG4gKiB0cnVlKWAgbWFya3MgYSBrZXkgb24gaXQgZm9yIHRoZSByZXN0IG9mIHRoZSBydW4pOyB0aGUgcG9saWN5IGZyZWV6ZXMgd2hpY2ggcnVsZSwgbm90IHRoZVxuICogcnVsZSdzIG1hcmtzLiBUaGUgbWlycm9yIFNUT1JFIGlzIG5vdCBwb2xpY3kg4oCUIGVhY2ggcnVudGltZSAoYSBzdWJmbG93IGhhcyBpdHMgb3duKSBrZWVwc1xuICogaXRzIG93biBzdG9yZSB3aGVuIGBtaXJyb3JgIGlzIHNldC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJlYWRUcmFja2luZ01vZGUsIFdyaXRlVHJhY2tpbmdNb2RlIH0gZnJvbSAnLi9mcmFtZVR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUmVkYWN0aW9uUnVsZSB9IGZyb20gJy4vcmVkYWN0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0VmFsdWVzTW9kZSwgV3JpdGVQcm92ZW5hbmNlTW9kZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKipcbiAqIFRoZSBmb3VyIG9ic2VydmFiaWxpdHkgZGlhbHMgYXMgYW4gZXhlY3V0b3IgdGFrZXMgdGhlbSDigJQgZXZlcnkgZmllbGQgb3B0aW9uYWwsIGFuIGFic2VudFxuICogb25lIGlzIGl0cyBkZWZhdWx0LiBgRmxvd0NoYXJ0RXhlY3V0b3JPcHRpb25zYCBleHRlbmRzIHRoaXMgaW50ZXJmYWNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bkRpYWxzIHtcbiAgLyoqXG4gICAqIFBvbGljeSBmb3IgYFN0YWdlU25hcHNob3Quc3RhZ2VSZWFkc2AgKCMxNCkuIERlZmF1bHQgYCdmdWxsJ2Ag4oCUIGV2ZXJ5XG4gICAqIHRyYWNrZWQgcmVhZCBgc3RydWN0dXJlZENsb25lYHMgdGhlIHZhbHVlIGludG8gdGhlIHN0YWdlJ3MgcmVhZCB2aWV3XG4gICAqICh0aGUgaGlzdG9yaWNhbCBiZWhhdmlvcjsgd2hhdCBsZW5zL2FnZW50Zm9vdHByaW50IHNuYXBzaG90cyBzaG93KS5cbiAgICogYCdzdW1tYXJ5J2AgcmVjb3JkcyBhIGNoZWFwIHR5cGUvc2l6ZS9wcmV2aWV3IG1hcmtlciBwZXIgcmVhZDsgYCdvZmYnYFxuICAgKiByZWNvcmRzIG5vdGhpbmcg4oCUIHplcm8gcGVyLXJlYWQgY2xvbmUgY29zdCAocmVhZHMgb2YgbGFyZ2UgdmFsdWVzIGJlY29tZVxuICAgKiB+ZnJlZSkuIE5hcnJhdGl2ZSBhbmQgYFNjb3BlUmVjb3JkZXIub25SZWFkYCBhcmUgaWRlbnRpY2FsIGluIGV2ZXJ5IG1vZGUuXG4gICAqIENhdmVhdDogdW5kZXIgYCdvZmYnYCBhIHN0YWdlJ3Mgc25hcHNob3QgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBvbmVcbiAgICogdGhhdCByZWFkIG5vdGhpbmcg4oCUIGF1ZGl0aW5nIGNvbnN1bWVycyB0aGF0IG5lZWQgXCJkaWQgaXQgcmVhZD9cIiB3aXRob3V0XG4gICAqIHRoZSB2YWx1ZSBjb3N0IHNob3VsZCBwcmVmZXIgYCdzdW1tYXJ5J2AuXG4gICAqIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBgZXhlY3V0b3Iuc2V0UmVhZFRyYWNraW5nKG1vZGUpYCBiZWZvcmUgYHJ1bigpYC5cbiAgICovXG4gIHJlYWRUcmFja2luZz86IFJlYWRUcmFja2luZ01vZGU7XG5cbiAgLyoqXG4gICAqIFBvbGljeSBmb3IgYFN0YWdlU25hcHNob3Quc3RhZ2VXcml0ZXNgICgjMTNjLUEpIOKAlCB0aGUgc2libGluZyBvZlxuICAgKiB7QGxpbmsgcmVhZFRyYWNraW5nfTsgdGhlIHR3byBkaWFscyBhcmUgaW5kZXBlbmRlbnQuIERlZmF1bHQgYCdmdWxsJ2Ag4oCUXG4gICAqIGV2ZXJ5IHRyYWNrZWQgd3JpdGUgYHN0cnVjdHVyZWRDbG9uZWBzIHRoZSB2YWx1ZSBpbnRvIHRoZSBzdGFnZSdzIHdyaXRlXG4gICAqIHZpZXcgKHRoZSBoaXN0b3JpY2FsIGJlaGF2aW9yKS4gYCdzdW1tYXJ5J2AgcmVjb3JkcyBhIGNoZWFwXG4gICAqIGBXcml0ZVN1bW1hcnlNYXJrZXJgICh0eXBlL3NpemUvcHJldmlldykgcGVyIHdyaXRlOyBgJ29mZidgIHJlY29yZHNcbiAgICogbm90aGluZyDigJQgYHN0YWdlV3JpdGVzYCBpcyBhYnNlbnQgZnJvbSB0aGUgc25hcHNob3QuXG4gICAqXG4gICAqIE9ic2VydmFibGUgY29uc2VxdWVuY2VzIOKAlCB3aGF0IHRoZSBwb2xpY3kgRE9FUyBnb3Zlcm46XG4gICAqIC0gYFN0YWdlU25hcHNob3Quc3RhZ2VXcml0ZXNgIChtYXJrZXJzIHVuZGVyIGAnc3VtbWFyeSdgLCBhYnNlbnQgdW5kZXJcbiAgICogICBgJ29mZidgKS5cbiAgICogLSBUaGUgY29tbWl0IG9ic2VydmVyIHBheWxvYWQ6IGBTY29wZVJlY29yZGVyLm9uQ29tbWl0KG11dGF0aW9ucylgXG4gICAqICAgcmVjZWl2ZXMgdGhlIHJldGFpbmVkIGBfc3RhZ2VXcml0ZXNgIGVudHJpZXMsIHNvIGl0IGNhcnJpZXMgdGhlIHNhbWVcbiAgICogICBtYXJrZXJzIHVuZGVyIGAnc3VtbWFyeSdgIGFuZCBhbiBlbXB0eSBtdXRhdGlvbnMgYmFnIHVuZGVyIGAnb2ZmJ2Ag4oCUXG4gICAqICAgZGVmZXJyZWQvb2JzZXJ2ZXIgY29uc3VtZXJzIHNlZSBleGFjdGx5IHdoYXQgcmV0ZW50aW9uIHN0b3JlZC5cbiAgICpcbiAgICogV2hhdCBpdCBkb2VzIE5PVCBnb3Zlcm46XG4gICAqIC0gVGhlIHdyaXRlcyB0aGVtc2VsdmVzOiBzaGFyZWQgc3RhdGUsIHRoZSB0cmFuc2FjdGlvbiBidWZmZXIsIGFuZCB0aGVcbiAgICogICBDT01NSVQgTE9HIGFyZSBpZGVudGljYWwgaW4gZXZlcnkgbW9kZSAoY29tbWl0TG9nIHZhbHVlcyBrZWVwIHRoZWlyXG4gICAqICAgZnVsbCBwYXlsb2FkcyDigJQgdGhlIGxvc3NsZXNzIGxpbmVhci1jb3N0IGZpeCBmb3IgdGhvc2UgaXMgdGhlXG4gICAqICAge0BsaW5rIGNvbW1pdFZhbHVlc30gZGlhbCwgIzEzYy1CKS5cbiAgICogLSBQZXItb3AgYFNjb3BlUmVjb3JkZXIub25Xcml0ZWAgZXZlbnRzIOKAlCB0aGV5IGZpcmUgd2l0aCBsaXZlIHZhbHVlc1xuICAgKiAgIHJlZ2FyZGxlc3MgKGRlbGl2ZXJ5IHRpZXIsIFJGQy0wMDEncyBjb25jZXJuKSwgc28gbmFycmF0aXZlIG91dHB1dCBpc1xuICAgKiAgIGlkZW50aWNhbCBpbiBldmVyeSBtb2RlLlxuICAgKiAtIFJlZGFjdGlvbjogYSBwb2xpY3kvcGVyLWNhbGwtcmVkYWN0ZWQgd3JpdGUgc3RvcmVzIGAnW1JFREFDVEVEXSdgXG4gICAqICAgdW5kZXIgYCdmdWxsJ2AgQU5EIGAnc3VtbWFyeSdgIChyZWRhY3Rpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZVxuICAgKiAgIGRpYWw7IGEgbWFya2VyIHdvdWxkIGxlYWsgc2l6ZS9wcmV2aWV3KSwgYW5kIG5vdGhpbmcgdW5kZXIgYCdvZmYnYC5cbiAgICpcbiAgICogQ2F2ZWF0OiB1bmRlciBgJ29mZidgIGEgc3RhZ2UncyBTTkFQU0hPVCBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIG9uZVxuICAgKiB0aGF0IHdyb3RlIG5vdGhpbmcg4oCUIGJ1dCB1bmxpa2UgYHJlYWRUcmFja2luZzogJ29mZidgLCB0aGUgY29tbWl0IGxvZ1xuICAgKiBzdGlsbCByZWNvcmRzIGV2ZXJ5IG5ldCBjaGFuZ2UsIHNvIFwiZGlkIGl0IHdyaXRlP1wiIHN0YXlzIGFuc3dlcmFibGUuXG4gICAqIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBgZXhlY3V0b3Iuc2V0V3JpdGVUcmFja2luZyhtb2RlKWAgYmVmb3JlIGBydW4oKWAuXG4gICAqL1xuICB3cml0ZVRyYWNraW5nPzogV3JpdGVUcmFja2luZ01vZGU7XG5cbiAgLyoqXG4gICAqIEVuY29kaW5nIHBvbGljeSBmb3IgQ09NTUlUIExPRyB2YWx1ZXMgKCMxM2MtQikg4oCUIHRoZSB0aGlyZCBkaWFsIG9mIHRoZVxuICAgKiBmYW1pbHksIGFuZCB1bmxpa2UgaXRzIHNpYmxpbmdzIGl0IGlzICoqbG9zc2xlc3MgaW4gYm90aCBtb2RlcyoqIChpdFxuICAgKiBjaGFuZ2VzIHRoZSBsb2cncyBlbmNvZGluZywgbmV2ZXIgaXRzIGluZm9ybWF0aW9uKS5cbiAgICpcbiAgICogLSBgJ2Z1bGwnYCAoZGVmYXVsdCkg4oCUIGV2ZXJ5IHN1cnZpdmluZyBgc2V0YCBwYXRoIHN0b3JlcyB0aGUgZnVsbCBmaW5hbFxuICAgKiAgIHZhbHVlOyBieXRlLWlkZW50aWNhbCB0byB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvci5cbiAgICogLSBgJ2RlbHRhJ2Ag4oCUIGFycmF5IG5ldC1jaGFuZ2VzIHRoYXQgYXJlIFwiYmFzZSBwbHVzIGEgdGFpbFwiIGNvbW1pdCBhcyBhblxuICAgKiAgIGBhcHBlbmRgIHRyYWNlIHZlcmIgc3RvcmluZyBPTkxZIHRoZSB0YWlsICh0aGUgZ3Jvd2luZy1oaXN0b3J5IGNvbW1pdFxuICAgKiAgIGxvZyBiZWNvbWVzIGxpbmVhciBpbnN0ZWFkIG9mIE8oTsKyKSByZXRhaW5lZCk7IGBkZWxldGVWYWx1ZSgpYCBjb21taXRzXG4gICAqICAgYXMgYSByZWFsIGBkZWxldGVgIHZlcmIgKHJlcGxheSByZW1vdmVzIHRoZSBrZXkgaW5zdGVhZCBvZiBsZWF2aW5nXG4gICAqICAgYGtleTogdW5kZWZpbmVkYCk7IGJ1bmRsZXMgY2FycnkgZXhhY3RseSBPTkUgdHJhY2UgZW50cnkgcGVyIHN1cnZpdmluZ1xuICAgKiAgIHBhdGguIFJlcGxheSAodGhlIG9uZSB2ZXJiIGxhdyDigJQgbGl2ZSBzdGF0ZSwgYG1hdGVyaWFsaXNlKClgLCB0aGVcbiAgICogICByZWRhY3RlZCBtaXJyb3IsIGBzdGF0ZUF0YCkgcmVjb25zdHJ1Y3RzIGV2ZXJ5IHN0ZXAncyBmdWxsIHN0YXRlXG4gICAqICAgZXhhY3RseS5cbiAgICpcbiAgICogQ29uc3VtZXJzIHRoYXQgcmVhZCBgYnVuZGxlLm92ZXJ3cml0ZVtrZXldYCBhcyBcInRoZSBmdWxsIHZhbHVlIHdyaXR0ZW5cIlxuICAgKiBtdXN0IHN3aXRjaCB0byBgY29tbWl0VmFsdWVBdChjb21taXRMb2csIGlkeCwga2V5KWAgZnJvbVxuICAgKiBgZm9vdHByaW50anMvdHJhY2VgIOKAlCB1bmRlciBgJ2RlbHRhJ2AgdGhhdCB2YWx1ZSBpcyB2ZXJiLXF1YWxpZmllZCAoYW5cbiAgICogYGFwcGVuZGAgYnVuZGxlIGhvbGRzIG9ubHkgdGhlIHRhaWwpLiBQYXRoLXRpZXIgY29uc3VtZXJzXG4gICAqIChgZmluZExhc3RXcml0ZXJgLCBgY2F1c2FsQ2hhaW5gLCBuYXJyYXRpdmUsIGxlbnMgaGlnaGxpZ2h0cykgYXJlXG4gICAqIHVuYWZmZWN0ZWQuIFRoZSBhY3RpdmUgbW9kZSBpcyBzdXJmYWNlZCBhc1xuICAgKiBgZ2V0U25hcHNob3QoKS5jb21taXRWYWx1ZXNgLlxuICAgKlxuICAgKiBIb25lc3QgY29zdCBub3RlOiBhcHBlbmQgZGV0ZWN0aW9uIGlzIG5ldyB3YWxsIHdvcmsg4oCUIGFuIE8ofGJhc2UgYXJyYXl8KVxuICAgKiBzdHJ1Y3R1cmFsIHByZWZpeCBjb21wYXJlIHBlciBhcnJheS1zZXQgcGF0aCBwZXIgY29tbWl0LiBPbiBhIGhpdCB0aGVcbiAgICogY29tbWl0IGdldHMgY2hlYXBlciBpbiBib3RoIHdhbGwgYW5kIGhlYXA7IG9uIGEgbWlzcyAocHJlZml4IGRpdmVyZ2VzKVxuICAgKiBpdCBwYXlzIGNvbXBhcmUgKyBmdWxsIGNsb25lLiBgJ2Z1bGwnYCBwYXlzIHplcm8uXG4gICAqIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBgZXhlY3V0b3Iuc2V0Q29tbWl0VmFsdWVzKG1vZGUpYCBiZWZvcmUgYHJ1bigpYC5cbiAgICovXG4gIGNvbW1pdFZhbHVlcz86IENvbW1pdFZhbHVlc01vZGU7XG5cbiAgLyoqXG4gICAqIFBlci13cml0ZSByZWFkIHByb3ZlbmFuY2UgKCNQMSkg4oCUIHRoZSBmb3VydGggZGlhbCBvZiB0aGUgZmFtaWx5LiBEZWZhdWx0XG4gICAqIGAnb2ZmJ2A6IHplcm8gY29zdCwgYnl0ZS1pZGVudGljYWwgY29tbWl0IGxvZ3MuIGAncmVhZHMtcHJlZml4J2A6IGV2ZXJ5XG4gICAqIGNvbW1pdHRlZCBgVHJhY2VFbnRyeWAgY2FycmllcyBgcmVhZEtleXNgIOKAlCB0aGUga2V5cyB0cmFja2VkLXJlYWQgQkVGT1JFXG4gICAqIHRoYXQgd3JpdGUg4oCUIGVuYWJsaW5nIHBlci13cml0ZSBjYXVzYWwgYXR0cmlidXRpb24gKGBjYXVzYWxDaGFpbmAnc1xuICAgKiBgZWRnZUF0dHJpYnV0aW9uOiAncGVyLXdyaXRlJ2AgYW5kIHZhcmlhYmxlIHNsaWNlcykuIENvc3Q6IG9uZSBzbWFsbFxuICAgKiBhcnJheSBjb3B5IHBlciB3cml0ZS4gU25hcHNob3QgZGlzY3JpbWluYW50OlxuICAgKiBgZ2V0U25hcHNob3QoKS53cml0ZVByb3ZlbmFuY2VgLlxuICAgKi9cbiAgd3JpdGVQcm92ZW5hbmNlPzogV3JpdGVQcm92ZW5hbmNlTW9kZTtcbn1cblxuLyoqIFRoZSBydW4ncyBwb2xpY3k6IGV2ZXJ5IGRpYWwgcmVzb2x2ZWQsIHBsdXMgdGhlIHJlZGFjdGlvbiBydWxlIGFuZCB0aGUgbWlycm9yIGZsYWcuIEZyb3plbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuUG9saWN5IGV4dGVuZHMgUmVhZG9ubHk8UmVxdWlyZWQ8UnVuRGlhbHM+PiB7XG4gIC8qKiBUaGUgcnVuJ3MgcmVkYWN0aW9uIHJ1bGUg4oCUIHRoZSBPTkUgb3duZXIgb2YgdGhlIHZlcmRpY3QgKGByZWRhY3Rpb24udHNgKS4gQWJzZW50IG9uIGJhcmUgZnJhbWVzLiAqL1xuICByZWFkb25seSByZWRhY3Rpb24/OiBSZWRhY3Rpb25SdWxlO1xuICAvKiogS2VlcCBhIHJlZGFjdGVkIG1pcnJvciBvZiB0aGUgaGVhcCAoYSBydW4gd2l0aCBhIHJlZGFjdGlvbiBwb2xpY3kpLiBFYWNoIHJ1bnRpbWUgb3ducyBpdHMgb3duIHN0b3JlLiAqL1xuICByZWFkb25seSBtaXJyb3I6IGJvb2xlYW47XG59XG5cbi8qKiBFYWNoIGRpYWwncyBkZWZhdWx0IOKAlCB0aGUgdmFsdWUgYSBydW4gZ2V0cyB3aGVuIHRoZSBvcHRpb24gaXMgYWJzZW50LiBUaGUgZGlhbCBsaXN0IElTIHRoZXNlIGtleXMuICovXG5leHBvcnQgY29uc3QgRElBTF9ERUZBVUxUUzogUmVhZG9ubHk8UmVxdWlyZWQ8UnVuRGlhbHM+PiA9IE9iamVjdC5mcmVlemUoe1xuICByZWFkVHJhY2tpbmc6ICdmdWxsJyxcbiAgd3JpdGVUcmFja2luZzogJ2Z1bGwnLFxuICBjb21taXRWYWx1ZXM6ICdmdWxsJyxcbiAgd3JpdGVQcm92ZW5hbmNlOiAnb2ZmJyxcbn0pO1xuXG5jb25zdCBESUFMX05BTUVTID0gT2JqZWN0LmtleXMoRElBTF9ERUZBVUxUUykgYXMgQXJyYXk8a2V5b2YgUnVuRGlhbHM+O1xuXG4vKiogRXZlcnkgZGVmYXVsdCwgbm8gcnVsZSwgbm8gbWlycm9yIOKAlCB3aGF0IGEgYmFyZSBmcmFtZSAoYSB1bml0IHRlc3QncyBgbmV3IFN0YWdlQ29udGV4dGApIHJ1bnMgdW5kZXIuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9SVU5fUE9MSUNZOiBSdW5Qb2xpY3kgPSBPYmplY3QuZnJlZXplKHsgLi4uRElBTF9ERUZBVUxUUywgbWlycm9yOiBmYWxzZSB9KTtcblxuLyoqIEJ1aWxkIGEgcnVuJ3MgcG9saWN5OiBhYnNlbnQgZGlhbHMgdGFrZSB0aGVpciBkZWZhdWx0OyB0aGUgcmVzdWx0IGlzIGZyb3plbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5Qb2xpY3koZGlhbHM6IFJ1bkRpYWxzID0ge30sIHJlZGFjdGlvbj86IFJlZGFjdGlvblJ1bGUsIG1pcnJvciA9IGZhbHNlKTogUnVuUG9saWN5IHtcbiAgY29uc3QgcmVzb2x2ZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyAuLi5ESUFMX0RFRkFVTFRTLCAuLi5waWNrRGlhbHMoZGlhbHMpLCBtaXJyb3IgfTtcbiAgaWYgKHJlZGFjdGlvbikgcmVzb2x2ZWQucmVkYWN0aW9uID0gcmVkYWN0aW9uO1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShyZXNvbHZlZCkgYXMgdW5rbm93biBhcyBSdW5Qb2xpY3k7XG59XG5cbi8qKiBUaGUgZGlhbHMgc2V0IG9uIGBzb3VyY2VgIChhbiBvcHRpb25zIG9iamVjdCwgc2F5KSDigJQgYW5kIG5vdGhpbmcgZWxzZSBmcm9tIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpY2tEaWFscyhzb3VyY2U6IFJ1bkRpYWxzKTogUnVuRGlhbHMge1xuICBjb25zdCBkaWFsczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBuYW1lIG9mIERJQUxfTkFNRVMpIGlmIChzb3VyY2VbbmFtZV0gIT09IHVuZGVmaW5lZCkgZGlhbHNbbmFtZV0gPSBzb3VyY2VbbmFtZV07XG4gIHJldHVybiBkaWFscyBhcyBSdW5EaWFscztcbn1cblxuLyoqIFRoZSBzYW1lIHBvbGljeSB1bmRlciBhbm90aGVyIHJ1bGUg4oCUIGEgTkVXIGZyb3plbiBvYmplY3Q7IHRoZSBvbGQgb25lIGlzIG5ldmVyIGVkaXRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUmVkYWN0aW9uKHBvbGljeTogUnVuUG9saWN5LCByZWRhY3Rpb246IFJlZGFjdGlvblJ1bGUpOiBSdW5Qb2xpY3kge1xuICByZXR1cm4gZGVyaXZlUG9saWN5KHBvbGljeSwgeyByZWRhY3Rpb24gfSk7XG59XG5cbi8qKlxuICogVGhlIHNhbWUgcG9saWN5IHdpdGggc29tZSBzZXR0aW5ncyBjaGFuZ2VkIOKAlCBhIE5FVyBmcm96ZW4gb2JqZWN0OyB0aGUgb2xkIG9uZSBpcyBuZXZlclxuICogZWRpdGVkLiBBIGZyYW1lIG9yIHJ1bnRpbWUgY2hhbmdlcyBhIHNldHRpbmcgYnkgc3dhcHBpbmcgaW4gYSBkZXJpdmVkIHBvbGljeSAoYHVzZVBvbGljeWApLCBzb1xuICogbm8gbXV0YWJsZSBkaWFsIGZpZWxkIGV4aXN0cyBhbnl3aGVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZVBvbGljeShwb2xpY3k6IFJ1blBvbGljeSwgcGF0Y2g6IFBhcnRpYWw8UnVuUG9saWN5Pik6IFJ1blBvbGljeSB7XG4gIHJldHVybiBPYmplY3QuZnJlZXplKHsgLi4ucG9saWN5LCAuLi5wYXRjaCB9KTtcbn1cbiJdfQ==
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuUG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvcnVuUG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFrSEgseUdBQXlHO0FBQ3pHLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN2RSxZQUFZLEVBQUUsTUFBTTtJQUNwQixhQUFhLEVBQUUsTUFBTTtJQUNyQixZQUFZLEVBQUUsTUFBTTtJQUNwQixlQUFlLEVBQUUsS0FBSztDQUN2QixDQUFDLENBQUM7QUFFSCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBMEIsQ0FBQztBQUV2RSwyR0FBMkc7QUFDM0csTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQWMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsYUFBYSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBRWhHLG1GQUFtRjtBQUNuRixNQUFNLFVBQVUsU0FBUyxDQUFDLFFBQWtCLEVBQUUsRUFBRSxTQUF5QixFQUFFLE1BQU0sR0FBRyxLQUFLO0lBQ3ZGLE1BQU0sUUFBUSxHQUE0QixFQUFFLEdBQUcsYUFBYSxFQUFFLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzVGLElBQUksU0FBUztRQUFFLFFBQVEsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzlDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQXlCLENBQUM7QUFDekQsQ0FBQztBQUVELHFGQUFxRjtBQUNyRixNQUFNLFVBQVUsU0FBUyxDQUFDLE1BQWdCO0lBQ3hDLE1BQU0sS0FBSyxHQUE0QixFQUFFLENBQUM7SUFDMUMsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVO1FBQUUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUztZQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUYsT0FBTyxLQUFpQixDQUFDO0FBQzNCLENBQUM7QUFFRCw2RkFBNkY7QUFDN0YsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFpQixFQUFFLFNBQXdCO0lBQ3ZFLE9BQU8sWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLE1BQWlCLEVBQUUsS0FBeUI7SUFDdkUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJ1blBvbGljeSDigJQgd2hhdCBhIHJ1biByZXRhaW5zLCBlbmNvZGVzIGFuZCBzY3J1YnMsIGFzIE9ORSBpbW11dGFibGUgb2JqZWN0IChGNSkuXG4gKlxuICogV0hZLiBBIHJ1biBjYXJyaWVzIHNpeCBzZXR0aW5ncyB0aGF0IGV2ZXJ5IHN0YWdlIGZyYW1lIG11c3QgYWdyZWUgb246IHRoZSBmb3VyXG4gKiBvYnNlcnZhYmlsaXR5IGRpYWxzIChgcmVhZFRyYWNraW5nYCwgYHdyaXRlVHJhY2tpbmdgLCBgY29tbWl0VmFsdWVzYCwgYHdyaXRlUHJvdmVuYW5jZWApLFxuICogdGhlIHJlZGFjdGlvbiBydWxlLCBhbmQgd2hldGhlciBhIHJlZGFjdGVkIG1pcnJvciBpcyBrZXB0LiBVbnRpbCA5LjM0LjAgZWFjaCBvbmUgd2FzXG4gKiBjb3BpZWQgZmllbGQgYnkgZmllbGQgZG93biB0aHJlZSBzZXBhcmF0ZSBwYXRocyDigJQgYEV4ZWN1dGlvblJ1bnRpbWUudXNlKmAgb24gdGhlIHJvb3QsXG4gKiBgU3RhZ2VDb250ZXh0LmNyZWF0ZU5leHRgL2BjcmVhdGVDaGlsZGAgKHNpeCBhc3NpZ25tZW50cyBlYWNoKSwgYW5kIGEgZHVjay10eXBlZCBwdXNoIHBlclxuICogZGlhbCBpbiBgU3ViZmxvd0V4ZWN1dG9yYCDigJQgc28gYSBuZXcgZGlhbCBtZWFudCBzaXggZWRpdHMsIGFuZCBhIG1pc3NlZCBvbmUgcmFuIGEgc3ViZmxvd1xuICogb24gdGhlIGRlZmF1bHQgc2lsZW50bHkuIE5vdyB0aGUgZXhlY3V0b3IgYnVpbGRzIE9ORSBwb2xpY3kgcGVyIHJ1biAoYW5kIHBlciByZXN1bWUpLCB0aGVcbiAqIHJ1bnRpbWUgaW5zdGFsbHMgaXQgb24gaXRzIHJvb3QgZnJhbWUsIGFuZCBldmVyeSBmcmFtZSBob2xkcyBpdCBCWSBSRUZFUkVOQ0U6IGEgY2hpbGQsIGFcbiAqIGNvbnRpbnVhdGlvbiBhbmQgYSBzdWJmbG93J3Mgcm9vdCAoaXRzIHNlZWQgZnJhbWUgaW5jbHVkZWQpIGFsbCBwb2ludCBhdCB0aGUgc2FtZSBvYmplY3QuXG4gKiBUaGUgYm9ycm93ZWQgaWRlYSBpcyBHbydzIGBjb250ZXh0LkNvbnRleHRgIC8gT3BlblRlbGVtZXRyeSdzIGBDb250ZXh0YDogYW4gaW1tdXRhYmxlIHZhbHVlXG4gKiBoYW5kZWQgZG93biwgbmV2ZXIgY29waWVkIGFwYXJ0LlxuICpcbiAqIEFERElORyBBIERJQUwgaXMgdHdvIGZpbGVzOiBhIGZpZWxkICsgaXRzIGRlZmF1bHQgaGVyZSAoe0BsaW5rIFJ1bkRpYWxzfSxcbiAqIHtAbGluayBESUFMX0RFRkFVTFRTfSksIGFuZCB0aGUgZnJhbWUgY29kZSB0aGF0IHJlYWRzIGBwb2xpY3kuPGRpYWw+YCAoYFN0YWdlQ29udGV4dGApLiBUaGVcbiAqIGV4ZWN1dG9yJ3Mgb3B0aW9ucyBpbmhlcml0IHtAbGluayBSdW5EaWFsc30sIHBpY2tzIHRoZW0gd2l0aCB7QGxpbmsgcGlja0RpYWxzfSwgYW5kIGV2ZXJ5XG4gKiBwcm9wYWdhdGlvbiBwYXRoIGNhcnJpZXMgdGhlIHdob2xlIG9iamVjdCDigJQgbm9uZSBvZiB0aGVtIG5hbWVzIGEgZGlhbC5cbiAqXG4gKiBgYGB0c1xuICogY29uc3QgcG9saWN5ID0gcnVuUG9saWN5KHsgY29tbWl0VmFsdWVzOiAnZGVsdGEnIH0sIHJ1bGUsIHRydWUpO1xuICogcG9saWN5LnJlYWRUcmFja2luZzsgLy8gJ2Z1bGwnIOKAlCBhbiBhYnNlbnQgZGlhbCBpcyBpdHMgZGVmYXVsdFxuICogT2JqZWN0LmlzRnJvemVuKHBvbGljeSk7IC8vIHRydWUg4oCUIGEgZnJhbWUgY2FuIG5ldmVyIGVkaXQgd2hhdCBpdHMgc2libGluZ3Mgc2hhcmVcbiAqIGBgYFxuICpcbiAqIFRoZSBSVUxFIGluc2lkZSBpcyBzaGFyZWQgdG9vLCBhbmQgaXMgaXRzZWxmIHN0YXRlZnVsIGJ5IGRlc2lnbiAocGVyLWNhbGwgYHNldFZhbHVlKGssIHYsXG4gKiB0cnVlKWAgbWFya3MgYSBrZXkgb24gaXQgZm9yIHRoZSByZXN0IG9mIHRoZSBydW4pOyB0aGUgcG9saWN5IGZyZWV6ZXMgd2hpY2ggcnVsZSwgbm90IHRoZVxuICogcnVsZSdzIG1hcmtzLiBUaGUgbWlycm9yIFNUT1JFIGlzIG5vdCBwb2xpY3kg4oCUIGVhY2ggcnVudGltZSAoYSBzdWJmbG93IGhhcyBpdHMgb3duKSBrZWVwc1xuICogaXRzIG93biBzdG9yZSB3aGVuIGBtaXJyb3JgIGlzIHNldC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbW1pdFZhbHVlc01vZGUgfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHR5cGUgeyBXcml0ZVByb3ZlbmFuY2VNb2RlIH0gZnJvbSAnZm9vdHRyYWNlL3dyaXRlJztcblxuaW1wb3J0IHR5cGUgeyBSZWFkVHJhY2tpbmdNb2RlLCBXcml0ZVRyYWNraW5nTW9kZSB9IGZyb20gJy4vZnJhbWVUeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlZGFjdGlvblJ1bGUgfSBmcm9tICcuL3JlZGFjdGlvbi5qcyc7XG5cbi8qKlxuICogVGhlIGZvdXIgb2JzZXJ2YWJpbGl0eSBkaWFscyBhcyBhbiBleGVjdXRvciB0YWtlcyB0aGVtIOKAlCBldmVyeSBmaWVsZCBvcHRpb25hbCwgYW4gYWJzZW50XG4gKiBvbmUgaXMgaXRzIGRlZmF1bHQuIGBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnNgIGV4dGVuZHMgdGhpcyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuRGlhbHMge1xuICAvKipcbiAgICogUG9saWN5IGZvciBgU3RhZ2VTbmFwc2hvdC5zdGFnZVJlYWRzYCAoIzE0KS4gRGVmYXVsdCBgJ2Z1bGwnYCDigJQgZXZlcnlcbiAgICogdHJhY2tlZCByZWFkIGBzdHJ1Y3R1cmVkQ2xvbmVgcyB0aGUgdmFsdWUgaW50byB0aGUgc3RhZ2UncyByZWFkIHZpZXdcbiAgICogKHRoZSBoaXN0b3JpY2FsIGJlaGF2aW9yOyB3aGF0IGxlbnMvYWdlbnRmb290cHJpbnQgc25hcHNob3RzIHNob3cpLlxuICAgKiBgJ3N1bW1hcnknYCByZWNvcmRzIGEgY2hlYXAgdHlwZS9zaXplL3ByZXZpZXcgbWFya2VyIHBlciByZWFkOyBgJ29mZidgXG4gICAqIHJlY29yZHMgbm90aGluZyDigJQgemVybyBwZXItcmVhZCBjbG9uZSBjb3N0IChyZWFkcyBvZiBsYXJnZSB2YWx1ZXMgYmVjb21lXG4gICAqIH5mcmVlKS4gTmFycmF0aXZlIGFuZCBgU2NvcGVSZWNvcmRlci5vblJlYWRgIGFyZSBpZGVudGljYWwgaW4gZXZlcnkgbW9kZS5cbiAgICogQ2F2ZWF0OiB1bmRlciBgJ29mZidgIGEgc3RhZ2UncyBzbmFwc2hvdCBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIG9uZVxuICAgKiB0aGF0IHJlYWQgbm90aGluZyDigJQgYXVkaXRpbmcgY29uc3VtZXJzIHRoYXQgbmVlZCBcImRpZCBpdCByZWFkP1wiIHdpdGhvdXRcbiAgICogdGhlIHZhbHVlIGNvc3Qgc2hvdWxkIHByZWZlciBgJ3N1bW1hcnknYC5cbiAgICogRXF1aXZhbGVudCB0byBjYWxsaW5nIGBleGVjdXRvci5zZXRSZWFkVHJhY2tpbmcobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICAgKi9cbiAgcmVhZFRyYWNraW5nPzogUmVhZFRyYWNraW5nTW9kZTtcblxuICAvKipcbiAgICogUG9saWN5IGZvciBgU3RhZ2VTbmFwc2hvdC5zdGFnZVdyaXRlc2AgKCMxM2MtQSkg4oCUIHRoZSBzaWJsaW5nIG9mXG4gICAqIHtAbGluayByZWFkVHJhY2tpbmd9OyB0aGUgdHdvIGRpYWxzIGFyZSBpbmRlcGVuZGVudC4gRGVmYXVsdCBgJ2Z1bGwnYCDigJRcbiAgICogZXZlcnkgdHJhY2tlZCB3cml0ZSBgc3RydWN0dXJlZENsb25lYHMgdGhlIHZhbHVlIGludG8gdGhlIHN0YWdlJ3Mgd3JpdGVcbiAgICogdmlldyAodGhlIGhpc3RvcmljYWwgYmVoYXZpb3IpLiBgJ3N1bW1hcnknYCByZWNvcmRzIGEgY2hlYXBcbiAgICogYFdyaXRlU3VtbWFyeU1hcmtlcmAgKHR5cGUvc2l6ZS9wcmV2aWV3KSBwZXIgd3JpdGU7IGAnb2ZmJ2AgcmVjb3Jkc1xuICAgKiBub3RoaW5nIOKAlCBgc3RhZ2VXcml0ZXNgIGlzIGFic2VudCBmcm9tIHRoZSBzbmFwc2hvdC5cbiAgICpcbiAgICogT2JzZXJ2YWJsZSBjb25zZXF1ZW5jZXMg4oCUIHdoYXQgdGhlIHBvbGljeSBET0VTIGdvdmVybjpcbiAgICogLSBgU3RhZ2VTbmFwc2hvdC5zdGFnZVdyaXRlc2AgKG1hcmtlcnMgdW5kZXIgYCdzdW1tYXJ5J2AsIGFic2VudCB1bmRlclxuICAgKiAgIGAnb2ZmJ2ApLlxuICAgKiAtIFRoZSBjb21taXQgb2JzZXJ2ZXIgcGF5bG9hZDogYFNjb3BlUmVjb3JkZXIub25Db21taXQobXV0YXRpb25zKWBcbiAgICogICByZWNlaXZlcyB0aGUgcmV0YWluZWQgYF9zdGFnZVdyaXRlc2AgZW50cmllcywgc28gaXQgY2FycmllcyB0aGUgc2FtZVxuICAgKiAgIG1hcmtlcnMgdW5kZXIgYCdzdW1tYXJ5J2AgYW5kIGFuIGVtcHR5IG11dGF0aW9ucyBiYWcgdW5kZXIgYCdvZmYnYCDigJRcbiAgICogICBkZWZlcnJlZC9vYnNlcnZlciBjb25zdW1lcnMgc2VlIGV4YWN0bHkgd2hhdCByZXRlbnRpb24gc3RvcmVkLlxuICAgKlxuICAgKiBXaGF0IGl0IGRvZXMgTk9UIGdvdmVybjpcbiAgICogLSBUaGUgd3JpdGVzIHRoZW1zZWx2ZXM6IHNoYXJlZCBzdGF0ZSwgdGhlIHRyYW5zYWN0aW9uIGJ1ZmZlciwgYW5kIHRoZVxuICAgKiAgIENPTU1JVCBMT0cgYXJlIGlkZW50aWNhbCBpbiBldmVyeSBtb2RlIChjb21taXRMb2cgdmFsdWVzIGtlZXAgdGhlaXJcbiAgICogICBmdWxsIHBheWxvYWRzIOKAlCB0aGUgbG9zc2xlc3MgbGluZWFyLWNvc3QgZml4IGZvciB0aG9zZSBpcyB0aGVcbiAgICogICB7QGxpbmsgY29tbWl0VmFsdWVzfSBkaWFsLCAjMTNjLUIpLlxuICAgKiAtIFBlci1vcCBgU2NvcGVSZWNvcmRlci5vbldyaXRlYCBldmVudHMg4oCUIHRoZXkgZmlyZSB3aXRoIGxpdmUgdmFsdWVzXG4gICAqICAgcmVnYXJkbGVzcyAoZGVsaXZlcnkgdGllciwgUkZDLTAwMSdzIGNvbmNlcm4pLCBzbyBuYXJyYXRpdmUgb3V0cHV0IGlzXG4gICAqICAgaWRlbnRpY2FsIGluIGV2ZXJ5IG1vZGUuXG4gICAqIC0gUmVkYWN0aW9uOiBhIHBvbGljeS9wZXItY2FsbC1yZWRhY3RlZCB3cml0ZSBzdG9yZXMgYCdbUkVEQUNURURdJ2BcbiAgICogICB1bmRlciBgJ2Z1bGwnYCBBTkQgYCdzdW1tYXJ5J2AgKHJlZGFjdGlvbiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlXG4gICAqICAgZGlhbDsgYSBtYXJrZXIgd291bGQgbGVhayBzaXplL3ByZXZpZXcpLCBhbmQgbm90aGluZyB1bmRlciBgJ29mZidgLlxuICAgKlxuICAgKiBDYXZlYXQ6IHVuZGVyIGAnb2ZmJ2AgYSBzdGFnZSdzIFNOQVBTSE9UIGlzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gb25lXG4gICAqIHRoYXQgd3JvdGUgbm90aGluZyDigJQgYnV0IHVubGlrZSBgcmVhZFRyYWNraW5nOiAnb2ZmJ2AsIHRoZSBjb21taXQgbG9nXG4gICAqIHN0aWxsIHJlY29yZHMgZXZlcnkgbmV0IGNoYW5nZSwgc28gXCJkaWQgaXQgd3JpdGU/XCIgc3RheXMgYW5zd2VyYWJsZS5cbiAgICogRXF1aXZhbGVudCB0byBjYWxsaW5nIGBleGVjdXRvci5zZXRXcml0ZVRyYWNraW5nKG1vZGUpYCBiZWZvcmUgYHJ1bigpYC5cbiAgICovXG4gIHdyaXRlVHJhY2tpbmc/OiBXcml0ZVRyYWNraW5nTW9kZTtcblxuICAvKipcbiAgICogRW5jb2RpbmcgcG9saWN5IGZvciBDT01NSVQgTE9HIHZhbHVlcyAoIzEzYy1CKSDigJQgdGhlIHRoaXJkIGRpYWwgb2YgdGhlXG4gICAqIGZhbWlseSwgYW5kIHVubGlrZSBpdHMgc2libGluZ3MgaXQgaXMgKipsb3NzbGVzcyBpbiBib3RoIG1vZGVzKiogKGl0XG4gICAqIGNoYW5nZXMgdGhlIGxvZydzIGVuY29kaW5nLCBuZXZlciBpdHMgaW5mb3JtYXRpb24pLlxuICAgKlxuICAgKiAtIGAnZnVsbCdgIChkZWZhdWx0KSDigJQgZXZlcnkgc3Vydml2aW5nIGBzZXRgIHBhdGggc3RvcmVzIHRoZSBmdWxsIGZpbmFsXG4gICAqICAgdmFsdWU7IGJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBoaXN0b3JpY2FsIGJlaGF2aW9yLlxuICAgKiAtIGAnZGVsdGEnYCDigJQgYXJyYXkgbmV0LWNoYW5nZXMgdGhhdCBhcmUgXCJiYXNlIHBsdXMgYSB0YWlsXCIgY29tbWl0IGFzIGFuXG4gICAqICAgYGFwcGVuZGAgdHJhY2UgdmVyYiBzdG9yaW5nIE9OTFkgdGhlIHRhaWwgKHRoZSBncm93aW5nLWhpc3RvcnkgY29tbWl0XG4gICAqICAgbG9nIGJlY29tZXMgbGluZWFyIGluc3RlYWQgb2YgTyhOwrIpIHJldGFpbmVkKTsgYGRlbGV0ZVZhbHVlKClgIGNvbW1pdHNcbiAgICogICBhcyBhIHJlYWwgYGRlbGV0ZWAgdmVyYiAocmVwbGF5IHJlbW92ZXMgdGhlIGtleSBpbnN0ZWFkIG9mIGxlYXZpbmdcbiAgICogICBga2V5OiB1bmRlZmluZWRgKTsgYnVuZGxlcyBjYXJyeSBleGFjdGx5IE9ORSB0cmFjZSBlbnRyeSBwZXIgc3Vydml2aW5nXG4gICAqICAgcGF0aC4gUmVwbGF5ICh0aGUgb25lIHZlcmIgbGF3IOKAlCBsaXZlIHN0YXRlLCBgbWF0ZXJpYWxpc2UoKWAsIHRoZVxuICAgKiAgIHJlZGFjdGVkIG1pcnJvciwgYHN0YXRlQXRgKSByZWNvbnN0cnVjdHMgZXZlcnkgc3RlcCdzIGZ1bGwgc3RhdGVcbiAgICogICBleGFjdGx5LlxuICAgKlxuICAgKiBDb25zdW1lcnMgdGhhdCByZWFkIGBidW5kbGUub3ZlcndyaXRlW2tleV1gIGFzIFwidGhlIGZ1bGwgdmFsdWUgd3JpdHRlblwiXG4gICAqIG11c3Qgc3dpdGNoIHRvIGBjb21taXRWYWx1ZUF0KGNvbW1pdExvZywgaWR4LCBrZXkpYCBmcm9tXG4gICAqIGBmb290dHJhY2VgIOKAlCB1bmRlciBgJ2RlbHRhJ2AgdGhhdCB2YWx1ZSBpcyB2ZXJiLXF1YWxpZmllZCAoYW5cbiAgICogYGFwcGVuZGAgYnVuZGxlIGhvbGRzIG9ubHkgdGhlIHRhaWwpLiBQYXRoLXRpZXIgY29uc3VtZXJzXG4gICAqIChgZmluZExhc3RXcml0ZXJgLCBgY2F1c2FsQ2hhaW5gLCBuYXJyYXRpdmUsIGxlbnMgaGlnaGxpZ2h0cykgYXJlXG4gICAqIHVuYWZmZWN0ZWQuIFRoZSBhY3RpdmUgbW9kZSBpcyBzdXJmYWNlZCBhc1xuICAgKiBgZ2V0U25hcHNob3QoKS5jb21taXRWYWx1ZXNgLlxuICAgKlxuICAgKiBIb25lc3QgY29zdCBub3RlOiBhcHBlbmQgZGV0ZWN0aW9uIGlzIG5ldyB3YWxsIHdvcmsg4oCUIGFuIE8ofGJhc2UgYXJyYXl8KVxuICAgKiBzdHJ1Y3R1cmFsIHByZWZpeCBjb21wYXJlIHBlciBhcnJheS1zZXQgcGF0aCBwZXIgY29tbWl0LiBPbiBhIGhpdCB0aGVcbiAgICogY29tbWl0IGdldHMgY2hlYXBlciBpbiBib3RoIHdhbGwgYW5kIGhlYXA7IG9uIGEgbWlzcyAocHJlZml4IGRpdmVyZ2VzKVxuICAgKiBpdCBwYXlzIGNvbXBhcmUgKyBmdWxsIGNsb25lLiBgJ2Z1bGwnYCBwYXlzIHplcm8uXG4gICAqIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBgZXhlY3V0b3Iuc2V0Q29tbWl0VmFsdWVzKG1vZGUpYCBiZWZvcmUgYHJ1bigpYC5cbiAgICovXG4gIGNvbW1pdFZhbHVlcz86IENvbW1pdFZhbHVlc01vZGU7XG5cbiAgLyoqXG4gICAqIFBlci13cml0ZSByZWFkIHByb3ZlbmFuY2UgKCNQMSkg4oCUIHRoZSBmb3VydGggZGlhbCBvZiB0aGUgZmFtaWx5LiBEZWZhdWx0XG4gICAqIGAnb2ZmJ2A6IHplcm8gY29zdCwgYnl0ZS1pZGVudGljYWwgY29tbWl0IGxvZ3MuIGAncmVhZHMtcHJlZml4J2A6IGV2ZXJ5XG4gICAqIGNvbW1pdHRlZCBgVHJhY2VFbnRyeWAgY2FycmllcyBgcmVhZEtleXNgIOKAlCB0aGUga2V5cyB0cmFja2VkLXJlYWQgQkVGT1JFXG4gICAqIHRoYXQgd3JpdGUg4oCUIGVuYWJsaW5nIHBlci13cml0ZSBjYXVzYWwgYXR0cmlidXRpb24gKGBjYXVzYWxDaGFpbmAnc1xuICAgKiBgZWRnZUF0dHJpYnV0aW9uOiAncGVyLXdyaXRlJ2AgYW5kIHZhcmlhYmxlIHNsaWNlcykuIENvc3Q6IG9uZSBzbWFsbFxuICAgKiBhcnJheSBjb3B5IHBlciB3cml0ZS4gU25hcHNob3QgZGlzY3JpbWluYW50OlxuICAgKiBgZ2V0U25hcHNob3QoKS53cml0ZVByb3ZlbmFuY2VgLlxuICAgKi9cbiAgd3JpdGVQcm92ZW5hbmNlPzogV3JpdGVQcm92ZW5hbmNlTW9kZTtcbn1cblxuLyoqIFRoZSBydW4ncyBwb2xpY3k6IGV2ZXJ5IGRpYWwgcmVzb2x2ZWQsIHBsdXMgdGhlIHJlZGFjdGlvbiBydWxlIGFuZCB0aGUgbWlycm9yIGZsYWcuIEZyb3plbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuUG9saWN5IGV4dGVuZHMgUmVhZG9ubHk8UmVxdWlyZWQ8UnVuRGlhbHM+PiB7XG4gIC8qKiBUaGUgcnVuJ3MgcmVkYWN0aW9uIHJ1bGUg4oCUIHRoZSBPTkUgb3duZXIgb2YgdGhlIHZlcmRpY3QgKGByZWRhY3Rpb24udHNgKS4gQWJzZW50IG9uIGJhcmUgZnJhbWVzLiAqL1xuICByZWFkb25seSByZWRhY3Rpb24/OiBSZWRhY3Rpb25SdWxlO1xuICAvKiogS2VlcCBhIHJlZGFjdGVkIG1pcnJvciBvZiB0aGUgaGVhcCAoYSBydW4gd2l0aCBhIHJlZGFjdGlvbiBwb2xpY3kpLiBFYWNoIHJ1bnRpbWUgb3ducyBpdHMgb3duIHN0b3JlLiAqL1xuICByZWFkb25seSBtaXJyb3I6IGJvb2xlYW47XG59XG5cbi8qKiBFYWNoIGRpYWwncyBkZWZhdWx0IOKAlCB0aGUgdmFsdWUgYSBydW4gZ2V0cyB3aGVuIHRoZSBvcHRpb24gaXMgYWJzZW50LiBUaGUgZGlhbCBsaXN0IElTIHRoZXNlIGtleXMuICovXG5leHBvcnQgY29uc3QgRElBTF9ERUZBVUxUUzogUmVhZG9ubHk8UmVxdWlyZWQ8UnVuRGlhbHM+PiA9IE9iamVjdC5mcmVlemUoe1xuICByZWFkVHJhY2tpbmc6ICdmdWxsJyxcbiAgd3JpdGVUcmFja2luZzogJ2Z1bGwnLFxuICBjb21taXRWYWx1ZXM6ICdmdWxsJyxcbiAgd3JpdGVQcm92ZW5hbmNlOiAnb2ZmJyxcbn0pO1xuXG5jb25zdCBESUFMX05BTUVTID0gT2JqZWN0LmtleXMoRElBTF9ERUZBVUxUUykgYXMgQXJyYXk8a2V5b2YgUnVuRGlhbHM+O1xuXG4vKiogRXZlcnkgZGVmYXVsdCwgbm8gcnVsZSwgbm8gbWlycm9yIOKAlCB3aGF0IGEgYmFyZSBmcmFtZSAoYSB1bml0IHRlc3QncyBgbmV3IFN0YWdlQ29udGV4dGApIHJ1bnMgdW5kZXIuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9SVU5fUE9MSUNZOiBSdW5Qb2xpY3kgPSBPYmplY3QuZnJlZXplKHsgLi4uRElBTF9ERUZBVUxUUywgbWlycm9yOiBmYWxzZSB9KTtcblxuLyoqIEJ1aWxkIGEgcnVuJ3MgcG9saWN5OiBhYnNlbnQgZGlhbHMgdGFrZSB0aGVpciBkZWZhdWx0OyB0aGUgcmVzdWx0IGlzIGZyb3plbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5Qb2xpY3koZGlhbHM6IFJ1bkRpYWxzID0ge30sIHJlZGFjdGlvbj86IFJlZGFjdGlvblJ1bGUsIG1pcnJvciA9IGZhbHNlKTogUnVuUG9saWN5IHtcbiAgY29uc3QgcmVzb2x2ZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyAuLi5ESUFMX0RFRkFVTFRTLCAuLi5waWNrRGlhbHMoZGlhbHMpLCBtaXJyb3IgfTtcbiAgaWYgKHJlZGFjdGlvbikgcmVzb2x2ZWQucmVkYWN0aW9uID0gcmVkYWN0aW9uO1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShyZXNvbHZlZCkgYXMgdW5rbm93biBhcyBSdW5Qb2xpY3k7XG59XG5cbi8qKiBUaGUgZGlhbHMgc2V0IG9uIGBzb3VyY2VgIChhbiBvcHRpb25zIG9iamVjdCwgc2F5KSDigJQgYW5kIG5vdGhpbmcgZWxzZSBmcm9tIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpY2tEaWFscyhzb3VyY2U6IFJ1bkRpYWxzKTogUnVuRGlhbHMge1xuICBjb25zdCBkaWFsczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBuYW1lIG9mIERJQUxfTkFNRVMpIGlmIChzb3VyY2VbbmFtZV0gIT09IHVuZGVmaW5lZCkgZGlhbHNbbmFtZV0gPSBzb3VyY2VbbmFtZV07XG4gIHJldHVybiBkaWFscyBhcyBSdW5EaWFscztcbn1cblxuLyoqIFRoZSBzYW1lIHBvbGljeSB1bmRlciBhbm90aGVyIHJ1bGUg4oCUIGEgTkVXIGZyb3plbiBvYmplY3Q7IHRoZSBvbGQgb25lIGlzIG5ldmVyIGVkaXRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUmVkYWN0aW9uKHBvbGljeTogUnVuUG9saWN5LCByZWRhY3Rpb246IFJlZGFjdGlvblJ1bGUpOiBSdW5Qb2xpY3kge1xuICByZXR1cm4gZGVyaXZlUG9saWN5KHBvbGljeSwgeyByZWRhY3Rpb24gfSk7XG59XG5cbi8qKlxuICogVGhlIHNhbWUgcG9saWN5IHdpdGggc29tZSBzZXR0aW5ncyBjaGFuZ2VkIOKAlCBhIE5FVyBmcm96ZW4gb2JqZWN0OyB0aGUgb2xkIG9uZSBpcyBuZXZlclxuICogZWRpdGVkLiBBIGZyYW1lIG9yIHJ1bnRpbWUgY2hhbmdlcyBhIHNldHRpbmcgYnkgc3dhcHBpbmcgaW4gYSBkZXJpdmVkIHBvbGljeSAoYHVzZVBvbGljeWApLCBzb1xuICogbm8gbXV0YWJsZSBkaWFsIGZpZWxkIGV4aXN0cyBhbnl3aGVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZVBvbGljeShwb2xpY3k6IFJ1blBvbGljeSwgcGF0Y2g6IFBhcnRpYWw8UnVuUG9saWN5Pik6IFJ1blBvbGljeSB7XG4gIHJldHVybiBPYmplY3QuZnJlZXplKHsgLi4ucG9saWN5LCAuLi5wYXRjaCB9KTtcbn1cbiJdfQ==
@@ -13,7 +13,7 @@
13
13
  * Write semantics: top-level set calls setValue(). Nested set calls
14
14
  * updateValue() with a partial object built from the accumulated path.
15
15
  */
16
- import { nativeGet as lodashGet } from '../memory/pathOps.js';
16
+ import { nativeGet as lodashGet } from 'foottrace/paths';
17
17
  import { registerScopeRuntime } from '../scope/runtime.js';
18
18
  import { shouldWrapWithProxy } from './allowlist.js';
19
19
  import { arrayProxyAt } from './arrayTraps.js';
@@ -299,4 +299,4 @@ export function createTypedScope(target, options) {
299
299
  },
300
300
  });
301
301
  }
302
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlVHlwZWRTY29wZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvY3JlYXRlVHlwZWRTY29wZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBRSxTQUFTLElBQUksU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hELE9BQU8sRUFBa0IsV0FBVyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU0zRixNQUFNLGFBQWEsR0FBaUM7SUFDbEQsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEMseUVBQXlFO0lBQ3pFLDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0UsaUVBQWlFO0lBQ2pFLGlEQUFpRDtJQUNqRCxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBVyxFQUFFLEtBQWMsRUFBRSxZQUFzQixFQUFFLFdBQW9CLEVBQUUsRUFBRSxDQUM5RixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMs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bnQiOlsiLyoqXG4gKiByZWFjdGl2ZS9jcmVhdGVUeXBlZFNjb3BlIC0tIENvcmUgUHJveHkgZmFjdG9yeSBmb3IgVHlwZWRTY29wZTxUPi5cbiAqXG4gKiBXcmFwcyBhIFJlYWN0aXZlVGFyZ2V0IChTY29wZUZhY2FkZSkgaW4gYSBQcm94eSB0aGF0IHByb3ZpZGVzOlxuICogLSBUeXBlZCBwcm9wZXJ0eSBhY2Nlc3M6IHNjb3BlLmNyZWRpdFRpZXIgKHJlYWQpLCBzY29wZS5jcmVkaXRUaWVyID0gJ0EnICh3cml0ZSlcbiAqIC0gRGVlcCB3cml0ZSBpbnRlcmNlcHRpb246IHNjb3BlLmN1c3RvbWVyLmFkZHJlc3MuemlwID0gJzkwMjEwJ1xuICogLSBBcnJheSBtdXRhdGlvbiBpbnRlcmNlcHRpb246IHNjb3BlLml0ZW1zLnB1c2goJ25ldycpXG4gKiAtICQtcHJlZml4ZWQgZXNjYXBlIGhhdGNoZXM6ICRnZXRWYWx1ZSwgJHNldFZhbHVlLCAkcmVhZCwgJGdldEFyZ3MsIGV0Yy5cbiAqXG4gKiBSZWFkIHNlbWFudGljczogdG9wLWxldmVsIGdldCBjYWxscyBnZXRWYWx1ZSgpIChmaXJlcyBvblJlYWQgT05DRSkuXG4gKiAgIE5lc3RlZCBnZXQgdHJhcHMgbmF2aWdhdGUgaW4tbWVtb3J5IC0tIG5vIGFkZGl0aW9uYWwgb25SZWFkLlxuICpcbiAqIFdyaXRlIHNlbWFudGljczogdG9wLWxldmVsIHNldCBjYWxscyBzZXRWYWx1ZSgpLiBOZXN0ZWQgc2V0IGNhbGxzXG4gKiAgIHVwZGF0ZVZhbHVlKCkgd2l0aCBhIHBhcnRpYWwgb2JqZWN0IGJ1aWx0IGZyb20gdGhlIGFjY3VtdWxhdGVkIHBhdGguXG4gKi9cblxuaW1wb3J0IHsgbmF0aXZlR2V0IGFzIGxvZGFzaEdldCB9IGZyb20gJy4uL21lbW9yeS9wYXRoT3BzLmpzJztcbmltcG9ydCB7IHJlZ2lzdGVyU2NvcGVSdW50aW1lIH0gZnJvbSAnLi4vc2NvcGUvcnVudGltZS5qcyc7XG5pbXBvcnQgeyBzaG91bGRXcmFwV2l0aFByb3h5IH0gZnJvbSAnLi9hbGxvd2xpc3QuanMnO1xuaW1wb3J0IHsgYXJyYXlQcm94eUF0IH0gZnJvbSAnLi9hcnJheVRyYXBzLmpzJztcbmltcG9ydCB7IHJlbWVtYmVySGFuZGxlLCB1bndyYXBIYW5kbGVzIH0gZnJvbSAnLi9oYW5kbGVzLmpzJztcbmltcG9ydCB7IGNhY2hlZE1lbWJlciwgbGl2ZUdldFRyYXAsIGxpdmVJbnNwZWN0aW9uVHJhcHMsIGxpdmVPYmplY3QsIE1lbWJlckNhY2hlIH0gZnJvbSAnLi9saXZlVmlldy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlYWN0aXZlT3B0aW9ucywgUmVhY3RpdmVUYXJnZXQsIFR5cGVkU2NvcGUgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IFNDT1BFX01FVEhPRF9OQU1FUyB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgdHlwZSBXcml0ZVNpbmssIHJvb3RLZXlTaW5rLCBzaW5rRGVsZXRlVHJhcCwgc2lua1NldFRyYXAgfSBmcm9tICcuL3dyaXRlVHJhcHMuanMnO1xuXG4vLyAtLSAkLW1ldGhvZCByb3V0aW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnR5cGUgTWV0aG9kUm91dGVyID0gKHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIG9wdHM6IFJlYWN0aXZlU3RhdGUpID0+IHVua25vd247XG5cbmNvbnN0IE1FVEhPRF9ST1VURVM6IFJlY29yZDxzdHJpbmcsIE1ldGhvZFJvdXRlcj4gPSB7XG4gICRnZXRWYWx1ZTogKHQpID0+IHQuZ2V0VmFsdWUuYmluZCh0KSxcbiAgLy8gQSBoYW5kbGUgdGhlIHNjb3BlIGhhbmRlZCBvdXQgaXMgYSB2YWx1ZSBpdCBhY2NlcHRzIGJhY2sgKGhhbmRsZXMudHMpOlxuICAvLyBgJHNldFZhbHVlKCdjb3B5Jywgc2NvcGUuY3VzdG9tZXIpYCBzdG9yZXMgdGhlIHZhbHVlIGJlaGluZCB0aGUgaGFuZGxlLFxuICAvLyBub3QgYSBQcm94eSB0aGUgY29tbWl0IGNvdWxkIG5ldmVyIGNsb25lLiBUaGUgc2V0IHRyYXAgZG9lcyB0aGUgc2FtZSBmb3JcbiAgLy8gYHNjb3BlLmNvcHkgPSBzY29wZS5jdXN0b21lcmA7IHRoZXNlIGFyZSB0aGUgZXhwbGljaXQgZG9vcnMuIEFcbiAgLy8gaGFuZGxlLWZyZWUgdmFsdWUgcGFzc2VzIHRocm91Z2ggYnkgcmVmZXJlbmNlLlxuICAkc2V0VmFsdWU6ICh0KSA9PiAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBzaG91bGRSZWRhY3Q/OiBib29sZWFuLCBkZXNjcmlwdGlvbj86IHN0cmluZykgPT5cbiAgICB0LnNldFZhbHVlKGtleSwgdW53cmFwSGFuZGxlcyh2YWx1ZSksIHNob3VsZFJlZGFjdCwgZGVzY3JpcHRpb24pLFxuICAkdXBkYXRlOiAodCkgPT4gKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgZGVzY3JpcHRpb24/OiBzdHJpbmcpID0+XG4gICAgdC51cGRhdGVWYWx1ZShrZXksIHVud3JhcEhhbmRsZXModmFsdWUpLCBkZXNjcmlwdGlvbiksXG4gICRkZWxldGU6ICh0KSA9PiB0LmRlbGV0ZVZhbHVlLmJpbmQodCksXG4gICRyZWFkOiAodCkgPT4gKGRvdFBhdGg6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJvb3RLZXkgPSBkb3RQYXRoLnNwbGl0KCcuJylbMF07XG4gICAgY29uc3QgdmFsdWUgPSB0LmdldFZhbHVlKHJvb3RLZXkpO1xuICAgIGlmICghZG90UGF0aC5pbmNsdWRlcygnLicpKSByZXR1cm4gdmFsdWU7XG4gICAgcmV0dXJuIGxvZGFzaEdldCh2YWx1ZSwgZG90UGF0aC5zbGljZShyb290S2V5Lmxlbmd0aCArIDEpKTtcbiAgfSxcbiAgJGdldEFyZ3M6ICh0KSA9PiB0LmdldEFyZ3MuYmluZCh0KSxcbiAgJGdldEVudjogKHQpID0+IHQuZ2V0RW52LmJpbmQodCksXG4gICRkZWJ1ZzogKHQpID0+IHQuYWRkRGVidWdJbmZvLmJpbmQodCksXG4gICRsb2c6ICh0KSA9PiB0LmFkZERlYnVnTWVzc2FnZS5iaW5kKHQpLFxuICAkZXJyb3I6ICh0KSA9PiB0LmFkZEVycm9ySW5mby5iaW5kKHQpLFxuICAkbWV0cmljOiAodCkgPT4gdC5hZGRNZXRyaWMuYmluZCh0KSxcbiAgJGV2YWw6ICh0KSA9PiB0LmFkZEV2YWwuYmluZCh0KSxcbiAgJGF0dGFjaFNjb3BlUmVjb3JkZXI6ICh0KSA9PiB0LmF0dGFjaFNjb3BlUmVjb3JkZXIuYmluZCh0KSxcbiAgJGRldGFjaFNjb3BlUmVjb3JkZXI6ICh0KSA9PiB0LmRldGFjaFNjb3BlUmVjb3JkZXIuYmluZCh0KSxcbiAgJGdldFNjb3BlUmVjb3JkZXJzOiAodCkgPT4gdC5nZXRTY29wZVJlY29yZGVycy5iaW5kKHQpLFxuICAkYmF0Y2hBcnJheTogKHQpID0+IChrZXk6IHN0cmluZywgZm46IChhcnI6IHVua25vd25bXSkgPT4gdm9pZCkgPT4ge1xuICAgIC8vIE9uZSBnZXRWYWx1ZSDigJQgZmlyZXMgb25SZWFkIG9uY2VcbiAgICBjb25zdCBjdXJyZW50ID0gdC5nZXRWYWx1ZShrZXkpO1xuICAgIC8vIENsb25lIG9uY2Ug4oCUIERFRVAgKG9yIHN0YXJ0IGVtcHR5IGlmIG1pc3Npbmcvbm9uLWFycmF5KS4gVGhlIHJlYWQgaXNcbiAgICAvLyBCT1JST1dFRDogYmVmb3JlIHRoZSBzdGFnZSdzIGZpcnN0IHN0YWdlZCB3cml0ZSBpdCBpcyBjb21taXR0ZWQgc2hhcmVkXG4gICAgLy8gbWVtb3J5IGl0c2VsZiwgc28gYSBzaGFsbG93IGBbLi4uY3VycmVudF1gIGhhbmRlZCB0aGUgc3RhZ2UgdGhlXG4gICAgLy8gY29tbWl0dGVkIEVMRU1FTlRTIGFuZCBgYXJyWzBdLm4gPSA5YCBlZGl0ZWQgY29tbWl0dGVkIHN0YXRlIGluIHBsYWNlXG4gICAgLy8gd2l0aCBubyB0cmFjZSByb3cgKGFuZCB0aGUgbGF6eSBidWZmZXIncyBiYXNlIHdhcyB0aGVuIHRha2VuIEFGVEVSIHRoZVxuICAgIC8vIGVkaXQsIHNvIHRoZSBuZXQtY2hhbmdlIGZpbHRlciBzYXcgbm90aGluZykuIFN0YXRlIHZhbHVlcyBzdXJ2aXZlXG4gICAgLy8gYHN0cnVjdHVyZWRDbG9uZWAgYnkgY29udHJhY3QsIHNvIHRoZSB3b3JraW5nIGNvcHkgaXMgYSBmdWxsIGNvcHkuXG4gICAgY29uc3QgY2xvbmU6IHVua25vd25bXSA9IEFycmF5LmlzQXJyYXkoY3VycmVudCkgPyBzdHJ1Y3R1cmVkQ2xvbmUoY3VycmVudCkgOiBbXTtcbiAgICAvLyBVc2VyIGFwcGxpZXMgYWxsIG11dGF0aW9ucyB0byB0aGUgcGxhaW4gY2xvbmUg4oCUIG5vIFByb3h5LCBubyBwZXItbXV0YXRpb24gY29tbWl0XG4gICAgZm4oY2xvbmUpO1xuICAgIC8vIE9uZSBzZXRWYWx1ZSDigJQgZmlyZXMgb25Xcml0ZSBvbmNlIHdpdGggdGhlIGZpbmFsIGFycmF5LiBUaGUgc3RhZ2UgbWF5XG4gICAgLy8gaGF2ZSBwdXNoZWQgaGFuZGxlcyBpbnRvIHRoZSBjbG9uZSAoYGFyci5wdXNoKHNjb3BlLnRlbXBsYXRlKWApIOKAlCB0aGV5XG4gICAgLy8gYXJlIHZhbHVlcyBieSB0aGUgdGltZSB0aGUgYXJyYXkgaXMgc3RhZ2VkIChoYW5kbGVzLnRzKS5cbiAgICB0LnNldFZhbHVlKGtleSwgdW53cmFwSGFuZGxlcyhjbG9uZSkpO1xuICB9LFxuICAkYnJlYWs6IChfdCwgb3B0cykgPT4gKHJlYXNvbj86IHN0cmluZykgPT4ge1xuICAgIGlmICghb3B0cy5icmVha0ZuKSB0aHJvdyBuZXcgRXJyb3IoJyRicmVhaygpIGlzIG5vdCBhdmFpbGFibGUgb3V0c2lkZSBzdGFnZSBleGVjdXRpb24nKTtcbiAgICBvcHRzLmJyZWFrRm4ocmVhc29uKTtcbiAgfSxcbiAgLy8gT2JzZXJ2YWJpbGl0eSDigJQgRW1pdCBjaGFubmVsIChQaGFzZSAzKS4gUm91dGVzIHRvIFNjb3BlRmFjYWRlLmVtaXRFdmVudFxuICAvLyB3aGljaCBoYW5kbGVzIGZhc3QtcGF0aCwgZW5yaWNobWVudCwgcmVkYWN0aW9uLCBhbmQgZXJyb3IgaXNvbGF0aW9uLlxuICAkZW1pdDogKHQpID0+IHQuZW1pdEV2ZW50LmJpbmQodCksXG4gIC8vIERldGFjaCAoVDQpIOKAlCBmaXJlLWFuZC1mb3JnZXQgY2hpbGQgZmxvd2NoYXJ0cy4gRGVsZWdhdGVzIHRvIFNjb3BlRmFjYWRlXG4gIC8vIHdoaWNoIG1pbnRlZCByZWZJZHMgZnJvbSBydW50aW1lU3RhZ2VJZC5cbiAgJGRldGFjaEFuZEpvaW5MYXRlcjogKHQpID0+IHQuZGV0YWNoQW5kSm9pbkxhdGVyLmJpbmQodCksXG4gICRkZXRhY2hBbmRGb3JnZXQ6ICh0KSA9PiB0LmRldGFjaEFuZEZvcmdldC5iaW5kKHQpLFxuICAkdG9SYXc6ICh0KSA9PiAoKSA9PiB0LFxufTtcblxuLy8gLS0gR3VhcmQgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGhlc2UgbXVzdCBiZSBoYW5kbGVkIHRvIHByZXZlbnQgUHJveHkgZnJvbSBiZWluZyB0cmVhdGVkIGFzIGEgUHJvbWlzZSxcbi8vIGJyZWFraW5nIGluc3RhbmNlb2YgY2hlY2tzLCBvciBjb25mdXNpbmcgdGVzdCBtYXRjaGVycy5cblxuY29uc3QgR1VBUkRfUFJPUFM6IFJlY29yZDxzdHJpbmcgfCBzeW1ib2wsIHVua25vd24+ID0ge1xuICB0aGVuOiB1bmRlZmluZWQsIC8vIHByZXZlbnQgUHJvbWlzZSBkZXRlY3Rpb25cbiAgYXN5bW1ldHJpY01hdGNoOiB1bmRlZmluZWQsIC8vIHByZXZlbnQgdml0ZXN0L2plc3QgbWF0Y2hlciBjb25mdXNpb25cbiAgY29uc3RydWN0b3I6IE9iamVjdCwgLy8gc2FmZSBwcm90b3R5cGVcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106ICdUeXBlZFNjb3BlJyxcbn07XG5cbi8vIC0tIFNpbGVudCBleGlzdGVuY2UgY2hlY2sgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBEb2VzIHRoaXMga2V5IGV4aXN0IGluIHN0YXRlLCBhbnN3ZXJlZCB3aXRoIE5PIHRyYWNraW5nIHNpZGUgZWZmZWN0IGF0IGFsbD9cbiAqXG4gKiBgZ2V0U3RhdGVLZXlzKClgIGlzIHRoZSBvbmx5IGluc3BlY3Rpb24gYSBTY29wZUZhY2FkZSBhbnN3ZXJzIHdpdGhvdXQgcm91dGluZ1xuICogdGhyb3VnaCB0aGUgdHJhY2tlZCByZWFkIHBhdGguIGBoYXNLZXkoKWAgZGVsaWJlcmF0ZWx5IERPRVMgcm91dGUgdGhyb3VnaCBpdDpcbiAqIGAnaycgaW4gc2NvcGVgIGlzIGEgcmVhbCBxdWVzdGlvbiBhYm91dCBzdGF0ZSB0aGF0IGEgc3RhZ2UgY2FuIGJyYW5jaCBvbiwgc29cbiAqIGl0IHJlZ2lzdGVycyBhcyBhIHJlYWQg4oCUIHdoaWNoIGlzIGV4YWN0bHkgd2h5IHRoaXMgcHJvYmUgbXVzdCBub3QgdXNlIGl0LlxuICpcbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiB0aGUgdGFyZ2V0IG9mZmVycyBubyBzaWxlbnQgYW5zd2VyOyBjYWxsZXJzIG11c3RcbiAqIHRoZW4gY2hvb3NlIGRlbGliZXJhdGVseSByYXRoZXIgdGhhbiBhc3N1bWUuXG4gKi9cbmZ1bmN0aW9uIHNpbGVudGx5S25vd25LZXkodGFyZ2V0OiBSZWFjdGl2ZVRhcmdldCwga2V5OiBzdHJpbmcpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF0YXJnZXQuZ2V0U3RhdGVLZXlzKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gdGFyZ2V0LmdldFN0YXRlS2V5cygpLmluY2x1ZGVzKGtleSk7XG59XG5cbi8vIC0tIE11dGFibGUgc3RhdGUgcGVyIHByb3h5IGluc3RhbmNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuaW50ZXJmYWNlIFJlYWN0aXZlU3RhdGUge1xuICBicmVha0ZuPzogKHJlYXNvbj86IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIFRoZSB0b3AtbGV2ZWwga2V5J3MgY2hpbGQgcHJveHksIHZhbGlkYXRlZCBieSByYXcgaWRlbnRpdHkgKGBsaXZlVmlldy50cyDCtyBjYWNoZWRNZW1iZXJgKTsgYSBzaW5rIGRyb3BzIHRoZSBrZXkgb24gd3JpdGUuICovXG4gIGNoaWxkQ2FjaGU6IE1lbWJlckNhY2hlO1xufVxuXG4vLyAtLSBOZXN0ZWQgY2hpbGQgcHJveGllcyAoZm9yIGRlZXAgd3JpdGUgaW50ZXJjZXB0aW9uKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy9cbi8vIEJvdGggZmFjdG9yaWVzIGFyZSBPUkNIRVNUUkFUT1JTICg5LjIzLjEpOiByZWFkcyBhcmUgYGxpdmVWaWV3LnRzYCwgd3JpdGVzXG4vLyBhcmUgYHdyaXRlVHJhcHMudHNgIG92ZXIgYSBgcm9vdEtleVNpbmtgLCBhbmQgdGhlIE9ORSB0aGluZyBlYWNoIGRlY2lkZXNcbi8vIGl0c2VsZiBpcyB3aGF0IGEgY2hpbGQgbWVtYmVyIGJlY29tZXMg4oCUIHRoZSBjeWNsZSBwb2xpY3kuIEVhY2ggaG9sZHMgaXRzXG4vLyBvd24gcGVyLW1lbWJlciBwcm94eSBjYWNoZSAoOS4yMy4yLCBgbGl2ZVZpZXcudHMgwrcgY2FjaGVkTWVtYmVyYCkuXG4vL1xuLy8gQ3ljbGUgc2FmZXR5OiBhbiBpbW11dGFibGUgU2V0PG9iamVjdD4gb2YgYW5jZXN0b3Igb2JqZWN0cyBpcyBwYXNzZWQgZG93blxuLy8gZWFjaCBhY2Nlc3MgY2hhaW4uIEVhY2ggYnJhbmNoIGdldHMgaXRzIG93biBjb3B5IChuZXcgU2V0KHBhcmVudCkpIHNvXG4vLyBzY29wZS54LmZyaWVuZCBhbmQgc2NvcGUueC5jb3dvcmtlciBkb24ndCBwb2xsdXRlIGVhY2ggb3RoZXIncyB0cmFja2luZy5cbi8vIFdoZW4gYSBjaGlsZCB2YWx1ZSBpcyBhbHJlYWR5IGluIHRoZSBhbmNlc3RvciBzZXQsIHdlJ3ZlIGhpdCBhIGN5Y2xlLlxuLy8gQXQgdGhlIGN5Y2xlIGJyZWFrOiByZXR1cm4gYSB0ZXJtaW5hbCBwcm94eSB0aGF0IHRyYWNrcyB3cml0ZXMgKHNldCB0cmFwXG4vLyBzdGlsbCBidWlsZHMgcGF0aCArIGNvbW1pdHMgdGhyb3VnaCB0aGUgc2luaykgYnV0IGRvZXNuJ3QgcmVjdXJzZSByZWFkc1xuLy8gZnVydGhlci4gVGhlIHRlcm1pbmFsIGNoYWluIHNoYXJlcyBPTkUgbXV0YWJsZSBgdmlzaXRlZGAgc2V0OiBhIHZhbHVlIHNlZW5cbi8vIGFueXdoZXJlIHBhc3QgdGhlIGN5Y2xlIGVkZ2UgaXMgaGFuZGVkIGJhY2sgcmF3LlxuXG5mdW5jdGlvbiBjcmVhdGVUZXJtaW5hbFByb3h5KFxuICBvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzaW5rOiBXcml0ZVNpbmssXG4gIHNlZ21lbnRzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgdmlzaXRlZDogU2V0PG9iamVjdD4gPSBuZXcgU2V0KCksXG4pOiB1bmtub3duIHtcbiAgdmlzaXRlZC5hZGQob2JqKTtcbiAgY29uc3QgbWVtYmVycyA9IG5ldyBNZW1iZXJDYWNoZSgpO1xuICBjb25zdCBsaXZlID0gKCkgPT4gbGl2ZU9iamVjdChvYmosIHNpbmsucmVhZEF0KHNlZ21lbnRzKSk7XG4gIGNvbnN0IGNoaWxkID0gKHZhbHVlOiB1bmtub3duLCBwYXRoOiBzdHJpbmdbXSk6IHVua25vd24gPT4ge1xuICAgIGlmICghc2hvdWxkV3JhcFdpdGhQcm94eSh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICAvLyBBbiBhcnJheSBwYXN0IHRoZSBjeWNsZSBlZGdlIHN0aWxsIGdldHMgY29weS1vbi13cml0ZSBpbnRlcmNlcHRpb24g4oCUXG4gICAgLy8gaXQgY29tbWl0cyBhcyBhIGBzZXRgIG9mIHRoZSByb290IGtleSwgdGhlIHNhbWUgbGF3IGFzIHRoZSBuZXN0ZWQgcHJveHkuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gYXJyYXlQcm94eUF0KHNpbmssIHBhdGgpO1xuICAgIGlmICh2aXNpdGVkLmhhcyh2YWx1ZSBhcyBvYmplY3QpKSByZXR1cm4gdmFsdWU7XG4gICAgcmV0dXJuIGNyZWF0ZVRlcm1pbmFsUHJveHkodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHNpbmssIHBhdGgsIHZpc2l0ZWQpO1xuICB9O1xuICByZXR1cm4gcmVtZW1iZXJIYW5kbGUoXG4gICAgbmV3IFByb3h5KG9iaiwge1xuICAgICAgZ2V0OiBsaXZlR2V0VHJhcChsaXZlLCBzZWdtZW50cywgY2hpbGQsIG1lbWJlcnMpLFxuICAgICAgc2V0OiBzaW5rU2V0VHJhcChzaW5rLCBzZWdtZW50cyksXG4gICAgICBkZWxldGVQcm9wZXJ0eTogc2lua0RlbGV0ZVRyYXAoc2luaywgc2VnbWVudHMpLFxuICAgICAgLi4ubGl2ZUluc3BlY3Rpb25UcmFwcyhsaXZlKSxcbiAgICB9KSxcbiAgICBsaXZlLFxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVOZXN0ZWRQcm94eShcbiAgb2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgc2luazogV3JpdGVTaW5rLFxuICBzZWdtZW50czogcmVhZG9ubHkgc3RyaW5nW10sXG4gIGFuY2VzdG9yczogU2V0PG9iamVjdD4gPSBuZXcgU2V0KCksXG4pOiB1bmtub3duIHtcbiAgLy8gUmVhZHMgYXJlIExJVkUgKDkuMjIuMCk6IGEgaGVsZCBwcm94eSByZWFkcyBpdHMgb3duIHdyaXRlcywgYCd4JyBpbiBvYFxuICAvLyBhbmQgYE9iamVjdC5rZXlzKG8pYCBzZWUgdGhlbSwgYW5kIGBvLmIgPSBvLmEgKiAxMGAgdXNlcyB0aGUgbmV3IGBhYC5cbiAgLy8gVGhlIGNhcHR1cmVkIG9iamVjdCBhbnN3ZXJzIG9ubHkgd2hlbiB0aGUgcGF0aCBpcyBnb25lIOKAlCBzZWUgbGl2ZVZpZXcudHMuXG4gIGNvbnN0IG1lbWJlcnMgPSBuZXcgTWVtYmVyQ2FjaGUoKTtcbiAgY29uc3QgbGl2ZSA9ICgpID0+IGxpdmVPYmplY3Qob2JqLCBzaW5rLnJlYWRBdChzZWdtZW50cykpO1xuICBjb25zdCBjaGlsZCA9ICh2YWx1ZTogdW5rbm93biwgcGF0aDogc3RyaW5nW10pOiB1bmtub3duID0+IHtcbiAgICBpZiAoIXNob3VsZFdyYXBXaXRoUHJveHkodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgLy8gQW4gYXJyYXkgY29tbWl0cyBhcyBhIGBzZXRgIG9mIHRoZSBST09UIEtFWSAocmVhY3RpdmUvUkVBRE1FLm1kLCBsYXcgMylcbiAgICAvLyDigJQgdGhlIHNpbmsncyB2ZXJiLCB3aGF0ZXZlciBkZXB0aCB0aGUgYXJyYXkgc2l0cyBhdC5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBhcnJheVByb3h5QXQoc2luaywgcGF0aCk7XG4gICAgaWYgKGFuY2VzdG9ycy5oYXModmFsdWUgYXMgb2JqZWN0KSkgcmV0dXJuIGNyZWF0ZVRlcm1pbmFsUHJveHkodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHNpbmssIHBhdGgpO1xuICAgIHJldHVybiBjcmVhdGVOZXN0ZWRQcm94eSh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgc2luaywgcGF0aCwgbmV3IFNldChhbmNlc3RvcnMpLmFkZCh2YWx1ZSBhcyBvYmplY3QpKTtcbiAgfTtcbiAgcmV0dXJuIHJlbWVtYmVySGFuZGxlKFxuICAgIG5ldyBQcm94eShvYmosIHtcbiAgICAgIGdldDogbGl2ZUdldFRyYXAobGl2ZSwgc2VnbWVudHMsIGNoaWxkLCBtZW1iZXJzKSxcbiAgICAgIHNldDogc2lua1NldFRyYXAoc2luaywgc2VnbWVudHMpLFxuICAgICAgZGVsZXRlUHJvcGVydHk6IHNpbmtEZWxldGVUcmFwKHNpbmssIHNlZ21lbnRzKSxcbiAgICAgIC4uLmxpdmVJbnNwZWN0aW9uVHJhcHMobGl2ZSksXG4gICAgfSksXG4gICAgbGl2ZSxcbiAgKTtcbn1cblxuLy8gLS0gVG9wLWxldmVsIGxlYXZlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIGByZXNlcnZlZFJlYWRgIGFuc3dlcmVkIG5vdGhpbmc6IHRoZSBuYW1lIGlzIGEgc3RhdGUga2V5IGFuZCBtdXN0IGJlIHJlYWQgKHRyYWNrZWQpIGZyb20gdGhlIHRhcmdldC4gKi9cbmNvbnN0IFNUQVRFX0tFWTogdW5pcXVlIHN5bWJvbCA9IFN5bWJvbCgnc3RhdGUta2V5Jyk7XG5cbi8qKlxuICogV0hZOiB0aGUgbmFtZXMgdGhlIHNjb3BlIGFuc3dlcnMgSVRTRUxGIOKAlCBzeW1ib2xzLCB0aGUgZ3VhcmQgcHJvcGVydGllcyxcbiAqIE5vZGUncyBpbnNwZWN0IGhvb2ssIHRoZSBgJGAtbWV0aG9kcyBhbmQgdGhlIEpTT04gcHJvYmUg4oCUIG11c3QgbmV2ZXIgYmVjb21lXG4gKiB0cmFja2VkIHJlYWRzOyBldmVyeXRoaW5nIGVsc2UgKGEgbGlmZWN5Y2xlLWxvb2tpbmcgbmFtZSBzdWNoIGFzXG4gKiBgbm90aWZ5U3RhZ2VTdGFydGAgaW5jbHVkZWQpIGlzIGEgc3RhdGUga2V5IGFuZCBpcyBsZWZ0IHRvIHRoZSBjYWxsZXIuIFRoZVxuICogZW5naW5lIHJlYWNoZXMgdGhlIGZhY2FkZSB0aHJvdWdoIHRoZSByZWdpc3RlcmVkIHJ1bnRpbWUgcG9ydCwgbmV2ZXIgdGhyb3VnaFxuICogYSBuYW1lIG9uIHRoaXMgcHJveHkuXG4gKlxuICogVGhlIHByb2JlOiBgSlNPTi5zdHJpbmdpZnlgIGFza3MgRVZFUlkgdmFsdWUgZm9yIGEgYHRvSlNPTmAgbWV0aG9kLiBUaGF0XG4gKiBxdWVzdGlvbiBjb21lcyBmcm9tIHRoZSBydW50aW1lLCBub3QgdGhlIHN0YWdlIGF1dGhvciwgc28gaXQgbXVzdCBub3QgZW50ZXJcbiAqIHRoZSByZWFkIHNldC4gQSBzdGF0ZSBrZXkgbGl0ZXJhbGx5IGNhbGxlZCAndG9KU09OJyBpcyBsZWdhbDogd2hlbiBpdCBFWElTVFNcbiAqIHRoaXMgaXMgYSBnZW51aW5lIHJlYWQgYW5kIHN0YXlzIHRyYWNrZWQsIGFuZCB3aGVuIHRoZSB0YXJnZXQgY2Fubm90IGFuc3dlclxuICogc2lsZW50bHksIHRydXRoIHdpbnMgb3ZlciBub2lzZSDigJQgZmFsbCB0aHJvdWdoLlxuICovXG5mdW5jdGlvbiByZXNlcnZlZFJlYWQodGFyZ2V0OiBSZWFjdGl2ZVRhcmdldCwgc3RhdGU6IFJlYWN0aXZlU3RhdGUsIHByb3A6IHN0cmluZyB8IHN5bWJvbCk6IHVua25vd24ge1xuICBpZiAodHlwZW9mIHByb3AgPT09ICdzeW1ib2wnKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHVUFSRF9QUk9QUywgcHJvcCkpIHJldHVybiBHVUFSRF9QUk9QU1twcm9wXTtcbiAgICBpZiAocHJvcCA9PT0gU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKSkgcmV0dXJuICgpID0+IHRhcmdldC5nZXRWYWx1ZSgpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHVUFSRF9QUk9QUywgcHJvcCkpIHJldHVybiBHVUFSRF9QUk9QU1twcm9wXTtcbiAgaWYgKFNDT1BFX01FVEhPRF9OQU1FUy5oYXMocHJvcCkpIHJldHVybiBNRVRIT0RfUk9VVEVTW3Byb3BdPy4odGFyZ2V0LCBzdGF0ZSk7XG4gIGlmIChwcm9wID09PSAndG9KU09OJyAmJiBzaWxlbnRseUtub3duS2V5KHRhcmdldCwgcHJvcCkgPT09IGZhbHNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gU1RBVEVfS0VZO1xufVxuXG4vKipcbiAqIEEgd3JhcHBhYmxlIHN0YXRlIHZhbHVlIGJlY29tZXMgdGhlIGFycmF5IG9yIG5lc3RlZCBwcm94eSBmb3IgaXRzIGtleTtcbiAqIGFueXRoaW5nIGVsc2UgaXMgaGFuZGVkIGJhY2sgcmF3LiBgc2NvcGUuayA9PT0gc2NvcGUua2AgaG9sZHMgd2l0aGluIGFcbiAqIHN0YWdlIHRocm91Z2ggdGhlIHNhbWUgcGVyLW1lbWJlciBjYWNoZSBldmVyeSBvYmplY3QgcHJveHkgdXNlc1xuICogKGBsaXZlVmlldy50cyDCtyBjYWNoZWRNZW1iZXJgKTogYSB3cml0ZSB0byB0aGUga2V5IGRyb3BzIHRoZSBlbnRyeSAodGhlXG4gKiBzaW5rIGRvZXMgaXQpLCBhIGNvbW1pdCBzd2FwcyB0aGUgdmFsdWUgYW5kIHRoZSByZWYgY2hlY2sgbWlzc2VzIOKAlCBlaXRoZXJcbiAqIHdheSB0aGUgbmV4dCByZWFkIGJ1aWxkcyBhIGZyZXNoIHByb3h5IG92ZXIgdGhlIG5ldyB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gd3JhcFN0YXRlVmFsdWUoXG4gIHRhcmdldDogUmVhY3RpdmVUYXJnZXQsXG4gIHJlYWRTaWxlbnQ6IChrZXk6IHN0cmluZykgPT4gdW5rbm93bixcbiAgc3RhdGU6IFJlYWN0aXZlU3RhdGUsXG4gIGtleTogc3RyaW5nLFxuICB2YWx1ZTogdW5rbm93bixcbik6IHVua25vd24ge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gdmFsdWU7XG4gIGlmICghc2hvdWxkV3JhcFdpdGhQcm94eSh2YWx1ZSkpIHJldHVybiB2YWx1ZTsgLy8gRGF0ZSwgTWFwLCBjbGFzcyBpbnN0YW5jZSwgZnJvemVuIOKAplxuICByZXR1cm4gY2FjaGVkTWVtYmVyKFxuICAgIHN0YXRlLmNoaWxkQ2FjaGUsXG4gICAga2V5LFxuICAgIHZhbHVlLFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IHNpbmsgPSByb290S2V5U2luayh0YXJnZXQsIHJlYWRTaWxlbnQsIGtleSwgc3RhdGUuY2hpbGRDYWNoZSk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBhcnJheVByb3h5QXQoc2luaywgW10pO1xuICAgICAgcmV0dXJuIGNyZWF0ZU5lc3RlZFByb3h5KHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBzaW5rLCBbXSwgbmV3IFNldDxvYmplY3Q+KFt2YWx1ZV0pKTtcbiAgICB9LFxuICAgIFtdLFxuICApO1xufVxuXG4vKiogV0hZOiBhIGAkYC1uYW1lIGNhbiBuZXZlciBiZSBhIHN0YXRlIGtleSDigJQgdGhlIHdyaXRlIGlzIHJlZnVzZWQsIG5vdCBzaGFkb3dlZDsgZXZlcnkgb3RoZXIgYXNzaWdubWVudFxuICogIHN0b3JlcyB0aGUgdmFsdWUgQVMgQVNTSUdORUQgKGEgaGFuZGxlIGJlY29tZXMgd2hhdCBpdCBzdGFuZHMgZm9yLCBgaGFuZGxlcy50c2A7IHRoZSBidWZmZXIgZGV0YWNoZXMgYXRcbiAqICBjb21taXQg4oCUIHRoZSBzYW1lIGxhdyBhcyBgJHNldFZhbHVlYCwgOS4yNC4wKSBhbmQgZHJvcHMgdGhlIGtleSdzIGNhY2hlZCBwcm94eS4gKi9cbmZ1bmN0aW9uIGFzc2lnblN0YXRlS2V5KHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIHN0YXRlOiBSZWFjdGl2ZVN0YXRlLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgaWYgKFNDT1BFX01FVEhPRF9OQU1FUy5oYXMoa2V5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBDYW5ub3Qgc2V0IHN0YXRlIGtleSBcIiR7a2V5fVwiIC0tIGl0IGNvbmZsaWN0cyB3aXRoIGEgcmVzZXJ2ZWQgVHlwZWRTY29wZSBtZXRob2QuIFJlbmFtZSB0aGUgc3RhdGUga2V5IHRvIGF2b2lkICQtcHJlZml4ZWQgbmFtZXMuYCxcbiAgICApO1xuICB9XG4gIHRhcmdldC5zZXRWYWx1ZShrZXksIHVud3JhcEhhbmRsZXModmFsdWUpKTtcbiAgc3RhdGUuY2hpbGRDYWNoZS5kZWxldGUoa2V5KTtcbn1cblxuLyoqIERvZXMgdGhlIGtleSBleGlzdCDigJQgYW5zd2VyZWQgd2l0aG91dCBhIHRyYWNrZWQgcmVhZCB3aGVyZXZlciB0aGUgdGFyZ2V0IGNhbjsgYGdldFZhbHVlYCBpcyB0aGUgbGFzdCByZXNvcnQuICovXG5mdW5jdGlvbiBrbm93bktleSh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAodGFyZ2V0Lmhhc0tleSkgcmV0dXJuIHRhcmdldC5oYXNLZXkoa2V5KTtcbiAgaWYgKHRhcmdldC5nZXRTdGF0ZUtleXMpIHJldHVybiB0YXJnZXQuZ2V0U3RhdGVLZXlzKCkuaW5jbHVkZXMoa2V5KTtcbiAgcmV0dXJuIHRhcmdldC5nZXRWYWx1ZShrZXkpICE9PSB1bmRlZmluZWQ7IC8vIGZhbGxiYWNrOiBmaXJlcyBvblJlYWQgKGFjY2VwdGFibGUgZGVncmFkYXRpb24pXG59XG5cbi8qKiBFdmVyeSBzdGF0ZSBrZXkg4oCUIHNpbGVudGx5IHdoZXJlIHRoZSB0YXJnZXQgY2FuLCBlbHNlIGZyb20gYSB3aG9sZS1zdGF0ZSByZWFkLiAqL1xuZnVuY3Rpb24gc3RhdGVLZXlzKHRhcmdldDogUmVhY3RpdmVUYXJnZXQpOiBzdHJpbmdbXSB7XG4gIGlmICh0YXJnZXQuZ2V0U3RhdGVLZXlzKSByZXR1cm4gdGFyZ2V0LmdldFN0YXRlS2V5cygpO1xuICBjb25zdCBzbmFwc2hvdCA9IHRhcmdldC5nZXRWYWx1ZSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICByZXR1cm4gc25hcHNob3QgJiYgdHlwZW9mIHNuYXBzaG90ID09PSAnb2JqZWN0JyA/IE9iamVjdC5rZXlzKHNuYXBzaG90KSA6IFtdO1xufVxuXG4vLyAtLSBUb3AtbGV2ZWwgcHJveHkgKHRoZSBtYWluIFR5cGVkU2NvcGUpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQ3JlYXRlcyBhIFR5cGVkU2NvcGU8VD4gcHJveHkgd3JhcHBpbmcgYSBSZWFjdGl2ZVRhcmdldC5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIHVuZGVybHlpbmcgc2NvcGUgKFNjb3BlRmFjYWRlIG9yIGFueSBSZWFjdGl2ZVRhcmdldClcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiAoYnJlYWtQaXBlbGluZSBpbmplY3Rpb24pXG4gKiBAcmV0dXJucyBBIFByb3h5IHdpdGggdHlwZWQgcHJvcGVydHkgYWNjZXNzIGFuZCAkLXByZWZpeGVkIG1ldGhvZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVR5cGVkU2NvcGU8VCBleHRlbmRzIG9iamVjdD4odGFyZ2V0OiBSZWFjdGl2ZVRhcmdldCwgb3B0aW9ucz86IFJlYWN0aXZlT3B0aW9ucyk6IFR5cGVkU2NvcGU8VD4ge1xuICBjb25zdCBzdGF0ZTogUmVhY3RpdmVTdGF0ZSA9IHsgYnJlYWtGbjogb3B0aW9ucz8uYnJlYWtQaXBlbGluZSwgY2hpbGRDYWNoZTogbmV3IE1lbWJlckNhY2hlKCkgfTtcbiAgLy8gQmluZCB0aGUgc2lsZW50IHJlYWQgb25jZSDigJQgdGhlIG5lc3RlZC9hcnJheSBwcm94aWVzIHJlc29sdmUgdGhlaXIgbGl2ZSB2aWV3IHRocm91Z2ggaXQuXG4gIGNvbnN0IHJlYWRTaWxlbnQgPSAodGFyZ2V0LmdldFZhbHVlU2lsZW50ID8/IHRhcmdldC5nZXRWYWx1ZSkuYmluZCh0YXJnZXQpO1xuXG4gIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCBhcyB1bmtub3duIGFzIFR5cGVkU2NvcGU8VD4sIHtcbiAgICBnZXQoX3Byb3h5VGFyZ2V0LCBwcm9wKSB7XG4gICAgICBjb25zdCBhbnN3ZXJlZCA9IHJlc2VydmVkUmVhZCh0YXJnZXQsIHN0YXRlLCBwcm9wKTtcbiAgICAgIGlmIChhbnN3ZXJlZCAhPT0gU1RBVEVfS0VZKSByZXR1cm4gYW5zd2VyZWQ7XG4gICAgICAvLyBBIHN0YXRlIGtleTogT05FIHRyYWNrZWQgcmVhZCAoZmlyZXMgb25SZWFkIG9uY2UpLCB0aGVuIHRoZSB3cmFwcGVyLlxuICAgICAgcmV0dXJuIHdyYXBTdGF0ZVZhbHVlKHRhcmdldCwgcmVhZFNpbGVudCwgc3RhdGUsIHByb3AgYXMgc3RyaW5nLCB0YXJnZXQuZ2V0VmFsdWUocHJvcCBhcyBzdHJpbmcpKTtcbiAgICB9LFxuICAgIHNldChfcHJveHlUYXJnZXQsIHByb3AsIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3AgPT09ICdzdHJpbmcnKSBhc3NpZ25TdGF0ZUtleSh0YXJnZXQsIHN0YXRlLCBwcm9wLCB2YWx1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGRlbGV0ZVByb3BlcnR5KF9wcm94eVRhcmdldCwgcHJvcCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykgcmV0dXJuIHRydWU7XG4gICAgICB0YXJnZXQuZGVsZXRlVmFsdWUocHJvcCk7XG4gICAgICBzdGF0ZS5jaGlsZENhY2hlLmRlbGV0ZShwcm9wKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgaGFzKF9wcm94eVRhcmdldCwgcHJvcCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3ltYm9sJykgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHVUFSRF9QUk9QUywgcHJvcCk7XG4gICAgICByZXR1cm4gU0NPUEVfTUVUSE9EX05BTUVTLmhhcyhwcm9wKSB8fCBrbm93bktleSh0YXJnZXQsIHByb3ApO1xuICAgIH0sXG4gICAgb3duS2V5czogKCkgPT4gc3RhdGVLZXlzKHRhcmdldCksXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKF9wcm94eVRhcmdldCwgcHJvcCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJyB8fCBTQ09QRV9NRVRIT0RfTkFNRVMuaGFzKHByb3ApKSByZXR1cm4gdW5kZWZpbmVkOyAvLyAkLW1ldGhvZHMgYXJlIG5vbi1lbnVtZXJhYmxlXG4gICAgICBpZiAoIWtub3duS2V5KHRhcmdldCwgcHJvcCkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4geyBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH07IC8vIHRoZSB2YWx1ZSBpcyBmZXRjaGVkIHZpYSB0aGUgZ2V0IHRyYXBcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHJlZ2lzdGVyU2NvcGVSdW50aW1lKHByb3h5LCB7XG4gICAgdGFyZ2V0LFxuICAgIGhhbmRsZXNBc3NpZ25tZW50czogdHJ1ZSxcbiAgICBzZXRCcmVhazogKGZuKSA9PiB7XG4gICAgICBzdGF0ZS5icmVha0ZuID0gZm47XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
302
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlVHlwZWRTY29wZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvY3JlYXRlVHlwZWRTY29wZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUVILE9BQU8sRUFBRSxTQUFTLElBQUksU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDM0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hELE9BQU8sRUFBa0IsV0FBVyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQU0zRixNQUFNLGFBQWEsR0FBaUM7SUFDbEQsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEMseUVBQXlFO0lBQ3pFLDBFQUEwRTtJQUMxRSwyRUFBMkU7SUFDM0UsaUVBQWlFO0lBQ2pFLGlEQUFpRDtJQUNqRCxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBVyxFQUFFLEtBQWMsRUFBRSxZQUFzQixFQUFFLFdBQW9CLEVBQUUsRUFBRSxDQUM5RixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMs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bnQiOlsiLyoqXG4gKiByZWFjdGl2ZS9jcmVhdGVUeXBlZFNjb3BlIC0tIENvcmUgUHJveHkgZmFjdG9yeSBmb3IgVHlwZWRTY29wZTxUPi5cbiAqXG4gKiBXcmFwcyBhIFJlYWN0aXZlVGFyZ2V0IChTY29wZUZhY2FkZSkgaW4gYSBQcm94eSB0aGF0IHByb3ZpZGVzOlxuICogLSBUeXBlZCBwcm9wZXJ0eSBhY2Nlc3M6IHNjb3BlLmNyZWRpdFRpZXIgKHJlYWQpLCBzY29wZS5jcmVkaXRUaWVyID0gJ0EnICh3cml0ZSlcbiAqIC0gRGVlcCB3cml0ZSBpbnRlcmNlcHRpb246IHNjb3BlLmN1c3RvbWVyLmFkZHJlc3MuemlwID0gJzkwMjEwJ1xuICogLSBBcnJheSBtdXRhdGlvbiBpbnRlcmNlcHRpb246IHNjb3BlLml0ZW1zLnB1c2goJ25ldycpXG4gKiAtICQtcHJlZml4ZWQgZXNjYXBlIGhhdGNoZXM6ICRnZXRWYWx1ZSwgJHNldFZhbHVlLCAkcmVhZCwgJGdldEFyZ3MsIGV0Yy5cbiAqXG4gKiBSZWFkIHNlbWFudGljczogdG9wLWxldmVsIGdldCBjYWxscyBnZXRWYWx1ZSgpIChmaXJlcyBvblJlYWQgT05DRSkuXG4gKiAgIE5lc3RlZCBnZXQgdHJhcHMgbmF2aWdhdGUgaW4tbWVtb3J5IC0tIG5vIGFkZGl0aW9uYWwgb25SZWFkLlxuICpcbiAqIFdyaXRlIHNlbWFudGljczogdG9wLWxldmVsIHNldCBjYWxscyBzZXRWYWx1ZSgpLiBOZXN0ZWQgc2V0IGNhbGxzXG4gKiAgIHVwZGF0ZVZhbHVlKCkgd2l0aCBhIHBhcnRpYWwgb2JqZWN0IGJ1aWx0IGZyb20gdGhlIGFjY3VtdWxhdGVkIHBhdGguXG4gKi9cblxuaW1wb3J0IHsgbmF0aXZlR2V0IGFzIGxvZGFzaEdldCB9IGZyb20gJ2Zvb3R0cmFjZS9wYXRocyc7XG5cbmltcG9ydCB7IHJlZ2lzdGVyU2NvcGVSdW50aW1lIH0gZnJvbSAnLi4vc2NvcGUvcnVudGltZS5qcyc7XG5pbXBvcnQgeyBzaG91bGRXcmFwV2l0aFByb3h5IH0gZnJvbSAnLi9hbGxvd2xpc3QuanMnO1xuaW1wb3J0IHsgYXJyYXlQcm94eUF0IH0gZnJvbSAnLi9hcnJheVRyYXBzLmpzJztcbmltcG9ydCB7IHJlbWVtYmVySGFuZGxlLCB1bndyYXBIYW5kbGVzIH0gZnJvbSAnLi9oYW5kbGVzLmpzJztcbmltcG9ydCB7IGNhY2hlZE1lbWJlciwgbGl2ZUdldFRyYXAsIGxpdmVJbnNwZWN0aW9uVHJhcHMsIGxpdmVPYmplY3QsIE1lbWJlckNhY2hlIH0gZnJvbSAnLi9saXZlVmlldy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlYWN0aXZlT3B0aW9ucywgUmVhY3RpdmVUYXJnZXQsIFR5cGVkU2NvcGUgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IFNDT1BFX01FVEhPRF9OQU1FUyB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgdHlwZSBXcml0ZVNpbmssIHJvb3RLZXlTaW5rLCBzaW5rRGVsZXRlVHJhcCwgc2lua1NldFRyYXAgfSBmcm9tICcuL3dyaXRlVHJhcHMuanMnO1xuXG4vLyAtLSAkLW1ldGhvZCByb3V0aW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnR5cGUgTWV0aG9kUm91dGVyID0gKHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIG9wdHM6IFJlYWN0aXZlU3RhdGUpID0+IHVua25vd247XG5cbmNvbnN0IE1FVEhPRF9ST1VURVM6IFJlY29yZDxzdHJpbmcsIE1ldGhvZFJvdXRlcj4gPSB7XG4gICRnZXRWYWx1ZTogKHQpID0+IHQuZ2V0VmFsdWUuYmluZCh0KSxcbiAgLy8gQSBoYW5kbGUgdGhlIHNjb3BlIGhhbmRlZCBvdXQgaXMgYSB2YWx1ZSBpdCBhY2NlcHRzIGJhY2sgKGhhbmRsZXMudHMpOlxuICAvLyBgJHNldFZhbHVlKCdjb3B5Jywgc2NvcGUuY3VzdG9tZXIpYCBzdG9yZXMgdGhlIHZhbHVlIGJlaGluZCB0aGUgaGFuZGxlLFxuICAvLyBub3QgYSBQcm94eSB0aGUgY29tbWl0IGNvdWxkIG5ldmVyIGNsb25lLiBUaGUgc2V0IHRyYXAgZG9lcyB0aGUgc2FtZSBmb3JcbiAgLy8gYHNjb3BlLmNvcHkgPSBzY29wZS5jdXN0b21lcmA7IHRoZXNlIGFyZSB0aGUgZXhwbGljaXQgZG9vcnMuIEFcbiAgLy8gaGFuZGxlLWZyZWUgdmFsdWUgcGFzc2VzIHRocm91Z2ggYnkgcmVmZXJlbmNlLlxuICAkc2V0VmFsdWU6ICh0KSA9PiAoa2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBzaG91bGRSZWRhY3Q/OiBib29sZWFuLCBkZXNjcmlwdGlvbj86IHN0cmluZykgPT5cbiAgICB0LnNldFZhbHVlKGtleSwgdW53cmFwSGFuZGxlcyh2YWx1ZSksIHNob3VsZFJlZGFjdCwgZGVzY3JpcHRpb24pLFxuICAkdXBkYXRlOiAodCkgPT4gKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgZGVzY3JpcHRpb24/OiBzdHJpbmcpID0+XG4gICAgdC51cGRhdGVWYWx1ZShrZXksIHVud3JhcEhhbmRsZXModmFsdWUpLCBkZXNjcmlwdGlvbiksXG4gICRkZWxldGU6ICh0KSA9PiB0LmRlbGV0ZVZhbHVlLmJpbmQodCksXG4gICRyZWFkOiAodCkgPT4gKGRvdFBhdGg6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJvb3RLZXkgPSBkb3RQYXRoLnNwbGl0KCcuJylbMF07XG4gICAgY29uc3QgdmFsdWUgPSB0LmdldFZhbHVlKHJvb3RLZXkpO1xuICAgIGlmICghZG90UGF0aC5pbmNsdWRlcygnLicpKSByZXR1cm4gdmFsdWU7XG4gICAgcmV0dXJuIGxvZGFzaEdldCh2YWx1ZSwgZG90UGF0aC5zbGljZShyb290S2V5Lmxlbmd0aCArIDEpKTtcbiAgfSxcbiAgJGdldEFyZ3M6ICh0KSA9PiB0LmdldEFyZ3MuYmluZCh0KSxcbiAgJGdldEVudjogKHQpID0+IHQuZ2V0RW52LmJpbmQodCksXG4gICRkZWJ1ZzogKHQpID0+IHQuYWRkRGVidWdJbmZvLmJpbmQodCksXG4gICRsb2c6ICh0KSA9PiB0LmFkZERlYnVnTWVzc2FnZS5iaW5kKHQpLFxuICAkZXJyb3I6ICh0KSA9PiB0LmFkZEVycm9ySW5mby5iaW5kKHQpLFxuICAkbWV0cmljOiAodCkgPT4gdC5hZGRNZXRyaWMuYmluZCh0KSxcbiAgJGV2YWw6ICh0KSA9PiB0LmFkZEV2YWwuYmluZCh0KSxcbiAgJGF0dGFjaFNjb3BlUmVjb3JkZXI6ICh0KSA9PiB0LmF0dGFjaFNjb3BlUmVjb3JkZXIuYmluZCh0KSxcbiAgJGRldGFjaFNjb3BlUmVjb3JkZXI6ICh0KSA9PiB0LmRldGFjaFNjb3BlUmVjb3JkZXIuYmluZCh0KSxcbiAgJGdldFNjb3BlUmVjb3JkZXJzOiAodCkgPT4gdC5nZXRTY29wZVJlY29yZGVycy5iaW5kKHQpLFxuICAkYmF0Y2hBcnJheTogKHQpID0+IChrZXk6IHN0cmluZywgZm46IChhcnI6IHVua25vd25bXSkgPT4gdm9pZCkgPT4ge1xuICAgIC8vIE9uZSBnZXRWYWx1ZSDigJQgZmlyZXMgb25SZWFkIG9uY2VcbiAgICBjb25zdCBjdXJyZW50ID0gdC5nZXRWYWx1ZShrZXkpO1xuICAgIC8vIENsb25lIG9uY2Ug4oCUIERFRVAgKG9yIHN0YXJ0IGVtcHR5IGlmIG1pc3Npbmcvbm9uLWFycmF5KS4gVGhlIHJlYWQgaXNcbiAgICAvLyBCT1JST1dFRDogYmVmb3JlIHRoZSBzdGFnZSdzIGZpcnN0IHN0YWdlZCB3cml0ZSBpdCBpcyBjb21taXR0ZWQgc2hhcmVkXG4gICAgLy8gbWVtb3J5IGl0c2VsZiwgc28gYSBzaGFsbG93IGBbLi4uY3VycmVudF1gIGhhbmRlZCB0aGUgc3RhZ2UgdGhlXG4gICAgLy8gY29tbWl0dGVkIEVMRU1FTlRTIGFuZCBgYXJyWzBdLm4gPSA5YCBlZGl0ZWQgY29tbWl0dGVkIHN0YXRlIGluIHBsYWNlXG4gICAgLy8gd2l0aCBubyB0cmFjZSByb3cgKGFuZCB0aGUgbGF6eSBidWZmZXIncyBiYXNlIHdhcyB0aGVuIHRha2VuIEFGVEVSIHRoZVxuICAgIC8vIGVkaXQsIHNvIHRoZSBuZXQtY2hhbmdlIGZpbHRlciBzYXcgbm90aGluZykuIFN0YXRlIHZhbHVlcyBzdXJ2aXZlXG4gICAgLy8gYHN0cnVjdHVyZWRDbG9uZWAgYnkgY29udHJhY3QsIHNvIHRoZSB3b3JraW5nIGNvcHkgaXMgYSBmdWxsIGNvcHkuXG4gICAgY29uc3QgY2xvbmU6IHVua25vd25bXSA9IEFycmF5LmlzQXJyYXkoY3VycmVudCkgPyBzdHJ1Y3R1cmVkQ2xvbmUoY3VycmVudCkgOiBbXTtcbiAgICAvLyBVc2VyIGFwcGxpZXMgYWxsIG11dGF0aW9ucyB0byB0aGUgcGxhaW4gY2xvbmUg4oCUIG5vIFByb3h5LCBubyBwZXItbXV0YXRpb24gY29tbWl0XG4gICAgZm4oY2xvbmUpO1xuICAgIC8vIE9uZSBzZXRWYWx1ZSDigJQgZmlyZXMgb25Xcml0ZSBvbmNlIHdpdGggdGhlIGZpbmFsIGFycmF5LiBUaGUgc3RhZ2UgbWF5XG4gICAgLy8gaGF2ZSBwdXNoZWQgaGFuZGxlcyBpbnRvIHRoZSBjbG9uZSAoYGFyci5wdXNoKHNjb3BlLnRlbXBsYXRlKWApIOKAlCB0aGV5XG4gICAgLy8gYXJlIHZhbHVlcyBieSB0aGUgdGltZSB0aGUgYXJyYXkgaXMgc3RhZ2VkIChoYW5kbGVzLnRzKS5cbiAgICB0LnNldFZhbHVlKGtleSwgdW53cmFwSGFuZGxlcyhjbG9uZSkpO1xuICB9LFxuICAkYnJlYWs6IChfdCwgb3B0cykgPT4gKHJlYXNvbj86IHN0cmluZykgPT4ge1xuICAgIGlmICghb3B0cy5icmVha0ZuKSB0aHJvdyBuZXcgRXJyb3IoJyRicmVhaygpIGlzIG5vdCBhdmFpbGFibGUgb3V0c2lkZSBzdGFnZSBleGVjdXRpb24nKTtcbiAgICBvcHRzLmJyZWFrRm4ocmVhc29uKTtcbiAgfSxcbiAgLy8gT2JzZXJ2YWJpbGl0eSDigJQgRW1pdCBjaGFubmVsIChQaGFzZSAzKS4gUm91dGVzIHRvIFNjb3BlRmFjYWRlLmVtaXRFdmVudFxuICAvLyB3aGljaCBoYW5kbGVzIGZhc3QtcGF0aCwgZW5yaWNobWVudCwgcmVkYWN0aW9uLCBhbmQgZXJyb3IgaXNvbGF0aW9uLlxuICAkZW1pdDogKHQpID0+IHQuZW1pdEV2ZW50LmJpbmQodCksXG4gIC8vIERldGFjaCAoVDQpIOKAlCBmaXJlLWFuZC1mb3JnZXQgY2hpbGQgZmxvd2NoYXJ0cy4gRGVsZWdhdGVzIHRvIFNjb3BlRmFjYWRlXG4gIC8vIHdoaWNoIG1pbnRlZCByZWZJZHMgZnJvbSBydW50aW1lU3RhZ2VJZC5cbiAgJGRldGFjaEFuZEpvaW5MYXRlcjogKHQpID0+IHQuZGV0YWNoQW5kSm9pbkxhdGVyLmJpbmQodCksXG4gICRkZXRhY2hBbmRGb3JnZXQ6ICh0KSA9PiB0LmRldGFjaEFuZEZvcmdldC5iaW5kKHQpLFxuICAkdG9SYXc6ICh0KSA9PiAoKSA9PiB0LFxufTtcblxuLy8gLS0gR3VhcmQgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gVGhlc2UgbXVzdCBiZSBoYW5kbGVkIHRvIHByZXZlbnQgUHJveHkgZnJvbSBiZWluZyB0cmVhdGVkIGFzIGEgUHJvbWlzZSxcbi8vIGJyZWFraW5nIGluc3RhbmNlb2YgY2hlY2tzLCBvciBjb25mdXNpbmcgdGVzdCBtYXRjaGVycy5cblxuY29uc3QgR1VBUkRfUFJPUFM6IFJlY29yZDxzdHJpbmcgfCBzeW1ib2wsIHVua25vd24+ID0ge1xuICB0aGVuOiB1bmRlZmluZWQsIC8vIHByZXZlbnQgUHJvbWlzZSBkZXRlY3Rpb25cbiAgYXN5bW1ldHJpY01hdGNoOiB1bmRlZmluZWQsIC8vIHByZXZlbnQgdml0ZXN0L2plc3QgbWF0Y2hlciBjb25mdXNpb25cbiAgY29uc3RydWN0b3I6IE9iamVjdCwgLy8gc2FmZSBwcm90b3R5cGVcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106ICdUeXBlZFNjb3BlJyxcbn07XG5cbi8vIC0tIFNpbGVudCBleGlzdGVuY2UgY2hlY2sgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBEb2VzIHRoaXMga2V5IGV4aXN0IGluIHN0YXRlLCBhbnN3ZXJlZCB3aXRoIE5PIHRyYWNraW5nIHNpZGUgZWZmZWN0IGF0IGFsbD9cbiAqXG4gKiBgZ2V0U3RhdGVLZXlzKClgIGlzIHRoZSBvbmx5IGluc3BlY3Rpb24gYSBTY29wZUZhY2FkZSBhbnN3ZXJzIHdpdGhvdXQgcm91dGluZ1xuICogdGhyb3VnaCB0aGUgdHJhY2tlZCByZWFkIHBhdGguIGBoYXNLZXkoKWAgZGVsaWJlcmF0ZWx5IERPRVMgcm91dGUgdGhyb3VnaCBpdDpcbiAqIGAnaycgaW4gc2NvcGVgIGlzIGEgcmVhbCBxdWVzdGlvbiBhYm91dCBzdGF0ZSB0aGF0IGEgc3RhZ2UgY2FuIGJyYW5jaCBvbiwgc29cbiAqIGl0IHJlZ2lzdGVycyBhcyBhIHJlYWQg4oCUIHdoaWNoIGlzIGV4YWN0bHkgd2h5IHRoaXMgcHJvYmUgbXVzdCBub3QgdXNlIGl0LlxuICpcbiAqIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiB0aGUgdGFyZ2V0IG9mZmVycyBubyBzaWxlbnQgYW5zd2VyOyBjYWxsZXJzIG11c3RcbiAqIHRoZW4gY2hvb3NlIGRlbGliZXJhdGVseSByYXRoZXIgdGhhbiBhc3N1bWUuXG4gKi9cbmZ1bmN0aW9uIHNpbGVudGx5S25vd25LZXkodGFyZ2V0OiBSZWFjdGl2ZVRhcmdldCwga2V5OiBzdHJpbmcpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF0YXJnZXQuZ2V0U3RhdGVLZXlzKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gdGFyZ2V0LmdldFN0YXRlS2V5cygpLmluY2x1ZGVzKGtleSk7XG59XG5cbi8vIC0tIE11dGFibGUgc3RhdGUgcGVyIHByb3h5IGluc3RhbmNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuaW50ZXJmYWNlIFJlYWN0aXZlU3RhdGUge1xuICBicmVha0ZuPzogKHJlYXNvbj86IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIFRoZSB0b3AtbGV2ZWwga2V5J3MgY2hpbGQgcHJveHksIHZhbGlkYXRlZCBieSByYXcgaWRlbnRpdHkgKGBsaXZlVmlldy50cyDCtyBjYWNoZWRNZW1iZXJgKTsgYSBzaW5rIGRyb3BzIHRoZSBrZXkgb24gd3JpdGUuICovXG4gIGNoaWxkQ2FjaGU6IE1lbWJlckNhY2hlO1xufVxuXG4vLyAtLSBOZXN0ZWQgY2hpbGQgcHJveGllcyAoZm9yIGRlZXAgd3JpdGUgaW50ZXJjZXB0aW9uKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy9cbi8vIEJvdGggZmFjdG9yaWVzIGFyZSBPUkNIRVNUUkFUT1JTICg5LjIzLjEpOiByZWFkcyBhcmUgYGxpdmVWaWV3LnRzYCwgd3JpdGVzXG4vLyBhcmUgYHdyaXRlVHJhcHMudHNgIG92ZXIgYSBgcm9vdEtleVNpbmtgLCBhbmQgdGhlIE9ORSB0aGluZyBlYWNoIGRlY2lkZXNcbi8vIGl0c2VsZiBpcyB3aGF0IGEgY2hpbGQgbWVtYmVyIGJlY29tZXMg4oCUIHRoZSBjeWNsZSBwb2xpY3kuIEVhY2ggaG9sZHMgaXRzXG4vLyBvd24gcGVyLW1lbWJlciBwcm94eSBjYWNoZSAoOS4yMy4yLCBgbGl2ZVZpZXcudHMgwrcgY2FjaGVkTWVtYmVyYCkuXG4vL1xuLy8gQ3ljbGUgc2FmZXR5OiBhbiBpbW11dGFibGUgU2V0PG9iamVjdD4gb2YgYW5jZXN0b3Igb2JqZWN0cyBpcyBwYXNzZWQgZG93blxuLy8gZWFjaCBhY2Nlc3MgY2hhaW4uIEVhY2ggYnJhbmNoIGdldHMgaXRzIG93biBjb3B5IChuZXcgU2V0KHBhcmVudCkpIHNvXG4vLyBzY29wZS54LmZyaWVuZCBhbmQgc2NvcGUueC5jb3dvcmtlciBkb24ndCBwb2xsdXRlIGVhY2ggb3RoZXIncyB0cmFja2luZy5cbi8vIFdoZW4gYSBjaGlsZCB2YWx1ZSBpcyBhbHJlYWR5IGluIHRoZSBhbmNlc3RvciBzZXQsIHdlJ3ZlIGhpdCBhIGN5Y2xlLlxuLy8gQXQgdGhlIGN5Y2xlIGJyZWFrOiByZXR1cm4gYSB0ZXJtaW5hbCBwcm94eSB0aGF0IHRyYWNrcyB3cml0ZXMgKHNldCB0cmFwXG4vLyBzdGlsbCBidWlsZHMgcGF0aCArIGNvbW1pdHMgdGhyb3VnaCB0aGUgc2luaykgYnV0IGRvZXNuJ3QgcmVjdXJzZSByZWFkc1xuLy8gZnVydGhlci4gVGhlIHRlcm1pbmFsIGNoYWluIHNoYXJlcyBPTkUgbXV0YWJsZSBgdmlzaXRlZGAgc2V0OiBhIHZhbHVlIHNlZW5cbi8vIGFueXdoZXJlIHBhc3QgdGhlIGN5Y2xlIGVkZ2UgaXMgaGFuZGVkIGJhY2sgcmF3LlxuXG5mdW5jdGlvbiBjcmVhdGVUZXJtaW5hbFByb3h5KFxuICBvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICBzaW5rOiBXcml0ZVNpbmssXG4gIHNlZ21lbnRzOiByZWFkb25seSBzdHJpbmdbXSxcbiAgdmlzaXRlZDogU2V0PG9iamVjdD4gPSBuZXcgU2V0KCksXG4pOiB1bmtub3duIHtcbiAgdmlzaXRlZC5hZGQob2JqKTtcbiAgY29uc3QgbWVtYmVycyA9IG5ldyBNZW1iZXJDYWNoZSgpO1xuICBjb25zdCBsaXZlID0gKCkgPT4gbGl2ZU9iamVjdChvYmosIHNpbmsucmVhZEF0KHNlZ21lbnRzKSk7XG4gIGNvbnN0IGNoaWxkID0gKHZhbHVlOiB1bmtub3duLCBwYXRoOiBzdHJpbmdbXSk6IHVua25vd24gPT4ge1xuICAgIGlmICghc2hvdWxkV3JhcFdpdGhQcm94eSh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgICAvLyBBbiBhcnJheSBwYXN0IHRoZSBjeWNsZSBlZGdlIHN0aWxsIGdldHMgY29weS1vbi13cml0ZSBpbnRlcmNlcHRpb24g4oCUXG4gICAgLy8gaXQgY29tbWl0cyBhcyBhIGBzZXRgIG9mIHRoZSByb290IGtleSwgdGhlIHNhbWUgbGF3IGFzIHRoZSBuZXN0ZWQgcHJveHkuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gYXJyYXlQcm94eUF0KHNpbmssIHBhdGgpO1xuICAgIGlmICh2aXNpdGVkLmhhcyh2YWx1ZSBhcyBvYmplY3QpKSByZXR1cm4gdmFsdWU7XG4gICAgcmV0dXJuIGNyZWF0ZVRlcm1pbmFsUHJveHkodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHNpbmssIHBhdGgsIHZpc2l0ZWQpO1xuICB9O1xuICByZXR1cm4gcmVtZW1iZXJIYW5kbGUoXG4gICAgbmV3IFByb3h5KG9iaiwge1xuICAgICAgZ2V0OiBsaXZlR2V0VHJhcChsaXZlLCBzZWdtZW50cywgY2hpbGQsIG1lbWJlcnMpLFxuICAgICAgc2V0OiBzaW5rU2V0VHJhcChzaW5rLCBzZWdtZW50cyksXG4gICAgICBkZWxldGVQcm9wZXJ0eTogc2lua0RlbGV0ZVRyYXAoc2luaywgc2VnbWVudHMpLFxuICAgICAgLi4ubGl2ZUluc3BlY3Rpb25UcmFwcyhsaXZlKSxcbiAgICB9KSxcbiAgICBsaXZlLFxuICApO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVOZXN0ZWRQcm94eShcbiAgb2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgc2luazogV3JpdGVTaW5rLFxuICBzZWdtZW50czogcmVhZG9ubHkgc3RyaW5nW10sXG4gIGFuY2VzdG9yczogU2V0PG9iamVjdD4gPSBuZXcgU2V0KCksXG4pOiB1bmtub3duIHtcbiAgLy8gUmVhZHMgYXJlIExJVkUgKDkuMjIuMCk6IGEgaGVsZCBwcm94eSByZWFkcyBpdHMgb3duIHdyaXRlcywgYCd4JyBpbiBvYFxuICAvLyBhbmQgYE9iamVjdC5rZXlzKG8pYCBzZWUgdGhlbSwgYW5kIGBvLmIgPSBvLmEgKiAxMGAgdXNlcyB0aGUgbmV3IGBhYC5cbiAgLy8gVGhlIGNhcHR1cmVkIG9iamVjdCBhbnN3ZXJzIG9ubHkgd2hlbiB0aGUgcGF0aCBpcyBnb25lIOKAlCBzZWUgbGl2ZVZpZXcudHMuXG4gIGNvbnN0IG1lbWJlcnMgPSBuZXcgTWVtYmVyQ2FjaGUoKTtcbiAgY29uc3QgbGl2ZSA9ICgpID0+IGxpdmVPYmplY3Qob2JqLCBzaW5rLnJlYWRBdChzZWdtZW50cykpO1xuICBjb25zdCBjaGlsZCA9ICh2YWx1ZTogdW5rbm93biwgcGF0aDogc3RyaW5nW10pOiB1bmtub3duID0+IHtcbiAgICBpZiAoIXNob3VsZFdyYXBXaXRoUHJveHkodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgLy8gQW4gYXJyYXkgY29tbWl0cyBhcyBhIGBzZXRgIG9mIHRoZSBST09UIEtFWSAocmVhY3RpdmUvUkVBRE1FLm1kLCBsYXcgMylcbiAgICAvLyDigJQgdGhlIHNpbmsncyB2ZXJiLCB3aGF0ZXZlciBkZXB0aCB0aGUgYXJyYXkgc2l0cyBhdC5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBhcnJheVByb3h5QXQoc2luaywgcGF0aCk7XG4gICAgaWYgKGFuY2VzdG9ycy5oYXModmFsdWUgYXMgb2JqZWN0KSkgcmV0dXJuIGNyZWF0ZVRlcm1pbmFsUHJveHkodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHNpbmssIHBhdGgpO1xuICAgIHJldHVybiBjcmVhdGVOZXN0ZWRQcm94eSh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgc2luaywgcGF0aCwgbmV3IFNldChhbmNlc3RvcnMpLmFkZCh2YWx1ZSBhcyBvYmplY3QpKTtcbiAgfTtcbiAgcmV0dXJuIHJlbWVtYmVySGFuZGxlKFxuICAgIG5ldyBQcm94eShvYmosIHtcbiAgICAgIGdldDogbGl2ZUdldFRyYXAobGl2ZSwgc2VnbWVudHMsIGNoaWxkLCBtZW1iZXJzKSxcbiAgICAgIHNldDogc2lua1NldFRyYXAoc2luaywgc2VnbWVudHMpLFxuICAgICAgZGVsZXRlUHJvcGVydHk6IHNpbmtEZWxldGVUcmFwKHNpbmssIHNlZ21lbnRzKSxcbiAgICAgIC4uLmxpdmVJbnNwZWN0aW9uVHJhcHMobGl2ZSksXG4gICAgfSksXG4gICAgbGl2ZSxcbiAgKTtcbn1cblxuLy8gLS0gVG9wLWxldmVsIGxlYXZlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIGByZXNlcnZlZFJlYWRgIGFuc3dlcmVkIG5vdGhpbmc6IHRoZSBuYW1lIGlzIGEgc3RhdGUga2V5IGFuZCBtdXN0IGJlIHJlYWQgKHRyYWNrZWQpIGZyb20gdGhlIHRhcmdldC4gKi9cbmNvbnN0IFNUQVRFX0tFWTogdW5pcXVlIHN5bWJvbCA9IFN5bWJvbCgnc3RhdGUta2V5Jyk7XG5cbi8qKlxuICogV0hZOiB0aGUgbmFtZXMgdGhlIHNjb3BlIGFuc3dlcnMgSVRTRUxGIOKAlCBzeW1ib2xzLCB0aGUgZ3VhcmQgcHJvcGVydGllcyxcbiAqIE5vZGUncyBpbnNwZWN0IGhvb2ssIHRoZSBgJGAtbWV0aG9kcyBhbmQgdGhlIEpTT04gcHJvYmUg4oCUIG11c3QgbmV2ZXIgYmVjb21lXG4gKiB0cmFja2VkIHJlYWRzOyBldmVyeXRoaW5nIGVsc2UgKGEgbGlmZWN5Y2xlLWxvb2tpbmcgbmFtZSBzdWNoIGFzXG4gKiBgbm90aWZ5U3RhZ2VTdGFydGAgaW5jbHVkZWQpIGlzIGEgc3RhdGUga2V5IGFuZCBpcyBsZWZ0IHRvIHRoZSBjYWxsZXIuIFRoZVxuICogZW5naW5lIHJlYWNoZXMgdGhlIGZhY2FkZSB0aHJvdWdoIHRoZSByZWdpc3RlcmVkIHJ1bnRpbWUgcG9ydCwgbmV2ZXIgdGhyb3VnaFxuICogYSBuYW1lIG9uIHRoaXMgcHJveHkuXG4gKlxuICogVGhlIHByb2JlOiBgSlNPTi5zdHJpbmdpZnlgIGFza3MgRVZFUlkgdmFsdWUgZm9yIGEgYHRvSlNPTmAgbWV0aG9kLiBUaGF0XG4gKiBxdWVzdGlvbiBjb21lcyBmcm9tIHRoZSBydW50aW1lLCBub3QgdGhlIHN0YWdlIGF1dGhvciwgc28gaXQgbXVzdCBub3QgZW50ZXJcbiAqIHRoZSByZWFkIHNldC4gQSBzdGF0ZSBrZXkgbGl0ZXJhbGx5IGNhbGxlZCAndG9KU09OJyBpcyBsZWdhbDogd2hlbiBpdCBFWElTVFNcbiAqIHRoaXMgaXMgYSBnZW51aW5lIHJlYWQgYW5kIHN0YXlzIHRyYWNrZWQsIGFuZCB3aGVuIHRoZSB0YXJnZXQgY2Fubm90IGFuc3dlclxuICogc2lsZW50bHksIHRydXRoIHdpbnMgb3ZlciBub2lzZSDigJQgZmFsbCB0aHJvdWdoLlxuICovXG5mdW5jdGlvbiByZXNlcnZlZFJlYWQodGFyZ2V0OiBSZWFjdGl2ZVRhcmdldCwgc3RhdGU6IFJlYWN0aXZlU3RhdGUsIHByb3A6IHN0cmluZyB8IHN5bWJvbCk6IHVua25vd24ge1xuICBpZiAodHlwZW9mIHByb3AgPT09ICdzeW1ib2wnKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHVUFSRF9QUk9QUywgcHJvcCkpIHJldHVybiBHVUFSRF9QUk9QU1twcm9wXTtcbiAgICBpZiAocHJvcCA9PT0gU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKSkgcmV0dXJuICgpID0+IHRhcmdldC5nZXRWYWx1ZSgpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHVUFSRF9QUk9QUywgcHJvcCkpIHJldHVybiBHVUFSRF9QUk9QU1twcm9wXTtcbiAgaWYgKFNDT1BFX01FVEhPRF9OQU1FUy5oYXMocHJvcCkpIHJldHVybiBNRVRIT0RfUk9VVEVTW3Byb3BdPy4odGFyZ2V0LCBzdGF0ZSk7XG4gIGlmIChwcm9wID09PSAndG9KU09OJyAmJiBzaWxlbnRseUtub3duS2V5KHRhcmdldCwgcHJvcCkgPT09IGZhbHNlKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gU1RBVEVfS0VZO1xufVxuXG4vKipcbiAqIEEgd3JhcHBhYmxlIHN0YXRlIHZhbHVlIGJlY29tZXMgdGhlIGFycmF5IG9yIG5lc3RlZCBwcm94eSBmb3IgaXRzIGtleTtcbiAqIGFueXRoaW5nIGVsc2UgaXMgaGFuZGVkIGJhY2sgcmF3LiBgc2NvcGUuayA9PT0gc2NvcGUua2AgaG9sZHMgd2l0aGluIGFcbiAqIHN0YWdlIHRocm91Z2ggdGhlIHNhbWUgcGVyLW1lbWJlciBjYWNoZSBldmVyeSBvYmplY3QgcHJveHkgdXNlc1xuICogKGBsaXZlVmlldy50cyDCtyBjYWNoZWRNZW1iZXJgKTogYSB3cml0ZSB0byB0aGUga2V5IGRyb3BzIHRoZSBlbnRyeSAodGhlXG4gKiBzaW5rIGRvZXMgaXQpLCBhIGNvbW1pdCBzd2FwcyB0aGUgdmFsdWUgYW5kIHRoZSByZWYgY2hlY2sgbWlzc2VzIOKAlCBlaXRoZXJcbiAqIHdheSB0aGUgbmV4dCByZWFkIGJ1aWxkcyBhIGZyZXNoIHByb3h5IG92ZXIgdGhlIG5ldyB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gd3JhcFN0YXRlVmFsdWUoXG4gIHRhcmdldDogUmVhY3RpdmVUYXJnZXQsXG4gIHJlYWRTaWxlbnQ6IChrZXk6IHN0cmluZykgPT4gdW5rbm93bixcbiAgc3RhdGU6IFJlYWN0aXZlU3RhdGUsXG4gIGtleTogc3RyaW5nLFxuICB2YWx1ZTogdW5rbm93bixcbik6IHVua25vd24ge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gdmFsdWU7XG4gIGlmICghc2hvdWxkV3JhcFdpdGhQcm94eSh2YWx1ZSkpIHJldHVybiB2YWx1ZTsgLy8gRGF0ZSwgTWFwLCBjbGFzcyBpbnN0YW5jZSwgZnJvemVuIOKAplxuICByZXR1cm4gY2FjaGVkTWVtYmVyKFxuICAgIHN0YXRlLmNoaWxkQ2FjaGUsXG4gICAga2V5LFxuICAgIHZhbHVlLFxuICAgICgpID0+IHtcbiAgICAgIGNvbnN0IHNpbmsgPSByb290S2V5U2luayh0YXJnZXQsIHJlYWRTaWxlbnQsIGtleSwgc3RhdGUuY2hpbGRDYWNoZSk7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiBhcnJheVByb3h5QXQoc2luaywgW10pO1xuICAgICAgcmV0dXJuIGNyZWF0ZU5lc3RlZFByb3h5KHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBzaW5rLCBbXSwgbmV3IFNldDxvYmplY3Q+KFt2YWx1ZV0pKTtcbiAgICB9LFxuICAgIFtdLFxuICApO1xufVxuXG4vKiogV0hZOiBhIGAkYC1uYW1lIGNhbiBuZXZlciBiZSBhIHN0YXRlIGtleSDigJQgdGhlIHdyaXRlIGlzIHJlZnVzZWQsIG5vdCBzaGFkb3dlZDsgZXZlcnkgb3RoZXIgYXNzaWdubWVudFxuICogIHN0b3JlcyB0aGUgdmFsdWUgQVMgQVNTSUdORUQgKGEgaGFuZGxlIGJlY29tZXMgd2hhdCBpdCBzdGFuZHMgZm9yLCBgaGFuZGxlcy50c2A7IHRoZSBidWZmZXIgZGV0YWNoZXMgYXRcbiAqICBjb21taXQg4oCUIHRoZSBzYW1lIGxhdyBhcyBgJHNldFZhbHVlYCwgOS4yNC4wKSBhbmQgZHJvcHMgdGhlIGtleSdzIGNhY2hlZCBwcm94eS4gKi9cbmZ1bmN0aW9uIGFzc2lnblN0YXRlS2V5KHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIHN0YXRlOiBSZWFjdGl2ZVN0YXRlLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgaWYgKFNDT1BFX01FVEhPRF9OQU1FUy5oYXMoa2V5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBDYW5ub3Qgc2V0IHN0YXRlIGtleSBcIiR7a2V5fVwiIC0tIGl0IGNvbmZsaWN0cyB3aXRoIGEgcmVzZXJ2ZWQgVHlwZWRTY29wZSBtZXRob2QuIFJlbmFtZSB0aGUgc3RhdGUga2V5IHRvIGF2b2lkICQtcHJlZml4ZWQgbmFtZXMuYCxcbiAgICApO1xuICB9XG4gIHRhcmdldC5zZXRWYWx1ZShrZXksIHVud3JhcEhhbmRsZXModmFsdWUpKTtcbiAgc3RhdGUuY2hpbGRDYWNoZS5kZWxldGUoa2V5KTtcbn1cblxuLyoqIERvZXMgdGhlIGtleSBleGlzdCDigJQgYW5zd2VyZWQgd2l0aG91dCBhIHRyYWNrZWQgcmVhZCB3aGVyZXZlciB0aGUgdGFyZ2V0IGNhbjsgYGdldFZhbHVlYCBpcyB0aGUgbGFzdCByZXNvcnQuICovXG5mdW5jdGlvbiBrbm93bktleSh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAodGFyZ2V0Lmhhc0tleSkgcmV0dXJuIHRhcmdldC5oYXNLZXkoa2V5KTtcbiAgaWYgKHRhcmdldC5nZXRTdGF0ZUtleXMpIHJldHVybiB0YXJnZXQuZ2V0U3RhdGVLZXlzKCkuaW5jbHVkZXMoa2V5KTtcbiAgcmV0dXJuIHRhcmdldC5nZXRWYWx1ZShrZXkpICE9PSB1bmRlZmluZWQ7IC8vIGZhbGxiYWNrOiBmaXJlcyBvblJlYWQgKGFjY2VwdGFibGUgZGVncmFkYXRpb24pXG59XG5cbi8qKiBFdmVyeSBzdGF0ZSBrZXkg4oCUIHNpbGVudGx5IHdoZXJlIHRoZSB0YXJnZXQgY2FuLCBlbHNlIGZyb20gYSB3aG9sZS1zdGF0ZSByZWFkLiAqL1xuZnVuY3Rpb24gc3RhdGVLZXlzKHRhcmdldDogUmVhY3RpdmVUYXJnZXQpOiBzdHJpbmdbXSB7XG4gIGlmICh0YXJnZXQuZ2V0U3RhdGVLZXlzKSByZXR1cm4gdGFyZ2V0LmdldFN0YXRlS2V5cygpO1xuICBjb25zdCBzbmFwc2hvdCA9IHRhcmdldC5nZXRWYWx1ZSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICByZXR1cm4gc25hcHNob3QgJiYgdHlwZW9mIHNuYXBzaG90ID09PSAnb2JqZWN0JyA/IE9iamVjdC5rZXlzKHNuYXBzaG90KSA6IFtdO1xufVxuXG4vLyAtLSBUb3AtbGV2ZWwgcHJveHkgKHRoZSBtYWluIFR5cGVkU2NvcGUpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQ3JlYXRlcyBhIFR5cGVkU2NvcGU8VD4gcHJveHkgd3JhcHBpbmcgYSBSZWFjdGl2ZVRhcmdldC5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIHVuZGVybHlpbmcgc2NvcGUgKFNjb3BlRmFjYWRlIG9yIGFueSBSZWFjdGl2ZVRhcmdldClcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiAoYnJlYWtQaXBlbGluZSBpbmplY3Rpb24pXG4gKiBAcmV0dXJucyBBIFByb3h5IHdpdGggdHlwZWQgcHJvcGVydHkgYWNjZXNzIGFuZCAkLXByZWZpeGVkIG1ldGhvZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVR5cGVkU2NvcGU8VCBleHRlbmRzIG9iamVjdD4odGFyZ2V0OiBSZWFjdGl2ZVRhcmdldCwgb3B0aW9ucz86IFJlYWN0aXZlT3B0aW9ucyk6IFR5cGVkU2NvcGU8VD4ge1xuICBjb25zdCBzdGF0ZTogUmVhY3RpdmVTdGF0ZSA9IHsgYnJlYWtGbjogb3B0aW9ucz8uYnJlYWtQaXBlbGluZSwgY2hpbGRDYWNoZTogbmV3IE1lbWJlckNhY2hlKCkgfTtcbiAgLy8gQmluZCB0aGUgc2lsZW50IHJlYWQgb25jZSDigJQgdGhlIG5lc3RlZC9hcnJheSBwcm94aWVzIHJlc29sdmUgdGhlaXIgbGl2ZSB2aWV3IHRocm91Z2ggaXQuXG4gIGNvbnN0IHJlYWRTaWxlbnQgPSAodGFyZ2V0LmdldFZhbHVlU2lsZW50ID8/IHRhcmdldC5nZXRWYWx1ZSkuYmluZCh0YXJnZXQpO1xuXG4gIGNvbnN0IHByb3h5ID0gbmV3IFByb3h5KHRhcmdldCBhcyB1bmtub3duIGFzIFR5cGVkU2NvcGU8VD4sIHtcbiAgICBnZXQoX3Byb3h5VGFyZ2V0LCBwcm9wKSB7XG4gICAgICBjb25zdCBhbnN3ZXJlZCA9IHJlc2VydmVkUmVhZCh0YXJnZXQsIHN0YXRlLCBwcm9wKTtcbiAgICAgIGlmIChhbnN3ZXJlZCAhPT0gU1RBVEVfS0VZKSByZXR1cm4gYW5zd2VyZWQ7XG4gICAgICAvLyBBIHN0YXRlIGtleTogT05FIHRyYWNrZWQgcmVhZCAoZmlyZXMgb25SZWFkIG9uY2UpLCB0aGVuIHRoZSB3cmFwcGVyLlxuICAgICAgcmV0dXJuIHdyYXBTdGF0ZVZhbHVlKHRhcmdldCwgcmVhZFNpbGVudCwgc3RhdGUsIHByb3AgYXMgc3RyaW5nLCB0YXJnZXQuZ2V0VmFsdWUocHJvcCBhcyBzdHJpbmcpKTtcbiAgICB9LFxuICAgIHNldChfcHJveHlUYXJnZXQsIHByb3AsIHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3AgPT09ICdzdHJpbmcnKSBhc3NpZ25TdGF0ZUtleSh0YXJnZXQsIHN0YXRlLCBwcm9wLCB2YWx1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGRlbGV0ZVByb3BlcnR5KF9wcm94eVRhcmdldCwgcHJvcCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykgcmV0dXJuIHRydWU7XG4gICAgICB0YXJnZXQuZGVsZXRlVmFsdWUocHJvcCk7XG4gICAgICBzdGF0ZS5jaGlsZENhY2hlLmRlbGV0ZShwcm9wKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgaGFzKF9wcm94eVRhcmdldCwgcHJvcCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3ltYm9sJykgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHVUFSRF9QUk9QUywgcHJvcCk7XG4gICAgICByZXR1cm4gU0NPUEVfTUVUSE9EX05BTUVTLmhhcyhwcm9wKSB8fCBrbm93bktleSh0YXJnZXQsIHByb3ApO1xuICAgIH0sXG4gICAgb3duS2V5czogKCkgPT4gc3RhdGVLZXlzKHRhcmdldCksXG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKF9wcm94eVRhcmdldCwgcHJvcCkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJyB8fCBTQ09QRV9NRVRIT0RfTkFNRVMuaGFzKHByb3ApKSByZXR1cm4gdW5kZWZpbmVkOyAvLyAkLW1ldGhvZHMgYXJlIG5vbi1lbnVtZXJhYmxlXG4gICAgICBpZiAoIWtub3duS2V5KHRhcmdldCwgcHJvcCkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4geyBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH07IC8vIHRoZSB2YWx1ZSBpcyBmZXRjaGVkIHZpYSB0aGUgZ2V0IHRyYXBcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIHJlZ2lzdGVyU2NvcGVSdW50aW1lKHByb3h5LCB7XG4gICAgdGFyZ2V0LFxuICAgIGhhbmRsZXNBc3NpZ25tZW50czogdHJ1ZSxcbiAgICBzZXRCcmVhazogKGZuKSA9PiB7XG4gICAgICBzdGF0ZS5icmVha0ZuID0gZm47XG4gICAgfSxcbiAgfSk7XG59XG4iXX0=
@@ -12,7 +12,7 @@
12
12
  * traps are written once over it (9.23.1 — the 9.22.0 stale-read bug was
13
13
  * fixed in one copy of these traps and then found again in the other two).
14
14
  */
15
- import { nativeGet } from '../memory/pathOps.js';
15
+ import { nativeGet } from 'foottrace/paths';
16
16
  import { unwrapHandles } from './handles.js';
17
17
  import { buildNestedPatch } from './pathBuilder.js';
18
18
  import { deleteInPath, setInPath } from './structuralWrite.js';
@@ -131,4 +131,4 @@ export function sinkDeleteTrap(sink, segments) {
131
131
  return true;
132
132
  };
133
133
  }
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVUcmFwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvd3JpdGVUcmFwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQXNCL0Q7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsTUFBcUIsRUFDckIsVUFBb0MsRUFDcEMsT0FBZSxFQUNmLEtBQWtDO0lBRWxDLE9BQU8sSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELGtGQUFrRjtBQUNsRixNQUFNLFdBQVc7SUFFSTtJQUNBO0lBQ0E7SUFDQTtJQUpuQixZQUNtQixNQUFxQixFQUNyQixVQUFvQyxFQUNwQyxPQUFlLEVBQ2YsS0FBa0M7UUFIbEMsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixlQUFVLEdBQVYsVUFBVSxDQUEwQjtRQUNwQyxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsVUFBSyxHQUFMLEtBQUssQ0FBNkI7SUFDbEQsQ0FBQztJQUVKLG1IQUFtSDtJQUNuSCxNQUFNLENBQUMsSUFBdUI7UUFDNUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFB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O1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiByZWFjdGl2ZS93cml0ZVRyYXBzIOKAlCB3aGVyZSBhIHByb3h5J3Mgd3JpdGVzIExBTkQsIGFuZCB0aGUgdHdvIHRyYXBzIHRoYXRcbiAqIHNlbmQgdGhlbSB0aGVyZS5cbiAqXG4gKiBFdmVyeSBvYmplY3QgcHJveHkgaW4gdGhpcyBmb2xkZXIgKG5lc3RlZCwgdGVybWluYWwsIGVsZW1lbnQpIGludGVyY2VwdHNcbiAqIHRoZSBzYW1lIHRocmVlIHRoaW5ncyDigJQgYSBwcm9wZXJ0eSBzZXQsIGEgcHJvcGVydHkgZGVsZXRlLCBhbmQgYW4gYXJyYXlcbiAqIG11dGF0aW9uIHNvbWV3aGVyZSBiZWxvdyBpdCDigJQgYW5kIGRpZmZlcnMgb25seSBpbiB3aGVyZSB0aGUgd3JpdGUgZ29lczpcbiAqIGEgbmVzdGVkL3Rlcm1pbmFsIHByb3h5IGNvbW1pdHMgdW5kZXIgYSBUT1AtTEVWRUwgS0VZIChhbiBvYmplY3Qgd3JpdGUgYXNcbiAqIGBtZXJnZWAgb2YgYSBwYXRjaCwgYW4gYXJyYXkgd3JpdGUgb3IgYSBkZWxldGUgYXMgYHNldGAgb2YgdGhlIHJlYnVpbHRcbiAqIHJvb3QpOyBhbiBlbGVtZW50IHByb3h5IGNvbW1pdHMgdGhlIFdIT0xFIE9XTklORyBBUlJBWSBiYWNrIHRocm91Z2ggdGhlXG4gKiBhcnJheSBwcm94eSdzIG93biBjYWxsYmFjay4gVGhhdCBkaWZmZXJlbmNlIGlzIGEge0BsaW5rIFdyaXRlU2lua307IHRoZVxuICogdHJhcHMgYXJlIHdyaXR0ZW4gb25jZSBvdmVyIGl0ICg5LjIzLjEg4oCUIHRoZSA5LjIyLjAgc3RhbGUtcmVhZCBidWcgd2FzXG4gKiBmaXhlZCBpbiBvbmUgY29weSBvZiB0aGVzZSB0cmFwcyBhbmQgdGhlbiBmb3VuZCBhZ2FpbiBpbiB0aGUgb3RoZXIgdHdvKS5cbiAqL1xuXG5pbXBvcnQgeyBuYXRpdmVHZXQgfSBmcm9tICcuLi9tZW1vcnkvcGF0aE9wcy5qcyc7XG5pbXBvcnQgeyB1bndyYXBIYW5kbGVzIH0gZnJvbSAnLi9oYW5kbGVzLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtYmVyQ2FjaGUgfSBmcm9tICcuL2xpdmVWaWV3LmpzJztcbmltcG9ydCB7IGJ1aWxkTmVzdGVkUGF0Y2ggfSBmcm9tICcuL3BhdGhCdWlsZGVyLmpzJztcbmltcG9ydCB7IGRlbGV0ZUluUGF0aCwgc2V0SW5QYXRoIH0gZnJvbSAnLi9zdHJ1Y3R1cmFsV3JpdGUuanMnO1xuXG4vKipcbiAqIFRoZSBzZWFtIGJldHdlZW4gYSBwcm94eSBhbmQgc3RhdGUuIGBwYXRoYCBpcyBtZWFzdXJlZCBmcm9tIHRoZSBzaW5rJ3NcbiAqIHJvb3Qg4oCUIHRoZSBrZXkncyB2YWx1ZSBmb3Ige0BsaW5rIHJvb3RLZXlTaW5rfSwgdGhlIGVsZW1lbnQgZm9yXG4gKiB7QGxpbmsgZWxlbWVudFNpbmt9OyBgW11gIGlzIHRoZSByb290IGl0c2VsZi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXcml0ZVNpbmsge1xuICAvKiogVGhlIHZhbHVlIGF0IGBwYXRoYCwgYXMgaXQgc3RhbmRzIE5PVyAocmVhZC15b3VyLXdyaXRlczsgbmV2ZXIgYSB0cmFja2VkIHJlYWQpLiAqL1xuICByZWFkQXQocGF0aDogcmVhZG9ubHkgc3RyaW5nW10pOiB1bmtub3duO1xuICAvKiogUHV0IGFuIGFscmVhZHktdW53cmFwcGVkIGB2YWx1ZWAgYXQgYHBhdGhgLiBUaGUgc2luayBjaG9vc2VzIHRoZSB2ZXJiLiAqL1xuICBwdXQocGF0aDogcmVhZG9ubHkgc3RyaW5nW10sIHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgLyoqIFJlbW92ZSB0aGUga2V5IGF0IGBwYXRoYC4gKi9cbiAgcmVtb3ZlKHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZDtcbn1cblxuLyoqIFRoZSB0d28gd2F5cyBhIHZhbHVlIHJlYWNoZXMgYSBzdGF0ZSBrZXk6IHdoYXQgdGhlIHNpbmsgd3JpdGVzIHRocm91Z2guICovXG5leHBvcnQgaW50ZXJmYWNlIFJvb3RLZXlUYXJnZXQge1xuICBzZXRWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuICB1cGRhdGVWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xufVxuXG4vKipcbiAqIFdIWTogYSB3cml0ZSBiZWxvdyBhIHRvcC1sZXZlbCBrZXkgaGFzIFRXTyB2ZXJicyAocmVhY3RpdmUvUkVBRE1FLm1kLCBsYXdcbiAqIDMpIOKAlCBhbiBvYmplY3QgbGVhZiBpcyBhIGBtZXJnZWAgb2YgYSBuZXN0ZWQgcGF0Y2gsIGFuIGFycmF5IGxlYWYgb3IgYVxuICogZGVsZXRlIHJlYnVpbGRzIHRoZSByb290IGltbXV0YWJseSBhbmQgY29tbWl0cyBhIGBzZXRgIG9mIHRoZSBrZXkuIE9ubHkgdGhlXG4gKiBzaW5rIGtub3dzIHRoYXQ7IHRoZSB0cmFwcyBkbyBub3QuIEV2ZXJ5IHdyaXRlIGRyb3BzIHRoZSBrZXkncyBjYWNoZWQgY2hpbGRcbiAqIHByb3h5IChgY2FjaGVgKSwgc28gdGhlIG5leHQgcmVhZCBpcyBidWlsdCBvdmVyIHRoZSBuZXcgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb290S2V5U2luayhcbiAgdGFyZ2V0OiBSb290S2V5VGFyZ2V0LFxuICByZWFkU2lsZW50OiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24sXG4gIHJvb3RLZXk6IHN0cmluZyxcbiAgY2FjaGU6IFBpY2s8TWVtYmVyQ2FjaGUsICdkZWxldGUnPixcbik6IFdyaXRlU2luayB7XG4gIHJldHVybiBuZXcgUm9vdEtleVNpbmsodGFyZ2V0LCByZWFkU2lsZW50LCByb290S2V5LCBjYWNoZSk7XG59XG5cbi8qKiBPbmUgYWxsb2NhdGlvbiBwZXIgdG9wLWxldmVsIHJlYWQgbWlzcyAodGhlIG1ldGhvZHMgbGl2ZSBvbiB0aGUgcHJvdG90eXBlKS4gKi9cbmNsYXNzIFJvb3RLZXlTaW5rIGltcGxlbWVudHMgV3JpdGVTaW5rIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXQ6IFJvb3RLZXlUYXJnZXQsXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWFkU2lsZW50OiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24sXG4gICAgcHJpdmF0ZSByZWFkb25seSByb290S2V5OiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYWNoZTogUGljazxNZW1iZXJDYWNoZSwgJ2RlbGV0ZSc+LFxuICApIHt9XG5cbiAgLyoqIEFuIGVtcHR5IHBhdGggaXMgdGhlIGtleSdzIG93biB2YWx1ZSDigJQgYG5hdGl2ZUdldCh2LCBbXSlgIHdvdWxkIHJldHVybiBpdCB1bmNoYW5nZWQsIHNvIHRoZSB3YWxrIGlzIHNraXBwZWQuICovXG4gIHJlYWRBdChwYXRoOiByZWFkb25seSBzdHJpbmdbXSk6IHVua25vd24ge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJlYWRTaWxlbnQodGhpcy5yb290S2V5KTtcbiAgICByZXR1cm4gcGF0aC5sZW5ndGggPT09IDAgPyByb290IDogbmF0aXZlR2V0KHJvb3QsIHBhdGggYXMgc3RyaW5nW10pO1xuICB9XG5cbiAgcHV0KHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHRoaXMudGFyZ2V0LnVwZGF0ZVZhbHVlKHRoaXMucm9vdEtleSwgYnVpbGROZXN0ZWRQYXRjaChwYXRoIGFzIHN0cmluZ1tdLCB2YWx1ZSkpO1xuICAgIGVsc2UgdGhpcy50YXJnZXQuc2V0VmFsdWUodGhpcy5yb290S2V5LCBwYXRoLmxlbmd0aCA9PT0gMCA/IHZhbHVlIDogc2V0SW5QYXRoKHRoaXMucmVhZEF0KFtdKSwgcGF0aCwgdmFsdWUpKTtcbiAgICB0aGlzLmNhY2hlLmRlbGV0ZSh0aGlzLnJvb3RLZXkpO1xuICB9XG5cbiAgcmVtb3ZlKHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy50YXJnZXQuc2V0VmFsdWUodGhpcy5yb290S2V5LCBkZWxldGVJblBhdGgodGhpcy5yZWFkQXQoW10pLCBwYXRoKSk7XG4gICAgdGhpcy5jYWNoZS5kZWxldGUodGhpcy5yb290S2V5KTtcbiAgfVxufVxuXG4vKipcbiAqIFdIWTogYSB3cml0ZSBpbnNpZGUgYW4gYXJyYXkgZWxlbWVudCBpcyBhbiBhcnJheSB3cml0ZSDigJQgaXQgcmVidWlsZHMgdGhlXG4gKiBvd25pbmcgYXJyYXkgaW1tdXRhYmx5IGFuZCBoYW5kcyB0aGUgV0hPTEUgbmV3IGFycmF5IHRvIHRoZSBhcnJheSBwcm94eSdzXG4gKiBjb21taXQsIHRoZSBmdW5uZWwgYHB1c2hgIGFscmVhZHkgdXNlcy4gYHBhdGhgIGlzIG1lYXN1cmVkIGZyb20gdGhlXG4gKiBlbGVtZW50OyBgW11gIGlzIHRoZSBlbGVtZW50IHNsb3QgaXRzZWxmLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZWxlbWVudFNpbmsoZ2V0Q3VycmVudDogKCkgPT4gdW5rbm93bltdLCBjb21taXQ6IChuZXh0OiB1bmtub3duW10pID0+IHZvaWQsIGluZGV4OiBudW1iZXIpOiBXcml0ZVNpbmsge1xuICByZXR1cm4gbmV3IEVsZW1lbnRTaW5rKGdldEN1cnJlbnQsIGNvbW1pdCwgaW5kZXgpO1xufVxuXG4vKiogT25lIGFsbG9jYXRpb24gcGVyIGVsZW1lbnQgcHJveHkgKHRoZSBtZXRob2RzIGxpdmUgb24gdGhlIHByb3RvdHlwZSkg4oCUIGEgMTBrLWVsZW1lbnQgbG9vcCBidWlsZHMgMTBrIG9mIHRoZXNlLiAqL1xuY2xhc3MgRWxlbWVudFNpbmsgaW1wbGVtZW50cyBXcml0ZVNpbmsge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdldEN1cnJlbnQ6ICgpID0+IHVua25vd25bXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbW1pdDogKG5leHQ6IHVua25vd25bXSkgPT4gdm9pZCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluZGV4OiBudW1iZXIsXG4gICkge31cblxuICByZWFkQXQocGF0aDogcmVhZG9ubHkgc3RyaW5nW10pOiB1bmtub3duIHtcbiAgICByZXR1cm4gcmVhZEluRWxlbWVudCh0aGlzLmdldEN1cnJlbnQsIHRoaXMuaW5kZXgsIHBhdGgpO1xuICB9XG5cbiAgcHV0KHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIHJlcGxhY2VJbkVsZW1lbnQodGhpcy5nZXRDdXJyZW50LCB0aGlzLmNvbW1pdCwgdGhpcy5pbmRleCwgcGF0aCwgdmFsdWUpO1xuICB9XG5cbiAgcmVtb3ZlKHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgcmVtb3ZlSW5FbGVtZW50KHRoaXMuZ2V0Q3VycmVudCwgdGhpcy5jb21taXQsIHRoaXMuaW5kZXgsIHBhdGgpO1xuICB9XG59XG5cbi8qKiBUaGUgdmFsdWUgYXQgYHBhdGhgIGluc2lkZSBlbGVtZW50IGBpbmRleGAsIGFzIGl0IHN0YW5kcyBOT1cgKHJlYWQteW91ci13cml0ZXMpLiAqL1xuZnVuY3Rpb24gcmVhZEluRWxlbWVudChnZXRDdXJyZW50OiAoKSA9PiB1bmtub3duW10sIGluZGV4OiBudW1iZXIsIHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdW5rbm93biB7XG4gIGNvbnN0IGVsZW1lbnQgPSBnZXRDdXJyZW50KClbaW5kZXhdO1xuICByZXR1cm4gcGF0aC5sZW5ndGggPT09IDAgPyBlbGVtZW50IDogbmF0aXZlR2V0KGVsZW1lbnQsIHBhdGggYXMgc3RyaW5nW10pO1xufVxuXG4vKiogQSBjb3B5IG9mIHRoZSBhcnJheSB3aXRoIGB2YWx1ZWAgYXQgYHBhdGhgIGluc2lkZSBlbGVtZW50IGBpbmRleGA7IGEgZ29uZSBlbGVtZW50IGhhcyBub3RoaW5nIHRvIHdyaXRlIGludG8uICovXG5mdW5jdGlvbiByZXBsYWNlSW5FbGVtZW50KFxuICBnZXRDdXJyZW50OiAoKSA9PiB1bmtub3duW10sXG4gIGNvbW1pdDogKG5leHQ6IHVua25vd25bXSkgPT4gdm9pZCxcbiAgaW5kZXg6IG51bWJlcixcbiAgcGF0aDogcmVhZG9ubHkgc3RyaW5nW10sXG4gIHZhbHVlOiB1bmtub3duLFxuKTogdm9pZCB7XG4gIGNvbnN0IG5leHQgPSBbLi4uZ2V0Q3VycmVudCgpXTtcbiAgaWYgKGluZGV4ID49IG5leHQubGVuZ3RoKSByZXR1cm47XG4gIG5leHRbaW5kZXhdID0gcGF0aC5sZW5ndGggPT09IDAgPyB2YWx1ZSA6IHNldEluUGF0aChuZXh0W2luZGV4XSwgcGF0aCwgdmFsdWUpO1xuICBjb21taXQobmV4dCk7XG59XG5cbi8qKiBBIGNvcHkgb2YgdGhlIGFycmF5IHdpdGggdGhlIGtleSBhdCBgcGF0aGAgaW5zaWRlIGVsZW1lbnQgYGluZGV4YCByZW1vdmVkLiAqL1xuZnVuY3Rpb24gcmVtb3ZlSW5FbGVtZW50KFxuICBnZXRDdXJyZW50OiAoKSA9PiB1bmtub3duW10sXG4gIGNvbW1pdDogKG5leHQ6IHVua25vd25bXSkgPT4gdm9pZCxcbiAgaW5kZXg6IG51bWJlcixcbiAgcGF0aDogcmVhZG9ubHkgc3RyaW5nW10sXG4pOiB2b2lkIHtcbiAgY29uc3QgbmV4dCA9IFsuLi5nZXRDdXJyZW50KCldO1xuICBpZiAoaW5kZXggPj0gbmV4dC5sZW5ndGgpIHJldHVybjtcbiAgbmV4dFtpbmRleF0gPSBkZWxldGVJblBhdGgobmV4dFtpbmRleF0sIHBhdGgpO1xuICBjb21taXQobmV4dCk7XG59XG5cbi8qKlxuICogV0hZIG9uZSBzZXQgdHJhcDogdGhlIGFzc2lnbmVkIHZhbHVlIGlzIHRha2VuIGFzIGEgVkFMVUUgaGVyZSAoYSBoYW5kbGVcbiAqIGJlY29tZXMgd2hhdCBpdCBzdGFuZHMgZm9yLCBgaGFuZGxlcy50c2A7IG5vdGhpbmcgZWxzZSBpcyBjb3BpZWQg4oCUIHRoZVxuICogYnVmZmVyIGRldGFjaGVzIGF0IGNvbW1pdCkgYW5kIGhhbmRlZCB0byB0aGUgc2luayBhdCB0aGUgcHJveHkncyBwYXRoIHBsdXNcbiAqIHRoZSBrZXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW5rU2V0VHJhcChzaW5rOiBXcml0ZVNpbmssIHNlZ21lbnRzOiByZWFkb25seSBzdHJpbmdbXSk6IFByb3h5SGFuZGxlcjxvYmplY3Q+WydzZXQnXSB7XG4gIHJldHVybiAoX3RhcmdldCwgcHJvcCwgdmFsdWUpID0+IHtcbiAgICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSByZXR1cm4gdHJ1ZTtcbiAgICBzaW5rLnB1dChbLi4uc2VnbWVudHMsIHByb3BdLCB1bndyYXBIYW5kbGVzKHZhbHVlKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59XG5cbi8qKlxuICogV0hZIG9uZSBkZWxldGUgdHJhcDogYG1lcmdlYCBjYW5ub3QgZXhwcmVzcyBhIHJlbW92YWwgKGEgcGF0Y2ggb2ZcbiAqIGB1bmRlZmluZWRgIHJlYWRzIGFzIGFic2VudCksIHNvIGEgZGVsZXRlIGFsd2F5cyByZWJ1aWxkcyB0aHJvdWdoIHRoZSBzaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lua0RlbGV0ZVRyYXAoc2luazogV3JpdGVTaW5rLCBzZWdtZW50czogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm94eUhhbmRsZXI8b2JqZWN0PlsnZGVsZXRlUHJvcGVydHknXSB7XG4gIHJldHVybiAoX3RhcmdldCwgcHJvcCkgPT4ge1xuICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHJldHVybiB0cnVlO1xuICAgIHNpbmsucmVtb3ZlKFsuLi5zZWdtZW50cywgcHJvcF0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xufVxuIl19
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVUcmFwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvd3JpdGVUcmFwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQXNCL0Q7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsTUFBcUIsRUFDckIsVUFBb0MsRUFDcEMsT0FBZSxFQUNmLEtBQWtDO0lBRWxDLE9BQU8sSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELGtGQUFrRjtBQUNsRixNQUFNLFdBQVc7SUFFSTtJQUNBO0lBQ0E7SUFDQTtJQUpuQixZQUNtQixNQUFxQixFQUNyQixVQUFvQyxFQUNwQyxPQUFlLEVBQ2YsS0FBa0M7UUFIbEMsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixlQUFVLEdBQVYsVUFBVSxDQUEwQjtRQUNwQyxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsVUFBSyxHQUFMLEtBQUssQ0FBNkI7SUFDbEQsQ0FBQztJQUVKLG1IQUFtSDtJQUNuSCxNQUFNLENBQUMsSUFBdUI7UUFDNUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFB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O1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiByZWFjdGl2ZS93cml0ZVRyYXBzIOKAlCB3aGVyZSBhIHByb3h5J3Mgd3JpdGVzIExBTkQsIGFuZCB0aGUgdHdvIHRyYXBzIHRoYXRcbiAqIHNlbmQgdGhlbSB0aGVyZS5cbiAqXG4gKiBFdmVyeSBvYmplY3QgcHJveHkgaW4gdGhpcyBmb2xkZXIgKG5lc3RlZCwgdGVybWluYWwsIGVsZW1lbnQpIGludGVyY2VwdHNcbiAqIHRoZSBzYW1lIHRocmVlIHRoaW5ncyDigJQgYSBwcm9wZXJ0eSBzZXQsIGEgcHJvcGVydHkgZGVsZXRlLCBhbmQgYW4gYXJyYXlcbiAqIG11dGF0aW9uIHNvbWV3aGVyZSBiZWxvdyBpdCDigJQgYW5kIGRpZmZlcnMgb25seSBpbiB3aGVyZSB0aGUgd3JpdGUgZ29lczpcbiAqIGEgbmVzdGVkL3Rlcm1pbmFsIHByb3h5IGNvbW1pdHMgdW5kZXIgYSBUT1AtTEVWRUwgS0VZIChhbiBvYmplY3Qgd3JpdGUgYXNcbiAqIGBtZXJnZWAgb2YgYSBwYXRjaCwgYW4gYXJyYXkgd3JpdGUgb3IgYSBkZWxldGUgYXMgYHNldGAgb2YgdGhlIHJlYnVpbHRcbiAqIHJvb3QpOyBhbiBlbGVtZW50IHByb3h5IGNvbW1pdHMgdGhlIFdIT0xFIE9XTklORyBBUlJBWSBiYWNrIHRocm91Z2ggdGhlXG4gKiBhcnJheSBwcm94eSdzIG93biBjYWxsYmFjay4gVGhhdCBkaWZmZXJlbmNlIGlzIGEge0BsaW5rIFdyaXRlU2lua307IHRoZVxuICogdHJhcHMgYXJlIHdyaXR0ZW4gb25jZSBvdmVyIGl0ICg5LjIzLjEg4oCUIHRoZSA5LjIyLjAgc3RhbGUtcmVhZCBidWcgd2FzXG4gKiBmaXhlZCBpbiBvbmUgY29weSBvZiB0aGVzZSB0cmFwcyBhbmQgdGhlbiBmb3VuZCBhZ2FpbiBpbiB0aGUgb3RoZXIgdHdvKS5cbiAqL1xuXG5pbXBvcnQgeyBuYXRpdmVHZXQgfSBmcm9tICdmb290dHJhY2UvcGF0aHMnO1xuXG5pbXBvcnQgeyB1bndyYXBIYW5kbGVzIH0gZnJvbSAnLi9oYW5kbGVzLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtYmVyQ2FjaGUgfSBmcm9tICcuL2xpdmVWaWV3LmpzJztcbmltcG9ydCB7IGJ1aWxkTmVzdGVkUGF0Y2ggfSBmcm9tICcuL3BhdGhCdWlsZGVyLmpzJztcbmltcG9ydCB7IGRlbGV0ZUluUGF0aCwgc2V0SW5QYXRoIH0gZnJvbSAnLi9zdHJ1Y3R1cmFsV3JpdGUuanMnO1xuXG4vKipcbiAqIFRoZSBzZWFtIGJldHdlZW4gYSBwcm94eSBhbmQgc3RhdGUuIGBwYXRoYCBpcyBtZWFzdXJlZCBmcm9tIHRoZSBzaW5rJ3NcbiAqIHJvb3Qg4oCUIHRoZSBrZXkncyB2YWx1ZSBmb3Ige0BsaW5rIHJvb3RLZXlTaW5rfSwgdGhlIGVsZW1lbnQgZm9yXG4gKiB7QGxpbmsgZWxlbWVudFNpbmt9OyBgW11gIGlzIHRoZSByb290IGl0c2VsZi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXcml0ZVNpbmsge1xuICAvKiogVGhlIHZhbHVlIGF0IGBwYXRoYCwgYXMgaXQgc3RhbmRzIE5PVyAocmVhZC15b3VyLXdyaXRlczsgbmV2ZXIgYSB0cmFja2VkIHJlYWQpLiAqL1xuICByZWFkQXQocGF0aDogcmVhZG9ubHkgc3RyaW5nW10pOiB1bmtub3duO1xuICAvKiogUHV0IGFuIGFscmVhZHktdW53cmFwcGVkIGB2YWx1ZWAgYXQgYHBhdGhgLiBUaGUgc2luayBjaG9vc2VzIHRoZSB2ZXJiLiAqL1xuICBwdXQocGF0aDogcmVhZG9ubHkgc3RyaW5nW10sIHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgLyoqIFJlbW92ZSB0aGUga2V5IGF0IGBwYXRoYC4gKi9cbiAgcmVtb3ZlKHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZDtcbn1cblxuLyoqIFRoZSB0d28gd2F5cyBhIHZhbHVlIHJlYWNoZXMgYSBzdGF0ZSBrZXk6IHdoYXQgdGhlIHNpbmsgd3JpdGVzIHRocm91Z2guICovXG5leHBvcnQgaW50ZXJmYWNlIFJvb3RLZXlUYXJnZXQge1xuICBzZXRWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuICB1cGRhdGVWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xufVxuXG4vKipcbiAqIFdIWTogYSB3cml0ZSBiZWxvdyBhIHRvcC1sZXZlbCBrZXkgaGFzIFRXTyB2ZXJicyAocmVhY3RpdmUvUkVBRE1FLm1kLCBsYXdcbiAqIDMpIOKAlCBhbiBvYmplY3QgbGVhZiBpcyBhIGBtZXJnZWAgb2YgYSBuZXN0ZWQgcGF0Y2gsIGFuIGFycmF5IGxlYWYgb3IgYVxuICogZGVsZXRlIHJlYnVpbGRzIHRoZSByb290IGltbXV0YWJseSBhbmQgY29tbWl0cyBhIGBzZXRgIG9mIHRoZSBrZXkuIE9ubHkgdGhlXG4gKiBzaW5rIGtub3dzIHRoYXQ7IHRoZSB0cmFwcyBkbyBub3QuIEV2ZXJ5IHdyaXRlIGRyb3BzIHRoZSBrZXkncyBjYWNoZWQgY2hpbGRcbiAqIHByb3h5IChgY2FjaGVgKSwgc28gdGhlIG5leHQgcmVhZCBpcyBidWlsdCBvdmVyIHRoZSBuZXcgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb290S2V5U2luayhcbiAgdGFyZ2V0OiBSb290S2V5VGFyZ2V0LFxuICByZWFkU2lsZW50OiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24sXG4gIHJvb3RLZXk6IHN0cmluZyxcbiAgY2FjaGU6IFBpY2s8TWVtYmVyQ2FjaGUsICdkZWxldGUnPixcbik6IFdyaXRlU2luayB7XG4gIHJldHVybiBuZXcgUm9vdEtleVNpbmsodGFyZ2V0LCByZWFkU2lsZW50LCByb290S2V5LCBjYWNoZSk7XG59XG5cbi8qKiBPbmUgYWxsb2NhdGlvbiBwZXIgdG9wLWxldmVsIHJlYWQgbWlzcyAodGhlIG1ldGhvZHMgbGl2ZSBvbiB0aGUgcHJvdG90eXBlKS4gKi9cbmNsYXNzIFJvb3RLZXlTaW5rIGltcGxlbWVudHMgV3JpdGVTaW5rIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXQ6IFJvb3RLZXlUYXJnZXQsXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWFkU2lsZW50OiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24sXG4gICAgcHJpdmF0ZSByZWFkb25seSByb290S2V5OiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYWNoZTogUGljazxNZW1iZXJDYWNoZSwgJ2RlbGV0ZSc+LFxuICApIHt9XG5cbiAgLyoqIEFuIGVtcHR5IHBhdGggaXMgdGhlIGtleSdzIG93biB2YWx1ZSDigJQgYG5hdGl2ZUdldCh2LCBbXSlgIHdvdWxkIHJldHVybiBpdCB1bmNoYW5nZWQsIHNvIHRoZSB3YWxrIGlzIHNraXBwZWQuICovXG4gIHJlYWRBdChwYXRoOiByZWFkb25seSBzdHJpbmdbXSk6IHVua25vd24ge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJlYWRTaWxlbnQodGhpcy5yb290S2V5KTtcbiAgICByZXR1cm4gcGF0aC5sZW5ndGggPT09IDAgPyByb290IDogbmF0aXZlR2V0KHJvb3QsIHBhdGggYXMgc3RyaW5nW10pO1xuICB9XG5cbiAgcHV0KHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHRoaXMudGFyZ2V0LnVwZGF0ZVZhbHVlKHRoaXMucm9vdEtleSwgYnVpbGROZXN0ZWRQYXRjaChwYXRoIGFzIHN0cmluZ1tdLCB2YWx1ZSkpO1xuICAgIGVsc2UgdGhpcy50YXJnZXQuc2V0VmFsdWUodGhpcy5yb290S2V5LCBwYXRoLmxlbmd0aCA9PT0gMCA/IHZhbHVlIDogc2V0SW5QYXRoKHRoaXMucmVhZEF0KFtdKSwgcGF0aCwgdmFsdWUpKTtcbiAgICB0aGlzLmNhY2hlLmRlbGV0ZSh0aGlzLnJvb3RLZXkpO1xuICB9XG5cbiAgcmVtb3ZlKHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy50YXJnZXQuc2V0VmFsdWUodGhpcy5yb290S2V5LCBkZWxldGVJblBhdGgodGhpcy5yZWFkQXQoW10pLCBwYXRoKSk7XG4gICAgdGhpcy5jYWNoZS5kZWxldGUodGhpcy5yb290S2V5KTtcbiAgfVxufVxuXG4vKipcbiAqIFdIWTogYSB3cml0ZSBpbnNpZGUgYW4gYXJyYXkgZWxlbWVudCBpcyBhbiBhcnJheSB3cml0ZSDigJQgaXQgcmVidWlsZHMgdGhlXG4gKiBvd25pbmcgYXJyYXkgaW1tdXRhYmx5IGFuZCBoYW5kcyB0aGUgV0hPTEUgbmV3IGFycmF5IHRvIHRoZSBhcnJheSBwcm94eSdzXG4gKiBjb21taXQsIHRoZSBmdW5uZWwgYHB1c2hgIGFscmVhZHkgdXNlcy4gYHBhdGhgIGlzIG1lYXN1cmVkIGZyb20gdGhlXG4gKiBlbGVtZW50OyBgW11gIGlzIHRoZSBlbGVtZW50IHNsb3QgaXRzZWxmLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZWxlbWVudFNpbmsoZ2V0Q3VycmVudDogKCkgPT4gdW5rbm93bltdLCBjb21taXQ6IChuZXh0OiB1bmtub3duW10pID0+IHZvaWQsIGluZGV4OiBudW1iZXIpOiBXcml0ZVNpbmsge1xuICByZXR1cm4gbmV3IEVsZW1lbnRTaW5rKGdldEN1cnJlbnQsIGNvbW1pdCwgaW5kZXgpO1xufVxuXG4vKiogT25lIGFsbG9jYXRpb24gcGVyIGVsZW1lbnQgcHJveHkgKHRoZSBtZXRob2RzIGxpdmUgb24gdGhlIHByb3RvdHlwZSkg4oCUIGEgMTBrLWVsZW1lbnQgbG9vcCBidWlsZHMgMTBrIG9mIHRoZXNlLiAqL1xuY2xhc3MgRWxlbWVudFNpbmsgaW1wbGVtZW50cyBXcml0ZVNpbmsge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdldEN1cnJlbnQ6ICgpID0+IHVua25vd25bXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbW1pdDogKG5leHQ6IHVua25vd25bXSkgPT4gdm9pZCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluZGV4OiBudW1iZXIsXG4gICkge31cblxuICByZWFkQXQocGF0aDogcmVhZG9ubHkgc3RyaW5nW10pOiB1bmtub3duIHtcbiAgICByZXR1cm4gcmVhZEluRWxlbWVudCh0aGlzLmdldEN1cnJlbnQsIHRoaXMuaW5kZXgsIHBhdGgpO1xuICB9XG5cbiAgcHV0KHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIHJlcGxhY2VJbkVsZW1lbnQodGhpcy5nZXRDdXJyZW50LCB0aGlzLmNvbW1pdCwgdGhpcy5pbmRleCwgcGF0aCwgdmFsdWUpO1xuICB9XG5cbiAgcmVtb3ZlKHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgcmVtb3ZlSW5FbGVtZW50KHRoaXMuZ2V0Q3VycmVudCwgdGhpcy5jb21taXQsIHRoaXMuaW5kZXgsIHBhdGgpO1xuICB9XG59XG5cbi8qKiBUaGUgdmFsdWUgYXQgYHBhdGhgIGluc2lkZSBlbGVtZW50IGBpbmRleGAsIGFzIGl0IHN0YW5kcyBOT1cgKHJlYWQteW91ci13cml0ZXMpLiAqL1xuZnVuY3Rpb24gcmVhZEluRWxlbWVudChnZXRDdXJyZW50OiAoKSA9PiB1bmtub3duW10sIGluZGV4OiBudW1iZXIsIHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdW5rbm93biB7XG4gIGNvbnN0IGVsZW1lbnQgPSBnZXRDdXJyZW50KClbaW5kZXhdO1xuICByZXR1cm4gcGF0aC5sZW5ndGggPT09IDAgPyBlbGVtZW50IDogbmF0aXZlR2V0KGVsZW1lbnQsIHBhdGggYXMgc3RyaW5nW10pO1xufVxuXG4vKiogQSBjb3B5IG9mIHRoZSBhcnJheSB3aXRoIGB2YWx1ZWAgYXQgYHBhdGhgIGluc2lkZSBlbGVtZW50IGBpbmRleGA7IGEgZ29uZSBlbGVtZW50IGhhcyBub3RoaW5nIHRvIHdyaXRlIGludG8uICovXG5mdW5jdGlvbiByZXBsYWNlSW5FbGVtZW50KFxuICBnZXRDdXJyZW50OiAoKSA9PiB1bmtub3duW10sXG4gIGNvbW1pdDogKG5leHQ6IHVua25vd25bXSkgPT4gdm9pZCxcbiAgaW5kZXg6IG51bWJlcixcbiAgcGF0aDogcmVhZG9ubHkgc3RyaW5nW10sXG4gIHZhbHVlOiB1bmtub3duLFxuKTogdm9pZCB7XG4gIGNvbnN0IG5leHQgPSBbLi4uZ2V0Q3VycmVudCgpXTtcbiAgaWYgKGluZGV4ID49IG5leHQubGVuZ3RoKSByZXR1cm47XG4gIG5leHRbaW5kZXhdID0gcGF0aC5sZW5ndGggPT09IDAgPyB2YWx1ZSA6IHNldEluUGF0aChuZXh0W2luZGV4XSwgcGF0aCwgdmFsdWUpO1xuICBjb21taXQobmV4dCk7XG59XG5cbi8qKiBBIGNvcHkgb2YgdGhlIGFycmF5IHdpdGggdGhlIGtleSBhdCBgcGF0aGAgaW5zaWRlIGVsZW1lbnQgYGluZGV4YCByZW1vdmVkLiAqL1xuZnVuY3Rpb24gcmVtb3ZlSW5FbGVtZW50KFxuICBnZXRDdXJyZW50OiAoKSA9PiB1bmtub3duW10sXG4gIGNvbW1pdDogKG5leHQ6IHVua25vd25bXSkgPT4gdm9pZCxcbiAgaW5kZXg6IG51bWJlcixcbiAgcGF0aDogcmVhZG9ubHkgc3RyaW5nW10sXG4pOiB2b2lkIHtcbiAgY29uc3QgbmV4dCA9IFsuLi5nZXRDdXJyZW50KCldO1xuICBpZiAoaW5kZXggPj0gbmV4dC5sZW5ndGgpIHJldHVybjtcbiAgbmV4dFtpbmRleF0gPSBkZWxldGVJblBhdGgobmV4dFtpbmRleF0sIHBhdGgpO1xuICBjb21taXQobmV4dCk7XG59XG5cbi8qKlxuICogV0hZIG9uZSBzZXQgdHJhcDogdGhlIGFzc2lnbmVkIHZhbHVlIGlzIHRha2VuIGFzIGEgVkFMVUUgaGVyZSAoYSBoYW5kbGVcbiAqIGJlY29tZXMgd2hhdCBpdCBzdGFuZHMgZm9yLCBgaGFuZGxlcy50c2A7IG5vdGhpbmcgZWxzZSBpcyBjb3BpZWQg4oCUIHRoZVxuICogYnVmZmVyIGRldGFjaGVzIGF0IGNvbW1pdCkgYW5kIGhhbmRlZCB0byB0aGUgc2luayBhdCB0aGUgcHJveHkncyBwYXRoIHBsdXNcbiAqIHRoZSBrZXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW5rU2V0VHJhcChzaW5rOiBXcml0ZVNpbmssIHNlZ21lbnRzOiByZWFkb25seSBzdHJpbmdbXSk6IFByb3h5SGFuZGxlcjxvYmplY3Q+WydzZXQnXSB7XG4gIHJldHVybiAoX3RhcmdldCwgcHJvcCwgdmFsdWUpID0+IHtcbiAgICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSByZXR1cm4gdHJ1ZTtcbiAgICBzaW5rLnB1dChbLi4uc2VnbWVudHMsIHByb3BdLCB1bndyYXBIYW5kbGVzKHZhbHVlKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59XG5cbi8qKlxuICogV0hZIG9uZSBkZWxldGUgdHJhcDogYG1lcmdlYCBjYW5ub3QgZXhwcmVzcyBhIHJlbW92YWwgKGEgcGF0Y2ggb2ZcbiAqIGB1bmRlZmluZWRgIHJlYWRzIGFzIGFic2VudCksIHNvIGEgZGVsZXRlIGFsd2F5cyByZWJ1aWxkcyB0aHJvdWdoIHRoZSBzaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lua0RlbGV0ZVRyYXAoc2luazogV3JpdGVTaW5rLCBzZWdtZW50czogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm94eUhhbmRsZXI8b2JqZWN0PlsnZGVsZXRlUHJvcGVydHknXSB7XG4gIHJldHVybiAoX3RhcmdldCwgcHJvcCkgPT4ge1xuICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHJldHVybiB0cnVlO1xuICAgIHNpbmsucmVtb3ZlKFsuLi5zZWdtZW50cywgcHJvcF0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xufVxuIl19
@@ -40,7 +40,8 @@
40
40
  *
41
41
  * @example
42
42
  * ```typescript
43
- * import { controlDepRecorder, causalChain } from 'footprintjs/trace';
43
+ * import { controlDepRecorder } from 'footprintjs/trace';
44
+ import { causalChain } from 'foottrace';
44
45
  *
45
46
  * const ctrl = controlDepRecorder();
46
47
  * executor.attachCombinedRecorder(ctrl); // auto-routes to FlowRecorder channel
@@ -52,9 +53,9 @@
52
53
  * });
53
54
  * ```
54
55
  */
56
+ import type { ControlDependency, ControlDepLookup } from 'foottrace';
55
57
  import type { DecisionEvidence, SelectionEvidence } from '../decide/types.js';
56
58
  import type { FlowDecisionEvent, FlowErrorEvent, FlowRecorder, FlowSelectedEvent, FlowStageEvent } from '../engine/narrative/types.js';
57
- import type { ControlDependency, ControlDepLookup } from '../memory/backtrack.js';
58
59
  /** One recorded decision/selection event (RFC-003 D5). */
59
60
  export interface ControlDecisionRecord {
60
61
  /** runtimeStageId of the decider/selector execution step. */
@@ -40,7 +40,8 @@
40
40
  *
41
41
  * @example
42
42
  * ```typescript
43
- * import { controlDepRecorder, causalChain } from 'footprintjs/trace';
43
+ * import { controlDepRecorder } from 'footprintjs/trace';
44
+ import { causalChain } from 'foottrace';
44
45
  *
45
46
  * const ctrl = controlDepRecorder();
46
47
  * executor.attachCombinedRecorder(ctrl); // auto-routes to FlowRecorder channel
@@ -225,4 +226,4 @@ function matchedRuleLabel(evidence) {
225
226
  const rule = evidence.rules.find((r) => r.matched && r.branch === evidence.chosen) ?? evidence.rules.find((r) => r.matched);
226
227
  return rule?.label;
227
228
  }
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbERlcFJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9Db250cm9sRGVwUmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcURHO0FBd0NILElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUVqQjs7R0FFRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxVQUFxQyxFQUFFO0lBQ3hFLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxrQkFBa0I7SUFDcEIsRUFBRSxDQUFTO0lBRXBCLDBFQUEwRTtJQUN6RCxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDdEQsMkRBQTJEO0lBQzFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FBQztJQUN0RSxzRUFBc0U7SUFDckQscUJBQXFCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDbkUsaUVBQWlFO0lBQ3pELE9BQU8sR0FBc0IsRUFBRSxDQUFDO0lBQ3hDLHVFQUF1RTtJQUN0RCxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUNuRCxnRUFBZ0U7SUFDeEQsU0FBUyxDQUFVO0lBRTNCLFlBQVksVUFBcUMsRUFBRTtRQUNqRCxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUVELHlFQUF5RTtJQUV6RSxVQUFVLENBQUMsS0FBd0I7UUFDakMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1FBQ25DLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTztRQUNqQixJQUFJLENBQUMsYUFB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Q0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQztnQkFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEQsT0FBTztRQUNULENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGdCQUFnQixDQUFDLFFBQXNDO0lBQzlELElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDaEMsTUFBTSxJQUFJLEdBQ1IsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqSCxPQUFPLElBQUksRUFBRSxLQUFLLENBQUM7QUFDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udHJvbERlcFJlY29yZGVyIOKAlCBjb250cm9sLWRlcGVuZGVuY2UgdHJhY2tpbmcgZnJvbSBmbG93IGV2ZW50cyAoUkZDLTAwMyBENSkuXG4gKlxuICogVGhlIGdhcCB0aGlzIGZpbGxzOlxuICogICBUaGUgYmFja3RyYWNrZXIncyBgY29udHJvbERlcHNgIG9wdGlvbiAoRDMpIG5lZWRzIGEgYENvbnRyb2xEZXBMb29rdXBgOlxuICogICBcIndoaWNoIGRlY2lkZXIgZXhlY3V0aW9uIGFsbG93ZWQgdGhpcyBzdGFnZSB0byBydW4/XCIgVGhlIGVuZ2luZSBrbm93c1xuICogICB0aGlzIGR1cmluZyB0cmF2ZXJzYWwgYnV0IHRoZSBjb21taXQgbG9nIGRvZXNuJ3QgcmVjb3JkIGl0IOKAlCBjb250cm9sXG4gKiAgIGZsb3cgaXMgYSBGbG93UmVjb3JkZXIgY29uY2Vybi4gVGhpcyByZWNvcmRlciBpcyB0aGUgc3RhbmRhcmQgcHJvZHVjZXI6XG4gKiAgIG9uZSBzdWJzY3JpcHRpb24sIG9uZSBsb29rdXAsIHBsdWcgaXQgc3RyYWlnaHQgaW50byBgY2F1c2FsQ2hhaW5gLlxuICpcbiAqIEhvdyBpdCB3b3JrcyDigJQgdHdvIGNvcnJlbGF0aW9uIHN0cnVjdHVyZXMgYnVpbHQgZHVyaW5nIHRyYXZlcnNhbDpcbiAqXG4gKiAgIDEuIGBwYXJlbnRPZmAg4oCUIHRoZSBydW50aW1lIGFuY2VzdG9yIGNoYWluLCBmcm9tIGV2ZXJ5IHN0YWdlIGV2ZW50J3NcbiAqICAgICAgYHRyYXZlcnNhbENvbnRleHQucGFyZW50UnVudGltZVN0YWdlSWRgIChSRkMtMDAzIEQxKS4gQ3Jvc3Nlc1xuICogICAgICBzdWJmbG93IGJvdW5kYXJpZXM7IGxvb3AgcmUtZW50cmllcyBzdGF5IHVuYW1iaWd1b3VzIGJlY2F1c2VcbiAqICAgICAgcnVudGltZSBpZHMgZGlmZmVyIHBlciBpdGVyYXRpb24uXG4gKlxuICogICAyLiBgYnJhbmNoRW50cnlUb0RlY2lzaW9uYCDigJQgb24gYG9uRGVjaXNpb25gL2BvblNlbGVjdGVkYCB0aGUgZGVjaXNpb25cbiAqICAgICAgaXMgcmVjb3JkZWQgYXMgUEVORElORzsgdGhlIG5leHQgc3RhZ2UocykgZXhlY3V0ZWQgd2hvc2VcbiAqICAgICAgYHBhcmVudFJ1bnRpbWVTdGFnZUlkYCBJUyB0aGUgZGVjaWRlcidzIHJ1bnRpbWVTdGFnZUlkIGFyZSBpdHNcbiAqICAgICAgYnJhbmNoIGVudHJpZXMgKDEgZm9yIGEgZGVjaWRlciwgTiA9IHNlbGVjdGVkLmxlbmd0aCBmb3IgYVxuICogICAgICBzZWxlY3RvcikuIENvcnJlbGF0aW9uIGlzIGJ5IHBhcmVudC1pZCArIGNvdW50LCBOT1QgYnkgc3RhZ2UgbmFtZSDigJRcbiAqICAgICAgc3ViZmxvdy1tb3VudCBldmVudHMgY2FycnkgcGF0aC1wcmVmaXhlZCBpbm5lci1yb290IG5hbWVzIHRoYXRcbiAqICAgICAgZG9uJ3QgbWF0Y2ggYEZsb3dEZWNpc2lvbkV2ZW50LmNob3NlbmAsIGFuZCBzZWxlY3RvcnMgZW1pdCBhXG4gKiAgICAgIHN5bnRoZXRpYyBmb3JrIGV2ZW50IHNoYXJpbmcgdGhlIHNlbGVjdG9yJ3Mgb3duIHJ1bnRpbWVTdGFnZUlkXG4gKiAgICAgIChleGNsdWRlZCB2aWEgdGhlIHNlbGYtaWQgZ3VhcmQpLiBBIGJyYW5jaCB0aGF0IFRIUk9XUyBiZWZvcmVcbiAqICAgICAgY29tcGxldGluZyBjb25zdW1lcyBpdHMgc2xvdCB2aWEgYG9uRXJyb3JgLCBzbyB0aGUgcG9zdC1mYW4tb3V0XG4gKiAgICAgIGNvbnZlcmdlbmNlIHN0YWdlIGlzIG5ldmVyIG1pc2F0dHJpYnV0ZWQgYXMgYSBicmFuY2ggZW50cnkuXG4gKlxuICogICBgbG9va3VwKHJ1bnRpbWVTdGFnZUlkKWAgdGhlbiB3YWxrcyB0aGUgYW5jZXN0b3IgY2hhaW4gZnJvbSB0aGUgc3RhZ2VcbiAqICAgdXB3YXJkOyB0aGUgZmlyc3QgYW5jZXN0b3IgKG9yIHRoZSBzdGFnZSBpdHNlbGYpIHJlZ2lzdGVyZWQgYXMgYVxuICogICBicmFuY2ggZW50cnkgeWllbGRzIGl0cyBnb3Zlcm5pbmcgZGVjaWRlciDigJQgdGhlIE5FQVJFU1QgZGVjaXNpb24uXG4gKiAgIE5lc3RlZCBkZWNpc2lvbnMgY29tcG9zZSBuYXR1cmFsbHk6IHRoZSBiYWNrdHJhY2tlciBleHBhbmRzIHRoZVxuICogICBkZWNpZGVyIG5vZGUgYW5kIGFza3MgYWdhaW4uXG4gKlxuICogQ29udmVudGlvbiA0OiBzdGF0ZSByZXNldHMgd2hlbiBgdHJhdmVyc2FsQ29udGV4dC5ydW5JZGAgY2hhbmdlcyDigJQgZWFjaFxuICogcnVuIChhbmQgZWFjaCByZXN1bWUsIHdoaWNoIG1pbnRzIGEgZnJlc2ggcnVuSWQpIHN0YXJ0cyBjbGVhbi4gQ29udHJvbFxuICogY2hhaW5zIHRoZXJlZm9yZSBkbyBOT1Qgc3Vydml2ZSBhIHBhdXNlL3Jlc3VtZSBib3VuZGFyeTogcG9zdC1yZXN1bWVcbiAqIHN0YWdlcyBjYW5ub3QgcmVzb2x2ZSBwcmUtcGF1c2UgZGVjaXNpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBjb250cm9sRGVwUmVjb3JkZXIsIGNhdXNhbENoYWluIH0gZnJvbSAnZm9vdHByaW50anMvdHJhY2UnO1xuICpcbiAqIGNvbnN0IGN0cmwgPSBjb250cm9sRGVwUmVjb3JkZXIoKTtcbiAqIGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIoY3RybCk7IC8vIGF1dG8tcm91dGVzIHRvIEZsb3dSZWNvcmRlciBjaGFubmVsXG4gKlxuICogYXdhaXQgZXhlY3V0b3IucnVuKHsgaW5wdXQgfSk7XG4gKlxuICogY29uc3QgZGFnID0gY2F1c2FsQ2hhaW4oY29tbWl0TG9nLCAnYXBwcm92ZSMyJywga2V5c1JlYWQsIHtcbiAqICAgY29udHJvbERlcHM6IGN0cmwuYXNMb29rdXAoKSxcbiAqIH0pO1xuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBEZWNpc2lvbkV2aWRlbmNlLCBTZWxlY3Rpb25FdmlkZW5jZSB9IGZyb20gJy4uL2RlY2lkZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEZsb3dEZWNpc2lvbkV2ZW50LFxuICBGbG93RXJyb3JFdmVudCxcbiAgRmxvd1JlY29yZGVyLFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG59IGZyb20gJy4uL2VuZ2luZS9uYXJyYXRpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sRGVwZW5kZW5jeSwgQ29udHJvbERlcExvb2t1cCB9IGZyb20gJy4uL21lbW9yeS9iYWNrdHJhY2suanMnO1xuXG4vKiogT25lIHJlY29yZGVkIGRlY2lzaW9uL3NlbGVjdGlvbiBldmVudCAoUkZDLTAwMyBENSkuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyb2xEZWNpc2lvblJlY29yZCB7XG4gIC8qKiBydW50aW1lU3RhZ2VJZCBvZiB0aGUgZGVjaWRlci9zZWxlY3RvciBleGVjdXRpb24gc3RlcC4gKi9cbiAgZGVjaWRlclJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBDaG9zZW4gYnJhbmNoIGRpc3BsYXkgbmFtZSAoZGVjaWRlcikgb3Igc2VsZWN0ZWQgbmFtZXMgKHNlbGVjdG9yKS4gKi9cbiAgY2hvc2VuOiBzdHJpbmcgfCByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIFN0cnVjdHVyZWQgZXZpZGVuY2UgZnJvbSBkZWNpZGUoKS9zZWxlY3QoKSwgd2hlbiB0aGUgc3RhZ2UgdXNlZCB0aGVtLiAqL1xuICBldmlkZW5jZT86IERlY2lzaW9uRXZpZGVuY2UgfCBTZWxlY3Rpb25FdmlkZW5jZTtcbiAgLyoqXG4gICAqIFRoZSBkZWNpZGUoKSBydWxlIGxhYmVsIHRoYXQgcHJvZHVjZWQgdGhlIGRlY2lzaW9uIChlLmcuICdHb29kIGNyZWRpdCcpLlxuICAgKiBEZWNpZGVycyBvbmx5IOKAlCBhIHNlbGVjdG9yIHBpY2tzIE4gYnJhbmNoZXMgYW5kIG5vIHNpbmdsZSBsYWJlbFxuICAgKiBhdHRyaWJ1dGVzIHRvIGFsbCBvZiB0aGVtIChpbnNwZWN0IGBldmlkZW5jZWAgaW5zdGVhZCkuXG4gICAqL1xuICBydWxlTGFiZWw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udHJvbERlcFJlY29yZGVyT3B0aW9ucyB7XG4gIC8qKiBSZWNvcmRlciBpZC4gRGVmYXVsdHMgdG8gYGNvbnRyb2wtZGVwcy1OYCAoYXV0by1pbmNyZW1lbnRlZCkuICovXG4gIGlkPzogc3RyaW5nO1xufVxuXG4vKiogQSBkZWNpc2lvbiBhd2FpdGluZyBicmFuY2gtZW50cnkgY29ycmVsYXRpb24uICovXG5pbnRlcmZhY2UgUGVuZGluZ0RlY2lzaW9uIHtcbiAgZGVjaWRlcklkOiBzdHJpbmc7XG4gIC8qKiBIb3cgbWFueSBicmFuY2ggZW50cmllcyBhcmUgc3RpbGwgZXhwZWN0ZWQgKGRlY2lkZXI6IDEsIHNlbGVjdG9yOiBOKS4gKi9cbiAgcmVtYWluaW5nOiBudW1iZXI7XG59XG5cbmxldCBfY291bnRlciA9IDA7XG5cbi8qKlxuICogRmFjdG9yeSDigJQgbWF0Y2hlcyB0aGUgYHRvcG9sb2d5UmVjb3JkZXIoKWAgLyBgaW5PdXRSZWNvcmRlcigpYCBzdHlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnRyb2xEZXBSZWNvcmRlcihvcHRpb25zOiBDb250cm9sRGVwUmVjb3JkZXJPcHRpb25zID0ge30pOiBDb250cm9sRGVwUmVjb3JkZXIge1xuICByZXR1cm4gbmV3IENvbnRyb2xEZXBSZWNvcmRlcihvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBTdGF0ZWZ1bCBhY2N1bXVsYXRvciB0aGF0IHdhdGNoZXMgRmxvd1JlY29yZGVyIGV2ZW50cyBhbmQgYW5zd2Vyc1xuICogXCJ3aGljaCBkZWNpc2lvbiBhbGxvd2VkIHRoaXMgc3RhZ2UgdG8gcnVuP1wiIEF0dGFjaCB2aWFcbiAqIGBleGVjdXRvci5hdHRhY2hDb21iaW5lZFJlY29yZGVyKHJlY29yZGVyKWAgKG9yIGBhdHRhY2hGbG93UmVjb3JkZXJgKS5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRyb2xEZXBSZWNvcmRlciBpbXBsZW1lbnRzIEZsb3dSZWNvcmRlciB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqIFJ1bnRpbWUgYW5jZXN0b3IgY2hhaW46IHJ1bnRpbWVTdGFnZUlkIOKGkiBwYXJlbnRSdW50aW1lU3RhZ2VJZCAoRDEpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudE9mID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgLyoqIFJlY29yZGVkIGRlY2lzaW9ucywga2V5ZWQgYnkgZGVjaWRlciBydW50aW1lU3RhZ2VJZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBkZWNpc2lvbnMgPSBuZXcgTWFwPHN0cmluZywgQ29udHJvbERlY2lzaW9uUmVjb3JkPigpO1xuICAvKiogQnJhbmNoLWVudHJ5IHJ1bnRpbWVTdGFnZUlkIOKGkiBnb3Zlcm5pbmcgZGVjaWRlciBydW50aW1lU3RhZ2VJZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBicmFuY2hFbnRyeVRvRGVjaXNpb24gPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAvKiogRGVjaXNpb25zIHdob3NlIGJyYW5jaCBlbnRyaWVzIGhhdmUgbm90IGFsbCBiZWVuIHNlZW4geWV0LiAqL1xuICBwcml2YXRlIHBlbmRpbmc6IFBlbmRpbmdEZWNpc2lvbltdID0gW107XG4gIC8qKiBTdGFnZSBpZHMgdGhhdCBhbHJlYWR5IGNvbnN1bWVkIGEgcGVuZGluZyBzbG90IChlbnRyeSBPUiBlcnJvcikuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uc3VtZWRTbG90cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAvKiogQ29udmVudGlvbiA0IOKAlCBydW5JZCBvZiB0aGUgcnVuIGN1cnJlbnRseSBiZWluZyByZWNvcmRlZC4gKi9cbiAgcHJpdmF0ZSBsYXN0UnVuSWQ/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogQ29udHJvbERlcFJlY29yZGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5pZCA9IG9wdGlvbnMuaWQgPz8gYGNvbnRyb2wtZGVwcy0keysrX2NvdW50ZXJ9YDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBGbG93UmVjb3JkZXIgaG9va3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgb25EZWNpc2lvbihldmVudDogRmxvd0RlY2lzaW9uRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdHggPSBldmVudC50cmF2ZXJzYWxDb250ZXh0O1xuICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgdGhpcy5yZXNldElmTmV3UnVuKGN0eC5ydW5JZCk7XG5cbiAgICBjb25zdCBkZWNpZGVySWQgPSBjdHgucnVudGltZVN0YWdlSWQ7XG4gICAgY29uc3QgcnVsZUxhYmVsID0gbWF0Y2hlZFJ1bGVMYWJlbChldmVudC5ldmlkZW5jZSk7XG4gICAgdGhpcy5kZWNpc2lvbnMuc2V0KGRlY2lkZXJJZCwge1xuICAgICAgZGVjaWRlclJ1bnRpbWVTdGFnZUlkOiBkZWNpZGVySWQsXG4gICAgICBjaG9zZW46IGV2ZW50LmNob3NlbixcbiAgICAgIC4uLihldmVudC5ldmlkZW5jZSAmJiB7IGV2aWRlbmNlOiBldmVudC5ldmlkZW5jZSB9KSxcbiAgICAgIC4uLihydWxlTGFiZWwgIT09IHVuZGVmaW5lZCAmJiB7IHJ1bGVMYWJlbCB9KSxcbiAgICB9KTtcbiAgICB0aGlzLnBlbmRpbmcucHVzaCh7IGRlY2lkZXJJZCwgcmVtYWluaW5nOiAxIH0pO1xuICB9XG5cbiAgb25TZWxlY3RlZChldmVudDogRmxvd1NlbGVjdGVkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdHggPSBldmVudC50cmF2ZXJzYWxDb250ZXh0O1xuICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgdGhpcy5yZXNldElmTmV3UnVuKGN0eC5ydW5JZCk7XG4gICAgaWYgKGV2ZW50LnNlbGVjdGVkLmxlbmd0aCA9PT0gMCkgcmV0dXJuOyAvLyBub3RoaW5nIHNlbGVjdGVkIOKGkiBub3RoaW5nIGdvdmVybmVkXG5cbiAgICBjb25zdCBkZWNpZGVySWQgPSBjdHgucnVudGltZVN0YWdlSWQ7XG4gICAgdGhpcy5kZWNpc2lvbnMuc2V0KGRlY2lkZXJJZCwge1xuICAgICAgZGVjaWRlclJ1bnRpbWVTdGFnZUlkOiBkZWNpZGVySWQsXG4gICAgICBjaG9zZW46IFsuLi5ldmVudC5zZWxlY3RlZF0sXG4gICAgICAuLi4oZXZlbnQuZXZpZGVuY2UgJiYgeyBldmlkZW5jZTogZXZlbnQuZXZpZGVuY2UgfSksXG4gICAgfSk7XG4gICAgdGhpcy5wZW5kaW5nLnB1c2goeyBkZWNpZGVySWQsIHJlbWFpbmluZzogZXZlbnQuc2VsZWN0ZWQubGVuZ3RoIH0pO1xuICB9XG5cbiAgb25TdGFnZUV4ZWN1dGVkKGV2ZW50OiBGbG93U3RhZ2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGN0eCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ7XG4gICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICB0aGlzLnJlc2V0SWZOZXdSdW4oY3R4LnJ1bklkKTtcblxuICAgIGNvbnN0IHsgcnVudGltZVN0YWdlSWQsIHBhcmVudFJ1bnRpbWVTdGFnZUlkIH0gPSBjdHg7XG4gICAgaWYgKHBhcmVudFJ1bnRpbWVTdGFnZUlkKSB7XG4gICAgICB0aGlzLnBhcmVudE9mLnNldChydW50aW1lU3RhZ2VJZCwgcGFyZW50UnVudGltZVN0YWdlSWQpO1xuICAgICAgdGhpcy5jb25zdW1lUGVuZGluZ1Nsb3QocnVudGltZVN0YWdlSWQsIHBhcmVudFJ1bnRpbWVTdGFnZUlkLCAvKiByZWdpc3RlciAqLyB0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQSBicmFuY2ggdGhhdCB0aHJvd3MgbmV2ZXIgZmlyZXMgYG9uU3RhZ2VFeGVjdXRlZGAg4oCUIHdpdGhvdXQgdGhpcyBob29rXG4gICAqIGl0cyBwZW5kaW5nIHNsb3Qgd291bGQgbGVhayBhbmQgdGhlIHBvc3QtZmFuLW91dCBjb252ZXJnZW5jZSBzdGFnZVxuICAgKiAod2hvc2UgY29udGV4dCBhbHNvIGNoYWlucyB0byB0aGUgc2VsZWN0b3IpIHdvdWxkIGJlIG1pc2F0dHJpYnV0ZWQgYXNcbiAgICogYSBicmFuY2ggZW50cnkgdW5kZXIgYmVzdC1lZmZvcnQgKGBmYWlsRmFzdDogZmFsc2VgKSBmYW4tb3V0cy5cbiAgICovXG4gIG9uRXJyb3IoZXZlbnQ6IEZsb3dFcnJvckV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY3R4ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dDtcbiAgICBpZiAoIWN0eCkgcmV0dXJuO1xuICAgIHRoaXMucmVzZXRJZk5ld1J1bihjdHgucnVuSWQpO1xuICAgIGlmIChjdHgucGFyZW50UnVudGltZVN0YWdlSWQpIHtcbiAgICAgIC8vIFJlY29yZCB0aGUgY2hhaW4gQU5EIGF0dHJpYnV0ZSB0aGUgZmFpbGVkIHN0YWdlIHRvIGl0cyBkZWNpc2lvbiDigJRcbiAgICAgIC8vIHRoZSBzdGFnZSBSQU4gKGFuZCBtYXkgaGF2ZSBjb21taXR0ZWQgcGFydGlhbCB3cml0ZXMpIGJlY2F1c2UgdGhlXG4gICAgICAvLyBkZWNpc2lvbiBjaG9zZSBpdDsgZmFpbGluZyBhZnRlcndhcmRzIGRvZXNuJ3QgdW5kbyB0aGUgZGVwZW5kZW5jeS5cbiAgICAgIHRoaXMucGFyZW50T2Yuc2V0KGN0eC5ydW50aW1lU3RhZ2VJZCwgY3R4LnBhcmVudFJ1bnRpbWVTdGFnZUlkKTtcbiAgICAgIHRoaXMuY29uc3VtZVBlbmRpbmdTbG90KGN0eC5ydW50aW1lU3RhZ2VJZCwgY3R4LnBhcmVudFJ1bnRpbWVTdGFnZUlkLCAvKiByZWdpc3RlciAqLyB0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvLyDilIDilIAgUXVlcmllcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgTkVBUkVTVCBnb3Zlcm5pbmcgZGVjaXNpb24gZm9yIGFuIGV4ZWN1dGlvbiBzdGVwOiB3YWxrcyB0aGVcbiAgICogcnVudGltZSBhbmNlc3RvciBjaGFpbiAodGhlIHN0ZXAgaXRzZWxmIGZpcnN0KSB1bnRpbCBpdCBoaXRzIGFcbiAgICogcmVnaXN0ZXJlZCBicmFuY2ggZW50cnkuIGB1bmRlZmluZWRgIHdoZW4gdGhlIHN0ZXAgaXMgbm90IGRvd25zdHJlYW0gb2ZcbiAgICogYW55IHJlY29yZGVkIGRlY2lzaW9uLlxuICAgKi9cbiAgbG9va3VwKHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiBDb250cm9sRGVwZW5kZW5jeSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGxldCBjdXI6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHJ1bnRpbWVTdGFnZUlkO1xuICAgIHdoaWxlIChjdXIgIT09IHVuZGVmaW5lZCAmJiAhc2Vlbi5oYXMoY3VyKSkge1xuICAgICAgc2Vlbi5hZGQoY3VyKTtcbiAgICAgIGNvbnN0IGRlY2lkZXJJZCA9IHRoaXMuYnJhbmNoRW50cnlUb0RlY2lzaW9uLmdldChjdXIpO1xuICAgICAgaWYgKGRlY2lkZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuZGVjaXNpb25zLmdldChkZWNpZGVySWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRlY2lkZXJJZCxcbiAgICAgICAgICAuLi4ocmVjb3JkPy5ydWxlTGFiZWwgIT09IHVuZGVmaW5lZCAmJiB7IGxhYmVsOiByZWNvcmQucnVsZUxhYmVsIH0pLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY3VyID0gdGhpcy5wYXJlbnRPZi5nZXQoY3VyKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBUaGUgbG9va3VwIGFzIGEgYmFyZSBmdW5jdGlvbiDigJQgcGx1ZyBpbnRvIGBjYXVzYWxDaGFpbiguLi4sIHsgY29udHJvbERlcHMgfSlgLiAqL1xuICBhc0xvb2t1cCgpOiBDb250cm9sRGVwTG9va3VwIHtcbiAgICByZXR1cm4gKHJ1bnRpbWVTdGFnZUlkKSA9PiB0aGlzLmxvb2t1cChydW50aW1lU3RhZ2VJZCk7XG4gIH1cblxuICAvKiogQWxsIGRlY2lzaW9ucyByZWNvcmRlZCBmb3IgdGhlIGN1cnJlbnQgcnVuLCBpbiBldmVudCBvcmRlci4gKi9cbiAgZ2V0RGVjaXNpb25zKCk6IENvbnRyb2xEZWNpc2lvblJlY29yZFtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuZGVjaXNpb25zLnZhbHVlcygpXTtcbiAgfVxuXG4gIC8qKiBSZXNldCBhbGwgc3RhdGUgKGFsc28gaGFwcGVucyBhdXRvbWF0aWNhbGx5IG9uIHJ1bklkIGNoYW5nZSkuICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMucGFyZW50T2YuY2xlYXIoKTtcbiAgICB0aGlzLmRlY2lzaW9ucy5jbGVhcigpO1xuICAgIHRoaXMuYnJhbmNoRW50cnlUb0RlY2lzaW9uLmNsZWFyKCk7XG4gICAgdGhpcy5wZW5kaW5nID0gW107XG4gICAgdGhpcy5jb25zdW1lZFNsb3RzLmNsZWFyKCk7XG4gIH1cblxuICAvLyDilIDilIAgSW50ZXJuYWxzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBDb252ZW50aW9uIDQ6IGEgbmV3IHJ1bklkIG1lYW5zIGEgbmV3IHJ1biDigJQgcmVzZXQgdHJhbnNpZW50IHN0YXRlLiAqL1xuICBwcml2YXRlIHJlc2V0SWZOZXdSdW4ocnVuSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChydW5JZCA9PT0gdGhpcy5sYXN0UnVuSWQpIHJldHVybjtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgdGhpcy5sYXN0UnVuSWQgPSBydW5JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBgcGFyZW50UnVudGltZVN0YWdlSWRgIGlzIGEgZGVjaWRlciB3aXRoIGFuIHVubWF0Y2hlZCBwZW5kaW5nIHNsb3QsXG4gICAqIGNvbnN1bWUgb25lLiBgcmVnaXN0ZXJgIGNvbnRyb2xzIHdoZXRoZXIgdGhlIHN0YWdlIGlzIHJlY29yZGVkIGFzIGFcbiAgICogYnJhbmNoIGVudHJ5IChzdGFnZSBleGVjdXRlZC9lcnJvcmVkKSDigJQgYm90aCBwYXRocyBjb25zdW1lIHRoZSBzbG90IHNvXG4gICAqIGNvdW50cyBzdGF5IGV4YWN0IGV2ZW4gd2hlbiBhIHN0YWdlIHByb2R1Y2VzIGJvdGggZXZlbnRzLlxuICAgKi9cbiAgcHJpdmF0ZSBjb25zdW1lUGVuZGluZ1Nsb3QocnVudGltZVN0YWdlSWQ6IHN0cmluZywgcGFyZW50UnVudGltZVN0YWdlSWQ6IHN0cmluZywgcmVnaXN0ZXI6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAocnVudGltZVN0YWdlSWQgPT09IHBhcmVudFJ1bnRpbWVTdGFnZUlkKSByZXR1cm47IC8vIHN5bnRoZXRpYyBzZWxmLWV2ZW50c1xuICAgIGlmICh0aGlzLmNvbnN1bWVkU2xvdHMuaGFzKHJ1bnRpbWVTdGFnZUlkKSkgcmV0dXJuO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBlbmRpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHAgPSB0aGlzLnBlbmRpbmdbaV07XG4gICAgICBpZiAocC5kZWNpZGVySWQgIT09IHBhcmVudFJ1bnRpbWVTdGFnZUlkKSBjb250aW51ZTtcblxuICAgICAgdGhpcy5jb25zdW1lZFNsb3RzLmFkZChydW50aW1lU3RhZ2VJZCk7XG4gICAgICBpZiAocmVnaXN0ZXIpIHRoaXMuYnJhbmNoRW50cnlUb0RlY2lzaW9uLnNldChydW50aW1lU3RhZ2VJZCwgcC5kZWNpZGVySWQpO1xuICAgICAgcC5yZW1haW5pbmctLTtcbiAgICAgIGlmIChwLnJlbWFpbmluZyA8PSAwKSB0aGlzLnBlbmRpbmcuc3BsaWNlKGksIDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoZSBkZWNpZGUoKSBydWxlIGxhYmVsIHRoYXQgcHJvZHVjZWQgdGhlIGRlY2lzaW9uOiB0aGUgbWF0Y2hlZCBydWxlXG4gKiBtYXBwaW5nIHRvIHRoZSBjaG9zZW4gYnJhbmNoIChmaXJzdCBtYXRjaGVkIHJ1bGUgYXMgZmFsbGJhY2spLlxuICovXG5mdW5jdGlvbiBtYXRjaGVkUnVsZUxhYmVsKGV2aWRlbmNlOiBEZWNpc2lvbkV2aWRlbmNlIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFldmlkZW5jZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgcnVsZSA9XG4gICAgZXZpZGVuY2UucnVsZXMuZmluZCgocikgPT4gci5tYXRjaGVkICYmIHIuYnJhbmNoID09PSBldmlkZW5jZS5jaG9zZW4pID8/IGV2aWRlbmNlLnJ1bGVzLmZpbmQoKHIpID0+IHIubWF0Y2hlZCk7XG4gIHJldHVybiBydWxlPy5sYWJlbDtcbn1cbiJdfQ==
229
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbERlcFJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9Db250cm9sRGVwUmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNERztBQXlDSCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFFakI7O0dBRUc7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsVUFBcUMsRUFBRTtJQUN4RSxPQUFPLElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDekMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQ3BCLEVBQUUsQ0FBUztJQUVwQiwwRUFBMEU7SUFDekQsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ3RELDJEQUEyRDtJQUMxQyxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7SUFDdEUsc0VBQXNFO0lBQ3JELHFCQUFxQixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ25FLGlFQUFpRTtJQUN6RCxPQUFPLEdBQXNCLEVBQUUsQ0FBQztJQUN4Qyx1RUFBdUU7SUFDdEQsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDbkQsZ0VBQWdFO0lBQ3hELFNBQVMsQ0FBVTtJQUUzQixZQUFZLFVBQXFDLEVBQUU7UUFDakQsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxJQUFJLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFRCx5RUFBeUU7SUFFekUsVUFBVSxDQUFDLEtBQXdCO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztRQUNuQyxJQUFJLENBQUMsR0FBRztZQUFFLE9BQU87UUFDakIsSUFBSSxDQUFDLGFB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LENBQUMsU0FBUyxDQUFDLENBQUM7WUFDMUUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUM7Z0JBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2hELE9BQU87UUFDVCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxRQUFzQztJQUM5RCxJQUFJLENBQUMsUUFBUTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2hDLE1BQU0sSUFBSSxHQUNSLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakgsT0FBTyxJQUFJLEVBQUUsS0FBSyxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnRyb2xEZXBSZWNvcmRlciDigJQgY29udHJvbC1kZXBlbmRlbmNlIHRyYWNraW5nIGZyb20gZmxvdyBldmVudHMgKFJGQy0wMDMgRDUpLlxuICpcbiAqIFRoZSBnYXAgdGhpcyBmaWxsczpcbiAqICAgVGhlIGJhY2t0cmFja2VyJ3MgYGNvbnRyb2xEZXBzYCBvcHRpb24gKEQzKSBuZWVkcyBhIGBDb250cm9sRGVwTG9va3VwYDpcbiAqICAgXCJ3aGljaCBkZWNpZGVyIGV4ZWN1dGlvbiBhbGxvd2VkIHRoaXMgc3RhZ2UgdG8gcnVuP1wiIFRoZSBlbmdpbmUga25vd3NcbiAqICAgdGhpcyBkdXJpbmcgdHJhdmVyc2FsIGJ1dCB0aGUgY29tbWl0IGxvZyBkb2Vzbid0IHJlY29yZCBpdCDigJQgY29udHJvbFxuICogICBmbG93IGlzIGEgRmxvd1JlY29yZGVyIGNvbmNlcm4uIFRoaXMgcmVjb3JkZXIgaXMgdGhlIHN0YW5kYXJkIHByb2R1Y2VyOlxuICogICBvbmUgc3Vic2NyaXB0aW9uLCBvbmUgbG9va3VwLCBwbHVnIGl0IHN0cmFpZ2h0IGludG8gYGNhdXNhbENoYWluYC5cbiAqXG4gKiBIb3cgaXQgd29ya3Mg4oCUIHR3byBjb3JyZWxhdGlvbiBzdHJ1Y3R1cmVzIGJ1aWx0IGR1cmluZyB0cmF2ZXJzYWw6XG4gKlxuICogICAxLiBgcGFyZW50T2ZgIOKAlCB0aGUgcnVudGltZSBhbmNlc3RvciBjaGFpbiwgZnJvbSBldmVyeSBzdGFnZSBldmVudCdzXG4gKiAgICAgIGB0cmF2ZXJzYWxDb250ZXh0LnBhcmVudFJ1bnRpbWVTdGFnZUlkYCAoUkZDLTAwMyBEMSkuIENyb3NzZXNcbiAqICAgICAgc3ViZmxvdyBib3VuZGFyaWVzOyBsb29wIHJlLWVudHJpZXMgc3RheSB1bmFtYmlndW91cyBiZWNhdXNlXG4gKiAgICAgIHJ1bnRpbWUgaWRzIGRpZmZlciBwZXIgaXRlcmF0aW9uLlxuICpcbiAqICAgMi4gYGJyYW5jaEVudHJ5VG9EZWNpc2lvbmAg4oCUIG9uIGBvbkRlY2lzaW9uYC9gb25TZWxlY3RlZGAgdGhlIGRlY2lzaW9uXG4gKiAgICAgIGlzIHJlY29yZGVkIGFzIFBFTkRJTkc7IHRoZSBuZXh0IHN0YWdlKHMpIGV4ZWN1dGVkIHdob3NlXG4gKiAgICAgIGBwYXJlbnRSdW50aW1lU3RhZ2VJZGAgSVMgdGhlIGRlY2lkZXIncyBydW50aW1lU3RhZ2VJZCBhcmUgaXRzXG4gKiAgICAgIGJyYW5jaCBlbnRyaWVzICgxIGZvciBhIGRlY2lkZXIsIE4gPSBzZWxlY3RlZC5sZW5ndGggZm9yIGFcbiAqICAgICAgc2VsZWN0b3IpLiBDb3JyZWxhdGlvbiBpcyBieSBwYXJlbnQtaWQgKyBjb3VudCwgTk9UIGJ5IHN0YWdlIG5hbWUg4oCUXG4gKiAgICAgIHN1YmZsb3ctbW91bnQgZXZlbnRzIGNhcnJ5IHBhdGgtcHJlZml4ZWQgaW5uZXItcm9vdCBuYW1lcyB0aGF0XG4gKiAgICAgIGRvbid0IG1hdGNoIGBGbG93RGVjaXNpb25FdmVudC5jaG9zZW5gLCBhbmQgc2VsZWN0b3JzIGVtaXQgYVxuICogICAgICBzeW50aGV0aWMgZm9yayBldmVudCBzaGFyaW5nIHRoZSBzZWxlY3RvcidzIG93biBydW50aW1lU3RhZ2VJZFxuICogICAgICAoZXhjbHVkZWQgdmlhIHRoZSBzZWxmLWlkIGd1YXJkKS4gQSBicmFuY2ggdGhhdCBUSFJPV1MgYmVmb3JlXG4gKiAgICAgIGNvbXBsZXRpbmcgY29uc3VtZXMgaXRzIHNsb3QgdmlhIGBvbkVycm9yYCwgc28gdGhlIHBvc3QtZmFuLW91dFxuICogICAgICBjb252ZXJnZW5jZSBzdGFnZSBpcyBuZXZlciBtaXNhdHRyaWJ1dGVkIGFzIGEgYnJhbmNoIGVudHJ5LlxuICpcbiAqICAgYGxvb2t1cChydW50aW1lU3RhZ2VJZClgIHRoZW4gd2Fsa3MgdGhlIGFuY2VzdG9yIGNoYWluIGZyb20gdGhlIHN0YWdlXG4gKiAgIHVwd2FyZDsgdGhlIGZpcnN0IGFuY2VzdG9yIChvciB0aGUgc3RhZ2UgaXRzZWxmKSByZWdpc3RlcmVkIGFzIGFcbiAqICAgYnJhbmNoIGVudHJ5IHlpZWxkcyBpdHMgZ292ZXJuaW5nIGRlY2lkZXIg4oCUIHRoZSBORUFSRVNUIGRlY2lzaW9uLlxuICogICBOZXN0ZWQgZGVjaXNpb25zIGNvbXBvc2UgbmF0dXJhbGx5OiB0aGUgYmFja3RyYWNrZXIgZXhwYW5kcyB0aGVcbiAqICAgZGVjaWRlciBub2RlIGFuZCBhc2tzIGFnYWluLlxuICpcbiAqIENvbnZlbnRpb24gNDogc3RhdGUgcmVzZXRzIHdoZW4gYHRyYXZlcnNhbENvbnRleHQucnVuSWRgIGNoYW5nZXMg4oCUIGVhY2hcbiAqIHJ1biAoYW5kIGVhY2ggcmVzdW1lLCB3aGljaCBtaW50cyBhIGZyZXNoIHJ1bklkKSBzdGFydHMgY2xlYW4uIENvbnRyb2xcbiAqIGNoYWlucyB0aGVyZWZvcmUgZG8gTk9UIHN1cnZpdmUgYSBwYXVzZS9yZXN1bWUgYm91bmRhcnk6IHBvc3QtcmVzdW1lXG4gKiBzdGFnZXMgY2Fubm90IHJlc29sdmUgcHJlLXBhdXNlIGRlY2lzaW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgY29udHJvbERlcFJlY29yZGVyIH0gZnJvbSAnZm9vdHByaW50anMvdHJhY2UnO1xuaW1wb3J0IHsgY2F1c2FsQ2hhaW4gfSBmcm9tICdmb290dHJhY2UnO1xuICpcbiAqIGNvbnN0IGN0cmwgPSBjb250cm9sRGVwUmVjb3JkZXIoKTtcbiAqIGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIoY3RybCk7IC8vIGF1dG8tcm91dGVzIHRvIEZsb3dSZWNvcmRlciBjaGFubmVsXG4gKlxuICogYXdhaXQgZXhlY3V0b3IucnVuKHsgaW5wdXQgfSk7XG4gKlxuICogY29uc3QgZGFnID0gY2F1c2FsQ2hhaW4oY29tbWl0TG9nLCAnYXBwcm92ZSMyJywga2V5c1JlYWQsIHtcbiAqICAgY29udHJvbERlcHM6IGN0cmwuYXNMb29rdXAoKSxcbiAqIH0pO1xuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb250cm9sRGVwZW5kZW5jeSwgQ29udHJvbERlcExvb2t1cCB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5cbmltcG9ydCB0eXBlIHsgRGVjaXNpb25FdmlkZW5jZSwgU2VsZWN0aW9uRXZpZGVuY2UgfSBmcm9tICcuLi9kZWNpZGUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1NlbGVjdGVkRXZlbnQsXG4gIEZsb3dTdGFnZUV2ZW50LFxufSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcblxuLyoqIE9uZSByZWNvcmRlZCBkZWNpc2lvbi9zZWxlY3Rpb24gZXZlbnQgKFJGQy0wMDMgRDUpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250cm9sRGVjaXNpb25SZWNvcmQge1xuICAvKiogcnVudGltZVN0YWdlSWQgb2YgdGhlIGRlY2lkZXIvc2VsZWN0b3IgZXhlY3V0aW9uIHN0ZXAuICovXG4gIGRlY2lkZXJSdW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICAvKiogQ2hvc2VuIGJyYW5jaCBkaXNwbGF5IG5hbWUgKGRlY2lkZXIpIG9yIHNlbGVjdGVkIG5hbWVzIChzZWxlY3RvcikuICovXG4gIGNob3Nlbjogc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBTdHJ1Y3R1cmVkIGV2aWRlbmNlIGZyb20gZGVjaWRlKCkvc2VsZWN0KCksIHdoZW4gdGhlIHN0YWdlIHVzZWQgdGhlbS4gKi9cbiAgZXZpZGVuY2U/OiBEZWNpc2lvbkV2aWRlbmNlIHwgU2VsZWN0aW9uRXZpZGVuY2U7XG4gIC8qKlxuICAgKiBUaGUgZGVjaWRlKCkgcnVsZSBsYWJlbCB0aGF0IHByb2R1Y2VkIHRoZSBkZWNpc2lvbiAoZS5nLiAnR29vZCBjcmVkaXQnKS5cbiAgICogRGVjaWRlcnMgb25seSDigJQgYSBzZWxlY3RvciBwaWNrcyBOIGJyYW5jaGVzIGFuZCBubyBzaW5nbGUgbGFiZWxcbiAgICogYXR0cmlidXRlcyB0byBhbGwgb2YgdGhlbSAoaW5zcGVjdCBgZXZpZGVuY2VgIGluc3RlYWQpLlxuICAgKi9cbiAgcnVsZUxhYmVsPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyb2xEZXBSZWNvcmRlck9wdGlvbnMge1xuICAvKiogUmVjb3JkZXIgaWQuIERlZmF1bHRzIHRvIGBjb250cm9sLWRlcHMtTmAgKGF1dG8taW5jcmVtZW50ZWQpLiAqL1xuICBpZD86IHN0cmluZztcbn1cblxuLyoqIEEgZGVjaXNpb24gYXdhaXRpbmcgYnJhbmNoLWVudHJ5IGNvcnJlbGF0aW9uLiAqL1xuaW50ZXJmYWNlIFBlbmRpbmdEZWNpc2lvbiB7XG4gIGRlY2lkZXJJZDogc3RyaW5nO1xuICAvKiogSG93IG1hbnkgYnJhbmNoIGVudHJpZXMgYXJlIHN0aWxsIGV4cGVjdGVkIChkZWNpZGVyOiAxLCBzZWxlY3RvcjogTikuICovXG4gIHJlbWFpbmluZzogbnVtYmVyO1xufVxuXG5sZXQgX2NvdW50ZXIgPSAwO1xuXG4vKipcbiAqIEZhY3Rvcnkg4oCUIG1hdGNoZXMgdGhlIGB0b3BvbG9neVJlY29yZGVyKClgIC8gYGluT3V0UmVjb3JkZXIoKWAgc3R5bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250cm9sRGVwUmVjb3JkZXIob3B0aW9uczogQ29udHJvbERlcFJlY29yZGVyT3B0aW9ucyA9IHt9KTogQ29udHJvbERlcFJlY29yZGVyIHtcbiAgcmV0dXJuIG5ldyBDb250cm9sRGVwUmVjb3JkZXIob3B0aW9ucyk7XG59XG5cbi8qKlxuICogU3RhdGVmdWwgYWNjdW11bGF0b3IgdGhhdCB3YXRjaGVzIEZsb3dSZWNvcmRlciBldmVudHMgYW5kIGFuc3dlcnNcbiAqIFwid2hpY2ggZGVjaXNpb24gYWxsb3dlZCB0aGlzIHN0YWdlIHRvIHJ1bj9cIiBBdHRhY2ggdmlhXG4gKiBgZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihyZWNvcmRlcilgIChvciBgYXR0YWNoRmxvd1JlY29yZGVyYCkuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb250cm9sRGVwUmVjb3JkZXIgaW1wbGVtZW50cyBGbG93UmVjb3JkZXIge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKiBSdW50aW1lIGFuY2VzdG9yIGNoYWluOiBydW50aW1lU3RhZ2VJZCDihpIgcGFyZW50UnVudGltZVN0YWdlSWQgKEQxKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnRPZiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIC8qKiBSZWNvcmRlZCBkZWNpc2lvbnMsIGtleWVkIGJ5IGRlY2lkZXIgcnVudGltZVN0YWdlSWQuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVjaXNpb25zID0gbmV3IE1hcDxzdHJpbmcsIENvbnRyb2xEZWNpc2lvblJlY29yZD4oKTtcbiAgLyoqIEJyYW5jaC1lbnRyeSBydW50aW1lU3RhZ2VJZCDihpIgZ292ZXJuaW5nIGRlY2lkZXIgcnVudGltZVN0YWdlSWQuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYnJhbmNoRW50cnlUb0RlY2lzaW9uID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgLyoqIERlY2lzaW9ucyB3aG9zZSBicmFuY2ggZW50cmllcyBoYXZlIG5vdCBhbGwgYmVlbiBzZWVuIHlldC4gKi9cbiAgcHJpdmF0ZSBwZW5kaW5nOiBQZW5kaW5nRGVjaXNpb25bXSA9IFtdO1xuICAvKiogU3RhZ2UgaWRzIHRoYXQgYWxyZWFkeSBjb25zdW1lZCBhIHBlbmRpbmcgc2xvdCAoZW50cnkgT1IgZXJyb3IpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnN1bWVkU2xvdHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgLyoqIENvbnZlbnRpb24gNCDigJQgcnVuSWQgb2YgdGhlIHJ1biBjdXJyZW50bHkgYmVpbmcgcmVjb3JkZWQuICovXG4gIHByaXZhdGUgbGFzdFJ1bklkPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENvbnRyb2xEZXBSZWNvcmRlck9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuaWQgPSBvcHRpb25zLmlkID8/IGBjb250cm9sLWRlcHMtJHsrK19jb3VudGVyfWA7XG4gIH1cblxuICAvLyDilIDilIAgRmxvd1JlY29yZGVyIGhvb2tzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIG9uRGVjaXNpb24oZXZlbnQ6IEZsb3dEZWNpc2lvbkV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY3R4ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dDtcbiAgICBpZiAoIWN0eCkgcmV0dXJuO1xuICAgIHRoaXMucmVzZXRJZk5ld1J1bihjdHgucnVuSWQpO1xuXG4gICAgY29uc3QgZGVjaWRlcklkID0gY3R4LnJ1bnRpbWVTdGFnZUlkO1xuICAgIGNvbnN0IHJ1bGVMYWJlbCA9IG1hdGNoZWRSdWxlTGFiZWwoZXZlbnQuZXZpZGVuY2UpO1xuICAgIHRoaXMuZGVjaXNpb25zLnNldChkZWNpZGVySWQsIHtcbiAgICAgIGRlY2lkZXJSdW50aW1lU3RhZ2VJZDogZGVjaWRlcklkLFxuICAgICAgY2hvc2VuOiBldmVudC5jaG9zZW4sXG4gICAgICAuLi4oZXZlbnQuZXZpZGVuY2UgJiYgeyBldmlkZW5jZTogZXZlbnQuZXZpZGVuY2UgfSksXG4gICAgICAuLi4ocnVsZUxhYmVsICE9PSB1bmRlZmluZWQgJiYgeyBydWxlTGFiZWwgfSksXG4gICAgfSk7XG4gICAgdGhpcy5wZW5kaW5nLnB1c2goeyBkZWNpZGVySWQsIHJlbWFpbmluZzogMSB9KTtcbiAgfVxuXG4gIG9uU2VsZWN0ZWQoZXZlbnQ6IEZsb3dTZWxlY3RlZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY3R4ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dDtcbiAgICBpZiAoIWN0eCkgcmV0dXJuO1xuICAgIHRoaXMucmVzZXRJZk5ld1J1bihjdHgucnVuSWQpO1xuICAgIGlmIChldmVudC5zZWxlY3RlZC5sZW5ndGggPT09IDApIHJldHVybjsgLy8gbm90aGluZyBzZWxlY3RlZCDihpIgbm90aGluZyBnb3Zlcm5lZFxuXG4gICAgY29uc3QgZGVjaWRlcklkID0gY3R4LnJ1bnRpbWVTdGFnZUlkO1xuICAgIHRoaXMuZGVjaXNpb25zLnNldChkZWNpZGVySWQsIHtcbiAgICAgIGRlY2lkZXJSdW50aW1lU3RhZ2VJZDogZGVjaWRlcklkLFxuICAgICAgY2hvc2VuOiBbLi4uZXZlbnQuc2VsZWN0ZWRdLFxuICAgICAgLi4uKGV2ZW50LmV2aWRlbmNlICYmIHsgZXZpZGVuY2U6IGV2ZW50LmV2aWRlbmNlIH0pLFxuICAgIH0pO1xuICAgIHRoaXMucGVuZGluZy5wdXNoKHsgZGVjaWRlcklkLCByZW1haW5pbmc6IGV2ZW50LnNlbGVjdGVkLmxlbmd0aCB9KTtcbiAgfVxuXG4gIG9uU3RhZ2VFeGVjdXRlZChldmVudDogRmxvd1N0YWdlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdHggPSBldmVudC50cmF2ZXJzYWxDb250ZXh0O1xuICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgdGhpcy5yZXNldElmTmV3UnVuKGN0eC5ydW5JZCk7XG5cbiAgICBjb25zdCB7IHJ1bnRpbWVTdGFnZUlkLCBwYXJlbnRSdW50aW1lU3RhZ2VJZCB9ID0gY3R4O1xuICAgIGlmIChwYXJlbnRSdW50aW1lU3RhZ2VJZCkge1xuICAgICAgdGhpcy5wYXJlbnRPZi5zZXQocnVudGltZVN0YWdlSWQsIHBhcmVudFJ1bnRpbWVTdGFnZUlkKTtcbiAgICAgIHRoaXMuY29uc3VtZVBlbmRpbmdTbG90KHJ1bnRpbWVTdGFnZUlkLCBwYXJlbnRSdW50aW1lU3RhZ2VJZCwgLyogcmVnaXN0ZXIgKi8gdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEEgYnJhbmNoIHRoYXQgdGhyb3dzIG5ldmVyIGZpcmVzIGBvblN0YWdlRXhlY3V0ZWRgIOKAlCB3aXRob3V0IHRoaXMgaG9va1xuICAgKiBpdHMgcGVuZGluZyBzbG90IHdvdWxkIGxlYWsgYW5kIHRoZSBwb3N0LWZhbi1vdXQgY29udmVyZ2VuY2Ugc3RhZ2VcbiAgICogKHdob3NlIGNvbnRleHQgYWxzbyBjaGFpbnMgdG8gdGhlIHNlbGVjdG9yKSB3b3VsZCBiZSBtaXNhdHRyaWJ1dGVkIGFzXG4gICAqIGEgYnJhbmNoIGVudHJ5IHVuZGVyIGJlc3QtZWZmb3J0IChgZmFpbEZhc3Q6IGZhbHNlYCkgZmFuLW91dHMuXG4gICAqL1xuICBvbkVycm9yKGV2ZW50OiBGbG93RXJyb3JFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGN0eCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ7XG4gICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICB0aGlzLnJlc2V0SWZOZXdSdW4oY3R4LnJ1bklkKTtcbiAgICBpZiAoY3R4LnBhcmVudFJ1bnRpbWVTdGFnZUlkKSB7XG4gICAgICAvLyBSZWNvcmQgdGhlIGNoYWluIEFORCBhdHRyaWJ1dGUgdGhlIGZhaWxlZCBzdGFnZSB0byBpdHMgZGVjaXNpb24g4oCUXG4gICAgICAvLyB0aGUgc3RhZ2UgUkFOIChhbmQgbWF5IGhhdmUgY29tbWl0dGVkIHBhcnRpYWwgd3JpdGVzKSBiZWNhdXNlIHRoZVxuICAgICAgLy8gZGVjaXNpb24gY2hvc2UgaXQ7IGZhaWxpbmcgYWZ0ZXJ3YXJkcyBkb2Vzbid0IHVuZG8gdGhlIGRlcGVuZGVuY3kuXG4gICAgICB0aGlzLnBhcmVudE9mLnNldChjdHgucnVudGltZVN0YWdlSWQsIGN0eC5wYXJlbnRSdW50aW1lU3RhZ2VJZCk7XG4gICAgICB0aGlzLmNvbnN1bWVQZW5kaW5nU2xvdChjdHgucnVudGltZVN0YWdlSWQsIGN0eC5wYXJlbnRSdW50aW1lU3RhZ2VJZCwgLyogcmVnaXN0ZXIgKi8gdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIFF1ZXJpZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIE5FQVJFU1QgZ292ZXJuaW5nIGRlY2lzaW9uIGZvciBhbiBleGVjdXRpb24gc3RlcDogd2Fsa3MgdGhlXG4gICAqIHJ1bnRpbWUgYW5jZXN0b3IgY2hhaW4gKHRoZSBzdGVwIGl0c2VsZiBmaXJzdCkgdW50aWwgaXQgaGl0cyBhXG4gICAqIHJlZ2lzdGVyZWQgYnJhbmNoIGVudHJ5LiBgdW5kZWZpbmVkYCB3aGVuIHRoZSBzdGVwIGlzIG5vdCBkb3duc3RyZWFtIG9mXG4gICAqIGFueSByZWNvcmRlZCBkZWNpc2lvbi5cbiAgICovXG4gIGxvb2t1cChydW50aW1lU3RhZ2VJZDogc3RyaW5nKTogQ29udHJvbERlcGVuZGVuY3kgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBsZXQgY3VyOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBydW50aW1lU3RhZ2VJZDtcbiAgICB3aGlsZSAoY3VyICE9PSB1bmRlZmluZWQgJiYgIXNlZW4uaGFzKGN1cikpIHtcbiAgICAgIHNlZW4uYWRkKGN1cik7XG4gICAgICBjb25zdCBkZWNpZGVySWQgPSB0aGlzLmJyYW5jaEVudHJ5VG9EZWNpc2lvbi5nZXQoY3VyKTtcbiAgICAgIGlmIChkZWNpZGVySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCByZWNvcmQgPSB0aGlzLmRlY2lzaW9ucy5nZXQoZGVjaWRlcklkKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkZWNpZGVySWQsXG4gICAgICAgICAgLi4uKHJlY29yZD8ucnVsZUxhYmVsICE9PSB1bmRlZmluZWQgJiYgeyBsYWJlbDogcmVjb3JkLnJ1bGVMYWJlbCB9KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGN1ciA9IHRoaXMucGFyZW50T2YuZ2V0KGN1cik7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogVGhlIGxvb2t1cCBhcyBhIGJhcmUgZnVuY3Rpb24g4oCUIHBsdWcgaW50byBgY2F1c2FsQ2hhaW4oLi4uLCB7IGNvbnRyb2xEZXBzIH0pYC4gKi9cbiAgYXNMb29rdXAoKTogQ29udHJvbERlcExvb2t1cCB7XG4gICAgcmV0dXJuIChydW50aW1lU3RhZ2VJZCkgPT4gdGhpcy5sb29rdXAocnVudGltZVN0YWdlSWQpO1xuICB9XG5cbiAgLyoqIEFsbCBkZWNpc2lvbnMgcmVjb3JkZWQgZm9yIHRoZSBjdXJyZW50IHJ1biwgaW4gZXZlbnQgb3JkZXIuICovXG4gIGdldERlY2lzaW9ucygpOiBDb250cm9sRGVjaXNpb25SZWNvcmRbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmRlY2lzaW9ucy52YWx1ZXMoKV07XG4gIH1cblxuICAvKiogUmVzZXQgYWxsIHN0YXRlIChhbHNvIGhhcHBlbnMgYXV0b21hdGljYWxseSBvbiBydW5JZCBjaGFuZ2UpLiAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnBhcmVudE9mLmNsZWFyKCk7XG4gICAgdGhpcy5kZWNpc2lvbnMuY2xlYXIoKTtcbiAgICB0aGlzLmJyYW5jaEVudHJ5VG9EZWNpc2lvbi5jbGVhcigpO1xuICAgIHRoaXMucGVuZGluZyA9IFtdO1xuICAgIHRoaXMuY29uc3VtZWRTbG90cy5jbGVhcigpO1xuICB9XG5cbiAgLy8g4pSA4pSAIEludGVybmFscyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogQ29udmVudGlvbiA0OiBhIG5ldyBydW5JZCBtZWFucyBhIG5ldyBydW4g4oCUIHJlc2V0IHRyYW5zaWVudCBzdGF0ZS4gKi9cbiAgcHJpdmF0ZSByZXNldElmTmV3UnVuKHJ1bklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAocnVuSWQgPT09IHRoaXMubGFzdFJ1bklkKSByZXR1cm47XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIHRoaXMubGFzdFJ1bklkID0gcnVuSWQ7XG4gIH1cblxuICAvKipcbiAgICogSWYgYHBhcmVudFJ1bnRpbWVTdGFnZUlkYCBpcyBhIGRlY2lkZXIgd2l0aCBhbiB1bm1hdGNoZWQgcGVuZGluZyBzbG90LFxuICAgKiBjb25zdW1lIG9uZS4gYHJlZ2lzdGVyYCBjb250cm9scyB3aGV0aGVyIHRoZSBzdGFnZSBpcyByZWNvcmRlZCBhcyBhXG4gICAqIGJyYW5jaCBlbnRyeSAoc3RhZ2UgZXhlY3V0ZWQvZXJyb3JlZCkg4oCUIGJvdGggcGF0aHMgY29uc3VtZSB0aGUgc2xvdCBzb1xuICAgKiBjb3VudHMgc3RheSBleGFjdCBldmVuIHdoZW4gYSBzdGFnZSBwcm9kdWNlcyBib3RoIGV2ZW50cy5cbiAgICovXG4gIHByaXZhdGUgY29uc3VtZVBlbmRpbmdTbG90KHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcsIHBhcmVudFJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcsIHJlZ2lzdGVyOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHJ1bnRpbWVTdGFnZUlkID09PSBwYXJlbnRSdW50aW1lU3RhZ2VJZCkgcmV0dXJuOyAvLyBzeW50aGV0aWMgc2VsZi1ldmVudHNcbiAgICBpZiAodGhpcy5jb25zdW1lZFNsb3RzLmhhcyhydW50aW1lU3RhZ2VJZCkpIHJldHVybjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wZW5kaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBwID0gdGhpcy5wZW5kaW5nW2ldO1xuICAgICAgaWYgKHAuZGVjaWRlcklkICE9PSBwYXJlbnRSdW50aW1lU3RhZ2VJZCkgY29udGludWU7XG5cbiAgICAgIHRoaXMuY29uc3VtZWRTbG90cy5hZGQocnVudGltZVN0YWdlSWQpO1xuICAgICAgaWYgKHJlZ2lzdGVyKSB0aGlzLmJyYW5jaEVudHJ5VG9EZWNpc2lvbi5zZXQocnVudGltZVN0YWdlSWQsIHAuZGVjaWRlcklkKTtcbiAgICAgIHAucmVtYWluaW5nLS07XG4gICAgICBpZiAocC5yZW1haW5pbmcgPD0gMCkgdGhpcy5wZW5kaW5nLnNwbGljZShpLCAxKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgZGVjaWRlKCkgcnVsZSBsYWJlbCB0aGF0IHByb2R1Y2VkIHRoZSBkZWNpc2lvbjogdGhlIG1hdGNoZWQgcnVsZVxuICogbWFwcGluZyB0byB0aGUgY2hvc2VuIGJyYW5jaCAoZmlyc3QgbWF0Y2hlZCBydWxlIGFzIGZhbGxiYWNrKS5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hlZFJ1bGVMYWJlbChldmlkZW5jZTogRGVjaXNpb25FdmlkZW5jZSB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghZXZpZGVuY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHJ1bGUgPVxuICAgIGV2aWRlbmNlLnJ1bGVzLmZpbmQoKHIpID0+IHIubWF0Y2hlZCAmJiByLmJyYW5jaCA9PT0gZXZpZGVuY2UuY2hvc2VuKSA/PyBldmlkZW5jZS5ydWxlcy5maW5kKChyKSA9PiByLm1hdGNoZWQpO1xuICByZXR1cm4gcnVsZT8ubGFiZWw7XG59XG4iXX0=
@@ -58,7 +58,7 @@
58
58
  * executor.attachEmitRecorder(tokenMeter);
59
59
  * ```
60
60
  */
61
- import type { EmitSourcePosition } from '../memory/eventPosition.js';
61
+ import type { EmitSourcePosition } from 'foottrace';
62
62
  import type { RecorderBundle } from './snapshot.js';
63
63
  /**
64
64
  * Event delivered to `EmitRecorder.onEmit`.
@@ -59,4 +59,4 @@
59
59
  * ```
60
60
  */
61
61
  export {};
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW1pdFJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9FbWl0UmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkRHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFbWl0UmVjb3JkZXIg4oCUIHRoZSB0aGlyZCBvYnNlcnZlciBjaGFubmVsLCBhbG9uZ3NpZGUgYFNjb3BlUmVjb3JkZXJgXG4gKiAoc2NvcGUgZGF0YS1mbG93KSBhbmQgYEZsb3dSZWNvcmRlcmAgKGNvbnRyb2wtZmxvdykuXG4gKlxuICogIyMgV2h5IHRoaXMgZXhpc3RzXG4gKlxuICogVGhlIGZpcnN0IHR3byBjaGFubmVscyBjYXB0dXJlIHdoYXQgdGhlIExJQlJBUlkga25vd3MgYWJvdXQg4oCUIHNjb3BlXG4gKiByZWFkcy93cml0ZXMgZmlyZWQgYnkgYHNldFZhbHVlYCwgYW5kIGNvbnRyb2wtZmxvdyBldmVudHMgZmlyZWQgYnkgdGhlXG4gKiB0cmF2ZXJzZXIuIEJ1dCAqKnVzZXItZW1pdHRlZCBzdHJ1Y3R1cmVkIGV2ZW50cyoqIOKAlCB0aGluZ3MgYSBzdGFnZVxuICogZnVuY3Rpb24gd2FudHMgdG8gc3VyZmFjZSBmb3Igb2JzZXJ2YWJpbGl0eSAoTExNIHRva2VucywgYmlsbGluZyBtZXRyaWNzLFxuICogYXV0aCBkZWNpc2lvbnMsIGRvbWFpbiBtaWxlc3RvbmVzKSDigJQgaGF2ZSBub3doZXJlIHRvIGdvIHRvZGF5LiBUaGV5IGxhbmRcbiAqIGluIHVub2JzZXJ2ZWQgYERpYWdub3N0aWNDb2xsZWN0b3JgIHNpZGUgYmFncyB0aGF0IG5vIHJlY29yZGVyIHdhdGNoZXMuXG4gKlxuICogVGhpcyBjaGFubmVsIGNsb3NlcyB0aGF0IGdhcC4gQ29uc3VtZXIgY2FsbHMgYHNjb3BlLiRlbWl0KG5hbWUsIHBheWxvYWQpYFxuICogZnJvbSBpbnNpZGUgYSBzdGFnZTsgdGhlIGxpYnJhcnkgZW5yaWNoZXMgdGhlIGV2ZW50IHdpdGggc3RhZ2UgY29udGV4dFxuICogYW5kIGRpc3BhdGNoZXMgaXQgc3luY2hyb25vdXNseSB0byBldmVyeSBhdHRhY2hlZCBgRW1pdFJlY29yZGVyYC5cbiAqXG4gKiAjIyBEZXNpZ24gcHJvcGVydGllc1xuICpcbiAqIC0gKipQYXNzLXRocm91Z2gsIG5vdCBidWZmZXJlZC4qKiBaZXJvIGFsbG9jYXRpb24gd2hlbiBubyByZWNvcmRlciBpc1xuICogICBhdHRhY2hlZC4gRXZlbnRzIGRlbGl2ZXJlZCBzeW5jaHJvbm91c2x5LCBpbi1vcmRlciwgYXQgY2FsbCB0aW1lLlxuICogICBTYW1lIHNlbWFudGljcyBhcyBgb25SZWFkYC9gb25Xcml0ZWAgYWxyZWFkeSB1c2UuXG4gKiAtICoqTGlicmFyeS1hZ25vc3RpYyB2b2NhYnVsYXJ5LioqIEV2ZW50IG5hbWVzIGFyZSBjb25zdW1lci1jaG9zZW4gc3RyaW5ncy5cbiAqICAgQ29udmVudGlvbjogaGllcmFyY2hpY2FsIGRvdHRlZCBuYW1lcywgZS5nLiBgJ2FnZW50Zm9vdHByaW50LmxsbS50b2tlbnMnYCxcbiAqICAgYCdteWFwcC5iaWxsaW5nLnNwZW5kJ2AuIExpYnJhcnkgZW5mb3JjZXMgbm8gcmVnaXN0cnkuXG4gKiAtICoqQXV0by1lbnJpY2hlZCBjb250ZXh0LioqIEV2ZXJ5IGV2ZW50IGNhcnJpZXMgYHN0YWdlTmFtZWAsXG4gKiAgIGBydW50aW1lU3RhZ2VJZGAsIGBzdWJmbG93UGF0aGAsIGBwaXBlbGluZUlkYCwgYHRpbWVzdGFtcGAuIENvbnN1bWVyc1xuICogICBuZXZlciBuZWVkIHRvIHRocmVhZCBleGVjdXRpb24gY29udGV4dCB0aHJvdWdoIHRoZWlyIGVtaXQgcGF5bG9hZHMuXG4gKiAtICoqUmVkYWN0aW9uLWF3YXJlLioqIGBSZWRhY3Rpb25Qb2xpY3kuZW1pdFBhdHRlcm5zYCBtYXRjaGVzIGV2ZW50IG5hbWVzXG4gKiAgIGJlZm9yZSBkaXNwYXRjaCDigJQgbWF0Y2hlZCBldmVudHMgaGF2ZSB0aGVpciBwYXlsb2FkIHJlcGxhY2VkIHdpdGhcbiAqICAgYCdbUkVEQUNURURdJ2Agc28gc2VjcmV0cyBjYW4ndCBsZWFrIHZpYSBlbWl0LlxuICpcbiAqICMjIFJlbGF0aW9uc2hpcCB0byBleGlzdGluZyBjaGFubmVsc1xuICpcbiAqIHwgQ2hhbm5lbCAgICAgICAgIHwgRmlyZXMgd2hlbiAgICAgICAgICAgICAgICAgICAgICAgICB8IEJ1aWx0LWluIGNvbnN1bWVycyAgICAgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8IGBTY29wZVJlY29yZGVyYCAgICAgIHwgc2NvcGUgcmVhZC93cml0ZS9jb21taXQgICAgICAgICAgICB8IERlYnVnUmVjb3JkZXIsIE1ldHJpY1JlY29yZGVyIHxcbiAqIHwgYEZsb3dSZWNvcmRlcmAgIHwgdHJhdmVyc2FsIHRyYW5zaXRpb25zICAgICAgICAgICAgICB8IE5hcnJhdGl2ZUZsb3dSZWNvcmRlciwgZXRjLiB8XG4gKiB8IGBFbWl0UmVjb3JkZXJgICB8IGNvbnN1bWVyIGNhbGxzIGBzY29wZS4kZW1pdCguLi4pYCAgfCAobm9uZSBzaGlwcyB0b2RheTsgUGhhc2UgMy5YIGFkZHMgTWVtb3J5RW1pdFJlY29yZGVyKSB8XG4gKlxuICogYENvbWJpbmVkUmVjb3JkZXJgIChmcm9tIGAuL0NvbWJpbmVkUmVjb3JkZXIudHNgKSBpbnRlcnNlY3RzIGFsbCB0aHJlZVxuICogdmlhIGBQYXJ0aWFsPC4uLj5gLiBBIGNvbnN1bWVyIGNhbiB3cml0ZSBPTkUgb2JqZWN0IGltcGxlbWVudGluZyBhbnlcbiAqIGNvbWJpbmF0aW9uOyBgZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihyKWAgZHVjay10eXBlcyBhbmQgcm91dGVzXG4gKiB0byB0aGUgcmlnaHQgY2hhbm5lbChzKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgdG9rZW5NZXRlcjogRW1pdFJlY29yZGVyID0ge1xuICogICBpZDogJ3Rva2VuLW1ldGVyJyxcbiAqICAgb25FbWl0KGV2ZW50KSB7XG4gKiAgICAgaWYgKGV2ZW50Lm5hbWUgPT09ICdhZ2VudGZvb3RwcmludC5sbG0udG9rZW5zJykge1xuICogICAgICAgdGhpcy50b3RhbCArPSAoZXZlbnQucGF5bG9hZCBhcyB7IGlucHV0OiBudW1iZXI7IG91dHB1dDogbnVtYmVyIH0pLmlucHV0O1xuICogICAgIH1cbiAqICAgfSxcbiAqICAgdG90YWw6IDAsXG4gKiB9IGFzIGFueTtcbiAqXG4gKiBleGVjdXRvci5hdHRhY2hFbWl0UmVjb3JkZXIodG9rZW5NZXRlcik7XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEVtaXRTb3VyY2VQb3NpdGlvbiB9IGZyb20gJy4uL21lbW9yeS9ldmVudFBvc2l0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgUmVjb3JkZXJCdW5kbGUgfSBmcm9tICcuL3NuYXBzaG90LmpzJztcblxuLyoqXG4gKiBFdmVudCBkZWxpdmVyZWQgdG8gYEVtaXRSZWNvcmRlci5vbkVtaXRgLlxuICpcbiAqIE5hbWUgKyBwYXlsb2FkIGFyZSBjb25zdW1lci1zdXBwbGllZCB2aWEgYHNjb3BlLiRlbWl0KG5hbWUsIHBheWxvYWQpYC5cbiAqIEV2ZXJ5dGhpbmcgZWxzZSBpcyBsaWJyYXJ5LWVucmljaGVkIGF0IGRpc3BhdGNoIHRpbWUgZnJvbSB0aGUgY3VycmVudFxuICogc3RhZ2UncyBleGVjdXRpb24gY29udGV4dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWl0RXZlbnQge1xuICAvKipcbiAgICogQ29uc3VtZXItc3VwcGxpZWQgZXZlbnQgbmFtZS4gQ29udmVudGlvbjogaGllcmFyY2hpY2FsIGRvdHRlZCBuYW1lc3BhY2VcbiAgICogKGUuZy4gYCdhZ2VudGZvb3RwcmludC5sbG0udG9rZW5zJ2AsIGAnbXlhcHAuYmlsbGluZy5zcGVuZCdgKS4gS2VlcHNcbiAgICogdm9jYWJ1bGFyaWVzIGNvbGxpc2lvbi1mcmVlIGFjcm9zcyBsaWJyYXJpZXMvYXBwcyB3aXRob3V0IHJlcXVpcmluZyBhXG4gICAqIGNlbnRyYWwgcmVnaXN0cnkuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbnN1bWVyLXN1cHBsaWVkIHBheWxvYWQuIFNoYXBlIGlzIHVwIHRvIHRoZSBjb25zdW1lciBhbmQgdGhlaXJcbiAgICogY29udmVudGlvbjsgbGlicmFyeSB0cmVhdHMgaXQgYXMgb3BhcXVlIGFuZCBwYXNzZXMgdGhyb3VnaCB1bmNoYW5nZWRcbiAgICogKG1vZHVsbyByZWRhY3Rpb24g4oCUIHNlZSBgUmVkYWN0aW9uUG9saWN5LmVtaXRQYXR0ZXJuc2ApLlxuICAgKlxuICAgKiBXaGVuIHJlZGFjdGVkLCByZXBsYWNlZCB3aXRoIHRoZSBzdHJpbmcgYCdbUkVEQUNURURdJ2AuXG4gICAqL1xuICByZWFkb25seSBwYXlsb2FkOiB1bmtub3duO1xuXG4gIC8qKiBOYW1lIG9mIHRoZSBzdGFnZSB0aGF0IGVtaXR0ZWQgdGhpcyBldmVudC4gKi9cbiAgcmVhZG9ubHkgc3RhZ2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSBwZXItZXhlY3V0aW9uLXN0ZXAgaWRlbnRpZmllciDigJQgdGhlIHNhbWUgdmFsdWUgcmVjb3JkZXIgZXZlbnRzXG4gICAqIGFuZCBjb21taXQtbG9nIGVudHJpZXMgY2FycnkuIFNlZSBgcnVudGltZVN0YWdlSWQudHNgIGZvciBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdWJmbG93IHBhdGggZnJvbSB0aGUgb3V0ZXJtb3N0IHBhcmVudCBkb3duIHRvIHRoZSBzdWJmbG93IHRoYXQgZW1pdHRlZFxuICAgKiB0aGlzIGV2ZW50LiBFbXB0eSBhcnJheSB3aGVuIHRoZSBlbWl0IGNhbWUgZnJvbSB0aGUgcm9vdCBmbG93Y2hhcnQuXG4gICAqIE1hdGNoZXMgdGhlIGNvbnZlbnRpb24gdXNlZCBieSBgRmxvd1BhdXNlRXZlbnQuc3ViZmxvd1BhdGhgLFxuICAgKiBgRmxvd2NoYXJ0Q2hlY2twb2ludC5zdWJmbG93UGF0aGAsIGV0Yy5cbiAgICovXG4gIHJlYWRvbmx5IHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKiogUGlwZWxpbmUvcnVuIGlkZW50aWZpZXIgKG1hdGNoZXMgYFJlY29yZGVyQ29udGV4dC5waXBlbGluZUlkYCkuICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lSWQ6IHN0cmluZztcblxuICAvKiogRW1pc3Npb24gdGltZXN0YW1wIGluIG1pbGxpc2Vjb25kcyBzaW5jZSBlcG9jaCAoYERhdGUubm93KClgKS4gKi9cbiAgcmVhZG9ubHkgdGltZXN0YW1wOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNvdXJjZS10aW1lIGNvbW1pdHRlZCBwcmVmaXggaW4gdGhpcyBzdGFnZSdzIG93biBsb2csIGNhcHR1cmVkIGJlZm9yZVxuICAgKiBvYnNlcnZlciBkaXNwYXRjaC4gTm90IHRoaXMgc3RhZ2UncyBmdXR1cmUgY29tbWl0IG9yIHVuY29tbWl0dGVkIHN0YXRlLlxuICAgKiBNYXRjaCBsb2dSdW5JZCArIGRyaWxsUGF0aCBhZ2FpbnN0IHRoZSBzb3VyY2UncyBsb2dBZGRyZXNzIGJlZm9yZSBmb2xkaW5nO1xuICAgKiBhIG5hbWVkIG5lc3RlZCBoaXN0b3J5IGNhbiBiZSB1bmF2YWlsYWJsZSAoZS5nLiBhIHBhdXNlZCBzdWJmbG93KS5cbiAgICogQWJzZW50IG9uIG9sZC9tYW51YWwgZXZlbnRzIGFuZCBzY29wZXMgd2l0aG91dCBhIGJvdW5kIGVuZ2luZSBsb2cuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQb3NpdGlvbj86IEVtaXRTb3VyY2VQb3NpdGlvbjtcbn1cblxuLyoqXG4gKiBQbHVnZ2FibGUgb2JzZXJ2ZXIgZm9yIGNvbnN1bWVyLWVtaXR0ZWQgc3RydWN0dXJlZCBldmVudHMuXG4gKlxuICogQWxsIG1ldGhvZHMgYXJlIG9wdGlvbmFsOyBpbXBsZW1lbnQgb25seSB3aGF0IHlvdSBjYXJlIGFib3V0LiBSZWNvcmRlcnNcbiAqIGFyZSBpbnZva2VkIHN5bmNocm9ub3VzbHkgaW4gYXR0YWNobWVudCBvcmRlci4gSWYgYSByZWNvcmRlciB0aHJvd3MsIHRoZVxuICogZXJyb3IgaXMgY2F1Z2h0IGFuZCBpc29sYXRlZCDigJQgb3RoZXIgcmVjb3JkZXJzIGNvbnRpbnVlIHRvIHJlY2VpdmUgdGhlXG4gKiBldmVudCBhbmQgdGhlIGVtaXR0aW5nIHN0YWdlIGlzIHVuYWZmZWN0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1pdFJlY29yZGVyIHtcbiAgLyoqXG4gICAqIFN0YWJsZSBpZGVudGlmaWVyIGZvciBpZGVtcG90ZW50IGF0dGFjaC9kZXRhY2guIFJlLWF0dGFjaGluZyB3aXRoIHRoZVxuICAgKiBzYW1lIGlkIHJlcGxhY2VzIHRoZSBwcmV2aW91cyByZWdpc3RyYXRpb24gb24gdGhlIGV4ZWN1dG9yLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKiogQ2FsbGVkIGZvciBldmVyeSBgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgIGNhbGwgaW4gYW55IHN0YWdlLiAqL1xuICBvbkVtaXQ/KGV2ZW50OiBFbWl0RXZlbnQpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbDogcmVzZXQgcmVjb3JkZXItaW50ZXJuYWwgc3RhdGUgYmV0d2VlbiBydW5zLiBDYWxsZWQgYnkgdGhlXG4gICAqIGV4ZWN1dG9yIGJlZm9yZSBlYWNoIGBydW4oKWAuXG4gICAqL1xuICBjbGVhcj8oKTogdm9pZDtcblxuICAvKipcbiAgICogT3B0aW9uYWw6IGV4cG9zZSBjb2xsZWN0ZWQgZGF0YSBmb3IgaW5jbHVzaW9uIGluXG4gICAqIGBleGVjdXRvci5nZXRTbmFwc2hvdCgpLnJlY29yZGVyc2AuXG4gICAqL1xuICB0b1NuYXBzaG90PygpOiBSZWNvcmRlckJ1bmRsZTtcbn1cbiJdfQ==
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW1pdFJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9FbWl0UmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkRHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFbWl0UmVjb3JkZXIg4oCUIHRoZSB0aGlyZCBvYnNlcnZlciBjaGFubmVsLCBhbG9uZ3NpZGUgYFNjb3BlUmVjb3JkZXJgXG4gKiAoc2NvcGUgZGF0YS1mbG93KSBhbmQgYEZsb3dSZWNvcmRlcmAgKGNvbnRyb2wtZmxvdykuXG4gKlxuICogIyMgV2h5IHRoaXMgZXhpc3RzXG4gKlxuICogVGhlIGZpcnN0IHR3byBjaGFubmVscyBjYXB0dXJlIHdoYXQgdGhlIExJQlJBUlkga25vd3MgYWJvdXQg4oCUIHNjb3BlXG4gKiByZWFkcy93cml0ZXMgZmlyZWQgYnkgYHNldFZhbHVlYCwgYW5kIGNvbnRyb2wtZmxvdyBldmVudHMgZmlyZWQgYnkgdGhlXG4gKiB0cmF2ZXJzZXIuIEJ1dCAqKnVzZXItZW1pdHRlZCBzdHJ1Y3R1cmVkIGV2ZW50cyoqIOKAlCB0aGluZ3MgYSBzdGFnZVxuICogZnVuY3Rpb24gd2FudHMgdG8gc3VyZmFjZSBmb3Igb2JzZXJ2YWJpbGl0eSAoTExNIHRva2VucywgYmlsbGluZyBtZXRyaWNzLFxuICogYXV0aCBkZWNpc2lvbnMsIGRvbWFpbiBtaWxlc3RvbmVzKSDigJQgaGF2ZSBub3doZXJlIHRvIGdvIHRvZGF5LiBUaGV5IGxhbmRcbiAqIGluIHVub2JzZXJ2ZWQgYERpYWdub3N0aWNDb2xsZWN0b3JgIHNpZGUgYmFncyB0aGF0IG5vIHJlY29yZGVyIHdhdGNoZXMuXG4gKlxuICogVGhpcyBjaGFubmVsIGNsb3NlcyB0aGF0IGdhcC4gQ29uc3VtZXIgY2FsbHMgYHNjb3BlLiRlbWl0KG5hbWUsIHBheWxvYWQpYFxuICogZnJvbSBpbnNpZGUgYSBzdGFnZTsgdGhlIGxpYnJhcnkgZW5yaWNoZXMgdGhlIGV2ZW50IHdpdGggc3RhZ2UgY29udGV4dFxuICogYW5kIGRpc3BhdGNoZXMgaXQgc3luY2hyb25vdXNseSB0byBldmVyeSBhdHRhY2hlZCBgRW1pdFJlY29yZGVyYC5cbiAqXG4gKiAjIyBEZXNpZ24gcHJvcGVydGllc1xuICpcbiAqIC0gKipQYXNzLXRocm91Z2gsIG5vdCBidWZmZXJlZC4qKiBaZXJvIGFsbG9jYXRpb24gd2hlbiBubyByZWNvcmRlciBpc1xuICogICBhdHRhY2hlZC4gRXZlbnRzIGRlbGl2ZXJlZCBzeW5jaHJvbm91c2x5LCBpbi1vcmRlciwgYXQgY2FsbCB0aW1lLlxuICogICBTYW1lIHNlbWFudGljcyBhcyBgb25SZWFkYC9gb25Xcml0ZWAgYWxyZWFkeSB1c2UuXG4gKiAtICoqTGlicmFyeS1hZ25vc3RpYyB2b2NhYnVsYXJ5LioqIEV2ZW50IG5hbWVzIGFyZSBjb25zdW1lci1jaG9zZW4gc3RyaW5ncy5cbiAqICAgQ29udmVudGlvbjogaGllcmFyY2hpY2FsIGRvdHRlZCBuYW1lcywgZS5nLiBgJ2FnZW50Zm9vdHByaW50LmxsbS50b2tlbnMnYCxcbiAqICAgYCdteWFwcC5iaWxsaW5nLnNwZW5kJ2AuIExpYnJhcnkgZW5mb3JjZXMgbm8gcmVnaXN0cnkuXG4gKiAtICoqQXV0by1lbnJpY2hlZCBjb250ZXh0LioqIEV2ZXJ5IGV2ZW50IGNhcnJpZXMgYHN0YWdlTmFtZWAsXG4gKiAgIGBydW50aW1lU3RhZ2VJZGAsIGBzdWJmbG93UGF0aGAsIGBwaXBlbGluZUlkYCwgYHRpbWVzdGFtcGAuIENvbnN1bWVyc1xuICogICBuZXZlciBuZWVkIHRvIHRocmVhZCBleGVjdXRpb24gY29udGV4dCB0aHJvdWdoIHRoZWlyIGVtaXQgcGF5bG9hZHMuXG4gKiAtICoqUmVkYWN0aW9uLWF3YXJlLioqIGBSZWRhY3Rpb25Qb2xpY3kuZW1pdFBhdHRlcm5zYCBtYXRjaGVzIGV2ZW50IG5hbWVzXG4gKiAgIGJlZm9yZSBkaXNwYXRjaCDigJQgbWF0Y2hlZCBldmVudHMgaGF2ZSB0aGVpciBwYXlsb2FkIHJlcGxhY2VkIHdpdGhcbiAqICAgYCdbUkVEQUNURURdJ2Agc28gc2VjcmV0cyBjYW4ndCBsZWFrIHZpYSBlbWl0LlxuICpcbiAqICMjIFJlbGF0aW9uc2hpcCB0byBleGlzdGluZyBjaGFubmVsc1xuICpcbiAqIHwgQ2hhbm5lbCAgICAgICAgIHwgRmlyZXMgd2hlbiAgICAgICAgICAgICAgICAgICAgICAgICB8IEJ1aWx0LWluIGNvbnN1bWVycyAgICAgfFxuICogfC0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18XG4gKiB8IGBTY29wZVJlY29yZGVyYCAgICAgIHwgc2NvcGUgcmVhZC93cml0ZS9jb21taXQgICAgICAgICAgICB8IERlYnVnUmVjb3JkZXIsIE1ldHJpY1JlY29yZGVyIHxcbiAqIHwgYEZsb3dSZWNvcmRlcmAgIHwgdHJhdmVyc2FsIHRyYW5zaXRpb25zICAgICAgICAgICAgICB8IE5hcnJhdGl2ZUZsb3dSZWNvcmRlciwgZXRjLiB8XG4gKiB8IGBFbWl0UmVjb3JkZXJgICB8IGNvbnN1bWVyIGNhbGxzIGBzY29wZS4kZW1pdCguLi4pYCAgfCAobm9uZSBzaGlwcyB0b2RheTsgUGhhc2UgMy5YIGFkZHMgTWVtb3J5RW1pdFJlY29yZGVyKSB8XG4gKlxuICogYENvbWJpbmVkUmVjb3JkZXJgIChmcm9tIGAuL0NvbWJpbmVkUmVjb3JkZXIudHNgKSBpbnRlcnNlY3RzIGFsbCB0aHJlZVxuICogdmlhIGBQYXJ0aWFsPC4uLj5gLiBBIGNvbnN1bWVyIGNhbiB3cml0ZSBPTkUgb2JqZWN0IGltcGxlbWVudGluZyBhbnlcbiAqIGNvbWJpbmF0aW9uOyBgZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihyKWAgZHVjay10eXBlcyBhbmQgcm91dGVzXG4gKiB0byB0aGUgcmlnaHQgY2hhbm5lbChzKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgdG9rZW5NZXRlcjogRW1pdFJlY29yZGVyID0ge1xuICogICBpZDogJ3Rva2VuLW1ldGVyJyxcbiAqICAgb25FbWl0KGV2ZW50KSB7XG4gKiAgICAgaWYgKGV2ZW50Lm5hbWUgPT09ICdhZ2VudGZvb3RwcmludC5sbG0udG9rZW5zJykge1xuICogICAgICAgdGhpcy50b3RhbCArPSAoZXZlbnQucGF5bG9hZCBhcyB7IGlucHV0OiBudW1iZXI7IG91dHB1dDogbnVtYmVyIH0pLmlucHV0O1xuICogICAgIH1cbiAqICAgfSxcbiAqICAgdG90YWw6IDAsXG4gKiB9IGFzIGFueTtcbiAqXG4gKiBleGVjdXRvci5hdHRhY2hFbWl0UmVjb3JkZXIodG9rZW5NZXRlcik7XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEVtaXRTb3VyY2VQb3NpdGlvbiB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5cbmltcG9ydCB0eXBlIHsgUmVjb3JkZXJCdW5kbGUgfSBmcm9tICcuL3NuYXBzaG90LmpzJztcblxuLyoqXG4gKiBFdmVudCBkZWxpdmVyZWQgdG8gYEVtaXRSZWNvcmRlci5vbkVtaXRgLlxuICpcbiAqIE5hbWUgKyBwYXlsb2FkIGFyZSBjb25zdW1lci1zdXBwbGllZCB2aWEgYHNjb3BlLiRlbWl0KG5hbWUsIHBheWxvYWQpYC5cbiAqIEV2ZXJ5dGhpbmcgZWxzZSBpcyBsaWJyYXJ5LWVucmljaGVkIGF0IGRpc3BhdGNoIHRpbWUgZnJvbSB0aGUgY3VycmVudFxuICogc3RhZ2UncyBleGVjdXRpb24gY29udGV4dC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWl0RXZlbnQge1xuICAvKipcbiAgICogQ29uc3VtZXItc3VwcGxpZWQgZXZlbnQgbmFtZS4gQ29udmVudGlvbjogaGllcmFyY2hpY2FsIGRvdHRlZCBuYW1lc3BhY2VcbiAgICogKGUuZy4gYCdhZ2VudGZvb3RwcmludC5sbG0udG9rZW5zJ2AsIGAnbXlhcHAuYmlsbGluZy5zcGVuZCdgKS4gS2VlcHNcbiAgICogdm9jYWJ1bGFyaWVzIGNvbGxpc2lvbi1mcmVlIGFjcm9zcyBsaWJyYXJpZXMvYXBwcyB3aXRob3V0IHJlcXVpcmluZyBhXG4gICAqIGNlbnRyYWwgcmVnaXN0cnkuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbnN1bWVyLXN1cHBsaWVkIHBheWxvYWQuIFNoYXBlIGlzIHVwIHRvIHRoZSBjb25zdW1lciBhbmQgdGhlaXJcbiAgICogY29udmVudGlvbjsgbGlicmFyeSB0cmVhdHMgaXQgYXMgb3BhcXVlIGFuZCBwYXNzZXMgdGhyb3VnaCB1bmNoYW5nZWRcbiAgICogKG1vZHVsbyByZWRhY3Rpb24g4oCUIHNlZSBgUmVkYWN0aW9uUG9saWN5LmVtaXRQYXR0ZXJuc2ApLlxuICAgKlxuICAgKiBXaGVuIHJlZGFjdGVkLCByZXBsYWNlZCB3aXRoIHRoZSBzdHJpbmcgYCdbUkVEQUNURURdJ2AuXG4gICAqL1xuICByZWFkb25seSBwYXlsb2FkOiB1bmtub3duO1xuXG4gIC8qKiBOYW1lIG9mIHRoZSBzdGFnZSB0aGF0IGVtaXR0ZWQgdGhpcyBldmVudC4gKi9cbiAgcmVhZG9ubHkgc3RhZ2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSBwZXItZXhlY3V0aW9uLXN0ZXAgaWRlbnRpZmllciDigJQgdGhlIHNhbWUgdmFsdWUgcmVjb3JkZXIgZXZlbnRzXG4gICAqIGFuZCBjb21taXQtbG9nIGVudHJpZXMgY2FycnkuIFNlZSBgcnVudGltZVN0YWdlSWQudHNgIGZvciBmb3JtYXQuXG4gICAqL1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTdWJmbG93IHBhdGggZnJvbSB0aGUgb3V0ZXJtb3N0IHBhcmVudCBkb3duIHRvIHRoZSBzdWJmbG93IHRoYXQgZW1pdHRlZFxuICAgKiB0aGlzIGV2ZW50LiBFbXB0eSBhcnJheSB3aGVuIHRoZSBlbWl0IGNhbWUgZnJvbSB0aGUgcm9vdCBmbG93Y2hhcnQuXG4gICAqIE1hdGNoZXMgdGhlIGNvbnZlbnRpb24gdXNlZCBieSBgRmxvd1BhdXNlRXZlbnQuc3ViZmxvd1BhdGhgLFxuICAgKiBgRmxvd2NoYXJ0Q2hlY2twb2ludC5zdWJmbG93UGF0aGAsIGV0Yy5cbiAgICovXG4gIHJlYWRvbmx5IHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKiogUGlwZWxpbmUvcnVuIGlkZW50aWZpZXIgKG1hdGNoZXMgYFJlY29yZGVyQ29udGV4dC5waXBlbGluZUlkYCkuICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lSWQ6IHN0cmluZztcblxuICAvKiogRW1pc3Npb24gdGltZXN0YW1wIGluIG1pbGxpc2Vjb25kcyBzaW5jZSBlcG9jaCAoYERhdGUubm93KClgKS4gKi9cbiAgcmVhZG9ubHkgdGltZXN0YW1wOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNvdXJjZS10aW1lIGNvbW1pdHRlZCBwcmVmaXggaW4gdGhpcyBzdGFnZSdzIG93biBsb2csIGNhcHR1cmVkIGJlZm9yZVxuICAgKiBvYnNlcnZlciBkaXNwYXRjaC4gTm90IHRoaXMgc3RhZ2UncyBmdXR1cmUgY29tbWl0IG9yIHVuY29tbWl0dGVkIHN0YXRlLlxuICAgKiBNYXRjaCBsb2dSdW5JZCArIGRyaWxsUGF0aCBhZ2FpbnN0IHRoZSBzb3VyY2UncyBsb2dBZGRyZXNzIGJlZm9yZSBmb2xkaW5nO1xuICAgKiBhIG5hbWVkIG5lc3RlZCBoaXN0b3J5IGNhbiBiZSB1bmF2YWlsYWJsZSAoZS5nLiBhIHBhdXNlZCBzdWJmbG93KS5cbiAgICogQWJzZW50IG9uIG9sZC9tYW51YWwgZXZlbnRzIGFuZCBzY29wZXMgd2l0aG91dCBhIGJvdW5kIGVuZ2luZSBsb2cuXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VQb3NpdGlvbj86IEVtaXRTb3VyY2VQb3NpdGlvbjtcbn1cblxuLyoqXG4gKiBQbHVnZ2FibGUgb2JzZXJ2ZXIgZm9yIGNvbnN1bWVyLWVtaXR0ZWQgc3RydWN0dXJlZCBldmVudHMuXG4gKlxuICogQWxsIG1ldGhvZHMgYXJlIG9wdGlvbmFsOyBpbXBsZW1lbnQgb25seSB3aGF0IHlvdSBjYXJlIGFib3V0LiBSZWNvcmRlcnNcbiAqIGFyZSBpbnZva2VkIHN5bmNocm9ub3VzbHkgaW4gYXR0YWNobWVudCBvcmRlci4gSWYgYSByZWNvcmRlciB0aHJvd3MsIHRoZVxuICogZXJyb3IgaXMgY2F1Z2h0IGFuZCBpc29sYXRlZCDigJQgb3RoZXIgcmVjb3JkZXJzIGNvbnRpbnVlIHRvIHJlY2VpdmUgdGhlXG4gKiBldmVudCBhbmQgdGhlIGVtaXR0aW5nIHN0YWdlIGlzIHVuYWZmZWN0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1pdFJlY29yZGVyIHtcbiAgLyoqXG4gICAqIFN0YWJsZSBpZGVudGlmaWVyIGZvciBpZGVtcG90ZW50IGF0dGFjaC9kZXRhY2guIFJlLWF0dGFjaGluZyB3aXRoIHRoZVxuICAgKiBzYW1lIGlkIHJlcGxhY2VzIHRoZSBwcmV2aW91cyByZWdpc3RyYXRpb24gb24gdGhlIGV4ZWN1dG9yLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKiogQ2FsbGVkIGZvciBldmVyeSBgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgIGNhbGwgaW4gYW55IHN0YWdlLiAqL1xuICBvbkVtaXQ/KGV2ZW50OiBFbWl0RXZlbnQpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbDogcmVzZXQgcmVjb3JkZXItaW50ZXJuYWwgc3RhdGUgYmV0d2VlbiBydW5zLiBDYWxsZWQgYnkgdGhlXG4gICAqIGV4ZWN1dG9yIGJlZm9yZSBlYWNoIGBydW4oKWAuXG4gICAqL1xuICBjbGVhcj8oKTogdm9pZDtcblxuICAvKipcbiAgICogT3B0aW9uYWw6IGV4cG9zZSBjb2xsZWN0ZWQgZGF0YSBmb3IgaW5jbHVzaW9uIGluXG4gICAqIGBleGVjdXRvci5nZXRTbmFwc2hvdCgpLnJlY29yZGVyc2AuXG4gICAqL1xuICB0b1NuYXBzaG90PygpOiBSZWNvcmRlckJ1bmRsZTtcbn1cbiJdfQ==