@decaf-ts/integrations 0.3.7 → 0.3.9

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 (417) hide show
  1. package/dist/integrations.cjs +3 -3
  2. package/dist/integrations.js +3 -3
  3. package/lib/cjs/graph/engine/constants.cjs +58 -0
  4. package/lib/cjs/graph/engine/decorators.cjs +4 -0
  5. package/lib/cjs/graph/engine/errors/GraphCycleError.cjs +20 -0
  6. package/lib/cjs/graph/engine/errors/GraphExecutionError.cjs +27 -0
  7. package/lib/cjs/graph/engine/errors/GraphInputError.cjs +20 -0
  8. package/lib/cjs/graph/engine/errors/GraphLoopLimitError.cjs +20 -0
  9. package/lib/cjs/graph/engine/errors/GraphPinningError.cjs +20 -0
  10. package/lib/cjs/graph/engine/errors/GraphPortError.cjs +20 -0
  11. package/lib/cjs/graph/engine/errors/GraphStoreError.cjs +20 -0
  12. package/lib/cjs/graph/engine/errors/GraphTopologyError.cjs +20 -0
  13. package/lib/cjs/graph/{errors → engine/errors}/index.cjs +2 -2
  14. package/lib/cjs/graph/engine/events/GraphExecutionEvent.cjs +4 -0
  15. package/lib/cjs/graph/engine/events/GraphExecutionEventEmitter.cjs +40 -0
  16. package/lib/cjs/graph/engine/events/GraphExecutionEventFactory.cjs +37 -0
  17. package/lib/cjs/graph/engine/events/GraphExecutionObserver.cjs +4 -0
  18. package/lib/cjs/graph/{events → engine/events}/index.cjs +2 -2
  19. package/lib/cjs/graph/engine/execution/CodeSandboxEvaluator.cjs +4 -0
  20. package/lib/cjs/graph/engine/execution/GraphExecutionContext.cjs +79 -0
  21. package/lib/cjs/graph/engine/execution/GraphExecutionEngine.cjs +408 -0
  22. package/lib/cjs/graph/engine/execution/GraphExecutionFrame.cjs +32 -0
  23. package/lib/cjs/graph/engine/execution/GraphExecutionResult.cjs +30 -0
  24. package/lib/cjs/graph/engine/execution/GraphNodeExecutor.cjs +4 -0
  25. package/lib/cjs/graph/engine/execution/SwitchGraphNodeExecutor.cjs +103 -0
  26. package/lib/cjs/graph/{execution → engine/execution}/index.cjs +2 -2
  27. package/lib/cjs/graph/engine/index.cjs +84 -0
  28. package/lib/cjs/graph/engine/loops/ConditionExpressionEvaluator.cjs +87 -0
  29. package/lib/cjs/graph/engine/loops/ForeachGraphNodeExecutor.cjs +85 -0
  30. package/lib/cjs/graph/engine/loops/GraphConditionEvaluator.cjs +85 -0
  31. package/lib/cjs/graph/engine/loops/GraphLoopExecutionContext.cjs +16 -0
  32. package/lib/cjs/graph/engine/loops/UntilGraphNodeExecutor.cjs +77 -0
  33. package/lib/cjs/graph/engine/loops/WhileGraphNodeExecutor.cjs +78 -0
  34. package/lib/cjs/graph/{loops → engine/loops}/index.cjs +2 -2
  35. package/lib/cjs/graph/engine/pinning/GraphPinningDependencyResolver.cjs +28 -0
  36. package/lib/cjs/graph/engine/pinning/GraphPinningMetadata.cjs +20 -0
  37. package/lib/cjs/graph/engine/pinning/GraphPinningPolicy.cjs +34 -0
  38. package/lib/cjs/graph/engine/pinning/GraphPinningService.cjs +191 -0
  39. package/lib/cjs/graph/{pinning → engine/pinning}/index.cjs +2 -2
  40. package/lib/cjs/graph/engine/planning/GraphExecutionPlan.cjs +4 -0
  41. package/lib/cjs/graph/engine/planning/GraphExecutionPlanEdge.cjs +4 -0
  42. package/lib/cjs/graph/engine/planning/GraphExecutionPlanLayer.cjs +4 -0
  43. package/lib/cjs/graph/engine/planning/GraphExecutionPlanNode.cjs +4 -0
  44. package/lib/cjs/graph/engine/planning/GraphExecutionPlanner.cjs +197 -0
  45. package/lib/cjs/graph/engine/planning/GraphRelationResolver.cjs +172 -0
  46. package/lib/cjs/graph/engine/planning/GraphTopology.cjs +57 -0
  47. package/lib/cjs/graph/{planning → engine/planning}/index.cjs +2 -2
  48. package/lib/cjs/graph/engine/registry/GraphNodeExecutorRegistry.cjs +44 -0
  49. package/lib/cjs/graph/engine/registry/GraphNodeExecutorResolver.cjs +27 -0
  50. package/lib/cjs/graph/{registry → engine/registry}/index.cjs +2 -2
  51. package/lib/cjs/graph/engine/snapshots/GraphExecutionSnapshotMapper.cjs +53 -0
  52. package/lib/cjs/graph/{snapshots → engine/snapshots}/index.cjs +2 -2
  53. package/lib/cjs/graph/engine/store/GraphCachedValue.cjs +4 -0
  54. package/lib/cjs/graph/engine/store/GraphValueKey.cjs +4 -0
  55. package/lib/cjs/graph/engine/store/GraphValueStore.cjs +76 -0
  56. package/lib/cjs/graph/engine/store/GraphValueStoreAdapter.cjs +4 -0
  57. package/lib/cjs/graph/engine/store/InMemoryGraphValueStoreAdapter.cjs +69 -0
  58. package/lib/cjs/graph/{store → engine/store}/index.cjs +2 -2
  59. package/lib/cjs/graph/engine/types.cjs +4 -0
  60. package/lib/cjs/graph/engine/validation/GraphDefinitionValidator.cjs +33 -0
  61. package/lib/cjs/graph/engine/validation/GraphPortSchemaResolver.cjs +58 -0
  62. package/lib/cjs/graph/engine/validation/GraphValueValidator.cjs +52 -0
  63. package/lib/cjs/graph/{validation → engine/validation}/index.cjs +2 -2
  64. package/lib/cjs/graph/index.cjs +10 -60
  65. package/lib/cjs/graph/shared/constants.cjs +44 -0
  66. package/lib/cjs/graph/shared/index.cjs +38 -0
  67. package/lib/cjs/graph/{nodes → shared/nodes}/agent.cjs +2 -2
  68. package/lib/cjs/graph/shared/nodes/base.cjs +35 -0
  69. package/lib/cjs/graph/shared/nodes/category-styles.cjs +38 -0
  70. package/lib/cjs/graph/shared/nodes/flow-control.cjs +464 -0
  71. package/lib/cjs/graph/{nodes → shared/nodes}/index.cjs +2 -2
  72. package/lib/cjs/graph/shared/nodes/triggers.cjs +250 -0
  73. package/lib/cjs/graph/shared/types.cjs +4 -0
  74. package/lib/cjs/index.cjs +3 -3
  75. package/lib/cjs/nest/index.cjs +2 -3
  76. package/lib/esm/graph/engine/constants.js +62 -0
  77. package/lib/esm/graph/engine/decorators.js +2 -0
  78. package/lib/esm/graph/engine/errors/GraphCycleError.js +15 -0
  79. package/lib/esm/graph/engine/errors/GraphExecutionError.js +22 -0
  80. package/lib/esm/graph/engine/errors/GraphInputError.js +15 -0
  81. package/lib/esm/graph/engine/errors/GraphLoopLimitError.js +15 -0
  82. package/lib/esm/graph/engine/errors/GraphPinningError.js +15 -0
  83. package/lib/esm/graph/engine/errors/GraphPortError.js +15 -0
  84. package/lib/esm/graph/engine/errors/GraphStoreError.js +15 -0
  85. package/lib/esm/graph/engine/errors/GraphTopologyError.js +15 -0
  86. package/lib/esm/graph/engine/errors/index.js +14 -0
  87. package/lib/esm/graph/engine/events/GraphExecutionEvent.js +2 -0
  88. package/lib/esm/graph/engine/events/GraphExecutionEventEmitter.js +35 -0
  89. package/lib/esm/graph/engine/events/GraphExecutionEventFactory.js +32 -0
  90. package/lib/esm/graph/engine/events/GraphExecutionObserver.js +2 -0
  91. package/lib/esm/graph/engine/events/index.js +10 -0
  92. package/lib/esm/graph/engine/execution/CodeSandboxEvaluator.js +18 -0
  93. package/lib/esm/graph/engine/execution/GraphExecutionContext.js +74 -0
  94. package/lib/esm/graph/engine/execution/GraphExecutionEngine.js +403 -0
  95. package/lib/esm/graph/engine/execution/GraphExecutionFrame.js +27 -0
  96. package/lib/esm/graph/engine/execution/GraphExecutionResult.js +26 -0
  97. package/lib/esm/graph/engine/execution/GraphNodeExecutor.js +2 -0
  98. package/lib/esm/graph/engine/execution/SwitchGraphNodeExecutor.js +98 -0
  99. package/lib/esm/graph/engine/execution/index.js +13 -0
  100. package/lib/esm/graph/engine/index.js +67 -0
  101. package/lib/esm/graph/engine/loops/ConditionExpressionEvaluator.js +82 -0
  102. package/lib/esm/graph/engine/loops/ForeachGraphNodeExecutor.js +80 -0
  103. package/lib/esm/graph/engine/loops/GraphConditionEvaluator.js +80 -0
  104. package/lib/esm/graph/engine/loops/GraphLoopExecutionContext.js +11 -0
  105. package/lib/esm/graph/engine/loops/UntilGraphNodeExecutor.js +72 -0
  106. package/lib/esm/graph/engine/loops/WhileGraphNodeExecutor.js +73 -0
  107. package/lib/esm/graph/engine/loops/index.js +12 -0
  108. package/lib/esm/graph/engine/pinning/GraphPinningDependencyResolver.js +23 -0
  109. package/lib/esm/graph/engine/pinning/GraphPinningMetadata.js +15 -0
  110. package/lib/esm/graph/engine/pinning/GraphPinningPolicy.js +29 -0
  111. package/lib/esm/graph/engine/pinning/GraphPinningService.js +186 -0
  112. package/lib/esm/graph/engine/pinning/index.js +10 -0
  113. package/lib/esm/graph/engine/planning/GraphExecutionPlan.js +2 -0
  114. package/lib/esm/graph/engine/planning/GraphExecutionPlanEdge.js +7 -0
  115. package/lib/esm/graph/engine/planning/GraphExecutionPlanLayer.js +2 -0
  116. package/lib/esm/graph/engine/planning/GraphExecutionPlanNode.js +2 -0
  117. package/lib/esm/graph/engine/planning/GraphExecutionPlanner.js +192 -0
  118. package/lib/esm/graph/engine/planning/GraphRelationResolver.js +167 -0
  119. package/lib/esm/graph/engine/planning/GraphTopology.js +52 -0
  120. package/lib/esm/graph/engine/planning/index.js +13 -0
  121. package/lib/esm/graph/engine/registry/GraphNodeExecutorRegistry.js +39 -0
  122. package/lib/esm/graph/engine/registry/GraphNodeExecutorResolver.js +22 -0
  123. package/lib/esm/graph/engine/registry/index.js +8 -0
  124. package/lib/esm/graph/engine/snapshots/GraphExecutionSnapshotMapper.js +48 -0
  125. package/lib/esm/graph/engine/snapshots/index.js +7 -0
  126. package/lib/esm/graph/engine/store/GraphCachedValue.js +2 -0
  127. package/lib/esm/graph/engine/store/GraphValueKey.js +7 -0
  128. package/lib/esm/graph/engine/store/GraphValueStore.js +71 -0
  129. package/lib/esm/graph/engine/store/GraphValueStoreAdapter.js +2 -0
  130. package/lib/esm/graph/engine/store/InMemoryGraphValueStoreAdapter.js +64 -0
  131. package/lib/esm/graph/engine/store/index.js +11 -0
  132. package/lib/esm/graph/engine/types.js +2 -0
  133. package/lib/esm/graph/engine/validation/GraphDefinitionValidator.js +28 -0
  134. package/lib/esm/graph/engine/validation/GraphPortSchemaResolver.js +53 -0
  135. package/lib/esm/graph/engine/validation/GraphValueValidator.js +47 -0
  136. package/lib/esm/graph/engine/validation/index.js +9 -0
  137. package/lib/esm/graph/index.js +9 -59
  138. package/lib/esm/graph/shared/constants.js +56 -0
  139. package/lib/esm/graph/shared/index.js +19 -0
  140. package/lib/esm/graph/shared/nodes/agent.js +101 -0
  141. package/lib/esm/graph/shared/nodes/base.js +30 -0
  142. package/lib/esm/graph/shared/nodes/category-styles.js +34 -0
  143. package/lib/esm/graph/shared/nodes/flow-control.js +455 -0
  144. package/lib/esm/graph/shared/nodes/index.js +18 -0
  145. package/lib/esm/graph/shared/nodes/triggers.js +241 -0
  146. package/lib/esm/graph/shared/types.js +2 -0
  147. package/lib/esm/index.js +3 -3
  148. package/lib/esm/nest/index.js +1 -2
  149. package/lib/types/graph/engine/constants.d.cts +59 -0
  150. package/lib/types/graph/engine/constants.d.mts +59 -0
  151. package/lib/types/graph/{execution → engine/execution}/GraphExecutionResult.d.cts +1 -1
  152. package/lib/types/graph/{execution → engine/execution}/GraphExecutionResult.d.mts +1 -1
  153. package/lib/types/graph/engine/index.d.cts +61 -0
  154. package/lib/types/graph/engine/index.d.mts +61 -0
  155. package/lib/types/graph/{loops → engine/loops}/ConditionExpressionEvaluator.d.cts +1 -1
  156. package/lib/types/graph/{loops → engine/loops}/ConditionExpressionEvaluator.d.mts +1 -1
  157. package/lib/types/graph/{loops → engine/loops}/GraphConditionEvaluator.d.cts +2 -1
  158. package/lib/types/graph/{loops → engine/loops}/GraphConditionEvaluator.d.mts +2 -1
  159. package/lib/types/graph/{types.d.cts → engine/types.d.cts} +8 -116
  160. package/lib/types/graph/{types.d.mts → engine/types.d.mts} +8 -116
  161. package/lib/types/graph/index.d.cts +8 -53
  162. package/lib/types/graph/index.d.mts +8 -53
  163. package/lib/types/graph/shared/constants.d.cts +53 -0
  164. package/lib/types/graph/shared/constants.d.mts +53 -0
  165. package/lib/types/graph/shared/index.d.cts +18 -0
  166. package/lib/types/graph/shared/index.d.mts +18 -0
  167. package/lib/types/graph/shared/types.d.cts +121 -0
  168. package/lib/types/graph/shared/types.d.mts +121 -0
  169. package/lib/types/index.d.cts +2 -2
  170. package/lib/types/index.d.mts +2 -2
  171. package/lib/types/nest/index.d.cts +0 -1
  172. package/lib/types/nest/index.d.mts +0 -1
  173. package/package.json +25 -3
  174. package/lib/cjs/graph/constants.cjs +0 -94
  175. package/lib/cjs/graph/decorators.cjs +0 -4
  176. package/lib/cjs/graph/errors/GraphCycleError.cjs +0 -20
  177. package/lib/cjs/graph/errors/GraphExecutionError.cjs +0 -27
  178. package/lib/cjs/graph/errors/GraphInputError.cjs +0 -20
  179. package/lib/cjs/graph/errors/GraphLoopLimitError.cjs +0 -20
  180. package/lib/cjs/graph/errors/GraphPinningError.cjs +0 -20
  181. package/lib/cjs/graph/errors/GraphPortError.cjs +0 -20
  182. package/lib/cjs/graph/errors/GraphStoreError.cjs +0 -20
  183. package/lib/cjs/graph/errors/GraphTopologyError.cjs +0 -20
  184. package/lib/cjs/graph/events/GraphExecutionEvent.cjs +0 -4
  185. package/lib/cjs/graph/events/GraphExecutionEventEmitter.cjs +0 -40
  186. package/lib/cjs/graph/events/GraphExecutionEventFactory.cjs +0 -37
  187. package/lib/cjs/graph/events/GraphExecutionObserver.cjs +0 -4
  188. package/lib/cjs/graph/execution/CodeSandboxEvaluator.cjs +0 -4
  189. package/lib/cjs/graph/execution/GraphExecutionContext.cjs +0 -79
  190. package/lib/cjs/graph/execution/GraphExecutionEngine.cjs +0 -407
  191. package/lib/cjs/graph/execution/GraphExecutionFrame.cjs +0 -32
  192. package/lib/cjs/graph/execution/GraphExecutionResult.cjs +0 -30
  193. package/lib/cjs/graph/execution/GraphNodeExecutor.cjs +0 -4
  194. package/lib/cjs/graph/execution/SwitchGraphNodeExecutor.cjs +0 -103
  195. package/lib/cjs/graph/loops/ConditionExpressionEvaluator.cjs +0 -87
  196. package/lib/cjs/graph/loops/ForeachGraphNodeExecutor.cjs +0 -84
  197. package/lib/cjs/graph/loops/GraphConditionEvaluator.cjs +0 -85
  198. package/lib/cjs/graph/loops/GraphLoopExecutionContext.cjs +0 -16
  199. package/lib/cjs/graph/loops/UntilGraphNodeExecutor.cjs +0 -76
  200. package/lib/cjs/graph/loops/WhileGraphNodeExecutor.cjs +0 -77
  201. package/lib/cjs/graph/nodes/base.cjs +0 -35
  202. package/lib/cjs/graph/nodes/category-styles.cjs +0 -38
  203. package/lib/cjs/graph/nodes/flow-control.cjs +0 -464
  204. package/lib/cjs/graph/nodes/triggers.cjs +0 -250
  205. package/lib/cjs/graph/pinning/GraphPinningDependencyResolver.cjs +0 -28
  206. package/lib/cjs/graph/pinning/GraphPinningMetadata.cjs +0 -20
  207. package/lib/cjs/graph/pinning/GraphPinningPolicy.cjs +0 -34
  208. package/lib/cjs/graph/pinning/GraphPinningService.cjs +0 -191
  209. package/lib/cjs/graph/planning/GraphExecutionPlan.cjs +0 -4
  210. package/lib/cjs/graph/planning/GraphExecutionPlanEdge.cjs +0 -4
  211. package/lib/cjs/graph/planning/GraphExecutionPlanLayer.cjs +0 -4
  212. package/lib/cjs/graph/planning/GraphExecutionPlanNode.cjs +0 -4
  213. package/lib/cjs/graph/planning/GraphExecutionPlanner.cjs +0 -197
  214. package/lib/cjs/graph/planning/GraphRelationResolver.cjs +0 -172
  215. package/lib/cjs/graph/planning/GraphTopology.cjs +0 -57
  216. package/lib/cjs/graph/registry/GraphNodeExecutorRegistry.cjs +0 -44
  217. package/lib/cjs/graph/registry/GraphNodeExecutorResolver.cjs +0 -27
  218. package/lib/cjs/graph/snapshots/GraphExecutionSnapshotMapper.cjs +0 -53
  219. package/lib/cjs/graph/store/GraphCachedValue.cjs +0 -4
  220. package/lib/cjs/graph/store/GraphValueKey.cjs +0 -4
  221. package/lib/cjs/graph/store/GraphValueStore.cjs +0 -76
  222. package/lib/cjs/graph/store/GraphValueStoreAdapter.cjs +0 -4
  223. package/lib/cjs/graph/store/InMemoryGraphValueStoreAdapter.cjs +0 -69
  224. package/lib/cjs/graph/types.cjs +0 -4
  225. package/lib/cjs/graph/validation/GraphDefinitionValidator.cjs +0 -33
  226. package/lib/cjs/graph/validation/GraphPortSchemaResolver.cjs +0 -58
  227. package/lib/cjs/graph/validation/GraphValueValidator.cjs +0 -52
  228. package/lib/esm/graph/constants.js +0 -106
  229. package/lib/esm/graph/decorators.js +0 -2
  230. package/lib/esm/graph/errors/GraphCycleError.js +0 -15
  231. package/lib/esm/graph/errors/GraphExecutionError.js +0 -22
  232. package/lib/esm/graph/errors/GraphInputError.js +0 -15
  233. package/lib/esm/graph/errors/GraphLoopLimitError.js +0 -15
  234. package/lib/esm/graph/errors/GraphPinningError.js +0 -15
  235. package/lib/esm/graph/errors/GraphPortError.js +0 -15
  236. package/lib/esm/graph/errors/GraphStoreError.js +0 -15
  237. package/lib/esm/graph/errors/GraphTopologyError.js +0 -15
  238. package/lib/esm/graph/errors/index.js +0 -14
  239. package/lib/esm/graph/events/GraphExecutionEvent.js +0 -2
  240. package/lib/esm/graph/events/GraphExecutionEventEmitter.js +0 -35
  241. package/lib/esm/graph/events/GraphExecutionEventFactory.js +0 -32
  242. package/lib/esm/graph/events/GraphExecutionObserver.js +0 -2
  243. package/lib/esm/graph/events/index.js +0 -10
  244. package/lib/esm/graph/execution/CodeSandboxEvaluator.js +0 -18
  245. package/lib/esm/graph/execution/GraphExecutionContext.js +0 -74
  246. package/lib/esm/graph/execution/GraphExecutionEngine.js +0 -402
  247. package/lib/esm/graph/execution/GraphExecutionFrame.js +0 -27
  248. package/lib/esm/graph/execution/GraphExecutionResult.js +0 -26
  249. package/lib/esm/graph/execution/GraphNodeExecutor.js +0 -2
  250. package/lib/esm/graph/execution/SwitchGraphNodeExecutor.js +0 -98
  251. package/lib/esm/graph/execution/index.js +0 -13
  252. package/lib/esm/graph/loops/ConditionExpressionEvaluator.js +0 -82
  253. package/lib/esm/graph/loops/ForeachGraphNodeExecutor.js +0 -79
  254. package/lib/esm/graph/loops/GraphConditionEvaluator.js +0 -80
  255. package/lib/esm/graph/loops/GraphLoopExecutionContext.js +0 -11
  256. package/lib/esm/graph/loops/UntilGraphNodeExecutor.js +0 -71
  257. package/lib/esm/graph/loops/WhileGraphNodeExecutor.js +0 -72
  258. package/lib/esm/graph/loops/index.js +0 -12
  259. package/lib/esm/graph/nodes/agent.js +0 -101
  260. package/lib/esm/graph/nodes/base.js +0 -30
  261. package/lib/esm/graph/nodes/category-styles.js +0 -34
  262. package/lib/esm/graph/nodes/flow-control.js +0 -455
  263. package/lib/esm/graph/nodes/index.js +0 -18
  264. package/lib/esm/graph/nodes/triggers.js +0 -241
  265. package/lib/esm/graph/pinning/GraphPinningDependencyResolver.js +0 -23
  266. package/lib/esm/graph/pinning/GraphPinningMetadata.js +0 -15
  267. package/lib/esm/graph/pinning/GraphPinningPolicy.js +0 -29
  268. package/lib/esm/graph/pinning/GraphPinningService.js +0 -186
  269. package/lib/esm/graph/pinning/index.js +0 -10
  270. package/lib/esm/graph/planning/GraphExecutionPlan.js +0 -2
  271. package/lib/esm/graph/planning/GraphExecutionPlanEdge.js +0 -7
  272. package/lib/esm/graph/planning/GraphExecutionPlanLayer.js +0 -2
  273. package/lib/esm/graph/planning/GraphExecutionPlanNode.js +0 -2
  274. package/lib/esm/graph/planning/GraphExecutionPlanner.js +0 -192
  275. package/lib/esm/graph/planning/GraphRelationResolver.js +0 -167
  276. package/lib/esm/graph/planning/GraphTopology.js +0 -52
  277. package/lib/esm/graph/planning/index.js +0 -13
  278. package/lib/esm/graph/registry/GraphNodeExecutorRegistry.js +0 -39
  279. package/lib/esm/graph/registry/GraphNodeExecutorResolver.js +0 -22
  280. package/lib/esm/graph/registry/index.js +0 -8
  281. package/lib/esm/graph/snapshots/GraphExecutionSnapshotMapper.js +0 -48
  282. package/lib/esm/graph/snapshots/index.js +0 -7
  283. package/lib/esm/graph/store/GraphCachedValue.js +0 -2
  284. package/lib/esm/graph/store/GraphValueKey.js +0 -7
  285. package/lib/esm/graph/store/GraphValueStore.js +0 -71
  286. package/lib/esm/graph/store/GraphValueStoreAdapter.js +0 -2
  287. package/lib/esm/graph/store/InMemoryGraphValueStoreAdapter.js +0 -64
  288. package/lib/esm/graph/store/index.js +0 -11
  289. package/lib/esm/graph/types.js +0 -2
  290. package/lib/esm/graph/validation/GraphDefinitionValidator.js +0 -28
  291. package/lib/esm/graph/validation/GraphPortSchemaResolver.js +0 -53
  292. package/lib/esm/graph/validation/GraphValueValidator.js +0 -47
  293. package/lib/esm/graph/validation/index.js +0 -9
  294. package/lib/types/graph/constants.d.cts +0 -101
  295. package/lib/types/graph/constants.d.mts +0 -101
  296. /package/lib/types/graph/{decorators.d.cts → engine/decorators.d.cts} +0 -0
  297. /package/lib/types/graph/{decorators.d.mts → engine/decorators.d.mts} +0 -0
  298. /package/lib/types/graph/{errors → engine/errors}/GraphCycleError.d.cts +0 -0
  299. /package/lib/types/graph/{errors → engine/errors}/GraphCycleError.d.mts +0 -0
  300. /package/lib/types/graph/{errors → engine/errors}/GraphExecutionError.d.cts +0 -0
  301. /package/lib/types/graph/{errors → engine/errors}/GraphExecutionError.d.mts +0 -0
  302. /package/lib/types/graph/{errors → engine/errors}/GraphInputError.d.cts +0 -0
  303. /package/lib/types/graph/{errors → engine/errors}/GraphInputError.d.mts +0 -0
  304. /package/lib/types/graph/{errors → engine/errors}/GraphLoopLimitError.d.cts +0 -0
  305. /package/lib/types/graph/{errors → engine/errors}/GraphLoopLimitError.d.mts +0 -0
  306. /package/lib/types/graph/{errors → engine/errors}/GraphPinningError.d.cts +0 -0
  307. /package/lib/types/graph/{errors → engine/errors}/GraphPinningError.d.mts +0 -0
  308. /package/lib/types/graph/{errors → engine/errors}/GraphPortError.d.cts +0 -0
  309. /package/lib/types/graph/{errors → engine/errors}/GraphPortError.d.mts +0 -0
  310. /package/lib/types/graph/{errors → engine/errors}/GraphStoreError.d.cts +0 -0
  311. /package/lib/types/graph/{errors → engine/errors}/GraphStoreError.d.mts +0 -0
  312. /package/lib/types/graph/{errors → engine/errors}/GraphTopologyError.d.cts +0 -0
  313. /package/lib/types/graph/{errors → engine/errors}/GraphTopologyError.d.mts +0 -0
  314. /package/lib/types/graph/{errors → engine/errors}/index.d.cts +0 -0
  315. /package/lib/types/graph/{errors → engine/errors}/index.d.mts +0 -0
  316. /package/lib/types/graph/{events → engine/events}/GraphExecutionEvent.d.cts +0 -0
  317. /package/lib/types/graph/{events → engine/events}/GraphExecutionEvent.d.mts +0 -0
  318. /package/lib/types/graph/{events → engine/events}/GraphExecutionEventEmitter.d.cts +0 -0
  319. /package/lib/types/graph/{events → engine/events}/GraphExecutionEventEmitter.d.mts +0 -0
  320. /package/lib/types/graph/{events → engine/events}/GraphExecutionEventFactory.d.cts +0 -0
  321. /package/lib/types/graph/{events → engine/events}/GraphExecutionEventFactory.d.mts +0 -0
  322. /package/lib/types/graph/{events → engine/events}/GraphExecutionObserver.d.cts +0 -0
  323. /package/lib/types/graph/{events → engine/events}/GraphExecutionObserver.d.mts +0 -0
  324. /package/lib/types/graph/{events → engine/events}/index.d.cts +0 -0
  325. /package/lib/types/graph/{events → engine/events}/index.d.mts +0 -0
  326. /package/lib/types/graph/{execution → engine/execution}/CodeSandboxEvaluator.d.cts +0 -0
  327. /package/lib/types/graph/{execution → engine/execution}/CodeSandboxEvaluator.d.mts +0 -0
  328. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionContext.d.cts +0 -0
  329. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionContext.d.mts +0 -0
  330. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionEngine.d.cts +0 -0
  331. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionEngine.d.mts +0 -0
  332. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionFrame.d.cts +0 -0
  333. /package/lib/types/graph/{execution → engine/execution}/GraphExecutionFrame.d.mts +0 -0
  334. /package/lib/types/graph/{execution → engine/execution}/GraphNodeExecutor.d.cts +0 -0
  335. /package/lib/types/graph/{execution → engine/execution}/GraphNodeExecutor.d.mts +0 -0
  336. /package/lib/types/graph/{execution → engine/execution}/SwitchGraphNodeExecutor.d.cts +0 -0
  337. /package/lib/types/graph/{execution → engine/execution}/SwitchGraphNodeExecutor.d.mts +0 -0
  338. /package/lib/types/graph/{execution → engine/execution}/index.d.cts +0 -0
  339. /package/lib/types/graph/{execution → engine/execution}/index.d.mts +0 -0
  340. /package/lib/types/graph/{loops → engine/loops}/ForeachGraphNodeExecutor.d.cts +0 -0
  341. /package/lib/types/graph/{loops → engine/loops}/ForeachGraphNodeExecutor.d.mts +0 -0
  342. /package/lib/types/graph/{loops → engine/loops}/GraphLoopExecutionContext.d.cts +0 -0
  343. /package/lib/types/graph/{loops → engine/loops}/GraphLoopExecutionContext.d.mts +0 -0
  344. /package/lib/types/graph/{loops → engine/loops}/UntilGraphNodeExecutor.d.cts +0 -0
  345. /package/lib/types/graph/{loops → engine/loops}/UntilGraphNodeExecutor.d.mts +0 -0
  346. /package/lib/types/graph/{loops → engine/loops}/WhileGraphNodeExecutor.d.cts +0 -0
  347. /package/lib/types/graph/{loops → engine/loops}/WhileGraphNodeExecutor.d.mts +0 -0
  348. /package/lib/types/graph/{loops → engine/loops}/index.d.cts +0 -0
  349. /package/lib/types/graph/{loops → engine/loops}/index.d.mts +0 -0
  350. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningDependencyResolver.d.cts +0 -0
  351. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningDependencyResolver.d.mts +0 -0
  352. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningMetadata.d.cts +0 -0
  353. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningMetadata.d.mts +0 -0
  354. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningPolicy.d.cts +0 -0
  355. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningPolicy.d.mts +0 -0
  356. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningService.d.cts +0 -0
  357. /package/lib/types/graph/{pinning → engine/pinning}/GraphPinningService.d.mts +0 -0
  358. /package/lib/types/graph/{pinning → engine/pinning}/index.d.cts +0 -0
  359. /package/lib/types/graph/{pinning → engine/pinning}/index.d.mts +0 -0
  360. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlan.d.cts +0 -0
  361. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlan.d.mts +0 -0
  362. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanEdge.d.cts +0 -0
  363. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanEdge.d.mts +0 -0
  364. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanLayer.d.cts +0 -0
  365. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanLayer.d.mts +0 -0
  366. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanNode.d.cts +0 -0
  367. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanNode.d.mts +0 -0
  368. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanner.d.cts +0 -0
  369. /package/lib/types/graph/{planning → engine/planning}/GraphExecutionPlanner.d.mts +0 -0
  370. /package/lib/types/graph/{planning → engine/planning}/GraphRelationResolver.d.cts +0 -0
  371. /package/lib/types/graph/{planning → engine/planning}/GraphRelationResolver.d.mts +0 -0
  372. /package/lib/types/graph/{planning → engine/planning}/GraphTopology.d.cts +0 -0
  373. /package/lib/types/graph/{planning → engine/planning}/GraphTopology.d.mts +0 -0
  374. /package/lib/types/graph/{planning → engine/planning}/index.d.cts +0 -0
  375. /package/lib/types/graph/{planning → engine/planning}/index.d.mts +0 -0
  376. /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorRegistry.d.cts +0 -0
  377. /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorRegistry.d.mts +0 -0
  378. /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorResolver.d.cts +0 -0
  379. /package/lib/types/graph/{registry → engine/registry}/GraphNodeExecutorResolver.d.mts +0 -0
  380. /package/lib/types/graph/{registry → engine/registry}/index.d.cts +0 -0
  381. /package/lib/types/graph/{registry → engine/registry}/index.d.mts +0 -0
  382. /package/lib/types/graph/{snapshots → engine/snapshots}/GraphExecutionSnapshotMapper.d.cts +0 -0
  383. /package/lib/types/graph/{snapshots → engine/snapshots}/GraphExecutionSnapshotMapper.d.mts +0 -0
  384. /package/lib/types/graph/{snapshots → engine/snapshots}/index.d.cts +0 -0
  385. /package/lib/types/graph/{snapshots → engine/snapshots}/index.d.mts +0 -0
  386. /package/lib/types/graph/{store → engine/store}/GraphCachedValue.d.cts +0 -0
  387. /package/lib/types/graph/{store → engine/store}/GraphCachedValue.d.mts +0 -0
  388. /package/lib/types/graph/{store → engine/store}/GraphValueKey.d.cts +0 -0
  389. /package/lib/types/graph/{store → engine/store}/GraphValueKey.d.mts +0 -0
  390. /package/lib/types/graph/{store → engine/store}/GraphValueStore.d.cts +0 -0
  391. /package/lib/types/graph/{store → engine/store}/GraphValueStore.d.mts +0 -0
  392. /package/lib/types/graph/{store → engine/store}/GraphValueStoreAdapter.d.cts +0 -0
  393. /package/lib/types/graph/{store → engine/store}/GraphValueStoreAdapter.d.mts +0 -0
  394. /package/lib/types/graph/{store → engine/store}/InMemoryGraphValueStoreAdapter.d.cts +0 -0
  395. /package/lib/types/graph/{store → engine/store}/InMemoryGraphValueStoreAdapter.d.mts +0 -0
  396. /package/lib/types/graph/{store → engine/store}/index.d.cts +0 -0
  397. /package/lib/types/graph/{store → engine/store}/index.d.mts +0 -0
  398. /package/lib/types/graph/{validation → engine/validation}/GraphDefinitionValidator.d.cts +0 -0
  399. /package/lib/types/graph/{validation → engine/validation}/GraphDefinitionValidator.d.mts +0 -0
  400. /package/lib/types/graph/{validation → engine/validation}/GraphPortSchemaResolver.d.cts +0 -0
  401. /package/lib/types/graph/{validation → engine/validation}/GraphPortSchemaResolver.d.mts +0 -0
  402. /package/lib/types/graph/{validation → engine/validation}/GraphValueValidator.d.cts +0 -0
  403. /package/lib/types/graph/{validation → engine/validation}/GraphValueValidator.d.mts +0 -0
  404. /package/lib/types/graph/{validation → engine/validation}/index.d.cts +0 -0
  405. /package/lib/types/graph/{validation → engine/validation}/index.d.mts +0 -0
  406. /package/lib/types/graph/{nodes → shared/nodes}/agent.d.cts +0 -0
  407. /package/lib/types/graph/{nodes → shared/nodes}/agent.d.mts +0 -0
  408. /package/lib/types/graph/{nodes → shared/nodes}/base.d.cts +0 -0
  409. /package/lib/types/graph/{nodes → shared/nodes}/base.d.mts +0 -0
  410. /package/lib/types/graph/{nodes → shared/nodes}/category-styles.d.cts +0 -0
  411. /package/lib/types/graph/{nodes → shared/nodes}/category-styles.d.mts +0 -0
  412. /package/lib/types/graph/{nodes → shared/nodes}/flow-control.d.cts +0 -0
  413. /package/lib/types/graph/{nodes → shared/nodes}/flow-control.d.mts +0 -0
  414. /package/lib/types/graph/{nodes → shared/nodes}/index.d.cts +0 -0
  415. /package/lib/types/graph/{nodes → shared/nodes}/index.d.mts +0 -0
  416. /package/lib/types/graph/{nodes → shared/nodes}/triggers.d.cts +0 -0
  417. /package/lib/types/graph/{nodes → shared/nodes}/triggers.d.mts +0 -0
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ForeachGraphNodeExecutor = void 0;
4
+ const constants_js_1 = require("./../constants.cjs");
5
+ const constants_js_2 = require("./../../shared/constants.cjs");
6
+ const GraphInputError_js_1 = require("./../errors/GraphInputError.cjs");
7
+ const GraphLoopLimitError_js_1 = require("./../errors/GraphLoopLimitError.cjs");
8
+ /**
9
+ * Executor for `core.loop.foreach` nodes.
10
+ *
11
+ * Expects input:
12
+ * - `items`: array of values to iterate over
13
+ * - `state?`: optional initial state
14
+ *
15
+ * Produces output:
16
+ * - `results`: array of body outputs (in item order)
17
+ * - `state?`: final state
18
+ * - `iterations`: number of iterations executed
19
+ */
20
+ class ForeachGraphNodeExecutor {
21
+ constructor(engine) {
22
+ this.engine = engine;
23
+ }
24
+ async execute(input, context) {
25
+ const metadata = this.extractMetadata(context);
26
+ const items = input.items;
27
+ const maxIterations = metadata.maxIterations ?? constants_js_1.GRAPH_DEFAULT_MAX_FOREACH_ITERATIONS;
28
+ if (!Array.isArray(items)) {
29
+ throw new GraphInputError_js_1.GraphInputError("foreach input 'items' must be an array");
30
+ }
31
+ if (items.length > maxIterations) {
32
+ throw new GraphLoopLimitError_js_1.GraphLoopLimitError(`foreach exceeded max iterations (${items.length} > ${maxIterations})`);
33
+ }
34
+ const itemPort = metadata.itemPort ?? "item";
35
+ const resultPort = metadata.resultPort ?? "result";
36
+ const statePort = metadata.statePort ?? "state";
37
+ const bodyWorkflow = metadata.body;
38
+ const results = [];
39
+ let state = input.state;
40
+ await context.emit({ type: constants_js_2.GraphExecutionEventType.LOOP_STARTED });
41
+ for (let i = 0; i < items.length; i++) {
42
+ await context.emit({
43
+ type: constants_js_2.GraphExecutionEventType.LOOP_ITERATION_STARTED,
44
+ iteration: i,
45
+ });
46
+ const childInputs = {
47
+ [itemPort]: items[i],
48
+ index: i,
49
+ };
50
+ if (state !== undefined)
51
+ childInputs[statePort] = state;
52
+ const childResult = await this.engine.execute(bodyWorkflow, childInputs, {
53
+ parentRunId: context.runId,
54
+ path: [...context.path, `iteration:${i}`],
55
+ });
56
+ results.push(childResult.outputs[resultPort]);
57
+ if (childResult.outputs[statePort] !== undefined) {
58
+ state = childResult.outputs[statePort];
59
+ }
60
+ await context.emit({
61
+ type: constants_js_2.GraphExecutionEventType.LOOP_ITERATION_COMPLETED,
62
+ iteration: i,
63
+ });
64
+ }
65
+ await context.emit({ type: constants_js_2.GraphExecutionEventType.LOOP_COMPLETED });
66
+ const output = {
67
+ results,
68
+ iterations: items.length,
69
+ };
70
+ if (state !== undefined)
71
+ output[statePort] = state;
72
+ return output;
73
+ }
74
+ extractMetadata(context) {
75
+ const raw = context.node.graph?.metadata?.loop ??
76
+ context.metadata?.loop;
77
+ if (!raw) {
78
+ throw new GraphInputError_js_1.GraphInputError("foreach node is missing loop metadata");
79
+ }
80
+ return raw;
81
+ }
82
+ }
83
+ exports.ForeachGraphNodeExecutor = ForeachGraphNodeExecutor;
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9yZWFjaEdyYXBoTm9kZUV4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2dyYXBoL2VuZ2luZS9sb29wcy9Gb3JlYWNoR3JhcGhOb2RlRXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBV0EsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLDBCQUFxQjtBQUNwRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsb0NBQStCO0FBQ2pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsdUNBQWtDO0FBQzVELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSwyQ0FBc0M7QUFFcEU7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLE9BQU8sd0JBQXdCO0lBQ25DLFlBQTZCLE1BQTRCO1FBQTVCLFdBQU0sR0FBTixNQUFNLENBQXNCO0lBQUcsQ0FBQztJQUU3RCxLQUFLLENBQUMsT0FBTyxDQUNYLEtBQTJCLEVBQzNCLE9BQThCO1FBRTlCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUMxQixNQUFNLGFBQWEsR0FDakIsUUFBUSxDQUFDLGFBQWEsSUFBSSxvQ0FBb0MsQ0FBQztRQUVqRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxlQUFlLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLGFBQWEsRUFBRSxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxtQkFBbUIsQ0FDM0Isb0NBQW9DLEtBQUssQ0FBQyxNQUFNLE1BQU0sYUFBYSxHQUFHLENBQ3ZFLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUM7UUFDN0MsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUM7UUFDbkQsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUM7UUFDaEQsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQStCLENBQUM7UUFFOUQsTUFBTSxPQUFPLEdBQWMsRUFBRSxDQUFDO1FBQzlCLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFFeEIsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFFbkUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN0QyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ2pCLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxzQkFBc0I7Z0JBQ3BELFNBQVMsRUFBRSxDQUFDO2FBQ2IsQ0FBQyxDQUFDO1lBRUgsTUFBTSxXQUFXLEdBQXlCO2dCQUN4QyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLEtBQUssRUFBRSxDQUFDO2FBQ1QsQ0FBQztZQUNGLElBQUksS0FBSyxLQUFLLFNBQVM7Z0JBQUUsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUV4RCxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUMzQyxZQUFZLEVBQ1osV0FBVyxFQUNYO2dCQUNFLFdBQVcsRUFBRSxPQUFPLENBQUMsS0FBSztnQkFDMUIsSUFBSSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUM7YUFDMUMsQ0FDRixDQUFDO1lBRUYsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDOUMsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNqRCxLQUFLLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6QyxDQUFDO1lBRUQsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNqQixJQUFJLEVBQUUsdUJBQXVCLENBQUMsd0JBQXdCO2dCQUN0RCxTQUFTLEVBQUUsQ0FBQzthQUNiLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUVyRSxNQUFNLE1BQU0sR0FBeUI7WUFDbkMsT0FBTztZQUNQLFVBQVUsRUFBRSxLQUFLLENBQUMsTUFBTTtTQUN6QixDQUFDO1FBQ0YsSUFBSSxLQUFLLEtBQUssU0FBUztZQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDbkQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxPQUE4QjtRQUNwRCxNQUFNLEdBQUcsR0FBSSxPQUFPLENBQUMsSUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSTtZQUNwRCxPQUFPLENBQUMsUUFBZ0IsRUFBRSxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsTUFBTSxJQUFJLGVBQWUsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFDRCxPQUFPLEdBQXdCLENBQUM7SUFDbEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9ncmFwaC9sb29wcy9Gb3JlYWNoR3JhcGhOb2RlRXhlY3V0b3JcbiAqIEBzdW1tYXJ5IEZvcmVhY2ggbG9vcCBub2RlIGV4ZWN1dG9yLlxuICogQGRlc2NyaXB0aW9uIEV4ZWN1dGVzIGEgYm9keSB3b3JrZmxvdyBvbmNlIHBlciBpdGVtIGluIHRoZSBpbnB1dCBhcnJheSwgY29sbGVjdGluZyByZXN1bHRzIGluIG9yZGVyLlxuICovXG5pbXBvcnQgdHlwZSB7IEdyYXBoTm9kZUV4ZWN1dG9yIH0gZnJvbSBcIi4uL2V4ZWN1dGlvbi9HcmFwaE5vZGVFeGVjdXRvclwiO1xuaW1wb3J0IHR5cGUgeyBHcmFwaEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tIFwiLi4vZXhlY3V0aW9uL0dyYXBoRXhlY3V0aW9uQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBHcmFwaEV4ZWN1dGlvbkVuZ2luZSB9IGZyb20gXCIuLi9leGVjdXRpb24vR3JhcGhFeGVjdXRpb25FbmdpbmVcIjtcbmltcG9ydCB0eXBlIHsgR3JhcGhFeGVjdXRpb25WYWx1ZXMsIEdyYXBoTG9vcE1ldGFkYXRhIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoV29ya2Zsb3dEZWZpbml0aW9uIH0gZnJvbSBcIkBkZWNhZi10cy91aS1kZWNvcmF0b3JzL2dyYXBoXCI7XG5cbmltcG9ydCB7IEdSQVBIX0RFRkFVTFRfTUFYX0ZPUkVBQ0hfSVRFUkFUSU9OUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IEdyYXBoRXhlY3V0aW9uRXZlbnRUeXBlIH0gZnJvbSBcIi4uLy4uL3NoYXJlZC9jb25zdGFudHNcIjtcbmltcG9ydCB7IEdyYXBoSW5wdXRFcnJvciB9IGZyb20gXCIuLi9lcnJvcnMvR3JhcGhJbnB1dEVycm9yXCI7XG5pbXBvcnQgeyBHcmFwaExvb3BMaW1pdEVycm9yIH0gZnJvbSBcIi4uL2Vycm9ycy9HcmFwaExvb3BMaW1pdEVycm9yXCI7XG5cbi8qKlxuICogRXhlY3V0b3IgZm9yIGBjb3JlLmxvb3AuZm9yZWFjaGAgbm9kZXMuXG4gKlxuICogRXhwZWN0cyBpbnB1dDpcbiAqIC0gYGl0ZW1zYDogYXJyYXkgb2YgdmFsdWVzIHRvIGl0ZXJhdGUgb3ZlclxuICogLSBgc3RhdGU/YDogb3B0aW9uYWwgaW5pdGlhbCBzdGF0ZVxuICpcbiAqIFByb2R1Y2VzIG91dHB1dDpcbiAqIC0gYHJlc3VsdHNgOiBhcnJheSBvZiBib2R5IG91dHB1dHMgKGluIGl0ZW0gb3JkZXIpXG4gKiAtIGBzdGF0ZT9gOiBmaW5hbCBzdGF0ZVxuICogLSBgaXRlcmF0aW9uc2A6IG51bWJlciBvZiBpdGVyYXRpb25zIGV4ZWN1dGVkXG4gKi9cbmV4cG9ydCBjbGFzcyBGb3JlYWNoR3JhcGhOb2RlRXhlY3V0b3IgaW1wbGVtZW50cyBHcmFwaE5vZGVFeGVjdXRvciB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZW5naW5lOiBHcmFwaEV4ZWN1dGlvbkVuZ2luZSkge31cblxuICBhc3luYyBleGVjdXRlKFxuICAgIGlucHV0OiBHcmFwaEV4ZWN1dGlvblZhbHVlcyxcbiAgICBjb250ZXh0OiBHcmFwaEV4ZWN1dGlvbkNvbnRleHRcbiAgKTogUHJvbWlzZTxHcmFwaEV4ZWN1dGlvblZhbHVlcz4ge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5leHRyYWN0TWV0YWRhdGEoY29udGV4dCk7XG4gICAgY29uc3QgaXRlbXMgPSBpbnB1dC5pdGVtcztcbiAgICBjb25zdCBtYXhJdGVyYXRpb25zID1cbiAgICAgIG1ldGFkYXRhLm1heEl0ZXJhdGlvbnMgPz8gR1JBUEhfREVGQVVMVF9NQVhfRk9SRUFDSF9JVEVSQVRJT05TO1xuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGl0ZW1zKSkge1xuICAgICAgdGhyb3cgbmV3IEdyYXBoSW5wdXRFcnJvcihcImZvcmVhY2ggaW5wdXQgJ2l0ZW1zJyBtdXN0IGJlIGFuIGFycmF5XCIpO1xuICAgIH1cbiAgICBpZiAoaXRlbXMubGVuZ3RoID4gbWF4SXRlcmF0aW9ucykge1xuICAgICAgdGhyb3cgbmV3IEdyYXBoTG9vcExpbWl0RXJyb3IoXG4gICAgICAgIGBmb3JlYWNoIGV4Y2VlZGVkIG1heCBpdGVyYXRpb25zICgke2l0ZW1zLmxlbmd0aH0gPiAke21heEl0ZXJhdGlvbnN9KWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaXRlbVBvcnQgPSBtZXRhZGF0YS5pdGVtUG9ydCA/PyBcIml0ZW1cIjtcbiAgICBjb25zdCByZXN1bHRQb3J0ID0gbWV0YWRhdGEucmVzdWx0UG9ydCA/PyBcInJlc3VsdFwiO1xuICAgIGNvbnN0IHN0YXRlUG9ydCA9IG1ldGFkYXRhLnN0YXRlUG9ydCA/PyBcInN0YXRlXCI7XG4gICAgY29uc3QgYm9keVdvcmtmbG93ID0gbWV0YWRhdGEuYm9keSBhcyBHcmFwaFdvcmtmbG93RGVmaW5pdGlvbjtcblxuICAgIGNvbnN0IHJlc3VsdHM6IHVua25vd25bXSA9IFtdO1xuICAgIGxldCBzdGF0ZSA9IGlucHV0LnN0YXRlO1xuXG4gICAgYXdhaXQgY29udGV4dC5lbWl0KHsgdHlwZTogR3JhcGhFeGVjdXRpb25FdmVudFR5cGUuTE9PUF9TVEFSVEVEIH0pO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgYXdhaXQgY29udGV4dC5lbWl0KHtcbiAgICAgICAgdHlwZTogR3JhcGhFeGVjdXRpb25FdmVudFR5cGUuTE9PUF9JVEVSQVRJT05fU1RBUlRFRCxcbiAgICAgICAgaXRlcmF0aW9uOiBpLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNoaWxkSW5wdXRzOiBHcmFwaEV4ZWN1dGlvblZhbHVlcyA9IHtcbiAgICAgICAgW2l0ZW1Qb3J0XTogaXRlbXNbaV0sXG4gICAgICAgIGluZGV4OiBpLFxuICAgICAgfTtcbiAgICAgIGlmIChzdGF0ZSAhPT0gdW5kZWZpbmVkKSBjaGlsZElucHV0c1tzdGF0ZVBvcnRdID0gc3RhdGU7XG5cbiAgICAgIGNvbnN0IGNoaWxkUmVzdWx0ID0gYXdhaXQgdGhpcy5lbmdpbmUuZXhlY3V0ZShcbiAgICAgICAgYm9keVdvcmtmbG93LFxuICAgICAgICBjaGlsZElucHV0cyxcbiAgICAgICAge1xuICAgICAgICAgIHBhcmVudFJ1bklkOiBjb250ZXh0LnJ1bklkLFxuICAgICAgICAgIHBhdGg6IFsuLi5jb250ZXh0LnBhdGgsIGBpdGVyYXRpb246JHtpfWBdLFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICByZXN1bHRzLnB1c2goY2hpbGRSZXN1bHQub3V0cHV0c1tyZXN1bHRQb3J0XSk7XG4gICAgICBpZiAoY2hpbGRSZXN1bHQub3V0cHV0c1tzdGF0ZVBvcnRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3RhdGUgPSBjaGlsZFJlc3VsdC5vdXRwdXRzW3N0YXRlUG9ydF07XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGNvbnRleHQuZW1pdCh7XG4gICAgICAgIHR5cGU6IEdyYXBoRXhlY3V0aW9uRXZlbnRUeXBlLkxPT1BfSVRFUkFUSU9OX0NPTVBMRVRFRCxcbiAgICAgICAgaXRlcmF0aW9uOiBpLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgY29udGV4dC5lbWl0KHsgdHlwZTogR3JhcGhFeGVjdXRpb25FdmVudFR5cGUuTE9PUF9DT01QTEVURUQgfSk7XG5cbiAgICBjb25zdCBvdXRwdXQ6IEdyYXBoRXhlY3V0aW9uVmFsdWVzID0ge1xuICAgICAgcmVzdWx0cyxcbiAgICAgIGl0ZXJhdGlvbnM6IGl0ZW1zLmxlbmd0aCxcbiAgICB9O1xuICAgIGlmIChzdGF0ZSAhPT0gdW5kZWZpbmVkKSBvdXRwdXRbc3RhdGVQb3J0XSA9IHN0YXRlO1xuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3RNZXRhZGF0YShjb250ZXh0OiBHcmFwaEV4ZWN1dGlvbkNvbnRleHQpOiBHcmFwaExvb3BNZXRhZGF0YSB7XG4gICAgY29uc3QgcmF3ID0gKGNvbnRleHQubm9kZSBhcyBhbnkpLmdyYXBoPy5tZXRhZGF0YT8ubG9vcCA/P1xuICAgICAgKGNvbnRleHQubWV0YWRhdGEgYXMgYW55KT8ubG9vcDtcbiAgICBpZiAoIXJhdykge1xuICAgICAgdGhyb3cgbmV3IEdyYXBoSW5wdXRFcnJvcihcImZvcmVhY2ggbm9kZSBpcyBtaXNzaW5nIGxvb3AgbWV0YWRhdGFcIik7XG4gICAgfVxuICAgIHJldHVybiByYXcgYXMgR3JhcGhMb29wTWV0YWRhdGE7XG4gIH1cbn1cbiJdfQ==
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRm9yZWFjaEdyYXBoTm9kZUV4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiRm9yZWFjaEdyYXBoTm9kZUV4ZWN1dG9yLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG9EQUF5RTtBQUN6RSw4REFBc0U7QUFDdEUsdUVBQWlFO0FBQ2pFLCtFQUF5RTtBQUN6RTs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQWEsd0JBQXdCO0lBQ2pDLFlBQVksTUFBTTtRQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUMxQixNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxJQUFJLG1EQUFvQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDeEIsTUFBTSxJQUFJLG9DQUFlLENBQUMsd0NBQXdDLENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLGFBQWEsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSw0Q0FBbUIsQ0FBQyxvQ0FBb0MsS0FBSyxDQUFDLE1BQU0sTUFBTSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQzFHLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQztRQUM3QyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQztRQUNuRCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQztRQUNoRCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ25DLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3hCLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxzQ0FBdUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEMsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNmLElBQUksRUFBRSxzQ0FBdUIsQ0FBQyxzQkFBc0I7Z0JBQ3BELFNBQVMsRUFBRSxDQUFDO2FBQ2YsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxXQUFXLEdBQUc7Z0JBQ2hCLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDcEIsS0FBSyxFQUFFLENBQUM7YUFDWCxDQUFDO1lBQ0YsSUFBSSxLQUFLLEtBQUssU0FBUztnQkFDbkIsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNuQyxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUU7Z0JBQ3JFLFdBQVcsRUFBRSxPQUFPLENBQUMsS0FBSztnQkFDMUIsSUFBSSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUM7YUFDNUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDOUMsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUMvQyxLQUFLLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMzQyxDQUFDO1lBQ0QsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNmLElBQUksRUFBRSxzQ0FBdUIsQ0FBQyx3QkFBd0I7Z0JBQ3RELFNBQVMsRUFBRSxDQUFDO2FBQ2YsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUNELE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxzQ0FBdUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLE1BQU0sTUFBTSxHQUFHO1lBQ1gsT0FBTztZQUNQLFVBQVUsRUFBRSxLQUFLLENBQUMsTUFBTTtTQUMzQixDQUFDO1FBQ0YsSUFBSSxLQUFLLEtBQUssU0FBUztZQUNuQixNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzlCLE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFDRCxlQUFlLENBQUMsT0FBTztRQUNuQixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSTtZQUMxQyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDUCxNQUFNLElBQUksb0NBQWUsQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7Q0FDSjtBQTlERCw0REE4REM7QUFDRCxzMlFBQXMyUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdSQVBIX0RFRkFVTFRfTUFYX0ZPUkVBQ0hfSVRFUkFUSU9OUyB9IGZyb20gXCIuLy4uL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgR3JhcGhFeGVjdXRpb25FdmVudFR5cGUgfSBmcm9tIFwiLi8uLi8uLi9zaGFyZWQvY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBHcmFwaElucHV0RXJyb3IgfSBmcm9tIFwiLi8uLi9lcnJvcnMvR3JhcGhJbnB1dEVycm9yLmpzXCI7XG5pbXBvcnQgeyBHcmFwaExvb3BMaW1pdEVycm9yIH0gZnJvbSBcIi4vLi4vZXJyb3JzL0dyYXBoTG9vcExpbWl0RXJyb3IuanNcIjtcbi8qKlxuICogRXhlY3V0b3IgZm9yIGBjb3JlLmxvb3AuZm9yZWFjaGAgbm9kZXMuXG4gKlxuICogRXhwZWN0cyBpbnB1dDpcbiAqIC0gYGl0ZW1zYDogYXJyYXkgb2YgdmFsdWVzIHRvIGl0ZXJhdGUgb3ZlclxuICogLSBgc3RhdGU/YDogb3B0aW9uYWwgaW5pdGlhbCBzdGF0ZVxuICpcbiAqIFByb2R1Y2VzIG91dHB1dDpcbiAqIC0gYHJlc3VsdHNgOiBhcnJheSBvZiBib2R5IG91dHB1dHMgKGluIGl0ZW0gb3JkZXIpXG4gKiAtIGBzdGF0ZT9gOiBmaW5hbCBzdGF0ZVxuICogLSBgaXRlcmF0aW9uc2A6IG51bWJlciBvZiBpdGVyYXRpb25zIGV4ZWN1dGVkXG4gKi9cbmV4cG9ydCBjbGFzcyBGb3JlYWNoR3JhcGhOb2RlRXhlY3V0b3Ige1xuICAgIGNvbnN0cnVjdG9yKGVuZ2luZSkge1xuICAgICAgICB0aGlzLmVuZ2luZSA9IGVuZ2luZTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuZXh0cmFjdE1ldGFkYXRhKGNvbnRleHQpO1xuICAgICAgICBjb25zdCBpdGVtcyA9IGlucHV0Lml0ZW1zO1xuICAgICAgICBjb25zdCBtYXhJdGVyYXRpb25zID0gbWV0YWRhdGEubWF4SXRlcmF0aW9ucyA/PyBHUkFQSF9ERUZBVUxUX01BWF9GT1JFQUNIX0lURVJBVElPTlM7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBHcmFwaElucHV0RXJyb3IoXCJmb3JlYWNoIGlucHV0ICdpdGVtcycgbXVzdCBiZSBhbiBhcnJheVwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gbWF4SXRlcmF0aW9ucykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEdyYXBoTG9vcExpbWl0RXJyb3IoYGZvcmVhY2ggZXhjZWVkZWQgbWF4IGl0ZXJhdGlvbnMgKCR7aXRlbXMubGVuZ3RofSA+ICR7bWF4SXRlcmF0aW9uc30pYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVBvcnQgPSBtZXRhZGF0YS5pdGVtUG9ydCA/PyBcIml0ZW1cIjtcbiAgICAgICAgY29uc3QgcmVzdWx0UG9ydCA9IG1ldGFkYXRhLnJlc3VsdFBvcnQgPz8gXCJyZXN1bHRcIjtcbiAgICAgICAgY29uc3Qgc3RhdGVQb3J0ID0gbWV0YWRhdGEuc3RhdGVQb3J0ID8/IFwic3RhdGVcIjtcbiAgICAgICAgY29uc3QgYm9keVdvcmtmbG93ID0gbWV0YWRhdGEuYm9keTtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgICAgICBsZXQgc3RhdGUgPSBpbnB1dC5zdGF0ZTtcbiAgICAgICAgYXdhaXQgY29udGV4dC5lbWl0KHsgdHlwZTogR3JhcGhFeGVjdXRpb25FdmVudFR5cGUuTE9PUF9TVEFSVEVEIH0pO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmVtaXQoe1xuICAgICAgICAgICAgICAgIHR5cGU6IEdyYXBoRXhlY3V0aW9uRXZlbnRUeXBlLkxPT1BfSVRFUkFUSU9OX1NUQVJURUQsXG4gICAgICAgICAgICAgICAgaXRlcmF0aW9uOiBpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZElucHV0cyA9IHtcbiAgICAgICAgICAgICAgICBbaXRlbVBvcnRdOiBpdGVtc1tpXSxcbiAgICAgICAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoc3RhdGUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBjaGlsZElucHV0c1tzdGF0ZVBvcnRdID0gc3RhdGU7XG4gICAgICAgICAgICBjb25zdCBjaGlsZFJlc3VsdCA9IGF3YWl0IHRoaXMuZW5naW5lLmV4ZWN1dGUoYm9keVdvcmtmbG93LCBjaGlsZElucHV0cywge1xuICAgICAgICAgICAgICAgIHBhcmVudFJ1bklkOiBjb250ZXh0LnJ1bklkLFxuICAgICAgICAgICAgICAgIHBhdGg6IFsuLi5jb250ZXh0LnBhdGgsIGBpdGVyYXRpb246JHtpfWBdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2goY2hpbGRSZXN1bHQub3V0cHV0c1tyZXN1bHRQb3J0XSk7XG4gICAgICAgICAgICBpZiAoY2hpbGRSZXN1bHQub3V0cHV0c1tzdGF0ZVBvcnRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZSA9IGNoaWxkUmVzdWx0Lm91dHB1dHNbc3RhdGVQb3J0XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuZW1pdCh7XG4gICAgICAgICAgICAgICAgdHlwZTogR3JhcGhFeGVjdXRpb25FdmVudFR5cGUuTE9PUF9JVEVSQVRJT05fQ09NUExFVEVELFxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbjogaSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IGNvbnRleHQuZW1pdCh7IHR5cGU6IEdyYXBoRXhlY3V0aW9uRXZlbnRUeXBlLkxPT1BfQ09NUExFVEVEIH0pO1xuICAgICAgICBjb25zdCBvdXRwdXQgPSB7XG4gICAgICAgICAgICByZXN1bHRzLFxuICAgICAgICAgICAgaXRlcmF0aW9uczogaXRlbXMubGVuZ3RoLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoc3RhdGUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIG91dHB1dFtzdGF0ZVBvcnRdID0gc3RhdGU7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuICAgIGV4dHJhY3RNZXRhZGF0YShjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IHJhdyA9IGNvbnRleHQubm9kZS5ncmFwaD8ubWV0YWRhdGE/Lmxvb3AgPz9cbiAgICAgICAgICAgIGNvbnRleHQubWV0YWRhdGE/Lmxvb3A7XG4gICAgICAgIGlmICghcmF3KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgR3JhcGhJbnB1dEVycm9yKFwiZm9yZWFjaCBub2RlIGlzIG1pc3NpbmcgbG9vcCBtZXRhZGF0YVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmF3O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVJtOXlaV0ZqYUVkeVlYQm9UbTlrWlVWNFpXTjFkRzl5TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dkxpNHZMaTR2TGk0dmMzSmpMMmR5WVhCb0wyVnVaMmx1WlM5c2IyOXdjeTlHYjNKbFlXTm9SM0poY0doT2IyUmxSWGhsWTNWMGIzSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCVjBFc1QwRkJUeXhGUVVGRkxHOURRVUZ2UXl4RlFVRkZMREJDUVVGeFFqdEJRVU53UlN4UFFVRlBMRVZCUVVVc2RVSkJRWFZDTEVWQlFVVXNiME5CUVN0Q08wRkJRMnBGTEU5QlFVOHNSVUZCUlN4bFFVRmxMRVZCUVVVc2RVTkJRV3RETzBGQlF6VkVMRTlCUVU4c1JVRkJSU3h0UWtGQmJVSXNSVUZCUlN3eVEwRkJjME03UVVGRmNFVTdPenM3T3pzN096czdPMGRCVjBjN1FVRkRTQ3hOUVVGTkxFOUJRVThzZDBKQlFYZENPMGxCUTI1RExGbEJRVFpDTEUxQlFUUkNPMUZCUVRWQ0xGZEJRVTBzUjBGQlRpeE5RVUZOTEVOQlFYTkNPMGxCUVVjc1EwRkJRenRKUVVVM1JDeExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVTllMRXRCUVRKQ0xFVkJRek5DTEU5QlFUaENPMUZCUlRsQ0xFMUJRVTBzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4bFFVRmxMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03VVVGREwwTXNUVUZCVFN4TFFVRkxMRWRCUVVjc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF6dFJRVU14UWl4TlFVRk5MR0ZCUVdFc1IwRkRha0lzVVVGQlVTeERRVUZETEdGQlFXRXNTVUZCU1N4dlEwRkJiME1zUTBGQlF6dFJRVVZxUlN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNSVUZCUlN4RFFVRkRPMWxCUXpGQ0xFMUJRVTBzU1VGQlNTeGxRVUZsTEVOQlFVTXNkME5CUVhkRExFTkJRVU1zUTBGQlF6dFJRVU4wUlN4RFFVRkRPMUZCUTBRc1NVRkJTU3hMUVVGTExFTkJRVU1zVFVGQlRTeEhRVUZITEdGQlFXRXNSVUZCUlN4RFFVRkRPMWxCUTJwRExFMUJRVTBzU1VGQlNTeHRRa0ZCYlVJc1EwRkRNMElzYjBOQlFXOURMRXRCUVVzc1EwRkJReXhOUVVGTkxFMUJRVTBzWVVGQllTeEhRVUZITEVOQlEzWkZMRU5CUVVNN1VVRkRTaXhEUVVGRE8xRkJSVVFzVFVGQlRTeFJRVUZSTEVkQlFVY3NVVUZCVVN4RFFVRkRMRkZCUVZFc1NVRkJTU3hOUVVGTkxFTkJRVU03VVVGRE4wTXNUVUZCVFN4VlFVRlZMRWRCUVVjc1VVRkJVU3hEUVVGRExGVkJRVlVzU1VGQlNTeFJRVUZSTEVOQlFVTTdVVUZEYmtRc1RVRkJUU3hUUVVGVExFZEJRVWNzVVVGQlVTeERRVUZETEZOQlFWTXNTVUZCU1N4UFFVRlBMRU5CUVVNN1VVRkRhRVFzVFVGQlRTeFpRVUZaTEVkQlFVY3NVVUZCVVN4RFFVRkRMRWxCUVN0Q0xFTkJRVU03VVVGRk9VUXNUVUZCVFN4UFFVRlBMRWRCUVdNc1JVRkJSU3hEUVVGRE8xRkJRemxDTEVsQlFVa3NTMEZCU3l4SFFVRkhMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU03VVVGRmVFSXNUVUZCVFN4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzU1VGQlNTeEZRVUZGTEhWQ1FVRjFRaXhEUVVGRExGbEJRVmtzUlVGQlJTeERRVUZETEVOQlFVTTdVVUZGYmtVc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXp0WlFVTjBReXhOUVVGTkxFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTTdaMEpCUTJwQ0xFbEJRVWtzUlVGQlJTeDFRa0ZCZFVJc1EwRkJReXh6UWtGQmMwSTdaMEpCUTNCRUxGTkJRVk1zUlVGQlJTeERRVUZETzJGQlEySXNRMEZCUXl4RFFVRkRPMWxCUlVnc1RVRkJUU3hYUVVGWExFZEJRWGxDTzJkQ1FVTjRReXhEUVVGRExGRkJRVkVzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRM0JDTEV0QlFVc3NSVUZCUlN4RFFVRkRPMkZCUTFRc1EwRkJRenRaUVVOR0xFbEJRVWtzUzBGQlN5eExRVUZMTEZOQlFWTTdaMEpCUVVVc1YwRkJWeXhEUVVGRExGTkJRVk1zUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXp0WlFVVjRSQ3hOUVVGTkxGZEJRVmNzUjBGQlJ5eE5RVUZOTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVNelF5eFpRVUZaTEVWQlExb3NWMEZCVnl4RlFVTllPMmRDUVVORkxGZEJRVmNzUlVGQlJTeFBRVUZQTEVOQlFVTXNTMEZCU3p0blFrRkRNVUlzU1VGQlNTeEZRVUZGTEVOQlFVTXNSMEZCUnl4UFFVRlBMRU5CUVVNc1NVRkJTU3hGUVVGRkxHRkJRV0VzUTBGQlF5eEZRVUZGTEVOQlFVTTdZVUZETVVNc1EwRkRSaXhEUVVGRE8xbEJSVVlzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1QwRkJUeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETEVOQlFVTTdXVUZET1VNc1NVRkJTU3hYUVVGWExFTkJRVU1zVDBGQlR5eERRVUZETEZOQlFWTXNRMEZCUXl4TFFVRkxMRk5CUVZNc1JVRkJSU3hEUVVGRE8yZENRVU5xUkN4TFFVRkxMRWRCUVVjc1YwRkJWeXhEUVVGRExFOUJRVThzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0WlFVTjZReXhEUVVGRE8xbEJSVVFzVFVGQlRTeFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRPMmRDUVVOcVFpeEpRVUZKTEVWQlFVVXNkVUpCUVhWQ0xFTkJRVU1zZDBKQlFYZENPMmRDUVVOMFJDeFRRVUZUTEVWQlFVVXNRMEZCUXp0aFFVTmlMRU5CUVVNc1EwRkJRenRSUVVOTUxFTkJRVU03VVVGRlJDeE5RVUZOTEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hKUVVGSkxFVkJRVVVzZFVKQlFYVkNMRU5CUVVNc1kwRkJZeXhGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVVZ5UlN4TlFVRk5MRTFCUVUwc1IwRkJlVUk3V1VGRGJrTXNUMEZCVHp0WlFVTlFMRlZCUVZVc1JVRkJSU3hMUVVGTExFTkJRVU1zVFVGQlRUdFRRVU42UWl4RFFVRkRPMUZCUTBZc1NVRkJTU3hMUVVGTExFdEJRVXNzVTBGQlV6dFpRVUZGTEUxQlFVMHNRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU03VVVGRGJrUXNUMEZCVHl4TlFVRk5MRU5CUVVNN1NVRkRhRUlzUTBGQlF6dEpRVVZQTEdWQlFXVXNRMEZCUXl4UFFVRTRRanRSUVVOd1JDeE5RVUZOTEVkQlFVY3NSMEZCU1N4UFFVRlBMRU5CUVVNc1NVRkJXU3hEUVVGRExFdEJRVXNzUlVGQlJTeFJRVUZSTEVWQlFVVXNTVUZCU1R0WlFVTndSQ3hQUVVGUExFTkJRVU1zVVVGQlowSXNSVUZCUlN4SlFVRkpMRU5CUVVNN1VVRkRiRU1zU1VGQlNTeERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRPMWxCUTFRc1RVRkJUU3hKUVVGSkxHVkJRV1VzUTBGQlF5eDFRMEZCZFVNc1EwRkJReXhEUVVGRE8xRkJRM0pGTEVOQlFVTTdVVUZEUkN4UFFVRlBMRWRCUVhkQ0xFTkJRVU03U1VGRGJFTXNRMEZCUXp0RFFVTkdJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJBYlc5a2RXeGxJR2x1ZEdWbmNtRjBhVzl1Y3k5bmNtRndhQzlzYjI5d2N5OUdiM0psWVdOb1IzSmhjR2hPYjJSbFJYaGxZM1YwYjNKY2JpQXFJRUJ6ZFcxdFlYSjVJRVp2Y21WaFkyZ2diRzl2Y0NCdWIyUmxJR1Y0WldOMWRHOXlMbHh1SUNvZ1FHUmxjMk55YVhCMGFXOXVJRVY0WldOMWRHVnpJR0VnWW05a2VTQjNiM0pyWm14dmR5QnZibU5sSUhCbGNpQnBkR1Z0SUdsdUlIUm9aU0JwYm5CMWRDQmhjbkpoZVN3Z1kyOXNiR1ZqZEdsdVp5QnlaWE4xYkhSeklHbHVJRzl5WkdWeUxseHVJQ292WEc1cGJYQnZjblFnZEhsd1pTQjdJRWR5WVhCb1RtOWtaVVY0WldOMWRHOXlJSDBnWm5KdmJTQmNJaTR1TDJWNFpXTjFkR2x2Ymk5SGNtRndhRTV2WkdWRmVHVmpkWFJ2Y2x3aU8xeHVhVzF3YjNKMElIUjVjR1VnZXlCSGNtRndhRVY0WldOMWRHbHZia052Ym5SbGVIUWdmU0JtY205dElGd2lMaTR2WlhobFkzVjBhVzl1TDBkeVlYQm9SWGhsWTNWMGFXOXVRMjl1ZEdWNGRGd2lPMXh1YVcxd2IzSjBJSFI1Y0dVZ2V5QkhjbUZ3YUVWNFpXTjFkR2x2YmtWdVoybHVaU0I5SUdaeWIyMGdYQ0l1TGk5bGVHVmpkWFJwYjI0dlIzSmhjR2hGZUdWamRYUnBiMjVGYm1kcGJtVmNJanRjYm1sdGNHOXlkQ0IwZVhCbElIc2dSM0poY0doRmVHVmpkWFJwYjI1V1lXeDFaWE1zSUVkeVlYQm9URzl2Y0UxbGRHRmtZWFJoSUgwZ1puSnZiU0JjSWk0dUwzUjVjR1Z6WENJN1hHNXBiWEJ2Y25RZ2RIbHdaU0I3SUVkeVlYQm9WMjl5YTJac2IzZEVaV1pwYm1sMGFXOXVJSDBnWm5KdmJTQmNJa0JrWldOaFppMTBjeTkxYVMxa1pXTnZjbUYwYjNKekwyZHlZWEJvWENJN1hHNWNibWx0Y0c5eWRDQjdJRWRTUVZCSVgwUkZSa0ZWVEZSZlRVRllYMFpQVWtWQlEwaGZTVlJGVWtGVVNVOU9VeUI5SUdaeWIyMGdYQ0l1TGk5amIyNXpkR0Z1ZEhOY0lqdGNibWx0Y0c5eWRDQjdJRWR5WVhCb1JYaGxZM1YwYVc5dVJYWmxiblJVZVhCbElIMGdabkp2YlNCY0lpNHVMeTR1TDNOb1lYSmxaQzlqYjI1emRHRnVkSE5jSWp0Y2JtbHRjRzl5ZENCN0lFZHlZWEJvU1c1d2RYUkZjbkp2Y2lCOUlHWnliMjBnWENJdUxpOWxjbkp2Y25NdlIzSmhjR2hKYm5CMWRFVnljbTl5WENJN1hHNXBiWEJ2Y25RZ2V5QkhjbUZ3YUV4dmIzQk1hVzFwZEVWeWNtOXlJSDBnWm5KdmJTQmNJaTR1TDJWeWNtOXljeTlIY21Gd2FFeHZiM0JNYVcxcGRFVnljbTl5WENJN1hHNWNiaThxS2x4dUlDb2dSWGhsWTNWMGIzSWdabTl5SUdCamIzSmxMbXh2YjNBdVptOXlaV0ZqYUdBZ2JtOWtaWE11WEc0Z0tseHVJQ29nUlhod1pXTjBjeUJwYm5CMWREcGNiaUFxSUMwZ1lHbDBaVzF6WURvZ1lYSnlZWGtnYjJZZ2RtRnNkV1Z6SUhSdklHbDBaWEpoZEdVZ2IzWmxjbHh1SUNvZ0xTQmdjM1JoZEdVL1lEb2diM0IwYVc5dVlXd2dhVzVwZEdsaGJDQnpkR0YwWlZ4dUlDcGNiaUFxSUZCeWIyUjFZMlZ6SUc5MWRIQjFkRHBjYmlBcUlDMGdZSEpsYzNWc2RITmdPaUJoY25KaGVTQnZaaUJpYjJSNUlHOTFkSEIxZEhNZ0tHbHVJR2wwWlcwZ2IzSmtaWElwWEc0Z0tpQXRJR0J6ZEdGMFpUOWdPaUJtYVc1aGJDQnpkR0YwWlZ4dUlDb2dMU0JnYVhSbGNtRjBhVzl1YzJBNklHNTFiV0psY2lCdlppQnBkR1Z5WVhScGIyNXpJR1Y0WldOMWRHVmtYRzRnS2k5Y2JtVjRjRzl5ZENCamJHRnpjeUJHYjNKbFlXTm9SM0poY0doT2IyUmxSWGhsWTNWMGIzSWdhVzF3YkdWdFpXNTBjeUJIY21Gd2FFNXZaR1ZGZUdWamRYUnZjaUI3WEc0Z0lHTnZibk4wY25WamRHOXlLSEJ5YVhaaGRHVWdjbVZoWkc5dWJIa2daVzVuYVc1bE9pQkhjbUZ3YUVWNFpXTjFkR2x2YmtWdVoybHVaU2tnZTMxY2JseHVJQ0JoYzNsdVl5QmxlR1ZqZFhSbEtGeHVJQ0FnSUdsdWNIVjBPaUJIY21Gd2FFVjRaV04xZEdsdmJsWmhiSFZsY3l4Y2JpQWdJQ0JqYjI1MFpYaDBPaUJIY21Gd2FFVjRaV04xZEdsdmJrTnZiblJsZUhSY2JpQWdLVG9nVUhKdmJXbHpaVHhIY21Gd2FFVjRaV04xZEdsdmJsWmhiSFZsY3o0Z2UxeHVJQ0FnSUdOdmJuTjBJRzFsZEdGa1lYUmhJRDBnZEdocGN5NWxlSFJ5WVdOMFRXVjBZV1JoZEdFb1kyOXVkR1Y0ZENrN1hHNGdJQ0FnWTI5dWMzUWdhWFJsYlhNZ1BTQnBibkIxZEM1cGRHVnRjenRjYmlBZ0lDQmpiMjV6ZENCdFlYaEpkR1Z5WVhScGIyNXpJRDFjYmlBZ0lDQWdJRzFsZEdGa1lYUmhMbTFoZUVsMFpYSmhkR2x2Ym5NZ1B6OGdSMUpCVUVoZlJFVkdRVlZNVkY5TlFWaGZSazlTUlVGRFNGOUpWRVZTUVZSSlQwNVRPMXh1WEc0Z0lDQWdhV1lnS0NGQmNuSmhlUzVwYzBGeWNtRjVLR2wwWlcxektTa2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRWR5WVhCb1NXNXdkWFJGY25KdmNpaGNJbVp2Y21WaFkyZ2dhVzV3ZFhRZ0oybDBaVzF6SnlCdGRYTjBJR0psSUdGdUlHRnljbUY1WENJcE8xeHVJQ0FnSUgxY2JpQWdJQ0JwWmlBb2FYUmxiWE11YkdWdVozUm9JRDRnYldGNFNYUmxjbUYwYVc5dWN5a2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRWR5WVhCb1RHOXZjRXhwYldsMFJYSnliM0lvWEc0Z0lDQWdJQ0FnSUdCbWIzSmxZV05vSUdWNFkyVmxaR1ZrSUcxaGVDQnBkR1Z5WVhScGIyNXpJQ2drZTJsMFpXMXpMbXhsYm1kMGFIMGdQaUFrZTIxaGVFbDBaWEpoZEdsdmJuTjlLV0JjYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdZMjl1YzNRZ2FYUmxiVkJ2Y25RZ1BTQnRaWFJoWkdGMFlTNXBkR1Z0VUc5eWRDQS9QeUJjSW1sMFpXMWNJanRjYmlBZ0lDQmpiMjV6ZENCeVpYTjFiSFJRYjNKMElEMGdiV1YwWVdSaGRHRXVjbVZ6ZFd4MFVHOXlkQ0EvUHlCY0luSmxjM1ZzZEZ3aU8xeHVJQ0FnSUdOdmJuTjBJSE4wWVhSbFVHOXlkQ0E5SUcxbGRHRmtZWFJoTG5OMFlYUmxVRzl5ZENBL1B5QmNJbk4wWVhSbFhDSTdYRzRnSUNBZ1kyOXVjM1FnWW05a2VWZHZjbXRtYkc5M0lEMGdiV1YwWVdSaGRHRXVZbTlrZVNCaGN5QkhjbUZ3YUZkdmNtdG1iRzkzUkdWbWFXNXBkR2x2Ymp0Y2JseHVJQ0FnSUdOdmJuTjBJSEpsYzNWc2RITTZJSFZ1YTI1dmQyNWJYU0E5SUZ0ZE8xeHVJQ0FnSUd4bGRDQnpkR0YwWlNBOUlHbHVjSFYwTG5OMFlYUmxPMXh1WEc0Z0lDQWdZWGRoYVhRZ1kyOXVkR1Y0ZEM1bGJXbDBLSHNnZEhsd1pUb2dSM0poY0doRmVHVmpkWFJwYjI1RmRtVnVkRlI1Y0dVdVRFOVBVRjlUVkVGU1ZFVkVJSDBwTzF4dVhHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCcGRHVnRjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ1lYZGhhWFFnWTI5dWRHVjRkQzVsYldsMEtIdGNiaUFnSUNBZ0lDQWdkSGx3WlRvZ1IzSmhjR2hGZUdWamRYUnBiMjVGZG1WdWRGUjVjR1V1VEU5UFVGOUpWRVZTUVZSSlQwNWZVMVJCVWxSRlJDeGNiaUFnSUNBZ0lDQWdhWFJsY21GMGFXOXVPaUJwTEZ4dUlDQWdJQ0FnZlNrN1hHNWNiaUFnSUNBZ0lHTnZibk4wSUdOb2FXeGtTVzV3ZFhSek9pQkhjbUZ3YUVWNFpXTjFkR2x2YmxaaGJIVmxjeUE5SUh0Y2JpQWdJQ0FnSUNBZ1cybDBaVzFRYjNKMFhUb2dhWFJsYlhOYmFWMHNYRzRnSUNBZ0lDQWdJR2x1WkdWNE9pQnBMRnh1SUNBZ0lDQWdmVHRjYmlBZ0lDQWdJR2xtSUNoemRHRjBaU0FoUFQwZ2RXNWtaV1pwYm1Wa0tTQmphR2xzWkVsdWNIVjBjMXR6ZEdGMFpWQnZjblJkSUQwZ2MzUmhkR1U3WEc1Y2JpQWdJQ0FnSUdOdmJuTjBJR05vYVd4a1VtVnpkV3gwSUQwZ1lYZGhhWFFnZEdocGN5NWxibWRwYm1VdVpYaGxZM1YwWlNoY2JpQWdJQ0FnSUNBZ1ltOWtlVmR2Y210bWJHOTNMRnh1SUNBZ0lDQWdJQ0JqYUdsc1pFbHVjSFYwY3l4Y2JpQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJSEJoY21WdWRGSjFia2xrT2lCamIyNTBaWGgwTG5KMWJrbGtMRnh1SUNBZ0lDQWdJQ0FnSUhCaGRHZzZJRnN1TGk1amIyNTBaWGgwTG5CaGRHZ3NJR0JwZEdWeVlYUnBiMjQ2Skh0cGZXQmRMRnh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FwTzF4dVhHNGdJQ0FnSUNCeVpYTjFiSFJ6TG5CMWMyZ29ZMmhwYkdSU1pYTjFiSFF1YjNWMGNIVjBjMXR5WlhOMWJIUlFiM0owWFNrN1hHNGdJQ0FnSUNCcFppQW9ZMmhwYkdSU1pYTjFiSFF1YjNWMGNIVjBjMXR6ZEdGMFpWQnZjblJkSUNFOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJQ0FnYzNSaGRHVWdQU0JqYUdsc1pGSmxjM1ZzZEM1dmRYUndkWFJ6VzNOMFlYUmxVRzl5ZEYwN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lHRjNZV2wwSUdOdmJuUmxlSFF1WlcxcGRDaDdYRzRnSUNBZ0lDQWdJSFI1Y0dVNklFZHlZWEJvUlhobFkzVjBhVzl1UlhabGJuUlVlWEJsTGt4UFQxQmZTVlJGVWtGVVNVOU9YME5QVFZCTVJWUkZSQ3hjYmlBZ0lDQWdJQ0FnYVhSbGNtRjBhVzl1T2lCcExGeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1lYZGhhWFFnWTI5dWRHVjRkQzVsYldsMEtIc2dkSGx3WlRvZ1IzSmhjR2hGZUdWamRYUnBiMjVGZG1WdWRGUjVjR1V1VEU5UFVGOURUMDFRVEVWVVJVUWdmU2s3WEc1Y2JpQWdJQ0JqYjI1emRDQnZkWFJ3ZFhRNklFZHlZWEJvUlhobFkzVjBhVzl1Vm1Gc2RXVnpJRDBnZTF4dUlDQWdJQ0FnY21WemRXeDBjeXhjYmlBZ0lDQWdJR2wwWlhKaGRHbHZibk02SUdsMFpXMXpMbXhsYm1kMGFDeGNiaUFnSUNCOU8xeHVJQ0FnSUdsbUlDaHpkR0YwWlNBaFBUMGdkVzVrWldacGJtVmtLU0J2ZFhSd2RYUmJjM1JoZEdWUWIzSjBYU0E5SUhOMFlYUmxPMXh1SUNBZ0lISmxkSFZ5YmlCdmRYUndkWFE3WEc0Z0lIMWNibHh1SUNCd2NtbDJZWFJsSUdWNGRISmhZM1JOWlhSaFpHRjBZU2hqYjI1MFpYaDBPaUJIY21Gd2FFVjRaV04xZEdsdmJrTnZiblJsZUhRcE9pQkhjbUZ3YUV4dmIzQk5aWFJoWkdGMFlTQjdYRzRnSUNBZ1kyOXVjM1FnY21GM0lEMGdLR052Ym5SbGVIUXVibTlrWlNCaGN5QmhibmtwTG1keVlYQm9QeTV0WlhSaFpHRjBZVDh1Ykc5dmNDQS9QMXh1SUNBZ0lDQWdLR052Ym5SbGVIUXViV1YwWVdSaGRHRWdZWE1nWVc1NUtUOHViRzl2Y0R0Y2JpQWdJQ0JwWmlBb0lYSmhkeWtnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVkeVlYQm9TVzV3ZFhSRmNuSnZjaWhjSW1admNtVmhZMmdnYm05a1pTQnBjeUJ0YVhOemFXNW5JR3h2YjNBZ2JXVjBZV1JoZEdGY0lpazdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ5WVhjZ1lYTWdSM0poY0doTWIyOXdUV1YwWVdSaGRHRTdYRzRnSUgxY2JuMWNiaUpkZlE9PSJdfQ==
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GraphConditionEvaluator = void 0;
4
+ const constants_js_1 = require("./../constants.cjs");
5
+ const GraphExecutionError_js_1 = require("./../errors/GraphExecutionError.cjs");
6
+ const ConditionExpressionEvaluator_js_1 = require("./ConditionExpressionEvaluator.cjs");
7
+ /**
8
+ * Evaluates loop conditions using built-in comparison types or the
9
+ * `ConditionExpression` DSL.
10
+ */
11
+ class GraphConditionEvaluator {
12
+ constructor() {
13
+ this.expressionEvaluator = new ConditionExpressionEvaluator_js_1.ConditionExpressionEvaluator();
14
+ }
15
+ /**
16
+ * Evaluates a condition against the given state.
17
+ *
18
+ * When the condition object carries an `op` field, it is treated as a
19
+ * `ConditionExpression` (§22.3) and dispatched to the
20
+ * {@link ConditionExpressionEvaluator}. Otherwise the built-in `type`-based
21
+ * switch is used.
22
+ *
23
+ * @param condition - The condition definition.
24
+ * @param state - The current loop state.
25
+ * @returns `true` when the condition passes.
26
+ */
27
+ evaluate(condition, state) {
28
+ if (this.isConditionExpression(condition)) {
29
+ return this.expressionEvaluator.evaluate(condition, state);
30
+ }
31
+ const left = this.resolveValue(condition.left, state);
32
+ const right = condition.right;
33
+ switch (condition.type) {
34
+ case constants_js_1.GraphConditionType.TRUTHY:
35
+ return !!left;
36
+ case constants_js_1.GraphConditionType.FALSY:
37
+ return !left;
38
+ case constants_js_1.GraphConditionType.EQUALS:
39
+ return left === right;
40
+ case constants_js_1.GraphConditionType.NOT_EQUALS:
41
+ return left !== right;
42
+ case constants_js_1.GraphConditionType.GREATER_THAN:
43
+ return Number(left) > Number(right);
44
+ case constants_js_1.GraphConditionType.GREATER_THAN_OR_EQUAL:
45
+ return Number(left) >= Number(right);
46
+ case constants_js_1.GraphConditionType.LESS_THAN:
47
+ return Number(left) < Number(right);
48
+ case constants_js_1.GraphConditionType.LESS_THAN_OR_EQUAL:
49
+ return Number(left) <= Number(right);
50
+ case constants_js_1.GraphConditionType.EXISTS:
51
+ return left !== undefined && left !== null;
52
+ case constants_js_1.GraphConditionType.CUSTOM:
53
+ throw new GraphExecutionError_js_1.GraphExecutionError("Custom condition evaluators are not supported in v1", "GRAPH_CUSTOM_CONDITION_UNSUPPORTED");
54
+ default:
55
+ throw new GraphExecutionError_js_1.GraphExecutionError(`Unknown condition type '${condition.type}'`, "GRAPH_UNKNOWN_CONDITION_TYPE", { condition });
56
+ }
57
+ }
58
+ /**
59
+ * Resolves a value that may be a dotted path into the state object.
60
+ */
61
+ resolveValue(path, state) {
62
+ if (!path)
63
+ return state;
64
+ const parts = path.split(".");
65
+ let current = state;
66
+ for (const part of parts) {
67
+ if (current == null)
68
+ return undefined;
69
+ current = current[part];
70
+ }
71
+ return current;
72
+ }
73
+ /**
74
+ * Detects whether a condition object is a `ConditionExpression` (§22.3) by
75
+ * checking for the presence of an `op` field. When true, the object is
76
+ * treated as a `ConditionExpression` and dispatched to the
77
+ * {@link ConditionExpressionEvaluator}.
78
+ */
79
+ isConditionExpression(condition) {
80
+ return typeof condition.op === "string";
81
+ }
82
+ }
83
+ exports.GraphConditionEvaluator = GraphConditionEvaluator;
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhDb25kaXRpb25FdmFsdWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZ3JhcGgvZW5naW5lL2xvb3BzL0dyYXBoQ29uZGl0aW9uRXZhbHVhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVNBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSwwQkFBcUI7QUFDbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLDJDQUFzQztBQUNwRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsMENBQXVDO0FBRTlFOzs7R0FHRztBQUNILE1BQU0sT0FBTyx1QkFBdUI7SUFBcEM7UUFDbUIsd0JBQW1CLEdBQUcsSUFBSSw0QkFBNEIsRUFBRSxDQUFDO0lBOEU1RSxDQUFDO0lBNUVDOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsUUFBUSxDQUFDLFNBQXlELEVBQUUsS0FBYztRQUNoRixJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzFDLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0RCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBRTlCLFFBQVEsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3ZCLEtBQUssa0JBQWtCLENBQUMsTUFBTTtnQkFDNUIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2hCLEtBQUssa0JBQWtCLENBQUMsS0FBSztnQkFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQztZQUNmLEtBQUssa0JBQWtCLENBQUMsTUFBTTtnQkFDNUIsT0FBTyxJQUFJLEtBQUssS0FBSyxDQUFDO1lBQ3hCLEtBQUssa0JBQWtCLENBQUMsVUFBVTtnQkFDaEMsT0FBTyxJQUFJLEtBQUssS0FBSyxDQUFDO1lBQ3hCLEtBQUssa0JBQWtCLENBQUMsWUFBWTtnQkFDbEMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RDLEtBQUssa0JBQWtCLENBQUMscUJBQXFCO2dCQUMzQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsS0FBSyxrQkFBa0IsQ0FBQyxTQUFTO2dCQUMvQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEMsS0FBSyxrQkFBa0IsQ0FBQyxrQkFBa0I7Z0JBQ3hDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QyxLQUFLLGtCQUFrQixDQUFDLE1BQU07Z0JBQzVCLE9BQU8sSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDO1lBQzdDLEtBQUssa0JBQWtCLENBQUMsTUFBTTtnQkFDNUIsTUFBTSxJQUFJLG1CQUFtQixDQUMzQixxREFBcUQsRUFDckQsb0NBQW9DLENBQ3JDLENBQUM7WUFDSjtnQkFDRSxNQUFNLElBQUksbUJBQW1CLENBQzNCLDJCQUEyQixTQUFTLENBQUMsSUFBSSxHQUFHLEVBQzVDLDhCQUE4QixFQUM5QixFQUFFLFNBQVMsRUFBRSxDQUNkLENBQUM7UUFDTixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssWUFBWSxDQUFDLElBQXdCLEVBQUUsS0FBYztRQUMzRCxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsSUFBSSxPQUFPLEdBQVksS0FBSyxDQUFDO1FBQzdCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxPQUFPLElBQUksSUFBSTtnQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUN0QyxPQUFPLEdBQUksT0FBbUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0sscUJBQXFCLENBQUMsU0FBeUQ7UUFDckYsT0FBTyxPQUFRLFNBQXdDLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQztJQUMxRSxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL2dyYXBoL2xvb3BzL0dyYXBoQ29uZGl0aW9uRXZhbHVhdG9yXG4gKiBAc3VtbWFyeSBFdmFsdWF0b3IgZm9yIGJ1aWx0LWluIGxvb3AgY29uZGl0aW9uIHR5cGVzIGFuZCB0aGUgYENvbmRpdGlvbkV4cHJlc3Npb25gIERTTC5cbiAqIEBkZXNjcmlwdGlvbiBTdXBwb3J0cyBzYWZlLCBidWlsdC1pbiBjb25kaXRpb24gdHlwZXMgb25seS4gRG9lcyBOT1QgZXZhbHVhdGUgYXJiaXRyYXJ5IEphdmFTY3JpcHQgZXhwcmVzc2lvbnMuXG4gKiBXaGVuIHRoZSBjb25kaXRpb24gb2JqZWN0IGNhcnJpZXMgYW4gYG9wYCBmaWVsZCAoQUxGUkVELTUgwqc4IC8gREVDQUYtMzIgwqcyMi4zKSwgZGlzcGF0Y2hlcyB0byB0aGVcbiAqIHtAbGluayBDb25kaXRpb25FeHByZXNzaW9uRXZhbHVhdG9yfSBpbnN0ZWFkIG9mIHRoZSBidWlsdC1pbiBgdHlwZWAtYmFzZWQgc3dpdGNoLlxuICovXG5pbXBvcnQgdHlwZSB7IEdyYXBoQ29uZGl0aW9uRGVmaW5pdGlvbiB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBDb25kaXRpb25FeHByZXNzaW9uIH0gZnJvbSBcIi4uLy4uL3NoYXJlZC90eXBlc1wiO1xuaW1wb3J0IHsgR3JhcGhDb25kaXRpb25UeXBlIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgR3JhcGhFeGVjdXRpb25FcnJvciB9IGZyb20gXCIuLi9lcnJvcnMvR3JhcGhFeGVjdXRpb25FcnJvclwiO1xuaW1wb3J0IHsgQ29uZGl0aW9uRXhwcmVzc2lvbkV2YWx1YXRvciB9IGZyb20gXCIuL0NvbmRpdGlvbkV4cHJlc3Npb25FdmFsdWF0b3JcIjtcblxuLyoqXG4gKiBFdmFsdWF0ZXMgbG9vcCBjb25kaXRpb25zIHVzaW5nIGJ1aWx0LWluIGNvbXBhcmlzb24gdHlwZXMgb3IgdGhlXG4gKiBgQ29uZGl0aW9uRXhwcmVzc2lvbmAgRFNMLlxuICovXG5leHBvcnQgY2xhc3MgR3JhcGhDb25kaXRpb25FdmFsdWF0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IGV4cHJlc3Npb25FdmFsdWF0b3IgPSBuZXcgQ29uZGl0aW9uRXhwcmVzc2lvbkV2YWx1YXRvcigpO1xuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgYSBjb25kaXRpb24gYWdhaW5zdCB0aGUgZ2l2ZW4gc3RhdGUuXG4gICAqXG4gICAqIFdoZW4gdGhlIGNvbmRpdGlvbiBvYmplY3QgY2FycmllcyBhbiBgb3BgIGZpZWxkLCBpdCBpcyB0cmVhdGVkIGFzIGFcbiAgICogYENvbmRpdGlvbkV4cHJlc3Npb25gICjCpzIyLjMpIGFuZCBkaXNwYXRjaGVkIHRvIHRoZVxuICAgKiB7QGxpbmsgQ29uZGl0aW9uRXhwcmVzc2lvbkV2YWx1YXRvcn0uIE90aGVyd2lzZSB0aGUgYnVpbHQtaW4gYHR5cGVgLWJhc2VkXG4gICAqIHN3aXRjaCBpcyB1c2VkLlxuICAgKlxuICAgKiBAcGFyYW0gY29uZGl0aW9uIC0gVGhlIGNvbmRpdGlvbiBkZWZpbml0aW9uLlxuICAgKiBAcGFyYW0gc3RhdGUgLSBUaGUgY3VycmVudCBsb29wIHN0YXRlLlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgd2hlbiB0aGUgY29uZGl0aW9uIHBhc3Nlcy5cbiAgICovXG4gIGV2YWx1YXRlKGNvbmRpdGlvbjogR3JhcGhDb25kaXRpb25EZWZpbml0aW9uIHwgQ29uZGl0aW9uRXhwcmVzc2lvbiwgc3RhdGU6IHVua25vd24pOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc0NvbmRpdGlvbkV4cHJlc3Npb24oY29uZGl0aW9uKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZXhwcmVzc2lvbkV2YWx1YXRvci5ldmFsdWF0ZShjb25kaXRpb24sIHN0YXRlKTtcbiAgICB9XG5cbiAgICBjb25zdCBsZWZ0ID0gdGhpcy5yZXNvbHZlVmFsdWUoY29uZGl0aW9uLmxlZnQsIHN0YXRlKTtcbiAgICBjb25zdCByaWdodCA9IGNvbmRpdGlvbi5yaWdodDtcblxuICAgIHN3aXRjaCAoY29uZGl0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgR3JhcGhDb25kaXRpb25UeXBlLlRSVVRIWTpcbiAgICAgICAgcmV0dXJuICEhbGVmdDtcbiAgICAgIGNhc2UgR3JhcGhDb25kaXRpb25UeXBlLkZBTFNZOlxuICAgICAgICByZXR1cm4gIWxlZnQ7XG4gICAgICBjYXNlIEdyYXBoQ29uZGl0aW9uVHlwZS5FUVVBTFM6XG4gICAgICAgIHJldHVybiBsZWZ0ID09PSByaWdodDtcbiAgICAgIGNhc2UgR3JhcGhDb25kaXRpb25UeXBlLk5PVF9FUVVBTFM6XG4gICAgICAgIHJldHVybiBsZWZ0ICE9PSByaWdodDtcbiAgICAgIGNhc2UgR3JhcGhDb25kaXRpb25UeXBlLkdSRUFURVJfVEhBTjpcbiAgICAgICAgcmV0dXJuIE51bWJlcihsZWZ0KSA+IE51bWJlcihyaWdodCk7XG4gICAgICBjYXNlIEdyYXBoQ29uZGl0aW9uVHlwZS5HUkVBVEVSX1RIQU5fT1JfRVFVQUw6XG4gICAgICAgIHJldHVybiBOdW1iZXIobGVmdCkgPj0gTnVtYmVyKHJpZ2h0KTtcbiAgICAgIGNhc2UgR3JhcGhDb25kaXRpb25UeXBlLkxFU1NfVEhBTjpcbiAgICAgICAgcmV0dXJuIE51bWJlcihsZWZ0KSA8IE51bWJlcihyaWdodCk7XG4gICAgICBjYXNlIEdyYXBoQ29uZGl0aW9uVHlwZS5MRVNTX1RIQU5fT1JfRVFVQUw6XG4gICAgICAgIHJldHVybiBOdW1iZXIobGVmdCkgPD0gTnVtYmVyKHJpZ2h0KTtcbiAgICAgIGNhc2UgR3JhcGhDb25kaXRpb25UeXBlLkVYSVNUUzpcbiAgICAgICAgcmV0dXJuIGxlZnQgIT09IHVuZGVmaW5lZCAmJiBsZWZ0ICE9PSBudWxsO1xuICAgICAgY2FzZSBHcmFwaENvbmRpdGlvblR5cGUuQ1VTVE9NOlxuICAgICAgICB0aHJvdyBuZXcgR3JhcGhFeGVjdXRpb25FcnJvcihcbiAgICAgICAgICBcIkN1c3RvbSBjb25kaXRpb24gZXZhbHVhdG9ycyBhcmUgbm90IHN1cHBvcnRlZCBpbiB2MVwiLFxuICAgICAgICAgIFwiR1JBUEhfQ1VTVE9NX0NPTkRJVElPTl9VTlNVUFBPUlRFRFwiXG4gICAgICAgICk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgR3JhcGhFeGVjdXRpb25FcnJvcihcbiAgICAgICAgICBgVW5rbm93biBjb25kaXRpb24gdHlwZSAnJHtjb25kaXRpb24udHlwZX0nYCxcbiAgICAgICAgICBcIkdSQVBIX1VOS05PV05fQ09ORElUSU9OX1RZUEVcIixcbiAgICAgICAgICB7IGNvbmRpdGlvbiB9XG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIGEgdmFsdWUgdGhhdCBtYXkgYmUgYSBkb3R0ZWQgcGF0aCBpbnRvIHRoZSBzdGF0ZSBvYmplY3QuXG4gICAqL1xuICBwcml2YXRlIHJlc29sdmVWYWx1ZShwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsIHN0YXRlOiB1bmtub3duKTogdW5rbm93biB7XG4gICAgaWYgKCFwYXRoKSByZXR1cm4gc3RhdGU7XG4gICAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KFwiLlwiKTtcbiAgICBsZXQgY3VycmVudDogdW5rbm93biA9IHN0YXRlO1xuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXJ0cykge1xuICAgICAgaWYgKGN1cnJlbnQgPT0gbnVsbCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIGN1cnJlbnQgPSAoY3VycmVudCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbcGFydF07XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIERldGVjdHMgd2hldGhlciBhIGNvbmRpdGlvbiBvYmplY3QgaXMgYSBgQ29uZGl0aW9uRXhwcmVzc2lvbmAgKMKnMjIuMykgYnlcbiAgICogY2hlY2tpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiBhbiBgb3BgIGZpZWxkLiBXaGVuIHRydWUsIHRoZSBvYmplY3QgaXNcbiAgICogdHJlYXRlZCBhcyBhIGBDb25kaXRpb25FeHByZXNzaW9uYCBhbmQgZGlzcGF0Y2hlZCB0byB0aGVcbiAgICoge0BsaW5rIENvbmRpdGlvbkV4cHJlc3Npb25FdmFsdWF0b3J9LlxuICAgKi9cbiAgcHJpdmF0ZSBpc0NvbmRpdGlvbkV4cHJlc3Npb24oY29uZGl0aW9uOiBHcmFwaENvbmRpdGlvbkRlZmluaXRpb24gfCBDb25kaXRpb25FeHByZXNzaW9uKTogY29uZGl0aW9uIGlzIENvbmRpdGlvbkV4cHJlc3Npb24ge1xuICAgIHJldHVybiB0eXBlb2YgKGNvbmRpdGlvbiBhcyB1bmtub3duIGFzIHsgb3A/OiBzdHJpbmcgfSkub3AgPT09IFwic3RyaW5nXCI7XG4gIH1cbn1cbiJdfQ==
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhDb25kaXRpb25FdmFsdWF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJHcmFwaENvbmRpdGlvbkV2YWx1YXRvci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxvREFBdUQ7QUFDdkQsK0VBQXlFO0FBQ3pFLHVGQUFpRjtBQUNqRjs7O0dBR0c7QUFDSCxNQUFhLHVCQUF1QjtJQUNoQztRQUNJLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLDhEQUE0QixFQUFFLENBQUM7SUFDbEUsQ0FBQztJQUNEOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsUUFBUSxDQUFDLFNBQVMsRUFBRSxLQUFLO1FBQ3JCLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDeEMsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDOUIsUUFBUSxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDckIsS0FBSyxpQ0FBa0IsQ0FBQyxNQUFNO2dCQUMxQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDbEIsS0FBSyxpQ0FBa0IsQ0FBQyxLQUFLO2dCQUN6QixPQUFPLENBQUMsSUFBSSxDQUFDO1lBQ2pCLEtBQUssaUNBQWtCLENBQUMsTUFBTTtnQkFDMUIsT0FBTyxJQUFJLEtBQUssS0FBSyxDQUFDO1lBQzFCLEtBQUssaUNBQWtCLENBQUMsVUFBVTtnQkFDOUIsT0FBTyxJQUFJLEtBQUssS0FBSyxDQUFDO1lBQzFCLEtBQUssaUNBQWtCLENBQUMsWUFBWTtnQkFDaEMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLEtBQUssaUNBQWtCLENBQUMscUJBQXFCO2dCQUN6QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekMsS0FBSyxpQ0FBa0IsQ0FBQyxTQUFTO2dCQUM3QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEMsS0FBSyxpQ0FBa0IsQ0FBQyxrQkFBa0I7Z0JBQ3RDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6QyxLQUFLLGlDQUFrQixDQUFDLE1BQU07Z0JBQzFCLE9BQU8sSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDO1lBQy9DLEtBQUssaUNBQWtCLENBQUMsTUFBTTtnQkFDMUIsTUFBTSxJQUFJLDRDQUFtQixDQUFDLHFEQUFxRCxFQUFFLG9DQUFvQyxDQUFDLENBQUM7WUFDL0g7Z0JBQ0ksTUFBTSxJQUFJLDRDQUFtQixDQUFDLDJCQUEyQixTQUFTLENBQUMsSUFBSSxHQUFHLEVBQUUsOEJBQThCLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ25JLENBQUM7SUFDTCxDQUFDO0lBQ0Q7O09BRUc7SUFDSCxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUs7UUFDcEIsSUFBSSxDQUFDLElBQUk7WUFDTCxPQUFPLEtBQUssQ0FBQztRQUNqQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNwQixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLElBQUksT0FBTyxJQUFJLElBQUk7Z0JBQ2YsT0FBTyxTQUFTLENBQUM7WUFDckIsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUNEOzs7OztPQUtHO0lBQ0gscUJBQXFCLENBQUMsU0FBUztRQUMzQixPQUFPLE9BQU8sU0FBUyxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUM7SUFDNUMsQ0FBQztDQUNKO0FBdkVELDBEQXVFQztBQUNELDgyUEFBODJQIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR3JhcGhDb25kaXRpb25UeXBlIH0gZnJvbSBcIi4vLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBHcmFwaEV4ZWN1dGlvbkVycm9yIH0gZnJvbSBcIi4vLi4vZXJyb3JzL0dyYXBoRXhlY3V0aW9uRXJyb3IuanNcIjtcbmltcG9ydCB7IENvbmRpdGlvbkV4cHJlc3Npb25FdmFsdWF0b3IgfSBmcm9tIFwiLi9Db25kaXRpb25FeHByZXNzaW9uRXZhbHVhdG9yLmpzXCI7XG4vKipcbiAqIEV2YWx1YXRlcyBsb29wIGNvbmRpdGlvbnMgdXNpbmcgYnVpbHQtaW4gY29tcGFyaXNvbiB0eXBlcyBvciB0aGVcbiAqIGBDb25kaXRpb25FeHByZXNzaW9uYCBEU0wuXG4gKi9cbmV4cG9ydCBjbGFzcyBHcmFwaENvbmRpdGlvbkV2YWx1YXRvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZXhwcmVzc2lvbkV2YWx1YXRvciA9IG5ldyBDb25kaXRpb25FeHByZXNzaW9uRXZhbHVhdG9yKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEV2YWx1YXRlcyBhIGNvbmRpdGlvbiBhZ2FpbnN0IHRoZSBnaXZlbiBzdGF0ZS5cbiAgICAgKlxuICAgICAqIFdoZW4gdGhlIGNvbmRpdGlvbiBvYmplY3QgY2FycmllcyBhbiBgb3BgIGZpZWxkLCBpdCBpcyB0cmVhdGVkIGFzIGFcbiAgICAgKiBgQ29uZGl0aW9uRXhwcmVzc2lvbmAgKMKnMjIuMykgYW5kIGRpc3BhdGNoZWQgdG8gdGhlXG4gICAgICoge0BsaW5rIENvbmRpdGlvbkV4cHJlc3Npb25FdmFsdWF0b3J9LiBPdGhlcndpc2UgdGhlIGJ1aWx0LWluIGB0eXBlYC1iYXNlZFxuICAgICAqIHN3aXRjaCBpcyB1c2VkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvbmRpdGlvbiAtIFRoZSBjb25kaXRpb24gZGVmaW5pdGlvbi5cbiAgICAgKiBAcGFyYW0gc3RhdGUgLSBUaGUgY3VycmVudCBsb29wIHN0YXRlLlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBjb25kaXRpb24gcGFzc2VzLlxuICAgICAqL1xuICAgIGV2YWx1YXRlKGNvbmRpdGlvbiwgc3RhdGUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDb25kaXRpb25FeHByZXNzaW9uKGNvbmRpdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cHJlc3Npb25FdmFsdWF0b3IuZXZhbHVhdGUoY29uZGl0aW9uLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbGVmdCA9IHRoaXMucmVzb2x2ZVZhbHVlKGNvbmRpdGlvbi5sZWZ0LCBzdGF0ZSk7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gY29uZGl0aW9uLnJpZ2h0O1xuICAgICAgICBzd2l0Y2ggKGNvbmRpdGlvbi50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEdyYXBoQ29uZGl0aW9uVHlwZS5UUlVUSFk6XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhbGVmdDtcbiAgICAgICAgICAgIGNhc2UgR3JhcGhDb25kaXRpb25UeXBlLkZBTFNZOlxuICAgICAgICAgICAgICAgIHJldHVybiAhbGVmdDtcbiAgICAgICAgICAgIGNhc2UgR3JhcGhDb25kaXRpb25UeXBlLkVRVUFMUzpcbiAgICAgICAgICAgICAgICByZXR1cm4gbGVmdCA9PT0gcmlnaHQ7XG4gICAgICAgICAgICBjYXNlIEdyYXBoQ29uZGl0aW9uVHlwZS5OT1RfRVFVQUxTOlxuICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0ICE9PSByaWdodDtcbiAgICAgICAgICAgIGNhc2UgR3JhcGhDb25kaXRpb25UeXBlLkdSRUFURVJfVEhBTjpcbiAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKGxlZnQpID4gTnVtYmVyKHJpZ2h0KTtcbiAgICAgICAgICAgIGNhc2UgR3JhcGhDb25kaXRpb25UeXBlLkdSRUFURVJfVEhBTl9PUl9FUVVBTDpcbiAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKGxlZnQpID49IE51bWJlcihyaWdodCk7XG4gICAgICAgICAgICBjYXNlIEdyYXBoQ29uZGl0aW9uVHlwZS5MRVNTX1RIQU46XG4gICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihsZWZ0KSA8IE51bWJlcihyaWdodCk7XG4gICAgICAgICAgICBjYXNlIEdyYXBoQ29uZGl0aW9uVHlwZS5MRVNTX1RIQU5fT1JfRVFVQUw6XG4gICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihsZWZ0KSA8PSBOdW1iZXIocmlnaHQpO1xuICAgICAgICAgICAgY2FzZSBHcmFwaENvbmRpdGlvblR5cGUuRVhJU1RTOlxuICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0ICE9PSB1bmRlZmluZWQgJiYgbGVmdCAhPT0gbnVsbDtcbiAgICAgICAgICAgIGNhc2UgR3JhcGhDb25kaXRpb25UeXBlLkNVU1RPTTpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgR3JhcGhFeGVjdXRpb25FcnJvcihcIkN1c3RvbSBjb25kaXRpb24gZXZhbHVhdG9ycyBhcmUgbm90IHN1cHBvcnRlZCBpbiB2MVwiLCBcIkdSQVBIX0NVU1RPTV9DT05ESVRJT05fVU5TVVBQT1JURURcIik7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBHcmFwaEV4ZWN1dGlvbkVycm9yKGBVbmtub3duIGNvbmRpdGlvbiB0eXBlICcke2NvbmRpdGlvbi50eXBlfSdgLCBcIkdSQVBIX1VOS05PV05fQ09ORElUSU9OX1RZUEVcIiwgeyBjb25kaXRpb24gfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzb2x2ZXMgYSB2YWx1ZSB0aGF0IG1heSBiZSBhIGRvdHRlZCBwYXRoIGludG8gdGhlIHN0YXRlIG9iamVjdC5cbiAgICAgKi9cbiAgICByZXNvbHZlVmFsdWUocGF0aCwgc3RhdGUpIHtcbiAgICAgICAgaWYgKCFwYXRoKVxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICBjb25zdCBwYXJ0cyA9IHBhdGguc3BsaXQoXCIuXCIpO1xuICAgICAgICBsZXQgY3VycmVudCA9IHN0YXRlO1xuICAgICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50ID09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W3BhcnRdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXRlY3RzIHdoZXRoZXIgYSBjb25kaXRpb24gb2JqZWN0IGlzIGEgYENvbmRpdGlvbkV4cHJlc3Npb25gICjCpzIyLjMpIGJ5XG4gICAgICogY2hlY2tpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiBhbiBgb3BgIGZpZWxkLiBXaGVuIHRydWUsIHRoZSBvYmplY3QgaXNcbiAgICAgKiB0cmVhdGVkIGFzIGEgYENvbmRpdGlvbkV4cHJlc3Npb25gIGFuZCBkaXNwYXRjaGVkIHRvIHRoZVxuICAgICAqIHtAbGluayBDb25kaXRpb25FeHByZXNzaW9uRXZhbHVhdG9yfS5cbiAgICAgKi9cbiAgICBpc0NvbmRpdGlvbkV4cHJlc3Npb24oY29uZGl0aW9uKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgY29uZGl0aW9uLm9wID09PSBcInN0cmluZ1wiO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVIzSmhjR2hEYjI1a2FYUnBiMjVGZG1Gc2RXRjBiM0l1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk4dUxpOHVMaTh1TGk5emNtTXZaM0poY0dndlpXNW5hVzVsTDJ4dmIzQnpMMGR5WVhCb1EyOXVaR2wwYVc5dVJYWmhiSFZoZEc5eUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVk5CTEU5QlFVOHNSVUZCUlN4clFrRkJhMElzUlVGQlJTd3dRa0ZCY1VJN1FVRkRiRVFzVDBGQlR5eEZRVUZGTEcxQ1FVRnRRaXhGUVVGRkxESkRRVUZ6UXp0QlFVTndSU3hQUVVGUExFVkJRVVVzTkVKQlFUUkNMRVZCUVVVc01FTkJRWFZETzBGQlJUbEZPenM3UjBGSFJ6dEJRVU5JTEUxQlFVMHNUMEZCVHl4MVFrRkJkVUk3U1VGQmNFTTdVVUZEYlVJc2QwSkJRVzFDTEVkQlFVY3NTVUZCU1N3MFFrRkJORUlzUlVGQlJTeERRVUZETzBsQk9FVTFSU3hEUVVGRE8wbEJOVVZET3pzN096czdPenM3T3p0UFFWZEhPMGxCUTBnc1VVRkJVU3hEUVVGRExGTkJRWGxFTEVWQlFVVXNTMEZCWXp0UlFVTm9SaXhKUVVGSkxFbEJRVWtzUTBGQlF5eHhRa0ZCY1VJc1EwRkJReXhUUVVGVExFTkJRVU1zUlVGQlJTeERRVUZETzFsQlF6RkRMRTlCUVU4c1NVRkJTU3hEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRkZCUVZFc1EwRkJReXhUUVVGVExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdVVUZETjBRc1EwRkJRenRSUVVWRUxFMUJRVTBzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0UlFVTjBSQ3hOUVVGTkxFdEJRVXNzUjBGQlJ5eFRRVUZUTEVOQlFVTXNTMEZCU3l4RFFVRkRPMUZCUlRsQ0xGRkJRVkVzVTBGQlV5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMWxCUTNaQ0xFdEJRVXNzYTBKQlFXdENMRU5CUVVNc1RVRkJUVHRuUWtGRE5VSXNUMEZCVHl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRE8xbEJRMmhDTEV0QlFVc3NhMEpCUVd0Q0xFTkJRVU1zUzBGQlN6dG5Ra0ZETTBJc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF6dFpRVU5tTEV0QlFVc3NhMEpCUVd0Q0xFTkJRVU1zVFVGQlRUdG5Ra0ZETlVJc1QwRkJUeXhKUVVGSkxFdEJRVXNzUzBGQlN5eERRVUZETzFsQlEzaENMRXRCUVVzc2EwSkJRV3RDTEVOQlFVTXNWVUZCVlR0blFrRkRhRU1zVDBGQlR5eEpRVUZKTEV0QlFVc3NTMEZCU3l4RFFVRkRPMWxCUTNoQ0xFdEJRVXNzYTBKQlFXdENMRU5CUVVNc1dVRkJXVHRuUWtGRGJFTXNUMEZCVHl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMWxCUTNSRExFdEJRVXNzYTBKQlFXdENMRU5CUVVNc2NVSkJRWEZDTzJkQ1FVTXpReXhQUVVGUExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03V1VGRGRrTXNTMEZCU3l4clFrRkJhMElzUTBGQlF5eFRRVUZUTzJkQ1FVTXZRaXhQUVVGUExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03V1VGRGRFTXNTMEZCU3l4clFrRkJhMElzUTBGQlF5eHJRa0ZCYTBJN1owSkJRM2hETEU5QlFVOHNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0WlFVTjJReXhMUVVGTExHdENRVUZyUWl4RFFVRkRMRTFCUVUwN1owSkJRelZDTEU5QlFVOHNTVUZCU1N4TFFVRkxMRk5CUVZNc1NVRkJTU3hKUVVGSkxFdEJRVXNzU1VGQlNTeERRVUZETzFsQlF6ZERMRXRCUVVzc2EwSkJRV3RDTEVOQlFVTXNUVUZCVFR0blFrRkROVUlzVFVGQlRTeEpRVUZKTEcxQ1FVRnRRaXhEUVVNelFpeHhSRUZCY1VRc1JVRkRja1FzYjBOQlFXOURMRU5CUTNKRExFTkJRVU03V1VGRFNqdG5Ra0ZEUlN4TlFVRk5MRWxCUVVrc2JVSkJRVzFDTEVOQlF6TkNMREpDUVVFeVFpeFRRVUZUTEVOQlFVTXNTVUZCU1N4SFFVRkhMRVZCUXpWRExEaENRVUU0UWl4RlFVTTVRaXhGUVVGRkxGTkJRVk1zUlVGQlJTeERRVU5rTEVOQlFVTTdVVUZEVGl4RFFVRkRPMGxCUTBnc1EwRkJRenRKUVVWRU96dFBRVVZITzBsQlEwc3NXVUZCV1N4RFFVRkRMRWxCUVhkQ0xFVkJRVVVzUzBGQll6dFJRVU16UkN4SlFVRkpMRU5CUVVNc1NVRkJTVHRaUVVGRkxFOUJRVThzUzBGQlN5eERRVUZETzFGQlEzaENMRTFCUVUwc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRPVUlzU1VGQlNTeFBRVUZQTEVkQlFWa3NTMEZCU3l4RFFVRkRPMUZCUXpkQ0xFdEJRVXNzVFVGQlRTeEpRVUZKTEVsQlFVa3NTMEZCU3l4RlFVRkZMRU5CUVVNN1dVRkRla0lzU1VGQlNTeFBRVUZQTEVsQlFVa3NTVUZCU1R0blFrRkJSU3hQUVVGUExGTkJRVk1zUTBGQlF6dFpRVU4wUXl4UFFVRlBMRWRCUVVrc1QwRkJiVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVTjJSQ3hEUVVGRE8xRkJRMFFzVDBGQlR5eFBRVUZQTEVOQlFVTTdTVUZEYWtJc1EwRkJRenRKUVVWRU96czdPenRQUVV0SE8wbEJRMHNzY1VKQlFYRkNMRU5CUVVNc1UwRkJlVVE3VVVGRGNrWXNUMEZCVHl4UFFVRlJMRk5CUVhkRExFTkJRVU1zUlVGQlJTeExRVUZMTEZGQlFWRXNRMEZCUXp0SlFVTXhSU3hEUVVGRE8wTkJRMFlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVCdGIyUjFiR1VnYVc1MFpXZHlZWFJwYjI1ekwyZHlZWEJvTDJ4dmIzQnpMMGR5WVhCb1EyOXVaR2wwYVc5dVJYWmhiSFZoZEc5eVhHNGdLaUJBYzNWdGJXRnllU0JGZG1Gc2RXRjBiM0lnWm05eUlHSjFhV3gwTFdsdUlHeHZiM0FnWTI5dVpHbDBhVzl1SUhSNWNHVnpJR0Z1WkNCMGFHVWdZRU52Ym1ScGRHbHZia1Y0Y0hKbGMzTnBiMjVnSUVSVFRDNWNiaUFxSUVCa1pYTmpjbWx3ZEdsdmJpQlRkWEJ3YjNKMGN5QnpZV1psTENCaWRXbHNkQzFwYmlCamIyNWthWFJwYjI0Z2RIbHdaWE1nYjI1c2VTNGdSRzlsY3lCT1QxUWdaWFpoYkhWaGRHVWdZWEppYVhSeVlYSjVJRXBoZG1GVFkzSnBjSFFnWlhod2NtVnpjMmx2Ym5NdVhHNGdLaUJYYUdWdUlIUm9aU0JqYjI1a2FYUnBiMjRnYjJKcVpXTjBJR05oY25KcFpYTWdZVzRnWUc5d1lDQm1hV1ZzWkNBb1FVeEdVa1ZFTFRVZ3dxYzRJQzhnUkVWRFFVWXRNeklnd3FjeU1pNHpLU3dnWkdsemNHRjBZMmhsY3lCMGJ5QjBhR1ZjYmlBcUlIdEFiR2x1YXlCRGIyNWthWFJwYjI1RmVIQnlaWE56YVc5dVJYWmhiSFZoZEc5eWZTQnBibk4wWldGa0lHOW1JSFJvWlNCaWRXbHNkQzFwYmlCZ2RIbHdaV0F0WW1GelpXUWdjM2RwZEdOb0xseHVJQ292WEc1cGJYQnZjblFnZEhsd1pTQjdJRWR5WVhCb1EyOXVaR2wwYVc5dVJHVm1hVzVwZEdsdmJpQjlJR1p5YjIwZ1hDSXVMaTkwZVhCbGMxd2lPMXh1YVcxd2IzSjBJSFI1Y0dVZ2V5QkRiMjVrYVhScGIyNUZlSEJ5WlhOemFXOXVJSDBnWm5KdmJTQmNJaTR1THk0dUwzTm9ZWEpsWkM5MGVYQmxjMXdpTzF4dWFXMXdiM0owSUhzZ1IzSmhjR2hEYjI1a2FYUnBiMjVVZVhCbElIMGdabkp2YlNCY0lpNHVMMk52Ym5OMFlXNTBjMXdpTzF4dWFXMXdiM0owSUhzZ1IzSmhjR2hGZUdWamRYUnBiMjVGY25KdmNpQjlJR1p5YjIwZ1hDSXVMaTlsY25KdmNuTXZSM0poY0doRmVHVmpkWFJwYjI1RmNuSnZjbHdpTzF4dWFXMXdiM0owSUhzZ1EyOXVaR2wwYVc5dVJYaHdjbVZ6YzJsdmJrVjJZV3gxWVhSdmNpQjlJR1p5YjIwZ1hDSXVMME52Ym1ScGRHbHZia1Y0Y0hKbGMzTnBiMjVGZG1Gc2RXRjBiM0pjSWp0Y2JseHVMeW9xWEc0Z0tpQkZkbUZzZFdGMFpYTWdiRzl2Y0NCamIyNWthWFJwYjI1eklIVnphVzVuSUdKMWFXeDBMV2x1SUdOdmJYQmhjbWx6YjI0Z2RIbHdaWE1nYjNJZ2RHaGxYRzRnS2lCZ1EyOXVaR2wwYVc5dVJYaHdjbVZ6YzJsdmJtQWdSRk5NTGx4dUlDb3ZYRzVsZUhCdmNuUWdZMnhoYzNNZ1IzSmhjR2hEYjI1a2FYUnBiMjVGZG1Gc2RXRjBiM0lnZTF4dUlDQndjbWwyWVhSbElISmxZV1J2Ym14NUlHVjRjSEpsYzNOcGIyNUZkbUZzZFdGMGIzSWdQU0J1WlhjZ1EyOXVaR2wwYVc5dVJYaHdjbVZ6YzJsdmJrVjJZV3gxWVhSdmNpZ3BPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkZkbUZzZFdGMFpYTWdZU0JqYjI1a2FYUnBiMjRnWVdkaGFXNXpkQ0IwYUdVZ1oybDJaVzRnYzNSaGRHVXVYRzRnSUNBcVhHNGdJQ0FxSUZkb1pXNGdkR2hsSUdOdmJtUnBkR2x2YmlCdlltcGxZM1FnWTJGeWNtbGxjeUJoYmlCZ2IzQmdJR1pwWld4a0xDQnBkQ0JwY3lCMGNtVmhkR1ZrSUdGeklHRmNiaUFnSUNvZ1lFTnZibVJwZEdsdmJrVjRjSEpsYzNOcGIyNWdJQ2pDcHpJeUxqTXBJR0Z1WkNCa2FYTndZWFJqYUdWa0lIUnZJSFJvWlZ4dUlDQWdLaUI3UUd4cGJtc2dRMjl1WkdsMGFXOXVSWGh3Y21WemMybHZia1YyWVd4MVlYUnZjbjB1SUU5MGFHVnlkMmx6WlNCMGFHVWdZblZwYkhRdGFXNGdZSFI1Y0dWZ0xXSmhjMlZrWEc0Z0lDQXFJSE4zYVhSamFDQnBjeUIxYzJWa0xseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdZMjl1WkdsMGFXOXVJQzBnVkdobElHTnZibVJwZEdsdmJpQmtaV1pwYm1sMGFXOXVMbHh1SUNBZ0tpQkFjR0Z5WVcwZ2MzUmhkR1VnTFNCVWFHVWdZM1Z5Y21WdWRDQnNiMjl3SUhOMFlYUmxMbHh1SUNBZ0tpQkFjbVYwZFhKdWN5QmdkSEoxWldBZ2QyaGxiaUIwYUdVZ1kyOXVaR2wwYVc5dUlIQmhjM05sY3k1Y2JpQWdJQ292WEc0Z0lHVjJZV3gxWVhSbEtHTnZibVJwZEdsdmJqb2dSM0poY0doRGIyNWthWFJwYjI1RVpXWnBibWwwYVc5dUlId2dRMjl1WkdsMGFXOXVSWGh3Y21WemMybHZiaXdnYzNSaGRHVTZJSFZ1YTI1dmQyNHBPaUJpYjI5c1pXRnVJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NXBjME52Ym1ScGRHbHZia1Y0Y0hKbGMzTnBiMjRvWTI5dVpHbDBhVzl1S1NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUhSb2FYTXVaWGh3Y21WemMybHZia1YyWVd4MVlYUnZjaTVsZG1Gc2RXRjBaU2hqYjI1a2FYUnBiMjRzSUhOMFlYUmxLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQmpiMjV6ZENCc1pXWjBJRDBnZEdocGN5NXlaWE52YkhabFZtRnNkV1VvWTI5dVpHbDBhVzl1TG14bFpuUXNJSE4wWVhSbEtUdGNiaUFnSUNCamIyNXpkQ0J5YVdkb2RDQTlJR052Ym1ScGRHbHZiaTV5YVdkb2REdGNibHh1SUNBZ0lITjNhWFJqYUNBb1kyOXVaR2wwYVc5dUxuUjVjR1VwSUh0Y2JpQWdJQ0FnSUdOaGMyVWdSM0poY0doRGIyNWthWFJwYjI1VWVYQmxMbFJTVlZSSVdUcGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlDRWhiR1ZtZER0Y2JpQWdJQ0FnSUdOaGMyVWdSM0poY0doRGIyNWthWFJwYjI1VWVYQmxMa1pCVEZOWk9seHVJQ0FnSUNBZ0lDQnlaWFIxY200Z0lXeGxablE3WEc0Z0lDQWdJQ0JqWVhObElFZHlZWEJvUTI5dVpHbDBhVzl1Vkhsd1pTNUZVVlZCVEZNNlhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCc1pXWjBJRDA5UFNCeWFXZG9kRHRjYmlBZ0lDQWdJR05oYzJVZ1IzSmhjR2hEYjI1a2FYUnBiMjVVZVhCbExrNVBWRjlGVVZWQlRGTTZYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQnNaV1owSUNFOVBTQnlhV2RvZER0Y2JpQWdJQ0FnSUdOaGMyVWdSM0poY0doRGIyNWthWFJwYjI1VWVYQmxMa2RTUlVGVVJWSmZWRWhCVGpwY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUU1MWJXSmxjaWhzWldaMEtTQStJRTUxYldKbGNpaHlhV2RvZENrN1hHNGdJQ0FnSUNCallYTmxJRWR5WVhCb1EyOXVaR2wwYVc5dVZIbHdaUzVIVWtWQlZFVlNYMVJJUVU1ZlQxSmZSVkZWUVV3NlhHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCT2RXMWlaWElvYkdWbWRDa2dQajBnVG5WdFltVnlLSEpwWjJoMEtUdGNiaUFnSUNBZ0lHTmhjMlVnUjNKaGNHaERiMjVrYVhScGIyNVVlWEJsTGt4RlUxTmZWRWhCVGpwY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUU1MWJXSmxjaWhzWldaMEtTQThJRTUxYldKbGNpaHlhV2RvZENrN1hHNGdJQ0FnSUNCallYTmxJRWR5WVhCb1EyOXVaR2wwYVc5dVZIbHdaUzVNUlZOVFgxUklRVTVmVDFKZlJWRlZRVXc2WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJPZFcxaVpYSW9iR1ZtZENrZ1BEMGdUblZ0WW1WeUtISnBaMmgwS1R0Y2JpQWdJQ0FnSUdOaGMyVWdSM0poY0doRGIyNWthWFJwYjI1VWVYQmxMa1ZZU1ZOVVV6cGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHeGxablFnSVQwOUlIVnVaR1ZtYVc1bFpDQW1KaUJzWldaMElDRTlQU0J1ZFd4c08xeHVJQ0FnSUNBZ1kyRnpaU0JIY21Gd2FFTnZibVJwZEdsdmJsUjVjR1V1UTFWVFZFOU5PbHh1SUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUjNKaGNHaEZlR1ZqZFhScGIyNUZjbkp2Y2loY2JpQWdJQ0FnSUNBZ0lDQmNJa04xYzNSdmJTQmpiMjVrYVhScGIyNGdaWFpoYkhWaGRHOXljeUJoY21VZ2JtOTBJSE4xY0hCdmNuUmxaQ0JwYmlCMk1Wd2lMRnh1SUNBZ0lDQWdJQ0FnSUZ3aVIxSkJVRWhmUTFWVFZFOU5YME5QVGtSSlZFbFBUbDlWVGxOVlVGQlBVbFJGUkZ3aVhHNGdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSM0poY0doRmVHVmpkWFJwYjI1RmNuSnZjaWhjYmlBZ0lDQWdJQ0FnSUNCZ1ZXNXJibTkzYmlCamIyNWthWFJwYjI0Z2RIbHdaU0FuSkh0amIyNWthWFJwYjI0dWRIbHdaWDBuWUN4Y2JpQWdJQ0FnSUNBZ0lDQmNJa2RTUVZCSVgxVk9TMDVQVjA1ZlEwOU9SRWxVU1U5T1gxUlpVRVZjSWl4Y2JpQWdJQ0FnSUNBZ0lDQjdJR052Ym1ScGRHbHZiaUI5WEc0Z0lDQWdJQ0FnSUNrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGSmxjMjlzZG1WeklHRWdkbUZzZFdVZ2RHaGhkQ0J0WVhrZ1ltVWdZU0JrYjNSMFpXUWdjR0YwYUNCcGJuUnZJSFJvWlNCemRHRjBaU0J2WW1wbFkzUXVYRzRnSUNBcUwxeHVJQ0J3Y21sMllYUmxJSEpsYzI5c2RtVldZV3gxWlNod1lYUm9PaUJ6ZEhKcGJtY2dmQ0IxYm1SbFptbHVaV1FzSUhOMFlYUmxPaUIxYm10dWIzZHVLVG9nZFc1cmJtOTNiaUI3WEc0Z0lDQWdhV1lnS0NGd1lYUm9LU0J5WlhSMWNtNGdjM1JoZEdVN1hHNGdJQ0FnWTI5dWMzUWdjR0Z5ZEhNZ1BTQndZWFJvTG5Od2JHbDBLRndpTGx3aUtUdGNiaUFnSUNCc1pYUWdZM1Z5Y21WdWREb2dkVzVyYm05M2JpQTlJSE4wWVhSbE8xeHVJQ0FnSUdadmNpQW9ZMjl1YzNRZ2NHRnlkQ0J2WmlCd1lYSjBjeWtnZTF4dUlDQWdJQ0FnYVdZZ0tHTjFjbkpsYm5RZ1BUMGdiblZzYkNrZ2NtVjBkWEp1SUhWdVpHVm1hVzVsWkR0Y2JpQWdJQ0FnSUdOMWNuSmxiblFnUFNBb1kzVnljbVZ1ZENCaGN5QlNaV052Y21ROGMzUnlhVzVuTENCMWJtdHViM2R1UGlsYmNHRnlkRjA3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCamRYSnlaVzUwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFUmxkR1ZqZEhNZ2QyaGxkR2hsY2lCaElHTnZibVJwZEdsdmJpQnZZbXBsWTNRZ2FYTWdZU0JnUTI5dVpHbDBhVzl1Ulhod2NtVnpjMmx2Ym1BZ0tNS25Nakl1TXlrZ1lubGNiaUFnSUNvZ1kyaGxZMnRwYm1jZ1ptOXlJSFJvWlNCd2NtVnpaVzVqWlNCdlppQmhiaUJnYjNCZ0lHWnBaV3hrTGlCWGFHVnVJSFJ5ZFdVc0lIUm9aU0J2WW1wbFkzUWdhWE5jYmlBZ0lDb2dkSEpsWVhSbFpDQmhjeUJoSUdCRGIyNWthWFJwYjI1RmVIQnlaWE56YVc5dVlDQmhibVFnWkdsemNHRjBZMmhsWkNCMGJ5QjBhR1ZjYmlBZ0lDb2dlMEJzYVc1cklFTnZibVJwZEdsdmJrVjRjSEpsYzNOcGIyNUZkbUZzZFdGMGIzSjlMbHh1SUNBZ0tpOWNiaUFnY0hKcGRtRjBaU0JwYzBOdmJtUnBkR2x2YmtWNGNISmxjM05wYjI0b1kyOXVaR2wwYVc5dU9pQkhjbUZ3YUVOdmJtUnBkR2x2YmtSbFptbHVhWFJwYjI0Z2ZDQkRiMjVrYVhScGIyNUZlSEJ5WlhOemFXOXVLVG9nWTI5dVpHbDBhVzl1SUdseklFTnZibVJwZEdsdmJrVjRjSEpsYzNOcGIyNGdlMXh1SUNBZ0lISmxkSFZ5YmlCMGVYQmxiMllnS0dOdmJtUnBkR2x2YmlCaGN5QjFibXR1YjNkdUlHRnpJSHNnYjNBL09pQnpkSEpwYm1jZ2ZTa3ViM0FnUFQwOUlGd2ljM1J5YVc1blhDSTdYRzRnSUgxY2JuMWNiaUpkZlE9PSJdfQ==
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GraphLoopExecutionContext = void 0;
4
+ /**
5
+ * Context for a single loop execution, carrying the loop metadata and
6
+ * current iteration index.
7
+ */
8
+ class GraphLoopExecutionContext {
9
+ constructor(iteration, metadata) {
10
+ this.iteration = iteration;
11
+ this.metadata = metadata;
12
+ }
13
+ }
14
+ exports.GraphLoopExecutionContext = GraphLoopExecutionContext;
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhMb29wRXhlY3V0aW9uQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9ncmFwaC9lbmdpbmUvbG9vcHMvR3JhcGhMb29wRXhlY3V0aW9uQ29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQTs7O0dBR0c7QUFDSCxNQUFNLE9BQU8seUJBQXlCO0lBSXBDLFlBQVksU0FBaUIsRUFBRSxRQUEyQjtRQUN4RCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUMzQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL2dyYXBoL2xvb3BzL0dyYXBoTG9vcEV4ZWN1dGlvbkNvbnRleHRcbiAqIEBzdW1tYXJ5IENvbnRleHQgZm9yIGxvb3Agbm9kZSBleGVjdXRpb24uXG4gKiBAZGVzY3JpcHRpb24gQ2FycmllcyBsb29wLXNwZWNpZmljIG1ldGFkYXRhIGFuZCBpdGVyYXRpb24gc3RhdGUgZHVyaW5nIGxvb3AgZXhlY3V0aW9uLlxuICovXG5pbXBvcnQgdHlwZSB7IEdyYXBoTG9vcE1ldGFkYXRhIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5cbi8qKlxuICogQ29udGV4dCBmb3IgYSBzaW5nbGUgbG9vcCBleGVjdXRpb24sIGNhcnJ5aW5nIHRoZSBsb29wIG1ldGFkYXRhIGFuZFxuICogY3VycmVudCBpdGVyYXRpb24gaW5kZXguXG4gKi9cbmV4cG9ydCBjbGFzcyBHcmFwaExvb3BFeGVjdXRpb25Db250ZXh0IHtcbiAgcmVhZG9ubHkgaXRlcmF0aW9uOiBudW1iZXI7XG4gIHJlYWRvbmx5IG1ldGFkYXRhOiBHcmFwaExvb3BNZXRhZGF0YTtcblxuICBjb25zdHJ1Y3RvcihpdGVyYXRpb246IG51bWJlciwgbWV0YWRhdGE6IEdyYXBoTG9vcE1ldGFkYXRhKSB7XG4gICAgdGhpcy5pdGVyYXRpb24gPSBpdGVyYXRpb247XG4gICAgdGhpcy5tZXRhZGF0YSA9IG1ldGFkYXRhO1xuICB9XG59XG4iXX0=
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhMb29wRXhlY3V0aW9uQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkdyYXBoTG9vcEV4ZWN1dGlvbkNvbnRleHQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7OztHQUdHO0FBQ0gsTUFBYSx5QkFBeUI7SUFDbEMsWUFBWSxTQUFTLEVBQUUsUUFBUTtRQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztJQUM3QixDQUFDO0NBQ0o7QUFMRCw4REFLQztBQUNELHMwQ0FBczBDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb250ZXh0IGZvciBhIHNpbmdsZSBsb29wIGV4ZWN1dGlvbiwgY2FycnlpbmcgdGhlIGxvb3AgbWV0YWRhdGEgYW5kXG4gKiBjdXJyZW50IGl0ZXJhdGlvbiBpbmRleC5cbiAqL1xuZXhwb3J0IGNsYXNzIEdyYXBoTG9vcEV4ZWN1dGlvbkNvbnRleHQge1xuICAgIGNvbnN0cnVjdG9yKGl0ZXJhdGlvbiwgbWV0YWRhdGEpIHtcbiAgICAgICAgdGhpcy5pdGVyYXRpb24gPSBpdGVyYXRpb247XG4gICAgICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lSM0poY0doTWIyOXdSWGhsWTNWMGFXOXVRMjl1ZEdWNGRDNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1THk0dUx5NHVMM055WXk5bmNtRndhQzlsYm1kcGJtVXZiRzl2Y0hNdlIzSmhjR2hNYjI5d1JYaGxZM1YwYVc5dVEyOXVkR1Y0ZEM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRlBRVHM3TzBkQlIwYzdRVUZEU0N4TlFVRk5MRTlCUVU4c2VVSkJRWGxDTzBsQlNYQkRMRmxCUVZrc1UwRkJhVUlzUlVGQlJTeFJRVUV5UWp0UlFVTjRSQ3hKUVVGSkxFTkJRVU1zVTBGQlV5eEhRVUZITEZOQlFWTXNRMEZCUXp0UlFVTXpRaXhKUVVGSkxFTkJRVU1zVVVGQlVTeEhRVUZITEZGQlFWRXNRMEZCUXp0SlFVTXpRaXhEUVVGRE8wTkJRMFlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdktpcGNiaUFxSUVCdGIyUjFiR1VnYVc1MFpXZHlZWFJwYjI1ekwyZHlZWEJvTDJ4dmIzQnpMMGR5WVhCb1RHOXZjRVY0WldOMWRHbHZia052Ym5SbGVIUmNiaUFxSUVCemRXMXRZWEo1SUVOdmJuUmxlSFFnWm05eUlHeHZiM0FnYm05a1pTQmxlR1ZqZFhScGIyNHVYRzRnS2lCQVpHVnpZM0pwY0hScGIyNGdRMkZ5Y21sbGN5QnNiMjl3TFhOd1pXTnBabWxqSUcxbGRHRmtZWFJoSUdGdVpDQnBkR1Z5WVhScGIyNGdjM1JoZEdVZ1pIVnlhVzVuSUd4dmIzQWdaWGhsWTNWMGFXOXVMbHh1SUNvdlhHNXBiWEJ2Y25RZ2RIbHdaU0I3SUVkeVlYQm9URzl2Y0UxbGRHRmtZWFJoSUgwZ1puSnZiU0JjSWk0dUwzUjVjR1Z6WENJN1hHNWNiaThxS2x4dUlDb2dRMjl1ZEdWNGRDQm1iM0lnWVNCemFXNW5iR1VnYkc5dmNDQmxlR1ZqZFhScGIyNHNJR05oY25KNWFXNW5JSFJvWlNCc2IyOXdJRzFsZEdGa1lYUmhJR0Z1WkZ4dUlDb2dZM1Z5Y21WdWRDQnBkR1Z5WVhScGIyNGdhVzVrWlhndVhHNGdLaTljYm1WNGNHOXlkQ0JqYkdGemN5QkhjbUZ3YUV4dmIzQkZlR1ZqZFhScGIyNURiMjUwWlhoMElIdGNiaUFnY21WaFpHOXViSGtnYVhSbGNtRjBhVzl1T2lCdWRXMWlaWEk3WEc0Z0lISmxZV1J2Ym14NUlHMWxkR0ZrWVhSaE9pQkhjbUZ3YUV4dmIzQk5aWFJoWkdGMFlUdGNibHh1SUNCamIyNXpkSEoxWTNSdmNpaHBkR1Z5WVhScGIyNDZJRzUxYldKbGNpd2diV1YwWVdSaGRHRTZJRWR5WVhCb1RHOXZjRTFsZEdGa1lYUmhLU0I3WEc0Z0lDQWdkR2hwY3k1cGRHVnlZWFJwYjI0Z1BTQnBkR1Z5WVhScGIyNDdYRzRnSUNBZ2RHaHBjeTV0WlhSaFpHRjBZU0E5SUcxbGRHRmtZWFJoTzF4dUlDQjlYRzU5WEc0aVhYMD0iXX0=
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UntilGraphNodeExecutor = void 0;
4
+ const constants_js_1 = require("./../constants.cjs");
5
+ const constants_js_2 = require("./../../shared/constants.cjs");
6
+ const GraphInputError_js_1 = require("./../errors/GraphInputError.cjs");
7
+ const GraphLoopLimitError_js_1 = require("./../errors/GraphLoopLimitError.cjs");
8
+ const GraphConditionEvaluator_js_1 = require("./GraphConditionEvaluator.cjs");
9
+ /**
10
+ * Executor for `core.loop.until` nodes.
11
+ *
12
+ * Executes the body at least once, then checks the condition. Repeats until
13
+ * the condition evaluates to true.
14
+ */
15
+ class UntilGraphNodeExecutor {
16
+ constructor(engine) {
17
+ this.engine = engine;
18
+ this.evaluator = new GraphConditionEvaluator_js_1.GraphConditionEvaluator();
19
+ }
20
+ async execute(input, context) {
21
+ const metadata = this.extractMetadata(context);
22
+ const maxIterations = metadata.maxIterations ?? constants_js_1.GRAPH_DEFAULT_MAX_LOOP_ITERATIONS;
23
+ const condition = metadata.condition;
24
+ if (!condition) {
25
+ throw new GraphInputError_js_1.GraphInputError("until node is missing a condition");
26
+ }
27
+ const statePort = metadata.statePort ?? "state";
28
+ const bodyWorkflow = metadata.body;
29
+ let state = input.state;
30
+ let iteration = 0;
31
+ await context.emit({ type: constants_js_2.GraphExecutionEventType.LOOP_STARTED });
32
+ let shouldStop = false;
33
+ do {
34
+ if (iteration >= maxIterations) {
35
+ await context.emit({
36
+ type: constants_js_2.GraphExecutionEventType.LOOP_LIMIT_REACHED,
37
+ iteration,
38
+ });
39
+ throw new GraphLoopLimitError_js_1.GraphLoopLimitError(`until loop exceeded max iterations (${maxIterations})`);
40
+ }
41
+ await context.emit({
42
+ type: constants_js_2.GraphExecutionEventType.LOOP_ITERATION_STARTED,
43
+ iteration,
44
+ });
45
+ const childResult = await this.engine.execute(bodyWorkflow, { [statePort]: state, iteration }, {
46
+ parentRunId: context.runId,
47
+ path: [...context.path, `iteration:${iteration}`],
48
+ });
49
+ state = childResult.outputs[statePort];
50
+ await context.emit({
51
+ type: constants_js_2.GraphExecutionEventType.LOOP_ITERATION_COMPLETED,
52
+ iteration,
53
+ });
54
+ const conditionResult = this.evaluator.evaluate(condition, state);
55
+ await context.emit({
56
+ type: constants_js_2.GraphExecutionEventType.LOOP_CONDITION_EVALUATED,
57
+ iteration,
58
+ payload: { result: conditionResult },
59
+ });
60
+ iteration++;
61
+ shouldStop = conditionResult;
62
+ } while (!shouldStop);
63
+ await context.emit({ type: constants_js_2.GraphExecutionEventType.LOOP_COMPLETED });
64
+ return { [statePort]: state, iterations: iteration };
65
+ }
66
+ extractMetadata(context) {
67
+ const raw = context.node.graph?.metadata?.loop ??
68
+ context.metadata?.loop;
69
+ if (!raw) {
70
+ throw new GraphInputError_js_1.GraphInputError("until node is missing loop metadata");
71
+ }
72
+ return raw;
73
+ }
74
+ }
75
+ exports.UntilGraphNodeExecutor = UntilGraphNodeExecutor;
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW50aWxHcmFwaE5vZGVFeGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9ncmFwaC9lbmdpbmUvbG9vcHMvVW50aWxHcmFwaE5vZGVFeGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsMEJBQXFCO0FBQ2pFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxvQ0FBK0I7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSx1Q0FBa0M7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLDJDQUFzQztBQUNwRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUscUNBQWtDO0FBRXBFOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLHNCQUFzQjtJQUdqQyxZQUE2QixNQUE0QjtRQUE1QixXQUFNLEdBQU4sTUFBTSxDQUFzQjtRQUZ4QyxjQUFTLEdBQUcsSUFBSSx1QkFBdUIsRUFBRSxDQUFDO0lBRUMsQ0FBQztJQUU3RCxLQUFLLENBQUMsT0FBTyxDQUNYLEtBQTJCLEVBQzNCLE9BQThCO1FBRTlCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxhQUFhLEdBQ2pCLFFBQVEsQ0FBQyxhQUFhLElBQUksaUNBQWlDLENBQUM7UUFDOUQsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksZUFBZSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDO1FBQ2hELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUErQixDQUFDO1FBRTlELElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDeEIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBRWxCLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBRW5FLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztRQUV2QixHQUFHLENBQUM7WUFDRixJQUFJLFNBQVMsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUNqQixJQUFJLEVBQUUsdUJBQXVCLENBQUMsa0JBQWtCO29CQUNoRCxTQUFTO2lCQUNWLENBQUMsQ0FBQztnQkFDSCxNQUFNLElBQUksbUJBQW1CLENBQzNCLHVDQUF1QyxhQUFhLEdBQUcsQ0FDeEQsQ0FBQztZQUNKLENBQUM7WUFFRCxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ2pCLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxzQkFBc0I7Z0JBQ3BELFNBQVM7YUFDVixDQUFDLENBQUM7WUFFSCxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUMzQyxZQUFZLEVBQ1osRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsRUFDakM7Z0JBQ0UsV0FBVyxFQUFFLE9BQU8sQ0FBQyxLQUFLO2dCQUMxQixJQUFJLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsYUFBYSxTQUFTLEVBQUUsQ0FBQzthQUNsRCxDQUNGLENBQUM7WUFFRixLQUFLLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUV2QyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ2pCLElBQUksRUFBRSx1QkFBdUIsQ0FBQyx3QkFBd0I7Z0JBQ3RELFNBQVM7YUFDVixDQUFDLENBQUM7WUFFSCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFbEUsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNqQixJQUFJLEVBQUUsdUJBQXVCLENBQUMsd0JBQXdCO2dCQUN0RCxTQUFTO2dCQUNULE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUU7YUFDckMsQ0FBQyxDQUFDO1lBRUgsU0FBUyxFQUFFLENBQUM7WUFDWixVQUFVLEdBQUcsZUFBZSxDQUFDO1FBQy9CLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtRQUV0QixNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQztRQUVyRSxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFTyxlQUFlLENBQUMsT0FBOEI7UUFDcEQsTUFBTSxHQUFHLEdBQUksT0FBTyxDQUFDLElBQVksQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUk7WUFDcEQsT0FBTyxDQUFDLFFBQWdCLEVBQUUsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNULE1BQU0sSUFBSSxlQUFlLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsT0FBTyxHQUF3QixDQUFDO0lBQ2xDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvZ3JhcGgvbG9vcHMvVW50aWxHcmFwaE5vZGVFeGVjdXRvclxuICogQHN1bW1hcnkgVW50aWwgbG9vcCBub2RlIGV4ZWN1dG9yLlxuICogQGRlc2NyaXB0aW9uIEV4ZWN1dGVzIGEgYm9keSB3b3JrZmxvdyBhdCBsZWFzdCBvbmNlIGFuZCByZXBlYXRzIHVudGlsIGEgY29uZGl0aW9uIGlzIHRydWUuXG4gKi9cbmltcG9ydCB0eXBlIHsgR3JhcGhOb2RlRXhlY3V0b3IgfSBmcm9tIFwiLi4vZXhlY3V0aW9uL0dyYXBoTm9kZUV4ZWN1dG9yXCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gXCIuLi9leGVjdXRpb24vR3JhcGhFeGVjdXRpb25Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoRXhlY3V0aW9uRW5naW5lIH0gZnJvbSBcIi4uL2V4ZWN1dGlvbi9HcmFwaEV4ZWN1dGlvbkVuZ2luZVwiO1xuaW1wb3J0IHR5cGUgeyBHcmFwaEV4ZWN1dGlvblZhbHVlcywgR3JhcGhMb29wTWV0YWRhdGEgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgR3JhcGhXb3JrZmxvd0RlZmluaXRpb24gfSBmcm9tIFwiQGRlY2FmLXRzL3VpLWRlY29yYXRvcnMvZ3JhcGhcIjtcblxuaW1wb3J0IHsgR1JBUEhfREVGQVVMVF9NQVhfTE9PUF9JVEVSQVRJT05TIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgR3JhcGhFeGVjdXRpb25FdmVudFR5cGUgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgR3JhcGhJbnB1dEVycm9yIH0gZnJvbSBcIi4uL2Vycm9ycy9HcmFwaElucHV0RXJyb3JcIjtcbmltcG9ydCB7IEdyYXBoTG9vcExpbWl0RXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzL0dyYXBoTG9vcExpbWl0RXJyb3JcIjtcbmltcG9ydCB7IEdyYXBoQ29uZGl0aW9uRXZhbHVhdG9yIH0gZnJvbSBcIi4vR3JhcGhDb25kaXRpb25FdmFsdWF0b3JcIjtcblxuLyoqXG4gKiBFeGVjdXRvciBmb3IgYGNvcmUubG9vcC51bnRpbGAgbm9kZXMuXG4gKlxuICogRXhlY3V0ZXMgdGhlIGJvZHkgYXQgbGVhc3Qgb25jZSwgdGhlbiBjaGVja3MgdGhlIGNvbmRpdGlvbi4gUmVwZWF0cyB1bnRpbFxuICogdGhlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gdHJ1ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFVudGlsR3JhcGhOb2RlRXhlY3V0b3IgaW1wbGVtZW50cyBHcmFwaE5vZGVFeGVjdXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXZhbHVhdG9yID0gbmV3IEdyYXBoQ29uZGl0aW9uRXZhbHVhdG9yKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBlbmdpbmU6IEdyYXBoRXhlY3V0aW9uRW5naW5lKSB7fVxuXG4gIGFzeW5jIGV4ZWN1dGUoXG4gICAgaW5wdXQ6IEdyYXBoRXhlY3V0aW9uVmFsdWVzLFxuICAgIGNvbnRleHQ6IEdyYXBoRXhlY3V0aW9uQ29udGV4dFxuICApOiBQcm9taXNlPEdyYXBoRXhlY3V0aW9uVmFsdWVzPiB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSB0aGlzLmV4dHJhY3RNZXRhZGF0YShjb250ZXh0KTtcbiAgICBjb25zdCBtYXhJdGVyYXRpb25zID1cbiAgICAgIG1ldGFkYXRhLm1heEl0ZXJhdGlvbnMgPz8gR1JBUEhfREVGQVVMVF9NQVhfTE9PUF9JVEVSQVRJT05TO1xuICAgIGNvbnN0IGNvbmRpdGlvbiA9IG1ldGFkYXRhLmNvbmRpdGlvbjtcbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEdyYXBoSW5wdXRFcnJvcihcInVudGlsIG5vZGUgaXMgbWlzc2luZyBhIGNvbmRpdGlvblwiKTtcbiAgICB9XG4gICAgY29uc3Qgc3RhdGVQb3J0ID0gbWV0YWRhdGEuc3RhdGVQb3J0ID8/IFwic3RhdGVcIjtcbiAgICBjb25zdCBib2R5V29ya2Zsb3cgPSBtZXRhZGF0YS5ib2R5IGFzIEdyYXBoV29ya2Zsb3dEZWZpbml0aW9uO1xuXG4gICAgbGV0IHN0YXRlID0gaW5wdXQuc3RhdGU7XG4gICAgbGV0IGl0ZXJhdGlvbiA9IDA7XG5cbiAgICBhd2FpdCBjb250ZXh0LmVtaXQoeyB0eXBlOiBHcmFwaEV4ZWN1dGlvbkV2ZW50VHlwZS5MT09QX1NUQVJURUQgfSk7XG5cbiAgICBsZXQgc2hvdWxkU3RvcCA9IGZhbHNlO1xuXG4gICAgZG8ge1xuICAgICAgaWYgKGl0ZXJhdGlvbiA+PSBtYXhJdGVyYXRpb25zKSB7XG4gICAgICAgIGF3YWl0IGNvbnRleHQuZW1pdCh7XG4gICAgICAgICAgdHlwZTogR3JhcGhFeGVjdXRpb25FdmVudFR5cGUuTE9PUF9MSU1JVF9SRUFDSEVELFxuICAgICAgICAgIGl0ZXJhdGlvbixcbiAgICAgICAgfSk7XG4gICAgICAgIHRocm93IG5ldyBHcmFwaExvb3BMaW1pdEVycm9yKFxuICAgICAgICAgIGB1bnRpbCBsb29wIGV4Y2VlZGVkIG1heCBpdGVyYXRpb25zICgke21heEl0ZXJhdGlvbnN9KWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgY29udGV4dC5lbWl0KHtcbiAgICAgICAgdHlwZTogR3JhcGhFeGVjdXRpb25FdmVudFR5cGUuTE9PUF9JVEVSQVRJT05fU1RBUlRFRCxcbiAgICAgICAgaXRlcmF0aW9uLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNoaWxkUmVzdWx0ID0gYXdhaXQgdGhpcy5lbmdpbmUuZXhlY3V0ZShcbiAgICAgICAgYm9keVdvcmtmbG93LFxuICAgICAgICB7IFtzdGF0ZVBvcnRdOiBzdGF0ZSwgaXRlcmF0aW9uIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwYXJlbnRSdW5JZDogY29udGV4dC5ydW5JZCxcbiAgICAgICAgICBwYXRoOiBbLi4uY29udGV4dC5wYXRoLCBgaXRlcmF0aW9uOiR7aXRlcmF0aW9ufWBdLFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICBzdGF0ZSA9IGNoaWxkUmVzdWx0Lm91dHB1dHNbc3RhdGVQb3J0XTtcblxuICAgICAgYXdhaXQgY29udGV4dC5lbWl0KHtcbiAgICAgICAgdHlwZTogR3JhcGhFeGVjdXRpb25FdmVudFR5cGUuTE9PUF9JVEVSQVRJT05fQ09NUExFVEVELFxuICAgICAgICBpdGVyYXRpb24sXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY29uZGl0aW9uUmVzdWx0ID0gdGhpcy5ldmFsdWF0b3IuZXZhbHVhdGUoY29uZGl0aW9uLCBzdGF0ZSk7XG5cbiAgICAgIGF3YWl0IGNvbnRleHQuZW1pdCh7XG4gICAgICAgIHR5cGU6IEdyYXBoRXhlY3V0aW9uRXZlbnRUeXBlLkxPT1BfQ09ORElUSU9OX0VWQUxVQVRFRCxcbiAgICAgICAgaXRlcmF0aW9uLFxuICAgICAgICBwYXlsb2FkOiB7IHJlc3VsdDogY29uZGl0aW9uUmVzdWx0IH0sXG4gICAgICB9KTtcblxuICAgICAgaXRlcmF0aW9uKys7XG4gICAgICBzaG91bGRTdG9wID0gY29uZGl0aW9uUmVzdWx0O1xuICAgIH0gd2hpbGUgKCFzaG91bGRTdG9wKTtcblxuICAgIGF3YWl0IGNvbnRleHQuZW1pdCh7IHR5cGU6IEdyYXBoRXhlY3V0aW9uRXZlbnRUeXBlLkxPT1BfQ09NUExFVEVEIH0pO1xuXG4gICAgcmV0dXJuIHsgW3N0YXRlUG9ydF06IHN0YXRlLCBpdGVyYXRpb25zOiBpdGVyYXRpb24gfTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdE1ldGFkYXRhKGNvbnRleHQ6IEdyYXBoRXhlY3V0aW9uQ29udGV4dCk6IEdyYXBoTG9vcE1ldGFkYXRhIHtcbiAgICBjb25zdCByYXcgPSAoY29udGV4dC5ub2RlIGFzIGFueSkuZ3JhcGg/Lm1ldGFkYXRhPy5sb29wID8/XG4gICAgICAoY29udGV4dC5tZXRhZGF0YSBhcyBhbnkpPy5sb29wO1xuICAgIGlmICghcmF3KSB7XG4gICAgICB0aHJvdyBuZXcgR3JhcGhJbnB1dEVycm9yKFwidW50aWwgbm9kZSBpcyBtaXNzaW5nIGxvb3AgbWV0YWRhdGFcIik7XG4gICAgfVxuICAgIHJldHVybiByYXcgYXMgR3JhcGhMb29wTWV0YWRhdGE7XG4gIH1cbn1cbiJdfQ==
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVW50aWxHcmFwaE5vZGVFeGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIlVudGlsR3JhcGhOb2RlRXhlY3V0b3IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0RBQXNFO0FBQ3RFLDhEQUFzRTtBQUN0RSx1RUFBaUU7QUFDakUsK0VBQXlFO0FBQ3pFLDZFQUF1RTtBQUN2RTs7Ozs7R0FLRztBQUNILE1BQWEsc0JBQXNCO0lBQy9CLFlBQVksTUFBTTtRQUNkLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxvREFBdUIsRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFDRCxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFPO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLGFBQWEsSUFBSSxnREFBaUMsQ0FBQztRQUNsRixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxvQ0FBZSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDO1FBQ2hELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDbkMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN4QixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDbEIsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLHNDQUF1QixDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDbkUsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLEdBQUcsQ0FBQztZQUNBLElBQUksU0FBUyxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUM3QixNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ2YsSUFBSSxFQUFFLHNDQUF1QixDQUFDLGtCQUFrQjtvQkFDaEQsU0FBUztpQkFDWixDQUFDLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLDRDQUFtQixDQUFDLHVDQUF1QyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1lBQzNGLENBQUM7WUFDRCxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ2YsSUFBSSxFQUFFLHNDQUF1QixDQUFDLHNCQUFzQjtnQkFDcEQsU0FBUzthQUNaLENBQUMsQ0FBQztZQUNILE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUU7Z0JBQzNGLFdBQVcsRUFBRSxPQUFPLENBQUMsS0FBSztnQkFDMUIsSUFBSSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLGFBQWEsU0FBUyxFQUFFLENBQUM7YUFDcEQsQ0FBQyxDQUFDO1lBQ0gsS0FBSyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDdkMsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNmLElBQUksRUFBRSxzQ0FBdUIsQ0FBQyx3QkFBd0I7Z0JBQ3RELFNBQVM7YUFDWixDQUFDLENBQUM7WUFDSCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEUsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNmLElBQUksRUFBRSxzQ0FBdUIsQ0FBQyx3QkFBd0I7Z0JBQ3RELFNBQVM7Z0JBQ1QsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRTthQUN2QyxDQUFDLENBQUM7WUFDSCxTQUFTLEVBQUUsQ0FBQztZQUNaLFVBQVUsR0FBRyxlQUFlLENBQUM7UUFDakMsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFO1FBQ3RCLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxzQ0FBdUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUNELGVBQWUsQ0FBQyxPQUFPO1FBQ25CLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJO1lBQzFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNQLE1BQU0sSUFBSSxvQ0FBZSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztDQUNKO0FBM0RELHdEQTJEQztBQUNELGtoUUFBa2hRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR1JBUEhfREVGQVVMVF9NQVhfTE9PUF9JVEVSQVRJT05TIH0gZnJvbSBcIi4vLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBHcmFwaEV4ZWN1dGlvbkV2ZW50VHlwZSB9IGZyb20gXCIuLy4uLy4uL3NoYXJlZC9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IEdyYXBoSW5wdXRFcnJvciB9IGZyb20gXCIuLy4uL2Vycm9ycy9HcmFwaElucHV0RXJyb3IuanNcIjtcbmltcG9ydCB7IEdyYXBoTG9vcExpbWl0RXJyb3IgfSBmcm9tIFwiLi8uLi9lcnJvcnMvR3JhcGhMb29wTGltaXRFcnJvci5qc1wiO1xuaW1wb3J0IHsgR3JhcGhDb25kaXRpb25FdmFsdWF0b3IgfSBmcm9tIFwiLi9HcmFwaENvbmRpdGlvbkV2YWx1YXRvci5qc1wiO1xuLyoqXG4gKiBFeGVjdXRvciBmb3IgYGNvcmUubG9vcC51bnRpbGAgbm9kZXMuXG4gKlxuICogRXhlY3V0ZXMgdGhlIGJvZHkgYXQgbGVhc3Qgb25jZSwgdGhlbiBjaGVja3MgdGhlIGNvbmRpdGlvbi4gUmVwZWF0cyB1bnRpbFxuICogdGhlIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gdHJ1ZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFVudGlsR3JhcGhOb2RlRXhlY3V0b3Ige1xuICAgIGNvbnN0cnVjdG9yKGVuZ2luZSkge1xuICAgICAgICB0aGlzLmVuZ2luZSA9IGVuZ2luZTtcbiAgICAgICAgdGhpcy5ldmFsdWF0b3IgPSBuZXcgR3JhcGhDb25kaXRpb25FdmFsdWF0b3IoKTtcbiAgICB9XG4gICAgYXN5bmMgZXhlY3V0ZShpbnB1dCwgY29udGV4dCkge1xuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuZXh0cmFjdE1ldGFkYXRhKGNvbnRleHQpO1xuICAgICAgICBjb25zdCBtYXhJdGVyYXRpb25zID0gbWV0YWRhdGEubWF4SXRlcmF0aW9ucyA/PyBHUkFQSF9ERUZBVUxUX01BWF9MT09QX0lURVJBVElPTlM7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IG1ldGFkYXRhLmNvbmRpdGlvbjtcbiAgICAgICAgaWYgKCFjb25kaXRpb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBHcmFwaElucHV0RXJyb3IoXCJ1bnRpbCBub2RlIGlzIG1pc3NpbmcgYSBjb25kaXRpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RhdGVQb3J0ID0gbWV0YWRhdGEuc3RhdGVQb3J0ID8/IFwic3RhdGVcIjtcbiAgICAgICAgY29uc3QgYm9keVdvcmtmbG93ID0gbWV0YWRhdGEuYm9keTtcbiAgICAgICAgbGV0IHN0YXRlID0gaW5wdXQuc3RhdGU7XG4gICAgICAgIGxldCBpdGVyYXRpb24gPSAwO1xuICAgICAgICBhd2FpdCBjb250ZXh0LmVtaXQoeyB0eXBlOiBHcmFwaEV4ZWN1dGlvbkV2ZW50VHlwZS5MT09QX1NUQVJURUQgfSk7XG4gICAgICAgIGxldCBzaG91bGRTdG9wID0gZmFsc2U7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmIChpdGVyYXRpb24gPj0gbWF4SXRlcmF0aW9ucykge1xuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEdyYXBoRXhlY3V0aW9uRXZlbnRUeXBlLkxPT1BfTElNSVRfUkVBQ0hFRCxcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0aW9uLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBHcmFwaExvb3BMaW1pdEVycm9yKGB1bnRpbCBsb29wIGV4Y2VlZGVkIG1heCBpdGVyYXRpb25zICgke21heEl0ZXJhdGlvbnN9KWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5lbWl0KHtcbiAgICAgICAgICAgICAgICB0eXBlOiBHcmFwaEV4ZWN1dGlvbkV2ZW50VHlwZS5MT09QX0lURVJBVElPTl9TVEFSVEVELFxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRSZXN1bHQgPSBhd2FpdCB0aGlzLmVuZ2luZS5leGVjdXRlKGJvZHlXb3JrZmxvdywgeyBbc3RhdGVQb3J0XTogc3RhdGUsIGl0ZXJhdGlvbiB9LCB7XG4gICAgICAgICAgICAgICAgcGFyZW50UnVuSWQ6IGNvbnRleHQucnVuSWQsXG4gICAgICAgICAgICAgICAgcGF0aDogWy4uLmNvbnRleHQucGF0aCwgYGl0ZXJhdGlvbjoke2l0ZXJhdGlvbn1gXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3RhdGUgPSBjaGlsZFJlc3VsdC5vdXRwdXRzW3N0YXRlUG9ydF07XG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmVtaXQoe1xuICAgICAgICAgICAgICAgIHR5cGU6IEdyYXBoRXhlY3V0aW9uRXZlbnRUeXBlLkxPT1BfSVRFUkFUSU9OX0NPTVBMRVRFRCxcbiAgICAgICAgICAgICAgICBpdGVyYXRpb24sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuZXZhbHVhdG9yLmV2YWx1YXRlKGNvbmRpdGlvbiwgc3RhdGUpO1xuICAgICAgICAgICAgYXdhaXQgY29udGV4dC5lbWl0KHtcbiAgICAgICAgICAgICAgICB0eXBlOiBHcmFwaEV4ZWN1dGlvbkV2ZW50VHlwZS5MT09QX0NPTkRJVElPTl9FVkFMVUFURUQsXG4gICAgICAgICAgICAgICAgaXRlcmF0aW9uLFxuICAgICAgICAgICAgICAgIHBheWxvYWQ6IHsgcmVzdWx0OiBjb25kaXRpb25SZXN1bHQgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0aW9uKys7XG4gICAgICAgICAgICBzaG91bGRTdG9wID0gY29uZGl0aW9uUmVzdWx0O1xuICAgICAgICB9IHdoaWxlICghc2hvdWxkU3RvcCk7XG4gICAgICAgIGF3YWl0IGNvbnRleHQuZW1pdCh7IHR5cGU6IEdyYXBoRXhlY3V0aW9uRXZlbnRUeXBlLkxPT1BfQ09NUExFVEVEIH0pO1xuICAgICAgICByZXR1cm4geyBbc3RhdGVQb3J0XTogc3RhdGUsIGl0ZXJhdGlvbnM6IGl0ZXJhdGlvbiB9O1xuICAgIH1cbiAgICBleHRyYWN0TWV0YWRhdGEoY29udGV4dCkge1xuICAgICAgICBjb25zdCByYXcgPSBjb250ZXh0Lm5vZGUuZ3JhcGg/Lm1ldGFkYXRhPy5sb29wID8/XG4gICAgICAgICAgICBjb250ZXh0Lm1ldGFkYXRhPy5sb29wO1xuICAgICAgICBpZiAoIXJhdykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEdyYXBoSW5wdXRFcnJvcihcInVudGlsIG5vZGUgaXMgbWlzc2luZyBsb29wIG1ldGFkYXRhXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByYXc7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pVlc1MGFXeEhjbUZ3YUU1dlpHVkZlR1ZqZFhSdmNpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1THk0dUx5NHVMM055WXk5bmNtRndhQzlsYm1kcGJtVXZiRzl2Y0hNdlZXNTBhV3hIY21Gd2FFNXZaR1ZGZUdWamRYUnZjaTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGWFFTeFBRVUZQTEVWQlFVVXNhVU5CUVdsRExFVkJRVVVzTUVKQlFYRkNPMEZCUTJwRkxFOUJRVThzUlVGQlJTeDFRa0ZCZFVJc1JVRkJSU3h2UTBGQkswSTdRVUZEYWtVc1QwRkJUeXhGUVVGRkxHVkJRV1VzUlVGQlJTeDFRMEZCYTBNN1FVRkROVVFzVDBGQlR5eEZRVUZGTEcxQ1FVRnRRaXhGUVVGRkxESkRRVUZ6UXp0QlFVTndSU3hQUVVGUExFVkJRVVVzZFVKQlFYVkNMRVZCUVVVc2NVTkJRV3RETzBGQlJYQkZPenM3T3p0SFFVdEhPMEZCUTBnc1RVRkJUU3hQUVVGUExITkNRVUZ6UWp0SlFVZHFReXhaUVVFMlFpeE5RVUUwUWp0UlFVRTFRaXhYUVVGTkxFZEJRVTRzVFVGQlRTeERRVUZ6UWp0UlFVWjRReXhqUVVGVExFZEJRVWNzU1VGQlNTeDFRa0ZCZFVJc1JVRkJSU3hEUVVGRE8wbEJSVU1zUTBGQlF6dEpRVVUzUkN4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVOWUxFdEJRVEpDTEVWQlF6TkNMRTlCUVRoQ08xRkJSVGxDTEUxQlFVMHNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhsUVVGbExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdVVUZETDBNc1RVRkJUU3hoUVVGaExFZEJRMnBDTEZGQlFWRXNRMEZCUXl4aFFVRmhMRWxCUVVrc2FVTkJRV2xETEVOQlFVTTdVVUZET1VRc1RVRkJUU3hUUVVGVExFZEJRVWNzVVVGQlVTeERRVUZETEZOQlFWTXNRMEZCUXp0UlFVTnlReXhKUVVGSkxFTkJRVU1zVTBGQlV5eEZRVUZGTEVOQlFVTTdXVUZEWml4TlFVRk5MRWxCUVVrc1pVRkJaU3hEUVVGRExHMURRVUZ0UXl4RFFVRkRMRU5CUVVNN1VVRkRha1VzUTBGQlF6dFJRVU5FTEUxQlFVMHNVMEZCVXl4SFFVRkhMRkZCUVZFc1EwRkJReXhUUVVGVExFbEJRVWtzVDBGQlR5eERRVUZETzFGQlEyaEVMRTFCUVUwc1dVRkJXU3hIUVVGSExGRkJRVkVzUTBGQlF5eEpRVUVyUWl4RFFVRkRPMUZCUlRsRUxFbEJRVWtzUzBGQlN5eEhRVUZITEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNN1VVRkRlRUlzU1VGQlNTeFRRVUZUTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUld4Q0xFMUJRVTBzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRWxCUVVrc1JVRkJSU3gxUWtGQmRVSXNRMEZCUXl4WlFVRlpMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJSVzVGTEVsQlFVa3NWVUZCVlN4SFFVRkhMRXRCUVVzc1EwRkJRenRSUVVWMlFpeEhRVUZITEVOQlFVTTdXVUZEUml4SlFVRkpMRk5CUVZNc1NVRkJTU3hoUVVGaExFVkJRVVVzUTBGQlF6dG5Ra0ZETDBJc1RVRkJUU3hQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETzI5Q1FVTnFRaXhKUVVGSkxFVkJRVVVzZFVKQlFYVkNMRU5CUVVNc2EwSkJRV3RDTzI5Q1FVTm9SQ3hUUVVGVE8ybENRVU5XTEVOQlFVTXNRMEZCUXp0blFrRkRTQ3hOUVVGTkxFbEJRVWtzYlVKQlFXMUNMRU5CUXpOQ0xIVkRRVUYxUXl4aFFVRmhMRWRCUVVjc1EwRkRlRVFzUTBGQlF6dFpRVU5LTEVOQlFVTTdXVUZGUkN4TlFVRk5MRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU03WjBKQlEycENMRWxCUVVrc1JVRkJSU3gxUWtGQmRVSXNRMEZCUXl4elFrRkJjMEk3WjBKQlEzQkVMRk5CUVZNN1lVRkRWaXhEUVVGRExFTkJRVU03V1VGRlNDeE5RVUZOTEZkQlFWY3NSMEZCUnl4TlFVRk5MRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVU16UXl4WlFVRlpMRVZCUTFvc1JVRkJSU3hEUVVGRExGTkJRVk1zUTBGQlF5eEZRVUZGTEV0QlFVc3NSVUZCUlN4VFFVRlRMRVZCUVVVc1JVRkRha003WjBKQlEwVXNWMEZCVnl4RlFVRkZMRTlCUVU4c1EwRkJReXhMUVVGTE8yZENRVU14UWl4SlFVRkpMRVZCUVVVc1EwRkJReXhIUVVGSExFOUJRVThzUTBGQlF5eEpRVUZKTEVWQlFVVXNZVUZCWVN4VFFVRlRMRVZCUVVVc1EwRkJRenRoUVVOc1JDeERRVU5HTEVOQlFVTTdXVUZGUml4TFFVRkxMRWRCUVVjc1YwRkJWeXhEUVVGRExFOUJRVThzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0WlFVVjJReXhOUVVGTkxFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTTdaMEpCUTJwQ0xFbEJRVWtzUlVGQlJTeDFRa0ZCZFVJc1EwRkJReXgzUWtGQmQwSTdaMEpCUTNSRUxGTkJRVk03WVVGRFZpeERRVUZETEVOQlFVTTdXVUZGU0N4TlFVRk5MR1ZCUVdVc1IwRkJSeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEZGQlFWRXNRMEZCUXl4VFFVRlRMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03V1VGRmJFVXNUVUZCVFN4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRE8yZENRVU5xUWl4SlFVRkpMRVZCUVVVc2RVSkJRWFZDTEVOQlFVTXNkMEpCUVhkQ08yZENRVU4wUkN4VFFVRlRPMmRDUVVOVUxFOUJRVThzUlVGQlJTeEZRVUZGTEUxQlFVMHNSVUZCUlN4bFFVRmxMRVZCUVVVN1lVRkRja01zUTBGQlF5eERRVUZETzFsQlJVZ3NVMEZCVXl4RlFVRkZMRU5CUVVNN1dVRkRXaXhWUVVGVkxFZEJRVWNzWlVGQlpTeERRVUZETzFGQlF5OUNMRU5CUVVNc1VVRkJVU3hEUVVGRExGVkJRVlVzUlVGQlJUdFJRVVYwUWl4TlFVRk5MRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeEpRVUZKTEVWQlFVVXNkVUpCUVhWQ0xFTkJRVU1zWTBGQll5eEZRVUZGTEVOQlFVTXNRMEZCUXp0UlFVVnlSU3hQUVVGUExFVkJRVVVzUTBGQlF5eFRRVUZUTEVOQlFVTXNSVUZCUlN4TFFVRkxMRVZCUVVVc1ZVRkJWU3hGUVVGRkxGTkJRVk1zUlVGQlJTeERRVUZETzBsQlEzWkVMRU5CUVVNN1NVRkZUeXhsUVVGbExFTkJRVU1zVDBGQk9FSTdVVUZEY0VRc1RVRkJUU3hIUVVGSExFZEJRVWtzVDBGQlR5eERRVUZETEVsQlFWa3NRMEZCUXl4TFFVRkxMRVZCUVVVc1VVRkJVU3hGUVVGRkxFbEJRVWs3V1VGRGNFUXNUMEZCVHl4RFFVRkRMRkZCUVdkQ0xFVkJRVVVzU1VGQlNTeERRVUZETzFGQlEyeERMRWxCUVVrc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dFpRVU5VTEUxQlFVMHNTVUZCU1N4bFFVRmxMRU5CUVVNc2NVTkJRWEZETEVOQlFVTXNRMEZCUXp0UlFVTnVSU3hEUVVGRE8xRkJRMFFzVDBGQlR5eEhRVUYzUWl4RFFVRkRPMGxCUTJ4RExFTkJRVU03UTBGRFJpSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRRzF2WkhWc1pTQnBiblJsWjNKaGRHbHZibk12WjNKaGNHZ3ZiRzl2Y0hNdlZXNTBhV3hIY21Gd2FFNXZaR1ZGZUdWamRYUnZjbHh1SUNvZ1FITjFiVzFoY25rZ1ZXNTBhV3dnYkc5dmNDQnViMlJsSUdWNFpXTjFkRzl5TGx4dUlDb2dRR1JsYzJOeWFYQjBhVzl1SUVWNFpXTjFkR1Z6SUdFZ1ltOWtlU0IzYjNKclpteHZkeUJoZENCc1pXRnpkQ0J2Ym1ObElHRnVaQ0J5WlhCbFlYUnpJSFZ1ZEdsc0lHRWdZMjl1WkdsMGFXOXVJR2x6SUhSeWRXVXVYRzRnS2k5Y2JtbHRjRzl5ZENCMGVYQmxJSHNnUjNKaGNHaE9iMlJsUlhobFkzVjBiM0lnZlNCbWNtOXRJRndpTGk0dlpYaGxZM1YwYVc5dUwwZHlZWEJvVG05a1pVVjRaV04xZEc5eVhDSTdYRzVwYlhCdmNuUWdkSGx3WlNCN0lFZHlZWEJvUlhobFkzVjBhVzl1UTI5dWRHVjRkQ0I5SUdaeWIyMGdYQ0l1TGk5bGVHVmpkWFJwYjI0dlIzSmhjR2hGZUdWamRYUnBiMjVEYjI1MFpYaDBYQ0k3WEc1cGJYQnZjblFnZEhsd1pTQjdJRWR5WVhCb1JYaGxZM1YwYVc5dVJXNW5hVzVsSUgwZ1puSnZiU0JjSWk0dUwyVjRaV04xZEdsdmJpOUhjbUZ3YUVWNFpXTjFkR2x2YmtWdVoybHVaVndpTzF4dWFXMXdiM0owSUhSNWNHVWdleUJIY21Gd2FFVjRaV04xZEdsdmJsWmhiSFZsY3l3Z1IzSmhjR2hNYjI5d1RXVjBZV1JoZEdFZ2ZTQm1jbTl0SUZ3aUxpNHZkSGx3WlhOY0lqdGNibWx0Y0c5eWRDQjBlWEJsSUhzZ1IzSmhjR2hYYjNKclpteHZkMFJsWm1sdWFYUnBiMjRnZlNCbWNtOXRJRndpUUdSbFkyRm1MWFJ6TDNWcExXUmxZMjl5WVhSdmNuTXZaM0poY0doY0lqdGNibHh1YVcxd2IzSjBJSHNnUjFKQlVFaGZSRVZHUVZWTVZGOU5RVmhmVEU5UFVGOUpWRVZTUVZSSlQwNVRJSDBnWm5KdmJTQmNJaTR1TDJOdmJuTjBZVzUwYzF3aU8xeHVhVzF3YjNKMElIc2dSM0poY0doRmVHVmpkWFJwYjI1RmRtVnVkRlI1Y0dVZ2ZTQm1jbTl0SUZ3aUxpNHZMaTR2YzJoaGNtVmtMMk52Ym5OMFlXNTBjMXdpTzF4dWFXMXdiM0owSUhzZ1IzSmhjR2hKYm5CMWRFVnljbTl5SUgwZ1puSnZiU0JjSWk0dUwyVnljbTl5Y3k5SGNtRndhRWx1Y0hWMFJYSnliM0pjSWp0Y2JtbHRjRzl5ZENCN0lFZHlZWEJvVEc5dmNFeHBiV2wwUlhKeWIzSWdmU0JtY205dElGd2lMaTR2WlhKeWIzSnpMMGR5WVhCb1RHOXZjRXhwYldsMFJYSnliM0pjSWp0Y2JtbHRjRzl5ZENCN0lFZHlZWEJvUTI5dVpHbDBhVzl1UlhaaGJIVmhkRzl5SUgwZ1puSnZiU0JjSWk0dlIzSmhjR2hEYjI1a2FYUnBiMjVGZG1Gc2RXRjBiM0pjSWp0Y2JseHVMeW9xWEc0Z0tpQkZlR1ZqZFhSdmNpQm1iM0lnWUdOdmNtVXViRzl2Y0M1MWJuUnBiR0FnYm05a1pYTXVYRzRnS2x4dUlDb2dSWGhsWTNWMFpYTWdkR2hsSUdKdlpIa2dZWFFnYkdWaGMzUWdiMjVqWlN3Z2RHaGxiaUJqYUdWamEzTWdkR2hsSUdOdmJtUnBkR2x2Ymk0Z1VtVndaV0YwY3lCMWJuUnBiRnh1SUNvZ2RHaGxJR052Ym1ScGRHbHZiaUJsZG1Gc2RXRjBaWE1nZEc4Z2RISjFaUzVjYmlBcUwxeHVaWGh3YjNKMElHTnNZWE56SUZWdWRHbHNSM0poY0doT2IyUmxSWGhsWTNWMGIzSWdhVzF3YkdWdFpXNTBjeUJIY21Gd2FFNXZaR1ZGZUdWamRYUnZjaUI3WEc0Z0lIQnlhWFpoZEdVZ2NtVmhaRzl1YkhrZ1pYWmhiSFZoZEc5eUlEMGdibVYzSUVkeVlYQm9RMjl1WkdsMGFXOXVSWFpoYkhWaGRHOXlLQ2s3WEc1Y2JpQWdZMjl1YzNSeWRXTjBiM0lvY0hKcGRtRjBaU0J5WldGa2IyNXNlU0JsYm1kcGJtVTZJRWR5WVhCb1JYaGxZM1YwYVc5dVJXNW5hVzVsS1NCN2ZWeHVYRzRnSUdGemVXNWpJR1Y0WldOMWRHVW9YRzRnSUNBZ2FXNXdkWFE2SUVkeVlYQm9SWGhsWTNWMGFXOXVWbUZzZFdWekxGeHVJQ0FnSUdOdmJuUmxlSFE2SUVkeVlYQm9SWGhsWTNWMGFXOXVRMjl1ZEdWNGRGeHVJQ0FwT2lCUWNtOXRhWE5sUEVkeVlYQm9SWGhsWTNWMGFXOXVWbUZzZFdWelBpQjdYRzRnSUNBZ1kyOXVjM1FnYldWMFlXUmhkR0VnUFNCMGFHbHpMbVY0ZEhKaFkzUk5aWFJoWkdGMFlTaGpiMjUwWlhoMEtUdGNiaUFnSUNCamIyNXpkQ0J0WVhoSmRHVnlZWFJwYjI1eklEMWNiaUFnSUNBZ0lHMWxkR0ZrWVhSaExtMWhlRWwwWlhKaGRHbHZibk1nUHo4Z1IxSkJVRWhmUkVWR1FWVk1WRjlOUVZoZlRFOVBVRjlKVkVWU1FWUkpUMDVUTzF4dUlDQWdJR052Ym5OMElHTnZibVJwZEdsdmJpQTlJRzFsZEdGa1lYUmhMbU52Ym1ScGRHbHZianRjYmlBZ0lDQnBaaUFvSVdOdmJtUnBkR2x2YmlrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFZHlZWEJvU1c1d2RYUkZjbkp2Y2loY0luVnVkR2xzSUc1dlpHVWdhWE1nYldsemMybHVaeUJoSUdOdmJtUnBkR2x2Ymx3aUtUdGNiaUFnSUNCOVhHNGdJQ0FnWTI5dWMzUWdjM1JoZEdWUWIzSjBJRDBnYldWMFlXUmhkR0V1YzNSaGRHVlFiM0owSUQ4L0lGd2ljM1JoZEdWY0lqdGNiaUFnSUNCamIyNXpkQ0JpYjJSNVYyOXlhMlpzYjNjZ1BTQnRaWFJoWkdGMFlTNWliMlI1SUdGeklFZHlZWEJvVjI5eWEyWnNiM2RFWldacGJtbDBhVzl1TzF4dVhHNGdJQ0FnYkdWMElITjBZWFJsSUQwZ2FXNXdkWFF1YzNSaGRHVTdYRzRnSUNBZ2JHVjBJR2wwWlhKaGRHbHZiaUE5SURBN1hHNWNiaUFnSUNCaGQyRnBkQ0JqYjI1MFpYaDBMbVZ0YVhRb2V5QjBlWEJsT2lCSGNtRndhRVY0WldOMWRHbHZia1YyWlc1MFZIbHdaUzVNVDA5UVgxTlVRVkpVUlVRZ2ZTazdYRzVjYmlBZ0lDQnNaWFFnYzJodmRXeGtVM1J2Y0NBOUlHWmhiSE5sTzF4dVhHNGdJQ0FnWkc4Z2UxeHVJQ0FnSUNBZ2FXWWdLR2wwWlhKaGRHbHZiaUErUFNCdFlYaEpkR1Z5WVhScGIyNXpLU0I3WEc0Z0lDQWdJQ0FnSUdGM1lXbDBJR052Ym5SbGVIUXVaVzFwZENoN1hHNGdJQ0FnSUNBZ0lDQWdkSGx3WlRvZ1IzSmhjR2hGZUdWamRYUnBiMjVGZG1WdWRGUjVjR1V1VEU5UFVGOU1TVTFKVkY5U1JVRkRTRVZFTEZ4dUlDQWdJQ0FnSUNBZ0lHbDBaWEpoZEdsdmJpeGNiaUFnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCSGNtRndhRXh2YjNCTWFXMXBkRVZ5Y205eUtGeHVJQ0FnSUNBZ0lDQWdJR0IxYm5ScGJDQnNiMjl3SUdWNFkyVmxaR1ZrSUcxaGVDQnBkR1Z5WVhScGIyNXpJQ2drZTIxaGVFbDBaWEpoZEdsdmJuTjlLV0JjYmlBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ1lYZGhhWFFnWTI5dWRHVjRkQzVsYldsMEtIdGNiaUFnSUNBZ0lDQWdkSGx3WlRvZ1IzSmhjR2hGZUdWamRYUnBiMjVGZG1WdWRGUjVjR1V1VEU5UFVGOUpWRVZTUVZSSlQwNWZVMVJCVWxSRlJDeGNiaUFnSUNBZ0lDQWdhWFJsY21GMGFXOXVMRnh1SUNBZ0lDQWdmU2s3WEc1Y2JpQWdJQ0FnSUdOdmJuTjBJR05vYVd4a1VtVnpkV3gwSUQwZ1lYZGhhWFFnZEdocGN5NWxibWRwYm1VdVpYaGxZM1YwWlNoY2JpQWdJQ0FnSUNBZ1ltOWtlVmR2Y210bWJHOTNMRnh1SUNBZ0lDQWdJQ0I3SUZ0emRHRjBaVkJ2Y25SZE9pQnpkR0YwWlN3Z2FYUmxjbUYwYVc5dUlIMHNYRzRnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNCd1lYSmxiblJTZFc1SlpEb2dZMjl1ZEdWNGRDNXlkVzVKWkN4Y2JpQWdJQ0FnSUNBZ0lDQndZWFJvT2lCYkxpNHVZMjl1ZEdWNGRDNXdZWFJvTENCZ2FYUmxjbUYwYVc5dU9pUjdhWFJsY21GMGFXOXVmV0JkTEZ4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBcE8xeHVYRzRnSUNBZ0lDQnpkR0YwWlNBOUlHTm9hV3hrVW1WemRXeDBMbTkxZEhCMWRITmJjM1JoZEdWUWIzSjBYVHRjYmx4dUlDQWdJQ0FnWVhkaGFYUWdZMjl1ZEdWNGRDNWxiV2wwS0h0Y2JpQWdJQ0FnSUNBZ2RIbHdaVG9nUjNKaGNHaEZlR1ZqZFhScGIyNUZkbVZ1ZEZSNWNHVXVURTlQVUY5SlZFVlNRVlJKVDA1ZlEwOU5VRXhGVkVWRUxGeHVJQ0FnSUNBZ0lDQnBkR1Z5WVhScGIyNHNYRzRnSUNBZ0lDQjlLVHRjYmx4dUlDQWdJQ0FnWTI5dWMzUWdZMjl1WkdsMGFXOXVVbVZ6ZFd4MElEMGdkR2hwY3k1bGRtRnNkV0YwYjNJdVpYWmhiSFZoZEdVb1kyOXVaR2wwYVc5dUxDQnpkR0YwWlNrN1hHNWNiaUFnSUNBZ0lHRjNZV2wwSUdOdmJuUmxlSFF1WlcxcGRDaDdYRzRnSUNBZ0lDQWdJSFI1Y0dVNklFZHlZWEJvUlhobFkzVjBhVzl1UlhabGJuUlVlWEJsTGt4UFQxQmZRMDlPUkVsVVNVOU9YMFZXUVV4VlFWUkZSQ3hjYmlBZ0lDQWdJQ0FnYVhSbGNtRjBhVzl1TEZ4dUlDQWdJQ0FnSUNCd1lYbHNiMkZrT2lCN0lISmxjM1ZzZERvZ1kyOXVaR2wwYVc5dVVtVnpkV3gwSUgwc1hHNGdJQ0FnSUNCOUtUdGNibHh1SUNBZ0lDQWdhWFJsY21GMGFXOXVLeXM3WEc0Z0lDQWdJQ0J6YUc5MWJHUlRkRzl3SUQwZ1kyOXVaR2wwYVc5dVVtVnpkV3gwTzF4dUlDQWdJSDBnZDJocGJHVWdLQ0Z6YUc5MWJHUlRkRzl3S1R0Y2JseHVJQ0FnSUdGM1lXbDBJR052Ym5SbGVIUXVaVzFwZENoN0lIUjVjR1U2SUVkeVlYQm9SWGhsWTNWMGFXOXVSWFpsYm5SVWVYQmxMa3hQVDFCZlEwOU5VRXhGVkVWRUlIMHBPMXh1WEc0Z0lDQWdjbVYwZFhKdUlIc2dXM04wWVhSbFVHOXlkRjA2SUhOMFlYUmxMQ0JwZEdWeVlYUnBiMjV6T2lCcGRHVnlZWFJwYjI0Z2ZUdGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdaWGgwY21GamRFMWxkR0ZrWVhSaEtHTnZiblJsZUhRNklFZHlZWEJvUlhobFkzVjBhVzl1UTI5dWRHVjRkQ2s2SUVkeVlYQm9URzl2Y0UxbGRHRmtZWFJoSUh0Y2JpQWdJQ0JqYjI1emRDQnlZWGNnUFNBb1kyOXVkR1Y0ZEM1dWIyUmxJR0Z6SUdGdWVTa3VaM0poY0dnL0xtMWxkR0ZrWVhSaFB5NXNiMjl3SUQ4L1hHNGdJQ0FnSUNBb1kyOXVkR1Y0ZEM1dFpYUmhaR0YwWVNCaGN5QmhibmtwUHk1c2IyOXdPMXh1SUNBZ0lHbG1JQ2doY21GM0tTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSM0poY0doSmJuQjFkRVZ5Y205eUtGd2lkVzUwYVd3Z2JtOWtaU0JwY3lCdGFYTnphVzVuSUd4dmIzQWdiV1YwWVdSaGRHRmNJaWs3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCeVlYY2dZWE1nUjNKaGNHaE1iMjl3VFdWMFlXUmhkR0U3WEc0Z0lIMWNibjFjYmlKZGZRPT0iXX0=
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WhileGraphNodeExecutor = void 0;
4
+ const constants_js_1 = require("./../constants.cjs");
5
+ const constants_js_2 = require("./../../shared/constants.cjs");
6
+ const GraphInputError_js_1 = require("./../errors/GraphInputError.cjs");
7
+ const GraphLoopLimitError_js_1 = require("./../errors/GraphLoopLimitError.cjs");
8
+ const GraphConditionEvaluator_js_1 = require("./GraphConditionEvaluator.cjs");
9
+ /**
10
+ * Executor for `core.loop.while` nodes.
11
+ *
12
+ * Expects input:
13
+ * - `state`: initial state
14
+ *
15
+ * Produces output:
16
+ * - `state`: final state
17
+ * - `iterations`: number of iterations executed
18
+ */
19
+ class WhileGraphNodeExecutor {
20
+ constructor(engine) {
21
+ this.engine = engine;
22
+ this.evaluator = new GraphConditionEvaluator_js_1.GraphConditionEvaluator();
23
+ }
24
+ async execute(input, context) {
25
+ const metadata = this.extractMetadata(context);
26
+ const maxIterations = metadata.maxIterations ?? constants_js_1.GRAPH_DEFAULT_MAX_LOOP_ITERATIONS;
27
+ const condition = metadata.condition;
28
+ if (!condition) {
29
+ throw new GraphInputError_js_1.GraphInputError("while node is missing a condition");
30
+ }
31
+ const statePort = metadata.statePort ?? "state";
32
+ const bodyWorkflow = metadata.body;
33
+ let state = input.state;
34
+ let iteration = 0;
35
+ await context.emit({ type: constants_js_2.GraphExecutionEventType.LOOP_STARTED });
36
+ while (this.evaluator.evaluate(condition, state)) {
37
+ if (iteration >= maxIterations) {
38
+ await context.emit({
39
+ type: constants_js_2.GraphExecutionEventType.LOOP_LIMIT_REACHED,
40
+ iteration,
41
+ });
42
+ throw new GraphLoopLimitError_js_1.GraphLoopLimitError(`while loop exceeded max iterations (${maxIterations})`);
43
+ }
44
+ await context.emit({
45
+ type: constants_js_2.GraphExecutionEventType.LOOP_CONDITION_EVALUATED,
46
+ iteration,
47
+ payload: { result: true },
48
+ });
49
+ await context.emit({
50
+ type: constants_js_2.GraphExecutionEventType.LOOP_ITERATION_STARTED,
51
+ iteration,
52
+ });
53
+ const childResult = await this.engine.execute(bodyWorkflow, { [statePort]: state, iteration }, {
54
+ parentRunId: context.runId,
55
+ path: [...context.path, `iteration:${iteration}`],
56
+ });
57
+ state = childResult.outputs[statePort];
58
+ await context.emit({
59
+ type: constants_js_2.GraphExecutionEventType.LOOP_ITERATION_COMPLETED,
60
+ iteration,
61
+ });
62
+ iteration++;
63
+ }
64
+ await context.emit({ type: constants_js_2.GraphExecutionEventType.LOOP_COMPLETED });
65
+ return { [statePort]: state, iterations: iteration };
66
+ }
67
+ extractMetadata(context) {
68
+ const raw = context.node.graph?.metadata?.loop ??
69
+ context.metadata?.loop;
70
+ if (!raw) {
71
+ throw new GraphInputError_js_1.GraphInputError("while node is missing loop metadata");
72
+ }
73
+ return raw;
74
+ }
75
+ }
76
+ exports.WhileGraphNodeExecutor = WhileGraphNodeExecutor;
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2hpbGVHcmFwaE5vZGVFeGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9ncmFwaC9lbmdpbmUvbG9vcHMvV2hpbGVHcmFwaE5vZGVFeGVjdXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsMEJBQXFCO0FBQ2pFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxvQ0FBK0I7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSx1Q0FBa0M7QUFDNUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLDJDQUFzQztBQUNwRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUscUNBQWtDO0FBRXBFOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sT0FBTyxzQkFBc0I7SUFHakMsWUFBNkIsTUFBNEI7UUFBNUIsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFGeEMsY0FBUyxHQUFHLElBQUksdUJBQXVCLEVBQUUsQ0FBQztJQUVDLENBQUM7SUFFN0QsS0FBSyxDQUFDLE9BQU8sQ0FDWCxLQUEyQixFQUMzQixPQUE4QjtRQUU5QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLE1BQU0sYUFBYSxHQUNqQixRQUFRLENBQUMsYUFBYSxJQUFJLGlDQUFpQyxDQUFDO1FBQzlELE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDckMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLGVBQWUsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQztRQUNoRCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBK0IsQ0FBQztRQUU5RCxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3hCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUVsQixNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUVuRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2pELElBQUksU0FBUyxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUMvQixNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ2pCLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxrQkFBa0I7b0JBQ2hELFNBQVM7aUJBQ1YsQ0FBQyxDQUFDO2dCQUNILE1BQU0sSUFBSSxtQkFBbUIsQ0FDM0IsdUNBQXVDLGFBQWEsR0FBRyxDQUN4RCxDQUFDO1lBQ0osQ0FBQztZQUVELE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDakIsSUFBSSxFQUFFLHVCQUF1QixDQUFDLHdCQUF3QjtnQkFDdEQsU0FBUztnQkFDVCxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2FBQzFCLENBQUMsQ0FBQztZQUNILE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDakIsSUFBSSxFQUFFLHVCQUF1QixDQUFDLHNCQUFzQjtnQkFDcEQsU0FBUzthQUNWLENBQUMsQ0FBQztZQUVILE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQzNDLFlBQVksRUFDWixFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUNqQztnQkFDRSxXQUFXLEVBQUUsT0FBTyxDQUFDLEtBQUs7Z0JBQzFCLElBQUksRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxhQUFhLFNBQVMsRUFBRSxDQUFDO2FBQ2xELENBQ0YsQ0FBQztZQUVGLEtBQUssR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBRXZDLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDakIsSUFBSSxFQUFFLHVCQUF1QixDQUFDLHdCQUF3QjtnQkFDdEQsU0FBUzthQUNWLENBQUMsQ0FBQztZQUVILFNBQVMsRUFBRSxDQUFDO1FBQ2QsQ0FBQztRQUVELE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSx1QkFBdUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBRXJFLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUVPLGVBQWUsQ0FBQyxPQUE4QjtRQUNwRCxNQUFNLEdBQUcsR0FBSSxPQUFPLENBQUMsSUFBWSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSTtZQUNwRCxPQUFPLENBQUMsUUFBZ0IsRUFBRSxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1QsTUFBTSxJQUFJLGVBQWUsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFDRCxPQUFPLEdBQXdCLENBQUM7SUFDbEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9ncmFwaC9sb29wcy9XaGlsZUdyYXBoTm9kZUV4ZWN1dG9yXG4gKiBAc3VtbWFyeSBXaGlsZSBsb29wIG5vZGUgZXhlY3V0b3IuXG4gKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSBib2R5IHdvcmtmbG93IHJlcGVhdGVkbHkgd2hpbGUgYSBjb25kaXRpb24gaXMgdHJ1ZSwgZW5mb3JjaW5nIGEgbWF4aW11bSBpdGVyYXRpb24gbGltaXQuXG4gKi9cbmltcG9ydCB0eXBlIHsgR3JhcGhOb2RlRXhlY3V0b3IgfSBmcm9tIFwiLi4vZXhlY3V0aW9uL0dyYXBoTm9kZUV4ZWN1dG9yXCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gXCIuLi9leGVjdXRpb24vR3JhcGhFeGVjdXRpb25Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoRXhlY3V0aW9uRW5naW5lIH0gZnJvbSBcIi4uL2V4ZWN1dGlvbi9HcmFwaEV4ZWN1dGlvbkVuZ2luZVwiO1xuaW1wb3J0IHR5cGUgeyBHcmFwaEV4ZWN1dGlvblZhbHVlcywgR3JhcGhMb29wTWV0YWRhdGEgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgR3JhcGhXb3JrZmxvd0RlZmluaXRpb24gfSBmcm9tIFwiQGRlY2FmLXRzL3VpLWRlY29yYXRvcnMvZ3JhcGhcIjtcblxuaW1wb3J0IHsgR1JBUEhfREVGQVVMVF9NQVhfTE9PUF9JVEVSQVRJT05TIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgR3JhcGhFeGVjdXRpb25FdmVudFR5cGUgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgR3JhcGhJbnB1dEVycm9yIH0gZnJvbSBcIi4uL2Vycm9ycy9HcmFwaElucHV0RXJyb3JcIjtcbmltcG9ydCB7IEdyYXBoTG9vcExpbWl0RXJyb3IgfSBmcm9tIFwiLi4vZXJyb3JzL0dyYXBoTG9vcExpbWl0RXJyb3JcIjtcbmltcG9ydCB7IEdyYXBoQ29uZGl0aW9uRXZhbHVhdG9yIH0gZnJvbSBcIi4vR3JhcGhDb25kaXRpb25FdmFsdWF0b3JcIjtcblxuLyoqXG4gKiBFeGVjdXRvciBmb3IgYGNvcmUubG9vcC53aGlsZWAgbm9kZXMuXG4gKlxuICogRXhwZWN0cyBpbnB1dDpcbiAqIC0gYHN0YXRlYDogaW5pdGlhbCBzdGF0ZVxuICpcbiAqIFByb2R1Y2VzIG91dHB1dDpcbiAqIC0gYHN0YXRlYDogZmluYWwgc3RhdGVcbiAqIC0gYGl0ZXJhdGlvbnNgOiBudW1iZXIgb2YgaXRlcmF0aW9ucyBleGVjdXRlZFxuICovXG5leHBvcnQgY2xhc3MgV2hpbGVHcmFwaE5vZGVFeGVjdXRvciBpbXBsZW1lbnRzIEdyYXBoTm9kZUV4ZWN1dG9yIHtcbiAgcHJpdmF0ZSByZWFkb25seSBldmFsdWF0b3IgPSBuZXcgR3JhcGhDb25kaXRpb25FdmFsdWF0b3IoKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGVuZ2luZTogR3JhcGhFeGVjdXRpb25FbmdpbmUpIHt9XG5cbiAgYXN5bmMgZXhlY3V0ZShcbiAgICBpbnB1dDogR3JhcGhFeGVjdXRpb25WYWx1ZXMsXG4gICAgY29udGV4dDogR3JhcGhFeGVjdXRpb25Db250ZXh0XG4gICk6IFByb21pc2U8R3JhcGhFeGVjdXRpb25WYWx1ZXM+IHtcbiAgICBjb25zdCBtZXRhZGF0YSA9IHRoaXMuZXh0cmFjdE1ldGFkYXRhKGNvbnRleHQpO1xuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPVxuICAgICAgbWV0YWRhdGEubWF4SXRlcmF0aW9ucyA/PyBHUkFQSF9ERUZBVUxUX01BWF9MT09QX0lURVJBVElPTlM7XG4gICAgY29uc3QgY29uZGl0aW9uID0gbWV0YWRhdGEuY29uZGl0aW9uO1xuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgR3JhcGhJbnB1dEVycm9yKFwid2hpbGUgbm9kZSBpcyBtaXNzaW5nIGEgY29uZGl0aW9uXCIpO1xuICAgIH1cbiAgICBjb25zdCBzdGF0ZVBvcnQgPSBtZXRhZGF0YS5zdGF0ZVBvcnQgPz8gXCJzdGF0ZVwiO1xuICAgIGNvbnN0IGJvZHlXb3JrZmxvdyA9IG1ldGFkYXRhLmJvZHkgYXMgR3JhcGhXb3JrZmxvd0RlZmluaXRpb247XG5cbiAgICBsZXQgc3RhdGUgPSBpbnB1dC5zdGF0ZTtcbiAgICBsZXQgaXRlcmF0aW9uID0gMDtcblxuICAgIGF3YWl0IGNvbnRleHQuZW1pdCh7IHR5cGU6IEdyYXBoRXhlY3V0aW9uRXZlbnRUeXBlLkxPT1BfU1RBUlRFRCB9KTtcblxuICAgIHdoaWxlICh0aGlzLmV2YWx1YXRvci5ldmFsdWF0ZShjb25kaXRpb24sIHN0YXRlKSkge1xuICAgICAgaWYgKGl0ZXJhdGlvbiA+PSBtYXhJdGVyYXRpb25zKSB7XG4gICAgICAgIGF3YWl0IGNvbnRleHQuZW1pdCh7XG4gICAgICAgICAgdHlwZTogR3JhcGhFeGVjdXRpb25FdmVudFR5cGUuTE9PUF9MSU1JVF9SRUFDSEVELFxuICAgICAgICAgIGl0ZXJhdGlvbixcbiAgICAgICAgfSk7XG4gICAgICAgIHRocm93IG5ldyBHcmFwaExvb3BMaW1pdEVycm9yKFxuICAgICAgICAgIGB3aGlsZSBsb29wIGV4Y2VlZGVkIG1heCBpdGVyYXRpb25zICgke21heEl0ZXJhdGlvbnN9KWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgY29udGV4dC5lbWl0KHtcbiAgICAgICAgdHlwZTogR3JhcGhFeGVjdXRpb25FdmVudFR5cGUuTE9PUF9DT05ESVRJT05fRVZBTFVBVEVELFxuICAgICAgICBpdGVyYXRpb24sXG4gICAgICAgIHBheWxvYWQ6IHsgcmVzdWx0OiB0cnVlIH0sXG4gICAgICB9KTtcbiAgICAgIGF3YWl0IGNvbnRleHQuZW1pdCh7XG4gICAgICAgIHR5cGU6IEdyYXBoRXhlY3V0aW9uRXZlbnRUeXBlLkxPT1BfSVRFUkFUSU9OX1NUQVJURUQsXG4gICAgICAgIGl0ZXJhdGlvbixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjaGlsZFJlc3VsdCA9IGF3YWl0IHRoaXMuZW5naW5lLmV4ZWN1dGUoXG4gICAgICAgIGJvZHlXb3JrZmxvdyxcbiAgICAgICAgeyBbc3RhdGVQb3J0XTogc3RhdGUsIGl0ZXJhdGlvbiB9LFxuICAgICAgICB7XG4gICAgICAgICAgcGFyZW50UnVuSWQ6IGNvbnRleHQucnVuSWQsXG4gICAgICAgICAgcGF0aDogWy4uLmNvbnRleHQucGF0aCwgYGl0ZXJhdGlvbjoke2l0ZXJhdGlvbn1gXSxcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgc3RhdGUgPSBjaGlsZFJlc3VsdC5vdXRwdXRzW3N0YXRlUG9ydF07XG5cbiAgICAgIGF3YWl0IGNvbnRleHQuZW1pdCh7XG4gICAgICAgIHR5cGU6IEdyYXBoRXhlY3V0aW9uRXZlbnRUeXBlLkxPT1BfSVRFUkFUSU9OX0NPTVBMRVRFRCxcbiAgICAgICAgaXRlcmF0aW9uLFxuICAgICAgfSk7XG5cbiAgICAgIGl0ZXJhdGlvbisrO1xuICAgIH1cblxuICAgIGF3YWl0IGNvbnRleHQuZW1pdCh7IHR5cGU6IEdyYXBoRXhlY3V0aW9uRXZlbnRUeXBlLkxPT1BfQ09NUExFVEVEIH0pO1xuXG4gICAgcmV0dXJuIHsgW3N0YXRlUG9ydF06IHN0YXRlLCBpdGVyYXRpb25zOiBpdGVyYXRpb24gfTtcbiAgfVxuXG4gIHByaXZhdGUgZXh0cmFjdE1ldGFkYXRhKGNvbnRleHQ6IEdyYXBoRXhlY3V0aW9uQ29udGV4dCk6IEdyYXBoTG9vcE1ldGFkYXRhIHtcbiAgICBjb25zdCByYXcgPSAoY29udGV4dC5ub2RlIGFzIGFueSkuZ3JhcGg/Lm1ldGFkYXRhPy5sb29wID8/XG4gICAgICAoY29udGV4dC5tZXRhZGF0YSBhcyBhbnkpPy5sb29wO1xuICAgIGlmICghcmF3KSB7XG4gICAgICB0aHJvdyBuZXcgR3JhcGhJbnB1dEVycm9yKFwid2hpbGUgbm9kZSBpcyBtaXNzaW5nIGxvb3AgbWV0YWRhdGFcIik7XG4gICAgfVxuICAgIHJldHVybiByYXcgYXMgR3JhcGhMb29wTWV0YWRhdGE7XG4gIH1cbn1cbiJdfQ==
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2hpbGVHcmFwaE5vZGVFeGVjdXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIldoaWxlR3JhcGhOb2RlRXhlY3V0b3IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0RBQXNFO0FBQ3RFLDhEQUFzRTtBQUN0RSx1RUFBaUU7QUFDakUsK0VBQXlFO0FBQ3pFLDZFQUF1RTtBQUN2RTs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFhLHNCQUFzQjtJQUMvQixZQUFZLE1BQU07UUFDZCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksb0RBQXVCLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTztRQUN4QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLElBQUksZ0RBQWlDLENBQUM7UUFDbEYsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksb0NBQWUsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFDRCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxJQUFJLE9BQU8sQ0FBQztRQUNoRCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ25DLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDeEIsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxzQ0FBdUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0MsSUFBSSxTQUFTLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDZixJQUFJLEVBQUUsc0NBQXVCLENBQUMsa0JBQWtCO29CQUNoRCxTQUFTO2lCQUNaLENBQUMsQ0FBQztnQkFDSCxNQUFNLElBQUksNENBQW1CLENBQUMsdUNBQXVDLGFBQWEsR0FBRyxDQUFDLENBQUM7WUFDM0YsQ0FBQztZQUNELE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDZixJQUFJLEVBQUUsc0NBQXVCLENBQUMsd0JBQXdCO2dCQUN0RCxTQUFTO2dCQUNULE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7YUFDNUIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNmLElBQUksRUFBRSxzQ0FBdUIsQ0FBQyxzQkFBc0I7Z0JBQ3BELFNBQVM7YUFDWixDQUFDLENBQUM7WUFDSCxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFO2dCQUMzRixXQUFXLEVBQUUsT0FBTyxDQUFDLEtBQUs7Z0JBQzFCLElBQUksRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxhQUFhLFNBQVMsRUFBRSxDQUFDO2FBQ3BELENBQUMsQ0FBQztZQUNILEtBQUssR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDZixJQUFJLEVBQUUsc0NBQXVCLENBQUMsd0JBQXdCO2dCQUN0RCxTQUFTO2FBQ1osQ0FBQyxDQUFDO1lBQ0gsU0FBUyxFQUFFLENBQUM7UUFDaEIsQ0FBQztRQUNELE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxzQ0FBdUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUNELGVBQWUsQ0FBQyxPQUFPO1FBQ25CLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJO1lBQzFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNQLE1BQU0sSUFBSSxvQ0FBZSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDckUsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztDQUNKO0FBeERELHdEQXdEQztBQUNELGt6UEFBa3pQIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR1JBUEhfREVGQVVMVF9NQVhfTE9PUF9JVEVSQVRJT05TIH0gZnJvbSBcIi4vLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBHcmFwaEV4ZWN1dGlvbkV2ZW50VHlwZSB9IGZyb20gXCIuLy4uLy4uL3NoYXJlZC9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IEdyYXBoSW5wdXRFcnJvciB9IGZyb20gXCIuLy4uL2Vycm9ycy9HcmFwaElucHV0RXJyb3IuanNcIjtcbmltcG9ydCB7IEdyYXBoTG9vcExpbWl0RXJyb3IgfSBmcm9tIFwiLi8uLi9lcnJvcnMvR3JhcGhMb29wTGltaXRFcnJvci5qc1wiO1xuaW1wb3J0IHsgR3JhcGhDb25kaXRpb25FdmFsdWF0b3IgfSBmcm9tIFwiLi9HcmFwaENvbmRpdGlvbkV2YWx1YXRvci5qc1wiO1xuLyoqXG4gKiBFeGVjdXRvciBmb3IgYGNvcmUubG9vcC53aGlsZWAgbm9kZXMuXG4gKlxuICogRXhwZWN0cyBpbnB1dDpcbiAqIC0gYHN0YXRlYDogaW5pdGlhbCBzdGF0ZVxuICpcbiAqIFByb2R1Y2VzIG91dHB1dDpcbiAqIC0gYHN0YXRlYDogZmluYWwgc3RhdGVcbiAqIC0gYGl0ZXJhdGlvbnNgOiBudW1iZXIgb2YgaXRlcmF0aW9ucyBleGVjdXRlZFxuICovXG5leHBvcnQgY2xhc3MgV2hpbGVHcmFwaE5vZGVFeGVjdXRvciB7XG4gICAgY29uc3RydWN0b3IoZW5naW5lKSB7XG4gICAgICAgIHRoaXMuZW5naW5lID0gZW5naW5lO1xuICAgICAgICB0aGlzLmV2YWx1YXRvciA9IG5ldyBHcmFwaENvbmRpdGlvbkV2YWx1YXRvcigpO1xuICAgIH1cbiAgICBhc3luYyBleGVjdXRlKGlucHV0LCBjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IG1ldGFkYXRhID0gdGhpcy5leHRyYWN0TWV0YWRhdGEoY29udGV4dCk7XG4gICAgICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPSBtZXRhZGF0YS5tYXhJdGVyYXRpb25zID8/IEdSQVBIX0RFRkFVTFRfTUFYX0xPT1BfSVRFUkFUSU9OUztcbiAgICAgICAgY29uc3QgY29uZGl0aW9uID0gbWV0YWRhdGEuY29uZGl0aW9uO1xuICAgICAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEdyYXBoSW5wdXRFcnJvcihcIndoaWxlIG5vZGUgaXMgbWlzc2luZyBhIGNvbmRpdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGF0ZVBvcnQgPSBtZXRhZGF0YS5zdGF0ZVBvcnQgPz8gXCJzdGF0ZVwiO1xuICAgICAgICBjb25zdCBib2R5V29ya2Zsb3cgPSBtZXRhZGF0YS5ib2R5O1xuICAgICAgICBsZXQgc3RhdGUgPSBpbnB1dC5zdGF0ZTtcbiAgICAgICAgbGV0IGl0ZXJhdGlvbiA9IDA7XG4gICAgICAgIGF3YWl0IGNvbnRleHQuZW1pdCh7IHR5cGU6IEdyYXBoRXhlY3V0aW9uRXZlbnRUeXBlLkxPT1BfU1RBUlRFRCB9KTtcbiAgICAgICAgd2hpbGUgKHRoaXMuZXZhbHVhdG9yLmV2YWx1YXRlKGNvbmRpdGlvbiwgc3RhdGUpKSB7XG4gICAgICAgICAgICBpZiAoaXRlcmF0aW9uID49IG1heEl0ZXJhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250ZXh0LmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBHcmFwaEV4ZWN1dGlvbkV2ZW50VHlwZS5MT09QX0xJTUlUX1JFQUNIRUQsXG4gICAgICAgICAgICAgICAgICAgIGl0ZXJhdGlvbixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgR3JhcGhMb29wTGltaXRFcnJvcihgd2hpbGUgbG9vcCBleGNlZWRlZCBtYXggaXRlcmF0aW9ucyAoJHttYXhJdGVyYXRpb25zfSlgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuZW1pdCh7XG4gICAgICAgICAgICAgICAgdHlwZTogR3JhcGhFeGVjdXRpb25FdmVudFR5cGUuTE9PUF9DT05ESVRJT05fRVZBTFVBVEVELFxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbixcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiB7IHJlc3VsdDogdHJ1ZSB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCBjb250ZXh0LmVtaXQoe1xuICAgICAgICAgICAgICAgIHR5cGU6IEdyYXBoRXhlY3V0aW9uRXZlbnRUeXBlLkxPT1BfSVRFUkFUSU9OX1NUQVJURUQsXG4gICAgICAgICAgICAgICAgaXRlcmF0aW9uLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZFJlc3VsdCA9IGF3YWl0IHRoaXMuZW5naW5lLmV4ZWN1dGUoYm9keVdvcmtmbG93LCB7IFtzdGF0ZVBvcnRdOiBzdGF0ZSwgaXRlcmF0aW9uIH0sIHtcbiAgICAgICAgICAgICAgICBwYXJlbnRSdW5JZDogY29udGV4dC5ydW5JZCxcbiAgICAgICAgICAgICAgICBwYXRoOiBbLi4uY29udGV4dC5wYXRoLCBgaXRlcmF0aW9uOiR7aXRlcmF0aW9ufWBdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzdGF0ZSA9IGNoaWxkUmVzdWx0Lm91dHB1dHNbc3RhdGVQb3J0XTtcbiAgICAgICAgICAgIGF3YWl0IGNvbnRleHQuZW1pdCh7XG4gICAgICAgICAgICAgICAgdHlwZTogR3JhcGhFeGVjdXRpb25FdmVudFR5cGUuTE9PUF9JVEVSQVRJT05fQ09NUExFVEVELFxuICAgICAgICAgICAgICAgIGl0ZXJhdGlvbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaXRlcmF0aW9uKys7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgY29udGV4dC5lbWl0KHsgdHlwZTogR3JhcGhFeGVjdXRpb25FdmVudFR5cGUuTE9PUF9DT01QTEVURUQgfSk7XG4gICAgICAgIHJldHVybiB7IFtzdGF0ZVBvcnRdOiBzdGF0ZSwgaXRlcmF0aW9uczogaXRlcmF0aW9uIH07XG4gICAgfVxuICAgIGV4dHJhY3RNZXRhZGF0YShjb250ZXh0KSB7XG4gICAgICAgIGNvbnN0IHJhdyA9IGNvbnRleHQubm9kZS5ncmFwaD8ubWV0YWRhdGE/Lmxvb3AgPz9cbiAgICAgICAgICAgIGNvbnRleHQubWV0YWRhdGE/Lmxvb3A7XG4gICAgICAgIGlmICghcmF3KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgR3JhcGhJbnB1dEVycm9yKFwid2hpbGUgbm9kZSBpcyBtaXNzaW5nIGxvb3AgbWV0YWRhdGFcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJhdztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lWMmhwYkdWSGNtRndhRTV2WkdWRmVHVmpkWFJ2Y2k1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMeTR1THk0dUwzTnlZeTluY21Gd2FDOWxibWRwYm1VdmJHOXZjSE12VjJocGJHVkhjbUZ3YUU1dlpHVkZlR1ZqZFhSdmNpNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZYUVN4UFFVRlBMRVZCUVVVc2FVTkJRV2xETEVWQlFVVXNNRUpCUVhGQ08wRkJRMnBGTEU5QlFVOHNSVUZCUlN4MVFrRkJkVUlzUlVGQlJTeHZRMEZCSzBJN1FVRkRha1VzVDBGQlR5eEZRVUZGTEdWQlFXVXNSVUZCUlN4MVEwRkJhME03UVVGRE5VUXNUMEZCVHl4RlFVRkZMRzFDUVVGdFFpeEZRVUZGTERKRFFVRnpRenRCUVVOd1JTeFBRVUZQTEVWQlFVVXNkVUpCUVhWQ0xFVkJRVVVzY1VOQlFXdERPMEZCUlhCRk96czdPenM3T3pzN1IwRlRSenRCUVVOSUxFMUJRVTBzVDBGQlR5eHpRa0ZCYzBJN1NVRkhha01zV1VGQk5rSXNUVUZCTkVJN1VVRkJOVUlzVjBGQlRTeEhRVUZPTEUxQlFVMHNRMEZCYzBJN1VVRkdlRU1zWTBGQlV5eEhRVUZITEVsQlFVa3NkVUpCUVhWQ0xFVkJRVVVzUTBGQlF6dEpRVVZETEVOQlFVTTdTVUZGTjBRc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGRFdDeExRVUV5UWl4RlFVTXpRaXhQUVVFNFFqdFJRVVU1UWl4TlFVRk5MRkZCUVZFc1IwRkJSeXhKUVVGSkxFTkJRVU1zWlVGQlpTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUXk5RExFMUJRVTBzWVVGQllTeEhRVU5xUWl4UlFVRlJMRU5CUVVNc1lVRkJZU3hKUVVGSkxHbERRVUZwUXl4RFFVRkRPMUZCUXpsRUxFMUJRVTBzVTBGQlV5eEhRVUZITEZGQlFWRXNRMEZCUXl4VFFVRlRMRU5CUVVNN1VVRkRja01zU1VGQlNTeERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRPMWxCUTJZc1RVRkJUU3hKUVVGSkxHVkJRV1VzUTBGQlF5eHRRMEZCYlVNc1EwRkJReXhEUVVGRE8xRkJRMnBGTEVOQlFVTTdVVUZEUkN4TlFVRk5MRk5CUVZNc1IwRkJSeXhSUVVGUkxFTkJRVU1zVTBGQlV5eEpRVUZKTEU5QlFVOHNRMEZCUXp0UlFVTm9SQ3hOUVVGTkxGbEJRVmtzUjBGQlJ5eFJRVUZSTEVOQlFVTXNTVUZCSzBJc1EwRkJRenRSUVVVNVJDeEpRVUZKTEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRE8xRkJRM2hDTEVsQlFVa3NVMEZCVXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVWc1FpeE5RVUZOTEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hKUVVGSkxFVkJRVVVzZFVKQlFYVkNMRU5CUVVNc1dVRkJXU3hGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVVZ1UlN4UFFVRlBMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zVVVGQlVTeERRVUZETEZOQlFWTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1JVRkJSU3hEUVVGRE8xbEJRMnBFTEVsQlFVa3NVMEZCVXl4SlFVRkpMR0ZCUVdFc1JVRkJSU3hEUVVGRE8yZENRVU12UWl4TlFVRk5MRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU03YjBKQlEycENMRWxCUVVrc1JVRkJSU3gxUWtGQmRVSXNRMEZCUXl4clFrRkJhMEk3YjBKQlEyaEVMRk5CUVZNN2FVSkJRMVlzUTBGQlF5eERRVUZETzJkQ1FVTklMRTFCUVUwc1NVRkJTU3h0UWtGQmJVSXNRMEZETTBJc2RVTkJRWFZETEdGQlFXRXNSMEZCUnl4RFFVTjRSQ3hEUVVGRE8xbEJRMG9zUTBGQlF6dFpRVVZFTEUxQlFVMHNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJRenRuUWtGRGFrSXNTVUZCU1N4RlFVRkZMSFZDUVVGMVFpeERRVUZETEhkQ1FVRjNRanRuUWtGRGRFUXNVMEZCVXp0blFrRkRWQ3hQUVVGUExFVkJRVVVzUlVGQlJTeE5RVUZOTEVWQlFVVXNTVUZCU1N4RlFVRkZPMkZCUXpGQ0xFTkJRVU1zUTBGQlF6dFpRVU5JTEUxQlFVMHNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJRenRuUWtGRGFrSXNTVUZCU1N4RlFVRkZMSFZDUVVGMVFpeERRVUZETEhOQ1FVRnpRanRuUWtGRGNFUXNVMEZCVXp0aFFVTldMRU5CUVVNc1EwRkJRenRaUVVWSUxFMUJRVTBzVjBGQlZ5eEhRVUZITEUxQlFVMHNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRek5ETEZsQlFWa3NSVUZEV2l4RlFVRkZMRU5CUVVNc1UwRkJVeXhEUVVGRExFVkJRVVVzUzBGQlN5eEZRVUZGTEZOQlFWTXNSVUZCUlN4RlFVTnFRenRuUWtGRFJTeFhRVUZYTEVWQlFVVXNUMEZCVHl4RFFVRkRMRXRCUVVzN1owSkJRekZDTEVsQlFVa3NSVUZCUlN4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExFbEJRVWtzUlVGQlJTeGhRVUZoTEZOQlFWTXNSVUZCUlN4RFFVRkRPMkZCUTJ4RUxFTkJRMFlzUTBGQlF6dFpRVVZHTEV0QlFVc3NSMEZCUnl4WFFVRlhMRU5CUVVNc1QwRkJUeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzFsQlJYWkRMRTFCUVUwc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF6dG5Ra0ZEYWtJc1NVRkJTU3hGUVVGRkxIVkNRVUYxUWl4RFFVRkRMSGRDUVVGM1FqdG5Ra0ZEZEVRc1UwRkJVenRoUVVOV0xFTkJRVU1zUTBGQlF6dFpRVVZJTEZOQlFWTXNSVUZCUlN4RFFVRkRPMUZCUTJRc1EwRkJRenRSUVVWRUxFMUJRVTBzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRWxCUVVrc1JVRkJSU3gxUWtGQmRVSXNRMEZCUXl4alFVRmpMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJSWEpGTEU5QlFVOHNSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhGUVVGRkxFdEJRVXNzUlVGQlJTeFZRVUZWTEVWQlFVVXNVMEZCVXl4RlFVRkZMRU5CUVVNN1NVRkRka1FzUTBGQlF6dEpRVVZQTEdWQlFXVXNRMEZCUXl4UFFVRTRRanRSUVVOd1JDeE5RVUZOTEVkQlFVY3NSMEZCU1N4UFFVRlBMRU5CUVVNc1NVRkJXU3hEUVVGRExFdEJRVXNzUlVGQlJTeFJRVUZSTEVWQlFVVXNTVUZCU1R0WlFVTndSQ3hQUVVGUExFTkJRVU1zVVVGQlowSXNSVUZCUlN4SlFVRkpMRU5CUVVNN1VVRkRiRU1zU1VGQlNTeERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRPMWxCUTFRc1RVRkJUU3hKUVVGSkxHVkJRV1VzUTBGQlF5eHhRMEZCY1VNc1EwRkJReXhEUVVGRE8xRkJRMjVGTEVOQlFVTTdVVUZEUkN4UFFVRlBMRWRCUVhkQ0xFTkJRVU03U1VGRGJFTXNRMEZCUXp0RFFVTkdJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJBYlc5a2RXeGxJR2x1ZEdWbmNtRjBhVzl1Y3k5bmNtRndhQzlzYjI5d2N5OVhhR2xzWlVkeVlYQm9UbTlrWlVWNFpXTjFkRzl5WEc0Z0tpQkFjM1Z0YldGeWVTQlhhR2xzWlNCc2IyOXdJRzV2WkdVZ1pYaGxZM1YwYjNJdVhHNGdLaUJBWkdWelkzSnBjSFJwYjI0Z1JYaGxZM1YwWlhNZ1lTQmliMlI1SUhkdmNtdG1iRzkzSUhKbGNHVmhkR1ZrYkhrZ2QyaHBiR1VnWVNCamIyNWthWFJwYjI0Z2FYTWdkSEoxWlN3Z1pXNW1iM0pqYVc1bklHRWdiV0Y0YVcxMWJTQnBkR1Z5WVhScGIyNGdiR2x0YVhRdVhHNGdLaTljYm1sdGNHOXlkQ0IwZVhCbElIc2dSM0poY0doT2IyUmxSWGhsWTNWMGIzSWdmU0JtY205dElGd2lMaTR2WlhobFkzVjBhVzl1TDBkeVlYQm9UbTlrWlVWNFpXTjFkRzl5WENJN1hHNXBiWEJ2Y25RZ2RIbHdaU0I3SUVkeVlYQm9SWGhsWTNWMGFXOXVRMjl1ZEdWNGRDQjlJR1p5YjIwZ1hDSXVMaTlsZUdWamRYUnBiMjR2UjNKaGNHaEZlR1ZqZFhScGIyNURiMjUwWlhoMFhDSTdYRzVwYlhCdmNuUWdkSGx3WlNCN0lFZHlZWEJvUlhobFkzVjBhVzl1Ulc1bmFXNWxJSDBnWm5KdmJTQmNJaTR1TDJWNFpXTjFkR2x2Ymk5SGNtRndhRVY0WldOMWRHbHZia1Z1WjJsdVpWd2lPMXh1YVcxd2IzSjBJSFI1Y0dVZ2V5QkhjbUZ3YUVWNFpXTjFkR2x2YmxaaGJIVmxjeXdnUjNKaGNHaE1iMjl3VFdWMFlXUmhkR0VnZlNCbWNtOXRJRndpTGk0dmRIbHdaWE5jSWp0Y2JtbHRjRzl5ZENCMGVYQmxJSHNnUjNKaGNHaFhiM0pyWm14dmQwUmxabWx1YVhScGIyNGdmU0JtY205dElGd2lRR1JsWTJGbUxYUnpMM1ZwTFdSbFkyOXlZWFJ2Y25NdlozSmhjR2hjSWp0Y2JseHVhVzF3YjNKMElIc2dSMUpCVUVoZlJFVkdRVlZNVkY5TlFWaGZURTlQVUY5SlZFVlNRVlJKVDA1VElIMGdabkp2YlNCY0lpNHVMMk52Ym5OMFlXNTBjMXdpTzF4dWFXMXdiM0owSUhzZ1IzSmhjR2hGZUdWamRYUnBiMjVGZG1WdWRGUjVjR1VnZlNCbWNtOXRJRndpTGk0dkxpNHZjMmhoY21Wa0wyTnZibk4wWVc1MGMxd2lPMXh1YVcxd2IzSjBJSHNnUjNKaGNHaEpibkIxZEVWeWNtOXlJSDBnWm5KdmJTQmNJaTR1TDJWeWNtOXljeTlIY21Gd2FFbHVjSFYwUlhKeWIzSmNJanRjYm1sdGNHOXlkQ0I3SUVkeVlYQm9URzl2Y0V4cGJXbDBSWEp5YjNJZ2ZTQm1jbTl0SUZ3aUxpNHZaWEp5YjNKekwwZHlZWEJvVEc5dmNFeHBiV2wwUlhKeWIzSmNJanRjYm1sdGNHOXlkQ0I3SUVkeVlYQm9RMjl1WkdsMGFXOXVSWFpoYkhWaGRHOXlJSDBnWm5KdmJTQmNJaTR2UjNKaGNHaERiMjVrYVhScGIyNUZkbUZzZFdGMGIzSmNJanRjYmx4dUx5b3FYRzRnS2lCRmVHVmpkWFJ2Y2lCbWIzSWdZR052Y21VdWJHOXZjQzUzYUdsc1pXQWdibTlrWlhNdVhHNGdLbHh1SUNvZ1JYaHdaV04wY3lCcGJuQjFkRHBjYmlBcUlDMGdZSE4wWVhSbFlEb2dhVzVwZEdsaGJDQnpkR0YwWlZ4dUlDcGNiaUFxSUZCeWIyUjFZMlZ6SUc5MWRIQjFkRHBjYmlBcUlDMGdZSE4wWVhSbFlEb2dabWx1WVd3Z2MzUmhkR1ZjYmlBcUlDMGdZR2wwWlhKaGRHbHZibk5nT2lCdWRXMWlaWElnYjJZZ2FYUmxjbUYwYVc5dWN5QmxlR1ZqZFhSbFpGeHVJQ292WEc1bGVIQnZjblFnWTJ4aGMzTWdWMmhwYkdWSGNtRndhRTV2WkdWRmVHVmpkWFJ2Y2lCcGJYQnNaVzFsYm5SeklFZHlZWEJvVG05a1pVVjRaV04xZEc5eUlIdGNiaUFnY0hKcGRtRjBaU0J5WldGa2IyNXNlU0JsZG1Gc2RXRjBiM0lnUFNCdVpYY2dSM0poY0doRGIyNWthWFJwYjI1RmRtRnNkV0YwYjNJb0tUdGNibHh1SUNCamIyNXpkSEoxWTNSdmNpaHdjbWwyWVhSbElISmxZV1J2Ym14NUlHVnVaMmx1WlRvZ1IzSmhjR2hGZUdWamRYUnBiMjVGYm1kcGJtVXBJSHQ5WEc1Y2JpQWdZWE41Ym1NZ1pYaGxZM1YwWlNoY2JpQWdJQ0JwYm5CMWREb2dSM0poY0doRmVHVmpkWFJwYjI1V1lXeDFaWE1zWEc0Z0lDQWdZMjl1ZEdWNGREb2dSM0poY0doRmVHVmpkWFJwYjI1RGIyNTBaWGgwWEc0Z0lDazZJRkJ5YjIxcGMyVThSM0poY0doRmVHVmpkWFJwYjI1V1lXeDFaWE0rSUh0Y2JpQWdJQ0JqYjI1emRDQnRaWFJoWkdGMFlTQTlJSFJvYVhNdVpYaDBjbUZqZEUxbGRHRmtZWFJoS0dOdmJuUmxlSFFwTzF4dUlDQWdJR052Ym5OMElHMWhlRWwwWlhKaGRHbHZibk1nUFZ4dUlDQWdJQ0FnYldWMFlXUmhkR0V1YldGNFNYUmxjbUYwYVc5dWN5QS9QeUJIVWtGUVNGOUVSVVpCVlV4VVgwMUJXRjlNVDA5UVgwbFVSVkpCVkVsUFRsTTdYRzRnSUNBZ1kyOXVjM1FnWTI5dVpHbDBhVzl1SUQwZ2JXVjBZV1JoZEdFdVkyOXVaR2wwYVc5dU8xeHVJQ0FnSUdsbUlDZ2hZMjl1WkdsMGFXOXVLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUjNKaGNHaEpibkIxZEVWeWNtOXlLRndpZDJocGJHVWdibTlrWlNCcGN5QnRhWE56YVc1bklHRWdZMjl1WkdsMGFXOXVYQ0lwTzF4dUlDQWdJSDFjYmlBZ0lDQmpiMjV6ZENCemRHRjBaVkJ2Y25RZ1BTQnRaWFJoWkdGMFlTNXpkR0YwWlZCdmNuUWdQejhnWENKemRHRjBaVndpTzF4dUlDQWdJR052Ym5OMElHSnZaSGxYYjNKclpteHZkeUE5SUcxbGRHRmtZWFJoTG1KdlpIa2dZWE1nUjNKaGNHaFhiM0pyWm14dmQwUmxabWx1YVhScGIyNDdYRzVjYmlBZ0lDQnNaWFFnYzNSaGRHVWdQU0JwYm5CMWRDNXpkR0YwWlR0Y2JpQWdJQ0JzWlhRZ2FYUmxjbUYwYVc5dUlEMGdNRHRjYmx4dUlDQWdJR0YzWVdsMElHTnZiblJsZUhRdVpXMXBkQ2g3SUhSNWNHVTZJRWR5WVhCb1JYaGxZM1YwYVc5dVJYWmxiblJVZVhCbExreFBUMUJmVTFSQlVsUkZSQ0I5S1R0Y2JseHVJQ0FnSUhkb2FXeGxJQ2gwYUdsekxtVjJZV3gxWVhSdmNpNWxkbUZzZFdGMFpTaGpiMjVrYVhScGIyNHNJSE4wWVhSbEtTa2dlMXh1SUNBZ0lDQWdhV1lnS0dsMFpYSmhkR2x2YmlBK1BTQnRZWGhKZEdWeVlYUnBiMjV6S1NCN1hHNGdJQ0FnSUNBZ0lHRjNZV2wwSUdOdmJuUmxlSFF1WlcxcGRDaDdYRzRnSUNBZ0lDQWdJQ0FnZEhsd1pUb2dSM0poY0doRmVHVmpkWFJwYjI1RmRtVnVkRlI1Y0dVdVRFOVBVRjlNU1UxSlZGOVNSVUZEU0VWRUxGeHVJQ0FnSUNBZ0lDQWdJR2wwWlhKaGRHbHZiaXhjYmlBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkhjbUZ3YUV4dmIzQk1hVzFwZEVWeWNtOXlLRnh1SUNBZ0lDQWdJQ0FnSUdCM2FHbHNaU0JzYjI5d0lHVjRZMlZsWkdWa0lHMWhlQ0JwZEdWeVlYUnBiMjV6SUNna2UyMWhlRWwwWlhKaGRHbHZibk45S1dCY2JpQWdJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdZWGRoYVhRZ1kyOXVkR1Y0ZEM1bGJXbDBLSHRjYmlBZ0lDQWdJQ0FnZEhsd1pUb2dSM0poY0doRmVHVmpkWFJwYjI1RmRtVnVkRlI1Y0dVdVRFOVBVRjlEVDA1RVNWUkpUMDVmUlZaQlRGVkJWRVZFTEZ4dUlDQWdJQ0FnSUNCcGRHVnlZWFJwYjI0c1hHNGdJQ0FnSUNBZ0lIQmhlV3h2WVdRNklIc2djbVZ6ZFd4ME9pQjBjblZsSUgwc1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lHRjNZV2wwSUdOdmJuUmxlSFF1WlcxcGRDaDdYRzRnSUNBZ0lDQWdJSFI1Y0dVNklFZHlZWEJvUlhobFkzVjBhVzl1UlhabGJuUlVlWEJsTGt4UFQxQmZTVlJGVWtGVVNVOU9YMU5VUVZKVVJVUXNYRzRnSUNBZ0lDQWdJR2wwWlhKaGRHbHZiaXhjYmlBZ0lDQWdJSDBwTzF4dVhHNGdJQ0FnSUNCamIyNXpkQ0JqYUdsc1pGSmxjM1ZzZENBOUlHRjNZV2wwSUhSb2FYTXVaVzVuYVc1bExtVjRaV04xZEdVb1hHNGdJQ0FnSUNBZ0lHSnZaSGxYYjNKclpteHZkeXhjYmlBZ0lDQWdJQ0FnZXlCYmMzUmhkR1ZRYjNKMFhUb2djM1JoZEdVc0lHbDBaWEpoZEdsdmJpQjlMRnh1SUNBZ0lDQWdJQ0I3WEc0Z0lDQWdJQ0FnSUNBZ2NHRnlaVzUwVW5WdVNXUTZJR052Ym5SbGVIUXVjblZ1U1dRc1hHNGdJQ0FnSUNBZ0lDQWdjR0YwYURvZ1d5NHVMbU52Ym5SbGVIUXVjR0YwYUN3Z1lHbDBaWEpoZEdsdmJqb2tlMmwwWlhKaGRHbHZibjFnWFN4Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0tUdGNibHh1SUNBZ0lDQWdjM1JoZEdVZ1BTQmphR2xzWkZKbGMzVnNkQzV2ZFhSd2RYUnpXM04wWVhSbFVHOXlkRjA3WEc1Y2JpQWdJQ0FnSUdGM1lXbDBJR052Ym5SbGVIUXVaVzFwZENoN1hHNGdJQ0FnSUNBZ0lIUjVjR1U2SUVkeVlYQm9SWGhsWTNWMGFXOXVSWFpsYm5SVWVYQmxMa3hQVDFCZlNWUkZVa0ZVU1U5T1gwTlBUVkJNUlZSRlJDeGNiaUFnSUNBZ0lDQWdhWFJsY21GMGFXOXVMRnh1SUNBZ0lDQWdmU2s3WEc1Y2JpQWdJQ0FnSUdsMFpYSmhkR2x2Ymlzck8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdGM1lXbDBJR052Ym5SbGVIUXVaVzFwZENoN0lIUjVjR1U2SUVkeVlYQm9SWGhsWTNWMGFXOXVSWFpsYm5SVWVYQmxMa3hQVDFCZlEwOU5VRXhGVkVWRUlIMHBPMXh1WEc0Z0lDQWdjbVYwZFhKdUlIc2dXM04wWVhSbFVHOXlkRjA2SUhOMFlYUmxMQ0JwZEdWeVlYUnBiMjV6T2lCcGRHVnlZWFJwYjI0Z2ZUdGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdaWGgwY21GamRFMWxkR0ZrWVhSaEtHTnZiblJsZUhRNklFZHlZWEJvUlhobFkzVjBhVzl1UTI5dWRHVjRkQ2s2SUVkeVlYQm9URzl2Y0UxbGRHRmtZWFJoSUh0Y2JpQWdJQ0JqYjI1emRDQnlZWGNnUFNBb1kyOXVkR1Y0ZEM1dWIyUmxJR0Z6SUdGdWVTa3VaM0poY0dnL0xtMWxkR0ZrWVhSaFB5NXNiMjl3SUQ4L1hHNGdJQ0FnSUNBb1kyOXVkR1Y0ZEM1dFpYUmhaR0YwWVNCaGN5QmhibmtwUHk1c2IyOXdPMXh1SUNBZ0lHbG1JQ2doY21GM0tTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSM0poY0doSmJuQjFkRVZ5Y205eUtGd2lkMmhwYkdVZ2JtOWtaU0JwY3lCdGFYTnphVzVuSUd4dmIzQWdiV1YwWVdSaGRHRmNJaWs3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCeVlYY2dZWE1nUjNKaGNHaE1iMjl3VFdWMFlXUmhkR0U3WEc0Z0lIMWNibjFjYmlKZGZRPT0iXX0=
@@ -25,5 +25,5 @@ __exportStar(require("./GraphLoopExecutionContext.cjs"), exports);
25
25
  __exportStar(require("./ForeachGraphNodeExecutor.cjs"), exports);
26
26
  __exportStar(require("./WhileGraphNodeExecutor.cjs"), exports);
27
27
  __exportStar(require("./UntilGraphNodeExecutor.cjs"), exports);
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZ3JhcGgvbG9vcHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7R0FJRztBQUNILDZDQUEwQztBQUMxQyxrREFBK0M7QUFDL0MsK0NBQTRDO0FBQzVDLDhDQUEyQztBQUMzQyw0Q0FBeUM7QUFDekMsNENBQXlDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9ncmFwaC9sb29wc1xuICogQHN1bW1hcnkgU3RydWN0dXJlZCBsb29wIGV4ZWN1dG9ycy5cbiAqIEBkZXNjcmlwdGlvbiBSZS1leHBvcnRzIHRoZSBjb25kaXRpb24gZXZhbHVhdG9yLCBsb29wIGV4ZWN1dGlvbiBjb250ZXh0LCBhbmQgZm9yZWFjaC93aGlsZS91bnRpbCBleGVjdXRvcnMuXG4gKi9cbmV4cG9ydCAqIGZyb20gXCIuL0dyYXBoQ29uZGl0aW9uRXZhbHVhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9Db25kaXRpb25FeHByZXNzaW9uRXZhbHVhdG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaExvb3BFeGVjdXRpb25Db250ZXh0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9Gb3JlYWNoR3JhcGhOb2RlRXhlY3V0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1doaWxlR3JhcGhOb2RlRXhlY3V0b3JcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1VudGlsR3JhcGhOb2RlRXhlY3V0b3JcIjtcbiJdfQ==
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7R0FJRztBQUNILCtEQUE2QztBQUM3QyxvRUFBa0Q7QUFDbEQsaUVBQStDO0FBQy9DLGdFQUE4QztBQUM5Qyw4REFBNEM7QUFDNUMsOERBQTRDO0FBQzVDLDgrQkFBOCtCIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9ncmFwaC9sb29wc1xuICogQHN1bW1hcnkgU3RydWN0dXJlZCBsb29wIGV4ZWN1dG9ycy5cbiAqIEBkZXNjcmlwdGlvbiBSZS1leHBvcnRzIHRoZSBjb25kaXRpb24gZXZhbHVhdG9yLCBsb29wIGV4ZWN1dGlvbiBjb250ZXh0LCBhbmQgZm9yZWFjaC93aGlsZS91bnRpbCBleGVjdXRvcnMuXG4gKi9cbmV4cG9ydCAqIGZyb20gXCIuL0dyYXBoQ29uZGl0aW9uRXZhbHVhdG9yLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9Db25kaXRpb25FeHByZXNzaW9uRXZhbHVhdG9yLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaExvb3BFeGVjdXRpb25Db250ZXh0LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9Gb3JlYWNoR3JhcGhOb2RlRXhlY3V0b3IuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1doaWxlR3JhcGhOb2RlRXhlY3V0b3IuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1VudGlsR3JhcGhOb2RlRXhlY3V0b3IuanNcIjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk4dUxpOHVMaTl6Y21NdlozSmhjR2d2Ykc5dmNITXZhVzVrWlhndWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRVUU3T3pzN1IwRkpSenRCUVVOSUxEWkRRVUV3UXp0QlFVTXhReXhyUkVGQkswTTdRVUZETDBNc0swTkJRVFJETzBGQlF6VkRMRGhEUVVFeVF6dEJRVU16UXl3MFEwRkJlVU03UVVGRGVrTXNORU5CUVhsRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkFiVzlrZFd4bElHbHVkR1ZuY21GMGFXOXVjeTluY21Gd2FDOXNiMjl3YzF4dUlDb2dRSE4xYlcxaGNua2dVM1J5ZFdOMGRYSmxaQ0JzYjI5d0lHVjRaV04xZEc5eWN5NWNiaUFxSUVCa1pYTmpjbWx3ZEdsdmJpQlNaUzFsZUhCdmNuUnpJSFJvWlNCamIyNWthWFJwYjI0Z1pYWmhiSFZoZEc5eUxDQnNiMjl3SUdWNFpXTjFkR2x2YmlCamIyNTBaWGgwTENCaGJtUWdabTl5WldGamFDOTNhR2xzWlM5MWJuUnBiQ0JsZUdWamRYUnZjbk11WEc0Z0tpOWNibVY0Y0c5eWRDQXFJR1p5YjIwZ1hDSXVMMGR5WVhCb1EyOXVaR2wwYVc5dVJYWmhiSFZoZEc5eVhDSTdYRzVsZUhCdmNuUWdLaUJtY205dElGd2lMaTlEYjI1a2FYUnBiMjVGZUhCeVpYTnphVzl1UlhaaGJIVmhkRzl5WENJN1hHNWxlSEJ2Y25RZ0tpQm1jbTl0SUZ3aUxpOUhjbUZ3YUV4dmIzQkZlR1ZqZFhScGIyNURiMjUwWlhoMFhDSTdYRzVsZUhCdmNuUWdLaUJtY205dElGd2lMaTlHYjNKbFlXTm9SM0poY0doT2IyUmxSWGhsWTNWMGIzSmNJanRjYm1WNGNHOXlkQ0FxSUdaeWIyMGdYQ0l1TDFkb2FXeGxSM0poY0doT2IyUmxSWGhsWTNWMGIzSmNJanRjYm1WNGNHOXlkQ0FxSUdaeWIyMGdYQ0l1TDFWdWRHbHNSM0poY0doT2IyUmxSWGhsWTNWMGIzSmNJanRjYmlKZGZRPT0iXX0=
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvZ3JhcGgvZW5naW5lL2xvb3BzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCw2Q0FBMEM7QUFDMUMsa0RBQStDO0FBQy9DLCtDQUE0QztBQUM1Qyw4Q0FBMkM7QUFDM0MsNENBQXlDO0FBQ3pDLDRDQUF5QyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvZ3JhcGgvbG9vcHNcbiAqIEBzdW1tYXJ5IFN0cnVjdHVyZWQgbG9vcCBleGVjdXRvcnMuXG4gKiBAZGVzY3JpcHRpb24gUmUtZXhwb3J0cyB0aGUgY29uZGl0aW9uIGV2YWx1YXRvciwgbG9vcCBleGVjdXRpb24gY29udGV4dCwgYW5kIGZvcmVhY2gvd2hpbGUvdW50aWwgZXhlY3V0b3JzLlxuICovXG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaENvbmRpdGlvbkV2YWx1YXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vQ29uZGl0aW9uRXhwcmVzc2lvbkV2YWx1YXRvclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vR3JhcGhMb29wRXhlY3V0aW9uQ29udGV4dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vRm9yZWFjaEdyYXBoTm9kZUV4ZWN1dG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9XaGlsZUdyYXBoTm9kZUV4ZWN1dG9yXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9VbnRpbEdyYXBoTm9kZUV4ZWN1dG9yXCI7XG4iXX0=
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7R0FJRztBQUNILCtEQUE2QztBQUM3QyxvRUFBa0Q7QUFDbEQsaUVBQStDO0FBQy9DLGdFQUE4QztBQUM5Qyw4REFBNEM7QUFDNUMsOERBQTRDO0FBQzVDLDAvQkFBMC9CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9ncmFwaC9sb29wc1xuICogQHN1bW1hcnkgU3RydWN0dXJlZCBsb29wIGV4ZWN1dG9ycy5cbiAqIEBkZXNjcmlwdGlvbiBSZS1leHBvcnRzIHRoZSBjb25kaXRpb24gZXZhbHVhdG9yLCBsb29wIGV4ZWN1dGlvbiBjb250ZXh0LCBhbmQgZm9yZWFjaC93aGlsZS91bnRpbCBleGVjdXRvcnMuXG4gKi9cbmV4cG9ydCAqIGZyb20gXCIuL0dyYXBoQ29uZGl0aW9uRXZhbHVhdG9yLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9Db25kaXRpb25FeHByZXNzaW9uRXZhbHVhdG9yLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9HcmFwaExvb3BFeGVjdXRpb25Db250ZXh0LmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9Gb3JlYWNoR3JhcGhOb2RlRXhlY3V0b3IuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1doaWxlR3JhcGhOb2RlRXhlY3V0b3IuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL1VudGlsR3JhcGhOb2RlRXhlY3V0b3IuanNcIjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWFXNWtaWGd1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk4dUxpOHVMaTh1TGk5emNtTXZaM0poY0dndlpXNW5hVzVsTDJ4dmIzQnpMMmx1WkdWNExuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVUZCT3pzN08wZEJTVWM3UVVGRFNDdzJRMEZCTUVNN1FVRkRNVU1zYTBSQlFTdERPMEZCUXk5RExDdERRVUUwUXp0QlFVTTFReXc0UTBGQk1rTTdRVUZETTBNc05FTkJRWGxETzBGQlEzcERMRFJEUVVGNVF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRRzF2WkhWc1pTQnBiblJsWjNKaGRHbHZibk12WjNKaGNHZ3ZiRzl2Y0hOY2JpQXFJRUJ6ZFcxdFlYSjVJRk4wY25WamRIVnlaV1FnYkc5dmNDQmxlR1ZqZFhSdmNuTXVYRzRnS2lCQVpHVnpZM0pwY0hScGIyNGdVbVV0Wlhod2IzSjBjeUIwYUdVZ1kyOXVaR2wwYVc5dUlHVjJZV3gxWVhSdmNpd2diRzl2Y0NCbGVHVmpkWFJwYjI0Z1kyOXVkR1Y0ZEN3Z1lXNWtJR1p2Y21WaFkyZ3ZkMmhwYkdVdmRXNTBhV3dnWlhobFkzVjBiM0p6TGx4dUlDb3ZYRzVsZUhCdmNuUWdLaUJtY205dElGd2lMaTlIY21Gd2FFTnZibVJwZEdsdmJrVjJZV3gxWVhSdmNsd2lPMXh1Wlhod2IzSjBJQ29nWm5KdmJTQmNJaTR2UTI5dVpHbDBhVzl1Ulhod2NtVnpjMmx2YmtWMllXeDFZWFJ2Y2x3aU8xeHVaWGh3YjNKMElDb2dabkp2YlNCY0lpNHZSM0poY0doTWIyOXdSWGhsWTNWMGFXOXVRMjl1ZEdWNGRGd2lPMXh1Wlhod2IzSjBJQ29nWm5KdmJTQmNJaTR2Um05eVpXRmphRWR5WVhCb1RtOWtaVVY0WldOMWRHOXlYQ0k3WEc1bGVIQnZjblFnS2lCbWNtOXRJRndpTGk5WGFHbHNaVWR5WVhCb1RtOWtaVVY0WldOMWRHOXlYQ0k3WEc1bGVIQnZjblFnS2lCbWNtOXRJRndpTGk5VmJuUnBiRWR5WVhCb1RtOWtaVVY0WldOMWRHOXlYQ0k3WEc0aVhYMD0iXX0=