@c8y/ngx-components 1021.38.1 → 1021.49.4

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 (529) hide show
  1. package/api/services.d.ts +1 -1
  2. package/api/services.d.ts.map +1 -1
  3. package/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.d.ts.map +1 -1
  4. package/connectivity/abstract-connectivity-tab.factory.d.ts +1 -1
  5. package/context-dashboard/add-dashboard.component.d.ts.map +1 -1
  6. package/context-dashboard/context-dashboard.model.d.ts +4 -2
  7. package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
  8. package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
  9. package/context-dashboard/dashboard-manager/dashboard-manager.model.d.ts +1 -0
  10. package/context-dashboard/dashboard-manager/dashboard-manager.model.d.ts.map +1 -1
  11. package/context-dashboard/dashboard-manager/dashboard-manager.service.d.ts +0 -1
  12. package/context-dashboard/dashboard-manager/dashboard-manager.service.d.ts.map +1 -1
  13. package/context-dashboard/dashboard-manager/type-dashboards-list/type-dashboards-list.component.d.ts.map +1 -1
  14. package/context-dashboard/new-dashboard.guard.d.ts +1 -1
  15. package/context-dashboard/new-dashboard.guard.d.ts.map +1 -1
  16. package/core/action/action.component.d.ts +2 -1
  17. package/core/action/action.component.d.ts.map +1 -1
  18. package/core/action/action.model.d.ts +3 -2
  19. package/core/action/action.model.d.ts.map +1 -1
  20. package/core/breadcrumb/breadcrumb-item.component.d.ts +2 -1
  21. package/core/breadcrumb/breadcrumb-item.component.d.ts.map +1 -1
  22. package/core/breadcrumb/breadcrumb.model.d.ts +2 -1
  23. package/core/breadcrumb/breadcrumb.model.d.ts.map +1 -1
  24. package/core/common/ApplicationOptions.d.ts +1 -0
  25. package/core/common/ApplicationOptions.d.ts.map +1 -1
  26. package/core/common/empty-state/empty-state.component.d.ts +2 -1
  27. package/core/common/empty-state/empty-state.component.d.ts.map +1 -1
  28. package/core/common/get-group-icon.pipe.d.ts +2 -1
  29. package/core/common/get-group-icon.pipe.d.ts.map +1 -1
  30. package/core/common/group.service.d.ts +22 -7
  31. package/core/common/group.service.d.ts.map +1 -1
  32. package/core/common/icon.directive.d.ts +5 -5
  33. package/core/common/icon.directive.d.ts.map +1 -1
  34. package/core/common/service-registry.model.d.ts +2 -1
  35. package/core/common/service-registry.model.d.ts.map +1 -1
  36. package/core/data-grid/data-grid.model.d.ts +2 -1
  37. package/core/data-grid/data-grid.model.d.ts.map +1 -1
  38. package/core/docs/docs.models.d.ts +2 -1
  39. package/core/docs/docs.models.d.ts.map +1 -1
  40. package/core/docs/help-and-support-outlet/help-and-support-outlet.component.d.ts +5 -1
  41. package/core/docs/help-and-support-outlet/help-and-support-outlet.component.d.ts.map +1 -1
  42. package/core/docs/legal-notices-outlet/legal-notices-outlet.component.d.ts +5 -1
  43. package/core/docs/legal-notices-outlet/legal-notices-outlet.component.d.ts.map +1 -1
  44. package/core/docs/support-outlet/support-outlet.component.d.ts +5 -1
  45. package/core/docs/support-outlet/support-outlet.component.d.ts.map +1 -1
  46. package/core/forms/filter-input.component.d.ts +8 -3
  47. package/core/forms/filter-input.component.d.ts.map +1 -1
  48. package/core/i18n/translate.service.d.ts.map +1 -1
  49. package/core/list-group/list-item-action.component.d.ts +2 -1
  50. package/core/list-group/list-item-action.component.d.ts.map +1 -1
  51. package/core/list-group/list-item-icon.component.d.ts +2 -1
  52. package/core/list-group/list-item-icon.component.d.ts.map +1 -1
  53. package/core/login/login.service.d.ts.map +1 -1
  54. package/core/navigator/navigator-icon.component.d.ts +1 -1
  55. package/core/navigator/navigator-icon.component.d.ts.map +1 -1
  56. package/core/navigator/navigator-node-data.d.ts +2 -1
  57. package/core/navigator/navigator-node-data.d.ts.map +1 -1
  58. package/core/navigator/navigator-node.component.d.ts.map +1 -1
  59. package/core/navigator/navigator-node.d.ts +2 -1
  60. package/core/navigator/navigator-node.d.ts.map +1 -1
  61. package/core/plugins/plugins.model.d.ts +7 -2
  62. package/core/plugins/plugins.model.d.ts.map +1 -1
  63. package/core/plugins/plugins.service.d.ts.map +1 -1
  64. package/core/properties-list/properties-list.component.d.ts +2 -1
  65. package/core/properties-list/properties-list.component.d.ts.map +1 -1
  66. package/core/provider-configuration/model/dynamic-provider-config.model.d.ts +2 -2
  67. package/core/provider-configuration/model/dynamic-provider-config.model.d.ts.map +1 -1
  68. package/core/router/context-route.service.d.ts.map +1 -1
  69. package/core/router/router.model.d.ts +1 -1
  70. package/core/router/router.model.d.ts.map +1 -1
  71. package/core/router/scoped-context-route.service.d.ts.map +1 -1
  72. package/core/search/search.model.d.ts +2 -1
  73. package/core/search/search.model.d.ts.map +1 -1
  74. package/core/select/select-keyboard.service.d.ts +4 -0
  75. package/core/select/select-keyboard.service.d.ts.map +1 -1
  76. package/core/select/select.component.d.ts +14 -3
  77. package/core/select/select.component.d.ts.map +1 -1
  78. package/core/select-modal/select-modal.component.d.ts +2 -1
  79. package/core/select-modal/select-modal.component.d.ts.map +1 -1
  80. package/core/shared/core.model.d.ts +5 -1
  81. package/core/shared/core.model.d.ts.map +1 -1
  82. package/core/tabs/conditional-tabs-outlet.component.d.ts.map +1 -1
  83. package/core/tabs/tab.component.d.ts +3 -2
  84. package/core/tabs/tab.component.d.ts.map +1 -1
  85. package/core/tabs/tab.model.d.ts +10 -5
  86. package/core/tabs/tab.model.d.ts.map +1 -1
  87. package/core/tabs/tabs-outlet.component.d.ts +7 -4
  88. package/core/tabs/tabs-outlet.component.d.ts.map +1 -1
  89. package/core/user/user-menu-item.component.d.ts +2 -1
  90. package/core/user/user-menu-item.component.d.ts.map +1 -1
  91. package/core/user/user.model.d.ts +2 -1
  92. package/core/user/user.model.d.ts.map +1 -1
  93. package/core/wizard/wizard.model.d.ts +4 -3
  94. package/core/wizard/wizard.model.d.ts.map +1 -1
  95. package/data-grid-columns/asset-type/asset-type.cell-renderer.component.d.ts.map +1 -1
  96. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts +15 -46
  97. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.d.ts.map +1 -1
  98. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.d.ts +3 -0
  99. package/datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.d.ts.map +1 -1
  100. package/datapoint-selector/datapoint-selection.model.d.ts +6 -7
  101. package/datapoint-selector/datapoint-selection.model.d.ts.map +1 -1
  102. package/datapoints-export-selector/datapoints-export-selector.model.d.ts +2 -1
  103. package/datapoints-export-selector/datapoints-export-selector.model.d.ts.map +1 -1
  104. package/device-grid/columns/icon.cell-renderer.component.d.ts +14 -0
  105. package/device-grid/columns/icon.cell-renderer.component.d.ts.map +1 -0
  106. package/device-grid/columns/index.d.ts +1 -0
  107. package/device-grid/columns/index.d.ts.map +1 -1
  108. package/device-grid/device-grid.component.d.ts.map +1 -1
  109. package/device-grid/device-grid.service.d.ts +0 -2
  110. package/device-grid/device-grid.service.d.ts.map +1 -1
  111. package/device-provisioned-certificates/c8y-ngx-components-device-provisioned-certificates.d.ts.map +1 -0
  112. package/device-provisioned-certificates/device-provisioned-certificates.guard.d.ts +11 -0
  113. package/device-provisioned-certificates/device-provisioned-certificates.guard.d.ts.map +1 -0
  114. package/device-provisioned-certificates/device-provisioned-certificates.module.d.ts +13 -0
  115. package/device-provisioned-certificates/device-provisioned-certificates.module.d.ts.map +1 -0
  116. package/device-provisioned-certificates/device-provisioned-certificates.service.d.ts +13 -0
  117. package/device-provisioned-certificates/device-provisioned-certificates.service.d.ts.map +1 -0
  118. package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts +57 -0
  119. package/device-provisioned-certificates/device-tab-provisioned-certificates.component.d.ts.map +1 -0
  120. package/device-provisioned-certificates/index.d.ts +2 -0
  121. package/device-provisioned-certificates/index.d.ts.map +1 -0
  122. package/ecosystem/application-plugins/application-plugins.component.d.ts +4 -0
  123. package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
  124. package/ecosystem/application-plugins/application-plugins.module.d.ts +2 -2
  125. package/ecosystem/application-plugins/application-plugins.module.d.ts.map +1 -1
  126. package/ecosystem/application-plugins/index.d.ts +1 -0
  127. package/ecosystem/application-plugins/index.d.ts.map +1 -1
  128. package/ecosystem/application-plugins/install-plugin.component.d.ts +9 -11
  129. package/ecosystem/application-plugins/install-plugin.component.d.ts.map +1 -1
  130. package/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.d.ts +12 -0
  131. package/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.d.ts.map +1 -0
  132. package/ecosystem/application-plugins/plugin-list-item.component.d.ts +8 -3
  133. package/ecosystem/application-plugins/plugin-list-item.component.d.ts.map +1 -1
  134. package/ecosystem/application-plugins/plugin-list.component.d.ts.map +1 -1
  135. package/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.d.ts.map +1 -1
  136. package/ecosystem/applications/application-list/application-list.component.d.ts +2 -2
  137. package/ecosystem/applications/application-list/application-list.component.d.ts.map +1 -1
  138. package/ecosystem/applications/install-from-package/install-from-package.component.d.ts.map +1 -1
  139. package/ecosystem/archived-confirm/archived-confirm-modal.component.d.ts +11 -0
  140. package/ecosystem/archived-confirm/archived-confirm-modal.component.d.ts.map +1 -0
  141. package/ecosystem/archived-confirm/archived-confirm.module.d.ts +10 -0
  142. package/ecosystem/archived-confirm/archived-confirm.module.d.ts.map +1 -0
  143. package/ecosystem/archived-confirm/c8y-ngx-components-ecosystem-archived-confirm.d.ts.map +1 -0
  144. package/ecosystem/archived-confirm/index.d.ts +3 -0
  145. package/ecosystem/archived-confirm/index.d.ts.map +1 -0
  146. package/ecosystem/ecosystem.module.d.ts +2 -1
  147. package/ecosystem/ecosystem.module.d.ts.map +1 -1
  148. package/ecosystem/features/feature-list.component.d.ts +2 -2
  149. package/ecosystem/features/feature-list.component.d.ts.map +1 -1
  150. package/ecosystem/microservices/microservice-list.component.d.ts +2 -2
  151. package/ecosystem/microservices/microservice-list.component.d.ts.map +1 -1
  152. package/ecosystem/packages/deploy-application/deploy-application.component.d.ts.map +1 -1
  153. package/ecosystem/packages/package-details/package-details.component.d.ts +7 -2
  154. package/ecosystem/packages/package-details/package-details.component.d.ts.map +1 -1
  155. package/ecosystem/packages/package-list/packages-list.component.d.ts +2 -2
  156. package/ecosystem/packages/package-list/packages-list.component.d.ts.map +1 -1
  157. package/ecosystem/shared/add-application.component.d.ts +2 -1
  158. package/ecosystem/shared/add-application.component.d.ts.map +1 -1
  159. package/ecosystem/shared/application-card.component.d.ts +4 -0
  160. package/ecosystem/shared/application-card.component.d.ts.map +1 -1
  161. package/ecosystem/shared/archived-filter/archived-filter.component.d.ts +12 -0
  162. package/ecosystem/shared/archived-filter/archived-filter.component.d.ts.map +1 -0
  163. package/ecosystem/shared/ecosystem.constants.d.ts +4 -0
  164. package/ecosystem/shared/ecosystem.constants.d.ts.map +1 -1
  165. package/ecosystem/shared/ecosystem.model.d.ts +5 -1
  166. package/ecosystem/shared/ecosystem.model.d.ts.map +1 -1
  167. package/ecosystem/shared/ecosystem.service.d.ts +7 -0
  168. package/ecosystem/shared/ecosystem.service.d.ts.map +1 -1
  169. package/ecosystem/shared/index.d.ts +1 -0
  170. package/ecosystem/shared/index.d.ts.map +1 -1
  171. package/ecosystem/shared/list-filters/list-filters.component.d.ts +14 -4
  172. package/ecosystem/shared/list-filters/list-filters.component.d.ts.map +1 -1
  173. package/ecosystem/shared/list-filters/list-filters.model.d.ts +8 -2
  174. package/ecosystem/shared/list-filters/list-filters.model.d.ts.map +1 -1
  175. package/ecosystem/shared/shared-ecosystem.module.d.ts +9 -8
  176. package/ecosystem/shared/shared-ecosystem.module.d.ts.map +1 -1
  177. package/ecosystem/shared/translate-package-label.pipe.d.ts +1 -1
  178. package/ecosystem/shared/translate-package-label.pipe.d.ts.map +1 -1
  179. package/esm2022/alarms/alarm-info.component.mjs +1 -1
  180. package/esm2022/api/services.mjs +2 -2
  181. package/esm2022/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.mjs +10 -5
  182. package/esm2022/auth-configuration/sso-configuration/template-parts/user-data-mapping.component.mjs +4 -4
  183. package/esm2022/branding/shared/lazy/branding-form/branding-form.component.mjs +3 -3
  184. package/esm2022/context-dashboard/add-dashboard.component.mjs +4 -2
  185. package/esm2022/context-dashboard/context-dashboard.model.mjs +3 -2
  186. package/esm2022/context-dashboard/context-dashboard.service.mjs +2 -2
  187. package/esm2022/context-dashboard/dashboard-detail.component.mjs +5 -3
  188. package/esm2022/context-dashboard/dashboard-manager/dashboard-manager.model.mjs +1 -1
  189. package/esm2022/context-dashboard/dashboard-manager/dashboard-manager.service.mjs +5 -15
  190. package/esm2022/context-dashboard/dashboard-manager/type-dashboards-list/type-dashboards-list.component.mjs +2 -2
  191. package/esm2022/context-dashboard/new-dashboard.guard.mjs +1 -1
  192. package/esm2022/core/action/action.component.mjs +1 -1
  193. package/esm2022/core/action/action.model.mjs +1 -1
  194. package/esm2022/core/bootstrap/bootstrap.component.mjs +1 -1
  195. package/esm2022/core/breadcrumb/breadcrumb-item.component.mjs +1 -1
  196. package/esm2022/core/breadcrumb/breadcrumb.model.mjs +1 -1
  197. package/esm2022/core/common/ApplicationOptions.mjs +1 -1
  198. package/esm2022/core/common/empty-state/empty-state.component.mjs +1 -1
  199. package/esm2022/core/common/get-group-icon.pipe.mjs +1 -1
  200. package/esm2022/core/common/group.service.mjs +2 -2
  201. package/esm2022/core/common/icon.directive.mjs +1 -1
  202. package/esm2022/core/common/service-registry.model.mjs +1 -1
  203. package/esm2022/core/data-grid/data-grid.model.mjs +1 -1
  204. package/esm2022/core/docs/docs.models.mjs +1 -1
  205. package/esm2022/core/docs/support-outlet/support-outlet.component.mjs +3 -3
  206. package/esm2022/core/forms/filter-input.component.mjs +22 -7
  207. package/esm2022/core/i18n/translate.service.mjs +7 -5
  208. package/esm2022/core/list-group/list-item-action.component.mjs +1 -1
  209. package/esm2022/core/list-group/list-item-icon.component.mjs +1 -1
  210. package/esm2022/core/login/credentials.component.mjs +2 -2
  211. package/esm2022/core/login/login.service.mjs +18 -7
  212. package/esm2022/core/navigator/navigator-node-data.mjs +1 -1
  213. package/esm2022/core/navigator/navigator-node.component.mjs +11 -2
  214. package/esm2022/core/navigator/navigator-node.mjs +1 -1
  215. package/esm2022/core/plugins/plugins.model.mjs +5 -1
  216. package/esm2022/core/plugins/plugins.service.mjs +6 -2
  217. package/esm2022/core/properties-list/properties-list.component.mjs +1 -1
  218. package/esm2022/core/provider-configuration/model/dynamic-provider-config.model.mjs +1 -1
  219. package/esm2022/core/router/context-route.service.mjs +4 -2
  220. package/esm2022/core/router/router.model.mjs +1 -1
  221. package/esm2022/core/router/scoped-context-route.service.mjs +4 -2
  222. package/esm2022/core/search/search.model.mjs +1 -1
  223. package/esm2022/core/select/select-keyboard.service.mjs +7 -3
  224. package/esm2022/core/select/select.component.mjs +36 -8
  225. package/esm2022/core/select-modal/select-modal.component.mjs +2 -2
  226. package/esm2022/core/shared/core.model.mjs +6 -2
  227. package/esm2022/core/tabs/conditional-tabs-outlet.component.mjs +4 -2
  228. package/esm2022/core/tabs/tab.component.mjs +1 -1
  229. package/esm2022/core/tabs/tab.model.mjs +1 -1
  230. package/esm2022/core/tabs/tabs-outlet.component.mjs +41 -12
  231. package/esm2022/core/user/user-menu-item.component.mjs +1 -1
  232. package/esm2022/core/user/user.model.mjs +1 -1
  233. package/esm2022/core/wizard/wizard.model.mjs +1 -1
  234. package/esm2022/data-grid-columns/asset-type/asset-type.cell-renderer.component.mjs +1 -1
  235. package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.mjs +47 -22
  236. package/esm2022/datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.mjs +1 -1
  237. package/esm2022/datapoint-selector/datapoint-selection.model.mjs +1 -1
  238. package/esm2022/datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.mjs +3 -3
  239. package/esm2022/datapoints-export-selector/datapoints-export-selector.model.mjs +1 -1
  240. package/esm2022/device-grid/columns/icon.cell-renderer.component.mjs +42 -0
  241. package/esm2022/device-grid/columns/index.mjs +2 -1
  242. package/esm2022/device-grid/device-grid.component.mjs +3 -3
  243. package/esm2022/device-grid/device-grid.service.mjs +7 -25
  244. package/esm2022/device-provisioned-certificates/c8y-ngx-components-device-provisioned-certificates.mjs +5 -0
  245. package/esm2022/device-provisioned-certificates/device-provisioned-certificates.guard.mjs +28 -0
  246. package/esm2022/device-provisioned-certificates/device-provisioned-certificates.module.mjs +51 -0
  247. package/esm2022/device-provisioned-certificates/device-provisioned-certificates.service.mjs +31 -0
  248. package/esm2022/device-provisioned-certificates/device-tab-provisioned-certificates.component.mjs +76 -0
  249. package/esm2022/device-provisioned-certificates/index.mjs +2 -0
  250. package/esm2022/ecosystem/application-plugins/application-plugins.component.mjs +41 -39
  251. package/esm2022/ecosystem/application-plugins/application-plugins.module.mjs +8 -6
  252. package/esm2022/ecosystem/application-plugins/apps-to-update-remotes-select.component.mjs +1 -1
  253. package/esm2022/ecosystem/application-plugins/index.mjs +2 -1
  254. package/esm2022/ecosystem/application-plugins/install-plugin.component.mjs +18 -21
  255. package/esm2022/ecosystem/application-plugins/only-latest-filter/only-latest-filter.component.mjs +26 -0
  256. package/esm2022/ecosystem/application-plugins/plugin-list-item.component.mjs +14 -6
  257. package/esm2022/ecosystem/application-plugins/plugin-list.component.mjs +14 -12
  258. package/esm2022/ecosystem/application-plugins/update-plugin-of-app/update-plugin-of-app.component.mjs +7 -1
  259. package/esm2022/ecosystem/applications/application-list/application-list.component.mjs +1 -1
  260. package/esm2022/ecosystem/applications/install-from-package/install-from-package.component.mjs +6 -1
  261. package/esm2022/ecosystem/archived-confirm/archived-confirm-modal.component.mjs +22 -0
  262. package/esm2022/ecosystem/archived-confirm/archived-confirm.module.mjs +32 -0
  263. package/esm2022/ecosystem/archived-confirm/c8y-ngx-components-ecosystem-archived-confirm.mjs +5 -0
  264. package/esm2022/ecosystem/archived-confirm/index.mjs +3 -0
  265. package/esm2022/ecosystem/ecosystem.module.mjs +20 -16
  266. package/esm2022/ecosystem/features/feature-list.component.mjs +1 -1
  267. package/esm2022/ecosystem/microservices/microservice-list.component.mjs +1 -1
  268. package/esm2022/ecosystem/packages/deploy-application/deploy-application.component.mjs +6 -1
  269. package/esm2022/ecosystem/packages/package-details/package-details.component.mjs +13 -8
  270. package/esm2022/ecosystem/packages/package-list/packages-list.component.mjs +4 -4
  271. package/esm2022/ecosystem/shared/add-application.component.mjs +1 -1
  272. package/esm2022/ecosystem/shared/application-card.component.mjs +3 -3
  273. package/esm2022/ecosystem/shared/archived-filter/archived-filter.component.mjs +27 -0
  274. package/esm2022/ecosystem/shared/ecosystem.constants.mjs +5 -1
  275. package/esm2022/ecosystem/shared/ecosystem.model.mjs +7 -3
  276. package/esm2022/ecosystem/shared/ecosystem.service.mjs +26 -1
  277. package/esm2022/ecosystem/shared/index.mjs +2 -1
  278. package/esm2022/ecosystem/shared/list-filters/list-filters.component.mjs +75 -13
  279. package/esm2022/ecosystem/shared/list-filters/list-filters.model.mjs +1 -1
  280. package/esm2022/ecosystem/shared/shared-ecosystem.module.mjs +10 -5
  281. package/esm2022/ecosystem/shared/translate-package-label.pipe.mjs +3 -3
  282. package/esm2022/files-repository/files-repository.component.mjs +2 -2
  283. package/esm2022/files-repository/files-repository.service.mjs +5 -16
  284. package/esm2022/icon-selector/icon-selector.component.mjs +1 -1
  285. package/esm2022/icon-selector/icons/index.mjs +1 -1
  286. package/esm2022/operations/shared/status-option.model.mjs +1 -1
  287. package/esm2022/protocol-lwm2m/components/configuration/lwm2m-configuration.component.mjs +2 -2
  288. package/esm2022/protocol-opcua/opcua-auto-apply-settings.component.mjs +1 -1
  289. package/esm2022/register-device/bulk/bulk-device-registration-modal.component.mjs +17 -9
  290. package/esm2022/register-device/general/general-device-registration-button.component.mjs +3 -3
  291. package/esm2022/register-device/general/general-device-registration.component.mjs +109 -33
  292. package/esm2022/remote-access/configurations/c8y-ngx-components-remote-access-configurations.mjs +5 -0
  293. package/esm2022/remote-access/configurations/index.mjs +16 -0
  294. package/esm2022/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.mjs +218 -0
  295. package/esm2022/remote-access/configurations/remote-access-configuration-list/remote-access-connect-button/remote-access-connect-button.component.mjs +60 -0
  296. package/esm2022/remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.mjs +36 -0
  297. package/esm2022/remote-access/data/c8y-ngx-components-remote-access-data.mjs +5 -0
  298. package/esm2022/remote-access/data/index.mjs +3 -0
  299. package/esm2022/remote-access/data/remote-access-protocol-provider.mjs +2 -0
  300. package/esm2022/remote-access/data/remote-access.service.mjs +200 -0
  301. package/esm2022/remote-access/passthrough/c8y-ngx-components-remote-access-passthrough.mjs +5 -0
  302. package/esm2022/remote-access/passthrough/index.mjs +36 -0
  303. package/esm2022/remote-access/shared/c8y-ngx-components-remote-access-shared.mjs +5 -0
  304. package/esm2022/remote-access/shared/index.mjs +3 -0
  305. package/esm2022/remote-access/shared/remote-access-basic-endpoint-modal/remote-access-basic-endpoint-modal.component.mjs +49 -0
  306. package/esm2022/remote-access/shared/ssh-key-input/ssh-key-input.component.mjs +87 -0
  307. package/esm2022/remote-access/ssh/c8y-ngx-components-remote-access-ssh.mjs +5 -0
  308. package/esm2022/remote-access/ssh/index.mjs +73 -0
  309. package/esm2022/remote-access/ssh/remote-access-ssh-endpoint-modal/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs +5 -0
  310. package/esm2022/remote-access/ssh/remote-access-ssh-endpoint-modal/index.mjs +2 -0
  311. package/esm2022/remote-access/ssh/remote-access-ssh-endpoint-modal/remote-access-ssh-endpoint-modal.component.mjs +104 -0
  312. package/esm2022/remote-access/telnet/c8y-ngx-components-remote-access-telnet.mjs +5 -0
  313. package/esm2022/remote-access/telnet/index.mjs +43 -0
  314. package/esm2022/remote-access/terminal-viewer/c8y-ngx-components-remote-access-terminal-viewer.mjs +5 -0
  315. package/esm2022/remote-access/terminal-viewer/index.mjs +2 -0
  316. package/esm2022/remote-access/terminal-viewer/shell-adapter.mjs +36 -0
  317. package/esm2022/remote-access/terminal-viewer/telnet-negotiator.mjs +96 -0
  318. package/esm2022/remote-access/terminal-viewer/terminal-viewer.component.mjs +101 -0
  319. package/esm2022/remote-access/vnc/c8y-ngx-components-remote-access-vnc.mjs +5 -0
  320. package/esm2022/remote-access/vnc/index.mjs +73 -0
  321. package/esm2022/remote-access/vnc/remote-access-vnc-endpoint-modal/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs +5 -0
  322. package/esm2022/remote-access/vnc/remote-access-vnc-endpoint-modal/index.mjs +2 -0
  323. package/esm2022/remote-access/vnc/remote-access-vnc-endpoint-modal/remote-access-vnc-endpoint-modal.component.mjs +59 -0
  324. package/esm2022/remote-access/vnc/vnc-viewer/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +5 -0
  325. package/esm2022/remote-access/vnc/vnc-viewer/index.mjs +2 -0
  326. package/esm2022/remote-access/vnc/vnc-viewer/vnc-credentials-prompt/vnc-credentials-prompt.component.mjs +57 -0
  327. package/esm2022/remote-access/vnc/vnc-viewer/vnc-viewer.component.mjs +158 -0
  328. package/esm2022/replace-device/replace-device-wizard/replace-device-wizard.model.mjs +1 -1
  329. package/esm2022/report-dashboard/report-dashboard-list.component.mjs +4 -3
  330. package/esm2022/repository/configuration/device-tab/device-configuration-list.component.mjs +1 -1
  331. package/esm2022/repository/shared/repository.model.mjs +1 -1
  332. package/esm2022/repository/shared/repository.service.mjs +3 -3
  333. package/esm2022/services/status-options/status-options.model.mjs +1 -1
  334. package/esm2022/sub-assets/group-info.component.mjs +1 -1
  335. package/esm2022/translation-editor/data/translation-store.service.mjs +4 -3
  336. package/esm2022/trusted-certificates/list/trusted-certificate-list.component.mjs +35 -9
  337. package/esm2022/upgrade/bridge.service.mjs +16 -2
  338. package/esm2022/widgets/implementations/alarms/severity-icon.pipe.mjs +1 -1
  339. package/esm2022/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.mjs +3 -2
  340. package/esm2022/widgets/implementations/kpi/kpi-widget.model.mjs +1 -1
  341. package/fesm2022/c8y-ngx-components-alarms.mjs +1 -1
  342. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  343. package/fesm2022/c8y-ngx-components-api.mjs +3 -2
  344. package/fesm2022/c8y-ngx-components-api.mjs.map +1 -1
  345. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +12 -7
  346. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  347. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +2 -2
  348. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  349. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +15 -20
  350. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  351. package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs.map +1 -1
  352. package/fesm2022/c8y-ngx-components-data-grid-columns.mjs.map +1 -1
  353. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +48 -23
  354. package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
  355. package/fesm2022/c8y-ngx-components-datapoints-export-selector.mjs.map +1 -1
  356. package/fesm2022/c8y-ngx-components-device-grid.mjs +48 -28
  357. package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
  358. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs +174 -0
  359. package/fesm2022/c8y-ngx-components-device-provisioned-certificates.mjs.map +1 -0
  360. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +125 -105
  361. package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  362. package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs +57 -0
  363. package/fesm2022/c8y-ngx-components-ecosystem-archived-confirm.mjs.map +1 -0
  364. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +147 -31
  365. package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
  366. package/fesm2022/c8y-ngx-components-ecosystem.mjs +1452 -1414
  367. package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
  368. package/fesm2022/c8y-ngx-components-files-repository.mjs +5 -16
  369. package/fesm2022/c8y-ngx-components-files-repository.mjs.map +1 -1
  370. package/fesm2022/c8y-ngx-components-icon-selector-icons.mjs.map +1 -1
  371. package/fesm2022/c8y-ngx-components-icon-selector.mjs.map +1 -1
  372. package/fesm2022/c8y-ngx-components-protocol-lwm2m-components-configuration.mjs +1 -1
  373. package/fesm2022/c8y-ngx-components-protocol-lwm2m-components-configuration.mjs.map +1 -1
  374. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +1 -1
  375. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
  376. package/fesm2022/c8y-ngx-components-register-device.mjs +269 -188
  377. package/fesm2022/c8y-ngx-components-register-device.mjs.map +1 -1
  378. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs +314 -0
  379. package/fesm2022/c8y-ngx-components-remote-access-configurations.mjs.map +1 -0
  380. package/fesm2022/c8y-ngx-components-remote-access-data.mjs +206 -0
  381. package/fesm2022/c8y-ngx-components-remote-access-data.mjs.map +1 -0
  382. package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs +42 -0
  383. package/fesm2022/c8y-ngx-components-remote-access-passthrough.mjs.map +1 -0
  384. package/fesm2022/c8y-ngx-components-remote-access-shared.mjs +138 -0
  385. package/fesm2022/c8y-ngx-components-remote-access-shared.mjs.map +1 -0
  386. package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs +111 -0
  387. package/fesm2022/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.mjs.map +1 -0
  388. package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs +79 -0
  389. package/fesm2022/c8y-ngx-components-remote-access-ssh.mjs.map +1 -0
  390. package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs +50 -0
  391. package/fesm2022/c8y-ngx-components-remote-access-telnet.mjs.map +1 -0
  392. package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs +235 -0
  393. package/fesm2022/c8y-ngx-components-remote-access-terminal-viewer.mjs.map +1 -0
  394. package/fesm2022/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs +66 -0
  395. package/fesm2022/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.mjs.map +1 -0
  396. package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs +211 -0
  397. package/fesm2022/c8y-ngx-components-remote-access-vnc-vnc-viewer.mjs.map +1 -0
  398. package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs +79 -0
  399. package/fesm2022/c8y-ngx-components-remote-access-vnc.mjs.map +1 -0
  400. package/fesm2022/c8y-ngx-components-replace-device-replace-device-wizard.mjs.map +1 -1
  401. package/fesm2022/c8y-ngx-components-report-dashboard.mjs +3 -2
  402. package/fesm2022/c8y-ngx-components-report-dashboard.mjs.map +1 -1
  403. package/fesm2022/c8y-ngx-components-repository-configuration.mjs +1 -1
  404. package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
  405. package/fesm2022/c8y-ngx-components-repository-shared.mjs +2 -2
  406. package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
  407. package/fesm2022/c8y-ngx-components-services.mjs.map +1 -1
  408. package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
  409. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs +3 -2
  410. package/fesm2022/c8y-ngx-components-translation-editor-data.mjs.map +1 -1
  411. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +43 -17
  412. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  413. package/fesm2022/c8y-ngx-components-upgrade.mjs +16 -2
  414. package/fesm2022/c8y-ngx-components-upgrade.mjs.map +1 -1
  415. package/fesm2022/c8y-ngx-components-widgets-implementations-alarms.mjs.map +1 -1
  416. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +2 -1
  417. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  418. package/fesm2022/c8y-ngx-components.mjs +157 -42
  419. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  420. package/files-repository/files-repository.component.d.ts.map +1 -1
  421. package/files-repository/files-repository.service.d.ts +0 -2
  422. package/files-repository/files-repository.service.d.ts.map +1 -1
  423. package/icon-selector/icon-selector.component.d.ts +3 -2
  424. package/icon-selector/icon-selector.component.d.ts.map +1 -1
  425. package/icon-selector/icons/index.d.ts +1 -0
  426. package/icon-selector/icons/index.d.ts.map +1 -1
  427. package/locales/de.po +157 -5
  428. package/locales/es.po +157 -5
  429. package/locales/fr.po +157 -5
  430. package/locales/ja_JP.po +156 -5
  431. package/locales/ko.po +156 -5
  432. package/locales/locales.pot +156 -4
  433. package/locales/nl.po +157 -5
  434. package/locales/pl.po +157 -5
  435. package/locales/pt_BR.po +157 -5
  436. package/locales/zh_CN.po +156 -5
  437. package/locales/zh_TW.po +156 -5
  438. package/operations/shared/status-option.model.d.ts +2 -1
  439. package/operations/shared/status-option.model.d.ts.map +1 -1
  440. package/package.json +1 -1
  441. package/register-device/bulk/bulk-device-registration-modal.component.d.ts +6 -2
  442. package/register-device/bulk/bulk-device-registration-modal.component.d.ts.map +1 -1
  443. package/register-device/general/general-device-registration-button.component.d.ts +1 -1
  444. package/register-device/general/general-device-registration-button.component.d.ts.map +1 -1
  445. package/register-device/general/general-device-registration.component.d.ts +21 -7
  446. package/register-device/general/general-device-registration.component.d.ts.map +1 -1
  447. package/remote-access/configurations/c8y-ngx-components-remote-access-configurations.d.ts.map +1 -0
  448. package/remote-access/configurations/index.d.ts +3 -0
  449. package/remote-access/configurations/index.d.ts.map +1 -0
  450. package/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.d.ts +34 -0
  451. package/remote-access/configurations/remote-access-configuration-list/remote-access-configuration-list.component.d.ts.map +1 -0
  452. package/remote-access/configurations/remote-access-configuration-list/remote-access-connect-button/remote-access-connect-button.component.d.ts +17 -0
  453. package/remote-access/configurations/remote-access-configuration-list/remote-access-connect-button/remote-access-connect-button.component.d.ts.map +1 -0
  454. package/remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.d.ts +18 -0
  455. package/remote-access/configurations/remote-access-pick-protocol-modal/remote-access-pick-protocol-modal.component.d.ts.map +1 -0
  456. package/remote-access/data/c8y-ngx-components-remote-access-data.d.ts.map +1 -0
  457. package/remote-access/data/index.d.ts +3 -0
  458. package/remote-access/data/index.d.ts.map +1 -0
  459. package/remote-access/data/remote-access-protocol-provider.d.ts +21 -0
  460. package/remote-access/data/remote-access-protocol-provider.d.ts.map +1 -0
  461. package/remote-access/data/remote-access.service.d.ts +94 -0
  462. package/remote-access/data/remote-access.service.d.ts.map +1 -0
  463. package/remote-access/passthrough/c8y-ngx-components-remote-access-passthrough.d.ts.map +1 -0
  464. package/remote-access/passthrough/index.d.ts +17 -0
  465. package/remote-access/passthrough/index.d.ts.map +1 -0
  466. package/remote-access/shared/c8y-ngx-components-remote-access-shared.d.ts.map +1 -0
  467. package/remote-access/shared/index.d.ts +3 -0
  468. package/remote-access/shared/index.d.ts.map +1 -0
  469. package/remote-access/shared/remote-access-basic-endpoint-modal/remote-access-basic-endpoint-modal.component.d.ts +37 -0
  470. package/remote-access/shared/remote-access-basic-endpoint-modal/remote-access-basic-endpoint-modal.component.d.ts.map +1 -0
  471. package/remote-access/shared/ssh-key-input/ssh-key-input.component.d.ts +38 -0
  472. package/remote-access/shared/ssh-key-input/ssh-key-input.component.d.ts.map +1 -0
  473. package/remote-access/ssh/c8y-ngx-components-remote-access-ssh.d.ts.map +1 -0
  474. package/remote-access/ssh/index.d.ts +22 -0
  475. package/remote-access/ssh/index.d.ts.map +1 -0
  476. package/remote-access/ssh/remote-access-ssh-endpoint-modal/c8y-ngx-components-remote-access-ssh-remote-access-ssh-endpoint-modal.d.ts.map +1 -0
  477. package/remote-access/ssh/remote-access-ssh-endpoint-modal/index.d.ts +2 -0
  478. package/remote-access/ssh/remote-access-ssh-endpoint-modal/index.d.ts.map +1 -0
  479. package/remote-access/ssh/remote-access-ssh-endpoint-modal/remote-access-ssh-endpoint-modal.component.d.ts +64 -0
  480. package/remote-access/ssh/remote-access-ssh-endpoint-modal/remote-access-ssh-endpoint-modal.component.d.ts.map +1 -0
  481. package/remote-access/telnet/c8y-ngx-components-remote-access-telnet.d.ts.map +1 -0
  482. package/remote-access/telnet/index.d.ts +17 -0
  483. package/remote-access/telnet/index.d.ts.map +1 -0
  484. package/remote-access/terminal-viewer/c8y-ngx-components-remote-access-terminal-viewer.d.ts.map +1 -0
  485. package/remote-access/terminal-viewer/index.d.ts +2 -0
  486. package/remote-access/terminal-viewer/index.d.ts.map +1 -0
  487. package/remote-access/terminal-viewer/shell-adapter.d.ts +14 -0
  488. package/remote-access/terminal-viewer/shell-adapter.d.ts.map +1 -0
  489. package/remote-access/terminal-viewer/telnet-negotiator.d.ts +13 -0
  490. package/remote-access/terminal-viewer/telnet-negotiator.d.ts.map +1 -0
  491. package/remote-access/terminal-viewer/terminal-viewer.component.d.ts +25 -0
  492. package/remote-access/terminal-viewer/terminal-viewer.component.d.ts.map +1 -0
  493. package/remote-access/vnc/c8y-ngx-components-remote-access-vnc.d.ts.map +1 -0
  494. package/remote-access/vnc/index.d.ts +22 -0
  495. package/remote-access/vnc/index.d.ts.map +1 -0
  496. package/remote-access/vnc/remote-access-vnc-endpoint-modal/c8y-ngx-components-remote-access-vnc-remote-access-vnc-endpoint-modal.d.ts.map +1 -0
  497. package/remote-access/vnc/remote-access-vnc-endpoint-modal/index.d.ts +2 -0
  498. package/remote-access/vnc/remote-access-vnc-endpoint-modal/index.d.ts.map +1 -0
  499. package/remote-access/vnc/remote-access-vnc-endpoint-modal/remote-access-vnc-endpoint-modal.component.d.ts +46 -0
  500. package/remote-access/vnc/remote-access-vnc-endpoint-modal/remote-access-vnc-endpoint-modal.component.d.ts.map +1 -0
  501. package/remote-access/vnc/vnc-viewer/c8y-ngx-components-remote-access-vnc-vnc-viewer.d.ts.map +1 -0
  502. package/remote-access/vnc/vnc-viewer/index.d.ts +2 -0
  503. package/remote-access/vnc/vnc-viewer/index.d.ts.map +1 -0
  504. package/remote-access/vnc/vnc-viewer/vnc-credentials-prompt/vnc-credentials-prompt.component.d.ts +32 -0
  505. package/remote-access/vnc/vnc-viewer/vnc-credentials-prompt/vnc-credentials-prompt.component.d.ts.map +1 -0
  506. package/remote-access/vnc/vnc-viewer/vnc-viewer.component.d.ts +37 -0
  507. package/remote-access/vnc/vnc-viewer/vnc-viewer.component.d.ts.map +1 -0
  508. package/replace-device/replace-device-wizard/replace-device-wizard.model.d.ts +2 -1
  509. package/replace-device/replace-device-wizard/replace-device-wizard.model.d.ts.map +1 -1
  510. package/report-dashboard/report-dashboard-list.component.d.ts +29 -0
  511. package/report-dashboard/report-dashboard-list.component.d.ts.map +1 -1
  512. package/repository/shared/repository.model.d.ts +2 -1
  513. package/repository/shared/repository.model.d.ts.map +1 -1
  514. package/services/status-options/status-options.model.d.ts +2 -1
  515. package/services/status-options/status-options.model.d.ts.map +1 -1
  516. package/sub-assets/group-info.component.d.ts +2 -1
  517. package/sub-assets/group-info.component.d.ts.map +1 -1
  518. package/translation-editor/data/translation-store.service.d.ts.map +1 -1
  519. package/trusted-certificates/list/trusted-certificate-list.component.d.ts +7 -2
  520. package/trusted-certificates/list/trusted-certificate-list.component.d.ts.map +1 -1
  521. package/upgrade/bridge.service.d.ts +5 -0
  522. package/upgrade/bridge.service.d.ts.map +1 -1
  523. package/widgets/implementations/alarms/severity-icon.pipe.d.ts.map +1 -1
  524. package/widgets/implementations/datapoints-table/datapoints-table-config/datapoints-table-config.component.d.ts.map +1 -1
  525. package/widgets/implementations/kpi/kpi-widget.model.d.ts +2 -1
  526. package/widgets/implementations/kpi/kpi-widget.model.d.ts.map +1 -1
  527. package/ecosystem/application-plugins/only-latest-plugin-version.pipe.d.ts +0 -10
  528. package/ecosystem/application-plugins/only-latest-plugin-version.pipe.d.ts.map +0 -1
  529. package/esm2022/ecosystem/application-plugins/only-latest-plugin-version.pipe.mjs +0 -20
@@ -1,5 +1,5 @@
1
- import { Injector, Injectable, Optional } from '@angular/core';
2
- import { BasicAuth, CookieAuth, BearerAuthFromSessionStorage, FetchClient, Realtime, TenantLoginOptionsService, TenantService, UserService } from '@c8y/client';
1
+ import { Injectable, Injector, Optional } from '@angular/core';
2
+ import { BasicAuth, BearerAuthFromSessionStorage, CookieAuth, FetchClient, Realtime, TenantLoginOptionsService, TenantService, UserService } from '@c8y/client';
3
3
  import { AppStateService } from '../common/ui-state.service';
4
4
  import { AlertService } from '../alert/alert.service';
5
5
  import { gettext } from '../i18n/gettext';
@@ -8,7 +8,7 @@ import { TenantUiService } from '../common/tenant-ui.service';
8
8
  import { switchMap } from 'rxjs/operators';
9
9
  import { BehaviorSubject, EMPTY } from 'rxjs';
10
10
  import { LocationStrategy } from '@angular/common';
11
- import { get, isString, isEmpty } from 'lodash-es';
11
+ import { get, isEmpty, isString } from 'lodash-es';
12
12
  import { TranslateService } from '@ngx-translate/core';
13
13
  import { ModalService } from '../modal/modal.service';
14
14
  import { Status } from '../common/status.model';
@@ -282,13 +282,24 @@ export class LoginService {
282
282
  * @param credentials The credentials to try to login.
283
283
  */
284
284
  async login(auth = this.getAuthStrategy(), credentials) {
285
- this.client.setAuth(auth);
285
+ // To ensure backward compatibility, we need to verify whether the backend supports TFA
286
+ // without requiring the use of /tenant with auth: base64. The tfaSupported flag indicates
287
+ // whether authentication is possible exclusively via OAI-SECURE.
288
+ // TfaSupported flag should be removed during: MTM-62641
289
+ const isOAISecureAndTFAIsSupported = (this.tenantUiService.isOauthInternal(this.loginMode) && this.loginMode.tfaSupported) ||
290
+ false;
291
+ if (isOAISecureAndTFAIsSupported && (await this.switchLoginMode(credentials))) {
292
+ auth = this.cookieAuth;
293
+ }
294
+ else {
295
+ this.client.setAuth(auth);
296
+ }
286
297
  const tenantRes = await this.tenant.current({ withParent: true });
287
298
  const tenant = tenantRes.data;
288
299
  if (credentials) {
289
300
  credentials.tenant = tenant.name;
290
301
  }
291
- if (await this.switchLoginMode(credentials)) {
302
+ if (!isOAISecureAndTFAIsSupported && (await this.switchLoginMode(credentials))) {
292
303
  auth = this.cookieAuth;
293
304
  }
294
305
  const userRes = await this.user.current();
@@ -356,7 +367,7 @@ export class LoginService {
356
367
  grant_type: 'PASSWORD',
357
368
  username: credentials.user,
358
369
  password: credentials.password,
359
- tfa_code: credentials.tfa
370
+ ...(credentials.tfa !== undefined && { tfa_code: credentials.tfa })
360
371
  });
361
372
  return await new FetchClient().fetch(this.getUrlForOauth(credentials), {
362
373
  method: 'POST',
@@ -614,4 +625,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
614
625
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.FetchClient }, { type: i1.BasicAuth }, { type: i1.CookieAuth }, { type: i2.AppStateService }, { type: i1.UserService }, { type: i1.TenantService }, { type: i1.Realtime }, { type: i3.AlertService }, { type: i4.ApiService }, { type: i5.TenantUiService }, { type: i1.TenantLoginOptionsService }, { type: i6.TranslateService }, { type: i7.ModalService }, { type: i8.LocationStrategy, decorators: [{
615
626
  type: Optional
616
627
  }] }] });
617
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvbG9naW4vbG9naW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsNEJBQTRCLEVBQzVCLFdBQVcsRUFLWCxRQUFRLEVBQ1IseUJBQXlCLEVBQ3pCLGFBQWEsRUFDYixXQUFXLEVBQ1osTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7QUFFaEQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sWUFBWTtJQStE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QUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQzs4R0E1cEJVLFlBQVk7a0hBQVosWUFBWTs7MkZBQVosWUFBWTtrQkFEeEIsVUFBVTs7MEJBK0VOLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJhc2ljQXV0aCxcbiAgQ29va2llQXV0aCxcbiAgQmVhcmVyQXV0aEZyb21TZXNzaW9uU3RvcmFnZSxcbiAgRmV0Y2hDbGllbnQsXG4gIElBdXRoZW50aWNhdGlvbixcbiAgSUNyZWRlbnRpYWxzLFxuICBJRmV0Y2hSZXNwb25zZSxcbiAgSVRlbmFudExvZ2luT3B0aW9uLFxuICBSZWFsdGltZSxcbiAgVGVuYW50TG9naW5PcHRpb25zU2VydmljZSxcbiAgVGVuYW50U2VydmljZSxcbiAgVXNlclNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3VpLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnLi4vaTE4bi9nZXR0ZXh0JztcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FwaSc7XG5pbXBvcnQgeyBUZW5hbnRVaVNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdGVuYW50LXVpLnNlcnZpY2UnO1xuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBFTVBUWSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTG9jYXRpb25TdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBnZXQsIGlzU3RyaW5nLCBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJy4uL21vZGFsL21vZGFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RhdHVzIH0gZnJvbSAnLi4vY29tbW9uL3N0YXR1cy5tb2RlbCc7XG5cbi8qKlxuICogU2VydmljZSB0byBtYW5hZ2UgdGhlIGxvZ2luLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTG9naW5TZXJ2aWNlIHtcbiAgcmVtZW1iZXJNZSA9IGZhbHNlO1xuICBUT0tFTl9LRVkgPSAnX3RjeTgnO1xuICBURkFUT0tFTl9LRVkgPSAnVEZBVG9rZW4nO1xuICBsb2dpbk1vZGU6IElUZW5hbnRMb2dpbk9wdGlvbjtcbiAgbWFuYWdlbWVudExvZ2luTW9kZTogSVRlbmFudExvZ2luT3B0aW9uO1xuICBvYXV0aE9wdGlvbnM6IElUZW5hbnRMb2dpbk9wdGlvbjtcbiAgaXNGaXJzdExvZ2luID0gdHJ1ZTtcbiAgR1JFRU5fTUlOX0xFTkdUSF9ERUZBVUxUID0gODtcbiAgYXV0b21hdGljTG9naW5JblByb2dyZXNzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIC8vIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aFxuICBFUlJPUl9NRVNTQUdFUyA9IHtcbiAgICBtaW5sZW5ndGg6IGdldHRleHQoJ1Bhc3N3b3JkIG11c3QgaGF2ZSBhdCBsZWFzdCA4IGNoYXJhY3RlcnMgYW5kIG5vIG1vcmUgdGhhbiAzMi4nKSxcbiAgICBwYXNzd29yZF9taXNzbWF0Y2g6IGdldHRleHQoJ1Bhc3N3b3JkcyBkbyBub3QgbWF0Y2guJyksXG4gICAgbWF4bGVuZ3RoOiBnZXR0ZXh0KCdQYXNzd29yZCBtdXN0IGhhdmUgYXQgbGVhc3QgOCBjaGFyYWN0ZXJzIGFuZCBubyBtb3JlIHRoYW4gMzIuJyksXG4gICAgcGFzc3dvcmRfc3RyZW5ndGg6IGdldHRleHQoXG4gICAgICAnWW91ciBwYXNzd29yZCBpcyBub3Qgc3Ryb25nIGVub3VnaC4gUGxlYXNlIGluY2x1ZGUgbnVtYmVycywgbG93ZXIgYW5kIHVwcGVyIGNhc2UgY2hhcmFjdGVycydcbiAgICApLFxuICAgIHJlbW90ZV9lcnJvcjogZ2V0dGV4dCgnU2VydmVyIGVycm9yIG9jY3VycmVkLicpLFxuICAgIGVtYWlsOiBnZXR0ZXh0KCdJbnZhbGlkIGVtYWlsIGFkZHJlc3MuJyksXG4gICAgcGFzc3dvcmRfY2hhbmdlOiBnZXR0ZXh0KCdZb3VyIHBhc3N3b3JkIGlzIGV4cGlyZWQuIFBsZWFzZSBzZXQgYSBuZXcgcGFzc3dvcmQuJyksXG4gICAgcGFzc3dvcmRfcmVzZXRfdG9rZW5fZXhwaXJlZDogZ2V0dGV4dChcbiAgICAgICdQYXNzd29yZCByZXNldCBsaW5rIGV4cGlyZWQuIFBsZWFzZSBlbnRlciB5b3VyIGVtYWlsIGFkZHJlc3MgdG8gcmVjZWl2ZSBhIG5ldyBvbmUuJ1xuICAgICksXG4gICAgdGZhX3Bpbl9pbnZhbGlkOiBnZXR0ZXh0KCdUaGUgY29kZSB5b3UgZW50ZXJlZCBpcyBpbnZhbGlkLiBQbGVhc2UgdHJ5IGFnYWluLicpLFxuICAgIHBhdHRlcm5fbmV3UGFzc3dvcmQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgZ2V0dGV4dChcbiAgICAgICAgJ1Bhc3N3b3JkIG11c3QgaGF2ZSBhdCBsZWFzdCA4IGNoYXJhY3RlcnMgYW5kIG5vIG1vcmUgdGhhbiAzMiBhbmQgY2FuIG9ubHkgY29udGFpbiBsZXR0ZXJzLCBudW1iZXJzIGFuZCBmb2xsb3dpbmcgc3ltYm9sczoge3sgc3ltYm9scyB9fSdcbiAgICAgICksXG4gICAgICB7IHN5bWJvbHM6ICdgfiFAIyQlXiYqKClffCstPT87OlxcJ1wiLC48Pnt9W11cXFxcLycgfVxuICAgICksXG4gICAgaW50ZXJuYXRpb25hbFBob25lTnVtYmVyOiBnZXR0ZXh0KFxuICAgICAgJ011c3QgYmUgYSB2YWxpZCBwaG9uZSBudW1iZXIgKG9ubHkgZGlnaXRzLCBzcGFjZXMsIHNsYXNoZXMgKFwiL1wiKSwgZGFzaGVzIChcIi1cIiksIGFuZCBwbHVzIChcIitcIikgYWxsb3dlZCwgZm9yIGV4YW1wbGU6ICs0OSA5IDg3NiA1NDMgMjEwKS4nXG4gICAgKSxcbiAgICBwaG9uZV9udW1iZXJfZXJyb3I6IGdldHRleHQoJ0NvdWxkIG5vdCB1cGRhdGUgcGhvbmUgbnVtYmVyLicpLFxuICAgIHBpbkFscmVhZHlTZW50OiBnZXR0ZXh0KFxuICAgICAgJ1RoZSB2ZXJpZmljYXRpb24gY29kZSB3YXMgYWxyZWFkeSBzZW50LiBGb3IgYSBuZXcgdmVyaWZpY2F0aW9uIGNvZGUsIHBsZWFzZSBjbGljayBvbiB0aGUgbGluayBhYm92ZS4nXG4gICAgKSxcbiAgICBwYXNzd29yZENvbmZpcm06IGdldHRleHQoJ1Bhc3N3b3JkcyBkbyBub3QgbWF0Y2guJyksXG4gICAgdGZhRXhwaXJlZDogZ2V0dGV4dCgnVHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiB0b2tlbiBleHBpcmVkLicpXG4gIH07XG4gIC8vIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoXG5cbiAgcHJpdmF0ZSBTVUNDRVNTX01FU1NBR0VTID0ge1xuICAgIHBhc3N3b3JkX2NoYW5nZWQ6IGdldHRleHQoJ1Bhc3N3b3JkIGNoYW5nZWQuIFlvdSBjYW4gbm93IGxvZyBpbiB1c2luZyBuZXcgcGFzc3dvcmQuJyksXG4gICAgcGFzc3dvcmRfcmVzZXRfcmVxdWVzdGVkOiBnZXR0ZXh0KFxuICAgICAgJ1Bhc3N3b3JkIHJlc2V0IHJlcXVlc3QgaGFzIGJlZW4gc2VudC4gUGxlYXNlIGNoZWNrIHlvdXIgZW1haWwuJ1xuICAgICksXG4gICAgcmVzZW5kX3NtczogZ2V0dGV4dCgnVmVyaWZpY2F0aW9uIGNvZGUgU01TIHJlc2VudC4nKSxcbiAgICBzZW5kX3NtczogZ2V0dGV4dCgnVmVyaWZpY2F0aW9uIGNvZGUgU01TIHNlbnQuJylcbiAgfTtcblxuICBwcml2YXRlIHBhc3N3b3JkU3RyZW5ndGhTZXR0aW5nID0ge1xuICAgIGVuZm9yY2VQYXNzd29yZFN0cmVuZ3RoOiBmYWxzZSxcbiAgICBncmVlbk1pbkxlbmd0aDogdGhpcy5HUkVFTl9NSU5fTEVOR1RIX0RFRkFVTFQsXG4gICAgcGFzc3dvcmRTdHJlbmd0aFZhbGlkaXR5OiBmYWxzZVxuICB9O1xuXG4gIHByaXZhdGUgbG9jYWxob3N0UmVnRXhwID0gbmV3IFJlZ0V4cCgnbG9jYWxob3N0Jyk7XG4gIHByaXZhdGUgbG9jYWxob3N0SXBSZWdFeHAgPSBuZXcgUmVnRXhwKCcxMjcuMC4wLjEnKTtcbiAgcHJpdmF0ZSBzaG93VGVuYW50UmVnRXhwID0gbmV3IFJlZ0V4cCgnc2hvd1RlbmFudCcpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgY2xpZW50OiBGZXRjaENsaWVudCxcbiAgICBwcml2YXRlIGJhc2ljQXV0aDogQmFzaWNBdXRoLFxuICAgIHByaXZhdGUgY29va2llQXV0aDogQ29va2llQXV0aCxcbiAgICBwcml2YXRlIHVpOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudDogVGVuYW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWx0aW1lOiBSZWFsdGltZSxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcGk6IEFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW5hbnRVaVNlcnZpY2U6IFRlbmFudFVpU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudExvZ2luT3B0aW9uc1NlcnZpY2U6IFRlbmFudExvZ2luT3B0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb25TdHJhdGVneVxuICApIHtcbiAgICB0aGlzLmF1dG9Mb2dvdXQoKTtcbiAgICB0aGlzLmluaXRMb2dpbk9wdGlvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRlbmFudC5cbiAgICogQHJldHVybiBUaGUgdGVuYW50IG5hbWUuXG4gICAqL1xuICBnZXRUZW5hbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnRlbmFudDtcbiAgfVxuXG4gIGluaXRMb2dpbk9wdGlvbnMoKSB7XG4gICAgY29uc3QgbG9naW5PcHRpb25zID0gdGhpcy51aS5zdGF0ZS5sb2dpbk9wdGlvbnMgfHwgW107XG4gICAgdGhpcy5sb2dpbk1vZGUgPSB0aGlzLnRlbmFudFVpU2VydmljZS5nZXRQcmVmZXJyZWRMb2dpbk9wdGlvbihsb2dpbk9wdGlvbnMpO1xuICAgIHRoaXMub2F1dGhPcHRpb25zID1cbiAgICAgIHRoaXMudGVuYW50VWlTZXJ2aWNlLmdldE9hdXRoMk9wdGlvbihsb2dpbk9wdGlvbnMpIHx8ICh7fSBhcyBJVGVuYW50TG9naW5PcHRpb24pO1xuICB9XG5cbiAgcmVkaXJlY3RUb09hdXRoKCkge1xuICAgIGNvbnN0IHsgaW5pdFJlcXVlc3QsIGZsb3dDb250cm9sbGVkQnlVSSB9ID0gdGhpcy5vYXV0aE9wdGlvbnM7XG4gICAgY29uc3QgZnVsbFBhdGggPSBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufSR7d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfWA7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBlbmNvZGVVUklDb21wb25lbnQoZnVsbFBhdGgpO1xuICAgIGNvbnN0IG9yaWdpblVyaVBhcmFtID0gYCR7aW5pdFJlcXVlc3QuaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/J31vcmlnaW5Vcmk9JHtyZWRpcmVjdFVybH1gO1xuICAgIGNvbnN0IHVybE9iamVjdCA9IG5ldyBVUkwoaW5pdFJlcXVlc3QpO1xuXG4gICAgaWYgKGZsb3dDb250cm9sbGVkQnlVSSkge1xuICAgICAgdGhpcy5jbGllbnRcbiAgICAgICAgLmZldGNoKGAvdGVuYW50L29hdXRoJHt1cmxPYmplY3Quc2VhcmNofSR7b3JpZ2luVXJpUGFyYW19YClcbiAgICAgICAgLnRoZW4ocmVzID0+IHRoaXMuaGFuZGxlRXJyb3JTdGF0dXNDb2RlcyhyZXMpKVxuICAgICAgICAudGhlbihyZXMgPT4gcmVzLmpzb24oKSlcbiAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiAod2luZG93LmxvY2F0aW9uLmhyZWYgPSByZXMucmVkaXJlY3RUbykpXG4gICAgICAgIC5jYXRjaChleCA9PiB0aGlzLnNob3dTc29FcnJvcihleCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGAke2luaXRSZXF1ZXN0fSR7b3JpZ2luVXJpUGFyYW19YDtcbiAgICB9XG4gIH1cblxuICBsb2dpbkJ5U3NvKHNlc3Npb25TdGF0ZTogc3RyaW5nLCBjb2RlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBY2NlcHQ6ICd0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sJ1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50XG4gICAgICAuZmV0Y2goYC90ZW5hbnQvb2F1dGg/c2Vzc2lvbl9zdGF0ZT0ke3Nlc3Npb25TdGF0ZX0mY29kZT0ke2NvZGV9YCwgcGFyYW1zKVxuICAgICAgLnRoZW4ocmVzID0+IHRoaXMuaGFuZGxlRXJyb3JTdGF0dXNDb2RlcyhyZXMpKVxuICAgICAgLmNhdGNoKGV4ID0+IHtcbiAgICAgICAgdGhpcy5zaG93U3NvRXJyb3IoZXgpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYXV0b0xvZ291dCgpIHtcbiAgICBjb25zdCBlcnJvclBhdHRlcm4gPSAvaW52YWxpZFxcc2NyZWRlbnRpYWxzLipwaW4uKmdlbmVyYXRlL2k7XG4gICAgY29uc3QgaXNUZmFFeHBpcmVkID0gZGF0YSA9PlxuICAgICAgZGF0YSAmJiB0eXBlb2YgZGF0YS5tZXNzYWdlID09PSAnc3RyaW5nJyAmJiBlcnJvclBhdHRlcm4udGVzdChkYXRhLm1lc3NhZ2UpO1xuICAgIHRoaXMudWkuY3VycmVudFVzZXJcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAodSA9PlxuICAgICAgICAgIHUgPyB0aGlzLmFwaS5ob29rUmVzcG9uc2UoKHsgcmVzcG9uc2UgfSkgPT4gcmVzcG9uc2Uuc3RhdHVzID09PSA0MDEpIDogRU1QVFlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShhc3luYyAoYXBpQ2FsbDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGFwaUNhbGw7XG4gICAgICAgIGxldCB3aWxsTG9nb3V0ID0gZmFsc2U7XG4gICAgICAgIGlmIChpc1RmYUV4cGlyZWQocmVzcG9uc2UuZGF0YSkpIHtcbiAgICAgICAgICB3aWxsTG9nb3V0ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlc3BvbnNlLmpzb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5jbG9uZSgpLmpzb24oKTtcbiAgICAgICAgICAgIGlmIChpc1RmYUV4cGlyZWQoZGF0YSkpIHtcbiAgICAgICAgICAgICAgd2lsbExvZ291dCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh3aWxsTG9nb3V0KSB7XG4gICAgICAgICAgdGhpcy5sb2dvdXQoZmFsc2UpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hbGVydC5kYW5nZXIodGhpcy5FUlJPUl9NRVNTQUdFUy50ZmFFeHBpcmVkKSwgNTAwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbWluaW1hbCBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IGEgcGFzc3dvcmQgc2hvdWxkIGhhdmUgdG8gYmUgY29uc2lkZXJlZCBhIOKAnGdyZWVu4oCdIHN0cm9uZyBvbmUuXG4gICAqIEByZXR1cm4gVGhlIG1pbiBsZW5ndGggZm9yIHBhc3N3b3JkIG9yIGRlZmF1bHQgdmFsdWUuXG4gICAqL1xuICBhc3luYyBnZXRHcmVlbk1pbkxlbmd0aCgpIHtcbiAgICBjb25zdCB7IGdyZWVuTWluTGVuZ3RoIH0gPSAoYXdhaXQgdGhpcy5nZXRCYXNpY0F1dGhMb2dpbk9wdGlvbigpKSB8fCB7IGdyZWVuTWluTGVuZ3RoOiBudWxsIH07XG4gICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5ncmVlbk1pbkxlbmd0aCA9IGdyZWVuTWluTGVuZ3RoIHx8IHRoaXMuR1JFRU5fTUlOX0xFTkdUSF9ERUZBVUxUO1xuICAgIHJldHVybiB0aGlzLnBhc3N3b3JkU3RyZW5ndGhTZXR0aW5nLmdyZWVuTWluTGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBwYXNzd29yZCBzdHJlbmd0aCBpcyBlbmZvcmNlZCBmb3Igc3lzdGVtXG4gICAqIGJ5IHJldHJpZXZpbmcgdmFsdWUgb2YgYGVuZm9yY2VTdHJlbmd0aGAgcHJvcGVydHkgZnJvbSBsb2dpbk9wdGlvbnMgcmVzcG9uc2VcbiAgICogQHBhcmFtIHJlZnJlc2ggYm9vbGVhbiB1c2VkIHRvIHJlZnJlc2ggdGhlIGFwcCBzdGF0ZSB3aGVyZSByZXN1bHQgb2YgbG9naW5PcHRpb25zIHJlc3BvbnNlIGlzIHN0b3JlZC5cbiAgICogSWYgZmFsc2UsIGl0IHRha2VzIHZhbHVlIGZyb20gbWVtb3J5LFxuICAgKiBpZiB0cnVlLCBpdCByZWZyZXNoIHRoZSBhcHAgc3RhdGUgdmFsdWUgYW5kIHRoZW4gcmV0cml2ZXMgZGF0YS5cbiAgICogQHJldHVybiBib29sZWFuIHZhbHVlLCB0cnVlIGlmIGVuZm9yY2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBhc3luYyBnZXRFbmZvcmNlUGFzc3dvcmRTdHJlbmd0aChyZWZyZXNoPykge1xuICAgIHJldHVybiB0aGlzLmdldEJhc2ljQXV0aExvZ2luT3B0aW9uKHJlZnJlc2gpLnRoZW4obG9naW5PcHRpb24gPT4ge1xuICAgICAgY29uc3QgZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGggPSBnZXQobG9naW5PcHRpb24sICdlbmZvcmNlU3RyZW5ndGgnKTtcbiAgICAgIGlmIChpc1N0cmluZyhlbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCkpIHtcbiAgICAgICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5lbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCA9XG4gICAgICAgICAgZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGggPT09ICd0cnVlJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aFNldHRpbmcuZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGggPSAhIWVuZm9yY2VQYXNzd29yZFN0cmVuZ3RoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucGFzc3dvcmRTdHJlbmd0aFNldHRpbmcuZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGg7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHBhc3N3b3JkIHN0cmVuZ3RoIGlzIGVuZm9yY2VkIGZvciBwYXJ0aWN1bGFyIHRlbmFudFxuICAgKiBieSByZXRyaWV2aW5nIHZhbHVlIG9mIGBzdHJlbmd0aFZhbGlkaXR5YCBwcm9wZXJ0eSBmcm9tIGxvZ2luT3B0aW9ucyByZXNwb25zZVxuICAgKiBAcGFyYW0gcmVmcmVzaCBib29sZWFuIHVzZWQgdG8gcmVmcmVzaCB0aGUgYXBwIHN0YXRlIHdoZXJlIHJlc3VsdCBvZiBsb2dpbk9wdGlvbnMgcmVzcG9uc2UgaXMgc3RvcmVkLlxuICAgKiBJZiBmYWxzZSwgaXQgdGFrZXMgdmFsdWUgZnJvbSBtZW1vcnksXG4gICAqIGlmIHRydWUsIGl0IHJlZnJlc2ggdGhlIGFwcCBzdGF0ZSB2YWx1ZSBhbmQgdGhlbiByZXRyaXZlcyBkYXRhLlxuICAgKiBAcmV0dXJuIGJvb2xlYW4gdmFsdWUsIHRydWUgaWYgZW5mb3JjZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGFzeW5jIGdldFBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eShyZWZyZXNoPykge1xuICAgIHJldHVybiB0aGlzLmdldEJhc2ljQXV0aExvZ2luT3B0aW9uKHJlZnJlc2gpLnRoZW4obG9naW5PcHRpb24gPT4ge1xuICAgICAgY29uc3Qgc3RyZW5ndGhWYWxpZGl0eSA9IGdldChsb2dpbk9wdGlvbiwgJ3N0cmVuZ3RoVmFsaWRpdHknKTtcbiAgICAgIGlmIChpc1N0cmluZyhzdHJlbmd0aFZhbGlkaXR5KSkge1xuICAgICAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhTZXR0aW5nLnBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eSA9XG4gICAgICAgICAgc3RyZW5ndGhWYWxpZGl0eSA9PT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5wYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHkgPSAhIXN0cmVuZ3RoVmFsaWRpdHk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5wYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBlbmZvcmNlZCBzdHJlbmd0aCBjaGVja3Mgc2hvdWxkIGJlIGVuYWJsZWQgZm9yIGN1cnJlbnQgdGVuYW50XG4gICAqIGJhc2VkIG9uIHByb3BlcnRpZXMgcmV0cmlldmVkIGZyb20gbG9naW5PcHRpb25zXG4gICAqIEBwYXJhbSBvcHRpb25zIG9iamVjdCBjb250YWluaW5nIHNwZWNpZmljIG9wdGlvbnM6XG4gICAqICAgIC0ge3JlZnJlc2g6IHRydWV9IC0gcmVmcmVzaGVzIHZhbHVlcyBvZiBhcHAgc3RhdGUgYW5kIHJldHVybnMgZnJlc2ggdmFsdWVzIGFzIHJlc3VsdCBvZiBjYWxsXG4gICAqIEByZXR1cm4gYm9vbGVhbiB2YWx1ZSwgdHJ1ZSBpZiBzdHJlbmd0aCBpcyBlbmZvcmNlZCBmb3IgdGVuYW50LCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBhc3luYyBnZXRQYXNzd29yZFN0cmVuZ3RoRW5mb3JjZWQob3B0aW9ucz8pIHtcbiAgICBjb25zdCByZWZyZXNoID0gb3B0aW9ucyAmJiBvcHRpb25zLnJlZnJlc2g7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuZ2V0RW5mb3JjZVBhc3N3b3JkU3RyZW5ndGgocmVmcmVzaCksXG4gICAgICB0aGlzLmdldFBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eShyZWZyZXNoKVxuICAgIF0pLnRoZW4odmFsdWVzID0+IHtcbiAgICAgIGNvbnN0IFtlbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCwgcGFzc3dvcmRTdHJlbmd0aFZhbGlkaXR5XSA9IHZhbHVlcztcbiAgICAgIHJldHVybiBlbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCB8fCBwYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIGFsbCBiYWNrZW5kIGVycm9ycy5cbiAgICovXG4gIGNsZWFuTWVzc2FnZXMoKSB7XG4gICAgdGhpcy5hbGVydC5jbGVhckFsbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgc3VjY2VzcyBtZXNzYWdlXG4gICAqIEBwYXJhbSBzdWNjZXNzS2V5IFRoZSBrZXkgb2YgdGhlIHN1Y2Nlc3MgbWVzc2FnZSBhcyB1c2VkIGluIFNVQ0NFU1NfTUVTU0FHRVNcbiAgICovXG4gIGFkZFN1Y2Nlc3NNZXNzYWdlKHN1Y2Nlc3NLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IHN1Y2Nlc3NNZXNzYWdlID0gdGhpcy5TVUNDRVNTX01FU1NBR0VTW3N1Y2Nlc3NLZXldO1xuICAgIGlmIChzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgdGhpcy5hbGVydC5hZGQoe1xuICAgICAgICB0ZXh0OiBzdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICB0aW1lb3V0OiAwXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBzdHJhdGVneS4gRGVmYXVsdHMgdG8gY29va2llLCBpZiBhIHRva2VuXG4gICAqIGlzIGZvdW5kIGluIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZSB3ZSBzd2l0Y2ggdG8gYmFzaWMgYXV0aC5cbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgYXV0aCBzdHJhdGVneS5cbiAgICovXG4gIGdldEF1dGhTdHJhdGVneSgpOiBJQXV0aGVudGljYXRpb24ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhdXRoU3RyYXRlZ3kgPSBuZXcgQmVhcmVyQXV0aEZyb21TZXNzaW9uU3RvcmFnZSgpO1xuICAgICAgY29uc29sZS5sb2coYFVzaW5nIEJlYXJlckF1dGhGcm9tU2Vzc2lvblN0b3JhZ2VgKTtcbiAgICAgIHJldHVybiBhdXRoU3RyYXRlZ3k7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgICBsZXQgYXV0aFN0cmF0ZWd5OiBJQXV0aGVudGljYXRpb24gPSB0aGlzLmNvb2tpZUF1dGg7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFN0b3JlZFRva2VuKCk7XG4gICAgY29uc3QgdGZhID0gdGhpcy5nZXRTdG9yZWRUZmFUb2tlbigpO1xuICAgIGlmICh0b2tlbikge1xuICAgICAgYXV0aFN0cmF0ZWd5ID0gdGhpcy5iYXNpY0F1dGg7XG4gICAgICB0aGlzLnNldENyZWRlbnRpYWxzKHsgdG9rZW4sIHRmYSB9LCB0aGlzLmJhc2ljQXV0aCk7XG4gICAgfVxuICAgIHJldHVybiBhdXRoU3RyYXRlZ3k7XG4gIH1cblxuICAvKipcbiAgICogRm9yY2VzIHRoZSB1c2Ugb2YgYmFzaWMgYXV0aCBhcyBzdHJhdGVneSB3aXRoIHRoaXMgY3JlZGVudGlhbHMuXG4gICAqIEBwYXJhbSBjcmVkZW50aWFscyBUaGUgY3JlZGVudGlhbHMgdG8gdXNlLlxuICAgKi9cbiAgdXNlQmFzaWNBdXRoKGNyZWRlbnRpYWxzOiBJQ3JlZGVudGlhbHMpIHtcbiAgICB0aGlzLnNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzLCB0aGlzLmJhc2ljQXV0aCk7XG4gICAgcmV0dXJuIHRoaXMuYmFzaWNBdXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWVzIHRvIGxvZ2luIGEgdXNlciB3aXRoIHRoZSBnaXZlbiBjcmVkZW50aWFscy5cbiAgICogSWYgc3VjY2Vzc2Z1bCwgdGhlIGN1cnJlbnQgdGVuYW50IGFuZCB1c2VyIGlzIHNldC4gSWYgbm90IGFuIGVycm9yXG4gICAqIGlzIHRocm93bi4gSXQgYWxzbyB2ZXJpZmllcyBpZiB0aGUgdXNlciBpcyBhbGxvd2VkIHRvIG9wZW4gdGhlXG4gICAqIGN1cnJlbnQgYXBwLlxuICAgKiBAcGFyYW0gYXV0aCBUaGUgYXV0aGVudGljYXRpb24gc3RyYXRlZ3kgdXNlZC5cbiAgICogQHBhcmFtIGNyZWRlbnRpYWxzIFRoZSBjcmVkZW50aWFscyB0byB0cnkgdG8gbG9naW4uXG4gICAqL1xuICBhc3luYyBsb2dpbihhdXRoOiBJQXV0aGVudGljYXRpb24gPSB0aGlzLmdldEF1dGhTdHJhdGVneSgpLCBjcmVkZW50aWFscz86IElDcmVkZW50aWFscykge1xuICAgIHRoaXMuY2xpZW50LnNldEF1dGgoYXV0aCk7XG5cbiAgICBjb25zdCB0ZW5hbnRSZXMgPSBhd2FpdCB0aGlzLnRlbmFudC5jdXJyZW50KHsgd2l0aFBhcmVudDogdHJ1ZSB9KTtcbiAgICBjb25zdCB0ZW5hbnQgPSB0ZW5hbnRSZXMuZGF0YTtcblxuICAgIGlmIChjcmVkZW50aWFscykge1xuICAgICAgY3JlZGVudGlhbHMudGVuYW50ID0gdGVuYW50Lm5hbWU7XG4gICAgfVxuXG4gICAgaWYgKGF3YWl0IHRoaXMuc3dpdGNoTG9naW5Nb2RlKGNyZWRlbnRpYWxzKSkge1xuICAgICAgYXV0aCA9IHRoaXMuY29va2llQXV0aDtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyUmVzID0gYXdhaXQgdGhpcy51c2VyLmN1cnJlbnQoKTtcbiAgICBjb25zdCB1c2VyID0gdXNlclJlcy5kYXRhO1xuICAgIGF3YWl0IHRoaXMudmVyaWZ5QXBwQWNjZXNzKCk7XG5cbiAgICBjb25zdCBzdXBwb3J0VXNlck5hbWUgPSB0aGlzLmdldFN1cHBvcnRVc2VyTmFtZShjcmVkZW50aWFscyk7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnNldENyZWRlbnRpYWxzKFxuICAgICAge1xuICAgICAgICB0ZW5hbnQ6IHRlbmFudC5uYW1lLFxuICAgICAgICB1c2VyOiAoc3VwcG9ydFVzZXJOYW1lID8gYCR7c3VwcG9ydFVzZXJOYW1lfSRgIDogJycpICsgdXNlci51c2VyTmFtZVxuICAgICAgfSxcbiAgICAgIGF1dGhcbiAgICApO1xuXG4gICAgaWYgKHRva2VuKSB7XG4gICAgICB0aGlzLnN0b3JlQmFzaWNBdXRoVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuYXV0aEZ1bGZpbGxlZCh0ZW5hbnQsIHVzZXIsIHN1cHBvcnRVc2VyTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgdGVuYW50LCB1c2VyIGFuZCBzdXBwb3J0IHVzZXIgaW5mbyB0byB0aGUgYXBwIHN0YXRlLlxuICAgKiBAcGFyYW0gdGVuYW50IFRoZSBjdXJyZW50IHRlbmFudCBvYmplY3QuXG4gICAqIEBwYXJhbSB1c2VyIFRoZSBjdXJyZW50IHVzZXIgb2JqZWN0LlxuICAgKiBAcGFyYW0gc3VwcG9ydFVzZXJOYW1lIFRoZSBjdXJyZW50IHN1cHBvcnQgdXNlciBuYW1lLlxuICAgKi9cbiAgYXN5bmMgYXV0aEZ1bGZpbGxlZCh0ZW5hbnQ/LCB1c2VyPywgc3VwcG9ydFVzZXJOYW1lPykge1xuICAgIGlmICghdGVuYW50KSB7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMudGVuYW50LmN1cnJlbnQoeyB3aXRoUGFyZW50OiB0cnVlIH0pO1xuICAgICAgdGVuYW50ID0gZGF0YTtcbiAgICAgIHRoaXMuY2xpZW50LnRlbmFudCA9IHRlbmFudC5uYW1lO1xuICAgIH1cblxuICAgIGlmICghdXNlcikge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLnVzZXIuY3VycmVudCgpO1xuICAgICAgdXNlciA9IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKCFzdXBwb3J0VXNlck5hbWUpIHtcbiAgICAgIHN1cHBvcnRVc2VyTmFtZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy51aS5zZXRVc2VyKHsgdXNlciwgc3VwcG9ydFVzZXJOYW1lIH0pO1xuICAgIHRoaXMudWkuY3VycmVudFRlbmFudC5uZXh0KHRlbmFudCk7XG4gIH1cblxuICAvKipcbiAgICogU3dpdGNoIHRoZSBsb2dpbiBtb2RlIHRvIENvb2tpZUF1dGggaWYgdGhlXG4gICAqIHVzZXIgaGFzIGNvbmZpZ3VyZWQgdG8gdXNlIGl0IGluIGxvZ2luT3B0aW9ucy5cbiAgICogQHBhcmFtIGNyZWRlbnRpYWxzIFRoZSBjcmVkZW50aWFscyBmb3IgdGhhdCBsb2dpblxuICAgKi9cbiAgYXN5bmMgc3dpdGNoTG9naW5Nb2RlKGNyZWRlbnRpYWxzPzogSUNyZWRlbnRpYWxzKSB7XG4gICAgY29uc3QgaXNQYXNzd29yZEdyYW50TG9naW4gPSBhd2FpdCB0aGlzLmlzUGFzc3dvcmRHcmFudExvZ2luKGNyZWRlbnRpYWxzKTtcbiAgICBpZiAoaXNQYXNzd29yZEdyYW50TG9naW4gJiYgY3JlZGVudGlhbHMpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ2VuZXJhdGVPYXV0aFRva2VuKGNyZWRlbnRpYWxzKTtcbiAgICAgIGlmICghKHJlcyBhcyBSZXNwb25zZSkub2spIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgICAgICB0aHJvdyB7IHJlcywgZGF0YSB9O1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmNsaWVudC5zZXRBdXRoKHRoaXMuY29va2llQXV0aCk7XG4gICAgICB0aGlzLmNsZWFuTG9jYWxTdG9yYWdlKCk7XG4gICAgICB0aGlzLmJhc2ljQXV0aC5sb2dvdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGlzUGFzc3dvcmRHcmFudExvZ2luO1xuICB9XG5cbiAgYXN5bmMgZ2VuZXJhdGVPYXV0aFRva2VuKGNyZWRlbnRpYWxzPzogSUNyZWRlbnRpYWxzKSB7XG4gICAgaWYgKChhd2FpdCB0aGlzLmlzUGFzc3dvcmRHcmFudExvZ2luKGNyZWRlbnRpYWxzKSkgJiYgY3JlZGVudGlhbHMpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICBncmFudF90eXBlOiAnUEFTU1dPUkQnLFxuICAgICAgICB1c2VybmFtZTogY3JlZGVudGlhbHMudXNlcixcbiAgICAgICAgcGFzc3dvcmQ6IGNyZWRlbnRpYWxzLnBhc3N3b3JkLFxuICAgICAgICB0ZmFfY29kZTogY3JlZGVudGlhbHMudGZhXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhd2FpdCBuZXcgRmV0Y2hDbGllbnQoKS5mZXRjaCh0aGlzLmdldFVybEZvck9hdXRoKGNyZWRlbnRpYWxzKSwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogcGFyYW1zLnRvU3RyaW5nKCksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04J1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpc1Bhc3N3b3JkR3JhbnRMb2dpbihjcmVkZW50aWFscz86IElDcmVkZW50aWFscykge1xuICAgIGxldCBsb2dpbk1vZGUgPSB0aGlzLmxvZ2luTW9kZTtcblxuICAgIGlmICh0aGlzLmlzU3VwcG9ydFVzZXIoY3JlZGVudGlhbHMpKSB7XG4gICAgICBpZiAoIXRoaXMubWFuYWdlbWVudExvZ2luTW9kZSkge1xuICAgICAgICB0aGlzLm1hbmFnZW1lbnRMb2dpbk1vZGUgPSBhd2FpdCB0aGlzLmdldE1hbmFnZW1lbnRMb2dpbk1vZGUoKTtcbiAgICAgIH1cbiAgICAgIGxvZ2luTW9kZSA9IHRoaXMubWFuYWdlbWVudExvZ2luTW9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50ZW5hbnRVaVNlcnZpY2UuaXNPYXV0aEludGVybmFsKGxvZ2luTW9kZSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgaWYgdGhlIHByb3ZpZGVkIGNyZWRlbnRpYWxzIHVzZSBhIHN1cHBvcnQgdXNlciB0byBsb2cgaW4gb3Igbm90LlxuICAgKiBAcGFyYW0gY3JlZGVudGlhbHMgQ3JlZGVudGlhbHMgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdXNlciBpcyBhIHN1cHBvcnQgdXNlci5cbiAgICovXG4gIGlzU3VwcG9ydFVzZXIoY3JlZGVudGlhbHM/OiBJQ3JlZGVudGlhbHMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY3JlZGVudGlhbHMgJiYgY3JlZGVudGlhbHMudXNlci5pbmNsdWRlcygnJCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGlmIHRoZSB0ZW5hbnQgaW5wdXQgZmllbGQgc2hvdWxkIGJlIHNob3duXG4gICAqIG9yIG5vdC5cbiAgICogQHJldHVybnMgSWYgdHJ1ZSwgc2hvdyB0aGUgdGVuYW50IGlucHV0LlxuICAgKi9cbiAgc2hvd1RlbmFudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudWkuc3RhdGUubG9naW5PcHRpb25zIHx8IHRoaXMuaXNMb2NhbCgpIHx8IHRoaXMuaXNTaG93VGVuYW50KCk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgaWYgdGhlIHRlbmFudCBzZXR1cCBzaG91bGQgYmUgc2hvd25cbiAgICogb3Igbm90LlxuICAgKiBAcmV0dXJucyBJZiB0cnVlLCBzaG93IHRoZSB0ZW5hbnQgaW5wdXQuXG4gICAqL1xuICBzaG93VGVuYW50U2V0dXAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnVpLnN0YXRlLmxvZ2luT3B0aW9ucyAmJiAhdGhpcy5pc0xvY2FsKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9ncyB0aGUgdXNlciBvdXRcbiAgICogQHBhcmFtIHJlbG9hZCBJZiBzZXQgdG8gZmFsc2UsIHRoZSBwYWdlIHdpbGwgbm90IHJlbG9hZFxuICAgKi9cbiAgYXN5bmMgbG9nb3V0KHJlbG9hZCA9IHRydWUpIHtcbiAgICBsZXQgcmVzRGF0YSA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IFssIGNvb2tpZVJlc10gPSBhd2FpdCB0aGlzLnJlc2V0KCk7XG4gICAgICByZXNEYXRhID0gYXdhaXQgY29va2llUmVzLmpzb24oKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5hbGVydC5yZW1vdmVMYXN0RGFuZ2VyKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChyZXNEYXRhICYmIHJlc0RhdGEudXJsKSB7XG4gICAgICAgIHRoaXMucmVkaXJlY3QocmVzRGF0YS51cmwpO1xuICAgICAgfSBlbHNlIGlmIChyZWxvYWQpIHtcbiAgICAgICAgdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoe30sICcnLCAnJywgJycpO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgc3RvcmVkIGF1dGgtZGF0YVxuICAgKi9cbiAgYXN5bmMgcmVzZXQoKSB7XG4gICAgdGhpcy5jbGVhbkxvY2FsU3RvcmFnZSgpO1xuICAgIHRoaXMuY2xlYW5TZXNzaW9uU3RvcmFnZSgpO1xuICAgIHRoaXMucmVhbHRpbWUuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMudWkuY3VycmVudFVzZXIubmV4dChudWxsKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW3RoaXMuYmFzaWNBdXRoLmxvZ291dCgpLCB0aGlzLmNvb2tpZUF1dGgubG9nb3V0KCldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgVEZBIHRva2VuIHRvIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZS5cbiAgICogQHBhcmFtIHRmYVRva2VuIFRoZSB0ZmEgdG9rZW4gdG8gc2F2ZS5cbiAgICogQHBhcmFtIHN0b3JhZ2UgVGhlIHN0b3JhZ2UgdG8gdXNlIChsb2NhbCBvciBzZXNzaW9uKS5cbiAgICovXG4gIHNhdmVURkFUb2tlbih0ZmFUb2tlbjogc3RyaW5nLCBzdG9yYWdlOiBTdG9yYWdlKSB7XG4gICAgc3RvcmFnZS5zZXRJdGVtKHRoaXMuVEZBVE9LRU5fS0VZLCB0ZmFUb2tlbik7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCB0aGUgbWFuaWZlc3QgLT4gb24gNDAxIHVzZXIgaGFzIG5vIGFjY2VzcyB0byB0aGF0IGFwcGxpY2F0aW9uXG4gICAqIGFuZCB3ZSB0aHJvdyB0aGUgZXJyb3IgdXAgdG8gdGhlIGxvZ2luIGZvcm0uXG4gICAqL1xuICBhc3luYyB2ZXJpZnlBcHBBY2Nlc3MoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMudWkubG9hZE1hbmlmZXN0KCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmICghKGV4LnJlcyAmJiBleC5yZXMuc3RhdHVzID09PSA0MDQgJiYgdGhpcy5pc0xvY2FsKCkpKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlZGlyZWN0VG9Eb21haW4oZG9tYWluKSB7XG4gICAgY29uc3Qgb3JpZ2luVXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBvcmlnaW5VcmwuaHJlZi5yZXBsYWNlKG9yaWdpblVybC5ob3N0bmFtZSwgZG9tYWluKTtcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJlZGlyZWN0VXJsO1xuICB9XG5cbiAgc2hvd1Nzb0Vycm9yKGVycm9yKTogdm9pZCB7XG4gICAgY29uc3QgYm9keSA9IGVycm9yXG4gICAgICA/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoXG4gICAgICAgICAgICAnPHA+PHN0cm9uZz5UaGUgZm9sbG93aW5nIGVycm9yIHdhcyByZXR1cm5lZCBmcm9tIHRoZSBleHRlcm5hbCBhdXRoZW50aWNhdGlvbiBzZXJ2aWNlOjwvc3Ryb25nPjwvcD48cD48Y29kZT57eyBlcnJvciB9fTwvY29kZT48L3A+LidcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgZXJyb3IgfVxuICAgICAgICApXG4gICAgICA6IGdldHRleHQoJ1NTTyBsb2dpbiBmYWlsZWQuIENvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyk7XG5cbiAgICB0aGlzLm1vZGFsU2VydmljZS5hY2tub3dsZWRnZShnZXR0ZXh0KCdMb2dpbiBlcnJvcicpLCBib2R5LCBTdGF0dXMuREFOR0VSLCBnZXR0ZXh0KCdPSycpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0ZW5hbnQgdG8gdGhlIGNsaWVudCBhbmQgdXBkYXRlcyB0aGUgY3JlZGVudGlhbHMgb24gdGhlXG4gICAqIGF1dGggc3RyYXRlZ3kuXG4gICAqIEBwYXJhbSBjcmVkZW50aWFscyBUaGUgbmFtZSBvZiB0aGUgdGVuYW50LlxuICAgKiBAcGFyYW0gYXV0aFN0cmF0ZWd5IFRoZSBhdXRoZW50aWNhdGlvbiBzdHJhdGVneSB1c2VkLlxuICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHRva2VuIGlmIGJhc2ljIGF1dGgsIG90aGVyd2lzZSB1bmRlZmluZWQuXG4gICAqL1xuICBwcml2YXRlIHNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzOiBJQ3JlZGVudGlhbHMsIGF1dGhTdHJhdGVneTogSUF1dGhlbnRpY2F0aW9uKSB7XG4gICAgaWYgKGNyZWRlbnRpYWxzLnRlbmFudCkge1xuICAgICAgdGhpcy5jbGllbnQudGVuYW50ID0gY3JlZGVudGlhbHMudGVuYW50O1xuICAgIH1cbiAgICAvLyBDaGVjayBpZiBhIHRva2VuIGlzIGFscmVhZHkgc2V0IChjYXNlIGZvciBzdXBwb3J0IHVzZXIgbG9naW4pXG4gICAgLy8gaWYgeWVzIC0+IHdlIGp1c3QgbmVlZCB0byB1cGRhdGUgdGhlIHVzZXIsIGFuZCByZXVzZSB0aGUgdG9rZW5cbiAgICAvLyBvZiB0aGUgc3VwcG9ydCB1c2VyLlxuICAgIC8vIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIHBhc3MgdXNlciBhbmQgdGVuYW50LCB0byBnZXRcbiAgICAvLyBqdXN0IHRoZSBzdG9yZWQgdG9rZW4gYW5kIG5vdGhpbmcgZWxzZSAoc2VlIEJhc2ljQXV0aC50czozMSkuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmJhc2ljQXV0aC51cGRhdGVDcmVkZW50aWFscyh7XG4gICAgICB0ZW5hbnQ6IGNyZWRlbnRpYWxzLnRlbmFudCxcbiAgICAgIHVzZXI6IGNyZWRlbnRpYWxzLnVzZXJcbiAgICB9KTtcbiAgICBjb25zdCBuZXdDcmVkZW50aWFscyA9IHsgdG9rZW4sIC4uLmNyZWRlbnRpYWxzIH07XG5cbiAgICByZXR1cm4gYXV0aFN0cmF0ZWd5LnVwZGF0ZUNyZWRlbnRpYWxzKG5ld0NyZWRlbnRpYWxzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBpZiB0aGUgY3VycmVudCB1c2VyIGlzIGEgZGV2ZWxvcGVyIG9yIG5vdC5cbiAgICogUnVubmluZyBvbiBsb2NhbGhvc3QgbWVhbnMgZGV2ZWxvcG1lbnQgbW9kZS5cbiAgICovXG4gIHByaXZhdGUgaXNMb2NhbCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBob3N0bmFtZSA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGhvc3RJcFJlZ0V4cC50ZXN0KGhvc3RuYW1lKSB8fCB0aGlzLmxvY2FsaG9zdFJlZ0V4cC50ZXN0KGhvc3RuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIHRoZSB0b2tlbiB0byBsb2NhbCBvciBzZXNzaW9uIHN0b3JhZ2UuXG4gICAqIEBwYXJhbSB0b2tlbiBUaGUgdG9rZW4gdG8gc2F2ZS5cbiAgICogQHBhcmFtIHN0b3JhZ2UgVGhlIHN0b3JhZ2UgdG8gdXNlIChsb2NhbCBvciBzZXNzaW9uKS5cbiAgICovXG4gIHByaXZhdGUgc2F2ZVRva2VuKHRva2VuOiBzdHJpbmcsIHN0b3JhZ2U6IFN0b3JhZ2UpIHtcbiAgICBzdG9yYWdlLnNldEl0ZW0odGhpcy5UT0tFTl9LRVksIHRva2VuKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcmVCYXNpY0F1dGhUb2tlbih0b2tlbjogc3RyaW5nKSB7XG4gICAgdGhpcy5zYXZlVG9rZW4odG9rZW4sIHNlc3Npb25TdG9yYWdlKTtcbiAgICBpZiAodGhpcy5yZW1lbWJlck1lKSB7XG4gICAgICB0aGlzLnNhdmVUb2tlbih0b2tlbiwgbG9jYWxTdG9yYWdlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFuTG9jYWxTdG9yYWdlKCkge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuVE9LRU5fS0VZKTtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlRGQVRPS0VOX0tFWSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuU2Vzc2lvblN0b3JhZ2UoKSB7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlRPS0VOX0tFWSk7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlRGQVRPS0VOX0tFWSk7XG4gIH1cblxuICBwcml2YXRlIGlzU2hvd1RlbmFudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93VGVuYW50UmVnRXhwLnRlc3Qod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWRpcmVjdCh1cmw6IHN0cmluZykge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRCYXNpY0F1dGhMb2dpbk9wdGlvbihyZWZyZXNoPyk6IFByb21pc2U8SVRlbmFudExvZ2luT3B0aW9uPiB7XG4gICAgaWYgKHJlZnJlc2gpIHtcbiAgICAgIGF3YWl0IHRoaXMudWkucmVmcmVzaExvZ2luT3B0aW9ucygpO1xuICAgIH1cbiAgICBjb25zdCBsb2dpbk9wdGlvbnMgPSB0aGlzLnVpLnN0YXRlLmxvZ2luT3B0aW9ucyB8fCBbXTtcbiAgICBjb25zdCBiYXNpY0F1dGhMb2dpbk9wdGlvbiA9IGxvZ2luT3B0aW9ucy5maW5kKCh7IHR5cGUgfSkgPT4gdHlwZSA9PT0gJ0JBU0lDJyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShiYXNpY0F1dGhMb2dpbk9wdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzdXBwb3J0IHVzZXIgbmFtZSBmcm9tIGNyZWRlbnRpYWxzLlxuICAgKiBAcGFyYW0gY3JlZGVudGlhbHMgQ3JlZGVudGlhbHMgb2JqZWN0IChkZWZhdWx0cyB0byB0aGUgc3RvcmVkIG9uZSkuXG4gICAqIEByZXR1cm5zIFN1cHBvcnQgdXNlciBuYW1lLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdXBwb3J0VXNlck5hbWUoY3JlZGVudGlhbHM6IElDcmVkZW50aWFscyA9IHRoaXMuZ2V0U3RvcmVkQ3JlZGVudGlhbHMoKSk6IHN0cmluZyB7XG4gICAgaWYgKCFjcmVkZW50aWFscykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHN1cHBvcnRVc2VyTmFtZSA9IGNyZWRlbnRpYWxzLnVzZXIubWF0Y2goL14oLitcXC8pPygoLispXFwkKT8oLispPyQvKVszXTtcbiAgICByZXR1cm4gc3VwcG9ydFVzZXJOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY3JlZGVudGlhbHMgb2JqZWN0IGZyb20gdGhlIHN0b3JlZCB0b2tlbi5cbiAgICogQHJldHVybnMgQ3JlZGVudGlhbHMgb2JqZWN0LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdG9yZWRDcmVkZW50aWFscygpOiBJQ3JlZGVudGlhbHMge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRTdG9yZWRUb2tlbigpO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWNvZGVUb2tlbih0b2tlbik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzdG9yZWQgdG9rZW4gZnJvbSBsb2NhbCBzdG9yYWdlIG9yIHNlc3Npb24gc3RvcmFnZS5cbiAgICogQHJldHVybnMgU3RvcmVkIHRva2VuLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdG9yZWRUb2tlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlRPS0VOX0tFWSkgfHwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlRPS0VOX0tFWSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzdG9yZWQgVEZBIHRva2VuIGZyb20gbG9jYWwgc3RvcmFnZSBvciBzZXNzaW9uIHN0b3JhZ2UuXG4gICAqIEByZXR1cm5zIFN0b3JlZCBURkEgdG9rZW4uXG4gICAqL1xuICBwcml2YXRlIGdldFN0b3JlZFRmYVRva2VuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuVEZBVE9LRU5fS0VZKSB8fCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuVEZBVE9LRU5fS0VZKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIHRva2VuIHRvIGNyZWRlbnRpYWxzIG9iamVjdC5cbiAgICogQHBhcmFtIHRva2VuIFRva2VuIHRvIGRlY29kZS5cbiAgICogQHJldHVybnMgQ3JlZGVudGlhbHMgb2JqZWN0LlxuICAgKi9cbiAgcHJpdmF0ZSBkZWNvZGVUb2tlbih0b2tlbjogc3RyaW5nKTogSUNyZWRlbnRpYWxzIHtcbiAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZSh3aW5kb3cuYXRvYih0b2tlbikpKTtcbiAgICBjb25zdCBzcGxpdCA9IGRlY29kZWQubWF0Y2goLygoW14vXSopXFwvKT8oW14vOl0rKTooLispLyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGVuYW50OiBzcGxpdFsyXSxcbiAgICAgIHVzZXI6IHNwbGl0WzNdLFxuICAgICAgcGFzc3dvcmQ6IHNwbGl0WzRdXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VXJsRm9yT2F1dGgoY3JlZGVudGlhbHM6IElDcmVkZW50aWFscykge1xuICAgIGlmIChpc0VtcHR5KGNyZWRlbnRpYWxzLnRlbmFudCkgJiYgdGhpcy5sb2dpbk1vZGUuaW5pdFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXModGhpcy5sb2dpbk1vZGUuaW5pdFJlcXVlc3Quc3BsaXQoJz8nKS5wb3AoKSk7XG4gICAgICBjcmVkZW50aWFscy50ZW5hbnQgPSB1cmxQYXJhbXMuZ2V0KCd0ZW5hbnRfaWQnKTtcbiAgICB9XG4gICAgcmV0dXJuICFpc0VtcHR5KGNyZWRlbnRpYWxzLnRlbmFudClcbiAgICAgID8gYHRlbmFudC9vYXV0aD90ZW5hbnRfaWQ9JHtjcmVkZW50aWFscy50ZW5hbnR9YFxuICAgICAgOiBgdGVuYW50L29hdXRoYDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0TWFuYWdlbWVudExvZ2luTW9kZSgpIHtcbiAgICBjb25zdCBtYW5hZ2VtZW50TG9naW5PcHRpb25zID0gKGF3YWl0IHRoaXMudGVuYW50TG9naW5PcHRpb25zU2VydmljZS5saXN0Rm9yTWFuYWdlbWVudCgpKS5kYXRhO1xuICAgIHJldHVybiB0aGlzLnRlbmFudFVpU2VydmljZS5nZXRQcmVmZXJyZWRMb2dpbk9wdGlvbihtYW5hZ2VtZW50TG9naW5PcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlRXJyb3JTdGF0dXNDb2RlcyhyZXNwb25zZTogSUZldGNoUmVzcG9uc2UpOiBQcm9taXNlPElGZXRjaFJlc3BvbnNlPiB7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA+PSA0MDApIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICBjb25zdCBlcnJvciA9IGRhdGEubWVzc2FnZSB8fCBkYXRhLmVycm9yX2Rlc2NyaXB0aW9uIHx8IGRhdGEuZXJyb3I7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG59XG4iXX0=
628
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvbG9naW4vbG9naW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUNMLFNBQVMsRUFDVCw0QkFBNEIsRUFDNUIsVUFBVSxFQUNWLFdBQVcsRUFLWCxRQUFRLEVBQ1IseUJBQXlCLEVBQ3pCLGFBQWEsRUFDYixXQUFXLEVBQ1osTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7QUFFaEQ7O0dBRUc7QUFFSCxNQUFNLE9BQU8sWUFBWTtJQStE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QUMsc0JBQXNCO1FBQ2xDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQy9GLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFTyxLQUFLLENBQUMsc0JBQXNCLENBQUMsUUFBd0I7UUFDM0QsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDbkUsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQzs4R0EzcUJVLFlBQVk7a0hBQVosWUFBWTs7MkZBQVosWUFBWTtrQkFEeEIsVUFBVTs7MEJBK0VOLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJhc2ljQXV0aCxcbiAgQmVhcmVyQXV0aEZyb21TZXNzaW9uU3RvcmFnZSxcbiAgQ29va2llQXV0aCxcbiAgRmV0Y2hDbGllbnQsXG4gIElBdXRoZW50aWNhdGlvbixcbiAgSUNyZWRlbnRpYWxzLFxuICBJRmV0Y2hSZXNwb25zZSxcbiAgSVRlbmFudExvZ2luT3B0aW9uLFxuICBSZWFsdGltZSxcbiAgVGVuYW50TG9naW5PcHRpb25zU2VydmljZSxcbiAgVGVuYW50U2VydmljZSxcbiAgVXNlclNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQXBwU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3VpLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi4vYWxlcnQvYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnLi4vaTE4bi9nZXR0ZXh0JztcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2FwaSc7XG5pbXBvcnQgeyBUZW5hbnRVaVNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdGVuYW50LXVpLnNlcnZpY2UnO1xuaW1wb3J0IHsgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBFTVBUWSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTG9jYXRpb25TdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBnZXQsIGlzRW1wdHksIGlzU3RyaW5nIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJy4uL21vZGFsL21vZGFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RhdHVzIH0gZnJvbSAnLi4vY29tbW9uL3N0YXR1cy5tb2RlbCc7XG5cbi8qKlxuICogU2VydmljZSB0byBtYW5hZ2UgdGhlIGxvZ2luLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTG9naW5TZXJ2aWNlIHtcbiAgcmVtZW1iZXJNZSA9IGZhbHNlO1xuICBUT0tFTl9LRVkgPSAnX3RjeTgnO1xuICBURkFUT0tFTl9LRVkgPSAnVEZBVG9rZW4nO1xuICBsb2dpbk1vZGU6IElUZW5hbnRMb2dpbk9wdGlvbjtcbiAgbWFuYWdlbWVudExvZ2luTW9kZTogSVRlbmFudExvZ2luT3B0aW9uO1xuICBvYXV0aE9wdGlvbnM6IElUZW5hbnRMb2dpbk9wdGlvbjtcbiAgaXNGaXJzdExvZ2luID0gdHJ1ZTtcbiAgR1JFRU5fTUlOX0xFTkdUSF9ERUZBVUxUID0gODtcbiAgYXV0b21hdGljTG9naW5JblByb2dyZXNzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuXG4gIC8vIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aFxuICBFUlJPUl9NRVNTQUdFUyA9IHtcbiAgICBtaW5sZW5ndGg6IGdldHRleHQoJ1Bhc3N3b3JkIG11c3QgaGF2ZSBhdCBsZWFzdCA4IGNoYXJhY3RlcnMgYW5kIG5vIG1vcmUgdGhhbiAzMi4nKSxcbiAgICBwYXNzd29yZF9taXNzbWF0Y2g6IGdldHRleHQoJ1Bhc3N3b3JkcyBkbyBub3QgbWF0Y2guJyksXG4gICAgbWF4bGVuZ3RoOiBnZXR0ZXh0KCdQYXNzd29yZCBtdXN0IGhhdmUgYXQgbGVhc3QgOCBjaGFyYWN0ZXJzIGFuZCBubyBtb3JlIHRoYW4gMzIuJyksXG4gICAgcGFzc3dvcmRfc3RyZW5ndGg6IGdldHRleHQoXG4gICAgICAnWW91ciBwYXNzd29yZCBpcyBub3Qgc3Ryb25nIGVub3VnaC4gUGxlYXNlIGluY2x1ZGUgbnVtYmVycywgbG93ZXIgYW5kIHVwcGVyIGNhc2UgY2hhcmFjdGVycydcbiAgICApLFxuICAgIHJlbW90ZV9lcnJvcjogZ2V0dGV4dCgnU2VydmVyIGVycm9yIG9jY3VycmVkLicpLFxuICAgIGVtYWlsOiBnZXR0ZXh0KCdJbnZhbGlkIGVtYWlsIGFkZHJlc3MuJyksXG4gICAgcGFzc3dvcmRfY2hhbmdlOiBnZXR0ZXh0KCdZb3VyIHBhc3N3b3JkIGlzIGV4cGlyZWQuIFBsZWFzZSBzZXQgYSBuZXcgcGFzc3dvcmQuJyksXG4gICAgcGFzc3dvcmRfcmVzZXRfdG9rZW5fZXhwaXJlZDogZ2V0dGV4dChcbiAgICAgICdQYXNzd29yZCByZXNldCBsaW5rIGV4cGlyZWQuIFBsZWFzZSBlbnRlciB5b3VyIGVtYWlsIGFkZHJlc3MgdG8gcmVjZWl2ZSBhIG5ldyBvbmUuJ1xuICAgICksXG4gICAgdGZhX3Bpbl9pbnZhbGlkOiBnZXR0ZXh0KCdUaGUgY29kZSB5b3UgZW50ZXJlZCBpcyBpbnZhbGlkLiBQbGVhc2UgdHJ5IGFnYWluLicpLFxuICAgIHBhdHRlcm5fbmV3UGFzc3dvcmQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgZ2V0dGV4dChcbiAgICAgICAgJ1Bhc3N3b3JkIG11c3QgaGF2ZSBhdCBsZWFzdCA4IGNoYXJhY3RlcnMgYW5kIG5vIG1vcmUgdGhhbiAzMiBhbmQgY2FuIG9ubHkgY29udGFpbiBsZXR0ZXJzLCBudW1iZXJzIGFuZCBmb2xsb3dpbmcgc3ltYm9sczoge3sgc3ltYm9scyB9fSdcbiAgICAgICksXG4gICAgICB7IHN5bWJvbHM6ICdgfiFAIyQlXiYqKClffCstPT87OlxcJ1wiLC48Pnt9W11cXFxcLycgfVxuICAgICksXG4gICAgaW50ZXJuYXRpb25hbFBob25lTnVtYmVyOiBnZXR0ZXh0KFxuICAgICAgJ011c3QgYmUgYSB2YWxpZCBwaG9uZSBudW1iZXIgKG9ubHkgZGlnaXRzLCBzcGFjZXMsIHNsYXNoZXMgKFwiL1wiKSwgZGFzaGVzIChcIi1cIiksIGFuZCBwbHVzIChcIitcIikgYWxsb3dlZCwgZm9yIGV4YW1wbGU6ICs0OSA5IDg3NiA1NDMgMjEwKS4nXG4gICAgKSxcbiAgICBwaG9uZV9udW1iZXJfZXJyb3I6IGdldHRleHQoJ0NvdWxkIG5vdCB1cGRhdGUgcGhvbmUgbnVtYmVyLicpLFxuICAgIHBpbkFscmVhZHlTZW50OiBnZXR0ZXh0KFxuICAgICAgJ1RoZSB2ZXJpZmljYXRpb24gY29kZSB3YXMgYWxyZWFkeSBzZW50LiBGb3IgYSBuZXcgdmVyaWZpY2F0aW9uIGNvZGUsIHBsZWFzZSBjbGljayBvbiB0aGUgbGluayBhYm92ZS4nXG4gICAgKSxcbiAgICBwYXNzd29yZENvbmZpcm06IGdldHRleHQoJ1Bhc3N3b3JkcyBkbyBub3QgbWF0Y2guJyksXG4gICAgdGZhRXhwaXJlZDogZ2V0dGV4dCgnVHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiB0b2tlbiBleHBpcmVkLicpXG4gIH07XG4gIC8vIHRzbGludDplbmFibGU6bWF4LWxpbmUtbGVuZ3RoXG5cbiAgcHJpdmF0ZSBTVUNDRVNTX01FU1NBR0VTID0ge1xuICAgIHBhc3N3b3JkX2NoYW5nZWQ6IGdldHRleHQoJ1Bhc3N3b3JkIGNoYW5nZWQuIFlvdSBjYW4gbm93IGxvZyBpbiB1c2luZyBuZXcgcGFzc3dvcmQuJyksXG4gICAgcGFzc3dvcmRfcmVzZXRfcmVxdWVzdGVkOiBnZXR0ZXh0KFxuICAgICAgJ1Bhc3N3b3JkIHJlc2V0IHJlcXVlc3QgaGFzIGJlZW4gc2VudC4gUGxlYXNlIGNoZWNrIHlvdXIgZW1haWwuJ1xuICAgICksXG4gICAgcmVzZW5kX3NtczogZ2V0dGV4dCgnVmVyaWZpY2F0aW9uIGNvZGUgU01TIHJlc2VudC4nKSxcbiAgICBzZW5kX3NtczogZ2V0dGV4dCgnVmVyaWZpY2F0aW9uIGNvZGUgU01TIHNlbnQuJylcbiAgfTtcblxuICBwcml2YXRlIHBhc3N3b3JkU3RyZW5ndGhTZXR0aW5nID0ge1xuICAgIGVuZm9yY2VQYXNzd29yZFN0cmVuZ3RoOiBmYWxzZSxcbiAgICBncmVlbk1pbkxlbmd0aDogdGhpcy5HUkVFTl9NSU5fTEVOR1RIX0RFRkFVTFQsXG4gICAgcGFzc3dvcmRTdHJlbmd0aFZhbGlkaXR5OiBmYWxzZVxuICB9O1xuXG4gIHByaXZhdGUgbG9jYWxob3N0UmVnRXhwID0gbmV3IFJlZ0V4cCgnbG9jYWxob3N0Jyk7XG4gIHByaXZhdGUgbG9jYWxob3N0SXBSZWdFeHAgPSBuZXcgUmVnRXhwKCcxMjcuMC4wLjEnKTtcbiAgcHJpdmF0ZSBzaG93VGVuYW50UmVnRXhwID0gbmV3IFJlZ0V4cCgnc2hvd1RlbmFudCcpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgY2xpZW50OiBGZXRjaENsaWVudCxcbiAgICBwcml2YXRlIGJhc2ljQXV0aDogQmFzaWNBdXRoLFxuICAgIHByaXZhdGUgY29va2llQXV0aDogQ29va2llQXV0aCxcbiAgICBwcml2YXRlIHVpOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyOiBVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudDogVGVuYW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWx0aW1lOiBSZWFsdGltZSxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhcGk6IEFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW5hbnRVaVNlcnZpY2U6IFRlbmFudFVpU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudExvZ2luT3B0aW9uc1NlcnZpY2U6IFRlbmFudExvZ2luT3B0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb25TdHJhdGVneVxuICApIHtcbiAgICB0aGlzLmF1dG9Mb2dvdXQoKTtcbiAgICB0aGlzLmluaXRMb2dpbk9wdGlvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRlbmFudC5cbiAgICogQHJldHVybiBUaGUgdGVuYW50IG5hbWUuXG4gICAqL1xuICBnZXRUZW5hbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnRlbmFudDtcbiAgfVxuXG4gIGluaXRMb2dpbk9wdGlvbnMoKSB7XG4gICAgY29uc3QgbG9naW5PcHRpb25zID0gdGhpcy51aS5zdGF0ZS5sb2dpbk9wdGlvbnMgfHwgW107XG4gICAgdGhpcy5sb2dpbk1vZGUgPSB0aGlzLnRlbmFudFVpU2VydmljZS5nZXRQcmVmZXJyZWRMb2dpbk9wdGlvbihsb2dpbk9wdGlvbnMpO1xuICAgIHRoaXMub2F1dGhPcHRpb25zID1cbiAgICAgIHRoaXMudGVuYW50VWlTZXJ2aWNlLmdldE9hdXRoMk9wdGlvbihsb2dpbk9wdGlvbnMpIHx8ICh7fSBhcyBJVGVuYW50TG9naW5PcHRpb24pO1xuICB9XG5cbiAgcmVkaXJlY3RUb09hdXRoKCkge1xuICAgIGNvbnN0IHsgaW5pdFJlcXVlc3QsIGZsb3dDb250cm9sbGVkQnlVSSB9ID0gdGhpcy5vYXV0aE9wdGlvbnM7XG4gICAgY29uc3QgZnVsbFBhdGggPSBgJHt3aW5kb3cubG9jYXRpb24ub3JpZ2lufSR7d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfWA7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBlbmNvZGVVUklDb21wb25lbnQoZnVsbFBhdGgpO1xuICAgIGNvbnN0IG9yaWdpblVyaVBhcmFtID0gYCR7aW5pdFJlcXVlc3QuaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/J31vcmlnaW5Vcmk9JHtyZWRpcmVjdFVybH1gO1xuICAgIGNvbnN0IHVybE9iamVjdCA9IG5ldyBVUkwoaW5pdFJlcXVlc3QpO1xuXG4gICAgaWYgKGZsb3dDb250cm9sbGVkQnlVSSkge1xuICAgICAgdGhpcy5jbGllbnRcbiAgICAgICAgLmZldGNoKGAvdGVuYW50L29hdXRoJHt1cmxPYmplY3Quc2VhcmNofSR7b3JpZ2luVXJpUGFyYW19YClcbiAgICAgICAgLnRoZW4ocmVzID0+IHRoaXMuaGFuZGxlRXJyb3JTdGF0dXNDb2RlcyhyZXMpKVxuICAgICAgICAudGhlbihyZXMgPT4gcmVzLmpzb24oKSlcbiAgICAgICAgLnRoZW4oKHJlczogYW55KSA9PiAod2luZG93LmxvY2F0aW9uLmhyZWYgPSByZXMucmVkaXJlY3RUbykpXG4gICAgICAgIC5jYXRjaChleCA9PiB0aGlzLnNob3dTc29FcnJvcihleCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGAke2luaXRSZXF1ZXN0fSR7b3JpZ2luVXJpUGFyYW19YDtcbiAgICB9XG4gIH1cblxuICBsb2dpbkJ5U3NvKHNlc3Npb25TdGF0ZTogc3RyaW5nLCBjb2RlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICBBY2NlcHQ6ICd0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sJ1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50XG4gICAgICAuZmV0Y2goYC90ZW5hbnQvb2F1dGg/c2Vzc2lvbl9zdGF0ZT0ke3Nlc3Npb25TdGF0ZX0mY29kZT0ke2NvZGV9YCwgcGFyYW1zKVxuICAgICAgLnRoZW4ocmVzID0+IHRoaXMuaGFuZGxlRXJyb3JTdGF0dXNDb2RlcyhyZXMpKVxuICAgICAgLmNhdGNoKGV4ID0+IHtcbiAgICAgICAgdGhpcy5zaG93U3NvRXJyb3IoZXgpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgYXV0b0xvZ291dCgpIHtcbiAgICBjb25zdCBlcnJvclBhdHRlcm4gPSAvaW52YWxpZFxcc2NyZWRlbnRpYWxzLipwaW4uKmdlbmVyYXRlL2k7XG4gICAgY29uc3QgaXNUZmFFeHBpcmVkID0gZGF0YSA9PlxuICAgICAgZGF0YSAmJiB0eXBlb2YgZGF0YS5tZXNzYWdlID09PSAnc3RyaW5nJyAmJiBlcnJvclBhdHRlcm4udGVzdChkYXRhLm1lc3NhZ2UpO1xuICAgIHRoaXMudWkuY3VycmVudFVzZXJcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAodSA9PlxuICAgICAgICAgIHUgPyB0aGlzLmFwaS5ob29rUmVzcG9uc2UoKHsgcmVzcG9uc2UgfSkgPT4gcmVzcG9uc2Uuc3RhdHVzID09PSA0MDEpIDogRU1QVFlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShhc3luYyAoYXBpQ2FsbDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGFwaUNhbGw7XG4gICAgICAgIGxldCB3aWxsTG9nb3V0ID0gZmFsc2U7XG4gICAgICAgIGlmIChpc1RmYUV4cGlyZWQocmVzcG9uc2UuZGF0YSkpIHtcbiAgICAgICAgICB3aWxsTG9nb3V0ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlc3BvbnNlLmpzb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5jbG9uZSgpLmpzb24oKTtcbiAgICAgICAgICAgIGlmIChpc1RmYUV4cGlyZWQoZGF0YSkpIHtcbiAgICAgICAgICAgICAgd2lsbExvZ291dCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh3aWxsTG9nb3V0KSB7XG4gICAgICAgICAgdGhpcy5sb2dvdXQoZmFsc2UpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hbGVydC5kYW5nZXIodGhpcy5FUlJPUl9NRVNTQUdFUy50ZmFFeHBpcmVkKSwgNTAwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbWluaW1hbCBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IGEgcGFzc3dvcmQgc2hvdWxkIGhhdmUgdG8gYmUgY29uc2lkZXJlZCBhIOKAnGdyZWVu4oCdIHN0cm9uZyBvbmUuXG4gICAqIEByZXR1cm4gVGhlIG1pbiBsZW5ndGggZm9yIHBhc3N3b3JkIG9yIGRlZmF1bHQgdmFsdWUuXG4gICAqL1xuICBhc3luYyBnZXRHcmVlbk1pbkxlbmd0aCgpIHtcbiAgICBjb25zdCB7IGdyZWVuTWluTGVuZ3RoIH0gPSAoYXdhaXQgdGhpcy5nZXRCYXNpY0F1dGhMb2dpbk9wdGlvbigpKSB8fCB7IGdyZWVuTWluTGVuZ3RoOiBudWxsIH07XG4gICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5ncmVlbk1pbkxlbmd0aCA9IGdyZWVuTWluTGVuZ3RoIHx8IHRoaXMuR1JFRU5fTUlOX0xFTkdUSF9ERUZBVUxUO1xuICAgIHJldHVybiB0aGlzLnBhc3N3b3JkU3RyZW5ndGhTZXR0aW5nLmdyZWVuTWluTGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBwYXNzd29yZCBzdHJlbmd0aCBpcyBlbmZvcmNlZCBmb3Igc3lzdGVtXG4gICAqIGJ5IHJldHJpZXZpbmcgdmFsdWUgb2YgYGVuZm9yY2VTdHJlbmd0aGAgcHJvcGVydHkgZnJvbSBsb2dpbk9wdGlvbnMgcmVzcG9uc2VcbiAgICogQHBhcmFtIHJlZnJlc2ggYm9vbGVhbiB1c2VkIHRvIHJlZnJlc2ggdGhlIGFwcCBzdGF0ZSB3aGVyZSByZXN1bHQgb2YgbG9naW5PcHRpb25zIHJlc3BvbnNlIGlzIHN0b3JlZC5cbiAgICogSWYgZmFsc2UsIGl0IHRha2VzIHZhbHVlIGZyb20gbWVtb3J5LFxuICAgKiBpZiB0cnVlLCBpdCByZWZyZXNoIHRoZSBhcHAgc3RhdGUgdmFsdWUgYW5kIHRoZW4gcmV0cml2ZXMgZGF0YS5cbiAgICogQHJldHVybiBib29sZWFuIHZhbHVlLCB0cnVlIGlmIGVuZm9yY2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBhc3luYyBnZXRFbmZvcmNlUGFzc3dvcmRTdHJlbmd0aChyZWZyZXNoPykge1xuICAgIHJldHVybiB0aGlzLmdldEJhc2ljQXV0aExvZ2luT3B0aW9uKHJlZnJlc2gpLnRoZW4obG9naW5PcHRpb24gPT4ge1xuICAgICAgY29uc3QgZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGggPSBnZXQobG9naW5PcHRpb24sICdlbmZvcmNlU3RyZW5ndGgnKTtcbiAgICAgIGlmIChpc1N0cmluZyhlbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCkpIHtcbiAgICAgICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5lbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCA9XG4gICAgICAgICAgZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGggPT09ICd0cnVlJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aFNldHRpbmcuZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGggPSAhIWVuZm9yY2VQYXNzd29yZFN0cmVuZ3RoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucGFzc3dvcmRTdHJlbmd0aFNldHRpbmcuZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGg7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHBhc3N3b3JkIHN0cmVuZ3RoIGlzIGVuZm9yY2VkIGZvciBwYXJ0aWN1bGFyIHRlbmFudFxuICAgKiBieSByZXRyaWV2aW5nIHZhbHVlIG9mIGBzdHJlbmd0aFZhbGlkaXR5YCBwcm9wZXJ0eSBmcm9tIGxvZ2luT3B0aW9ucyByZXNwb25zZVxuICAgKiBAcGFyYW0gcmVmcmVzaCBib29sZWFuIHVzZWQgdG8gcmVmcmVzaCB0aGUgYXBwIHN0YXRlIHdoZXJlIHJlc3VsdCBvZiBsb2dpbk9wdGlvbnMgcmVzcG9uc2UgaXMgc3RvcmVkLlxuICAgKiBJZiBmYWxzZSwgaXQgdGFrZXMgdmFsdWUgZnJvbSBtZW1vcnksXG4gICAqIGlmIHRydWUsIGl0IHJlZnJlc2ggdGhlIGFwcCBzdGF0ZSB2YWx1ZSBhbmQgdGhlbiByZXRyaXZlcyBkYXRhLlxuICAgKiBAcmV0dXJuIGJvb2xlYW4gdmFsdWUsIHRydWUgaWYgZW5mb3JjZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGFzeW5jIGdldFBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eShyZWZyZXNoPykge1xuICAgIHJldHVybiB0aGlzLmdldEJhc2ljQXV0aExvZ2luT3B0aW9uKHJlZnJlc2gpLnRoZW4obG9naW5PcHRpb24gPT4ge1xuICAgICAgY29uc3Qgc3RyZW5ndGhWYWxpZGl0eSA9IGdldChsb2dpbk9wdGlvbiwgJ3N0cmVuZ3RoVmFsaWRpdHknKTtcbiAgICAgIGlmIChpc1N0cmluZyhzdHJlbmd0aFZhbGlkaXR5KSkge1xuICAgICAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhTZXR0aW5nLnBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eSA9XG4gICAgICAgICAgc3RyZW5ndGhWYWxpZGl0eSA9PT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5wYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHkgPSAhIXN0cmVuZ3RoVmFsaWRpdHk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5wYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBlbmZvcmNlZCBzdHJlbmd0aCBjaGVja3Mgc2hvdWxkIGJlIGVuYWJsZWQgZm9yIGN1cnJlbnQgdGVuYW50XG4gICAqIGJhc2VkIG9uIHByb3BlcnRpZXMgcmV0cmlldmVkIGZyb20gbG9naW5PcHRpb25zXG4gICAqIEBwYXJhbSBvcHRpb25zIG9iamVjdCBjb250YWluaW5nIHNwZWNpZmljIG9wdGlvbnM6XG4gICAqICAgIC0ge3JlZnJlc2g6IHRydWV9IC0gcmVmcmVzaGVzIHZhbHVlcyBvZiBhcHAgc3RhdGUgYW5kIHJldHVybnMgZnJlc2ggdmFsdWVzIGFzIHJlc3VsdCBvZiBjYWxsXG4gICAqIEByZXR1cm4gYm9vbGVhbiB2YWx1ZSwgdHJ1ZSBpZiBzdHJlbmd0aCBpcyBlbmZvcmNlZCBmb3IgdGVuYW50LCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBhc3luYyBnZXRQYXNzd29yZFN0cmVuZ3RoRW5mb3JjZWQob3B0aW9ucz8pIHtcbiAgICBjb25zdCByZWZyZXNoID0gb3B0aW9ucyAmJiBvcHRpb25zLnJlZnJlc2g7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuZ2V0RW5mb3JjZVBhc3N3b3JkU3RyZW5ndGgocmVmcmVzaCksXG4gICAgICB0aGlzLmdldFBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eShyZWZyZXNoKVxuICAgIF0pLnRoZW4odmFsdWVzID0+IHtcbiAgICAgIGNvbnN0IFtlbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCwgcGFzc3dvcmRTdHJlbmd0aFZhbGlkaXR5XSA9IHZhbHVlcztcbiAgICAgIHJldHVybiBlbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCB8fCBwYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIGFsbCBiYWNrZW5kIGVycm9ycy5cbiAgICovXG4gIGNsZWFuTWVzc2FnZXMoKSB7XG4gICAgdGhpcy5hbGVydC5jbGVhckFsbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgc3VjY2VzcyBtZXNzYWdlXG4gICAqIEBwYXJhbSBzdWNjZXNzS2V5IFRoZSBrZXkgb2YgdGhlIHN1Y2Nlc3MgbWVzc2FnZSBhcyB1c2VkIGluIFNVQ0NFU1NfTUVTU0FHRVNcbiAgICovXG4gIGFkZFN1Y2Nlc3NNZXNzYWdlKHN1Y2Nlc3NLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IHN1Y2Nlc3NNZXNzYWdlID0gdGhpcy5TVUNDRVNTX01FU1NBR0VTW3N1Y2Nlc3NLZXldO1xuICAgIGlmIChzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgdGhpcy5hbGVydC5hZGQoe1xuICAgICAgICB0ZXh0OiBzdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICB0aW1lb3V0OiAwXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBzdHJhdGVneS4gRGVmYXVsdHMgdG8gY29va2llLCBpZiBhIHRva2VuXG4gICAqIGlzIGZvdW5kIGluIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZSB3ZSBzd2l0Y2ggdG8gYmFzaWMgYXV0aC5cbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgYXV0aCBzdHJhdGVneS5cbiAgICovXG4gIGdldEF1dGhTdHJhdGVneSgpOiBJQXV0aGVudGljYXRpb24ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhdXRoU3RyYXRlZ3kgPSBuZXcgQmVhcmVyQXV0aEZyb21TZXNzaW9uU3RvcmFnZSgpO1xuICAgICAgY29uc29sZS5sb2coYFVzaW5nIEJlYXJlckF1dGhGcm9tU2Vzc2lvblN0b3JhZ2VgKTtcbiAgICAgIHJldHVybiBhdXRoU3RyYXRlZ3k7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH1cbiAgICBsZXQgYXV0aFN0cmF0ZWd5OiBJQXV0aGVudGljYXRpb24gPSB0aGlzLmNvb2tpZUF1dGg7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFN0b3JlZFRva2VuKCk7XG4gICAgY29uc3QgdGZhID0gdGhpcy5nZXRTdG9yZWRUZmFUb2tlbigpO1xuICAgIGlmICh0b2tlbikge1xuICAgICAgYXV0aFN0cmF0ZWd5ID0gdGhpcy5iYXNpY0F1dGg7XG4gICAgICB0aGlzLnNldENyZWRlbnRpYWxzKHsgdG9rZW4sIHRmYSB9LCB0aGlzLmJhc2ljQXV0aCk7XG4gICAgfVxuICAgIHJldHVybiBhdXRoU3RyYXRlZ3k7XG4gIH1cblxuICAvKipcbiAgICogRm9yY2VzIHRoZSB1c2Ugb2YgYmFzaWMgYXV0aCBhcyBzdHJhdGVneSB3aXRoIHRoaXMgY3JlZGVudGlhbHMuXG4gICAqIEBwYXJhbSBjcmVkZW50aWFscyBUaGUgY3JlZGVudGlhbHMgdG8gdXNlLlxuICAgKi9cbiAgdXNlQmFzaWNBdXRoKGNyZWRlbnRpYWxzOiBJQ3JlZGVudGlhbHMpIHtcbiAgICB0aGlzLnNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzLCB0aGlzLmJhc2ljQXV0aCk7XG4gICAgcmV0dXJuIHRoaXMuYmFzaWNBdXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWVzIHRvIGxvZ2luIGEgdXNlciB3aXRoIHRoZSBnaXZlbiBjcmVkZW50aWFscy5cbiAgICogSWYgc3VjY2Vzc2Z1bCwgdGhlIGN1cnJlbnQgdGVuYW50IGFuZCB1c2VyIGlzIHNldC4gSWYgbm90IGFuIGVycm9yXG4gICAqIGlzIHRocm93bi4gSXQgYWxzbyB2ZXJpZmllcyBpZiB0aGUgdXNlciBpcyBhbGxvd2VkIHRvIG9wZW4gdGhlXG4gICAqIGN1cnJlbnQgYXBwLlxuICAgKiBAcGFyYW0gYXV0aCBUaGUgYXV0aGVudGljYXRpb24gc3RyYXRlZ3kgdXNlZC5cbiAgICogQHBhcmFtIGNyZWRlbnRpYWxzIFRoZSBjcmVkZW50aWFscyB0byB0cnkgdG8gbG9naW4uXG4gICAqL1xuICBhc3luYyBsb2dpbihcbiAgICBhdXRoOiBJQXV0aGVudGljYXRpb24gPSB0aGlzLmdldEF1dGhTdHJhdGVneSgpLFxuICAgIGNyZWRlbnRpYWxzPzogSUNyZWRlbnRpYWxzXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFRvIGVuc3VyZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB3ZSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIHRoZSBiYWNrZW5kIHN1cHBvcnRzIFRGQVxuICAgIC8vIHdpdGhvdXQgcmVxdWlyaW5nIHRoZSB1c2Ugb2YgL3RlbmFudCB3aXRoIGF1dGg6IGJhc2U2NC4gVGhlIHRmYVN1cHBvcnRlZCBmbGFnIGluZGljYXRlc1xuICAgIC8vIHdoZXRoZXIgYXV0aGVudGljYXRpb24gaXMgcG9zc2libGUgZXhjbHVzaXZlbHkgdmlhIE9BSS1TRUNVUkUuXG4gICAgLy8gVGZhU3VwcG9ydGVkIGZsYWcgc2hvdWxkIGJlIHJlbW92ZWQgZHVyaW5nOiBNVE0tNjI2NDFcbiAgICBjb25zdCBpc09BSVNlY3VyZUFuZFRGQUlzU3VwcG9ydGVkID1cbiAgICAgICh0aGlzLnRlbmFudFVpU2VydmljZS5pc09hdXRoSW50ZXJuYWwodGhpcy5sb2dpbk1vZGUpICYmIHRoaXMubG9naW5Nb2RlLnRmYVN1cHBvcnRlZCkgfHxcbiAgICAgIGZhbHNlO1xuXG4gICAgaWYgKGlzT0FJU2VjdXJlQW5kVEZBSXNTdXBwb3J0ZWQgJiYgKGF3YWl0IHRoaXMuc3dpdGNoTG9naW5Nb2RlKGNyZWRlbnRpYWxzKSkpIHtcbiAgICAgIGF1dGggPSB0aGlzLmNvb2tpZUF1dGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xpZW50LnNldEF1dGgoYXV0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgdGVuYW50UmVzID0gYXdhaXQgdGhpcy50ZW5hbnQuY3VycmVudCh7IHdpdGhQYXJlbnQ6IHRydWUgfSk7XG4gICAgY29uc3QgdGVuYW50ID0gdGVuYW50UmVzLmRhdGE7XG5cbiAgICBpZiAoY3JlZGVudGlhbHMpIHtcbiAgICAgIGNyZWRlbnRpYWxzLnRlbmFudCA9IHRlbmFudC5uYW1lO1xuICAgIH1cblxuICAgIGlmICghaXNPQUlTZWN1cmVBbmRURkFJc1N1cHBvcnRlZCAmJiAoYXdhaXQgdGhpcy5zd2l0Y2hMb2dpbk1vZGUoY3JlZGVudGlhbHMpKSkge1xuICAgICAgYXV0aCA9IHRoaXMuY29va2llQXV0aDtcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyUmVzID0gYXdhaXQgdGhpcy51c2VyLmN1cnJlbnQoKTtcbiAgICBjb25zdCB1c2VyID0gdXNlclJlcy5kYXRhO1xuICAgIGF3YWl0IHRoaXMudmVyaWZ5QXBwQWNjZXNzKCk7XG5cbiAgICBjb25zdCBzdXBwb3J0VXNlck5hbWUgPSB0aGlzLmdldFN1cHBvcnRVc2VyTmFtZShjcmVkZW50aWFscyk7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLnNldENyZWRlbnRpYWxzKFxuICAgICAge1xuICAgICAgICB0ZW5hbnQ6IHRlbmFudC5uYW1lLFxuICAgICAgICB1c2VyOiAoc3VwcG9ydFVzZXJOYW1lID8gYCR7c3VwcG9ydFVzZXJOYW1lfSRgIDogJycpICsgdXNlci51c2VyTmFtZVxuICAgICAgfSxcbiAgICAgIGF1dGhcbiAgICApO1xuXG4gICAgaWYgKHRva2VuKSB7XG4gICAgICB0aGlzLnN0b3JlQmFzaWNBdXRoVG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuYXV0aEZ1bGZpbGxlZCh0ZW5hbnQsIHVzZXIsIHN1cHBvcnRVc2VyTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZXMgdGVuYW50LCB1c2VyIGFuZCBzdXBwb3J0IHVzZXIgaW5mbyB0byB0aGUgYXBwIHN0YXRlLlxuICAgKiBAcGFyYW0gdGVuYW50IFRoZSBjdXJyZW50IHRlbmFudCBvYmplY3QuXG4gICAqIEBwYXJhbSB1c2VyIFRoZSBjdXJyZW50IHVzZXIgb2JqZWN0LlxuICAgKiBAcGFyYW0gc3VwcG9ydFVzZXJOYW1lIFRoZSBjdXJyZW50IHN1cHBvcnQgdXNlciBuYW1lLlxuICAgKi9cbiAgYXN5bmMgYXV0aEZ1bGZpbGxlZCh0ZW5hbnQ/LCB1c2VyPywgc3VwcG9ydFVzZXJOYW1lPykge1xuICAgIGlmICghdGVuYW50KSB7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMudGVuYW50LmN1cnJlbnQoeyB3aXRoUGFyZW50OiB0cnVlIH0pO1xuICAgICAgdGVuYW50ID0gZGF0YTtcbiAgICAgIHRoaXMuY2xpZW50LnRlbmFudCA9IHRlbmFudC5uYW1lO1xuICAgIH1cblxuICAgIGlmICghdXNlcikge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLnVzZXIuY3VycmVudCgpO1xuICAgICAgdXNlciA9IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKCFzdXBwb3J0VXNlck5hbWUpIHtcbiAgICAgIHN1cHBvcnRVc2VyTmFtZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy51aS5zZXRVc2VyKHsgdXNlciwgc3VwcG9ydFVzZXJOYW1lIH0pO1xuICAgIHRoaXMudWkuY3VycmVudFRlbmFudC5uZXh0KHRlbmFudCk7XG4gIH1cblxuICAvKipcbiAgICogU3dpdGNoIHRoZSBsb2dpbiBtb2RlIHRvIENvb2tpZUF1dGggaWYgdGhlXG4gICAqIHVzZXIgaGFzIGNvbmZpZ3VyZWQgdG8gdXNlIGl0IGluIGxvZ2luT3B0aW9ucy5cbiAgICogQHBhcmFtIGNyZWRlbnRpYWxzIFRoZSBjcmVkZW50aWFscyBmb3IgdGhhdCBsb2dpblxuICAgKi9cbiAgYXN5bmMgc3dpdGNoTG9naW5Nb2RlKGNyZWRlbnRpYWxzPzogSUNyZWRlbnRpYWxzKSB7XG4gICAgY29uc3QgaXNQYXNzd29yZEdyYW50TG9naW4gPSBhd2FpdCB0aGlzLmlzUGFzc3dvcmRHcmFudExvZ2luKGNyZWRlbnRpYWxzKTtcbiAgICBpZiAoaXNQYXNzd29yZEdyYW50TG9naW4gJiYgY3JlZGVudGlhbHMpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ2VuZXJhdGVPYXV0aFRva2VuKGNyZWRlbnRpYWxzKTtcbiAgICAgIGlmICghKHJlcyBhcyBSZXNwb25zZSkub2spIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgICAgICB0aHJvdyB7IHJlcywgZGF0YSB9O1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmNsaWVudC5zZXRBdXRoKHRoaXMuY29va2llQXV0aCk7XG4gICAgICB0aGlzLmNsZWFuTG9jYWxTdG9yYWdlKCk7XG4gICAgICB0aGlzLmJhc2ljQXV0aC5sb2dvdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGlzUGFzc3dvcmRHcmFudExvZ2luO1xuICB9XG5cbiAgYXN5bmMgZ2VuZXJhdGVPYXV0aFRva2VuKGNyZWRlbnRpYWxzPzogSUNyZWRlbnRpYWxzKSB7XG4gICAgaWYgKChhd2FpdCB0aGlzLmlzUGFzc3dvcmRHcmFudExvZ2luKGNyZWRlbnRpYWxzKSkgJiYgY3JlZGVudGlhbHMpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICBncmFudF90eXBlOiAnUEFTU1dPUkQnLFxuICAgICAgICB1c2VybmFtZTogY3JlZGVudGlhbHMudXNlcixcbiAgICAgICAgcGFzc3dvcmQ6IGNyZWRlbnRpYWxzLnBhc3N3b3JkLFxuICAgICAgICAuLi4oY3JlZGVudGlhbHMudGZhICE9PSB1bmRlZmluZWQgJiYgeyB0ZmFfY29kZTogY3JlZGVudGlhbHMudGZhIH0pXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhd2FpdCBuZXcgRmV0Y2hDbGllbnQoKS5mZXRjaCh0aGlzLmdldFVybEZvck9hdXRoKGNyZWRlbnRpYWxzKSwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogcGFyYW1zLnRvU3RyaW5nKCksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04J1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpc1Bhc3N3b3JkR3JhbnRMb2dpbihjcmVkZW50aWFscz86IElDcmVkZW50aWFscykge1xuICAgIGxldCBsb2dpbk1vZGUgPSB0aGlzLmxvZ2luTW9kZTtcblxuICAgIGlmICh0aGlzLmlzU3VwcG9ydFVzZXIoY3JlZGVudGlhbHMpKSB7XG4gICAgICBpZiAoIXRoaXMubWFuYWdlbWVudExvZ2luTW9kZSkge1xuICAgICAgICB0aGlzLm1hbmFnZW1lbnRMb2dpbk1vZGUgPSBhd2FpdCB0aGlzLmdldE1hbmFnZW1lbnRMb2dpbk1vZGUoKTtcbiAgICAgIH1cbiAgICAgIGxvZ2luTW9kZSA9IHRoaXMubWFuYWdlbWVudExvZ2luTW9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50ZW5hbnRVaVNlcnZpY2UuaXNPYXV0aEludGVybmFsKGxvZ2luTW9kZSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgaWYgdGhlIHByb3ZpZGVkIGNyZWRlbnRpYWxzIHVzZSBhIHN1cHBvcnQgdXNlciB0byBsb2cgaW4gb3Igbm90LlxuICAgKiBAcGFyYW0gY3JlZGVudGlhbHMgQ3JlZGVudGlhbHMgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdXNlciBpcyBhIHN1cHBvcnQgdXNlci5cbiAgICovXG4gIGlzU3VwcG9ydFVzZXIoY3JlZGVudGlhbHM/OiBJQ3JlZGVudGlhbHMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY3JlZGVudGlhbHMgJiYgY3JlZGVudGlhbHMudXNlci5pbmNsdWRlcygnJCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGlmIHRoZSB0ZW5hbnQgaW5wdXQgZmllbGQgc2hvdWxkIGJlIHNob3duXG4gICAqIG9yIG5vdC5cbiAgICogQHJldHVybnMgSWYgdHJ1ZSwgc2hvdyB0aGUgdGVuYW50IGlucHV0LlxuICAgKi9cbiAgc2hvd1RlbmFudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudWkuc3RhdGUubG9naW5PcHRpb25zIHx8IHRoaXMuaXNMb2NhbCgpIHx8IHRoaXMuaXNTaG93VGVuYW50KCk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgaWYgdGhlIHRlbmFudCBzZXR1cCBzaG91bGQgYmUgc2hvd25cbiAgICogb3Igbm90LlxuICAgKiBAcmV0dXJucyBJZiB0cnVlLCBzaG93IHRoZSB0ZW5hbnQgaW5wdXQuXG4gICAqL1xuICBzaG93VGVuYW50U2V0dXAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnVpLnN0YXRlLmxvZ2luT3B0aW9ucyAmJiAhdGhpcy5pc0xvY2FsKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9ncyB0aGUgdXNlciBvdXRcbiAgICogQHBhcmFtIHJlbG9hZCBJZiBzZXQgdG8gZmFsc2UsIHRoZSBwYWdlIHdpbGwgbm90IHJlbG9hZFxuICAgKi9cbiAgYXN5bmMgbG9nb3V0KHJlbG9hZCA9IHRydWUpIHtcbiAgICBsZXQgcmVzRGF0YSA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IFssIGNvb2tpZVJlc10gPSBhd2FpdCB0aGlzLnJlc2V0KCk7XG4gICAgICByZXNEYXRhID0gYXdhaXQgY29va2llUmVzLmpzb24oKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5hbGVydC5yZW1vdmVMYXN0RGFuZ2VyKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChyZXNEYXRhICYmIHJlc0RhdGEudXJsKSB7XG4gICAgICAgIHRoaXMucmVkaXJlY3QocmVzRGF0YS51cmwpO1xuICAgICAgfSBlbHNlIGlmIChyZWxvYWQpIHtcbiAgICAgICAgdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoe30sICcnLCAnJywgJycpO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgc3RvcmVkIGF1dGgtZGF0YVxuICAgKi9cbiAgYXN5bmMgcmVzZXQoKSB7XG4gICAgdGhpcy5jbGVhbkxvY2FsU3RvcmFnZSgpO1xuICAgIHRoaXMuY2xlYW5TZXNzaW9uU3RvcmFnZSgpO1xuICAgIHRoaXMucmVhbHRpbWUuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMudWkuY3VycmVudFVzZXIubmV4dChudWxsKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW3RoaXMuYmFzaWNBdXRoLmxvZ291dCgpLCB0aGlzLmNvb2tpZUF1dGgubG9nb3V0KCldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgVEZBIHRva2VuIHRvIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZS5cbiAgICogQHBhcmFtIHRmYVRva2VuIFRoZSB0ZmEgdG9rZW4gdG8gc2F2ZS5cbiAgICogQHBhcmFtIHN0b3JhZ2UgVGhlIHN0b3JhZ2UgdG8gdXNlIChsb2NhbCBvciBzZXNzaW9uKS5cbiAgICovXG4gIHNhdmVURkFUb2tlbih0ZmFUb2tlbjogc3RyaW5nLCBzdG9yYWdlOiBTdG9yYWdlKSB7XG4gICAgc3RvcmFnZS5zZXRJdGVtKHRoaXMuVEZBVE9LRU5fS0VZLCB0ZmFUb2tlbik7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCB0aGUgbWFuaWZlc3QgLT4gb24gNDAxIHVzZXIgaGFzIG5vIGFjY2VzcyB0byB0aGF0IGFwcGxpY2F0aW9uXG4gICAqIGFuZCB3ZSB0aHJvdyB0aGUgZXJyb3IgdXAgdG8gdGhlIGxvZ2luIGZvcm0uXG4gICAqL1xuICBhc3luYyB2ZXJpZnlBcHBBY2Nlc3MoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMudWkubG9hZE1hbmlmZXN0KCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmICghKGV4LnJlcyAmJiBleC5yZXMuc3RhdHVzID09PSA0MDQgJiYgdGhpcy5pc0xvY2FsKCkpKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlZGlyZWN0VG9Eb21haW4oZG9tYWluKSB7XG4gICAgY29uc3Qgb3JpZ2luVXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBvcmlnaW5VcmwuaHJlZi5yZXBsYWNlKG9yaWdpblVybC5ob3N0bmFtZSwgZG9tYWluKTtcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJlZGlyZWN0VXJsO1xuICB9XG5cbiAgc2hvd1Nzb0Vycm9yKGVycm9yKTogdm9pZCB7XG4gICAgY29uc3QgYm9keSA9IGVycm9yXG4gICAgICA/IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoXG4gICAgICAgICAgICAnPHA+PHN0cm9uZz5UaGUgZm9sbG93aW5nIGVycm9yIHdhcyByZXR1cm5lZCBmcm9tIHRoZSBleHRlcm5hbCBhdXRoZW50aWNhdGlvbiBzZXJ2aWNlOjwvc3Ryb25nPjwvcD48cD48Y29kZT57eyBlcnJvciB9fTwvY29kZT48L3A+LidcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgZXJyb3IgfVxuICAgICAgICApXG4gICAgICA6IGdldHRleHQoJ1NTTyBsb2dpbiBmYWlsZWQuIENvbnRhY3QgdGhlIGFkbWluaXN0cmF0b3IuJyk7XG5cbiAgICB0aGlzLm1vZGFsU2VydmljZS5hY2tub3dsZWRnZShnZXR0ZXh0KCdMb2dpbiBlcnJvcicpLCBib2R5LCBTdGF0dXMuREFOR0VSLCBnZXR0ZXh0KCdPSycpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB0ZW5hbnQgdG8gdGhlIGNsaWVudCBhbmQgdXBkYXRlcyB0aGUgY3JlZGVudGlhbHMgb24gdGhlXG4gICAqIGF1dGggc3RyYXRlZ3kuXG4gICAqIEBwYXJhbSBjcmVkZW50aWFscyBUaGUgbmFtZSBvZiB0aGUgdGVuYW50LlxuICAgKiBAcGFyYW0gYXV0aFN0cmF0ZWd5IFRoZSBhdXRoZW50aWNhdGlvbiBzdHJhdGVneSB1c2VkLlxuICAgKiBAcmV0dXJuIFJldHVybnMgdGhlIHRva2VuIGlmIGJhc2ljIGF1dGgsIG90aGVyd2lzZSB1bmRlZmluZWQuXG4gICAqL1xuICBwcml2YXRlIHNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzOiBJQ3JlZGVudGlhbHMsIGF1dGhTdHJhdGVneTogSUF1dGhlbnRpY2F0aW9uKSB7XG4gICAgaWYgKGNyZWRlbnRpYWxzLnRlbmFudCkge1xuICAgICAgdGhpcy5jbGllbnQudGVuYW50ID0gY3JlZGVudGlhbHMudGVuYW50O1xuICAgIH1cbiAgICAvLyBDaGVjayBpZiBhIHRva2VuIGlzIGFscmVhZHkgc2V0IChjYXNlIGZvciBzdXBwb3J0IHVzZXIgbG9naW4pXG4gICAgLy8gaWYgeWVzIC0+IHdlIGp1c3QgbmVlZCB0byB1cGRhdGUgdGhlIHVzZXIsIGFuZCByZXVzZSB0aGUgdG9rZW5cbiAgICAvLyBvZiB0aGUgc3VwcG9ydCB1c2VyLlxuICAgIC8vIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIHBhc3MgdXNlciBhbmQgdGVuYW50LCB0byBnZXRcbiAgICAvLyBqdXN0IHRoZSBzdG9yZWQgdG9rZW4gYW5kIG5vdGhpbmcgZWxzZSAoc2VlIEJhc2ljQXV0aC50czozMSkuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmJhc2ljQXV0aC51cGRhdGVDcmVkZW50aWFscyh7XG4gICAgICB0ZW5hbnQ6IGNyZWRlbnRpYWxzLnRlbmFudCxcbiAgICAgIHVzZXI6IGNyZWRlbnRpYWxzLnVzZXJcbiAgICB9KTtcbiAgICBjb25zdCBuZXdDcmVkZW50aWFscyA9IHsgdG9rZW4sIC4uLmNyZWRlbnRpYWxzIH07XG5cbiAgICByZXR1cm4gYXV0aFN0cmF0ZWd5LnVwZGF0ZUNyZWRlbnRpYWxzKG5ld0NyZWRlbnRpYWxzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBpZiB0aGUgY3VycmVudCB1c2VyIGlzIGEgZGV2ZWxvcGVyIG9yIG5vdC5cbiAgICogUnVubmluZyBvbiBsb2NhbGhvc3QgbWVhbnMgZGV2ZWxvcG1lbnQgbW9kZS5cbiAgICovXG4gIHByaXZhdGUgaXNMb2NhbCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBob3N0bmFtZSA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGhvc3RJcFJlZ0V4cC50ZXN0KGhvc3RuYW1lKSB8fCB0aGlzLmxvY2FsaG9zdFJlZ0V4cC50ZXN0KGhvc3RuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIHRoZSB0b2tlbiB0byBsb2NhbCBvciBzZXNzaW9uIHN0b3JhZ2UuXG4gICAqIEBwYXJhbSB0b2tlbiBUaGUgdG9rZW4gdG8gc2F2ZS5cbiAgICogQHBhcmFtIHN0b3JhZ2UgVGhlIHN0b3JhZ2UgdG8gdXNlIChsb2NhbCBvciBzZXNzaW9uKS5cbiAgICovXG4gIHByaXZhdGUgc2F2ZVRva2VuKHRva2VuOiBzdHJpbmcsIHN0b3JhZ2U6IFN0b3JhZ2UpIHtcbiAgICBzdG9yYWdlLnNldEl0ZW0odGhpcy5UT0tFTl9LRVksIHRva2VuKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcmVCYXNpY0F1dGhUb2tlbih0b2tlbjogc3RyaW5nKSB7XG4gICAgdGhpcy5zYXZlVG9rZW4odG9rZW4sIHNlc3Npb25TdG9yYWdlKTtcbiAgICBpZiAodGhpcy5yZW1lbWJlck1lKSB7XG4gICAgICB0aGlzLnNhdmVUb2tlbih0b2tlbiwgbG9jYWxTdG9yYWdlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFuTG9jYWxTdG9yYWdlKCkge1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuVE9LRU5fS0VZKTtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlRGQVRPS0VOX0tFWSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuU2Vzc2lvblN0b3JhZ2UoKSB7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlRPS0VOX0tFWSk7XG4gICAgc2Vzc2lvblN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlRGQVRPS0VOX0tFWSk7XG4gIH1cblxuICBwcml2YXRlIGlzU2hvd1RlbmFudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93VGVuYW50UmVnRXhwLnRlc3Qod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWRpcmVjdCh1cmw6IHN0cmluZykge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRCYXNpY0F1dGhMb2dpbk9wdGlvbihyZWZyZXNoPyk6IFByb21pc2U8SVRlbmFudExvZ2luT3B0aW9uPiB7XG4gICAgaWYgKHJlZnJlc2gpIHtcbiAgICAgIGF3YWl0IHRoaXMudWkucmVmcmVzaExvZ2luT3B0aW9ucygpO1xuICAgIH1cbiAgICBjb25zdCBsb2dpbk9wdGlvbnMgPSB0aGlzLnVpLnN0YXRlLmxvZ2luT3B0aW9ucyB8fCBbXTtcbiAgICBjb25zdCBiYXNpY0F1dGhMb2dpbk9wdGlvbiA9IGxvZ2luT3B0aW9ucy5maW5kKCh7IHR5cGUgfSkgPT4gdHlwZSA9PT0gJ0JBU0lDJyk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShiYXNpY0F1dGhMb2dpbk9wdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzdXBwb3J0IHVzZXIgbmFtZSBmcm9tIGNyZWRlbnRpYWxzLlxuICAgKiBAcGFyYW0gY3JlZGVudGlhbHMgQ3JlZGVudGlhbHMgb2JqZWN0IChkZWZhdWx0cyB0byB0aGUgc3RvcmVkIG9uZSkuXG4gICAqIEByZXR1cm5zIFN1cHBvcnQgdXNlciBuYW1lLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdXBwb3J0VXNlck5hbWUoY3JlZGVudGlhbHM6IElDcmVkZW50aWFscyA9IHRoaXMuZ2V0U3RvcmVkQ3JlZGVudGlhbHMoKSk6IHN0cmluZyB7XG4gICAgaWYgKCFjcmVkZW50aWFscykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHN1cHBvcnRVc2VyTmFtZSA9IGNyZWRlbnRpYWxzLnVzZXIubWF0Y2goL14oLitcXC8pPygoLispXFwkKT8oLispPyQvKVszXTtcbiAgICByZXR1cm4gc3VwcG9ydFVzZXJOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY3JlZGVudGlhbHMgb2JqZWN0IGZyb20gdGhlIHN0b3JlZCB0b2tlbi5cbiAgICogQHJldHVybnMgQ3JlZGVudGlhbHMgb2JqZWN0LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdG9yZWRDcmVkZW50aWFscygpOiBJQ3JlZGVudGlhbHMge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRTdG9yZWRUb2tlbigpO1xuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5kZWNvZGVUb2tlbih0b2tlbik7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzdG9yZWQgdG9rZW4gZnJvbSBsb2NhbCBzdG9yYWdlIG9yIHNlc3Npb24gc3RvcmFnZS5cbiAgICogQHJldHVybnMgU3RvcmVkIHRva2VuLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdG9yZWRUb2tlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlRPS0VOX0tFWSkgfHwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlRPS0VOX0tFWSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBzdG9yZWQgVEZBIHRva2VuIGZyb20gbG9jYWwgc3RvcmFnZSBvciBzZXNzaW9uIHN0b3JhZ2UuXG4gICAqIEByZXR1cm5zIFN0b3JlZCBURkEgdG9rZW4uXG4gICAqL1xuICBwcml2YXRlIGdldFN0b3JlZFRmYVRva2VuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuVEZBVE9LRU5fS0VZKSB8fCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuVEZBVE9LRU5fS0VZKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNvZGVzIHRva2VuIHRvIGNyZWRlbnRpYWxzIG9iamVjdC5cbiAgICogQHBhcmFtIHRva2VuIFRva2VuIHRvIGRlY29kZS5cbiAgICogQHJldHVybnMgQ3JlZGVudGlhbHMgb2JqZWN0LlxuICAgKi9cbiAgcHJpdmF0ZSBkZWNvZGVUb2tlbih0b2tlbjogc3RyaW5nKTogSUNyZWRlbnRpYWxzIHtcbiAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZSh3aW5kb3cuYXRvYih0b2tlbikpKTtcbiAgICBjb25zdCBzcGxpdCA9IGRlY29kZWQubWF0Y2goLygoW14vXSopXFwvKT8oW14vOl0rKTooLispLyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGVuYW50OiBzcGxpdFsyXSxcbiAgICAgIHVzZXI6IHNwbGl0WzNdLFxuICAgICAgcGFzc3dvcmQ6IHNwbGl0WzRdXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VXJsRm9yT2F1dGgoY3JlZGVudGlhbHM6IElDcmVkZW50aWFscykge1xuICAgIGlmIChpc0VtcHR5KGNyZWRlbnRpYWxzLnRlbmFudCkgJiYgdGhpcy5sb2dpbk1vZGUuaW5pdFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IHVybFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXModGhpcy5sb2dpbk1vZGUuaW5pdFJlcXVlc3Quc3BsaXQoJz8nKS5wb3AoKSk7XG4gICAgICBjcmVkZW50aWFscy50ZW5hbnQgPSB1cmxQYXJhbXMuZ2V0KCd0ZW5hbnRfaWQnKTtcbiAgICB9XG4gICAgcmV0dXJuICFpc0VtcHR5KGNyZWRlbnRpYWxzLnRlbmFudClcbiAgICAgID8gYHRlbmFudC9vYXV0aD90ZW5hbnRfaWQ9JHtjcmVkZW50aWFscy50ZW5hbnR9YFxuICAgICAgOiBgdGVuYW50L29hdXRoYDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0TWFuYWdlbWVudExvZ2luTW9kZSgpIHtcbiAgICBjb25zdCBtYW5hZ2VtZW50TG9naW5PcHRpb25zID0gKGF3YWl0IHRoaXMudGVuYW50TG9naW5PcHRpb25zU2VydmljZS5saXN0Rm9yTWFuYWdlbWVudCgpKS5kYXRhO1xuICAgIHJldHVybiB0aGlzLnRlbmFudFVpU2VydmljZS5nZXRQcmVmZXJyZWRMb2dpbk9wdGlvbihtYW5hZ2VtZW50TG9naW5PcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlRXJyb3JTdGF0dXNDb2RlcyhyZXNwb25zZTogSUZldGNoUmVzcG9uc2UpOiBQcm9taXNlPElGZXRjaFJlc3BvbnNlPiB7XG4gICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA+PSA0MDApIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICBjb25zdCBlcnJvciA9IGRhdGEubWVzc2FnZSB8fCBkYXRhLmVycm9yX2Rlc2NyaXB0aW9uIHx8IGRhdGEuZXJyb3I7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9XG59XG4iXX0=
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdG9yLW5vZGUtZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvbmF2aWdhdG9yL25hdmlnYXRvci1ub2RlLWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBOYXZpZ2F0b3JOb2RlRGF0YSB7XG4gIC8qKlxuICAgKiBOYXZpZ2F0b3Igbm9kZSBuYW1lLlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIExhYmVsIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgbmF2aWdhdG9yIG5vZGUuXG4gICAqL1xuICBsYWJlbD86IHN0cmluZztcbiAgLyoqXG4gICAqIFBvc2l0aW9uIG9mIHRoZSBub2RlIGluIHRoZSBuYXZpZ2F0b3IuXG4gICAqL1xuICBwcmlvcml0eT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHdoaWNoIHRoZSBVSSB3aWxsIGJlIHJlZGlyZWN0ZWQgYWZ0ZXIgY2xpY2tpbmcgbmF2aWdhdG9yIG5vZGUuXG4gICAqL1xuICBwYXRoPzogc3RyaW5nO1xuICAvKipcbiAgICogTmF2aWdhdG9yIG5vZGUgaWNvbi5cbiAgICovXG4gIGljb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBOYXZpZ2F0b3Igbm9kZSBpY29uIHdoZW4gZXhwYW5kZWQuXG4gICAqL1xuICBpY29uT3Blbj86IHN0cmluZztcbiAgLyoqXG4gICAqIE5hdmlnYXRvciBub2RlIHBhcmVudCBub2RlLlxuICAgKi9cbiAgcGFyZW50PzogTmF2aWdhdG9yTm9kZURhdGEgfCBzdHJpbmc7XG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIGR1cGxpY2F0ZSBub2RlIGlzIHByZXNlbnQgYW5kIGlnbm9yZSBpdC5cbiAgICovXG4gIHByZXZlbnREdXBsaWNhdGVzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNob3VsZCB0aGlzIGFzc2V0IG5vZGUgc2hvdyBkZXZpY2VzIG9yIG5vdC5cbiAgICovXG4gIGhpZGVEZXZpY2VzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElkIHRvIGlkZW50aWZ5IHNwZWNpZmljIGZlYXR1cmUgbm9kZS5cbiAgICovXG4gIGZlYXR1cmVJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIEN1c3RvbSBjb21wb25lbnQgdG8gdXNlLlxuICAgKi9cbiAgY29tcG9uZW50PzogVHlwZTxhbnk+O1xuICBba2V5OiBzdHJpbmddOiBhbnk7IC8vIG1ha2UgZXh0ZW5zaWJsZVxufVxuIl19
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdG9yLW5vZGUtZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvbmF2aWdhdG9yL25hdmlnYXRvci1ub2RlLWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1cHBvcnRlZEljb25zU3VnZ2VzdGlvbnMgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2ljb24tc2VsZWN0b3IvaWNvbnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hdmlnYXRvck5vZGVEYXRhIHtcbiAgLyoqXG4gICAqIE5hdmlnYXRvciBub2RlIG5hbWUuXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogTGFiZWwgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBuYXZpZ2F0b3Igbm9kZS5cbiAgICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKipcbiAgICogUG9zaXRpb24gb2YgdGhlIG5vZGUgaW4gdGhlIG5hdmlnYXRvci5cbiAgICovXG4gIHByaW9yaXR5PzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHBhdGggdG8gd2hpY2ggdGhlIFVJIHdpbGwgYmUgcmVkaXJlY3RlZCBhZnRlciBjbGlja2luZyBuYXZpZ2F0b3Igbm9kZS5cbiAgICovXG4gIHBhdGg/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBOYXZpZ2F0b3Igbm9kZSBpY29uLlxuICAgKi9cbiAgaWNvbj86IFN1cHBvcnRlZEljb25zU3VnZ2VzdGlvbnM7XG4gIC8qKlxuICAgKiBOYXZpZ2F0b3Igbm9kZSBpY29uIHdoZW4gZXhwYW5kZWQuXG4gICAqL1xuICBpY29uT3Blbj86IHN0cmluZztcbiAgLyoqXG4gICAqIE5hdmlnYXRvciBub2RlIHBhcmVudCBub2RlLlxuICAgKi9cbiAgcGFyZW50PzogTmF2aWdhdG9yTm9kZURhdGEgfCBzdHJpbmc7XG4gIC8qKlxuICAgKiBDaGVjayBpZiBhIGR1cGxpY2F0ZSBub2RlIGlzIHByZXNlbnQgYW5kIGlnbm9yZSBpdC5cbiAgICovXG4gIHByZXZlbnREdXBsaWNhdGVzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFNob3VsZCB0aGlzIGFzc2V0IG5vZGUgc2hvdyBkZXZpY2VzIG9yIG5vdC5cbiAgICovXG4gIGhpZGVEZXZpY2VzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElkIHRvIGlkZW50aWZ5IHNwZWNpZmljIGZlYXR1cmUgbm9kZS5cbiAgICovXG4gIGZlYXR1cmVJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIEN1c3RvbSBjb21wb25lbnQgdG8gdXNlLlxuICAgKi9cbiAgY29tcG9uZW50PzogVHlwZTxhbnk+O1xuICBba2V5OiBzdHJpbmddOiBhbnk7IC8vIG1ha2UgZXh0ZW5zaWJsZVxufVxuIl19
@@ -1,12 +1,12 @@
1
1
  // tslint:disable-next-line:max-line-length
2
2
  import { Component, EventEmitter, Input, Output, ViewChild, ViewContainerRef } from '@angular/core';
3
3
  import { ActivationEnd, Router } from '@angular/router';
4
+ import { isUndefined } from 'lodash-es';
4
5
  import { Subject, merge } from 'rxjs';
5
6
  import { distinctUntilChanged, filter, map, tap } from 'rxjs/operators';
6
7
  import { PopoverConfirmComponent } from '../modal/popover-confirm.component';
7
8
  import { NavigatorIconComponent } from './navigator-icon.component';
8
9
  import { NavigatorNode } from './navigator-node';
9
- import { isUndefined } from 'lodash-es';
10
10
  import * as i0 from "@angular/core";
11
11
  import * as i1 from "@angular/router";
12
12
  import * as i2 from "ngx-bootstrap/collapse";
@@ -41,6 +41,15 @@ export class NavigatorNodeComponent {
41
41
  if (isUndefined(this.node.path)) {
42
42
  return false;
43
43
  }
44
+ // on exact match, for empty routes '' we need a special
45
+ // handling as there seems to be a bug with angular, as it
46
+ // does not show the primary oulet in this cases.
47
+ const currentUrlTree = this.router.parseUrl(this.router.url);
48
+ if (this.node.routerLinkExact &&
49
+ !currentUrlTree.root.children['primary'] &&
50
+ this.node.path === '/') {
51
+ return true;
52
+ }
44
53
  return this.router.isActive(this.node.path, {
45
54
  paths: this.node.routerLinkExact ? 'exact' : 'subset',
46
55
  queryParams: 'ignored',
@@ -190,4 +199,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
190
199
  type: ViewChild,
191
200
  args: [PopoverConfirmComponent, { static: false }]
192
201
  }] } });
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdG9yLW5vZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9uYXZpZ2F0b3IvbmF2aWdhdG9yLW5vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS9uYXZpZ2F0b3IvbmF2aWdhdG9yLW5vZGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkNBQTJDO0FBQzNDLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNULGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUF3QixNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRSxPQUFPLEVBQWdCLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7Ozs7OztBQVF4Qzs7R0FFRztBQUtILE1BQU0sT0FBTyxzQkFBc0I7SUFpRWpDLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBakRsQzs7Ozs7OztXQU9HO1FBQ08sY0FBUyxHQUF5QixJQUFJLFlBQVksRUFBRSxDQUFDO1FBUy9EOztXQUVHO1FBQ0gsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFaEM7O1dBRUc7UUFDSCxjQUFTLEdBQUcsS0FBSyxDQUNm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QUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLFNBQVMsRUFBRTtZQUNsRSxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBck1VLHNCQUFzQjtrR0FBdEIsc0JBQXNCLHdOQUlOLGdCQUFnQix1REF5QmhDLHVCQUF1QixxRUMvRHBDLDQxRkErRkEseThDRDdEYSxzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBSmxDLFNBQVM7K0JBQ0Usb0JBQW9COzJFQU9nQyxRQUFRO3NCQUFyRSxTQUFTO3VCQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUtuRCxJQUFJO3NCQUFaLEtBQUs7Z0JBS0csTUFBTTtzQkFBZCxLQUFLO2dCQVVJLFNBQVM7c0JBQWxCLE1BQU07Z0JBS2dELE9BQU87c0JBQTdELFNBQVM7dUJBQUMsdUJBQXVCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0aW9uRW5kLCBJc0FjdGl2ZU1hdGNoT3B0aW9ucywgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN1YmplY3QsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFBvcG92ZXJDb25maXJtQ29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWwvcG9wb3Zlci1jb25maXJtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOYXZpZ2F0b3JJY29uQ29tcG9uZW50IH0gZnJvbSAnLi9uYXZpZ2F0b3ItaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2xpY2tPcHRpb25zLCBOYXZpZ2F0b3JOb2RlIH0gZnJvbSAnLi9uYXZpZ2F0b3Itbm9kZSc7XG5pbXBvcnQgeyBpc1VuZGVmaW5lZCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmV4cG9ydCBjb25zdCBlbnVtIENsaWNrRXZlbnRTb3VyY2Uge1xuICBJQ09OID0gJ2ljb24nLFxuICBFWFBBTkRFUiA9ICdleHBhbmRlcicsXG4gIExJTksgPSAnbGluaydcbn1cblxuLyoqXG4gKiBOYXZpZ2F0b3Igbm9kZSByZW5kZXJlci5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LW5hdmlnYXRvci1ub2RlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25hdmlnYXRvci1ub2RlLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBOYXZpZ2F0b3JOb2RlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQFZpZXdDaGlsZCgnaWNvbicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiBmYWxzZSB9KSBpY29uU2xvdDogVmlld0NvbnRhaW5lclJlZjtcblxuICAvKipcbiAgICogTmF2aWdhdG9yIG5vZGUuXG4gICAqL1xuICBASW5wdXQoKSBub2RlOiBOYXZpZ2F0b3JOb2RlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG5hdmlnYXRvciBub2RlIGlzIGEgcm9vdCBub2RlICh0b3Agbm9kZSBpbiB0aGUgaGllcmFyY2h5KS5cbiAgICovXG4gIEBJbnB1dCgpIGlzUm9vdDogYm9vbGVhbjtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlciByZXNwb25zaWJsZSBmb3IgYnJvYWRjYXN0aW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nIGV2ZW50czogXCJpY29uXCIsIFwiZXhwYW5kZXJcIiBvciBcImxpbmtcIiBhcyBzdHJpbmcgdmFsdWUuXG4gICAqXG4gICAqIFRoZSB0eXBlIG9mIGV2ZW50IGRlcGVuZHMgb24gd2hlcmUgeW91IGNsaWNrIG9uIHRoZSBuYXZpZ2F0b3Igbm9kZTpcbiAgICogKiBjbGlja2luZyB0aGUgaWNvbiB3aWxsIGJyb2FkY2FzdCB0aGUgZXZlbnQgXCJpY29uXCIsXG4gICAqICogY2xpY2tpbmcgdGhlIGV4cGFuZGVyIHdpbGwgYnJvYWRjYXN0IHRoZSBldmVudCBcImV4cGFuZGVyXCIsXG4gICAqICogY2xpY2tpbmcgdGhlIGxhYmVsIHdpbGwgYnJvYWRjYXN0IHRoZSBldmVudCBcImxpbmtcIi5cbiAgICovXG4gIEBPdXRwdXQoKSBub2RlQ2xpY2s6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBAVmlld0NoaWxkKFBvcG92ZXJDb25maXJtQ29tcG9uZW50LCB7IHN0YXRpYzogZmFsc2UgfSkgY29uZmlybTogUG9wb3ZlckNvbmZpcm1Db21wb25lbnQ7XG5cbiAgcHJpdmF0ZSB2aWV3SW5pdFRpbWVvdXQ7XG5cbiAgLyoqXG4gICAqIEEgc3ViamVjdCB0aGF0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHRoZSBuYXZpZ2F0b3Igbm9kZSBpcyBpbml0aWFsaXplZC5cbiAgICovXG4gIG5vZGVJbml0JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIEEgb2JzZXJ2YWJsZSB3aGljaCBlbWl0cywgYXMgc29vbiBhcyB0aGUgYWN0aXZlIHN0YXRlIG9mIHRoZSBub2RlIGNoYW5nZXMuXG4gICAqL1xuICBpc0FjdGl2ZSQgPSBtZXJnZShcbiAgICB0aGlzLm5vZGVJbml0JCxcbiAgICB0aGlzLnJvdXRlci5ldmVudHMucGlwZShmaWx0ZXIoZSA9PiBlIGluc3RhbmNlb2YgQWN0aXZhdGlvbkVuZCkpXG4gICkucGlwZShcbiAgICBtYXAoKCkgPT4ge1xuICAgICAgaWYgKGlzVW5kZWZpbmVkKHRoaXMubm9kZS5wYXRoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZXIuaXNBY3RpdmUodGhpcy5ub2RlLnBhdGgsIHtcbiAgICAgICAgcGF0aHM6IHRoaXMubm9kZS5yb3V0ZXJMaW5rRXhhY3QgPyAnZXhhY3QnIDogJ3N1YnNldCcsXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiAnaWdub3JlZCcsXG4gICAgICAgIGZyYWdtZW50OiAnaWdub3JlZCcsXG4gICAgICAgIG1hdHJpeFBhcmFtczogJ2lnbm9yZWQnXG4gICAgICB9IGFzIElzQWN0aXZlTWF0Y2hPcHRpb25zKTtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHRhcChpc0FjdGl2ZSA9PiB7XG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgdGhpcy5leHBhbmRDb2xsYXBzZSh0cnVlKTtcbiAgICAgICAgdGhpcy5leHBhbmRSZWN1cnNpdmVQYXJlbnQodGhpcy5ub2RlLnBhcmVudHMpO1xuICAgICAgfVxuICAgIH0pXG4gICk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge31cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKFxuICAgICAgY2hhbmdlcy5ub2RlICYmXG4gICAgICAhY2hhbmdlcy5ub2RlLmZpcnN0Q2hhbmdlICYmXG4gICAgICBjaGFuZ2VzLm5vZGUucHJldmlvdXNWYWx1ZS5pY29uICE9PSBjaGFuZ2VzLm5vZGUuY3VycmVudFZhbHVlLmljb25cbiAgICApIHtcbiAgICAgIHRoaXMudXBkYXRlSWNvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKCF0aGlzLm5vZGUuY29tcG9uZW50KSB7XG4gICAgICB0aGlzLnZpZXdJbml0VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUljb24oKTtcbiAgICAgICAgdGhpcy5ub2RlLmNvbmZpcm0gPSB0aGlzLmNvbmZpcm07XG4gICAgICAgIHRoaXMubm9kZUluaXQkLm5leHQoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBleHBhbmRlciB0aXRsZS5cbiAgICovXG4gIGdldCBleHBhbmRUaXRsZSgpIHtcbiAgICByZXR1cm4gIXRoaXMubm9kZS5vcGVuID8gJ0V4cGFuZCcgOiAnQ29sbGFwc2UnO1xuICB9XG5cbiAgLyoqXG4gICAqIENsaWNrIGV2ZW50IGhhbmRsZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmcm9tIFNvdXJjZSBvZiB0aGUgY2xpY2sgZXZlbnQuXG4gICAqIEBwYXJhbSBldmVudCBET00gZXZlbnQuXG4gICAqL1xuICBjbGljayhmcm9tOiAnaWNvbicgfCAnZXhwYW5kZXInIHwgJ2xpbmsnID0gJ2xpbmsnLCAkZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgbGV0IG9wZW46IGJvb2xlYW47XG4gICAgc3dpdGNoIChmcm9tKSB7XG4gICAgICBjYXNlIENsaWNrRXZlbnRTb3VyY2UuRVhQQU5ERVI6XG4gICAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgb3BlbiA9ICF0aGlzLm5vZGUub3BlbjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENsaWNrRXZlbnRTb3VyY2UuSUNPTjpcbiAgICAgIGNhc2UgQ2xpY2tFdmVudFNvdXJjZS5MSU5LOlxuICAgICAgICBvcGVuID0gdGhpcy5yb3V0ZXIuaXNBY3RpdmUodGhpcy5ub2RlLnBhdGgsIHRoaXMubm9kZS5yb3V0ZXJMaW5rRXhhY3QpXG4gICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgOiAhdGhpcy5ub2RlLm9wZW47XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZUV4cGFuZENvbGxhcHNlKG9wZW4sIGZyb20sICRldmVudCk7XG4gICAgdGhpcy5ub2RlQ2xpY2suZW1pdChmcm9tKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBhbmRzIG9yIGNvbGxhcHNlcyB0aGUgbmF2aWdhdG9yIG5vZGUgYW5kIGl0cyBjaGlsZHJlbiByZWN1cnNpdmVseS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBvcGVuIE9wZW4gb3IgY2xvc2UgdGhlIG5vZGUuXG4gICAqIEBwYXJhbSB7Q2xpY2tPcHRpb25zfSBmb3JOb2RlIENsaWNrIG9wdGlvbnMuXG4gICAqL1xuICBleHBhbmRDb2xsYXBzZShvcGVuLCBmb3JOb2RlOiBDbGlja09wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMubm9kZS5vcGVuID0gb3BlbjtcbiAgICBmb3JOb2RlLm9wZW4gPSBvcGVuO1xuICAgIHRoaXMubm9kZS5jbGljayhmb3JOb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy52aWV3SW5pdFRpbWVvdXQpO1xuXG4gICAgaWYgKHRoaXMubm9kZSkge1xuICAgICAgdGhpcy5ub2RlLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwYW5kcyB0aGUgcGFyZW50IG5vZGVzIHJlY3Vyc2l2ZWx5LlxuICAgKiBAcGFyYW0gbm9kZXMgVGhlIG5vZGVzIHRoYXQgc2hvdWxkIGJlIHRyaWVkIHRvIGdldCBvcGVuZWQuXG4gICAqIEBwYXJhbSBjbGlja09wdGlvbiBUaGUgY2xpY2sgb3B0aW9ucyB0byBwZXJmb3JtIG9uIHRoZSBwYXJlbnQgbm9kZXMuXG4gICAqL1xuICBleHBhbmRSZWN1cnNpdmVQYXJlbnQobm9kZXM6IE5hdmlnYXRvck5vZGVbXSwgY2xpY2tPcHRpb246IENsaWNrT3B0aW9ucyA9IHsgZXhwYW5kZXI6IHRydWUgfSkge1xuICAgIG5vZGVzLmZvckVhY2gocGFyZW50Tm9kZSA9PiB7XG4gICAgICBpZiAoIXBhcmVudE5vZGUub3Blbikge1xuICAgICAgICBwYXJlbnROb2RlLm9wZW4gPSB0cnVlO1xuICAgICAgICBwYXJlbnROb2RlLmNsaWNrKGNsaWNrT3B0aW9uKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhwYW5kUmVjdXJzaXZlUGFyZW50KHBhcmVudE5vZGUucGFyZW50cywgY2xpY2tPcHRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFeHBhbmRDb2xsYXBzZShvcGVuLCBmcm9tLCAkZXZlbnQpIHtcbiAgICBpZiAoXG4gICAgICBvcGVuID09PSB0aGlzLm5vZGUub3BlbiB8fFxuICAgICAgKHRoaXMubm9kZS5wYXRoICYmICFvcGVuICYmIGZyb20gIT09IENsaWNrRXZlbnRTb3VyY2UuRVhQQU5ERVIpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZXhwYW5kQ29sbGFwc2Uob3BlbiwgeyBbZnJvbV06IHRydWUsICRldmVudCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSWNvbigpIHtcbiAgICBpZiAodGhpcy5ub2RlLmljb25UZW1wbGF0ZSkge1xuICAgICAgdGhpcy51cGRhdGVJY29uVGVtcGxhdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVJY29uQ29tcG9uZW50KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJY29uQ29tcG9uZW50KCkge1xuICAgIGxldCBjb21wb25lbnRUeXBlID0gTmF2aWdhdG9ySWNvbkNvbXBvbmVudDtcbiAgICBpZiAodGhpcy5ub2RlICYmIHRoaXMubm9kZS5pY29uQ29tcG9uZW50KSB7XG4gICAgICBjb21wb25lbnRUeXBlID0gdGhpcy5ub2RlLmljb25Db21wb25lbnQ7XG4gICAgfVxuICAgIHRoaXMuaWNvblNsb3QuY2xlYXIoKTtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmljb25TbG90LmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRUeXBlLCB7XG4gICAgICBpbmplY3RvcjogdGhpcy5ub2RlLmluamVjdG9yXG4gICAgfSk7XG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLm5vZGUgPSB0aGlzLm5vZGU7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUljb25UZW1wbGF0ZSgpIHtcbiAgICB0aGlzLmljb25TbG90LmNsZWFyKCk7XG4gICAgdGhpcy5pY29uU2xvdC5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5ub2RlLmljb25UZW1wbGF0ZSwgdW5kZWZpbmVkLCB7XG4gICAgICBpbmplY3RvcjogdGhpcy5ub2RlLmluamVjdG9yXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlLmNvbXBvbmVudFwiPlxuICA8bmctY29udGFpbmVyICpjOHlDb21wb25lbnRPdXRsZXQ9XCJub2RlLmNvbXBvbmVudDsgZW52aXJvbm1lbnRJbmplY3Rvcjogbm9kZS5pbmplY3RvclwiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxkaXZcbiAgY2xhc3M9XCJzbG90XCJcbiAgKm5nSWY9XCIhbm9kZS5jb21wb25lbnRcIlxuICBbaGlkZGVuXT1cIm5vZGUuaGlkZGVuXCJcbiAgKGRyYWdzdGFydCk9XCJub2RlLmRyYWdTdGFydCgkZXZlbnQpXCJcbiAgKGRyYWdlbmQpPVwibm9kZS5kcmFnRW5kKCRldmVudClcIlxuICAoZHJvcCk9XCJub2RlLmRyb3AoJGV2ZW50KVwiXG4gIFtkcmFnZ2FibGVdPVwibm9kZS5kcmFnZ2FibGVcIlxuICBbbmdDbGFzc109XCJ7IGRyYWdnZWQ6IG5vZGUuZHJhZ2dlZCwgZGlzYWJsZWQ6IG5vZGUubG9hZGluZyB9XCJcbj5cbiAgPG5nLWNvbnRhaW5lcj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImxpbmtcIlxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICBbcm91dGVyTGlua109XCJub2RlLmNhbk5hdmlnYXRlID8gbm9kZS5wYXRoIDogdW5kZWZpbmVkXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgYWN0aXZlOiBpc0FjdGl2ZSQgfCBhc3luYyxcbiAgICAgICAgJ2RyYWdnZWQtaG92ZXInOiBub2RlLmRyYWdnZWRIb3ZlciAmJiAhbm9kZS5kcmFnZ2VkXG4gICAgICB9XCJcbiAgICAgIChkcmFnb3Zlcik9XCJub2RlLmNhbkRyb3AgJiYgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgKGRyYWdlbnRlcik9XCJub2RlLmNhbkRyb3AgJiYgbm9kZS5kcmFnRW50ZXIoJGV2ZW50KVwiXG4gICAgICAoZHJhZ2xlYXZlKT1cIm5vZGUuY2FuRHJvcCAmJiBub2RlLmRyYWdMZWF2ZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibmF2aWNvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0bi1jbGVhblwiXG4gICAgICAgIHRpdGxlPVwie3sgbm9kZS50cmFuc2xhdGVMYWJlbCA/IChub2RlLmxhYmVsIHwgdHJhbnNsYXRlKSA6IG5vZGUubGFiZWwgfX1cIlxuICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm5vZGUuaGFzQ2hpbGRyZW4gPyBub2RlLm9wZW4gOiBudWxsXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGRyYWdnYWJsZT1cImZhbHNlXCJcbiAgICAgICAgW2F0dHIuZGF0YS1jeV09XCJub2RlLmxhYmVsXCJcbiAgICAgICAgW2F0dHIuaWRdPVwiaXNSb290ID8gbm9kZS5pZCA6IHVuZGVmaW5lZFwiXG4gICAgICAgIChjbGljayk9XCJjbGljayhub2RlLmNhbk5hdmlnYXRlID8gJ2xpbmsnIDogJ2V4cGFuZGVyJywgJGV2ZW50KVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAncm9vdC1saW5rJzogaXNSb290LFxuICAgICAgICAgIG9wZW46IG5vZGUub3BlbiAmJiBub2RlLmhhc0NoaWxkcmVuLFxuICAgICAgICAgIHBhcmVudDogbm9kZS5oYXNDaGlsZHJlblxuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlubmVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY2hpbGRyZW4gcGFuZWwtZXhwYW5kIGV4cGFuZFwiXG4gICAgKm5nSWY9XCJub2RlLmNoaWxkcmVuLmxlbmd0aFwiXG4gICAgW2NvbGxhcHNlXT1cIiFub2RlLm9wZW5cIlxuICAgIFtpc0FuaW1hdGVkXT1cInRydWVcIlxuICA+XG4gICAgPGM4eS1uYXZpZ2F0b3Itbm9kZVxuICAgICAgKm5nRm9yPVwibGV0IGNoaWxkTm9kZSBvZiBub2RlLmNoaWxkcmVuXCJcbiAgICAgIFtub2RlXT1cImNoaWxkTm9kZVwiXG4gICAgICAobm9kZUNsaWNrKT1cIm5vZGVDbGljay5lbWl0KCRldmVudClcIlxuICAgID48L2M4eS1uYXZpZ2F0b3Itbm9kZT5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBpY29uIC0tPlxuPG5nLXRlbXBsYXRlICNuYXZpY29uPlxuICA8IS0tIGxvYWRlciAtLT5cbiAgPGlcbiAgICBjbGFzcz1cImljb24tc3BpbiBsb2FkaW5nSW5kaWNhdG9yXCJcbiAgICBbYzh5SWNvbl09XCInY2lyY2xlLW8tbm90Y2gnXCJcbiAgICBbbmdDbGFzc109XCJ7ICdtLWwtMTYnIDogaXNSb290LCAnbS1sLTgnOiAhaXNSb290IH1cIlxuICAgICpuZ0lmPVwibm9kZS5sb2FkaW5nICYmICFpc1Jvb3RcIlxuICA+PC9pPlxuICA8bmctY29udGFpbmVyICNpY29uPjwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbm5lcj5cbiAgPCEtLXRpdGxlICAtLT5cbiAgPHNwYW4+e3sgbm9kZS50cmFuc2xhdGVMYWJlbCA/IChub2RlLmxhYmVsIHwgdHJhbnNsYXRlKSA6IG5vZGUubGFiZWwgfX08L3NwYW4+XG5cbiAgPCEtLWV4cGFuZGVyICAtLT5cbiAgPGlcbiAgICBjbGFzcz1cImV4cGFuZGVyXCJcbiAgICBbYzh5SWNvbl09XCInY2hldnJvbi1kb3duJ1wiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJleHBhbmRUaXRsZVwiXG4gICAgcm9sZT1cImJ1dHRvblwiXG4gICAgKm5nSWY9XCJub2RlLmhhc0NoaWxkcmVuXCJcbiAgICAoY2xpY2spPVwiY2xpY2soJ2V4cGFuZGVyJywgJGV2ZW50KVwiXG4gICAgZGF0YS1jeT1cImM4eS1uYXZpZ2F0b3Itbm9kZS0tZXhwYW5kZXJcIlxuICA+PC9pPlxuXG4gIDwhLS0gIFBvcG92ZXIgY29uZmlybSAgLS0+XG4gIDxjOHktcG9wb3Zlci1jb25maXJtXG4gICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgY29udGFpbmVyQ2xhc3M9XCJuYXZpZ2F0b3ItcG9wb3ZlclwiXG4gID48L2M4eS1wb3BvdmVyLWNvbmZpcm0+XG48L25nLXRlbXBsYXRlPlxuIl19
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdG9yLW5vZGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9uYXZpZ2F0b3IvbmF2aWdhdG9yLW5vZGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS9uYXZpZ2F0b3IvbmF2aWdhdG9yLW5vZGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMkNBQTJDO0FBQzNDLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNULGdCQUFnQixFQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDN0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFnQixhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7Ozs7O0FBUS9EOztHQUVHO0FBS0gsTUFBTSxPQUFPLHNCQUFzQjtJQTZFakMsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUE3RGxDOzs7Ozs7O1dBT0c7UUFDTyxjQUFTLEdBQXlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFTL0Q7O1dBRUc7UUFDSCxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVoQzs7V0FFRztRQUNILGNBQVMsR0FBRyxLQUFLLENBQ2Ys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QUMsS0FBSyxFQUFFLENBQUM7UUFDdEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFO1lBQ2hFLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7U0FDN0IsQ0FBQyxDQUFDO1FBQ0gsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztJQUN6QyxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUU7WUFDbEUsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUTtTQUM3QixDQUFDLENBQUM7SUFDTCxDQUFDOzhHQWpOVSxzQkFBc0I7a0dBQXRCLHNCQUFzQix3TkFJTixnQkFBZ0IsdURBeUJoQyx1QkFBdUIscUVDL0RwQyw0MUZBK0ZBLHk4Q0Q3RGEsc0JBQXNCOzsyRkFBdEIsc0JBQXNCO2tCQUpsQyxTQUFTOytCQUNFLG9CQUFvQjsyRUFPZ0MsUUFBUTtzQkFBckUsU0FBUzt1QkFBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFLbkQsSUFBSTtzQkFBWixLQUFLO2dCQUtHLE1BQU07c0JBQWQsS0FBSztnQkFVSSxTQUFTO3NCQUFsQixNQUFNO2dCQUtnRCxPQUFPO3NCQUE3RCxTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IFN1YmplY3QsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFBvcG92ZXJDb25maXJtQ29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWwvcG9wb3Zlci1jb25maXJtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOYXZpZ2F0b3JJY29uQ29tcG9uZW50IH0gZnJvbSAnLi9uYXZpZ2F0b3ItaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2xpY2tPcHRpb25zLCBOYXZpZ2F0b3JOb2RlIH0gZnJvbSAnLi9uYXZpZ2F0b3Itbm9kZSc7XG5cbmV4cG9ydCBjb25zdCBlbnVtIENsaWNrRXZlbnRTb3VyY2Uge1xuICBJQ09OID0gJ2ljb24nLFxuICBFWFBBTkRFUiA9ICdleHBhbmRlcicsXG4gIExJTksgPSAnbGluaydcbn1cblxuLyoqXG4gKiBOYXZpZ2F0b3Igbm9kZSByZW5kZXJlci5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LW5hdmlnYXRvci1ub2RlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25hdmlnYXRvci1ub2RlLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBOYXZpZ2F0b3JOb2RlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgQFZpZXdDaGlsZCgnaWNvbicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiBmYWxzZSB9KSBpY29uU2xvdDogVmlld0NvbnRhaW5lclJlZjtcblxuICAvKipcbiAgICogTmF2aWdhdG9yIG5vZGUuXG4gICAqL1xuICBASW5wdXQoKSBub2RlOiBOYXZpZ2F0b3JOb2RlO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIG5hdmlnYXRvciBub2RlIGlzIGEgcm9vdCBub2RlICh0b3Agbm9kZSBpbiB0aGUgaGllcmFyY2h5KS5cbiAgICovXG4gIEBJbnB1dCgpIGlzUm9vdDogYm9vbGVhbjtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlciByZXNwb25zaWJsZSBmb3IgYnJvYWRjYXN0aW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nIGV2ZW50czogXCJpY29uXCIsIFwiZXhwYW5kZXJcIiBvciBcImxpbmtcIiBhcyBzdHJpbmcgdmFsdWUuXG4gICAqXG4gICAqIFRoZSB0eXBlIG9mIGV2ZW50IGRlcGVuZHMgb24gd2hlcmUgeW91IGNsaWNrIG9uIHRoZSBuYXZpZ2F0b3Igbm9kZTpcbiAgICogKiBjbGlja2luZyB0aGUgaWNvbiB3aWxsIGJyb2FkY2FzdCB0aGUgZXZlbnQgXCJpY29uXCIsXG4gICAqICogY2xpY2tpbmcgdGhlIGV4cGFuZGVyIHdpbGwgYnJvYWRjYXN0IHRoZSBldmVudCBcImV4cGFuZGVyXCIsXG4gICAqICogY2xpY2tpbmcgdGhlIGxhYmVsIHdpbGwgYnJvYWRjYXN0IHRoZSBldmVudCBcImxpbmtcIi5cbiAgICovXG4gIEBPdXRwdXQoKSBub2RlQ2xpY2s6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBAVmlld0NoaWxkKFBvcG92ZXJDb25maXJtQ29tcG9uZW50LCB7IHN0YXRpYzogZmFsc2UgfSkgY29uZmlybTogUG9wb3ZlckNvbmZpcm1Db21wb25lbnQ7XG5cbiAgcHJpdmF0ZSB2aWV3SW5pdFRpbWVvdXQ7XG5cbiAgLyoqXG4gICAqIEEgc3ViamVjdCB0aGF0IGlzIHRyaWdnZXJlZCBhcyBzb29uIGFzIHRoZSBuYXZpZ2F0b3Igbm9kZSBpcyBpbml0aWFsaXplZC5cbiAgICovXG4gIG5vZGVJbml0JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIEEgb2JzZXJ2YWJsZSB3aGljaCBlbWl0cywgYXMgc29vbiBhcyB0aGUgYWN0aXZlIHN0YXRlIG9mIHRoZSBub2RlIGNoYW5nZXMuXG4gICAqL1xuICBpc0FjdGl2ZSQgPSBtZXJnZShcbiAgICB0aGlzLm5vZGVJbml0JCxcbiAgICB0aGlzLnJvdXRlci5ldmVudHMucGlwZShmaWx0ZXIoZSA9PiBlIGluc3RhbmNlb2YgQWN0aXZhdGlvbkVuZCkpXG4gICkucGlwZShcbiAgICBtYXAoKCkgPT4ge1xuICAgICAgaWYgKGlzVW5kZWZpbmVkKHRoaXMubm9kZS5wYXRoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvLyBvbiBleGFjdCBtYXRjaCwgZm9yIGVtcHR5IHJvdXRlcyAnJyB3ZSBuZWVkIGEgc3BlY2lhbFxuICAgICAgLy8gaGFuZGxpbmcgYXMgdGhlcmUgc2VlbXMgdG8gYmUgYSBidWcgd2l0aCBhbmd1bGFyLCBhcyBpdFxuICAgICAgLy8gZG9lcyBub3Qgc2hvdyB0aGUgcHJpbWFyeSBvdWxldCBpbiB0aGlzIGNhc2VzLlxuICAgICAgY29uc3QgY3VycmVudFVybFRyZWUgPSB0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLnJvdXRlci51cmwpO1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLm5vZGUucm91dGVyTGlua0V4YWN0ICYmXG4gICAgICAgICFjdXJyZW50VXJsVHJlZS5yb290LmNoaWxkcmVuWydwcmltYXJ5J10gJiZcbiAgICAgICAgdGhpcy5ub2RlLnBhdGggPT09ICcvJ1xuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZXIuaXNBY3RpdmUodGhpcy5ub2RlLnBhdGgsIHtcbiAgICAgICAgcGF0aHM6IHRoaXMubm9kZS5yb3V0ZXJMaW5rRXhhY3QgPyAnZXhhY3QnIDogJ3N1YnNldCcsXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiAnaWdub3JlZCcsXG4gICAgICAgIGZyYWdtZW50OiAnaWdub3JlZCcsXG4gICAgICAgIG1hdHJpeFBhcmFtczogJ2lnbm9yZWQnXG4gICAgICB9KTtcbiAgICB9KSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgIHRhcChpc0FjdGl2ZSA9PiB7XG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgdGhpcy5leHBhbmRDb2xsYXBzZSh0cnVlKTtcbiAgICAgICAgdGhpcy5leHBhbmRSZWN1cnNpdmVQYXJlbnQodGhpcy5ub2RlLnBhcmVudHMpO1xuICAgICAgfVxuICAgIH0pXG4gICk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge31cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKFxuICAgICAgY2hhbmdlcy5ub2RlICYmXG4gICAgICAhY2hhbmdlcy5ub2RlLmZpcnN0Q2hhbmdlICYmXG4gICAgICBjaGFuZ2VzLm5vZGUucHJldmlvdXNWYWx1ZS5pY29uICE9PSBjaGFuZ2VzLm5vZGUuY3VycmVudFZhbHVlLmljb25cbiAgICApIHtcbiAgICAgIHRoaXMudXBkYXRlSWNvbigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKCF0aGlzLm5vZGUuY29tcG9uZW50KSB7XG4gICAgICB0aGlzLnZpZXdJbml0VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUljb24oKTtcbiAgICAgICAgdGhpcy5ub2RlLmNvbmZpcm0gPSB0aGlzLmNvbmZpcm07XG4gICAgICAgIHRoaXMubm9kZUluaXQkLm5leHQoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBleHBhbmRlciB0aXRsZS5cbiAgICovXG4gIGdldCBleHBhbmRUaXRsZSgpIHtcbiAgICByZXR1cm4gIXRoaXMubm9kZS5vcGVuID8gJ0V4cGFuZCcgOiAnQ29sbGFwc2UnO1xuICB9XG5cbiAgLyoqXG4gICAqIENsaWNrIGV2ZW50IGhhbmRsZXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmcm9tIFNvdXJjZSBvZiB0aGUgY2xpY2sgZXZlbnQuXG4gICAqIEBwYXJhbSBldmVudCBET00gZXZlbnQuXG4gICAqL1xuICBjbGljayhmcm9tOiAnaWNvbicgfCAnZXhwYW5kZXInIHwgJ2xpbmsnID0gJ2xpbmsnLCAkZXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgbGV0IG9wZW46IGJvb2xlYW47XG4gICAgc3dpdGNoIChmcm9tKSB7XG4gICAgICBjYXNlIENsaWNrRXZlbnRTb3VyY2UuRVhQQU5ERVI6XG4gICAgICAgIGlmICgkZXZlbnQpIHtcbiAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgb3BlbiA9ICF0aGlzLm5vZGUub3BlbjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENsaWNrRXZlbnRTb3VyY2UuSUNPTjpcbiAgICAgIGNhc2UgQ2xpY2tFdmVudFNvdXJjZS5MSU5LOlxuICAgICAgICBvcGVuID0gdGhpcy5yb3V0ZXIuaXNBY3RpdmUodGhpcy5ub2RlLnBhdGgsIHRoaXMubm9kZS5yb3V0ZXJMaW5rRXhhY3QpXG4gICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgOiAhdGhpcy5ub2RlLm9wZW47XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZUV4cGFuZENvbGxhcHNlKG9wZW4sIGZyb20sICRldmVudCk7XG4gICAgdGhpcy5ub2RlQ2xpY2suZW1pdChmcm9tKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBhbmRzIG9yIGNvbGxhcHNlcyB0aGUgbmF2aWdhdG9yIG5vZGUgYW5kIGl0cyBjaGlsZHJlbiByZWN1cnNpdmVseS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBvcGVuIE9wZW4gb3IgY2xvc2UgdGhlIG5vZGUuXG4gICAqIEBwYXJhbSB7Q2xpY2tPcHRpb25zfSBmb3JOb2RlIENsaWNrIG9wdGlvbnMuXG4gICAqL1xuICBleHBhbmRDb2xsYXBzZShvcGVuLCBmb3JOb2RlOiBDbGlja09wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMubm9kZS5vcGVuID0gb3BlbjtcbiAgICBmb3JOb2RlLm9wZW4gPSBvcGVuO1xuICAgIHRoaXMubm9kZS5jbGljayhmb3JOb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy52aWV3SW5pdFRpbWVvdXQpO1xuXG4gICAgaWYgKHRoaXMubm9kZSkge1xuICAgICAgdGhpcy5ub2RlLmRlc3Ryb3koKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXhwYW5kcyB0aGUgcGFyZW50IG5vZGVzIHJlY3Vyc2l2ZWx5LlxuICAgKiBAcGFyYW0gbm9kZXMgVGhlIG5vZGVzIHRoYXQgc2hvdWxkIGJlIHRyaWVkIHRvIGdldCBvcGVuZWQuXG4gICAqIEBwYXJhbSBjbGlja09wdGlvbiBUaGUgY2xpY2sgb3B0aW9ucyB0byBwZXJmb3JtIG9uIHRoZSBwYXJlbnQgbm9kZXMuXG4gICAqL1xuICBleHBhbmRSZWN1cnNpdmVQYXJlbnQobm9kZXM6IE5hdmlnYXRvck5vZGVbXSwgY2xpY2tPcHRpb246IENsaWNrT3B0aW9ucyA9IHsgZXhwYW5kZXI6IHRydWUgfSkge1xuICAgIG5vZGVzLmZvckVhY2gocGFyZW50Tm9kZSA9PiB7XG4gICAgICBpZiAoIXBhcmVudE5vZGUub3Blbikge1xuICAgICAgICBwYXJlbnROb2RlLm9wZW4gPSB0cnVlO1xuICAgICAgICBwYXJlbnROb2RlLmNsaWNrKGNsaWNrT3B0aW9uKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhwYW5kUmVjdXJzaXZlUGFyZW50KHBhcmVudE5vZGUucGFyZW50cywgY2xpY2tPcHRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFeHBhbmRDb2xsYXBzZShvcGVuLCBmcm9tLCAkZXZlbnQpIHtcbiAgICBpZiAoXG4gICAgICBvcGVuID09PSB0aGlzLm5vZGUub3BlbiB8fFxuICAgICAgKHRoaXMubm9kZS5wYXRoICYmICFvcGVuICYmIGZyb20gIT09IENsaWNrRXZlbnRTb3VyY2UuRVhQQU5ERVIpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZXhwYW5kQ29sbGFwc2Uob3BlbiwgeyBbZnJvbV06IHRydWUsICRldmVudCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSWNvbigpIHtcbiAgICBpZiAodGhpcy5ub2RlLmljb25UZW1wbGF0ZSkge1xuICAgICAgdGhpcy51cGRhdGVJY29uVGVtcGxhdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVJY29uQ29tcG9uZW50KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJY29uQ29tcG9uZW50KCkge1xuICAgIGxldCBjb21wb25lbnRUeXBlID0gTmF2aWdhdG9ySWNvbkNvbXBvbmVudDtcbiAgICBpZiAodGhpcy5ub2RlICYmIHRoaXMubm9kZS5pY29uQ29tcG9uZW50KSB7XG4gICAgICBjb21wb25lbnRUeXBlID0gdGhpcy5ub2RlLmljb25Db21wb25lbnQ7XG4gICAgfVxuICAgIHRoaXMuaWNvblNsb3QuY2xlYXIoKTtcbiAgICBjb25zdCBjb21wb25lbnRSZWYgPSB0aGlzLmljb25TbG90LmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRUeXBlLCB7XG4gICAgICBpbmplY3RvcjogdGhpcy5ub2RlLmluamVjdG9yXG4gICAgfSk7XG4gICAgY29tcG9uZW50UmVmLmluc3RhbmNlLm5vZGUgPSB0aGlzLm5vZGU7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUljb25UZW1wbGF0ZSgpIHtcbiAgICB0aGlzLmljb25TbG90LmNsZWFyKCk7XG4gICAgdGhpcy5pY29uU2xvdC5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5ub2RlLmljb25UZW1wbGF0ZSwgdW5kZWZpbmVkLCB7XG4gICAgICBpbmplY3RvcjogdGhpcy5ub2RlLmluamVjdG9yXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJub2RlLmNvbXBvbmVudFwiPlxuICA8bmctY29udGFpbmVyICpjOHlDb21wb25lbnRPdXRsZXQ9XCJub2RlLmNvbXBvbmVudDsgZW52aXJvbm1lbnRJbmplY3Rvcjogbm9kZS5pbmplY3RvclwiPjwvbmctY29udGFpbmVyPlxuPC9uZy1jb250YWluZXI+XG5cbjxkaXZcbiAgY2xhc3M9XCJzbG90XCJcbiAgKm5nSWY9XCIhbm9kZS5jb21wb25lbnRcIlxuICBbaGlkZGVuXT1cIm5vZGUuaGlkZGVuXCJcbiAgKGRyYWdzdGFydCk9XCJub2RlLmRyYWdTdGFydCgkZXZlbnQpXCJcbiAgKGRyYWdlbmQpPVwibm9kZS5kcmFnRW5kKCRldmVudClcIlxuICAoZHJvcCk9XCJub2RlLmRyb3AoJGV2ZW50KVwiXG4gIFtkcmFnZ2FibGVdPVwibm9kZS5kcmFnZ2FibGVcIlxuICBbbmdDbGFzc109XCJ7IGRyYWdnZWQ6IG5vZGUuZHJhZ2dlZCwgZGlzYWJsZWQ6IG5vZGUubG9hZGluZyB9XCJcbj5cbiAgPG5nLWNvbnRhaW5lcj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImxpbmtcIlxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICBbcm91dGVyTGlua109XCJub2RlLmNhbk5hdmlnYXRlID8gbm9kZS5wYXRoIDogdW5kZWZpbmVkXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgYWN0aXZlOiBpc0FjdGl2ZSQgfCBhc3luYyxcbiAgICAgICAgJ2RyYWdnZWQtaG92ZXInOiBub2RlLmRyYWdnZWRIb3ZlciAmJiAhbm9kZS5kcmFnZ2VkXG4gICAgICB9XCJcbiAgICAgIChkcmFnb3Zlcik9XCJub2RlLmNhbkRyb3AgJiYgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgKGRyYWdlbnRlcik9XCJub2RlLmNhbkRyb3AgJiYgbm9kZS5kcmFnRW50ZXIoJGV2ZW50KVwiXG4gICAgICAoZHJhZ2xlYXZlKT1cIm5vZGUuY2FuRHJvcCAmJiBub2RlLmRyYWdMZWF2ZSgkZXZlbnQpXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibmF2aWNvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cImJ0bi1jbGVhblwiXG4gICAgICAgIHRpdGxlPVwie3sgbm9kZS50cmFuc2xhdGVMYWJlbCA/IChub2RlLmxhYmVsIHwgdHJhbnNsYXRlKSA6IG5vZGUubGFiZWwgfX1cIlxuICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm5vZGUuaGFzQ2hpbGRyZW4gPyBub2RlLm9wZW4gOiBudWxsXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGRyYWdnYWJsZT1cImZhbHNlXCJcbiAgICAgICAgW2F0dHIuZGF0YS1jeV09XCJub2RlLmxhYmVsXCJcbiAgICAgICAgW2F0dHIuaWRdPVwiaXNSb290ID8gbm9kZS5pZCA6IHVuZGVmaW5lZFwiXG4gICAgICAgIChjbGljayk9XCJjbGljayhub2RlLmNhbk5hdmlnYXRlID8gJ2xpbmsnIDogJ2V4cGFuZGVyJywgJGV2ZW50KVwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAncm9vdC1saW5rJzogaXNSb290LFxuICAgICAgICAgIG9wZW46IG5vZGUub3BlbiAmJiBub2RlLmhhc0NoaWxkcmVuLFxuICAgICAgICAgIHBhcmVudDogbm9kZS5oYXNDaGlsZHJlblxuICAgICAgICB9XCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlubmVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPGRpdlxuICAgIGNsYXNzPVwiY2hpbGRyZW4gcGFuZWwtZXhwYW5kIGV4cGFuZFwiXG4gICAgKm5nSWY9XCJub2RlLmNoaWxkcmVuLmxlbmd0aFwiXG4gICAgW2NvbGxhcHNlXT1cIiFub2RlLm9wZW5cIlxuICAgIFtpc0FuaW1hdGVkXT1cInRydWVcIlxuICA+XG4gICAgPGM4eS1uYXZpZ2F0b3Itbm9kZVxuICAgICAgKm5nRm9yPVwibGV0IGNoaWxkTm9kZSBvZiBub2RlLmNoaWxkcmVuXCJcbiAgICAgIFtub2RlXT1cImNoaWxkTm9kZVwiXG4gICAgICAobm9kZUNsaWNrKT1cIm5vZGVDbGljay5lbWl0KCRldmVudClcIlxuICAgID48L2M4eS1uYXZpZ2F0b3Itbm9kZT5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBpY29uIC0tPlxuPG5nLXRlbXBsYXRlICNuYXZpY29uPlxuICA8IS0tIGxvYWRlciAtLT5cbiAgPGlcbiAgICBjbGFzcz1cImljb24tc3BpbiBsb2FkaW5nSW5kaWNhdG9yXCJcbiAgICBbYzh5SWNvbl09XCInY2lyY2xlLW8tbm90Y2gnXCJcbiAgICBbbmdDbGFzc109XCJ7ICdtLWwtMTYnIDogaXNSb290LCAnbS1sLTgnOiAhaXNSb290IH1cIlxuICAgICpuZ0lmPVwibm9kZS5sb2FkaW5nICYmICFpc1Jvb3RcIlxuICA+PC9pPlxuICA8bmctY29udGFpbmVyICNpY29uPjwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbm5lcj5cbiAgPCEtLXRpdGxlICAtLT5cbiAgPHNwYW4+e3sgbm9kZS50cmFuc2xhdGVMYWJlbCA/IChub2RlLmxhYmVsIHwgdHJhbnNsYXRlKSA6IG5vZGUubGFiZWwgfX08L3NwYW4+XG5cbiAgPCEtLWV4cGFuZGVyICAtLT5cbiAgPGlcbiAgICBjbGFzcz1cImV4cGFuZGVyXCJcbiAgICBbYzh5SWNvbl09XCInY2hldnJvbi1kb3duJ1wiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCJleHBhbmRUaXRsZVwiXG4gICAgcm9sZT1cImJ1dHRvblwiXG4gICAgKm5nSWY9XCJub2RlLmhhc0NoaWxkcmVuXCJcbiAgICAoY2xpY2spPVwiY2xpY2soJ2V4cGFuZGVyJywgJGV2ZW50KVwiXG4gICAgZGF0YS1jeT1cImM4eS1uYXZpZ2F0b3Itbm9kZS0tZXhwYW5kZXJcIlxuICA+PC9pPlxuXG4gIDwhLS0gIFBvcG92ZXIgY29uZmlybSAgLS0+XG4gIDxjOHktcG9wb3Zlci1jb25maXJtXG4gICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgY29udGFpbmVyQ2xhc3M9XCJuYXZpZ2F0b3ItcG9wb3ZlclwiXG4gID48L2M4eS1wb3BvdmVyLWNvbmZpcm0+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -349,4 +349,4 @@ export class NavigatorNode {
349
349
  }
350
350
  }
351
351
  }
352
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdG9yLW5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL25hdmlnYXRvci9uYXZpZ2F0b3Itbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQThCL0M7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7YUFDakIsU0FBSSxHQUFHLGVBQWUsQUFBbEIsQ0FBbUI7SUEwSDlCOzs7T0FHRztJQUNILElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLEVBQUU7UUFDSixPQUFPLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksUUFBUTtRQUNWLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUN4QixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDOUUsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDOUIsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekUsQ0FBQztZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxRQUFRLENBQUMsUUFBUTtR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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yLCBUZW1wbGF0ZVJlZiwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWF0Y2hlcywgc25ha2VDYXNlIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IE5hdmlnYXRvck5vZGVEYXRhIH0gZnJvbSAnLi9uYXZpZ2F0b3Itbm9kZS1kYXRhJztcbmltcG9ydCB7IFBvcG92ZXJDb25maXJtQ29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWwvcG9wb3Zlci1jb25maXJtLmNvbXBvbmVudCc7XG5cbi8qKlxuICogSW50ZXJmYWNlIHRoYXQgZGV0ZXJtaW5lcyB0aGUgYXZhaWxhYmxlIGNsaWNrIG9wdGlvbnMuXG4gKiBAaWdub3JlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpY2tPcHRpb25zIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBzb3VyY2Ugb2YgdGhlIGV2ZW50IGlzIGEgY2xpY2sgb24gdGhlIG5vZGUgaWNvbi5cbiAgICovXG4gIGljb24/OiBib29sZWFuO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNvdXJjZSBvZiB0aGUgZXZlbnQgaXMgYSBjbGljayBvbiB0aGUgbm9kZSBleHBhbmRlci5cbiAgICovXG4gIGV4cGFuZGVyPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBuYXZpZ2F0b3Igbm9kZSBpcyBleHBhbmRlZC9jb2xsYXBzZWQuXG4gICAqL1xuICBvcGVuPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgZ3JvdXAgbm9kZSB3aGljaCB3aWxsIGNvbnRhaW4gYWxsIHVuYXNzaWduZWQgZGV2aWNlcy5cbiAgICovXG4gIHNob3dVbmFzc2lnbmVkRGV2aWNlcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBET00gZXZlbnQuXG4gICAqL1xuICAkZXZlbnQ/OiBhbnk7IC8vIFRPRE86IGFkZCBwcm9wZXIgdHlwZVxufVxuLyoqXG4gKiBCYXNlIG5hdmlnYXRvciBub2RlLiBSZXByZXNlbnRzIGEgc2luZ2xlIGVudHJ5IGluIHRoZSBuYXZpZ2F0b3IgbWVudS5cbiAqIElzIGNvbnNpZGVyZWQgdG8gYmUgdGhlIGJhc2ljIGJ1aWxkaW5nIGJsb2NrIG9mIHRoZSBuYXZpZ2F0b3IuXG4gKi9cbmV4cG9ydCBjbGFzcyBOYXZpZ2F0b3JOb2RlIHtcbiAgc3RhdGljIE5BTUUgPSAnTmF2aWdhdG9yTm9kZSc7XG4gIC8qKlxuICAgKiBOYXZpZ2F0b3Igbm9kZSBpY29uLlxuICAgKi9cbiAgaWNvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYXZpZ2F0b3Igbm9kZSBpY29uIHdoZW4gZXhwYW5kZWQuXG4gICAqL1xuICBpY29uT3Blbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gaWNvbiB0ZW1wbGF0ZS5cbiAgICovXG4gIGljb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBpY29uIGNvbXBvbmVudC5cbiAgICovXG4gIGljb25Db21wb25lbnQ/OiBUeXBlPGFueT47XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRvciBub2RlIGNoaWxkcmVuIChzdWJlbnRyaWVzKS5cbiAgICovXG4gIGNoaWxkcmVuOiBOYXZpZ2F0b3JOb2RlW10gPSBbXTtcblxuICAvKipcbiAgICogTGFiZWwgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBuYXZpZ2F0b3Igbm9kZS5cbiAgICovXG4gIGxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcGFzcyBgbGFiZWxgIHRocm91Z2ggYHRyYW5zbGF0ZWAgcGlwZSB3aGVuIGJlaW5nIGRpc3BsYXllZC5cbiAgICovXG4gIHRyYW5zbGF0ZUxhYmVsID0gdHJ1ZTtcblxuICAvKipcbiAgICogVGhlIHBhdGggdG8gd2hpY2ggdGhlIFVJIHdpbGwgYmUgcmVkaXJlY3RlZCBhZnRlciBjbGlja2luZyB0aGUgbmF2aWdhdG9yIG5vZGUuXG4gICAqL1xuICBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRvciBub2RlIHBhcmVudCBub2Rlcy5cbiAgICovXG4gIHBhcmVudHM6IE5hdmlnYXRvck5vZGVbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBMb2FkaW5nIHN0YXRlIGluZGljYXRvci5cbiAgICovXG4gIGxvYWRpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGxvYWQgdGhlIHByb3ZpZGVycyBmb3IgdGhlIGNvbXBvbmVudHMuIElmIG5vdCBwcm92aWRlZCwgZGVmYXVsdCBpbmplY3RvciB1cyB1c2VkLlxuICAgKi9cbiAgaW5qZWN0b3I/OiBJbmplY3RvcjtcblxuICAvKipcbiAgICogQ3VzdG9tIGNvbXBvbmVudCB0byB1c2UuXG4gICAqL1xuICBjb21wb25lbnQ/OiBUeXBlPGFueT47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBuYXZpZ2F0b3Igbm9kZSBzaG91bGQgYmUgYWN0aXZlIGJhc2VkIG9uIG1hdGNoaW5nIHRoZSBub2RlIHBhdGggYW5kIHRoZSBVUkwgcGF0aC5cbiAgICogVG8gbWF0Y2ggdGhlIFVSTCBleGFjdGx5LCBzZXQgdGhpcyBvcHRpb24gdG8gdHJ1ZS5cbiAgICpcbiAgICogcm91dGVyTGlua0V4YWN0IHNldCB0byB0cnVlOlxuICAgKiBXaGVuIHRoZSBVUkwgcGF0aCBpcyBzZXQgdG8gL2EvYi9jIGFuZCB0aGUgbm9kZSBwYXRoIHRvIC9hL2IgdGhlbiB0aGUgbm9kZSB3aWxsIG5vdCBiZSBzZXQgYWN0aXZlLlxuICAgKlxuICAgKiByb3V0ZXJMaW5rRXhhY3Qgc2V0IHRvIGZhbHNlOlxuICAgKiBXaGVuIHRoZSBVUkwgcGF0aCBpcyBzZXQgdG8gL2EvYi9jIGFuZCB0aGUgbm9kZSBwYXRoIHRvIC9hL2IgdGhlbiB0aGUgbm9kZSB3aWxsIGJlIHNldCBhY3RpdmUuXG4gICAqL1xuICByb3V0ZXJMaW5rRXhhY3QgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgbmF2aWdhdG9yIG5vZGUgaXMgZXhwYW5kZWQvY29sbGFwc2VkLlxuICAgKi9cbiAgb3BlbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgbmF2aWdhdG9yIG5vZGUgaXMgdmlzaWJsZS9oaWRkZW4uXG4gICAqL1xuICBoaWRkZW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIG5hdmlnYXRvciBub2RlIGlzIGRyYWdnYWJsZS5cbiAgICovXG4gIGRyYWdnYWJsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgbmF2aWdhdG9yIG5vZGUgaXMgZHJvcHBhYmxlLlxuICAgKi9cbiAgZHJvcHBhYmxlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBuYXZpZ2F0b3Igbm9kZSBpcyBkcmFnZ2VkLlxuICAgKi9cbiAgZHJhZ2dlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBjdXJyZW50bHkgc29tZXRoaW5nIGlzIGRyYWdnZWQgb3ZlciB0aGUgbm9kZS5cbiAgICovXG4gIGRyYWdnZWRIb3ZlciA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBDb25maXJtYXRpb24gcG9wb3ZlciBkaXNwbGF5ZWQgYXQgdGhlIGVuZCBvZiB0aGUgcHJvY2VzcyBvZiBtb3ZpbmcgdGhlIG5hdmlnYXRvciBtZW51IGl0ZW0uXG4gICAqL1xuICBjb25maXJtOiBQb3BvdmVyQ29uZmlybUNvbXBvbmVudCA9IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGJyZWFkY3J1bWIgb2YgdGhlIG5vZGUsIGRpc3BsYXlpbmcgdGhlIFwicGF0aFwiLCBidXQgc3VwcG9ydHMgbXVsdGlwbGUgbGV2ZWxzLlxuICAgKiBlLmcuIChHcm91cHMgPiBMZXZlbCAxID4gTGV2ZWwgMilcbiAgICovXG4gIGJyZWFkY3J1bWI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElkIHRvIGlkZW50aWZ5IHNwZWNpZmljIGZlYXR1cmUgbm9kZS5cbiAgICovXG4gIGZlYXR1cmVJZD86IHN0cmluZztcblxuICBwcml2YXRlIF9wcmlvcml0eSA9IDA7XG4gIHByaXZhdGUgZXhwYW5kRHJhZ1RpbWVvdXQ7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgaW5mb3JtYXRpb24gd2hldGhlciBhIG5hdmlnYXRvciBub2RlIGhhcyBjaGlsZHJlbi5cbiAgICogQHJlYWRvbmx5XG4gICAqL1xuICBnZXQgaGFzQ2hpbGRyZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBJRCBvZiB0aGUgbmF2aWdhdG9yIG5vZGUuXG4gICAqIEByZWFkb25seVxuICAgKi9cbiAgZ2V0IGlkKCkge1xuICAgIHJldHVybiAnbmF2aWdhdG9yX25vZGVfJyArIHNuYWtlQ2FzZSh0aGlzLmxhYmVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcmlvcml0eSB2YWx1ZSBvZiB0aGUgbmF2aWdhdG9yIG5vZGUuXG4gICAqIEByZWFkb25seVxuICAgKi9cbiAgZ2V0IHByaW9yaXR5KCkge1xuICAgIGlmICh0aGlzLl9wcmlvcml0eSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3ByaW9yaXR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjaGlsZHJlblByaW9yaXRpZXMgPSB0aGlzLmNoaWxkcmVuLm1hcCgoeyBwcmlvcml0eSB9KSA9PiBwcmlvcml0eSB8fCAwKTtcbiAgICAgIGlmIChjaGlsZHJlblByaW9yaXRpZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBjaGlsZHJlblByaW9yaXRpZXMubGVuZ3RoID8gTWF0aC5tYXgoLi4uY2hpbGRyZW5Qcmlvcml0aWVzKSA6IDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcHJpb3JpdHkgdmFsdWUgb2YgdGhlIG5hdmlnYXRvciBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcHJpb3JpdHkgUHJpb3JpdHkgdmFsdWUuXG4gICAqL1xuICBzZXQgcHJpb3JpdHkocHJpb3JpdHkpIHtcbiAgICB0aGlzLl9wcmlvcml0eSA9IHByaW9yaXR5O1xuICB9XG5cbiAgY29uc3RydWN0b3IoZGF0YT86IE5hdmlnYXRvck5vZGVEYXRhKSB7XG4gICAgdGhpcy51cGRhdGUoZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGNoaWxkIG5hdmlnYXRvciBub2RlIHRvIHRoZSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge05hdmlnYXRvck5vZGV9IG5vZGUgQ2hpbGQgbm9kZS5cbiAgICovXG4gIGFkZChub2RlOiBOYXZpZ2F0b3JOb2RlKSB7XG4gICAgaWYgKG5vZGUgPT09IHRoaXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQWRkaW5nIG5vZGUgdG8gaXRzZWxmJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNoaWxkcmVuLmluZGV4T2Yobm9kZSkgPT09IC0xKSB7XG4gICAgICB0aGlzLmNoaWxkcmVuLnB1c2gobm9kZSk7XG4gICAgfVxuICAgIGlmIChub2RlLnBhcmVudHMuaW5kZXhPZih0aGlzKSA9PT0gLTEpIHtcbiAgICAgIG5vZGUucGFyZW50cy5wdXNoKHRoaXMpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNoaWxkcmVuKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgY2hpbGQgbmF2aWdhdG9yIG5vZGUgZnJvbSB0aGUgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtOYXZpZ2F0b3JOb2RlfSBub2RlIENoaWxkIG5vZGUuXG4gICAqL1xuICByZW1vdmUobm9kZTogTmF2aWdhdG9yTm9kZSkge1xuICAgIGNvbnN0IGl4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKG5vZGUpO1xuICAgIGNvbnN0IHBpeCA9IG5vZGUucGFyZW50cy5pbmRleE9mKHRoaXMpO1xuICAgIGlmIChpeCA+IC0xKSB7XG4gICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpeCwgMSk7XG4gICAgfVxuICAgIGlmIChwaXggPiAtMSkge1xuICAgICAgbm9kZS5wYXJlbnRzLnNwbGljZShwaXgsIDEpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNoaWxkcmVuKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgbmF2aWdhdG9yIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7TmF2aWdhdG9yTm9kZURhdGF9IGRhdGEgRGF0YSB0byBiZSB1cGRhdGVkLlxuICAgKi9cbiAgdXBkYXRlKGRhdGE/OiBOYXZpZ2F0b3JOb2RlRGF0YSkge1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGRhdGEpO1xuICAgICAgaWYgKGRhdGEuaGlkZGVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRzLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgcC51cGRhdGVIaWRkZW4oKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIFJldHVybnMgYSBjaGlsZCBuYXZpZ2F0b3Igbm9kZSBiYXNlZCBvbiB0aGUgcHJlZGljYXRlLlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiAvLyBUaGUgZnVuY3Rpb24gd2lsbCBjb21wYXJlIHRoZSBsYWJlbHMgdG8gdGhlIHN0cmluZyBhbmQgcmV0dXJuIGEgbWF0Y2hpbmcgcmVzdWx0LlxuICAgKiAvLyBUaGUgY2FwaXRhbGl6YXRpb24gb2YgdGhlIGNoYXJhY3RlcnMgZG9lcyBub3QgbWF0dGVyIChjYXNlIGluc2Vuc2l0aXZlKS5cbiAgICogY29uc3QgcHJlZGljYXRlID0gJ2dyb3VwMSc7XG4gICAqIGNvbnN0IGNoaWxkTm9kZSA9IHBhcmVudE5vZGUuZmluZChwcmVkaWNhdGUpO1xuICAgKiAvLyBDaGVjazogW2xvZGFzaCBtYXRjaGVzXShodHRwczovL2xvZGFzaC5jb20vZG9jcy80LjE3LjE1I21hdGNoZXMpXG4gICAqIGNvbnN0IHByZWRpY2F0ZSA9IHsgbGFiZWw6ICdncm91cDInIH07XG4gICAqIGNvbnN0IGNoaWxkTm9kZSA9IHBhcmVudE5vZGUuZmluZChwcmVkaWNhdGUpO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHByZWRpY2F0ZSBGaWx0ZXIgY3JpdGVyaWEuXG4gICAqIEBwYXJhbSBmaW5kQnkgTmF2aWdhdG9yTm9kZSBmaWVsZCBuYW1lIHRvIGNvbXBhcmUuXG4gICAqXG4gICAqL1xuICBmaW5kKHByZWRpY2F0ZSwgZmluZEJ5OiBrZXlvZiBQaWNrPE5hdmlnYXRvck5vZGUsICdsYWJlbCcgfCAnZmVhdHVyZUlkJz4gPSAnbGFiZWwnKSB7XG4gICAgaWYgKHR5cGVvZiBwcmVkaWNhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoZmluZEJ5ID09PSAnbGFiZWwnKSB7XG4gICAgICAgIGNvbnN0IGNvbXBhcmVMYWJlbCA9IHByZWRpY2F0ZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBwcmVkaWNhdGUgPSAoeyBsYWJlbCB9KSA9PiBjb21wYXJlTGFiZWwgPT09IGxhYmVsPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY29tcGFyZUlkID0gcHJlZGljYXRlO1xuICAgICAgICBwcmVkaWNhdGUgPSAoeyBmZWF0dXJlSWQgfSkgPT4gY29tcGFyZUlkID09PSBmZWF0dXJlSWQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcHJlZGljYXRlID09PSAnb2JqZWN0Jykge1xuICAgICAgcHJlZGljYXRlID0gbWF0Y2hlcyhwcmVkaWNhdGUpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHByZWRpY2F0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNlYXJjaCBwcmVkaWNhdGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ucmVkdWNlKFxuICAgICAgKGZvdW5kLCBjaGlsZCkgPT4gZm91bmQgfHwgY2hpbGQuZmluZChwcmVkaWNhdGUpLFxuICAgICAgdGhpcy5jaGlsZHJlbi5maW5kKHByZWRpY2F0ZSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgY2hpbGRyZW4gbm9kZXMuXG4gICAqL1xuICBlbXB0eSgpIHtcbiAgICB0aGlzLmNoaWxkcmVuLmxlbmd0aCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xpY2soX29wdGlvbnM6IENsaWNrT3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gZG8gbm90aGluZ1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiBhbiBlbGVtZW50IGlzIGRyb3BwZWQgb24gYSB2YWxpZCBkcm9wIHRhcmdldC5cbiAgICogQHBhcmFtICRldmVudCBET00gZXZlbnQuXG4gICAqL1xuICBkcm9wKCRldmVudCkge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5leHBhbmREcmFnVGltZW91dCk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSB1c2VyIHN0YXJ0cyBkcmFnZ2luZyBhbiBlbGVtZW50LlxuICAgKiBAcGFyYW0gJGV2ZW50IERPTSBldmVudC5cbiAgICovXG4gIGRyYWdTdGFydCgkZXZlbnQpIHtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgLy8gd2UgY2FuJ3QgcGFzcyBhIG9iamVjdCB0byBzZXREYXRhLCBzbyB3ZSBkbyBpdCB2aWEgc2VydmljZVxuICAgIC8vIHNldCBkYXRhIGlzIHN0aWxsIG5lZWRlZCwgdG8gbWFrZSB0aGUgZHJhZyZkcm9wIHdvcmtcbiAgICAkZXZlbnQuZGF0YVRyYW5zZmVyPy5zZXREYXRhKCdub2RlJywgJ25vZGUnKTtcbiAgICB0aGlzLmRyYWdnZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiBhIGRyYWcgb3BlcmF0aW9uIGhhcyBlbmRlZC5cbiAgICogQHBhcmFtICRldmVudCBET00gZXZlbnQuXG4gICAqL1xuICBkcmFnRW5kKCRldmVudCkge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmRyYWdnZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGluZm9ybWF0aW9uIHdoZXRoZXIgdGhlIG5hdmlnYXRvciBub2RlIGlzIGRyb3BwYWJsZS5cbiAgICogQHJlYWRvbmx5XG4gICAqL1xuICBnZXQgY2FuRHJvcCgpIHtcbiAgICByZXR1cm4gdGhpcy5kcm9wcGFibGU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBpbmZvcm1hdGlvbiB3aGV0aGVyIG5hdmlnYXRpb24gaXMgcG9zc2libGUuXG4gICAqIEByZWFkb25seVxuICAgKi9cbiAgZ2V0IGNhbk5hdmlnYXRlKCkge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5wYXRoICE9PSAndW5kZWZpbmVkJztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gYSBkcmFnZ2VkIGVsZW1lbnQgZW50ZXJzIGEgdmFsaWQgZHJvcCB0YXJnZXQuXG4gICAqIEBwYXJhbSAkZXZlbnQgRE9NIGV2ZW50LlxuICAgKi9cbiAgZHJhZ0VudGVyKCRldmVudCkge1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmRyYWdnZWRIb3ZlciA9IHRydWU7XG4gICAgaWYgKCF0aGlzLm9wZW4pIHtcbiAgICAgIHRoaXMuZXhwYW5kRHJhZ1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZXhwYW5kKCksIDEwMDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gYSBkcmFnZ2VkIGVsZW1lbnQgbGVhdmVzIGEgdmFsaWQgZHJvcCB0YXJnZXQuXG4gICAqIEBwYXJhbSAkZXZlbnQgRE9NIGV2ZW50LlxuICAgKi9cbiAgZHJhZ0xlYXZlKCRldmVudCkge1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoJGV2ZW50LmN1cnJlbnRUYXJnZXQuY29udGFpbnMoJGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZHJhZ2dlZEhvdmVyID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuZXhwYW5kRHJhZ1RpbWVvdXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGFuZHMgdGhlIG5hdmlnYXRvciBub2RlIGlmIGl0IGlzIGNvbGxhcHNlZC5cbiAgICovXG4gIGV4cGFuZCgpIHtcbiAgICBpZiAoIXRoaXMub3Blbikge1xuICAgICAgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2xpY2soeyBvcGVuOiB0cnVlLCBleHBhbmRlcjogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgYSBjYWxsYmFjayBmdW5jdGlvbiByZWN1cnNpdmVseSBvbiBlYWNoIG9mIHRoZSBuYXZpZ2F0b3Igbm9kZSdzIGNoaWxkcmVuIGRvd24gdGhlIGhpZXJhcmNoeS5cbiAgICpcbiAgICogYGBgdHNcbiAgICogY29uc3QgZXhwYW5kQ2hpbGQgPSAoY2hpbGROb2RlKSA9PiBjaGlsZE5vZGUuZXhwYW5kKCk7XG4gICAqIHBhcmVudE5vZGUudHJhdmVyc2UoZXhwYW5kQ2hpbGQpO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZC5cbiAgICovXG4gIHRyYXZlcnNlKGNhbGxiYWNrKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgIGNhbGxiYWNrKGNoaWxkKTtcbiAgICAgICAgY2hpbGQudHJhdmVyc2UoY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgLy8gbm90aGluZyB0b2RvIGhlcmVcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3VudHMgdGhlIGFtb3VudCBvZiBjaGlsZHJlbiBub2Rlcy5cbiAgICovXG4gIHByb3RlY3RlZCBjb3VudENoaWxkcmVuKCkge1xuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZGVudGlmaWVzIGl0c2VsZi5cbiAgICovXG4gIHByb3RlY3RlZCB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gTmF2aWdhdG9yTm9kZS5OQU1FO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhc0NoaWxkRGV2aWNlcygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgbmF2aWdhdG9yIG5vZGUgYnkgc29ydGluZyBpdHMgY2hpbGRyZW4gYW5kIGFsc28gY2hlY2tpbmcgdGhlaXIgdmlzaWJpbGl0eS5cbiAgICovXG4gIHByb3RlY3RlZCB1cGRhdGVDaGlsZHJlbigpIHtcbiAgICB0aGlzLnNvcnQoKTtcbiAgICB0aGlzLnVwZGF0ZUhpZGRlbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcnRzIHRoZSBjaGlsZHJlbiBvZiB0aGUgbmF2aWdhdG9yIG5vZGUsIGJ5IHByaW9yaXR5IGFuZCBuYW1lIChBU0MpLlxuICAgKiBUaGUgaGlnaGVyIHRoZSBwcmlvcml0eSwgdGhlIGhpZ2hlciB0aGUgcG9zaXRpb24gaW4gdGhlIGhpZXJhcmNoeS5cbiAgICogRm9yIHRoZSBzYW1lIHByaW9yaXR5IHZhbHVlcywgdGhlIGFscGhhYmV0aWNhbCBvcmRlciB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAgICovXG4gIHByb3RlY3RlZCBzb3J0KCkge1xuICAgIHRoaXMuY2hpbGRyZW4uc29ydCgoYSwgYikgPT4ge1xuICAgICAgaWYgKGEucHJpb3JpdHkgPiBiLnByaW9yaXR5KSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSBpZiAoYS5wcmlvcml0eSA8IGIucHJpb3JpdHkpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGVsc2UgaWYgKChhLmxhYmVsIHx8ICcnKS50b0xvd2VyQ2FzZSgpIDwgKGIubGFiZWwgfHwgJycpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmICgoYS5sYWJlbCB8fCAnJykudG9Mb3dlckNhc2UoKSA+IChiLmxhYmVsIHx8ICcnKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBuYXZpZ2F0b3Igbm9kZSBzaG91bGQgYmUgaGlkZGVuIGJhc2VkIG9uIHRoZSB2aXNpYmlsaXR5IG9mIGl0cyBjaGlsZCBub2Rlcy5cbiAgICovXG4gIHByb3RlY3RlZCB1cGRhdGVIaWRkZW4oKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnBhdGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmhpZGRlbiA9ICF0aGlzLmNoaWxkcmVuLnNvbWUoKHsgaGlkZGVuIH0pID0+ICFoaWRkZW4pO1xuICAgIH1cbiAgfVxufVxuIl19
352
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdG9yLW5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb3JlL25hdmlnYXRvci9uYXZpZ2F0b3Itbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQStCL0M7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7YUFDakIsU0FBSSxHQUFHLGVBQWUsQUFBbEIsQ0FBbUI7SUEwSDlCOzs7T0FHRztJQUNILElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLEVBQUU7UUFDSixPQUFPLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksUUFBUTtRQUNWLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUN4QixDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDOUUsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDOUIsT0FBTyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekUsQ0FBQztZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBSSxRQUFRLENBQUMsUUFBUTtRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztJQUM1QixDQUFDO0lBRUQsWUFBWSxJQUF3QjtRQTlJcEM7O1dBRUc7UUFDSCxhQUFRLEdBQW9CLEVBQUUsQ0FBQztRQU8vQjs7V0FFRztRQUNILG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBT3RCOztXQUVHO1FBQ0gsWUFBTyxHQUFvQixFQUFFLENBQUM7UUFpQjlCOzs7Ozs7Ozs7V0FTRztRQUNILG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBRXZCOztXQUVHO1FBQ0gsU0FBSSxHQUFHLEtBQUssQ0FBQztRQUViOztXQUVHO1FBQ0gsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUVmOztXQUVHO1FBQ0gsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVsQjs7V0FFRztRQUNILGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEI7O1dBRUc7UUFDSCxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRWhCOztXQUVHO1FBQ0gsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFckI7O1dBRUc7UUFDSCxZQUFPLEdBQTRCLFNBQVMsQ0FBQztRQWFyQyxjQUFTLEdBQUcsQ0FBQyxDQUFDO1FBNkNwQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsR0FBRyxDQUFDLElBQW1CO1FBQ3JCLElBQUksSUFBSSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxJQUFtQjtRQUN4QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlCLENBQUM7UUFDRCxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzlCLENBQUM7UUFDRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsSUFBd0I7UUFDN0IsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzFCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3ZCLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDbkIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpQkc7SUFDSCxJQUFJLENBQUMsU0FBUyxFQUFFLFNBQTJELE9BQU87UUFDaEYsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNsQyxJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ25ELFNBQVMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLFlBQVksS0FBSyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDbkUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQztnQkFDNUIsU0FBUyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQztZQUN6RCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbEMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxPQUFPLFNBQVMsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDOUMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQ3pCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQ2hELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUM5QixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLLENBQUMsV0FBeUIsRUFBRTtRQUMvQixhQUFhO0lBQ2YsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksQ0FBQyxNQUFNO1FBQ1QsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFDLE1BQU07UUFDZCxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsNkRBQTZEO1FBQzdELHVEQUF1RDtRQUN2RCxNQUFNLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILE9BQU8sQ0FBQyxNQUFNO1FBQ1osTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILElBQUksV0FBVztRQUNiLE9BQU8sT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFDLE1BQU07UUFDZCxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRSxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVMsQ0FBQyxNQUFNO1FBQ2QsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3hELE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsWUFBWSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU07UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7WUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxRQUFRLENBQUMsUUFBUTtRQUNmLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM1QixRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hCLEtBQUssQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsT0FBTztRQUNMLG9CQUFvQjtJQUN0QixDQUFDO0lBRUQ7O09BRUc7SUFDTyxhQUFhO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFDOUIsQ0FBQztJQUVEOztPQUVHO0lBQ08sUUFBUTtRQUNoQixPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVTLGVBQWU7UUFDdkIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDTyxjQUFjO1FBQ3RCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLElBQUk7UUFDWixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUMxQixJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM1QixPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ1osQ0FBQztpQkFBTSxJQUFJLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNuQyxPQUFPLENBQUMsQ0FBQztZQUNYLENBQUM7aUJBQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQ3pFLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDWixDQUFDO2lCQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2dCQUN6RSxPQUFPLENBQUMsQ0FBQztZQUNYLENBQUM7aUJBQU0sQ0FBQztnQkFDTixPQUFPLENBQUMsQ0FBQztZQUNYLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNPLFlBQVk7UUFDcEIsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RCxDQUFDO0lBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yLCBUZW1wbGF0ZVJlZiwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWF0Y2hlcywgc25ha2VDYXNlIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IE5hdmlnYXRvck5vZGVEYXRhIH0gZnJvbSAnLi9uYXZpZ2F0b3Itbm9kZS1kYXRhJztcbmltcG9ydCB7IFBvcG92ZXJDb25maXJtQ29tcG9uZW50IH0gZnJvbSAnLi4vbW9kYWwvcG9wb3Zlci1jb25maXJtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTdXBwb3J0ZWRJY29uc1N1Z2dlc3Rpb25zIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9pY29uLXNlbGVjdG9yL2ljb25zJztcblxuLyoqXG4gKiBJbnRlcmZhY2UgdGhhdCBkZXRlcm1pbmVzIHRoZSBhdmFpbGFibGUgY2xpY2sgb3B0aW9ucy5cbiAqIEBpZ25vcmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbGlja09wdGlvbnMge1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIHNvdXJjZSBvZiB0aGUgZXZlbnQgaXMgYSBjbGljayBvbiB0aGUgbm9kZSBpY29uLlxuICAgKi9cbiAgaWNvbj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgc291cmNlIG9mIHRoZSBldmVudCBpcyBhIGNsaWNrIG9uIHRoZSBub2RlIGV4cGFuZGVyLlxuICAgKi9cbiAgZXhwYW5kZXI/OiBib29sZWFuO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIG5hdmlnYXRvciBub2RlIGlzIGV4cGFuZGVkL2NvbGxhcHNlZC5cbiAgICovXG4gIG9wZW4/OiBib29sZWFuO1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBncm91cCBub2RlIHdoaWNoIHdpbGwgY29udGFpbiBhbGwgdW5hc3NpZ25lZCBkZXZpY2VzLlxuICAgKi9cbiAgc2hvd1VuYXNzaWduZWREZXZpY2VzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIERPTSBldmVudC5cbiAgICovXG4gICRldmVudD86IGFueTsgLy8gVE9ETzogYWRkIHByb3BlciB0eXBlXG59XG4vKipcbiAqIEJhc2UgbmF2aWdhdG9yIG5vZGUuIFJlcHJlc2VudHMgYSBzaW5nbGUgZW50cnkgaW4gdGhlIG5hdmlnYXRvciBtZW51LlxuICogSXMgY29uc2lkZXJlZCB0byBiZSB0aGUgYmFzaWMgYnVpbGRpbmcgYmxvY2sgb2YgdGhlIG5hdmlnYXRvci5cbiAqL1xuZXhwb3J0IGNsYXNzIE5hdmlnYXRvck5vZGUge1xuICBzdGF0aWMgTkFNRSA9ICdOYXZpZ2F0b3JOb2RlJztcbiAgLyoqXG4gICAqIE5hdmlnYXRvciBub2RlIGljb24uXG4gICAqL1xuICBpY29uOiBTdXBwb3J0ZWRJY29uc1N1Z2dlc3Rpb25zO1xuXG4gIC8qKlxuICAgKiBOYXZpZ2F0b3Igbm9kZSBpY29uIHdoZW4gZXhwYW5kZWQuXG4gICAqL1xuICBpY29uT3Blbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gaWNvbiB0ZW1wbGF0ZS5cbiAgICovXG4gIGljb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBpY29uIGNvbXBvbmVudC5cbiAgICovXG4gIGljb25Db21wb25lbnQ/OiBUeXBlPGFueT47XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRvciBub2RlIGNoaWxkcmVuIChzdWJlbnRyaWVzKS5cbiAgICovXG4gIGNoaWxkcmVuOiBOYXZpZ2F0b3JOb2RlW10gPSBbXTtcblxuICAvKipcbiAgICogTGFiZWwgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBuYXZpZ2F0b3Igbm9kZS5cbiAgICovXG4gIGxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcGFzcyBgbGFiZWxgIHRocm91Z2ggYHRyYW5zbGF0ZWAgcGlwZSB3aGVuIGJlaW5nIGRpc3BsYXllZC5cbiAgICovXG4gIHRyYW5zbGF0ZUxhYmVsID0gdHJ1ZTtcblxuICAvKipcbiAgICogVGhlIHBhdGggdG8gd2hpY2ggdGhlIFVJIHdpbGwgYmUgcmVkaXJlY3RlZCBhZnRlciBjbGlja2luZyB0aGUgbmF2aWdhdG9yIG5vZGUuXG4gICAqL1xuICBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRvciBub2RlIHBhcmVudCBub2Rlcy5cbiAgICovXG4gIHBhcmVudHM6IE5hdmlnYXRvck5vZGVbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBMb2FkaW5nIHN0YXRlIGluZGljYXRvci5cbiAgICovXG4gIGxvYWRpbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBVc2VkIHRvIGxvYWQgdGhlIHByb3ZpZGVycyBmb3IgdGhlIGNvbXBvbmVudHMuIElmIG5vdCBwcm92aWRlZCwgZGVmYXVsdCBpbmplY3RvciB1cyB1c2VkLlxuICAgKi9cbiAgaW5qZWN0b3I/OiBJbmplY3RvcjtcblxuICAvKipcbiAgICogQ3VzdG9tIGNvbXBvbmVudCB0byB1c2UuXG4gICAqL1xuICBjb21wb25lbnQ/OiBUeXBlPGFueT47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBuYXZpZ2F0b3Igbm9kZSBzaG91bGQgYmUgYWN0aXZlIGJhc2VkIG9uIG1hdGNoaW5nIHRoZSBub2RlIHBhdGggYW5kIHRoZSBVUkwgcGF0aC5cbiAgICogVG8gbWF0Y2ggdGhlIFVSTCBleGFjdGx5LCBzZXQgdGhpcyBvcHRpb24gdG8gdHJ1ZS5cbiAgICpcbiAgICogcm91dGVyTGlua0V4YWN0IHNldCB0byB0cnVlOlxuICAgKiBXaGVuIHRoZSBVUkwgcGF0aCBpcyBzZXQgdG8gL2EvYi9jIGFuZCB0aGUgbm9kZSBwYXRoIHRvIC9hL2IgdGhlbiB0aGUgbm9kZSB3aWxsIG5vdCBiZSBzZXQgYWN0aXZlLlxuICAgKlxuICAgKiByb3V0ZXJMaW5rRXhhY3Qgc2V0IHRvIGZhbHNlOlxuICAgKiBXaGVuIHRoZSBVUkwgcGF0aCBpcyBzZXQgdG8gL2EvYi9jIGFuZCB0aGUgbm9kZSBwYXRoIHRvIC9hL2IgdGhlbiB0aGUgbm9kZSB3aWxsIGJlIHNldCBhY3RpdmUuXG4gICAqL1xuICByb3V0ZXJMaW5rRXhhY3QgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgbmF2aWdhdG9yIG5vZGUgaXMgZXhwYW5kZWQvY29sbGFwc2VkLlxuICAgKi9cbiAgb3BlbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgbmF2aWdhdG9yIG5vZGUgaXMgdmlzaWJsZS9oaWRkZW4uXG4gICAqL1xuICBoaWRkZW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoYXQgdGhlIG5hdmlnYXRvciBub2RlIGlzIGRyYWdnYWJsZS5cbiAgICovXG4gIGRyYWdnYWJsZSA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgbmF2aWdhdG9yIG5vZGUgaXMgZHJvcHBhYmxlLlxuICAgKi9cbiAgZHJvcHBhYmxlID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBuYXZpZ2F0b3Igbm9kZSBpcyBkcmFnZ2VkLlxuICAgKi9cbiAgZHJhZ2dlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCBjdXJyZW50bHkgc29tZXRoaW5nIGlzIGRyYWdnZWQgb3ZlciB0aGUgbm9kZS5cbiAgICovXG4gIGRyYWdnZWRIb3ZlciA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBDb25maXJtYXRpb24gcG9wb3ZlciBkaXNwbGF5ZWQgYXQgdGhlIGVuZCBvZiB0aGUgcHJvY2VzcyBvZiBtb3ZpbmcgdGhlIG5hdmlnYXRvciBtZW51IGl0ZW0uXG4gICAqL1xuICBjb25maXJtOiBQb3BvdmVyQ29uZmlybUNvbXBvbmVudCA9IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGJyZWFkY3J1bWIgb2YgdGhlIG5vZGUsIGRpc3BsYXlpbmcgdGhlIFwicGF0aFwiLCBidXQgc3VwcG9ydHMgbXVsdGlwbGUgbGV2ZWxzLlxuICAgKiBlLmcuIChHcm91cHMgPiBMZXZlbCAxID4gTGV2ZWwgMilcbiAgICovXG4gIGJyZWFkY3J1bWI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElkIHRvIGlkZW50aWZ5IHNwZWNpZmljIGZlYXR1cmUgbm9kZS5cbiAgICovXG4gIGZlYXR1cmVJZD86IHN0cmluZztcblxuICBwcml2YXRlIF9wcmlvcml0eSA9IDA7XG4gIHByaXZhdGUgZXhwYW5kRHJhZ1RpbWVvdXQ7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgaW5mb3JtYXRpb24gd2hldGhlciBhIG5hdmlnYXRvciBub2RlIGhhcyBjaGlsZHJlbi5cbiAgICogQHJlYWRvbmx5XG4gICAqL1xuICBnZXQgaGFzQ2hpbGRyZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBJRCBvZiB0aGUgbmF2aWdhdG9yIG5vZGUuXG4gICAqIEByZWFkb25seVxuICAgKi9cbiAgZ2V0IGlkKCkge1xuICAgIHJldHVybiAnbmF2aWdhdG9yX25vZGVfJyArIHNuYWtlQ2FzZSh0aGlzLmxhYmVsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcmlvcml0eSB2YWx1ZSBvZiB0aGUgbmF2aWdhdG9yIG5vZGUuXG4gICAqIEByZWFkb25seVxuICAgKi9cbiAgZ2V0IHByaW9yaXR5KCkge1xuICAgIGlmICh0aGlzLl9wcmlvcml0eSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3ByaW9yaXR5O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjaGlsZHJlblByaW9yaXRpZXMgPSB0aGlzLmNoaWxkcmVuLm1hcCgoeyBwcmlvcml0eSB9KSA9PiBwcmlvcml0eSB8fCAwKTtcbiAgICAgIGlmIChjaGlsZHJlblByaW9yaXRpZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBjaGlsZHJlblByaW9yaXRpZXMubGVuZ3RoID8gTWF0aC5tYXgoLi4uY2hpbGRyZW5Qcmlvcml0aWVzKSA6IDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgcHJpb3JpdHkgdmFsdWUgb2YgdGhlIG5hdmlnYXRvciBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gcHJpb3JpdHkgUHJpb3JpdHkgdmFsdWUuXG4gICAqL1xuICBzZXQgcHJpb3JpdHkocHJpb3JpdHkpIHtcbiAgICB0aGlzLl9wcmlvcml0eSA9IHByaW9yaXR5O1xuICB9XG5cbiAgY29uc3RydWN0b3IoZGF0YT86IE5hdmlnYXRvck5vZGVEYXRhKSB7XG4gICAgdGhpcy51cGRhdGUoZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGNoaWxkIG5hdmlnYXRvciBub2RlIHRvIHRoZSBub2RlLlxuICAgKlxuICAgKiBAcGFyYW0ge05hdmlnYXRvck5vZGV9IG5vZGUgQ2hpbGQgbm9kZS5cbiAgICovXG4gIGFkZChub2RlOiBOYXZpZ2F0b3JOb2RlKSB7XG4gICAgaWYgKG5vZGUgPT09IHRoaXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQWRkaW5nIG5vZGUgdG8gaXRzZWxmJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNoaWxkcmVuLmluZGV4T2Yobm9kZSkgPT09IC0xKSB7XG4gICAgICB0aGlzLmNoaWxkcmVuLnB1c2gobm9kZSk7XG4gICAgfVxuICAgIGlmIChub2RlLnBhcmVudHMuaW5kZXhPZih0aGlzKSA9PT0gLTEpIHtcbiAgICAgIG5vZGUucGFyZW50cy5wdXNoKHRoaXMpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNoaWxkcmVuKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgY2hpbGQgbmF2aWdhdG9yIG5vZGUgZnJvbSB0aGUgbm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtOYXZpZ2F0b3JOb2RlfSBub2RlIENoaWxkIG5vZGUuXG4gICAqL1xuICByZW1vdmUobm9kZTogTmF2aWdhdG9yTm9kZSkge1xuICAgIGNvbnN0IGl4ID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKG5vZGUpO1xuICAgIGNvbnN0IHBpeCA9IG5vZGUucGFyZW50cy5pbmRleE9mKHRoaXMpO1xuICAgIGlmIChpeCA+IC0xKSB7XG4gICAgICB0aGlzLmNoaWxkcmVuLnNwbGljZShpeCwgMSk7XG4gICAgfVxuICAgIGlmIChwaXggPiAtMSkge1xuICAgICAgbm9kZS5wYXJlbnRzLnNwbGljZShwaXgsIDEpO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZUNoaWxkcmVuKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgbmF2aWdhdG9yIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7TmF2aWdhdG9yTm9kZURhdGF9IGRhdGEgRGF0YSB0byBiZSB1cGRhdGVkLlxuICAgKi9cbiAgdXBkYXRlKGRhdGE/OiBOYXZpZ2F0b3JOb2RlRGF0YSkge1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGRhdGEpO1xuICAgICAgaWYgKGRhdGEuaGlkZGVuICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRzLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgcC51cGRhdGVIaWRkZW4oKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIFJldHVybnMgYSBjaGlsZCBuYXZpZ2F0b3Igbm9kZSBiYXNlZCBvbiB0aGUgcHJlZGljYXRlLlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiAvLyBUaGUgZnVuY3Rpb24gd2lsbCBjb21wYXJlIHRoZSBsYWJlbHMgdG8gdGhlIHN0cmluZyBhbmQgcmV0dXJuIGEgbWF0Y2hpbmcgcmVzdWx0LlxuICAgKiAvLyBUaGUgY2FwaXRhbGl6YXRpb24gb2YgdGhlIGNoYXJhY3RlcnMgZG9lcyBub3QgbWF0dGVyIChjYXNlIGluc2Vuc2l0aXZlKS5cbiAgICogY29uc3QgcHJlZGljYXRlID0gJ2dyb3VwMSc7XG4gICAqIGNvbnN0IGNoaWxkTm9kZSA9IHBhcmVudE5vZGUuZmluZChwcmVkaWNhdGUpO1xuICAgKiAvLyBDaGVjazogW2xvZGFzaCBtYXRjaGVzXShodHRwczovL2xvZGFzaC5jb20vZG9jcy80LjE3LjE1I21hdGNoZXMpXG4gICAqIGNvbnN0IHByZWRpY2F0ZSA9IHsgbGFiZWw6ICdncm91cDInIH07XG4gICAqIGNvbnN0IGNoaWxkTm9kZSA9IHBhcmVudE5vZGUuZmluZChwcmVkaWNhdGUpO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIHByZWRpY2F0ZSBGaWx0ZXIgY3JpdGVyaWEuXG4gICAqIEBwYXJhbSBmaW5kQnkgTmF2aWdhdG9yTm9kZSBmaWVsZCBuYW1lIHRvIGNvbXBhcmUuXG4gICAqXG4gICAqL1xuICBmaW5kKHByZWRpY2F0ZSwgZmluZEJ5OiBrZXlvZiBQaWNrPE5hdmlnYXRvck5vZGUsICdsYWJlbCcgfCAnZmVhdHVyZUlkJz4gPSAnbGFiZWwnKSB7XG4gICAgaWYgKHR5cGVvZiBwcmVkaWNhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAoZmluZEJ5ID09PSAnbGFiZWwnKSB7XG4gICAgICAgIGNvbnN0IGNvbXBhcmVMYWJlbCA9IHByZWRpY2F0ZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBwcmVkaWNhdGUgPSAoeyBsYWJlbCB9KSA9PiBjb21wYXJlTGFiZWwgPT09IGxhYmVsPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY29tcGFyZUlkID0gcHJlZGljYXRlO1xuICAgICAgICBwcmVkaWNhdGUgPSAoeyBmZWF0dXJlSWQgfSkgPT4gY29tcGFyZUlkID09PSBmZWF0dXJlSWQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcHJlZGljYXRlID09PSAnb2JqZWN0Jykge1xuICAgICAgcHJlZGljYXRlID0gbWF0Y2hlcyhwcmVkaWNhdGUpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHByZWRpY2F0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNlYXJjaCBwcmVkaWNhdGUnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4ucmVkdWNlKFxuICAgICAgKGZvdW5kLCBjaGlsZCkgPT4gZm91bmQgfHwgY2hpbGQuZmluZChwcmVkaWNhdGUpLFxuICAgICAgdGhpcy5jaGlsZHJlbi5maW5kKHByZWRpY2F0ZSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgY2hpbGRyZW4gbm9kZXMuXG4gICAqL1xuICBlbXB0eSgpIHtcbiAgICB0aGlzLmNoaWxkcmVuLmxlbmd0aCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xpY2soX29wdGlvbnM6IENsaWNrT3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gZG8gbm90aGluZ1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiBhbiBlbGVtZW50IGlzIGRyb3BwZWQgb24gYSB2YWxpZCBkcm9wIHRhcmdldC5cbiAgICogQHBhcmFtICRldmVudCBET00gZXZlbnQuXG4gICAqL1xuICBkcm9wKCRldmVudCkge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5leHBhbmREcmFnVGltZW91dCk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBldmVudCBpcyBmaXJlZCB3aGVuIHRoZSB1c2VyIHN0YXJ0cyBkcmFnZ2luZyBhbiBlbGVtZW50LlxuICAgKiBAcGFyYW0gJGV2ZW50IERPTSBldmVudC5cbiAgICovXG4gIGRyYWdTdGFydCgkZXZlbnQpIHtcbiAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgLy8gd2UgY2FuJ3QgcGFzcyBhIG9iamVjdCB0byBzZXREYXRhLCBzbyB3ZSBkbyBpdCB2aWEgc2VydmljZVxuICAgIC8vIHNldCBkYXRhIGlzIHN0aWxsIG5lZWRlZCwgdG8gbWFrZSB0aGUgZHJhZyZkcm9wIHdvcmtcbiAgICAkZXZlbnQuZGF0YVRyYW5zZmVyPy5zZXREYXRhKCdub2RlJywgJ25vZGUnKTtcbiAgICB0aGlzLmRyYWdnZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgZmlyZWQgd2hlbiBhIGRyYWcgb3BlcmF0aW9uIGhhcyBlbmRlZC5cbiAgICogQHBhcmFtICRldmVudCBET00gZXZlbnQuXG4gICAqL1xuICBkcmFnRW5kKCRldmVudCkge1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmRyYWdnZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGluZm9ybWF0aW9uIHdoZXRoZXIgdGhlIG5hdmlnYXRvciBub2RlIGlzIGRyb3BwYWJsZS5cbiAgICogQHJlYWRvbmx5XG4gICAqL1xuICBnZXQgY2FuRHJvcCgpIHtcbiAgICByZXR1cm4gdGhpcy5kcm9wcGFibGU7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBpbmZvcm1hdGlvbiB3aGV0aGVyIG5hdmlnYXRpb24gaXMgcG9zc2libGUuXG4gICAqIEByZWFkb25seVxuICAgKi9cbiAgZ2V0IGNhbk5hdmlnYXRlKCkge1xuICAgIHJldHVybiB0eXBlb2YgdGhpcy5wYXRoICE9PSAndW5kZWZpbmVkJztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gYSBkcmFnZ2VkIGVsZW1lbnQgZW50ZXJzIGEgdmFsaWQgZHJvcCB0YXJnZXQuXG4gICAqIEBwYXJhbSAkZXZlbnQgRE9NIGV2ZW50LlxuICAgKi9cbiAgZHJhZ0VudGVyKCRldmVudCkge1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmRyYWdnZWRIb3ZlciA9IHRydWU7XG4gICAgaWYgKCF0aGlzLm9wZW4pIHtcbiAgICAgIHRoaXMuZXhwYW5kRHJhZ1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZXhwYW5kKCksIDEwMDApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGlzIGZpcmVkIHdoZW4gYSBkcmFnZ2VkIGVsZW1lbnQgbGVhdmVzIGEgdmFsaWQgZHJvcCB0YXJnZXQuXG4gICAqIEBwYXJhbSAkZXZlbnQgRE9NIGV2ZW50LlxuICAgKi9cbiAgZHJhZ0xlYXZlKCRldmVudCkge1xuICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoJGV2ZW50LmN1cnJlbnRUYXJnZXQuY29udGFpbnMoJGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZHJhZ2dlZEhvdmVyID0gZmFsc2U7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuZXhwYW5kRHJhZ1RpbWVvdXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cGFuZHMgdGhlIG5hdmlnYXRvciBub2RlIGlmIGl0IGlzIGNvbGxhcHNlZC5cbiAgICovXG4gIGV4cGFuZCgpIHtcbiAgICBpZiAoIXRoaXMub3Blbikge1xuICAgICAgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2xpY2soeyBvcGVuOiB0cnVlLCBleHBhbmRlcjogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybXMgYSBjYWxsYmFjayBmdW5jdGlvbiByZWN1cnNpdmVseSBvbiBlYWNoIG9mIHRoZSBuYXZpZ2F0b3Igbm9kZSdzIGNoaWxkcmVuIGRvd24gdGhlIGhpZXJhcmNoeS5cbiAgICpcbiAgICogYGBgdHNcbiAgICogY29uc3QgZXhwYW5kQ2hpbGQgPSAoY2hpbGROb2RlKSA9PiBjaGlsZE5vZGUuZXhwYW5kKCk7XG4gICAqIHBhcmVudE5vZGUudHJhdmVyc2UoZXhwYW5kQ2hpbGQpO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIEZ1bmN0aW9uIHRvIGJlIGNhbGxlZC5cbiAgICovXG4gIHRyYXZlcnNlKGNhbGxiYWNrKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgIHRoaXMuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgIGNhbGxiYWNrKGNoaWxkKTtcbiAgICAgICAgY2hpbGQudHJhdmVyc2UoY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGRlc3Ryb3koKSB7XG4gICAgLy8gbm90aGluZyB0b2RvIGhlcmVcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3VudHMgdGhlIGFtb3VudCBvZiBjaGlsZHJlbiBub2Rlcy5cbiAgICovXG4gIHByb3RlY3RlZCBjb3VudENoaWxkcmVuKCkge1xuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZGVudGlmaWVzIGl0c2VsZi5cbiAgICovXG4gIHByb3RlY3RlZCB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gTmF2aWdhdG9yTm9kZS5OQU1FO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhc0NoaWxkRGV2aWNlcygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgbmF2aWdhdG9yIG5vZGUgYnkgc29ydGluZyBpdHMgY2hpbGRyZW4gYW5kIGFsc28gY2hlY2tpbmcgdGhlaXIgdmlzaWJpbGl0eS5cbiAgICovXG4gIHByb3RlY3RlZCB1cGRhdGVDaGlsZHJlbigpIHtcbiAgICB0aGlzLnNvcnQoKTtcbiAgICB0aGlzLnVwZGF0ZUhpZGRlbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcnRzIHRoZSBjaGlsZHJlbiBvZiB0aGUgbmF2aWdhdG9yIG5vZGUsIGJ5IHByaW9yaXR5IGFuZCBuYW1lIChBU0MpLlxuICAgKiBUaGUgaGlnaGVyIHRoZSBwcmlvcml0eSwgdGhlIGhpZ2hlciB0aGUgcG9zaXRpb24gaW4gdGhlIGhpZXJhcmNoeS5cbiAgICogRm9yIHRoZSBzYW1lIHByaW9yaXR5IHZhbHVlcywgdGhlIGFscGhhYmV0aWNhbCBvcmRlciB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAgICovXG4gIHByb3RlY3RlZCBzb3J0KCkge1xuICAgIHRoaXMuY2hpbGRyZW4uc29ydCgoYSwgYikgPT4ge1xuICAgICAgaWYgKGEucHJpb3JpdHkgPiBiLnByaW9yaXR5KSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSBpZiAoYS5wcmlvcml0eSA8IGIucHJpb3JpdHkpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGVsc2UgaWYgKChhLmxhYmVsIHx8ICcnKS50b0xvd2VyQ2FzZSgpIDwgKGIubGFiZWwgfHwgJycpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmICgoYS5sYWJlbCB8fCAnJykudG9Mb3dlckNhc2UoKSA+IChiLmxhYmVsIHx8ICcnKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHRoZSBuYXZpZ2F0b3Igbm9kZSBzaG91bGQgYmUgaGlkZGVuIGJhc2VkIG9uIHRoZSB2aXNpYmlsaXR5IG9mIGl0cyBjaGlsZCBub2Rlcy5cbiAgICovXG4gIHByb3RlY3RlZCB1cGRhdGVIaWRkZW4oKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnBhdGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLmhpZGRlbiA9ICF0aGlzLmNoaWxkcmVuLnNvbWUoKHsgaGlkZGVuIH0pID0+ICFoaWRkZW4pO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -24,5 +24,9 @@ export var PackageType;
24
24
  * A custom package e.g. uploaded to the tenant by a user
25
25
  */
26
26
  PackageType["CUSTOM"] = "CUSTOM";
27
+ /**
28
+ * A package that was archived by the user
29
+ */
30
+ PackageType["ARCHIVED"] = "ARCHIVED";
27
31
  })(PackageType || (PackageType = {}));
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvcGx1Z2lucy9wbHVnaW5zLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE1BQU0sQ0FBTixJQUFZLHVCQU1YO0FBTkQsV0FBWSx1QkFBdUI7SUFDakMsZ0RBQXFCLENBQUE7SUFDckIsNENBQWlCLENBQUE7SUFDakIsZ0RBQXFCLENBQUE7SUFDckIsOENBQW1CLENBQUE7SUFDbkIsd0NBQWEsQ0FBQTtBQUNmLENBQUMsRUFOVyx1QkFBdUIsS0FBdkIsdUJBQXVCLFFBTWxDO0FBRUQsTUFBTSxDQUFOLElBQVksV0FpQlg7QUFqQkQsV0FBWSxXQUFXO0lBQ3JCOztPQUVHO0lBQ0gsb0NBQXFCLENBQUE7SUFDckI7O09BRUc7SUFDSCxzQ0FBdUIsQ0FBQTtJQUN2Qjs7T0FFRztJQUNILGtDQUFtQixDQUFBO0lBQ25COztPQUVHO0lBQ0gsZ0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQWpCVyxXQUFXLEtBQVgsV0FBVyxRQWlCdEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnMsIFZlcnNpb25pbmdNYXRyaXggfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbnNFeHBvcnRTY29wZXMgfSBmcm9tICcuLi9jb21tb24vQXBwbGljYXRpb25PcHRpb25zJztcbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luc0NvbmZpZyB7XG4gIHJlbW90ZXM6IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucztcbiAgZXhjbHVkZWRSZW1vdGVzPzogQXBwbGljYXRpb25SZW1vdGVQbHVnaW5zO1xufVxuXG5leHBvcnQgZW51bSBBcHBsaWNhdGlvblBsdWdpblN0YXR1cyB7XG4gIE9SUEhBTkVEID0gJ09SUEhBTkVEJyxcbiAgTEFURVNUID0gJ0xBVEVTVCcsXG4gIE9VVERBVEVEID0gJ09VVERBVEVEJyxcbiAgUkVWT0tFRCA9ICdSRVZPS0VEJyxcbiAgQVVUTyA9ICdBVVRPJ1xufVxuXG5leHBvcnQgZW51bSBQYWNrYWdlVHlwZSB7XG4gIC8qKlxuICAgKiBBIHBhY2thZ2UgY29taW5nIGZyb20gdGhlIG9mZmljaWFsIFNvZnR3YXJlIEFHIGdpdGh1YiBlbnRlcnByaXNlLlxuICAgKi9cbiAgT0ZGSUNJQUwgPSAnT0ZGSUNJQUwnLFxuICAvKipcbiAgICogQSBwYWNrYWdlIGNvbWluZyBmcm9tIGFueSBjb25uZWN0ZWQgcGFydG5lciByZXBvc2l0b3J5LlxuICAgKi9cbiAgQ09NTVVOSVRZID0gJ0NPTU1VTklUWScsXG4gIC8qKlxuICAgKiBBIHBhY2thZ2Ugd2hlcmUgdGhlIG9yaWdpbiBpcyB1bmtub3duIChlLmcuIHVwbG9hZGVkIHRvIG1hbmFnZW1lbnQgd2l0aCBhbiB1bmtub3duIGxhYmVsKVxuICAgKi9cbiAgVU5LTk9XTiA9ICdVTktOT1dOJyxcbiAgLyoqXG4gICAqIEEgY3VzdG9tIHBhY2thZ2UgZS5nLiB1cGxvYWRlZCB0byB0aGUgdGVuYW50IGJ5IGEgdXNlclxuICAgKi9cbiAgQ1VTVE9NID0gJ0NVU1RPTSdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvblBsdWdpbiB7XG4gIGlkOiBzdHJpbmc7XG4gIGlkTGF0ZXN0OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG1vZHVsZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICBzY29wZT86IFBsdWdpbnNFeHBvcnRTY29wZXM7XG4gIGluc3RhbGxlZD86IGJvb2xlYW47XG4gIGNvbnRleHRQYXRoPzogc3RyaW5nO1xuICBzdGF0dXM/OiBBcHBsaWNhdGlvblBsdWdpblN0YXR1cztcbiAgdGFncz86IHN0cmluZ1tdO1xuICBsaWNlbnNlPzogc3RyaW5nO1xuICB0eXBlPzogUGFja2FnZVR5cGU7XG4gIHZlcnNpb25pbmdNYXRyaXg/OiBWZXJzaW9uaW5nTWF0cml4O1xuICBzZWxlY3RlZD86IGJvb2xlYW47XG4gIGluc3RhbGxlZFZpYVRhZz86IHN0cmluZyB8IGZhbHNlO1xufVxuIl19
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2lucy5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvcGx1Z2lucy9wbHVnaW5zLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE1BQU0sQ0FBTixJQUFZLHVCQU1YO0FBTkQsV0FBWSx1QkFBdUI7SUFDakMsZ0RBQXFCLENBQUE7SUFDckIsNENBQWlCLENBQUE7SUFDakIsZ0RBQXFCLENBQUE7SUFDckIsOENBQW1CLENBQUE7SUFDbkIsd0NBQWEsQ0FBQTtBQUNmLENBQUMsRUFOVyx1QkFBdUIsS0FBdkIsdUJBQXVCLFFBTWxDO0FBRUQsTUFBTSxDQUFOLElBQVksV0FxQlg7QUFyQkQsV0FBWSxXQUFXO0lBQ3JCOztPQUVHO0lBQ0gsb0NBQXFCLENBQUE7SUFDckI7O09BRUc7SUFDSCxzQ0FBdUIsQ0FBQTtJQUN2Qjs7T0FFRztJQUNILGtDQUFtQixDQUFBO0lBQ25COztPQUVHO0lBQ0gsZ0NBQWlCLENBQUE7SUFDakI7O09BRUc7SUFDSCxvQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBckJXLFdBQVcsS0FBWCxXQUFXLFFBcUJ0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucywgSUFwcGxpY2F0aW9uLCBWZXJzaW9uaW5nTWF0cml4IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5zRXhwb3J0U2NvcGVzIH0gZnJvbSAnLi4vY29tbW9uL0FwcGxpY2F0aW9uT3B0aW9ucyc7XG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbnNDb25maWcge1xuICByZW1vdGVzOiBBcHBsaWNhdGlvblJlbW90ZVBsdWdpbnM7XG4gIGV4Y2x1ZGVkUmVtb3Rlcz86IEFwcGxpY2F0aW9uUmVtb3RlUGx1Z2lucztcbn1cblxuZXhwb3J0IGVudW0gQXBwbGljYXRpb25QbHVnaW5TdGF0dXMge1xuICBPUlBIQU5FRCA9ICdPUlBIQU5FRCcsXG4gIExBVEVTVCA9ICdMQVRFU1QnLFxuICBPVVREQVRFRCA9ICdPVVREQVRFRCcsXG4gIFJFVk9LRUQgPSAnUkVWT0tFRCcsXG4gIEFVVE8gPSAnQVVUTydcbn1cblxuZXhwb3J0IGVudW0gUGFja2FnZVR5cGUge1xuICAvKipcbiAgICogQSBwYWNrYWdlIGNvbWluZyBmcm9tIHRoZSBvZmZpY2lhbCBTb2Z0d2FyZSBBRyBnaXRodWIgZW50ZXJwcmlzZS5cbiAgICovXG4gIE9GRklDSUFMID0gJ09GRklDSUFMJyxcbiAgLyoqXG4gICAqIEEgcGFja2FnZSBjb21pbmcgZnJvbSBhbnkgY29ubmVjdGVkIHBhcnRuZXIgcmVwb3NpdG9yeS5cbiAgICovXG4gIENPTU1VTklUWSA9ICdDT01NVU5JVFknLFxuICAvKipcbiAgICogQSBwYWNrYWdlIHdoZXJlIHRoZSBvcmlnaW4gaXMgdW5rbm93biAoZS5nLiB1cGxvYWRlZCB0byBtYW5hZ2VtZW50IHdpdGggYW4gdW5rbm93biBsYWJlbClcbiAgICovXG4gIFVOS05PV04gPSAnVU5LTk9XTicsXG4gIC8qKlxuICAgKiBBIGN1c3RvbSBwYWNrYWdlIGUuZy4gdXBsb2FkZWQgdG8gdGhlIHRlbmFudCBieSBhIHVzZXJcbiAgICovXG4gIENVU1RPTSA9ICdDVVNUT00nLFxuICAvKipcbiAgICogQSBwYWNrYWdlIHRoYXQgd2FzIGFyY2hpdmVkIGJ5IHRoZSB1c2VyXG4gICAqL1xuICBBUkNISVZFRCA9ICdBUkNISVZFRCdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBsaWNhdGlvblBsdWdpbiB7XG4gIGlkOiBzdHJpbmc7XG4gIGlkTGF0ZXN0OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG1vZHVsZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICBzY29wZT86IFBsdWdpbnNFeHBvcnRTY29wZXM7XG4gIGluc3RhbGxlZD86IGJvb2xlYW47XG4gIGNvbnRleHRQYXRoPzogc3RyaW5nO1xuICBzdGF0dXM/OiBBcHBsaWNhdGlvblBsdWdpblN0YXR1cztcbiAgdGFncz86IHN0cmluZ1tdO1xuICBsaWNlbnNlPzogc3RyaW5nO1xuICB0eXBlPzogUGFja2FnZVR5cGU7XG4gIHZlcnNpb25pbmdNYXRyaXg/OiBWZXJzaW9uaW5nTWF0cml4O1xuICBzZWxlY3RlZD86IGJvb2xlYW47XG4gIG9yaWdpbkFwcD86IElBcHBsaWNhdGlvbjtcbiAgaW5zdGFsbGVkVmlhVGFnPzogc3RyaW5nIHwgZmFsc2U7XG59XG4iXX0=