@researchdatabox/redbox-core 5.0.4 → 5.1.0-beta.12573

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 (548) hide show
  1. package/dist/AttachmentStagingIdentity.d.ts +3 -0
  2. package/dist/AttachmentStagingIdentity.d.ts.map +1 -0
  3. package/dist/AttachmentStagingIdentity.js +10 -0
  4. package/dist/CoreController.d.ts +7 -3
  5. package/dist/CoreController.d.ts.map +1 -1
  6. package/dist/CoreController.js +85 -3
  7. package/dist/DatastreamService.d.ts +5 -1
  8. package/dist/DatastreamService.d.ts.map +1 -1
  9. package/dist/HarvestRunService.d.ts +4 -3
  10. package/dist/HarvestRunService.d.ts.map +1 -1
  11. package/dist/HarvestRunService.js +1 -1
  12. package/dist/RecordConcurrencyObservability.d.ts +51 -0
  13. package/dist/RecordConcurrencyObservability.d.ts.map +1 -0
  14. package/dist/RecordConcurrencyObservability.js +136 -0
  15. package/dist/RecordEntityTag.d.ts +31 -0
  16. package/dist/RecordEntityTag.d.ts.map +1 -0
  17. package/dist/RecordEntityTag.js +101 -0
  18. package/dist/RecordFormFingerprint.d.ts +7 -0
  19. package/dist/RecordFormFingerprint.d.ts.map +1 -0
  20. package/dist/RecordFormFingerprint.js +106 -0
  21. package/dist/RecordHttpConcurrency.d.ts +60 -0
  22. package/dist/RecordHttpConcurrency.d.ts.map +1 -0
  23. package/dist/RecordHttpConcurrency.js +181 -0
  24. package/dist/RecordSaveResponse.d.ts +219 -0
  25. package/dist/RecordSaveResponse.d.ts.map +1 -0
  26. package/dist/RecordSaveResponse.js +639 -0
  27. package/dist/RecordStorageConcurrency.d.ts +49 -0
  28. package/dist/RecordStorageConcurrency.d.ts.map +1 -0
  29. package/dist/RecordStorageConcurrency.js +103 -0
  30. package/dist/RecordWriteClassification.d.ts +12 -0
  31. package/dist/RecordWriteClassification.d.ts.map +1 -0
  32. package/dist/RecordWriteClassification.js +70 -0
  33. package/dist/RecordsService.d.ts +109 -13
  34. package/dist/RecordsService.d.ts.map +1 -1
  35. package/dist/RecordsService.js +44 -1
  36. package/dist/SearchService.d.ts +2 -1
  37. package/dist/SearchService.d.ts.map +1 -1
  38. package/dist/StorageService.d.ts +49 -9
  39. package/dist/StorageService.d.ts.map +1 -1
  40. package/dist/StorageService.js +19 -1
  41. package/dist/StorageServiceResponse.d.ts +22 -1
  42. package/dist/StorageServiceResponse.d.ts.map +1 -1
  43. package/dist/StorageServiceResponse.js +22 -4
  44. package/dist/action-execution/audit.d.ts +41 -0
  45. package/dist/action-execution/audit.d.ts.map +1 -0
  46. package/dist/action-execution/audit.js +122 -0
  47. package/dist/action-execution/executor.d.ts +24 -0
  48. package/dist/action-execution/executor.d.ts.map +1 -0
  49. package/dist/action-execution/executor.js +435 -0
  50. package/dist/action-execution/failure.d.ts +49 -0
  51. package/dist/action-execution/failure.d.ts.map +1 -0
  52. package/dist/action-execution/failure.js +129 -0
  53. package/dist/action-execution/index.d.ts +7 -0
  54. package/dist/action-execution/index.d.ts.map +1 -0
  55. package/dist/action-execution/index.js +23 -0
  56. package/dist/action-execution/legacy-result.d.ts +21 -0
  57. package/dist/action-execution/legacy-result.d.ts.map +1 -0
  58. package/dist/action-execution/legacy-result.js +70 -0
  59. package/dist/action-execution/policy.d.ts +12 -0
  60. package/dist/action-execution/policy.d.ts.map +1 -0
  61. package/dist/action-execution/policy.js +138 -0
  62. package/dist/action-execution/types.d.ts +121 -0
  63. package/dist/action-execution/types.d.ts.map +1 -0
  64. package/dist/action-execution/types.js +22 -0
  65. package/dist/api-routes/groups/branding.d.ts +8 -0
  66. package/dist/api-routes/groups/branding.d.ts.map +1 -1
  67. package/dist/api-routes/groups/branding.js +86 -11
  68. package/dist/api-routes/groups/dashboard-config.d.ts +12 -9
  69. package/dist/api-routes/groups/dashboard-config.d.ts.map +1 -1
  70. package/dist/api-routes/groups/dashboard-config.js +136 -73
  71. package/dist/api-routes/groups/forms.d.ts.map +1 -1
  72. package/dist/api-routes/groups/forms.js +10 -2
  73. package/dist/api-routes/groups/record-schemas.d.ts +5 -0
  74. package/dist/api-routes/groups/record-schemas.d.ts.map +1 -0
  75. package/dist/api-routes/groups/record-schemas.js +181 -0
  76. package/dist/api-routes/groups/records.d.ts +1 -0
  77. package/dist/api-routes/groups/records.d.ts.map +1 -1
  78. package/dist/api-routes/groups/records.js +141 -26
  79. package/dist/api-routes/index.d.ts +3 -0
  80. package/dist/api-routes/index.d.ts.map +1 -1
  81. package/dist/api-routes/index.js +4 -1
  82. package/dist/api-routes/openapi.d.ts.map +1 -1
  83. package/dist/api-routes/openapi.js +7 -5
  84. package/dist/api-routes/record-schema-openapi.d.ts +26 -0
  85. package/dist/api-routes/record-schema-openapi.d.ts.map +1 -0
  86. package/dist/api-routes/record-schema-openapi.js +38 -0
  87. package/dist/api-routes/record-schema-response.d.ts +40 -0
  88. package/dist/api-routes/record-schema-response.d.ts.map +1 -0
  89. package/dist/api-routes/record-schema-response.js +89 -0
  90. package/dist/api-routes/request-extraction.d.ts.map +1 -1
  91. package/dist/api-routes/request-extraction.js +10 -8
  92. package/dist/api-routes/route-factory.d.ts.map +1 -1
  93. package/dist/api-routes/route-factory.js +2 -1
  94. package/dist/api-routes/route-registry.d.ts.map +1 -1
  95. package/dist/api-routes/route-registry.js +3 -1
  96. package/dist/api-routes/schemas/common.d.ts +36 -0
  97. package/dist/api-routes/schemas/common.d.ts.map +1 -1
  98. package/dist/api-routes/schemas/common.js +95 -5
  99. package/dist/api-routes/schemas/responses.d.ts +1424 -1
  100. package/dist/api-routes/schemas/responses.d.ts.map +1 -1
  101. package/dist/api-routes/schemas/responses.js +382 -60
  102. package/dist/api-routes/types.d.ts +1 -0
  103. package/dist/api-routes/types.d.ts.map +1 -1
  104. package/dist/api-routes/validation.d.ts +5 -1
  105. package/dist/api-routes/validation.d.ts.map +1 -1
  106. package/dist/api-routes/validation.js +14 -15
  107. package/dist/bootstrap.d.ts +3 -1
  108. package/dist/bootstrap.d.ts.map +1 -1
  109. package/dist/bootstrap.js +58 -41
  110. package/dist/config/agendaQueue.config.d.ts +3 -0
  111. package/dist/config/agendaQueue.config.d.ts.map +1 -1
  112. package/dist/config/agendaQueue.config.js +29 -2
  113. package/dist/config/branding.config.d.ts +13 -0
  114. package/dist/config/branding.config.d.ts.map +1 -1
  115. package/dist/config/branding.config.js +34 -2
  116. package/dist/config/brandingConfigurationDefaults.config.d.ts +4 -0
  117. package/dist/config/brandingConfigurationDefaults.config.d.ts.map +1 -1
  118. package/dist/config/brandingConfigurationDefaults.config.js +42 -3
  119. package/dist/config/index.d.ts +12 -4
  120. package/dist/config/index.d.ts.map +1 -1
  121. package/dist/config/index.js +7 -4
  122. package/dist/config/policies.config.d.ts.map +1 -1
  123. package/dist/config/policies.config.js +37 -23
  124. package/dist/config/raid.config.d.ts +7 -4
  125. package/dist/config/raid.config.d.ts.map +1 -1
  126. package/dist/config/raid.config.js +21 -35
  127. package/dist/config/record.config.d.ts +3 -0
  128. package/dist/config/record.config.d.ts.map +1 -1
  129. package/dist/config/record.config.js +37 -35
  130. package/dist/config/recordSchema.config.d.ts +68 -0
  131. package/dist/config/recordSchema.config.d.ts.map +1 -0
  132. package/dist/config/recordSchema.config.js +173 -0
  133. package/dist/config/recordValidation.config.d.ts +19 -0
  134. package/dist/config/recordValidation.config.d.ts.map +1 -0
  135. package/dist/config/recordValidation.config.js +10 -0
  136. package/dist/config/recordtype.config.d.ts +32 -9
  137. package/dist/config/recordtype.config.d.ts.map +1 -1
  138. package/dist/config/recordtype.config.js +4 -7
  139. package/dist/config/routes.config.d.ts.map +1 -1
  140. package/dist/config/routes.config.js +135 -53
  141. package/dist/config/workflow.config.d.ts +6 -0
  142. package/dist/config/workflow.config.d.ts.map +1 -1
  143. package/dist/config/workflow.config.js +1 -1
  144. package/dist/configmodels/AdminSidebarConfig.d.ts.map +1 -1
  145. package/dist/configmodels/AdminSidebarConfig.js +4 -2
  146. package/dist/configmodels/ConfigModels.d.ts +1 -1
  147. package/dist/configmodels/ConfigModels.d.ts.map +1 -1
  148. package/dist/configmodels/ConfigModels.js +26 -9
  149. package/dist/configmodels/DashboardFieldCatalogue.d.ts +67 -0
  150. package/dist/configmodels/DashboardFieldCatalogue.d.ts.map +1 -0
  151. package/dist/configmodels/DashboardFieldCatalogue.js +174 -0
  152. package/dist/configmodels/DashboardSettings.d.ts +191 -0
  153. package/dist/configmodels/DashboardSettings.d.ts.map +1 -0
  154. package/dist/configmodels/DashboardSettings.js +705 -0
  155. package/dist/configmodels/FigsharePublishing.d.ts +1 -1
  156. package/dist/configmodels/OniPublishing.d.ts +205 -0
  157. package/dist/configmodels/OniPublishing.d.ts.map +1 -0
  158. package/dist/configmodels/OniPublishing.js +335 -0
  159. package/dist/configmodels/RaidPublishing.d.ts +97 -0
  160. package/dist/configmodels/RaidPublishing.d.ts.map +1 -0
  161. package/dist/configmodels/RaidPublishing.js +35 -0
  162. package/dist/configmodels/WebAnalytics.d.ts +55 -0
  163. package/dist/configmodels/WebAnalytics.d.ts.map +1 -0
  164. package/dist/configmodels/WebAnalytics.js +61 -0
  165. package/dist/controllers/AppConfigController.d.ts.map +1 -1
  166. package/dist/controllers/AppConfigController.js +4 -1
  167. package/dist/controllers/BrandingAppController.d.ts +29 -7
  168. package/dist/controllers/BrandingAppController.d.ts.map +1 -1
  169. package/dist/controllers/BrandingAppController.js +265 -69
  170. package/dist/controllers/BrandingController.d.ts +24 -1
  171. package/dist/controllers/BrandingController.d.ts.map +1 -1
  172. package/dist/controllers/BrandingController.js +173 -43
  173. package/dist/controllers/BrandingControllerSupport.d.ts +20 -0
  174. package/dist/controllers/BrandingControllerSupport.d.ts.map +1 -0
  175. package/dist/controllers/BrandingControllerSupport.js +80 -0
  176. package/dist/controllers/DashboardConfigController.d.ts +6 -2
  177. package/dist/controllers/DashboardConfigController.d.ts.map +1 -1
  178. package/dist/controllers/DashboardConfigController.js +18 -4
  179. package/dist/controllers/DynamicAssetController.d.ts +7 -5
  180. package/dist/controllers/DynamicAssetController.d.ts.map +1 -1
  181. package/dist/controllers/DynamicAssetController.js +21 -12
  182. package/dist/controllers/RecordController.d.ts +45 -4
  183. package/dist/controllers/RecordController.d.ts.map +1 -1
  184. package/dist/controllers/RecordController.js +778 -345
  185. package/dist/controllers/index.d.ts.map +1 -1
  186. package/dist/controllers/index.js +4 -1
  187. package/dist/controllers/webservice/AdminController.d.ts.map +1 -1
  188. package/dist/controllers/webservice/AdminController.js +4 -3
  189. package/dist/controllers/webservice/BrandingController.d.ts +26 -1
  190. package/dist/controllers/webservice/BrandingController.d.ts.map +1 -1
  191. package/dist/controllers/webservice/BrandingController.js +292 -116
  192. package/dist/controllers/webservice/DashboardConfigController.d.ts +25 -17
  193. package/dist/controllers/webservice/DashboardConfigController.d.ts.map +1 -1
  194. package/dist/controllers/webservice/DashboardConfigController.js +90 -205
  195. package/dist/controllers/webservice/FormManagementController.d.ts.map +1 -1
  196. package/dist/controllers/webservice/FormManagementController.js +37 -3
  197. package/dist/controllers/webservice/RecordController.d.ts +15 -1
  198. package/dist/controllers/webservice/RecordController.d.ts.map +1 -1
  199. package/dist/controllers/webservice/RecordController.js +647 -267
  200. package/dist/controllers/webservice/RecordSchemaController.d.ts +32 -0
  201. package/dist/controllers/webservice/RecordSchemaController.d.ts.map +1 -0
  202. package/dist/controllers/webservice/RecordSchemaController.js +356 -0
  203. package/dist/controllers/webservice/RecordTypeController.d.ts +6 -1
  204. package/dist/controllers/webservice/RecordTypeController.d.ts.map +1 -1
  205. package/dist/controllers/webservice/RecordTypeController.js +21 -3
  206. package/dist/controllers/webservice/SearchController.d.ts.map +1 -1
  207. package/dist/controllers/webservice/SearchController.js +7 -3
  208. package/dist/hooks/defineRedboxHook.d.ts +3 -0
  209. package/dist/hooks/defineRedboxHook.d.ts.map +1 -1
  210. package/dist/hooks/defineRedboxHook.js +4 -1
  211. package/dist/index.d.ts +50 -23
  212. package/dist/index.d.ts.map +1 -1
  213. package/dist/index.js +90 -2
  214. package/dist/loader/bootstrapShimRuntime.d.ts +1 -1
  215. package/dist/loader/bootstrapShimRuntime.d.ts.map +1 -1
  216. package/dist/loader/bootstrapShimRuntime.js +20 -12
  217. package/dist/loader/index.d.ts +9 -0
  218. package/dist/loader/index.d.ts.map +1 -1
  219. package/dist/loader/index.js +93 -4
  220. package/dist/model/BrandingTypeface.d.ts +70 -0
  221. package/dist/model/BrandingTypeface.d.ts.map +1 -0
  222. package/dist/model/BrandingTypeface.js +116 -0
  223. package/dist/model/BuildResponse.d.ts +25 -11
  224. package/dist/model/BuildResponse.d.ts.map +1 -1
  225. package/dist/model/BuildResponse.js +4 -3
  226. package/dist/model/DashboardTypeResponseModel.d.ts +6 -0
  227. package/dist/model/DashboardTypeResponseModel.d.ts.map +1 -1
  228. package/dist/model/DashboardTypeResponseModel.js +7 -1
  229. package/dist/model/DashboardViewResponseModel.d.ts +5 -1
  230. package/dist/model/DashboardViewResponseModel.d.ts.map +1 -1
  231. package/dist/model/DashboardViewResponseModel.js +6 -3
  232. package/dist/model/RBValidationError.d.ts +17 -0
  233. package/dist/model/RBValidationError.d.ts.map +1 -1
  234. package/dist/model/RBValidationError.js +37 -1
  235. package/dist/model/RecordTypeResponseModel.d.ts +12 -4
  236. package/dist/model/RecordTypeResponseModel.d.ts.map +1 -1
  237. package/dist/model/RecordTypeResponseModel.js +11 -2
  238. package/dist/model/index.d.ts +5 -1
  239. package/dist/model/index.d.ts.map +1 -1
  240. package/dist/model/index.js +5 -2
  241. package/dist/model/record-contract.d.ts +42 -0
  242. package/dist/model/record-contract.d.ts.map +1 -0
  243. package/dist/model/record-contract.js +3 -0
  244. package/dist/model/storage/BrandingModel.d.ts +7 -0
  245. package/dist/model/storage/BrandingModel.d.ts.map +1 -1
  246. package/dist/model/storage/BrandingModel.js +7 -1
  247. package/dist/model/storage/DeletedRecordModel.d.ts +35 -0
  248. package/dist/model/storage/DeletedRecordModel.d.ts.map +1 -1
  249. package/dist/model/storage/DeletedRecordModel.js +62 -1
  250. package/dist/model/storage/IntegrationAuditModel.d.ts +16 -2
  251. package/dist/model/storage/IntegrationAuditModel.d.ts.map +1 -1
  252. package/dist/model/storage/IntegrationAuditModel.js +15 -1
  253. package/dist/model/storage/RecordAuditModel.d.ts +11 -1
  254. package/dist/model/storage/RecordAuditModel.d.ts.map +1 -1
  255. package/dist/model/storage/RecordAuditModel.js +8 -2
  256. package/dist/model/storage/RecordModel.d.ts +8 -2
  257. package/dist/model/storage/RecordModel.d.ts.map +1 -1
  258. package/dist/model/storage/RecordTypeModel.d.ts +6 -0
  259. package/dist/model/storage/RecordTypeModel.d.ts.map +1 -1
  260. package/dist/model/storage/RecordTypeModel.js +4 -1
  261. package/dist/model/storage/index.d.ts +12 -10
  262. package/dist/model/storage/index.d.ts.map +1 -1
  263. package/dist/model/storage/index.js +24 -2
  264. package/dist/model/storage/record-schema.d.ts +115 -0
  265. package/dist/model/storage/record-schema.d.ts.map +1 -0
  266. package/dist/model/storage/record-schema.js +3 -0
  267. package/dist/policies/checkAuth.d.ts +2 -6
  268. package/dist/policies/checkAuth.d.ts.map +1 -1
  269. package/dist/policies/checkAuth.js +32 -9
  270. package/dist/policies/contentSecurityPolicy.d.ts.map +1 -1
  271. package/dist/policies/contentSecurityPolicy.js +85 -2
  272. package/dist/policies/index.d.ts +3 -2
  273. package/dist/policies/index.d.ts.map +1 -1
  274. package/dist/policies/index.js +4 -2
  275. package/dist/policies/validateApiContractRequest.d.ts.map +1 -1
  276. package/dist/policies/validateApiContractRequest.js +49 -11
  277. package/dist/record-contract/ajv-error-mapper.d.ts +34 -0
  278. package/dist/record-contract/ajv-error-mapper.d.ts.map +1 -0
  279. package/dist/record-contract/ajv-error-mapper.js +153 -0
  280. package/dist/record-contract/canonical-json.d.ts +20 -0
  281. package/dist/record-contract/canonical-json.d.ts.map +1 -0
  282. package/dist/record-contract/canonical-json.js +126 -0
  283. package/dist/record-contract/codes.d.ts +36 -0
  284. package/dist/record-contract/codes.d.ts.map +1 -0
  285. package/dist/record-contract/codes.js +38 -0
  286. package/dist/record-contract/contributor-registry.d.ts +76 -0
  287. package/dist/record-contract/contributor-registry.d.ts.map +1 -0
  288. package/dist/record-contract/contributor-registry.js +126 -0
  289. package/dist/record-contract/core-contributors.d.ts +44 -0
  290. package/dist/record-contract/core-contributors.d.ts.map +1 -0
  291. package/dist/record-contract/core-contributors.js +395 -0
  292. package/dist/record-contract/deep-freeze.d.ts +3 -0
  293. package/dist/record-contract/deep-freeze.d.ts.map +1 -0
  294. package/dist/record-contract/deep-freeze.js +23 -0
  295. package/dist/record-contract/index.d.ts +13 -0
  296. package/dist/record-contract/index.d.ts.map +1 -0
  297. package/dist/record-contract/index.js +29 -0
  298. package/dist/record-contract/json-pointer.d.ts +20 -0
  299. package/dist/record-contract/json-pointer.d.ts.map +1 -0
  300. package/dist/record-contract/json-pointer.js +70 -0
  301. package/dist/record-contract/json-schema-renderer.d.ts +51 -0
  302. package/dist/record-contract/json-schema-renderer.d.ts.map +1 -0
  303. package/dist/record-contract/json-schema-renderer.js +450 -0
  304. package/dist/record-contract/record-contract-compiler.d.ts +42 -0
  305. package/dist/record-contract/record-contract-compiler.d.ts.map +1 -0
  306. package/dist/record-contract/record-contract-compiler.js +775 -0
  307. package/dist/record-contract/record-contract-context.d.ts +91 -0
  308. package/dist/record-contract/record-contract-context.d.ts.map +1 -0
  309. package/dist/record-contract/record-contract-context.js +39 -0
  310. package/dist/record-contract/record-json-schema-artifact.d.ts +74 -0
  311. package/dist/record-contract/record-json-schema-artifact.d.ts.map +1 -0
  312. package/dist/record-contract/record-json-schema-artifact.js +309 -0
  313. package/dist/record-contract/record-json-schema-etag.d.ts +15 -0
  314. package/dist/record-contract/record-json-schema-etag.d.ts.map +1 -0
  315. package/dist/record-contract/record-json-schema-etag.js +41 -0
  316. package/dist/record-contract/types.d.ts +151 -0
  317. package/dist/record-contract/types.d.ts.map +1 -0
  318. package/dist/record-contract/types.js +6 -0
  319. package/dist/services/AppConfigService.d.ts +6 -0
  320. package/dist/services/AppConfigService.d.ts.map +1 -1
  321. package/dist/services/AppConfigService.js +23 -1
  322. package/dist/services/AttachmentMetadataService.d.ts +58 -0
  323. package/dist/services/AttachmentMetadataService.d.ts.map +1 -1
  324. package/dist/services/AttachmentMetadataService.js +643 -8
  325. package/dist/services/BrandingLogoService.d.ts +6 -1
  326. package/dist/services/BrandingLogoService.d.ts.map +1 -1
  327. package/dist/services/BrandingLogoService.js +77 -9
  328. package/dist/services/BrandingService.d.ts +171 -9
  329. package/dist/services/BrandingService.d.ts.map +1 -1
  330. package/dist/services/BrandingService.js +572 -68
  331. package/dist/services/BrandingThemeCssService.d.ts +17 -1
  332. package/dist/services/BrandingThemeCssService.d.ts.map +1 -1
  333. package/dist/services/BrandingThemeCssService.js +71 -9
  334. package/dist/services/BrandingTypefaceService.d.ts +74 -0
  335. package/dist/services/BrandingTypefaceService.d.ts.map +1 -0
  336. package/dist/services/BrandingTypefaceService.js +359 -0
  337. package/dist/services/BrandingWoff2Inspector.d.ts +17 -0
  338. package/dist/services/BrandingWoff2Inspector.d.ts.map +1 -0
  339. package/dist/services/BrandingWoff2Inspector.js +402 -0
  340. package/dist/services/DashboardConfigService.d.ts +214 -54
  341. package/dist/services/DashboardConfigService.d.ts.map +1 -1
  342. package/dist/services/DashboardConfigService.js +829 -261
  343. package/dist/services/DashboardLegacyConversion.d.ts +82 -0
  344. package/dist/services/DashboardLegacyConversion.d.ts.map +1 -0
  345. package/dist/services/DashboardLegacyConversion.js +427 -0
  346. package/dist/services/DashboardTypesService.d.ts +15 -4
  347. package/dist/services/DashboardTypesService.d.ts.map +1 -1
  348. package/dist/services/DashboardTypesService.js +72 -139
  349. package/dist/services/DoiService.d.ts +1 -1
  350. package/dist/services/DoiService.d.ts.map +1 -1
  351. package/dist/services/DoiService.js +71 -45
  352. package/dist/services/FigshareService.d.ts.map +1 -1
  353. package/dist/services/FigshareService.js +8 -7
  354. package/dist/services/FormRecordConsistencyService.d.ts +8 -23
  355. package/dist/services/FormRecordConsistencyService.d.ts.map +1 -1
  356. package/dist/services/FormRecordConsistencyService.js +54 -70
  357. package/dist/services/FormsService.d.ts +91 -2
  358. package/dist/services/FormsService.d.ts.map +1 -1
  359. package/dist/services/FormsService.js +324 -64
  360. package/dist/services/HarvestRunService.d.ts +6 -3
  361. package/dist/services/HarvestRunService.d.ts.map +1 -1
  362. package/dist/services/HarvestRunService.js +161 -97
  363. package/dist/services/I18nEntriesService.d.ts +11 -11
  364. package/dist/services/I18nEntriesService.d.ts.map +1 -1
  365. package/dist/services/I18nEntriesService.js +71 -48
  366. package/dist/services/OniService.d.ts +19 -62
  367. package/dist/services/OniService.d.ts.map +1 -1
  368. package/dist/services/OniService.js +223 -691
  369. package/dist/services/RDMPService.d.ts +1 -1
  370. package/dist/services/RDMPService.d.ts.map +1 -1
  371. package/dist/services/RDMPService.js +5 -5
  372. package/dist/services/RaidService.d.ts +19 -61
  373. package/dist/services/RaidService.d.ts.map +1 -1
  374. package/dist/services/RaidService.js +191 -530
  375. package/dist/services/RecordSchemaService.d.ts +440 -0
  376. package/dist/services/RecordSchemaService.d.ts.map +1 -0
  377. package/dist/services/RecordSchemaService.js +3061 -0
  378. package/dist/services/RecordTypesService.d.ts +29 -0
  379. package/dist/services/RecordTypesService.d.ts.map +1 -1
  380. package/dist/services/RecordTypesService.js +106 -11
  381. package/dist/services/RecordValidationService.d.ts +340 -0
  382. package/dist/services/RecordValidationService.d.ts.map +1 -0
  383. package/dist/services/RecordValidationService.js +1898 -0
  384. package/dist/services/RecordsService.d.ts +317 -26
  385. package/dist/services/RecordsService.d.ts.map +1 -1
  386. package/dist/services/RecordsService.js +5145 -765
  387. package/dist/services/SolrSearchService.d.ts +1 -1
  388. package/dist/services/SolrSearchService.d.ts.map +1 -1
  389. package/dist/services/SolrSearchService.js +42 -12
  390. package/dist/services/StandardDatastreamService.d.ts +4 -0
  391. package/dist/services/StandardDatastreamService.d.ts.map +1 -1
  392. package/dist/services/StandardDatastreamService.js +106 -44
  393. package/dist/services/TriggerService.d.ts.map +1 -1
  394. package/dist/services/TriggerService.js +54 -30
  395. package/dist/services/UsersService.d.ts +2 -1
  396. package/dist/services/UsersService.d.ts.map +1 -1
  397. package/dist/services/UsersService.js +364 -283
  398. package/dist/services/VocabularyService.d.ts +2 -0
  399. package/dist/services/VocabularyService.d.ts.map +1 -1
  400. package/dist/services/VocabularyService.js +61 -2
  401. package/dist/services/WorkflowStepsService.d.ts +11 -0
  402. package/dist/services/WorkflowStepsService.d.ts.map +1 -1
  403. package/dist/services/WorkflowStepsService.js +32 -3
  404. package/dist/services/WorkspaceService.d.ts +2 -2
  405. package/dist/services/WorkspaceService.d.ts.map +1 -1
  406. package/dist/services/WorkspaceService.js +5 -5
  407. package/dist/services/doi-v2/bindings.d.ts.map +1 -1
  408. package/dist/services/doi-v2/bindings.js +3 -20
  409. package/dist/services/doi-v2/config.d.ts +1 -0
  410. package/dist/services/doi-v2/config.d.ts.map +1 -1
  411. package/dist/services/doi-v2/config.js +13 -5
  412. package/dist/services/doi-v2/runtime.d.ts.map +1 -1
  413. package/dist/services/doi-v2/runtime.js +14 -54
  414. package/dist/services/figshare-v2/bindings.d.ts.map +1 -1
  415. package/dist/services/figshare-v2/bindings.js +3 -20
  416. package/dist/services/figshare-v2/runtime.d.ts.map +1 -1
  417. package/dist/services/figshare-v2/runtime.js +11 -58
  418. package/dist/services/figshare-v2/worker.d.ts.map +1 -1
  419. package/dist/services/figshare-v2/worker.js +254 -74
  420. package/dist/services/form-record-access-user.d.ts +3 -0
  421. package/dist/services/form-record-access-user.d.ts.map +1 -0
  422. package/dist/services/form-record-access-user.js +23 -0
  423. package/dist/services/index.d.ts +9 -0
  424. package/dist/services/index.d.ts.map +1 -1
  425. package/dist/services/index.js +45 -3
  426. package/dist/services/integration-v2/bindings.d.ts +3 -0
  427. package/dist/services/integration-v2/bindings.d.ts.map +1 -0
  428. package/dist/services/integration-v2/bindings.js +91 -0
  429. package/dist/services/integration-v2/runtime.d.ts +3 -0
  430. package/dist/services/integration-v2/runtime.d.ts.map +1 -0
  431. package/dist/services/integration-v2/runtime.js +50 -0
  432. package/dist/services/internal-record-schema-authorization.d.ts +8 -0
  433. package/dist/services/internal-record-schema-authorization.d.ts.map +1 -0
  434. package/dist/services/internal-record-schema-authorization.js +16 -0
  435. package/dist/services/oni-v2/audit.d.ts +19 -0
  436. package/dist/services/oni-v2/audit.d.ts.map +1 -0
  437. package/dist/services/oni-v2/audit.js +50 -0
  438. package/dist/services/oni-v2/bindings.d.ts +7 -0
  439. package/dist/services/oni-v2/bindings.d.ts.map +1 -0
  440. package/dist/services/oni-v2/bindings.js +31 -0
  441. package/dist/services/oni-v2/config.d.ts +12 -0
  442. package/dist/services/oni-v2/config.d.ts.map +1 -0
  443. package/dist/services/oni-v2/config.js +134 -0
  444. package/dist/services/oni-v2/context.d.ts +3 -0
  445. package/dist/services/oni-v2/context.d.ts.map +1 -0
  446. package/dist/services/oni-v2/context.js +17 -0
  447. package/dist/services/oni-v2/crate.d.ts +17 -0
  448. package/dist/services/oni-v2/crate.d.ts.map +1 -0
  449. package/dist/services/oni-v2/crate.js +504 -0
  450. package/dist/services/oni-v2/flydriveOcflStore.d.ts +69 -0
  451. package/dist/services/oni-v2/flydriveOcflStore.d.ts.map +1 -0
  452. package/dist/services/oni-v2/flydriveOcflStore.js +325 -0
  453. package/dist/services/oni-v2/ingestion.d.ts +37 -0
  454. package/dist/services/oni-v2/ingestion.d.ts.map +1 -0
  455. package/dist/services/oni-v2/ingestion.js +91 -0
  456. package/dist/services/oni-v2/mapping.d.ts +17 -0
  457. package/dist/services/oni-v2/mapping.d.ts.map +1 -0
  458. package/dist/services/oni-v2/mapping.js +137 -0
  459. package/dist/services/oni-v2/repository.d.ts +9 -0
  460. package/dist/services/oni-v2/repository.d.ts.map +1 -0
  461. package/dist/services/oni-v2/repository.js +180 -0
  462. package/dist/services/oni-v2/runtime.d.ts +23 -0
  463. package/dist/services/oni-v2/runtime.d.ts.map +1 -0
  464. package/dist/services/oni-v2/runtime.js +121 -0
  465. package/dist/services/oni-v2/templating.d.ts +11 -0
  466. package/dist/services/oni-v2/templating.d.ts.map +1 -0
  467. package/dist/services/oni-v2/templating.js +27 -0
  468. package/dist/services/oni-v2/types.d.ts +100 -0
  469. package/dist/services/oni-v2/types.d.ts.map +1 -0
  470. package/dist/services/oni-v2/types.js +3 -0
  471. package/dist/services/raid-v2/audit.d.ts +10 -0
  472. package/dist/services/raid-v2/audit.d.ts.map +1 -0
  473. package/dist/services/raid-v2/audit.js +29 -0
  474. package/dist/services/raid-v2/errors.d.ts +85 -0
  475. package/dist/services/raid-v2/errors.d.ts.map +1 -0
  476. package/dist/services/raid-v2/errors.js +36 -0
  477. package/dist/services/raid-v2/http.d.ts +4 -0
  478. package/dist/services/raid-v2/http.d.ts.map +1 -0
  479. package/dist/services/raid-v2/http.js +84 -0
  480. package/dist/services/raid-v2/logger.d.ts +8 -0
  481. package/dist/services/raid-v2/logger.d.ts.map +1 -0
  482. package/dist/services/raid-v2/logger.js +30 -0
  483. package/dist/services/raid-v2/mapping.d.ts +9 -0
  484. package/dist/services/raid-v2/mapping.d.ts.map +1 -0
  485. package/dist/services/raid-v2/mapping.js +168 -0
  486. package/dist/services/raid-v2/runtime.d.ts +5 -0
  487. package/dist/services/raid-v2/runtime.d.ts.map +1 -0
  488. package/dist/services/raid-v2/runtime.js +135 -0
  489. package/dist/services/raid-v2/tags.d.ts +11 -0
  490. package/dist/services/raid-v2/tags.d.ts.map +1 -0
  491. package/dist/services/raid-v2/tags.js +12 -0
  492. package/dist/services/raid-v2/types.d.ts +66 -0
  493. package/dist/services/raid-v2/types.d.ts.map +1 -0
  494. package/dist/services/raid-v2/types.js +3 -0
  495. package/dist/services/record-hooks/coordinator.d.ts +64 -0
  496. package/dist/services/record-hooks/coordinator.d.ts.map +1 -0
  497. package/dist/services/record-hooks/coordinator.js +276 -0
  498. package/dist/visitor/client.visitor.d.ts +6 -0
  499. package/dist/visitor/client.visitor.d.ts.map +1 -1
  500. package/dist/visitor/client.visitor.js +59 -14
  501. package/dist/visitor/construct.visitor.d.ts +27 -1
  502. package/dist/visitor/construct.visitor.d.ts.map +1 -1
  503. package/dist/visitor/construct.visitor.js +265 -177
  504. package/dist/visitor/context-variables.visitor.d.ts +3 -1
  505. package/dist/visitor/context-variables.visitor.d.ts.map +1 -1
  506. package/dist/visitor/context-variables.visitor.js +15 -1
  507. package/dist/visitor/data-value.visitor.d.ts +6 -0
  508. package/dist/visitor/data-value.visitor.d.ts.map +1 -1
  509. package/dist/visitor/data-value.visitor.js +10 -1
  510. package/dist/visitor/json-type-def.visitor.d.ts +6 -0
  511. package/dist/visitor/json-type-def.visitor.d.ts.map +1 -1
  512. package/dist/visitor/json-type-def.visitor.js +10 -1
  513. package/dist/visitor/migrate-config-v4-v5.visitor.d.ts +11 -0
  514. package/dist/visitor/migrate-config-v4-v5.visitor.d.ts.map +1 -1
  515. package/dist/visitor/migrate-config-v4-v5.visitor.js +228 -133
  516. package/dist/visitor/related-object-data-inline.visitor.d.ts +31 -0
  517. package/dist/visitor/related-object-data-inline.visitor.d.ts.map +1 -0
  518. package/dist/visitor/related-object-data-inline.visitor.js +96 -0
  519. package/dist/visitor/template.visitor.d.ts +17 -2
  520. package/dist/visitor/template.visitor.d.ts.map +1 -1
  521. package/dist/visitor/template.visitor.js +60 -22
  522. package/dist/visitor/validator.visitor.d.ts +49 -7
  523. package/dist/visitor/validator.visitor.d.ts.map +1 -1
  524. package/dist/visitor/validator.visitor.js +275 -178
  525. package/dist/waterline-models/AttachmentMetadata.d.ts +22 -0
  526. package/dist/waterline-models/AttachmentMetadata.d.ts.map +1 -1
  527. package/dist/waterline-models/AttachmentMetadata.js +147 -3
  528. package/dist/waterline-models/BrandingConfig.d.ts +7 -0
  529. package/dist/waterline-models/BrandingConfig.d.ts.map +1 -1
  530. package/dist/waterline-models/BrandingConfig.js +16 -1
  531. package/dist/waterline-models/BrandingConfigHistory.d.ts +11 -2
  532. package/dist/waterline-models/BrandingConfigHistory.d.ts.map +1 -1
  533. package/dist/waterline-models/BrandingConfigHistory.js +21 -1
  534. package/dist/waterline-models/DashboardConfiguration.d.ts +29 -0
  535. package/dist/waterline-models/DashboardConfiguration.d.ts.map +1 -0
  536. package/dist/waterline-models/DashboardConfiguration.js +52 -0
  537. package/dist/waterline-models/RecordType.d.ts +9 -0
  538. package/dist/waterline-models/RecordType.d.ts.map +1 -1
  539. package/dist/waterline-models/RecordType.js +16 -1
  540. package/dist/waterline-models/User.d.ts.map +1 -1
  541. package/dist/waterline-models/User.js +10 -15
  542. package/dist/waterline-models/index.d.ts +2 -0
  543. package/dist/waterline-models/index.d.ts.map +1 -1
  544. package/dist/waterline-models/index.js +4 -1
  545. package/package.json +59 -45
  546. package/dist/config/datapubs.config.d.ts +0 -72
  547. package/dist/config/datapubs.config.d.ts.map +0 -1
  548. package/dist/config/datapubs.config.js +0 -74
@@ -1,556 +1,217 @@
1
1
  "use strict";
2
- // Copyright (c) 2023 Queensland Cyber Infrastructure Foundation (http://www.qcif.edu.au/)
3
- //
4
- // GNU GENERAL PUBLIC LICENSE
5
- // Version 2, June 1991
6
- //
7
- // This program is free software; you can redistribute it and/or modify
8
- // it under the terms of the GNU General Public License as published by
9
- // the Free Software Foundation; either version 2 of the License, or
10
- // (at your option) any later version.
11
- //
12
- // This program is distributed in the hope that it will be useful,
13
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
- // GNU General Public License for more details.
16
- //
17
- // You should have received a copy of the GNU General Public License along
18
- // with this program; if not, write to the Free Software Foundation, Inc.,
19
- // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20
- var __importDefault = (this && this.__importDefault) || function (mod) {
21
- return (mod && mod.__esModule) ? mod : { "default": mod };
22
- };
23
2
  Object.defineProperty(exports, "__esModule", { value: true });
24
3
  exports.Services = void 0;
4
+ /* oxlint-disable typescript/no-explicit-any */
5
+ const effect_1 = require("effect");
25
6
  const CoreService_1 = require("../CoreService");
26
7
  const RBValidationError_1 = require("../model/RBValidationError");
27
- const momentShim_1 = require("../shims/momentShim");
28
- const raido_openapi_generated_node_1 = require("@researchdatabox/raido-openapi-generated-node");
29
- const numeral_1 = __importDefault(require("numeral"));
30
- const axios_1 = __importDefault(require("axios"));
8
+ const mapping_1 = require("./raid-v2/mapping");
9
+ const http_1 = require("./raid-v2/http");
10
+ const audit_1 = require("./raid-v2/audit");
11
+ const logger_1 = require("./raid-v2/logger");
12
+ const runtime_1 = require("./raid-v2/runtime");
13
+ const tags_1 = require("./raid-v2/tags");
14
+ const errors_1 = require("./raid-v2/errors");
31
15
  var Services;
32
16
  (function (Services) {
33
- /**
34
- * Uses `@researchdatabox/raido-openapi-generated-node` to interact with ARDC's RAID API.
35
- *
36
- * Author: <a href='https://github.com/shilob' target='_blank'>Shilo Banihit</a>
37
- *
38
- */
39
- class Raid extends CoreService_1.Services.Core.Service {
40
- _exportedMethods = [
41
- 'mintTrigger',
42
- 'getContributors',
43
- 'buildContribVal',
44
- 'mintPostCreateRetryHandler',
45
- 'mintRetryJob'
46
- ];
47
- oauthTokenData = {
48
- accessTokenExpiryMillis: null,
49
- accessToken: null,
50
- responseData: null
17
+ function getPath(value, path) {
18
+ return path.replace(/\[(\d+)\]/g, '.$1').split('.').filter(Boolean).reduce((cur, key) => cur != null && typeof cur === 'object' ? cur[key] : undefined, value);
19
+ }
20
+ function legacyPathToJsonata(path) {
21
+ const parts = _.toPath(path);
22
+ const expression = parts.map((part, index) => {
23
+ if (/^\d+$/.test(part))
24
+ return `[${part}]`;
25
+ const segment = /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(part)
26
+ ? part
27
+ : `"${part.replaceAll('\\', '\\\\').replaceAll('"', '\\"')}"`;
28
+ return index === 0 ? segment : `.${segment}`;
29
+ }).join('');
30
+ return /^(record|options|mappedData|types)(\.|\[|$)/.test(expression) ? expression : `record.${expression}`;
31
+ }
32
+ function normalizeLegacyMapping(mapping) {
33
+ return Object.fromEntries(Object.entries(mapping ?? {}).map(([profile, rawFields]) => [
34
+ profile,
35
+ Object.fromEntries(Object.entries(rawFields).map(([name, rawField]) => {
36
+ const field = rawField;
37
+ if (field.engine || typeof field.src !== 'string')
38
+ return [name, field];
39
+ const normalized = {
40
+ ...field,
41
+ engine: 'jsonata',
42
+ expression: legacyPathToJsonata(field.src),
43
+ parseJson: undefined,
44
+ src: undefined,
45
+ };
46
+ return [name, normalized];
47
+ })),
48
+ ]));
49
+ }
50
+ function legacyConfigToPublishing(raw) {
51
+ return {
52
+ enabled: raw.enabled !== false,
53
+ connection: {
54
+ baseUrl: String(raw.basePath ?? ''), token: String(raw.token ?? ''), timeoutMs: Number(raw.timeoutMs ?? 30000),
55
+ oauth: { url: String(raw.oauth?.url ?? ''), clientId: String(raw.oauth?.client_id ?? raw.oauth?.clientId ?? ''), username: String(raw.oauth?.username ?? ''), password: String(raw.oauth?.password ?? ''), timeoutMs: Number(raw.oauth?.timeoutMs ?? 10000), expirySkewMs: Number(raw.oauth?.expirySkewMs ?? 30000) },
56
+ retry: { maxAttempts: Number(raw.retry?.maxAttempts ?? 3), baseDelayMs: Number(raw.retry?.baseDelayMs ?? 500), maxDelayMs: Number(raw.retry?.maxDelayMs ?? 10000), jitter: raw.retry?.jitter !== false, retryOnStatusCodes: raw.retry?.retryOnStatusCodes ?? [408, 425, 429, 500, 502, 503, 504] }
57
+ },
58
+ durableRetry: { jobName: String(raw.retryJobName ?? 'RaidMintRetryJob'), schedule: String(raw.retryJobSchedule ?? 'in 5 minutes'), maxAttempts: Number(raw.retryJobMaxAttempts ?? 5) },
59
+ saveBodyInMeta: raw.saveBodyInMeta !== false, raidFieldName: String(raw.raidFieldName ?? 'raidUrl'), orcidBaseUrl: String(raw.orcidBaseUrl ?? 'https://orcid.org/'),
60
+ types: raw.types ?? {}, mapping: normalizeLegacyMapping(raw.mapping ?? {})
51
61
  };
52
- constructor() {
53
- super();
54
- this.logHeader = "RaidService::";
55
- }
56
- async mintTrigger(oid, record, options) {
57
- if (this.metTriggerCondition(oid, record, options) === "true") {
58
- await this.mintRaid(oid, record, options);
62
+ }
63
+ class Raid extends CoreService_1.Services.Core.Service {
64
+ _exportedMethods = ['mintTrigger', 'getContributors', 'buildContribVal', 'mintPostCreateRetryHandler', 'mintRetryJob'];
65
+ constructor() { super(); this.logHeader = 'RaidService::'; }
66
+ initiatingActor(user) {
67
+ if (!user || typeof user !== 'object' || Array.isArray(user))
68
+ return undefined;
69
+ const userRecord = user;
70
+ const username = typeof userRecord.username === 'string' ? userRecord.username.trim() : '';
71
+ if (!username)
72
+ return undefined;
73
+ const rawRoles = Array.isArray(userRecord.roles) ? userRecord.roles : [];
74
+ const roles = rawRoles.flatMap(role => {
75
+ if (typeof role === 'string') {
76
+ const name = role.trim();
77
+ return name ? [{ name }] : [];
78
+ }
79
+ if (!role || typeof role !== 'object' || Array.isArray(role))
80
+ return [];
81
+ const roleRecord = role;
82
+ const id = typeof roleRecord.id === 'string' ? roleRecord.id.trim() : '';
83
+ const name = typeof roleRecord.name === 'string' ? roleRecord.name.trim() : '';
84
+ return id || name ? [{ ...(id ? { id } : {}), ...(name ? { name } : {}) }] : [];
85
+ });
86
+ return { username, roles };
87
+ }
88
+ resolveBrand(record) {
89
+ const brandId = String(getPath(record, 'metaMetadata.brandId') ?? '');
90
+ if (!brandId)
91
+ throw new RBValidationError_1.RBValidationError({ message: 'Brand id not found for RAiD record', displayErrors: [{ code: 'raid-mint-transform-validation-error' }] });
92
+ const brand = BrandingService.getBrandById(brandId) ?? BrandingService.getBrand(brandId);
93
+ if (!brand)
94
+ throw new RBValidationError_1.RBValidationError({ message: `Unknown brand '${brandId}' for RAiD record`, displayErrors: [{ code: 'raid-mint-transform-validation-error' }] });
95
+ return { id: String(brand.id), name: String(brand.name) };
96
+ }
97
+ resolveConfig(record) {
98
+ const brand = this.resolveBrand(record);
99
+ const branded = AppConfigService?.getAppConfigurationForBrand?.(brand.name)?.raidPublishing;
100
+ const config = branded ?? legacyConfigToPublishing(sails.config.raid);
101
+ if (!config?.connection?.baseUrl)
102
+ throw new RBValidationError_1.RBValidationError({ message: `RAiD base URL is not configured for brand '${brand.name}'`, displayErrors: [{ code: 'raid-mint-transform-validation-error' }] });
103
+ if (config.connection.retry.maxAttempts < 1 || config.connection.timeoutMs < 1)
104
+ throw new RBValidationError_1.RBValidationError({ message: `Invalid RAiD retry/timeout configuration for brand '${brand.name}'`, displayErrors: [{ code: 'raid-mint-transform-validation-error' }] });
105
+ for (const [profile, fields] of Object.entries(config.mapping))
106
+ for (const [name, field] of Object.entries(fields)) {
107
+ if ((field.expression ?? field.template ?? '').includes('<%'))
108
+ throw new RBValidationError_1.RBValidationError({ message: `Legacy lodash syntax is not supported in RAiD mapping '${profile}.${name}'`, displayErrors: [{ code: 'raid-mint-transform-validation-error' }] });
109
+ }
110
+ return { brand, config };
111
+ }
112
+ buildLayer(input) {
113
+ const base = effect_1.Layer.merge(effect_1.Layer.succeed(tags_1.RaidConfigTag, input.config), effect_1.Layer.succeed(tags_1.RaidRunContextTag, input.context));
114
+ const records = effect_1.Layer.succeed(tags_1.RaidRecordRepositoryTag, {
115
+ getMeta: (oid) => effect_1.Effect.tryPromise({ try: () => RecordsService.getMeta(oid), catch: cause => new errors_1.RaidSourceRecordError({ message: `Failed to load record '${oid}'`, cause }) }),
116
+ appendToRecord: (oid, value, path) => effect_1.Effect.tryPromise({ try: async () => {
117
+ const result = await RecordsService.appendToRecord(oid, value, path, undefined, undefined, input.context.initiatingActor);
118
+ if (!result?.isSuccessful?.())
119
+ throw new Error(String(result?.message ?? 'append failed'));
120
+ }, catch: cause => cause })
121
+ });
122
+ const queue = effect_1.Layer.succeed(tags_1.RaidQueueTag, {
123
+ schedule: (data) => effect_1.Effect.tryPromise({
124
+ try: async () => { await AgendaQueueService.schedule(input.config.durableRetry.jobName, input.config.durableRetry.schedule, data); },
125
+ catch: cause => new errors_1.RaidQueueError({ message: 'Failed to schedule RAiD retry', cause })
126
+ })
127
+ });
128
+ const servicesLayer = effect_1.Layer.mergeAll((0, mapping_1.makeMappingLayer)(), (0, http_1.makeHttpLayer)(), (0, audit_1.makeAuditLayer)(typeof IntegrationAuditService !== 'undefined' ? IntegrationAuditService : undefined)).pipe(effect_1.Layer.provide(base));
129
+ return effect_1.Layer.mergeAll(base, records, queue, servicesLayer, (0, logger_1.makeLoggerLayer)(sails.log));
130
+ }
131
+ async mintRaid(oid, record, options, attemptCount = 0, initiatingUser = {}) {
132
+ const { brand, config } = this.resolveConfig(record);
133
+ if (!config.enabled)
134
+ return record;
135
+ const initiatingActor = this.initiatingActor(initiatingUser);
136
+ const input = {
137
+ record,
138
+ options,
139
+ config,
140
+ context: {
141
+ oid,
142
+ brandId: brand.id,
143
+ brandName: brand.name,
144
+ triggerSource: String(options.triggerSource ?? 'mintTrigger'),
145
+ attemptCount,
146
+ ...(initiatingActor ? { initiatingActor } : {}),
147
+ },
148
+ };
149
+ const program = (0, runtime_1.mintRaidProgram)(input).pipe(effect_1.Effect.provide(this.buildLayer(input)));
150
+ try {
151
+ return await (0, runtime_1.runRaidProgram)(program, options.signal);
152
+ }
153
+ catch (error) {
154
+ const status = typeof error === 'object' && error !== null && 'statusCode' in error ? String(error.statusCode ?? '') : '';
155
+ throw new RBValidationError_1.RBValidationError({ message: error instanceof Error ? error.message : String(error), options: { cause: error }, displayErrors: [{ code: error != null && typeof error === 'object' && String(error._tag).includes('Mapping') ? 'raid-mint-transform-validation-error' : 'raid-mint-server-error', status }] });
59
156
  }
60
- else {
61
- sails.log.debug(`${this.logHeader} mintTrigger()-> RAiD URL already minted.`);
157
+ }
158
+ async mintTrigger(oid, record, options, user = {}) {
159
+ if (this.metTriggerCondition(oid, record, options) === 'true') {
160
+ await this.mintRaid(oid, record, options, 0, user);
62
161
  }
63
162
  return record;
64
163
  }
65
- /**
66
- * Light AgendaQueue wrapper for the main mint method.
67
- */
68
164
  async mintRetryJob(job) {
69
165
  const data = job.attrs.data;
70
166
  const record = await RecordsService.getMeta(data.oid);
71
- const attemptCount = data.attemptCount ?? 0;
72
- const options = data.options ?? {};
73
- await this.mintRaid(data.oid, record, options, attemptCount);
74
- }
75
- /**
76
- * Light retry handler for preSave onCreate failures, when OID is still unknown.
77
- *
78
- * @param oid
79
- * @param record
80
- * @param options
81
- */
82
- async mintPostCreateRetryHandler(oid, record, _options) {
83
- const attemptCount = Number(_.get(record, 'metaMetadata.raid.attemptCount', 0));
84
- if (!_.isEmpty(oid) && attemptCount > 0) {
85
- sails.log.verbose(`${this.logHeader} mintPostCreateRetryHandler() -> Scheduled for ${oid} `);
86
- const raidOptions = _.get(record, 'metaMetadata.raid.options', {});
87
- this.scheduleMintRetry({ oid: oid, options: raidOptions, attemptCount: attemptCount });
88
- }
89
- }
90
- /**
91
- * Returns `sails.config.raid.token`
92
- *
93
- * If not set, retrieves an access token using `sails.config.raid.username` and `sails.config.raid.password`
94
- *
95
- * Access tokens have 24 hour validity
96
- *
97
- * @returns access token
98
- */
99
- async getToken() {
100
- if (!_.isEmpty(_.trim(sails.config.raid.token))) {
101
- sails.log.verbose(`${this.logHeader} getToken() -> Using 'sails.config.raid.token'`);
102
- return sails.config.raid.token;
103
- }
104
- const now = Date.now();
105
- if (this.oauthTokenData.accessTokenExpiryMillis && now < this.oauthTokenData.accessTokenExpiryMillis) {
106
- sails.log.verbose(`${this.logHeader} getToken() -> Using cached accessToken`);
107
- return this.oauthTokenData.accessToken;
108
- }
109
- const oauthUrl = sails.config.raid.oauth.url;
110
- const oauthClientId = sails.config.raid.oauth.client_id;
111
- const username = sails.config.raid.oauth.username;
112
- const password = sails.config.raid.oauth.password;
113
- // FYI: as of 03 October 2024, the staging environment's `refresh_expires_in` has the same value as `expires_in` rendering it useless
114
- if (_.isEmpty(username) || _.isEmpty(password)) {
115
- throw new RBValidationError_1.RBValidationError({
116
- message: "Username and/or Password not configured",
117
- displayErrors: [{ code: 'raid-mint-transform-validation-error' }],
118
- });
119
- }
120
- try {
121
- sails.log.verbose(`${this.logHeader} getToken() -> Getting new access token...`);
122
- const oauthConfig = {
123
- url: oauthUrl,
124
- grant_type: 'password',
125
- username: username,
126
- password: password,
127
- client_id: oauthClientId
128
- };
129
- const auth1 = await this.fetchAuthToken(oauthConfig);
130
- sails.log.verbose(`${this.logHeader} getToken() -> Got new token!`);
131
- if (auth1) {
132
- this.oauthTokenData.responseData = auth1;
133
- this.oauthTokenData.accessTokenExpiryMillis = Date.now() + ((auth1.expires_in ?? 0) * 1000);
134
- this.oauthTokenData.accessToken = auth1.access_token ?? null;
135
- }
136
- }
137
- catch (err) {
138
- throw new RBValidationError_1.RBValidationError({
139
- message: "Failed to get token",
140
- options: { cause: err },
141
- displayErrors: [{ code: 'raid-mint-transform-validation-error' }],
142
- });
143
- }
144
- return this.oauthTokenData.accessToken;
145
- }
146
- async fetchAuthToken(oauthConfig) {
147
- try {
148
- const params = new URLSearchParams({
149
- 'grant_type': String(oauthConfig.grantType ?? oauthConfig.grant_type ?? ''),
150
- 'client_id': String(oauthConfig.clientId ?? oauthConfig.client_id ?? ''),
151
- 'username': String(oauthConfig.username ?? ''),
152
- 'password': String(oauthConfig.password ?? '')
153
- });
154
- const response = await axios_1.default.post(oauthConfig.url, params, {
155
- headers: {
156
- 'Content-Type': 'application/x-www-form-urlencoded'
157
- }
158
- });
159
- const tokenData = response.data;
160
- return tokenData;
161
- }
162
- catch (error) {
163
- throw new RBValidationError_1.RBValidationError({
164
- message: "Error fetching the token",
165
- options: { cause: error },
166
- displayErrors: [{ code: 'raid-mint-server-error' }],
167
- });
168
- }
169
- }
170
- async mintRaid(oid, record, options, attemptCount = 0) {
171
- const basePath = sails.config.raid.basePath;
172
- const apiToken = await this.getToken();
173
- const configuration = new raido_openapi_generated_node_1.Configuration({
174
- basePath: basePath,
175
- accessToken: apiToken || undefined
176
- });
177
- const api = new raido_openapi_generated_node_1.RaidApi(configuration);
178
- const request = {};
179
- try {
180
- let srcRecord = record;
181
- const srcRecField = String(_.get(options, 'request.sourceOidField', ''));
182
- if (!_.isEmpty(srcRecField)) {
183
- let srcRecVal = null;
184
- const srcRecOid = String(_.get(record, srcRecField, ''));
185
- if (!_.isEmpty(srcRecOid)) {
186
- srcRecVal = await RecordsService.getMeta(srcRecOid);
187
- if (!_.isEmpty(srcRecVal)) {
188
- srcRecord = srcRecVal;
189
- // process any overrides to the source record
190
- const recordOverrides = _.get(options, 'request.recordOverrides', []);
191
- if (!_.isEmpty(recordOverrides) && _.isArray(recordOverrides)) {
192
- for (const recOverride of recordOverrides) {
193
- const fieldPath = String(recOverride.field ?? '');
194
- const valuePath = String(recOverride.value ?? '');
195
- if (!_.isEmpty(fieldPath) && !_.isEmpty(valuePath)) {
196
- _.set(srcRecord, fieldPath, _.get(record, valuePath));
197
- }
198
- }
199
- }
200
- }
201
- }
202
- if (_.isEmpty(srcRecVal)) {
203
- throw new RBValidationError_1.RBValidationError({
204
- message: `Failed to retrieve the source record: ${srcRecOid}, using path: ${srcRecField}, please check your recordtype configuration.`,
205
- displayErrors: [{ code: 'raid-mint-transform-validation-error' }],
206
- });
207
- }
208
- }
209
- let mintRequestFields = _.get(options, 'request.mint.fields');
210
- if (_.isString(mintRequestFields)) {
211
- // allows to DRYer config
212
- mintRequestFields = _.get(sails.config, mintRequestFields);
213
- }
214
- const mappedData = this.getMappedData(srcRecord, mintRequestFields ?? {}, options);
215
- request.title = _.get(mappedData, 'title');
216
- request.date = _.get(mappedData, 'date');
217
- request.description = _.get(mappedData, 'description');
218
- request.access = _.get(mappedData, 'access');
219
- request.alternateUrl = _.get(mappedData, 'alternateUrl');
220
- request.contributor = _.get(mappedData, 'contributor');
221
- request.organisation = _.get(mappedData, 'organisation');
222
- request.subject = _.get(mappedData, 'subject');
223
- }
224
- catch (error) {
225
- throw new RBValidationError_1.RBValidationError({
226
- options: { cause: error },
227
- displayErrors: [{ code: 'raid-mint-transform-validation-error' }],
167
+ await this.mintRaid(data.oid, record, { ...(data.options ?? {}), triggerSource: 'mintRetryJob' }, data.attemptCount ?? 0, data.initiatingActor);
168
+ }
169
+ async mintPostCreateRetryHandler(oid, record, _options, user = {}) {
170
+ const attemptCount = Number(getPath(record, 'metaMetadata.raid.attemptCount') ?? 0);
171
+ if (oid && attemptCount > 0) {
172
+ const options = (getPath(record, 'metaMetadata.raid.options') ?? {});
173
+ const config = getPath(record, 'metaMetadata.brandId')
174
+ ? this.resolveConfig(record).config
175
+ : legacyConfigToPublishing(sails.config.raid);
176
+ const initiatingActor = this.initiatingActor(user);
177
+ await AgendaQueueService.schedule(config.durableRetry.jobName, config.durableRetry.schedule, {
178
+ oid,
179
+ options,
180
+ attemptCount,
181
+ ...(initiatingActor ? { initiatingActor } : {}),
228
182
  });
229
183
  }
230
- let raid = undefined;
231
- let metaMetadataInfo = undefined;
232
- let responseStatus = undefined;
233
- let responseBody = undefined;
234
- try {
235
- sails.log.verbose(`${this.logHeader} mintRaid() ${oid} -> Sending data::`);
236
- sails.log.verbose(JSON.stringify(request));
237
- const axiosResponse = await api.mintRaid(request);
238
- _.set(axiosResponse, 'config.headers.Authorization', '-redacted-');
239
- responseStatus = axiosResponse.status;
240
- responseBody = axiosResponse.data;
241
- sails.log.verbose(JSON.stringify(responseStatus));
242
- sails.log.verbose(`${this.logHeader} mintRaid() ${oid} -> Body::`);
243
- sails.log.verbose(JSON.stringify(responseBody));
244
- if (responseStatus == 201) {
245
- raid = _.get(responseBody, 'identifier');
246
- if (sails.config.raid.saveBodyInMeta) {
247
- metaMetadataInfo = responseBody;
248
- }
249
- }
250
- else {
251
- // Note: if there's any 'notSet' validation errors, these will have to be hashed out during development,
252
- // with the specific fields set to 'required' and not treat these as runtime errors
253
- throw new RBValidationError_1.RBValidationError({
254
- message: `Failed to mint RAiD for oid ${oid} statusCode ${responseStatus} body ${JSON.stringify(responseBody)}`,
255
- displayErrors: [{ code: 'raid-mint-server-error', status: String(responseStatus ?? '') }],
256
- });
257
- }
258
- }
259
- catch (error) {
260
- const errObj = error;
261
- _.set(errObj, 'response.request.headers.Authorization', '-redacted-');
262
- const statusCode = _.get(errObj, 'statusCode');
263
- const msgs = [];
264
- if (statusCode == 401 || statusCode == 403 || statusCode == 400) {
265
- msgs.push(`Authentication failed for oid ${oid}, check if the auth token is properly configured.`);
266
- if (statusCode == 400) {
267
- msgs.push(`Possible validation issues for oid ${oid}!`);
268
- }
269
- throw new RBValidationError_1.RBValidationError({
270
- message: msgs.join(' '),
271
- options: { cause: error },
272
- displayErrors: [{ code: 'raid-mint-server-error', status: String(statusCode ?? ''), meta: { oid } }],
273
- });
274
- }
275
- // This is the generic handler for when the API call itself throws an exception, e.g. 404, 5xx status code that can possibly be resolved by retrying the request
276
- sails.log.error(`${this.logHeader} mintRaid() ${oid} -> API error, Status Code: '${errObj.statusCode}'`);
277
- sails.log.error(`${this.logHeader} mintRaid() ${oid} -> Error: ${JSON.stringify(errObj)}`);
278
- // set response as the error so it can be saved in the retry block
279
- responseStatus = statusCode;
280
- // saving as much info by setting the body to either the actual return value or the entire error object
281
- responseBody = !_.isEmpty(errObj.body) ? errObj.body : JSON.stringify(errObj);
282
- // swallow as this will be handled after this block
283
- }
284
- if (!_.isEmpty(raid)) {
285
- await this.saveRaid(raid, record, options, metaMetadataInfo);
286
- }
287
- else {
288
- sails.log.error(`${this.logHeader} mintRaid() ${oid} -> Failed to mint raid!`);
289
- if (!_.isEmpty(sails.config.raid.retryJobName)) {
290
- // a generic/comms error, so we put this in the queue so we can retry later
291
- attemptCount++;
292
- if (attemptCount <= sails.config.raid.retryJobMaxAttempts) {
293
- // set the flag for post-save processor to add the job
294
- _.set(record, 'metaMetadata.raid.attemptCount', attemptCount);
295
- _.set(record, 'metaMetadata.raid.options', options);
296
- _.set(record, 'metaMetadata.raid.attemptResponse', { statusCode: responseStatus, body: responseBody });
297
- if (!_.isEmpty(oid)) {
298
- // same as above but directly schedule as we know the oid
299
- this.scheduleMintRetry({ oid: oid, options: options, attemptCount: attemptCount });
300
- }
301
- // we let the process proceed so the record is saved
302
- }
303
- else {
304
- sails.log.error(`${this.logHeader} mintRaid() -> Max retry attempts reached, giving up: ${oid}`);
305
- }
306
- }
307
- else {
308
- sails.log.debug(`${this.logHeader} mintRaid() -> Retries not configured, please set 'sails.config.raid.retryJobName'`);
309
- // we fail fast if retries aren't supported
310
- throw new RBValidationError_1.RBValidationError({
311
- message: "Retries not configured, please set 'sails.config.raid.retryJobName'",
312
- displayErrors: [{ code: 'raid-mint-server-error' }],
313
- });
314
- }
315
- }
316
- return record;
317
- }
318
- scheduleMintRetry(data) {
319
- AgendaQueueService.schedule(sails.config.raid.retryJobName, sails.config.raid.retryJobSchedule, data);
320
184
  }
321
185
  getContributors(record, options, fieldConfig, mappedData) {
322
- // start with a map to simplify uniqueness guarantees
323
- const contributors = {};
324
- const contributorMapConfig = _.get(fieldConfig, 'contributorMap', {});
325
- const startDate = String(_.get(mappedData, 'date.startDate', ''));
326
- const endDateRaw = _.get(mappedData, 'date.endDate', '');
327
- const endDate = !_.isEmpty(endDateRaw) ? String(endDateRaw) : undefined;
328
- for (const fieldName in contributorMapConfig) {
329
- const contribVal = _.get(record, `metadata.${fieldName}`);
330
- const contribConfig = contributorMapConfig[fieldName];
331
- if (Array.isArray(contribVal)) {
332
- for (const entry of contribVal) {
333
- this.buildContribVal(contributors, entry, contribConfig, startDate, endDate);
334
- }
335
- }
336
- else {
337
- this.buildContribVal(contributors, contribVal, contribConfig, startDate, endDate);
338
- }
339
- }
340
- // convert to array for the API
341
- return _.map(contributors, (val) => { return val; });
186
+ const config = legacyConfigToPublishing(sails.config.raid);
187
+ return (0, mapping_1.buildContributors)(record, fieldConfig, mappedData ?? {}, config);
342
188
  }
343
189
  buildContribVal(contributors, contribVal, contribConfig, startDate, endDate) {
344
- if (!contribVal || typeof contribVal !== 'object') {
345
- return;
346
- }
347
- if (_.isEmpty(_.get(contribVal, 'text_full_name'))) {
348
- sails.log.verbose(`${this.logHeader} buildContribVal() -> Ignoring blank record.`);
349
- return;
350
- }
351
- const id = this.getContributorId(contribVal, contribConfig);
352
- if (!_.isEmpty(id)) {
353
- if (_.isUndefined(contributors[id])) {
354
- // this the first entry to the map, successive updates will only be appending the incoming position & role
355
- const positionType = String(_.get(contribConfig, 'position', ''));
356
- const roleType = String(_.get(contribConfig, 'role', ''));
357
- const contrib = {
358
- id: id,
359
- schemaUri: sails.config.raid.orcidBaseUrl,
360
- position: [
361
- this.getContributorPosition(positionType, startDate, endDate)
362
- ],
363
- role: [
364
- this.getContributorRole(roleType)
365
- ]
366
- };
367
- this.setContributorFlags(contrib, contribConfig);
368
- contributors[id] = contrib;
369
- }
370
- else {
371
- const positionType = String(_.get(contribConfig, 'position', ''));
372
- const roleType = String(_.get(contribConfig, 'role', ''));
373
- const position = this.getContributorPosition(positionType, startDate, endDate);
374
- const existingContributor = contributors[id];
375
- if (!_.find(existingContributor.position, { id: position.id })) {
376
- // as per https://metadata.raid.org/en/latest/core/contributors.html#contributor-position
377
- // contributors can only have one position for a certain time (unsupported by RB) period so only use the 'highest'
378
- const curPosIdx = _.findIndex(sails.config.raid.types.contributor.hiearchy.position, (lbl) => { return lbl == positionType; });
379
- const existPosLabel = _.findKey(sails.config.raid.types.contributor.position, { id: existingContributor.position?.[0]?.id });
380
- const existPosIdx = _.findIndex(sails.config.raid.types.contributor.hiearchy.position, (lbl) => { return lbl == existPosLabel; });
381
- if (curPosIdx < existPosIdx) {
382
- // the current position is higher, overwrite existing
383
- if (existingContributor.position) {
384
- existingContributor.position[0] = position;
385
- }
386
- }
387
- // if the incoming incoming position is the same or lower hiearchy, ignore...
388
- }
389
- const role = this.getContributorRole(roleType);
390
- if (!_.find(existingContributor.role, { id: role.id })) {
391
- if (existingContributor.role) {
392
- existingContributor.role.push(role);
393
- }
394
- }
395
- this.setContributorFlags(existingContributor, contribConfig);
396
- }
397
- }
398
- else {
399
- sails.log.verbose(`${this.logHeader} buildContribVal() -> Missing/invalid identifier for: ${JSON.stringify(contribVal)}`);
400
- // we ignore records that don't have a valid ORCID, otherwise we reject the RAiD creation
401
- if (_.get(contribConfig, 'requireOrcid', false) == true) {
402
- // reject mint as we have a missing ORCID
403
- throw new RBValidationError_1.RBValidationError({
404
- message: `Missing ORCID and requireOrcid is true for ${JSON.stringify(contribVal)}`,
405
- displayErrors: [{ code: 'raid-mint-transform-missing-contributorid-error', meta: { fullName: _.get(contribVal, 'text_full_name') } }],
406
- });
407
- }
408
- }
409
- }
410
- setContributorFlags(contrib, contribConfig) {
411
- // setting the required flags: https://metadata.raid.org/en/latest/core/contributors.html
412
- const configFlags = sails.config.raid.types.contributor.flags;
413
- for (const configFlagName in configFlags) {
414
- if (_.includes(configFlags[configFlagName], contribConfig.position)) {
415
- _.set(contrib, configFlagName, true);
416
- }
417
- }
418
- }
419
- /**
420
- * As per https://support.orcid.org/hc/en-us/articles/360006897674-Structure-of-the-ORCID-Identifier
421
- *
422
- * orcid must be a 0-9,X
423
- *
424
- * @param contribVal
425
- * @param contribConfig
426
- * @returns
427
- */
428
- getContributorId(contribVal, contribConfig) {
429
- const idField = String(_.get(contribConfig, 'fieldMap.id', ''));
430
- const rawId = idField ? _.get(contribVal, idField) : '';
431
- const rawIdStr = String(rawId ?? '');
432
- const strippedId = _.replace(rawIdStr, sails.config.raid.orcidBaseUrl, '');
433
- const regex = /(\d{4}-){3}\d{3}(\d|X)/;
434
- if (_.isEmpty(strippedId) || _.size(strippedId) !== 19 || regex.test(strippedId) === false) {
435
- return '';
436
- }
437
- // ID now should be the full ORCID Url
438
- let id = rawIdStr;
439
- if (!_.startsWith(id, sails.config.raid.orcidBaseUrl)) {
440
- id = `${sails.config.raid.orcidBaseUrl}${id}`;
441
- }
442
- return id;
443
- }
444
- getContributorPosition(type, startDate, endDate) {
445
- return {
446
- schemaUri: sails.config.raid.types.contributor.position[type].schemaUri,
447
- id: sails.config.raid.types.contributor.position[type].id,
448
- startDate: startDate,
449
- endDate: endDate
450
- }; // not currently matching to any generated class so returning as POJO
451
- }
452
- getContributorRole(type) {
453
- return {
454
- schemaUri: sails.config.raid.types.contributor.roles.schemaUri,
455
- id: `${sails.config.raid.types.contributor.roles.schemaUri}contributor-roles/${sails.config.raid.types.contributor.roles.types[type]}/`
456
- }; // not currently matching to any generated class so returning as POJO
457
- }
458
- getMappedData(record, fields, options) {
459
- const mappedData = {};
460
- for (const fieldName in fields) {
461
- try {
462
- const fieldConfig = _.get(fields, fieldName, {});
463
- const src = String(_.get(fieldConfig, 'src', ''));
464
- const dest = _.get(fieldConfig, 'dest');
465
- let data = undefined;
466
- if (src && src.indexOf('<%') != -1) {
467
- const that = this;
468
- const imports = _.extend({
469
- record: record,
470
- options: options,
471
- moment: momentShim_1.momentShim,
472
- numeral: numeral_1.default,
473
- mappedData: mappedData,
474
- fieldConfig: fieldConfig,
475
- types: sails.config.raid.types,
476
- that: that
477
- }, this);
478
- const templateData = {
479
- imports: imports
480
- };
481
- data = _.template(src, templateData)();
482
- if (_.get(fieldConfig, 'parseJson', false)) {
483
- data = JSON.parse(data);
484
- }
485
- }
486
- else {
487
- data = _.get(record, src);
488
- }
489
- const destPath = dest != null ? String(dest) : '';
490
- if (!_.isEmpty(destPath)) {
491
- _.set(mappedData, destPath, data);
492
- }
493
- else {
494
- sails.log.warn(`${this.logHeader} getMappedData() -> Destination field is empty for ${fieldName}, if there is a missing mapped value, check if the template/fn call is setting the destination value.`);
495
- }
496
- }
497
- catch (fieldErr) {
498
- throw new RBValidationError_1.RBValidationError({
499
- message: `Failed to process field: ${fieldName}`,
500
- options: { cause: fieldErr },
501
- displayErrors: [{ code: 'raid-mint-transform-validation-error' }],
502
- });
503
- }
504
- }
505
- return mappedData;
506
- }
507
- getSubject(record, options, fieldConfig, subjects = [], subjectType = '', subjectData) {
508
- if (_.isArray(subjectData) && !_.isEmpty(subjectData) && !_.isEmpty(subjectType)) {
509
- for (const subject of subjectData) {
510
- const notation = String(_.get(subject, 'notation', ''));
511
- const label = String(_.get(subject, 'label', ''));
512
- subjects.push({
513
- id: `${sails.config.raid.types.subject[subjectType].id}${notation}`,
514
- schemaUri: sails.config.raid.types.subject[subjectType].schemaUri,
515
- keyword: [
516
- {
517
- text: label
518
- }
519
- ]
520
- });
521
- }
522
- }
523
- else {
524
- sails.log.warn(`${this.logHeader} getSubject() -> Missing subject source data: ${String(_.get(fieldConfig, 'dest', ''))}`);
525
- }
190
+ const fakeRecord = { metadata: { contributor: contribVal } };
191
+ const config = legacyConfigToPublishing(sails.config.raid);
192
+ const built = (0, mapping_1.buildContributors)(fakeRecord, { dest: 'contributor', engine: 'jsonata', expression: '$contributors()', contributorMap: { contributor: contribConfig } }, { date: { startDate, endDate } }, config);
193
+ for (const item of built) {
194
+ const existing = contributors[item.id];
195
+ if (!existing) {
196
+ contributors[item.id] = item;
197
+ continue;
198
+ }
199
+ for (const key of ['role', 'position']) {
200
+ const current = Array.isArray(existing[key]) ? existing[key] : [];
201
+ const additions = Array.isArray(item[key]) ? item[key] : [];
202
+ existing[key] = [...current, ...additions.filter(addition => !current.some(value => value.id === addition.id))];
203
+ }
204
+ for (const [key, value] of Object.entries(item))
205
+ if (!(key in existing))
206
+ existing[key] = value;
207
+ }
208
+ }
209
+ getSubject(record, _options, _fieldConfig = {}, subjects = [], subjectType = '', subjectData) {
210
+ const config = legacyConfigToPublishing(sails.config.raid);
211
+ subjects.push(...(0, mapping_1.buildSubjects)(subjectData, subjectType, config));
526
212
  return subjects;
527
213
  }
528
- async saveRaid(raid, record, options, metaMetadataInfo) {
529
- // add raid to record, defaults to 'raidUrl'
530
- const raidFieldName = String(_.get(sails.config.raid, 'raidFieldName', 'raidUrl'));
531
- _.set(record, `metadata.${raidFieldName}`, raid.id);
532
- if (sails.config.raid.saveBodyInMeta) {
533
- // don't save the response object as it contains the auth token
534
- _.set(record, 'metaMetadata.raid.response', metaMetadataInfo);
535
- }
536
- const alsoSaveRaidToOid = _.get(options, 'request.alsoSaveRaidToOid', []);
537
- if (!_.isEmpty(alsoSaveRaidToOid)) {
538
- sails.log.verbose(`${this.logHeader} saveRaid() -> Configured to save to associated records, config: ${JSON.stringify(alsoSaveRaidToOid)}`);
539
- for (const saveOidConfig of alsoSaveRaidToOid) {
540
- const oidPath = String(saveOidConfig.oidPath ?? '');
541
- const raidPath = String(saveOidConfig.raidPath ?? '');
542
- const optOid = _.get(record, oidPath);
543
- if (!_.isEmpty(optOid)) {
544
- sails.log.verbose(`${this.logHeader} saveRaid() -> Saving to associated record: ${optOid}`);
545
- const updateResp = await RecordsService.appendToRecord(String(optOid), raid.id, raidPath);
546
- if (!updateResp.isSuccessful()) {
547
- sails.log.error(`${this.logHeader} saveRaid() -> Failed to save to record: ${optOid}, reason: ${updateResp.message}`);
548
- }
549
- }
550
- }
551
- }
552
- }
553
214
  }
554
215
  Services.Raid = Raid;
555
216
  })(Services || (exports.Services = Services = {}));
556
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFpZFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvUmFpZFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDBGQUEwRjtBQUMxRixFQUFFO0FBQ0YsNkJBQTZCO0FBQzdCLDBCQUEwQjtBQUMxQixFQUFFO0FBQ0YsdUVBQXVFO0FBQ3ZFLHVFQUF1RTtBQUN2RSxvRUFBb0U7QUFDcEUsc0NBQXNDO0FBQ3RDLEVBQUU7QUFDRixrRUFBa0U7QUFDbEUsaUVBQWlFO0FBQ2pFLGdFQUFnRTtBQUNoRSwrQ0FBK0M7QUFDL0MsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSwwRUFBMEU7QUFDMUUsOERBQThEOzs7Ozs7QUFFOUQsZ0RBQXNEO0FBQ3RELGtFQUErRDtBQUMvRCxvREFBMkQ7QUFDM0QsZ0dBV3VEO0FBRXZELHNEQUE4QjtBQUM5QixrREFBMEI7QUFLMUIsSUFBaUIsUUFBUSxDQXloQnhCO0FBemhCRCxXQUFpQixRQUFRO0lBTXZCOzs7OztPQUtHO0lBQ0gsTUFBYSxJQUFLLFNBQVEsc0JBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTztRQUMxQixnQkFBZ0IsR0FBYTtZQUM5QyxhQUFhO1lBQ2IsaUJBQWlCO1lBQ2pCLGlCQUFpQjtZQUNqQiw0QkFBNEI7WUFDNUIsY0FBYztTQUNmLENBQUM7UUFFUSxjQUFjLEdBSXBCO1lBQ0YsdUJBQXVCLEVBQUUsSUFBSTtZQUM3QixXQUFXLEVBQUUsSUFBSTtZQUNqQixZQUFZLEVBQUUsSUFBSTtTQUNuQixDQUFDO1FBRUY7WUFDRSxLQUFLLEVBQUUsQ0FBQztZQUNSLElBQUksQ0FBQyxTQUFTLEdBQUcsZUFBZSxDQUFDO1FBQ25DLENBQUM7UUFFTSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQVcsRUFBRSxNQUFrQixFQUFFLE9BQW9CO1lBQzVFLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxNQUFpQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLE1BQU0sRUFBRSxDQUFDO2dCQUN6RixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM1QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUywyQ0FBMkMsQ0FBQyxDQUFDO1lBQ2hGLENBQUM7WUFDRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBRUQ7O1VBRUU7UUFDSyxLQUFLLENBQUMsWUFBWSxDQUFDLEdBQWlCO1lBQ3pDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQzVCLE1BQU0sTUFBTSxHQUFHLE1BQU0sY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUM7WUFDNUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDbkMsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0Q7Ozs7OztXQU1HO1FBQ0ksS0FBSyxDQUFDLDBCQUEwQixDQUFDLEdBQVcsRUFBRSxNQUFrQixFQUFFLFFBQXFCO1lBQzVGLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hGLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxrREFBa0QsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDN0YsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsMkJBQTJCLEVBQUUsRUFBRSxDQUFnQixDQUFDO2dCQUNsRixJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDekYsQ0FBQztRQUNILENBQUM7UUFDRDs7Ozs7Ozs7V0FRRztRQUNLLEtBQUssQ0FBQyxRQUFRO1lBQ3BCLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNoRCxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLGdEQUFnRCxDQUFDLENBQUM7Z0JBQ3JGLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ2pDLENBQUM7WUFDRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdkIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLHVCQUF1QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQ3JHLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMseUNBQXlDLENBQUMsQ0FBQztnQkFDOUUsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQztZQUN6QyxDQUFDO1lBQ0QsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUM3QyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQ3hELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFDbEQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUNsRCxzSUFBc0k7WUFDdEksSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDL0MsTUFBTSxJQUFJLHFDQUFpQixDQUFDO29CQUMxQixPQUFPLEVBQUUseUNBQXlDO29CQUNsRCxhQUFhLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxzQ0FBc0MsRUFBRSxDQUFDO2lCQUNsRSxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsSUFBSSxDQUFDO2dCQUNILEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsNENBQTRDLENBQUMsQ0FBQztnQkFDakYsTUFBTSxXQUFXLEdBQUc7b0JBQ2xCLEdBQUcsRUFBRSxRQUFRO29CQUNiLFVBQVUsRUFBRSxVQUFVO29CQUN0QixRQUFRLEVBQUUsUUFBUTtvQkFDbEIsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLFNBQVMsRUFBRSxhQUFhO2lCQUN6QixDQUFDO2dCQUVGLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDckQsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUywrQkFBK0IsQ0FBQyxDQUFDO2dCQUNwRSxJQUFJLEtBQUssRUFBRSxDQUFDO29CQUNWLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztvQkFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7b0JBQzVGLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDO2dCQUMvRCxDQUFDO1lBQ0gsQ0FBQztZQUFDLE9BQU8sR0FBWSxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sSUFBSSxxQ0FBaUIsQ0FBQztvQkFDMUIsT0FBTyxFQUFFLHFCQUFxQjtvQkFDOUIsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtvQkFDdkIsYUFBYSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQztpQkFDbEUsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUM7UUFDekMsQ0FBQztRQUVPLEtBQUssQ0FBQyxjQUFjLENBQUMsV0FBa0o7WUFFN0ssSUFBSSxDQUFDO2dCQUNILE1BQU0sTUFBTSxHQUFHLElBQUksZUFBZSxDQUFDO29CQUNqQyxZQUFZLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLElBQUksV0FBVyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7b0JBQzNFLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsSUFBSSxXQUFXLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztvQkFDeEUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztvQkFDOUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztpQkFDL0MsQ0FBQyxDQUFDO2dCQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sZUFBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUMvQyxNQUFNLEVBQUU7b0JBQ1IsT0FBTyxFQUFFO3dCQUNQLGNBQWMsRUFBRSxtQ0FBbUM7cUJBQ3BEO2lCQUNGLENBQUMsQ0FBQztnQkFFSCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNoQyxPQUFPLFNBQVMsQ0FBQztZQUVuQixDQUFDO1lBQUMsT0FBTyxLQUFjLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxJQUFJLHFDQUFpQixDQUFDO29CQUMxQixPQUFPLEVBQUUsMEJBQTBCO29CQUNuQyxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO29CQUN6QixhQUFhLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSx3QkFBd0IsRUFBRSxDQUFDO2lCQUNwRCxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUVPLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBVyxFQUFFLE1BQWtCLEVBQUUsT0FBb0IsRUFBRSxlQUF1QixDQUFDO1lBQ3BHLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUM1QyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QyxNQUFNLGFBQWEsR0FBRyxJQUFJLDRDQUFhLENBQUM7Z0JBQ3RDLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixXQUFXLEVBQUUsUUFBUSxJQUFJLFNBQVM7YUFDbkMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxHQUFHLEdBQUcsSUFBSSxzQ0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3ZDLE1BQU0sT0FBTyxHQUFzQixFQUF1QixDQUFDO1lBQzNELElBQUksQ0FBQztnQkFDSCxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUM7Z0JBQ3ZCLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN6RSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO29CQUM1QixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7b0JBQ3JCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDekQsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQzt3QkFDMUIsU0FBUyxHQUFHLE1BQU0sY0FBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQzt3QkFDcEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQzs0QkFDMUIsU0FBUyxHQUFHLFNBQVMsQ0FBQzs0QkFDdEIsNkNBQTZDOzRCQUM3QyxNQUFNLGVBQWUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxFQUFFLENBQThDLENBQUM7NEJBQ25ILElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQ0FDOUQsS0FBSyxNQUFNLFdBQVcsSUFBSSxlQUFlLEVBQUUsQ0FBQztvQ0FDMUMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7b0NBQ2xELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO29DQUNsRCxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQzt3Q0FDbkQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUErQyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO29DQUM5RixDQUFDO2dDQUNILENBQUM7NEJBQ0gsQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUM7b0JBQ0QsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7d0JBQ3pCLE1BQU0sSUFBSSxxQ0FBaUIsQ0FBQzs0QkFDMUIsT0FBTyxFQUFFLHlDQUF5QyxTQUFTLGlCQUFpQixXQUFXLCtDQUErQzs0QkFDdEksYUFBYSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQzt5QkFDbEUsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxJQUFJLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFpRCxDQUFDO2dCQUM5RyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO29CQUNsQyx5QkFBeUI7b0JBQ3pCLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBNEIsQ0FBQztnQkFDeEYsQ0FBQztnQkFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ25GLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFZLENBQUM7Z0JBQ3RELE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFjLENBQUM7Z0JBQ3RELE9BQU8sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFrQixDQUFDO2dCQUN4RSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBVyxDQUFDO2dCQUN2RCxPQUFPLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBbUIsQ0FBQztnQkFDM0UsT0FBTyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQWtCLENBQUM7Z0JBQ3hFLE9BQU8sQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFtQixDQUFDO2dCQUMzRSxPQUFPLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBaUMsQ0FBQztZQUNqRixDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixNQUFNLElBQUkscUNBQWlCLENBQUM7b0JBQzFCLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7b0JBQ3pCLGFBQWEsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLHNDQUFzQyxFQUFFLENBQUM7aUJBQ2xFLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxJQUFJLElBQUksR0FBWSxTQUFTLENBQUM7WUFDOUIsSUFBSSxnQkFBZ0IsR0FBd0MsU0FBUyxDQUFDO1lBQ3RFLElBQUksY0FBYyxHQUF1QixTQUFTLENBQUM7WUFDbkQsSUFBSSxZQUFZLEdBQVksU0FBUyxDQUFDO1lBQ3RDLElBQUksQ0FBQztnQkFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUMzRSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLE1BQU0sYUFBYSxHQUFHLE1BQU0sR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbEQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsOEJBQThCLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ25FLGNBQWMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO2dCQUN0QyxZQUFZLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQztnQkFDbEMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUNsRCxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLGVBQWUsR0FBRyxZQUFZLENBQUMsQ0FBQztnQkFDbkUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLGNBQWMsSUFBSSxHQUFHLEVBQUUsQ0FBQztvQkFDMUIsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO29CQUN6QyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUNyQyxnQkFBZ0IsR0FBRyxZQUF1QyxDQUFDO29CQUM3RCxDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTix3R0FBd0c7b0JBQ3hHLG1GQUFtRjtvQkFDbkYsTUFBTSxJQUFJLHFDQUFpQixDQUFDO3dCQUMxQixPQUFPLEVBQUUsK0JBQStCLEdBQUcsZUFBZSxjQUFjLFNBQVMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRTt3QkFDL0csYUFBYSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztxQkFDMUYsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1lBQUMsT0FBTyxLQUFjLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxNQUFNLEdBQUcsS0FBZ0MsQ0FBQztnQkFDaEQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsd0NBQXdDLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ3RFLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBdUIsQ0FBQztnQkFDckUsTUFBTSxJQUFJLEdBQWEsRUFBRSxDQUFDO2dCQUMxQixJQUFJLFVBQVUsSUFBSSxHQUFHLElBQUksVUFBVSxJQUFJLEdBQUcsSUFBSSxVQUFVLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQ2hFLElBQUksQ0FBQyxJQUFJLENBQUMsaUNBQWlDLEdBQUcsbURBQW1ELENBQUMsQ0FBQztvQkFDbkcsSUFBSSxVQUFVLElBQUksR0FBRyxFQUFFLENBQUM7d0JBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsc0NBQXNDLEdBQUcsR0FBRyxDQUFDLENBQUM7b0JBQzFELENBQUM7b0JBQ0QsTUFBTSxJQUFJLHFDQUFpQixDQUFDO3dCQUMxQixPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7d0JBQ3ZCLE9BQU8sRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7d0JBQ3pCLGFBQWEsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7cUJBQ3JHLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELGdLQUFnSztnQkFDaEssS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxlQUFlLEdBQUcsZ0NBQWdDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO2dCQUN6RyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLGVBQWUsR0FBRyxjQUFjLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMzRixrRUFBa0U7Z0JBQ2xFLGNBQWMsR0FBRyxVQUFVLENBQUM7Z0JBQzVCLHVHQUF1RztnQkFDdkcsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBRSxNQUFrQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBRSxNQUFrQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDeEksbURBQW1EO1lBQ3JELENBQUM7WUFDRCxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNyQixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBdUIsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDbEYsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsZUFBZSxHQUFHLDBCQUEwQixDQUFDLENBQUM7Z0JBQy9FLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7b0JBQy9DLDJFQUEyRTtvQkFDM0UsWUFBWSxFQUFFLENBQUM7b0JBQ2YsSUFBSSxZQUFZLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQzt3QkFDMUQsc0RBQXNEO3dCQUN0RCxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQWlDLEVBQUUsZ0NBQWdDLEVBQUUsWUFBWSxDQUFDLENBQUM7d0JBQ3pGLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBaUMsRUFBRSwyQkFBMkIsRUFBRSxPQUFPLENBQUMsQ0FBQzt3QkFDL0UsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFpQyxFQUFFLG1DQUFtQyxFQUFFLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQTt3QkFDakksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQzs0QkFDcEIseURBQXlEOzRCQUN6RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7d0JBQ3JGLENBQUM7d0JBQ0Qsb0RBQW9EO29CQUN0RCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyx5REFBeUQsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDbkcsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxvRkFBb0YsQ0FBQyxDQUFBO29CQUN0SCwyQ0FBMkM7b0JBQzNDLE1BQU0sSUFBSSxxQ0FBaUIsQ0FBQzt3QkFDMUIsT0FBTyxFQUFFLHFFQUFxRTt3QkFDOUUsYUFBYSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQztxQkFDcEQsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUVPLGlCQUFpQixDQUFDLElBQWlFO1lBQ3pGLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDeEcsQ0FBQztRQUVNLGVBQWUsQ0FBQyxNQUFrQixFQUFFLE9BQW9CLEVBQUUsV0FBcUMsRUFBRSxVQUFvQztZQUMxSSxxREFBcUQ7WUFDckQsTUFBTSxZQUFZLEdBQTRDLEVBQUUsQ0FBQztZQUNqRSxNQUFNLG9CQUFvQixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLEVBQUUsQ0FBNEMsQ0FBQztZQUNqSCxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsRSxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDekQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN4RSxLQUFLLE1BQU0sU0FBUyxJQUFJLG9CQUFvQixFQUFFLENBQUM7Z0JBQzdDLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFlBQVksU0FBUyxFQUFFLENBQVksQ0FBQztnQkFDckUsTUFBTSxhQUFhLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3RELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO29CQUM5QixLQUFLLE1BQU0sS0FBSyxJQUFJLFVBQTRDLEVBQUUsQ0FBQzt3QkFDakUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQy9FLENBQUM7Z0JBQ0gsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLFVBQXFDLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDL0csQ0FBQztZQUNILENBQUM7WUFDRCwrQkFBK0I7WUFDL0IsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQTRCLEVBQUUsRUFBRSxHQUFHLE9BQU8sR0FBRyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUVNLGVBQWUsQ0FBQyxZQUFxRCxFQUFFLFVBQW1DLEVBQUUsYUFBc0MsRUFBRSxTQUFpQixFQUFFLE9BQWdCO1lBQzVMLElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ2xELE9BQU87WUFDVCxDQUFDO1lBQ0QsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNuRCxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLDhDQUE4QyxDQUFDLENBQUM7Z0JBQ25GLE9BQU87WUFDVCxDQUFDO1lBQ0QsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDcEMsMEdBQTBHO29CQUMxRyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ2xFLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDMUQsTUFBTSxPQUFPLEdBQUc7d0JBQ2QsRUFBRSxFQUFFLEVBQUU7d0JBQ04sU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVk7d0JBQ3pDLFFBQVEsRUFBRTs0QkFDUixJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUM7eUJBQzlEO3dCQUNELElBQUksRUFBRTs0QkFDSixJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDO3lCQUNsQztxQkFDRixDQUFDO29CQUNGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7b0JBQ2pELFlBQVksQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUM7Z0JBQzdCLENBQUM7cUJBQU0sQ0FBQztvQkFDTixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ2xFLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDMUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQy9FLE1BQU0sbUJBQW1CLEdBQUcsWUFBWSxDQUFDLEVBQUUsQ0FBeUUsQ0FBQztvQkFDckgsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7d0JBQy9ELHlGQUF5Rjt3QkFDekYsa0hBQWtIO3dCQUNsSCxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQVcsRUFBRSxFQUFFLEdBQUcsT0FBTyxHQUFHLElBQUksWUFBWSxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3RJLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsbUJBQW1CLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDN0gsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFXLEVBQUUsRUFBRSxHQUFHLE9BQU8sR0FBRyxJQUFJLGFBQWEsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN6SSxJQUFJLFNBQVMsR0FBRyxXQUFXLEVBQUUsQ0FBQzs0QkFDNUIscURBQXFEOzRCQUNyRCxJQUFJLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxDQUFDO2dDQUNqQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDOzRCQUM3QyxDQUFDO3dCQUNILENBQUM7d0JBQ0QsNkVBQTZFO29CQUMvRSxDQUFDO29CQUNELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDL0MsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7d0JBQ3ZELElBQUksbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUM7NEJBQzdCLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3RDLENBQUM7b0JBQ0gsQ0FBQztvQkFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsbUJBQThDLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQzFGLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyx5REFBeUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzFILHlGQUF5RjtnQkFDekYsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ3hELHlDQUF5QztvQkFDekMsTUFBTSxJQUFJLHFDQUFpQixDQUFDO3dCQUMxQixPQUFPLEVBQUUsOENBQThDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUU7d0JBQ25GLGFBQWEsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLGlEQUFpRCxFQUFFLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQztxQkFDdEksQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVPLG1CQUFtQixDQUFDLE9BQWdDLEVBQUUsYUFBc0M7WUFDbEcseUZBQXlGO1lBQ3pGLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzlELEtBQUssTUFBTSxjQUFjLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsYUFBYSxDQUFDLFFBQWtCLENBQUMsRUFBRSxDQUFDO29CQUNoRixDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVEOzs7Ozs7OztXQVFHO1FBQ0ssZ0JBQWdCLENBQUMsVUFBbUMsRUFBRSxhQUFzQztZQUNsRyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7WUFDckMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzNFLE1BQU0sS0FBSyxHQUFHLHdCQUF3QixDQUFDO1lBQ3ZDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUMzRixPQUFPLEVBQUUsQ0FBQztZQUNaLENBQUM7WUFDRCxzQ0FBc0M7WUFDdEMsSUFBSSxFQUFFLEdBQUcsUUFBUSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO2dCQUN0RCxFQUFFLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDaEQsQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVPLHNCQUFzQixDQUFDLElBQVksRUFBRSxTQUFpQixFQUFFLE9BQWdCO1lBQzlFLE9BQU87Z0JBQ0wsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVM7Z0JBQ3ZFLEVBQUUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO2dCQUN6RCxTQUFTLEVBQUUsU0FBUztnQkFDcEIsT0FBTyxFQUFFLE9BQU87YUFDakIsQ0FBQSxDQUFDLHFFQUFxRTtRQUN6RSxDQUFDO1FBRU8sa0JBQWtCLENBQUMsSUFBWTtZQUNyQyxPQUFPO2dCQUNMLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTO2dCQUM5RCxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLHFCQUFxQixLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUc7YUFDeEksQ0FBQSxDQUFDLHFFQUFxRTtRQUN6RSxDQUFDO1FBRU8sYUFBYSxDQUFDLE1BQWtCLEVBQUUsTUFBK0IsRUFBRSxPQUFvQjtZQUM3RixNQUFNLFVBQVUsR0FBZSxFQUFFLENBQUM7WUFDbEMsS0FBSyxNQUFNLFNBQVMsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxDQUFDO29CQUNILE1BQU0sV0FBVyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQTRCLENBQUM7b0JBQzVFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDbEQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQ3hDLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQztvQkFDckIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNuQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUM7d0JBQ2xCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7NEJBQ3ZCLE1BQU0sRUFBRSxNQUFNOzRCQUNkLE9BQU8sRUFBRSxPQUFPOzRCQUNoQixNQUFNLEVBQUUsdUJBQU07NEJBQ2QsT0FBTyxFQUFFLGlCQUFPOzRCQUNoQixVQUFVLEVBQUUsVUFBVTs0QkFDdEIsV0FBVyxFQUFFLFdBQVc7NEJBQ3hCLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLOzRCQUM5QixJQUFJLEVBQUUsSUFBSTt5QkFDWCxFQUFFLElBQUksQ0FBQyxDQUFDO3dCQUNULE1BQU0sWUFBWSxHQUFHOzRCQUNuQixPQUFPLEVBQUUsT0FBTzt5QkFDakIsQ0FBQzt3QkFDRixJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQzt3QkFDdkMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQzs0QkFDM0MsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQzFCLENBQUM7b0JBQ0gsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztvQkFDNUIsQ0FBQztvQkFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDbEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQzt3QkFDekIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNwQyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxzREFBc0QsU0FBUyx1R0FBdUcsQ0FBQyxDQUFDO29CQUMxTSxDQUFDO2dCQUNILENBQUM7Z0JBQUMsT0FBTyxRQUFRLEVBQUUsQ0FBQztvQkFDbEIsTUFBTSxJQUFJLHFDQUFpQixDQUFDO3dCQUMxQixPQUFPLEVBQUUsNEJBQTRCLFNBQVMsRUFBRTt3QkFDaEQsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTt3QkFDNUIsYUFBYSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQztxQkFDbEUsQ0FBQyxDQUFDO2dCQUNMLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztRQUVNLFVBQVUsQ0FBQyxNQUFrQixFQUFFLE9BQW9CLEVBQUUsV0FBcUMsRUFBRSxXQUEyQyxFQUFFLEVBQUUsY0FBc0IsRUFBRSxFQUFFLFdBQTRDO1lBQ3ROLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2pGLEtBQUssTUFBTSxPQUFPLElBQUksV0FBVyxFQUFFLENBQUM7b0JBQ2xDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDeEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNsRCxRQUFRLENBQUMsSUFBSSxDQUFDO3dCQUNaLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxHQUFHLFFBQVEsRUFBRTt3QkFDbkUsU0FBUyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsU0FBUzt3QkFDakUsT0FBTyxFQUFFOzRCQUNQO2dDQUNFLElBQUksRUFBRSxLQUFLOzZCQUNaO3lCQUNGO3FCQUNGLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsaURBQWlELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0gsQ0FBQztZQUNELE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFFTyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQXFCLEVBQUUsTUFBa0IsRUFBRSxPQUFvQixFQUFFLGdCQUFxRDtZQUMzSSw0Q0FBNEM7WUFDNUMsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDbkYsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFpQyxFQUFFLFlBQVksYUFBYSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQy9FLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3JDLCtEQUErRDtnQkFDL0QsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFpQyxFQUFFLDRCQUE0QixFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDM0YsQ0FBQztZQUNELE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsRUFBRSxDQUFtRCxDQUFDO1lBQzVILElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztnQkFDbEMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxvRUFBb0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQTtnQkFDM0ksS0FBSyxNQUFNLGFBQWEsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO29CQUM5QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDcEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7b0JBQ3RELE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUN0QyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO3dCQUN2QixLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLCtDQUErQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO3dCQUM1RixNQUFNLFVBQVUsR0FBRyxNQUFNLGNBQWMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7d0JBQzFGLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQzs0QkFDL0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyw0Q0FBNEMsTUFBTSxhQUFhLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO3dCQUN4SCxDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0tBQ0Y7SUE1Z0JZLGFBQUksT0E0Z0JoQixDQUFBO0FBQ0gsQ0FBQyxFQXpoQmdCLFFBQVEsd0JBQVIsUUFBUSxRQXloQnhCIn0=
217
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFpZFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvUmFpZFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0NBQStDO0FBQy9DLG1DQUF1QztBQUN2QyxnREFBc0Q7QUFDdEQsa0VBQStEO0FBRy9ELCtDQUF1RjtBQUN2Rix5Q0FBK0M7QUFDL0MsMkNBQWlEO0FBQ2pELDZDQUFtRDtBQUNuRCwrQ0FBb0U7QUFDcEUseUNBQXlHO0FBQ3pHLDZDQUF5RTtBQVF6RSxJQUFpQixRQUFRLENBc1B4QjtBQXRQRCxXQUFpQixRQUFRO0lBZ0J2QixTQUFTLE9BQU8sQ0FBQyxLQUFjLEVBQUUsSUFBWTtRQUMzQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFVLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFFLEdBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN6TCxDQUFDO0lBRUQsU0FBUyxtQkFBbUIsQ0FBQyxJQUFZO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMzQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUFFLE9BQU8sSUFBSSxJQUFJLEdBQUcsQ0FBQztZQUMzQyxNQUFNLE9BQU8sR0FBRyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsSUFBSSxD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