monkey-front-core 0.0.458 → 0.0.461

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 (376) hide show
  1. package/README.md +24 -24
  2. package/esm2020/lib/components/alerts/alerts.component.mjs +45 -45
  3. package/esm2020/lib/components/alerts/alerts.module.mjs +21 -21
  4. package/esm2020/lib/components/alerts/index.mjs +3 -3
  5. package/esm2020/lib/components/closed-to-maintenance/closed-to-maintenance.component.mjs +29 -29
  6. package/esm2020/lib/components/closed-to-maintenance/closed-to-maintenance.module.mjs +43 -43
  7. package/esm2020/lib/components/closed-to-maintenance/index.mjs +3 -3
  8. package/esm2020/lib/components/currency-config/currency-config.component.mjs +39 -39
  9. package/esm2020/lib/components/currency-config/currency-config.module.mjs +39 -39
  10. package/esm2020/lib/components/currency-config/index.mjs +3 -3
  11. package/esm2020/lib/components/index.mjs +6 -6
  12. package/esm2020/lib/components/progress-bar/index.mjs +4 -4
  13. package/esm2020/lib/components/progress-bar/progress-bar.component.mjs +23 -23
  14. package/esm2020/lib/components/progress-bar/progress-bar.module.mjs +18 -18
  15. package/esm2020/lib/components/progress-bar/progress-bar.service.mjs +50 -50
  16. package/esm2020/lib/components/version-changed/index.mjs +3 -3
  17. package/esm2020/lib/components/version-changed/version-changed.component.mjs +24 -24
  18. package/esm2020/lib/components/version-changed/version-changed.module.mjs +39 -39
  19. package/esm2020/lib/core/decorators/index.mjs +5 -5
  20. package/esm2020/lib/core/decorators/monkeyecx-charts-decorators.mjs +40 -40
  21. package/esm2020/lib/core/decorators/monkeyecx-decorators.mjs +111 -111
  22. package/esm2020/lib/core/decorators/monkeyecx-download-decorators.mjs +26 -26
  23. package/esm2020/lib/core/decorators/monkeyecx-upload-decorators.mjs +26 -26
  24. package/esm2020/lib/core/directives/index.mjs +13 -13
  25. package/esm2020/lib/core/directives/monkeyecx-directives-module.mjs +73 -73
  26. package/esm2020/lib/core/directives/monkeyecx-drag-drop.mjs +57 -57
  27. package/esm2020/lib/core/directives/monkeyecx-feature-by-program-directive.mjs +54 -54
  28. package/esm2020/lib/core/directives/monkeyecx-feature-directive.mjs +68 -68
  29. package/esm2020/lib/core/directives/monkeyecx-format-currency.mjs +44 -44
  30. package/esm2020/lib/core/directives/monkeyecx-format-upper.mjs +67 -67
  31. package/esm2020/lib/core/directives/monkeyecx-only-alpha-numeric-directive.mjs +28 -28
  32. package/esm2020/lib/core/directives/monkeyecx-only-number-directive.mjs +28 -28
  33. package/esm2020/lib/core/directives/monkeyecx-popover-options.directive.mjs +39 -39
  34. package/esm2020/lib/core/directives/monkeyecx-popover.directive.mjs +212 -212
  35. package/esm2020/lib/core/directives/monkeyecx-security-directive.mjs +75 -75
  36. package/esm2020/lib/core/directives/monkeyecx-tooltip-directive.mjs +123 -123
  37. package/esm2020/lib/core/index.mjs +10 -10
  38. package/esm2020/lib/core/interceptors/index.mjs +6 -6
  39. package/esm2020/lib/core/interceptors/monkeyecx-http-config-error.interceptor.mjs +49 -49
  40. package/esm2020/lib/core/interceptors/monkeyecx-http-config-header.interceptor.mjs +59 -59
  41. package/esm2020/lib/core/interceptors/monkeyecx-http-config-interceptor.module.mjs +47 -47
  42. package/esm2020/lib/core/interceptors/monkeyecx-http-config-loading-in-progress.interceptor.mjs +43 -43
  43. package/esm2020/lib/core/interceptors/monkeyecx-http-config-queue.interceptor.mjs +37 -37
  44. package/esm2020/lib/core/interfaces/index.mjs +35 -35
  45. package/esm2020/lib/core/interfaces/monkeyecx-auth-credentials.mjs +2 -2
  46. package/esm2020/lib/core/interfaces/monkeyecx-company-pendencies.mjs +2 -2
  47. package/esm2020/lib/core/interfaces/monkeyecx-company.mjs +2 -2
  48. package/esm2020/lib/core/interfaces/monkeyecx-config-bootstrap.mjs +1 -1
  49. package/esm2020/lib/core/interfaces/monkeyecx-config.mjs +2 -2
  50. package/esm2020/lib/core/interfaces/monkeyecx-country-security.mjs +2 -2
  51. package/esm2020/lib/core/interfaces/monkeyecx-error-response.mjs +2 -2
  52. package/esm2020/lib/core/interfaces/monkeyecx-filter.mjs +2 -2
  53. package/esm2020/lib/core/interfaces/monkeyecx-handled-error-response.mjs +2 -2
  54. package/esm2020/lib/core/interfaces/monkeyecx-header-credentials.mjs +2 -2
  55. package/esm2020/lib/core/interfaces/monkeyecx-intercom-options.mjs +2 -2
  56. package/esm2020/lib/core/interfaces/monkeyecx-interface.mjs +1 -1
  57. package/esm2020/lib/core/interfaces/monkeyecx-me-credentials.mjs +2 -2
  58. package/esm2020/lib/core/interfaces/monkeyecx-navigation.mjs +2 -2
  59. package/esm2020/lib/core/interfaces/monkeyecx-pagination.mjs +2 -2
  60. package/esm2020/lib/core/interfaces/monkeyecx-program.mjs +2 -2
  61. package/esm2020/lib/core/interfaces/monkeyecx-releases.mjs +2 -2
  62. package/esm2020/lib/core/interfaces/monkeyecx-request-in-progress.mjs +2 -2
  63. package/esm2020/lib/core/interfaces/monkeyecx-request-paged.mjs +2 -2
  64. package/esm2020/lib/core/interfaces/monkeyecx-resolver.mjs +2 -2
  65. package/esm2020/lib/core/interfaces/monkeyecx-response-links.mjs +2 -2
  66. package/esm2020/lib/core/interfaces/monkeyecx-response-paged.mjs +2 -2
  67. package/esm2020/lib/core/interfaces/monkeyecx-saved-state.mjs +2 -2
  68. package/esm2020/lib/core/interfaces/monkeyecx-scroll-options.mjs +2 -2
  69. package/esm2020/lib/core/interfaces/monkeyecx-service-credentials.mjs +2 -2
  70. package/esm2020/lib/core/interfaces/monkeyecx-storage.mjs +2 -2
  71. package/esm2020/lib/core/interfaces/monkeyecx-store.mjs +2 -2
  72. package/esm2020/lib/core/interfaces/monkeyecx-support-options.mjs +2 -2
  73. package/esm2020/lib/core/interfaces/monkeyecx-token-credentials.mjs +1 -1
  74. package/esm2020/lib/core/interfaces/monkeyecx-translate-options.mjs +2 -2
  75. package/esm2020/lib/core/interfaces/request-download/index.mjs +4 -4
  76. package/esm2020/lib/core/interfaces/request-download/monkeyecx-request-download.mjs +2 -2
  77. package/esm2020/lib/core/interfaces/request-download/monkeyecx-request-downloaded.mjs +2 -2
  78. package/esm2020/lib/core/interfaces/request-download/monkeyecx-request-item-download.mjs +2 -2
  79. package/esm2020/lib/core/interfaces/request-queue/index.mjs +4 -4
  80. package/esm2020/lib/core/interfaces/request-queue/monkeyecx-request-item-queue.mjs +2 -2
  81. package/esm2020/lib/core/interfaces/request-queue/monkeyecx-request-progress-queue.mjs +2 -2
  82. package/esm2020/lib/core/interfaces/request-queue/monkeyecx-request-queue.mjs +2 -2
  83. package/esm2020/lib/core/interfaces/request-upload/index.mjs +3 -3
  84. package/esm2020/lib/core/interfaces/request-upload/monkeyecx-request-item-upload.mjs +2 -2
  85. package/esm2020/lib/core/interfaces/request-upload/monkeyecx-request-upload.mjs +2 -2
  86. package/esm2020/lib/core/interfaces/schedules/index.mjs +2 -2
  87. package/esm2020/lib/core/interfaces/schedules/monkeyecx-request-schedule.mjs +2 -2
  88. package/esm2020/lib/core/model/index.mjs +3 -3
  89. package/esm2020/lib/core/model/monkeyecx-links.model.mjs +8 -8
  90. package/esm2020/lib/core/model/monkeyecx-model.mjs +25 -25
  91. package/esm2020/lib/core/pipes/index.mjs +22 -22
  92. package/esm2020/lib/core/pipes/monkeyecx-blob-secure.mjs +26 -26
  93. package/esm2020/lib/core/pipes/monkeyecx-display-first-name.mjs +19 -19
  94. package/esm2020/lib/core/pipes/monkeyecx-display-initials.mjs +21 -21
  95. package/esm2020/lib/core/pipes/monkeyecx-display-support-phone.mjs +33 -33
  96. package/esm2020/lib/core/pipes/monkeyecx-format-address.mjs +20 -20
  97. package/esm2020/lib/core/pipes/monkeyecx-format-beautify-json.mjs +38 -38
  98. package/esm2020/lib/core/pipes/monkeyecx-format-currency.mjs +27 -27
  99. package/esm2020/lib/core/pipes/monkeyecx-format-date-group.mjs +45 -45
  100. package/esm2020/lib/core/pipes/monkeyecx-format-date-timelapse.mjs +32 -32
  101. package/esm2020/lib/core/pipes/monkeyecx-format-date-unix-timelapse.mjs +36 -36
  102. package/esm2020/lib/core/pipes/monkeyecx-format-document.mjs +20 -20
  103. package/esm2020/lib/core/pipes/monkeyecx-format-number.mjs +20 -20
  104. package/esm2020/lib/core/pipes/monkeyecx-format-phone.mjs +42 -42
  105. package/esm2020/lib/core/pipes/monkeyecx-format-size.mjs +20 -20
  106. package/esm2020/lib/core/pipes/monkeyecx-format-tax.mjs +23 -23
  107. package/esm2020/lib/core/pipes/monkeyecx-format-type-document.mjs +19 -19
  108. package/esm2020/lib/core/pipes/monkeyecx-format-value.mjs +19 -19
  109. package/esm2020/lib/core/pipes/monkeyecx-format-zipcode.mjs +19 -19
  110. package/esm2020/lib/core/pipes/monkeyecx-pipes.module.mjs +117 -117
  111. package/esm2020/lib/core/pipes/monkeyecx-text-truncate.mjs +23 -23
  112. package/esm2020/lib/core/pipes/monkeyecx-truncate-qtd.mjs +16 -16
  113. package/esm2020/lib/core/services/alerts/index.mjs +2 -2
  114. package/esm2020/lib/core/services/alerts/monkeyecx-alerts.service.mjs +42 -42
  115. package/esm2020/lib/core/services/auth/index.mjs +6 -6
  116. package/esm2020/lib/core/services/auth/monkeyecx-auth-guard-company.service.mjs +28 -28
  117. package/esm2020/lib/core/services/auth/monkeyecx-auth-guard-login.service.mjs +27 -27
  118. package/esm2020/lib/core/services/auth/monkeyecx-auth-guard-role.service.mjs +79 -79
  119. package/esm2020/lib/core/services/auth/monkeyecx-auth-guard.service.mjs +26 -26
  120. package/esm2020/lib/core/services/auth/monkeyecx-authentication.service.mjs +78 -78
  121. package/esm2020/lib/core/services/commons/index.mjs +3 -3
  122. package/esm2020/lib/core/services/commons/monkeyecx-commons-resolve.service.mjs +121 -121
  123. package/esm2020/lib/core/services/commons/monkeyecx-commons.service.mjs +362 -362
  124. package/esm2020/lib/core/services/config/monkeyecx-alerts-config.service.mjs +42 -42
  125. package/esm2020/lib/core/services/config/monkeyecx-config.module.mjs +28 -28
  126. package/esm2020/lib/core/services/config/monkeyecx-config.service.mjs +107 -107
  127. package/esm2020/lib/core/services/config/monkeyecx-currency-config.service.mjs +84 -84
  128. package/esm2020/lib/core/services/config/monkeyecx-error-config.service.mjs +85 -85
  129. package/esm2020/lib/core/services/config/monkeyecx-feature-toggle.service.mjs +76 -76
  130. package/esm2020/lib/core/services/config/monkeyecx-gtm-config.service.mjs +50 -50
  131. package/esm2020/lib/core/services/config/monkeyecx-i18n-config.service.mjs +152 -152
  132. package/esm2020/lib/core/services/config/monkeyecx-logs-config.service.mjs +34 -34
  133. package/esm2020/lib/core/services/config/monkeyecx-maintenance-config.service.mjs +37 -37
  134. package/esm2020/lib/core/services/config/monkeyecx-security-console-config.service.mjs +47 -47
  135. package/esm2020/lib/core/services/config/monkeyecx-service-worker-config.service.mjs +53 -53
  136. package/esm2020/lib/core/services/error/index.mjs +5 -5
  137. package/esm2020/lib/core/services/error/monkeyecx-error-handling.module.mjs +27 -27
  138. package/esm2020/lib/core/services/error/monkeyecx-error-handling.service.mjs +37 -37
  139. package/esm2020/lib/core/services/error/monkeyecx-http-error-handling.service.mjs +138 -138
  140. package/esm2020/lib/core/services/error/monkeyecx-others-errors-handling.service.mjs +29 -29
  141. package/esm2020/lib/core/services/index.mjs +26 -26
  142. package/esm2020/lib/core/services/logged/index.mjs +2 -2
  143. package/esm2020/lib/core/services/logged/monkeyecx-logged-handling.service.mjs +40 -40
  144. package/esm2020/lib/core/services/monkeyecx-handling.service.mjs +50 -50
  145. package/esm2020/lib/core/services/monkeyecx-service.service.mjs +104 -104
  146. package/esm2020/lib/core/services/pagination/index.mjs +2 -2
  147. package/esm2020/lib/core/services/pagination/monkeyecx-pagination.service.mjs +29 -29
  148. package/esm2020/lib/core/services/request-download/index.mjs +3 -3
  149. package/esm2020/lib/core/services/request-download/monkeyecx-request-download-handling.service.mjs +93 -93
  150. package/esm2020/lib/core/services/request-download/monkeyecx-request-downloaded-handling.service.mjs +61 -61
  151. package/esm2020/lib/core/services/request-paged/index.mjs +2 -2
  152. package/esm2020/lib/core/services/request-paged/monkeyecx-request-request-paged-handling.mjs +42 -42
  153. package/esm2020/lib/core/services/request-queue/index.mjs +3 -3
  154. package/esm2020/lib/core/services/request-queue/monkeyecx-request-queue-handling.service.mjs +114 -114
  155. package/esm2020/lib/core/services/request-queue/monkeyecx-request-queue-modal-handling.service.mjs +119 -119
  156. package/esm2020/lib/core/services/routes/index.mjs +2 -2
  157. package/esm2020/lib/core/services/routes/monkeyecx-dicovery-params.service.mjs +54 -54
  158. package/esm2020/lib/core/services/schedules/index.mjs +2 -2
  159. package/esm2020/lib/core/services/schedules/monkeyecx-request-schedule.service.mjs +188 -188
  160. package/esm2020/lib/core/services/storage/index.mjs +3 -3
  161. package/esm2020/lib/core/services/storage/monkeyecx-cookie-storage.service.mjs +32 -32
  162. package/esm2020/lib/core/services/storage/monkeyecx-token-storage.service.mjs +236 -236
  163. package/esm2020/lib/core/services/store/index.mjs +4 -2
  164. package/esm2020/lib/core/services/store/monkeyecx-store.actions.mjs +24 -0
  165. package/esm2020/lib/core/services/store/monkeyecx-store.selector.mjs +68 -0
  166. package/esm2020/lib/core/services/store/monkeyecx-store.service.mjs +189 -189
  167. package/esm2020/lib/core/specification-search/index.mjs +2 -2
  168. package/esm2020/lib/core/specification-search/monkeyecx-specification-search.mjs +108 -108
  169. package/esm2020/lib/core/utils/decorators-utils.mjs +40 -40
  170. package/esm2020/lib/core/utils/index.mjs +8 -8
  171. package/esm2020/lib/core/utils/statics.mjs +45 -45
  172. package/esm2020/lib/core/utils/utils.mjs +267 -267
  173. package/esm2020/lib/core/utils/validate-utils.mjs +205 -205
  174. package/esm2020/lib/core/utils/validators.mjs +268 -268
  175. package/esm2020/lib/monkey-front-core.module.mjs +71 -71
  176. package/esm2020/lib/store/actions/index.mjs +2 -2
  177. package/esm2020/lib/store/actions/monkeyecx-storage.actions.mjs +8 -8
  178. package/esm2020/lib/store/index.mjs +4 -4
  179. package/esm2020/lib/store/reducers/index.mjs +3 -3
  180. package/esm2020/lib/store/reducers/monkeyecx-seeder.reducer.mjs +53 -53
  181. package/esm2020/lib/store/reducers/monkeyecx-storage.reducer.mjs +40 -40
  182. package/esm2020/lib/store/selectors/index.mjs +2 -2
  183. package/esm2020/lib/store/selectors/monkeyecx-storage.selector.mjs +17 -17
  184. package/esm2020/monkey-front-core.mjs +4 -4
  185. package/esm2020/public-api.mjs +8 -8
  186. package/fesm2015/monkey-front-core.mjs +5953 -5859
  187. package/fesm2015/monkey-front-core.mjs.map +1 -1
  188. package/fesm2020/monkey-front-core.mjs +6011 -5921
  189. package/fesm2020/monkey-front-core.mjs.map +1 -1
  190. package/lib/components/alerts/alerts.component.d.ts +22 -22
  191. package/lib/components/alerts/alerts.module.d.ts +10 -10
  192. package/lib/components/alerts/index.d.ts +2 -2
  193. package/lib/components/closed-to-maintenance/closed-to-maintenance.component.d.ts +13 -13
  194. package/lib/components/closed-to-maintenance/closed-to-maintenance.module.d.ts +11 -11
  195. package/lib/components/closed-to-maintenance/index.d.ts +2 -2
  196. package/lib/components/currency-config/currency-config.component.d.ts +17 -17
  197. package/lib/components/currency-config/currency-config.module.d.ts +10 -10
  198. package/lib/components/currency-config/index.d.ts +2 -2
  199. package/lib/components/index.d.ts +5 -5
  200. package/lib/components/progress-bar/index.d.ts +3 -3
  201. package/lib/components/progress-bar/progress-bar.component.d.ts +11 -11
  202. package/lib/components/progress-bar/progress-bar.module.d.ts +8 -8
  203. package/lib/components/progress-bar/progress-bar.service.d.ts +14 -14
  204. package/lib/components/version-changed/index.d.ts +2 -2
  205. package/lib/components/version-changed/version-changed.component.d.ts +9 -9
  206. package/lib/components/version-changed/version-changed.module.d.ts +10 -10
  207. package/lib/core/decorators/index.d.ts +4 -4
  208. package/lib/core/decorators/monkeyecx-charts-decorators.d.ts +1 -1
  209. package/lib/core/decorators/monkeyecx-decorators.d.ts +7 -7
  210. package/lib/core/decorators/monkeyecx-download-decorators.d.ts +2 -2
  211. package/lib/core/decorators/monkeyecx-upload-decorators.d.ts +2 -2
  212. package/lib/core/directives/index.d.ts +12 -12
  213. package/lib/core/directives/monkeyecx-directives-module.d.ts +19 -19
  214. package/lib/core/directives/monkeyecx-drag-drop.d.ts +12 -12
  215. package/lib/core/directives/monkeyecx-feature-by-program-directive.d.ts +16 -16
  216. package/lib/core/directives/monkeyecx-feature-directive.d.ts +17 -17
  217. package/lib/core/directives/monkeyecx-format-currency.d.ts +16 -16
  218. package/lib/core/directives/monkeyecx-format-upper.d.ts +18 -18
  219. package/lib/core/directives/monkeyecx-only-alpha-numeric-directive.d.ts +9 -9
  220. package/lib/core/directives/monkeyecx-only-number-directive.d.ts +9 -9
  221. package/lib/core/directives/monkeyecx-popover-options.directive.d.ts +19 -19
  222. package/lib/core/directives/monkeyecx-popover.directive.d.ts +43 -43
  223. package/lib/core/directives/monkeyecx-security-directive.d.ts +18 -18
  224. package/lib/core/directives/monkeyecx-tooltip-directive.d.ts +23 -23
  225. package/lib/core/index.d.ts +9 -9
  226. package/lib/core/interceptors/index.d.ts +5 -5
  227. package/lib/core/interceptors/monkeyecx-http-config-error.interceptor.d.ts +18 -18
  228. package/lib/core/interceptors/monkeyecx-http-config-header.interceptor.d.ts +16 -16
  229. package/lib/core/interceptors/monkeyecx-http-config-interceptor.module.d.ts +9 -9
  230. package/lib/core/interceptors/monkeyecx-http-config-loading-in-progress.interceptor.d.ts +12 -12
  231. package/lib/core/interceptors/monkeyecx-http-config-queue.interceptor.d.ts +14 -14
  232. package/lib/core/interfaces/index.d.ts +34 -34
  233. package/lib/core/interfaces/monkeyecx-auth-credentials.d.ts +15 -15
  234. package/lib/core/interfaces/monkeyecx-company-pendencies.d.ts +14 -14
  235. package/lib/core/interfaces/monkeyecx-company.d.ts +10 -10
  236. package/lib/core/interfaces/monkeyecx-config-bootstrap.d.ts +14 -14
  237. package/lib/core/interfaces/monkeyecx-config.d.ts +132 -132
  238. package/lib/core/interfaces/monkeyecx-country-security.d.ts +4 -4
  239. package/lib/core/interfaces/monkeyecx-error-response.d.ts +5 -5
  240. package/lib/core/interfaces/monkeyecx-filter.d.ts +42 -42
  241. package/lib/core/interfaces/monkeyecx-handled-error-response.d.ts +10 -10
  242. package/lib/core/interfaces/monkeyecx-header-credentials.d.ts +4 -4
  243. package/lib/core/interfaces/monkeyecx-intercom-options.d.ts +4 -4
  244. package/lib/core/interfaces/monkeyecx-interface.d.ts +11 -11
  245. package/lib/core/interfaces/monkeyecx-me-credentials.d.ts +22 -22
  246. package/lib/core/interfaces/monkeyecx-navigation.d.ts +27 -27
  247. package/lib/core/interfaces/monkeyecx-pagination.d.ts +26 -25
  248. package/lib/core/interfaces/monkeyecx-program.d.ts +10 -10
  249. package/lib/core/interfaces/monkeyecx-releases.d.ts +9 -9
  250. package/lib/core/interfaces/monkeyecx-request-in-progress.d.ts +3 -3
  251. package/lib/core/interfaces/monkeyecx-request-paged.d.ts +23 -23
  252. package/lib/core/interfaces/monkeyecx-resolver.d.ts +39 -39
  253. package/lib/core/interfaces/monkeyecx-response-links.d.ts +11 -11
  254. package/lib/core/interfaces/monkeyecx-response-paged.d.ts +6 -6
  255. package/lib/core/interfaces/monkeyecx-saved-state.d.ts +5 -5
  256. package/lib/core/interfaces/monkeyecx-scroll-options.d.ts +5 -5
  257. package/lib/core/interfaces/monkeyecx-service-credentials.d.ts +12 -12
  258. package/lib/core/interfaces/monkeyecx-storage.d.ts +38 -38
  259. package/lib/core/interfaces/monkeyecx-store.d.ts +34 -31
  260. package/lib/core/interfaces/monkeyecx-support-options.d.ts +4 -4
  261. package/lib/core/interfaces/monkeyecx-token-credentials.d.ts +21 -21
  262. package/lib/core/interfaces/monkeyecx-translate-options.d.ts +4 -4
  263. package/lib/core/interfaces/request-download/index.d.ts +3 -3
  264. package/lib/core/interfaces/request-download/monkeyecx-request-download.d.ts +10 -10
  265. package/lib/core/interfaces/request-download/monkeyecx-request-downloaded.d.ts +7 -7
  266. package/lib/core/interfaces/request-download/monkeyecx-request-item-download.d.ts +7 -7
  267. package/lib/core/interfaces/request-queue/index.d.ts +3 -3
  268. package/lib/core/interfaces/request-queue/monkeyecx-request-item-queue.d.ts +7 -7
  269. package/lib/core/interfaces/request-queue/monkeyecx-request-progress-queue.d.ts +6 -6
  270. package/lib/core/interfaces/request-queue/monkeyecx-request-queue.d.ts +8 -8
  271. package/lib/core/interfaces/request-upload/index.d.ts +2 -2
  272. package/lib/core/interfaces/request-upload/monkeyecx-request-item-upload.d.ts +5 -5
  273. package/lib/core/interfaces/request-upload/monkeyecx-request-upload.d.ts +10 -10
  274. package/lib/core/interfaces/schedules/index.d.ts +1 -1
  275. package/lib/core/interfaces/schedules/monkeyecx-request-schedule.d.ts +13 -13
  276. package/lib/core/model/index.d.ts +2 -2
  277. package/lib/core/model/monkeyecx-links.model.d.ts +4 -4
  278. package/lib/core/model/monkeyecx-model.d.ts +13 -13
  279. package/lib/core/pipes/index.d.ts +21 -21
  280. package/lib/core/pipes/monkeyecx-blob-secure.d.ts +13 -13
  281. package/lib/core/pipes/monkeyecx-display-first-name.d.ts +7 -7
  282. package/lib/core/pipes/monkeyecx-display-initials.d.ts +7 -7
  283. package/lib/core/pipes/monkeyecx-display-support-phone.d.ts +18 -18
  284. package/lib/core/pipes/monkeyecx-format-address.d.ts +14 -14
  285. package/lib/core/pipes/monkeyecx-format-beautify-json.d.ts +8 -8
  286. package/lib/core/pipes/monkeyecx-format-currency.d.ts +11 -11
  287. package/lib/core/pipes/monkeyecx-format-date-group.d.ts +11 -11
  288. package/lib/core/pipes/monkeyecx-format-date-timelapse.d.ts +7 -7
  289. package/lib/core/pipes/monkeyecx-format-date-unix-timelapse.d.ts +7 -7
  290. package/lib/core/pipes/monkeyecx-format-document.d.ts +7 -7
  291. package/lib/core/pipes/monkeyecx-format-number.d.ts +7 -7
  292. package/lib/core/pipes/monkeyecx-format-phone.d.ts +7 -7
  293. package/lib/core/pipes/monkeyecx-format-size.d.ts +7 -7
  294. package/lib/core/pipes/monkeyecx-format-tax.d.ts +7 -7
  295. package/lib/core/pipes/monkeyecx-format-type-document.d.ts +7 -7
  296. package/lib/core/pipes/monkeyecx-format-value.d.ts +7 -7
  297. package/lib/core/pipes/monkeyecx-format-zipcode.d.ts +7 -7
  298. package/lib/core/pipes/monkeyecx-pipes.module.d.ts +26 -26
  299. package/lib/core/pipes/monkeyecx-text-truncate.d.ts +7 -7
  300. package/lib/core/pipes/monkeyecx-truncate-qtd.d.ts +7 -7
  301. package/lib/core/services/alerts/index.d.ts +1 -1
  302. package/lib/core/services/alerts/monkeyecx-alerts.service.d.ts +21 -21
  303. package/lib/core/services/auth/index.d.ts +5 -5
  304. package/lib/core/services/auth/monkeyecx-auth-guard-company.service.d.ts +10 -10
  305. package/lib/core/services/auth/monkeyecx-auth-guard-login.service.d.ts +10 -10
  306. package/lib/core/services/auth/monkeyecx-auth-guard-role.service.d.ts +16 -16
  307. package/lib/core/services/auth/monkeyecx-auth-guard.service.d.ts +10 -10
  308. package/lib/core/services/auth/monkeyecx-authentication.service.d.ts +35 -35
  309. package/lib/core/services/commons/index.d.ts +2 -2
  310. package/lib/core/services/commons/monkeyecx-commons-resolve.service.d.ts +53 -53
  311. package/lib/core/services/commons/monkeyecx-commons.service.d.ts +120 -120
  312. package/lib/core/services/config/monkeyecx-alerts-config.service.d.ts +11 -11
  313. package/lib/core/services/config/monkeyecx-config.module.d.ts +9 -9
  314. package/lib/core/services/config/monkeyecx-config.service.d.ts +36 -36
  315. package/lib/core/services/config/monkeyecx-currency-config.service.d.ts +15 -15
  316. package/lib/core/services/config/monkeyecx-error-config.service.d.ts +8 -8
  317. package/lib/core/services/config/monkeyecx-feature-toggle.service.d.ts +16 -16
  318. package/lib/core/services/config/monkeyecx-gtm-config.service.d.ts +8 -8
  319. package/lib/core/services/config/monkeyecx-i18n-config.service.d.ts +18 -18
  320. package/lib/core/services/config/monkeyecx-logs-config.service.d.ts +7 -7
  321. package/lib/core/services/config/monkeyecx-maintenance-config.service.d.ts +13 -13
  322. package/lib/core/services/config/monkeyecx-security-console-config.service.d.ts +12 -12
  323. package/lib/core/services/config/monkeyecx-service-worker-config.service.d.ts +16 -16
  324. package/lib/core/services/error/index.d.ts +4 -4
  325. package/lib/core/services/error/monkeyecx-error-handling.module.d.ts +9 -9
  326. package/lib/core/services/error/monkeyecx-error-handling.service.d.ts +9 -9
  327. package/lib/core/services/error/monkeyecx-http-error-handling.service.d.ts +26 -26
  328. package/lib/core/services/error/monkeyecx-others-errors-handling.service.d.ts +9 -9
  329. package/lib/core/services/index.d.ts +25 -25
  330. package/lib/core/services/logged/index.d.ts +1 -1
  331. package/lib/core/services/logged/monkeyecx-logged-handling.service.d.ts +14 -14
  332. package/lib/core/services/monkeyecx-handling.service.d.ts +22 -22
  333. package/lib/core/services/monkeyecx-service.service.d.ts +18 -18
  334. package/lib/core/services/pagination/index.d.ts +1 -1
  335. package/lib/core/services/pagination/monkeyecx-pagination.service.d.ts +9 -9
  336. package/lib/core/services/request-download/index.d.ts +2 -2
  337. package/lib/core/services/request-download/monkeyecx-request-download-handling.service.d.ts +18 -18
  338. package/lib/core/services/request-download/monkeyecx-request-downloaded-handling.service.d.ts +16 -16
  339. package/lib/core/services/request-paged/index.d.ts +1 -1
  340. package/lib/core/services/request-paged/monkeyecx-request-request-paged-handling.d.ts +11 -11
  341. package/lib/core/services/request-queue/index.d.ts +2 -2
  342. package/lib/core/services/request-queue/monkeyecx-request-queue-handling.service.d.ts +21 -21
  343. package/lib/core/services/request-queue/monkeyecx-request-queue-modal-handling.service.d.ts +23 -23
  344. package/lib/core/services/routes/index.d.ts +1 -1
  345. package/lib/core/services/routes/monkeyecx-dicovery-params.service.d.ts +13 -13
  346. package/lib/core/services/schedules/index.d.ts +1 -1
  347. package/lib/core/services/schedules/monkeyecx-request-schedule.service.d.ts +47 -47
  348. package/lib/core/services/storage/index.d.ts +2 -2
  349. package/lib/core/services/storage/monkeyecx-cookie-storage.service.d.ts +11 -11
  350. package/lib/core/services/storage/monkeyecx-token-storage.service.d.ts +30 -30
  351. package/lib/core/services/store/index.d.ts +3 -1
  352. package/lib/core/services/store/monkeyecx-store.actions.d.ts +51 -0
  353. package/lib/core/services/store/monkeyecx-store.selector.d.ts +28 -0
  354. package/lib/core/services/store/monkeyecx-store.service.d.ts +50 -50
  355. package/lib/core/specification-search/index.d.ts +1 -1
  356. package/lib/core/specification-search/monkeyecx-specification-search.d.ts +20 -20
  357. package/lib/core/utils/decorators-utils.d.ts +5 -5
  358. package/lib/core/utils/index.d.ts +6 -6
  359. package/lib/core/utils/statics.d.ts +34 -34
  360. package/lib/core/utils/utils.d.ts +26 -26
  361. package/lib/core/utils/validate-utils.d.ts +66 -66
  362. package/lib/core/utils/validators.d.ts +36 -36
  363. package/lib/monkey-front-core.module.d.ts +19 -19
  364. package/lib/store/actions/index.d.ts +1 -1
  365. package/lib/store/actions/monkeyecx-storage.actions.d.ts +23 -23
  366. package/lib/store/index.d.ts +3 -3
  367. package/lib/store/reducers/index.d.ts +2 -2
  368. package/lib/store/reducers/monkeyecx-seeder.reducer.d.ts +2 -2
  369. package/lib/store/reducers/monkeyecx-storage.reducer.d.ts +13 -13
  370. package/lib/store/selectors/index.d.ts +1 -1
  371. package/lib/store/selectors/monkeyecx-storage.selector.d.ts +8 -8
  372. package/monkey-front-core-0.0.461.tgz +0 -0
  373. package/monkey-front-core.d.ts +5 -5
  374. package/package.json +4 -3
  375. package/public-api.d.ts +4 -4
  376. package/monkey-front-core-0.0.458.tgz +0 -0
@@ -1,362 +1,362 @@
1
- import { __decorate } from "tslib";
2
- import { NavigationStart } from '@angular/router';
3
- import { BehaviorSubject, throwError } from 'rxjs';
4
- import { filter, take, takeWhile } from 'rxjs/operators';
5
- import { MonkeyEcxCoreService } from '../../decorators/monkeyecx-decorators';
6
- import { MonkeyEcxModel } from '../../model';
7
- import { MonkeyEcxUtils } from '../../utils/utils';
8
- import { MonkeyEcxRequestPagedHandling } from '../request-paged/monkeyecx-request-request-paged-handling';
9
- class LinksModel extends MonkeyEcxModel {
10
- constructor(data) {
11
- super();
12
- this._links = data?._links;
13
- }
14
- }
15
- export class MonkeyEcxCommonsService {
16
- constructor(monkeyecxService, tokenStorage, otherArgs) {
17
- this.monkeyecxService = monkeyecxService;
18
- this.tokenStorage = tokenStorage;
19
- this.otherArgs = otherArgs;
20
- this.flagValidator = true;
21
- this.destroyed = false;
22
- this.__data$ = null;
23
- this.__pagination$ = null;
24
- this.__control$ = null;
25
- this.__page$ = null;
26
- this.__savedState = null;
27
- this.__error = null;
28
- this.__handledError = null;
29
- this.__page = null;
30
- this.__links = null;
31
- this.__requestPaged = null;
32
- this.__onSearchChanged$ = new BehaviorSubject(null);
33
- this.__onDataChanged$ = new BehaviorSubject(null);
34
- this.__onLoadingInProgress$ = new BehaviorSubject(false);
35
- this.__onUploadInProgress$ = new BehaviorSubject(false);
36
- this.__onDataDeleted$ = new BehaviorSubject(null);
37
- this.__onErrorChanged$ = new BehaviorSubject(null);
38
- this.__onGovernmentIdDataChanged$ = new BehaviorSubject(null);
39
- this.__onZipCodeDataChanged$ = new BehaviorSubject(null);
40
- this.__oni18nDataChanged$ = new BehaviorSubject(null);
41
- this.__onDoSearch$ = new BehaviorSubject({});
42
- this.__schedule = null;
43
- this.__callbackPagination = () => {
44
- // eslint-disable-next-line no-console
45
- return console.error('Method callbackPagination needs to be declared');
46
- };
47
- this.__isAbleToDoPagination = {};
48
- this.handleInit();
49
- }
50
- handleInit() {
51
- if (this.otherArgs?.router) {
52
- const { clearOnChangeRoute } = this.otherArgs?.schedule?.options || {
53
- clearOnChangeRoute: false
54
- };
55
- this.otherArgs.router.events
56
- .pipe(filter((event) => {
57
- return event instanceof NavigationStart;
58
- }), takeWhile(() => {
59
- return !this.destroyed;
60
- }))
61
- .subscribe(() => {
62
- if (this.__schedule && clearOnChangeRoute) {
63
- this.otherArgs?.schedule?.service?.removeSchedule(this.__schedule);
64
- this.__schedule = null;
65
- }
66
- });
67
- }
68
- }
69
- navigateToPendencyPage(arg, companyType, router) {
70
- let route = '/app';
71
- if (companyType) {
72
- route = `${route}/${companyType}/pages`;
73
- }
74
- else {
75
- route = `${route}/user/profile/pages`;
76
- }
77
- if (!router) {
78
- // eslint-disable-next-line no-console
79
- console.error('Router must be declared');
80
- }
81
- else {
82
- router.navigate([`${route}/company-pendency`.toLowerCase()], {
83
- state: {
84
- pendencyData: arg
85
- }
86
- });
87
- }
88
- }
89
- allowedSecurityAccessByPendency(args) {
90
- if (!args) {
91
- return {
92
- hasPendencies: false
93
- };
94
- }
95
- const { service, type } = args;
96
- return service.hasPendencies(type);
97
- }
98
- allowedSecurityAccessByFeature(args) {
99
- if (!args) {
100
- return true;
101
- }
102
- const { config, feature } = args;
103
- try {
104
- if (!MonkeyEcxUtils.persistNullEmptyUndefined(feature) ||
105
- !MonkeyEcxUtils.persistNullEmptyUndefined(config?.program?.settings)) {
106
- return true;
107
- }
108
- return !config?.program?.settings?.[feature];
109
- }
110
- catch (e) {
111
- // not to do
112
- }
113
- return true;
114
- }
115
- allowedSecurityAccessByCountry(arg) {
116
- if (!arg)
117
- return true;
118
- return arg.country === arg.envCountry;
119
- }
120
- handlePaginationOptions() {
121
- const { __paginationOptions } = this;
122
- if (__paginationOptions) {
123
- const { service, callback, name } = __paginationOptions;
124
- service?.setCallback((type) => {
125
- this.doPaginationv2(type, callback);
126
- }, name || 'main');
127
- }
128
- }
129
- setPage(requestPaged) {
130
- this.__requestPaged = {
131
- ...this.__requestPaged,
132
- ...requestPaged
133
- };
134
- return this;
135
- }
136
- nextPage() {
137
- if (this.__links) {
138
- return !!this.__links?.next;
139
- }
140
- if (!this.__requestPaged)
141
- return false;
142
- const { page } = this.__requestPaged;
143
- const { number, totalPages } = page;
144
- if (number < totalPages) {
145
- this.__requestPaged = {
146
- ...this.__requestPaged,
147
- page: {
148
- ...page,
149
- number: number + 1
150
- }
151
- };
152
- return true;
153
- }
154
- return false;
155
- }
156
- getEmbeddedData(data, field) {
157
- const { _embedded } = data;
158
- return _embedded ? _embedded[field] : null;
159
- }
160
- getNormalizedUrl(url, samePage = false) {
161
- const { __requestPaged, __links } = this;
162
- return new MonkeyEcxRequestPagedHandling(url, __requestPaged || {}, __links, samePage).getRequestWithPagedParams();
163
- }
164
- clear(clearData) {
165
- if (clearData) {
166
- this.__data = null;
167
- this.__requestPaged = null;
168
- this.__params = null;
169
- this.__page = null;
170
- this.__links = null;
171
- if (this.__schedule) {
172
- const { queue } = this.__schedule;
173
- if (queue) {
174
- this.otherArgs?.queue?.service?.removeQueueItem(queue);
175
- }
176
- this.otherArgs?.schedule?.service?.removeSchedule(this.__schedule);
177
- this.__schedule = null;
178
- }
179
- }
180
- this.__error = null;
181
- this.__handledError = null;
182
- this.flagValidator = false;
183
- this.destroyed = true;
184
- }
185
- resolve(route, state, otherArgs) {
186
- if (JSON.stringify(route?.queryParams) === '{}') {
187
- this.__data = null;
188
- this.__page = null;
189
- }
190
- this.__requestPaged = null;
191
- this.flagValidator = true;
192
- const pend = this.allowedSecurityAccessByPendency(otherArgs?.pendency);
193
- const allowedByProgram = this.allowedSecurityAccessByFeature(otherArgs?.featureByProgram);
194
- if (this.allowedSecurityAccessByCountry(otherArgs?.countrySecurity) &&
195
- !pend.hasPendencies &&
196
- allowedByProgram) {
197
- if (this.__schedule) {
198
- this.otherArgs?.schedule?.service?.removeSchedule(this.__schedule);
199
- this.__schedule = null;
200
- }
201
- const { __requestPaged } = this;
202
- if (!__requestPaged) {
203
- this.setPage({
204
- page: {
205
- number: 0,
206
- size: 10
207
- }
208
- });
209
- }
210
- if (otherArgs?.translateOptions) {
211
- const { service, keys } = otherArgs?.translateOptions;
212
- this.geti18n(service, keys || '');
213
- }
214
- if (otherArgs?.callbackPagination) {
215
- this.__callbackPagination = otherArgs.callbackPagination;
216
- }
217
- if (otherArgs?.paginationOptions) {
218
- this.__paginationOptions = otherArgs?.paginationOptions;
219
- this.handlePaginationOptions();
220
- }
221
- if (otherArgs?.feature) {
222
- const { flag, service } = otherArgs.feature;
223
- service.onFlags
224
- .pipe(takeWhile(() => {
225
- return this.flagValidator;
226
- }))
227
- .subscribe((val) => {
228
- if (val) {
229
- const hasFlag = service.getFlag(flag);
230
- if (MonkeyEcxUtils.persistNullEmptyUndefined(hasFlag)) {
231
- if (!hasFlag) {
232
- this.navigateToErrorPage(404, otherArgs?.router);
233
- }
234
- }
235
- }
236
- });
237
- }
238
- otherArgs?.callbackMain();
239
- }
240
- else if (!allowedByProgram) {
241
- this.navigateToErrorPage(404, otherArgs?.router);
242
- }
243
- else if (pend.hasPendencies) {
244
- this.navigateToPendencyPage(pend, otherArgs?.companyType, otherArgs?.router);
245
- }
246
- else {
247
- this.navigateToErrorPage(403, otherArgs?.router);
248
- }
249
- }
250
- getHTTPHeaderApplicationPDF() {
251
- return {
252
- observe: 'response',
253
- responseType: 'blob'
254
- };
255
- }
256
- genericMethod(link, data, callback) {
257
- const { href, type = 'get' } = link;
258
- this.monkeyecxService?.[type.toLowerCase()](`${href}`, data)?.subscribe((resp) => {
259
- if (callback)
260
- callback(resp);
261
- }, (err) => {
262
- if (callback)
263
- callback();
264
- throwError(err);
265
- });
266
- }
267
- async getGenericData(data, action) {
268
- const { monkeyecxService } = this;
269
- if (!monkeyecxService)
270
- return null;
271
- const { href, type } = new LinksModel(data)?.getAction(action) || {
272
- href: '', type: 'get'
273
- };
274
- return monkeyecxService[type.toLowerCase()](href)
275
- .pipe(take(1)).toPromise();
276
- }
277
- geti18n(translateService, keys) {
278
- translateService.onDefaultLangChange.subscribe(() => {
279
- this.__i18n = translateService.instant(keys);
280
- this.__oni18nDataChanged$.next(null);
281
- });
282
- translateService.getStreamOnTranslationChange(keys).subscribe(() => {
283
- this.__i18n = translateService.instant(keys);
284
- this.__oni18nDataChanged$.next(null);
285
- });
286
- }
287
- doPagination() {
288
- if (!this.__onLoadingInProgress$.value) {
289
- const hasMorePages = this.setPage({
290
- page: {
291
- ...this.__page
292
- }
293
- }).nextPage();
294
- if (hasMorePages && this.__callbackPagination) {
295
- this.__callbackPagination();
296
- }
297
- }
298
- }
299
- doPaginationv2(type, callback) {
300
- if (!this.__onLoadingInProgress$.value) {
301
- if (callback) {
302
- callback(type);
303
- }
304
- }
305
- }
306
- setLinks(links) {
307
- this.__isAbleToDoPagination = {
308
- first: !!links?.first,
309
- next: !!links?.next
310
- };
311
- this.__links = links;
312
- }
313
- setSearchByUrl(router, url, search, extras) {
314
- this.__data = null;
315
- this.__page = null;
316
- this.__onDataChanged$.next(null);
317
- this.__onLoadingInProgress$.next(false);
318
- router.navigate([url], {
319
- queryParams: {
320
- ...search,
321
- r: MonkeyEcxUtils.getRandomString(30)
322
- },
323
- queryParamsHandling: 'merge',
324
- ...extras
325
- });
326
- }
327
- saveState(state) {
328
- this.__savedState = {
329
- page: this.__page,
330
- ...state
331
- };
332
- }
333
- navigateToErrorPage(statusCode, router) {
334
- const routes = {
335
- 403: 'forbidden',
336
- 404: 'not-found',
337
- 500: 'service-problems',
338
- 503: 'service-problems'
339
- };
340
- if (!router) {
341
- console.error('Router must be declared');
342
- }
343
- else {
344
- router?.navigate([`/app/pages/${routes[statusCode]}`.toLowerCase()]);
345
- }
346
- }
347
- }
348
- __decorate([
349
- MonkeyEcxCoreService({
350
- requestInProgress: {
351
- showProgress: true
352
- }
353
- })
354
- ], MonkeyEcxCommonsService.prototype, "genericMethod", null);
355
- __decorate([
356
- MonkeyEcxCoreService({
357
- requestInProgress: {
358
- showProgress: true
359
- }
360
- })
361
- ], MonkeyEcxCommonsService.prototype, "getGenericData", null);
362
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ua2V5ZWN4LWNvbW1vbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21vbmtleS1mcm9udC1jb3JlL3NyYy9saWIvY29yZS9zZXJ2aWNlcy9jb21tb25zL21vbmtleWVjeC1jb21tb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFFTCxlQUFlLEVBR2hCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLGVBQWUsRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFjN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFJbkQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFLMUcsTUFBTSxVQUFXLFNBQVEsY0FBYztJQUNyQyxZQUFZLElBQVU7UUFDcEIsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxNQUFNLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLHVCQUF1QjtJQW9FbEMsWUFDUyxnQkFBbUMsRUFDbkMsWUFBMkMsRUFDM0MsU0FXTjtRQWJNLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBbUI7UUFDbkMsaUJBQVksR0FBWixZQUFZLENBQStCO1FBQzNDLGNBQVMsR0FBVCxTQUFTLENBV2Y7UUFqRkssa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFFckIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUUxQixZQUFPLEdBQTJCLElBQUksQ0FBQztRQUV2QyxrQkFBYSxHQUEyQixJQUFJLENBQUM7UUFFN0MsZUFBVSxHQUEyQixJQUFJLENBQUM7UUFFMUMsWUFBTyxHQUEyQixJQUFJLENBQUM7UUFJdkMsaUJBQVksR0FBK0IsSUFBSSxDQUFDO1FBSWhELFlBQU8sR0FBa0MsSUFBSSxDQUFDO1FBRTlDLG1CQUFjLEdBQXlDLElBQUksQ0FBQztRQUU1RCxXQUFNLEdBQWtDLElBQUksQ0FBQztRQUU3QyxZQUFPLEdBQWtDLElBQUksQ0FBQztRQUk5QyxtQkFBYyxHQUFpQyxJQUFJLENBQUM7UUFFcEQsdUJBQWtCLEdBQXlCLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJFLHFCQUFnQixHQUF5QixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVuRSwyQkFBc0IsR0FBeUIsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUUsMEJBQXFCLEdBQXlCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXpFLHFCQUFnQixHQUF5QixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVuRSxzQkFBaUIsR0FBeUIsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEUsaUNBQTRCLEdBQXlCLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRS9FLDRCQUF1QixHQUF5QixJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUxRSx5QkFBb0IsR0FBeUIsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkUsa0JBQWEsR0FBMkMsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFaEYsZUFBVSxHQUFvQyxJQUFJLENBQUM7UUFJbkQseUJBQW9CLEdBQWEsR0FBRyxFQUFFO1lBQ3BDLHNDQUFzQztZQUN0QyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FBQztRQUN6RSxDQUFDLENBQUM7UUFRRiwyQkFBc0IsR0FBRyxFQUFFLENBQUM7UUFrQjFCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFO1lBQzFCLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sSUFBSTtnQkFDbEUsa0JBQWtCLEVBQUUsS0FBSzthQUMxQixDQUFDO1lBRUYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTTtpQkFDekIsSUFBSSxDQUNILE1BQU0sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUNwQixPQUFPLEtBQUssWUFBWSxlQUFlLENBQUM7WUFDMUMsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDYixPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FDSDtpQkFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxrQkFBa0IsRUFBRTtvQkFDekMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ25FLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2lCQUN4QjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDSCxDQUFDO0lBRU8sc0JBQXNCLENBQzVCLEdBQXdDLEVBQ3hDLFdBQW9CLEVBQ3BCLE1BQWU7UUFFZixJQUFJLEtBQUssR0FBRyxNQUFNLENBQUM7UUFFbkIsSUFBSSxXQUFXLEVBQUU7WUFDZixLQUFLLEdBQUcsR0FBRyxLQUFLLElBQUksV0FBVyxRQUFRLENBQUM7U0FDekM7YUFBTTtZQUNMLEtBQUssR0FBRyxHQUFHLEtBQUsscUJBQXFCLENBQUM7U0FDdkM7UUFFRCxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsc0NBQXNDO1lBQ3RDLE9BQU8sQ0FBQyxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztTQUMxQzthQUFNO1lBQ0wsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsS0FBSyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFO2dCQUMzRCxLQUFLLEVBQUU7b0JBQ0wsWUFBWSxFQUFFLEdBQUc7aUJBQ2xCO2FBQ0YsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRU8sK0JBQStCLENBQUMsSUFBUztRQUMvQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsT0FBTztnQkFDTCxhQUFhLEVBQUUsS0FBSzthQUNyQixDQUFDO1NBQ0g7UUFDRCxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztRQUMvQixPQUFPLE9BQU8sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLDhCQUE4QixDQUFDLElBQVM7UUFDOUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJO1lBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUM7Z0JBQ3BELENBQUMsY0FBYyxDQUFDLHlCQUF5QixDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUU7Z0JBQ3RFLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUM5QztRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsWUFBWTtTQUNiO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sOEJBQThCLENBQUMsR0FBOEI7UUFDbkUsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLElBQUksQ0FBQztRQUN0QixPQUFPLEdBQUcsQ0FBQyxPQUFPLEtBQUssR0FBRyxDQUFDLFVBQVUsQ0FBQztJQUN4QyxDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNyQyxJQUFJLG1CQUFtQixFQUFFO1lBQ3ZCLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLG1CQUFtQixDQUFDO1lBQ3hELE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdEMsQ0FBQyxFQUFFLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsWUFBbUM7UUFDekMsSUFBSSxDQUFDLGNBQWMsR0FBRztZQUNwQixHQUFHLElBQUksQ0FBQyxjQUFjO1lBQ3RCLEdBQUcsWUFBWTtTQUNoQixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQztTQUM3QjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBcUIsQ0FBQztRQUM1QyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNwQyxJQUFJLE1BQU0sR0FBRyxVQUFVLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRztnQkFDcEIsR0FBRyxJQUFJLENBQUMsY0FBYztnQkFDdEIsSUFBSSxFQUFFO29CQUNKLEdBQUcsSUFBSTtvQkFDUCxNQUFNLEVBQUUsTUFBTSxHQUFHLENBQUM7aUJBQ25CO2FBQ0YsQ0FBQztZQUNGLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxlQUFlLENBQUMsSUFBUyxFQUFFLEtBQWE7UUFDdEMsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQztRQUMzQixPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDN0MsQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQVcsRUFBRSxRQUFRLEdBQUcsS0FBSztRQUM1QyxNQUFNLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztRQUN6QyxPQUFPLElBQUksNkJBQTZCLENBQ3RDLEdBQUcsRUFDSCxjQUFjLElBQUksRUFBRSxFQUNwQixPQUFPLEVBQ1AsUUFBUSxDQUNULENBQUMseUJBQXlCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQWtCO1FBQ3RCLElBQUksU0FBUyxFQUFFO1lBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFFcEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNuQixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDbEMsSUFBSSxLQUFLLEVBQUU7b0JBQ1QsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDeEQ7Z0JBQ0QsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ25FLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2FBQ3hCO1NBQ0Y7UUFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDO0lBRUQsT0FBTyxDQUNMLEtBQW9DLEVBQ3BDLEtBQWlDLEVBQ2pDLFNBMEJDO1FBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDL0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7U0FDcEI7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUUxQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsK0JBQStCLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRTFGLElBQ0UsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFNBQVMsRUFBRSxlQUFlLENBQUM7WUFDL0QsQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUNuQixnQkFBZ0IsRUFDaEI7WUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzthQUN4QjtZQUVELE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDaEMsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQztvQkFDWCxJQUFJLEVBQUU7d0JBQ0osTUFBTSxFQUFFLENBQUM7d0JBQ1QsSUFBSSxFQUFFLEVBQUU7cUJBQ1Q7aUJBQ0YsQ0FBQyxDQUFDO2FBQ0o7WUFFRCxJQUFJLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDL0IsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxTQUFTLEVBQUUsZ0JBQWdCLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQzthQUNuQztZQUVELElBQUksU0FBUyxFQUFFLGtCQUFrQixFQUFFO2dCQUNqQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsU0FBUyxDQUFDLGtCQUFrQixDQUFDO2FBQzFEO1lBRUQsSUFBSSxTQUFTLEVBQUUsaUJBQWlCLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxTQUFTLEVBQUUsaUJBQWlCLENBQUM7Z0JBQ3hELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2FBQ2hDO1lBRUQsSUFBSSxTQUFTLEVBQUUsT0FBTyxFQUFFO2dCQUN0QixNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7Z0JBRTVDLE9BQU8sQ0FBQyxPQUFPO3FCQUNaLElBQUksQ0FDSCxTQUFTLENBQUMsR0FBRyxFQUFFO29CQUNiLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztnQkFDNUIsQ0FBQyxDQUFDLENBQ0g7cUJBQ0EsU0FBUyxDQUFDLENBQUMsR0FBWSxFQUFFLEVBQUU7b0JBQzFCLElBQUksR0FBRyxFQUFFO3dCQUNQLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBRXRDLElBQUksY0FBYyxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxFQUFFOzRCQUNyRCxJQUFJLENBQUMsT0FBTyxFQUFFO2dDQUNaLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDOzZCQUNsRDt5QkFDRjtxQkFDRjtnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNOO1lBRUQsU0FBUyxFQUFFLFlBQVksRUFBRSxDQUFDO1NBQzNCO2FBQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQzVCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ2xEO2FBQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQzdCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDOUU7YUFBTTtZQUNMLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQztJQUVELDJCQUEyQjtRQUN6QixPQUFPO1lBQ0wsT0FBTyxFQUFFLFVBQVU7WUFDbkIsWUFBWSxFQUFFLE1BQU07U0FDckIsQ0FBQztJQUNKLENBQUM7SUFPRCxhQUFhLENBQUMsSUFBUyxFQUFFLElBQVUsRUFBRSxRQUFtQjtRQUN0RCxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFcEMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxTQUFTLENBQ3JFLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDWixJQUFJLFFBQVE7Z0JBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLENBQUMsRUFDRCxDQUFDLEdBQXNCLEVBQUUsRUFBRTtZQUN6QixJQUFJLFFBQVE7Z0JBQUUsUUFBUSxFQUFFLENBQUM7WUFDekIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQU9ELEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBUyxFQUFFLE1BQWM7UUFDNUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0I7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNuQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSTtZQUNoRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLO1NBQ3RCLENBQUM7UUFFRixPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFNLElBQUksQ0FBQzthQUNuRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELE9BQU8sQ0FBQyxnQkFBa0MsRUFBRSxJQUF1QjtRQUNqRSxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2xELElBQUksQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7UUFDSCxnQkFBZ0IsQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2pFLElBQUksQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFO1lBQ3RDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQ2hDLElBQUksRUFBRTtvQkFDSixHQUFHLElBQUksQ0FBQyxNQUFNO2lCQUNmO2FBQ0YsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBRWQsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO2dCQUM3QyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQzthQUM3QjtTQUNGO0lBQ0gsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFZLEVBQUUsUUFBa0I7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUU7WUFDdEMsSUFBSSxRQUFRLEVBQUU7Z0JBQ1osUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ2hCO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQVU7UUFDakIsSUFBSSxDQUFDLHNCQUFzQixHQUFHO1lBQzVCLEtBQUssRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUs7WUFDckIsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSTtTQUNwQixDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFjLEVBQUUsR0FBVyxFQUFFLE1BQVcsRUFBRSxNQUFZO1FBQ25FLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV4QyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckIsV0FBVyxFQUFFO2dCQUNYLEdBQUcsTUFBTTtnQkFDVCxDQUFDLEVBQUUsY0FBYyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7YUFDdEM7WUFDRCxtQkFBbUIsRUFBRSxPQUFPO1lBQzVCLEdBQUcsTUFBTTtTQUNWLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBMEI7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRztZQUNsQixJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDakIsR0FBRyxLQUFLO1NBQ1QsQ0FBQztJQUNKLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxVQUFrQixFQUFFLE1BQWU7UUFDckQsTUFBTSxNQUFNLEdBQVE7WUFDbEIsR0FBRyxFQUFFLFdBQVc7WUFDaEIsR0FBRyxFQUFFLFdBQVc7WUFDaEIsR0FBRyxFQUFFLGtCQUFrQjtZQUN2QixHQUFHLEVBQUUsa0JBQWtCO1NBQ3hCLENBQUM7UUFFRixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1NBQzFDO2FBQU07WUFDTCxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsY0FBYyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDdEU7SUFDSCxDQUFDO0NBQ0Y7QUE1R0M7SUFMQyxvQkFBb0IsQ0FBQztRQUNwQixpQkFBaUIsRUFBRTtZQUNqQixZQUFZLEVBQUUsSUFBSTtTQUNuQjtLQUNGLENBQUM7NERBYUQ7QUFPRDtJQUxDLG9CQUFvQixDQUFDO1FBQ3BCLGlCQUFpQixFQUFFO1lBQ2pCLFlBQVksRUFBRSxJQUFJO1NBQ25CO0tBQ0YsQ0FBQzs2REFVRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtcbiAgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgTmF2aWdhdGlvblN0YXJ0LFxuICBSb3V0ZXIsXG4gIFJvdXRlclN0YXRlU25hcHNob3Rcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlLCB0YWtlV2hpbGUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNb25rZXlFY3hDb3JlU2VydmljZSB9IGZyb20gJy4uLy4uL2RlY29yYXRvcnMvbW9ua2V5ZWN4LWRlY29yYXRvcnMnO1xuaW1wb3J0IHtcbiAgTW9ua2V5RWN4Q29tcGFueVBlbmRlbmNpZXNWYWxpZGF0ZWQsXG4gIE1vbmtleUVjeENvbmZpZyxcbiAgTW9ua2V5RWN4Q291bnRyeVNlY3VyaXR5LFxuICBNb25rZXlFY3hFcnJvclJlc3BvbnNlLFxuICBNb25rZXlFY3hIYW5kbGVkRXJyb3JSZXNwb25zZSxcbiAgTW9ua2V5RWN4UmVxdWVzdFBhZ2VkLFxuICBNb25rZXlFY3hSZXF1ZXN0U2NoZWR1bGUsXG4gIE1vbmtleUVjeFJlc3BvbnNlTGlua3MsXG4gIE1vbmtleUVjeFJlc3BvbnNlUGFnZWQsXG4gIE1vbmtleUVjeFNhdmVkU3RhdGUsXG4gIE1vbmtleUVjeFRyYW5zbGF0ZU9wdGlvbnNcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNb25rZXlFY3hNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVsJztcbmltcG9ydCB7IE1vbmtleUVjeFV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xuaW1wb3J0IHsgTW9ua2V5RWN4RmVhdHVyZVRvZ2dsZVNlcnZpY2UgfSBmcm9tICcuLi9jb25maWcvbW9ua2V5ZWN4LWZlYXR1cmUtdG9nZ2xlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9ua2V5RWN4U2VydmljZSB9IGZyb20gJy4uL21vbmtleWVjeC1zZXJ2aWNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9ua2V5RWN4UGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICcuLi9wYWdpbmF0aW9uJztcbmltcG9ydCB7IE1vbmtleUVjeFJlcXVlc3RQYWdlZEhhbmRsaW5nIH0gZnJvbSAnLi4vcmVxdWVzdC1wYWdlZC9tb25rZXllY3gtcmVxdWVzdC1yZXF1ZXN0LXBhZ2VkLWhhbmRsaW5nJztcbmltcG9ydCB7IE1vbmtleUVjeFJlcXVlc3RRdWV1ZUhhbmRsaW5nU2VydmljZSB9IGZyb20gJy4uL3JlcXVlc3QtcXVldWUvbW9ua2V5ZWN4LXJlcXVlc3QtcXVldWUtaGFuZGxpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBNb25rZXlFY3hSZXF1ZXN0U2NoZWR1bGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2NoZWR1bGVzL21vbmtleWVjeC1yZXF1ZXN0LXNjaGVkdWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9ua2V5RWN4VG9rZW5TdG9yYWdlU2VydmljZSB9IGZyb20gJy4uL3N0b3JhZ2UvbW9ua2V5ZWN4LXRva2VuLXN0b3JhZ2Uuc2VydmljZSc7XG5cbmNsYXNzIExpbmtzTW9kZWwgZXh0ZW5kcyBNb25rZXlFY3hNb2RlbCB7XG4gIGNvbnN0cnVjdG9yKGRhdGE/OiBhbnkpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2xpbmtzID0gZGF0YT8uX2xpbmtzO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBNb25rZXlFY3hDb21tb25zU2VydmljZSB7XG4gIHByaXZhdGUgZmxhZ1ZhbGlkYXRvciA9IHRydWU7XG5cbiAgcHJpdmF0ZSBkZXN0cm95ZWQgPSBmYWxzZTtcblxuICBfX2RhdGEkOiBPYnNlcnZhYmxlPGFueT4gfCBudWxsID0gbnVsbDtcblxuICBfX3BhZ2luYXRpb24kOiBPYnNlcnZhYmxlPGFueT4gfCBudWxsID0gbnVsbDtcblxuICBfX2NvbnRyb2wkOiBPYnNlcnZhYmxlPGFueT4gfCBudWxsID0gbnVsbDtcblxuICBfX3BhZ2UkOiBPYnNlcnZhYmxlPGFueT4gfCBudWxsID0gbnVsbDtcblxuICBfX2RhdGE6IGFueSB8IGFueVtdO1xuXG4gIF9fc2F2ZWRTdGF0ZTogTW9ua2V5RWN4U2F2ZWRTdGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIF9fcGFyYW1zOiBhbnkgfCBhbnlbXTtcblxuICBfX2Vycm9yOiBNb25rZXlFY3hFcnJvclJlc3BvbnNlIHwgbnVsbCA9IG51bGw7XG5cbiAgX19oYW5kbGVkRXJyb3I6IE1vbmtleUVjeEhhbmRsZWRFcnJvclJlc3BvbnNlIHwgbnVsbCA9IG51bGw7XG5cbiAgX19wYWdlOiBNb25rZXlFY3hSZXNwb25zZVBhZ2VkIHwgbnVsbCA9IG51bGw7XG5cbiAgX19saW5rczogTW9ua2V5RWN4UmVzcG9uc2VMaW5rcyB8IG51bGwgPSBudWxsO1xuXG4gIF9fc2VhcmNoOiBhbnk7XG5cbiAgX19yZXF1ZXN0UGFnZWQ6IE1vbmtleUVjeFJlcXVlc3RQYWdlZCB8IG51bGwgPSBudWxsO1xuXG4gIF9fb25TZWFyY2hDaGFuZ2VkJDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuXG4gIF9fb25EYXRhQ2hhbmdlZCQ6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcblxuICBfX29uTG9hZGluZ0luUHJvZ3Jlc3MkOiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIF9fb25VcGxvYWRJblByb2dyZXNzJDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICBfX29uRGF0YURlbGV0ZWQkOiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG5cbiAgX19vbkVycm9yQ2hhbmdlZCQ6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcblxuICBfX29uR292ZXJubWVudElkRGF0YUNoYW5nZWQkOiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XG5cbiAgX19vblppcENvZGVEYXRhQ2hhbmdlZCQ6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChudWxsKTtcblxuICBfX29uaTE4bkRhdGFDaGFuZ2VkJDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xuXG4gIF9fb25Eb1NlYXJjaCQ6IEJlaGF2aW9yU3ViamVjdDxNb25rZXlFY3hSZXF1ZXN0UGFnZWQ+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh7fSk7XG5cbiAgX19zY2hlZHVsZTogTW9ua2V5RWN4UmVxdWVzdFNjaGVkdWxlIHwgbnVsbCA9IG51bGw7XG5cbiAgX19pMThuOiBhbnk7XG5cbiAgX19jYWxsYmFja1BhZ2luYXRpb246IEZ1bmN0aW9uID0gKCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoJ01ldGhvZCBjYWxsYmFja1BhZ2luYXRpb24gbmVlZHMgdG8gYmUgZGVjbGFyZWQnKTtcbiAgfTtcblxuICBfX3BhZ2luYXRpb25PcHRpb25zOiB7XG4gICAgc2VydmljZTogTW9ua2V5RWN4UGFnaW5hdGlvblNlcnZpY2U7XG4gICAgY2FsbGJhY2s6IEZ1bmN0aW9uO1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gIH0gfCB1bmRlZmluZWQ7XG5cbiAgX19pc0FibGVUb0RvUGFnaW5hdGlvbiA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBtb25rZXllY3hTZXJ2aWNlPzogTW9ua2V5RWN4U2VydmljZSxcbiAgICBwdWJsaWMgdG9rZW5TdG9yYWdlPzogTW9ua2V5RWN4VG9rZW5TdG9yYWdlU2VydmljZSxcbiAgICBwdWJsaWMgb3RoZXJBcmdzPzoge1xuICAgICAgcm91dGVyPzogUm91dGVyO1xuICAgICAgc2NoZWR1bGU/OiB7XG4gICAgICAgIHNlcnZpY2U6IE1vbmtleUVjeFJlcXVlc3RTY2hlZHVsZVNlcnZpY2U7XG4gICAgICAgIG9wdGlvbnM/OiB7XG4gICAgICAgICAgY2xlYXJPbkNoYW5nZVJvdXRlPzogYm9vbGVhbjtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBxdWV1ZT86IHtcbiAgICAgICAgc2VydmljZTogTW9ua2V5RWN4UmVxdWVzdFF1ZXVlSGFuZGxpbmdTZXJ2aWNlO1xuICAgICAgfTtcbiAgICB9XG4gICkge1xuICAgIHRoaXMuaGFuZGxlSW5pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVJbml0KCkge1xuICAgIGlmICh0aGlzLm90aGVyQXJncz8ucm91dGVyKSB7XG4gICAgICBjb25zdCB7IGNsZWFyT25DaGFuZ2VSb3V0ZSB9ID0gdGhpcy5vdGhlckFyZ3M/LnNjaGVkdWxlPy5vcHRpb25zIHx8IHtcbiAgICAgICAgY2xlYXJPbkNoYW5nZVJvdXRlOiBmYWxzZVxuICAgICAgfTtcblxuICAgICAgdGhpcy5vdGhlckFyZ3Mucm91dGVyLmV2ZW50c1xuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydDtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlV2hpbGUoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmRlc3Ryb3llZDtcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9fc2NoZWR1bGUgJiYgY2xlYXJPbkNoYW5nZVJvdXRlKSB7XG4gICAgICAgICAgICB0aGlzLm90aGVyQXJncz8uc2NoZWR1bGU/LnNlcnZpY2U/LnJlbW92ZVNjaGVkdWxlKHRoaXMuX19zY2hlZHVsZSk7XG4gICAgICAgICAgICB0aGlzLl9fc2NoZWR1bGUgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBuYXZpZ2F0ZVRvUGVuZGVuY3lQYWdlKFxuICAgIGFyZzogTW9ua2V5RWN4Q29tcGFueVBlbmRlbmNpZXNWYWxpZGF0ZWQsXG4gICAgY29tcGFueVR5cGU/OiBzdHJpbmcsXG4gICAgcm91dGVyPzogUm91dGVyXG4gICkge1xuICAgIGxldCByb3V0ZSA9ICcvYXBwJztcblxuICAgIGlmIChjb21wYW55VHlwZSkge1xuICAgICAgcm91dGUgPSBgJHtyb3V0ZX0vJHtjb21wYW55VHlwZX0vcGFnZXNgO1xuICAgIH0gZWxzZSB7XG4gICAgICByb3V0ZSA9IGAke3JvdXRlfS91c2VyL3Byb2ZpbGUvcGFnZXNgO1xuICAgIH1cblxuICAgIGlmICghcm91dGVyKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcignUm91dGVyIG11c3QgYmUgZGVjbGFyZWQnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcm91dGVyLm5hdmlnYXRlKFtgJHtyb3V0ZX0vY29tcGFueS1wZW5kZW5jeWAudG9Mb3dlckNhc2UoKV0sIHtcbiAgICAgICAgc3RhdGU6IHtcbiAgICAgICAgICBwZW5kZW5jeURhdGE6IGFyZ1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFsbG93ZWRTZWN1cml0eUFjY2Vzc0J5UGVuZGVuY3koYXJnczogYW55KTogTW9ua2V5RWN4Q29tcGFueVBlbmRlbmNpZXNWYWxpZGF0ZWQge1xuICAgIGlmICghYXJncykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGFzUGVuZGVuY2llczogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHsgc2VydmljZSwgdHlwZSB9ID0gYXJncztcbiAgICByZXR1cm4gc2VydmljZS5oYXNQZW5kZW5jaWVzKHR5cGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBhbGxvd2VkU2VjdXJpdHlBY2Nlc3NCeUZlYXR1cmUoYXJnczogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFhcmdzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgeyBjb25maWcsIGZlYXR1cmUgfSA9IGFyZ3M7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghTW9ua2V5RWN4VXRpbHMucGVyc2lzdE51bGxFbXB0eVVuZGVmaW5lZChmZWF0dXJlKSB8fFxuICAgICAgICAhTW9ua2V5RWN4VXRpbHMucGVyc2lzdE51bGxFbXB0eVVuZGVmaW5lZChjb25maWc/LnByb2dyYW0/LnNldHRpbmdzKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAhY29uZmlnPy5wcm9ncmFtPy5zZXR0aW5ncz8uW2ZlYXR1cmVdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIG5vdCB0byBkb1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYWxsb3dlZFNlY3VyaXR5QWNjZXNzQnlDb3VudHJ5KGFyZz86IE1vbmtleUVjeENvdW50cnlTZWN1cml0eSk6IGJvb2xlYW4ge1xuICAgIGlmICghYXJnKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gYXJnLmNvdW50cnkgPT09IGFyZy5lbnZDb3VudHJ5O1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVQYWdpbmF0aW9uT3B0aW9ucygpIHtcbiAgICBjb25zdCB7IF9fcGFnaW5hdGlvbk9wdGlvbnMgfSA9IHRoaXM7XG4gICAgaWYgKF9fcGFnaW5hdGlvbk9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHsgc2VydmljZSwgY2FsbGJhY2ssIG5hbWUgfSA9IF9fcGFnaW5hdGlvbk9wdGlvbnM7XG4gICAgICBzZXJ2aWNlPy5zZXRDYWxsYmFjaygodHlwZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuZG9QYWdpbmF0aW9udjIodHlwZSwgY2FsbGJhY2spO1xuICAgICAgfSwgbmFtZSB8fCAnbWFpbicpO1xuICAgIH1cbiAgfVxuXG4gIHNldFBhZ2UocmVxdWVzdFBhZ2VkOiBNb25rZXlFY3hSZXF1ZXN0UGFnZWQpIHtcbiAgICB0aGlzLl9fcmVxdWVzdFBhZ2VkID0ge1xuICAgICAgLi4udGhpcy5fX3JlcXVlc3RQYWdlZCxcbiAgICAgIC4uLnJlcXVlc3RQYWdlZFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBuZXh0UGFnZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fX2xpbmtzKSB7XG4gICAgICByZXR1cm4gISF0aGlzLl9fbGlua3M/Lm5leHQ7XG4gICAgfVxuICAgIGlmICghdGhpcy5fX3JlcXVlc3RQYWdlZCkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHsgcGFnZSB9ID0gdGhpcy5fX3JlcXVlc3RQYWdlZCBhcyBhbnk7XG4gICAgY29uc3QgeyBudW1iZXIsIHRvdGFsUGFnZXMgfSA9IHBhZ2U7XG4gICAgaWYgKG51bWJlciA8IHRvdGFsUGFnZXMpIHtcbiAgICAgIHRoaXMuX19yZXF1ZXN0UGFnZWQgPSB7XG4gICAgICAgIC4uLnRoaXMuX19yZXF1ZXN0UGFnZWQsXG4gICAgICAgIHBhZ2U6IHtcbiAgICAgICAgICAuLi5wYWdlLFxuICAgICAgICAgIG51bWJlcjogbnVtYmVyICsgMVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGdldEVtYmVkZGVkRGF0YShkYXRhOiBhbnksIGZpZWxkOiBzdHJpbmcpOiBhbnlbXSB8IGFueSB7XG4gICAgY29uc3QgeyBfZW1iZWRkZWQgfSA9IGRhdGE7XG4gICAgcmV0dXJuIF9lbWJlZGRlZCA/IF9lbWJlZGRlZFtmaWVsZF0gOiBudWxsO1xuICB9XG5cbiAgZ2V0Tm9ybWFsaXplZFVybCh1cmw6IHN0cmluZywgc2FtZVBhZ2UgPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgY29uc3QgeyBfX3JlcXVlc3RQYWdlZCwgX19saW5rcyB9ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IE1vbmtleUVjeFJlcXVlc3RQYWdlZEhhbmRsaW5nKFxuICAgICAgdXJsLFxuICAgICAgX19yZXF1ZXN0UGFnZWQgfHwge30sXG4gICAgICBfX2xpbmtzLFxuICAgICAgc2FtZVBhZ2VcbiAgICApLmdldFJlcXVlc3RXaXRoUGFnZWRQYXJhbXMoKTtcbiAgfVxuXG4gIGNsZWFyKGNsZWFyRGF0YTogYm9vbGVhbikge1xuICAgIGlmIChjbGVhckRhdGEpIHtcbiAgICAgIHRoaXMuX19kYXRhID0gbnVsbDtcbiAgICAgIHRoaXMuX19yZXF1ZXN0UGFnZWQgPSBudWxsO1xuICAgICAgdGhpcy5fX3BhcmFtcyA9IG51bGw7XG4gICAgICB0aGlzLl9fcGFnZSA9IG51bGw7XG4gICAgICB0aGlzLl9fbGlua3MgPSBudWxsO1xuXG4gICAgICBpZiAodGhpcy5fX3NjaGVkdWxlKSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUgfSA9IHRoaXMuX19zY2hlZHVsZTtcbiAgICAgICAgaWYgKHF1ZXVlKSB7XG4gICAgICAgICAgdGhpcy5vdGhlckFyZ3M/LnF1ZXVlPy5zZXJ2aWNlPy5yZW1vdmVRdWV1ZUl0ZW0ocXVldWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3RoZXJBcmdzPy5zY2hlZHVsZT8uc2VydmljZT8ucmVtb3ZlU2NoZWR1bGUodGhpcy5fX3NjaGVkdWxlKTtcbiAgICAgICAgdGhpcy5fX3NjaGVkdWxlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fX2Vycm9yID0gbnVsbDtcbiAgICB0aGlzLl9faGFuZGxlZEVycm9yID0gbnVsbDtcbiAgICB0aGlzLmZsYWdWYWxpZGF0b3IgPSBmYWxzZTtcbiAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XG4gIH1cblxuICByZXNvbHZlKFxuICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbCxcbiAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCB8IG51bGwsXG4gICAgb3RoZXJBcmdzPzoge1xuICAgICAgY29tcGFueVR5cGU/OiBzdHJpbmcsXG4gICAgICBjYWxsYmFja01haW46IEZ1bmN0aW9uO1xuICAgICAgcm91dGVyPzogUm91dGVyO1xuICAgICAgY2FsbGJhY2tQYWdpbmF0aW9uPzogRnVuY3Rpb247XG4gICAgICB0cmFuc2xhdGVPcHRpb25zPzogTW9ua2V5RWN4VHJhbnNsYXRlT3B0aW9ucztcbiAgICAgIGZlYXR1cmU/OiB7XG4gICAgICAgIHNlcnZpY2U6IE1vbmtleUVjeEZlYXR1cmVUb2dnbGVTZXJ2aWNlO1xuICAgICAgICBmbGFnOiBzdHJpbmc7XG4gICAgICB9O1xuICAgICAgZmVhdHVyZUJ5UHJvZ3JhbT86IHtcbiAgICAgICAgY29uZmlnOiBNb25rZXlFY3hDb25maWc7XG4gICAgICAgIGZlYXR1cmU6IHN0cmluZztcbiAgICAgIH07XG4gICAgICBjb3VudHJ5U2VjdXJpdHk/OiBNb25rZXlFY3hDb3VudHJ5U2VjdXJpdHk7XG4gICAgICBwZW5kZW5jeT86IHtcbiAgICAgICAgc2VydmljZToge1xuICAgICAgICAgIGhhc1BlbmRlbmNpZXM6IEZ1bmN0aW9uO1xuICAgICAgICB9O1xuICAgICAgICB0eXBlOiBzdHJpbmc7XG4gICAgICB9O1xuICAgICAgcGFnaW5hdGlvbk9wdGlvbnM/OiB7XG4gICAgICAgIHNlcnZpY2U6IE1vbmtleUVjeFBhZ2luYXRpb25TZXJ2aWNlLFxuICAgICAgICBjYWxsYmFjazogRnVuY3Rpb24sXG4gICAgICAgIG5hbWU/OiBzdHJpbmdcbiAgICAgIH1cbiAgICB9XG4gICkge1xuICAgIGlmIChKU09OLnN0cmluZ2lmeShyb3V0ZT8ucXVlcnlQYXJhbXMpID09PSAne30nKSB7XG4gICAgICB0aGlzLl9fZGF0YSA9IG51bGw7XG4gICAgICB0aGlzLl9fcGFnZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fX3JlcXVlc3RQYWdlZCA9IG51bGw7XG4gICAgdGhpcy5mbGFnVmFsaWRhdG9yID0gdHJ1ZTtcblxuICAgIGNvbnN0IHBlbmQgPSB0aGlzLmFsbG93ZWRTZWN1cml0eUFjY2Vzc0J5UGVuZGVuY3kob3RoZXJBcmdzPy5wZW5kZW5jeSk7XG4gICAgY29uc3QgYWxsb3dlZEJ5UHJvZ3JhbSA9IHRoaXMuYWxsb3dlZFNlY3VyaXR5QWNjZXNzQnlGZWF0dXJlKG90aGVyQXJncz8uZmVhdHVyZUJ5UHJvZ3JhbSk7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLmFsbG93ZWRTZWN1cml0eUFjY2Vzc0J5Q291bnRyeShvdGhlckFyZ3M/LmNvdW50cnlTZWN1cml0eSkgJiZcbiAgICAgICFwZW5kLmhhc1BlbmRlbmNpZXMgJiZcbiAgICAgIGFsbG93ZWRCeVByb2dyYW1cbiAgICApIHtcbiAgICAgIGlmICh0aGlzLl9fc2NoZWR1bGUpIHtcbiAgICAgICAgdGhpcy5vdGhlckFyZ3M/LnNjaGVkdWxlPy5zZXJ2aWNlPy5yZW1vdmVTY2hlZHVsZSh0aGlzLl9fc2NoZWR1bGUpO1xuICAgICAgICB0aGlzLl9fc2NoZWR1bGUgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IF9fcmVxdWVzdFBhZ2VkIH0gPSB0aGlzO1xuICAgICAgaWYgKCFfX3JlcXVlc3RQYWdlZCkge1xuICAgICAgICB0aGlzLnNldFBhZ2Uoe1xuICAgICAgICAgIHBhZ2U6IHtcbiAgICAgICAgICAgIG51bWJlcjogMCxcbiAgICAgICAgICAgIHNpemU6IDEwXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKG90aGVyQXJncz8udHJhbnNsYXRlT3B0aW9ucykge1xuICAgICAgICBjb25zdCB7IHNlcnZpY2UsIGtleXMgfSA9IG90aGVyQXJncz8udHJhbnNsYXRlT3B0aW9ucztcbiAgICAgICAgdGhpcy5nZXRpMThuKHNlcnZpY2UsIGtleXMgfHwgJycpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3RoZXJBcmdzPy5jYWxsYmFja1BhZ2luYXRpb24pIHtcbiAgICAgICAgdGhpcy5fX2NhbGxiYWNrUGFnaW5hdGlvbiA9IG90aGVyQXJncy5jYWxsYmFja1BhZ2luYXRpb247XG4gICAgICB9XG5cbiAgICAgIGlmIChvdGhlckFyZ3M/LnBhZ2luYXRpb25PcHRpb25zKSB7XG4gICAgICAgIHRoaXMuX19wYWdpbmF0aW9uT3B0aW9ucyA9IG90aGVyQXJncz8ucGFnaW5hdGlvbk9wdGlvbnM7XG4gICAgICAgIHRoaXMuaGFuZGxlUGFnaW5hdGlvbk9wdGlvbnMoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG90aGVyQXJncz8uZmVhdHVyZSkge1xuICAgICAgICBjb25zdCB7IGZsYWcsIHNlcnZpY2UgfSA9IG90aGVyQXJncy5mZWF0dXJlO1xuXG4gICAgICAgIHNlcnZpY2Uub25GbGFnc1xuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZVdoaWxlKCgpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmxhZ1ZhbGlkYXRvcjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHZhbDogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbCkge1xuICAgICAgICAgICAgICBjb25zdCBoYXNGbGFnID0gc2VydmljZS5nZXRGbGFnKGZsYWcpO1xuXG4gICAgICAgICAgICAgIGlmIChNb25rZXlFY3hVdGlscy5wZXJzaXN0TnVsbEVtcHR5VW5kZWZpbmVkKGhhc0ZsYWcpKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNGbGFnKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9FcnJvclBhZ2UoNDA0LCBvdGhlckFyZ3M/LnJvdXRlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIG90aGVyQXJncz8uY2FsbGJhY2tNYWluKCk7XG4gICAgfSBlbHNlIGlmICghYWxsb3dlZEJ5UHJvZ3JhbSkge1xuICAgICAgdGhpcy5uYXZpZ2F0ZVRvRXJyb3JQYWdlKDQwNCwgb3RoZXJBcmdzPy5yb3V0ZXIpO1xuICAgIH0gZWxzZSBpZiAocGVuZC5oYXNQZW5kZW5jaWVzKSB7XG4gICAgICB0aGlzLm5hdmlnYXRlVG9QZW5kZW5jeVBhZ2UocGVuZCwgb3RoZXJBcmdzPy5jb21wYW55VHlwZSwgb3RoZXJBcmdzPy5yb3V0ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm5hdmlnYXRlVG9FcnJvclBhZ2UoNDAzLCBvdGhlckFyZ3M/LnJvdXRlcik7XG4gICAgfVxuICB9XG5cbiAgZ2V0SFRUUEhlYWRlckFwcGxpY2F0aW9uUERGKCk6IE9iamVjdCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9ic2VydmU6ICdyZXNwb25zZScsXG4gICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xuICAgIH07XG4gIH1cblxuICBATW9ua2V5RWN4Q29yZVNlcnZpY2Uoe1xuICAgIHJlcXVlc3RJblByb2dyZXNzOiB7XG4gICAgICBzaG93UHJvZ3Jlc3M6IHRydWVcbiAgICB9XG4gIH0pXG4gIGdlbmVyaWNNZXRob2QobGluazogYW55LCBkYXRhPzogYW55LCBjYWxsYmFjaz86IEZ1bmN0aW9uKSB7XG4gICAgY29uc3QgeyBocmVmLCB0eXBlID0gJ2dldCcgfSA9IGxpbms7XG5cbiAgICB0aGlzLm1vbmtleWVjeFNlcnZpY2U/Llt0eXBlLnRvTG93ZXJDYXNlKCldKGAke2hyZWZ9YCwgZGF0YSk/LnN1YnNjcmliZShcbiAgICAgIChyZXNwOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhyZXNwKTtcbiAgICAgIH0sXG4gICAgICAoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKCk7XG4gICAgICAgIHRocm93RXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgQE1vbmtleUVjeENvcmVTZXJ2aWNlKHtcbiAgICByZXF1ZXN0SW5Qcm9ncmVzczoge1xuICAgICAgc2hvd1Byb2dyZXNzOiB0cnVlXG4gICAgfVxuICB9KVxuICBhc3luYyBnZXRHZW5lcmljRGF0YShkYXRhOiBhbnksIGFjdGlvbjogc3RyaW5nKSB7XG4gICAgY29uc3QgeyBtb25rZXllY3hTZXJ2aWNlIH0gPSB0aGlzO1xuICAgIGlmICghbW9ua2V5ZWN4U2VydmljZSkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgeyBocmVmLCB0eXBlIH0gPSBuZXcgTGlua3NNb2RlbChkYXRhKT8uZ2V0QWN0aW9uKGFjdGlvbikgfHwge1xuICAgICAgaHJlZjogJycsIHR5cGU6ICdnZXQnXG4gICAgfTtcblxuICAgIHJldHVybiBtb25rZXllY3hTZXJ2aWNlW3R5cGUudG9Mb3dlckNhc2UoKV08YW55PihocmVmKVxuICAgICAgLnBpcGUodGFrZSgxKSkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBnZXRpMThuKHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsIGtleXM6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgdHJhbnNsYXRlU2VydmljZS5vbkRlZmF1bHRMYW5nQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLl9faTE4biA9IHRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChrZXlzKTtcbiAgICAgIHRoaXMuX19vbmkxOG5EYXRhQ2hhbmdlZCQubmV4dChudWxsKTtcbiAgICB9KTtcbiAgICB0cmFuc2xhdGVTZXJ2aWNlLmdldFN0cmVhbU9uVHJhbnNsYXRpb25DaGFuZ2Uoa2V5cykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuX19pMThuID0gdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGtleXMpO1xuICAgICAgdGhpcy5fX29uaTE4bkRhdGFDaGFuZ2VkJC5uZXh0KG51bGwpO1xuICAgIH0pO1xuICB9XG5cbiAgZG9QYWdpbmF0aW9uKCkge1xuICAgIGlmICghdGhpcy5fX29uTG9hZGluZ0luUHJvZ3Jlc3MkLnZhbHVlKSB7XG4gICAgICBjb25zdCBoYXNNb3JlUGFnZXMgPSB0aGlzLnNldFBhZ2Uoe1xuICAgICAgICBwYWdlOiB7XG4gICAgICAgICAgLi4udGhpcy5fX3BhZ2VcbiAgICAgICAgfVxuICAgICAgfSkubmV4dFBhZ2UoKTtcblxuICAgICAgaWYgKGhhc01vcmVQYWdlcyAmJiB0aGlzLl9fY2FsbGJhY2tQYWdpbmF0aW9uKSB7XG4gICAgICAgIHRoaXMuX19jYWxsYmFja1BhZ2luYXRpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkb1BhZ2luYXRpb252Mih0eXBlOiBzdHJpbmcsIGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgIGlmICghdGhpcy5fX29uTG9hZGluZ0luUHJvZ3Jlc3MkLnZhbHVlKSB7XG4gICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sodHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2V0TGlua3MobGlua3M6IGFueSkge1xuICAgIHRoaXMuX19pc0FibGVUb0RvUGFnaW5hdGlvbiA9IHtcbiAgICAgIGZpcnN0OiAhIWxpbmtzPy5maXJzdCxcbiAgICAgIG5leHQ6ICEhbGlua3M/Lm5leHRcbiAgICB9O1xuICAgIHRoaXMuX19saW5rcyA9IGxpbmtzO1xuICB9XG5cbiAgc2V0U2VhcmNoQnlVcmwocm91dGVyOiBSb3V0ZXIsIHVybDogc3RyaW5nLCBzZWFyY2g6IGFueSwgZXh0cmFzPzogYW55KSB7XG4gICAgdGhpcy5fX2RhdGEgPSBudWxsO1xuICAgIHRoaXMuX19wYWdlID0gbnVsbDtcbiAgICB0aGlzLl9fb25EYXRhQ2hhbmdlZCQubmV4dChudWxsKTtcbiAgICB0aGlzLl9fb25Mb2FkaW5nSW5Qcm9ncmVzcyQubmV4dChmYWxzZSk7XG5cbiAgICByb3V0ZXIubmF2aWdhdGUoW3VybF0sIHtcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgIC4uLnNlYXJjaCxcbiAgICAgICAgcjogTW9ua2V5RWN4VXRpbHMuZ2V0UmFuZG9tU3RyaW5nKDMwKVxuICAgICAgfSxcbiAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXG4gICAgICAuLi5leHRyYXNcbiAgICB9KTtcbiAgfVxuXG4gIHNhdmVTdGF0ZShzdGF0ZTogTW9ua2V5RWN4U2F2ZWRTdGF0ZSkge1xuICAgIHRoaXMuX19zYXZlZFN0YXRlID0ge1xuICAgICAgcGFnZTogdGhpcy5fX3BhZ2UsXG4gICAgICAuLi5zdGF0ZVxuICAgIH07XG4gIH1cblxuICBuYXZpZ2F0ZVRvRXJyb3JQYWdlKHN0YXR1c0NvZGU6IG51bWJlciwgcm91dGVyPzogUm91dGVyKSB7XG4gICAgY29uc3Qgcm91dGVzOiBhbnkgPSB7XG4gICAgICA0MDM6ICdmb3JiaWRkZW4nLFxuICAgICAgNDA0OiAnbm90LWZvdW5kJyxcbiAgICAgIDUwMDogJ3NlcnZpY2UtcHJvYmxlbXMnLFxuICAgICAgNTAzOiAnc2VydmljZS1wcm9ibGVtcydcbiAgICB9O1xuXG4gICAgaWYgKCFyb3V0ZXIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1JvdXRlciBtdXN0IGJlIGRlY2xhcmVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJvdXRlcj8ubmF2aWdhdGUoW2AvYXBwL3BhZ2VzLyR7cm91dGVzW3N0YXR1c0NvZGVdfWAudG9Mb3dlckNhc2UoKV0pO1xuICAgIH1cbiAgfVxufVxuIl19
1
+ import { __decorate } from "tslib";
2
+ import { NavigationStart } from '@angular/router';
3
+ import { BehaviorSubject, throwError } from 'rxjs';
4
+ import { filter, take, takeWhile } from 'rxjs/operators';
5
+ import { MonkeyEcxCoreService } from '../../decorators/monkeyecx-decorators';
6
+ import { MonkeyEcxModel } from '../../model';
7
+ import { MonkeyEcxUtils } from '../../utils/utils';
8
+ import { MonkeyEcxRequestPagedHandling } from '../request-paged/monkeyecx-request-request-paged-handling';
9
+ class LinksModel extends MonkeyEcxModel {
10
+ constructor(data) {
11
+ super();
12
+ this._links = data?._links;
13
+ }
14
+ }
15
+ export class MonkeyEcxCommonsService {
16
+ constructor(monkeyecxService, tokenStorage, otherArgs) {
17
+ this.monkeyecxService = monkeyecxService;
18
+ this.tokenStorage = tokenStorage;
19
+ this.otherArgs = otherArgs;
20
+ this.flagValidator = true;
21
+ this.destroyed = false;
22
+ this.__data$ = null;
23
+ this.__pagination$ = null;
24
+ this.__control$ = null;
25
+ this.__page$ = null;
26
+ this.__savedState = null;
27
+ this.__error = null;
28
+ this.__handledError = null;
29
+ this.__page = null;
30
+ this.__links = null;
31
+ this.__requestPaged = null;
32
+ this.__onSearchChanged$ = new BehaviorSubject(null);
33
+ this.__onDataChanged$ = new BehaviorSubject(null);
34
+ this.__onLoadingInProgress$ = new BehaviorSubject(false);
35
+ this.__onUploadInProgress$ = new BehaviorSubject(false);
36
+ this.__onDataDeleted$ = new BehaviorSubject(null);
37
+ this.__onErrorChanged$ = new BehaviorSubject(null);
38
+ this.__onGovernmentIdDataChanged$ = new BehaviorSubject(null);
39
+ this.__onZipCodeDataChanged$ = new BehaviorSubject(null);
40
+ this.__oni18nDataChanged$ = new BehaviorSubject(null);
41
+ this.__onDoSearch$ = new BehaviorSubject({});
42
+ this.__schedule = null;
43
+ this.__callbackPagination = () => {
44
+ // eslint-disable-next-line no-console
45
+ return console.error('Method callbackPagination needs to be declared');
46
+ };
47
+ this.__isAbleToDoPagination = {};
48
+ this.handleInit();
49
+ }
50
+ handleInit() {
51
+ if (this.otherArgs?.router) {
52
+ const { clearOnChangeRoute } = this.otherArgs?.schedule?.options || {
53
+ clearOnChangeRoute: false
54
+ };
55
+ this.otherArgs.router.events
56
+ .pipe(filter((event) => {
57
+ return event instanceof NavigationStart;
58
+ }), takeWhile(() => {
59
+ return !this.destroyed;
60
+ }))
61
+ .subscribe(() => {
62
+ if (this.__schedule && clearOnChangeRoute) {
63
+ this.otherArgs?.schedule?.service?.removeSchedule(this.__schedule);
64
+ this.__schedule = null;
65
+ }
66
+ });
67
+ }
68
+ }
69
+ navigateToPendencyPage(arg, companyType, router) {
70
+ let route = '/app';
71
+ if (companyType) {
72
+ route = `${route}/${companyType}/pages`;
73
+ }
74
+ else {
75
+ route = `${route}/user/profile/pages`;
76
+ }
77
+ if (!router) {
78
+ // eslint-disable-next-line no-console
79
+ console.error('Router must be declared');
80
+ }
81
+ else {
82
+ router.navigate([`${route}/company-pendency`.toLowerCase()], {
83
+ state: {
84
+ pendencyData: arg
85
+ }
86
+ });
87
+ }
88
+ }
89
+ allowedSecurityAccessByPendency(args) {
90
+ if (!args) {
91
+ return {
92
+ hasPendencies: false
93
+ };
94
+ }
95
+ const { service, type } = args;
96
+ return service.hasPendencies(type);
97
+ }
98
+ allowedSecurityAccessByFeature(args) {
99
+ if (!args) {
100
+ return true;
101
+ }
102
+ const { config, feature } = args;
103
+ try {
104
+ if (!MonkeyEcxUtils.persistNullEmptyUndefined(feature) ||
105
+ !MonkeyEcxUtils.persistNullEmptyUndefined(config?.program?.settings)) {
106
+ return true;
107
+ }
108
+ return !config?.program?.settings?.[feature];
109
+ }
110
+ catch (e) {
111
+ // not to do
112
+ }
113
+ return true;
114
+ }
115
+ allowedSecurityAccessByCountry(arg) {
116
+ if (!arg)
117
+ return true;
118
+ return arg.country === arg.envCountry;
119
+ }
120
+ handlePaginationOptions() {
121
+ const { __paginationOptions } = this;
122
+ if (__paginationOptions) {
123
+ const { service, callback, name } = __paginationOptions;
124
+ service?.setCallback((type) => {
125
+ this.doPaginationv2(type, callback);
126
+ }, name || 'main');
127
+ }
128
+ }
129
+ setPage(requestPaged) {
130
+ this.__requestPaged = {
131
+ ...this.__requestPaged,
132
+ ...requestPaged
133
+ };
134
+ return this;
135
+ }
136
+ nextPage() {
137
+ if (this.__links) {
138
+ return !!this.__links?.next;
139
+ }
140
+ if (!this.__requestPaged)
141
+ return false;
142
+ const { page } = this.__requestPaged;
143
+ const { number, totalPages } = page;
144
+ if (number < totalPages) {
145
+ this.__requestPaged = {
146
+ ...this.__requestPaged,
147
+ page: {
148
+ ...page,
149
+ number: number + 1
150
+ }
151
+ };
152
+ return true;
153
+ }
154
+ return false;
155
+ }
156
+ getEmbeddedData(data, field) {
157
+ const { _embedded } = data;
158
+ return _embedded ? _embedded[field] : null;
159
+ }
160
+ getNormalizedUrl(url, samePage = false) {
161
+ const { __requestPaged, __links } = this;
162
+ return new MonkeyEcxRequestPagedHandling(url, __requestPaged || {}, __links, samePage).getRequestWithPagedParams();
163
+ }
164
+ clear(clearData) {
165
+ if (clearData) {
166
+ this.__data = null;
167
+ this.__requestPaged = null;
168
+ this.__params = null;
169
+ this.__page = null;
170
+ this.__links = null;
171
+ if (this.__schedule) {
172
+ const { queue } = this.__schedule;
173
+ if (queue) {
174
+ this.otherArgs?.queue?.service?.removeQueueItem(queue);
175
+ }
176
+ this.otherArgs?.schedule?.service?.removeSchedule(this.__schedule);
177
+ this.__schedule = null;
178
+ }
179
+ }
180
+ this.__error = null;
181
+ this.__handledError = null;
182
+ this.flagValidator = false;
183
+ this.destroyed = true;
184
+ }
185
+ resolve(route, state, otherArgs) {
186
+ if (JSON.stringify(route?.queryParams) === '{}') {
187
+ this.__data = null;
188
+ this.__page = null;
189
+ }
190
+ this.__requestPaged = null;
191
+ this.flagValidator = true;
192
+ const pend = this.allowedSecurityAccessByPendency(otherArgs?.pendency);
193
+ const allowedByProgram = this.allowedSecurityAccessByFeature(otherArgs?.featureByProgram);
194
+ if (this.allowedSecurityAccessByCountry(otherArgs?.countrySecurity) &&
195
+ !pend.hasPendencies &&
196
+ allowedByProgram) {
197
+ if (this.__schedule) {
198
+ this.otherArgs?.schedule?.service?.removeSchedule(this.__schedule);
199
+ this.__schedule = null;
200
+ }
201
+ const { __requestPaged } = this;
202
+ if (!__requestPaged) {
203
+ this.setPage({
204
+ page: {
205
+ number: 0,
206
+ size: 10
207
+ }
208
+ });
209
+ }
210
+ if (otherArgs?.translateOptions) {
211
+ const { service, keys } = otherArgs?.translateOptions;
212
+ this.geti18n(service, keys || '');
213
+ }
214
+ if (otherArgs?.callbackPagination) {
215
+ this.__callbackPagination = otherArgs.callbackPagination;
216
+ }
217
+ if (otherArgs?.paginationOptions) {
218
+ this.__paginationOptions = otherArgs?.paginationOptions;
219
+ this.handlePaginationOptions();
220
+ }
221
+ if (otherArgs?.feature) {
222
+ const { flag, service } = otherArgs.feature;
223
+ service.onFlags
224
+ .pipe(takeWhile(() => {
225
+ return this.flagValidator;
226
+ }))
227
+ .subscribe((val) => {
228
+ if (val) {
229
+ const hasFlag = service.getFlag(flag);
230
+ if (MonkeyEcxUtils.persistNullEmptyUndefined(hasFlag)) {
231
+ if (!hasFlag) {
232
+ this.navigateToErrorPage(404, otherArgs?.router);
233
+ }
234
+ }
235
+ }
236
+ });
237
+ }
238
+ otherArgs?.callbackMain();
239
+ }
240
+ else if (!allowedByProgram) {
241
+ this.navigateToErrorPage(404, otherArgs?.router);
242
+ }
243
+ else if (pend.hasPendencies) {
244
+ this.navigateToPendencyPage(pend, otherArgs?.companyType, otherArgs?.router);
245
+ }
246
+ else {
247
+ this.navigateToErrorPage(403, otherArgs?.router);
248
+ }
249
+ }
250
+ getHTTPHeaderApplicationPDF() {
251
+ return {
252
+ observe: 'response',
253
+ responseType: 'blob'
254
+ };
255
+ }
256
+ genericMethod(link, data, callback) {
257
+ const { href, type = 'get' } = link;
258
+ this.monkeyecxService?.[type.toLowerCase()](`${href}`, data)?.subscribe((resp) => {
259
+ if (callback)
260
+ callback(resp);
261
+ }, (err) => {
262
+ if (callback)
263
+ callback();
264
+ throwError(err);
265
+ });
266
+ }
267
+ async getGenericData(data, action) {
268
+ const { monkeyecxService } = this;
269
+ if (!monkeyecxService)
270
+ return null;
271
+ const { href, type } = new LinksModel(data)?.getAction(action) || {
272
+ href: '', type: 'get'
273
+ };
274
+ return monkeyecxService[type.toLowerCase()](href)
275
+ .pipe(take(1)).toPromise();
276
+ }
277
+ geti18n(translateService, keys) {
278
+ translateService.onDefaultLangChange.subscribe(() => {
279
+ this.__i18n = translateService.instant(keys);
280
+ this.__oni18nDataChanged$.next(null);
281
+ });
282
+ translateService.getStreamOnTranslationChange(keys).subscribe(() => {
283
+ this.__i18n = translateService.instant(keys);
284
+ this.__oni18nDataChanged$.next(null);
285
+ });
286
+ }
287
+ doPagination() {
288
+ if (!this.__onLoadingInProgress$.value) {
289
+ const hasMorePages = this.setPage({
290
+ page: {
291
+ ...this.__page
292
+ }
293
+ }).nextPage();
294
+ if (hasMorePages && this.__callbackPagination) {
295
+ this.__callbackPagination();
296
+ }
297
+ }
298
+ }
299
+ doPaginationv2(type, callback) {
300
+ if (!this.__onLoadingInProgress$.value) {
301
+ if (callback) {
302
+ callback(type);
303
+ }
304
+ }
305
+ }
306
+ setLinks(links) {
307
+ this.__isAbleToDoPagination = {
308
+ first: !!links?.first,
309
+ next: !!links?.next
310
+ };
311
+ this.__links = links;
312
+ }
313
+ setSearchByUrl(router, url, search, extras) {
314
+ this.__data = null;
315
+ this.__page = null;
316
+ this.__onDataChanged$.next(null);
317
+ this.__onLoadingInProgress$.next(false);
318
+ router.navigate([url], {
319
+ queryParams: {
320
+ ...search,
321
+ r: MonkeyEcxUtils.getRandomString(30)
322
+ },
323
+ queryParamsHandling: 'merge',
324
+ ...extras
325
+ });
326
+ }
327
+ saveState(state) {
328
+ this.__savedState = {
329
+ page: this.__page,
330
+ ...state
331
+ };
332
+ }
333
+ navigateToErrorPage(statusCode, router) {
334
+ const routes = {
335
+ 403: 'forbidden',
336
+ 404: 'not-found',
337
+ 500: 'service-problems',
338
+ 503: 'service-problems'
339
+ };
340
+ if (!router) {
341
+ console.error('Router must be declared');
342
+ }
343
+ else {
344
+ router?.navigate([`/app/pages/${routes[statusCode]}`.toLowerCase()]);
345
+ }
346
+ }
347
+ }
348
+ __decorate([
349
+ MonkeyEcxCoreService({
350
+ requestInProgress: {
351
+ showProgress: true
352
+ }
353
+ })
354
+ ], MonkeyEcxCommonsService.prototype, "genericMethod", null);
355
+ __decorate([
356
+ MonkeyEcxCoreService({
357
+ requestInProgress: {
358
+ showProgress: true
359
+ }
360
+ })
361
+ ], MonkeyEcxCommonsService.prototype, "getGenericData", null);
362
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ua2V5ZWN4LWNvbW1vbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21vbmtleS1mcm9udC1jb3JlL3NyYy9saWIvY29yZS9zZXJ2aWNlcy9jb21tb25zL21vbmtleWVjeC1jb21tb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFFTCxlQUFlLEVBR2hCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLGVBQWUsRUFBYyxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFjN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFJbkQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFLMUcsTUFBTSxVQUFXLFNBQVEsY0FBYztJQUNyQyxZQUFZLElBQVU7UUFDcEIsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxNQUFNLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLHVCQUF1QjtJQW9FbEMsWUFDUyxnQkFBbUMsRUFDbkMsWUFBMkMsRUFDM0MsU0FXTjtRQWJNLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBbUI7UUFDbkMsaUJBQVksR0FBWixZQUFZLENBQStCO1FBQzNDLGNBQVMsR0FBVCxTQUFTLENBV2Y7UUFqRkssa0JBQWEsR0FBRyxJQUFJLENBQUM7UUFFckIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUUxQixZQUFPLEdBQTJCLElBQUksQ0FBQztRQUV2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LENBQUM7YUFDdEM7WUFDRCxtQkFBbUIsRUFBRSxPQUFPO1lBQzVCLEdBQUcsTUFBTTtTQUNWLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLENBQUMsS0FBMEI7UUFDbEMsSUFBSSxDQUFDLFlBQVksR0FBRztZQUNsQixJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDakIsR0FBRyxLQUFLO1NBQ1QsQ0FBQztJQUNKLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxVQUFrQixFQUFFLE1BQWU7UUFDckQsTUFBTSxNQUFNLEdBQVE7WUFDbEIsR0FBRyxFQUFFLFdBQVc7WUFDaEIsR0FBRyxFQUFFLFdBQVc7WUFDaEIsR0FBRyxFQUFFLGtCQUFrQjtZQUN2QixHQUFHLEVBQUUsa0JBQWtCO1NBQ3hCLENBQUM7UUFFRixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1NBQzFDO2FBQU07WUFDTCxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsY0FBYyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDdEU7SUFDSCxDQUFDO0NBQ0Y7QUE1R0M7SUFMQyxvQkFBb0IsQ0FBQztRQUNwQixpQkFBaUIsRUFBRTtZQUNqQixZQUFZLEVBQUUsSUFBSTtTQUNuQjtLQUNGLENBQUM7NERBYUQ7QUFPRDtJQUxDLG9CQUFvQixDQUFDO1FBQ3BCLGlCQUFpQixFQUFFO1lBQ2pCLFlBQVksRUFBRSxJQUFJO1NBQ25CO0tBQ0YsQ0FBQzs2REFVRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1xyXG4gIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXHJcbiAgTmF2aWdhdGlvblN0YXJ0LFxyXG4gIFJvdXRlcixcclxuICBSb3V0ZXJTdGF0ZVNuYXBzaG90XHJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZmlsdGVyLCB0YWtlLCB0YWtlV2hpbGUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IE1vbmtleUVjeENvcmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9tb25rZXllY3gtZGVjb3JhdG9ycyc7XHJcbmltcG9ydCB7XHJcbiAgTW9ua2V5RWN4Q29tcGFueVBlbmRlbmNpZXNWYWxpZGF0ZWQsXHJcbiAgTW9ua2V5RWN4Q29uZmlnLFxyXG4gIE1vbmtleUVjeENvdW50cnlTZWN1cml0eSxcclxuICBNb25rZXlFY3hFcnJvclJlc3BvbnNlLFxyXG4gIE1vbmtleUVjeEhhbmRsZWRFcnJvclJlc3BvbnNlLFxyXG4gIE1vbmtleUVjeFJlcXVlc3RQYWdlZCxcclxuICBNb25rZXlFY3hSZXF1ZXN0U2NoZWR1bGUsXHJcbiAgTW9ua2V5RWN4UmVzcG9uc2VMaW5rcyxcclxuICBNb25rZXlFY3hSZXNwb25zZVBhZ2VkLFxyXG4gIE1vbmtleUVjeFNhdmVkU3RhdGUsXHJcbiAgTW9ua2V5RWN4VHJhbnNsYXRlT3B0aW9uc1xyXG59IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBNb25rZXlFY3hNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVsJztcclxuaW1wb3J0IHsgTW9ua2V5RWN4VXRpbHMgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XHJcbmltcG9ydCB7IE1vbmtleUVjeEZlYXR1cmVUb2dnbGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29uZmlnL21vbmtleWVjeC1mZWF0dXJlLXRvZ2dsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9ua2V5RWN4U2VydmljZSB9IGZyb20gJy4uL21vbmtleWVjeC1zZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb25rZXlFY3hQYWdpbmF0aW9uU2VydmljZSB9IGZyb20gJy4uL3BhZ2luYXRpb24nO1xyXG5pbXBvcnQgeyBNb25rZXlFY3hSZXF1ZXN0UGFnZWRIYW5kbGluZyB9IGZyb20gJy4uL3JlcXVlc3QtcGFnZWQvbW9ua2V5ZWN4LXJlcXVlc3QtcmVxdWVzdC1wYWdlZC1oYW5kbGluZyc7XHJcbmltcG9ydCB7IE1vbmtleUVjeFJlcXVlc3RRdWV1ZUhhbmRsaW5nU2VydmljZSB9IGZyb20gJy4uL3JlcXVlc3QtcXVldWUvbW9ua2V5ZWN4LXJlcXVlc3QtcXVldWUtaGFuZGxpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vbmtleUVjeFJlcXVlc3RTY2hlZHVsZVNlcnZpY2UgfSBmcm9tICcuLi9zY2hlZHVsZXMvbW9ua2V5ZWN4LXJlcXVlc3Qtc2NoZWR1bGUuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vbmtleUVjeFRva2VuU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi9zdG9yYWdlL21vbmtleWVjeC10b2tlbi1zdG9yYWdlLnNlcnZpY2UnO1xyXG5cclxuY2xhc3MgTGlua3NNb2RlbCBleHRlbmRzIE1vbmtleUVjeE1vZGVsIHtcclxuICBjb25zdHJ1Y3RvcihkYXRhPzogYW55KSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5fbGlua3MgPSBkYXRhPy5fbGlua3M7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTW9ua2V5RWN4Q29tbW9uc1NlcnZpY2Uge1xyXG4gIHByaXZhdGUgZmxhZ1ZhbGlkYXRvciA9IHRydWU7XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveWVkID0gZmFsc2U7XHJcblxyXG4gIF9fZGF0YSQ6IE9ic2VydmFibGU8YW55PiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBfX3BhZ2luYXRpb24kOiBPYnNlcnZhYmxlPGFueT4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgX19jb250cm9sJDogT2JzZXJ2YWJsZTxhbnk+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIF9fcGFnZSQ6IE9ic2VydmFibGU8YW55PiB8IG51bGwgPSBudWxsO1xyXG5cclxuICBfX2RhdGE6IGFueSB8IGFueVtdO1xyXG5cclxuICBfX3NhdmVkU3RhdGU6IE1vbmtleUVjeFNhdmVkU3RhdGUgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgX19wYXJhbXM6IGFueSB8IGFueVtdO1xyXG5cclxuICBfX2Vycm9yOiBNb25rZXlFY3hFcnJvclJlc3BvbnNlIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIF9faGFuZGxlZEVycm9yOiBNb25rZXlFY3hIYW5kbGVkRXJyb3JSZXNwb25zZSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBfX3BhZ2U6IE1vbmtleUVjeFJlc3BvbnNlUGFnZWQgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgX19saW5rczogTW9ua2V5RWN4UmVzcG9uc2VMaW5rcyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBfX3NlYXJjaDogYW55O1xyXG5cclxuICBfX3JlcXVlc3RQYWdlZDogTW9ua2V5RWN4UmVxdWVzdFBhZ2VkIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIF9fb25TZWFyY2hDaGFuZ2VkJDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xyXG5cclxuICBfX29uRGF0YUNoYW5nZWQkOiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcblxyXG4gIF9fb25Mb2FkaW5nSW5Qcm9ncmVzcyQ6IEJlaGF2aW9yU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcblxyXG4gIF9fb25VcGxvYWRJblByb2dyZXNzJDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuXHJcbiAgX19vbkRhdGFEZWxldGVkJDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xyXG5cclxuICBfX29uRXJyb3JDaGFuZ2VkJDogQmVoYXZpb3JTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xyXG5cclxuICBfX29uR292ZXJubWVudElkRGF0YUNoYW5nZWQkOiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcblxyXG4gIF9fb25aaXBDb2RlRGF0YUNoYW5nZWQkOiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcblxyXG4gIF9fb25pMThuRGF0YUNoYW5nZWQkOiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcblxyXG4gIF9fb25Eb1NlYXJjaCQ6IEJlaGF2aW9yU3ViamVjdDxNb25rZXlFY3hSZXF1ZXN0UGFnZWQ+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCh7fSk7XHJcblxyXG4gIF9fc2NoZWR1bGU6IE1vbmtleUVjeFJlcXVlc3RTY2hlZHVsZSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBfX2kxOG46IGFueTtcclxuXHJcbiAgX19jYWxsYmFja1BhZ2luYXRpb246IEZ1bmN0aW9uID0gKCkgPT4ge1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcclxuICAgIHJldHVybiBjb25zb2xlLmVycm9yKCdNZXRob2QgY2FsbGJhY2tQYWdpbmF0aW9uIG5lZWRzIHRvIGJlIGRlY2xhcmVkJyk7XHJcbiAgfTtcclxuXHJcbiAgX19wYWdpbmF0aW9uT3B0aW9uczoge1xyXG4gICAgc2VydmljZTogTW9ua2V5RWN4UGFnaW5hdGlvblNlcnZpY2U7XHJcbiAgICBjYWxsYmFjazogRnVuY3Rpb247XHJcbiAgICBuYW1lPzogc3RyaW5nO1xyXG4gIH0gfCB1bmRlZmluZWQ7XHJcblxyXG4gIF9faXNBYmxlVG9Eb1BhZ2luYXRpb24gPSB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgbW9ua2V5ZWN4U2VydmljZT86IE1vbmtleUVjeFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgdG9rZW5TdG9yYWdlPzogTW9ua2V5RWN4VG9rZW5TdG9yYWdlU2VydmljZSxcclxuICAgIHB1YmxpYyBvdGhlckFyZ3M/OiB7XHJcbiAgICAgIHJvdXRlcj86IFJvdXRlcjtcclxuICAgICAgc2NoZWR1bGU/OiB7XHJcbiAgICAgICAgc2VydmljZTogTW9ua2V5RWN4UmVxdWVzdFNjaGVkdWxlU2VydmljZTtcclxuICAgICAgICBvcHRpb25zPzoge1xyXG4gICAgICAgICAgY2xlYXJPbkNoYW5nZVJvdXRlPzogYm9vbGVhbjtcclxuICAgICAgICB9O1xyXG4gICAgICB9O1xyXG4gICAgICBxdWV1ZT86IHtcclxuICAgICAgICBzZXJ2aWNlOiBNb25rZXlFY3hSZXF1ZXN0UXVldWVIYW5kbGluZ1NlcnZpY2U7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgKSB7XHJcbiAgICB0aGlzLmhhbmRsZUluaXQoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLm90aGVyQXJncz8ucm91dGVyKSB7XHJcbiAgICAgIGNvbnN0IHsgY2xlYXJPbkNoYW5nZVJvdXRlIH0gPSB0aGlzLm90aGVyQXJncz8uc2NoZWR1bGU/Lm9wdGlvbnMgfHwge1xyXG4gICAgICAgIGNsZWFyT25DaGFuZ2VSb3V0ZTogZmFsc2VcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMub3RoZXJBcmdzLnJvdXRlci5ldmVudHNcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIGZpbHRlcigoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQ7XHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIHRha2VXaGlsZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5kZXN0cm95ZWQ7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLl9fc2NoZWR1bGUgJiYgY2xlYXJPbkNoYW5nZVJvdXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3RoZXJBcmdzPy5zY2hlZHVsZT8uc2VydmljZT8ucmVtb3ZlU2NoZWR1bGUodGhpcy5fX3NjaGVkdWxlKTtcclxuICAgICAgICAgICAgdGhpcy5fX3NjaGVkdWxlID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbmF2aWdhdGVUb1BlbmRlbmN5UGFnZShcclxuICAgIGFyZzogTW9ua2V5RWN4Q29tcGFueVBlbmRlbmNpZXNWYWxpZGF0ZWQsXHJcbiAgICBjb21wYW55VHlwZT86IHN0cmluZyxcclxuICAgIHJvdXRlcj86IFJvdXRlclxyXG4gICkge1xyXG4gICAgbGV0IHJvdXRlID0gJy9hcHAnO1xyXG5cclxuICAgIGlmIChjb21wYW55VHlwZSkge1xyXG4gICAgICByb3V0ZSA9IGAke3JvdXRlfS8ke2NvbXBhbnlUeXBlfS9wYWdlc2A7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByb3V0ZSA9IGAke3JvdXRlfS91c2VyL3Byb2ZpbGUvcGFnZXNgO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcm91dGVyKSB7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1JvdXRlciBtdXN0IGJlIGRlY2xhcmVkJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByb3V0ZXIubmF2aWdhdGUoW2Ake3JvdXRlfS9jb21wYW55LXBlbmRlbmN5YC50b0xvd2VyQ2FzZSgpXSwge1xyXG4gICAgICAgIHN0YXRlOiB7XHJcbiAgICAgICAgICBwZW5kZW5jeURhdGE6IGFyZ1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFsbG93ZWRTZWN1cml0eUFjY2Vzc0J5UGVuZGVuY3koYXJnczogYW55KTogTW9ua2V5RWN4Q29tcGFueVBlbmRlbmNpZXNWYWxpZGF0ZWQge1xyXG4gICAgaWYgKCFhcmdzKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaGFzUGVuZGVuY2llczogZmFsc2VcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgc2VydmljZSwgdHlwZSB9ID0gYXJncztcclxuICAgIHJldHVybiBzZXJ2aWNlLmhhc1BlbmRlbmNpZXModHlwZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFsbG93ZWRTZWN1cml0eUFjY2Vzc0J5RmVhdHVyZShhcmdzOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICghYXJncykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHsgY29uZmlnLCBmZWF0dXJlIH0gPSBhcmdzO1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCFNb25rZXlFY3hVdGlscy5wZXJzaXN0TnVsbEVtcHR5VW5kZWZpbmVkKGZlYXR1cmUpIHx8XHJcbiAgICAgICAgIU1vbmtleUVjeFV0aWxzLnBlcnNpc3ROdWxsRW1wdHlVbmRlZmluZWQoY29uZmlnPy5wcm9ncmFtPy5zZXR0aW5ncykpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gIWNvbmZpZz8ucHJvZ3JhbT8uc2V0dGluZ3M/LltmZWF0dXJlXTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgLy8gbm90IHRvIGRvXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWxsb3dlZFNlY3VyaXR5QWNjZXNzQnlDb3VudHJ5KGFyZz86IE1vbmtleUVjeENvdW50cnlTZWN1cml0eSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFhcmcpIHJldHVybiB0cnVlO1xyXG4gICAgcmV0dXJuIGFyZy5jb3VudHJ5ID09PSBhcmcuZW52Q291bnRyeTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlUGFnaW5hdGlvbk9wdGlvbnMoKSB7XHJcbiAgICBjb25zdCB7IF9fcGFnaW5hdGlvbk9wdGlvbnMgfSA9IHRoaXM7XHJcbiAgICBpZiAoX19wYWdpbmF0aW9uT3B0aW9ucykge1xyXG4gICAgICBjb25zdCB7IHNlcnZpY2UsIGNhbGxiYWNrLCBuYW1lIH0gPSBfX3BhZ2luYXRpb25PcHRpb25zO1xyXG4gICAgICBzZXJ2aWNlPy5zZXRDYWxsYmFjaygodHlwZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kb1BhZ2luYXRpb252Mih0eXBlLCBjYWxsYmFjayk7XHJcbiAgICAgIH0sIG5hbWUgfHwgJ21haW4nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFBhZ2UocmVxdWVzdFBhZ2VkOiBNb25rZXlFY3hSZXF1ZXN0UGFnZWQpIHtcclxuICAgIHRoaXMuX19yZXF1ZXN0UGFnZWQgPSB7XHJcbiAgICAgIC4uLnRoaXMuX19yZXF1ZXN0UGFnZWQsXHJcbiAgICAgIC4uLnJlcXVlc3RQYWdlZFxyXG4gICAgfTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgbmV4dFBhZ2UoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5fX2xpbmtzKSB7XHJcbiAgICAgIHJldHVybiAhIXRoaXMuX19saW5rcz8ubmV4dDtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5fX3JlcXVlc3RQYWdlZCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgY29uc3QgeyBwYWdlIH0gPSB0aGlzLl9fcmVxdWVzdFBhZ2VkIGFzIGFueTtcclxuICAgIGNvbnN0IHsgbnVtYmVyLCB0b3RhbFBhZ2VzIH0gPSBwYWdlO1xyXG4gICAgaWYgKG51bWJlciA8IHRvdGFsUGFnZXMpIHtcclxuICAgICAgdGhpcy5fX3JlcXVlc3RQYWdlZCA9IHtcclxuICAgICAgICAuLi50aGlzLl9fcmVxdWVzdFBhZ2VkLFxyXG4gICAgICAgIHBhZ2U6IHtcclxuICAgICAgICAgIC4uLnBhZ2UsXHJcbiAgICAgICAgICBudW1iZXI6IG51bWJlciArIDFcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0RW1iZWRkZWREYXRhKGRhdGE6IGFueSwgZmllbGQ6IHN0cmluZyk6IGFueVtdIHwgYW55IHtcclxuICAgIGNvbnN0IHsgX2VtYmVkZGVkIH0gPSBkYXRhO1xyXG4gICAgcmV0dXJuIF9lbWJlZGRlZCA/IF9lbWJlZGRlZFtmaWVsZF0gOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0Tm9ybWFsaXplZFVybCh1cmw6IHN0cmluZywgc2FtZVBhZ2UgPSBmYWxzZSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCB7IF9fcmVxdWVzdFBhZ2VkLCBfX2xpbmtzIH0gPSB0aGlzO1xyXG4gICAgcmV0dXJuIG5ldyBNb25rZXlFY3hSZXF1ZXN0UGFnZWRIYW5kbGluZyhcclxuICAgICAgdXJsLFxyXG4gICAgICBfX3JlcXVlc3RQYWdlZCB8fCB7fSxcclxuICAgICAgX19saW5rcyxcclxuICAgICAgc2FtZVBhZ2VcclxuICAgICkuZ2V0UmVxdWVzdFdpdGhQYWdlZFBhcmFtcygpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXIoY2xlYXJEYXRhOiBib29sZWFuKSB7XHJcbiAgICBpZiAoY2xlYXJEYXRhKSB7XHJcbiAgICAgIHRoaXMuX19kYXRhID0gbnVsbDtcclxuICAgICAgdGhpcy5fX3JlcXVlc3RQYWdlZCA9IG51bGw7XHJcbiAgICAgIHRoaXMuX19wYXJhbXMgPSBudWxsO1xyXG4gICAgICB0aGlzLl9fcGFnZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuX19saW5rcyA9IG51bGw7XHJcblxyXG4gICAgICBpZiAodGhpcy5fX3NjaGVkdWxlKSB7XHJcbiAgICAgICAgY29uc3QgeyBxdWV1ZSB9ID0gdGhpcy5fX3NjaGVkdWxlO1xyXG4gICAgICAgIGlmIChxdWV1ZSkge1xyXG4gICAgICAgICAgdGhpcy5vdGhlckFyZ3M/LnF1ZXVlPy5zZXJ2aWNlPy5yZW1vdmVRdWV1ZUl0ZW0ocXVldWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm90aGVyQXJncz8uc2NoZWR1bGU/LnNlcnZpY2U/LnJlbW92ZVNjaGVkdWxlKHRoaXMuX19zY2hlZHVsZSk7XHJcbiAgICAgICAgdGhpcy5fX3NjaGVkdWxlID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fX2Vycm9yID0gbnVsbDtcclxuICAgIHRoaXMuX19oYW5kbGVkRXJyb3IgPSBudWxsO1xyXG4gICAgdGhpcy5mbGFnVmFsaWRhdG9yID0gZmFsc2U7XHJcbiAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICByZXNvbHZlKFxyXG4gICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsLFxyXG4gICAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QgfCBudWxsLFxyXG4gICAgb3RoZXJBcmdzPzoge1xyXG4gICAgICBjb21wYW55VHlwZT86IHN0cmluZyxcclxuICAgICAgY2FsbGJhY2tNYWluOiBGdW5jdGlvbjtcclxuICAgICAgcm91dGVyPzogUm91dGVyO1xyXG4gICAgICBjYWxsYmFja1BhZ2luYXRpb24/OiBGdW5jdGlvbjtcclxuICAgICAgdHJhbnNsYXRlT3B0aW9ucz86IE1vbmtleUVjeFRyYW5zbGF0ZU9wdGlvbnM7XHJcbiAgICAgIGZlYXR1cmU/OiB7XHJcbiAgICAgICAgc2VydmljZTogTW9ua2V5RWN4RmVhdHVyZVRvZ2dsZVNlcnZpY2U7XHJcbiAgICAgICAgZmxhZzogc3RyaW5nO1xyXG4gICAgICB9O1xyXG4gICAgICBmZWF0dXJlQnlQcm9ncmFtPzoge1xyXG4gICAgICAgIGNvbmZpZzogTW9ua2V5RWN4Q29uZmlnO1xyXG4gICAgICAgIGZlYXR1cmU6IHN0cmluZztcclxuICAgICAgfTtcclxuICAgICAgY291bnRyeVNlY3VyaXR5PzogTW9ua2V5RWN4Q291bnRyeVNlY3VyaXR5O1xyXG4gICAgICBwZW5kZW5jeT86IHtcclxuICAgICAgICBzZXJ2aWNlOiB7XHJcbiAgICAgICAgICBoYXNQZW5kZW5jaWVzOiBGdW5jdGlvbjtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHR5cGU6IHN0cmluZztcclxuICAgICAgfTtcclxuICAgICAgcGFnaW5hdGlvbk9wdGlvbnM/OiB7XHJcbiAgICAgICAgc2VydmljZTogTW9ua2V5RWN4UGFnaW5hdGlvblNlcnZpY2UsXHJcbiAgICAgICAgY2FsbGJhY2s6IEZ1bmN0aW9uLFxyXG4gICAgICAgIG5hbWU/OiBzdHJpbmdcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICkge1xyXG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KHJvdXRlPy5xdWVyeVBhcmFtcykgPT09ICd7fScpIHtcclxuICAgICAgdGhpcy5fX2RhdGEgPSBudWxsO1xyXG4gICAgICB0aGlzLl9fcGFnZSA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fX3JlcXVlc3RQYWdlZCA9IG51bGw7XHJcbiAgICB0aGlzLmZsYWdWYWxpZGF0b3IgPSB0cnVlO1xyXG5cclxuICAgIGNvbnN0IHBlbmQgPSB0aGlzLmFsbG93ZWRTZWN1cml0eUFjY2Vzc0J5UGVuZGVuY3kob3RoZXJBcmdzPy5wZW5kZW5jeSk7XHJcbiAgICBjb25zdCBhbGxvd2VkQnlQcm9ncmFtID0gdGhpcy5hbGxvd2VkU2VjdXJpdHlBY2Nlc3NCeUZlYXR1cmUob3RoZXJBcmdzPy5mZWF0dXJlQnlQcm9ncmFtKTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuYWxsb3dlZFNlY3VyaXR5QWNjZXNzQnlDb3VudHJ5KG90aGVyQXJncz8uY291bnRyeVNlY3VyaXR5KSAmJlxyXG4gICAgICAhcGVuZC5oYXNQZW5kZW5jaWVzICYmXHJcbiAgICAgIGFsbG93ZWRCeVByb2dyYW1cclxuICAgICkge1xyXG4gICAgICBpZiAodGhpcy5fX3NjaGVkdWxlKSB7XHJcbiAgICAgICAgdGhpcy5vdGhlckFyZ3M/LnNjaGVkdWxlPy5zZXJ2aWNlPy5yZW1vdmVTY2hlZHVsZSh0aGlzLl9fc2NoZWR1bGUpO1xyXG4gICAgICAgIHRoaXMuX19zY2hlZHVsZSA9IG51bGw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHsgX19yZXF1ZXN0UGFnZWQgfSA9IHRoaXM7XHJcbiAgICAgIGlmICghX19yZXF1ZXN0UGFnZWQpIHtcclxuICAgICAgICB0aGlzLnNldFBhZ2Uoe1xyXG4gICAgICAgICAgcGFnZToge1xyXG4gICAgICAgICAgICBudW1iZXI6IDAsXHJcbiAgICAgICAgICAgIHNpemU6IDEwXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChvdGhlckFyZ3M/LnRyYW5zbGF0ZU9wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCB7IHNlcnZpY2UsIGtleXMgfSA9IG90aGVyQXJncz8udHJhbnNsYXRlT3B0aW9ucztcclxuICAgICAgICB0aGlzLmdldGkxOG4oc2VydmljZSwga2V5cyB8fCAnJyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChvdGhlckFyZ3M/LmNhbGxiYWNrUGFnaW5hdGlvbikge1xyXG4gICAgICAgIHRoaXMuX19jYWxsYmFja1BhZ2luYXRpb24gPSBvdGhlckFyZ3MuY2FsbGJhY2tQYWdpbmF0aW9uO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAob3RoZXJBcmdzPy5wYWdpbmF0aW9uT3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuX19wYWdpbmF0aW9uT3B0aW9ucyA9IG90aGVyQXJncz8ucGFnaW5hdGlvbk9wdGlvbnM7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVQYWdpbmF0aW9uT3B0aW9ucygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAob3RoZXJBcmdzPy5mZWF0dXJlKSB7XHJcbiAgICAgICAgY29uc3QgeyBmbGFnLCBzZXJ2aWNlIH0gPSBvdGhlckFyZ3MuZmVhdHVyZTtcclxuXHJcbiAgICAgICAgc2VydmljZS5vbkZsYWdzXHJcbiAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgdGFrZVdoaWxlKCgpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mbGFnVmFsaWRhdG9yO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgodmFsOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWwpIHtcclxuICAgICAgICAgICAgICBjb25zdCBoYXNGbGFnID0gc2VydmljZS5nZXRGbGFnKGZsYWcpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAoTW9ua2V5RWN4VXRpbHMucGVyc2lzdE51bGxFbXB0eVVuZGVmaW5lZChoYXNGbGFnKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFoYXNGbGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb0Vycm9yUGFnZSg0MDQsIG90aGVyQXJncz8ucm91dGVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBvdGhlckFyZ3M/LmNhbGxiYWNrTWFpbigpO1xyXG4gICAgfSBlbHNlIGlmICghYWxsb3dlZEJ5UHJvZ3JhbSkge1xyXG4gICAgICB0aGlzLm5hdmlnYXRlVG9FcnJvclBhZ2UoNDA0LCBvdGhlckFyZ3M/LnJvdXRlcik7XHJcbiAgICB9IGVsc2UgaWYgKHBlbmQuaGFzUGVuZGVuY2llcykge1xyXG4gICAgICB0aGlzLm5hdmlnYXRlVG9QZW5kZW5jeVBhZ2UocGVuZCwgb3RoZXJBcmdzPy5jb21wYW55VHlwZSwgb3RoZXJBcmdzPy5yb3V0ZXIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5uYXZpZ2F0ZVRvRXJyb3JQYWdlKDQwMywgb3RoZXJBcmdzPy5yb3V0ZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0SFRUUEhlYWRlckFwcGxpY2F0aW9uUERGKCk6IE9iamVjdCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnLFxyXG4gICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIEBNb25rZXlFY3hDb3JlU2VydmljZSh7XHJcbiAgICByZXF1ZXN0SW5Qcm9ncmVzczoge1xyXG4gICAgICBzaG93UHJvZ3Jlc3M6IHRydWVcclxuICAgIH1cclxuICB9KVxyXG4gIGdlbmVyaWNNZXRob2QobGluazogYW55LCBkYXRhPzogYW55LCBjYWxsYmFjaz86IEZ1bmN0aW9uKSB7XHJcbiAgICBjb25zdCB7IGhyZWYsIHR5cGUgPSAnZ2V0JyB9ID0gbGluaztcclxuXHJcbiAgICB0aGlzLm1vbmtleWVjeFNlcnZpY2U/Llt0eXBlLnRvTG93ZXJDYXNlKCldKGAke2hyZWZ9YCwgZGF0YSk/LnN1YnNjcmliZShcclxuICAgICAgKHJlc3A6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2socmVzcCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjaygpO1xyXG4gICAgICAgIHRocm93RXJyb3IoZXJyKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIEBNb25rZXlFY3hDb3JlU2VydmljZSh7XHJcbiAgICByZXF1ZXN0SW5Qcm9ncmVzczoge1xyXG4gICAgICBzaG93UHJvZ3Jlc3M6IHRydWVcclxuICAgIH1cclxuICB9KVxyXG4gIGFzeW5jIGdldEdlbmVyaWNEYXRhKGRhdGE6IGFueSwgYWN0aW9uOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHsgbW9ua2V5ZWN4U2VydmljZSB9ID0gdGhpcztcclxuICAgIGlmICghbW9ua2V5ZWN4U2VydmljZSkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCB7IGhyZWYsIHR5cGUgfSA9IG5ldyBMaW5rc01vZGVsKGRhdGEpPy5nZXRBY3Rpb24oYWN0aW9uKSB8fCB7XHJcbiAgICAgIGhyZWY6ICcnLCB0eXBlOiAnZ2V0J1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbW9ua2V5ZWN4U2VydmljZVt0eXBlLnRvTG93ZXJDYXNlKCldPGFueT4oaHJlZilcclxuICAgICAgLnBpcGUodGFrZSgxKSkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRpMThuKHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsIGtleXM6IHN0cmluZyB8IHN0cmluZ1tdKSB7XHJcbiAgICB0cmFuc2xhdGVTZXJ2aWNlLm9uRGVmYXVsdExhbmdDaGFuZ2Uuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5fX2kxOG4gPSB0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoa2V5cyk7XHJcbiAgICAgIHRoaXMuX19vbmkxOG5EYXRhQ2hhbmdlZCQubmV4dChudWxsKTtcclxuICAgIH0pO1xyXG4gICAgdHJhbnNsYXRlU2VydmljZS5nZXRTdHJlYW1PblRyYW5zbGF0aW9uQ2hhbmdlKGtleXMpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuX19pMThuID0gdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGtleXMpO1xyXG4gICAgICB0aGlzLl9fb25pMThuRGF0YUNoYW5nZWQkLm5leHQobnVsbCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRvUGFnaW5hdGlvbigpIHtcclxuICAgIGlmICghdGhpcy5fX29uTG9hZGluZ0luUHJvZ3Jlc3MkLnZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IGhhc01vcmVQYWdlcyA9IHRoaXMuc2V0UGFnZSh7XHJcbiAgICAgICAgcGFnZToge1xyXG4gICAgICAgICAgLi4udGhpcy5fX3BhZ2VcclxuICAgICAgICB9XHJcbiAgICAgIH0pLm5leHRQYWdlKCk7XHJcblxyXG4gICAgICBpZiAoaGFzTW9yZVBhZ2VzICYmIHRoaXMuX19jYWxsYmFja1BhZ2luYXRpb24pIHtcclxuICAgICAgICB0aGlzLl9fY2FsbGJhY2tQYWdpbmF0aW9uKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRvUGFnaW5hdGlvbnYyKHR5cGU6IHN0cmluZywgY2FsbGJhY2s6IEZ1bmN0aW9uKSB7XHJcbiAgICBpZiAoIXRoaXMuX19vbkxvYWRpbmdJblByb2dyZXNzJC52YWx1ZSkge1xyXG4gICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICBjYWxsYmFjayh0eXBlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0TGlua3MobGlua3M6IGFueSkge1xyXG4gICAgdGhpcy5fX2lzQWJsZVRvRG9QYWdpbmF0aW9uID0ge1xyXG4gICAgICBmaXJzdDogISFsaW5rcz8uZmlyc3QsXHJcbiAgICAgIG5leHQ6ICEhbGlua3M/Lm5leHRcclxuICAgIH07XHJcbiAgICB0aGlzLl9fbGlua3MgPSBsaW5rcztcclxuICB9XHJcblxyXG4gIHNldFNlYXJjaEJ5VXJsKHJvdXRlcjogUm91dGVyLCB1cmw6IHN0cmluZywgc2VhcmNoOiBhbnksIGV4dHJhcz86IGFueSkge1xyXG4gICAgdGhpcy5fX2RhdGEgPSBudWxsO1xyXG4gICAgdGhpcy5fX3BhZ2UgPSBudWxsO1xyXG4gICAgdGhpcy5fX29uRGF0YUNoYW5nZWQkLm5leHQobnVsbCk7XHJcbiAgICB0aGlzLl9fb25Mb2FkaW5nSW5Qcm9ncmVzcyQubmV4dChmYWxzZSk7XHJcblxyXG4gICAgcm91dGVyLm5hdmlnYXRlKFt1cmxdLCB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgLi4uc2VhcmNoLFxyXG4gICAgICAgIHI6IE1vbmtleUVjeFV0aWxzLmdldFJhbmRvbVN0cmluZygzMClcclxuICAgICAgfSxcclxuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcclxuICAgICAgLi4uZXh0cmFzXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNhdmVTdGF0ZShzdGF0ZTogTW9ua2V5RWN4U2F2ZWRTdGF0ZSkge1xyXG4gICAgdGhpcy5fX3NhdmVkU3RhdGUgPSB7XHJcbiAgICAgIHBhZ2U6IHRoaXMuX19wYWdlLFxyXG4gICAgICAuLi5zdGF0ZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVG9FcnJvclBhZ2Uoc3RhdHVzQ29kZTogbnVtYmVyLCByb3V0ZXI/OiBSb3V0ZXIpIHtcclxuICAgIGNvbnN0IHJvdXRlczogYW55ID0ge1xyXG4gICAgICA0MDM6ICdmb3JiaWRkZW4nLFxyXG4gICAgICA0MDQ6ICdub3QtZm91bmQnLFxyXG4gICAgICA1MDA6ICdzZXJ2aWNlLXByb2JsZW1zJyxcclxuICAgICAgNTAzOiAnc2VydmljZS1wcm9ibGVtcydcclxuICAgIH07XHJcblxyXG4gICAgaWYgKCFyb3V0ZXIpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignUm91dGVyIG11c3QgYmUgZGVjbGFyZWQnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJvdXRlcj8ubmF2aWdhdGUoW2AvYXBwL3BhZ2VzLyR7cm91dGVzW3N0YXR1c0NvZGVdfWAudG9Mb3dlckNhc2UoKV0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=