@decaf-ts/integrations 0.3.5 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/dist/integrations.cjs +1608 -7
  2. package/dist/integrations.js +1841 -5
  3. package/lib/cjs/graph/execution/SwitchGraphNodeExecutor.cjs +13 -5
  4. package/lib/cjs/graph/nodes/base.cjs +35 -0
  5. package/lib/cjs/graph/nodes/flow-control.cjs +31 -3
  6. package/lib/cjs/graph/nodes/index.cjs +3 -2
  7. package/lib/cjs/graph/types.cjs +2 -2
  8. package/lib/cjs/index.cjs +6 -5
  9. package/lib/cjs/namespaces/index.cjs +26 -0
  10. package/lib/cjs/namespaces/models/authorization-model.cjs +12 -0
  11. package/lib/cjs/namespaces/models/effective-permission.model.cjs +95 -0
  12. package/lib/cjs/namespaces/models/group-membership.model.cjs +66 -0
  13. package/lib/cjs/namespaces/models/group.model.cjs +74 -0
  14. package/lib/cjs/namespaces/models/index.cjs +39 -0
  15. package/lib/cjs/namespaces/models/inheritance-block.model.cjs +76 -0
  16. package/lib/cjs/namespaces/models/org-unit-closure.model.cjs +66 -0
  17. package/lib/cjs/namespaces/models/org-unit-membership.model.cjs +73 -0
  18. package/lib/cjs/namespaces/models/org-unit-profile.model.cjs +64 -0
  19. package/lib/cjs/namespaces/models/org-unit.model.cjs +102 -0
  20. package/lib/cjs/namespaces/models/permission.model.cjs +64 -0
  21. package/lib/cjs/namespaces/models/principal.model.cjs +77 -0
  22. package/lib/cjs/namespaces/models/protected-resource.model.cjs +99 -0
  23. package/lib/cjs/namespaces/models/resource-grant.model.cjs +88 -0
  24. package/lib/cjs/namespaces/models/role-assignment.model.cjs +98 -0
  25. package/lib/cjs/namespaces/models/role-permission.model.cjs +55 -0
  26. package/lib/cjs/namespaces/models/role.model.cjs +84 -0
  27. package/lib/cjs/namespaces/models/storage-binding.model.cjs +85 -0
  28. package/lib/cjs/namespaces/models/tenant-membership.model.cjs +67 -0
  29. package/lib/cjs/namespaces/models/tenant-profile.model.cjs +64 -0
  30. package/lib/cjs/namespaces/models/tenant.model.cjs +88 -0
  31. package/lib/cjs/namespaces/models/user.model.cjs +75 -0
  32. package/lib/cjs/namespaces/org-based-authorization-system.cjs +286 -0
  33. package/lib/cjs/namespaces/org-based-authorization-system.models.cjs +968 -0
  34. package/lib/cjs/namespaces/org-based-authorization-system.services.cjs +1046 -0
  35. package/lib/cjs/namespaces/services/authz.service.cjs +76 -0
  36. package/lib/cjs/namespaces/services/bootstrap.service.cjs +112 -0
  37. package/lib/cjs/namespaces/services/effective-permission.service.cjs +150 -0
  38. package/lib/cjs/namespaces/services/group-membership.service.cjs +42 -0
  39. package/lib/cjs/namespaces/services/group.service.cjs +30 -0
  40. package/lib/cjs/namespaces/services/index.cjs +42 -0
  41. package/lib/cjs/namespaces/services/inheritance-block.service.cjs +32 -0
  42. package/lib/cjs/namespaces/services/org-unit-closure.service.cjs +55 -0
  43. package/lib/cjs/namespaces/services/org-unit-membership.service.cjs +34 -0
  44. package/lib/cjs/namespaces/services/org-unit-profile.service.cjs +23 -0
  45. package/lib/cjs/namespaces/services/org-unit.service.cjs +160 -0
  46. package/lib/cjs/namespaces/services/permission.service.cjs +29 -0
  47. package/lib/cjs/namespaces/services/principal.service.cjs +35 -0
  48. package/lib/cjs/namespaces/services/protected-resource.service.cjs +43 -0
  49. package/lib/cjs/namespaces/services/resource-grant.service.cjs +45 -0
  50. package/lib/cjs/namespaces/services/resource-lifecycle.service.cjs +24 -0
  51. package/lib/cjs/namespaces/services/role-assignment.service.cjs +41 -0
  52. package/lib/cjs/namespaces/services/role-permission.service.cjs +51 -0
  53. package/lib/cjs/namespaces/services/role.service.cjs +45 -0
  54. package/lib/cjs/namespaces/services/storage-binding.service.cjs +39 -0
  55. package/lib/cjs/namespaces/services/system-management.service.cjs +102 -0
  56. package/lib/cjs/namespaces/services/tenant-membership.service.cjs +33 -0
  57. package/lib/cjs/namespaces/services/tenant-profile.service.cjs +28 -0
  58. package/lib/cjs/namespaces/services/tenant.service.cjs +36 -0
  59. package/lib/cjs/namespaces/services/user.service.cjs +32 -0
  60. package/lib/cjs/namespaces/types.cjs +67 -0
  61. package/lib/cjs/namespaces/utils.cjs +161 -0
  62. package/lib/cjs/nest/authService.cjs +5 -2
  63. package/lib/cjs/nest/graph/GraphExecutionController.cjs +153 -0
  64. package/lib/cjs/nest/graph/GraphExecutionModule.cjs +84 -0
  65. package/lib/cjs/nest/graph/GraphExecutionResultModel.cjs +82 -0
  66. package/lib/cjs/nest/graph/GraphExecutionResultRepository.cjs +66 -0
  67. package/lib/cjs/nest/graph/GraphExecutorRegistryFactory.cjs +35 -0
  68. package/lib/cjs/nest/graph/index.cjs +28 -0
  69. package/lib/cjs/nest/index.cjs +3 -2
  70. package/lib/esm/graph/execution/SwitchGraphNodeExecutor.js +12 -4
  71. package/lib/esm/graph/nodes/base.js +30 -0
  72. package/lib/esm/graph/nodes/flow-control.js +31 -3
  73. package/lib/esm/graph/nodes/index.js +2 -1
  74. package/lib/esm/graph/types.js +1 -1
  75. package/lib/esm/index.js +5 -4
  76. package/lib/esm/namespaces/index.js +9 -0
  77. package/lib/esm/namespaces/models/authorization-model.js +7 -0
  78. package/lib/esm/namespaces/models/effective-permission.model.js +86 -0
  79. package/lib/esm/namespaces/models/group-membership.model.js +57 -0
  80. package/lib/esm/namespaces/models/group.model.js +65 -0
  81. package/lib/esm/namespaces/models/index.js +22 -0
  82. package/lib/esm/namespaces/models/inheritance-block.model.js +67 -0
  83. package/lib/esm/namespaces/models/org-unit-closure.model.js +57 -0
  84. package/lib/esm/namespaces/models/org-unit-membership.model.js +64 -0
  85. package/lib/esm/namespaces/models/org-unit-profile.model.js +55 -0
  86. package/lib/esm/namespaces/models/org-unit.model.js +93 -0
  87. package/lib/esm/namespaces/models/permission.model.js +55 -0
  88. package/lib/esm/namespaces/models/principal.model.js +68 -0
  89. package/lib/esm/namespaces/models/protected-resource.model.js +90 -0
  90. package/lib/esm/namespaces/models/resource-grant.model.js +79 -0
  91. package/lib/esm/namespaces/models/role-assignment.model.js +89 -0
  92. package/lib/esm/namespaces/models/role-permission.model.js +46 -0
  93. package/lib/esm/namespaces/models/role.model.js +75 -0
  94. package/lib/esm/namespaces/models/storage-binding.model.js +76 -0
  95. package/lib/esm/namespaces/models/tenant-membership.model.js +58 -0
  96. package/lib/esm/namespaces/models/tenant-profile.model.js +55 -0
  97. package/lib/esm/namespaces/models/tenant.model.js +79 -0
  98. package/lib/esm/namespaces/models/user.model.js +66 -0
  99. package/lib/esm/namespaces/org-based-authorization-system.js +283 -0
  100. package/lib/esm/namespaces/org-based-authorization-system.models.js +958 -0
  101. package/lib/esm/namespaces/org-based-authorization-system.services.js +1014 -0
  102. package/lib/esm/namespaces/services/authz.service.js +71 -0
  103. package/lib/esm/namespaces/services/bootstrap.service.js +102 -0
  104. package/lib/esm/namespaces/services/effective-permission.service.js +140 -0
  105. package/lib/esm/namespaces/services/group-membership.service.js +37 -0
  106. package/lib/esm/namespaces/services/group.service.js +25 -0
  107. package/lib/esm/namespaces/services/index.js +25 -0
  108. package/lib/esm/namespaces/services/inheritance-block.service.js +27 -0
  109. package/lib/esm/namespaces/services/org-unit-closure.service.js +50 -0
  110. package/lib/esm/namespaces/services/org-unit-membership.service.js +29 -0
  111. package/lib/esm/namespaces/services/org-unit-profile.service.js +18 -0
  112. package/lib/esm/namespaces/services/org-unit.service.js +150 -0
  113. package/lib/esm/namespaces/services/permission.service.js +24 -0
  114. package/lib/esm/namespaces/services/principal.service.js +30 -0
  115. package/lib/esm/namespaces/services/protected-resource.service.js +38 -0
  116. package/lib/esm/namespaces/services/resource-grant.service.js +40 -0
  117. package/lib/esm/namespaces/services/resource-lifecycle.service.js +19 -0
  118. package/lib/esm/namespaces/services/role-assignment.service.js +36 -0
  119. package/lib/esm/namespaces/services/role-permission.service.js +46 -0
  120. package/lib/esm/namespaces/services/role.service.js +40 -0
  121. package/lib/esm/namespaces/services/storage-binding.service.js +34 -0
  122. package/lib/esm/namespaces/services/system-management.service.js +92 -0
  123. package/lib/esm/namespaces/services/tenant-membership.service.js +28 -0
  124. package/lib/esm/namespaces/services/tenant-profile.service.js +23 -0
  125. package/lib/esm/namespaces/services/tenant.service.js +31 -0
  126. package/lib/esm/namespaces/services/user.service.js +27 -0
  127. package/lib/esm/namespaces/types.js +71 -0
  128. package/lib/esm/namespaces/utils.js +143 -0
  129. package/lib/esm/nest/authService.js +4 -1
  130. package/lib/esm/nest/graph/GraphExecutionController.js +144 -0
  131. package/lib/esm/nest/graph/GraphExecutionModule.js +76 -0
  132. package/lib/esm/nest/graph/GraphExecutionResultModel.js +73 -0
  133. package/lib/esm/nest/graph/GraphExecutionResultRepository.js +60 -0
  134. package/lib/esm/nest/graph/GraphExecutorRegistryFactory.js +31 -0
  135. package/lib/esm/nest/graph/index.js +11 -0
  136. package/lib/esm/nest/index.js +2 -1
  137. package/lib/types/graph/nodes/base.d.cts +28 -0
  138. package/lib/types/graph/nodes/base.d.mts +28 -0
  139. package/lib/types/graph/nodes/flow-control.d.cts +9 -1
  140. package/lib/types/graph/nodes/flow-control.d.mts +9 -1
  141. package/lib/types/graph/nodes/index.d.cts +1 -0
  142. package/lib/types/graph/nodes/index.d.mts +1 -0
  143. package/lib/types/graph/types.d.cts +15 -1
  144. package/lib/types/graph/types.d.mts +15 -1
  145. package/lib/types/index.d.cts +3 -2
  146. package/lib/types/index.d.mts +3 -2
  147. package/lib/types/namespaces/index.d.cts +8 -0
  148. package/lib/types/namespaces/index.d.mts +8 -0
  149. package/lib/types/namespaces/models/authorization-model.d.cts +4 -0
  150. package/lib/types/namespaces/models/authorization-model.d.mts +4 -0
  151. package/lib/types/namespaces/models/effective-permission.model.d.cts +18 -0
  152. package/lib/types/namespaces/models/effective-permission.model.d.mts +18 -0
  153. package/lib/types/namespaces/models/group-membership.model.d.cts +13 -0
  154. package/lib/types/namespaces/models/group-membership.model.d.mts +13 -0
  155. package/lib/types/namespaces/models/group.model.d.cts +15 -0
  156. package/lib/types/namespaces/models/group.model.d.mts +15 -0
  157. package/lib/types/namespaces/models/index.d.cts +21 -0
  158. package/lib/types/namespaces/models/index.d.mts +21 -0
  159. package/lib/types/namespaces/models/inheritance-block.model.d.cts +15 -0
  160. package/lib/types/namespaces/models/inheritance-block.model.d.mts +15 -0
  161. package/lib/types/namespaces/models/org-unit-closure.model.d.cts +12 -0
  162. package/lib/types/namespaces/models/org-unit-closure.model.d.mts +12 -0
  163. package/lib/types/namespaces/models/org-unit-membership.model.d.cts +15 -0
  164. package/lib/types/namespaces/models/org-unit-membership.model.d.mts +15 -0
  165. package/lib/types/namespaces/models/org-unit-profile.model.d.cts +11 -0
  166. package/lib/types/namespaces/models/org-unit-profile.model.d.mts +11 -0
  167. package/lib/types/namespaces/models/org-unit.model.d.cts +23 -0
  168. package/lib/types/namespaces/models/org-unit.model.d.mts +23 -0
  169. package/lib/types/namespaces/models/permission.model.d.cts +11 -0
  170. package/lib/types/namespaces/models/permission.model.d.mts +11 -0
  171. package/lib/types/namespaces/models/principal.model.d.cts +16 -0
  172. package/lib/types/namespaces/models/principal.model.d.mts +16 -0
  173. package/lib/types/namespaces/models/protected-resource.model.d.cts +21 -0
  174. package/lib/types/namespaces/models/protected-resource.model.d.mts +21 -0
  175. package/lib/types/namespaces/models/resource-grant.model.d.cts +18 -0
  176. package/lib/types/namespaces/models/resource-grant.model.d.mts +18 -0
  177. package/lib/types/namespaces/models/role-assignment.model.d.cts +20 -0
  178. package/lib/types/namespaces/models/role-assignment.model.d.mts +20 -0
  179. package/lib/types/namespaces/models/role-permission.model.d.cts +10 -0
  180. package/lib/types/namespaces/models/role-permission.model.d.mts +10 -0
  181. package/lib/types/namespaces/models/role.model.d.cts +17 -0
  182. package/lib/types/namespaces/models/role.model.d.mts +17 -0
  183. package/lib/types/namespaces/models/storage-binding.model.d.cts +15 -0
  184. package/lib/types/namespaces/models/storage-binding.model.d.mts +15 -0
  185. package/lib/types/namespaces/models/tenant-membership.model.d.cts +13 -0
  186. package/lib/types/namespaces/models/tenant-membership.model.d.mts +13 -0
  187. package/lib/types/namespaces/models/tenant-profile.model.d.cts +11 -0
  188. package/lib/types/namespaces/models/tenant-profile.model.d.mts +11 -0
  189. package/lib/types/namespaces/models/tenant.model.d.cts +19 -0
  190. package/lib/types/namespaces/models/tenant.model.d.mts +19 -0
  191. package/lib/types/namespaces/models/user.model.d.cts +14 -0
  192. package/lib/types/namespaces/models/user.model.d.mts +14 -0
  193. package/lib/types/namespaces/org-based-authorization-system.d.cts +299 -0
  194. package/lib/types/namespaces/org-based-authorization-system.d.mts +299 -0
  195. package/lib/types/namespaces/org-based-authorization-system.models.d.cts +212 -0
  196. package/lib/types/namespaces/org-based-authorization-system.models.d.mts +212 -0
  197. package/lib/types/namespaces/org-based-authorization-system.services.d.cts +217 -0
  198. package/lib/types/namespaces/org-based-authorization-system.services.d.mts +217 -0
  199. package/lib/types/namespaces/services/authz.service.d.cts +10 -0
  200. package/lib/types/namespaces/services/authz.service.d.mts +10 -0
  201. package/lib/types/namespaces/services/bootstrap.service.d.cts +21 -0
  202. package/lib/types/namespaces/services/bootstrap.service.d.mts +21 -0
  203. package/lib/types/namespaces/services/effective-permission.service.d.cts +13 -0
  204. package/lib/types/namespaces/services/effective-permission.service.d.mts +13 -0
  205. package/lib/types/namespaces/services/group-membership.service.d.cts +10 -0
  206. package/lib/types/namespaces/services/group-membership.service.d.mts +10 -0
  207. package/lib/types/namespaces/services/group.service.d.cts +9 -0
  208. package/lib/types/namespaces/services/group.service.d.mts +9 -0
  209. package/lib/types/namespaces/services/index.d.cts +24 -0
  210. package/lib/types/namespaces/services/index.d.mts +24 -0
  211. package/lib/types/namespaces/services/inheritance-block.service.d.cts +10 -0
  212. package/lib/types/namespaces/services/inheritance-block.service.d.mts +10 -0
  213. package/lib/types/namespaces/services/org-unit-closure.service.d.cts +11 -0
  214. package/lib/types/namespaces/services/org-unit-closure.service.d.mts +11 -0
  215. package/lib/types/namespaces/services/org-unit-membership.service.d.cts +11 -0
  216. package/lib/types/namespaces/services/org-unit-membership.service.d.mts +11 -0
  217. package/lib/types/namespaces/services/org-unit-profile.service.d.cts +7 -0
  218. package/lib/types/namespaces/services/org-unit-profile.service.d.mts +7 -0
  219. package/lib/types/namespaces/services/org-unit.service.d.cts +18 -0
  220. package/lib/types/namespaces/services/org-unit.service.d.mts +18 -0
  221. package/lib/types/namespaces/services/permission.service.d.cts +10 -0
  222. package/lib/types/namespaces/services/permission.service.d.mts +10 -0
  223. package/lib/types/namespaces/services/principal.service.d.cts +11 -0
  224. package/lib/types/namespaces/services/principal.service.d.mts +11 -0
  225. package/lib/types/namespaces/services/protected-resource.service.d.cts +13 -0
  226. package/lib/types/namespaces/services/protected-resource.service.d.mts +13 -0
  227. package/lib/types/namespaces/services/resource-grant.service.d.cts +12 -0
  228. package/lib/types/namespaces/services/resource-grant.service.d.mts +12 -0
  229. package/lib/types/namespaces/services/resource-lifecycle.service.d.cts +10 -0
  230. package/lib/types/namespaces/services/resource-lifecycle.service.d.mts +10 -0
  231. package/lib/types/namespaces/services/role-assignment.service.d.cts +12 -0
  232. package/lib/types/namespaces/services/role-assignment.service.d.mts +12 -0
  233. package/lib/types/namespaces/services/role-permission.service.d.cts +12 -0
  234. package/lib/types/namespaces/services/role-permission.service.d.mts +12 -0
  235. package/lib/types/namespaces/services/role.service.d.cts +12 -0
  236. package/lib/types/namespaces/services/role.service.d.mts +12 -0
  237. package/lib/types/namespaces/services/storage-binding.service.d.cts +12 -0
  238. package/lib/types/namespaces/services/storage-binding.service.d.mts +12 -0
  239. package/lib/types/namespaces/services/system-management.service.d.cts +14 -0
  240. package/lib/types/namespaces/services/system-management.service.d.mts +14 -0
  241. package/lib/types/namespaces/services/tenant-membership.service.d.cts +11 -0
  242. package/lib/types/namespaces/services/tenant-membership.service.d.mts +11 -0
  243. package/lib/types/namespaces/services/tenant-profile.service.d.cts +8 -0
  244. package/lib/types/namespaces/services/tenant-profile.service.d.mts +8 -0
  245. package/lib/types/namespaces/services/tenant.service.d.cts +12 -0
  246. package/lib/types/namespaces/services/tenant.service.d.mts +12 -0
  247. package/lib/types/namespaces/services/user.service.d.cts +11 -0
  248. package/lib/types/namespaces/services/user.service.d.mts +11 -0
  249. package/lib/types/namespaces/types.d.cts +230 -0
  250. package/lib/types/namespaces/types.d.mts +230 -0
  251. package/lib/types/namespaces/utils.d.cts +68 -0
  252. package/lib/types/namespaces/utils.d.mts +68 -0
  253. package/lib/types/nest/authService.d.cts +1 -0
  254. package/lib/types/nest/authService.d.mts +1 -0
  255. package/lib/types/nest/graph/GraphExecutionController.d.cts +62 -0
  256. package/lib/types/nest/graph/GraphExecutionController.d.mts +62 -0
  257. package/lib/types/nest/graph/GraphExecutionModule.d.cts +39 -0
  258. package/lib/types/nest/graph/GraphExecutionModule.d.mts +39 -0
  259. package/lib/types/nest/graph/GraphExecutionResultModel.d.cts +46 -0
  260. package/lib/types/nest/graph/GraphExecutionResultModel.d.mts +46 -0
  261. package/lib/types/nest/graph/GraphExecutionResultRepository.d.cts +38 -0
  262. package/lib/types/nest/graph/GraphExecutionResultRepository.d.mts +38 -0
  263. package/lib/types/nest/graph/GraphExecutorRegistryFactory.d.cts +17 -0
  264. package/lib/types/nest/graph/GraphExecutorRegistryFactory.d.mts +17 -0
  265. package/lib/types/nest/graph/index.d.cts +10 -0
  266. package/lib/types/nest/graph/index.d.mts +10 -0
  267. package/lib/types/nest/index.d.cts +1 -0
  268. package/lib/types/nest/index.d.mts +1 -0
  269. package/package.json +16 -5
  270. package/sql/001_constraints.sql +11 -0
  271. package/sql/002_rls.sql +20 -0
  272. package/sql/003_indexes.sql +2 -0
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transactional = exports.AuthorizationError = exports.BaseModelService = exports.REL_CASCADE_INSERT_UPDATE = exports.REL_CASCADE_DEPENDENT = exports.REL_NULLIFY = exports.REL_RESTRICT = void 0;
4
+ exports.buildArangoContext = buildArangoContext;
5
+ exports.buildQdrantFilter = buildQdrantFilter;
6
+ exports.nowIso = nowIso;
7
+ exports.asArray = asArray;
8
+ exports.sameTenant = sameTenant;
9
+ exports.relationMatch = relationMatch;
10
+ exports.lowerSlug = lowerSlug;
11
+ exports.isTimeValid = isTimeValid;
12
+ exports.buildAccessContext = buildAccessContext;
13
+ exports.id = id;
14
+ exports.relationId = relationId;
15
+ const core_1 = require("@decaf-ts/core");
16
+ const types_js_1 = require("./types.cjs");
17
+ exports.REL_RESTRICT = {
18
+ update: core_1.Cascade.NONE,
19
+ delete: core_1.Cascade.NONE,
20
+ nullable: false,
21
+ };
22
+ exports.REL_NULLIFY = {
23
+ update: core_1.Cascade.NONE,
24
+ delete: core_1.Cascade.NONE,
25
+ nullable: true,
26
+ };
27
+ exports.REL_CASCADE_DEPENDENT = {
28
+ update: core_1.Cascade.CASCADE,
29
+ delete: core_1.Cascade.CASCADE,
30
+ nullable: false,
31
+ };
32
+ exports.REL_CASCADE_INSERT_UPDATE = {
33
+ update: core_1.Cascade.CASCADE,
34
+ delete: core_1.Cascade.NONE,
35
+ nullable: false,
36
+ };
37
+ function buildArangoContext(options) {
38
+ return {
39
+ tenantId: options.tenantId,
40
+ principalId: options.principalId,
41
+ permissionKey: options.permissionKey,
42
+ allowedOrgUnitIds: [...options.allowedOrgUnitIds],
43
+ allowedResourceIds: [...options.allowedResourceIds],
44
+ };
45
+ }
46
+ function buildQdrantFilter(options) {
47
+ return {
48
+ must: [
49
+ {
50
+ key: "tenant_id",
51
+ match: { value: options.tenantId },
52
+ },
53
+ {
54
+ should: [
55
+ { key: "org_unit_id", match: { any: options.allowedOrgUnitIds } },
56
+ { key: "protected_resource_id", match: { any: options.allowedResourceIds } },
57
+ { key: "owner_principal_id", match: { value: options.principalId } },
58
+ ],
59
+ },
60
+ ],
61
+ };
62
+ }
63
+ function scopeKey(scopeKind, scopeId) {
64
+ return `${scopeKind}:${scopeId}`;
65
+ }
66
+ function nowIso() {
67
+ return new Date();
68
+ }
69
+ function asArray(value) {
70
+ return value ?? [];
71
+ }
72
+ function sameTenant(rowTenant, tenantId) {
73
+ return relationId(rowTenant) === tenantId;
74
+ }
75
+ function relationMatch(value, target) {
76
+ return target ? relationId(value) === target : false;
77
+ }
78
+ function lowerSlug(value) {
79
+ return (value
80
+ .trim()
81
+ .toLowerCase()
82
+ .replace(/[^a-z0-9]+/g, "-")
83
+ .replace(/^-+|-+$/g, "") || "item");
84
+ }
85
+ function isTimeValid(at, startsAt, expiresAt) {
86
+ const instant = at ?? new Date();
87
+ if (startsAt && instant < startsAt)
88
+ return false;
89
+ if (expiresAt && instant > expiresAt)
90
+ return false;
91
+ return true;
92
+ }
93
+ function buildAccessContext(options) {
94
+ const permissionsByScope = {};
95
+ const allowedOrgUnitIdsByPermission = {};
96
+ for (const permission of options.permissions) {
97
+ const key = scopeKey(permission.scopeKind, permission.scopeId);
98
+ permissionsByScope[key] = permissionsByScope[key] ?? [];
99
+ permissionsByScope[key].push(permission.permissionKey);
100
+ if (permission.scopeKind === types_js_1.ScopeKind.OrgUnit) {
101
+ allowedOrgUnitIdsByPermission[permission.permissionKey] =
102
+ allowedOrgUnitIdsByPermission[permission.permissionKey] ?? [];
103
+ allowedOrgUnitIdsByPermission[permission.permissionKey].push(permission.scopeId);
104
+ }
105
+ }
106
+ return {
107
+ tenantId: options.tenantId,
108
+ principalId: options.principalId,
109
+ permissionsByScope,
110
+ allowedOrgUnitIdsByPermission,
111
+ resourceGrants: options.grants.map((grant) => ({
112
+ resourceId: grant.resourceId,
113
+ permissionKey: grant.permissionKey,
114
+ })),
115
+ };
116
+ }
117
+ class BaseModelService extends core_1.ModelService {
118
+ constructor(clazz) {
119
+ super(clazz);
120
+ }
121
+ newModel(clazz, data) {
122
+ return Object.assign(new clazz(), data);
123
+ }
124
+ async create(data, ...args) {
125
+ return this.repo.create(Object.assign({}, data), ...args);
126
+ }
127
+ async createOne(data, ...args) {
128
+ return this.create(data, ...args);
129
+ }
130
+ async getById(id, ...args) {
131
+ return this.repo.read(id, ...args);
132
+ }
133
+ async updateOne(id, patch, ...args) {
134
+ const existing = await this.repo.read(id, ...args);
135
+ return this.repo.update(Object.assign(existing, patch), ...args);
136
+ }
137
+ async deleteById(id, ...args) {
138
+ await this.repo.delete(id, ...args);
139
+ }
140
+ async findOneBy(key, value, ...args) {
141
+ return this.repo.findOneBy(key, value, ...args);
142
+ }
143
+ async findManyBy(key, value, ...args) {
144
+ return this.repo.select().where({ [key]: value }).execute(...args);
145
+ }
146
+ async listAll(...args) {
147
+ return this.repo.select().execute(...args);
148
+ }
149
+ }
150
+ exports.BaseModelService = BaseModelService;
151
+ function id() {
152
+ return crypto.randomUUID();
153
+ }
154
+ function relationId(value) {
155
+ return typeof value === "string" ? value : value.id;
156
+ }
157
+ var core_2 = require("@decaf-ts/core");
158
+ Object.defineProperty(exports, "AuthorizationError", { enumerable: true, get: function () { return core_2.AuthorizationError; } });
159
+ Object.defineProperty(exports, "transactional", { enumerable: true, get: function () { return core_2.transactional; } });
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmFtZXNwYWNlcy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXNCLE9BQU8sRUFBRSxZQUFZLEVBQWMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RixPQUFPLEVBT0wsU0FBUyxHQUNWLG1CQUFnQjtBQUVqQixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUc7SUFDMUIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0lBQ3BCLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSTtJQUNwQixRQUFRLEVBQUUsS0FBSztDQUNQLENBQUM7QUFFWCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUc7SUFDekIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0lBQ3BCLE1BQU0sRUFBRSxPQUFPLENBQUMsSUFBSTtJQUNwQixRQUFRLEVBQUUsSUFBSTtDQUNOLENBQUM7QUFFWCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRztJQUNuQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU87SUFDdkIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPO0lBQ3ZCLFFBQVEsRUFBRSxLQUFLO0NBQ1AsQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHO0lBQ3ZDLE1BQU0sRUFBRSxPQUFPLENBQUMsT0FBTztJQUN2QixNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUk7SUFDcEIsUUFBUSxFQUFFLEtBQUs7Q0FDUCxDQUFDO0FBRVgsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE9BTWxDO0lBQ0MsT0FBTztRQUNMLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtRQUMxQixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7UUFDaEMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhO1FBQ3BDLGlCQUFpQixFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDakQsa0JBQWtCLEVB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QUksQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBVztRQUMxQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDN0MsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLEVBQUU7SUFDaEIsT0FBTyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDN0IsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBOEI7SUFDdkQsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUN0RCxDQUFDO0FBRUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXV0aG9yaXphdGlvbkVycm9yLCBDYXNjYWRlLCBNb2RlbFNlcnZpY2UsIFJlcG9zaXRvcnkgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHtcbiAgQWNjZXNzQ29udGV4dCxcbiAgQXJhbmdvQXV0aENvbnRleHQsXG4gIEVmZmVjdGl2ZVBlcm1pc3Npb25TbmFwc2hvdCxcbiAgR3JhbnRTbmFwc2hvdCxcbiAgUWRyYW50QXV0aEZpbHRlcixcbiAgUmVzb3VyY2VWaXNpYmlsaXR5LFxuICBTY29wZUtpbmQsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5cbmV4cG9ydCBjb25zdCBSRUxfUkVTVFJJQ1QgPSB7XG4gIHVwZGF0ZTogQ2FzY2FkZS5OT05FLFxuICBkZWxldGU6IENhc2NhZGUuTk9ORSxcbiAgbnVsbGFibGU6IGZhbHNlLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IFJFTF9OVUxMSUZZID0ge1xuICB1cGRhdGU6IENhc2NhZGUuTk9ORSxcbiAgZGVsZXRlOiBDYXNjYWRlLk5PTkUsXG4gIG51bGxhYmxlOiB0cnVlLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IFJFTF9DQVNDQURFX0RFUEVOREVOVCA9IHtcbiAgdXBkYXRlOiBDYXNjYWRlLkNBU0NBREUsXG4gIGRlbGV0ZTogQ2FzY2FkZS5DQVNDQURFLFxuICBudWxsYWJsZTogZmFsc2UsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY29uc3QgUkVMX0NBU0NBREVfSU5TRVJUX1VQREFURSA9IHtcbiAgdXBkYXRlOiBDYXNjYWRlLkNBU0NBREUsXG4gIGRlbGV0ZTogQ2FzY2FkZS5OT05FLFxuICBudWxsYWJsZTogZmFsc2UsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBcmFuZ29Db250ZXh0KG9wdGlvbnM6IHtcbiAgdGVuYW50SWQ6IHN0cmluZztcbiAgcHJpbmNpcGFsSWQ6IHN0cmluZztcbiAgcGVybWlzc2lvbktleTogc3RyaW5nO1xuICBhbGxvd2VkT3JnVW5pdElkczogc3RyaW5nW107XG4gIGFsbG93ZWRSZXNvdXJjZUlkczogc3RyaW5nW107XG59KTogQXJhbmdvQXV0aENvbnRleHQge1xuICByZXR1cm4ge1xuICAgIHRlbmFudElkOiBvcHRpb25zLnRlbmFudElkLFxuICAgIHByaW5jaXBhbElkOiBvcHRpb25zLnByaW5jaXBhbElkLFxuICAgIHBlcm1pc3Npb25LZXk6IG9wdGlvbnMucGVybWlzc2lvbktleSxcbiAgICBhbGxvd2VkT3JnVW5pdElkczogWy4uLm9wdGlvbnMuYWxsb3dlZE9yZ1VuaXRJZHNdLFxuICAgIGFsbG93ZWRSZXNvdXJjZUlkczogWy4uLm9wdGlvbnMuYWxsb3dlZFJlc291cmNlSWRzXSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUWRyYW50RmlsdGVyKG9wdGlvbnM6IHtcbiAgdGVuYW50SWQ6IHN0cmluZztcbiAgcHJpbmNpcGFsSWQ6IHN0cmluZztcbiAgcGVybWlzc2lvbktleTogc3RyaW5nO1xuICBhbGxvd2VkT3JnVW5pdElkczogc3RyaW5nW107XG4gIGFsbG93ZWRSZXNvdXJjZUlkczogc3RyaW5nW107XG59KTogUWRyYW50QXV0aEZpbHRlciB7XG4gIHJldHVybiB7XG4gICAgbXVzdDogW1xuICAgICAge1xuICAgICAgICBrZXk6IFwidGVuYW50X2lkXCIsXG4gICAgICAgIG1hdGNoOiB7IHZhbHVlOiBvcHRpb25zLnRlbmFudElkIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzaG91bGQ6IFtcbiAgICAgICAgICB7IGtleTogXCJvcmdfdW5pdF9pZFwiLCBtYXRjaDogeyBhbnk6IG9wdGlvbnMuYWxsb3dlZE9yZ1VuaXRJZHMgfSB9LFxuICAgICAgICAgIHsga2V5OiBcInByb3RlY3RlZF9yZXNvdXJjZV9pZFwiLCBtYXRjaDogeyBhbnk6IG9wdGlvbnMuYWxsb3dlZFJlc291cmNlSWRzIH0gfSxcbiAgICAgICAgICB7IGtleTogXCJvd25lcl9wcmluY2lwYWxfaWRcIiwgbWF0Y2g6IHsgdmFsdWU6IG9wdGlvbnMucHJpbmNpcGFsSWQgfSB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICB9O1xufVxuXG5mdW5jdGlvbiBzY29wZUtleShzY29wZUtpbmQ6IFNjb3BlS2luZCwgc2NvcGVJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3Njb3BlS2luZH06JHtzY29wZUlkfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3dJc28oKTogRGF0ZSB7XG4gIHJldHVybiBuZXcgRGF0ZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNBcnJheTxUPih2YWx1ZTogVFtdIHwgdW5kZWZpbmVkKTogVFtdIHtcbiAgcmV0dXJuIHZhbHVlID8/IFtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2FtZVRlbmFudChyb3dUZW5hbnQ6IHVua25vd24sIHRlbmFudElkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHJlbGF0aW9uSWQocm93VGVuYW50IGFzIHsgaWQ6IHN0cmluZyB9IHwgc3RyaW5nKSA9PT0gdGVuYW50SWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxhdGlvbk1hdGNoKHZhbHVlOiB1bmtub3duLCB0YXJnZXQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gdGFyZ2V0ID8gcmVsYXRpb25JZCh2YWx1ZSBhcyB7IGlkOiBzdHJpbmcgfSB8IHN0cmluZykgPT09IHRhcmdldCA6IGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbG93ZXJTbHVnKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gKFxuICAgIHZhbHVlXG4gICAgICAudHJpbSgpXG4gICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgLnJlcGxhY2UoL1teYS16MC05XSsvZywgXCItXCIpXG4gICAgICAucmVwbGFjZSgvXi0rfC0rJC9nLCBcIlwiKSB8fCBcIml0ZW1cIlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUaW1lVmFsaWQoYXQ6IERhdGUgfCB1bmRlZmluZWQsIHN0YXJ0c0F0PzogRGF0ZSwgZXhwaXJlc0F0PzogRGF0ZSk6IGJvb2xlYW4ge1xuICBjb25zdCBpbnN0YW50ID0gYXQgPz8gbmV3IERhdGUoKTtcbiAgaWYgKHN0YXJ0c0F0ICYmIGluc3RhbnQgPCBzdGFydHNBdCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoZXhwaXJlc0F0ICYmIGluc3RhbnQgPiBleHBpcmVzQXQpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFjY2Vzc0NvbnRleHQob3B0aW9uczoge1xuICB0ZW5hbnRJZDogc3RyaW5nO1xuICBwcmluY2lwYWxJZDogc3RyaW5nO1xuICBwZXJtaXNzaW9uczogRWZmZWN0aXZlUGVybWlzc2lvblNuYXBzaG90W107XG4gIGdyYW50czogR3JhbnRTbmFwc2hvdFtdO1xufSk6IEFjY2Vzc0NvbnRleHQge1xuICBjb25zdCBwZXJtaXNzaW9uc0J5U2NvcGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuICBjb25zdCBhbGxvd2VkT3JnVW5pdElkc0J5UGVybWlzc2lvbjogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cbiAgZm9yIChjb25zdCBwZXJtaXNzaW9uIG9mIG9wdGlvbnMucGVybWlzc2lvbnMpIHtcbiAgICBjb25zdCBrZXkgPSBzY29wZUtleShwZXJtaXNzaW9uLnNjb3BlS2luZCwgcGVybWlzc2lvbi5zY29wZUlkKTtcbiAgICBwZXJtaXNzaW9uc0J5U2NvcGVba2V5XSA9IHBlcm1pc3Npb25zQnlTY29wZVtrZXldID8/IFtdO1xuICAgIHBlcm1pc3Npb25zQnlTY29wZVtrZXldLnB1c2gocGVybWlzc2lvbi5wZXJtaXNzaW9uS2V5KTtcbiAgICBpZiAocGVybWlzc2lvbi5zY29wZUtpbmQgPT09IFNjb3BlS2luZC5PcmdVbml0KSB7XG4gICAgICBhbGxvd2VkT3JnVW5pdElkc0J5UGVybWlzc2lvbltwZXJtaXNzaW9uLnBlcm1pc3Npb25LZXldID1cbiAgICAgICAgYWxsb3dlZE9yZ1VuaXRJZHNCeVBlcm1pc3Npb25bcGVybWlzc2lvbi5wZXJtaXNzaW9uS2V5XSA/PyBbXTtcbiAgICAgIGFsbG93ZWRPcmdVbml0SWRzQnlQZXJtaXNzaW9uW3Blcm1pc3Npb24ucGVybWlzc2lvbktleV0ucHVzaChwZXJtaXNzaW9uLnNjb3BlSWQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdGVuYW50SWQ6IG9wdGlvbnMudGVuYW50SWQsXG4gICAgcHJpbmNpcGFsSWQ6IG9wdGlvbnMucHJpbmNpcGFsSWQsXG4gICAgcGVybWlzc2lvbnNCeVNjb3BlLFxuICAgIGFsbG93ZWRPcmdVbml0SWRzQnlQZXJtaXNzaW9uLFxuICAgICAgcmVzb3VyY2VHcmFudHM6IG9wdGlvbnMuZ3JhbnRzLm1hcCgoZ3JhbnQpID0+ICh7XG4gICAgICAgIHJlc291cmNlSWQ6IGdyYW50LnJlc291cmNlSWQsXG4gICAgICAgIHBlcm1pc3Npb25LZXk6IGdyYW50LnBlcm1pc3Npb25LZXksXG4gICAgICB9KSksXG4gIH07XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlTW9kZWxTZXJ2aWNlPE0gZXh0ZW5kcyBNb2RlbDxib29sZWFuPiAmIHsgaWQ6IHN0cmluZyB9PiBleHRlbmRzIE1vZGVsU2VydmljZTxcbiAgTSxcbiAgUmVwb3NpdG9yeTxNLCBhbnk+XG4+IHtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGNsYXp6OiBuZXcgKCkgPT4gTSkge1xuICAgIHN1cGVyKGNsYXp6KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBuZXdNb2RlbDxUPihjbGF6ejogbmV3ICgpID0+IFQsIGRhdGE6IFBhcnRpYWw8VD4pOiBUIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgY2xhenooKSBhcyBvYmplY3QsIGRhdGEgYXMgb2JqZWN0KSBhcyBUO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlKGRhdGE6IFBhcnRpYWw8TT4sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNPiB7XG4gICAgcmV0dXJuIHRoaXMucmVwby5jcmVhdGUoT2JqZWN0LmFzc2lnbih7fSBhcyBNLCBkYXRhIGFzIG9iamVjdCksIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlT25lKGRhdGE6IFBhcnRpYWw8TT4sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNPiB7XG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlKGRhdGEsIC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgZ2V0QnlJZChpZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TT4ge1xuICAgIHJldHVybiB0aGlzLnJlcG8ucmVhZChpZCwgLi4uYXJncyk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVPbmUoaWQ6IHN0cmluZywgcGF0Y2g6IFBhcnRpYWw8TT4sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNPiB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLnJlcG8ucmVhZChpZCwgLi4uYXJncyk7XG4gICAgcmV0dXJuIHRoaXMucmVwby51cGRhdGUoT2JqZWN0LmFzc2lnbihleGlzdGluZywgcGF0Y2gpLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUJ5SWQoaWQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLnJlcG8uZGVsZXRlKGlkLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmRPbmVCeTxLIGV4dGVuZHMga2V5b2YgTSAmIHN0cmluZz4oa2V5OiBLLCB2YWx1ZTogTVtLXSwgLi4uYXJnczogYW55W10pOiBQcm9taXNlPE0+IHtcbiAgICByZXR1cm4gdGhpcy5yZXBvLmZpbmRPbmVCeShrZXksIHZhbHVlLCAuLi5hcmdzKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmRNYW55Qnk8SyBleHRlbmRzIGtleW9mIE0gJiBzdHJpbmc+KGtleTogSywgdmFsdWU6IE1bS10sIC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTxNW10+IHtcbiAgICByZXR1cm4gdGhpcy5yZXBvLnNlbGVjdCgpLndoZXJlKHsgW2tleV06IHZhbHVlIH0gYXMgYW55KS5leGVjdXRlKC4uLmFyZ3MpO1xuICB9XG5cbiAgYXN5bmMgbGlzdEFsbCguLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8TVtdPiB7XG4gICAgcmV0dXJuIHRoaXMucmVwby5zZWxlY3QoKS5leGVjdXRlKC4uLmFyZ3MpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZCgpOiBzdHJpbmcge1xuICByZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbGF0aW9uSWQodmFsdWU6IHN0cmluZyB8IHsgaWQ6IHN0cmluZyB9KTogc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUuaWQ7XG59XG5cbmV4cG9ydCB7IEF1dGhvcml6YXRpb25FcnJvciwgdHJhbnNhY3Rpb25hbCB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuIl19
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFzQkEsZ0RBUUM7QUFDRCw4Q0FnQkM7QUFJRCx3QkFFQztBQUNELDBCQUVDO0FBQ0QsZ0NBRUM7QUFDRCxzQ0FFQztBQUNELDhCQU1DO0FBQ0Qsa0NBT0M7QUFDRCxnREF1QkM7QUFrQ0QsZ0JBRUM7QUFDRCxnQ0FFQztBQTVJRCx5Q0FBdUQ7QUFDdkQseUNBQXdDO0FBQzNCLFFBQUEsWUFBWSxHQUFHO0lBQ3hCLE1BQU0sRUFBRSxjQUFPLENBQUMsSUFBSTtJQUNwQixNQUFNLEVBQUUsY0FBTyxDQUFDLElBQUk7SUFDcEIsUUFBUSxFQUFFLEtBQUs7Q0FDbEIsQ0FBQztBQUNXLFFBQUEsV0FBVyxHQUFHO0lBQ3ZCLE1BQU0sRUFBRSxjQUFPLENBQUMsSUFBSTtJQUNwQixNQUFNLEVBQUUsY0FBTyxDQUFDLElBQUk7SUFDcEIsUUFBUSxFQUFFLElBQUk7Q0FDakIsQ0FBQztBQUNXLFFBQUEscUJBQXFCLEdBQUc7SUFDakMsTUFBTSxFQUFFLGNBQU8sQ0FBQyxPQUFPO0lBQ3ZCLE1BQU0sRUFBRSxjQUFPLENBQUMsT0FBTztJQUN2QixRQUFRLEVBQUUsS0FBSztDQUNsQixDQUFDO0FBQ1csUUFBQSx5QkFBeUIsR0FBRztJQUNyQyxNQUFNLEVBQUUsY0FBTyxDQUFDLE9BQU87SUFDdkIsTUFBTSxFQUFFLGNBQU8sQ0FBQyxJQUFJO0lBQ3BCLFFBQVEsRUFBRSxLQUFLO0NBQ2xCLENBQUM7QUFDRixTQUFnQixrQkFBa0IsQ0FBQyxPQUFPO0lBQ3RDLE9BQU87UUFDSCxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7UUFDMUIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYTtRQUNwQyxpQkFBaUIsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBQ2pELGtCQUFr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QUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUk7UUFDOUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNuRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUNELEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSTtRQUN4QixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFDRCxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJO1FBQy9CLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFDRCxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUNELEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0NBQ0o7QUFoQ0QsNENBZ0NDO0FBQ0QsU0FBZ0IsRUFBRTtJQUNkLE9BQU8sTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQy9CLENBQUM7QUFDRCxTQUFnQixVQUFVLENBQUMsS0FBSztJQUM1QixPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ3hELENBQUM7QUFDRCx1Q0FBbUU7QUFBMUQsMEdBQUEsa0JBQWtCLE9BQUE7QUFBRSxxR0FBQSxhQUFhLE9BQUE7QUFDMUMsc3NjQUFzc2MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDYXNjYWRlLCBNb2RlbFNlcnZpY2UgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IFNjb3BlS2luZCwgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuZXhwb3J0IGNvbnN0IFJFTF9SRVNUUklDVCA9IHtcbiAgICB1cGRhdGU6IENhc2NhZGUuTk9ORSxcbiAgICBkZWxldGU6IENhc2NhZGUuTk9ORSxcbiAgICBudWxsYWJsZTogZmFsc2UsXG59O1xuZXhwb3J0IGNvbnN0IFJFTF9OVUxMSUZZID0ge1xuICAgIHVwZGF0ZTogQ2FzY2FkZS5OT05FLFxuICAgIGRlbGV0ZTogQ2FzY2FkZS5OT05FLFxuICAgIG51bGxhYmxlOiB0cnVlLFxufTtcbmV4cG9ydCBjb25zdCBSRUxfQ0FTQ0FERV9ERVBFTkRFTlQgPSB7XG4gICAgdXBkYXRlOiBDYXNjYWRlLkNBU0NBREUsXG4gICAgZGVsZXRlOiBDYXNjYWRlLkNBU0NBREUsXG4gICAgbnVsbGFibGU6IGZhbHNlLFxufTtcbmV4cG9ydCBjb25zdCBSRUxfQ0FTQ0FERV9JTlNFUlRfVVBEQVRFID0ge1xuICAgIHVwZGF0ZTogQ2FzY2FkZS5DQVNDQURFLFxuICAgIGRlbGV0ZTogQ2FzY2FkZS5OT05FLFxuICAgIG51bGxhYmxlOiBmYWxzZSxcbn07XG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBcmFuZ29Db250ZXh0KG9wdGlvbnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0ZW5hbnRJZDogb3B0aW9ucy50ZW5hbnRJZCxcbiAgICAgICAgcHJpbmNpcGFsSWQ6IG9wdGlvbnMucHJpbmNpcGFsSWQsXG4gICAgICAgIHBlcm1pc3Npb25LZXk6IG9wdGlvbnMucGVybWlzc2lvbktleSxcbiAgICAgICAgYWxsb3dlZE9yZ1VuaXRJZHM6IFsuLi5vcHRpb25zLmFsbG93ZWRPcmdVbml0SWRzXSxcbiAgICAgICAgYWxsb3dlZFJlc291cmNlSWRzOiBbLi4ub3B0aW9ucy5hbGxvd2VkUmVzb3VyY2VJZHNdLFxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gYnVpbGRRZHJhbnRGaWx0ZXIob3B0aW9ucykge1xuICAgIHJldHVybiB7XG4gICAgICAgIG11c3Q6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBrZXk6IFwidGVuYW50X2lkXCIsXG4gICAgICAgICAgICAgICAgbWF0Y2g6IHsgdmFsdWU6IG9wdGlvbnMudGVuYW50SWQgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2hvdWxkOiBbXG4gICAgICAgICAgICAgICAgICAgIHsga2V5OiBcIm9yZ191bml0X2lkXCIsIG1hdGNoOiB7IGFueTogb3B0aW9ucy5hbGxvd2VkT3JnVW5pdElkcyB9IH0sXG4gICAgICAgICAgICAgICAgICAgIHsga2V5OiBcInByb3RlY3RlZF9yZXNvdXJjZV9pZFwiLCBtYXRjaDogeyBhbnk6IG9wdGlvbnMuYWxsb3dlZFJlc291cmNlSWRzIH0gfSxcbiAgICAgICAgICAgICAgICAgICAgeyBrZXk6IFwib3duZXJfcHJpbmNpcGFsX2lkXCIsIG1hdGNoOiB7IHZhbHVlOiBvcHRpb25zLnByaW5jaXBhbElkIH0gfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICB9O1xufVxuZnVuY3Rpb24gc2NvcGVLZXkoc2NvcGVLaW5kLCBzY29wZUlkKSB7XG4gICAgcmV0dXJuIGAke3Njb3BlS2luZH06JHtzY29wZUlkfWA7XG59XG5leHBvcnQgZnVuY3Rpb24gbm93SXNvKCkge1xuICAgIHJldHVybiBuZXcgRGF0ZSgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFzQXJyYXkodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgPz8gW107XG59XG5leHBvcnQgZnVuY3Rpb24gc2FtZVRlbmFudChyb3dUZW5hbnQsIHRlbmFudElkKSB7XG4gICAgcmV0dXJuIHJlbGF0aW9uSWQocm93VGVuYW50KSA9PT0gdGVuYW50SWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVsYXRpb25NYXRjaCh2YWx1ZSwgdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRhcmdldCA/IHJlbGF0aW9uSWQodmFsdWUpID09PSB0YXJnZXQgOiBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBsb3dlclNsdWcodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlXG4gICAgICAgIC50cmltKClcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnJlcGxhY2UoL1teYS16MC05XSsvZywgXCItXCIpXG4gICAgICAgIC5yZXBsYWNlKC9eLSt8LSskL2csIFwiXCIpIHx8IFwiaXRlbVwiKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1RpbWVWYWxpZChhdCwgc3RhcnRzQXQsIGV4cGlyZXNBdCkge1xuICAgIGNvbnN0IGluc3RhbnQgPSBhdCA/PyBuZXcgRGF0ZSgpO1xuICAgIGlmIChzdGFydHNBdCAmJiBpbnN0YW50IDwgc3RhcnRzQXQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoZXhwaXJlc0F0ICYmIGluc3RhbnQgPiBleHBpcmVzQXQpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFjY2Vzc0NvbnRleHQob3B0aW9ucykge1xuICAgIGNvbnN0IHBlcm1pc3Npb25zQnlTY29wZSA9IHt9O1xuICAgIGNvbnN0IGFsbG93ZWRPcmdVbml0SWRzQnlQZXJtaXNzaW9uID0ge307XG4gICAgZm9yIChjb25zdCBwZXJtaXNzaW9uIG9mIG9wdGlvbnMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gc2NvcGVLZXkocGVybWlzc2lvbi5zY29wZUtpbmQsIHBlcm1pc3Npb24uc2NvcGVJZCk7XG4gICAgICAgIHBlcm1pc3Npb25zQnlTY29wZVtrZXldID0gcGVybWlzc2lvbnNCeVNjb3BlW2tleV0gPz8gW107XG4gICAgICAgIHBlcm1pc3Npb25zQnlTY29wZVtrZXldLnB1c2gocGVybWlzc2lvbi5wZXJtaXNzaW9uS2V5KTtcbiAgICAgICAgaWYgKHBlcm1pc3Npb24uc2NvcGVLaW5kID09PSBTY29wZUtpbmQuT3JnVW5pdCkge1xuICAgICAgICAgICAgYWxsb3dlZE9yZ1VuaXRJZHNCeVBlcm1pc3Npb25bcGVybWlzc2lvbi5wZXJtaXNzaW9uS2V5XSA9XG4gICAgICAgICAgICAgICAgYWxsb3dlZE9yZ1VuaXRJZHNCeVBlcm1pc3Npb25bcGVybWlzc2lvbi5wZXJtaXNzaW9uS2V5XSA/PyBbXTtcbiAgICAgICAgICAgIGFsbG93ZWRPcmdVbml0SWRzQnlQZXJtaXNzaW9uW3Blcm1pc3Npb24ucGVybWlzc2lvbktleV0ucHVzaChwZXJtaXNzaW9uLnNjb3BlSWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHRlbmFudElkOiBvcHRpb25zLnRlbmFudElkLFxuICAgICAgICBwcmluY2lwYWxJZDogb3B0aW9ucy5wcmluY2lwYWxJZCxcbiAgICAgICAgcGVybWlzc2lvbnNCeVNjb3BlLFxuICAgICAgICBhbGxvd2VkT3JnVW5pdElkc0J5UGVybWlzc2lvbixcbiAgICAgICAgcmVzb3VyY2VHcmFudHM6IG9wdGlvbnMuZ3JhbnRzLm1hcCgoZ3JhbnQpID0+ICh7XG4gICAgICAgICAgICByZXNvdXJjZUlkOiBncmFudC5yZXNvdXJjZUlkLFxuICAgICAgICAgICAgcGVybWlzc2lvbktleTogZ3JhbnQucGVybWlzc2lvbktleSxcbiAgICAgICAgfSkpLFxuICAgIH07XG59XG5leHBvcnQgY2xhc3MgQmFzZU1vZGVsU2VydmljZSBleHRlbmRzIE1vZGVsU2VydmljZSB7XG4gICAgY29uc3RydWN0b3IoY2xhenopIHtcbiAgICAgICAgc3VwZXIoY2xhenopO1xuICAgIH1cbiAgICBuZXdNb2RlbChjbGF6eiwgZGF0YSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgY2xhenooKSwgZGF0YSk7XG4gICAgfVxuICAgIGFzeW5jIGNyZWF0ZShkYXRhLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcG8uY3JlYXRlKE9iamVjdC5hc3NpZ24oe30sIGRhdGEpLCAuLi5hcmdzKTtcbiAgICB9XG4gICAgYXN5bmMgY3JlYXRlT25lKGRhdGEsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKGRhdGEsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBhc3luYyBnZXRCeUlkKGlkLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcG8ucmVhZChpZCwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIHVwZGF0ZU9uZShpZCwgcGF0Y2gsIC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCB0aGlzLnJlcG8ucmVhZChpZCwgLi4uYXJncyk7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcG8udXBkYXRlKE9iamVjdC5hc3NpZ24oZXhpc3RpbmcsIHBhdGNoKSwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIGRlbGV0ZUJ5SWQoaWQsIC4uLmFyZ3MpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5yZXBvLmRlbGV0ZShpZCwgLi4uYXJncyk7XG4gICAgfVxuICAgIGFzeW5jIGZpbmRPbmVCeShrZXksIHZhbHVlLCAuLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcG8uZmluZE9uZUJ5KGtleSwgdmFsdWUsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICBhc3luYyBmaW5kTWFueUJ5KGtleSwgdmFsdWUsIC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwby5zZWxlY3QoKS53aGVyZSh7IFtrZXldOiB2YWx1ZSB9KS5leGVjdXRlKC4uLmFyZ3MpO1xuICAgIH1cbiAgICBhc3luYyBsaXN0QWxsKC4uLmFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVwby5zZWxlY3QoKS5leGVjdXRlKC4uLmFyZ3MpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBpZCgpIHtcbiAgICByZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZWxhdGlvbklkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUuaWQ7XG59XG5leHBvcnQgeyBBdXRob3JpemF0aW9uRXJyb3IsIHRyYW5zYWN0aW9uYWwgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRYUnBiSE11YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk4dUxpOXpjbU12Ym1GdFpYTndZV05sY3k5MWRHbHNjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFTeFBRVUZQTEVWQlFYTkNMRTlCUVU4c1JVRkJSU3haUVVGWkxFVkJRV01zVFVGQlRTeG5Ra0ZCWjBJc1EwRkJRenRCUVVWMlJpeFBRVUZQTEVWQlQwd3NVMEZCVXl4SFFVTldMRzFDUVVGblFqdEJRVVZxUWl4TlFVRk5MRU5CUVVNc1RVRkJUU3haUVVGWkxFZEJRVWM3U1VGRE1VSXNUVUZCVFN4RlFVRkZMRTlCUVU4c1EwRkJReXhKUVVGSk8wbEJRM0JDTEUxQlFVMHNSVUZCUlN4UFFVRlBMRU5CUVVNc1NVRkJTVHRKUVVOd1FpeFJRVUZSTEVWQlFVVXNTMEZCU3p0RFFVTlFMRU5CUVVNN1FVRkZXQ3hOUVVGTkxFTkJRVU1zVFVGQlRTeFhRVUZYTEVkQlFVYzdTVUZEZWtJc1RVRkJUU3hGUVVGRkxFOUJRVThzUTBGQlF5eEpRVUZKTzBsQlEzQkNMRTFCUVUwc1JVRkJSU3hQUVVGUExFTkJRVU1zU1VGQlNUdEpRVU53UWl4UlFVRlJMRVZCUVVVc1NVRkJTVHREUVVOT0xFTkJRVU03UVVGRldDeE5RVUZOTEVOQlFVTXNUVUZCVFN4eFFrRkJjVUlzUjBGQlJ6dEpRVU51UXl4TlFVRk5MRVZCUVVVc1QwRkJUeXhEUVVGRExFOUJRVTg3U1VGRGRrSXNUVUZCVFN4RlFVRkZMRTlCUVU4c1EwRkJReXhQUVVGUE8wbEJRM1pDTEZGQlFWRXNSVUZCUlN4TFFVRkxPME5CUTFBc1EwRkJRenRCUVVWWUxFMUJRVTBzUTBGQlF5eE5RVUZOTEhsQ1FVRjVRaXhIUVVGSE8wbEJRM1pETEUxQlFVMHNSVUZCUlN4UFFVRlBMRU5CUVVNc1QwRkJUenRKUVVOMlFpeE5RVUZOTEVWQlFVVXNUMEZCVHl4RFFVRkRMRWxCUVVrN1NVRkRjRUlzVVVGQlVTeEZRVUZGTEV0QlFVczdRMEZEVUN4RFFVRkRPMEZCUlZnc1RVRkJUU3hWUVVGVkxHdENRVUZyUWl4RFFVRkRMRTlCVFd4RE8wbEJRME1zVDBGQlR6dFJRVU5NTEZGQlFWRXNSVUZCUlN4UFFVRlBMRU5CUVVNc1VVRkJVVHRSUVVNeFFpeFhRVUZYTEVWQlFVVXNUMEZCVHl4RFFVRkRMRmRCUVZjN1VVRkRhRU1zWVVGQllTeEZRVUZGTEU5QlFVOHNRMEZCUXl4aFFVRmhPMUZCUTNCRExHbENRVUZwUWl4RlFVRkZMRU5CUVVNc1IwRkJSeXhQUVVGUExFTkJRVU1zYVVKQlFXbENMRU5CUVVNN1VVRkRha1FzYTBKQlFXdENMRVZCUVVVc1EwRkJReXhIUVVGSExFOUJRVThzUTBGQlF5eHJRa0ZCYTBJc1EwRkJRenRMUVVOd1JDeERRVUZETzBGQlEwb3NRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3hwUWtGQmFVSXNRMEZCUXl4UFFVMXFRenRKUVVORExFOUJRVTg3VVVGRFRDeEpRVUZKTEVWQlFVVTdXVUZEU2p0blFrRkRSU3hIUVVGSExFVkJRVVVzVjBGQlZ6dG5Ra0ZEYUVJc1MwRkJTeXhGUVVGRkxFVkJRVVVzUzBGQlN5eEZRVUZGTEU5QlFVOHNRMEZCUXl4UlFVRlJMRVZCUVVVN1lVRkRia003V1VGRFJEdG5Ra0ZEUlN4TlFVRk5MRVZCUVVVN2IwSkJRMDRzUlVGQlJTeEhRVUZITEVWQlFVVXNZVUZCWVN4RlFVRkZMRXRCUVVzc1JVRkJSU3hGUVVGRkxFZEJRVWNzUlVGQlJTeFBRVUZQTEVOQlFVTXNhVUpCUVdsQ0xFVkJRVVVzUlVGQlJUdHZRa0ZEYWtVc1JVRkJSU3hIUVVGSExFVkJRVVVzZFVKQlFYVkNMRVZCUVVVc1MwRkJTeXhGUVVGRkxFVkJRVVVzUjBGQlJ5eEZRVUZGTEU5QlFVOHNRMEZCUXl4clFrRkJhMElzUlVGQlJTeEZRVUZGTzI5Q1FVTTFSU3hGUVVGRkxFZEJRVWNzUlVGQlJTeHZRa0ZCYjBJc1JVRkJSU3hMUVVGTExFVkJRVVVzUlVGQlJTeExRVUZMTEVWQlFVVXNUMEZCVHl4RFFVRkRMRmRCUVZjc1JVRkJSU3hGUVVGRk8ybENRVU55UlR0aFFVTkdPMU5CUTBZN1MwRkRSaXhEUVVGRE8wRkJRMG9zUTBGQlF6dEJRVVZFTEZOQlFWTXNVVUZCVVN4RFFVRkRMRk5CUVc5Q0xFVkJRVVVzVDBGQlpUdEpRVU55UkN4UFFVRlBMRWRCUVVjc1UwRkJVeXhKUVVGSkxFOUJRVThzUlVGQlJTeERRVUZETzBGQlEyNURMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzVFVGQlRUdEpRVU53UWl4UFFVRlBMRWxCUVVrc1NVRkJTU3hGUVVGRkxFTkJRVU03UVVGRGNFSXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3hQUVVGUExFTkJRVWtzUzBGQmMwSTdTVUZETDBNc1QwRkJUeXhMUVVGTExFbEJRVWtzUlVGQlJTeERRVUZETzBGQlEzSkNMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzVlVGQlZTeERRVUZETEZOQlFXdENMRVZCUVVVc1VVRkJaMEk3U1VGRE4wUXNUMEZCVHl4VlFVRlZMRU5CUVVNc1UwRkJiME1zUTBGQlF5eExRVUZMTEZGQlFWRXNRMEZCUXp0QlFVTjJSU3hEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEdGQlFXRXNRMEZCUXl4TFFVRmpMRVZCUVVVc1RVRkJNRUk3U1VGRGRFVXNUMEZCVHl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExGVkJRVlVzUTBGQlF5eExRVUZuUXl4RFFVRkRMRXRCUVVzc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTTdRVUZEYkVZc1EwRkJRenRCUVVWRUxFMUJRVTBzVlVGQlZTeFRRVUZUTEVOQlFVTXNTMEZCWVR0SlFVTnlReXhQUVVGUExFTkJRMHdzUzBGQlN6dFRRVU5HTEVsQlFVa3NSVUZCUlR0VFFVTk9MRmRCUVZjc1JVRkJSVHRUUVVOaUxFOUJRVThzUTBGQlF5eGhRVUZoTEVWQlFVVXNSMEZCUnl4RFFVRkRPMU5CUXpOQ0xFOUJRVThzUTBGQlF5eFZRVUZWTEVWQlFVVXNSVUZCUlN4RFFVRkRMRWxCUVVrc1RVRkJUU3hEUVVOeVF5eERRVUZETzBGQlEwb3NRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3hYUVVGWExFTkJRVU1zUlVGQmIwSXNSVUZCUlN4UlFVRmxMRVZCUVVVc1UwRkJaMEk3U1VGRGFrWXNUVUZCVFN4UFFVRlBMRWRCUVVjc1JVRkJSU3hKUVVGSkxFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTTdTVUZEYWtNc1NVRkJTU3hSUVVGUkxFbEJRVWtzVDBGQlR5eEhRVUZITEZGQlFWRTdVVUZCUlN4UFFVRlBMRXRCUVVzc1EwRkJRenRKUVVOcVJDeEpRVUZKTEZOQlFWTXNTVUZCU1N4UFFVRlBMRWRCUVVjc1UwRkJVenRSUVVGRkxFOUJRVThzUzBGQlN5eERRVUZETzBsQlEyNUVMRTlCUVU4c1NVRkJTU3hEUVVGRE8wRkJRMlFzUTBGQlF6dEJRVVZFTEUxQlFVMHNWVUZCVlN4clFrRkJhMElzUTBGQlF5eFBRVXRzUXp0SlFVTkRMRTFCUVUwc2EwSkJRV3RDTEVkQlFUWkNMRVZCUVVVc1EwRkJRenRKUVVONFJDeE5RVUZOTERaQ1FVRTJRaXhIUVVFMlFpeEZRVUZGTEVOQlFVTTdTVUZGYmtVc1MwRkJTeXhOUVVGTkxGVkJRVlVzU1VGQlNTeFBRVUZQTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNN1VVRkROME1zVFVGQlRTeEhRVUZITEVkQlFVY3NVVUZCVVN4RFFVRkRMRlZCUVZVc1EwRkJReXhUUVVGVExFVkJRVVVzVlVGQlZTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUXk5RUxHdENRVUZyUWl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExHdENRVUZyUWl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dFJRVU40UkN4clFrRkJhMElzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExHRkJRV0VzUTBGQlF5eERRVUZETzFGQlEzWkVMRWxCUVVrc1ZVRkJWU3hEUVVGRExGTkJRVk1zUzBGQlN5eFRRVUZUTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNN1dVRkRMME1zTmtKQlFUWkNMRU5CUVVNc1ZVRkJWU3hEUVVGRExHRkJRV0VzUTBGQlF6dG5Ra0ZEY2tRc05rSkJRVFpDTEVOQlFVTXNWVUZCVlN4RFFVRkRMR0ZCUVdFc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dFpRVU5vUlN3MlFrRkJOa0lzUTBGQlF5eFZRVUZWTEVOQlFVTXNZVUZCWVN4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTnVSaXhEUVVGRE8wbEJRMGdzUTBGQlF6dEpRVVZFTEU5QlFVODdVVUZEVEN4UlFVRlJMRVZCUVVVc1QwRkJUeXhEUVVGRExGRkJRVkU3VVVGRE1VSXNWMEZCVnl4RlFVRkZMRTlCUVU4c1EwRkJReXhYUVVGWE8xRkJRMmhETEd0Q1FVRnJRanRSUVVOc1FpdzJRa0ZCTmtJN1VVRkRNMElzWTBGQll5eEZRVUZGTEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPMWxCUXpkRExGVkJRVlVzUlVGQlJTeExRVUZMTEVOQlFVTXNWVUZCVlR0WlFVTTFRaXhoUVVGaExFVkJRVVVzUzBGQlN5eERRVUZETEdGQlFXRTdVMEZEYmtNc1EwRkJReXhEUVVGRE8wdEJRMDRzUTBGQlF6dEJRVU5LTEVOQlFVTTdRVUZGUkN4TlFVRk5MRTlCUVdkQ0xHZENRVUUwUkN4VFFVRlJMRmxCUjNwR08wbEJRME1zV1VGQmMwSXNTMEZCYTBJN1VVRkRkRU1zUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMGxCUTJZc1EwRkJRenRKUVVWVExGRkJRVkVzUTBGQlNTeExRVUZyUWl4RlFVRkZMRWxCUVdkQ08xRkJRM2hFTEU5QlFVOHNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFdEJRVXNzUlVGQldTeEZRVUZGTEVsQlFXTXNRMEZCVFN4RFFVRkRPMGxCUTI1RkxFTkJRVU03U1VGRlJDeExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVdkQ0xFVkJRVVVzUjBGQlJ5eEpRVUZYTzFGQlF6TkRMRTlCUVU4c1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGUExFVkJRVVVzU1VGQll5eERRVUZETEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVNelJTeERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGblFpeEZRVUZGTEVkQlFVY3NTVUZCVnp0UlFVTTVReXhQUVVGUExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRGNFTXNRMEZCUXp0SlFVVkVMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUlVGQlZTeEZRVUZGTEVkQlFVY3NTVUZCVnp0UlFVTjBReXhQUVVGUExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzBsQlEzSkRMRU5CUVVNN1NVRkZSQ3hMUVVGTExFTkJRVU1zVTBGQlV5eERRVUZETEVWQlFWVXNSVUZCUlN4TFFVRnBRaXhGUVVGRkxFZEJRVWNzU1VGQlZ6dFJRVU16UkN4TlFVRk5MRkZCUVZFc1IwRkJSeXhOUVVGTkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzFGQlEyNUVMRTlCUVU4c1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhSUVVGUkxFVkJRVVVzUzBGQlN5eERRVUZETEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVOdVJTeERRVUZETzBsQlJVUXNTMEZCU3l4RFFVRkRMRlZCUVZVc1EwRkJReXhGUVVGVkxFVkJRVVVzUjBGQlJ5eEpRVUZYTzFGQlEzcERMRTFCUVUwc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRGRFTXNRMEZCUXp0SlFVVkVMRXRCUVVzc1EwRkJReXhUUVVGVExFTkJRVFpDTEVkQlFVMHNSVUZCUlN4TFFVRlhMRVZCUVVVc1IwRkJSeXhKUVVGWE8xRkJRemRGTEU5QlFVOHNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eEZRVUZGTEV0QlFVc3NSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRMnhFTEVOQlFVTTdTVUZGUkN4TFFVRkxMRU5CUVVNc1ZVRkJWU3hEUVVFMlFpeEhRVUZOTEVWQlFVVXNTMEZCVnl4RlFVRkZMRWRCUVVjc1NVRkJWenRSUVVNNVJTeFBRVUZQTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hMUVVGTExFVkJRVk1zUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRelZGTEVOQlFVTTdTVUZGUkN4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzU1VGQlZ6dFJRVU14UWl4UFFVRlBMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRE4wTXNRMEZCUXp0RFFVTkdPMEZCUlVRc1RVRkJUU3hWUVVGVkxFVkJRVVU3U1VGRGFFSXNUMEZCVHl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hGUVVGRkxFTkJRVU03UVVGRE4wSXNRMEZCUXp0QlFVVkVMRTFCUVUwc1ZVRkJWU3hWUVVGVkxFTkJRVU1zUzBGQk9FSTdTVUZEZGtRc1QwRkJUeXhQUVVGUExFdEJRVXNzUzBGQlN5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXp0QlFVTjBSQ3hEUVVGRE8wRkJSVVFzVDBGQlR5eEZRVUZGTEd0Q1FVRnJRaXhGUVVGRkxHRkJRV0VzUlVGQlJTeE5RVUZOTEdkQ1FVRm5RaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIc2dRWFYwYUc5eWFYcGhkR2x2YmtWeWNtOXlMQ0JEWVhOallXUmxMQ0JOYjJSbGJGTmxjblpwWTJVc0lGSmxjRzl6YVhSdmNua2dmU0JtY205dElGd2lRR1JsWTJGbUxYUnpMMk52Y21WY0lqdGNibWx0Y0c5eWRDQjdJRTF2WkdWc0lIMGdabkp2YlNCY0lrQmtaV05oWmkxMGN5OWtaV052Y21GMGIzSXRkbUZzYVdSaGRHbHZibHdpTzF4dWFXMXdiM0owSUh0Y2JpQWdRV05qWlhOelEyOXVkR1Y0ZEN4Y2JpQWdRWEpoYm1kdlFYVjBhRU52Ym5SbGVIUXNYRzRnSUVWbVptVmpkR2wyWlZCbGNtMXBjM05wYjI1VGJtRndjMmh2ZEN4Y2JpQWdSM0poYm5SVGJtRndjMmh2ZEN4Y2JpQWdVV1J5WVc1MFFYVjBhRVpwYkhSbGNpeGNiaUFnVW1WemIzVnlZMlZXYVhOcFltbHNhWFI1TEZ4dUlDQlRZMjl3WlV0cGJtUXNYRzU5SUdaeWIyMGdYQ0l1TDNSNWNHVnpYQ0k3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JTUlV4ZlVrVlRWRkpKUTFRZ1BTQjdYRzRnSUhWd1pHRjBaVG9nUTJGelkyRmtaUzVPVDA1RkxGeHVJQ0JrWld4bGRHVTZJRU5oYzJOaFpHVXVUazlPUlN4Y2JpQWdiblZzYkdGaWJHVTZJR1poYkhObExGeHVmU0JoY3lCamIyNXpkRHRjYmx4dVpYaHdiM0owSUdOdmJuTjBJRkpGVEY5T1ZVeE1TVVpaSUQwZ2UxeHVJQ0IxY0dSaGRHVTZJRU5oYzJOaFpHVXVUazlPUlN4Y2JpQWdaR1ZzWlhSbE9pQkRZWE5qWVdSbExrNVBUa1VzWEc0Z0lHNTFiR3hoWW14bE9pQjBjblZsTEZ4dWZTQmhjeUJqYjI1emREdGNibHh1Wlhod2IzSjBJR052Ym5OMElGSkZURjlEUVZORFFVUkZYMFJGVUVWT1JFVk9WQ0E5SUh0Y2JpQWdkWEJrWVhSbE9pQkRZWE5qWVdSbExrTkJVME5CUkVVc1hHNGdJR1JsYkdWMFpUb2dRMkZ6WTJGa1pTNURRVk5EUVVSRkxGeHVJQ0J1ZFd4c1lXSnNaVG9nWm1Gc2MyVXNYRzU5SUdGeklHTnZibk4wTzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnVWtWTVgwTkJVME5CUkVWZlNVNVRSVkpVWDFWUVJFRlVSU0E5SUh0Y2JpQWdkWEJrWVhSbE9pQkRZWE5qWVdSbExrTkJVME5CUkVVc1hHNGdJR1JsYkdWMFpUb2dRMkZ6WTJGa1pTNU9UMDVGTEZ4dUlDQnVkV3hzWVdKc1pUb2dabUZzYzJVc1hHNTlJR0Z6SUdOdmJuTjBPMXh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWW5WcGJHUkJjbUZ1WjI5RGIyNTBaWGgwS0c5d2RHbHZibk02SUh0Y2JpQWdkR1Z1WVc1MFNXUTZJSE4wY21sdVp6dGNiaUFnY0hKcGJtTnBjR0ZzU1dRNklITjBjbWx1Wnp0Y2JpQWdjR1Z5YldsemMybHZia3RsZVRvZ2MzUnlhVzVuTzF4dUlDQmhiR3h2ZDJWa1QzSm5WVzVwZEVsa2N6b2djM1J5YVc1blcxMDdYRzRnSUdGc2JHOTNaV1JTWlhOdmRYSmpaVWxrY3pvZ2MzUnlhVzVuVzEwN1hHNTlLVG9nUVhKaGJtZHZRWFYwYUVOdmJuUmxlSFFnZTF4dUlDQnlaWFIxY200Z2UxeHVJQ0FnSUhSbGJtRnVkRWxrT2lCdmNIUnBiMjV6TG5SbGJtRnVkRWxrTEZ4dUlDQWdJSEJ5YVc1amFYQmhiRWxrT2lCdmNIUnBiMjV6TG5CeWFXNWphWEJoYkVsa0xGeHVJQ0FnSUhCbGNtMXBjM05wYjI1TFpYazZJRzl3ZEdsdmJuTXVjR1Z5YldsemMybHZia3RsZVN4Y2JpQWdJQ0JoYkd4dmQyVmtUM0puVlc1cGRFbGtjem9nV3k0dUxtOXdkR2x2Ym5NdVlXeHNiM2RsWkU5eVoxVnVhWFJKWkhOZExGeHVJQ0FnSUdGc2JHOTNaV1JTWlhOdmRYSmpaVWxrY3pvZ1d5NHVMbTl3ZEdsdmJuTXVZV3hzYjNkbFpGSmxjMjkxY21ObFNXUnpYU3hjYmlBZ2ZUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdKMWFXeGtVV1J5WVc1MFJtbHNkR1Z5S0c5d2RHbHZibk02SUh0Y2JpQWdkR1Z1WVc1MFNXUTZJSE4wY21sdVp6dGNiaUFnY0hKcGJtTnBjR0ZzU1dRNklITjBjbWx1Wnp0Y2JpQWdjR1Z5YldsemMybHZia3RsZVRvZ2MzUnlhVzVuTzF4dUlDQmhiR3h2ZDJWa1QzSm5WVzVwZEVsa2N6b2djM1J5YVc1blcxMDdYRzRnSUdGc2JHOTNaV1JTWlhOdmRYSmpaVWxrY3pvZ2MzUnlhVzVuVzEwN1hHNTlLVG9nVVdSeVlXNTBRWFYwYUVacGJIUmxjaUI3WEc0Z0lISmxkSFZ5YmlCN1hHNGdJQ0FnYlhWemREb2dXMXh1SUNBZ0lDQWdlMXh1SUNBZ0lDQWdJQ0JyWlhrNklGd2lkR1Z1WVc1MFgybGtYQ0lzWEc0Z0lDQWdJQ0FnSUcxaGRHTm9PaUI3SUhaaGJIVmxPaUJ2Y0hScGIyNXpMblJsYm1GdWRFbGtJSDBzWEc0Z0lDQWdJQ0I5TEZ4dUlDQWdJQ0FnZTF4dUlDQWdJQ0FnSUNCemFHOTFiR1E2SUZ0Y2JpQWdJQ0FnSUNBZ0lDQjdJR3RsZVRvZ1hDSnZjbWRmZFc1cGRGOXBaRndpTENCdFlYUmphRG9nZXlCaGJuazZJRzl3ZEdsdmJuTXVZV3hzYjNkbFpFOXlaMVZ1YVhSSlpITWdmU0I5TEZ4dUlDQWdJQ0FnSUNBZ0lIc2dhMlY1T2lCY0luQnliM1JsWTNSbFpGOXlaWE52ZFhKalpWOXBaRndpTENCdFlYUmphRG9nZXlCaGJuazZJRzl3ZEdsdmJuTXVZV3hzYjNkbFpGSmxjMjkxY21ObFNXUnpJSDBnZlN4Y2JpQWdJQ0FnSUNBZ0lDQjdJR3RsZVRvZ1hDSnZkMjVsY2w5d2NtbHVZMmx3WVd4ZmFXUmNJaXdnYldGMFkyZzZJSHNnZG1Gc2RXVTZJRzl3ZEdsdmJuTXVjSEpwYm1OcGNHRnNTV1FnZlNCOUxGeHVJQ0FnSUNBZ0lDQmRMRnh1SUNBZ0lDQWdmU3hjYmlBZ0lDQmRMRnh1SUNCOU8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCelkyOXdaVXRsZVNoelkyOXdaVXRwYm1RNklGTmpiM0JsUzJsdVpDd2djMk52Y0dWSlpEb2djM1J5YVc1bktUb2djM1J5YVc1bklIdGNiaUFnY21WMGRYSnVJR0FrZTNOamIzQmxTMmx1WkgwNkpIdHpZMjl3WlVsa2ZXQTdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCdWIzZEpjMjhvS1RvZ1JHRjBaU0I3WEc0Z0lISmxkSFZ5YmlCdVpYY2dSR0YwWlNncE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWVhOQmNuSmhlVHhVUGloMllXeDFaVG9nVkZ0ZElId2dkVzVrWldacGJtVmtLVG9nVkZ0ZElIdGNiaUFnY21WMGRYSnVJSFpoYkhWbElEOC9JRnRkTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjMkZ0WlZSbGJtRnVkQ2h5YjNkVVpXNWhiblE2SUhWdWEyNXZkMjRzSUhSbGJtRnVkRWxrT2lCemRISnBibWNwT2lCaWIyOXNaV0Z1SUh0Y2JpQWdjbVYwZFhKdUlISmxiR0YwYVc5dVNXUW9jbTkzVkdWdVlXNTBJR0Z6SUhzZ2FXUTZJSE4wY21sdVp5QjlJSHdnYzNSeWFXNW5LU0E5UFQwZ2RHVnVZVzUwU1dRN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ5Wld4aGRHbHZiazFoZEdOb0tIWmhiSFZsT2lCMWJtdHViM2R1TENCMFlYSm5aWFE2SUhOMGNtbHVaeUI4SUhWdVpHVm1hVzVsWkNrNklHSnZiMnhsWVc0Z2UxeHVJQ0J5WlhSMWNtNGdkR0Z5WjJWMElEOGdjbVZzWVhScGIyNUpaQ2gyWVd4MVpTQmhjeUI3SUdsa09pQnpkSEpwYm1jZ2ZTQjhJSE4wY21sdVp5a2dQVDA5SUhSaGNtZGxkQ0E2SUdaaGJITmxPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2JHOTNaWEpUYkhWbktIWmhiSFZsT2lCemRISnBibWNwT2lCemRISnBibWNnZTF4dUlDQnlaWFIxY200Z0tGeHVJQ0FnSUhaaGJIVmxYRzRnSUNBZ0lDQXVkSEpwYlNncFhHNGdJQ0FnSUNBdWRHOU1iM2RsY2tOaGMyVW9LVnh1SUNBZ0lDQWdMbkpsY0d4aFkyVW9MMXRlWVMxNk1DMDVYU3N2Wnl3Z1hDSXRYQ0lwWEc0Z0lDQWdJQ0F1Y21Wd2JHRmpaU2d2WGkwcmZDMHJKQzluTENCY0lsd2lLU0I4ZkNCY0ltbDBaVzFjSWx4dUlDQXBPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2FYTlVhVzFsVm1Gc2FXUW9ZWFE2SUVSaGRHVWdmQ0IxYm1SbFptbHVaV1FzSUhOMFlYSjBjMEYwUHpvZ1JHRjBaU3dnWlhod2FYSmxjMEYwUHpvZ1JHRjBaU2s2SUdKdmIyeGxZVzRnZTF4dUlDQmpiMjV6ZENCcGJuTjBZVzUwSUQwZ1lYUWdQejhnYm1WM0lFUmhkR1VvS1R0Y2JpQWdhV1lnS0hOMFlYSjBjMEYwSUNZbUlHbHVjM1JoYm5RZ1BDQnpkR0Z5ZEhOQmRDa2djbVYwZFhKdUlHWmhiSE5sTzF4dUlDQnBaaUFvWlhod2FYSmxjMEYwSUNZbUlHbHVjM1JoYm5RZ1BpQmxlSEJwY21WelFYUXBJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JpQWdjbVYwZFhKdUlIUnlkV1U3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmlkV2xzWkVGalkyVnpjME52Ym5SbGVIUW9iM0IwYVc5dWN6b2dlMXh1SUNCMFpXNWhiblJKWkRvZ2MzUnlhVzVuTzF4dUlDQndjbWx1WTJsd1lXeEpaRG9nYzNSeWFXNW5PMXh1SUNCd1pYSnRhWE56YVc5dWN6b2dSV1ptWldOMGFYWmxVR1Z5YldsemMybHZibE51WVhCemFHOTBXMTA3WEc0Z0lHZHlZVzUwY3pvZ1IzSmhiblJUYm1Gd2MyaHZkRnRkTzF4dWZTazZJRUZqWTJWemMwTnZiblJsZUhRZ2UxeHVJQ0JqYjI1emRDQndaWEp0YVhOemFXOXVjMEo1VTJOdmNHVTZJRkpsWTI5eVpEeHpkSEpwYm1jc0lITjBjbWx1WjF0ZFBpQTlJSHQ5TzF4dUlDQmpiMjV6ZENCaGJHeHZkMlZrVDNKblZXNXBkRWxrYzBKNVVHVnliV2x6YzJsdmJqb2dVbVZqYjNKa1BITjBjbWx1Wnl3Z2MzUnlhVzVuVzEwK0lEMGdlMzA3WEc1Y2JpQWdabTl5SUNoamIyNXpkQ0J3WlhKdGFYTnphVzl1SUc5bUlHOXdkR2x2Ym5NdWNHVnliV2x6YzJsdmJuTXBJSHRjYmlBZ0lDQmpiMjV6ZENCclpYa2dQU0J6WTI5d1pVdGxlU2h3WlhKdGFYTnphVzl1TG5OamIzQmxTMmx1WkN3Z2NHVnliV2x6YzJsdmJpNXpZMjl3WlVsa0tUdGNiaUFnSUNCd1pYSnRhWE56YVc5dWMwSjVVMk52Y0dWYmEyVjVYU0E5SUhCbGNtMXBjM05wYjI1elFubFRZMjl3WlZ0clpYbGRJRDgvSUZ0ZE8xeHVJQ0FnSUhCbGNtMXBjM05wYjI1elFubFRZMjl3WlZ0clpYbGRMbkIxYzJnb2NHVnliV2x6YzJsdmJpNXdaWEp0YVhOemFXOXVTMlY1S1R0Y2JpQWdJQ0JwWmlBb2NHVnliV2x6YzJsdmJpNXpZMjl3WlV0cGJtUWdQVDA5SUZOamIzQmxTMmx1WkM1UGNtZFZibWwwS1NCN1hHNGdJQ0FnSUNCaGJHeHZkMlZrVDNKblZXNXBkRWxrYzBKNVVHVnliV2x6YzJsdmJsdHdaWEp0YVhOemFXOXVMbkJsY20xcGMzTnBiMjVMWlhsZElEMWNiaUFnSUNBZ0lDQWdZV3hzYjNkbFpFOXlaMVZ1YVhSSlpITkNlVkJsY20xcGMzTnBiMjViY0dWeWJXbHpjMmx2Ymk1d1pYSnRhWE56YVc5dVMyVjVYU0EvUHlCYlhUdGNiaUFnSUNBZ0lHRnNiRzkzWldSUGNtZFZibWwwU1dSelFubFFaWEp0YVhOemFXOXVXM0JsY20xcGMzTnBiMjR1Y0dWeWJXbHpjMmx2Ymt0bGVWMHVjSFZ6YUNod1pYSnRhWE56YVc5dUxuTmpiM0JsU1dRcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lISmxkSFZ5YmlCN1hHNGdJQ0FnZEdWdVlXNTBTV1E2SUc5d2RHbHZibk11ZEdWdVlXNTBTV1FzWEc0Z0lDQWdjSEpwYm1OcGNHRnNTV1E2SUc5d2RHbHZibk11Y0hKcGJtTnBjR0ZzU1dRc1hHNGdJQ0FnY0dWeWJXbHpjMmx2Ym5OQ2VWTmpiM0JsTEZ4dUlDQWdJR0ZzYkc5M1pXUlBjbWRWYm1sMFNXUnpRbmxRWlhKdGFYTnphVzl1TEZ4dUlDQWdJQ0FnY21WemIzVnlZMlZIY21GdWRITTZJRzl3ZEdsdmJuTXVaM0poYm5SekxtMWhjQ2dvWjNKaGJuUXBJRDArSUNoN1hHNGdJQ0FnSUNBZ0lISmxjMjkxY21ObFNXUTZJR2R5WVc1MExuSmxjMjkxY21ObFNXUXNYRzRnSUNBZ0lDQWdJSEJsY20xcGMzTnBiMjVMWlhrNklHZHlZVzUwTG5CbGNtMXBjM05wYjI1TFpYa3NYRzRnSUNBZ0lDQjlLU2tzWEc0Z0lIMDdYRzU5WEc1Y2JtVjRjRzl5ZENCaFluTjBjbUZqZENCamJHRnpjeUJDWVhObFRXOWtaV3hUWlhKMmFXTmxQRTBnWlhoMFpXNWtjeUJOYjJSbGJEeGliMjlzWldGdVBpQW1JSHNnYVdRNklITjBjbWx1WnlCOVBpQmxlSFJsYm1SeklFMXZaR1ZzVTJWeWRtbGpaVHhjYmlBZ1RTeGNiaUFnVW1Wd2IzTnBkRzl5ZVR4TkxDQmhibmsrWEc0K0lIdGNiaUFnY0hKdmRHVmpkR1ZrSUdOdmJuTjBjblZqZEc5eUtHTnNZWHA2T2lCdVpYY2dLQ2tnUFQ0Z1RTa2dlMXh1SUNBZ0lITjFjR1Z5S0dOc1lYcDZLVHRjYmlBZ2ZWeHVYRzRnSUhCeWIzUmxZM1JsWkNCdVpYZE5iMlJsYkR4VVBpaGpiR0Y2ZWpvZ2JtVjNJQ2dwSUQwK0lGUXNJR1JoZEdFNklGQmhjblJwWVd3OFZENHBPaUJVSUh0Y2JpQWdJQ0J5WlhSMWNtNGdUMkpxWldOMExtRnpjMmxuYmlodVpYY2dZMnhoZW5vb0tTQmhjeUJ2WW1wbFkzUXNJR1JoZEdFZ1lYTWdiMkpxWldOMEtTQmhjeUJVTzF4dUlDQjlYRzVjYmlBZ1lYTjVibU1nWTNKbFlYUmxLR1JoZEdFNklGQmhjblJwWVd3OFRUNHNJQzR1TG1GeVozTTZJR0Z1ZVZ0ZEtUb2dVSEp2YldselpUeE5QaUI3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11Y21Wd2J5NWpjbVZoZEdVb1QySnFaV04wTG1GemMybG5iaWg3ZlNCaGN5Qk5MQ0JrWVhSaElHRnpJRzlpYW1WamRDa3NJQzR1TG1GeVozTXBPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdZM0psWVhSbFQyNWxLR1JoZEdFNklGQmhjblJwWVd3OFRUNHNJQzR1TG1GeVozTTZJR0Z1ZVZ0ZEtUb2dVSEp2YldselpUeE5QaUI3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WTNKbFlYUmxLR1JoZEdFc0lDNHVMbUZ5WjNNcE8xeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ1oyVjBRbmxKWkNocFpEb2djM1J5YVc1bkxDQXVMaTVoY21kek9pQmhibmxiWFNrNklGQnliMjFwYzJVOFRUNGdlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbkpsY0c4dWNtVmhaQ2hwWkN3Z0xpNHVZWEpuY3lrN1hHNGdJSDFjYmx4dUlDQmhjM2x1WXlCMWNHUmhkR1ZQYm1Vb2FXUTZJSE4wY21sdVp5d2djR0YwWTJnNklGQmhjblJwWVd3OFRUNHNJQzR1TG1GeVozTTZJR0Z1ZVZ0ZEtUb2dVSEp2YldselpUeE5QaUI3WEc0Z0lDQWdZMjl1YzNRZ1pYaHBjM1JwYm1jZ1BTQmhkMkZwZENCMGFHbHpMbkpsY0c4dWNtVmhaQ2hwWkN3Z0xpNHVZWEpuY3lrN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdWNtVndieTUxY0dSaGRHVW9UMkpxWldOMExtRnpjMmxuYmlobGVHbHpkR2x1Wnl3Z2NHRjBZMmdwTENBdUxpNWhjbWR6S1R0Y2JpQWdmVnh1WEc0Z0lHRnplVzVqSUdSbGJHVjBaVUo1U1dRb2FXUTZJSE4wY21sdVp5d2dMaTR1WVhKbmN6b2dZVzU1VzEwcE9pQlFjbTl0YVhObFBIWnZhV1ErSUh0Y2JpQWdJQ0JoZDJGcGRDQjBhR2x6TG5KbGNHOHVaR1ZzWlhSbEtHbGtMQ0F1TGk1aGNtZHpLVHRjYmlBZ2ZWeHVYRzRnSUdGemVXNWpJR1pwYm1SUGJtVkNlVHhMSUdWNGRHVnVaSE1nYTJWNWIyWWdUU0FtSUhOMGNtbHVaejRvYTJWNU9pQkxMQ0IyWVd4MVpUb2dUVnRMWFN3Z0xpNHVZWEpuY3pvZ1lXNTVXMTBwT2lCUWNtOXRhWE5sUEUwK0lIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NXlaWEJ2TG1acGJtUlBibVZDZVNoclpYa3NJSFpoYkhWbExDQXVMaTVoY21kektUdGNiaUFnZlZ4dVhHNGdJR0Z6ZVc1aklHWnBibVJOWVc1NVFuazhTeUJsZUhSbGJtUnpJR3RsZVc5bUlFMGdKaUJ6ZEhKcGJtYytLR3RsZVRvZ1N5d2dkbUZzZFdVNklFMWJTMTBzSUM0dUxtRnlaM002SUdGdWVWdGRLVG9nVUhKdmJXbHpaVHhOVzEwK0lIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NXlaWEJ2TG5ObGJHVmpkQ2dwTG5kb1pYSmxLSHNnVzJ0bGVWMDZJSFpoYkhWbElIMGdZWE1nWVc1NUtTNWxlR1ZqZFhSbEtDNHVMbUZ5WjNNcE8xeHVJQ0I5WEc1Y2JpQWdZWE41Ym1NZ2JHbHpkRUZzYkNndUxpNWhjbWR6T2lCaGJubGJYU2s2SUZCeWIyMXBjMlU4VFZ0ZFBpQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVjbVZ3Ynk1elpXeGxZM1FvS1M1bGVHVmpkWFJsS0M0dUxtRnlaM01wTzF4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCcFpDZ3BPaUJ6ZEhKcGJtY2dlMXh1SUNCeVpYUjFjbTRnWTNKNWNIUnZMbkpoYm1SdmJWVlZTVVFvS1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSEpsYkdGMGFXOXVTV1FvZG1Gc2RXVTZJSE4wY21sdVp5QjhJSHNnYVdRNklITjBjbWx1WnlCOUtUb2djM1J5YVc1bklIdGNiaUFnY21WMGRYSnVJSFI1Y0dWdlppQjJZV3gxWlNBOVBUMGdYQ0p6ZEhKcGJtZGNJaUEvSUhaaGJIVmxJRG9nZG1Gc2RXVXVhV1E3WEc1OVhHNWNibVY0Y0c5eWRDQjdJRUYxZEdodmNtbDZZWFJwYjI1RmNuSnZjaXdnZEhKaGJuTmhZM1JwYjI1aGJDQjlJR1p5YjIwZ1hDSkFaR1ZqWVdZdGRITXZZMjl5WlZ3aU8xeHVJbDE5Il19
@@ -22,6 +22,9 @@ class AuthService {
22
22
  this.clockToleranceSeconds = options.clockToleranceSeconds ?? 5;
23
23
  this.excludedClients = options.excludedClients ?? ["account"];
24
24
  }
25
+ isTokenVerificationEnabled() {
26
+ return this.verifyToken;
27
+ }
25
28
  getTokenPayload(jwt) {
26
29
  return (0, utils_js_1.getTokenPayload)(jwt);
27
30
  }
@@ -84,5 +87,5 @@ class AuthService {
84
87
  }
85
88
  }
86
89
  exports.AuthService = AuthService;
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmVzdC9hdXRoU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBQ0gsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsT0FBTyxFQUNQLGNBQWMsR0FDZixtQkFBZ0I7QUErQmpCLE1BQU0sT0FBTyxXQUFXO0lBT3RCLFlBQVksVUFBOEIsRUFBRTtRQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFXO1FBQ3pCLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxRQUFRLENBQUMsR0FBVztRQUNsQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFXO1FBQ2pCLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxPQUEwQztRQUM3RCxPQUFPLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0IsQ0FDaEIsT0FBMEM7UUFFMUMsT0FBTyxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsR0FBVztRQUM1QixPQUFPLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxLQUFLLENBQUMsZ0JBQWdCLENBQ3BCLEdBQVc7UUFFWCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7O09BR0c7SUFDSyxLQUFLLENBQUMsaUJBQWlCLENBQzdCLEdBQVc7UUFFWCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNsRCxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUc7YUFDakQsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxPQUFnRCxDQUFDO1FBQzFELENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RSxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9uZXN0L2F1dGhTZXJ2aWNlXG4gKiBAc3VtbWFyeSBOZXN0LWNvbXBhdGlibGUgYXV0aGVudGljYXRpb24gc2VydmljZSBoZWxwZXJzLlxuICogQGRlc2NyaXB0aW9uIFJlcXVlc3QtY29udGV4dC1hd2FyZSBhdXRoIGhlbHBlcnMgZm9yIE5lc3QgYXBwbGljYXRpb25zIHVzaW5nIERlY2FmIGludGVncmF0aW9uIHBhdHRlcm5zLlxuICpcbiAqIFN1cHBvcnRzIHR3byBtb2RlczpcbiAqIC0gKipWZXJpZnkgbW9kZSoqIChkZWZhdWx0IHdoZW4gYHZlcmlmeVVybGAgaXMgc2V0KTogdmFsaWRhdGVzIHRoZSBKV1Qgc2lnbmF0dXJlXG4gKiAgIGFnYWluc3QgdGhlIEtleWNsb2FrIEpXS1MgZW5kcG9pbnQgdXNpbmcgYGpvc2Uuand0VmVyaWZ5YC5cbiAqIC0gKipEZWNvZGUtb25seSBtb2RlKiogKHdoZW4gYHZlcmlmeVRva2VuYCBpcyBmYWxzZSAvIGB2ZXJpZnlVcmxgIGlzIGVtcHR5KTpcbiAqICAgZGVjb2RlcyB0aGUgSldUIHdpdGhvdXQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiAoZGV2L2xvY2FsIG1vZGUpLlxuICovXG5pbXBvcnQgeyBBdXRob3JpemF0aW9uRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IGNyZWF0ZVJlbW90ZUpXS1NldCwgand0VmVyaWZ5IH0gZnJvbSBcImpvc2VcIjtcbmltcG9ydCB7XG4gIGV4dHJhY3RLZXljbG9ha1JvbGVzLFxuICBnZXRSZWFsbUZyb21Jc3N1ZXIsXG4gIGdldFRva2VuUGF5bG9hZCxcbiAgZ2V0VXNlcixcbiAgZ2V0Q2xpZW50Um9sZXMsXG59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEtleWNsb2FrQWNjZXNzVG9rZW5QYXlsb2FkLCBLZXljbG9ha1VzZXIgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSB7QGxpbmsgQXV0aFNlcnZpY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhTZXJ2aWNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHZlcmlmeSB0aGUgSldUIHNpZ25hdHVyZSBhZ2FpbnN0IHRoZSBLZXljbG9hayBKV0tTIGVuZHBvaW50LlxuICAgKiBXaGVuIGBmYWxzZWAgKG9yIGB2ZXJpZnlVcmxgIGlzIGVtcHR5KSwgdG9rZW5zIGFyZSBkZWNvZGVkIHdpdGhvdXRcbiAgICogc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiAoZGV2L2xvY2FsIG1vZGUgb25seSkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB2ZXJpZnlUb2tlbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgS2V5Y2xvYWsgSldLUyBVUkwgKGUuZy4gYGh0dHBzOi8va2V5Y2xvYWsvcmVhbG1zL215cmVhbG0vcHJvdG9jb2wvb3BlbmlkLWNvbm5lY3QvY2VydHNgKS5cbiAgICogUmVxdWlyZWQgd2hlbiBgdmVyaWZ5VG9rZW5gIGlzIGB0cnVlYC5cbiAgICovXG4gIHZlcmlmeVVybD86IHN0cmluZztcbiAgLyoqXG4gICAqIENsb2NrIHRvbGVyYW5jZSBmb3IgSldUIGV4cGlyeSB2ZXJpZmljYXRpb24gKGluIHNlY29uZHMpLlxuICAgKiBAZGVmYXVsdCA1XG4gICAqL1xuICBjbG9ja1RvbGVyYW5jZVNlY29uZHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBLZXljbG9hayBjbGllbnQgSURzIHRvIGV4Y2x1ZGUgd2hlbiBleHRyYWN0aW5nIHJvbGVzIGZyb20gYHJlc291cmNlX2FjY2Vzc2AuXG4gICAqIEBkZWZhdWx0IFtcImFjY291bnRcIl1cbiAgICovXG4gIGV4Y2x1ZGVkQ2xpZW50cz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHZlcmlmeVRva2VuOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IHZlcmlmeVVybDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGNsb2NrVG9sZXJhbmNlU2Vjb25kczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGV4Y2x1ZGVkQ2xpZW50czogc3RyaW5nW107XG4gIHByaXZhdGUgandrczogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlUmVtb3RlSldLU2V0PiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBBdXRoU2VydmljZU9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMudmVyaWZ5VG9rZW4gPSAhIW9wdGlvbnMudmVyaWZ5VG9rZW4gJiYgISFvcHRpb25zLnZlcmlmeVVybDtcbiAgICB0aGlzLnZlcmlmeVVybCA9IG9wdGlvbnMudmVyaWZ5VXJsID8/IFwiXCI7XG4gICAgdGhpcy5jbG9ja1RvbGVyYW5jZVNlY29uZHMgPSBvcHRpb25zLmNsb2NrVG9sZXJhbmNlU2Vjb25kcyA/PyA1O1xuICAgIHRoaXMuZXhjbHVkZWRDbGllbnRzID0gb3B0aW9ucy5leGNsdWRlZENsaWVudHMgPz8gW1wiYWNjb3VudFwiXTtcbiAgfVxuXG4gIGdldFRva2VuUGF5bG9hZChqd3Q6IHN0cmluZyk6IEtleWNsb2FrQWNjZXNzVG9rZW5QYXlsb2FkIHwgbnVsbCB7XG4gICAgcmV0dXJuIGdldFRva2VuUGF5bG9hZChqd3QpO1xuICB9XG5cbiAgZ2V0Um9sZXMoand0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuZXh0cmFjdEtleWNsb2FrUm9sZXModGhpcy5nZXRUb2tlblBheWxvYWQoand0KSk7XG4gIH1cblxuICBnZXRVc2VyKGp3dDogc3RyaW5nKTogS2V5Y2xvYWtVc2VyIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gZ2V0VXNlcihqd3QpO1xuICB9XG5cbiAgZXh0cmFjdEtleWNsb2FrUm9sZXMocGF5bG9hZDogS2V5Y2xvYWtBY2Nlc3NUb2tlblBheWxvYWQgfCBudWxsKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBleHRyYWN0S2V5Y2xvYWtSb2xlcyhwYXlsb2FkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyBjbGllbnQgcm9sZXMgZnJvbSB0aGUgYHJlc291cmNlX2FjY2Vzc2AgY2xhaW0sIGV4Y2x1ZGluZ1xuICAgKiB0aGUgY29uZmlndXJlZCBgZXhjbHVkZWRDbGllbnRzYCAoZGVmYXVsdDogYFtcImFjY291bnRcIl1gKS5cbiAgICovXG4gIGV4dHJhY3RDbGllbnRSb2xlcyhcbiAgICBwYXlsb2FkOiBLZXljbG9ha0FjY2Vzc1Rva2VuUGF5bG9hZCB8IG51bGxcbiAgKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBnZXRDbGllbnRSb2xlcyhwYXlsb2FkLCB0aGlzLmV4Y2x1ZGVkQ2xpZW50cyk7XG4gIH1cblxuICBnZXRSZWFsbUZyb21Jc3N1ZXIoand0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXRSZWFsbUZyb21Jc3N1ZXIoand0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYSBKV1Q6XG4gICAqIC0gSW4gKip2ZXJpZnkgbW9kZSoqOiB2ZXJpZmllcyB0aGUgc2lnbmF0dXJlIGFnYWluc3QgdGhlIEtleWNsb2FrIEpXS1NcbiAgICogICBlbmRwb2ludCB1c2luZyBgam9zZS5qd3RWZXJpZnlgLCB0aGVuIHJldHVybnMgdGhlIHZlcmlmaWVkIHBheWxvYWQuXG4gICAqIC0gSW4gKipkZWNvZGUtb25seSBtb2RlKio6IGRlY29kZXMgdGhlIEpXVCB3aXRob3V0IHZlcmlmaWNhdGlvbiBhbmRcbiAgICogICByZXR1cm5zIHRoZSBwYXlsb2FkIChvciB0aHJvd3MgaWYgdW5wYXJzZWFibGUpLlxuICAgKlxuICAgKiBAdGhyb3dzIHtBdXRob3JpemF0aW9uRXJyb3J9IHdoZW4gdGhlIHRva2VuIGlzIGludmFsaWQsIGV4cGlyZWQsIG9yXG4gICAqICAgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlscy5cbiAgICovXG4gIGFzeW5jIGFzc2VydFZhbGlkVG9rZW4oXG4gICAgand0OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxLZXljbG9ha0FjY2Vzc1Rva2VuUGF5bG9hZD4ge1xuICAgIGlmICh0aGlzLnZlcmlmeVRva2VuKSB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJpZnlBZ2FpbnN0Sndrcyhqd3QpO1xuICAgIH1cbiAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5nZXRUb2tlblBheWxvYWQoand0KTtcbiAgICBpZiAoIXBheWxvYWQpIHtcbiAgICAgIHRocm93IG5ldyBBdXRob3JpemF0aW9uRXJyb3IoXCJJbnZhbGlkIHRva2VuXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcGF5bG9hZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyB0aGUgSldUIHNpZ25hdHVyZSBhZ2FpbnN0IHRoZSBLZXljbG9hayBKV0tTIGVuZHBvaW50LlxuICAgKiBMYXppbHkgY3JlYXRlcyB0aGUgSldLUyBrZXlzdG9yZSBvbiBmaXJzdCBjYWxsLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyB2ZXJpZnlBZ2FpbnN0SndrcyhcbiAgICBqd3Q6IHN0cmluZ1xuICApOiBQcm9taXNlPEtleWNsb2FrQWNjZXNzVG9rZW5QYXlsb2FkPiB7XG4gICAgaWYgKCF0aGlzLmp3a3MpIHtcbiAgICAgIHRoaXMuandrcyA9IGNyZWF0ZVJlbW90ZUpXS1NldChuZXcgVVJMKHRoaXMudmVyaWZ5VXJsKSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IHBheWxvYWQgfSA9IGF3YWl0IGp3dFZlcmlmeShqd3QsIHRoaXMuandrcywge1xuICAgICAgICBjbG9ja1RvbGVyYW5jZTogYCR7dGhpcy5jbG9ja1RvbGVyYW5jZVNlY29uZHN9c2AsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBwYXlsb2FkIGFzIHVua25vd24gYXMgS2V5Y2xvYWtBY2Nlc3NUb2tlblBheWxvYWQ7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aHJvdyBuZXcgQXV0aG9yaXphdGlvbkVycm9yKFwiSW52YWxpZCB0b2tlbjogXCIgKyAoZT8ubWVzc2FnZSA/PyBlKSk7XG4gICAgfVxuICB9XG59XG4iXX0=
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhdXRoU2VydmljZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7Ozs7OztHQVVHO0FBQ0gseUNBQW9EO0FBQ3BELCtCQUFxRDtBQUNyRCx5Q0FBaUg7QUFDakgsTUFBYSxXQUFXO0lBQ3BCLFlBQVksT0FBTyxHQUFHLEVBQUU7UUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUNoRSxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUMscUJBQXFCLElBQUksQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGVBQWUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFDRCxlQUFlLENBQUMsR0FBRztRQUNmLE9BQU8sSUFBQSwwQkFBZSxFQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxRQUFRLENBQUMsR0FBRztRQUNSLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBQ0QsT0FBTyxDQUFDLEdBQUc7UUFDUCxPQUFPLElBQUEsa0JBQU8sRUFBQyxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBQ0Qsb0JBQW9CLENBQUMsT0FBTztRQUN4QixPQUFPLElBQUEsK0JBQW9CLEVBQUMsT0FBTyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNEOzs7T0FHRztJQUNILGtCQUFrQixDQUFDLE9BQU87UUFDdEIsT0FBTyxJQUFBLHlCQUFjLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsR0FBRztRQUNsQixPQUFPLElBQUEsNkJBQWtCLEVBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNEOzs7Ozs7Ozs7T0FTRztJQUNILEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHO1FBQ3RCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSx5QkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUNEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUEseUJBQWtCLEVBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUNELElBQUksQ0FBQztZQUNELE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLElBQUEsZ0JBQVMsRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDaEQsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHO2FBQ25ELENBQUMsQ0FBQztZQUNILE9BQU8sT0FBTyxDQUFDO1FBQ25CLENBQUM7UUFDRCxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1AsTUFBTSxJQUFJLHlCQUFrQixDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7SUFDTCxDQUFDO0NBQ0o7QUFuRUQsa0NBbUVDO0FBQ0Qsc2hSQUFzaFIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL25lc3QvYXV0aFNlcnZpY2VcbiAqIEBzdW1tYXJ5IE5lc3QtY29tcGF0aWJsZSBhdXRoZW50aWNhdGlvbiBzZXJ2aWNlIGhlbHBlcnMuXG4gKiBAZGVzY3JpcHRpb24gUmVxdWVzdC1jb250ZXh0LWF3YXJlIGF1dGggaGVscGVycyBmb3IgTmVzdCBhcHBsaWNhdGlvbnMgdXNpbmcgRGVjYWYgaW50ZWdyYXRpb24gcGF0dGVybnMuXG4gKlxuICogU3VwcG9ydHMgdHdvIG1vZGVzOlxuICogLSAqKlZlcmlmeSBtb2RlKiogKGRlZmF1bHQgd2hlbiBgdmVyaWZ5VXJsYCBpcyBzZXQpOiB2YWxpZGF0ZXMgdGhlIEpXVCBzaWduYXR1cmVcbiAqICAgYWdhaW5zdCB0aGUgS2V5Y2xvYWsgSldLUyBlbmRwb2ludCB1c2luZyBgam9zZS5qd3RWZXJpZnlgLlxuICogLSAqKkRlY29kZS1vbmx5IG1vZGUqKiAod2hlbiBgdmVyaWZ5VG9rZW5gIGlzIGZhbHNlIC8gYHZlcmlmeVVybGAgaXMgZW1wdHkpOlxuICogICBkZWNvZGVzIHRoZSBKV1Qgd2l0aG91dCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIChkZXYvbG9jYWwgbW9kZSkuXG4gKi9cbmltcG9ydCB7IEF1dGhvcml6YXRpb25FcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgY3JlYXRlUmVtb3RlSldLU2V0LCBqd3RWZXJpZnkgfSBmcm9tIFwiam9zZVwiO1xuaW1wb3J0IHsgZXh0cmFjdEtleWNsb2FrUm9sZXMsIGdldFJlYWxtRnJvbUlzc3VlciwgZ2V0VG9rZW5QYXlsb2FkLCBnZXRVc2VyLCBnZXRDbGllbnRSb2xlcywgfSBmcm9tIFwiLi91dGlscy5qc1wiO1xuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy52ZXJpZnlUb2tlbiA9ICEhb3B0aW9ucy52ZXJpZnlUb2tlbiAmJiAhIW9wdGlvbnMudmVyaWZ5VXJsO1xuICAgICAgICB0aGlzLnZlcmlmeVVybCA9IG9wdGlvbnMudmVyaWZ5VXJsID8/IFwiXCI7XG4gICAgICAgIHRoaXMuY2xvY2tUb2xlcmFuY2VTZWNvbmRzID0gb3B0aW9ucy5jbG9ja1RvbGVyYW5jZVNlY29uZHMgPz8gNTtcbiAgICAgICAgdGhpcy5leGNsdWRlZENsaWVudHMgPSBvcHRpb25zLmV4Y2x1ZGVkQ2xpZW50cyA/PyBbXCJhY2NvdW50XCJdO1xuICAgIH1cbiAgICBnZXRUb2tlblBheWxvYWQoand0KSB7XG4gICAgICAgIHJldHVybiBnZXRUb2tlblBheWxvYWQoand0KTtcbiAgICB9XG4gICAgZ2V0Um9sZXMoand0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4dHJhY3RLZXljbG9ha1JvbGVzKHRoaXMuZ2V0VG9rZW5QYXlsb2FkKGp3dCkpO1xuICAgIH1cbiAgICBnZXRVc2VyKGp3dCkge1xuICAgICAgICByZXR1cm4gZ2V0VXNlcihqd3QpO1xuICAgIH1cbiAgICBleHRyYWN0S2V5Y2xvYWtSb2xlcyhwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBleHRyYWN0S2V5Y2xvYWtSb2xlcyhwYXlsb2FkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXh0cmFjdHMgY2xpZW50IHJvbGVzIGZyb20gdGhlIGByZXNvdXJjZV9hY2Nlc3NgIGNsYWltLCBleGNsdWRpbmdcbiAgICAgKiB0aGUgY29uZmlndXJlZCBgZXhjbHVkZWRDbGllbnRzYCAoZGVmYXVsdDogYFtcImFjY291bnRcIl1gKS5cbiAgICAgKi9cbiAgICBleHRyYWN0Q2xpZW50Um9sZXMocGF5bG9hZCkge1xuICAgICAgICByZXR1cm4gZ2V0Q2xpZW50Um9sZXMocGF5bG9hZCwgdGhpcy5leGNsdWRlZENsaWVudHMpO1xuICAgIH1cbiAgICBnZXRSZWFsbUZyb21Jc3N1ZXIoand0KSB7XG4gICAgICAgIHJldHVybiBnZXRSZWFsbUZyb21Jc3N1ZXIoand0KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVmFsaWRhdGVzIGEgSldUOlxuICAgICAqIC0gSW4gKip2ZXJpZnkgbW9kZSoqOiB2ZXJpZmllcyB0aGUgc2lnbmF0dXJlIGFnYWluc3QgdGhlIEtleWNsb2FrIEpXS1NcbiAgICAgKiAgIGVuZHBvaW50IHVzaW5nIGBqb3NlLmp3dFZlcmlmeWAsIHRoZW4gcmV0dXJucyB0aGUgdmVyaWZpZWQgcGF5bG9hZC5cbiAgICAgKiAtIEluICoqZGVjb2RlLW9ubHkgbW9kZSoqOiBkZWNvZGVzIHRoZSBKV1Qgd2l0aG91dCB2ZXJpZmljYXRpb24gYW5kXG4gICAgICogICByZXR1cm5zIHRoZSBwYXlsb2FkIChvciB0aHJvd3MgaWYgdW5wYXJzZWFibGUpLlxuICAgICAqXG4gICAgICogQHRocm93cyB7QXV0aG9yaXphdGlvbkVycm9yfSB3aGVuIHRoZSB0b2tlbiBpcyBpbnZhbGlkLCBleHBpcmVkLCBvclxuICAgICAqICAgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBmYWlscy5cbiAgICAgKi9cbiAgICBhc3luYyBhc3NlcnRWYWxpZFRva2VuKGp3dCkge1xuICAgICAgICBpZiAodGhpcy52ZXJpZnlUb2tlbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmVyaWZ5QWdhaW5zdEp3a3Moand0KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5nZXRUb2tlblBheWxvYWQoand0KTtcbiAgICAgICAgaWYgKCFwYXlsb2FkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXV0aG9yaXphdGlvbkVycm9yKFwiSW52YWxpZCB0b2tlblwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVmVyaWZpZXMgdGhlIEpXVCBzaWduYXR1cmUgYWdhaW5zdCB0aGUgS2V5Y2xvYWsgSldLUyBlbmRwb2ludC5cbiAgICAgKiBMYXppbHkgY3JlYXRlcyB0aGUgSldLUyBrZXlzdG9yZSBvbiBmaXJzdCBjYWxsLlxuICAgICAqL1xuICAgIGFzeW5jIHZlcmlmeUFnYWluc3RKd2tzKGp3dCkge1xuICAgICAgICBpZiAoIXRoaXMuandrcykge1xuICAgICAgICAgICAgdGhpcy5qd2tzID0gY3JlYXRlUmVtb3RlSldLU2V0KG5ldyBVUkwodGhpcy52ZXJpZnlVcmwpKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgeyBwYXlsb2FkIH0gPSBhd2FpdCBqd3RWZXJpZnkoand0LCB0aGlzLmp3a3MsIHtcbiAgICAgICAgICAgICAgICBjbG9ja1RvbGVyYW5jZTogYCR7dGhpcy5jbG9ja1RvbGVyYW5jZVNlY29uZHN9c2AsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXV0aG9yaXphdGlvbkVycm9yKFwiSW52YWxpZCB0b2tlbjogXCIgKyAoZT8ubWVzc2FnZSA/PyBlKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lZWFYwYUZObGNuWnBZMlV1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk4dUxpOXpjbU12Ym1WemRDOWhkWFJvVTJWeWRtbGpaUzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGQlFUczdPenM3T3pzN096dEhRVlZITzBGQlEwZ3NUMEZCVHl4RlFVRkZMR3RDUVVGclFpeEZRVUZGTEUxQlFVMHNaMEpCUVdkQ0xFTkJRVU03UVVGRGNFUXNUMEZCVHl4RlFVRkZMR3RDUVVGclFpeEZRVUZGTEZOQlFWTXNSVUZCUlN4TlFVRk5MRTFCUVUwc1EwRkJRenRCUVVOeVJDeFBRVUZQTEVWQlEwd3NiMEpCUVc5Q0xFVkJRM0JDTEd0Q1FVRnJRaXhGUVVOc1FpeGxRVUZsTEVWQlEyWXNUMEZCVHl4RlFVTlFMR05CUVdNc1IwRkRaaXh0UWtGQlowSTdRVUVyUW1wQ0xFMUJRVTBzVDBGQlR5eFhRVUZYTzBsQlQzUkNMRmxCUVZrc1ZVRkJPRUlzUlVGQlJUdFJRVU14UXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNWMEZCVnl4SlFVRkpMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zVTBGQlV5eERRVUZETzFGQlEyaEZMRWxCUVVrc1EwRkJReXhUUVVGVExFZEJRVWNzVDBGQlR5eERRVUZETEZOQlFWTXNTVUZCU1N4RlFVRkZMRU5CUVVNN1VVRkRla01zU1VGQlNTeERRVUZETEhGQ1FVRnhRaXhIUVVGSExFOUJRVThzUTBGQlF5eHhRa0ZCY1VJc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRGFFVXNTVUZCU1N4RFFVRkRMR1ZCUVdVc1IwRkJSeXhQUVVGUExFTkJRVU1zWlVGQlpTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNN1NVRkRhRVVzUTBGQlF6dEpRVVZFTEdWQlFXVXNRMEZCUXl4SFFVRlhPMUZCUTNwQ0xFOUJRVThzWlVGQlpTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUXpsQ0xFTkJRVU03U1VGRlJDeFJRVUZSTEVOQlFVTXNSMEZCVnp0UlFVTnNRaXhQUVVGUExFbEJRVWtzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhKUVVGSkxFTkJRVU1zWlVGQlpTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRPVVFzUTBGQlF6dEpRVVZFTEU5QlFVOHNRMEZCUXl4SFFVRlhPMUZCUTJwQ0xFOUJRVThzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTNSQ0xFTkJRVU03U1VGRlJDeHZRa0ZCYjBJc1EwRkJReXhQUVVFd1F6dFJRVU0zUkN4UFFVRlBMRzlDUVVGdlFpeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMGxCUTNaRExFTkJRVU03U1VGRlJEczdPMDlCUjBjN1NVRkRTQ3hyUWtGQmEwSXNRMEZEYUVJc1QwRkJNRU03VVVGRk1VTXNUMEZCVHl4alFVRmpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFbEJRVWtzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXp0SlFVTjJSQ3hEUVVGRE8wbEJSVVFzYTBKQlFXdENMRU5CUVVNc1IwRkJWenRSUVVNMVFpeFBRVUZQTEd0Q1FVRnJRaXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlEycERMRU5CUVVNN1NVRkZSRHM3T3pzN096czdPMDlCVTBjN1NVRkRTQ3hMUVVGTExFTkJRVU1zWjBKQlFXZENMRU5CUTNCQ0xFZEJRVmM3VVVGRldDeEpRVUZKTEVsQlFVa3NRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJRenRaUVVOeVFpeFBRVUZQTEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTnlReXhEUVVGRE8xRkJRMFFzVFVGQlRTeFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMR1ZCUVdVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU14UXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVU03V1VGRFlpeE5RVUZOTEVsQlFVa3NhMEpCUVd0Q0xFTkJRVU1zWlVGQlpTeERRVUZETEVOQlFVTTdVVUZEYUVRc1EwRkJRenRSUVVORUxFOUJRVThzVDBGQlR5eERRVUZETzBsQlEycENMRU5CUVVNN1NVRkZSRHM3TzA5QlIwYzdTVUZEU3l4TFFVRkxMRU5CUVVNc2FVSkJRV2xDTEVOQlF6ZENMRWRCUVZjN1VVRkZXQ3hKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRPMWxCUTJZc1NVRkJTU3hEUVVGRExFbEJRVWtzUjBGQlJ5eHJRa0ZCYTBJc1EwRkJReXhKUVVGSkxFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVNeFJDeERRVUZETzFGQlEwUXNTVUZCU1N4RFFVRkRPMWxCUTBnc1RVRkJUU3hGUVVGRkxFOUJRVThzUlVGQlJTeEhRVUZITEUxQlFVMHNVMEZCVXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hKUVVGSkxFTkJRVU1zU1VGQlNTeEZRVUZGTzJkQ1FVTnNSQ3hqUVVGakxFVkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNjVUpCUVhGQ0xFZEJRVWM3WVVGRGFrUXNRMEZCUXl4RFFVRkRPMWxCUTBnc1QwRkJUeXhQUVVGblJDeERRVUZETzFGQlF6RkVMRU5CUVVNN1VVRkJReXhQUVVGUExFTkJRVTBzUlVGQlJTeERRVUZETzFsQlEyaENMRTFCUVUwc1NVRkJTU3hyUWtGQmEwSXNRMEZCUXl4cFFrRkJhVUlzUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlN4UFFVRlBMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU4wUlN4RFFVRkRPMGxCUTBnc1EwRkJRenREUVVOR0lpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkFiVzlrZFd4bElHbHVkR1ZuY21GMGFXOXVjeTl1WlhOMEwyRjFkR2hUWlhKMmFXTmxYRzRnS2lCQWMzVnRiV0Z5ZVNCT1pYTjBMV052YlhCaGRHbGliR1VnWVhWMGFHVnVkR2xqWVhScGIyNGdjMlZ5ZG1salpTQm9aV3h3WlhKekxseHVJQ29nUUdSbGMyTnlhWEIwYVc5dUlGSmxjWFZsYzNRdFkyOXVkR1Y0ZEMxaGQyRnlaU0JoZFhSb0lHaGxiSEJsY25NZ1ptOXlJRTVsYzNRZ1lYQndiR2xqWVhScGIyNXpJSFZ6YVc1bklFUmxZMkZtSUdsdWRHVm5jbUYwYVc5dUlIQmhkSFJsY201ekxseHVJQ3BjYmlBcUlGTjFjSEJ2Y25SeklIUjNieUJ0YjJSbGN6cGNiaUFxSUMwZ0tpcFdaWEpwWm5rZ2JXOWtaU29xSUNoa1pXWmhkV3gwSUhkb1pXNGdZSFpsY21sbWVWVnliR0FnYVhNZ2MyVjBLVG9nZG1Gc2FXUmhkR1Z6SUhSb1pTQktWMVFnYzJsbmJtRjBkWEpsWEc0Z0tpQWdJR0ZuWVdsdWMzUWdkR2hsSUV0bGVXTnNiMkZySUVwWFMxTWdaVzVrY0c5cGJuUWdkWE5wYm1jZ1lHcHZjMlV1YW5kMFZtVnlhV1o1WUM1Y2JpQXFJQzBnS2lwRVpXTnZaR1V0YjI1c2VTQnRiMlJsS2lvZ0tIZG9aVzRnWUhabGNtbG1lVlJ2YTJWdVlDQnBjeUJtWVd4elpTQXZJR0IyWlhKcFpubFZjbXhnSUdseklHVnRjSFI1S1RwY2JpQXFJQ0FnWkdWamIyUmxjeUIwYUdVZ1NsZFVJSGRwZEdodmRYUWdjMmxuYm1GMGRYSmxJSFpsY21sbWFXTmhkR2x2YmlBb1pHVjJMMnh2WTJGc0lHMXZaR1VwTGx4dUlDb3ZYRzVwYlhCdmNuUWdleUJCZFhSb2IzSnBlbUYwYVc5dVJYSnliM0lnZlNCbWNtOXRJRndpUUdSbFkyRm1MWFJ6TDJOdmNtVmNJanRjYm1sdGNHOXlkQ0I3SUdOeVpXRjBaVkpsYlc5MFpVcFhTMU5sZEN3Z2FuZDBWbVZ5YVdaNUlIMGdabkp2YlNCY0ltcHZjMlZjSWp0Y2JtbHRjRzl5ZENCN1hHNGdJR1Y0ZEhKaFkzUkxaWGxqYkc5aGExSnZiR1Z6TEZ4dUlDQm5aWFJTWldGc2JVWnliMjFKYzNOMVpYSXNYRzRnSUdkbGRGUnZhMlZ1VUdGNWJHOWhaQ3hjYmlBZ1oyVjBWWE5sY2l4Y2JpQWdaMlYwUTJ4cFpXNTBVbTlzWlhNc1hHNTlJR1p5YjIwZ1hDSXVMM1YwYVd4elhDSTdYRzVwYlhCdmNuUWdkSGx3WlNCN0lFdGxlV05zYjJGclFXTmpaWE56Vkc5clpXNVFZWGxzYjJGa0xDQkxaWGxqYkc5aGExVnpaWElnZlNCbWNtOXRJRndpTGk5MGVYQmxjMXdpTzF4dVhHNHZLaXBjYmlBcUlFTnZibVpwWjNWeVlYUnBiMjRnWm05eUlIUm9aU0I3UUd4cGJtc2dRWFYwYUZObGNuWnBZMlY5TGx4dUlDb3ZYRzVsZUhCdmNuUWdhVzUwWlhKbVlXTmxJRUYxZEdoVFpYSjJhV05sVDNCMGFXOXVjeUI3WEc0Z0lDOHFLbHh1SUNBZ0tpQlhhR1YwYUdWeUlIUnZJSFpsY21sbWVTQjBhR1VnU2xkVUlITnBaMjVoZEhWeVpTQmhaMkZwYm5OMElIUm9aU0JMWlhsamJHOWhheUJLVjB0VElHVnVaSEJ2YVc1MExseHVJQ0FnS2lCWGFHVnVJR0JtWVd4elpXQWdLRzl5SUdCMlpYSnBabmxWY214Z0lHbHpJR1Z0Y0hSNUtTd2dkRzlyWlc1eklHRnlaU0JrWldOdlpHVmtJSGRwZEdodmRYUmNiaUFnSUNvZ2MybG5ibUYwZFhKbElIWmxjbWxtYVdOaGRHbHZiaUFvWkdWMkwyeHZZMkZzSUcxdlpHVWdiMjVzZVNrdVhHNGdJQ0FxSUVCa1pXWmhkV3gwSUdaaGJITmxYRzRnSUNBcUwxeHVJQ0IyWlhKcFpubFViMnRsYmo4NklHSnZiMnhsWVc0N1hHNGdJQzhxS2x4dUlDQWdLaUJVYUdVZ1MyVjVZMnh2WVdzZ1NsZExVeUJWVWt3Z0tHVXVaeTRnWUdoMGRIQnpPaTh2YTJWNVkyeHZZV3N2Y21WaGJHMXpMMjE1Y21WaGJHMHZjSEp2ZEc5amIyd3ZiM0JsYm1sa0xXTnZibTVsWTNRdlkyVnlkSE5nS1M1Y2JpQWdJQ29nVW1WeGRXbHlaV1FnZDJobGJpQmdkbVZ5YVdaNVZHOXJaVzVnSUdseklHQjBjblZsWUM1Y2JpQWdJQ292WEc0Z0lIWmxjbWxtZVZWeWJEODZJSE4wY21sdVp6dGNiaUFnTHlvcVhHNGdJQ0FxSUVOc2IyTnJJSFJ2YkdWeVlXNWpaU0JtYjNJZ1NsZFVJR1Y0Y0dseWVTQjJaWEpwWm1sallYUnBiMjRnS0dsdUlITmxZMjl1WkhNcExseHVJQ0FnS2lCQVpHVm1ZWFZzZENBMVhHNGdJQ0FxTDF4dUlDQmpiRzlqYTFSdmJHVnlZVzVqWlZObFkyOXVaSE0vT2lCdWRXMWlaWEk3WEc0Z0lDOHFLbHh1SUNBZ0tpQkxaWGxqYkc5aGF5QmpiR2xsYm5RZ1NVUnpJSFJ2SUdWNFkyeDFaR1VnZDJobGJpQmxlSFJ5WVdOMGFXNW5JSEp2YkdWeklHWnliMjBnWUhKbGMyOTFjbU5sWDJGalkyVnpjMkF1WEc0Z0lDQXFJRUJrWldaaGRXeDBJRnRjSW1GalkyOTFiblJjSWwxY2JpQWdJQ292WEc0Z0lHVjRZMngxWkdWa1EyeHBaVzUwY3o4NklITjBjbWx1WjF0ZE8xeHVmVnh1WEc1bGVIQnZjblFnWTJ4aGMzTWdRWFYwYUZObGNuWnBZMlVnZTF4dUlDQndjbWwyWVhSbElISmxZV1J2Ym14NUlIWmxjbWxtZVZSdmEyVnVPaUJpYjI5c1pXRnVPMXh1SUNCd2NtbDJZWFJsSUhKbFlXUnZibXg1SUhabGNtbG1lVlZ5YkRvZ2MzUnlhVzVuTzF4dUlDQndjbWwyWVhSbElISmxZV1J2Ym14NUlHTnNiMk5yVkc5c1pYSmhibU5sVTJWamIyNWtjem9nYm5WdFltVnlPMXh1SUNCd2NtbDJZWFJsSUhKbFlXUnZibXg1SUdWNFkyeDFaR1ZrUTJ4cFpXNTBjem9nYzNSeWFXNW5XMTA3WEc0Z0lIQnlhWFpoZEdVZ2FuZHJjem9nVW1WMGRYSnVWSGx3WlR4MGVYQmxiMllnWTNKbFlYUmxVbVZ0YjNSbFNsZExVMlYwUGlCOElIVnVaR1ZtYVc1bFpEdGNibHh1SUNCamIyNXpkSEoxWTNSdmNpaHZjSFJwYjI1ek9pQkJkWFJvVTJWeWRtbGpaVTl3ZEdsdmJuTWdQU0I3ZlNrZ2UxeHVJQ0FnSUhSb2FYTXVkbVZ5YVdaNVZHOXJaVzRnUFNBaElXOXdkR2x2Ym5NdWRtVnlhV1o1Vkc5clpXNGdKaVlnSVNGdmNIUnBiMjV6TG5abGNtbG1lVlZ5YkR0Y2JpQWdJQ0IwYUdsekxuWmxjbWxtZVZWeWJDQTlJRzl3ZEdsdmJuTXVkbVZ5YVdaNVZYSnNJRDgvSUZ3aVhDSTdYRzRnSUNBZ2RHaHBjeTVqYkc5amExUnZiR1Z5WVc1alpWTmxZMjl1WkhNZ1BTQnZjSFJwYjI1ekxtTnNiMk5yVkc5c1pYSmhibU5sVTJWamIyNWtjeUEvUHlBMU8xeHVJQ0FnSUhSb2FYTXVaWGhqYkhWa1pXUkRiR2xsYm5SeklEMGdiM0IwYVc5dWN5NWxlR05zZFdSbFpFTnNhV1Z1ZEhNZ1B6OGdXMXdpWVdOamIzVnVkRndpWFR0Y2JpQWdmVnh1WEc0Z0lHZGxkRlJ2YTJWdVVHRjViRzloWkNocWQzUTZJSE4wY21sdVp5azZJRXRsZVdOc2IyRnJRV05qWlhOelZHOXJaVzVRWVhsc2IyRmtJSHdnYm5Wc2JDQjdYRzRnSUNBZ2NtVjBkWEp1SUdkbGRGUnZhMlZ1VUdGNWJHOWhaQ2hxZDNRcE8xeHVJQ0I5WEc1Y2JpQWdaMlYwVW05c1pYTW9hbmQwT2lCemRISnBibWNwT2lCemRISnBibWRiWFNCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVpYaDBjbUZqZEV0bGVXTnNiMkZyVW05c1pYTW9kR2hwY3k1blpYUlViMnRsYmxCaGVXeHZZV1FvYW5kMEtTazdYRzRnSUgxY2JseHVJQ0JuWlhSVmMyVnlLR3AzZERvZ2MzUnlhVzVuS1RvZ1MyVjVZMnh2WVd0VmMyVnlJSHdnZFc1a1pXWnBibVZrSUh0Y2JpQWdJQ0J5WlhSMWNtNGdaMlYwVlhObGNpaHFkM1FwTzF4dUlDQjlYRzVjYmlBZ1pYaDBjbUZqZEV0bGVXTnNiMkZyVW05c1pYTW9jR0Y1Ykc5aFpEb2dTMlY1WTJ4dllXdEJZMk5sYzNOVWIydGxibEJoZVd4dllXUWdmQ0J1ZFd4c0tUb2djM1J5YVc1blcxMGdlMXh1SUNBZ0lISmxkSFZ5YmlCbGVIUnlZV04wUzJWNVkyeHZZV3RTYjJ4bGN5aHdZWGxzYjJGa0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJGZUhSeVlXTjBjeUJqYkdsbGJuUWdjbTlzWlhNZ1puSnZiU0IwYUdVZ1lISmxjMjkxY21ObFgyRmpZMlZ6YzJBZ1kyeGhhVzBzSUdWNFkyeDFaR2x1WjF4dUlDQWdLaUIwYUdVZ1kyOXVabWxuZFhKbFpDQmdaWGhqYkhWa1pXUkRiR2xsYm5SellDQW9aR1ZtWVhWc2REb2dZRnRjSW1GalkyOTFiblJjSWwxZ0tTNWNiaUFnSUNvdlhHNGdJR1Y0ZEhKaFkzUkRiR2xsYm5SU2IyeGxjeWhjYmlBZ0lDQndZWGxzYjJGa09pQkxaWGxqYkc5aGEwRmpZMlZ6YzFSdmEyVnVVR0Y1Ykc5aFpDQjhJRzUxYkd4Y2JpQWdLVG9nYzNSeWFXNW5XMTBnZTF4dUlDQWdJSEpsZEhWeWJpQm5aWFJEYkdsbGJuUlNiMnhsY3lod1lYbHNiMkZrTENCMGFHbHpMbVY0WTJ4MVpHVmtRMnhwWlc1MGN5azdYRzRnSUgxY2JseHVJQ0JuWlhSU1pXRnNiVVp5YjIxSmMzTjFaWElvYW5kME9pQnpkSEpwYm1jcE9pQnpkSEpwYm1jZ2UxeHVJQ0FnSUhKbGRIVnliaUJuWlhSU1pXRnNiVVp5YjIxSmMzTjFaWElvYW5kMEtUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJXWVd4cFpHRjBaWE1nWVNCS1YxUTZYRzRnSUNBcUlDMGdTVzRnS2lwMlpYSnBabmtnYlc5a1pTb3FPaUIyWlhKcFptbGxjeUIwYUdVZ2MybG5ibUYwZFhKbElHRm5ZV2x1YzNRZ2RHaGxJRXRsZVdOc2IyRnJJRXBYUzFOY2JpQWdJQ29nSUNCbGJtUndiMmx1ZENCMWMybHVaeUJnYW05elpTNXFkM1JXWlhKcFpubGdMQ0IwYUdWdUlISmxkSFZ5Ym5NZ2RHaGxJSFpsY21sbWFXVmtJSEJoZVd4dllXUXVYRzRnSUNBcUlDMGdTVzRnS2lwa1pXTnZaR1V0YjI1c2VTQnRiMlJsS2lvNklHUmxZMjlrWlhNZ2RHaGxJRXBYVkNCM2FYUm9iM1YwSUhabGNtbG1hV05oZEdsdmJpQmhibVJjYmlBZ0lDb2dJQ0J5WlhSMWNtNXpJSFJvWlNCd1lYbHNiMkZrSUNodmNpQjBhSEp2ZDNNZ2FXWWdkVzV3WVhKelpXRmliR1VwTGx4dUlDQWdLbHh1SUNBZ0tpQkFkR2h5YjNkeklIdEJkWFJvYjNKcGVtRjBhVzl1UlhKeWIzSjlJSGRvWlc0Z2RHaGxJSFJ2YTJWdUlHbHpJR2x1ZG1Gc2FXUXNJR1Y0Y0dseVpXUXNJRzl5WEc0Z0lDQXFJQ0FnYzJsbmJtRjBkWEpsSUhabGNtbG1hV05oZEdsdmJpQm1ZV2xzY3k1Y2JpQWdJQ292WEc0Z0lHRnplVzVqSUdGemMyVnlkRlpoYkdsa1ZHOXJaVzRvWEc0Z0lDQWdhbmQwT2lCemRISnBibWRjYmlBZ0tUb2dVSEp2YldselpUeExaWGxqYkc5aGEwRmpZMlZ6YzFSdmEyVnVVR0Y1Ykc5aFpENGdlMXh1SUNBZ0lHbG1JQ2gwYUdsekxuWmxjbWxtZVZSdmEyVnVLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1MlpYSnBabmxCWjJGcGJuTjBTbmRyY3locWQzUXBPMXh1SUNBZ0lIMWNiaUFnSUNCamIyNXpkQ0J3WVhsc2IyRmtJRDBnZEdocGN5NW5aWFJVYjJ0bGJsQmhlV3h2WVdRb2FuZDBLVHRjYmlBZ0lDQnBaaUFvSVhCaGVXeHZZV1FwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCQmRYUm9iM0pwZW1GMGFXOXVSWEp5YjNJb1hDSkpiblpoYkdsa0lIUnZhMlZ1WENJcE8xeHVJQ0FnSUgxY2JpQWdJQ0J5WlhSMWNtNGdjR0Y1Ykc5aFpEdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJXWlhKcFptbGxjeUIwYUdVZ1NsZFVJSE5wWjI1aGRIVnlaU0JoWjJGcGJuTjBJSFJvWlNCTFpYbGpiRzloYXlCS1YwdFRJR1Z1WkhCdmFXNTBMbHh1SUNBZ0tpQk1ZWHBwYkhrZ1kzSmxZWFJsY3lCMGFHVWdTbGRMVXlCclpYbHpkRzl5WlNCdmJpQm1hWEp6ZENCallXeHNMbHh1SUNBZ0tpOWNiaUFnY0hKcGRtRjBaU0JoYzNsdVl5QjJaWEpwWm5sQloyRnBibk4wU25kcmN5aGNiaUFnSUNCcWQzUTZJSE4wY21sdVoxeHVJQ0FwT2lCUWNtOXRhWE5sUEV0bGVXTnNiMkZyUVdOalpYTnpWRzlyWlc1UVlYbHNiMkZrUGlCN1hHNGdJQ0FnYVdZZ0tDRjBhR2x6TG1wM2EzTXBJSHRjYmlBZ0lDQWdJSFJvYVhNdWFuZHJjeUE5SUdOeVpXRjBaVkpsYlc5MFpVcFhTMU5sZENodVpYY2dWVkpNS0hSb2FYTXVkbVZ5YVdaNVZYSnNLU2s3WEc0Z0lDQWdmVnh1SUNBZ0lIUnllU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQjdJSEJoZVd4dllXUWdmU0E5SUdGM1lXbDBJR3AzZEZabGNtbG1lU2hxZDNRc0lIUm9hWE11YW5kcmN5d2dlMXh1SUNBZ0lDQWdJQ0JqYkc5amExUnZiR1Z5WVc1alpUb2dZQ1I3ZEdocGN5NWpiRzlqYTFSdmJHVnlZVzVqWlZObFkyOXVaSE45YzJBc1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lISmxkSFZ5YmlCd1lYbHNiMkZrSUdGeklIVnVhMjV2ZDI0Z1lYTWdTMlY1WTJ4dllXdEJZMk5sYzNOVWIydGxibEJoZVd4dllXUTdYRzRnSUNBZ2ZTQmpZWFJqYUNBb1pUb2dZVzU1S1NCN1hHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1FYVjBhRzl5YVhwaGRHbHZia1Z5Y205eUtGd2lTVzUyWVd4cFpDQjBiMnRsYmpvZ1hDSWdLeUFvWlQ4dWJXVnpjMkZuWlNBL1B5QmxLU2s3WEc0Z0lDQWdmVnh1SUNCOVhHNTlYRzRpWFgwPSJdfQ==
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbmVzdC9hdXRoU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7OztHQVVHO0FBQ0gsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsT0FBTyxFQUNQLGNBQWMsR0FDZixtQkFBZ0I7QUErQmpCLE1BQU0sT0FBTyxXQUFXO0lBT3RCLFlBQVksVUFBOEIsRUFBRTtRQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsZUFBZSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELDBCQUEwQjtRQUN4QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFXO1FBQ3pCLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxRQUFRLENBQUMsR0FBVztRQUNsQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELE9BQU8sQ0FBQyxHQUFXO1FBQ2pCLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxPQUEwQztRQUM3RCxPQUFPLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxrQkFBa0IsQ0FDaEIsT0FBMEM7UUFFMUMsT0FBTyxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsR0FBVztRQUM1QixPQUFPLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxLQUFLLENBQUMsZ0JBQWdCLENBQ3BCLEdBQVc7UUFFWCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksa0JBQWtCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7O09BR0c7SUFDSyxLQUFLLENBQUMsaUJBQWlCLENBQzdCLEdBQVc7UUFFWCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0gsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNsRCxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMscUJBQXFCLEdBQUc7YUFDakQsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxPQUFnRCxDQUFDO1FBQzFELENBQUM7UUFBQyxPQUFPLENBQU0sRUFBRSxDQUFDO1lBQ2hCLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0RSxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbW9kdWxlIGludGVncmF0aW9ucy9uZXN0L2F1dGhTZXJ2aWNlXG4gKiBAc3VtbWFyeSBOZXN0LWNvbXBhdGlibGUgYXV0aGVudGljYXRpb24gc2VydmljZSBoZWxwZXJzLlxuICogQGRlc2NyaXB0aW9uIFJlcXVlc3QtY29udGV4dC1hd2FyZSBhdXRoIGhlbHBlcnMgZm9yIE5lc3QgYXBwbGljYXRpb25zIHVzaW5nIERlY2FmIGludGVncmF0aW9uIHBhdHRlcm5zLlxuICpcbiAqIFN1cHBvcnRzIHR3byBtb2RlczpcbiAqIC0gKipWZXJpZnkgbW9kZSoqIChkZWZhdWx0IHdoZW4gYHZlcmlmeVVybGAgaXMgc2V0KTogdmFsaWRhdGVzIHRoZSBKV1Qgc2lnbmF0dXJlXG4gKiAgIGFnYWluc3QgdGhlIEtleWNsb2FrIEpXS1MgZW5kcG9pbnQgdXNpbmcgYGpvc2Uuand0VmVyaWZ5YC5cbiAqIC0gKipEZWNvZGUtb25seSBtb2RlKiogKHdoZW4gYHZlcmlmeVRva2VuYCBpcyBmYWxzZSAvIGB2ZXJpZnlVcmxgIGlzIGVtcHR5KTpcbiAqICAgZGVjb2RlcyB0aGUgSldUIHdpdGhvdXQgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiAoZGV2L2xvY2FsIG1vZGUpLlxuICovXG5pbXBvcnQgeyBBdXRob3JpemF0aW9uRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IGNyZWF0ZVJlbW90ZUpXS1NldCwgand0VmVyaWZ5IH0gZnJvbSBcImpvc2VcIjtcbmltcG9ydCB7XG4gIGV4dHJhY3RLZXljbG9ha1JvbGVzLFxuICBnZXRSZWFsbUZyb21Jc3N1ZXIsXG4gIGdldFRva2VuUGF5bG9hZCxcbiAgZ2V0VXNlcixcbiAgZ2V0Q2xpZW50Um9sZXMsXG59IGZyb20gXCIuL3V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEtleWNsb2FrQWNjZXNzVG9rZW5QYXlsb2FkLCBLZXljbG9ha1VzZXIgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSB7QGxpbmsgQXV0aFNlcnZpY2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhTZXJ2aWNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHZlcmlmeSB0aGUgSldUIHNpZ25hdHVyZSBhZ2FpbnN0IHRoZSBLZXljbG9hayBKV0tTIGVuZHBvaW50LlxuICAgKiBXaGVuIGBmYWxzZWAgKG9yIGB2ZXJpZnlVcmxgIGlzIGVtcHR5KSwgdG9rZW5zIGFyZSBkZWNvZGVkIHdpdGhvdXRcbiAgICogc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiAoZGV2L2xvY2FsIG1vZGUgb25seSkuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB2ZXJpZnlUb2tlbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgS2V5Y2xvYWsgSldLUyBVUkwgKGUuZy4gYGh0dHBzOi8va2V5Y2xvYWsvcmVhbG1zL215cmVhbG0vcHJvdG9jb2wvb3BlbmlkLWNvbm5lY3QvY2VydHNgKS5cbiAgICogUmVxdWlyZWQgd2hlbiBgdmVyaWZ5VG9rZW5gIGlzIGB0cnVlYC5cbiAgICovXG4gIHZlcmlmeVVybD86IHN0cmluZztcbiAgLyoqXG4gICAqIENsb2NrIHRvbGVyYW5jZSBmb3IgSldUIGV4cGlyeSB2ZXJpZmljYXRpb24gKGluIHNlY29uZHMpLlxuICAgKiBAZGVmYXVsdCA1XG4gICAqL1xuICBjbG9ja1RvbGVyYW5jZVNlY29uZHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBLZXljbG9hayBjbGllbnQgSURzIHRvIGV4Y2x1ZGUgd2hlbiBleHRyYWN0aW5nIHJvbGVzIGZyb20gYHJlc291cmNlX2FjY2Vzc2AuXG4gICAqIEBkZWZhdWx0IFtcImFjY291bnRcIl1cbiAgICovXG4gIGV4Y2x1ZGVkQ2xpZW50cz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHZlcmlmeVRva2VuOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IHZlcmlmeVVybDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGNsb2NrVG9sZXJhbmNlU2Vjb25kczogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGV4Y2x1ZGVkQ2xpZW50czogc3RyaW5nW107XG4gIHByaXZhdGUgandrczogUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlUmVtb3RlSldLU2V0PiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBBdXRoU2VydmljZU9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMudmVyaWZ5VG9rZW4gPSAhIW9wdGlvbnMudmVyaWZ5VG9rZW4gJiYgISFvcHRpb25zLnZlcmlmeVVybDtcbiAgICB0aGlzLnZlcmlmeVVybCA9IG9wdGlvbnMudmVyaWZ5VXJsID8/IFwiXCI7XG4gICAgdGhpcy5jbG9ja1RvbGVyYW5jZVNlY29uZHMgPSBvcHRpb25zLmNsb2NrVG9sZXJhbmNlU2Vjb25kcyA/PyA1O1xuICAgIHRoaXMuZXhjbHVkZWRDbGllbnRzID0gb3B0aW9ucy5leGNsdWRlZENsaWVudHMgPz8gW1wiYWNjb3VudFwiXTtcbiAgfVxuXG4gIGlzVG9rZW5WZXJpZmljYXRpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZlcmlmeVRva2VuO1xuICB9XG5cbiAgZ2V0VG9rZW5QYXlsb2FkKGp3dDogc3RyaW5nKTogS2V5Y2xvYWtBY2Nlc3NUb2tlblBheWxvYWQgfCBudWxsIHtcbiAgICByZXR1cm4gZ2V0VG9rZW5QYXlsb2FkKGp3dCk7XG4gIH1cblxuICBnZXRSb2xlcyhqd3Q6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5leHRyYWN0S2V5Y2xvYWtSb2xlcyh0aGlzLmdldFRva2VuUGF5bG9hZChqd3QpKTtcbiAgfVxuXG4gIGdldFVzZXIoand0OiBzdHJpbmcpOiBLZXljbG9ha1VzZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBnZXRVc2VyKGp3dCk7XG4gIH1cblxuICBleHRyYWN0S2V5Y2xvYWtSb2xlcyhwYXlsb2FkOiBLZXljbG9ha0FjY2Vzc1Rva2VuUGF5bG9hZCB8IG51bGwpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGV4dHJhY3RLZXljbG9ha1JvbGVzKHBheWxvYWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIGNsaWVudCByb2xlcyBmcm9tIHRoZSBgcmVzb3VyY2VfYWNjZXNzYCBjbGFpbSwgZXhjbHVkaW5nXG4gICAqIHRoZSBjb25maWd1cmVkIGBleGNsdWRlZENsaWVudHNgIChkZWZhdWx0OiBgW1wiYWNjb3VudFwiXWApLlxuICAgKi9cbiAgZXh0cmFjdENsaWVudFJvbGVzKFxuICAgIHBheWxvYWQ6IEtleWNsb2FrQWNjZXNzVG9rZW5QYXlsb2FkIHwgbnVsbFxuICApOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGdldENsaWVudFJvbGVzKHBheWxvYWQsIHRoaXMuZXhjbHVkZWRDbGllbnRzKTtcbiAgfVxuXG4gIGdldFJlYWxtRnJvbUlzc3Vlcihqd3Q6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldFJlYWxtRnJvbUlzc3Vlcihqd3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhIEpXVDpcbiAgICogLSBJbiAqKnZlcmlmeSBtb2RlKio6IHZlcmlmaWVzIHRoZSBzaWduYXR1cmUgYWdhaW5zdCB0aGUgS2V5Y2xvYWsgSldLU1xuICAgKiAgIGVuZHBvaW50IHVzaW5nIGBqb3NlLmp3dFZlcmlmeWAsIHRoZW4gcmV0dXJucyB0aGUgdmVyaWZpZWQgcGF5bG9hZC5cbiAgICogLSBJbiAqKmRlY29kZS1vbmx5IG1vZGUqKjogZGVjb2RlcyB0aGUgSldUIHdpdGhvdXQgdmVyaWZpY2F0aW9uIGFuZFxuICAgKiAgIHJldHVybnMgdGhlIHBheWxvYWQgKG9yIHRocm93cyBpZiB1bnBhcnNlYWJsZSkuXG4gICAqXG4gICAqIEB0aHJvd3Mge0F1dGhvcml6YXRpb25FcnJvcn0gd2hlbiB0aGUgdG9rZW4gaXMgaW52YWxpZCwgZXhwaXJlZCwgb3JcbiAgICogICBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxzLlxuICAgKi9cbiAgYXN5bmMgYXNzZXJ0VmFsaWRUb2tlbihcbiAgICBqd3Q6IHN0cmluZ1xuICApOiBQcm9taXNlPEtleWNsb2FrQWNjZXNzVG9rZW5QYXlsb2FkPiB7XG4gICAgaWYgKHRoaXMudmVyaWZ5VG9rZW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnZlcmlmeUFnYWluc3RKd2tzKGp3dCk7XG4gICAgfVxuICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmdldFRva2VuUGF5bG9hZChqd3QpO1xuICAgIGlmICghcGF5bG9hZCkge1xuICAgICAgdGhyb3cgbmV3IEF1dGhvcml6YXRpb25FcnJvcihcIkludmFsaWQgdG9rZW5cIik7XG4gICAgfVxuICAgIHJldHVybiBwYXlsb2FkO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIHRoZSBKV1Qgc2lnbmF0dXJlIGFnYWluc3QgdGhlIEtleWNsb2FrIEpXS1MgZW5kcG9pbnQuXG4gICAqIExhemlseSBjcmVhdGVzIHRoZSBKV0tTIGtleXN0b3JlIG9uIGZpcnN0IGNhbGwuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHZlcmlmeUFnYWluc3RKd2tzKFxuICAgIGp3dDogc3RyaW5nXG4gICk6IFByb21pc2U8S2V5Y2xvYWtBY2Nlc3NUb2tlblBheWxvYWQ+IHtcbiAgICBpZiAoIXRoaXMuandrcykge1xuICAgICAgdGhpcy5qd2tzID0gY3JlYXRlUmVtb3RlSldLU2V0KG5ldyBVUkwodGhpcy52ZXJpZnlVcmwpKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHsgcGF5bG9hZCB9ID0gYXdhaXQgand0VmVyaWZ5KGp3dCwgdGhpcy5qd2tzLCB7XG4gICAgICAgIGNsb2NrVG9sZXJhbmNlOiBgJHt0aGlzLmNsb2NrVG9sZXJhbmNlU2Vjb25kc31zYCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHBheWxvYWQgYXMgdW5rbm93biBhcyBLZXljbG9ha0FjY2Vzc1Rva2VuUGF5bG9hZDtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRocm93IG5ldyBBdXRob3JpemF0aW9uRXJyb3IoXCJJbnZhbGlkIHRva2VuOiBcIiArIChlPy5tZXNzYWdlID8/IGUpKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
91
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhdXRoU2VydmljZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7Ozs7OztHQVVHO0FBQ0gseUNBQW9EO0FBQ3BELCtCQUFxRDtBQUNyRCx5Q0FBaUg7QUFDakgsTUFBYSxXQUFXO0lBQ3BCLFlBQVksT0FBTyxHQUFHLEVBQUU7UUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUNoRSxJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxPQUFPLENBQUMscUJBQXFCLElBQUksQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLGVBQWUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFDRCwwQkFBMEI7UUFDdEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFDRCxlQUFlLENBQUMsR0FBRztRQUNmLE9BQU8sSUFBQSwwQkFBZSxFQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxRQUFRLENBQUMsR0FBRztRQUNSLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBQ0QsT0FBTyxDQUFDLEdBQUc7UUFDUCxPQUFPLElBQUEsa0JBQU8sRUFBQyxHQUFHLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBQ0Qsb0JBQW9CLENBQUMsT0FBTztRQUN4QixPQUFPLElBQUEsK0JBQW9CLEVBQUMsT0FBTyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNEOzs7T0FHRztJQUNILGtCQUFrQixDQUFDLE9BQU87UUFDdEIsT0FBTyxJQUFBLHlCQUFjLEVBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBQ0Qsa0JBQWtCLENBQUMsR0FBRztRQUNsQixPQUFPLElBQUEsNkJBQWtCLEVBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNEOzs7Ozs7Ozs7T0FTRztJQUNILEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHO1FBQ3RCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNYLE1BQU0sSUFBSSx5QkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNsRCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUNEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUEseUJBQWtCLEVBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUNELElBQUksQ0FBQztZQUNELE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLElBQUEsZ0JBQVMsRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDaEQsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixHQUFHO2FBQ25ELENBQUMsQ0FBQztZQUNILE9BQU8sT0FBTyxDQUFDO1FBQ25CLENBQUM7UUFDRCxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1AsTUFBTSxJQUFJLHlCQUFrQixDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLENBQUM7SUFDTCxDQUFDO0NBQ0o7QUF0RUQsa0NBc0VDO0FBQ0QsMHNSQUEwc1IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBtb2R1bGUgaW50ZWdyYXRpb25zL25lc3QvYXV0aFNlcnZpY2VcbiAqIEBzdW1tYXJ5IE5lc3QtY29tcGF0aWJsZSBhdXRoZW50aWNhdGlvbiBzZXJ2aWNlIGhlbHBlcnMuXG4gKiBAZGVzY3JpcHRpb24gUmVxdWVzdC1jb250ZXh0LWF3YXJlIGF1dGggaGVscGVycyBmb3IgTmVzdCBhcHBsaWNhdGlvbnMgdXNpbmcgRGVjYWYgaW50ZWdyYXRpb24gcGF0dGVybnMuXG4gKlxuICogU3VwcG9ydHMgdHdvIG1vZGVzOlxuICogLSAqKlZlcmlmeSBtb2RlKiogKGRlZmF1bHQgd2hlbiBgdmVyaWZ5VXJsYCBpcyBzZXQpOiB2YWxpZGF0ZXMgdGhlIEpXVCBzaWduYXR1cmVcbiAqICAgYWdhaW5zdCB0aGUgS2V5Y2xvYWsgSldLUyBlbmRwb2ludCB1c2luZyBgam9zZS5qd3RWZXJpZnlgLlxuICogLSAqKkRlY29kZS1vbmx5IG1vZGUqKiAod2hlbiBgdmVyaWZ5VG9rZW5gIGlzIGZhbHNlIC8gYHZlcmlmeVVybGAgaXMgZW1wdHkpOlxuICogICBkZWNvZGVzIHRoZSBKV1Qgd2l0aG91dCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIChkZXYvbG9jYWwgbW9kZSkuXG4gKi9cbmltcG9ydCB7IEF1dGhvcml6YXRpb25FcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgY3JlYXRlUmVtb3RlSldLU2V0LCBqd3RWZXJpZnkgfSBmcm9tIFwiam9zZVwiO1xuaW1wb3J0IHsgZXh0cmFjdEtleWNsb2FrUm9sZXMsIGdldFJlYWxtRnJvbUlzc3VlciwgZ2V0VG9rZW5QYXlsb2FkLCBnZXRVc2VyLCBnZXRDbGllbnRSb2xlcywgfSBmcm9tIFwiLi91dGlscy5qc1wiO1xuZXhwb3J0IGNsYXNzIEF1dGhTZXJ2aWNlIHtcbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICAgICAgdGhpcy52ZXJpZnlUb2tlbiA9ICEhb3B0aW9ucy52ZXJpZnlUb2tlbiAmJiAhIW9wdGlvbnMudmVyaWZ5VXJsO1xuICAgICAgICB0aGlzLnZlcmlmeVVybCA9IG9wdGlvbnMudmVyaWZ5VXJsID8/IFwiXCI7XG4gICAgICAgIHRoaXMuY2xvY2tUb2xlcmFuY2VTZWNvbmRzID0gb3B0aW9ucy5jbG9ja1RvbGVyYW5jZVNlY29uZHMgPz8gNTtcbiAgICAgICAgdGhpcy5leGNsdWRlZENsaWVudHMgPSBvcHRpb25zLmV4Y2x1ZGVkQ2xpZW50cyA/PyBbXCJhY2NvdW50XCJdO1xuICAgIH1cbiAgICBpc1Rva2VuVmVyaWZpY2F0aW9uRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmVyaWZ5VG9rZW47XG4gICAgfVxuICAgIGdldFRva2VuUGF5bG9hZChqd3QpIHtcbiAgICAgICAgcmV0dXJuIGdldFRva2VuUGF5bG9hZChqd3QpO1xuICAgIH1cbiAgICBnZXRSb2xlcyhqd3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXh0cmFjdEtleWNsb2FrUm9sZXModGhpcy5nZXRUb2tlblBheWxvYWQoand0KSk7XG4gICAgfVxuICAgIGdldFVzZXIoand0KSB7XG4gICAgICAgIHJldHVybiBnZXRVc2VyKGp3dCk7XG4gICAgfVxuICAgIGV4dHJhY3RLZXljbG9ha1JvbGVzKHBheWxvYWQpIHtcbiAgICAgICAgcmV0dXJuIGV4dHJhY3RLZXljbG9ha1JvbGVzKHBheWxvYWQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFeHRyYWN0cyBjbGllbnQgcm9sZXMgZnJvbSB0aGUgYHJlc291cmNlX2FjY2Vzc2AgY2xhaW0sIGV4Y2x1ZGluZ1xuICAgICAqIHRoZSBjb25maWd1cmVkIGBleGNsdWRlZENsaWVudHNgIChkZWZhdWx0OiBgW1wiYWNjb3VudFwiXWApLlxuICAgICAqL1xuICAgIGV4dHJhY3RDbGllbnRSb2xlcyhwYXlsb2FkKSB7XG4gICAgICAgIHJldHVybiBnZXRDbGllbnRSb2xlcyhwYXlsb2FkLCB0aGlzLmV4Y2x1ZGVkQ2xpZW50cyk7XG4gICAgfVxuICAgIGdldFJlYWxtRnJvbUlzc3Vlcihqd3QpIHtcbiAgICAgICAgcmV0dXJuIGdldFJlYWxtRnJvbUlzc3Vlcihqd3QpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZXMgYSBKV1Q6XG4gICAgICogLSBJbiAqKnZlcmlmeSBtb2RlKio6IHZlcmlmaWVzIHRoZSBzaWduYXR1cmUgYWdhaW5zdCB0aGUgS2V5Y2xvYWsgSldLU1xuICAgICAqICAgZW5kcG9pbnQgdXNpbmcgYGpvc2Uuand0VmVyaWZ5YCwgdGhlbiByZXR1cm5zIHRoZSB2ZXJpZmllZCBwYXlsb2FkLlxuICAgICAqIC0gSW4gKipkZWNvZGUtb25seSBtb2RlKio6IGRlY29kZXMgdGhlIEpXVCB3aXRob3V0IHZlcmlmaWNhdGlvbiBhbmRcbiAgICAgKiAgIHJldHVybnMgdGhlIHBheWxvYWQgKG9yIHRocm93cyBpZiB1bnBhcnNlYWJsZSkuXG4gICAgICpcbiAgICAgKiBAdGhyb3dzIHtBdXRob3JpemF0aW9uRXJyb3J9IHdoZW4gdGhlIHRva2VuIGlzIGludmFsaWQsIGV4cGlyZWQsIG9yXG4gICAgICogICBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIGZhaWxzLlxuICAgICAqL1xuICAgIGFzeW5jIGFzc2VydFZhbGlkVG9rZW4oand0KSB7XG4gICAgICAgIGlmICh0aGlzLnZlcmlmeVRva2VuKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52ZXJpZnlBZ2FpbnN0Sndrcyhqd3QpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB0aGlzLmdldFRva2VuUGF5bG9hZChqd3QpO1xuICAgICAgICBpZiAoIXBheWxvYWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBdXRob3JpemF0aW9uRXJyb3IoXCJJbnZhbGlkIHRva2VuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBWZXJpZmllcyB0aGUgSldUIHNpZ25hdHVyZSBhZ2FpbnN0IHRoZSBLZXljbG9hayBKV0tTIGVuZHBvaW50LlxuICAgICAqIExhemlseSBjcmVhdGVzIHRoZSBKV0tTIGtleXN0b3JlIG9uIGZpcnN0IGNhbGwuXG4gICAgICovXG4gICAgYXN5bmMgdmVyaWZ5QWdhaW5zdEp3a3Moand0KSB7XG4gICAgICAgIGlmICghdGhpcy5qd2tzKSB7XG4gICAgICAgICAgICB0aGlzLmp3a3MgPSBjcmVhdGVSZW1vdGVKV0tTZXQobmV3IFVSTCh0aGlzLnZlcmlmeVVybCkpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IHBheWxvYWQgfSA9IGF3YWl0IGp3dFZlcmlmeShqd3QsIHRoaXMuandrcywge1xuICAgICAgICAgICAgICAgIGNsb2NrVG9sZXJhbmNlOiBgJHt0aGlzLmNsb2NrVG9sZXJhbmNlU2Vjb25kc31zYCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBdXRob3JpemF0aW9uRXJyb3IoXCJJbnZhbGlkIHRva2VuOiBcIiArIChlPy5tZXNzYWdlID8/IGUpKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVlYVjBhRk5sY25acFkyVXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lJdUxpOHVMaTh1TGk5emNtTXZibVZ6ZEM5aGRYUm9VMlZ5ZG1salpTNTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZCUVRzN096czdPenM3T3p0SFFWVkhPMEZCUTBnc1QwRkJUeXhGUVVGRkxHdENRVUZyUWl4RlFVRkZMRTFCUVUwc1owSkJRV2RDTEVOQlFVTTdRVUZEY0VRc1QwRkJUeXhGUVVGRkxHdENRVUZyUWl4RlFVRkZMRk5CUVZNc1JVRkJSU3hOUVVGTkxFMUJRVTBzUTBGQlF6dEJRVU55UkN4UFFVRlBMRVZCUTB3c2IwSkJRVzlDTEVWQlEzQkNMR3RDUVVGclFpeEZRVU5zUWl4bFFVRmxMRVZCUTJZc1QwRkJUeXhGUVVOUUxHTkJRV01zUjBGRFppeHRRa0ZCWjBJN1FVRXJRbXBDTEUxQlFVMHNUMEZCVHl4WFFVRlhPMGxCVDNSQ0xGbEJRVmtzVlVGQk9FSXNSVUZCUlR0UlFVTXhReXhKUVVGSkxFTkJRVU1zVjBGQlZ5eEhRVUZITEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1YwRkJWeXhKUVVGSkxFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNVMEZCVXl4RFFVRkRPMUZCUTJoRkxFbEJRVWtzUTBGQlF5eFRRVUZUTEVkQlFVY3NUMEZCVHl4RFFVRkRMRk5CUVZNc1NVRkJTU3hGUVVGRkxFTkJRVU03VVVGRGVrTXNTVUZCU1N4RFFVRkRMSEZDUVVGeFFpeEhRVUZITEU5QlFVOHNRMEZCUXl4eFFrRkJjVUlzU1VGQlNTeERRVUZETEVOQlFVTTdVVUZEYUVVc1NVRkJTU3hEUVVGRExHVkJRV1VzUjBGQlJ5eFBRVUZQTEVOQlFVTXNaVUZCWlN4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03U1VGRGFFVXNRMEZCUXp0SlFVVkVMREJDUVVFd1FqdFJRVU40UWl4UFFVRlBMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU03U1VGRE1VSXNRMEZCUXp0SlFVVkVMR1ZCUVdVc1EwRkJReXhIUVVGWE8xRkJRM3BDTEU5QlFVOHNaVUZCWlN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRemxDTEVOQlFVTTdTVUZGUkN4UlFVRlJMRU5CUVVNc1IwRkJWenRSUVVOc1FpeFBRVUZQTEVsQlFVa3NRMEZCUXl4dlFrRkJiMElzUTBGQlF5eEpRVUZKTEVOQlFVTXNaVUZCWlN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRE9VUXNRMEZCUXp0SlFVVkVMRTlCUVU4c1EwRkJReXhIUVVGWE8xRkJRMnBDTEU5QlFVOHNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRM1JDTEVOQlFVTTdTVUZGUkN4dlFrRkJiMElzUTBGQlF5eFBRVUV3UXp0UlFVTTNSQ3hQUVVGUExHOUNRVUZ2UWl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wbEJRM1pETEVOQlFVTTdTVUZGUkRzN08wOUJSMGM3U1VGRFNDeHJRa0ZCYTBJc1EwRkRhRUlzVDBGQk1FTTdVVUZGTVVNc1QwRkJUeXhqUVVGakxFTkJRVU1zVDBGQlR5eEZRVUZGTEVsQlFVa3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJRenRKUVVOMlJDeERRVUZETzBsQlJVUXNhMEpCUVd0Q0xFTkJRVU1zUjBGQlZ6dFJRVU0xUWl4UFFVRlBMR3RDUVVGclFpeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTJwRExFTkJRVU03U1VGRlJEczdPenM3T3pzN08wOUJVMGM3U1VGRFNDeExRVUZMTEVOQlFVTXNaMEpCUVdkQ0xFTkJRM0JDTEVkQlFWYzdVVUZGV0N4SlFVRkpMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF6dFpRVU55UWl4UFFVRlBMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOeVF5eERRVUZETzFGQlEwUXNUVUZCVFN4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRExHVkJRV1VzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTXhReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdXVUZEWWl4TlFVRk5MRWxCUVVrc2EwSkJRV3RDTEVOQlFVTXNaVUZCWlN4RFFVRkRMRU5CUVVNN1VVRkRhRVFzUTBGQlF6dFJRVU5FTEU5QlFVOHNUMEZCVHl4RFFVRkRPMGxCUTJwQ0xFTkJRVU03U1VGRlJEczdPMDlCUjBjN1NVRkRTeXhMUVVGTExFTkJRVU1zYVVKQlFXbENMRU5CUXpkQ0xFZEJRVmM3VVVGRldDeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8xbEJRMllzU1VGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4clFrRkJhMElzUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU14UkN4RFFVRkRPMUZCUTBRc1NVRkJTU3hEUVVGRE8xbEJRMGdzVFVGQlRTeEZRVUZGTEU5QlFVOHNSVUZCUlN4SFFVRkhMRTFCUVUwc1UwRkJVeXhEUVVGRExFZEJRVWNzUlVGQlJTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RlFVRkZPMmRDUVVOc1JDeGpRVUZqTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc2NVSkJRWEZDTEVkQlFVYzdZVUZEYWtRc1EwRkJReXhEUVVGRE8xbEJRMGdzVDBGQlR5eFBRVUZuUkN4RFFVRkRPMUZCUXpGRUxFTkJRVU03VVVGQlF5eFBRVUZQTEVOQlFVMHNSVUZCUlN4RFFVRkRPMWxCUTJoQ0xFMUJRVTBzU1VGQlNTeHJRa0ZCYTBJc1EwRkJReXhwUWtGQmFVSXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hQUVVGUExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTjBSU3hEUVVGRE8wbEJRMGdzUTBGQlF6dERRVU5HSWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaUx5b3FYRzRnS2lCQWJXOWtkV3hsSUdsdWRHVm5jbUYwYVc5dWN5OXVaWE4wTDJGMWRHaFRaWEoyYVdObFhHNGdLaUJBYzNWdGJXRnllU0JPWlhOMExXTnZiWEJoZEdsaWJHVWdZWFYwYUdWdWRHbGpZWFJwYjI0Z2MyVnlkbWxqWlNCb1pXeHdaWEp6TGx4dUlDb2dRR1JsYzJOeWFYQjBhVzl1SUZKbGNYVmxjM1F0WTI5dWRHVjRkQzFoZDJGeVpTQmhkWFJvSUdobGJIQmxjbk1nWm05eUlFNWxjM1FnWVhCd2JHbGpZWFJwYjI1eklIVnphVzVuSUVSbFkyRm1JR2x1ZEdWbmNtRjBhVzl1SUhCaGRIUmxjbTV6TGx4dUlDcGNiaUFxSUZOMWNIQnZjblJ6SUhSM2J5QnRiMlJsY3pwY2JpQXFJQzBnS2lwV1pYSnBabmtnYlc5a1pTb3FJQ2hrWldaaGRXeDBJSGRvWlc0Z1lIWmxjbWxtZVZWeWJHQWdhWE1nYzJWMEtUb2dkbUZzYVdSaGRHVnpJSFJvWlNCS1YxUWdjMmxuYm1GMGRYSmxYRzRnS2lBZ0lHRm5ZV2x1YzNRZ2RHaGxJRXRsZVdOc2IyRnJJRXBYUzFNZ1pXNWtjRzlwYm5RZ2RYTnBibWNnWUdwdmMyVXVhbmQwVm1WeWFXWjVZQzVjYmlBcUlDMGdLaXBFWldOdlpHVXRiMjVzZVNCdGIyUmxLaW9nS0hkb1pXNGdZSFpsY21sbWVWUnZhMlZ1WUNCcGN5Qm1ZV3h6WlNBdklHQjJaWEpwWm5sVmNteGdJR2x6SUdWdGNIUjVLVHBjYmlBcUlDQWdaR1ZqYjJSbGN5QjBhR1VnU2xkVUlIZHBkR2h2ZFhRZ2MybG5ibUYwZFhKbElIWmxjbWxtYVdOaGRHbHZiaUFvWkdWMkwyeHZZMkZzSUcxdlpHVXBMbHh1SUNvdlhHNXBiWEJ2Y25RZ2V5QkJkWFJvYjNKcGVtRjBhVzl1UlhKeWIzSWdmU0JtY205dElGd2lRR1JsWTJGbUxYUnpMMk52Y21WY0lqdGNibWx0Y0c5eWRDQjdJR055WldGMFpWSmxiVzkwWlVwWFMxTmxkQ3dnYW5kMFZtVnlhV1o1SUgwZ1puSnZiU0JjSW1wdmMyVmNJanRjYm1sdGNHOXlkQ0I3WEc0Z0lHVjRkSEpoWTNSTFpYbGpiRzloYTFKdmJHVnpMRnh1SUNCblpYUlNaV0ZzYlVaeWIyMUpjM04xWlhJc1hHNGdJR2RsZEZSdmEyVnVVR0Y1Ykc5aFpDeGNiaUFnWjJWMFZYTmxjaXhjYmlBZ1oyVjBRMnhwWlc1MFVtOXNaWE1zWEc1OUlHWnliMjBnWENJdUwzVjBhV3h6WENJN1hHNXBiWEJ2Y25RZ2RIbHdaU0I3SUV0bGVXTnNiMkZyUVdOalpYTnpWRzlyWlc1UVlYbHNiMkZrTENCTFpYbGpiRzloYTFWelpYSWdmU0JtY205dElGd2lMaTkwZVhCbGMxd2lPMXh1WEc0dktpcGNiaUFxSUVOdmJtWnBaM1Z5WVhScGIyNGdabTl5SUhSb1pTQjdRR3hwYm1zZ1FYVjBhRk5sY25acFkyVjlMbHh1SUNvdlhHNWxlSEJ2Y25RZ2FXNTBaWEptWVdObElFRjFkR2hUWlhKMmFXTmxUM0IwYVc5dWN5QjdYRzRnSUM4cUtseHVJQ0FnS2lCWGFHVjBhR1Z5SUhSdklIWmxjbWxtZVNCMGFHVWdTbGRVSUhOcFoyNWhkSFZ5WlNCaFoyRnBibk4wSUhSb1pTQkxaWGxqYkc5aGF5QktWMHRUSUdWdVpIQnZhVzUwTGx4dUlDQWdLaUJYYUdWdUlHQm1ZV3h6WldBZ0tHOXlJR0IyWlhKcFpubFZjbXhnSUdseklHVnRjSFI1S1N3Z2RHOXJaVzV6SUdGeVpTQmtaV052WkdWa0lIZHBkR2h2ZFhSY2JpQWdJQ29nYzJsbmJtRjBkWEpsSUhabGNtbG1hV05oZEdsdmJpQW9aR1YyTDJ4dlkyRnNJRzF2WkdVZ2IyNXNlU2t1WEc0Z0lDQXFJRUJrWldaaGRXeDBJR1poYkhObFhHNGdJQ0FxTDF4dUlDQjJaWEpwWm5sVWIydGxiajg2SUdKdmIyeGxZVzQ3WEc0Z0lDOHFLbHh1SUNBZ0tpQlVhR1VnUzJWNVkyeHZZV3NnU2xkTFV5QlZVa3dnS0dVdVp5NGdZR2gwZEhCek9pOHZhMlY1WTJ4dllXc3ZjbVZoYkcxekwyMTVjbVZoYkcwdmNISnZkRzlqYjJ3dmIzQmxibWxrTFdOdmJtNWxZM1F2WTJWeWRITmdLUzVjYmlBZ0lDb2dVbVZ4ZFdseVpXUWdkMmhsYmlCZ2RtVnlhV1o1Vkc5clpXNWdJR2x6SUdCMGNuVmxZQzVjYmlBZ0lDb3ZYRzRnSUhabGNtbG1lVlZ5YkQ4NklITjBjbWx1Wnp0Y2JpQWdMeW9xWEc0Z0lDQXFJRU5zYjJOcklIUnZiR1Z5WVc1alpTQm1iM0lnU2xkVUlHVjRjR2x5ZVNCMlpYSnBabWxqWVhScGIyNGdLR2x1SUhObFkyOXVaSE1wTGx4dUlDQWdLaUJBWkdWbVlYVnNkQ0ExWEc0Z0lDQXFMMXh1SUNCamJHOWphMVJ2YkdWeVlXNWpaVk5sWTI5dVpITS9PaUJ1ZFcxaVpYSTdYRzRnSUM4cUtseHVJQ0FnS2lCTFpYbGpiRzloYXlCamJHbGxiblFnU1VSeklIUnZJR1Y0WTJ4MVpHVWdkMmhsYmlCbGVIUnlZV04wYVc1bklISnZiR1Z6SUdaeWIyMGdZSEpsYzI5MWNtTmxYMkZqWTJWemMyQXVYRzRnSUNBcUlFQmtaV1poZFd4MElGdGNJbUZqWTI5MWJuUmNJbDFjYmlBZ0lDb3ZYRzRnSUdWNFkyeDFaR1ZrUTJ4cFpXNTBjejg2SUhOMGNtbHVaMXRkTzF4dWZWeHVYRzVsZUhCdmNuUWdZMnhoYzNNZ1FYVjBhRk5sY25acFkyVWdlMXh1SUNCd2NtbDJZWFJsSUhKbFlXUnZibXg1SUhabGNtbG1lVlJ2YTJWdU9pQmliMjlzWldGdU8xeHVJQ0J3Y21sMllYUmxJSEpsWVdSdmJteDVJSFpsY21sbWVWVnliRG9nYzNSeWFXNW5PMXh1SUNCd2NtbDJZWFJsSUhKbFlXUnZibXg1SUdOc2IyTnJWRzlzWlhKaGJtTmxVMlZqYjI1a2N6b2diblZ0WW1WeU8xeHVJQ0J3Y21sMllYUmxJSEpsWVdSdmJteDVJR1Y0WTJ4MVpHVmtRMnhwWlc1MGN6b2djM1J5YVc1blcxMDdYRzRnSUhCeWFYWmhkR1VnYW5kcmN6b2dVbVYwZFhKdVZIbHdaVHgwZVhCbGIyWWdZM0psWVhSbFVtVnRiM1JsU2xkTFUyVjBQaUI4SUhWdVpHVm1hVzVsWkR0Y2JseHVJQ0JqYjI1emRISjFZM1J2Y2lodmNIUnBiMjV6T2lCQmRYUm9VMlZ5ZG1salpVOXdkR2x2Ym5NZ1BTQjdmU2tnZTF4dUlDQWdJSFJvYVhNdWRtVnlhV1o1Vkc5clpXNGdQU0FoSVc5d2RHbHZibk11ZG1WeWFXWjVWRzlyWlc0Z0ppWWdJU0Z2Y0hScGIyNXpMblpsY21sbWVWVnliRHRjYmlBZ0lDQjBhR2x6TG5abGNtbG1lVlZ5YkNBOUlHOXdkR2x2Ym5NdWRtVnlhV1o1VlhKc0lEOC9JRndpWENJN1hHNGdJQ0FnZEdocGN5NWpiRzlqYTFSdmJHVnlZVzVqWlZObFkyOXVaSE1nUFNCdmNIUnBiMjV6TG1Oc2IyTnJWRzlzWlhKaGJtTmxVMlZqYjI1a2N5QS9QeUExTzF4dUlDQWdJSFJvYVhNdVpYaGpiSFZrWldSRGJHbGxiblJ6SUQwZ2IzQjBhVzl1Y3k1bGVHTnNkV1JsWkVOc2FXVnVkSE1nUHo4Z1cxd2lZV05qYjNWdWRGd2lYVHRjYmlBZ2ZWeHVYRzRnSUdselZHOXJaVzVXWlhKcFptbGpZWFJwYjI1RmJtRmliR1ZrS0NrNklHSnZiMnhsWVc0Z2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxuWmxjbWxtZVZSdmEyVnVPMXh1SUNCOVhHNWNiaUFnWjJWMFZHOXJaVzVRWVhsc2IyRmtLR3AzZERvZ2MzUnlhVzVuS1RvZ1MyVjVZMnh2WVd0QlkyTmxjM05VYjJ0bGJsQmhlV3h2WVdRZ2ZDQnVkV3hzSUh0Y2JpQWdJQ0J5WlhSMWNtNGdaMlYwVkc5clpXNVFZWGxzYjJGa0tHcDNkQ2s3WEc0Z0lIMWNibHh1SUNCblpYUlNiMnhsY3locWQzUTZJSE4wY21sdVp5azZJSE4wY21sdVoxdGRJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVsZUhSeVlXTjBTMlY1WTJ4dllXdFNiMnhsY3loMGFHbHpMbWRsZEZSdmEyVnVVR0Y1Ykc5aFpDaHFkM1FwS1R0Y2JpQWdmVnh1WEc0Z0lHZGxkRlZ6WlhJb2FuZDBPaUJ6ZEhKcGJtY3BPaUJMWlhsamJHOWhhMVZ6WlhJZ2ZDQjFibVJsWm1sdVpXUWdlMXh1SUNBZ0lISmxkSFZ5YmlCblpYUlZjMlZ5S0dwM2RDazdYRzRnSUgxY2JseHVJQ0JsZUhSeVlXTjBTMlY1WTJ4dllXdFNiMnhsY3lod1lYbHNiMkZrT2lCTFpYbGpiRzloYTBGalkyVnpjMVJ2YTJWdVVHRjViRzloWkNCOElHNTFiR3dwT2lCemRISnBibWRiWFNCN1hHNGdJQ0FnY21WMGRYSnVJR1Y0ZEhKaFkzUkxaWGxqYkc5aGExSnZiR1Z6S0hCaGVXeHZZV1FwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFVjRkSEpoWTNSeklHTnNhV1Z1ZENCeWIyeGxjeUJtY205dElIUm9aU0JnY21WemIzVnlZMlZmWVdOalpYTnpZQ0JqYkdGcGJTd2daWGhqYkhWa2FXNW5YRzRnSUNBcUlIUm9aU0JqYjI1bWFXZDFjbVZrSUdCbGVHTnNkV1JsWkVOc2FXVnVkSE5nSUNoa1pXWmhkV3gwT2lCZ1cxd2lZV05qYjNWdWRGd2lYV0FwTGx4dUlDQWdLaTljYmlBZ1pYaDBjbUZqZEVOc2FXVnVkRkp2YkdWektGeHVJQ0FnSUhCaGVXeHZZV1E2SUV0bGVXTnNiMkZyUVdOalpYTnpWRzlyWlc1UVlYbHNiMkZrSUh3Z2JuVnNiRnh1SUNBcE9pQnpkSEpwYm1kYlhTQjdYRzRnSUNBZ2NtVjBkWEp1SUdkbGRFTnNhV1Z1ZEZKdmJHVnpLSEJoZVd4dllXUXNJSFJvYVhNdVpYaGpiSFZrWldSRGJHbGxiblJ6S1R0Y2JpQWdmVnh1WEc0Z0lHZGxkRkpsWVd4dFJuSnZiVWx6YzNWbGNpaHFkM1E2SUhOMGNtbHVaeWs2SUhOMGNtbHVaeUI3WEc0Z0lDQWdjbVYwZFhKdUlHZGxkRkpsWVd4dFJuSnZiVWx6YzNWbGNpaHFkM1FwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGWmhiR2xrWVhSbGN5QmhJRXBYVkRwY2JpQWdJQ29nTFNCSmJpQXFLblpsY21sbWVTQnRiMlJsS2lvNklIWmxjbWxtYVdWeklIUm9aU0J6YVdkdVlYUjFjbVVnWVdkaGFXNXpkQ0IwYUdVZ1MyVjVZMnh2WVdzZ1NsZExVMXh1SUNBZ0tpQWdJR1Z1WkhCdmFXNTBJSFZ6YVc1bklHQnFiM05sTG1wM2RGWmxjbWxtZVdBc0lIUm9aVzRnY21WMGRYSnVjeUIwYUdVZ2RtVnlhV1pwWldRZ2NHRjViRzloWkM1Y2JpQWdJQ29nTFNCSmJpQXFLbVJsWTI5a1pTMXZibXg1SUcxdlpHVXFLam9nWkdWamIyUmxjeUIwYUdVZ1NsZFVJSGRwZEdodmRYUWdkbVZ5YVdacFkyRjBhVzl1SUdGdVpGeHVJQ0FnS2lBZ0lISmxkSFZ5Ym5NZ2RHaGxJSEJoZVd4dllXUWdLRzl5SUhSb2NtOTNjeUJwWmlCMWJuQmhjbk5sWVdKc1pTa3VYRzRnSUNBcVhHNGdJQ0FxSUVCMGFISnZkM01nZTBGMWRHaHZjbWw2WVhScGIyNUZjbkp2Y24wZ2QyaGxiaUIwYUdVZ2RHOXJaVzRnYVhNZ2FXNTJZV3hwWkN3Z1pYaHdhWEpsWkN3Z2IzSmNiaUFnSUNvZ0lDQnphV2R1WVhSMWNtVWdkbVZ5YVdacFkyRjBhVzl1SUdaaGFXeHpMbHh1SUNBZ0tpOWNiaUFnWVhONWJtTWdZWE56WlhKMFZtRnNhV1JVYjJ0bGJpaGNiaUFnSUNCcWQzUTZJSE4wY21sdVoxeHVJQ0FwT2lCUWNtOXRhWE5sUEV0bGVXTnNiMkZyUVdOalpYTnpWRzlyWlc1UVlYbHNiMkZrUGlCN1hHNGdJQ0FnYVdZZ0tIUm9hWE11ZG1WeWFXWjVWRzlyWlc0cElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCMGFHbHpMblpsY21sbWVVRm5ZV2x1YzNSS2QydHpLR3AzZENrN1hHNGdJQ0FnZlZ4dUlDQWdJR052Ym5OMElIQmhlV3h2WVdRZ1BTQjBhR2x6TG1kbGRGUnZhMlZ1VUdGNWJHOWhaQ2hxZDNRcE8xeHVJQ0FnSUdsbUlDZ2hjR0Y1Ykc5aFpDa2dlMXh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRUYxZEdodmNtbDZZWFJwYjI1RmNuSnZjaWhjSWtsdWRtRnNhV1FnZEc5clpXNWNJaWs3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCd1lYbHNiMkZrTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlGWmxjbWxtYVdWeklIUm9aU0JLVjFRZ2MybG5ibUYwZFhKbElHRm5ZV2x1YzNRZ2RHaGxJRXRsZVdOc2IyRnJJRXBYUzFNZ1pXNWtjRzlwYm5RdVhHNGdJQ0FxSUV4aGVtbHNlU0JqY21WaGRHVnpJSFJvWlNCS1YwdFRJR3RsZVhOMGIzSmxJRzl1SUdacGNuTjBJR05oYkd3dVhHNGdJQ0FxTDF4dUlDQndjbWwyWVhSbElHRnplVzVqSUhabGNtbG1lVUZuWVdsdWMzUktkMnR6S0Z4dUlDQWdJR3AzZERvZ2MzUnlhVzVuWEc0Z0lDazZJRkJ5YjIxcGMyVThTMlY1WTJ4dllXdEJZMk5sYzNOVWIydGxibEJoZVd4dllXUStJSHRjYmlBZ0lDQnBaaUFvSVhSb2FYTXVhbmRyY3lrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVxZDJ0eklEMGdZM0psWVhSbFVtVnRiM1JsU2xkTFUyVjBLRzVsZHlCVlVrd29kR2hwY3k1MlpYSnBabmxWY213cEtUdGNiaUFnSUNCOVhHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lHTnZibk4wSUhzZ2NHRjViRzloWkNCOUlEMGdZWGRoYVhRZ2FuZDBWbVZ5YVdaNUtHcDNkQ3dnZEdocGN5NXFkMnR6TENCN1hHNGdJQ0FnSUNBZ0lHTnNiMk5yVkc5c1pYSmhibU5sT2lCZ0pIdDBhR2x6TG1Oc2IyTnJWRzlzWlhKaGJtTmxVMlZqYjI1a2MzMXpZQ3hjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnY21WMGRYSnVJSEJoZVd4dllXUWdZWE1nZFc1cmJtOTNiaUJoY3lCTFpYbGpiRzloYTBGalkyVnpjMVJ2YTJWdVVHRjViRzloWkR0Y2JpQWdJQ0I5SUdOaGRHTm9JQ2hsT2lCaGJua3BJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJCZFhSb2IzSnBlbUYwYVc5dVJYSnliM0lvWENKSmJuWmhiR2xrSUhSdmEyVnVPaUJjSWlBcklDaGxQeTV0WlhOellXZGxJRDgvSUdVcEtUdGNiaUFnSUNCOVhHNGdJSDFjYm4xY2JpSmRmUT09Il19