@tuki-io/tuki-widgets 0.0.219-dev.56 → 0.0.219-dev.57

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 (246) hide show
  1. package/README.md +24 -24
  2. package/esm2020/contact-center/cc-import/cc-import.module.mjs +1 -1
  3. package/esm2020/contact-center/cc-import/cc-import.service.mjs +1 -1
  4. package/esm2020/contact-center/cc-import/components/import-contact-center-panel/import-contact-center-panel.component.mjs +3 -3
  5. package/esm2020/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.component.mjs +3 -3
  6. package/esm2020/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.types.mjs +1 -1
  7. package/esm2020/contact-center/cc-import/constants/cc-import.constants.mjs +1 -1
  8. package/esm2020/contact-center/cc-import/mock/cc-import.mock.mjs +1 -1
  9. package/esm2020/contact-center/cc-import/types/cc-import.mjs +1 -1
  10. package/esm2020/contact-center/cc-import/types/uccx.mjs +1 -1
  11. package/esm2020/contact-center/cc-readiness/cc-readiness.module.mjs +1 -1
  12. package/esm2020/contact-center/cc-readiness/cc-readiness.service.mjs +1 -1
  13. package/esm2020/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.mjs +3 -3
  14. package/esm2020/contact-center/public-api.mjs +1 -1
  15. package/esm2020/contact-center/shared/api.endpoints.mjs +1 -1
  16. package/esm2020/contact-center/shared/components/card/card.component.mjs +3 -3
  17. package/esm2020/contact-center/shared/dcp-api.service.mjs +1 -1
  18. package/esm2020/contact-center/shared/shared.module.mjs +1 -1
  19. package/esm2020/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.mjs +3 -3
  20. package/esm2020/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.mjs +2 -2
  21. package/esm2020/di2mt/widgets/upgrade-overview/cards/pending-activation-users/pending-activation-users.component.mjs +17 -17
  22. package/esm2020/lib/widgets.component.mjs +9 -9
  23. package/esm2020/lib/widgets.module.mjs +1 -1
  24. package/esm2020/lib/widgets.service.mjs +1 -1
  25. package/esm2020/locations/public-api.mjs +1 -1
  26. package/esm2020/locations/src/app.constants.mjs +1 -1
  27. package/esm2020/locations/src/location-confirm-dialog/location-confirm-dialog.component.mjs +3 -3
  28. package/esm2020/locations/src/locations.component.mjs +3 -3
  29. package/esm2020/locations/src/locations.module.mjs +1 -1
  30. package/esm2020/locations/src/material.module.mjs +1 -1
  31. package/esm2020/locations/src/services/api.service.mjs +1 -1
  32. package/esm2020/locations/src/services/locations.service.mjs +1 -1
  33. package/esm2020/locations/src/types/location.mjs +1 -1
  34. package/esm2020/locations/src/utils/app-loader/app-loader.mjs +3 -3
  35. package/esm2020/meetings/public-api.mjs +1 -1
  36. package/esm2020/meetings/src/app.constants.mjs +1 -1
  37. package/esm2020/meetings/src/components/live-meetings/live-meeting/live-meeting.component.mjs +3 -3
  38. package/esm2020/meetings/src/components/live-meetings/live-meetings.component.mjs +3 -3
  39. package/esm2020/meetings/src/components/meeting-spaces/meeting-space/meeting-space.component.mjs +3 -3
  40. package/esm2020/meetings/src/components/meeting-spaces/meeting-spaces.component.mjs +3 -3
  41. package/esm2020/meetings/src/material.module.mjs +1 -1
  42. package/esm2020/meetings/src/meetings.component.mjs +3 -3
  43. package/esm2020/meetings/src/meetings.module.mjs +1 -1
  44. package/esm2020/meetings/src/services/api.service.mjs +1 -1
  45. package/esm2020/meetings/src/services/live-meetings.service.mjs +1 -1
  46. package/esm2020/meetings/src/services/meeting-spaces.service.mjs +1 -1
  47. package/esm2020/meetings/src/types/live-meeting.mjs +1 -1
  48. package/esm2020/meetings/src/types/meeting-space.mjs +1 -1
  49. package/esm2020/meetings/src/utils/app-loader/app-loader.mjs +3 -3
  50. package/esm2020/public-api.mjs +1 -1
  51. package/esm2020/user-creation/src/app.constants.mjs +1 -1
  52. package/esm2020/user-creation/src/classes/notification.mjs +1 -1
  53. package/esm2020/user-creation/src/classes/site.mjs +1 -1
  54. package/esm2020/user-creation/src/environments/environment.mjs +1 -1
  55. package/esm2020/user-creation/src/interfaces/user-creation-wizard.interfaces.mjs +1 -1
  56. package/esm2020/user-creation/src/shared/components/notification/notification.component.mjs +3 -3
  57. package/esm2020/user-creation/src/shared/pipes/truncate.pipe.mjs +1 -1
  58. package/esm2020/user-creation/src/shared/services/notification.service.mjs +1 -1
  59. package/esm2020/user-creation/src/shared/services/user-creation-api.service.mjs +1 -1
  60. package/esm2020/user-creation/src/shared/services/utils.mjs +1 -1
  61. package/esm2020/user-creation/src/utils/app-loader/app-loader.mjs +3 -3
  62. package/esm2020/user-creation/src/utils/build-savable-end-user.mjs +1 -1
  63. package/esm2020/user-creation/src/utils/device-default-prefix.mjs +1 -1
  64. package/esm2020/user-creation/src/utils/device-name-dynamic-tokens.mjs +1 -1
  65. package/esm2020/user-creation/src/utils/device-name-validation.mjs +1 -1
  66. package/esm2020/user-creation/src/utils/model.mjs +1 -1
  67. package/esm2020/user-creation/src/utils/parse-device-name-rule.mjs +1 -1
  68. package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.mjs +3 -3
  69. package/esm2020/user-device-manage/public-api.mjs +1 -1
  70. package/esm2020/user-device-manage/src/app.constants.mjs +1 -1
  71. package/esm2020/user-device-manage/src/associate-lines/associate-lines.component.mjs +3 -3
  72. package/esm2020/user-device-manage/src/classes/device.mjs +1 -1
  73. package/esm2020/user-device-manage/src/classes/deviceProfile.mjs +1 -1
  74. package/esm2020/user-device-manage/src/classes/line-association-interface.mjs +1 -1
  75. package/esm2020/user-device-manage/src/classes/line-association.mjs +1 -1
  76. package/esm2020/user-device-manage/src/classes/line-call-info-display.mjs +1 -1
  77. package/esm2020/user-device-manage/src/classes/line-directory.mjs +1 -1
  78. package/esm2020/user-device-manage/src/classes/line.mjs +1 -1
  79. package/esm2020/user-device-manage/src/classes/notification.mjs +1 -1
  80. package/esm2020/user-device-manage/src/classes/recording-options.mjs +1 -1
  81. package/esm2020/user-device-manage/src/classes/simplified-user.mjs +1 -1
  82. package/esm2020/user-device-manage/src/classes/site-defaults.mjs +1 -1
  83. package/esm2020/user-device-manage/src/classes/translation-pattern.mjs +1 -1
  84. package/esm2020/user-device-manage/src/classes/types.mjs +1 -1
  85. package/esm2020/user-device-manage/src/common-functions.mjs +1 -1
  86. package/esm2020/user-device-manage/src/confirm-dialog/info-dialog.component.mjs +3 -3
  87. package/esm2020/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.mjs +3 -3
  88. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.mjs +3 -3
  89. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.mjs +3 -3
  90. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line.component.mjs +1 -1
  91. package/esm2020/user-device-manage/src/device-info/device-info.component.mjs +3 -3
  92. package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +3 -3
  93. package/esm2020/user-device-manage/src/device-settings/device-settings.component.mjs +3 -3
  94. package/esm2020/user-device-manage/src/environments/environment.mjs +1 -1
  95. package/esm2020/user-device-manage/src/interseptors/auth.interceptor.mjs +1 -1
  96. package/esm2020/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +3 -3
  97. package/esm2020/user-device-manage/src/line-key-config/line-key-config.component.mjs +3 -3
  98. package/esm2020/user-device-manage/src/material.module.mjs +1 -1
  99. package/esm2020/user-device-manage/src/notifications/notification.component.mjs +3 -3
  100. package/esm2020/user-device-manage/src/pipes/mac-address.pipe.mjs +1 -1
  101. package/esm2020/user-device-manage/src/services/api.service.mjs +1 -1
  102. package/esm2020/user-device-manage/src/services/device.service.mjs +1 -1
  103. package/esm2020/user-device-manage/src/services/dns.service.mjs +1 -1
  104. package/esm2020/user-device-manage/src/services/line.service.mjs +1 -1
  105. package/esm2020/user-device-manage/src/services/notification.service.mjs +1 -1
  106. package/esm2020/user-device-manage/src/services/removeKynFromIBM.service.mjs +1 -1
  107. package/esm2020/user-device-manage/src/services/site-settings.service.mjs +1 -1
  108. package/esm2020/user-device-manage/src/services/sorting-utils.service.mjs +1 -1
  109. package/esm2020/user-device-manage/src/services/user.service.mjs +1 -1
  110. package/esm2020/user-device-manage/src/services/utils.service.mjs +1 -1
  111. package/esm2020/user-device-manage/src/services/validation.service.mjs +1 -1
  112. package/esm2020/user-device-manage/src/utils/app-loader/app-loader.mjs +3 -3
  113. package/esm2020/user-manage/public-api.mjs +1 -1
  114. package/esm2020/user-manage/src/app.constants.mjs +2 -1
  115. package/esm2020/user-manage/src/classes/device.mjs +1 -1
  116. package/esm2020/user-manage/src/classes/line-association-interface.mjs +1 -1
  117. package/esm2020/user-manage/src/classes/line-association.mjs +1 -1
  118. package/esm2020/user-manage/src/classes/line-call-info-display.mjs +1 -1
  119. package/esm2020/user-manage/src/classes/line-directory.mjs +1 -1
  120. package/esm2020/user-manage/src/classes/line.mjs +1 -1
  121. package/esm2020/user-manage/src/classes/notification.mjs +1 -1
  122. package/esm2020/user-manage/src/classes/pagination.mjs +1 -1
  123. package/esm2020/user-manage/src/classes/recording-options.mjs +1 -1
  124. package/esm2020/user-manage/src/classes/simplified-user.mjs +15 -2
  125. package/esm2020/user-manage/src/classes/table-data.mjs +1 -1
  126. package/esm2020/user-manage/src/classes/translation-pattern.mjs +1 -1
  127. package/esm2020/user-manage/src/classes/user-list.mjs +1 -1
  128. package/esm2020/user-manage/src/common-functions.mjs +1 -1
  129. package/esm2020/user-manage/src/device-list/device-list.component.mjs +3 -3
  130. package/esm2020/user-manage/src/device-list/device-row/device-row.component.mjs +3 -3
  131. package/esm2020/user-manage/src/environments/environment.mjs +1 -1
  132. package/esm2020/user-manage/src/interseptors/auth.interceptor.mjs +1 -1
  133. package/esm2020/user-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +9 -5
  134. package/esm2020/user-manage/src/material.module.mjs +14 -7
  135. package/esm2020/user-manage/src/notifications/notification.component.mjs +3 -3
  136. package/esm2020/user-manage/src/removeKynFromIBM.service.mjs +1 -1
  137. package/esm2020/user-manage/src/services/api.service.mjs +1 -1
  138. package/esm2020/user-manage/src/services/dcp-api.service.mjs +1 -1
  139. package/esm2020/user-manage/src/services/dns.service.mjs +1 -1
  140. package/esm2020/user-manage/src/services/line.service.mjs +1 -1
  141. package/esm2020/user-manage/src/services/notification.service.mjs +1 -1
  142. package/esm2020/user-manage/src/services/removeKynFromIBM.service.mjs +1 -1
  143. package/esm2020/user-manage/src/services/site-settings.service.mjs +11 -4
  144. package/esm2020/user-manage/src/services/sorting-utils.service.mjs +1 -1
  145. package/esm2020/user-manage/src/services/user.service.mjs +30 -1
  146. package/esm2020/user-manage/src/services/utils.service.mjs +1 -1
  147. package/esm2020/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.mjs +3 -3
  148. package/esm2020/user-manage/src/user-info/user-info.component.mjs +3 -3
  149. package/esm2020/user-manage/src/user-manage-widget.component.mjs +42 -26
  150. package/esm2020/user-manage/src/user-manage.module.mjs +5 -2
  151. package/esm2020/user-manage/src/user-summary/user-summary.component.mjs +30 -0
  152. package/esm2020/user-manage/src/utils/app-loader/app-loader.mjs +3 -3
  153. package/esm2020/user-manage/src/utils/pagination/pagination.component.mjs +3 -3
  154. package/esm2020/users-list/public-api.mjs +1 -1
  155. package/esm2020/users-list/src/app.constants.mjs +1 -1
  156. package/esm2020/users-list/src/classes/app-location.mjs +1 -1
  157. package/esm2020/users-list/src/classes/device.mjs +1 -1
  158. package/esm2020/users-list/src/classes/line.mjs +1 -1
  159. package/esm2020/users-list/src/classes/move-user.mjs +1 -1
  160. package/esm2020/users-list/src/classes/notification.mjs +1 -1
  161. package/esm2020/users-list/src/classes/simlified-user.mjs +1 -1
  162. package/esm2020/users-list/src/classes/table-data.mjs +1 -1
  163. package/esm2020/users-list/src/classes/user-list.mjs +1 -1
  164. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.mjs +3 -3
  165. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.mjs +3 -3
  166. package/esm2020/users-list/src/move-user-wizard/move-user-wizard.component.mjs +3 -3
  167. package/esm2020/users-list/src/services/api-webex.service.mjs +1 -1
  168. package/esm2020/users-list/src/services/api.service.mjs +1 -1
  169. package/esm2020/users-list/src/services/dns.service.mjs +1 -1
  170. package/esm2020/users-list/src/services/events-communication.service.mjs +1 -1
  171. package/esm2020/users-list/src/services/notification.service.mjs +1 -1
  172. package/esm2020/users-list/src/services/removeKynFromIBM.service.mjs +1 -1
  173. package/esm2020/users-list/src/services/site-settings.service.mjs +1 -1
  174. package/esm2020/users-list/src/services/user.service.mjs +1 -1
  175. package/esm2020/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.mjs +3 -3
  176. package/esm2020/users-list/src/utils/app-loader/app-loader.mjs +3 -3
  177. package/esm2020/users-list/src/utils/common-functions.mjs +1 -1
  178. package/esm2020/users-list/src/utils/notifications/notification.component.mjs +3 -3
  179. package/esm2020/users-list/src/utils/utils.service.mjs +1 -1
  180. package/esm2020/workspaces/public-api.mjs +1 -1
  181. package/esm2020/workspaces/src/app.constants.mjs +1 -1
  182. package/esm2020/workspaces/src/components/workspace-confirm-dialog/workspace-confirm-dialog.component.mjs +3 -3
  183. package/esm2020/workspaces/src/components/workspace-detail/workspace-detail.component.mjs +3 -3
  184. package/esm2020/workspaces/src/components/workspace-device-detail/workspace-device-detail.component.mjs +3 -3
  185. package/esm2020/workspaces/src/components/workspaces-filters/workspaces-filters.component.mjs +3 -3
  186. package/esm2020/workspaces/src/components/workspaces-table/workspaces-table.component.mjs +3 -3
  187. package/esm2020/workspaces/src/material.module.mjs +1 -1
  188. package/esm2020/workspaces/src/services/api-webex.service.mjs +1 -1
  189. package/esm2020/workspaces/src/services/api.service.mjs +1 -1
  190. package/esm2020/workspaces/src/services/workspace-detail.service.mjs +1 -1
  191. package/esm2020/workspaces/src/services/workspaces-migration.service.mjs +1 -1
  192. package/esm2020/workspaces/src/services/workspaces.service.mjs +1 -1
  193. package/esm2020/workspaces/src/types/workspace.mjs +1 -1
  194. package/esm2020/workspaces/src/utils/app-loader/app-loader.mjs +3 -3
  195. package/esm2020/workspaces/src/utils/device-icon.mjs +1 -1
  196. package/esm2020/workspaces/src/utils/workspace-name.mjs +1 -1
  197. package/esm2020/workspaces/src/workspaces.component.mjs +8 -8
  198. package/esm2020/workspaces/src/workspaces.module.mjs +1 -1
  199. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs +8 -8
  200. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
  201. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +20 -20
  202. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  203. package/fesm2015/tuki-io-tuki-widgets-locations.mjs +6 -6
  204. package/fesm2015/tuki-io-tuki-widgets-locations.mjs.map +1 -1
  205. package/fesm2015/tuki-io-tuki-widgets-meetings.mjs +12 -12
  206. package/fesm2015/tuki-io-tuki-widgets-meetings.mjs.map +1 -1
  207. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +6 -6
  208. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  209. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +24 -24
  210. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  211. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +165 -61
  212. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
  213. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +12 -12
  214. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  215. package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs +19 -19
  216. package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs.map +1 -1
  217. package/fesm2015/tuki-io-tuki-widgets.mjs +8 -8
  218. package/fesm2015/tuki-io-tuki-widgets.mjs.map +1 -1
  219. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs +8 -8
  220. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
  221. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +20 -20
  222. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  223. package/fesm2020/tuki-io-tuki-widgets-locations.mjs +6 -6
  224. package/fesm2020/tuki-io-tuki-widgets-locations.mjs.map +1 -1
  225. package/fesm2020/tuki-io-tuki-widgets-meetings.mjs +12 -12
  226. package/fesm2020/tuki-io-tuki-widgets-meetings.mjs.map +1 -1
  227. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +6 -6
  228. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  229. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +24 -24
  230. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  231. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +155 -55
  232. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
  233. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +12 -12
  234. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  235. package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs +19 -19
  236. package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs.map +1 -1
  237. package/fesm2020/tuki-io-tuki-widgets.mjs +8 -8
  238. package/fesm2020/tuki-io-tuki-widgets.mjs.map +1 -1
  239. package/package.json +1 -1
  240. package/user-manage/src/app.constants.d.ts +1 -0
  241. package/user-manage/src/classes/simplified-user.d.ts +6 -0
  242. package/user-manage/src/material.module.d.ts +2 -1
  243. package/user-manage/src/services/user.service.d.ts +11 -0
  244. package/user-manage/src/user-manage-widget.component.d.ts +4 -0
  245. package/user-manage/src/user-manage.module.d.ts +9 -8
  246. package/user-manage/src/user-summary/user-summary.component.d.ts +10 -0
@@ -391,4 +391,4 @@ UserService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version:
391
391
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserService, decorators: [{
392
392
  type: Injectable
393
393
  }], ctorParameters: function () { return [{ type: i1.APIService }, { type: i2.LineService }]; } });
394
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXItZGV2aWNlLW1hbmFnZS9zcmMvc2VydmljZXMvdXNlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUc5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFJL0MsTUFBTSxPQUFPLFdBQVc7SUFhdEIsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFJRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUlELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBSUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFJRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFRCxJQUFJLHFCQUFxQjtRQUN2QixPQUFPLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELFlBQ1UsVUFBc0IsRUFDdEIsV0FBd0I7UUFEeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQWxEbEMsV0FBTSxHQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLFdBQU0sR0FBVyxFQUFFLENBQUM7UUFDcEIsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUl6QixxQkFBZ0IsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBQ3RDLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFFL0IsZUFBVSxHQUFXLEVBQUUsQ0FBQztRQU14QixjQUFTLEdBQVcsRUFBRSxDQUFDO1FBTXZCLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBTTNCLFlBQU8sR0FBVyxFQUFFLENBQUM7SUF5QjdCLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDMUIsQ0FBQztJQUVELG9CQUFvQixDQUFDLFdBQW1CLEVBQUUsU0FBaUIsRUFBRSxpQkFBb0M7UUFDL0YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEYsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxVQUFVLEVBQUU7WUFDOUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTtTQUMxSjtJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsYUFBcUIsRUFBRSxpQkFBb0M7UUFDckUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEcsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUYsSUFBSSxZQUFZLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ2xDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsZ0JBQWdCLENBQUM7WUFDdkUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBQzVILElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1lBQ2pFLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUNwRTtJQUNILENBQUM7SUFFTSxjQUFjLENBQUMsTUFBYyxFQUFFLE1BQWMsRUFBRSxpQkFBb0MsRUFBRSxpQkFBMkI7UUFDckg7O1dBRUc7UUFDSCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDcEosSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQ3hCLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25ELElBQUksSUFBSSxFQUFFO2dCQUNSLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtvQkFDdEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRSxTQUFTLENBQUMsQ0FBQztpQkFDNUQ7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7b0JBQzVCLHNDQUFzQztpQkFDdkM7Z0JBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuQztZQUNELE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDTCx3Q0FBd0M7SUFDMUMsQ0FBQztJQUVNLGlCQUFpQixDQUFDLE1BQWMsRUFBRSxNQUFjLEVBQUUsVUFBa0IsRUFBRSxVQUFtQjtRQUM5RixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDcEosSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQzlCLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hELE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25ELElBQUksV0FBZ0IsQ0FBQztZQUVyQixJQUFJLElBQUksRUFBRTtnQkFDUixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDM0IsV0FBVyxHQUFHLFVBQVU7b0JBQ3RCLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUM7b0JBQ2hFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsS0FBSyxVQUFVLENBQUMsQ0FBQztnQkFDekUsSUFBRyxXQUFXLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGFBQWEsQ0FBQzt3QkFDbkMsR0FBRyxXQUFXO3dCQUNkLEtBQUssRUFBRSxXQUFXLEVBQUUsVUFBVTt3QkFDOUIsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQzt3QkFDaEQsS0FBSyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTs0QkFDdEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDOzRCQUMxRSxPQUFPO2dDQUNMLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtnQ0FDL0MsU0FBUyxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLElBQUksRUFBRTtnQ0FDaEksTUFBTSxFQUFFLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQ0FDdkQsV0FBVyxFQUFFLFNBQVMsSUFBSSxTQUFTLENBQUMsV0FBVyxJQUFJLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dDQUN2SCxrQkFBa0IsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsSUFBSSxFQUFFO2dDQUN6RSxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksRUFBRTtnQ0FDakMsS0FBSyxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLFNBQVM7Z0NBQ3RDLFFBQVEsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxTQUFTO2dDQUM1QyxTQUFTLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksRUFBRTtnQ0FDdkMsWUFBWSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUU7Z0NBQzdDLFFBQVEsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFO2dDQUNyQyxZQUFZLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksRUFBRTtnQ0FDN0MsWUFBWSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUU7Z0NBQzdDLGFBQWEsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFO2dDQUMvQyxlQUFlLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksU0FBUzs2QkFDM0QsQ0FBQTt3QkFDSCxDQUFDLENBQUM7d0JBQ0YsZUFBZSxFQUFFLFdBQVcsRUFBRSxlQUFlO3FCQUM5QyxDQUFDLENBQUE7aUJBQ0g7YUFDRjtZQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUU5RixJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNoQixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDN0I7WUFFRCxNQUFNLHFCQUFxQixHQUFHLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxxQkFBcUIsSUFBSSxFQUFFLENBQUM7WUFDOUUsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLHFCQUFxQixDQUFDO2lCQUNwRixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBaUIsRUFBRSxFQUFFO2dCQUM5QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxXQUFtQixDQUFDLG1CQUFtQixHQUFHLFlBQVksRUFBRSxtQkFBbUIsQ0FBQztvQkFDakYsSUFBSSxDQUFDLFdBQW1CLENBQUMsWUFBWSxHQUFHLFlBQVksRUFBRSxZQUFZLENBQUM7b0JBQ25FLElBQUksQ0FBQyxXQUFtQixDQUFDLGFBQWEsR0FBRyxZQUFZLEVBQUUsYUFBYSxDQUFDO29CQUNyRSxJQUFJLENBQUMsV0FBbUIsQ0FBQyw0QkFBNEIsR0FBRyxZQUFZLEVBQUUsNEJBQTRCLENBQUM7b0JBQ25HLElBQUksQ0FBQyxXQUFtQixDQUFDLDBCQUEwQixHQUFHLFlBQVksRUFBRSwwQkFBMEIsQ0FBQztpQkFDakc7Z0JBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQzFCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ1AsQ0FBQztJQUVNLHFCQUFxQixDQUFDLE1BQWMsRUFBRSxVQUFrQixFQUFFLHFCQUE2QjtRQUM1RixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0I7YUFDbEQsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDbEMsT0FBTyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUM7YUFDbEMsT0FBTyxDQUFDLHdCQUF3QixFQUFFLGtCQUFrQixDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzlFLHdDQUF3QztJQUM1QyxDQUFDO0lBRU8sYUFBYSxDQUFDLElBQVk7UUFDaEMsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUM7UUFDckMsSUFBSSxVQUFVLENBQUM7UUFFZixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssRUFBRSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDN0MsVUFBVSxHQUFHLElBQUksQ0FBQztTQUNuQjthQUFNO1lBQ0wsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7U0FDM0Q7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRU0sb0JBQW9CLENBQUMsVUFBa0IsRUFBRSxNQUFjLEVBQUUsVUFBa0I7UUFDaEYsT0FBTyxRQUFRLENBQUM7WUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqSixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwSixDQUFDO2FBQ0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN0QyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDekMsSUFBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2IsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssVUFBVSxDQUFDLENBQUM7Z0JBQzFGLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxhQUFhLENBQUM7b0JBQ25DLEdBQUcsV0FBVztvQkFDZCxVQUFVLEVBQUUsV0FBVyxDQUFDLEdBQUc7b0JBQzNCLFlBQVksRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFlBQVk7b0JBQ3RELEtBQUssRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTt3QkFDOUQsT0FBTzs0QkFDTCxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7NEJBQzlDLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUzt5QkFDNUIsQ0FBQTtvQkFDSCxDQUFDLENBQUM7aUJBQ0gsQ0FBQyxDQUFBO2FBQ0g7WUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDMUIsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNQLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxJQUFTO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO1lBQ3JELE9BQU87U0FDUjtRQUNELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ2pJLHdDQUF3QztJQUM1QyxDQUFDO0lBRU0sYUFBYSxDQUFDLEVBQVU7UUFDN0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUMvQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDaEosSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNqQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1lBQ2hDLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRU0sNkJBQTZCLENBQUMsRUFBVTtRQUM3QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hLLENBQUM7SUFFTSxvQ0FBb0MsQ0FBQyxFQUFVO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEwsQ0FBQztJQUNNLGtDQUFrQyxDQUFDLEVBQVUsRUFBRSxvQkFBNEI7UUFDaEYsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsa0NBQWtDLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3hHLE9BQU8sQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7SUFDNUgsQ0FBQztJQUNNLGdDQUFnQyxDQUFDLEVBQVU7UUFDaEQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsZ0NBQWdDLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1SyxDQUFDO0lBRU0sbUJBQW1CO1FBQ3hCOztZQUVJO1FBQ0osT0FBTyxJQUFJLENBQUMseUJBQXlCLEVBQUU7YUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7aUJBQ2xJLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFFaEIsQ0FBQyxDQUFDLENBQUE7WUFDRix3QkFBd0I7WUFDeEIsbURBQW1EO1lBQ25ELHdDQUF3QztZQUN4QyxNQUFNO1lBQ04sdUNBQXVDO1FBQzNDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRU0seUJBQXlCO1FBQzlCLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMseUJBQXlCLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0gsSUFBSSxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ2hCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7U0FDekM7UUFDRCxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUNsQixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdEI7UUFFRCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUM7YUFDbkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQWMsRUFBRSxFQUFFO1lBQzNCLGtCQUFrQjtZQUNsQixJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNMLHdDQUF3QztJQUUxQyxDQUFDO0lBRU0sV0FBVyxDQUFDLElBQVM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3hFLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0csSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBRztpQkFDNUIsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxnQkFBZ0I7UUFDckIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdHLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBRyxDQUFDO0lBQ3pDLENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxJQUFTO1FBQ2pDLGtCQUFrQjtRQUNsQixNQUFNLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQzFDLElBQUksQ0FBQyxXQUFXLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLEVBQ3RELElBQUksQ0FBQyxXQUFXLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLEVBQ3RELHlCQUF5QixFQUFFLElBQUksQ0FDaEMsQ0FBQztRQUNGLElBQUksQ0FBQyx5QkFBeUIsQ0FDNUIsSUFBSSxDQUFDLE1BQU0sRUFDWCxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFDN0MsV0FBVyxFQUNYLElBQUksRUFDSixJQUFJLENBQUMsZUFBZSxFQUFFLGtCQUFrQixDQUN6QzthQUNBLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ25CLE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3RyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUcsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQzthQUNGLFNBQVMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQzNCLElBQUksUUFBUSxFQUFFLGtCQUFrQixFQUFFO2dCQUNoQyxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsSUFBSSxRQUFRLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQztnQkFDbkssUUFBUSxDQUFDO29CQUNQLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsWUFBWSxDQUFDO29CQUNoRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO2lCQUNwRyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7b0JBQzdCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQ3pELE1BQU0sa0JBQWtCLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3pHLElBQUcsa0JBQWtCLEVBQUU7d0JBQ3JCLGtCQUFrQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO3dCQUM5QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQztxQkFDeEQ7b0JBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbkMsQ0FBQyxDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0YsUUFBUTtJQUNWLENBQUM7SUFFTSxVQUFVLENBQUMsTUFBYyxFQUFFLElBQVksRUFBRSxLQUFhO1FBQzNELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ3ZKLHdDQUF3QztJQUM1QyxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsTUFBYyxFQUFFLFFBQWdCLEVBQUUsS0FBYSxFQUFFLFVBQWtCO1FBQ3pGLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQzNCLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNyRCxPQUFPLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQzthQUM5QixPQUFPLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQzthQUNsQyxPQUFPLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDcEQsd0NBQXdDO0lBQzVDLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxNQUFjLEVBQUUsSUFBWSxFQUFFLEtBQWEsRUFBRSxZQUFpQjtRQUNwRixNQUFNLElBQUksR0FBRyxDQUFDLG1CQUFtQixFQUFFLHFCQUFxQixZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUNsTCx3Q0FBd0M7SUFDNUMsQ0FBQztJQUVNLGtCQUFrQixDQUFDLE1BQWMsRUFBRSxVQUFrQixFQUFFLEtBQWE7UUFDekUsTUFBTSxJQUFJLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUE7UUFDOUssd0NBQXdDO0lBQzFDLENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxNQUFjLEVBQUUsZUFBdUIsRUFBRSxrQkFBMEI7UUFDL0YsTUFBTSxNQUFNLEdBQUc7WUFDYixNQUFNLEVBQUUsV0FBVztTQUNwQixDQUFDO1FBQ0YsTUFBTSxJQUFJLEdBQUc7WUFDWCxlQUFlLEVBQUUsZUFBZTtZQUNoQyxrQkFBa0IsRUFBRSxrQkFBa0I7U0FDdkMsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFTSx5QkFBeUIsQ0FBQyxNQUFjLEVBQUUsVUFBa0IsRUFBRSxJQUFTLEVBQUUsSUFBUyxFQUFFLEdBQVE7UUFDakcsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksSUFBSSxFQUFFO1lBQ1IsTUFBTSxHQUFHLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxHQUFHLEVBQUU7WUFDUCxhQUFhO1lBQ2IsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUNyQjtRQUNELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDO2FBQ2pILE9BQU8sQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ3JFLHVDQUF1QztJQUMzQyxDQUFDO0lBRU0saUJBQWlCO1FBQ3RCLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3pDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQztTQUMvRTtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVNLGlCQUFpQixDQUFDLElBQVMsRUFBRSxpQkFBb0MsRUFBRSxTQUFrQjtRQUMxRixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxjQUFjLENBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksU0FBUyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1lBQzVCLHFDQUFxQztTQUN0QztJQUNILENBQUM7SUFFTSxzQkFBc0IsQ0FDekIsTUFBYyxFQUNkLFVBQWtCLEVBQ2xCLFVBQWtCLEVBQ2xCLFNBQWlCLEVBQ2pCLGtCQUEwQixFQUMxQixXQUFtQjtRQUVyQixNQUFNLE1BQU0sR0FBRztZQUNiLGVBQWUsRUFBRSxVQUFVO1NBQzVCLENBQUM7UUFDRixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNwRSxPQUFPLElBQUksQ0FBQyxVQUFVO2FBQ25CLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSw2QkFBNkIsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5SSxDQUFDO0lBRU0sV0FBVyxDQUFDLElBQVMsRUFBRSxLQUFhO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRSxPQUFPLFlBQVksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUYsQ0FBQztJQUVNLGlCQUFpQixDQUFDLElBQVM7UUFDaEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hKLE9BQU8sU0FBUyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVPLHNCQUFzQixDQUFDLFNBQWM7UUFDM0MsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUU7WUFDdEIsT0FBTztTQUNSO1FBQ0QsS0FBSyxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekQsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFO2dCQUNuRCx5RUFBeUU7Z0JBQ3pFLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2dCQUNsQyxPQUFPO2FBQ1I7U0FDRjtJQUNILENBQUM7O3lHQTdiVSxXQUFXOzZHQUFYLFdBQVc7NEZBQVgsV0FBVztrQkFEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFQSSB9IGZyb20gJy4uL2FwcC5jb25zdGFudHMnO1xuaW1wb3J0IHsgRGV2aWNlUHJvZmlsZSB9IGZyb20gJy4uL2NsYXNzZXMvZGV2aWNlUHJvZmlsZSc7XG5pbXBvcnQgeyBEZXZpY2UgfSBmcm9tICcuLy4uL2NsYXNzZXMvZGV2aWNlJztcbmltcG9ydCB7IExpbmVBc3NvY2lhdGlvbiB9IGZyb20gJy4vLi4vY2xhc3Nlcy9saW5lLWFzc29jaWF0aW9uJztcbmltcG9ydCB7IExpbmVBc3NvY2lhdGlvbkludGVyZmFjZSB9IGZyb20gJy4vLi4vY2xhc3Nlcy9saW5lLWFzc29jaWF0aW9uLWludGVyZmFjZSc7XG5pbXBvcnQgeyBTaW1wbGlmaWVkVXNlciB9IGZyb20gJy4vLi4vY2xhc3Nlcy9zaW1wbGlmaWVkLXVzZXInO1xuaW1wb3J0IHsgQVBJU2VydmljZSB9IGZyb20gJy4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGluZVNlcnZpY2UgfSBmcm9tICcuL2xpbmUuc2VydmljZSc7XG5pbXBvcnQgeyBTb3J0aW5nVXRpbHNTZXJ2aWNlIH0gZnJvbSAnLi9zb3J0aW5nLXV0aWxzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXRpbHNTZXJ2aWNlIH0gZnJvbSAnLi91dGlscy5zZXJ2aWNlJztcbmltcG9ydCB7IFZhbGlkYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi92YWxpZGF0aW9uLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVXNlclNlcnZpY2UgaW1wbGVtZW50cyBPbkluaXR7XG4gIHNpdGVJZDogbnVtYmVyID0gLTE7XG4gIHVzZXJJZDogc3RyaW5nID0gJyc7XG4gIHVzZXJJZEV4aXN0UGVuZGluZyA9IGZhbHNlO1xuICBoYXNFeGlzdGVkVXNlcklkID0gZmFsc2U7XG4gIHVzZXIhOiBTaW1wbGlmaWVkVXNlcjtcbiAgb3JpZ2luVXNlciE6IFNpbXBsaWZpZWRVc2VyO1xuICBvcmlnaW5EZXZpY2UhOiBhbnk7XG4gIG9uVXNlckxpbmVTYXZlZCQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gIG9uRmV0Y2hVc2VyVG9rZW4kID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gIHByaXZhdGUgX3VzZXJUb2tlbjogc3RyaW5nID0gJyc7XG5cbiAgZ2V0IHVzZXJUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlclRva2VuO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXNlck5hbWU6IHN0cmluZyA9ICcnO1xuXG4gIGdldCB1c2VyTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91c2VyTmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgX3VzZXJMYXN0TmFtZTogc3RyaW5nID0gJyc7XG5cbiAgZ2V0IHVzZXJMYXN0TmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl91c2VyTGFzdE5hbWU7XG4gIH1cblxuICBwcml2YXRlIF9jdWNtSWQ6IHN0cmluZyA9ICcnO1xuXG4gIGdldCBjdWNtSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY3VjbUlkO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXNlckRldmljZTogRGV2aWNlUHJvZmlsZSB8IHVuZGVmaW5lZDtcblxuICBnZXQgdXNlckRldmljZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlckRldmljZTtcbiAgfVxuXG4gIGdldCBsaW5lQXNzb2NpYXRpb24oKTogTGluZUFzc29jaWF0aW9uSW50ZXJmYWNlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy51c2VyRGV2aWNlICYmIHRoaXMudXNlckRldmljZS5saW5lQXNzb2NpYXRpb25zICYmIHRoaXMudXNlckRldmljZS5saW5lQXNzb2NpYXRpb25zWzBdO1xuICB9XG5cbiAgZ2V0IG9yaWdpbkxpbmVBc3NvY2lhdGlvbigpOiBMaW5lQXNzb2NpYXRpb24gfCBMaW5lQXNzb2NpYXRpb25JbnRlcmZhY2Uge1xuICAgIHJldHVybiB0aGlzLm9yaWdpbkRldmljZSAmJiBKU09OLnBhcnNlKHRoaXMub3JpZ2luRGV2aWNlKS5saW5lQXNzb2NpYXRpb25zWzBdO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBBUElTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGluZVNlcnZpY2U6IExpbmVTZXJ2aWNlXG4gICkge1xuXG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnNpdGVJZClcbiAgfVxuXG4gIHJlc2V0TGluZUFzc29jaWF0aW9uKGRldmljZUluZGV4OiBudW1iZXIsIGxpbmVJbmRleDogbnVtYmVyLCB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UpOiB2b2lkIHtcbiAgICBjb25zdCBvcmlnaW5MaW5lID0gdGhpcy5vcmlnaW5Vc2VyPy5kZXZpY2VzW2RldmljZUluZGV4XT8ubGluZUFzc29jaWF0aW9uc1tsaW5lSW5kZXhdO1xuICAgIGlmICh0aGlzLnVzZXI/LmRldmljZXNbZGV2aWNlSW5kZXhdPy5saW5lQXNzb2NpYXRpb25zW2xpbmVJbmRleF0gJiYgb3JpZ2luTGluZSkge1xuICAgICAgdGhpcy51c2VyLmRldmljZXNbZGV2aWNlSW5kZXhdLmxpbmVBc3NvY2lhdGlvbnNbbGluZUluZGV4XSA9IG5ldyBMaW5lQXNzb2NpYXRpb24oSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcmlnaW5MaW5lLmdldEZ1bGxEYXRhKCkpKSwgdmFsaWRhdGlvblNlcnZpY2UpXG4gICAgfVxuICB9XG5cbiAgcmVzZXREZXZpY2UoY3VycmVudERldmljZTogRGV2aWNlLCB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UpOiB2b2lkIHtcbiAgICBjb25zdCBvcmlnaW5EZXZpY2UgPSB0aGlzLm9yaWdpblVzZXIuZGV2aWNlcy5maW5kKGRldmljZSA9PiBkZXZpY2UubmFtZSA9PT0gY3VycmVudERldmljZS5uYW1lKTtcbiAgICBjb25zdCBkZXZpY2VJbmQgPSB0aGlzLnVzZXIuZGV2aWNlcy5maW5kSW5kZXgoZGV2aWNlID0+IGRldmljZS5uYW1lID09PSBjdXJyZW50RGV2aWNlLm5hbWUpO1xuICAgIGlmIChvcmlnaW5EZXZpY2UgJiYgZGV2aWNlSW5kID4gLTEpIHtcbiAgICAgIGNvbnN0IGxpbmVBc3NvY2lhdGlvbnMgPSB0aGlzLnVzZXIuZGV2aWNlc1tkZXZpY2VJbmRdLmxpbmVBc3NvY2lhdGlvbnM7XG4gICAgICB0aGlzLnVzZXIuZGV2aWNlc1tkZXZpY2VJbmRdID0gbmV3IERldmljZShKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9yaWdpbkRldmljZS5nZXROb0xpbmVzRnVsbERhdGEoKSkpLCB2YWxpZGF0aW9uU2VydmljZSk7XG4gICAgICB0aGlzLnVzZXIuZGV2aWNlc1tkZXZpY2VJbmRdLmxpbmVBc3NvY2lhdGlvbnMgPSBsaW5lQXNzb2NpYXRpb25zO1xuICAgICAgY29uc29sZS5sb2coJ2RldmljZSBhZnRlciByZXNldCA9ICcsIHRoaXMudXNlci5kZXZpY2VzW2RldmljZUluZF0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmZXRjaFVzZXJUb2tlbihzaXRlSWQ6IG51bWJlciwgdXNlcklkOiBzdHJpbmcsIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZSwgaXNTZXROZXdUb2tlbk9ubHk/OiBib29sZWFuKTogYW55IHtcbiAgICAvKmlmICh0aGlzLnNpdGVJZCA9PT0gc2l0ZUlkICYmIHRoaXMudXNlcklkID09PSB1c2VySWQgJiYgdGhpcy51c2VyKSB7XG4gICAgICByZXR1cm4gb2YodGhpcy51c2VyKTtcbiAgICB9Ki9cbiAgICB0aGlzLnNpdGVJZCA9IHNpdGVJZDtcbiAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLmZldGNoKEFQSS5VU0VSX1RPS0VOLnJlcGxhY2UoJzpzaXRlSWQnLCBTdHJpbmcodGhpcy5zaXRlSWQpKS5yZXBsYWNlKCc6dXNlcklkJywgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudCh1c2VySWQpKSkpXG4gICAgICAucGlwZShtYXAoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHVzZXIgPSByZXN1bHQgJiYgT2JqZWN0LnZhbHVlcyhyZXN1bHQpWzBdO1xuICAgICAgICBjb25zdCB1c2VyVG9rZW4gPSByZXN1bHQgJiYgT2JqZWN0LmtleXMocmVzdWx0KVswXTtcbiAgICAgICAgaWYgKHVzZXIpIHtcbiAgICAgICAgICBpZiAoIWlzU2V0TmV3VG9rZW5Pbmx5KSB7XG4gICAgICAgICAgICB0aGlzLnNldFNpbXBsaWZpZWRVc2VyKHVzZXIsIHZhbGlkYXRpb25TZXJ2aWNlLCB1c2VyVG9rZW4pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl91c2VyVG9rZW4gPSB1c2VyVG9rZW47XG4gICAgICAgICAgICAvLyB0aGlzLm9yaWdpblVzZXIudG9rZW4gPSB1c2VyLnRva2VuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm9uRmV0Y2hVc2VyVG9rZW4kLm5leHQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pKVxuICAgIC8vIC5waXBlKHRoaXMuaGFuZGxlRXJyb3IoZmFsc2UsIHRydWUpKTtcbiAgfVxuXG4gIHB1YmxpYyBmZXRjaERJVXNlckRldmljZShzaXRlSWQ6IG51bWJlciwgdXNlcklkOiBzdHJpbmcsIGRldmljZVR5cGU6IHN0cmluZywgZGV2aWNlTmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuc2l0ZUlkID0gc2l0ZUlkO1xuICAgIHRoaXMudXNlcklkID0gdXNlcklkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UuZmV0Y2goQVBJLlVTRVJfVE9LRU4ucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyh0aGlzLnNpdGVJZCkpLnJlcGxhY2UoJzp1c2VySWQnLCBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KHVzZXJJZCkpKSlcbiAgICAgIC5waXBlKHN3aXRjaE1hcCgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgdXNlciA9IHJlc3VsdCAmJiBPYmplY3QudmFsdWVzKHJlc3VsdClbMF07XG4gICAgICAgIGNvbnN0IHVzZXJUb2tlbiA9IHJlc3VsdCAmJiBPYmplY3Qua2V5cyhyZXN1bHQpWzBdO1xuICAgICAgICBsZXQgZm91bmREZXZpY2U6IGFueTtcblxuICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgIHRoaXMuX3VzZXJUb2tlbiA9IHVzZXJUb2tlbjtcbiAgICAgICAgICB0aGlzLl91c2VyTmFtZSA9IHVzZXIuZmlyc3ROYW1lO1xuICAgICAgICAgIHRoaXMuX3VzZXJMYXN0TmFtZSA9IHVzZXIubGFzdE5hbWU7XG4gICAgICAgICAgdGhpcy5fY3VjbUlkID0gdXNlci5jdWNtSWQ7XG4gICAgICAgICAgZm91bmREZXZpY2UgPSBkZXZpY2VOYW1lXG4gICAgICAgICAgICA/IHVzZXIuZGV2aWNlcy5maW5kKChkZXZpY2U6IGFueSkgPT4gZGV2aWNlLm5hbWUgPT09IGRldmljZU5hbWUpXG4gICAgICAgICAgICA6IHVzZXIuZGV2aWNlcy5maW5kKChkZXZpY2U6IGFueSkgPT4gZGV2aWNlLmRldmljZVR5cGUgPT09IGRldmljZVR5cGUpO1xuICAgICAgICAgIGlmKGZvdW5kRGV2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLl91c2VyRGV2aWNlID0gbmV3IERldmljZVByb2ZpbGUoe1xuICAgICAgICAgICAgICAuLi5mb3VuZERldmljZSxcbiAgICAgICAgICAgICAgbW9kZWw6IGZvdW5kRGV2aWNlPy5kZXZpY2VUeXBlLFxuICAgICAgICAgICAgICBtYWNBZGRyZXNzOiB0aGlzLmdldE1hY0FkZHJlc3MoZm91bmREZXZpY2UubmFtZSksXG4gICAgICAgICAgICAgIGxpbmVzOiBmb3VuZERldmljZT8ubGluZUFzc29jaWF0aW9ucz8ubWFwKChsaW5lOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZExpbmUgPSB1c2VyPy5saW5lcz8uZmluZCgobDogYW55KSA9PiBsLnBraWQgPT09IGxpbmUubGluZVBraWQpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBgJHt0aGlzLl91c2VyTmFtZX0gJHt0aGlzLl91c2VyTGFzdE5hbWV9YCxcbiAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbjogbGluZSAmJiBsaW5lLmRpcmVjdG9yeU51bWJlciAmJiBsaW5lLmRpcmVjdG9yeU51bWJlci5yb3V0ZVBhcnRpdGlvbk5hbWUgJiYgbGluZS5kaXJlY3RvcnlOdW1iZXIuZGlyZWN0b3J5TnVtYmVyIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgbnVtYmVyOiBmb3VuZExpbmUgIT09IC0xID8gZm91bmRMaW5lLm1hcHBlZERpZHNbMF0gOiAnJyxcbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmb3VuZExpbmUgJiYgZm91bmRMaW5lLmRpZFBhdHRlcm5zICYmIGZvdW5kTGluZS5kaWRQYXR0ZXJuc1swXSA/IGZvdW5kTGluZS5kaWRQYXR0ZXJuc1swXS5kZXNjcmlwdGlvbiA6ICcnLFxuICAgICAgICAgICAgICAgICAgcm91dGVQYXJ0aXRpb25OYW1lOiBsaW5lICYmIGxpbmUuZGlyZWN0b3J5TnVtYmVyLnJvdXRlUGFydGl0aW9uTmFtZSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgIHBraWQ6IGxpbmUgJiYgbGluZS5saW5lUGtpZCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgIGluZGV4OiBsaW5lICYmIGxpbmUuaW5kZXggfHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGxpbmUgJiYgbGluZS5wb3NpdGlvbiB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICB0ZXh0TGFiZWw6IGxpbmUgJiYgbGluZS50ZXh0TGFiZWwgfHwgJycsXG4gICAgICAgICAgICAgICAgICBkaXNwbGF5TGFiZWw6IGxpbmUgJiYgbGluZS5kaXNwbGF5TGFiZWwgfHwgJycsXG4gICAgICAgICAgICAgICAgICBlMTY0TWFzazogbGluZSAmJiBsaW5lLmUxNjRNYXNrIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgYWxlcnRpbmdOYW1lOiBsaW5lICYmIGxpbmUuYWxlcnRpbmdOYW1lIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgY2FsbGVyTnVtYmVyOiBsaW5lICYmIGxpbmUuY2FsbGVyTnVtYmVyIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgbG9nTWlzc2VkQ2FsbDogbGluZSAmJiBsaW5lLmxvZ01pc3NlZENhbGwgfHwgJycsXG4gICAgICAgICAgICAgICAgICBjYWxsSW5mb0Rpc3BsYXk6IGxpbmUgJiYgbGluZS5jYWxsSW5mb0Rpc3BsYXkgfHwgdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgc29mdHdhcmVWZXJzaW9uOiBmb3VuZERldmljZT8uZmlybXdhcmVWZXJzaW9uXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9yaWdpbkRldmljZSA9IHRoaXMuX3VzZXJEZXZpY2UgPyBKU09OLnN0cmluZ2lmeSh0aGlzLl91c2VyRGV2aWNlLmdldFNhdmFibGVEYXRhKCkpIDogJyc7XG5cbiAgICAgICAgaWYgKCFmb3VuZERldmljZSkge1xuICAgICAgICAgIHJldHVybiBvZih0aGlzLl91c2VyRGV2aWNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbW1vblBob25lQ29uZmlnTmFtZSA9IHVzZXI/LmRldmljZXM/LlswXT8uY29tbW9uUGhvbmVDb25maWdOYW1lIHx8ICcnO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREZXZpY2VFeHRyYU9wdGlvbnModGhpcy5zaXRlSWQsIGZvdW5kRGV2aWNlLm5hbWUsIGNvbW1vblBob25lQ29uZmlnTmFtZSlcbiAgICAgICAgICAucGlwZShtYXAoKGV4dHJhT3B0aW9uczogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdXNlckRldmljZSkge1xuICAgICAgICAgICAgICAodGhpcy5fdXNlckRldmljZSBhcyBhbnkpLmxvZ2dlZEludG9IdW50R3JvdXAgPSBleHRyYU9wdGlvbnM/LmxvZ2dlZEludG9IdW50R3JvdXA7XG4gICAgICAgICAgICAgICh0aGlzLl91c2VyRGV2aWNlIGFzIGFueSkucmVtb3RlRGV2aWNlID0gZXh0cmFPcHRpb25zPy5yZW1vdGVEZXZpY2U7XG4gICAgICAgICAgICAgICh0aGlzLl91c2VyRGV2aWNlIGFzIGFueSkuaG90bGluZURldmljZSA9IGV4dHJhT3B0aW9ucz8uaG90bGluZURldmljZTtcbiAgICAgICAgICAgICAgKHRoaXMuX3VzZXJEZXZpY2UgYXMgYW55KS5pZ25vcmVQcmVzZW50YXRpb25JbmRpY2F0b3JzID0gZXh0cmFPcHRpb25zPy5pZ25vcmVQcmVzZW50YXRpb25JbmRpY2F0b3JzO1xuICAgICAgICAgICAgICAodGhpcy5fdXNlckRldmljZSBhcyBhbnkpLnVzZURldmljZVBvb2xDZ3BuSW5ncmVzc0ROID0gZXh0cmFPcHRpb25zPy51c2VEZXZpY2VQb29sQ2dwbkluZ3Jlc3NETjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91c2VyRGV2aWNlO1xuICAgICAgICAgIH0pKTtcbiAgICAgIH0pKVxuICB9XG5cbiAgcHVibGljIGdldERldmljZUV4dHJhT3B0aW9ucyhzaXRlSWQ6IG51bWJlciwgZGV2aWNlTmFtZTogc3RyaW5nLCBjb21tb25QaG9uZUNvbmZpZ05hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UuZmV0Y2goQVBJLkRFVklDRV9FWFRSQV9PUFRJT05TXG4gICAgICAucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyhzaXRlSWQpKVxuICAgICAgLnJlcGxhY2UoJzpkZXZpY2VOYW1lJywgZGV2aWNlTmFtZSlcbiAgICAgIC5yZXBsYWNlKCc6Y29tbW9uUGhvbmVDb25maWdOYW1lJywgZW5jb2RlVVJJQ29tcG9uZW50KGNvbW1vblBob25lQ29uZmlnTmFtZSkpKVxuICAgICAgLy8gLnBpcGUodGhpcy5oYW5kbGVFcnJvcihmYWxzZSwgdHJ1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNYWNBZGRyZXNzKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbWFjUmVnZXggPSAvXltBLUZhLWYwLTldezEyfSQvO1xuICAgIGxldCBtYWNBZGRyZXNzO1xuXG4gICAgaWYgKG5hbWUubGVuZ3RoID09PSAxMiAmJiBtYWNSZWdleC50ZXN0KG5hbWUpKSB7XG4gICAgICBtYWNBZGRyZXNzID0gbmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdHJpbW1lZCA9IG5hbWUuc2xpY2UoMyk7XG4gICAgICBtYWNBZGRyZXNzID0gbWFjUmVnZXgudGVzdCh0cmltbWVkKSA/IHRyaW1tZWQgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hY0FkZHJlc3M7XG4gIH1cblxuICBwdWJsaWMgZmV0Y2hXZWJleFVzZXJEZXZpY2UoY3VzdG9tZXJJZDogc3RyaW5nLCB1c2VySWQ6IHN0cmluZywgZGV2aWNlVHlwZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGZvcmtKb2luKFtcbiAgICAgIHRoaXMuYXBpU2VydmljZS5mZXRjaChBUEkuV0VCRVhfVVNFUl9UT0tFTi5yZXBsYWNlKCc6Y3VzdG9tZXJJZCcsIGN1c3RvbWVySWQpLnJlcGxhY2UoJzp1c2VySWQnLCBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KHVzZXJJZCkpKSksXG4gICAgICB0aGlzLmFwaVNlcnZpY2UuZmV0Y2goQVBJLldFQkVYX1VTRVJfREVWSUNFUy5yZXBsYWNlKCc6Y3VzdG9tZXJJZCcsIGN1c3RvbWVySWQpLnJlcGxhY2UoJzp1c2VySWQnLCBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KHVzZXJJZCkpKSlcbiAgICBdKVxuICAgICAgLnBpcGUobWFwKChyZXN1bHRzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5fdXNlck5hbWUgPSByZXN1bHRzWzBdLmZpcnN0TmFtZTtcbiAgICAgICAgdGhpcy5fdXNlckxhc3ROYW1lID0gcmVzdWx0c1swXS5sYXN0TmFtZTtcbiAgICAgICAgaWYocmVzdWx0c1sxXSkge1xuICAgICAgICAgIGNvbnN0IGZvdW5kRGV2aWNlID0gcmVzdWx0c1sxXS5kZXZpY2VzLmZpbmQoKGRldmljZTogYW55KSA9PiBkZXZpY2UubW9kZWwgPT09IGRldmljZVR5cGUpO1xuICAgICAgICAgIHRoaXMuX3VzZXJEZXZpY2UgPSBuZXcgRGV2aWNlUHJvZmlsZSh7XG4gICAgICAgICAgICAuLi5mb3VuZERldmljZSxcbiAgICAgICAgICAgIG1hY0FkZHJlc3M6IGZvdW5kRGV2aWNlLm1hYyxcbiAgICAgICAgICAgIG1heExpbmVDb3VudDogZm91bmREZXZpY2U/LmRldmljZU1lbWJlcnM/Lm1heExpbmVDb3VudCxcbiAgICAgICAgICAgIGxpbmVzOiBmb3VuZERldmljZT8uZGV2aWNlTWVtYmVycz8ubWVtYmVycz8ubWFwKChtZW1iZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG5hbWU6IGAke21lbWJlci5maXJzdE5hbWV9ICR7bWVtYmVyLmxhc3ROYW1lfWAsXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uOiBtZW1iZXIuZXh0ZW5zaW9uXG4gICAgICAgICAgICAgIH0gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJEZXZpY2U7XG4gICAgICB9KSlcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVVc2VyRmllbGRzKGJvZHk6IGFueSk6IGFueSB7XG4gICAgaWYgKCF0aGlzLnVzZXJJZCB8fCAhdGhpcy5zaXRlSWQgfHwgIXRoaXMudXNlcj8udG9rZW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5wb3N0KEFQSS5VUERBVEVfVVNFUl9GSUVMRFMucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyh0aGlzLnNpdGVJZCkpLnJlcGxhY2UoJzp0b2tlbicsIHRoaXMudXNlclRva2VuKSwgYm9keSlcbiAgICAgIC8vIC5waXBlKHRoaXMuaGFuZGxlRXJyb3IoZmFsc2UsIHRydWUpKTtcbiAgfVxuXG4gIHB1YmxpYyBmZXRjaFVzZXJCeUlkKGlkOiBzdHJpbmcpIHtcbiAgICB0aGlzLnVzZXJJZEV4aXN0UGVuZGluZyA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5mZXRjaChBUEkuVVNFUl9CWV9JRC5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHRoaXMuc2l0ZUlkKSkucmVwbGFjZSgnOnVzZXJJZCcsIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoaWQpKSkpXG4gICAgICAucGlwZShtYXAocmVzdWx0ID0+IHtcbiAgICAgICAgdGhpcy51c2VySWRFeGlzdFBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBmZXRjaExlYW5Vc2VyQ29udmVyc2F0aW9uQnlJZChpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5mZXRjaChBUEkuTEVBTl9VU0VSX0NPTlZFUlNBVElPTl9TVEFSVC5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHRoaXMuc2l0ZUlkKSkucmVwbGFjZSgnOnVzZXJJZCcsIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoaWQpKSkpO1xuICB9XG5cbiAgcHVibGljIGZldGNoTGVhblVzZXJEZXZpY2VzQ29udmVyc2F0aW9uQnlJZChpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5mZXRjaChBUEkuTEVBTl9VU0VSX0RFVklDRVNfQ09OVkVSU0FUSU9OX1NUQVJULnJlcGxhY2UoJzpzaXRlSWQnLCBTdHJpbmcodGhpcy5zaXRlSWQpKS5yZXBsYWNlKCc6dXNlcklkJywgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChpZCkpKSk7XG4gIH1cbiAgcHVibGljIGZldGNoTGVhblVzZXJMaW5lc0NvbnZlcnNhdGlvbkJ5SWQoaWQ6IHN0cmluZywgbGVhblVzZXJEZXZpY2VzVG9rZW46IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UuZmV0Y2goQVBJLkxFQU5fVVNFUl9MSU5FU19DT05WRVJTQVRJT05fU1RBUlQucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyh0aGlzLnNpdGVJZCkpXG4gICAgICAucmVwbGFjZSgnOnVzZXJJZCcsIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoaWQpKSkucmVwbGFjZSgnOmxlYW5Vc2VyRGV2aWNlc1Rva2VuJywgbGVhblVzZXJEZXZpY2VzVG9rZW4pKTtcbiAgfVxuICBwdWJsaWMgZmV0Y2hMZWFuVXNlclNOUkNvbnZlcnNhdGlvbkJ5SWQoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UuZmV0Y2goQVBJLkxFQU5fVVNFUl9TTlJfQ09OVkVSU0FUSU9OX1NUQVJULnJlcGxhY2UoJzpzaXRlSWQnLCBTdHJpbmcodGhpcy5zaXRlSWQpKS5yZXBsYWNlKCc6dXNlcklkJywgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChpZCkpKSk7XG4gIH1cblxuICBwdWJsaWMgcGVyc2lzdENhY2hlQ2hhbmdlcygpIHtcbiAgICAvKmNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIGV4Y2x1ZGVEZXZpY2VFeHRyYU9wdGlvbnM6IHRydWVcbiAgICB9OyovXG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1VzZXJDaGFuZ2VzVG9DYWNoZSgpXG4gICAgICAucGlwZShtYXAoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UucG9zdChBUEkuUEVSU0lTVF9VU0VSX0NBQ0hFLnJlcGxhY2UoJzpzaXRlSWQnLCBTdHJpbmcodGhpcy5zaXRlSWQpKS5yZXBsYWNlKCc6dG9rZW4nLCB0aGlzLnVzZXJUb2tlbiksIHt9LCB7fSlcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcblxuICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gLnBpcGUobWFwKCh1c2VyKSA9PiB7XG4gICAgICAgICAgLy8gICAvLyB0aGlzLnNldFVzZXIodXNlciwgZmFsc2UsIHRoaXMudXNlci50b2tlbik7XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXIuaGFzTW9kaWZpZWRDYWNoZSA9IGZhbHNlO1xuICAgICAgICAgIC8vIH0pKVxuICAgICAgICAgIC8vIC5waXBlKHRoaXMuaGFuZGxlRXJyb3IodHJ1ZSwgdHJ1ZSkpO1xuICAgICAgfSkpO1xuICB9XG5cbiAgcHVibGljIHByb2Nlc3NVc2VyQ2hhbmdlc1RvQ2FjaGUoKTogYW55IHtcbiAgICBjb25zdCBjYWxscyA9IFtdO1xuICAgIGNvbnN0IGJvZHkgPSBVdGlsc1NlcnZpY2UuZGlmZih0aGlzLm9yaWdpblVzZXIuZ2V0VXNlckRldGFpbHNTYXZhYmxlRGF0YSgpLCB0aGlzLnVzZXIuZ2V0VXNlckRldGFpbHNTYXZhYmxlRGF0YSgpLCAndXNlcicpO1xuICAgIGlmIChib2R5Py5sZW5ndGgpIHtcbiAgICAgIGNhbGxzLnB1c2godGhpcy51cGRhdGVVc2VyRmllbGRzKGJvZHkpKTtcbiAgICB9XG4gICAgaWYgKCFjYWxscz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gb2YodGhpcy51c2VyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ya0pvaW4oY2FsbHMpXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlczogYW55KSA9PiB7XG4gICAgICAgIC8vIEFwaVVzZXJSZXNwb25zZVxuICAgICAgICB0aGlzLmhhbmRsZVNhdmVVc2VyUmVzcG9uc2UocmVzcG9uc2VzKTtcbiAgICAgIH0pKVxuICAgIC8vIC5waXBlKHRoaXMuaGFuZGxlRXJyb3IoZmFsc2UsIHRydWUpKTtcblxuICB9XG5cbiAgcHVibGljIHNhdmVOZXdMaW5lKGxpbmU6IGFueSk6IGFueSB7XG4gICAgdGhpcy5kZWxldGVMaW5lKHRoaXMuc2l0ZUlkLCBsaW5lLnBraWQsIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLnVzZXJUb2tlbikpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29uc3QgVVJMID0gQVBJLlBFUlNJU1RfVVNFUl9DQUNIRS5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHRoaXMuc2l0ZUlkKSkucmVwbGFjZSgnOnRva2VuJywgdGhpcy51c2VyVG9rZW4pO1xuICAgICAgICB0aGlzLmFwaVNlcnZpY2UucG9zdChVUkwsIHt9LCApXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJ1bk5ld0xpbmVDcmVhdGlvbihsaW5lKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHBlcnNpc3RVc2VyQ2FjaGUoKTogYW55IHtcbiAgICBjb25zdCBVUkwgPSBBUEkuUEVSU0lTVF9VU0VSX0NBQ0hFLnJlcGxhY2UoJzpzaXRlSWQnLCBTdHJpbmcodGhpcy5zaXRlSWQpKS5yZXBsYWNlKCc6dG9rZW4nLCB0aGlzLnVzZXJUb2tlbik7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5wb3N0KFVSTCwge30sICk7XG4gIH1cblxuICBwdWJsaWMgcnVuTmV3TGluZUNyZWF0aW9uKGxpbmU6IGFueSk6IHZvaWQge1xuICAgIC8vIENSRUFURSBORVcgTElORVxuICAgIGNvbnN0IG5ld0xpbmVCb2R5ID0gU29ydGluZ1V0aWxzU2VydmljZS5kaWZmKFxuICAgICAgdGhpcy5saW5lU2VydmljZS5nZW5lcmF0ZUxpbmVBc3NvY2lhdGlvbkZyb21MaW5lKG51bGwpLFxuICAgICAgdGhpcy5saW5lU2VydmljZS5nZW5lcmF0ZUxpbmVBc3NvY2lhdGlvbkZyb21MaW5lKGxpbmUpLFxuICAgICAgJ2RldmljZS5saW5lQXNzb2NpYXRpb25zJywgbnVsbFxuICAgICk7XG4gICAgdGhpcy5hc3NvY2lhdGVMaW5lVG9Vc2VyRGV2aWNlKFxuICAgICAgdGhpcy5zaXRlSWQsXG4gICAgICB0aGlzLnVzZXJEZXZpY2UgJiYgdGhpcy51c2VyRGV2aWNlLm5hbWUgfHwgJycsXG4gICAgICBuZXdMaW5lQm9keSxcbiAgICAgIG51bGwsXG4gICAgICB0aGlzLmxpbmVBc3NvY2lhdGlvbj8uY2FsbGluZ1NlYXJjaFNwYWNlXG4gICAgKVxuICAgIC5waXBlKHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICBjb25zdCBVUkwgPSBBUEkuUEVSU0lTVF9VU0VSX0NBQ0hFLnJlcGxhY2UoJzpzaXRlSWQnLCBTdHJpbmcodGhpcy5zaXRlSWQpKS5yZXBsYWNlKCc6dG9rZW4nLCB0aGlzLnVzZXJUb2tlbik7XG4gICAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLnBvc3QoVVJMLCB7fSwgKTtcbiAgICB9KSlcbiAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2U/LmN1cnJlbnRVcGRhdGVkVXNlcikge1xuICAgICAgICBjb25zdCBsaW5lUGtJZCA9IHJlc3BvbnNlLmN1cnJlbnRVcGRhdGVkVXNlci5kZXZpY2VzWzBdPy5saW5lQXNzb2NpYXRpb25zWzBdPy5saW5lUGtpZCB8fCByZXNwb25zZS5jdXJyZW50VXBkYXRlZFVzZXIuZGV2aWNlc1swXT8ubGluZUFzc29jaWF0aW9uc1swXT8ubGluZUxvY2FsSWQ7XG4gICAgICAgIGZvcmtKb2luKFtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUxpbmVGaWVsZHModGhpcy5zaXRlSWQsIGxpbmVQa0lkLCB0aGlzLnVzZXJUb2tlbiwgdGhpcy5saW5lQXNzb2NpYXRpb24/LmFsZXJ0aW5nTmFtZSksXG4gICAgICAgICAgdGhpcy51cGRhdGVEZXZpY2VGaWVsZHModGhpcy5zaXRlSWQsIHRoaXMudXNlckRldmljZSAmJiB0aGlzLnVzZXJEZXZpY2UubmFtZSB8fCAnJywgdGhpcy51c2VyVG9rZW4pXG4gICAgICAgIF0pLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGV2aWNlRGF0YSA9IEpTT04ucGFyc2UodGhpcy5vcmlnaW5EZXZpY2UpO1xuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGV2aWNlTGluZSA9IG9yaWdpbmFsRGV2aWNlRGF0YS5saW5lcy5maW5kKChvcmlnTGluZTogYW55KSA9PiBvcmlnTGluZS5wa2lkID09PSBsaW5lLnBraWQpO1xuICAgICAgICAgIGlmKG9yaWdpbmFsRGV2aWNlTGluZSkge1xuICAgICAgICAgICAgb3JpZ2luYWxEZXZpY2VEYXRhLmV4dGVuc2lvbiA9IGxpbmUuZXh0ZW5zaW9uO1xuICAgICAgICAgICAgdGhpcy5vcmlnaW5EZXZpY2UgPSBKU09OLnN0cmluZ2lmeShvcmlnaW5hbERldmljZURhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm9uVXNlckxpbmVTYXZlZCQubmV4dCh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSlcbiAgICAvLyAtLS0tLVxuICB9XG5cbiAgcHVibGljIGRlbGV0ZUxpbmUoc2l0ZUlkOiBudW1iZXIsIHBraWQ6IHN0cmluZywgdG9rZW46IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UuZGVsZXRlKEFQSS5ERUxFVEVfTElORS5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHNpdGVJZCkpLnJlcGxhY2UoJzpwa2lkJywgcGtpZCkucmVwbGFjZSgnOnRva2VuJywgZW5jb2RlVVJJQ29tcG9uZW50KHRva2VuKSksIHt9KVxuICAgICAgLy8gLnBpcGUodGhpcy5oYW5kbGVFcnJvcih0cnVlLCBmYWxzZSkpO1xuICB9XG5cbiAgcHVibGljIGRpc2Fzc29jaWF0ZUxpbmUoc2l0ZUlkOiBudW1iZXIsIGxpbmVQa2lkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGRldmljZU5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UuZGVsZXRlKFxuICAgICAgQVBJLkRJU0FTU09DSUFURV9MSU5FLnJlcGxhY2UoJzpzaXRlSWQnLCBTdHJpbmcoc2l0ZUlkKSlcbiAgICAgICAgLnJlcGxhY2UoJzpsaW5lUGtpZCcsIGxpbmVQa2lkKVxuICAgICAgICAucmVwbGFjZSgnOmRldmljZU5hbWUnLCBkZXZpY2VOYW1lKVxuICAgICAgICAucmVwbGFjZSgnOnRva2VuJywgZW5jb2RlVVJJQ29tcG9uZW50KHRva2VuKSksIHt9KVxuICAgICAgLy8gLnBpcGUodGhpcy5oYW5kbGVFcnJvcih0cnVlLCBmYWxzZSkpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUxpbmVGaWVsZHMoc2l0ZUlkOiBudW1iZXIsIHBraWQ6IHN0cmluZywgdG9rZW46IHN0cmluZywgYWxlcnRpbmdOYW1lOiBhbnkpIHtcbiAgICBjb25zdCBib2R5ID0gWydsaW5lLmRlc2NyaXB0aW9uPScsIGBsaW5lLmFsZXJ0aW5nTmFtZT0ke2FsZXJ0aW5nTmFtZX1gXTtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLnBvc3QoQVBJLlVQREFURV9MSU5FX0ZJRUxEUy5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHNpdGVJZCkpLnJlcGxhY2UoJzpwa2lkJywgZW5jb2RlVVJJQ29tcG9uZW50KHBraWQpKS5yZXBsYWNlKCc6dG9rZW4nLCBlbmNvZGVVUklDb21wb25lbnQodG9rZW4pKSwgYm9keSlcbiAgICAgIC8vIC5waXBlKHRoaXMuaGFuZGxlRXJyb3IodHJ1ZSwgZmFsc2UpKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVEZXZpY2VGaWVsZHMoc2l0ZUlkOiBudW1iZXIsIGRldmljZU5hbWU6IHN0cmluZywgdG9rZW46IHN0cmluZykge1xuICAgIGNvbnN0IGJvZHkgPSBbJ2RldmljZS5hc3NvY2lhdGVkRE5zLjA9bnVsbCddO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UucG9zdChBUEkuVVBEQVRFX0RFVklDRV9GSUVMRFMucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyhzaXRlSWQpKS5yZXBsYWNlKCc6ZGV2aWNlTmFtZScsIGRldmljZU5hbWUpLnJlcGxhY2UoJzp0b2tlbicsIGVuY29kZVVSSUNvbXBvbmVudCh0b2tlbikpLCBib2R5KVxuICAgIC8vIC5waXBlKHRoaXMuaGFuZGxlRXJyb3IodHJ1ZSwgZmFsc2UpKTtcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0Rlc3RpbmF0aW9uTnVtYmVyKHNpdGVJZDogc3RyaW5nLCBkaXJlY3RvcnlOdW1iZXI6IHN0cmluZywgcm91dGVQYXJ0aXRpb25OYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBkbnR5cGU6ICdFWFRFTlNJT04nXG4gICAgfTtcbiAgICBjb25zdCBib2R5ID0ge1xuICAgICAgZGlyZWN0b3J5TnVtYmVyOiBkaXJlY3RvcnlOdW1iZXIsXG4gICAgICByb3V0ZVBhcnRpdGlvbk5hbWU6IHJvdXRlUGFydGl0aW9uTmFtZVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5wb3N0KEFQSS5DSEVDS19ERVNUSU5BVElPTl9OVU1CRVIucmVwbGFjZSgnOnNpdGVJZCcsIHNpdGVJZCksIGJvZHksIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgYXNzb2NpYXRlTGluZVRvVXNlckRldmljZShzaXRlSWQ6IG51bWJlciwgZGV2aWNlTmFtZTogc3RyaW5nLCBib2R5OiBhbnksIHBraWQ6IGFueSwgY3NzOiBhbnkpIHtcbiAgICBsZXQgcGFyYW1zID0ge307XG4gICAgaWYgKHBraWQpIHtcbiAgICAgIHBhcmFtcyA9IHtsaW5lUGtpZDogcGtpZH07XG4gICAgfVxuICAgIGlmIChjc3MpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHBhcmFtc1snY3NzJ10gPSBjc3M7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UucG9zdChBUEkuQVNTT0NJQVRFX0xJTkUucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyhzaXRlSWQpKS5yZXBsYWNlKCc6ZGV2aWNlTmFtZScsIGRldmljZU5hbWUpXG4gICAgICAucmVwbGFjZSgnOnRva2VuJywgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMudXNlclRva2VuKSksIGJvZHksIHBhcmFtcylcbiAgICAgIC8vIC5waXBlKHRoaXMuaGFuZGxlRXJyb3IodHJ1ZSwgdHJ1ZSkpO1xuICB9XG5cbiAgcHVibGljIGhhc1Vuc2F2ZWRDaGFuZ2VzKCkge1xuICAgIGlmICh0aGlzLl91c2VyRGV2aWNlICYmIHRoaXMub3JpZ2luRGV2aWNlKSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodGhpcy5fdXNlckRldmljZS5nZXRTYXZhYmxlRGF0YSgpKSAmJiB0aGlzLm9yaWdpbkRldmljZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHNldFNpbXBsaWZpZWRVc2VyKHVzZXI6IGFueSwgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLCB1c2VyVG9rZW4/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXIgPSBuZXcgU2ltcGxpZmllZFVzZXIodXNlciwgdmFsaWRhdGlvblNlcnZpY2UpO1xuICAgIGNvbnN0IGNvcGllZFVzZXIgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHVzZXIpKTtcbiAgICB0aGlzLm9yaWdpblVzZXIgPSBuZXcgU2ltcGxpZmllZFVzZXIoY29waWVkVXNlciwgdmFsaWRhdGlvblNlcnZpY2UpO1xuICAgIGlmICghdGhpcy51c2VyVG9rZW4gJiYgdXNlclRva2VuKSB7XG4gICAgICB0aGlzLl91c2VyVG9rZW4gPSB1c2VyVG9rZW47XG4gICAgICAvLyB0aGlzLm9yaWdpblVzZXIudG9rZW4gPSB1c2VyVG9rZW47XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGVkaXRUcmFuc2xhdGlvblBhdHRlcm4oXG4gICAgICBjdWNtSWQ6IHN0cmluZyxcbiAgICAgIG9sZHBhdHRlcm46IHN0cmluZyxcbiAgICAgIG5ld1BhdHRlcm46IHN0cmluZyxcbiAgICAgIGV4dGVuc2lvbjogc3RyaW5nLFxuICAgICAgcm91dGVQYXJ0aXRpb25OYW1lOiBzdHJpbmcsXG4gICAgICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICAgICkge1xuICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgIG9yaWdpbmFscGF0dGVybjogb2xkcGF0dGVybixcbiAgICB9O1xuICAgIGNvbnN0IFVSTCA9IEFQSS5UUkFOU0xBVElPTl9QQVRURVJOX0NVQ00ucmVwbGFjZSgnOmN1Y21JZCcsIGN1Y21JZCk7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZVxuICAgICAgLnB1dChVUkwsIHsgY2FsbGVkUGFydHlUcmFuc2Zvcm1hdGlvbk1hc2s6IGV4dGVuc2lvbiwgcGF0dGVybjogbmV3UGF0dGVybiwgcm91dGVQYXJ0aXRpb25OYW1lOiByb3V0ZVBhcnRpdGlvbk5hbWUsIGRlc2NyaXB0aW9uIH0sIHBhcmFtcyk7XG4gIH1cblxuICBwdWJsaWMgbGluZVVwZGF0ZWQobGluZTogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxMaW5lID0gSlNPTi5wYXJzZSh0aGlzLm9yaWdpbkRldmljZSkubGluZXNbaW5kZXhdO1xuICAgIHJldHVybiBvcmlnaW5hbExpbmUubnVtYmVyICE9PSBsaW5lLm51bWJlciB8fCBvcmlnaW5hbExpbmUuZXh0ZW5zaW9uICE9PSBsaW5lLmV4dGVuc2lvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRPcmlnaW5hbE51bWJlcihsaW5lOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGZvdW5kTGluZSA9IEpTT04ucGFyc2UodGhpcy5vcmlnaW5EZXZpY2UpLmxpbmVzLmZpbmQoKG9yaWdMaW5lOiBhbnkpID0+IG9yaWdMaW5lLmV4dGVuc2lvbiA9PT0gbGluZS5leHRlbnNpb24gfHwgb3JpZ0xpbmUubnVtYmVyID09PSBsaW5lLm51bWJlcik7XG4gICAgcmV0dXJuIGZvdW5kTGluZS5udW1iZXIgfHwgJyc7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVNhdmVVc2VyUmVzcG9uc2UocmVzcG9uc2VzOiBhbnkpIHtcbiAgICBpZiAoIXJlc3BvbnNlcz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAobGV0IGxlbiA9IHJlc3BvbnNlcy5sZW5ndGgsIGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKHJlc3BvbnNlc1tpXSAmJiByZXNwb25zZXNbaV0uY3VycmVudFVwZGF0ZWRVc2VyKSB7XG4gICAgICAgIC8vIHRoaXMuc2V0VXNlcihyZXNwb25zZXNbaV0uY3VycmVudFVwZGF0ZWRVc2VyLCBmYWxzZSwgdGhpcy51c2VyLnRva2VuKTtcbiAgICAgICAgdGhpcy51c2VyLmhhc01vZGlmaWVkQ2FjaGUgPSB0cnVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
394
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXItZGV2aWNlLW1hbmFnZS9zcmMvc2VydmljZXMvdXNlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUc5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFJL0MsTUFBTSxPQUFPLFdBQVc7SUFhdEIsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFJRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUlELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBSUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFJRCxJQUFJLFVB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QUFLLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUYsQ0FBQztJQUVNLGlCQUFpQixDQUFDLElBQVM7UUFDaEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3hKLE9BQU8sU0FBUyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVPLHNCQUFzQixDQUFDLFNBQWM7UUFDM0MsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUU7WUFDdEIsT0FBTztTQUNSO1FBQ0QsS0FBSyxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekQsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixFQUFFO2dCQUNuRCx5RUFBeUU7Z0JBQ3pFLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2dCQUNsQyxPQUFPO2FBQ1I7U0FDRjtJQUNILENBQUM7O3lHQTdiVSxXQUFXOzZHQUFYLFdBQVc7NEZBQVgsV0FBVztrQkFEdkIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBmb3JrSm9pbiwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEFQSSB9IGZyb20gJy4uL2FwcC5jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBEZXZpY2VQcm9maWxlIH0gZnJvbSAnLi4vY2xhc3Nlcy9kZXZpY2VQcm9maWxlJztcclxuaW1wb3J0IHsgRGV2aWNlIH0gZnJvbSAnLi8uLi9jbGFzc2VzL2RldmljZSc7XHJcbmltcG9ydCB7IExpbmVBc3NvY2lhdGlvbiB9IGZyb20gJy4vLi4vY2xhc3Nlcy9saW5lLWFzc29jaWF0aW9uJztcclxuaW1wb3J0IHsgTGluZUFzc29jaWF0aW9uSW50ZXJmYWNlIH0gZnJvbSAnLi8uLi9jbGFzc2VzL2xpbmUtYXNzb2NpYXRpb24taW50ZXJmYWNlJztcclxuaW1wb3J0IHsgU2ltcGxpZmllZFVzZXIgfSBmcm9tICcuLy4uL2NsYXNzZXMvc2ltcGxpZmllZC11c2VyJztcclxuaW1wb3J0IHsgQVBJU2VydmljZSB9IGZyb20gJy4vYXBpLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMaW5lU2VydmljZSB9IGZyb20gJy4vbGluZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU29ydGluZ1V0aWxzU2VydmljZSB9IGZyb20gJy4vc29ydGluZy11dGlscy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXRpbHNTZXJ2aWNlIH0gZnJvbSAnLi91dGlscy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuL3ZhbGlkYXRpb24uc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBVc2VyU2VydmljZSBpbXBsZW1lbnRzIE9uSW5pdHtcclxuICBzaXRlSWQ6IG51bWJlciA9IC0xO1xyXG4gIHVzZXJJZDogc3RyaW5nID0gJyc7XHJcbiAgdXNlcklkRXhpc3RQZW5kaW5nID0gZmFsc2U7XHJcbiAgaGFzRXhpc3RlZFVzZXJJZCA9IGZhbHNlO1xyXG4gIHVzZXIhOiBTaW1wbGlmaWVkVXNlcjtcclxuICBvcmlnaW5Vc2VyITogU2ltcGxpZmllZFVzZXI7XHJcbiAgb3JpZ2luRGV2aWNlITogYW55O1xyXG4gIG9uVXNlckxpbmVTYXZlZCQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgb25GZXRjaFVzZXJUb2tlbiQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcblxyXG4gIHByaXZhdGUgX3VzZXJUb2tlbjogc3RyaW5nID0gJyc7XHJcblxyXG4gIGdldCB1c2VyVG9rZW4oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdXNlclRva2VuO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXNlck5hbWU6IHN0cmluZyA9ICcnO1xyXG5cclxuICBnZXQgdXNlck5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl91c2VyTmFtZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VzZXJMYXN0TmFtZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIGdldCB1c2VyTGFzdE5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl91c2VyTGFzdE5hbWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jdWNtSWQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICBnZXQgY3VjbUlkKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VjbUlkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXNlckRldmljZTogRGV2aWNlUHJvZmlsZSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgZ2V0IHVzZXJEZXZpY2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdXNlckRldmljZTtcclxuICB9XHJcblxyXG4gIGdldCBsaW5lQXNzb2NpYXRpb24oKTogTGluZUFzc29jaWF0aW9uSW50ZXJmYWNlIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJEZXZpY2UgJiYgdGhpcy51c2VyRGV2aWNlLmxpbmVBc3NvY2lhdGlvbnMgJiYgdGhpcy51c2VyRGV2aWNlLmxpbmVBc3NvY2lhdGlvbnNbMF07XHJcbiAgfVxyXG5cclxuICBnZXQgb3JpZ2luTGluZUFzc29jaWF0aW9uKCk6IExpbmVBc3NvY2lhdGlvbiB8IExpbmVBc3NvY2lhdGlvbkludGVyZmFjZSB7XHJcbiAgICByZXR1cm4gdGhpcy5vcmlnaW5EZXZpY2UgJiYgSlNPTi5wYXJzZSh0aGlzLm9yaWdpbkRldmljZSkubGluZUFzc29jaWF0aW9uc1swXTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhcGlTZXJ2aWNlOiBBUElTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsaW5lU2VydmljZTogTGluZVNlcnZpY2VcclxuICApIHtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKHRoaXMuc2l0ZUlkKVxyXG4gIH1cclxuXHJcbiAgcmVzZXRMaW5lQXNzb2NpYXRpb24oZGV2aWNlSW5kZXg6IG51bWJlciwgbGluZUluZGV4OiBudW1iZXIsIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZSk6IHZvaWQge1xyXG4gICAgY29uc3Qgb3JpZ2luTGluZSA9IHRoaXMub3JpZ2luVXNlcj8uZGV2aWNlc1tkZXZpY2VJbmRleF0/LmxpbmVBc3NvY2lhdGlvbnNbbGluZUluZGV4XTtcclxuICAgIGlmICh0aGlzLnVzZXI/LmRldmljZXNbZGV2aWNlSW5kZXhdPy5saW5lQXNzb2NpYXRpb25zW2xpbmVJbmRleF0gJiYgb3JpZ2luTGluZSkge1xyXG4gICAgICB0aGlzLnVzZXIuZGV2aWNlc1tkZXZpY2VJbmRleF0ubGluZUFzc29jaWF0aW9uc1tsaW5lSW5kZXhdID0gbmV3IExpbmVBc3NvY2lhdGlvbihKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9yaWdpbkxpbmUuZ2V0RnVsbERhdGEoKSkpLCB2YWxpZGF0aW9uU2VydmljZSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc2V0RGV2aWNlKGN1cnJlbnREZXZpY2U6IERldmljZSwgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlKTogdm9pZCB7XHJcbiAgICBjb25zdCBvcmlnaW5EZXZpY2UgPSB0aGlzLm9yaWdpblVzZXIuZGV2aWNlcy5maW5kKGRldmljZSA9PiBkZXZpY2UubmFtZSA9PT0gY3VycmVudERldmljZS5uYW1lKTtcclxuICAgIGNvbnN0IGRldmljZUluZCA9IHRoaXMudXNlci5kZXZpY2VzLmZpbmRJbmRleChkZXZpY2UgPT4gZGV2aWNlLm5hbWUgPT09IGN1cnJlbnREZXZpY2UubmFtZSk7XHJcbiAgICBpZiAob3JpZ2luRGV2aWNlICYmIGRldmljZUluZCA+IC0xKSB7XHJcbiAgICAgIGNvbnN0IGxpbmVBc3NvY2lhdGlvbnMgPSB0aGlzLnVzZXIuZGV2aWNlc1tkZXZpY2VJbmRdLmxpbmVBc3NvY2lhdGlvbnM7XHJcbiAgICAgIHRoaXMudXNlci5kZXZpY2VzW2RldmljZUluZF0gPSBuZXcgRGV2aWNlKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3JpZ2luRGV2aWNlLmdldE5vTGluZXNGdWxsRGF0YSgpKSksIHZhbGlkYXRpb25TZXJ2aWNlKTtcclxuICAgICAgdGhpcy51c2VyLmRldmljZXNbZGV2aWNlSW5kXS5saW5lQXNzb2NpYXRpb25zID0gbGluZUFzc29jaWF0aW9ucztcclxuICAgICAgY29uc29sZS5sb2coJ2RldmljZSBhZnRlciByZXNldCA9ICcsIHRoaXMudXNlci5kZXZpY2VzW2RldmljZUluZF0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZldGNoVXNlclRva2VuKHNpdGVJZDogbnVtYmVyLCB1c2VySWQ6IHN0cmluZywgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLCBpc1NldE5ld1Rva2VuT25seT86IGJvb2xlYW4pOiBhbnkge1xyXG4gICAgLyppZiAodGhpcy5zaXRlSWQgPT09IHNpdGVJZCAmJiB0aGlzLnVzZXJJZCA9PT0gdXNlcklkICYmIHRoaXMudXNlcikge1xyXG4gICAgICByZXR1cm4gb2YodGhpcy51c2VyKTtcclxuICAgIH0qL1xyXG4gICAgdGhpcy5zaXRlSWQgPSBzaXRlSWQ7XHJcbiAgICB0aGlzLnVzZXJJZCA9IHVzZXJJZDtcclxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UuZmV0Y2goQVBJLlVTRVJfVE9LRU4ucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyh0aGlzLnNpdGVJZCkpLnJlcGxhY2UoJzp1c2VySWQnLCBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KHVzZXJJZCkpKSlcclxuICAgICAgLnBpcGUobWFwKChyZXN1bHQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHVzZXIgPSByZXN1bHQgJiYgT2JqZWN0LnZhbHVlcyhyZXN1bHQpWzBdO1xyXG4gICAgICAgIGNvbnN0IHVzZXJUb2tlbiA9IHJlc3VsdCAmJiBPYmplY3Qua2V5cyhyZXN1bHQpWzBdO1xyXG4gICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICBpZiAoIWlzU2V0TmV3VG9rZW5Pbmx5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U2ltcGxpZmllZFVzZXIodXNlciwgdmFsaWRhdGlvblNlcnZpY2UsIHVzZXJUb2tlbik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl91c2VyVG9rZW4gPSB1c2VyVG9rZW47XHJcbiAgICAgICAgICAgIC8vIHRoaXMub3JpZ2luVXNlci50b2tlbiA9IHVzZXIudG9rZW47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLm9uRmV0Y2hVc2VyVG9rZW4kLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH0pKVxyXG4gICAgLy8gLnBpcGUodGhpcy5oYW5kbGVFcnJvcihmYWxzZSwgdHJ1ZSkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZldGNoRElVc2VyRGV2aWNlKHNpdGVJZDogbnVtYmVyLCB1c2VySWQ6IHN0cmluZywgZGV2aWNlVHlwZTogc3RyaW5nLCBkZXZpY2VOYW1lPzogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNpdGVJZCA9IHNpdGVJZDtcclxuICAgIHRoaXMudXNlcklkID0gdXNlcklkO1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5mZXRjaChBUEkuVVNFUl9UT0tFTi5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHRoaXMuc2l0ZUlkKSkucmVwbGFjZSgnOnVzZXJJZCcsIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQodXNlcklkKSkpKVxyXG4gICAgICAucGlwZShzd2l0Y2hNYXAoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdXNlciA9IHJlc3VsdCAmJiBPYmplY3QudmFsdWVzKHJlc3VsdClbMF07XHJcbiAgICAgICAgY29uc3QgdXNlclRva2VuID0gcmVzdWx0ICYmIE9iamVjdC5rZXlzKHJlc3VsdClbMF07XHJcbiAgICAgICAgbGV0IGZvdW5kRGV2aWNlOiBhbnk7XHJcblxyXG4gICAgICAgIGlmICh1c2VyKSB7XHJcbiAgICAgICAgICB0aGlzLl91c2VyVG9rZW4gPSB1c2VyVG9rZW47XHJcbiAgICAgICAgICB0aGlzLl91c2VyTmFtZSA9IHVzZXIuZmlyc3ROYW1lO1xyXG4gICAgICAgICAgdGhpcy5fdXNlckxhc3ROYW1lID0gdXNlci5sYXN0TmFtZTtcclxuICAgICAgICAgIHRoaXMuX2N1Y21JZCA9IHVzZXIuY3VjbUlkO1xyXG4gICAgICAgICAgZm91bmREZXZpY2UgPSBkZXZpY2VOYW1lXHJcbiAgICAgICAgICAgID8gdXNlci5kZXZpY2VzLmZpbmQoKGRldmljZTogYW55KSA9PiBkZXZpY2UubmFtZSA9PT0gZGV2aWNlTmFtZSlcclxuICAgICAgICAgICAgOiB1c2VyLmRldmljZXMuZmluZCgoZGV2aWNlOiBhbnkpID0+IGRldmljZS5kZXZpY2VUeXBlID09PSBkZXZpY2VUeXBlKTtcclxuICAgICAgICAgIGlmKGZvdW5kRGV2aWNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3VzZXJEZXZpY2UgPSBuZXcgRGV2aWNlUHJvZmlsZSh7XHJcbiAgICAgICAgICAgICAgLi4uZm91bmREZXZpY2UsXHJcbiAgICAgICAgICAgICAgbW9kZWw6IGZvdW5kRGV2aWNlPy5kZXZpY2VUeXBlLFxyXG4gICAgICAgICAgICAgIG1hY0FkZHJlc3M6IHRoaXMuZ2V0TWFjQWRkcmVzcyhmb3VuZERldmljZS5uYW1lKSxcclxuICAgICAgICAgICAgICBsaW5lczogZm91bmREZXZpY2U/LmxpbmVBc3NvY2lhdGlvbnM/Lm1hcCgobGluZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3VuZExpbmUgPSB1c2VyPy5saW5lcz8uZmluZCgobDogYW55KSA9PiBsLnBraWQgPT09IGxpbmUubGluZVBraWQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgbmFtZTogYCR7dGhpcy5fdXNlck5hbWV9ICR7dGhpcy5fdXNlckxhc3ROYW1lfWAsXHJcbiAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbjogbGluZSAmJiBsaW5lLmRpcmVjdG9yeU51bWJlciAmJiBsaW5lLmRpcmVjdG9yeU51bWJlci5yb3V0ZVBhcnRpdGlvbk5hbWUgJiYgbGluZS5kaXJlY3RvcnlOdW1iZXIuZGlyZWN0b3J5TnVtYmVyIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICBudW1iZXI6IGZvdW5kTGluZSAhPT0gLTEgPyBmb3VuZExpbmUubWFwcGVkRGlkc1swXSA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogZm91bmRMaW5lICYmIGZvdW5kTGluZS5kaWRQYXR0ZXJucyAmJiBmb3VuZExpbmUuZGlkUGF0dGVybnNbMF0gPyBmb3VuZExpbmUuZGlkUGF0dGVybnNbMF0uZGVzY3JpcHRpb24gOiAnJyxcclxuICAgICAgICAgICAgICAgICAgcm91dGVQYXJ0aXRpb25OYW1lOiBsaW5lICYmIGxpbmUuZGlyZWN0b3J5TnVtYmVyLnJvdXRlUGFydGl0aW9uTmFtZSB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgcGtpZDogbGluZSAmJiBsaW5lLmxpbmVQa2lkIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICBpbmRleDogbGluZSAmJiBsaW5lLmluZGV4IHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGxpbmUgJiYgbGluZS5wb3NpdGlvbiB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgIHRleHRMYWJlbDogbGluZSAmJiBsaW5lLnRleHRMYWJlbCB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgZGlzcGxheUxhYmVsOiBsaW5lICYmIGxpbmUuZGlzcGxheUxhYmVsIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICBlMTY0TWFzazogbGluZSAmJiBsaW5lLmUxNjRNYXNrIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICBhbGVydGluZ05hbWU6IGxpbmUgJiYgbGluZS5hbGVydGluZ05hbWUgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgIGNhbGxlck51bWJlcjogbGluZSAmJiBsaW5lLmNhbGxlck51bWJlciB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgbG9nTWlzc2VkQ2FsbDogbGluZSAmJiBsaW5lLmxvZ01pc3NlZENhbGwgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgIGNhbGxJbmZvRGlzcGxheTogbGluZSAmJiBsaW5lLmNhbGxJbmZvRGlzcGxheSB8fCB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICBzb2Z0d2FyZVZlcnNpb246IGZvdW5kRGV2aWNlPy5maXJtd2FyZVZlcnNpb25cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vcmlnaW5EZXZpY2UgPSB0aGlzLl91c2VyRGV2aWNlID8gSlNPTi5zdHJpbmdpZnkodGhpcy5fdXNlckRldmljZS5nZXRTYXZhYmxlRGF0YSgpKSA6ICcnO1xyXG5cclxuICAgICAgICBpZiAoIWZvdW5kRGV2aWNlKSB7XHJcbiAgICAgICAgICByZXR1cm4gb2YodGhpcy5fdXNlckRldmljZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjb21tb25QaG9uZUNvbmZpZ05hbWUgPSB1c2VyPy5kZXZpY2VzPy5bMF0/LmNvbW1vblBob25lQ29uZmlnTmFtZSB8fCAnJztcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXREZXZpY2VFeHRyYU9wdGlvbnModGhpcy5zaXRlSWQsIGZvdW5kRGV2aWNlLm5hbWUsIGNvbW1vblBob25lQ29uZmlnTmFtZSlcclxuICAgICAgICAgIC5waXBlKG1hcCgoZXh0cmFPcHRpb25zOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3VzZXJEZXZpY2UpIHtcclxuICAgICAgICAgICAgICAodGhpcy5fdXNlckRldmljZSBhcyBhbnkpLmxvZ2dlZEludG9IdW50R3JvdXAgPSBleHRyYU9wdGlvbnM/LmxvZ2dlZEludG9IdW50R3JvdXA7XHJcbiAgICAgICAgICAgICAgKHRoaXMuX3VzZXJEZXZpY2UgYXMgYW55KS5yZW1vdGVEZXZpY2UgPSBleHRyYU9wdGlvbnM/LnJlbW90ZURldmljZTtcclxuICAgICAgICAgICAgICAodGhpcy5fdXNlckRldmljZSBhcyBhbnkpLmhvdGxpbmVEZXZpY2UgPSBleHRyYU9wdGlvbnM/LmhvdGxpbmVEZXZpY2U7XHJcbiAgICAgICAgICAgICAgKHRoaXMuX3VzZXJEZXZpY2UgYXMgYW55KS5pZ25vcmVQcmVzZW50YXRpb25JbmRpY2F0b3JzID0gZXh0cmFPcHRpb25zPy5pZ25vcmVQcmVzZW50YXRpb25JbmRpY2F0b3JzO1xyXG4gICAgICAgICAgICAgICh0aGlzLl91c2VyRGV2aWNlIGFzIGFueSkudXNlRGV2aWNlUG9vbENncG5JbmdyZXNzRE4gPSBleHRyYU9wdGlvbnM/LnVzZURldmljZVBvb2xDZ3BuSW5ncmVzc0ROO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91c2VyRGV2aWNlO1xyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICB9KSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXREZXZpY2VFeHRyYU9wdGlvbnMoc2l0ZUlkOiBudW1iZXIsIGRldmljZU5hbWU6IHN0cmluZywgY29tbW9uUGhvbmVDb25maWdOYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UuZmV0Y2goQVBJLkRFVklDRV9FWFRSQV9PUFRJT05TXHJcbiAgICAgIC5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHNpdGVJZCkpXHJcbiAgICAgIC5yZXBsYWNlKCc6ZGV2aWNlTmFtZScsIGRldmljZU5hbWUpXHJcbiAgICAgIC5yZXBsYWNlKCc6Y29tbW9uUGhvbmVDb25maWdOYW1lJywgZW5jb2RlVVJJQ29tcG9uZW50KGNvbW1vblBob25lQ29uZmlnTmFtZSkpKVxyXG4gICAgICAvLyAucGlwZSh0aGlzLmhhbmRsZUVycm9yKGZhbHNlLCB0cnVlKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1hY0FkZHJlc3MobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGNvbnN0IG1hY1JlZ2V4ID0gL15bQS1GYS1mMC05XXsxMn0kLztcclxuICAgIGxldCBtYWNBZGRyZXNzO1xyXG5cclxuICAgIGlmIChuYW1lLmxlbmd0aCA9PT0gMTIgJiYgbWFjUmVnZXgudGVzdChuYW1lKSkge1xyXG4gICAgICBtYWNBZGRyZXNzID0gbmFtZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBuYW1lLnNsaWNlKDMpO1xyXG4gICAgICBtYWNBZGRyZXNzID0gbWFjUmVnZXgudGVzdCh0cmltbWVkKSA/IHRyaW1tZWQgOiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1hY0FkZHJlc3M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmV0Y2hXZWJleFVzZXJEZXZpY2UoY3VzdG9tZXJJZDogc3RyaW5nLCB1c2VySWQ6IHN0cmluZywgZGV2aWNlVHlwZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gZm9ya0pvaW4oW1xyXG4gICAgICB0aGlzLmFwaVNlcnZpY2UuZmV0Y2goQVBJLldFQkVYX1VTRVJfVE9LRU4ucmVwbGFjZSgnOmN1c3RvbWVySWQnLCBjdXN0b21lcklkKS5yZXBsYWNlKCc6dXNlcklkJywgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudCh1c2VySWQpKSkpLFxyXG4gICAgICB0aGlzLmFwaVNlcnZpY2UuZmV0Y2goQVBJLldFQkVYX1VTRVJfREVWSUNFUy5yZXBsYWNlKCc6Y3VzdG9tZXJJZCcsIGN1c3RvbWVySWQpLnJlcGxhY2UoJzp1c2VySWQnLCBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KHVzZXJJZCkpKSlcclxuICAgIF0pXHJcbiAgICAgIC5waXBlKG1hcCgocmVzdWx0czogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5fdXNlck5hbWUgPSByZXN1bHRzWzBdLmZpcnN0TmFtZTtcclxuICAgICAgICB0aGlzLl91c2VyTGFzdE5hbWUgPSByZXN1bHRzWzBdLmxhc3ROYW1lO1xyXG4gICAgICAgIGlmKHJlc3VsdHNbMV0pIHtcclxuICAgICAgICAgIGNvbnN0IGZvdW5kRGV2aWNlID0gcmVzdWx0c1sxXS5kZXZpY2VzLmZpbmQoKGRldmljZTogYW55KSA9PiBkZXZpY2UubW9kZWwgPT09IGRldmljZVR5cGUpO1xyXG4gICAgICAgICAgdGhpcy5fdXNlckRldmljZSA9IG5ldyBEZXZpY2VQcm9maWxlKHtcclxuICAgICAgICAgICAgLi4uZm91bmREZXZpY2UsXHJcbiAgICAgICAgICAgIG1hY0FkZHJlc3M6IGZvdW5kRGV2aWNlLm1hYyxcclxuICAgICAgICAgICAgbWF4TGluZUNvdW50OiBmb3VuZERldmljZT8uZGV2aWNlTWVtYmVycz8ubWF4TGluZUNvdW50LFxyXG4gICAgICAgICAgICBsaW5lczogZm91bmREZXZpY2U/LmRldmljZU1lbWJlcnM/Lm1lbWJlcnM/Lm1hcCgobWVtYmVyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgbmFtZTogYCR7bWVtYmVyLmZpcnN0TmFtZX0gJHttZW1iZXIubGFzdE5hbWV9YCxcclxuICAgICAgICAgICAgICAgIGV4dGVuc2lvbjogbWVtYmVyLmV4dGVuc2lvblxyXG4gICAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fdXNlckRldmljZTtcclxuICAgICAgfSkpXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlVXNlckZpZWxkcyhib2R5OiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKCF0aGlzLnVzZXJJZCB8fCAhdGhpcy5zaXRlSWQgfHwgIXRoaXMudXNlcj8udG9rZW4pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5wb3N0KEFQSS5VUERBVEVfVVNFUl9GSUVMRFMucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyh0aGlzLnNpdGVJZCkpLnJlcGxhY2UoJzp0b2tlbicsIHRoaXMudXNlclRva2VuKSwgYm9keSlcclxuICAgICAgLy8gLnBpcGUodGhpcy5oYW5kbGVFcnJvcihmYWxzZSwgdHJ1ZSkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZldGNoVXNlckJ5SWQoaWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy51c2VySWRFeGlzdFBlbmRpbmcgPSB0cnVlO1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5mZXRjaChBUEkuVVNFUl9CWV9JRC5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHRoaXMuc2l0ZUlkKSkucmVwbGFjZSgnOnVzZXJJZCcsIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoaWQpKSkpXHJcbiAgICAgIC5waXBlKG1hcChyZXN1bHQgPT4ge1xyXG4gICAgICAgIHRoaXMudXNlcklkRXhpc3RQZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZldGNoTGVhblVzZXJDb252ZXJzYXRpb25CeUlkKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UuZmV0Y2goQVBJLkxFQU5fVVNFUl9DT05WRVJTQVRJT05fU1RBUlQucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyh0aGlzLnNpdGVJZCkpLnJlcGxhY2UoJzp1c2VySWQnLCBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGlkKSkpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmZXRjaExlYW5Vc2VyRGV2aWNlc0NvbnZlcnNhdGlvbkJ5SWQoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5mZXRjaChBUEkuTEVBTl9VU0VSX0RFVklDRVNfQ09OVkVSU0FUSU9OX1NUQVJULnJlcGxhY2UoJzpzaXRlSWQnLCBTdHJpbmcodGhpcy5zaXRlSWQpKS5yZXBsYWNlKCc6dXNlcklkJywgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChpZCkpKSk7XHJcbiAgfVxyXG4gIHB1YmxpYyBmZXRjaExlYW5Vc2VyTGluZXNDb252ZXJzYXRpb25CeUlkKGlkOiBzdHJpbmcsIGxlYW5Vc2VyRGV2aWNlc1Rva2VuOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UuZmV0Y2goQVBJLkxFQU5fVVNFUl9MSU5FU19DT05WRVJTQVRJT05fU1RBUlQucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyh0aGlzLnNpdGVJZCkpXHJcbiAgICAgIC5yZXBsYWNlKCc6dXNlcklkJywgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChpZCkpKS5yZXBsYWNlKCc6bGVhblVzZXJEZXZpY2VzVG9rZW4nLCBsZWFuVXNlckRldmljZXNUb2tlbikpO1xyXG4gIH1cclxuICBwdWJsaWMgZmV0Y2hMZWFuVXNlclNOUkNvbnZlcnNhdGlvbkJ5SWQoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5mZXRjaChBUEkuTEVBTl9VU0VSX1NOUl9DT05WRVJTQVRJT05fU1RBUlQucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyh0aGlzLnNpdGVJZCkpLnJlcGxhY2UoJzp1c2VySWQnLCBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGlkKSkpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwZXJzaXN0Q2FjaGVDaGFuZ2VzKCkge1xyXG4gICAgLypjb25zdCBwYXJhbXMgPSB7XHJcbiAgICAgIGV4Y2x1ZGVEZXZpY2VFeHRyYU9wdGlvbnM6IHRydWVcclxuICAgIH07Ki9cclxuICAgIHJldHVybiB0aGlzLnByb2Nlc3NVc2VyQ2hhbmdlc1RvQ2FjaGUoKVxyXG4gICAgICAucGlwZShtYXAoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5wb3N0KEFQSS5QRVJTSVNUX1VTRVJfQ0FDSEUucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyh0aGlzLnNpdGVJZCkpLnJlcGxhY2UoJzp0b2tlbicsIHRoaXMudXNlclRva2VuKSwge30sIHt9KVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcblxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC8vIC5waXBlKG1hcCgodXNlcikgPT4ge1xyXG4gICAgICAgICAgLy8gICAvLyB0aGlzLnNldFVzZXIodXNlciwgZmFsc2UsIHRoaXMudXNlci50b2tlbik7XHJcbiAgICAgICAgICAvLyAgIHRoaXMudXNlci5oYXNNb2RpZmllZENhY2hlID0gZmFsc2U7XHJcbiAgICAgICAgICAvLyB9KSlcclxuICAgICAgICAgIC8vIC5waXBlKHRoaXMuaGFuZGxlRXJyb3IodHJ1ZSwgdHJ1ZSkpO1xyXG4gICAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHJvY2Vzc1VzZXJDaGFuZ2VzVG9DYWNoZSgpOiBhbnkge1xyXG4gICAgY29uc3QgY2FsbHMgPSBbXTtcclxuICAgIGNvbnN0IGJvZHkgPSBVdGlsc1NlcnZpY2UuZGlmZih0aGlzLm9yaWdpblVzZXIuZ2V0VXNlckRldGFpbHNTYXZhYmxlRGF0YSgpLCB0aGlzLnVzZXIuZ2V0VXNlckRldGFpbHNTYXZhYmxlRGF0YSgpLCAndXNlcicpO1xyXG4gICAgaWYgKGJvZHk/Lmxlbmd0aCkge1xyXG4gICAgICBjYWxscy5wdXNoKHRoaXMudXBkYXRlVXNlckZpZWxkcyhib2R5KSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIWNhbGxzPy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIG9mKHRoaXMudXNlcik7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZvcmtKb2luKGNhbGxzKVxyXG4gICAgICAucGlwZShtYXAoKHJlc3BvbnNlczogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gQXBpVXNlclJlc3BvbnNlXHJcbiAgICAgICAgdGhpcy5oYW5kbGVTYXZlVXNlclJlc3BvbnNlKHJlc3BvbnNlcyk7XHJcbiAgICAgIH0pKVxyXG4gICAgLy8gLnBpcGUodGhpcy5oYW5kbGVFcnJvcihmYWxzZSwgdHJ1ZSkpO1xyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzYXZlTmV3TGluZShsaW5lOiBhbnkpOiBhbnkge1xyXG4gICAgdGhpcy5kZWxldGVMaW5lKHRoaXMuc2l0ZUlkLCBsaW5lLnBraWQsIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLnVzZXJUb2tlbikpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IFVSTCA9IEFQSS5QRVJTSVNUX1VTRVJfQ0FDSEUucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyh0aGlzLnNpdGVJZCkpLnJlcGxhY2UoJzp0b2tlbicsIHRoaXMudXNlclRva2VuKTtcclxuICAgICAgICB0aGlzLmFwaVNlcnZpY2UucG9zdChVUkwsIHt9LCApXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ydW5OZXdMaW5lQ3JlYXRpb24obGluZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcGVyc2lzdFVzZXJDYWNoZSgpOiBhbnkge1xyXG4gICAgY29uc3QgVVJMID0gQVBJLlBFUlNJU1RfVVNFUl9DQUNIRS5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHRoaXMuc2l0ZUlkKSkucmVwbGFjZSgnOnRva2VuJywgdGhpcy51c2VyVG9rZW4pO1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5wb3N0KFVSTCwge30sICk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcnVuTmV3TGluZUNyZWF0aW9uKGxpbmU6IGFueSk6IHZvaWQge1xyXG4gICAgLy8gQ1JFQVRFIE5FVyBMSU5FXHJcbiAgICBjb25zdCBuZXdMaW5lQm9keSA9IFNvcnRpbmdVdGlsc1NlcnZpY2UuZGlmZihcclxuICAgICAgdGhpcy5saW5lU2VydmljZS5nZW5lcmF0ZUxpbmVBc3NvY2lhdGlvbkZyb21MaW5lKG51bGwpLFxyXG4gICAgICB0aGlzLmxpbmVTZXJ2aWNlLmdlbmVyYXRlTGluZUFzc29jaWF0aW9uRnJvbUxpbmUobGluZSksXHJcbiAgICAgICdkZXZpY2UubGluZUFzc29jaWF0aW9ucycsIG51bGxcclxuICAgICk7XHJcbiAgICB0aGlzLmFzc29jaWF0ZUxpbmVUb1VzZXJEZXZpY2UoXHJcbiAgICAgIHRoaXMuc2l0ZUlkLFxyXG4gICAgICB0aGlzLnVzZXJEZXZpY2UgJiYgdGhpcy51c2VyRGV2aWNlLm5hbWUgfHwgJycsXHJcbiAgICAgIG5ld0xpbmVCb2R5LFxyXG4gICAgICBudWxsLFxyXG4gICAgICB0aGlzLmxpbmVBc3NvY2lhdGlvbj8uY2FsbGluZ1NlYXJjaFNwYWNlXHJcbiAgICApXHJcbiAgICAucGlwZShzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICBjb25zdCBVUkwgPSBBUEkuUEVSU0lTVF9VU0VSX0NBQ0hFLnJlcGxhY2UoJzpzaXRlSWQnLCBTdHJpbmcodGhpcy5zaXRlSWQpKS5yZXBsYWNlKCc6dG9rZW4nLCB0aGlzLnVzZXJUb2tlbik7XHJcbiAgICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UucG9zdChVUkwsIHt9LCApO1xyXG4gICAgfSkpXHJcbiAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZT8uY3VycmVudFVwZGF0ZWRVc2VyKSB7XHJcbiAgICAgICAgY29uc3QgbGluZVBrSWQgPSByZXNwb25zZS5jdXJyZW50VXBkYXRlZFVzZXIuZGV2aWNlc1swXT8ubGluZUFzc29jaWF0aW9uc1swXT8ubGluZVBraWQgfHwgcmVzcG9uc2UuY3VycmVudFVwZGF0ZWRVc2VyLmRldmljZXNbMF0/LmxpbmVBc3NvY2lhdGlvbnNbMF0/LmxpbmVMb2NhbElkO1xyXG4gICAgICAgIGZvcmtKb2luKFtcclxuICAgICAgICAgIHRoaXMudXBkYXRlTGluZUZpZWxkcyh0aGlzLnNpdGVJZCwgbGluZVBrSWQsIHRoaXMudXNlclRva2VuLCB0aGlzLmxpbmVBc3NvY2lhdGlvbj8uYWxlcnRpbmdOYW1lKSxcclxuICAgICAgICAgIHRoaXMudXBkYXRlRGV2aWNlRmllbGRzKHRoaXMuc2l0ZUlkLCB0aGlzLnVzZXJEZXZpY2UgJiYgdGhpcy51c2VyRGV2aWNlLm5hbWUgfHwgJycsIHRoaXMudXNlclRva2VuKVxyXG4gICAgICAgIF0pLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgb3JpZ2luYWxEZXZpY2VEYXRhID0gSlNPTi5wYXJzZSh0aGlzLm9yaWdpbkRldmljZSk7XHJcbiAgICAgICAgICBjb25zdCBvcmlnaW5hbERldmljZUxpbmUgPSBvcmlnaW5hbERldmljZURhdGEubGluZXMuZmluZCgob3JpZ0xpbmU6IGFueSkgPT4gb3JpZ0xpbmUucGtpZCA9PT0gbGluZS5wa2lkKTtcclxuICAgICAgICAgIGlmKG9yaWdpbmFsRGV2aWNlTGluZSkge1xyXG4gICAgICAgICAgICBvcmlnaW5hbERldmljZURhdGEuZXh0ZW5zaW9uID0gbGluZS5leHRlbnNpb247XHJcbiAgICAgICAgICAgIHRoaXMub3JpZ2luRGV2aWNlID0gSlNPTi5zdHJpbmdpZnkob3JpZ2luYWxEZXZpY2VEYXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub25Vc2VyTGluZVNhdmVkJC5uZXh0KHRydWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgLy8gLS0tLS1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBkZWxldGVMaW5lKHNpdGVJZDogbnVtYmVyLCBwa2lkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UuZGVsZXRlKEFQSS5ERUxFVEVfTElORS5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHNpdGVJZCkpLnJlcGxhY2UoJzpwa2lkJywgcGtpZCkucmVwbGFjZSgnOnRva2VuJywgZW5jb2RlVVJJQ29tcG9uZW50KHRva2VuKSksIHt9KVxyXG4gICAgICAvLyAucGlwZSh0aGlzLmhhbmRsZUVycm9yKHRydWUsIGZhbHNlKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGlzYXNzb2NpYXRlTGluZShzaXRlSWQ6IG51bWJlciwgbGluZVBraWQ6IHN0cmluZywgdG9rZW46IHN0cmluZywgZGV2aWNlTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLmRlbGV0ZShcclxuICAgICAgQVBJLkRJU0FTU09DSUFURV9MSU5FLnJlcGxhY2UoJzpzaXRlSWQnLCBTdHJpbmcoc2l0ZUlkKSlcclxuICAgICAgICAucmVwbGFjZSgnOmxpbmVQa2lkJywgbGluZVBraWQpXHJcbiAgICAgICAgLnJlcGxhY2UoJzpkZXZpY2VOYW1lJywgZGV2aWNlTmFtZSlcclxuICAgICAgICAucmVwbGFjZSgnOnRva2VuJywgZW5jb2RlVVJJQ29tcG9uZW50KHRva2VuKSksIHt9KVxyXG4gICAgICAvLyAucGlwZSh0aGlzLmhhbmRsZUVycm9yKHRydWUsIGZhbHNlKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlTGluZUZpZWxkcyhzaXRlSWQ6IG51bWJlciwgcGtpZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBhbGVydGluZ05hbWU6IGFueSkge1xyXG4gICAgY29uc3QgYm9keSA9IFsnbGluZS5kZXNjcmlwdGlvbj0nLCBgbGluZS5hbGVydGluZ05hbWU9JHthbGVydGluZ05hbWV9YF07XHJcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLnBvc3QoQVBJLlVQREFURV9MSU5FX0ZJRUxEUy5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHNpdGVJZCkpLnJlcGxhY2UoJzpwa2lkJywgZW5jb2RlVVJJQ29tcG9uZW50KHBraWQpKS5yZXBsYWNlKCc6dG9rZW4nLCBlbmNvZGVVUklDb21wb25lbnQodG9rZW4pKSwgYm9keSlcclxuICAgICAgLy8gLnBpcGUodGhpcy5oYW5kbGVFcnJvcih0cnVlLCBmYWxzZSkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZURldmljZUZpZWxkcyhzaXRlSWQ6IG51bWJlciwgZGV2aWNlTmFtZTogc3RyaW5nLCB0b2tlbjogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBib2R5ID0gWydkZXZpY2UuYXNzb2NpYXRlZEROcy4wPW51bGwnXTtcclxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UucG9zdChBUEkuVVBEQVRFX0RFVklDRV9GSUVMRFMucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyhzaXRlSWQpKS5yZXBsYWNlKCc6ZGV2aWNlTmFtZScsIGRldmljZU5hbWUpLnJlcGxhY2UoJzp0b2tlbicsIGVuY29kZVVSSUNvbXBvbmVudCh0b2tlbikpLCBib2R5KVxyXG4gICAgLy8gLnBpcGUodGhpcy5oYW5kbGVFcnJvcih0cnVlLCBmYWxzZSkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNoZWNrRGVzdGluYXRpb25OdW1iZXIoc2l0ZUlkOiBzdHJpbmcsIGRpcmVjdG9yeU51bWJlcjogc3RyaW5nLCByb3V0ZVBhcnRpdGlvbk5hbWU6IHN0cmluZykge1xyXG4gICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICBkbnR5cGU6ICdFWFRFTlNJT04nXHJcbiAgICB9O1xyXG4gICAgY29uc3QgYm9keSA9IHtcclxuICAgICAgZGlyZWN0b3J5TnVtYmVyOiBkaXJlY3RvcnlOdW1iZXIsXHJcbiAgICAgIHJvdXRlUGFydGl0aW9uTmFtZTogcm91dGVQYXJ0aXRpb25OYW1lXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5wb3N0KEFQSS5DSEVDS19ERVNUSU5BVElPTl9OVU1CRVIucmVwbGFjZSgnOnNpdGVJZCcsIHNpdGVJZCksIGJvZHksIHBhcmFtcyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXNzb2NpYXRlTGluZVRvVXNlckRldmljZShzaXRlSWQ6IG51bWJlciwgZGV2aWNlTmFtZTogc3RyaW5nLCBib2R5OiBhbnksIHBraWQ6IGFueSwgY3NzOiBhbnkpIHtcclxuICAgIGxldCBwYXJhbXMgPSB7fTtcclxuICAgIGlmIChwa2lkKSB7XHJcbiAgICAgIHBhcmFtcyA9IHtsaW5lUGtpZDogcGtpZH07XHJcbiAgICB9XHJcbiAgICBpZiAoY3NzKSB7XHJcbiAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgcGFyYW1zWydjc3MnXSA9IGNzcztcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UucG9zdChBUEkuQVNTT0NJQVRFX0xJTkUucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyhzaXRlSWQpKS5yZXBsYWNlKCc6ZGV2aWNlTmFtZScsIGRldmljZU5hbWUpXHJcbiAgICAgIC5yZXBsYWNlKCc6dG9rZW4nLCBlbmNvZGVVUklDb21wb25lbnQodGhpcy51c2VyVG9rZW4pKSwgYm9keSwgcGFyYW1zKVxyXG4gICAgICAvLyAucGlwZSh0aGlzLmhhbmRsZUVycm9yKHRydWUsIHRydWUpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYXNVbnNhdmVkQ2hhbmdlcygpIHtcclxuICAgIGlmICh0aGlzLl91c2VyRGV2aWNlICYmIHRoaXMub3JpZ2luRGV2aWNlKSB7XHJcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLl91c2VyRGV2aWNlLmdldFNhdmFibGVEYXRhKCkpICYmIHRoaXMub3JpZ2luRGV2aWNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFNpbXBsaWZpZWRVc2VyKHVzZXI6IGFueSwgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLCB1c2VyVG9rZW4/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMudXNlciA9IG5ldyBTaW1wbGlmaWVkVXNlcih1c2VyLCB2YWxpZGF0aW9uU2VydmljZSk7XHJcbiAgICBjb25zdCBjb3BpZWRVc2VyID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh1c2VyKSk7XHJcbiAgICB0aGlzLm9yaWdpblVzZXIgPSBuZXcgU2ltcGxpZmllZFVzZXIoY29waWVkVXNlciwgdmFsaWRhdGlvblNlcnZpY2UpO1xyXG4gICAgaWYgKCF0aGlzLnVzZXJUb2tlbiAmJiB1c2VyVG9rZW4pIHtcclxuICAgICAgdGhpcy5fdXNlclRva2VuID0gdXNlclRva2VuO1xyXG4gICAgICAvLyB0aGlzLm9yaWdpblVzZXIudG9rZW4gPSB1c2VyVG9rZW47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZWRpdFRyYW5zbGF0aW9uUGF0dGVybihcclxuICAgICAgY3VjbUlkOiBzdHJpbmcsXHJcbiAgICAgIG9sZHBhdHRlcm46IHN0cmluZyxcclxuICAgICAgbmV3UGF0dGVybjogc3RyaW5nLFxyXG4gICAgICBleHRlbnNpb246IHN0cmluZyxcclxuICAgICAgcm91dGVQYXJ0aXRpb25OYW1lOiBzdHJpbmcsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXHJcbiAgICApIHtcclxuICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgb3JpZ2luYWxwYXR0ZXJuOiBvbGRwYXR0ZXJuLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IFVSTCA9IEFQSS5UUkFOU0xBVElPTl9QQVRURVJOX0NVQ00ucmVwbGFjZSgnOmN1Y21JZCcsIGN1Y21JZCk7XHJcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlXHJcbiAgICAgIC5wdXQoVVJMLCB7IGNhbGxlZFBhcnR5VHJhbnNmb3JtYXRpb25NYXNrOiBleHRlbnNpb24sIHBhdHRlcm46IG5ld1BhdHRlcm4sIHJvdXRlUGFydGl0aW9uTmFtZTogcm91dGVQYXJ0aXRpb25OYW1lLCBkZXNjcmlwdGlvbiB9LCBwYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxpbmVVcGRhdGVkKGxpbmU6IGFueSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3Qgb3JpZ2luYWxMaW5lID0gSlNPTi5wYXJzZSh0aGlzLm9yaWdpbkRldmljZSkubGluZXNbaW5kZXhdO1xyXG4gICAgcmV0dXJuIG9yaWdpbmFsTGluZS5udW1iZXIgIT09IGxpbmUubnVtYmVyIHx8IG9yaWdpbmFsTGluZS5leHRlbnNpb24gIT09IGxpbmUuZXh0ZW5zaW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldE9yaWdpbmFsTnVtYmVyKGxpbmU6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmb3VuZExpbmUgPSBKU09OLnBhcnNlKHRoaXMub3JpZ2luRGV2aWNlKS5saW5lcy5maW5kKChvcmlnTGluZTogYW55KSA9PiBvcmlnTGluZS5leHRlbnNpb24gPT09IGxpbmUuZXh0ZW5zaW9uIHx8IG9yaWdMaW5lLm51bWJlciA9PT0gbGluZS5udW1iZXIpO1xyXG4gICAgcmV0dXJuIGZvdW5kTGluZS5udW1iZXIgfHwgJyc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZVNhdmVVc2VyUmVzcG9uc2UocmVzcG9uc2VzOiBhbnkpIHtcclxuICAgIGlmICghcmVzcG9uc2VzPy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgbGVuID0gcmVzcG9uc2VzLmxlbmd0aCwgaSA9IGxlbiAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgIGlmIChyZXNwb25zZXNbaV0gJiYgcmVzcG9uc2VzW2ldLmN1cnJlbnRVcGRhdGVkVXNlcikge1xyXG4gICAgICAgIC8vIHRoaXMuc2V0VXNlcihyZXNwb25zZXNbaV0uY3VycmVudFVwZGF0ZWRVc2VyLCBmYWxzZSwgdGhpcy51c2VyLnRva2VuKTtcclxuICAgICAgICB0aGlzLnVzZXIuaGFzTW9kaWZpZWRDYWNoZSA9IHRydWU7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -84,4 +84,4 @@ UtilsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version
84
84
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UtilsService, decorators: [{
85
85
  type: Injectable
86
86
  }] });
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWRldmljZS1tYW5hZ2Uvc3JjL3NlcnZpY2VzL3V0aWxzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHM0MsTUFBTSxPQUFPLFlBQVk7SUFFdkIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFjLEVBQUUsS0FBYSxFQUFFLFVBQWdCLEVBQUUsS0FBYztRQUNsRixJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLE9BQU8sQ0FBQztTQUNoQjtRQUNELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM3QixPQUFPLENBQ0wsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pGLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNsRSxDQUFDLFVBQVUsSUFBSSxVQUFVLEtBQUssTUFBTSxDQUFDLENBQ3hDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFBQSxDQUFDO0lBRUYsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEtBQVMsRUFBRSxNQUFjO1FBQ3RELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxL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QyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQzNILE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUM5RSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDekQ7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQVU7UUFDN0IsSUFBSSxLQUFLLEVBQUU7WUFDVCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsUUFBUSxPQUFPLEtBQUssRUFBRTtZQUNwQixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxLQUFLLENBQUM7WUFDZixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxFQUFFLENBQUM7WUFDWjtnQkFDRSxPQUFPLElBQUksQ0FBQztTQUNmO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBUyxFQUFFLElBQVM7UUFDakMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsQ0FBQzs7MEdBbEZVLFlBQVk7OEdBQVosWUFBWTs0RkFBWixZQUFZO2tCQUR4QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVXRpbHNTZXJ2aWNlIHtcblxuICBzdGF0aWMgZmlsdGVyT3B0aW9ucyhvcHRpb25zOiBhbnlbXSwgcXVlcnk6IHN0cmluZywgc2hvd25WYWx1ZT86IGFueSwgZmllbGQ/OiBzdHJpbmcpICB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGlmICghcXVlcnkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGZpZWxkID8gU3RyaW5nKG9wdGlvbltmaWVsZF0pLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoU3RyaW5nKHF1ZXJ5KS50b0xvd2VyQ2FzZSgpKSA6XG4gICAgICAgICAgU3RyaW5nKG9wdGlvbikudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhTdHJpbmcocXVlcnkpLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICAgICAgKHNob3duVmFsdWUgJiYgc2hvd25WYWx1ZSA9PT0gb3B0aW9uKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfTtcblxuICBzdGF0aWMgc29ydFNvcnRBcnJheUJ5UHJvcGVydHkoYXJyYXk6IFtdLCBzb3J0Qnk6IHN0cmluZykge1xuICAgIGlmICghYXJyYXkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgaWYgKCFhW3NvcnRCeV0gJiYgIWJbc29ydEJ5XSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIGlmIChhW3NvcnRCeV0gJiYgIWJbc29ydEJ5XSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICAgIGlmICghYVtzb3J0QnldICYmIGJbc29ydEJ5XSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBjb25zdCBwb3NpdGlvbkEgPSBhW3NvcnRCeV07XG4gICAgICBjb25zdCBwb3NpdGlvbkIgPSBiW3NvcnRCeV07XG4gICAgICByZXR1cm4gKHBvc2l0aW9uQSA8IHBvc2l0aW9uQikgPyAtMSA6IChwb3NpdGlvbkEgPiBwb3NpdGlvbkIpID8gMSA6IDA7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGlmZihvcmlnT2JqZWN0OiBhbnksIHVwZGF0ZWRPYmo6IGFueSwgcGF0aDogc3RyaW5nLCBrZXlzVG9JZ25vcmU/OiBzdHJpbmdbXSkge1xuICAgIGxldCByZXN1bHQ6IGFueSA9IFtdO1xuICAgIGlmIChPYmplY3QuaXMob3JpZ09iamVjdCwgdXBkYXRlZE9iaikpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICghdXBkYXRlZE9iaiB8fCB0eXBlb2YgdXBkYXRlZE9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB1cGRhdGVkT2JqO1xuICAgIH1cbiAgICBjb25zdCBjb25jYXQgPSBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLk9iamVjdC5rZXlzKG9yaWdPYmplY3QgfHwge30pLCAuLi5PYmplY3Qua2V5cyh1cGRhdGVkT2JqIHx8IHt9KV0pKTtcbiAgICBjb25zdCBmaWx0ZXIgPSBrZXlzVG9JZ25vcmUgPyBjb25jYXQuZmlsdGVyKGtleSA9PiAha2V5c1RvSWdub3JlLmluY2x1ZGVzKGtleSkpIDogY29uY2F0O1xuICAgIGZpbHRlclxuICAgICAgLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB1cGRhdGVkT2JqW2tleV0gPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcmlnT2JqZWN0W2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgaWYgKFV0aWxzU2VydmljZS5kaWZmZXJzKHVwZGF0ZWRPYmpba2V5XSwgb3JpZ09iamVjdFtrZXldKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3UGF0aCA9IGAke3BhdGh9JHtwYXRoID8gJy4nIDogJyd9JHtrZXl9YDtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IFV0aWxzU2VydmljZS5kaWZmKG9yaWdPYmplY3Rba2V5XSwgdXBkYXRlZE9ialtrZXldLCBuZXdQYXRoLCBrZXlzVG9JZ25vcmUpO1xuICAgICAgICAgICAgaWYgKHZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IFsuLi5yZXN1bHQsIC4uLnZhbHVlc107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHVwZGF0ZWRPYmogJiYgIW9yaWdPYmplY3QgfHwgdXBkYXRlZE9ialtrZXldICE9PSBvcmlnT2JqZWN0W2tleV0gJiYgIU9iamVjdC5pcyhvcmlnT2JqZWN0W2tleV0sIHVwZGF0ZWRPYmpba2V5XSkpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHVwZGF0ZWRPYmogPyBVdGlsc1NlcnZpY2UuZm9ybWF0SWZFbXB0eSh1cGRhdGVkT2JqW2tleV0pIDogbnVsbDtcbiAgICAgICAgICByZXN1bHQucHVzaChgJHtwYXRofSR7cGF0aCA/ICcuJyA6ICcnfSR7a2V5fT0ke3ZhbHVlfWApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIGZvcm1hdElmRW1wdHkodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBkaWZmZXJzKG9iajE6IGFueSwgb2JqMjogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iajEpICE9PSBKU09OLnN0cmluZ2lmeShvYmoyKTtcbiAgfVxufVxuIl19
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWRldmljZS1tYW5hZ2Uvc3JjL3NlcnZpY2VzL3V0aWxzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHM0MsTUFBTSxPQUFPLFlBQVk7SUFFdkIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFjLEVBQUUsS0FBYSxFQUFFLFVBQWdCLEVBQUUsS0FBYztRQUNsRixJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLE9BQU8sQ0FBQztTQUNoQjtRQUNELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM3QixPQUFPLENBQ0wsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pGLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNsRSxDQUFDLFVBQVUsSUFBSSxVQUFVLEtBQUssTUFBTSxDQUFDLENBQ3hDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFBQSxDQUFDO0lBRUYsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEtBQVMsRUFBRSxNQUFjO1FBQ3RELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxL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QyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQzNILE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUM5RSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDekQ7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQVU7UUFDN0IsSUFBSSxLQUFLLEVBQUU7WUFDVCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsUUFBUSxPQUFPLEtBQUssRUFBRTtZQUNwQixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxLQUFLLENBQUM7WUFDZixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxFQUFFLENBQUM7WUFDWjtnQkFDRSxPQUFPLElBQUksQ0FBQztTQUNmO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBUyxFQUFFLElBQVM7UUFDakMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsQ0FBQzs7MEdBbEZVLFlBQVk7OEdBQVosWUFBWTs0RkFBWixZQUFZO2tCQUR4QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVXRpbHNTZXJ2aWNlIHtcclxuXHJcbiAgc3RhdGljIGZpbHRlck9wdGlvbnMob3B0aW9uczogYW55W10sIHF1ZXJ5OiBzdHJpbmcsIHNob3duVmFsdWU/OiBhbnksIGZpZWxkPzogc3RyaW5nKSAge1xyXG4gICAgaWYgKCFvcHRpb25zKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIGlmICghcXVlcnkpIHtcclxuICAgICAgcmV0dXJuIG9wdGlvbnM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBmaWVsZCA/IFN0cmluZyhvcHRpb25bZmllbGRdKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFN0cmluZyhxdWVyeSkudG9Mb3dlckNhc2UoKSkgOlxyXG4gICAgICAgICAgU3RyaW5nKG9wdGlvbikudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhTdHJpbmcocXVlcnkpLnRvTG93ZXJDYXNlKCkpIHx8XHJcbiAgICAgICAgICAoc2hvd25WYWx1ZSAmJiBzaG93blZhbHVlID09PSBvcHRpb24pXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICBzdGF0aWMgc29ydFNvcnRBcnJheUJ5UHJvcGVydHkoYXJyYXk6IFtdLCBzb3J0Qnk6IHN0cmluZykge1xyXG4gICAgaWYgKCFhcnJheSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBhcnJheS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGlmICghYVtzb3J0QnldICYmICFiW3NvcnRCeV0pIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYVtzb3J0QnldICYmICFiW3NvcnRCeV0pIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWFbc29ydEJ5XSAmJiBiW3NvcnRCeV0pIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcG9zaXRpb25BID0gYVtzb3J0QnldO1xyXG4gICAgICBjb25zdCBwb3NpdGlvbkIgPSBiW3NvcnRCeV07XHJcbiAgICAgIHJldHVybiAocG9zaXRpb25BIDwgcG9zaXRpb25CKSA/IC0xIDogKHBvc2l0aW9uQSA+IHBvc2l0aW9uQikgPyAxIDogMDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRpZmYob3JpZ09iamVjdDogYW55LCB1cGRhdGVkT2JqOiBhbnksIHBhdGg6IHN0cmluZywga2V5c1RvSWdub3JlPzogc3RyaW5nW10pIHtcclxuICAgIGxldCByZXN1bHQ6IGFueSA9IFtdO1xyXG4gICAgaWYgKE9iamVjdC5pcyhvcmlnT2JqZWN0LCB1cGRhdGVkT2JqKSkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgaWYgKCF1cGRhdGVkT2JqIHx8IHR5cGVvZiB1cGRhdGVkT2JqICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICByZXR1cm4gdXBkYXRlZE9iajtcclxuICAgIH1cclxuICAgIGNvbnN0IGNvbmNhdCA9IEFycmF5LmZyb20obmV3IFNldChbLi4uT2JqZWN0LmtleXMob3JpZ09iamVjdCB8fCB7fSksIC4uLk9iamVjdC5rZXlzKHVwZGF0ZWRPYmogfHwge30pXSkpO1xyXG4gICAgY29uc3QgZmlsdGVyID0ga2V5c1RvSWdub3JlID8gY29uY2F0LmZpbHRlcihrZXkgPT4gIWtleXNUb0lnbm9yZS5pbmNsdWRlcyhrZXkpKSA6IGNvbmNhdDtcclxuICAgIGZpbHRlclxyXG4gICAgICAuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdXBkYXRlZE9ialtrZXldID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb3JpZ09iamVjdFtrZXldID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgaWYgKFV0aWxzU2VydmljZS5kaWZmZXJzKHVwZGF0ZWRPYmpba2V5XSwgb3JpZ09iamVjdFtrZXldKSkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdQYXRoID0gYCR7cGF0aH0ke3BhdGggPyAnLicgOiAnJ30ke2tleX1gO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBVdGlsc1NlcnZpY2UuZGlmZihvcmlnT2JqZWN0W2tleV0sIHVwZGF0ZWRPYmpba2V5XSwgbmV3UGF0aCwga2V5c1RvSWdub3JlKTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgcmVzdWx0ID0gWy4uLnJlc3VsdCwgLi4udmFsdWVzXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodXBkYXRlZE9iaiAmJiAhb3JpZ09iamVjdCB8fCB1cGRhdGVkT2JqW2tleV0gIT09IG9yaWdPYmplY3Rba2V5XSAmJiAhT2JqZWN0LmlzKG9yaWdPYmplY3Rba2V5XSwgdXBkYXRlZE9ialtrZXldKSkge1xyXG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB1cGRhdGVkT2JqID8gVXRpbHNTZXJ2aWNlLmZvcm1hdElmRW1wdHkodXBkYXRlZE9ialtrZXldKSA6IG51bGw7XHJcbiAgICAgICAgICByZXN1bHQucHVzaChgJHtwYXRofSR7cGF0aCA/ICcuJyA6ICcnfSR7a2V5fT0ke3ZhbHVlfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZvcm1hdElmRW1wdHkodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XHJcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgY2FzZSAnc3RyaW5nJzpcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZGlmZmVycyhvYmoxOiBhbnksIG9iajI6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iajEpICE9PSBKU09OLnN0cmluZ2lmeShvYmoyKTtcclxuICB9XHJcbn1cclxuIl19