@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
@@ -15,9 +15,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
15
15
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
16
16
  return Reflect.metadata(k, v);
17
17
  };
18
- var __param = (this && this.__param) || function (paramIndex, decorator) {
19
- return function (target, key) { decorator(target, key, paramIndex); };
20
- };
18
+ var DynamicModelController_1;
21
19
  const common_1 = require("@nestjs/common");
22
20
  const swagger_1 = require("@nestjs/swagger");
23
21
  const core_1 = require("@decaf-ts/core");
@@ -26,62 +24,14 @@ const logging_1 = require("@decaf-ts/logging");
26
24
  const db_decorators_1 = require("@decaf-ts/db-decorators");
27
25
  const decoration_1 = require("@decaf-ts/decoration");
28
26
  const index_js_1 = require("./decorators/index.cjs");
27
+ const utils_js_1 = require("./decorators/utils.cjs");
29
28
  const index_js_2 = require("./../request/index.cjs");
30
29
  const constants_js_1 = require("./../constants.cjs");
31
- const utils_js_1 = require("./utils.cjs");
32
30
  const decorators_js_1 = require("./decorators/decorators.cjs");
33
31
  const controllers_js_1 = require("./../controllers.cjs");
34
32
  const DtoBuilder_js_1 = require("./../factory/openapi/DtoBuilder.cjs");
35
33
  require("./../overrides/index.cjs");
36
- /**
37
- * @description
38
- * Factory and utilities for generating dynamic NestJS controllers from Decaf {@link Model} definitions.
39
- *
40
- * @summary
41
- * The `FromModelController` class provides the infrastructure necessary to automatically generate
42
- * strongly-typed CRUD controllers based on a given {@link ModelConstructor}. It inspects metadata from
43
- * the model, derives route paths, parameters, and generates a dynamic controller class at runtime with
44
- * full support for querying, creation, update, and deletion of model entities through a {@link Repo}.
45
- *
46
- * @template T The {@link Model} type associated with the generated controller.
47
- *
48
- * @param ModelClazz The model class to generate the controller from.
49
- *
50
- * @class FromModelController
51
- *
52
- * @example
53
- * ```ts
54
- * // Given a Decaf Model:
55
- * class User extends Model<User> {
56
- * id!: string;
57
- * name!: string;
58
- * }
59
- *
60
- * // Register controller:
61
- * const UserController = FromModelController.create(User);
62
- *
63
- * // NestJS will expose:
64
- * // POST /user
65
- * // GET /user/:id
66
- * // GET /user/query/:method
67
- * // PUT /user/:id
68
- * // DELETE /user/:id
69
- * ```
70
- *
71
- * @mermaid
72
- * sequenceDiagram
73
- * participant Client
74
- * participant Controller
75
- * participant Repo
76
- * participant DB
77
- *
78
- * Client->>Controller: HTTP Request
79
- * Controller->>Repo: Resolve repository for Model
80
- * Repo->>DB: Execute DB operation
81
- * DB-->>Repo: DB Result
82
- * Repo-->>Controller: Model Instance(s)
83
- * Controller-->>Client: JSON Response
84
- */
34
+ const server_1 = require("@decaf-ts/for-http/server");
85
35
  class FromModelController {
86
36
  static { this.log = logging_1.Logging.for(FromModelController.name); }
87
37
  static getPersistence(ModelClazz) {
@@ -91,20 +41,17 @@ class FromModelController {
91
41
  catch (e) {
92
42
  try {
93
43
  return core_1.ModelService.getService(ModelClazz);
94
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
95
44
  }
96
- catch (e) {
45
+ catch (e2) {
97
46
  return core_1.Repository.forModel(ModelClazz);
98
47
  }
99
48
  }
100
49
  }
101
50
  static createQueryRoutesFromRepository(persistence, prefix = core_1.PersistenceKeys.QUERY) {
102
- const log = FromModelController.log.for(FromModelController.createQueryRoutesFromRepository);
103
51
  const repo = persistence instanceof core_1.ModelService ? persistence.repo : persistence;
104
52
  const ModelConstr = repo.class;
105
53
  const queryMethods = decoration_1.Metadata.get(repo.constructor, decoration_1.Metadata.key(core_1.PersistenceKeys.QUERY)) ?? {};
106
54
  const routeMethods = decoration_1.Metadata.get(persistence.constructor, decoration_1.Metadata.key(constants_js_1.DECAF_ROUTE)) ?? {};
107
- // create base class
108
55
  class QueryController extends controllers_js_1.DecafModelController {
109
56
  get class() {
110
57
  throw new Error("Method not implemented.");
@@ -114,731 +61,684 @@ class FromModelController {
114
61
  }
115
62
  }
116
63
  for (const [methodName, params] of Object.entries(routeMethods)) {
117
- // regex to trim slashes from start and end
118
64
  const routePath = [params.path.replace(/^\/+|\/+$/g, "")]
119
65
  .filter((segment) => segment && segment.trim())
120
66
  .join("/");
121
- // const handler = params.handler.value;
122
- const handler = (0, utils_js_1.createRouteHandler)(methodName);
123
- if (!handler) {
124
- const message = `Invalid or missing handler for model ${ModelConstr.name} on decorated method ${methodName}`;
125
- log.error(message);
126
- throw new Error(message);
127
- }
128
- const descriptor = (0, utils_js_1.defineRouteMethod)(QueryController, methodName, handler);
129
- if (descriptor) {
130
- const decorators = (0, utils_js_1.getApiDecorators)(methodName, routePath, params.httpMethod);
131
- (0, utils_js_1.applyApiDecorators)(QueryController, methodName, descriptor, decorators);
132
- }
67
+ const handler = FromModelController.createComplexQueryHandler(methodName);
68
+ FromModelController.defineMethod(QueryController, methodName, handler);
69
+ const httpDecorator = (0, utils_js_1.HttpVerbToDecorator)(params.httpMethod)(routePath || undefined);
70
+ const decorators = FromModelController.getQueryDecorators(methodName, routePath, params.httpMethod);
71
+ FromModelController.applyDecorators(QueryController, methodName, [httpDecorator, ...decorators]);
133
72
  }
134
73
  for (const [methodName, objValues] of Object.entries(queryMethods)) {
135
74
  const fields = objValues.fields ?? [];
136
75
  const routePath = [prefix, methodName, ...fields.map((f) => `:${f}`)]
137
76
  .filter((segment) => segment && segment.trim())
138
77
  .join("/");
139
- const handler = (0, utils_js_1.createRouteHandler)(methodName);
140
- const descriptor = (0, utils_js_1.defineRouteMethod)(QueryController, methodName, handler);
141
- if (descriptor) {
142
- const decorators = (0, utils_js_1.getApiDecorators)(methodName, routePath, "GET", true);
143
- (0, utils_js_1.applyApiDecorators)(QueryController, methodName, descriptor, decorators);
144
- }
78
+ const handler = FromModelController.createComplexQueryHandler(methodName);
79
+ FromModelController.defineMethod(QueryController, methodName, handler);
80
+ const httpDecorator = (0, utils_js_1.HttpVerbToDecorator)("GET")(routePath || undefined);
81
+ const decorators = FromModelController.getQueryDecorators(methodName, routePath, "GET", true);
82
+ FromModelController.applyDecorators(QueryController, methodName, [httpDecorator, ...decorators]);
145
83
  }
146
84
  return QueryController;
147
85
  }
148
- static create(ModelConstr) {
86
+ static create(ModelConstr, moduleConfigOverrides) {
149
87
  const log = FromModelController.log.for(FromModelController.create);
150
88
  const tableName = decorator_validation_1.Model.tableName(ModelConstr);
151
89
  const routePath = (0, logging_1.toKebabCase)(tableName);
152
90
  const modelClazzName = ModelConstr.name;
153
91
  const persistence = FromModelController.getPersistence(ModelConstr);
154
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
155
- const { description, getPK, apiProperties, path } = FromModelController.getRouteParametersFromModel(ModelConstr);
156
- log.debug(`Creating controller for model: ${modelClazzName}`);
157
- const BaseController = FromModelController.createQueryRoutesFromRepository(persistence // instanceof ModelService ? persistence.repo : persistence
158
- );
159
- let DynamicModelController = class DynamicModelController extends BaseController {
92
+ // When persistence is a ModelService, the @query/@route metadata lives on
93
+ // the underlying repository class (custom repo), not on ModelService itself.
94
+ // Pass the repo to the factory so addComplexQueries() can discover them.
95
+ const factoryPersistence = persistence instanceof core_1.ModelService ? persistence.repo : persistence;
96
+ const decoratorConfig = decoration_1.Metadata.get(ModelConstr, decoration_1.Metadata.key(constants_js_1.DECAF_CONTROLLER_CONFIG));
97
+ const moduleOverride = moduleConfigOverrides?.[ModelConstr.name];
98
+ const mergedConfig = {
99
+ ...(decoratorConfig || {}),
100
+ ...(moduleOverride || {}),
101
+ };
102
+ const FactoryController = server_1.ModelControllerFactory.create(ModelConstr, factoryPersistence, mergedConfig);
103
+ const factoryRoutes = FactoryController.__routes__;
104
+ const { getPK, apiProperties, path: pkPath } = FromModelController.getRouteParametersFromModel(ModelConstr);
105
+ log.debug(`Creating controller for model: ${modelClazzName} with ${factoryRoutes?.length ?? 0} factory routes`);
106
+ let DynamicModelController = DynamicModelController_1 = class DynamicModelController extends controllers_js_1.DecafModelController {
160
107
  static get class() {
161
108
  return ModelConstr;
162
109
  }
163
110
  get class() {
164
111
  return ModelConstr;
165
- // return DynamicModelController.class;
166
112
  }
167
113
  constructor(clientContext) {
168
- super(clientContext);
114
+ super(clientContext, DynamicModelController_1.name);
169
115
  this.pk = decorator_validation_1.Model.pk(ModelConstr);
170
116
  log.info(`Registering dynamic controller for model: ${this.class.name} route: /${routePath}`);
171
117
  }
172
- //
173
- // @ApiOperationFromModel(ModelClazz, "GET", "query/:condition/:orderBy")
174
- // @ApiOperation({ summary: `Retrieve ${modelClazzName} records by query.` })
175
- // @ApiParam({ name: "method", description: "Query method to be called" })
176
- // @ApiOkResponse({
177
- // description: `${modelClazzName} retrieved successfully.`,
178
- // })
179
- // @ApiNotFoundResponse({
180
- // description: `No ${modelClazzName} records matches the query.`,
181
- // })
182
- // async query(
183
- // @Param("condition") condition: Condition<any>,
184
- // @Param("orderBy") orderBy: string,
185
- // @QueryDetails() details: DirectionLimitOffset,
186
- // ) {
187
- // const {direction, limit, offset} = details;
188
- // return this.persistence.query(condition, orderBy as keyof Model, direction, limit, offset);
189
- // }
190
- async listBy(key, details) {
191
- const { ctx } = (await this.logCtx([], core_1.PreparedStatementKeys.LIST_BY, true)).for(this.listBy);
192
- return this.persistence(ctx).listBy(key, details.direction, ctx);
193
- }
194
- async paginateBy(key, details) {
195
- const { ctx } = (await this.logCtx([], core_1.PreparedStatementKeys.PAGE_BY, true)).for(this.paginateBy);
196
- return this.persistence(ctx).paginateBy(key, details.direction, details, ctx);
197
- }
198
- async find(value, details) {
199
- const { ctx } = (await this.logCtx([], core_1.PreparedStatementKeys.FIND, true)).for(this.find);
200
- const direction = (details.direction ??
201
- core_1.OrderDirection.ASC);
202
- return (0, utils_js_1.resolvePersistenceMethod)(this.persistence(ctx), this.find.name, value, direction, ctx);
203
- }
204
- async page(value, details) {
205
- const { ctx } = (await this.logCtx([], core_1.PreparedStatementKeys.PAGE, true)).for(this.page);
206
- const { direction = core_1.OrderDirection.ASC, limit, offset, bookmark, } = details;
207
- const ref = {
208
- offset: offset ?? 1,
209
- limit: limit ?? 10,
210
- bookmark,
211
- };
212
- return (0, utils_js_1.resolvePersistenceMethod)(this.persistence(ctx), this.page.name, value, direction, ref, ctx);
213
- }
214
- async findOneBy(key, value) {
215
- const { ctx } = (await this.logCtx([], core_1.PreparedStatementKeys.FIND_ONE_BY, true)).for(this.findOneBy);
216
- return this.persistence(ctx).findOneBy(key, value, ctx);
217
- }
218
- async findBy(key, value, details) {
219
- const { ctx } = (await this.logCtx([], core_1.PreparedStatementKeys.FIND_BY, true)).for(this.findBy);
220
- return this.persistence(ctx)
221
- .for(ctx.toOverrides())
222
- .findBy(key, value, ctx);
223
- }
224
- async statement(name, args, details) {
225
- const { ctx } = (await this.logCtx([], core_1.PersistenceKeys.STATEMENT, true)).for(this.statement);
226
- const { direction, offset, limit, bookmark } = details;
227
- args = args.map((a) => (typeof a === "string" ? parseInt(a) : a) || a);
228
- const pathDirection = args.length > 1 ? args[1] : undefined;
229
- const resolvedDirection = (direction ?? pathDirection);
230
- if (resolvedDirection && args.length > 1)
231
- args[1] = resolvedDirection;
232
- switch (name) {
233
- case core_1.PreparedStatementKeys.FIND:
234
- case core_1.PreparedStatementKeys.FIND_BY:
235
- break;
236
- case core_1.PreparedStatementKeys.LIST_BY:
237
- args.push(direction);
238
- break;
239
- case core_1.PreparedStatementKeys.PAGE:
240
- case core_1.PreparedStatementKeys.PAGE_BY:
241
- args = [
242
- args[0],
243
- resolvedDirection,
244
- {
245
- limit: limit,
246
- offset: offset,
247
- bookmark: bookmark,
248
- },
249
- ];
250
- break;
251
- case core_1.PreparedStatementKeys.FIND_ONE_BY:
252
- break;
253
- case core_1.PreparedStatementKeys.COUNT_OF:
254
- case core_1.PreparedStatementKeys.MAX_OF:
255
- case core_1.PreparedStatementKeys.MIN_OF:
256
- case core_1.PreparedStatementKeys.AVG_OF:
257
- case core_1.PreparedStatementKeys.SUM_OF:
258
- case core_1.PreparedStatementKeys.DISTINCT_OF:
259
- case core_1.PreparedStatementKeys.GROUP_OF:
260
- // Aggregation methods - args[0] is the field name (if provided)
261
- break;
262
- }
263
- return this.persistence(ctx).statement(name, ...args, ctx);
264
- }
265
- //
266
- // @ApiOperationFromModel(ModelConstr, "GET", "countOf")
267
- // @ApiOperation({ summary: `Count all ${modelClazzName} records.` })
268
- // @ApiOkResponse({
269
- // description: `Count of ${modelClazzName} records.`,
270
- // type: Number,
271
- // })
272
- // async countOf() {
273
- // const { ctx } = (
274
- // await this.logCtx([], PreparedStatementKeys.COUNT_OF, true)
275
- // ).for(this.countOf);
276
- // return this.persistence(ctx).statement(
277
- // PreparedStatementKeys.COUNT_OF,
278
- // ctx
279
- // );
280
- // }
281
- //
282
- // @ApiOperationFromModel(ModelConstr, "GET", "countOf/:field")
283
- // @ApiOperation({ summary: `Count ${modelClazzName} records by field.` })
284
- // @ApiParam({ name: "field", description: "The field to count" })
285
- // @ApiOkResponse({
286
- // description: `Count of ${modelClazzName} records.`,
287
- // type: Number,
288
- // })
289
- // async countOfField(@Param("field") field: string) {
290
- // const { ctx } = (
291
- // await this.logCtx([], PreparedStatementKeys.COUNT_OF, true)
292
- // ).for(this.countOfField);
293
- // return this.persistence(ctx).statement(
294
- // PreparedStatementKeys.COUNT_OF,
295
- // field,
296
- // ctx
297
- // );
298
- // }
299
- //
300
- // @ApiOperationFromModel(ModelConstr, "GET", "maxOf/:field")
301
- // @ApiOperation({
302
- // summary: `Find maximum value of a field in ${modelClazzName}.`,
303
- // })
304
- // @ApiParam({ name: "field", description: "The field to find max of" })
305
- // @ApiOkResponse({
306
- // description: `Maximum value of the field in ${modelClazzName}.`,
307
- // })
308
- // async maxOf(@Param("field") field: string) {
309
- // const { ctx } = (
310
- // await this.logCtx([], PreparedStatementKeys.MAX_OF, true)
311
- // ).for(this.maxOf);
312
- // return this.persistence(ctx).statement(
313
- // PreparedStatementKeys.MAX_OF,
314
- // field,
315
- // ctx
316
- // );
317
- // }
318
- //
319
- // @ApiOperationFromModel(ModelConstr, "GET", "minOf/:field")
320
- // @ApiOperation({
321
- // summary: `Find minimum value of a field in ${modelClazzName}.`,
322
- // })
323
- // @ApiParam({ name: "field", description: "The field to find min of" })
324
- // @ApiOkResponse({
325
- // description: `Minimum value of the field in ${modelClazzName}.`,
326
- // })
327
- // async minOf(@Param("field") field: string) {
328
- // const { ctx } = (
329
- // await this.logCtx([], PreparedStatementKeys.MIN_OF, true)
330
- // ).for(this.minOf);
331
- // return this.persistence(ctx).statement(
332
- // PreparedStatementKeys.MIN_OF,
333
- // field,
334
- // ctx
335
- // );
336
- // }
337
- //
338
- // @ApiOperationFromModel(ModelConstr, "GET", "avgOf/:field")
339
- // @ApiOperation({
340
- // summary: `Calculate average of a field in ${modelClazzName}.`,
341
- // })
342
- // @ApiParam({
343
- // name: "field",
344
- // description: "The field to calculate average of",
345
- // })
346
- // @ApiOkResponse({
347
- // description: `Average value of the field in ${modelClazzName}.`,
348
- // type: Number,
349
- // })
350
- // async avgOf(@Param("field") field: string) {
351
- // const { ctx } = (
352
- // await this.logCtx([], PreparedStatementKeys.AVG_OF, true)
353
- // ).for(this.avgOf);
354
- // return this.persistence(ctx).statement(
355
- // PreparedStatementKeys.AVG_OF,
356
- // field,
357
- // ctx
358
- // );
359
- // }
360
- //
361
- // @ApiOperationFromModel(ModelConstr, "GET", "sumOf/:field")
362
- // @ApiOperation({
363
- // summary: `Calculate sum of a field in ${modelClazzName}.`,
364
- // })
365
- // @ApiParam({ name: "field", description: "The field to calculate sum of" })
366
- // @ApiOkResponse({
367
- // description: `Sum of the field in ${modelClazzName}.`,
368
- // type: Number,
369
- // })
370
- // async sumOf(@Param("field") field: string) {
371
- // const { ctx } = (
372
- // await this.logCtx([], PreparedStatementKeys.SUM_OF, true)
373
- // ).for(this.sumOf);
374
- // return this.persistence(ctx).statement(
375
- // PreparedStatementKeys.SUM_OF,
376
- // field,
377
- // ctx
378
- // );
379
- // }
380
- //
381
- // @ApiOperationFromModel(ModelConstr, "GET", "distinctOf/:field")
382
- // @ApiOperation({
383
- // summary: `Find distinct values of a field in ${modelClazzName}.`,
384
- // })
385
- // @ApiParam({
386
- // name: "field",
387
- // description: "The field to find distinct values of",
388
- // })
389
- // @ApiOkResponse({
390
- // description: `Distinct values of the field in ${modelClazzName}.`,
391
- // type: [String],
392
- // })
393
- // async distinctOf(@Param("field") field: string) {
394
- // const { ctx } = (
395
- // await this.logCtx([], PreparedStatementKeys.DISTINCT_OF, true)
396
- // ).for(this.distinctOf);
397
- // return this.persistence(ctx).statement(
398
- // PreparedStatementKeys.DISTINCT_OF,
399
- // field,
400
- // ctx
401
- // );
402
- // }
403
- //
404
- // @ApiOperationFromModel(ModelConstr, "GET", "groupOf/:field")
405
- // @ApiOperation({
406
- // summary: `Group ${modelClazzName} records by a field.`,
407
- // })
408
- // @ApiParam({ name: "field", description: "The field to group by" })
409
- // @ApiOkResponse({
410
- // description: `${modelClazzName} records grouped by the field.`,
411
- // })
412
- // async groupOf(@Param("field") field: string) {
413
- // const { ctx } = (
414
- // await this.logCtx([], PreparedStatementKeys.GROUP_OF, true)
415
- // ).for(this.groupOf);
416
- // return this.persistence(ctx).statement(
417
- // PreparedStatementKeys.GROUP_OF,
418
- // field,
419
- // ctx
420
- // );
421
- // }
422
- async createAll(data, resp) {
423
- const { ctx, log } = (await this.logCtx([], db_decorators_1.BulkCrudOperationKeys.CREATE_ALL, true)).for(this.createAll);
424
- log.verbose(`creating new ${modelClazzName}`);
425
- let created;
426
- try {
427
- created = await this.persistence(ctx).createAll(data.map((d) => new ModelConstr(d)), ctx);
428
- }
429
- catch (e) {
430
- log.error(`Failed to create new ${modelClazzName}`, e);
431
- throw e;
118
+ };
119
+ DynamicModelController = DynamicModelController_1 = __decorate([
120
+ (0, common_1.Controller)(routePath),
121
+ (0, swagger_1.ApiTags)(modelClazzName),
122
+ (0, swagger_1.ApiExtraModels)(ModelConstr),
123
+ (0, decorators_js_1.Auth)(ModelConstr),
124
+ __metadata("design:paramtypes", [index_js_2.DecafRequestContext])
125
+ ], DynamicModelController);
126
+ if (factoryRoutes) {
127
+ const sortedRoutes = [...factoryRoutes].sort((a, b) => {
128
+ const aSegments = a.path.split("/").filter(Boolean);
129
+ const bSegments = b.path.split("/").filter(Boolean);
130
+ const aParamCount = aSegments.filter((s) => s.startsWith(":")).length;
131
+ const bParamCount = bSegments.filter((s) => s.startsWith(":")).length;
132
+ const aLiteralCount = aSegments.length - aParamCount;
133
+ const bLiteralCount = bSegments.length - bParamCount;
134
+ if (aLiteralCount !== bLiteralCount)
135
+ return bLiteralCount - aLiteralCount;
136
+ if (aParamCount !== bParamCount)
137
+ return aParamCount - bParamCount;
138
+ return 0;
139
+ });
140
+ for (const route of sortedRoutes) {
141
+ const registration = FromModelController.matchRoute(route, pkPath, apiProperties, getPK, ModelConstr, modelClazzName, factoryPersistence);
142
+ if (!registration)
143
+ continue;
144
+ const { methodName, handler, decorators, paramDecorators } = registration;
145
+ const descriptor = FromModelController.defineMethod(DynamicModelController, methodName, handler);
146
+ if (descriptor) {
147
+ const httpDecorator = (0, utils_js_1.HttpVerbToDecorator)(route.method)(route.path.replace(/^\/+|\/+$/g, "") || undefined);
148
+ FromModelController.applyDecorators(DynamicModelController, methodName, [httpDecorator, ...decorators], paramDecorators);
432
149
  }
433
- log.info(`created new ${modelClazzName} with id ${created[this.pk]}`);
150
+ }
151
+ }
152
+ return DynamicModelController;
153
+ }
154
+ static getRouteParametersFromModel(ModelClazz) {
155
+ const pk = decorator_validation_1.Model.pk(ModelClazz);
156
+ const composed = decoration_1.Metadata.get(ModelClazz, decoration_1.Metadata.key(db_decorators_1.DBKeys.COMPOSED, pk));
157
+ const composedKeys = composed?.args ?? [];
158
+ const uniqueKeys = Array.isArray(composedKeys) && composedKeys.length > 0
159
+ ? Array.from(new Set([...composedKeys]))
160
+ : Array.from(new Set([pk]));
161
+ const description = decoration_1.Metadata.description(ModelClazz) ?? "";
162
+ const path = `:${uniqueKeys.join("/:")}`;
163
+ const apiProperties = uniqueKeys.map((key) => {
164
+ return {
165
+ name: key,
166
+ description: decoration_1.Metadata.description(ModelClazz, key),
167
+ required: true,
168
+ type: String,
169
+ };
170
+ });
171
+ return {
172
+ path,
173
+ description,
174
+ apiProperties,
175
+ getPK: (...params) => composed?.separator ? params.join(composed.separator) : params.join(""),
176
+ };
177
+ }
178
+ static defineMethod(target, methodName, handler) {
179
+ Object.defineProperty(target.prototype || target, methodName, {
180
+ value: handler,
181
+ writable: false,
182
+ configurable: true,
183
+ enumerable: false,
184
+ });
185
+ return Object.getOwnPropertyDescriptor(target.prototype || target, methodName);
186
+ }
187
+ static applyDecorators(target, methodName, methodDecorators, paramDecorators = []) {
188
+ const proto = target?.prototype ?? target;
189
+ const descriptor = Object.getOwnPropertyDescriptor(proto, methodName);
190
+ methodDecorators.forEach((d) => d(proto, methodName, descriptor));
191
+ paramDecorators.forEach(({ decorator, index }) => decorator(proto, methodName, index));
192
+ }
193
+ static matchRoute(route, pkPath, apiProperties, getPK, ModelConstr, modelClazzName, persistence) {
194
+ const { method, path } = route;
195
+ const normalizedPath = path.replace(/^\/+|\/+$/g, "");
196
+ if (method === "POST" && normalizedPath === "") {
197
+ return FromModelController.createRegistration("create", FromModelController.createCreateHandler(ModelConstr, modelClazzName), FromModelController.createCreateDecorators(ModelConstr, modelClazzName), [{ decorator: (0, index_js_1.DecafBody)(), index: 0 }, { decorator: (0, common_1.Response)({ passthrough: true }), index: 1 }]);
198
+ }
199
+ if (method === "POST" && normalizedPath === "bulk") {
200
+ return FromModelController.createRegistration("createAll", FromModelController.createBulkCreateHandler(ModelConstr, modelClazzName), FromModelController.bulkCreateDecorators(ModelConstr, modelClazzName), [{ decorator: (0, index_js_1.DecafBody)(), index: 0 }, { decorator: (0, common_1.Response)({ passthrough: true }), index: 1 }]);
201
+ }
202
+ if (method === "GET" && normalizedPath === "bulk") {
203
+ return FromModelController.createRegistration("readAll", FromModelController.createBulkReadHandler(modelClazzName), FromModelController.bulkReadDecorators(ModelConstr, modelClazzName), [{ decorator: (0, common_1.Query)("ids"), index: 0 }]);
204
+ }
205
+ if (method === "PUT" && normalizedPath === "bulk") {
206
+ return FromModelController.createRegistration("updateAll", FromModelController.createBulkUpdateHandler(modelClazzName), FromModelController.bulkUpdateDecorators(ModelConstr, modelClazzName, apiProperties), [{ decorator: (0, index_js_1.DecafBody)(), index: 0 }, { decorator: (0, common_1.Response)({ passthrough: true }), index: 1 }]);
207
+ }
208
+ if (method === "DELETE" && normalizedPath === "bulk") {
209
+ return FromModelController.createRegistration("deleteAll", FromModelController.createBulkDeleteHandler(modelClazzName), FromModelController.bulkDeleteDecorators(ModelConstr, modelClazzName, apiProperties), [{ decorator: (0, common_1.Query)("ids"), index: 0 }, { decorator: (0, common_1.Response)({ passthrough: true }), index: 1 }]);
210
+ }
211
+ if (method === "GET" && normalizedPath === pkPath) {
212
+ return FromModelController.createRegistration("read", FromModelController.createReadHandler(getPK, modelClazzName), FromModelController.readDecorators(ModelConstr, modelClazzName, apiProperties, pkPath), [{ decorator: (0, index_js_1.DecafParams)(apiProperties), index: 0 }]);
213
+ }
214
+ if (method === "PUT" && normalizedPath === pkPath) {
215
+ return FromModelController.createRegistration("update", FromModelController.createUpdateHandler(getPK, ModelConstr, modelClazzName), FromModelController.updateDecorators(ModelConstr, modelClazzName, apiProperties, pkPath), [
216
+ { decorator: (0, index_js_1.DecafParams)(apiProperties), index: 0 },
217
+ { decorator: (0, index_js_1.DecafBody)(), index: 1 },
218
+ { decorator: (0, common_1.Response)({ passthrough: true }), index: 2 },
219
+ ]);
220
+ }
221
+ if (method === "DELETE" && normalizedPath === pkPath) {
222
+ return FromModelController.createRegistration("delete", FromModelController.createDeleteHandler(getPK, modelClazzName), FromModelController.deleteDecorators(ModelConstr, modelClazzName, apiProperties, pkPath), [
223
+ { decorator: (0, index_js_1.DecafParams)(apiProperties), index: 0 },
224
+ { decorator: (0, common_1.Response)({ passthrough: true }), index: 1 },
225
+ ]);
226
+ }
227
+ // Composed PK fallback routes (filterEmpty) — path differs from pkPath
228
+ const fallbackSegments = normalizedPath.split("/").filter(Boolean);
229
+ const isAllParams = fallbackSegments.length > 0 && fallbackSegments.every((s) => s.startsWith(":"));
230
+ if (isAllParams && normalizedPath !== pkPath) {
231
+ const fallbackApiProps = fallbackSegments.map((s) => s.slice(1)).map((name) => ({
232
+ name,
233
+ description: `${name} parameter`,
234
+ required: true,
235
+ type: String,
236
+ }));
237
+ const suffix = fallbackSegments.map((s) => s.slice(1)).join("And");
238
+ if (method === "GET") {
239
+ return FromModelController.createRegistration(`readBy${suffix}`, FromModelController.createReadHandler(getPK, modelClazzName), FromModelController.readDecorators(ModelConstr, modelClazzName, fallbackApiProps, normalizedPath), [{ decorator: (0, index_js_1.DecafParams)(fallbackApiProps), index: 0 }]);
240
+ }
241
+ if (method === "PUT") {
242
+ return FromModelController.createRegistration(`updateBy${suffix}`, FromModelController.createUpdateHandler(getPK, ModelConstr, modelClazzName), FromModelController.updateDecorators(ModelConstr, modelClazzName, fallbackApiProps, normalizedPath), [
243
+ { decorator: (0, index_js_1.DecafParams)(fallbackApiProps), index: 0 },
244
+ { decorator: (0, index_js_1.DecafBody)(), index: 1 },
245
+ { decorator: (0, common_1.Response)({ passthrough: true }), index: 2 },
246
+ ]);
247
+ }
248
+ if (method === "DELETE") {
249
+ return FromModelController.createRegistration(`deleteBy${suffix}`, FromModelController.createDeleteHandler(getPK, modelClazzName), FromModelController.deleteDecorators(ModelConstr, modelClazzName, fallbackApiProps, normalizedPath), [
250
+ { decorator: (0, index_js_1.DecafParams)(fallbackApiProps), index: 0 },
251
+ { decorator: (0, common_1.Response)({ passthrough: true }), index: 1 },
252
+ ]);
253
+ }
254
+ }
255
+ if (method === "GET" && normalizedPath === "statement/:method/*args") {
256
+ return FromModelController.createRegistration("statement", FromModelController.createStatementHandler(modelClazzName), FromModelController.statementDecorators(ModelConstr, modelClazzName), [
257
+ { decorator: (0, common_1.Param)("method"), index: 0 },
258
+ { decorator: (0, common_1.Param)("args"), index: 1 },
259
+ { decorator: (0, index_js_1.DecafQuery)(), index: 2 },
260
+ ]);
261
+ }
262
+ const statementRoutes = {
263
+ "listBy/:key": core_1.PreparedStatementKeys.LIST_BY,
264
+ "paginateBy/:key/:page": core_1.PreparedStatementKeys.PAGE_BY,
265
+ "find/:value": core_1.PreparedStatementKeys.FIND,
266
+ "page/:value": core_1.PreparedStatementKeys.PAGE,
267
+ "findOneBy/:key/:value": core_1.PreparedStatementKeys.FIND_ONE_BY,
268
+ "findBy/:key/:value": core_1.PreparedStatementKeys.FIND_BY,
269
+ "countOf/:field": core_1.PreparedStatementKeys.COUNT_OF,
270
+ "maxOf/:field": core_1.PreparedStatementKeys.MAX_OF,
271
+ "minOf/:field": core_1.PreparedStatementKeys.MIN_OF,
272
+ "avgOf/:field": core_1.PreparedStatementKeys.AVG_OF,
273
+ "sumOf/:field": core_1.PreparedStatementKeys.SUM_OF,
274
+ "distinctOf/:field": core_1.PreparedStatementKeys.DISTINCT_OF,
275
+ "groupOf/:field": core_1.PreparedStatementKeys.GROUP_OF,
276
+ };
277
+ const statementKey = statementRoutes[normalizedPath];
278
+ if (statementKey && method === "GET") {
279
+ return FromModelController.createRegistration(FromModelController.statementMethodName(normalizedPath), FromModelController.createStatementShortcutHandler(statementKey, modelClazzName), FromModelController.statementShortcutDecorators(ModelConstr, modelClazzName, normalizedPath, statementKey), FromModelController.statementShortcutParams(normalizedPath));
280
+ }
281
+ if (method === "GET" && normalizedPath.startsWith("query/")) {
282
+ const queryMethod = normalizedPath.replace(/^query\//, "").split("/")[0];
283
+ return FromModelController.createRegistration(queryMethod, FromModelController.createComplexQueryHandler(queryMethod), FromModelController.getQueryDecorators(queryMethod, normalizedPath, "GET", true), FromModelController.complexQueryParams(normalizedPath));
284
+ }
285
+ // Fallback for custom @route() paths (e.g. "metadata/for-product/:productCode")
286
+ const pathSegments = normalizedPath.split("/").filter(Boolean);
287
+ const knownPrefixes = new Set([
288
+ "listBy", "findBy", "findByPaginate", "findOneBy", "paginateBy",
289
+ "find", "page", "countOf", "maxOf", "minOf", "avgOf", "sumOf",
290
+ "distinctOf", "groupOf", "statement", "bulk", "query",
291
+ ]);
292
+ if (pathSegments.length > 0 &&
293
+ !normalizedPath.startsWith("query/") &&
294
+ !knownPrefixes.has(pathSegments[0])) {
295
+ // Look up the actual method name from @route metadata by matching the path.
296
+ // The @route decorator stores { path, httpMethod, handler } keyed by method name
297
+ // on the repository constructor.
298
+ const routeMetadata = decoration_1.Metadata.get(persistence?.constructor, decoration_1.Metadata.key(constants_js_1.DECAF_ROUTE)) ?? {};
299
+ const matchedEntry = Object.entries(routeMetadata).find(([, info]) => info &&
300
+ typeof info === "object" &&
301
+ info.path?.replace(/^\/+|\/+$/g, "") === normalizedPath);
302
+ const actualMethodName = matchedEntry?.[0] || pathSegments[0];
303
+ const paramSegments = pathSegments.filter((s) => s.startsWith(":"));
304
+ const apiPathParams = paramSegments.map((s) => s.slice(1)).map((name) => ({
305
+ name,
306
+ description: `${name} parameter for the query`,
307
+ required: true,
308
+ type: String,
309
+ }));
310
+ return FromModelController.createRegistration(actualMethodName, FromModelController.createCustomRouteHandler(actualMethodName), [
311
+ ...apiPathParams.map((p) => (0, swagger_1.ApiParam)(p)),
312
+ (0, swagger_1.ApiOperation)({ summary: `Retrieve records using "${actualMethodName}".` }),
313
+ (0, swagger_1.ApiOkResponse)({ description: "Result successfully retrieved." }),
314
+ (0, swagger_1.ApiNoContentResponse)({ description: "No content returned by the method." }),
315
+ ], FromModelController.complexQueryParams(normalizedPath));
316
+ }
317
+ return undefined;
318
+ }
319
+ static createRegistration(methodName, handler, decorators, paramDecorators) {
320
+ return { methodName, handler, decorators, paramDecorators };
321
+ }
322
+ static statementMethodName(path) {
323
+ const firstSegment = path.split("/")[0];
324
+ return firstSegment;
325
+ }
326
+ static statementShortcutParams(path) {
327
+ const segments = path.split("/").filter((s) => s.startsWith(":"));
328
+ const params = [];
329
+ segments.forEach((seg, i) => {
330
+ const name = seg.replace(":", "");
331
+ params.push({ decorator: (0, common_1.Param)(name), index: i });
332
+ });
333
+ if (path.startsWith("listBy/") ||
334
+ path.startsWith("paginateBy/") ||
335
+ path.startsWith("find/") ||
336
+ path.startsWith("page/")) {
337
+ params.push({ decorator: (0, index_js_1.DecafQuery)(), index: segments.length });
338
+ }
339
+ return params;
340
+ }
341
+ static complexQueryParams(path) {
342
+ const segments = path.split("/").filter((s) => s.startsWith(":"));
343
+ const params = [];
344
+ segments.forEach((seg, i) => {
345
+ const name = seg.replace(":", "");
346
+ params.push({ decorator: (0, common_1.Param)(name), index: i });
347
+ });
348
+ if (path.startsWith("query/")) {
349
+ params.push({ decorator: (0, index_js_1.DecafQuery)(), index: segments.length });
350
+ }
351
+ return params;
352
+ }
353
+ static createCreateHandler(ModelConstr, modelClazzName) {
354
+ return async function create(data, resp) {
355
+ const { ctx, log } = (await this.logCtx([], db_decorators_1.OperationKeys.CREATE, true)).for(create);
356
+ log.verbose(`creating new ${modelClazzName}`);
357
+ let created;
358
+ try {
359
+ created = await this.persistence(ctx).create(data, ctx);
360
+ }
361
+ catch (e) {
362
+ log.error(`Failed to create new ${modelClazzName}`, e);
363
+ throw e;
364
+ }
365
+ log.info(`created new ${modelClazzName} with id ${created[this.pk]}`);
366
+ if (resp)
434
367
  ctx.toResponse(resp);
435
- return created;
368
+ return created;
369
+ };
370
+ }
371
+ static createBulkCreateHandler(ModelConstr, modelClazzName) {
372
+ return async function createAll(data, resp) {
373
+ const { ctx, log } = (await this.logCtx([], db_decorators_1.BulkCrudOperationKeys.CREATE_ALL, true)).for(createAll);
374
+ log.verbose(`creating new ${modelClazzName}`);
375
+ let created;
376
+ try {
377
+ created = await this.persistence(ctx).createAll(data.map((d) => new ModelConstr(d)), ctx);
436
378
  }
437
- async create(data, resp) {
438
- const { ctx, log } = (await this.logCtx([], db_decorators_1.OperationKeys.CREATE, true)).for(this.create);
439
- log.verbose(`creating new ${modelClazzName}`);
440
- let created;
441
- try {
442
- const persistence = this.persistence(ctx);
443
- created = await persistence.create(data, ctx);
444
- }
445
- catch (e) {
446
- log.error(`Failed to create new ${modelClazzName}`, e);
447
- throw e;
448
- }
449
- log.info(`created new ${modelClazzName} with id ${created[this.pk]}`);
379
+ catch (e) {
380
+ log.error(`Failed to create new ${modelClazzName}`, e);
381
+ throw e;
382
+ }
383
+ log.info(`created new ${modelClazzName} with id ${created[this.pk]}`);
384
+ if (resp)
450
385
  ctx.toResponse(resp);
451
- return created;
386
+ return created;
387
+ };
388
+ }
389
+ static createBulkReadHandler(modelClazzName) {
390
+ return async function readAll(ids) {
391
+ const { ctx, log } = (await this.logCtx([], db_decorators_1.BulkCrudOperationKeys.READ_ALL, true)).for(readAll);
392
+ const normalizedIds = Array.isArray(ids) ? ids : [ids];
393
+ let read;
394
+ try {
395
+ log.debug(`reading ${normalizedIds} ${modelClazzName}`);
396
+ read = await this.persistence(ctx).readAll(normalizedIds, ctx);
452
397
  }
453
- async readAll(ids) {
454
- const { ctx, log } = (await this.logCtx([], db_decorators_1.BulkCrudOperationKeys.READ_ALL, true)).for(this.readAll);
455
- let read;
456
- try {
457
- log.debug(`reading ${ids.length} ${modelClazzName}: ${ids}`);
458
- const persistence = this.persistence(ctx);
459
- read = await persistence.readAll(ids, ctx);
398
+ catch (e) {
399
+ log.error(`Failed to read ${modelClazzName}`, e);
400
+ throw e;
401
+ }
402
+ log.info(`read ${read.length} ${modelClazzName}`);
403
+ return read;
404
+ };
405
+ }
406
+ static createBulkUpdateHandler(modelClazzName) {
407
+ return async function updateAll(body, resp) {
408
+ const { ctx, log } = (await this.logCtx([], db_decorators_1.BulkCrudOperationKeys.UPDATE_ALL, true)).for(updateAll);
409
+ let updated;
410
+ try {
411
+ log.info(`updating ${body.length} ${modelClazzName}`);
412
+ updated = await this.persistence(ctx).updateAll(body, ctx);
413
+ }
414
+ catch (e) {
415
+ log.error(e);
416
+ throw e;
417
+ }
418
+ if (resp)
419
+ ctx.toResponse(resp);
420
+ return updated;
421
+ };
422
+ }
423
+ static createBulkDeleteHandler(modelClazzName) {
424
+ return async function deleteAll(ids, resp) {
425
+ const { ctx, log } = (await this.logCtx([], db_decorators_1.BulkCrudOperationKeys.DELETE_ALL, true)).for(deleteAll);
426
+ const normalizedIds = Array.isArray(ids) ? ids : [ids];
427
+ let read;
428
+ try {
429
+ log.debug(`deleting ${normalizedIds.length} ${modelClazzName}`);
430
+ read = await this.persistence(ctx).deleteAll(normalizedIds, ctx);
431
+ }
432
+ catch (e) {
433
+ log.error(`Failed to delete ${modelClazzName}`, e);
434
+ throw e;
435
+ }
436
+ log.info(`deleted ${read.length} ${modelClazzName}`);
437
+ if (resp)
438
+ ctx.toResponse(resp);
439
+ return read;
440
+ };
441
+ }
442
+ static createReadHandler(getPK, modelClazzName) {
443
+ return async function read(routeParams) {
444
+ const { ctx, log } = (await this.logCtx([], db_decorators_1.OperationKeys.READ, true)).for(read);
445
+ const id = getPK(...routeParams.valuesInOrder);
446
+ if (typeof id === "undefined")
447
+ throw new db_decorators_1.ValidationError(`No ${this.pk} provided`);
448
+ let readResult;
449
+ try {
450
+ log.debug(`reading ${modelClazzName} with ${this.pk} ${id}`);
451
+ readResult = await this.persistence(ctx).read(id, ctx);
452
+ }
453
+ catch (e) {
454
+ log.error(`Failed to read ${modelClazzName} with id ${id}`, e);
455
+ throw e;
456
+ }
457
+ log.info(`read ${modelClazzName} with id ${readResult[this.pk]}`);
458
+ return readResult;
459
+ };
460
+ }
461
+ static createUpdateHandler(getPK, ModelConstr, modelClazzName) {
462
+ return async function update(routeParams, body, resp) {
463
+ const { ctx, log } = (await this.logCtx([], db_decorators_1.OperationKeys.UPDATE, true)).for(update);
464
+ const id = getPK(...routeParams.valuesInOrder);
465
+ if (typeof id === "undefined")
466
+ throw new db_decorators_1.ValidationError(`No ${this.pk} provided`);
467
+ let updated;
468
+ try {
469
+ log.info(`updating ${modelClazzName} with ${this.pk} ${id}`);
470
+ const payload = JSON.parse(JSON.stringify(body));
471
+ updated = await this.persistence(ctx).update(new ModelConstr({ ...payload, [this.pk]: id }), ctx);
472
+ }
473
+ catch (e) {
474
+ log.error(e);
475
+ throw e;
476
+ }
477
+ if (resp)
478
+ ctx.toResponse(resp);
479
+ return updated;
480
+ };
481
+ }
482
+ static createDeleteHandler(getPK, modelClazzName) {
483
+ return async function remove(routeParams, resp) {
484
+ const { ctx, log } = (await this.logCtx([], db_decorators_1.OperationKeys.DELETE, true)).for(remove);
485
+ const id = getPK(...routeParams.valuesInOrder);
486
+ if (typeof id === "undefined")
487
+ throw new db_decorators_1.ValidationError(`No ${this.pk} provided`);
488
+ let del;
489
+ try {
490
+ log.debug(`deleting ${modelClazzName} with ${this.pk} ${id}`);
491
+ del = await this.persistence(ctx).delete(id, ctx);
492
+ }
493
+ catch (e) {
494
+ log.error(`Failed to delete ${modelClazzName} with id ${id}`, e);
495
+ throw e;
496
+ }
497
+ log.info(`deleted ${modelClazzName} with id ${id}`);
498
+ if (resp)
499
+ ctx.toResponse(resp);
500
+ return del;
501
+ };
502
+ }
503
+ static createStatementHandler(modelClazzName) {
504
+ return async function statement(name, args, details) {
505
+ const { ctx } = (await this.logCtx([], core_1.PersistenceKeys.STATEMENT, true)).for(statement);
506
+ const { direction, offset, limit, bookmark } = details;
507
+ args = args.map((a) => (typeof a === "string" ? parseInt(a) : a) || a);
508
+ const pathDirection = args.length > 1 ? args[1] : undefined;
509
+ const resolvedDirection = (direction ?? pathDirection);
510
+ if (resolvedDirection && args.length > 1)
511
+ args[1] = resolvedDirection;
512
+ switch (name) {
513
+ case core_1.PreparedStatementKeys.FIND:
514
+ case core_1.PreparedStatementKeys.FIND_BY:
515
+ break;
516
+ case core_1.PreparedStatementKeys.LIST_BY:
517
+ args.push(direction);
518
+ break;
519
+ case core_1.PreparedStatementKeys.PAGE:
520
+ case core_1.PreparedStatementKeys.PAGE_BY:
521
+ args = [
522
+ args[0],
523
+ resolvedDirection,
524
+ { limit, offset, bookmark },
525
+ ];
526
+ break;
527
+ case core_1.PreparedStatementKeys.FIND_ONE_BY:
528
+ break;
529
+ case core_1.PreparedStatementKeys.COUNT_OF:
530
+ case core_1.PreparedStatementKeys.MAX_OF:
531
+ case core_1.PreparedStatementKeys.MIN_OF:
532
+ case core_1.PreparedStatementKeys.AVG_OF:
533
+ case core_1.PreparedStatementKeys.SUM_OF:
534
+ case core_1.PreparedStatementKeys.DISTINCT_OF:
535
+ case core_1.PreparedStatementKeys.GROUP_OF:
536
+ break;
537
+ }
538
+ return this.persistence(ctx).statement(name, ...args, ctx);
539
+ };
540
+ }
541
+ static createStatementShortcutHandler(statementKey, modelClazzName) {
542
+ return async function statementShortcut(...args) {
543
+ const { ctx } = (await this.logCtx([], statementKey, true)).for(statementShortcut);
544
+ switch (statementKey) {
545
+ case core_1.PreparedStatementKeys.LIST_BY: {
546
+ const [key, details] = args;
547
+ return this.persistence(ctx).listBy(key, details?.direction, ctx);
460
548
  }
461
- catch (e) {
462
- log.error(`Failed to ${modelClazzName} with id ${ids}`, e);
463
- throw e;
549
+ case core_1.PreparedStatementKeys.PAGE_BY: {
550
+ const [key, page, details] = args;
551
+ return this.persistence(ctx).paginateBy(key, details?.direction, {
552
+ limit: details?.limit,
553
+ offset: details?.offset,
554
+ page,
555
+ }, ctx);
464
556
  }
465
- log.info(`read ${read.length} ${modelClazzName}`);
466
- return read;
467
- }
468
- async read(routeParams) {
469
- const { ctx, log } = (await this.logCtx([], db_decorators_1.OperationKeys.READ, true)).for(this.read);
470
- const id = getPK(...routeParams.valuesInOrder);
471
- if (typeof id === "undefined")
472
- throw new db_decorators_1.ValidationError(`No ${this.pk} provided`);
473
- let read;
474
- try {
475
- log.debug(`reading ${modelClazzName} with ${this.pk} ${id}`);
557
+ case core_1.PreparedStatementKeys.FIND: {
558
+ const [value, details] = args;
559
+ const direction = details?.direction ?? core_1.OrderDirection.ASC;
476
560
  const persistence = this.persistence(ctx);
477
- read = await persistence.read(id, ctx);
478
- }
479
- catch (e) {
480
- log.error(`Failed to read ${modelClazzName} with id ${id}`, e);
481
- throw e;
482
- }
483
- log.info(`read ${modelClazzName} with id ${read[this.pk]}`);
484
- return read;
485
- }
486
- async updateAll(body, resp) {
487
- const { ctx, log } = (await this.logCtx([], db_decorators_1.BulkCrudOperationKeys.UPDATE_ALL, true)).for(this.updateAll);
488
- let updated;
489
- try {
490
- log.info(`updating ${body.length} ${modelClazzName}`);
491
- updated = await this.persistence(ctx).updateAll(body, ctx);
561
+ if (typeof persistence.find === "function")
562
+ return persistence.find(value, direction, ctx);
563
+ return persistence.statement(core_1.PreparedStatementKeys.FIND, value, direction, ctx);
492
564
  }
493
- catch (e) {
494
- log.error(e);
495
- throw e;
496
- }
497
- ctx.toResponse(resp);
498
- return updated;
499
- }
500
- async update(routeParams, body, resp) {
501
- const { ctx, log } = (await this.logCtx([], db_decorators_1.OperationKeys.UPDATE, true)).for(this.update);
502
- const id = getPK(...routeParams.valuesInOrder);
503
- if (typeof id === "undefined")
504
- throw new db_decorators_1.ValidationError(`No ${this.pk} provided`);
505
- let updated;
506
- try {
507
- log.info(`updating ${modelClazzName} with ${this.pk} ${id}`);
508
- const payload = JSON.parse(JSON.stringify(body));
565
+ case core_1.PreparedStatementKeys.PAGE: {
566
+ const [value, details] = args;
567
+ const ref = {
568
+ offset: details?.offset ?? 1,
569
+ limit: details?.limit ?? 10,
570
+ bookmark: details?.bookmark,
571
+ };
509
572
  const persistence = this.persistence(ctx);
510
- updated = await persistence.update(new ModelConstr({
511
- ...payload,
512
- [this.pk]: id,
513
- }), ctx);
573
+ const direction = details?.direction ?? core_1.OrderDirection.ASC;
574
+ if (typeof persistence.page === "function")
575
+ return persistence.page(value, direction, ref, ctx);
576
+ return persistence.statement(core_1.PreparedStatementKeys.PAGE, value, direction, ref, ctx);
514
577
  }
515
- catch (e) {
516
- log.error(e);
517
- throw e;
578
+ case core_1.PreparedStatementKeys.FIND_ONE_BY: {
579
+ const [key, value] = args;
580
+ return this.persistence(ctx).findOneBy(key, value, ctx);
518
581
  }
519
- ctx.toResponse(resp);
520
- return updated;
521
- }
522
- async deleteAll(ids, resp) {
523
- const { ctx, log } = (await this.logCtx([], db_decorators_1.BulkCrudOperationKeys.DELETE_ALL, true)).for(this.deleteAll);
524
- let read;
525
- try {
526
- log.debug(`deleting ${ids.length} ${modelClazzName}: ${ids}`);
527
- read = await this.persistence(ctx).deleteAll(ids, ctx);
582
+ case core_1.PreparedStatementKeys.FIND_BY: {
583
+ const [key, value] = args;
584
+ return this.persistence(ctx)
585
+ .for(ctx.toOverrides())
586
+ .findBy(key, value, ctx);
528
587
  }
529
- catch (e) {
530
- log.error(`Failed to delete ${modelClazzName} with id ${ids}`, e);
531
- throw e;
532
- }
533
- log.info(`deleted ${read.length} ${modelClazzName}`);
534
- ctx.toResponse(resp);
535
- return read;
536
- }
537
- async delete(routeParams, resp) {
538
- const { ctx, log } = (await this.logCtx([], db_decorators_1.OperationKeys.DELETE, true)).for(this.delete);
539
- const id = getPK(...routeParams.valuesInOrder);
540
- if (typeof id === "undefined")
541
- throw new db_decorators_1.ValidationError(`No ${this.pk} provided`);
542
- let del;
543
- try {
544
- log.debug(`deleting ${modelClazzName} with ${this.pk} ${id}`);
545
- del = await this.persistence(ctx).delete(id, ctx);
588
+ default:
589
+ if (statementKey === core_1.PreparedStatementKeys.COUNT_OF ||
590
+ statementKey === core_1.PreparedStatementKeys.MAX_OF ||
591
+ statementKey === core_1.PreparedStatementKeys.MIN_OF ||
592
+ statementKey === core_1.PreparedStatementKeys.AVG_OF ||
593
+ statementKey === core_1.PreparedStatementKeys.SUM_OF ||
594
+ statementKey === core_1.PreparedStatementKeys.DISTINCT_OF ||
595
+ statementKey === core_1.PreparedStatementKeys.GROUP_OF) {
596
+ const [field] = args;
597
+ return this.persistence(ctx).statement(statementKey, field, ctx);
598
+ }
599
+ throw new Error(`Unknown statement: ${statementKey}`);
600
+ }
601
+ };
602
+ }
603
+ static createComplexQueryHandler(methodName) {
604
+ return async function complexQuery(...args) {
605
+ const log = this.log?.for?.(complexQuery);
606
+ try {
607
+ if (log)
608
+ log.debug(`Invoking custom query "${methodName}"`);
609
+ const { ctx } = (await this.logCtx([], methodName, true)).for(complexQuery);
610
+ const persistence = this.persistence(ctx);
611
+ const spreadArgs = FromModelController.extractQueryArgs(args);
612
+ if (typeof persistence[methodName] === "function") {
613
+ return persistence[methodName](...spreadArgs, ctx);
546
614
  }
547
- catch (e) {
548
- log.error(`Failed to delete ${modelClazzName} with id ${id}`, e);
549
- throw e;
615
+ if (typeof persistence.statement === "function") {
616
+ return persistence.statement(methodName, ...spreadArgs, ctx);
550
617
  }
551
- log.info(`deleted ${modelClazzName} with id ${id}`);
552
- ctx.toResponse(resp);
553
- return del;
618
+ throw new Error(`Persistence method "${methodName}" not found on ${persistence?.constructor?.name}`);
619
+ }
620
+ catch (e) {
621
+ if (log)
622
+ log.error(`Custom query "${methodName}" failed`, e);
623
+ throw e;
554
624
  }
555
625
  };
556
- __decorate([
557
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", "listBy/:key"),
558
- (0, swagger_1.ApiOperation)({ summary: `Retrieve ${modelClazzName} records by query.` }),
559
- (0, swagger_1.ApiParam)({ name: "key", description: "the model key to sort by" }),
560
- (0, swagger_1.ApiQuery)({ name: "direction", required: true, enum: core_1.OrderDirection }),
561
- (0, swagger_1.ApiOkResponse)({
562
- description: `${modelClazzName} listed successfully.`,
563
- }),
564
- __param(0, (0, common_1.Param)("key")),
565
- __param(1, (0, index_js_1.DecafQuery)()),
566
- __metadata("design:type", Function),
567
- __metadata("design:paramtypes", [String, Object]),
568
- __metadata("design:returntype", Promise)
569
- ], DynamicModelController.prototype, "listBy", null);
570
- __decorate([
571
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", "paginateBy/:key/:page"),
572
- (0, swagger_1.ApiOperation)({ summary: `Retrieve ${modelClazzName} records by query.` }),
573
- (0, swagger_1.ApiParam)({ name: "key", description: "the model key to sort by" }),
574
- (0, swagger_1.ApiParam)({
575
- name: "page",
576
- description: "the page to retrieve or the bookmark",
577
- }),
578
- (0, swagger_1.ApiQuery)({
579
- name: "direction",
580
- required: true,
581
- enum: core_1.OrderDirection,
582
- description: "the sort order",
583
- }),
584
- (0, swagger_1.ApiQuery)({ name: "limit", required: true, description: "the page size" }),
585
- (0, swagger_1.ApiQuery)({ name: "offset", description: "the bookmark when necessary" }),
586
- (0, swagger_1.ApiOkResponse)({
587
- description: `${modelClazzName} listed paginated.`,
588
- }),
589
- __param(0, (0, common_1.Param)("key")),
590
- __param(1, (0, index_js_1.DecafQuery)()),
591
- __metadata("design:type", Function),
592
- __metadata("design:paramtypes", [String, Object]),
593
- __metadata("design:returntype", Promise)
594
- ], DynamicModelController.prototype, "paginateBy", null);
595
- __decorate([
596
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", "find/:value"),
597
- (0, swagger_1.ApiOperation)({
598
- summary: `Find ${modelClazzName} records using the default query attributes.`,
599
- }),
600
- (0, swagger_1.ApiParam)({
601
- name: "value",
602
- description: "The string to match against the default query attributes",
603
- }),
604
- (0, swagger_1.ApiQuery)({
605
- name: "direction",
606
- required: false,
607
- enum: core_1.OrderDirection,
608
- description: "the sort order for the matching results",
609
- }),
610
- (0, swagger_1.ApiOkResponse)({
611
- description: `${modelClazzName} records matching the provided prefix.`,
612
- }),
613
- __param(0, (0, common_1.Param)("value")),
614
- __param(1, (0, index_js_1.DecafQuery)()),
615
- __metadata("design:type", Function),
616
- __metadata("design:paramtypes", [String, Object]),
617
- __metadata("design:returntype", Promise)
618
- ], DynamicModelController.prototype, "find", null);
619
- __decorate([
620
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", "page/:value"),
621
- (0, swagger_1.ApiOperation)({
622
- summary: `Page ${modelClazzName} records using the default query attributes.`,
623
- }),
624
- (0, swagger_1.ApiParam)({
625
- name: "value",
626
- description: "The string to match against the default query attributes",
627
- }),
628
- (0, swagger_1.ApiQuery)({
629
- name: "direction",
630
- required: false,
631
- enum: core_1.OrderDirection,
632
- description: "the sort order for the paged results",
633
- }),
634
- (0, swagger_1.ApiQuery)({
635
- name: "limit",
636
- required: false,
637
- description: "page size",
638
- }),
639
- (0, swagger_1.ApiQuery)({
640
- name: "offset",
641
- required: false,
642
- description: "page number",
643
- }),
644
- (0, swagger_1.ApiQuery)({
645
- name: "bookmark",
646
- required: false,
647
- description: "bookmark for cursor pagination",
648
- }),
649
- (0, swagger_1.ApiOkResponse)({
650
- description: `${modelClazzName} records paged by the provided prefix.`,
651
- }),
652
- __param(0, (0, common_1.Param)("value")),
653
- __param(1, (0, index_js_1.DecafQuery)()),
654
- __metadata("design:type", Function),
655
- __metadata("design:paramtypes", [String, Object]),
656
- __metadata("design:returntype", Promise)
657
- ], DynamicModelController.prototype, "page", null);
658
- __decorate([
659
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", "findOneBy/:key"),
660
- (0, swagger_1.ApiOperation)({ summary: `Retrieve ${modelClazzName} records by query.` }),
661
- (0, swagger_1.ApiParam)({ name: "key", description: "the model key to sort by" }),
662
- (0, swagger_1.ApiOkResponse)({
663
- description: `${modelClazzName} listed found.`,
664
- }),
665
- (0, swagger_1.ApiNotFoundResponse)({
666
- description: `No ${modelClazzName} record matches the provided identifier.`,
667
- }),
668
- __param(0, (0, common_1.Param)("key")),
669
- __param(1, (0, common_1.Param)("value")),
670
- __metadata("design:type", Function),
671
- __metadata("design:paramtypes", [String, Object]),
672
- __metadata("design:returntype", Promise)
673
- ], DynamicModelController.prototype, "findOneBy", null);
674
- __decorate([
675
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", "findBy/:key/:value"),
676
- (0, swagger_1.ApiOperation)({ summary: `Retrieve ${modelClazzName} records by query.` }),
677
- (0, swagger_1.ApiParam)({ name: "key", description: "the model key to compare" }),
678
- (0, swagger_1.ApiParam)({ name: "value", description: "the value to match" }),
679
- (0, swagger_1.ApiQuery)({
680
- name: "direction",
681
- required: true,
682
- enum: core_1.OrderDirection,
683
- description: "the sort order when applicable",
684
- }),
685
- (0, swagger_1.ApiOkResponse)({
686
- description: `${modelClazzName} listed found.`,
687
- }),
688
- (0, swagger_1.ApiNotFoundResponse)({
689
- description: `No ${modelClazzName} record matches the provided identifier.`,
690
- }),
691
- __param(0, (0, common_1.Param)("key")),
692
- __param(1, (0, common_1.Param)("value")),
693
- __param(2, (0, index_js_1.DecafQuery)()),
694
- __metadata("design:type", Function),
695
- __metadata("design:paramtypes", [String, Object, Object]),
696
- __metadata("design:returntype", Promise)
697
- ], DynamicModelController.prototype, "findBy", null);
698
- __decorate([
699
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", "statement/:method/*args"),
700
- (0, swagger_1.ApiOperation)({
701
- summary: `Executes a prepared statement on ${modelClazzName}.`,
702
- }),
703
- (0, swagger_1.ApiParam)({
704
- name: "method",
705
- description: "the prepared statement to execute",
706
- }),
707
- (0, swagger_1.ApiParam)({
708
- name: "args",
709
- description: "concatenated list of arguments the prepared statement can accept",
710
- }),
711
- (0, swagger_1.ApiQuery)({
712
- name: "direction",
713
- required: true,
714
- enum: core_1.OrderDirection,
715
- description: "the sort order when applicable",
716
- }),
717
- (0, swagger_1.ApiQuery)({
718
- name: "limit",
719
- required: true,
720
- description: "limit or page size when applicable",
721
- }),
722
- (0, swagger_1.ApiQuery)({
723
- name: "offset",
724
- required: true,
725
- description: "offset or bookmark when applicable",
726
- }),
727
- (0, swagger_1.ApiOkResponse)({
728
- description: `${modelClazzName} listed found.`,
729
- }),
730
- (0, swagger_1.ApiNotFoundResponse)({
731
- description: `No ${modelClazzName} record matches the provided identifier.`,
732
- }),
733
- __param(0, (0, common_1.Param)("method")),
734
- __param(1, (0, common_1.Param)("args")),
735
- __param(2, (0, index_js_1.DecafQuery)()),
736
- __metadata("design:type", Function),
737
- __metadata("design:paramtypes", [String, Array, Object]),
738
- __metadata("design:returntype", Promise)
739
- ], DynamicModelController.prototype, "statement", null);
740
- __decorate([
741
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "POST", "bulk"),
626
+ }
627
+ static createCustomRouteHandler(methodName) {
628
+ return async function customRoute(...args) {
629
+ const log = this.log?.for?.(customRoute);
630
+ const { ctx } = (await this.logCtx([], methodName, true)).for(customRoute);
631
+ const persistence = this.persistence(ctx);
632
+ const spreadArgs = FromModelController.extractQueryArgs(args);
633
+ // Try the persistence directly (works when it's a custom Repository)
634
+ if (typeof persistence[methodName] === "function") {
635
+ return persistence[methodName](...spreadArgs, ctx);
636
+ }
637
+ // When persistence is a ModelService, the method lives on the underlying repo
638
+ if (persistence?.repo && typeof persistence.repo[methodName] === "function") {
639
+ return persistence.repo[methodName](...spreadArgs, ctx);
640
+ }
641
+ // Fall back to statement gateway
642
+ if (typeof persistence.statement === "function") {
643
+ return persistence.statement(methodName, ...spreadArgs, ctx);
644
+ }
645
+ throw new Error(`Method "${methodName}" not found on ${persistence?.constructor?.name} or its repo`);
646
+ };
647
+ }
648
+ static extractQueryArgs(args) {
649
+ if (args.length === 0)
650
+ return args;
651
+ const last = args[args.length - 1];
652
+ if (last &&
653
+ typeof last === "object" &&
654
+ !Array.isArray(last)) {
655
+ const queryObj = args.pop();
656
+ const hasDirection = queryObj.direction !== undefined;
657
+ const hasLimit = queryObj.limit !== undefined;
658
+ const hasOffset = queryObj.offset !== undefined;
659
+ if (!hasDirection && !hasLimit && !hasOffset)
660
+ return args;
661
+ const extras = [];
662
+ if (hasDirection)
663
+ extras.push(queryObj.direction);
664
+ else if (hasLimit || hasOffset)
665
+ extras.push(undefined);
666
+ if (hasLimit)
667
+ extras.push(queryObj.limit);
668
+ if (hasOffset)
669
+ extras.push(queryObj.offset);
670
+ return [...args, ...extras];
671
+ }
672
+ return args;
673
+ }
674
+ static createCreateDecorators(ModelConstr, modelClazzName) {
675
+ return [
676
+ (0, index_js_1.ApiOperationFromModel)(ModelConstr, "POST"),
742
677
  (0, swagger_1.ApiOperation)({ summary: `Create a new ${modelClazzName}.` }),
743
678
  (0, swagger_1.ApiBody)({
744
679
  description: `Payload for ${modelClazzName}`,
745
- schema: {
746
- type: "array",
747
- items: {
748
- $ref: (0, swagger_1.getSchemaPath)(ModelConstr),
749
- // $ref: getSchemaPath(DtoFor(OperationKeys.CREATE, ModelConstr)),
750
- },
751
- },
680
+ type: (0, DtoBuilder_js_1.DtoFor)(db_decorators_1.OperationKeys.CREATE, ModelConstr),
752
681
  }),
753
682
  (0, swagger_1.ApiCreatedResponse)({
754
683
  description: `${modelClazzName} created successfully.`,
755
- schema: {
756
- type: "array",
757
- items: {
758
- $ref: (0, swagger_1.getSchemaPath)(ModelConstr),
759
- },
760
- },
684
+ schema: { $ref: (0, swagger_1.getSchemaPath)(ModelConstr) },
761
685
  }),
762
686
  (0, swagger_1.ApiBadRequestResponse)({ description: "Payload validation failed." }),
763
687
  (0, swagger_1.ApiUnprocessableEntityResponse)({
764
688
  description: "Repository rejected the provided payload.",
765
689
  }),
766
- __param(0, (0, index_js_1.DecafBody)()),
767
- __param(1, (0, common_1.Response)({ passthrough: true })),
768
- __metadata("design:type", Function),
769
- __metadata("design:paramtypes", [Array, Object]),
770
- __metadata("design:returntype", Promise)
771
- ], DynamicModelController.prototype, "createAll", null);
772
- __decorate([
773
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "POST"),
690
+ ];
691
+ }
692
+ static bulkCreateDecorators(ModelConstr, modelClazzName) {
693
+ return [
694
+ (0, index_js_1.ApiOperationFromModel)(ModelConstr, "POST", "bulk"),
774
695
  (0, swagger_1.ApiOperation)({ summary: `Create a new ${modelClazzName}.` }),
775
696
  (0, swagger_1.ApiBody)({
776
697
  description: `Payload for ${modelClazzName}`,
777
- type: (0, DtoBuilder_js_1.DtoFor)(db_decorators_1.OperationKeys.CREATE, ModelConstr),
698
+ schema: {
699
+ type: "array",
700
+ items: { $ref: (0, swagger_1.getSchemaPath)(ModelConstr) },
701
+ },
778
702
  }),
779
703
  (0, swagger_1.ApiCreatedResponse)({
780
704
  description: `${modelClazzName} created successfully.`,
781
705
  schema: {
782
- $ref: (0, swagger_1.getSchemaPath)(ModelConstr),
706
+ type: "array",
707
+ items: { $ref: (0, swagger_1.getSchemaPath)(ModelConstr) },
783
708
  },
784
709
  }),
785
710
  (0, swagger_1.ApiBadRequestResponse)({ description: "Payload validation failed." }),
786
711
  (0, swagger_1.ApiUnprocessableEntityResponse)({
787
712
  description: "Repository rejected the provided payload.",
788
713
  }),
789
- __param(0, (0, index_js_1.DecafBody)()),
790
- __param(1, (0, common_1.Response)({ passthrough: true })),
791
- __metadata("design:type", Function),
792
- __metadata("design:paramtypes", [Object, Object]),
793
- __metadata("design:returntype", Promise)
794
- ], DynamicModelController.prototype, "create", null);
795
- __decorate([
714
+ ];
715
+ }
716
+ static bulkReadDecorators(ModelConstr, modelClazzName) {
717
+ return [
796
718
  (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", "bulk"),
797
- (0, swagger_1.ApiOperation)({ summary: `Retrieve a ${modelClazzName} record by id.` }),
719
+ (0, swagger_1.ApiOperation)({ summary: `Retrieve ${modelClazzName} records by ids.` }),
798
720
  (0, swagger_1.ApiQuery)({ name: "ids", required: true, type: "array" }),
799
721
  (0, swagger_1.ApiOkResponse)({
800
722
  description: `${modelClazzName} retrieved successfully.`,
801
723
  schema: {
802
724
  type: "array",
803
- items: {
804
- $ref: (0, swagger_1.getSchemaPath)(ModelConstr),
805
- },
806
- },
807
- }),
808
- (0, swagger_1.ApiNotFoundResponse)({
809
- description: `No ${modelClazzName} record matches the provided identifier.`,
810
- }),
811
- __param(0, (0, common_1.Query)("ids")),
812
- __metadata("design:type", Function),
813
- __metadata("design:paramtypes", [Array]),
814
- __metadata("design:returntype", Promise)
815
- ], DynamicModelController.prototype, "readAll", null);
816
- __decorate([
817
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", path),
818
- (0, index_js_1.ApiParamsFromModel)(apiProperties),
819
- (0, swagger_1.ApiOperation)({ summary: `Retrieve a ${modelClazzName} record by id.` }),
820
- (0, swagger_1.ApiOkResponse)({
821
- description: `${modelClazzName} retrieved successfully.`,
822
- schema: {
823
- $ref: (0, swagger_1.getSchemaPath)(ModelConstr),
725
+ items: { $ref: (0, swagger_1.getSchemaPath)(ModelConstr) },
824
726
  },
825
727
  }),
826
728
  (0, swagger_1.ApiNotFoundResponse)({
827
729
  description: `No ${modelClazzName} record matches the provided identifier.`,
828
730
  }),
829
- __param(0, (0, index_js_1.DecafParams)(apiProperties)),
830
- __metadata("design:type", Function),
831
- __metadata("design:paramtypes", [Object]),
832
- __metadata("design:returntype", Promise)
833
- ], DynamicModelController.prototype, "read", null);
834
- __decorate([
835
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "PUT", `bulk`),
731
+ ];
732
+ }
733
+ static bulkUpdateDecorators(ModelConstr, modelClazzName, apiProperties) {
734
+ return [
735
+ (0, index_js_1.ApiOperationFromModel)(ModelConstr, "PUT", "bulk"),
836
736
  (0, index_js_1.ApiParamsFromModel)(apiProperties),
837
737
  (0, swagger_1.ApiOperation)({
838
- summary: `Replace an existing ${modelClazzName} record with a new payload.`,
738
+ summary: `Replace existing ${modelClazzName} records with new payloads.`,
839
739
  }),
840
740
  (0, swagger_1.ApiBody)({
841
- description: `Payload for replace a existing record of ${modelClazzName}`,
741
+ description: `Payload for replacing existing records of ${modelClazzName}`,
842
742
  schema: {
843
743
  type: "array",
844
744
  $ref: (0, swagger_1.getSchemaPath)((0, DtoBuilder_js_1.DtoFor)(db_decorators_1.OperationKeys.UPDATE, ModelConstr)),
@@ -848,125 +748,172 @@ class FromModelController {
848
748
  description: `${modelClazzName} updated successfully.`,
849
749
  schema: {
850
750
  type: "array",
851
- items: {
852
- $ref: (0, swagger_1.getSchemaPath)(ModelConstr),
853
- },
751
+ items: { $ref: (0, swagger_1.getSchemaPath)(ModelConstr) },
854
752
  },
855
753
  }),
856
754
  (0, swagger_1.ApiNotFoundResponse)({
857
755
  description: `No ${modelClazzName} record matches the provided identifier.`,
858
756
  }),
859
757
  (0, swagger_1.ApiBadRequestResponse)({ description: "Payload validation failed." }),
860
- __param(0, (0, index_js_1.DecafBody)()),
861
- __param(1, (0, common_1.Response)({ passthrough: true })),
862
- __metadata("design:type", Function),
863
- __metadata("design:paramtypes", [Array, Object]),
864
- __metadata("design:returntype", Promise)
865
- ], DynamicModelController.prototype, "updateAll", null);
866
- __decorate([
867
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "PUT", path),
758
+ ];
759
+ }
760
+ static bulkDeleteDecorators(ModelConstr, modelClazzName, apiProperties) {
761
+ return [
762
+ (0, index_js_1.ApiOperationFromModel)(ModelConstr, "DELETE", "bulk"),
763
+ (0, index_js_1.ApiParamsFromModel)(apiProperties),
764
+ (0, swagger_1.ApiOperation)({ summary: `Delete ${modelClazzName} records by ids.` }),
765
+ (0, swagger_1.ApiQuery)({ name: "ids", required: true, type: "array" }),
766
+ (0, swagger_1.ApiOkResponse)({
767
+ description: `${modelClazzName} deleted successfully.`,
768
+ schema: {
769
+ type: "array",
770
+ items: { $ref: (0, swagger_1.getSchemaPath)(ModelConstr) },
771
+ },
772
+ }),
773
+ (0, swagger_1.ApiNotFoundResponse)({
774
+ description: `No ${modelClazzName} record matches the provided identifier.`,
775
+ }),
776
+ ];
777
+ }
778
+ static readDecorators(ModelConstr, modelClazzName, apiProperties, pkPath) {
779
+ return [
780
+ (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", pkPath),
781
+ (0, index_js_1.ApiParamsFromModel)(apiProperties),
782
+ (0, swagger_1.ApiOperation)({ summary: `Retrieve a ${modelClazzName} record by id.` }),
783
+ (0, swagger_1.ApiOkResponse)({
784
+ description: `${modelClazzName} retrieved successfully.`,
785
+ schema: { $ref: (0, swagger_1.getSchemaPath)(ModelConstr) },
786
+ }),
787
+ (0, swagger_1.ApiNotFoundResponse)({
788
+ description: `No ${modelClazzName} record matches the provided identifier.`,
789
+ }),
790
+ ];
791
+ }
792
+ static updateDecorators(ModelConstr, modelClazzName, apiProperties, pkPath) {
793
+ return [
794
+ (0, index_js_1.ApiOperationFromModel)(ModelConstr, "PUT", pkPath),
868
795
  (0, index_js_1.ApiParamsFromModel)(apiProperties),
869
796
  (0, swagger_1.ApiOperation)({
870
797
  summary: `Replace an existing ${modelClazzName} record with a new payload.`,
871
798
  }),
872
799
  (0, swagger_1.ApiBody)({
873
- description: `Payload for replace a existing record of ${modelClazzName}`,
800
+ description: `Payload for replacing an existing record of ${modelClazzName}`,
874
801
  type: (0, DtoBuilder_js_1.DtoFor)(db_decorators_1.OperationKeys.UPDATE, ModelConstr),
875
802
  }),
876
803
  (0, swagger_1.ApiOkResponse)({
877
804
  description: `${modelClazzName} updated successfully.`,
878
- schema: {
879
- $ref: (0, swagger_1.getSchemaPath)(ModelConstr),
880
- },
805
+ schema: { $ref: (0, swagger_1.getSchemaPath)(ModelConstr) },
881
806
  }),
882
807
  (0, swagger_1.ApiNotFoundResponse)({
883
808
  description: `No ${modelClazzName} record matches the provided identifier.`,
884
809
  }),
885
810
  (0, swagger_1.ApiBadRequestResponse)({ description: "Payload validation failed." }),
886
- __param(0, (0, index_js_1.DecafParams)(apiProperties)),
887
- __param(1, (0, index_js_1.DecafBody)()),
888
- __param(2, (0, common_1.Response)({ passthrough: true })),
889
- __metadata("design:type", Function),
890
- __metadata("design:paramtypes", [Object, Object, Object]),
891
- __metadata("design:returntype", Promise)
892
- ], DynamicModelController.prototype, "update", null);
893
- __decorate([
894
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "DELETE", "bulk"),
811
+ ];
812
+ }
813
+ static deleteDecorators(ModelConstr, modelClazzName, apiProperties, pkPath) {
814
+ return [
815
+ (0, index_js_1.ApiOperationFromModel)(ModelConstr, "DELETE", pkPath),
895
816
  (0, index_js_1.ApiParamsFromModel)(apiProperties),
896
- (0, swagger_1.ApiOperation)({ summary: `Retrieve a ${modelClazzName} record by id.` }),
897
- (0, swagger_1.ApiQuery)({ name: "ids", required: true, type: "array" }),
817
+ (0, swagger_1.ApiOperation)({ summary: `Delete a ${modelClazzName} record by id.` }),
898
818
  (0, swagger_1.ApiOkResponse)({
899
819
  description: `${modelClazzName} deleted successfully.`,
900
- schema: {
901
- type: "array",
902
- items: {
903
- $ref: (0, swagger_1.getSchemaPath)(ModelConstr),
904
- },
905
- },
820
+ schema: { $ref: (0, swagger_1.getSchemaPath)(ModelConstr) },
906
821
  }),
907
822
  (0, swagger_1.ApiNotFoundResponse)({
908
823
  description: `No ${modelClazzName} record matches the provided identifier.`,
909
824
  }),
910
- __param(0, (0, common_1.Query)("ids")),
911
- __param(1, (0, common_1.Response)({ passthrough: true })),
912
- __metadata("design:type", Function),
913
- __metadata("design:paramtypes", [Array, Object]),
914
- __metadata("design:returntype", Promise)
915
- ], DynamicModelController.prototype, "deleteAll", null);
916
- __decorate([
917
- (0, index_js_1.ApiOperationFromModel)(ModelConstr, "DELETE", path),
918
- (0, index_js_1.ApiParamsFromModel)(apiProperties),
919
- (0, swagger_1.ApiOperation)({ summary: `Delete a ${modelClazzName} record by id.` }),
920
- (0, swagger_1.ApiOkResponse)({
921
- description: `${modelClazzName} deleted successfully.`,
922
- schema: {
923
- $ref: (0, swagger_1.getSchemaPath)(ModelConstr),
924
- },
825
+ ];
826
+ }
827
+ static statementDecorators(ModelConstr, modelClazzName) {
828
+ return [
829
+ (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", "statement/:method/*args"),
830
+ (0, swagger_1.ApiOperation)({
831
+ summary: `Executes a prepared statement on ${modelClazzName}.`,
925
832
  }),
833
+ (0, swagger_1.ApiParam)({ name: "method", description: "the prepared statement to execute" }),
834
+ (0, swagger_1.ApiParam)({
835
+ name: "args",
836
+ description: "concatenated list of arguments the prepared statement can accept",
837
+ }),
838
+ (0, swagger_1.ApiQuery)({
839
+ name: "direction",
840
+ required: true,
841
+ enum: core_1.OrderDirection,
842
+ description: "the sort order when applicable",
843
+ }),
844
+ (0, swagger_1.ApiQuery)({ name: "limit", required: true, description: "limit or page size when applicable" }),
845
+ (0, swagger_1.ApiQuery)({ name: "offset", required: true, description: "offset or bookmark when applicable" }),
846
+ (0, swagger_1.ApiOkResponse)({ description: `${modelClazzName} listed found.` }),
926
847
  (0, swagger_1.ApiNotFoundResponse)({
927
848
  description: `No ${modelClazzName} record matches the provided identifier.`,
928
849
  }),
929
- __param(0, (0, index_js_1.DecafParams)(apiProperties)),
930
- __param(1, (0, common_1.Response)({ passthrough: true })),
931
- __metadata("design:type", Function),
932
- __metadata("design:paramtypes", [Object, Object]),
933
- __metadata("design:returntype", Promise)
934
- ], DynamicModelController.prototype, "delete", null);
935
- DynamicModelController = __decorate([
936
- (0, common_1.Controller)(routePath),
937
- (0, swagger_1.ApiTags)(modelClazzName),
938
- (0, swagger_1.ApiExtraModels)(ModelConstr),
939
- (0, decorators_js_1.Auth)(ModelConstr),
940
- __metadata("design:paramtypes", [index_js_2.DecafRequestContext])
941
- ], DynamicModelController);
942
- return DynamicModelController;
850
+ ];
943
851
  }
944
- static getRouteParametersFromModel(ModelClazz) {
945
- const pk = decorator_validation_1.Model.pk(ModelClazz);
946
- const composed = decoration_1.Metadata.get(ModelClazz, decoration_1.Metadata.key(db_decorators_1.DBKeys.COMPOSED, pk));
947
- const composedKeys = composed?.args ?? [];
948
- // remove duplicates while preserving order
949
- const uniqueKeys = Array.isArray(composedKeys) && composedKeys.length > 0
950
- ? Array.from(new Set([...composedKeys]))
951
- : Array.from(new Set([pk]));
952
- const description = decoration_1.Metadata.description(ModelClazz);
953
- const path = `:${uniqueKeys.join("/:")}`;
954
- const apiProperties = uniqueKeys.map((key) => {
955
- return {
956
- name: key,
957
- description: decoration_1.Metadata.description(ModelClazz, key),
958
- required: true,
959
- type: String,
960
- };
852
+ static statementShortcutDecorators(ModelConstr, modelClazzName, path, statementKey) {
853
+ const base = [
854
+ (0, index_js_1.ApiOperationFromModel)(ModelConstr, "GET", path),
855
+ (0, swagger_1.ApiOperation)({ summary: `Retrieve ${modelClazzName} records.` }),
856
+ (0, swagger_1.ApiOkResponse)({ description: `${modelClazzName} retrieved successfully.` }),
857
+ ];
858
+ const segments = path.split("/").filter((s) => s.startsWith(":"));
859
+ segments.forEach((seg) => {
860
+ const name = seg.replace(":", "");
861
+ base.push((0, swagger_1.ApiParam)({ name, description: `The ${name} parameter` }));
961
862
  });
962
- return {
963
- path,
964
- description,
965
- apiProperties,
966
- getPK: (...params) => composed?.separator ? params.join(composed.separator) : params.join(""),
967
- };
863
+ if (path.startsWith("listBy/") ||
864
+ path.startsWith("paginateBy/") ||
865
+ path.startsWith("find/") ||
866
+ path.startsWith("page/")) {
867
+ base.push((0, swagger_1.ApiQuery)({
868
+ name: "direction",
869
+ required: true,
870
+ enum: core_1.OrderDirection,
871
+ description: "the sort order",
872
+ }));
873
+ }
874
+ if (path.startsWith("paginateBy/") || path.startsWith("page/")) {
875
+ base.push((0, swagger_1.ApiQuery)({ name: "limit", required: false, description: "page size" }), (0, swagger_1.ApiQuery)({ name: "offset", required: false, description: "page number" }), (0, swagger_1.ApiQuery)({ name: "bookmark", required: false, description: "bookmark for cursor pagination" }));
876
+ }
877
+ if (path.startsWith("findOneBy/") || path.startsWith("findBy/")) {
878
+ base.push((0, swagger_1.ApiNotFoundResponse)({
879
+ description: `No ${modelClazzName} record matches the provided identifier.`,
880
+ }));
881
+ }
882
+ if (statementKey === core_1.PreparedStatementKeys.COUNT_OF ||
883
+ statementKey === core_1.PreparedStatementKeys.AVG_OF ||
884
+ statementKey === core_1.PreparedStatementKeys.SUM_OF) {
885
+ base.push((0, swagger_1.ApiOkResponse)({ description: `Result for ${modelClazzName}.`, type: Number }));
886
+ }
887
+ if (statementKey === core_1.PreparedStatementKeys.DISTINCT_OF) {
888
+ base.push((0, swagger_1.ApiOkResponse)({ description: `Distinct values for ${modelClazzName}.`, type: [String] }));
889
+ }
890
+ return base;
891
+ }
892
+ static getQueryDecorators(methodName, routePath, httpVerb, includeQueryParams = false) {
893
+ const extractPathParams = (p) => p.split("/").filter((s) => s.startsWith(":")).map((s) => s.slice(1));
894
+ const apiPathParams = extractPathParams(routePath).map((name) => ({
895
+ name,
896
+ description: `${name} parameter for the query`,
897
+ required: true,
898
+ type: String,
899
+ }));
900
+ const decorators = [
901
+ ...apiPathParams.map((p) => (0, swagger_1.ApiParam)(p)),
902
+ (0, swagger_1.ApiOperation)({ summary: `Retrieve records using "${methodName}".` }),
903
+ (0, swagger_1.ApiOkResponse)({ description: "Result successfully retrieved." }),
904
+ (0, swagger_1.ApiNoContentResponse)({ description: "No content returned by the method." }),
905
+ ];
906
+ if (httpVerb === "GET" && includeQueryParams) {
907
+ decorators.push((0, swagger_1.ApiQuery)({
908
+ name: "direction",
909
+ required: false,
910
+ enum: core_1.OrderDirection,
911
+ description: "the sort order when applicable",
912
+ }), (0, swagger_1.ApiQuery)({ name: "limit", required: false, description: "limit or page size" }), (0, swagger_1.ApiQuery)({ name: "offset", required: false, description: "offset or bookmark" }));
913
+ }
914
+ return decorators;
968
915
  }
969
916
  }
970
917
  exports.FromModelController = FromModelController;
971
- //# sourceMappingURL=FromModelController.js.map
972
- //# sourceMappingURL=FromModelController.js.map
918
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnJvbU1vZGVsQ29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNhZi1tb2RlbC9Gcm9tTW9kZWxDb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixPQUFPLEVBQ1Asa0JBQWtCLEVBQ2xCLGNBQWMsRUFDZCxvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ25CLGFBQWEsRUFDYixZQUFZLEVBQ1osUUFBUSxFQUNSLFFBQVEsRUFDUixPQUFPLEVBQ1AsOEJBQThCLEVBQzlCLGFBQWEsR0FDZCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFFTCxZQUFZLEVBQ1osY0FBYyxFQUNkLGVBQWUsRUFDZixxQkFBcUIsRUFFckIsVUFBVSxFQUNWLE9BQU8sR0FDUixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxLQUFLLEVBQW9CLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RCxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLE1BQU0sRUFDTixhQUFhLEVBQ2IsZUFBZSxHQUNoQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBZSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUVsQixTQUFTLEVBQ1QsV0FBVyxFQUNYLFVBQVUsR0FDWCw4QkFBcUI7QUFDdEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLDhCQUEyQjtBQUV6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsOEJBQW1CO0FBQ2pELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxXQUFX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QkFBb0IsQ0FBQyxFQUFFLFdBQVcsRUFBRSxvQ0FBb0MsRUFBRSxDQUFDO1NBQzVFLENBQUM7UUFFRixJQUFJLFFBQVEsS0FBSyxLQUFLLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUM3QyxVQUFVLENBQUMsSUFBSSxDQUNiLFFBQVEsQ0FBQztnQkFDUCxJQUFJLEVBQUUsV0FBVztnQkFDakIsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLFdBQVcsRUFBRSxnQ0FBZ0M7YUFDOUMsQ0FBQyxFQUNGLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxFQUMvRSxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLG9CQUFvQixFQUFFLENBQUMsQ0FDakYsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udHJvbGxlciwgUGFyYW0sIFF1ZXJ5LCBSZXNwb25zZSB9IGZyb20gXCJAbmVzdGpzL2NvbW1vblwiO1xuaW1wb3J0IHtcbiAgQXBpQmFkUmVxdWVzdFJlc3BvbnNlLFxuICBBcGlCb2R5LFxuICBBcGlDcmVhdGVkUmVzcG9uc2UsXG4gIEFwaUV4dHJhTW9kZWxzLFxuICBBcGlOb0NvbnRlbnRSZXNwb25zZSxcbiAgQXBpTm90Rm91bmRSZXNwb25zZSxcbiAgQXBpT2tSZXNwb25zZSxcbiAgQXBpT3BlcmF0aW9uLFxuICBBcGlQYXJhbSxcbiAgQXBpUXVlcnksXG4gIEFwaVRhZ3MsXG4gIEFwaVVucHJvY2Vzc2FibGVFbnRpdHlSZXNwb25zZSxcbiAgZ2V0U2NoZW1hUGF0aCxcbn0gZnJvbSBcIkBuZXN0anMvc3dhZ2dlclwiO1xuaW1wb3J0IHtcbiAgdHlwZSBEaXJlY3Rpb25MaW1pdE9mZnNldCxcbiAgTW9kZWxTZXJ2aWNlLFxuICBPcmRlckRpcmVjdGlvbixcbiAgUGVyc2lzdGVuY2VLZXlzLFxuICBQcmVwYXJlZFN0YXRlbWVudEtleXMsXG4gIHR5cGUgUmVwbyxcbiAgUmVwb3NpdG9yeSxcbiAgU2VydmljZSxcbn0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBNb2RlbCwgTW9kZWxDb25zdHJ1Y3RvciB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IExvZ2dpbmcsIHRvS2ViYWJDYXNlIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5pbXBvcnQge1xuICBCdWxrQ3J1ZE9wZXJhdGlvbktleXMsXG4gIERCS2V5cyxcbiAgT3BlcmF0aW9uS2V5cyxcbiAgVmFsaWRhdGlvbkVycm9yLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yLCBNZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuaW1wb3J0IHtcbiAgQXBpT3BlcmF0aW9uRnJvbU1vZGVsLFxuICBBcGlQYXJhbXNGcm9tTW9kZWwsXG4gIHR5cGUgRGVjYWZBcGlQcm9wZXJ0eSxcbiAgRGVjYWZCb2R5LFxuICBEZWNhZlBhcmFtcyxcbiAgRGVjYWZRdWVyeSxcbn0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgSHR0cFZlcmJUb0RlY29yYXRvciB9IGZyb20gXCIuL2RlY29yYXRvcnMvdXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgSHR0cFZlcmJzIH0gZnJvbSBcIi4vZGVjb3JhdG9ycy90eXBlc1wiO1xuaW1wb3J0IHsgRGVjYWZSZXF1ZXN0Q29udGV4dCB9IGZyb20gXCIuLi9yZXF1ZXN0XCI7XG5pbXBvcnQgeyBERUNBRl9DT05UUk9MTEVSX0NPTkZJRywgREVDQUZfUk9VVEUgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBBdXRoIH0gZnJvbSBcIi4vZGVjb3JhdG9ycy9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBDb250cm9sbGVyQ29uc3RydWN0b3IgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgRGVjYWZNb2RlbENvbnRyb2xsZXIgfSBmcm9tIFwiLi4vY29udHJvbGxlcnNcIjtcbmltcG9ydCB7IER0b0ZvciB9IGZyb20gXCIuLi9mYWN0b3J5L29wZW5hcGkvRHRvQnVpbGRlclwiO1xuaW1wb3J0IFwiLi4vb3ZlcnJpZGVzXCI7XG5pbXBvcnQge1xuICBNb2RlbENvbnRyb2xsZXJGYWN0b3J5LFxuICB0eXBlIE1vZGVsQ29udHJvbGxlckZhY3RvcnlDb25maWcsXG4gIHR5cGUgU2VydmVyUm91dGUsXG59IGZyb20gXCJAZGVjYWYtdHMvZm9yLWh0dHAvc2VydmVyXCI7XG5cbmV4cG9ydCBjbGFzcyBGcm9tTW9kZWxDb250cm9sbGVyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgbG9nID0gTG9nZ2luZy5mb3IoRnJvbU1vZGVsQ29udHJvbGxlci5uYW1lKTtcblxuICBzdGF0aWMgZ2V0UGVyc2lzdGVuY2U8VCBleHRlbmRzIE1vZGVsPGJvb2xlYW4+PihcbiAgICBNb2RlbENsYXp6OiBNb2RlbENvbnN0cnVjdG9yPFQ+XG4gICk6IFJlcG88VD4gfCBNb2RlbFNlcnZpY2U8VD4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gU2VydmljZS5nZXQ8TW9kZWxTZXJ2aWNlPFQ+PihNb2RlbENsYXp6KTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gTW9kZWxTZXJ2aWNlLmdldFNlcnZpY2UoTW9kZWxDbGF6eikgYXMgTW9kZWxTZXJ2aWNlPFQ+O1xuICAgICAgfSBjYXRjaCAoZTI6IHVua25vd24pIHtcbiAgICAgICAgcmV0dXJuIFJlcG9zaXRvcnkuZm9yTW9kZWwoTW9kZWxDbGF6eikgYXMgUmVwbzxUPjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlUXVlcnlSb3V0ZXNGcm9tUmVwb3NpdG9yeTxUIGV4dGVuZHMgTW9kZWw8Ym9vbGVhbj4+KFxuICAgIHBlcnNpc3RlbmNlOiBSZXBvPFQ+IHwgTW9kZWxTZXJ2aWNlPFQ+LFxuICAgIHByZWZpeDogc3RyaW5nID0gUGVyc2lzdGVuY2VLZXlzLlFVRVJZXG4gICk6IENvbnRyb2xsZXJDb25zdHJ1Y3RvcjxUPiB7XG4gICAgY29uc3QgcmVwbzogUmVwbzxUPiA9XG4gICAgICBwZXJzaXN0ZW5jZSBpbnN0YW5jZW9mIE1vZGVsU2VydmljZSA/IHBlcnNpc3RlbmNlLnJlcG8gOiBwZXJzaXN0ZW5jZTtcbiAgICBjb25zdCBNb2RlbENvbnN0cjogQ29uc3RydWN0b3IgPSByZXBvLmNsYXNzO1xuICAgIGNvbnN0IHF1ZXJ5TWV0aG9kczogUmVjb3JkPHN0cmluZywgeyBmaWVsZHM/OiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB9PiA9XG4gICAgICBNZXRhZGF0YS5nZXQoXG4gICAgICAgIHJlcG8uY29uc3RydWN0b3IgYXMgQ29uc3RydWN0b3IsXG4gICAgICAgIE1ldGFkYXRhLmtleShQZXJzaXN0ZW5jZUtleXMuUVVFUlkpXG4gICAgICApID8/IHt9O1xuXG4gICAgY29uc3Qgcm91dGVNZXRob2RzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID1cbiAgICAgIE1ldGFkYXRhLmdldChcbiAgICAgICAgcGVyc2lzdGVuY2UuY29uc3RydWN0b3IgYXMgQ29uc3RydWN0b3IsXG4gICAgICAgIE1ldGFkYXRhLmtleShERUNBRl9ST1VURSlcbiAgICAgICkgPz8ge307XG5cbiAgICBjbGFzcyBRdWVyeUNvbnRyb2xsZXIgZXh0ZW5kcyBEZWNhZk1vZGVsQ29udHJvbGxlcjxUPiB7XG4gICAgICBvdmVycmlkZSBnZXQgY2xhc3MoKTogTW9kZWxDb25zdHJ1Y3RvcjxUPiB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xuICAgICAgfVxuICAgICAgY29uc3RydWN0b3IoY2xpZW50Q29udGV4dDogRGVjYWZSZXF1ZXN0Q29udGV4dCwgbmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKGNsaWVudENvbnRleHQsIG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW21ldGhvZE5hbWUsIHBhcmFtc10gb2YgT2JqZWN0LmVudHJpZXMocm91dGVNZXRob2RzKSkge1xuICAgICAgY29uc3Qgcm91dGVQYXRoID0gW3BhcmFtcy5wYXRoLnJlcGxhY2UoL15cXC8rfFxcLyskL2csIFwiXCIpXVxuICAgICAgICAuZmlsdGVyKChzZWdtZW50OiBzdHJpbmcpID0+IHNlZ21lbnQgJiYgc2VnbWVudC50cmltKCkpXG4gICAgICAgIC5qb2luKFwiL1wiKTtcblxuICAgICAgY29uc3QgaGFuZGxlciA9IEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlQ29tcGxleFF1ZXJ5SGFuZGxlcihcbiAgICAgICAgbWV0aG9kTmFtZVxuICAgICAgKSBhcyBhbnk7XG4gICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmRlZmluZU1ldGhvZChcbiAgICAgICAgUXVlcnlDb250cm9sbGVyLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBoYW5kbGVyXG4gICAgICApO1xuXG4gICAgICBjb25zdCBodHRwRGVjb3JhdG9yID0gSHR0cFZlcmJUb0RlY29yYXRvcihwYXJhbXMuaHR0cE1ldGhvZCBhcyBIdHRwVmVyYnMpKHJvdXRlUGF0aCB8fCB1bmRlZmluZWQpO1xuICAgICAgY29uc3QgZGVjb3JhdG9ycyA9IEZyb21Nb2RlbENvbnRyb2xsZXIuZ2V0UXVlcnlEZWNvcmF0b3JzKFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICByb3V0ZVBhdGgsXG4gICAgICAgIHBhcmFtcy5odHRwTWV0aG9kXG4gICAgICApO1xuICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5hcHBseURlY29yYXRvcnMoXG4gICAgICAgIFF1ZXJ5Q29udHJvbGxlcixcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgW2h0dHBEZWNvcmF0b3IsIC4uLmRlY29yYXRvcnNdXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW21ldGhvZE5hbWUsIG9ialZhbHVlc10gb2YgT2JqZWN0LmVudHJpZXMocXVlcnlNZXRob2RzKSkge1xuICAgICAgY29uc3QgZmllbGRzID0gb2JqVmFsdWVzLmZpZWxkcyA/PyBbXTtcbiAgICAgIGNvbnN0IHJvdXRlUGF0aCA9IFtwcmVmaXgsIG1ldGhvZE5hbWUsIC4uLmZpZWxkcy5tYXAoKGYpID0+IGA6JHtmfWApXVxuICAgICAgICAuZmlsdGVyKChzZWdtZW50KSA9PiBzZWdtZW50ICYmIHNlZ21lbnQudHJpbSgpKVxuICAgICAgICAuam9pbihcIi9cIik7XG5cbiAgICAgIGNvbnN0IGhhbmRsZXIgPSBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZUNvbXBsZXhRdWVyeUhhbmRsZXIoXG4gICAgICAgIG1ldGhvZE5hbWVcbiAgICAgICkgYXMgYW55O1xuICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5kZWZpbmVNZXRob2QoXG4gICAgICAgIFF1ZXJ5Q29udHJvbGxlcixcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgaGFuZGxlclxuICAgICAgKTtcblxuICAgICAgY29uc3QgaHR0cERlY29yYXRvciA9IEh0dHBWZXJiVG9EZWNvcmF0b3IoXCJHRVRcIiBhcyBIdHRwVmVyYnMpKHJvdXRlUGF0aCB8fCB1bmRlZmluZWQpO1xuICAgICAgY29uc3QgZGVjb3JhdG9ycyA9IEZyb21Nb2RlbENvbnRyb2xsZXIuZ2V0UXVlcnlEZWNvcmF0b3JzKFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICByb3V0ZVBhdGgsXG4gICAgICAgIFwiR0VUXCIsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmFwcGx5RGVjb3JhdG9ycyhcbiAgICAgICAgUXVlcnlDb250cm9sbGVyLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBbaHR0cERlY29yYXRvciwgLi4uZGVjb3JhdG9yc11cbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFF1ZXJ5Q29udHJvbGxlcjtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGU8VCBleHRlbmRzIE1vZGVsPGFueT4+KFxuICAgIE1vZGVsQ29uc3RyOiBNb2RlbENvbnN0cnVjdG9yPFQ+LFxuICAgIG1vZHVsZUNvbmZpZ092ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIE1vZGVsQ29udHJvbGxlckZhY3RvcnlDb25maWc+XG4gICk6IENvbnRyb2xsZXJDb25zdHJ1Y3RvcjxUPiB7XG4gICAgY29uc3QgbG9nID0gRnJvbU1vZGVsQ29udHJvbGxlci5sb2cuZm9yKEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlKTtcbiAgICBjb25zdCB0YWJsZU5hbWUgPSBNb2RlbC50YWJsZU5hbWUoTW9kZWxDb25zdHIpO1xuICAgIGNvbnN0IHJvdXRlUGF0aCA9IHRvS2ViYWJDYXNlKHRhYmxlTmFtZSk7XG4gICAgY29uc3QgbW9kZWxDbGF6ek5hbWUgPSBNb2RlbENvbnN0ci5uYW1lO1xuICAgIGNvbnN0IHBlcnNpc3RlbmNlID0gRnJvbU1vZGVsQ29udHJvbGxlci5nZXRQZXJzaXN0ZW5jZShNb2RlbENvbnN0cik7XG5cbiAgICAvLyBXaGVuIHBlcnNpc3RlbmNlIGlzIGEgTW9kZWxTZXJ2aWNlLCB0aGUgQHF1ZXJ5L0Byb3V0ZSBtZXRhZGF0YSBsaXZlcyBvblxuICAgIC8vIHRoZSB1bmRlcmx5aW5nIHJlcG9zaXRvcnkgY2xhc3MgKGN1c3RvbSByZXBvKSwgbm90IG9uIE1vZGVsU2VydmljZSBpdHNlbGYuXG4gICAgLy8gUGFzcyB0aGUgcmVwbyB0byB0aGUgZmFjdG9yeSBzbyBhZGRDb21wbGV4UXVlcmllcygpIGNhbiBkaXNjb3ZlciB0aGVtLlxuICAgIGNvbnN0IGZhY3RvcnlQZXJzaXN0ZW5jZSA9XG4gICAgICBwZXJzaXN0ZW5jZSBpbnN0YW5jZW9mIE1vZGVsU2VydmljZSA/IHBlcnNpc3RlbmNlLnJlcG8gOiBwZXJzaXN0ZW5jZTtcblxuICAgIGNvbnN0IGRlY29yYXRvckNvbmZpZyA9IE1ldGFkYXRhLmdldChcbiAgICAgIE1vZGVsQ29uc3RyLFxuICAgICAgTWV0YWRhdGEua2V5KERFQ0FGX0NPTlRST0xMRVJfQ09ORklHKVxuICAgICkgYXMgTW9kZWxDb250cm9sbGVyRmFjdG9yeUNvbmZpZyB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBtb2R1bGVPdmVycmlkZSA9IG1vZHVsZUNvbmZpZ092ZXJyaWRlcz8uW01vZGVsQ29uc3RyLm5hbWVdO1xuICAgIGNvbnN0IG1lcmdlZENvbmZpZzogTW9kZWxDb250cm9sbGVyRmFjdG9yeUNvbmZpZyA9IHtcbiAgICAgIC4uLihkZWNvcmF0b3JDb25maWcgfHwge30pLFxuICAgICAgLi4uKG1vZHVsZU92ZXJyaWRlIHx8IHt9KSxcbiAgICB9O1xuXG4gICAgY29uc3QgRmFjdG9yeUNvbnRyb2xsZXIgPSBNb2RlbENvbnRyb2xsZXJGYWN0b3J5LmNyZWF0ZTxUPihcbiAgICAgIE1vZGVsQ29uc3RyLFxuICAgICAgZmFjdG9yeVBlcnNpc3RlbmNlLFxuICAgICAgbWVyZ2VkQ29uZmlnXG4gICAgKTtcbiAgICBjb25zdCBmYWN0b3J5Um91dGVzID0gKEZhY3RvcnlDb250cm9sbGVyIGFzIGFueSkuX19yb3V0ZXNfXyBhc1xuICAgICAgfCBTZXJ2ZXJSb3V0ZVtdXG4gICAgICB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHsgZ2V0UEssIGFwaVByb3BlcnRpZXMsIHBhdGg6IHBrUGF0aCB9ID1cbiAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuZ2V0Um91dGVQYXJhbWV0ZXJzRnJvbU1vZGVsKE1vZGVsQ29uc3RyKTtcblxuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGBDcmVhdGluZyBjb250cm9sbGVyIGZvciBtb2RlbDogJHttb2RlbENsYXp6TmFtZX0gd2l0aCAke2ZhY3RvcnlSb3V0ZXM/Lmxlbmd0aCA/PyAwfSBmYWN0b3J5IHJvdXRlc2BcbiAgICApO1xuXG4gICAgQENvbnRyb2xsZXIocm91dGVQYXRoKVxuICAgIEBBcGlUYWdzKG1vZGVsQ2xhenpOYW1lKVxuICAgIEBBcGlFeHRyYU1vZGVscyhNb2RlbENvbnN0cilcbiAgICBAQXV0aChNb2RlbENvbnN0cilcbiAgICBjbGFzcyBEeW5hbWljTW9kZWxDb250cm9sbGVyIGV4dGVuZHMgRGVjYWZNb2RlbENvbnRyb2xsZXI8VD4ge1xuICAgICAgcHJpdmF0ZSByZWFkb25seSBwazogc3RyaW5nID0gTW9kZWwucGsoTW9kZWxDb25zdHIpIGFzIHN0cmluZztcblxuICAgICAgcHJvdGVjdGVkIHN0YXRpYyBnZXQgY2xhc3MoKSB7XG4gICAgICAgIHJldHVybiBNb2RlbENvbnN0cjtcbiAgICAgIH1cblxuICAgICAgb3ZlcnJpZGUgZ2V0IGNsYXNzKCk6IE1vZGVsQ29uc3RydWN0b3I8VD4ge1xuICAgICAgICByZXR1cm4gTW9kZWxDb25zdHI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0cnVjdG9yKGNsaWVudENvbnRleHQ6IERlY2FmUmVxdWVzdENvbnRleHQpIHtcbiAgICAgICAgc3VwZXIoY2xpZW50Q29udGV4dCwgRHluYW1pY01vZGVsQ29udHJvbGxlci5uYW1lKTtcbiAgICAgICAgbG9nLmluZm8oXG4gICAgICAgICAgYFJlZ2lzdGVyaW5nIGR5bmFtaWMgY29udHJvbGxlciBmb3IgbW9kZWw6ICR7dGhpcy5jbGFzcy5uYW1lfSByb3V0ZTogLyR7cm91dGVQYXRofWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmFjdG9yeVJvdXRlcykge1xuICAgICAgY29uc3Qgc29ydGVkUm91dGVzID0gWy4uLmZhY3RvcnlSb3V0ZXNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgY29uc3QgYVNlZ21lbnRzID0gYS5wYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgIGNvbnN0IGJTZWdtZW50cyA9IGIucGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pO1xuICAgICAgICBjb25zdCBhUGFyYW1Db3VudCA9IGFTZWdtZW50cy5maWx0ZXIoKHMpID0+IHMuc3RhcnRzV2l0aChcIjpcIikpLmxlbmd0aDtcbiAgICAgICAgY29uc3QgYlBhcmFtQ291bnQgPSBiU2VnbWVudHMuZmlsdGVyKChzKSA9PiBzLnN0YXJ0c1dpdGgoXCI6XCIpKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGFMaXRlcmFsQ291bnQgPSBhU2VnbWVudHMubGVuZ3RoIC0gYVBhcmFtQ291bnQ7XG4gICAgICAgIGNvbnN0IGJMaXRlcmFsQ291bnQgPSBiU2VnbWVudHMubGVuZ3RoIC0gYlBhcmFtQ291bnQ7XG4gICAgICAgIGlmIChhTGl0ZXJhbENvdW50ICE9PSBiTGl0ZXJhbENvdW50KVxuICAgICAgICAgIHJldHVybiBiTGl0ZXJhbENvdW50IC0gYUxpdGVyYWxDb3VudDtcbiAgICAgICAgaWYgKGFQYXJhbUNvdW50ICE9PSBiUGFyYW1Db3VudClcbiAgICAgICAgICByZXR1cm4gYVBhcmFtQ291bnQgLSBiUGFyYW1Db3VudDtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9KTtcbiAgICAgIGZvciAoY29uc3Qgcm91dGUgb2Ygc29ydGVkUm91dGVzKSB7XG4gICAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IEZyb21Nb2RlbENvbnRyb2xsZXIubWF0Y2hSb3V0ZShcbiAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICBwa1BhdGgsXG4gICAgICAgICAgYXBpUHJvcGVydGllcyxcbiAgICAgICAgICBnZXRQSyxcbiAgICAgICAgICBNb2RlbENvbnN0cixcbiAgICAgICAgICBtb2RlbENsYXp6TmFtZSxcbiAgICAgICAgICBmYWN0b3J5UGVyc2lzdGVuY2VcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFyZWdpc3RyYXRpb24pIGNvbnRpbnVlO1xuXG4gICAgICAgIGNvbnN0IHsgbWV0aG9kTmFtZSwgaGFuZGxlciwgZGVjb3JhdG9ycywgcGFyYW1EZWNvcmF0b3JzIH0gPVxuICAgICAgICAgIHJlZ2lzdHJhdGlvbjtcblxuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gRnJvbU1vZGVsQ29udHJvbGxlci5kZWZpbmVNZXRob2QoXG4gICAgICAgICAgRHluYW1pY01vZGVsQ29udHJvbGxlcixcbiAgICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICAgIGhhbmRsZXJcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoZGVzY3JpcHRvcikge1xuICAgICAgICAgIGNvbnN0IGh0dHBEZWNvcmF0b3IgPSBIdHRwVmVyYlRvRGVjb3JhdG9yKHJvdXRlLm1ldGhvZCBhcyBIdHRwVmVyYnMpKFxuICAgICAgICAgICAgcm91dGUucGF0aC5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCBcIlwiKSB8fCB1bmRlZmluZWRcbiAgICAgICAgICApO1xuICAgICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuYXBwbHlEZWNvcmF0b3JzKFxuICAgICAgICAgICAgRHluYW1pY01vZGVsQ29udHJvbGxlcixcbiAgICAgICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgICAgICBbaHR0cERlY29yYXRvciwgLi4uZGVjb3JhdG9yc10sXG4gICAgICAgICAgICBwYXJhbURlY29yYXRvcnNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIER5bmFtaWNNb2RlbENvbnRyb2xsZXIgYXMgYW55O1xuICB9XG5cbiAgc3RhdGljIGdldFJvdXRlUGFyYW1ldGVyc0Zyb21Nb2RlbDxUIGV4dGVuZHMgTW9kZWw8YW55Pj4oXG4gICAgTW9kZWxDbGF6ejogTW9kZWxDb25zdHJ1Y3RvcjxUPlxuICApOiB7XG4gICAgcGF0aDogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgYXBpUHJvcGVydGllczogRGVjYWZBcGlQcm9wZXJ0eVtdO1xuICAgIGdldFBLOiAoLi4ucGFyYW1zOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+KSA9PiBzdHJpbmc7XG4gIH0ge1xuICAgIGNvbnN0IHBrID0gTW9kZWwucGsoTW9kZWxDbGF6eikgYXMga2V5b2YgTW9kZWw8YW55PjtcbiAgICBjb25zdCBjb21wb3NlZCA9IE1ldGFkYXRhLmdldChcbiAgICAgIE1vZGVsQ2xhenosXG4gICAgICBNZXRhZGF0YS5rZXkoREJLZXlzLkNPTVBPU0VELCBwaylcbiAgICApO1xuICAgIGNvbnN0IGNvbXBvc2VkS2V5cyA9IGNvbXBvc2VkPy5hcmdzID8/IFtdO1xuXG4gICAgY29uc3QgdW5pcXVlS2V5cyA9XG4gICAgICBBcnJheS5pc0FycmF5KGNvbXBvc2VkS2V5cykgJiYgY29tcG9zZWRLZXlzLmxlbmd0aCA+IDBcbiAgICAgICAgPyBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLmNvbXBvc2VkS2V5c10pKVxuICAgICAgICA6IEFycmF5LmZyb20obmV3IFNldChbcGtdKSk7XG5cbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IE1ldGFkYXRhLmRlc2NyaXB0aW9uKE1vZGVsQ2xhenopID8/IFwiXCI7XG4gICAgY29uc3QgcGF0aCA9IGA6JHt1bmlxdWVLZXlzLmpvaW4oXCIvOlwiKX1gO1xuICAgIGNvbnN0IGFwaVByb3BlcnRpZXM6IERlY2FmQXBpUHJvcGVydHlbXSA9IHVuaXF1ZUtleXMubWFwKChrZXkpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IGtleSxcbiAgICAgICAgZGVzY3JpcHRpb246IE1ldGFkYXRhLmRlc2NyaXB0aW9uKE1vZGVsQ2xhenosIGtleSksXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGgsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIGFwaVByb3BlcnRpZXMsXG4gICAgICBnZXRQSzogKC4uLnBhcmFtczogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPikgPT5cbiAgICAgICAgY29tcG9zZWQ/LnNlcGFyYXRvciA/IHBhcmFtcy5qb2luKGNvbXBvc2VkLnNlcGFyYXRvcikgOiBwYXJhbXMuam9pbihcIlwiKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZGVmaW5lTWV0aG9kKFxuICAgIHRhcmdldDogYW55LFxuICAgIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgICBoYW5kbGVyOiAoLi4uYXJnczogYW55W10pID0+IGFueVxuICApOiBQcm9wZXJ0eURlc2NyaXB0b3IgfCB1bmRlZmluZWQge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgIHRhcmdldC5wcm90b3R5cGUgfHwgdGFyZ2V0LFxuICAgICAgbWV0aG9kTmFtZSxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IGhhbmRsZXIsXG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICB0YXJnZXQucHJvdG90eXBlIHx8IHRhcmdldCxcbiAgICAgIG1ldGhvZE5hbWVcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlEZWNvcmF0b3JzKFxuICAgIHRhcmdldDogYW55LFxuICAgIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgICBtZXRob2REZWNvcmF0b3JzOiBBcnJheTwodGFyZ2V0OiBhbnksIGtleTogc3RyaW5nLCBkZXNjOiBhbnkpID0+IHZvaWQ+LFxuICAgIHBhcmFtRGVjb3JhdG9yczogQXJyYXk8eyBkZWNvcmF0b3I6IFBhcmFtZXRlckRlY29yYXRvcjsgaW5kZXg6IG51bWJlciB9PiA9IFtdXG4gICkge1xuICAgIGNvbnN0IHByb3RvID0gdGFyZ2V0Py5wcm90b3R5cGUgPz8gdGFyZ2V0O1xuICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBtZXRob2ROYW1lKTtcbiAgICBtZXRob2REZWNvcmF0b3JzLmZvckVhY2goKGQpID0+IGQocHJvdG8sIG1ldGhvZE5hbWUsIGRlc2NyaXB0b3IpKTtcbiAgICBwYXJhbURlY29yYXRvcnMuZm9yRWFjaCgoeyBkZWNvcmF0b3IsIGluZGV4IH0pID0+XG4gICAgICBkZWNvcmF0b3IocHJvdG8sIG1ldGhvZE5hbWUsIGluZGV4KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBtYXRjaFJvdXRlKFxuICAgIHJvdXRlOiBTZXJ2ZXJSb3V0ZSxcbiAgICBwa1BhdGg6IHN0cmluZyxcbiAgICBhcGlQcm9wZXJ0aWVzOiBEZWNhZkFwaVByb3BlcnR5W10sXG4gICAgZ2V0UEs6ICguLi5wOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+KSA9PiBzdHJpbmcsXG4gICAgTW9kZWxDb25zdHI6IE1vZGVsQ29uc3RydWN0b3I8YW55PixcbiAgICBtb2RlbENsYXp6TmFtZTogc3RyaW5nLFxuICAgIHBlcnNpc3RlbmNlPzogYW55XG4gICk6IHtcbiAgICBtZXRob2ROYW1lOiBzdHJpbmc7XG4gICAgaGFuZGxlcjogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7XG4gICAgZGVjb3JhdG9yczogQXJyYXk8KHRhcmdldDogYW55LCBrZXk6IHN0cmluZywgZGVzYzogYW55KSA9PiB2b2lkPjtcbiAgICBwYXJhbURlY29yYXRvcnM6IEFycmF5PHsgZGVjb3JhdG9yOiBQYXJhbWV0ZXJEZWNvcmF0b3I7IGluZGV4OiBudW1iZXIgfT47XG4gIH0gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHsgbWV0aG9kLCBwYXRoIH0gPSByb3V0ZTtcbiAgICBjb25zdCBub3JtYWxpemVkUGF0aCA9IHBhdGgucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgXCJcIik7XG5cbiAgICBpZiAobWV0aG9kID09PSBcIlBPU1RcIiAmJiBub3JtYWxpemVkUGF0aCA9PT0gXCJcIikge1xuICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKFxuICAgICAgICBcImNyZWF0ZVwiLFxuICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZUNyZWF0ZUhhbmRsZXIoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lKSxcbiAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVDcmVhdGVEZWNvcmF0b3JzKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSksXG4gICAgICAgIFt7IGRlY29yYXRvcjogRGVjYWZCb2R5KCkgYXMgYW55LCBpbmRleDogMCB9LCB7IGRlY29yYXRvcjogUmVzcG9uc2UoeyBwYXNzdGhyb3VnaDogdHJ1ZSB9KSBhcyBhbnksIGluZGV4OiAxIH1dXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChtZXRob2QgPT09IFwiUE9TVFwiICYmIG5vcm1hbGl6ZWRQYXRoID09PSBcImJ1bGtcIikge1xuICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKFxuICAgICAgICBcImNyZWF0ZUFsbFwiLFxuICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZUJ1bGtDcmVhdGVIYW5kbGVyKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSksXG4gICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuYnVsa0NyZWF0ZURlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lKSxcbiAgICAgICAgW3sgZGVjb3JhdG9yOiBEZWNhZkJvZHkoKSBhcyBhbnksIGluZGV4OiAwIH0sIHsgZGVjb3JhdG9yOiBSZXNwb25zZSh7IHBhc3N0aHJvdWdoOiB0cnVlIH0pIGFzIGFueSwgaW5kZXg6IDEgfV1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZCA9PT0gXCJHRVRcIiAmJiBub3JtYWxpemVkUGF0aCA9PT0gXCJidWxrXCIpIHtcbiAgICAgIHJldHVybiBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlZ2lzdHJhdGlvbihcbiAgICAgICAgXCJyZWFkQWxsXCIsXG4gICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlQnVsa1JlYWRIYW5kbGVyKG1vZGVsQ2xhenpOYW1lKSxcbiAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5idWxrUmVhZERlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lKSxcbiAgICAgICAgW3sgZGVjb3JhdG9yOiBRdWVyeShcImlkc1wiKSBhcyBhbnksIGluZGV4OiAwIH1dXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChtZXRob2QgPT09IFwiUFVUXCIgJiYgbm9ybWFsaXplZFBhdGggPT09IFwiYnVsa1wiKSB7XG4gICAgICByZXR1cm4gRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVSZWdpc3RyYXRpb24oXG4gICAgICAgIFwidXBkYXRlQWxsXCIsXG4gICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlQnVsa1VwZGF0ZUhhbmRsZXIobW9kZWxDbGF6ek5hbWUpLFxuICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmJ1bGtVcGRhdGVEZWNvcmF0b3JzKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSwgYXBpUHJvcGVydGllcyksXG4gICAgICAgIFt7IGRlY29yYXRvcjogRGVjYWZCb2R5KCkgYXMgYW55LCBpbmRleDogMCB9LCB7IGRlY29yYXRvcjogUmVzcG9uc2UoeyBwYXNzdGhyb3VnaDogdHJ1ZSB9KSBhcyBhbnksIGluZGV4OiAxIH1dXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChtZXRob2QgPT09IFwiREVMRVRFXCIgJiYgbm9ybWFsaXplZFBhdGggPT09IFwiYnVsa1wiKSB7XG4gICAgICByZXR1cm4gRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVSZWdpc3RyYXRpb24oXG4gICAgICAgIFwiZGVsZXRlQWxsXCIsXG4gICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlQnVsa0RlbGV0ZUhhbmRsZXIobW9kZWxDbGF6ek5hbWUpLFxuICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmJ1bGtEZWxldGVEZWNvcmF0b3JzKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSwgYXBpUHJvcGVydGllcyksXG4gICAgICAgIFt7IGRlY29yYXRvcjogUXVlcnkoXCJpZHNcIikgYXMgYW55LCBpbmRleDogMCB9LCB7IGRlY29yYXRvcjogUmVzcG9uc2UoeyBwYXNzdGhyb3VnaDogdHJ1ZSB9KSBhcyBhbnksIGluZGV4OiAxIH1dXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChtZXRob2QgPT09IFwiR0VUXCIgJiYgbm9ybWFsaXplZFBhdGggPT09IHBrUGF0aCkge1xuICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKFxuICAgICAgICBcInJlYWRcIixcbiAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVSZWFkSGFuZGxlcihnZXRQSywgbW9kZWxDbGF6ek5hbWUpLFxuICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLnJlYWREZWNvcmF0b3JzKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSwgYXBpUHJvcGVydGllcywgcGtQYXRoKSxcbiAgICAgICAgW3sgZGVjb3JhdG9yOiBEZWNhZlBhcmFtcyhhcGlQcm9wZXJ0aWVzKSBhcyBhbnksIGluZGV4OiAwIH1dXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChtZXRob2QgPT09IFwiUFVUXCIgJiYgbm9ybWFsaXplZFBhdGggPT09IHBrUGF0aCkge1xuICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKFxuICAgICAgICBcInVwZGF0ZVwiLFxuICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVVwZGF0ZUhhbmRsZXIoZ2V0UEssIE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSksXG4gICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIudXBkYXRlRGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIGFwaVByb3BlcnRpZXMsIHBrUGF0aCksXG4gICAgICAgIFtcbiAgICAgICAgICB7IGRlY29yYXRvcjogRGVjYWZQYXJhbXMoYXBpUHJvcGVydGllcykgYXMgYW55LCBpbmRleDogMCB9LFxuICAgICAgICAgIHsgZGVjb3JhdG9yOiBEZWNhZkJvZHkoKSBhcyBhbnksIGluZGV4OiAxIH0sXG4gICAgICAgICAgeyBkZWNvcmF0b3I6IFJlc3BvbnNlKHsgcGFzc3Rocm91Z2g6IHRydWUgfSkgYXMgYW55LCBpbmRleDogMiB9LFxuICAgICAgICBdXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChtZXRob2QgPT09IFwiREVMRVRFXCIgJiYgbm9ybWFsaXplZFBhdGggPT09IHBrUGF0aCkge1xuICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKFxuICAgICAgICBcImRlbGV0ZVwiLFxuICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZURlbGV0ZUhhbmRsZXIoZ2V0UEssIG1vZGVsQ2xhenpOYW1lKSxcbiAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5kZWxldGVEZWNvcmF0b3JzKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSwgYXBpUHJvcGVydGllcywgcGtQYXRoKSxcbiAgICAgICAgW1xuICAgICAgICAgIHsgZGVjb3JhdG9yOiBEZWNhZlBhcmFtcyhhcGlQcm9wZXJ0aWVzKSBhcyBhbnksIGluZGV4OiAwIH0sXG4gICAgICAgICAgeyBkZWNvcmF0b3I6IFJlc3BvbnNlKHsgcGFzc3Rocm91Z2g6IHRydWUgfSkgYXMgYW55LCBpbmRleDogMSB9LFxuICAgICAgICBdXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENvbXBvc2VkIFBLIGZhbGxiYWNrIHJvdXRlcyAoZmlsdGVyRW1wdHkpIOKAlCBwYXRoIGRpZmZlcnMgZnJvbSBwa1BhdGhcbiAgICBjb25zdCBmYWxsYmFja1NlZ21lbnRzID0gbm9ybWFsaXplZFBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKTtcbiAgICBjb25zdCBpc0FsbFBhcmFtcyA9IGZhbGxiYWNrU2VnbWVudHMubGVuZ3RoID4gMCAmJiBmYWxsYmFja1NlZ21lbnRzLmV2ZXJ5KChzKSA9PiBzLnN0YXJ0c1dpdGgoXCI6XCIpKTtcbiAgICBpZiAoaXNBbGxQYXJhbXMgJiYgbm9ybWFsaXplZFBhdGggIT09IHBrUGF0aCkge1xuICAgICAgY29uc3QgZmFsbGJhY2tBcGlQcm9wcyA9IGZhbGxiYWNrU2VnbWVudHMubWFwKChzKSA9PiBzLnNsaWNlKDEpKS5tYXAoKG5hbWUpID0+ICh7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHtuYW1lfSBwYXJhbWV0ZXJgLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgfSkpO1xuICAgICAgY29uc3Qgc3VmZml4ID0gZmFsbGJhY2tTZWdtZW50cy5tYXAoKHMpID0+IHMuc2xpY2UoMSkpLmpvaW4oXCJBbmRcIik7XG4gICAgICBpZiAobWV0aG9kID09PSBcIkdFVFwiKSB7XG4gICAgICAgIHJldHVybiBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlZ2lzdHJhdGlvbihcbiAgICAgICAgICBgcmVhZEJ5JHtzdWZmaXh9YCxcbiAgICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlYWRIYW5kbGVyKGdldFBLLCBtb2RlbENsYXp6TmFtZSksXG4gICAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5yZWFkRGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIGZhbGxiYWNrQXBpUHJvcHMsIG5vcm1hbGl6ZWRQYXRoKSxcbiAgICAgICAgICBbeyBkZWNvcmF0b3I6IERlY2FmUGFyYW1zKGZhbGxiYWNrQXBpUHJvcHMpIGFzIGFueSwgaW5kZXg6IDAgfV1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXRob2QgPT09IFwiUFVUXCIpIHtcbiAgICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKFxuICAgICAgICAgIGB1cGRhdGVCeSR7c3VmZml4fWAsXG4gICAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVVcGRhdGVIYW5kbGVyKGdldFBLLCBNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUpLFxuICAgICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIudXBkYXRlRGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIGZhbGxiYWNrQXBpUHJvcHMsIG5vcm1hbGl6ZWRQYXRoKSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICB7IGRlY29yYXRvcjogRGVjYWZQYXJhbXMoZmFsbGJhY2tBcGlQcm9wcykgYXMgYW55LCBpbmRleDogMCB9LFxuICAgICAgICAgICAgeyBkZWNvcmF0b3I6IERlY2FmQm9keSgpIGFzIGFueSwgaW5kZXg6IDEgfSxcbiAgICAgICAgICAgIHsgZGVjb3JhdG9yOiBSZXNwb25zZSh7IHBhc3N0aHJvdWdoOiB0cnVlIH0pIGFzIGFueSwgaW5kZXg6IDIgfSxcbiAgICAgICAgICBdXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAobWV0aG9kID09PSBcIkRFTEVURVwiKSB7XG4gICAgICAgIHJldHVybiBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlZ2lzdHJhdGlvbihcbiAgICAgICAgICBgZGVsZXRlQnkke3N1ZmZpeH1gLFxuICAgICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlRGVsZXRlSGFuZGxlcihnZXRQSywgbW9kZWxDbGF6ek5hbWUpLFxuICAgICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuZGVsZXRlRGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIGZhbGxiYWNrQXBpUHJvcHMsIG5vcm1hbGl6ZWRQYXRoKSxcbiAgICAgICAgICBbXG4gICAgICAgICAgICB7IGRlY29yYXRvcjogRGVjYWZQYXJhbXMoZmFsbGJhY2tBcGlQcm9wcykgYXMgYW55LCBpbmRleDogMCB9LFxuICAgICAgICAgICAgeyBkZWNvcmF0b3I6IFJlc3BvbnNlKHsgcGFzc3Rocm91Z2g6IHRydWUgfSkgYXMgYW55LCBpbmRleDogMSB9LFxuICAgICAgICAgIF1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWV0aG9kID09PSBcIkdFVFwiICYmIG5vcm1hbGl6ZWRQYXRoID09PSBcInN0YXRlbWVudC86bWV0aG9kLyphcmdzXCIpIHtcbiAgICAgIHJldHVybiBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlZ2lzdHJhdGlvbihcbiAgICAgICAgXCJzdGF0ZW1lbnRcIixcbiAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVTdGF0ZW1lbnRIYW5kbGVyKG1vZGVsQ2xhenpOYW1lKSxcbiAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5zdGF0ZW1lbnREZWNvcmF0b3JzKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSksXG4gICAgICAgIFtcbiAgICAgICAgICB7IGRlY29yYXRvcjogUGFyYW0oXCJtZXRob2RcIikgYXMgYW55LCBpbmRleDogMCB9LFxuICAgICAgICAgIHsgZGVjb3JhdG9yOiBQYXJhbShcImFyZ3NcIikgYXMgYW55LCBpbmRleDogMSB9LFxuICAgICAgICAgIHsgZGVjb3JhdG9yOiBEZWNhZlF1ZXJ5KCkgYXMgYW55LCBpbmRleDogMiB9LFxuICAgICAgICBdXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRlbWVudFJvdXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIFwibGlzdEJ5LzprZXlcIjogUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkxJU1RfQlksXG4gICAgICBcInBhZ2luYXRlQnkvOmtleS86cGFnZVwiOiBQcmVwYXJlZFN0YXRlbWVudEtleXMuUEFHRV9CWSxcbiAgICAgIFwiZmluZC86dmFsdWVcIjogUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkQsXG4gICAgICBcInBhZ2UvOnZhbHVlXCI6IFByZXBhcmVkU3RhdGVtZW50S2V5cy5QQUdFLFxuICAgICAgXCJmaW5kT25lQnkvOmtleS86dmFsdWVcIjogUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkRfT05FX0JZLFxuICAgICAgXCJmaW5kQnkvOmtleS86dmFsdWVcIjogUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkRfQlksXG4gICAgICBcImNvdW50T2YvOmZpZWxkXCI6IFByZXBhcmVkU3RhdGVtZW50S2V5cy5DT1VOVF9PRixcbiAgICAgIFwibWF4T2YvOmZpZWxkXCI6IFByZXBhcmVkU3RhdGVtZW50S2V5cy5NQVhfT0YsXG4gICAgICBcIm1pbk9mLzpmaWVsZFwiOiBQcmVwYXJlZFN0YXRlbWVudEtleXMuTUlOX09GLFxuICAgICAgXCJhdmdPZi86ZmllbGRcIjogUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkFWR19PRixcbiAgICAgIFwic3VtT2YvOmZpZWxkXCI6IFByZXBhcmVkU3RhdGVtZW50S2V5cy5TVU1fT0YsXG4gICAgICBcImRpc3RpbmN0T2YvOmZpZWxkXCI6IFByZXBhcmVkU3RhdGVtZW50S2V5cy5ESVNUSU5DVF9PRixcbiAgICAgIFwiZ3JvdXBPZi86ZmllbGRcIjogUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkdST1VQX09GLFxuICAgIH07XG5cbiAgICBjb25zdCBzdGF0ZW1lbnRLZXkgPSBzdGF0ZW1lbnRSb3V0ZXNbbm9ybWFsaXplZFBhdGhdO1xuICAgIGlmIChzdGF0ZW1lbnRLZXkgJiYgbWV0aG9kID09PSBcIkdFVFwiKSB7XG4gICAgICByZXR1cm4gRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVSZWdpc3RyYXRpb24oXG4gICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuc3RhdGVtZW50TWV0aG9kTmFtZShub3JtYWxpemVkUGF0aCksXG4gICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlU3RhdGVtZW50U2hvcnRjdXRIYW5kbGVyKHN0YXRlbWVudEtleSwgbW9kZWxDbGF6ek5hbWUpLFxuICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLnN0YXRlbWVudFNob3J0Y3V0RGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIG5vcm1hbGl6ZWRQYXRoLCBzdGF0ZW1lbnRLZXkpLFxuICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLnN0YXRlbWVudFNob3J0Y3V0UGFyYW1zKG5vcm1hbGl6ZWRQYXRoKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAobWV0aG9kID09PSBcIkdFVFwiICYmIG5vcm1hbGl6ZWRQYXRoLnN0YXJ0c1dpdGgoXCJxdWVyeS9cIikpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5TWV0aG9kID0gbm9ybWFsaXplZFBhdGgucmVwbGFjZSgvXnF1ZXJ5XFwvLywgXCJcIikuc3BsaXQoXCIvXCIpWzBdO1xuICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKFxuICAgICAgICBxdWVyeU1ldGhvZCxcbiAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVDb21wbGV4UXVlcnlIYW5kbGVyKHF1ZXJ5TWV0aG9kKSxcbiAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5nZXRRdWVyeURlY29yYXRvcnMocXVlcnlNZXRob2QsIG5vcm1hbGl6ZWRQYXRoLCBcIkdFVFwiLCB0cnVlKSxcbiAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5jb21wbGV4UXVlcnlQYXJhbXMobm9ybWFsaXplZFBhdGgpXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIGZvciBjdXN0b20gQHJvdXRlKCkgcGF0aHMgKGUuZy4gXCJtZXRhZGF0YS9mb3ItcHJvZHVjdC86cHJvZHVjdENvZGVcIilcbiAgICBjb25zdCBwYXRoU2VnbWVudHMgPSBub3JtYWxpemVkUGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGNvbnN0IGtub3duUHJlZml4ZXMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICAgICAgXCJsaXN0QnlcIiwgXCJmaW5kQnlcIiwgXCJmaW5kQnlQYWdpbmF0ZVwiLCBcImZpbmRPbmVCeVwiLCBcInBhZ2luYXRlQnlcIixcbiAgICAgIFwiZmluZFwiLCBcInBhZ2VcIiwgXCJjb3VudE9mXCIsIFwibWF4T2ZcIiwgXCJtaW5PZlwiLCBcImF2Z09mXCIsIFwic3VtT2ZcIixcbiAgICAgIFwiZGlzdGluY3RPZlwiLCBcImdyb3VwT2ZcIiwgXCJzdGF0ZW1lbnRcIiwgXCJidWxrXCIsIFwicXVlcnlcIixcbiAgICBdKTtcbiAgICBpZiAoXG4gICAgICBwYXRoU2VnbWVudHMubGVuZ3RoID4gMCAmJlxuICAgICAgIW5vcm1hbGl6ZWRQYXRoLnN0YXJ0c1dpdGgoXCJxdWVyeS9cIikgJiZcbiAgICAgICFrbm93blByZWZpeGVzLmhhcyhwYXRoU2VnbWVudHNbMF0pXG4gICAgKSB7XG4gICAgICAvLyBMb29rIHVwIHRoZSBhY3R1YWwgbWV0aG9kIG5hbWUgZnJvbSBAcm91dGUgbWV0YWRhdGEgYnkgbWF0Y2hpbmcgdGhlIHBhdGguXG4gICAgICAvLyBUaGUgQHJvdXRlIGRlY29yYXRvciBzdG9yZXMgeyBwYXRoLCBodHRwTWV0aG9kLCBoYW5kbGVyIH0ga2V5ZWQgYnkgbWV0aG9kIG5hbWVcbiAgICAgIC8vIG9uIHRoZSByZXBvc2l0b3J5IGNvbnN0cnVjdG9yLlxuICAgICAgY29uc3Qgcm91dGVNZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9XG4gICAgICAgIE1ldGFkYXRhLmdldChcbiAgICAgICAgICAocGVyc2lzdGVuY2UgYXMgYW55KT8uY29uc3RydWN0b3IsXG4gICAgICAgICAgTWV0YWRhdGEua2V5KERFQ0FGX1JPVVRFKVxuICAgICAgICApID8/IHt9O1xuICAgICAgY29uc3QgbWF0Y2hlZEVudHJ5ID0gT2JqZWN0LmVudHJpZXMocm91dGVNZXRhZGF0YSkuZmluZChcbiAgICAgICAgKFssIGluZm9dKSA9PlxuICAgICAgICAgIGluZm8gJiZcbiAgICAgICAgICB0eXBlb2YgaW5mbyA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgIGluZm8ucGF0aD8ucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgXCJcIikgPT09IG5vcm1hbGl6ZWRQYXRoXG4gICAgICApO1xuICAgICAgY29uc3QgYWN0dWFsTWV0aG9kTmFtZSA9IG1hdGNoZWRFbnRyeT8uWzBdIHx8IHBhdGhTZWdtZW50c1swXTtcblxuICAgICAgY29uc3QgcGFyYW1TZWdtZW50cyA9IHBhdGhTZWdtZW50cy5maWx0ZXIoKHMpID0+IHMuc3RhcnRzV2l0aChcIjpcIikpO1xuICAgICAgY29uc3QgYXBpUGF0aFBhcmFtcyA9IHBhcmFtU2VnbWVudHMubWFwKChzKSA9PiBzLnNsaWNlKDEpKS5tYXAoKG5hbWUpID0+ICh7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHtuYW1lfSBwYXJhbWV0ZXIgZm9yIHRoZSBxdWVyeWAsXG4gICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICB9KSk7XG5cbiAgICAgIHJldHVybiBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlZ2lzdHJhdGlvbihcbiAgICAgICAgYWN0dWFsTWV0aG9kTmFtZSxcbiAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVDdXN0b21Sb3V0ZUhhbmRsZXIoYWN0dWFsTWV0aG9kTmFtZSksXG4gICAgICAgIFtcbiAgICAgICAgICAuLi5hcGlQYXRoUGFyYW1zLm1hcCgocCkgPT4gQXBpUGFyYW0ocCkpLFxuICAgICAgICAgIEFwaU9wZXJhdGlvbih7IHN1bW1hcnk6IGBSZXRyaWV2ZSByZWNvcmRzIHVzaW5nIFwiJHthY3R1YWxNZXRob2ROYW1lfVwiLmAgfSksXG4gICAgICAgICAgQXBpT2tSZXNwb25zZSh7IGRlc2NyaXB0aW9uOiBcIlJlc3VsdCBzdWNjZXNzZnVsbHkgcmV0cmlldmVkLlwiIH0pLFxuICAgICAgICAgIEFwaU5vQ29udGVudFJlc3BvbnNlKHsgZGVzY3JpcHRpb246IFwiTm8gY29udGVudCByZXR1cm5lZCBieSB0aGUgbWV0aG9kLlwiIH0pLFxuICAgICAgICBdLFxuICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmNvbXBsZXhRdWVyeVBhcmFtcyhub3JtYWxpemVkUGF0aClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZVJlZ2lzdHJhdGlvbihcbiAgICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gICAgaGFuZGxlcjogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnksXG4gICAgZGVjb3JhdG9yczogQXJyYXk8KHRhcmdldDogYW55LCBrZXk6IHN0cmluZywgZGVzYzogYW55KSA9PiB2b2lkPixcbiAgICBwYXJhbURlY29yYXRvcnM6IEFycmF5PHsgZGVjb3JhdG9yOiBQYXJhbWV0ZXJEZWNvcmF0b3I7IGluZGV4OiBudW1iZXIgfT5cbiAgKSB7XG4gICAgcmV0dXJuIHsgbWV0aG9kTmFtZSwgaGFuZGxlciwgZGVjb3JhdG9ycywgcGFyYW1EZWNvcmF0b3JzIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBzdGF0ZW1lbnRNZXRob2ROYW1lKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgZmlyc3RTZWdtZW50ID0gcGF0aC5zcGxpdChcIi9cIilbMF07XG4gICAgcmV0dXJuIGZpcnN0U2VnbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHN0YXRlbWVudFNob3J0Y3V0UGFyYW1zKFxuICAgIHBhdGg6IHN0cmluZ1xuICApOiBBcnJheTx7IGRlY29yYXRvcjogUGFyYW1ldGVyRGVjb3JhdG9yOyBpbmRleDogbnVtYmVyIH0+IHtcbiAgICBjb25zdCBzZWdtZW50cyA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcigocykgPT4gcy5zdGFydHNXaXRoKFwiOlwiKSk7XG4gICAgY29uc3QgcGFyYW1zOiBBcnJheTx7IGRlY29yYXRvcjogUGFyYW1ldGVyRGVjb3JhdG9yOyBpbmRleDogbnVtYmVyIH0+ID0gW107XG4gICAgc2VnbWVudHMuZm9yRWFjaCgoc2VnLCBpKSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gc2VnLnJlcGxhY2UoXCI6XCIsIFwiXCIpO1xuICAgICAgcGFyYW1zLnB1c2goeyBkZWNvcmF0b3I6IFBhcmFtKG5hbWUpIGFzIGFueSwgaW5kZXg6IGkgfSk7XG4gICAgfSk7XG4gICAgaWYgKFxuICAgICAgcGF0aC5zdGFydHNXaXRoKFwibGlzdEJ5L1wiKSB8fFxuICAgICAgcGF0aC5zdGFydHNXaXRoKFwicGFnaW5hdGVCeS9cIikgfHxcbiAgICAgIHBhdGguc3RhcnRzV2l0aChcImZpbmQvXCIpIHx8XG4gICAgICBwYXRoLnN0YXJ0c1dpdGgoXCJwYWdlL1wiKVxuICAgICkge1xuICAgICAgcGFyYW1zLnB1c2goeyBkZWNvcmF0b3I6IERlY2FmUXVlcnkoKSBhcyBhbnksIGluZGV4OiBzZWdtZW50cy5sZW5ndGggfSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjb21wbGV4UXVlcnlQYXJhbXMoXG4gICAgcGF0aDogc3RyaW5nXG4gICk6IEFycmF5PHsgZGVjb3JhdG9yOiBQYXJhbWV0ZXJEZWNvcmF0b3I7IGluZGV4OiBudW1iZXIgfT4ge1xuICAgIGNvbnN0IHNlZ21lbnRzID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKChzKSA9PiBzLnN0YXJ0c1dpdGgoXCI6XCIpKTtcbiAgICBjb25zdCBwYXJhbXM6IEFycmF5PHsgZGVjb3JhdG9yOiBQYXJhbWV0ZXJEZWNvcmF0b3I7IGluZGV4OiBudW1iZXIgfT4gPSBbXTtcbiAgICBzZWdtZW50cy5mb3JFYWNoKChzZWcsIGkpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBzZWcucmVwbGFjZShcIjpcIiwgXCJcIik7XG4gICAgICBwYXJhbXMucHVzaCh7IGRlY29yYXRvcjogUGFyYW0obmFtZSkgYXMgYW55LCBpbmRleDogaSB9KTtcbiAgICB9KTtcbiAgICBpZiAocGF0aC5zdGFydHNXaXRoKFwicXVlcnkvXCIpKSB7XG4gICAgICBwYXJhbXMucHVzaCh7IGRlY29yYXRvcjogRGVjYWZRdWVyeSgpIGFzIGFueSwgaW5kZXg6IHNlZ21lbnRzLmxlbmd0aCB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZUNyZWF0ZUhhbmRsZXIoXG4gICAgTW9kZWxDb25zdHI6IE1vZGVsQ29uc3RydWN0b3I8YW55PixcbiAgICBtb2RlbENsYXp6TmFtZTogc3RyaW5nXG4gICkge1xuICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiBjcmVhdGUoXG4gICAgICB0aGlzOiBhbnksXG4gICAgICBkYXRhOiBhbnksXG4gICAgICByZXNwPzogYW55XG4gICAgKTogUHJvbWlzZTxNb2RlbDxhbnk+PiB7XG4gICAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSAoXG4gICAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KFtdLCBPcGVyYXRpb25LZXlzLkNSRUFURSwgdHJ1ZSlcbiAgICAgICkuZm9yKGNyZWF0ZSk7XG4gICAgICBsb2cudmVyYm9zZShgY3JlYXRpbmcgbmV3ICR7bW9kZWxDbGF6ek5hbWV9YCk7XG4gICAgICBsZXQgY3JlYXRlZDogTW9kZWw7XG4gICAgICB0cnkge1xuICAgICAgICBjcmVhdGVkID0gYXdhaXQgdGhpcy5wZXJzaXN0ZW5jZShjdHgpLmNyZWF0ZShkYXRhLCBjdHgpO1xuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICBsb2cuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgbmV3ICR7bW9kZWxDbGF6ek5hbWV9YCwgZSBhcyBFcnJvcik7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBsb2cuaW5mbyhgY3JlYXRlZCBuZXcgJHttb2RlbENsYXp6TmFtZX0gd2l0aCBpZCAkeyhjcmVhdGVkIGFzIGFueSlbdGhpcy5wa119YCk7XG4gICAgICBpZiAocmVzcCkgY3R4LnRvUmVzcG9uc2UocmVzcCk7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlQnVsa0NyZWF0ZUhhbmRsZXIoXG4gICAgTW9kZWxDb25zdHI6IE1vZGVsQ29uc3RydWN0b3I8YW55PixcbiAgICBtb2RlbENsYXp6TmFtZTogc3RyaW5nXG4gICkge1xuICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiBjcmVhdGVBbGwoXG4gICAgICB0aGlzOiBhbnksXG4gICAgICBkYXRhOiBhbnlbXSxcbiAgICAgIHJlc3A/OiBhbnlcbiAgICApOiBQcm9taXNlPE1vZGVsW10+IHtcbiAgICAgIGNvbnN0IHsgY3R4LCBsb2cgfSA9IChcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dDdHgoW10sIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5DUkVBVEVfQUxMLCB0cnVlKVxuICAgICAgKS5mb3IoY3JlYXRlQWxsKTtcbiAgICAgIGxvZy52ZXJib3NlKGBjcmVhdGluZyBuZXcgJHttb2RlbENsYXp6TmFtZX1gKTtcbiAgICAgIGxldCBjcmVhdGVkOiBhbnlbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNyZWF0ZWQgPSBhd2FpdCB0aGlzLnBlcnNpc3RlbmNlKGN0eCkuY3JlYXRlQWxsKFxuICAgICAgICAgIGRhdGEubWFwKChkKSA9PiBuZXcgTW9kZWxDb25zdHIoZCkpLFxuICAgICAgICAgIGN0eFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICBsb2cuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgbmV3ICR7bW9kZWxDbGF6ek5hbWV9YCwgZSBhcyBFcnJvcik7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBsb2cuaW5mbyhgY3JlYXRlZCBuZXcgJHttb2RlbENsYXp6TmFtZX0gd2l0aCBpZCAkeyhjcmVhdGVkIGFzIGFueSlbdGhpcy5wa119YCk7XG4gICAgICBpZiAocmVzcCkgY3R4LnRvUmVzcG9uc2UocmVzcCk7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlQnVsa1JlYWRIYW5kbGVyKG1vZGVsQ2xhenpOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gcmVhZEFsbChcbiAgICAgIHRoaXM6IGFueSxcbiAgICAgIGlkczogc3RyaW5nW11cbiAgICApOiBQcm9taXNlPE1vZGVsW10+IHtcbiAgICAgIGNvbnN0IHsgY3R4LCBsb2cgfSA9IChcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dDdHgoW10sIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5SRUFEX0FMTCwgdHJ1ZSlcbiAgICAgICkuZm9yKHJlYWRBbGwpO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZElkcyA9IEFycmF5LmlzQXJyYXkoaWRzKSA/IGlkcyA6IFtpZHNdO1xuICAgICAgbGV0IHJlYWQ6IE1vZGVsW107XG4gICAgICB0cnkge1xuICAgICAgICBsb2cuZGVidWcoYHJlYWRpbmcgJHtub3JtYWxpemVkSWRzfSAke21vZGVsQ2xhenpOYW1lfWApO1xuICAgICAgICByZWFkID0gYXdhaXQgdGhpcy5wZXJzaXN0ZW5jZShjdHgpLnJlYWRBbGwobm9ybWFsaXplZElkcyBhcyBhbnksIGN0eCk7XG4gICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgIGxvZy5lcnJvcihgRmFpbGVkIHRvIHJlYWQgJHttb2RlbENsYXp6TmFtZX1gLCBlIGFzIEVycm9yKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIGxvZy5pbmZvKGByZWFkICR7cmVhZC5sZW5ndGh9ICR7bW9kZWxDbGF6ek5hbWV9YCk7XG4gICAgICByZXR1cm4gcmVhZDtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlQnVsa1VwZGF0ZUhhbmRsZXIobW9kZWxDbGF6ek5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiB1cGRhdGVBbGwoXG4gICAgICB0aGlzOiBhbnksXG4gICAgICBib2R5OiBhbnlbXSxcbiAgICAgIHJlc3A/OiBhbnlcbiAgICApOiBQcm9taXNlPGFueVtdPiB7XG4gICAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSAoXG4gICAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KFtdLCBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuVVBEQVRFX0FMTCwgdHJ1ZSlcbiAgICAgICkuZm9yKHVwZGF0ZUFsbCk7XG4gICAgICBsZXQgdXBkYXRlZDogYW55W107XG4gICAgICB0cnkge1xuICAgICAgICBsb2cuaW5mbyhgdXBkYXRpbmcgJHtib2R5Lmxlbmd0aH0gJHttb2RlbENsYXp6TmFtZX1gKTtcbiAgICAgICAgdXBkYXRlZCA9IGF3YWl0IHRoaXMucGVyc2lzdGVuY2UoY3R4KS51cGRhdGVBbGwoYm9keSwgY3R4KTtcbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgbG9nLmVycm9yKGUgYXMgRXJyb3IpO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgaWYgKHJlc3ApIGN0eC50b1Jlc3BvbnNlKHJlc3ApO1xuICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZUJ1bGtEZWxldGVIYW5kbGVyKG1vZGVsQ2xhenpOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gZGVsZXRlQWxsKFxuICAgICAgdGhpczogYW55LFxuICAgICAgaWRzOiBzdHJpbmdbXSxcbiAgICAgIHJlc3A/OiBhbnlcbiAgICApOiBQcm9taXNlPE1vZGVsW10+IHtcbiAgICAgIGNvbnN0IHsgY3R4LCBsb2cgfSA9IChcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dDdHgoW10sIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5ERUxFVEVfQUxMLCB0cnVlKVxuICAgICAgKS5mb3IoZGVsZXRlQWxsKTtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRJZHMgPSBBcnJheS5pc0FycmF5KGlkcykgPyBpZHMgOiBbaWRzXTtcbiAgICAgIGxldCByZWFkOiBNb2RlbFtdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nLmRlYnVnKGBkZWxldGluZyAke25vcm1hbGl6ZWRJZHMubGVuZ3RofSAke21vZGVsQ2xhenpOYW1lfWApO1xuICAgICAgICByZWFkID0gYXdhaXQgdGhpcy5wZXJzaXN0ZW5jZShjdHgpLmRlbGV0ZUFsbChub3JtYWxpemVkSWRzLCBjdHgpO1xuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICBsb2cuZXJyb3IoYEZhaWxlZCB0byBkZWxldGUgJHttb2RlbENsYXp6TmFtZX1gLCBlIGFzIEVycm9yKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICAgIGxvZy5pbmZvKGBkZWxldGVkICR7cmVhZC5sZW5ndGh9ICR7bW9kZWxDbGF6ek5hbWV9YCk7XG4gICAgICBpZiAocmVzcCkgY3R4LnRvUmVzcG9uc2UocmVzcCk7XG4gICAgICByZXR1cm4gcmVhZDtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlUmVhZEhhbmRsZXIoXG4gICAgZ2V0UEs6ICguLi5wOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+KSA9PiBzdHJpbmcsXG4gICAgbW9kZWxDbGF6ek5hbWU6IHN0cmluZ1xuICApIHtcbiAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gcmVhZChcbiAgICAgIHRoaXM6IGFueSxcbiAgICAgIHJvdXRlUGFyYW1zOiBhbnlcbiAgICApOiBQcm9taXNlPE1vZGVsPiB7XG4gICAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSAoXG4gICAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KFtdLCBPcGVyYXRpb25LZXlzLlJFQUQsIHRydWUpXG4gICAgICApLmZvcihyZWFkKTtcbiAgICAgIGNvbnN0IGlkID0gZ2V0UEsoLi4ucm91dGVQYXJhbXMudmFsdWVzSW5PcmRlcik7XG4gICAgICBpZiAodHlwZW9mIGlkID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBObyAke3RoaXMucGt9IHByb3ZpZGVkYCk7XG4gICAgICBsZXQgcmVhZFJlc3VsdDogTW9kZWw7XG4gICAgICB0cnkge1xuICAgICAgICBsb2cuZGVidWcoYHJlYWRpbmcgJHttb2RlbENsYXp6TmFtZX0gd2l0aCAke3RoaXMucGt9ICR7aWR9YCk7XG4gICAgICAgIHJlYWRSZXN1bHQgPSBhd2FpdCB0aGlzLnBlcnNpc3RlbmNlKGN0eCkucmVhZChpZCwgY3R4KTtcbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgbG9nLmVycm9yKGBGYWlsZWQgdG8gcmVhZCAke21vZGVsQ2xhenpOYW1lfSB3aXRoIGlkICR7aWR9YCwgZSBhcyBFcnJvcik7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgICBsb2cuaW5mbyhgcmVhZCAke21vZGVsQ2xhenpOYW1lfSB3aXRoIGlkICR7KHJlYWRSZXN1bHQgYXMgYW55KVt0aGlzLnBrXX1gKTtcbiAgICAgIHJldHVybiByZWFkUmVzdWx0O1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVVcGRhdGVIYW5kbGVyKFxuICAgIGdldFBLOiAoLi4ucDogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPikgPT4gc3RyaW5nLFxuICAgIE1vZGVsQ29uc3RyOiBNb2RlbENvbnN0cnVjdG9yPGFueT4sXG4gICAgbW9kZWxDbGF6ek5hbWU6IHN0cmluZ1xuICApIHtcbiAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gdXBkYXRlKFxuICAgICAgdGhpczogYW55LFxuICAgICAgcm91dGVQYXJhbXM6IGFueSxcbiAgICAgIGJvZHk6IGFueSxcbiAgICAgIHJlc3A/OiBhbnlcbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgY29uc3QgeyBjdHgsIGxvZyB9ID0gKFxuICAgICAgICBhd2FpdCB0aGlzLmxvZ0N0eChbXSwgT3BlcmF0aW9uS2V5cy5VUERBVEUsIHRydWUpXG4gICAgICApLmZvcih1cGRhdGUpO1xuICAgICAgY29uc3QgaWQgPSBnZXRQSyguLi5yb3V0ZVBhcmFtcy52YWx1ZXNJbk9yZGVyKTtcbiAgICAgIGlmICh0eXBlb2YgaWQgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYE5vICR7dGhpcy5wa30gcHJvdmlkZWRgKTtcbiAgICAgIGxldCB1cGRhdGVkOiBhbnk7XG4gICAgICB0cnkge1xuICAgICAgICBsb2cuaW5mbyhgdXBkYXRpbmcgJHttb2RlbENsYXp6TmFtZX0gd2l0aCAke3RoaXMucGt9ICR7aWR9YCk7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcbiAgICAgICAgdXBkYXRlZCA9IGF3YWl0IHRoaXMucGVyc2lzdGVuY2UoY3R4KS51cGRhdGUoXG4gICAgICAgICAgbmV3IE1vZGVsQ29uc3RyKHsgLi4ucGF5bG9hZCwgW3RoaXMucGtdOiBpZCB9KSxcbiAgICAgICAgICBjdHhcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgbG9nLmVycm9yKGUgYXMgRXJyb3IpO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgaWYgKHJlc3ApIGN0eC50b1Jlc3BvbnNlKHJlc3ApO1xuICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZURlbGV0ZUhhbmRsZXIoXG4gICAgZ2V0UEs6ICguLi5wOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+KSA9PiBzdHJpbmcsXG4gICAgbW9kZWxDbGF6ek5hbWU6IHN0cmluZ1xuICApIHtcbiAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gcmVtb3ZlKFxuICAgICAgdGhpczogYW55LFxuICAgICAgcm91dGVQYXJhbXM6IGFueSxcbiAgICAgIHJlc3A/OiBhbnlcbiAgICApOiBQcm9taXNlPE1vZGVsPiB7XG4gICAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSAoXG4gICAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KFtdLCBPcGVyYXRpb25LZXlzLkRFTEVURSwgdHJ1ZSlcbiAgICAgICkuZm9yKHJlbW92ZSk7XG4gICAgICBjb25zdCBpZCA9IGdldFBLKC4uLnJvdXRlUGFyYW1zLnZhbHVlc0luT3JkZXIpO1xuICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihgTm8gJHt0aGlzLnBrfSBwcm92aWRlZGApO1xuICAgICAgbGV0IGRlbDogTW9kZWw7XG4gICAgICB0cnkge1xuICAgICAgICBsb2cuZGVidWcoYGRlbGV0aW5nICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggJHt0aGlzLnBrfSAke2lkfWApO1xuICAgICAgICBkZWwgPSBhd2FpdCB0aGlzLnBlcnNpc3RlbmNlKGN0eCkuZGVsZXRlKGlkLCBjdHgpO1xuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICBsb2cuZXJyb3IoYEZhaWxlZCB0byBkZWxldGUgJHttb2RlbENsYXp6TmFtZX0gd2l0aCBpZCAke2lkfWAsIGUgYXMgRXJyb3IpO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgICAgbG9nLmluZm8oYGRlbGV0ZWQgJHttb2RlbENsYXp6TmFtZX0gd2l0aCBpZCAke2lkfWApO1xuICAgICAgaWYgKHJlc3ApIGN0eC50b1Jlc3BvbnNlKHJlc3ApO1xuICAgICAgcmV0dXJuIGRlbDtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlU3RhdGVtZW50SGFuZGxlcihtb2RlbENsYXp6TmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHN0YXRlbWVudChcbiAgICAgIHRoaXM6IGFueSxcbiAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgIGFyZ3M6IChzdHJpbmcgfCBudW1iZXIpW10sXG4gICAgICBkZXRhaWxzOiBEaXJlY3Rpb25MaW1pdE9mZnNldFxuICAgICk6IFByb21pc2U8YW55PiB7XG4gICAgICBjb25zdCB7IGN0eCB9ID0gKFxuICAgICAgICBhd2FpdCB0aGlzLmxvZ0N0eChbXSwgUGVyc2lzdGVuY2VLZXlzLlNUQVRFTUVOVCwgdHJ1ZSlcbiAgICAgICkuZm9yKHN0YXRlbWVudCk7XG4gICAgICBjb25zdCB7IGRpcmVjdGlvbiwgb2Zmc2V0LCBsaW1pdCwgYm9va21hcmsgfSA9IGRldGFpbHM7XG4gICAgICBhcmdzID0gYXJncy5tYXAoXG4gICAgICAgIChhKSA9PiAodHlwZW9mIGEgPT09IFwic3RyaW5nXCIgPyBwYXJzZUludChhIGFzIHN0cmluZykgOiBhKSB8fCBhXG4gICAgICApIGFzIGFueVtdO1xuICAgICAgY29uc3QgcGF0aERpcmVjdGlvbiA9IGFyZ3MubGVuZ3RoID4gMSA/IGFyZ3NbMV0gOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCByZXNvbHZlZERpcmVjdGlvbiA9IChkaXJlY3Rpb24gPz8gcGF0aERpcmVjdGlvbikgYXNcbiAgICAgICAgfCBzdHJpbmdcbiAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAocmVzb2x2ZWREaXJlY3Rpb24gJiYgYXJncy5sZW5ndGggPiAxKSBhcmdzWzFdID0gcmVzb2x2ZWREaXJlY3Rpb247XG4gICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuRklORDpcbiAgICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuRklORF9CWTpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuTElTVF9CWTpcbiAgICAgICAgICBhcmdzLnB1c2goZGlyZWN0aW9uIGFzIHN0cmluZyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLlBBR0U6XG4gICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLlBBR0VfQlk6XG4gICAgICAgICAgYXJncyA9IFtcbiAgICAgICAgICAgIGFyZ3NbMF0sXG4gICAgICAgICAgICByZXNvbHZlZERpcmVjdGlvbiBhcyBhbnksXG4gICAgICAgICAgICB7IGxpbWl0LCBvZmZzZXQsIGJvb2ttYXJrIH0sXG4gICAgICAgICAgXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuRklORF9PTkVfQlk6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkNPVU5UX09GOlxuICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5NQVhfT0Y6XG4gICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLk1JTl9PRjpcbiAgICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuQVZHX09GOlxuICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5TVU1fT0Y6XG4gICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkRJU1RJTkNUX09GOlxuICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5HUk9VUF9PRjpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnBlcnNpc3RlbmNlKGN0eCkuc3RhdGVtZW50KG5hbWUsIC4uLmFyZ3MsIGN0eCk7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZVN0YXRlbWVudFNob3J0Y3V0SGFuZGxlcihcbiAgICBzdGF0ZW1lbnRLZXk6IHN0cmluZyxcbiAgICBtb2RlbENsYXp6TmFtZTogc3RyaW5nXG4gICkge1xuICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiBzdGF0ZW1lbnRTaG9ydGN1dChcbiAgICAgIHRoaXM6IGFueSxcbiAgICAgIC4uLmFyZ3M6IGFueVtdXG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIGNvbnN0IHsgY3R4IH0gPSAoXG4gICAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KFtdLCBzdGF0ZW1lbnRLZXksIHRydWUpXG4gICAgICApLmZvcihzdGF0ZW1lbnRTaG9ydGN1dCk7XG5cbiAgICAgIHN3aXRjaCAoc3RhdGVtZW50S2V5KSB7XG4gICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkxJU1RfQlk6IHtcbiAgICAgICAgICBjb25zdCBba2V5LCBkZXRhaWxzXSA9IGFyZ3M7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGVyc2lzdGVuY2UoY3R4KS5saXN0QnkoXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAoZGV0YWlscyBhcyBhbnkpPy5kaXJlY3Rpb24gYXMgT3JkZXJEaXJlY3Rpb24sXG4gICAgICAgICAgICBjdHhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLlBBR0VfQlk6IHtcbiAgICAgICAgICBjb25zdCBba2V5LCBwYWdlLCBkZXRhaWxzXSA9IGFyZ3M7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGVyc2lzdGVuY2UoY3R4KS5wYWdpbmF0ZUJ5KFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgKGRldGFpbHMgYXMgYW55KT8uZGlyZWN0aW9uIGFzIE9yZGVyRGlyZWN0aW9uLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsaW1pdDogKGRldGFpbHMgYXMgYW55KT8ubGltaXQsXG4gICAgICAgICAgICAgIG9mZnNldDogKGRldGFpbHMgYXMgYW55KT8ub2Zmc2V0LFxuICAgICAgICAgICAgICBwYWdlLFxuICAgICAgICAgICAgfSBhcyBhbnksXG4gICAgICAgICAgICBjdHhcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkQ6IHtcbiAgICAgICAgICBjb25zdCBbdmFsdWUsIGRldGFpbHNdID0gYXJncztcbiAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPVxuICAgICAgICAgICAgKGRldGFpbHMgYXMgYW55KT8uZGlyZWN0aW9uID8/IE9yZGVyRGlyZWN0aW9uLkFTQztcbiAgICAgICAgICBjb25zdCBwZXJzaXN0ZW5jZSA9IHRoaXMucGVyc2lzdGVuY2UoY3R4KTtcbiAgICAgICAgICBpZiAodHlwZW9mIHBlcnNpc3RlbmNlLmZpbmQgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgIHJldHVybiBwZXJzaXN0ZW5jZS5maW5kKHZhbHVlLCBkaXJlY3Rpb24sIGN0eCk7XG4gICAgICAgICAgcmV0dXJuIHBlcnNpc3RlbmNlLnN0YXRlbWVudChQcmVwYXJlZFN0YXRlbWVudEtleXMuRklORCwgdmFsdWUsIGRpcmVjdGlvbiwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5QQUdFOiB7XG4gICAgICAgICAgY29uc3QgW3ZhbHVlLCBkZXRhaWxzXSA9IGFyZ3M7XG4gICAgICAgICAgY29uc3QgcmVmID0ge1xuICAgICAgICAgICAgb2Zmc2V0OiAoZGV0YWlscyBhcyBhbnkpPy5vZmZzZXQgPz8gMSxcbiAgICAgICAgICAgIGxpbWl0OiAoZGV0YWlscyBhcyBhbnkpPy5saW1pdCA/PyAxMCxcbiAgICAgICAgICAgIGJvb2ttYXJrOiAoZGV0YWlscyBhcyBhbnkpPy5ib29rbWFyayxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IHBlcnNpc3RlbmNlID0gdGhpcy5wZXJzaXN0ZW5jZShjdHgpO1xuICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IChkZXRhaWxzIGFzIGFueSk/LmRpcmVjdGlvbiA/PyBPcmRlckRpcmVjdGlvbi5BU0M7XG4gICAgICAgICAgaWYgKHR5cGVvZiBwZXJzaXN0ZW5jZS5wYWdlID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICByZXR1cm4gcGVyc2lzdGVuY2UucGFnZSh2YWx1ZSwgZGlyZWN0aW9uLCByZWYsIGN0eCk7XG4gICAgICAgICAgcmV0dXJuIHBlcnNpc3RlbmNlLnN0YXRlbWVudChQcmVwYXJlZFN0YXRlbWVudEtleXMuUEFHRSwgdmFsdWUsIGRpcmVjdGlvbiwgcmVmLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkRfT05FX0JZOiB7XG4gICAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gYXJncztcbiAgICAgICAgICByZXR1cm4gdGhpcy5wZXJzaXN0ZW5jZShjdHgpLmZpbmRPbmVCeShrZXksIHZhbHVlLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkRfQlk6IHtcbiAgICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBhcmdzO1xuICAgICAgICAgIHJldHVybiB0aGlzLnBlcnNpc3RlbmNlKGN0eClcbiAgICAgICAgICAgIC5mb3IoY3R4LnRvT3ZlcnJpZGVzKCkpXG4gICAgICAgICAgICAuZmluZEJ5KGtleSwgdmFsdWUsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBzdGF0ZW1lbnRLZXkgPT09IFByZXBhcmVkU3RhdGVtZW50S2V5cy5DT1VOVF9PRiB8fFxuICAgICAgICAgICAgc3RhdGVtZW50S2V5ID09PSBQcmVwYXJlZFN0YXRlbWVudEtleXMuTUFYX09GIHx8XG4gICAgICAgICAgICBzdGF0ZW1lbnRLZXkgPT09IFByZXBhcmVkU3RhdGVtZW50S2V5cy5NSU5fT0YgfHxcbiAgICAgICAgICAgIHN0YXRlbWVudEtleSA9PT0gUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkFWR19PRiB8fFxuICAgICAgICAgICAgc3RhdGVtZW50S2V5ID09PSBQcmVwYXJlZFN0YXRlbWVudEtleXMuU1VNX09GIHx8XG4gICAgICAgICAgICBzdGF0ZW1lbnRLZXkgPT09IFByZXBhcmVkU3RhdGVtZW50S2V5cy5ESVNUSU5DVF9PRiB8fFxuICAgICAgICAgICAgc3RhdGVtZW50S2V5ID09PSBQcmVwYXJlZFN0YXRlbWVudEtleXMuR1JPVVBfT0ZcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IFtmaWVsZF0gPSBhcmdzO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGVyc2lzdGVuY2UoY3R4KS5zdGF0ZW1lbnQoc3RhdGVtZW50S2V5LCBmaWVsZCwgY3R4KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHN0YXRlbWVudDogJHtzdGF0ZW1lbnRLZXl9YCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZUNvbXBsZXhRdWVyeUhhbmRsZXIobWV0aG9kTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIGNvbXBsZXhRdWVyeShcbiAgICAgIHRoaXM6IGFueSxcbiAgICAgIC4uLmFyZ3M6IGFueVtdXG4gICAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgIGNvbnN0IGxvZzogYW55ID0gdGhpcy5sb2c/LmZvcj8uKGNvbXBsZXhRdWVyeSk7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAobG9nKSBsb2cuZGVidWcoYEludm9raW5nIGN1c3RvbSBxdWVyeSBcIiR7bWV0aG9kTmFtZX1cImApO1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gKFxuICAgICAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KFtdLCBtZXRob2ROYW1lLCB0cnVlKVxuICAgICAgICApLmZvcihjb21wbGV4UXVlcnkpO1xuICAgICAgICBjb25zdCBwZXJzaXN0ZW5jZSA9IHRoaXMucGVyc2lzdGVuY2UoY3R4KTtcbiAgICAgICAgY29uc3Qgc3ByZWFkQXJncyA9IEZyb21Nb2RlbENvbnRyb2xsZXIuZXh0cmFjdFF1ZXJ5QXJncyhhcmdzKTtcbiAgICAgICAgaWYgKHR5cGVvZiBwZXJzaXN0ZW5jZVttZXRob2ROYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgcmV0dXJuIHBlcnNpc3RlbmNlW21ldGhvZE5hbWVdKC4uLnNwcmVhZEFyZ3MsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBwZXJzaXN0ZW5jZS5zdGF0ZW1lbnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHJldHVybiBwZXJzaXN0ZW5jZS5zdGF0ZW1lbnQobWV0aG9kTmFtZSwgLi4uc3ByZWFkQXJncywgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFBlcnNpc3RlbmNlIG1ldGhvZCBcIiR7bWV0aG9kTmFtZX1cIiBub3QgZm91bmQgb24gJHtwZXJzaXN0ZW5jZT8uY29uc3RydWN0b3I/Lm5hbWV9YFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIGlmIChsb2cpIGxvZy5lcnJvcihgQ3VzdG9tIHF1ZXJ5IFwiJHttZXRob2ROYW1lfVwiIGZhaWxlZGAsIGUpO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVDdXN0b21Sb3V0ZUhhbmRsZXIobWV0aG9kTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIGN1c3RvbVJvdXRlKFxuICAgICAgdGhpczogYW55LFxuICAgICAgLi4uYXJnczogYW55W11cbiAgICApOiBQcm9taXNlPGFueT4ge1xuICAgICAgY29uc3QgbG9nOiBhbnkgPSB0aGlzLmxvZz8uZm9yPy4oY3VzdG9tUm91dGUpO1xuICAgICAgY29uc3QgeyBjdHggfSA9IChcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dDdHgoW10sIG1ldGhvZE5hbWUsIHRydWUpXG4gICAgICApLmZvcihjdXN0b21Sb3V0ZSk7XG4gICAgICBjb25zdCBwZXJzaXN0ZW5jZSA9IHRoaXMucGVyc2lzdGVuY2UoY3R4KTtcbiAgICAgIGNvbnN0IHNwcmVhZEFyZ3MgPSBGcm9tTW9kZWxDb250cm9sbGVyLmV4dHJhY3RRdWVyeUFyZ3MoYXJncyk7XG5cbiAgICAgIC8vIFRyeSB0aGUgcGVyc2lzdGVuY2UgZGlyZWN0bHkgKHdvcmtzIHdoZW4gaXQncyBhIGN1c3RvbSBSZXBvc2l0b3J5KVxuICAgICAgaWYgKHR5cGVvZiBwZXJzaXN0ZW5jZVttZXRob2ROYW1lXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBwZXJzaXN0ZW5jZVttZXRob2ROYW1lXSguLi5zcHJlYWRBcmdzLCBjdHgpO1xuICAgICAgfVxuICAgICAgLy8gV2hlbiBwZXJzaXN0ZW5jZSBpcyBhIE1vZGVsU2VydmljZSwgdGhlIG1ldGhvZCBsaXZlcyBvbiB0aGUgdW5kZXJseWluZyByZXBvXG4gICAgICBpZiAocGVyc2lzdGVuY2U/LnJlcG8gJiYgdHlwZW9mIHBlcnNpc3RlbmNlLnJlcG9bbWV0aG9kTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gcGVyc2lzdGVuY2UucmVwb1ttZXRob2ROYW1lXSguLi5zcHJlYWRBcmdzLCBjdHgpO1xuICAgICAgfVxuICAgICAgLy8gRmFsbCBiYWNrIHRvIHN0YXRlbWVudCBnYXRld2F5XG4gICAgICBpZiAodHlwZW9mIHBlcnNpc3RlbmNlLnN0YXRlbWVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBwZXJzaXN0ZW5jZS5zdGF0ZW1lbnQobWV0aG9kTmFtZSwgLi4uc3ByZWFkQXJncywgY3R4KTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1ldGhvZCBcIiR7bWV0aG9kTmFtZX1cIiBub3QgZm91bmQgb24gJHtwZXJzaXN0ZW5jZT8uY29uc3RydWN0b3I/Lm5hbWV9IG9yIGl0cyByZXBvYFxuICAgICAgKTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZXh0cmFjdFF1ZXJ5QXJncyhhcmdzOiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHJldHVybiBhcmdzO1xuICAgIGNvbnN0IGxhc3QgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgaWYgKFxuICAgICAgbGFzdCAmJlxuICAgICAgdHlwZW9mIGxhc3QgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KGxhc3QpXG4gICAgKSB7XG4gICAgICBjb25zdCBxdWVyeU9iaiA9IGFyZ3MucG9wKCk7XG4gICAgICBjb25zdCBoYXNEaXJlY3Rpb24gPSBxdWVyeU9iai5kaXJlY3Rpb24gIT09IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGhhc0xpbWl0ID0gcXVlcnlPYmoubGltaXQgIT09IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IGhhc09mZnNldCA9IHF1ZXJ5T2JqLm9mZnNldCAhPT0gdW5kZWZpbmVkO1xuICAgICAgaWYgKCFoYXNEaXJlY3Rpb24gJiYgIWhhc0xpbWl0ICYmICFoYXNPZmZzZXQpIHJldHVybiBhcmdzO1xuICAgICAgY29uc3QgZXh0cmFzOiBhbnlbXSA9IFtdO1xuICAgICAgaWYgKGhhc0RpcmVjdGlvbikgZXh0cmFzLnB1c2gocXVlcnlPYmouZGlyZWN0aW9uKTtcbiAgICAgIGVsc2UgaWYgKGhhc0xpbWl0IHx8IGhhc09mZnNldCkgZXh0cmFzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgIGlmIChoYXNMaW1pdCkgZXh0cmFzLnB1c2gocXVlcnlPYmoubGltaXQpO1xuICAgICAgaWYgKGhhc09mZnNldCkgZXh0cmFzLnB1c2gocXVlcnlPYmoub2Zmc2V0KTtcbiAgICAgIHJldHVybiBbLi4uYXJncywgLi4uZXh0cmFzXTtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3M7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVDcmVhdGVEZWNvcmF0b3JzKFxuICAgIE1vZGVsQ29uc3RyOiBNb2RlbENvbnN0cnVjdG9yPGFueT4sXG4gICAgbW9kZWxDbGF6ek5hbWU6IHN0cmluZ1xuICApOiBBcnJheTwodGFyZ2V0OiBhbnksIGtleTogc3RyaW5nLCBkZXNjOiBhbnkpID0+IHZvaWQ+IHtcbiAgICByZXR1cm4gW1xuICAgICAgQXBpT3BlcmF0aW9uRnJvbU1vZGVsKE1vZGVsQ29uc3RyLCBcIlBPU1RcIiksXG4gICAgICBBcGlPcGVyYXRpb24oeyBzdW1tYXJ5OiBgQ3JlYXRlIGEgbmV3ICR7bW9kZWxDbGF6ek5hbWV9LmAgfSksXG4gICAgICBBcGlCb2R5KHtcbiAgICAgICAgZGVzY3JpcHRpb246IGBQYXlsb2FkIGZvciAke21vZGVsQ2xhenpOYW1lfWAsXG4gICAgICAgIHR5cGU6IER0b0ZvcihPcGVyYXRpb25LZXlzLkNSRUFURSwgTW9kZWxDb25zdHIpLFxuICAgICAgfSksXG4gICAgICBBcGlDcmVhdGVkUmVzcG9uc2Uoe1xuICAgICAgICBkZXNjcmlwdGlvbjogYCR7bW9kZWxDbGF6ek5hbWV9IGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LmAsXG4gICAgICAgIHNjaGVtYTogeyAkcmVmOiBnZXRTY2hlbWFQYXRoKE1vZGVsQ29uc3RyKSB9LFxuICAgICAgfSksXG4gICAgICBBcGlCYWRSZXF1ZXN0UmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogXCJQYXlsb2FkIHZhbGlkYXRpb24gZmFpbGVkLlwiIH0pLFxuICAgICAgQXBpVW5wcm9jZXNzYWJsZUVudGl0eVJlc3BvbnNlKHtcbiAgICAgICAgZGVzY3JpcHRpb246IFwiUmVwb3NpdG9yeSByZWplY3RlZCB0aGUgcHJvdmlkZWQgcGF5bG9hZC5cIixcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBidWxrQ3JlYXRlRGVjb3JhdG9ycyhcbiAgICBNb2RlbENvbnN0cjogTW9kZWxDb25zdHJ1Y3Rvcjxhbnk+LFxuICAgIG1vZGVsQ2xhenpOYW1lOiBzdHJpbmdcbiAgKTogQXJyYXk8KHRhcmdldDogYW55LCBrZXk6IHN0cmluZywgZGVzYzogYW55KSA9PiB2b2lkPiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIEFwaU9wZXJhdGlvbkZyb21Nb2RlbChNb2RlbENvbnN0ciwgXCJQT1NUXCIsIFwiYnVsa1wiKSxcbiAgICAgIEFwaU9wZXJhdGlvbih7IHN1bW1hcnk6IGBDcmVhdGUgYSBuZXcgJHttb2RlbENsYXp6TmFtZX0uYCB9KSxcbiAgICAgIEFwaUJvZHkoe1xuICAgICAgICBkZXNjcmlwdGlvbjogYFBheWxvYWQgZm9yICR7bW9kZWxDbGF6ek5hbWV9YCxcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgIGl0ZW1zOiB7ICRyZWY6IGdldFNjaGVtYVBhdGgoTW9kZWxDb25zdHIpIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIEFwaUNyZWF0ZWRSZXNwb25zZSh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHttb2RlbENsYXp6TmFtZX0gY3JlYXRlZCBzdWNjZXNzZnVsbHkuYCxcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgIGl0ZW1zOiB7ICRyZWY6IGdldFNjaGVtYVBhdGgoTW9kZWxDb25zdHIpIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIEFwaUJhZFJlcXVlc3RSZXNwb25zZSh7IGRlc2NyaXB0aW9uOiBcIlBheWxvYWQgdmFsaWRhdGlvbiBmYWlsZWQuXCIgfSksXG4gICAgICBBcGlVbnByb2Nlc3NhYmxlRW50aXR5UmVzcG9uc2Uoe1xuICAgICAgICBkZXNjcmlwdGlvbjogXCJSZXBvc2l0b3J5IHJlamVjdGVkIHRoZSBwcm92aWRlZCBwYXlsb2FkLlwiLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGJ1bGtSZWFkRGVjb3JhdG9ycyhcbiAgICBNb2RlbENvbnN0cjogTW9kZWxDb25zdHJ1Y3Rvcjxhbnk+LFxuICAgIG1vZGVsQ2xhenpOYW1lOiBzdHJpbmdcbiAgKTogQXJyYXk8KHRhcmdldDogYW55LCBrZXk6IHN0cmluZywgZGVzYzogYW55KSA9PiB2b2lkPiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIEFwaU9wZXJhdGlvbkZyb21Nb2RlbChNb2RlbENvbnN0ciwgXCJHRVRcIiwgXCJidWxrXCIpLFxuICAgICAgQXBpT3BlcmF0aW9uKHsgc3VtbWFyeTogYFJldHJpZXZlICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZHMgYnkgaWRzLmAgfSksXG4gICAgICBBcGlRdWVyeSh7IG5hbWU6IFwiaWRzXCIsIHJlcXVpcmVkOiB0cnVlLCB0eXBlOiBcImFycmF5XCIgfSksXG4gICAgICBBcGlPa1Jlc3BvbnNlKHtcbiAgICAgICAgZGVzY3JpcHRpb246IGAke21vZGVsQ2xhenpOYW1lfSByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5LmAsXG4gICAgICAgIHNjaGVtYToge1xuICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICBpdGVtczogeyAkcmVmOiBnZXRTY2hlbWFQYXRoKE1vZGVsQ29uc3RyKSB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBBcGlOb3RGb3VuZFJlc3BvbnNlKHtcbiAgICAgICAgZGVzY3JpcHRpb246IGBObyAke21vZGVsQ2xhenpOYW1lfSByZWNvcmQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgaWRlbnRpZmllci5gLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGJ1bGtVcGRhdGVEZWNvcmF0b3JzKFxuICAgIE1vZGVsQ29uc3RyOiBNb2RlbENvbnN0cnVjdG9yPGFueT4sXG4gICAgbW9kZWxDbGF6ek5hbWU6IHN0cmluZyxcbiAgICBhcGlQcm9wZXJ0aWVzOiBEZWNhZkFwaVByb3BlcnR5W11cbiAgKTogQXJyYXk8KHRhcmdldDogYW55LCBrZXk6IHN0cmluZywgZGVzYzogYW55KSA9PiB2b2lkPiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIEFwaU9wZXJhdGlvbkZyb21Nb2RlbChNb2RlbENvbnN0ciwgXCJQVVRcIiwgXCJidWxrXCIpLFxuICAgICAgQXBpUGFyYW1zRnJvbU1vZGVsKGFwaVByb3BlcnRpZXMpLFxuICAgICAgQXBpT3BlcmF0aW9uKHtcbiAgICAgICAgc3VtbWFyeTogYFJlcGxhY2UgZXhpc3RpbmcgJHttb2RlbENsYXp6TmFtZX0gcmVjb3JkcyB3aXRoIG5ldyBwYXlsb2Fkcy5gLFxuICAgICAgfSksXG4gICAgICBBcGlCb2R5KHtcbiAgICAgICAgZGVzY3JpcHRpb246IGBQYXlsb2FkIGZvciByZXBsYWNpbmcgZXhpc3RpbmcgcmVjb3JkcyBvZiAke21vZGVsQ2xhenpOYW1lfWAsXG4gICAgICAgIHNjaGVtYToge1xuICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAkcmVmOiBnZXRTY2hlbWFQYXRoKER0b0ZvcihPcGVyYXRpb25LZXlzLlVQREFURSwgTW9kZWxDb25zdHIpKSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgQXBpT2tSZXNwb25zZSh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHttb2RlbENsYXp6TmFtZX0gdXBkYXRlZCBzdWNjZXNzZnVsbHkuYCxcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgIGl0ZW1zOiB7ICRyZWY6IGdldFNjaGVtYVBhdGgoTW9kZWxDb25zdHIpIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIEFwaU5vdEZvdW5kUmVzcG9uc2Uoe1xuICAgICAgICBkZXNjcmlwdGlvbjogYE5vICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCBtYXRjaGVzIHRoZSBwcm92aWRlZCBpZGVudGlmaWVyLmAsXG4gICAgICB9KSxcbiAgICAgIEFwaUJhZFJlcXVlc3RSZXNwb25zZSh7IGRlc2NyaXB0aW9uOiBcIlBheWxvYWQgdmFsaWRhdGlvbiBmYWlsZWQuXCIgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGJ1bGtEZWxldGVEZWNvcmF0b3JzKFxuICAgIE1vZGVsQ29uc3RyOiBNb2RlbENvbnN0cnVjdG9yPGFueT4sXG4gICAgbW9kZWxDbGF6ek5hbWU6IHN0cmluZyxcbiAgICBhcGlQcm9wZXJ0aWVzOiBEZWNhZkFwaVByb3BlcnR5W11cbiAgKTogQXJyYXk8KHRhcmdldDogYW55LCBrZXk6IHN0cmluZywgZGVzYzogYW55KSA9PiB2b2lkPiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIEFwaU9wZXJhdGlvbkZyb21Nb2RlbChNb2RlbENvbnN0ciwgXCJERUxFVEVcIiwgXCJidWxrXCIpLFxuICAgICAgQXBpUGFyYW1zRnJvbU1vZGVsKGFwaVByb3BlcnRpZXMpLFxuICAgICAgQXBpT3BlcmF0aW9uKHsgc3VtbWFyeTogYERlbGV0ZSAke21vZGVsQ2xhenpOYW1lfSByZWNvcmRzIGJ5IGlkcy5gIH0pLFxuICAgICAgQXBpUXVlcnkoeyBuYW1lOiBcImlkc1wiLCByZXF1aXJlZDogdHJ1ZSwgdHlwZTogXCJhcnJheVwiIH0pLFxuICAgICAgQXBpT2tSZXNwb25zZSh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgJHttb2RlbENsYXp6TmFtZX0gZGVsZXRlZCBzdWNjZXNzZnVsbHkuYCxcbiAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgIGl0ZW1zOiB7ICRyZWY6IGdldFNjaGVtYVBhdGgoTW9kZWxDb25zdHIpIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIEFwaU5vdEZvdW5kUmVzcG9uc2Uoe1xuICAgICAgICBkZXNjcmlwdGlvbjogYE5vICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCBtYXRjaGVzIHRoZSBwcm92aWRlZCBpZGVudGlmaWVyLmAsXG4gICAgICB9KSxcbiAgICBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZERlY29yYXRvcnMoXG4gICAgTW9kZWxDb25zdHI6IE1vZGVsQ29uc3RydWN0b3I8YW55PixcbiAgICBtb2RlbENsYXp6TmFtZTogc3RyaW5nLFxuICAgIGFwaVByb3BlcnRpZXM6IERlY2FmQXBpUHJvcGVydHlbXSxcbiAgICBwa1BhdGg6IHN0cmluZ1xuICApOiBBcnJheTwodGFyZ2V0OiBhbnksIGtleTogc3RyaW5nLCBkZXNjOiBhbnkpID0+IHZvaWQ+IHtcbiAgICByZXR1cm4gW1xuICAgICAgQXBpT3BlcmF0aW9uRnJvbU1vZGVsKE1vZGVsQ29uc3RyLCBcIkdFVFwiLCBwa1BhdGgpLFxuICAgICAgQXBpUGFyYW1zRnJvbU1vZGVsKGFwaVByb3BlcnRpZXMpLFxuICAgICAgQXBpT3BlcmF0aW9uKHsgc3VtbWFyeTogYFJldHJpZXZlIGEgJHttb2RlbENsYXp6TmFtZX0gcmVjb3JkIGJ5IGlkLmAgfSksXG4gICAgICBBcGlPa1Jlc3BvbnNlKHtcbiAgICAgICAgZGVzY3JpcHRpb246IGAke21vZGVsQ2xhenpOYW1lfSByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5LmAsXG4gICAgICAgIHNjaGVtYTogeyAkcmVmOiBnZXRTY2hlbWFQYXRoKE1vZGVsQ29uc3RyKSB9LFxuICAgICAgfSksXG4gICAgICBBcGlOb3RGb3VuZFJlc3BvbnNlKHtcbiAgICAgICAgZGVzY3JpcHRpb246IGBObyAke21vZGVsQ2xhenpOYW1lfSByZWNvcmQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgaWRlbnRpZmllci5gLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHVwZGF0ZURlY29yYXRvcnMoXG4gICAgTW9kZWxDb25zdHI6IE1vZGVsQ29uc3RydWN0b3I8YW55PixcbiAgICBtb2RlbENsYXp6TmFtZTogc3RyaW5nLFxuICAgIGFwaVByb3BlcnRpZXM6IERlY2FmQXBpUHJvcGVydHlbXSxcbiAgICBwa1BhdGg6IHN0cmluZ1xuICApOiBBcnJheTwodGFyZ2V0OiBhbnksIGtleTogc3RyaW5nLCBkZXNjOiBhbnkpID0+IHZvaWQ+IHtcbiAgICByZXR1cm4gW1xuICAgICAgQXBpT3BlcmF0aW9uRnJvbU1vZGVsKE1vZGVsQ29uc3RyLCBcIlBVVFwiLCBwa1BhdGgpLFxuICAgICAgQXBpUGFyYW1zRnJvbU1vZGVsKGFwaVByb3BlcnRpZXMpLFxuICAgICAgQXBpT3BlcmF0aW9uKHtcbiAgICAgICAgc3VtbWFyeTogYFJlcGxhY2UgYW4gZXhpc3RpbmcgJHttb2RlbENsYXp6TmFtZX0gcmVjb3JkIHdpdGggYSBuZXcgcGF5bG9hZC5gLFxuICAgICAgfSksXG4gICAgICBBcGlCb2R5KHtcbiAgICAgICAgZGVzY3JpcHRpb246IGBQYXlsb2FkIGZvciByZXBsYWNpbmcgYW4gZXhpc3RpbmcgcmVjb3JkIG9mICR7bW9kZWxDbGF6ek5hbWV9YCxcbiAgICAgICAgdHlwZTogRHRvRm9yKE9wZXJhdGlvbktleXMuVVBEQVRFLCBNb2RlbENvbnN0ciksXG4gICAgICB9KSxcbiAgICAgIEFwaU9rUmVzcG9uc2Uoe1xuICAgICAgICBkZXNjcmlwdGlvbjogYCR7bW9kZWxDbGF6ek5hbWV9IHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LmAsXG4gICAgICAgIHNjaGVtYTogeyAkcmVmOiBnZXRTY2hlbWFQYXRoKE1vZGVsQ29uc3RyKSB9LFxuICAgICAgfSksXG4gICAgICBBcGlOb3RGb3VuZFJlc3BvbnNlKHtcbiAgICAgICAgZGVzY3JpcHRpb246IGBObyAke21vZGVsQ2xhenpOYW1lfSByZWNvcmQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgaWRlbnRpZmllci5gLFxuICAgICAgfSksXG4gICAgICBBcGlCYWRSZXF1ZXN0UmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogXCJQYXlsb2FkIHZhbGlkYXRpb24gZmFpbGVkLlwiIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBkZWxldGVEZWNvcmF0b3JzKFxuICAgIE1vZGVsQ29uc3RyOiBNb2RlbENvbnN0cnVjdG9yPGFueT4sXG4gICAgbW9kZWxDbGF6ek5hbWU6IHN0cmluZyxcbiAgICBhcGlQcm9wZXJ0aWVzOiBEZWNhZkFwaVByb3BlcnR5W10sXG4gICAgcGtQYXRoOiBzdHJpbmdcbiAgKTogQXJyYXk8KHRhcmdldDogYW55LCBrZXk6IHN0cmluZywgZGVzYzogYW55KSA9PiB2b2lkPiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIEFwaU9wZXJhdGlvbkZyb21Nb2RlbChNb2RlbENvbnN0ciwgXCJERUxFVEVcIiwgcGtQYXRoKSxcbiAgICAgIEFwaVBhcmFtc0Zyb21Nb2RlbChhcGlQcm9wZXJ0aWVzKSxcbiAgICAgIEFwaU9wZXJhdGlvbih7IHN1bW1hcnk6IGBEZWxldGUgYSAke21vZGVsQ2xhenpOYW1lfSByZWNvcmQgYnkgaWQuYCB9KSxcbiAgICAgIEFwaU9rUmVzcG9uc2Uoe1xuICAgICAgICBkZXNjcmlwdGlvbjogYCR7bW9kZWxDbGF6ek5hbWV9IGRlbGV0ZWQgc3VjY2Vzc2Z1bGx5LmAsXG4gICAgICAgIHNjaGVtYTogeyAkcmVmOiBnZXRTY2hlbWFQYXRoKE1vZGVsQ29uc3RyKSB9LFxuICAgICAgfSksXG4gICAgICBBcGlOb3RGb3VuZFJlc3BvbnNlKHtcbiAgICAgICAgZGVzY3JpcHRpb246IGBObyAke21vZGVsQ2xhenpOYW1lfSByZWNvcmQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgaWRlbnRpZmllci5gLFxuICAgICAgfSksXG4gICAgXTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHN0YXRlbWVudERlY29yYXRvcnMoXG4gICAgTW9kZWxDb25zdHI6IE1vZGVsQ29uc3RydWN0b3I8YW55PixcbiAgICBtb2RlbENsYXp6TmFtZTogc3RyaW5nXG4gICk6IEFycmF5PCh0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcsIGRlc2M6IGFueSkgPT4gdm9pZD4ge1xuICAgIHJldHVybiBbXG4gICAgICBBcGlPcGVyYXRpb25Gcm9tTW9kZWwoTW9kZWxDb25zdHIsIFwiR0VUXCIsIFwic3RhdGVtZW50LzptZXRob2QvKmFyZ3NcIiksXG4gICAgICBBcGlPcGVyYXRpb24oe1xuICAgICAgICBzdW1tYXJ5OiBgRXhlY3V0ZXMgYSBwcmVwYXJlZCBzdGF0ZW1lbnQgb24gJHttb2RlbENsYXp6TmFtZX0uYCxcbiAgICAgIH0pLFxuICAgICAgQXBpUGFyYW0oeyBuYW1lOiBcIm1ldGhvZFwiLCBkZXNjcmlwdGlvbjogXCJ0aGUgcHJlcGFyZWQgc3RhdGVtZW50IHRvIGV4ZWN1dGVcIiB9KSxcbiAgICAgIEFwaVBhcmFtKHtcbiAgICAgICAgbmFtZTogXCJhcmdzXCIsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcImNvbmNhdGVuYXRlZCBsaXN0IG9mIGFyZ3VtZW50cyB0aGUgcHJlcGFyZWQgc3RhdGVtZW50IGNhbiBhY2NlcHRcIixcbiAgICAgIH0pLFxuICAgICAgQXBpUXVlcnkoe1xuICAgICAgICBuYW1lOiBcImRpcmVjdGlvblwiLFxuICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgZW51bTogT3JkZXJEaXJlY3Rpb24sXG4gICAgICAgIGRlc2NyaXB0aW9uOiBcInRoZSBzb3J0IG9yZGVyIHdoZW4gYXBwbGljYWJsZVwiLFxuICAgICAgfSksXG4gICAgICBBcGlRdWVyeSh7IG5hbWU6IFwibGltaXRcIiwgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiBcImxpbWl0IG9yIHBhZ2Ugc2l6ZSB3aGVuIGFwcGxpY2FibGVcIiB9KSxcbiAgICAgIEFwaVF1ZXJ5KHsgbmFtZTogXCJvZmZzZXRcIiwgcmVxdWlyZWQ6IHRydWUsIGRlc2NyaXB0aW9uOiBcIm9mZnNldCBvciBib29rbWFyayB3aGVuIGFwcGxpY2FibGVcIiB9KSxcbiAgICAgIEFwaU9rUmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogYCR7bW9kZWxDbGF6ek5hbWV9IGxpc3RlZCBmb3VuZC5gIH0pLFxuICAgICAgQXBpTm90Rm91bmRSZXNwb25zZSh7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgTm8gJHttb2RlbENsYXp6TmFtZX0gcmVjb3JkIG1hdGNoZXMgdGhlIHByb3ZpZGVkIGlkZW50aWZpZXIuYCxcbiAgICAgIH0pLFxuICAgIF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBzdGF0ZW1lbnRTaG9ydGN1dERlY29yYXRvcnMoXG4gICAgTW9kZWxDb25zdHI6IE1vZGVsQ29uc3RydWN0b3I8YW55PixcbiAgICBtb2RlbENsYXp6TmFtZTogc3RyaW5nLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBzdGF0ZW1lbnRLZXk6IHN0cmluZ1xuICApOiBBcnJheTwodGFyZ2V0OiBhbnksIGtleTogc3RyaW5nLCBkZXNjOiBhbnkpID0+IHZvaWQ+IHtcbiAgICBjb25zdCBiYXNlOiBBcnJheTwodGFyZ2V0OiBhbnksIGtleTogc3RyaW5nLCBkZXNjOiBhbnkpID0+IHZvaWQ+ID0gW1xuICAgICAgQXBpT3BlcmF0aW9uRnJvbU1vZGVsKE1vZGVsQ29uc3RyLCBcIkdFVFwiLCBwYXRoKSxcbiAgICAgIEFwaU9wZXJhdGlvbih7IHN1bW1hcnk6IGBSZXRyaWV2ZSAke21vZGVsQ2xhenpOYW1lfSByZWNvcmRzLmAgfSksXG4gICAgICBBcGlPa1Jlc3BvbnNlKHsgZGVzY3JpcHRpb246IGAke21vZGVsQ2xhenpOYW1lfSByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5LmAgfSksXG4gICAgXTtcblxuICAgIGNvbnN0IHNlZ21lbnRzID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKChzKSA9PiBzLnN0YXJ0c1dpdGgoXCI6XCIpKTtcbiAgICBzZWdtZW50cy5mb3JFYWNoKChzZWcpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPSBzZWcucmVwbGFjZShcIjpcIiwgXCJcIik7XG4gICAgICBiYXNlLnB1c2goQXBpUGFyYW0oeyBuYW1lLCBkZXNjcmlwdGlvbjogYFRoZSAke25hbWV9IHBhcmFtZXRlcmAgfSkpO1xuICAgIH0pO1xuXG4gICAgaWYgKFxuICAgICAgcGF0aC5zdGFydHNXaXRoKFwibGlzdEJ5L1wiKSB8fFxuICAgICAgcGF0aC5zdGFydHNXaXRoKFwicGFnaW5hdGVCeS9cIikgfHxcbiAgICAgIHBhdGguc3RhcnRzV2l0aChcImZpbmQvXCIpIHx8XG4gICAgICBwYXRoLnN0YXJ0c1dpdGgoXCJwYWdlL1wiKVxuICAgICkge1xuICAgICAgYmFzZS5wdXNoKFxuICAgICAgICBBcGlRdWVyeSh7XG4gICAgICAgICAgbmFtZTogXCJkaXJlY3Rpb25cIixcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICAgICAgICBlbnVtOiBPcmRlckRpcmVjdGlvbixcbiAgICAgICAgICBkZXNjcmlwdGlvbjogXCJ0aGUgc29ydCBvcmRlclwiLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHBhdGguc3RhcnRzV2l0aChcInBhZ2luYXRlQnkvXCIpIHx8IHBhdGguc3RhcnRzV2l0aChcInBhZ2UvXCIpKSB7XG4gICAgICBiYXNlLnB1c2goXG4gICAgICAgIEFwaVF1ZXJ5KHsgbmFtZTogXCJsaW1pdFwiLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcInBhZ2Ugc2l6ZVwiIH0pLFxuICAgICAgICBBcGlRdWVyeSh7IG5hbWU6IFwib2Zmc2V0XCIsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246IFwicGFnZSBudW1iZXJcIiB9KSxcbiAgICAgICAgQXBpUXVlcnkoeyBuYW1lOiBcImJvb2ttYXJrXCIsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246IFwiYm9va21hcmsgZm9yIGN1cnNvciBwYWdpbmF0aW9uXCIgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHBhdGguc3RhcnRzV2l0aChcImZpbmRPbmVCeS9cIikgfHwgcGF0aC5zdGFydHNXaXRoKFwiZmluZEJ5L1wiKSkge1xuICAgICAgYmFzZS5wdXNoKFxuICAgICAgICBBcGlOb3RGb3VuZFJlc3BvbnNlKHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYE5vICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCBtYXRjaGVzIHRoZSBwcm92aWRlZCBpZGVudGlmaWVyLmAsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHN0YXRlbWVudEtleSA9PT0gUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkNPVU5UX09GIHx8XG4gICAgICBzdGF0ZW1lbnRLZXkgPT09IFByZXBhcmVkU3RhdGVtZW50S2V5cy5BVkdfT0YgfHxcbiAgICAgIHN0YXRlbWVudEtleSA9PT0gUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLlNVTV9PRlxuICAgICkge1xuICAgICAgYmFzZS5wdXNoKEFwaU9rUmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogYFJlc3VsdCBmb3IgJHttb2RlbENsYXp6TmFtZX0uYCwgdHlwZTogTnVtYmVyIH0pKTtcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudEtleSA9PT0gUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkRJU1RJTkNUX09GKSB7XG4gICAgICBiYXNlLnB1c2goQXBpT2tSZXNwb25zZSh7IGRlc2NyaXB0aW9uOiBgRGlzdGluY3QgdmFsdWVzIGZvciAke21vZGVsQ2xhenpOYW1lfS5gLCB0eXBlOiBbU3RyaW5nXSB9KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2U7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRRdWVyeURlY29yYXRvcnMoXG4gICAgbWV0aG9kTmFtZTogc3RyaW5nLFxuICAgIHJvdXRlUGF0aDogc3RyaW5nLFxuICAgIGh0dHBWZXJiOiBzdHJpbmcsXG4gICAgaW5jbHVkZVF1ZXJ5UGFyYW1zOiBib29sZWFuID0gZmFsc2VcbiAgKTogQXJyYXk8KHRhcmdldDogYW55LCBrZXk6IHN0cmluZywgZGVzYzogYW55KSA9PiB2b2lkPiB7XG4gICAgY29uc3QgZXh0cmFjdFBhdGhQYXJhbXMgPSAocDogc3RyaW5nKTogc3RyaW5nW10gPT5cbiAgICAgIHAuc3BsaXQoXCIvXCIpLmZpbHRlcigocykgPT4gcy5zdGFydHNXaXRoKFwiOlwiKSkubWFwKChzKSA9PiBzLnNsaWNlKDEpKTtcblxuICAgIGNvbnN0IGFwaVBhdGhQYXJhbXMgPSBleHRyYWN0UGF0aFBhcmFtcyhyb3V0ZVBhdGgpLm1hcCgobmFtZSkgPT4gKHtcbiAgICAgIG5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogYCR7bmFtZX0gcGFyYW1ldGVyIGZvciB0aGUgcXVlcnlgLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgfSkpO1xuXG4gICAgY29uc3QgZGVjb3JhdG9yczogQXJyYXk8KHRhcmdldDogYW55LCBrZXk6IHN0cmluZywgZGVzYzogYW55KSA9PiB2b2lkPiA9IFtcbiAgICAgIC4uLmFwaVBhdGhQYXJhbXMubWFwKChwKSA9PiBBcGlQYXJhbShwKSksXG4gICAgICBBcGlPcGVyYXRpb24oeyBzdW1tYXJ5OiBgUmV0cmlldmUgcmVjb3JkcyB1c2luZyBcIiR7bWV0aG9kTmFtZX1cIi5gIH0pLFxuICAgICAgQXBpT2tSZXNwb25zZSh7IGRlc2NyaXB0aW9uOiBcIlJlc3VsdCBzdWNjZXNzZnVsbHkgcmV0cmlldmVkLlwiIH0pLFxuICAgICAgQXBpTm9Db250ZW50UmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogXCJObyBjb250ZW50IHJldHVybmVkIGJ5IHRoZSBtZXRob2QuXCIgfSksXG4gICAgXTtcblxuICAgIGlmIChodHRwVmVyYiA9PT0gXCJHRVRcIiAmJiBpbmNsdWRlUXVlcnlQYXJhbXMpIHtcbiAgICAgIGRlY29yYXRvcnMucHVzaChcbiAgICAgICAgQXBpUXVlcnkoe1xuICAgICAgICAgIG5hbWU6IFwiZGlyZWN0aW9uXCIsXG4gICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgIGVudW06IE9yZGVyRGlyZWN0aW9uLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBcInRoZSBzb3J0IG9yZGVyIHdoZW4gYXBwbGljYWJsZVwiLFxuICAgICAgICB9KSxcbiAgICAgICAgQXBpUXVlcnkoeyBuYW1lOiBcImxpbWl0XCIsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246IFwibGltaXQgb3IgcGFnZSBzaXplXCIgfSksXG4gICAgICAgIEFwaVF1ZXJ5KHsgbmFtZTogXCJvZmZzZXRcIiwgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogXCJvZmZzZXQgb3IgYm9va21hcmtcIiB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVjb3JhdG9ycztcbiAgfVxufVxuIl19
919
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRnJvbU1vZGVsQ29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIkZyb21Nb2RlbENvbnRyb2xsZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSTtJQUNqRixJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzdILElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxJQUFJLE9BQU8sT0FBTyxDQUFDLFFBQVEsS0FBSyxVQUFVO1FBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7O1FBQzFILEtBQUssSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFBRSxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO2dCQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFN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QSxzQkFBWSxFQUFDLEVBQUUsT0FBTyxFQUFFLDJCQUEyQixVQUFVLElBQUksRUFBRSxDQUFDO1lBQ3BFLElBQUEsdUJBQWEsRUFBQyxFQUFFLFdBQVcsRUFBRSxnQ0FBZ0MsRUFBRSxDQUFDO1lBQ2hFLElBQUEsOEJBQW9CLEVBQUMsRUFBRSxXQUFXLEVBQUUsb0NBQW9DLEVBQUUsQ0FBQztTQUM5RSxDQUFDO1FBQ0YsSUFBSSxRQUFRLEtBQUssS0FBSyxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDM0MsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFBLGtCQUFRLEVBQUM7Z0JBQ3JCLElBQUksRUFBRSxXQUFXO2dCQUNqQixRQUFRLEVBQUUsS0FBSztnQkFDZixJQUFJLEVBQUUscUJBQWM7Z0JBQ3BCLFdBQVcsRUFBRSxnQ0FBZ0M7YUFDaEQsQ0FBQyxFQUFFLElBQUEsa0JBQVEsRUFBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLElBQUEsa0JBQVEsRUFBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0ssQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7Q0FDSjtBQWozQkQsa0RBaTNCQztBQUNELDg5c0hBQTg5c0giLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19kZWNvcmF0ZSA9ICh0aGlzICYmIHRoaXMuX19kZWNvcmF0ZSkgfHwgZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcbn07XG52YXIgX19tZXRhZGF0YSA9ICh0aGlzICYmIHRoaXMuX19tZXRhZGF0YSkgfHwgZnVuY3Rpb24gKGssIHYpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEoaywgdik7XG59O1xudmFyIER5bmFtaWNNb2RlbENvbnRyb2xsZXJfMTtcbmltcG9ydCB7IENvbnRyb2xsZXIsIFBhcmFtLCBRdWVyeSwgUmVzcG9uc2UgfSBmcm9tIFwiQG5lc3Rqcy9jb21tb25cIjtcbmltcG9ydCB7IEFwaUJhZFJlcXVlc3RSZXNwb25zZSwgQXBpQm9keSwgQXBpQ3JlYXRlZFJlc3BvbnNlLCBBcGlFeHRyYU1vZGVscywgQXBpTm9Db250ZW50UmVzcG9uc2UsIEFwaU5vdEZvdW5kUmVzcG9uc2UsIEFwaU9rUmVzcG9uc2UsIEFwaU9wZXJhdGlvbiwgQXBpUGFyYW0sIEFwaVF1ZXJ5LCBBcGlUYWdzLCBBcGlVbnByb2Nlc3NhYmxlRW50aXR5UmVzcG9uc2UsIGdldFNjaGVtYVBhdGgsIH0gZnJvbSBcIkBuZXN0anMvc3dhZ2dlclwiO1xuaW1wb3J0IHsgTW9kZWxTZXJ2aWNlLCBPcmRlckRpcmVjdGlvbiwgUGVyc2lzdGVuY2VLZXlzLCBQcmVwYXJlZFN0YXRlbWVudEtleXMsIFJlcG9zaXRvcnksIFNlcnZpY2UsIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IExvZ2dpbmcsIHRvS2ViYWJDYXNlIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5pbXBvcnQgeyBCdWxrQ3J1ZE9wZXJhdGlvbktleXMsIERCS2V5cywgT3BlcmF0aW9uS2V5cywgVmFsaWRhdGlvbkVycm9yLCB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgTWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB7IEFwaU9wZXJhdGlvbkZyb21Nb2RlbCwgQXBpUGFyYW1zRnJvbU1vZGVsLCBEZWNhZkJvZHksIERlY2FmUGFyYW1zLCBEZWNhZlF1ZXJ5LCB9IGZyb20gXCIuL2RlY29yYXRvcnMvaW5kZXguanNcIjtcbmltcG9ydCB7IEh0dHBWZXJiVG9EZWNvcmF0b3IgfSBmcm9tIFwiLi9kZWNvcmF0b3JzL3V0aWxzLmpzXCI7XG5pbXBvcnQgeyBEZWNhZlJlcXVlc3RDb250ZXh0IH0gZnJvbSBcIi4vLi4vcmVxdWVzdC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgREVDQUZfQ09OVFJPTExFUl9DT05GSUcsIERFQ0FGX1JPVVRFIH0gZnJvbSBcIi4vLi4vY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBBdXRoIH0gZnJvbSBcIi4vZGVjb3JhdG9ycy9kZWNvcmF0b3JzLmpzXCI7XG5pbXBvcnQgeyBEZWNhZk1vZGVsQ29udHJvbGxlciB9IGZyb20gXCIuLy4uL2NvbnRyb2xsZXJzLmpzXCI7XG5pbXBvcnQgeyBEdG9Gb3IgfSBmcm9tIFwiLi8uLi9mYWN0b3J5L29wZW5hcGkvRHRvQnVpbGRlci5qc1wiO1xuaW1wb3J0IFwiLi8uLi9vdmVycmlkZXMvaW5kZXguanNcIjtcbmltcG9ydCB7IE1vZGVsQ29udHJvbGxlckZhY3RvcnksIH0gZnJvbSBcIkBkZWNhZi10cy9mb3ItaHR0cC9zZXJ2ZXJcIjtcbmV4cG9ydCBjbGFzcyBGcm9tTW9kZWxDb250cm9sbGVyIHtcbiAgICBzdGF0aWMgeyB0aGlzLmxvZyA9IExvZ2dpbmcuZm9yKEZyb21Nb2RlbENvbnRyb2xsZXIubmFtZSk7IH1cbiAgICBzdGF0aWMgZ2V0UGVyc2lzdGVuY2UoTW9kZWxDbGF6eikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIFNlcnZpY2UuZ2V0KE1vZGVsQ2xhenopO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBNb2RlbFNlcnZpY2UuZ2V0U2VydmljZShNb2RlbENsYXp6KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlMikge1xuICAgICAgICAgICAgICAgIHJldHVybiBSZXBvc2l0b3J5LmZvck1vZGVsKE1vZGVsQ2xhenopO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGVRdWVyeVJvdXRlc0Zyb21SZXBvc2l0b3J5KHBlcnNpc3RlbmNlLCBwcmVmaXggPSBQZXJzaXN0ZW5jZUtleXMuUVVFUlkpIHtcbiAgICAgICAgY29uc3QgcmVwbyA9IHBlcnNpc3RlbmNlIGluc3RhbmNlb2YgTW9kZWxTZXJ2aWNlID8gcGVyc2lzdGVuY2UucmVwbyA6IHBlcnNpc3RlbmNlO1xuICAgICAgICBjb25zdCBNb2RlbENvbnN0ciA9IHJlcG8uY2xhc3M7XG4gICAgICAgIGNvbnN0IHF1ZXJ5TWV0aG9kcyA9IE1ldGFkYXRhLmdldChyZXBvLmNvbnN0cnVjdG9yLCBNZXRhZGF0YS5rZXkoUGVyc2lzdGVuY2VLZXlzLlFVRVJZKSkgPz8ge307XG4gICAgICAgIGNvbnN0IHJvdXRlTWV0aG9kcyA9IE1ldGFkYXRhLmdldChwZXJzaXN0ZW5jZS5jb25zdHJ1Y3RvciwgTWV0YWRhdGEua2V5KERFQ0FGX1JPVVRFKSkgPz8ge307XG4gICAgICAgIGNsYXNzIFF1ZXJ5Q29udHJvbGxlciBleHRlbmRzIERlY2FmTW9kZWxDb250cm9sbGVyIHtcbiAgICAgICAgICAgIGdldCBjbGFzcygpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0cnVjdG9yKGNsaWVudENvbnRleHQsIG5hbWUpIHtcbiAgICAgICAgICAgICAgICBzdXBlcihjbGllbnRDb250ZXh0LCBuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFttZXRob2ROYW1lLCBwYXJhbXNdIG9mIE9iamVjdC5lbnRyaWVzKHJvdXRlTWV0aG9kcykpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlUGF0aCA9IFtwYXJhbXMucGF0aC5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCBcIlwiKV1cbiAgICAgICAgICAgICAgICAuZmlsdGVyKChzZWdtZW50KSA9PiBzZWdtZW50ICYmIHNlZ21lbnQudHJpbSgpKVxuICAgICAgICAgICAgICAgIC5qb2luKFwiL1wiKTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXIgPSBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZUNvbXBsZXhRdWVyeUhhbmRsZXIobWV0aG9kTmFtZSk7XG4gICAgICAgICAgICBGcm9tTW9kZWxDb250cm9sbGVyLmRlZmluZU1ldGhvZChRdWVyeUNvbnRyb2xsZXIsIG1ldGhvZE5hbWUsIGhhbmRsZXIpO1xuICAgICAgICAgICAgY29uc3QgaHR0cERlY29yYXRvciA9IEh0dHBWZXJiVG9EZWNvcmF0b3IocGFyYW1zLmh0dHBNZXRob2QpKHJvdXRlUGF0aCB8fCB1bmRlZmluZWQpO1xuICAgICAgICAgICAgY29uc3QgZGVjb3JhdG9ycyA9IEZyb21Nb2RlbENvbnRyb2xsZXIuZ2V0UXVlcnlEZWNvcmF0b3JzKG1ldGhvZE5hbWUsIHJvdXRlUGF0aCwgcGFyYW1zLmh0dHBNZXRob2QpO1xuICAgICAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5hcHBseURlY29yYXRvcnMoUXVlcnlDb250cm9sbGVyLCBtZXRob2ROYW1lLCBbaHR0cERlY29yYXRvciwgLi4uZGVjb3JhdG9yc10pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW21ldGhvZE5hbWUsIG9ialZhbHVlc10gb2YgT2JqZWN0LmVudHJpZXMocXVlcnlNZXRob2RzKSkge1xuICAgICAgICAgICAgY29uc3QgZmllbGRzID0gb2JqVmFsdWVzLmZpZWxkcyA/PyBbXTtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlUGF0aCA9IFtwcmVmaXgsIG1ldGhvZE5hbWUsIC4uLmZpZWxkcy5tYXAoKGYpID0+IGA6JHtmfWApXVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHNlZ21lbnQpID0+IHNlZ21lbnQgJiYgc2VnbWVudC50cmltKCkpXG4gICAgICAgICAgICAgICAgLmpvaW4oXCIvXCIpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlQ29tcGxleFF1ZXJ5SGFuZGxlcihtZXRob2ROYW1lKTtcbiAgICAgICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuZGVmaW5lTWV0aG9kKFF1ZXJ5Q29udHJvbGxlciwgbWV0aG9kTmFtZSwgaGFuZGxlcik7XG4gICAgICAgICAgICBjb25zdCBodHRwRGVjb3JhdG9yID0gSHR0cFZlcmJUb0RlY29yYXRvcihcIkdFVFwiKShyb3V0ZVBhdGggfHwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIGNvbnN0IGRlY29yYXRvcnMgPSBGcm9tTW9kZWxDb250cm9sbGVyLmdldFF1ZXJ5RGVjb3JhdG9ycyhtZXRob2ROYW1lLCByb3V0ZVBhdGgsIFwiR0VUXCIsIHRydWUpO1xuICAgICAgICAgICAgRnJvbU1vZGVsQ29udHJvbGxlci5hcHBseURlY29yYXRvcnMoUXVlcnlDb250cm9sbGVyLCBtZXRob2ROYW1lLCBbaHR0cERlY29yYXRvciwgLi4uZGVjb3JhdG9yc10pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBRdWVyeUNvbnRyb2xsZXI7XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGUoTW9kZWxDb25zdHIsIG1vZHVsZUNvbmZpZ092ZXJyaWRlcykge1xuICAgICAgICBjb25zdCBsb2cgPSBGcm9tTW9kZWxDb250cm9sbGVyLmxvZy5mb3IoRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGUpO1xuICAgICAgICBjb25zdCB0YWJsZU5hbWUgPSBNb2RlbC50YWJsZU5hbWUoTW9kZWxDb25zdHIpO1xuICAgICAgICBjb25zdCByb3V0ZVBhdGggPSB0b0tlYmFiQ2FzZSh0YWJsZU5hbWUpO1xuICAgICAgICBjb25zdCBtb2RlbENsYXp6TmFtZSA9IE1vZGVsQ29uc3RyLm5hbWU7XG4gICAgICAgIGNvbnN0IHBlcnNpc3RlbmNlID0gRnJvbU1vZGVsQ29udHJvbGxlci5nZXRQZXJzaXN0ZW5jZShNb2RlbENvbnN0cik7XG4gICAgICAgIC8vIFdoZW4gcGVyc2lzdGVuY2UgaXMgYSBNb2RlbFNlcnZpY2UsIHRoZSBAcXVlcnkvQHJvdXRlIG1ldGFkYXRhIGxpdmVzIG9uXG4gICAgICAgIC8vIHRoZSB1bmRlcmx5aW5nIHJlcG9zaXRvcnkgY2xhc3MgKGN1c3RvbSByZXBvKSwgbm90IG9uIE1vZGVsU2VydmljZSBpdHNlbGYuXG4gICAgICAgIC8vIFBhc3MgdGhlIHJlcG8gdG8gdGhlIGZhY3Rvcnkgc28gYWRkQ29tcGxleFF1ZXJpZXMoKSBjYW4gZGlzY292ZXIgdGhlbS5cbiAgICAgICAgY29uc3QgZmFjdG9yeVBlcnNpc3RlbmNlID0gcGVyc2lzdGVuY2UgaW5zdGFuY2VvZiBNb2RlbFNlcnZpY2UgPyBwZXJzaXN0ZW5jZS5yZXBvIDogcGVyc2lzdGVuY2U7XG4gICAgICAgIGNvbnN0IGRlY29yYXRvckNvbmZpZyA9IE1ldGFkYXRhLmdldChNb2RlbENvbnN0ciwgTWV0YWRhdGEua2V5KERFQ0FGX0NPTlRST0xMRVJfQ09ORklHKSk7XG4gICAgICAgIGNvbnN0IG1vZHVsZU92ZXJyaWRlID0gbW9kdWxlQ29uZmlnT3ZlcnJpZGVzPy5bTW9kZWxDb25zdHIubmFtZV07XG4gICAgICAgIGNvbnN0IG1lcmdlZENvbmZpZyA9IHtcbiAgICAgICAgICAgIC4uLihkZWNvcmF0b3JDb25maWcgfHwge30pLFxuICAgICAgICAgICAgLi4uKG1vZHVsZU92ZXJyaWRlIHx8IHt9KSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgRmFjdG9yeUNvbnRyb2xsZXIgPSBNb2RlbENvbnRyb2xsZXJGYWN0b3J5LmNyZWF0ZShNb2RlbENvbnN0ciwgZmFjdG9yeVBlcnNpc3RlbmNlLCBtZXJnZWRDb25maWcpO1xuICAgICAgICBjb25zdCBmYWN0b3J5Um91dGVzID0gRmFjdG9yeUNvbnRyb2xsZXIuX19yb3V0ZXNfXztcbiAgICAgICAgY29uc3QgeyBnZXRQSywgYXBpUHJvcGVydGllcywgcGF0aDogcGtQYXRoIH0gPSBGcm9tTW9kZWxDb250cm9sbGVyLmdldFJvdXRlUGFyYW1ldGVyc0Zyb21Nb2RlbChNb2RlbENvbnN0cik7XG4gICAgICAgIGxvZy5kZWJ1ZyhgQ3JlYXRpbmcgY29udHJvbGxlciBmb3IgbW9kZWw6ICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggJHtmYWN0b3J5Um91dGVzPy5sZW5ndGggPz8gMH0gZmFjdG9yeSByb3V0ZXNgKTtcbiAgICAgICAgbGV0IER5bmFtaWNNb2RlbENvbnRyb2xsZXIgPSBEeW5hbWljTW9kZWxDb250cm9sbGVyXzEgPSBjbGFzcyBEeW5hbWljTW9kZWxDb250cm9sbGVyIGV4dGVuZHMgRGVjYWZNb2RlbENvbnRyb2xsZXIge1xuICAgICAgICAgICAgc3RhdGljIGdldCBjbGFzcygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTW9kZWxDb25zdHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBnZXQgY2xhc3MoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1vZGVsQ29uc3RyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3RydWN0b3IoY2xpZW50Q29udGV4dCkge1xuICAgICAgICAgICAgICAgIHN1cGVyKGNsaWVudENvbnRleHQsIER5bmFtaWNNb2RlbENvbnRyb2xsZXJfMS5uYW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBrID0gTW9kZWwucGsoTW9kZWxDb25zdHIpO1xuICAgICAgICAgICAgICAgIGxvZy5pbmZvKGBSZWdpc3RlcmluZyBkeW5hbWljIGNvbnRyb2xsZXIgZm9yIG1vZGVsOiAke3RoaXMuY2xhc3MubmFtZX0gcm91dGU6IC8ke3JvdXRlUGF0aH1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgRHluYW1pY01vZGVsQ29udHJvbGxlciA9IER5bmFtaWNNb2RlbENvbnRyb2xsZXJfMSA9IF9fZGVjb3JhdGUoW1xuICAgICAgICAgICAgQ29udHJvbGxlcihyb3V0ZVBhdGgpLFxuICAgICAgICAgICAgQXBpVGFncyhtb2RlbENsYXp6TmFtZSksXG4gICAgICAgICAgICBBcGlFeHRyYU1vZGVscyhNb2RlbENvbnN0ciksXG4gICAgICAgICAgICBBdXRoKE1vZGVsQ29uc3RyKSxcbiAgICAgICAgICAgIF9fbWV0YWRhdGEoXCJkZXNpZ246cGFyYW10eXBlc1wiLCBbRGVjYWZSZXF1ZXN0Q29udGV4dF0pXG4gICAgICAgIF0sIER5bmFtaWNNb2RlbENvbnRyb2xsZXIpO1xuICAgICAgICBpZiAoZmFjdG9yeVJvdXRlcykge1xuICAgICAgICAgICAgY29uc3Qgc29ydGVkUm91dGVzID0gWy4uLmZhY3RvcnlSb3V0ZXNdLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhU2VnbWVudHMgPSBhLnBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICAgICAgICBjb25zdCBiU2VnbWVudHMgPSBiLnBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhUGFyYW1Db3VudCA9IGFTZWdtZW50cy5maWx0ZXIoKHMpID0+IHMuc3RhcnRzV2l0aChcIjpcIikpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBiUGFyYW1Db3VudCA9IGJTZWdtZW50cy5maWx0ZXIoKHMpID0+IHMuc3RhcnRzV2l0aChcIjpcIikpLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBjb25zdCBhTGl0ZXJhbENvdW50ID0gYVNlZ21lbnRzLmxlbmd0aCAtIGFQYXJhbUNvdW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGJMaXRlcmFsQ291bnQgPSBiU2VnbWVudHMubGVuZ3RoIC0gYlBhcmFtQ291bnQ7XG4gICAgICAgICAgICAgICAgaWYgKGFMaXRlcmFsQ291bnQgIT09IGJMaXRlcmFsQ291bnQpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiTGl0ZXJhbENvdW50IC0gYUxpdGVyYWxDb3VudDtcbiAgICAgICAgICAgICAgICBpZiAoYVBhcmFtQ291bnQgIT09IGJQYXJhbUNvdW50KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYVBhcmFtQ291bnQgLSBiUGFyYW1Db3VudDtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9yIChjb25zdCByb3V0ZSBvZiBzb3J0ZWRSb3V0ZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWdpc3RyYXRpb24gPSBGcm9tTW9kZWxDb250cm9sbGVyLm1hdGNoUm91dGUocm91dGUsIHBrUGF0aCwgYXBpUHJvcGVydGllcywgZ2V0UEssIE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSwgZmFjdG9yeVBlcnNpc3RlbmNlKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlZ2lzdHJhdGlvbilcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBtZXRob2ROYW1lLCBoYW5kbGVyLCBkZWNvcmF0b3JzLCBwYXJhbURlY29yYXRvcnMgfSA9IHJlZ2lzdHJhdGlvbjtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gRnJvbU1vZGVsQ29udHJvbGxlci5kZWZpbmVNZXRob2QoRHluYW1pY01vZGVsQ29udHJvbGxlciwgbWV0aG9kTmFtZSwgaGFuZGxlcik7XG4gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaHR0cERlY29yYXRvciA9IEh0dHBWZXJiVG9EZWNvcmF0b3Iocm91dGUubWV0aG9kKShyb3V0ZS5wYXRoLnJlcGxhY2UoL15cXC8rfFxcLyskL2csIFwiXCIpIHx8IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIEZyb21Nb2RlbENvbnRyb2xsZXIuYXBwbHlEZWNvcmF0b3JzKER5bmFtaWNNb2RlbENvbnRyb2xsZXIsIG1ldGhvZE5hbWUsIFtodHRwRGVjb3JhdG9yLCAuLi5kZWNvcmF0b3JzXSwgcGFyYW1EZWNvcmF0b3JzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIER5bmFtaWNNb2RlbENvbnRyb2xsZXI7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRSb3V0ZVBhcmFtZXRlcnNGcm9tTW9kZWwoTW9kZWxDbGF6eikge1xuICAgICAgICBjb25zdCBwayA9IE1vZGVsLnBrKE1vZGVsQ2xhenopO1xuICAgICAgICBjb25zdCBjb21wb3NlZCA9IE1ldGFkYXRhLmdldChNb2RlbENsYXp6LCBNZXRhZGF0YS5rZXkoREJLZXlzLkNPTVBPU0VELCBwaykpO1xuICAgICAgICBjb25zdCBjb21wb3NlZEtleXMgPSBjb21wb3NlZD8uYXJncyA/PyBbXTtcbiAgICAgICAgY29uc3QgdW5pcXVlS2V5cyA9IEFycmF5LmlzQXJyYXkoY29tcG9zZWRLZXlzKSAmJiBjb21wb3NlZEtleXMubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLmNvbXBvc2VkS2V5c10pKVxuICAgICAgICAgICAgOiBBcnJheS5mcm9tKG5ldyBTZXQoW3BrXSkpO1xuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IE1ldGFkYXRhLmRlc2NyaXB0aW9uKE1vZGVsQ2xhenopID8/IFwiXCI7XG4gICAgICAgIGNvbnN0IHBhdGggPSBgOiR7dW5pcXVlS2V5cy5qb2luKFwiLzpcIil9YDtcbiAgICAgICAgY29uc3QgYXBpUHJvcGVydGllcyA9IHVuaXF1ZUtleXMubWFwKChrZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbmFtZToga2V5LFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBNZXRhZGF0YS5kZXNjcmlwdGlvbihNb2RlbENsYXp6LCBrZXkpLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgYXBpUHJvcGVydGllcyxcbiAgICAgICAgICAgIGdldFBLOiAoLi4ucGFyYW1zKSA9PiBjb21wb3NlZD8uc2VwYXJhdG9yID8gcGFyYW1zLmpvaW4oY29tcG9zZWQuc2VwYXJhdG9yKSA6IHBhcmFtcy5qb2luKFwiXCIpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgZGVmaW5lTWV0aG9kKHRhcmdldCwgbWV0aG9kTmFtZSwgaGFuZGxlcikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LnByb3RvdHlwZSB8fCB0YXJnZXQsIG1ldGhvZE5hbWUsIHtcbiAgICAgICAgICAgIHZhbHVlOiBoYW5kbGVyLFxuICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQucHJvdG90eXBlIHx8IHRhcmdldCwgbWV0aG9kTmFtZSk7XG4gICAgfVxuICAgIHN0YXRpYyBhcHBseURlY29yYXRvcnModGFyZ2V0LCBtZXRob2ROYW1lLCBtZXRob2REZWNvcmF0b3JzLCBwYXJhbURlY29yYXRvcnMgPSBbXSkge1xuICAgICAgICBjb25zdCBwcm90byA9IHRhcmdldD8ucHJvdG90eXBlID8/IHRhcmdldDtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIG1ldGhvZE5hbWUpO1xuICAgICAgICBtZXRob2REZWNvcmF0b3JzLmZvckVhY2goKGQpID0+IGQocHJvdG8sIG1ldGhvZE5hbWUsIGRlc2NyaXB0b3IpKTtcbiAgICAgICAgcGFyYW1EZWNvcmF0b3JzLmZvckVhY2goKHsgZGVjb3JhdG9yLCBpbmRleCB9KSA9PiBkZWNvcmF0b3IocHJvdG8sIG1ldGhvZE5hbWUsIGluZGV4KSk7XG4gICAgfVxuICAgIHN0YXRpYyBtYXRjaFJvdXRlKHJvdXRlLCBwa1BhdGgsIGFwaVByb3BlcnRpZXMsIGdldFBLLCBNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIHBlcnNpc3RlbmNlKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0aG9kLCBwYXRoIH0gPSByb3V0ZTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhdGggPSBwYXRoLnJlcGxhY2UoL15cXC8rfFxcLyskL2csIFwiXCIpO1xuICAgICAgICBpZiAobWV0aG9kID09PSBcIlBPU1RcIiAmJiBub3JtYWxpemVkUGF0aCA9PT0gXCJcIikge1xuICAgICAgICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKFwiY3JlYXRlXCIsIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlQ3JlYXRlSGFuZGxlcihNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUpLCBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZUNyZWF0ZURlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lKSwgW3sgZGVjb3JhdG9yOiBEZWNhZkJvZHkoKSwgaW5kZXg6IDAgfSwgeyBkZWNvcmF0b3I6IFJlc3BvbnNlKHsgcGFzc3Rocm91Z2g6IHRydWUgfSksIGluZGV4OiAxIH1dKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0aG9kID09PSBcIlBPU1RcIiAmJiBub3JtYWxpemVkUGF0aCA9PT0gXCJidWxrXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlZ2lzdHJhdGlvbihcImNyZWF0ZUFsbFwiLCBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZUJ1bGtDcmVhdGVIYW5kbGVyKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSksIEZyb21Nb2RlbENvbnRyb2xsZXIuYnVsa0NyZWF0ZURlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lKSwgW3sgZGVjb3JhdG9yOiBEZWNhZkJvZHkoKSwgaW5kZXg6IDAgfSwgeyBkZWNvcmF0b3I6IFJlc3BvbnNlKHsgcGFzc3Rocm91Z2g6IHRydWUgfSksIGluZGV4OiAxIH1dKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0aG9kID09PSBcIkdFVFwiICYmIG5vcm1hbGl6ZWRQYXRoID09PSBcImJ1bGtcIikge1xuICAgICAgICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKFwicmVhZEFsbFwiLCBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZUJ1bGtSZWFkSGFuZGxlcihtb2RlbENsYXp6TmFtZSksIEZyb21Nb2RlbENvbnRyb2xsZXIuYnVsa1JlYWREZWNvcmF0b3JzKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSksIFt7IGRlY29yYXRvcjogUXVlcnkoXCJpZHNcIiksIGluZGV4OiAwIH1dKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0aG9kID09PSBcIlBVVFwiICYmIG5vcm1hbGl6ZWRQYXRoID09PSBcImJ1bGtcIikge1xuICAgICAgICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKFwidXBkYXRlQWxsXCIsIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlQnVsa1VwZGF0ZUhhbmRsZXIobW9kZWxDbGF6ek5hbWUpLCBGcm9tTW9kZWxDb250cm9sbGVyLmJ1bGtVcGRhdGVEZWNvcmF0b3JzKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSwgYXBpUHJvcGVydGllcyksIFt7IGRlY29yYXRvcjogRGVjYWZCb2R5KCksIGluZGV4OiAwIH0sIHsgZGVjb3JhdG9yOiBSZXNwb25zZSh7IHBhc3N0aHJvdWdoOiB0cnVlIH0pLCBpbmRleDogMSB9XSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJERUxFVEVcIiAmJiBub3JtYWxpemVkUGF0aCA9PT0gXCJidWxrXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlZ2lzdHJhdGlvbihcImRlbGV0ZUFsbFwiLCBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZUJ1bGtEZWxldGVIYW5kbGVyKG1vZGVsQ2xhenpOYW1lKSwgRnJvbU1vZGVsQ29udHJvbGxlci5idWxrRGVsZXRlRGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIGFwaVByb3BlcnRpZXMpLCBbeyBkZWNvcmF0b3I6IFF1ZXJ5KFwiaWRzXCIpLCBpbmRleDogMCB9LCB7IGRlY29yYXRvcjogUmVzcG9uc2UoeyBwYXNzdGhyb3VnaDogdHJ1ZSB9KSwgaW5kZXg6IDEgfV0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwiR0VUXCIgJiYgbm9ybWFsaXplZFBhdGggPT09IHBrUGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKFwicmVhZFwiLCBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlYWRIYW5kbGVyKGdldFBLLCBtb2RlbENsYXp6TmFtZSksIEZyb21Nb2RlbENvbnRyb2xsZXIucmVhZERlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lLCBhcGlQcm9wZXJ0aWVzLCBwa1BhdGgpLCBbeyBkZWNvcmF0b3I6IERlY2FmUGFyYW1zKGFwaVByb3BlcnRpZXMpLCBpbmRleDogMCB9XSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJQVVRcIiAmJiBub3JtYWxpemVkUGF0aCA9PT0gcGtQYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVSZWdpc3RyYXRpb24oXCJ1cGRhdGVcIiwgRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVVcGRhdGVIYW5kbGVyKGdldFBLLCBNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUpLCBGcm9tTW9kZWxDb250cm9sbGVyLnVwZGF0ZURlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lLCBhcGlQcm9wZXJ0aWVzLCBwa1BhdGgpLCBbXG4gICAgICAgICAgICAgICAgeyBkZWNvcmF0b3I6IERlY2FmUGFyYW1zKGFwaVByb3BlcnRpZXMpLCBpbmRleDogMCB9LFxuICAgICAgICAgICAgICAgIHsgZGVjb3JhdG9yOiBEZWNhZkJvZHkoKSwgaW5kZXg6IDEgfSxcbiAgICAgICAgICAgICAgICB7IGRlY29yYXRvcjogUmVzcG9uc2UoeyBwYXNzdGhyb3VnaDogdHJ1ZSB9KSwgaW5kZXg6IDIgfSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwiREVMRVRFXCIgJiYgbm9ybWFsaXplZFBhdGggPT09IHBrUGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKFwiZGVsZXRlXCIsIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlRGVsZXRlSGFuZGxlcihnZXRQSywgbW9kZWxDbGF6ek5hbWUpLCBGcm9tTW9kZWxDb250cm9sbGVyLmRlbGV0ZURlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lLCBhcGlQcm9wZXJ0aWVzLCBwa1BhdGgpLCBbXG4gICAgICAgICAgICAgICAgeyBkZWNvcmF0b3I6IERlY2FmUGFyYW1zKGFwaVByb3BlcnRpZXMpLCBpbmRleDogMCB9LFxuICAgICAgICAgICAgICAgIHsgZGVjb3JhdG9yOiBSZXNwb25zZSh7IHBhc3N0aHJvdWdoOiB0cnVlIH0pLCBpbmRleDogMSB9LFxuICAgICAgICAgICAgXSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ29tcG9zZWQgUEsgZmFsbGJhY2sgcm91dGVzIChmaWx0ZXJFbXB0eSkg4oCUIHBhdGggZGlmZmVycyBmcm9tIHBrUGF0aFxuICAgICAgICBjb25zdCBmYWxsYmFja1NlZ21lbnRzID0gbm9ybWFsaXplZFBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKTtcbiAgICAgICAgY29uc3QgaXNBbGxQYXJhbXMgPSBmYWxsYmFja1NlZ21lbnRzLmxlbmd0aCA+IDAgJiYgZmFsbGJhY2tTZWdtZW50cy5ldmVyeSgocykgPT4gcy5zdGFydHNXaXRoKFwiOlwiKSk7XG4gICAgICAgIGlmIChpc0FsbFBhcmFtcyAmJiBub3JtYWxpemVkUGF0aCAhPT0gcGtQYXRoKSB7XG4gICAgICAgICAgICBjb25zdCBmYWxsYmFja0FwaVByb3BzID0gZmFsbGJhY2tTZWdtZW50cy5tYXAoKHMpID0+IHMuc2xpY2UoMSkpLm1hcCgobmFtZSkgPT4gKHtcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgJHtuYW1lfSBwYXJhbWV0ZXJgLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IGZhbGxiYWNrU2VnbWVudHMubWFwKChzKSA9PiBzLnNsaWNlKDEpKS5qb2luKFwiQW5kXCIpO1xuICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlZ2lzdHJhdGlvbihgcmVhZEJ5JHtzdWZmaXh9YCwgRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVSZWFkSGFuZGxlcihnZXRQSywgbW9kZWxDbGF6ek5hbWUpLCBGcm9tTW9kZWxDb250cm9sbGVyLnJlYWREZWNvcmF0b3JzKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSwgZmFsbGJhY2tBcGlQcm9wcywgbm9ybWFsaXplZFBhdGgpLCBbeyBkZWNvcmF0b3I6IERlY2FmUGFyYW1zKGZhbGxiYWNrQXBpUHJvcHMpLCBpbmRleDogMCB9XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWV0aG9kID09PSBcIlBVVFwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKGB1cGRhdGVCeSR7c3VmZml4fWAsIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlVXBkYXRlSGFuZGxlcihnZXRQSywgTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lKSwgRnJvbU1vZGVsQ29udHJvbGxlci51cGRhdGVEZWNvcmF0b3JzKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSwgZmFsbGJhY2tBcGlQcm9wcywgbm9ybWFsaXplZFBhdGgpLCBbXG4gICAgICAgICAgICAgICAgICAgIHsgZGVjb3JhdG9yOiBEZWNhZlBhcmFtcyhmYWxsYmFja0FwaVByb3BzKSwgaW5kZXg6IDAgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBkZWNvcmF0b3I6IERlY2FmQm9keSgpLCBpbmRleDogMSB9LFxuICAgICAgICAgICAgICAgICAgICB7IGRlY29yYXRvcjogUmVzcG9uc2UoeyBwYXNzdGhyb3VnaDogdHJ1ZSB9KSwgaW5kZXg6IDIgfSxcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtZXRob2QgPT09IFwiREVMRVRFXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVSZWdpc3RyYXRpb24oYGRlbGV0ZUJ5JHtzdWZmaXh9YCwgRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVEZWxldGVIYW5kbGVyKGdldFBLLCBtb2RlbENsYXp6TmFtZSksIEZyb21Nb2RlbENvbnRyb2xsZXIuZGVsZXRlRGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIGZhbGxiYWNrQXBpUHJvcHMsIG5vcm1hbGl6ZWRQYXRoKSwgW1xuICAgICAgICAgICAgICAgICAgICB7IGRlY29yYXRvcjogRGVjYWZQYXJhbXMoZmFsbGJhY2tBcGlQcm9wcyksIGluZGV4OiAwIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgZGVjb3JhdG9yOiBSZXNwb25zZSh7IHBhc3N0aHJvdWdoOiB0cnVlIH0pLCBpbmRleDogMSB9LFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRob2QgPT09IFwiR0VUXCIgJiYgbm9ybWFsaXplZFBhdGggPT09IFwic3RhdGVtZW50LzptZXRob2QvKmFyZ3NcIikge1xuICAgICAgICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKFwic3RhdGVtZW50XCIsIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlU3RhdGVtZW50SGFuZGxlcihtb2RlbENsYXp6TmFtZSksIEZyb21Nb2RlbENvbnRyb2xsZXIuc3RhdGVtZW50RGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUpLCBbXG4gICAgICAgICAgICAgICAgeyBkZWNvcmF0b3I6IFBhcmFtKFwibWV0aG9kXCIpLCBpbmRleDogMCB9LFxuICAgICAgICAgICAgICAgIHsgZGVjb3JhdG9yOiBQYXJhbShcImFyZ3NcIiksIGluZGV4OiAxIH0sXG4gICAgICAgICAgICAgICAgeyBkZWNvcmF0b3I6IERlY2FmUXVlcnkoKSwgaW5kZXg6IDIgfSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudFJvdXRlcyA9IHtcbiAgICAgICAgICAgIFwibGlzdEJ5LzprZXlcIjogUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkxJU1RfQlksXG4gICAgICAgICAgICBcInBhZ2luYXRlQnkvOmtleS86cGFnZVwiOiBQcmVwYXJlZFN0YXRlbWVudEtleXMuUEFHRV9CWSxcbiAgICAgICAgICAgIFwiZmluZC86dmFsdWVcIjogUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkQsXG4gICAgICAgICAgICBcInBhZ2UvOnZhbHVlXCI6IFByZXBhcmVkU3RhdGVtZW50S2V5cy5QQUdFLFxuICAgICAgICAgICAgXCJmaW5kT25lQnkvOmtleS86dmFsdWVcIjogUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkRfT05FX0JZLFxuICAgICAgICAgICAgXCJmaW5kQnkvOmtleS86dmFsdWVcIjogUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkRfQlksXG4gICAgICAgICAgICBcImNvdW50T2YvOmZpZWxkXCI6IFByZXBhcmVkU3RhdGVtZW50S2V5cy5DT1VOVF9PRixcbiAgICAgICAgICAgIFwibWF4T2YvOmZpZWxkXCI6IFByZXBhcmVkU3RhdGVtZW50S2V5cy5NQVhfT0YsXG4gICAgICAgICAgICBcIm1pbk9mLzpmaWVsZFwiOiBQcmVwYXJlZFN0YXRlbWVudEtleXMuTUlOX09GLFxuICAgICAgICAgICAgXCJhdmdPZi86ZmllbGRcIjogUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkFWR19PRixcbiAgICAgICAgICAgIFwic3VtT2YvOmZpZWxkXCI6IFByZXBhcmVkU3RhdGVtZW50S2V5cy5TVU1fT0YsXG4gICAgICAgICAgICBcImRpc3RpbmN0T2YvOmZpZWxkXCI6IFByZXBhcmVkU3RhdGVtZW50S2V5cy5ESVNUSU5DVF9PRixcbiAgICAgICAgICAgIFwiZ3JvdXBPZi86ZmllbGRcIjogUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkdST1VQX09GLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzdGF0ZW1lbnRLZXkgPSBzdGF0ZW1lbnRSb3V0ZXNbbm9ybWFsaXplZFBhdGhdO1xuICAgICAgICBpZiAoc3RhdGVtZW50S2V5ICYmIG1ldGhvZCA9PT0gXCJHRVRcIikge1xuICAgICAgICAgICAgcmV0dXJuIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlUmVnaXN0cmF0aW9uKEZyb21Nb2RlbENvbnRyb2xsZXIuc3RhdGVtZW50TWV0aG9kTmFtZShub3JtYWxpemVkUGF0aCksIEZyb21Nb2RlbENvbnRyb2xsZXIuY3JlYXRlU3RhdGVtZW50U2hvcnRjdXRIYW5kbGVyKHN0YXRlbWVudEtleSwgbW9kZWxDbGF6ek5hbWUpLCBGcm9tTW9kZWxDb250cm9sbGVyLnN0YXRlbWVudFNob3J0Y3V0RGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIG5vcm1hbGl6ZWRQYXRoLCBzdGF0ZW1lbnRLZXkpLCBGcm9tTW9kZWxDb250cm9sbGVyLnN0YXRlbWVudFNob3J0Y3V0UGFyYW1zKG5vcm1hbGl6ZWRQYXRoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJHRVRcIiAmJiBub3JtYWxpemVkUGF0aC5zdGFydHNXaXRoKFwicXVlcnkvXCIpKSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeU1ldGhvZCA9IG5vcm1hbGl6ZWRQYXRoLnJlcGxhY2UoL15xdWVyeVxcLy8sIFwiXCIpLnNwbGl0KFwiL1wiKVswXTtcbiAgICAgICAgICAgIHJldHVybiBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlZ2lzdHJhdGlvbihxdWVyeU1ldGhvZCwgRnJvbU1vZGVsQ29udHJvbGxlci5jcmVhdGVDb21wbGV4UXVlcnlIYW5kbGVyKHF1ZXJ5TWV0aG9kKSwgRnJvbU1vZGVsQ29udHJvbGxlci5nZXRRdWVyeURlY29yYXRvcnMocXVlcnlNZXRob2QsIG5vcm1hbGl6ZWRQYXRoLCBcIkdFVFwiLCB0cnVlKSwgRnJvbU1vZGVsQ29udHJvbGxlci5jb21wbGV4UXVlcnlQYXJhbXMobm9ybWFsaXplZFBhdGgpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGYWxsYmFjayBmb3IgY3VzdG9tIEByb3V0ZSgpIHBhdGhzIChlLmcuIFwibWV0YWRhdGEvZm9yLXByb2R1Y3QvOnByb2R1Y3RDb2RlXCIpXG4gICAgICAgIGNvbnN0IHBhdGhTZWdtZW50cyA9IG5vcm1hbGl6ZWRQYXRoLnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbik7XG4gICAgICAgIGNvbnN0IGtub3duUHJlZml4ZXMgPSBuZXcgU2V0KFtcbiAgICAgICAgICAgIFwibGlzdEJ5XCIsIFwiZmluZEJ5XCIsIFwiZmluZEJ5UGFnaW5hdGVcIiwgXCJmaW5kT25lQnlcIiwgXCJwYWdpbmF0ZUJ5XCIsXG4gICAgICAgICAgICBcImZpbmRcIiwgXCJwYWdlXCIsIFwiY291bnRPZlwiLCBcIm1heE9mXCIsIFwibWluT2ZcIiwgXCJhdmdPZlwiLCBcInN1bU9mXCIsXG4gICAgICAgICAgICBcImRpc3RpbmN0T2ZcIiwgXCJncm91cE9mXCIsIFwic3RhdGVtZW50XCIsIFwiYnVsa1wiLCBcInF1ZXJ5XCIsXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAocGF0aFNlZ21lbnRzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICFub3JtYWxpemVkUGF0aC5zdGFydHNXaXRoKFwicXVlcnkvXCIpICYmXG4gICAgICAgICAgICAha25vd25QcmVmaXhlcy5oYXMocGF0aFNlZ21lbnRzWzBdKSkge1xuICAgICAgICAgICAgLy8gTG9vayB1cCB0aGUgYWN0dWFsIG1ldGhvZCBuYW1lIGZyb20gQHJvdXRlIG1ldGFkYXRhIGJ5IG1hdGNoaW5nIHRoZSBwYXRoLlxuICAgICAgICAgICAgLy8gVGhlIEByb3V0ZSBkZWNvcmF0b3Igc3RvcmVzIHsgcGF0aCwgaHR0cE1ldGhvZCwgaGFuZGxlciB9IGtleWVkIGJ5IG1ldGhvZCBuYW1lXG4gICAgICAgICAgICAvLyBvbiB0aGUgcmVwb3NpdG9yeSBjb25zdHJ1Y3Rvci5cbiAgICAgICAgICAgIGNvbnN0IHJvdXRlTWV0YWRhdGEgPSBNZXRhZGF0YS5nZXQocGVyc2lzdGVuY2U/LmNvbnN0cnVjdG9yLCBNZXRhZGF0YS5rZXkoREVDQUZfUk9VVEUpKSA/PyB7fTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRFbnRyeSA9IE9iamVjdC5lbnRyaWVzKHJvdXRlTWV0YWRhdGEpLmZpbmQoKFssIGluZm9dKSA9PiBpbmZvICYmXG4gICAgICAgICAgICAgICAgdHlwZW9mIGluZm8gPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgICAgICBpbmZvLnBhdGg/LnJlcGxhY2UoL15cXC8rfFxcLyskL2csIFwiXCIpID09PSBub3JtYWxpemVkUGF0aCk7XG4gICAgICAgICAgICBjb25zdCBhY3R1YWxNZXRob2ROYW1lID0gbWF0Y2hlZEVudHJ5Py5bMF0gfHwgcGF0aFNlZ21lbnRzWzBdO1xuICAgICAgICAgICAgY29uc3QgcGFyYW1TZWdtZW50cyA9IHBhdGhTZWdtZW50cy5maWx0ZXIoKHMpID0+IHMuc3RhcnRzV2l0aChcIjpcIikpO1xuICAgICAgICAgICAgY29uc3QgYXBpUGF0aFBhcmFtcyA9IHBhcmFtU2VnbWVudHMubWFwKChzKSA9PiBzLnNsaWNlKDEpKS5tYXAoKG5hbWUpID0+ICh7XG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYCR7bmFtZX0gcGFyYW1ldGVyIGZvciB0aGUgcXVlcnlgLFxuICAgICAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHJldHVybiBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZVJlZ2lzdHJhdGlvbihhY3R1YWxNZXRob2ROYW1lLCBGcm9tTW9kZWxDb250cm9sbGVyLmNyZWF0ZUN1c3RvbVJvdXRlSGFuZGxlcihhY3R1YWxNZXRob2ROYW1lKSwgW1xuICAgICAgICAgICAgICAgIC4uLmFwaVBhdGhQYXJhbXMubWFwKChwKSA9PiBBcGlQYXJhbShwKSksXG4gICAgICAgICAgICAgICAgQXBpT3BlcmF0aW9uKHsgc3VtbWFyeTogYFJldHJpZXZlIHJlY29yZHMgdXNpbmcgXCIke2FjdHVhbE1ldGhvZE5hbWV9XCIuYCB9KSxcbiAgICAgICAgICAgICAgICBBcGlPa1Jlc3BvbnNlKHsgZGVzY3JpcHRpb246IFwiUmVzdWx0IHN1Y2Nlc3NmdWxseSByZXRyaWV2ZWQuXCIgfSksXG4gICAgICAgICAgICAgICAgQXBpTm9Db250ZW50UmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogXCJObyBjb250ZW50IHJldHVybmVkIGJ5IHRoZSBtZXRob2QuXCIgfSksXG4gICAgICAgICAgICBdLCBGcm9tTW9kZWxDb250cm9sbGVyLmNvbXBsZXhRdWVyeVBhcmFtcyhub3JtYWxpemVkUGF0aCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGVSZWdpc3RyYXRpb24obWV0aG9kTmFtZSwgaGFuZGxlciwgZGVjb3JhdG9ycywgcGFyYW1EZWNvcmF0b3JzKSB7XG4gICAgICAgIHJldHVybiB7IG1ldGhvZE5hbWUsIGhhbmRsZXIsIGRlY29yYXRvcnMsIHBhcmFtRGVjb3JhdG9ycyB9O1xuICAgIH1cbiAgICBzdGF0aWMgc3RhdGVtZW50TWV0aG9kTmFtZShwYXRoKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0U2VnbWVudCA9IHBhdGguc3BsaXQoXCIvXCIpWzBdO1xuICAgICAgICByZXR1cm4gZmlyc3RTZWdtZW50O1xuICAgIH1cbiAgICBzdGF0aWMgc3RhdGVtZW50U2hvcnRjdXRQYXJhbXMocGF0aCkge1xuICAgICAgICBjb25zdCBzZWdtZW50cyA9IHBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcigocykgPT4gcy5zdGFydHNXaXRoKFwiOlwiKSk7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IFtdO1xuICAgICAgICBzZWdtZW50cy5mb3JFYWNoKChzZWcsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBzZWcucmVwbGFjZShcIjpcIiwgXCJcIik7XG4gICAgICAgICAgICBwYXJhbXMucHVzaCh7IGRlY29yYXRvcjogUGFyYW0obmFtZSksIGluZGV4OiBpIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChcImxpc3RCeS9cIikgfHxcbiAgICAgICAgICAgIHBhdGguc3RhcnRzV2l0aChcInBhZ2luYXRlQnkvXCIpIHx8XG4gICAgICAgICAgICBwYXRoLnN0YXJ0c1dpdGgoXCJmaW5kL1wiKSB8fFxuICAgICAgICAgICAgcGF0aC5zdGFydHNXaXRoKFwicGFnZS9cIikpIHtcbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKHsgZGVjb3JhdG9yOiBEZWNhZlF1ZXJ5KCksIGluZGV4OiBzZWdtZW50cy5sZW5ndGggfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9XG4gICAgc3RhdGljIGNvbXBsZXhRdWVyeVBhcmFtcyhwYXRoKSB7XG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKChzKSA9PiBzLnN0YXJ0c1dpdGgoXCI6XCIpKTtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gW107XG4gICAgICAgIHNlZ21lbnRzLmZvckVhY2goKHNlZywgaSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IHNlZy5yZXBsYWNlKFwiOlwiLCBcIlwiKTtcbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKHsgZGVjb3JhdG9yOiBQYXJhbShuYW1lKSwgaW5kZXg6IGkgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKFwicXVlcnkvXCIpKSB7XG4gICAgICAgICAgICBwYXJhbXMucHVzaCh7IGRlY29yYXRvcjogRGVjYWZRdWVyeSgpLCBpbmRleDogc2VnbWVudHMubGVuZ3RoIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGVDcmVhdGVIYW5kbGVyKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSkge1xuICAgICAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gY3JlYXRlKGRhdGEsIHJlc3ApIHtcbiAgICAgICAgICAgIGNvbnN0IHsgY3R4LCBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChbXSwgT3BlcmF0aW9uS2V5cy5DUkVBVEUsIHRydWUpKS5mb3IoY3JlYXRlKTtcbiAgICAgICAgICAgIGxvZy52ZXJib3NlKGBjcmVhdGluZyBuZXcgJHttb2RlbENsYXp6TmFtZX1gKTtcbiAgICAgICAgICAgIGxldCBjcmVhdGVkO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjcmVhdGVkID0gYXdhaXQgdGhpcy5wZXJzaXN0ZW5jZShjdHgpLmNyZWF0ZShkYXRhLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBsb2cuZXJyb3IoYEZhaWxlZCB0byBjcmVhdGUgbmV3ICR7bW9kZWxDbGF6ek5hbWV9YCwgZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZy5pbmZvKGBjcmVhdGVkIG5ldyAke21vZGVsQ2xhenpOYW1lfSB3aXRoIGlkICR7Y3JlYXRlZFt0aGlzLnBrXX1gKTtcbiAgICAgICAgICAgIGlmIChyZXNwKVxuICAgICAgICAgICAgICAgIGN0eC50b1Jlc3BvbnNlKHJlc3ApO1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGVCdWxrQ3JlYXRlSGFuZGxlcihNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUFsbChkYXRhLCByZXNwKSB7XG4gICAgICAgICAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoW10sIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5DUkVBVEVfQUxMLCB0cnVlKSkuZm9yKGNyZWF0ZUFsbCk7XG4gICAgICAgICAgICBsb2cudmVyYm9zZShgY3JlYXRpbmcgbmV3ICR7bW9kZWxDbGF6ek5hbWV9YCk7XG4gICAgICAgICAgICBsZXQgY3JlYXRlZDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY3JlYXRlZCA9IGF3YWl0IHRoaXMucGVyc2lzdGVuY2UoY3R4KS5jcmVhdGVBbGwoZGF0YS5tYXAoKGQpID0+IG5ldyBNb2RlbENvbnN0cihkKSksIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGxvZy5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBuZXcgJHttb2RlbENsYXp6TmFtZX1gLCBlKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9nLmluZm8oYGNyZWF0ZWQgbmV3ICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggaWQgJHtjcmVhdGVkW3RoaXMucGtdfWApO1xuICAgICAgICAgICAgaWYgKHJlc3ApXG4gICAgICAgICAgICAgICAgY3R4LnRvUmVzcG9uc2UocmVzcCk7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZUJ1bGtSZWFkSGFuZGxlcihtb2RlbENsYXp6TmFtZSkge1xuICAgICAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gcmVhZEFsbChpZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgY3R4LCBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChbXSwgQnVsa0NydWRPcGVyYXRpb25LZXlzLlJFQURfQUxMLCB0cnVlKSkuZm9yKHJlYWRBbGwpO1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZElkcyA9IEFycmF5LmlzQXJyYXkoaWRzKSA/IGlkcyA6IFtpZHNdO1xuICAgICAgICAgICAgbGV0IHJlYWQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGxvZy5kZWJ1ZyhgcmVhZGluZyAke25vcm1hbGl6ZWRJZHN9ICR7bW9kZWxDbGF6ek5hbWV9YCk7XG4gICAgICAgICAgICAgICAgcmVhZCA9IGF3YWl0IHRoaXMucGVyc2lzdGVuY2UoY3R4KS5yZWFkQWxsKG5vcm1hbGl6ZWRJZHMsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGxvZy5lcnJvcihgRmFpbGVkIHRvIHJlYWQgJHttb2RlbENsYXp6TmFtZX1gLCBlKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9nLmluZm8oYHJlYWQgJHtyZWFkLmxlbmd0aH0gJHttb2RlbENsYXp6TmFtZX1gKTtcbiAgICAgICAgICAgIHJldHVybiByZWFkO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlQnVsa1VwZGF0ZUhhbmRsZXIobW9kZWxDbGF6ek5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUFsbChib2R5LCByZXNwKSB7XG4gICAgICAgICAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoW10sIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5VUERBVEVfQUxMLCB0cnVlKSkuZm9yKHVwZGF0ZUFsbCk7XG4gICAgICAgICAgICBsZXQgdXBkYXRlZDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbG9nLmluZm8oYHVwZGF0aW5nICR7Ym9keS5sZW5ndGh9ICR7bW9kZWxDbGF6ek5hbWV9YCk7XG4gICAgICAgICAgICAgICAgdXBkYXRlZCA9IGF3YWl0IHRoaXMucGVyc2lzdGVuY2UoY3R4KS51cGRhdGVBbGwoYm9keSwgY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgbG9nLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzcClcbiAgICAgICAgICAgICAgICBjdHgudG9SZXNwb25zZShyZXNwKTtcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlQnVsa0RlbGV0ZUhhbmRsZXIobW9kZWxDbGF6ek5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUFsbChpZHMsIHJlc3ApIHtcbiAgICAgICAgICAgIGNvbnN0IHsgY3R4LCBsb2cgfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChbXSwgQnVsa0NydWRPcGVyYXRpb25LZXlzLkRFTEVURV9BTEwsIHRydWUpKS5mb3IoZGVsZXRlQWxsKTtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRJZHMgPSBBcnJheS5pc0FycmF5KGlkcykgPyBpZHMgOiBbaWRzXTtcbiAgICAgICAgICAgIGxldCByZWFkO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoYGRlbGV0aW5nICR7bm9ybWFsaXplZElkcy5sZW5ndGh9ICR7bW9kZWxDbGF6ek5hbWV9YCk7XG4gICAgICAgICAgICAgICAgcmVhZCA9IGF3YWl0IHRoaXMucGVyc2lzdGVuY2UoY3R4KS5kZWxldGVBbGwobm9ybWFsaXplZElkcywgY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgbG9nLmVycm9yKGBGYWlsZWQgdG8gZGVsZXRlICR7bW9kZWxDbGF6ek5hbWV9YCwgZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZy5pbmZvKGBkZWxldGVkICR7cmVhZC5sZW5ndGh9ICR7bW9kZWxDbGF6ek5hbWV9YCk7XG4gICAgICAgICAgICBpZiAocmVzcClcbiAgICAgICAgICAgICAgICBjdHgudG9SZXNwb25zZShyZXNwKTtcbiAgICAgICAgICAgIHJldHVybiByZWFkO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlUmVhZEhhbmRsZXIoZ2V0UEssIG1vZGVsQ2xhenpOYW1lKSB7XG4gICAgICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiByZWFkKHJvdXRlUGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoW10sIE9wZXJhdGlvbktleXMuUkVBRCwgdHJ1ZSkpLmZvcihyZWFkKTtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gZ2V0UEsoLi4ucm91dGVQYXJhbXMudmFsdWVzSW5PcmRlcik7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlkID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoYE5vICR7dGhpcy5wa30gcHJvdmlkZWRgKTtcbiAgICAgICAgICAgIGxldCByZWFkUmVzdWx0O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoYHJlYWRpbmcgJHttb2RlbENsYXp6TmFtZX0gd2l0aCAke3RoaXMucGt9ICR7aWR9YCk7XG4gICAgICAgICAgICAgICAgcmVhZFJlc3VsdCA9IGF3YWl0IHRoaXMucGVyc2lzdGVuY2UoY3R4KS5yZWFkKGlkLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBsb2cuZXJyb3IoYEZhaWxlZCB0byByZWFkICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggaWQgJHtpZH1gLCBlKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9nLmluZm8oYHJlYWQgJHttb2RlbENsYXp6TmFtZX0gd2l0aCBpZCAke3JlYWRSZXN1bHRbdGhpcy5wa119YCk7XG4gICAgICAgICAgICByZXR1cm4gcmVhZFJlc3VsdDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZVVwZGF0ZUhhbmRsZXIoZ2V0UEssIE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSkge1xuICAgICAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gdXBkYXRlKHJvdXRlUGFyYW1zLCBib2R5LCByZXNwKSB7XG4gICAgICAgICAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoW10sIE9wZXJhdGlvbktleXMuVVBEQVRFLCB0cnVlKSkuZm9yKHVwZGF0ZSk7XG4gICAgICAgICAgICBjb25zdCBpZCA9IGdldFBLKC4uLnJvdXRlUGFyYW1zLnZhbHVlc0luT3JkZXIpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBObyAke3RoaXMucGt9IHByb3ZpZGVkYCk7XG4gICAgICAgICAgICBsZXQgdXBkYXRlZDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgbG9nLmluZm8oYHVwZGF0aW5nICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggJHt0aGlzLnBrfSAke2lkfWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcbiAgICAgICAgICAgICAgICB1cGRhdGVkID0gYXdhaXQgdGhpcy5wZXJzaXN0ZW5jZShjdHgpLnVwZGF0ZShuZXcgTW9kZWxDb25zdHIoeyAuLi5wYXlsb2FkLCBbdGhpcy5wa106IGlkIH0pLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBsb2cuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXNwKVxuICAgICAgICAgICAgICAgIGN0eC50b1Jlc3BvbnNlKHJlc3ApO1xuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGVEZWxldGVIYW5kbGVyKGdldFBLLCBtb2RlbENsYXp6TmFtZSkge1xuICAgICAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gcmVtb3ZlKHJvdXRlUGFyYW1zLCByZXNwKSB7XG4gICAgICAgICAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoW10sIE9wZXJhdGlvbktleXMuREVMRVRFLCB0cnVlKSkuZm9yKHJlbW92ZSk7XG4gICAgICAgICAgICBjb25zdCBpZCA9IGdldFBLKC4uLnJvdXRlUGFyYW1zLnZhbHVlc0luT3JkZXIpO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpZCA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGBObyAke3RoaXMucGt9IHByb3ZpZGVkYCk7XG4gICAgICAgICAgICBsZXQgZGVsO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBsb2cuZGVidWcoYGRlbGV0aW5nICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggJHt0aGlzLnBrfSAke2lkfWApO1xuICAgICAgICAgICAgICAgIGRlbCA9IGF3YWl0IHRoaXMucGVyc2lzdGVuY2UoY3R4KS5kZWxldGUoaWQsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGxvZy5lcnJvcihgRmFpbGVkIHRvIGRlbGV0ZSAke21vZGVsQ2xhenpOYW1lfSB3aXRoIGlkICR7aWR9YCwgZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvZy5pbmZvKGBkZWxldGVkICR7bW9kZWxDbGF6ek5hbWV9IHdpdGggaWQgJHtpZH1gKTtcbiAgICAgICAgICAgIGlmIChyZXNwKVxuICAgICAgICAgICAgICAgIGN0eC50b1Jlc3BvbnNlKHJlc3ApO1xuICAgICAgICAgICAgcmV0dXJuIGRlbDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZVN0YXRlbWVudEhhbmRsZXIobW9kZWxDbGF6ek5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGFzeW5jIGZ1bmN0aW9uIHN0YXRlbWVudChuYW1lLCBhcmdzLCBkZXRhaWxzKSB7XG4gICAgICAgICAgICBjb25zdCB7IGN0eCB9ID0gKGF3YWl0IHRoaXMubG9nQ3R4KFtdLCBQZXJzaXN0ZW5jZUtleXMuU1RBVEVNRU5ULCB0cnVlKSkuZm9yKHN0YXRlbWVudCk7XG4gICAgICAgICAgICBjb25zdCB7IGRpcmVjdGlvbiwgb2Zmc2V0LCBsaW1pdCwgYm9va21hcmsgfSA9IGRldGFpbHM7XG4gICAgICAgICAgICBhcmdzID0gYXJncy5tYXAoKGEpID0+ICh0eXBlb2YgYSA9PT0gXCJzdHJpbmdcIiA/IHBhcnNlSW50KGEpIDogYSkgfHwgYSk7XG4gICAgICAgICAgICBjb25zdCBwYXRoRGlyZWN0aW9uID0gYXJncy5sZW5ndGggPiAxID8gYXJnc1sxXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkRGlyZWN0aW9uID0gKGRpcmVjdGlvbiA/PyBwYXRoRGlyZWN0aW9uKTtcbiAgICAgICAgICAgIGlmIChyZXNvbHZlZERpcmVjdGlvbiAmJiBhcmdzLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICAgICAgYXJnc1sxXSA9IHJlc29sdmVkRGlyZWN0aW9uO1xuICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuRklORDpcbiAgICAgICAgICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5GSU5EX0JZOlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5MSVNUX0JZOlxuICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goZGlyZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuUEFHRTpcbiAgICAgICAgICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5QQUdFX0JZOlxuICAgICAgICAgICAgICAgICAgICBhcmdzID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkRGlyZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBsaW1pdCwgb2Zmc2V0LCBib29rbWFyayB9LFxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5GSU5EX09ORV9CWTpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuQ09VTlRfT0Y6XG4gICAgICAgICAgICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuTUFYX09GOlxuICAgICAgICAgICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLk1JTl9PRjpcbiAgICAgICAgICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5BVkdfT0Y6XG4gICAgICAgICAgICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuU1VNX09GOlxuICAgICAgICAgICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkRJU1RJTkNUX09GOlxuICAgICAgICAgICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkdST1VQX09GOlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBlcnNpc3RlbmNlKGN0eCkuc3RhdGVtZW50KG5hbWUsIC4uLmFyZ3MsIGN0eCk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGVTdGF0ZW1lbnRTaG9ydGN1dEhhbmRsZXIoc3RhdGVtZW50S2V5LCBtb2RlbENsYXp6TmFtZSkge1xuICAgICAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gc3RhdGVtZW50U2hvcnRjdXQoLi4uYXJncykge1xuICAgICAgICAgICAgY29uc3QgeyBjdHggfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChbXSwgc3RhdGVtZW50S2V5LCB0cnVlKSkuZm9yKHN0YXRlbWVudFNob3J0Y3V0KTtcbiAgICAgICAgICAgIHN3aXRjaCAoc3RhdGVtZW50S2V5KSB7XG4gICAgICAgICAgICAgICAgY2FzZSBQcmVwYXJlZFN0YXRlbWVudEtleXMuTElTVF9CWToge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBba2V5LCBkZXRhaWxzXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBlcnNpc3RlbmNlKGN0eCkubGlzdEJ5KGtleSwgZGV0YWlscz8uZGlyZWN0aW9uLCBjdHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5QQUdFX0JZOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFtrZXksIHBhZ2UsIGRldGFpbHNdID0gYXJncztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGVyc2lzdGVuY2UoY3R4KS5wYWdpbmF0ZUJ5KGtleSwgZGV0YWlscz8uZGlyZWN0aW9uLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaW1pdDogZGV0YWlscz8ubGltaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IGRldGFpbHM/Lm9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0sIGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkQ6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgW3ZhbHVlLCBkZXRhaWxzXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGRldGFpbHM/LmRpcmVjdGlvbiA/PyBPcmRlckRpcmVjdGlvbi5BU0M7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlcnNpc3RlbmNlID0gdGhpcy5wZXJzaXN0ZW5jZShjdHgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBlcnNpc3RlbmNlLmZpbmQgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZXJzaXN0ZW5jZS5maW5kKHZhbHVlLCBkaXJlY3Rpb24sIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwZXJzaXN0ZW5jZS5zdGF0ZW1lbnQoUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkZJTkQsIHZhbHVlLCBkaXJlY3Rpb24sIGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLlBBR0U6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgW3ZhbHVlLCBkZXRhaWxzXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogZGV0YWlscz8ub2Zmc2V0ID8/IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW1pdDogZGV0YWlscz8ubGltaXQgPz8gMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBib29rbWFyazogZGV0YWlscz8uYm9va21hcmssXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlcnNpc3RlbmNlID0gdGhpcy5wZXJzaXN0ZW5jZShjdHgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSBkZXRhaWxzPy5kaXJlY3Rpb24gPz8gT3JkZXJEaXJlY3Rpb24uQVNDO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBlcnNpc3RlbmNlLnBhZ2UgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZXJzaXN0ZW5jZS5wYWdlKHZhbHVlLCBkaXJlY3Rpb24sIHJlZiwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlcnNpc3RlbmNlLnN0YXRlbWVudChQcmVwYXJlZFN0YXRlbWVudEtleXMuUEFHRSwgdmFsdWUsIGRpcmVjdGlvbiwgcmVmLCBjdHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5GSU5EX09ORV9CWToge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wZXJzaXN0ZW5jZShjdHgpLmZpbmRPbmVCeShrZXksIHZhbHVlLCBjdHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFByZXBhcmVkU3RhdGVtZW50S2V5cy5GSU5EX0JZOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBlcnNpc3RlbmNlKGN0eClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mb3IoY3R4LnRvT3ZlcnJpZGVzKCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmluZEJ5KGtleSwgdmFsdWUsIGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZW1lbnRLZXkgPT09IFByZXBhcmVkU3RhdGVtZW50S2V5cy5DT1VOVF9PRiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50S2V5ID09PSBQcmVwYXJlZFN0YXRlbWVudEtleXMuTUFYX09GIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnRLZXkgPT09IFByZXBhcmVkU3RhdGVtZW50S2V5cy5NSU5fT0YgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlbWVudEtleSA9PT0gUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkFWR19PRiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50S2V5ID09PSBQcmVwYXJlZFN0YXRlbWVudEtleXMuU1VNX09GIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnRLZXkgPT09IFByZXBhcmVkU3RhdGVtZW50S2V5cy5ESVNUSU5DVF9PRiB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50S2V5ID09PSBQcmVwYXJlZFN0YXRlbWVudEtleXMuR1JPVVBfT0YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFtmaWVsZF0gPSBhcmdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGVyc2lzdGVuY2UoY3R4KS5zdGF0ZW1lbnQoc3RhdGVtZW50S2V5LCBmaWVsZCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gc3RhdGVtZW50OiAke3N0YXRlbWVudEtleX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZUNvbXBsZXhRdWVyeUhhbmRsZXIobWV0aG9kTmFtZSkge1xuICAgICAgICByZXR1cm4gYXN5bmMgZnVuY3Rpb24gY29tcGxleFF1ZXJ5KC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nPy5mb3I/Lihjb21wbGV4UXVlcnkpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAobG9nKVxuICAgICAgICAgICAgICAgICAgICBsb2cuZGVidWcoYEludm9raW5nIGN1c3RvbSBxdWVyeSBcIiR7bWV0aG9kTmFtZX1cImApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgY3R4IH0gPSAoYXdhaXQgdGhpcy5sb2dDdHgoW10sIG1ldGhvZE5hbWUsIHRydWUpKS5mb3IoY29tcGxleFF1ZXJ5KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwZXJzaXN0ZW5jZSA9IHRoaXMucGVyc2lzdGVuY2UoY3R4KTtcbiAgICAgICAgICAgICAgICBjb25zdCBzcHJlYWRBcmdzID0gRnJvbU1vZGVsQ29udHJvbGxlci5leHRyYWN0UXVlcnlBcmdzKGFyZ3MpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGVyc2lzdGVuY2VbbWV0aG9kTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGVyc2lzdGVuY2VbbWV0aG9kTmFtZV0oLi4uc3ByZWFkQXJncywgY3R4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwZXJzaXN0ZW5jZS5zdGF0ZW1lbnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGVyc2lzdGVuY2Uuc3RhdGVtZW50KG1ldGhvZE5hbWUsIC4uLnNwcmVhZEFyZ3MsIGN0eCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUGVyc2lzdGVuY2UgbWV0aG9kIFwiJHttZXRob2ROYW1lfVwiIG5vdCBmb3VuZCBvbiAke3BlcnNpc3RlbmNlPy5jb25zdHJ1Y3Rvcj8ubmFtZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvZylcbiAgICAgICAgICAgICAgICAgICAgbG9nLmVycm9yKGBDdXN0b20gcXVlcnkgXCIke21ldGhvZE5hbWV9XCIgZmFpbGVkYCwgZSk7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZUN1c3RvbVJvdXRlSGFuZGxlcihtZXRob2ROYW1lKSB7XG4gICAgICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiBjdXN0b21Sb3V0ZSguLi5hcmdzKSB7XG4gICAgICAgICAgICBjb25zdCBsb2cgPSB0aGlzLmxvZz8uZm9yPy4oY3VzdG9tUm91dGUpO1xuICAgICAgICAgICAgY29uc3QgeyBjdHggfSA9IChhd2FpdCB0aGlzLmxvZ0N0eChbXSwgbWV0aG9kTmFtZSwgdHJ1ZSkpLmZvcihjdXN0b21Sb3V0ZSk7XG4gICAgICAgICAgICBjb25zdCBwZXJzaXN0ZW5jZSA9IHRoaXMucGVyc2lzdGVuY2UoY3R4KTtcbiAgICAgICAgICAgIGNvbnN0IHNwcmVhZEFyZ3MgPSBGcm9tTW9kZWxDb250cm9sbGVyLmV4dHJhY3RRdWVyeUFyZ3MoYXJncyk7XG4gICAgICAgICAgICAvLyBUcnkgdGhlIHBlcnNpc3RlbmNlIGRpcmVjdGx5ICh3b3JrcyB3aGVuIGl0J3MgYSBjdXN0b20gUmVwb3NpdG9yeSlcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGVyc2lzdGVuY2VbbWV0aG9kTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwZXJzaXN0ZW5jZVttZXRob2ROYW1lXSguLi5zcHJlYWRBcmdzLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV2hlbiBwZXJzaXN0ZW5jZSBpcyBhIE1vZGVsU2VydmljZSwgdGhlIG1ldGhvZCBsaXZlcyBvbiB0aGUgdW5kZXJseWluZyByZXBvXG4gICAgICAgICAgICBpZiAocGVyc2lzdGVuY2U/LnJlcG8gJiYgdHlwZW9mIHBlcnNpc3RlbmNlLnJlcG9bbWV0aG9kTmFtZV0gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwZXJzaXN0ZW5jZS5yZXBvW21ldGhvZE5hbWVdKC4uLnNwcmVhZEFyZ3MsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBGYWxsIGJhY2sgdG8gc3RhdGVtZW50IGdhdGV3YXlcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGVyc2lzdGVuY2Uuc3RhdGVtZW50ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGVyc2lzdGVuY2Uuc3RhdGVtZW50KG1ldGhvZE5hbWUsIC4uLnNwcmVhZEFyZ3MsIGN0eCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1ldGhvZCBcIiR7bWV0aG9kTmFtZX1cIiBub3QgZm91bmQgb24gJHtwZXJzaXN0ZW5jZT8uY29uc3RydWN0b3I/Lm5hbWV9IG9yIGl0cyByZXBvYCk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHN0YXRpYyBleHRyYWN0UXVlcnlBcmdzKGFyZ3MpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIGFyZ3M7XG4gICAgICAgIGNvbnN0IGxhc3QgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmIChsYXN0ICYmXG4gICAgICAgICAgICB0eXBlb2YgbGFzdCA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkobGFzdCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5T2JqID0gYXJncy5wb3AoKTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0RpcmVjdGlvbiA9IHF1ZXJ5T2JqLmRpcmVjdGlvbiAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgaGFzTGltaXQgPSBxdWVyeU9iai5saW1pdCAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgaGFzT2Zmc2V0ID0gcXVlcnlPYmoub2Zmc2V0ICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoIWhhc0RpcmVjdGlvbiAmJiAhaGFzTGltaXQgJiYgIWhhc09mZnNldClcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJncztcbiAgICAgICAgICAgIGNvbnN0IGV4dHJhcyA9IFtdO1xuICAgICAgICAgICAgaWYgKGhhc0RpcmVjdGlvbilcbiAgICAgICAgICAgICAgICBleHRyYXMucHVzaChxdWVyeU9iai5kaXJlY3Rpb24pO1xuICAgICAgICAgICAgZWxzZSBpZiAoaGFzTGltaXQgfHwgaGFzT2Zmc2V0KVxuICAgICAgICAgICAgICAgIGV4dHJhcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBpZiAoaGFzTGltaXQpXG4gICAgICAgICAgICAgICAgZXh0cmFzLnB1c2gocXVlcnlPYmoubGltaXQpO1xuICAgICAgICAgICAgaWYgKGhhc09mZnNldClcbiAgICAgICAgICAgICAgICBleHRyYXMucHVzaChxdWVyeU9iai5vZmZzZXQpO1xuICAgICAgICAgICAgcmV0dXJuIFsuLi5hcmdzLCAuLi5leHRyYXNdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmdzO1xuICAgIH1cbiAgICBzdGF0aWMgY3JlYXRlQ3JlYXRlRGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIEFwaU9wZXJhdGlvbkZyb21Nb2RlbChNb2RlbENvbnN0ciwgXCJQT1NUXCIpLFxuICAgICAgICAgICAgQXBpT3BlcmF0aW9uKHsgc3VtbWFyeTogYENyZWF0ZSBhIG5ldyAke21vZGVsQ2xhenpOYW1lfS5gIH0pLFxuICAgICAgICAgICAgQXBpQm9keSh7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBQYXlsb2FkIGZvciAke21vZGVsQ2xhenpOYW1lfWAsXG4gICAgICAgICAgICAgICAgdHlwZTogRHRvRm9yKE9wZXJhdGlvbktleXMuQ1JFQVRFLCBNb2RlbENvbnN0ciksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIEFwaUNyZWF0ZWRSZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke21vZGVsQ2xhenpOYW1lfSBjcmVhdGVkIHN1Y2Nlc3NmdWxseS5gLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogeyAkcmVmOiBnZXRTY2hlbWFQYXRoKE1vZGVsQ29uc3RyKSB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBBcGlCYWRSZXF1ZXN0UmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogXCJQYXlsb2FkIHZhbGlkYXRpb24gZmFpbGVkLlwiIH0pLFxuICAgICAgICAgICAgQXBpVW5wcm9jZXNzYWJsZUVudGl0eVJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJSZXBvc2l0b3J5IHJlamVjdGVkIHRoZSBwcm92aWRlZCBwYXlsb2FkLlwiLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuICAgIHN0YXRpYyBidWxrQ3JlYXRlRGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIEFwaU9wZXJhdGlvbkZyb21Nb2RlbChNb2RlbENvbnN0ciwgXCJQT1NUXCIsIFwiYnVsa1wiKSxcbiAgICAgICAgICAgIEFwaU9wZXJhdGlvbih7IHN1bW1hcnk6IGBDcmVhdGUgYSBuZXcgJHttb2RlbENsYXp6TmFtZX0uYCB9KSxcbiAgICAgICAgICAgIEFwaUJvZHkoe1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgUGF5bG9hZCBmb3IgJHttb2RlbENsYXp6TmFtZX1gLFxuICAgICAgICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiB7ICRyZWY6IGdldFNjaGVtYVBhdGgoTW9kZWxDb25zdHIpIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgQXBpQ3JlYXRlZFJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYCR7bW9kZWxDbGF6ek5hbWV9IGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5LmAsXG4gICAgICAgICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHsgJHJlZjogZ2V0U2NoZW1hUGF0aChNb2RlbENvbnN0cikgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBBcGlCYWRSZXF1ZXN0UmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogXCJQYXlsb2FkIHZhbGlkYXRpb24gZmFpbGVkLlwiIH0pLFxuICAgICAgICAgICAgQXBpVW5wcm9jZXNzYWJsZUVudGl0eVJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJSZXBvc2l0b3J5IHJlamVjdGVkIHRoZSBwcm92aWRlZCBwYXlsb2FkLlwiLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIF07XG4gICAgfVxuICAgIHN0YXRpYyBidWxrUmVhZERlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBBcGlPcGVyYXRpb25Gcm9tTW9kZWwoTW9kZWxDb25zdHIsIFwiR0VUXCIsIFwiYnVsa1wiKSxcbiAgICAgICAgICAgIEFwaU9wZXJhdGlvbih7IHN1bW1hcnk6IGBSZXRyaWV2ZSAke21vZGVsQ2xhenpOYW1lfSByZWNvcmRzIGJ5IGlkcy5gIH0pLFxuICAgICAgICAgICAgQXBpUXVlcnkoeyBuYW1lOiBcImlkc1wiLCByZXF1aXJlZDogdHJ1ZSwgdHlwZTogXCJhcnJheVwiIH0pLFxuICAgICAgICAgICAgQXBpT2tSZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke21vZGVsQ2xhenpOYW1lfSByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5LmAsXG4gICAgICAgICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHsgJHJlZjogZ2V0U2NoZW1hUGF0aChNb2RlbENvbnN0cikgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBBcGlOb3RGb3VuZFJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYE5vICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCBtYXRjaGVzIHRoZSBwcm92aWRlZCBpZGVudGlmaWVyLmAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgc3RhdGljIGJ1bGtVcGRhdGVEZWNvcmF0b3JzKE1vZGVsQ29uc3RyLCBtb2RlbENsYXp6TmFtZSwgYXBpUHJvcGVydGllcykge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgQXBpT3BlcmF0aW9uRnJvbU1vZGVsKE1vZGVsQ29uc3RyLCBcIlBVVFwiLCBcImJ1bGtcIiksXG4gICAgICAgICAgICBBcGlQYXJhbXNGcm9tTW9kZWwoYXBpUHJvcGVydGllcyksXG4gICAgICAgICAgICBBcGlPcGVyYXRpb24oe1xuICAgICAgICAgICAgICAgIHN1bW1hcnk6IGBSZXBsYWNlIGV4aXN0aW5nICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZHMgd2l0aCBuZXcgcGF5bG9hZHMuYCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgQXBpQm9keSh7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBQYXlsb2FkIGZvciByZXBsYWNpbmcgZXhpc3RpbmcgcmVjb3JkcyBvZiAke21vZGVsQ2xhenpOYW1lfWAsXG4gICAgICAgICAgICAgICAgc2NoZW1hOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICAgICAgJHJlZjogZ2V0U2NoZW1hUGF0aChEdG9Gb3IoT3BlcmF0aW9uS2V5cy5VUERBVEUsIE1vZGVsQ29uc3RyKSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgQXBpT2tSZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke21vZGVsQ2xhenpOYW1lfSB1cGRhdGVkIHN1Y2Nlc3NmdWxseS5gLFxuICAgICAgICAgICAgICAgIHNjaGVtYToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiB7ICRyZWY6IGdldFNjaGVtYVBhdGgoTW9kZWxDb25zdHIpIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgQXBpTm90Rm91bmRSZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBObyAke21vZGVsQ2xhenpOYW1lfSByZWNvcmQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgaWRlbnRpZmllci5gLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBBcGlCYWRSZXF1ZXN0UmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogXCJQYXlsb2FkIHZhbGlkYXRpb24gZmFpbGVkLlwiIH0pLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBzdGF0aWMgYnVsa0RlbGV0ZURlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lLCBhcGlQcm9wZXJ0aWVzKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBBcGlPcGVyYXRpb25Gcm9tTW9kZWwoTW9kZWxDb25zdHIsIFwiREVMRVRFXCIsIFwiYnVsa1wiKSxcbiAgICAgICAgICAgIEFwaVBhcmFtc0Zyb21Nb2RlbChhcGlQcm9wZXJ0aWVzKSxcbiAgICAgICAgICAgIEFwaU9wZXJhdGlvbih7IHN1bW1hcnk6IGBEZWxldGUgJHttb2RlbENsYXp6TmFtZX0gcmVjb3JkcyBieSBpZHMuYCB9KSxcbiAgICAgICAgICAgIEFwaVF1ZXJ5KHsgbmFtZTogXCJpZHNcIiwgcmVxdWlyZWQ6IHRydWUsIHR5cGU6IFwiYXJyYXlcIiB9KSxcbiAgICAgICAgICAgIEFwaU9rUmVzcG9uc2Uoe1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgJHttb2RlbENsYXp6TmFtZX0gZGVsZXRlZCBzdWNjZXNzZnVsbHkuYCxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgICAgICBpdGVtczogeyAkcmVmOiBnZXRTY2hlbWFQYXRoKE1vZGVsQ29uc3RyKSB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIEFwaU5vdEZvdW5kUmVzcG9uc2Uoe1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgTm8gJHttb2RlbENsYXp6TmFtZX0gcmVjb3JkIG1hdGNoZXMgdGhlIHByb3ZpZGVkIGlkZW50aWZpZXIuYCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBzdGF0aWMgcmVhZERlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lLCBhcGlQcm9wZXJ0aWVzLCBwa1BhdGgpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIEFwaU9wZXJhdGlvbkZyb21Nb2RlbChNb2RlbENvbnN0ciwgXCJHRVRcIiwgcGtQYXRoKSxcbiAgICAgICAgICAgIEFwaVBhcmFtc0Zyb21Nb2RlbChhcGlQcm9wZXJ0aWVzKSxcbiAgICAgICAgICAgIEFwaU9wZXJhdGlvbih7IHN1bW1hcnk6IGBSZXRyaWV2ZSBhICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCBieSBpZC5gIH0pLFxuICAgICAgICAgICAgQXBpT2tSZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke21vZGVsQ2xhenpOYW1lfSByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5LmAsXG4gICAgICAgICAgICAgICAgc2NoZW1hOiB7ICRyZWY6IGdldFNjaGVtYVBhdGgoTW9kZWxDb25zdHIpIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIEFwaU5vdEZvdW5kUmVzcG9uc2Uoe1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgTm8gJHttb2RlbENsYXp6TmFtZX0gcmVjb3JkIG1hdGNoZXMgdGhlIHByb3ZpZGVkIGlkZW50aWZpZXIuYCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBzdGF0aWMgdXBkYXRlRGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIGFwaVByb3BlcnRpZXMsIHBrUGF0aCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgQXBpT3BlcmF0aW9uRnJvbU1vZGVsKE1vZGVsQ29uc3RyLCBcIlBVVFwiLCBwa1BhdGgpLFxuICAgICAgICAgICAgQXBpUGFyYW1zRnJvbU1vZGVsKGFwaVByb3BlcnRpZXMpLFxuICAgICAgICAgICAgQXBpT3BlcmF0aW9uKHtcbiAgICAgICAgICAgICAgICBzdW1tYXJ5OiBgUmVwbGFjZSBhbiBleGlzdGluZyAke21vZGVsQ2xhenpOYW1lfSByZWNvcmQgd2l0aCBhIG5ldyBwYXlsb2FkLmAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIEFwaUJvZHkoe1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgUGF5bG9hZCBmb3IgcmVwbGFjaW5nIGFuIGV4aXN0aW5nIHJlY29yZCBvZiAke21vZGVsQ2xhenpOYW1lfWAsXG4gICAgICAgICAgICAgICAgdHlwZTogRHRvRm9yKE9wZXJhdGlvbktleXMuVVBEQVRFLCBNb2RlbENvbnN0ciksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIEFwaU9rUmVzcG9uc2Uoe1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgJHttb2RlbENsYXp6TmFtZX0gdXBkYXRlZCBzdWNjZXNzZnVsbHkuYCxcbiAgICAgICAgICAgICAgICBzY2hlbWE6IHsgJHJlZjogZ2V0U2NoZW1hUGF0aChNb2RlbENvbnN0cikgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgQXBpTm90Rm91bmRSZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBObyAke21vZGVsQ2xhenpOYW1lfSByZWNvcmQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgaWRlbnRpZmllci5gLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBBcGlCYWRSZXF1ZXN0UmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogXCJQYXlsb2FkIHZhbGlkYXRpb24gZmFpbGVkLlwiIH0pLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBzdGF0aWMgZGVsZXRlRGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIGFwaVByb3BlcnRpZXMsIHBrUGF0aCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgQXBpT3BlcmF0aW9uRnJvbU1vZGVsKE1vZGVsQ29uc3RyLCBcIkRFTEVURVwiLCBwa1BhdGgpLFxuICAgICAgICAgICAgQXBpUGFyYW1zRnJvbU1vZGVsKGFwaVByb3BlcnRpZXMpLFxuICAgICAgICAgICAgQXBpT3BlcmF0aW9uKHsgc3VtbWFyeTogYERlbGV0ZSBhICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCBieSBpZC5gIH0pLFxuICAgICAgICAgICAgQXBpT2tSZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke21vZGVsQ2xhenpOYW1lfSBkZWxldGVkIHN1Y2Nlc3NmdWxseS5gLFxuICAgICAgICAgICAgICAgIHNjaGVtYTogeyAkcmVmOiBnZXRTY2hlbWFQYXRoKE1vZGVsQ29uc3RyKSB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBBcGlOb3RGb3VuZFJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYE5vICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCBtYXRjaGVzIHRoZSBwcm92aWRlZCBpZGVudGlmaWVyLmAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgc3RhdGljIHN0YXRlbWVudERlY29yYXRvcnMoTW9kZWxDb25zdHIsIG1vZGVsQ2xhenpOYW1lKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBBcGlPcGVyYXRpb25Gcm9tTW9kZWwoTW9kZWxDb25zdHIsIFwiR0VUXCIsIFwic3RhdGVtZW50LzptZXRob2QvKmFyZ3NcIiksXG4gICAgICAgICAgICBBcGlPcGVyYXRpb24oe1xuICAgICAgICAgICAgICAgIHN1bW1hcnk6IGBFeGVjdXRlcyBhIHByZXBhcmVkIHN0YXRlbWVudCBvbiAke21vZGVsQ2xhenpOYW1lfS5gLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBBcGlQYXJhbSh7IG5hbWU6IFwibWV0aG9kXCIsIGRlc2NyaXB0aW9uOiBcInRoZSBwcmVwYXJlZCBzdGF0ZW1lbnQgdG8gZXhlY3V0ZVwiIH0pLFxuICAgICAgICAgICAgQXBpUGFyYW0oe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiYXJnc1wiLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcImNvbmNhdGVuYXRlZCBsaXN0IG9mIGFyZ3VtZW50cyB0aGUgcHJlcGFyZWQgc3RhdGVtZW50IGNhbiBhY2NlcHRcIixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgQXBpUXVlcnkoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZGlyZWN0aW9uXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZW51bTogT3JkZXJEaXJlY3Rpb24sXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwidGhlIHNvcnQgb3JkZXIgd2hlbiBhcHBsaWNhYmxlXCIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIEFwaVF1ZXJ5KHsgbmFtZTogXCJsaW1pdFwiLCByZXF1aXJlZDogdHJ1ZSwgZGVzY3JpcHRpb246IFwibGltaXQgb3IgcGFnZSBzaXplIHdoZW4gYXBwbGljYWJsZVwiIH0pLFxuICAgICAgICAgICAgQXBpUXVlcnkoeyBuYW1lOiBcIm9mZnNldFwiLCByZXF1aXJlZDogdHJ1ZSwgZGVzY3JpcHRpb246IFwib2Zmc2V0IG9yIGJvb2ttYXJrIHdoZW4gYXBwbGljYWJsZVwiIH0pLFxuICAgICAgICAgICAgQXBpT2tSZXNwb25zZSh7IGRlc2NyaXB0aW9uOiBgJHttb2RlbENsYXp6TmFtZX0gbGlzdGVkIGZvdW5kLmAgfSksXG4gICAgICAgICAgICBBcGlOb3RGb3VuZFJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYE5vICR7bW9kZWxDbGF6ek5hbWV9IHJlY29yZCBtYXRjaGVzIHRoZSBwcm92aWRlZCBpZGVudGlmaWVyLmAsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgc3RhdGljIHN0YXRlbWVudFNob3J0Y3V0RGVjb3JhdG9ycyhNb2RlbENvbnN0ciwgbW9kZWxDbGF6ek5hbWUsIHBhdGgsIHN0YXRlbWVudEtleSkge1xuICAgICAgICBjb25zdCBiYXNlID0gW1xuICAgICAgICAgICAgQXBpT3BlcmF0aW9uRnJvbU1vZGVsKE1vZGVsQ29uc3RyLCBcIkdFVFwiLCBwYXRoKSxcbiAgICAgICAgICAgIEFwaU9wZXJhdGlvbih7IHN1bW1hcnk6IGBSZXRyaWV2ZSAke21vZGVsQ2xhenpOYW1lfSByZWNvcmRzLmAgfSksXG4gICAgICAgICAgICBBcGlPa1Jlc3BvbnNlKHsgZGVzY3JpcHRpb246IGAke21vZGVsQ2xhenpOYW1lfSByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5LmAgfSksXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IHNlZ21lbnRzID0gcGF0aC5zcGxpdChcIi9cIikuZmlsdGVyKChzKSA9PiBzLnN0YXJ0c1dpdGgoXCI6XCIpKTtcbiAgICAgICAgc2VnbWVudHMuZm9yRWFjaCgoc2VnKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gc2VnLnJlcGxhY2UoXCI6XCIsIFwiXCIpO1xuICAgICAgICAgICAgYmFzZS5wdXNoKEFwaVBhcmFtKHsgbmFtZSwgZGVzY3JpcHRpb246IGBUaGUgJHtuYW1lfSBwYXJhbWV0ZXJgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoXCJsaXN0QnkvXCIpIHx8XG4gICAgICAgICAgICBwYXRoLnN0YXJ0c1dpdGgoXCJwYWdpbmF0ZUJ5L1wiKSB8fFxuICAgICAgICAgICAgcGF0aC5zdGFydHNXaXRoKFwiZmluZC9cIikgfHxcbiAgICAgICAgICAgIHBhdGguc3RhcnRzV2l0aChcInBhZ2UvXCIpKSB7XG4gICAgICAgICAgICBiYXNlLnB1c2goQXBpUXVlcnkoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZGlyZWN0aW9uXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgZW51bTogT3JkZXJEaXJlY3Rpb24sXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IFwidGhlIHNvcnQgb3JkZXJcIixcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKFwicGFnaW5hdGVCeS9cIikgfHwgcGF0aC5zdGFydHNXaXRoKFwicGFnZS9cIikpIHtcbiAgICAgICAgICAgIGJhc2UucHVzaChBcGlRdWVyeSh7IG5hbWU6IFwibGltaXRcIiwgcmVxdWlyZWQ6IGZhbHNlLCBkZXNjcmlwdGlvbjogXCJwYWdlIHNpemVcIiB9KSwgQXBpUXVlcnkoeyBuYW1lOiBcIm9mZnNldFwiLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcInBhZ2UgbnVtYmVyXCIgfSksIEFwaVF1ZXJ5KHsgbmFtZTogXCJib29rbWFya1wiLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcImJvb2ttYXJrIGZvciBjdXJzb3IgcGFnaW5hdGlvblwiIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKFwiZmluZE9uZUJ5L1wiKSB8fCBwYXRoLnN0YXJ0c1dpdGgoXCJmaW5kQnkvXCIpKSB7XG4gICAgICAgICAgICBiYXNlLnB1c2goQXBpTm90Rm91bmRSZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBObyAke21vZGVsQ2xhenpOYW1lfSByZWNvcmQgbWF0Y2hlcyB0aGUgcHJvdmlkZWQgaWRlbnRpZmllci5gLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZW1lbnRLZXkgPT09IFByZXBhcmVkU3RhdGVtZW50S2V5cy5DT1VOVF9PRiB8fFxuICAgICAgICAgICAgc3RhdGVtZW50S2V5ID09PSBQcmVwYXJlZFN0YXRlbWVudEtleXMuQVZHX09GIHx8XG4gICAgICAgICAgICBzdGF0ZW1lbnRLZXkgPT09IFByZXBhcmVkU3RhdGVtZW50S2V5cy5TVU1fT0YpIHtcbiAgICAgICAgICAgIGJhc2UucHVzaChBcGlPa1Jlc3BvbnNlKHsgZGVzY3JpcHRpb246IGBSZXN1bHQgZm9yICR7bW9kZWxDbGF6ek5hbWV9LmAsIHR5cGU6IE51bWJlciB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlbWVudEtleSA9PT0gUHJlcGFyZWRTdGF0ZW1lbnRLZXlzLkRJU1RJTkNUX09GKSB7XG4gICAgICAgICAgICBiYXNlLnB1c2goQXBpT2tSZXNwb25zZSh7IGRlc2NyaXB0aW9uOiBgRGlzdGluY3QgdmFsdWVzIGZvciAke21vZGVsQ2xhenpOYW1lfS5gLCB0eXBlOiBbU3RyaW5nXSB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJhc2U7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRRdWVyeURlY29yYXRvcnMobWV0aG9kTmFtZSwgcm91dGVQYXRoLCBodHRwVmVyYiwgaW5jbHVkZVF1ZXJ5UGFyYW1zID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgZXh0cmFjdFBhdGhQYXJhbXMgPSAocCkgPT4gcC5zcGxpdChcIi9cIikuZmlsdGVyKChzKSA9PiBzLnN0YXJ0c1dpdGgoXCI6XCIpKS5tYXAoKHMpID0+IHMuc2xpY2UoMSkpO1xuICAgICAgICBjb25zdCBhcGlQYXRoUGFyYW1zID0gZXh0cmFjdFBhdGhQYXJhbXMocm91dGVQYXRoKS5tYXAoKG5hbWUpID0+ICh7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke25hbWV9IHBhcmFtZXRlciBmb3IgdGhlIHF1ZXJ5YCxcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICB9KSk7XG4gICAgICAgIGNvbnN0IGRlY29yYXRvcnMgPSBbXG4gICAgICAgICAgICAuLi5hcGlQYXRoUGFyYW1zLm1hcCgocCkgPT4gQXBpUGFyYW0ocCkpLFxuICAgICAgICAgICAgQXBpT3BlcmF0aW9uKHsgc3VtbWFyeTogYFJldHJpZXZlIHJlY29yZHMgdXNpbmcgXCIke21ldGhvZE5hbWV9XCIuYCB9KSxcbiAgICAgICAgICAgIEFwaU9rUmVzcG9uc2UoeyBkZXNjcmlwdGlvbjogXCJSZXN1bHQgc3VjY2Vzc2Z1bGx5IHJldHJpZXZlZC5cIiB9KSxcbiAgICAgICAgICAgIEFwaU5vQ29udGVudFJlc3BvbnNlKHsgZGVzY3JpcHRpb246IFwiTm8gY29udGVudCByZXR1cm5lZCBieSB0aGUgbWV0aG9kLlwiIH0pLFxuICAgICAgICBdO1xuICAgICAgICBpZiAoaHR0cFZlcmIgPT09IFwiR0VUXCIgJiYgaW5jbHVkZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgICBkZWNvcmF0b3JzLnB1c2goQXBpUXVlcnkoe1xuICAgICAgICAgICAgICAgIG5hbWU6IFwiZGlyZWN0aW9uXCIsXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGVudW06IE9yZGVyRGlyZWN0aW9uLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcInRoZSBzb3J0IG9yZGVyIHdoZW4gYXBwbGljYWJsZVwiLFxuICAgICAgICAgICAgfSksIEFwaVF1ZXJ5KHsgbmFtZTogXCJsaW1pdFwiLCByZXF1aXJlZDogZmFsc2UsIGRlc2NyaXB0aW9uOiBcImxpbWl0IG9yIHBhZ2Ugc2l6ZVwiIH0pLCBBcGlRdWVyeSh7IG5hbWU6IFwib2Zmc2V0XCIsIHJlcXVpcmVkOiBmYWxzZSwgZGVzY3JpcHRpb246IFwib2Zmc2V0IG9yIGJvb2ttYXJrXCIgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWNvcmF0b3JzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVJuSnZiVTF2WkdWc1EyOXVkSEp2Ykd4bGNpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDNOeVl5OWtaV05oWmkxdGIyUmxiQzlHY205dFRXOWtaV3hEYjI1MGNtOXNiR1Z5TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdPenM3T3pzN1FVRkJRU3hQUVVGUExFVkJRVVVzVlVGQlZTeEZRVUZGTEV0QlFVc3NSVUZCUlN4TFFVRkxMRVZCUVVVc1VVRkJVU3hGUVVGRkxFMUJRVTBzWjBKQlFXZENMRU5CUVVNN1FVRkRjRVVzVDBGQlR5eEZRVU5NTEhGQ1FVRnhRaXhGUVVOeVFpeFBRVUZQTEVWQlExQXNhMEpCUVd0Q0xFVkJRMnhDTEdOQlFXTXNSVUZEWkN4dlFrRkJiMElzUlVGRGNFSXNiVUpCUVcxQ0xFVkJRMjVDTEdGQlFXRXNSVUZEWWl4WlFVRlpMRVZCUTFvc1VVRkJVU3hGUVVOU0xGRkJRVkVzUlVGRFVpeFBRVUZQTEVWQlExQXNPRUpCUVRoQ0xFVkJRemxDTEdGQlFXRXNSMEZEWkN4TlFVRk5MR2xDUVVGcFFpeERRVUZETzBGQlEzcENMRTlCUVU4c1JVRkZUQ3haUVVGWkxFVkJRMW9zWTBGQll5eEZRVU5rTEdWQlFXVXNSVUZEWml4eFFrRkJjVUlzUlVGRmNrSXNWVUZCVlN4RlFVTldMRTlCUVU4c1IwRkRVaXhOUVVGTkxHZENRVUZuUWl4RFFVRkRPMEZCUTNoQ0xFOUJRVThzUlVGQlJTeExRVUZMTEVWQlFXOUNMRTFCUVUwc1owTkJRV2RETEVOQlFVTTdRVUZEZWtVc1QwRkJUeXhGUVVGRkxFOUJRVThzUlVGQlJTeFhRVUZYTEVWQlFVVXNUVUZCVFN4dFFrRkJiVUlzUTBGQlF6dEJRVU42UkN4UFFVRlBMRVZCUTB3c2NVSkJRWEZDTEVWQlEzSkNMRTFCUVUwc1JVRkRUaXhoUVVGaExFVkJRMklzWlVGQlpTeEhRVU5vUWl4TlFVRk5MSGxDUVVGNVFpeERRVUZETzBGQlEycERMRTlCUVU4c1JVRkJaU3hSUVVGUkxFVkJRVVVzVFVGQlRTeHpRa0ZCYzBJc1EwRkJRenRCUVVNM1JDeFBRVUZQTEVWQlEwd3NjVUpCUVhGQ0xFVkJRM0pDTEd0Q1FVRnJRaXhGUVVWc1FpeFRRVUZUTEVWQlExUXNWMEZCVnl4RlFVTllMRlZCUVZVc1IwRkRXQ3c0UWtGQmNVSTdRVUZEZEVJc1QwRkJUeXhGUVVGRkxHMUNRVUZ0UWl4RlFVRkZMRGhDUVVFeVFqdEJRVVY2UkN4UFFVRlBMRVZCUVVVc2JVSkJRVzFDTEVWQlFVVXNPRUpCUVcxQ08wRkJRMnBFTEU5QlFVOHNSVUZCUlN4MVFrRkJkVUlzUlVGQlJTeFhRVUZYTEVWQlFVVXNNRUpCUVhGQ08wRkJRM0JGTEU5QlFVOHNSVUZCUlN4SlFVRkpMRVZCUVVVc2JVTkJRV2RETzBGQlJTOURMRTlCUVU4c1JVRkJSU3h2UWtGQmIwSXNSVUZCUlN3MFFrRkJkVUk3UVVGRGRFUXNUMEZCVHl4RlFVRkZMRTFCUVUwc1JVRkJSU3d5UTBGQmMwTTdRVUZEZGtRc2FVTkJRWE5DTzBGQlEzUkNMRTlCUVU4c1JVRkRUQ3h6UWtGQmMwSXNSMEZIZGtJc1RVRkJUU3d5UWtGQk1rSXNRMEZCUXp0QlFVVnVReXhOUVVGTkxFOUJRVThzYlVKQlFXMUNPMkZCUTA0c1VVRkJSeXhIUVVGSExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdTVUZGY0VVc1RVRkJUU3hEUVVGRExHTkJRV01zUTBGRGJrSXNWVUZCSzBJN1VVRkZMMElzU1VGQlNTeERRVUZETzFsQlEwZ3NUMEZCVHl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGclFpeFZRVUZWTEVOQlFVTXNRMEZCUXp0UlFVTnNSQ3hEUVVGRE8xRkJRVU1zVDBGQlR5eERRVUZWTEVWQlFVVXNRMEZCUXp0WlFVTndRaXhKUVVGSkxFTkJRVU03WjBKQlEwZ3NUMEZCVHl4WlFVRlpMRU5CUVVNc1ZVRkJWU3hEUVVGRExGVkJRVlVzUTBGQmIwSXNRMEZCUXp0WlFVTm9SU3hEUVVGRE8xbEJRVU1zVDBGQlR5eEZRVUZYTEVWQlFVVXNRMEZCUXp0blFrRkRja0lzVDBGQlR5eFZRVUZWTEVOQlFVTXNVVUZCVVN4RFFVRkRMRlZCUVZVc1EwRkJXU3hEUVVGRE8xbEJRM0JFTEVOQlFVTTdVVUZEU0N4RFFVRkRPMGxCUTBnc1EwRkJRenRKUVVWRUxFMUJRVTBzUTBGQlF5d3JRa0ZCSzBJc1EwRkRjRU1zVjBGQmMwTXNSVUZEZEVNc1UwRkJhVUlzWlVGQlpTeERRVUZETEV0QlFVczdVVUZGZEVNc1RVRkJUU3hKUVVGSkxFZEJRMUlzVjBGQlZ5eFpRVUZaTEZsQlFWa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNWMEZCVnl4RFFVRkRPMUZCUTNaRkxFMUJRVTBzVjBGQlZ5eEhRVUZuUWl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRE8xRkJRelZETEUxQlFVMHNXVUZCV1N4SFFVTm9RaXhSUVVGUkxFTkJRVU1zUjBGQlJ5eERRVU5XTEVsQlFVa3NRMEZCUXl4WFFVRXdRaXhGUVVNdlFpeFJRVUZSTEVOQlFVTXNSMEZCUnl4RFFVRkRMR1ZCUVdVc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGRGNFTXNTVUZCU1N4RlFVRkZMRU5CUVVNN1VVRkZWaXhOUVVGTkxGbEJRVmtzUjBGRGFFSXNVVUZCVVN4RFFVRkRMRWRCUVVjc1EwRkRWaXhYUVVGWExFTkJRVU1zVjBGQk1FSXNSVUZEZEVNc1VVRkJVU3hEUVVGRExFZEJRVWNzUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZETVVJc1NVRkJTU3hGUVVGRkxFTkJRVU03VVVGRlZpeE5RVUZOTEdWQlFXZENMRk5CUVZFc2IwSkJRWFZDTzFsQlEyNUVMRWxCUVdFc1MwRkJTenRuUWtGRGFFSXNUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXg1UWtGQmVVSXNRMEZCUXl4RFFVRkRPMWxCUXpkRExFTkJRVU03V1VGRFJDeFpRVUZaTEdGQlFXdERMRVZCUVVVc1NVRkJXVHRuUWtGRE1VUXNTMEZCU3l4RFFVRkRMR0ZCUVdFc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVU0zUWl4RFFVRkRPMU5CUTBZN1VVRkZSQ3hMUVVGTExFMUJRVTBzUTBGQlF5eFZRVUZWTEVWQlFVVXNUVUZCVFN4RFFVRkRMRWxCUVVrc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eFpRVUZaTEVOQlFVTXNSVUZCUlN4RFFVRkRPMWxCUTJoRkxFMUJRVTBzVTBGQlV5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zV1VGQldTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPMmxDUVVOMFJDeE5RVUZOTEVOQlFVTXNRMEZCUXl4UFFVRmxMRVZCUVVVc1JVRkJSU3hEUVVGRExFOUJRVThzU1VGQlNTeFBRVUZQTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNN2FVSkJRM1JFTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVWaUxFMUJRVTBzVDBGQlR5eEhRVUZITEcxQ1FVRnRRaXhEUVVGRExIbENRVUY1UWl4RFFVTXpSQ3hWUVVGVkxFTkJRMG9zUTBGQlF6dFpRVU5VTEcxQ1FVRnRRaXhEUVVGRExGbEJRVmtzUTBGRE9VSXNaVUZCWlN4RlFVTm1MRlZCUVZVc1JVRkRWaXhQUVVGUExFTkJRMUlzUTBGQlF6dFpRVVZHTEUxQlFVMHNZVUZCWVN4SFFVRkhMRzFDUVVGdFFpeERRVUZETEUxQlFVMHNRMEZCUXl4VlFVRjFRaXhEUVVGRExFTkJRVU1zVTBGQlV5eEpRVUZKTEZOQlFWTXNRMEZCUXl4RFFVRkRPMWxCUTJ4SExFMUJRVTBzVlVGQlZTeEhRVUZITEcxQ1FVRnRRaXhEUVVGRExHdENRVUZyUWl4RFFVTjJSQ3hWUVVGVkxFVkJRMVlzVTBGQlV5eEZRVU5VTEUxQlFVMHNRMEZCUXl4VlFVRlZMRU5CUTJ4Q0xFTkJRVU03V1VGRFJpeHRRa0ZCYlVJc1EwRkJReXhsUVVGbExFTkJRMnBETEdWQlFXVXNSVUZEWml4VlFVRlZMRVZCUTFZc1EwRkJReXhoUVVGaExFVkJRVVVzUjBGQlJ5eFZRVUZWTEVOQlFVTXNRMEZETDBJc1EwRkJRenRSUVVOS0xFTkJRVU03VVVGRlJDeExRVUZMTEUxQlFVMHNRMEZCUXl4VlFVRlZMRVZCUVVVc1UwRkJVeXhEUVVGRExFbEJRVWtzVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1JVRkJSU3hEUVVGRE8xbEJRMjVGTEUxQlFVMHNUVUZCVFN4SFFVRkhMRk5CUVZNc1EwRkJReXhOUVVGTkxFbEJRVWtzUlVGQlJTeERRVUZETzFsQlEzUkRMRTFCUVUwc1UwRkJVeXhIUVVGSExFTkJRVU1zVFVGQlRTeEZRVUZGTEZWQlFWVXNSVUZCUlN4SFFVRkhMRTFCUVUwc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dHBRa0ZEYkVVc1RVRkJUU3hEUVVGRExFTkJRVU1zVDBGQlR5eEZRVUZGTEVWQlFVVXNRMEZCUXl4UFFVRlBMRWxCUVVrc1QwRkJUeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzJsQ1FVTTVReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZGWWl4TlFVRk5MRTlCUVU4c1IwRkJSeXh0UWtGQmJVSXNRMEZCUXl4NVFrRkJlVUlzUTBGRE0wUXNWVUZCVlN4RFFVTktMRU5CUVVNN1dVRkRWQ3h0UWtGQmJVSXNRMEZCUXl4WlFVRlpMRU5CUXpsQ0xHVkJRV1VzUlVGRFppeFZRVUZWTEVWQlExWXNUMEZCVHl4RFFVTlNMRU5CUVVNN1dVRkZSaXhOUVVGTkxHRkJRV0VzUjBGQlJ5eHRRa0ZCYlVJc1EwRkJReXhMUVVGclFpeERRVUZETEVOQlFVTXNVMEZCVXl4SlFVRkpMRk5CUVZNc1EwRkJReXhEUVVGRE8xbEJRM1JHTEUxQlFVMHNWVUZCVlN4SFFVRkhMRzFDUVVGdFFpeERRVUZETEd0Q1FVRnJRaXhEUVVOMlJDeFZRVUZWTEVWQlExWXNVMEZCVXl4RlFVTlVMRXRCUVVzc1JVRkRUQ3hKUVVGSkxFTkJRMHdzUTBGQlF6dFpRVU5HTEcxQ1FVRnRRaXhEUVVGRExHVkJRV1VzUTBGRGFrTXNaVUZCWlN4RlFVTm1MRlZCUVZVc1JVRkRWaXhEUVVGRExHRkJRV0VzUlVGQlJTeEhRVUZITEZWQlFWVXNRMEZCUXl4RFFVTXZRaXhEUVVGRE8xRkJRMG9zUTBGQlF6dFJRVVZFTEU5QlFVOHNaVUZCWlN4RFFVRkRPMGxCUTNwQ0xFTkJRVU03U1VGRlRTeEJRVUZRTEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUTFnc1YwRkJaME1zUlVGRGFFTXNjVUpCUVc5Rk8xRkJSWEJGTEUxQlFVMHNSMEZCUnl4SFFVRkhMRzFDUVVGdFFpeERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc2JVSkJRVzFDTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRjRVVzVFVGQlRTeFRRVUZUTEVkQlFVY3NTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF6dFJRVU12UXl4TlFVRk5MRk5CUVZNc1IwRkJSeXhYUVVGWExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTTdVVUZEZWtNc1RVRkJUU3hqUVVGakxFZEJRVWNzVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXp0UlFVTjRReXhOUVVGTkxGZEJRVmNzUjBGQlJ5eHRRa0ZCYlVJc1EwRkJReXhqUVVGakxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdVVUZGY0VVc01FVkJRVEJGTzFGQlF6RkZMRFpGUVVFMlJUdFJRVU0zUlN4NVJVRkJlVVU3VVVGRGVrVXNUVUZCVFN4clFrRkJhMElzUjBGRGRFSXNWMEZCVnl4WlFVRlpMRmxCUVZrc1EwRkJReXhEUVVGRExFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1YwRkJWeXhEUVVGRE8xRkJSWFpGTEUxQlFVMHNaVUZCWlN4SFFVRkhMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRMnhETEZkQlFWY3NSVUZEV0N4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExIVkNRVUYxUWl4RFFVRkRMRU5CUTAwc1EwRkJRenRSUVVNNVF5eE5RVUZOTEdOQlFXTXNSMEZCUnl4eFFrRkJjVUlzUlVGQlJTeERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVOcVJTeE5RVUZOTEZsQlFWa3NSMEZCYVVNN1dVRkRha1FzUjBGQlJ5eERRVUZETEdWQlFXVXNTVUZCU1N4RlFVRkZMRU5CUVVNN1dVRkRNVUlzUjBGQlJ5eERRVUZETEdOQlFXTXNTVUZCU1N4RlFVRkZMRU5CUVVNN1UwRkRNVUlzUTBGQlF6dFJRVVZHTEUxQlFVMHNhVUpCUVdsQ0xFZEJRVWNzYzBKQlFYTkNMRU5CUVVNc1RVRkJUU3hEUVVOeVJDeFhRVUZYTEVWQlExZ3NhMEpCUVd0Q0xFVkJRMnhDTEZsQlFWa3NRMEZEWWl4RFFVRkRPMUZCUTBZc1RVRkJUU3hoUVVGaExFZEJRVWtzYVVKQlFYbENMRU5CUVVNc1ZVRkZjRU1zUTBGQlF6dFJRVVZrTEUxQlFVMHNSVUZCUlN4TFFVRkxMRVZCUVVVc1lVRkJZU3hGUVVGRkxFbEJRVWtzUlVGQlJTeE5RVUZOTEVWQlFVVXNSMEZETVVNc2JVSkJRVzFDTEVOQlFVTXNNa0pCUVRKQ0xFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTTdVVUZGTDBRc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGRFVDeHJRMEZCYTBNc1kwRkJZeXhUUVVGVExHRkJRV0VzUlVGQlJTeE5RVUZOTEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUTBGRGNrY3NRMEZCUXp0UlFVVkdMRWxCU1Uwc2MwSkJRWE5DTERoQ1FVbzFRaXhOUVVsTkxITkNRVUYxUWl4VFFVRlJMRzlDUVVGMVFqdFpRVWRvUkN4TlFVRk5MRXRCUVVzc1MwRkJTenRuUWtGRGVFSXNUMEZCVHl4WFFVRlhMRU5CUVVNN1dVRkRja0lzUTBGQlF6dFpRVVZFTEVsQlFXRXNTMEZCU3p0blFrRkRhRUlzVDBGQlR5eFhRVUZYTEVOQlFVTTdXVUZEY2tJc1EwRkJRenRaUVVWRUxGbEJRVmtzWVVGQmEwTTdaMEpCUXpWRExFdEJRVXNzUTBGQlF5eGhRVUZoTEVWQlFVVXNkMEpCUVhOQ0xFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdaMEpCV0c1RExFOUJRVVVzUjBGQlZ5eExRVUZMTEVOQlFVTXNSVUZCUlN4RFFVRkRMRmRCUVZjc1EwRkJWeXhEUVVGRE8yZENRVmsxUkN4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVOT0xEWkRRVUUyUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzV1VGQldTeFRRVUZUTEVWQlFVVXNRMEZEY0VZc1EwRkJRenRaUVVOS0xFTkJRVU03VTBGRFJpeERRVUZCTzFGQmFrSkxMSE5DUVVGelFqdFpRVW96UWl4VlFVRlZMRU5CUVVNc1UwRkJVeXhEUVVGRE8xbEJRM0pDTEU5QlFVOHNRMEZCUXl4alFVRmpMRU5CUVVNN1dVRkRka0lzWTBGQll5eERRVUZETEZkQlFWY3NRMEZCUXp0WlFVTXpRaXhKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZET3paRFFWbFhMRzFDUVVGdFFqdFhRVmd4UXl4elFrRkJjMElzUTBGcFFqTkNPMUZCUlVRc1NVRkJTU3hoUVVGaExFVkJRVVVzUTBGQlF6dFpRVU5zUWl4TlFVRk5MRmxCUVZrc1IwRkJSeXhEUVVGRExFZEJRVWNzWVVGQllTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzJkQ1FVTndSQ3hOUVVGTkxGTkJRVk1zUjBGQlJ5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1owSkJRM0JFTEUxQlFVMHNVMEZCVXl4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dG5Ra0ZEY0VRc1RVRkJUU3hYUVVGWExFZEJRVWNzVTBGQlV5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEZWQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF6dG5Ra0ZEZEVVc1RVRkJUU3hYUVVGWExFZEJRVWNzVTBGQlV5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEZWQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF6dG5Ra0ZEZEVVc1RVRkJUU3hoUVVGaExFZEJRVWNzVTBGQlV5eERRVUZETEUxQlFVMHNSMEZCUnl4WFFVRlhMRU5CUVVNN1owSkJRM0pFTEUxQlFVMHNZVUZCWVN4SFFVRkhMRk5CUVZNc1EwRkJReXhOUVVGTkxFZEJRVWNzVjBGQlZ5eERRVUZETzJkQ1FVTnlSQ3hKUVVGSkxHRkJRV0VzUzBGQlN5eGhRVUZoTzI5Q1FVTnFReXhQUVVGUExHRkJRV0VzUjBGQlJ5eGhRVUZoTEVOQlFVTTdaMEpCUTNaRExFbEJRVWtzVjBGQlZ5eExRVUZMTEZkQlFWYzdiMEpCUXpkQ0xFOUJRVThzVjBGQlZ5eEhRVUZITEZkQlFWY3NRMEZCUXp0blFrRkRia01zVDBGQlR5eERRVUZETEVOQlFVTTdXVUZEV0N4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOSUxFdEJRVXNzVFVGQlRTeExRVUZMTEVsQlFVa3NXVUZCV1N4RlFVRkZMRU5CUVVNN1owSkJRMnBETEUxQlFVMHNXVUZCV1N4SFFVRkhMRzFDUVVGdFFpeERRVUZETEZWQlFWVXNRMEZEYWtRc1MwRkJTeXhGUVVOTUxFMUJRVTBzUlVGRFRpeGhRVUZoTEVWQlEySXNTMEZCU3l4RlFVTk1MRmRCUVZjc1JVRkRXQ3hqUVVGakxFVkJRMlFzYTBKQlFXdENMRU5CUTI1Q0xFTkJRVU03WjBKQlEwWXNTVUZCU1N4RFFVRkRMRmxCUVZrN2IwSkJRVVVzVTBGQlV6dG5Ra0ZGTlVJc1RVRkJUU3hGUVVGRkxGVkJRVlVzUlVGQlJTeFBRVUZQTEVWQlFVVXNWVUZCVlN4RlFVRkZMR1ZCUVdVc1JVRkJSU3hIUVVONFJDeFpRVUZaTEVOQlFVTTdaMEpCUldZc1RVRkJUU3hWUVVGVkxFZEJRVWNzYlVKQlFXMUNMRU5CUVVNc1dVRkJXU3hEUVVOcVJDeHpRa0ZCYzBJc1JVRkRkRUlzVlVGQlZTeEZRVU5XTEU5QlFVOHNRMEZEVWl4RFFVRkRPMmRDUVVWR0xFbEJRVWtzVlVGQlZTeEZRVUZGTEVOQlFVTTdiMEpCUTJZc1RVRkJUU3hoUVVGaExFZEJRVWNzYlVKQlFXMUNMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVzFDTEVOQlFVTXNRMEZEYkVVc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RlFVRkZMRVZCUVVVc1EwRkJReXhKUVVGSkxGTkJRVk1zUTBGRGJFUXNRMEZCUXp0dlFrRkRSaXh0UWtGQmJVSXNRMEZCUXl4bFFVRmxMRU5CUTJwRExITkNRVUZ6UWl4RlFVTjBRaXhWUVVGVkxFVkJRMVlzUTBGQlF5eGhRVUZoTEVWQlFVVXNSMEZCUnl4VlFVRlZMRU5CUVVNc1JVRkRPVUlzWlVGQlpTeERRVU5vUWl4RFFVRkRPMmRDUVVOS0xFTkJRVU03V1VGRFNDeERRVUZETzFGQlEwZ3NRMEZCUXp0UlFVVkVMRTlCUVU4c2MwSkJRVFpDTEVOQlFVTTdTVUZEZGtNc1EwRkJRenRKUVVWRUxFMUJRVTBzUTBGQlF5d3lRa0ZCTWtJc1EwRkRhRU1zVlVGQkswSTdVVUZQTDBJc1RVRkJUU3hGUVVGRkxFZEJRVWNzUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXl4VlFVRlZMRU5CUVhGQ0xFTkJRVU03VVVGRGNFUXNUVUZCVFN4UlFVRlJMRWRCUVVjc1VVRkJVU3hEUVVGRExFZEJRVWNzUTBGRE0wSXNWVUZCVlN4RlFVTldMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEZGQlFWRXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkRiRU1zUTBGQlF6dFJRVU5HTEUxQlFVMHNXVUZCV1N4SFFVRkhMRkZCUVZFc1JVRkJSU3hKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETzFGQlJURkRMRTFCUVUwc1ZVRkJWU3hIUVVOa0xFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1dVRkJXU3hEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETzFsQlEzQkVMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhaUVVGWkxFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEzaERMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJXaERMRTFCUVUwc1YwRkJWeXhIUVVGSExGRkJRVkVzUTBGQlF5eFhRVUZYTEVOQlFVTXNWVUZCVlN4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8xRkJRek5FTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1ZVRkJWU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRPMUZCUTNwRExFMUJRVTBzWVVGQllTeEhRVUYxUWl4VlFVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVVTdXVUZETDBRc1QwRkJUenRuUWtGRFRDeEpRVUZKTEVWQlFVVXNSMEZCUnp0blFrRkRWQ3hYUVVGWExFVkJRVVVzVVVGQlVTeERRVUZETEZkQlFWY3NRMEZCUXl4VlFVRlZMRVZCUVVVc1IwRkJSeXhEUVVGRE8yZENRVU5zUkN4UlFVRlJMRVZCUVVVc1NVRkJTVHRuUWtGRFpDeEpRVUZKTEVWQlFVVXNUVUZCVFR0aFFVTmlMRU5CUVVNN1VVRkRTaXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVVZJTEU5QlFVODdXVUZEVEN4SlFVRkpPMWxCUTBvc1YwRkJWenRaUVVOWUxHRkJRV0U3V1VGRFlpeExRVUZMTEVWQlFVVXNRMEZCUXl4SFFVRkhMRTFCUVRoQ0xFVkJRVVVzUlVGQlJTeERRVU16UXl4UlFVRlJMRVZCUVVVc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU03VTBGRE1VVXNRMEZCUXp0SlFVTktMRU5CUVVNN1NVRkZUeXhOUVVGTkxFTkJRVU1zV1VGQldTeERRVU42UWl4TlFVRlhMRVZCUTFnc1ZVRkJhMElzUlVGRGJFSXNUMEZCWjBNN1VVRkZhRU1zVFVGQlRTeERRVUZETEdOQlFXTXNRMEZEYmtJc1RVRkJUU3hEUVVGRExGTkJRVk1zU1VGQlNTeE5RVUZOTEVWQlF6RkNMRlZCUVZVc1JVRkRWanRaUVVORkxFdEJRVXNzUlVGQlJTeFBRVUZQTzFsQlEyUXNVVUZCVVN4RlFVRkZMRXRCUVVzN1dVRkRaaXhaUVVGWkxFVkJRVVVzU1VGQlNUdFpRVU5zUWl4VlFVRlZMRVZCUVVVc1MwRkJTenRUUVVOc1FpeERRVU5HTEVOQlFVTTdVVUZGUml4UFFVRlBMRTFCUVUwc1EwRkJReXgzUWtGQmQwSXNRMEZEY0VNc1RVRkJUU3hEUVVGRExGTkJRVk1zU1VGQlNTeE5RVUZOTEVWQlF6RkNMRlZCUVZVc1EwRkRXQ3hEUVVGRE8wbEJRMG9zUTBGQlF6dEpRVVZQTEUxQlFVMHNRMEZCUXl4bFFVRmxMRU5CUXpWQ0xFMUJRVmNzUlVGRFdDeFZRVUZyUWl4RlFVTnNRaXhuUWtGQmMwVXNSVUZEZEVVc2EwSkJRVEpGTEVWQlFVVTdVVUZGTjBVc1RVRkJUU3hMUVVGTExFZEJRVWNzVFVGQlRTeEZRVUZGTEZOQlFWTXNTVUZCU1N4TlFVRk5MRU5CUVVNN1VVRkRNVU1zVFVGQlRTeFZRVUZWTEVkQlFVY3NUVUZCVFN4RFFVRkRMSGRDUVVGM1FpeERRVUZETEV0QlFVc3NSVUZCUlN4VlFVRlZMRU5CUVVNc1EwRkJRenRSUVVOMFJTeG5Ra0ZCWjBJc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFVkJRVVVzVlVGQlZTeEZRVUZGTEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRiRVVzWlVGQlpTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRVZCUVVVc1UwRkJVeXhGUVVGRkxFdEJRVXNzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZETDBNc1UwRkJVeXhEUVVGRExFdEJRVXNzUlVGQlJTeFZRVUZWTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUTNCRExFTkJRVU03U1VGRFNpeERRVUZETzBsQlJVOHNUVUZCVFN4RFFVRkRMRlZCUVZVc1EwRkRka0lzUzBGQmEwSXNSVUZEYkVJc1RVRkJZeXhGUVVOa0xHRkJRV2xETEVWQlEycERMRXRCUVN0RExFVkJReTlETEZkQlFXdERMRVZCUTJ4RExHTkJRWE5DTEVWQlEzUkNMRmRCUVdsQ08xRkJUMnBDTEUxQlFVMHNSVUZCUlN4TlFVRk5MRVZCUVVVc1NVRkJTU3hGUVVGRkxFZEJRVWNzUzBGQlN5eERRVUZETzFGQlF5OUNMRTFCUVUwc1kwRkJZeXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNXVUZCV1N4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJSWFJFTEVsQlFVa3NUVUZCVFN4TFFVRkxMRTFCUVUwc1NVRkJTU3hqUVVGakxFdEJRVXNzUlVGQlJTeEZRVUZGTEVOQlFVTTdXVUZETDBNc1QwRkJUeXh0UWtGQmJVSXNRMEZCUXl4clFrRkJhMElzUTBGRE0wTXNVVUZCVVN4RlFVTlNMRzFDUVVGdFFpeERRVUZETEcxQ1FVRnRRaXhEUVVGRExGZEJRVmNzUlVGQlJTeGpRVUZqTEVOQlFVTXNSVUZEY0VVc2JVSkJRVzFDTEVOQlFVTXNjMEpCUVhOQ0xFTkJRVU1zVjBGQlZ5eEZRVUZGTEdOQlFXTXNRMEZCUXl4RlFVTjJSU3hEUVVGRExFVkJRVVVzVTBGQlV5eEZRVUZGTEZOQlFWTXNSVUZCVXl4RlFVRkZMRXRCUVVzc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZGTEZOQlFWTXNSVUZCUlN4UlFVRlJMRU5CUVVNc1JVRkJSU3hYUVVGWExFVkJRVVVzU1VGQlNTeEZRVUZGTEVOQlFWRXNSVUZCUlN4TFFVRkxMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGREwwY3NRMEZCUXp0UlFVTktMRU5CUVVNN1VVRkZSQ3hKUVVGSkxFMUJRVTBzUzBGQlN5eE5RVUZOTEVsQlFVa3NZMEZCWXl4TFFVRkxMRTFCUVUwc1JVRkJSU3hEUVVGRE8xbEJRMjVFTEU5QlFVOHNiVUpCUVcxQ0xFTkJRVU1zYTBKQlFXdENMRU5CUXpORExGZEJRVmNzUlVGRFdDeHRRa0ZCYlVJc1EwRkJReXgxUWtGQmRVSXNRMEZCUXl4WFFVRlhMRVZCUVVVc1kwRkJZeXhEUVVGRExFVkJRM2hGTEcxQ1FVRnRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRmRCUVZjc1JVRkJSU3hqUVVGakxFTkJRVU1zUlVGRGNrVXNRMEZCUXl4RlFVRkZMRk5CUVZNc1JVRkJSU3hUUVVGVExFVkJRVk1zUlVGQlJTeExRVUZMTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hUUVVGVExFVkJRVVVzVVVGQlVTeERRVUZETEVWQlFVVXNWMEZCVnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hEUVVGUkxFVkJRVVVzUzBGQlN5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUXk5SExFTkJRVU03VVVGRFNpeERRVUZETzFGQlJVUXNTVUZCU1N4TlFVRk5MRXRCUVVzc1MwRkJTeXhKUVVGSkxHTkJRV01zUzBGQlN5eE5RVUZOTEVWQlFVVXNRMEZCUXp0WlFVTnNSQ3hQUVVGUExHMUNRVUZ0UWl4RFFVRkRMR3RDUVVGclFpeERRVU16UXl4VFFVRlRMRVZCUTFRc2JVSkJRVzFDTEVOQlFVTXNjVUpCUVhGQ0xFTkJRVU1zWTBGQll5eERRVUZETEVWQlEzcEVMRzFDUVVGdFFpeERRVUZETEd0Q1FVRnJRaXhEUVVGRExGZEJRVmNzUlVGQlJTeGpRVUZqTEVOQlFVTXNSVUZEYmtVc1EwRkJReXhGUVVGRkxGTkJRVk1zUlVGQlJTeExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRlJMRVZCUVVVc1MwRkJTeXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlF5OURMRU5CUVVNN1VVRkRTaXhEUVVGRE8xRkJSVVFzU1VGQlNTeE5RVUZOTEV0QlFVc3NTMEZCU3l4SlFVRkpMR05CUVdNc1MwRkJTeXhOUVVGTkxFVkJRVVVzUTBGQlF6dFpRVU5zUkN4UFFVRlBMRzFDUVVGdFFpeERRVUZETEd0Q1FVRnJRaXhEUVVNelF5eFhRVUZYTEVWQlExZ3NiVUpCUVcxQ0xFTkJRVU1zZFVKQlFYVkNMRU5CUVVNc1kwRkJZeXhEUVVGRExFVkJRek5FTEcxQ1FVRnRRaXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRMRmRCUVZjc1JVRkJSU3hqUVVGakxFVkJRVVVzWVVGQllTeERRVUZETEVWQlEzQkdMRU5CUVVNc1JVRkJSU3hUUVVGVExFVkJRVVVzVTBGQlV5eEZRVUZUTEVWQlFVVXNTMEZCU3l4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVVzVTBGQlV5eEZRVUZGTEZGQlFWRXNRMEZCUXl4RlFVRkZMRmRCUVZjc1JVRkJSU3hKUVVGSkxFVkJRVVVzUTBGQlVTeEZRVUZGTEV0QlFVc3NSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVNdlJ5eERRVUZETzFGQlEwb3NRMEZCUXp0UlFVVkVMRWxCUVVrc1RVRkJUU3hMUVVGTExGRkJRVkVzU1VGQlNTeGpRVUZqTEV0QlFVc3NUVUZCVFN4RlFVRkZMRU5CUVVNN1dVRkRja1FzVDBGQlR5eHRRa0ZCYlVJc1EwRkJReXhyUWtGQmEwSXNRMEZETTBNc1YwRkJWeXhGUVVOWUxHMUNRVUZ0UWl4RFFVRkRMSFZDUVVGMVFpeERRVUZETEdOQlFXTXNRMEZCUXl4RlFVTXpSQ3h0UWtGQmJVSXNRMEZCUXl4dlFrRkJiMElzUTBGQlF5eFhRVUZYTEVWQlFVVXNZMEZCWXl4RlFVRkZMR0ZCUVdFc1EwRkJReXhGUVVOd1JpeERRVUZETEVWQlFVVXNVMEZCVXl4RlFVRkZMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVkVzUlVGQlJTeExRVUZMTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hUUVVGVExFVkJRVVVzVVVGQlVTeERRVUZETEVWQlFVVXNWMEZCVnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hEUVVGUkxFVkJRVVVzUzBGQlN5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUTJoSUxFTkJRVU03VVVGRFNpeERRVUZETzFGQlJVUXNTVUZCU1N4TlFVRk5MRXRCUVVzc1MwRkJTeXhKUVVGSkxHTkJRV01zUzBGQlN5eE5RVUZOTEVWQlFVVXNRMEZCUXp0WlFVTnNSQ3hQUVVGUExHMUNRVUZ0UWl4RFFVRkRMR3RDUVVGclFpeERRVU16UXl4TlFVRk5MRVZCUTA0c2JVSkJRVzFDTEVOQlFVTXNhVUpCUVdsQ0xFTkJRVU1zUzBGQlN5eEZRVUZGTEdOQlFXTXNRMEZCUXl4RlFVTTFSQ3h0UWtGQmJVSXNRMEZCUXl4alFVRmpMRU5CUVVNc1YwRkJWeXhGUVVGRkxHTkJRV01zUlVGQlJTeGhRVUZoTEVWQlFVVXNUVUZCVFN4RFFVRkRMRVZCUTNSR0xFTkJRVU1zUlVGQlJTeFRRVUZUTEVWQlFVVXNWMEZCVnl4RFFVRkRMR0ZCUVdFc1EwRkJVU3hGUVVGRkxFdEJRVXNzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVTTNSQ3hEUVVGRE8xRkJRMG9zUTBGQlF6dFJRVVZFTEVsQlFVa3NUVUZCVFN4TFFVRkxMRXRCUVVzc1NVRkJTU3hqUVVGakxFdEJRVXNzVFVGQlRTeEZRVUZGTEVOQlFVTTdXVUZEYkVRc1QwRkJUeXh0UWtGQmJVSXNRMEZCUXl4clFrRkJhMElzUTBGRE0wTXNVVUZCVVN4RlFVTlNMRzFDUVVGdFFpeERRVUZETEcxQ1FVRnRRaXhEUVVGRExFdEJRVXNzUlVGQlJTeFhRVUZYTEVWQlFVVXNZMEZCWXl4RFFVRkRMRVZCUXpORkxHMUNRVUZ0UWl4RFFVRkRMR2RDUVVGblFpeERRVUZETEZkQlFWY3NSVUZCUlN4alFVRmpMRVZCUVVVc1lVRkJZU3hGUVVGRkxFMUJRVTBzUTBGQlF5eEZRVU40Ump0blFrRkRSU3hGUVVGRkxGTkJRVk1zUlVGQlJTeFhRVUZYTEVOQlFVTXNZVUZCWVN4RFFVRlJMRVZCUVVVc1MwRkJTeXhGUVVGRkxFTkJRVU1zUlVGQlJUdG5Ra0ZETVVRc1JVRkJSU3hUUVVGVExFVkJRVVVzVTBGQlV5eEZRVUZUTEVWQlFVVXNTMEZCU3l4RlFVRkZMRU5CUVVNc1JVRkJSVHRuUWtGRE0wTXNSVUZCUlN4VFFVRlRMRVZCUVVVc1VVRkJVU3hEUVVGRExFVkJRVVVzVjBGQlZ5eEZRVUZGTEVsQlFVa3NSVUZCUlN4RFFVRlJMRVZCUVVVc1MwRkJTeXhGUVVGRkxFTkJRVU1zUlVGQlJUdGhRVU5vUlN4RFFVTkdMRU5CUVVNN1VVRkRTaXhEUVVGRE8xRkJSVVFzU1VGQlNTeE5RVUZOTEV0QlFVc3NVVUZCVVN4SlFVRkpMR05CUVdNc1MwRkJTeXhOUVVGTkxFVkJRVVVzUTBGQlF6dFpRVU55UkN4UFFVRlBMRzFDUVVGdFFpeERRVUZETEd0Q1FVRnJRaXhEUVVNelF5eFJRVUZSTEVWQlExSXNiVUpCUVcxQ0xFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1MwRkJTeXhGUVVGRkxHTkJRV01zUTBGQlF5eEZRVU01UkN4dFFrRkJiVUlzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhYUVVGWExFVkJRVVVzWTBGQll5eEZRVUZGTEdGQlFXRXNSVUZCUlN4TlFVRk5MRU5CUVVNc1JVRkRlRVk3WjBKQlEwVXNSVUZCUlN4VFFVRlRMRVZCUVVVc1YwRkJWeXhEUVVGRExHRkJRV0VzUTBGQlVTeEZRVUZGTEV0QlFVc3NSVUZCUlN4RFFVRkRMRVZCUVVVN1owSkJRekZFTEVWQlFVVXNVMEZCVXl4RlFVRkZMRkZCUVZFc1EwRkJReXhGUVVGRkxGZEJRVmNzUlVGQlJTeEpRVUZKTEVWQlFVVXNRMEZCVVN4RlFVRkZMRXRCUVVzc1JVRkJSU3hEUVVGRExFVkJRVVU3WVVGRGFFVXNRMEZEUml4RFFVRkRPMUZCUTBvc1EwRkJRenRSUVVWRUxIVkZRVUYxUlR0UlFVTjJSU3hOUVVGTkxHZENRVUZuUWl4SFFVRkhMR05CUVdNc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJRMjVGTEUxQlFVMHNWMEZCVnl4SFFVRkhMR2RDUVVGblFpeERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRWxCUVVrc1owSkJRV2RDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNWVUZCVlN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGNFY3NTVUZCU1N4WFFVRlhMRWxCUVVrc1kwRkJZeXhMUVVGTExFMUJRVTBzUlVGQlJTeERRVUZETzFsQlF6ZERMRTFCUVUwc1owSkJRV2RDTEVkQlFVY3NaMEpCUVdkQ0xFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPMmRDUVVNNVJTeEpRVUZKTzJkQ1FVTktMRmRCUVZjc1JVRkJSU3hIUVVGSExFbEJRVWtzV1VGQldUdG5Ra0ZEYUVNc1VVRkJVU3hGUVVGRkxFbEJRVWs3WjBKQlEyUXNTVUZCU1N4RlFVRkZMRTFCUVUwN1lVRkRZaXhEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU5LTEUxQlFVMHNUVUZCVFN4SFFVRkhMR2RDUVVGblFpeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0WlFVTnVSU3hKUVVGSkxFMUJRVTBzUzBGQlN5eExRVUZMTEVWQlFVVXNRMEZCUXp0blFrRkRja0lzVDBGQlR5eHRRa0ZCYlVJc1EwRkJReXhyUWtGQmEwSXNRMEZETTBNc1UwRkJVeXhOUVVGTkxFVkJRVVVzUlVGRGFrSXNiVUpCUVcxQ0xFTkJRVU1zYVVKQlFXbENMRU5CUVVNc1MwRkJTeXhGUVVGRkxHTkJRV01zUTBGQlF5eEZRVU0xUkN4dFFrRkJiVUlzUTBGQlF5eGpRVUZqTEVOQlFVTXNWMEZCVnl4RlFVRkZMR05CUVdNc1JVRkJSU3huUWtGQlowSXNSVUZCUlN4alFVRmpMRU5CUVVNc1JVRkRha2NzUTBGQlF5eEZRVUZGTEZOQlFWTXNSVUZCUlN4WFFVRlhMRU5CUVVNc1owSkJRV2RDTEVOQlFWRXNSVUZCUlN4TFFVRkxMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGRGFFVXNRMEZCUXp0WlFVTktMRU5CUVVNN1dVRkRSQ3hKUVVGSkxFMUJRVTBzUzBGQlN5eExRVUZMTEVWQlFVVXNRMEZCUXp0blFrRkRja0lzVDBGQlR5eHRRa0ZCYlVJc1EwRkJReXhyUWtGQmEwSXNRMEZETTBNc1YwRkJWeXhOUVVGTkxFVkJRVVVzUlVGRGJrSXNiVUpCUVcxQ0xFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1MwRkJTeXhGUVVGRkxGZEJRVmNzUlVGQlJTeGpRVUZqTEVOQlFVTXNSVUZETTBVc2JVSkJRVzFDTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zVjBGQlZ5eEZRVUZGTEdOQlFXTXNSVUZCUlN4blFrRkJaMElzUlVGQlJTeGpRVUZqTEVOQlFVTXNSVUZEYmtjN2IwSkJRMFVzUlVGQlJTeFRRVUZUTEVWQlFVVXNWMEZCVnl4RFFVRkRMR2RDUVVGblFpeERRVUZSTEVWQlFVVXNTMEZCU3l4RlFVRkZMRU5CUVVNc1JVRkJSVHR2UWtGRE4wUXNSVUZCUlN4VFFVRlRMRVZCUVVVc1UwRkJVeXhGUVVGVExFVkJRVVVzUzBGQlN5eEZRVUZGTEVOQlFVTXNSVUZCUlR0dlFrRkRNME1zUlVGQlJTeFRRVUZUTEVWQlFVVXNVVUZCVVN4RFFVRkRMRVZCUVVVc1YwRkJWeXhGUVVGRkxFbEJRVWtzUlVGQlJTeERRVUZSTEVWQlFVVXNTMEZCU3l4RlFVRkZMRU5CUVVNc1JVRkJSVHRwUWtGRGFFVXNRMEZEUml4RFFVRkRPMWxCUTBvc1EwRkJRenRaUVVORUxFbEJRVWtzVFVGQlRTeExRVUZMTEZGQlFWRXNSVUZCUlN4RFFVRkRPMmRDUVVONFFpeFBRVUZQTEcxQ1FVRnRRaXhEUVVGRExHdENRVUZyUWl4RFFVTXpReXhYUVVGWExFMUJRVTBzUlVGQlJTeEZRVU51UWl4dFFrRkJiVUlzUTBGQlF5eHRRa0ZCYlVJc1EwRkJReXhMUVVGTExFVkJRVVVzWTBGQll5eERRVUZETEVWQlF6bEVMRzFDUVVGdFFpeERRVUZETEdkQ1FVRm5RaXhEUVVGRExGZEJRVmNzUlVGQlJTeGpRVUZqTEVWQlFVVXNaMEpCUVdkQ0xFVkJRVVVzWTBGQll5eERRVUZETEVWQlEyNUhPMjlDUVVORkxFVkJRVVVzVTBGQlV5eEZRVUZGTEZkQlFWY3NRMEZCUXl4blFrRkJaMElzUTBGQlVTeEZRVUZGTEV0QlFVc3NSVUZCUlN4RFFVRkRMRVZCUVVVN2IwSkJRemRFTEVWQlFVVXNVMEZCVXl4RlFVRkZMRkZCUVZFc1EwRkJReXhGUVVGRkxGZEJRVmNzUlVGQlJTeEpRVUZKTEVWQlFVVXNRMEZCVVN4RlFVRkZMRXRCUVVzc1JVRkJSU3hEUVVGRExFVkJRVVU3YVVKQlEyaEZMRU5CUTBZc1EwRkJRenRaUVVOS0xFTkJRVU03VVVGRFNDeERRVUZETzFGQlJVUXNTVUZCU1N4TlFVRk5MRXRCUVVzc1MwRkJTeXhKUVVGSkxHTkJRV01zUzBGQlN5eDVRa0ZCZVVJc1JVRkJSU3hEUVVGRE8xbEJRM0pGTEU5QlFVOHNiVUpCUVcxQ0xFTkJRVU1zYTBKQlFXdENMRU5CUXpORExGZEJRVmNzUlVGRFdDeHRRa0ZCYlVJc1EwRkJReXh6UWtGQmMwSXNRMEZCUXl4alFVRmpMRU5CUVVNc1JVRkRNVVFzYlVKQlFXMUNMRU5CUVVNc2JVSkJRVzFDTEVOQlFVTXNWMEZCVnl4RlFVRkZMR05CUVdNc1EwRkJReXhGUVVOd1JUdG5Ra0ZEUlN4RlFVRkZMRk5CUVZNc1JVRkJSU3hMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZSTEVWQlFVVXNTMEZCU3l4RlFVRkZMRU5CUVVNc1JVRkJSVHRuUWtGREwwTXNSVUZCUlN4VFFVRlRMRVZCUVVVc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlVTeEZRVUZGTEV0QlFVc3NSVUZCUlN4RFFVRkRMRVZCUVVVN1owSkJRemRETEVWQlFVVXNVMEZCVXl4RlFVRkZMRlZCUVZVc1JVRkJVeXhGUVVGRkxFdEJRVXNzUlVGQlJTeERRVUZETEVWQlFVVTdZVUZETjBNc1EwRkRSaXhEUVVGRE8xRkJRMG9zUTBGQlF6dFJRVVZFTEUxQlFVMHNaVUZCWlN4SFFVRXlRanRaUVVNNVF5eGhRVUZoTEVWQlFVVXNjVUpCUVhGQ0xFTkJRVU1zVDBGQlR6dFpRVU0xUXl4MVFrRkJkVUlzUlVGQlJTeHhRa0ZCY1VJc1EwRkJReXhQUVVGUE8xbEJRM1JFTEdGQlFXRXNSVUZCUlN4eFFrRkJjVUlzUTBGQlF5eEpRVUZKTzFsQlEzcERMR0ZCUVdFc1JVRkJSU3h4UWtGQmNVSXNRMEZCUXl4SlFVRkpPMWxCUTNwRExIVkNRVUYxUWl4RlFVRkZMSEZDUVVGeFFpeERRVUZETEZkQlFWYzdXVUZETVVRc2IwSkJRVzlDTEVWQlFVVXNjVUpCUVhGQ0xFTkJRVU1zVDBGQlR6dFpRVU51UkN4blFrRkJaMElzUlVGQlJTeHhRa0ZCY1VJc1EwRkJReXhSUVVGUk8xbEJRMmhFTEdOQlFXTXNSVUZCUlN4eFFrRkJjVUlzUTBGQlF5eE5RVUZOTzFsQlF6VkRMR05CUVdNc1JVRkJSU3h4UWtGQmNVSXNRMEZCUXl4TlFVRk5PMWxCUXpWRExHTkJRV01zUlVGQlJTeHhRa0ZCY1VJc1EwRkJReXhOUVVGTk8xbEJRelZETEdOQlFXTXNSVUZCUlN4eFFrRkJjVUlzUTBGQlF5eE5RVUZOTzFsQlF6VkRMRzFDUVVGdFFpeEZRVUZGTEhGQ1FVRnhRaXhEUVVGRExGZEJRVmM3V1VGRGRFUXNaMEpCUVdkQ0xFVkJRVVVzY1VKQlFYRkNMRU5CUVVNc1VVRkJVVHRUUVVOcVJDeERRVUZETzFGQlJVWXNUVUZCVFN4WlFVRlpMRWRCUVVjc1pVRkJaU3hEUVVGRExHTkJRV01zUTBGQlF5eERRVUZETzFGQlEzSkVMRWxCUVVrc1dVRkJXU3hKUVVGSkxFMUJRVTBzUzBGQlN5eExRVUZMTEVWQlFVVXNRMEZCUXp0WlFVTnlReXhQUVVGUExHMUNRVUZ0UWl4RFFVRkRMR3RDUVVGclFpeERRVU16UXl4dFFrRkJiVUlzUTBGQlF5eHRRa0ZCYlVJc1EwRkJReXhqUVVGakxFTkJRVU1zUlVGRGRrUXNiVUpCUVcxQ0xFTkJRVU1zT0VKQlFUaENMRU5CUVVNc1dVRkJXU3hGUVVGRkxHTkJRV01zUTBGQlF5eEZRVU5vUml4dFFrRkJiVUlzUTBGQlF5d3lRa0ZCTWtJc1EwRkJReXhYUVVGWExFVkJRVVVzWTBGQll5eEZRVUZGTEdOQlFXTXNSVUZCUlN4WlFVRlpMRU5CUVVNc1JVRkRNVWNzYlVKQlFXMUNMRU5CUVVNc2RVSkJRWFZDTEVOQlFVTXNZMEZCWXl4RFFVRkRMRU5CUXpWRUxFTkJRVU03VVVGRFNpeERRVUZETzFGQlJVUXNTVUZCU1N4TlFVRk5MRXRCUVVzc1MwRkJTeXhKUVVGSkxHTkJRV01zUTBGQlF5eFZRVUZWTEVOQlFVTXNVVUZCVVN4RFFVRkRMRVZCUVVVc1EwRkJRenRaUVVNMVJDeE5RVUZOTEZkQlFWY3NSMEZCUnl4alFVRmpMRU5CUVVNc1QwRkJUeXhEUVVGRExGVkJRVlVzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEZWtVc1QwRkJUeXh0UWtGQmJVSXNRMEZCUXl4clFrRkJhMElzUTBGRE0wTXNWMEZCVnl4RlFVTllMRzFDUVVGdFFpeERRVUZETEhsQ1FVRjVRaXhEUVVGRExGZEJRVmNzUTBGQlF5eEZRVU14UkN4dFFrRkJiVUlzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhYUVVGWExFVkJRVVVzWTBGQll5eEZRVUZGTEV0QlFVc3NSVUZCUlN4SlFVRkpMRU5CUVVNc1JVRkRhRVlzYlVKQlFXMUNMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNZMEZCWXl4RFFVRkRMRU5CUTNaRUxFTkJRVU03VVVGRFNpeERRVUZETzFGQlJVUXNaMFpCUVdkR08xRkJRMmhHTEUxQlFVMHNXVUZCV1N4SFFVRkhMR05CUVdNc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJReTlFTEUxQlFVMHNZVUZCWVN4SFFVRkhMRWxCUVVrc1IwRkJSeXhEUVVGVE8xbEJRM0JETEZGQlFWRXNSVUZCUlN4UlFVRlJMRVZCUVVVc1owSkJRV2RDTEVWQlFVVXNWMEZCVnl4RlFVRkZMRmxCUVZrN1dVRkRMMFFzVFVGQlRTeEZRVUZGTEUxQlFVMHNSVUZCUlN4VFFVRlRMRVZCUVVVc1QwRkJUeXhGUVVGRkxFOUJRVThzUlVGQlJTeFBRVUZQTEVWQlFVVXNUMEZCVHp0WlFVTTNSQ3haUVVGWkxFVkJRVVVzVTBGQlV5eEZRVUZGTEZkQlFWY3NSVUZCUlN4TlFVRk5MRVZCUVVVc1QwRkJUenRUUVVOMFJDeERRVUZETEVOQlFVTTdVVUZEU0N4SlFVTkZMRmxCUVZrc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF6dFpRVU4yUWl4RFFVRkRMR05CUVdNc1EwRkJReXhWUVVGVkxFTkJRVU1zVVVGQlVTeERRVUZETzFsQlEzQkRMRU5CUVVNc1lVRkJZU3hEUVVGRExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkRia01zUTBGQlF6dFpRVU5FTERSRlFVRTBSVHRaUVVNMVJTeHBSa0ZCYVVZN1dVRkRha1lzYVVOQlFXbERPMWxCUTJwRExFMUJRVTBzWVVGQllTeEhRVU5xUWl4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVOVUxGZEJRVzFDTEVWQlFVVXNWMEZCVnl4RlFVTnFReXhSUVVGUkxFTkJRVU1zUjBGQlJ5eERRVUZETEZkQlFWY3NRMEZCUXl4RFFVTXhRaXhKUVVGSkxFVkJRVVVzUTBGQlF6dFpRVU5XTEUxQlFVMHNXVUZCV1N4SFFVRkhMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zWVVGQllTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVTnlSQ3hEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUTFnc1NVRkJTVHRuUWtGRFNpeFBRVUZQTEVsQlFVa3NTMEZCU3l4UlFVRlJPMmRDUVVONFFpeEpRVUZKTEVOQlFVTXNTVUZCU1N4RlFVRkZMRTlCUVU4c1EwRkJReXhaUVVGWkxFVkJRVVVzUlVGQlJTeERRVUZETEV0QlFVc3NZMEZCWXl4RFFVTXhSQ3hEUVVGRE8xbEJRMFlzVFVGQlRTeG5Ra0ZCWjBJc1IwRkJSeXhaUVVGWkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4WlFVRlpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRk9VUXNUVUZCVFN4aFFVRmhMRWRCUVVjc1dVRkJXU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExGVkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUTNCRkxFMUJRVTBzWVVGQllTeEhRVUZITEdGQlFXRXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU03WjBKQlEzaEZMRWxCUVVrN1owSkJRMG9zVjBGQlZ5eEZRVUZGTEVkQlFVY3NTVUZCU1N3d1FrRkJNRUk3WjBKQlF6bERMRkZCUVZFc1JVRkJSU3hKUVVGSk8yZENRVU5rTEVsQlFVa3NSVUZCUlN4TlFVRk5PMkZCUTJJc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRlNpeFBRVUZQTEcxQ1FVRnRRaXhEUVVGRExHdENRVUZyUWl4RFFVTXpReXhuUWtGQlowSXNSVUZEYUVJc2JVSkJRVzFDTEVOQlFVTXNkMEpCUVhkQ0xFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1JVRkRPVVE3WjBKQlEwVXNSMEZCUnl4aFFVRmhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlEzaERMRmxCUVZrc1EwRkJReXhGUVVGRkxFOUJRVThzUlVGQlJTd3lRa0ZCTWtJc1owSkJRV2RDTEVsQlFVa3NSVUZCUlN4RFFVRkRPMmRDUVVNeFJTeGhRVUZoTEVOQlFVTXNSVUZCUlN4WFFVRlhMRVZCUVVVc1owTkJRV2RETEVWQlFVVXNRMEZCUXp0blFrRkRhRVVzYjBKQlFXOUNMRU5CUVVNc1JVRkJSU3hYUVVGWExFVkJRVVVzYjBOQlFXOURMRVZCUVVVc1EwRkJRenRoUVVNMVJTeEZRVU5FTEcxQ1FVRnRRaXhEUVVGRExHdENRVUZyUWl4RFFVRkRMR05CUVdNc1EwRkJReXhEUVVOMlJDeERRVUZETzFGQlEwb3NRMEZCUXp0UlFVVkVMRTlCUVU4c1UwRkJVeXhEUVVGRE8wbEJRMjVDTEVOQlFVTTdTVUZGVHl4TlFVRk5MRU5CUVVNc2EwSkJRV3RDTEVOQlF5OUNMRlZCUVd0Q0xFVkJRMnhDTEU5QlFXZERMRVZCUTJoRExGVkJRV2RGTEVWQlEyaEZMR1ZCUVhkRk8xRkJSWGhGTEU5QlFVOHNSVUZCUlN4VlFVRlZMRVZCUVVVc1QwRkJUeXhGUVVGRkxGVkJRVlVzUlVGQlJTeGxRVUZsTEVWQlFVVXNRMEZCUXp0SlFVTTVSQ3hEUVVGRE8wbEJSVThzVFVGQlRTeERRVUZETEcxQ1FVRnRRaXhEUVVGRExFbEJRVms3VVVGRE4wTXNUVUZCVFN4WlFVRlpMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVONFF5eFBRVUZQTEZsQlFWa3NRMEZCUXp0SlFVTjBRaXhEUVVGRE8wbEJSVThzVFVGQlRTeERRVUZETEhWQ1FVRjFRaXhEUVVOd1F5eEpRVUZaTzFGQlJWb3NUVUZCVFN4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5zUlN4TlFVRk5MRTFCUVUwc1IwRkJORVFzUlVGQlJTeERRVUZETzFGQlF6TkZMRkZCUVZFc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRNVUlzVFVGQlRTeEpRVUZKTEVkQlFVY3NSMEZCUnl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdXVUZEYkVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEZOQlFWTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGUkxFVkJRVVVzUzBGQlN5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1VVRkRNMFFzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEU0N4SlFVTkZMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zVTBGQlV5eERRVUZETzFsQlF6RkNMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zWVVGQllTeERRVUZETzFsQlF6bENMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zVDBGQlR5eERRVUZETzFsQlEzaENMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zVDBGQlR5eERRVUZETEVWQlEzaENMRU5CUVVNN1dVRkRSQ3hOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNVMEZCVXl4RlFVRkZMRlZCUVZVc1JVRkJVeXhGUVVGRkxFdEJRVXNzUlVGQlJTeFJRVUZSTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1EwRkJRenRSUVVNeFJTeERRVUZETzFGQlEwUXNUMEZCVHl4TlFVRk5MRU5CUVVNN1NVRkRhRUlzUTBGQlF6dEpRVVZQTEUxQlFVMHNRMEZCUXl4clFrRkJhMElzUTBGREwwSXNTVUZCV1R0UlFVVmFMRTFCUVUwc1VVRkJVU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1ZVRkJWU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEYkVVc1RVRkJUU3hOUVVGTkxFZEJRVFJFTEVWQlFVVXNRMEZCUXp0UlFVTXpSU3hSUVVGUkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8xbEJRekZDTEUxQlFVMHNTVUZCU1N4SFFVRkhMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPMWxCUTJ4RExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4VFFVRlRMRVZCUVVVc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlVTeEZRVUZGTEV0QlFVc3NSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRek5FTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTBnc1NVRkJTU3hKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEZGQlFWRXNRMEZCUXl4RlFVRkZMRU5CUVVNN1dVRkRPVUlzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRk5CUVZNc1JVRkJSU3hWUVVGVkxFVkJRVk1zUlVGQlJTeExRVUZMTEVWQlFVVXNVVUZCVVN4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFTkJRVU03VVVGRE1VVXNRMEZCUXp0UlFVTkVMRTlCUVU4c1RVRkJUU3hEUVVGRE8wbEJRMmhDTEVOQlFVTTdTVUZGVHl4TlFVRk5MRU5CUVVNc2JVSkJRVzFDTEVOQlEyaERMRmRCUVd0RExFVkJRMnhETEdOQlFYTkNPMUZCUlhSQ0xFOUJRVThzUzBGQlN5eFZRVUZWTEUxQlFVMHNRMEZGTVVJc1NVRkJVeXhGUVVOVUxFbEJRVlU3V1VGRlZpeE5RVUZOTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRMjVDTEUxQlFVMHNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxFVkJRVVVzWVVGQllTeERRVUZETEUxQlFVMHNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkRiRVFzUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkRaQ3hIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEdkQ1FVRm5RaXhqUVVGakxFVkJRVVVzUTBGQlF5eERRVUZETzFsQlF6bERMRWxCUVVrc1QwRkJZeXhEUVVGRE8xbEJRMjVDTEVsQlFVa3NRMEZCUXp0blFrRkRTQ3hQUVVGUExFZEJRVWNzVFVGQlRTeEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1dVRkRNVVFzUTBGQlF6dFpRVUZETEU5QlFVOHNRMEZCVlN4RlFVRkZMRU5CUVVNN1owSkJRM0JDTEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc2QwSkJRWGRDTEdOQlFXTXNSVUZCUlN4RlFVRkZMRU5CUVZVc1EwRkJReXhEUVVGRE8yZENRVU5vUlN4TlFVRk5MRU5CUVVNc1EwRkJRenRaUVVOV0xFTkJRVU03V1VGRFJDeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMR1ZCUVdVc1kwRkJZeXhaUVVGaExFOUJRV1VzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xbEJReTlGTEVsQlFVa3NTVUZCU1R0blFrRkJSU3hIUVVGSExFTkJRVU1zVlVGQlZTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUXk5Q0xFOUJRVThzVDBGQlR5eERRVUZETzFGQlEycENMRU5CUVVNc1EwRkJRenRKUVVOS0xFTkJRVU03U1VGRlR5eE5RVUZOTEVOQlFVTXNkVUpCUVhWQ0xFTkJRM0JETEZkQlFXdERMRVZCUTJ4RExHTkJRWE5DTzFGQlJYUkNMRTlCUVU4c1MwRkJTeXhWUVVGVkxGTkJRVk1zUTBGRk4wSXNTVUZCVnl4RlFVTllMRWxCUVZVN1dVRkZWaXhOUVVGTkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUTI1Q0xFMUJRVTBzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZMRVZCUVVVc2NVSkJRWEZDTEVOQlFVTXNWVUZCVlN4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVNNVJDeERRVUZETEVkQlFVY3NRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRaUVVOcVFpeEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMR2RDUVVGblFpeGpRVUZqTEVWQlFVVXNRMEZCUXl4RFFVRkRPMWxCUXpsRExFbEJRVWtzVDBGQll5eERRVUZETzFsQlEyNUNMRWxCUVVrc1EwRkJRenRuUWtGRFNDeFBRVUZQTEVkQlFVY3NUVUZCVFN4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEZOQlFWTXNRMEZETjBNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hYUVVGWExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZEYmtNc1IwRkJSeXhEUVVOS0xFTkJRVU03V1VGRFNpeERRVUZETzFsQlFVTXNUMEZCVHl4RFFVRlZMRVZCUVVVc1EwRkJRenRuUWtGRGNFSXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXgzUWtGQmQwSXNZMEZCWXl4RlFVRkZMRVZCUVVVc1EwRkJWU3hEUVVGRExFTkJRVU03WjBKQlEyaEZMRTFCUVUwc1EwRkJReXhEUVVGRE8xbEJRMVlzUTBGQlF6dFpRVU5FTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hqUVVGakxGbEJRV0VzVDBGQlpTeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU03V1VGREwwVXNTVUZCU1N4SlFVRkpPMmRDUVVGRkxFZEJRVWNzUTBGQlF5eFZRVUZWTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1dVRkRMMElzVDBGQlR5eFBRVUZQTEVOQlFVTTdVVUZEYWtJc1EwRkJReXhEUVVGRE8wbEJRMG9zUTBGQlF6dEpRVVZQTEUxQlFVMHNRMEZCUXl4eFFrRkJjVUlzUTBGQlF5eGpRVUZ6UWp0UlFVTjZSQ3hQUVVGUExFdEJRVXNzVlVGQlZTeFBRVUZQTEVOQlJUTkNMRWRCUVdFN1dVRkZZaXhOUVVGTkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUTI1Q0xFMUJRVTBzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZMRVZCUVVVc2NVSkJRWEZDTEVOQlFVTXNVVUZCVVN4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVNMVJDeERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJRenRaUVVObUxFMUJRVTBzWVVGQllTeEhRVUZITEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU4yUkN4SlFVRkpMRWxCUVdFc1EwRkJRenRaUVVOc1FpeEpRVUZKTEVOQlFVTTdaMEpCUTBnc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eFhRVUZYTEdGQlFXRXNTVUZCU1N4alFVRmpMRVZCUVVVc1EwRkJReXhEUVVGRE8yZENRVU40UkN4SlFVRkpMRWRCUVVjc1RVRkJUU3hKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhoUVVGdlFpeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNoRkxFTkJRVU03V1VGQlF5eFBRVUZQTEVOQlFWVXNSVUZCUlN4RFFVRkRPMmRDUVVOd1FpeEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMR3RDUVVGclFpeGpRVUZqTEVWQlFVVXNSVUZCUlN4RFFVRlZMRU5CUVVNc1EwRkJRenRuUWtGRE1VUXNUVUZCVFN4RFFVRkRMRU5CUVVNN1dVRkRWaXhEUVVGRE8xbEJRMFFzUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRWxCUVVrc1EwRkJReXhOUVVGTkxFbEJRVWtzWTBGQll5eEZRVUZGTEVOQlFVTXNRMEZCUXp0WlFVTnNSQ3hQUVVGUExFbEJRVWtzUTBGQlF6dFJRVU5rTEVOQlFVTXNRMEZCUXp0SlFVTktMRU5CUVVNN1NVRkZUeXhOUVVGTkxFTkJRVU1zZFVKQlFYVkNMRU5CUVVNc1kwRkJjMEk3VVVGRE0wUXNUMEZCVHl4TFFVRkxMRlZCUVZVc1UwRkJVeXhEUVVVM1FpeEpRVUZYTEVWQlExZ3NTVUZCVlR0WlFVVldMRTFCUVUwc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZEYmtJc1RVRkJUU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVXNSVUZCUlN4eFFrRkJjVUlzUTBGQlF5eFZRVUZWTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUXpsRUxFTkJRVU1zUjBGQlJ5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMWxCUTJwQ0xFbEJRVWtzVDBGQll5eERRVUZETzFsQlEyNUNMRWxCUVVrc1EwRkJRenRuUWtGRFNDeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1NVRkJTU3hEUVVGRExFMUJRVTBzU1VGQlNTeGpRVUZqTEVWQlFVVXNRMEZCUXl4RFFVRkRPMmRDUVVOMFJDeFBRVUZQTEVkQlFVY3NUVUZCVFN4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEZOQlFWTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRE4wUXNRMEZCUXp0WlFVRkRMRTlCUVU4c1EwRkJWU3hGUVVGRkxFTkJRVU03WjBKQlEzQkNMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlZTeERRVUZETEVOQlFVTTdaMEpCUTNSQ0xFMUJRVTBzUTBGQlF5eERRVUZETzFsQlExWXNRMEZCUXp0WlFVTkVMRWxCUVVrc1NVRkJTVHRuUWtGQlJTeEhRVUZITEVOQlFVTXNWVUZCVlN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xbEJReTlDTEU5QlFVOHNUMEZCVHl4RFFVRkRPMUZCUTJwQ0xFTkJRVU1zUTBGQlF6dEpRVU5LTEVOQlFVTTdTVUZGVHl4TlFVRk5MRU5CUVVNc2RVSkJRWFZDTEVOQlFVTXNZMEZCYzBJN1VVRkRNMFFzVDBGQlR5eExRVUZMTEZWQlFWVXNVMEZCVXl4RFFVVTNRaXhIUVVGaExFVkJRMklzU1VGQlZUdFpRVVZXTEUxQlFVMHNSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVWNzUTBGRGJrSXNUVUZCVFN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFVkJRVVVzUlVGQlJTeHhRa0ZCY1VJc1EwRkJReXhWUVVGVkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlF6bEVMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzFsQlEycENMRTFCUVUwc1lVRkJZU3hIUVVGSExFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVOMlJDeEpRVUZKTEVsQlFXRXNRMEZCUXp0WlFVTnNRaXhKUVVGSkxFTkJRVU03WjBKQlEwZ3NSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhaUVVGWkxHRkJRV0VzUTBGQlF5eE5RVUZOTEVsQlFVa3NZMEZCWXl4RlFVRkZMRU5CUVVNc1EwRkJRenRuUWtGRGFFVXNTVUZCU1N4SFFVRkhMRTFCUVUwc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4VFFVRlRMRU5CUVVNc1lVRkJZU3hGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEyNUZMRU5CUVVNN1dVRkJReXhQUVVGUExFTkJRVlVzUlVGQlJTeERRVUZETzJkQ1FVTndRaXhIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEc5Q1FVRnZRaXhqUVVGakxFVkJRVVVzUlVGQlJTeERRVUZWTEVOQlFVTXNRMEZCUXp0blFrRkROVVFzVFVGQlRTeERRVUZETEVOQlFVTTdXVUZEVml4RFFVRkRPMWxCUTBRc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eFhRVUZYTEVsQlFVa3NRMEZCUXl4TlFVRk5MRWxCUVVrc1kwRkJZeXhGUVVGRkxFTkJRVU1zUTBGQlF6dFpRVU55UkN4SlFVRkpMRWxCUVVrN1owSkJRVVVzUjBGQlJ5eERRVUZETEZWQlFWVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRaUVVNdlFpeFBRVUZQTEVsQlFVa3NRMEZCUXp0UlFVTmtMRU5CUVVNc1EwRkJRenRKUVVOS0xFTkJRVU03U1VGRlR5eE5RVUZOTEVOQlFVTXNhVUpCUVdsQ0xFTkJRemxDTEV0QlFTdERMRVZCUXk5RExHTkJRWE5DTzFGQlJYUkNMRTlCUVU4c1MwRkJTeXhWUVVGVkxFbEJRVWtzUTBGRmVFSXNWMEZCWjBJN1dVRkZhRUlzVFVGQlRTeEZRVUZGTEVkQlFVY3NSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVOdVFpeE5RVUZOTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hGUVVGRkxHRkJRV0VzUTBGQlF5eEpRVUZKTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUTJoRUxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUTFvc1RVRkJUU3hGUVVGRkxFZEJRVWNzUzBGQlN5eERRVUZETEVkQlFVY3NWMEZCVnl4RFFVRkRMR0ZCUVdFc1EwRkJReXhEUVVGRE8xbEJReTlETEVsQlFVa3NUMEZCVHl4RlFVRkZMRXRCUVVzc1YwRkJWenRuUWtGRE0wSXNUVUZCVFN4SlFVRkpMR1ZCUVdVc1EwRkJReXhOUVVGTkxFbEJRVWtzUTBGQlF5eEZRVUZGTEZkQlFWY3NRMEZCUXl4RFFVRkRPMWxCUTNSRUxFbEJRVWtzVlVGQmFVSXNRMEZCUXp0WlFVTjBRaXhKUVVGSkxFTkJRVU03WjBKQlEwZ3NSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhYUVVGWExHTkJRV01zVTBGQlV5eEpRVUZKTEVOQlFVTXNSVUZCUlN4SlFVRkpMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU03WjBKQlF6ZEVMRlZCUVZVc1IwRkJSeXhOUVVGTkxFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTjZSQ3hEUVVGRE8xbEJRVU1zVDBGQlR5eERRVUZWTEVWQlFVVXNRMEZCUXp0blFrRkRjRUlzUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4clFrRkJhMElzWTBGQll5eFpRVUZaTEVWQlFVVXNSVUZCUlN4RlFVRkZMRU5CUVZVc1EwRkJReXhEUVVGRE8yZENRVU40UlN4TlFVRk5MRU5CUVVNc1EwRkJRenRaUVVOV0xFTkJRVU03V1VGRFJDeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1kwRkJZeXhaUVVGaExGVkJRV3RDTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dFpRVU16UlN4UFFVRlBMRlZCUVZVc1EwRkJRenRSUVVOd1FpeERRVUZETEVOQlFVTTdTVUZEU2l4RFFVRkRPMGxCUlU4c1RVRkJUU3hEUVVGRExHMUNRVUZ0UWl4RFFVTm9ReXhMUVVFclF5eEZRVU12UXl4WFFVRnJReXhGUVVOc1F5eGpRVUZ6UWp0UlFVVjBRaXhQUVVGUExFdEJRVXNzVlVGQlZTeE5RVUZOTEVOQlJURkNMRmRCUVdkQ0xFVkJRMmhDTEVsQlFWTXNSVUZEVkN4SlFVRlZPMWxCUlZZc1RVRkJUU3hGUVVGRkxFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNSMEZCUnl4RFFVTnVRaXhOUVVGTkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN4RlFVRkZMR0ZCUVdFc1EwRkJReXhOUVVGTkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlEyeEVMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzFsQlEyUXNUVUZCVFN4RlFVRkZMRWRCUVVjc1MwRkJTeXhEUVVGRExFZEJRVWNzVjBGQlZ5eERRVUZETEdGQlFXRXNRMEZCUXl4RFFVRkRPMWxCUXk5RExFbEJRVWtzVDBGQlR5eEZRVUZGTEV0QlFVc3NWMEZCVnp0blFrRkRNMElzVFVGQlRTeEpRVUZKTEdWQlFXVXNRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhGUVVGRkxGZEJRVmNzUTBGQlF5eERRVUZETzFsQlEzUkVMRWxCUVVrc1QwRkJXU3hEUVVGRE8xbEJRMnBDTEVsQlFVa3NRMEZCUXp0blFrRkRTQ3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NZMEZCWXl4VFFVRlRMRWxCUVVrc1EwRkJReXhGUVVGRkxFbEJRVWtzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXp0blFrRkROMFFzVFVGQlRTeFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRMnBFTEU5QlFVOHNSMEZCUnl4TlFVRk5MRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVTXhReXhKUVVGSkxGZEJRVmNzUTBGQlF5eEZRVUZGTEVkQlFVY3NUMEZCVHl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUXpsRExFZEJRVWNzUTBGRFNpeERRVUZETzFsQlEwb3NRMEZCUXp0WlFVRkRMRTlCUVU4c1EwRkJWU3hGUVVGRkxFTkJRVU03WjBKQlEzQkNMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlZTeERRVUZETEVOQlFVTTdaMEpCUTNSQ0xFMUJRVTBzUTBGQlF5eERRVUZETzFsQlExWXNRMEZCUXp0WlFVTkVMRWxCUVVrc1NVRkJTVHRuUWtGQlJTeEhRVUZITEVOQlFVTXNWVUZCVlN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xbEJReTlDTEU5QlFVOHNUMEZCVHl4RFFVRkRPMUZCUTJwQ0xFTkJRVU1zUTBGQlF6dEpRVU5LTEVOQlFVTTdTVUZGVHl4TlFVRk5MRU5CUVVNc2JVSkJRVzFDTEVOQlEyaERMRXRCUVN0RExFVkJReTlETEdOQlFYTkNPMUZCUlhSQ0xFOUJRVThzUzBGQlN5eFZRVUZWTEUxQlFVMHNRMEZGTVVJc1YwRkJaMElzUlVGRGFFSXNTVUZCVlR0WlFVVldMRTFCUVUwc1JVRkJSU3hIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVkQlFVY3NRMEZEYmtJc1RVRkJUU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVXNSVUZCUlN4aFFVRmhMRU5CUVVNc1RVRkJUU3hGUVVGRkxFbEJRVWtzUTBGQlF5eERRVU5zUkN4RFFVRkRMRWRCUVVjc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFpRVU5rTEUxQlFVMHNSVUZCUlN4SFFVRkhMRXRCUVVzc1EwRkJReXhIUVVGSExGZEJRVmNzUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUXp0WlFVTXZReXhKUVVGSkxFOUJRVThzUlVGQlJTeExRVUZMTEZkQlFWYzdaMEpCUXpOQ0xFMUJRVTBzU1VGQlNTeGxRVUZsTEVOQlFVTXNUVUZCVFN4SlFVRkpMRU5CUVVNc1JVRkJSU3hYUVVGWExFTkJRVU1zUTBGQlF6dFpRVU4wUkN4SlFVRkpMRWRCUVZVc1EwRkJRenRaUVVObUxFbEJRVWtzUTBGQlF6dG5Ra0ZEU0N4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExGbEJRVmtzWTBGQll5eFRRVUZUTEVsQlFVa3NRMEZCUXl4RlFVRkZMRWxCUVVrc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF6dG5Ra0ZET1VRc1IwRkJSeXhIUVVGSExFMUJRVTBzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNCRUxFTkJRVU03V1VGQlF5eFBRVUZQTEVOQlFWVXNSVUZCUlN4RFFVRkRPMmRDUVVOd1FpeEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRzlDUVVGdlFpeGpRVUZqTEZsQlFWa3NSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJWU3hEUVVGRExFTkJRVU03WjBKQlF6RkZMRTFCUVUwc1EwRkJReXhEUVVGRE8xbEJRMVlzUTBGQlF6dFpRVU5FTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhqUVVGakxGbEJRVmtzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXp0WlFVTndSQ3hKUVVGSkxFbEJRVWs3WjBKQlFVVXNSMEZCUnl4RFFVRkRMRlZCUVZVc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFpRVU12UWl4UFFVRlBMRWRCUVVjc1EwRkJRenRSUVVOaUxFTkJRVU1zUTBGQlF6dEpRVU5LTEVOQlFVTTdTVUZGVHl4TlFVRk5MRU5CUVVNc2MwSkJRWE5DTEVOQlFVTXNZMEZCYzBJN1VVRkRNVVFzVDBGQlR5eExRVUZMTEZWQlFWVXNVMEZCVXl4RFFVVTNRaXhKUVVGWkxFVkJRMW9zU1VGQmVVSXNSVUZEZWtJc1QwRkJOa0k3V1VGRk4wSXNUVUZCVFN4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRMlFzVFVGQlRTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1JVRkJSU3hsUVVGbExFTkJRVU1zVTBGQlV5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVTjJSQ3hEUVVGRExFZEJRVWNzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0WlFVTnFRaXhOUVVGTkxFVkJRVVVzVTBGQlV5eEZRVUZGTEUxQlFVMHNSVUZCUlN4TFFVRkxMRVZCUVVVc1VVRkJVU3hGUVVGRkxFZEJRVWNzVDBGQlR5eERRVUZETzFsQlEzWkVMRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVU5pTEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eExRVUZMTEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVmNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRM1pFTEVOQlFVTTdXVUZEV0N4TlFVRk5MR0ZCUVdFc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4VFFVRlRMRU5CUVVNN1dVRkROVVFzVFVGQlRTeHBRa0ZCYVVJc1IwRkJSeXhEUVVGRExGTkJRVk1zU1VGQlNTeGhRVUZoTEVOQlJYaERMRU5CUVVNN1dVRkRaQ3hKUVVGSkxHbENRVUZwUWl4SlFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF6dG5Ra0ZCUlN4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzYVVKQlFXbENMRU5CUVVNN1dVRkRkRVVzVVVGQlVTeEpRVUZKTEVWQlFVVXNRMEZCUXp0blFrRkRZaXhMUVVGTExIRkNRVUZ4UWl4RFFVRkRMRWxCUVVrc1EwRkJRenRuUWtGRGFFTXNTMEZCU3l4eFFrRkJjVUlzUTBGQlF5eFBRVUZQTzI5Q1FVTm9ReXhOUVVGTk8yZENRVU5TTEV0QlFVc3NjVUpCUVhGQ0xFTkJRVU1zVDBGQlR6dHZRa0ZEYUVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZ0UWl4RFFVRkRMRU5CUVVNN2IwSkJReTlDTEUxQlFVMDdaMEpCUTFJc1MwRkJTeXh4UWtGQmNVSXNRMEZCUXl4SlFVRkpMRU5CUVVNN1owSkJRMmhETEV0QlFVc3NjVUpCUVhGQ0xFTkJRVU1zVDBGQlR6dHZRa0ZEYUVNc1NVRkJTU3hIUVVGSE8zZENRVU5NTEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN2QwSkJRMUFzYVVKQlFYZENPM2RDUVVONFFpeEZRVUZGTEV0QlFVc3NSVUZCUlN4TlFVRk5MRVZCUVVVc1VVRkJVU3hGUVVGRk8zRkNRVU0xUWl4RFFVRkRPMjlDUVVOR0xFMUJRVTA3WjBKQlExSXNTMEZCU3l4eFFrRkJjVUlzUTBGQlF5eFhRVUZYTzI5Q1FVTndReXhOUVVGTk8yZENRVU5TTEV0QlFVc3NjVUpCUVhGQ0xFTkJRVU1zVVVGQlVTeERRVUZETzJkQ1FVTndReXhMUVVGTExIRkNRVUZ4UWl4RFFVRkRMRTFCUVUwc1EwRkJRenRuUWtGRGJFTXNTMEZCU3l4eFFrRkJjVUlzUTBGQlF5eE5RVUZOTEVOQlFVTTdaMEpCUTJ4RExFdEJRVXNzY1VKQlFYRkNMRU5CUVVNc1RVRkJUU3hEUVVGRE8yZENRVU5zUXl4TFFVRkxMSEZDUVVGeFFpeERRVUZETEUxQlFVMHNRMEZCUXp0blFrRkRiRU1zUzBGQlN5eHhRa0ZCY1VJc1EwRkJReXhYUVVGWExFTkJRVU03WjBKQlEzWkRMRXRCUVVzc2NVSkJRWEZDTEVOQlFVTXNVVUZCVVR0dlFrRkRha01zVFVGQlRUdFpRVU5XTEVOQlFVTTdXVUZEUkN4UFFVRlBMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hIUVVGSExFbEJRVWtzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTTNSQ3hEUVVGRExFTkJRVU03U1VGRFNpeERRVUZETzBsQlJVOHNUVUZCVFN4RFFVRkRMRGhDUVVFNFFpeERRVU16UXl4WlFVRnZRaXhGUVVOd1FpeGpRVUZ6UWp0UlFVVjBRaXhQUVVGUExFdEJRVXNzVlVGQlZTeHBRa0ZCYVVJc1EwRkZja01zUjBGQlJ5eEpRVUZYTzFsQlJXUXNUVUZCVFN4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRMlFzVFVGQlRTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1JVRkJSU3haUVVGWkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlF6RkRMRU5CUVVNc1IwRkJSeXhEUVVGRExHbENRVUZwUWl4RFFVRkRMRU5CUVVNN1dVRkZla0lzVVVGQlVTeFpRVUZaTEVWQlFVVXNRMEZCUXp0blFrRkRja0lzUzBGQlN5eHhRa0ZCY1VJc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETzI5Q1FVTnVReXhOUVVGTkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEU5QlFVOHNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJRenR2UWtGRE5VSXNUMEZCVHl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZEYWtNc1IwRkJSeXhGUVVOR0xFOUJRV1VzUlVGQlJTeFRRVUV5UWl4RlFVTTNReXhIUVVGSExFTkJRMG9zUTBGQlF6dG5Ra0ZEU2l4RFFVRkRPMmRDUVVORUxFdEJRVXNzY1VKQlFYRkNMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF6dHZRa0ZEYmtNc1RVRkJUU3hEUVVGRExFZEJRVWNzUlVGQlJTeEpRVUZKTEVWQlFVVXNUMEZCVHl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRE8yOUNRVU5zUXl4UFFVRlBMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNWVUZCVlN4RFFVTnlReXhIUVVGSExFVkJRMFlzVDBGQlpTeEZRVUZGTEZOQlFUSkNMRVZCUXpkRE8zZENRVU5GTEV0QlFVc3NSVUZCUnl4UFFVRmxMRVZCUVVVc1MwRkJTenQzUWtGRE9VSXNUVUZCVFN4RlFVRkhMRTlCUVdVc1JVRkJSU3hOUVVGTk8zZENRVU5vUXl4SlFVRkpPM0ZDUVVORkxFVkJRMUlzUjBGQlJ5eERRVU5LTEVOQlFVTTdaMEpCUTBvc1EwRkJRenRuUWtGRFJDeExRVUZMTEhGQ1FVRnhRaXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTTdiMEpCUTJoRExFMUJRVTBzUTBGQlF5eExRVUZMTEVWQlFVVXNUMEZCVHl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRE8yOUNRVU01UWl4TlFVRk5MRk5CUVZNc1IwRkRXaXhQUVVGbExFVkJRVVVzVTBGQlV5eEpRVUZKTEdOQlFXTXNRMEZCUXl4SFFVRkhMRU5CUVVNN2IwSkJRM0JFTEUxQlFVMHNWMEZCVnl4SFFVRkhMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdiMEpCUXpGRExFbEJRVWtzVDBGQlR5eFhRVUZYTEVOQlFVTXNTVUZCU1N4TFFVRkxMRlZCUVZVN2QwSkJRM2hETEU5QlFVOHNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRVVVzVTBGQlV5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMjlDUVVOcVJDeFBRVUZQTEZkQlFWY3NRMEZCUXl4VFFVRlRMRU5CUVVNc2NVSkJRWEZDTEVOQlFVTXNTVUZCU1N4RlFVRkZMRXRCUVVzc1JVRkJSU3hUUVVGVExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdaMEpCUTJ4R0xFTkJRVU03WjBKQlEwUXNTMEZCU3l4eFFrRkJjVUlzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRPMjlDUVVOb1F5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RlFVRkZMRTlCUVU4c1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF6dHZRa0ZET1VJc1RVRkJUU3hIUVVGSExFZEJRVWM3ZDBKQlExWXNUVUZCVFN4RlFVRkhMRTlCUVdVc1JVRkJSU3hOUVVGTkxFbEJRVWtzUTBGQlF6dDNRa0ZEY2tNc1MwRkJTeXhGUVVGSExFOUJRV1VzUlVGQlJTeExRVUZMTEVsQlFVa3NSVUZCUlR0M1FrRkRjRU1zVVVGQlVTeEZRVUZITEU5QlFXVXNSVUZCUlN4UlFVRlJPM0ZDUVVOeVF5eERRVUZETzI5Q1FVTkdMRTFCUVUwc1YwRkJWeXhIUVVGSExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN2IwSkJRekZETEUxQlFVMHNVMEZCVXl4SFFVRkpMRTlCUVdVc1JVRkJSU3hUUVVGVExFbEJRVWtzWTBGQll5eERRVUZETEVkQlFVY3NRMEZCUXp0dlFrRkRjRVVzU1VGQlNTeFBRVUZQTEZkQlFWY3NRMEZCUXl4SlFVRkpMRXRCUVVzc1ZVRkJWVHQzUWtGRGVFTXNUMEZCVHl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUlVGQlJTeFRRVUZUTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8yOUNRVU4wUkN4UFFVRlBMRmRCUVZjc1EwRkJReXhUUVVGVExFTkJRVU1zY1VKQlFYRkNMRU5CUVVNc1NVRkJTU3hGUVVGRkxFdEJRVXNzUlVGQlJTeFRRVUZUTEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8yZENRVU4yUml4RFFVRkRPMmRDUVVORUxFdEJRVXNzY1VKQlFYRkNMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU1zUTBGQlF6dHZRa0ZEZGtNc1RVRkJUU3hEUVVGRExFZEJRVWNzUlVGQlJTeExRVUZMTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNN2IwSkJRekZDTEU5QlFVOHNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RlFVRkZMRXRCUVVzc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dG5Ra0ZETVVRc1EwRkJRenRuUWtGRFJDeExRVUZMTEhGQ1FVRnhRaXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVOQlFVTTdiMEpCUTI1RExFMUJRVTBzUTBGQlF5eEhRVUZITEVWQlFVVXNTMEZCU3l4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRE8yOUNRVU14UWl4UFFVRlBMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zUjBGQlJ5eERRVUZETzNsQ1FVTjZRaXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEZkQlFWY3NSVUZCUlN4RFFVRkRPM2xDUVVOMFFpeE5RVUZOTEVOQlFVTXNSMEZCUnl4RlFVRkZMRXRCUVVzc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dG5Ra0ZETjBJc1EwRkJRenRuUWtGRFJEdHZRa0ZEUlN4SlFVTkZMRmxCUVZrc1MwRkJTeXh4UWtGQmNVSXNRMEZCUXl4UlFVRlJPM2RDUVVNdlF5eFpRVUZaTEV0QlFVc3NjVUpCUVhGQ0xFTkJRVU1zVFVGQlRUdDNRa0ZETjBNc1dVRkJXU3hMUVVGTExIRkNRVUZ4UWl4RFFVRkRMRTFCUVUwN2QwSkJRemRETEZsQlFWa3NTMEZCU3l4eFFrRkJjVUlzUTBGQlF5eE5RVUZOTzNkQ1FVTTNReXhaUVVGWkxFdEJRVXNzY1VKQlFYRkNMRU5CUVVNc1RVRkJUVHQzUWtGRE4wTXNXVUZCV1N4TFFVRkxMSEZDUVVGeFFpeERRVUZETEZkQlFWYzdkMEpCUTJ4RUxGbEJRVmtzUzBGQlN5eHhRa0ZCY1VJc1EwRkJReXhSUVVGUkxFVkJReTlETEVOQlFVTTdkMEpCUTBRc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXp0M1FrRkRja0lzVDBGQlR5eEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExGTkJRVk1zUTBGQlF5eFpRVUZaTEVWQlFVVXNTMEZCU3l4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8yOUNRVU51UlN4RFFVRkRPMjlDUVVORUxFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNjMEpCUVhOQ0xGbEJRVmtzUlVGQlJTeERRVUZETEVOQlFVTTdXVUZETVVRc1EwRkJRenRSUVVOSUxFTkJRVU1zUTBGQlF6dEpRVU5LTEVOQlFVTTdTVUZGVHl4TlFVRk5MRU5CUVVNc2VVSkJRWGxDTEVOQlFVTXNWVUZCYTBJN1VVRkRla1FzVDBGQlR5eExRVUZMTEZWQlFWVXNXVUZCV1N4RFFVVm9ReXhIUVVGSExFbEJRVmM3V1VGRlpDeE5RVUZOTEVkQlFVY3NSMEZCVVN4SlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeERRVUZETEZsQlFWa3NRMEZCUXl4RFFVRkRPMWxCUXk5RExFbEJRVWtzUTBGQlF6dG5Ra0ZEU0N4SlFVRkpMRWRCUVVjN2IwSkJRVVVzUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl3d1FrRkJNRUlzVlVGQlZTeEhRVUZITEVOQlFVTXNRMEZCUXp0blFrRkROVVFzVFVGQlRTeEZRVUZGTEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUTJRc1RVRkJUU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVXNSVUZCUlN4VlFVRlZMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRM2hETEVOQlFVTXNSMEZCUnl4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8yZENRVU53UWl4TlFVRk5MRmRCUVZjc1IwRkJSeXhKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMmRDUVVNeFF5eE5RVUZOTEZWQlFWVXNSMEZCUnl4dFFrRkJiVUlzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dG5Ra0ZET1VRc1NVRkJTU3hQUVVGUExGZEJRVmNzUTBGQlF5eFZRVUZWTEVOQlFVTXNTMEZCU3l4VlFVRlZMRVZCUVVVc1EwRkJRenR2UWtGRGJFUXNUMEZCVHl4WFFVRlhMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU1zUjBGQlJ5eFZRVUZWTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1owSkJRM0pFTEVOQlFVTTdaMEpCUTBRc1NVRkJTU3hQUVVGUExGZEJRVmNzUTBGQlF5eFRRVUZUTEV0QlFVc3NWVUZCVlN4RlFVRkZMRU5CUVVNN2IwSkJRMmhFTEU5QlFVOHNWMEZCVnl4RFFVRkRMRk5CUVZNc1EwRkJReXhWUVVGVkxFVkJRVVVzUjBGQlJ5eFZRVUZWTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1owSkJReTlFTEVOQlFVTTdaMEpCUTBRc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGRFlpeDFRa0ZCZFVJc1ZVRkJWU3hyUWtGQmEwSXNWMEZCVnl4RlFVRkZMRmRCUVZjc1JVRkJSU3hKUVVGSkxFVkJRVVVzUTBGRGNFWXNRMEZCUXp0WlFVTktMRU5CUVVNN1dVRkJReXhQUVVGUExFTkJRVTBzUlVGQlJTeERRVUZETzJkQ1FVTm9RaXhKUVVGSkxFZEJRVWM3YjBKQlFVVXNSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhwUWtGQmFVSXNWVUZCVlN4VlFVRlZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlF6ZEVMRTFCUVUwc1EwRkJReXhEUVVGRE8xbEJRMVlzUTBGQlF6dFJRVU5JTEVOQlFVTXNRMEZCUXp0SlFVTktMRU5CUVVNN1NVRkZUeXhOUVVGTkxFTkJRVU1zZDBKQlFYZENMRU5CUVVNc1ZVRkJhMEk3VVVGRGVFUXNUMEZCVHl4TFFVRkxMRlZCUVZVc1YwRkJWeXhEUVVVdlFpeEhRVUZITEVsQlFWYzdXVUZGWkN4TlFVRk5MRWRCUVVjc1IwRkJVU3hKUVVGSkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRE8xbEJRemxETEUxQlFVMHNSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVOa0xFMUJRVTBzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZMRVZCUVVVc1ZVRkJWU3hGUVVGRkxFbEJRVWtzUTBGQlF5eERRVU40UXl4RFFVRkRMRWRCUVVjc1EwRkJReXhYUVVGWExFTkJRVU1zUTBGQlF6dFpRVU51UWl4TlFVRk5MRmRCUVZjc1IwRkJSeXhKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUXpGRExFMUJRVTBzVlVGQlZTeEhRVUZITEcxQ1FVRnRRaXhEUVVGRExHZENRVUZuUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xbEJSVGxFTEhGRlFVRnhSVHRaUVVOeVJTeEpRVUZKTEU5QlFVOHNWMEZCVnl4RFFVRkRMRlZCUVZVc1EwRkJReXhMUVVGTExGVkJRVlVzUlVGQlJTeERRVUZETzJkQ1FVTnNSQ3hQUVVGUExGZEJRVmNzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXl4SFFVRkhMRlZCUVZVc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dFpRVU55UkN4RFFVRkRPMWxCUTBRc09FVkJRVGhGTzFsQlF6bEZMRWxCUVVrc1YwRkJWeXhGUVVGRkxFbEJRVWtzU1VGQlNTeFBRVUZQTEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFdEJRVXNzVlVGQlZTeEZRVUZGTEVOQlFVTTdaMEpCUXpWRkxFOUJRVThzVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJReXhIUVVGSExGVkJRVlVzUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTXhSQ3hEUVVGRE8xbEJRMFFzYVVOQlFXbERPMWxCUTJwRExFbEJRVWtzVDBGQlR5eFhRVUZYTEVOQlFVTXNVMEZCVXl4TFFVRkxMRlZCUVZVc1JVRkJSU3hEUVVGRE8yZENRVU5vUkN4UFFVRlBMRmRCUVZjc1EwRkJReXhUUVVGVExFTkJRVU1zVlVGQlZTeEZRVUZGTEVkQlFVY3NWVUZCVlN4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJReTlFTEVOQlFVTTdXVUZEUkN4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVOaUxGZEJRVmNzVlVGQlZTeHJRa0ZCYTBJc1YwRkJWeXhGUVVGRkxGZEJRVmNzUlVGQlJTeEpRVUZKTEdOQlFXTXNRMEZEY0VZc1EwRkJRenRSUVVOS0xFTkJRVU1zUTBGQlF6dEpRVU5LTEVOQlFVTTdTVUZGVHl4TlFVRk5MRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNTVUZCVnp0UlFVTjZReXhKUVVGSkxFbEJRVWtzUTBGQlF5eE5RVUZOTEV0QlFVc3NRMEZCUXp0WlFVRkZMRTlCUVU4c1NVRkJTU3hEUVVGRE8xRkJRMjVETEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTI1RExFbEJRMFVzU1VGQlNUdFpRVU5LTEU5QlFVOHNTVUZCU1N4TFFVRkxMRkZCUVZFN1dVRkRlRUlzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVOd1FpeERRVUZETzFsQlEwUXNUVUZCVFN4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETzFsQlF6VkNMRTFCUVUwc1dVRkJXU3hIUVVGSExGRkJRVkVzUTBGQlF5eFRRVUZUTEV0QlFVc3NVMEZCVXl4RFFVRkRPMWxCUTNSRUxFMUJRVTBzVVVGQlVTeEhRVUZITEZGQlFWRXNRMEZCUXl4TFFVRkxMRXRCUVVzc1UwRkJVeXhEUVVGRE8xbEJRemxETEUxQlFVMHNVMEZCVXl4SFFVRkhMRkZCUVZFc1EwRkJReXhOUVVGTkxFdEJRVXNzVTBGQlV5eERRVUZETzFsQlEyaEVMRWxCUVVrc1EwRkJReXhaUVVGWkxFbEJRVWtzUTBGQlF5eFJRVUZSTEVsQlFVa3NRMEZCUXl4VFFVRlRPMmRDUVVGRkxFOUJRVThzU1VGQlNTeERRVUZETzFsQlF6RkVMRTFCUVUwc1RVRkJUU3hIUVVGVkxFVkJRVVVzUTBGQlF6dFpRVU42UWl4SlFVRkpMRmxCUVZrN1owSkJRVVVzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03YVVKQlF6ZERMRWxCUVVrc1VVRkJVU3hKUVVGSkxGTkJRVk03WjBKQlFVVXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dFpRVU4yUkN4SlFVRkpMRkZCUVZFN1owSkJRVVVzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03V1VGRE1VTXNTVUZCU1N4VFFVRlRPMmRDUVVGRkxFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xbEJRelZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRWxCUVVrc1JVRkJSU3hIUVVGSExFMUJRVTBzUTBGQlF5eERRVUZETzFGQlF6bENMRU5CUVVNN1VVRkRSQ3hQUVVGUExFbEJRVWtzUTBGQlF6dEpRVU5rTEVOQlFVTTdTVUZGVHl4TlFVRk5MRU5CUVVNc2MwSkJRWE5DTEVOQlEyNURMRmRCUVd0RExFVkJRMnhETEdOQlFYTkNPMUZCUlhSQ0xFOUJRVTg3V1VGRFRDeHhRa0ZCY1VJc1EwRkJReXhYUVVGWExFVkJRVVVzVFVGQlRTeERRVUZETzFsQlF6RkRMRmxCUVZrc1EwRkJReXhGUVVGRkxFOUJRVThzUlVGQlJTeG5Ra0ZCWjBJc1kwRkJZeXhIUVVGSExFVkJRVVVzUTBGQlF6dFpRVU0xUkN4UFFVRlBMRU5CUVVNN1owSkJRMDRzVjBGQlZ5eEZRVUZGTEdWQlFXVXNZMEZCWXl4RlFVRkZPMmRDUVVNMVF5eEpRVUZKTEVWQlFVVXNUVUZCVFN4RFFVRkRMR0ZCUVdFc1EwRkJReXhOUVVGTkxFVkJRVVVzVjBGQlZ5eERRVUZETzJGQlEyaEVMRU5CUVVNN1dVRkRSaXhyUWtGQmEwSXNRMEZCUXp0blFrRkRha0lzVjBGQlZ5eEZRVUZGTEVkQlFVY3NZMEZCWXl4M1FrRkJkMEk3WjBKQlEzUkVMRTFCUVUwc1JVRkJSU3hGUVVGRkxFbEJRVWtzUlVGQlJTeGhRVUZoTEVOQlFVTXNWMEZCVnl4RFFVRkRMRVZCUVVVN1lVRkROME1zUTBGQlF6dFpRVU5HTEhGQ1FVRnhRaXhEUVVGRExFVkJRVVVzVjBGQlZ5eEZRVUZGTERSQ1FVRTBRaXhGUVVGRkxFTkJRVU03V1VGRGNFVXNPRUpCUVRoQ0xFTkJRVU03WjBKQlF6ZENMRmRCUVZjc1JVRkJSU3d5UTBGQk1rTTdZVUZEZWtRc1EwRkJRenRUUVVOSUxFTkJRVU03U1VGRFNpeERRVUZETzBsQlJVOHNUVUZCVFN4RFFVRkRMRzlDUVVGdlFpeERRVU5xUXl4WFFVRnJReXhGUVVOc1F5eGpRVUZ6UWp0UlFVVjBRaXhQUVVGUE8xbEJRMHdzY1VKQlFYRkNMRU5CUVVNc1YwRkJWeXhGUVVGRkxFMUJRVTBzUlVGQlJTeE5RVUZOTEVOQlFVTTdXVUZEYkVRc1dVRkJXU3hEUVVGRExFVkJRVVVzVDBGQlR5eEZRVUZGTEdkQ1FVRm5RaXhqUVVGakxFZEJRVWNzUlVGQlJTeERRVUZETzFsQlF6VkVMRTlCUVU4c1EwRkJRenRuUWtGRFRpeFhRVUZYTEVWQlFVVXNaVUZCWlN4alFVRmpMRVZCUVVVN1owSkJRelZETEUxQlFVMHNSVUZCUlR0dlFrRkRUaXhKUVVGSkxFVkJRVVVzVDBGQlR6dHZRa0ZEWWl4TFFVRkxMRVZCUVVVc1JVRkJSU3hKUVVGSkxFVkJRVVVzWVVGQllTeERRVUZETEZkQlFWY3NRMEZCUXl4RlFVRkZPMmxDUVVNMVF6dGhRVU5HTEVOQlFVTTdXVUZEUml4clFrRkJhMElzUTBGQlF6dG5Ra0ZEYWtJc1YwRkJWeXhGUVVGRkxFZEJRVWNzWTBGQll5eDNRa0ZCZDBJN1owSkJRM1JFTEUxQlFVMHNSVUZCUlR0dlFrRkRUaXhKUVVGSkxFVkJRVVVzVDBGQlR6dHZRa0ZEWWl4TFFVRkxMRVZCUVVVc1JVRkJSU3hKUVVGSkxFVkJRVVVzWVVGQllTeERRVUZETEZkQlFWY3NRMEZCUXl4RlFVRkZPMmxDUVVNMVF6dGhRVU5HTEVOQlFVTTdXVUZEUml4eFFrRkJjVUlzUTBGQlF5eEZRVUZGTEZkQlFWY3NSVUZCUlN3MFFrRkJORUlzUlVGQlJTeERRVUZETzFsQlEzQkZMRGhDUVVFNFFpeERRVUZETzJkQ1FVTTNRaXhYUVVGWExFVkJRVVVzTWtOQlFUSkRPMkZCUTNwRUxFTkJRVU03VTBGRFNDeERRVUZETzBsQlEwb3NRMEZCUXp0SlFVVlBMRTFCUVUwc1EwRkJReXhyUWtGQmEwSXNRMEZETDBJc1YwRkJhME1zUlVGRGJFTXNZMEZCYzBJN1VVRkZkRUlzVDBGQlR6dFpRVU5NTEhGQ1FVRnhRaXhEUVVGRExGZEJRVmNzUlVGQlJTeExRVUZMTEVWQlFVVXNUVUZCVFN4RFFVRkRPMWxCUTJwRUxGbEJRVmtzUTBGQlF5eEZRVUZGTEU5QlFVOHNSVUZCUlN4WlFVRlpMR05CUVdNc2EwSkJRV3RDTEVWQlFVVXNRMEZCUXp0WlFVTjJSU3hSUVVGUkxFTkJRVU1zUlVGQlJTeEpRVUZKTEVWQlFVVXNTMEZCU3l4RlFVRkZMRkZCUVZFc1JVRkJSU3hKUVVGSkxFVkJRVVVzU1VGQlNTeEZRVUZGTEU5QlFVOHNSVUZCUlN4RFFVRkRPMWxCUTNoRUxHRkJRV0VzUTBGQlF6dG5Ra0ZEV2l4WFFVRlhMRVZCUVVVc1IwRkJSeXhqUVVGakxEQkNRVUV3UWp0blFrRkRlRVFzVFVGQlRTeEZRVUZGTzI5Q1FVTk9MRWxCUVVrc1JVRkJSU3hQUVVGUE8yOUNRVU5pTEV0QlFVc3NSVUZCUlN4RlFVRkZMRWxCUVVrc1JVRkJSU3hoUVVGaExFTkJRVU1zVjBGQlZ5eERRVUZETEVWQlFVVTdhVUpCUXpWRE8yRkJRMFlzUTBGQlF6dFpRVU5HTEcxQ1FVRnRRaXhEUVVGRE8yZENRVU5zUWl4WFFVRlhMRVZCUVVVc1RVRkJUU3hqUVVGakxEQkRRVUV3UXp0aFFVTTFSU3hEUVVGRE8xTkJRMGdzUTBGQlF6dEpRVU5LTEVOQlFVTTdTVUZGVHl4TlFVRk5MRU5CUVVNc2IwSkJRVzlDTEVOQlEycERMRmRCUVd0RExFVkJRMnhETEdOQlFYTkNMRVZCUTNSQ0xHRkJRV2xETzFGQlJXcERMRTlCUVU4N1dVRkRUQ3h4UWtGQmNVSXNRMEZCUXl4WFFVRlhMRVZCUVVVc1MwRkJTeXhGUVVGRkxFMUJRVTBzUTBGQlF6dFpRVU5xUkN4clFrRkJhMElzUTBGQlF5eGhRVUZoTEVOQlFVTTdXVUZEYWtNc1dVRkJXU3hEUVVGRE8yZENRVU5ZTEU5QlFVOHNSVUZCUlN4dlFrRkJiMElzWTBGQll5dzJRa0ZCTmtJN1lVRkRla1VzUTBGQlF6dFpRVU5HTEU5QlFVOHNRMEZCUXp0blFrRkRUaXhYUVVGWExFVkJRVVVzTmtOQlFUWkRMR05CUVdNc1JVRkJSVHRuUWtGRE1VVXNUVUZCVFN4RlFVRkZPMjlDUVVOT0xFbEJRVWtzUlVGQlJTeFBRVUZQTzI5Q1FVTmlMRWxCUVVrc1JVRkJSU3hoUVVGaExFTkJRVU1zVFVGQlRTeERRVUZETEdGQlFXRXNRMEZCUXl4TlFVRk5MRVZCUVVVc1YwRkJWeXhEUVVGRExFTkJRVU03YVVKQlF5OUVPMkZCUTBZc1EwRkJRenRaUVVOR0xHRkJRV0VzUTBGQlF6dG5Ra0ZEV2l4WFFVRlhMRVZCUVVVc1IwRkJSeXhqUVVGakxIZENRVUYzUWp0blFrRkRkRVFzVFVGQlRTeEZRVUZGTzI5Q1FVTk9MRWxCUVVrc1JVRkJSU3hQUVVGUE8yOUNRVU5pTEV0QlFVc3NSVUZCUlN4RlFVRkZMRWxCUVVrc1JVRkJSU3hoUVVGaExFTkJRVU1zVjBGQlZ5eERRVUZETEVWQlFVVTdhVUpCUXpWRE8yRkJRMFlzUTBGQlF6dFpRVU5HTEcxQ1FVRnRRaXhEUVVGRE8yZENRVU5zUWl4WFFVRlhMRVZCUVVVc1RVRkJUU3hqUVVGakxEQkRRVUV3UXp0aFFVTTFSU3hEUVVGRE8xbEJRMFlzY1VKQlFYRkNMRU5CUVVNc1JVRkJSU3hYUVVGWExFVkJRVVVzTkVKQlFUUkNMRVZCUVVVc1EwRkJRenRUUVVOeVJTeERRVUZETzBsQlEwb3NRMEZCUXp0SlFVVlBMRTFCUVUwc1EwRkJReXh2UWtGQmIwSXNRMEZEYWtNc1YwRkJhME1zUlVGRGJFTXNZMEZCYzBJc1JVRkRkRUlzWVVGQmFVTTdVVUZGYWtNc1QwRkJUenRaUVVOTUxIRkNRVUZ4UWl4RFFVRkRMRmRCUVZjc1JVRkJSU3hSUVVGUkxFVkJRVVVzVFVGQlRTeERRVUZETzFsQlEzQkVMR3RDUVVGclFpeERRVUZETEdGQlFXRXNRMEZCUXp0WlFVTnFReXhaUVVGWkxFTkJRVU1zUlVGQlJTeFBRVUZQTEVWQlFVVXNWVUZCVlN4alFVRmpMR3RDUVVGclFpeEZRVUZGTEVOQlFVTTdXVUZEY2tVc1VVRkJVU3hEUVVGRExFVkJRVVVzU1VGQlNTeEZRVUZGTEV0QlFVc3NSVUZCUlN4UlFVRlJMRVZCUVVVc1NVRkJTU3hGUVVGRkxFbEJRVWtzUlVGQlJTeFBRVUZQTEVWQlFVVXNRMEZCUXp0WlFVTjRSQ3hoUVVGaExFTkJRVU03WjBKQlExb3NWMEZCVnl4RlFVRkZMRWRCUVVjc1kwRkJZeXgzUWtGQmQwSTdaMEpCUTNSRUxFMUJRVTBzUlVGQlJUdHZRa0ZEVGl4SlFVRkpMRVZCUVVVc1QwRkJUenR2UWtGRFlpeExRVUZMTEVWQlFVVXNSVUZCUlN4SlFVRkpMRVZCUVVVc1lVRkJZU3hEUVVGRExGZEJRVmNzUTBGQlF5eEZRVUZGTzJsQ1FVTTFRenRoUVVOR0xFTkJRVU03V1VGRFJpeHRRa0ZCYlVJc1EwRkJRenRuUWtGRGJFSXNWMEZCVnl4RlFVRkZMRTFCUVUwc1kwRkJZeXd3UTBGQk1FTTdZVUZETlVVc1EwRkJRenRUUVVOSUxFTkJRVU03U1VGRFNpeERRVUZETzBsQlJVOHNUVUZCVFN4RFFVRkRMR05CUVdNc1EwRkRNMElzVjBGQmEwTXNSVUZEYkVNc1kwRkJjMElzUlVGRGRFSXNZVUZCYVVNc1JVRkRha01zVFVGQll6dFJRVVZrTEU5QlFVODdXVUZEVEN4eFFrRkJjVUlzUTBGQlF5eFhRVUZYTEVWQlFVVXNTMEZCU3l4RlFVRkZMRTFCUVUwc1EwRkJRenRaUVVOcVJDeHJRa0ZCYTBJc1EwRkJReXhoUVVGaExFTkJRVU03V1VGRGFrTXNXVUZCV1N4RFFVRkRMRVZCUVVVc1QwRkJUeXhGUVVGRkxHTkJRV01zWTBGQll5eG5Ra0ZCWjBJc1JVRkJSU3hEUVVGRE8xbEJRM1pGTEdGQlFXRXNRMEZCUXp0blFrRkRXaXhYUVVGWExFVkJRVVVzUjBGQlJ5eGpRVUZqTERCQ1FVRXdRanRuUWtGRGVFUXNUVUZCVFN4RlFVRkZMRVZCUVVVc1NVRkJTU3hGUVVGRkxHRkJRV0VzUTBGQlF5eFhRVUZYTEVOQlFVTXNSVUZCUlR0aFFVTTNReXhEUVVGRE8xbEJRMFlzYlVKQlFXMUNMRU5CUVVNN1owSkJRMnhDTEZkQlFWY3NSVUZCUlN4TlFVRk5MR05CUVdNc01FTkJRVEJETzJGQlF6VkZMRU5CUVVNN1UwRkRTQ3hEUVVGRE8wbEJRMG9zUTBGQlF6dEpRVVZQTEUxQlFVMHNRMEZCUXl4blFrRkJaMElzUTBGRE4wSXNWMEZCYTBNc1JVRkRiRU1zWTBGQmMwSXNSVUZEZEVJc1lVRkJhVU1zUlVGRGFrTXNUVUZCWXp0UlFVVmtMRTlCUVU4N1dVRkRUQ3h4UWtGQmNVSXNRMEZCUXl4WFFVRlhMRVZCUVVVc1MwRkJTeXhGUVVGRkxFMUJRVTBzUTBGQlF6dFpRVU5xUkN4clFrRkJhMElzUTBGQlF5eGhRVUZoTEVOQlFVTTdXVUZEYWtNc1dVRkJXU3hEUVVGRE8yZENRVU5ZTEU5QlFVOHNSVUZCUlN4MVFrRkJkVUlzWTBGQll5dzJRa0ZCTmtJN1lVRkROVVVzUTBGQlF6dFpRVU5HTEU5QlFVOHNRMEZCUXp0blFrRkRUaXhYUVVGWExFVkJRVVVzSzBOQlFTdERMR05CUVdNc1JVRkJSVHRuUWtGRE5VVXNTVUZCU1N4RlFVRkZMRTFCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zVFVGQlRTeEZRVUZGTEZkQlFWY3NRMEZCUXp0aFFVTm9SQ3hEUVVGRE8xbEJRMFlzWVVGQllTeERRVUZETzJkQ1FVTmFMRmRCUVZjc1JVRkJSU3hIUVVGSExHTkJRV01zZDBKQlFYZENPMmRDUVVOMFJDeE5RVUZOTEVWQlFVVXNSVUZCUlN4SlFVRkpMRVZCUVVVc1lVRkJZU3hEUVVGRExGZEJRVmNzUTBGQlF5eEZRVUZGTzJGQlF6ZERMRU5CUVVNN1dVRkRSaXh0UWtGQmJVSXNRMEZCUXp0blFrRkRiRUlzVjBGQlZ5eEZRVUZGTEUxQlFVMHNZMEZCWXl3d1EwRkJNRU03WVVGRE5VVXNRMEZCUXp0WlFVTkdMSEZDUVVGeFFpeERRVUZETEVWQlFVVXNWMEZCVnl4RlFVRkZMRFJDUVVFMFFpeEZRVUZGTEVOQlFVTTdVMEZEY2tVc1EwRkJRenRKUVVOS0xFTkJRVU03U1VGRlR5eE5RVUZOTEVOQlFVTXNaMEpCUVdkQ0xFTkJRemRDTEZkQlFXdERMRVZCUTJ4RExHTkJRWE5DTEVWQlEzUkNMR0ZCUVdsRExFVkJRMnBETEUxQlFXTTdVVUZGWkN4UFFVRlBPMWxCUTB3c2NVSkJRWEZDTEVOQlFVTXNWMEZCVnl4RlFVRkZMRkZCUVZFc1JVRkJSU3hOUVVGTkxFTkJRVU03V1VGRGNFUXNhMEpCUVd0Q0xFTkJRVU1zWVVGQllTeERRVUZETzFsQlEycERMRmxCUVZrc1EwRkJReXhGUVVGRkxFOUJRVThzUlVGQlJTeFpRVUZaTEdOQlFXTXNaMEpCUVdkQ0xFVkJRVVVzUTBGQlF6dFpRVU55UlN4aFFVRmhMRU5CUVVNN1owSkJRMW9zVjBGQlZ5eEZRVUZGTEVkQlFVY3NZMEZCWXl4M1FrRkJkMEk3WjBKQlEzUkVMRTFCUVUwc1JVRkJSU3hGUVVGRkxFbEJRVWtzUlVGQlJTeGhRVUZoTEVOQlFVTXNWMEZCVnl4RFFVRkRMRVZCUVVVN1lVRkROME1zUTBGQlF6dFpRVU5HTEcxQ1FVRnRRaXhEUVVGRE8yZENRVU5zUWl4WFFVRlhMRVZCUVVVc1RVRkJUU3hqUVVGakxEQkRRVUV3UXp0aFFVTTFSU3hEUVVGRE8xTkJRMGdzUTBGQlF6dEpRVU5LTEVOQlFVTTdTVUZGVHl4TlFVRk5MRU5CUVVNc2JVSkJRVzFDTEVOQlEyaERMRmRCUVd0RExFVkJRMnhETEdOQlFYTkNPMUZCUlhSQ0xFOUJRVTg3V1VGRFRDeHhRa0ZCY1VJc1EwRkJReXhYUVVGWExFVkJRVVVzUzBGQlN5eEZRVUZGTEhsQ1FVRjVRaXhEUVVGRE8xbEJRM0JGTEZsQlFWa3NRMEZCUXp0blFrRkRXQ3hQUVVGUExFVkJRVVVzYjBOQlFXOURMR05CUVdNc1IwRkJSenRoUVVNdlJDeERRVUZETzFsQlEwWXNVVUZCVVN4RFFVRkRMRVZCUVVVc1NVRkJTU3hGUVVGRkxGRkJRVkVzUlVGQlJTeFhRVUZYTEVWQlFVVXNiVU5CUVcxRExFVkJRVVVzUTBGQlF6dFpRVU01UlN4UlFVRlJMRU5CUVVNN1owSkJRMUFzU1VGQlNTeEZRVUZGTEUxQlFVMDdaMEpCUTFvc1YwRkJWeXhGUVVGRkxHdEZRVUZyUlR0aFFVTm9SaXhEUVVGRE8xbEJRMFlzVVVGQlVTeERRVUZETzJkQ1FVTlFMRWxCUVVrc1JVRkJSU3hYUVVGWE8yZENRVU5xUWl4UlFVRlJMRVZCUVVVc1NVRkJTVHRuUWtGRFpDeEpRVUZKTEVWQlFVVXNZMEZCWXp0blFrRkRjRUlzVjBGQlZ5eEZRVUZGTEdkRFFVRm5RenRoUVVNNVF5eERRVUZETzFsQlEwWXNVVUZCVVN4RFFVRkRMRVZCUVVVc1NVRkJTU3hGUVVGRkxFOUJRVThzUlVGQlJTeFJRVUZSTEVWQlFVVXNTVUZCU1N4RlFVRkZMRmRCUVZjc1JVRkJSU3h2UTBGQmIwTXNSVUZCUlN4RFFVRkRPMWxCUXpsR0xGRkJRVkVzUTBGQlF5eEZRVUZGTEVsQlFVa3NSVUZCUlN4UlFVRlJMRVZCUVVVc1VVRkJVU3hGUVVGRkxFbEJRVWtzUlVGQlJTeFhRVUZYTEVWQlFVVXNiME5CUVc5RExFVkJRVVVzUTBGQlF6dFpRVU12Uml4aFFVRmhMRU5CUVVNc1JVRkJSU3hYUVVGWExFVkJRVVVzUjBGQlJ5eGpRVUZqTEdkQ1FVRm5RaXhGUVVGRkxFTkJRVU03V1VGRGFrVXNiVUpCUVcxQ0xFTkJRVU03WjBKQlEyeENMRmRCUVZjc1JVRkJSU3hOUVVGTkxHTkJRV01zTUVOQlFUQkRPMkZCUXpWRkxFTkJRVU03VTBGRFNDeERRVUZETzBsQlEwb3NRMEZCUXp0SlFVVlBMRTFCUVUwc1EwRkJReXd5UWtGQk1rSXNRMEZEZUVNc1YwRkJhME1zUlVGRGJFTXNZMEZCYzBJc1JVRkRkRUlzU1VGQldTeEZRVU5hTEZsQlFXOUNPMUZCUlhCQ0xFMUJRVTBzU1VGQlNTeEhRVUY1UkR0WlFVTnFSU3h4UWtGQmNVSXNRMEZCUXl4WFFVRlhMRVZCUVVVc1MwRkJTeXhGUVVGRkxFbEJRVWtzUTBGQlF6dFpRVU12UXl4WlFVRlpMRU5CUVVNc1JVRkJSU3hQUVVGUExFVkJRVVVzV1VGQldTeGpRVUZqTEZkQlFWY3NSVUZCUlN4RFFVRkRPMWxCUTJoRkxHRkJRV0VzUTBGQlF5eEZRVUZGTEZkQlFWY3NSVUZCUlN4SFFVRkhMR05CUVdNc01FSkJRVEJDTEVWQlFVVXNRMEZCUXp0VFFVTTFSU3hEUVVGRE8xRkJSVVlzVFVGQlRTeFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOc1JTeFJRVUZSTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFVkJRVVU3V1VGRGRrSXNUVUZCVFN4SlFVRkpMRWRCUVVjc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eEhRVUZITEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN1dVRkRiRU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1JVRkJSU3hKUVVGSkxFVkJRVVVzVjBGQlZ5eEZRVUZGTEU5QlFVOHNTVUZCU1N4WlFVRlpMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGRFVXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkZTQ3hKUVVORkxFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNVMEZCVXl4RFFVRkRPMWxCUXpGQ0xFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNZVUZCWVN4RFFVRkRPMWxCUXpsQ0xFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNUMEZCVHl4RFFVRkRPMWxCUTNoQ0xFbEJRVWtzUTBGQlF5eFZRVUZWTEVOQlFVTXNUMEZCVHl4RFFVRkRMRVZCUTNoQ0xFTkJRVU03V1VGRFJDeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVTlFMRkZCUVZFc1EwRkJRenRuUWtGRFVDeEpRVUZKTEVWQlFVVXNWMEZCVnp0blFrRkRha0lzVVVGQlVTeEZRVUZGTEVsQlFVazdaMEpCUTJRc1NVRkJTU3hGUVVGRkxHTkJRV003WjBKQlEzQkNMRmRCUVZjc1JVRkJSU3huUWtGQlowSTdZVUZET1VJc1EwRkJReXhEUVVOSUxFTkJRVU03VVVGRFNpeERRVUZETzFGQlEwUXNTVUZCU1N4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExHRkJRV0VzUTBGQlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1QwRkJUeXhEUVVGRExFVkJRVVVzUTBGQlF6dFpRVU12UkN4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVOUUxGRkJRVkVzUTBGQlF5eEZRVUZGTEVsQlFVa3NSVUZCUlN4UFFVRlBMRVZCUVVVc1VVRkJVU3hGUVVGRkxFdEJRVXNzUlVGQlJTeFhRVUZYTEVWQlFVVXNWMEZCVnl4RlFVRkZMRU5CUVVNc1JVRkRkRVVzVVVGQlVTeERRVUZETEVWQlFVVXNTVUZCU1N4RlFVRkZMRkZCUVZFc1JVRkJSU3hSUVVGUkxFVkJRVVVzUzBGQlN5eEZRVUZGTEZkQlFWY3NSVUZCUlN4aFFVRmhMRVZCUVVVc1EwRkJReXhGUVVONlJTeFJRVUZSTEVOQlFVTXNSVUZCUlN4SlFVRkpMRVZCUVVVc1ZVRkJWU3hGUVVGRkxGRkJRVkVzUlVGQlJTeExRVUZMTEVWQlFVVXNWMEZCVnl4RlFVRkZMR2REUVVGblF5eEZRVUZGTEVOQlFVTXNRMEZETDBZc1EwRkJRenRSUVVOS0xFTkJRVU03VVVGRlJDeEpRVUZKTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1dVRkJXU3hEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4VFFVRlRMRU5CUVVNc1JVRkJSU3hEUVVGRE8xbEJRMmhGTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUTFBc2JVSkJRVzFDTEVOQlFVTTdaMEpCUTJ4Q0xGZEJRVmNzUlVGQlJTeE5RVUZOTEdOQlFXTXNNRU5CUVRCRE8yRkJRelZGTEVOQlFVTXNRMEZEU0N4RFFVRkRPMUZCUTBvc1EwRkJRenRSUVVWRUxFbEJRMFVzV1VGQldTeExRVUZMTEhGQ1FVRnhRaXhEUVVGRExGRkJRVkU3V1VGREwwTXNXVUZCV1N4TFFVRkxMSEZDUVVGeFFpeERRVUZETEUxQlFVMDdXVUZETjBNc1dVRkJXU3hMUVVGTExIRkNRVUZ4UWl4RFFVRkRMRTFCUVUwc1JVRkROME1zUTBGQlF6dFpRVU5FTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVGRExFVkJRVVVzVjBGQlZ5eEZRVUZGTEdOQlFXTXNZMEZCWXl4SFFVRkhMRVZCUVVVc1NVRkJTU3hGUVVGRkxFMUJRVTBzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTXpSaXhEUVVGRE8xRkJRMFFzU1VGQlNTeFpRVUZaTEV0QlFVc3NjVUpCUVhGQ0xFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTTdXVUZEZGtRc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eGhRVUZoTEVOQlFVTXNSVUZCUlN4WFFVRlhMRVZCUVVVc2RVSkJRWFZDTEdOQlFXTXNSMEZCUnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNSSExFTkJRVU03VVVGRlJDeFBRVUZQTEVsQlFVa3NRMEZCUXp0SlFVTmtMRU5CUVVNN1NVRkZUeXhOUVVGTkxFTkJRVU1zYTBKQlFXdENMRU5CUXk5Q0xGVkJRV3RDTEVWQlEyeENMRk5CUVdsQ0xFVkJRMnBDTEZGQlFXZENMRVZCUTJoQ0xIRkNRVUU0UWl4TFFVRkxPMUZCUlc1RExFMUJRVTBzYVVKQlFXbENMRWRCUVVjc1EwRkJReXhEUVVGVExFVkJRVmtzUlVGQlJTeERRVU5vUkN4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEZWQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUlhaRkxFMUJRVTBzWVVGQllTeEhRVUZITEdsQ1FVRnBRaXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF6dFpRVU5vUlN4SlFVRkpPMWxCUTBvc1YwRkJWeXhGUVVGRkxFZEJRVWNzU1VGQlNTd3dRa0ZCTUVJN1dVRkRPVU1zVVVGQlVTeEZRVUZGTEVsQlFVazdXVUZEWkN4SlFVRkpMRVZCUVVVc1RVRkJUVHRUUVVOaUxFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJVb3NUVUZCVFN4VlFVRlZMRWRCUVhsRU8xbEJRM1pGTEVkQlFVY3NZVUZCWVN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRM2hETEZsQlFWa3NRMEZCUXl4RlFVRkZMRTlCUVU4c1JVRkJSU3d5UWtGQk1rSXNWVUZCVlN4SlFVRkpMRVZCUVVVc1EwRkJRenRaUVVOd1JTeGhRVUZoTEVOQlFVTXNSVUZCUlN4WFFVRlhMRVZCUVVVc1owTkJRV2RETEVWQlFVVXNRMEZCUXp0WlFVTm9SU3h2UWtGQmIwSXNRMEZCUXl4RlFVRkZMRmRCUVZjc1JVRkJSU3h2UTBGQmIwTXNSVUZCUlN4RFFVRkRPMU5CUXpWRkxFTkJRVU03VVVGRlJpeEpRVUZKTEZGQlFWRXNTMEZCU3l4TFFVRkxMRWxCUVVrc2EwSkJRV3RDTEVWQlFVVXNRMEZCUXp0WlFVTTNReXhWUVVGVkxFTkJRVU1zU1VGQlNTeERRVU5pTEZGQlFWRXNRMEZCUXp0blFrRkRVQ3hKUVVGSkxFVkJRVVVzVjBGQlZ6dG5Ra0ZEYWtJc1VVRkJVU3hGUVVGRkxFdEJRVXM3WjBKQlEyWXNTVUZCU1N4RlFVRkZMR05CUVdNN1owSkJRM0JDTEZkQlFWY3NSVUZCUlN4blEwRkJaME03WVVGRE9VTXNRMEZCUXl4RlFVTkdMRkZCUVZFc1EwRkJReXhGUVVGRkxFbEJRVWtzUlVGQlJTeFBRVUZQTEVWQlFVVXNVVUZCVVN4RlFVRkZMRXRCUVVzc1JVRkJSU3hYUVVGWExFVkJRVVVzYjBKQlFXOUNMRVZCUVVVc1EwRkJReXhGUVVNdlJTeFJRVUZSTEVOQlFVTXNSVUZCUlN4SlFVRkpMRVZCUVVVc1VVRkJVU3hGUVVGRkxGRkJRVkVzUlVGQlJTeExRVUZMTEVWQlFVVXNWMEZCVnl4RlFVRkZMRzlDUVVGdlFpeEZRVUZGTEVOQlFVTXNRMEZEYWtZc1EwRkJRenRSUVVOS0xFTkJRVU03VVVGRlJDeFBRVUZQTEZWQlFWVXNRMEZCUXp0SlFVTndRaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIc2dRMjl1ZEhKdmJHeGxjaXdnVUdGeVlXMHNJRkYxWlhKNUxDQlNaWE53YjI1elpTQjlJR1p5YjIwZ1hDSkFibVZ6ZEdwekwyTnZiVzF2Ymx3aU8xeHVhVzF3YjNKMElIdGNiaUFnUVhCcFFtRmtVbVZ4ZFdWemRGSmxjM0J2Ym5ObExGeHVJQ0JCY0dsQ2IyUjVMRnh1SUNCQmNHbERjbVZoZEdWa1VtVnpjRzl1YzJVc1hHNGdJRUZ3YVVWNGRISmhUVzlrWld4ekxGeHVJQ0JCY0dsT2IwTnZiblJsYm5SU1pYTndiMjV6WlN4Y2JpQWdRWEJwVG05MFJtOTFibVJTWlhOd2IyNXpaU3hjYmlBZ1FYQnBUMnRTWlhOd2IyNXpaU3hjYmlBZ1FYQnBUM0JsY21GMGFXOXVMRnh1SUNCQmNHbFFZWEpoYlN4Y2JpQWdRWEJwVVhWbGNua3NYRzRnSUVGd2FWUmhaM01zWEc0Z0lFRndhVlZ1Y0hKdlkyVnpjMkZpYkdWRmJuUnBkSGxTWlhOd2IyNXpaU3hjYmlBZ1oyVjBVMk5vWlcxaFVHRjBhQ3hjYm4wZ1puSnZiU0JjSWtCdVpYTjBhbk12YzNkaFoyZGxjbHdpTzF4dWFXMXdiM0owSUh0Y2JpQWdkSGx3WlNCRWFYSmxZM1JwYjI1TWFXMXBkRTltWm5ObGRDeGNiaUFnVFc5a1pXeFRaWEoyYVdObExGeHVJQ0JQY21SbGNrUnBjbVZqZEdsdmJpeGNiaUFnVUdWeWMybHpkR1Z1WTJWTFpYbHpMRnh1SUNCUWNtVndZWEpsWkZOMFlYUmxiV1Z1ZEV0bGVYTXNYRzRnSUhSNWNHVWdVbVZ3Ynl4Y2JpQWdVbVZ3YjNOcGRHOXllU3hjYmlBZ1UyVnlkbWxqWlN4Y2JuMGdabkp2YlNCY0lrQmtaV05oWmkxMGN5OWpiM0psWENJN1hHNXBiWEJ2Y25RZ2V5Qk5iMlJsYkN3Z1RXOWtaV3hEYjI1emRISjFZM1J2Y2lCOUlHWnliMjBnWENKQVpHVmpZV1l0ZEhNdlpHVmpiM0poZEc5eUxYWmhiR2xrWVhScGIyNWNJanRjYm1sdGNHOXlkQ0I3SUV4dloyZHBibWNzSUhSdlMyVmlZV0pEWVhObElIMGdabkp2YlNCY0lrQmtaV05oWmkxMGN5OXNiMmRuYVc1blhDSTdYRzVwYlhCdmNuUWdlMXh1SUNCQ2RXeHJRM0oxWkU5d1pYSmhkR2x2Ymt0bGVYTXNYRzRnSUVSQ1MyVjVjeXhjYmlBZ1QzQmxjbUYwYVc5dVMyVjVjeXhjYmlBZ1ZtRnNhV1JoZEdsdmJrVnljbTl5TEZ4dWZTQm1jbTl0SUZ3aVFHUmxZMkZtTFhSekwyUmlMV1JsWTI5eVlYUnZjbk5jSWp0Y2JtbHRjRzl5ZENCN0lFTnZibk4wY25WamRHOXlMQ0JOWlhSaFpHRjBZU0I5SUdaeWIyMGdYQ0pBWkdWallXWXRkSE12WkdWamIzSmhkR2x2Ymx3aU8xeHVhVzF3YjNKMElIdGNiaUFnUVhCcFQzQmxjbUYwYVc5dVJuSnZiVTF2WkdWc0xGeHVJQ0JCY0dsUVlYSmhiWE5HY205dFRXOWtaV3dzWEc0Z0lIUjVjR1VnUkdWallXWkJjR2xRY205d1pYSjBlU3hjYmlBZ1JHVmpZV1pDYjJSNUxGeHVJQ0JFWldOaFpsQmhjbUZ0Y3l4Y2JpQWdSR1ZqWVdaUmRXVnllU3hjYm4wZ1puSnZiU0JjSWk0dlpHVmpiM0poZEc5eWMxd2lPMXh1YVcxd2IzSjBJSHNnU0hSMGNGWmxjbUpVYjBSbFkyOXlZWFJ2Y2lCOUlHWnliMjBnWENJdUwyUmxZMjl5WVhSdmNuTXZkWFJwYkhOY0lqdGNibWx0Y0c5eWRDQjBlWEJsSUhzZ1NIUjBjRlpsY21KeklIMGdabkp2YlNCY0lpNHZaR1ZqYjNKaGRHOXljeTkwZVhCbGMxd2lPMXh1YVcxd2IzSjBJSHNnUkdWallXWlNaWEYxWlhOMFEyOXVkR1Y0ZENCOUlHWnliMjBnWENJdUxpOXlaWEYxWlhOMFhDSTdYRzVwYlhCdmNuUWdleUJFUlVOQlJsOURUMDVVVWs5TVRFVlNYME5QVGtaSlJ5d2dSRVZEUVVaZlVrOVZWRVVnZlNCbWNtOXRJRndpTGk0dlkyOXVjM1JoYm5SelhDSTdYRzVwYlhCdmNuUWdleUJCZFhSb0lIMGdabkp2YlNCY0lpNHZaR1ZqYjNKaGRHOXljeTlrWldOdmNtRjBiM0p6WENJN1hHNXBiWEJ2Y25RZ2V5QkRiMjUwY205c2JHVnlRMjl1YzNSeWRXTjBiM0lnZlNCbWNtOXRJRndpTGk5MGVYQmxjMXdpTzF4dWFXMXdiM0owSUhzZ1JHVmpZV1pOYjJSbGJFTnZiblJ5YjJ4c1pYSWdmU0JtY205dElGd2lMaTR2WTI5dWRISnZiR3hsY25OY0lqdGNibWx0Y0c5eWRDQjdJRVIwYjBadmNpQjlJR1p5YjIwZ1hDSXVMaTltWVdOMGIzSjVMMjl3Wlc1aGNHa3ZSSFJ2UW5WcGJHUmxjbHdpTzF4dWFXMXdiM0owSUZ3aUxpNHZiM1psY25KcFpHVnpYQ0k3WEc1cGJYQnZjblFnZTF4dUlDQk5iMlJsYkVOdmJuUnliMnhzWlhKR1lXTjBiM0o1TEZ4dUlDQjBlWEJsSUUxdlpHVnNRMjl1ZEhKdmJHeGxja1poWTNSdmNubERiMjVtYVdjc1hHNGdJSFI1Y0dVZ1UyVnlkbVZ5VW05MWRHVXNYRzU5SUdaeWIyMGdYQ0pBWkdWallXWXRkSE12Wm05eUxXaDBkSEF2YzJWeWRtVnlYQ0k3WEc1Y2JtVjRjRzl5ZENCamJHRnpjeUJHY205dFRXOWtaV3hEYjI1MGNtOXNiR1Z5SUh0Y2JpQWdjSEpwZG1GMFpTQnpkR0YwYVdNZ2NtVmhaRzl1YkhrZ2JHOW5JRDBnVEc5bloybHVaeTVtYjNJb1JuSnZiVTF2WkdWc1EyOXVkSEp2Ykd4bGNpNXVZVzFsS1R0Y2JseHVJQ0J6ZEdGMGFXTWdaMlYwVUdWeWMybHpkR1Z1WTJVOFZDQmxlSFJsYm1SeklFMXZaR1ZzUEdKdmIyeGxZVzQrUGloY2JpQWdJQ0JOYjJSbGJFTnNZWHA2T2lCTmIyUmxiRU52Ym5OMGNuVmpkRzl5UEZRK1hHNGdJQ2s2SUZKbGNHODhWRDRnZkNCTmIyUmxiRk5sY25acFkyVThWRDRnZTF4dUlDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnVTJWeWRtbGpaUzVuWlhROFRXOWtaV3hUWlhKMmFXTmxQRlErUGloTmIyUmxiRU5zWVhwNktUdGNiaUFnSUNCOUlHTmhkR05vSUNobE9pQjFibXR1YjNkdUtTQjdYRzRnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnVFc5a1pXeFRaWEoyYVdObExtZGxkRk5sY25acFkyVW9UVzlrWld4RGJHRjZlaWtnWVhNZ1RXOWtaV3hUWlhKMmFXTmxQRlErTzF4dUlDQWdJQ0FnZlNCallYUmphQ0FvWlRJNklIVnVhMjV2ZDI0cElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlGSmxjRzl6YVhSdmNua3VabTl5VFc5a1pXd29UVzlrWld4RGJHRjZlaWtnWVhNZ1VtVndienhVUGp0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCemRHRjBhV01nWTNKbFlYUmxVWFZsY25sU2IzVjBaWE5HY205dFVtVndiM05wZEc5eWVUeFVJR1Y0ZEdWdVpITWdUVzlrWld3OFltOXZiR1ZoYmo0K0tGeHVJQ0FnSUhCbGNuTnBjM1JsYm1ObE9pQlNaWEJ2UEZRK0lId2dUVzlrWld4VFpYSjJhV05sUEZRK0xGeHVJQ0FnSUhCeVpXWnBlRG9nYzNSeWFXNW5JRDBnVUdWeWMybHpkR1Z1WTJWTFpYbHpMbEZWUlZKWlhHNGdJQ2s2SUVOdmJuUnliMnhzWlhKRGIyNXpkSEoxWTNSdmNqeFVQaUI3WEc0Z0lDQWdZMjl1YzNRZ2NtVndiem9nVW1Wd2J6eFVQaUE5WEc0Z0lDQWdJQ0J3WlhKemFYTjBaVzVqWlNCcGJuTjBZVzVqWlc5bUlFMXZaR1ZzVTJWeWRtbGpaU0EvSUhCbGNuTnBjM1JsYm1ObExuSmxjRzhnT2lCd1pYSnphWE4wWlc1alpUdGNiaUFnSUNCamIyNXpkQ0JOYjJSbGJFTnZibk4wY2pvZ1EyOXVjM1J5ZFdOMGIzSWdQU0J5WlhCdkxtTnNZWE56TzF4dUlDQWdJR052Ym5OMElIRjFaWEo1VFdWMGFHOWtjem9nVW1WamIzSmtQSE4wY21sdVp5d2dleUJtYVdWc1pITS9PaUJ6ZEhKcGJtZGJYU0I4SUhWdVpHVm1hVzVsWkNCOVBpQTlYRzRnSUNBZ0lDQk5aWFJoWkdGMFlTNW5aWFFvWEc0Z0lDQWdJQ0FnSUhKbGNHOHVZMjl1YzNSeWRXTjBiM0lnWVhNZ1EyOXVjM1J5ZFdOMGIzSXNYRzRnSUNBZ0lDQWdJRTFsZEdGa1lYUmhMbXRsZVNoUVpYSnphWE4wWlc1alpVdGxlWE11VVZWRlVsa3BYRzRnSUNBZ0lDQXBJRDgvSUh0OU8xeHVYRzRnSUNBZ1kyOXVjM1FnY205MWRHVk5aWFJvYjJSek9pQlNaV052Y21ROGMzUnlhVzVuTENCaGJuaytJRDFjYmlBZ0lDQWdJRTFsZEdGa1lYUmhMbWRsZENoY2JpQWdJQ0FnSUNBZ2NHVnljMmx6ZEdWdVkyVXVZMjl1YzNSeWRXTjBiM0lnWVhNZ1EyOXVjM1J5ZFdOMGIzSXNYRzRnSUNBZ0lDQWdJRTFsZEdGa1lYUmhMbXRsZVNoRVJVTkJSbDlTVDFWVVJTbGNiaUFnSUNBZ0lDa2dQejhnZTMwN1hHNWNiaUFnSUNCamJHRnpjeUJSZFdWeWVVTnZiblJ5YjJ4c1pYSWdaWGgwWlc1a2N5QkVaV05oWmsxdlpHVnNRMjl1ZEhKdmJHeGxjanhVUGlCN1hHNGdJQ0FnSUNCdmRtVnljbWxrWlNCblpYUWdZMnhoYzNNb0tUb2dUVzlrWld4RGIyNXpkSEoxWTNSdmNqeFVQaUI3WEc0Z0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhjSWsxbGRHaHZaQ0J1YjNRZ2FXMXdiR1Z0Wlc1MFpXUXVYQ0lwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnWTI5dWMzUnlkV04wYjNJb1kyeHBaVzUwUTI5dWRHVjRkRG9nUkdWallXWlNaWEYxWlhOMFEyOXVkR1Y0ZEN3Z2JtRnRaVG9nYzNSeWFXNW5LU0I3WEc0Z0lDQWdJQ0FnSUhOMWNHVnlLR05zYVdWdWRFTnZiblJsZUhRc0lHNWhiV1VwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJR1p2Y2lBb1kyOXVjM1FnVzIxbGRHaHZaRTVoYldVc0lIQmhjbUZ0YzEwZ2IyWWdUMkpxWldOMExtVnVkSEpwWlhNb2NtOTFkR1ZOWlhSb2IyUnpLU2tnZTF4dUlDQWdJQ0FnWTI5dWMzUWdjbTkxZEdWUVlYUm9JRDBnVzNCaGNtRnRjeTV3WVhSb0xuSmxjR3hoWTJVb0wxNWNYQzhyZkZ4Y0x5c2tMMmNzSUZ3aVhDSXBYVnh1SUNBZ0lDQWdJQ0F1Wm1sc2RHVnlLQ2h6WldkdFpXNTBPaUJ6ZEhKcGJtY3BJRDArSUhObFoyMWxiblFnSmlZZ2MyVm5iV1Z1ZEM1MGNtbHRLQ2twWEc0Z0lDQWdJQ0FnSUM1cWIybHVLRndpTDF3aUtUdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ2FHRnVaR3hsY2lBOUlFWnliMjFOYjJSbGJFTnZiblJ5YjJ4c1pYSXVZM0psWVhSbFEyOXRjR3hsZUZGMVpYSjVTR0Z1Wkd4bGNpaGNiaUFnSUNBZ0lDQWdiV1YwYUc5a1RtRnRaVnh1SUNBZ0lDQWdLU0JoY3lCaGJuazdYRzRnSUNBZ0lDQkdjbTl0VFc5a1pXeERiMjUwY205c2JHVnlMbVJsWm1sdVpVMWxkR2h2WkNoY2JpQWdJQ0FnSUNBZ1VYVmxjbmxEYjI1MGNtOXNiR1Z5TEZ4dUlDQWdJQ0FnSUNCdFpYUm9iMlJPWVcxbExGeHVJQ0FnSUNBZ0lDQm9ZVzVrYkdWeVhHNGdJQ0FnSUNBcE8xeHVYRzRnSUNBZ0lDQmpiMjV6ZENCb2RIUndSR1ZqYjNKaGRHOXlJRDBnU0hSMGNGWmxjbUpVYjBSbFkyOXlZWFJ2Y2lod1lYSmhiWE11YUhSMGNFMWxkR2h2WkNCaGN5QklkSFJ3Vm1WeVluTXBLSEp2ZFhSbFVHRjBhQ0I4ZkNCMWJtUmxabWx1WldRcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWkdWamIzSmhkRzl5Y3lBOUlFWnliMjFOYjJSbGJFTnZiblJ5YjJ4c1pYSXVaMlYwVVhWbGNubEVaV052Y21GMGIzSnpLRnh1SUNBZ0lDQWdJQ0J0WlhSb2IyUk9ZVzFsTEZ4dUlDQWdJQ0FnSUNCeWIzVjBaVkJoZEdnc1hHNGdJQ0FnSUNBZ0lIQmhjbUZ0Y3k1b2RIUndUV1YwYUc5a1hHNGdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ1JuSnZiVTF2WkdWc1EyOXVkSEp2Ykd4bGNpNWhjSEJzZVVSbFkyOXlZWFJ2Y25Nb1hHNGdJQ0FnSUNBZ0lGRjFaWEo1UTI5dWRISnZiR3hsY2l4Y2JpQWdJQ0FnSUNBZ2JXVjBhRzlrVG1GdFpTeGNiaUFnSUNBZ0lDQWdXMmgwZEhCRVpXTnZjbUYwYjNJc0lDNHVMbVJsWTI5eVlYUnZjbk5kWEc0Z0lDQWdJQ0FwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR1p2Y2lBb1kyOXVjM1FnVzIxbGRHaHZaRTVoYldVc0lHOWlhbFpoYkhWbGMxMGdiMllnVDJKcVpXTjBMbVZ1ZEhKcFpYTW9jWFZsY25sTlpYUm9iMlJ6S1NrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWm1sbGJHUnpJRDBnYjJKcVZtRnNkV1Z6TG1acFpXeGtjeUEvUHlCYlhUdGNiaUFnSUNBZ0lHTnZibk4wSUhKdmRYUmxVR0YwYUNBOUlGdHdjbVZtYVhnc0lHMWxkR2h2WkU1aGJXVXNJQzR1TG1acFpXeGtjeTV0WVhBb0tHWXBJRDArSUdBNkpIdG1mV0FwWFZ4dUlDQWdJQ0FnSUNBdVptbHNkR1Z5S0NoelpXZHRaVzUwS1NBOVBpQnpaV2R0Wlc1MElDWW1JSE5sWjIxbGJuUXVkSEpwYlNncEtWeHVJQ0FnSUNBZ0lDQXVhbTlwYmloY0lpOWNJaWs3WEc1Y2JpQWdJQ0FnSUdOdmJuTjBJR2hoYm1Sc1pYSWdQU0JHY205dFRXOWtaV3hEYjI1MGNtOXNiR1Z5TG1OeVpXRjBaVU52YlhCc1pYaFJkV1Z5ZVVoaGJtUnNaWElvWEc0Z0lDQWdJQ0FnSUcxbGRHaHZaRTVoYldWY2JpQWdJQ0FnSUNrZ1lYTWdZVzU1TzF4dUlDQWdJQ0FnUm5KdmJVMXZaR1ZzUTI5dWRISnZiR3hsY2k1a1pXWnBibVZOWlhSb2IyUW9YRzRnSUNBZ0lDQWdJRkYxWlhKNVEyOXVkSEp2Ykd4bGNpeGNiaUFnSUNBZ0lDQWdiV1YwYUc5a1RtRnRaU3hjYmlBZ0lDQWdJQ0FnYUdGdVpHeGxjbHh1SUNBZ0lDQWdLVHRjYmx4dUlDQWdJQ0FnWTI5dWMzUWdhSFIwY0VSbFkyOXlZWFJ2Y2lBOUlFaDBkSEJXWlhKaVZHOUVaV052Y21GMGIzSW9YQ0pIUlZSY0lpQmhjeUJJZEhSd1ZtVnlZbk1wS0hKdmRYUmxVR0YwYUNCOGZDQjFibVJsWm1sdVpXUXBPMXh1SUNBZ0lDQWdZMjl1YzNRZ1pHVmpiM0poZEc5eWN5QTlJRVp5YjIxTmIyUmxiRU52Ym5SeWIyeHNaWEl1WjJWMFVYVmxjbmxFWldOdmNtRjBiM0p6S0Z4dUlDQWdJQ0FnSUNCdFpYUm9iMlJPWVcxbExGeHVJQ0FnSUNBZ0lDQnliM1YwWlZCaGRHZ3NYRzRnSUNBZ0lDQWdJRndpUjBWVVhDSXNYRzRnSUNBZ0lDQWdJSFJ5ZFdWY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnSUNCR2NtOXRUVzlrWld4RGIyNTBjbTlzYkdWeUxtRndjR3g1UkdWamIzSmhkRzl5Y3loY2JpQWdJQ0FnSUNBZ1VYVmxjbmxEYjI1MGNtOXNiR1Z5TEZ4dUlDQWdJQ0FnSUNCdFpYUm9iMlJPWVcxbExGeHVJQ0FnSUNBZ0lDQmJhSFIwY0VSbFkyOXlZWFJ2Y2l3Z0xpNHVaR1ZqYjNKaGRHOXljMTFjYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlGRjFaWEo1UTI5dWRISnZiR3hsY2p0Y2JpQWdmVnh1WEc0Z0lITjBZWFJwWXlCamNtVmhkR1U4VkNCbGVIUmxibVJ6SUUxdlpHVnNQR0Z1ZVQ0K0tGeHVJQ0FnSUUxdlpHVnNRMjl1YzNSeU9pQk5iMlJsYkVOdmJuTjBjblZqZEc5eVBGUStMRnh1SUNBZ0lHMXZaSFZzWlVOdmJtWnBaMDkyWlhKeWFXUmxjejg2SUZKbFkyOXlaRHh6ZEhKcGJtY3NJRTF2WkdWc1EyOXVkSEp2Ykd4bGNrWmhZM1J2Y25sRGIyNW1hV2MrWEc0Z0lDazZJRU52Ym5SeWIyeHNaWEpEYjI1emRISjFZM1J2Y2p4VVBpQjdYRzRnSUNBZ1kyOXVjM1FnYkc5bklEMGdSbkp2YlUxdlpHVnNRMjl1ZEhKdmJHeGxjaTVzYjJjdVptOXlLRVp5YjIxTmIyUmxiRU52Ym5SeWIyeHNaWEl1WTNKbFlYUmxLVHRjYmlBZ0lDQmpiMjV6ZENCMFlXSnNaVTVoYldVZ1BTQk5iMlJsYkM1MFlXSnNaVTVoYldVb1RXOWtaV3hEYjI1emRISXBPMXh1SUNBZ0lHTnZibk4wSUhKdmRYUmxVR0YwYUNBOUlIUnZTMlZpWVdKRFlYTmxLSFJoWW14bFRtRnRaU2s3WEc0Z0lDQWdZMjl1YzNRZ2JXOWtaV3hEYkdGNmVrNWhiV1VnUFNCTmIyUmxiRU52Ym5OMGNpNXVZVzFsTzF4dUlDQWdJR052Ym5OMElIQmxjbk5wYzNSbGJtTmxJRDBnUm5KdmJVMXZaR1ZzUTI5dWRISnZiR3hsY2k1blpYUlFaWEp6YVhOMFpXNWpaU2hOYjJSbGJFTnZibk4wY2lrN1hHNWNiaUFnSUNBdkx5QlhhR1Z1SUhCbGNuTnBjM1JsYm1ObElHbHpJR0VnVFc5a1pXeFRaWEoyYVdObExDQjBhR1VnUUhGMVpYSjVMMEJ5YjNWMFpTQnRaWFJoWkdGMFlTQnNhWFpsY3lCdmJseHVJQ0FnSUM4dklIUm9aU0IxYm1SbGNteDVhVzVuSUhKbGNHOXphWFJ2Y25rZ1kyeGhjM01nS0dOMWMzUnZiU0J5WlhCdktTd2dibTkwSUc5dUlFMXZaR1ZzVTJWeWRtbGpaU0JwZEhObGJHWXVYRzRnSUNBZ0x5OGdVR0Z6Y3lCMGFHVWdjbVZ3YnlCMGJ5QjBhR1VnWm1GamRHOXllU0J6YnlCaFpHUkRiMjF3YkdWNFVYVmxjbWxsY3lncElHTmhiaUJrYVhOamIzWmxjaUIwYUdWdExseHVJQ0FnSUdOdmJuTjBJR1poWTNSdmNubFFaWEp6YVhOMFpXNWpaU0E5WEc0Z0lDQWdJQ0J3WlhKemFYTjBaVzVqWlNCcGJuTjBZVzVqWlc5bUlFMXZaR1ZzVTJWeWRtbGpaU0EvSUhCbGNuTnBjM1JsYm1ObExuSmxjRzhnT2lCd1pYSnphWE4wWlc1alpUdGNibHh1SUNBZ0lHTnZibk4wSUdSbFkyOXlZWFJ2Y2tOdmJtWnBaeUE5SUUxbGRHRmtZWFJoTG1kbGRDaGNiaUFnSUNBZ0lFMXZaR1ZzUTI5dWMzUnlMRnh1SUNBZ0lDQWdUV1YwWVdSaGRHRXVhMlY1S0VSRlEwRkdYME5QVGxSU1QweE1SVkpmUTA5T1JrbEhLVnh1SUNBZ0lDa2dZWE1nVFc5a1pXeERiMjUwY205c2JHVnlSbUZqZEc5eWVVTnZibVpwWnlCOElIVnVaR1ZtYVc1bFpEdGNiaUFnSUNCamIyNXpkQ0J0YjJSMWJHVlBkbVZ5Y21sa1pTQTlJRzF2WkhWc1pVTnZibVpwWjA5MlpYSnlhV1JsY3o4dVcwMXZaR1ZzUTI5dWMzUnlMbTVoYldWZE8xeHVJQ0FnSUdOdmJuTjBJRzFsY21kbFpFTnZibVpwWnpvZ1RXOWtaV3hEYjI1MGNtOXNiR1Z5Um1GamRHOXllVU52Ym1acFp5QTlJSHRjYmlBZ0lDQWdJQzR1TGloa1pXTnZjbUYwYjNKRGIyNW1hV2NnZkh3Z2UzMHBMRnh1SUNBZ0lDQWdMaTR1S0cxdlpIVnNaVTkyWlhKeWFXUmxJSHg4SUh0OUtTeGNiaUFnSUNCOU8xeHVYRzRnSUNBZ1kyOXVjM1FnUm1GamRHOXllVU52Ym5SeWIyeHNaWElnUFNCTmIyUmxiRU52Ym5SeWIyeHNaWEpHWVdOMGIzSjVMbU55WldGMFpUeFVQaWhjYmlBZ0lDQWdJRTF2WkdWc1EyOXVjM1J5TEZ4dUlDQWdJQ0FnWm1GamRHOXllVkJsY25OcGMzUmxibU5sTEZ4dUlDQWdJQ0FnYldWeVoyVmtRMjl1Wm1sblhHNGdJQ0FnS1R0Y2JpQWdJQ0JqYjI1emRDQm1ZV04wYjNKNVVtOTFkR1Z6SUQwZ0tFWmhZM1J2Y25sRGIyNTBjbTlzYkdWeUlHRnpJR0Z1ZVNrdVgxOXliM1YwWlhOZlh5QmhjMXh1SUNBZ0lDQWdmQ0JUWlhKMlpYSlNiM1YwWlZ0ZFhHNGdJQ0FnSUNCOElIVnVaR1ZtYVc1bFpEdGNibHh1SUNBZ0lHTnZibk4wSUhzZ1oyVjBVRXNzSUdGd2FWQnliM0JsY25ScFpYTXNJSEJoZEdnNklIQnJVR0YwYUNCOUlEMWNiaUFnSUNBZ0lFWnliMjFOYjJSbGJFTnZiblJ5YjJ4c1pYSXVaMlYwVW05MWRHVlFZWEpoYldWMFpYSnpSbkp2YlUxdlpHVnNLRTF2WkdWc1EyOXVjM1J5S1R0Y2JseHVJQ0FnSUd4dlp5NWtaV0oxWnloY2JpQWdJQ0FnSUdCRGNtVmhkR2x1WnlCamIyNTBjbTlzYkdWeUlHWnZjaUJ0YjJSbGJEb2dKSHR0YjJSbGJFTnNZWHA2VG1GdFpYMGdkMmwwYUNBa2UyWmhZM1J2Y25sU2IzVjBaWE0vTG14bGJtZDBhQ0EvUHlBd2ZTQm1ZV04wYjNKNUlISnZkWFJsYzJCY2JpQWdJQ0FwTzF4dVhHNGdJQ0FnUUVOdmJuUnliMnhzWlhJb2NtOTFkR1ZRWVhSb0tWeHVJQ0FnSUVCQmNHbFVZV2R6S0cxdlpHVnNRMnhoZW5wT1lXMWxLVnh1SUNBZ0lFQkJjR2xGZUhSeVlVMXZaR1ZzY3loTmIyUmxiRU52Ym5OMGNpbGNiaUFnSUNCQVFYVjBhQ2hOYjJSbGJFTnZibk4wY2lsY2JpQWdJQ0JqYkdGemN5QkVlVzVoYldsalRXOWtaV3hEYjI1MGNtOXNiR1Z5SUdWNGRHVnVaSE1nUkdWallXWk5iMlJsYkVOdmJuUnliMnhzWlhJOFZENGdlMXh1SUNBZ0lDQWdjSEpwZG1GMFpTQnlaV0ZrYjI1c2VTQndhem9nYzNSeWFXNW5JRDBnVFc5a1pXd3VjR3NvVFc5a1pXeERiMjV6ZEhJcElHRnpJSE4wY21sdVp6dGNibHh1SUNBZ0lDQWdjSEp2ZEdWamRHVmtJSE4wWVhScFl5Qm5aWFFnWTJ4aGMzTW9LU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJOYjJSbGJFTnZibk4wY2p0Y2JpQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ2IzWmxjbkpwWkdVZ1oyVjBJR05zWVhOektDazZJRTF2WkdWc1EyOXVjM1J5ZFdOMGIzSThWRDRnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnVFc5a1pXeERiMjV6ZEhJN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lHTnZibk4wY25WamRHOXlLR05zYVdWdWRFTnZiblJsZUhRNklFUmxZMkZtVW1WeGRXVnpkRU52Ym5SbGVIUXBJSHRjYmlBZ0lDQWdJQ0FnYzNWd1pYSW9ZMnhwWlc1MFEyOXVkR1Y0ZEN3Z1JIbHVZVzFwWTAxdlpHVnNRMjl1ZEhKdmJHeGxjaTV1WVcxbEtUdGNiaUFnSUNBZ0lDQWdiRzluTG1sdVptOG9YRzRnSUNBZ0lDQWdJQ0FnWUZKbFoybHpkR1Z5YVc1bklHUjVibUZ0YVdNZ1kyOXVkSEp2Ykd4bGNpQm1iM0lnYlc5a1pXdzZJQ1I3ZEdocGN5NWpiR0Z6Y3k1dVlXMWxmU0J5YjNWMFpUb2dMeVI3Y205MWRHVlFZWFJvZldCY2JpQWdJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9abUZqZEc5eWVWSnZkWFJsY3lrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYzI5eWRHVmtVbTkxZEdWeklEMGdXeTR1TG1aaFkzUnZjbmxTYjNWMFpYTmRMbk52Y25Rb0tHRXNJR0lwSUQwK0lIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1lWTmxaMjFsYm5SeklEMGdZUzV3WVhSb0xuTndiR2wwS0Z3aUwxd2lLUzVtYVd4MFpYSW9RbTl2YkdWaGJpazdYRzRnSUNBZ0lDQWdJR052Ym5OMElHSlRaV2R0Wlc1MGN5QTlJR0l1Y0dGMGFDNXpjR3hwZENoY0lpOWNJaWt1Wm1sc2RHVnlLRUp2YjJ4bFlXNHBPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQmhVR0Z5WVcxRGIzVnVkQ0E5SUdGVFpXZHRaVzUwY3k1bWFXeDBaWElvS0hNcElEMCtJSE11YzNSaGNuUnpWMmwwYUNoY0lqcGNJaWtwTG14bGJtZDBhRHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdZbEJoY21GdFEyOTFiblFnUFNCaVUyVm5iV1Z1ZEhNdVptbHNkR1Z5S0NoektTQTlQaUJ6TG5OMFlYSjBjMWRwZEdnb1hDSTZYQ0lwS1M1c1pXNW5kR2c3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR0ZNYVhSbGNtRnNRMjkxYm5RZ1BTQmhVMlZuYldWdWRITXViR1Z1WjNSb0lDMGdZVkJoY21GdFEyOTFiblE3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJR0pNYVhSbGNtRnNRMjkxYm5RZ1BTQmlVMlZuYldWdWRITXViR1Z1WjNSb0lDMGdZbEJoY21GdFEyOTFiblE3WEc0Z0lDQWdJQ0FnSUdsbUlDaGhUR2wwWlhKaGJFTnZkVzUwSUNFOVBTQmlUR2wwWlhKaGJFTnZkVzUwS1Z4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCaVRHbDBaWEpoYkVOdmRXNTBJQzBnWVV4cGRHVnlZV3hEYjNWdWREdGNiaUFnSUNBZ0lDQWdhV1lnS0dGUVlYSmhiVU52ZFc1MElDRTlQU0JpVUdGeVlXMURiM1Z1ZENsY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1lWQmhjbUZ0UTI5MWJuUWdMU0JpVUdGeVlXMURiM1Z1ZER0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SURBN1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lHWnZjaUFvWTI5dWMzUWdjbTkxZEdVZ2IyWWdjMjl5ZEdWa1VtOTFkR1Z6S1NCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUhKbFoybHpkSEpoZEdsdmJpQTlJRVp5YjIxTmIyUmxiRU52Ym5SeWIyeHNaWEl1YldGMFkyaFNiM1YwWlNoY2JpQWdJQ0FnSUNBZ0lDQnliM1YwWlN4Y2JpQWdJQ0FnSUNBZ0lDQndhMUJoZEdnc1hHNGdJQ0FnSUNBZ0lDQWdZWEJwVUhKdmNHVnlkR2xsY3l4Y2JpQWdJQ0FnSUNBZ0lDQm5aWFJRU3l4Y2JpQWdJQ0FnSUNBZ0lDQk5iMlJsYkVOdmJuTjBjaXhjYmlBZ0lDQWdJQ0FnSUNCdGIyUmxiRU5zWVhwNlRtRnRaU3hjYmlBZ0lDQWdJQ0FnSUNCbVlXTjBiM0o1VUdWeWMybHpkR1Z1WTJWY2JpQWdJQ0FnSUNBZ0tUdGNiaUFnSUNBZ0lDQWdhV1lnS0NGeVpXZHBjM1J5WVhScGIyNHBJR052Ym5ScGJuVmxPMXh1WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSHNnYldWMGFHOWtUbUZ0WlN3Z2FHRnVaR3hsY2l3Z1pHVmpiM0poZEc5eWN5d2djR0Z5WVcxRVpXTnZjbUYwYjNKeklIMGdQVnh1SUNBZ0lDQWdJQ0FnSUhKbFoybHpkSEpoZEdsdmJqdGNibHh1SUNBZ0lDQWdJQ0JqYjI1emRDQmtaWE5qY21sd2RHOXlJRDBnUm5KdmJVMXZaR1ZzUTI5dWRISnZiR3hsY2k1a1pXWnBibVZOWlhSb2IyUW9YRzRnSUNBZ0lDQWdJQ0FnUkhsdVlXMXBZMDF2WkdWc1EyOXVkSEp2Ykd4bGNpeGNiaUFnSUNBZ0lDQWdJQ0J0WlhSb2IyUk9ZVzFsTEZ4dUlDQWdJQ0FnSUNBZ0lHaGhibVJzWlhKY2JpQWdJQ0FnSUNBZ0tUdGNibHh1SUNBZ0lDQWdJQ0JwWmlBb1pHVnpZM0pwY0hSdmNpa2dlMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR2gwZEhCRVpXTnZjbUYwYjNJZ1BTQklkSFJ3Vm1WeVlsUnZSR1ZqYjNKaGRHOXlLSEp2ZFhSbExtMWxkR2h2WkNCaGN5QklkSFJ3Vm1WeVluTXBLRnh1SUNBZ0lDQWdJQ0FnSUNBZ2NtOTFkR1V1Y0dGMGFDNXlaWEJzWVdObEtDOWVYRnd2SzN4Y1hDOHJKQzluTENCY0lsd2lLU0I4ZkNCMWJtUmxabWx1WldSY2JpQWdJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdJQ0FnSUVaeWIyMU5iMlJsYkVOdmJuUnliMnhzWlhJdVlYQndiSGxFWldOdmNtRjBiM0p6S0Z4dUlDQWdJQ0FnSUNBZ0lDQWdSSGx1WVcxcFkwMXZaR1ZzUTI5dWRISnZiR3hsY2l4Y2JpQWdJQ0FnSUNBZ0lDQWdJRzFsZEdodlpFNWhiV1VzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmJhSFIwY0VSbFkyOXlZWFJ2Y2l3Z0xpNHVaR1ZqYjNKaGRHOXljMTBzWEc0Z0lDQWdJQ0FnSUNBZ0lDQndZWEpoYlVSbFkyOXlZWFJ2Y25OY2JpQWdJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlFUjVibUZ0YVdOTmIyUmxiRU52Ym5SeWIyeHNaWElnWVhNZ1lXNTVPMXh1SUNCOVhHNWNiaUFnYzNSaGRHbGpJR2RsZEZKdmRYUmxVR0Z5WVcxbGRHVnljMFp5YjIxTmIyUmxiRHhVSUdWNGRHVnVaSE1nVFc5a1pXdzhZVzU1UGo0b1hHNGdJQ0FnVFc5a1pXeERiR0Y2ZWpvZ1RXOWtaV3hEYjI1emRISjFZM1J2Y2p4VVBseHVJQ0FwT2lCN1hHNGdJQ0FnY0dGMGFEb2djM1J5YVc1bk8xeHVJQ0FnSUdSbGMyTnlhWEIwYVc5dU9pQnpkSEpwYm1jN1hHNGdJQ0FnWVhCcFVISnZjR1Z5ZEdsbGN6b2dSR1ZqWVdaQmNHbFFjbTl3WlhKMGVWdGRPMXh1SUNBZ0lHZGxkRkJMT2lBb0xpNHVjR0Z5WVcxek9pQkJjbkpoZVR4emRISnBibWNnZkNCdWRXMWlaWEkrS1NBOVBpQnpkSEpwYm1jN1hHNGdJSDBnZTF4dUlDQWdJR052Ym5OMElIQnJJRDBnVFc5a1pXd3VjR3NvVFc5a1pXeERiR0Y2ZWlrZ1lYTWdhMlY1YjJZZ1RXOWtaV3c4WVc1NVBqdGNiaUFnSUNCamIyNXpkQ0JqYjIxd2IzTmxaQ0E5SUUxbGRHRmtZWFJoTG1kbGRDaGNiaUFnSUNBZ0lFMXZaR1ZzUTJ4aGVub3NYRzRnSUNBZ0lDQk5aWFJoWkdGMFlTNXJaWGtvUkVKTFpYbHpMa05QVFZCUFUwVkVMQ0J3YXlsY2JpQWdJQ0FwTzF4dUlDQWdJR052Ym5OMElHTnZiWEJ2YzJWa1MyVjVjeUE5SUdOdmJYQnZjMlZrUHk1aGNtZHpJRDgvSUZ0ZE8xeHVYRzRnSUNBZ1kyOXVjM1FnZFc1cGNYVmxTMlY1Y3lBOVhHNGdJQ0FnSUNCQmNuSmhlUzVwYzBGeWNtRjVLR052YlhCdmMyVmtTMlY1Y3lrZ0ppWWdZMjl0Y0c5elpXUkxaWGx6TG14bGJtZDBhQ0ErSURCY2JpQWdJQ0FnSUNBZ1B5QkJjbkpoZVM1bWNtOXRLRzVsZHlCVFpYUW9XeTR1TG1OdmJYQnZjMlZrUzJWNWMxMHBLVnh1SUNBZ0lDQWdJQ0E2SUVGeWNtRjVMbVp5YjIwb2JtVjNJRk5sZENoYmNHdGRLU2s3WEc1Y2JpQWdJQ0JqYjI1emRDQmtaWE5qY21sd2RHbHZiaUE5SUUxbGRHRmtZWFJoTG1SbGMyTnlhWEIwYVc5dUtFMXZaR1ZzUTJ4aGVub3BJRDgvSUZ3aVhDSTdYRzRnSUNBZ1kyOXVjM1FnY0dGMGFDQTlJR0E2Skh0MWJtbHhkV1ZMWlhsekxtcHZhVzRvWENJdk9sd2lLWDFnTzF4dUlDQWdJR052Ym5OMElHRndhVkJ5YjNCbGNuUnBaWE02SUVSbFkyRm1RWEJwVUhKdmNHVnlkSGxiWFNBOUlIVnVhWEYxWlV0bGVYTXViV0Z3S0NoclpYa3BJRDArSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0FnSUc1aGJXVTZJR3RsZVN4Y2JpQWdJQ0FnSUNBZ1pHVnpZM0pwY0hScGIyNDZJRTFsZEdGa1lYUmhMbVJsYzJOeWFYQjBhVzl1S0UxdlpHVnNRMnhoZW5vc0lHdGxlU2tzWEc0Z0lDQWdJQ0FnSUhKbGNYVnBjbVZrT2lCMGNuVmxMRnh1SUNBZ0lDQWdJQ0IwZVhCbE9pQlRkSEpwYm1jc1hHNGdJQ0FnSUNCOU8xeHVJQ0FnSUgwcE8xeHVYRzRnSUNBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0FnSUhCaGRHZ3NYRzRnSUNBZ0lDQmtaWE5qY21sd2RHbHZiaXhjYmlBZ0lDQWdJR0Z3YVZCeWIzQmxjblJwWlhNc1hHNGdJQ0FnSUNCblpYUlFTem9nS0M0dUxuQmhjbUZ0Y3pvZ1FYSnlZWGs4YzNSeWFXNW5JSHdnYm5WdFltVnlQaWtnUFQ1Y2JpQWdJQ0FnSUNBZ1kyOXRjRzl6WldRL0xuTmxjR0Z5WVhSdmNpQS9JSEJoY21GdGN5NXFiMmx1S0dOdmJYQnZjMlZrTG5ObGNHRnlZWFJ2Y2lrZ09pQndZWEpoYlhNdWFtOXBiaWhjSWx3aUtTeGNiaUFnSUNCOU8xeHVJQ0I5WEc1Y2JpQWdjSEpwZG1GMFpTQnpkR0YwYVdNZ1pHVm1hVzVsVFdWMGFHOWtLRnh1SUNBZ0lIUmhjbWRsZERvZ1lXNTVMRnh1SUNBZ0lHMWxkR2h2WkU1aGJXVTZJSE4wY21sdVp5eGNiaUFnSUNCb1lXNWtiR1Z5T2lBb0xpNHVZWEpuY3pvZ1lXNTVXMTBwSUQwK0lHRnVlVnh1SUNBcE9pQlFjbTl3WlhKMGVVUmxjMk55YVhCMGIzSWdmQ0IxYm1SbFptbHVaV1FnZTF4dUlDQWdJRTlpYW1WamRDNWtaV1pwYm1WUWNtOXdaWEowZVNoY2JpQWdJQ0FnSUhSaGNtZGxkQzV3Y205MGIzUjVjR1VnZkh3Z2RHRnlaMlYwTEZ4dUlDQWdJQ0FnYldWMGFHOWtUbUZ0WlN4Y2JpQWdJQ0FnSUh0Y2JpQWdJQ0FnSUNBZ2RtRnNkV1U2SUdoaGJtUnNaWElzWEc0Z0lDQWdJQ0FnSUhkeWFYUmhZbXhsT2lCbVlXeHpaU3hjYmlBZ0lDQWdJQ0FnWTI5dVptbG5kWEpoWW14bE9pQjBjblZsTEZ4dUlDQWdJQ0FnSUNCbGJuVnRaWEpoWW14bE9pQm1ZV3h6WlN4Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FwTzF4dVhHNGdJQ0FnY21WMGRYSnVJRTlpYW1WamRDNW5aWFJQZDI1UWNtOXdaWEowZVVSbGMyTnlhWEIwYjNJb1hHNGdJQ0FnSUNCMFlYSm5aWFF1Y0hKdmRHOTBlWEJsSUh4OElIUmhjbWRsZEN4Y2JpQWdJQ0FnSUcxbGRHaHZaRTVoYldWY2JpQWdJQ0FwTzF4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCemRHRjBhV01nWVhCd2JIbEVaV052Y21GMGIzSnpLRnh1SUNBZ0lIUmhjbWRsZERvZ1lXNTVMRnh1SUNBZ0lHMWxkR2h2WkU1aGJXVTZJSE4wY21sdVp5eGNiaUFnSUNCdFpYUm9iMlJFWldOdmNtRjBiM0p6T2lCQmNuSmhlVHdvZEdGeVoyVjBPaUJoYm5rc0lHdGxlVG9nYzNSeWFXNW5MQ0JrWlhOak9pQmhibmtwSUQwK0lIWnZhV1ErTEZ4dUlDQWdJSEJoY21GdFJHVmpiM0poZEc5eWN6b2dRWEp5WVhrOGV5QmtaV052Y21GMGIzSTZJRkJoY21GdFpYUmxja1JsWTI5eVlYUnZjanNnYVc1a1pYZzZJRzUxYldKbGNpQjlQaUE5SUZ0ZFhHNGdJQ2tnZTF4dUlDQWdJR052Ym5OMElIQnliM1J2SUQwZ2RHRnlaMlYwUHk1d2NtOTBiM1I1Y0dVZ1B6OGdkR0Z5WjJWME8xeHVJQ0FnSUdOdmJuTjBJR1JsYzJOeWFYQjBiM0lnUFNCUFltcGxZM1F1WjJWMFQzZHVVSEp2Y0dWeWRIbEVaWE5qY21sd2RHOXlLSEJ5YjNSdkxDQnRaWFJvYjJST1lXMWxLVHRjYmlBZ0lDQnRaWFJvYjJSRVpXTnZjbUYwYjNKekxtWnZja1ZoWTJnb0tHUXBJRDArSUdRb2NISnZkRzhzSUcxbGRHaHZaRTVoYldVc0lHUmxjMk55YVhCMGIzSXBLVHRjYmlBZ0lDQndZWEpoYlVSbFkyOXlZWFJ2Y25NdVptOXlSV0ZqYUNnb2V5QmtaV052Y21GMGIzSXNJR2x1WkdWNElIMHBJRDArWEc0Z0lDQWdJQ0JrWldOdmNtRjBiM0lvY0hKdmRHOHNJRzFsZEdodlpFNWhiV1VzSUdsdVpHVjRLVnh1SUNBZ0lDazdYRzRnSUgxY2JseHVJQ0J3Y21sMllYUmxJSE4wWVhScFl5QnRZWFJqYUZKdmRYUmxLRnh1SUNBZ0lISnZkWFJsT2lCVFpYSjJaWEpTYjNWMFpTeGNiaUFnSUNCd2ExQmhkR2c2SUhOMGNtbHVaeXhjYmlBZ0lDQmhjR2xRY205d1pYSjBhV1Z6T2lCRVpXTmhaa0Z3YVZCeWIzQmxjblI1VzEwc1hHNGdJQ0FnWjJWMFVFczZJQ2d1TGk1d09pQkJjbkpoZVR4emRISnBibWNnZkNCdWRXMWlaWEkrS1NBOVBpQnpkSEpwYm1jc1hHNGdJQ0FnVFc5a1pXeERiMjV6ZEhJNklFMXZaR1ZzUTI5dWMzUnlkV04wYjNJOFlXNTVQaXhjYmlBZ0lDQnRiMlJsYkVOc1lYcDZUbUZ0WlRvZ2MzUnlhVzVuTEZ4dUlDQWdJSEJsY25OcGMzUmxibU5sUHpvZ1lXNTVYRzRnSUNrNklIdGNiaUFnSUNCdFpYUm9iMlJPWVcxbE9pQnpkSEpwYm1jN1hHNGdJQ0FnYUdGdVpHeGxjam9nS0M0dUxtRnlaM002SUdGdWVWdGRLU0E5UGlCaGJuazdYRzRnSUNBZ1pHVmpiM0poZEc5eWN6b2dRWEp5WVhrOEtIUmhjbWRsZERvZ1lXNTVMQ0JyWlhrNklITjBjbWx1Wnl3Z1pHVnpZem9nWVc1NUtTQTlQaUIyYjJsa1BqdGNiaUFnSUNCd1lYSmhiVVJsWTI5eVlYUnZjbk02SUVGeWNtRjVQSHNnWkdWamIzSmhkRzl5T2lCUVlYSmhiV1YwWlhKRVpXTnZjbUYwYjNJN0lHbHVaR1Y0T2lCdWRXMWlaWElnZlQ0N1hHNGdJSDBnZkNCMWJtUmxabWx1WldRZ2UxeHVJQ0FnSUdOdmJuTjBJSHNnYldWMGFHOWtMQ0J3WVhSb0lIMGdQU0J5YjNWMFpUdGNiaUFnSUNCamIyNXpkQ0J1YjNKdFlXeHBlbVZrVUdGMGFDQTlJSEJoZEdndWNtVndiR0ZqWlNndlhseGNMeXQ4WEZ3dkt5UXZaeXdnWENKY0lpazdYRzVjYmlBZ0lDQnBaaUFvYldWMGFHOWtJRDA5UFNCY0lsQlBVMVJjSWlBbUppQnViM0p0WVd4cGVtVmtVR0YwYUNBOVBUMGdYQ0pjSWlrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUVaeWIyMU5iMlJsYkVOdmJuUnliMnhzWlhJdVkzSmxZWFJsVW1WbmFYTjBjbUYwYVc5dUtGeHVJQ0FnSUNBZ0lDQmNJbU55WldGMFpWd2lMRnh1SUNBZ0lDQWdJQ0JHY205dFRXOWtaV3hEYjI1MGNtOXNiR1Z5TG1OeVpXRjBaVU55WldGMFpVaGhibVJzWlhJb1RXOWtaV3hEYjI1emRISXNJRzF2WkdWc1EyeGhlbnBPWVcxbEtTeGNiaUFnSUNBZ0lDQWdSbkp2YlUxdlpHVnNRMjl1ZEhKdmJHeGxjaTVqY21WaGRHVkRjbVZoZEdWRVpXTnZjbUYwYjNKektFMXZaR1ZzUTI5dWMzUnlMQ0J0YjJSbGJFTnNZWHA2VG1GdFpTa3NYRzRnSUNBZ0lDQWdJRnQ3SUdSbFkyOXlZWFJ2Y2pvZ1JHVmpZV1pDYjJSNUtDa2dZWE1nWVc1NUxDQnBibVJsZURvZ01DQjlMQ0I3SUdSbFkyOXlZWFJ2Y2pvZ1VtVnpjRzl1YzJVb2V5QndZWE56ZEdoeWIzVm5hRG9nZEhKMVpTQjlLU0JoY3lCaGJua3NJR2x1WkdWNE9pQXhJSDFkWEc0Z0lDQWdJQ0FwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNodFpYUm9iMlFnUFQwOUlGd2lVRTlUVkZ3aUlDWW1JRzV2Y20xaGJHbDZaV1JRWVhSb0lEMDlQU0JjSW1KMWJHdGNJaWtnZTF4dUlDQWdJQ0FnY21WMGRYSnVJRVp5YjIxTmIyUmxiRU52Ym5SeWIyeHNaWEl1WTNKbFlYUmxVbVZuYVhOMGNtRjBhVzl1S0Z4dUlDQWdJQ0FnSUNCY0ltTnlaV0YwWlVGc2JGd2lMRnh1SUNBZ0lDQWdJQ0JHY205dFRXOWtaV3hEYjI1MGNtOXNiR1Z5TG1OeVpXRjBaVUoxYkd0RGNtVmhkR1ZJWVc1a2JHVnlLRTF2WkdWc1EyOXVjM1J5TENCdGIyUmxiRU5zWVhwNlRtRnRaU2tzWEc0Z0lDQWdJQ0FnSUVaeWIyMU5iMlJsYkVOdmJuUnliMnhzWlhJdVluVnNhME55WldGMFpVUmxZMjl5WVhSdmNuTW9UVzlrWld4RGIyNXpkSElzSUcxdlpHVnNRMnhoZW5wT1lXMWxLU3hjYmlBZ0lDQWdJQ0FnVzNzZ1pHVmpiM0poZEc5eU9pQkVaV05oWmtKdlpIa29LU0JoY3lCaGJua3NJR2x1WkdWNE9pQXdJSDBzSUhzZ1pHVmpiM0poZEc5eU9pQlNaWE53YjI1elpTaDdJSEJoYzNOMGFISnZkV2RvT2lCMGNuVmxJSDBwSUdGeklHRnVlU3dnYVc1a1pYZzZJREVnZlYxY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHMWxkR2h2WkNBOVBUMGdYQ0pIUlZSY0lpQW1KaUJ1YjNKdFlXeHBlbVZrVUdGMGFDQTlQVDBnWENKaWRXeHJYQ0lwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJHY205dFRXOWtaV3hEYjI1MGNtOXNiR1Z5TG1OeVpXRjBaVkpsWjJsemRISmhkR2x2YmloY2JpQWdJQ0FnSUNBZ1hDSnlaV0ZrUVd4c1hDSXNYRzRnSUNBZ0lDQWdJRVp5YjIxTmIyUmxiRU52Ym5SeWIyeHNaWEl1WTNKbFlYUmxRblZzYTFKbFlXUklZVzVrYkdWeUtHMXZaR1ZzUTJ4aGVucE9ZVzFsS1N4Y2JpQWdJQ0FnSUNBZ1JuSnZiVTF2WkdWc1EyOXVkSEp2Ykd4bGNpNWlkV3hyVW1WaFpFUmxZMjl5WVhSdmNuTW9UVzlrWld4RGIyNXpkSElzSUcxdlpHVnNRMnhoZW5wT1lXMWxLU3hjYmlBZ0lDQWdJQ0FnVzNzZ1pHVmpiM0poZEc5eU9pQlJkV1Z5ZVNoY0ltbGtjMXdpS1NCaGN5QmhibmtzSUdsdVpHVjRPaUF3SUgxZFhHNGdJQ0FnSUNBcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaHRaWFJvYjJRZ1BUMDlJRndpVUZWVVhDSWdKaVlnYm05eWJXRnNhWHBsWkZCaGRHZ2dQVDA5SUZ3aVluVnNhMXdpS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnUm5KdmJVMXZaR1ZzUTI5dWRISnZiR3hsY2k1amNtVmhkR1ZTWldkcGMzUnlZWFJwYjI0b1hHNGdJQ0FnSUNBZ0lGd2lkWEJrWVhSbFFXeHNYQ0lzWEc0Z0lDQWdJQ0FnSUVaeWIyMU5iMlJsYkVOdmJuUnliMnhzWlhJdVkzSmxZWFJsUW5Wc2ExVndaR0YwWlVoaGJtUnNaWElvYlc5a1pXeERiR0Y2ZWs1aGJXVXBMRnh1SUNBZ0lDQWdJQ0JHY205dFRXOWtaV3hEYjI1MGNtOXNiR1Z5TG1KMWJHdFZjR1JoZEdWRVpXTnZjbUYwYjNKektFMXZaR1ZzUTI5dWMzUnlMQ0J0YjJSbGJFTnNZWHA2VG1GdFpTd2dZWEJwVUhKdmNHVnlkR2xsY3lrc1hHNGdJQ0FnSUNBZ0lGdDdJR1JsWTI5eVlYUnZjam9nUkdWallXWkNiMlI1S0NrZ1lYTWdZVzU1TENCcGJtUmxlRG9nTUNCOUxDQjdJR1JsWTI5eVlYUnZjam9nVW1WemNHOXVjMlVvZXlCd1lYTnpkR2h5YjNWbmFEb2dkSEoxWlNCOUtTQmhjeUJoYm5rc0lHbHVaR1Y0T2lBeElIMWRYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2h0WlhSb2IyUWdQVDA5SUZ3aVJFVk1SVlJGWENJZ0ppWWdibTl5YldGc2FYcGxaRkJoZEdnZ1BUMDlJRndpWW5Wc2Exd2lLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdSbkp2YlUxdlpHVnNRMjl1ZEhKdmJHeGxjaTVqY21WaGRHVlNaV2RwYzNSeVlYUnBiMjRvWEc0Z0lDQWdJQ0FnSUZ3aVpHVnNaWFJsUVd4c1hDSXNYRzRnSUNBZ0lDQWdJRVp5YjIxTmIyUmxiRU52Ym5SeWIyeHNaWEl1WTNKbFlYUmxRblZzYTBSbGJHVjBaVWhoYm1Sc1pYSW9iVzlrWld4RGJHRjZlazVoYldVcExGeHVJQ0FnSUNBZ0lDQkdjbTl0VFc5a1pXeERiMjUwY205c2JHVnlMbUoxYkd0RVpXeGxkR1ZFWldOdmNtRjBiM0p6S0UxdlpHVnNRMjl1YzNSeUxDQnRiMlJsYkVOc1lYcDZUbUZ0WlN3Z1lYQnBVSEp2Y0dWeWRHbGxjeWtzWEc0Z0lDQWdJQ0FnSUZ0N0lHUmxZMjl5WVhSdmNqb2dVWFZsY25rb1hDSnBaSE5jSWlrZ1lYTWdZVzU1TENCcGJtUmxlRG9nTUNCOUxDQjdJR1JsWTI5eVlYUnZjam9nVW1WemNHOXVjMlVvZXlCd1lYTnpkR2h5YjNWbmFEb2dkSEoxWlNCOUtTQmhjeUJoYm5rc0lHbHVaR1Y0T2lBeElIMWRYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2h0WlhSb2IyUWdQVDA5SUZ3aVIwVlVYQ0lnSmlZZ2JtOXliV0ZzYVhwbFpGQmhkR2dnUFQwOUlIQnJVR0YwYUNrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUVaeWIyMU5iMlJsYkVOdmJuUnliMnhzWlhJdVkzSmxZWFJsVW1WbmFYTjBjbUYwYVc5dUtGeHVJQ0FnSUNBZ0lDQmNJbkpsWVdSY0lpeGNiaUFnSUNBZ0lDQWdSbkp2YlUxdlpHVnNRMjl1ZEhKdmJHeGxjaTVqY21WaGRHVlNaV0ZrU0dGdVpHeGxjaWhuWlhSUVN5d2diVzlrWld4RGJHRjZlazVoYldVcExGeHVJQ0FnSUNBZ0lDQkdjbTl0VFc5a1pXeERiMjUwY205c2JHVnlMbkpsWVdSRVpXTnZjbUYwYjNKektFMXZaR1ZzUTI5dWMzUnlMQ0J0YjJSbGJFTnNZWHA2VG1GdFpTd2dZWEJwVUhKdmNHVnlkR2xsY3l3Z2NHdFFZWFJvS1N4Y2JpQWdJQ0FnSUNBZ1czc2daR1ZqYjNKaGRHOXlPaUJFWldOaFpsQmhjbUZ0Y3loaGNHbFFjbTl3WlhKMGFXVnpLU0JoY3lCaGJua3NJR2x1WkdWNE9pQXdJSDFkWEc0Z0lDQWdJQ0FwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNodFpYUm9iMlFnUFQwOUlGd2lVRlZVWENJZ0ppWWdibTl5YldGc2FYcGxaRkJoZEdnZ1BUMDlJSEJyVUdGMGFDa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlFWnliMjFOYjJSbGJFTnZiblJ5YjJ4c1pYSXVZM0psWVhSbFVtVm5hWE4wY21GMGFXOXVLRnh1SUNBZ0lDQWdJQ0JjSW5Wd1pHRjBaVndpTEZ4dUlDQWdJQ0FnSUNCR2NtOXRUVzlrWld4RGIyNTBjbTlzYkdWeUxtTnlaV0YwWlZWd1pHRjBaVWhoYm1Sc1pYSW9aMlYwVUVzc0lFMXZaR1ZzUTI5dWMzUnlMQ0J0YjJSbGJFTnNZWHA2VG1GdFpTa3NYRzRnSUNBZ0lDQWdJRVp5YjIxTmIyUmxiRU52Ym5SeWIyeHNaWEl1ZFhCa1lYUmxSR1ZqYjNKaGRHOXljeWhOYjJSbGJFTnZibk4wY2l3Z2JXOWtaV3hEYkdGNmVrNWhiV1VzSUdGd2FWQnliM0JsY25ScFpYTXNJSEJyVUdGMGFDa3NYRzRnSUNBZ0lDQWdJRnRjYmlBZ0lDQWdJQ0FnSUNCN0lHUmxZMjl5WVhSdmNqb2dSR1ZqWVdaUVlYSmhiWE1vWVhCcFVISnZjR1Z5ZEdsbGN5a2dZWE1nWVc1NUxDQnBibVJsZURvZ01DQjlMRnh1SUNBZ0lDQWdJQ0FnSUhzZ1pHVmpiM0poZEc5eU9pQkVaV05oWmtKdlpIa29LU0JoY3lCaGJua3NJR2x1WkdWNE9pQXhJSDBzWEc0Z0lDQWdJQ0FnSUNBZ2V5QmtaV052Y21GMGIzSTZJRkpsYzNCdmJuTmxLSHNnY0dGemMzUm9jbTkxWjJnNklIUnlkV1VnZlNrZ1lYTWdZVzU1TENCcGJtUmxlRG9nTWlCOUxGeHVJQ0FnSUNBZ0lDQmRYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2h0WlhSb2IyUWdQVDA5SUZ3aVJFVk1SVlJGWENJZ0ppWWdibTl5YldGc2FYcGxaRkJoZEdnZ1BUMDlJSEJyVUdGMGFDa2dlMXh1SUNBZ0lDQWdjbVYwZFhKdUlFWnliMjFOYjJSbGJFTnZiblJ5YjJ4c1pYSXVZM0psWVhSbFVtVm5hWE4wY21GMGFXOXVLRnh1SUNBZ0lDQWdJQ0JjSW1SbGJHVjBaVndpTEZ4dUlDQWdJQ0FnSUNCR2NtOXRUVzlrWld4RGIyNTBjbTlzYkdWeUxtTnlaV0YwWlVSbGJHVjBaVWhoYm1Sc1pYSW9aMlYwVUVzc0lHMXZaR1ZzUTJ4aGVucE9ZVzFsS1N4Y2JpQWdJQ0FnSUNBZ1JuSnZiVTF2WkdWc1EyOXVkSEp2Ykd4bGNpNWtaV3hsZEdWRVpXTnZjbUYwYjNKektFMXZaR1ZzUTI5dWMzUnlMQ0J0YjJSbGJFTnNZWHA2VG1GdFpTd2dZWEJwVUhKdmNHVnlkR2xsY3l3Z2NHdFFZWFJvS1N4Y2JpQWdJQ0FnSUNBZ1cxeHVJQ0FnSUNBZ0lDQWdJSHNnWkdWamIzSmhkRzl5T2lCRVpXTmhabEJoY21GdGN5aGhjR2xRY205d1pYSjBhV1Z6S1NCaGN5QmhibmtzSUdsdVpHVjRPaUF3SUgwc1hHNGdJQ0FnSUNBZ0lDQWdleUJrWldOdmNtRjBiM0k2SUZKbGMzQnZibk5sS0hzZ2NHRnpjM1JvY205MVoyZzZJSFJ5ZFdVZ2ZTa2dZWE1nWVc1NUxDQnBibVJsZURvZ01TQjlMRnh1SUNBZ0lDQWdJQ0JkWEc0Z0lDQWdJQ0FwTzF4dUlDQWdJSDFjYmx4dUlDQWdJQzh2SUVOdmJYQnZjMlZrSUZCTElHWmhiR3hpWVdOcklISnZkWFJsY3lBb1ptbHNkR1Z5Ulcxd2RIa3BJT0tBbENCd1lYUm9JR1JwWm1abGNuTWdabkp2YlNCd2ExQmhkR2hjYmlBZ0lDQmpiMjV6ZENCbVlXeHNZbUZqYTFObFoyMWxiblJ6SUQwZ2JtOXliV0ZzYVhwbFpGQmhkR2d1YzNCc2FYUW9YQ0l2WENJcExtWnBiSFJsY2loQ2IyOXNaV0Z1S1R0Y2JpQWdJQ0JqYjI1emRDQnBjMEZzYkZCaGNtRnRjeUE5SUdaaGJHeGlZV05yVTJWbmJXVnVkSE11YkdWdVozUm9JRDRnTUNBbUppQm1ZV3hzWW1GamExTmxaMjFsYm5SekxtVjJaWEo1S0NoektTQTlQaUJ6TG5OMFlYSjBjMWRwZEdnb1hDSTZYQ0lwS1R0Y2JpQWdJQ0JwWmlBb2FYTkJiR3hRWVhKaGJYTWdKaVlnYm05eWJXRnNhWHBsWkZCaGRHZ2dJVDA5SUhCclVHRjBhQ2tnZTF4dUlDQWdJQ0FnWTI5dWMzUWdabUZzYkdKaFkydEJjR2xRY205d2N5QTlJR1poYkd4aVlXTnJVMlZuYldWdWRITXViV0Z3S0NoektTQTlQaUJ6TG5Oc2FXTmxLREVwS1M1dFlYQW9LRzVoYldVcElEMCtJQ2g3WEc0Z0lDQWdJQ0FnSUc1aGJXVXNYRzRnSUNBZ0lDQWdJR1JsYzJOeWFYQjBhVzl1T2lCZ0pIdHVZVzFsZlNCd1lYSmhiV1YwWlhKZ0xGeHVJQ0FnSUNBZ0lDQnlaWEYxYVhKbFpEb2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ2RIbHdaVG9nVTNSeWFXNW5MRnh1SUNBZ0lDQWdmU2twTzF4dUlDQWdJQ0FnWTI5dWMzUWdjM1ZtWm1sNElEMGdabUZzYkdKaFkydFRaV2R0Wlc1MGN5NXRZWEFvS0hNcElEMCtJSE11YzJ4cFkyVW9NU2twTG1wdmFXNG9YQ0pCYm1SY0lpazdYRzRnSUNBZ0lDQnBaaUFvYldWMGFHOWtJRDA5UFNCY0lrZEZWRndpS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCR2NtOXRUVzlrWld4RGIyNTBjbTlzYkdWeUxtTnlaV0YwWlZKbFoybHpkSEpoZEdsdmJpaGNiaUFnSUNBZ0lDQWdJQ0JnY21WaFpFSjVKSHR6ZFdabWFYaDlZQ3hjYmlBZ0lDQWdJQ0FnSUNCR2NtOXRUVzlrWld4RGIyNTBjbTlzYkdWeUxtTnlaV0YwWlZKbFlXUklZVzVrYkdWeUtHZGxkRkJMTENCdGIyUmxiRU5zWVhwNlRtRnRaU2tzWEc0Z0lDQWdJQ0FnSUNBZ1JuSnZiVTF2WkdWc1EyOXVkSEp2Ykd4bGNpNXlaV0ZrUkdWamIzSmhkRzl5Y3loTmIyUmxiRU52Ym5OMGNpd2diVzlrWld4RGJHRjZlazVoYldVc0lHWmhiR3hpWVdOclFYQnBVSEp2Y0hNc0lHNXZjbTFoYkdsNlpXUlFZWFJvS1N4Y2JpQWdJQ0FnSUNBZ0lDQmJleUJrWldOdmNtRjBiM0k2SUVSbFkyRm1VR0Z5WVcxektHWmhiR3hpWVdOclFYQnBVSEp2Y0hNcElHRnpJR0Z1ZVN3Z2FXNWtaWGc2SURBZ2ZWMWNiaUFnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNodFpYUm9iMlFnUFQwOUlGd2lVRlZVWENJcElIdGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlFWnliMjFOYjJSbGJFTnZiblJ5YjJ4c1pYSXVZM0psWVhSbFVtVm5hWE4wY21GMGFXOXVLRnh1SUNBZ0lDQWdJQ0FnSUdCMWNHUmhkR1ZDZVNSN2MzVm1abWw0ZldBc1hHNGdJQ0FnSUNBZ0lDQWdSbkp2YlUxdlpHVnNRMjl1ZEhKdmJHeGxjaTVqY21WaGRHVlZjR1JoZEdWSVlXNWtiR1Z5S0dkbGRGQkxMQ0JOYjJSbGJFTnZibk4wY2l3Z2JXOWtaV3hEYkdGNmVrNWhiV1VwTEZ4dUlDQWdJQ0FnSUNBZ0lFWnliMjFOYjJSbGJFTnZiblJ5YjJ4c1pYSXVkWEJrWVhSbFJHVmpiM0poZEc5eWN5aE5iMlJsYkVOdmJuTjBjaXdnYlc5a1pXeERiR0Y2ZWs1aGJXVXNJR1poYkd4aVlXTnJRWEJwVUhKdmNITXNJRzV2Y20xaGJHbDZaV1JRWVhSb0tTeGNiaUFnSUNBZ0lDQWdJQ0JiWEc0Z0lDQWdJQ0FnSUNBZ0lDQjdJR1JsWTI5eVlYUnZjam9nUkdWallXWlFZWEpoYlhNb1ptRnNiR0poWTJ0QmNHbFFjbTl3Y3lrZ1lYTWdZVzU1TENCcGJtUmxlRG9nTUNCOUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnZXlCa1pXTnZjbUYwYjNJNklFUmxZMkZtUW05a2VTZ3BJR0Z6SUdGdWVTd2dhVzVrWlhnNklERWdmU3hjYmlBZ0lDQWdJQ0FnSUNBZ0lIc2daR1ZqYjNKaGRHOXlPaUJTWlhOd2IyNXpaU2g3SUhCaGMzTjBhSEp2ZFdkb09pQjBjblZsSUgwcElHRnpJR0Z1ZVN3Z2FXNWtaWGc2SURJZ2ZTeGNiaUFnSUNBZ0lDQWdJQ0JkWEc0Z0lDQWdJQ0FnSUNrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCcFppQW9iV1YwYUc5a0lEMDlQU0JjSWtSRlRFVlVSVndpS1NCN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCR2NtOXRUVzlrWld4RGIyNTBjbTlzYkdWeUxtTnlaV0YwWlZKbFoybHpkSEpoZEdsdmJpaGNiaUFnSUNBZ0lDQWdJQ0JnWkdWc1pYUmxRbmtrZTNOMVptWnBlSDFnTEZ4dUlDQWdJQ0FnSUNBZ0lFWnliMjFOYjJSbGJFTnZiblJ5YjJ4c1pYSXVZM0psWVhSbFJHVnNaWFJsU0dGdVpHeGxjaWhuWlhSUVN5d2diVzlrWld4RGJHRjZlazVoYldVcExGeHVJQ0FnSUNBZ0lDQWdJRVp5YjIxTmIyUmxiRU52Ym5SeWIyeHNaWEl1WkdWc1pYUmxSR1ZqYjNKaGRHOXljeWhOYjJSbGJFTnZibk4wY2l3Z2JXOWtaV3hEYkdGNmVrNWhiV1VzSUdaaGJHeGlZV05yUVhCcFVISnZjSE1zSUc1dmNtMWhiR2w2WldSUVlYUm9LU3hjYmlBZ0lDQWdJQ0FnSUNCYlhHNGdJQ0FnSUNBZ0lDQWdJQ0I3SUdSbFkyOXlZWFJ2Y2pvZ1JHVmpZV1pRWVhKaGJYTW9abUZzYkdKaFkydEJjR2xRY205d2N5a2dZWE1nWVc1NUxDQnBibVJsZURvZ01DQjlMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2V5QmtaV052Y21GMGIzSTZJRkpsYzNCdmJuTmxLSHNnY0dGemMzUm9jbTkxWjJnNklIUnlkV1VnZlNrZ1lYTWdZVzU1TENCcGJtUmxlRG9nTVNCOUxGeHVJQ0FnSUNBZ0lDQWdJRjFjYmlBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2JXVjBhRzlrSUQwOVBTQmNJa2RGVkZ3aUlDWW1JRzV2Y20xaGJHbDZaV1JRWVhSb0lEMDlQU0JjSW5OMFlYUmxiV1Z1ZEM4NmJXVjBhRzlrTHlwaGNtZHpYQ0lwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUJHY205dFRXOWtaV3hEYjI1MGNtOXNiR1Z5TG1OeVpXRjBaVkpsWjJsemRISmhkR2x2YmloY2JpQWdJQ0FnSUNBZ1hDSnpkR0YwWlcxbGJuUmNJaXhjYmlBZ0lDQWdJQ0FnUm5KdmJVMXZaR1ZzUTI5dWRISnZiR3hsY2k1amNtVmhkR1ZUZEdGMFpXMWxiblJJWVc1a2JHVnlLRzF2WkdWc1EyeGhlbnBPWVcxbEtTeGNiaUFnSUNBZ0lDQWdSbkp2YlUxdlpHVnNRMjl1ZEhKdmJHeGxjaTV6ZEdGMFpXMWxiblJFWldOdmNtRjBiM0p6S0UxdlpHVnNRMjl1YzNSeUxDQnRiMlJsYkVOc1lYcDZUbUZ0WlNrc1hHNGdJQ0FnSUNBZ0lGdGNiaUFnSUNBZ0lDQWdJQ0I3SUdSbFkyOXlZWFJ2Y2pvZ1VHRnlZVzBvWENKdFpYUm9iMlJjSWlrZ1lYTWdZVzU1TENCcGJtUmxlRG9nTUNCOUxGeHVJQ0FnSUNBZ0lDQWdJSHNnWkdWamIzSmhkRzl5T2lCUVlYSmhiU2hjSW1GeVozTmNJaWtnWVhNZ1lXNTVMQ0JwYm1SbGVEb2dNU0I5TEZ4dUlDQWdJQ0FnSUNBZ0lIc2daR1ZqYjNKaGRHOXlPaUJFWldOaFpsRjFaWEo1S0NrZ1lYTWdZVzU1TENCcGJtUmxlRG9nTWlCOUxGeHVJQ0FnSUNBZ0lDQmRYRzRnSUNBZ0lDQXBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHTnZibk4wSUhOMFlYUmxiV1Z1ZEZKdmRYUmxjem9nVW1WamIzSmtQSE4wY21sdVp5d2djM1J5YVc1blBpQTlJSHRjYmlBZ0lDQWdJRndpYkdsemRFSjVMenByWlhsY0lqb2dVSEpsY0dGeVpXUlRkR0YwWlcxbGJuUkxaWGx6TGt4SlUxUmZRbGtzWEc0Z0lDQWdJQ0JjSW5CaFoybHVZWFJsUW5rdk9tdGxlUzg2Y0dGblpWd2lPaUJRY21Wd1lYSmxaRk4wWVhSbGJXVnVkRXRsZVhNdVVFRkhSVjlDV1N4Y2JpQWdJQ0FnSUZ3aVptbHVaQzg2ZG1Gc2RXVmNJam9nVUhKbGNHRnlaV1JUZEdGMFpXMWxiblJMWlhsekxrWkpUa1FzWEc0Z0lDQWdJQ0JjSW5CaFoyVXZPblpoYkhWbFhDSTZJRkJ5WlhCaGNtVmtVM1JoZEdWdFpXNTBTMlY1Y3k1UVFVZEZMRnh1SUNBZ0lDQWdYQ0ptYVc1a1QyNWxRbmt2T210bGVTODZkbUZzZFdWY0lqb2dVSEpsY0dGeVpXUlRkR0YwWlcxbGJuUkxaWGx6TGtaSlRrUmZUMDVGWDBKWkxGeHVJQ0FnSUNBZ1hDSm1hVzVrUW5rdk9tdGxlUzg2ZG1Gc2RXVmNJam9nVUhKbGNHRnlaV1JUZEdGMFpXMWxiblJMWlhsekxrWkpUa1JmUWxrc1hHNGdJQ0FnSUNCY0ltTnZkVzUwVDJZdk9tWnBaV3hrWENJNklGQnlaWEJoY21Wa1UzUmhkR1Z0Wlc1MFMyVjVjeTVEVDFWT1ZGOVBSaXhjYmlBZ0lDQWdJRndpYldGNFQyWXZPbVpwWld4a1hDSTZJRkJ5WlhCaGNtVmtVM1JoZEdWdFpXNTBTMlY1Y3k1TlFWaGZUMFlzWEc0Z0lDQWdJQ0JjSW0xcGJrOW1MenBtYVdWc1pGd2lPaUJRY21Wd1lYSmxaRk4wWVhSbGJXVnVkRXRsZVhNdVRVbE9YMDlHTEZ4dUlDQWdJQ0FnWENKaGRtZFBaaTg2Wm1sbGJHUmNJam9nVUhKbGNHRnlaV1JUZEdGMFpXMWxiblJMWlhsekxrRldSMTlQUml4Y2JpQWdJQ0FnSUZ3aWMzVnRUMll2T21acFpXeGtYQ0k2SUZCeVpYQmhjbVZrVTNSaGRHVnRaVzUwUzJWNWN5NVRWVTFmVDBZc1hHNGdJQ0FnSUNCY0ltUnBjM1JwYm1OMFQyWXZPbVpwWld4a1hDSTZJRkJ5WlhCaGNtVmtVM1JoZEdWdFpXNTBTMlY1Y3k1RVNWTlVTVTVEVkY5UFJpeGNiaUFnSUNBZ0lGd2laM0p2ZFhCUFppODZabWxsYkdSY0lqb2dVSEpsY0dGeVpXUlRkR0YwWlcxbGJuUkxaWGx6TGtkU1QxVlFYMDlHTEZ4dUlDQWdJSDA3WEc1Y2JpQWdJQ0JqYjI1emRDQnpkR0YwWlcxbGJuUkxaWGtnUFNCemRHRjBaVzFsYm5SU2IzVjBaWE5iYm05eWJXRnNhWHBsWkZCaGRHaGRPMXh1SUNBZ0lHbG1JQ2h6ZEdGMFpXMWxiblJMWlhrZ0ppWWdiV1YwYUc5a0lEMDlQU0JjSWtkRlZGd2lLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdSbkp2YlUxdlpHVnNRMjl1ZEhKdmJHeGxjaTVqY21WaGRHVlNaV2RwYzNSeVlYUnBiMjRvWEc0Z0lDQWdJQ0FnSUVaeWIyMU5iMlJsYkVOdmJuUnliMnhzWlhJdWMzUmhkR1Z0Wlc1MFRXVjBhRzlrVG1GdFpTaHViM0p0WVd4cGVtVmtVR0YwYUNrc1hHNGdJQ0FnSUNBZ0lFWnliMjFOYjJSbGJFTnZiblJ5YjJ4c1pYSXVZM0psWVhSbFUzUmhkR1Z0Wlc1MFUyaHZjblJqZFhSSVlXNWtiR1Z5S0hOMFlYUmxiV1Z1ZEV0bGVTd2diVzlrWld4RGJHRjZlazVoYldVcExGeHVJQ0FnSUNBZ0lDQkdjbTl0VFc5a1pXeERiMjUwY205c2JHVnlMbk4wWVhSbGJXVnVkRk5vYjNKMFkzVjBSR1ZqYjNKaGRHOXljeWhOYjJSbGJFTnZibk4wY2l3Z2JXOWtaV3hEYkdGNmVrNWhiV1VzSUc1dmNtMWhiR2w2WldSUVlYUm9MQ0J6ZEdGMFpXMWxiblJMWlhrcExGeHVJQ0FnSUNBZ0lDQkdjbTl0VFc5a1pXeERiMjUwY205c2JHVnlMbk4wWVhSbGJXVnVkRk5vYjNKMFkzVjBVR0Z5WVcxektHNXZjbTFoYkdsNlpXUlFZWFJvS1Z4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JwWmlBb2JXVjBhRzlrSUQwOVBTQmNJa2RGVkZ3aUlDWW1JRzV2Y20xaGJHbDZaV1JRWVhSb0xuTjBZWEowYzFkcGRHZ29YQ0p4ZFdWeWVTOWNJaWtwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJSEYxWlhKNVRXVjBhRzlrSUQwZ2JtOXliV0ZzYVhwbFpGQmhkR2d1Y21Wd2JHRmpaU2d2WG5GMVpYSjVYRnd2THl3Z1hDSmNJaWt1YzNCc2FYUW9YQ0l2WENJcFd6QmRPMXh1SUNBZ0lDQWdjbVYwZFhKdUlFWnliMjFOYjJSbGJFTnZiblJ5YjJ4c1pYSXVZM0psWVhSbFVtVm5hWE4wY21GMGFXOXVLRnh1SUNBZ0lDQWdJQ0J4ZFdWeWVVMWxkR2h2WkN4Y2JpQWdJQ0FnSUNBZ1JuSnZiVTF2WkdWc1EyOXVkSEp2Ykd4bGNpNWpjbVZoZEdWRGIyMXdiR1Y0VVhWbGNubElZVzVrYkdWeUtIRjFaWEo1VFdWMGFHOWtLU3hjYmlBZ0lDQWdJQ0FnUm5KdmJVMXZaR1ZzUTI5dWRISnZiR3hsY2k1blpYUlJkV1Z5ZVVSbFkyOXlZWFJ2Y25Nb2NYVmxjbmxOWlhSb2IyUXNJRzV2Y20xaGJHbDZaV1JRWVhSb0xDQmNJa2RGVkZ3aUxDQjBjblZsS1N4Y2JpQWdJQ0FnSUNBZ1JuSnZiVTF2WkdWc1EyOXVkSEp2Ykd4bGNpNWpiMjF3YkdWNFVYVmxjbmxRWVhKaGJYTW9ibTl5YldGc2FYcGxaRkJoZEdncFhHNGdJQ0FnSUNBcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUM4dklFWmhiR3hpWVdOcklHWnZjaUJqZFhOMGIyMGdRSEp2ZFhSbEtDa2djR0YwYUhNZ0tHVXVaeTRnWENKdFpYUmhaR0YwWVM5bWIzSXRjSEp2WkhWamRDODZjSEp2WkhWamRFTnZaR1ZjSWlsY2JpQWdJQ0JqYjI1emRDQndZWFJvVTJWbmJXVnVkSE1nUFNCdWIzSnRZV3hwZW1Wa1VHRjBhQzV6Y0d4cGRDaGNJaTljSWlrdVptbHNkR1Z5S0VKdmIyeGxZVzRwTzF4dUlDQWdJR052Ym5OMElHdHViM2R1VUhKbFptbDRaWE1nUFNCdVpYY2dVMlYwUEhOMGNtbHVaejRvVzF4dUlDQWdJQ0FnWENKc2FYTjBRbmxjSWl3Z1hDSm1hVzVrUW5sY0lpd2dYQ0ptYVc1a1FubFFZV2RwYm1GMFpWd2lMQ0JjSW1acGJtUlBibVZDZVZ3aUxDQmNJbkJoWjJsdVlYUmxRbmxjSWl4Y2JpQWdJQ0FnSUZ3aVptbHVaRndpTENCY0luQmhaMlZjSWl3Z1hDSmpiM1Z1ZEU5bVhDSXNJRndpYldGNFQyWmNJaXdnWENKdGFXNVBabHdpTENCY0ltRjJaMDltWENJc0lGd2ljM1Z0VDJaY0lpeGNiaUFnSUNBZ0lGd2laR2x6ZEdsdVkzUlBabHdpTENCY0ltZHliM1Z3VDJaY0lpd2dYQ0p6ZEdGMFpXMWxiblJjSWl3Z1hDSmlkV3hyWENJc0lGd2ljWFZsY25sY0lpeGNiaUFnSUNCZEtUdGNiaUFnSUNCcFppQW9YRzRnSUNBZ0lDQndZWFJvVTJWbmJXVnVkSE11YkdWdVozUm9JRDRnTUNBbUpseHVJQ0FnSUNBZ0lXNXZjbTFoYkdsNlpXUlFZWFJvTG5OMFlYSjBjMWRwZEdnb1hDSnhkV1Z5ZVM5Y0lpa2dKaVpjYmlBZ0lDQWdJQ0ZyYm05M2JsQnlaV1pwZUdWekxtaGhjeWh3WVhSb1UyVm5iV1Z1ZEhOYk1GMHBYRzRnSUNBZ0tTQjdYRzRnSUNBZ0lDQXZMeUJNYjI5cklIVndJSFJvWlNCaFkzUjFZV3dnYldWMGFHOWtJRzVoYldVZ1puSnZiU0JBY205MWRHVWdiV1YwWVdSaGRHRWdZbmtnYldGMFkyaHBibWNnZEdobElIQmhkR2d1WEc0Z0lDQWdJQ0F2THlCVWFHVWdRSEp2ZFhSbElHUmxZMjl5WVhSdmNpQnpkRzl5WlhNZ2V5QndZWFJvTENCb2RIUndUV1YwYUc5a0xDQm9ZVzVrYkdWeUlIMGdhMlY1WldRZ1lua2diV1YwYUc5a0lHNWhiV1ZjYmlBZ0lDQWdJQzh2SUc5dUlIUm9aU0J5WlhCdmMybDBiM0o1SUdOdmJuTjBjblZqZEc5eUxseHVJQ0FnSUNBZ1kyOXVjM1FnY205MWRHVk5aWFJoWkdGMFlUb2dVbVZqYjNKa1BITjBjbWx1Wnl3Z1lXNTVQaUE5WEc0Z0lDQWdJQ0FnSUUxbGRHRmtZWFJoTG1kbGRDaGNiaUFnSUNBZ0lDQWdJQ0FvY0dWeWMybHpkR1Z1WTJVZ1lYTWdZVzU1S1Q4dVkyOXVjM1J5ZFdOMGIzSXNYRzRnSUNBZ0lDQWdJQ0FnVFdWMFlXUmhkR0V1YTJWNUtFUkZRMEZHWDFKUFZWUkZLVnh1SUNBZ0lDQWdJQ0FwSUQ4L0lIdDlPMXh1SUNBZ0lDQWdZMjl1YzNRZ2JXRjBZMmhsWkVWdWRISjVJRDBnVDJKcVpXTjBMbVZ1ZEhKcFpYTW9jbTkxZEdWTlpYUmhaR0YwWVNrdVptbHVaQ2hjYmlBZ0lDQWdJQ0FnS0Zzc0lHbHVabTlkS1NBOVBseHVJQ0FnSUNBZ0lDQWdJR2x1Wm04Z0ppWmNiaUFnSUNBZ0lDQWdJQ0IwZVhCbGIyWWdhVzVtYnlBOVBUMGdYQ0p2WW1wbFkzUmNJaUFtSmx4dUlDQWdJQ0FnSUNBZ0lHbHVabTh1Y0dGMGFEOHVjbVZ3YkdGalpTZ3ZYbHhjTHl0OFhGd3ZLeVF2Wnl3Z1hDSmNJaWtnUFQwOUlHNXZjbTFoYkdsNlpXUlFZWFJvWEc0Z0lDQWdJQ0FwTzF4dUlDQWdJQ0FnWTI5dWMzUWdZV04wZFdGc1RXVjBhRzlrVG1GdFpTQTlJRzFoZEdOb1pXUkZiblJ5ZVQ4dVd6QmRJSHg4SUhCaGRHaFRaV2R0Wlc1MGMxc3dYVHRjYmx4dUlDQWdJQ0FnWTI5dWMzUWdjR0Z5WVcxVFpXZHRaVzUwY3lBOUlIQmhkR2hUWldkdFpXNTBjeTVtYVd4MFpYSW9LSE1wSUQwK0lITXVjM1JoY25SelYybDBhQ2hjSWpwY0lpa3BPMXh1SUNBZ0lDQWdZMjl1YzNRZ1lYQnBVR0YwYUZCaGNtRnRjeUE5SUhCaGNtRnRVMlZuYldWdWRITXViV0Z3S0NoektTQTlQaUJ6TG5Oc2FXTmxLREVwS1M1dFlYQW9LRzVoYldVcElEMCtJQ2g3WEc0Z0lDQWdJQ0FnSUc1aGJXVXNYRzRnSUNBZ0lDQWdJR1JsYzJOeWFYQjBhVzl1T2lCZ0pIdHVZVzFsZlNCd1lYSmhiV1YwWlhJZ1ptOXlJSFJvWlNCeGRXVnllV0FzWEc0Z0lDQWdJQ0FnSUhKbGNYVnBjbVZrT2lCMGNuVmxMRnh1SUNBZ0lDQWdJQ0IwZVhCbE9pQlRkSEpwYm1jc1hHNGdJQ0FnSUNCOUtTazdYRzVjYmlBZ0lDQWdJSEpsZEhWeWJpQkdjbTl0VFc5a1pXeERiMjUwY205c2JHVnlMbU55WldGMFpWSmxaMmx6ZEhKaGRHbHZiaWhjYmlBZ0lDQWdJQ0FnWVdOMGRXRnNUV1YwYUc5a1RtRnRaU3hjYmlBZ0lDQWdJQ0FnUm5KdmJVMXZaR1ZzUTI5dWRISnZiR3hsY2k1amNtVmhkR1ZEZFhOMGIyMVNiM1YwWlVoaGJtUnNaWElvWVdOMGRXRnNUV1YwYUc5a1RtRnRaU2tzWEc0Z0lDQWdJQ0FnSUZ0Y2JpQWdJQ0FnSUNBZ0lDQXVMaTVoY0dsUVlYUm9VR0Z5WVcxekxtMWhjQ2dvY0NrZ1BUNGdRWEJwVUdGeVlXMG9jQ2twTEZ4dUlDQWdJQ0FnSUNBZ0lFRndhVTl3WlhKaGRHbHZiaWg3SUhOMWJXMWhjbms2SUdCU1pYUnlhV1YyWlNCeVpXTnZjbVJ6SUhWemFXNW5JRndpSkh0aFkzUjFZV3hOWlhSb2IyUk9ZVzFsZlZ3aUxtQWdmU2tzWEc0Z0lDQWdJQ0FnSUNBZ1FYQnBUMnRTWlhOd2IyNXpaU2g3SUdSbGMyTnlhWEIwYVc5dU9pQmNJbEpsYzNWc2RDQnpkV05qWlhOelpuVnNiSGtnY21WMGNtbGxkbVZrTGx3aUlIMHBMRnh1SUNBZ0lDQWdJQ0FnSUVGd2FVNXZRMjl1ZEdWdWRGSmxjM0J2Ym5ObEtIc2daR1Z6WTNKcGNIUnBiMjQ2SUZ3aVRtOGdZMjl1ZEdWdWRDQnlaWFIxY201bFpDQmllU0IwYUdVZ2JXVjBhRzlrTGx3aUlIMHBMRnh1SUNBZ0lDQWdJQ0JkTEZ4dUlDQWdJQ0FnSUNCR2NtOXRUVzlrWld4RGIyNTBjbTlzYkdWeUxtTnZiWEJzWlhoUmRXVnllVkJoY21GdGN5aHViM0p0WVd4cGVtVmtVR0YwYUNsY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY21WMGRYSnVJSFZ1WkdWbWFXNWxaRHRjYmlBZ2ZWeHVYRzRnSUhCeWFYWmhkR1VnYzNSaGRHbGpJR055WldGMFpWSmxaMmx6ZEhKaGRHbHZiaWhjYmlBZ0lDQnRaWFJvYjJST1lXMWxPaUJ6ZEhKcGJtY3NYRzRnSUNBZ2FHRnVaR3hsY2pvZ0tDNHVMbUZ5WjNNNklHRnVlVnRkS1NBOVBpQmhibmtzWEc0Z0lDQWdaR1ZqYjNKaGRHOXljem9nUVhKeVlYazhLSFJoY21kbGREb2dZVzU1TENCclpYazZJSE4wY21sdVp5d2daR1Z6WXpvZ1lXNTVLU0E5UGlCMmIybGtQaXhjYmlBZ0lDQndZWEpoYlVSbFkyOXlZWFJ2Y25NNklFRnljbUY1UEhzZ1pHVmpiM0poZEc5eU9pQlFZWEpoYldWMFpYSkVaV052Y21GMGIzSTdJR2x1WkdWNE9pQnVkVzFpWlhJZ2ZUNWNiaUFnS1NCN1hHNGdJQ0FnY21WMGRYSnVJSHNnYldWMGFHOWtUbUZ0WlN3Z2FHRnVaR3hsY2l3Z1pHVmpiM0poZEc5eWN5d2djR0Z5WVcxRVpXTnZjbUYwYjNKeklIMDdYRzRnSUgxY2JseHVJQ0J3Y21sMllYUmxJSE4wWVhScFl5QnpkR0YwWlcxbGJuUk5aWFJvYjJST1lXMWxLSEJoZEdnNklITjBjbWx1WnlrNklITjBjbWx1WnlCN1hHNGdJQ0FnWTI5dWMzUWdabWx5YzNSVFpXZHRaVzUwSUQwZ2NHRjBhQzV6Y0d4cGRDaGNJaTljSWlsYk1GMDdYRzRnSUNBZ2NtVjBkWEp1SUdacGNuTjBVMlZuYldWdWREdGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdjM1JoZEdsaklITjBZWFJsYldWdWRGTm9iM0owWTNWMFVHRnlZVzF6S0Z4dUlDQWdJSEJoZEdnNklITjBjbWx1WjF4dUlDQXBPaUJCY25KaGVUeDdJR1JsWTI5eVlYUnZjam9nVUdGeVlXMWxkR1Z5UkdWamIzSmhkRzl5T3lCcGJtUmxlRG9nYm5WdFltVnlJSDArSUh0Y2JpQWdJQ0JqYjI1emRDQnpaV2R0Wlc1MGN5QTlJSEJoZEdndWMzQnNhWFFvWENJdlhDSXBMbVpwYkhSbGNpZ29jeWtnUFQ0Z2N5NXpkR0Z5ZEhOWGFYUm9LRndpT2x3aUtTazdYRzRnSUNBZ1kyOXVjM1FnY0dGeVlXMXpPaUJCY25KaGVUeDdJR1JsWTI5eVlYUnZjam9nVUdGeVlXMWxkR1Z5UkdWamIzSmhkRzl5T3lCcGJtUmxlRG9nYm5WdFltVnlJSDArSUQwZ1cxMDdYRzRnSUNBZ2MyVm5iV1Z1ZEhNdVptOXlSV0ZqYUNnb2MyVm5MQ0JwS1NBOVBpQjdYRzRnSUNBZ0lDQmpiMjV6ZENCdVlXMWxJRDBnYzJWbkxuSmxjR3hoWTJVb1hDSTZYQ0lzSUZ3aVhDSXBPMXh1SUNBZ0lDQWdjR0Z5WVcxekxuQjFjMmdvZXlCa1pXTnZjbUYwYjNJNklGQmhjbUZ0S0c1aGJXVXBJR0Z6SUdGdWVTd2dhVzVrWlhnNklHa2dmU2s3WEc0Z0lDQWdmU2s3WEc0Z0lDQWdhV1lnS0Z4dUlDQWdJQ0FnY0dGMGFDNXpkR0Z5ZEhOWGFYUm9LRndpYkdsemRFSjVMMXdpS1NCOGZGeHVJQ0FnSUNBZ2NHRjBhQzV6ZEdGeWRITlhhWFJvS0Z3aWNHRm5hVzVoZEdWQ2VTOWNJaWtnZkh4Y2JpQWdJQ0FnSUhCaGRHZ3VjM1JoY25SelYybDBhQ2hjSW1acGJtUXZYQ0lwSUh4OFhHNGdJQ0FnSUNCd1lYUm9Mbk4wWVhKMGMxZHBkR2dvWENKd1lXZGxMMXdpS1Z4dUlDQWdJQ2tnZTF4dUlDQWdJQ0FnY0dGeVlXMXpMbkIxYzJnb2V5QmtaV052Y21GMGIzSTZJRVJsWTJGbVVYVmxjbmtvS1NCaGN5QmhibmtzSUdsdVpHVjRPaUJ6WldkdFpXNTBjeTVzWlc1bmRHZ2dmU2s3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCd1lYSmhiWE03WEc0Z0lIMWNibHh1SUNCd2NtbDJZWFJsSUhOMFlYUnBZeUJqYjIxd2JHVjRVWFZsY25sUVlYSmhiWE1vWEc0Z0lDQWdjR0YwYURvZ2MzUnlhVzVuWEc0Z0lDazZJRUZ5Y21GNVBIc2daR1ZqYjNKaGRHOXlPaUJRWVhKaGJXVjBaWEpFWldOdmNtRjBiM0k3SUdsdVpHVjRPaUJ1ZFcxaVpYSWdmVDRnZTF4dUlDQWdJR052Ym5OMElITmxaMjFsYm5SeklEMGdjR0YwYUM1emNHeHBkQ2hjSWk5Y0lpa3VabWxzZEdWeUtDaHpLU0E5UGlCekxuTjBZWEowYzFkcGRHZ29YQ0k2WENJcEtUdGNiaUFnSUNCamIyNXpkQ0J3WVhKaGJYTTZJRUZ5Y21GNVBIc2daR1ZqYjNKaGRHOXlPaUJRWVhKaGJXVjBaWEpFWldOdmNtRjBiM0k3SUdsdVpHVjRPaUJ1ZFcxaVpYSWdmVDRnUFNCYlhUdGNiaUFnSUNCelpXZHRaVzUwY3k1bWIzSkZZV05vS0NoelpXY3NJR2twSUQwK0lIdGNiaUFnSUNBZ0lHTnZibk4wSUc1aGJXVWdQU0J6WldjdWNtVndiR0ZqWlNoY0lqcGNJaXdnWENKY0lpazdYRzRnSUNBZ0lDQndZWEpoYlhNdWNIVnphQ2g3SUdSbFkyOXlZWFJ2Y2pvZ1VHRnlZVzBvYm1GdFpTa2dZWE1nWVc1NUxDQnBibVJsZURvZ2FTQjlLVHRjYmlBZ0lDQjlLVHRjYmlBZ0lDQnBaaUFvY0dGMGFDNXpkR0Z5ZEhOWGFYUm9LRndpY1hWbGNua3ZYQ0lwS1NCN1hHNGdJQ0FnSUNCd1lYSmhiWE11Y0hWemFDaDdJR1JsWTI5eVlYUnZjam9nUkdWallXWlJkV1Z5ZVNncElHRnpJR0Z1ZVN3Z2FXNWtaWGc2SUhObFoyMWxiblJ6TG14bGJtZDBhQ0I5S1R0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlIQmhjbUZ0Y3p0Y2JpQWdmVnh1WEc0Z0lIQnlhWFpoZEdVZ2MzUmhkR2xqSUdOeVpXRjBaVU55WldGMFpVaGhibVJzWlhJb1hHNGdJQ0FnVFc5a1pXeERiMjV6ZEhJNklFMXZaR1ZzUTI5dWMzUnlkV04wYjNJOFlXNTVQaXhjYmlBZ0lDQnRiMlJsYkVOc1lYcDZUbUZ0WlRvZ2MzUnlhVzVuWEc0Z0lDa2dlMXh1SUNBZ0lISmxkSFZ5YmlCaGMzbHVZeUJtZFc1amRHbHZiaUJqY21WaGRHVW9YRzRnSUNBZ0lDQjBhR2x6T2lCaGJua3NYRzRnSUNBZ0lDQmtZWFJoT2lCaGJua3NYRzRnSUNBZ0lDQnlaWE53UHpvZ1lXNTVYRzRnSUNBZ0tUb2dVSEp2YldselpUeE5iMlJsYkR4aGJuaytQaUI3WEc0Z0lDQWdJQ0JqYjI1emRDQjdJR04wZUN3Z2JHOW5JSDBnUFNBb1hHNGdJQ0FnSUNBZ0lHRjNZV2wwSUhSb2FYTXViRzluUTNSNEtGdGRMQ0JQY0dWeVlYUnBiMjVMWlhsekxrTlNSVUZVUlN3Z2RISjFaU2xjYmlBZ0lDQWdJQ2t1Wm05eUtHTnlaV0YwWlNrN1hHNGdJQ0FnSUNCc2IyY3VkbVZ5WW05elpTaGdZM0psWVhScGJtY2dibVYzSUNSN2JXOWtaV3hEYkdGNmVrNWhiV1Y5WUNrN1hHNGdJQ0FnSUNCc1pYUWdZM0psWVhSbFpEb2dUVzlrWld3N1hHNGdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0JqY21WaGRHVmtJRDBnWVhkaGFYUWdkR2hwY3k1d1pYSnphWE4wWlc1alpTaGpkSGdwTG1OeVpXRjBaU2hrWVhSaExDQmpkSGdwTzF4dUlDQWdJQ0FnZlNCallYUmphQ0FvWlRvZ2RXNXJibTkzYmlrZ2UxeHVJQ0FnSUNBZ0lDQnNiMmN1WlhKeWIzSW9ZRVpoYVd4bFpDQjBieUJqY21WaGRHVWdibVYzSUNSN2JXOWtaV3hEYkdGNmVrNWhiV1Y5WUN3Z1pTQmhjeUJGY25KdmNpazdYRzRnSUNBZ0lDQWdJSFJvY205M0lHVTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQnNiMmN1YVc1bWJ5aGdZM0psWVhSbFpDQnVaWGNnSkh0dGIyUmxiRU5zWVhwNlRtRnRaWDBnZDJsMGFDQnBaQ0FrZXloamNtVmhkR1ZrSUdGeklHRnVlU2xiZEdocGN5NXdhMTE5WUNrN1hHNGdJQ0FnSUNCcFppQW9jbVZ6Y0NrZ1kzUjRMblJ2VW1WemNHOXVjMlVvY21WemNDazdYRzRnSUNBZ0lDQnlaWFIxY200Z1kzSmxZWFJsWkR0Y2JpQWdJQ0I5TzF4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCemRHRjBhV01nWTNKbFlYUmxRblZzYTBOeVpXRjBaVWhoYm1Sc1pYSW9YRzRnSUNBZ1RXOWtaV3hEYjI1emRISTZJRTF2WkdWc1EyOXVjM1J5ZFdOMGIzSThZVzU1UGl4Y2JpQWdJQ0J0YjJSbGJFTnNZWHA2VG1GdFpUb2djM1J5YVc1blhHNGdJQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQmhjM2x1WXlCbWRXNWpkR2x2YmlCamNtVmhkR1ZCYkd3b1hHNGdJQ0FnSUNCMGFHbHpPaUJoYm5rc1hHNGdJQ0FnSUNCa1lYUmhPaUJoYm5sYlhTeGNiaUFnSUNBZ0lISmxjM0EvT2lCaGJubGNiaUFnSUNBcE9pQlFjbTl0YVhObFBFMXZaR1ZzVzEwK0lIdGNiaUFnSUNBZ0lHTnZibk4wSUhzZ1kzUjRMQ0JzYjJjZ2ZTQTlJQ2hjYmlBZ0lDQWdJQ0FnWVhkaGFYUWdkR2hwY3k1c2IyZERkSGdvVzEwc0lFSjFiR3REY25Wa1QzQmxjbUYwYVc5dVMyVjVjeTVEVWtWQlZFVmZRVXhNTENCMGNuVmxLVnh1SUNBZ0lDQWdLUzVtYjNJb1kzSmxZWFJsUVd4c0tUdGNiaUFnSUNBZ0lHeHZaeTUyWlhKaWIzTmxLR0JqY21WaGRHbHVaeUJ1WlhjZ0pIdHRiMlJsYkVOc1lYcDZUbUZ0WlgxZ0tUdGNiaUFnSUNBZ0lHeGxkQ0JqY21WaGRHVmtPaUJoYm5sYlhUdGNiaUFnSUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0FnSUdOeVpXRjBaV1FnUFNCaGQyRnBkQ0IwYUdsekxuQmxjbk5wYzNSbGJtTmxLR04wZUNrdVkzSmxZWFJsUVd4c0tGeHVJQ0FnSUNBZ0lDQWdJR1JoZEdFdWJXRndLQ2hrS1NBOVBpQnVaWGNnVFc5a1pXeERiMjV6ZEhJb1pDa3BMRnh1SUNBZ0lDQWdJQ0FnSUdOMGVGeHVJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdmU0JqWVhSamFDQW9aVG9nZFc1cmJtOTNiaWtnZTF4dUlDQWdJQ0FnSUNCc2IyY3VaWEp5YjNJb1lFWmhhV3hsWkNCMGJ5QmpjbVZoZEdVZ2JtVjNJQ1I3Ylc5a1pXeERiR0Y2ZWs1aGJXVjlZQ3dnWlNCaGN5QkZjbkp2Y2lrN1hHNGdJQ0FnSUNBZ0lIUm9jbTkzSUdVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCc2IyY3VhVzVtYnloZ1kzSmxZWFJsWkNCdVpYY2dKSHR0YjJSbGJFTnNZWHA2VG1GdFpYMGdkMmwwYUNCcFpDQWtleWhqY21WaGRHVmtJR0Z6SUdGdWVTbGJkR2hwY3k1d2ExMTlZQ2s3WEc0Z0lDQWdJQ0JwWmlBb2NtVnpjQ2tnWTNSNExuUnZVbVZ6Y0c5dWMyVW9jbVZ6Y0NrN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWTNKbFlYUmxaRHRjYmlBZ0lDQjlPMXh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0J6ZEdGMGFXTWdZM0psWVhSbFFuVnNhMUpsWVdSSVlXNWtiR1Z5S0cxdlpHVnNRMnhoZW5wT1lXMWxPaUJ6ZEhKcGJtY3BJSHRjYmlBZ0lDQnlaWFIxY200Z1lYTjVibU1nWm5WdVkzUnBiMjRnY21WaFpFRnNiQ2hjYmlBZ0lDQWdJSFJvYVhNNklHRnVlU3hjYmlBZ0lDQWdJR2xrY3pvZ2MzUnlhVzVuVzExY2JpQWdJQ0FwT2lCUWNtOXRhWE5sUEUxdlpHVnNXMTArSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJSHNnWTNSNExDQnNiMmNnZlNBOUlDaGNiaUFnSUNBZ0lDQWdZWGRoYVhRZ2RHaHBjeTVzYjJkRGRIZ29XMTBzSUVKMWJHdERjblZrVDNCbGNtRjBhVzl1UzJWNWN5NVNSVUZFWDBGTVRDd2dkSEoxWlNsY2JpQWdJQ0FnSUNrdVptOXlLSEpsWVdSQmJHd3BPMXh1SUNBZ0lDQWdZMjl1YzNRZ2JtOXliV0ZzYVhwbFpFbGtjeUE5SUVGeWNtRjVMbWx6UVhKeVlYa29hV1J6S1NBL0lHbGtjeUE2SUZ0cFpITmRPMXh1SUNBZ0lDQWdiR1YwSUhKbFlXUTZJRTF2WkdWc1cxMDdYRzRnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNCc2IyY3VaR1ZpZFdjb1lISmxZV1JwYm1jZ0pIdHViM0p0WVd4cGVtVmtTV1J6ZlNBa2UyMXZaR1ZzUTJ4aGVucE9ZVzFsZldBcE8xeHVJQ0FnSUNBZ0lDQnlaV0ZrSUQwZ1lYZGhhWFFnZEdocGN5NXdaWEp6YVhOMFpXNWpaU2hqZEhncExuSmxZV1JCYkd3b2JtOXliV0ZzYVhwbFpFbGtjeUJoY3lCaGJua3NJR04wZUNrN1hHNGdJQ0FnSUNCOUlHTmhkR05vSUNobE9pQjFibXR1YjNkdUtTQjdYRzRnSUNBZ0lDQWdJR3h2Wnk1bGNuSnZjaWhnUm1GcGJHVmtJSFJ2SUhKbFlXUWdKSHR0YjJSbGJFTnNZWHA2VG1GdFpYMWdMQ0JsSUdGeklFVnljbTl5S1R0Y2JpQWdJQ0FnSUNBZ2RHaHliM2NnWlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUd4dlp5NXBibVp2S0dCeVpXRmtJQ1I3Y21WaFpDNXNaVzVuZEdoOUlDUjdiVzlrWld4RGJHRjZlazVoYldWOVlDazdYRzRnSUNBZ0lDQnlaWFIxY200Z2NtVmhaRHRjYmlBZ0lDQjlPMXh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0J6ZEdGMGFXTWdZM0psWVhSbFFuVnNhMVZ3WkdGMFpVaGhibVJzWlhJb2JXOWtaV3hEYkdGNmVrNWhiV1U2SUhOMGNtbHVaeWtnZTF4dUlDQWdJSEpsZEhWeWJpQmhjM2x1WXlCbWRXNWpkR2x2YmlCMWNHUmhkR1ZCYkd3b1hHNGdJQ0FnSUNCMGFHbHpPaUJoYm5rc1hHNGdJQ0FnSUNCaWIyUjVPaUJoYm5sYlhTeGNiaUFnSUNBZ0lISmxjM0EvT2lCaGJubGNiaUFnSUNBcE9pQlFjbTl0YVhObFBHRnVlVnRkUGlCN1hHNGdJQ0FnSUNCamIyNXpkQ0I3SUdOMGVDd2diRzluSUgwZ1BTQW9YRzRnSUNBZ0lDQWdJR0YzWVdsMElIUm9hWE11Ykc5blEzUjRLRnRkTENCQ2RXeHJRM0oxWkU5d1pYSmhkR2x2Ymt0bGVYTXVWVkJFUVZSRlgwRk1UQ3dnZEhKMVpTbGNiaUFnSUNBZ0lDa3VabTl5S0hWd1pHRjBaVUZzYkNrN1hHNGdJQ0FnSUNCc1pYUWdkWEJrWVhSbFpEb2dZVzU1VzEwN1hHNGdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0JzYjJjdWFXNW1ieWhnZFhCa1lYUnBibWNnSkh0aWIyUjVMbXhsYm1kMGFIMGdKSHR0YjJSbGJFTnNZWHA2VG1GdFpYMWdLVHRjYmlBZ0lDQWdJQ0FnZFhCa1lYUmxaQ0E5SUdGM1lXbDBJSFJvYVhNdWNHVnljMmx6ZEdWdVkyVW9ZM1I0S1M1MWNHUmhkR1ZCYkd3b1ltOWtlU3dnWTNSNEtUdGNiaUFnSUNBZ0lIMGdZMkYwWTJnZ0tHVTZJSFZ1YTI1dmQyNHBJSHRjYmlBZ0lDQWdJQ0FnYkc5bkxtVnljbTl5S0dVZ1lYTWdSWEp5YjNJcE8xeHVJQ0FnSUNBZ0lDQjBhSEp2ZHlCbE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2FXWWdLSEpsYzNBcElHTjBlQzUwYjFKbGMzQnZibk5sS0hKbGMzQXBPMXh1SUNBZ0lDQWdjbVYwZFhKdUlIVndaR0YwWldRN1hHNGdJQ0FnZlR0Y2JpQWdmVnh1WEc0Z0lIQnlhWFpoZEdVZ2MzUmhkR2xqSUdOeVpXRjBaVUoxYkd0RVpXeGxkR1ZJWVc1a2JHVnlLRzF2WkdWc1EyeGhlbnBPWVcxbE9pQnpkSEpwYm1jcElIdGNiaUFnSUNCeVpYUjFjbTRnWVhONWJtTWdablZ1WTNScGIyNGdaR1ZzWlhSbFFXeHNLRnh1SUNBZ0lDQWdkR2hwY3pvZ1lXNTVMRnh1SUNBZ0lDQWdhV1J6T2lCemRISnBibWRiWFN4Y2JpQWdJQ0FnSUhKbGMzQS9PaUJoYm5sY2JpQWdJQ0FwT2lCUWNtOXRhWE5sUEUxdlpHVnNXMTArSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJSHNnWTNSNExDQnNiMmNnZlNBOUlDaGNiaUFnSUNBZ0lDQWdZWGRoYVhRZ2RHaHBjeTVzYjJkRGRIZ29XMTBzSUVKMWJHdERjblZrVDNCbGNtRjBhVzl1UzJWNWN5NUVSVXhGVkVWZlFVeE1MQ0IwY25WbEtWeHVJQ0FnSUNBZ0tTNW1iM0lvWkdWc1pYUmxRV3hzS1R0Y2JpQWdJQ0FnSUdOdmJuTjBJRzV2Y20xaGJHbDZaV1JKWkhNZ1BTQkJjbkpoZVM1cGMwRnljbUY1S0dsa2N5a2dQeUJwWkhNZ09pQmJhV1J6WFR0Y2JpQWdJQ0FnSUd4bGRDQnlaV0ZrT2lCTmIyUmxiRnRkTzF4dUlDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdiRzluTG1SbFluVm5LR0JrWld4bGRHbHVaeUFrZTI1dmNtMWhiR2w2WldSSlpITXViR1Z1WjNSb2ZTQWtlMjF2WkdWc1EyeGhlbnBPWVcxbGZXQXBPMXh1SUNBZ0lDQWdJQ0J5WldGa0lEMGdZWGRoYVhRZ2RHaHBjeTV3WlhKemFYTjBaVzVqWlNoamRIZ3BMbVJsYkdWMFpVRnNiQ2h1YjNKdFlXeHBlbVZrU1dSekxDQmpkSGdwTzF4dUlDQWdJQ0FnZlNCallYUmphQ0FvWlRvZ2RXNXJibTkzYmlrZ2UxeHVJQ0FnSUNBZ0lDQnNiMmN1WlhKeWIzSW9ZRVpoYVd4bFpDQjBieUJrWld4bGRHVWdKSHR0YjJSbGJFTnNZWHA2VG1GdFpYMWdMQ0JsSUdGeklFVnljbTl5S1R0Y2JpQWdJQ0FnSUNBZ2RHaHliM2NnWlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUd4dlp5NXBibVp2S0dCa1pXeGxkR1ZrSUNSN2NtVmhaQzVzWlc1bmRHaDlJQ1I3Ylc5a1pXeERiR0Y2ZWs1aGJXVjlZQ2s3WEc0Z0lDQWdJQ0JwWmlBb2NtVnpjQ2tnWTNSNExuUnZVbVZ6Y0c5dWMyVW9jbVZ6Y0NrN1hHNGdJQ0FnSUNCeVpYUjFjbTRnY21WaFpEdGNiaUFnSUNCOU8xeHVJQ0I5WEc1Y2JpQWdjSEpwZG1GMFpTQnpkR0YwYVdNZ1kzSmxZWFJsVW1WaFpFaGhibVJzWlhJb1hHNGdJQ0FnWjJWMFVFczZJQ2d1TGk1d09pQkJjbkpoZVR4emRISnBibWNnZkNCdWRXMWlaWEkrS1NBOVBpQnpkSEpwYm1jc1hHNGdJQ0FnYlc5a1pXeERiR0Y2ZWs1aGJXVTZJSE4wY21sdVoxeHVJQ0FwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdZWE41Ym1NZ1puVnVZM1JwYjI0Z2NtVmhaQ2hjYmlBZ0lDQWdJSFJvYVhNNklHRnVlU3hjYmlBZ0lDQWdJSEp2ZFhSbFVHRnlZVzF6T2lCaGJubGNiaUFnSUNBcE9pQlFjbTl0YVhObFBFMXZaR1ZzUGlCN1hHNGdJQ0FnSUNCamIyNXpkQ0I3SUdOMGVDd2diRzluSUgwZ1BTQW9YRzRnSUNBZ0lDQWdJR0YzWVdsMElIUm9hWE11Ykc5blEzUjRLRnRkTENCUGNHVnlZWFJwYjI1TFpYbHpMbEpGUVVRc0lIUnlkV1VwWEc0Z0lDQWdJQ0FwTG1admNpaHlaV0ZrS1R0Y2JpQWdJQ0FnSUdOdmJuTjBJR2xrSUQwZ1oyVjBVRXNvTGk0dWNtOTFkR1ZRWVhKaGJYTXVkbUZzZFdWelNXNVBjbVJsY2lrN1hHNGdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlHbGtJRDA5UFNCY0luVnVaR1ZtYVc1bFpGd2lLVnh1SUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnVm1Gc2FXUmhkR2x2YmtWeWNtOXlLR0JPYnlBa2UzUm9hWE11Y0d0OUlIQnliM1pwWkdWa1lDazdYRzRnSUNBZ0lDQnNaWFFnY21WaFpGSmxjM1ZzZERvZ1RXOWtaV3c3WEc0Z0lDQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ0lDQnNiMmN1WkdWaWRXY29ZSEpsWVdScGJtY2dKSHR0YjJSbGJFTnNZWHA2VG1GdFpYMGdkMmwwYUNBa2UzUm9hWE11Y0d0OUlDUjdhV1I5WUNrN1hHNGdJQ0FnSUNBZ0lISmxZV1JTWlhOMWJIUWdQU0JoZDJGcGRDQjBhR2x6TG5CbGNuTnBjM1JsYm1ObEtHTjBlQ2t1Y21WaFpDaHBaQ3dnWTNSNEtUdGNiaUFnSUNBZ0lIMGdZMkYwWTJnZ0tHVTZJSFZ1YTI1dmQyNHBJSHRjYmlBZ0lDQWdJQ0FnYkc5bkxtVnljbTl5S0dCR1lXbHNaV1FnZEc4Z2NtVmhaQ0FrZTIxdlpHVnNRMnhoZW5wT1lXMWxmU0IzYVhSb0lHbGtJQ1I3YVdSOVlDd2daU0JoY3lCRmNuSnZjaWs3WEc0Z0lDQWdJQ0FnSUhSb2NtOTNJR1U3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JzYjJjdWFXNW1ieWhnY21WaFpDQWtlMjF2WkdWc1EyeGhlbnBPWVcxbGZTQjNhWFJvSUdsa0lDUjdLSEpsWVdSU1pYTjFiSFFnWVhNZ1lXNTVLVnQwYUdsekxuQnJYWDFnS1R0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ5WldGa1VtVnpkV3gwTzF4dUlDQWdJSDA3WEc0Z0lIMWNibHh1SUNCd2NtbDJZWFJsSUhOMFlYUnBZeUJqY21WaGRHVlZjR1JoZEdWSVlXNWtiR1Z5S0Z4dUlDQWdJR2RsZEZCTE9pQW9MaTR1Y0RvZ1FYSnlZWGs4YzNSeWFXNW5JSHdnYm5WdFltVnlQaWtnUFQ0Z2MzUnlhVzVuTEZ4dUlDQWdJRTF2WkdWc1EyOXVjM1J5T2lCTmIyUmxiRU52Ym5OMGNuVmpkRzl5UEdGdWVUNHNYRzRnSUNBZ2JXOWtaV3hEYkdGNmVrNWhiV1U2SUhOMGNtbHVaMXh1SUNBcElIdGNiaUFnSUNCeVpYUjFjbTRnWVhONWJtTWdablZ1WTNScGIyNGdkWEJrWVhSbEtGeHVJQ0FnSUNBZ2RHaHBjem9nWVc1NUxGeHVJQ0FnSUNBZ2NtOTFkR1ZRWVhKaGJYTTZJR0Z1ZVN4Y2JpQWdJQ0FnSUdKdlpIazZJR0Z1ZVN4Y2JpQWdJQ0FnSUhKbGMzQS9PaUJoYm5sY2JpQWdJQ0FwT2lCUWNtOXRhWE5sUEdGdWVUNGdlMXh1SUNBZ0lDQWdZMjl1YzNRZ2V5QmpkSGdzSUd4dlp5QjlJRDBnS0Z4dUlDQWdJQ0FnSUNCaGQyRnBkQ0IwYUdsekxteHZaME4wZUNoYlhTd2dUM0JsY21GMGFXOXVTMlY1Y3k1VlVFUkJWRVVzSUhSeWRXVXBYRzRnSUNBZ0lDQXBMbVp2Y2loMWNHUmhkR1VwTzF4dUlDQWdJQ0FnWTI5dWMzUWdhV1FnUFNCblpYUlFTeWd1TGk1eWIzVjBaVkJoY21GdGN5NTJZV3gxWlhOSmJrOXlaR1Z5S1R0Y2JpQWdJQ0FnSUdsbUlDaDBlWEJsYjJZZ2FXUWdQVDA5SUZ3aWRXNWtaV1pwYm1Wa1hDSXBYRzRnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJXWVd4cFpHRjBhVzl1UlhKeWIzSW9ZRTV2SUNSN2RHaHBjeTV3YTMwZ2NISnZkbWxrWldSZ0tUdGNiaUFnSUNBZ0lHeGxkQ0IxY0dSaGRHVmtPaUJoYm5rN1hHNGdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0JzYjJjdWFXNW1ieWhnZFhCa1lYUnBibWNnSkh0dGIyUmxiRU5zWVhwNlRtRnRaWDBnZDJsMGFDQWtlM1JvYVhNdWNHdDlJQ1I3YVdSOVlDazdYRzRnSUNBZ0lDQWdJR052Ym5OMElIQmhlV3h2WVdRZ1BTQktVMDlPTG5CaGNuTmxLRXBUVDA0dWMzUnlhVzVuYVdaNUtHSnZaSGtwS1R0Y2JpQWdJQ0FnSUNBZ2RYQmtZWFJsWkNBOUlHRjNZV2wwSUhSb2FYTXVjR1Z5YzJsemRHVnVZMlVvWTNSNEtTNTFjR1JoZEdVb1hHNGdJQ0FnSUNBZ0lDQWdibVYzSUUxdlpHVnNRMjl1YzNSeUtIc2dMaTR1Y0dGNWJHOWhaQ3dnVzNSb2FYTXVjR3RkT2lCcFpDQjlLU3hjYmlBZ0lDQWdJQ0FnSUNCamRIaGNiaUFnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJSDBnWTJGMFkyZ2dLR1U2SUhWdWEyNXZkMjRwSUh0Y2JpQWdJQ0FnSUNBZ2JHOW5MbVZ5Y205eUtHVWdZWE1nUlhKeWIzSXBPMXh1SUNBZ0lDQWdJQ0IwYUhKdmR5QmxPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdhV1lnS0hKbGMzQXBJR04wZUM1MGIxSmxjM0J2Ym5ObEtISmxjM0FwTzF4dUlDQWdJQ0FnY21WMGRYSnVJSFZ3WkdGMFpXUTdYRzRnSUNBZ2ZUdGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdjM1JoZEdsaklHTnlaV0YwWlVSbGJHVjBaVWhoYm1Sc1pYSW9YRzRnSUNBZ1oyVjBVRXM2SUNndUxpNXdPaUJCY25KaGVUeHpkSEpwYm1jZ2ZDQnVkVzFpWlhJK0tTQTlQaUJ6ZEhKcGJtY3NYRzRnSUNBZ2JXOWtaV3hEYkdGNmVrNWhiV1U2SUhOMGNtbHVaMXh1SUNBcElIdGNiaUFnSUNCeVpYUjFjbTRnWVhONWJtTWdablZ1WTNScGIyNGdjbVZ0YjNabEtGeHVJQ0FnSUNBZ2RHaHBjem9nWVc1NUxGeHVJQ0FnSUNBZ2NtOTFkR1ZRWVhKaGJYTTZJR0Z1ZVN4Y2JpQWdJQ0FnSUhKbGMzQS9PaUJoYm5sY2JpQWdJQ0FwT2lCUWNtOXRhWE5sUEUxdlpHVnNQaUI3WEc0Z0lDQWdJQ0JqYjI1emRDQjdJR04wZUN3Z2JHOW5JSDBnUFNBb1hHNGdJQ0FnSUNBZ0lHRjNZV2wwSUhSb2FYTXViRzluUTNSNEtGdGRMQ0JQY0dWeVlYUnBiMjVMWlhsekxrUkZURVZVUlN3Z2RISjFaU2xjYmlBZ0lDQWdJQ2t1Wm05eUtISmxiVzkyWlNrN1hHNGdJQ0FnSUNCamIyNXpkQ0JwWkNBOUlHZGxkRkJMS0M0dUxuSnZkWFJsVUdGeVlXMXpMblpoYkhWbGMwbHVUM0prWlhJcE8xeHVJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQnBaQ0E5UFQwZ1hDSjFibVJsWm1sdVpXUmNJaWxjYmlBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUZaaGJHbGtZWFJwYjI1RmNuSnZjaWhnVG04Z0pIdDBhR2x6TG5CcmZTQndjbTkyYVdSbFpHQXBPMXh1SUNBZ0lDQWdiR1YwSUdSbGJEb2dUVzlrWld3N1hHNGdJQ0FnSUNCMGNua2dlMXh1SUNBZ0lDQWdJQ0JzYjJjdVpHVmlkV2NvWUdSbGJHVjBhVzVuSUNSN2JXOWtaV3hEYkdGNmVrNWhiV1Y5SUhkcGRHZ2dKSHQwYUdsekxuQnJmU0FrZTJsa2ZXQXBPMXh1SUNBZ0lDQWdJQ0JrWld3Z1BTQmhkMkZwZENCMGFHbHpMbkJsY25OcGMzUmxibU5sS0dOMGVDa3VaR1ZzWlhSbEtHbGtMQ0JqZEhncE8xeHVJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pUb2dkVzVyYm05M2Jpa2dlMXh1SUNBZ0lDQWdJQ0JzYjJjdVpYSnliM0lvWUVaaGFXeGxaQ0IwYnlCa1pXeGxkR1VnSkh0dGIyUmxiRU5zWVhwNlRtRnRaWDBnZDJsMGFDQnBaQ0FrZTJsa2ZXQXNJR1VnWVhNZ1JYSnliM0lwTzF4dUlDQWdJQ0FnSUNCMGFISnZkeUJsTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYkc5bkxtbHVabThvWUdSbGJHVjBaV1FnSkh0dGIyUmxiRU5zWVhwNlRtRnRaWDBnZDJsMGFDQnBaQ0FrZTJsa2ZXQXBPMXh1SUNBZ0lDQWdhV1lnS0hKbGMzQXBJR04wZUM1MGIxSmxjM0J2Ym5ObEtISmxjM0FwTzF4dUlDQWdJQ0FnY21WMGRYSnVJR1JsYkR0Y2JpQWdJQ0I5TzF4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCemRHRjBhV01nWTNKbFlYUmxVM1JoZEdWdFpXNTBTR0Z1Wkd4bGNpaHRiMlJsYkVOc1lYcDZUbUZ0WlRvZ2MzUnlhVzVuS1NCN1hHNGdJQ0FnY21WMGRYSnVJR0Z6ZVc1aklHWjFibU4wYVc5dUlITjBZWFJsYldWdWRDaGNiaUFnSUNBZ0lIUm9hWE02SUdGdWVTeGNiaUFnSUNBZ0lHNWhiV1U2SUhOMGNtbHVaeXhjYmlBZ0lDQWdJR0Z5WjNNNklDaHpkSEpwYm1jZ2ZDQnVkVzFpWlhJcFcxMHNYRzRnSUNBZ0lDQmtaWFJoYVd4ek9pQkVhWEpsWTNScGIyNU1hVzFwZEU5bVpuTmxkRnh1SUNBZ0lDazZJRkJ5YjIxcGMyVThZVzU1UGlCN1hHNGdJQ0FnSUNCamIyNXpkQ0I3SUdOMGVDQjlJRDBnS0Z4dUlDQWdJQ0FnSUNCaGQyRnBkQ0IwYUdsekxteHZaME4wZUNoYlhTd2dVR1Z5YzJsemRHVnVZMlZMWlhsekxsTlVRVlJGVFVWT1ZDd2dkSEoxWlNsY2JpQWdJQ0FnSUNrdVptOXlLSE4wWVhSbGJXVnVkQ2s3WEc0Z0lDQWdJQ0JqYjI1emRDQjdJR1JwY21WamRHbHZiaXdnYjJabWMyVjBMQ0JzYVcxcGRDd2dZbTl2YTIxaGNtc2dmU0E5SUdSbGRHRnBiSE03WEc0Z0lDQWdJQ0JoY21keklEMGdZWEpuY3k1dFlYQW9YRzRnSUNBZ0lDQWdJQ2hoS1NBOVBpQW9kSGx3Wlc5bUlHRWdQVDA5SUZ3aWMzUnlhVzVuWENJZ1B5QndZWEp6WlVsdWRDaGhJR0Z6SUhOMGNtbHVaeWtnT2lCaEtTQjhmQ0JoWEc0Z0lDQWdJQ0FwSUdGeklHRnVlVnRkTzF4dUlDQWdJQ0FnWTI5dWMzUWdjR0YwYUVScGNtVmpkR2x2YmlBOUlHRnlaM011YkdWdVozUm9JRDRnTVNBL0lHRnlaM05iTVYwZ09pQjFibVJsWm1sdVpXUTdYRzRnSUNBZ0lDQmpiMjV6ZENCeVpYTnZiSFpsWkVScGNtVmpkR2x2YmlBOUlDaGthWEpsWTNScGIyNGdQejhnY0dGMGFFUnBjbVZqZEdsdmJpa2dZWE5jYmlBZ0lDQWdJQ0FnZkNCemRISnBibWRjYmlBZ0lDQWdJQ0FnZkNCMWJtUmxabWx1WldRN1hHNGdJQ0FnSUNCcFppQW9jbVZ6YjJ4MlpXUkVhWEpsWTNScGIyNGdKaVlnWVhKbmN5NXNaVzVuZEdnZ1BpQXhLU0JoY21keld6RmRJRDBnY21WemIyeDJaV1JFYVhKbFkzUnBiMjQ3WEc0Z0lDQWdJQ0J6ZDJsMFkyZ2dLRzVoYldVcElIdGNiaUFnSUNBZ0lDQWdZMkZ6WlNCUWNtVndZWEpsWkZOMFlYUmxiV1Z1ZEV0bGVYTXVSa2xPUkRwY2JpQWdJQ0FnSUNBZ1kyRnpaU0JRY21Wd1lYSmxaRk4wWVhSbGJXVnVkRXRsZVhNdVJrbE9SRjlDV1RwY2JpQWdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUNBZ1kyRnpaU0JRY21Wd1lYSmxaRk4wWVhSbGJXVnVkRXRsZVhNdVRFbFRWRjlDV1RwY2JpQWdJQ0FnSUNBZ0lDQmhjbWR6TG5CMWMyZ29aR2x5WldOMGFXOXVJR0Z6SUhOMGNtbHVaeWs3WEc0Z0lDQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0FnSUdOaGMyVWdVSEpsY0dGeVpXUlRkR0YwWlcxbGJuUkxaWGx6TGxCQlIwVTZYRzRnSUNBZ0lDQWdJR05oYzJVZ1VISmxjR0Z5WldSVGRHRjBaVzFsYm5STFpYbHpMbEJCUjBWZlFsazZYRzRnSUNBZ0lDQWdJQ0FnWVhKbmN5QTlJRnRjYmlBZ0lDQWdJQ0FnSUNBZ0lHRnlaM05iTUYwc1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhOdmJIWmxaRVJwY21WamRHbHZiaUJoY3lCaGJua3NYRzRnSUNBZ0lDQWdJQ0FnSUNCN0lHeHBiV2wwTENCdlptWnpaWFFzSUdKdmIydHRZWEpySUgwc1hHNGdJQ0FnSUNBZ0lDQWdYVHRjYmlBZ0lDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJQ0FnWTJGelpTQlFjbVZ3WVhKbFpGTjBZWFJsYldWdWRFdGxlWE11UmtsT1JGOVBUa1ZmUWxrNlhHNGdJQ0FnSUNBZ0lDQWdZbkpsWVdzN1hHNGdJQ0FnSUNBZ0lHTmhjMlVnVUhKbGNHRnlaV1JUZEdGMFpXMWxiblJMWlhsekxrTlBWVTVVWDA5R09seHVJQ0FnSUNBZ0lDQmpZWE5sSUZCeVpYQmhjbVZrVTNSaGRHVnRaVzUwUzJWNWN5NU5RVmhmVDBZNlhHNGdJQ0FnSUNBZ0lHTmhjMlVnVUhKbGNHRnlaV1JUZEdGMFpXMWxiblJMWlhsekxrMUpUbDlQUmpwY2JpQWdJQ0FnSUNBZ1kyRnpaU0JRY21Wd1lYSmxaRk4wWVhSbGJXVnVkRXRsZVhNdVFWWkhYMDlHT2x4dUlDQWdJQ0FnSUNCallYTmxJRkJ5WlhCaGNtVmtVM1JoZEdWdFpXNTBTMlY1Y3k1VFZVMWZUMFk2WEc0Z0lDQWdJQ0FnSUdOaGMyVWdVSEpsY0dGeVpXUlRkR0YwWlcxbGJuUkxaWGx6TGtSSlUxUkpUa05VWDA5R09seHVJQ0FnSUNBZ0lDQmpZWE5sSUZCeVpYQmhjbVZrVTNSaGRHVnRaVzUwUzJWNWN5NUhVazlWVUY5UFJqcGNiaUFnSUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMbkJsY25OcGMzUmxibU5sS0dOMGVDa3VjM1JoZEdWdFpXNTBLRzVoYldVc0lDNHVMbUZ5WjNNc0lHTjBlQ2s3WEc0Z0lDQWdmVHRjYmlBZ2ZWeHVYRzRnSUhCeWFYWmhkR1VnYzNSaGRHbGpJR055WldGMFpWTjBZWFJsYldWdWRGTm9iM0owWTNWMFNHRnVaR3hsY2loY2JpQWdJQ0J6ZEdGMFpXMWxiblJMWlhrNklITjBjbWx1Wnl4Y2JpQWdJQ0J0YjJSbGJFTnNZWHA2VG1GdFpUb2djM1J5YVc1blhHNGdJQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQmhjM2x1WXlCbWRXNWpkR2x2YmlCemRHRjBaVzFsYm5SVGFHOXlkR04xZENoY2JpQWdJQ0FnSUhSb2FYTTZJR0Z1ZVN4Y2JpQWdJQ0FnSUM0dUxtRnlaM002SUdGdWVWdGRYRzRnSUNBZ0tUb2dVSEp2YldselpUeGhibmsrSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJSHNnWTNSNElIMGdQU0FvWEc0Z0lDQWdJQ0FnSUdGM1lXbDBJSFJvYVhNdWJHOW5RM1I0S0Z0ZExDQnpkR0YwWlcxbGJuUkxaWGtzSUhSeWRXVXBYRzRnSUNBZ0lDQXBMbVp2Y2loemRHRjBaVzFsYm5SVGFHOXlkR04xZENrN1hHNWNiaUFnSUNBZ0lITjNhWFJqYUNBb2MzUmhkR1Z0Wlc1MFMyVjVLU0I3WEc0Z0lDQWdJQ0FnSUdOaGMyVWdVSEpsY0dGeVpXUlRkR0YwWlcxbGJuUkxaWGx6TGt4SlUxUmZRbGs2SUh0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCYmEyVjVMQ0JrWlhSaGFXeHpYU0E5SUdGeVozTTdYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdWNHVnljMmx6ZEdWdVkyVW9ZM1I0S1M1c2FYTjBRbmtvWEc0Z0lDQWdJQ0FnSUNBZ0lDQnJaWGtzWEc0Z0lDQWdJQ0FnSUNBZ0lDQW9aR1YwWVdsc2N5QmhjeUJoYm5rcFB5NWthWEpsWTNScGIyNGdZWE1nVDNKa1pYSkVhWEpsWTNScGIyNHNYRzRnSUNBZ0lDQWdJQ0FnSUNCamRIaGNiaUFnSUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHTmhjMlVnVUhKbGNHRnlaV1JUZEdGMFpXMWxiblJMWlhsekxsQkJSMFZmUWxrNklIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQmJhMlY1TENCd1lXZGxMQ0JrWlhSaGFXeHpYU0E5SUdGeVozTTdYRzRnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdWNHVnljMmx6ZEdWdVkyVW9ZM1I0S1M1d1lXZHBibUYwWlVKNUtGeHVJQ0FnSUNBZ0lDQWdJQ0FnYTJWNUxGeHVJQ0FnSUNBZ0lDQWdJQ0FnS0dSbGRHRnBiSE1nWVhNZ1lXNTVLVDh1WkdseVpXTjBhVzl1SUdGeklFOXlaR1Z5UkdseVpXTjBhVzl1TEZ4dUlDQWdJQ0FnSUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnNhVzFwZERvZ0tHUmxkR0ZwYkhNZ1lYTWdZVzU1S1Q4dWJHbHRhWFFzWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJRzltWm5ObGREb2dLR1JsZEdGcGJITWdZWE1nWVc1NUtUOHViMlptYzJWMExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCd1lXZGxMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZTQmhjeUJoYm5rc1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqZEhoY2JpQWdJQ0FnSUNBZ0lDQXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdOaGMyVWdVSEpsY0dGeVpXUlRkR0YwWlcxbGJuUkxaWGx6TGtaSlRrUTZJSHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JiZG1Gc2RXVXNJR1JsZEdGcGJITmRJRDBnWVhKbmN6dGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQmthWEpsWTNScGIyNGdQVnh1SUNBZ0lDQWdJQ0FnSUNBZ0tHUmxkR0ZwYkhNZ1lYTWdZVzU1S1Q4dVpHbHlaV04wYVc5dUlEOC9JRTl5WkdWeVJHbHlaV04wYVc5dUxrRlRRenRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J3WlhKemFYTjBaVzVqWlNBOUlIUm9hWE11Y0dWeWMybHpkR1Z1WTJVb1kzUjRLVHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlIQmxjbk5wYzNSbGJtTmxMbVpwYm1RZ1BUMDlJRndpWm5WdVkzUnBiMjVjSWlsY2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQndaWEp6YVhOMFpXNWpaUzVtYVc1a0tIWmhiSFZsTENCa2FYSmxZM1JwYjI0c0lHTjBlQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhCbGNuTnBjM1JsYm1ObExuTjBZWFJsYldWdWRDaFFjbVZ3WVhKbFpGTjBZWFJsYldWdWRFdGxlWE11UmtsT1JDd2dkbUZzZFdVc0lHUnBjbVZqZEdsdmJpd2dZM1I0S1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQmpZWE5sSUZCeVpYQmhjbVZrVTNSaGRHVnRaVzUwUzJWNWN5NVFRVWRGT2lCN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ1czWmhiSFZsTENCa1pYUmhhV3h6WFNBOUlHRnlaM003WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnY21WbUlEMGdlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2IyWm1jMlYwT2lBb1pHVjBZV2xzY3lCaGN5QmhibmtwUHk1dlptWnpaWFFnUHo4Z01TeGNiaUFnSUNBZ0lDQWdJQ0FnSUd4cGJXbDBPaUFvWkdWMFlXbHNjeUJoY3lCaGJua3BQeTVzYVcxcGRDQS9QeUF4TUN4Y2JpQWdJQ0FnSUNBZ0lDQWdJR0p2YjJ0dFlYSnJPaUFvWkdWMFlXbHNjeUJoY3lCaGJua3BQeTVpYjI5cmJXRnlheXhjYmlBZ0lDQWdJQ0FnSUNCOU8xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElIQmxjbk5wYzNSbGJtTmxJRDBnZEdocGN5NXdaWEp6YVhOMFpXNWpaU2hqZEhncE8xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElHUnBjbVZqZEdsdmJpQTlJQ2hrWlhSaGFXeHpJR0Z6SUdGdWVTay9MbVJwY21WamRHbHZiaUEvUHlCUGNtUmxja1JwY21WamRHbHZiaTVCVTBNN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUJ3WlhKemFYTjBaVzVqWlM1d1lXZGxJRDA5UFNCY0ltWjFibU4wYVc5dVhDSXBYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnY0dWeWMybHpkR1Z1WTJVdWNHRm5aU2gyWVd4MVpTd2daR2x5WldOMGFXOXVMQ0J5WldZc0lHTjBlQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhCbGNuTnBjM1JsYm1ObExuTjBZWFJsYldWdWRDaFFjbVZ3WVhKbFpGTjBZWFJsYldWdWRFdGxlWE11VUVGSFJTd2dkbUZzZFdVc0lHUnBjbVZqZEdsdmJpd2djbVZtTENCamRIZ3BPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdOaGMyVWdVSEpsY0dGeVpXUlRkR0YwWlcxbGJuUkxaWGx6TGtaSlRrUmZUMDVGWDBKWk9pQjdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdXMnRsZVN3Z2RtRnNkV1ZkSUQwZ1lYSm5jenRjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZEdocGN5NXdaWEp6YVhOMFpXNWpaU2hqZEhncExtWnBibVJQYm1WQ2VTaHJaWGtzSUhaaGJIVmxMQ0JqZEhncE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR05oYzJVZ1VISmxjR0Z5WldSVGRHRjBaVzFsYm5STFpYbHpMa1pKVGtSZlFsazZJSHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JiYTJWNUxDQjJZV3gxWlYwZ1BTQmhjbWR6TzF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMbkJsY25OcGMzUmxibU5sS0dOMGVDbGNiaUFnSUNBZ0lDQWdJQ0FnSUM1bWIzSW9ZM1I0TG5SdlQzWmxjbkpwWkdWektDa3BYRzRnSUNBZ0lDQWdJQ0FnSUNBdVptbHVaRUo1S0d0bGVTd2dkbUZzZFdVc0lHTjBlQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUNBZ0lDQnBaaUFvWEc0Z0lDQWdJQ0FnSUNBZ0lDQnpkR0YwWlcxbGJuUkxaWGtnUFQwOUlGQnlaWEJoY21Wa1UzUmhkR1Z0Wlc1MFMyVjVjeTVEVDFWT1ZGOVBSaUI4ZkZ4dUlDQWdJQ0FnSUNBZ0lDQWdjM1JoZEdWdFpXNTBTMlY1SUQwOVBTQlFjbVZ3WVhKbFpGTjBZWFJsYldWdWRFdGxlWE11VFVGWVgwOUdJSHg4WEc0Z0lDQWdJQ0FnSUNBZ0lDQnpkR0YwWlcxbGJuUkxaWGtnUFQwOUlGQnlaWEJoY21Wa1UzUmhkR1Z0Wlc1MFMyVjVjeTVOU1U1ZlQwWWdmSHhjYmlBZ0lDQWdJQ0FnSUNBZ0lITjBZWFJsYldWdWRFdGxlU0E5UFQwZ1VISmxjR0Z5WldSVGRHRjBaVzFsYm5STFpYbHpMa0ZXUjE5UFJpQjhmRnh1SUNBZ0lDQWdJQ0FnSUNBZ2MzUmhkR1Z0Wlc1MFMyVjVJRDA5UFNCUWNtVndZWEpsWkZOMFlYUmxiV1Z1ZEV0bGVYTXVVMVZOWDA5R0lIeDhYRzRnSUNBZ0lDQWdJQ0FnSUNCemRHRjBaVzFsYm5STFpYa2dQVDA5SUZCeVpYQmhjbVZrVTNSaGRHVnRaVzUwUzJWNWN5NUVTVk5VU1U1RFZGOVBSaUI4ZkZ4dUlDQWdJQ0FnSUNBZ0lDQWdjM1JoZEdWdFpXNTBTMlY1SUQwOVBTQlFjbVZ3WVhKbFpGTjBZWFJsYldWdWRFdGxlWE11UjFKUFZWQmZUMFpjYmlBZ0lDQWdJQ0FnSUNBcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOdmJuTjBJRnRtYVdWc1pGMGdQU0JoY21kek8xeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJSFJvYVhNdWNHVnljMmx6ZEdWdVkyVW9ZM1I0S1M1emRHRjBaVzFsYm5Rb2MzUmhkR1Z0Wlc1MFMyVjVMQ0JtYVdWc1pDd2dZM1I0S1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLR0JWYm10dWIzZHVJSE4wWVhSbGJXVnVkRG9nSkh0emRHRjBaVzFsYm5STFpYbDlZQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVHRjYmlBZ2ZWeHVYRzRnSUhCeWFYWmhkR1VnYzNSaGRHbGpJR055WldGMFpVTnZiWEJzWlhoUmRXVnllVWhoYm1Sc1pYSW9iV1YwYUc5a1RtRnRaVG9nYzNSeWFXNW5LU0I3WEc0Z0lDQWdjbVYwZFhKdUlHRnplVzVqSUdaMWJtTjBhVzl1SUdOdmJYQnNaWGhSZFdWeWVTaGNiaUFnSUNBZ0lIUm9hWE02SUdGdWVTeGNiaUFnSUNBZ0lDNHVMbUZ5WjNNNklHRnVlVnRkWEc0Z0lDQWdLVG9nVUhKdmJXbHpaVHhoYm5rK0lIdGNiaUFnSUNBZ0lHTnZibk4wSUd4dlp6b2dZVzU1SUQwZ2RHaHBjeTVzYjJjL0xtWnZjajh1S0dOdmJYQnNaWGhSZFdWeWVTazdYRzRnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNCcFppQW9iRzluS1NCc2IyY3VaR1ZpZFdjb1lFbHVkbTlyYVc1bklHTjFjM1J2YlNCeGRXVnllU0JjSWlSN2JXVjBhRzlrVG1GdFpYMWNJbUFwTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0I3SUdOMGVDQjlJRDBnS0Z4dUlDQWdJQ0FnSUNBZ0lHRjNZV2wwSUhSb2FYTXViRzluUTNSNEtGdGRMQ0J0WlhSb2IyUk9ZVzFsTENCMGNuVmxLVnh1SUNBZ0lDQWdJQ0FwTG1admNpaGpiMjF3YkdWNFVYVmxjbmtwTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J3WlhKemFYTjBaVzVqWlNBOUlIUm9hWE11Y0dWeWMybHpkR1Z1WTJVb1kzUjRLVHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjM0J5WldGa1FYSm5jeUE5SUVaeWIyMU5iMlJsYkVOdmJuUnliMnhzWlhJdVpYaDBjbUZqZEZGMVpYSjVRWEpuY3loaGNtZHpLVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCd1pYSnphWE4wWlc1alpWdHRaWFJvYjJST1lXMWxYU0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUhCbGNuTnBjM1JsYm1ObFcyMWxkR2h2WkU1aGJXVmRLQzR1TG5Od2NtVmhaRUZ5WjNNc0lHTjBlQ2s3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2FXWWdLSFI1Y0dWdlppQndaWEp6YVhOMFpXNWpaUzV6ZEdGMFpXMWxiblFnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCd1pYSnphWE4wWlc1alpTNXpkR0YwWlcxbGJuUW9iV1YwYUc5a1RtRnRaU3dnTGk0dWMzQnlaV0ZrUVhKbmN5d2dZM1I0S1R0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb1hHNGdJQ0FnSUNBZ0lDQWdZRkJsY25OcGMzUmxibU5sSUcxbGRHaHZaQ0JjSWlSN2JXVjBhRzlrVG1GdFpYMWNJaUJ1YjNRZ1ptOTFibVFnYjI0Z0pIdHdaWEp6YVhOMFpXNWpaVDh1WTI5dWMzUnlkV04wYjNJL0xtNWhiV1Y5WUZ4dUlDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ2ZTQmpZWFJqYUNBb1pUb2dZVzU1S1NCN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hzYjJjcElHeHZaeTVsY25KdmNpaGdRM1Z6ZEc5dElIRjFaWEo1SUZ3aUpIdHRaWFJvYjJST1lXMWxmVndpSUdaaGFXeGxaR0FzSUdVcE8xeHVJQ0FnSUNBZ0lDQjBhSEp2ZHlCbE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgwN1hHNGdJSDFjYmx4dUlDQndjbWwyWVhSbElITjBZWFJwWXlCamNtVmhkR1ZEZFhOMGIyMVNiM1YwWlVoaGJtUnNaWElvYldWMGFHOWtUbUZ0WlRvZ2MzUnlhVzVuS1NCN1hHNGdJQ0FnY21WMGRYSnVJR0Z6ZVc1aklHWjFibU4wYVc5dUlHTjFjM1J2YlZKdmRYUmxLRnh1SUNBZ0lDQWdkR2hwY3pvZ1lXNTVMRnh1SUNBZ0lDQWdMaTR1WVhKbmN6b2dZVzU1VzExY2JpQWdJQ0FwT2lCUWNtOXRhWE5sUEdGdWVUNGdlMXh1SUNBZ0lDQWdZMjl1YzNRZ2JHOW5PaUJoYm5rZ1BTQjBhR2x6TG14dlp6OHVabTl5UHk0b1kzVnpkRzl0VW05MWRHVXBPMXh1SUNBZ0lDQWdZMjl1YzNRZ2V5QmpkSGdnZlNBOUlDaGNiaUFnSUNBZ0lDQWdZWGRoYVhRZ2RHaHBjeTVzYjJkRGRIZ29XMTBzSUcxbGRHaHZaRTVoYldVc0lIUnlkV1VwWEc0Z0lDQWdJQ0FwTG1admNpaGpkWE4wYjIxU2IzVjBaU2s3WEc0Z0lDQWdJQ0JqYjI1emRDQndaWEp6YVhOMFpXNWpaU0E5SUhSb2FYTXVjR1Z5YzJsemRHVnVZMlVvWTNSNEtUdGNiaUFnSUNBZ0lHTnZibk4wSUhOd2NtVmhaRUZ5WjNNZ1BTQkdjbTl0VFc5a1pXeERiMjUwY205c2JHVnlMbVY0ZEhKaFkzUlJkV1Z5ZVVGeVozTW9ZWEpuY3lrN1hHNWNiaUFnSUNBZ0lDOHZJRlJ5ZVNCMGFHVWdjR1Z5YzJsemRHVnVZMlVnWkdseVpXTjBiSGtnS0hkdmNtdHpJSGRvWlc0Z2FYUW5jeUJoSUdOMWMzUnZiU0JTWlhCdmMybDBiM0o1S1Z4dUlDQWdJQ0FnYVdZZ0tIUjVjR1Z2WmlCd1pYSnphWE4wWlc1alpWdHRaWFJvYjJST1lXMWxYU0E5UFQwZ1hDSm1kVzVqZEdsdmJsd2lLU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ3WlhKemFYTjBaVzVqWlZ0dFpYUm9iMlJPWVcxbFhTZ3VMaTV6Y0hKbFlXUkJjbWR6TENCamRIZ3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdMeThnVjJobGJpQndaWEp6YVhOMFpXNWpaU0JwY3lCaElFMXZaR1ZzVTJWeWRtbGpaU3dnZEdobElHMWxkR2h2WkNCc2FYWmxjeUJ2YmlCMGFHVWdkVzVrWlhKc2VXbHVaeUJ5WlhCdlhHNGdJQ0FnSUNCcFppQW9jR1Z5YzJsemRHVnVZMlUvTG5KbGNHOGdKaVlnZEhsd1pXOW1JSEJsY25OcGMzUmxibU5sTG5KbGNHOWJiV1YwYUc5a1RtRnRaVjBnUFQwOUlGd2lablZ1WTNScGIyNWNJaWtnZTF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnY0dWeWMybHpkR1Z1WTJVdWNtVndiMXR0WlhSb2IyUk9ZVzFsWFNndUxpNXpjSEpsWVdSQmNtZHpMQ0JqZEhncE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0x5OGdSbUZzYkNCaVlXTnJJSFJ2SUhOMFlYUmxiV1Z1ZENCbllYUmxkMkY1WEc0Z0lDQWdJQ0JwWmlBb2RIbHdaVzltSUhCbGNuTnBjM1JsYm1ObExuTjBZWFJsYldWdWRDQTlQVDBnWENKbWRXNWpkR2x2Ymx3aUtTQjdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQndaWEp6YVhOMFpXNWpaUzV6ZEdGMFpXMWxiblFvYldWMGFHOWtUbUZ0WlN3Z0xpNHVjM0J5WldGa1FYSm5jeXdnWTNSNEtUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2loY2JpQWdJQ0FnSUNBZ1lFMWxkR2h2WkNCY0lpUjdiV1YwYUc5a1RtRnRaWDFjSWlCdWIzUWdabTkxYm1RZ2IyNGdKSHR3WlhKemFYTjBaVzVqWlQ4dVkyOXVjM1J5ZFdOMGIzSS9MbTVoYldWOUlHOXlJR2wwY3lCeVpYQnZZRnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlPMXh1SUNCOVhHNWNiaUFnY0hKcGRtRjBaU0J6ZEdGMGFXTWdaWGgwY21GamRGRjFaWEo1UVhKbmN5aGhjbWR6T2lCaGJubGJYU2s2SUdGdWVWdGRJSHRjYmlBZ0lDQnBaaUFvWVhKbmN5NXNaVzVuZEdnZ1BUMDlJREFwSUhKbGRIVnliaUJoY21kek8xeHVJQ0FnSUdOdmJuTjBJR3hoYzNRZ1BTQmhjbWR6VzJGeVozTXViR1Z1WjNSb0lDMGdNVjA3WEc0Z0lDQWdhV1lnS0Z4dUlDQWdJQ0FnYkdGemRDQW1KbHh1SUNBZ0lDQWdkSGx3Wlc5bUlHeGhjM1FnUFQwOUlGd2liMkpxWldOMFhDSWdKaVpjYmlBZ0lDQWdJQ0ZCY25KaGVTNXBjMEZ5Y21GNUtHeGhjM1FwWEc0Z0lDQWdLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQnhkV1Z5ZVU5aWFpQTlJR0Z5WjNNdWNHOXdLQ2s3WEc0Z0lDQWdJQ0JqYjI1emRDQm9ZWE5FYVhKbFkzUnBiMjRnUFNCeGRXVnllVTlpYWk1a2FYSmxZM1JwYjI0Z0lUMDlJSFZ1WkdWbWFXNWxaRHRjYmlBZ0lDQWdJR052Ym5OMElHaGhjMHhwYldsMElEMGdjWFZsY25sUFltb3ViR2x0YVhRZ0lUMDlJSFZ1WkdWbWFXNWxaRHRjYmlBZ0lDQWdJR052Ym5OMElHaGhjMDltWm5ObGRDQTlJSEYxWlhKNVQySnFMbTltWm5ObGRDQWhQVDBnZFc1a1pXWnBibVZrTzF4dUlDQWdJQ0FnYVdZZ0tDRm9ZWE5FYVhKbFkzUnBiMjRnSmlZZ0lXaGhjMHhwYldsMElDWW1JQ0ZvWVhOUFptWnpaWFFwSUhKbGRIVnliaUJoY21kek8xeHVJQ0FnSUNBZ1kyOXVjM1FnWlhoMGNtRnpPaUJoYm5sYlhTQTlJRnRkTzF4dUlDQWdJQ0FnYVdZZ0tHaGhjMFJwY21WamRHbHZiaWtnWlhoMGNtRnpMbkIxYzJnb2NYVmxjbmxQWW1vdVpHbHlaV04wYVc5dUtUdGNiaUFnSUNBZ0lHVnNjMlVnYVdZZ0tHaGhjMHhwYldsMElIeDhJR2hoYzA5bVpuTmxkQ2tnWlhoMGNtRnpMbkIxYzJnb2RXNWtaV1pwYm1Wa0tUdGNiaUFnSUNBZ0lHbG1JQ2hvWVhOTWFXMXBkQ2tnWlhoMGNtRnpMbkIxYzJnb2NYVmxjbmxQWW1vdWJHbHRhWFFwTzF4dUlDQWdJQ0FnYVdZZ0tHaGhjMDltWm5ObGRDa2daWGgwY21GekxuQjFjMmdvY1hWbGNubFBZbW91YjJabWMyVjBLVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQmJMaTR1WVhKbmN5d2dMaTR1WlhoMGNtRnpYVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUdGeVozTTdYRzRnSUgxY2JseHVJQ0J3Y21sMllYUmxJSE4wWVhScFl5QmpjbVZoZEdWRGNtVmhkR1ZFWldOdmNtRjBiM0p6S0Z4dUlDQWdJRTF2WkdWc1EyOXVjM1J5T2lCTmIyUmxiRU52Ym5OMGNuVmpkRzl5UEdGdWVUNHNYRzRnSUNBZ2JXOWtaV3hEYkdGNmVrNWhiV1U2SUhOMGNtbHVaMXh1SUNBcE9pQkJjbkpoZVR3b2RHRnlaMlYwT2lCaGJua3NJR3RsZVRvZ2MzUnlhVzVuTENCa1pYTmpPaUJoYm5rcElEMCtJSFp2YVdRK0lIdGNiaUFnSUNCeVpYUjFjbTRnVzF4dUlDQWdJQ0FnUVhCcFQzQmxjbUYwYVc5dVJuSnZiVTF2WkdWc0tFMXZaR1ZzUTI5dWMzUnlMQ0JjSWxCUFUxUmNJaWtzWEc0Z0lDQWdJQ0JCY0dsUGNHVnlZWFJwYjI0b2V5QnpkVzF0WVhKNU9pQmdRM0psWVhSbElHRWdibVYzSUNSN2JXOWtaV3hEYkdGNmVrNWhiV1Y5TG1BZ2ZTa3NYRzRnSUNBZ0lDQkJjR2xDYjJSNUtIdGNiaUFnSUNBZ0lDQWdaR1Z6WTNKcGNIUnBiMjQ2SUdCUVlYbHNiMkZrSUdadmNpQWtlMjF2WkdWc1EyeGhlbnBPWVcxbGZXQXNYRzRnSUNBZ0lDQWdJSFI1Y0dVNklFUjBiMFp2Y2loUGNHVnlZWFJwYjI1TFpYbHpMa05TUlVGVVJTd2dUVzlrWld4RGIyNXpkSElwTEZ4dUlDQWdJQ0FnZlNrc1hHNGdJQ0FnSUNCQmNHbERjbVZoZEdWa1VtVnpjRzl1YzJVb2UxeHVJQ0FnSUNBZ0lDQmtaWE5qY21sd2RHbHZiam9nWUNSN2JXOWtaV3hEYkdGNmVrNWhiV1Y5SUdOeVpXRjBaV1FnYzNWalkyVnpjMloxYkd4NUxtQXNYRzRnSUNBZ0lDQWdJSE5qYUdWdFlUb2dleUFrY21WbU9pQm5aWFJUWTJobGJXRlFZWFJvS0UxdlpHVnNRMjl1YzNSeUtTQjlMRnh1SUNBZ0lDQWdmU2tzWEc0Z0lDQWdJQ0JCY0dsQ1lXUlNaWEYxWlhOMFVtVnpjRzl1YzJVb2V5QmtaWE5qY21sd2RHbHZiam9nWENKUVlYbHNiMkZrSUhaaGJHbGtZWFJwYjI0Z1ptRnBiR1ZrTGx3aUlIMHBMRnh1SUNBZ0lDQWdRWEJwVlc1d2NtOWpaWE56WVdKc1pVVnVkR2wwZVZKbGMzQnZibk5sS0h0Y2JpQWdJQ0FnSUNBZ1pHVnpZM0pwY0hScGIyNDZJRndpVW1Wd2IzTnBkRzl5ZVNCeVpXcGxZM1JsWkNCMGFHVWdjSEp2ZG1sa1pXUWdjR0Y1Ykc5aFpDNWNJaXhjYmlBZ0lDQWdJSDBwTEZ4dUlDQWdJRjA3WEc0Z0lIMWNibHh1SUNCd2NtbDJZWFJsSUhOMFlYUnBZeUJpZFd4clEzSmxZWFJsUkdWamIzSmhkRzl5Y3loY2JpQWdJQ0JOYjJSbGJFTnZibk4wY2pvZ1RXOWtaV3hEYjI1emRISjFZM1J2Y2p4aGJuaytMRnh1SUNBZ0lHMXZaR1ZzUTJ4aGVucE9ZVzFsT2lCemRISnBibWRjYmlBZ0tUb2dRWEp5WVhrOEtIUmhjbWRsZERvZ1lXNTVMQ0JyWlhrNklITjBjbWx1Wnl3Z1pHVnpZem9nWVc1NUtTQTlQaUIyYjJsa1BpQjdYRzRnSUNBZ2NtVjBkWEp1SUZ0Y2JpQWdJQ0FnSUVGd2FVOXdaWEpoZEdsdmJrWnliMjFOYjJSbGJDaE5iMlJsYkVOdmJuTjBjaXdnWENKUVQxTlVYQ0lzSUZ3aVluVnNhMXdpS1N4Y2JpQWdJQ0FnSUVGd2FVOXdaWEpoZEdsdmJpaDdJSE4xYlcxaGNuazZJR0JEY21WaGRHVWdZU0J1WlhjZ0pIdHRiMlJsYkVOc1lYcDZUbUZ0WlgwdVlDQjlLU3hjYmlBZ0lDQWdJRUZ3YVVKdlpIa29lMXh1SUNBZ0lDQWdJQ0JrWlhOamNtbHdkR2x2YmpvZ1lGQmhlV3h2WVdRZ1ptOXlJQ1I3Ylc5a1pXeERiR0Y2ZWs1aGJXVjlZQ3hjYmlBZ0lDQWdJQ0FnYzJOb1pXMWhPaUI3WEc0Z0lDQWdJQ0FnSUNBZ2RIbHdaVG9nWENKaGNuSmhlVndpTEZ4dUlDQWdJQ0FnSUNBZ0lHbDBaVzF6T2lCN0lDUnlaV1k2SUdkbGRGTmphR1Z0WVZCaGRHZ29UVzlrWld4RGIyNXpkSElwSUgwc1hHNGdJQ0FnSUNBZ0lIMHNYRzRnSUNBZ0lDQjlLU3hjYmlBZ0lDQWdJRUZ3YVVOeVpXRjBaV1JTWlhOd2IyNXpaU2g3WEc0Z0lDQWdJQ0FnSUdSbGMyTnlhWEIwYVc5dU9pQmdKSHR0YjJSbGJFTnNZWHA2VG1GdFpYMGdZM0psWVhSbFpDQnpkV05qWlhOelpuVnNiSGt1WUN4Y2JpQWdJQ0FnSUNBZ2MyTm9aVzFoT2lCN1hHNGdJQ0FnSUNBZ0lDQWdkSGx3WlRvZ1hDSmhjbkpoZVZ3aUxGeHVJQ0FnSUNBZ0lDQWdJR2wwWlcxek9pQjdJQ1J5WldZNklHZGxkRk5qYUdWdFlWQmhkR2dvVFc5a1pXeERiMjV6ZEhJcElIMHNYRzRnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0I5S1N4Y2JpQWdJQ0FnSUVGd2FVSmhaRkpsY1hWbGMzUlNaWE53YjI1elpTaDdJR1JsYzJOeWFYQjBhVzl1T2lCY0lsQmhlV3h2WVdRZ2RtRnNhV1JoZEdsdmJpQm1ZV2xzWldRdVhDSWdmU2tzWEc0Z0lDQWdJQ0JCY0dsVmJuQnliMk5sYzNOaFlteGxSVzUwYVhSNVVtVnpjRzl1YzJVb2UxeHVJQ0FnSUNBZ0lDQmtaWE5qY21sd2RHbHZiam9nWENKU1pYQnZjMmwwYjNKNUlISmxhbVZqZEdWa0lIUm9aU0J3Y205MmFXUmxaQ0J3WVhsc2IyRmtMbHdpTEZ4dUlDQWdJQ0FnZlNrc1hHNGdJQ0FnWFR0Y2JpQWdmVnh1WEc0Z0lIQnlhWFpoZEdVZ2MzUmhkR2xqSUdKMWJHdFNaV0ZrUkdWamIzSmhkRzl5Y3loY2JpQWdJQ0JOYjJSbGJFTnZibk4wY2pvZ1RXOWtaV3hEYjI1emRISjFZM1J2Y2p4aGJuaytMRnh1SUNBZ0lHMXZaR1ZzUTJ4aGVucE9ZVzFsT2lCemRISnBibWRjYmlBZ0tUb2dRWEp5WVhrOEtIUmhjbWRsZERvZ1lXNTVMQ0JyWlhrNklITjBjbWx1Wnl3Z1pHVnpZem9nWVc1NUtTQTlQaUIyYjJsa1BpQjdYRzRnSUNBZ2NtVjBkWEp1SUZ0Y2JpQWdJQ0FnSUVGd2FVOXdaWEpoZEdsdmJrWnliMjFOYjJSbGJDaE5iMlJsYkVOdmJuTjBjaXdnWENKSFJWUmNJaXdnWENKaWRXeHJYQ0lwTEZ4dUlDQWdJQ0FnUVhCcFQzQmxjbUYwYVc5dUtIc2djM1Z0YldGeWVUb2dZRkpsZEhKcFpYWmxJQ1I3Ylc5a1pXeERiR0Y2ZWs1aGJXVjlJSEpsWTI5eVpITWdZbmtnYVdSekxtQWdmU2tzWEc0Z0lDQWdJQ0JCY0dsUmRXVnllU2g3SUc1aGJXVTZJRndpYVdSelhDSXNJSEpsY1hWcGNtVmtPaUIwY25WbExDQjBlWEJsT2lCY0ltRnljbUY1WENJZ2ZTa3NYRzRnSUNBZ0lDQkJjR2xQYTFKbGMzQnZibk5sS0h0Y2JpQWdJQ0FnSUNBZ1pHVnpZM0pwY0hScGIyNDZJR0FrZTIxdlpHVnNRMnhoZW5wT1lXMWxmU0J5WlhSeWFXVjJaV1FnYzNWalkyVnpjMloxYkd4NUxtQXNYRzRnSUNBZ0lDQWdJSE5qYUdWdFlUb2dlMXh1SUNBZ0lDQWdJQ0FnSUhSNWNHVTZJRndpWVhKeVlYbGNJaXhjYmlBZ0lDQWdJQ0FnSUNCcGRHVnRjem9nZXlBa2NtVm1PaUJuWlhSVFkyaGxiV0ZRWVhSb0tFMXZaR1ZzUTI5dWMzUnlLU0I5TEZ4dUlDQWdJQ0FnSUNCOUxGeHVJQ0FnSUNBZ2ZTa3NYRzRnSUNBZ0lDQkJjR2xPYjNSR2IzVnVaRkpsYzNCdmJuTmxLSHRjYmlBZ0lDQWdJQ0FnWkdWelkzSnBjSFJwYjI0NklHQk9ieUFrZTIxdlpHVnNRMnhoZW5wT1lXMWxmU0J5WldOdmNtUWdiV0YwWTJobGN5QjBhR1VnY0hKdmRtbGtaV1FnYVdSbGJuUnBabWxsY2k1Z0xGeHVJQ0FnSUNBZ2ZTa3NYRzRnSUNBZ1hUdGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdjM1JoZEdsaklHSjFiR3RWY0dSaGRHVkVaV052Y21GMGIzSnpLRnh1SUNBZ0lFMXZaR1ZzUTI5dWMzUnlPaUJOYjJSbGJFTnZibk4wY25WamRHOXlQR0Z1ZVQ0c1hHNGdJQ0FnYlc5a1pXeERiR0Y2ZWs1aGJXVTZJSE4wY21sdVp5eGNiaUFnSUNCaGNHbFFjbTl3WlhKMGFXVnpPaUJFWldOaFprRndhVkJ5YjNCbGNuUjVXMTFjYmlBZ0tUb2dRWEp5WVhrOEtIUmhjbWRsZERvZ1lXNTVMQ0JyWlhrNklITjBjbWx1Wnl3Z1pHVnpZem9nWVc1NUtTQTlQaUIyYjJsa1BpQjdYRzRnSUNBZ2NtVjBkWEp1SUZ0Y2JpQWdJQ0FnSUVGd2FVOXdaWEpoZEdsdmJrWnliMjFOYjJSbGJDaE5iMlJsYkVOdmJuTjBjaXdnWENKUVZWUmNJaXdnWENKaWRXeHJYQ0lwTEZ4dUlDQWdJQ0FnUVhCcFVHRnlZVzF6Um5KdmJVMXZaR1ZzS0dGd2FWQnliM0JsY25ScFpYTXBMRnh1SUNBZ0lDQWdRWEJwVDNCbGNtRjBhVzl1S0h0Y2JpQWdJQ0FnSUNBZ2MzVnRiV0Z5ZVRvZ1lGSmxjR3hoWTJVZ1pYaHBjM1JwYm1jZ0pIdHRiMlJsYkVOc1lYcDZUbUZ0WlgwZ2NtVmpiM0prY3lCM2FYUm9JRzVsZHlCd1lYbHNiMkZrY3k1Z0xGeHVJQ0FnSUNBZ2ZTa3NYRzRnSUNBZ0lDQkJjR2xDYjJSNUtIdGNiaUFnSUNBZ0lDQWdaR1Z6WTNKcGNIUnBiMjQ2SUdCUVlYbHNiMkZrSUdadmNpQnlaWEJzWVdOcGJtY2daWGhwYzNScGJtY2djbVZqYjNKa2N5QnZaaUFrZTIxdlpHVnNRMnhoZW5wT1lXMWxmV0FzWEc0Z0lDQWdJQ0FnSUhOamFHVnRZVG9nZTF4dUlDQWdJQ0FnSUNBZ0lIUjVjR1U2SUZ3aVlYSnlZWGxjSWl4Y2JpQWdJQ0FnSUNBZ0lDQWtjbVZtT2lCblpYUlRZMmhsYldGUVlYUm9LRVIwYjBadmNpaFBjR1Z5WVhScGIyNUxaWGx6TGxWUVJFRlVSU3dnVFc5a1pXeERiMjV6ZEhJcEtTeGNiaUFnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJSDBwTEZ4dUlDQWdJQ0FnUVhCcFQydFNaWE53YjI1elpTaDdYRzRnSUNBZ0lDQWdJR1JsYzJOeWFYQjBhVzl1T2lCZ0pIdHRiMlJsYkVOc1lYcDZUbUZ0WlgwZ2RYQmtZWFJsWkNCemRXTmpaWE56Wm5Wc2JIa3VZQ3hjYmlBZ0lDQWdJQ0FnYzJOb1pXMWhPaUI3WEc0Z0lDQWdJQ0FnSUNBZ2RIbHdaVG9nWENKaGNuSmhlVndpTEZ4dUlDQWdJQ0FnSUNBZ0lHbDBaVzF6T2lCN0lDUnlaV1k2SUdkbGRGTmphR1Z0WVZCaGRHZ29UVzlrWld4RGIyNXpkSElwSUgwc1hHNGdJQ0FnSUNBZ0lIMHNYRzRnSUNBZ0lDQjlLU3hjYmlBZ0lDQWdJRUZ3YVU1dmRFWnZkVzVrVW1WemNHOXVjMlVvZTF4dUlDQWdJQ0FnSUNCa1pYTmpjbWx3ZEdsdmJqb2dZRTV2SUNSN2JXOWtaV3hEYkdGNmVrNWhiV1Y5SUhKbFkyOXlaQ0J0WVhSamFHVnpJSFJvWlNCd2NtOTJhV1JsWkNCcFpHVnVkR2xtYVdWeUxtQXNYRzRnSUNBZ0lDQjlLU3hjYmlBZ0lDQWdJRUZ3YVVKaFpGSmxjWFZsYzNSU1pYTndiMjV6WlNoN0lHUmxjMk55YVhCMGFXOXVPaUJjSWxCaGVXeHZZV1FnZG1Gc2FXUmhkR2x2YmlCbVlXbHNaV1F1WENJZ2ZTa3NYRzRnSUNBZ1hUdGNiaUFnZlZ4dVhHNGdJSEJ5YVhaaGRHVWdjM1JoZEdsaklHSjFiR3RFWld4bGRHVkVaV052Y21GMGIzSnpLRnh1SUNBZ0lFMXZaR1ZzUTI5dWMzUnlPaUJOYjJSbGJFTnZibk4wY25WamRHOXlQR0Z1ZVQ0c1hHNGdJQ0FnYlc5a1pXeERiR0Y2ZWs1aGJXVTZJSE4wY21sdVp5eGNiaUFnSUNCaGNHbFFjbTl3WlhKMGFXVnpPaUJFWldOaFprRndhVkJ5YjNCbGNuUjVXMTFjYmlBZ0tUb2dRWEp5WVhrOEtIUmhjbWRsZERvZ1lXNTVMQ0JyWlhrNklITjBjbWx1Wnl3Z1pHVnpZem9nWVc1NUtTQTlQaUIyYjJsa1BpQjdYRzRnSUNBZ2NtVjBkWEp1SUZ0Y2JpQWdJQ0FnSUVGd2FVOXdaWEpoZEdsdmJrWnliMjFOYjJSbGJDaE5iMlJsYkVOdmJuTjBjaXdnWENKRVJVeEZWRVZjSWl3Z1hDSmlkV3hyWENJcExGeHVJQ0FnSUNBZ1FYQnBVR0Z5WVcxelJuSnZiVTF2WkdWc0tHRndhVkJ5YjNCbGNuUnBaWE1wTEZ4dUlDQWdJQ0FnUVhCcFQzQmxjbUYwYVc5dUtIc2djM1Z0YldGeWVUb2dZRVJsYkdWMFpTQWtlMjF2WkdWc1EyeGhlbnBPWVcxbGZTQnlaV052Y21SeklHSjVJR2xrY3k1Z0lIMHBMRnh1SUNBZ0lDQWdRWEJwVVhWbGNua29leUJ1WVcxbE9pQmNJbWxrYzF3aUxDQnlaWEYxYVhKbFpEb2dkSEoxWlN3Z2RIbHdaVG9nWENKaGNuSmhlVndpSUgwcExGeHVJQ0FnSUNBZ1FYQnBUMnRTWlhOd2IyNXpaU2g3WEc0Z0lDQWdJQ0FnSUdSbGMyTnlhWEIwYVc5dU9pQmdKSHR0YjJSbGJFTnNZWHA2VG1GdFpYMGdaR1ZzWlhSbFpDQnpkV05qWlhOelpuVnNiSGt1WUN4Y2JpQWdJQ0FnSUNBZ2MyTm9aVzFoT2lCN1hHNGdJQ0FnSUNBZ0lDQWdkSGx3WlRvZ1hDSmhjbkpoZVZ3aUxGeHVJQ0FnSUNBZ0lDQWdJR2wwWlcxek9pQjdJQ1J5WldZNklHZGxkRk5qYUdWdFlWQmhkR2dvVFc5a1pXeERiMjV6ZEhJcElIMHNYRzRnSUNBZ0lDQWdJSDBzWEc0Z0lDQWdJQ0I5S1N4Y2JpQWdJQ0FnSUVGd2FVNXZkRVp2ZFc1a1VtVnpjRzl1YzJVb2UxeHVJQ0FnSUNBZ0lDQmtaWE5qY21sd2RHbHZiam9nWUU1dklDUjdiVzlrWld4RGJHRjZlazVoYldWOUlISmxZMjl5WkNCdFlYUmphR1Z6SUhSb1pTQndjbTkyYVdSbFpDQnBaR1Z1ZEdsbWFXVnlMbUFzWEc0Z0lDQWdJQ0I5S1N4Y2JpQWdJQ0JkTzF4dUlDQjlYRzVjYmlBZ2NISnBkbUYwWlNCemRHRjBhV01nY21WaFpFUmxZMjl5WVhSdmNuTW9YRzRnSUNBZ1RXOWtaV3hEYjI1emRISTZJRTF2WkdWc1EyOXVjM1J5ZFdOMGIzSThZVzU1UGl4Y2JpQWdJQ0J0YjJSbGJFTnNZWHA2VG1GdFpUb2djM1J5YVc1bkxGeHVJQ0FnSUdGd2FWQnliM0JsY25ScFpYTTZJRVJsWTJGbVFYQnBVSEp2Y0dWeWRIbGJYU3hjYmlBZ0lDQndhMUJoZEdnNklITjBjbWx1WjF4dUlDQXBPaUJCY25KaGVUd29kR0Z5WjJWME9pQmhibmtzSUd0bGVUb2djM1J5YVc1bkxDQmtaWE5qT2lCaGJua3BJRDArSUhadmFXUStJSHRjYmlBZ0lDQnlaWFIxY200Z1cxeHVJQ0FnSUNBZ1FYQnBUM0JsY21GMGFXOXVSbkp2YlUxdlpHVnNLRTF2WkdWc1EyOXVjM1J5TENCY0lrZEZWRndpTENCd2ExQmhkR2dwTEZ4dUlDQWdJQ0FnUVhCcFVHRnlZVzF6Um5KdmJVMXZaR1ZzS0dGd2FWQnliM0JsY25ScFpYTXBMRnh1SUNBZ0lDQWdRWEJwVDNCbGNtRjBhVzl1S0hzZ2MzVnRiV0Z5ZVRvZ1lGSmxkSEpwWlhabElHRWdKSHR0YjJSbGJFTnNZWHA2VG1GdFpYMGdjbVZqYjNKa0lHSjVJR2xrTG1BZ2ZTa3NYRzRnSUNBZ0lDQkJjR2xQYTFKbGMzQnZibk5sS0h0Y2JpQWdJQ0FnSUNBZ1pHVnpZM0pwY0hScGIyNDZJR0FrZTIxdlpHVnNRMnhoZW5wT1lXMWxmU0J5WlhSeWFXVjJaV1FnYzNWalkyVnpjMloxYkd4NUxtQXNYRzRnSUNBZ0lDQWdJSE5qYUdWdFlUb2dleUFrY21WbU9pQm5aWFJUWTJobGJXRlFZWFJvS0UxdlpHVnNRMjl1YzNSeUtTQjlMRnh1SUNBZ0lDQWdmU2tzWEc0Z0lDQWdJQ0JCY0dsT2IzUkdiM1Z1WkZKbGMzQnZibk5sS0h0Y2JpQWdJQ0FnSUNBZ1pHVnpZM0pwY0hScGIyNDZJR0JPYnlBa2UyMXZaR1ZzUTJ4aGVucE9ZVzFsZlNCeVpXTnZjbVFnYldGMFkyaGxjeUIwYUdVZ2NISnZkbWxrWldRZ2FXUmxiblJwWm1sbGNpNWdMRnh1SUNBZ0lDQWdmU2tzWEc0Z0lDQWdYVHRjYmlBZ2ZWeHVYRzRnSUhCeWFYWmhkR1VnYzNSaGRHbGpJSFZ3WkdGMFpVUmxZMjl5WVhSdmNuTW9YRzRnSUNBZ1RXOWtaV3hEYjI1emRISTZJRTF2WkdWc1EyOXVjM1J5ZFdOMGIzSThZVzU1UGl4Y2JpQWdJQ0J0YjJSbGJFTnNZWHA2VG1GdFpUb2djM1J5YVc1bkxGeHVJQ0FnSUdGd2FWQnliM0JsY25ScFpYTTZJRVJsWTJGbVFYQnBVSEp2Y0dWeWRIbGJYU3hjYmlBZ0lDQndhMUJoZEdnNklITjBjbWx1WjF4dUlDQXBPaUJCY25KaGVUd29kR0Z5WjJWME9pQmhibmtzSUd0bGVUb2djM1J5YVc1bkxDQmtaWE5qT2lCaGJua3BJRDArSUhadmFXUStJSHRjYmlBZ0lDQnlaWFIxY200Z1cxeHVJQ0FnSUNBZ1FYQnBUM0JsY21GMGFXOXVSbkp2YlUxdlpHVnNLRTF2WkdWc1EyOXVjM1J5TENCY0lsQlZWRndpTENCd2ExQmhkR2dwTEZ4dUlDQWdJQ0FnUVhCcFVHRnlZVzF6Um5KdmJVMXZaR1ZzS0dGd2FWQnliM0JsY25ScFpYTXBMRnh1SUNBZ0lDQWdRWEJwVDNCbGNtRjBhVzl1S0h0Y2JpQWdJQ0FnSUNBZ2MzVnRiV0Z5ZVRvZ1lGSmxjR3hoWTJVZ1lXNGdaWGhwYzNScGJtY2dKSHR0YjJSbGJFTnNZWHA2VG1GdFpYMGdjbVZqYjNKa0lIZHBkR2dnWVNCdVpYY2djR0Y1Ykc5aFpDNWdMRnh1SUNBZ0lDQWdmU2tzWEc0Z0lDQWdJQ0JCY0dsQ2IyUjVLSHRjYmlBZ0lDQWdJQ0FnWkdWelkzSnBjSFJwYjI0NklHQlFZWGxzYjJGa0lHWnZjaUJ5WlhCc1lXTnBibWNnWVc0Z1pYaHBjM1JwYm1jZ2NtVmpiM0prSUc5bUlDUjdiVzlrWld4RGJHRjZlazVoYldWOVlDeGNiaUFnSUNBZ0lDQWdkSGx3WlRvZ1JIUnZSbTl5S0U5d1pYSmhkR2x2Ymt0bGVYTXVWVkJFUVZSRkxDQk5iMlJsYkVOdmJuTjBjaWtzWEc0Z0lDQWdJQ0I5S1N4Y2JpQWdJQ0FnSUVGd2FVOXJVbVZ6Y0c5dWMyVW9lMXh1SUNBZ0lDQWdJQ0JrWlhOamNtbHdkR2x2YmpvZ1lDUjdiVzlrWld4RGJHRjZlazVoYldWOUlIVndaR0YwWldRZ2MzVmpZMlZ6YzJaMWJHeDVMbUFzWEc0Z0lDQWdJQ0FnSUhOamFHVnRZVG9nZXlBa2NtVm1PaUJuWlhSVFkyaGxiV0ZRWVhSb0tFMXZaR1ZzUTI5dWMzUnlLU0I5TEZ4dUlDQWdJQ0FnZlNrc1hHNGdJQ0FnSUNCQmNHbE9iM1JHYjNWdVpGSmxjM0J2Ym5ObEtIdGNiaUFnSUNBZ0lDQWdaR1Z6WTNKcGNIUnBiMjQ2SUdCT2J5QWtlMjF2WkdWc1EyeGhlbnBPWVcxbGZTQnlaV052Y21RZ2JXRjBZMmhsY3lCMGFHVWdjSEp2ZG1sa1pXUWdhV1JsYm5ScFptbGxjaTVnTEZ4dUlDQWdJQ0FnZlNrc1hHNGdJQ0FnSUNCQmNHbENZV1JTWlhGMVpYTjBVbVZ6Y0c5dWMyVW9leUJrWlhOamNtbHdkR2x2YmpvZ1hDSlFZWGxzYjJGa0lIWmhiR2xrWVhScGIyNGdabUZwYkdWa0xsd2lJSDBwTEZ4dUlDQWdJRjA3WEc0Z0lIMWNibHh1SUNCd2NtbDJZWFJsSUhOMFlYUnBZeUJrWld4bGRHVkVaV052Y21GMGIzSnpLRnh1SUNBZ0lFMXZaR1ZzUTI5dWMzUnlPaUJOYjJSbGJFTnZibk4wY25WamRHOXlQR0Z1ZVQ0c1hHNGdJQ0FnYlc5a1pXeERiR0Y2ZWs1aGJXVTZJSE4wY21sdVp5eGNiaUFnSUNCaGNHbFFjbTl3WlhKMGFXVnpPaUJFWldOaFprRndhVkJ5YjNCbGNuUjVXMTBzWEc0Z0lDQWdjR3RRWVhSb09pQnpkSEpwYm1kY2JpQWdLVG9nUVhKeVlYazhLSFJoY21kbGREb2dZVzU1TENCclpYazZJSE4wY21sdVp5d2daR1Z6WXpvZ1lXNTVLU0E5UGlCMmIybGtQaUI3WEc0Z0lDQWdjbVYwZFhKdUlGdGNiaUFnSUNBZ0lFRndhVTl3WlhKaGRHbHZia1p5YjIxTmIyUmxiQ2hOYjJSbGJFTnZibk4wY2l3Z1hDSkVSVXhGVkVWY0lpd2djR3RRWVhSb0tTeGNiaUFnSUNBZ0lFRndhVkJoY21GdGMwWnliMjFOYjJSbGJDaGhjR2xRY205d1pYSjBhV1Z6S1N4Y2JpQWdJQ0FnSUVGd2FVOXdaWEpoZEdsdmJpaDdJSE4xYlcxaGNuazZJR0JFWld4bGRHVWdZU0FrZTIxdlpHVnNRMnhoZW5wT1lXMWxmU0J5WldOdmNtUWdZbmtnYVdRdVlDQjlLU3hjYmlBZ0lDQWdJRUZ3YVU5clVtVnpjRzl1YzJVb2UxeHVJQ0FnSUNBZ0lDQmtaWE5qY21sd2RHbHZiam9nWUNSN2JXOWtaV3hEYkdGNmVrNWhiV1Y5SUdSbGJHVjBaV1FnYzNWalkyVnpjMloxYkd4NUxtQXNYRzRnSUNBZ0lDQWdJSE5qYUdWdFlUb2dleUFrY21WbU9pQm5aWFJUWTJobGJXRlFZWFJvS0UxdlpHVnNRMjl1YzNSeUtTQjlMRnh1SUNBZ0lDQWdmU2tzWEc0Z0lDQWdJQ0JCY0dsT2IzUkdiM1Z1WkZKbGMzQnZibk5sS0h0Y2JpQWdJQ0FnSUNBZ1pHVnpZM0pwY0hScGIyNDZJR0JPYnlBa2UyMXZaR1ZzUTJ4aGVucE9ZVzFsZlNCeVpXTnZjbVFnYldGMFkyaGxjeUIwYUdVZ2NISnZkbWxrWldRZ2FXUmxiblJwWm1sbGNpNWdMRnh1SUNBZ0lDQWdmU2tzWEc0Z0lDQWdYVHRjYmlBZ2ZWeHVYRzRnSUhCeWFYWmhkR1VnYzNSaGRHbGpJSE4wWVhSbGJXVnVkRVJsWTI5eVlYUnZjbk1vWEc0Z0lDQWdUVzlrWld4RGIyNXpkSEk2SUUxdlpHVnNRMjl1YzNSeWRXTjBiM0k4WVc1NVBpeGNiaUFnSUNCdGIyUmxiRU5zWVhwNlRtRnRaVG9nYzNSeWFXNW5YRzRnSUNrNklFRnljbUY1UENoMFlYSm5aWFE2SUdGdWVTd2dhMlY1T2lCemRISnBibWNzSUdSbGMyTTZJR0Z1ZVNrZ1BUNGdkbTlwWkQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUJiWEc0Z0lDQWdJQ0JCY0dsUGNHVnlZWFJwYjI1R2NtOXRUVzlrWld3b1RXOWtaV3hEYjI1emRISXNJRndpUjBWVVhDSXNJRndpYzNSaGRHVnRaVzUwTHpwdFpYUm9iMlF2S21GeVozTmNJaWtzWEc0Z0lDQWdJQ0JCY0dsUGNHVnlZWFJwYjI0b2UxeHVJQ0FnSUNBZ0lDQnpkVzF0WVhKNU9pQmdSWGhsWTNWMFpYTWdZU0J3Y21Wd1lYSmxaQ0J6ZEdGMFpXMWxiblFnYjI0Z0pIdHRiMlJsYkVOc1lYcDZUbUZ0WlgwdVlDeGNiaUFnSUNBZ0lIMHBMRnh1SUNBZ0lDQWdRWEJwVUdGeVlXMG9leUJ1WVcxbE9pQmNJbTFsZEdodlpGd2lMQ0JrWlhOamNtbHdkR2x2YmpvZ1hDSjBhR1VnY0hKbGNHRnlaV1FnYzNSaGRHVnRaVzUwSUhSdklHVjRaV04xZEdWY0lpQjlLU3hjYmlBZ0lDQWdJRUZ3YVZCaGNtRnRLSHRjYmlBZ0lDQWdJQ0FnYm1GdFpUb2dYQ0poY21kelhDSXNYRzRnSUNBZ0lDQWdJR1JsYzJOeWFYQjBhVzl1T2lCY0ltTnZibU5oZEdWdVlYUmxaQ0JzYVhOMElHOW1JR0Z5WjNWdFpXNTBjeUIwYUdVZ2NISmxjR0Z5WldRZ2MzUmhkR1Z0Wlc1MElHTmhiaUJoWTJObGNIUmNJaXhjYmlBZ0lDQWdJSDBwTEZ4dUlDQWdJQ0FnUVhCcFVYVmxjbmtvZTF4dUlDQWdJQ0FnSUNCdVlXMWxPaUJjSW1ScGNtVmpkR2x2Ymx3aUxGeHVJQ0FnSUNBZ0lDQnlaWEYxYVhKbFpEb2dkSEoxWlN4Y2JpQWdJQ0FnSUNBZ1pXNTFiVG9nVDNKa1pYSkVhWEpsWTNScGIyNHNYRzRnSUNBZ0lDQWdJR1JsYzJOeWFYQjBhVzl1T2lCY0luUm9aU0J6YjNKMElHOXlaR1Z5SUhkb1pXNGdZWEJ3YkdsallXSnNaVndpTEZ4dUlDQWdJQ0FnZlNrc1hHNGdJQ0FnSUNCQmNHbFJkV1Z5ZVNoN0lHNWhiV1U2SUZ3aWJHbHRhWFJjSWl3Z2NtVnhkV2x5WldRNklIUnlkV1VzSUdSbGMyTnlhWEIwYVc5dU9pQmNJbXhwYldsMElHOXlJSEJoWjJVZ2MybDZaU0IzYUdWdUlHRndjR3hwWTJGaWJHVmNJaUI5S1N4Y2JpQWdJQ0FnSUVGd2FWRjFaWEo1S0hzZ2JtRnRaVG9nWENKdlptWnpaWFJjSWl3Z2NtVnhkV2x5WldRNklIUnlkV1VzSUdSbGMyTnlhWEIwYVc5dU9pQmNJbTltWm5ObGRDQnZjaUJpYjI5cmJXRnlheUIzYUdWdUlHRndjR3hwWTJGaWJHVmNJaUI5S1N4Y2JpQWdJQ0FnSUVGd2FVOXJVbVZ6Y0c5dWMyVW9leUJrWlhOamNtbHdkR2x2YmpvZ1lDUjdiVzlrWld4RGJHRjZlazVoYldWOUlHeHBjM1JsWkNCbWIzVnVaQzVnSUgwcExGeHVJQ0FnSUNBZ1FYQnBUbTkwUm05MWJtUlNaWE53YjI1elpTaDdYRzRnSUNBZ0lDQWdJR1JsYzJOeWFYQjBhVzl1T2lCZ1RtOGdKSHR0YjJSbGJFTnNZWHA2VG1GdFpYMGdjbVZqYjNKa0lHMWhkR05vWlhNZ2RHaGxJSEJ5YjNacFpHVmtJR2xrWlc1MGFXWnBaWEl1WUN4Y2JpQWdJQ0FnSUgwcExGeHVJQ0FnSUYwN1hHNGdJSDFjYmx4dUlDQndjbWwyWVhSbElITjBZWFJwWXlCemRHRjBaVzFsYm5SVGFHOXlkR04xZEVSbFkyOXlZWFJ2Y25Nb1hHNGdJQ0FnVFc5a1pXeERiMjV6ZEhJNklFMXZaR1ZzUTI5dWMzUnlkV04wYjNJOFlXNTVQaXhjYmlBZ0lDQnRiMlJsYkVOc1lYcDZUbUZ0WlRvZ2MzUnlhVzVuTEZ4dUlDQWdJSEJoZEdnNklITjBjbWx1Wnl4Y2JpQWdJQ0J6ZEdGMFpXMWxiblJMWlhrNklITjBjbWx1WjF4dUlDQXBPaUJCY25KaGVUd29kR0Z5WjJWME9pQmhibmtzSUd0bGVUb2djM1J5YVc1bkxDQmtaWE5qT2lCaGJua3BJRDArSUhadmFXUStJSHRjYmlBZ0lDQmpiMjV6ZENCaVlYTmxPaUJCY25KaGVUd29kR0Z5WjJWME9pQmhibmtzSUd0bGVUb2djM1J5YVc1bkxDQmtaWE5qT2lCaGJua3BJRDArSUhadmFXUStJRDBnVzF4dUlDQWdJQ0FnUVhCcFQzQmxjbUYwYVc5dVJuSnZiVTF2WkdWc0tFMXZaR1ZzUTI5dWMzUnlMQ0JjSWtkRlZGd2lMQ0J3WVhSb0tTeGNiaUFnSUNBZ0lFRndhVTl3WlhKaGRHbHZiaWg3SUhOMWJXMWhjbms2SUdCU1pYUnlhV1YyWlNBa2UyMXZaR1ZzUTJ4aGVucE9ZVzFsZlNCeVpXTnZjbVJ6TG1BZ2ZTa3NYRzRnSUNBZ0lDQkJjR2xQYTFKbGMzQnZibk5sS0hzZ1pHVnpZM0pwY0hScGIyNDZJR0FrZTIxdlpHVnNRMnhoZW5wT1lXMWxmU0J5WlhSeWFXVjJaV1FnYzNWalkyVnpjMloxYkd4NUxtQWdmU2tzWEc0Z0lDQWdYVHRjYmx4dUlDQWdJR052Ym5OMElITmxaMjFsYm5SeklEMGdjR0YwYUM1emNHeHBkQ2hjSWk5Y0lpa3VabWxzZEdWeUtDaHpLU0E5UGlCekxuTjBZWEowYzFkcGRHZ29YQ0k2WENJcEtUdGNiaUFnSUNCelpXZHRaVzUwY3k1bWIzSkZZV05vS0NoelpXY3BJRDArSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJRzVoYldVZ1BTQnpaV2N1Y21Wd2JHRmpaU2hjSWpwY0lpd2dYQ0pjSWlrN1hHNGdJQ0FnSUNCaVlYTmxMbkIxYzJnb1FYQnBVR0Z5WVcwb2V5QnVZVzFsTENCa1pYTmpjbWx3ZEdsdmJqb2dZRlJvWlNBa2UyNWhiV1Y5SUhCaGNtRnRaWFJsY21BZ2ZTa3BPMXh1SUNBZ0lIMHBPMXh1WEc0Z0lDQWdhV1lnS0Z4dUlDQWdJQ0FnY0dGMGFDNXpkR0Z5ZEhOWGFYUm9LRndpYkdsemRFSjVMMXdpS1NCOGZGeHVJQ0FnSUNBZ2NHRjBhQzV6ZEdGeWRITlhhWFJvS0Z3aWNHRm5hVzVoZEdWQ2VTOWNJaWtnZkh4Y2JpQWdJQ0FnSUhCaGRHZ3VjM1JoY25SelYybDBhQ2hjSW1acGJtUXZYQ0lwSUh4OFhHNGdJQ0FnSUNCd1lYUm9Mbk4wWVhKMGMxZHBkR2dvWENKd1lXZGxMMXdpS1Z4dUlDQWdJQ2tnZTF4dUlDQWdJQ0FnWW1GelpTNXdkWE5vS0Z4dUlDQWdJQ0FnSUNCQmNHbFJkV1Z5ZVNoN1hHNGdJQ0FnSUNBZ0lDQWdibUZ0WlRvZ1hDSmthWEpsWTNScGIyNWNJaXhjYmlBZ0lDQWdJQ0FnSUNCeVpYRjFhWEpsWkRvZ2RISjFaU3hjYmlBZ0lDQWdJQ0FnSUNCbGJuVnRPaUJQY21SbGNrUnBjbVZqZEdsdmJpeGNiaUFnSUNBZ0lDQWdJQ0JrWlhOamNtbHdkR2x2YmpvZ1hDSjBhR1VnYzI5eWRDQnZjbVJsY2x3aUxGeHVJQ0FnSUNBZ0lDQjlLVnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzRnSUNBZ2FXWWdLSEJoZEdndWMzUmhjblJ6VjJsMGFDaGNJbkJoWjJsdVlYUmxRbmt2WENJcElIeDhJSEJoZEdndWMzUmhjblJ6VjJsMGFDaGNJbkJoWjJVdlhDSXBLU0I3WEc0Z0lDQWdJQ0JpWVhObExuQjFjMmdvWEc0Z0lDQWdJQ0FnSUVGd2FWRjFaWEo1S0hzZ2JtRnRaVG9nWENKc2FXMXBkRndpTENCeVpYRjFhWEpsWkRvZ1ptRnNjMlVzSUdSbGMyTnlhWEIwYVc5dU9pQmNJbkJoWjJVZ2MybDZaVndpSUgwcExGeHVJQ0FnSUNBZ0lDQkJjR2xSZFdWeWVTaDdJRzVoYldVNklGd2liMlptYzJWMFhDSXNJSEpsY1hWcGNtVmtPaUJtWVd4elpTd2daR1Z6WTNKcGNIUnBiMjQ2SUZ3aWNHRm5aU0J1ZFcxaVpYSmNJaUI5S1N4Y2JpQWdJQ0FnSUNBZ1FYQnBVWFZsY25rb2V5QnVZVzFsT2lCY0ltSnZiMnR0WVhKclhDSXNJSEpsY1hWcGNtVmtPaUJtWVd4elpTd2daR1Z6WTNKcGNIUnBiMjQ2SUZ3aVltOXZhMjFoY21zZ1ptOXlJR04xY25OdmNpQndZV2RwYm1GMGFXOXVYQ0lnZlNsY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tIQmhkR2d1YzNSaGNuUnpWMmwwYUNoY0ltWnBibVJQYm1WQ2VTOWNJaWtnZkh3Z2NHRjBhQzV6ZEdGeWRITlhhWFJvS0Z3aVptbHVaRUo1TDF3aUtTa2dlMXh1SUNBZ0lDQWdZbUZ6WlM1d2RYTm9LRnh1SUNBZ0lDQWdJQ0JCY0dsT2IzUkdiM1Z1WkZKbGMzQnZibk5sS0h0Y2JpQWdJQ0FnSUNBZ0lDQmtaWE5qY21sd2RHbHZiam9nWUU1dklDUjdiVzlrWld4RGJHRjZlazVoYldWOUlISmxZMjl5WkNCdFlYUmphR1Z6SUhSb1pTQndjbTkyYVdSbFpDQnBaR1Z1ZEdsbWFXVnlMbUFzWEc0Z0lDQWdJQ0FnSUgwcFhHNGdJQ0FnSUNBcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdsbUlDaGNiaUFnSUNBZ0lITjBZWFJsYldWdWRFdGxlU0E5UFQwZ1VISmxjR0Z5WldSVGRHRjBaVzFsYm5STFpYbHpMa05QVlU1VVgwOUdJSHg4WEc0Z0lDQWdJQ0J6ZEdGMFpXMWxiblJMWlhrZ1BUMDlJRkJ5WlhCaGNtVmtVM1JoZEdWdFpXNTBTMlY1Y3k1QlZrZGZUMFlnZkh4Y2JpQWdJQ0FnSUhOMFlYUmxiV1Z1ZEV0bGVTQTlQVDBnVUhKbGNHRnlaV1JUZEdGMFpXMWxiblJMWlhsekxsTlZUVjlQUmx4dUlDQWdJQ2tnZTF4dUlDQWdJQ0FnWW1GelpTNXdkWE5vS0VGd2FVOXJVbVZ6Y0c5dWMyVW9leUJrWlhOamNtbHdkR2x2YmpvZ1lGSmxjM1ZzZENCbWIzSWdKSHR0YjJSbGJFTnNZWHA2VG1GdFpYMHVZQ3dnZEhsd1pUb2dUblZ0WW1WeUlIMHBLVHRjYmlBZ0lDQjlYRzRnSUNBZ2FXWWdLSE4wWVhSbGJXVnVkRXRsZVNBOVBUMGdVSEpsY0dGeVpXUlRkR0YwWlcxbGJuUkxaWGx6TGtSSlUxUkpUa05VWDA5R0tTQjdYRzRnSUNBZ0lDQmlZWE5sTG5CMWMyZ29RWEJwVDJ0U1pYTndiMjV6WlNoN0lHUmxjMk55YVhCMGFXOXVPaUJnUkdsemRHbHVZM1FnZG1Gc2RXVnpJR1p2Y2lBa2UyMXZaR1ZzUTJ4aGVucE9ZVzFsZlM1Z0xDQjBlWEJsT2lCYlUzUnlhVzVuWFNCOUtTazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NtVjBkWEp1SUdKaGMyVTdYRzRnSUgxY2JseHVJQ0J3Y21sMllYUmxJSE4wWVhScFl5Qm5aWFJSZFdWeWVVUmxZMjl5WVhSdmNuTW9YRzRnSUNBZ2JXVjBhRzlrVG1GdFpUb2djM1J5YVc1bkxGeHVJQ0FnSUhKdmRYUmxVR0YwYURvZ2MzUnlhVzVuTEZ4dUlDQWdJR2gwZEhCV1pYSmlPaUJ6ZEhKcGJtY3NYRzRnSUNBZ2FXNWpiSFZrWlZGMVpYSjVVR0Z5WVcxek9pQmliMjlzWldGdUlEMGdabUZzYzJWY2JpQWdLVG9nUVhKeVlYazhLSFJoY21kbGREb2dZVzU1TENCclpYazZJSE4wY21sdVp5d2daR1Z6WXpvZ1lXNTVLU0E5UGlCMmIybGtQaUI3WEc0Z0lDQWdZMjl1YzNRZ1pYaDBjbUZqZEZCaGRHaFFZWEpoYlhNZ1BTQW9jRG9nYzNSeWFXNW5LVG9nYzNSeWFXNW5XMTBnUFQ1Y2JpQWdJQ0FnSUhBdWMzQnNhWFFvWENJdlhDSXBMbVpwYkhSbGNpZ29jeWtnUFQ0Z2N5NXpkR0Z5ZEhOWGFYUm9LRndpT2x3aUtTa3ViV0Z3S0NoektTQTlQaUJ6TG5Oc2FXTmxLREVwS1R0Y2JseHVJQ0FnSUdOdmJuTjBJR0Z3YVZCaGRHaFFZWEpoYlhNZ1BTQmxlSFJ5WVdOMFVHRjBhRkJoY21GdGN5aHliM1YwWlZCaGRHZ3BMbTFoY0Nnb2JtRnRaU2tnUFQ0Z0tIdGNiaUFnSUNBZ0lHNWhiV1VzWEc0Z0lDQWdJQ0JrWlhOamNtbHdkR2x2YmpvZ1lDUjdibUZ0WlgwZ2NHRnlZVzFsZEdWeUlHWnZjaUIwYUdVZ2NYVmxjbmxnTEZ4dUlDQWdJQ0FnY21WeGRXbHlaV1E2SUhSeWRXVXNYRzRnSUNBZ0lDQjBlWEJsT2lCVGRISnBibWNzWEc0Z0lDQWdmU2twTzF4dVhHNGdJQ0FnWTI5dWMzUWdaR1ZqYjNKaGRHOXljem9nUVhKeVlYazhLSFJoY21kbGREb2dZVzU1TENCclpYazZJSE4wY21sdVp5d2daR1Z6WXpvZ1lXNTVLU0E5UGlCMmIybGtQaUE5SUZ0Y2JpQWdJQ0FnSUM0dUxtRndhVkJoZEdoUVlYSmhiWE11YldGd0tDaHdLU0E5UGlCQmNHbFFZWEpoYlNod0tTa3NYRzRnSUNBZ0lDQkJjR2xQY0dWeVlYUnBiMjRvZXlCemRXMXRZWEo1T2lCZ1VtVjBjbWxsZG1VZ2NtVmpiM0prY3lCMWMybHVaeUJjSWlSN2JXVjBhRzlrVG1GdFpYMWNJaTVnSUgwcExGeHVJQ0FnSUNBZ1FYQnBUMnRTWlhOd2IyNXpaU2g3SUdSbGMyTnlhWEIwYVc5dU9pQmNJbEpsYzNWc2RDQnpkV05qWlhOelpuVnNiSGtnY21WMGNtbGxkbVZrTGx3aUlIMHBMRnh1SUNBZ0lDQWdRWEJwVG05RGIyNTBaVzUwVW1WemNHOXVjMlVvZXlCa1pYTmpjbWx3ZEdsdmJqb2dYQ0pPYnlCamIyNTBaVzUwSUhKbGRIVnlibVZrSUdKNUlIUm9aU0J0WlhSb2IyUXVYQ0lnZlNrc1hHNGdJQ0FnWFR0Y2JseHVJQ0FnSUdsbUlDaG9kSFJ3Vm1WeVlpQTlQVDBnWENKSFJWUmNJaUFtSmlCcGJtTnNkV1JsVVhWbGNubFFZWEpoYlhNcElIdGNiaUFnSUNBZ0lHUmxZMjl5WVhSdmNuTXVjSFZ6YUNoY2JpQWdJQ0FnSUNBZ1FYQnBVWFZsY25rb2UxeHVJQ0FnSUNBZ0lDQWdJRzVoYldVNklGd2laR2x5WldOMGFXOXVYQ0lzWEc0Z0lDQWdJQ0FnSUNBZ2NtVnhkV2x5WldRNklHWmhiSE5sTEZ4dUlDQWdJQ0FnSUNBZ0lHVnVkVzA2SUU5eVpHVnlSR2x5WldOMGFXOXVMRnh1SUNBZ0lDQWdJQ0FnSUdSbGMyTnlhWEIwYVc5dU9pQmNJblJvWlNCemIzSjBJRzl5WkdWeUlIZG9aVzRnWVhCd2JHbGpZV0pzWlZ3aUxGeHVJQ0FnSUNBZ0lDQjlLU3hjYmlBZ0lDQWdJQ0FnUVhCcFVYVmxjbmtvZXlCdVlXMWxPaUJjSW14cGJXbDBYQ0lzSUhKbGNYVnBjbVZrT2lCbVlXeHpaU3dnWkdWelkzSnBjSFJwYjI0NklGd2liR2x0YVhRZ2IzSWdjR0ZuWlNCemFYcGxYQ0lnZlNrc1hHNGdJQ0FnSUNBZ0lFRndhVkYxWlhKNUtIc2dibUZ0WlRvZ1hDSnZabVp6WlhSY0lpd2djbVZ4ZFdseVpXUTZJR1poYkhObExDQmtaWE5qY21sd2RHbHZiam9nWENKdlptWnpaWFFnYjNJZ1ltOXZhMjFoY210Y0lpQjlLVnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z1pHVmpiM0poZEc5eWN6dGNiaUFnZlZ4dWZWeHVJbDE5Il19