@decaf-ts/integrations 0.3.5 → 0.3.7

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 (272) hide show
  1. package/dist/integrations.cjs +1608 -7
  2. package/dist/integrations.js +1841 -5
  3. package/lib/cjs/graph/execution/SwitchGraphNodeExecutor.cjs +13 -5
  4. package/lib/cjs/graph/nodes/base.cjs +35 -0
  5. package/lib/cjs/graph/nodes/flow-control.cjs +31 -3
  6. package/lib/cjs/graph/nodes/index.cjs +3 -2
  7. package/lib/cjs/graph/types.cjs +2 -2
  8. package/lib/cjs/index.cjs +6 -5
  9. package/lib/cjs/namespaces/index.cjs +26 -0
  10. package/lib/cjs/namespaces/models/authorization-model.cjs +12 -0
  11. package/lib/cjs/namespaces/models/effective-permission.model.cjs +95 -0
  12. package/lib/cjs/namespaces/models/group-membership.model.cjs +66 -0
  13. package/lib/cjs/namespaces/models/group.model.cjs +74 -0
  14. package/lib/cjs/namespaces/models/index.cjs +39 -0
  15. package/lib/cjs/namespaces/models/inheritance-block.model.cjs +76 -0
  16. package/lib/cjs/namespaces/models/org-unit-closure.model.cjs +66 -0
  17. package/lib/cjs/namespaces/models/org-unit-membership.model.cjs +73 -0
  18. package/lib/cjs/namespaces/models/org-unit-profile.model.cjs +64 -0
  19. package/lib/cjs/namespaces/models/org-unit.model.cjs +102 -0
  20. package/lib/cjs/namespaces/models/permission.model.cjs +64 -0
  21. package/lib/cjs/namespaces/models/principal.model.cjs +77 -0
  22. package/lib/cjs/namespaces/models/protected-resource.model.cjs +99 -0
  23. package/lib/cjs/namespaces/models/resource-grant.model.cjs +88 -0
  24. package/lib/cjs/namespaces/models/role-assignment.model.cjs +98 -0
  25. package/lib/cjs/namespaces/models/role-permission.model.cjs +55 -0
  26. package/lib/cjs/namespaces/models/role.model.cjs +84 -0
  27. package/lib/cjs/namespaces/models/storage-binding.model.cjs +85 -0
  28. package/lib/cjs/namespaces/models/tenant-membership.model.cjs +67 -0
  29. package/lib/cjs/namespaces/models/tenant-profile.model.cjs +64 -0
  30. package/lib/cjs/namespaces/models/tenant.model.cjs +88 -0
  31. package/lib/cjs/namespaces/models/user.model.cjs +75 -0
  32. package/lib/cjs/namespaces/org-based-authorization-system.cjs +286 -0
  33. package/lib/cjs/namespaces/org-based-authorization-system.models.cjs +968 -0
  34. package/lib/cjs/namespaces/org-based-authorization-system.services.cjs +1046 -0
  35. package/lib/cjs/namespaces/services/authz.service.cjs +76 -0
  36. package/lib/cjs/namespaces/services/bootstrap.service.cjs +112 -0
  37. package/lib/cjs/namespaces/services/effective-permission.service.cjs +150 -0
  38. package/lib/cjs/namespaces/services/group-membership.service.cjs +42 -0
  39. package/lib/cjs/namespaces/services/group.service.cjs +30 -0
  40. package/lib/cjs/namespaces/services/index.cjs +42 -0
  41. package/lib/cjs/namespaces/services/inheritance-block.service.cjs +32 -0
  42. package/lib/cjs/namespaces/services/org-unit-closure.service.cjs +55 -0
  43. package/lib/cjs/namespaces/services/org-unit-membership.service.cjs +34 -0
  44. package/lib/cjs/namespaces/services/org-unit-profile.service.cjs +23 -0
  45. package/lib/cjs/namespaces/services/org-unit.service.cjs +160 -0
  46. package/lib/cjs/namespaces/services/permission.service.cjs +29 -0
  47. package/lib/cjs/namespaces/services/principal.service.cjs +35 -0
  48. package/lib/cjs/namespaces/services/protected-resource.service.cjs +43 -0
  49. package/lib/cjs/namespaces/services/resource-grant.service.cjs +45 -0
  50. package/lib/cjs/namespaces/services/resource-lifecycle.service.cjs +24 -0
  51. package/lib/cjs/namespaces/services/role-assignment.service.cjs +41 -0
  52. package/lib/cjs/namespaces/services/role-permission.service.cjs +51 -0
  53. package/lib/cjs/namespaces/services/role.service.cjs +45 -0
  54. package/lib/cjs/namespaces/services/storage-binding.service.cjs +39 -0
  55. package/lib/cjs/namespaces/services/system-management.service.cjs +102 -0
  56. package/lib/cjs/namespaces/services/tenant-membership.service.cjs +33 -0
  57. package/lib/cjs/namespaces/services/tenant-profile.service.cjs +28 -0
  58. package/lib/cjs/namespaces/services/tenant.service.cjs +36 -0
  59. package/lib/cjs/namespaces/services/user.service.cjs +32 -0
  60. package/lib/cjs/namespaces/types.cjs +67 -0
  61. package/lib/cjs/namespaces/utils.cjs +161 -0
  62. package/lib/cjs/nest/authService.cjs +5 -2
  63. package/lib/cjs/nest/graph/GraphExecutionController.cjs +153 -0
  64. package/lib/cjs/nest/graph/GraphExecutionModule.cjs +84 -0
  65. package/lib/cjs/nest/graph/GraphExecutionResultModel.cjs +82 -0
  66. package/lib/cjs/nest/graph/GraphExecutionResultRepository.cjs +66 -0
  67. package/lib/cjs/nest/graph/GraphExecutorRegistryFactory.cjs +35 -0
  68. package/lib/cjs/nest/graph/index.cjs +28 -0
  69. package/lib/cjs/nest/index.cjs +3 -2
  70. package/lib/esm/graph/execution/SwitchGraphNodeExecutor.js +12 -4
  71. package/lib/esm/graph/nodes/base.js +30 -0
  72. package/lib/esm/graph/nodes/flow-control.js +31 -3
  73. package/lib/esm/graph/nodes/index.js +2 -1
  74. package/lib/esm/graph/types.js +1 -1
  75. package/lib/esm/index.js +5 -4
  76. package/lib/esm/namespaces/index.js +9 -0
  77. package/lib/esm/namespaces/models/authorization-model.js +7 -0
  78. package/lib/esm/namespaces/models/effective-permission.model.js +86 -0
  79. package/lib/esm/namespaces/models/group-membership.model.js +57 -0
  80. package/lib/esm/namespaces/models/group.model.js +65 -0
  81. package/lib/esm/namespaces/models/index.js +22 -0
  82. package/lib/esm/namespaces/models/inheritance-block.model.js +67 -0
  83. package/lib/esm/namespaces/models/org-unit-closure.model.js +57 -0
  84. package/lib/esm/namespaces/models/org-unit-membership.model.js +64 -0
  85. package/lib/esm/namespaces/models/org-unit-profile.model.js +55 -0
  86. package/lib/esm/namespaces/models/org-unit.model.js +93 -0
  87. package/lib/esm/namespaces/models/permission.model.js +55 -0
  88. package/lib/esm/namespaces/models/principal.model.js +68 -0
  89. package/lib/esm/namespaces/models/protected-resource.model.js +90 -0
  90. package/lib/esm/namespaces/models/resource-grant.model.js +79 -0
  91. package/lib/esm/namespaces/models/role-assignment.model.js +89 -0
  92. package/lib/esm/namespaces/models/role-permission.model.js +46 -0
  93. package/lib/esm/namespaces/models/role.model.js +75 -0
  94. package/lib/esm/namespaces/models/storage-binding.model.js +76 -0
  95. package/lib/esm/namespaces/models/tenant-membership.model.js +58 -0
  96. package/lib/esm/namespaces/models/tenant-profile.model.js +55 -0
  97. package/lib/esm/namespaces/models/tenant.model.js +79 -0
  98. package/lib/esm/namespaces/models/user.model.js +66 -0
  99. package/lib/esm/namespaces/org-based-authorization-system.js +283 -0
  100. package/lib/esm/namespaces/org-based-authorization-system.models.js +958 -0
  101. package/lib/esm/namespaces/org-based-authorization-system.services.js +1014 -0
  102. package/lib/esm/namespaces/services/authz.service.js +71 -0
  103. package/lib/esm/namespaces/services/bootstrap.service.js +102 -0
  104. package/lib/esm/namespaces/services/effective-permission.service.js +140 -0
  105. package/lib/esm/namespaces/services/group-membership.service.js +37 -0
  106. package/lib/esm/namespaces/services/group.service.js +25 -0
  107. package/lib/esm/namespaces/services/index.js +25 -0
  108. package/lib/esm/namespaces/services/inheritance-block.service.js +27 -0
  109. package/lib/esm/namespaces/services/org-unit-closure.service.js +50 -0
  110. package/lib/esm/namespaces/services/org-unit-membership.service.js +29 -0
  111. package/lib/esm/namespaces/services/org-unit-profile.service.js +18 -0
  112. package/lib/esm/namespaces/services/org-unit.service.js +150 -0
  113. package/lib/esm/namespaces/services/permission.service.js +24 -0
  114. package/lib/esm/namespaces/services/principal.service.js +30 -0
  115. package/lib/esm/namespaces/services/protected-resource.service.js +38 -0
  116. package/lib/esm/namespaces/services/resource-grant.service.js +40 -0
  117. package/lib/esm/namespaces/services/resource-lifecycle.service.js +19 -0
  118. package/lib/esm/namespaces/services/role-assignment.service.js +36 -0
  119. package/lib/esm/namespaces/services/role-permission.service.js +46 -0
  120. package/lib/esm/namespaces/services/role.service.js +40 -0
  121. package/lib/esm/namespaces/services/storage-binding.service.js +34 -0
  122. package/lib/esm/namespaces/services/system-management.service.js +92 -0
  123. package/lib/esm/namespaces/services/tenant-membership.service.js +28 -0
  124. package/lib/esm/namespaces/services/tenant-profile.service.js +23 -0
  125. package/lib/esm/namespaces/services/tenant.service.js +31 -0
  126. package/lib/esm/namespaces/services/user.service.js +27 -0
  127. package/lib/esm/namespaces/types.js +71 -0
  128. package/lib/esm/namespaces/utils.js +143 -0
  129. package/lib/esm/nest/authService.js +4 -1
  130. package/lib/esm/nest/graph/GraphExecutionController.js +144 -0
  131. package/lib/esm/nest/graph/GraphExecutionModule.js +76 -0
  132. package/lib/esm/nest/graph/GraphExecutionResultModel.js +73 -0
  133. package/lib/esm/nest/graph/GraphExecutionResultRepository.js +60 -0
  134. package/lib/esm/nest/graph/GraphExecutorRegistryFactory.js +31 -0
  135. package/lib/esm/nest/graph/index.js +11 -0
  136. package/lib/esm/nest/index.js +2 -1
  137. package/lib/types/graph/nodes/base.d.cts +28 -0
  138. package/lib/types/graph/nodes/base.d.mts +28 -0
  139. package/lib/types/graph/nodes/flow-control.d.cts +9 -1
  140. package/lib/types/graph/nodes/flow-control.d.mts +9 -1
  141. package/lib/types/graph/nodes/index.d.cts +1 -0
  142. package/lib/types/graph/nodes/index.d.mts +1 -0
  143. package/lib/types/graph/types.d.cts +15 -1
  144. package/lib/types/graph/types.d.mts +15 -1
  145. package/lib/types/index.d.cts +3 -2
  146. package/lib/types/index.d.mts +3 -2
  147. package/lib/types/namespaces/index.d.cts +8 -0
  148. package/lib/types/namespaces/index.d.mts +8 -0
  149. package/lib/types/namespaces/models/authorization-model.d.cts +4 -0
  150. package/lib/types/namespaces/models/authorization-model.d.mts +4 -0
  151. package/lib/types/namespaces/models/effective-permission.model.d.cts +18 -0
  152. package/lib/types/namespaces/models/effective-permission.model.d.mts +18 -0
  153. package/lib/types/namespaces/models/group-membership.model.d.cts +13 -0
  154. package/lib/types/namespaces/models/group-membership.model.d.mts +13 -0
  155. package/lib/types/namespaces/models/group.model.d.cts +15 -0
  156. package/lib/types/namespaces/models/group.model.d.mts +15 -0
  157. package/lib/types/namespaces/models/index.d.cts +21 -0
  158. package/lib/types/namespaces/models/index.d.mts +21 -0
  159. package/lib/types/namespaces/models/inheritance-block.model.d.cts +15 -0
  160. package/lib/types/namespaces/models/inheritance-block.model.d.mts +15 -0
  161. package/lib/types/namespaces/models/org-unit-closure.model.d.cts +12 -0
  162. package/lib/types/namespaces/models/org-unit-closure.model.d.mts +12 -0
  163. package/lib/types/namespaces/models/org-unit-membership.model.d.cts +15 -0
  164. package/lib/types/namespaces/models/org-unit-membership.model.d.mts +15 -0
  165. package/lib/types/namespaces/models/org-unit-profile.model.d.cts +11 -0
  166. package/lib/types/namespaces/models/org-unit-profile.model.d.mts +11 -0
  167. package/lib/types/namespaces/models/org-unit.model.d.cts +23 -0
  168. package/lib/types/namespaces/models/org-unit.model.d.mts +23 -0
  169. package/lib/types/namespaces/models/permission.model.d.cts +11 -0
  170. package/lib/types/namespaces/models/permission.model.d.mts +11 -0
  171. package/lib/types/namespaces/models/principal.model.d.cts +16 -0
  172. package/lib/types/namespaces/models/principal.model.d.mts +16 -0
  173. package/lib/types/namespaces/models/protected-resource.model.d.cts +21 -0
  174. package/lib/types/namespaces/models/protected-resource.model.d.mts +21 -0
  175. package/lib/types/namespaces/models/resource-grant.model.d.cts +18 -0
  176. package/lib/types/namespaces/models/resource-grant.model.d.mts +18 -0
  177. package/lib/types/namespaces/models/role-assignment.model.d.cts +20 -0
  178. package/lib/types/namespaces/models/role-assignment.model.d.mts +20 -0
  179. package/lib/types/namespaces/models/role-permission.model.d.cts +10 -0
  180. package/lib/types/namespaces/models/role-permission.model.d.mts +10 -0
  181. package/lib/types/namespaces/models/role.model.d.cts +17 -0
  182. package/lib/types/namespaces/models/role.model.d.mts +17 -0
  183. package/lib/types/namespaces/models/storage-binding.model.d.cts +15 -0
  184. package/lib/types/namespaces/models/storage-binding.model.d.mts +15 -0
  185. package/lib/types/namespaces/models/tenant-membership.model.d.cts +13 -0
  186. package/lib/types/namespaces/models/tenant-membership.model.d.mts +13 -0
  187. package/lib/types/namespaces/models/tenant-profile.model.d.cts +11 -0
  188. package/lib/types/namespaces/models/tenant-profile.model.d.mts +11 -0
  189. package/lib/types/namespaces/models/tenant.model.d.cts +19 -0
  190. package/lib/types/namespaces/models/tenant.model.d.mts +19 -0
  191. package/lib/types/namespaces/models/user.model.d.cts +14 -0
  192. package/lib/types/namespaces/models/user.model.d.mts +14 -0
  193. package/lib/types/namespaces/org-based-authorization-system.d.cts +299 -0
  194. package/lib/types/namespaces/org-based-authorization-system.d.mts +299 -0
  195. package/lib/types/namespaces/org-based-authorization-system.models.d.cts +212 -0
  196. package/lib/types/namespaces/org-based-authorization-system.models.d.mts +212 -0
  197. package/lib/types/namespaces/org-based-authorization-system.services.d.cts +217 -0
  198. package/lib/types/namespaces/org-based-authorization-system.services.d.mts +217 -0
  199. package/lib/types/namespaces/services/authz.service.d.cts +10 -0
  200. package/lib/types/namespaces/services/authz.service.d.mts +10 -0
  201. package/lib/types/namespaces/services/bootstrap.service.d.cts +21 -0
  202. package/lib/types/namespaces/services/bootstrap.service.d.mts +21 -0
  203. package/lib/types/namespaces/services/effective-permission.service.d.cts +13 -0
  204. package/lib/types/namespaces/services/effective-permission.service.d.mts +13 -0
  205. package/lib/types/namespaces/services/group-membership.service.d.cts +10 -0
  206. package/lib/types/namespaces/services/group-membership.service.d.mts +10 -0
  207. package/lib/types/namespaces/services/group.service.d.cts +9 -0
  208. package/lib/types/namespaces/services/group.service.d.mts +9 -0
  209. package/lib/types/namespaces/services/index.d.cts +24 -0
  210. package/lib/types/namespaces/services/index.d.mts +24 -0
  211. package/lib/types/namespaces/services/inheritance-block.service.d.cts +10 -0
  212. package/lib/types/namespaces/services/inheritance-block.service.d.mts +10 -0
  213. package/lib/types/namespaces/services/org-unit-closure.service.d.cts +11 -0
  214. package/lib/types/namespaces/services/org-unit-closure.service.d.mts +11 -0
  215. package/lib/types/namespaces/services/org-unit-membership.service.d.cts +11 -0
  216. package/lib/types/namespaces/services/org-unit-membership.service.d.mts +11 -0
  217. package/lib/types/namespaces/services/org-unit-profile.service.d.cts +7 -0
  218. package/lib/types/namespaces/services/org-unit-profile.service.d.mts +7 -0
  219. package/lib/types/namespaces/services/org-unit.service.d.cts +18 -0
  220. package/lib/types/namespaces/services/org-unit.service.d.mts +18 -0
  221. package/lib/types/namespaces/services/permission.service.d.cts +10 -0
  222. package/lib/types/namespaces/services/permission.service.d.mts +10 -0
  223. package/lib/types/namespaces/services/principal.service.d.cts +11 -0
  224. package/lib/types/namespaces/services/principal.service.d.mts +11 -0
  225. package/lib/types/namespaces/services/protected-resource.service.d.cts +13 -0
  226. package/lib/types/namespaces/services/protected-resource.service.d.mts +13 -0
  227. package/lib/types/namespaces/services/resource-grant.service.d.cts +12 -0
  228. package/lib/types/namespaces/services/resource-grant.service.d.mts +12 -0
  229. package/lib/types/namespaces/services/resource-lifecycle.service.d.cts +10 -0
  230. package/lib/types/namespaces/services/resource-lifecycle.service.d.mts +10 -0
  231. package/lib/types/namespaces/services/role-assignment.service.d.cts +12 -0
  232. package/lib/types/namespaces/services/role-assignment.service.d.mts +12 -0
  233. package/lib/types/namespaces/services/role-permission.service.d.cts +12 -0
  234. package/lib/types/namespaces/services/role-permission.service.d.mts +12 -0
  235. package/lib/types/namespaces/services/role.service.d.cts +12 -0
  236. package/lib/types/namespaces/services/role.service.d.mts +12 -0
  237. package/lib/types/namespaces/services/storage-binding.service.d.cts +12 -0
  238. package/lib/types/namespaces/services/storage-binding.service.d.mts +12 -0
  239. package/lib/types/namespaces/services/system-management.service.d.cts +14 -0
  240. package/lib/types/namespaces/services/system-management.service.d.mts +14 -0
  241. package/lib/types/namespaces/services/tenant-membership.service.d.cts +11 -0
  242. package/lib/types/namespaces/services/tenant-membership.service.d.mts +11 -0
  243. package/lib/types/namespaces/services/tenant-profile.service.d.cts +8 -0
  244. package/lib/types/namespaces/services/tenant-profile.service.d.mts +8 -0
  245. package/lib/types/namespaces/services/tenant.service.d.cts +12 -0
  246. package/lib/types/namespaces/services/tenant.service.d.mts +12 -0
  247. package/lib/types/namespaces/services/user.service.d.cts +11 -0
  248. package/lib/types/namespaces/services/user.service.d.mts +11 -0
  249. package/lib/types/namespaces/types.d.cts +230 -0
  250. package/lib/types/namespaces/types.d.mts +230 -0
  251. package/lib/types/namespaces/utils.d.cts +68 -0
  252. package/lib/types/namespaces/utils.d.mts +68 -0
  253. package/lib/types/nest/authService.d.cts +1 -0
  254. package/lib/types/nest/authService.d.mts +1 -0
  255. package/lib/types/nest/graph/GraphExecutionController.d.cts +62 -0
  256. package/lib/types/nest/graph/GraphExecutionController.d.mts +62 -0
  257. package/lib/types/nest/graph/GraphExecutionModule.d.cts +39 -0
  258. package/lib/types/nest/graph/GraphExecutionModule.d.mts +39 -0
  259. package/lib/types/nest/graph/GraphExecutionResultModel.d.cts +46 -0
  260. package/lib/types/nest/graph/GraphExecutionResultModel.d.mts +46 -0
  261. package/lib/types/nest/graph/GraphExecutionResultRepository.d.cts +38 -0
  262. package/lib/types/nest/graph/GraphExecutionResultRepository.d.mts +38 -0
  263. package/lib/types/nest/graph/GraphExecutorRegistryFactory.d.cts +17 -0
  264. package/lib/types/nest/graph/GraphExecutorRegistryFactory.d.mts +17 -0
  265. package/lib/types/nest/graph/index.d.cts +10 -0
  266. package/lib/types/nest/graph/index.d.mts +10 -0
  267. package/lib/types/nest/index.d.cts +1 -0
  268. package/lib/types/nest/index.d.mts +1 -0
  269. package/package.json +16 -5
  270. package/sql/001_constraints.sql +11 -0
  271. package/sql/002_rls.sql +20 -0
  272. package/sql/003_indexes.sql +2 -0
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GraphExecutionController = exports.GRAPH_RESULT_REPOSITORY = void 0;
4
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
5
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
6
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
7
+ r = Reflect.decorate(decorators, target, key, desc);
8
+ else
9
+ for (var i = decorators.length - 1; i >= 0; i--)
10
+ if (d = decorators[i])
11
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
12
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
13
+ };
14
+ var __metadata = (this && this.__metadata) || function (k, v) {
15
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
16
+ return Reflect.metadata(k, v);
17
+ };
18
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
19
+ return function (target, key) { decorator(target, key, paramIndex); };
20
+ };
21
+ /**
22
+ * @module integrations/nest/graph/GraphExecutionController
23
+ * @summary NestJS controller bridging the graph execution engine to REST + SSE.
24
+ * @description Exposes three endpoints:
25
+ * - `POST /graph/execute` — triggers {@link GraphExecutionEngine.execute}, persists the result via a Decaf repository, and returns `{ runId, status, outputs }`.
26
+ * - `GET /graph/events` — SSE endpoint streaming {@link GraphExecutionEvent}s as `[modelName, operation, id, payload]` tuples (compatible with for-http's `ServerEventConnector`).
27
+ * - `GET /graph/results/:runId` — retrieves a persisted {@link GraphExecutionResultModel} from the repository.
28
+ *
29
+ * This is the production pattern: for-nest hosts the engine, for-angular consumes events over the network via SSE and fetches persisted results via REST.
30
+ */
31
+ const common_1 = require("@nestjs/common");
32
+ const rxjs_1 = require("rxjs");
33
+ const operators_1 = require("rxjs/operators");
34
+ const index_js_1 = require("./../../graph/index.cjs");
35
+ const GraphExecutionResultRepository_js_1 = require("./GraphExecutionResultRepository.cjs");
36
+ /**
37
+ * NestJS injection token for the graph execution result repository.
38
+ */
39
+ exports.GRAPH_RESULT_REPOSITORY = "GRAPH_RESULT_REPOSITORY";
40
+ /**
41
+ * NestJS controller that hosts the graph execution engine server-side,
42
+ * streams events via SSE, and persists results for later retrieval.
43
+ */
44
+ let GraphExecutionController = class GraphExecutionController {
45
+ constructor(engine, resultRepository) {
46
+ this.engine = engine;
47
+ this.resultRepository = resultRepository;
48
+ this.eventSubject = new rxjs_1.Subject();
49
+ this.engine.observe({
50
+ refresh: async (event) => {
51
+ this.eventSubject.next(event);
52
+ },
53
+ });
54
+ }
55
+ /**
56
+ * Triggers graph execution server-side, persists the result, and returns
57
+ * a summary containing the `runId`, `status`, and `outputs`.
58
+ */
59
+ async execute(body) {
60
+ const result = await this.engine.execute(body.workflow, body.inputs ?? {});
61
+ try {
62
+ await this.resultRepository.create((0, GraphExecutionResultRepository_js_1.toResultModel)(result));
63
+ }
64
+ catch {
65
+ // persistence failures must not mask a successful execution result
66
+ }
67
+ return {
68
+ runId: result.runId,
69
+ status: result.status,
70
+ outputs: result.outputs,
71
+ };
72
+ }
73
+ /**
74
+ * SSE endpoint that streams graph execution events.
75
+ *
76
+ * Events are serialized as `[modelName, operation, id, payload]` to match
77
+ * the format expected by for-http's `ServerEventConnector`.
78
+ */
79
+ events() {
80
+ return this.eventSubject.asObservable().pipe((0, operators_1.map)((event) => ({
81
+ type: "message",
82
+ data: JSON.stringify([
83
+ "graph",
84
+ event.type,
85
+ event.runId,
86
+ {
87
+ id: event.id,
88
+ sequence: event.sequence,
89
+ type: event.type,
90
+ runId: event.runId,
91
+ parentRunId: event.parentRunId,
92
+ workflowId: event.workflowId,
93
+ nodeId: event.nodeId,
94
+ edgeId: event.edgeId,
95
+ port: event.port,
96
+ iteration: event.iteration,
97
+ path: event.path,
98
+ status: event.status,
99
+ payload: event.payload,
100
+ error: event.error,
101
+ timestamp: event.timestamp.toISOString(),
102
+ },
103
+ ]),
104
+ })));
105
+ }
106
+ /**
107
+ * Retrieves a persisted graph execution result by its `runId`.
108
+ *
109
+ * @throws {NotFoundException} when no result is stored for the given `runId`.
110
+ */
111
+ async getResult(runId) {
112
+ let model;
113
+ try {
114
+ model = (await this.resultRepository.read(runId));
115
+ }
116
+ catch {
117
+ model = null;
118
+ }
119
+ const result = (0, GraphExecutionResultRepository_js_1.fromResultModel)(model);
120
+ if (!result) {
121
+ throw new common_1.NotFoundException(`No graph execution result found for runId '${runId}'`);
122
+ }
123
+ return result;
124
+ }
125
+ };
126
+ exports.GraphExecutionController = GraphExecutionController;
127
+ __decorate([
128
+ (0, common_1.Post)("execute"),
129
+ __param(0, (0, common_1.Body)()),
130
+ __metadata("design:type", Function),
131
+ __metadata("design:paramtypes", [Object]),
132
+ __metadata("design:returntype", Promise)
133
+ ], GraphExecutionController.prototype, "execute", null);
134
+ __decorate([
135
+ (0, common_1.Sse)("events"),
136
+ __metadata("design:type", Function),
137
+ __metadata("design:paramtypes", []),
138
+ __metadata("design:returntype", rxjs_1.Observable)
139
+ ], GraphExecutionController.prototype, "events", null);
140
+ __decorate([
141
+ (0, common_1.Get)("results/:runId"),
142
+ __param(0, (0, common_1.Param)("runId")),
143
+ __metadata("design:type", Function),
144
+ __metadata("design:paramtypes", [String]),
145
+ __metadata("design:returntype", Promise)
146
+ ], GraphExecutionController.prototype, "getResult", null);
147
+ exports.GraphExecutionController = GraphExecutionController = __decorate([
148
+ (0, common_1.Controller)("graph"),
149
+ __param(1, (0, common_1.Inject)(exports.GRAPH_RESULT_REPOSITORY)),
150
+ __metadata("design:paramtypes", [index_js_1.GraphExecutionEngine, Object])
151
+ ], GraphExecutionController);
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25Db250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25lc3QvZ3JhcGgvR3JhcGhFeGVjdXRpb25Db250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBOzs7Ozs7Ozs7R0FTRztBQUNILE9BQU8sRUFDTCxVQUFVLEVBQ1YsSUFBSSxFQUNKLEdBQUcsRUFDSCxJQUFJLEVBQ0osS0FBSyxFQUNMLEdBQUcsRUFFSCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE9BQU8sRUFDTCxvQkFBb0IsR0FHckIsK0JBQW9CO0FBR3JCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxHQUVkLDRDQUF5QztBQUcxQzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLHlCQUF5QixDQUFDO0FBbUJqRTs7O0dBR0c7QUFFSSxJQUFNLHdCQUF3QixHQUE5QixNQUFNLHdCQUF3QjtJQUduQyxZQUNtQixNQUE0QixFQUU3QyxnQkFBeUU7UUFGeEQsV0FBTSxHQUFOLE1BQU0sQ0FBc0I7UUFFNUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF3QztRQUwxRCxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO1FBT2pFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1lBQ2xCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBRUcsQUFBTixLQUFLLENBQUMsT0FBTyxDQUNILElBQXlCO1FBRWpDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTNFLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsbUVBQW1FO1FBQ3JFLENBQUM7UUFFRCxPQUFPO1lBQ0wsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1lBQ25CLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtZQUNyQixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87U0FDeEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUVILE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUMxQyxHQUFHLENBQ0QsQ0FBQyxLQUEwQixFQUFnQixFQUFFLENBQUMsQ0FBQztZQUM3QyxJQUFJLEVBQUUsU0FBUztZQUNmLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNuQixPQUFPO2dCQUNQLEtBQUssQ0FBQyxJQUFJO2dCQUNWLEtBQUssQ0FBQyxLQUFLO2dCQUNYO29CQUNFLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDWixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7b0JBQ3hCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtvQkFDaEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO29CQUNsQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7b0JBQzlCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtvQkFDNUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO29CQUNwQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07b0JBQ3BCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtvQkFDaEIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO29CQUMxQixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7b0JBQ2hCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtvQkFDcEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO29CQUN0QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7b0JBQ2xCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRTtpQkFDekM7YUFDRixDQUFDO1NBQ0gsQ0FBQyxDQUNILENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBRUcsQUFBTixLQUFLLENBQUMsU0FBUyxDQUFpQixLQUFhO1FBQzNDLElBQUksS0FBdUMsQ0FBQztRQUM1QyxJQUFJLENBQUM7WUFDSCxLQUFLLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQ3ZDLEtBQUssQ0FDTixDQUFxQyxDQUFDO1FBQ3pDLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLElBQUksaUJBQWlCLENBQ3pCLDhDQUE4QyxLQUFLLEdBQUcsQ0FDdkQsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0NBQ0YsQ0FBQTtBQWhGTztJQURMLElBQUksQ0FBQyxTQUFTLENBQUM7SUFFYixXQUFBLElBQUksRUFBRSxDQUFBOzs7O3VEQWVSO0FBU0Q7SUFEQyxHQUFHLENBQUMsUUFBUSxDQUFDOzs7b0NBQ0osVUFBVTtzREE4Qm5CO0FBUUs7SUFETCxHQUFHLENBQUMsZ0JBQWdCLENBQUM7SUFDTCxXQUFBLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTs7Ozt5REFnQjlCO0FBbkdVLHdCQUF3QjtJQURwQyxVQUFVLENBQUMsT0FBTyxDQUFDO0lBTWYsV0FBQSxNQUFNLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtxQ0FEUCxvQkFBb0I7R0FKcEMsd0JBQXdCLENBb0dwQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBpbnRlZ3JhdGlvbnMvbmVzdC9ncmFwaC9HcmFwaEV4ZWN1dGlvbkNvbnRyb2xsZXJcbiAqIEBzdW1tYXJ5IE5lc3RKUyBjb250cm9sbGVyIGJyaWRnaW5nIHRoZSBncmFwaCBleGVjdXRpb24gZW5naW5lIHRvIFJFU1QgKyBTU0UuXG4gKiBAZGVzY3JpcHRpb24gRXhwb3NlcyB0aHJlZSBlbmRwb2ludHM6XG4gKiAtIGBQT1NUIC9ncmFwaC9leGVjdXRlYCDigJQgdHJpZ2dlcnMge0BsaW5rIEdyYXBoRXhlY3V0aW9uRW5naW5lLmV4ZWN1dGV9LCBwZXJzaXN0cyB0aGUgcmVzdWx0IHZpYSBhIERlY2FmIHJlcG9zaXRvcnksIGFuZCByZXR1cm5zIGB7IHJ1bklkLCBzdGF0dXMsIG91dHB1dHMgfWAuXG4gKiAtIGBHRVQgL2dyYXBoL2V2ZW50c2Ag4oCUIFNTRSBlbmRwb2ludCBzdHJlYW1pbmcge0BsaW5rIEdyYXBoRXhlY3V0aW9uRXZlbnR9cyBhcyBgW21vZGVsTmFtZSwgb3BlcmF0aW9uLCBpZCwgcGF5bG9hZF1gIHR1cGxlcyAoY29tcGF0aWJsZSB3aXRoIGZvci1odHRwJ3MgYFNlcnZlckV2ZW50Q29ubmVjdG9yYCkuXG4gKiAtIGBHRVQgL2dyYXBoL3Jlc3VsdHMvOnJ1bklkYCDigJQgcmV0cmlldmVzIGEgcGVyc2lzdGVkIHtAbGluayBHcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsfSBmcm9tIHRoZSByZXBvc2l0b3J5LlxuICpcbiAqIFRoaXMgaXMgdGhlIHByb2R1Y3Rpb24gcGF0dGVybjogZm9yLW5lc3QgaG9zdHMgdGhlIGVuZ2luZSwgZm9yLWFuZ3VsYXIgY29uc3VtZXMgZXZlbnRzIG92ZXIgdGhlIG5ldHdvcmsgdmlhIFNTRSBhbmQgZmV0Y2hlcyBwZXJzaXN0ZWQgcmVzdWx0cyB2aWEgUkVTVC5cbiAqL1xuaW1wb3J0IHtcbiAgQ29udHJvbGxlcixcbiAgUG9zdCxcbiAgR2V0LFxuICBCb2R5LFxuICBQYXJhbSxcbiAgU3NlLFxuICBNZXNzYWdlRXZlbnQsXG4gIEluamVjdCxcbiAgTm90Rm91bmRFeGNlcHRpb24sXG59IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHsgU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBtYXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcblxuaW1wb3J0IHtcbiAgR3JhcGhFeGVjdXRpb25FbmdpbmUsXG4gIHR5cGUgR3JhcGhFeGVjdXRpb25FdmVudCxcbiAgdHlwZSBHcmFwaEV4ZWN1dGlvblZhbHVlcyxcbn0gZnJvbSBcIi4uLy4uL2dyYXBoXCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoV29ya2Zsb3dEZWZpbml0aW9uIH0gZnJvbSBcIkBkZWNhZi10cy91aS1kZWNvcmF0b3JzL2dyYXBoXCI7XG5cbmltcG9ydCB7XG4gIGZyb21SZXN1bHRNb2RlbCxcbiAgdG9SZXN1bHRNb2RlbCxcbiAgdHlwZSBHcmFwaEV4ZWN1dGlvblJlc3VsdFJlcG9zaXRvcnlJbnN0YW5jZSxcbn0gZnJvbSBcIi4vR3JhcGhFeGVjdXRpb25SZXN1bHRSZXBvc2l0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IEdyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWwgfSBmcm9tIFwiLi9HcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsXCI7XG5cbi8qKlxuICogTmVzdEpTIGluamVjdGlvbiB0b2tlbiBmb3IgdGhlIGdyYXBoIGV4ZWN1dGlvbiByZXN1bHQgcmVwb3NpdG9yeS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdSQVBIX1JFU1VMVF9SRVBPU0lUT1JZID0gXCJHUkFQSF9SRVNVTFRfUkVQT1NJVE9SWVwiO1xuXG4vKipcbiAqIFBheWxvYWQgZm9yIHRoZSBgUE9TVCAvZ3JhcGgvZXhlY3V0ZWAgZW5kcG9pbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JhcGhFeGVjdXRlUGF5bG9hZCB7XG4gIHdvcmtmbG93OiBHcmFwaFdvcmtmbG93RGVmaW5pdGlvbjtcbiAgaW5wdXRzOiBHcmFwaEV4ZWN1dGlvblZhbHVlcztcbn1cblxuLyoqXG4gKiBSZXNwb25zZSBzaGFwZSBmb3IgdGhlIGBQT1NUIC9ncmFwaC9leGVjdXRlYCBlbmRwb2ludC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaEV4ZWN1dGVSZXNwb25zZSB7XG4gIHJ1bklkOiBzdHJpbmc7XG4gIHN0YXR1czogc3RyaW5nO1xuICBvdXRwdXRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbn1cblxuLyoqXG4gKiBOZXN0SlMgY29udHJvbGxlciB0aGF0IGhvc3RzIHRoZSBncmFwaCBleGVjdXRpb24gZW5naW5lIHNlcnZlci1zaWRlLFxuICogc3RyZWFtcyBldmVudHMgdmlhIFNTRSwgYW5kIHBlcnNpc3RzIHJlc3VsdHMgZm9yIGxhdGVyIHJldHJpZXZhbC5cbiAqL1xuQENvbnRyb2xsZXIoXCJncmFwaFwiKVxuZXhwb3J0IGNsYXNzIEdyYXBoRXhlY3V0aW9uQ29udHJvbGxlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8R3JhcGhFeGVjdXRpb25FdmVudD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVuZ2luZTogR3JhcGhFeGVjdXRpb25FbmdpbmUsXG4gICAgQEluamVjdChHUkFQSF9SRVNVTFRfUkVQT1NJVE9SWSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3VsdFJlcG9zaXRvcnk6IEdyYXBoRXhlY3V0aW9uUmVzdWx0UmVwb3NpdG9yeUluc3RhbmNlXG4gICkge1xuICAgIHRoaXMuZW5naW5lLm9ic2VydmUoe1xuICAgICAgcmVmcmVzaDogYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoZXZlbnQpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBncmFwaCBleGVjdXRpb24gc2VydmVyLXNpZGUsIHBlcnNpc3RzIHRoZSByZXN1bHQsIGFuZCByZXR1cm5zXG4gICAqIGEgc3VtbWFyeSBjb250YWluaW5nIHRoZSBgcnVuSWRgLCBgc3RhdHVzYCwgYW5kIGBvdXRwdXRzYC5cbiAgICovXG4gIEBQb3N0KFwiZXhlY3V0ZVwiKVxuICBhc3luYyBleGVjdXRlKFxuICAgIEBCb2R5KCkgYm9keTogR3JhcGhFeGVjdXRlUGF5bG9hZFxuICApOiBQcm9taXNlPEdyYXBoRXhlY3V0ZVJlc3BvbnNlPiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5lbmdpbmUuZXhlY3V0ZShib2R5LndvcmtmbG93LCBib2R5LmlucHV0cyA/PyB7fSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5yZXN1bHRSZXBvc2l0b3J5LmNyZWF0ZSh0b1Jlc3VsdE1vZGVsKHJlc3VsdCkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gcGVyc2lzdGVuY2UgZmFpbHVyZXMgbXVzdCBub3QgbWFzayBhIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIHJlc3VsdFxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBydW5JZDogcmVzdWx0LnJ1bklkLFxuICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgb3V0cHV0czogcmVzdWx0Lm91dHB1dHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTU0UgZW5kcG9pbnQgdGhhdCBzdHJlYW1zIGdyYXBoIGV4ZWN1dGlvbiBldmVudHMuXG4gICAqXG4gICAqIEV2ZW50cyBhcmUgc2VyaWFsaXplZCBhcyBgW21vZGVsTmFtZSwgb3BlcmF0aW9uLCBpZCwgcGF5bG9hZF1gIHRvIG1hdGNoXG4gICAqIHRoZSBmb3JtYXQgZXhwZWN0ZWQgYnkgZm9yLWh0dHAncyBgU2VydmVyRXZlbnRDb25uZWN0b3JgLlxuICAgKi9cbiAgQFNzZShcImV2ZW50c1wiKVxuICBldmVudHMoKTogT2JzZXJ2YWJsZTxNZXNzYWdlRXZlbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5ldmVudFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKGV2ZW50OiBHcmFwaEV4ZWN1dGlvbkV2ZW50KTogTWVzc2FnZUV2ZW50ID0+ICh7XG4gICAgICAgICAgdHlwZTogXCJtZXNzYWdlXCIsXG4gICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgICAgXCJncmFwaFwiLFxuICAgICAgICAgICAgZXZlbnQudHlwZSxcbiAgICAgICAgICAgIGV2ZW50LnJ1bklkLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogZXZlbnQuaWQsXG4gICAgICAgICAgICAgIHNlcXVlbmNlOiBldmVudC5zZXF1ZW5jZSxcbiAgICAgICAgICAgICAgdHlwZTogZXZlbnQudHlwZSxcbiAgICAgICAgICAgICAgcnVuSWQ6IGV2ZW50LnJ1bklkLFxuICAgICAgICAgICAgICBwYXJlbnRSdW5JZDogZXZlbnQucGFyZW50UnVuSWQsXG4gICAgICAgICAgICAgIHdvcmtmbG93SWQ6IGV2ZW50LndvcmtmbG93SWQsXG4gICAgICAgICAgICAgIG5vZGVJZDogZXZlbnQubm9kZUlkLFxuICAgICAgICAgICAgICBlZGdlSWQ6IGV2ZW50LmVkZ2VJZCxcbiAgICAgICAgICAgICAgcG9ydDogZXZlbnQucG9ydCxcbiAgICAgICAgICAgICAgaXRlcmF0aW9uOiBldmVudC5pdGVyYXRpb24sXG4gICAgICAgICAgICAgIHBhdGg6IGV2ZW50LnBhdGgsXG4gICAgICAgICAgICAgIHN0YXR1czogZXZlbnQuc3RhdHVzLFxuICAgICAgICAgICAgICBwYXlsb2FkOiBldmVudC5wYXlsb2FkLFxuICAgICAgICAgICAgICBlcnJvcjogZXZlbnQuZXJyb3IsXG4gICAgICAgICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgcGVyc2lzdGVkIGdyYXBoIGV4ZWN1dGlvbiByZXN1bHQgYnkgaXRzIGBydW5JZGAuXG4gICAqXG4gICAqIEB0aHJvd3Mge05vdEZvdW5kRXhjZXB0aW9ufSB3aGVuIG5vIHJlc3VsdCBpcyBzdG9yZWQgZm9yIHRoZSBnaXZlbiBgcnVuSWRgLlxuICAgKi9cbiAgQEdldChcInJlc3VsdHMvOnJ1bklkXCIpXG4gIGFzeW5jIGdldFJlc3VsdChAUGFyYW0oXCJydW5JZFwiKSBydW5JZDogc3RyaW5nKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgbGV0IG1vZGVsOiBHcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsIHwgbnVsbDtcbiAgICB0cnkge1xuICAgICAgbW9kZWwgPSAoYXdhaXQgdGhpcy5yZXN1bHRSZXBvc2l0b3J5LnJlYWQoXG4gICAgICAgIHJ1bklkXG4gICAgICApKSBhcyBHcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsIHwgbnVsbDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIG1vZGVsID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0gZnJvbVJlc3VsdE1vZGVsKG1vZGVsKTtcbiAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXhjZXB0aW9uKFxuICAgICAgICBgTm8gZ3JhcGggZXhlY3V0aW9uIHJlc3VsdCBmb3VuZCBmb3IgcnVuSWQgJyR7cnVuSWR9J2BcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25Db250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiR3JhcGhFeGVjdXRpb25Db250cm9sbGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUk7SUFDakYsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3SCxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLE9BQU8sQ0FBQyxRQUFRLEtBQUssVUFBVTtRQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDOztRQUMxSCxLQUFLLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQUUsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztnQkFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFD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LG1CQUFtQixFQUFFLENBQUMsK0JBQW9CLEVBQUUsTUFBTSxDQUFDLENBQUM7Q0FDbEUsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0FBRTdCLHM3VUFBczdVIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIF9fbWV0YWRhdGEgPSAodGhpcyAmJiB0aGlzLl9fbWV0YWRhdGEpIHx8IGZ1bmN0aW9uIChrLCB2KSB7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKGssIHYpO1xufTtcbnZhciBfX3BhcmFtID0gKHRoaXMgJiYgdGhpcy5fX3BhcmFtKSB8fCBmdW5jdGlvbiAocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XG59O1xuLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9uZXN0L2dyYXBoL0dyYXBoRXhlY3V0aW9uQ29udHJvbGxlclxuICogQHN1bW1hcnkgTmVzdEpTIGNvbnRyb2xsZXIgYnJpZGdpbmcgdGhlIGdyYXBoIGV4ZWN1dGlvbiBlbmdpbmUgdG8gUkVTVCArIFNTRS5cbiAqIEBkZXNjcmlwdGlvbiBFeHBvc2VzIHRocmVlIGVuZHBvaW50czpcbiAqIC0gYFBPU1QgL2dyYXBoL2V4ZWN1dGVgIOKAlCB0cmlnZ2VycyB7QGxpbmsgR3JhcGhFeGVjdXRpb25FbmdpbmUuZXhlY3V0ZX0sIHBlcnNpc3RzIHRoZSByZXN1bHQgdmlhIGEgRGVjYWYgcmVwb3NpdG9yeSwgYW5kIHJldHVybnMgYHsgcnVuSWQsIHN0YXR1cywgb3V0cHV0cyB9YC5cbiAqIC0gYEdFVCAvZ3JhcGgvZXZlbnRzYCDigJQgU1NFIGVuZHBvaW50IHN0cmVhbWluZyB7QGxpbmsgR3JhcGhFeGVjdXRpb25FdmVudH1zIGFzIGBbbW9kZWxOYW1lLCBvcGVyYXRpb24sIGlkLCBwYXlsb2FkXWAgdHVwbGVzIChjb21wYXRpYmxlIHdpdGggZm9yLWh0dHAncyBgU2VydmVyRXZlbnRDb25uZWN0b3JgKS5cbiAqIC0gYEdFVCAvZ3JhcGgvcmVzdWx0cy86cnVuSWRgIOKAlCByZXRyaWV2ZXMgYSBwZXJzaXN0ZWQge0BsaW5rIEdyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWx9IGZyb20gdGhlIHJlcG9zaXRvcnkuXG4gKlxuICogVGhpcyBpcyB0aGUgcHJvZHVjdGlvbiBwYXR0ZXJuOiBmb3ItbmVzdCBob3N0cyB0aGUgZW5naW5lLCBmb3ItYW5ndWxhciBjb25zdW1lcyBldmVudHMgb3ZlciB0aGUgbmV0d29yayB2aWEgU1NFIGFuZCBmZXRjaGVzIHBlcnNpc3RlZCByZXN1bHRzIHZpYSBSRVNULlxuICovXG5pbXBvcnQgeyBDb250cm9sbGVyLCBQb3N0LCBHZXQsIEJvZHksIFBhcmFtLCBTc2UsIEluamVjdCwgTm90Rm91bmRFeGNlcHRpb24sIH0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7IG1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHsgR3JhcGhFeGVjdXRpb25FbmdpbmUsIH0gZnJvbSBcIi4vLi4vLi4vZ3JhcGgvaW5kZXguanNcIjtcbmltcG9ydCB7IGZyb21SZXN1bHRNb2RlbCwgdG9SZXN1bHRNb2RlbCwgfSBmcm9tIFwiLi9HcmFwaEV4ZWN1dGlvblJlc3VsdFJlcG9zaXRvcnkuanNcIjtcbi8qKlxuICogTmVzdEpTIGluamVjdGlvbiB0b2tlbiBmb3IgdGhlIGdyYXBoIGV4ZWN1dGlvbiByZXN1bHQgcmVwb3NpdG9yeS5cbiAqL1xuZXhwb3J0IGNvbnN0IEdSQVBIX1JFU1VMVF9SRVBPU0lUT1JZID0gXCJHUkFQSF9SRVNVTFRfUkVQT1NJVE9SWVwiO1xuLyoqXG4gKiBOZXN0SlMgY29udHJvbGxlciB0aGF0IGhvc3RzIHRoZSBncmFwaCBleGVjdXRpb24gZW5naW5lIHNlcnZlci1zaWRlLFxuICogc3RyZWFtcyBldmVudHMgdmlhIFNTRSwgYW5kIHBlcnNpc3RzIHJlc3VsdHMgZm9yIGxhdGVyIHJldHJpZXZhbC5cbiAqL1xubGV0IEdyYXBoRXhlY3V0aW9uQ29udHJvbGxlciA9IGNsYXNzIEdyYXBoRXhlY3V0aW9uQ29udHJvbGxlciB7XG4gICAgY29uc3RydWN0b3IoZW5naW5lLCByZXN1bHRSZXBvc2l0b3J5KSB7XG4gICAgICAgIHRoaXMuZW5naW5lID0gZW5naW5lO1xuICAgICAgICB0aGlzLnJlc3VsdFJlcG9zaXRvcnkgPSByZXN1bHRSZXBvc2l0b3J5O1xuICAgICAgICB0aGlzLmV2ZW50U3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMuZW5naW5lLm9ic2VydmUoe1xuICAgICAgICAgICAgcmVmcmVzaDogYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudFN1YmplY3QubmV4dChldmVudCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgZ3JhcGggZXhlY3V0aW9uIHNlcnZlci1zaWRlLCBwZXJzaXN0cyB0aGUgcmVzdWx0LCBhbmQgcmV0dXJuc1xuICAgICAqIGEgc3VtbWFyeSBjb250YWluaW5nIHRoZSBgcnVuSWRgLCBgc3RhdHVzYCwgYW5kIGBvdXRwdXRzYC5cbiAgICAgKi9cbiAgICBhc3luYyBleGVjdXRlKGJvZHkpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5lbmdpbmUuZXhlY3V0ZShib2R5LndvcmtmbG93LCBib2R5LmlucHV0cyA/PyB7fSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlc3VsdFJlcG9zaXRvcnkuY3JlYXRlKHRvUmVzdWx0TW9kZWwocmVzdWx0KSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgLy8gcGVyc2lzdGVuY2UgZmFpbHVyZXMgbXVzdCBub3QgbWFzayBhIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uIHJlc3VsdFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBydW5JZDogcmVzdWx0LnJ1bklkLFxuICAgICAgICAgICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgICAgICAgICAgb3V0cHV0czogcmVzdWx0Lm91dHB1dHMsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNTRSBlbmRwb2ludCB0aGF0IHN0cmVhbXMgZ3JhcGggZXhlY3V0aW9uIGV2ZW50cy5cbiAgICAgKlxuICAgICAqIEV2ZW50cyBhcmUgc2VyaWFsaXplZCBhcyBgW21vZGVsTmFtZSwgb3BlcmF0aW9uLCBpZCwgcGF5bG9hZF1gIHRvIG1hdGNoXG4gICAgICogdGhlIGZvcm1hdCBleHBlY3RlZCBieSBmb3ItaHR0cCdzIGBTZXJ2ZXJFdmVudENvbm5lY3RvcmAuXG4gICAgICovXG4gICAgZXZlbnRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ldmVudFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShtYXAoKGV2ZW50KSA9PiAoe1xuICAgICAgICAgICAgdHlwZTogXCJtZXNzYWdlXCIsXG4gICAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShbXG4gICAgICAgICAgICAgICAgXCJncmFwaFwiLFxuICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUsXG4gICAgICAgICAgICAgICAgZXZlbnQucnVuSWQsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZDogZXZlbnQuaWQsXG4gICAgICAgICAgICAgICAgICAgIHNlcXVlbmNlOiBldmVudC5zZXF1ZW5jZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZXZlbnQudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgcnVuSWQ6IGV2ZW50LnJ1bklkLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRSdW5JZDogZXZlbnQucGFyZW50UnVuSWQsXG4gICAgICAgICAgICAgICAgICAgIHdvcmtmbG93SWQ6IGV2ZW50LndvcmtmbG93SWQsXG4gICAgICAgICAgICAgICAgICAgIG5vZGVJZDogZXZlbnQubm9kZUlkLFxuICAgICAgICAgICAgICAgICAgICBlZGdlSWQ6IGV2ZW50LmVkZ2VJZCxcbiAgICAgICAgICAgICAgICAgICAgcG9ydDogZXZlbnQucG9ydCxcbiAgICAgICAgICAgICAgICAgICAgaXRlcmF0aW9uOiBldmVudC5pdGVyYXRpb24sXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGV2ZW50LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogZXZlbnQuc3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiBldmVudC5wYXlsb2FkLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXZlbnQuZXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogZXZlbnQudGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICB9KSkpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZXMgYSBwZXJzaXN0ZWQgZ3JhcGggZXhlY3V0aW9uIHJlc3VsdCBieSBpdHMgYHJ1bklkYC5cbiAgICAgKlxuICAgICAqIEB0aHJvd3Mge05vdEZvdW5kRXhjZXB0aW9ufSB3aGVuIG5vIHJlc3VsdCBpcyBzdG9yZWQgZm9yIHRoZSBnaXZlbiBgcnVuSWRgLlxuICAgICAqL1xuICAgIGFzeW5jIGdldFJlc3VsdChydW5JZCkge1xuICAgICAgICBsZXQgbW9kZWw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBtb2RlbCA9IChhd2FpdCB0aGlzLnJlc3VsdFJlcG9zaXRvcnkucmVhZChydW5JZCkpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIG1vZGVsID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBmcm9tUmVzdWx0TW9kZWwobW9kZWwpO1xuICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXhjZXB0aW9uKGBObyBncmFwaCBleGVjdXRpb24gcmVzdWx0IGZvdW5kIGZvciBydW5JZCAnJHtydW5JZH0nYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG59O1xuX19kZWNvcmF0ZShbXG4gICAgUG9zdChcImV4ZWN1dGVcIiksXG4gICAgX19wYXJhbSgwLCBCb2R5KCkpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBGdW5jdGlvbiksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjpwYXJhbXR5cGVzXCIsIFtPYmplY3RdKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnJldHVybnR5cGVcIiwgUHJvbWlzZSlcbl0sIEdyYXBoRXhlY3V0aW9uQ29udHJvbGxlci5wcm90b3R5cGUsIFwiZXhlY3V0ZVwiLCBudWxsKTtcbl9fZGVjb3JhdGUoW1xuICAgIFNzZShcImV2ZW50c1wiKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgRnVuY3Rpb24pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbXSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjpyZXR1cm50eXBlXCIsIE9ic2VydmFibGUpXG5dLCBHcmFwaEV4ZWN1dGlvbkNvbnRyb2xsZXIucHJvdG90eXBlLCBcImV2ZW50c1wiLCBudWxsKTtcbl9fZGVjb3JhdGUoW1xuICAgIEdldChcInJlc3VsdHMvOnJ1bklkXCIpLFxuICAgIF9fcGFyYW0oMCwgUGFyYW0oXCJydW5JZFwiKSksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIEZ1bmN0aW9uKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW1N0cmluZ10pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cmV0dXJudHlwZVwiLCBQcm9taXNlKVxuXSwgR3JhcGhFeGVjdXRpb25Db250cm9sbGVyLnByb3RvdHlwZSwgXCJnZXRSZXN1bHRcIiwgbnVsbCk7XG5HcmFwaEV4ZWN1dGlvbkNvbnRyb2xsZXIgPSBfX2RlY29yYXRlKFtcbiAgICBDb250cm9sbGVyKFwiZ3JhcGhcIiksXG4gICAgX19wYXJhbSgxLCBJbmplY3QoR1JBUEhfUkVTVUxUX1JFUE9TSVRPUlkpKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW0dyYXBoRXhlY3V0aW9uRW5naW5lLCBPYmplY3RdKVxuXSwgR3JhcGhFeGVjdXRpb25Db250cm9sbGVyKTtcbmV4cG9ydCB7IEdyYXBoRXhlY3V0aW9uQ29udHJvbGxlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pUjNKaGNHaEZlR1ZqZFhScGIyNURiMjUwY205c2JHVnlMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2TGk0dkxpNHZjM0pqTDI1bGMzUXZaM0poY0dndlIzSmhjR2hGZUdWamRYUnBiMjVEYjI1MGNtOXNiR1Z5TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdPenM3T3pzN096dEJRVUZCT3pzN096czdPenM3UjBGVFJ6dEJRVU5JTEU5QlFVOHNSVUZEVEN4VlFVRlZMRVZCUTFZc1NVRkJTU3hGUVVOS0xFZEJRVWNzUlVGRFNDeEpRVUZKTEVWQlEwb3NTMEZCU3l4RlFVTk1MRWRCUVVjc1JVRkZTQ3hOUVVGTkxFVkJRMDRzYVVKQlFXbENMRWRCUTJ4Q0xFMUJRVTBzWjBKQlFXZENMRU5CUVVNN1FVRkRlRUlzVDBGQlR5eEZRVUZGTEU5QlFVOHNSVUZCUlN4VlFVRlZMRVZCUVVVc1RVRkJUU3hOUVVGTkxFTkJRVU03UVVGRE0wTXNUMEZCVHl4RlFVRkZMRWRCUVVjc1JVRkJSU3hOUVVGTkxHZENRVUZuUWl4RFFVRkRPMEZCUlhKRExFOUJRVThzUlVGRFRDeHZRa0ZCYjBJc1IwRkhja0lzSzBKQlFXOUNPMEZCUjNKQ0xFOUJRVThzUlVGRFRDeGxRVUZsTEVWQlEyWXNZVUZCWVN4SFFVVmtMRFJEUVVGNVF6dEJRVWN4UXpzN1IwRkZSenRCUVVOSUxFMUJRVTBzUTBGQlF5eE5RVUZOTEhWQ1FVRjFRaXhIUVVGSExIbENRVUY1UWl4RFFVRkRPMEZCYlVKcVJUczdPMGRCUjBjN1FVRkZTU3hKUVVGTkxIZENRVUYzUWl4SFFVRTVRaXhOUVVGTkxIZENRVUYzUWp0SlFVZHVReXhaUVVOdFFpeE5RVUUwUWl4RlFVVTNReXhuUWtGQmVVVTdVVUZHZUVRc1YwRkJUU3hIUVVGT0xFMUJRVTBzUTBGQmMwSTdVVUZGTlVJc2NVSkJRV2RDTEVkQlFXaENMR2RDUVVGblFpeERRVUYzUXp0UlFVd3hSQ3hwUWtGQldTeEhRVUZITEVsQlFVa3NUMEZCVHl4RlFVRjFRaXhEUVVGRE8xRkJUMnBGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRE8xbEJRMnhDTEU5QlFVOHNSVUZCUlN4TFFVRkxMRVZCUVVVc1MwRkJTeXhGUVVGRkxFVkJRVVU3WjBKQlEzWkNMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMWxCUTJoRExFTkJRVU03VTBGRFJpeERRVUZETEVOQlFVTTdTVUZEVEN4RFFVRkRPMGxCUlVRN096dFBRVWRITzBsQlJVY3NRVUZCVGl4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVOSUxFbEJRWGxDTzFGQlJXcERMRTFCUVUwc1RVRkJUU3hIUVVGSExFMUJRVTBzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUlVGQlJTeEpRVUZKTEVOQlFVTXNUVUZCVFN4SlFVRkpMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJSVE5GTEVsQlFVa3NRMEZCUXp0WlFVTklMRTFCUVUwc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTTFSQ3hEUVVGRE8xRkJRVU1zVFVGQlRTeERRVUZETzFsQlExQXNiVVZCUVcxRk8xRkJRM0pGTEVOQlFVTTdVVUZGUkN4UFFVRlBPMWxCUTB3c1MwRkJTeXhGUVVGRkxFMUJRVTBzUTBGQlF5eExRVUZMTzFsQlEyNUNMRTFCUVUwc1JVRkJSU3hOUVVGTkxFTkJRVU1zVFVGQlRUdFpRVU55UWl4UFFVRlBMRVZCUVVVc1RVRkJUU3hEUVVGRExFOUJRVTg3VTBGRGVFSXNRMEZCUXp0SlFVTktMRU5CUVVNN1NVRkZSRHM3T3pzN1QwRkxSenRKUVVWSUxFMUJRVTA3VVVGRFNpeFBRVUZQTEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1dVRkJXU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVU14UXl4SFFVRkhMRU5CUTBRc1EwRkJReXhMUVVFd1FpeEZRVUZuUWl4RlFVRkZMRU5CUVVNc1EwRkJRenRaUVVNM1F5eEpRVUZKTEVWQlFVVXNVMEZCVXp0WlFVTm1MRWxCUVVrc1JVRkJSU3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETzJkQ1FVTnVRaXhQUVVGUE8yZENRVU5RTEV0QlFVc3NRMEZCUXl4SlFVRkpPMmRDUVVOV0xFdEJRVXNzUTBGQlF5eExRVUZMTzJkQ1FVTllPMjlDUVVORkxFVkJRVVVzUlVGQlJTeExRVUZMTEVOQlFVTXNSVUZCUlR0dlFrRkRXaXhSUVVGUkxFVkJRVVVzUzBGQlN5eERRVUZETEZGQlFWRTdiMEpCUTNoQ0xFbEJRVWtzUlVGQlJTeExRVUZMTEVOQlFVTXNTVUZCU1R0dlFrRkRhRUlzUzBGQlN5eEZRVUZGTEV0QlFVc3NRMEZCUXl4TFFVRkxPMjlDUVVOc1FpeFhRVUZYTEVWQlFVVXNTMEZCU3l4RFFVRkRMRmRCUVZjN2IwSkJRemxDTEZWQlFWVXNSVUZCUlN4TFFVRkxMRU5CUVVNc1ZVRkJWVHR2UWtGRE5VSXNUVUZCVFN4RlFVRkZMRXRCUVVzc1EwRkJReXhOUVVGTk8yOUNRVU53UWl4TlFVRk5MRVZCUVVVc1MwRkJTeXhEUVVGRExFMUJRVTA3YjBKQlEzQkNMRWxCUVVrc1JVRkJSU3hMUVVGTExFTkJRVU1zU1VGQlNUdHZRa0ZEYUVJc1UwRkJVeXhGUVVGRkxFdEJRVXNzUTBGQlF5eFRRVUZUTzI5Q1FVTXhRaXhKUVVGSkxFVkJRVVVzUzBGQlN5eERRVUZETEVsQlFVazdiMEpCUTJoQ0xFMUJRVTBzUlVGQlJTeExRVUZMTEVOQlFVTXNUVUZCVFR0dlFrRkRjRUlzVDBGQlR5eEZRVUZGTEV0QlFVc3NRMEZCUXl4UFFVRlBPMjlDUVVOMFFpeExRVUZMTEVWQlFVVXNTMEZCU3l4RFFVRkRMRXRCUVVzN2IwSkJRMnhDTEZOQlFWTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1UwRkJVeXhEUVVGRExGZEJRVmNzUlVGQlJUdHBRa0ZEZWtNN1lVRkRSaXhEUVVGRE8xTkJRMGdzUTBGQlF5eERRVU5JTEVOQlEwWXNRMEZCUXp0SlFVTktMRU5CUVVNN1NVRkZSRHM3T3p0UFFVbEhPMGxCUlVjc1FVRkJUaXhMUVVGTExFTkJRVU1zVTBGQlV5eERRVUZwUWl4TFFVRmhPMUZCUXpORExFbEJRVWtzUzBGQmRVTXNRMEZCUXp0UlFVTTFReXhKUVVGSkxFTkJRVU03V1VGRFNDeExRVUZMTEVkQlFVY3NRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4SlFVRkpMRU5CUTNaRExFdEJRVXNzUTBGRFRpeERRVUZ4UXl4RFFVRkRPMUZCUTNwRExFTkJRVU03VVVGQlF5eE5RVUZOTEVOQlFVTTdXVUZEVUN4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRMllzUTBGQlF6dFJRVU5FTEUxQlFVMHNUVUZCVFN4SFFVRkhMR1ZCUVdVc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFJRVU4wUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03V1VGRFdpeE5RVUZOTEVsQlFVa3NhVUpCUVdsQ0xFTkJRM3BDTERoRFFVRTRReXhMUVVGTExFZEJRVWNzUTBGRGRrUXNRMEZCUXp0UlFVTktMRU5CUVVNN1VVRkRSQ3hQUVVGUExFMUJRVTBzUTBGQlF6dEpRVU5vUWl4RFFVRkRPME5CUTBZc1EwRkJRVHRCUVdoR1R6dEpRVVJNTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNN1NVRkZZaXhYUVVGQkxFbEJRVWtzUlVGQlJTeERRVUZCT3pzN08zVkVRV1ZTTzBGQlUwUTdTVUZFUXl4SFFVRkhMRU5CUVVNc1VVRkJVU3hEUVVGRE96czdiME5CUTBvc1ZVRkJWVHR6UkVFNFFtNUNPMEZCVVVzN1NVRkVUQ3hIUVVGSExFTkJRVU1zWjBKQlFXZENMRU5CUVVNN1NVRkRUQ3hYUVVGQkxFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUVRzN096dDVSRUZuUWpsQ08wRkJia2RWTEhkQ1FVRjNRanRKUVVSd1F5eFZRVUZWTEVOQlFVTXNUMEZCVHl4RFFVRkRPMGxCVFdZc1YwRkJRU3hOUVVGTkxFTkJRVU1zZFVKQlFYVkNMRU5CUVVNc1EwRkJRVHR4UTBGRVVDeHZRa0ZCYjBJN1IwRktjRU1zZDBKQlFYZENMRU5CYjBkd1F5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJaThxS2x4dUlDb2dRRzF2WkhWc1pTQnBiblJsWjNKaGRHbHZibk12Ym1WemRDOW5jbUZ3YUM5SGNtRndhRVY0WldOMWRHbHZia052Ym5SeWIyeHNaWEpjYmlBcUlFQnpkVzF0WVhKNUlFNWxjM1JLVXlCamIyNTBjbTlzYkdWeUlHSnlhV1JuYVc1bklIUm9aU0JuY21Gd2FDQmxlR1ZqZFhScGIyNGdaVzVuYVc1bElIUnZJRkpGVTFRZ0t5QlRVMFV1WEc0Z0tpQkFaR1Z6WTNKcGNIUnBiMjRnUlhod2IzTmxjeUIwYUhKbFpTQmxibVJ3YjJsdWRITTZYRzRnS2lBdElHQlFUMU5VSUM5bmNtRndhQzlsZUdWamRYUmxZQ0RpZ0pRZ2RISnBaMmRsY25NZ2UwQnNhVzVySUVkeVlYQm9SWGhsWTNWMGFXOXVSVzVuYVc1bExtVjRaV04xZEdWOUxDQndaWEp6YVhOMGN5QjBhR1VnY21WemRXeDBJSFpwWVNCaElFUmxZMkZtSUhKbGNHOXphWFJ2Y25rc0lHRnVaQ0J5WlhSMWNtNXpJR0I3SUhKMWJrbGtMQ0J6ZEdGMGRYTXNJRzkxZEhCMWRITWdmV0F1WEc0Z0tpQXRJR0JIUlZRZ0wyZHlZWEJvTDJWMlpXNTBjMkFnNG9DVUlGTlRSU0JsYm1Sd2IybHVkQ0J6ZEhKbFlXMXBibWNnZTBCc2FXNXJJRWR5WVhCb1JYaGxZM1YwYVc5dVJYWmxiblI5Y3lCaGN5QmdXMjF2WkdWc1RtRnRaU3dnYjNCbGNtRjBhVzl1TENCcFpDd2djR0Y1Ykc5aFpGMWdJSFIxY0d4bGN5QW9ZMjl0Y0dGMGFXSnNaU0IzYVhSb0lHWnZjaTFvZEhSd0ozTWdZRk5sY25abGNrVjJaVzUwUTI5dWJtVmpkRzl5WUNrdVhHNGdLaUF0SUdCSFJWUWdMMmR5WVhCb0wzSmxjM1ZzZEhNdk9uSjFia2xrWUNEaWdKUWdjbVYwY21sbGRtVnpJR0VnY0dWeWMybHpkR1ZrSUh0QWJHbHVheUJIY21Gd2FFVjRaV04xZEdsdmJsSmxjM1ZzZEUxdlpHVnNmU0JtY205dElIUm9aU0J5WlhCdmMybDBiM0o1TGx4dUlDcGNiaUFxSUZSb2FYTWdhWE1nZEdobElIQnliMlIxWTNScGIyNGdjR0YwZEdWeWJqb2dabTl5TFc1bGMzUWdhRzl6ZEhNZ2RHaGxJR1Z1WjJsdVpTd2dabTl5TFdGdVozVnNZWElnWTI5dWMzVnRaWE1nWlhabGJuUnpJRzkyWlhJZ2RHaGxJRzVsZEhkdmNtc2dkbWxoSUZOVFJTQmhibVFnWm1WMFkyaGxjeUJ3WlhKemFYTjBaV1FnY21WemRXeDBjeUIyYVdFZ1VrVlRWQzVjYmlBcUwxeHVhVzF3YjNKMElIdGNiaUFnUTI5dWRISnZiR3hsY2l4Y2JpQWdVRzl6ZEN4Y2JpQWdSMlYwTEZ4dUlDQkNiMlI1TEZ4dUlDQlFZWEpoYlN4Y2JpQWdVM05sTEZ4dUlDQk5aWE56WVdkbFJYWmxiblFzWEc0Z0lFbHVhbVZqZEN4Y2JpQWdUbTkwUm05MWJtUkZlR05sY0hScGIyNHNYRzU5SUdaeWIyMGdYQ0pBYm1WemRHcHpMMk52YlcxdmJsd2lPMXh1YVcxd2IzSjBJSHNnVTNWaWFtVmpkQ3dnVDJKelpYSjJZV0pzWlNCOUlHWnliMjBnWENKeWVHcHpYQ0k3WEc1cGJYQnZjblFnZXlCdFlYQWdmU0JtY205dElGd2ljbmhxY3k5dmNHVnlZWFJ2Y25OY0lqdGNibHh1YVcxd2IzSjBJSHRjYmlBZ1IzSmhjR2hGZUdWamRYUnBiMjVGYm1kcGJtVXNYRzRnSUhSNWNHVWdSM0poY0doRmVHVmpkWFJwYjI1RmRtVnVkQ3hjYmlBZ2RIbHdaU0JIY21Gd2FFVjRaV04xZEdsdmJsWmhiSFZsY3l4Y2JuMGdabkp2YlNCY0lpNHVMeTR1TDJkeVlYQm9YQ0k3WEc1cGJYQnZjblFnZEhsd1pTQjdJRWR5WVhCb1YyOXlhMlpzYjNkRVpXWnBibWwwYVc5dUlIMGdabkp2YlNCY0lrQmtaV05oWmkxMGN5OTFhUzFrWldOdmNtRjBiM0p6TDJkeVlYQm9YQ0k3WEc1Y2JtbHRjRzl5ZENCN1hHNGdJR1p5YjIxU1pYTjFiSFJOYjJSbGJDeGNiaUFnZEc5U1pYTjFiSFJOYjJSbGJDeGNiaUFnZEhsd1pTQkhjbUZ3YUVWNFpXTjFkR2x2YmxKbGMzVnNkRkpsY0c5emFYUnZjbmxKYm5OMFlXNWpaU3hjYm4wZ1puSnZiU0JjSWk0dlIzSmhjR2hGZUdWamRYUnBiMjVTWlhOMWJIUlNaWEJ2YzJsMGIzSjVYQ0k3WEc1cGJYQnZjblFnZEhsd1pTQjdJRWR5WVhCb1JYaGxZM1YwYVc5dVVtVnpkV3gwVFc5a1pXd2dmU0JtY205dElGd2lMaTlIY21Gd2FFVjRaV04xZEdsdmJsSmxjM1ZzZEUxdlpHVnNYQ0k3WEc1Y2JpOHFLbHh1SUNvZ1RtVnpkRXBUSUdsdWFtVmpkR2x2YmlCMGIydGxiaUJtYjNJZ2RHaGxJR2R5WVhCb0lHVjRaV04xZEdsdmJpQnlaWE4xYkhRZ2NtVndiM05wZEc5eWVTNWNiaUFxTDF4dVpYaHdiM0owSUdOdmJuTjBJRWRTUVZCSVgxSkZVMVZNVkY5U1JWQlBVMGxVVDFKWklEMGdYQ0pIVWtGUVNGOVNSVk5WVEZSZlVrVlFUMU5KVkU5U1dWd2lPMXh1WEc0dktpcGNiaUFxSUZCaGVXeHZZV1FnWm05eUlIUm9aU0JnVUU5VFZDQXZaM0poY0dndlpYaGxZM1YwWldBZ1pXNWtjRzlwYm5RdVhHNGdLaTljYm1WNGNHOXlkQ0JwYm5SbGNtWmhZMlVnUjNKaGNHaEZlR1ZqZFhSbFVHRjViRzloWkNCN1hHNGdJSGR2Y210bWJHOTNPaUJIY21Gd2FGZHZjbXRtYkc5M1JHVm1hVzVwZEdsdmJqdGNiaUFnYVc1d2RYUnpPaUJIY21Gd2FFVjRaV04xZEdsdmJsWmhiSFZsY3p0Y2JuMWNibHh1THlvcVhHNGdLaUJTWlhOd2IyNXpaU0J6YUdGd1pTQm1iM0lnZEdobElHQlFUMU5VSUM5bmNtRndhQzlsZUdWamRYUmxZQ0JsYm1Sd2IybHVkQzVjYmlBcUwxeHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQkhjbUZ3YUVWNFpXTjFkR1ZTWlhOd2IyNXpaU0I3WEc0Z0lISjFia2xrT2lCemRISnBibWM3WEc0Z0lITjBZWFIxY3pvZ2MzUnlhVzVuTzF4dUlDQnZkWFJ3ZFhSek9pQlNaV052Y21ROGMzUnlhVzVuTENCMWJtdHViM2R1UGp0Y2JuMWNibHh1THlvcVhHNGdLaUJPWlhOMFNsTWdZMjl1ZEhKdmJHeGxjaUIwYUdGMElHaHZjM1J6SUhSb1pTQm5jbUZ3YUNCbGVHVmpkWFJwYjI0Z1pXNW5hVzVsSUhObGNuWmxjaTF6YVdSbExGeHVJQ29nYzNSeVpXRnRjeUJsZG1WdWRITWdkbWxoSUZOVFJTd2dZVzVrSUhCbGNuTnBjM1J6SUhKbGMzVnNkSE1nWm05eUlHeGhkR1Z5SUhKbGRISnBaWFpoYkM1Y2JpQXFMMXh1UUVOdmJuUnliMnhzWlhJb1hDSm5jbUZ3YUZ3aUtWeHVaWGh3YjNKMElHTnNZWE56SUVkeVlYQm9SWGhsWTNWMGFXOXVRMjl1ZEhKdmJHeGxjaUI3WEc0Z0lIQnlhWFpoZEdVZ2NtVmhaRzl1YkhrZ1pYWmxiblJUZFdKcVpXTjBJRDBnYm1WM0lGTjFZbXBsWTNROFIzSmhjR2hGZUdWamRYUnBiMjVGZG1WdWRENG9LVHRjYmx4dUlDQmpiMjV6ZEhKMVkzUnZjaWhjYmlBZ0lDQndjbWwyWVhSbElISmxZV1J2Ym14NUlHVnVaMmx1WlRvZ1IzSmhjR2hGZUdWamRYUnBiMjVGYm1kcGJtVXNYRzRnSUNBZ1FFbHVhbVZqZENoSFVrRlFTRjlTUlZOVlRGUmZVa1ZRVDFOSlZFOVNXU2xjYmlBZ0lDQndjbWwyWVhSbElISmxZV1J2Ym14NUlISmxjM1ZzZEZKbGNHOXphWFJ2Y25rNklFZHlZWEJvUlhobFkzVjBhVzl1VW1WemRXeDBVbVZ3YjNOcGRHOXllVWx1YzNSaGJtTmxYRzRnSUNrZ2UxeHVJQ0FnSUhSb2FYTXVaVzVuYVc1bExtOWljMlZ5ZG1Vb2UxeHVJQ0FnSUNBZ2NtVm1jbVZ6YURvZ1lYTjVibU1nS0dWMlpXNTBLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WlhabGJuUlRkV0pxWldOMExtNWxlSFFvWlhabGJuUXBPMXh1SUNBZ0lDQWdmU3hjYmlBZ0lDQjlLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCVWNtbG5aMlZ5Y3lCbmNtRndhQ0JsZUdWamRYUnBiMjRnYzJWeWRtVnlMWE5wWkdVc0lIQmxjbk5wYzNSeklIUm9aU0J5WlhOMWJIUXNJR0Z1WkNCeVpYUjFjbTV6WEc0Z0lDQXFJR0VnYzNWdGJXRnllU0JqYjI1MFlXbHVhVzVuSUhSb1pTQmdjblZ1U1dSZ0xDQmdjM1JoZEhWellDd2dZVzVrSUdCdmRYUndkWFJ6WUM1Y2JpQWdJQ292WEc0Z0lFQlFiM04wS0Z3aVpYaGxZM1YwWlZ3aUtWeHVJQ0JoYzNsdVl5QmxlR1ZqZFhSbEtGeHVJQ0FnSUVCQ2IyUjVLQ2tnWW05a2VUb2dSM0poY0doRmVHVmpkWFJsVUdGNWJHOWhaRnh1SUNBcE9pQlFjbTl0YVhObFBFZHlZWEJvUlhobFkzVjBaVkpsYzNCdmJuTmxQaUI3WEc0Z0lDQWdZMjl1YzNRZ2NtVnpkV3gwSUQwZ1lYZGhhWFFnZEdocGN5NWxibWRwYm1VdVpYaGxZM1YwWlNoaWIyUjVMbmR2Y210bWJHOTNMQ0JpYjJSNUxtbHVjSFYwY3lBL1B5QjdmU2s3WEc1Y2JpQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ1lYZGhhWFFnZEdocGN5NXlaWE4xYkhSU1pYQnZjMmwwYjNKNUxtTnlaV0YwWlNoMGIxSmxjM1ZzZEUxdlpHVnNLSEpsYzNWc2RDa3BPMXh1SUNBZ0lIMGdZMkYwWTJnZ2UxeHVJQ0FnSUNBZ0x5OGdjR1Z5YzJsemRHVnVZMlVnWm1GcGJIVnlaWE1nYlhWemRDQnViM1FnYldGemF5QmhJSE4xWTJObGMzTm1kV3dnWlhobFkzVjBhVzl1SUhKbGMzVnNkRnh1SUNBZ0lIMWNibHh1SUNBZ0lISmxkSFZ5YmlCN1hHNGdJQ0FnSUNCeWRXNUpaRG9nY21WemRXeDBMbkoxYmtsa0xGeHVJQ0FnSUNBZ2MzUmhkSFZ6T2lCeVpYTjFiSFF1YzNSaGRIVnpMRnh1SUNBZ0lDQWdiM1YwY0hWMGN6b2djbVZ6ZFd4MExtOTFkSEIxZEhNc1hHNGdJQ0FnZlR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlRVMFVnWlc1a2NHOXBiblFnZEdoaGRDQnpkSEpsWVcxeklHZHlZWEJvSUdWNFpXTjFkR2x2YmlCbGRtVnVkSE11WEc0Z0lDQXFYRzRnSUNBcUlFVjJaVzUwY3lCaGNtVWdjMlZ5YVdGc2FYcGxaQ0JoY3lCZ1cyMXZaR1ZzVG1GdFpTd2diM0JsY21GMGFXOXVMQ0JwWkN3Z2NHRjViRzloWkYxZ0lIUnZJRzFoZEdOb1hHNGdJQ0FxSUhSb1pTQm1iM0p0WVhRZ1pYaHdaV04wWldRZ1lua2dabTl5TFdoMGRIQW5jeUJnVTJWeWRtVnlSWFpsYm5SRGIyNXVaV04wYjNKZ0xseHVJQ0FnS2k5Y2JpQWdRRk56WlNoY0ltVjJaVzUwYzF3aUtWeHVJQ0JsZG1WdWRITW9LVG9nVDJKelpYSjJZV0pzWlR4TlpYTnpZV2RsUlhabGJuUStJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVsZG1WdWRGTjFZbXBsWTNRdVlYTlBZbk5sY25aaFlteGxLQ2t1Y0dsd1pTaGNiaUFnSUNBZ0lHMWhjQ2hjYmlBZ0lDQWdJQ0FnS0dWMlpXNTBPaUJIY21Gd2FFVjRaV04xZEdsdmJrVjJaVzUwS1RvZ1RXVnpjMkZuWlVWMlpXNTBJRDArSUNoN1hHNGdJQ0FnSUNBZ0lDQWdkSGx3WlRvZ1hDSnRaWE56WVdkbFhDSXNYRzRnSUNBZ0lDQWdJQ0FnWkdGMFlUb2dTbE5QVGk1emRISnBibWRwWm5rb1cxeHVJQ0FnSUNBZ0lDQWdJQ0FnWENKbmNtRndhRndpTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdaWFpsYm5RdWRIbHdaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lHVjJaVzUwTG5KMWJrbGtMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFpEb2daWFpsYm5RdWFXUXNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lITmxjWFZsYm1ObE9pQmxkbVZ1ZEM1elpYRjFaVzVqWlN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZEhsd1pUb2daWFpsYm5RdWRIbHdaU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdjblZ1U1dRNklHVjJaVzUwTG5KMWJrbGtMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQndZWEpsYm5SU2RXNUpaRG9nWlhabGJuUXVjR0Z5Wlc1MFVuVnVTV1FzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSGR2Y210bWJHOTNTV1E2SUdWMlpXNTBMbmR2Y210bWJHOTNTV1FzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJRzV2WkdWSlpEb2daWFpsYm5RdWJtOWtaVWxrTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JsWkdkbFNXUTZJR1YyWlc1MExtVmtaMlZKWkN4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnY0c5eWREb2daWFpsYm5RdWNHOXlkQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdhWFJsY21GMGFXOXVPaUJsZG1WdWRDNXBkR1Z5WVhScGIyNHNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIQmhkR2c2SUdWMlpXNTBMbkJoZEdnc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhOMFlYUjFjem9nWlhabGJuUXVjM1JoZEhWekxGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCd1lYbHNiMkZrT2lCbGRtVnVkQzV3WVhsc2IyRmtMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQmxjbkp2Y2pvZ1pYWmxiblF1WlhKeWIzSXNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIUnBiV1Z6ZEdGdGNEb2daWFpsYm5RdWRHbHRaWE4wWVcxd0xuUnZTVk5QVTNSeWFXNW5LQ2tzWEc0Z0lDQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUYwcExGeHVJQ0FnSUNBZ0lDQjlLVnh1SUNBZ0lDQWdLVnh1SUNBZ0lDazdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nVW1WMGNtbGxkbVZ6SUdFZ2NHVnljMmx6ZEdWa0lHZHlZWEJvSUdWNFpXTjFkR2x2YmlCeVpYTjFiSFFnWW5rZ2FYUnpJR0J5ZFc1SlpHQXVYRzRnSUNBcVhHNGdJQ0FxSUVCMGFISnZkM01nZTA1dmRFWnZkVzVrUlhoalpYQjBhVzl1ZlNCM2FHVnVJRzV2SUhKbGMzVnNkQ0JwY3lCemRHOXlaV1FnWm05eUlIUm9aU0JuYVhabGJpQmdjblZ1U1dSZ0xseHVJQ0FnS2k5Y2JpQWdRRWRsZENoY0luSmxjM1ZzZEhNdk9uSjFia2xrWENJcFhHNGdJR0Z6ZVc1aklHZGxkRkpsYzNWc2RDaEFVR0Z5WVcwb1hDSnlkVzVKWkZ3aUtTQnlkVzVKWkRvZ2MzUnlhVzVuS1RvZ1VISnZiV2x6WlR4MWJtdHViM2R1UGlCN1hHNGdJQ0FnYkdWMElHMXZaR1ZzT2lCSGNtRndhRVY0WldOMWRHbHZibEpsYzNWc2RFMXZaR1ZzSUh3Z2JuVnNiRHRjYmlBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnYlc5a1pXd2dQU0FvWVhkaGFYUWdkR2hwY3k1eVpYTjFiSFJTWlhCdmMybDBiM0o1TG5KbFlXUW9YRzRnSUNBZ0lDQWdJSEoxYmtsa1hHNGdJQ0FnSUNBcEtTQmhjeUJIY21Gd2FFVjRaV04xZEdsdmJsSmxjM1ZzZEUxdlpHVnNJSHdnYm5Wc2JEdGNiaUFnSUNCOUlHTmhkR05vSUh0Y2JpQWdJQ0FnSUcxdlpHVnNJRDBnYm5Wc2JEdGNiaUFnSUNCOVhHNGdJQ0FnWTI5dWMzUWdjbVZ6ZFd4MElEMGdabkp2YlZKbGMzVnNkRTF2WkdWc0tHMXZaR1ZzS1R0Y2JpQWdJQ0JwWmlBb0lYSmxjM1ZzZENrZ2UxeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFNXZkRVp2ZFc1a1JYaGpaWEIwYVc5dUtGeHVJQ0FnSUNBZ0lDQmdUbThnWjNKaGNHZ2daWGhsWTNWMGFXOXVJSEpsYzNWc2RDQm1iM1Z1WkNCbWIzSWdjblZ1U1dRZ0p5UjdjblZ1U1dSOUoyQmNiaUFnSUNBZ0lDazdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJ5WlhOMWJIUTdYRzRnSUgxY2JuMWNiaUpkZlE9PSJdfQ==
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GraphExecutionModule = void 0;
4
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
5
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
6
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
7
+ r = Reflect.decorate(decorators, target, key, desc);
8
+ else
9
+ for (var i = decorators.length - 1; i >= 0; i--)
10
+ if (d = decorators[i])
11
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
12
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
13
+ };
14
+ var GraphExecutionModule_1;
15
+ /**
16
+ * @module integrations/nest/graph/GraphExecutionModule
17
+ * @summary NestJS DynamicModule hosting the graph execution engine.
18
+ * @description Wires the {@link GraphExecutionEngine}, a demo executor registry, a RamAdapter-backed result repository, and the {@link GraphExecutionController} into a single NestJS module. Use `GraphExecutionModule.forRoot()` to register it in the application.
19
+ */
20
+ const common_1 = require("@nestjs/common");
21
+ const core_1 = require("@decaf-ts/core");
22
+ const ram_1 = require("@decaf-ts/core/ram");
23
+ const index_js_1 = require("./../../graph/index.cjs");
24
+ const GraphExecutorRegistryFactory_js_1 = require("./GraphExecutorRegistryFactory.cjs");
25
+ const GraphExecutionResultModel_js_1 = require("./GraphExecutionResultModel.cjs");
26
+ const GraphExecutionController_js_1 = require("./GraphExecutionController.cjs");
27
+ /**
28
+ * NestJS module that hosts the graph execution engine server-side.
29
+ *
30
+ * Provides:
31
+ * - {@link GraphExecutionEngine} — singleton engine with a demo executor registry.
32
+ * - `GRAPH_RESULT_REPOSITORY` — Decaf repository for {@link GraphExecutionResultModel} backed by RamAdapter.
33
+ * - {@link GraphExecutionController} — REST + SSE controller.
34
+ */
35
+ let GraphExecutionModule = GraphExecutionModule_1 = class GraphExecutionModule {
36
+ /**
37
+ * Creates a configured {@link DynamicModule} for the graph execution backend.
38
+ *
39
+ * @param options - Module configuration options.
40
+ * @returns A NestJS `DynamicModule` ready for import.
41
+ */
42
+ static forRoot(options = {}) {
43
+ const user = options.adapterUser ?? "graph-engine";
44
+ const initAdapter = options.initAdapter ?? true;
45
+ const providers = [
46
+ {
47
+ provide: index_js_1.GraphExecutionEngine,
48
+ useFactory: () => {
49
+ if (initAdapter) {
50
+ ram_1.RamAdapter.decoration();
51
+ core_1.Adapter.setCurrent(ram_1.RamFlavour);
52
+ }
53
+ const registry = (0, GraphExecutorRegistryFactory_js_1.createGraphExecutorRegistry)();
54
+ return new index_js_1.GraphExecutionEngine({ registry });
55
+ },
56
+ },
57
+ {
58
+ provide: GraphExecutionController_js_1.GRAPH_RESULT_REPOSITORY,
59
+ useFactory: () => {
60
+ if (initAdapter) {
61
+ ram_1.RamAdapter.decoration();
62
+ core_1.Adapter.setCurrent(ram_1.RamFlavour);
63
+ }
64
+ // Creating the adapter ensures a Ram-flavoured instance is available
65
+ // for Repository.forModel. The adapter user is used by audit handlers.
66
+ new ram_1.RamAdapter({ user });
67
+ return core_1.Repository.forModel(GraphExecutionResultModel_js_1.GraphExecutionResultModel);
68
+ },
69
+ },
70
+ ];
71
+ return {
72
+ module: GraphExecutionModule_1,
73
+ controllers: [GraphExecutionController_js_1.GraphExecutionController],
74
+ providers,
75
+ exports: [index_js_1.GraphExecutionEngine, GraphExecutionController_js_1.GRAPH_RESULT_REPOSITORY],
76
+ };
77
+ }
78
+ };
79
+ exports.GraphExecutionModule = GraphExecutionModule;
80
+ exports.GraphExecutionModule = GraphExecutionModule = GraphExecutionModule_1 = __decorate([
81
+ (0, common_1.Module)({})
82
+ ], GraphExecutionModule);
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25Nb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbmVzdC9ncmFwaC9HcmFwaEV4ZWN1dGlvbk1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7Ozs7R0FJRztBQUNILE9BQU8sRUFBaUIsTUFBTSxFQUFZLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSwrQkFBb0I7QUFDbkQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLDBDQUF1QztBQUM3RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsdUNBQW9DO0FBQ3hFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsd0JBQXdCLEdBQ3pCLHNDQUFtQztBQW1CcEM7Ozs7Ozs7R0FPRztBQUVJLElBQU0sb0JBQW9CLDRCQUExQixNQUFNLG9CQUFvQjtJQUMvQjs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxPQUFPLENBQ1osVUFBdUMsRUFBRTtRQUV6QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLGNBQWMsQ0FBQztRQUNuRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQztRQUVoRCxNQUFNLFNBQVMsR0FBZTtZQUM1QjtnQkFDRSxPQUFPLEVBQUUsb0JBQW9CO2dCQUM3QixVQUFVLEVBQUUsR0FBRyxFQUFFO29CQUNmLElBQUksV0FBVyxFQUFFLENBQUM7d0JBQ2hCLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQzt3QkFDeEIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDakMsQ0FBQztvQkFDRCxNQUFNLFFBQVEsR0FBRywyQkFBMkIsRUFBRSxDQUFDO29CQUMvQyxPQUFPLElBQUksb0JBQW9CLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRCxDQUFDO2FBQ0Y7WUFDRDtnQkFDRSxPQUFPLEVBQUUsdUJBQXVCO2dCQUNoQyxVQUFVLEVBQUUsR0FBRyxFQUFFO29CQUNmLElBQUksV0FBVyxFQUFFLENBQUM7d0JBQ2hCLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQzt3QkFDeEIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDakMsQ0FBQztvQkFDRCxxRUFBcUU7b0JBQ3JFLHVFQUF1RTtvQkFDdkUsSUFBSSxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUN6QixPQUFPLFVBQVUsQ0FBQyxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQztnQkFDeEQsQ0FBQzthQUNGO1NBQ0YsQ0FBQztRQUVGLE9BQU87WUFDTCxNQUFNLEVBQUUsc0JBQW9CO1lBQzVCLFdBQVcsRUFBRSxDQUFDLHdCQUF3QixDQUFDO1lBQ3ZDLFNBQVM7WUFDVCxPQUFPLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSx1QkFBdUIsQ0FBQztTQUN6RCxDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUE7QUEvQ1ksb0JBQW9CO0lBRGhDLE1BQU0sQ0FBQyxFQUFFLENBQUM7R0FDRSxvQkFBb0IsQ0ErQ2hDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9uZXN0L2dyYXBoL0dyYXBoRXhlY3V0aW9uTW9kdWxlXG4gKiBAc3VtbWFyeSBOZXN0SlMgRHluYW1pY01vZHVsZSBob3N0aW5nIHRoZSBncmFwaCBleGVjdXRpb24gZW5naW5lLlxuICogQGRlc2NyaXB0aW9uIFdpcmVzIHRoZSB7QGxpbmsgR3JhcGhFeGVjdXRpb25FbmdpbmV9LCBhIGRlbW8gZXhlY3V0b3IgcmVnaXN0cnksIGEgUmFtQWRhcHRlci1iYWNrZWQgcmVzdWx0IHJlcG9zaXRvcnksIGFuZCB0aGUge0BsaW5rIEdyYXBoRXhlY3V0aW9uQ29udHJvbGxlcn0gaW50byBhIHNpbmdsZSBOZXN0SlMgbW9kdWxlLiBVc2UgYEdyYXBoRXhlY3V0aW9uTW9kdWxlLmZvclJvb3QoKWAgdG8gcmVnaXN0ZXIgaXQgaW4gdGhlIGFwcGxpY2F0aW9uLlxuICovXG5pbXBvcnQgeyBEeW5hbWljTW9kdWxlLCBNb2R1bGUsIFByb3ZpZGVyIH0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQgeyBBZGFwdGVyLCBSZXBvc2l0b3J5IH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBSYW1BZGFwdGVyLCBSYW1GbGF2b3VyIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlL3JhbVwiO1xuXG5pbXBvcnQgeyBHcmFwaEV4ZWN1dGlvbkVuZ2luZSB9IGZyb20gXCIuLi8uLi9ncmFwaFwiO1xuaW1wb3J0IHsgY3JlYXRlR3JhcGhFeGVjdXRvclJlZ2lzdHJ5IH0gZnJvbSBcIi4vR3JhcGhFeGVjdXRvclJlZ2lzdHJ5RmFjdG9yeVwiO1xuaW1wb3J0IHsgR3JhcGhFeGVjdXRpb25SZXN1bHRNb2RlbCB9IGZyb20gXCIuL0dyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWxcIjtcbmltcG9ydCB7XG4gIEdSQVBIX1JFU1VMVF9SRVBPU0lUT1JZLFxuICBHcmFwaEV4ZWN1dGlvbkNvbnRyb2xsZXIsXG59IGZyb20gXCIuL0dyYXBoRXhlY3V0aW9uQ29udHJvbGxlclwiO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBHcmFwaEV4ZWN1dGlvbk1vZHVsZS5mb3JSb290fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHcmFwaEV4ZWN1dGlvbk1vZHVsZU9wdGlvbnMge1xuICAvKipcbiAgICogVXNlciBpZGVudGlmaWVyIHBhc3NlZCB0byB0aGUgUmFtQWRhcHRlci4gRGVmYXVsdHMgdG8gYFwiZ3JhcGgtZW5naW5lXCJgLlxuICAgKi9cbiAgYWRhcHRlclVzZXI/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGVuIGB0cnVlYCwgY2FsbHMgYFJhbUFkYXB0ZXIuZGVjb3JhdGlvbigpYCBhbmRcbiAgICogYEFkYXB0ZXIuc2V0Q3VycmVudChSYW1GbGF2b3VyKWAgZHVyaW5nIG1vZHVsZSBpbml0aWFsaXNhdGlvbi4gRGVmYXVsdHMgdG9cbiAgICogYHRydWVgLiBTZXQgdG8gYGZhbHNlYCB3aGVuIHRoZSBob3N0IGFwcGxpY2F0aW9uIGhhcyBhbHJlYWR5IGNvbmZpZ3VyZWQgYVxuICAgKiBSYW1BZGFwdGVyLlxuICAgKi9cbiAgaW5pdEFkYXB0ZXI/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE5lc3RKUyBtb2R1bGUgdGhhdCBob3N0cyB0aGUgZ3JhcGggZXhlY3V0aW9uIGVuZ2luZSBzZXJ2ZXItc2lkZS5cbiAqXG4gKiBQcm92aWRlczpcbiAqIC0ge0BsaW5rIEdyYXBoRXhlY3V0aW9uRW5naW5lfSDigJQgc2luZ2xldG9uIGVuZ2luZSB3aXRoIGEgZGVtbyBleGVjdXRvciByZWdpc3RyeS5cbiAqIC0gYEdSQVBIX1JFU1VMVF9SRVBPU0lUT1JZYCDigJQgRGVjYWYgcmVwb3NpdG9yeSBmb3Ige0BsaW5rIEdyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWx9IGJhY2tlZCBieSBSYW1BZGFwdGVyLlxuICogLSB7QGxpbmsgR3JhcGhFeGVjdXRpb25Db250cm9sbGVyfSDigJQgUkVTVCArIFNTRSBjb250cm9sbGVyLlxuICovXG5ATW9kdWxlKHt9KVxuZXhwb3J0IGNsYXNzIEdyYXBoRXhlY3V0aW9uTW9kdWxlIHtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBjb25maWd1cmVkIHtAbGluayBEeW5hbWljTW9kdWxlfSBmb3IgdGhlIGdyYXBoIGV4ZWN1dGlvbiBiYWNrZW5kLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE1vZHVsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEEgTmVzdEpTIGBEeW5hbWljTW9kdWxlYCByZWFkeSBmb3IgaW1wb3J0LlxuICAgKi9cbiAgc3RhdGljIGZvclJvb3QoXG4gICAgb3B0aW9uczogR3JhcGhFeGVjdXRpb25Nb2R1bGVPcHRpb25zID0ge31cbiAgKTogRHluYW1pY01vZHVsZSB7XG4gICAgY29uc3QgdXNlciA9IG9wdGlvbnMuYWRhcHRlclVzZXIgPz8gXCJncmFwaC1lbmdpbmVcIjtcbiAgICBjb25zdCBpbml0QWRhcHRlciA9IG9wdGlvbnMuaW5pdEFkYXB0ZXIgPz8gdHJ1ZTtcblxuICAgIGNvbnN0IHByb3ZpZGVyczogUHJvdmlkZXJbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogR3JhcGhFeGVjdXRpb25FbmdpbmUsXG4gICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAgICAgICAgICBpZiAoaW5pdEFkYXB0ZXIpIHtcbiAgICAgICAgICAgIFJhbUFkYXB0ZXIuZGVjb3JhdGlvbigpO1xuICAgICAgICAgICAgQWRhcHRlci5zZXRDdXJyZW50KFJhbUZsYXZvdXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZWdpc3RyeSA9IGNyZWF0ZUdyYXBoRXhlY3V0b3JSZWdpc3RyeSgpO1xuICAgICAgICAgIHJldHVybiBuZXcgR3JhcGhFeGVjdXRpb25FbmdpbmUoeyByZWdpc3RyeSB9KTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IEdSQVBIX1JFU1VMVF9SRVBPU0lUT1JZLFxuICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKGluaXRBZGFwdGVyKSB7XG4gICAgICAgICAgICBSYW1BZGFwdGVyLmRlY29yYXRpb24oKTtcbiAgICAgICAgICAgIEFkYXB0ZXIuc2V0Q3VycmVudChSYW1GbGF2b3VyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQ3JlYXRpbmcgdGhlIGFkYXB0ZXIgZW5zdXJlcyBhIFJhbS1mbGF2b3VyZWQgaW5zdGFuY2UgaXMgYXZhaWxhYmxlXG4gICAgICAgICAgLy8gZm9yIFJlcG9zaXRvcnkuZm9yTW9kZWwuIFRoZSBhZGFwdGVyIHVzZXIgaXMgdXNlZCBieSBhdWRpdCBoYW5kbGVycy5cbiAgICAgICAgICBuZXcgUmFtQWRhcHRlcih7IHVzZXIgfSk7XG4gICAgICAgICAgcmV0dXJuIFJlcG9zaXRvcnkuZm9yTW9kZWwoR3JhcGhFeGVjdXRpb25SZXN1bHRNb2RlbCk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgbW9kdWxlOiBHcmFwaEV4ZWN1dGlvbk1vZHVsZSxcbiAgICAgIGNvbnRyb2xsZXJzOiBbR3JhcGhFeGVjdXRpb25Db250cm9sbGVyXSxcbiAgICAgIHByb3ZpZGVycyxcbiAgICAgIGV4cG9ydHM6IFtHcmFwaEV4ZWN1dGlvbkVuZ2luZSwgR1JBUEhfUkVTVUxUX1JFUE9TSVRPUlldLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25Nb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJHcmFwaEV4ZWN1dGlvbk1vZHVsZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJO0lBQ2pGLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDN0gsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxPQUFPLENBQUMsUUFBUSxLQUFLLFVBQVU7UUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQzs7UUFDMUgsS0FBSyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUFFLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsSixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEUsQ0FBQyxDQUFDO0FBQ0YsSUFBSSxzQkFBc0IsQ0FBQztBQUMzQjs7OztHQUlHO0FBQ0gsMkNBQXdDO0FBQ3hDLHlDQUFxRDtBQUNyRCw0Q0FBNEQ7QUFDNUQscURBQThEO0FBQzlELHVGQUFnRjtBQUNoRixpRkFBMkU7QUFDM0UsK0VBQW1HO0FBQ25HOzs7Ozs7O0dBT0c7QUFDSCxJQUFJLG9CQUFvQixHQUFHLHNCQUFzQixHQUFHLE1BQU0sb0JBQW9CO0lBQzFFOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsRUFBRTtRQUN2QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLGNBQWMsQ0FBQztRQUNuRCxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQztRQUNoRCxNQUFNLFNBQVMsR0FBRztZQUNkO2dCQUNJLE9BQU8sRUFBRSwrQkFBb0I7Z0JBQzdCLFVBQVUsRUFBRSxHQUFHLEVBQUU7b0JBQ2IsSUFBSSxXQUFXLEVBQUUsQ0FBQzt3QkFDZCxnQkFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO3dCQUN4QixjQUFPLENBQUMsVUFBVSxDQUFDLGdCQUFVLENBQUMsQ0FBQztvQkFDbkMsQ0FBQztvQkFDRCxNQUFNLFFBQVEsR0FBRyxJQUFBLDZEQUEyQixHQUFFLENBQUM7b0JBQy9DLE9BQU8sSUFBSSwrQkFBb0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7Z0JBQ2xELENBQUM7YUFDSjtZQUNEO2dCQUNJLE9BQU8sRUFBRSxxREFBdUI7Z0JBQ2hDLFVBQVUsRUFBRSxHQUFHLEVBQUU7b0JBQ2IsSUFBSSxXQUFXLEVBQUUsQ0FBQzt3QkFDZCxnQkFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO3dCQUN4QixjQUFPLENBQUMsVUFBVSxDQUFDLGdCQUFVLENBQUMsQ0FBQztvQkFDbkMsQ0FBQztvQkFDRCxxRUFBcUU7b0JBQ3JFLHVFQUF1RTtvQkFDdkUsSUFBSSxnQkFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDekIsT0FBTyxpQkFBVSxDQUFDLFFBQVEsQ0FBQyx3REFBeUIsQ0FBQyxDQUFDO2dCQUMxRCxDQUFDO2FBQ0o7U0FDSixDQUFDO1FBQ0YsT0FBTztZQUNILE1BQU0sRUFBRSxzQkFBc0I7WUFDOUIsV0FBVyxFQUFFLENBQUMsc0RBQXdCLENBQUM7WUFDdkMsU0FBUztZQUNULE9BQU8sRUFBRSxDQUFDLCtCQUFvQixFQUFFLHFEQUF1QixDQUFDO1NBQzNELENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQztBQUlPLG9EQUFvQjtBQUg3QiwrQkFBQSxvQkFBb0IsR0FBRyxzQkFBc0IsR0FBRyxVQUFVLENBQUM7SUFDdkQsSUFBQSxlQUFNLEVBQUMsRUFBRSxDQUFDO0NBQ2IsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0FBRXpCLDA0TUFBMDRNIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVjb3JhdGUgPSAodGhpcyAmJiB0aGlzLl9fZGVjb3JhdGUpIHx8IGZ1bmN0aW9uIChkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59O1xudmFyIEdyYXBoRXhlY3V0aW9uTW9kdWxlXzE7XG4vKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL25lc3QvZ3JhcGgvR3JhcGhFeGVjdXRpb25Nb2R1bGVcbiAqIEBzdW1tYXJ5IE5lc3RKUyBEeW5hbWljTW9kdWxlIGhvc3RpbmcgdGhlIGdyYXBoIGV4ZWN1dGlvbiBlbmdpbmUuXG4gKiBAZGVzY3JpcHRpb24gV2lyZXMgdGhlIHtAbGluayBHcmFwaEV4ZWN1dGlvbkVuZ2luZX0sIGEgZGVtbyBleGVjdXRvciByZWdpc3RyeSwgYSBSYW1BZGFwdGVyLWJhY2tlZCByZXN1bHQgcmVwb3NpdG9yeSwgYW5kIHRoZSB7QGxpbmsgR3JhcGhFeGVjdXRpb25Db250cm9sbGVyfSBpbnRvIGEgc2luZ2xlIE5lc3RKUyBtb2R1bGUuIFVzZSBgR3JhcGhFeGVjdXRpb25Nb2R1bGUuZm9yUm9vdCgpYCB0byByZWdpc3RlciBpdCBpbiB0aGUgYXBwbGljYXRpb24uXG4gKi9cbmltcG9ydCB7IE1vZHVsZSB9IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHsgQWRhcHRlciwgUmVwb3NpdG9yeSB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgUmFtQWRhcHRlciwgUmFtRmxhdm91ciB9IGZyb20gXCJAZGVjYWYtdHMvY29yZS9yYW1cIjtcbmltcG9ydCB7IEdyYXBoRXhlY3V0aW9uRW5naW5lIH0gZnJvbSBcIi4vLi4vLi4vZ3JhcGgvaW5kZXguanNcIjtcbmltcG9ydCB7IGNyZWF0ZUdyYXBoRXhlY3V0b3JSZWdpc3RyeSB9IGZyb20gXCIuL0dyYXBoRXhlY3V0b3JSZWdpc3RyeUZhY3RvcnkuanNcIjtcbmltcG9ydCB7IEdyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWwgfSBmcm9tIFwiLi9HcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsLmpzXCI7XG5pbXBvcnQgeyBHUkFQSF9SRVNVTFRfUkVQT1NJVE9SWSwgR3JhcGhFeGVjdXRpb25Db250cm9sbGVyLCB9IGZyb20gXCIuL0dyYXBoRXhlY3V0aW9uQ29udHJvbGxlci5qc1wiO1xuLyoqXG4gKiBOZXN0SlMgbW9kdWxlIHRoYXQgaG9zdHMgdGhlIGdyYXBoIGV4ZWN1dGlvbiBlbmdpbmUgc2VydmVyLXNpZGUuXG4gKlxuICogUHJvdmlkZXM6XG4gKiAtIHtAbGluayBHcmFwaEV4ZWN1dGlvbkVuZ2luZX0g4oCUIHNpbmdsZXRvbiBlbmdpbmUgd2l0aCBhIGRlbW8gZXhlY3V0b3IgcmVnaXN0cnkuXG4gKiAtIGBHUkFQSF9SRVNVTFRfUkVQT1NJVE9SWWAg4oCUIERlY2FmIHJlcG9zaXRvcnkgZm9yIHtAbGluayBHcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsfSBiYWNrZWQgYnkgUmFtQWRhcHRlci5cbiAqIC0ge0BsaW5rIEdyYXBoRXhlY3V0aW9uQ29udHJvbGxlcn0g4oCUIFJFU1QgKyBTU0UgY29udHJvbGxlci5cbiAqL1xubGV0IEdyYXBoRXhlY3V0aW9uTW9kdWxlID0gR3JhcGhFeGVjdXRpb25Nb2R1bGVfMSA9IGNsYXNzIEdyYXBoRXhlY3V0aW9uTW9kdWxlIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgY29uZmlndXJlZCB7QGxpbmsgRHluYW1pY01vZHVsZX0gZm9yIHRoZSBncmFwaCBleGVjdXRpb24gYmFja2VuZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb25zIC0gTW9kdWxlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAgICAgKiBAcmV0dXJucyBBIE5lc3RKUyBgRHluYW1pY01vZHVsZWAgcmVhZHkgZm9yIGltcG9ydC5cbiAgICAgKi9cbiAgICBzdGF0aWMgZm9yUm9vdChvcHRpb25zID0ge30pIHtcbiAgICAgICAgY29uc3QgdXNlciA9IG9wdGlvbnMuYWRhcHRlclVzZXIgPz8gXCJncmFwaC1lbmdpbmVcIjtcbiAgICAgICAgY29uc3QgaW5pdEFkYXB0ZXIgPSBvcHRpb25zLmluaXRBZGFwdGVyID8/IHRydWU7XG4gICAgICAgIGNvbnN0IHByb3ZpZGVycyA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcm92aWRlOiBHcmFwaEV4ZWN1dGlvbkVuZ2luZSxcbiAgICAgICAgICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbml0QWRhcHRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgUmFtQWRhcHRlci5kZWNvcmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBBZGFwdGVyLnNldEN1cnJlbnQoUmFtRmxhdm91cik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBjcmVhdGVHcmFwaEV4ZWN1dG9yUmVnaXN0cnkoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBHcmFwaEV4ZWN1dGlvbkVuZ2luZSh7IHJlZ2lzdHJ5IH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHByb3ZpZGU6IEdSQVBIX1JFU1VMVF9SRVBPU0lUT1JZLFxuICAgICAgICAgICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluaXRBZGFwdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBSYW1BZGFwdGVyLmRlY29yYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFkYXB0ZXIuc2V0Q3VycmVudChSYW1GbGF2b3VyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGluZyB0aGUgYWRhcHRlciBlbnN1cmVzIGEgUmFtLWZsYXZvdXJlZCBpbnN0YW5jZSBpcyBhdmFpbGFibGVcbiAgICAgICAgICAgICAgICAgICAgLy8gZm9yIFJlcG9zaXRvcnkuZm9yTW9kZWwuIFRoZSBhZGFwdGVyIHVzZXIgaXMgdXNlZCBieSBhdWRpdCBoYW5kbGVycy5cbiAgICAgICAgICAgICAgICAgICAgbmV3IFJhbUFkYXB0ZXIoeyB1c2VyIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVwb3NpdG9yeS5mb3JNb2RlbChHcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1vZHVsZTogR3JhcGhFeGVjdXRpb25Nb2R1bGVfMSxcbiAgICAgICAgICAgIGNvbnRyb2xsZXJzOiBbR3JhcGhFeGVjdXRpb25Db250cm9sbGVyXSxcbiAgICAgICAgICAgIHByb3ZpZGVycyxcbiAgICAgICAgICAgIGV4cG9ydHM6IFtHcmFwaEV4ZWN1dGlvbkVuZ2luZSwgR1JBUEhfUkVTVUxUX1JFUE9TSVRPUlldLFxuICAgICAgICB9O1xuICAgIH1cbn07XG5HcmFwaEV4ZWN1dGlvbk1vZHVsZSA9IEdyYXBoRXhlY3V0aW9uTW9kdWxlXzEgPSBfX2RlY29yYXRlKFtcbiAgICBNb2R1bGUoe30pXG5dLCBHcmFwaEV4ZWN1dGlvbk1vZHVsZSk7XG5leHBvcnQgeyBHcmFwaEV4ZWN1dGlvbk1vZHVsZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pUjNKaGNHaEZlR1ZqZFhScGIyNU5iMlIxYkdVdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOHVMaTh1TGk5emNtTXZibVZ6ZEM5bmNtRndhQzlIY21Gd2FFVjRaV04xZEdsdmJrMXZaSFZzWlM1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96czdPenM3TzBGQlFVRTdPenM3UjBGSlJ6dEJRVU5JTEU5QlFVOHNSVUZCYVVJc1RVRkJUU3hGUVVGWkxFMUJRVTBzWjBKQlFXZENMRU5CUVVNN1FVRkRha1VzVDBGQlR5eEZRVUZGTEU5QlFVOHNSVUZCUlN4VlFVRlZMRVZCUVVVc1RVRkJUU3huUWtGQlowSXNRMEZCUXp0QlFVTnlSQ3hQUVVGUExFVkJRVVVzVlVGQlZTeEZRVUZGTEZWQlFWVXNSVUZCUlN4TlFVRk5MRzlDUVVGdlFpeERRVUZETzBGQlJUVkVMRTlCUVU4c1JVRkJSU3h2UWtGQmIwSXNSVUZCUlN3clFrRkJiMEk3UVVGRGJrUXNUMEZCVHl4RlFVRkZMREpDUVVFeVFpeEZRVUZGTERCRFFVRjFRenRCUVVNM1JTeFBRVUZQTEVWQlFVVXNlVUpCUVhsQ0xFVkJRVVVzZFVOQlFXOURPMEZCUTNoRkxFOUJRVThzUlVGRFRDeDFRa0ZCZFVJc1JVRkRka0lzZDBKQlFYZENMRWRCUTNwQ0xITkRRVUZ0UXp0QlFXMUNjRU03T3pzN096czdSMEZQUnp0QlFVVkpMRWxCUVUwc2IwSkJRVzlDTERSQ1FVRXhRaXhOUVVGTkxHOUNRVUZ2UWp0SlFVTXZRanM3T3pzN1QwRkxSenRKUVVOSUxFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlExb3NWVUZCZFVNc1JVRkJSVHRSUVVWNlF5eE5RVUZOTEVsQlFVa3NSMEZCUnl4UFFVRlBMRU5CUVVNc1YwRkJWeXhKUVVGSkxHTkJRV01zUTBGQlF6dFJRVU51UkN4TlFVRk5MRmRCUVZjc1IwRkJSeXhQUVVGUExFTkJRVU1zVjBGQlZ5eEpRVUZKTEVsQlFVa3NRMEZCUXp0UlFVVm9SQ3hOUVVGTkxGTkJRVk1zUjBGQlpUdFpRVU0xUWp0blFrRkRSU3hQUVVGUExFVkJRVVVzYjBKQlFXOUNPMmRDUVVNM1FpeFZRVUZWTEVWQlFVVXNSMEZCUnl4RlFVRkZPMjlDUVVObUxFbEJRVWtzVjBGQlZ5eEZRVUZGTEVOQlFVTTdkMEpCUTJoQ0xGVkJRVlVzUTBGQlF5eFZRVUZWTEVWQlFVVXNRMEZCUXp0M1FrRkRlRUlzVDBGQlR5eERRVUZETEZWQlFWVXNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJRenR2UWtGRGFrTXNRMEZCUXp0dlFrRkRSQ3hOUVVGTkxGRkJRVkVzUjBGQlJ5d3lRa0ZCTWtJc1JVRkJSU3hEUVVGRE8yOUNRVU12UXl4UFFVRlBMRWxCUVVrc2IwSkJRVzlDTEVOQlFVTXNSVUZCUlN4UlFVRlJMRVZCUVVVc1EwRkJReXhEUVVGRE8yZENRVU5vUkN4RFFVRkRPMkZCUTBZN1dVRkRSRHRuUWtGRFJTeFBRVUZQTEVWQlFVVXNkVUpCUVhWQ08yZENRVU5vUXl4VlFVRlZMRVZCUVVVc1IwRkJSeXhGUVVGRk8yOUNRVU5tTEVsQlFVa3NWMEZCVnl4RlFVRkZMRU5CUVVNN2QwSkJRMmhDTEZWQlFWVXNRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJRenQzUWtGRGVFSXNUMEZCVHl4RFFVRkRMRlZCUVZVc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dHZRa0ZEYWtNc1EwRkJRenR2UWtGRFJDeHhSVUZCY1VVN2IwSkJRM0pGTEhWRlFVRjFSVHR2UWtGRGRrVXNTVUZCU1N4VlFVRlZMRU5CUVVNc1JVRkJSU3hKUVVGSkxFVkJRVVVzUTBGQlF5eERRVUZETzI5Q1FVTjZRaXhQUVVGUExGVkJRVlVzUTBGQlF5eFJRVUZSTEVOQlFVTXNlVUpCUVhsQ0xFTkJRVU1zUTBGQlF6dG5Ra0ZEZUVRc1EwRkJRenRoUVVOR08xTkJRMFlzUTBGQlF6dFJRVVZHTEU5QlFVODdXVUZEVEN4TlFVRk5MRVZCUVVVc2MwSkJRVzlDTzFsQlF6VkNMRmRCUVZjc1JVRkJSU3hEUVVGRExIZENRVUYzUWl4RFFVRkRPMWxCUTNaRExGTkJRVk03V1VGRFZDeFBRVUZQTEVWQlFVVXNRMEZCUXl4dlFrRkJiMElzUlVGQlJTeDFRa0ZCZFVJc1EwRkJRenRUUVVONlJDeERRVUZETzBsQlEwb3NRMEZCUXp0RFFVTkdMRU5CUVVFN1FVRXZRMWtzYjBKQlFXOUNPMGxCUkdoRExFMUJRVTBzUTBGQlF5eEZRVUZGTEVOQlFVTTdSMEZEUlN4dlFrRkJiMElzUTBFclEyaERJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJBYlc5a2RXeGxJR2x1ZEdWbmNtRjBhVzl1Y3k5dVpYTjBMMmR5WVhCb0wwZHlZWEJvUlhobFkzVjBhVzl1VFc5a2RXeGxYRzRnS2lCQWMzVnRiV0Z5ZVNCT1pYTjBTbE1nUkhsdVlXMXBZMDF2WkhWc1pTQm9iM04wYVc1bklIUm9aU0JuY21Gd2FDQmxlR1ZqZFhScGIyNGdaVzVuYVc1bExseHVJQ29nUUdSbGMyTnlhWEIwYVc5dUlGZHBjbVZ6SUhSb1pTQjdRR3hwYm1zZ1IzSmhjR2hGZUdWamRYUnBiMjVGYm1kcGJtVjlMQ0JoSUdSbGJXOGdaWGhsWTNWMGIzSWdjbVZuYVhOMGNua3NJR0VnVW1GdFFXUmhjSFJsY2kxaVlXTnJaV1FnY21WemRXeDBJSEpsY0c5emFYUnZjbmtzSUdGdVpDQjBhR1VnZTBCc2FXNXJJRWR5WVhCb1JYaGxZM1YwYVc5dVEyOXVkSEp2Ykd4bGNuMGdhVzUwYnlCaElITnBibWRzWlNCT1pYTjBTbE1nYlc5a2RXeGxMaUJWYzJVZ1lFZHlZWEJvUlhobFkzVjBhVzl1VFc5a2RXeGxMbVp2Y2xKdmIzUW9LV0FnZEc4Z2NtVm5hWE4wWlhJZ2FYUWdhVzRnZEdobElHRndjR3hwWTJGMGFXOXVMbHh1SUNvdlhHNXBiWEJ2Y25RZ2V5QkVlVzVoYldsalRXOWtkV3hsTENCTmIyUjFiR1VzSUZCeWIzWnBaR1Z5SUgwZ1puSnZiU0JjSWtCdVpYTjBhbk12WTI5dGJXOXVYQ0k3WEc1cGJYQnZjblFnZXlCQlpHRndkR1Z5TENCU1pYQnZjMmwwYjNKNUlIMGdabkp2YlNCY0lrQmtaV05oWmkxMGN5OWpiM0psWENJN1hHNXBiWEJ2Y25RZ2V5QlNZVzFCWkdGd2RHVnlMQ0JTWVcxR2JHRjJiM1Z5SUgwZ1puSnZiU0JjSWtCa1pXTmhaaTEwY3k5amIzSmxMM0poYlZ3aU8xeHVYRzVwYlhCdmNuUWdleUJIY21Gd2FFVjRaV04xZEdsdmJrVnVaMmx1WlNCOUlHWnliMjBnWENJdUxpOHVMaTluY21Gd2FGd2lPMXh1YVcxd2IzSjBJSHNnWTNKbFlYUmxSM0poY0doRmVHVmpkWFJ2Y2xKbFoybHpkSEo1SUgwZ1puSnZiU0JjSWk0dlIzSmhjR2hGZUdWamRYUnZjbEpsWjJsemRISjVSbUZqZEc5eWVWd2lPMXh1YVcxd2IzSjBJSHNnUjNKaGNHaEZlR1ZqZFhScGIyNVNaWE4xYkhSTmIyUmxiQ0I5SUdaeWIyMGdYQ0l1TDBkeVlYQm9SWGhsWTNWMGFXOXVVbVZ6ZFd4MFRXOWtaV3hjSWp0Y2JtbHRjRzl5ZENCN1hHNGdJRWRTUVZCSVgxSkZVMVZNVkY5U1JWQlBVMGxVVDFKWkxGeHVJQ0JIY21Gd2FFVjRaV04xZEdsdmJrTnZiblJ5YjJ4c1pYSXNYRzU5SUdaeWIyMGdYQ0l1TDBkeVlYQm9SWGhsWTNWMGFXOXVRMjl1ZEhKdmJHeGxjbHdpTzF4dVhHNHZLaXBjYmlBcUlFOXdkR2x2Ym5NZ1ptOXlJSHRBYkdsdWF5QkhjbUZ3YUVWNFpXTjFkR2x2YmsxdlpIVnNaUzVtYjNKU2IyOTBmUzVjYmlBcUwxeHVaWGh3YjNKMElHbHVkR1Z5Wm1GalpTQkhjbUZ3YUVWNFpXTjFkR2x2YmsxdlpIVnNaVTl3ZEdsdmJuTWdlMXh1SUNBdktpcGNiaUFnSUNvZ1ZYTmxjaUJwWkdWdWRHbG1hV1Z5SUhCaGMzTmxaQ0IwYnlCMGFHVWdVbUZ0UVdSaGNIUmxjaTRnUkdWbVlYVnNkSE1nZEc4Z1lGd2laM0poY0dndFpXNW5hVzVsWENKZ0xseHVJQ0FnS2k5Y2JpQWdZV1JoY0hSbGNsVnpaWEkvT2lCemRISnBibWM3WEc0Z0lDOHFLbHh1SUNBZ0tpQlhhR1Z1SUdCMGNuVmxZQ3dnWTJGc2JITWdZRkpoYlVGa1lYQjBaWEl1WkdWamIzSmhkR2x2YmlncFlDQmhibVJjYmlBZ0lDb2dZRUZrWVhCMFpYSXVjMlYwUTNWeWNtVnVkQ2hTWVcxR2JHRjJiM1Z5S1dBZ1pIVnlhVzVuSUcxdlpIVnNaU0JwYm1sMGFXRnNhWE5oZEdsdmJpNGdSR1ZtWVhWc2RITWdkRzljYmlBZ0lDb2dZSFJ5ZFdWZ0xpQlRaWFFnZEc4Z1lHWmhiSE5sWUNCM2FHVnVJSFJvWlNCb2IzTjBJR0Z3Y0d4cFkyRjBhVzl1SUdoaGN5QmhiSEpsWVdSNUlHTnZibVpwWjNWeVpXUWdZVnh1SUNBZ0tpQlNZVzFCWkdGd2RHVnlMbHh1SUNBZ0tpOWNiaUFnYVc1cGRFRmtZWEIwWlhJL09pQmliMjlzWldGdU8xeHVmVnh1WEc0dktpcGNiaUFxSUU1bGMzUktVeUJ0YjJSMWJHVWdkR2hoZENCb2IzTjBjeUIwYUdVZ1ozSmhjR2dnWlhobFkzVjBhVzl1SUdWdVoybHVaU0J6WlhKMlpYSXRjMmxrWlM1Y2JpQXFYRzRnS2lCUWNtOTJhV1JsY3pwY2JpQXFJQzBnZTBCc2FXNXJJRWR5WVhCb1JYaGxZM1YwYVc5dVJXNW5hVzVsZlNEaWdKUWdjMmx1WjJ4bGRHOXVJR1Z1WjJsdVpTQjNhWFJvSUdFZ1pHVnRieUJsZUdWamRYUnZjaUJ5WldkcGMzUnllUzVjYmlBcUlDMGdZRWRTUVZCSVgxSkZVMVZNVkY5U1JWQlBVMGxVVDFKWllDRGlnSlFnUkdWallXWWdjbVZ3YjNOcGRHOXllU0JtYjNJZ2UwQnNhVzVySUVkeVlYQm9SWGhsWTNWMGFXOXVVbVZ6ZFd4MFRXOWtaV3g5SUdKaFkydGxaQ0JpZVNCU1lXMUJaR0Z3ZEdWeUxseHVJQ29nTFNCN1FHeHBibXNnUjNKaGNHaEZlR1ZqZFhScGIyNURiMjUwY205c2JHVnlmU0RpZ0pRZ1VrVlRWQ0FySUZOVFJTQmpiMjUwY205c2JHVnlMbHh1SUNvdlhHNUFUVzlrZFd4bEtIdDlLVnh1Wlhod2IzSjBJR05zWVhOeklFZHlZWEJvUlhobFkzVjBhVzl1VFc5a2RXeGxJSHRjYmlBZ0x5b3FYRzRnSUNBcUlFTnlaV0YwWlhNZ1lTQmpiMjVtYVdkMWNtVmtJSHRBYkdsdWF5QkVlVzVoYldsalRXOWtkV3hsZlNCbWIzSWdkR2hsSUdkeVlYQm9JR1Y0WldOMWRHbHZiaUJpWVdOclpXNWtMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnYjNCMGFXOXVjeUF0SUUxdlpIVnNaU0JqYjI1bWFXZDFjbUYwYVc5dUlHOXdkR2x2Ym5NdVhHNGdJQ0FxSUVCeVpYUjFjbTV6SUVFZ1RtVnpkRXBUSUdCRWVXNWhiV2xqVFc5a2RXeGxZQ0J5WldGa2VTQm1iM0lnYVcxd2IzSjBMbHh1SUNBZ0tpOWNiaUFnYzNSaGRHbGpJR1p2Y2xKdmIzUW9YRzRnSUNBZ2IzQjBhVzl1Y3pvZ1IzSmhjR2hGZUdWamRYUnBiMjVOYjJSMWJHVlBjSFJwYjI1eklEMGdlMzFjYmlBZ0tUb2dSSGx1WVcxcFkwMXZaSFZzWlNCN1hHNGdJQ0FnWTI5dWMzUWdkWE5sY2lBOUlHOXdkR2x2Ym5NdVlXUmhjSFJsY2xWelpYSWdQejhnWENKbmNtRndhQzFsYm1kcGJtVmNJanRjYmlBZ0lDQmpiMjV6ZENCcGJtbDBRV1JoY0hSbGNpQTlJRzl3ZEdsdmJuTXVhVzVwZEVGa1lYQjBaWElnUHo4Z2RISjFaVHRjYmx4dUlDQWdJR052Ym5OMElIQnliM1pwWkdWeWN6b2dVSEp2ZG1sa1pYSmJYU0E5SUZ0Y2JpQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ2NISnZkbWxrWlRvZ1IzSmhjR2hGZUdWamRYUnBiMjVGYm1kcGJtVXNYRzRnSUNBZ0lDQWdJSFZ6WlVaaFkzUnZjbms2SUNncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9hVzVwZEVGa1lYQjBaWElwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJRkpoYlVGa1lYQjBaWEl1WkdWamIzSmhkR2x2YmlncE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnUVdSaGNIUmxjaTV6WlhSRGRYSnlaVzUwS0ZKaGJVWnNZWFp2ZFhJcE8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J5WldkcGMzUnllU0E5SUdOeVpXRjBaVWR5WVhCb1JYaGxZM1YwYjNKU1pXZHBjM1J5ZVNncE8xeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnVaWGNnUjNKaGNHaEZlR1ZqZFhScGIyNUZibWRwYm1Vb2V5QnlaV2RwYzNSeWVTQjlLVHRjYmlBZ0lDQWdJQ0FnZlN4Y2JpQWdJQ0FnSUgwc1hHNGdJQ0FnSUNCN1hHNGdJQ0FnSUNBZ0lIQnliM1pwWkdVNklFZFNRVkJJWDFKRlUxVk1WRjlTUlZCUFUwbFVUMUpaTEZ4dUlDQWdJQ0FnSUNCMWMyVkdZV04wYjNKNU9pQW9LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0dsdWFYUkJaR0Z3ZEdWeUtTQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCU1lXMUJaR0Z3ZEdWeUxtUmxZMjl5WVhScGIyNG9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lFRmtZWEIwWlhJdWMyVjBRM1Z5Y21WdWRDaFNZVzFHYkdGMmIzVnlLVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdMeThnUTNKbFlYUnBibWNnZEdobElHRmtZWEIwWlhJZ1pXNXpkWEpsY3lCaElGSmhiUzFtYkdGMmIzVnlaV1FnYVc1emRHRnVZMlVnYVhNZ1lYWmhhV3hoWW14bFhHNGdJQ0FnSUNBZ0lDQWdMeThnWm05eUlGSmxjRzl6YVhSdmNua3VabTl5VFc5a1pXd3VJRlJvWlNCaFpHRndkR1Z5SUhWelpYSWdhWE1nZFhObFpDQmllU0JoZFdScGRDQm9ZVzVrYkdWeWN5NWNiaUFnSUNBZ0lDQWdJQ0J1WlhjZ1VtRnRRV1JoY0hSbGNpaDdJSFZ6WlhJZ2ZTazdYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJRkpsY0c5emFYUnZjbmt1Wm05eVRXOWtaV3dvUjNKaGNHaEZlR1ZqZFhScGIyNVNaWE4xYkhSTmIyUmxiQ2s3WEc0Z0lDQWdJQ0FnSUgwc1hHNGdJQ0FnSUNCOUxGeHVJQ0FnSUYwN1hHNWNiaUFnSUNCeVpYUjFjbTRnZTF4dUlDQWdJQ0FnYlc5a2RXeGxPaUJIY21Gd2FFVjRaV04xZEdsdmJrMXZaSFZzWlN4Y2JpQWdJQ0FnSUdOdmJuUnliMnhzWlhKek9pQmJSM0poY0doRmVHVmpkWFJwYjI1RGIyNTBjbTlzYkdWeVhTeGNiaUFnSUNBZ0lIQnliM1pwWkdWeWN5eGNiaUFnSUNBZ0lHVjRjRzl5ZEhNNklGdEhjbUZ3YUVWNFpXTjFkR2x2YmtWdVoybHVaU3dnUjFKQlVFaGZVa1ZUVlV4VVgxSkZVRTlUU1ZSUFVsbGRMRnh1SUNBZ0lIMDdYRzRnSUgxY2JuMWNiaUpkZlE9PSJdfQ==
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GraphExecutionResultModel = void 0;
4
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
5
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
6
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
7
+ r = Reflect.decorate(decorators, target, key, desc);
8
+ else
9
+ for (var i = decorators.length - 1; i >= 0; i--)
10
+ if (d = decorators[i])
11
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
12
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
13
+ };
14
+ var __metadata = (this && this.__metadata) || function (k, v) {
15
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
16
+ return Reflect.metadata(k, v);
17
+ };
18
+ /**
19
+ * @module integrations/nest/graph/GraphExecutionResultModel
20
+ * @summary Decaf model for persisting graph execution results.
21
+ * @description Serializes a {@link GraphExecutionResult} for storage in a Decaf persistence adapter (e.g. RamAdapter). Stores the run id, workflow id, status, inputs, outputs, per-node results, and timing information so clients can retrieve a completed run's full state via `GET /graph/results/:runId`.
22
+ */
23
+ const decorator_validation_1 = require("@decaf-ts/decorator-validation");
24
+ const core_1 = require("@decaf-ts/core");
25
+ const decoration_1 = require("@decaf-ts/decoration");
26
+ /**
27
+ * Ram flavour identifier. Duplicated here to avoid the side-effect import of
28
+ * `@decaf-ts/core/ram` (which calls `RamAdapter.decoration()` at module load
29
+ * time and can interfere with other modules' metadata initialisation).
30
+ */
31
+ const RAM_FLAVOUR = "ram";
32
+ /**
33
+ * Persisted representation of a completed graph execution run.
34
+ *
35
+ * Stored in the `graph_execution_result` table and keyed by `runId`.
36
+ */
37
+ let GraphExecutionResultModel = class GraphExecutionResultModel extends decorator_validation_1.Model {
38
+ constructor(arg) {
39
+ super(arg);
40
+ }
41
+ };
42
+ exports.GraphExecutionResultModel = GraphExecutionResultModel;
43
+ __decorate([
44
+ (0, core_1.pk)({ type: String, generated: false }),
45
+ __metadata("design:type", String)
46
+ ], GraphExecutionResultModel.prototype, "runId", void 0);
47
+ __decorate([
48
+ (0, core_1.column)(),
49
+ __metadata("design:type", String)
50
+ ], GraphExecutionResultModel.prototype, "workflowId", void 0);
51
+ __decorate([
52
+ (0, core_1.column)(),
53
+ __metadata("design:type", String)
54
+ ], GraphExecutionResultModel.prototype, "status", void 0);
55
+ __decorate([
56
+ (0, core_1.column)(),
57
+ __metadata("design:type", Object)
58
+ ], GraphExecutionResultModel.prototype, "inputs", void 0);
59
+ __decorate([
60
+ (0, core_1.column)(),
61
+ __metadata("design:type", Object)
62
+ ], GraphExecutionResultModel.prototype, "outputs", void 0);
63
+ __decorate([
64
+ (0, core_1.column)(),
65
+ __metadata("design:type", Object)
66
+ ], GraphExecutionResultModel.prototype, "nodeResults", void 0);
67
+ __decorate([
68
+ (0, core_1.column)(),
69
+ __metadata("design:type", Date)
70
+ ], GraphExecutionResultModel.prototype, "startedAt", void 0);
71
+ __decorate([
72
+ (0, core_1.column)(),
73
+ __metadata("design:type", Date)
74
+ ], GraphExecutionResultModel.prototype, "finishedAt", void 0);
75
+ exports.GraphExecutionResultModel = GraphExecutionResultModel = __decorate([
76
+ (0, decoration_1.uses)(RAM_FLAVOUR),
77
+ (0, core_1.table)("graph_execution_result"),
78
+ (0, decorator_validation_1.model)(),
79
+ __metadata("design:paramtypes", [Object])
80
+ ], GraphExecutionResultModel);
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25SZXN1bHRNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9uZXN0L2dyYXBoL0dyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7Ozs7R0FJRztBQUNILE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFpQixNQUFNLGdDQUFnQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU1Qzs7OztHQUlHO0FBQ0gsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBRTFCOzs7O0dBSUc7QUFJSSxJQUFNLHlCQUF5QixHQUEvQixNQUFNLHlCQUEwQixTQUFRLEtBQUs7SUFpRGxELFlBQVksR0FBeUM7UUFDbkQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2IsQ0FBQztDQUNGLENBQUE7QUEvQ0M7SUFEQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQzs7d0RBQ3hCO0FBTWY7SUFEQyxNQUFNLEVBQUU7OzZEQUNXO0FBTXBCO0lBREMsTUFBTSxFQUFFOzt5REFDTztBQU1oQjtJQURDLE1BQU0sRUFBRTs7eURBQ3dCO0FBTWpDO0lBREMsTUFBTSxFQUFFOzswREFDeUI7QUFNbEM7SUFEQyxNQUFNLEVBQUU7OzhEQUM2QjtBQU10QztJQURDLE1BQU0sRUFBRTs4QkFDRyxJQUFJOzREQUFDO0FBTWpCO0lBREMsTUFBTSxFQUFFOzhCQUNJLElBQUk7NkRBQUM7QUEvQ1AseUJBQXlCO0lBSHJDLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDakIsS0FBSyxDQUFDLHdCQUF3QixDQUFDO0lBQy9CLEtBQUssRUFBRTs7R0FDSyx5QkFBeUIsQ0FvRHJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9uZXN0L2dyYXBoL0dyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWxcbiAqIEBzdW1tYXJ5IERlY2FmIG1vZGVsIGZvciBwZXJzaXN0aW5nIGdyYXBoIGV4ZWN1dGlvbiByZXN1bHRzLlxuICogQGRlc2NyaXB0aW9uIFNlcmlhbGl6ZXMgYSB7QGxpbmsgR3JhcGhFeGVjdXRpb25SZXN1bHR9IGZvciBzdG9yYWdlIGluIGEgRGVjYWYgcGVyc2lzdGVuY2UgYWRhcHRlciAoZS5nLiBSYW1BZGFwdGVyKS4gU3RvcmVzIHRoZSBydW4gaWQsIHdvcmtmbG93IGlkLCBzdGF0dXMsIGlucHV0cywgb3V0cHV0cywgcGVyLW5vZGUgcmVzdWx0cywgYW5kIHRpbWluZyBpbmZvcm1hdGlvbiBzbyBjbGllbnRzIGNhbiByZXRyaWV2ZSBhIGNvbXBsZXRlZCBydW4ncyBmdWxsIHN0YXRlIHZpYSBgR0VUIC9ncmFwaC9yZXN1bHRzLzpydW5JZGAuXG4gKi9cbmltcG9ydCB7IE1vZGVsLCBtb2RlbCwgdHlwZSBNb2RlbEFyZyB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IGNvbHVtbiwgcGssIHRhYmxlIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyB1c2VzIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5cbi8qKlxuICogUmFtIGZsYXZvdXIgaWRlbnRpZmllci4gRHVwbGljYXRlZCBoZXJlIHRvIGF2b2lkIHRoZSBzaWRlLWVmZmVjdCBpbXBvcnQgb2ZcbiAqIGBAZGVjYWYtdHMvY29yZS9yYW1gICh3aGljaCBjYWxscyBgUmFtQWRhcHRlci5kZWNvcmF0aW9uKClgIGF0IG1vZHVsZSBsb2FkXG4gKiB0aW1lIGFuZCBjYW4gaW50ZXJmZXJlIHdpdGggb3RoZXIgbW9kdWxlcycgbWV0YWRhdGEgaW5pdGlhbGlzYXRpb24pLlxuICovXG5jb25zdCBSQU1fRkxBVk9VUiA9IFwicmFtXCI7XG5cbi8qKlxuICogUGVyc2lzdGVkIHJlcHJlc2VudGF0aW9uIG9mIGEgY29tcGxldGVkIGdyYXBoIGV4ZWN1dGlvbiBydW4uXG4gKlxuICogU3RvcmVkIGluIHRoZSBgZ3JhcGhfZXhlY3V0aW9uX3Jlc3VsdGAgdGFibGUgYW5kIGtleWVkIGJ5IGBydW5JZGAuXG4gKi9cbkB1c2VzKFJBTV9GTEFWT1VSKVxuQHRhYmxlKFwiZ3JhcGhfZXhlY3V0aW9uX3Jlc3VsdFwiKVxuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBHcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsIGV4dGVuZHMgTW9kZWwge1xuICAvKipcbiAgICogVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgZXhlY3V0aW9uIHJ1bi4gQWN0cyBhcyB0aGUgcHJpbWFyeSBrZXkuXG4gICAqL1xuICBAcGsoeyB0eXBlOiBTdHJpbmcsIGdlbmVyYXRlZDogZmFsc2UgfSlcbiAgcnVuSWQhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElkZW50aWZpZXIgb2YgdGhlIHdvcmtmbG93IHRoYXQgd2FzIGV4ZWN1dGVkLlxuICAgKi9cbiAgQGNvbHVtbigpXG4gIHdvcmtmbG93SWQhOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbmFsIHN0YXR1cyBvZiB0aGUgcnVuIChlLmcuIGBzdWNjZWVkZWRgLCBgZmFpbGVkYCkuXG4gICAqL1xuICBAY29sdW1uKClcbiAgc3RhdHVzITogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbnB1dHMgc3VwcGxpZWQgdG8gdGhlIHdvcmtmbG93IGF0IGV4ZWN1dGlvbiB0aW1lLlxuICAgKi9cbiAgQGNvbHVtbigpXG4gIGlucHV0cyE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBPdXRwdXRzIHByb2R1Y2VkIGJ5IHRoZSB3b3JrZmxvdy5cbiAgICovXG4gIEBjb2x1bW4oKVxuICBvdXRwdXRzITogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFBlci1ub2RlIGV4ZWN1dGlvbiByZXN1bHRzIGtleWVkIGJ5IG5vZGUgaWQuXG4gICAqL1xuICBAY29sdW1uKClcbiAgbm9kZVJlc3VsdHMhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKipcbiAgICogVGltZXN0YW1wIG1hcmtpbmcgd2hlbiB0aGUgcnVuIHN0YXJ0ZWQuXG4gICAqL1xuICBAY29sdW1uKClcbiAgc3RhcnRlZEF0ITogRGF0ZTtcblxuICAvKipcbiAgICogVGltZXN0YW1wIG1hcmtpbmcgd2hlbiB0aGUgcnVuIGZpbmlzaGVkLlxuICAgKi9cbiAgQGNvbHVtbigpXG4gIGZpbmlzaGVkQXQ/OiBEYXRlO1xuXG4gIGNvbnN0cnVjdG9yKGFyZz86IE1vZGVsQXJnPEdyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWw+KSB7XG4gICAgc3VwZXIoYXJnKTtcbiAgfVxufVxuIl19
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25SZXN1bHRNb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkdyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWwuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSTtJQUNqRixJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdILElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sT0FBTyxDQUFDLFFBQVEsS0FBSyxVQUFVO1FBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7O1FBQzFILEtBQUssSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFBRSxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEosT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLENBQUMsQ0FBQztBQUNGLElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDO0lBQ3hELElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sT0FBTyxDQUFDLFFBQVEsS0FBSyxVQUFVO1FBQUUsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3RyxDQUFDLENBQUM7QUFDRjs7OztHQUlHO0FBQ0gseUVBQThEO0FBQzlELHlDQUFtRDtBQUNuRCxxREFBNEM7QUFDNUM7Ozs7R0FJRztBQUNILE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQztBQUMxQjs7OztHQUlHO0FBQ0gsSUFBSSx5QkFBeUIsR0FBRyxNQUFNLHlCQUEwQixTQUFRLDRCQUFLO0lBQ3pFLFlBQVksR0FBRztRQUNYLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNmLENBQUM7Q0FDSixDQUFDO0FBdUNPLDhEQUF5QjtBQXRDbEMsVUFBVSxDQUFDO0lBQ1AsSUFBQSxTQUFFLEVBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUN0QyxVQUFVLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQztDQUNwQyxFQUFFLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN6RCxVQUFVLENBQUM7SUFDUCxJQUFBLGFBQU0sR0FBRTtJQUNSLFVBQVUsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDO0NBQ3BDLEVBQUUseUJBQXlCLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzlELFVBQVUsQ0FBQztJQUNQLElBQUEsYUFBTSxHQUFFO0lBQ1IsVUFBVSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7Q0FDcEMsRUFBRSx5QkFBeUIsQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDMUQsVUFBVSxDQUFDO0lBQ1AsSUFBQSxhQUFNLEdBQUU7SUFDUixVQUFVLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQztDQUNwQyxFQUFFLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMxRCxVQUFVLENBQUM7SUFDUCxJQUFBLGFBQU0sR0FBRTtJQUNSLFVBQVUsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDO0NBQ3BDLEVBQUUseUJBQXlCLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzNELFVBQVUsQ0FBQztJQUNQLElBQUEsYUFBTSxHQUFFO0lBQ1IsVUFBVSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUM7Q0FDcEMsRUFBRSx5QkFBeUIsQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDL0QsVUFBVSxDQUFDO0lBQ1AsSUFBQSxhQUFNLEdBQUU7SUFDUixVQUFVLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQztDQUNsQyxFQUFFLHlCQUF5QixDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM3RCxVQUFVLENBQUM7SUFDUCxJQUFBLGFBQU0sR0FBRTtJQUNSLFVBQVUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDO0NBQ2xDLEVBQUUseUJBQXlCLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzlELG9DQUFBLHlCQUF5QixHQUFHLFVBQVUsQ0FBQztJQUNuQyxJQUFBLGlCQUFJLEVBQUMsV0FBVyxDQUFDO0lBQ2pCLElBQUEsWUFBSyxFQUFDLHdCQUF3QixDQUFDO0lBQy9CLElBQUEsNEJBQUssR0FBRTtJQUNQLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0NBQzVDLEVBQUUseUJBQXlCLENBQUMsQ0FBQztBQUU5Qiw4bElBQThsSSIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcbn07XG4vKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL25lc3QvZ3JhcGgvR3JhcGhFeGVjdXRpb25SZXN1bHRNb2RlbFxuICogQHN1bW1hcnkgRGVjYWYgbW9kZWwgZm9yIHBlcnNpc3RpbmcgZ3JhcGggZXhlY3V0aW9uIHJlc3VsdHMuXG4gKiBAZGVzY3JpcHRpb24gU2VyaWFsaXplcyBhIHtAbGluayBHcmFwaEV4ZWN1dGlvblJlc3VsdH0gZm9yIHN0b3JhZ2UgaW4gYSBEZWNhZiBwZXJzaXN0ZW5jZSBhZGFwdGVyIChlLmcuIFJhbUFkYXB0ZXIpLiBTdG9yZXMgdGhlIHJ1biBpZCwgd29ya2Zsb3cgaWQsIHN0YXR1cywgaW5wdXRzLCBvdXRwdXRzLCBwZXItbm9kZSByZXN1bHRzLCBhbmQgdGltaW5nIGluZm9ybWF0aW9uIHNvIGNsaWVudHMgY2FuIHJldHJpZXZlIGEgY29tcGxldGVkIHJ1bidzIGZ1bGwgc3RhdGUgdmlhIGBHRVQgL2dyYXBoL3Jlc3VsdHMvOnJ1bklkYC5cbiAqL1xuaW1wb3J0IHsgTW9kZWwsIG1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgY29sdW1uLCBwaywgdGFibGUgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IHVzZXMgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbi8qKlxuICogUmFtIGZsYXZvdXIgaWRlbnRpZmllci4gRHVwbGljYXRlZCBoZXJlIHRvIGF2b2lkIHRoZSBzaWRlLWVmZmVjdCBpbXBvcnQgb2ZcbiAqIGBAZGVjYWYtdHMvY29yZS9yYW1gICh3aGljaCBjYWxscyBgUmFtQWRhcHRlci5kZWNvcmF0aW9uKClgIGF0IG1vZHVsZSBsb2FkXG4gKiB0aW1lIGFuZCBjYW4gaW50ZXJmZXJlIHdpdGggb3RoZXIgbW9kdWxlcycgbWV0YWRhdGEgaW5pdGlhbGlzYXRpb24pLlxuICovXG5jb25zdCBSQU1fRkxBVk9VUiA9IFwicmFtXCI7XG4vKipcbiAqIFBlcnNpc3RlZCByZXByZXNlbnRhdGlvbiBvZiBhIGNvbXBsZXRlZCBncmFwaCBleGVjdXRpb24gcnVuLlxuICpcbiAqIFN0b3JlZCBpbiB0aGUgYGdyYXBoX2V4ZWN1dGlvbl9yZXN1bHRgIHRhYmxlIGFuZCBrZXllZCBieSBgcnVuSWRgLlxuICovXG5sZXQgR3JhcGhFeGVjdXRpb25SZXN1bHRNb2RlbCA9IGNsYXNzIEdyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWwgZXh0ZW5kcyBNb2RlbCB7XG4gICAgY29uc3RydWN0b3IoYXJnKSB7XG4gICAgICAgIHN1cGVyKGFyZyk7XG4gICAgfVxufTtcbl9fZGVjb3JhdGUoW1xuICAgIHBrKHsgdHlwZTogU3RyaW5nLCBnZW5lcmF0ZWQ6IGZhbHNlIH0pLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBTdHJpbmcpXG5dLCBHcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsLnByb3RvdHlwZSwgXCJydW5JZFwiLCB2b2lkIDApO1xuX19kZWNvcmF0ZShbXG4gICAgY29sdW1uKCksXG4gICAgX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIFN0cmluZylcbl0sIEdyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWwucHJvdG90eXBlLCBcIndvcmtmbG93SWRcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIGNvbHVtbigpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBTdHJpbmcpXG5dLCBHcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsLnByb3RvdHlwZSwgXCJzdGF0dXNcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIGNvbHVtbigpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBHcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsLnByb3RvdHlwZSwgXCJpbnB1dHNcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIGNvbHVtbigpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG5dLCBHcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsLnByb3RvdHlwZSwgXCJvdXRwdXRzXCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBjb2x1bW4oKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuXSwgR3JhcGhFeGVjdXRpb25SZXN1bHRNb2RlbC5wcm90b3R5cGUsIFwibm9kZVJlc3VsdHNcIiwgdm9pZCAwKTtcbl9fZGVjb3JhdGUoW1xuICAgIGNvbHVtbigpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBEYXRlKVxuXSwgR3JhcGhFeGVjdXRpb25SZXN1bHRNb2RlbC5wcm90b3R5cGUsIFwic3RhcnRlZEF0XCIsIHZvaWQgMCk7XG5fX2RlY29yYXRlKFtcbiAgICBjb2x1bW4oKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgRGF0ZSlcbl0sIEdyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWwucHJvdG90eXBlLCBcImZpbmlzaGVkQXRcIiwgdm9pZCAwKTtcbkdyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWwgPSBfX2RlY29yYXRlKFtcbiAgICB1c2VzKFJBTV9GTEFWT1VSKSxcbiAgICB0YWJsZShcImdyYXBoX2V4ZWN1dGlvbl9yZXN1bHRcIiksXG4gICAgbW9kZWwoKSxcbiAgICBfX21ldGFkYXRhKFwiZGVzaWduOnBhcmFtdHlwZXNcIiwgW09iamVjdF0pXG5dLCBHcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsKTtcbmV4cG9ydCB7IEdyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWwgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVIzSmhjR2hGZUdWamRYUnBiMjVTWlhOMWJIUk5iMlJsYkM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMeTR1TDNOeVl5OXVaWE4wTDJkeVlYQm9MMGR5WVhCb1JYaGxZM1YwYVc5dVVtVnpkV3gwVFc5a1pXd3VkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3T3pzN096czdPMEZCUVVFN096czdSMEZKUnp0QlFVTklMRTlCUVU4c1JVRkJSU3hMUVVGTExFVkJRVVVzUzBGQlN5eEZRVUZwUWl4TlFVRk5MR2REUVVGblF5eERRVUZETzBGQlF6ZEZMRTlCUVU4c1JVRkJSU3hOUVVGTkxFVkJRVVVzUlVGQlJTeEZRVUZGTEV0QlFVc3NSVUZCUlN4TlFVRk5MR2RDUVVGblFpeERRVUZETzBGQlEyNUVMRTlCUVU4c1JVRkJSU3hKUVVGSkxFVkJRVVVzVFVGQlRTeHpRa0ZCYzBJc1EwRkJRenRCUVVVMVF6czdPenRIUVVsSE8wRkJRMGdzVFVGQlRTeFhRVUZYTEVkQlFVY3NTMEZCU3l4RFFVRkRPMEZCUlRGQ096czdPMGRCU1VjN1FVRkpTU3hKUVVGTkxIbENRVUY1UWl4SFFVRXZRaXhOUVVGTkxIbENRVUV3UWl4VFFVRlJMRXRCUVVzN1NVRnBSR3hFTEZsQlFWa3NSMEZCZVVNN1VVRkRia1FzUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTJJc1EwRkJRenREUVVOR0xFTkJRVUU3UVVFdlEwTTdTVUZFUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hKUVVGSkxFVkJRVVVzVFVGQlRTeEZRVUZGTEZOQlFWTXNSVUZCUlN4TFFVRkxMRVZCUVVVc1EwRkJRenM3ZDBSQlEzaENPMEZCVFdZN1NVRkVReXhOUVVGTkxFVkJRVVU3T3paRVFVTlhPMEZCVFhCQ08wbEJSRU1zVFVGQlRTeEZRVUZGT3p0NVJFRkRUenRCUVUxb1FqdEpRVVJETEUxQlFVMHNSVUZCUlRzN2VVUkJRM2RDTzBGQlRXcERPMGxCUkVNc1RVRkJUU3hGUVVGRk96c3dSRUZEZVVJN1FVRk5iRU03U1VGRVF5eE5RVUZOTEVWQlFVVTdPemhFUVVNMlFqdEJRVTEwUXp0SlFVUkRMRTFCUVUwc1JVRkJSVHM0UWtGRFJ5eEpRVUZKT3pSRVFVRkRPMEZCVFdwQ08wbEJSRU1zVFVGQlRTeEZRVUZGT3poQ1FVTkpMRWxCUVVrN05rUkJRVU03UVVFdlExQXNlVUpCUVhsQ08wbEJTSEpETEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNN1NVRkRha0lzUzBGQlN5eERRVUZETEhkQ1FVRjNRaXhEUVVGRE8wbEJReTlDTEV0QlFVc3NSVUZCUlRzN1IwRkRTeXg1UWtGQmVVSXNRMEZ2UkhKRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkFiVzlrZFd4bElHbHVkR1ZuY21GMGFXOXVjeTl1WlhOMEwyZHlZWEJvTDBkeVlYQm9SWGhsWTNWMGFXOXVVbVZ6ZFd4MFRXOWtaV3hjYmlBcUlFQnpkVzF0WVhKNUlFUmxZMkZtSUcxdlpHVnNJR1p2Y2lCd1pYSnphWE4wYVc1bklHZHlZWEJvSUdWNFpXTjFkR2x2YmlCeVpYTjFiSFJ6TGx4dUlDb2dRR1JsYzJOeWFYQjBhVzl1SUZObGNtbGhiR2w2WlhNZ1lTQjdRR3hwYm1zZ1IzSmhjR2hGZUdWamRYUnBiMjVTWlhOMWJIUjlJR1p2Y2lCemRHOXlZV2RsSUdsdUlHRWdSR1ZqWVdZZ2NHVnljMmx6ZEdWdVkyVWdZV1JoY0hSbGNpQW9aUzVuTGlCU1lXMUJaR0Z3ZEdWeUtTNGdVM1J2Y21WeklIUm9aU0J5ZFc0Z2FXUXNJSGR2Y210bWJHOTNJR2xrTENCemRHRjBkWE1zSUdsdWNIVjBjeXdnYjNWMGNIVjBjeXdnY0dWeUxXNXZaR1VnY21WemRXeDBjeXdnWVc1a0lIUnBiV2x1WnlCcGJtWnZjbTFoZEdsdmJpQnpieUJqYkdsbGJuUnpJR05oYmlCeVpYUnlhV1YyWlNCaElHTnZiWEJzWlhSbFpDQnlkVzRuY3lCbWRXeHNJSE4wWVhSbElIWnBZU0JnUjBWVUlDOW5jbUZ3YUM5eVpYTjFiSFJ6THpweWRXNUpaR0F1WEc0Z0tpOWNibWx0Y0c5eWRDQjdJRTF2WkdWc0xDQnRiMlJsYkN3Z2RIbHdaU0JOYjJSbGJFRnlaeUI5SUdaeWIyMGdYQ0pBWkdWallXWXRkSE12WkdWamIzSmhkRzl5TFhaaGJHbGtZWFJwYjI1Y0lqdGNibWx0Y0c5eWRDQjdJR052YkhWdGJpd2djR3NzSUhSaFlteGxJSDBnWm5KdmJTQmNJa0JrWldOaFppMTBjeTlqYjNKbFhDSTdYRzVwYlhCdmNuUWdleUIxYzJWeklIMGdabkp2YlNCY0lrQmtaV05oWmkxMGN5OWtaV052Y21GMGFXOXVYQ0k3WEc1Y2JpOHFLbHh1SUNvZ1VtRnRJR1pzWVhadmRYSWdhV1JsYm5ScFptbGxjaTRnUkhWd2JHbGpZWFJsWkNCb1pYSmxJSFJ2SUdGMmIybGtJSFJvWlNCemFXUmxMV1ZtWm1WamRDQnBiWEJ2Y25RZ2IyWmNiaUFxSUdCQVpHVmpZV1l0ZEhNdlkyOXlaUzl5WVcxZ0lDaDNhR2xqYUNCallXeHNjeUJnVW1GdFFXUmhjSFJsY2k1a1pXTnZjbUYwYVc5dUtDbGdJR0YwSUcxdlpIVnNaU0JzYjJGa1hHNGdLaUIwYVcxbElHRnVaQ0JqWVc0Z2FXNTBaWEptWlhKbElIZHBkR2dnYjNSb1pYSWdiVzlrZFd4bGN5Y2diV1YwWVdSaGRHRWdhVzVwZEdsaGJHbHpZWFJwYjI0cExseHVJQ292WEc1amIyNXpkQ0JTUVUxZlJreEJWazlWVWlBOUlGd2ljbUZ0WENJN1hHNWNiaThxS2x4dUlDb2dVR1Z5YzJsemRHVmtJSEpsY0hKbGMyVnVkR0YwYVc5dUlHOW1JR0VnWTI5dGNHeGxkR1ZrSUdkeVlYQm9JR1Y0WldOMWRHbHZiaUJ5ZFc0dVhHNGdLbHh1SUNvZ1UzUnZjbVZrSUdsdUlIUm9aU0JnWjNKaGNHaGZaWGhsWTNWMGFXOXVYM0psYzNWc2RHQWdkR0ZpYkdVZ1lXNWtJR3RsZVdWa0lHSjVJR0J5ZFc1SlpHQXVYRzRnS2k5Y2JrQjFjMlZ6S0ZKQlRWOUdURUZXVDFWU0tWeHVRSFJoWW14bEtGd2laM0poY0doZlpYaGxZM1YwYVc5dVgzSmxjM1ZzZEZ3aUtWeHVRRzF2WkdWc0tDbGNibVY0Y0c5eWRDQmpiR0Z6Y3lCSGNtRndhRVY0WldOMWRHbHZibEpsYzNWc2RFMXZaR1ZzSUdWNGRHVnVaSE1nVFc5a1pXd2dlMXh1SUNBdktpcGNiaUFnSUNvZ1ZXNXBjWFZsSUdsa1pXNTBhV1pwWlhJZ1ptOXlJSFJvYVhNZ1pYaGxZM1YwYVc5dUlISjFiaTRnUVdOMGN5QmhjeUIwYUdVZ2NISnBiV0Z5ZVNCclpYa3VYRzRnSUNBcUwxeHVJQ0JBY0dzb2V5QjBlWEJsT2lCVGRISnBibWNzSUdkbGJtVnlZWFJsWkRvZ1ptRnNjMlVnZlNsY2JpQWdjblZ1U1dRaE9pQnpkSEpwYm1jN1hHNWNiaUFnTHlvcVhHNGdJQ0FxSUVsa1pXNTBhV1pwWlhJZ2IyWWdkR2hsSUhkdmNtdG1iRzkzSUhSb1lYUWdkMkZ6SUdWNFpXTjFkR1ZrTGx4dUlDQWdLaTljYmlBZ1FHTnZiSFZ0YmlncFhHNGdJSGR2Y210bWJHOTNTV1FoT2lCemRISnBibWM3WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRVpwYm1Gc0lITjBZWFIxY3lCdlppQjBhR1VnY25WdUlDaGxMbWN1SUdCemRXTmpaV1ZrWldSZ0xDQmdabUZwYkdWa1lDa3VYRzRnSUNBcUwxeHVJQ0JBWTI5c2RXMXVLQ2xjYmlBZ2MzUmhkSFZ6SVRvZ2MzUnlhVzVuTzF4dVhHNGdJQzhxS2x4dUlDQWdLaUJKYm5CMWRITWdjM1Z3Y0d4cFpXUWdkRzhnZEdobElIZHZjbXRtYkc5M0lHRjBJR1Y0WldOMWRHbHZiaUIwYVcxbExseHVJQ0FnS2k5Y2JpQWdRR052YkhWdGJpZ3BYRzRnSUdsdWNIVjBjeUU2SUZKbFkyOXlaRHh6ZEhKcGJtY3NJSFZ1YTI1dmQyNCtPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQlBkWFJ3ZFhSeklIQnliMlIxWTJWa0lHSjVJSFJvWlNCM2IzSnJabXh2ZHk1Y2JpQWdJQ292WEc0Z0lFQmpiMngxYlc0b0tWeHVJQ0J2ZFhSd2RYUnpJVG9nVW1WamIzSmtQSE4wY21sdVp5d2dkVzVyYm05M2JqNDdYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGQmxjaTF1YjJSbElHVjRaV04xZEdsdmJpQnlaWE4xYkhSeklHdGxlV1ZrSUdKNUlHNXZaR1VnYVdRdVhHNGdJQ0FxTDF4dUlDQkFZMjlzZFcxdUtDbGNiaUFnYm05a1pWSmxjM1ZzZEhNaE9pQlNaV052Y21ROGMzUnlhVzVuTENCMWJtdHViM2R1UGp0Y2JseHVJQ0F2S2lwY2JpQWdJQ29nVkdsdFpYTjBZVzF3SUcxaGNtdHBibWNnZDJobGJpQjBhR1VnY25WdUlITjBZWEowWldRdVhHNGdJQ0FxTDF4dUlDQkFZMjlzZFcxdUtDbGNiaUFnYzNSaGNuUmxaRUYwSVRvZ1JHRjBaVHRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dWR2x0WlhOMFlXMXdJRzFoY210cGJtY2dkMmhsYmlCMGFHVWdjblZ1SUdacGJtbHphR1ZrTGx4dUlDQWdLaTljYmlBZ1FHTnZiSFZ0YmlncFhHNGdJR1pwYm1semFHVmtRWFEvT2lCRVlYUmxPMXh1WEc0Z0lHTnZibk4wY25WamRHOXlLR0Z5Wno4NklFMXZaR1ZzUVhKblBFZHlZWEJvUlhobFkzVjBhVzl1VW1WemRXeDBUVzlrWld3K0tTQjdYRzRnSUNBZ2MzVndaWElvWVhKbktUdGNiaUFnZlZ4dWZWeHVJbDE5Il19
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createGraphExecutionResultRepository = createGraphExecutionResultRepository;
4
+ exports.toResultModel = toResultModel;
5
+ exports.fromResultModel = fromResultModel;
6
+ /**
7
+ * @module integrations/nest/graph/GraphExecutionResultRepository
8
+ * @summary Repository for persisting and retrieving graph execution results.
9
+ * @description Provides a typed handle to a Decaf {@link Repository} backed by RamAdapter, with convenience methods for saving and loading {@link GraphExecutionResultModel} records. The repository is created via `Repository.forModel()` so it inherits all standard Decaf CRUD operations.
10
+ */
11
+ const core_1 = require("@decaf-ts/core");
12
+ const GraphExecutionResultModel_js_1 = require("./GraphExecutionResultModel.cjs");
13
+ /**
14
+ * Creates a Decaf repository for {@link GraphExecutionResultModel}.
15
+ *
16
+ * The caller must ensure the RamAdapter has been initialised and set as the
17
+ * current adapter (via `RamAdapter.decoration()` and `Adapter.setCurrent()`)
18
+ * before invoking this factory.
19
+ *
20
+ * @returns A Decaf repository instance for {@link GraphExecutionResultModel}.
21
+ */
22
+ function createGraphExecutionResultRepository() {
23
+ return core_1.Repository.forModel(GraphExecutionResultModel_js_1.GraphExecutionResultModel);
24
+ }
25
+ /**
26
+ * Converts a {@link GraphExecutionResult} into a persistable
27
+ * {@link GraphExecutionResultModel}.
28
+ *
29
+ * @param result - The execution result to convert.
30
+ * @returns A model instance ready for persistence.
31
+ */
32
+ function toResultModel(result) {
33
+ return new GraphExecutionResultModel_js_1.GraphExecutionResultModel({
34
+ runId: result.runId,
35
+ workflowId: result.workflowId,
36
+ status: result.status,
37
+ inputs: result.inputs,
38
+ outputs: result.outputs,
39
+ nodeResults: result.nodeResults,
40
+ startedAt: result.startedAt,
41
+ finishedAt: result.finishedAt,
42
+ });
43
+ }
44
+ /**
45
+ * Converts a persisted {@link GraphExecutionResultModel} back into a plain
46
+ * result-like object suitable for API responses.
47
+ *
48
+ * @param model - The persisted model (or `null` if not found).
49
+ * @returns A plain object with the result fields, or `null`.
50
+ */
51
+ function fromResultModel(model) {
52
+ if (!model)
53
+ return null;
54
+ return {
55
+ runId: model.runId,
56
+ workflowId: model.workflowId,
57
+ status: model.status,
58
+ inputs: model.inputs,
59
+ outputs: model.outputs,
60
+ nodeResults: model.nodeResults,
61
+ startedAt: model.startedAt,
62
+ finishedAt: model.finishedAt,
63
+ };
64
+ }
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25SZXN1bHRSZXBvc2l0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL25lc3QvZ3JhcGgvR3JhcGhFeGVjdXRpb25SZXN1bHRSZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLHVDQUFvQztBQVF4RTs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxvQ0FBb0M7SUFDbEQsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDeEQsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQzNCLE1BQTRCO0lBRTVCLE9BQU8sSUFBSSx5QkFBeUIsQ0FBQztRQUNuQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7UUFDbkIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1FBQzdCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtRQUNyQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDckIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1FBQ3ZCLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBc0M7UUFDMUQsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtLQUM5QixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsS0FBdUM7SUFFdkMsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLElBQUksQ0FBQztJQUN4QixPQUFPO1FBQ0wsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1FBQ2xCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVTtRQUM1QixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQXdDO1FBQ3RELE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtRQUNwQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87UUFDdEIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFrRDtRQUNyRSxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDMUIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO0tBQzdCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9uZXN0L2dyYXBoL0dyYXBoRXhlY3V0aW9uUmVzdWx0UmVwb3NpdG9yeVxuICogQHN1bW1hcnkgUmVwb3NpdG9yeSBmb3IgcGVyc2lzdGluZyBhbmQgcmV0cmlldmluZyBncmFwaCBleGVjdXRpb24gcmVzdWx0cy5cbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBhIHR5cGVkIGhhbmRsZSB0byBhIERlY2FmIHtAbGluayBSZXBvc2l0b3J5fSBiYWNrZWQgYnkgUmFtQWRhcHRlciwgd2l0aCBjb252ZW5pZW5jZSBtZXRob2RzIGZvciBzYXZpbmcgYW5kIGxvYWRpbmcge0BsaW5rIEdyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWx9IHJlY29yZHMuIFRoZSByZXBvc2l0b3J5IGlzIGNyZWF0ZWQgdmlhIGBSZXBvc2l0b3J5LmZvck1vZGVsKClgIHNvIGl0IGluaGVyaXRzIGFsbCBzdGFuZGFyZCBEZWNhZiBDUlVEIG9wZXJhdGlvbnMuXG4gKi9cbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB0eXBlIHsgR3JhcGhFeGVjdXRpb25SZXN1bHQgfSBmcm9tIFwiLi4vLi4vZ3JhcGhcIjtcbmltcG9ydCB7IEdyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWwgfSBmcm9tIFwiLi9HcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsXCI7XG5cbi8qKlxuICogVHlwZSBhbGlhcyBmb3IgdGhlIERlY2FmIHJlcG9zaXRvcnkgdHlwZWQgdG8ge0BsaW5rIEdyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWx9LlxuICovXG5leHBvcnQgdHlwZSBHcmFwaEV4ZWN1dGlvblJlc3VsdFJlcG9zaXRvcnlJbnN0YW5jZSA9XG4gIFJlcG9zaXRvcnk8R3JhcGhFeGVjdXRpb25SZXN1bHRNb2RlbCwgYW55PjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgRGVjYWYgcmVwb3NpdG9yeSBmb3Ige0BsaW5rIEdyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWx9LlxuICpcbiAqIFRoZSBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIFJhbUFkYXB0ZXIgaGFzIGJlZW4gaW5pdGlhbGlzZWQgYW5kIHNldCBhcyB0aGVcbiAqIGN1cnJlbnQgYWRhcHRlciAodmlhIGBSYW1BZGFwdGVyLmRlY29yYXRpb24oKWAgYW5kIGBBZGFwdGVyLnNldEN1cnJlbnQoKWApXG4gKiBiZWZvcmUgaW52b2tpbmcgdGhpcyBmYWN0b3J5LlxuICpcbiAqIEByZXR1cm5zIEEgRGVjYWYgcmVwb3NpdG9yeSBpbnN0YW5jZSBmb3Ige0BsaW5rIEdyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWx9LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR3JhcGhFeGVjdXRpb25SZXN1bHRSZXBvc2l0b3J5KCkge1xuICByZXR1cm4gUmVwb3NpdG9yeS5mb3JNb2RlbChHcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHtAbGluayBHcmFwaEV4ZWN1dGlvblJlc3VsdH0gaW50byBhIHBlcnNpc3RhYmxlXG4gKiB7QGxpbmsgR3JhcGhFeGVjdXRpb25SZXN1bHRNb2RlbH0uXG4gKlxuICogQHBhcmFtIHJlc3VsdCAtIFRoZSBleGVjdXRpb24gcmVzdWx0IHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBIG1vZGVsIGluc3RhbmNlIHJlYWR5IGZvciBwZXJzaXN0ZW5jZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUmVzdWx0TW9kZWwoXG4gIHJlc3VsdDogR3JhcGhFeGVjdXRpb25SZXN1bHRcbik6IEdyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWwge1xuICByZXR1cm4gbmV3IEdyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWwoe1xuICAgIHJ1bklkOiByZXN1bHQucnVuSWQsXG4gICAgd29ya2Zsb3dJZDogcmVzdWx0LndvcmtmbG93SWQsXG4gICAgc3RhdHVzOiByZXN1bHQuc3RhdHVzLFxuICAgIGlucHV0czogcmVzdWx0LmlucHV0cyxcbiAgICBvdXRwdXRzOiByZXN1bHQub3V0cHV0cyxcbiAgICBub2RlUmVzdWx0czogcmVzdWx0Lm5vZGVSZXN1bHRzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICAgIHN0YXJ0ZWRBdDogcmVzdWx0LnN0YXJ0ZWRBdCxcbiAgICBmaW5pc2hlZEF0OiByZXN1bHQuZmluaXNoZWRBdCxcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBwZXJzaXN0ZWQge0BsaW5rIEdyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWx9IGJhY2sgaW50byBhIHBsYWluXG4gKiByZXN1bHQtbGlrZSBvYmplY3Qgc3VpdGFibGUgZm9yIEFQSSByZXNwb25zZXMuXG4gKlxuICogQHBhcmFtIG1vZGVsIC0gVGhlIHBlcnNpc3RlZCBtb2RlbCAob3IgYG51bGxgIGlmIG5vdCBmb3VuZCkuXG4gKiBAcmV0dXJucyBBIHBsYWluIG9iamVjdCB3aXRoIHRoZSByZXN1bHQgZmllbGRzLCBvciBgbnVsbGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUmVzdWx0TW9kZWwoXG4gIG1vZGVsOiBHcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsIHwgbnVsbFxuKTogT21pdDxHcmFwaEV4ZWN1dGlvblJlc3VsdCwgXCJ3b3JrZmxvd1wiIHwgXCJldmVudHNcIiB8IFwibWV0YWRhdGFcIj4gfCBudWxsIHtcbiAgaWYgKCFtb2RlbCkgcmV0dXJuIG51bGw7XG4gIHJldHVybiB7XG4gICAgcnVuSWQ6IG1vZGVsLnJ1bklkLFxuICAgIHdvcmtmbG93SWQ6IG1vZGVsLndvcmtmbG93SWQsXG4gICAgc3RhdHVzOiBtb2RlbC5zdGF0dXMgYXMgR3JhcGhFeGVjdXRpb25SZXN1bHRbXCJzdGF0dXNcIl0sXG4gICAgaW5wdXRzOiBtb2RlbC5pbnB1dHMsXG4gICAgb3V0cHV0czogbW9kZWwub3V0cHV0cyxcbiAgICBub2RlUmVzdWx0czogbW9kZWwubm9kZVJlc3VsdHMgYXMgR3JhcGhFeGVjdXRpb25SZXN1bHRbXCJub2RlUmVzdWx0c1wiXSxcbiAgICBzdGFydGVkQXQ6IG1vZGVsLnN0YXJ0ZWRBdCxcbiAgICBmaW5pc2hlZEF0OiBtb2RlbC5maW5pc2hlZEF0LFxuICB9O1xufVxuIl19
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiR3JhcGhFeGVjdXRpb25SZXN1bHRSZXBvc2l0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiR3JhcGhFeGVjdXRpb25SZXN1bHRSZXBvc2l0b3J5LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBZ0JBLG9GQUVDO0FBUUQsc0NBV0M7QUFRRCwwQ0FhQztBQTFERDs7OztHQUlHO0FBQ0gseUNBQTRDO0FBQzVDLGlGQUEyRTtBQUMzRTs7Ozs7Ozs7R0FRRztBQUNILFNBQWdCLG9DQUFvQztJQUNoRCxPQUFPLGlCQUFVLENBQUMsUUFBUSxDQUFDLHdEQUF5QixDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUNEOzs7Ozs7R0FNRztBQUNILFNBQWdCLGFBQWEsQ0FBQyxNQUFNO0lBQ2hDLE9BQU8sSUFBSSx3REFBeUIsQ0FBQztRQUNqQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7UUFDbkIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1FBQzdCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtRQUNyQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDckIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1FBQ3ZCLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztRQUMvQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0IsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO0tBQ2hDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFDRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixlQUFlLENBQUMsS0FBSztJQUNqQyxJQUFJLENBQUMsS0FBSztRQUNOLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLE9BQU87UUFDSCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7UUFDbEIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO1FBQzVCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtRQUNwQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07UUFDcEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1FBQ3RCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztRQUM5QixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDMUIsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVO0tBQy9CLENBQUM7QUFDTixDQUFDO0FBQ0Qsc2xLQUFzbEsiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL25lc3QvZ3JhcGgvR3JhcGhFeGVjdXRpb25SZXN1bHRSZXBvc2l0b3J5XG4gKiBAc3VtbWFyeSBSZXBvc2l0b3J5IGZvciBwZXJzaXN0aW5nIGFuZCByZXRyaWV2aW5nIGdyYXBoIGV4ZWN1dGlvbiByZXN1bHRzLlxuICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIGEgdHlwZWQgaGFuZGxlIHRvIGEgRGVjYWYge0BsaW5rIFJlcG9zaXRvcnl9IGJhY2tlZCBieSBSYW1BZGFwdGVyLCB3aXRoIGNvbnZlbmllbmNlIG1ldGhvZHMgZm9yIHNhdmluZyBhbmQgbG9hZGluZyB7QGxpbmsgR3JhcGhFeGVjdXRpb25SZXN1bHRNb2RlbH0gcmVjb3Jkcy4gVGhlIHJlcG9zaXRvcnkgaXMgY3JlYXRlZCB2aWEgYFJlcG9zaXRvcnkuZm9yTW9kZWwoKWAgc28gaXQgaW5oZXJpdHMgYWxsIHN0YW5kYXJkIERlY2FmIENSVUQgb3BlcmF0aW9ucy5cbiAqL1xuaW1wb3J0IHsgUmVwb3NpdG9yeSB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgR3JhcGhFeGVjdXRpb25SZXN1bHRNb2RlbCB9IGZyb20gXCIuL0dyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWwuanNcIjtcbi8qKlxuICogQ3JlYXRlcyBhIERlY2FmIHJlcG9zaXRvcnkgZm9yIHtAbGluayBHcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsfS5cbiAqXG4gKiBUaGUgY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBSYW1BZGFwdGVyIGhhcyBiZWVuIGluaXRpYWxpc2VkIGFuZCBzZXQgYXMgdGhlXG4gKiBjdXJyZW50IGFkYXB0ZXIgKHZpYSBgUmFtQWRhcHRlci5kZWNvcmF0aW9uKClgIGFuZCBgQWRhcHRlci5zZXRDdXJyZW50KClgKVxuICogYmVmb3JlIGludm9raW5nIHRoaXMgZmFjdG9yeS5cbiAqXG4gKiBAcmV0dXJucyBBIERlY2FmIHJlcG9zaXRvcnkgaW5zdGFuY2UgZm9yIHtAbGluayBHcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUdyYXBoRXhlY3V0aW9uUmVzdWx0UmVwb3NpdG9yeSgpIHtcbiAgICByZXR1cm4gUmVwb3NpdG9yeS5mb3JNb2RlbChHcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsKTtcbn1cbi8qKlxuICogQ29udmVydHMgYSB7QGxpbmsgR3JhcGhFeGVjdXRpb25SZXN1bHR9IGludG8gYSBwZXJzaXN0YWJsZVxuICoge0BsaW5rIEdyYXBoRXhlY3V0aW9uUmVzdWx0TW9kZWx9LlxuICpcbiAqIEBwYXJhbSByZXN1bHQgLSBUaGUgZXhlY3V0aW9uIHJlc3VsdCB0byBjb252ZXJ0LlxuICogQHJldHVybnMgQSBtb2RlbCBpbnN0YW5jZSByZWFkeSBmb3IgcGVyc2lzdGVuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1Jlc3VsdE1vZGVsKHJlc3VsdCkge1xuICAgIHJldHVybiBuZXcgR3JhcGhFeGVjdXRpb25SZXN1bHRNb2RlbCh7XG4gICAgICAgIHJ1bklkOiByZXN1bHQucnVuSWQsXG4gICAgICAgIHdvcmtmbG93SWQ6IHJlc3VsdC53b3JrZmxvd0lkLFxuICAgICAgICBzdGF0dXM6IHJlc3VsdC5zdGF0dXMsXG4gICAgICAgIGlucHV0czogcmVzdWx0LmlucHV0cyxcbiAgICAgICAgb3V0cHV0czogcmVzdWx0Lm91dHB1dHMsXG4gICAgICAgIG5vZGVSZXN1bHRzOiByZXN1bHQubm9kZVJlc3VsdHMsXG4gICAgICAgIHN0YXJ0ZWRBdDogcmVzdWx0LnN0YXJ0ZWRBdCxcbiAgICAgICAgZmluaXNoZWRBdDogcmVzdWx0LmZpbmlzaGVkQXQsXG4gICAgfSk7XG59XG4vKipcbiAqIENvbnZlcnRzIGEgcGVyc2lzdGVkIHtAbGluayBHcmFwaEV4ZWN1dGlvblJlc3VsdE1vZGVsfSBiYWNrIGludG8gYSBwbGFpblxuICogcmVzdWx0LWxpa2Ugb2JqZWN0IHN1aXRhYmxlIGZvciBBUEkgcmVzcG9uc2VzLlxuICpcbiAqIEBwYXJhbSBtb2RlbCAtIFRoZSBwZXJzaXN0ZWQgbW9kZWwgKG9yIGBudWxsYCBpZiBub3QgZm91bmQpLlxuICogQHJldHVybnMgQSBwbGFpbiBvYmplY3Qgd2l0aCB0aGUgcmVzdWx0IGZpZWxkcywgb3IgYG51bGxgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbVJlc3VsdE1vZGVsKG1vZGVsKSB7XG4gICAgaWYgKCFtb2RlbClcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcnVuSWQ6IG1vZGVsLnJ1bklkLFxuICAgICAgICB3b3JrZmxvd0lkOiBtb2RlbC53b3JrZmxvd0lkLFxuICAgICAgICBzdGF0dXM6IG1vZGVsLnN0YXR1cyxcbiAgICAgICAgaW5wdXRzOiBtb2RlbC5pbnB1dHMsXG4gICAgICAgIG91dHB1dHM6IG1vZGVsLm91dHB1dHMsXG4gICAgICAgIG5vZGVSZXN1bHRzOiBtb2RlbC5ub2RlUmVzdWx0cyxcbiAgICAgICAgc3RhcnRlZEF0OiBtb2RlbC5zdGFydGVkQXQsXG4gICAgICAgIGZpbmlzaGVkQXQ6IG1vZGVsLmZpbmlzaGVkQXQsXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVIzSmhjR2hGZUdWamRYUnBiMjVTWlhOMWJIUlNaWEJ2YzJsMGIzSjVMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2TGk0dkxpNHZjM0pqTDI1bGMzUXZaM0poY0dndlIzSmhjR2hGZUdWamRYUnBiMjVTWlhOMWJIUlNaWEJ2YzJsMGIzSjVMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQk96czdPMGRCU1VjN1FVRkRTQ3hQUVVGUExFVkJRVVVzVlVGQlZTeEZRVUZGTEUxQlFVMHNaMEpCUVdkQ0xFTkJRVU03UVVGRk5VTXNUMEZCVHl4RlFVRkZMSGxDUVVGNVFpeEZRVUZGTEhWRFFVRnZRenRCUVZGNFJUczdPenM3T3pzN1IwRlJSenRCUVVOSUxFMUJRVTBzVlVGQlZTeHZRMEZCYjBNN1NVRkRiRVFzVDBGQlR5eFZRVUZWTEVOQlFVTXNVVUZCVVN4RFFVRkRMSGxDUVVGNVFpeERRVUZETEVOQlFVTTdRVUZEZUVRc1EwRkJRenRCUVVWRU96czdPenM3UjBGTlJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4aFFVRmhMRU5CUXpOQ0xFMUJRVFJDTzBsQlJUVkNMRTlCUVU4c1NVRkJTU3g1UWtGQmVVSXNRMEZCUXp0UlFVTnVReXhMUVVGTExFVkJRVVVzVFVGQlRTeERRVUZETEV0QlFVczdVVUZEYmtJc1ZVRkJWU3hGUVVGRkxFMUJRVTBzUTBGQlF5eFZRVUZWTzFGQlF6ZENMRTFCUVUwc1JVRkJSU3hOUVVGTkxFTkJRVU1zVFVGQlRUdFJRVU55UWl4TlFVRk5MRVZCUVVVc1RVRkJUU3hEUVVGRExFMUJRVTA3VVVGRGNrSXNUMEZCVHl4RlFVRkZMRTFCUVUwc1EwRkJReXhQUVVGUE8xRkJRM1pDTEZkQlFWY3NSVUZCUlN4TlFVRk5MRU5CUVVNc1YwRkJjME03VVVGRE1VUXNVMEZCVXl4RlFVRkZMRTFCUVUwc1EwRkJReXhUUVVGVE8xRkJRek5DTEZWQlFWVXNSVUZCUlN4TlFVRk5MRU5CUVVNc1ZVRkJWVHRMUVVNNVFpeERRVUZETEVOQlFVTTdRVUZEVEN4RFFVRkRPMEZCUlVRN096czdPenRIUVUxSE8wRkJRMGdzVFVGQlRTeFZRVUZWTEdWQlFXVXNRMEZETjBJc1MwRkJkVU03U1VGRmRrTXNTVUZCU1N4RFFVRkRMRXRCUVVzN1VVRkJSU3hQUVVGUExFbEJRVWtzUTBGQlF6dEpRVU40UWl4UFFVRlBPMUZCUTB3c1MwRkJTeXhGUVVGRkxFdEJRVXNzUTBGQlF5eExRVUZMTzFGQlEyeENMRlZCUVZVc1JVRkJSU3hMUVVGTExFTkJRVU1zVlVGQlZUdFJRVU0xUWl4TlFVRk5MRVZCUVVVc1MwRkJTeXhEUVVGRExFMUJRWGRETzFGQlEzUkVMRTFCUVUwc1JVRkJSU3hMUVVGTExFTkJRVU1zVFVGQlRUdFJRVU53UWl4UFFVRlBMRVZCUVVVc1MwRkJTeXhEUVVGRExFOUJRVTg3VVVGRGRFSXNWMEZCVnl4RlFVRkZMRXRCUVVzc1EwRkJReXhYUVVGclJEdFJRVU55UlN4VFFVRlRMRVZCUVVVc1MwRkJTeXhEUVVGRExGTkJRVk03VVVGRE1VSXNWVUZCVlN4RlFVRkZMRXRCUVVzc1EwRkJReXhWUVVGVk8wdEJRemRDTEVOQlFVTTdRVUZEU2l4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJBYlc5a2RXeGxJR2x1ZEdWbmNtRjBhVzl1Y3k5dVpYTjBMMmR5WVhCb0wwZHlZWEJvUlhobFkzVjBhVzl1VW1WemRXeDBVbVZ3YjNOcGRHOXllVnh1SUNvZ1FITjFiVzFoY25rZ1VtVndiM05wZEc5eWVTQm1iM0lnY0dWeWMybHpkR2x1WnlCaGJtUWdjbVYwY21sbGRtbHVaeUJuY21Gd2FDQmxlR1ZqZFhScGIyNGdjbVZ6ZFd4MGN5NWNiaUFxSUVCa1pYTmpjbWx3ZEdsdmJpQlFjbTkyYVdSbGN5QmhJSFI1Y0dWa0lHaGhibVJzWlNCMGJ5QmhJRVJsWTJGbUlIdEFiR2x1YXlCU1pYQnZjMmwwYjNKNWZTQmlZV05yWldRZ1lua2dVbUZ0UVdSaGNIUmxjaXdnZDJsMGFDQmpiMjUyWlc1cFpXNWpaU0J0WlhSb2IyUnpJR1p2Y2lCellYWnBibWNnWVc1a0lHeHZZV1JwYm1jZ2UwQnNhVzVySUVkeVlYQm9SWGhsWTNWMGFXOXVVbVZ6ZFd4MFRXOWtaV3g5SUhKbFkyOXlaSE11SUZSb1pTQnlaWEJ2YzJsMGIzSjVJR2x6SUdOeVpXRjBaV1FnZG1saElHQlNaWEJ2YzJsMGIzSjVMbVp2Y2sxdlpHVnNLQ2xnSUhOdklHbDBJR2x1YUdWeWFYUnpJR0ZzYkNCemRHRnVaR0Z5WkNCRVpXTmhaaUJEVWxWRUlHOXdaWEpoZEdsdmJuTXVYRzRnS2k5Y2JtbHRjRzl5ZENCN0lGSmxjRzl6YVhSdmNua2dmU0JtY205dElGd2lRR1JsWTJGbUxYUnpMMk52Y21WY0lqdGNibWx0Y0c5eWRDQjBlWEJsSUhzZ1IzSmhjR2hGZUdWamRYUnBiMjVTWlhOMWJIUWdmU0JtY205dElGd2lMaTR2TGk0dlozSmhjR2hjSWp0Y2JtbHRjRzl5ZENCN0lFZHlZWEJvUlhobFkzVjBhVzl1VW1WemRXeDBUVzlrWld3Z2ZTQm1jbTl0SUZ3aUxpOUhjbUZ3YUVWNFpXTjFkR2x2YmxKbGMzVnNkRTF2WkdWc1hDSTdYRzVjYmk4cUtseHVJQ29nVkhsd1pTQmhiR2xoY3lCbWIzSWdkR2hsSUVSbFkyRm1JSEpsY0c5emFYUnZjbmtnZEhsd1pXUWdkRzhnZTBCc2FXNXJJRWR5WVhCb1JYaGxZM1YwYVc5dVVtVnpkV3gwVFc5a1pXeDlMbHh1SUNvdlhHNWxlSEJ2Y25RZ2RIbHdaU0JIY21Gd2FFVjRaV04xZEdsdmJsSmxjM1ZzZEZKbGNHOXphWFJ2Y25sSmJuTjBZVzVqWlNBOVhHNGdJRkpsY0c5emFYUnZjbms4UjNKaGNHaEZlR1ZqZFhScGIyNVNaWE4xYkhSTmIyUmxiQ3dnWVc1NVBqdGNibHh1THlvcVhHNGdLaUJEY21WaGRHVnpJR0VnUkdWallXWWdjbVZ3YjNOcGRHOXllU0JtYjNJZ2UwQnNhVzVySUVkeVlYQm9SWGhsWTNWMGFXOXVVbVZ6ZFd4MFRXOWtaV3g5TGx4dUlDcGNiaUFxSUZSb1pTQmpZV3hzWlhJZ2JYVnpkQ0JsYm5OMWNtVWdkR2hsSUZKaGJVRmtZWEIwWlhJZ2FHRnpJR0psWlc0Z2FXNXBkR2xoYkdselpXUWdZVzVrSUhObGRDQmhjeUIwYUdWY2JpQXFJR04xY25KbGJuUWdZV1JoY0hSbGNpQW9kbWxoSUdCU1lXMUJaR0Z3ZEdWeUxtUmxZMjl5WVhScGIyNG9LV0FnWVc1a0lHQkJaR0Z3ZEdWeUxuTmxkRU4xY25KbGJuUW9LV0FwWEc0Z0tpQmlaV1p2Y21VZ2FXNTJiMnRwYm1jZ2RHaHBjeUJtWVdOMGIzSjVMbHh1SUNwY2JpQXFJRUJ5WlhSMWNtNXpJRUVnUkdWallXWWdjbVZ3YjNOcGRHOXllU0JwYm5OMFlXNWpaU0JtYjNJZ2UwQnNhVzVySUVkeVlYQm9SWGhsWTNWMGFXOXVVbVZ6ZFd4MFRXOWtaV3g5TGx4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdZM0psWVhSbFIzSmhjR2hGZUdWamRYUnBiMjVTWlhOMWJIUlNaWEJ2YzJsMGIzSjVLQ2tnZTF4dUlDQnlaWFIxY200Z1VtVndiM05wZEc5eWVTNW1iM0pOYjJSbGJDaEhjbUZ3YUVWNFpXTjFkR2x2YmxKbGMzVnNkRTF2WkdWc0tUdGNibjFjYmx4dUx5b3FYRzRnS2lCRGIyNTJaWEowY3lCaElIdEFiR2x1YXlCSGNtRndhRVY0WldOMWRHbHZibEpsYzNWc2RIMGdhVzUwYnlCaElIQmxjbk5wYzNSaFlteGxYRzRnS2lCN1FHeHBibXNnUjNKaGNHaEZlR1ZqZFhScGIyNVNaWE4xYkhSTmIyUmxiSDB1WEc0Z0tseHVJQ29nUUhCaGNtRnRJSEpsYzNWc2RDQXRJRlJvWlNCbGVHVmpkWFJwYjI0Z2NtVnpkV3gwSUhSdklHTnZiblpsY25RdVhHNGdLaUJBY21WMGRYSnVjeUJCSUcxdlpHVnNJR2x1YzNSaGJtTmxJSEpsWVdSNUlHWnZjaUJ3WlhKemFYTjBaVzVqWlM1Y2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSFJ2VW1WemRXeDBUVzlrWld3b1hHNGdJSEpsYzNWc2REb2dSM0poY0doRmVHVmpkWFJwYjI1U1pYTjFiSFJjYmlrNklFZHlZWEJvUlhobFkzVjBhVzl1VW1WemRXeDBUVzlrWld3Z2UxeHVJQ0J5WlhSMWNtNGdibVYzSUVkeVlYQm9SWGhsWTNWMGFXOXVVbVZ6ZFd4MFRXOWtaV3dvZTF4dUlDQWdJSEoxYmtsa09pQnlaWE4xYkhRdWNuVnVTV1FzWEc0Z0lDQWdkMjl5YTJac2IzZEpaRG9nY21WemRXeDBMbmR2Y210bWJHOTNTV1FzWEc0Z0lDQWdjM1JoZEhWek9pQnlaWE4xYkhRdWMzUmhkSFZ6TEZ4dUlDQWdJR2x1Y0hWMGN6b2djbVZ6ZFd4MExtbHVjSFYwY3l4Y2JpQWdJQ0J2ZFhSd2RYUnpPaUJ5WlhOMWJIUXViM1YwY0hWMGN5eGNiaUFnSUNCdWIyUmxVbVZ6ZFd4MGN6b2djbVZ6ZFd4MExtNXZaR1ZTWlhOMWJIUnpJR0Z6SUZKbFkyOXlaRHh6ZEhKcGJtY3NJSFZ1YTI1dmQyNCtMRnh1SUNBZ0lITjBZWEowWldSQmREb2djbVZ6ZFd4MExuTjBZWEowWldSQmRDeGNiaUFnSUNCbWFXNXBjMmhsWkVGME9pQnlaWE4xYkhRdVptbHVhWE5vWldSQmRDeGNiaUFnZlNrN1hHNTlYRzVjYmk4cUtseHVJQ29nUTI5dWRtVnlkSE1nWVNCd1pYSnphWE4wWldRZ2UwQnNhVzVySUVkeVlYQm9SWGhsWTNWMGFXOXVVbVZ6ZFd4MFRXOWtaV3g5SUdKaFkyc2dhVzUwYnlCaElIQnNZV2x1WEc0Z0tpQnlaWE4xYkhRdGJHbHJaU0J2WW1wbFkzUWdjM1ZwZEdGaWJHVWdabTl5SUVGUVNTQnlaWE53YjI1elpYTXVYRzRnS2x4dUlDb2dRSEJoY21GdElHMXZaR1ZzSUMwZ1ZHaGxJSEJsY25OcGMzUmxaQ0J0YjJSbGJDQW9iM0lnWUc1MWJHeGdJR2xtSUc1dmRDQm1iM1Z1WkNrdVhHNGdLaUJBY21WMGRYSnVjeUJCSUhCc1lXbHVJRzlpYW1WamRDQjNhWFJvSUhSb1pTQnlaWE4xYkhRZ1ptbGxiR1J6TENCdmNpQmdiblZzYkdBdVhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJtY205dFVtVnpkV3gwVFc5a1pXd29YRzRnSUcxdlpHVnNPaUJIY21Gd2FFVjRaV04xZEdsdmJsSmxjM1ZzZEUxdlpHVnNJSHdnYm5Wc2JGeHVLVG9nVDIxcGREeEhjbUZ3YUVWNFpXTjFkR2x2YmxKbGMzVnNkQ3dnWENKM2IzSnJabXh2ZDF3aUlId2dYQ0psZG1WdWRITmNJaUI4SUZ3aWJXVjBZV1JoZEdGY0lqNGdmQ0J1ZFd4c0lIdGNiaUFnYVdZZ0tDRnRiMlJsYkNrZ2NtVjBkWEp1SUc1MWJHdzdYRzRnSUhKbGRIVnliaUI3WEc0Z0lDQWdjblZ1U1dRNklHMXZaR1ZzTG5KMWJrbGtMRnh1SUNBZ0lIZHZjbXRtYkc5M1NXUTZJRzF2WkdWc0xuZHZjbXRtYkc5M1NXUXNYRzRnSUNBZ2MzUmhkSFZ6T2lCdGIyUmxiQzV6ZEdGMGRYTWdZWE1nUjNKaGNHaEZlR1ZqZFhScGIyNVNaWE4xYkhSYlhDSnpkR0YwZFhOY0lsMHNYRzRnSUNBZ2FXNXdkWFJ6T2lCdGIyUmxiQzVwYm5CMWRITXNYRzRnSUNBZ2IzVjBjSFYwY3pvZ2JXOWtaV3d1YjNWMGNIVjBjeXhjYmlBZ0lDQnViMlJsVW1WemRXeDBjem9nYlc5a1pXd3VibTlrWlZKbGMzVnNkSE1nWVhNZ1IzSmhjR2hGZUdWamRYUnBiMjVTWlhOMWJIUmJYQ0p1YjJSbFVtVnpkV3gwYzF3aVhTeGNiaUFnSUNCemRHRnlkR1ZrUVhRNklHMXZaR1ZzTG5OMFlYSjBaV1JCZEN4Y2JpQWdJQ0JtYVc1cGMyaGxaRUYwT2lCdGIyUmxiQzVtYVc1cGMyaGxaRUYwTEZ4dUlDQjlPMXh1ZlZ4dUlsMTkiXX0=