@decaf-ts/for-nest 0.11.0 → 0.11.2-refactor

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 (370) hide show
  1. package/README.md +1 -1
  2. package/dist/for-nest.cjs +2636 -2
  3. package/dist/for-nest.js +2738 -2
  4. package/lib/cjs/auth/AuthInterceptor.cjs +88 -0
  5. package/lib/cjs/auth/DecafAuthHandler.cjs +37 -0
  6. package/lib/cjs/auth/DecafAuthModule.cjs +56 -0
  7. package/lib/cjs/auth/constants.cjs +9 -0
  8. package/lib/cjs/auth/decorators.cjs +28 -0
  9. package/lib/cjs/auth/index.cjs +23 -0
  10. package/lib/cjs/bin/cli.cjs +2 -2
  11. package/lib/cjs/cli-module.cjs +48 -6
  12. package/lib/cjs/constants.cjs +5 -5
  13. package/lib/cjs/controllers.cjs +10 -102
  14. package/lib/cjs/core-module.cjs +8 -8
  15. package/lib/cjs/decaf-model/DecafModelModule.cjs +19 -4
  16. package/lib/cjs/decaf-model/FromModelController.cjs +732 -785
  17. package/lib/cjs/decaf-model/decorators/ApiOperationFromModel.cjs +53 -16
  18. package/lib/cjs/decaf-model/decorators/ApiParamsFromModel.cjs +2 -2
  19. package/lib/cjs/decaf-model/decorators/DecafBody.cjs +2 -2
  20. package/lib/cjs/decaf-model/decorators/DecafParams.cjs +2 -2
  21. package/lib/cjs/decaf-model/decorators/controller-config.cjs +29 -0
  22. package/lib/cjs/decaf-model/decorators/decorators.cjs +5 -45
  23. package/lib/cjs/decaf-model/decorators/expose.cjs +13 -0
  24. package/lib/cjs/decaf-model/decorators/index.cjs +3 -2
  25. package/lib/cjs/decaf-model/decorators/types.cjs +2 -2
  26. package/lib/cjs/decaf-model/decorators/utils.cjs +2 -2
  27. package/lib/cjs/decaf-model/index.cjs +28 -19
  28. package/lib/cjs/decaf-model/types.cjs +2 -2
  29. package/lib/cjs/decaf-model/utils.cjs +2 -2
  30. package/lib/cjs/decoration.cjs +2 -2
  31. package/lib/cjs/decorators.cjs +85 -0
  32. package/lib/cjs/events-module/DecafStreamModule.cjs +2 -2
  33. package/lib/cjs/events-module/EventsController.cjs +2 -2
  34. package/lib/cjs/events-module/constant.cjs +2 -2
  35. package/lib/cjs/events-module/index.cjs +2 -2
  36. package/lib/cjs/events-module/utils.cjs +2 -2
  37. package/lib/cjs/factory/NestBootstraper.cjs +2 -2
  38. package/lib/cjs/factory/errors/cors.cjs +2 -2
  39. package/lib/cjs/factory/errors/index.cjs +2 -2
  40. package/lib/cjs/factory/errors/throttling.cjs +2 -2
  41. package/lib/cjs/factory/exceptions/DecafErrorFilter.cjs +2 -2
  42. package/lib/cjs/factory/exceptions/decorators.cjs +2 -2
  43. package/lib/cjs/factory/exceptions/index.cjs +2 -2
  44. package/lib/cjs/factory/index.cjs +2 -2
  45. package/lib/cjs/factory/openapi/DtoBuilder.cjs +37 -6
  46. package/lib/cjs/factory/openapi/SwaggerBuilder.cjs +2 -2
  47. package/lib/cjs/factory/openapi/SwaggerCustomUI.cjs +2 -2
  48. package/lib/cjs/factory/openapi/constants.cjs +2 -2
  49. package/lib/cjs/factory/openapi/index.cjs +2 -2
  50. package/lib/cjs/index.cjs +8 -7
  51. package/lib/cjs/interceptors/DecafRequestHandlerInterceptor.cjs +27 -21
  52. package/lib/cjs/interceptors/index.cjs +3 -4
  53. package/lib/cjs/module.cjs +4 -2
  54. package/lib/cjs/overrides/Adapter.cjs +2 -2
  55. package/lib/cjs/overrides/ModelBuilderExtensions.cjs +2 -2
  56. package/lib/cjs/overrides/constants.cjs +2 -2
  57. package/lib/cjs/overrides/decoration.cjs +2 -2
  58. package/lib/cjs/overrides/helpers.cjs +2 -2
  59. package/lib/cjs/overrides/index.cjs +3 -2
  60. package/lib/cjs/overrides/logging.cjs +5 -0
  61. package/lib/cjs/overrides/overrides.cjs +2 -2
  62. package/lib/cjs/request/DecafAuthHandler.cjs +5 -39
  63. package/lib/cjs/request/DecafHandlerExecutor.cjs +2 -2
  64. package/lib/cjs/request/DecafRequestContext.cjs +11 -20
  65. package/lib/cjs/request/DecafResponseInterceptor.cjs +3 -3
  66. package/lib/cjs/request/index.cjs +2 -2
  67. package/lib/cjs/swagger-types.cjs +2 -2
  68. package/lib/cjs/types.cjs +2 -2
  69. package/lib/cjs/utils.cjs +2 -2
  70. package/lib/cjs/webhooks/DecafWebhookModule.cjs +11 -12
  71. package/lib/cjs/webhooks/controllers.cjs +10 -10
  72. package/lib/cjs/webhooks/index.cjs +2 -15
  73. package/lib/cjs/webhooks/types.cjs +2 -2
  74. package/lib/esm/auth/AuthInterceptor.js +79 -0
  75. package/lib/esm/auth/DecafAuthHandler.js +31 -0
  76. package/lib/esm/auth/DecafAuthModule.js +48 -0
  77. package/lib/esm/auth/constants.js +5 -0
  78. package/lib/esm/auth/decorators.js +22 -0
  79. package/lib/esm/auth/index.js +6 -0
  80. package/lib/esm/bin/cli.js +1 -1
  81. package/lib/esm/cli-module.js +47 -5
  82. package/lib/esm/constants.js +3 -3
  83. package/lib/esm/controllers.js +10 -102
  84. package/lib/esm/core-module.js +7 -7
  85. package/lib/esm/decaf-model/DecafModelModule.js +18 -3
  86. package/lib/esm/decaf-model/FromModelController.js +733 -786
  87. package/lib/esm/decaf-model/decorators/ApiOperationFromModel.js +53 -15
  88. package/lib/esm/decaf-model/decorators/ApiParamsFromModel.js +1 -1
  89. package/lib/esm/decaf-model/decorators/DecafBody.js +1 -1
  90. package/lib/esm/decaf-model/decorators/DecafParams.js +1 -1
  91. package/lib/esm/decaf-model/decorators/controller-config.js +25 -0
  92. package/lib/esm/decaf-model/decorators/decorators.js +2 -43
  93. package/lib/esm/decaf-model/decorators/expose.js +9 -0
  94. package/lib/esm/decaf-model/decorators/index.js +2 -1
  95. package/lib/esm/decaf-model/decorators/types.js +1 -1
  96. package/lib/esm/decaf-model/decorators/utils.js +1 -1
  97. package/lib/esm/decaf-model/index.js +11 -4
  98. package/lib/esm/decaf-model/types.js +1 -1
  99. package/lib/esm/decaf-model/utils.js +1 -1
  100. package/lib/esm/decoration.js +1 -1
  101. package/lib/esm/decorators.js +79 -0
  102. package/lib/esm/events-module/DecafStreamModule.js +1 -1
  103. package/lib/esm/events-module/EventsController.js +1 -1
  104. package/lib/esm/events-module/constant.js +1 -1
  105. package/lib/esm/events-module/index.js +1 -1
  106. package/lib/esm/events-module/utils.js +1 -1
  107. package/lib/esm/factory/NestBootstraper.js +1 -1
  108. package/lib/esm/factory/errors/cors.js +1 -1
  109. package/lib/esm/factory/errors/index.js +1 -1
  110. package/lib/esm/factory/errors/throttling.js +1 -1
  111. package/lib/esm/factory/exceptions/DecafErrorFilter.js +1 -1
  112. package/lib/esm/factory/exceptions/decorators.js +1 -1
  113. package/lib/esm/factory/exceptions/index.js +1 -1
  114. package/lib/esm/factory/index.js +1 -1
  115. package/lib/esm/factory/openapi/DtoBuilder.js +36 -5
  116. package/lib/esm/factory/openapi/SwaggerBuilder.js +1 -1
  117. package/lib/esm/factory/openapi/SwaggerCustomUI.js +1 -1
  118. package/lib/esm/factory/openapi/constants.js +1 -1
  119. package/lib/esm/factory/openapi/index.js +1 -1
  120. package/lib/esm/index.js +7 -6
  121. package/lib/esm/interceptors/DecafRequestHandlerInterceptor.js +27 -21
  122. package/lib/esm/interceptors/index.js +2 -3
  123. package/lib/esm/module.js +3 -1
  124. package/lib/esm/overrides/Adapter.js +1 -1
  125. package/lib/esm/overrides/ModelBuilderExtensions.js +1 -1
  126. package/lib/esm/overrides/constants.js +1 -1
  127. package/lib/esm/overrides/decoration.js +1 -1
  128. package/lib/esm/overrides/helpers.js +1 -1
  129. package/lib/esm/overrides/index.js +2 -1
  130. package/lib/esm/overrides/logging.js +2 -0
  131. package/lib/esm/overrides/overrides.js +1 -1
  132. package/lib/esm/request/DecafAuthHandler.js +2 -36
  133. package/lib/esm/request/DecafHandlerExecutor.js +1 -1
  134. package/lib/esm/request/DecafRequestContext.js +10 -19
  135. package/lib/esm/request/DecafResponseInterceptor.js +2 -2
  136. package/lib/esm/request/index.js +1 -1
  137. package/lib/esm/swagger-types.js +1 -1
  138. package/lib/esm/types.js +1 -1
  139. package/lib/esm/utils.js +1 -1
  140. package/lib/esm/webhooks/DecafWebhookModule.js +5 -6
  141. package/lib/esm/webhooks/controllers.js +2 -2
  142. package/lib/esm/webhooks/index.js +1 -2
  143. package/lib/esm/webhooks/types.js +1 -1
  144. package/lib/types/{interceptors → auth}/AuthInterceptor.d.cts +4 -1
  145. package/lib/types/{interceptors → auth}/AuthInterceptor.d.mts +4 -1
  146. package/lib/types/auth/DecafAuthHandler.d.cts +22 -0
  147. package/lib/types/auth/DecafAuthHandler.d.mts +22 -0
  148. package/lib/types/auth/DecafAuthModule.d.cts +9 -0
  149. package/lib/types/auth/DecafAuthModule.d.mts +9 -0
  150. package/lib/types/auth/constants.d.cts +4 -0
  151. package/lib/types/auth/constants.d.mts +4 -0
  152. package/lib/types/auth/decorators.d.cts +4 -0
  153. package/lib/types/auth/decorators.d.mts +4 -0
  154. package/lib/types/auth/index.d.cts +6 -0
  155. package/lib/types/auth/index.d.mts +6 -0
  156. package/lib/types/cli-module.d.cts +1 -4
  157. package/lib/types/cli-module.d.mts +1 -4
  158. package/lib/types/constants.d.cts +2 -2
  159. package/lib/types/constants.d.mts +2 -2
  160. package/lib/types/controllers.d.cts +7 -12
  161. package/lib/types/controllers.d.mts +7 -12
  162. package/lib/types/decaf-model/DecafModelModule.d.cts +1 -0
  163. package/lib/types/decaf-model/DecafModelModule.d.mts +1 -0
  164. package/lib/types/decaf-model/FromModelController.d.cts +40 -52
  165. package/lib/types/decaf-model/FromModelController.d.mts +40 -52
  166. package/lib/types/decaf-model/decorators/ApiOperationFromModel.d.cts +0 -2
  167. package/lib/types/decaf-model/decorators/ApiOperationFromModel.d.mts +0 -2
  168. package/lib/types/decaf-model/decorators/controller-config.d.cts +18 -0
  169. package/lib/types/decaf-model/decorators/controller-config.d.mts +18 -0
  170. package/lib/types/decaf-model/decorators/decorators.d.cts +1 -29
  171. package/lib/types/decaf-model/decorators/decorators.d.mts +1 -29
  172. package/lib/types/decaf-model/decorators/expose.d.cts +1 -0
  173. package/lib/types/decaf-model/decorators/expose.d.mts +1 -0
  174. package/lib/types/decaf-model/decorators/index.d.cts +1 -0
  175. package/lib/types/decaf-model/decorators/index.d.mts +1 -0
  176. package/lib/types/decaf-model/decorators/types.d.cts +8 -21
  177. package/lib/types/decaf-model/decorators/types.d.mts +8 -21
  178. package/lib/types/decaf-model/index.d.cts +10 -3
  179. package/lib/types/decaf-model/index.d.mts +10 -3
  180. package/lib/types/decaf-model/utils.d.cts +2 -1
  181. package/lib/types/decaf-model/utils.d.mts +2 -1
  182. package/lib/types/decorators.d.cts +34 -0
  183. package/lib/types/decorators.d.mts +34 -0
  184. package/lib/types/factory/openapi/DtoBuilder.d.cts +7 -3
  185. package/lib/types/factory/openapi/DtoBuilder.d.mts +7 -3
  186. package/lib/types/index.d.cts +5 -5
  187. package/lib/types/index.d.mts +5 -5
  188. package/lib/types/interceptors/DecafRequestHandlerInterceptor.d.cts +1 -2
  189. package/lib/types/interceptors/DecafRequestHandlerInterceptor.d.mts +1 -2
  190. package/lib/types/interceptors/index.d.cts +1 -2
  191. package/lib/types/interceptors/index.d.mts +1 -2
  192. package/lib/types/overrides/Adapter.d.cts +1 -1
  193. package/lib/types/overrides/Adapter.d.mts +1 -1
  194. package/lib/types/overrides/index.d.cts +1 -0
  195. package/lib/types/overrides/index.d.mts +1 -0
  196. package/lib/types/overrides/logging.d.cts +1 -0
  197. package/lib/types/overrides/logging.d.mts +1 -0
  198. package/lib/types/request/DecafAuthHandler.d.cts +1 -10
  199. package/lib/types/request/DecafAuthHandler.d.mts +1 -10
  200. package/lib/types/request/DecafRequestContext.d.cts +4 -5
  201. package/lib/types/request/DecafRequestContext.d.mts +4 -5
  202. package/lib/types/types.d.cts +12 -24
  203. package/lib/types/types.d.mts +12 -24
  204. package/lib/types/webhooks/controllers.d.cts +1 -1
  205. package/lib/types/webhooks/controllers.d.mts +1 -1
  206. package/lib/types/webhooks/index.d.cts +0 -1
  207. package/lib/types/webhooks/index.d.mts +0 -1
  208. package/package.json +5 -13
  209. package/dist/for-nest.cjs.map +0 -1
  210. package/dist/for-nest.js.map +0 -1
  211. package/lib/cjs/bin/cli.cjs.map +0 -1
  212. package/lib/cjs/cli-module.cjs.map +0 -1
  213. package/lib/cjs/constants.cjs.map +0 -1
  214. package/lib/cjs/controllers.cjs.map +0 -1
  215. package/lib/cjs/core-module.cjs.map +0 -1
  216. package/lib/cjs/decaf-model/DecafModelModule.cjs.map +0 -1
  217. package/lib/cjs/decaf-model/FromModelController.cjs.map +0 -1
  218. package/lib/cjs/decaf-model/decorators/ApiOperationFromModel.cjs.map +0 -1
  219. package/lib/cjs/decaf-model/decorators/ApiParamsFromModel.cjs.map +0 -1
  220. package/lib/cjs/decaf-model/decorators/DecafBody.cjs.map +0 -1
  221. package/lib/cjs/decaf-model/decorators/DecafParams.cjs.map +0 -1
  222. package/lib/cjs/decaf-model/decorators/decorators.cjs.map +0 -1
  223. package/lib/cjs/decaf-model/decorators/index.cjs.map +0 -1
  224. package/lib/cjs/decaf-model/decorators/types.cjs.map +0 -1
  225. package/lib/cjs/decaf-model/decorators/utils.cjs.map +0 -1
  226. package/lib/cjs/decaf-model/index.cjs.map +0 -1
  227. package/lib/cjs/decaf-model/types.cjs.map +0 -1
  228. package/lib/cjs/decaf-model/utils.cjs.map +0 -1
  229. package/lib/cjs/decoration.cjs.map +0 -1
  230. package/lib/cjs/events-module/DecafStreamModule.cjs.map +0 -1
  231. package/lib/cjs/events-module/EventsController.cjs.map +0 -1
  232. package/lib/cjs/events-module/constant.cjs.map +0 -1
  233. package/lib/cjs/events-module/index.cjs.map +0 -1
  234. package/lib/cjs/events-module/utils.cjs.map +0 -1
  235. package/lib/cjs/factory/NestBootstraper.cjs.map +0 -1
  236. package/lib/cjs/factory/errors/cors.cjs.map +0 -1
  237. package/lib/cjs/factory/errors/index.cjs.map +0 -1
  238. package/lib/cjs/factory/errors/throttling.cjs.map +0 -1
  239. package/lib/cjs/factory/exceptions/DecafErrorFilter.cjs.map +0 -1
  240. package/lib/cjs/factory/exceptions/decorators.cjs.map +0 -1
  241. package/lib/cjs/factory/exceptions/index.cjs.map +0 -1
  242. package/lib/cjs/factory/index.cjs.map +0 -1
  243. package/lib/cjs/factory/openapi/DtoBuilder.cjs.map +0 -1
  244. package/lib/cjs/factory/openapi/SwaggerBuilder.cjs.map +0 -1
  245. package/lib/cjs/factory/openapi/SwaggerCustomUI.cjs.map +0 -1
  246. package/lib/cjs/factory/openapi/constants.cjs.map +0 -1
  247. package/lib/cjs/factory/openapi/index.cjs.map +0 -1
  248. package/lib/cjs/index.cjs.map +0 -1
  249. package/lib/cjs/interceptors/AuthInterceptor.cjs +0 -52
  250. package/lib/cjs/interceptors/AuthInterceptor.cjs.map +0 -1
  251. package/lib/cjs/interceptors/DecafRequestHandlerInterceptor.cjs.map +0 -1
  252. package/lib/cjs/interceptors/context.cjs +0 -18
  253. package/lib/cjs/interceptors/context.cjs.map +0 -1
  254. package/lib/cjs/interceptors/index.cjs.map +0 -1
  255. package/lib/cjs/migrations/index.cjs +0 -35
  256. package/lib/cjs/migrations/index.cjs.map +0 -1
  257. package/lib/cjs/migrations/migration-module.cjs +0 -60
  258. package/lib/cjs/migrations/migration-module.cjs.map +0 -1
  259. package/lib/cjs/migrations/migration-options.cjs +0 -4
  260. package/lib/cjs/migrations/migration-options.cjs.map +0 -1
  261. package/lib/cjs/module.cjs.map +0 -1
  262. package/lib/cjs/overrides/Adapter.cjs.map +0 -1
  263. package/lib/cjs/overrides/ModelBuilderExtensions.cjs.map +0 -1
  264. package/lib/cjs/overrides/constants.cjs.map +0 -1
  265. package/lib/cjs/overrides/decoration.cjs.map +0 -1
  266. package/lib/cjs/overrides/helpers.cjs.map +0 -1
  267. package/lib/cjs/overrides/index.cjs.map +0 -1
  268. package/lib/cjs/overrides/overrides.cjs.map +0 -1
  269. package/lib/cjs/ram/RamRequestTransformer.cjs +0 -26
  270. package/lib/cjs/ram/RamRequestTransformer.cjs.map +0 -1
  271. package/lib/cjs/ram/index.cjs +0 -19
  272. package/lib/cjs/ram/index.cjs.map +0 -1
  273. package/lib/cjs/request/DecafAuthHandler.cjs.map +0 -1
  274. package/lib/cjs/request/DecafHandlerExecutor.cjs.map +0 -1
  275. package/lib/cjs/request/DecafRequestContext.cjs.map +0 -1
  276. package/lib/cjs/request/DecafResponseInterceptor.cjs.map +0 -1
  277. package/lib/cjs/request/index.cjs.map +0 -1
  278. package/lib/cjs/swagger-types.cjs.map +0 -1
  279. package/lib/cjs/types.cjs.map +0 -1
  280. package/lib/cjs/utils.cjs.map +0 -1
  281. package/lib/cjs/webhooks/DecafWebhookModule.cjs.map +0 -1
  282. package/lib/cjs/webhooks/controllers.cjs.map +0 -1
  283. package/lib/cjs/webhooks/index.cjs.map +0 -1
  284. package/lib/cjs/webhooks/types.cjs.map +0 -1
  285. package/lib/esm/bin/cli.js.map +0 -1
  286. package/lib/esm/cli-module.js.map +0 -1
  287. package/lib/esm/constants.js.map +0 -1
  288. package/lib/esm/controllers.js.map +0 -1
  289. package/lib/esm/core-module.js.map +0 -1
  290. package/lib/esm/decaf-model/DecafModelModule.js.map +0 -1
  291. package/lib/esm/decaf-model/FromModelController.js.map +0 -1
  292. package/lib/esm/decaf-model/decorators/ApiOperationFromModel.js.map +0 -1
  293. package/lib/esm/decaf-model/decorators/ApiParamsFromModel.js.map +0 -1
  294. package/lib/esm/decaf-model/decorators/DecafBody.js.map +0 -1
  295. package/lib/esm/decaf-model/decorators/DecafParams.js.map +0 -1
  296. package/lib/esm/decaf-model/decorators/decorators.js.map +0 -1
  297. package/lib/esm/decaf-model/decorators/index.js.map +0 -1
  298. package/lib/esm/decaf-model/decorators/types.js.map +0 -1
  299. package/lib/esm/decaf-model/decorators/utils.js.map +0 -1
  300. package/lib/esm/decaf-model/index.js.map +0 -1
  301. package/lib/esm/decaf-model/types.js.map +0 -1
  302. package/lib/esm/decaf-model/utils.js.map +0 -1
  303. package/lib/esm/decoration.js.map +0 -1
  304. package/lib/esm/events-module/DecafStreamModule.js.map +0 -1
  305. package/lib/esm/events-module/EventsController.js.map +0 -1
  306. package/lib/esm/events-module/constant.js.map +0 -1
  307. package/lib/esm/events-module/index.js.map +0 -1
  308. package/lib/esm/events-module/utils.js.map +0 -1
  309. package/lib/esm/factory/NestBootstraper.js.map +0 -1
  310. package/lib/esm/factory/errors/cors.js.map +0 -1
  311. package/lib/esm/factory/errors/index.js.map +0 -1
  312. package/lib/esm/factory/errors/throttling.js.map +0 -1
  313. package/lib/esm/factory/exceptions/DecafErrorFilter.js.map +0 -1
  314. package/lib/esm/factory/exceptions/decorators.js.map +0 -1
  315. package/lib/esm/factory/exceptions/index.js.map +0 -1
  316. package/lib/esm/factory/index.js.map +0 -1
  317. package/lib/esm/factory/openapi/DtoBuilder.js.map +0 -1
  318. package/lib/esm/factory/openapi/SwaggerBuilder.js.map +0 -1
  319. package/lib/esm/factory/openapi/SwaggerCustomUI.js.map +0 -1
  320. package/lib/esm/factory/openapi/constants.js.map +0 -1
  321. package/lib/esm/factory/openapi/index.js.map +0 -1
  322. package/lib/esm/index.js.map +0 -1
  323. package/lib/esm/interceptors/AuthInterceptor.js +0 -43
  324. package/lib/esm/interceptors/AuthInterceptor.js.map +0 -1
  325. package/lib/esm/interceptors/DecafRequestHandlerInterceptor.js.map +0 -1
  326. package/lib/esm/interceptors/context.js +0 -12
  327. package/lib/esm/interceptors/context.js.map +0 -1
  328. package/lib/esm/interceptors/index.js.map +0 -1
  329. package/lib/esm/migrations/index.js +0 -18
  330. package/lib/esm/migrations/index.js.map +0 -1
  331. package/lib/esm/migrations/migration-module.js +0 -52
  332. package/lib/esm/migrations/migration-module.js.map +0 -1
  333. package/lib/esm/migrations/migration-options.js +0 -7
  334. package/lib/esm/migrations/migration-options.js.map +0 -1
  335. package/lib/esm/module.js.map +0 -1
  336. package/lib/esm/overrides/Adapter.js.map +0 -1
  337. package/lib/esm/overrides/ModelBuilderExtensions.js.map +0 -1
  338. package/lib/esm/overrides/constants.js.map +0 -1
  339. package/lib/esm/overrides/decoration.js.map +0 -1
  340. package/lib/esm/overrides/helpers.js.map +0 -1
  341. package/lib/esm/overrides/index.js.map +0 -1
  342. package/lib/esm/overrides/overrides.js.map +0 -1
  343. package/lib/esm/ram/RamRequestTransformer.js +0 -21
  344. package/lib/esm/ram/RamRequestTransformer.js.map +0 -1
  345. package/lib/esm/ram/index.js +0 -2
  346. package/lib/esm/ram/index.js.map +0 -1
  347. package/lib/esm/request/DecafAuthHandler.js.map +0 -1
  348. package/lib/esm/request/DecafHandlerExecutor.js.map +0 -1
  349. package/lib/esm/request/DecafRequestContext.js.map +0 -1
  350. package/lib/esm/request/DecafResponseInterceptor.js.map +0 -1
  351. package/lib/esm/request/index.js.map +0 -1
  352. package/lib/esm/swagger-types.js.map +0 -1
  353. package/lib/esm/types.js.map +0 -1
  354. package/lib/esm/utils.js.map +0 -1
  355. package/lib/esm/webhooks/DecafWebhookModule.js.map +0 -1
  356. package/lib/esm/webhooks/controllers.js.map +0 -1
  357. package/lib/esm/webhooks/index.js.map +0 -1
  358. package/lib/esm/webhooks/types.js.map +0 -1
  359. package/lib/types/interceptors/context.d.cts +0 -6
  360. package/lib/types/interceptors/context.d.mts +0 -6
  361. package/lib/types/migrations/index.d.cts +0 -17
  362. package/lib/types/migrations/index.d.mts +0 -17
  363. package/lib/types/migrations/migration-module.d.cts +0 -15
  364. package/lib/types/migrations/migration-module.d.mts +0 -15
  365. package/lib/types/migrations/migration-options.d.cts +0 -11
  366. package/lib/types/migrations/migration-options.d.mts +0 -11
  367. package/lib/types/ram/RamRequestTransformer.d.cts +0 -5
  368. package/lib/types/ram/RamRequestTransformer.d.mts +0 -5
  369. package/lib/types/ram/index.d.cts +0 -1
  370. package/lib/types/ram/index.d.mts +0 -1
@@ -25,8 +25,10 @@ const constants_js_1 = require("./constants.cjs");
25
25
  const index_js_1 = require("./interceptors/index.cjs");
26
26
  const index_js_2 = require("./request/index.cjs");
27
27
  const core_2 = require("@decaf-ts/core");
28
+ const decorators_js_1 = require("./decorators.cjs");
28
29
  const db_decorators_1 = require("@decaf-ts/db-decorators");
29
30
  const logging_1 = require("@decaf-ts/logging");
31
+ const server_1 = require("@decaf-ts/for-http/server");
30
32
  let DecafCoreModule = class DecafCoreModule {
31
33
  static { DecafCoreModule_1 = this; }
32
34
  static get persistence() {
@@ -45,6 +47,7 @@ let DecafCoreModule = class DecafCoreModule {
45
47
  }
46
48
  static forRoot(options) {
47
49
  const log = this.log.for(this.forRoot);
50
+ const decafProviders = (0, decorators_js_1.getRegisteredDecafProviders)();
48
51
  return {
49
52
  module: DecafCoreModule_1,
50
53
  providers: [
@@ -57,17 +60,13 @@ let DecafCoreModule = class DecafCoreModule {
57
60
  return new H();
58
61
  }) ?? [],
59
62
  },
60
- index_js_1.AuthInterceptor,
61
- {
62
- provide: core_1.APP_INTERCEPTOR,
63
- useExisting: index_js_1.AuthInterceptor,
64
- },
65
63
  index_js_2.DecafRequestContext,
66
64
  index_js_2.DecafHandlerExecutor,
67
65
  {
68
66
  provide: core_1.APP_INTERCEPTOR,
69
67
  useClass: index_js_1.DecafRequestHandlerInterceptor,
70
68
  },
69
+ ...decafProviders,
71
70
  ],
72
71
  exports: [
73
72
  constants_js_1.DECAF_MODULE_OPTIONS,
@@ -75,6 +74,7 @@ let DecafCoreModule = class DecafCoreModule {
75
74
  constants_js_1.DECAF_HANDLERS,
76
75
  index_js_2.DecafRequestContext,
77
76
  index_js_2.DecafHandlerExecutor,
77
+ ...decafProviders.map((provider) => provider.provide),
78
78
  ],
79
79
  };
80
80
  }
@@ -108,7 +108,7 @@ let DecafCoreModule = class DecafCoreModule {
108
108
  throw new db_decorators_1.InternalError(`Failed to boot transformer for ${clients[i].flavour}: ${e}`);
109
109
  }
110
110
  }
111
- (0, index_js_1.requestToContextTransformer)(clients[i].flavour)(transformer);
111
+ (0, server_1.requestToContextTransformer)(clients[i].flavour)(transformer);
112
112
  }
113
113
  log.info("persistence layer created successfully!");
114
114
  if (options.initialization) {
@@ -150,5 +150,5 @@ exports.DecafCoreModule = DecafCoreModule = DecafCoreModule_1 = __decorate([
150
150
  __param(0, (0, common_1.Inject)(constants_js_1.DECAF_MODULE_OPTIONS)),
151
151
  __metadata("design:paramtypes", [Object, core_1.ModuleRef])
152
152
  ], DecafCoreModule);
153
- //# sourceMappingURL=core-module.js.map
154
- //# sourceMappingURL=core-module.js.map
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29yZS1tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFFTCxNQUFNLEVBQ04sTUFBTSxFQUNOLE1BQU0sR0FFUCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTFELE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsY0FBYyxFQUNkLG9CQUFvQixHQUNyQix1QkFBb0I7QUFDckIsT0FBTyxFQUNMLDhCQUE4QixHQUMvQixnQ0FBdUI7QUFDeEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG1CQUFtQixFQUFFLDJCQUFrQjtBQUV0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSx3QkFBcUI7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBVSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBRUwsMkJBQTJCLEdBQzVCLE1BQU0sMkJBQTJCLENBQUM7QUFJNUIsSUFBTSxlQUFlLEdBQXJCLE1BQU0sZUFBZTs7SUFPaEIsTUFBTSxLQUFLLFdBQVc7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZO1lBQ3BCLE1BQU0sSUFBSSxhQUFhLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUNqRSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztJQUVTLE1BQU0sS0FBSyxHQUFHO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBZSxDQUFDLENBQUM7UUFDL0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxZQUVtQixPQUEwQyxFQUMxQyxTQUFvQjtRQURwQixZQUFPLEdBQVAsT0FBTyxDQUFtQztRQUMxQyxjQUFTLEdBQVQsU0FBUyxDQUFXO0lBQ3BDLENBQUM7SUFFSixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQTJCO1FBQ3hDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxNQUFNLGNBQWMsR0FBRywyQkFBMkIsRUFBRSxDQUFDO1FBQ3JELE9BQU87WUFDTCxNQUFNLEVBQUUsaUJBQWU7WUFDdkIsU0FBUyxFQUFFO2dCQUNULEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7Z0JBQ3BELEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRTtnQkFDakU7b0JBQ0UsT0FBTyxFQUFFLGNBQWM7b0JBQ3ZCLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FDZixPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO3dCQUMxQixHQUFHLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQzt3QkFDbEQsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNqQixDQUFDLENBQUMsSUFBSSxFQUFFO2lCQUNYO2dCQUNELG1CQUFtQjtnQkFDbkIsb0JBQW9CO2dCQUNwQjtvQkFDRSxPQUFPLEVBQUUsZUFBZTtvQkFDeEIsUUFBUSxFQUFFLDhCQUE4QjtpQkFDekM7Z0JBQ0QsR0FBRyxjQUFjO2FBQ2xCO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLG9CQUFvQjtnQkFDcEIsZ0JBQWdCO2dCQUNoQixjQUFjO2dCQUNkLG1CQUFtQjtnQkFDbkIsb0JBQW9CO2dCQUNwQixHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7YUFDdEQ7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUMxQixPQUEyQjtRQUUzQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN2QixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFFBQVE7b0JBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDbkMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUMvQixDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQzdDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7WUFDekMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDeEMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDMUIsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM1QyxJQUFJLFdBQVcsR0FBRyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3ZDLElBQ0UsQ0FBQyxXQUFXO29CQUNaLENBQUUsV0FBZ0QsQ0FBQyxJQUFJLEVBQ3ZELENBQUM7b0JBQ0QsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3pELElBQUksQ0FBQyxLQUFLO3dCQUNSLE1BQU0sSUFBSSxhQUFhLENBQ3JCLG9DQUFvQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyx5RkFBeUYsQ0FDaEosQ0FBQztvQkFDSixJQUFJLENBQUM7d0JBQ0gsV0FBVyxHQUFJLEtBQTBDLENBQUMsSUFBSTs0QkFDNUQsQ0FBQyxDQUFDLEtBQUs7NEJBQ1AsQ0FBQyxDQUFDLElBQUssS0FBdUQsRUFBRSxDQUFDO29CQUNyRSxDQUFDO29CQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7d0JBQ3BCLE1BQU0sSUFBSSxhQUFhLENBQ3JCLGtDQUFrQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUM3RCxDQUFDO29CQUNKLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCwyQkFBMkIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDL0QsQ0FBQztZQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMseUNBQXlDLENBQUMsQ0FBQztZQUVwRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDO29CQUNILE1BQU0sT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNqQyxDQUFDO2dCQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7b0JBQ3BCLE1BQU0sSUFBSSxhQUFhLENBQUMscUNBQXFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3BFLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDakMsQ0FBQztJQUVELEtBQUssQ0FBQyxxQkFBcUI7UUFDekIsTUFBTSxHQUFHLEdBQUcsaUJBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sUUFBUSxHQUNaLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFNLGdCQUFnQixDQUFDLENBQUM7UUFDNUMsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRO1lBQzVCLElBQUksQ0FBQztnQkFDSCxJQUFJLE9BQU8sRUFBRSxDQUFDO29CQUNaLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ2hELE1BQU0sT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMzQixDQUFDO1lBQ0gsQ0FBQztZQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7Z0JBQ3BCLEdBQUcsQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsQ0FBVSxDQUFDLENBQUM7WUFDMUQsQ0FBQztRQUNILElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO1lBQ3BCLEdBQUcsQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEVBQUUsQ0FBVSxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUM7Q0FDRixDQUFBO0FBbklZLGVBQWU7SUFGM0IsTUFBTSxFQUFFO0lBQ1IsTUFBTSxDQUFDLEVBQUUsQ0FBQztJQW9CTixXQUFBLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBOzZDQUVELFNBQVM7R0FyQjVCLGVBQWUsQ0FtSTNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRHluYW1pY01vZHVsZSxcbiAgR2xvYmFsLFxuICBJbmplY3QsXG4gIE1vZHVsZSxcbiAgT25BcHBsaWNhdGlvblNodXRkb3duLFxufSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7IEFQUF9JTlRFUkNFUFRPUiwgTW9kdWxlUmVmIH0gZnJvbSBcIkBuZXN0anMvY29yZVwiO1xuaW1wb3J0IHR5cGUgeyBEZWNhZk1vZHVsZU9wdGlvbnMgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHtcbiAgREVDQUZfQURBUFRFUl9JRCxcbiAgREVDQUZfSEFORExFUlMsXG4gIERFQ0FGX01PRFVMRV9PUFRJT05TLFxufSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIERlY2FmUmVxdWVzdEhhbmRsZXJJbnRlcmNlcHRvcixcbn0gZnJvbSBcIi4vaW50ZXJjZXB0b3JzXCI7XG5pbXBvcnQgeyBEZWNhZkhhbmRsZXJFeGVjdXRvciwgRGVjYWZSZXF1ZXN0Q29udGV4dCB9IGZyb20gXCIuL3JlcXVlc3RcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5pbXBvcnQgeyBBZGFwdGVyLCBQZXJzaXN0ZW5jZVNlcnZpY2UsIFNlcnZpY2UgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IGdldFJlZ2lzdGVyZWREZWNhZlByb3ZpZGVycyB9IGZyb20gXCIuL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IEludGVybmFsRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IExvZ2dlciwgTG9nZ2luZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuaW1wb3J0IHtcbiAgUmVxdWVzdFRvQ29udGV4dFRyYW5zZm9ybWVyLFxuICByZXF1ZXN0VG9Db250ZXh0VHJhbnNmb3JtZXIsXG59IGZyb20gXCJAZGVjYWYtdHMvZm9yLWh0dHAvc2VydmVyXCI7XG5cbkBHbG9iYWwoKVxuQE1vZHVsZSh7fSlcbmV4cG9ydCBjbGFzcyBEZWNhZkNvcmVNb2R1bGU8Q09ORiwgQURBUFRFUiBleHRlbmRzIEFkYXB0ZXI8Q09ORiwgYW55LCBhbnksIGFueT4+XG4gIGltcGxlbWVudHMgT25BcHBsaWNhdGlvblNodXRkb3duXG57XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IExvZ2dlcjtcblxuICBwcml2YXRlIHN0YXRpYyBfcGVyc2lzdGVuY2U/OiBQZXJzaXN0ZW5jZVNlcnZpY2U8QWRhcHRlcjxhbnksIGFueSwgYW55LCBhbnk+PjtcblxuICBwcm90ZWN0ZWQgc3RhdGljIGdldCBwZXJzaXN0ZW5jZSgpOiBQZXJzaXN0ZW5jZVNlcnZpY2U8QWRhcHRlcjxhbnksIGFueSwgYW55LCBhbnk+PiB7XG4gICAgaWYgKCF0aGlzLl9wZXJzaXN0ZW5jZSlcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiUGVyc2lzdGVuY2Ugc2VydmljZSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgcmV0dXJuIHRoaXMuX3BlcnNpc3RlbmNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXRpYyBnZXQgbG9nKCk6IExvZ2dlciB7XG4gICAgaWYgKCF0aGlzLl9sb2dnZXIpIHRoaXMuX2xvZ2dlciA9IExvZ2dpbmcuZm9yKERlY2FmQ29yZU1vZHVsZSk7XG4gICAgcmV0dXJuIHRoaXMuX2xvZ2dlcjtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoREVDQUZfTU9EVUxFX09QVElPTlMpXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBEZWNhZk1vZHVsZU9wdGlvbnM8Q09ORiwgQURBUFRFUj4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBtb2R1bGVSZWY6IE1vZHVsZVJlZlxuICApIHt9XG5cbiAgc3RhdGljIGZvclJvb3Qob3B0aW9uczogRGVjYWZNb2R1bGVPcHRpb25zKTogRHluYW1pY01vZHVsZSB7XG4gICAgY29uc3QgbG9nID0gdGhpcy5sb2cuZm9yKHRoaXMuZm9yUm9vdCk7XG4gICAgY29uc3QgZGVjYWZQcm92aWRlcnMgPSBnZXRSZWdpc3RlcmVkRGVjYWZQcm92aWRlcnMoKTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kdWxlOiBEZWNhZkNvcmVNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBERUNBRl9NT0RVTEVfT1BUSU9OUywgdXNlVmFsdWU6IG9wdGlvbnMgfSxcbiAgICAgICAgeyBwcm92aWRlOiBERUNBRl9BREFQVEVSX0lELCB1c2VWYWx1ZTogdGhpcy5wZXJzaXN0ZW5jZT8uY2xpZW50IH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBERUNBRl9IQU5ETEVSUyxcbiAgICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PlxuICAgICAgICAgICAgb3B0aW9ucy5oYW5kbGVycz8ubWFwKChIKSA9PiB7XG4gICAgICAgICAgICAgIGxvZy5pbmZvKGBSZWdpc3RlcmVkIHJlcXVlc3QgaGFuZGxlcjogJHtILm5hbWV9YCk7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgSCgpO1xuICAgICAgICAgICAgfSkgPz8gW10sXG4gICAgICAgIH0sXG4gICAgICAgIERlY2FmUmVxdWVzdENvbnRleHQsXG4gICAgICAgIERlY2FmSGFuZGxlckV4ZWN1dG9yLFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogQVBQX0lOVEVSQ0VQVE9SLFxuICAgICAgICAgIHVzZUNsYXNzOiBEZWNhZlJlcXVlc3RIYW5kbGVySW50ZXJjZXB0b3IsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmRlY2FmUHJvdmlkZXJzLFxuICAgICAgXSxcbiAgICAgIGV4cG9ydHM6IFtcbiAgICAgICAgREVDQUZfTU9EVUxFX09QVElPTlMsXG4gICAgICAgIERFQ0FGX0FEQVBURVJfSUQsXG4gICAgICAgIERFQ0FGX0hBTkRMRVJTLFxuICAgICAgICBEZWNhZlJlcXVlc3RDb250ZXh0LFxuICAgICAgICBEZWNhZkhhbmRsZXJFeGVjdXRvcixcbiAgICAgICAgLi4uZGVjYWZQcm92aWRlcnMubWFwKChwcm92aWRlcikgPT4gcHJvdmlkZXIucHJvdmlkZSksXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgYm9vdFBlcnNpc3RlbmNlKFxuICAgIG9wdGlvbnM6IERlY2FmTW9kdWxlT3B0aW9uc1xuICApOiBQcm9taXNlPEFkYXB0ZXI8YW55LCBhbnksIGFueSwgYW55PltdPiB7XG4gICAgY29uc3QgbG9nID0gdGhpcy5sb2cuZm9yKHRoaXMuYm9vdFBlcnNpc3RlbmNlKTtcblxuICAgIGlmICghdGhpcy5fcGVyc2lzdGVuY2UpIHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBvcHRpb25zLmNvbmYubWFwKChbY29udHIsIGNmZywgLi4uYXJnc10pID0+IHtcbiAgICAgICAgY29uc3QgcG9zc2libGUgPSBhcmdzLnBvcCgpO1xuICAgICAgICBpZiAoIXBvc3NpYmxlKSByZXR1cm4gW2NvbnRyLCBjZmddO1xuICAgICAgICByZXR1cm4gW2NvbnRyLCBjZmcsIC4uLmFyZ3NdO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9wZXJzaXN0ZW5jZSA9IG5ldyBQZXJzaXN0ZW5jZVNlcnZpY2UoKTtcbiAgICAgIGF3YWl0IHRoaXMuX3BlcnNpc3RlbmNlLmJvb3QodHJpbW1lZCk7XG4gICAgICBjb25zdCBjbGllbnRzID0gdGhpcy5fcGVyc2lzdGVuY2UuY2xpZW50O1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGllbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGMgPSBvcHRpb25zLmNvbmZbaV07XG4gICAgICAgIGNvbnN0IHBvc3NpYmxlVHJhbnNmID0gYy5zbGljZSgyLCBjLmxlbmd0aCk7XG4gICAgICAgIGxldCB0cmFuc2Zvcm1lciA9IHBvc3NpYmxlVHJhbnNmLnBvcCgpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRyYW5zZm9ybWVyIHx8XG4gICAgICAgICAgISh0cmFuc2Zvcm1lciBhcyBSZXF1ZXN0VG9Db250ZXh0VHJhbnNmb3JtZXI8YW55PikuZnJvbVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBjb250ciA9IEFkYXB0ZXIudHJhbnNmb3JtZXJGb3IoY2xpZW50c1tpXS5mbGF2b3VyKTtcbiAgICAgICAgICBpZiAoIWNvbnRyKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgICAgIGBObyB0cmFuc2Zvcm1lciBmb3VuZCBmb3IgZmxhdm91ciAke2NsaWVudHNbaV0uZmxhdm91cn0uIHlvdSBzaG91bGQgZWl0aGVyIEByZXF1ZXN0VG9Db250ZXh0VHJhbnNmb3JtZXIgb3IgcHJvdmlkZSBhIHRyYW5zZm9ybWVyIGluIHRoZSBjb25maWdgXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lciA9IChjb250ciBhcyBSZXF1ZXN0VG9Db250ZXh0VHJhbnNmb3JtZXI8YW55PikuZnJvbVxuICAgICAgICAgICAgICA/IGNvbnRyXG4gICAgICAgICAgICAgIDogbmV3IChjb250ciBhcyBDb25zdHJ1Y3RvcjxSZXF1ZXN0VG9Db250ZXh0VHJhbnNmb3JtZXI8YW55Pj4pKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgICAgIGBGYWlsZWQgdG8gYm9vdCB0cmFuc2Zvcm1lciBmb3IgJHtjbGllbnRzW2ldLmZsYXZvdXJ9OiAke2V9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdFRvQ29udGV4dFRyYW5zZm9ybWVyKGNsaWVudHNbaV0uZmxhdm91cikodHJhbnNmb3JtZXIpO1xuICAgICAgfVxuICAgICAgbG9nLmluZm8oXCJwZXJzaXN0ZW5jZSBsYXllciBjcmVhdGVkIHN1Y2Nlc3NmdWxseSFcIik7XG5cbiAgICAgIGlmIChvcHRpb25zLmluaXRpYWxpemF0aW9uKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgb3B0aW9ucy5pbml0aWFsaXphdGlvbigpO1xuICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYEZhaWxlZCB0byBpbml0aWFsaXplIGFwcGxpY2F0aW9uOiAke2V9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5wZXJzaXN0ZW5jZS5jbGllbnQ7XG4gIH1cblxuICBhc3luYyBvbkFwcGxpY2F0aW9uU2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbG9nID0gRGVjYWZDb3JlTW9kdWxlLmxvZy5mb3IodGhpcy5vbkFwcGxpY2F0aW9uU2h1dGRvd24pO1xuICAgIGNvbnN0IGFkYXB0ZXJzOiBBZGFwdGVyPGFueSwgYW55LCBhbnksIGFueT5bXSA9XG4gICAgICB0aGlzLm1vZHVsZVJlZi5nZXQ8YW55PihERUNBRl9BREFQVEVSX0lEKTtcbiAgICBmb3IgKGNvbnN0IGFkYXB0ZXIgb2YgYWRhcHRlcnMpXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoYWRhcHRlcikge1xuICAgICAgICAgIGxvZy5pbmZvKGBTaHV0dGluZyBkb3duICR7YWRhcHRlci50b1N0cmluZygpfWApO1xuICAgICAgICAgIGF3YWl0IGFkYXB0ZXIuc2h1dGRvd24oKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICBsb2cuZXJyb3IoYEZhaWxlZCB0byBzaHV0ZG93biBhcHBsaWNhdGlvbmAsIGUgYXMgRXJyb3IpO1xuICAgICAgfVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBTZXJ2aWNlLnNodXRkb3duKCk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgbG9nLmVycm9yKGBGYWlsZWQgdG8gc2h1dGRvd24gc2VydmljZXNgLCBlIGFzIEVycm9yKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb3JlLW1vZHVsZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJO0lBQ2pGLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDN0gsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxPQUFPLENBQUMsUUFBUSxLQUFLLFVBQVU7UUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQzs7UUFDMUgsS0FBSyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUFFLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7Z0JBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsSixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEUsQ0FBQyxDQUFDO0FBQ0YsSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUM7SUFDeEQsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxPQUFPLENBQUMsUUFBUSxLQUFLLFVBQVU7UUFBRSxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdHLENBQUMsQ0FBQztBQUNGLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxVQUFVLFVBQVUsRUFBRSxTQUFTO0lBQ25FLE9BQU8sVUFBVSxNQUFNLEVBQUUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3pFLENBQUMsQ0FBQztBQUNGLElBQUksaUJBQWlCLENBQUM7QUFDdEIsMkNBQXlEO0FBQ3pELHVDQUEwRDtBQUMxRCxpREFBeUY7QUFDekYsc0RBQTBFO0FBQzFFLGlEQUErRTtBQUMvRSx5Q0FBc0U7QUFDdEUsbURBQThEO0FBQzlELDJEQUF3RDtBQUN4RCwrQ0FBNEM7QUFDNUMsc0RBQXlFO0FBQ3pFLElBQUksZUFBZSxHQUFHLE1BQU0sZUFBZTtJQUN2QyxTQUFTLGlCQUFpQixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEMsTUFBTSxLQUFLLFdBQVc7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZO1lBQ2xCLE1BQU0sSUFBSSw2QkFBYSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7UUFDbkUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRztRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUNiLElBQUksQ0FBQyxPQUFPLEdBQUcsaUJBQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNsRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDeEIsQ0FBQztJQUNELFlBQVksT0FBTyxFQUFFLFNBQVM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUNELE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTztRQUNsQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsTUFBTSxjQUFjLEdBQUcsSUFBQSwyQ0FBMkIsR0FBRSxDQUFDO1FBQ3JELE9BQU87WUFDSCxNQUFNLEVBQUUsaUJBQWlCO1lBQ3pCLFNBQVMsRUFBRTtnQkFDUCxFQUFFLE9BQU8sRUFBRSxtQ0FBb0IsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFO2dCQUNwRCxFQUFFLE9BQU8sRUFBRSwrQkFBZ0IsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUU7Z0JBQ2pFO29CQUNJLE9BQU8sRUFBRSw2QkFBYztvQkFDdkIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7d0JBQzFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO3dCQUNsRCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ25CLENBQUMsQ0FBQyxJQUFJLEVBQUU7aUJBQ1g7Z0JBQ0QsOEJBQW1CO2dCQUNuQiwrQkFBb0I7Z0JBQ3BCO29CQUNJLE9BQU8sRUFBRSxzQkFBZTtvQkFDeEIsUUFBUSxFQUFFLHlDQUE4QjtpQkFDM0M7Z0JBQ0QsR0FBRyxjQUFjO2FBQ3BCO1lBQ0QsT0FBTyxFQUFFO2dCQUNMLG1DQUFvQjtnQkFDcEIsK0JBQWdCO2dCQUNoQiw2QkFBYztnQkFDZCw4QkFBbUI7Z0JBQ25CLCtCQUFvQjtnQkFDcEIsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO2FBQ3hEO1NBQ0osQ0FBQztJQUNOLENBQUM7SUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxPQUFPO1FBQ2hDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3JCLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUUsRUFBRTtnQkFDdkQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUM1QixJQUFJLENBQUMsUUFBUTtvQkFDVCxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN4QixPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLHlCQUFrQixFQUFFLENBQUM7WUFDN0MsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztZQUN6QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN0QyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzVDLElBQUksV0FBVyxHQUFHLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLFdBQVc7b0JBQ1osQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3BCLE1BQU0sS0FBSyxHQUFHLGNBQU8sQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN6RCxJQUFJLENBQUMsS0FBSzt3QkFDTixNQUFNLElBQUksNkJBQWEsQ0FBQyxvQ0FBb0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8seUZBQXlGLENBQUMsQ0FBQztvQkFDN0ssSUFBSSxDQUFDO3dCQUNELFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSTs0QkFDcEIsQ0FBQyxDQUFDLEtBQUs7NEJBQ1AsQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ3RCLENBQUM7b0JBQ0QsT0FBTyxDQUFDLEVBQUUsQ0FBQzt3QkFDUCxNQUFNLElBQUksNkJBQWEsQ0FBQyxrQ0FBa0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUMxRixDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsSUFBQSxvQ0FBMkIsRUFBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDakUsQ0FBQztZQUNELEdBQUcsQ0FBQyxJQUFJLENBQUMseUNBQXlDLENBQUMsQ0FBQztZQUNwRCxJQUFJLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDO29CQUNELE1BQU0sT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNuQyxDQUFDO2dCQUNELE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ1AsTUFBTSxJQUFJLDZCQUFhLENBQUMscUNBQXFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3RFLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDbkMsQ0FBQztJQUNELEtBQUssQ0FBQyxxQkFBcUI7UUFDdkIsTUFBTSxHQUFHLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNsRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQywrQkFBZ0IsQ0FBQyxDQUFDO1FBQ3RELEtBQUssTUFBTSxPQUFPLElBQUksUUFBUTtZQUMxQixJQUFJLENBQUM7Z0JBQ0QsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDVixHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNoRCxNQUFNLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDN0IsQ0FBQztZQUNMLENBQUM7WUFDRCxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNQLEdBQUcsQ0FBQyxLQUFLLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbkQsQ0FBQztRQUNMLElBQUksQ0FBQztZQUNELE1BQU0sY0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdCLENBQUM7UUFDRCxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1AsR0FBRyxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRCxDQUFDO0lBQ0wsQ0FBQztDQUNKLENBQUM7QUFPTywwQ0FBZTtBQU54QiwwQkFBQSxlQUFlLEdBQUcsaUJBQWlCLEdBQUcsVUFBVSxDQUFDO0lBQzdDLElBQUEsZUFBTSxHQUFFO0lBQ1IsSUFBQSxlQUFNLEVBQUMsRUFBRSxDQUFDO0lBQ1YsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFBLGVBQU0sRUFBQyxtQ0FBb0IsQ0FBQyxDQUFDO0lBQ3hDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLE1BQU0sRUFBRSxnQkFBUyxDQUFDLENBQUM7Q0FDdkQsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUVwQiw4M1pBQTgzWiIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcbnZhciBfX21ldGFkYXRhID0gKHRoaXMgJiYgdGhpcy5fX21ldGFkYXRhKSB8fCBmdW5jdGlvbiAoaywgdikge1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShrLCB2KTtcbn07XG52YXIgX19wYXJhbSA9ICh0aGlzICYmIHRoaXMuX19wYXJhbSkgfHwgZnVuY3Rpb24gKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxufTtcbnZhciBEZWNhZkNvcmVNb2R1bGVfMTtcbmltcG9ydCB7IEdsb2JhbCwgSW5qZWN0LCBNb2R1bGUsIH0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQgeyBBUFBfSU5URVJDRVBUT1IsIE1vZHVsZVJlZiB9IGZyb20gXCJAbmVzdGpzL2NvcmVcIjtcbmltcG9ydCB7IERFQ0FGX0FEQVBURVJfSUQsIERFQ0FGX0hBTkRMRVJTLCBERUNBRl9NT0RVTEVfT1BUSU9OUywgfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IERlY2FmUmVxdWVzdEhhbmRsZXJJbnRlcmNlcHRvciwgfSBmcm9tIFwiLi9pbnRlcmNlcHRvcnMvaW5kZXguanNcIjtcbmltcG9ydCB7IERlY2FmSGFuZGxlckV4ZWN1dG9yLCBEZWNhZlJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIi4vcmVxdWVzdC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgQWRhcHRlciwgUGVyc2lzdGVuY2VTZXJ2aWNlLCBTZXJ2aWNlIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBnZXRSZWdpc3RlcmVkRGVjYWZQcm92aWRlcnMgfSBmcm9tIFwiLi9kZWNvcmF0b3JzLmpzXCI7XG5pbXBvcnQgeyBJbnRlcm5hbEVycm9yIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5pbXBvcnQgeyByZXF1ZXN0VG9Db250ZXh0VHJhbnNmb3JtZXIsIH0gZnJvbSBcIkBkZWNhZi10cy9mb3ItaHR0cC9zZXJ2ZXJcIjtcbmxldCBEZWNhZkNvcmVNb2R1bGUgPSBjbGFzcyBEZWNhZkNvcmVNb2R1bGUge1xuICAgIHN0YXRpYyB7IERlY2FmQ29yZU1vZHVsZV8xID0gdGhpczsgfVxuICAgIHN0YXRpYyBnZXQgcGVyc2lzdGVuY2UoKSB7XG4gICAgICAgIGlmICghdGhpcy5fcGVyc2lzdGVuY2UpXG4gICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcIlBlcnNpc3RlbmNlIHNlcnZpY2Ugbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgICByZXR1cm4gdGhpcy5fcGVyc2lzdGVuY2U7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgbG9nKCkge1xuICAgICAgICBpZiAoIXRoaXMuX2xvZ2dlcilcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlciA9IExvZ2dpbmcuZm9yKERlY2FmQ29yZU1vZHVsZV8xKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvZ2dlcjtcbiAgICB9XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgbW9kdWxlUmVmKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIHRoaXMubW9kdWxlUmVmID0gbW9kdWxlUmVmO1xuICAgIH1cbiAgICBzdGF0aWMgZm9yUm9vdChvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmZvclJvb3QpO1xuICAgICAgICBjb25zdCBkZWNhZlByb3ZpZGVycyA9IGdldFJlZ2lzdGVyZWREZWNhZlByb3ZpZGVycygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbW9kdWxlOiBEZWNhZkNvcmVNb2R1bGVfMSxcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgIHsgcHJvdmlkZTogREVDQUZfTU9EVUxFX09QVElPTlMsIHVzZVZhbHVlOiBvcHRpb25zIH0sXG4gICAgICAgICAgICAgICAgeyBwcm92aWRlOiBERUNBRl9BREFQVEVSX0lELCB1c2VWYWx1ZTogdGhpcy5wZXJzaXN0ZW5jZT8uY2xpZW50IH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiBERUNBRl9IQU5ETEVSUyxcbiAgICAgICAgICAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4gb3B0aW9ucy5oYW5kbGVycz8ubWFwKChIKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2cuaW5mbyhgUmVnaXN0ZXJlZCByZXF1ZXN0IGhhbmRsZXI6ICR7SC5uYW1lfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBIKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pID8/IFtdLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgRGVjYWZSZXF1ZXN0Q29udGV4dCxcbiAgICAgICAgICAgICAgICBEZWNhZkhhbmRsZXJFeGVjdXRvcixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IEFQUF9JTlRFUkNFUFRPUixcbiAgICAgICAgICAgICAgICAgICAgdXNlQ2xhc3M6IERlY2FmUmVxdWVzdEhhbmRsZXJJbnRlcmNlcHRvcixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC4uLmRlY2FmUHJvdmlkZXJzLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGV4cG9ydHM6IFtcbiAgICAgICAgICAgICAgICBERUNBRl9NT0RVTEVfT1BUSU9OUyxcbiAgICAgICAgICAgICAgICBERUNBRl9BREFQVEVSX0lELFxuICAgICAgICAgICAgICAgIERFQ0FGX0hBTkRMRVJTLFxuICAgICAgICAgICAgICAgIERlY2FmUmVxdWVzdENvbnRleHQsXG4gICAgICAgICAgICAgICAgRGVjYWZIYW5kbGVyRXhlY3V0b3IsXG4gICAgICAgICAgICAgICAgLi4uZGVjYWZQcm92aWRlcnMubWFwKChwcm92aWRlcikgPT4gcHJvdmlkZXIucHJvdmlkZSksXG4gICAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgYXN5bmMgYm9vdFBlcnNpc3RlbmNlKG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgbG9nID0gdGhpcy5sb2cuZm9yKHRoaXMuYm9vdFBlcnNpc3RlbmNlKTtcbiAgICAgICAgaWYgKCF0aGlzLl9wZXJzaXN0ZW5jZSkge1xuICAgICAgICAgICAgY29uc3QgdHJpbW1lZCA9IG9wdGlvbnMuY29uZi5tYXAoKFtjb250ciwgY2ZnLCAuLi5hcmdzXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvc3NpYmxlID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgICAgICBpZiAoIXBvc3NpYmxlKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2NvbnRyLCBjZmddO1xuICAgICAgICAgICAgICAgIHJldHVybiBbY29udHIsIGNmZywgLi4uYXJnc107XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX3BlcnNpc3RlbmNlID0gbmV3IFBlcnNpc3RlbmNlU2VydmljZSgpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fcGVyc2lzdGVuY2UuYm9vdCh0cmltbWVkKTtcbiAgICAgICAgICAgIGNvbnN0IGNsaWVudHMgPSB0aGlzLl9wZXJzaXN0ZW5jZS5jbGllbnQ7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsaWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjID0gb3B0aW9ucy5jb25mW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvc3NpYmxlVHJhbnNmID0gYy5zbGljZSgyLCBjLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgbGV0IHRyYW5zZm9ybWVyID0gcG9zc2libGVUcmFuc2YucG9wKCk7XG4gICAgICAgICAgICAgICAgaWYgKCF0cmFuc2Zvcm1lciB8fFxuICAgICAgICAgICAgICAgICAgICAhdHJhbnNmb3JtZXIuZnJvbSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ciA9IEFkYXB0ZXIudHJhbnNmb3JtZXJGb3IoY2xpZW50c1tpXS5mbGF2b3VyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb250cilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBObyB0cmFuc2Zvcm1lciBmb3VuZCBmb3IgZmxhdm91ciAke2NsaWVudHNbaV0uZmxhdm91cn0uIHlvdSBzaG91bGQgZWl0aGVyIEByZXF1ZXN0VG9Db250ZXh0VHJhbnNmb3JtZXIgb3IgcHJvdmlkZSBhIHRyYW5zZm9ybWVyIGluIHRoZSBjb25maWdgKTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVyID0gY29udHIuZnJvbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY29udHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBjb250cigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihgRmFpbGVkIHRvIGJvb3QgdHJhbnNmb3JtZXIgZm9yICR7Y2xpZW50c1tpXS5mbGF2b3VyfTogJHtlfWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlcXVlc3RUb0NvbnRleHRUcmFuc2Zvcm1lcihjbGllbnRzW2ldLmZsYXZvdXIpKHRyYW5zZm9ybWVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZy5pbmZvKFwicGVyc2lzdGVuY2UgbGF5ZXIgY3JlYXRlZCBzdWNjZXNzZnVsbHkhXCIpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5pdGlhbGl6YXRpb24pIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBvcHRpb25zLmluaXRpYWxpemF0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBhcHBsaWNhdGlvbjogJHtlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wZXJzaXN0ZW5jZS5jbGllbnQ7XG4gICAgfVxuICAgIGFzeW5jIG9uQXBwbGljYXRpb25TaHV0ZG93bigpIHtcbiAgICAgICAgY29uc3QgbG9nID0gRGVjYWZDb3JlTW9kdWxlXzEubG9nLmZvcih0aGlzLm9uQXBwbGljYXRpb25TaHV0ZG93bik7XG4gICAgICAgIGNvbnN0IGFkYXB0ZXJzID0gdGhpcy5tb2R1bGVSZWYuZ2V0KERFQ0FGX0FEQVBURVJfSUQpO1xuICAgICAgICBmb3IgKGNvbnN0IGFkYXB0ZXIgb2YgYWRhcHRlcnMpXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChhZGFwdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvZy5pbmZvKGBTaHV0dGluZyBkb3duICR7YWRhcHRlci50b1N0cmluZygpfWApO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBhZGFwdGVyLnNodXRkb3duKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBsb2cuZXJyb3IoYEZhaWxlZCB0byBzaHV0ZG93biBhcHBsaWNhdGlvbmAsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgU2VydmljZS5zaHV0ZG93bigpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoYEZhaWxlZCB0byBzaHV0ZG93biBzZXJ2aWNlc2AsIGUpO1xuICAgICAgICB9XG4gICAgfVxufTtcbkRlY2FmQ29yZU1vZHVsZSA9IERlY2FmQ29yZU1vZHVsZV8xID0gX19kZWNvcmF0ZShbXG4gICAgR2xvYmFsKCksXG4gICAgTW9kdWxlKHt9KSxcbiAgICBfX3BhcmFtKDAsIEluamVjdChERUNBRl9NT0RVTEVfT1BUSU9OUykpLFxuICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbT2JqZWN0LCBNb2R1bGVSZWZdKVxuXSwgRGVjYWZDb3JlTW9kdWxlKTtcbmV4cG9ydCB7IERlY2FmQ29yZU1vZHVsZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTI5eVpTMXRiMlIxYkdVdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12WTI5eVpTMXRiMlIxYkdVdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN096czdPenRCUVVGQkxFOUJRVThzUlVGRlRDeE5RVUZOTEVWQlEwNHNUVUZCVFN4RlFVTk9MRTFCUVUwc1IwRkZVQ3hOUVVGTkxHZENRVUZuUWl4RFFVRkRPMEZCUTNoQ0xFOUJRVThzUlVGQlJTeGxRVUZsTEVWQlFVVXNVMEZCVXl4RlFVRkZMRTFCUVUwc1kwRkJZeXhEUVVGRE8wRkJSVEZFTEU5QlFVOHNSVUZEVEN4blFrRkJaMElzUlVGRGFFSXNZMEZCWXl4RlFVTmtMRzlDUVVGdlFpeEhRVU55UWl4MVFrRkJiMEk3UVVGRGNrSXNUMEZCVHl4RlFVTk1MRGhDUVVFNFFpeEhRVU12UWl4blEwRkJkVUk3UVVGRGVFSXNUMEZCVHl4RlFVRkZMRzlDUVVGdlFpeEZRVUZGTEcxQ1FVRnRRaXhGUVVGRkxESkNRVUZyUWp0QlFVVjBSU3hQUVVGUExFVkJRVVVzVDBGQlR5eEZRVUZGTEd0Q1FVRnJRaXhGUVVGRkxFOUJRVThzUlVGQlJTeE5RVUZOTEdkQ1FVRm5RaXhEUVVGRE8wRkJRM1JGTEU5QlFVOHNSVUZCUlN3eVFrRkJNa0lzUlVGQlJTeDNRa0ZCY1VJN1FVRkRNMFFzVDBGQlR5eEZRVUZGTEdGQlFXRXNSVUZCUlN4TlFVRk5MSGxDUVVGNVFpeERRVUZETzBGQlEzaEVMRTlCUVU4c1JVRkJWU3hQUVVGUExFVkJRVVVzVFVGQlRTeHRRa0ZCYlVJc1EwRkJRenRCUVVOd1JDeFBRVUZQTEVWQlJVd3NNa0pCUVRKQ0xFZEJRelZDTEUxQlFVMHNNa0pCUVRKQ0xFTkJRVU03UVVGSk5VSXNTVUZCVFN4bFFVRmxMRWRCUVhKQ0xFMUJRVTBzWlVGQlpUczdTVUZQYUVJc1RVRkJUU3hMUVVGTExGZEJRVmM3VVVGRE9VSXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWk8xbEJRM0JDTEUxQlFVMHNTVUZCU1N4aFFVRmhMRU5CUVVNc2NVTkJRWEZETEVOQlFVTXNRMEZCUXp0UlFVTnFSU3hQUVVGUExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTTdTVUZETTBJc1EwRkJRenRKUVVWVExFMUJRVTBzUzBGQlN5eEhRVUZITzFGQlEzUkNMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR6dFpRVUZGTEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eHBRa0ZCWlN4RFFVRkRMRU5CUVVNN1VVRkRMMFFzVDBGQlR5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRPMGxCUTNSQ0xFTkJRVU03U1VGRlJDeFpRVVZ0UWl4UFFVRXdReXhGUVVNeFF5eFRRVUZ2UWp0UlFVUndRaXhaUVVGUExFZEJRVkFzVDBGQlR5eERRVUZ0UXp0UlFVTXhReXhqUVVGVExFZEJRVlFzVTBGQlV5eERRVUZYTzBsQlEzQkRMRU5CUVVNN1NVRkZTaXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEU5QlFUSkNPMUZCUTNoRExFMUJRVTBzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTjJReXhOUVVGTkxHTkJRV01zUjBGQlJ5d3lRa0ZCTWtJc1JVRkJSU3hEUVVGRE8xRkJRM0pFTEU5QlFVODdXVUZEVEN4TlFVRk5MRVZCUVVVc2FVSkJRV1U3V1VGRGRrSXNVMEZCVXl4RlFVRkZPMmRDUVVOVUxFVkJRVVVzVDBGQlR5eEZRVUZGTEc5Q1FVRnZRaXhGUVVGRkxGRkJRVkVzUlVGQlJTeFBRVUZQTEVWQlFVVTdaMEpCUTNCRUxFVkJRVVVzVDBGQlR5eEZRVUZGTEdkQ1FVRm5RaXhGUVVGRkxGRkJRVkVzUlVGQlJTeEpRVUZKTEVOQlFVTXNWMEZCVnl4RlFVRkZMRTFCUVUwc1JVRkJSVHRuUWtGRGFrVTdiMEpCUTBVc1QwRkJUeXhGUVVGRkxHTkJRV003YjBKQlEzWkNMRlZCUVZVc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGRFppeFBRVUZQTEVOQlFVTXNVVUZCVVN4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTzNkQ1FVTXhRaXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEN0Q1FVRXJRaXhEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNRMEZCUXp0M1FrRkRiRVFzVDBGQlR5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRPMjlDUVVOcVFpeERRVUZETEVOQlFVTXNTVUZCU1N4RlFVRkZPMmxDUVVOWU8yZENRVU5FTEcxQ1FVRnRRanRuUWtGRGJrSXNiMEpCUVc5Q08yZENRVU53UWp0dlFrRkRSU3hQUVVGUExFVkJRVVVzWlVGQlpUdHZRa0ZEZUVJc1VVRkJVU3hGUVVGRkxEaENRVUU0UWp0cFFrRkRla003WjBKQlEwUXNSMEZCUnl4alFVRmpPMkZCUTJ4Q08xbEJRMFFzVDBGQlR5eEZRVUZGTzJkQ1FVTlFMRzlDUVVGdlFqdG5Ra0ZEY0VJc1owSkJRV2RDTzJkQ1FVTm9RaXhqUVVGak8yZENRVU5rTEcxQ1FVRnRRanRuUWtGRGJrSXNiMEpCUVc5Q08yZENRVU53UWl4SFFVRkhMR05CUVdNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eFJRVUZSTEVWQlFVVXNSVUZCUlN4RFFVRkRMRkZCUVZFc1EwRkJReXhQUVVGUExFTkJRVU03WVVGRGRFUTdVMEZEUml4RFFVRkRPMGxCUTBvc1EwRkJRenRKUVVWRUxFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNaVUZCWlN4RFFVTXhRaXhQUVVFeVFqdFJRVVV6UWl4TlFVRk5MRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU03VVVGRkwwTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFVkJRVVVzUTBGQlF6dFpRVU4yUWl4TlFVRk5MRTlCUVU4c1IwRkJSeXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhGUVVGRkxFZEJRVWNzUlVGQlJTeEhRVUZITEVsQlFVa3NRMEZCUXl4RlFVRkZMRVZCUVVVN1owSkJRM3BFTEUxQlFVMHNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dG5Ra0ZETlVJc1NVRkJTU3hEUVVGRExGRkJRVkU3YjBKQlFVVXNUMEZCVHl4RFFVRkRMRXRCUVVzc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dG5Ra0ZEYmtNc1QwRkJUeXhEUVVGRExFdEJRVXNzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRaUVVNdlFpeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTklMRWxCUVVrc1EwRkJReXhaUVVGWkxFZEJRVWNzU1VGQlNTeHJRa0ZCYTBJc1JVRkJSU3hEUVVGRE8xbEJRemRETEUxQlFVMHNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdXVUZEZEVNc1RVRkJUU3hQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4TlFVRk5MRU5CUVVNN1dVRkRla01zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFOUJRVThzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJRenRuUWtGRGVFTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkRNVUlzVFVGQlRTeGpRVUZqTEVkQlFVY3NRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMmRDUVVNMVF5eEpRVUZKTEZkQlFWY3NSMEZCUnl4alFVRmpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU03WjBKQlEzWkRMRWxCUTBVc1EwRkJReXhYUVVGWE8yOUNRVU5hTEVOQlFVVXNWMEZCWjBRc1EwRkJReXhKUVVGSkxFVkJRM1pFTEVOQlFVTTdiMEpCUTBRc1RVRkJUU3hMUVVGTExFZEJRVWNzVDBGQlR5eERRVUZETEdOQlFXTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdiMEpCUTNwRUxFbEJRVWtzUTBGQlF5eExRVUZMTzNkQ1FVTlNMRTFCUVUwc1NVRkJTU3hoUVVGaExFTkJRM0pDTEc5RFFVRnZReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4NVJrRkJlVVlzUTBGRGFFb3NRMEZCUXp0dlFrRkRTaXhKUVVGSkxFTkJRVU03ZDBKQlEwZ3NWMEZCVnl4SFFVRkpMRXRCUVRCRExFTkJRVU1zU1VGQlNUczBRa0ZETlVRc1EwRkJReXhEUVVGRExFdEJRVXM3TkVKQlExQXNRMEZCUXl4RFFVRkRMRWxCUVVzc1MwRkJkVVFzUlVGQlJTeERRVUZETzI5Q1FVTnlSU3hEUVVGRE8yOUNRVUZETEU5QlFVOHNRMEZCVlN4RlFVRkZMRU5CUVVNN2QwSkJRM0JDTEUxQlFVMHNTVUZCU1N4aFFVRmhMRU5CUTNKQ0xHdERRVUZyUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eExRVUZMTEVOQlFVTXNSVUZCUlN4RFFVTTNSQ3hEUVVGRE8yOUNRVU5LTEVOQlFVTTdaMEpCUTBnc1EwRkJRenRuUWtGRFJDd3lRa0ZCTWtJc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU03V1VGREwwUXNRMEZCUXp0WlFVTkVMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zZVVOQlFYbERMRU5CUVVNc1EwRkJRenRaUVVWd1JDeEpRVUZKTEU5QlFVOHNRMEZCUXl4alFVRmpMRVZCUVVVc1EwRkJRenRuUWtGRE0wSXNTVUZCU1N4RFFVRkRPMjlDUVVOSUxFMUJRVTBzVDBGQlR5eERRVUZETEdOQlFXTXNSVUZCUlN4RFFVRkRPMmRDUVVOcVF5eERRVUZETzJkQ1FVRkRMRTlCUVU4c1EwRkJWU3hGUVVGRkxFTkJRVU03YjBKQlEzQkNMRTFCUVUwc1NVRkJTU3hoUVVGaExFTkJRVU1zY1VOQlFYRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU03WjBKQlEzQkZMRU5CUVVNN1dVRkRTQ3hEUVVGRE8xRkJRMGdzUTBGQlF6dFJRVVZFTEU5QlFVOHNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhOUVVGTkxFTkJRVU03U1VGRGFrTXNRMEZCUXp0SlFVVkVMRXRCUVVzc1EwRkJReXh4UWtGQmNVSTdVVUZEZWtJc1RVRkJUU3hIUVVGSExFZEJRVWNzYVVKQlFXVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eHhRa0ZCY1VJc1EwRkJReXhEUVVGRE8xRkJRMmhGTEUxQlFVMHNVVUZCVVN4SFFVTmFMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZOTEdkQ1FVRm5RaXhEUVVGRExFTkJRVU03VVVGRE5VTXNTMEZCU3l4TlFVRk5MRTlCUVU4c1NVRkJTU3hSUVVGUk8xbEJRelZDTEVsQlFVa3NRMEZCUXp0blFrRkRTQ3hKUVVGSkxFOUJRVThzUlVGQlJTeERRVUZETzI5Q1FVTmFMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zYVVKQlFXbENMRTlCUVU4c1EwRkJReXhSUVVGUkxFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdiMEpCUTJoRUxFMUJRVTBzVDBGQlR5eERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMmRDUVVNelFpeERRVUZETzFsQlEwZ3NRMEZCUXp0WlFVRkRMRTlCUVU4c1EwRkJWU3hGUVVGRkxFTkJRVU03WjBKQlEzQkNMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zWjBOQlFXZERMRVZCUVVVc1EwRkJWU3hEUVVGRExFTkJRVU03V1VGRE1VUXNRMEZCUXp0UlFVTklMRWxCUVVrc1EwRkJRenRaUVVOSUxFMUJRVTBzVDBGQlR5eERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMUZCUXpOQ0xFTkJRVU03VVVGQlF5eFBRVUZQTEVOQlFWVXNSVUZCUlN4RFFVRkRPMWxCUTNCQ0xFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNOa0pCUVRaQ0xFVkJRVVVzUTBGQlZTeERRVUZETEVOQlFVTTdVVUZEZGtRc1EwRkJRenRKUVVOSUxFTkJRVU03UTBGRFJpeERRVUZCTzBGQmJrbFpMR1ZCUVdVN1NVRkdNMElzVFVGQlRTeEZRVUZGTzBsQlExSXNUVUZCVFN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVc5Q1RpeFhRVUZCTEUxQlFVMHNRMEZCUXl4dlFrRkJiMElzUTBGQlF5eERRVUZCT3paRFFVVkVMRk5CUVZNN1IwRnlRalZDTEdWQlFXVXNRMEZ0U1ROQ0lpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIdGNiaUFnUkhsdVlXMXBZMDF2WkhWc1pTeGNiaUFnUjJ4dlltRnNMRnh1SUNCSmJtcGxZM1FzWEc0Z0lFMXZaSFZzWlN4Y2JpQWdUMjVCY0hCc2FXTmhkR2x2YmxOb2RYUmtiM2R1TEZ4dWZTQm1jbTl0SUZ3aVFHNWxjM1JxY3k5amIyMXRiMjVjSWp0Y2JtbHRjRzl5ZENCN0lFRlFVRjlKVGxSRlVrTkZVRlJQVWl3Z1RXOWtkV3hsVW1WbUlIMGdabkp2YlNCY0lrQnVaWE4wYW5NdlkyOXlaVndpTzF4dWFXMXdiM0owSUhSNWNHVWdleUJFWldOaFprMXZaSFZzWlU5d2RHbHZibk1nZlNCbWNtOXRJRndpTGk5MGVYQmxjMXdpTzF4dWFXMXdiM0owSUh0Y2JpQWdSRVZEUVVaZlFVUkJVRlJGVWw5SlJDeGNiaUFnUkVWRFFVWmZTRUZPUkV4RlVsTXNYRzRnSUVSRlEwRkdYMDFQUkZWTVJWOVBVRlJKVDA1VExGeHVmU0JtY205dElGd2lMaTlqYjI1emRHRnVkSE5jSWp0Y2JtbHRjRzl5ZENCN1hHNGdJRVJsWTJGbVVtVnhkV1Z6ZEVoaGJtUnNaWEpKYm5SbGNtTmxjSFJ2Y2l4Y2JuMGdabkp2YlNCY0lpNHZhVzUwWlhKalpYQjBiM0p6WENJN1hHNXBiWEJ2Y25RZ2V5QkVaV05oWmtoaGJtUnNaWEpGZUdWamRYUnZjaXdnUkdWallXWlNaWEYxWlhOMFEyOXVkR1Y0ZENCOUlHWnliMjBnWENJdUwzSmxjWFZsYzNSY0lqdGNibWx0Y0c5eWRDQjdJRU52Ym5OMGNuVmpkRzl5SUgwZ1puSnZiU0JjSWtCa1pXTmhaaTEwY3k5a1pXTnZjbUYwYVc5dVhDSTdYRzVwYlhCdmNuUWdleUJCWkdGd2RHVnlMQ0JRWlhKemFYTjBaVzVqWlZObGNuWnBZMlVzSUZObGNuWnBZMlVnZlNCbWNtOXRJRndpUUdSbFkyRm1MWFJ6TDJOdmNtVmNJanRjYm1sdGNHOXlkQ0I3SUdkbGRGSmxaMmx6ZEdWeVpXUkVaV05oWmxCeWIzWnBaR1Z5Y3lCOUlHWnliMjBnWENJdUwyUmxZMjl5WVhSdmNuTmNJanRjYm1sdGNHOXlkQ0I3SUVsdWRHVnlibUZzUlhKeWIzSWdmU0JtY205dElGd2lRR1JsWTJGbUxYUnpMMlJpTFdSbFkyOXlZWFJ2Y25OY0lqdGNibWx0Y0c5eWRDQjdJRXh2WjJkbGNpd2dURzluWjJsdVp5QjlJR1p5YjIwZ1hDSkFaR1ZqWVdZdGRITXZiRzluWjJsdVoxd2lPMXh1YVcxd2IzSjBJSHRjYmlBZ1VtVnhkV1Z6ZEZSdlEyOXVkR1Y0ZEZSeVlXNXpabTl5YldWeUxGeHVJQ0J5WlhGMVpYTjBWRzlEYjI1MFpYaDBWSEpoYm5ObWIzSnRaWElzWEc1OUlHWnliMjBnWENKQVpHVmpZV1l0ZEhNdlptOXlMV2gwZEhBdmMyVnlkbVZ5WENJN1hHNWNia0JIYkc5aVlXd29LVnh1UUUxdlpIVnNaU2g3ZlNsY2JtVjRjRzl5ZENCamJHRnpjeUJFWldOaFprTnZjbVZOYjJSMWJHVThRMDlPUml3Z1FVUkJVRlJGVWlCbGVIUmxibVJ6SUVGa1lYQjBaWEk4UTA5T1Jpd2dZVzU1TENCaGJua3NJR0Z1ZVQ0K1hHNGdJR2x0Y0d4bGJXVnVkSE1nVDI1QmNIQnNhV05oZEdsdmJsTm9kWFJrYjNkdVhHNTdYRzRnSUhCeWFYWmhkR1VnYzNSaGRHbGpJRjlzYjJkblpYSTZJRXh2WjJkbGNqdGNibHh1SUNCd2NtbDJZWFJsSUhOMFlYUnBZeUJmY0dWeWMybHpkR1Z1WTJVL09pQlFaWEp6YVhOMFpXNWpaVk5sY25acFkyVThRV1JoY0hSbGNqeGhibmtzSUdGdWVTd2dZVzU1TENCaGJuaytQanRjYmx4dUlDQndjbTkwWldOMFpXUWdjM1JoZEdsaklHZGxkQ0J3WlhKemFYTjBaVzVqWlNncE9pQlFaWEp6YVhOMFpXNWpaVk5sY25acFkyVThRV1JoY0hSbGNqeGhibmtzSUdGdWVTd2dZVzU1TENCaGJuaytQaUI3WEc0Z0lDQWdhV1lnS0NGMGFHbHpMbDl3WlhKemFYTjBaVzVqWlNsY2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCSmJuUmxjbTVoYkVWeWNtOXlLRndpVUdWeWMybHpkR1Z1WTJVZ2MyVnlkbWxqWlNCdWIzUWdhVzVwZEdsaGJHbDZaV1JjSWlrN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVgzQmxjbk5wYzNSbGJtTmxPMXh1SUNCOVhHNWNiaUFnY0hKdmRHVmpkR1ZrSUhOMFlYUnBZeUJuWlhRZ2JHOW5LQ2s2SUV4dloyZGxjaUI3WEc0Z0lDQWdhV1lnS0NGMGFHbHpMbDlzYjJkblpYSXBJSFJvYVhNdVgyeHZaMmRsY2lBOUlFeHZaMmRwYm1jdVptOXlLRVJsWTJGbVEyOXlaVTF2WkhWc1pTazdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVYMnh2WjJkbGNqdGNiaUFnZlZ4dVhHNGdJR052Ym5OMGNuVmpkRzl5S0Z4dUlDQWdJRUJKYm1wbFkzUW9SRVZEUVVaZlRVOUVWVXhGWDA5UVZFbFBUbE1wWEc0Z0lDQWdjSEpwZG1GMFpTQnlaV0ZrYjI1c2VTQnZjSFJwYjI1ek9pQkVaV05oWmsxdlpIVnNaVTl3ZEdsdmJuTThRMDlPUml3Z1FVUkJVRlJGVWo0c1hHNGdJQ0FnY0hKcGRtRjBaU0J5WldGa2IyNXNlU0J0YjJSMWJHVlNaV1k2SUUxdlpIVnNaVkpsWmx4dUlDQXBJSHQ5WEc1Y2JpQWdjM1JoZEdsaklHWnZjbEp2YjNRb2IzQjBhVzl1Y3pvZ1JHVmpZV1pOYjJSMWJHVlBjSFJwYjI1ektUb2dSSGx1WVcxcFkwMXZaSFZzWlNCN1hHNGdJQ0FnWTI5dWMzUWdiRzluSUQwZ2RHaHBjeTVzYjJjdVptOXlLSFJvYVhNdVptOXlVbTl2ZENrN1hHNGdJQ0FnWTI5dWMzUWdaR1ZqWVdaUWNtOTJhV1JsY25NZ1BTQm5aWFJTWldkcGMzUmxjbVZrUkdWallXWlFjbTkyYVdSbGNuTW9LVHRjYmlBZ0lDQnlaWFIxY200Z2UxeHVJQ0FnSUNBZ2JXOWtkV3hsT2lCRVpXTmhaa052Y21WTmIyUjFiR1VzWEc0Z0lDQWdJQ0J3Y205MmFXUmxjbk02SUZ0Y2JpQWdJQ0FnSUNBZ2V5QndjbTkyYVdSbE9pQkVSVU5CUmw5TlQwUlZURVZmVDFCVVNVOU9VeXdnZFhObFZtRnNkV1U2SUc5d2RHbHZibk1nZlN4Y2JpQWdJQ0FnSUNBZ2V5QndjbTkyYVdSbE9pQkVSVU5CUmw5QlJFRlFWRVZTWDBsRUxDQjFjMlZXWVd4MVpUb2dkR2hwY3k1d1pYSnphWE4wWlc1alpUOHVZMnhwWlc1MElIMHNYRzRnSUNBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnSUNCd2NtOTJhV1JsT2lCRVJVTkJSbDlJUVU1RVRFVlNVeXhjYmlBZ0lDQWdJQ0FnSUNCMWMyVkdZV04wYjNKNU9pQW9LU0E5UGx4dUlDQWdJQ0FnSUNBZ0lDQWdiM0IwYVc5dWN5NW9ZVzVrYkdWeWN6OHViV0Z3S0NoSUtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR3h2Wnk1cGJtWnZLR0JTWldkcGMzUmxjbVZrSUhKbGNYVmxjM1FnYUdGdVpHeGxjam9nSkh0SUxtNWhiV1Y5WUNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJ1WlhjZ1NDZ3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTa2dQejhnVzEwc1hHNGdJQ0FnSUNBZ0lIMHNYRzRnSUNBZ0lDQWdJRVJsWTJGbVVtVnhkV1Z6ZEVOdmJuUmxlSFFzWEc0Z0lDQWdJQ0FnSUVSbFkyRm1TR0Z1Wkd4bGNrVjRaV04xZEc5eUxGeHVJQ0FnSUNBZ0lDQjdYRzRnSUNBZ0lDQWdJQ0FnY0hKdmRtbGtaVG9nUVZCUVgwbE9WRVZTUTBWUVZFOVNMRnh1SUNBZ0lDQWdJQ0FnSUhWelpVTnNZWE56T2lCRVpXTmhabEpsY1hWbGMzUklZVzVrYkdWeVNXNTBaWEpqWlhCMGIzSXNYRzRnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0FnSUM0dUxtUmxZMkZtVUhKdmRtbGtaWEp6TEZ4dUlDQWdJQ0FnWFN4Y2JpQWdJQ0FnSUdWNGNHOXlkSE02SUZ0Y2JpQWdJQ0FnSUNBZ1JFVkRRVVpmVFU5RVZVeEZYMDlRVkVsUFRsTXNYRzRnSUNBZ0lDQWdJRVJGUTBGR1gwRkVRVkJVUlZKZlNVUXNYRzRnSUNBZ0lDQWdJRVJGUTBGR1gwaEJUa1JNUlZKVExGeHVJQ0FnSUNBZ0lDQkVaV05oWmxKbGNYVmxjM1JEYjI1MFpYaDBMRnh1SUNBZ0lDQWdJQ0JFWldOaFpraGhibVJzWlhKRmVHVmpkWFJ2Y2l4Y2JpQWdJQ0FnSUNBZ0xpNHVaR1ZqWVdaUWNtOTJhV1JsY25NdWJXRndLQ2h3Y205MmFXUmxjaWtnUFQ0Z2NISnZkbWxrWlhJdWNISnZkbWxrWlNrc1hHNGdJQ0FnSUNCZExGeHVJQ0FnSUgwN1hHNGdJSDFjYmx4dUlDQnpkR0YwYVdNZ1lYTjVibU1nWW05dmRGQmxjbk5wYzNSbGJtTmxLRnh1SUNBZ0lHOXdkR2x2Ym5NNklFUmxZMkZtVFc5a2RXeGxUM0IwYVc5dWMxeHVJQ0FwT2lCUWNtOXRhWE5sUEVGa1lYQjBaWEk4WVc1NUxDQmhibmtzSUdGdWVTd2dZVzU1UGx0ZFBpQjdYRzRnSUNBZ1kyOXVjM1FnYkc5bklEMGdkR2hwY3k1c2IyY3VabTl5S0hSb2FYTXVZbTl2ZEZCbGNuTnBjM1JsYm1ObEtUdGNibHh1SUNBZ0lHbG1JQ2doZEdocGN5NWZjR1Z5YzJsemRHVnVZMlVwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJSFJ5YVcxdFpXUWdQU0J2Y0hScGIyNXpMbU52Ym1ZdWJXRndLQ2hiWTI5dWRISXNJR05tWnl3Z0xpNHVZWEpuYzEwcElEMCtJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjRzl6YzJsaWJHVWdQU0JoY21kekxuQnZjQ2dwTzF4dUlDQWdJQ0FnSUNCcFppQW9JWEJ2YzNOcFlteGxLU0J5WlhSMWNtNGdXMk52Ym5SeUxDQmpabWRkTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnVzJOdmJuUnlMQ0JqWm1jc0lDNHVMbUZ5WjNOZE8xeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQjBhR2x6TGw5d1pYSnphWE4wWlc1alpTQTlJRzVsZHlCUVpYSnphWE4wWlc1alpWTmxjblpwWTJVb0tUdGNiaUFnSUNBZ0lHRjNZV2wwSUhSb2FYTXVYM0JsY25OcGMzUmxibU5sTG1KdmIzUW9kSEpwYlcxbFpDazdYRzRnSUNBZ0lDQmpiMjV6ZENCamJHbGxiblJ6SUQwZ2RHaHBjeTVmY0dWeWMybHpkR1Z1WTJVdVkyeHBaVzUwTzF4dUlDQWdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCamJHbGxiblJ6TG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ0lDQWdJR052Ym5OMElHTWdQU0J2Y0hScGIyNXpMbU52Ym1aYmFWMDdYRzRnSUNBZ0lDQWdJR052Ym5OMElIQnZjM05wWW14bFZISmhibk5tSUQwZ1l5NXpiR2xqWlNneUxDQmpMbXhsYm1kMGFDazdYRzRnSUNBZ0lDQWdJR3hsZENCMGNtRnVjMlp2Y20xbGNpQTlJSEJ2YzNOcFlteGxWSEpoYm5ObUxuQnZjQ2dwTzF4dUlDQWdJQ0FnSUNCcFppQW9YRzRnSUNBZ0lDQWdJQ0FnSVhSeVlXNXpabTl5YldWeUlIeDhYRzRnSUNBZ0lDQWdJQ0FnSVNoMGNtRnVjMlp2Y20xbGNpQmhjeUJTWlhGMVpYTjBWRzlEYjI1MFpYaDBWSEpoYm5ObWIzSnRaWEk4WVc1NVBpa3Vabkp2YlZ4dUlDQWdJQ0FnSUNBcElIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQmpiMjUwY2lBOUlFRmtZWEIwWlhJdWRISmhibk5tYjNKdFpYSkdiM0lvWTJ4cFpXNTBjMXRwWFM1bWJHRjJiM1Z5S1R0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvSVdOdmJuUnlLVnh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFbHVkR1Z5Ym1Gc1JYSnliM0lvWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR0JPYnlCMGNtRnVjMlp2Y20xbGNpQm1iM1Z1WkNCbWIzSWdabXhoZG05MWNpQWtlMk5zYVdWdWRITmJhVjB1Wm14aGRtOTFjbjB1SUhsdmRTQnphRzkxYkdRZ1pXbDBhR1Z5SUVCeVpYRjFaWE4wVkc5RGIyNTBaWGgwVkhKaGJuTm1iM0p0WlhJZ2IzSWdjSEp2ZG1sa1pTQmhJSFJ5WVc1elptOXliV1Z5SUdsdUlIUm9aU0JqYjI1bWFXZGdYRzRnSUNBZ0lDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwY21GdWMyWnZjbTFsY2lBOUlDaGpiMjUwY2lCaGN5QlNaWEYxWlhOMFZHOURiMjUwWlhoMFZISmhibk5tYjNKdFpYSThZVzU1UGlrdVpuSnZiVnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQS9JR052Ym5SeVhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSURvZ2JtVjNJQ2hqYjI1MGNpQmhjeUJEYjI1emRISjFZM1J2Y2p4U1pYRjFaWE4wVkc5RGIyNTBaWGgwVkhKaGJuTm1iM0p0WlhJOFlXNTVQajRwS0NrN1hHNGdJQ0FnSUNBZ0lDQWdmU0JqWVhSamFDQW9aVG9nZFc1cmJtOTNiaWtnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRWx1ZEdWeWJtRnNSWEp5YjNJb1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdCR1lXbHNaV1FnZEc4Z1ltOXZkQ0IwY21GdWMyWnZjbTFsY2lCbWIzSWdKSHRqYkdsbGJuUnpXMmxkTG1ac1lYWnZkWEo5T2lBa2UyVjlZRnh1SUNBZ0lDQWdJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2NtVnhkV1Z6ZEZSdlEyOXVkR1Y0ZEZSeVlXNXpabTl5YldWeUtHTnNhV1Z1ZEhOYmFWMHVabXhoZG05MWNpa29kSEpoYm5ObWIzSnRaWElwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYkc5bkxtbHVabThvWENKd1pYSnphWE4wWlc1alpTQnNZWGxsY2lCamNtVmhkR1ZrSUhOMVkyTmxjM05tZFd4c2VTRmNJaWs3WEc1Y2JpQWdJQ0FnSUdsbUlDaHZjSFJwYjI1ekxtbHVhWFJwWVd4cGVtRjBhVzl1S1NCN1hHNGdJQ0FnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUNBZ1lYZGhhWFFnYjNCMGFXOXVjeTVwYm1sMGFXRnNhWHBoZEdsdmJpZ3BPMXh1SUNBZ0lDQWdJQ0I5SUdOaGRHTm9JQ2hsT2lCMWJtdHViM2R1S1NCN1hHNGdJQ0FnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRWx1ZEdWeWJtRnNSWEp5YjNJb1lFWmhhV3hsWkNCMGJ5QnBibWwwYVdGc2FYcGxJR0Z3Y0d4cFkyRjBhVzl1T2lBa2UyVjlZQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1d1pYSnphWE4wWlc1alpTNWpiR2xsYm5RN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCdmJrRndjR3hwWTJGMGFXOXVVMmgxZEdSdmQyNG9LVG9nVUhKdmJXbHpaVHgyYjJsa1BpQjdYRzRnSUNBZ1kyOXVjM1FnYkc5bklEMGdSR1ZqWVdaRGIzSmxUVzlrZFd4bExteHZaeTVtYjNJb2RHaHBjeTV2YmtGd2NHeHBZMkYwYVc5dVUyaDFkR1J2ZDI0cE8xeHVJQ0FnSUdOdmJuTjBJR0ZrWVhCMFpYSnpPaUJCWkdGd2RHVnlQR0Z1ZVN3Z1lXNTVMQ0JoYm5rc0lHRnVlVDViWFNBOVhHNGdJQ0FnSUNCMGFHbHpMbTF2WkhWc1pWSmxaaTVuWlhROFlXNTVQaWhFUlVOQlJsOUJSRUZRVkVWU1gwbEVLVHRjYmlBZ0lDQm1iM0lnS0dOdmJuTjBJR0ZrWVhCMFpYSWdiMllnWVdSaGNIUmxjbk1wWEc0Z0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQnBaaUFvWVdSaGNIUmxjaWtnZTF4dUlDQWdJQ0FnSUNBZ0lHeHZaeTVwYm1adktHQlRhSFYwZEdsdVp5QmtiM2R1SUNSN1lXUmhjSFJsY2k1MGIxTjBjbWx1WnlncGZXQXBPMXh1SUNBZ0lDQWdJQ0FnSUdGM1lXbDBJR0ZrWVhCMFpYSXVjMmgxZEdSdmQyNG9LVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlNCallYUmphQ0FvWlRvZ2RXNXJibTkzYmlrZ2UxeHVJQ0FnSUNBZ0lDQnNiMmN1WlhKeWIzSW9ZRVpoYVd4bFpDQjBieUJ6YUhWMFpHOTNiaUJoY0hCc2FXTmhkR2x2Ym1Bc0lHVWdZWE1nUlhKeWIzSXBPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0JoZDJGcGRDQlRaWEoyYVdObExuTm9kWFJrYjNkdUtDazdYRzRnSUNBZ2ZTQmpZWFJqYUNBb1pUb2dkVzVyYm05M2Jpa2dlMXh1SUNBZ0lDQWdiRzluTG1WeWNtOXlLR0JHWVdsc1pXUWdkRzhnYzJoMWRHUnZkMjRnYzJWeWRtbGpaWE5nTENCbElHRnpJRVZ5Y205eUtUdGNiaUFnSUNCOVhHNGdJSDFjYm4xY2JpSmRmUT09Il19
@@ -15,6 +15,8 @@ const common_1 = require("@nestjs/common");
15
15
  const core_1 = require("@decaf-ts/core");
16
16
  const logging_1 = require("@decaf-ts/logging");
17
17
  const FromModelController_js_1 = require("./FromModelController.cjs");
18
+ const decoration_1 = require("@decaf-ts/decoration");
19
+ const constants_js_1 = require("./../constants.cjs");
18
20
  function getModuleFor(flavour) {
19
21
  var DecafModelModule_1;
20
22
  let DecafModelModule = class DecafModelModule {
@@ -26,17 +28,30 @@ function getModuleFor(flavour) {
26
28
  useFactory: () => core_1.ModelService.forModel(model),
27
29
  }));
28
30
  }
31
+ static isExposed(model, exposure) {
32
+ const override = exposure?.[model.name];
33
+ const value = typeof override !== "undefined"
34
+ ? override
35
+ : decoration_1.Metadata.get(model, decoration_1.Metadata.key(constants_js_1.DECAF_EXPOSE));
36
+ if (typeof value === "undefined")
37
+ return true;
38
+ if (value === true)
39
+ return true;
40
+ if (Array.isArray(value))
41
+ return value.includes(flavour);
42
+ return false;
43
+ }
29
44
  static forRoot(flavour, options = {}) {
30
45
  const log = this.log.for(this.forRoot);
31
46
  log.info(`Generating controllers for flavour...`);
32
- const trackedModels = core_1.Adapter.models(flavour);
47
+ const trackedModels = core_1.Adapter.models(flavour).filter((model) => this.isExposed(model, options.controllerExposure));
33
48
  let modelServices = [];
34
49
  if (options.autoServices) {
35
50
  log.info("Auto-services enabled. Initializing service generation.");
36
51
  modelServices = this.createModelServices(trackedModels);
37
52
  log.info(`Auto-services completed. ${modelServices.length} services initialized.`);
38
53
  }
39
- const controllers = trackedModels.map(FromModelController_js_1.FromModelController.create);
54
+ const controllers = trackedModels.map((model) => FromModelController_js_1.FromModelController.create(model, options.controllerConfig));
40
55
  log.info(`Generated ${controllers.length} controllers`);
41
56
  return {
42
57
  module: DecafModelModule_1,
@@ -55,5 +70,5 @@ function getModuleFor(flavour) {
55
70
  });
56
71
  return DecafModelModule;
57
72
  }
58
- //# sourceMappingURL=DecafModelModule.js.map
59
- //# sourceMappingURL=DecafModelModule.js.map
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVjYWZNb2RlbE1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNhZi1tb2RlbC9EZWNhZk1vZGVsTW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFBaUIsTUFBTSxFQUFZLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDNUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGlDQUE4QjtBQUc1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFlBQVksRUFBRSwwQkFBcUI7QUFFNUMsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFlOztJQUUxQyxJQUFNLGdCQUFnQixHQUF0QixNQUFNLGdCQUFnQjs7aUJBQ0osUUFBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxBQUFsRCxDQUFtRDtRQUV0RSxNQUFNLENBQUMsbUJBQW1CLENBQ3hCLE1BQTZCO1lBRTdCLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDNUIsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksU0FBUztnQkFDL0IsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBWSxDQUFDO2FBQ3RELENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQztRQUVELE1BQU0sQ0FBQyxTQUFTLENBQ2QsS0FBNEIsRUFDNUIsUUFBNkM7WUFFN0MsTUFBTSxRQUFRLEdBQUcsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sS0FBSyxHQUNULE9BQU8sUUFBUSxLQUFLLFdBQVc7Z0JBQzdCLENBQUMsQ0FBQyxRQUFRO2dCQUNWLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFFdEQsSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQzlDLElBQUksS0FBSyxLQUFLLElBQUk7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDaEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFBRSxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsTUFBTSxDQUFDLE9BQU8sQ0FDWixPQUFlLEVBQ2YsVUFBdUMsRUFBRTtZQUV6QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkMsR0FBRyxDQUFDLElBQUksQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO1lBRWxELE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDN0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQ2xELENBQUM7WUFFRixJQUFJLGFBQWEsR0FBZSxFQUFFLENBQUM7WUFDbkMsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3pCLEdBQUcsQ0FBQyxJQUFJLENBQUMseURBQXlELENBQUMsQ0FBQztnQkFDcEUsYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDeEQsR0FBRyxDQUFDLElBQUksQ0FDTiw0QkFBNEIsYUFBYSxDQUFDLE1BQU0sd0JBQXdCLENBQ3pFLENBQUM7WUFDSixDQUFDO1lBRUQsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQzlDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQzVELENBQUM7WUFDRixHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsV0FBVyxDQUFDLE1BQU0sY0FBYyxDQUFDLENBQUM7WUFFeEQsT0FBTztnQkFDTCxNQUFNLEVBQUUsa0JBQWdCO2dCQUN4QixXQUFXO2dCQUNYLFNBQVMsRUFBRTtvQkFDVCxHQUFHLGFBQWE7aUJBQ2pCO2FBQ0YsQ0FBQztRQUNKLENBQUM7O0lBNURHLGdCQUFnQjtRQURyQixNQUFNLENBQUMsRUFBRSxDQUFDO09BQ0wsZ0JBQWdCLENBNkRyQjtJQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFO1FBQ3RDLEtBQUssRUFBRSxjQUFjLE9BQU8sRUFBRTtLQUMvQixDQUFDLENBQUM7SUFDSCxPQUFPLGdCQUFnQixDQUFDO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEeW5hbWljTW9kdWxlLCBNb2R1bGUsIFByb3ZpZGVyIH0gZnJvbSBcIkBuZXN0anMvY29tbW9uXCI7XG5pbXBvcnQgeyBBZGFwdGVyLCBNb2RlbFNlcnZpY2UgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IExvZ2dpbmcgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcbmltcG9ydCB7IEZyb21Nb2RlbENvbnRyb2xsZXIgfSBmcm9tIFwiLi9Gcm9tTW9kZWxDb250cm9sbGVyXCI7XG5pbXBvcnQgeyBEZWNhZk1vZHVsZU9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IE1vZGVsLCBNb2RlbENvbnN0cnVjdG9yIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgTWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB7IERFQ0FGX0VYUE9TRSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZHVsZUZvcihmbGF2b3VyOiBzdHJpbmcpIHtcbiAgQE1vZHVsZSh7fSlcbiAgY2xhc3MgRGVjYWZNb2RlbE1vZHVsZSB7XG4gICAgc3RhdGljIHJlYWRvbmx5IGxvZyA9IExvZ2dpbmcuZm9yKERlY2FmTW9kZWxNb2R1bGUubmFtZSkuZm9yKGZsYXZvdXIpO1xuXG4gICAgc3RhdGljIGNyZWF0ZU1vZGVsU2VydmljZXM8VCBleHRlbmRzIE1vZGVsPGJvb2xlYW4+PihcbiAgICAgIG1vZGVsczogTW9kZWxDb25zdHJ1Y3RvcjxUPltdXG4gICAgKTogUHJvdmlkZXJbXSB7XG4gICAgICByZXR1cm4gbW9kZWxzLm1hcCgobW9kZWwpID0+ICh7XG4gICAgICAgIHByb3ZpZGU6IGAke21vZGVsLm5hbWV9U2VydmljZWAsXG4gICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IE1vZGVsU2VydmljZS5mb3JNb2RlbChtb2RlbCBhcyBhbnkpLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHN0YXRpYyBpc0V4cG9zZWQoXG4gICAgICBtb2RlbDogTW9kZWxDb25zdHJ1Y3Rvcjxhbnk+LFxuICAgICAgZXhwb3N1cmU/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgc3RyaW5nW10+XG4gICAgKTogYm9vbGVhbiB7XG4gICAgICBjb25zdCBvdmVycmlkZSA9IGV4cG9zdXJlPy5bbW9kZWwubmFtZV07XG4gICAgICBjb25zdCB2YWx1ZSA9XG4gICAgICAgIHR5cGVvZiBvdmVycmlkZSAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgID8gb3ZlcnJpZGVcbiAgICAgICAgICA6IE1ldGFkYXRhLmdldChtb2RlbCwgTWV0YWRhdGEua2V5KERFQ0FGX0VYUE9TRSkpO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkgcmV0dXJuIHRydWU7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHJldHVybiB2YWx1ZS5pbmNsdWRlcyhmbGF2b3VyKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZm9yUm9vdChcbiAgICAgIGZsYXZvdXI6IHN0cmluZyxcbiAgICAgIG9wdGlvbnM6IFBhcnRpYWw8RGVjYWZNb2R1bGVPcHRpb25zPiA9IHt9XG4gICAgKTogRHluYW1pY01vZHVsZSB7XG4gICAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy5mb3JSb290KTtcbiAgICAgIGxvZy5pbmZvKGBHZW5lcmF0aW5nIGNvbnRyb2xsZXJzIGZvciBmbGF2b3VyLi4uYCk7XG5cbiAgICAgIGNvbnN0IHRyYWNrZWRNb2RlbHMgPSBBZGFwdGVyLm1vZGVscyhmbGF2b3VyKS5maWx0ZXIoKG1vZGVsKSA9PlxuICAgICAgICB0aGlzLmlzRXhwb3NlZChtb2RlbCwgb3B0aW9ucy5jb250cm9sbGVyRXhwb3N1cmUpXG4gICAgICApO1xuXG4gICAgICBsZXQgbW9kZWxTZXJ2aWNlczogUHJvdmlkZXJbXSA9IFtdO1xuICAgICAgaWYgKG9wdGlvbnMuYXV0b1NlcnZpY2VzKSB7XG4gICAgICAgIGxvZy5pbmZvKFwiQXV0by1zZXJ2aWNlcyBlbmFibGVkLiBJbml0aWFsaXppbmcgc2VydmljZSBnZW5lcmF0aW9uLlwiKTtcbiAgICAgICAgbW9kZWxTZXJ2aWNlcyA9IHRoaXMuY3JlYXRlTW9kZWxTZXJ2aWNlcyh0cmFja2VkTW9kZWxzKTtcbiAgICAgICAgbG9nLmluZm8oXG4gICAgICAgICAgYEF1dG8tc2VydmljZXMgY29tcGxldGVkLiAke21vZGVsU2VydmljZXMubGVuZ3RofSBzZXJ2aWNlcyBpbml0aWFsaXplZC5gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRyb2xsZXJzID0gdHJhY2tlZE1vZGVscy5tYXAoKG1vZGVsKSA9PlxuICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZShtb2RlbCwgb3B0aW9ucy5jb250cm9sbGVyQ29uZmlnKVxuICAgICAgKTtcbiAgICAgIGxvZy5pbmZvKGBHZW5lcmF0ZWQgJHtjb250cm9sbGVycy5sZW5ndGh9IGNvbnRyb2xsZXJzYCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZHVsZTogRGVjYWZNb2RlbE1vZHVsZSxcbiAgICAgICAgY29udHJvbGxlcnMsXG4gICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgIC4uLm1vZGVsU2VydmljZXMsXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBPYmplY3QuYXNzaWduKERlY2FmTW9kZWxNb2R1bGUsIFwibmFtZVwiLCB7XG4gICAgdmFsdWU6IGBEZWNhZk1vZHVsZSR7Zmxhdm91cn1gLFxuICB9KTtcbiAgcmV0dXJuIERlY2FmTW9kZWxNb2R1bGU7XG59XG4iXX0=
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVjYWZNb2RlbE1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkRlY2FmTW9kZWxNb2R1bGUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFZQSxvQ0FvREM7QUFoRUQsSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSTtJQUNqRixJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdILElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sT0FBTyxDQUFDLFFBQVEsS0FBSyxVQUFVO1FBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7O1FBQzFILEtBQUssSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFBRSxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEosT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLENBQUMsQ0FBQztBQUNGLDJDQUF3QztBQUN4Qyx5Q0FBdUQ7QUFDdkQsK0NBQTRDO0FBQzVDLHFFQUErRDtBQUMvRCxxREFBZ0Q7QUFDaEQsb0RBQWlEO0FBQ2pELFNBQWdCLFlBQVksQ0FBQyxPQUFPO0lBQ2hDLElBQUksa0JBQWtCLENBQUM7SUFDdkIsSUFBSSxnQkFBZ0IsR0FBRyxNQUFNLGdCQUFnQjtRQUN6QyxTQUFTLGtCQUFrQixHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckMsU0FBUyxJQUFJLENBQUMsR0FBRyxHQUFHLGlCQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEUsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE1BQU07WUFDN0IsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQixPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxTQUFTO2dCQUMvQixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsbUJBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO2FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQztRQUNELE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVE7WUFDNUIsTUFBTSxRQUFRLEdBQUcsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLE1BQU0sS0FBSyxHQUFHLE9BQU8sUUFBUSxLQUFLLFdBQVc7Z0JBQ3pDLENBQUMsQ0FBQyxRQUFRO2dCQUNWLENBQUMsQ0FBQyxxQkFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUscUJBQVEsQ0FBQyxHQUFHLENBQUMsMkJBQVksQ0FBQyxDQUFDLENBQUM7WUFDdEQsSUFBSSxPQUFPLEtBQUssS0FBSyxXQUFXO2dCQUM1QixPQUFPLElBQUksQ0FBQztZQUNoQixJQUFJLEtBQUssS0FBSyxJQUFJO2dCQUNkLE9BQU8sSUFBSSxDQUFDO1lBQ2hCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ3BCLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQyxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBQ0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxHQUFHLEVBQUU7WUFDaEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZDLEdBQUcsQ0FBQyxJQUFJLENBQUMsdUNBQXVDLENBQUMsQ0FBQztZQUNsRCxNQUFNLGFBQWEsR0FBRyxjQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztZQUNuSCxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDdkIsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3ZCLEdBQUcsQ0FBQyxJQUFJLENBQUMseURBQXlELENBQUMsQ0FBQztnQkFDcEUsYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDeEQsR0FBRyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsYUFBYSxDQUFDLE1BQU0sd0JBQXdCLENBQUMsQ0FBQztZQUN2RixDQUFDO1lBQ0QsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsNENBQW1CLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1lBQzlHLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxXQUFXLENBQUMsTUFBTSxjQUFjLENBQUMsQ0FBQztZQUN4RCxPQUFPO2dCQUNILE1BQU0sRUFBRSxrQkFBa0I7Z0JBQzFCLFdBQVc7Z0JBQ1gsU0FBUyxFQUFFO29CQUNQLEdBQUcsYUFBYTtpQkFDbkI7YUFDSixDQUFDO1FBQ04sQ0FBQztLQUNKLENBQUM7SUFDRixnQkFBZ0IsR0FBRyxrQkFBa0IsR0FBRyxVQUFVLENBQUM7UUFDL0MsSUFBQSxlQUFNLEVBQUMsRUFBRSxDQUFDO0tBQ2IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3JCLE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFO1FBQ3BDLEtBQUssRUFBRSxjQUFjLE9BQU8sRUFBRTtLQUNqQyxDQUFDLENBQUM7SUFDSCxPQUFPLGdCQUFnQixDQUFDO0FBQzVCLENBQUM7QUFDRCxraE5BQWtoTiIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2RlY29yYXRlID0gKHRoaXMgJiYgdGhpcy5fX2RlY29yYXRlKSB8fCBmdW5jdGlvbiAoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xufTtcbmltcG9ydCB7IE1vZHVsZSB9IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHsgQWRhcHRlciwgTW9kZWxTZXJ2aWNlIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5pbXBvcnQgeyBGcm9tTW9kZWxDb250cm9sbGVyIH0gZnJvbSBcIi4vRnJvbU1vZGVsQ29udHJvbGxlci5qc1wiO1xuaW1wb3J0IHsgTWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB7IERFQ0FGX0VYUE9TRSB9IGZyb20gXCIuLy4uL2NvbnN0YW50cy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1vZHVsZUZvcihmbGF2b3VyKSB7XG4gICAgdmFyIERlY2FmTW9kZWxNb2R1bGVfMTtcbiAgICBsZXQgRGVjYWZNb2RlbE1vZHVsZSA9IGNsYXNzIERlY2FmTW9kZWxNb2R1bGUge1xuICAgICAgICBzdGF0aWMgeyBEZWNhZk1vZGVsTW9kdWxlXzEgPSB0aGlzOyB9XG4gICAgICAgIHN0YXRpYyB7IHRoaXMubG9nID0gTG9nZ2luZy5mb3IoRGVjYWZNb2RlbE1vZHVsZV8xLm5hbWUpLmZvcihmbGF2b3VyKTsgfVxuICAgICAgICBzdGF0aWMgY3JlYXRlTW9kZWxTZXJ2aWNlcyhtb2RlbHMpIHtcbiAgICAgICAgICAgIHJldHVybiBtb2RlbHMubWFwKChtb2RlbCkgPT4gKHtcbiAgICAgICAgICAgICAgICBwcm92aWRlOiBgJHttb2RlbC5uYW1lfVNlcnZpY2VgLFxuICAgICAgICAgICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IE1vZGVsU2VydmljZS5mb3JNb2RlbChtb2RlbCksXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGlzRXhwb3NlZChtb2RlbCwgZXhwb3N1cmUpIHtcbiAgICAgICAgICAgIGNvbnN0IG92ZXJyaWRlID0gZXhwb3N1cmU/Llttb2RlbC5uYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIG92ZXJyaWRlICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICAgICAgPyBvdmVycmlkZVxuICAgICAgICAgICAgICAgIDogTWV0YWRhdGEuZ2V0KG1vZGVsLCBNZXRhZGF0YS5rZXkoREVDQUZfRVhQT1NFKSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB0cnVlKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS5pbmNsdWRlcyhmbGF2b3VyKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZm9yUm9vdChmbGF2b3VyLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmZvclJvb3QpO1xuICAgICAgICAgICAgbG9nLmluZm8oYEdlbmVyYXRpbmcgY29udHJvbGxlcnMgZm9yIGZsYXZvdXIuLi5gKTtcbiAgICAgICAgICAgIGNvbnN0IHRyYWNrZWRNb2RlbHMgPSBBZGFwdGVyLm1vZGVscyhmbGF2b3VyKS5maWx0ZXIoKG1vZGVsKSA9PiB0aGlzLmlzRXhwb3NlZChtb2RlbCwgb3B0aW9ucy5jb250cm9sbGVyRXhwb3N1cmUpKTtcbiAgICAgICAgICAgIGxldCBtb2RlbFNlcnZpY2VzID0gW107XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5hdXRvU2VydmljZXMpIHtcbiAgICAgICAgICAgICAgICBsb2cuaW5mbyhcIkF1dG8tc2VydmljZXMgZW5hYmxlZC4gSW5pdGlhbGl6aW5nIHNlcnZpY2UgZ2VuZXJhdGlvbi5cIik7XG4gICAgICAgICAgICAgICAgbW9kZWxTZXJ2aWNlcyA9IHRoaXMuY3JlYXRlTW9kZWxTZXJ2aWNlcyh0cmFja2VkTW9kZWxzKTtcbiAgICAgICAgICAgICAgICBsb2cuaW5mbyhgQXV0by1zZXJ2aWNlcyBjb21wbGV0ZWQuICR7bW9kZWxTZXJ2aWNlcy5sZW5ndGh9IHNlcnZpY2VzIGluaXRpYWxpemVkLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29udHJvbGxlcnMgPSB0cmFja2VkTW9kZWxzLm1hcCgobW9kZWwpID0+IEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlKG1vZGVsLCBvcHRpb25zLmNvbnRyb2xsZXJDb25maWcpKTtcbiAgICAgICAgICAgIGxvZy5pbmZvKGBHZW5lcmF0ZWQgJHtjb250cm9sbGVycy5sZW5ndGh9IGNvbnRyb2xsZXJzYCk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1vZHVsZTogRGVjYWZNb2RlbE1vZHVsZV8xLFxuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJzLFxuICAgICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgICAgICAuLi5tb2RlbFNlcnZpY2VzLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfTtcbiAgICBEZWNhZk1vZGVsTW9kdWxlID0gRGVjYWZNb2RlbE1vZHVsZV8xID0gX19kZWNvcmF0ZShbXG4gICAgICAgIE1vZHVsZSh7fSlcbiAgICBdLCBEZWNhZk1vZGVsTW9kdWxlKTtcbiAgICBPYmplY3QuYXNzaWduKERlY2FmTW9kZWxNb2R1bGUsIFwibmFtZVwiLCB7XG4gICAgICAgIHZhbHVlOiBgRGVjYWZNb2R1bGUke2ZsYXZvdXJ9YCxcbiAgICB9KTtcbiAgICByZXR1cm4gRGVjYWZNb2RlbE1vZHVsZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVJHVmpZV1pOYjJSbGJFMXZaSFZzWlM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMM055WXk5a1pXTmhaaTF0YjJSbGJDOUVaV05oWmsxdlpHVnNUVzlrZFd4bExuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3T3p0QlFVRkJMRTlCUVU4c1JVRkJhVUlzVFVGQlRTeEZRVUZaTEUxQlFVMHNaMEpCUVdkQ0xFTkJRVU03UVVGRGFrVXNUMEZCVHl4RlFVRkZMRTlCUVU4c1JVRkJSU3haUVVGWkxFVkJRVVVzVFVGQlRTeG5Ra0ZCWjBJc1EwRkJRenRCUVVOMlJDeFBRVUZQTEVWQlFVVXNUMEZCVHl4RlFVRkZMRTFCUVUwc2JVSkJRVzFDTEVOQlFVTTdRVUZETlVNc1QwRkJUeXhGUVVGRkxHMUNRVUZ0UWl4RlFVRkZMR2xEUVVFNFFqdEJRVWMxUkN4UFFVRlBMRVZCUVVVc1VVRkJVU3hGUVVGRkxFMUJRVTBzYzBKQlFYTkNMRU5CUVVNN1FVRkRhRVFzVDBGQlR5eEZRVUZGTEZsQlFWa3NSVUZCUlN3d1FrRkJjVUk3UVVGRk5VTXNUVUZCVFN4VlFVRlZMRmxCUVZrc1EwRkJReXhQUVVGbE96dEpRVVV4UXl4SlFVRk5MR2RDUVVGblFpeEhRVUYwUWl4TlFVRk5MR2RDUVVGblFqczdhVUpCUTBvc1VVRkJSeXhIUVVGSExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNhMEpCUVdkQ0xFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXhCUVVGc1JDeERRVUZ0UkR0UlFVVjBSU3hOUVVGTkxFTkJRVU1zYlVKQlFXMUNMRU5CUTNoQ0xFMUJRVFpDTzFsQlJUZENMRTlCUVU4c1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJRenRuUWtGRE5VSXNUMEZCVHl4RlFVRkZMRWRCUVVjc1MwRkJTeXhEUVVGRExFbEJRVWtzVTBGQlV6dG5Ra0ZETDBJc1ZVRkJWU3hGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZETEZsQlFWa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJXU3hEUVVGRE8yRkJRM1JFTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTA0c1EwRkJRenRSUVVWRUxFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlEyUXNTMEZCTkVJc1JVRkROVUlzVVVGQk5rTTdXVUZGTjBNc1RVRkJUU3hSUVVGUkxFZEJRVWNzVVVGQlVTeEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xbEJRM2hETEUxQlFVMHNTMEZCU3l4SFFVTlVMRTlCUVU4c1VVRkJVU3hMUVVGTExGZEJRVmM3WjBKQlF6ZENMRU5CUVVNc1EwRkJReXhSUVVGUk8yZENRVU5XTEVOQlFVTXNRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUlVGQlJTeFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRmRFUXNTVUZCU1N4UFFVRlBMRXRCUVVzc1MwRkJTeXhYUVVGWE8yZENRVUZGTEU5QlFVOHNTVUZCU1N4RFFVRkRPMWxCUXpsRExFbEJRVWtzUzBGQlN5eExRVUZMTEVsQlFVazdaMEpCUVVVc1QwRkJUeXhKUVVGSkxFTkJRVU03V1VGRGFFTXNTVUZCU1N4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF6dG5Ra0ZCUlN4UFFVRlBMRXRCUVVzc1EwRkJReXhSUVVGUkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdXVUZEZWtRc1QwRkJUeXhMUVVGTExFTkJRVU03VVVGRFppeERRVUZETzFGQlJVUXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkRXaXhQUVVGbExFVkJRMllzVlVGQmRVTXNSVUZCUlR0WlFVVjZReXhOUVVGTkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdXVUZEZGtNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eDFRMEZCZFVNc1EwRkJReXhEUVVGRE8xbEJSV3hFTEUxQlFVMHNZVUZCWVN4SFFVRkhMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1MwRkJTeXhGUVVGRkxFVkJRVVVzUTBGRE4wUXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhMUVVGTExFVkJRVVVzVDBGQlR5eERRVUZETEd0Q1FVRnJRaXhEUVVGRExFTkJRMnhFTEVOQlFVTTdXVUZGUml4SlFVRkpMR0ZCUVdFc1IwRkJaU3hGUVVGRkxFTkJRVU03V1VGRGJrTXNTVUZCU1N4UFFVRlBMRU5CUVVNc1dVRkJXU3hGUVVGRkxFTkJRVU03WjBKQlEzcENMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zZVVSQlFYbEVMRU5CUVVNc1EwRkJRenRuUWtGRGNFVXNZVUZCWVN4SFFVRkhMRWxCUVVrc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4aFFVRmhMRU5CUVVNc1EwRkJRenRuUWtGRGVFUXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkRUaXcwUWtGQk5FSXNZVUZCWVN4RFFVRkRMRTFCUVUwc2QwSkJRWGRDTEVOQlEzcEZMRU5CUVVNN1dVRkRTaXhEUVVGRE8xbEJSVVFzVFVGQlRTeFhRVUZYTEVkQlFVY3NZVUZCWVN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFdEJRVXNzUlVGQlJTeEZRVUZGTEVOQlF6bERMRzFDUVVGdFFpeERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRVZCUVVVc1QwRkJUeXhEUVVGRExHZENRVUZuUWl4RFFVRkRMRU5CUXpWRUxFTkJRVU03V1VGRFJpeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1YwRkJWeXhEUVVGRExFMUJRVTBzWTBGQll5eERRVUZETEVOQlFVTTdXVUZGZUVRc1QwRkJUenRuUWtGRFRDeE5RVUZOTEVWQlFVVXNhMEpCUVdkQ08yZENRVU40UWl4WFFVRlhPMmRDUVVOWUxGTkJRVk1zUlVGQlJUdHZRa0ZEVkN4SFFVRkhMR0ZCUVdFN2FVSkJRMnBDTzJGQlEwWXNRMEZCUXp0UlFVTktMRU5CUVVNN08wbEJOVVJITEdkQ1FVRm5RanRSUVVSeVFpeE5RVUZOTEVOQlFVTXNSVUZCUlN4RFFVRkRPMDlCUTB3c1owSkJRV2RDTEVOQk5rUnlRanRKUVVORUxFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNaMEpCUVdkQ0xFVkJRVVVzVFVGQlRTeEZRVUZGTzFGQlEzUkRMRXRCUVVzc1JVRkJSU3hqUVVGakxFOUJRVThzUlVGQlJUdExRVU12UWl4RFFVRkRMRU5CUVVNN1NVRkRTQ3hQUVVGUExHZENRVUZuUWl4RFFVRkRPMEZCUXpGQ0xFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnZXlCRWVXNWhiV2xqVFc5a2RXeGxMQ0JOYjJSMWJHVXNJRkJ5YjNacFpHVnlJSDBnWm5KdmJTQmNJa0J1WlhOMGFuTXZZMjl0Ylc5dVhDSTdYRzVwYlhCdmNuUWdleUJCWkdGd2RHVnlMQ0JOYjJSbGJGTmxjblpwWTJVZ2ZTQm1jbTl0SUZ3aVFHUmxZMkZtTFhSekwyTnZjbVZjSWp0Y2JtbHRjRzl5ZENCN0lFeHZaMmRwYm1jZ2ZTQm1jbTl0SUZ3aVFHUmxZMkZtTFhSekwyeHZaMmRwYm1kY0lqdGNibWx0Y0c5eWRDQjdJRVp5YjIxTmIyUmxiRU52Ym5SeWIyeHNaWElnZlNCbWNtOXRJRndpTGk5R2NtOXRUVzlrWld4RGIyNTBjbTlzYkdWeVhDSTdYRzVwYlhCdmNuUWdleUJFWldOaFprMXZaSFZzWlU5d2RHbHZibk1nZlNCbWNtOXRJRndpTGk0dmRIbHdaWE5jSWp0Y2JtbHRjRzl5ZENCN0lFMXZaR1ZzTENCTmIyUmxiRU52Ym5OMGNuVmpkRzl5SUgwZ1puSnZiU0JjSWtCa1pXTmhaaTEwY3k5a1pXTnZjbUYwYjNJdGRtRnNhV1JoZEdsdmJsd2lPMXh1YVcxd2IzSjBJSHNnVFdWMFlXUmhkR0VnZlNCbWNtOXRJRndpUUdSbFkyRm1MWFJ6TDJSbFkyOXlZWFJwYjI1Y0lqdGNibWx0Y0c5eWRDQjdJRVJGUTBGR1gwVllVRTlUUlNCOUlHWnliMjBnWENJdUxpOWpiMjV6ZEdGdWRITmNJanRjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdkbGRFMXZaSFZzWlVadmNpaG1iR0YyYjNWeU9pQnpkSEpwYm1jcElIdGNiaUFnUUUxdlpIVnNaU2g3ZlNsY2JpQWdZMnhoYzNNZ1JHVmpZV1pOYjJSbGJFMXZaSFZzWlNCN1hHNGdJQ0FnYzNSaGRHbGpJSEpsWVdSdmJteDVJR3h2WnlBOUlFeHZaMmRwYm1jdVptOXlLRVJsWTJGbVRXOWtaV3hOYjJSMWJHVXVibUZ0WlNrdVptOXlLR1pzWVhadmRYSXBPMXh1WEc0Z0lDQWdjM1JoZEdsaklHTnlaV0YwWlUxdlpHVnNVMlZ5ZG1salpYTThWQ0JsZUhSbGJtUnpJRTF2WkdWc1BHSnZiMnhsWVc0K1BpaGNiaUFnSUNBZ0lHMXZaR1ZzY3pvZ1RXOWtaV3hEYjI1emRISjFZM1J2Y2p4VVBsdGRYRzRnSUNBZ0tUb2dVSEp2ZG1sa1pYSmJYU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdiVzlrWld4ekxtMWhjQ2dvYlc5a1pXd3BJRDArSUNoN1hHNGdJQ0FnSUNBZ0lIQnliM1pwWkdVNklHQWtlMjF2WkdWc0xtNWhiV1Y5VTJWeWRtbGpaV0FzWEc0Z0lDQWdJQ0FnSUhWelpVWmhZM1J2Y25rNklDZ3BJRDArSUUxdlpHVnNVMlZ5ZG1salpTNW1iM0pOYjJSbGJDaHRiMlJsYkNCaGN5QmhibmtwTEZ4dUlDQWdJQ0FnZlNrcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhOMFlYUnBZeUJwYzBWNGNHOXpaV1FvWEc0Z0lDQWdJQ0J0YjJSbGJEb2dUVzlrWld4RGIyNXpkSEoxWTNSdmNqeGhibmsrTEZ4dUlDQWdJQ0FnWlhod2IzTjFjbVUvT2lCU1pXTnZjbVE4YzNSeWFXNW5MQ0JpYjI5c1pXRnVJSHdnYzNSeWFXNW5XMTArWEc0Z0lDQWdLVG9nWW05dmJHVmhiaUI3WEc0Z0lDQWdJQ0JqYjI1emRDQnZkbVZ5Y21sa1pTQTlJR1Y0Y0c5emRYSmxQeTViYlc5a1pXd3VibUZ0WlYwN1hHNGdJQ0FnSUNCamIyNXpkQ0IyWVd4MVpTQTlYRzRnSUNBZ0lDQWdJSFI1Y0dWdlppQnZkbVZ5Y21sa1pTQWhQVDBnWENKMWJtUmxabWx1WldSY0lseHVJQ0FnSUNBZ0lDQWdJRDhnYjNabGNuSnBaR1ZjYmlBZ0lDQWdJQ0FnSUNBNklFMWxkR0ZrWVhSaExtZGxkQ2h0YjJSbGJDd2dUV1YwWVdSaGRHRXVhMlY1S0VSRlEwRkdYMFZZVUU5VFJTa3BPMXh1WEc0Z0lDQWdJQ0JwWmlBb2RIbHdaVzltSUhaaGJIVmxJRDA5UFNCY0luVnVaR1ZtYVc1bFpGd2lLU0J5WlhSMWNtNGdkSEoxWlR0Y2JpQWdJQ0FnSUdsbUlDaDJZV3gxWlNBOVBUMGdkSEoxWlNrZ2NtVjBkWEp1SUhSeWRXVTdYRzRnSUNBZ0lDQnBaaUFvUVhKeVlYa3VhWE5CY25KaGVTaDJZV3gxWlNrcElISmxkSFZ5YmlCMllXeDFaUzVwYm1Oc2RXUmxjeWhtYkdGMmIzVnlLVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J6ZEdGMGFXTWdabTl5VW05dmRDaGNiaUFnSUNBZ0lHWnNZWFp2ZFhJNklITjBjbWx1Wnl4Y2JpQWdJQ0FnSUc5d2RHbHZibk02SUZCaGNuUnBZV3c4UkdWallXWk5iMlIxYkdWUGNIUnBiMjV6UGlBOUlIdDlYRzRnSUNBZ0tUb2dSSGx1WVcxcFkwMXZaSFZzWlNCN1hHNGdJQ0FnSUNCamIyNXpkQ0JzYjJjZ1BTQjBhR2x6TG14dlp5NW1iM0lvZEdocGN5NW1iM0pTYjI5MEtUdGNiaUFnSUNBZ0lHeHZaeTVwYm1adktHQkhaVzVsY21GMGFXNW5JR052Ym5SeWIyeHNaWEp6SUdadmNpQm1iR0YyYjNWeUxpNHVZQ2s3WEc1Y2JpQWdJQ0FnSUdOdmJuTjBJSFJ5WVdOclpXUk5iMlJsYkhNZ1BTQkJaR0Z3ZEdWeUxtMXZaR1ZzY3lobWJHRjJiM1Z5S1M1bWFXeDBaWElvS0cxdlpHVnNLU0E5UGx4dUlDQWdJQ0FnSUNCMGFHbHpMbWx6Ulhod2IzTmxaQ2h0YjJSbGJDd2diM0IwYVc5dWN5NWpiMjUwY205c2JHVnlSWGh3YjNOMWNtVXBYRzRnSUNBZ0lDQXBPMXh1WEc0Z0lDQWdJQ0JzWlhRZ2JXOWtaV3hUWlhKMmFXTmxjem9nVUhKdmRtbGtaWEpiWFNBOUlGdGRPMXh1SUNBZ0lDQWdhV1lnS0c5d2RHbHZibk11WVhWMGIxTmxjblpwWTJWektTQjdYRzRnSUNBZ0lDQWdJR3h2Wnk1cGJtWnZLRndpUVhWMGJ5MXpaWEoyYVdObGN5QmxibUZpYkdWa0xpQkpibWwwYVdGc2FYcHBibWNnYzJWeWRtbGpaU0JuWlc1bGNtRjBhVzl1TGx3aUtUdGNiaUFnSUNBZ0lDQWdiVzlrWld4VFpYSjJhV05sY3lBOUlIUm9hWE11WTNKbFlYUmxUVzlrWld4VFpYSjJhV05sY3loMGNtRmphMlZrVFc5a1pXeHpLVHRjYmlBZ0lDQWdJQ0FnYkc5bkxtbHVabThvWEc0Z0lDQWdJQ0FnSUNBZ1lFRjFkRzh0YzJWeWRtbGpaWE1nWTI5dGNHeGxkR1ZrTGlBa2UyMXZaR1ZzVTJWeWRtbGpaWE11YkdWdVozUm9mU0J6WlhKMmFXTmxjeUJwYm1sMGFXRnNhWHBsWkM1Z1hHNGdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJR052Ym5OMElHTnZiblJ5YjJ4c1pYSnpJRDBnZEhKaFkydGxaRTF2WkdWc2N5NXRZWEFvS0cxdlpHVnNLU0E5UGx4dUlDQWdJQ0FnSUNCR2NtOXRUVzlrWld4RGIyNTBjbTlzYkdWeUxtTnlaV0YwWlNodGIyUmxiQ3dnYjNCMGFXOXVjeTVqYjI1MGNtOXNiR1Z5UTI5dVptbG5LVnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQWdJR3h2Wnk1cGJtWnZLR0JIWlc1bGNtRjBaV1FnSkh0amIyNTBjbTlzYkdWeWN5NXNaVzVuZEdoOUlHTnZiblJ5YjJ4c1pYSnpZQ2s3WEc1Y2JpQWdJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0FnSUcxdlpIVnNaVG9nUkdWallXWk5iMlJsYkUxdlpIVnNaU3hjYmlBZ0lDQWdJQ0FnWTI5dWRISnZiR3hsY25Nc1hHNGdJQ0FnSUNBZ0lIQnliM1pwWkdWeWN6b2dXMXh1SUNBZ0lDQWdJQ0FnSUM0dUxtMXZaR1ZzVTJWeWRtbGpaWE1zWEc0Z0lDQWdJQ0FnSUYwc1hHNGdJQ0FnSUNCOU8xeHVJQ0FnSUgxY2JpQWdmVnh1SUNCUFltcGxZM1F1WVhOemFXZHVLRVJsWTJGbVRXOWtaV3hOYjJSMWJHVXNJRndpYm1GdFpWd2lMQ0I3WEc0Z0lDQWdkbUZzZFdVNklHQkVaV05oWmsxdlpIVnNaU1I3Wm14aGRtOTFjbjFnTEZ4dUlDQjlLVHRjYmlBZ2NtVjBkWEp1SUVSbFkyRm1UVzlrWld4TmIyUjFiR1U3WEc1OVhHNGlYWDA9Il19