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
@@ -73,4 +73,4 @@ function derivePolicy(policy, patch) {
73
73
  return Object.freeze({ ...policy, ...patch });
74
74
  }
75
75
  exports.derivePolicy = derivePolicy;
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuUG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvcnVuUG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEJHOzs7QUFnSEgseUdBQXlHO0FBQzVGLFFBQUEsYUFBYSxHQUFpQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3ZFLFlBQVksRUFBRSxNQUFNO0lBQ3BCLGFBQWEsRUFBRSxNQUFNO0lBQ3JCLFlBQVksRUFBRSxNQUFNO0lBQ3BCLGVBQWUsRUFBRSxLQUFLO0NBQ3ZCLENBQUMsQ0FBQztBQUVILE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQWEsQ0FBMEIsQ0FBQztBQUV2RSwyR0FBMkc7QUFDOUYsUUFBQSxrQkFBa0IsR0FBYyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxxQkFBYSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBRWhHLG1GQUFtRjtBQUNuRixTQUFnQixTQUFTLENBQUMsUUFBa0IsRUFBRSxFQUFFLFNBQXlCLEVBQUUsTUFBTSxHQUFHLEtBQUs7SUFDdkYsTUFBTSxRQUFRLEdBQTRCLEVBQUUsR0FBRyxxQkFBYSxFQUFFLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzVGLElBQUksU0FBUztRQUFFLFFBQVEsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzlDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQXlCLENBQUM7QUFDekQsQ0FBQztBQUpELDhCQUlDO0FBRUQscUZBQXFGO0FBQ3JGLFNBQWdCLFNBQVMsQ0FBQyxNQUFnQjtJQUN4QyxNQUFNLEtBQUssR0FBNEIsRUFBRSxDQUFDO0lBQzFDLEtBQUssTUFBTSxJQUFJLElBQUksVUFBVTtRQUFFLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVM7WUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFGLE9BQU8sS0FBaUIsQ0FBQztBQUMzQixDQUFDO0FBSkQsOEJBSUM7QUFFRCw2RkFBNkY7QUFDN0YsU0FBZ0IsYUFBYSxDQUFDLE1BQWlCLEVBQUUsU0FBd0I7SUFDdkUsT0FBTyxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRkQsc0NBRUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLE1BQWlCLEVBQUUsS0FBeUI7SUFDdkUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFGRCxvQ0FFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUnVuUG9saWN5IOKAlCB3aGF0IGEgcnVuIHJldGFpbnMsIGVuY29kZXMgYW5kIHNjcnVicywgYXMgT05FIGltbXV0YWJsZSBvYmplY3QgKEY1KS5cbiAqXG4gKiBXSFkuIEEgcnVuIGNhcnJpZXMgc2l4IHNldHRpbmdzIHRoYXQgZXZlcnkgc3RhZ2UgZnJhbWUgbXVzdCBhZ3JlZSBvbjogdGhlIGZvdXJcbiAqIG9ic2VydmFiaWxpdHkgZGlhbHMgKGByZWFkVHJhY2tpbmdgLCBgd3JpdGVUcmFja2luZ2AsIGBjb21taXRWYWx1ZXNgLCBgd3JpdGVQcm92ZW5hbmNlYCksXG4gKiB0aGUgcmVkYWN0aW9uIHJ1bGUsIGFuZCB3aGV0aGVyIGEgcmVkYWN0ZWQgbWlycm9yIGlzIGtlcHQuIFVudGlsIDkuMzQuMCBlYWNoIG9uZSB3YXNcbiAqIGNvcGllZCBmaWVsZCBieSBmaWVsZCBkb3duIHRocmVlIHNlcGFyYXRlIHBhdGhzIOKAlCBgRXhlY3V0aW9uUnVudGltZS51c2UqYCBvbiB0aGUgcm9vdCxcbiAqIGBTdGFnZUNvbnRleHQuY3JlYXRlTmV4dGAvYGNyZWF0ZUNoaWxkYCAoc2l4IGFzc2lnbm1lbnRzIGVhY2gpLCBhbmQgYSBkdWNrLXR5cGVkIHB1c2ggcGVyXG4gKiBkaWFsIGluIGBTdWJmbG93RXhlY3V0b3JgIOKAlCBzbyBhIG5ldyBkaWFsIG1lYW50IHNpeCBlZGl0cywgYW5kIGEgbWlzc2VkIG9uZSByYW4gYSBzdWJmbG93XG4gKiBvbiB0aGUgZGVmYXVsdCBzaWxlbnRseS4gTm93IHRoZSBleGVjdXRvciBidWlsZHMgT05FIHBvbGljeSBwZXIgcnVuIChhbmQgcGVyIHJlc3VtZSksIHRoZVxuICogcnVudGltZSBpbnN0YWxscyBpdCBvbiBpdHMgcm9vdCBmcmFtZSwgYW5kIGV2ZXJ5IGZyYW1lIGhvbGRzIGl0IEJZIFJFRkVSRU5DRTogYSBjaGlsZCwgYVxuICogY29udGludWF0aW9uIGFuZCBhIHN1YmZsb3cncyByb290IChpdHMgc2VlZCBmcmFtZSBpbmNsdWRlZCkgYWxsIHBvaW50IGF0IHRoZSBzYW1lIG9iamVjdC5cbiAqIFRoZSBib3Jyb3dlZCBpZGVhIGlzIEdvJ3MgYGNvbnRleHQuQ29udGV4dGAgLyBPcGVuVGVsZW1ldHJ5J3MgYENvbnRleHRgOiBhbiBpbW11dGFibGUgdmFsdWVcbiAqIGhhbmRlZCBkb3duLCBuZXZlciBjb3BpZWQgYXBhcnQuXG4gKlxuICogQURESU5HIEEgRElBTCBpcyB0d28gZmlsZXM6IGEgZmllbGQgKyBpdHMgZGVmYXVsdCBoZXJlICh7QGxpbmsgUnVuRGlhbHN9LFxuICoge0BsaW5rIERJQUxfREVGQVVMVFN9KSwgYW5kIHRoZSBmcmFtZSBjb2RlIHRoYXQgcmVhZHMgYHBvbGljeS48ZGlhbD5gIChgU3RhZ2VDb250ZXh0YCkuIFRoZVxuICogZXhlY3V0b3IncyBvcHRpb25zIGluaGVyaXQge0BsaW5rIFJ1bkRpYWxzfSwgcGlja3MgdGhlbSB3aXRoIHtAbGluayBwaWNrRGlhbHN9LCBhbmQgZXZlcnlcbiAqIHByb3BhZ2F0aW9uIHBhdGggY2FycmllcyB0aGUgd2hvbGUgb2JqZWN0IOKAlCBub25lIG9mIHRoZW0gbmFtZXMgYSBkaWFsLlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBwb2xpY3kgPSBydW5Qb2xpY3koeyBjb21taXRWYWx1ZXM6ICdkZWx0YScgfSwgcnVsZSwgdHJ1ZSk7XG4gKiBwb2xpY3kucmVhZFRyYWNraW5nOyAvLyAnZnVsbCcg4oCUIGFuIGFic2VudCBkaWFsIGlzIGl0cyBkZWZhdWx0XG4gKiBPYmplY3QuaXNGcm96ZW4ocG9saWN5KTsgLy8gdHJ1ZSDigJQgYSBmcmFtZSBjYW4gbmV2ZXIgZWRpdCB3aGF0IGl0cyBzaWJsaW5ncyBzaGFyZVxuICogYGBgXG4gKlxuICogVGhlIFJVTEUgaW5zaWRlIGlzIHNoYXJlZCB0b28sIGFuZCBpcyBpdHNlbGYgc3RhdGVmdWwgYnkgZGVzaWduIChwZXItY2FsbCBgc2V0VmFsdWUoaywgdixcbiAqIHRydWUpYCBtYXJrcyBhIGtleSBvbiBpdCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHJ1bik7IHRoZSBwb2xpY3kgZnJlZXplcyB3aGljaCBydWxlLCBub3QgdGhlXG4gKiBydWxlJ3MgbWFya3MuIFRoZSBtaXJyb3IgU1RPUkUgaXMgbm90IHBvbGljeSDigJQgZWFjaCBydW50aW1lIChhIHN1YmZsb3cgaGFzIGl0cyBvd24pIGtlZXBzXG4gKiBpdHMgb3duIHN0b3JlIHdoZW4gYG1pcnJvcmAgaXMgc2V0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmVhZFRyYWNraW5nTW9kZSwgV3JpdGVUcmFja2luZ01vZGUgfSBmcm9tICcuL2ZyYW1lVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWRhY3Rpb25SdWxlIH0gZnJvbSAnLi9yZWRhY3Rpb24uanMnO1xuaW1wb3J0IHR5cGUgeyBDb21taXRWYWx1ZXNNb2RlLCBXcml0ZVByb3ZlbmFuY2VNb2RlIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKlxuICogVGhlIGZvdXIgb2JzZXJ2YWJpbGl0eSBkaWFscyBhcyBhbiBleGVjdXRvciB0YWtlcyB0aGVtIOKAlCBldmVyeSBmaWVsZCBvcHRpb25hbCwgYW4gYWJzZW50XG4gKiBvbmUgaXMgaXRzIGRlZmF1bHQuIGBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnNgIGV4dGVuZHMgdGhpcyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuRGlhbHMge1xuICAvKipcbiAgICogUG9saWN5IGZvciBgU3RhZ2VTbmFwc2hvdC5zdGFnZVJlYWRzYCAoIzE0KS4gRGVmYXVsdCBgJ2Z1bGwnYCDigJQgZXZlcnlcbiAgICogdHJhY2tlZCByZWFkIGBzdHJ1Y3R1cmVkQ2xvbmVgcyB0aGUgdmFsdWUgaW50byB0aGUgc3RhZ2UncyByZWFkIHZpZXdcbiAgICogKHRoZSBoaXN0b3JpY2FsIGJlaGF2aW9yOyB3aGF0IGxlbnMvYWdlbnRmb290cHJpbnQgc25hcHNob3RzIHNob3cpLlxuICAgKiBgJ3N1bW1hcnknYCByZWNvcmRzIGEgY2hlYXAgdHlwZS9zaXplL3ByZXZpZXcgbWFya2VyIHBlciByZWFkOyBgJ29mZidgXG4gICAqIHJlY29yZHMgbm90aGluZyDigJQgemVybyBwZXItcmVhZCBjbG9uZSBjb3N0IChyZWFkcyBvZiBsYXJnZSB2YWx1ZXMgYmVjb21lXG4gICAqIH5mcmVlKS4gTmFycmF0aXZlIGFuZCBgU2NvcGVSZWNvcmRlci5vblJlYWRgIGFyZSBpZGVudGljYWwgaW4gZXZlcnkgbW9kZS5cbiAgICogQ2F2ZWF0OiB1bmRlciBgJ29mZidgIGEgc3RhZ2UncyBzbmFwc2hvdCBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIG9uZVxuICAgKiB0aGF0IHJlYWQgbm90aGluZyDigJQgYXVkaXRpbmcgY29uc3VtZXJzIHRoYXQgbmVlZCBcImRpZCBpdCByZWFkP1wiIHdpdGhvdXRcbiAgICogdGhlIHZhbHVlIGNvc3Qgc2hvdWxkIHByZWZlciBgJ3N1bW1hcnknYC5cbiAgICogRXF1aXZhbGVudCB0byBjYWxsaW5nIGBleGVjdXRvci5zZXRSZWFkVHJhY2tpbmcobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICAgKi9cbiAgcmVhZFRyYWNraW5nPzogUmVhZFRyYWNraW5nTW9kZTtcblxuICAvKipcbiAgICogUG9saWN5IGZvciBgU3RhZ2VTbmFwc2hvdC5zdGFnZVdyaXRlc2AgKCMxM2MtQSkg4oCUIHRoZSBzaWJsaW5nIG9mXG4gICAqIHtAbGluayByZWFkVHJhY2tpbmd9OyB0aGUgdHdvIGRpYWxzIGFyZSBpbmRlcGVuZGVudC4gRGVmYXVsdCBgJ2Z1bGwnYCDigJRcbiAgICogZXZlcnkgdHJhY2tlZCB3cml0ZSBgc3RydWN0dXJlZENsb25lYHMgdGhlIHZhbHVlIGludG8gdGhlIHN0YWdlJ3Mgd3JpdGVcbiAgICogdmlldyAodGhlIGhpc3RvcmljYWwgYmVoYXZpb3IpLiBgJ3N1bW1hcnknYCByZWNvcmRzIGEgY2hlYXBcbiAgICogYFdyaXRlU3VtbWFyeU1hcmtlcmAgKHR5cGUvc2l6ZS9wcmV2aWV3KSBwZXIgd3JpdGU7IGAnb2ZmJ2AgcmVjb3Jkc1xuICAgKiBub3RoaW5nIOKAlCBgc3RhZ2VXcml0ZXNgIGlzIGFic2VudCBmcm9tIHRoZSBzbmFwc2hvdC5cbiAgICpcbiAgICogT2JzZXJ2YWJsZSBjb25zZXF1ZW5jZXMg4oCUIHdoYXQgdGhlIHBvbGljeSBET0VTIGdvdmVybjpcbiAgICogLSBgU3RhZ2VTbmFwc2hvdC5zdGFnZVdyaXRlc2AgKG1hcmtlcnMgdW5kZXIgYCdzdW1tYXJ5J2AsIGFic2VudCB1bmRlclxuICAgKiAgIGAnb2ZmJ2ApLlxuICAgKiAtIFRoZSBjb21taXQgb2JzZXJ2ZXIgcGF5bG9hZDogYFNjb3BlUmVjb3JkZXIub25Db21taXQobXV0YXRpb25zKWBcbiAgICogICByZWNlaXZlcyB0aGUgcmV0YWluZWQgYF9zdGFnZVdyaXRlc2AgZW50cmllcywgc28gaXQgY2FycmllcyB0aGUgc2FtZVxuICAgKiAgIG1hcmtlcnMgdW5kZXIgYCdzdW1tYXJ5J2AgYW5kIGFuIGVtcHR5IG11dGF0aW9ucyBiYWcgdW5kZXIgYCdvZmYnYCDigJRcbiAgICogICBkZWZlcnJlZC9vYnNlcnZlciBjb25zdW1lcnMgc2VlIGV4YWN0bHkgd2hhdCByZXRlbnRpb24gc3RvcmVkLlxuICAgKlxuICAgKiBXaGF0IGl0IGRvZXMgTk9UIGdvdmVybjpcbiAgICogLSBUaGUgd3JpdGVzIHRoZW1zZWx2ZXM6IHNoYXJlZCBzdGF0ZSwgdGhlIHRyYW5zYWN0aW9uIGJ1ZmZlciwgYW5kIHRoZVxuICAgKiAgIENPTU1JVCBMT0cgYXJlIGlkZW50aWNhbCBpbiBldmVyeSBtb2RlIChjb21taXRMb2cgdmFsdWVzIGtlZXAgdGhlaXJcbiAgICogICBmdWxsIHBheWxvYWRzIOKAlCB0aGUgbG9zc2xlc3MgbGluZWFyLWNvc3QgZml4IGZvciB0aG9zZSBpcyB0aGVcbiAgICogICB7QGxpbmsgY29tbWl0VmFsdWVzfSBkaWFsLCAjMTNjLUIpLlxuICAgKiAtIFBlci1vcCBgU2NvcGVSZWNvcmRlci5vbldyaXRlYCBldmVudHMg4oCUIHRoZXkgZmlyZSB3aXRoIGxpdmUgdmFsdWVzXG4gICAqICAgcmVnYXJkbGVzcyAoZGVsaXZlcnkgdGllciwgUkZDLTAwMSdzIGNvbmNlcm4pLCBzbyBuYXJyYXRpdmUgb3V0cHV0IGlzXG4gICAqICAgaWRlbnRpY2FsIGluIGV2ZXJ5IG1vZGUuXG4gICAqIC0gUmVkYWN0aW9uOiBhIHBvbGljeS9wZXItY2FsbC1yZWRhY3RlZCB3cml0ZSBzdG9yZXMgYCdbUkVEQUNURURdJ2BcbiAgICogICB1bmRlciBgJ2Z1bGwnYCBBTkQgYCdzdW1tYXJ5J2AgKHJlZGFjdGlvbiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlXG4gICAqICAgZGlhbDsgYSBtYXJrZXIgd291bGQgbGVhayBzaXplL3ByZXZpZXcpLCBhbmQgbm90aGluZyB1bmRlciBgJ29mZidgLlxuICAgKlxuICAgKiBDYXZlYXQ6IHVuZGVyIGAnb2ZmJ2AgYSBzdGFnZSdzIFNOQVBTSE9UIGlzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gb25lXG4gICAqIHRoYXQgd3JvdGUgbm90aGluZyDigJQgYnV0IHVubGlrZSBgcmVhZFRyYWNraW5nOiAnb2ZmJ2AsIHRoZSBjb21taXQgbG9nXG4gICAqIHN0aWxsIHJlY29yZHMgZXZlcnkgbmV0IGNoYW5nZSwgc28gXCJkaWQgaXQgd3JpdGU/XCIgc3RheXMgYW5zd2VyYWJsZS5cbiAgICogRXF1aXZhbGVudCB0byBjYWxsaW5nIGBleGVjdXRvci5zZXRXcml0ZVRyYWNraW5nKG1vZGUpYCBiZWZvcmUgYHJ1bigpYC5cbiAgICovXG4gIHdyaXRlVHJhY2tpbmc/OiBXcml0ZVRyYWNraW5nTW9kZTtcblxuICAvKipcbiAgICogRW5jb2RpbmcgcG9saWN5IGZvciBDT01NSVQgTE9HIHZhbHVlcyAoIzEzYy1CKSDigJQgdGhlIHRoaXJkIGRpYWwgb2YgdGhlXG4gICAqIGZhbWlseSwgYW5kIHVubGlrZSBpdHMgc2libGluZ3MgaXQgaXMgKipsb3NzbGVzcyBpbiBib3RoIG1vZGVzKiogKGl0XG4gICAqIGNoYW5nZXMgdGhlIGxvZydzIGVuY29kaW5nLCBuZXZlciBpdHMgaW5mb3JtYXRpb24pLlxuICAgKlxuICAgKiAtIGAnZnVsbCdgIChkZWZhdWx0KSDigJQgZXZlcnkgc3Vydml2aW5nIGBzZXRgIHBhdGggc3RvcmVzIHRoZSBmdWxsIGZpbmFsXG4gICAqICAgdmFsdWU7IGJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBoaXN0b3JpY2FsIGJlaGF2aW9yLlxuICAgKiAtIGAnZGVsdGEnYCDigJQgYXJyYXkgbmV0LWNoYW5nZXMgdGhhdCBhcmUgXCJiYXNlIHBsdXMgYSB0YWlsXCIgY29tbWl0IGFzIGFuXG4gICAqICAgYGFwcGVuZGAgdHJhY2UgdmVyYiBzdG9yaW5nIE9OTFkgdGhlIHRhaWwgKHRoZSBncm93aW5nLWhpc3RvcnkgY29tbWl0XG4gICAqICAgbG9nIGJlY29tZXMgbGluZWFyIGluc3RlYWQgb2YgTyhOwrIpIHJldGFpbmVkKTsgYGRlbGV0ZVZhbHVlKClgIGNvbW1pdHNcbiAgICogICBhcyBhIHJlYWwgYGRlbGV0ZWAgdmVyYiAocmVwbGF5IHJlbW92ZXMgdGhlIGtleSBpbnN0ZWFkIG9mIGxlYXZpbmdcbiAgICogICBga2V5OiB1bmRlZmluZWRgKTsgYnVuZGxlcyBjYXJyeSBleGFjdGx5IE9ORSB0cmFjZSBlbnRyeSBwZXIgc3Vydml2aW5nXG4gICAqICAgcGF0aC4gUmVwbGF5ICh0aGUgb25lIHZlcmIgbGF3IOKAlCBsaXZlIHN0YXRlLCBgbWF0ZXJpYWxpc2UoKWAsIHRoZVxuICAgKiAgIHJlZGFjdGVkIG1pcnJvciwgYHN0YXRlQXRgKSByZWNvbnN0cnVjdHMgZXZlcnkgc3RlcCdzIGZ1bGwgc3RhdGVcbiAgICogICBleGFjdGx5LlxuICAgKlxuICAgKiBDb25zdW1lcnMgdGhhdCByZWFkIGBidW5kbGUub3ZlcndyaXRlW2tleV1gIGFzIFwidGhlIGZ1bGwgdmFsdWUgd3JpdHRlblwiXG4gICAqIG11c3Qgc3dpdGNoIHRvIGBjb21taXRWYWx1ZUF0KGNvbW1pdExvZywgaWR4LCBrZXkpYCBmcm9tXG4gICAqIGBmb290cHJpbnRqcy90cmFjZWAg4oCUIHVuZGVyIGAnZGVsdGEnYCB0aGF0IHZhbHVlIGlzIHZlcmItcXVhbGlmaWVkIChhblxuICAgKiBgYXBwZW5kYCBidW5kbGUgaG9sZHMgb25seSB0aGUgdGFpbCkuIFBhdGgtdGllciBjb25zdW1lcnNcbiAgICogKGBmaW5kTGFzdFdyaXRlcmAsIGBjYXVzYWxDaGFpbmAsIG5hcnJhdGl2ZSwgbGVucyBoaWdobGlnaHRzKSBhcmVcbiAgICogdW5hZmZlY3RlZC4gVGhlIGFjdGl2ZSBtb2RlIGlzIHN1cmZhY2VkIGFzXG4gICAqIGBnZXRTbmFwc2hvdCgpLmNvbW1pdFZhbHVlc2AuXG4gICAqXG4gICAqIEhvbmVzdCBjb3N0IG5vdGU6IGFwcGVuZCBkZXRlY3Rpb24gaXMgbmV3IHdhbGwgd29yayDigJQgYW4gTyh8YmFzZSBhcnJheXwpXG4gICAqIHN0cnVjdHVyYWwgcHJlZml4IGNvbXBhcmUgcGVyIGFycmF5LXNldCBwYXRoIHBlciBjb21taXQuIE9uIGEgaGl0IHRoZVxuICAgKiBjb21taXQgZ2V0cyBjaGVhcGVyIGluIGJvdGggd2FsbCBhbmQgaGVhcDsgb24gYSBtaXNzIChwcmVmaXggZGl2ZXJnZXMpXG4gICAqIGl0IHBheXMgY29tcGFyZSArIGZ1bGwgY2xvbmUuIGAnZnVsbCdgIHBheXMgemVyby5cbiAgICogRXF1aXZhbGVudCB0byBjYWxsaW5nIGBleGVjdXRvci5zZXRDb21taXRWYWx1ZXMobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICAgKi9cbiAgY29tbWl0VmFsdWVzPzogQ29tbWl0VmFsdWVzTW9kZTtcblxuICAvKipcbiAgICogUGVyLXdyaXRlIHJlYWQgcHJvdmVuYW5jZSAoI1AxKSDigJQgdGhlIGZvdXJ0aCBkaWFsIG9mIHRoZSBmYW1pbHkuIERlZmF1bHRcbiAgICogYCdvZmYnYDogemVybyBjb3N0LCBieXRlLWlkZW50aWNhbCBjb21taXQgbG9ncy4gYCdyZWFkcy1wcmVmaXgnYDogZXZlcnlcbiAgICogY29tbWl0dGVkIGBUcmFjZUVudHJ5YCBjYXJyaWVzIGByZWFkS2V5c2Ag4oCUIHRoZSBrZXlzIHRyYWNrZWQtcmVhZCBCRUZPUkVcbiAgICogdGhhdCB3cml0ZSDigJQgZW5hYmxpbmcgcGVyLXdyaXRlIGNhdXNhbCBhdHRyaWJ1dGlvbiAoYGNhdXNhbENoYWluYCdzXG4gICAqIGBlZGdlQXR0cmlidXRpb246ICdwZXItd3JpdGUnYCBhbmQgdmFyaWFibGUgc2xpY2VzKS4gQ29zdDogb25lIHNtYWxsXG4gICAqIGFycmF5IGNvcHkgcGVyIHdyaXRlLiBTbmFwc2hvdCBkaXNjcmltaW5hbnQ6XG4gICAqIGBnZXRTbmFwc2hvdCgpLndyaXRlUHJvdmVuYW5jZWAuXG4gICAqL1xuICB3cml0ZVByb3ZlbmFuY2U/OiBXcml0ZVByb3ZlbmFuY2VNb2RlO1xufVxuXG4vKiogVGhlIHJ1bidzIHBvbGljeTogZXZlcnkgZGlhbCByZXNvbHZlZCwgcGx1cyB0aGUgcmVkYWN0aW9uIHJ1bGUgYW5kIHRoZSBtaXJyb3IgZmxhZy4gRnJvemVuLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5Qb2xpY3kgZXh0ZW5kcyBSZWFkb25seTxSZXF1aXJlZDxSdW5EaWFscz4+IHtcbiAgLyoqIFRoZSBydW4ncyByZWRhY3Rpb24gcnVsZSDigJQgdGhlIE9ORSBvd25lciBvZiB0aGUgdmVyZGljdCAoYHJlZGFjdGlvbi50c2ApLiBBYnNlbnQgb24gYmFyZSBmcmFtZXMuICovXG4gIHJlYWRvbmx5IHJlZGFjdGlvbj86IFJlZGFjdGlvblJ1bGU7XG4gIC8qKiBLZWVwIGEgcmVkYWN0ZWQgbWlycm9yIG9mIHRoZSBoZWFwIChhIHJ1biB3aXRoIGEgcmVkYWN0aW9uIHBvbGljeSkuIEVhY2ggcnVudGltZSBvd25zIGl0cyBvd24gc3RvcmUuICovXG4gIHJlYWRvbmx5IG1pcnJvcjogYm9vbGVhbjtcbn1cblxuLyoqIEVhY2ggZGlhbCdzIGRlZmF1bHQg4oCUIHRoZSB2YWx1ZSBhIHJ1biBnZXRzIHdoZW4gdGhlIG9wdGlvbiBpcyBhYnNlbnQuIFRoZSBkaWFsIGxpc3QgSVMgdGhlc2Uga2V5cy4gKi9cbmV4cG9ydCBjb25zdCBESUFMX0RFRkFVTFRTOiBSZWFkb25seTxSZXF1aXJlZDxSdW5EaWFscz4+ID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHJlYWRUcmFja2luZzogJ2Z1bGwnLFxuICB3cml0ZVRyYWNraW5nOiAnZnVsbCcsXG4gIGNvbW1pdFZhbHVlczogJ2Z1bGwnLFxuICB3cml0ZVByb3ZlbmFuY2U6ICdvZmYnLFxufSk7XG5cbmNvbnN0IERJQUxfTkFNRVMgPSBPYmplY3Qua2V5cyhESUFMX0RFRkFVTFRTKSBhcyBBcnJheTxrZXlvZiBSdW5EaWFscz47XG5cbi8qKiBFdmVyeSBkZWZhdWx0LCBubyBydWxlLCBubyBtaXJyb3Ig4oCUIHdoYXQgYSBiYXJlIGZyYW1lIChhIHVuaXQgdGVzdCdzIGBuZXcgU3RhZ2VDb250ZXh0YCkgcnVucyB1bmRlci4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JVTl9QT0xJQ1k6IFJ1blBvbGljeSA9IE9iamVjdC5mcmVlemUoeyAuLi5ESUFMX0RFRkFVTFRTLCBtaXJyb3I6IGZhbHNlIH0pO1xuXG4vKiogQnVpbGQgYSBydW4ncyBwb2xpY3k6IGFic2VudCBkaWFscyB0YWtlIHRoZWlyIGRlZmF1bHQ7IHRoZSByZXN1bHQgaXMgZnJvemVuLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1blBvbGljeShkaWFsczogUnVuRGlhbHMgPSB7fSwgcmVkYWN0aW9uPzogUmVkYWN0aW9uUnVsZSwgbWlycm9yID0gZmFsc2UpOiBSdW5Qb2xpY3kge1xuICBjb25zdCByZXNvbHZlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLkRJQUxfREVGQVVMVFMsIC4uLnBpY2tEaWFscyhkaWFscyksIG1pcnJvciB9O1xuICBpZiAocmVkYWN0aW9uKSByZXNvbHZlZC5yZWRhY3Rpb24gPSByZWRhY3Rpb247XG4gIHJldHVybiBPYmplY3QuZnJlZXplKHJlc29sdmVkKSBhcyB1bmtub3duIGFzIFJ1blBvbGljeTtcbn1cblxuLyoqIFRoZSBkaWFscyBzZXQgb24gYHNvdXJjZWAgKGFuIG9wdGlvbnMgb2JqZWN0LCBzYXkpIOKAlCBhbmQgbm90aGluZyBlbHNlIGZyb20gaXQuICovXG5leHBvcnQgZnVuY3Rpb24gcGlja0RpYWxzKHNvdXJjZTogUnVuRGlhbHMpOiBSdW5EaWFscyB7XG4gIGNvbnN0IGRpYWxzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IG5hbWUgb2YgRElBTF9OQU1FUykgaWYgKHNvdXJjZVtuYW1lXSAhPT0gdW5kZWZpbmVkKSBkaWFsc1tuYW1lXSA9IHNvdXJjZVtuYW1lXTtcbiAgcmV0dXJuIGRpYWxzIGFzIFJ1bkRpYWxzO1xufVxuXG4vKiogVGhlIHNhbWUgcG9saWN5IHVuZGVyIGFub3RoZXIgcnVsZSDigJQgYSBORVcgZnJvemVuIG9iamVjdDsgdGhlIG9sZCBvbmUgaXMgbmV2ZXIgZWRpdGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhSZWRhY3Rpb24ocG9saWN5OiBSdW5Qb2xpY3ksIHJlZGFjdGlvbjogUmVkYWN0aW9uUnVsZSk6IFJ1blBvbGljeSB7XG4gIHJldHVybiBkZXJpdmVQb2xpY3kocG9saWN5LCB7IHJlZGFjdGlvbiB9KTtcbn1cblxuLyoqXG4gKiBUaGUgc2FtZSBwb2xpY3kgd2l0aCBzb21lIHNldHRpbmdzIGNoYW5nZWQg4oCUIGEgTkVXIGZyb3plbiBvYmplY3Q7IHRoZSBvbGQgb25lIGlzIG5ldmVyXG4gKiBlZGl0ZWQuIEEgZnJhbWUgb3IgcnVudGltZSBjaGFuZ2VzIGEgc2V0dGluZyBieSBzd2FwcGluZyBpbiBhIGRlcml2ZWQgcG9saWN5IChgdXNlUG9saWN5YCksIHNvXG4gKiBubyBtdXRhYmxlIGRpYWwgZmllbGQgZXhpc3RzIGFueXdoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlUG9saWN5KHBvbGljeTogUnVuUG9saWN5LCBwYXRjaDogUGFydGlhbDxSdW5Qb2xpY3k+KTogUnVuUG9saWN5IHtcbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyAuLi5wb2xpY3ksIC4uLnBhdGNoIH0pO1xufVxuIl19
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuUG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvcnVuUG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOEJHOzs7QUFrSEgseUdBQXlHO0FBQzVGLFFBQUEsYUFBYSxHQUFpQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3ZFLFlBQVksRUFBRSxNQUFNO0lBQ3BCLGFBQWEsRUFBRSxNQUFNO0lBQ3JCLFlBQVksRUFBRSxNQUFNO0lBQ3BCLGVBQWUsRUFBRSxLQUFLO0NBQ3ZCLENBQUMsQ0FBQztBQUVILE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQWEsQ0FBMEIsQ0FBQztBQUV2RSwyR0FBMkc7QUFDOUYsUUFBQSxrQkFBa0IsR0FBYyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxxQkFBYSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBRWhHLG1GQUFtRjtBQUNuRixTQUFnQixTQUFTLENBQUMsUUFBa0IsRUFBRSxFQUFFLFNBQXlCLEVBQUUsTUFBTSxHQUFHLEtBQUs7SUFDdkYsTUFBTSxRQUFRLEdBQTRCLEVBQUUsR0FBRyxxQkFBYSxFQUFFLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzVGLElBQUksU0FBUztRQUFFLFFBQVEsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzlDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQXlCLENBQUM7QUFDekQsQ0FBQztBQUpELDhCQUlDO0FBRUQscUZBQXFGO0FBQ3JGLFNBQWdCLFNBQVMsQ0FBQyxNQUFnQjtJQUN4QyxNQUFNLEtBQUssR0FBNEIsRUFBRSxDQUFDO0lBQzFDLEtBQUssTUFBTSxJQUFJLElBQUksVUFBVTtRQUFFLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVM7WUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFGLE9BQU8sS0FBaUIsQ0FBQztBQUMzQixDQUFDO0FBSkQsOEJBSUM7QUFFRCw2RkFBNkY7QUFDN0YsU0FBZ0IsYUFBYSxDQUFDLE1BQWlCLEVBQUUsU0FBd0I7SUFDdkUsT0FBTyxZQUFZLENBQUMsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRkQsc0NBRUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLE1BQWlCLEVBQUUsS0FBeUI7SUFDdkUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFGRCxvQ0FFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUnVuUG9saWN5IOKAlCB3aGF0IGEgcnVuIHJldGFpbnMsIGVuY29kZXMgYW5kIHNjcnVicywgYXMgT05FIGltbXV0YWJsZSBvYmplY3QgKEY1KS5cbiAqXG4gKiBXSFkuIEEgcnVuIGNhcnJpZXMgc2l4IHNldHRpbmdzIHRoYXQgZXZlcnkgc3RhZ2UgZnJhbWUgbXVzdCBhZ3JlZSBvbjogdGhlIGZvdXJcbiAqIG9ic2VydmFiaWxpdHkgZGlhbHMgKGByZWFkVHJhY2tpbmdgLCBgd3JpdGVUcmFja2luZ2AsIGBjb21taXRWYWx1ZXNgLCBgd3JpdGVQcm92ZW5hbmNlYCksXG4gKiB0aGUgcmVkYWN0aW9uIHJ1bGUsIGFuZCB3aGV0aGVyIGEgcmVkYWN0ZWQgbWlycm9yIGlzIGtlcHQuIFVudGlsIDkuMzQuMCBlYWNoIG9uZSB3YXNcbiAqIGNvcGllZCBmaWVsZCBieSBmaWVsZCBkb3duIHRocmVlIHNlcGFyYXRlIHBhdGhzIOKAlCBgRXhlY3V0aW9uUnVudGltZS51c2UqYCBvbiB0aGUgcm9vdCxcbiAqIGBTdGFnZUNvbnRleHQuY3JlYXRlTmV4dGAvYGNyZWF0ZUNoaWxkYCAoc2l4IGFzc2lnbm1lbnRzIGVhY2gpLCBhbmQgYSBkdWNrLXR5cGVkIHB1c2ggcGVyXG4gKiBkaWFsIGluIGBTdWJmbG93RXhlY3V0b3JgIOKAlCBzbyBhIG5ldyBkaWFsIG1lYW50IHNpeCBlZGl0cywgYW5kIGEgbWlzc2VkIG9uZSByYW4gYSBzdWJmbG93XG4gKiBvbiB0aGUgZGVmYXVsdCBzaWxlbnRseS4gTm93IHRoZSBleGVjdXRvciBidWlsZHMgT05FIHBvbGljeSBwZXIgcnVuIChhbmQgcGVyIHJlc3VtZSksIHRoZVxuICogcnVudGltZSBpbnN0YWxscyBpdCBvbiBpdHMgcm9vdCBmcmFtZSwgYW5kIGV2ZXJ5IGZyYW1lIGhvbGRzIGl0IEJZIFJFRkVSRU5DRTogYSBjaGlsZCwgYVxuICogY29udGludWF0aW9uIGFuZCBhIHN1YmZsb3cncyByb290IChpdHMgc2VlZCBmcmFtZSBpbmNsdWRlZCkgYWxsIHBvaW50IGF0IHRoZSBzYW1lIG9iamVjdC5cbiAqIFRoZSBib3Jyb3dlZCBpZGVhIGlzIEdvJ3MgYGNvbnRleHQuQ29udGV4dGAgLyBPcGVuVGVsZW1ldHJ5J3MgYENvbnRleHRgOiBhbiBpbW11dGFibGUgdmFsdWVcbiAqIGhhbmRlZCBkb3duLCBuZXZlciBjb3BpZWQgYXBhcnQuXG4gKlxuICogQURESU5HIEEgRElBTCBpcyB0d28gZmlsZXM6IGEgZmllbGQgKyBpdHMgZGVmYXVsdCBoZXJlICh7QGxpbmsgUnVuRGlhbHN9LFxuICoge0BsaW5rIERJQUxfREVGQVVMVFN9KSwgYW5kIHRoZSBmcmFtZSBjb2RlIHRoYXQgcmVhZHMgYHBvbGljeS48ZGlhbD5gIChgU3RhZ2VDb250ZXh0YCkuIFRoZVxuICogZXhlY3V0b3IncyBvcHRpb25zIGluaGVyaXQge0BsaW5rIFJ1bkRpYWxzfSwgcGlja3MgdGhlbSB3aXRoIHtAbGluayBwaWNrRGlhbHN9LCBhbmQgZXZlcnlcbiAqIHByb3BhZ2F0aW9uIHBhdGggY2FycmllcyB0aGUgd2hvbGUgb2JqZWN0IOKAlCBub25lIG9mIHRoZW0gbmFtZXMgYSBkaWFsLlxuICpcbiAqIGBgYHRzXG4gKiBjb25zdCBwb2xpY3kgPSBydW5Qb2xpY3koeyBjb21taXRWYWx1ZXM6ICdkZWx0YScgfSwgcnVsZSwgdHJ1ZSk7XG4gKiBwb2xpY3kucmVhZFRyYWNraW5nOyAvLyAnZnVsbCcg4oCUIGFuIGFic2VudCBkaWFsIGlzIGl0cyBkZWZhdWx0XG4gKiBPYmplY3QuaXNGcm96ZW4ocG9saWN5KTsgLy8gdHJ1ZSDigJQgYSBmcmFtZSBjYW4gbmV2ZXIgZWRpdCB3aGF0IGl0cyBzaWJsaW5ncyBzaGFyZVxuICogYGBgXG4gKlxuICogVGhlIFJVTEUgaW5zaWRlIGlzIHNoYXJlZCB0b28sIGFuZCBpcyBpdHNlbGYgc3RhdGVmdWwgYnkgZGVzaWduIChwZXItY2FsbCBgc2V0VmFsdWUoaywgdixcbiAqIHRydWUpYCBtYXJrcyBhIGtleSBvbiBpdCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHJ1bik7IHRoZSBwb2xpY3kgZnJlZXplcyB3aGljaCBydWxlLCBub3QgdGhlXG4gKiBydWxlJ3MgbWFya3MuIFRoZSBtaXJyb3IgU1RPUkUgaXMgbm90IHBvbGljeSDigJQgZWFjaCBydW50aW1lIChhIHN1YmZsb3cgaGFzIGl0cyBvd24pIGtlZXBzXG4gKiBpdHMgb3duIHN0b3JlIHdoZW4gYG1pcnJvcmAgaXMgc2V0LlxuICovXG5cbmltcG9ydCB0eXBlIHsgQ29tbWl0VmFsdWVzTW9kZSB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5pbXBvcnQgdHlwZSB7IFdyaXRlUHJvdmVuYW5jZU1vZGUgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnO1xuXG5pbXBvcnQgdHlwZSB7IFJlYWRUcmFja2luZ01vZGUsIFdyaXRlVHJhY2tpbmdNb2RlIH0gZnJvbSAnLi9mcmFtZVR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUmVkYWN0aW9uUnVsZSB9IGZyb20gJy4vcmVkYWN0aW9uLmpzJztcblxuLyoqXG4gKiBUaGUgZm91ciBvYnNlcnZhYmlsaXR5IGRpYWxzIGFzIGFuIGV4ZWN1dG9yIHRha2VzIHRoZW0g4oCUIGV2ZXJ5IGZpZWxkIG9wdGlvbmFsLCBhbiBhYnNlbnRcbiAqIG9uZSBpcyBpdHMgZGVmYXVsdC4gYEZsb3dDaGFydEV4ZWN1dG9yT3B0aW9uc2AgZXh0ZW5kcyB0aGlzIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5EaWFscyB7XG4gIC8qKlxuICAgKiBQb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlUmVhZHNgICgjMTQpLiBEZWZhdWx0IGAnZnVsbCdgIOKAlCBldmVyeVxuICAgKiB0cmFja2VkIHJlYWQgYHN0cnVjdHVyZWRDbG9uZWBzIHRoZSB2YWx1ZSBpbnRvIHRoZSBzdGFnZSdzIHJlYWQgdmlld1xuICAgKiAodGhlIGhpc3RvcmljYWwgYmVoYXZpb3I7IHdoYXQgbGVucy9hZ2VudGZvb3RwcmludCBzbmFwc2hvdHMgc2hvdykuXG4gICAqIGAnc3VtbWFyeSdgIHJlY29yZHMgYSBjaGVhcCB0eXBlL3NpemUvcHJldmlldyBtYXJrZXIgcGVyIHJlYWQ7IGAnb2ZmJ2BcbiAgICogcmVjb3JkcyBub3RoaW5nIOKAlCB6ZXJvIHBlci1yZWFkIGNsb25lIGNvc3QgKHJlYWRzIG9mIGxhcmdlIHZhbHVlcyBiZWNvbWVcbiAgICogfmZyZWUpLiBOYXJyYXRpdmUgYW5kIGBTY29wZVJlY29yZGVyLm9uUmVhZGAgYXJlIGlkZW50aWNhbCBpbiBldmVyeSBtb2RlLlxuICAgKiBDYXZlYXQ6IHVuZGVyIGAnb2ZmJ2AgYSBzdGFnZSdzIHNuYXBzaG90IGlzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gb25lXG4gICAqIHRoYXQgcmVhZCBub3RoaW5nIOKAlCBhdWRpdGluZyBjb25zdW1lcnMgdGhhdCBuZWVkIFwiZGlkIGl0IHJlYWQ/XCIgd2l0aG91dFxuICAgKiB0aGUgdmFsdWUgY29zdCBzaG91bGQgcHJlZmVyIGAnc3VtbWFyeSdgLlxuICAgKiBFcXVpdmFsZW50IHRvIGNhbGxpbmcgYGV4ZWN1dG9yLnNldFJlYWRUcmFja2luZyhtb2RlKWAgYmVmb3JlIGBydW4oKWAuXG4gICAqL1xuICByZWFkVHJhY2tpbmc/OiBSZWFkVHJhY2tpbmdNb2RlO1xuXG4gIC8qKlxuICAgKiBQb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlV3JpdGVzYCAoIzEzYy1BKSDigJQgdGhlIHNpYmxpbmcgb2ZcbiAgICoge0BsaW5rIHJlYWRUcmFja2luZ307IHRoZSB0d28gZGlhbHMgYXJlIGluZGVwZW5kZW50LiBEZWZhdWx0IGAnZnVsbCdgIOKAlFxuICAgKiBldmVyeSB0cmFja2VkIHdyaXRlIGBzdHJ1Y3R1cmVkQ2xvbmVgcyB0aGUgdmFsdWUgaW50byB0aGUgc3RhZ2UncyB3cml0ZVxuICAgKiB2aWV3ICh0aGUgaGlzdG9yaWNhbCBiZWhhdmlvcikuIGAnc3VtbWFyeSdgIHJlY29yZHMgYSBjaGVhcFxuICAgKiBgV3JpdGVTdW1tYXJ5TWFya2VyYCAodHlwZS9zaXplL3ByZXZpZXcpIHBlciB3cml0ZTsgYCdvZmYnYCByZWNvcmRzXG4gICAqIG5vdGhpbmcg4oCUIGBzdGFnZVdyaXRlc2AgaXMgYWJzZW50IGZyb20gdGhlIHNuYXBzaG90LlxuICAgKlxuICAgKiBPYnNlcnZhYmxlIGNvbnNlcXVlbmNlcyDigJQgd2hhdCB0aGUgcG9saWN5IERPRVMgZ292ZXJuOlxuICAgKiAtIGBTdGFnZVNuYXBzaG90LnN0YWdlV3JpdGVzYCAobWFya2VycyB1bmRlciBgJ3N1bW1hcnknYCwgYWJzZW50IHVuZGVyXG4gICAqICAgYCdvZmYnYCkuXG4gICAqIC0gVGhlIGNvbW1pdCBvYnNlcnZlciBwYXlsb2FkOiBgU2NvcGVSZWNvcmRlci5vbkNvbW1pdChtdXRhdGlvbnMpYFxuICAgKiAgIHJlY2VpdmVzIHRoZSByZXRhaW5lZCBgX3N0YWdlV3JpdGVzYCBlbnRyaWVzLCBzbyBpdCBjYXJyaWVzIHRoZSBzYW1lXG4gICAqICAgbWFya2VycyB1bmRlciBgJ3N1bW1hcnknYCBhbmQgYW4gZW1wdHkgbXV0YXRpb25zIGJhZyB1bmRlciBgJ29mZidgIOKAlFxuICAgKiAgIGRlZmVycmVkL29ic2VydmVyIGNvbnN1bWVycyBzZWUgZXhhY3RseSB3aGF0IHJldGVudGlvbiBzdG9yZWQuXG4gICAqXG4gICAqIFdoYXQgaXQgZG9lcyBOT1QgZ292ZXJuOlxuICAgKiAtIFRoZSB3cml0ZXMgdGhlbXNlbHZlczogc2hhcmVkIHN0YXRlLCB0aGUgdHJhbnNhY3Rpb24gYnVmZmVyLCBhbmQgdGhlXG4gICAqICAgQ09NTUlUIExPRyBhcmUgaWRlbnRpY2FsIGluIGV2ZXJ5IG1vZGUgKGNvbW1pdExvZyB2YWx1ZXMga2VlcCB0aGVpclxuICAgKiAgIGZ1bGwgcGF5bG9hZHMg4oCUIHRoZSBsb3NzbGVzcyBsaW5lYXItY29zdCBmaXggZm9yIHRob3NlIGlzIHRoZVxuICAgKiAgIHtAbGluayBjb21taXRWYWx1ZXN9IGRpYWwsICMxM2MtQikuXG4gICAqIC0gUGVyLW9wIGBTY29wZVJlY29yZGVyLm9uV3JpdGVgIGV2ZW50cyDigJQgdGhleSBmaXJlIHdpdGggbGl2ZSB2YWx1ZXNcbiAgICogICByZWdhcmRsZXNzIChkZWxpdmVyeSB0aWVyLCBSRkMtMDAxJ3MgY29uY2VybiksIHNvIG5hcnJhdGl2ZSBvdXRwdXQgaXNcbiAgICogICBpZGVudGljYWwgaW4gZXZlcnkgbW9kZS5cbiAgICogLSBSZWRhY3Rpb246IGEgcG9saWN5L3Blci1jYWxsLXJlZGFjdGVkIHdyaXRlIHN0b3JlcyBgJ1tSRURBQ1RFRF0nYFxuICAgKiAgIHVuZGVyIGAnZnVsbCdgIEFORCBgJ3N1bW1hcnknYCAocmVkYWN0aW9uIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGVcbiAgICogICBkaWFsOyBhIG1hcmtlciB3b3VsZCBsZWFrIHNpemUvcHJldmlldyksIGFuZCBub3RoaW5nIHVuZGVyIGAnb2ZmJ2AuXG4gICAqXG4gICAqIENhdmVhdDogdW5kZXIgYCdvZmYnYCBhIHN0YWdlJ3MgU05BUFNIT1QgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBvbmVcbiAgICogdGhhdCB3cm90ZSBub3RoaW5nIOKAlCBidXQgdW5saWtlIGByZWFkVHJhY2tpbmc6ICdvZmYnYCwgdGhlIGNvbW1pdCBsb2dcbiAgICogc3RpbGwgcmVjb3JkcyBldmVyeSBuZXQgY2hhbmdlLCBzbyBcImRpZCBpdCB3cml0ZT9cIiBzdGF5cyBhbnN3ZXJhYmxlLlxuICAgKiBFcXVpdmFsZW50IHRvIGNhbGxpbmcgYGV4ZWN1dG9yLnNldFdyaXRlVHJhY2tpbmcobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICAgKi9cbiAgd3JpdGVUcmFja2luZz86IFdyaXRlVHJhY2tpbmdNb2RlO1xuXG4gIC8qKlxuICAgKiBFbmNvZGluZyBwb2xpY3kgZm9yIENPTU1JVCBMT0cgdmFsdWVzICgjMTNjLUIpIOKAlCB0aGUgdGhpcmQgZGlhbCBvZiB0aGVcbiAgICogZmFtaWx5LCBhbmQgdW5saWtlIGl0cyBzaWJsaW5ncyBpdCBpcyAqKmxvc3NsZXNzIGluIGJvdGggbW9kZXMqKiAoaXRcbiAgICogY2hhbmdlcyB0aGUgbG9nJ3MgZW5jb2RpbmcsIG5ldmVyIGl0cyBpbmZvcm1hdGlvbikuXG4gICAqXG4gICAqIC0gYCdmdWxsJ2AgKGRlZmF1bHQpIOKAlCBldmVyeSBzdXJ2aXZpbmcgYHNldGAgcGF0aCBzdG9yZXMgdGhlIGZ1bGwgZmluYWxcbiAgICogICB2YWx1ZTsgYnl0ZS1pZGVudGljYWwgdG8gdGhlIGhpc3RvcmljYWwgYmVoYXZpb3IuXG4gICAqIC0gYCdkZWx0YSdgIOKAlCBhcnJheSBuZXQtY2hhbmdlcyB0aGF0IGFyZSBcImJhc2UgcGx1cyBhIHRhaWxcIiBjb21taXQgYXMgYW5cbiAgICogICBgYXBwZW5kYCB0cmFjZSB2ZXJiIHN0b3JpbmcgT05MWSB0aGUgdGFpbCAodGhlIGdyb3dpbmctaGlzdG9yeSBjb21taXRcbiAgICogICBsb2cgYmVjb21lcyBsaW5lYXIgaW5zdGVhZCBvZiBPKE7CsikgcmV0YWluZWQpOyBgZGVsZXRlVmFsdWUoKWAgY29tbWl0c1xuICAgKiAgIGFzIGEgcmVhbCBgZGVsZXRlYCB2ZXJiIChyZXBsYXkgcmVtb3ZlcyB0aGUga2V5IGluc3RlYWQgb2YgbGVhdmluZ1xuICAgKiAgIGBrZXk6IHVuZGVmaW5lZGApOyBidW5kbGVzIGNhcnJ5IGV4YWN0bHkgT05FIHRyYWNlIGVudHJ5IHBlciBzdXJ2aXZpbmdcbiAgICogICBwYXRoLiBSZXBsYXkgKHRoZSBvbmUgdmVyYiBsYXcg4oCUIGxpdmUgc3RhdGUsIGBtYXRlcmlhbGlzZSgpYCwgdGhlXG4gICAqICAgcmVkYWN0ZWQgbWlycm9yLCBgc3RhdGVBdGApIHJlY29uc3RydWN0cyBldmVyeSBzdGVwJ3MgZnVsbCBzdGF0ZVxuICAgKiAgIGV4YWN0bHkuXG4gICAqXG4gICAqIENvbnN1bWVycyB0aGF0IHJlYWQgYGJ1bmRsZS5vdmVyd3JpdGVba2V5XWAgYXMgXCJ0aGUgZnVsbCB2YWx1ZSB3cml0dGVuXCJcbiAgICogbXVzdCBzd2l0Y2ggdG8gYGNvbW1pdFZhbHVlQXQoY29tbWl0TG9nLCBpZHgsIGtleSlgIGZyb21cbiAgICogYGZvb3R0cmFjZWAg4oCUIHVuZGVyIGAnZGVsdGEnYCB0aGF0IHZhbHVlIGlzIHZlcmItcXVhbGlmaWVkIChhblxuICAgKiBgYXBwZW5kYCBidW5kbGUgaG9sZHMgb25seSB0aGUgdGFpbCkuIFBhdGgtdGllciBjb25zdW1lcnNcbiAgICogKGBmaW5kTGFzdFdyaXRlcmAsIGBjYXVzYWxDaGFpbmAsIG5hcnJhdGl2ZSwgbGVucyBoaWdobGlnaHRzKSBhcmVcbiAgICogdW5hZmZlY3RlZC4gVGhlIGFjdGl2ZSBtb2RlIGlzIHN1cmZhY2VkIGFzXG4gICAqIGBnZXRTbmFwc2hvdCgpLmNvbW1pdFZhbHVlc2AuXG4gICAqXG4gICAqIEhvbmVzdCBjb3N0IG5vdGU6IGFwcGVuZCBkZXRlY3Rpb24gaXMgbmV3IHdhbGwgd29yayDigJQgYW4gTyh8YmFzZSBhcnJheXwpXG4gICAqIHN0cnVjdHVyYWwgcHJlZml4IGNvbXBhcmUgcGVyIGFycmF5LXNldCBwYXRoIHBlciBjb21taXQuIE9uIGEgaGl0IHRoZVxuICAgKiBjb21taXQgZ2V0cyBjaGVhcGVyIGluIGJvdGggd2FsbCBhbmQgaGVhcDsgb24gYSBtaXNzIChwcmVmaXggZGl2ZXJnZXMpXG4gICAqIGl0IHBheXMgY29tcGFyZSArIGZ1bGwgY2xvbmUuIGAnZnVsbCdgIHBheXMgemVyby5cbiAgICogRXF1aXZhbGVudCB0byBjYWxsaW5nIGBleGVjdXRvci5zZXRDb21taXRWYWx1ZXMobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICAgKi9cbiAgY29tbWl0VmFsdWVzPzogQ29tbWl0VmFsdWVzTW9kZTtcblxuICAvKipcbiAgICogUGVyLXdyaXRlIHJlYWQgcHJvdmVuYW5jZSAoI1AxKSDigJQgdGhlIGZvdXJ0aCBkaWFsIG9mIHRoZSBmYW1pbHkuIERlZmF1bHRcbiAgICogYCdvZmYnYDogemVybyBjb3N0LCBieXRlLWlkZW50aWNhbCBjb21taXQgbG9ncy4gYCdyZWFkcy1wcmVmaXgnYDogZXZlcnlcbiAgICogY29tbWl0dGVkIGBUcmFjZUVudHJ5YCBjYXJyaWVzIGByZWFkS2V5c2Ag4oCUIHRoZSBrZXlzIHRyYWNrZWQtcmVhZCBCRUZPUkVcbiAgICogdGhhdCB3cml0ZSDigJQgZW5hYmxpbmcgcGVyLXdyaXRlIGNhdXNhbCBhdHRyaWJ1dGlvbiAoYGNhdXNhbENoYWluYCdzXG4gICAqIGBlZGdlQXR0cmlidXRpb246ICdwZXItd3JpdGUnYCBhbmQgdmFyaWFibGUgc2xpY2VzKS4gQ29zdDogb25lIHNtYWxsXG4gICAqIGFycmF5IGNvcHkgcGVyIHdyaXRlLiBTbmFwc2hvdCBkaXNjcmltaW5hbnQ6XG4gICAqIGBnZXRTbmFwc2hvdCgpLndyaXRlUHJvdmVuYW5jZWAuXG4gICAqL1xuICB3cml0ZVByb3ZlbmFuY2U/OiBXcml0ZVByb3ZlbmFuY2VNb2RlO1xufVxuXG4vKiogVGhlIHJ1bidzIHBvbGljeTogZXZlcnkgZGlhbCByZXNvbHZlZCwgcGx1cyB0aGUgcmVkYWN0aW9uIHJ1bGUgYW5kIHRoZSBtaXJyb3IgZmxhZy4gRnJvemVuLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5Qb2xpY3kgZXh0ZW5kcyBSZWFkb25seTxSZXF1aXJlZDxSdW5EaWFscz4+IHtcbiAgLyoqIFRoZSBydW4ncyByZWRhY3Rpb24gcnVsZSDigJQgdGhlIE9ORSBvd25lciBvZiB0aGUgdmVyZGljdCAoYHJlZGFjdGlvbi50c2ApLiBBYnNlbnQgb24gYmFyZSBmcmFtZXMuICovXG4gIHJlYWRvbmx5IHJlZGFjdGlvbj86IFJlZGFjdGlvblJ1bGU7XG4gIC8qKiBLZWVwIGEgcmVkYWN0ZWQgbWlycm9yIG9mIHRoZSBoZWFwIChhIHJ1biB3aXRoIGEgcmVkYWN0aW9uIHBvbGljeSkuIEVhY2ggcnVudGltZSBvd25zIGl0cyBvd24gc3RvcmUuICovXG4gIHJlYWRvbmx5IG1pcnJvcjogYm9vbGVhbjtcbn1cblxuLyoqIEVhY2ggZGlhbCdzIGRlZmF1bHQg4oCUIHRoZSB2YWx1ZSBhIHJ1biBnZXRzIHdoZW4gdGhlIG9wdGlvbiBpcyBhYnNlbnQuIFRoZSBkaWFsIGxpc3QgSVMgdGhlc2Uga2V5cy4gKi9cbmV4cG9ydCBjb25zdCBESUFMX0RFRkFVTFRTOiBSZWFkb25seTxSZXF1aXJlZDxSdW5EaWFscz4+ID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHJlYWRUcmFja2luZzogJ2Z1bGwnLFxuICB3cml0ZVRyYWNraW5nOiAnZnVsbCcsXG4gIGNvbW1pdFZhbHVlczogJ2Z1bGwnLFxuICB3cml0ZVByb3ZlbmFuY2U6ICdvZmYnLFxufSk7XG5cbmNvbnN0IERJQUxfTkFNRVMgPSBPYmplY3Qua2V5cyhESUFMX0RFRkFVTFRTKSBhcyBBcnJheTxrZXlvZiBSdW5EaWFscz47XG5cbi8qKiBFdmVyeSBkZWZhdWx0LCBubyBydWxlLCBubyBtaXJyb3Ig4oCUIHdoYXQgYSBiYXJlIGZyYW1lIChhIHVuaXQgdGVzdCdzIGBuZXcgU3RhZ2VDb250ZXh0YCkgcnVucyB1bmRlci4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JVTl9QT0xJQ1k6IFJ1blBvbGljeSA9IE9iamVjdC5mcmVlemUoeyAuLi5ESUFMX0RFRkFVTFRTLCBtaXJyb3I6IGZhbHNlIH0pO1xuXG4vKiogQnVpbGQgYSBydW4ncyBwb2xpY3k6IGFic2VudCBkaWFscyB0YWtlIHRoZWlyIGRlZmF1bHQ7IHRoZSByZXN1bHQgaXMgZnJvemVuLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1blBvbGljeShkaWFsczogUnVuRGlhbHMgPSB7fSwgcmVkYWN0aW9uPzogUmVkYWN0aW9uUnVsZSwgbWlycm9yID0gZmFsc2UpOiBSdW5Qb2xpY3kge1xuICBjb25zdCByZXNvbHZlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLkRJQUxfREVGQVVMVFMsIC4uLnBpY2tEaWFscyhkaWFscyksIG1pcnJvciB9O1xuICBpZiAocmVkYWN0aW9uKSByZXNvbHZlZC5yZWRhY3Rpb24gPSByZWRhY3Rpb247XG4gIHJldHVybiBPYmplY3QuZnJlZXplKHJlc29sdmVkKSBhcyB1bmtub3duIGFzIFJ1blBvbGljeTtcbn1cblxuLyoqIFRoZSBkaWFscyBzZXQgb24gYHNvdXJjZWAgKGFuIG9wdGlvbnMgb2JqZWN0LCBzYXkpIOKAlCBhbmQgbm90aGluZyBlbHNlIGZyb20gaXQuICovXG5leHBvcnQgZnVuY3Rpb24gcGlja0RpYWxzKHNvdXJjZTogUnVuRGlhbHMpOiBSdW5EaWFscyB7XG4gIGNvbnN0IGRpYWxzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IG5hbWUgb2YgRElBTF9OQU1FUykgaWYgKHNvdXJjZVtuYW1lXSAhPT0gdW5kZWZpbmVkKSBkaWFsc1tuYW1lXSA9IHNvdXJjZVtuYW1lXTtcbiAgcmV0dXJuIGRpYWxzIGFzIFJ1bkRpYWxzO1xufVxuXG4vKiogVGhlIHNhbWUgcG9saWN5IHVuZGVyIGFub3RoZXIgcnVsZSDigJQgYSBORVcgZnJvemVuIG9iamVjdDsgdGhlIG9sZCBvbmUgaXMgbmV2ZXIgZWRpdGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhSZWRhY3Rpb24ocG9saWN5OiBSdW5Qb2xpY3ksIHJlZGFjdGlvbjogUmVkYWN0aW9uUnVsZSk6IFJ1blBvbGljeSB7XG4gIHJldHVybiBkZXJpdmVQb2xpY3kocG9saWN5LCB7IHJlZGFjdGlvbiB9KTtcbn1cblxuLyoqXG4gKiBUaGUgc2FtZSBwb2xpY3kgd2l0aCBzb21lIHNldHRpbmdzIGNoYW5nZWQg4oCUIGEgTkVXIGZyb3plbiBvYmplY3Q7IHRoZSBvbGQgb25lIGlzIG5ldmVyXG4gKiBlZGl0ZWQuIEEgZnJhbWUgb3IgcnVudGltZSBjaGFuZ2VzIGEgc2V0dGluZyBieSBzd2FwcGluZyBpbiBhIGRlcml2ZWQgcG9saWN5IChgdXNlUG9saWN5YCksIHNvXG4gKiBubyBtdXRhYmxlIGRpYWwgZmllbGQgZXhpc3RzIGFueXdoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlUG9saWN5KHBvbGljeTogUnVuUG9saWN5LCBwYXRjaDogUGFydGlhbDxSdW5Qb2xpY3k+KTogUnVuUG9saWN5IHtcbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyAuLi5wb2xpY3ksIC4uLnBhdGNoIH0pO1xufVxuIl19
@@ -16,7 +16,7 @@
16
16
  */
17
17
  Object.defineProperty(exports, "__esModule", { value: true });
18
18
  exports.createTypedScope = void 0;
19
- const pathOps_js_1 = require("../memory/pathOps.js");
19
+ const paths_1 = require("foottrace/paths");
20
20
  const runtime_js_1 = require("../scope/runtime.js");
21
21
  const allowlist_js_1 = require("./allowlist.js");
22
22
  const arrayTraps_js_1 = require("./arrayTraps.js");
@@ -39,7 +39,7 @@ const METHOD_ROUTES = {
39
39
  const value = t.getValue(rootKey);
40
40
  if (!dotPath.includes('.'))
41
41
  return value;
42
- return (0, pathOps_js_1.nativeGet)(value, dotPath.slice(rootKey.length + 1));
42
+ return (0, paths_1.nativeGet)(value, dotPath.slice(rootKey.length + 1));
43
43
  },
44
44
  $getArgs: (t) => t.getArgs.bind(t),
45
45
  $getEnv: (t) => t.getEnv.bind(t),
@@ -303,4 +303,4 @@ function createTypedScope(target, options) {
303
303
  });
304
304
  }
305
305
  exports.createTypedScope = createTypedScope;
306
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlVHlwZWRTY29wZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvY3JlYXRlVHlwZWRTY29wZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7OztBQUVILHFEQUE4RDtBQUM5RCxvREFBMkQ7QUFDM0QsaURBQXFEO0FBQ3JELG1EQUErQztBQUMvQyw2Q0FBNkQ7QUFDN0QsK0NBQXdHO0FBRXhHLHlDQUFnRDtBQUNoRCxtREFBMkY7QUFNM0YsTUFBTSxhQUFhLEdBQWlDO0lBQ2xELFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLHlFQUF5RTtJQUN6RSwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLGlFQUFpRTtJQUNqRSxpREFBaUQ7SUFDakQsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQVcsRUFBRSxLQUFjLEVBQUUsWUFBc0IsRUFBRSxXQUFvQixFQUFFLEVBQUUsQ0FDOUYsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBQSwwQkFBYSxFQUFDLEtBQUssQ0FBQyxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUM7SUFDbEUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQVcsRUFBRSxLQUFjLEVBQUUsV0FBb0IsRUFBRSxFQUFFLENBQ3BFLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUEsMEJBQWEsRUFBQyxLQUFLLENBQUMsRUFBRSxXQUFXLENBQUM7SUFDdkQsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQWUsRUFBRSxFQUFFO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN6QyxPQUFPLElBQUEsc0JBQVMsRUFBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNELFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ25DLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQy9CLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMxRCxvQkFBb0IsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUQsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3RELFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBNEIsRUFBRSxFQUFFO1FBQ2hFLG1DQUFtQztRQUNuQyxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLHVFQUF1RTtRQUN2RSx5RUFBeUU7UUFDekUsa0VBQWtFO1FBQ2xFLHdFQUF3RTtRQUN4RSx5RUFBeUU7UUFDekUsb0VBQW9FO1FBQ3BFLHFFQUFxRTtRQUNyRSxNQUFNLEtBQUssR0FBYyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRixtRkFBbUY7UUFDbkYsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ1Ysd0VBQXdFO1FBQ3hFLHlFQUF5RTtRQUN6RSwyREFBMkQ7UUFDM0QsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBQSwwQkFBYSxFQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUNELE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBZSxFQUFFLEVBQUU7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUNELDBFQUEwRTtJQUMxRSx1RUFBdUU7SUFDdkUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakMsMkVBQTJFO0lBQzNFLDJDQUEyQztJQUMzQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEQsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRCxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7Q0FDdkIsQ0FBQztBQUVGLCtFQUErRTtBQUMvRSwwRUFBMEU7QUFDMUUsMERBQTBEO0FBRTFELE1BQU0sV0FBVyxHQUFxQztJQUNwRCxJQUFJLEVBQUUsU0FBUyxFQUFFLDRCQUE0QjtJQUM3QyxlQUFlLEVBQUUsU0FBUyxFQUFFLHdDQUF3QztJQUNwRSxXQUFXLEVBQUUsTUFBTSxFQUFFLGlCQUFpQjtJQUN0QyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxZQUFZO0NBQ25DLENBQUM7QUFFRiwrRUFBK0U7QUFFL0U7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsTUFBc0IsRUFBRSxHQUFXO0lBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzNDLE9BQU8sTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBVUQsZ0ZBQWdGO0FBQ2hGLEVBQUU7QUFDRiw2RUFBNkU7QUFDN0UsMkVBQTJFO0FBQzNFLDJFQUEyRTtBQUMzRSxxRUFBcUU7QUFDckUsRUFBRTtBQUNGLDRFQUE0RTtBQUM1RSx3RUFBd0U7QUFDeEUsMkVBQTJFO0FBQzNFLHdFQUF3RTtBQUN4RSwyRUFBMkU7QUFDM0UsMEVBQTBFO0FBQzFFLDZFQUE2RTtBQUM3RSxtREFBbUQ7QUFFbkQsU0FBUyxtQkFBbUIsQ0FDMUIsR0FBNEIsRUFDNUIsSUFBZSxFQUNmLFFBQTJCLEVBQzNCLFVBQXVCLElBQUksR0FBRyxFQUFFO0lBRWhDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakIsTUFBTSxPQUFPLEdBQUcsSUFBSSx5QkFBVyxFQUFFLENBQUM7SUFDbEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBQSx3QkFBVSxFQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDMUQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFjLEVBQUUsSUFBYyxFQUFXLEVBQUU7UUFDeEQsSUFBSSxDQUFDLElBQUEsa0NBQW1CLEVBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDOUMsdUVBQXVFO1FBQ3ZFLDJFQUEyRTtRQUMzRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFBLDRCQUFZLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFlLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUMvQyxPQUFPLG1CQUFtQixDQUFDLEtBQWdDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNwRixDQUFDLENBQUM7SUFDRixPQUFPLElBQUEsMkJBQWMsRUFDbkIsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFO1FBQ2IsR0FBRyxFQUFFLElBQUEseUJBQVcsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUM7UUFDaEQsR0FBRyxFQUFFLElBQUEsMkJBQVcsRUFBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO1FBQ2hDLGNBQWMsRUFBRSxJQUFBLDhCQUFjLEVBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQztRQUM5QyxHQUFHLElBQUEsaUNBQW1CLEVBQUMsSUFBSSxDQUFDO0tBQzdCLENBQUMsRUFDRixJQUFJLENBQ0wsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUN4QixHQUE0QixFQUM1QixJQUFlLEVBQ2YsUUFBMkIsRUFDM0IsWUFBeUIsSUFBSSxHQUFHLEVBQUU7SUFFbEMseUVBQXlFO0lBQ3pFLHdFQUF3RTtJQUN4RSw0RUFBNEU7SUFDNUUsTUFBTSxPQUFPLEdBQUcsSUFBSSx5QkFBVyxFQUFFLENBQUM7SUFDbEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBQSx3QkFBVSxFQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDMUQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFjLEVBQUUsSUFBYyxFQUFXLEVBQUU7UUFDeEQsSUFBSSxDQUFDLElBQUEsa0NBQW1CLEVBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDOUMsMEVBQTBFO1FBQzFFLHVEQUF1RDtRQUN2RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQUUsT0FBTyxJQUFBLDRCQUFZLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFELElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFlLENBQUM7WUFBRSxPQUFPLG1CQUFtQixDQUFDLEtBQWdDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdHLE9BQU8saUJBQWlCLENBQUMsS0FBZ0MsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFlLENBQUMsQ0FBQyxDQUFDO0lBQ2xILENBQUMsQ0FBQztJQUNGLE9BQU8sSUFBQSwyQkFBYyxFQUNuQixJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUU7UUFDYixHQUFHLEVBQUUsSUFBQSx5QkFBVyxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQztRQUNoRCxHQUFHLEVBQUUsSUFBQSwyQkFBVyxFQUFDLElBQUksRUFBRSxRQUFRLENBQUM7UUFDaEMsY0FBYyxFQUFFLElBQUEsOEJBQWMsRUFBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO1FBQzlDLEdBQUcsSUFBQSxpQ0FBbUIsRUFBQyxJQUFJLENBQUM7S0FDN0IsQ0FBQyxFQUNGLElBQUksQ0FDTCxDQUFDO0FBQ0osQ0FBQztBQUVELGdGQUFnRjtBQUVoRiwyR0FBMkc7QUFDM0csTUFBTSxTQUFTLEdBQWtCLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUVyRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsU0FBUyxZQUFZLENBQUMsTUFBc0IsRUFBRSxLQUFvQixFQUFFLElBQXFCO0lBQ3ZGLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQztZQUFFLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RGLElBQUksSUFBSSxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUM7WUFBRSxPQUFPLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN0RixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQztRQUFFLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RGLElBQUksNkJBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztRQUFFLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlFLElBQUksSUFBSSxLQUFLLFFBQVEsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssS0FBSztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ3BGLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyxjQUFjLENBQ3JCLE1BQXNCLEVBQ3RCLFVBQW9DLEVBQ3BDLEtBQW9CLEVBQ3BCLEdBQVcsRUFDWCxLQUFjO0lBRWQsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxTQUFTLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ3JGLElBQUksQ0FBQyxJQUFBLGtDQUFtQixFQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDLENBQUMsc0NBQXNDO0lBQ3JGLE9BQU8sSUFBQSwwQkFBWSxFQUNqQixLQUFLLENBQUMsVUFBVSxFQUNoQixHQUFHLEVBQ0gsS0FBSyxFQUNMLEdBQUcsRUFBRTtRQUNILE1BQU0sSUFBSSxHQUFHLElBQUEsMkJBQVcsRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUFFLE9BQU8sSUFBQSw0QkFBWSxFQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4RCxPQUFPLGlCQUFpQixDQUFDLEtBQWdDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEdBQUcsQ0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRyxDQUFDLEVBQ0QsRUFBRSxDQUNILENBQUM7QUFDSixDQUFDO0FBRUQ7O3NGQUVzRjtBQUN0RixTQUFTLGNBQWMsQ0FBQyxNQUFzQixFQUFFLEtBQW9CLEVBQUUsR0FBVyxFQUFFLEtBQWM7SUFDL0YsSUFBSSw2QkFBa0IsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNoQyxNQUFNLElBQUksS0FBSyxDQUNiLHlCQUF5QixHQUFHLHNHQUFzRyxDQUNuSSxDQUFDO0lBQ0osQ0FBQztJQUNELE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUEsMEJBQWEsRUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzNDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9CLENBQUM7QUFFRCxtSEFBbUg7QUFDbkgsU0FBUyxRQUFRLENBQUMsTUFBc0IsRUFBRSxHQUFXO0lBQ25ELElBQUksTUFBTSxDQUFDLE1BQU07UUFBRSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0MsSUFBSSxNQUFNLENBQUMsWUFBWTtRQUFFLE9BQU8sTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwRSxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsa0RBQWtEO0FBQy9GLENBQUM7QUFFRCxxRkFBcUY7QUFDckYsU0FBUyxTQUFTLENBQUMsTUFBc0I7SUFDdkMsSUFBSSxNQUFNLENBQUMsWUFBWTtRQUFFLE9BQU8sTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEVBQXlDLENBQUM7SUFDMUUsT0FBTyxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDL0UsQ0FBQztBQUVELCtFQUErRTtBQUUvRTs7Ozs7O0dBTUc7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBbUIsTUFBc0IsRUFBRSxPQUF5QjtJQUNsRyxNQUFNLEtBQUssR0FBa0IsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsSUFBSSx5QkFBVyxFQUFFLEVBQUUsQ0FBQztJQUNoRywyRkFBMkY7SUFDM0YsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFM0UsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsTUFBa0MsRUFBRTtRQUMxRCxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUk7WUFDcEIsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbkQsSUFBSSxRQUFRLEtBQUssU0FBUztnQkFBRSxPQUFPLFFBQVEsQ0FBQztZQUM1Qyx1RUFBdUU7WUFDdkUsT0FBTyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBYyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBYyxDQUFDLENBQUMsQ0FBQztRQUNwRyxDQUFDO1FBQ0QsR0FBRyxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsS0FBSztZQUMzQixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7Z0JBQUUsY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELGNBQWMsQ0FBQyxZQUFZLEVBQUUsSUFBSTtZQUMvQixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDMUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QixLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUk7WUFDcEIsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO2dCQUFFLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3RixPQUFPLDZCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUNoQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsSUFBSTtZQUN6QyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSw2QkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUFFLE9BQU8sU0FBUyxDQUFDLENBQUMsK0JBQStCO1lBQy9HLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztnQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLHdDQUF3QztRQUMzRyxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxJQUFBLGlDQUFvQixFQUFDLEtBQUssRUFBRTtRQUNqQyxNQUFNO1FBQ04sa0JBQWtCLEVBQUUsSUFBSTtRQUN4QixRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUNmLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBeENELDRDQXdDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcmVhY3RpdmUvY3JlYXRlVHlwZWRTY29wZSAtLSBDb3JlIFByb3h5IGZhY3RvcnkgZm9yIFR5cGVkU2NvcGU8VD4uXG4gKlxuICogV3JhcHMgYSBSZWFjdGl2ZVRhcmdldCAoU2NvcGVGYWNhZGUpIGluIGEgUHJveHkgdGhhdCBwcm92aWRlczpcbiAqIC0gVHlwZWQgcHJvcGVydHkgYWNjZXNzOiBzY29wZS5jcmVkaXRUaWVyIChyZWFkKSwgc2NvcGUuY3JlZGl0VGllciA9ICdBJyAod3JpdGUpXG4gKiAtIERlZXAgd3JpdGUgaW50ZXJjZXB0aW9uOiBzY29wZS5jdXN0b21lci5hZGRyZXNzLnppcCA9ICc5MDIxMCdcbiAqIC0gQXJyYXkgbXV0YXRpb24gaW50ZXJjZXB0aW9uOiBzY29wZS5pdGVtcy5wdXNoKCduZXcnKVxuICogLSAkLXByZWZpeGVkIGVzY2FwZSBoYXRjaGVzOiAkZ2V0VmFsdWUsICRzZXRWYWx1ZSwgJHJlYWQsICRnZXRBcmdzLCBldGMuXG4gKlxuICogUmVhZCBzZW1hbnRpY3M6IHRvcC1sZXZlbCBnZXQgY2FsbHMgZ2V0VmFsdWUoKSAoZmlyZXMgb25SZWFkIE9OQ0UpLlxuICogICBOZXN0ZWQgZ2V0IHRyYXBzIG5hdmlnYXRlIGluLW1lbW9yeSAtLSBubyBhZGRpdGlvbmFsIG9uUmVhZC5cbiAqXG4gKiBXcml0ZSBzZW1hbnRpY3M6IHRvcC1sZXZlbCBzZXQgY2FsbHMgc2V0VmFsdWUoKS4gTmVzdGVkIHNldCBjYWxsc1xuICogICB1cGRhdGVWYWx1ZSgpIHdpdGggYSBwYXJ0aWFsIG9iamVjdCBidWlsdCBmcm9tIHRoZSBhY2N1bXVsYXRlZCBwYXRoLlxuICovXG5cbmltcG9ydCB7IG5hdGl2ZUdldCBhcyBsb2Rhc2hHZXQgfSBmcm9tICcuLi9tZW1vcnkvcGF0aE9wcy5qcyc7XG5pbXBvcnQgeyByZWdpc3RlclNjb3BlUnVudGltZSB9IGZyb20gJy4uL3Njb3BlL3J1bnRpbWUuanMnO1xuaW1wb3J0IHsgc2hvdWxkV3JhcFdpdGhQcm94eSB9IGZyb20gJy4vYWxsb3dsaXN0LmpzJztcbmltcG9ydCB7IGFycmF5UHJveHlBdCB9IGZyb20gJy4vYXJyYXlUcmFwcy5qcyc7XG5pbXBvcnQgeyByZW1lbWJlckhhbmRsZSwgdW53cmFwSGFuZGxlcyB9IGZyb20gJy4vaGFuZGxlcy5qcyc7XG5pbXBvcnQgeyBjYWNoZWRNZW1iZXIsIGxpdmVHZXRUcmFwLCBsaXZlSW5zcGVjdGlvblRyYXBzLCBsaXZlT2JqZWN0LCBNZW1iZXJDYWNoZSB9IGZyb20gJy4vbGl2ZVZpZXcuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWFjdGl2ZU9wdGlvbnMsIFJlYWN0aXZlVGFyZ2V0LCBUeXBlZFNjb3BlIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBTQ09QRV9NRVRIT0RfTkFNRVMgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IHR5cGUgV3JpdGVTaW5rLCByb290S2V5U2luaywgc2lua0RlbGV0ZVRyYXAsIHNpbmtTZXRUcmFwIH0gZnJvbSAnLi93cml0ZVRyYXBzLmpzJztcblxuLy8gLS0gJC1tZXRob2Qgcm91dGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50eXBlIE1ldGhvZFJvdXRlciA9ICh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBvcHRzOiBSZWFjdGl2ZVN0YXRlKSA9PiB1bmtub3duO1xuXG5jb25zdCBNRVRIT0RfUk9VVEVTOiBSZWNvcmQ8c3RyaW5nLCBNZXRob2RSb3V0ZXI+ID0ge1xuICAkZ2V0VmFsdWU6ICh0KSA9PiB0LmdldFZhbHVlLmJpbmQodCksXG4gIC8vIEEgaGFuZGxlIHRoZSBzY29wZSBoYW5kZWQgb3V0IGlzIGEgdmFsdWUgaXQgYWNjZXB0cyBiYWNrIChoYW5kbGVzLnRzKTpcbiAgLy8gYCRzZXRWYWx1ZSgnY29weScsIHNjb3BlLmN1c3RvbWVyKWAgc3RvcmVzIHRoZSB2YWx1ZSBiZWhpbmQgdGhlIGhhbmRsZSxcbiAgLy8gbm90IGEgUHJveHkgdGhlIGNvbW1pdCBjb3VsZCBuZXZlciBjbG9uZS4gVGhlIHNldCB0cmFwIGRvZXMgdGhlIHNhbWUgZm9yXG4gIC8vIGBzY29wZS5jb3B5ID0gc2NvcGUuY3VzdG9tZXJgOyB0aGVzZSBhcmUgdGhlIGV4cGxpY2l0IGRvb3JzLiBBXG4gIC8vIGhhbmRsZS1mcmVlIHZhbHVlIHBhc3NlcyB0aHJvdWdoIGJ5IHJlZmVyZW5jZS5cbiAgJHNldFZhbHVlOiAodCkgPT4gKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgc2hvdWxkUmVkYWN0PzogYm9vbGVhbiwgZGVzY3JpcHRpb24/OiBzdHJpbmcpID0+XG4gICAgdC5zZXRWYWx1ZShrZXksIHVud3JhcEhhbmRsZXModmFsdWUpLCBzaG91bGRSZWRhY3QsIGRlc2NyaXB0aW9uKSxcbiAgJHVwZGF0ZTogKHQpID0+IChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIGRlc2NyaXB0aW9uPzogc3RyaW5nKSA9PlxuICAgIHQudXBkYXRlVmFsdWUoa2V5LCB1bndyYXBIYW5kbGVzKHZhbHVlKSwgZGVzY3JpcHRpb24pLFxuICAkZGVsZXRlOiAodCkgPT4gdC5kZWxldGVWYWx1ZS5iaW5kKHQpLFxuICAkcmVhZDogKHQpID0+IChkb3RQYXRoOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByb290S2V5ID0gZG90UGF0aC5zcGxpdCgnLicpWzBdO1xuICAgIGNvbnN0IHZhbHVlID0gdC5nZXRWYWx1ZShyb290S2V5KTtcbiAgICBpZiAoIWRvdFBhdGguaW5jbHVkZXMoJy4nKSkgcmV0dXJuIHZhbHVlO1xuICAgIHJldHVybiBsb2Rhc2hHZXQodmFsdWUsIGRvdFBhdGguc2xpY2Uocm9vdEtleS5sZW5ndGggKyAxKSk7XG4gIH0sXG4gICRnZXRBcmdzOiAodCkgPT4gdC5nZXRBcmdzLmJpbmQodCksXG4gICRnZXRFbnY6ICh0KSA9PiB0LmdldEVudi5iaW5kKHQpLFxuICAkZGVidWc6ICh0KSA9PiB0LmFkZERlYnVnSW5mby5iaW5kKHQpLFxuICAkbG9nOiAodCkgPT4gdC5hZGREZWJ1Z01lc3NhZ2UuYmluZCh0KSxcbiAgJGVycm9yOiAodCkgPT4gdC5hZGRFcnJvckluZm8uYmluZCh0KSxcbiAgJG1ldHJpYzogKHQpID0+IHQuYWRkTWV0cmljLmJpbmQodCksXG4gICRldmFsOiAodCkgPT4gdC5hZGRFdmFsLmJpbmQodCksXG4gICRhdHRhY2hTY29wZVJlY29yZGVyOiAodCkgPT4gdC5hdHRhY2hTY29wZVJlY29yZGVyLmJpbmQodCksXG4gICRkZXRhY2hTY29wZVJlY29yZGVyOiAodCkgPT4gdC5kZXRhY2hTY29wZVJlY29yZGVyLmJpbmQodCksXG4gICRnZXRTY29wZVJlY29yZGVyczogKHQpID0+IHQuZ2V0U2NvcGVSZWNvcmRlcnMuYmluZCh0KSxcbiAgJGJhdGNoQXJyYXk6ICh0KSA9PiAoa2V5OiBzdHJpbmcsIGZuOiAoYXJyOiB1bmtub3duW10pID0+IHZvaWQpID0+IHtcbiAgICAvLyBPbmUgZ2V0VmFsdWUg4oCUIGZpcmVzIG9uUmVhZCBvbmNlXG4gICAgY29uc3QgY3VycmVudCA9IHQuZ2V0VmFsdWUoa2V5KTtcbiAgICAvLyBDbG9uZSBvbmNlIOKAlCBERUVQIChvciBzdGFydCBlbXB0eSBpZiBtaXNzaW5nL25vbi1hcnJheSkuIFRoZSByZWFkIGlzXG4gICAgLy8gQk9SUk9XRUQ6IGJlZm9yZSB0aGUgc3RhZ2UncyBmaXJzdCBzdGFnZWQgd3JpdGUgaXQgaXMgY29tbWl0dGVkIHNoYXJlZFxuICAgIC8vIG1lbW9yeSBpdHNlbGYsIHNvIGEgc2hhbGxvdyBgWy4uLmN1cnJlbnRdYCBoYW5kZWQgdGhlIHN0YWdlIHRoZVxuICAgIC8vIGNvbW1pdHRlZCBFTEVNRU5UUyBhbmQgYGFyclswXS5uID0gOWAgZWRpdGVkIGNvbW1pdHRlZCBzdGF0ZSBpbiBwbGFjZVxuICAgIC8vIHdpdGggbm8gdHJhY2Ugcm93IChhbmQgdGhlIGxhenkgYnVmZmVyJ3MgYmFzZSB3YXMgdGhlbiB0YWtlbiBBRlRFUiB0aGVcbiAgICAvLyBlZGl0LCBzbyB0aGUgbmV0LWNoYW5nZSBmaWx0ZXIgc2F3IG5vdGhpbmcpLiBTdGF0ZSB2YWx1ZXMgc3Vydml2ZVxuICAgIC8vIGBzdHJ1Y3R1cmVkQ2xvbmVgIGJ5IGNvbnRyYWN0LCBzbyB0aGUgd29ya2luZyBjb3B5IGlzIGEgZnVsbCBjb3B5LlxuICAgIGNvbnN0IGNsb25lOiB1bmtub3duW10gPSBBcnJheS5pc0FycmF5KGN1cnJlbnQpID8gc3RydWN0dXJlZENsb25lKGN1cnJlbnQpIDogW107XG4gICAgLy8gVXNlciBhcHBsaWVzIGFsbCBtdXRhdGlvbnMgdG8gdGhlIHBsYWluIGNsb25lIOKAlCBubyBQcm94eSwgbm8gcGVyLW11dGF0aW9uIGNvbW1pdFxuICAgIGZuKGNsb25lKTtcbiAgICAvLyBPbmUgc2V0VmFsdWUg4oCUIGZpcmVzIG9uV3JpdGUgb25jZSB3aXRoIHRoZSBmaW5hbCBhcnJheS4gVGhlIHN0YWdlIG1heVxuICAgIC8vIGhhdmUgcHVzaGVkIGhhbmRsZXMgaW50byB0aGUgY2xvbmUgKGBhcnIucHVzaChzY29wZS50ZW1wbGF0ZSlgKSDigJQgdGhleVxuICAgIC8vIGFyZSB2YWx1ZXMgYnkgdGhlIHRpbWUgdGhlIGFycmF5IGlzIHN0YWdlZCAoaGFuZGxlcy50cykuXG4gICAgdC5zZXRWYWx1ZShrZXksIHVud3JhcEhhbmRsZXMoY2xvbmUpKTtcbiAgfSxcbiAgJGJyZWFrOiAoX3QsIG9wdHMpID0+IChyZWFzb24/OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIW9wdHMuYnJlYWtGbikgdGhyb3cgbmV3IEVycm9yKCckYnJlYWsoKSBpcyBub3QgYXZhaWxhYmxlIG91dHNpZGUgc3RhZ2UgZXhlY3V0aW9uJyk7XG4gICAgb3B0cy5icmVha0ZuKHJlYXNvbik7XG4gIH0sXG4gIC8vIE9ic2VydmFiaWxpdHkg4oCUIEVtaXQgY2hhbm5lbCAoUGhhc2UgMykuIFJvdXRlcyB0byBTY29wZUZhY2FkZS5lbWl0RXZlbnRcbiAgLy8gd2hpY2ggaGFuZGxlcyBmYXN0LXBhdGgsIGVucmljaG1lbnQsIHJlZGFjdGlvbiwgYW5kIGVycm9yIGlzb2xhdGlvbi5cbiAgJGVtaXQ6ICh0KSA9PiB0LmVtaXRFdmVudC5iaW5kKHQpLFxuICAvLyBEZXRhY2ggKFQ0KSDigJQgZmlyZS1hbmQtZm9yZ2V0IGNoaWxkIGZsb3djaGFydHMuIERlbGVnYXRlcyB0byBTY29wZUZhY2FkZVxuICAvLyB3aGljaCBtaW50ZWQgcmVmSWRzIGZyb20gcnVudGltZVN0YWdlSWQuXG4gICRkZXRhY2hBbmRKb2luTGF0ZXI6ICh0KSA9PiB0LmRldGFjaEFuZEpvaW5MYXRlci5iaW5kKHQpLFxuICAkZGV0YWNoQW5kRm9yZ2V0OiAodCkgPT4gdC5kZXRhY2hBbmRGb3JnZXQuYmluZCh0KSxcbiAgJHRvUmF3OiAodCkgPT4gKCkgPT4gdCxcbn07XG5cbi8vIC0tIEd1YXJkIHByb3BlcnRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoZXNlIG11c3QgYmUgaGFuZGxlZCB0byBwcmV2ZW50IFByb3h5IGZyb20gYmVpbmcgdHJlYXRlZCBhcyBhIFByb21pc2UsXG4vLyBicmVha2luZyBpbnN0YW5jZW9mIGNoZWNrcywgb3IgY29uZnVzaW5nIHRlc3QgbWF0Y2hlcnMuXG5cbmNvbnN0IEdVQVJEX1BST1BTOiBSZWNvcmQ8c3RyaW5nIHwgc3ltYm9sLCB1bmtub3duPiA9IHtcbiAgdGhlbjogdW5kZWZpbmVkLCAvLyBwcmV2ZW50IFByb21pc2UgZGV0ZWN0aW9uXG4gIGFzeW1tZXRyaWNNYXRjaDogdW5kZWZpbmVkLCAvLyBwcmV2ZW50IHZpdGVzdC9qZXN0IG1hdGNoZXIgY29uZnVzaW9uXG4gIGNvbnN0cnVjdG9yOiBPYmplY3QsIC8vIHNhZmUgcHJvdG90eXBlXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiAnVHlwZWRTY29wZScsXG59O1xuXG4vLyAtLSBTaWxlbnQgZXhpc3RlbmNlIGNoZWNrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRG9lcyB0aGlzIGtleSBleGlzdCBpbiBzdGF0ZSwgYW5zd2VyZWQgd2l0aCBOTyB0cmFja2luZyBzaWRlIGVmZmVjdCBhdCBhbGw/XG4gKlxuICogYGdldFN0YXRlS2V5cygpYCBpcyB0aGUgb25seSBpbnNwZWN0aW9uIGEgU2NvcGVGYWNhZGUgYW5zd2VycyB3aXRob3V0IHJvdXRpbmdcbiAqIHRocm91Z2ggdGhlIHRyYWNrZWQgcmVhZCBwYXRoLiBgaGFzS2V5KClgIGRlbGliZXJhdGVseSBET0VTIHJvdXRlIHRocm91Z2ggaXQ6XG4gKiBgJ2snIGluIHNjb3BlYCBpcyBhIHJlYWwgcXVlc3Rpb24gYWJvdXQgc3RhdGUgdGhhdCBhIHN0YWdlIGNhbiBicmFuY2ggb24sIHNvXG4gKiBpdCByZWdpc3RlcnMgYXMgYSByZWFkIOKAlCB3aGljaCBpcyBleGFjdGx5IHdoeSB0aGlzIHByb2JlIG11c3Qgbm90IHVzZSBpdC5cbiAqXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gdGhlIHRhcmdldCBvZmZlcnMgbm8gc2lsZW50IGFuc3dlcjsgY2FsbGVycyBtdXN0XG4gKiB0aGVuIGNob29zZSBkZWxpYmVyYXRlbHkgcmF0aGVyIHRoYW4gYXNzdW1lLlxuICovXG5mdW5jdGlvbiBzaWxlbnRseUtub3duS2V5KHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIGtleTogc3RyaW5nKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIGlmICghdGFyZ2V0LmdldFN0YXRlS2V5cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHRhcmdldC5nZXRTdGF0ZUtleXMoKS5pbmNsdWRlcyhrZXkpO1xufVxuXG4vLyAtLSBNdXRhYmxlIHN0YXRlIHBlciBwcm94eSBpbnN0YW5jZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmludGVyZmFjZSBSZWFjdGl2ZVN0YXRlIHtcbiAgYnJlYWtGbj86IChyZWFzb24/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIC8qKiBUaGUgdG9wLWxldmVsIGtleSdzIGNoaWxkIHByb3h5LCB2YWxpZGF0ZWQgYnkgcmF3IGlkZW50aXR5IChgbGl2ZVZpZXcudHMgwrcgY2FjaGVkTWVtYmVyYCk7IGEgc2luayBkcm9wcyB0aGUga2V5IG9uIHdyaXRlLiAqL1xuICBjaGlsZENhY2hlOiBNZW1iZXJDYWNoZTtcbn1cblxuLy8gLS0gTmVzdGVkIGNoaWxkIHByb3hpZXMgKGZvciBkZWVwIHdyaXRlIGludGVyY2VwdGlvbikgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vXG4vLyBCb3RoIGZhY3RvcmllcyBhcmUgT1JDSEVTVFJBVE9SUyAoOS4yMy4xKTogcmVhZHMgYXJlIGBsaXZlVmlldy50c2AsIHdyaXRlc1xuLy8gYXJlIGB3cml0ZVRyYXBzLnRzYCBvdmVyIGEgYHJvb3RLZXlTaW5rYCwgYW5kIHRoZSBPTkUgdGhpbmcgZWFjaCBkZWNpZGVzXG4vLyBpdHNlbGYgaXMgd2hhdCBhIGNoaWxkIG1lbWJlciBiZWNvbWVzIOKAlCB0aGUgY3ljbGUgcG9saWN5LiBFYWNoIGhvbGRzIGl0c1xuLy8gb3duIHBlci1tZW1iZXIgcHJveHkgY2FjaGUgKDkuMjMuMiwgYGxpdmVWaWV3LnRzIMK3IGNhY2hlZE1lbWJlcmApLlxuLy9cbi8vIEN5Y2xlIHNhZmV0eTogYW4gaW1tdXRhYmxlIFNldDxvYmplY3Q+IG9mIGFuY2VzdG9yIG9iamVjdHMgaXMgcGFzc2VkIGRvd25cbi8vIGVhY2ggYWNjZXNzIGNoYWluLiBFYWNoIGJyYW5jaCBnZXRzIGl0cyBvd24gY29weSAobmV3IFNldChwYXJlbnQpKSBzb1xuLy8gc2NvcGUueC5mcmllbmQgYW5kIHNjb3BlLnguY293b3JrZXIgZG9uJ3QgcG9sbHV0ZSBlYWNoIG90aGVyJ3MgdHJhY2tpbmcuXG4vLyBXaGVuIGEgY2hpbGQgdmFsdWUgaXMgYWxyZWFkeSBpbiB0aGUgYW5jZXN0b3Igc2V0LCB3ZSd2ZSBoaXQgYSBjeWNsZS5cbi8vIEF0IHRoZSBjeWNsZSBicmVhazogcmV0dXJuIGEgdGVybWluYWwgcHJveHkgdGhhdCB0cmFja3Mgd3JpdGVzIChzZXQgdHJhcFxuLy8gc3RpbGwgYnVpbGRzIHBhdGggKyBjb21taXRzIHRocm91Z2ggdGhlIHNpbmspIGJ1dCBkb2Vzbid0IHJlY3Vyc2UgcmVhZHNcbi8vIGZ1cnRoZXIuIFRoZSB0ZXJtaW5hbCBjaGFpbiBzaGFyZXMgT05FIG11dGFibGUgYHZpc2l0ZWRgIHNldDogYSB2YWx1ZSBzZWVuXG4vLyBhbnl3aGVyZSBwYXN0IHRoZSBjeWNsZSBlZGdlIGlzIGhhbmRlZCBiYWNrIHJhdy5cblxuZnVuY3Rpb24gY3JlYXRlVGVybWluYWxQcm94eShcbiAgb2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgc2luazogV3JpdGVTaW5rLFxuICBzZWdtZW50czogcmVhZG9ubHkgc3RyaW5nW10sXG4gIHZpc2l0ZWQ6IFNldDxvYmplY3Q+ID0gbmV3IFNldCgpLFxuKTogdW5rbm93biB7XG4gIHZpc2l0ZWQuYWRkKG9iaik7XG4gIGNvbnN0IG1lbWJlcnMgPSBuZXcgTWVtYmVyQ2FjaGUoKTtcbiAgY29uc3QgbGl2ZSA9ICgpID0+IGxpdmVPYmplY3Qob2JqLCBzaW5rLnJlYWRBdChzZWdtZW50cykpO1xuICBjb25zdCBjaGlsZCA9ICh2YWx1ZTogdW5rbm93biwgcGF0aDogc3RyaW5nW10pOiB1bmtub3duID0+IHtcbiAgICBpZiAoIXNob3VsZFdyYXBXaXRoUHJveHkodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgLy8gQW4gYXJyYXkgcGFzdCB0aGUgY3ljbGUgZWRnZSBzdGlsbCBnZXRzIGNvcHktb24td3JpdGUgaW50ZXJjZXB0aW9uIOKAlFxuICAgIC8vIGl0IGNvbW1pdHMgYXMgYSBgc2V0YCBvZiB0aGUgcm9vdCBrZXksIHRoZSBzYW1lIGxhdyBhcyB0aGUgbmVzdGVkIHByb3h5LlxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIGFycmF5UHJveHlBdChzaW5rLCBwYXRoKTtcbiAgICBpZiAodmlzaXRlZC5oYXModmFsdWUgYXMgb2JqZWN0KSkgcmV0dXJuIHZhbHVlO1xuICAgIHJldHVybiBjcmVhdGVUZXJtaW5hbFByb3h5KHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBzaW5rLCBwYXRoLCB2aXNpdGVkKTtcbiAgfTtcbiAgcmV0dXJuIHJlbWVtYmVySGFuZGxlKFxuICAgIG5ldyBQcm94eShvYmosIHtcbiAgICAgIGdldDogbGl2ZUdldFRyYXAobGl2ZSwgc2VnbWVudHMsIGNoaWxkLCBtZW1iZXJzKSxcbiAgICAgIHNldDogc2lua1NldFRyYXAoc2luaywgc2VnbWVudHMpLFxuICAgICAgZGVsZXRlUHJvcGVydHk6IHNpbmtEZWxldGVUcmFwKHNpbmssIHNlZ21lbnRzKSxcbiAgICAgIC4uLmxpdmVJbnNwZWN0aW9uVHJhcHMobGl2ZSksXG4gICAgfSksXG4gICAgbGl2ZSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTmVzdGVkUHJveHkoXG4gIG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHNpbms6IFdyaXRlU2luayxcbiAgc2VnbWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICBhbmNlc3RvcnM6IFNldDxvYmplY3Q+ID0gbmV3IFNldCgpLFxuKTogdW5rbm93biB7XG4gIC8vIFJlYWRzIGFyZSBMSVZFICg5LjIyLjApOiBhIGhlbGQgcHJveHkgcmVhZHMgaXRzIG93biB3cml0ZXMsIGAneCcgaW4gb2BcbiAgLy8gYW5kIGBPYmplY3Qua2V5cyhvKWAgc2VlIHRoZW0sIGFuZCBgby5iID0gby5hICogMTBgIHVzZXMgdGhlIG5ldyBgYWAuXG4gIC8vIFRoZSBjYXB0dXJlZCBvYmplY3QgYW5zd2VycyBvbmx5IHdoZW4gdGhlIHBhdGggaXMgZ29uZSDigJQgc2VlIGxpdmVWaWV3LnRzLlxuICBjb25zdCBtZW1iZXJzID0gbmV3IE1lbWJlckNhY2hlKCk7XG4gIGNvbnN0IGxpdmUgPSAoKSA9PiBsaXZlT2JqZWN0KG9iaiwgc2luay5yZWFkQXQoc2VnbWVudHMpKTtcbiAgY29uc3QgY2hpbGQgPSAodmFsdWU6IHVua25vd24sIHBhdGg6IHN0cmluZ1tdKTogdW5rbm93biA9PiB7XG4gICAgaWYgKCFzaG91bGRXcmFwV2l0aFByb3h5KHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIC8vIEFuIGFycmF5IGNvbW1pdHMgYXMgYSBgc2V0YCBvZiB0aGUgUk9PVCBLRVkgKHJlYWN0aXZlL1JFQURNRS5tZCwgbGF3IDMpXG4gICAgLy8g4oCUIHRoZSBzaW5rJ3MgdmVyYiwgd2hhdGV2ZXIgZGVwdGggdGhlIGFycmF5IHNpdHMgYXQuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gYXJyYXlQcm94eUF0KHNpbmssIHBhdGgpO1xuICAgIGlmIChhbmNlc3RvcnMuaGFzKHZhbHVlIGFzIG9iamVjdCkpIHJldHVybiBjcmVhdGVUZXJtaW5hbFByb3h5KHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBzaW5rLCBwYXRoKTtcbiAgICByZXR1cm4gY3JlYXRlTmVzdGVkUHJveHkodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHNpbmssIHBhdGgsIG5ldyBTZXQoYW5jZXN0b3JzKS5hZGQodmFsdWUgYXMgb2JqZWN0KSk7XG4gIH07XG4gIHJldHVybiByZW1lbWJlckhhbmRsZShcbiAgICBuZXcgUHJveHkob2JqLCB7XG4gICAgICBnZXQ6IGxpdmVHZXRUcmFwKGxpdmUsIHNlZ21lbnRzLCBjaGlsZCwgbWVtYmVycyksXG4gICAgICBzZXQ6IHNpbmtTZXRUcmFwKHNpbmssIHNlZ21lbnRzKSxcbiAgICAgIGRlbGV0ZVByb3BlcnR5OiBzaW5rRGVsZXRlVHJhcChzaW5rLCBzZWdtZW50cyksXG4gICAgICAuLi5saXZlSW5zcGVjdGlvblRyYXBzKGxpdmUpLFxuICAgIH0pLFxuICAgIGxpdmUsXG4gICk7XG59XG5cbi8vIC0tIFRvcC1sZXZlbCBsZWF2ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBgcmVzZXJ2ZWRSZWFkYCBhbnN3ZXJlZCBub3RoaW5nOiB0aGUgbmFtZSBpcyBhIHN0YXRlIGtleSBhbmQgbXVzdCBiZSByZWFkICh0cmFja2VkKSBmcm9tIHRoZSB0YXJnZXQuICovXG5jb25zdCBTVEFURV9LRVk6IHVuaXF1ZSBzeW1ib2wgPSBTeW1ib2woJ3N0YXRlLWtleScpO1xuXG4vKipcbiAqIFdIWTogdGhlIG5hbWVzIHRoZSBzY29wZSBhbnN3ZXJzIElUU0VMRiDigJQgc3ltYm9scywgdGhlIGd1YXJkIHByb3BlcnRpZXMsXG4gKiBOb2RlJ3MgaW5zcGVjdCBob29rLCB0aGUgYCRgLW1ldGhvZHMgYW5kIHRoZSBKU09OIHByb2JlIOKAlCBtdXN0IG5ldmVyIGJlY29tZVxuICogdHJhY2tlZCByZWFkczsgZXZlcnl0aGluZyBlbHNlIChhIGxpZmVjeWNsZS1sb29raW5nIG5hbWUgc3VjaCBhc1xuICogYG5vdGlmeVN0YWdlU3RhcnRgIGluY2x1ZGVkKSBpcyBhIHN0YXRlIGtleSBhbmQgaXMgbGVmdCB0byB0aGUgY2FsbGVyLiBUaGVcbiAqIGVuZ2luZSByZWFjaGVzIHRoZSBmYWNhZGUgdGhyb3VnaCB0aGUgcmVnaXN0ZXJlZCBydW50aW1lIHBvcnQsIG5ldmVyIHRocm91Z2hcbiAqIGEgbmFtZSBvbiB0aGlzIHByb3h5LlxuICpcbiAqIFRoZSBwcm9iZTogYEpTT04uc3RyaW5naWZ5YCBhc2tzIEVWRVJZIHZhbHVlIGZvciBhIGB0b0pTT05gIG1ldGhvZC4gVGhhdFxuICogcXVlc3Rpb24gY29tZXMgZnJvbSB0aGUgcnVudGltZSwgbm90IHRoZSBzdGFnZSBhdXRob3IsIHNvIGl0IG11c3Qgbm90IGVudGVyXG4gKiB0aGUgcmVhZCBzZXQuIEEgc3RhdGUga2V5IGxpdGVyYWxseSBjYWxsZWQgJ3RvSlNPTicgaXMgbGVnYWw6IHdoZW4gaXQgRVhJU1RTXG4gKiB0aGlzIGlzIGEgZ2VudWluZSByZWFkIGFuZCBzdGF5cyB0cmFja2VkLCBhbmQgd2hlbiB0aGUgdGFyZ2V0IGNhbm5vdCBhbnN3ZXJcbiAqIHNpbGVudGx5LCB0cnV0aCB3aW5zIG92ZXIgbm9pc2Ug4oCUIGZhbGwgdGhyb3VnaC5cbiAqL1xuZnVuY3Rpb24gcmVzZXJ2ZWRSZWFkKHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIHN0YXRlOiBSZWFjdGl2ZVN0YXRlLCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpOiB1bmtub3duIHtcbiAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3ltYm9sJykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR1VBUkRfUFJPUFMsIHByb3ApKSByZXR1cm4gR1VBUkRfUFJPUFNbcHJvcF07XG4gICAgaWYgKHByb3AgPT09IFN5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJykpIHJldHVybiAoKSA9PiB0YXJnZXQuZ2V0VmFsdWUoKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR1VBUkRfUFJPUFMsIHByb3ApKSByZXR1cm4gR1VBUkRfUFJPUFNbcHJvcF07XG4gIGlmIChTQ09QRV9NRVRIT0RfTkFNRVMuaGFzKHByb3ApKSByZXR1cm4gTUVUSE9EX1JPVVRFU1twcm9wXT8uKHRhcmdldCwgc3RhdGUpO1xuICBpZiAocHJvcCA9PT0gJ3RvSlNPTicgJiYgc2lsZW50bHlLbm93bktleSh0YXJnZXQsIHByb3ApID09PSBmYWxzZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIFNUQVRFX0tFWTtcbn1cblxuLyoqXG4gKiBBIHdyYXBwYWJsZSBzdGF0ZSB2YWx1ZSBiZWNvbWVzIHRoZSBhcnJheSBvciBuZXN0ZWQgcHJveHkgZm9yIGl0cyBrZXk7XG4gKiBhbnl0aGluZyBlbHNlIGlzIGhhbmRlZCBiYWNrIHJhdy4gYHNjb3BlLmsgPT09IHNjb3BlLmtgIGhvbGRzIHdpdGhpbiBhXG4gKiBzdGFnZSB0aHJvdWdoIHRoZSBzYW1lIHBlci1tZW1iZXIgY2FjaGUgZXZlcnkgb2JqZWN0IHByb3h5IHVzZXNcbiAqIChgbGl2ZVZpZXcudHMgwrcgY2FjaGVkTWVtYmVyYCk6IGEgd3JpdGUgdG8gdGhlIGtleSBkcm9wcyB0aGUgZW50cnkgKHRoZVxuICogc2luayBkb2VzIGl0KSwgYSBjb21taXQgc3dhcHMgdGhlIHZhbHVlIGFuZCB0aGUgcmVmIGNoZWNrIG1pc3NlcyDigJQgZWl0aGVyXG4gKiB3YXkgdGhlIG5leHQgcmVhZCBidWlsZHMgYSBmcmVzaCBwcm94eSBvdmVyIHRoZSBuZXcgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHdyYXBTdGF0ZVZhbHVlKFxuICB0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LFxuICByZWFkU2lsZW50OiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24sXG4gIHN0YXRlOiBSZWFjdGl2ZVN0YXRlLFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24sXG4pOiB1bmtub3duIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIHZhbHVlO1xuICBpZiAoIXNob3VsZFdyYXBXaXRoUHJveHkodmFsdWUpKSByZXR1cm4gdmFsdWU7IC8vIERhdGUsIE1hcCwgY2xhc3MgaW5zdGFuY2UsIGZyb3plbiDigKZcbiAgcmV0dXJuIGNhY2hlZE1lbWJlcihcbiAgICBzdGF0ZS5jaGlsZENhY2hlLFxuICAgIGtleSxcbiAgICB2YWx1ZSxcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBzaW5rID0gcm9vdEtleVNpbmsodGFyZ2V0LCByZWFkU2lsZW50LCBrZXksIHN0YXRlLmNoaWxkQ2FjaGUpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gYXJyYXlQcm94eUF0KHNpbmssIFtdKTtcbiAgICAgIHJldHVybiBjcmVhdGVOZXN0ZWRQcm94eSh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgc2luaywgW10sIG5ldyBTZXQ8b2JqZWN0PihbdmFsdWVdKSk7XG4gICAgfSxcbiAgICBbXSxcbiAgKTtcbn1cblxuLyoqIFdIWTogYSBgJGAtbmFtZSBjYW4gbmV2ZXIgYmUgYSBzdGF0ZSBrZXkg4oCUIHRoZSB3cml0ZSBpcyByZWZ1c2VkLCBub3Qgc2hhZG93ZWQ7IGV2ZXJ5IG90aGVyIGFzc2lnbm1lbnRcbiAqICBzdG9yZXMgdGhlIHZhbHVlIEFTIEFTU0lHTkVEIChhIGhhbmRsZSBiZWNvbWVzIHdoYXQgaXQgc3RhbmRzIGZvciwgYGhhbmRsZXMudHNgOyB0aGUgYnVmZmVyIGRldGFjaGVzIGF0XG4gKiAgY29tbWl0IOKAlCB0aGUgc2FtZSBsYXcgYXMgYCRzZXRWYWx1ZWAsIDkuMjQuMCkgYW5kIGRyb3BzIHRoZSBrZXkncyBjYWNoZWQgcHJveHkuICovXG5mdW5jdGlvbiBhc3NpZ25TdGF0ZUtleSh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBzdGF0ZTogUmVhY3RpdmVTdGF0ZSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gIGlmIChTQ09QRV9NRVRIT0RfTkFNRVMuaGFzKGtleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ2Fubm90IHNldCBzdGF0ZSBrZXkgXCIke2tleX1cIiAtLSBpdCBjb25mbGljdHMgd2l0aCBhIHJlc2VydmVkIFR5cGVkU2NvcGUgbWV0aG9kLiBSZW5hbWUgdGhlIHN0YXRlIGtleSB0byBhdm9pZCAkLXByZWZpeGVkIG5hbWVzLmAsXG4gICAgKTtcbiAgfVxuICB0YXJnZXQuc2V0VmFsdWUoa2V5LCB1bndyYXBIYW5kbGVzKHZhbHVlKSk7XG4gIHN0YXRlLmNoaWxkQ2FjaGUuZGVsZXRlKGtleSk7XG59XG5cbi8qKiBEb2VzIHRoZSBrZXkgZXhpc3Qg4oCUIGFuc3dlcmVkIHdpdGhvdXQgYSB0cmFja2VkIHJlYWQgd2hlcmV2ZXIgdGhlIHRhcmdldCBjYW47IGBnZXRWYWx1ZWAgaXMgdGhlIGxhc3QgcmVzb3J0LiAqL1xuZnVuY3Rpb24ga25vd25LZXkodGFyZ2V0OiBSZWFjdGl2ZVRhcmdldCwga2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHRhcmdldC5oYXNLZXkpIHJldHVybiB0YXJnZXQuaGFzS2V5KGtleSk7XG4gIGlmICh0YXJnZXQuZ2V0U3RhdGVLZXlzKSByZXR1cm4gdGFyZ2V0LmdldFN0YXRlS2V5cygpLmluY2x1ZGVzKGtleSk7XG4gIHJldHVybiB0YXJnZXQuZ2V0VmFsdWUoa2V5KSAhPT0gdW5kZWZpbmVkOyAvLyBmYWxsYmFjazogZmlyZXMgb25SZWFkIChhY2NlcHRhYmxlIGRlZ3JhZGF0aW9uKVxufVxuXG4vKiogRXZlcnkgc3RhdGUga2V5IOKAlCBzaWxlbnRseSB3aGVyZSB0aGUgdGFyZ2V0IGNhbiwgZWxzZSBmcm9tIGEgd2hvbGUtc3RhdGUgcmVhZC4gKi9cbmZ1bmN0aW9uIHN0YXRlS2V5cyh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0KTogc3RyaW5nW10ge1xuICBpZiAodGFyZ2V0LmdldFN0YXRlS2V5cykgcmV0dXJuIHRhcmdldC5nZXRTdGF0ZUtleXMoKTtcbiAgY29uc3Qgc25hcHNob3QgPSB0YXJnZXQuZ2V0VmFsdWUoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHNuYXBzaG90ICYmIHR5cGVvZiBzbmFwc2hvdCA9PT0gJ29iamVjdCcgPyBPYmplY3Qua2V5cyhzbmFwc2hvdCkgOiBbXTtcbn1cblxuLy8gLS0gVG9wLWxldmVsIHByb3h5ICh0aGUgbWFpbiBUeXBlZFNjb3BlKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENyZWF0ZXMgYSBUeXBlZFNjb3BlPFQ+IHByb3h5IHdyYXBwaW5nIGEgUmVhY3RpdmVUYXJnZXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCAtIFRoZSB1bmRlcmx5aW5nIHNjb3BlIChTY29wZUZhY2FkZSBvciBhbnkgUmVhY3RpdmVUYXJnZXQpXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gKGJyZWFrUGlwZWxpbmUgaW5qZWN0aW9uKVxuICogQHJldHVybnMgQSBQcm94eSB3aXRoIHR5cGVkIHByb3BlcnR5IGFjY2VzcyBhbmQgJC1wcmVmaXhlZCBtZXRob2RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUeXBlZFNjb3BlPFQgZXh0ZW5kcyBvYmplY3Q+KHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIG9wdGlvbnM/OiBSZWFjdGl2ZU9wdGlvbnMpOiBUeXBlZFNjb3BlPFQ+IHtcbiAgY29uc3Qgc3RhdGU6IFJlYWN0aXZlU3RhdGUgPSB7IGJyZWFrRm46IG9wdGlvbnM/LmJyZWFrUGlwZWxpbmUsIGNoaWxkQ2FjaGU6IG5ldyBNZW1iZXJDYWNoZSgpIH07XG4gIC8vIEJpbmQgdGhlIHNpbGVudCByZWFkIG9uY2Ug4oCUIHRoZSBuZXN0ZWQvYXJyYXkgcHJveGllcyByZXNvbHZlIHRoZWlyIGxpdmUgdmlldyB0aHJvdWdoIGl0LlxuICBjb25zdCByZWFkU2lsZW50ID0gKHRhcmdldC5nZXRWYWx1ZVNpbGVudCA/PyB0YXJnZXQuZ2V0VmFsdWUpLmJpbmQodGFyZ2V0KTtcblxuICBjb25zdCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQgYXMgdW5rbm93biBhcyBUeXBlZFNjb3BlPFQ+LCB7XG4gICAgZ2V0KF9wcm94eVRhcmdldCwgcHJvcCkge1xuICAgICAgY29uc3QgYW5zd2VyZWQgPSByZXNlcnZlZFJlYWQodGFyZ2V0LCBzdGF0ZSwgcHJvcCk7XG4gICAgICBpZiAoYW5zd2VyZWQgIT09IFNUQVRFX0tFWSkgcmV0dXJuIGFuc3dlcmVkO1xuICAgICAgLy8gQSBzdGF0ZSBrZXk6IE9ORSB0cmFja2VkIHJlYWQgKGZpcmVzIG9uUmVhZCBvbmNlKSwgdGhlbiB0aGUgd3JhcHBlci5cbiAgICAgIHJldHVybiB3cmFwU3RhdGVWYWx1ZSh0YXJnZXQsIHJlYWRTaWxlbnQsIHN0YXRlLCBwcm9wIGFzIHN0cmluZywgdGFyZ2V0LmdldFZhbHVlKHByb3AgYXMgc3RyaW5nKSk7XG4gICAgfSxcbiAgICBzZXQoX3Byb3h5VGFyZ2V0LCBwcm9wLCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3RyaW5nJykgYXNzaWduU3RhdGVLZXkodGFyZ2V0LCBzdGF0ZSwgcHJvcCwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBkZWxldGVQcm9wZXJ0eShfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHJldHVybiB0cnVlO1xuICAgICAgdGFyZ2V0LmRlbGV0ZVZhbHVlKHByb3ApO1xuICAgICAgc3RhdGUuY2hpbGRDYWNoZS5kZWxldGUocHJvcCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGhhcyhfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N5bWJvbCcpIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR1VBUkRfUFJPUFMsIHByb3ApO1xuICAgICAgcmV0dXJuIFNDT1BFX01FVEhPRF9OQU1FUy5oYXMocHJvcCkgfHwga25vd25LZXkodGFyZ2V0LCBwcm9wKTtcbiAgICB9LFxuICAgIG93bktleXM6ICgpID0+IHN0YXRlS2V5cyh0YXJnZXQpLFxuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycgfHwgU0NPUEVfTUVUSE9EX05BTUVTLmhhcyhwcm9wKSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gJC1tZXRob2RzIGFyZSBub24tZW51bWVyYWJsZVxuICAgICAgaWYgKCFrbm93bktleSh0YXJnZXQsIHByb3ApKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHsgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9OyAvLyB0aGUgdmFsdWUgaXMgZmV0Y2hlZCB2aWEgdGhlIGdldCB0cmFwXG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiByZWdpc3RlclNjb3BlUnVudGltZShwcm94eSwge1xuICAgIHRhcmdldCxcbiAgICBoYW5kbGVzQXNzaWdubWVudHM6IHRydWUsXG4gICAgc2V0QnJlYWs6IChmbikgPT4ge1xuICAgICAgc3RhdGUuYnJlYWtGbiA9IGZuO1xuICAgIH0sXG4gIH0pO1xufVxuIl19
306
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlVHlwZWRTY29wZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvY3JlYXRlVHlwZWRTY29wZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7OztBQUVILDJDQUF5RDtBQUV6RCxvREFBMkQ7QUFDM0QsaURBQXFEO0FBQ3JELG1EQUErQztBQUMvQyw2Q0FBNkQ7QUFDN0QsK0NBQXdHO0FBRXhHLHlDQUFnRDtBQUNoRCxtREFBMkY7QUFNM0YsTUFBTSxhQUFhLEdBQWlDO0lBQ2xELFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLHlFQUF5RTtJQUN6RSwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLGlFQUFpRTtJQUNqRSxpREFBaUQ7SUFDakQsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQVcsRUFBRSxLQUFjLEVBQUUsWUFBc0IsRUFBRSxXQUFvQixFQUFFLEVBQUUsQ0FDOUYsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsSUFBQSwwQkFBYSxFQUFDLEtBQUssQ0FBQyxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUM7SUFDbEUsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQVcsRUFBRSxLQUFjLEVBQUUsV0FBb0IsRUFBRSxFQUFFLENBQ3BFLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUEsMEJBQWEsRUFBQyxLQUFLLENBQUMsRUFBRSxXQUFXLENBQUM7SUFDdkQsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxD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LE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3RixPQUFPLDZCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hFLENBQUM7UUFDRCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUNoQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsSUFBSTtZQUN6QyxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSw2QkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO2dCQUFFLE9BQU8sU0FBUyxDQUFDLENBQUMsK0JBQStCO1lBQy9HLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQztnQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUM5QyxPQUFPLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLHdDQUF3QztRQUMzRyxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxJQUFBLGlDQUFvQixFQUFDLEtBQUssRUFBRTtRQUNqQyxNQUFNO1FBQ04sa0JBQWtCLEVBQUUsSUFBSTtRQUN4QixRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUNmLEtBQUssQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBeENELDRDQXdDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcmVhY3RpdmUvY3JlYXRlVHlwZWRTY29wZSAtLSBDb3JlIFByb3h5IGZhY3RvcnkgZm9yIFR5cGVkU2NvcGU8VD4uXG4gKlxuICogV3JhcHMgYSBSZWFjdGl2ZVRhcmdldCAoU2NvcGVGYWNhZGUpIGluIGEgUHJveHkgdGhhdCBwcm92aWRlczpcbiAqIC0gVHlwZWQgcHJvcGVydHkgYWNjZXNzOiBzY29wZS5jcmVkaXRUaWVyIChyZWFkKSwgc2NvcGUuY3JlZGl0VGllciA9ICdBJyAod3JpdGUpXG4gKiAtIERlZXAgd3JpdGUgaW50ZXJjZXB0aW9uOiBzY29wZS5jdXN0b21lci5hZGRyZXNzLnppcCA9ICc5MDIxMCdcbiAqIC0gQXJyYXkgbXV0YXRpb24gaW50ZXJjZXB0aW9uOiBzY29wZS5pdGVtcy5wdXNoKCduZXcnKVxuICogLSAkLXByZWZpeGVkIGVzY2FwZSBoYXRjaGVzOiAkZ2V0VmFsdWUsICRzZXRWYWx1ZSwgJHJlYWQsICRnZXRBcmdzLCBldGMuXG4gKlxuICogUmVhZCBzZW1hbnRpY3M6IHRvcC1sZXZlbCBnZXQgY2FsbHMgZ2V0VmFsdWUoKSAoZmlyZXMgb25SZWFkIE9OQ0UpLlxuICogICBOZXN0ZWQgZ2V0IHRyYXBzIG5hdmlnYXRlIGluLW1lbW9yeSAtLSBubyBhZGRpdGlvbmFsIG9uUmVhZC5cbiAqXG4gKiBXcml0ZSBzZW1hbnRpY3M6IHRvcC1sZXZlbCBzZXQgY2FsbHMgc2V0VmFsdWUoKS4gTmVzdGVkIHNldCBjYWxsc1xuICogICB1cGRhdGVWYWx1ZSgpIHdpdGggYSBwYXJ0aWFsIG9iamVjdCBidWlsdCBmcm9tIHRoZSBhY2N1bXVsYXRlZCBwYXRoLlxuICovXG5cbmltcG9ydCB7IG5hdGl2ZUdldCBhcyBsb2Rhc2hHZXQgfSBmcm9tICdmb290dHJhY2UvcGF0aHMnO1xuXG5pbXBvcnQgeyByZWdpc3RlclNjb3BlUnVudGltZSB9IGZyb20gJy4uL3Njb3BlL3J1bnRpbWUuanMnO1xuaW1wb3J0IHsgc2hvdWxkV3JhcFdpdGhQcm94eSB9IGZyb20gJy4vYWxsb3dsaXN0LmpzJztcbmltcG9ydCB7IGFycmF5UHJveHlBdCB9IGZyb20gJy4vYXJyYXlUcmFwcy5qcyc7XG5pbXBvcnQgeyByZW1lbWJlckhhbmRsZSwgdW53cmFwSGFuZGxlcyB9IGZyb20gJy4vaGFuZGxlcy5qcyc7XG5pbXBvcnQgeyBjYWNoZWRNZW1iZXIsIGxpdmVHZXRUcmFwLCBsaXZlSW5zcGVjdGlvblRyYXBzLCBsaXZlT2JqZWN0LCBNZW1iZXJDYWNoZSB9IGZyb20gJy4vbGl2ZVZpZXcuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWFjdGl2ZU9wdGlvbnMsIFJlYWN0aXZlVGFyZ2V0LCBUeXBlZFNjb3BlIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBTQ09QRV9NRVRIT0RfTkFNRVMgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IHR5cGUgV3JpdGVTaW5rLCByb290S2V5U2luaywgc2lua0RlbGV0ZVRyYXAsIHNpbmtTZXRUcmFwIH0gZnJvbSAnLi93cml0ZVRyYXBzLmpzJztcblxuLy8gLS0gJC1tZXRob2Qgcm91dGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG50eXBlIE1ldGhvZFJvdXRlciA9ICh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBvcHRzOiBSZWFjdGl2ZVN0YXRlKSA9PiB1bmtub3duO1xuXG5jb25zdCBNRVRIT0RfUk9VVEVTOiBSZWNvcmQ8c3RyaW5nLCBNZXRob2RSb3V0ZXI+ID0ge1xuICAkZ2V0VmFsdWU6ICh0KSA9PiB0LmdldFZhbHVlLmJpbmQodCksXG4gIC8vIEEgaGFuZGxlIHRoZSBzY29wZSBoYW5kZWQgb3V0IGlzIGEgdmFsdWUgaXQgYWNjZXB0cyBiYWNrIChoYW5kbGVzLnRzKTpcbiAgLy8gYCRzZXRWYWx1ZSgnY29weScsIHNjb3BlLmN1c3RvbWVyKWAgc3RvcmVzIHRoZSB2YWx1ZSBiZWhpbmQgdGhlIGhhbmRsZSxcbiAgLy8gbm90IGEgUHJveHkgdGhlIGNvbW1pdCBjb3VsZCBuZXZlciBjbG9uZS4gVGhlIHNldCB0cmFwIGRvZXMgdGhlIHNhbWUgZm9yXG4gIC8vIGBzY29wZS5jb3B5ID0gc2NvcGUuY3VzdG9tZXJgOyB0aGVzZSBhcmUgdGhlIGV4cGxpY2l0IGRvb3JzLiBBXG4gIC8vIGhhbmRsZS1mcmVlIHZhbHVlIHBhc3NlcyB0aHJvdWdoIGJ5IHJlZmVyZW5jZS5cbiAgJHNldFZhbHVlOiAodCkgPT4gKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgc2hvdWxkUmVkYWN0PzogYm9vbGVhbiwgZGVzY3JpcHRpb24/OiBzdHJpbmcpID0+XG4gICAgdC5zZXRWYWx1ZShrZXksIHVud3JhcEhhbmRsZXModmFsdWUpLCBzaG91bGRSZWRhY3QsIGRlc2NyaXB0aW9uKSxcbiAgJHVwZGF0ZTogKHQpID0+IChrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24sIGRlc2NyaXB0aW9uPzogc3RyaW5nKSA9PlxuICAgIHQudXBkYXRlVmFsdWUoa2V5LCB1bndyYXBIYW5kbGVzKHZhbHVlKSwgZGVzY3JpcHRpb24pLFxuICAkZGVsZXRlOiAodCkgPT4gdC5kZWxldGVWYWx1ZS5iaW5kKHQpLFxuICAkcmVhZDogKHQpID0+IChkb3RQYXRoOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByb290S2V5ID0gZG90UGF0aC5zcGxpdCgnLicpWzBdO1xuICAgIGNvbnN0IHZhbHVlID0gdC5nZXRWYWx1ZShyb290S2V5KTtcbiAgICBpZiAoIWRvdFBhdGguaW5jbHVkZXMoJy4nKSkgcmV0dXJuIHZhbHVlO1xuICAgIHJldHVybiBsb2Rhc2hHZXQodmFsdWUsIGRvdFBhdGguc2xpY2Uocm9vdEtleS5sZW5ndGggKyAxKSk7XG4gIH0sXG4gICRnZXRBcmdzOiAodCkgPT4gdC5nZXRBcmdzLmJpbmQodCksXG4gICRnZXRFbnY6ICh0KSA9PiB0LmdldEVudi5iaW5kKHQpLFxuICAkZGVidWc6ICh0KSA9PiB0LmFkZERlYnVnSW5mby5iaW5kKHQpLFxuICAkbG9nOiAodCkgPT4gdC5hZGREZWJ1Z01lc3NhZ2UuYmluZCh0KSxcbiAgJGVycm9yOiAodCkgPT4gdC5hZGRFcnJvckluZm8uYmluZCh0KSxcbiAgJG1ldHJpYzogKHQpID0+IHQuYWRkTWV0cmljLmJpbmQodCksXG4gICRldmFsOiAodCkgPT4gdC5hZGRFdmFsLmJpbmQodCksXG4gICRhdHRhY2hTY29wZVJlY29yZGVyOiAodCkgPT4gdC5hdHRhY2hTY29wZVJlY29yZGVyLmJpbmQodCksXG4gICRkZXRhY2hTY29wZVJlY29yZGVyOiAodCkgPT4gdC5kZXRhY2hTY29wZVJlY29yZGVyLmJpbmQodCksXG4gICRnZXRTY29wZVJlY29yZGVyczogKHQpID0+IHQuZ2V0U2NvcGVSZWNvcmRlcnMuYmluZCh0KSxcbiAgJGJhdGNoQXJyYXk6ICh0KSA9PiAoa2V5OiBzdHJpbmcsIGZuOiAoYXJyOiB1bmtub3duW10pID0+IHZvaWQpID0+IHtcbiAgICAvLyBPbmUgZ2V0VmFsdWUg4oCUIGZpcmVzIG9uUmVhZCBvbmNlXG4gICAgY29uc3QgY3VycmVudCA9IHQuZ2V0VmFsdWUoa2V5KTtcbiAgICAvLyBDbG9uZSBvbmNlIOKAlCBERUVQIChvciBzdGFydCBlbXB0eSBpZiBtaXNzaW5nL25vbi1hcnJheSkuIFRoZSByZWFkIGlzXG4gICAgLy8gQk9SUk9XRUQ6IGJlZm9yZSB0aGUgc3RhZ2UncyBmaXJzdCBzdGFnZWQgd3JpdGUgaXQgaXMgY29tbWl0dGVkIHNoYXJlZFxuICAgIC8vIG1lbW9yeSBpdHNlbGYsIHNvIGEgc2hhbGxvdyBgWy4uLmN1cnJlbnRdYCBoYW5kZWQgdGhlIHN0YWdlIHRoZVxuICAgIC8vIGNvbW1pdHRlZCBFTEVNRU5UUyBhbmQgYGFyclswXS5uID0gOWAgZWRpdGVkIGNvbW1pdHRlZCBzdGF0ZSBpbiBwbGFjZVxuICAgIC8vIHdpdGggbm8gdHJhY2Ugcm93IChhbmQgdGhlIGxhenkgYnVmZmVyJ3MgYmFzZSB3YXMgdGhlbiB0YWtlbiBBRlRFUiB0aGVcbiAgICAvLyBlZGl0LCBzbyB0aGUgbmV0LWNoYW5nZSBmaWx0ZXIgc2F3IG5vdGhpbmcpLiBTdGF0ZSB2YWx1ZXMgc3Vydml2ZVxuICAgIC8vIGBzdHJ1Y3R1cmVkQ2xvbmVgIGJ5IGNvbnRyYWN0LCBzbyB0aGUgd29ya2luZyBjb3B5IGlzIGEgZnVsbCBjb3B5LlxuICAgIGNvbnN0IGNsb25lOiB1bmtub3duW10gPSBBcnJheS5pc0FycmF5KGN1cnJlbnQpID8gc3RydWN0dXJlZENsb25lKGN1cnJlbnQpIDogW107XG4gICAgLy8gVXNlciBhcHBsaWVzIGFsbCBtdXRhdGlvbnMgdG8gdGhlIHBsYWluIGNsb25lIOKAlCBubyBQcm94eSwgbm8gcGVyLW11dGF0aW9uIGNvbW1pdFxuICAgIGZuKGNsb25lKTtcbiAgICAvLyBPbmUgc2V0VmFsdWUg4oCUIGZpcmVzIG9uV3JpdGUgb25jZSB3aXRoIHRoZSBmaW5hbCBhcnJheS4gVGhlIHN0YWdlIG1heVxuICAgIC8vIGhhdmUgcHVzaGVkIGhhbmRsZXMgaW50byB0aGUgY2xvbmUgKGBhcnIucHVzaChzY29wZS50ZW1wbGF0ZSlgKSDigJQgdGhleVxuICAgIC8vIGFyZSB2YWx1ZXMgYnkgdGhlIHRpbWUgdGhlIGFycmF5IGlzIHN0YWdlZCAoaGFuZGxlcy50cykuXG4gICAgdC5zZXRWYWx1ZShrZXksIHVud3JhcEhhbmRsZXMoY2xvbmUpKTtcbiAgfSxcbiAgJGJyZWFrOiAoX3QsIG9wdHMpID0+IChyZWFzb24/OiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIW9wdHMuYnJlYWtGbikgdGhyb3cgbmV3IEVycm9yKCckYnJlYWsoKSBpcyBub3QgYXZhaWxhYmxlIG91dHNpZGUgc3RhZ2UgZXhlY3V0aW9uJyk7XG4gICAgb3B0cy5icmVha0ZuKHJlYXNvbik7XG4gIH0sXG4gIC8vIE9ic2VydmFiaWxpdHkg4oCUIEVtaXQgY2hhbm5lbCAoUGhhc2UgMykuIFJvdXRlcyB0byBTY29wZUZhY2FkZS5lbWl0RXZlbnRcbiAgLy8gd2hpY2ggaGFuZGxlcyBmYXN0LXBhdGgsIGVucmljaG1lbnQsIHJlZGFjdGlvbiwgYW5kIGVycm9yIGlzb2xhdGlvbi5cbiAgJGVtaXQ6ICh0KSA9PiB0LmVtaXRFdmVudC5iaW5kKHQpLFxuICAvLyBEZXRhY2ggKFQ0KSDigJQgZmlyZS1hbmQtZm9yZ2V0IGNoaWxkIGZsb3djaGFydHMuIERlbGVnYXRlcyB0byBTY29wZUZhY2FkZVxuICAvLyB3aGljaCBtaW50ZWQgcmVmSWRzIGZyb20gcnVudGltZVN0YWdlSWQuXG4gICRkZXRhY2hBbmRKb2luTGF0ZXI6ICh0KSA9PiB0LmRldGFjaEFuZEpvaW5MYXRlci5iaW5kKHQpLFxuICAkZGV0YWNoQW5kRm9yZ2V0OiAodCkgPT4gdC5kZXRhY2hBbmRGb3JnZXQuYmluZCh0KSxcbiAgJHRvUmF3OiAodCkgPT4gKCkgPT4gdCxcbn07XG5cbi8vIC0tIEd1YXJkIHByb3BlcnRpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFRoZXNlIG11c3QgYmUgaGFuZGxlZCB0byBwcmV2ZW50IFByb3h5IGZyb20gYmVpbmcgdHJlYXRlZCBhcyBhIFByb21pc2UsXG4vLyBicmVha2luZyBpbnN0YW5jZW9mIGNoZWNrcywgb3IgY29uZnVzaW5nIHRlc3QgbWF0Y2hlcnMuXG5cbmNvbnN0IEdVQVJEX1BST1BTOiBSZWNvcmQ8c3RyaW5nIHwgc3ltYm9sLCB1bmtub3duPiA9IHtcbiAgdGhlbjogdW5kZWZpbmVkLCAvLyBwcmV2ZW50IFByb21pc2UgZGV0ZWN0aW9uXG4gIGFzeW1tZXRyaWNNYXRjaDogdW5kZWZpbmVkLCAvLyBwcmV2ZW50IHZpdGVzdC9qZXN0IG1hdGNoZXIgY29uZnVzaW9uXG4gIGNvbnN0cnVjdG9yOiBPYmplY3QsIC8vIHNhZmUgcHJvdG90eXBlXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiAnVHlwZWRTY29wZScsXG59O1xuXG4vLyAtLSBTaWxlbnQgZXhpc3RlbmNlIGNoZWNrIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRG9lcyB0aGlzIGtleSBleGlzdCBpbiBzdGF0ZSwgYW5zd2VyZWQgd2l0aCBOTyB0cmFja2luZyBzaWRlIGVmZmVjdCBhdCBhbGw/XG4gKlxuICogYGdldFN0YXRlS2V5cygpYCBpcyB0aGUgb25seSBpbnNwZWN0aW9uIGEgU2NvcGVGYWNhZGUgYW5zd2VycyB3aXRob3V0IHJvdXRpbmdcbiAqIHRocm91Z2ggdGhlIHRyYWNrZWQgcmVhZCBwYXRoLiBgaGFzS2V5KClgIGRlbGliZXJhdGVseSBET0VTIHJvdXRlIHRocm91Z2ggaXQ6XG4gKiBgJ2snIGluIHNjb3BlYCBpcyBhIHJlYWwgcXVlc3Rpb24gYWJvdXQgc3RhdGUgdGhhdCBhIHN0YWdlIGNhbiBicmFuY2ggb24sIHNvXG4gKiBpdCByZWdpc3RlcnMgYXMgYSByZWFkIOKAlCB3aGljaCBpcyBleGFjdGx5IHdoeSB0aGlzIHByb2JlIG11c3Qgbm90IHVzZSBpdC5cbiAqXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gdGhlIHRhcmdldCBvZmZlcnMgbm8gc2lsZW50IGFuc3dlcjsgY2FsbGVycyBtdXN0XG4gKiB0aGVuIGNob29zZSBkZWxpYmVyYXRlbHkgcmF0aGVyIHRoYW4gYXNzdW1lLlxuICovXG5mdW5jdGlvbiBzaWxlbnRseUtub3duS2V5KHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIGtleTogc3RyaW5nKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIGlmICghdGFyZ2V0LmdldFN0YXRlS2V5cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIHRhcmdldC5nZXRTdGF0ZUtleXMoKS5pbmNsdWRlcyhrZXkpO1xufVxuXG4vLyAtLSBNdXRhYmxlIHN0YXRlIHBlciBwcm94eSBpbnN0YW5jZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmludGVyZmFjZSBSZWFjdGl2ZVN0YXRlIHtcbiAgYnJlYWtGbj86IChyZWFzb24/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIC8qKiBUaGUgdG9wLWxldmVsIGtleSdzIGNoaWxkIHByb3h5LCB2YWxpZGF0ZWQgYnkgcmF3IGlkZW50aXR5IChgbGl2ZVZpZXcudHMgwrcgY2FjaGVkTWVtYmVyYCk7IGEgc2luayBkcm9wcyB0aGUga2V5IG9uIHdyaXRlLiAqL1xuICBjaGlsZENhY2hlOiBNZW1iZXJDYWNoZTtcbn1cblxuLy8gLS0gTmVzdGVkIGNoaWxkIHByb3hpZXMgKGZvciBkZWVwIHdyaXRlIGludGVyY2VwdGlvbikgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vXG4vLyBCb3RoIGZhY3RvcmllcyBhcmUgT1JDSEVTVFJBVE9SUyAoOS4yMy4xKTogcmVhZHMgYXJlIGBsaXZlVmlldy50c2AsIHdyaXRlc1xuLy8gYXJlIGB3cml0ZVRyYXBzLnRzYCBvdmVyIGEgYHJvb3RLZXlTaW5rYCwgYW5kIHRoZSBPTkUgdGhpbmcgZWFjaCBkZWNpZGVzXG4vLyBpdHNlbGYgaXMgd2hhdCBhIGNoaWxkIG1lbWJlciBiZWNvbWVzIOKAlCB0aGUgY3ljbGUgcG9saWN5LiBFYWNoIGhvbGRzIGl0c1xuLy8gb3duIHBlci1tZW1iZXIgcHJveHkgY2FjaGUgKDkuMjMuMiwgYGxpdmVWaWV3LnRzIMK3IGNhY2hlZE1lbWJlcmApLlxuLy9cbi8vIEN5Y2xlIHNhZmV0eTogYW4gaW1tdXRhYmxlIFNldDxvYmplY3Q+IG9mIGFuY2VzdG9yIG9iamVjdHMgaXMgcGFzc2VkIGRvd25cbi8vIGVhY2ggYWNjZXNzIGNoYWluLiBFYWNoIGJyYW5jaCBnZXRzIGl0cyBvd24gY29weSAobmV3IFNldChwYXJlbnQpKSBzb1xuLy8gc2NvcGUueC5mcmllbmQgYW5kIHNjb3BlLnguY293b3JrZXIgZG9uJ3QgcG9sbHV0ZSBlYWNoIG90aGVyJ3MgdHJhY2tpbmcuXG4vLyBXaGVuIGEgY2hpbGQgdmFsdWUgaXMgYWxyZWFkeSBpbiB0aGUgYW5jZXN0b3Igc2V0LCB3ZSd2ZSBoaXQgYSBjeWNsZS5cbi8vIEF0IHRoZSBjeWNsZSBicmVhazogcmV0dXJuIGEgdGVybWluYWwgcHJveHkgdGhhdCB0cmFja3Mgd3JpdGVzIChzZXQgdHJhcFxuLy8gc3RpbGwgYnVpbGRzIHBhdGggKyBjb21taXRzIHRocm91Z2ggdGhlIHNpbmspIGJ1dCBkb2Vzbid0IHJlY3Vyc2UgcmVhZHNcbi8vIGZ1cnRoZXIuIFRoZSB0ZXJtaW5hbCBjaGFpbiBzaGFyZXMgT05FIG11dGFibGUgYHZpc2l0ZWRgIHNldDogYSB2YWx1ZSBzZWVuXG4vLyBhbnl3aGVyZSBwYXN0IHRoZSBjeWNsZSBlZGdlIGlzIGhhbmRlZCBiYWNrIHJhdy5cblxuZnVuY3Rpb24gY3JlYXRlVGVybWluYWxQcm94eShcbiAgb2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgc2luazogV3JpdGVTaW5rLFxuICBzZWdtZW50czogcmVhZG9ubHkgc3RyaW5nW10sXG4gIHZpc2l0ZWQ6IFNldDxvYmplY3Q+ID0gbmV3IFNldCgpLFxuKTogdW5rbm93biB7XG4gIHZpc2l0ZWQuYWRkKG9iaik7XG4gIGNvbnN0IG1lbWJlcnMgPSBuZXcgTWVtYmVyQ2FjaGUoKTtcbiAgY29uc3QgbGl2ZSA9ICgpID0+IGxpdmVPYmplY3Qob2JqLCBzaW5rLnJlYWRBdChzZWdtZW50cykpO1xuICBjb25zdCBjaGlsZCA9ICh2YWx1ZTogdW5rbm93biwgcGF0aDogc3RyaW5nW10pOiB1bmtub3duID0+IHtcbiAgICBpZiAoIXNob3VsZFdyYXBXaXRoUHJveHkodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgLy8gQW4gYXJyYXkgcGFzdCB0aGUgY3ljbGUgZWRnZSBzdGlsbCBnZXRzIGNvcHktb24td3JpdGUgaW50ZXJjZXB0aW9uIOKAlFxuICAgIC8vIGl0IGNvbW1pdHMgYXMgYSBgc2V0YCBvZiB0aGUgcm9vdCBrZXksIHRoZSBzYW1lIGxhdyBhcyB0aGUgbmVzdGVkIHByb3h5LlxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIGFycmF5UHJveHlBdChzaW5rLCBwYXRoKTtcbiAgICBpZiAodmlzaXRlZC5oYXModmFsdWUgYXMgb2JqZWN0KSkgcmV0dXJuIHZhbHVlO1xuICAgIHJldHVybiBjcmVhdGVUZXJtaW5hbFByb3h5KHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBzaW5rLCBwYXRoLCB2aXNpdGVkKTtcbiAgfTtcbiAgcmV0dXJuIHJlbWVtYmVySGFuZGxlKFxuICAgIG5ldyBQcm94eShvYmosIHtcbiAgICAgIGdldDogbGl2ZUdldFRyYXAobGl2ZSwgc2VnbWVudHMsIGNoaWxkLCBtZW1iZXJzKSxcbiAgICAgIHNldDogc2lua1NldFRyYXAoc2luaywgc2VnbWVudHMpLFxuICAgICAgZGVsZXRlUHJvcGVydHk6IHNpbmtEZWxldGVUcmFwKHNpbmssIHNlZ21lbnRzKSxcbiAgICAgIC4uLmxpdmVJbnNwZWN0aW9uVHJhcHMobGl2ZSksXG4gICAgfSksXG4gICAgbGl2ZSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTmVzdGVkUHJveHkoXG4gIG9iajogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHNpbms6IFdyaXRlU2luayxcbiAgc2VnbWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdLFxuICBhbmNlc3RvcnM6IFNldDxvYmplY3Q+ID0gbmV3IFNldCgpLFxuKTogdW5rbm93biB7XG4gIC8vIFJlYWRzIGFyZSBMSVZFICg5LjIyLjApOiBhIGhlbGQgcHJveHkgcmVhZHMgaXRzIG93biB3cml0ZXMsIGAneCcgaW4gb2BcbiAgLy8gYW5kIGBPYmplY3Qua2V5cyhvKWAgc2VlIHRoZW0sIGFuZCBgby5iID0gby5hICogMTBgIHVzZXMgdGhlIG5ldyBgYWAuXG4gIC8vIFRoZSBjYXB0dXJlZCBvYmplY3QgYW5zd2VycyBvbmx5IHdoZW4gdGhlIHBhdGggaXMgZ29uZSDigJQgc2VlIGxpdmVWaWV3LnRzLlxuICBjb25zdCBtZW1iZXJzID0gbmV3IE1lbWJlckNhY2hlKCk7XG4gIGNvbnN0IGxpdmUgPSAoKSA9PiBsaXZlT2JqZWN0KG9iaiwgc2luay5yZWFkQXQoc2VnbWVudHMpKTtcbiAgY29uc3QgY2hpbGQgPSAodmFsdWU6IHVua25vd24sIHBhdGg6IHN0cmluZ1tdKTogdW5rbm93biA9PiB7XG4gICAgaWYgKCFzaG91bGRXcmFwV2l0aFByb3h5KHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIC8vIEFuIGFycmF5IGNvbW1pdHMgYXMgYSBgc2V0YCBvZiB0aGUgUk9PVCBLRVkgKHJlYWN0aXZlL1JFQURNRS5tZCwgbGF3IDMpXG4gICAgLy8g4oCUIHRoZSBzaW5rJ3MgdmVyYiwgd2hhdGV2ZXIgZGVwdGggdGhlIGFycmF5IHNpdHMgYXQuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gYXJyYXlQcm94eUF0KHNpbmssIHBhdGgpO1xuICAgIGlmIChhbmNlc3RvcnMuaGFzKHZhbHVlIGFzIG9iamVjdCkpIHJldHVybiBjcmVhdGVUZXJtaW5hbFByb3h5KHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBzaW5rLCBwYXRoKTtcbiAgICByZXR1cm4gY3JlYXRlTmVzdGVkUHJveHkodmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHNpbmssIHBhdGgsIG5ldyBTZXQoYW5jZXN0b3JzKS5hZGQodmFsdWUgYXMgb2JqZWN0KSk7XG4gIH07XG4gIHJldHVybiByZW1lbWJlckhhbmRsZShcbiAgICBuZXcgUHJveHkob2JqLCB7XG4gICAgICBnZXQ6IGxpdmVHZXRUcmFwKGxpdmUsIHNlZ21lbnRzLCBjaGlsZCwgbWVtYmVycyksXG4gICAgICBzZXQ6IHNpbmtTZXRUcmFwKHNpbmssIHNlZ21lbnRzKSxcbiAgICAgIGRlbGV0ZVByb3BlcnR5OiBzaW5rRGVsZXRlVHJhcChzaW5rLCBzZWdtZW50cyksXG4gICAgICAuLi5saXZlSW5zcGVjdGlvblRyYXBzKGxpdmUpLFxuICAgIH0pLFxuICAgIGxpdmUsXG4gICk7XG59XG5cbi8vIC0tIFRvcC1sZXZlbCBsZWF2ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBgcmVzZXJ2ZWRSZWFkYCBhbnN3ZXJlZCBub3RoaW5nOiB0aGUgbmFtZSBpcyBhIHN0YXRlIGtleSBhbmQgbXVzdCBiZSByZWFkICh0cmFja2VkKSBmcm9tIHRoZSB0YXJnZXQuICovXG5jb25zdCBTVEFURV9LRVk6IHVuaXF1ZSBzeW1ib2wgPSBTeW1ib2woJ3N0YXRlLWtleScpO1xuXG4vKipcbiAqIFdIWTogdGhlIG5hbWVzIHRoZSBzY29wZSBhbnN3ZXJzIElUU0VMRiDigJQgc3ltYm9scywgdGhlIGd1YXJkIHByb3BlcnRpZXMsXG4gKiBOb2RlJ3MgaW5zcGVjdCBob29rLCB0aGUgYCRgLW1ldGhvZHMgYW5kIHRoZSBKU09OIHByb2JlIOKAlCBtdXN0IG5ldmVyIGJlY29tZVxuICogdHJhY2tlZCByZWFkczsgZXZlcnl0aGluZyBlbHNlIChhIGxpZmVjeWNsZS1sb29raW5nIG5hbWUgc3VjaCBhc1xuICogYG5vdGlmeVN0YWdlU3RhcnRgIGluY2x1ZGVkKSBpcyBhIHN0YXRlIGtleSBhbmQgaXMgbGVmdCB0byB0aGUgY2FsbGVyLiBUaGVcbiAqIGVuZ2luZSByZWFjaGVzIHRoZSBmYWNhZGUgdGhyb3VnaCB0aGUgcmVnaXN0ZXJlZCBydW50aW1lIHBvcnQsIG5ldmVyIHRocm91Z2hcbiAqIGEgbmFtZSBvbiB0aGlzIHByb3h5LlxuICpcbiAqIFRoZSBwcm9iZTogYEpTT04uc3RyaW5naWZ5YCBhc2tzIEVWRVJZIHZhbHVlIGZvciBhIGB0b0pTT05gIG1ldGhvZC4gVGhhdFxuICogcXVlc3Rpb24gY29tZXMgZnJvbSB0aGUgcnVudGltZSwgbm90IHRoZSBzdGFnZSBhdXRob3IsIHNvIGl0IG11c3Qgbm90IGVudGVyXG4gKiB0aGUgcmVhZCBzZXQuIEEgc3RhdGUga2V5IGxpdGVyYWxseSBjYWxsZWQgJ3RvSlNPTicgaXMgbGVnYWw6IHdoZW4gaXQgRVhJU1RTXG4gKiB0aGlzIGlzIGEgZ2VudWluZSByZWFkIGFuZCBzdGF5cyB0cmFja2VkLCBhbmQgd2hlbiB0aGUgdGFyZ2V0IGNhbm5vdCBhbnN3ZXJcbiAqIHNpbGVudGx5LCB0cnV0aCB3aW5zIG92ZXIgbm9pc2Ug4oCUIGZhbGwgdGhyb3VnaC5cbiAqL1xuZnVuY3Rpb24gcmVzZXJ2ZWRSZWFkKHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIHN0YXRlOiBSZWFjdGl2ZVN0YXRlLCBwcm9wOiBzdHJpbmcgfCBzeW1ib2wpOiB1bmtub3duIHtcbiAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3ltYm9sJykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR1VBUkRfUFJPUFMsIHByb3ApKSByZXR1cm4gR1VBUkRfUFJPUFNbcHJvcF07XG4gICAgaWYgKHByb3AgPT09IFN5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJykpIHJldHVybiAoKSA9PiB0YXJnZXQuZ2V0VmFsdWUoKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR1VBUkRfUFJPUFMsIHByb3ApKSByZXR1cm4gR1VBUkRfUFJPUFNbcHJvcF07XG4gIGlmIChTQ09QRV9NRVRIT0RfTkFNRVMuaGFzKHByb3ApKSByZXR1cm4gTUVUSE9EX1JPVVRFU1twcm9wXT8uKHRhcmdldCwgc3RhdGUpO1xuICBpZiAocHJvcCA9PT0gJ3RvSlNPTicgJiYgc2lsZW50bHlLbm93bktleSh0YXJnZXQsIHByb3ApID09PSBmYWxzZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIFNUQVRFX0tFWTtcbn1cblxuLyoqXG4gKiBBIHdyYXBwYWJsZSBzdGF0ZSB2YWx1ZSBiZWNvbWVzIHRoZSBhcnJheSBvciBuZXN0ZWQgcHJveHkgZm9yIGl0cyBrZXk7XG4gKiBhbnl0aGluZyBlbHNlIGlzIGhhbmRlZCBiYWNrIHJhdy4gYHNjb3BlLmsgPT09IHNjb3BlLmtgIGhvbGRzIHdpdGhpbiBhXG4gKiBzdGFnZSB0aHJvdWdoIHRoZSBzYW1lIHBlci1tZW1iZXIgY2FjaGUgZXZlcnkgb2JqZWN0IHByb3h5IHVzZXNcbiAqIChgbGl2ZVZpZXcudHMgwrcgY2FjaGVkTWVtYmVyYCk6IGEgd3JpdGUgdG8gdGhlIGtleSBkcm9wcyB0aGUgZW50cnkgKHRoZVxuICogc2luayBkb2VzIGl0KSwgYSBjb21taXQgc3dhcHMgdGhlIHZhbHVlIGFuZCB0aGUgcmVmIGNoZWNrIG1pc3NlcyDigJQgZWl0aGVyXG4gKiB3YXkgdGhlIG5leHQgcmVhZCBidWlsZHMgYSBmcmVzaCBwcm94eSBvdmVyIHRoZSBuZXcgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHdyYXBTdGF0ZVZhbHVlKFxuICB0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LFxuICByZWFkU2lsZW50OiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24sXG4gIHN0YXRlOiBSZWFjdGl2ZVN0YXRlLFxuICBrZXk6IHN0cmluZyxcbiAgdmFsdWU6IHVua25vd24sXG4pOiB1bmtub3duIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgcmV0dXJuIHZhbHVlO1xuICBpZiAoIXNob3VsZFdyYXBXaXRoUHJveHkodmFsdWUpKSByZXR1cm4gdmFsdWU7IC8vIERhdGUsIE1hcCwgY2xhc3MgaW5zdGFuY2UsIGZyb3plbiDigKZcbiAgcmV0dXJuIGNhY2hlZE1lbWJlcihcbiAgICBzdGF0ZS5jaGlsZENhY2hlLFxuICAgIGtleSxcbiAgICB2YWx1ZSxcbiAgICAoKSA9PiB7XG4gICAgICBjb25zdCBzaW5rID0gcm9vdEtleVNpbmsodGFyZ2V0LCByZWFkU2lsZW50LCBrZXksIHN0YXRlLmNoaWxkQ2FjaGUpO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gYXJyYXlQcm94eUF0KHNpbmssIFtdKTtcbiAgICAgIHJldHVybiBjcmVhdGVOZXN0ZWRQcm94eSh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgc2luaywgW10sIG5ldyBTZXQ8b2JqZWN0PihbdmFsdWVdKSk7XG4gICAgfSxcbiAgICBbXSxcbiAgKTtcbn1cblxuLyoqIFdIWTogYSBgJGAtbmFtZSBjYW4gbmV2ZXIgYmUgYSBzdGF0ZSBrZXkg4oCUIHRoZSB3cml0ZSBpcyByZWZ1c2VkLCBub3Qgc2hhZG93ZWQ7IGV2ZXJ5IG90aGVyIGFzc2lnbm1lbnRcbiAqICBzdG9yZXMgdGhlIHZhbHVlIEFTIEFTU0lHTkVEIChhIGhhbmRsZSBiZWNvbWVzIHdoYXQgaXQgc3RhbmRzIGZvciwgYGhhbmRsZXMudHNgOyB0aGUgYnVmZmVyIGRldGFjaGVzIGF0XG4gKiAgY29tbWl0IOKAlCB0aGUgc2FtZSBsYXcgYXMgYCRzZXRWYWx1ZWAsIDkuMjQuMCkgYW5kIGRyb3BzIHRoZSBrZXkncyBjYWNoZWQgcHJveHkuICovXG5mdW5jdGlvbiBhc3NpZ25TdGF0ZUtleSh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0LCBzdGF0ZTogUmVhY3RpdmVTdGF0ZSwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gIGlmIChTQ09QRV9NRVRIT0RfTkFNRVMuaGFzKGtleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ2Fubm90IHNldCBzdGF0ZSBrZXkgXCIke2tleX1cIiAtLSBpdCBjb25mbGljdHMgd2l0aCBhIHJlc2VydmVkIFR5cGVkU2NvcGUgbWV0aG9kLiBSZW5hbWUgdGhlIHN0YXRlIGtleSB0byBhdm9pZCAkLXByZWZpeGVkIG5hbWVzLmAsXG4gICAgKTtcbiAgfVxuICB0YXJnZXQuc2V0VmFsdWUoa2V5LCB1bndyYXBIYW5kbGVzKHZhbHVlKSk7XG4gIHN0YXRlLmNoaWxkQ2FjaGUuZGVsZXRlKGtleSk7XG59XG5cbi8qKiBEb2VzIHRoZSBrZXkgZXhpc3Qg4oCUIGFuc3dlcmVkIHdpdGhvdXQgYSB0cmFja2VkIHJlYWQgd2hlcmV2ZXIgdGhlIHRhcmdldCBjYW47IGBnZXRWYWx1ZWAgaXMgdGhlIGxhc3QgcmVzb3J0LiAqL1xuZnVuY3Rpb24ga25vd25LZXkodGFyZ2V0OiBSZWFjdGl2ZVRhcmdldCwga2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHRhcmdldC5oYXNLZXkpIHJldHVybiB0YXJnZXQuaGFzS2V5KGtleSk7XG4gIGlmICh0YXJnZXQuZ2V0U3RhdGVLZXlzKSByZXR1cm4gdGFyZ2V0LmdldFN0YXRlS2V5cygpLmluY2x1ZGVzKGtleSk7XG4gIHJldHVybiB0YXJnZXQuZ2V0VmFsdWUoa2V5KSAhPT0gdW5kZWZpbmVkOyAvLyBmYWxsYmFjazogZmlyZXMgb25SZWFkIChhY2NlcHRhYmxlIGRlZ3JhZGF0aW9uKVxufVxuXG4vKiogRXZlcnkgc3RhdGUga2V5IOKAlCBzaWxlbnRseSB3aGVyZSB0aGUgdGFyZ2V0IGNhbiwgZWxzZSBmcm9tIGEgd2hvbGUtc3RhdGUgcmVhZC4gKi9cbmZ1bmN0aW9uIHN0YXRlS2V5cyh0YXJnZXQ6IFJlYWN0aXZlVGFyZ2V0KTogc3RyaW5nW10ge1xuICBpZiAodGFyZ2V0LmdldFN0YXRlS2V5cykgcmV0dXJuIHRhcmdldC5nZXRTdGF0ZUtleXMoKTtcbiAgY29uc3Qgc25hcHNob3QgPSB0YXJnZXQuZ2V0VmFsdWUoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgcmV0dXJuIHNuYXBzaG90ICYmIHR5cGVvZiBzbmFwc2hvdCA9PT0gJ29iamVjdCcgPyBPYmplY3Qua2V5cyhzbmFwc2hvdCkgOiBbXTtcbn1cblxuLy8gLS0gVG9wLWxldmVsIHByb3h5ICh0aGUgbWFpbiBUeXBlZFNjb3BlKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIENyZWF0ZXMgYSBUeXBlZFNjb3BlPFQ+IHByb3h5IHdyYXBwaW5nIGEgUmVhY3RpdmVUYXJnZXQuXG4gKlxuICogQHBhcmFtIHRhcmdldCAtIFRoZSB1bmRlcmx5aW5nIHNjb3BlIChTY29wZUZhY2FkZSBvciBhbnkgUmVhY3RpdmVUYXJnZXQpXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gKGJyZWFrUGlwZWxpbmUgaW5qZWN0aW9uKVxuICogQHJldHVybnMgQSBQcm94eSB3aXRoIHR5cGVkIHByb3BlcnR5IGFjY2VzcyBhbmQgJC1wcmVmaXhlZCBtZXRob2RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUeXBlZFNjb3BlPFQgZXh0ZW5kcyBvYmplY3Q+KHRhcmdldDogUmVhY3RpdmVUYXJnZXQsIG9wdGlvbnM/OiBSZWFjdGl2ZU9wdGlvbnMpOiBUeXBlZFNjb3BlPFQ+IHtcbiAgY29uc3Qgc3RhdGU6IFJlYWN0aXZlU3RhdGUgPSB7IGJyZWFrRm46IG9wdGlvbnM/LmJyZWFrUGlwZWxpbmUsIGNoaWxkQ2FjaGU6IG5ldyBNZW1iZXJDYWNoZSgpIH07XG4gIC8vIEJpbmQgdGhlIHNpbGVudCByZWFkIG9uY2Ug4oCUIHRoZSBuZXN0ZWQvYXJyYXkgcHJveGllcyByZXNvbHZlIHRoZWlyIGxpdmUgdmlldyB0aHJvdWdoIGl0LlxuICBjb25zdCByZWFkU2lsZW50ID0gKHRhcmdldC5nZXRWYWx1ZVNpbGVudCA/PyB0YXJnZXQuZ2V0VmFsdWUpLmJpbmQodGFyZ2V0KTtcblxuICBjb25zdCBwcm94eSA9IG5ldyBQcm94eSh0YXJnZXQgYXMgdW5rbm93biBhcyBUeXBlZFNjb3BlPFQ+LCB7XG4gICAgZ2V0KF9wcm94eVRhcmdldCwgcHJvcCkge1xuICAgICAgY29uc3QgYW5zd2VyZWQgPSByZXNlcnZlZFJlYWQodGFyZ2V0LCBzdGF0ZSwgcHJvcCk7XG4gICAgICBpZiAoYW5zd2VyZWQgIT09IFNUQVRFX0tFWSkgcmV0dXJuIGFuc3dlcmVkO1xuICAgICAgLy8gQSBzdGF0ZSBrZXk6IE9ORSB0cmFja2VkIHJlYWQgKGZpcmVzIG9uUmVhZCBvbmNlKSwgdGhlbiB0aGUgd3JhcHBlci5cbiAgICAgIHJldHVybiB3cmFwU3RhdGVWYWx1ZSh0YXJnZXQsIHJlYWRTaWxlbnQsIHN0YXRlLCBwcm9wIGFzIHN0cmluZywgdGFyZ2V0LmdldFZhbHVlKHByb3AgYXMgc3RyaW5nKSk7XG4gICAgfSxcbiAgICBzZXQoX3Byb3h5VGFyZ2V0LCBwcm9wLCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiBwcm9wID09PSAnc3RyaW5nJykgYXNzaWduU3RhdGVLZXkodGFyZ2V0LCBzdGF0ZSwgcHJvcCwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBkZWxldGVQcm9wZXJ0eShfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHJldHVybiB0cnVlO1xuICAgICAgdGFyZ2V0LmRlbGV0ZVZhbHVlKHByb3ApO1xuICAgICAgc3RhdGUuY2hpbGRDYWNoZS5kZWxldGUocHJvcCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIGhhcyhfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N5bWJvbCcpIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoR1VBUkRfUFJPUFMsIHByb3ApO1xuICAgICAgcmV0dXJuIFNDT1BFX01FVEhPRF9OQU1FUy5oYXMocHJvcCkgfHwga25vd25LZXkodGFyZ2V0LCBwcm9wKTtcbiAgICB9LFxuICAgIG93bktleXM6ICgpID0+IHN0YXRlS2V5cyh0YXJnZXQpLFxuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihfcHJveHlUYXJnZXQsIHByb3ApIHtcbiAgICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycgfHwgU0NPUEVfTUVUSE9EX05BTUVTLmhhcyhwcm9wKSkgcmV0dXJuIHVuZGVmaW5lZDsgLy8gJC1tZXRob2RzIGFyZSBub24tZW51bWVyYWJsZVxuICAgICAgaWYgKCFrbm93bktleSh0YXJnZXQsIHByb3ApKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuIHsgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9OyAvLyB0aGUgdmFsdWUgaXMgZmV0Y2hlZCB2aWEgdGhlIGdldCB0cmFwXG4gICAgfSxcbiAgfSk7XG4gIHJldHVybiByZWdpc3RlclNjb3BlUnVudGltZShwcm94eSwge1xuICAgIHRhcmdldCxcbiAgICBoYW5kbGVzQXNzaWdubWVudHM6IHRydWUsXG4gICAgc2V0QnJlYWs6IChmbikgPT4ge1xuICAgICAgc3RhdGUuYnJlYWtGbiA9IGZuO1xuICAgIH0sXG4gIH0pO1xufVxuIl19
@@ -15,7 +15,7 @@
15
15
  */
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.sinkDeleteTrap = exports.sinkSetTrap = exports.elementSink = exports.rootKeySink = void 0;
18
- const pathOps_js_1 = require("../memory/pathOps.js");
18
+ const paths_1 = require("foottrace/paths");
19
19
  const handles_js_1 = require("./handles.js");
20
20
  const pathBuilder_js_1 = require("./pathBuilder.js");
21
21
  const structuralWrite_js_1 = require("./structuralWrite.js");
@@ -45,7 +45,7 @@ class RootKeySink {
45
45
  /** An empty path is the key's own value — `nativeGet(v, [])` would return it unchanged, so the walk is skipped. */
46
46
  readAt(path) {
47
47
  const root = this.readSilent(this.rootKey);
48
- return path.length === 0 ? root : (0, pathOps_js_1.nativeGet)(root, path);
48
+ return path.length === 0 ? root : (0, paths_1.nativeGet)(root, path);
49
49
  }
50
50
  put(path, value) {
51
51
  if (!Array.isArray(value))
@@ -92,7 +92,7 @@ class ElementSink {
92
92
  /** The value at `path` inside element `index`, as it stands NOW (read-your-writes). */
93
93
  function readInElement(getCurrent, index, path) {
94
94
  const element = getCurrent()[index];
95
- return path.length === 0 ? element : (0, pathOps_js_1.nativeGet)(element, path);
95
+ return path.length === 0 ? element : (0, paths_1.nativeGet)(element, path);
96
96
  }
97
97
  /** A copy of the array with `value` at `path` inside element `index`; a gone element has nothing to write into. */
98
98
  function replaceInElement(getCurrent, commit, index, path, value) {
@@ -138,4 +138,4 @@ function sinkDeleteTrap(sink, segments) {
138
138
  };
139
139
  }
140
140
  exports.sinkDeleteTrap = sinkDeleteTrap;
141
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVUcmFwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvd3JpdGVUcmFwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRzs7O0FBRUgscURBQWlEO0FBQ2pELDZDQUE2QztBQUU3QyxxREFBb0Q7QUFDcEQsNkRBQStEO0FBc0IvRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixXQUFXLENBQ3pCLE1BQXFCLEVBQ3JCLFVBQW9DLEVBQ3BDLE9BQWUsRUFDZixLQUFrQztJQUVsQyxPQUFPLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFQRCxrQ0FPQztBQUVELGtGQUFrRjtBQUNsRixNQUFNLFdBQVc7SUFFSTtJQUNBO0lBQ0E7SUFDQTtJQUpuQixZQUNtQixNQUFxQixFQUNyQixVQUFvQyxFQUNwQyxPQUFlLEVBQ2YsS0FBa0M7UUFIbEMsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixlQUFVLEdBQVYsVUFBVSxDQUEwQjtRQUNwQyxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsVUFBSyxHQUFMLEtBQUssQ0FBNkI7SUFDbEQsQ0FBQztJQUVKLG1IQUFtSDtJQUNuSCxNQUFNLENBQUMsSUFBdUI7UUFDNUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFBLHNCQUFTLEVBQUMsSUFBSSxFQUFFLElBQWdCLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsR0FBRyxDQUFDLElBQXVCLEVBQUUsS0FBYztRQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUEsaUNBQWdCLEVBQUMsSUFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDOztZQUN2RyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUEsOEJBQVMsRUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzdHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQXVCO1FBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBQSxpQ0FBWSxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixXQUFXLENBQUMsVUFBMkIsRUFBRSxNQUFpQyxFQUFFLEtBQWE7SUFDdkcsT0FBTyxJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFGRCxrQ0FFQztBQUVELHFIQUFxSDtBQUNySCxNQUFNLFdBQVc7SUFFSTtJQUNBO0lBQ0E7SUFIbkIsWUFDbUIsVUFBMkIsRUFDM0IsTUFBaUMsRUFDakMsS0FBYTtRQUZiLGVBQVUsR0FBVixVQUFVLENBQWlCO1FBQzNCLFdBQU0sR0FBTixNQUFNLENBQTJCO1FBQ2pDLFVBQUssR0FBTCxLQUFLLENBQVE7SUFDN0IsQ0FBQztJQUVKLE1BQU0sQ0FBQyxJQUF1QjtRQUM1QixPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELEdBQUcsQ0FBQyxJQUF1QixFQUFFLEtBQWM7UUFDekMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBdUI7UUFDNUIsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xFLENBQUM7Q0FDRjtBQUVELHVGQUF1RjtBQUN2RixTQUFTLGFBQWEsQ0FBQyxVQUEyQixFQUFFLEtBQWEsRUFBRSxJQUF1QjtJQUN4RixNQUFNLE9BQU8sR0FBRyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUEsc0JBQVMsRUFBQyxPQUFPLEVBQUUsSUFBZ0IsQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFFRCxtSEFBbUg7QUFDbkgsU0FBUyxnQkFBZ0IsQ0FDdkIsVUFBMkIsRUFDM0IsTUFBaUMsRUFDakMsS0FBYSxFQUNiLElBQXVCLEVBQ3ZCLEtBQWM7SUFFZCxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMvQixJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU87SUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUEsOEJBQVMsRUFBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNmLENBQUM7QUFFRCxpRkFBaUY7QUFDakYsU0FBUyxlQUFlLENBQ3RCLFVBQTJCLEVBQzNCLE1BQWlDLEVBQ2pDLEtBQWEsRUFDYixJQUF1QjtJQUV2QixNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMvQixJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU87SUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUEsaUNBQVksRUFBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLElBQWUsRUFBRSxRQUEyQjtJQUN0RSxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUM5QixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMxQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBQSwwQkFBYSxFQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7QUFDSixDQUFDO0FBTkQsa0NBTUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixjQUFjLENBQUMsSUFBZSxFQUFFLFFBQTJCO0lBQ3pFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDdkIsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7QUFDSixDQUFDO0FBTkQsd0NBTUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJlYWN0aXZlL3dyaXRlVHJhcHMg4oCUIHdoZXJlIGEgcHJveHkncyB3cml0ZXMgTEFORCwgYW5kIHRoZSB0d28gdHJhcHMgdGhhdFxuICogc2VuZCB0aGVtIHRoZXJlLlxuICpcbiAqIEV2ZXJ5IG9iamVjdCBwcm94eSBpbiB0aGlzIGZvbGRlciAobmVzdGVkLCB0ZXJtaW5hbCwgZWxlbWVudCkgaW50ZXJjZXB0c1xuICogdGhlIHNhbWUgdGhyZWUgdGhpbmdzIOKAlCBhIHByb3BlcnR5IHNldCwgYSBwcm9wZXJ0eSBkZWxldGUsIGFuZCBhbiBhcnJheVxuICogbXV0YXRpb24gc29tZXdoZXJlIGJlbG93IGl0IOKAlCBhbmQgZGlmZmVycyBvbmx5IGluIHdoZXJlIHRoZSB3cml0ZSBnb2VzOlxuICogYSBuZXN0ZWQvdGVybWluYWwgcHJveHkgY29tbWl0cyB1bmRlciBhIFRPUC1MRVZFTCBLRVkgKGFuIG9iamVjdCB3cml0ZSBhc1xuICogYG1lcmdlYCBvZiBhIHBhdGNoLCBhbiBhcnJheSB3cml0ZSBvciBhIGRlbGV0ZSBhcyBgc2V0YCBvZiB0aGUgcmVidWlsdFxuICogcm9vdCk7IGFuIGVsZW1lbnQgcHJveHkgY29tbWl0cyB0aGUgV0hPTEUgT1dOSU5HIEFSUkFZIGJhY2sgdGhyb3VnaCB0aGVcbiAqIGFycmF5IHByb3h5J3Mgb3duIGNhbGxiYWNrLiBUaGF0IGRpZmZlcmVuY2UgaXMgYSB7QGxpbmsgV3JpdGVTaW5rfTsgdGhlXG4gKiB0cmFwcyBhcmUgd3JpdHRlbiBvbmNlIG92ZXIgaXQgKDkuMjMuMSDigJQgdGhlIDkuMjIuMCBzdGFsZS1yZWFkIGJ1ZyB3YXNcbiAqIGZpeGVkIGluIG9uZSBjb3B5IG9mIHRoZXNlIHRyYXBzIGFuZCB0aGVuIGZvdW5kIGFnYWluIGluIHRoZSBvdGhlciB0d28pLlxuICovXG5cbmltcG9ydCB7IG5hdGl2ZUdldCB9IGZyb20gJy4uL21lbW9yeS9wYXRoT3BzLmpzJztcbmltcG9ydCB7IHVud3JhcEhhbmRsZXMgfSBmcm9tICcuL2hhbmRsZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1iZXJDYWNoZSB9IGZyb20gJy4vbGl2ZVZpZXcuanMnO1xuaW1wb3J0IHsgYnVpbGROZXN0ZWRQYXRjaCB9IGZyb20gJy4vcGF0aEJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgZGVsZXRlSW5QYXRoLCBzZXRJblBhdGggfSBmcm9tICcuL3N0cnVjdHVyYWxXcml0ZS5qcyc7XG5cbi8qKlxuICogVGhlIHNlYW0gYmV0d2VlbiBhIHByb3h5IGFuZCBzdGF0ZS4gYHBhdGhgIGlzIG1lYXN1cmVkIGZyb20gdGhlIHNpbmsnc1xuICogcm9vdCDigJQgdGhlIGtleSdzIHZhbHVlIGZvciB7QGxpbmsgcm9vdEtleVNpbmt9LCB0aGUgZWxlbWVudCBmb3JcbiAqIHtAbGluayBlbGVtZW50U2lua307IGBbXWAgaXMgdGhlIHJvb3QgaXRzZWxmLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdyaXRlU2luayB7XG4gIC8qKiBUaGUgdmFsdWUgYXQgYHBhdGhgLCBhcyBpdCBzdGFuZHMgTk9XIChyZWFkLXlvdXItd3JpdGVzOyBuZXZlciBhIHRyYWNrZWQgcmVhZCkuICovXG4gIHJlYWRBdChwYXRoOiByZWFkb25seSBzdHJpbmdbXSk6IHVua25vd247XG4gIC8qKiBQdXQgYW4gYWxyZWFkeS11bndyYXBwZWQgYHZhbHVlYCBhdCBgcGF0aGAuIFRoZSBzaW5rIGNob29zZXMgdGhlIHZlcmIuICovXG4gIHB1dChwYXRoOiByZWFkb25seSBzdHJpbmdbXSwgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuICAvKiogUmVtb3ZlIHRoZSBrZXkgYXQgYHBhdGhgLiAqL1xuICByZW1vdmUocGF0aDogcmVhZG9ubHkgc3RyaW5nW10pOiB2b2lkO1xufVxuXG4vKiogVGhlIHR3byB3YXlzIGEgdmFsdWUgcmVhY2hlcyBhIHN0YXRlIGtleTogd2hhdCB0aGUgc2luayB3cml0ZXMgdGhyb3VnaC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm9vdEtleVRhcmdldCB7XG4gIHNldFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gIHVwZGF0ZVZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG59XG5cbi8qKlxuICogV0hZOiBhIHdyaXRlIGJlbG93IGEgdG9wLWxldmVsIGtleSBoYXMgVFdPIHZlcmJzIChyZWFjdGl2ZS9SRUFETUUubWQsIGxhd1xuICogMykg4oCUIGFuIG9iamVjdCBsZWFmIGlzIGEgYG1lcmdlYCBvZiBhIG5lc3RlZCBwYXRjaCwgYW4gYXJyYXkgbGVhZiBvciBhXG4gKiBkZWxldGUgcmVidWlsZHMgdGhlIHJvb3QgaW1tdXRhYmx5IGFuZCBjb21taXRzIGEgYHNldGAgb2YgdGhlIGtleS4gT25seSB0aGVcbiAqIHNpbmsga25vd3MgdGhhdDsgdGhlIHRyYXBzIGRvIG5vdC4gRXZlcnkgd3JpdGUgZHJvcHMgdGhlIGtleSdzIGNhY2hlZCBjaGlsZFxuICogcHJveHkgKGBjYWNoZWApLCBzbyB0aGUgbmV4dCByZWFkIGlzIGJ1aWx0IG92ZXIgdGhlIG5ldyB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvb3RLZXlTaW5rKFxuICB0YXJnZXQ6IFJvb3RLZXlUYXJnZXQsXG4gIHJlYWRTaWxlbnQ6IChrZXk6IHN0cmluZykgPT4gdW5rbm93bixcbiAgcm9vdEtleTogc3RyaW5nLFxuICBjYWNoZTogUGljazxNZW1iZXJDYWNoZSwgJ2RlbGV0ZSc+LFxuKTogV3JpdGVTaW5rIHtcbiAgcmV0dXJuIG5ldyBSb290S2V5U2luayh0YXJnZXQsIHJlYWRTaWxlbnQsIHJvb3RLZXksIGNhY2hlKTtcbn1cblxuLyoqIE9uZSBhbGxvY2F0aW9uIHBlciB0b3AtbGV2ZWwgcmVhZCBtaXNzICh0aGUgbWV0aG9kcyBsaXZlIG9uIHRoZSBwcm90b3R5cGUpLiAqL1xuY2xhc3MgUm9vdEtleVNpbmsgaW1wbGVtZW50cyBXcml0ZVNpbmsge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldDogUm9vdEtleVRhcmdldCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlYWRTaWxlbnQ6IChrZXk6IHN0cmluZykgPT4gdW5rbm93bixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvb3RLZXk6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlOiBQaWNrPE1lbWJlckNhY2hlLCAnZGVsZXRlJz4sXG4gICkge31cblxuICAvKiogQW4gZW1wdHkgcGF0aCBpcyB0aGUga2V5J3Mgb3duIHZhbHVlIOKAlCBgbmF0aXZlR2V0KHYsIFtdKWAgd291bGQgcmV0dXJuIGl0IHVuY2hhbmdlZCwgc28gdGhlIHdhbGsgaXMgc2tpcHBlZC4gKi9cbiAgcmVhZEF0KHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdW5rbm93biB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucmVhZFNpbGVudCh0aGlzLnJvb3RLZXkpO1xuICAgIHJldHVybiBwYXRoLmxlbmd0aCA9PT0gMCA/IHJvb3QgOiBuYXRpdmVHZXQocm9vdCwgcGF0aCBhcyBzdHJpbmdbXSk7XG4gIH1cblxuICBwdXQocGF0aDogcmVhZG9ubHkgc3RyaW5nW10sIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkgdGhpcy50YXJnZXQudXBkYXRlVmFsdWUodGhpcy5yb290S2V5LCBidWlsZE5lc3RlZFBhdGNoKHBhdGggYXMgc3RyaW5nW10sIHZhbHVlKSk7XG4gICAgZWxzZSB0aGlzLnRhcmdldC5zZXRWYWx1ZSh0aGlzLnJvb3RLZXksIHBhdGgubGVuZ3RoID09PSAwID8gdmFsdWUgOiBzZXRJblBhdGgodGhpcy5yZWFkQXQoW10pLCBwYXRoLCB2YWx1ZSkpO1xuICAgIHRoaXMuY2FjaGUuZGVsZXRlKHRoaXMucm9vdEtleSk7XG4gIH1cblxuICByZW1vdmUocGF0aDogcmVhZG9ubHkgc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLnRhcmdldC5zZXRWYWx1ZSh0aGlzLnJvb3RLZXksIGRlbGV0ZUluUGF0aCh0aGlzLnJlYWRBdChbXSksIHBhdGgpKTtcbiAgICB0aGlzLmNhY2hlLmRlbGV0ZSh0aGlzLnJvb3RLZXkpO1xuICB9XG59XG5cbi8qKlxuICogV0hZOiBhIHdyaXRlIGluc2lkZSBhbiBhcnJheSBlbGVtZW50IGlzIGFuIGFycmF5IHdyaXRlIOKAlCBpdCByZWJ1aWxkcyB0aGVcbiAqIG93bmluZyBhcnJheSBpbW11dGFibHkgYW5kIGhhbmRzIHRoZSBXSE9MRSBuZXcgYXJyYXkgdG8gdGhlIGFycmF5IHByb3h5J3NcbiAqIGNvbW1pdCwgdGhlIGZ1bm5lbCBgcHVzaGAgYWxyZWFkeSB1c2VzLiBgcGF0aGAgaXMgbWVhc3VyZWQgZnJvbSB0aGVcbiAqIGVsZW1lbnQ7IGBbXWAgaXMgdGhlIGVsZW1lbnQgc2xvdCBpdHNlbGYuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbGVtZW50U2luayhnZXRDdXJyZW50OiAoKSA9PiB1bmtub3duW10sIGNvbW1pdDogKG5leHQ6IHVua25vd25bXSkgPT4gdm9pZCwgaW5kZXg6IG51bWJlcik6IFdyaXRlU2luayB7XG4gIHJldHVybiBuZXcgRWxlbWVudFNpbmsoZ2V0Q3VycmVudCwgY29tbWl0LCBpbmRleCk7XG59XG5cbi8qKiBPbmUgYWxsb2NhdGlvbiBwZXIgZWxlbWVudCBwcm94eSAodGhlIG1ldGhvZHMgbGl2ZSBvbiB0aGUgcHJvdG90eXBlKSDigJQgYSAxMGstZWxlbWVudCBsb29wIGJ1aWxkcyAxMGsgb2YgdGhlc2UuICovXG5jbGFzcyBFbGVtZW50U2luayBpbXBsZW1lbnRzIFdyaXRlU2luayB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZ2V0Q3VycmVudDogKCkgPT4gdW5rbm93bltdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29tbWl0OiAobmV4dDogdW5rbm93bltdKSA9PiB2b2lkLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5kZXg6IG51bWJlcixcbiAgKSB7fVxuXG4gIHJlYWRBdChwYXRoOiByZWFkb25seSBzdHJpbmdbXSk6IHVua25vd24ge1xuICAgIHJldHVybiByZWFkSW5FbGVtZW50KHRoaXMuZ2V0Q3VycmVudCwgdGhpcy5pbmRleCwgcGF0aCk7XG4gIH1cblxuICBwdXQocGF0aDogcmVhZG9ubHkgc3RyaW5nW10sIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgcmVwbGFjZUluRWxlbWVudCh0aGlzLmdldEN1cnJlbnQsIHRoaXMuY29tbWl0LCB0aGlzLmluZGV4LCBwYXRoLCB2YWx1ZSk7XG4gIH1cblxuICByZW1vdmUocGF0aDogcmVhZG9ubHkgc3RyaW5nW10pOiB2b2lkIHtcbiAgICByZW1vdmVJbkVsZW1lbnQodGhpcy5nZXRDdXJyZW50LCB0aGlzLmNvbW1pdCwgdGhpcy5pbmRleCwgcGF0aCk7XG4gIH1cbn1cblxuLyoqIFRoZSB2YWx1ZSBhdCBgcGF0aGAgaW5zaWRlIGVsZW1lbnQgYGluZGV4YCwgYXMgaXQgc3RhbmRzIE5PVyAocmVhZC15b3VyLXdyaXRlcykuICovXG5mdW5jdGlvbiByZWFkSW5FbGVtZW50KGdldEN1cnJlbnQ6ICgpID0+IHVua25vd25bXSwgaW5kZXg6IG51bWJlciwgcGF0aDogcmVhZG9ubHkgc3RyaW5nW10pOiB1bmtub3duIHtcbiAgY29uc3QgZWxlbWVudCA9IGdldEN1cnJlbnQoKVtpbmRleF07XG4gIHJldHVybiBwYXRoLmxlbmd0aCA9PT0gMCA/IGVsZW1lbnQgOiBuYXRpdmVHZXQoZWxlbWVudCwgcGF0aCBhcyBzdHJpbmdbXSk7XG59XG5cbi8qKiBBIGNvcHkgb2YgdGhlIGFycmF5IHdpdGggYHZhbHVlYCBhdCBgcGF0aGAgaW5zaWRlIGVsZW1lbnQgYGluZGV4YDsgYSBnb25lIGVsZW1lbnQgaGFzIG5vdGhpbmcgdG8gd3JpdGUgaW50by4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VJbkVsZW1lbnQoXG4gIGdldEN1cnJlbnQ6ICgpID0+IHVua25vd25bXSxcbiAgY29tbWl0OiAobmV4dDogdW5rbm93bltdKSA9PiB2b2lkLFxuICBpbmRleDogbnVtYmVyLFxuICBwYXRoOiByZWFkb25seSBzdHJpbmdbXSxcbiAgdmFsdWU6IHVua25vd24sXG4pOiB2b2lkIHtcbiAgY29uc3QgbmV4dCA9IFsuLi5nZXRDdXJyZW50KCldO1xuICBpZiAoaW5kZXggPj0gbmV4dC5sZW5ndGgpIHJldHVybjtcbiAgbmV4dFtpbmRleF0gPSBwYXRoLmxlbmd0aCA9PT0gMCA/IHZhbHVlIDogc2V0SW5QYXRoKG5leHRbaW5kZXhdLCBwYXRoLCB2YWx1ZSk7XG4gIGNvbW1pdChuZXh0KTtcbn1cblxuLyoqIEEgY29weSBvZiB0aGUgYXJyYXkgd2l0aCB0aGUga2V5IGF0IGBwYXRoYCBpbnNpZGUgZWxlbWVudCBgaW5kZXhgIHJlbW92ZWQuICovXG5mdW5jdGlvbiByZW1vdmVJbkVsZW1lbnQoXG4gIGdldEN1cnJlbnQ6ICgpID0+IHVua25vd25bXSxcbiAgY29tbWl0OiAobmV4dDogdW5rbm93bltdKSA9PiB2b2lkLFxuICBpbmRleDogbnVtYmVyLFxuICBwYXRoOiByZWFkb25seSBzdHJpbmdbXSxcbik6IHZvaWQge1xuICBjb25zdCBuZXh0ID0gWy4uLmdldEN1cnJlbnQoKV07XG4gIGlmIChpbmRleCA+PSBuZXh0Lmxlbmd0aCkgcmV0dXJuO1xuICBuZXh0W2luZGV4XSA9IGRlbGV0ZUluUGF0aChuZXh0W2luZGV4XSwgcGF0aCk7XG4gIGNvbW1pdChuZXh0KTtcbn1cblxuLyoqXG4gKiBXSFkgb25lIHNldCB0cmFwOiB0aGUgYXNzaWduZWQgdmFsdWUgaXMgdGFrZW4gYXMgYSBWQUxVRSBoZXJlIChhIGhhbmRsZVxuICogYmVjb21lcyB3aGF0IGl0IHN0YW5kcyBmb3IsIGBoYW5kbGVzLnRzYDsgbm90aGluZyBlbHNlIGlzIGNvcGllZCDigJQgdGhlXG4gKiBidWZmZXIgZGV0YWNoZXMgYXQgY29tbWl0KSBhbmQgaGFuZGVkIHRvIHRoZSBzaW5rIGF0IHRoZSBwcm94eSdzIHBhdGggcGx1c1xuICogdGhlIGtleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpbmtTZXRUcmFwKHNpbms6IFdyaXRlU2luaywgc2VnbWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJveHlIYW5kbGVyPG9iamVjdD5bJ3NldCddIHtcbiAgcmV0dXJuIChfdGFyZ2V0LCBwcm9wLCB2YWx1ZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHJldHVybiB0cnVlO1xuICAgIHNpbmsucHV0KFsuLi5zZWdtZW50cywgcHJvcF0sIHVud3JhcEhhbmRsZXModmFsdWUpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn1cblxuLyoqXG4gKiBXSFkgb25lIGRlbGV0ZSB0cmFwOiBgbWVyZ2VgIGNhbm5vdCBleHByZXNzIGEgcmVtb3ZhbCAoYSBwYXRjaCBvZlxuICogYHVuZGVmaW5lZGAgcmVhZHMgYXMgYWJzZW50KSwgc28gYSBkZWxldGUgYWx3YXlzIHJlYnVpbGRzIHRocm91Z2ggdGhlIHNpbmsuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW5rRGVsZXRlVHJhcChzaW5rOiBXcml0ZVNpbmssIHNlZ21lbnRzOiByZWFkb25seSBzdHJpbmdbXSk6IFByb3h5SGFuZGxlcjxvYmplY3Q+WydkZWxldGVQcm9wZXJ0eSddIHtcbiAgcmV0dXJuIChfdGFyZ2V0LCBwcm9wKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykgcmV0dXJuIHRydWU7XG4gICAgc2luay5yZW1vdmUoWy4uLnNlZ21lbnRzLCBwcm9wXSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59XG4iXX0=
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVUcmFwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvd3JpdGVUcmFwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRzs7O0FBRUgsMkNBQTRDO0FBRTVDLDZDQUE2QztBQUU3QyxxREFBb0Q7QUFDcEQsNkRBQStEO0FBc0IvRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixXQUFXLENBQ3pCLE1BQXFCLEVBQ3JCLFVBQW9DLEVBQ3BDLE9BQWUsRUFDZixLQUFrQztJQUVsQyxPQUFPLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFQRCxrQ0FPQztBQUVELGtGQUFrRjtBQUNsRixNQUFNLFdBQVc7SUFFSTtJQUNBO0lBQ0E7SUFDQTtJQUpuQixZQUNtQixNQUFxQixFQUNyQixVQUFvQyxFQUNwQyxPQUFlLEVBQ2YsS0FBa0M7UUFIbEMsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixlQUFVLEdBQVYsVUFBVSxDQUEwQjtRQUNwQyxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsVUFBSyxHQUFMLEtBQUssQ0FBNkI7SUFDbEQsQ0FBQztJQUVKLG1IQUFtSDtJQUNuSCxNQUFNLENBQUMsSUFBdUI7UUFDNUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFBLGlCQUFTLEVBQUMsSUFBSSxFQUFFLElBQWdCLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsR0FBRyxDQUFDLElBQXVCLEVBQUUsS0FBYztRQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUEsaUNBQWdCLEVBQUMsSUFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDOztZQUN2RyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUEsOEJBQVMsRUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzdHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQXVCO1FBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBQSxpQ0FBWSxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEMsQ0FBQztDQUNGO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixXQUFXLENBQUMsVUFBMkIsRUFBRSxNQUFpQyxFQUFFLEtBQWE7SUFDdkcsT0FBTyxJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFGRCxrQ0FFQztBQUVELHFIQUFxSDtBQUNySCxNQUFNLFdBQVc7SUFFSTtJQUNBO0lBQ0E7SUFIbkIsWUFDbUIsVUFBMkIsRUFDM0IsTUFBaUMsRUFDakMsS0FBYTtRQUZiLGVBQVUsR0FBVixVQUFVLENBQWlCO1FBQzNCLFdBQU0sR0FBTixNQUFNLENBQTJCO1FBQ2pDLFVBQUssR0FBTCxLQUFLLENBQVE7SUFDN0IsQ0FBQztJQUVKLE1BQU0sQ0FBQyxJQUF1QjtRQUM1QixPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELEdBQUcsQ0FBQyxJQUF1QixFQUFFLEtBQWM7UUFDekMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxNQUFNLENBQUMsSUFBdUI7UUFDNUIsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xFLENBQUM7Q0FDRjtBQUVELHVGQUF1RjtBQUN2RixTQUFTLGFBQWEsQ0FBQyxVQUEyQixFQUFFLEtBQWEsRUFBRSxJQUF1QjtJQUN4RixNQUFNLE9BQU8sR0FBRyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUEsaUJBQVMsRUFBQyxPQUFPLEVBQUUsSUFBZ0IsQ0FBQyxDQUFDO0FBQzVFLENBQUM7QUFFRCxtSEFBbUg7QUFDbkgsU0FBUyxnQkFBZ0IsQ0FDdkIsVUFBMkIsRUFDM0IsTUFBaUMsRUFDakMsS0FBYSxFQUNiLElBQXVCLEVBQ3ZCLEtBQWM7SUFFZCxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMvQixJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU87SUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUEsOEJBQVMsRUFBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzlFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNmLENBQUM7QUFFRCxpRkFBaUY7QUFDakYsU0FBUyxlQUFlLENBQ3RCLFVBQTJCLEVBQzNCLE1BQWlDLEVBQ2pDLEtBQWEsRUFDYixJQUF1QjtJQUV2QixNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUMvQixJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTTtRQUFFLE9BQU87SUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUEsaUNBQVksRUFBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLElBQWUsRUFBRSxRQUEyQjtJQUN0RSxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUM5QixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7WUFBRSxPQUFPLElBQUksQ0FBQztRQUMxQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBQSwwQkFBYSxFQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7QUFDSixDQUFDO0FBTkQsa0NBTUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixjQUFjLENBQUMsSUFBZSxFQUFFLFFBQTJCO0lBQ3pFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDdkIsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7QUFDSixDQUFDO0FBTkQsd0NBTUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJlYWN0aXZlL3dyaXRlVHJhcHMg4oCUIHdoZXJlIGEgcHJveHkncyB3cml0ZXMgTEFORCwgYW5kIHRoZSB0d28gdHJhcHMgdGhhdFxuICogc2VuZCB0aGVtIHRoZXJlLlxuICpcbiAqIEV2ZXJ5IG9iamVjdCBwcm94eSBpbiB0aGlzIGZvbGRlciAobmVzdGVkLCB0ZXJtaW5hbCwgZWxlbWVudCkgaW50ZXJjZXB0c1xuICogdGhlIHNhbWUgdGhyZWUgdGhpbmdzIOKAlCBhIHByb3BlcnR5IHNldCwgYSBwcm9wZXJ0eSBkZWxldGUsIGFuZCBhbiBhcnJheVxuICogbXV0YXRpb24gc29tZXdoZXJlIGJlbG93IGl0IOKAlCBhbmQgZGlmZmVycyBvbmx5IGluIHdoZXJlIHRoZSB3cml0ZSBnb2VzOlxuICogYSBuZXN0ZWQvdGVybWluYWwgcHJveHkgY29tbWl0cyB1bmRlciBhIFRPUC1MRVZFTCBLRVkgKGFuIG9iamVjdCB3cml0ZSBhc1xuICogYG1lcmdlYCBvZiBhIHBhdGNoLCBhbiBhcnJheSB3cml0ZSBvciBhIGRlbGV0ZSBhcyBgc2V0YCBvZiB0aGUgcmVidWlsdFxuICogcm9vdCk7IGFuIGVsZW1lbnQgcHJveHkgY29tbWl0cyB0aGUgV0hPTEUgT1dOSU5HIEFSUkFZIGJhY2sgdGhyb3VnaCB0aGVcbiAqIGFycmF5IHByb3h5J3Mgb3duIGNhbGxiYWNrLiBUaGF0IGRpZmZlcmVuY2UgaXMgYSB7QGxpbmsgV3JpdGVTaW5rfTsgdGhlXG4gKiB0cmFwcyBhcmUgd3JpdHRlbiBvbmNlIG92ZXIgaXQgKDkuMjMuMSDigJQgdGhlIDkuMjIuMCBzdGFsZS1yZWFkIGJ1ZyB3YXNcbiAqIGZpeGVkIGluIG9uZSBjb3B5IG9mIHRoZXNlIHRyYXBzIGFuZCB0aGVuIGZvdW5kIGFnYWluIGluIHRoZSBvdGhlciB0d28pLlxuICovXG5cbmltcG9ydCB7IG5hdGl2ZUdldCB9IGZyb20gJ2Zvb3R0cmFjZS9wYXRocyc7XG5cbmltcG9ydCB7IHVud3JhcEhhbmRsZXMgfSBmcm9tICcuL2hhbmRsZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1iZXJDYWNoZSB9IGZyb20gJy4vbGl2ZVZpZXcuanMnO1xuaW1wb3J0IHsgYnVpbGROZXN0ZWRQYXRjaCB9IGZyb20gJy4vcGF0aEJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgZGVsZXRlSW5QYXRoLCBzZXRJblBhdGggfSBmcm9tICcuL3N0cnVjdHVyYWxXcml0ZS5qcyc7XG5cbi8qKlxuICogVGhlIHNlYW0gYmV0d2VlbiBhIHByb3h5IGFuZCBzdGF0ZS4gYHBhdGhgIGlzIG1lYXN1cmVkIGZyb20gdGhlIHNpbmsnc1xuICogcm9vdCDigJQgdGhlIGtleSdzIHZhbHVlIGZvciB7QGxpbmsgcm9vdEtleVNpbmt9LCB0aGUgZWxlbWVudCBmb3JcbiAqIHtAbGluayBlbGVtZW50U2lua307IGBbXWAgaXMgdGhlIHJvb3QgaXRzZWxmLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdyaXRlU2luayB7XG4gIC8qKiBUaGUgdmFsdWUgYXQgYHBhdGhgLCBhcyBpdCBzdGFuZHMgTk9XIChyZWFkLXlvdXItd3JpdGVzOyBuZXZlciBhIHRyYWNrZWQgcmVhZCkuICovXG4gIHJlYWRBdChwYXRoOiByZWFkb25seSBzdHJpbmdbXSk6IHVua25vd247XG4gIC8qKiBQdXQgYW4gYWxyZWFkeS11bndyYXBwZWQgYHZhbHVlYCBhdCBgcGF0aGAuIFRoZSBzaW5rIGNob29zZXMgdGhlIHZlcmIuICovXG4gIHB1dChwYXRoOiByZWFkb25seSBzdHJpbmdbXSwgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuICAvKiogUmVtb3ZlIHRoZSBrZXkgYXQgYHBhdGhgLiAqL1xuICByZW1vdmUocGF0aDogcmVhZG9ubHkgc3RyaW5nW10pOiB2b2lkO1xufVxuXG4vKiogVGhlIHR3byB3YXlzIGEgdmFsdWUgcmVhY2hlcyBhIHN0YXRlIGtleTogd2hhdCB0aGUgc2luayB3cml0ZXMgdGhyb3VnaC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm9vdEtleVRhcmdldCB7XG4gIHNldFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gIHVwZGF0ZVZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG59XG5cbi8qKlxuICogV0hZOiBhIHdyaXRlIGJlbG93IGEgdG9wLWxldmVsIGtleSBoYXMgVFdPIHZlcmJzIChyZWFjdGl2ZS9SRUFETUUubWQsIGxhd1xuICogMykg4oCUIGFuIG9iamVjdCBsZWFmIGlzIGEgYG1lcmdlYCBvZiBhIG5lc3RlZCBwYXRjaCwgYW4gYXJyYXkgbGVhZiBvciBhXG4gKiBkZWxldGUgcmVidWlsZHMgdGhlIHJvb3QgaW1tdXRhYmx5IGFuZCBjb21taXRzIGEgYHNldGAgb2YgdGhlIGtleS4gT25seSB0aGVcbiAqIHNpbmsga25vd3MgdGhhdDsgdGhlIHRyYXBzIGRvIG5vdC4gRXZlcnkgd3JpdGUgZHJvcHMgdGhlIGtleSdzIGNhY2hlZCBjaGlsZFxuICogcHJveHkgKGBjYWNoZWApLCBzbyB0aGUgbmV4dCByZWFkIGlzIGJ1aWx0IG92ZXIgdGhlIG5ldyB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJvb3RLZXlTaW5rKFxuICB0YXJnZXQ6IFJvb3RLZXlUYXJnZXQsXG4gIHJlYWRTaWxlbnQ6IChrZXk6IHN0cmluZykgPT4gdW5rbm93bixcbiAgcm9vdEtleTogc3RyaW5nLFxuICBjYWNoZTogUGljazxNZW1iZXJDYWNoZSwgJ2RlbGV0ZSc+LFxuKTogV3JpdGVTaW5rIHtcbiAgcmV0dXJuIG5ldyBSb290S2V5U2luayh0YXJnZXQsIHJlYWRTaWxlbnQsIHJvb3RLZXksIGNhY2hlKTtcbn1cblxuLyoqIE9uZSBhbGxvY2F0aW9uIHBlciB0b3AtbGV2ZWwgcmVhZCBtaXNzICh0aGUgbWV0aG9kcyBsaXZlIG9uIHRoZSBwcm90b3R5cGUpLiAqL1xuY2xhc3MgUm9vdEtleVNpbmsgaW1wbGVtZW50cyBXcml0ZVNpbmsge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhcmdldDogUm9vdEtleVRhcmdldCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlYWRTaWxlbnQ6IChrZXk6IHN0cmluZykgPT4gdW5rbm93bixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvb3RLZXk6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlOiBQaWNrPE1lbWJlckNhY2hlLCAnZGVsZXRlJz4sXG4gICkge31cblxuICAvKiogQW4gZW1wdHkgcGF0aCBpcyB0aGUga2V5J3Mgb3duIHZhbHVlIOKAlCBgbmF0aXZlR2V0KHYsIFtdKWAgd291bGQgcmV0dXJuIGl0IHVuY2hhbmdlZCwgc28gdGhlIHdhbGsgaXMgc2tpcHBlZC4gKi9cbiAgcmVhZEF0KHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdW5rbm93biB7XG4gICAgY29uc3Qgcm9vdCA9IHRoaXMucmVhZFNpbGVudCh0aGlzLnJvb3RLZXkpO1xuICAgIHJldHVybiBwYXRoLmxlbmd0aCA9PT0gMCA/IHJvb3QgOiBuYXRpdmVHZXQocm9vdCwgcGF0aCBhcyBzdHJpbmdbXSk7XG4gIH1cblxuICBwdXQocGF0aDogcmVhZG9ubHkgc3RyaW5nW10sIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkgdGhpcy50YXJnZXQudXBkYXRlVmFsdWUodGhpcy5yb290S2V5LCBidWlsZE5lc3RlZFBhdGNoKHBhdGggYXMgc3RyaW5nW10sIHZhbHVlKSk7XG4gICAgZWxzZSB0aGlzLnRhcmdldC5zZXRWYWx1ZSh0aGlzLnJvb3RLZXksIHBhdGgubGVuZ3RoID09PSAwID8gdmFsdWUgOiBzZXRJblBhdGgodGhpcy5yZWFkQXQoW10pLCBwYXRoLCB2YWx1ZSkpO1xuICAgIHRoaXMuY2FjaGUuZGVsZXRlKHRoaXMucm9vdEtleSk7XG4gIH1cblxuICByZW1vdmUocGF0aDogcmVhZG9ubHkgc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLnRhcmdldC5zZXRWYWx1ZSh0aGlzLnJvb3RLZXksIGRlbGV0ZUluUGF0aCh0aGlzLnJlYWRBdChbXSksIHBhdGgpKTtcbiAgICB0aGlzLmNhY2hlLmRlbGV0ZSh0aGlzLnJvb3RLZXkpO1xuICB9XG59XG5cbi8qKlxuICogV0hZOiBhIHdyaXRlIGluc2lkZSBhbiBhcnJheSBlbGVtZW50IGlzIGFuIGFycmF5IHdyaXRlIOKAlCBpdCByZWJ1aWxkcyB0aGVcbiAqIG93bmluZyBhcnJheSBpbW11dGFibHkgYW5kIGhhbmRzIHRoZSBXSE9MRSBuZXcgYXJyYXkgdG8gdGhlIGFycmF5IHByb3h5J3NcbiAqIGNvbW1pdCwgdGhlIGZ1bm5lbCBgcHVzaGAgYWxyZWFkeSB1c2VzLiBgcGF0aGAgaXMgbWVhc3VyZWQgZnJvbSB0aGVcbiAqIGVsZW1lbnQ7IGBbXWAgaXMgdGhlIGVsZW1lbnQgc2xvdCBpdHNlbGYuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbGVtZW50U2luayhnZXRDdXJyZW50OiAoKSA9PiB1bmtub3duW10sIGNvbW1pdDogKG5leHQ6IHVua25vd25bXSkgPT4gdm9pZCwgaW5kZXg6IG51bWJlcik6IFdyaXRlU2luayB7XG4gIHJldHVybiBuZXcgRWxlbWVudFNpbmsoZ2V0Q3VycmVudCwgY29tbWl0LCBpbmRleCk7XG59XG5cbi8qKiBPbmUgYWxsb2NhdGlvbiBwZXIgZWxlbWVudCBwcm94eSAodGhlIG1ldGhvZHMgbGl2ZSBvbiB0aGUgcHJvdG90eXBlKSDigJQgYSAxMGstZWxlbWVudCBsb29wIGJ1aWxkcyAxMGsgb2YgdGhlc2UuICovXG5jbGFzcyBFbGVtZW50U2luayBpbXBsZW1lbnRzIFdyaXRlU2luayB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZ2V0Q3VycmVudDogKCkgPT4gdW5rbm93bltdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29tbWl0OiAobmV4dDogdW5rbm93bltdKSA9PiB2b2lkLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5kZXg6IG51bWJlcixcbiAgKSB7fVxuXG4gIHJlYWRBdChwYXRoOiByZWFkb25seSBzdHJpbmdbXSk6IHVua25vd24ge1xuICAgIHJldHVybiByZWFkSW5FbGVtZW50KHRoaXMuZ2V0Q3VycmVudCwgdGhpcy5pbmRleCwgcGF0aCk7XG4gIH1cblxuICBwdXQocGF0aDogcmVhZG9ubHkgc3RyaW5nW10sIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgcmVwbGFjZUluRWxlbWVudCh0aGlzLmdldEN1cnJlbnQsIHRoaXMuY29tbWl0LCB0aGlzLmluZGV4LCBwYXRoLCB2YWx1ZSk7XG4gIH1cblxuICByZW1vdmUocGF0aDogcmVhZG9ubHkgc3RyaW5nW10pOiB2b2lkIHtcbiAgICByZW1vdmVJbkVsZW1lbnQodGhpcy5nZXRDdXJyZW50LCB0aGlzLmNvbW1pdCwgdGhpcy5pbmRleCwgcGF0aCk7XG4gIH1cbn1cblxuLyoqIFRoZSB2YWx1ZSBhdCBgcGF0aGAgaW5zaWRlIGVsZW1lbnQgYGluZGV4YCwgYXMgaXQgc3RhbmRzIE5PVyAocmVhZC15b3VyLXdyaXRlcykuICovXG5mdW5jdGlvbiByZWFkSW5FbGVtZW50KGdldEN1cnJlbnQ6ICgpID0+IHVua25vd25bXSwgaW5kZXg6IG51bWJlciwgcGF0aDogcmVhZG9ubHkgc3RyaW5nW10pOiB1bmtub3duIHtcbiAgY29uc3QgZWxlbWVudCA9IGdldEN1cnJlbnQoKVtpbmRleF07XG4gIHJldHVybiBwYXRoLmxlbmd0aCA9PT0gMCA/IGVsZW1lbnQgOiBuYXRpdmVHZXQoZWxlbWVudCwgcGF0aCBhcyBzdHJpbmdbXSk7XG59XG5cbi8qKiBBIGNvcHkgb2YgdGhlIGFycmF5IHdpdGggYHZhbHVlYCBhdCBgcGF0aGAgaW5zaWRlIGVsZW1lbnQgYGluZGV4YDsgYSBnb25lIGVsZW1lbnQgaGFzIG5vdGhpbmcgdG8gd3JpdGUgaW50by4gKi9cbmZ1bmN0aW9uIHJlcGxhY2VJbkVsZW1lbnQoXG4gIGdldEN1cnJlbnQ6ICgpID0+IHVua25vd25bXSxcbiAgY29tbWl0OiAobmV4dDogdW5rbm93bltdKSA9PiB2b2lkLFxuICBpbmRleDogbnVtYmVyLFxuICBwYXRoOiByZWFkb25seSBzdHJpbmdbXSxcbiAgdmFsdWU6IHVua25vd24sXG4pOiB2b2lkIHtcbiAgY29uc3QgbmV4dCA9IFsuLi5nZXRDdXJyZW50KCldO1xuICBpZiAoaW5kZXggPj0gbmV4dC5sZW5ndGgpIHJldHVybjtcbiAgbmV4dFtpbmRleF0gPSBwYXRoLmxlbmd0aCA9PT0gMCA/IHZhbHVlIDogc2V0SW5QYXRoKG5leHRbaW5kZXhdLCBwYXRoLCB2YWx1ZSk7XG4gIGNvbW1pdChuZXh0KTtcbn1cblxuLyoqIEEgY29weSBvZiB0aGUgYXJyYXkgd2l0aCB0aGUga2V5IGF0IGBwYXRoYCBpbnNpZGUgZWxlbWVudCBgaW5kZXhgIHJlbW92ZWQuICovXG5mdW5jdGlvbiByZW1vdmVJbkVsZW1lbnQoXG4gIGdldEN1cnJlbnQ6ICgpID0+IHVua25vd25bXSxcbiAgY29tbWl0OiAobmV4dDogdW5rbm93bltdKSA9PiB2b2lkLFxuICBpbmRleDogbnVtYmVyLFxuICBwYXRoOiByZWFkb25seSBzdHJpbmdbXSxcbik6IHZvaWQge1xuICBjb25zdCBuZXh0ID0gWy4uLmdldEN1cnJlbnQoKV07XG4gIGlmIChpbmRleCA+PSBuZXh0Lmxlbmd0aCkgcmV0dXJuO1xuICBuZXh0W2luZGV4XSA9IGRlbGV0ZUluUGF0aChuZXh0W2luZGV4XSwgcGF0aCk7XG4gIGNvbW1pdChuZXh0KTtcbn1cblxuLyoqXG4gKiBXSFkgb25lIHNldCB0cmFwOiB0aGUgYXNzaWduZWQgdmFsdWUgaXMgdGFrZW4gYXMgYSBWQUxVRSBoZXJlIChhIGhhbmRsZVxuICogYmVjb21lcyB3aGF0IGl0IHN0YW5kcyBmb3IsIGBoYW5kbGVzLnRzYDsgbm90aGluZyBlbHNlIGlzIGNvcGllZCDigJQgdGhlXG4gKiBidWZmZXIgZGV0YWNoZXMgYXQgY29tbWl0KSBhbmQgaGFuZGVkIHRvIHRoZSBzaW5rIGF0IHRoZSBwcm94eSdzIHBhdGggcGx1c1xuICogdGhlIGtleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpbmtTZXRUcmFwKHNpbms6IFdyaXRlU2luaywgc2VnbWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJveHlIYW5kbGVyPG9iamVjdD5bJ3NldCddIHtcbiAgcmV0dXJuIChfdGFyZ2V0LCBwcm9wLCB2YWx1ZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHJldHVybiB0cnVlO1xuICAgIHNpbmsucHV0KFsuLi5zZWdtZW50cywgcHJvcF0sIHVud3JhcEhhbmRsZXModmFsdWUpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn1cblxuLyoqXG4gKiBXSFkgb25lIGRlbGV0ZSB0cmFwOiBgbWVyZ2VgIGNhbm5vdCBleHByZXNzIGEgcmVtb3ZhbCAoYSBwYXRjaCBvZlxuICogYHVuZGVmaW5lZGAgcmVhZHMgYXMgYWJzZW50KSwgc28gYSBkZWxldGUgYWx3YXlzIHJlYnVpbGRzIHRocm91Z2ggdGhlIHNpbmsuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW5rRGVsZXRlVHJhcChzaW5rOiBXcml0ZVNpbmssIHNlZ21lbnRzOiByZWFkb25seSBzdHJpbmdbXSk6IFByb3h5SGFuZGxlcjxvYmplY3Q+WydkZWxldGVQcm9wZXJ0eSddIHtcbiAgcmV0dXJuIChfdGFyZ2V0LCBwcm9wKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJykgcmV0dXJuIHRydWU7XG4gICAgc2luay5yZW1vdmUoWy4uLnNlZ21lbnRzLCBwcm9wXSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59XG4iXX0=
@@ -41,7 +41,8 @@
41
41
  *
42
42
  * @example
43
43
  * ```typescript
44
- * import { controlDepRecorder, causalChain } from 'footprintjs/trace';
44
+ * import { controlDepRecorder } from 'footprintjs/trace';
45
+ import { causalChain } from 'foottrace';
45
46
  *
46
47
  * const ctrl = controlDepRecorder();
47
48
  * executor.attachCombinedRecorder(ctrl); // auto-routes to FlowRecorder channel
@@ -230,4 +231,4 @@ function matchedRuleLabel(evidence) {
230
231
  const rule = evidence.rules.find((r) => r.matched && r.branch === evidence.chosen) ?? evidence.rules.find((r) => r.matched);
231
232
  return rule?.label;
232
233
  }
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbERlcFJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9Db250cm9sRGVwUmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFERzs7O0FBd0NILElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUVqQjs7R0FFRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLFVBQXFDLEVBQUU7SUFDeEUsT0FBTyxJQUFJLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFGRCxnREFFQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFhLGtCQUFrQjtJQUNwQixFQUFFLENBQVM7SUFFcEIsMEVBQTBFO0lBQ3pELFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUN0RCwyREFBMkQ7SUFDMUMsU0FBUyxHQUFHLElBQUksR0FBRyxFQUFpQyxDQUFDO0lBQ3RFLHNFQUFzRTtJQUNyRCxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUNuRSxpRUFBaUU7SUFDekQsT0FBTyxHQUFzQixFQUFFLENBQUM7SUFDeEMsdUVBQXVFO0lBQ3RELGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQ25ELGdFQUFnRTtJQUN4RCxTQUFTLENBQVU7SUFFM0IsWUFBWSxVQUFxQyxFQUFFO1FBQ2pELElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsSUFBSSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUN2RCxDQUFDO0lBRUQseUVBQXlFO0lBRXpFLFVBQVUsQ0FBQyxLQUF3QjtRQUNqQyxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7UUFDbkMsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPO1FBQ2pCLElBQUksQ0FBQyxh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QyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxDQUFDO2dCQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoRCxPQUFPO1FBQ1QsQ0FBQztJQUNILENBQUM7Q0FDRjtBQS9KRCxnREErSkM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGdCQUFnQixDQUFDLFFBQXNDO0lBQzlELElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDaEMsTUFBTSxJQUFJLEdBQ1IsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqSCxPQUFPLElBQUksRUFBRSxLQUFLLENBQUM7QUFDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udHJvbERlcFJlY29yZGVyIOKAlCBjb250cm9sLWRlcGVuZGVuY2UgdHJhY2tpbmcgZnJvbSBmbG93IGV2ZW50cyAoUkZDLTAwMyBENSkuXG4gKlxuICogVGhlIGdhcCB0aGlzIGZpbGxzOlxuICogICBUaGUgYmFja3RyYWNrZXIncyBgY29udHJvbERlcHNgIG9wdGlvbiAoRDMpIG5lZWRzIGEgYENvbnRyb2xEZXBMb29rdXBgOlxuICogICBcIndoaWNoIGRlY2lkZXIgZXhlY3V0aW9uIGFsbG93ZWQgdGhpcyBzdGFnZSB0byBydW4/XCIgVGhlIGVuZ2luZSBrbm93c1xuICogICB0aGlzIGR1cmluZyB0cmF2ZXJzYWwgYnV0IHRoZSBjb21taXQgbG9nIGRvZXNuJ3QgcmVjb3JkIGl0IOKAlCBjb250cm9sXG4gKiAgIGZsb3cgaXMgYSBGbG93UmVjb3JkZXIgY29uY2Vybi4gVGhpcyByZWNvcmRlciBpcyB0aGUgc3RhbmRhcmQgcHJvZHVjZXI6XG4gKiAgIG9uZSBzdWJzY3JpcHRpb24sIG9uZSBsb29rdXAsIHBsdWcgaXQgc3RyYWlnaHQgaW50byBgY2F1c2FsQ2hhaW5gLlxuICpcbiAqIEhvdyBpdCB3b3JrcyDigJQgdHdvIGNvcnJlbGF0aW9uIHN0cnVjdHVyZXMgYnVpbHQgZHVyaW5nIHRyYXZlcnNhbDpcbiAqXG4gKiAgIDEuIGBwYXJlbnRPZmAg4oCUIHRoZSBydW50aW1lIGFuY2VzdG9yIGNoYWluLCBmcm9tIGV2ZXJ5IHN0YWdlIGV2ZW50J3NcbiAqICAgICAgYHRyYXZlcnNhbENvbnRleHQucGFyZW50UnVudGltZVN0YWdlSWRgIChSRkMtMDAzIEQxKS4gQ3Jvc3Nlc1xuICogICAgICBzdWJmbG93IGJvdW5kYXJpZXM7IGxvb3AgcmUtZW50cmllcyBzdGF5IHVuYW1iaWd1b3VzIGJlY2F1c2VcbiAqICAgICAgcnVudGltZSBpZHMgZGlmZmVyIHBlciBpdGVyYXRpb24uXG4gKlxuICogICAyLiBgYnJhbmNoRW50cnlUb0RlY2lzaW9uYCDigJQgb24gYG9uRGVjaXNpb25gL2BvblNlbGVjdGVkYCB0aGUgZGVjaXNpb25cbiAqICAgICAgaXMgcmVjb3JkZWQgYXMgUEVORElORzsgdGhlIG5leHQgc3RhZ2UocykgZXhlY3V0ZWQgd2hvc2VcbiAqICAgICAgYHBhcmVudFJ1bnRpbWVTdGFnZUlkYCBJUyB0aGUgZGVjaWRlcidzIHJ1bnRpbWVTdGFnZUlkIGFyZSBpdHNcbiAqICAgICAgYnJhbmNoIGVudHJpZXMgKDEgZm9yIGEgZGVjaWRlciwgTiA9IHNlbGVjdGVkLmxlbmd0aCBmb3IgYVxuICogICAgICBzZWxlY3RvcikuIENvcnJlbGF0aW9uIGlzIGJ5IHBhcmVudC1pZCArIGNvdW50LCBOT1QgYnkgc3RhZ2UgbmFtZSDigJRcbiAqICAgICAgc3ViZmxvdy1tb3VudCBldmVudHMgY2FycnkgcGF0aC1wcmVmaXhlZCBpbm5lci1yb290IG5hbWVzIHRoYXRcbiAqICAgICAgZG9uJ3QgbWF0Y2ggYEZsb3dEZWNpc2lvbkV2ZW50LmNob3NlbmAsIGFuZCBzZWxlY3RvcnMgZW1pdCBhXG4gKiAgICAgIHN5bnRoZXRpYyBmb3JrIGV2ZW50IHNoYXJpbmcgdGhlIHNlbGVjdG9yJ3Mgb3duIHJ1bnRpbWVTdGFnZUlkXG4gKiAgICAgIChleGNsdWRlZCB2aWEgdGhlIHNlbGYtaWQgZ3VhcmQpLiBBIGJyYW5jaCB0aGF0IFRIUk9XUyBiZWZvcmVcbiAqICAgICAgY29tcGxldGluZyBjb25zdW1lcyBpdHMgc2xvdCB2aWEgYG9uRXJyb3JgLCBzbyB0aGUgcG9zdC1mYW4tb3V0XG4gKiAgICAgIGNvbnZlcmdlbmNlIHN0YWdlIGlzIG5ldmVyIG1pc2F0dHJpYnV0ZWQgYXMgYSBicmFuY2ggZW50cnkuXG4gKlxuICogICBgbG9va3VwKHJ1bnRpbWVTdGFnZUlkKWAgdGhlbiB3YWxrcyB0aGUgYW5jZXN0b3IgY2hhaW4gZnJvbSB0aGUgc3RhZ2VcbiAqICAgdXB3YXJkOyB0aGUgZmlyc3QgYW5jZXN0b3IgKG9yIHRoZSBzdGFnZSBpdHNlbGYpIHJlZ2lzdGVyZWQgYXMgYVxuICogICBicmFuY2ggZW50cnkgeWllbGRzIGl0cyBnb3Zlcm5pbmcgZGVjaWRlciDigJQgdGhlIE5FQVJFU1QgZGVjaXNpb24uXG4gKiAgIE5lc3RlZCBkZWNpc2lvbnMgY29tcG9zZSBuYXR1cmFsbHk6IHRoZSBiYWNrdHJhY2tlciBleHBhbmRzIHRoZVxuICogICBkZWNpZGVyIG5vZGUgYW5kIGFza3MgYWdhaW4uXG4gKlxuICogQ29udmVudGlvbiA0OiBzdGF0ZSByZXNldHMgd2hlbiBgdHJhdmVyc2FsQ29udGV4dC5ydW5JZGAgY2hhbmdlcyDigJQgZWFjaFxuICogcnVuIChhbmQgZWFjaCByZXN1bWUsIHdoaWNoIG1pbnRzIGEgZnJlc2ggcnVuSWQpIHN0YXJ0cyBjbGVhbi4gQ29udHJvbFxuICogY2hhaW5zIHRoZXJlZm9yZSBkbyBOT1Qgc3Vydml2ZSBhIHBhdXNlL3Jlc3VtZSBib3VuZGFyeTogcG9zdC1yZXN1bWVcbiAqIHN0YWdlcyBjYW5ub3QgcmVzb2x2ZSBwcmUtcGF1c2UgZGVjaXNpb25zLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBjb250cm9sRGVwUmVjb3JkZXIsIGNhdXNhbENoYWluIH0gZnJvbSAnZm9vdHByaW50anMvdHJhY2UnO1xuICpcbiAqIGNvbnN0IGN0cmwgPSBjb250cm9sRGVwUmVjb3JkZXIoKTtcbiAqIGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIoY3RybCk7IC8vIGF1dG8tcm91dGVzIHRvIEZsb3dSZWNvcmRlciBjaGFubmVsXG4gKlxuICogYXdhaXQgZXhlY3V0b3IucnVuKHsgaW5wdXQgfSk7XG4gKlxuICogY29uc3QgZGFnID0gY2F1c2FsQ2hhaW4oY29tbWl0TG9nLCAnYXBwcm92ZSMyJywga2V5c1JlYWQsIHtcbiAqICAgY29udHJvbERlcHM6IGN0cmwuYXNMb29rdXAoKSxcbiAqIH0pO1xuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBEZWNpc2lvbkV2aWRlbmNlLCBTZWxlY3Rpb25FdmlkZW5jZSB9IGZyb20gJy4uL2RlY2lkZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEZsb3dEZWNpc2lvbkV2ZW50LFxuICBGbG93RXJyb3JFdmVudCxcbiAgRmxvd1JlY29yZGVyLFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG59IGZyb20gJy4uL2VuZ2luZS9uYXJyYXRpdmUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sRGVwZW5kZW5jeSwgQ29udHJvbERlcExvb2t1cCB9IGZyb20gJy4uL21lbW9yeS9iYWNrdHJhY2suanMnO1xuXG4vKiogT25lIHJlY29yZGVkIGRlY2lzaW9uL3NlbGVjdGlvbiBldmVudCAoUkZDLTAwMyBENSkuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyb2xEZWNpc2lvblJlY29yZCB7XG4gIC8qKiBydW50aW1lU3RhZ2VJZCBvZiB0aGUgZGVjaWRlci9zZWxlY3RvciBleGVjdXRpb24gc3RlcC4gKi9cbiAgZGVjaWRlclJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBDaG9zZW4gYnJhbmNoIGRpc3BsYXkgbmFtZSAoZGVjaWRlcikgb3Igc2VsZWN0ZWQgbmFtZXMgKHNlbGVjdG9yKS4gKi9cbiAgY2hvc2VuOiBzdHJpbmcgfCByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqIFN0cnVjdHVyZWQgZXZpZGVuY2UgZnJvbSBkZWNpZGUoKS9zZWxlY3QoKSwgd2hlbiB0aGUgc3RhZ2UgdXNlZCB0aGVtLiAqL1xuICBldmlkZW5jZT86IERlY2lzaW9uRXZpZGVuY2UgfCBTZWxlY3Rpb25FdmlkZW5jZTtcbiAgLyoqXG4gICAqIFRoZSBkZWNpZGUoKSBydWxlIGxhYmVsIHRoYXQgcHJvZHVjZWQgdGhlIGRlY2lzaW9uIChlLmcuICdHb29kIGNyZWRpdCcpLlxuICAgKiBEZWNpZGVycyBvbmx5IOKAlCBhIHNlbGVjdG9yIHBpY2tzIE4gYnJhbmNoZXMgYW5kIG5vIHNpbmdsZSBsYWJlbFxuICAgKiBhdHRyaWJ1dGVzIHRvIGFsbCBvZiB0aGVtIChpbnNwZWN0IGBldmlkZW5jZWAgaW5zdGVhZCkuXG4gICAqL1xuICBydWxlTGFiZWw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udHJvbERlcFJlY29yZGVyT3B0aW9ucyB7XG4gIC8qKiBSZWNvcmRlciBpZC4gRGVmYXVsdHMgdG8gYGNvbnRyb2wtZGVwcy1OYCAoYXV0by1pbmNyZW1lbnRlZCkuICovXG4gIGlkPzogc3RyaW5nO1xufVxuXG4vKiogQSBkZWNpc2lvbiBhd2FpdGluZyBicmFuY2gtZW50cnkgY29ycmVsYXRpb24uICovXG5pbnRlcmZhY2UgUGVuZGluZ0RlY2lzaW9uIHtcbiAgZGVjaWRlcklkOiBzdHJpbmc7XG4gIC8qKiBIb3cgbWFueSBicmFuY2ggZW50cmllcyBhcmUgc3RpbGwgZXhwZWN0ZWQgKGRlY2lkZXI6IDEsIHNlbGVjdG9yOiBOKS4gKi9cbiAgcmVtYWluaW5nOiBudW1iZXI7XG59XG5cbmxldCBfY291bnRlciA9IDA7XG5cbi8qKlxuICogRmFjdG9yeSDigJQgbWF0Y2hlcyB0aGUgYHRvcG9sb2d5UmVjb3JkZXIoKWAgLyBgaW5PdXRSZWNvcmRlcigpYCBzdHlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnRyb2xEZXBSZWNvcmRlcihvcHRpb25zOiBDb250cm9sRGVwUmVjb3JkZXJPcHRpb25zID0ge30pOiBDb250cm9sRGVwUmVjb3JkZXIge1xuICByZXR1cm4gbmV3IENvbnRyb2xEZXBSZWNvcmRlcihvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBTdGF0ZWZ1bCBhY2N1bXVsYXRvciB0aGF0IHdhdGNoZXMgRmxvd1JlY29yZGVyIGV2ZW50cyBhbmQgYW5zd2Vyc1xuICogXCJ3aGljaCBkZWNpc2lvbiBhbGxvd2VkIHRoaXMgc3RhZ2UgdG8gcnVuP1wiIEF0dGFjaCB2aWFcbiAqIGBleGVjdXRvci5hdHRhY2hDb21iaW5lZFJlY29yZGVyKHJlY29yZGVyKWAgKG9yIGBhdHRhY2hGbG93UmVjb3JkZXJgKS5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRyb2xEZXBSZWNvcmRlciBpbXBsZW1lbnRzIEZsb3dSZWNvcmRlciB7XG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqIFJ1bnRpbWUgYW5jZXN0b3IgY2hhaW46IHJ1bnRpbWVTdGFnZUlkIOKGkiBwYXJlbnRSdW50aW1lU3RhZ2VJZCAoRDEpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudE9mID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgLyoqIFJlY29yZGVkIGRlY2lzaW9ucywga2V5ZWQgYnkgZGVjaWRlciBydW50aW1lU3RhZ2VJZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBkZWNpc2lvbnMgPSBuZXcgTWFwPHN0cmluZywgQ29udHJvbERlY2lzaW9uUmVjb3JkPigpO1xuICAvKiogQnJhbmNoLWVudHJ5IHJ1bnRpbWVTdGFnZUlkIOKGkiBnb3Zlcm5pbmcgZGVjaWRlciBydW50aW1lU3RhZ2VJZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBicmFuY2hFbnRyeVRvRGVjaXNpb24gPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAvKiogRGVjaXNpb25zIHdob3NlIGJyYW5jaCBlbnRyaWVzIGhhdmUgbm90IGFsbCBiZWVuIHNlZW4geWV0LiAqL1xuICBwcml2YXRlIHBlbmRpbmc6IFBlbmRpbmdEZWNpc2lvbltdID0gW107XG4gIC8qKiBTdGFnZSBpZHMgdGhhdCBhbHJlYWR5IGNvbnN1bWVkIGEgcGVuZGluZyBzbG90IChlbnRyeSBPUiBlcnJvcikuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uc3VtZWRTbG90cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAvKiogQ29udmVudGlvbiA0IOKAlCBydW5JZCBvZiB0aGUgcnVuIGN1cnJlbnRseSBiZWluZyByZWNvcmRlZC4gKi9cbiAgcHJpdmF0ZSBsYXN0UnVuSWQ/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogQ29udHJvbERlcFJlY29yZGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5pZCA9IG9wdGlvbnMuaWQgPz8gYGNvbnRyb2wtZGVwcy0keysrX2NvdW50ZXJ9YDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBGbG93UmVjb3JkZXIgaG9va3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgb25EZWNpc2lvbihldmVudDogRmxvd0RlY2lzaW9uRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdHggPSBldmVudC50cmF2ZXJzYWxDb250ZXh0O1xuICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgdGhpcy5yZXNldElmTmV3UnVuKGN0eC5ydW5JZCk7XG5cbiAgICBjb25zdCBkZWNpZGVySWQgPSBjdHgucnVudGltZVN0YWdlSWQ7XG4gICAgY29uc3QgcnVsZUxhYmVsID0gbWF0Y2hlZFJ1bGVMYWJlbChldmVudC5ldmlkZW5jZSk7XG4gICAgdGhpcy5kZWNpc2lvbnMuc2V0KGRlY2lkZXJJZCwge1xuICAgICAgZGVjaWRlclJ1bnRpbWVTdGFnZUlkOiBkZWNpZGVySWQsXG4gICAgICBjaG9zZW46IGV2ZW50LmNob3NlbixcbiAgICAgIC4uLihldmVudC5ldmlkZW5jZSAmJiB7IGV2aWRlbmNlOiBldmVudC5ldmlkZW5jZSB9KSxcbiAgICAgIC4uLihydWxlTGFiZWwgIT09IHVuZGVmaW5lZCAmJiB7IHJ1bGVMYWJlbCB9KSxcbiAgICB9KTtcbiAgICB0aGlzLnBlbmRpbmcucHVzaCh7IGRlY2lkZXJJZCwgcmVtYWluaW5nOiAxIH0pO1xuICB9XG5cbiAgb25TZWxlY3RlZChldmVudDogRmxvd1NlbGVjdGVkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdHggPSBldmVudC50cmF2ZXJzYWxDb250ZXh0O1xuICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgdGhpcy5yZXNldElmTmV3UnVuKGN0eC5ydW5JZCk7XG4gICAgaWYgKGV2ZW50LnNlbGVjdGVkLmxlbmd0aCA9PT0gMCkgcmV0dXJuOyAvLyBub3RoaW5nIHNlbGVjdGVkIOKGkiBub3RoaW5nIGdvdmVybmVkXG5cbiAgICBjb25zdCBkZWNpZGVySWQgPSBjdHgucnVudGltZVN0YWdlSWQ7XG4gICAgdGhpcy5kZWNpc2lvbnMuc2V0KGRlY2lkZXJJZCwge1xuICAgICAgZGVjaWRlclJ1bnRpbWVTdGFnZUlkOiBkZWNpZGVySWQsXG4gICAgICBjaG9zZW46IFsuLi5ldmVudC5zZWxlY3RlZF0sXG4gICAgICAuLi4oZXZlbnQuZXZpZGVuY2UgJiYgeyBldmlkZW5jZTogZXZlbnQuZXZpZGVuY2UgfSksXG4gICAgfSk7XG4gICAgdGhpcy5wZW5kaW5nLnB1c2goeyBkZWNpZGVySWQsIHJlbWFpbmluZzogZXZlbnQuc2VsZWN0ZWQubGVuZ3RoIH0pO1xuICB9XG5cbiAgb25TdGFnZUV4ZWN1dGVkKGV2ZW50OiBGbG93U3RhZ2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGN0eCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ7XG4gICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICB0aGlzLnJlc2V0SWZOZXdSdW4oY3R4LnJ1bklkKTtcblxuICAgIGNvbnN0IHsgcnVudGltZVN0YWdlSWQsIHBhcmVudFJ1bnRpbWVTdGFnZUlkIH0gPSBjdHg7XG4gICAgaWYgKHBhcmVudFJ1bnRpbWVTdGFnZUlkKSB7XG4gICAgICB0aGlzLnBhcmVudE9mLnNldChydW50aW1lU3RhZ2VJZCwgcGFyZW50UnVudGltZVN0YWdlSWQpO1xuICAgICAgdGhpcy5jb25zdW1lUGVuZGluZ1Nsb3QocnVudGltZVN0YWdlSWQsIHBhcmVudFJ1bnRpbWVTdGFnZUlkLCAvKiByZWdpc3RlciAqLyB0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQSBicmFuY2ggdGhhdCB0aHJvd3MgbmV2ZXIgZmlyZXMgYG9uU3RhZ2VFeGVjdXRlZGAg4oCUIHdpdGhvdXQgdGhpcyBob29rXG4gICAqIGl0cyBwZW5kaW5nIHNsb3Qgd291bGQgbGVhayBhbmQgdGhlIHBvc3QtZmFuLW91dCBjb252ZXJnZW5jZSBzdGFnZVxuICAgKiAod2hvc2UgY29udGV4dCBhbHNvIGNoYWlucyB0byB0aGUgc2VsZWN0b3IpIHdvdWxkIGJlIG1pc2F0dHJpYnV0ZWQgYXNcbiAgICogYSBicmFuY2ggZW50cnkgdW5kZXIgYmVzdC1lZmZvcnQgKGBmYWlsRmFzdDogZmFsc2VgKSBmYW4tb3V0cy5cbiAgICovXG4gIG9uRXJyb3IoZXZlbnQ6IEZsb3dFcnJvckV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY3R4ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dDtcbiAgICBpZiAoIWN0eCkgcmV0dXJuO1xuICAgIHRoaXMucmVzZXRJZk5ld1J1bihjdHgucnVuSWQpO1xuICAgIGlmIChjdHgucGFyZW50UnVudGltZVN0YWdlSWQpIHtcbiAgICAgIC8vIFJlY29yZCB0aGUgY2hhaW4gQU5EIGF0dHJpYnV0ZSB0aGUgZmFpbGVkIHN0YWdlIHRvIGl0cyBkZWNpc2lvbiDigJRcbiAgICAgIC8vIHRoZSBzdGFnZSBSQU4gKGFuZCBtYXkgaGF2ZSBjb21taXR0ZWQgcGFydGlhbCB3cml0ZXMpIGJlY2F1c2UgdGhlXG4gICAgICAvLyBkZWNpc2lvbiBjaG9zZSBpdDsgZmFpbGluZyBhZnRlcndhcmRzIGRvZXNuJ3QgdW5kbyB0aGUgZGVwZW5kZW5jeS5cbiAgICAgIHRoaXMucGFyZW50T2Yuc2V0KGN0eC5ydW50aW1lU3RhZ2VJZCwgY3R4LnBhcmVudFJ1bnRpbWVTdGFnZUlkKTtcbiAgICAgIHRoaXMuY29uc3VtZVBlbmRpbmdTbG90KGN0eC5ydW50aW1lU3RhZ2VJZCwgY3R4LnBhcmVudFJ1bnRpbWVTdGFnZUlkLCAvKiByZWdpc3RlciAqLyB0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvLyDilIDilIAgUXVlcmllcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogUmVzb2x2ZSB0aGUgTkVBUkVTVCBnb3Zlcm5pbmcgZGVjaXNpb24gZm9yIGFuIGV4ZWN1dGlvbiBzdGVwOiB3YWxrcyB0aGVcbiAgICogcnVudGltZSBhbmNlc3RvciBjaGFpbiAodGhlIHN0ZXAgaXRzZWxmIGZpcnN0KSB1bnRpbCBpdCBoaXRzIGFcbiAgICogcmVnaXN0ZXJlZCBicmFuY2ggZW50cnkuIGB1bmRlZmluZWRgIHdoZW4gdGhlIHN0ZXAgaXMgbm90IGRvd25zdHJlYW0gb2ZcbiAgICogYW55IHJlY29yZGVkIGRlY2lzaW9uLlxuICAgKi9cbiAgbG9va3VwKHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiBDb250cm9sRGVwZW5kZW5jeSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGxldCBjdXI6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHJ1bnRpbWVTdGFnZUlkO1xuICAgIHdoaWxlIChjdXIgIT09IHVuZGVmaW5lZCAmJiAhc2Vlbi5oYXMoY3VyKSkge1xuICAgICAgc2Vlbi5hZGQoY3VyKTtcbiAgICAgIGNvbnN0IGRlY2lkZXJJZCA9IHRoaXMuYnJhbmNoRW50cnlUb0RlY2lzaW9uLmdldChjdXIpO1xuICAgICAgaWYgKGRlY2lkZXJJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuZGVjaXNpb25zLmdldChkZWNpZGVySWQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRlY2lkZXJJZCxcbiAgICAgICAgICAuLi4ocmVjb3JkPy5ydWxlTGFiZWwgIT09IHVuZGVmaW5lZCAmJiB7IGxhYmVsOiByZWNvcmQucnVsZUxhYmVsIH0pLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY3VyID0gdGhpcy5wYXJlbnRPZi5nZXQoY3VyKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBUaGUgbG9va3VwIGFzIGEgYmFyZSBmdW5jdGlvbiDigJQgcGx1ZyBpbnRvIGBjYXVzYWxDaGFpbiguLi4sIHsgY29udHJvbERlcHMgfSlgLiAqL1xuICBhc0xvb2t1cCgpOiBDb250cm9sRGVwTG9va3VwIHtcbiAgICByZXR1cm4gKHJ1bnRpbWVTdGFnZUlkKSA9PiB0aGlzLmxvb2t1cChydW50aW1lU3RhZ2VJZCk7XG4gIH1cblxuICAvKiogQWxsIGRlY2lzaW9ucyByZWNvcmRlZCBmb3IgdGhlIGN1cnJlbnQgcnVuLCBpbiBldmVudCBvcmRlci4gKi9cbiAgZ2V0RGVjaXNpb25zKCk6IENvbnRyb2xEZWNpc2lvblJlY29yZFtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuZGVjaXNpb25zLnZhbHVlcygpXTtcbiAgfVxuXG4gIC8qKiBSZXNldCBhbGwgc3RhdGUgKGFsc28gaGFwcGVucyBhdXRvbWF0aWNhbGx5IG9uIHJ1bklkIGNoYW5nZSkuICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMucGFyZW50T2YuY2xlYXIoKTtcbiAgICB0aGlzLmRlY2lzaW9ucy5jbGVhcigpO1xuICAgIHRoaXMuYnJhbmNoRW50cnlUb0RlY2lzaW9uLmNsZWFyKCk7XG4gICAgdGhpcy5wZW5kaW5nID0gW107XG4gICAgdGhpcy5jb25zdW1lZFNsb3RzLmNsZWFyKCk7XG4gIH1cblxuICAvLyDilIDilIAgSW50ZXJuYWxzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBDb252ZW50aW9uIDQ6IGEgbmV3IHJ1bklkIG1lYW5zIGEgbmV3IHJ1biDigJQgcmVzZXQgdHJhbnNpZW50IHN0YXRlLiAqL1xuICBwcml2YXRlIHJlc2V0SWZOZXdSdW4ocnVuSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmIChydW5JZCA9PT0gdGhpcy5sYXN0UnVuSWQpIHJldHVybjtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgdGhpcy5sYXN0UnVuSWQgPSBydW5JZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBgcGFyZW50UnVudGltZVN0YWdlSWRgIGlzIGEgZGVjaWRlciB3aXRoIGFuIHVubWF0Y2hlZCBwZW5kaW5nIHNsb3QsXG4gICAqIGNvbnN1bWUgb25lLiBgcmVnaXN0ZXJgIGNvbnRyb2xzIHdoZXRoZXIgdGhlIHN0YWdlIGlzIHJlY29yZGVkIGFzIGFcbiAgICogYnJhbmNoIGVudHJ5IChzdGFnZSBleGVjdXRlZC9lcnJvcmVkKSDigJQgYm90aCBwYXRocyBjb25zdW1lIHRoZSBzbG90IHNvXG4gICAqIGNvdW50cyBzdGF5IGV4YWN0IGV2ZW4gd2hlbiBhIHN0YWdlIHByb2R1Y2VzIGJvdGggZXZlbnRzLlxuICAgKi9cbiAgcHJpdmF0ZSBjb25zdW1lUGVuZGluZ1Nsb3QocnVudGltZVN0YWdlSWQ6IHN0cmluZywgcGFyZW50UnVudGltZVN0YWdlSWQ6IHN0cmluZywgcmVnaXN0ZXI6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAocnVudGltZVN0YWdlSWQgPT09IHBhcmVudFJ1bnRpbWVTdGFnZUlkKSByZXR1cm47IC8vIHN5bnRoZXRpYyBzZWxmLWV2ZW50c1xuICAgIGlmICh0aGlzLmNvbnN1bWVkU2xvdHMuaGFzKHJ1bnRpbWVTdGFnZUlkKSkgcmV0dXJuO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBlbmRpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHAgPSB0aGlzLnBlbmRpbmdbaV07XG4gICAgICBpZiAocC5kZWNpZGVySWQgIT09IHBhcmVudFJ1bnRpbWVTdGFnZUlkKSBjb250aW51ZTtcblxuICAgICAgdGhpcy5jb25zdW1lZFNsb3RzLmFkZChydW50aW1lU3RhZ2VJZCk7XG4gICAgICBpZiAocmVnaXN0ZXIpIHRoaXMuYnJhbmNoRW50cnlUb0RlY2lzaW9uLnNldChydW50aW1lU3RhZ2VJZCwgcC5kZWNpZGVySWQpO1xuICAgICAgcC5yZW1haW5pbmctLTtcbiAgICAgIGlmIChwLnJlbWFpbmluZyA8PSAwKSB0aGlzLnBlbmRpbmcuc3BsaWNlKGksIDEpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoZSBkZWNpZGUoKSBydWxlIGxhYmVsIHRoYXQgcHJvZHVjZWQgdGhlIGRlY2lzaW9uOiB0aGUgbWF0Y2hlZCBydWxlXG4gKiBtYXBwaW5nIHRvIHRoZSBjaG9zZW4gYnJhbmNoIChmaXJzdCBtYXRjaGVkIHJ1bGUgYXMgZmFsbGJhY2spLlxuICovXG5mdW5jdGlvbiBtYXRjaGVkUnVsZUxhYmVsKGV2aWRlbmNlOiBEZWNpc2lvbkV2aWRlbmNlIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFldmlkZW5jZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgcnVsZSA9XG4gICAgZXZpZGVuY2UucnVsZXMuZmluZCgocikgPT4gci5tYXRjaGVkICYmIHIuYnJhbmNoID09PSBldmlkZW5jZS5jaG9zZW4pID8/IGV2aWRlbmNlLnJ1bGVzLmZpbmQoKHIpID0+IHIubWF0Y2hlZCk7XG4gIHJldHVybiBydWxlPy5sYWJlbDtcbn1cbiJdfQ==
234
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJvbERlcFJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9Db250cm9sRGVwUmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzREc7OztBQXlDSCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFFakI7O0dBRUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxVQUFxQyxFQUFFO0lBQ3hFLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRkQsZ0RBRUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxrQkFBa0I7SUFDcEIsRUFBRSxDQUFTO0lBRXBCLDBFQUEwRTtJQUN6RCxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDdEQsMkRBQTJEO0lBQzFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBaUMsQ0FBQztJQUN0RSxzRUFBc0U7SUFDckQscUJBQXFCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDbkUsaUVBQWlFO0lBQ3pELE9BQU8sR0FBc0IsRUFBRSxDQUFDO0lBQ3hDLHVFQUF1RTtJQUN0RCxhQUFhLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUNuRCxnRUFBZ0U7SUFDeEQsU0FBUyxDQUFVO0lBRTNCLFlBQVksVUFBcUMsRUFBRTtRQUNqRCxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUVELHlFQUF5RTtJQUV6RSxVQUFVLENBQUMsS0FBd0I7UUFDakMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO1FBQ25DLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTztRQUNqQixJQUFJLENBQUMs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QUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxRSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsQ0FBQyxTQUFTLElBQUksQ0FBQztnQkFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEQsT0FBTztRQUNULENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUEvSkQsZ0RBK0pDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxnQkFBZ0IsQ0FBQyxRQUFzQztJQUM5RCxJQUFJLENBQUMsUUFBUTtRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2hDLE1BQU0sSUFBSSxHQUNSLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakgsT0FBTyxJQUFJLEVBQUUsS0FBSyxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbnRyb2xEZXBSZWNvcmRlciDigJQgY29udHJvbC1kZXBlbmRlbmNlIHRyYWNraW5nIGZyb20gZmxvdyBldmVudHMgKFJGQy0wMDMgRDUpLlxuICpcbiAqIFRoZSBnYXAgdGhpcyBmaWxsczpcbiAqICAgVGhlIGJhY2t0cmFja2VyJ3MgYGNvbnRyb2xEZXBzYCBvcHRpb24gKEQzKSBuZWVkcyBhIGBDb250cm9sRGVwTG9va3VwYDpcbiAqICAgXCJ3aGljaCBkZWNpZGVyIGV4ZWN1dGlvbiBhbGxvd2VkIHRoaXMgc3RhZ2UgdG8gcnVuP1wiIFRoZSBlbmdpbmUga25vd3NcbiAqICAgdGhpcyBkdXJpbmcgdHJhdmVyc2FsIGJ1dCB0aGUgY29tbWl0IGxvZyBkb2Vzbid0IHJlY29yZCBpdCDigJQgY29udHJvbFxuICogICBmbG93IGlzIGEgRmxvd1JlY29yZGVyIGNvbmNlcm4uIFRoaXMgcmVjb3JkZXIgaXMgdGhlIHN0YW5kYXJkIHByb2R1Y2VyOlxuICogICBvbmUgc3Vic2NyaXB0aW9uLCBvbmUgbG9va3VwLCBwbHVnIGl0IHN0cmFpZ2h0IGludG8gYGNhdXNhbENoYWluYC5cbiAqXG4gKiBIb3cgaXQgd29ya3Mg4oCUIHR3byBjb3JyZWxhdGlvbiBzdHJ1Y3R1cmVzIGJ1aWx0IGR1cmluZyB0cmF2ZXJzYWw6XG4gKlxuICogICAxLiBgcGFyZW50T2ZgIOKAlCB0aGUgcnVudGltZSBhbmNlc3RvciBjaGFpbiwgZnJvbSBldmVyeSBzdGFnZSBldmVudCdzXG4gKiAgICAgIGB0cmF2ZXJzYWxDb250ZXh0LnBhcmVudFJ1bnRpbWVTdGFnZUlkYCAoUkZDLTAwMyBEMSkuIENyb3NzZXNcbiAqICAgICAgc3ViZmxvdyBib3VuZGFyaWVzOyBsb29wIHJlLWVudHJpZXMgc3RheSB1bmFtYmlndW91cyBiZWNhdXNlXG4gKiAgICAgIHJ1bnRpbWUgaWRzIGRpZmZlciBwZXIgaXRlcmF0aW9uLlxuICpcbiAqICAgMi4gYGJyYW5jaEVudHJ5VG9EZWNpc2lvbmAg4oCUIG9uIGBvbkRlY2lzaW9uYC9gb25TZWxlY3RlZGAgdGhlIGRlY2lzaW9uXG4gKiAgICAgIGlzIHJlY29yZGVkIGFzIFBFTkRJTkc7IHRoZSBuZXh0IHN0YWdlKHMpIGV4ZWN1dGVkIHdob3NlXG4gKiAgICAgIGBwYXJlbnRSdW50aW1lU3RhZ2VJZGAgSVMgdGhlIGRlY2lkZXIncyBydW50aW1lU3RhZ2VJZCBhcmUgaXRzXG4gKiAgICAgIGJyYW5jaCBlbnRyaWVzICgxIGZvciBhIGRlY2lkZXIsIE4gPSBzZWxlY3RlZC5sZW5ndGggZm9yIGFcbiAqICAgICAgc2VsZWN0b3IpLiBDb3JyZWxhdGlvbiBpcyBieSBwYXJlbnQtaWQgKyBjb3VudCwgTk9UIGJ5IHN0YWdlIG5hbWUg4oCUXG4gKiAgICAgIHN1YmZsb3ctbW91bnQgZXZlbnRzIGNhcnJ5IHBhdGgtcHJlZml4ZWQgaW5uZXItcm9vdCBuYW1lcyB0aGF0XG4gKiAgICAgIGRvbid0IG1hdGNoIGBGbG93RGVjaXNpb25FdmVudC5jaG9zZW5gLCBhbmQgc2VsZWN0b3JzIGVtaXQgYVxuICogICAgICBzeW50aGV0aWMgZm9yayBldmVudCBzaGFyaW5nIHRoZSBzZWxlY3RvcidzIG93biBydW50aW1lU3RhZ2VJZFxuICogICAgICAoZXhjbHVkZWQgdmlhIHRoZSBzZWxmLWlkIGd1YXJkKS4gQSBicmFuY2ggdGhhdCBUSFJPV1MgYmVmb3JlXG4gKiAgICAgIGNvbXBsZXRpbmcgY29uc3VtZXMgaXRzIHNsb3QgdmlhIGBvbkVycm9yYCwgc28gdGhlIHBvc3QtZmFuLW91dFxuICogICAgICBjb252ZXJnZW5jZSBzdGFnZSBpcyBuZXZlciBtaXNhdHRyaWJ1dGVkIGFzIGEgYnJhbmNoIGVudHJ5LlxuICpcbiAqICAgYGxvb2t1cChydW50aW1lU3RhZ2VJZClgIHRoZW4gd2Fsa3MgdGhlIGFuY2VzdG9yIGNoYWluIGZyb20gdGhlIHN0YWdlXG4gKiAgIHVwd2FyZDsgdGhlIGZpcnN0IGFuY2VzdG9yIChvciB0aGUgc3RhZ2UgaXRzZWxmKSByZWdpc3RlcmVkIGFzIGFcbiAqICAgYnJhbmNoIGVudHJ5IHlpZWxkcyBpdHMgZ292ZXJuaW5nIGRlY2lkZXIg4oCUIHRoZSBORUFSRVNUIGRlY2lzaW9uLlxuICogICBOZXN0ZWQgZGVjaXNpb25zIGNvbXBvc2UgbmF0dXJhbGx5OiB0aGUgYmFja3RyYWNrZXIgZXhwYW5kcyB0aGVcbiAqICAgZGVjaWRlciBub2RlIGFuZCBhc2tzIGFnYWluLlxuICpcbiAqIENvbnZlbnRpb24gNDogc3RhdGUgcmVzZXRzIHdoZW4gYHRyYXZlcnNhbENvbnRleHQucnVuSWRgIGNoYW5nZXMg4oCUIGVhY2hcbiAqIHJ1biAoYW5kIGVhY2ggcmVzdW1lLCB3aGljaCBtaW50cyBhIGZyZXNoIHJ1bklkKSBzdGFydHMgY2xlYW4uIENvbnRyb2xcbiAqIGNoYWlucyB0aGVyZWZvcmUgZG8gTk9UIHN1cnZpdmUgYSBwYXVzZS9yZXN1bWUgYm91bmRhcnk6IHBvc3QtcmVzdW1lXG4gKiBzdGFnZXMgY2Fubm90IHJlc29sdmUgcHJlLXBhdXNlIGRlY2lzaW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgY29udHJvbERlcFJlY29yZGVyIH0gZnJvbSAnZm9vdHByaW50anMvdHJhY2UnO1xuaW1wb3J0IHsgY2F1c2FsQ2hhaW4gfSBmcm9tICdmb290dHJhY2UnO1xuICpcbiAqIGNvbnN0IGN0cmwgPSBjb250cm9sRGVwUmVjb3JkZXIoKTtcbiAqIGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIoY3RybCk7IC8vIGF1dG8tcm91dGVzIHRvIEZsb3dSZWNvcmRlciBjaGFubmVsXG4gKlxuICogYXdhaXQgZXhlY3V0b3IucnVuKHsgaW5wdXQgfSk7XG4gKlxuICogY29uc3QgZGFnID0gY2F1c2FsQ2hhaW4oY29tbWl0TG9nLCAnYXBwcm92ZSMyJywga2V5c1JlYWQsIHtcbiAqICAgY29udHJvbERlcHM6IGN0cmwuYXNMb29rdXAoKSxcbiAqIH0pO1xuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb250cm9sRGVwZW5kZW5jeSwgQ29udHJvbERlcExvb2t1cCB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5cbmltcG9ydCB0eXBlIHsgRGVjaXNpb25FdmlkZW5jZSwgU2VsZWN0aW9uRXZpZGVuY2UgfSBmcm9tICcuLi9kZWNpZGUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1NlbGVjdGVkRXZlbnQsXG4gIEZsb3dTdGFnZUV2ZW50LFxufSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcblxuLyoqIE9uZSByZWNvcmRlZCBkZWNpc2lvbi9zZWxlY3Rpb24gZXZlbnQgKFJGQy0wMDMgRDUpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250cm9sRGVjaXNpb25SZWNvcmQge1xuICAvKiogcnVudGltZVN0YWdlSWQgb2YgdGhlIGRlY2lkZXIvc2VsZWN0b3IgZXhlY3V0aW9uIHN0ZXAuICovXG4gIGRlY2lkZXJSdW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICAvKiogQ2hvc2VuIGJyYW5jaCBkaXNwbGF5IG5hbWUgKGRlY2lkZXIpIG9yIHNlbGVjdGVkIG5hbWVzIChzZWxlY3RvcikuICovXG4gIGNob3Nlbjogc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBTdHJ1Y3R1cmVkIGV2aWRlbmNlIGZyb20gZGVjaWRlKCkvc2VsZWN0KCksIHdoZW4gdGhlIHN0YWdlIHVzZWQgdGhlbS4gKi9cbiAgZXZpZGVuY2U/OiBEZWNpc2lvbkV2aWRlbmNlIHwgU2VsZWN0aW9uRXZpZGVuY2U7XG4gIC8qKlxuICAgKiBUaGUgZGVjaWRlKCkgcnVsZSBsYWJlbCB0aGF0IHByb2R1Y2VkIHRoZSBkZWNpc2lvbiAoZS5nLiAnR29vZCBjcmVkaXQnKS5cbiAgICogRGVjaWRlcnMgb25seSDigJQgYSBzZWxlY3RvciBwaWNrcyBOIGJyYW5jaGVzIGFuZCBubyBzaW5nbGUgbGFiZWxcbiAgICogYXR0cmlidXRlcyB0byBhbGwgb2YgdGhlbSAoaW5zcGVjdCBgZXZpZGVuY2VgIGluc3RlYWQpLlxuICAgKi9cbiAgcnVsZUxhYmVsPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyb2xEZXBSZWNvcmRlck9wdGlvbnMge1xuICAvKiogUmVjb3JkZXIgaWQuIERlZmF1bHRzIHRvIGBjb250cm9sLWRlcHMtTmAgKGF1dG8taW5jcmVtZW50ZWQpLiAqL1xuICBpZD86IHN0cmluZztcbn1cblxuLyoqIEEgZGVjaXNpb24gYXdhaXRpbmcgYnJhbmNoLWVudHJ5IGNvcnJlbGF0aW9uLiAqL1xuaW50ZXJmYWNlIFBlbmRpbmdEZWNpc2lvbiB7XG4gIGRlY2lkZXJJZDogc3RyaW5nO1xuICAvKiogSG93IG1hbnkgYnJhbmNoIGVudHJpZXMgYXJlIHN0aWxsIGV4cGVjdGVkIChkZWNpZGVyOiAxLCBzZWxlY3RvcjogTikuICovXG4gIHJlbWFpbmluZzogbnVtYmVyO1xufVxuXG5sZXQgX2NvdW50ZXIgPSAwO1xuXG4vKipcbiAqIEZhY3Rvcnkg4oCUIG1hdGNoZXMgdGhlIGB0b3BvbG9neVJlY29yZGVyKClgIC8gYGluT3V0UmVjb3JkZXIoKWAgc3R5bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250cm9sRGVwUmVjb3JkZXIob3B0aW9uczogQ29udHJvbERlcFJlY29yZGVyT3B0aW9ucyA9IHt9KTogQ29udHJvbERlcFJlY29yZGVyIHtcbiAgcmV0dXJuIG5ldyBDb250cm9sRGVwUmVjb3JkZXIob3B0aW9ucyk7XG59XG5cbi8qKlxuICogU3RhdGVmdWwgYWNjdW11bGF0b3IgdGhhdCB3YXRjaGVzIEZsb3dSZWNvcmRlciBldmVudHMgYW5kIGFuc3dlcnNcbiAqIFwid2hpY2ggZGVjaXNpb24gYWxsb3dlZCB0aGlzIHN0YWdlIHRvIHJ1bj9cIiBBdHRhY2ggdmlhXG4gKiBgZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihyZWNvcmRlcilgIChvciBgYXR0YWNoRmxvd1JlY29yZGVyYCkuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb250cm9sRGVwUmVjb3JkZXIgaW1wbGVtZW50cyBGbG93UmVjb3JkZXIge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKiBSdW50aW1lIGFuY2VzdG9yIGNoYWluOiBydW50aW1lU3RhZ2VJZCDihpIgcGFyZW50UnVudGltZVN0YWdlSWQgKEQxKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnRPZiA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gIC8qKiBSZWNvcmRlZCBkZWNpc2lvbnMsIGtleWVkIGJ5IGRlY2lkZXIgcnVudGltZVN0YWdlSWQuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVjaXNpb25zID0gbmV3IE1hcDxzdHJpbmcsIENvbnRyb2xEZWNpc2lvblJlY29yZD4oKTtcbiAgLyoqIEJyYW5jaC1lbnRyeSBydW50aW1lU3RhZ2VJZCDihpIgZ292ZXJuaW5nIGRlY2lkZXIgcnVudGltZVN0YWdlSWQuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYnJhbmNoRW50cnlUb0RlY2lzaW9uID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgLyoqIERlY2lzaW9ucyB3aG9zZSBicmFuY2ggZW50cmllcyBoYXZlIG5vdCBhbGwgYmVlbiBzZWVuIHlldC4gKi9cbiAgcHJpdmF0ZSBwZW5kaW5nOiBQZW5kaW5nRGVjaXNpb25bXSA9IFtdO1xuICAvKiogU3RhZ2UgaWRzIHRoYXQgYWxyZWFkeSBjb25zdW1lZCBhIHBlbmRpbmcgc2xvdCAoZW50cnkgT1IgZXJyb3IpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbnN1bWVkU2xvdHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgLyoqIENvbnZlbnRpb24gNCDigJQgcnVuSWQgb2YgdGhlIHJ1biBjdXJyZW50bHkgYmVpbmcgcmVjb3JkZWQuICovXG4gIHByaXZhdGUgbGFzdFJ1bklkPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENvbnRyb2xEZXBSZWNvcmRlck9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuaWQgPSBvcHRpb25zLmlkID8/IGBjb250cm9sLWRlcHMtJHsrK19jb3VudGVyfWA7XG4gIH1cblxuICAvLyDilIDilIAgRmxvd1JlY29yZGVyIGhvb2tzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIG9uRGVjaXNpb24oZXZlbnQ6IEZsb3dEZWNpc2lvbkV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY3R4ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dDtcbiAgICBpZiAoIWN0eCkgcmV0dXJuO1xuICAgIHRoaXMucmVzZXRJZk5ld1J1bihjdHgucnVuSWQpO1xuXG4gICAgY29uc3QgZGVjaWRlcklkID0gY3R4LnJ1bnRpbWVTdGFnZUlkO1xuICAgIGNvbnN0IHJ1bGVMYWJlbCA9IG1hdGNoZWRSdWxlTGFiZWwoZXZlbnQuZXZpZGVuY2UpO1xuICAgIHRoaXMuZGVjaXNpb25zLnNldChkZWNpZGVySWQsIHtcbiAgICAgIGRlY2lkZXJSdW50aW1lU3RhZ2VJZDogZGVjaWRlcklkLFxuICAgICAgY2hvc2VuOiBldmVudC5jaG9zZW4sXG4gICAgICAuLi4oZXZlbnQuZXZpZGVuY2UgJiYgeyBldmlkZW5jZTogZXZlbnQuZXZpZGVuY2UgfSksXG4gICAgICAuLi4ocnVsZUxhYmVsICE9PSB1bmRlZmluZWQgJiYgeyBydWxlTGFiZWwgfSksXG4gICAgfSk7XG4gICAgdGhpcy5wZW5kaW5nLnB1c2goeyBkZWNpZGVySWQsIHJlbWFpbmluZzogMSB9KTtcbiAgfVxuXG4gIG9uU2VsZWN0ZWQoZXZlbnQ6IEZsb3dTZWxlY3RlZEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY3R4ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dDtcbiAgICBpZiAoIWN0eCkgcmV0dXJuO1xuICAgIHRoaXMucmVzZXRJZk5ld1J1bihjdHgucnVuSWQpO1xuICAgIGlmIChldmVudC5zZWxlY3RlZC5sZW5ndGggPT09IDApIHJldHVybjsgLy8gbm90aGluZyBzZWxlY3RlZCDihpIgbm90aGluZyBnb3Zlcm5lZFxuXG4gICAgY29uc3QgZGVjaWRlcklkID0gY3R4LnJ1bnRpbWVTdGFnZUlkO1xuICAgIHRoaXMuZGVjaXNpb25zLnNldChkZWNpZGVySWQsIHtcbiAgICAgIGRlY2lkZXJSdW50aW1lU3RhZ2VJZDogZGVjaWRlcklkLFxuICAgICAgY2hvc2VuOiBbLi4uZXZlbnQuc2VsZWN0ZWRdLFxuICAgICAgLi4uKGV2ZW50LmV2aWRlbmNlICYmIHsgZXZpZGVuY2U6IGV2ZW50LmV2aWRlbmNlIH0pLFxuICAgIH0pO1xuICAgIHRoaXMucGVuZGluZy5wdXNoKHsgZGVjaWRlcklkLCByZW1haW5pbmc6IGV2ZW50LnNlbGVjdGVkLmxlbmd0aCB9KTtcbiAgfVxuXG4gIG9uU3RhZ2VFeGVjdXRlZChldmVudDogRmxvd1N0YWdlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdHggPSBldmVudC50cmF2ZXJzYWxDb250ZXh0O1xuICAgIGlmICghY3R4KSByZXR1cm47XG4gICAgdGhpcy5yZXNldElmTmV3UnVuKGN0eC5ydW5JZCk7XG5cbiAgICBjb25zdCB7IHJ1bnRpbWVTdGFnZUlkLCBwYXJlbnRSdW50aW1lU3RhZ2VJZCB9ID0gY3R4O1xuICAgIGlmIChwYXJlbnRSdW50aW1lU3RhZ2VJZCkge1xuICAgICAgdGhpcy5wYXJlbnRPZi5zZXQocnVudGltZVN0YWdlSWQsIHBhcmVudFJ1bnRpbWVTdGFnZUlkKTtcbiAgICAgIHRoaXMuY29uc3VtZVBlbmRpbmdTbG90KHJ1bnRpbWVTdGFnZUlkLCBwYXJlbnRSdW50aW1lU3RhZ2VJZCwgLyogcmVnaXN0ZXIgKi8gdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEEgYnJhbmNoIHRoYXQgdGhyb3dzIG5ldmVyIGZpcmVzIGBvblN0YWdlRXhlY3V0ZWRgIOKAlCB3aXRob3V0IHRoaXMgaG9va1xuICAgKiBpdHMgcGVuZGluZyBzbG90IHdvdWxkIGxlYWsgYW5kIHRoZSBwb3N0LWZhbi1vdXQgY29udmVyZ2VuY2Ugc3RhZ2VcbiAgICogKHdob3NlIGNvbnRleHQgYWxzbyBjaGFpbnMgdG8gdGhlIHNlbGVjdG9yKSB3b3VsZCBiZSBtaXNhdHRyaWJ1dGVkIGFzXG4gICAqIGEgYnJhbmNoIGVudHJ5IHVuZGVyIGJlc3QtZWZmb3J0IChgZmFpbEZhc3Q6IGZhbHNlYCkgZmFuLW91dHMuXG4gICAqL1xuICBvbkVycm9yKGV2ZW50OiBGbG93RXJyb3JFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGN0eCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ7XG4gICAgaWYgKCFjdHgpIHJldHVybjtcbiAgICB0aGlzLnJlc2V0SWZOZXdSdW4oY3R4LnJ1bklkKTtcbiAgICBpZiAoY3R4LnBhcmVudFJ1bnRpbWVTdGFnZUlkKSB7XG4gICAgICAvLyBSZWNvcmQgdGhlIGNoYWluIEFORCBhdHRyaWJ1dGUgdGhlIGZhaWxlZCBzdGFnZSB0byBpdHMgZGVjaXNpb24g4oCUXG4gICAgICAvLyB0aGUgc3RhZ2UgUkFOIChhbmQgbWF5IGhhdmUgY29tbWl0dGVkIHBhcnRpYWwgd3JpdGVzKSBiZWNhdXNlIHRoZVxuICAgICAgLy8gZGVjaXNpb24gY2hvc2UgaXQ7IGZhaWxpbmcgYWZ0ZXJ3YXJkcyBkb2Vzbid0IHVuZG8gdGhlIGRlcGVuZGVuY3kuXG4gICAgICB0aGlzLnBhcmVudE9mLnNldChjdHgucnVudGltZVN0YWdlSWQsIGN0eC5wYXJlbnRSdW50aW1lU3RhZ2VJZCk7XG4gICAgICB0aGlzLmNvbnN1bWVQZW5kaW5nU2xvdChjdHgucnVudGltZVN0YWdlSWQsIGN0eC5wYXJlbnRSdW50aW1lU3RhZ2VJZCwgLyogcmVnaXN0ZXIgKi8gdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIFF1ZXJpZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdGhlIE5FQVJFU1QgZ292ZXJuaW5nIGRlY2lzaW9uIGZvciBhbiBleGVjdXRpb24gc3RlcDogd2Fsa3MgdGhlXG4gICAqIHJ1bnRpbWUgYW5jZXN0b3IgY2hhaW4gKHRoZSBzdGVwIGl0c2VsZiBmaXJzdCkgdW50aWwgaXQgaGl0cyBhXG4gICAqIHJlZ2lzdGVyZWQgYnJhbmNoIGVudHJ5LiBgdW5kZWZpbmVkYCB3aGVuIHRoZSBzdGVwIGlzIG5vdCBkb3duc3RyZWFtIG9mXG4gICAqIGFueSByZWNvcmRlZCBkZWNpc2lvbi5cbiAgICovXG4gIGxvb2t1cChydW50aW1lU3RhZ2VJZDogc3RyaW5nKTogQ29udHJvbERlcGVuZGVuY3kgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBsZXQgY3VyOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBydW50aW1lU3RhZ2VJZDtcbiAgICB3aGlsZSAoY3VyICE9PSB1bmRlZmluZWQgJiYgIXNlZW4uaGFzKGN1cikpIHtcbiAgICAgIHNlZW4uYWRkKGN1cik7XG4gICAgICBjb25zdCBkZWNpZGVySWQgPSB0aGlzLmJyYW5jaEVudHJ5VG9EZWNpc2lvbi5nZXQoY3VyKTtcbiAgICAgIGlmIChkZWNpZGVySWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCByZWNvcmQgPSB0aGlzLmRlY2lzaW9ucy5nZXQoZGVjaWRlcklkKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkZWNpZGVySWQsXG4gICAgICAgICAgLi4uKHJlY29yZD8ucnVsZUxhYmVsICE9PSB1bmRlZmluZWQgJiYgeyBsYWJlbDogcmVjb3JkLnJ1bGVMYWJlbCB9KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGN1ciA9IHRoaXMucGFyZW50T2YuZ2V0KGN1cik7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogVGhlIGxvb2t1cCBhcyBhIGJhcmUgZnVuY3Rpb24g4oCUIHBsdWcgaW50byBgY2F1c2FsQ2hhaW4oLi4uLCB7IGNvbnRyb2xEZXBzIH0pYC4gKi9cbiAgYXNMb29rdXAoKTogQ29udHJvbERlcExvb2t1cCB7XG4gICAgcmV0dXJuIChydW50aW1lU3RhZ2VJZCkgPT4gdGhpcy5sb29rdXAocnVudGltZVN0YWdlSWQpO1xuICB9XG5cbiAgLyoqIEFsbCBkZWNpc2lvbnMgcmVjb3JkZWQgZm9yIHRoZSBjdXJyZW50IHJ1biwgaW4gZXZlbnQgb3JkZXIuICovXG4gIGdldERlY2lzaW9ucygpOiBDb250cm9sRGVjaXNpb25SZWNvcmRbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmRlY2lzaW9ucy52YWx1ZXMoKV07XG4gIH1cblxuICAvKiogUmVzZXQgYWxsIHN0YXRlIChhbHNvIGhhcHBlbnMgYXV0b21hdGljYWxseSBvbiBydW5JZCBjaGFuZ2UpLiAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnBhcmVudE9mLmNsZWFyKCk7XG4gICAgdGhpcy5kZWNpc2lvbnMuY2xlYXIoKTtcbiAgICB0aGlzLmJyYW5jaEVudHJ5VG9EZWNpc2lvbi5jbGVhcigpO1xuICAgIHRoaXMucGVuZGluZyA9IFtdO1xuICAgIHRoaXMuY29uc3VtZWRTbG90cy5jbGVhcigpO1xuICB9XG5cbiAgLy8g4pSA4pSAIEludGVybmFscyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogQ29udmVudGlvbiA0OiBhIG5ldyBydW5JZCBtZWFucyBhIG5ldyBydW4g4oCUIHJlc2V0IHRyYW5zaWVudCBzdGF0ZS4gKi9cbiAgcHJpdmF0ZSByZXNldElmTmV3UnVuKHJ1bklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAocnVuSWQgPT09IHRoaXMubGFzdFJ1bklkKSByZXR1cm47XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIHRoaXMubGFzdFJ1bklkID0gcnVuSWQ7XG4gIH1cblxuICAvKipcbiAgICogSWYgYHBhcmVudFJ1bnRpbWVTdGFnZUlkYCBpcyBhIGRlY2lkZXIgd2l0aCBhbiB1bm1hdGNoZWQgcGVuZGluZyBzbG90LFxuICAgKiBjb25zdW1lIG9uZS4gYHJlZ2lzdGVyYCBjb250cm9scyB3aGV0aGVyIHRoZSBzdGFnZSBpcyByZWNvcmRlZCBhcyBhXG4gICAqIGJyYW5jaCBlbnRyeSAoc3RhZ2UgZXhlY3V0ZWQvZXJyb3JlZCkg4oCUIGJvdGggcGF0aHMgY29uc3VtZSB0aGUgc2xvdCBzb1xuICAgKiBjb3VudHMgc3RheSBleGFjdCBldmVuIHdoZW4gYSBzdGFnZSBwcm9kdWNlcyBib3RoIGV2ZW50cy5cbiAgICovXG4gIHByaXZhdGUgY29uc3VtZVBlbmRpbmdTbG90KHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcsIHBhcmVudFJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcsIHJlZ2lzdGVyOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHJ1bnRpbWVTdGFnZUlkID09PSBwYXJlbnRSdW50aW1lU3RhZ2VJZCkgcmV0dXJuOyAvLyBzeW50aGV0aWMgc2VsZi1ldmVudHNcbiAgICBpZiAodGhpcy5jb25zdW1lZFNsb3RzLmhhcyhydW50aW1lU3RhZ2VJZCkpIHJldHVybjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wZW5kaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBwID0gdGhpcy5wZW5kaW5nW2ldO1xuICAgICAgaWYgKHAuZGVjaWRlcklkICE9PSBwYXJlbnRSdW50aW1lU3RhZ2VJZCkgY29udGludWU7XG5cbiAgICAgIHRoaXMuY29uc3VtZWRTbG90cy5hZGQocnVudGltZVN0YWdlSWQpO1xuICAgICAgaWYgKHJlZ2lzdGVyKSB0aGlzLmJyYW5jaEVudHJ5VG9EZWNpc2lvbi5zZXQocnVudGltZVN0YWdlSWQsIHAuZGVjaWRlcklkKTtcbiAgICAgIHAucmVtYWluaW5nLS07XG4gICAgICBpZiAocC5yZW1haW5pbmcgPD0gMCkgdGhpcy5wZW5kaW5nLnNwbGljZShpLCAxKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgZGVjaWRlKCkgcnVsZSBsYWJlbCB0aGF0IHByb2R1Y2VkIHRoZSBkZWNpc2lvbjogdGhlIG1hdGNoZWQgcnVsZVxuICogbWFwcGluZyB0byB0aGUgY2hvc2VuIGJyYW5jaCAoZmlyc3QgbWF0Y2hlZCBydWxlIGFzIGZhbGxiYWNrKS5cbiAqL1xuZnVuY3Rpb24gbWF0Y2hlZFJ1bGVMYWJlbChldmlkZW5jZTogRGVjaXNpb25FdmlkZW5jZSB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghZXZpZGVuY2UpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHJ1bGUgPVxuICAgIGV2aWRlbmNlLnJ1bGVzLmZpbmQoKHIpID0+IHIubWF0Y2hlZCAmJiByLmJyYW5jaCA9PT0gZXZpZGVuY2UuY2hvc2VuKSA/PyBldmlkZW5jZS5ydWxlcy5maW5kKChyKSA9PiByLm1hdGNoZWQpO1xuICByZXR1cm4gcnVsZT8ubGFiZWw7XG59XG4iXX0=
@@ -60,4 +60,4 @@
60
60
  * ```
61
61
  */
62
62
  Object.defineProperty(exports, "__esModule", { value: true });
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW1pdFJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9FbWl0UmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJERyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRW1pdFJlY29yZGVyIOKAlCB0aGUgdGhpcmQgb2JzZXJ2ZXIgY2hhbm5lbCwgYWxvbmdzaWRlIGBTY29wZVJlY29yZGVyYFxuICogKHNjb3BlIGRhdGEtZmxvdykgYW5kIGBGbG93UmVjb3JkZXJgIChjb250cm9sLWZsb3cpLlxuICpcbiAqICMjIFdoeSB0aGlzIGV4aXN0c1xuICpcbiAqIFRoZSBmaXJzdCB0d28gY2hhbm5lbHMgY2FwdHVyZSB3aGF0IHRoZSBMSUJSQVJZIGtub3dzIGFib3V0IOKAlCBzY29wZVxuICogcmVhZHMvd3JpdGVzIGZpcmVkIGJ5IGBzZXRWYWx1ZWAsIGFuZCBjb250cm9sLWZsb3cgZXZlbnRzIGZpcmVkIGJ5IHRoZVxuICogdHJhdmVyc2VyLiBCdXQgKip1c2VyLWVtaXR0ZWQgc3RydWN0dXJlZCBldmVudHMqKiDigJQgdGhpbmdzIGEgc3RhZ2VcbiAqIGZ1bmN0aW9uIHdhbnRzIHRvIHN1cmZhY2UgZm9yIG9ic2VydmFiaWxpdHkgKExMTSB0b2tlbnMsIGJpbGxpbmcgbWV0cmljcyxcbiAqIGF1dGggZGVjaXNpb25zLCBkb21haW4gbWlsZXN0b25lcykg4oCUIGhhdmUgbm93aGVyZSB0byBnbyB0b2RheS4gVGhleSBsYW5kXG4gKiBpbiB1bm9ic2VydmVkIGBEaWFnbm9zdGljQ29sbGVjdG9yYCBzaWRlIGJhZ3MgdGhhdCBubyByZWNvcmRlciB3YXRjaGVzLlxuICpcbiAqIFRoaXMgY2hhbm5lbCBjbG9zZXMgdGhhdCBnYXAuIENvbnN1bWVyIGNhbGxzIGBzY29wZS4kZW1pdChuYW1lLCBwYXlsb2FkKWBcbiAqIGZyb20gaW5zaWRlIGEgc3RhZ2U7IHRoZSBsaWJyYXJ5IGVucmljaGVzIHRoZSBldmVudCB3aXRoIHN0YWdlIGNvbnRleHRcbiAqIGFuZCBkaXNwYXRjaGVzIGl0IHN5bmNocm9ub3VzbHkgdG8gZXZlcnkgYXR0YWNoZWQgYEVtaXRSZWNvcmRlcmAuXG4gKlxuICogIyMgRGVzaWduIHByb3BlcnRpZXNcbiAqXG4gKiAtICoqUGFzcy10aHJvdWdoLCBub3QgYnVmZmVyZWQuKiogWmVybyBhbGxvY2F0aW9uIHdoZW4gbm8gcmVjb3JkZXIgaXNcbiAqICAgYXR0YWNoZWQuIEV2ZW50cyBkZWxpdmVyZWQgc3luY2hyb25vdXNseSwgaW4tb3JkZXIsIGF0IGNhbGwgdGltZS5cbiAqICAgU2FtZSBzZW1hbnRpY3MgYXMgYG9uUmVhZGAvYG9uV3JpdGVgIGFscmVhZHkgdXNlLlxuICogLSAqKkxpYnJhcnktYWdub3N0aWMgdm9jYWJ1bGFyeS4qKiBFdmVudCBuYW1lcyBhcmUgY29uc3VtZXItY2hvc2VuIHN0cmluZ3MuXG4gKiAgIENvbnZlbnRpb246IGhpZXJhcmNoaWNhbCBkb3R0ZWQgbmFtZXMsIGUuZy4gYCdhZ2VudGZvb3RwcmludC5sbG0udG9rZW5zJ2AsXG4gKiAgIGAnbXlhcHAuYmlsbGluZy5zcGVuZCdgLiBMaWJyYXJ5IGVuZm9yY2VzIG5vIHJlZ2lzdHJ5LlxuICogLSAqKkF1dG8tZW5yaWNoZWQgY29udGV4dC4qKiBFdmVyeSBldmVudCBjYXJyaWVzIGBzdGFnZU5hbWVgLFxuICogICBgcnVudGltZVN0YWdlSWRgLCBgc3ViZmxvd1BhdGhgLCBgcGlwZWxpbmVJZGAsIGB0aW1lc3RhbXBgLiBDb25zdW1lcnNcbiAqICAgbmV2ZXIgbmVlZCB0byB0aHJlYWQgZXhlY3V0aW9uIGNvbnRleHQgdGhyb3VnaCB0aGVpciBlbWl0IHBheWxvYWRzLlxuICogLSAqKlJlZGFjdGlvbi1hd2FyZS4qKiBgUmVkYWN0aW9uUG9saWN5LmVtaXRQYXR0ZXJuc2AgbWF0Y2hlcyBldmVudCBuYW1lc1xuICogICBiZWZvcmUgZGlzcGF0Y2gg4oCUIG1hdGNoZWQgZXZlbnRzIGhhdmUgdGhlaXIgcGF5bG9hZCByZXBsYWNlZCB3aXRoXG4gKiAgIGAnW1JFREFDVEVEXSdgIHNvIHNlY3JldHMgY2FuJ3QgbGVhayB2aWEgZW1pdC5cbiAqXG4gKiAjIyBSZWxhdGlvbnNoaXAgdG8gZXhpc3RpbmcgY2hhbm5lbHNcbiAqXG4gKiB8IENoYW5uZWwgICAgICAgICB8IEZpcmVzIHdoZW4gICAgICAgICAgICAgICAgICAgICAgICAgfCBCdWlsdC1pbiBjb25zdW1lcnMgICAgIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCBgU2NvcGVSZWNvcmRlcmAgICAgICB8IHNjb3BlIHJlYWQvd3JpdGUvY29tbWl0ICAgICAgICAgICAgfCBEZWJ1Z1JlY29yZGVyLCBNZXRyaWNSZWNvcmRlciB8XG4gKiB8IGBGbG93UmVjb3JkZXJgICB8IHRyYXZlcnNhbCB0cmFuc2l0aW9ucyAgICAgICAgICAgICAgfCBOYXJyYXRpdmVGbG93UmVjb3JkZXIsIGV0Yy4gfFxuICogfCBgRW1pdFJlY29yZGVyYCAgfCBjb25zdW1lciBjYWxscyBgc2NvcGUuJGVtaXQoLi4uKWAgIHwgKG5vbmUgc2hpcHMgdG9kYXk7IFBoYXNlIDMuWCBhZGRzIE1lbW9yeUVtaXRSZWNvcmRlcikgfFxuICpcbiAqIGBDb21iaW5lZFJlY29yZGVyYCAoZnJvbSBgLi9Db21iaW5lZFJlY29yZGVyLnRzYCkgaW50ZXJzZWN0cyBhbGwgdGhyZWVcbiAqIHZpYSBgUGFydGlhbDwuLi4+YC4gQSBjb25zdW1lciBjYW4gd3JpdGUgT05FIG9iamVjdCBpbXBsZW1lbnRpbmcgYW55XG4gKiBjb21iaW5hdGlvbjsgYGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIocilgIGR1Y2stdHlwZXMgYW5kIHJvdXRlc1xuICogdG8gdGhlIHJpZ2h0IGNoYW5uZWwocykuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHRva2VuTWV0ZXI6IEVtaXRSZWNvcmRlciA9IHtcbiAqICAgaWQ6ICd0b2tlbi1tZXRlcicsXG4gKiAgIG9uRW1pdChldmVudCkge1xuICogICAgIGlmIChldmVudC5uYW1lID09PSAnYWdlbnRmb290cHJpbnQubGxtLnRva2VucycpIHtcbiAqICAgICAgIHRoaXMudG90YWwgKz0gKGV2ZW50LnBheWxvYWQgYXMgeyBpbnB1dDogbnVtYmVyOyBvdXRwdXQ6IG51bWJlciB9KS5pbnB1dDtcbiAqICAgICB9XG4gKiAgIH0sXG4gKiAgIHRvdGFsOiAwLFxuICogfSBhcyBhbnk7XG4gKlxuICogZXhlY3V0b3IuYXR0YWNoRW1pdFJlY29yZGVyKHRva2VuTWV0ZXIpO1xuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBFbWl0U291cmNlUG9zaXRpb24gfSBmcm9tICcuLi9tZW1vcnkvZXZlbnRQb3NpdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlY29yZGVyQnVuZGxlIH0gZnJvbSAnLi9zbmFwc2hvdC5qcyc7XG5cbi8qKlxuICogRXZlbnQgZGVsaXZlcmVkIHRvIGBFbWl0UmVjb3JkZXIub25FbWl0YC5cbiAqXG4gKiBOYW1lICsgcGF5bG9hZCBhcmUgY29uc3VtZXItc3VwcGxpZWQgdmlhIGBzY29wZS4kZW1pdChuYW1lLCBwYXlsb2FkKWAuXG4gKiBFdmVyeXRoaW5nIGVsc2UgaXMgbGlicmFyeS1lbnJpY2hlZCBhdCBkaXNwYXRjaCB0aW1lIGZyb20gdGhlIGN1cnJlbnRcbiAqIHN0YWdlJ3MgZXhlY3V0aW9uIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1pdEV2ZW50IHtcbiAgLyoqXG4gICAqIENvbnN1bWVyLXN1cHBsaWVkIGV2ZW50IG5hbWUuIENvbnZlbnRpb246IGhpZXJhcmNoaWNhbCBkb3R0ZWQgbmFtZXNwYWNlXG4gICAqIChlLmcuIGAnYWdlbnRmb290cHJpbnQubGxtLnRva2VucydgLCBgJ215YXBwLmJpbGxpbmcuc3BlbmQnYCkuIEtlZXBzXG4gICAqIHZvY2FidWxhcmllcyBjb2xsaXNpb24tZnJlZSBhY3Jvc3MgbGlicmFyaWVzL2FwcHMgd2l0aG91dCByZXF1aXJpbmcgYVxuICAgKiBjZW50cmFsIHJlZ2lzdHJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb25zdW1lci1zdXBwbGllZCBwYXlsb2FkLiBTaGFwZSBpcyB1cCB0byB0aGUgY29uc3VtZXIgYW5kIHRoZWlyXG4gICAqIGNvbnZlbnRpb247IGxpYnJhcnkgdHJlYXRzIGl0IGFzIG9wYXF1ZSBhbmQgcGFzc2VzIHRocm91Z2ggdW5jaGFuZ2VkXG4gICAqIChtb2R1bG8gcmVkYWN0aW9uIOKAlCBzZWUgYFJlZGFjdGlvblBvbGljeS5lbWl0UGF0dGVybnNgKS5cbiAgICpcbiAgICogV2hlbiByZWRhY3RlZCwgcmVwbGFjZWQgd2l0aCB0aGUgc3RyaW5nIGAnW1JFREFDVEVEXSdgLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF5bG9hZDogdW5rbm93bjtcblxuICAvKiogTmFtZSBvZiB0aGUgc3RhZ2UgdGhhdCBlbWl0dGVkIHRoaXMgZXZlbnQuICovXG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVbmlxdWUgcGVyLWV4ZWN1dGlvbi1zdGVwIGlkZW50aWZpZXIg4oCUIHRoZSBzYW1lIHZhbHVlIHJlY29yZGVyIGV2ZW50c1xuICAgKiBhbmQgY29tbWl0LWxvZyBlbnRyaWVzIGNhcnJ5LiBTZWUgYHJ1bnRpbWVTdGFnZUlkLnRzYCBmb3IgZm9ybWF0LlxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogU3ViZmxvdyBwYXRoIGZyb20gdGhlIG91dGVybW9zdCBwYXJlbnQgZG93biB0byB0aGUgc3ViZmxvdyB0aGF0IGVtaXR0ZWRcbiAgICogdGhpcyBldmVudC4gRW1wdHkgYXJyYXkgd2hlbiB0aGUgZW1pdCBjYW1lIGZyb20gdGhlIHJvb3QgZmxvd2NoYXJ0LlxuICAgKiBNYXRjaGVzIHRoZSBjb252ZW50aW9uIHVzZWQgYnkgYEZsb3dQYXVzZUV2ZW50LnN1YmZsb3dQYXRoYCxcbiAgICogYEZsb3djaGFydENoZWNrcG9pbnQuc3ViZmxvd1BhdGhgLCBldGMuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93UGF0aDogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqIFBpcGVsaW5lL3J1biBpZGVudGlmaWVyIChtYXRjaGVzIGBSZWNvcmRlckNvbnRleHQucGlwZWxpbmVJZGApLiAqL1xuICByZWFkb25seSBwaXBlbGluZUlkOiBzdHJpbmc7XG5cbiAgLyoqIEVtaXNzaW9uIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHMgc2luY2UgZXBvY2ggKGBEYXRlLm5vdygpYCkuICovXG4gIHJlYWRvbmx5IHRpbWVzdGFtcDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTb3VyY2UtdGltZSBjb21taXR0ZWQgcHJlZml4IGluIHRoaXMgc3RhZ2UncyBvd24gbG9nLCBjYXB0dXJlZCBiZWZvcmVcbiAgICogb2JzZXJ2ZXIgZGlzcGF0Y2guIE5vdCB0aGlzIHN0YWdlJ3MgZnV0dXJlIGNvbW1pdCBvciB1bmNvbW1pdHRlZCBzdGF0ZS5cbiAgICogTWF0Y2ggbG9nUnVuSWQgKyBkcmlsbFBhdGggYWdhaW5zdCB0aGUgc291cmNlJ3MgbG9nQWRkcmVzcyBiZWZvcmUgZm9sZGluZztcbiAgICogYSBuYW1lZCBuZXN0ZWQgaGlzdG9yeSBjYW4gYmUgdW5hdmFpbGFibGUgKGUuZy4gYSBwYXVzZWQgc3ViZmxvdykuXG4gICAqIEFic2VudCBvbiBvbGQvbWFudWFsIGV2ZW50cyBhbmQgc2NvcGVzIHdpdGhvdXQgYSBib3VuZCBlbmdpbmUgbG9nLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlUG9zaXRpb24/OiBFbWl0U291cmNlUG9zaXRpb247XG59XG5cbi8qKlxuICogUGx1Z2dhYmxlIG9ic2VydmVyIGZvciBjb25zdW1lci1lbWl0dGVkIHN0cnVjdHVyZWQgZXZlbnRzLlxuICpcbiAqIEFsbCBtZXRob2RzIGFyZSBvcHRpb25hbDsgaW1wbGVtZW50IG9ubHkgd2hhdCB5b3UgY2FyZSBhYm91dC4gUmVjb3JkZXJzXG4gKiBhcmUgaW52b2tlZCBzeW5jaHJvbm91c2x5IGluIGF0dGFjaG1lbnQgb3JkZXIuIElmIGEgcmVjb3JkZXIgdGhyb3dzLCB0aGVcbiAqIGVycm9yIGlzIGNhdWdodCBhbmQgaXNvbGF0ZWQg4oCUIG90aGVyIHJlY29yZGVycyBjb250aW51ZSB0byByZWNlaXZlIHRoZVxuICogZXZlbnQgYW5kIHRoZSBlbWl0dGluZyBzdGFnZSBpcyB1bmFmZmVjdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtaXRSZWNvcmRlciB7XG4gIC8qKlxuICAgKiBTdGFibGUgaWRlbnRpZmllciBmb3IgaWRlbXBvdGVudCBhdHRhY2gvZGV0YWNoLiBSZS1hdHRhY2hpbmcgd2l0aCB0aGVcbiAgICogc2FtZSBpZCByZXBsYWNlcyB0aGUgcHJldmlvdXMgcmVnaXN0cmF0aW9uIG9uIHRoZSBleGVjdXRvci5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqIENhbGxlZCBmb3IgZXZlcnkgYHNjb3BlLiRlbWl0KG5hbWUsIHBheWxvYWQpYCBjYWxsIGluIGFueSBzdGFnZS4gKi9cbiAgb25FbWl0PyhldmVudDogRW1pdEV2ZW50KTogdm9pZDtcblxuICAvKipcbiAgICogT3B0aW9uYWw6IHJlc2V0IHJlY29yZGVyLWludGVybmFsIHN0YXRlIGJldHdlZW4gcnVucy4gQ2FsbGVkIGJ5IHRoZVxuICAgKiBleGVjdXRvciBiZWZvcmUgZWFjaCBgcnVuKClgLlxuICAgKi9cbiAgY2xlYXI/KCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsOiBleHBvc2UgY29sbGVjdGVkIGRhdGEgZm9yIGluY2x1c2lvbiBpblxuICAgKiBgZXhlY3V0b3IuZ2V0U25hcHNob3QoKS5yZWNvcmRlcnNgLlxuICAgKi9cbiAgdG9TbmFwc2hvdD8oKTogUmVjb3JkZXJCdW5kbGU7XG59XG4iXX0=
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW1pdFJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9FbWl0UmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJERyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRW1pdFJlY29yZGVyIOKAlCB0aGUgdGhpcmQgb2JzZXJ2ZXIgY2hhbm5lbCwgYWxvbmdzaWRlIGBTY29wZVJlY29yZGVyYFxuICogKHNjb3BlIGRhdGEtZmxvdykgYW5kIGBGbG93UmVjb3JkZXJgIChjb250cm9sLWZsb3cpLlxuICpcbiAqICMjIFdoeSB0aGlzIGV4aXN0c1xuICpcbiAqIFRoZSBmaXJzdCB0d28gY2hhbm5lbHMgY2FwdHVyZSB3aGF0IHRoZSBMSUJSQVJZIGtub3dzIGFib3V0IOKAlCBzY29wZVxuICogcmVhZHMvd3JpdGVzIGZpcmVkIGJ5IGBzZXRWYWx1ZWAsIGFuZCBjb250cm9sLWZsb3cgZXZlbnRzIGZpcmVkIGJ5IHRoZVxuICogdHJhdmVyc2VyLiBCdXQgKip1c2VyLWVtaXR0ZWQgc3RydWN0dXJlZCBldmVudHMqKiDigJQgdGhpbmdzIGEgc3RhZ2VcbiAqIGZ1bmN0aW9uIHdhbnRzIHRvIHN1cmZhY2UgZm9yIG9ic2VydmFiaWxpdHkgKExMTSB0b2tlbnMsIGJpbGxpbmcgbWV0cmljcyxcbiAqIGF1dGggZGVjaXNpb25zLCBkb21haW4gbWlsZXN0b25lcykg4oCUIGhhdmUgbm93aGVyZSB0byBnbyB0b2RheS4gVGhleSBsYW5kXG4gKiBpbiB1bm9ic2VydmVkIGBEaWFnbm9zdGljQ29sbGVjdG9yYCBzaWRlIGJhZ3MgdGhhdCBubyByZWNvcmRlciB3YXRjaGVzLlxuICpcbiAqIFRoaXMgY2hhbm5lbCBjbG9zZXMgdGhhdCBnYXAuIENvbnN1bWVyIGNhbGxzIGBzY29wZS4kZW1pdChuYW1lLCBwYXlsb2FkKWBcbiAqIGZyb20gaW5zaWRlIGEgc3RhZ2U7IHRoZSBsaWJyYXJ5IGVucmljaGVzIHRoZSBldmVudCB3aXRoIHN0YWdlIGNvbnRleHRcbiAqIGFuZCBkaXNwYXRjaGVzIGl0IHN5bmNocm9ub3VzbHkgdG8gZXZlcnkgYXR0YWNoZWQgYEVtaXRSZWNvcmRlcmAuXG4gKlxuICogIyMgRGVzaWduIHByb3BlcnRpZXNcbiAqXG4gKiAtICoqUGFzcy10aHJvdWdoLCBub3QgYnVmZmVyZWQuKiogWmVybyBhbGxvY2F0aW9uIHdoZW4gbm8gcmVjb3JkZXIgaXNcbiAqICAgYXR0YWNoZWQuIEV2ZW50cyBkZWxpdmVyZWQgc3luY2hyb25vdXNseSwgaW4tb3JkZXIsIGF0IGNhbGwgdGltZS5cbiAqICAgU2FtZSBzZW1hbnRpY3MgYXMgYG9uUmVhZGAvYG9uV3JpdGVgIGFscmVhZHkgdXNlLlxuICogLSAqKkxpYnJhcnktYWdub3N0aWMgdm9jYWJ1bGFyeS4qKiBFdmVudCBuYW1lcyBhcmUgY29uc3VtZXItY2hvc2VuIHN0cmluZ3MuXG4gKiAgIENvbnZlbnRpb246IGhpZXJhcmNoaWNhbCBkb3R0ZWQgbmFtZXMsIGUuZy4gYCdhZ2VudGZvb3RwcmludC5sbG0udG9rZW5zJ2AsXG4gKiAgIGAnbXlhcHAuYmlsbGluZy5zcGVuZCdgLiBMaWJyYXJ5IGVuZm9yY2VzIG5vIHJlZ2lzdHJ5LlxuICogLSAqKkF1dG8tZW5yaWNoZWQgY29udGV4dC4qKiBFdmVyeSBldmVudCBjYXJyaWVzIGBzdGFnZU5hbWVgLFxuICogICBgcnVudGltZVN0YWdlSWRgLCBgc3ViZmxvd1BhdGhgLCBgcGlwZWxpbmVJZGAsIGB0aW1lc3RhbXBgLiBDb25zdW1lcnNcbiAqICAgbmV2ZXIgbmVlZCB0byB0aHJlYWQgZXhlY3V0aW9uIGNvbnRleHQgdGhyb3VnaCB0aGVpciBlbWl0IHBheWxvYWRzLlxuICogLSAqKlJlZGFjdGlvbi1hd2FyZS4qKiBgUmVkYWN0aW9uUG9saWN5LmVtaXRQYXR0ZXJuc2AgbWF0Y2hlcyBldmVudCBuYW1lc1xuICogICBiZWZvcmUgZGlzcGF0Y2gg4oCUIG1hdGNoZWQgZXZlbnRzIGhhdmUgdGhlaXIgcGF5bG9hZCByZXBsYWNlZCB3aXRoXG4gKiAgIGAnW1JFREFDVEVEXSdgIHNvIHNlY3JldHMgY2FuJ3QgbGVhayB2aWEgZW1pdC5cbiAqXG4gKiAjIyBSZWxhdGlvbnNoaXAgdG8gZXhpc3RpbmcgY2hhbm5lbHNcbiAqXG4gKiB8IENoYW5uZWwgICAgICAgICB8IEZpcmVzIHdoZW4gICAgICAgICAgICAgICAgICAgICAgICAgfCBCdWlsdC1pbiBjb25zdW1lcnMgICAgIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCBgU2NvcGVSZWNvcmRlcmAgICAgICB8IHNjb3BlIHJlYWQvd3JpdGUvY29tbWl0ICAgICAgICAgICAgfCBEZWJ1Z1JlY29yZGVyLCBNZXRyaWNSZWNvcmRlciB8XG4gKiB8IGBGbG93UmVjb3JkZXJgICB8IHRyYXZlcnNhbCB0cmFuc2l0aW9ucyAgICAgICAgICAgICAgfCBOYXJyYXRpdmVGbG93UmVjb3JkZXIsIGV0Yy4gfFxuICogfCBgRW1pdFJlY29yZGVyYCAgfCBjb25zdW1lciBjYWxscyBgc2NvcGUuJGVtaXQoLi4uKWAgIHwgKG5vbmUgc2hpcHMgdG9kYXk7IFBoYXNlIDMuWCBhZGRzIE1lbW9yeUVtaXRSZWNvcmRlcikgfFxuICpcbiAqIGBDb21iaW5lZFJlY29yZGVyYCAoZnJvbSBgLi9Db21iaW5lZFJlY29yZGVyLnRzYCkgaW50ZXJzZWN0cyBhbGwgdGhyZWVcbiAqIHZpYSBgUGFydGlhbDwuLi4+YC4gQSBjb25zdW1lciBjYW4gd3JpdGUgT05FIG9iamVjdCBpbXBsZW1lbnRpbmcgYW55XG4gKiBjb21iaW5hdGlvbjsgYGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIocilgIGR1Y2stdHlwZXMgYW5kIHJvdXRlc1xuICogdG8gdGhlIHJpZ2h0IGNoYW5uZWwocykuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHRva2VuTWV0ZXI6IEVtaXRSZWNvcmRlciA9IHtcbiAqICAgaWQ6ICd0b2tlbi1tZXRlcicsXG4gKiAgIG9uRW1pdChldmVudCkge1xuICogICAgIGlmIChldmVudC5uYW1lID09PSAnYWdlbnRmb290cHJpbnQubGxtLnRva2VucycpIHtcbiAqICAgICAgIHRoaXMudG90YWwgKz0gKGV2ZW50LnBheWxvYWQgYXMgeyBpbnB1dDogbnVtYmVyOyBvdXRwdXQ6IG51bWJlciB9KS5pbnB1dDtcbiAqICAgICB9XG4gKiAgIH0sXG4gKiAgIHRvdGFsOiAwLFxuICogfSBhcyBhbnk7XG4gKlxuICogZXhlY3V0b3IuYXR0YWNoRW1pdFJlY29yZGVyKHRva2VuTWV0ZXIpO1xuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBFbWl0U291cmNlUG9zaXRpb24gfSBmcm9tICdmb290dHJhY2UnO1xuXG5pbXBvcnQgdHlwZSB7IFJlY29yZGVyQnVuZGxlIH0gZnJvbSAnLi9zbmFwc2hvdC5qcyc7XG5cbi8qKlxuICogRXZlbnQgZGVsaXZlcmVkIHRvIGBFbWl0UmVjb3JkZXIub25FbWl0YC5cbiAqXG4gKiBOYW1lICsgcGF5bG9hZCBhcmUgY29uc3VtZXItc3VwcGxpZWQgdmlhIGBzY29wZS4kZW1pdChuYW1lLCBwYXlsb2FkKWAuXG4gKiBFdmVyeXRoaW5nIGVsc2UgaXMgbGlicmFyeS1lbnJpY2hlZCBhdCBkaXNwYXRjaCB0aW1lIGZyb20gdGhlIGN1cnJlbnRcbiAqIHN0YWdlJ3MgZXhlY3V0aW9uIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1pdEV2ZW50IHtcbiAgLyoqXG4gICAqIENvbnN1bWVyLXN1cHBsaWVkIGV2ZW50IG5hbWUuIENvbnZlbnRpb246IGhpZXJhcmNoaWNhbCBkb3R0ZWQgbmFtZXNwYWNlXG4gICAqIChlLmcuIGAnYWdlbnRmb290cHJpbnQubGxtLnRva2VucydgLCBgJ215YXBwLmJpbGxpbmcuc3BlbmQnYCkuIEtlZXBzXG4gICAqIHZvY2FidWxhcmllcyBjb2xsaXNpb24tZnJlZSBhY3Jvc3MgbGlicmFyaWVzL2FwcHMgd2l0aG91dCByZXF1aXJpbmcgYVxuICAgKiBjZW50cmFsIHJlZ2lzdHJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb25zdW1lci1zdXBwbGllZCBwYXlsb2FkLiBTaGFwZSBpcyB1cCB0byB0aGUgY29uc3VtZXIgYW5kIHRoZWlyXG4gICAqIGNvbnZlbnRpb247IGxpYnJhcnkgdHJlYXRzIGl0IGFzIG9wYXF1ZSBhbmQgcGFzc2VzIHRocm91Z2ggdW5jaGFuZ2VkXG4gICAqIChtb2R1bG8gcmVkYWN0aW9uIOKAlCBzZWUgYFJlZGFjdGlvblBvbGljeS5lbWl0UGF0dGVybnNgKS5cbiAgICpcbiAgICogV2hlbiByZWRhY3RlZCwgcmVwbGFjZWQgd2l0aCB0aGUgc3RyaW5nIGAnW1JFREFDVEVEXSdgLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF5bG9hZDogdW5rbm93bjtcblxuICAvKiogTmFtZSBvZiB0aGUgc3RhZ2UgdGhhdCBlbWl0dGVkIHRoaXMgZXZlbnQuICovXG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVbmlxdWUgcGVyLWV4ZWN1dGlvbi1zdGVwIGlkZW50aWZpZXIg4oCUIHRoZSBzYW1lIHZhbHVlIHJlY29yZGVyIGV2ZW50c1xuICAgKiBhbmQgY29tbWl0LWxvZyBlbnRyaWVzIGNhcnJ5LiBTZWUgYHJ1bnRpbWVTdGFnZUlkLnRzYCBmb3IgZm9ybWF0LlxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogU3ViZmxvdyBwYXRoIGZyb20gdGhlIG91dGVybW9zdCBwYXJlbnQgZG93biB0byB0aGUgc3ViZmxvdyB0aGF0IGVtaXR0ZWRcbiAgICogdGhpcyBldmVudC4gRW1wdHkgYXJyYXkgd2hlbiB0aGUgZW1pdCBjYW1lIGZyb20gdGhlIHJvb3QgZmxvd2NoYXJ0LlxuICAgKiBNYXRjaGVzIHRoZSBjb252ZW50aW9uIHVzZWQgYnkgYEZsb3dQYXVzZUV2ZW50LnN1YmZsb3dQYXRoYCxcbiAgICogYEZsb3djaGFydENoZWNrcG9pbnQuc3ViZmxvd1BhdGhgLCBldGMuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93UGF0aDogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqIFBpcGVsaW5lL3J1biBpZGVudGlmaWVyIChtYXRjaGVzIGBSZWNvcmRlckNvbnRleHQucGlwZWxpbmVJZGApLiAqL1xuICByZWFkb25seSBwaXBlbGluZUlkOiBzdHJpbmc7XG5cbiAgLyoqIEVtaXNzaW9uIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHMgc2luY2UgZXBvY2ggKGBEYXRlLm5vdygpYCkuICovXG4gIHJlYWRvbmx5IHRpbWVzdGFtcDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTb3VyY2UtdGltZSBjb21taXR0ZWQgcHJlZml4IGluIHRoaXMgc3RhZ2UncyBvd24gbG9nLCBjYXB0dXJlZCBiZWZvcmVcbiAgICogb2JzZXJ2ZXIgZGlzcGF0Y2guIE5vdCB0aGlzIHN0YWdlJ3MgZnV0dXJlIGNvbW1pdCBvciB1bmNvbW1pdHRlZCBzdGF0ZS5cbiAgICogTWF0Y2ggbG9nUnVuSWQgKyBkcmlsbFBhdGggYWdhaW5zdCB0aGUgc291cmNlJ3MgbG9nQWRkcmVzcyBiZWZvcmUgZm9sZGluZztcbiAgICogYSBuYW1lZCBuZXN0ZWQgaGlzdG9yeSBjYW4gYmUgdW5hdmFpbGFibGUgKGUuZy4gYSBwYXVzZWQgc3ViZmxvdykuXG4gICAqIEFic2VudCBvbiBvbGQvbWFudWFsIGV2ZW50cyBhbmQgc2NvcGVzIHdpdGhvdXQgYSBib3VuZCBlbmdpbmUgbG9nLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlUG9zaXRpb24/OiBFbWl0U291cmNlUG9zaXRpb247XG59XG5cbi8qKlxuICogUGx1Z2dhYmxlIG9ic2VydmVyIGZvciBjb25zdW1lci1lbWl0dGVkIHN0cnVjdHVyZWQgZXZlbnRzLlxuICpcbiAqIEFsbCBtZXRob2RzIGFyZSBvcHRpb25hbDsgaW1wbGVtZW50IG9ubHkgd2hhdCB5b3UgY2FyZSBhYm91dC4gUmVjb3JkZXJzXG4gKiBhcmUgaW52b2tlZCBzeW5jaHJvbm91c2x5IGluIGF0dGFjaG1lbnQgb3JkZXIuIElmIGEgcmVjb3JkZXIgdGhyb3dzLCB0aGVcbiAqIGVycm9yIGlzIGNhdWdodCBhbmQgaXNvbGF0ZWQg4oCUIG90aGVyIHJlY29yZGVycyBjb250aW51ZSB0byByZWNlaXZlIHRoZVxuICogZXZlbnQgYW5kIHRoZSBlbWl0dGluZyBzdGFnZSBpcyB1bmFmZmVjdGVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtaXRSZWNvcmRlciB7XG4gIC8qKlxuICAgKiBTdGFibGUgaWRlbnRpZmllciBmb3IgaWRlbXBvdGVudCBhdHRhY2gvZGV0YWNoLiBSZS1hdHRhY2hpbmcgd2l0aCB0aGVcbiAgICogc2FtZSBpZCByZXBsYWNlcyB0aGUgcHJldmlvdXMgcmVnaXN0cmF0aW9uIG9uIHRoZSBleGVjdXRvci5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqIENhbGxlZCBmb3IgZXZlcnkgYHNjb3BlLiRlbWl0KG5hbWUsIHBheWxvYWQpYCBjYWxsIGluIGFueSBzdGFnZS4gKi9cbiAgb25FbWl0PyhldmVudDogRW1pdEV2ZW50KTogdm9pZDtcblxuICAvKipcbiAgICogT3B0aW9uYWw6IHJlc2V0IHJlY29yZGVyLWludGVybmFsIHN0YXRlIGJldHdlZW4gcnVucy4gQ2FsbGVkIGJ5IHRoZVxuICAgKiBleGVjdXRvciBiZWZvcmUgZWFjaCBgcnVuKClgLlxuICAgKi9cbiAgY2xlYXI/KCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsOiBleHBvc2UgY29sbGVjdGVkIGRhdGEgZm9yIGluY2x1c2lvbiBpblxuICAgKiBgZXhlY3V0b3IuZ2V0U25hcHNob3QoKS5yZWNvcmRlcnNgLlxuICAgKi9cbiAgdG9TbmFwc2hvdD8oKTogUmVjb3JkZXJCdW5kbGU7XG59XG4iXX0=