aril 1.2.18 → 1.2.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. package/boot/config/apps/src/interfaces.d.ts +5 -0
  2. package/boot/config/apps/src/route-permissions.d.ts +2 -2
  3. package/esm2022/boot/config/apps/src/apps.service.mjs +5 -5
  4. package/esm2022/boot/config/apps/src/auth.guard.mjs +4 -4
  5. package/esm2022/boot/config/apps/src/interfaces.mjs +1 -1
  6. package/esm2022/boot/config/apps/src/route-permissions.mjs +24 -6
  7. package/esm2022/boot/config/apps/src/showdowDOMWrapper.mjs +4 -4
  8. package/esm2022/boot/host/src/app.component.mjs +4 -4
  9. package/esm2022/boot/mfe/src/app.component.mjs +4 -4
  10. package/esm2022/boot/pages/src/forbidden.component.mjs +4 -4
  11. package/esm2022/boot/pages/src/notFound.component.mjs +4 -4
  12. package/esm2022/http/src/httpBackend.mjs +4 -4
  13. package/esm2022/i18n/src/i18n.module.mjs +5 -5
  14. package/esm2022/i18n/src/loader.mjs +4 -4
  15. package/esm2022/theme/layout/app/breadcrumb/app.breadcrumb.component.mjs +4 -4
  16. package/esm2022/theme/layout/app/expandableMenu/expandable-menu.component.mjs +4 -4
  17. package/esm2022/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.mjs +4 -4
  18. package/esm2022/theme/layout/app/favorite-pages/favorite-pages.service.mjs +4 -4
  19. package/esm2022/theme/layout/app/favorite-pages/modals/add-edit-favorite-modal/add-edit-favorite-modal.component.mjs +4 -4
  20. package/esm2022/theme/layout/app/general-search/general-search.component.mjs +4 -4
  21. package/esm2022/theme/layout/app/history/history-sidebar.component.mjs +4 -4
  22. package/esm2022/theme/layout/app/history/history.service.mjs +4 -4
  23. package/esm2022/theme/layout/app/layout/app.layout.component.mjs +4 -4
  24. package/esm2022/theme/layout/app/layout/mfe.layout.component.mjs +4 -4
  25. package/esm2022/theme/layout/app/notifications/notifications-sidebar.component.mjs +4 -4
  26. package/esm2022/theme/layout/app/profileSidebar/app.profilesidebar.component.mjs +4 -4
  27. package/esm2022/theme/layout/app/profileSidebar/modals/change-password-modal/change-password-modal.component.mjs +4 -4
  28. package/esm2022/theme/layout/app/profileSidebar/modals/edit-profile-modal/edit-profile-modal.component.mjs +4 -4
  29. package/esm2022/theme/layout/app/profileSidebar/profile.service.mjs +4 -4
  30. package/esm2022/theme/layout/app/site-map/site-map-sidebar.component.mjs +4 -4
  31. package/esm2022/theme/layout/app/static-sidebar/static-sidebar.component.mjs +4 -4
  32. package/esm2022/theme/layout/app/topbar/app.topbar.component.mjs +4 -4
  33. package/esm2022/theme/layout/service/app.layout.service.mjs +4 -4
  34. package/esm2022/theme/layout/service/app.menu.service.mjs +4 -4
  35. package/esm2022/theme/layout/service/breadcrumb.service.mjs +4 -4
  36. package/esm2022/theme/layout/service/notifications.service.mjs +4 -4
  37. package/esm2022/theme/layout/service/search.service.mjs +4 -4
  38. package/esm2022/theme/layout/service/selection-group.service.mjs +4 -4
  39. package/esm2022/ui/autoComplete/src/auto-complete.component.mjs +4 -4
  40. package/esm2022/ui/badge/src/badge.component.mjs +4 -4
  41. package/esm2022/ui/button/src/button.component.mjs +4 -4
  42. package/esm2022/ui/button/src/split-button.component.mjs +4 -4
  43. package/esm2022/ui/calendar/src/calendar.component.mjs +4 -4
  44. package/esm2022/ui/charts/src/amCharts/column/column-chart.component.mjs +4 -4
  45. package/esm2022/ui/charts/src/amCharts/line/line-chart.component.mjs +4 -4
  46. package/esm2022/ui/charts/src/amCharts/pie/pie-chart.component.mjs +4 -4
  47. package/esm2022/ui/charts/src/highCharts/area/area-chart.component.mjs +4 -4
  48. package/esm2022/ui/charts/src/highCharts/bar/bar-chart.component.mjs +4 -4
  49. package/esm2022/ui/charts/src/highCharts/column/column-chart.component.mjs +4 -4
  50. package/esm2022/ui/charts/src/highCharts/gauge/solid-gauge.component.mjs +4 -4
  51. package/esm2022/ui/charts/src/highCharts/heatmap/heatMap-chart.component.mjs +4 -4
  52. package/esm2022/ui/charts/src/highCharts/line/line-chart-datetime-axis.component.mjs +4 -4
  53. package/esm2022/ui/charts/src/highCharts/line/line-chart-series.component.mjs +4 -4
  54. package/esm2022/ui/charts/src/highCharts/line/line-chart.component.mjs +4 -4
  55. package/esm2022/ui/charts/src/highCharts/pie/pie-chart.component.mjs +4 -4
  56. package/esm2022/ui/checkbox/src/check-box.component.mjs +4 -4
  57. package/esm2022/ui/checkbox/src/tri-state-checkbox.component.mjs +4 -4
  58. package/esm2022/ui/chip/src/chip.component.mjs +4 -4
  59. package/esm2022/ui/collapse-reorder-list/src/collapse-reorder-list.component.mjs +4 -4
  60. package/esm2022/ui/dxEditor/src/dx-editor.component.mjs +4 -4
  61. package/esm2022/ui/dxField/src/dx-field.component.mjs +4 -4
  62. package/esm2022/ui/editor/src/aril-editor.component.mjs +4 -4
  63. package/esm2022/ui/field/src/field.component.mjs +4 -4
  64. package/esm2022/ui/fileUpload/src/file-upload.component.mjs +4 -4
  65. package/esm2022/ui/form/index.mjs +5 -5
  66. package/esm2022/ui/form/src/form-submit-button.component.mjs +4 -4
  67. package/esm2022/ui/form/src/form.component.mjs +4 -4
  68. package/esm2022/ui/img-viewer/src/img-viewer.component.mjs +4 -4
  69. package/esm2022/ui/json-diff-comparison/src/json-diff.component.mjs +4 -4
  70. package/esm2022/ui/lib/src/form/form-error-message.component.mjs +4 -4
  71. package/esm2022/ui/lib/src/form/form-error-message.directive.mjs +4 -4
  72. package/esm2022/ui/lib/src/grid/enum-color-picker.pipe.mjs +4 -4
  73. package/esm2022/ui/lib/src/grid/flex-grid.directive.mjs +4 -4
  74. package/esm2022/ui/lib/src/input/common-input-validators.service.mjs +4 -4
  75. package/esm2022/ui/lib/src/input/dx-input-error-message.pipe.mjs +4 -4
  76. package/esm2022/ui/lib/src/input/input-disabled.directive.mjs +4 -4
  77. package/esm2022/ui/lib/src/input/input-error-message.pipe.mjs +4 -4
  78. package/esm2022/ui/lib/src/input/value-accessor.directive.mjs +4 -4
  79. package/esm2022/ui/loader/src/loader.component.mjs +4 -4
  80. package/esm2022/ui/mask/src/mask.component.mjs +4 -4
  81. package/esm2022/ui/multiSelect/src/multi-select.component.mjs +4 -4
  82. package/esm2022/ui/number/src/number.component.mjs +4 -4
  83. package/esm2022/ui/operation-types-dialog/src/operation-types-dialog.component.mjs +4 -4
  84. package/esm2022/ui/overlayPanel/src/overlay-panel.component.mjs +4 -4
  85. package/esm2022/ui/panel/src/panel.component.mjs +4 -4
  86. package/esm2022/ui/password/src/password.component.mjs +4 -4
  87. package/esm2022/ui/pdf-viewer/src/pdf-viewer.component.mjs +4 -4
  88. package/esm2022/ui/progressbar/src/progressbar.component.mjs +4 -4
  89. package/esm2022/ui/radioButton/src/radio-button.component.mjs +4 -4
  90. package/esm2022/ui/relativeDateSelector/src/relative-date-selector.component.mjs +4 -4
  91. package/esm2022/ui/selectBox/src/select-box.component.mjs +4 -4
  92. package/esm2022/ui/switch/src/switch.component.mjs +4 -4
  93. package/esm2022/ui/table/index.mjs +5 -5
  94. package/esm2022/ui/table/src/export-overlay-panel.component.mjs +4 -4
  95. package/esm2022/ui/table/src/table-column.component.mjs +4 -4
  96. package/esm2022/ui/table/src/table.component.mjs +4 -4
  97. package/esm2022/ui/table-expand/index.mjs +5 -5
  98. package/esm2022/ui/table-expand/src/table-column.component.mjs +4 -4
  99. package/esm2022/ui/table-expand/src/table-expand-area.component.mjs +4 -4
  100. package/esm2022/ui/table-expand/src/table.component.mjs +4 -4
  101. package/esm2022/ui/tag/src/tag.component.mjs +4 -4
  102. package/esm2022/ui/tagBox/src/tag-box.component.mjs +4 -4
  103. package/esm2022/ui/text/src/text.component.mjs +4 -4
  104. package/esm2022/ui/textArea/src/text-area.component.mjs +4 -4
  105. package/esm2022/ui/toggle-button/src/toggle-button.component.mjs +4 -4
  106. package/esm2022/ui/tooltip/src/tooltip-component.mjs +4 -4
  107. package/esm2022/ui/translate-input/src/aril-lang-modal/aril-lang-modal.component.mjs +4 -4
  108. package/esm2022/ui/translate-input/src/aril-translate-input.component.mjs +4 -4
  109. package/esm2022/ui/tree/src/tree.component.mjs +4 -4
  110. package/esm2022/ui/treeSelect/src/treeSelect.component.mjs +4 -4
  111. package/esm2022/ui/treeTable/src/tree-table.component.mjs +4 -4
  112. package/esm2022/ui/value/src/value.component.mjs +4 -4
  113. package/esm2022/ui-business/assetPicker/src/asset-picker.component.mjs +4 -4
  114. package/esm2022/ui-business/detailed-overlay-panel/src/detailed-overlay-panel.component.mjs +4 -4
  115. package/esm2022/ui-business/enumPicker/src/enum-picker.component.mjs +4 -4
  116. package/esm2022/ui-business/image-viewer/src/aril-image-viewer.component.mjs +4 -4
  117. package/esm2022/ui-business/multiple-ref-value/src/multiple-ref-value.component.mjs +4 -4
  118. package/esm2022/ui-business/notification-templates-dialog/src/notification-templates-dialog.component.mjs +4 -4
  119. package/esm2022/ui-business/operation-types-dialog/src/operation-types-dialog.component.mjs +4 -4
  120. package/esm2022/ui-business/pdf-preview-modal/src/pdf-preview-modal.component.mjs +4 -4
  121. package/esm2022/ui-business/ref-value/src/ref-value.component.mjs +4 -4
  122. package/esm2022/ui-business/rolePicker/src/role-picker.component.mjs +4 -4
  123. package/esm2022/ui-business/trace-drawer/src/app-log.service.mjs +4 -4
  124. package/esm2022/ui-business/trace-drawer/src/trace-drawer.component.mjs +4 -4
  125. package/esm2022/ui-business/trace-drawer/src/trace-log.service.mjs +4 -4
  126. package/esm2022/ui-business/trace-id/src/trace-id.component.mjs +4 -4
  127. package/esm2022/ui-business/userPicker/src/user-picker.component.mjs +4 -4
  128. package/esm2022/util/block/src/block.mjs +7 -7
  129. package/esm2022/util/directives/src/detail-page-customization/detail-page-customization.directive.mjs +4 -4
  130. package/esm2022/util/directives/src/dialog-component/plugin-dialog.component.mjs +4 -4
  131. package/esm2022/util/directives/src/dialog-service/plugin-dialog.service.mjs +4 -4
  132. package/esm2022/util/lib/src/module-router.mjs +4 -4
  133. package/esm2022/util/pipes/src/distance-to-now.pipe.mjs +4 -4
  134. package/esm2022/util/pipes/src/get-column-by-field.pipe.mjs +4 -4
  135. package/esm2022/util/pipes/src/parse.pipe.mjs +4 -4
  136. package/esm2022/util/pipes/src/round-number.pipe.mjs +4 -4
  137. package/esm2022/util/pipes/src/safe.pipe.mjs +4 -4
  138. package/esm2022/util/pipes/src/translate-json/translate-json.pipe.mjs +4 -4
  139. package/esm2022/util/pub-sub/src/pub-sub.service.mjs +4 -4
  140. package/esm2022/util/sync-active-tab-route/src/sync-active-tab-route.directive.mjs +4 -4
  141. package/esm2022/util/unwrap/src/unwrap-tag.directive.mjs +4 -4
  142. package/fesm2022/{aril-app.component-wxP3y8dg.mjs → aril-app.component-Cw1MxAqD.mjs} +4 -4
  143. package/fesm2022/{aril-app.component-wxP3y8dg.mjs.map → aril-app.component-Cw1MxAqD.mjs.map} +1 -1
  144. package/fesm2022/aril-boot-base.mjs +1 -1
  145. package/fesm2022/aril-boot-base.mjs.map +1 -1
  146. package/fesm2022/aril-boot-bridge.mjs.map +1 -1
  147. package/fesm2022/aril-boot-config-api.mjs +1 -1
  148. package/fesm2022/aril-boot-config-api.mjs.map +1 -1
  149. package/fesm2022/aril-boot-config-apps.mjs +34 -16
  150. package/fesm2022/aril-boot-config-apps.mjs.map +1 -1
  151. package/fesm2022/aril-boot-config-plugins.mjs +1 -1
  152. package/fesm2022/aril-boot-config-plugins.mjs.map +1 -1
  153. package/fesm2022/aril-boot-config-translate.mjs.map +1 -1
  154. package/fesm2022/aril-boot-host.mjs +4 -4
  155. package/fesm2022/aril-boot-host.mjs.map +1 -1
  156. package/fesm2022/{aril-boot-mfe-app.component-7IjAmjz0.mjs → aril-boot-mfe-app.component-CCTntpyN.mjs} +5 -5
  157. package/fesm2022/{aril-boot-mfe-app.component-7IjAmjz0.mjs.map → aril-boot-mfe-app.component-CCTntpyN.mjs.map} +1 -1
  158. package/fesm2022/{aril-boot-mfe-aril-boot-mfe-KXDpUyv7.mjs → aril-boot-mfe-aril-boot-mfe-D8DZ-gT-.mjs} +4 -4
  159. package/fesm2022/{aril-boot-mfe-aril-boot-mfe-KXDpUyv7.mjs.map → aril-boot-mfe-aril-boot-mfe-D8DZ-gT-.mjs.map} +1 -1
  160. package/fesm2022/aril-boot-mfe.mjs +1 -1
  161. package/fesm2022/aril-boot-pages.mjs +6 -6
  162. package/fesm2022/aril-boot-pages.mjs.map +1 -1
  163. package/fesm2022/aril-http.mjs +3 -3
  164. package/fesm2022/aril-http.mjs.map +1 -1
  165. package/fesm2022/aril-i18n.mjs +7 -7
  166. package/fesm2022/aril-i18n.mjs.map +1 -1
  167. package/fesm2022/aril-keycloak.mjs.map +1 -1
  168. package/fesm2022/aril-provider.mjs +1 -1
  169. package/fesm2022/aril-provider.mjs.map +1 -1
  170. package/fesm2022/aril-theme-layout.mjs +72 -72
  171. package/fesm2022/aril-theme-layout.mjs.map +1 -1
  172. package/fesm2022/aril-ui-autoComplete.mjs +6 -6
  173. package/fesm2022/aril-ui-autoComplete.mjs.map +1 -1
  174. package/fesm2022/aril-ui-badge.mjs +4 -4
  175. package/fesm2022/aril-ui-badge.mjs.map +1 -1
  176. package/fesm2022/aril-ui-business-assetPicker.mjs +5 -5
  177. package/fesm2022/aril-ui-business-assetPicker.mjs.map +1 -1
  178. package/fesm2022/aril-ui-business-detailed-overlay-panel.mjs +5 -5
  179. package/fesm2022/aril-ui-business-detailed-overlay-panel.mjs.map +1 -1
  180. package/fesm2022/aril-ui-business-enumPicker.mjs +5 -5
  181. package/fesm2022/aril-ui-business-enumPicker.mjs.map +1 -1
  182. package/fesm2022/aril-ui-business-image-viewer.mjs +3 -3
  183. package/fesm2022/aril-ui-business-image-viewer.mjs.map +1 -1
  184. package/fesm2022/aril-ui-business-multiple-ref-value.mjs +4 -4
  185. package/fesm2022/aril-ui-business-multiple-ref-value.mjs.map +1 -1
  186. package/fesm2022/aril-ui-business-notification-templates-dialog.mjs +3 -3
  187. package/fesm2022/aril-ui-business-notification-templates-dialog.mjs.map +1 -1
  188. package/fesm2022/aril-ui-business-operation-types-dialog.mjs +3 -3
  189. package/fesm2022/aril-ui-business-operation-types-dialog.mjs.map +1 -1
  190. package/fesm2022/aril-ui-business-pdf-preview-modal.mjs +3 -3
  191. package/fesm2022/aril-ui-business-pdf-preview-modal.mjs.map +1 -1
  192. package/fesm2022/aril-ui-business-ref-value.mjs +4 -4
  193. package/fesm2022/aril-ui-business-ref-value.mjs.map +1 -1
  194. package/fesm2022/aril-ui-business-rolePicker.mjs +4 -4
  195. package/fesm2022/aril-ui-business-rolePicker.mjs.map +1 -1
  196. package/fesm2022/aril-ui-business-trace-drawer.mjs +10 -10
  197. package/fesm2022/aril-ui-business-trace-drawer.mjs.map +1 -1
  198. package/fesm2022/aril-ui-business-trace-id.mjs +4 -4
  199. package/fesm2022/aril-ui-business-trace-id.mjs.map +1 -1
  200. package/fesm2022/aril-ui-business-userPicker.mjs +3 -3
  201. package/fesm2022/aril-ui-business-userPicker.mjs.map +1 -1
  202. package/fesm2022/aril-ui-button.mjs +7 -7
  203. package/fesm2022/aril-ui-button.mjs.map +1 -1
  204. package/fesm2022/aril-ui-calendar.mjs +3 -3
  205. package/fesm2022/aril-ui-calendar.mjs.map +1 -1
  206. package/fesm2022/aril-ui-charts.mjs +37 -37
  207. package/fesm2022/aril-ui-charts.mjs.map +1 -1
  208. package/fesm2022/aril-ui-checkbox.mjs +6 -6
  209. package/fesm2022/aril-ui-checkbox.mjs.map +1 -1
  210. package/fesm2022/aril-ui-chip.mjs +4 -4
  211. package/fesm2022/aril-ui-chip.mjs.map +1 -1
  212. package/fesm2022/aril-ui-collapse-reorder-list.mjs +4 -4
  213. package/fesm2022/aril-ui-collapse-reorder-list.mjs.map +1 -1
  214. package/fesm2022/aril-ui-dxEditor.mjs +4 -4
  215. package/fesm2022/aril-ui-dxEditor.mjs.map +1 -1
  216. package/fesm2022/aril-ui-dxField.mjs +4 -4
  217. package/fesm2022/aril-ui-dxField.mjs.map +1 -1
  218. package/fesm2022/aril-ui-editor.mjs +4 -4
  219. package/fesm2022/aril-ui-editor.mjs.map +1 -1
  220. package/fesm2022/aril-ui-field.mjs +4 -4
  221. package/fesm2022/aril-ui-field.mjs.map +1 -1
  222. package/fesm2022/aril-ui-fileUpload.mjs +4 -4
  223. package/fesm2022/aril-ui-fileUpload.mjs.map +1 -1
  224. package/fesm2022/aril-ui-form.mjs +11 -11
  225. package/fesm2022/aril-ui-form.mjs.map +1 -1
  226. package/fesm2022/aril-ui-img-viewer.mjs +3 -3
  227. package/fesm2022/aril-ui-img-viewer.mjs.map +1 -1
  228. package/fesm2022/aril-ui-json-diff-comparison.mjs +4 -4
  229. package/fesm2022/aril-ui-json-diff-comparison.mjs.map +1 -1
  230. package/fesm2022/aril-ui-lib.mjs +28 -28
  231. package/fesm2022/aril-ui-lib.mjs.map +1 -1
  232. package/fesm2022/aril-ui-loader.mjs +3 -3
  233. package/fesm2022/aril-ui-loader.mjs.map +1 -1
  234. package/fesm2022/aril-ui-mask.mjs +3 -3
  235. package/fesm2022/aril-ui-mask.mjs.map +1 -1
  236. package/fesm2022/aril-ui-multiSelect.mjs +3 -3
  237. package/fesm2022/aril-ui-multiSelect.mjs.map +1 -1
  238. package/fesm2022/aril-ui-number.mjs +3 -3
  239. package/fesm2022/aril-ui-number.mjs.map +1 -1
  240. package/fesm2022/aril-ui-operation-types-dialog.mjs +3 -3
  241. package/fesm2022/aril-ui-operation-types-dialog.mjs.map +1 -1
  242. package/fesm2022/aril-ui-overlayPanel.mjs +4 -4
  243. package/fesm2022/aril-ui-overlayPanel.mjs.map +1 -1
  244. package/fesm2022/aril-ui-panel.mjs +4 -4
  245. package/fesm2022/aril-ui-panel.mjs.map +1 -1
  246. package/fesm2022/aril-ui-password.mjs +3 -3
  247. package/fesm2022/aril-ui-password.mjs.map +1 -1
  248. package/fesm2022/aril-ui-pdf-viewer.mjs +3 -3
  249. package/fesm2022/aril-ui-pdf-viewer.mjs.map +1 -1
  250. package/fesm2022/aril-ui-progressbar.mjs +3 -3
  251. package/fesm2022/aril-ui-progressbar.mjs.map +1 -1
  252. package/fesm2022/aril-ui-radioButton.mjs +3 -3
  253. package/fesm2022/aril-ui-radioButton.mjs.map +1 -1
  254. package/fesm2022/aril-ui-relativeDateSelector.mjs +4 -4
  255. package/fesm2022/aril-ui-relativeDateSelector.mjs.map +1 -1
  256. package/fesm2022/aril-ui-selectBox.mjs +5 -5
  257. package/fesm2022/aril-ui-selectBox.mjs.map +1 -1
  258. package/fesm2022/aril-ui-switch.mjs +3 -3
  259. package/fesm2022/aril-ui-switch.mjs.map +1 -1
  260. package/fesm2022/aril-ui-table-expand.mjs +14 -14
  261. package/fesm2022/aril-ui-table-expand.mjs.map +1 -1
  262. package/fesm2022/aril-ui-table.mjs +15 -15
  263. package/fesm2022/aril-ui-table.mjs.map +1 -1
  264. package/fesm2022/aril-ui-tag.mjs +3 -3
  265. package/fesm2022/aril-ui-tag.mjs.map +1 -1
  266. package/fesm2022/aril-ui-tagBox.mjs +5 -5
  267. package/fesm2022/aril-ui-tagBox.mjs.map +1 -1
  268. package/fesm2022/aril-ui-text.mjs +3 -3
  269. package/fesm2022/aril-ui-text.mjs.map +1 -1
  270. package/fesm2022/aril-ui-textArea.mjs +3 -3
  271. package/fesm2022/aril-ui-textArea.mjs.map +1 -1
  272. package/fesm2022/aril-ui-toggle-button.mjs +4 -4
  273. package/fesm2022/aril-ui-toggle-button.mjs.map +1 -1
  274. package/fesm2022/aril-ui-tooltip.mjs +3 -3
  275. package/fesm2022/aril-ui-tooltip.mjs.map +1 -1
  276. package/fesm2022/aril-ui-translate-input.mjs +6 -6
  277. package/fesm2022/aril-ui-translate-input.mjs.map +1 -1
  278. package/fesm2022/aril-ui-tree.mjs +4 -4
  279. package/fesm2022/aril-ui-tree.mjs.map +1 -1
  280. package/fesm2022/aril-ui-treeSelect.mjs +4 -4
  281. package/fesm2022/aril-ui-treeSelect.mjs.map +1 -1
  282. package/fesm2022/aril-ui-treeTable.mjs +4 -4
  283. package/fesm2022/aril-ui-treeTable.mjs.map +1 -1
  284. package/fesm2022/aril-ui-value.mjs +5 -5
  285. package/fesm2022/aril-ui-value.mjs.map +1 -1
  286. package/fesm2022/aril-util-block.mjs +6 -6
  287. package/fesm2022/aril-util-block.mjs.map +1 -1
  288. package/fesm2022/aril-util-directives.mjs +10 -10
  289. package/fesm2022/aril-util-directives.mjs.map +1 -1
  290. package/fesm2022/aril-util-lib.mjs +3 -3
  291. package/fesm2022/aril-util-lib.mjs.map +1 -1
  292. package/fesm2022/aril-util-pipes.mjs +18 -18
  293. package/fesm2022/aril-util-pipes.mjs.map +1 -1
  294. package/fesm2022/aril-util-primitive-extensions.mjs.map +1 -1
  295. package/fesm2022/aril-util-pub-sub.mjs +3 -3
  296. package/fesm2022/aril-util-pub-sub.mjs.map +1 -1
  297. package/fesm2022/aril-util-sync-active-tab-route.mjs +4 -4
  298. package/fesm2022/aril-util-sync-active-tab-route.mjs.map +1 -1
  299. package/fesm2022/aril-util-unwrap.mjs +3 -3
  300. package/fesm2022/aril-util-unwrap.mjs.map +1 -1
  301. package/fesm2022/aril.mjs +6 -6
  302. package/fesm2022/aril.mjs.map +1 -1
  303. package/package.json +210 -210
  304. package/theme/layout/app/favorite-pages/favorite-pages-sidebar.component.d.ts +16 -0
  305. package/theme/layout/app/history/history-sidebar.component.d.ts +16 -0
  306. package/theme/layout/app/notifications/notifications-sidebar.component.d.ts +16 -0
  307. package/theme/layout/app/site-map/site-map-sidebar.component.d.ts +16 -0
  308. package/ui/autoComplete/src/auto-complete.component.d.ts +8 -8
  309. package/ui/badge/src/badge.component.d.ts +9 -9
  310. package/ui/button/src/button.component.d.ts +12 -12
  311. package/ui/button/src/split-button.component.d.ts +1 -1
  312. package/ui/calendar/src/calendar.component.d.ts +22 -22
  313. package/ui/charts/src/amCharts/column/column-chart.component.d.ts +4 -4
  314. package/ui/charts/src/amCharts/line/line-chart.component.d.ts +5 -5
  315. package/ui/charts/src/amCharts/pie/pie-chart.component.d.ts +4 -4
  316. package/ui/charts/src/highCharts/area/area-chart.component.d.ts +3 -3
  317. package/ui/charts/src/highCharts/bar/bar-chart.component.d.ts +7 -7
  318. package/ui/charts/src/highCharts/column/column-chart.component.d.ts +9 -9
  319. package/ui/charts/src/highCharts/gauge/solid-gauge.component.d.ts +3 -3
  320. package/ui/charts/src/highCharts/heatmap/heatMap-chart.component.d.ts +4 -4
  321. package/ui/charts/src/highCharts/line/line-chart-datetime-axis.component.d.ts +5 -5
  322. package/ui/charts/src/highCharts/line/line-chart-series.component.d.ts +4 -4
  323. package/ui/charts/src/highCharts/line/line-chart.component.d.ts +4 -4
  324. package/ui/charts/src/highCharts/pie/pie-chart.component.d.ts +7 -7
  325. package/ui/checkbox/src/check-box.component.d.ts +3 -3
  326. package/ui/checkbox/src/tri-state-checkbox.component.d.ts +2 -2
  327. package/ui/chip/src/chip.component.d.ts +7 -7
  328. package/ui/collapse-reorder-list/src/collapse-reorder-list.component.d.ts +4 -4
  329. package/ui/dxEditor/src/dx-editor.component.d.ts +5 -5
  330. package/ui/dxField/src/dx-field.component.d.ts +5 -5
  331. package/ui/editor/src/aril-editor.component.d.ts +3 -3
  332. package/ui/field/src/field.component.d.ts +9 -9
  333. package/ui/fileUpload/src/file-upload.component.d.ts +14 -14
  334. package/ui/form/src/form-submit-button.component.d.ts +1 -1
  335. package/ui/form/src/form.component.d.ts +1 -1
  336. package/ui/img-viewer/src/img-viewer.component.d.ts +1 -1
  337. package/ui/lib/src/form/form-error-message.directive.d.ts +1 -1
  338. package/ui/mask/src/mask.component.d.ts +6 -6
  339. package/ui/multiSelect/src/multi-select.component.d.ts +13 -13
  340. package/ui/number/src/number.component.d.ts +15 -15
  341. package/ui/overlayPanel/src/overlay-panel.component.d.ts +1 -1
  342. package/ui/panel/src/panel.component.d.ts +6 -6
  343. package/ui/password/src/password.component.d.ts +4 -4
  344. package/ui/pdf-viewer/src/pdf-viewer.component.d.ts +12 -12
  345. package/ui/progressbar/src/progressbar.component.d.ts +3 -3
  346. package/ui/radioButton/src/radio-button.component.d.ts +3 -3
  347. package/ui/selectBox/src/select-box.component.d.ts +10 -10
  348. package/ui/switch/src/switch.component.d.ts +1 -1
  349. package/ui/table/src/export-overlay-panel.component.d.ts +2 -2
  350. package/ui/table/src/table-column.component.d.ts +11 -11
  351. package/ui/table/src/table.component.d.ts +35 -35
  352. package/ui/table-expand/src/table-column.component.d.ts +6 -6
  353. package/ui/table-expand/src/table.component.d.ts +20 -20
  354. package/ui/tag/src/tag.component.d.ts +4 -6
  355. package/ui/tagBox/src/tag-box.component.d.ts +7 -7
  356. package/ui/text/src/text.component.d.ts +5 -5
  357. package/ui/textArea/src/text-area.component.d.ts +5 -5
  358. package/ui/toggle-button/src/toggle-button.component.d.ts +1 -1
  359. package/ui/tooltip/src/tooltip-component.d.ts +8 -8
  360. package/ui/translate-input/src/aril-translate-input.component.d.ts +2 -2
  361. package/ui/tree/src/tree.component.d.ts +8 -8
  362. package/ui/treeSelect/src/treeSelect.component.d.ts +12 -12
  363. package/ui/treeTable/src/tree-table.component.d.ts +5 -5
  364. package/ui/value/src/value.component.d.ts +15 -15
  365. package/ui-business/assetPicker/src/asset-picker.component.d.ts +11 -11
  366. package/ui-business/detailed-overlay-panel/src/detailed-overlay-panel.component.d.ts +3 -6
  367. package/ui-business/enumPicker/src/enum-picker.component.d.ts +23 -23
  368. package/ui-business/image-viewer/src/aril-image-viewer.component.d.ts +8 -8
  369. package/ui-business/multiple-ref-value/src/multiple-ref-value.component.d.ts +2 -5
  370. package/ui-business/ref-value/src/ref-value.component.d.ts +5 -5
  371. package/ui-business/rolePicker/src/role-picker.component.d.ts +6 -6
  372. package/ui-business/trace-drawer/src/trace-drawer.component.d.ts +8 -8
  373. package/ui-business/trace-id/src/trace-id.component.d.ts +6 -6
  374. package/ui-business/userPicker/src/user-picker.component.d.ts +3 -3
  375. package/util/block/src/block.d.ts +4 -4
  376. package/util/lib/src/types.d.ts +16 -0
@@ -301,14 +301,14 @@ export class ExpandableMenuComponent {
301
301
  this.sidebarExpanded = false;
302
302
  }
303
303
  }
304
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ExpandableMenuComponent, deps: [{ token: i1.TranslateJsonPipe }, { token: i2.AppMenuService }, { token: i3.Router }, { token: i4.KeycloakService }, { token: i5.TranslocoService }, { token: i6.LayoutService }, { token: i7.HttpClient }], target: i0.ɵɵFactoryTarget.Component }); }
305
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: ExpandableMenuComponent, isStandalone: true, selector: "app-expandable-menu", host: { listeners: { "window:resize": "onResize()" } }, providers: [TranslateJsonPipe], ngImport: i0, template: "<div class=\"new-layout-sidebar\" >\r\n\t<!-- Main sidebar (first level) -->\r\n\t<div class=\"main-sidebar\" style=\"position: relative;\">\r\n\t\t<div class=\"main-sidebar-content\">\r\n\t\t\t<ul class=\"main-menu\">\r\n\t\t\t\t@for(item of getMenuItems(); track item; let i = $index){\r\n\t\t\t\t\t@if(!item.separator){\r\n\t\t\t\t\t\t<li\r\n\t\t\t\t\t\t[ngClass]=\"{'active': isActiveRoute(item) || isHaveSelectedChildItem(item)}\"\r\n\t\t\t\t\t\t(click)=\"selectMainItem(i, item)\"\r\n\t\t\t\t\t\t[pTooltip]=\"(item.label && activeLang() ? item.label[activeLang()!] || '' : '')\"\r\n\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t<div class=\"main-menu-item\">\r\n\t\t\t\t\t\t\t<i [ngClass]=\"item.icon\" class=\"menu-icon\"></i>\r\n\t\t\t\t\t\t\t<!-- <small class=\"menu-label\">{{ item.label && activeLang() ? item.label[activeLang()!] || '' : '' }}</small> -->\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t</ul>\r\n\t\t</div>\r\n\t</div>\r\n\t\t @if(selectedMainMenuItem && selectedMainMenuItem.items && selectedMainMenuItem.items.length > 0){\r\n\r\n\t\t\t <div class=\"sidebar-toggle-container\">\r\n\t\t\t\t <button class=\"sidebar-circle-toggle-btn\" (click)=\"toggleSidebar()\">\r\n\t\t\t\t\t <i class=\"pi\" [ngClass]=\"sidebarExpanded ? 'pi-angle-left' : 'pi-angle-right'\"></i>\r\n\t\t\t\t </button>\r\n\t\t\t </div>\r\n\t\t }\r\n\r\n\t<!-- Secondary sidebar (second level) -->\r\n\t<div class=\"secondary-sidebar\" [ngClass]=\"{'expanded': sidebarExpanded}\">\r\n\t\t<div class=\"secondary-content-wrapper\" style=\"position: relative;\">\r\n\t\t\t<!-- Secondary sidebar content -->\r\n\t\t\t<div class=\"secondary-sidebar-content\">\r\n\t\t\t\t@if(selectedMainMenuItem){\r\n\t\t\t\t\t<ul class=\"secondary-menu\">\r\n\t\t\t\t\t\t@for(subItem of selectedMainMenuItem.items; track subItem; let i = $index){\r\n\t\t\t\t\t\t\t\t<!-- Action menu item -->\r\n\t\t\t\t\t\t\t\t@if(subItem.action) {\r\n\t\t\t\t\t\t\t\t\t<li class=\"secondary-menu-item\" [ngClass]=\"{'action-loading': isActionLoading(subItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t<a class=\"secondary-menu-link is-action\"\r\n\t\t\t\t\t\t\t\t\t\t\t(click)=\"onActionItemClick(subItem, $event)\"\r\n\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(subItem.label, activeLang(), 'secondary') ? (subItem.label && activeLang() ? subItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t@if(isActionLoading(subItem)){\r\n\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"submenu-icon pi pi-spin pi-spinner\"></i>\r\n\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<i [ngClass]=\"subItem.icon\" class=\"submenu-icon\"></i>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"submenu-label\">{{ subItem.label && activeLang() ? subItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t<!-- Regular menu item -->\r\n\t\t\t\t\t\t\t\t<li class=\"secondary-menu-item\" [ngClass]=\"{'active': isActiveRoute(subItem)}\">\r\n\t\t\t\t\t\t\t\t\t<a [routerLink]=\"subItem.routerLink\" \r\n\t\t\t\t\t\t\t\t\t\tclass=\"secondary-menu-link\"\r\n\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(subItem.label, activeLang(), 'secondary') ? (subItem.label && activeLang() ? subItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t<i [ngClass]=\"subItem.icon\" class=\"submenu-icon\"></i>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"submenu-label\">{{ subItem.label && activeLang() ? subItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t<!-- Always render submenu if it exists -->\r\n\t\t\t\t\t\t\t\t\t @if(subItem.items && subItem.items.length > 0){\r\n\t\t\t\t\t\t\t\t\t\t <ul class=\"tertiary-menu always-open\">\r\n\t\t\t\t\t\t\t\t\t\t\t@for(childItem of subItem.items; track childItem; let i = $index){\r\n\t\t\t\t\t\t\t\t\t\t\t\t<!-- Action item at tertiary level -->\r\n\t\t\t\t\t\t\t\t\t\t\t\t@if(childItem.action) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<li class=\"tertiary-menu-item\" [ngClass]=\"{'action-loading': isActionLoading(childItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"tertiary-menu-link is-action\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"onActionItemClick(childItem, $event)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(childItem.label, activeLang(), 'tertiary') ? (childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if(isActionLoading(childItem)){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"tertiary-label\"><i class=\"pi pi-spin pi-spinner\"></i> {{ childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"tertiary-label\">{{ childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<li class=\"tertiary-menu-item\" [ngClass]=\"{'active': isActiveRoute(childItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<a [routerLink]=\"childItem.routerLink\" \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"tertiary-menu-link\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(childItem.label, activeLang(), 'tertiary') ? (childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"tertiary-label\">{{ childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<!-- Always render deeper levels if they exist, also visible by default -->\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t@if(childItem.items && childItem.items.length > 0){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ul class=\"nested-menu always-open\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@for(nestedItem of childItem.items; track nestedItem; let i = $index){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if(nestedItem.action) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li class=\"nested-menu-item\" [ngClass]=\"{'action-loading': isActionLoading(nestedItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"nested-menu-link is-action\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"onActionItemClick(nestedItem, $event)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(nestedItem.label, activeLang(), 'nested') ? (nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if(isActionLoading(nestedItem)){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"nested-label\"><i class=\"pi pi-spin pi-spinner\"></i> {{ nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"nested-label\">{{ nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"nested-menu-item\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"{'active': isActiveRoute(nestedItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a [routerLink]=\"nestedItem.routerLink\" \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"nested-menu-link\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(nestedItem.label, activeLang(), 'nested') ? (nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"nested-label\">{{ nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t </ul>\r\n\t\t\t\t\t\t\t\t\t }\r\n\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\t\r\n</div>\r\n", dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i8.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }] }); }
304
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ExpandableMenuComponent, deps: [{ token: i1.TranslateJsonPipe }, { token: i2.AppMenuService }, { token: i3.Router }, { token: i4.KeycloakService }, { token: i5.TranslocoService }, { token: i6.LayoutService }, { token: i7.HttpClient }], target: i0.ɵɵFactoryTarget.Component }); }
305
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ExpandableMenuComponent, isStandalone: true, selector: "app-expandable-menu", host: { listeners: { "window:resize": "onResize()" } }, providers: [TranslateJsonPipe], ngImport: i0, template: "<div class=\"new-layout-sidebar\" >\r\n\t<!-- Main sidebar (first level) -->\r\n\t<div class=\"main-sidebar\" style=\"position: relative;\">\r\n\t\t<div class=\"main-sidebar-content\">\r\n\t\t\t<ul class=\"main-menu\">\r\n\t\t\t\t@for(item of getMenuItems(); track item; let i = $index){\r\n\t\t\t\t\t@if(!item.separator){\r\n\t\t\t\t\t\t<li\r\n\t\t\t\t\t\t[ngClass]=\"{'active': isActiveRoute(item) || isHaveSelectedChildItem(item)}\"\r\n\t\t\t\t\t\t(click)=\"selectMainItem(i, item)\"\r\n\t\t\t\t\t\t[pTooltip]=\"(item.label && activeLang() ? item.label[activeLang()!] || '' : '')\"\r\n\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t<div class=\"main-menu-item\">\r\n\t\t\t\t\t\t\t<i [ngClass]=\"item.icon\" class=\"menu-icon\"></i>\r\n\t\t\t\t\t\t\t<!-- <small class=\"menu-label\">{{ item.label && activeLang() ? item.label[activeLang()!] || '' : '' }}</small> -->\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t</ul>\r\n\t\t</div>\r\n\t</div>\r\n\t\t @if(selectedMainMenuItem && selectedMainMenuItem.items && selectedMainMenuItem.items.length > 0){\r\n\r\n\t\t\t <div class=\"sidebar-toggle-container\">\r\n\t\t\t\t <button class=\"sidebar-circle-toggle-btn\" (click)=\"toggleSidebar()\">\r\n\t\t\t\t\t <i class=\"pi\" [ngClass]=\"sidebarExpanded ? 'pi-angle-left' : 'pi-angle-right'\"></i>\r\n\t\t\t\t </button>\r\n\t\t\t </div>\r\n\t\t }\r\n\r\n\t<!-- Secondary sidebar (second level) -->\r\n\t<div class=\"secondary-sidebar\" [ngClass]=\"{'expanded': sidebarExpanded}\">\r\n\t\t<div class=\"secondary-content-wrapper\" style=\"position: relative;\">\r\n\t\t\t<!-- Secondary sidebar content -->\r\n\t\t\t<div class=\"secondary-sidebar-content\">\r\n\t\t\t\t@if(selectedMainMenuItem){\r\n\t\t\t\t\t<ul class=\"secondary-menu\">\r\n\t\t\t\t\t\t@for(subItem of selectedMainMenuItem.items; track subItem; let i = $index){\r\n\t\t\t\t\t\t\t\t<!-- Action menu item -->\r\n\t\t\t\t\t\t\t\t@if(subItem.action) {\r\n\t\t\t\t\t\t\t\t\t<li class=\"secondary-menu-item\" [ngClass]=\"{'action-loading': isActionLoading(subItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t<a class=\"secondary-menu-link is-action\"\r\n\t\t\t\t\t\t\t\t\t\t\t(click)=\"onActionItemClick(subItem, $event)\"\r\n\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(subItem.label, activeLang(), 'secondary') ? (subItem.label && activeLang() ? subItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t@if(isActionLoading(subItem)){\r\n\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"submenu-icon pi pi-spin pi-spinner\"></i>\r\n\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<i [ngClass]=\"subItem.icon\" class=\"submenu-icon\"></i>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"submenu-label\">{{ subItem.label && activeLang() ? subItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t<!-- Regular menu item -->\r\n\t\t\t\t\t\t\t\t<li class=\"secondary-menu-item\" [ngClass]=\"{'active': isActiveRoute(subItem)}\">\r\n\t\t\t\t\t\t\t\t\t<a [routerLink]=\"subItem.routerLink\" \r\n\t\t\t\t\t\t\t\t\t\tclass=\"secondary-menu-link\"\r\n\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(subItem.label, activeLang(), 'secondary') ? (subItem.label && activeLang() ? subItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t<i [ngClass]=\"subItem.icon\" class=\"submenu-icon\"></i>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"submenu-label\">{{ subItem.label && activeLang() ? subItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t<!-- Always render submenu if it exists -->\r\n\t\t\t\t\t\t\t\t\t @if(subItem.items && subItem.items.length > 0){\r\n\t\t\t\t\t\t\t\t\t\t <ul class=\"tertiary-menu always-open\">\r\n\t\t\t\t\t\t\t\t\t\t\t@for(childItem of subItem.items; track childItem; let i = $index){\r\n\t\t\t\t\t\t\t\t\t\t\t\t<!-- Action item at tertiary level -->\r\n\t\t\t\t\t\t\t\t\t\t\t\t@if(childItem.action) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<li class=\"tertiary-menu-item\" [ngClass]=\"{'action-loading': isActionLoading(childItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"tertiary-menu-link is-action\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"onActionItemClick(childItem, $event)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(childItem.label, activeLang(), 'tertiary') ? (childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if(isActionLoading(childItem)){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"tertiary-label\"><i class=\"pi pi-spin pi-spinner\"></i> {{ childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"tertiary-label\">{{ childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<li class=\"tertiary-menu-item\" [ngClass]=\"{'active': isActiveRoute(childItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<a [routerLink]=\"childItem.routerLink\" \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"tertiary-menu-link\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(childItem.label, activeLang(), 'tertiary') ? (childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"tertiary-label\">{{ childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<!-- Always render deeper levels if they exist, also visible by default -->\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t@if(childItem.items && childItem.items.length > 0){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ul class=\"nested-menu always-open\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@for(nestedItem of childItem.items; track nestedItem; let i = $index){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if(nestedItem.action) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li class=\"nested-menu-item\" [ngClass]=\"{'action-loading': isActionLoading(nestedItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"nested-menu-link is-action\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"onActionItemClick(nestedItem, $event)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(nestedItem.label, activeLang(), 'nested') ? (nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if(isActionLoading(nestedItem)){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"nested-label\"><i class=\"pi pi-spin pi-spinner\"></i> {{ nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"nested-label\">{{ nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"nested-menu-item\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"{'active': isActiveRoute(nestedItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a [routerLink]=\"nestedItem.routerLink\" \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"nested-menu-link\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(nestedItem.label, activeLang(), 'nested') ? (nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"nested-label\">{{ nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t </ul>\r\n\t\t\t\t\t\t\t\t\t }\r\n\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\t\r\n</div>\r\n", dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i8.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }] }); }
306
306
  }
307
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ExpandableMenuComponent, decorators: [{
307
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ExpandableMenuComponent, decorators: [{
308
308
  type: Component,
309
309
  args: [{ standalone: true, selector: 'app-expandable-menu', imports: [RouterLink, NgClass, TooltipModule], providers: [TranslateJsonPipe], template: "<div class=\"new-layout-sidebar\" >\r\n\t<!-- Main sidebar (first level) -->\r\n\t<div class=\"main-sidebar\" style=\"position: relative;\">\r\n\t\t<div class=\"main-sidebar-content\">\r\n\t\t\t<ul class=\"main-menu\">\r\n\t\t\t\t@for(item of getMenuItems(); track item; let i = $index){\r\n\t\t\t\t\t@if(!item.separator){\r\n\t\t\t\t\t\t<li\r\n\t\t\t\t\t\t[ngClass]=\"{'active': isActiveRoute(item) || isHaveSelectedChildItem(item)}\"\r\n\t\t\t\t\t\t(click)=\"selectMainItem(i, item)\"\r\n\t\t\t\t\t\t[pTooltip]=\"(item.label && activeLang() ? item.label[activeLang()!] || '' : '')\"\r\n\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t<div class=\"main-menu-item\">\r\n\t\t\t\t\t\t\t<i [ngClass]=\"item.icon\" class=\"menu-icon\"></i>\r\n\t\t\t\t\t\t\t<!-- <small class=\"menu-label\">{{ item.label && activeLang() ? item.label[activeLang()!] || '' : '' }}</small> -->\r\n\t\t\t\t\t\t</div>\r\n\t\t\t\t\t</li>\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t</ul>\r\n\t\t</div>\r\n\t</div>\r\n\t\t @if(selectedMainMenuItem && selectedMainMenuItem.items && selectedMainMenuItem.items.length > 0){\r\n\r\n\t\t\t <div class=\"sidebar-toggle-container\">\r\n\t\t\t\t <button class=\"sidebar-circle-toggle-btn\" (click)=\"toggleSidebar()\">\r\n\t\t\t\t\t <i class=\"pi\" [ngClass]=\"sidebarExpanded ? 'pi-angle-left' : 'pi-angle-right'\"></i>\r\n\t\t\t\t </button>\r\n\t\t\t </div>\r\n\t\t }\r\n\r\n\t<!-- Secondary sidebar (second level) -->\r\n\t<div class=\"secondary-sidebar\" [ngClass]=\"{'expanded': sidebarExpanded}\">\r\n\t\t<div class=\"secondary-content-wrapper\" style=\"position: relative;\">\r\n\t\t\t<!-- Secondary sidebar content -->\r\n\t\t\t<div class=\"secondary-sidebar-content\">\r\n\t\t\t\t@if(selectedMainMenuItem){\r\n\t\t\t\t\t<ul class=\"secondary-menu\">\r\n\t\t\t\t\t\t@for(subItem of selectedMainMenuItem.items; track subItem; let i = $index){\r\n\t\t\t\t\t\t\t\t<!-- Action menu item -->\r\n\t\t\t\t\t\t\t\t@if(subItem.action) {\r\n\t\t\t\t\t\t\t\t\t<li class=\"secondary-menu-item\" [ngClass]=\"{'action-loading': isActionLoading(subItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t<a class=\"secondary-menu-link is-action\"\r\n\t\t\t\t\t\t\t\t\t\t\t(click)=\"onActionItemClick(subItem, $event)\"\r\n\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(subItem.label, activeLang(), 'secondary') ? (subItem.label && activeLang() ? subItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t@if(isActionLoading(subItem)){\r\n\t\t\t\t\t\t\t\t\t\t\t\t<i class=\"submenu-icon pi pi-spin pi-spinner\"></i>\r\n\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<i [ngClass]=\"subItem.icon\" class=\"submenu-icon\"></i>\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"submenu-label\">{{ subItem.label && activeLang() ? subItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t<!-- Regular menu item -->\r\n\t\t\t\t\t\t\t\t<li class=\"secondary-menu-item\" [ngClass]=\"{'active': isActiveRoute(subItem)}\">\r\n\t\t\t\t\t\t\t\t\t<a [routerLink]=\"subItem.routerLink\" \r\n\t\t\t\t\t\t\t\t\t\tclass=\"secondary-menu-link\"\r\n\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(subItem.label, activeLang(), 'secondary') ? (subItem.label && activeLang() ? subItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t<i [ngClass]=\"subItem.icon\" class=\"submenu-icon\"></i>\r\n\t\t\t\t\t\t\t\t\t\t<span class=\"submenu-label\">{{ subItem.label && activeLang() ? subItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t<!-- Always render submenu if it exists -->\r\n\t\t\t\t\t\t\t\t\t @if(subItem.items && subItem.items.length > 0){\r\n\t\t\t\t\t\t\t\t\t\t <ul class=\"tertiary-menu always-open\">\r\n\t\t\t\t\t\t\t\t\t\t\t@for(childItem of subItem.items; track childItem; let i = $index){\r\n\t\t\t\t\t\t\t\t\t\t\t\t<!-- Action item at tertiary level -->\r\n\t\t\t\t\t\t\t\t\t\t\t\t@if(childItem.action) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<li class=\"tertiary-menu-item\" [ngClass]=\"{'action-loading': isActionLoading(childItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"tertiary-menu-link is-action\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"onActionItemClick(childItem, $event)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(childItem.label, activeLang(), 'tertiary') ? (childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if(isActionLoading(childItem)){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"tertiary-label\"><i class=\"pi pi-spin pi-spinner\"></i> {{ childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"tertiary-label\">{{ childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t<li class=\"tertiary-menu-item\" [ngClass]=\"{'active': isActiveRoute(childItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<a [routerLink]=\"childItem.routerLink\" \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"tertiary-menu-link\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(childItem.label, activeLang(), 'tertiary') ? (childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"tertiary-label\">{{ childItem.label && activeLang() ? childItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<!-- Always render deeper levels if they exist, also visible by default -->\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t@if(childItem.items && childItem.items.length > 0){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<ul class=\"nested-menu always-open\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@for(nestedItem of childItem.items; track nestedItem; let i = $index){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if(nestedItem.action) {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li class=\"nested-menu-item\" [ngClass]=\"{'action-loading': isActionLoading(nestedItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"nested-menu-link is-action\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"onActionItemClick(nestedItem, $event)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(nestedItem.label, activeLang(), 'nested') ? (nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t@if(isActionLoading(nestedItem)){\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"nested-label\"><i class=\"pi pi-spin pi-spinner\"></i> {{ nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"nested-label\">{{ nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} @else {\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<li \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"nested-menu-item\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ngClass]=\"{'active': isActiveRoute(nestedItem)}\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a [routerLink]=\"nestedItem.routerLink\" \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"nested-menu-link\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[pTooltip]=\"!isMobile() && isTextTruncated(nestedItem.label, activeLang(), 'nested') ? (nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '') : ''\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttooltipPosition=\"right\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"nested-label\">{{ nestedItem.label && activeLang() ? nestedItem.label[activeLang()!] || '' : '' }}</span>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</ul>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t </ul>\r\n\t\t\t\t\t\t\t\t\t }\r\n\t\t\t\t\t\t\t\t</li>\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</ul>\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</div>\r\n\t\r\n</div>\r\n" }]
310
310
  }], ctorParameters: () => [{ type: i1.TranslateJsonPipe }, { type: i2.AppMenuService }, { type: i3.Router }, { type: i4.KeycloakService }, { type: i5.TranslocoService }, { type: i6.LayoutService }, { type: i7.HttpClient }], propDecorators: { onResize: [{
311
311
  type: HostListener,
312
312
  args: ['window:resize']
313
313
  }] } });
314
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5kYWJsZS1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvdGhlbWUvbGF5b3V0L2FwcC9leHBhbmRhYmxlTWVudS9leHBhbmRhYmxlLW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC90aGVtZS9sYXlvdXQvYXBwL2V4cGFuZGFibGVNZW51L2V4cGFuZGFibGUtbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQTZCLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFVLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXBFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUloRCxPQUFPLEVBQWdCLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFMUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7QUFZcEQsTUFBTSxPQUFPLHVCQUF1QjtJQVVuQyxJQUFJLGVBQWU7UUFDbEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQztJQUMxRCxDQUFDO0lBRUQsSUFBSSxlQUFlLENBQUMsS0FBYztRQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFrQ0QsWUFDUyxpQkFBb0MsRUFDcEMsV0FBMkIsRUFDM0IsTUFBYyxF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LENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25DLENBQUM7WUFFRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRUQsYUFBYTtRQUNaLGdGQUFnRjtRQUNoRixJQUFJLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hILElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzlDLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM5QixDQUFDO0lBQ0YsQ0FBQzs4R0F6VlcsdUJBQXVCO2tHQUF2Qix1QkFBdUIsMEhBRnhCLENBQUMsaUJBQWlCLENBQUMsMEJDeEIvQixndVJBeUlBLDRDRG5IVyxVQUFVLG9PQUFFLE9BQU8sbUZBQUUsYUFBYTs7MkZBSWhDLHVCQUF1QjtrQkFQbkMsU0FBUztpQ0FDRyxJQUFJLFlBQ04scUJBQXFCLFdBQ3RCLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsYUFFbEMsQ0FBQyxpQkFBaUIsQ0FBQzswUEFpTzlCLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIE9uSW5pdCwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIsIFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XHJcblxyXG5pbXBvcnQgeyBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSAnQG5nbmVhdC90cmFuc2xvY28nO1xyXG5pbXBvcnQgeyBLZXljbG9ha1NlcnZpY2UgfSBmcm9tICdrZXljbG9hay1hbmd1bGFyJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmaWx0ZXIgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IGJyaWRnZSB9IGZyb20gJ2FyaWwvYm9vdC9icmlkZ2UnO1xyXG5pbXBvcnQgeyBQbHVnaW5NZW51SXRlbSB9IGZyb20gJ2FyaWwvYm9vdC9jb25maWcvYXBwcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUpzb25QaXBlIH0gZnJvbSAnYXJpbC91dGlsL3BpcGVzJztcclxuXHJcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2FwcC5sYXlvdXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hcHAubWVudS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0c2VsZWN0b3I6ICdhcHAtZXhwYW5kYWJsZS1tZW51JyxcclxuXHRpbXBvcnRzOiBbUm91dGVyTGluaywgTmdDbGFzcywgVG9vbHRpcE1vZHVsZV0sXHJcblx0dGVtcGxhdGVVcmw6ICdleHBhbmRhYmxlLW1lbnUuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHByb3ZpZGVyczogW1RyYW5zbGF0ZUpzb25QaXBlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXhwYW5kYWJsZU1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblx0YWN0aXZlTGFuZzogU2lnbmFsPHN0cmluZz47XHJcblx0b3ZlcmxheU1lbnVPcGVuU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcclxuXHRyb3V0ZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xyXG5cdHVzZXJuYW1lOiBzdHJpbmc7XHJcblxyXG5cdGNhY2hlZE1lbnVJdGVtczogUGx1Z2luTWVudUl0ZW1bXSA9IFtdO1xyXG5cclxuXHRzZWxlY3RlZE1haW5NZW51SXRlbTogUGx1Z2luTWVudUl0ZW0gfCBudWxsID0gbnVsbDtcclxuXHJcblx0Z2V0IHNpZGViYXJFeHBhbmRlZCgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkO1xyXG5cdH1cclxuXHJcblx0c2V0IHNpZGViYXJFeHBhbmRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG5cdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnNldFNlY29uZGFyeVNpZGViYXJFeHBhbmRlZCh2YWx1ZSk7XHJcblx0fVxyXG5cclxuXHR0b29sdGlwVGV4dCA9IHtcclxuXHRcdHRvZ2dsZUJ1dHRvbjoge1xyXG5cdFx0XHRleHBhbmRlZDoge1xyXG5cdFx0XHRcdHRyOiAnTWVuw7x5w7wgR2l6bGUnLFxyXG5cdFx0XHRcdGVuOiAnSGlkZSBNZW51J1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRjb2xsYXBzZWQ6IHtcclxuXHRcdFx0XHR0cjogJ01lbsO8ecO8IEfDtnN0ZXInLFxyXG5cdFx0XHRcdGVuOiAnU2hvdyBNZW51J1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0bG9ja0J1dHRvbjoge1xyXG5cdFx0XHRsb2NrZWQ6IHtcclxuXHRcdFx0XHR0cjogJ090b21hdGlrIEthcGFubWF5xLEgQcOnJyxcclxuXHRcdFx0XHRlbjogJ0VuYWJsZSBBdXRvLUNsb3NlJ1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR1bmxvY2tlZDoge1xyXG5cdFx0XHRcdHRyOiAnTWVuw7x5w7wgS2lsaXRsZScsXHJcblx0XHRcdFx0ZW46ICdMb2NrIE1lbnUnXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHRwcml2YXRlIHJlYWRvbmx5IE1BWF9MRU5HVEggPSB7XHJcblx0XHRtYWluOiA4LFxyXG5cdFx0c2Vjb25kYXJ5OiAyMCxcclxuXHRcdHRlcnRpYXJ5OiAyMFxyXG5cdH07XHJcblxyXG5cdGFjdGlvbkxvYWRpbmdJdGVtcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG5cdHByaXZhdGUgYWN0aW9uU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIHRyYW5zbGF0ZUpzb25QaXBlOiBUcmFuc2xhdGVKc29uUGlwZSxcclxuXHRcdHByaXZhdGUgbWVudVNlcnZpY2U6IEFwcE1lbnVTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuXHRcdHByaXZhdGUga2V5Y2xvYWs6IEtleWNsb2FrU2VydmljZSxcclxuXHRcdHByaXZhdGUgdHJhbnNsb2NvU2VydmljZTogVHJhbnNsb2NvU2VydmljZSxcclxuXHRcdHByaXZhdGUgbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcclxuXHRcdHByaXZhdGUgaHR0cDogSHR0cENsaWVudFxyXG5cdCkge1xyXG5cdFx0dGhpcy5hY3RpdmVMYW5nID0gdG9TaWduYWwodGhpcy50cmFuc2xvY29TZXJ2aWNlLmxhbmdDaGFuZ2VzJCwgeyBpbml0aWFsVmFsdWU6ICd0cicgfSk7XHJcblx0XHR0aGlzLnVzZXJuYW1lID0gdGhpcy5rZXljbG9hay5nZXRVc2VybmFtZSgpLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpO1xyXG5cdH1cclxuXHJcblx0Ly8gR2V0dGVyIGZvciBsYXlvdXQgc2VydmljZSBzdGF0ZXNcclxuXHRnZXQgc2VsZWN0ZWRNYWluSXRlbSgpOiBudW1iZXIgfCBudWxsIHtcclxuXHRcdHJldHVybiB0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc2VsZWN0ZWRNYWluSXRlbTtcclxuXHR9XHJcblxyXG5cdGdldCBzZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5sYXlvdXRTZXJ2aWNlLnN0YXRlLnNlY29uZGFyeVNpZGViYXJFeHBhbmRlZDtcclxuXHR9XHJcblxyXG5cdC8vIENoZWNrIGlmIHRleHQgaXMgdHJ1bmNhdGVkIGFuZCBuZWVkcyB0b29sdGlwXHJcblx0aXNUZXh0VHJ1bmNhdGVkKFxyXG5cdFx0bGFiZWw6IGFueSxcclxuXHRcdGxhbmc6IHN0cmluZyB8IG51bGwsXHJcblx0XHRtZW51VHlwZTogJ21haW4nIHwgJ3NlY29uZGFyeScgfCAndGVydGlhcnknIHwgJ25lc3RlZCcgPSAnc2Vjb25kYXJ5J1xyXG5cdCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFsYWJlbCB8fCAhbGFuZyB8fCAhbGFiZWxbbGFuZ10pIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRjb25zdCB0ZXh0ID0gbGFiZWxbbGFuZ107XHJcblx0XHRjb25zdCB0ZXh0TGVuZ3RoID0gdGV4dC5sZW5ndGg7XHJcblx0XHRjb25zdCBtYXhMZW5ndGggPSBtZW51VHlwZSA9PT0gJ25lc3RlZCcgPyB0aGlzLk1BWF9MRU5HVEgudGVydGlhcnkgOiB0aGlzLk1BWF9MRU5HVEhbbWVudVR5cGVdO1xyXG5cdFx0cmV0dXJuIHRleHRMZW5ndGggPiBtYXhMZW5ndGg7XHJcblx0fVxyXG5cclxuXHQvLyBSZWN1cnNpdmVseSBjaGVjayBpZiBhIG1lbnUgaXRlbSBvciBpdHMgY2hpbGRyZW4gbWF0Y2ggdGhlIGN1cnJlbnQgcm91dGVcclxuXHRpc0FjdGl2ZVJvdXRlKG1lbnVJdGVtOiBQbHVnaW5NZW51SXRlbSk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFtZW51SXRlbSB8fCAhbWVudUl0ZW0ucm91dGVyTGluaykgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdC8vIEdldCBjdXJyZW50IFVSTCBwYXRoIGFmdGVyIHRoZSBoYXNoXHJcblx0XHRjb25zdCBjdXJyZW50VXJsID0gdGhpcy5yb3V0ZXIudXJsO1xyXG5cdFx0Y29uc3QgaGFzaFVybCA9IGN1cnJlbnRVcmwuaW5kZXhPZignIycpID4gLTEgPyBjdXJyZW50VXJsLnNwbGl0KCcjJylbMV0gOiBjdXJyZW50VXJsO1xyXG5cclxuXHRcdC8vIENoZWNrIGZvciBleGFjdCBtYXRjaCBmaXJzdFxyXG5cdFx0aWYgKGhhc2hVcmwgPT09IG1lbnVJdGVtLnJvdXRlckxpbmsgfHwgaGFzaFVybCA9PT0gJy8nICsgbWVudUl0ZW0ucm91dGVyTGluaykge1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBDaGVjayBpZiBjdXJyZW50IFVSTCBzdGFydHMgd2l0aCB0aGUgcm91dGVyTGluayAoaGFuZGxlcyBjaGlsZCByb3V0ZXMpXHJcblx0XHRpZiAoXHJcblx0XHRcdG1lbnVJdGVtLnJvdXRlckxpbmsgIT09ICcvJyAmJlxyXG5cdFx0XHQoaGFzaFVybC5zdGFydHNXaXRoKG1lbnVJdGVtLnJvdXRlckxpbmsgKyAnLycpIHx8IGhhc2hVcmwuc3RhcnRzV2l0aCgnLycgKyBtZW51SXRlbS5yb3V0ZXJMaW5rICsgJy8nKSlcclxuXHRcdCkge1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBDaGVjayBjaGlsZCBpdGVtcyBpZiB0aGV5IGV4aXN0XHJcblx0XHRpZiAobWVudUl0ZW0uaXRlbXMgJiYgbWVudUl0ZW0uaXRlbXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRyZXR1cm4gbWVudUl0ZW0uaXRlbXMuc29tZSgoY2hpbGRJdGVtKSA9PiB0aGlzLmlzQWN0aXZlUm91dGUoY2hpbGRJdGVtKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0bmdPbkluaXQoKSB7XHJcblx0XHR0aGlzLnVwZGF0ZU1lbnVJdGVtcygpO1xyXG5cdFx0dGhpcy5pbml0aWFsaXplTWVudSgpO1xyXG5cdFx0dGhpcy51cGRhdGVBY3RpdmVNZW51RnJvbUN1cnJlbnRSb3V0ZSgpO1xyXG5cclxuXHRcdC8vIFN1YnNjcmliZSB0byByb3V0ZSBjaGFuZ2VzIHRvIGhhbmRsZSBzZWNvbmRhcnkgc2lkZWJhciBjbG9zaW5nXHJcblx0XHR0aGlzLnJvdXRlclN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLmV2ZW50c1xyXG5cdFx0XHQucGlwZShmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKVxyXG5cdFx0XHQuc3Vic2NyaWJlKCgpID0+IHtcclxuXHRcdFx0XHQvLyBVcGRhdGUgYWN0aXZlIG1lbnUgYmFzZWQgb24gdGhlIG5ldyByb3V0ZVxyXG5cdFx0XHRcdHRoaXMudXBkYXRlQWN0aXZlTWVudUZyb21DdXJyZW50Um91dGUoKTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0Ly8gU3Vic2NyaWJlIHRvIG92ZXJsYXkgbWVudSBvcGVuIG5vdGlmaWNhdGlvbnNcclxuXHRcdHRoaXMub3ZlcmxheU1lbnVPcGVuU3Vic2NyaXB0aW9uID0gdGhpcy5sYXlvdXRTZXJ2aWNlLm92ZXJsYXlPcGVuJC5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cdFx0XHRpZiAodGhpcy5sYXlvdXRTZXJ2aWNlLnN0YXRlLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUpIHtcclxuXHRcdFx0XHR0aGlzLmxheW91dFNlcnZpY2Uuc2V0U2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkKHRydWUpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCkge1xyXG5cdFx0aWYgKHRoaXMub3ZlcmxheU1lbnVPcGVuU3Vic2NyaXB0aW9uKSB7XHJcblx0XHRcdHRoaXMub3ZlcmxheU1lbnVPcGVuU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMucm91dGVyU3Vic2NyaXB0aW9uKSB7XHJcblx0XHRcdHRoaXMucm91dGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5hY3Rpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcblx0fVxyXG5cclxuXHQvLyBJbml0aWFsaXplIHRoZSBtZW51IHdpdGggcHJvcGVyIGFjdGl2ZSBzdGF0ZVxyXG5cdGluaXRpYWxpemVNZW51KCkge1xyXG5cdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnNldFNlbGVjdGVkTWFpbkl0ZW0obnVsbCk7XHJcblx0XHR0aGlzLnNlbGVjdGVkTWFpbk1lbnVJdGVtID0gbnVsbDtcclxuXHRcdHRoaXMubGF5b3V0U2VydmljZS5zZXRTZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQoZmFsc2UpO1xyXG5cdFx0dGhpcy51cGRhdGVNZW51SXRlbXMoKTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZU1lbnVGcm9tUm9vdEtleShpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcblx0XHR0aGlzLnVwZGF0ZU1lbnVJdGVtcygpO1xyXG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gdGhpcy5nZXRNZW51SXRlbXMoKTtcclxuXHJcblx0XHRpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IG1lbnVJdGVtcy5sZW5ndGgpIHtcclxuXHRcdFx0Y29uc3QgaXRlbSA9IG1lbnVJdGVtc1tpbmRleF07XHJcblx0XHRcdGlmICghaXRlbS5zZXBhcmF0b3IpIHtcclxuXHRcdFx0XHR0aGlzLmxheW91dFNlcnZpY2Uuc2V0U2VsZWN0ZWRNYWluSXRlbShpbmRleCk7XHJcblx0XHRcdFx0dGhpcy5zZWxlY3RlZE1haW5NZW51SXRlbSA9IGl0ZW07XHJcblx0XHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnNldFNlY29uZGFyeVNpZGViYXJFeHBhbmRlZCh0cnVlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0dXBkYXRlTWVudUl0ZW1zKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5jYWNoZWRNZW51SXRlbXMgPSBicmlkZ2UuaXNIb3N0TW9kZSgpID8gYnJpZGdlLmhvc3RNZW51SXRlbXMoKSA6IHRoaXMubWVudVNlcnZpY2UubWVudUl0ZW1zKCk7XHJcblx0fVxyXG5cclxuXHRnZXRNZW51SXRlbXMoKTogUGx1Z2luTWVudUl0ZW1bXSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYWNoZWRNZW51SXRlbXM7XHJcblx0fVxyXG5cclxuXHRzZWxlY3RNYWluSXRlbShpbmRleDogbnVtYmVyLCBpdGVtOiBQbHVnaW5NZW51SXRlbSk6IHZvaWQge1xyXG5cdFx0Ly8gSGFuZGxlIGFjdGlvbiBpdGVtcyBhdCB0b3AgbGV2ZWxcclxuXHRcdGlmIChpdGVtLmFjdGlvbiAmJiAoIWl0ZW0uaXRlbXMgfHwgaXRlbS5pdGVtcy5sZW5ndGggPT09IDApKSB7XHJcblx0XHRcdHRoaXMub25BY3Rpb25JdGVtQ2xpY2soaXRlbSk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaXRlbS5yb3V0ZXJMaW5rICYmICghaXRlbS5pdGVtcyB8fCBpdGVtLml0ZW1zLmxlbmd0aCA9PT0gMCkpIHtcclxuXHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnNldFNlY29uZGFyeVNpZGViYXJFeHBhbmRlZChmYWxzZSk7XHJcblx0XHRcdHRoaXMubGF5b3V0U2VydmljZS5zZXRTZWxlY3RlZE1haW5JdGVtKGluZGV4KTtcclxuXHRcdFx0dGhpcy5zZWxlY3RlZE1haW5NZW51SXRlbSA9IGl0ZW07XHJcblx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtpdGVtLnJvdXRlckxpbmtdKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEhhbmRsZSByZWd1bGFyIG1lbnUgaXRlbXMgd2l0aCBzdWJtZW51XHJcblx0XHRpZiAodGhpcy5zZWxlY3RlZE1haW5JdGVtID09PSBpbmRleCkge1xyXG5cdFx0XHR0aGlzLmxheW91dFNlcnZpY2UudG9nZ2xlU2Vjb25kYXJ5U2lkZWJhcigpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnNldFNlbGVjdGVkTWFpbkl0ZW0oaW5kZXgpO1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkTWFpbk1lbnVJdGVtID0gaXRlbTtcclxuXHJcblx0XHRcdGlmIChpdGVtLml0ZW1zICYmIGl0ZW0uaXRlbXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdHRoaXMubGF5b3V0U2VydmljZS5zZXRTZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQodHJ1ZSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnNldFNlY29uZGFyeVNpZGViYXJFeHBhbmRlZChmYWxzZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBGb3IgbW9iaWxlIGRldmljZXMsIGVuc3VyZSB0aGUgbWVudSBzdGF5cyBvcGVuXHJcblx0XHRpZiAodGhpcy5pc01vYmlsZSgpKSB7XHJcblx0XHRcdHRoaXMubGF5b3V0U2VydmljZS5zdGF0ZS5zdGF0aWNNZW51TW9iaWxlQWN0aXZlID0gdHJ1ZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHRvZ2dsZVNlY29uZGFyeVNpZGViYXIoKTogdm9pZCB7XHJcblx0XHR0aGlzLmxheW91dFNlcnZpY2UudG9nZ2xlU2Vjb25kYXJ5U2lkZWJhcigpO1xyXG5cdH1cclxuXHJcblx0aXNNb2JpbGUoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5sYXlvdXRTZXJ2aWNlLmlzTW9iaWxlKCk7XHJcblx0fVxyXG5cclxuXHQvLyBMaXN0ZW4gZm9yIHJlc2l6ZSBldmVudHMgLSBub3cgaGFuZGxlZCBtb3JlIGVmZmljaWVudGx5IGJ5IGxheW91dCBzZXJ2aWNlXHJcblx0QEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXHJcblx0b25SZXNpemUoKSB7XHJcblx0XHRpZiAoIXRoaXMuaXNNb2JpbGUoKSAmJiB0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSkge1xyXG5cdFx0XHR0aGlzLmxheW91dFNlcnZpY2UuY2xvc2VNb2JpbGVNZW51KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR1cGRhdGVBY3RpdmVNZW51RnJvbUN1cnJlbnRSb3V0ZSgpOiB2b2lkIHtcclxuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IHRoaXMuZ2V0TWVudUl0ZW1zKCk7XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBtZW51SXRlbXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbWVudUl0ZW0gPSBtZW51SXRlbXNbaV07XHJcblx0XHRcdGlmICh0aGlzLmlzQWN0aXZlUm91dGUobWVudUl0ZW0pKSB7XHJcblx0XHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnNldFNlbGVjdGVkTWFpbkl0ZW0oaSk7XHJcblx0XHRcdFx0dGhpcy5zZWxlY3RlZE1haW5NZW51SXRlbSA9IG1lbnVJdGVtO1xyXG5cclxuXHRcdFx0XHRpZiAobWVudUl0ZW0uaXRlbXMgJiYgbWVudUl0ZW0uaXRlbXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0aWYgKCF0aGlzLmlzTW9iaWxlKCkgJiYgIXRoaXMuc2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkICYmICF0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxheW91dFNlcnZpY2Uuc2V0U2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkKHRydWUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLmxheW91dFNlcnZpY2Uuc2V0U2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkKGZhbHNlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0hhdmVTZWxlY3RlZENoaWxkSXRlbShpdGVtOiBQbHVnaW5NZW51SXRlbSk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFpdGVtIHx8ICFpdGVtLml0ZW1zIHx8IGl0ZW0uaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjaGlsZCBvZiBpdGVtLml0ZW1zKSB7XHJcblx0XHRcdGlmICh0aGlzLmlzQWN0aXZlUm91dGUoY2hpbGQpKSB7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChjaGlsZC5pdGVtcyAmJiBjaGlsZC5pdGVtcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMuaXNIYXZlU2VsZWN0ZWRDaGlsZEl0ZW0oY2hpbGQpKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRnZXRMb2NhbFRleHQodGV4dDogYW55KTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnRyYW5zbGF0ZUpzb25QaXBlLnRyYW5zZm9ybSh0ZXh0KTtcclxuXHR9XHJcblxyXG5cdGdldEFjdGlvbkl0ZW1LZXkoaXRlbTogUGx1Z2luTWVudUl0ZW0pOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIGl0ZW0uYWN0aW9uPy51cmwgKyAnfCcgKyBpdGVtLmFjdGlvbj8uc3VjY2Vzc1JvdXRlO1xyXG5cdH1cclxuXHJcblx0aXNBY3Rpb25Mb2FkaW5nKGl0ZW06IFBsdWdpbk1lbnVJdGVtKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5hY3Rpb25Mb2FkaW5nSXRlbXMuaGFzKHRoaXMuZ2V0QWN0aW9uSXRlbUtleShpdGVtKSk7XHJcblx0fVxyXG5cclxuXHRvbkFjdGlvbkl0ZW1DbGljayhpdGVtOiBQbHVnaW5NZW51SXRlbSwgZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xyXG5cdFx0aWYgKGV2ZW50KSB7XHJcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghaXRlbS5hY3Rpb24gfHwgdGhpcy5pc0FjdGlvbkxvYWRpbmcoaXRlbSkpIHJldHVybjtcclxuXHJcblx0XHQvLyBDYW5jZWwgYW55IHByZXZpb3VzIGFjdGlvbiByZXF1ZXN0XHJcblx0XHR0aGlzLmFjdGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuXHJcblx0XHRjb25zdCBrZXkgPSB0aGlzLmdldEFjdGlvbkl0ZW1LZXkoaXRlbSk7XHJcblx0XHR0aGlzLmFjdGlvbkxvYWRpbmdJdGVtcy5hZGQoa2V5KTtcclxuXHJcblx0XHRjb25zdCByZXF1ZXN0JCA9XHJcblx0XHRcdGl0ZW0uYWN0aW9uLm1ldGhvZCA9PT0gJ0dFVCdcclxuXHRcdFx0XHQ/IHRoaXMuaHR0cC5nZXQoaXRlbS5hY3Rpb24udXJsKVxyXG5cdFx0XHRcdDogdGhpcy5odHRwLnBvc3QoaXRlbS5hY3Rpb24udXJsLCBpdGVtLmFjdGlvbi5ib2R5ID8/IHt9KTtcclxuXHJcblx0XHR0aGlzLmFjdGlvblN1YnNjcmlwdGlvbiA9IHJlcXVlc3QkLnN1YnNjcmliZSh7XHJcblx0XHRcdG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XHJcblx0XHRcdFx0dGhpcy5hY3Rpb25Mb2FkaW5nSXRlbXMuZGVsZXRlKGtleSk7XHJcblx0XHRcdFx0Y29uc3Qgcm91dGUgPSB0aGlzLmJ1aWxkU3VjY2Vzc1JvdXRlKGl0ZW0uYWN0aW9uISwgcmVzcG9uc2UpO1xyXG5cdFx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtyb3V0ZV0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnJvcjogKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuYWN0aW9uTG9hZGluZ0l0ZW1zLmRlbGV0ZShrZXkpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYnVpbGRTdWNjZXNzUm91dGUoYWN0aW9uOiBQbHVnaW5NZW51SXRlbVsnYWN0aW9uJ10sIHJlc3BvbnNlOiBhbnkpOiBzdHJpbmcge1xyXG5cdFx0aWYgKCFhY3Rpb24/LnN1Y2Nlc3NSb3V0ZVJlc3BvbnNlS2V5KSByZXR1cm4gYWN0aW9uPy5zdWNjZXNzUm91dGUgPz8gJy8nO1xyXG5cclxuXHRcdGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUJ5UGF0aChyZXNwb25zZSwgYWN0aW9uLnN1Y2Nlc3NSb3V0ZVJlc3BvbnNlS2V5KTtcclxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gYWN0aW9uLnN1Y2Nlc3NSb3V0ZTtcclxuXHJcblx0XHRyZXR1cm4gYCR7YWN0aW9uLnN1Y2Nlc3NSb3V0ZX0vJHt2YWx1ZX1gO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRWYWx1ZUJ5UGF0aChvYmo6IGFueSwgcGF0aDogc3RyaW5nKTogYW55IHtcclxuXHRcdGlmICghb2JqIHx8ICFwYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChjdXJyZW50LCBrZXkpID0+IHtcclxuXHRcdFx0aWYgKGN1cnJlbnQgPT09IHVuZGVmaW5lZCB8fCBjdXJyZW50ID09PSBudWxsKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdFx0Ly8gSGFuZGxlIGFycmF5IGFjY2VzcyBsaWtlICdyZXN1bHRbMF0nXHJcblx0XHRcdGNvbnN0IGFycmF5TWF0Y2ggPSBrZXkubWF0Y2goL14oLis/KVxcWyhcXGQrKVxcXSQvKTtcclxuXHRcdFx0aWYgKGFycmF5TWF0Y2gpIHtcclxuXHRcdFx0XHRjb25zdCBhcnJheUtleSA9IGFycmF5TWF0Y2hbMV07XHJcblx0XHRcdFx0Y29uc3QgaW5kZXggPSBwYXJzZUludChhcnJheU1hdGNoWzJdLCAxMCk7XHJcblx0XHRcdFx0cmV0dXJuIGN1cnJlbnRbYXJyYXlLZXldPy5baW5kZXhdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gY3VycmVudFtrZXldO1xyXG5cdFx0fSwgb2JqKTtcclxuXHR9XHJcblxyXG5cdHRvZ2dsZVNpZGViYXIoKSB7XHJcblx0XHQvLyBFxJ9lciBzZcOnaWxpIGJpciBhbmEgbWVuw7wgw7bEn2VzaSB2YXJzYSB2ZSBhbHQgbWVuw7xsZXJpIHZhcnNhIHRvZ2dsZSB5YXBhYmlsaXJpelxyXG5cdFx0aWYgKHRoaXMuc2VsZWN0ZWRNYWluTWVudUl0ZW0gJiYgdGhpcy5zZWxlY3RlZE1haW5NZW51SXRlbS5pdGVtcyAmJiB0aGlzLnNlbGVjdGVkTWFpbk1lbnVJdGVtLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0dGhpcy5zaWRlYmFyRXhwYW5kZWQgPSAhdGhpcy5zaWRlYmFyRXhwYW5kZWQ7XHJcblx0XHR9IGVsc2UgaWYgKHRoaXMuc2lkZWJhckV4cGFuZGVkKSB7XHJcblx0XHRcdHRoaXMuc2lkZWJhckV4cGFuZGVkID0gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJuZXctbGF5b3V0LXNpZGViYXJcIiA+XHJcblx0PCEtLSBNYWluIHNpZGViYXIgKGZpcnN0IGxldmVsKSAtLT5cclxuXHQ8ZGl2IGNsYXNzPVwibWFpbi1zaWRlYmFyXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcblx0XHQ8ZGl2IGNsYXNzPVwibWFpbi1zaWRlYmFyLWNvbnRlbnRcIj5cclxuXHRcdFx0PHVsIGNsYXNzPVwibWFpbi1tZW51XCI+XHJcblx0XHRcdFx0QGZvcihpdGVtIG9mIGdldE1lbnVJdGVtcygpOyB0cmFjayBpdGVtOyBsZXQgaSA9ICRpbmRleCl7XHJcblx0XHRcdFx0XHRAaWYoIWl0ZW0uc2VwYXJhdG9yKXtcclxuXHRcdFx0XHRcdFx0PGxpXHJcblx0XHRcdFx0XHRcdFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNBY3RpdmVSb3V0ZShpdGVtKSB8fCBpc0hhdmVTZWxlY3RlZENoaWxkSXRlbShpdGVtKX1cIlxyXG5cdFx0XHRcdFx0XHQoY2xpY2spPVwic2VsZWN0TWFpbkl0ZW0oaSwgaXRlbSlcIlxyXG5cdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiKGl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gaXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnKVwiXHJcblx0XHRcdFx0XHRcdHRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJtYWluLW1lbnUtaXRlbVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxpIFtuZ0NsYXNzXT1cIml0ZW0uaWNvblwiIGNsYXNzPVwibWVudS1pY29uXCI+PC9pPlxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gPHNtYWxsIGNsYXNzPVwibWVudS1sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gaXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnIH19PC9zbWFsbD4gLS0+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdDwvdWw+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L2Rpdj5cclxuXHRcdCBAaWYoc2VsZWN0ZWRNYWluTWVudUl0ZW0gJiYgc2VsZWN0ZWRNYWluTWVudUl0ZW0uaXRlbXMgJiYgc2VsZWN0ZWRNYWluTWVudUl0ZW0uaXRlbXMubGVuZ3RoID4gMCl7XHJcblxyXG5cdFx0XHQgPGRpdiBjbGFzcz1cInNpZGViYXItdG9nZ2xlLWNvbnRhaW5lclwiPlxyXG5cdFx0XHRcdCA8YnV0dG9uIGNsYXNzPVwic2lkZWJhci1jaXJjbGUtdG9nZ2xlLWJ0blwiIChjbGljayk9XCJ0b2dnbGVTaWRlYmFyKClcIj5cclxuXHRcdFx0XHRcdCA8aSBjbGFzcz1cInBpXCIgW25nQ2xhc3NdPVwic2lkZWJhckV4cGFuZGVkID8gJ3BpLWFuZ2xlLWxlZnQnIDogJ3BpLWFuZ2xlLXJpZ2h0J1wiPjwvaT5cclxuXHRcdFx0XHQgPC9idXR0b24+XHJcblx0XHRcdCA8L2Rpdj5cclxuXHRcdCB9XHJcblxyXG5cdDwhLS0gU2Vjb25kYXJ5IHNpZGViYXIgKHNlY29uZCBsZXZlbCkgLS0+XHJcblx0PGRpdiBjbGFzcz1cInNlY29uZGFyeS1zaWRlYmFyXCIgW25nQ2xhc3NdPVwieydleHBhbmRlZCc6IHNpZGViYXJFeHBhbmRlZH1cIj5cclxuXHRcdDxkaXYgY2xhc3M9XCJzZWNvbmRhcnktY29udGVudC13cmFwcGVyXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcblx0XHRcdDwhLS0gU2Vjb25kYXJ5IHNpZGViYXIgY29udGVudCAtLT5cclxuXHRcdFx0PGRpdiBjbGFzcz1cInNlY29uZGFyeS1zaWRlYmFyLWNvbnRlbnRcIj5cclxuXHRcdFx0XHRAaWYoc2VsZWN0ZWRNYWluTWVudUl0ZW0pe1xyXG5cdFx0XHRcdFx0PHVsIGNsYXNzPVwic2Vjb25kYXJ5LW1lbnVcIj5cclxuXHRcdFx0XHRcdFx0QGZvcihzdWJJdGVtIG9mIHNlbGVjdGVkTWFpbk1lbnVJdGVtLml0ZW1zOyB0cmFjayBzdWJJdGVtOyBsZXQgaSA9ICRpbmRleCl7XHJcblx0XHRcdFx0XHRcdFx0XHQ8IS0tIEFjdGlvbiBtZW51IGl0ZW0gLS0+XHJcblx0XHRcdFx0XHRcdFx0XHRAaWYoc3ViSXRlbS5hY3Rpb24pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0PGxpIGNsYXNzPVwic2Vjb25kYXJ5LW1lbnUtaXRlbVwiIFtuZ0NsYXNzXT1cInsnYWN0aW9uLWxvYWRpbmcnOiBpc0FjdGlvbkxvYWRpbmcoc3ViSXRlbSl9XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGEgY2xhc3M9XCJzZWNvbmRhcnktbWVudS1saW5rIGlzLWFjdGlvblwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoY2xpY2spPVwib25BY3Rpb25JdGVtQ2xpY2soc3ViSXRlbSwgJGV2ZW50KVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiIWlzTW9iaWxlKCkgJiYgaXNUZXh0VHJ1bmNhdGVkKHN1Ykl0ZW0ubGFiZWwsIGFjdGl2ZUxhbmcoKSwgJ3NlY29uZGFyeScpID8gKHN1Ykl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gc3ViSXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnKSA6ICcnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRAaWYoaXNBY3Rpb25Mb2FkaW5nKHN1Ykl0ZW0pKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGkgY2xhc3M9XCJzdWJtZW51LWljb24gcGkgcGktc3BpbiBwaS1zcGlubmVyXCI+PC9pPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBAZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpIFtuZ0NsYXNzXT1cInN1Ykl0ZW0uaWNvblwiIGNsYXNzPVwic3VibWVudS1pY29uXCI+PC9pPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdWJtZW51LWxhYmVsXCI+e3sgc3ViSXRlbS5sYWJlbCAmJiBhY3RpdmVMYW5nKCkgPyBzdWJJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycgfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9hPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdFx0XHRcdFx0fSBAZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHQ8IS0tIFJlZ3VsYXIgbWVudSBpdGVtIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGxpIGNsYXNzPVwic2Vjb25kYXJ5LW1lbnUtaXRlbVwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNBY3RpdmVSb3V0ZShzdWJJdGVtKX1cIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGEgW3JvdXRlckxpbmtdPVwic3ViSXRlbS5yb3V0ZXJMaW5rXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzZWNvbmRhcnktbWVudS1saW5rXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiIWlzTW9iaWxlKCkgJiYgaXNUZXh0VHJ1bmNhdGVkKHN1Ykl0ZW0ubGFiZWwsIGFjdGl2ZUxhbmcoKSwgJ3NlY29uZGFyeScpID8gKHN1Ykl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gc3ViSXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnKSA6ICcnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJyaWdodFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxpIFtuZ0NsYXNzXT1cInN1Ykl0ZW0uaWNvblwiIGNsYXNzPVwic3VibWVudS1pY29uXCI+PC9pPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3VibWVudS1sYWJlbFwiPnt7IHN1Ykl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gc3ViSXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2E+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwhLS0gQWx3YXlzIHJlbmRlciBzdWJtZW51IGlmIGl0IGV4aXN0cyAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0IEBpZihzdWJJdGVtLml0ZW1zICYmIHN1Ykl0ZW0uaXRlbXMubGVuZ3RoID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0IDx1bCBjbGFzcz1cInRlcnRpYXJ5LW1lbnUgYWx3YXlzLW9wZW5cIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdEBmb3IoY2hpbGRJdGVtIG9mIHN1Ykl0ZW0uaXRlbXM7IHRyYWNrIGNoaWxkSXRlbTsgbGV0IGkgPSAkaW5kZXgpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8IS0tIEFjdGlvbiBpdGVtIGF0IHRlcnRpYXJ5IGxldmVsIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRAaWYoY2hpbGRJdGVtLmFjdGlvbikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsaSBjbGFzcz1cInRlcnRpYXJ5LW1lbnUtaXRlbVwiIFtuZ0NsYXNzXT1cInsnYWN0aW9uLWxvYWRpbmcnOiBpc0FjdGlvbkxvYWRpbmcoY2hpbGRJdGVtKX1cIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxhIGNsYXNzPVwidGVydGlhcnktbWVudS1saW5rIGlzLWFjdGlvblwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChjbGljayk9XCJvbkFjdGlvbkl0ZW1DbGljayhjaGlsZEl0ZW0sICRldmVudClcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiIWlzTW9iaWxlKCkgJiYgaXNUZXh0VHJ1bmNhdGVkKGNoaWxkSXRlbS5sYWJlbCwgYWN0aXZlTGFuZygpLCAndGVydGlhcnknKSA/IChjaGlsZEl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gY2hpbGRJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycpIDogJydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJyaWdodFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRAaWYoaXNBY3Rpb25Mb2FkaW5nKGNoaWxkSXRlbSkpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwidGVydGlhcnktbGFiZWxcIj48aSBjbGFzcz1cInBpIHBpLXNwaW4gcGktc3Bpbm5lclwiPjwvaT4ge3sgY2hpbGRJdGVtLmxhYmVsICYmIGFjdGl2ZUxhbmcoKSA/IGNoaWxkSXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IEBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInRlcnRpYXJ5LWxhYmVsXCI+e3sgY2hpbGRJdGVtLmxhYmVsICYmIGFjdGl2ZUxhbmcoKSA/IGNoaWxkSXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2E+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBAZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsaSBjbGFzcz1cInRlcnRpYXJ5LW1lbnUtaXRlbVwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNBY3RpdmVSb3V0ZShjaGlsZEl0ZW0pfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxhIFtyb3V0ZXJMaW5rXT1cImNoaWxkSXRlbS5yb3V0ZXJMaW5rXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInRlcnRpYXJ5LW1lbnUtbGlua1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiIWlzTW9iaWxlKCkgJiYgaXNUZXh0VHJ1bmNhdGVkKGNoaWxkSXRlbS5sYWJlbCwgYWN0aXZlTGFuZygpLCAndGVydGlhcnknKSA/IChjaGlsZEl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gY2hpbGRJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycpIDogJydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwidGVydGlhcnktbGFiZWxcIj57eyBjaGlsZEl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gY2hpbGRJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycgfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9hPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwhLS0gQWx3YXlzIHJlbmRlciBkZWVwZXIgbGV2ZWxzIGlmIHRoZXkgZXhpc3QsIGFsc28gdmlzaWJsZSBieSBkZWZhdWx0IC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdEBpZihjaGlsZEl0ZW0uaXRlbXMgJiYgY2hpbGRJdGVtLml0ZW1zLmxlbmd0aCA+IDApe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHVsIGNsYXNzPVwibmVzdGVkLW1lbnUgYWx3YXlzLW9wZW5cIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0QGZvcihuZXN0ZWRJdGVtIG9mIGNoaWxkSXRlbS5pdGVtczsgdHJhY2sgbmVzdGVkSXRlbTsgbGV0IGkgPSAkaW5kZXgpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdEBpZihuZXN0ZWRJdGVtLmFjdGlvbikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxpIGNsYXNzPVwibmVzdGVkLW1lbnUtaXRlbVwiIFtuZ0NsYXNzXT1cInsnYWN0aW9uLWxvYWRpbmcnOiBpc0FjdGlvbkxvYWRpbmcobmVzdGVkSXRlbSl9XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxhIGNsYXNzPVwibmVzdGVkLW1lbnUtbGluayBpcy1hY3Rpb25cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChjbGljayk9XCJvbkFjdGlvbkl0ZW1DbGljayhuZXN0ZWRJdGVtLCAkZXZlbnQpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiIWlzTW9iaWxlKCkgJiYgaXNUZXh0VHJ1bmNhdGVkKG5lc3RlZEl0ZW0ubGFiZWwsIGFjdGl2ZUxhbmcoKSwgJ25lc3RlZCcpID8gKG5lc3RlZEl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gbmVzdGVkSXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnKSA6ICcnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJyaWdodFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdEBpZihpc0FjdGlvbkxvYWRpbmcobmVzdGVkSXRlbSkpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJuZXN0ZWQtbGFiZWxcIj48aSBjbGFzcz1cInBpIHBpLXNwaW4gcGktc3Bpbm5lclwiPjwvaT4ge3sgbmVzdGVkSXRlbS5sYWJlbCAmJiBhY3RpdmVMYW5nKCkgPyBuZXN0ZWRJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycgfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBAZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cIm5lc3RlZC1sYWJlbFwiPnt7IG5lc3RlZEl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gbmVzdGVkSXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9hPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IEBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGkgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cIm5lc3RlZC1tZW51LWl0ZW1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwieydhY3RpdmUnOiBpc0FjdGl2ZVJvdXRlKG5lc3RlZEl0ZW0pfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGEgW3JvdXRlckxpbmtdPVwibmVzdGVkSXRlbS5yb3V0ZXJMaW5rXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwibmVzdGVkLW1lbnUtbGlua1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtwVG9vbHRpcF09XCIhaXNNb2JpbGUoKSAmJiBpc1RleHRUcnVuY2F0ZWQobmVzdGVkSXRlbS5sYWJlbCwgYWN0aXZlTGFuZygpLCAnbmVzdGVkJykgPyAobmVzdGVkSXRlbS5sYWJlbCAmJiBhY3RpdmVMYW5nKCkgPyBuZXN0ZWRJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycpIDogJydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJyaWdodFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cIm5lc3RlZC1sYWJlbFwiPnt7IG5lc3RlZEl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gbmVzdGVkSXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9hPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3VsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCA8L3VsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgfVxyXG5cdFx0XHRcdFx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0PC91bD5cclxuXHRcdFx0XHR9XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0PC9kaXY+XHJcblx0PC9kaXY+XHJcblx0XHJcbjwvZGl2PlxyXG4iXX0=
314
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwYW5kYWJsZS1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvdGhlbWUvbGF5b3V0L2FwcC9leHBhbmRhYmxlTWVudS9leHBhbmRhYmxlLW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC90aGVtZS9sYXlvdXQvYXBwL2V4cGFuZGFibGVNZW51L2V4cGFuZGFibGUtbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQTZCLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFVLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXBFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUloRCxPQUFPLEVBQWdCLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFMUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7QUFZcEQsTUFBTSxPQUFPLHVCQUF1QjtJQVVuQyxJQUFJLGVBQWU7UUFDbEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQztJQUMxRCxDQUFDO0lBRUQsSUFBSSxlQUFlLENBQUMsS0FBYztRQUNqQyxJQUFJLENBQUMsYUFBYSxDQUFDLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFrQ0QsWUFDUyxpQkFBb0MsRUFDcEMsV0FBMkIsRUFDM0IsTUFBYyxF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LENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25DLENBQUM7WUFFRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRUQsYUFBYTtRQUNaLGdGQUFnRjtRQUNoRixJQUFJLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hILElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzlDLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUM5QixDQUFDO0lBQ0YsQ0FBQzsrR0F6VlcsdUJBQXVCO21HQUF2Qix1QkFBdUIsMEhBRnhCLENBQUMsaUJBQWlCLENBQUMsMEJDeEIvQixndVJBeUlBLDRDRG5IVyxVQUFVLG9PQUFFLE9BQU8sbUZBQUUsYUFBYTs7NEZBSWhDLHVCQUF1QjtrQkFQbkMsU0FBUztpQ0FDRyxJQUFJLFlBQ04scUJBQXFCLFdBQ3RCLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsYUFFbEMsQ0FBQyxpQkFBaUIsQ0FBQzswUEFpTzlCLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIE9uSW5pdCwgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIsIFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XHJcblxyXG5pbXBvcnQgeyBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSAnQG5nbmVhdC90cmFuc2xvY28nO1xyXG5pbXBvcnQgeyBLZXljbG9ha1NlcnZpY2UgfSBmcm9tICdrZXljbG9hay1hbmd1bGFyJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmaWx0ZXIgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IGJyaWRnZSB9IGZyb20gJ2FyaWwvYm9vdC9icmlkZ2UnO1xyXG5pbXBvcnQgeyBQbHVnaW5NZW51SXRlbSB9IGZyb20gJ2FyaWwvYm9vdC9jb25maWcvYXBwcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUpzb25QaXBlIH0gZnJvbSAnYXJpbC91dGlsL3BpcGVzJztcclxuXHJcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2FwcC5sYXlvdXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hcHAubWVudS5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0c2VsZWN0b3I6ICdhcHAtZXhwYW5kYWJsZS1tZW51JyxcclxuXHRpbXBvcnRzOiBbUm91dGVyTGluaywgTmdDbGFzcywgVG9vbHRpcE1vZHVsZV0sXHJcblx0dGVtcGxhdGVVcmw6ICdleHBhbmRhYmxlLW1lbnUuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHByb3ZpZGVyczogW1RyYW5zbGF0ZUpzb25QaXBlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXhwYW5kYWJsZU1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcblx0YWN0aXZlTGFuZzogU2lnbmFsPHN0cmluZz47XHJcblx0b3ZlcmxheU1lbnVPcGVuU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcclxuXHRyb3V0ZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xyXG5cdHVzZXJuYW1lOiBzdHJpbmc7XHJcblxyXG5cdGNhY2hlZE1lbnVJdGVtczogUGx1Z2luTWVudUl0ZW1bXSA9IFtdO1xyXG5cclxuXHRzZWxlY3RlZE1haW5NZW51SXRlbTogUGx1Z2luTWVudUl0ZW0gfCBudWxsID0gbnVsbDtcclxuXHJcblx0Z2V0IHNpZGViYXJFeHBhbmRlZCgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkO1xyXG5cdH1cclxuXHJcblx0c2V0IHNpZGViYXJFeHBhbmRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG5cdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnNldFNlY29uZGFyeVNpZGViYXJFeHBhbmRlZCh2YWx1ZSk7XHJcblx0fVxyXG5cclxuXHR0b29sdGlwVGV4dCA9IHtcclxuXHRcdHRvZ2dsZUJ1dHRvbjoge1xyXG5cdFx0XHRleHBhbmRlZDoge1xyXG5cdFx0XHRcdHRyOiAnTWVuw7x5w7wgR2l6bGUnLFxyXG5cdFx0XHRcdGVuOiAnSGlkZSBNZW51J1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRjb2xsYXBzZWQ6IHtcclxuXHRcdFx0XHR0cjogJ01lbsO8ecO8IEfDtnN0ZXInLFxyXG5cdFx0XHRcdGVuOiAnU2hvdyBNZW51J1xyXG5cdFx0XHR9XHJcblx0XHR9LFxyXG5cdFx0bG9ja0J1dHRvbjoge1xyXG5cdFx0XHRsb2NrZWQ6IHtcclxuXHRcdFx0XHR0cjogJ090b21hdGlrIEthcGFubWF5xLEgQcOnJyxcclxuXHRcdFx0XHRlbjogJ0VuYWJsZSBBdXRvLUNsb3NlJ1xyXG5cdFx0XHR9LFxyXG5cdFx0XHR1bmxvY2tlZDoge1xyXG5cdFx0XHRcdHRyOiAnTWVuw7x5w7wgS2lsaXRsZScsXHJcblx0XHRcdFx0ZW46ICdMb2NrIE1lbnUnXHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9O1xyXG5cclxuXHRwcml2YXRlIHJlYWRvbmx5IE1BWF9MRU5HVEggPSB7XHJcblx0XHRtYWluOiA4LFxyXG5cdFx0c2Vjb25kYXJ5OiAyMCxcclxuXHRcdHRlcnRpYXJ5OiAyMFxyXG5cdH07XHJcblxyXG5cdGFjdGlvbkxvYWRpbmdJdGVtcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xyXG5cdHByaXZhdGUgYWN0aW9uU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcml2YXRlIHRyYW5zbGF0ZUpzb25QaXBlOiBUcmFuc2xhdGVKc29uUGlwZSxcclxuXHRcdHByaXZhdGUgbWVudVNlcnZpY2U6IEFwcE1lbnVTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuXHRcdHByaXZhdGUga2V5Y2xvYWs6IEtleWNsb2FrU2VydmljZSxcclxuXHRcdHByaXZhdGUgdHJhbnNsb2NvU2VydmljZTogVHJhbnNsb2NvU2VydmljZSxcclxuXHRcdHByaXZhdGUgbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcclxuXHRcdHByaXZhdGUgaHR0cDogSHR0cENsaWVudFxyXG5cdCkge1xyXG5cdFx0dGhpcy5hY3RpdmVMYW5nID0gdG9TaWduYWwodGhpcy50cmFuc2xvY29TZXJ2aWNlLmxhbmdDaGFuZ2VzJCwgeyBpbml0aWFsVmFsdWU6ICd0cicgfSk7XHJcblx0XHR0aGlzLnVzZXJuYW1lID0gdGhpcy5rZXljbG9hay5nZXRVc2VybmFtZSgpLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpO1xyXG5cdH1cclxuXHJcblx0Ly8gR2V0dGVyIGZvciBsYXlvdXQgc2VydmljZSBzdGF0ZXNcclxuXHRnZXQgc2VsZWN0ZWRNYWluSXRlbSgpOiBudW1iZXIgfCBudWxsIHtcclxuXHRcdHJldHVybiB0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc2VsZWN0ZWRNYWluSXRlbTtcclxuXHR9XHJcblxyXG5cdGdldCBzZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5sYXlvdXRTZXJ2aWNlLnN0YXRlLnNlY29uZGFyeVNpZGViYXJFeHBhbmRlZDtcclxuXHR9XHJcblxyXG5cdC8vIENoZWNrIGlmIHRleHQgaXMgdHJ1bmNhdGVkIGFuZCBuZWVkcyB0b29sdGlwXHJcblx0aXNUZXh0VHJ1bmNhdGVkKFxyXG5cdFx0bGFiZWw6IGFueSxcclxuXHRcdGxhbmc6IHN0cmluZyB8IG51bGwsXHJcblx0XHRtZW51VHlwZTogJ21haW4nIHwgJ3NlY29uZGFyeScgfCAndGVydGlhcnknIHwgJ25lc3RlZCcgPSAnc2Vjb25kYXJ5J1xyXG5cdCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFsYWJlbCB8fCAhbGFuZyB8fCAhbGFiZWxbbGFuZ10pIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRjb25zdCB0ZXh0ID0gbGFiZWxbbGFuZ107XHJcblx0XHRjb25zdCB0ZXh0TGVuZ3RoID0gdGV4dC5sZW5ndGg7XHJcblx0XHRjb25zdCBtYXhMZW5ndGggPSBtZW51VHlwZSA9PT0gJ25lc3RlZCcgPyB0aGlzLk1BWF9MRU5HVEgudGVydGlhcnkgOiB0aGlzLk1BWF9MRU5HVEhbbWVudVR5cGVdO1xyXG5cdFx0cmV0dXJuIHRleHRMZW5ndGggPiBtYXhMZW5ndGg7XHJcblx0fVxyXG5cclxuXHQvLyBSZWN1cnNpdmVseSBjaGVjayBpZiBhIG1lbnUgaXRlbSBvciBpdHMgY2hpbGRyZW4gbWF0Y2ggdGhlIGN1cnJlbnQgcm91dGVcclxuXHRpc0FjdGl2ZVJvdXRlKG1lbnVJdGVtOiBQbHVnaW5NZW51SXRlbSk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFtZW51SXRlbSB8fCAhbWVudUl0ZW0ucm91dGVyTGluaykgcmV0dXJuIGZhbHNlO1xyXG5cclxuXHRcdC8vIEdldCBjdXJyZW50IFVSTCBwYXRoIGFmdGVyIHRoZSBoYXNoXHJcblx0XHRjb25zdCBjdXJyZW50VXJsID0gdGhpcy5yb3V0ZXIudXJsO1xyXG5cdFx0Y29uc3QgaGFzaFVybCA9IGN1cnJlbnRVcmwuaW5kZXhPZignIycpID4gLTEgPyBjdXJyZW50VXJsLnNwbGl0KCcjJylbMV0gOiBjdXJyZW50VXJsO1xyXG5cclxuXHRcdC8vIENoZWNrIGZvciBleGFjdCBtYXRjaCBmaXJzdFxyXG5cdFx0aWYgKGhhc2hVcmwgPT09IG1lbnVJdGVtLnJvdXRlckxpbmsgfHwgaGFzaFVybCA9PT0gJy8nICsgbWVudUl0ZW0ucm91dGVyTGluaykge1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBDaGVjayBpZiBjdXJyZW50IFVSTCBzdGFydHMgd2l0aCB0aGUgcm91dGVyTGluayAoaGFuZGxlcyBjaGlsZCByb3V0ZXMpXHJcblx0XHRpZiAoXHJcblx0XHRcdG1lbnVJdGVtLnJvdXRlckxpbmsgIT09ICcvJyAmJlxyXG5cdFx0XHQoaGFzaFVybC5zdGFydHNXaXRoKG1lbnVJdGVtLnJvdXRlckxpbmsgKyAnLycpIHx8IGhhc2hVcmwuc3RhcnRzV2l0aCgnLycgKyBtZW51SXRlbS5yb3V0ZXJMaW5rICsgJy8nKSlcclxuXHRcdCkge1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBDaGVjayBjaGlsZCBpdGVtcyBpZiB0aGV5IGV4aXN0XHJcblx0XHRpZiAobWVudUl0ZW0uaXRlbXMgJiYgbWVudUl0ZW0uaXRlbXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRyZXR1cm4gbWVudUl0ZW0uaXRlbXMuc29tZSgoY2hpbGRJdGVtKSA9PiB0aGlzLmlzQWN0aXZlUm91dGUoY2hpbGRJdGVtKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxuXHJcblx0bmdPbkluaXQoKSB7XHJcblx0XHR0aGlzLnVwZGF0ZU1lbnVJdGVtcygpO1xyXG5cdFx0dGhpcy5pbml0aWFsaXplTWVudSgpO1xyXG5cdFx0dGhpcy51cGRhdGVBY3RpdmVNZW51RnJvbUN1cnJlbnRSb3V0ZSgpO1xyXG5cclxuXHRcdC8vIFN1YnNjcmliZSB0byByb3V0ZSBjaGFuZ2VzIHRvIGhhbmRsZSBzZWNvbmRhcnkgc2lkZWJhciBjbG9zaW5nXHJcblx0XHR0aGlzLnJvdXRlclN1YnNjcmlwdGlvbiA9IHRoaXMucm91dGVyLmV2ZW50c1xyXG5cdFx0XHQucGlwZShmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKVxyXG5cdFx0XHQuc3Vic2NyaWJlKCgpID0+IHtcclxuXHRcdFx0XHQvLyBVcGRhdGUgYWN0aXZlIG1lbnUgYmFzZWQgb24gdGhlIG5ldyByb3V0ZVxyXG5cdFx0XHRcdHRoaXMudXBkYXRlQWN0aXZlTWVudUZyb21DdXJyZW50Um91dGUoKTtcclxuXHRcdFx0fSk7XHJcblxyXG5cdFx0Ly8gU3Vic2NyaWJlIHRvIG92ZXJsYXkgbWVudSBvcGVuIG5vdGlmaWNhdGlvbnNcclxuXHRcdHRoaXMub3ZlcmxheU1lbnVPcGVuU3Vic2NyaXB0aW9uID0gdGhpcy5sYXlvdXRTZXJ2aWNlLm92ZXJsYXlPcGVuJC5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cdFx0XHRpZiAodGhpcy5sYXlvdXRTZXJ2aWNlLnN0YXRlLnN0YXRpY01lbnVNb2JpbGVBY3RpdmUpIHtcclxuXHRcdFx0XHR0aGlzLmxheW91dFNlcnZpY2Uuc2V0U2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkKHRydWUpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdG5nT25EZXN0cm95KCkge1xyXG5cdFx0aWYgKHRoaXMub3ZlcmxheU1lbnVPcGVuU3Vic2NyaXB0aW9uKSB7XHJcblx0XHRcdHRoaXMub3ZlcmxheU1lbnVPcGVuU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMucm91dGVyU3Vic2NyaXB0aW9uKSB7XHJcblx0XHRcdHRoaXMucm91dGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5hY3Rpb25TdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcblx0fVxyXG5cclxuXHQvLyBJbml0aWFsaXplIHRoZSBtZW51IHdpdGggcHJvcGVyIGFjdGl2ZSBzdGF0ZVxyXG5cdGluaXRpYWxpemVNZW51KCkge1xyXG5cdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnNldFNlbGVjdGVkTWFpbkl0ZW0obnVsbCk7XHJcblx0XHR0aGlzLnNlbGVjdGVkTWFpbk1lbnVJdGVtID0gbnVsbDtcclxuXHRcdHRoaXMubGF5b3V0U2VydmljZS5zZXRTZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQoZmFsc2UpO1xyXG5cdFx0dGhpcy51cGRhdGVNZW51SXRlbXMoKTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZU1lbnVGcm9tUm9vdEtleShpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcblx0XHR0aGlzLnVwZGF0ZU1lbnVJdGVtcygpO1xyXG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gdGhpcy5nZXRNZW51SXRlbXMoKTtcclxuXHJcblx0XHRpZiAoaW5kZXggPj0gMCAmJiBpbmRleCA8IG1lbnVJdGVtcy5sZW5ndGgpIHtcclxuXHRcdFx0Y29uc3QgaXRlbSA9IG1lbnVJdGVtc1tpbmRleF07XHJcblx0XHRcdGlmICghaXRlbS5zZXBhcmF0b3IpIHtcclxuXHRcdFx0XHR0aGlzLmxheW91dFNlcnZpY2Uuc2V0U2VsZWN0ZWRNYWluSXRlbShpbmRleCk7XHJcblx0XHRcdFx0dGhpcy5zZWxlY3RlZE1haW5NZW51SXRlbSA9IGl0ZW07XHJcblx0XHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnNldFNlY29uZGFyeVNpZGViYXJFeHBhbmRlZCh0cnVlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0dXBkYXRlTWVudUl0ZW1zKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5jYWNoZWRNZW51SXRlbXMgPSBicmlkZ2UuaXNIb3N0TW9kZSgpID8gYnJpZGdlLmhvc3RNZW51SXRlbXMoKSA6IHRoaXMubWVudVNlcnZpY2UubWVudUl0ZW1zKCk7XHJcblx0fVxyXG5cclxuXHRnZXRNZW51SXRlbXMoKTogUGx1Z2luTWVudUl0ZW1bXSB7XHJcblx0XHRyZXR1cm4gdGhpcy5jYWNoZWRNZW51SXRlbXM7XHJcblx0fVxyXG5cclxuXHRzZWxlY3RNYWluSXRlbShpbmRleDogbnVtYmVyLCBpdGVtOiBQbHVnaW5NZW51SXRlbSk6IHZvaWQge1xyXG5cdFx0Ly8gSGFuZGxlIGFjdGlvbiBpdGVtcyBhdCB0b3AgbGV2ZWxcclxuXHRcdGlmIChpdGVtLmFjdGlvbiAmJiAoIWl0ZW0uaXRlbXMgfHwgaXRlbS5pdGVtcy5sZW5ndGggPT09IDApKSB7XHJcblx0XHRcdHRoaXMub25BY3Rpb25JdGVtQ2xpY2soaXRlbSk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoaXRlbS5yb3V0ZXJMaW5rICYmICghaXRlbS5pdGVtcyB8fCBpdGVtLml0ZW1zLmxlbmd0aCA9PT0gMCkpIHtcclxuXHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnNldFNlY29uZGFyeVNpZGViYXJFeHBhbmRlZChmYWxzZSk7XHJcblx0XHRcdHRoaXMubGF5b3V0U2VydmljZS5zZXRTZWxlY3RlZE1haW5JdGVtKGluZGV4KTtcclxuXHRcdFx0dGhpcy5zZWxlY3RlZE1haW5NZW51SXRlbSA9IGl0ZW07XHJcblx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtpdGVtLnJvdXRlckxpbmtdKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIEhhbmRsZSByZWd1bGFyIG1lbnUgaXRlbXMgd2l0aCBzdWJtZW51XHJcblx0XHRpZiAodGhpcy5zZWxlY3RlZE1haW5JdGVtID09PSBpbmRleCkge1xyXG5cdFx0XHR0aGlzLmxheW91dFNlcnZpY2UudG9nZ2xlU2Vjb25kYXJ5U2lkZWJhcigpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnNldFNlbGVjdGVkTWFpbkl0ZW0oaW5kZXgpO1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkTWFpbk1lbnVJdGVtID0gaXRlbTtcclxuXHJcblx0XHRcdGlmIChpdGVtLml0ZW1zICYmIGl0ZW0uaXRlbXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdHRoaXMubGF5b3V0U2VydmljZS5zZXRTZWNvbmRhcnlTaWRlYmFyRXhwYW5kZWQodHJ1ZSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnNldFNlY29uZGFyeVNpZGViYXJFeHBhbmRlZChmYWxzZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBGb3IgbW9iaWxlIGRldmljZXMsIGVuc3VyZSB0aGUgbWVudSBzdGF5cyBvcGVuXHJcblx0XHRpZiAodGhpcy5pc01vYmlsZSgpKSB7XHJcblx0XHRcdHRoaXMubGF5b3V0U2VydmljZS5zdGF0ZS5zdGF0aWNNZW51TW9iaWxlQWN0aXZlID0gdHJ1ZTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHRvZ2dsZVNlY29uZGFyeVNpZGViYXIoKTogdm9pZCB7XHJcblx0XHR0aGlzLmxheW91dFNlcnZpY2UudG9nZ2xlU2Vjb25kYXJ5U2lkZWJhcigpO1xyXG5cdH1cclxuXHJcblx0aXNNb2JpbGUoKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5sYXlvdXRTZXJ2aWNlLmlzTW9iaWxlKCk7XHJcblx0fVxyXG5cclxuXHQvLyBMaXN0ZW4gZm9yIHJlc2l6ZSBldmVudHMgLSBub3cgaGFuZGxlZCBtb3JlIGVmZmljaWVudGx5IGJ5IGxheW91dCBzZXJ2aWNlXHJcblx0QEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXHJcblx0b25SZXNpemUoKSB7XHJcblx0XHRpZiAoIXRoaXMuaXNNb2JpbGUoKSAmJiB0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSkge1xyXG5cdFx0XHR0aGlzLmxheW91dFNlcnZpY2UuY2xvc2VNb2JpbGVNZW51KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR1cGRhdGVBY3RpdmVNZW51RnJvbUN1cnJlbnRSb3V0ZSgpOiB2b2lkIHtcclxuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IHRoaXMuZ2V0TWVudUl0ZW1zKCk7XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBtZW51SXRlbXMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbWVudUl0ZW0gPSBtZW51SXRlbXNbaV07XHJcblx0XHRcdGlmICh0aGlzLmlzQWN0aXZlUm91dGUobWVudUl0ZW0pKSB7XHJcblx0XHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnNldFNlbGVjdGVkTWFpbkl0ZW0oaSk7XHJcblx0XHRcdFx0dGhpcy5zZWxlY3RlZE1haW5NZW51SXRlbSA9IG1lbnVJdGVtO1xyXG5cclxuXHRcdFx0XHRpZiAobWVudUl0ZW0uaXRlbXMgJiYgbWVudUl0ZW0uaXRlbXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0aWYgKCF0aGlzLmlzTW9iaWxlKCkgJiYgIXRoaXMuc2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkICYmICF0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxheW91dFNlcnZpY2Uuc2V0U2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkKHRydWUpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLmxheW91dFNlcnZpY2Uuc2V0U2Vjb25kYXJ5U2lkZWJhckV4cGFuZGVkKGZhbHNlKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpc0hhdmVTZWxlY3RlZENoaWxkSXRlbShpdGVtOiBQbHVnaW5NZW51SXRlbSk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFpdGVtIHx8ICFpdGVtLml0ZW1zIHx8IGl0ZW0uaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XHJcblxyXG5cdFx0Zm9yIChjb25zdCBjaGlsZCBvZiBpdGVtLml0ZW1zKSB7XHJcblx0XHRcdGlmICh0aGlzLmlzQWN0aXZlUm91dGUoY2hpbGQpKSB7XHJcblx0XHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChjaGlsZC5pdGVtcyAmJiBjaGlsZC5pdGVtcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMuaXNIYXZlU2VsZWN0ZWRDaGlsZEl0ZW0oY2hpbGQpKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG5cclxuXHRnZXRMb2NhbFRleHQodGV4dDogYW55KTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnRyYW5zbGF0ZUpzb25QaXBlLnRyYW5zZm9ybSh0ZXh0KTtcclxuXHR9XHJcblxyXG5cdGdldEFjdGlvbkl0ZW1LZXkoaXRlbTogUGx1Z2luTWVudUl0ZW0pOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIGl0ZW0uYWN0aW9uPy51cmwgKyAnfCcgKyBpdGVtLmFjdGlvbj8uc3VjY2Vzc1JvdXRlO1xyXG5cdH1cclxuXHJcblx0aXNBY3Rpb25Mb2FkaW5nKGl0ZW06IFBsdWdpbk1lbnVJdGVtKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5hY3Rpb25Mb2FkaW5nSXRlbXMuaGFzKHRoaXMuZ2V0QWN0aW9uSXRlbUtleShpdGVtKSk7XHJcblx0fVxyXG5cclxuXHRvbkFjdGlvbkl0ZW1DbGljayhpdGVtOiBQbHVnaW5NZW51SXRlbSwgZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xyXG5cdFx0aWYgKGV2ZW50KSB7XHJcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghaXRlbS5hY3Rpb24gfHwgdGhpcy5pc0FjdGlvbkxvYWRpbmcoaXRlbSkpIHJldHVybjtcclxuXHJcblx0XHQvLyBDYW5jZWwgYW55IHByZXZpb3VzIGFjdGlvbiByZXF1ZXN0XHJcblx0XHR0aGlzLmFjdGlvblN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcclxuXHJcblx0XHRjb25zdCBrZXkgPSB0aGlzLmdldEFjdGlvbkl0ZW1LZXkoaXRlbSk7XHJcblx0XHR0aGlzLmFjdGlvbkxvYWRpbmdJdGVtcy5hZGQoa2V5KTtcclxuXHJcblx0XHRjb25zdCByZXF1ZXN0JCA9XHJcblx0XHRcdGl0ZW0uYWN0aW9uLm1ldGhvZCA9PT0gJ0dFVCdcclxuXHRcdFx0XHQ/IHRoaXMuaHR0cC5nZXQoaXRlbS5hY3Rpb24udXJsKVxyXG5cdFx0XHRcdDogdGhpcy5odHRwLnBvc3QoaXRlbS5hY3Rpb24udXJsLCBpdGVtLmFjdGlvbi5ib2R5ID8/IHt9KTtcclxuXHJcblx0XHR0aGlzLmFjdGlvblN1YnNjcmlwdGlvbiA9IHJlcXVlc3QkLnN1YnNjcmliZSh7XHJcblx0XHRcdG5leHQ6IChyZXNwb25zZTogYW55KSA9PiB7XHJcblx0XHRcdFx0dGhpcy5hY3Rpb25Mb2FkaW5nSXRlbXMuZGVsZXRlKGtleSk7XHJcblx0XHRcdFx0Y29uc3Qgcm91dGUgPSB0aGlzLmJ1aWxkU3VjY2Vzc1JvdXRlKGl0ZW0uYWN0aW9uISwgcmVzcG9uc2UpO1xyXG5cdFx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtyb3V0ZV0pO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRlcnJvcjogKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuYWN0aW9uTG9hZGluZ0l0ZW1zLmRlbGV0ZShrZXkpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYnVpbGRTdWNjZXNzUm91dGUoYWN0aW9uOiBQbHVnaW5NZW51SXRlbVsnYWN0aW9uJ10sIHJlc3BvbnNlOiBhbnkpOiBzdHJpbmcge1xyXG5cdFx0aWYgKCFhY3Rpb24/LnN1Y2Nlc3NSb3V0ZVJlc3BvbnNlS2V5KSByZXR1cm4gYWN0aW9uPy5zdWNjZXNzUm91dGUgPz8gJy8nO1xyXG5cclxuXHRcdGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUJ5UGF0aChyZXNwb25zZSwgYWN0aW9uLnN1Y2Nlc3NSb3V0ZVJlc3BvbnNlS2V5KTtcclxuXHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gYWN0aW9uLnN1Y2Nlc3NSb3V0ZTtcclxuXHJcblx0XHRyZXR1cm4gYCR7YWN0aW9uLnN1Y2Nlc3NSb3V0ZX0vJHt2YWx1ZX1gO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRWYWx1ZUJ5UGF0aChvYmo6IGFueSwgcGF0aDogc3RyaW5nKTogYW55IHtcclxuXHRcdGlmICghb2JqIHx8ICFwYXRoKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChjdXJyZW50LCBrZXkpID0+IHtcclxuXHRcdFx0aWYgKGN1cnJlbnQgPT09IHVuZGVmaW5lZCB8fCBjdXJyZW50ID09PSBudWxsKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdFx0Ly8gSGFuZGxlIGFycmF5IGFjY2VzcyBsaWtlICdyZXN1bHRbMF0nXHJcblx0XHRcdGNvbnN0IGFycmF5TWF0Y2ggPSBrZXkubWF0Y2goL14oLis/KVxcWyhcXGQrKVxcXSQvKTtcclxuXHRcdFx0aWYgKGFycmF5TWF0Y2gpIHtcclxuXHRcdFx0XHRjb25zdCBhcnJheUtleSA9IGFycmF5TWF0Y2hbMV07XHJcblx0XHRcdFx0Y29uc3QgaW5kZXggPSBwYXJzZUludChhcnJheU1hdGNoWzJdLCAxMCk7XHJcblx0XHRcdFx0cmV0dXJuIGN1cnJlbnRbYXJyYXlLZXldPy5baW5kZXhdO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRyZXR1cm4gY3VycmVudFtrZXldO1xyXG5cdFx0fSwgb2JqKTtcclxuXHR9XHJcblxyXG5cdHRvZ2dsZVNpZGViYXIoKSB7XHJcblx0XHQvLyBFxJ9lciBzZcOnaWxpIGJpciBhbmEgbWVuw7wgw7bEn2VzaSB2YXJzYSB2ZSBhbHQgbWVuw7xsZXJpIHZhcnNhIHRvZ2dsZSB5YXBhYmlsaXJpelxyXG5cdFx0aWYgKHRoaXMuc2VsZWN0ZWRNYWluTWVudUl0ZW0gJiYgdGhpcy5zZWxlY3RlZE1haW5NZW51SXRlbS5pdGVtcyAmJiB0aGlzLnNlbGVjdGVkTWFpbk1lbnVJdGVtLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0dGhpcy5zaWRlYmFyRXhwYW5kZWQgPSAhdGhpcy5zaWRlYmFyRXhwYW5kZWQ7XHJcblx0XHR9IGVsc2UgaWYgKHRoaXMuc2lkZWJhckV4cGFuZGVkKSB7XHJcblx0XHRcdHRoaXMuc2lkZWJhckV4cGFuZGVkID0gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJuZXctbGF5b3V0LXNpZGViYXJcIiA+XHJcblx0PCEtLSBNYWluIHNpZGViYXIgKGZpcnN0IGxldmVsKSAtLT5cclxuXHQ8ZGl2IGNsYXNzPVwibWFpbi1zaWRlYmFyXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcblx0XHQ8ZGl2IGNsYXNzPVwibWFpbi1zaWRlYmFyLWNvbnRlbnRcIj5cclxuXHRcdFx0PHVsIGNsYXNzPVwibWFpbi1tZW51XCI+XHJcblx0XHRcdFx0QGZvcihpdGVtIG9mIGdldE1lbnVJdGVtcygpOyB0cmFjayBpdGVtOyBsZXQgaSA9ICRpbmRleCl7XHJcblx0XHRcdFx0XHRAaWYoIWl0ZW0uc2VwYXJhdG9yKXtcclxuXHRcdFx0XHRcdFx0PGxpXHJcblx0XHRcdFx0XHRcdFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNBY3RpdmVSb3V0ZShpdGVtKSB8fCBpc0hhdmVTZWxlY3RlZENoaWxkSXRlbShpdGVtKX1cIlxyXG5cdFx0XHRcdFx0XHQoY2xpY2spPVwic2VsZWN0TWFpbkl0ZW0oaSwgaXRlbSlcIlxyXG5cdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiKGl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gaXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnKVwiXHJcblx0XHRcdFx0XHRcdHRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCI+XHJcblx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJtYWluLW1lbnUtaXRlbVwiPlxyXG5cdFx0XHRcdFx0XHRcdDxpIFtuZ0NsYXNzXT1cIml0ZW0uaWNvblwiIGNsYXNzPVwibWVudS1pY29uXCI+PC9pPlxyXG5cdFx0XHRcdFx0XHRcdDwhLS0gPHNtYWxsIGNsYXNzPVwibWVudS1sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gaXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnIH19PC9zbWFsbD4gLS0+XHJcblx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdDwvdWw+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L2Rpdj5cclxuXHRcdCBAaWYoc2VsZWN0ZWRNYWluTWVudUl0ZW0gJiYgc2VsZWN0ZWRNYWluTWVudUl0ZW0uaXRlbXMgJiYgc2VsZWN0ZWRNYWluTWVudUl0ZW0uaXRlbXMubGVuZ3RoID4gMCl7XHJcblxyXG5cdFx0XHQgPGRpdiBjbGFzcz1cInNpZGViYXItdG9nZ2xlLWNvbnRhaW5lclwiPlxyXG5cdFx0XHRcdCA8YnV0dG9uIGNsYXNzPVwic2lkZWJhci1jaXJjbGUtdG9nZ2xlLWJ0blwiIChjbGljayk9XCJ0b2dnbGVTaWRlYmFyKClcIj5cclxuXHRcdFx0XHRcdCA8aSBjbGFzcz1cInBpXCIgW25nQ2xhc3NdPVwic2lkZWJhckV4cGFuZGVkID8gJ3BpLWFuZ2xlLWxlZnQnIDogJ3BpLWFuZ2xlLXJpZ2h0J1wiPjwvaT5cclxuXHRcdFx0XHQgPC9idXR0b24+XHJcblx0XHRcdCA8L2Rpdj5cclxuXHRcdCB9XHJcblxyXG5cdDwhLS0gU2Vjb25kYXJ5IHNpZGViYXIgKHNlY29uZCBsZXZlbCkgLS0+XHJcblx0PGRpdiBjbGFzcz1cInNlY29uZGFyeS1zaWRlYmFyXCIgW25nQ2xhc3NdPVwieydleHBhbmRlZCc6IHNpZGViYXJFeHBhbmRlZH1cIj5cclxuXHRcdDxkaXYgY2xhc3M9XCJzZWNvbmRhcnktY29udGVudC13cmFwcGVyXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcblx0XHRcdDwhLS0gU2Vjb25kYXJ5IHNpZGViYXIgY29udGVudCAtLT5cclxuXHRcdFx0PGRpdiBjbGFzcz1cInNlY29uZGFyeS1zaWRlYmFyLWNvbnRlbnRcIj5cclxuXHRcdFx0XHRAaWYoc2VsZWN0ZWRNYWluTWVudUl0ZW0pe1xyXG5cdFx0XHRcdFx0PHVsIGNsYXNzPVwic2Vjb25kYXJ5LW1lbnVcIj5cclxuXHRcdFx0XHRcdFx0QGZvcihzdWJJdGVtIG9mIHNlbGVjdGVkTWFpbk1lbnVJdGVtLml0ZW1zOyB0cmFjayBzdWJJdGVtOyBsZXQgaSA9ICRpbmRleCl7XHJcblx0XHRcdFx0XHRcdFx0XHQ8IS0tIEFjdGlvbiBtZW51IGl0ZW0gLS0+XHJcblx0XHRcdFx0XHRcdFx0XHRAaWYoc3ViSXRlbS5hY3Rpb24pIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0PGxpIGNsYXNzPVwic2Vjb25kYXJ5LW1lbnUtaXRlbVwiIFtuZ0NsYXNzXT1cInsnYWN0aW9uLWxvYWRpbmcnOiBpc0FjdGlvbkxvYWRpbmcoc3ViSXRlbSl9XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PGEgY2xhc3M9XCJzZWNvbmRhcnktbWVudS1saW5rIGlzLWFjdGlvblwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoY2xpY2spPVwib25BY3Rpb25JdGVtQ2xpY2soc3ViSXRlbSwgJGV2ZW50KVwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiIWlzTW9iaWxlKCkgJiYgaXNUZXh0VHJ1bmNhdGVkKHN1Ykl0ZW0ubGFiZWwsIGFjdGl2ZUxhbmcoKSwgJ3NlY29uZGFyeScpID8gKHN1Ykl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gc3ViSXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnKSA6ICcnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvb2x0aXBQb3NpdGlvbj1cInJpZ2h0XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRAaWYoaXNBY3Rpb25Mb2FkaW5nKHN1Ykl0ZW0pKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGkgY2xhc3M9XCJzdWJtZW51LWljb24gcGkgcGktc3BpbiBwaS1zcGlubmVyXCI+PC9pPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBAZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxpIFtuZ0NsYXNzXT1cInN1Ykl0ZW0uaWNvblwiIGNsYXNzPVwic3VibWVudS1pY29uXCI+PC9pPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJzdWJtZW51LWxhYmVsXCI+e3sgc3ViSXRlbS5sYWJlbCAmJiBhY3RpdmVMYW5nKCkgPyBzdWJJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycgfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9hPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2xpPlxyXG5cdFx0XHRcdFx0XHRcdFx0fSBAZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHQ8IS0tIFJlZ3VsYXIgbWVudSBpdGVtIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0PGxpIGNsYXNzPVwic2Vjb25kYXJ5LW1lbnUtaXRlbVwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNBY3RpdmVSb3V0ZShzdWJJdGVtKX1cIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0PGEgW3JvdXRlckxpbmtdPVwic3ViSXRlbS5yb3V0ZXJMaW5rXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzZWNvbmRhcnktbWVudS1saW5rXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiIWlzTW9iaWxlKCkgJiYgaXNUZXh0VHJ1bmNhdGVkKHN1Ykl0ZW0ubGFiZWwsIGFjdGl2ZUxhbmcoKSwgJ3NlY29uZGFyeScpID8gKHN1Ykl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gc3ViSXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnKSA6ICcnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJyaWdodFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxpIFtuZ0NsYXNzXT1cInN1Ykl0ZW0uaWNvblwiIGNsYXNzPVwic3VibWVudS1pY29uXCI+PC9pPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwic3VibWVudS1sYWJlbFwiPnt7IHN1Ykl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gc3ViSXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ8L2E+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwhLS0gQWx3YXlzIHJlbmRlciBzdWJtZW51IGlmIGl0IGV4aXN0cyAtLT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0IEBpZihzdWJJdGVtLml0ZW1zICYmIHN1Ykl0ZW0uaXRlbXMubGVuZ3RoID4gMCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0IDx1bCBjbGFzcz1cInRlcnRpYXJ5LW1lbnUgYWx3YXlzLW9wZW5cIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdEBmb3IoY2hpbGRJdGVtIG9mIHN1Ykl0ZW0uaXRlbXM7IHRyYWNrIGNoaWxkSXRlbTsgbGV0IGkgPSAkaW5kZXgpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8IS0tIEFjdGlvbiBpdGVtIGF0IHRlcnRpYXJ5IGxldmVsIC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRAaWYoY2hpbGRJdGVtLmFjdGlvbikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsaSBjbGFzcz1cInRlcnRpYXJ5LW1lbnUtaXRlbVwiIFtuZ0NsYXNzXT1cInsnYWN0aW9uLWxvYWRpbmcnOiBpc0FjdGlvbkxvYWRpbmcoY2hpbGRJdGVtKX1cIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxhIGNsYXNzPVwidGVydGlhcnktbWVudS1saW5rIGlzLWFjdGlvblwiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChjbGljayk9XCJvbkFjdGlvbkl0ZW1DbGljayhjaGlsZEl0ZW0sICRldmVudClcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiIWlzTW9iaWxlKCkgJiYgaXNUZXh0VHJ1bmNhdGVkKGNoaWxkSXRlbS5sYWJlbCwgYWN0aXZlTGFuZygpLCAndGVydGlhcnknKSA/IChjaGlsZEl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gY2hpbGRJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycpIDogJydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJyaWdodFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRAaWYoaXNBY3Rpb25Mb2FkaW5nKGNoaWxkSXRlbSkpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwidGVydGlhcnktbGFiZWxcIj48aSBjbGFzcz1cInBpIHBpLXNwaW4gcGktc3Bpbm5lclwiPjwvaT4ge3sgY2hpbGRJdGVtLmxhYmVsICYmIGFjdGl2ZUxhbmcoKSA/IGNoaWxkSXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IEBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInRlcnRpYXJ5LWxhYmVsXCI+e3sgY2hpbGRJdGVtLmxhYmVsICYmIGFjdGl2ZUxhbmcoKSA/IGNoaWxkSXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2E+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBAZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxsaSBjbGFzcz1cInRlcnRpYXJ5LW1lbnUtaXRlbVwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNBY3RpdmVSb3V0ZShjaGlsZEl0ZW0pfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxhIFtyb3V0ZXJMaW5rXT1cImNoaWxkSXRlbS5yb3V0ZXJMaW5rXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInRlcnRpYXJ5LW1lbnUtbGlua1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiIWlzTW9iaWxlKCkgJiYgaXNUZXh0VHJ1bmNhdGVkKGNoaWxkSXRlbS5sYWJlbCwgYWN0aXZlTGFuZygpLCAndGVydGlhcnknKSA/IChjaGlsZEl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gY2hpbGRJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycpIDogJydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG9vbHRpcFBvc2l0aW9uPVwicmlnaHRcIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwidGVydGlhcnktbGFiZWxcIj57eyBjaGlsZEl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gY2hpbGRJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycgfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9hPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwhLS0gQWx3YXlzIHJlbmRlciBkZWVwZXIgbGV2ZWxzIGlmIHRoZXkgZXhpc3QsIGFsc28gdmlzaWJsZSBieSBkZWZhdWx0IC0tPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdEBpZihjaGlsZEl0ZW0uaXRlbXMgJiYgY2hpbGRJdGVtLml0ZW1zLmxlbmd0aCA+IDApe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHVsIGNsYXNzPVwibmVzdGVkLW1lbnUgYWx3YXlzLW9wZW5cIj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0QGZvcihuZXN0ZWRJdGVtIG9mIGNoaWxkSXRlbS5pdGVtczsgdHJhY2sgbmVzdGVkSXRlbTsgbGV0IGkgPSAkaW5kZXgpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdEBpZihuZXN0ZWRJdGVtLmFjdGlvbikge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGxpIGNsYXNzPVwibmVzdGVkLW1lbnUtaXRlbVwiIFtuZ0NsYXNzXT1cInsnYWN0aW9uLWxvYWRpbmcnOiBpc0FjdGlvbkxvYWRpbmcobmVzdGVkSXRlbSl9XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxhIGNsYXNzPVwibmVzdGVkLW1lbnUtbGluayBpcy1hY3Rpb25cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChjbGljayk9XCJvbkFjdGlvbkl0ZW1DbGljayhuZXN0ZWRJdGVtLCAkZXZlbnQpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiIWlzTW9iaWxlKCkgJiYgaXNUZXh0VHJ1bmNhdGVkKG5lc3RlZEl0ZW0ubGFiZWwsIGFjdGl2ZUxhbmcoKSwgJ25lc3RlZCcpID8gKG5lc3RlZEl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gbmVzdGVkSXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnKSA6ICcnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJyaWdodFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdEBpZihpc0FjdGlvbkxvYWRpbmcobmVzdGVkSXRlbSkpe1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJuZXN0ZWQtbGFiZWxcIj48aSBjbGFzcz1cInBpIHBpLXNwaW4gcGktc3Bpbm5lclwiPjwvaT4ge3sgbmVzdGVkSXRlbS5sYWJlbCAmJiBhY3RpdmVMYW5nKCkgPyBuZXN0ZWRJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycgfX08L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBAZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cIm5lc3RlZC1sYWJlbFwiPnt7IG5lc3RlZEl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gbmVzdGVkSXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9hPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IEBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8bGkgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cIm5lc3RlZC1tZW51LWl0ZW1cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W25nQ2xhc3NdPVwieydhY3RpdmUnOiBpc0FjdGl2ZVJvdXRlKG5lc3RlZEl0ZW0pfVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGEgW3JvdXRlckxpbmtdPVwibmVzdGVkSXRlbS5yb3V0ZXJMaW5rXCIgXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPVwibmVzdGVkLW1lbnUtbGlua1wiXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFtwVG9vbHRpcF09XCIhaXNNb2JpbGUoKSAmJiBpc1RleHRUcnVuY2F0ZWQobmVzdGVkSXRlbS5sYWJlbCwgYWN0aXZlTGFuZygpLCAnbmVzdGVkJykgPyAobmVzdGVkSXRlbS5sYWJlbCAmJiBhY3RpdmVMYW5nKCkgPyBuZXN0ZWRJdGVtLmxhYmVsW2FjdGl2ZUxhbmcoKSFdIHx8ICcnIDogJycpIDogJydcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwUG9zaXRpb249XCJyaWdodFwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cIm5lc3RlZC1sYWJlbFwiPnt7IG5lc3RlZEl0ZW0ubGFiZWwgJiYgYWN0aXZlTGFuZygpID8gbmVzdGVkSXRlbS5sYWJlbFthY3RpdmVMYW5nKCkhXSB8fCAnJyA6ICcnIH19PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9hPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvbGk+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L3VsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCA8L3VsPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQgfVxyXG5cdFx0XHRcdFx0XHRcdFx0PC9saT5cclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0PC91bD5cclxuXHRcdFx0XHR9XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0PC9kaXY+XHJcblx0PC9kaXY+XHJcblx0XHJcbjwvZGl2PlxyXG4iXX0=
@@ -196,10 +196,10 @@ export class FavoritePagesSidebarComponent {
196
196
  getFullUrl(url) {
197
197
  return this.favoritePagesService.getFullUrl(url);
198
198
  }
199
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: FavoritePagesSidebarComponent, deps: [{ token: i1.LayoutService }, { token: i2.FavoritePagesService }, { token: i3.ConfirmationService }, { token: i3.MessageService }, { token: i4.DialogService }, { token: i5.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
200
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: FavoritePagesSidebarComponent, isStandalone: true, selector: "app-favorite-pages-sidebar", providers: [ConfirmationService, DialogService], ngImport: i0, template: "<p-sidebar\r\n\t[(visible)]=\"visible\"\r\n\tposition=\"right\"\r\n\t[transitionOptions]=\"'.3s cubic-bezier(0, 0, 0.2, 1)'\"\r\n\tstyleClass=\"layout-favorite-pages-sidebar w-full sm:w-30rem\"\r\n\t*transloco=\"let t; read: 'favoritePages'\">\r\n\t<ng-template pTemplate=\"header\">\r\n\t\t<div class=\"flex align-items-center justify-content-between w-full\">\r\n\t\t\t<div class=\"flex align-items-center\">\r\n\t\t\t\t<i class=\"pi pi-heart text-primary text-xl\"></i>\r\n\t\t\t\t<span class=\"font-bold text-lg\">{{ t('favoritePages') }}</span>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</ng-template>\r\n\r\n\t<div class=\"favorite-pages-content\">\r\n\t\t@if (isCurrentPageFavorited()) {\r\n\t\t\t<div class=\"current-favorited-message\">\r\n\t\t\t\t<div class=\"message-content\">\r\n\t\t\t\t\t<i class=\"pi pi-check-circle text-green-500\"></i>\r\n\t\t\t\t\t<span>{{ t('currentPageFavorited') }}</span>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t}\r\n\r\n\t\t<div class=\"add-section\">\r\n\t\t\t@if (!isCurrentPageFavorited()) {\r\n\t\t\t\t<aril-button\r\n\t\t\t\t\t[label]=\"t('addCurrentPage')\"\r\n\t\t\t\t\ticon=\"PLUS\"\r\n\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t(clickEvent)=\"addCurrentPageToFavorites()\">\r\n\t\t\t\t</aril-button>\r\n\t\t\t} @else {\r\n\t\t\t\t<aril-button\r\n\t\t\t\t\t[label]=\"t('removeCurrentPage')\"\r\n\t\t\t\t\ticon=\"TIMES\"\r\n\t\t\t\t\tcolor=\"danger\"\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t(clickEvent)=\"removeCurrentPageFromFavorites()\">\r\n\t\t\t\t</aril-button>\r\n\t\t\t}\r\n\t\t</div>\r\n\r\n\t\t@if (favoritePages().length > 0) {\r\n\t\t\t<div class=\"favorites-list\">\r\n\t\t\t\t<p-scrollPanel [style]=\"{ width: '100%', height: '100%' }\">\r\n\t\t\t\t\t<div class=\"favorites-items\">\r\n\t\t\t\t\t\t@for (favorite of favoritePages(); track trackByFavoriteId($index, favorite)) {\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclass=\"favorite-item\"\r\n\t\t\t\t\t\t\t\t[class.default-item]=\"favorite.id < 0\"\r\n\t\t\t\t\t\t\t\t(click)=\"navigateToFavorite(favorite)\"\r\n\t\t\t\t\t\t\t\t[pTooltip]=\"getFullUrl(favorite.url)\"\r\n\t\t\t\t\t\t\t\ttooltipPosition=\"top\">\r\n\t\t\t\t\t\t\t\t<div class=\"item-content\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"item-header\">\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"item-title\">\r\n\t\t\t\t\t\t\t\t\t\t\t<i class=\"pi pi-external-link text-primary mr-2\"></i>\r\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"title-text\">{{ favorite.label }}</span>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t<fa-icon\r\n\t\t\t\t\t\t\t\t\t\t\t\t[icon]=\"solidIcons.faPenToSquare\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle=\"color: var(--yellow-500)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"col-2 cursor-pointer\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"editFavorite(favorite, $event)\">\r\n\t\t\t\t\t\t\t\t\t\t\t</fa-icon>\r\n\t\t\t\t\t\t\t\t\t\t\t<fa-icon\r\n\t\t\t\t\t\t\t\t\t\t\t\t[icon]=\"solidIcons.faTrash\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle=\"color: var(--red-500)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"col-2 cursor-pointer\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"deleteFavorite(favorite, $event)\">\r\n\t\t\t\t\t\t\t\t\t\t\t</fa-icon>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-scrollPanel>\r\n\t\t\t</div>\r\n\t\t} @else {\r\n\t\t\t<div class=\"empty-state\">\r\n\t\t\t\t<div class=\"empty-content\">\r\n\t\t\t\t\t<i class=\"pi pi-heart empty-icon\"></i>\r\n\t\t\t\t\t<h3 class=\"empty-title\">{{ t('noFavorites') }}</h3>\r\n\t\t\t\t\t<p class=\"empty-message\">{{ t('startAddingFavorites') }}</p>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t}\r\n\t\t<div>\r\n\t\t\t<p-paginator\r\n\t\t\t\t[first]=\"(currentPage() - 1) * pageSize()\"\r\n\t\t\t\t[rows]=\"pageSize()\"\r\n\t\t\t\t[totalRecords]=\"totalItems()\"\r\n\t\t\t\t[showCurrentPageReport]=\"true\"\r\n\t\t\t\t[currentPageReportTemplate]=\"t('paginatorTemplate')\"\r\n\t\t\t\t[showFirstLastIcon]=\"false\"\r\n\t\t\t\t[showPageLinks]=\"false\"\r\n\t\t\t\t(onPageChange)=\"onPageChange($event)\">\r\n\t\t\t</p-paginator>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<p-confirmDialog></p-confirmDialog>\r\n</p-sidebar>\r\n", styles: [":host ::ng-deep .layout-favorite-pages-sidebar .p-sidebar-content{padding:0;background:var(--surface-ground)}:host ::ng-deep .layout-favorite-pages-sidebar .p-sidebar-header{background:var(--primary-color);color:var(--primary-color-text);padding:1rem 1.5rem}:host ::ng-deep .layout-favorite-pages-sidebar .p-sidebar-header span{font-size:1.1rem;font-weight:600}.favorite-pages-content{display:flex;flex-direction:column;height:100%;background:var(--surface-0)}.current-favorited-message{padding:1rem;border-bottom:1px solid var(--surface-border);background:var(--green-50)}.current-favorited-message .message-content{display:flex;align-items:center;gap:.5rem;color:var(--green-700);font-size:.9rem;font-weight:500}.add-section{display:flex;align-items:center;gap:.5rem;padding:1rem;border-bottom:1px solid var(--surface-border);background:var(--surface-0)}.favorites-list{flex:1;overflow:hidden}.favorites-items{padding:.5rem}.favorite-item{background:var(--surface-0);border:1px solid var(--surface-border);border-radius:8px;margin-bottom:.5rem;cursor:pointer;transition:all .2s ease;position:relative;overflow:hidden;padding:.5rem .2rem}.favorite-item:hover{border-color:var(--primary-200);background:var(--primary-50);transform:translateY(-1px);box-shadow:0 2px 8px #0000001a}.favorite-item:hover .action-btn{opacity:1}.favorite-item:last-child{margin-bottom:0}.favorite-item.default-item{background:var(--blue-50);border-left:3px solid var(--blue-500)}.favorite-item.default-item:hover{background:var(--blue-100);border-color:var(--blue-300)}.favorite-item.default-item .title-text{font-weight:600;color:var(--blue-700)}.item-content{padding:.5rem .75rem}.item-header{display:flex;align-items:center;justify-content:space-between}.item-title{display:flex;align-items:center;flex:1;min-width:0}.item-title .title-text{font-weight:600;color:var(--text-color);font-size:1rem;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.empty-state{flex:1;display:flex;align-items:center;justify-content:center;padding:2rem}.empty-content{text-align:center;max-width:300px}.empty-content .empty-icon{font-size:3rem;color:var(--text-color-secondary);margin-bottom:1rem;opacity:.5}.empty-content .empty-title{font-size:1.1rem;font-weight:600;color:var(--text-color);margin-bottom:.5rem}.empty-content .empty-message{font-size:.9rem;color:var(--text-color-secondary);line-height:1.4;margin-bottom:1.5rem}@media (max-width: 768px){.add-section{padding:.75rem}.add-section .button-label{font-size:.8rem}.item-content{padding:.5rem}.item-title .title-text{font-size:.85rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: SidebarModule }, { kind: "component", type: i6.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ScrollPanelModule }, { kind: "component", type: i7.ScrollPanel, selector: "p-scrollPanel", inputs: ["style", "styleClass", "step"] }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i8.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }, { kind: "ngmodule", type: PaginatorModule }, { kind: "component", type: i9.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "ngmodule", type: DynamicDialogModule }, { kind: "component", type: ButtonComponent, selector: "aril-button:not([click])", inputs: ["label", "loading", "disabled", "raised", "rounded", "text", "outlined", "badge", "size", "icon", "iconPos", "color"], outputs: ["clickEvent"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i5.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i10.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i11.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }] }); }
199
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FavoritePagesSidebarComponent, deps: [{ token: i1.LayoutService }, { token: i2.FavoritePagesService }, { token: i3.ConfirmationService }, { token: i3.MessageService }, { token: i4.DialogService }, { token: i5.TranslocoService }], target: i0.ɵɵFactoryTarget.Component }); }
200
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: FavoritePagesSidebarComponent, isStandalone: true, selector: "app-favorite-pages-sidebar", providers: [ConfirmationService, DialogService], ngImport: i0, template: "<p-sidebar\r\n\t[(visible)]=\"visible\"\r\n\tposition=\"right\"\r\n\t[transitionOptions]=\"'.3s cubic-bezier(0, 0, 0.2, 1)'\"\r\n\tstyleClass=\"layout-favorite-pages-sidebar w-full sm:w-30rem\"\r\n\t*transloco=\"let t; read: 'favoritePages'\">\r\n\t<ng-template pTemplate=\"header\">\r\n\t\t<div class=\"flex align-items-center justify-content-between w-full\">\r\n\t\t\t<div class=\"flex align-items-center\">\r\n\t\t\t\t<i class=\"pi pi-heart text-primary text-xl\"></i>\r\n\t\t\t\t<span class=\"font-bold text-lg\">{{ t('favoritePages') }}</span>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</ng-template>\r\n\r\n\t<div class=\"favorite-pages-content\">\r\n\t\t@if (isCurrentPageFavorited()) {\r\n\t\t\t<div class=\"current-favorited-message\">\r\n\t\t\t\t<div class=\"message-content\">\r\n\t\t\t\t\t<i class=\"pi pi-check-circle text-green-500\"></i>\r\n\t\t\t\t\t<span>{{ t('currentPageFavorited') }}</span>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t}\r\n\r\n\t\t<div class=\"add-section\">\r\n\t\t\t@if (!isCurrentPageFavorited()) {\r\n\t\t\t\t<aril-button\r\n\t\t\t\t\t[label]=\"t('addCurrentPage')\"\r\n\t\t\t\t\ticon=\"PLUS\"\r\n\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t(clickEvent)=\"addCurrentPageToFavorites()\">\r\n\t\t\t\t</aril-button>\r\n\t\t\t} @else {\r\n\t\t\t\t<aril-button\r\n\t\t\t\t\t[label]=\"t('removeCurrentPage')\"\r\n\t\t\t\t\ticon=\"TIMES\"\r\n\t\t\t\t\tcolor=\"danger\"\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t(clickEvent)=\"removeCurrentPageFromFavorites()\">\r\n\t\t\t\t</aril-button>\r\n\t\t\t}\r\n\t\t</div>\r\n\r\n\t\t@if (favoritePages().length > 0) {\r\n\t\t\t<div class=\"favorites-list\">\r\n\t\t\t\t<p-scrollPanel [style]=\"{ width: '100%', height: '100%' }\">\r\n\t\t\t\t\t<div class=\"favorites-items\">\r\n\t\t\t\t\t\t@for (favorite of favoritePages(); track trackByFavoriteId($index, favorite)) {\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclass=\"favorite-item\"\r\n\t\t\t\t\t\t\t\t[class.default-item]=\"favorite.id < 0\"\r\n\t\t\t\t\t\t\t\t(click)=\"navigateToFavorite(favorite)\"\r\n\t\t\t\t\t\t\t\t[pTooltip]=\"getFullUrl(favorite.url)\"\r\n\t\t\t\t\t\t\t\ttooltipPosition=\"top\">\r\n\t\t\t\t\t\t\t\t<div class=\"item-content\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"item-header\">\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"item-title\">\r\n\t\t\t\t\t\t\t\t\t\t\t<i class=\"pi pi-external-link text-primary mr-2\"></i>\r\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"title-text\">{{ favorite.label }}</span>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t<fa-icon\r\n\t\t\t\t\t\t\t\t\t\t\t\t[icon]=\"solidIcons.faPenToSquare\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle=\"color: var(--yellow-500)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"col-2 cursor-pointer\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"editFavorite(favorite, $event)\">\r\n\t\t\t\t\t\t\t\t\t\t\t</fa-icon>\r\n\t\t\t\t\t\t\t\t\t\t\t<fa-icon\r\n\t\t\t\t\t\t\t\t\t\t\t\t[icon]=\"solidIcons.faTrash\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle=\"color: var(--red-500)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"col-2 cursor-pointer\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"deleteFavorite(favorite, $event)\">\r\n\t\t\t\t\t\t\t\t\t\t\t</fa-icon>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-scrollPanel>\r\n\t\t\t</div>\r\n\t\t} @else {\r\n\t\t\t<div class=\"empty-state\">\r\n\t\t\t\t<div class=\"empty-content\">\r\n\t\t\t\t\t<i class=\"pi pi-heart empty-icon\"></i>\r\n\t\t\t\t\t<h3 class=\"empty-title\">{{ t('noFavorites') }}</h3>\r\n\t\t\t\t\t<p class=\"empty-message\">{{ t('startAddingFavorites') }}</p>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t}\r\n\t\t<div>\r\n\t\t\t<p-paginator\r\n\t\t\t\t[first]=\"(currentPage() - 1) * pageSize()\"\r\n\t\t\t\t[rows]=\"pageSize()\"\r\n\t\t\t\t[totalRecords]=\"totalItems()\"\r\n\t\t\t\t[showCurrentPageReport]=\"true\"\r\n\t\t\t\t[currentPageReportTemplate]=\"t('paginatorTemplate')\"\r\n\t\t\t\t[showFirstLastIcon]=\"false\"\r\n\t\t\t\t[showPageLinks]=\"false\"\r\n\t\t\t\t(onPageChange)=\"onPageChange($event)\">\r\n\t\t\t</p-paginator>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<p-confirmDialog></p-confirmDialog>\r\n</p-sidebar>\r\n", styles: [":host ::ng-deep .layout-favorite-pages-sidebar .p-sidebar-content{padding:0;background:var(--surface-ground)}:host ::ng-deep .layout-favorite-pages-sidebar .p-sidebar-header{background:var(--primary-color);color:var(--primary-color-text);padding:1rem 1.5rem}:host ::ng-deep .layout-favorite-pages-sidebar .p-sidebar-header span{font-size:1.1rem;font-weight:600}.favorite-pages-content{display:flex;flex-direction:column;height:100%;background:var(--surface-0)}.current-favorited-message{padding:1rem;border-bottom:1px solid var(--surface-border);background:var(--green-50)}.current-favorited-message .message-content{display:flex;align-items:center;gap:.5rem;color:var(--green-700);font-size:.9rem;font-weight:500}.add-section{display:flex;align-items:center;gap:.5rem;padding:1rem;border-bottom:1px solid var(--surface-border);background:var(--surface-0)}.favorites-list{flex:1;overflow:hidden}.favorites-items{padding:.5rem}.favorite-item{background:var(--surface-0);border:1px solid var(--surface-border);border-radius:8px;margin-bottom:.5rem;cursor:pointer;transition:all .2s ease;position:relative;overflow:hidden;padding:.5rem .2rem}.favorite-item:hover{border-color:var(--primary-200);background:var(--primary-50);transform:translateY(-1px);box-shadow:0 2px 8px #0000001a}.favorite-item:hover .action-btn{opacity:1}.favorite-item:last-child{margin-bottom:0}.favorite-item.default-item{background:var(--blue-50);border-left:3px solid var(--blue-500)}.favorite-item.default-item:hover{background:var(--blue-100);border-color:var(--blue-300)}.favorite-item.default-item .title-text{font-weight:600;color:var(--blue-700)}.item-content{padding:.5rem .75rem}.item-header{display:flex;align-items:center;justify-content:space-between}.item-title{display:flex;align-items:center;flex:1;min-width:0}.item-title .title-text{font-weight:600;color:var(--text-color);font-size:1rem;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.empty-state{flex:1;display:flex;align-items:center;justify-content:center;padding:2rem}.empty-content{text-align:center;max-width:300px}.empty-content .empty-icon{font-size:3rem;color:var(--text-color-secondary);margin-bottom:1rem;opacity:.5}.empty-content .empty-title{font-size:1.1rem;font-weight:600;color:var(--text-color);margin-bottom:.5rem}.empty-content .empty-message{font-size:.9rem;color:var(--text-color-secondary);line-height:1.4;margin-bottom:1.5rem}@media (max-width: 768px){.add-section{padding:.75rem}.add-section .button-label{font-size:.8rem}.item-content{padding:.5rem}.item-title .title-text{font-size:.85rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: SidebarModule }, { kind: "component", type: i6.Sidebar, selector: "p-sidebar", inputs: ["appendTo", "blockScroll", "style", "styleClass", "ariaCloseLabel", "autoZIndex", "baseZIndex", "modal", "dismissible", "showCloseIcon", "closeOnEscape", "transitionOptions", "visible", "position", "fullScreen"], outputs: ["onShow", "onHide", "visibleChange"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ScrollPanelModule }, { kind: "component", type: i7.ScrollPanel, selector: "p-scrollPanel", inputs: ["style", "styleClass", "step"] }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i8.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "closeAriaLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }, { kind: "ngmodule", type: PaginatorModule }, { kind: "component", type: i9.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "ngmodule", type: DynamicDialogModule }, { kind: "component", type: ButtonComponent, selector: "aril-button:not([click])", inputs: ["label", "loading", "disabled", "raised", "rounded", "text", "outlined", "badge", "size", "icon", "iconPos", "color"], outputs: ["clickEvent"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: i5.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i10.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: FontAwesomeModule }, { kind: "component", type: i11.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }] }); }
201
201
  }
202
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: FavoritePagesSidebarComponent, decorators: [{
202
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FavoritePagesSidebarComponent, decorators: [{
203
203
  type: Component,
204
204
  args: [{ standalone: true, selector: 'app-favorite-pages-sidebar', imports: [
205
205
  CommonModule,
@@ -214,4 +214,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
214
214
  FontAwesomeModule
215
215
  ], providers: [ConfirmationService, DialogService], template: "<p-sidebar\r\n\t[(visible)]=\"visible\"\r\n\tposition=\"right\"\r\n\t[transitionOptions]=\"'.3s cubic-bezier(0, 0, 0.2, 1)'\"\r\n\tstyleClass=\"layout-favorite-pages-sidebar w-full sm:w-30rem\"\r\n\t*transloco=\"let t; read: 'favoritePages'\">\r\n\t<ng-template pTemplate=\"header\">\r\n\t\t<div class=\"flex align-items-center justify-content-between w-full\">\r\n\t\t\t<div class=\"flex align-items-center\">\r\n\t\t\t\t<i class=\"pi pi-heart text-primary text-xl\"></i>\r\n\t\t\t\t<span class=\"font-bold text-lg\">{{ t('favoritePages') }}</span>\r\n\t\t\t</div>\r\n\t\t</div>\r\n\t</ng-template>\r\n\r\n\t<div class=\"favorite-pages-content\">\r\n\t\t@if (isCurrentPageFavorited()) {\r\n\t\t\t<div class=\"current-favorited-message\">\r\n\t\t\t\t<div class=\"message-content\">\r\n\t\t\t\t\t<i class=\"pi pi-check-circle text-green-500\"></i>\r\n\t\t\t\t\t<span>{{ t('currentPageFavorited') }}</span>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t}\r\n\r\n\t\t<div class=\"add-section\">\r\n\t\t\t@if (!isCurrentPageFavorited()) {\r\n\t\t\t\t<aril-button\r\n\t\t\t\t\t[label]=\"t('addCurrentPage')\"\r\n\t\t\t\t\ticon=\"PLUS\"\r\n\t\t\t\t\tcolor=\"primary\"\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t(clickEvent)=\"addCurrentPageToFavorites()\">\r\n\t\t\t\t</aril-button>\r\n\t\t\t} @else {\r\n\t\t\t\t<aril-button\r\n\t\t\t\t\t[label]=\"t('removeCurrentPage')\"\r\n\t\t\t\t\ticon=\"TIMES\"\r\n\t\t\t\t\tcolor=\"danger\"\r\n\t\t\t\t\tsize=\"sm\"\r\n\t\t\t\t\t(clickEvent)=\"removeCurrentPageFromFavorites()\">\r\n\t\t\t\t</aril-button>\r\n\t\t\t}\r\n\t\t</div>\r\n\r\n\t\t@if (favoritePages().length > 0) {\r\n\t\t\t<div class=\"favorites-list\">\r\n\t\t\t\t<p-scrollPanel [style]=\"{ width: '100%', height: '100%' }\">\r\n\t\t\t\t\t<div class=\"favorites-items\">\r\n\t\t\t\t\t\t@for (favorite of favoritePages(); track trackByFavoriteId($index, favorite)) {\r\n\t\t\t\t\t\t\t<div\r\n\t\t\t\t\t\t\t\tclass=\"favorite-item\"\r\n\t\t\t\t\t\t\t\t[class.default-item]=\"favorite.id < 0\"\r\n\t\t\t\t\t\t\t\t(click)=\"navigateToFavorite(favorite)\"\r\n\t\t\t\t\t\t\t\t[pTooltip]=\"getFullUrl(favorite.url)\"\r\n\t\t\t\t\t\t\t\ttooltipPosition=\"top\">\r\n\t\t\t\t\t\t\t\t<div class=\"item-content\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"item-header\">\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"item-title\">\r\n\t\t\t\t\t\t\t\t\t\t\t<i class=\"pi pi-external-link text-primary mr-2\"></i>\r\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"title-text\">{{ favorite.label }}</span>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t\t<div>\r\n\t\t\t\t\t\t\t\t\t\t\t<fa-icon\r\n\t\t\t\t\t\t\t\t\t\t\t\t[icon]=\"solidIcons.faPenToSquare\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle=\"color: var(--yellow-500)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"col-2 cursor-pointer\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"editFavorite(favorite, $event)\">\r\n\t\t\t\t\t\t\t\t\t\t\t</fa-icon>\r\n\t\t\t\t\t\t\t\t\t\t\t<fa-icon\r\n\t\t\t\t\t\t\t\t\t\t\t\t[icon]=\"solidIcons.faTrash\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"lg\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tstyle=\"color: var(--red-500)\"\r\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"col-2 cursor-pointer\"\r\n\t\t\t\t\t\t\t\t\t\t\t\t(click)=\"deleteFavorite(favorite, $event)\">\r\n\t\t\t\t\t\t\t\t\t\t\t</fa-icon>\r\n\t\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t\t</div>\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t</div>\r\n\t\t\t\t</p-scrollPanel>\r\n\t\t\t</div>\r\n\t\t} @else {\r\n\t\t\t<div class=\"empty-state\">\r\n\t\t\t\t<div class=\"empty-content\">\r\n\t\t\t\t\t<i class=\"pi pi-heart empty-icon\"></i>\r\n\t\t\t\t\t<h3 class=\"empty-title\">{{ t('noFavorites') }}</h3>\r\n\t\t\t\t\t<p class=\"empty-message\">{{ t('startAddingFavorites') }}</p>\r\n\t\t\t\t</div>\r\n\t\t\t</div>\r\n\t\t}\r\n\t\t<div>\r\n\t\t\t<p-paginator\r\n\t\t\t\t[first]=\"(currentPage() - 1) * pageSize()\"\r\n\t\t\t\t[rows]=\"pageSize()\"\r\n\t\t\t\t[totalRecords]=\"totalItems()\"\r\n\t\t\t\t[showCurrentPageReport]=\"true\"\r\n\t\t\t\t[currentPageReportTemplate]=\"t('paginatorTemplate')\"\r\n\t\t\t\t[showFirstLastIcon]=\"false\"\r\n\t\t\t\t[showPageLinks]=\"false\"\r\n\t\t\t\t(onPageChange)=\"onPageChange($event)\">\r\n\t\t\t</p-paginator>\r\n\t\t</div>\r\n\t</div>\r\n\r\n\t<p-confirmDialog></p-confirmDialog>\r\n</p-sidebar>\r\n", styles: [":host ::ng-deep .layout-favorite-pages-sidebar .p-sidebar-content{padding:0;background:var(--surface-ground)}:host ::ng-deep .layout-favorite-pages-sidebar .p-sidebar-header{background:var(--primary-color);color:var(--primary-color-text);padding:1rem 1.5rem}:host ::ng-deep .layout-favorite-pages-sidebar .p-sidebar-header span{font-size:1.1rem;font-weight:600}.favorite-pages-content{display:flex;flex-direction:column;height:100%;background:var(--surface-0)}.current-favorited-message{padding:1rem;border-bottom:1px solid var(--surface-border);background:var(--green-50)}.current-favorited-message .message-content{display:flex;align-items:center;gap:.5rem;color:var(--green-700);font-size:.9rem;font-weight:500}.add-section{display:flex;align-items:center;gap:.5rem;padding:1rem;border-bottom:1px solid var(--surface-border);background:var(--surface-0)}.favorites-list{flex:1;overflow:hidden}.favorites-items{padding:.5rem}.favorite-item{background:var(--surface-0);border:1px solid var(--surface-border);border-radius:8px;margin-bottom:.5rem;cursor:pointer;transition:all .2s ease;position:relative;overflow:hidden;padding:.5rem .2rem}.favorite-item:hover{border-color:var(--primary-200);background:var(--primary-50);transform:translateY(-1px);box-shadow:0 2px 8px #0000001a}.favorite-item:hover .action-btn{opacity:1}.favorite-item:last-child{margin-bottom:0}.favorite-item.default-item{background:var(--blue-50);border-left:3px solid var(--blue-500)}.favorite-item.default-item:hover{background:var(--blue-100);border-color:var(--blue-300)}.favorite-item.default-item .title-text{font-weight:600;color:var(--blue-700)}.item-content{padding:.5rem .75rem}.item-header{display:flex;align-items:center;justify-content:space-between}.item-title{display:flex;align-items:center;flex:1;min-width:0}.item-title .title-text{font-weight:600;color:var(--text-color);font-size:1rem;line-height:1.3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.empty-state{flex:1;display:flex;align-items:center;justify-content:center;padding:2rem}.empty-content{text-align:center;max-width:300px}.empty-content .empty-icon{font-size:3rem;color:var(--text-color-secondary);margin-bottom:1rem;opacity:.5}.empty-content .empty-title{font-size:1.1rem;font-weight:600;color:var(--text-color);margin-bottom:.5rem}.empty-content .empty-message{font-size:.9rem;color:var(--text-color-secondary);line-height:1.4;margin-bottom:1.5rem}@media (max-width: 768px){.add-section{padding:.75rem}.add-section .button-label{font-size:.8rem}.item-content{padding:.5rem}.item-title .title-text{font-size:.85rem}}\n"] }]
216
216
  }], ctorParameters: () => [{ type: i1.LayoutService }, { type: i2.FavoritePagesService }, { type: i3.ConfirmationService }, { type: i3.MessageService }, { type: i4.DialogService }, { type: i5.TranslocoService }] });
217
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmF2b3JpdGUtcGFnZXMtc2lkZWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3RoZW1lL2xheW91dC9hcHAvZmF2b3JpdGUtcGFnZXMvZmF2b3JpdGUtcGFnZXMtc2lkZWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3RoZW1lL2xheW91dC9hcHAvZmF2b3JpdGUtcGFnZXMvZmF2b3JpdGUtcGFnZXMtc2lkZWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFdEQsT0FBTyxFQUFFLG1CQUFtQixFQUFrQixNQUFNLGFBQWEsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFFLGVBQWUsRUFBb0IsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxPQUFPLEVBQUUs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LENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsQ0FBQzs4R0F0TlcsNkJBQTZCO2tHQUE3Qiw2QkFBNkIseUVBRjlCLENBQUMsbUJBQW1CLEVBQUUsYUFBYSxDQUFDLDBCQ3hDaEQsb3JJQThHQSxpbEZEbkZFLFlBQVksOEJBQ1osYUFBYSxtZEFDYixpQkFBaUIsK0lBQ2pCLG1CQUFtQixvbUJBQ25CLGVBQWUscWhCQUNmLG1CQUFtQiwrQkFDbkIsZUFBZSw2TkFDZixlQUFlLGdPQUNmLGFBQWEsc1hBQ2IsaUJBQWlCOzsyRkFNTiw2QkFBNkI7a0JBbkJ6QyxTQUFTO2lDQUNHLElBQUksWUFDTiw0QkFBNEIsV0FDN0I7d0JBQ1IsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGlCQUFpQjt3QkFDakIsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsaUJBQWlCO3FCQUNqQixhQUdVLENBQUMsbUJBQW1CLEVBQUUsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIGVmZmVjdCwgc2lnbmFsLCBjb21wdXRlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuXHJcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBDb25maXJtRGlhbG9nTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9jb25maXJtZGlhbG9nJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IFBhZ2luYXRvck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgU2Nyb2xsUGFuZWxNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Njcm9sbHBhbmVsJztcclxuaW1wb3J0IHsgU2lkZWJhck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvc2lkZWJhcic7XHJcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xyXG5cclxuaW1wb3J0IHsgVHJhbnNsb2NvTW9kdWxlLCBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSAnQG5nbmVhdC90cmFuc2xvY28nO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ2FyaWwvdWkvYnV0dG9uJztcclxuXHJcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2FwcC5sYXlvdXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEZhdm9yaXRlUGFnZVJlc3BvbnNlRFRPLCBGYXZvcml0ZVBhZ2VzU2VydmljZSB9IGZyb20gJy4vZmF2b3JpdGUtcGFnZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IEFkZEVkaXRGYXZvcml0ZU1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9tb2RhbHMvYWRkLWVkaXQtZmF2b3JpdGUtbW9kYWwvYWRkLWVkaXQtZmF2b3JpdGUtbW9kYWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9udEF3ZXNvbWVNb2R1bGUgfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7IHNvbGlkSWNvbnMgfSBmcm9tICdhcmlsL3V0aWwvbGliJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0c2VsZWN0b3I6ICdhcHAtZmF2b3JpdGUtcGFnZXMtc2lkZWJhcicsXHJcblx0aW1wb3J0czogW1xyXG5cdFx0Q29tbW9uTW9kdWxlLFxyXG5cdFx0U2lkZWJhck1vZHVsZSxcclxuXHRcdFNjcm9sbFBhbmVsTW9kdWxlLFxyXG5cdFx0Q29uZmlybURpYWxvZ01vZHVsZSxcclxuXHRcdFBhZ2luYXRvck1vZHVsZSxcclxuXHRcdER5bmFtaWNEaWFsb2dNb2R1bGUsXHJcblx0XHRCdXR0b25Db21wb25lbnQsXHJcblx0XHRUcmFuc2xvY29Nb2R1bGUsXHJcblx0XHRUb29sdGlwTW9kdWxlLFxyXG5cdFx0Rm9udEF3ZXNvbWVNb2R1bGVcclxuXHRdLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9mYXZvcml0ZS1wYWdlcy1zaWRlYmFyLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi9mYXZvcml0ZS1wYWdlcy1zaWRlYmFyLmNvbXBvbmVudC5zY3NzJ10sXHJcblx0cHJvdmlkZXJzOiBbQ29uZmlybWF0aW9uU2VydmljZSwgRGlhbG9nU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEZhdm9yaXRlUGFnZXNTaWRlYmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHRmYXZvcml0ZVBhZ2VzID0gc2lnbmFsPEZhdm9yaXRlUGFnZVJlc3BvbnNlRFRPW10+KFtdKTtcclxuXHRpc0N1cnJlbnRQYWdlRmF2b3JpdGVkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHRzb2xpZEljb25zID0gc29saWRJY29ucztcclxuXHRjdXJyZW50UGFnZSA9IHNpZ25hbDxudW1iZXI+KDEpO1xyXG5cdHBhZ2VTaXplID0gc2lnbmFsPG51bWJlcj4oMTApO1xyXG5cdHRvdGFsSXRlbXMgPSBzaWduYWw8bnVtYmVyPigwKTtcclxuXHR0b3RhbFBhZ2VzID0gc2lnbmFsPG51bWJlcj4oMCk7XHJcblx0YWxsRmF2b3JpdGVQYWdlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZmF2b3JpdGVQYWdlc1NlcnZpY2UuYWxsRmF2b3JpdGVQYWdlcygpKTtcclxuXHJcblx0cHJpdmF0ZSBzdWJqZWN0cyA9IHtcclxuXHRcdGxvYWRBbGxGYXZvcml0ZXM6IG5ldyBTdWJqZWN0PHZvaWQ+KCksXHJcblx0XHRkZWxldGVGYXZvcml0ZTogbmV3IFN1YmplY3Q8bnVtYmVyPigpXHJcblx0fTtcclxuXHJcblx0bG9hZEFsbEZhdm9yaXRlc1NlcnZpY2UgPSB0b1NpZ25hbChcclxuXHRcdHRoaXMuc3ViamVjdHMubG9hZEFsbEZhdm9yaXRlcy5waXBlKFxyXG5cdFx0XHRzd2l0Y2hNYXAoKCkgPT5cclxuXHRcdFx0XHR0aGlzLmZhdm9yaXRlUGFnZXNTZXJ2aWNlLmZpbHRlckZhdm9yaXRlUGFnZXMoe1xyXG5cdFx0XHRcdFx0cGFnZVNpemU6IDEwMDAsXHJcblx0XHRcdFx0XHRwYWdlTnVtYmVyOiAxXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KVxyXG5cdFx0KVxyXG5cdCk7XHJcblxyXG5cdGRlbGV0ZUZhdm9yaXRlU2VydmljZSA9IHRvU2lnbmFsKFxyXG5cdFx0dGhpcy5zdWJqZWN0cy5kZWxldGVGYXZvcml0ZS5waXBlKHN3aXRjaE1hcCgoaWQpID0+IHRoaXMuZmF2b3JpdGVQYWdlc1NlcnZpY2UuZGVsZXRlRmF2b3JpdGVQYWdlKGlkKSkpXHJcblx0KTtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwdWJsaWMgbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcclxuXHRcdHByaXZhdGUgZmF2b3JpdGVQYWdlc1NlcnZpY2U6IEZhdm9yaXRlUGFnZXNTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIHRyYW5zbG9jb1NlcnZpY2U6IFRyYW5zbG9jb1NlcnZpY2VcclxuXHQpIHtcclxuXHRcdHRoaXMuaW5pdGlhbGl6ZUVmZmVjdHMoKTtcclxuXHR9XHJcblxyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5sb2FkRmF2b3JpdGVQYWdlcygpO1xyXG5cdFx0dGhpcy5jaGVja0N1cnJlbnRQYWdlU3RhdHVzKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGluaXRpYWxpemVFZmZlY3RzKCk6IHZvaWQge1xyXG5cdFx0ZWZmZWN0KFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VydmljZSA9IHRoaXMubG9hZEFsbEZhdm9yaXRlc1NlcnZpY2UoKTtcclxuXHRcdFx0XHRpZiAoc2VydmljZT8ucmVzcG9uc2UpIHtcclxuXHRcdFx0XHRcdHRoaXMuZmF2b3JpdGVQYWdlc1NlcnZpY2UuYWxsRmF2b3JpdGVQYWdlcy5zZXQoc2VydmljZS5yZXNwb25zZS5yZXN1bHQpO1xyXG5cdFx0XHRcdFx0dGhpcy50b3RhbEl0ZW1zLnNldChzZXJ2aWNlLnJlc3BvbnNlLnJlc3VsdC5sZW5ndGgpO1xyXG5cdFx0XHRcdFx0dGhpcy51cGRhdGVDbGllbnRTaWRlUGFnaW5hdGlvbigpO1xyXG5cdFx0XHRcdFx0dGhpcy5jaGVja0N1cnJlbnRQYWdlU3RhdHVzKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cclxuXHRcdCk7XHJcblxyXG5cdFx0ZWZmZWN0KFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VydmljZSA9IHRoaXMuZGVsZXRlRmF2b3JpdGVTZXJ2aWNlKCk7XHJcblx0XHRcdFx0aWYgKHNlcnZpY2U/LnJlc3BvbnNlKSB7XHJcblx0XHRcdFx0XHR0aGlzLmxvYWRGYXZvcml0ZVBhZ2VzKCk7XHJcblx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcblx0XHRcdFx0XHRcdHNldmVyaXR5OiAnc3VjY2VzcycsXHJcblx0XHRcdFx0XHRcdHN1bW1hcnk6IHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ2Zhdm9yaXRlUGFnZXMuc3VjY2VzcycpLFxyXG5cdFx0XHRcdFx0XHRkZXRhaWw6IHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ2Zhdm9yaXRlUGFnZXMuZGVsZXRlZFN1Y2Nlc3NmdWxseScpLFxyXG5cdFx0XHRcdFx0XHRrZXk6ICd0b2FzdC1yb290J1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuZmF2b3JpdGVQYWdlc1NpZGViYXJWaXNpYmxlO1xyXG5cdH1cclxuXHJcblx0c2V0IHZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcclxuXHRcdHRoaXMubGF5b3V0U2VydmljZS5zdGF0ZS5mYXZvcml0ZVBhZ2VzU2lkZWJhclZpc2libGUgPSB2YWx1ZTtcclxuXHRcdGlmICh2YWx1ZSkge1xyXG5cdFx0XHR0aGlzLmNoZWNrQ3VycmVudFBhZ2VTdGF0dXMoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbG9hZEZhdm9yaXRlUGFnZXMoKTogdm9pZCB7XHJcblx0XHR0aGlzLnN1YmplY3RzLmxvYWRBbGxGYXZvcml0ZXMubmV4dCgpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB1cGRhdGVDbGllbnRTaWRlUGFnaW5hdGlvbigpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGFsbEZhdm9yaXRlcyA9IHRoaXMuYWxsRmF2b3JpdGVQYWdlcygpO1xyXG5cdFx0Y29uc3QgdG90YWxJdGVtcyA9IGFsbEZhdm9yaXRlcy5sZW5ndGg7XHJcblx0XHRjb25zdCBwYWdlU2l6ZSA9IHRoaXMucGFnZVNpemUoKTtcclxuXHRcdGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5jdXJyZW50UGFnZSgpO1xyXG5cclxuXHRcdGNvbnN0IHRvdGFsUGFnZXMgPSBNYXRoLmNlaWwodG90YWxJdGVtcyAvIHBhZ2VTaXplKTtcclxuXHRcdHRoaXMudG90YWxQYWdlcy5zZXQodG90YWxQYWdlcyk7XHJcblxyXG5cdFx0Y29uc3Qgc3RhcnRJbmRleCA9IChjdXJyZW50UGFnZSAtIDEpICogcGFnZVNpemU7XHJcblx0XHRjb25zdCBlbmRJbmRleCA9IE1hdGgubWluKHN0YXJ0SW5kZXggKyBwYWdlU2l6ZSwgdG90YWxJdGVtcyk7XHJcblxyXG5cdFx0Y29uc3QgY3VycmVudFBhZ2VEYXRhID0gYWxsRmF2b3JpdGVzLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcclxuXHRcdHRoaXMuZmF2b3JpdGVQYWdlcy5zZXQoY3VycmVudFBhZ2VEYXRhKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2hlY2tDdXJyZW50UGFnZVN0YXR1cygpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGN1cnJlbnRQYXRoID0gdGhpcy5mYXZvcml0ZVBhZ2VzU2VydmljZS5nZXRDdXJyZW50Um91dGVQYXRoKCk7XHJcblx0XHRjb25zdCBhbGxGYXZvcml0ZXMgPSB0aGlzLmFsbEZhdm9yaXRlUGFnZXMoKTtcclxuXHRcdGNvbnN0IGlzRm91bmQgPSBhbGxGYXZvcml0ZXMuc29tZSgoZmF2KSA9PiBmYXYudXJsID09PSBjdXJyZW50UGF0aCk7XHJcblxyXG5cdFx0dGhpcy5pc0N1cnJlbnRQYWdlRmF2b3JpdGVkLnNldChpc0ZvdW5kKTtcclxuXHR9XHJcblxyXG5cdGFkZEN1cnJlbnRQYWdlVG9GYXZvcml0ZXMoKTogdm9pZCB7XHJcblx0XHRjb25zdCBjdXJyZW50UGF0aCA9IHRoaXMuZmF2b3JpdGVQYWdlc1NlcnZpY2UuZ2V0Q3VycmVudFJvdXRlUGF0aCgpO1xyXG5cclxuXHRcdGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKEFkZEVkaXRGYXZvcml0ZU1vZGFsQ29tcG9uZW50LCB7XHJcblx0XHRcdGhlYWRlcjogdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgnZmF2b3JpdGVQYWdlcy5hZGRUb0Zhdm9yaXRlcycpLFxyXG5cdFx0XHR3aWR0aDogJzUwMHB4JyxcclxuXHRcdFx0bW9kYWw6IHRydWUsXHJcblx0XHRcdGNsb3NhYmxlOiB0cnVlLFxyXG5cdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0bW9kZTogJ2FkZCcsXHJcblx0XHRcdFx0dXJsOiBjdXJyZW50UGF0aFxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHRyZWYub25DbG9zZS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG5cdFx0XHRpZiAocmVzdWx0Py5zdGF0dXMgPT09ICdzdWNjZXNzJykge1xyXG5cdFx0XHRcdHRoaXMubG9hZEZhdm9yaXRlUGFnZXMoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVDdXJyZW50UGFnZUZyb21GYXZvcml0ZXMoKTogdm9pZCB7XHJcblx0XHRjb25zdCBjdXJyZW50UGF0aCA9IHRoaXMuZmF2b3JpdGVQYWdlc1NlcnZpY2UuZ2V0Q3VycmVudFJvdXRlUGF0aCgpO1xyXG5cdFx0Y29uc3QgZmF2b3JpdGVzID0gdGhpcy5mYXZvcml0ZVBhZ2VzKCk7XHJcblx0XHRjb25zdCBjdXJyZW50RmF2b3JpdGUgPSBmYXZvcml0ZXMuZmluZCgoZmF2KSA9PiBmYXYudXJsID09PSBjdXJyZW50UGF0aCk7XHJcblxyXG5cdFx0aWYgKGN1cnJlbnRGYXZvcml0ZSkge1xyXG5cdFx0XHR0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcblx0XHRcdFx0bWVzc2FnZTogYCcke2N1cnJlbnRGYXZvcml0ZS5sYWJlbH0nIGAgKyB0aGlzLnRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKCdmYXZvcml0ZVBhZ2VzLmNvbmZpcm1EZWxldGUnKSxcclxuXHRcdFx0XHRoZWFkZXI6IHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ2Zhdm9yaXRlUGFnZXMuZGVsZXRlQ29uZmlybVRpdGxlJyksXHJcblx0XHRcdFx0aWNvbjogJ3BpIHBpLWluZm8tY2lyY2xlJyxcclxuXHRcdFx0XHRhY2NlcHRMYWJlbDogdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgnYWNjZXB0QnV0dG9uTGFiZWwnKSxcclxuXHRcdFx0XHRyZWplY3RMYWJlbDogdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgncmVqZWN0QnV0dG9uTGFiZWwnKSxcclxuXHRcdFx0XHRhY2NlcHRCdXR0b25TdHlsZUNsYXNzOiAncC1idXR0b24tc3VjY2VzcycsXHJcblx0XHRcdFx0cmVqZWN0QnV0dG9uU3R5bGVDbGFzczogJ3AtYnV0dG9uLWRhbmdlcicsXHJcblx0XHRcdFx0YWNjZXB0OiAoKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnN1YmplY3RzLmRlbGV0ZUZhdm9yaXRlLm5leHQoY3VycmVudEZhdm9yaXRlLmlkKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZWRpdEZhdm9yaXRlKGZhdm9yaXRlOiBGYXZvcml0ZVBhZ2VSZXNwb25zZURUTywgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcblx0XHRjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihBZGRFZGl0RmF2b3JpdGVNb2RhbENvbXBvbmVudCwge1xyXG5cdFx0XHRoZWFkZXI6IHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ2Zhdm9yaXRlUGFnZXMuZWRpdEZhdm9yaXRlJyksXHJcblx0XHRcdHdpZHRoOiAnNTAwcHgnLFxyXG5cdFx0XHRtb2RhbDogdHJ1ZSxcclxuXHRcdFx0Y2xvc2FibGU6IHRydWUsXHJcblx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRtb2RlOiAnZWRpdCcsXHJcblx0XHRcdFx0ZmF2b3JpdGU6IGZhdm9yaXRlXHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdHJlZi5vbkNsb3NlLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcblx0XHRcdGlmIChyZXN1bHQ/LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XHJcblx0XHRcdFx0dGhpcy5sb2FkRmF2b3JpdGVQYWdlcygpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGRlbGV0ZUZhdm9yaXRlKGZhdm9yaXRlOiBGYXZvcml0ZVBhZ2VSZXNwb25zZURUTywgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcblx0XHR0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcblx0XHRcdHRhcmdldDogZXZlbnQudGFyZ2V0IGFzIEV2ZW50VGFyZ2V0LFxyXG5cdFx0XHRtZXNzYWdlOiBgJyR7ZmF2b3JpdGUubGFiZWx9JyBgICsgdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgnZmF2b3JpdGVQYWdlcy5jb25maXJtRGVsZXRlJyksXHJcblx0XHRcdGhlYWRlcjogdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgnZmF2b3JpdGVQYWdlcy5kZWxldGVDb25maXJtVGl0bGUnKSxcclxuXHRcdFx0aWNvbjogJ3BpIHBpLWluZm8tY2lyY2xlJyxcclxuXHRcdFx0YWNjZXB0TGFiZWw6IHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ2FjY2VwdEJ1dHRvbkxhYmVsJyksXHJcblx0XHRcdHJlamVjdExhYmVsOiB0aGlzLnRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKCdyZWplY3RCdXR0b25MYWJlbCcpLFxyXG5cdFx0XHRhY2NlcHRCdXR0b25TdHlsZUNsYXNzOiAncC1idXR0b24tc3VjY2VzcycsXHJcblx0XHRcdHJlamVjdEJ1dHRvblN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi1kYW5nZXInLFxyXG5cdFx0XHRhY2NlcHQ6ICgpID0+IHtcclxuXHRcdFx0XHR0aGlzLnN1YmplY3RzLmRlbGV0ZUZhdm9yaXRlLm5leHQoZmF2b3JpdGUuaWQpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdG5hdmlnYXRlVG9GYXZvcml0ZShmYXZvcml0ZTogRmF2b3JpdGVQYWdlUmVzcG9uc2VEVE8pOiB2b2lkIHtcclxuXHRcdHRoaXMuZmF2b3JpdGVQYWdlc1NlcnZpY2UubmF2aWdhdGVUb0Zhdm9yaXRlUGFnZShmYXZvcml0ZSk7XHJcblx0XHR0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuXHR9XHJcblxyXG5cdHRyYWNrQnlGYXZvcml0ZUlkKGluZGV4OiBudW1iZXIsIGZhdm9yaXRlOiBGYXZvcml0ZVBhZ2VSZXNwb25zZURUTyk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gZmF2b3JpdGUuaWQ7XHJcblx0fVxyXG5cclxuXHRvblBhZ2VDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG5cdFx0dGhpcy5jdXJyZW50UGFnZS5zZXQoZXZlbnQucGFnZSArIDEpO1xyXG5cdFx0dGhpcy5wYWdlU2l6ZS5zZXQoZXZlbnQucm93cyk7XHJcblx0XHR0aGlzLnVwZGF0ZUNsaWVudFNpZGVQYWdpbmF0aW9uKCk7IC8vIFVwZGF0ZSBwYWdpbmF0aW9uIGNsaWVudC1zaWRlLCBubyBBUEkgY2FsbFxyXG5cdH1cclxuXHJcblx0Z2V0RnVsbFVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5mYXZvcml0ZVBhZ2VzU2VydmljZS5nZXRGdWxsVXJsKHVybCk7XHJcblx0fVxyXG5cclxuXHJcbn1cclxuIiwiPHAtc2lkZWJhclxyXG5cdFsodmlzaWJsZSldPVwidmlzaWJsZVwiXHJcblx0cG9zaXRpb249XCJyaWdodFwiXHJcblx0W3RyYW5zaXRpb25PcHRpb25zXT1cIicuM3MgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSknXCJcclxuXHRzdHlsZUNsYXNzPVwibGF5b3V0LWZhdm9yaXRlLXBhZ2VzLXNpZGViYXIgdy1mdWxsIHNtOnctMzByZW1cIlxyXG5cdCp0cmFuc2xvY289XCJsZXQgdDsgcmVhZDogJ2Zhdm9yaXRlUGFnZXMnXCI+XHJcblx0PG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG5cdFx0PGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHctZnVsbFwiPlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuXHRcdFx0XHQ8aSBjbGFzcz1cInBpIHBpLWhlYXJ0IHRleHQtcHJpbWFyeSB0ZXh0LXhsXCI+PC9pPlxyXG5cdFx0XHRcdDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtbGdcIj57eyB0KCdmYXZvcml0ZVBhZ2VzJykgfX08L3NwYW4+XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0PC9kaXY+XHJcblx0PC9uZy10ZW1wbGF0ZT5cclxuXHJcblx0PGRpdiBjbGFzcz1cImZhdm9yaXRlLXBhZ2VzLWNvbnRlbnRcIj5cclxuXHRcdEBpZiAoaXNDdXJyZW50UGFnZUZhdm9yaXRlZCgpKSB7XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJjdXJyZW50LWZhdm9yaXRlZC1tZXNzYWdlXCI+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cIm1lc3NhZ2UtY29udGVudFwiPlxyXG5cdFx0XHRcdFx0PGkgY2xhc3M9XCJwaSBwaS1jaGVjay1jaXJjbGUgdGV4dC1ncmVlbi01MDBcIj48L2k+XHJcblx0XHRcdFx0XHQ8c3Bhbj57eyB0KCdjdXJyZW50UGFnZUZhdm9yaXRlZCcpIH19PC9zcGFuPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdH1cclxuXHJcblx0XHQ8ZGl2IGNsYXNzPVwiYWRkLXNlY3Rpb25cIj5cclxuXHRcdFx0QGlmICghaXNDdXJyZW50UGFnZUZhdm9yaXRlZCgpKSB7XHJcblx0XHRcdFx0PGFyaWwtYnV0dG9uXHJcblx0XHRcdFx0XHRbbGFiZWxdPVwidCgnYWRkQ3VycmVudFBhZ2UnKVwiXHJcblx0XHRcdFx0XHRpY29uPVwiUExVU1wiXHJcblx0XHRcdFx0XHRjb2xvcj1cInByaW1hcnlcIlxyXG5cdFx0XHRcdFx0c2l6ZT1cInNtXCJcclxuXHRcdFx0XHRcdChjbGlja0V2ZW50KT1cImFkZEN1cnJlbnRQYWdlVG9GYXZvcml0ZXMoKVwiPlxyXG5cdFx0XHRcdDwvYXJpbC1idXR0b24+XHJcblx0XHRcdH0gQGVsc2Uge1xyXG5cdFx0XHRcdDxhcmlsLWJ1dHRvblxyXG5cdFx0XHRcdFx0W2xhYmVsXT1cInQoJ3JlbW92ZUN1cnJlbnRQYWdlJylcIlxyXG5cdFx0XHRcdFx0aWNvbj1cIlRJTUVTXCJcclxuXHRcdFx0XHRcdGNvbG9yPVwiZGFuZ2VyXCJcclxuXHRcdFx0XHRcdHNpemU9XCJzbVwiXHJcblx0XHRcdFx0XHQoY2xpY2tFdmVudCk9XCJyZW1vdmVDdXJyZW50UGFnZUZyb21GYXZvcml0ZXMoKVwiPlxyXG5cdFx0XHRcdDwvYXJpbC1idXR0b24+XHJcblx0XHRcdH1cclxuXHRcdDwvZGl2PlxyXG5cclxuXHRcdEBpZiAoZmF2b3JpdGVQYWdlcygpLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0PGRpdiBjbGFzcz1cImZhdm9yaXRlcy1saXN0XCI+XHJcblx0XHRcdFx0PHAtc2Nyb2xsUGFuZWwgW3N0eWxlXT1cInsgd2lkdGg6ICcxMDAlJywgaGVpZ2h0OiAnMTAwJScgfVwiPlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZhdm9yaXRlcy1pdGVtc1wiPlxyXG5cdFx0XHRcdFx0XHRAZm9yIChmYXZvcml0ZSBvZiBmYXZvcml0ZVBhZ2VzKCk7IHRyYWNrIHRyYWNrQnlGYXZvcml0ZUlkKCRpbmRleCwgZmF2b3JpdGUpKSB7XHJcblx0XHRcdFx0XHRcdFx0PGRpdlxyXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJmYXZvcml0ZS1pdGVtXCJcclxuXHRcdFx0XHRcdFx0XHRcdFtjbGFzcy5kZWZhdWx0LWl0ZW1dPVwiZmF2b3JpdGUuaWQgPCAwXCJcclxuXHRcdFx0XHRcdFx0XHRcdChjbGljayk9XCJuYXZpZ2F0ZVRvRmF2b3JpdGUoZmF2b3JpdGUpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFtwVG9vbHRpcF09XCJnZXRGdWxsVXJsKGZhdm9yaXRlLnVybClcIlxyXG5cdFx0XHRcdFx0XHRcdFx0dG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaXRlbS1jb250ZW50XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJpdGVtLWhlYWRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJpdGVtLXRpdGxlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aSBjbGFzcz1cInBpIHBpLWV4dGVybmFsLWxpbmsgdGV4dC1wcmltYXJ5IG1yLTJcIj48L2k+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInRpdGxlLXRleHRcIj57eyBmYXZvcml0ZS5sYWJlbCB9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGZhLWljb25cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W2ljb25dPVwic29saWRJY29ucy5mYVBlblRvU3F1YXJlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT1cImxnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJjb2xvcjogdmFyKC0teWVsbG93LTUwMClcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImNvbC0yIGN1cnNvci1wb2ludGVyXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImVkaXRGYXZvcml0ZShmYXZvcml0ZSwgJGV2ZW50KVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9mYS1pY29uPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGZhLWljb25cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W2ljb25dPVwic29saWRJY29ucy5mYVRyYXNoXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT1cImxnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJjb2xvcjogdmFyKC0tcmVkLTUwMClcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImNvbC0yIGN1cnNvci1wb2ludGVyXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImRlbGV0ZUZhdm9yaXRlKGZhdm9yaXRlLCAkZXZlbnQpXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2ZhLWljb24+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvcC1zY3JvbGxQYW5lbD5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHR9IEBlbHNlIHtcclxuXHRcdFx0PGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cImVtcHR5LWNvbnRlbnRcIj5cclxuXHRcdFx0XHRcdDxpIGNsYXNzPVwicGkgcGktaGVhcnQgZW1wdHktaWNvblwiPjwvaT5cclxuXHRcdFx0XHRcdDxoMyBjbGFzcz1cImVtcHR5LXRpdGxlXCI+e3sgdCgnbm9GYXZvcml0ZXMnKSB9fTwvaDM+XHJcblx0XHRcdFx0XHQ8cCBjbGFzcz1cImVtcHR5LW1lc3NhZ2VcIj57eyB0KCdzdGFydEFkZGluZ0Zhdm9yaXRlcycpIH19PC9wPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdH1cclxuXHRcdDxkaXY+XHJcblx0XHRcdDxwLXBhZ2luYXRvclxyXG5cdFx0XHRcdFtmaXJzdF09XCIoY3VycmVudFBhZ2UoKSAtIDEpICogcGFnZVNpemUoKVwiXHJcblx0XHRcdFx0W3Jvd3NdPVwicGFnZVNpemUoKVwiXHJcblx0XHRcdFx0W3RvdGFsUmVjb3Jkc109XCJ0b3RhbEl0ZW1zKClcIlxyXG5cdFx0XHRcdFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXHJcblx0XHRcdFx0W2N1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGVdPVwidCgncGFnaW5hdG9yVGVtcGxhdGUnKVwiXHJcblx0XHRcdFx0W3Nob3dGaXJzdExhc3RJY29uXT1cImZhbHNlXCJcclxuXHRcdFx0XHRbc2hvd1BhZ2VMaW5rc109XCJmYWxzZVwiXHJcblx0XHRcdFx0KG9uUGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiPlxyXG5cdFx0XHQ8L3AtcGFnaW5hdG9yPlxyXG5cdFx0PC9kaXY+XHJcblx0PC9kaXY+XHJcblxyXG5cdDxwLWNvbmZpcm1EaWFsb2c+PC9wLWNvbmZpcm1EaWFsb2c+XHJcbjwvcC1zaWRlYmFyPlxyXG4iXX0=
217
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmF2b3JpdGUtcGFnZXMtc2lkZWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3RoZW1lL2xheW91dC9hcHAvZmF2b3JpdGUtcGFnZXMvZmF2b3JpdGUtcGFnZXMtc2lkZWJhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3RoZW1lL2xheW91dC9hcHAvZmF2b3JpdGUtcGFnZXMvZmF2b3JpdGUtcGFnZXMtc2lkZWJhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFdEQsT0FBTyxFQUFFLG1CQUFtQixFQUFrQixNQUFNLGFBQWEsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFFLGVBQWUsRUFBb0IsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxPQUFPLEVBQUUs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LENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEQsQ0FBQzsrR0F0TlcsNkJBQTZCO21HQUE3Qiw2QkFBNkIseUVBRjlCLENBQUMsbUJBQW1CLEVBQUUsYUFBYSxDQUFDLDBCQ3hDaEQsb3JJQThHQSxpbEZEbkZFLFlBQVksOEJBQ1osYUFBYSxtZEFDYixpQkFBaUIsK0lBQ2pCLG1CQUFtQixvbUJBQ25CLGVBQWUscWhCQUNmLG1CQUFtQiwrQkFDbkIsZUFBZSw2TkFDZixlQUFlLGdPQUNmLGFBQWEsc1hBQ2IsaUJBQWlCOzs0RkFNTiw2QkFBNkI7a0JBbkJ6QyxTQUFTO2lDQUNHLElBQUksWUFDTiw0QkFBNEIsV0FDN0I7d0JBQ1IsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGlCQUFpQjt3QkFDakIsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsZUFBZTt3QkFDZixlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsaUJBQWlCO3FCQUNqQixhQUdVLENBQUMsbUJBQW1CLEVBQUUsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIGVmZmVjdCwgc2lnbmFsLCBjb21wdXRlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcclxuXHJcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBDb25maXJtRGlhbG9nTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9jb25maXJtZGlhbG9nJztcclxuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ01vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IFBhZ2luYXRvck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgU2Nyb2xsUGFuZWxNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Njcm9sbHBhbmVsJztcclxuaW1wb3J0IHsgU2lkZWJhck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvc2lkZWJhcic7XHJcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xyXG5cclxuaW1wb3J0IHsgVHJhbnNsb2NvTW9kdWxlLCBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSAnQG5nbmVhdC90cmFuc2xvY28nO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ2FyaWwvdWkvYnV0dG9uJztcclxuXHJcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2FwcC5sYXlvdXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEZhdm9yaXRlUGFnZVJlc3BvbnNlRFRPLCBGYXZvcml0ZVBhZ2VzU2VydmljZSB9IGZyb20gJy4vZmF2b3JpdGUtcGFnZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IEFkZEVkaXRGYXZvcml0ZU1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9tb2RhbHMvYWRkLWVkaXQtZmF2b3JpdGUtbW9kYWwvYWRkLWVkaXQtZmF2b3JpdGUtbW9kYWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9udEF3ZXNvbWVNb2R1bGUgfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7IHNvbGlkSWNvbnMgfSBmcm9tICdhcmlsL3V0aWwvbGliJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHN0YW5kYWxvbmU6IHRydWUsXHJcblx0c2VsZWN0b3I6ICdhcHAtZmF2b3JpdGUtcGFnZXMtc2lkZWJhcicsXHJcblx0aW1wb3J0czogW1xyXG5cdFx0Q29tbW9uTW9kdWxlLFxyXG5cdFx0U2lkZWJhck1vZHVsZSxcclxuXHRcdFNjcm9sbFBhbmVsTW9kdWxlLFxyXG5cdFx0Q29uZmlybURpYWxvZ01vZHVsZSxcclxuXHRcdFBhZ2luYXRvck1vZHVsZSxcclxuXHRcdER5bmFtaWNEaWFsb2dNb2R1bGUsXHJcblx0XHRCdXR0b25Db21wb25lbnQsXHJcblx0XHRUcmFuc2xvY29Nb2R1bGUsXHJcblx0XHRUb29sdGlwTW9kdWxlLFxyXG5cdFx0Rm9udEF3ZXNvbWVNb2R1bGVcclxuXHRdLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9mYXZvcml0ZS1wYWdlcy1zaWRlYmFyLmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi9mYXZvcml0ZS1wYWdlcy1zaWRlYmFyLmNvbXBvbmVudC5zY3NzJ10sXHJcblx0cHJvdmlkZXJzOiBbQ29uZmlybWF0aW9uU2VydmljZSwgRGlhbG9nU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEZhdm9yaXRlUGFnZXNTaWRlYmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHRmYXZvcml0ZVBhZ2VzID0gc2lnbmFsPEZhdm9yaXRlUGFnZVJlc3BvbnNlRFRPW10+KFtdKTtcclxuXHRpc0N1cnJlbnRQYWdlRmF2b3JpdGVkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcclxuXHRzb2xpZEljb25zID0gc29saWRJY29ucztcclxuXHRjdXJyZW50UGFnZSA9IHNpZ25hbDxudW1iZXI+KDEpO1xyXG5cdHBhZ2VTaXplID0gc2lnbmFsPG51bWJlcj4oMTApO1xyXG5cdHRvdGFsSXRlbXMgPSBzaWduYWw8bnVtYmVyPigwKTtcclxuXHR0b3RhbFBhZ2VzID0gc2lnbmFsPG51bWJlcj4oMCk7XHJcblx0YWxsRmF2b3JpdGVQYWdlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZmF2b3JpdGVQYWdlc1NlcnZpY2UuYWxsRmF2b3JpdGVQYWdlcygpKTtcclxuXHJcblx0cHJpdmF0ZSBzdWJqZWN0cyA9IHtcclxuXHRcdGxvYWRBbGxGYXZvcml0ZXM6IG5ldyBTdWJqZWN0PHZvaWQ+KCksXHJcblx0XHRkZWxldGVGYXZvcml0ZTogbmV3IFN1YmplY3Q8bnVtYmVyPigpXHJcblx0fTtcclxuXHJcblx0bG9hZEFsbEZhdm9yaXRlc1NlcnZpY2UgPSB0b1NpZ25hbChcclxuXHRcdHRoaXMuc3ViamVjdHMubG9hZEFsbEZhdm9yaXRlcy5waXBlKFxyXG5cdFx0XHRzd2l0Y2hNYXAoKCkgPT5cclxuXHRcdFx0XHR0aGlzLmZhdm9yaXRlUGFnZXNTZXJ2aWNlLmZpbHRlckZhdm9yaXRlUGFnZXMoe1xyXG5cdFx0XHRcdFx0cGFnZVNpemU6IDEwMDAsXHJcblx0XHRcdFx0XHRwYWdlTnVtYmVyOiAxXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KVxyXG5cdFx0KVxyXG5cdCk7XHJcblxyXG5cdGRlbGV0ZUZhdm9yaXRlU2VydmljZSA9IHRvU2lnbmFsKFxyXG5cdFx0dGhpcy5zdWJqZWN0cy5kZWxldGVGYXZvcml0ZS5waXBlKHN3aXRjaE1hcCgoaWQpID0+IHRoaXMuZmF2b3JpdGVQYWdlc1NlcnZpY2UuZGVsZXRlRmF2b3JpdGVQYWdlKGlkKSkpXHJcblx0KTtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwdWJsaWMgbGF5b3V0U2VydmljZTogTGF5b3V0U2VydmljZSxcclxuXHRcdHByaXZhdGUgZmF2b3JpdGVQYWdlc1NlcnZpY2U6IEZhdm9yaXRlUGFnZXNTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBtZXNzYWdlU2VydmljZTogTWVzc2FnZVNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIHRyYW5zbG9jb1NlcnZpY2U6IFRyYW5zbG9jb1NlcnZpY2VcclxuXHQpIHtcclxuXHRcdHRoaXMuaW5pdGlhbGl6ZUVmZmVjdHMoKTtcclxuXHR9XHJcblxyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5sb2FkRmF2b3JpdGVQYWdlcygpO1xyXG5cdFx0dGhpcy5jaGVja0N1cnJlbnRQYWdlU3RhdHVzKCk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGluaXRpYWxpemVFZmZlY3RzKCk6IHZvaWQge1xyXG5cdFx0ZWZmZWN0KFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VydmljZSA9IHRoaXMubG9hZEFsbEZhdm9yaXRlc1NlcnZpY2UoKTtcclxuXHRcdFx0XHRpZiAoc2VydmljZT8ucmVzcG9uc2UpIHtcclxuXHRcdFx0XHRcdHRoaXMuZmF2b3JpdGVQYWdlc1NlcnZpY2UuYWxsRmF2b3JpdGVQYWdlcy5zZXQoc2VydmljZS5yZXNwb25zZS5yZXN1bHQpO1xyXG5cdFx0XHRcdFx0dGhpcy50b3RhbEl0ZW1zLnNldChzZXJ2aWNlLnJlc3BvbnNlLnJlc3VsdC5sZW5ndGgpO1xyXG5cdFx0XHRcdFx0dGhpcy51cGRhdGVDbGllbnRTaWRlUGFnaW5hdGlvbigpO1xyXG5cdFx0XHRcdFx0dGhpcy5jaGVja0N1cnJlbnRQYWdlU3RhdHVzKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cclxuXHRcdCk7XHJcblxyXG5cdFx0ZWZmZWN0KFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2VydmljZSA9IHRoaXMuZGVsZXRlRmF2b3JpdGVTZXJ2aWNlKCk7XHJcblx0XHRcdFx0aWYgKHNlcnZpY2U/LnJlc3BvbnNlKSB7XHJcblx0XHRcdFx0XHR0aGlzLmxvYWRGYXZvcml0ZVBhZ2VzKCk7XHJcblx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7XHJcblx0XHRcdFx0XHRcdHNldmVyaXR5OiAnc3VjY2VzcycsXHJcblx0XHRcdFx0XHRcdHN1bW1hcnk6IHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ2Zhdm9yaXRlUGFnZXMuc3VjY2VzcycpLFxyXG5cdFx0XHRcdFx0XHRkZXRhaWw6IHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ2Zhdm9yaXRlUGFnZXMuZGVsZXRlZFN1Y2Nlc3NmdWxseScpLFxyXG5cdFx0XHRcdFx0XHRrZXk6ICd0b2FzdC1yb290J1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiB0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuZmF2b3JpdGVQYWdlc1NpZGViYXJWaXNpYmxlO1xyXG5cdH1cclxuXHJcblx0c2V0IHZpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcclxuXHRcdHRoaXMubGF5b3V0U2VydmljZS5zdGF0ZS5mYXZvcml0ZVBhZ2VzU2lkZWJhclZpc2libGUgPSB2YWx1ZTtcclxuXHRcdGlmICh2YWx1ZSkge1xyXG5cdFx0XHR0aGlzLmNoZWNrQ3VycmVudFBhZ2VTdGF0dXMoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgbG9hZEZhdm9yaXRlUGFnZXMoKTogdm9pZCB7XHJcblx0XHR0aGlzLnN1YmplY3RzLmxvYWRBbGxGYXZvcml0ZXMubmV4dCgpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB1cGRhdGVDbGllbnRTaWRlUGFnaW5hdGlvbigpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGFsbEZhdm9yaXRlcyA9IHRoaXMuYWxsRmF2b3JpdGVQYWdlcygpO1xyXG5cdFx0Y29uc3QgdG90YWxJdGVtcyA9IGFsbEZhdm9yaXRlcy5sZW5ndGg7XHJcblx0XHRjb25zdCBwYWdlU2l6ZSA9IHRoaXMucGFnZVNpemUoKTtcclxuXHRcdGNvbnN0IGN1cnJlbnRQYWdlID0gdGhpcy5jdXJyZW50UGFnZSgpO1xyXG5cclxuXHRcdGNvbnN0IHRvdGFsUGFnZXMgPSBNYXRoLmNlaWwodG90YWxJdGVtcyAvIHBhZ2VTaXplKTtcclxuXHRcdHRoaXMudG90YWxQYWdlcy5zZXQodG90YWxQYWdlcyk7XHJcblxyXG5cdFx0Y29uc3Qgc3RhcnRJbmRleCA9IChjdXJyZW50UGFnZSAtIDEpICogcGFnZVNpemU7XHJcblx0XHRjb25zdCBlbmRJbmRleCA9IE1hdGgubWluKHN0YXJ0SW5kZXggKyBwYWdlU2l6ZSwgdG90YWxJdGVtcyk7XHJcblxyXG5cdFx0Y29uc3QgY3VycmVudFBhZ2VEYXRhID0gYWxsRmF2b3JpdGVzLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcclxuXHRcdHRoaXMuZmF2b3JpdGVQYWdlcy5zZXQoY3VycmVudFBhZ2VEYXRhKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2hlY2tDdXJyZW50UGFnZVN0YXR1cygpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGN1cnJlbnRQYXRoID0gdGhpcy5mYXZvcml0ZVBhZ2VzU2VydmljZS5nZXRDdXJyZW50Um91dGVQYXRoKCk7XHJcblx0XHRjb25zdCBhbGxGYXZvcml0ZXMgPSB0aGlzLmFsbEZhdm9yaXRlUGFnZXMoKTtcclxuXHRcdGNvbnN0IGlzRm91bmQgPSBhbGxGYXZvcml0ZXMuc29tZSgoZmF2KSA9PiBmYXYudXJsID09PSBjdXJyZW50UGF0aCk7XHJcblxyXG5cdFx0dGhpcy5pc0N1cnJlbnRQYWdlRmF2b3JpdGVkLnNldChpc0ZvdW5kKTtcclxuXHR9XHJcblxyXG5cdGFkZEN1cnJlbnRQYWdlVG9GYXZvcml0ZXMoKTogdm9pZCB7XHJcblx0XHRjb25zdCBjdXJyZW50UGF0aCA9IHRoaXMuZmF2b3JpdGVQYWdlc1NlcnZpY2UuZ2V0Q3VycmVudFJvdXRlUGF0aCgpO1xyXG5cclxuXHRcdGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKEFkZEVkaXRGYXZvcml0ZU1vZGFsQ29tcG9uZW50LCB7XHJcblx0XHRcdGhlYWRlcjogdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgnZmF2b3JpdGVQYWdlcy5hZGRUb0Zhdm9yaXRlcycpLFxyXG5cdFx0XHR3aWR0aDogJzUwMHB4JyxcclxuXHRcdFx0bW9kYWw6IHRydWUsXHJcblx0XHRcdGNsb3NhYmxlOiB0cnVlLFxyXG5cdFx0XHRkYXRhOiB7XHJcblx0XHRcdFx0bW9kZTogJ2FkZCcsXHJcblx0XHRcdFx0dXJsOiBjdXJyZW50UGF0aFxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHRyZWYub25DbG9zZS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG5cdFx0XHRpZiAocmVzdWx0Py5zdGF0dXMgPT09ICdzdWNjZXNzJykge1xyXG5cdFx0XHRcdHRoaXMubG9hZEZhdm9yaXRlUGFnZXMoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVDdXJyZW50UGFnZUZyb21GYXZvcml0ZXMoKTogdm9pZCB7XHJcblx0XHRjb25zdCBjdXJyZW50UGF0aCA9IHRoaXMuZmF2b3JpdGVQYWdlc1NlcnZpY2UuZ2V0Q3VycmVudFJvdXRlUGF0aCgpO1xyXG5cdFx0Y29uc3QgZmF2b3JpdGVzID0gdGhpcy5mYXZvcml0ZVBhZ2VzKCk7XHJcblx0XHRjb25zdCBjdXJyZW50RmF2b3JpdGUgPSBmYXZvcml0ZXMuZmluZCgoZmF2KSA9PiBmYXYudXJsID09PSBjdXJyZW50UGF0aCk7XHJcblxyXG5cdFx0aWYgKGN1cnJlbnRGYXZvcml0ZSkge1xyXG5cdFx0XHR0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcblx0XHRcdFx0bWVzc2FnZTogYCcke2N1cnJlbnRGYXZvcml0ZS5sYWJlbH0nIGAgKyB0aGlzLnRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKCdmYXZvcml0ZVBhZ2VzLmNvbmZpcm1EZWxldGUnKSxcclxuXHRcdFx0XHRoZWFkZXI6IHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ2Zhdm9yaXRlUGFnZXMuZGVsZXRlQ29uZmlybVRpdGxlJyksXHJcblx0XHRcdFx0aWNvbjogJ3BpIHBpLWluZm8tY2lyY2xlJyxcclxuXHRcdFx0XHRhY2NlcHRMYWJlbDogdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgnYWNjZXB0QnV0dG9uTGFiZWwnKSxcclxuXHRcdFx0XHRyZWplY3RMYWJlbDogdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgncmVqZWN0QnV0dG9uTGFiZWwnKSxcclxuXHRcdFx0XHRhY2NlcHRCdXR0b25TdHlsZUNsYXNzOiAncC1idXR0b24tc3VjY2VzcycsXHJcblx0XHRcdFx0cmVqZWN0QnV0dG9uU3R5bGVDbGFzczogJ3AtYnV0dG9uLWRhbmdlcicsXHJcblx0XHRcdFx0YWNjZXB0OiAoKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnN1YmplY3RzLmRlbGV0ZUZhdm9yaXRlLm5leHQoY3VycmVudEZhdm9yaXRlLmlkKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZWRpdEZhdm9yaXRlKGZhdm9yaXRlOiBGYXZvcml0ZVBhZ2VSZXNwb25zZURUTywgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcblx0XHRjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihBZGRFZGl0RmF2b3JpdGVNb2RhbENvbXBvbmVudCwge1xyXG5cdFx0XHRoZWFkZXI6IHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ2Zhdm9yaXRlUGFnZXMuZWRpdEZhdm9yaXRlJyksXHJcblx0XHRcdHdpZHRoOiAnNTAwcHgnLFxyXG5cdFx0XHRtb2RhbDogdHJ1ZSxcclxuXHRcdFx0Y2xvc2FibGU6IHRydWUsXHJcblx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRtb2RlOiAnZWRpdCcsXHJcblx0XHRcdFx0ZmF2b3JpdGU6IGZhdm9yaXRlXHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdHJlZi5vbkNsb3NlLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcblx0XHRcdGlmIChyZXN1bHQ/LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XHJcblx0XHRcdFx0dGhpcy5sb2FkRmF2b3JpdGVQYWdlcygpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGRlbGV0ZUZhdm9yaXRlKGZhdm9yaXRlOiBGYXZvcml0ZVBhZ2VSZXNwb25zZURUTywgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcblx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcblx0XHR0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybSh7XHJcblx0XHRcdHRhcmdldDogZXZlbnQudGFyZ2V0IGFzIEV2ZW50VGFyZ2V0LFxyXG5cdFx0XHRtZXNzYWdlOiBgJyR7ZmF2b3JpdGUubGFiZWx9JyBgICsgdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgnZmF2b3JpdGVQYWdlcy5jb25maXJtRGVsZXRlJyksXHJcblx0XHRcdGhlYWRlcjogdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgnZmF2b3JpdGVQYWdlcy5kZWxldGVDb25maXJtVGl0bGUnKSxcclxuXHRcdFx0aWNvbjogJ3BpIHBpLWluZm8tY2lyY2xlJyxcclxuXHRcdFx0YWNjZXB0TGFiZWw6IHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ2FjY2VwdEJ1dHRvbkxhYmVsJyksXHJcblx0XHRcdHJlamVjdExhYmVsOiB0aGlzLnRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKCdyZWplY3RCdXR0b25MYWJlbCcpLFxyXG5cdFx0XHRhY2NlcHRCdXR0b25TdHlsZUNsYXNzOiAncC1idXR0b24tc3VjY2VzcycsXHJcblx0XHRcdHJlamVjdEJ1dHRvblN0eWxlQ2xhc3M6ICdwLWJ1dHRvbi1kYW5nZXInLFxyXG5cdFx0XHRhY2NlcHQ6ICgpID0+IHtcclxuXHRcdFx0XHR0aGlzLnN1YmplY3RzLmRlbGV0ZUZhdm9yaXRlLm5leHQoZmF2b3JpdGUuaWQpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdG5hdmlnYXRlVG9GYXZvcml0ZShmYXZvcml0ZTogRmF2b3JpdGVQYWdlUmVzcG9uc2VEVE8pOiB2b2lkIHtcclxuXHRcdHRoaXMuZmF2b3JpdGVQYWdlc1NlcnZpY2UubmF2aWdhdGVUb0Zhdm9yaXRlUGFnZShmYXZvcml0ZSk7XHJcblx0XHR0aGlzLnZpc2libGUgPSBmYWxzZTtcclxuXHR9XHJcblxyXG5cdHRyYWNrQnlGYXZvcml0ZUlkKGluZGV4OiBudW1iZXIsIGZhdm9yaXRlOiBGYXZvcml0ZVBhZ2VSZXNwb25zZURUTyk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gZmF2b3JpdGUuaWQ7XHJcblx0fVxyXG5cclxuXHRvblBhZ2VDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG5cdFx0dGhpcy5jdXJyZW50UGFnZS5zZXQoZXZlbnQucGFnZSArIDEpO1xyXG5cdFx0dGhpcy5wYWdlU2l6ZS5zZXQoZXZlbnQucm93cyk7XHJcblx0XHR0aGlzLnVwZGF0ZUNsaWVudFNpZGVQYWdpbmF0aW9uKCk7IC8vIFVwZGF0ZSBwYWdpbmF0aW9uIGNsaWVudC1zaWRlLCBubyBBUEkgY2FsbFxyXG5cdH1cclxuXHJcblx0Z2V0RnVsbFVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5mYXZvcml0ZVBhZ2VzU2VydmljZS5nZXRGdWxsVXJsKHVybCk7XHJcblx0fVxyXG5cclxuXHJcbn1cclxuIiwiPHAtc2lkZWJhclxyXG5cdFsodmlzaWJsZSldPVwidmlzaWJsZVwiXHJcblx0cG9zaXRpb249XCJyaWdodFwiXHJcblx0W3RyYW5zaXRpb25PcHRpb25zXT1cIicuM3MgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSknXCJcclxuXHRzdHlsZUNsYXNzPVwibGF5b3V0LWZhdm9yaXRlLXBhZ2VzLXNpZGViYXIgdy1mdWxsIHNtOnctMzByZW1cIlxyXG5cdCp0cmFuc2xvY289XCJsZXQgdDsgcmVhZDogJ2Zhdm9yaXRlUGFnZXMnXCI+XHJcblx0PG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxyXG5cdFx0PGRpdiBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHctZnVsbFwiPlxyXG5cdFx0XHQ8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuXHRcdFx0XHQ8aSBjbGFzcz1cInBpIHBpLWhlYXJ0IHRleHQtcHJpbWFyeSB0ZXh0LXhsXCI+PC9pPlxyXG5cdFx0XHRcdDxzcGFuIGNsYXNzPVwiZm9udC1ib2xkIHRleHQtbGdcIj57eyB0KCdmYXZvcml0ZVBhZ2VzJykgfX08L3NwYW4+XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0PC9kaXY+XHJcblx0PC9uZy10ZW1wbGF0ZT5cclxuXHJcblx0PGRpdiBjbGFzcz1cImZhdm9yaXRlLXBhZ2VzLWNvbnRlbnRcIj5cclxuXHRcdEBpZiAoaXNDdXJyZW50UGFnZUZhdm9yaXRlZCgpKSB7XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJjdXJyZW50LWZhdm9yaXRlZC1tZXNzYWdlXCI+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cIm1lc3NhZ2UtY29udGVudFwiPlxyXG5cdFx0XHRcdFx0PGkgY2xhc3M9XCJwaSBwaS1jaGVjay1jaXJjbGUgdGV4dC1ncmVlbi01MDBcIj48L2k+XHJcblx0XHRcdFx0XHQ8c3Bhbj57eyB0KCdjdXJyZW50UGFnZUZhdm9yaXRlZCcpIH19PC9zcGFuPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdH1cclxuXHJcblx0XHQ8ZGl2IGNsYXNzPVwiYWRkLXNlY3Rpb25cIj5cclxuXHRcdFx0QGlmICghaXNDdXJyZW50UGFnZUZhdm9yaXRlZCgpKSB7XHJcblx0XHRcdFx0PGFyaWwtYnV0dG9uXHJcblx0XHRcdFx0XHRbbGFiZWxdPVwidCgnYWRkQ3VycmVudFBhZ2UnKVwiXHJcblx0XHRcdFx0XHRpY29uPVwiUExVU1wiXHJcblx0XHRcdFx0XHRjb2xvcj1cInByaW1hcnlcIlxyXG5cdFx0XHRcdFx0c2l6ZT1cInNtXCJcclxuXHRcdFx0XHRcdChjbGlja0V2ZW50KT1cImFkZEN1cnJlbnRQYWdlVG9GYXZvcml0ZXMoKVwiPlxyXG5cdFx0XHRcdDwvYXJpbC1idXR0b24+XHJcblx0XHRcdH0gQGVsc2Uge1xyXG5cdFx0XHRcdDxhcmlsLWJ1dHRvblxyXG5cdFx0XHRcdFx0W2xhYmVsXT1cInQoJ3JlbW92ZUN1cnJlbnRQYWdlJylcIlxyXG5cdFx0XHRcdFx0aWNvbj1cIlRJTUVTXCJcclxuXHRcdFx0XHRcdGNvbG9yPVwiZGFuZ2VyXCJcclxuXHRcdFx0XHRcdHNpemU9XCJzbVwiXHJcblx0XHRcdFx0XHQoY2xpY2tFdmVudCk9XCJyZW1vdmVDdXJyZW50UGFnZUZyb21GYXZvcml0ZXMoKVwiPlxyXG5cdFx0XHRcdDwvYXJpbC1idXR0b24+XHJcblx0XHRcdH1cclxuXHRcdDwvZGl2PlxyXG5cclxuXHRcdEBpZiAoZmF2b3JpdGVQYWdlcygpLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0PGRpdiBjbGFzcz1cImZhdm9yaXRlcy1saXN0XCI+XHJcblx0XHRcdFx0PHAtc2Nyb2xsUGFuZWwgW3N0eWxlXT1cInsgd2lkdGg6ICcxMDAlJywgaGVpZ2h0OiAnMTAwJScgfVwiPlxyXG5cdFx0XHRcdFx0PGRpdiBjbGFzcz1cImZhdm9yaXRlcy1pdGVtc1wiPlxyXG5cdFx0XHRcdFx0XHRAZm9yIChmYXZvcml0ZSBvZiBmYXZvcml0ZVBhZ2VzKCk7IHRyYWNrIHRyYWNrQnlGYXZvcml0ZUlkKCRpbmRleCwgZmF2b3JpdGUpKSB7XHJcblx0XHRcdFx0XHRcdFx0PGRpdlxyXG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJmYXZvcml0ZS1pdGVtXCJcclxuXHRcdFx0XHRcdFx0XHRcdFtjbGFzcy5kZWZhdWx0LWl0ZW1dPVwiZmF2b3JpdGUuaWQgPCAwXCJcclxuXHRcdFx0XHRcdFx0XHRcdChjbGljayk9XCJuYXZpZ2F0ZVRvRmF2b3JpdGUoZmF2b3JpdGUpXCJcclxuXHRcdFx0XHRcdFx0XHRcdFtwVG9vbHRpcF09XCJnZXRGdWxsVXJsKGZhdm9yaXRlLnVybClcIlxyXG5cdFx0XHRcdFx0XHRcdFx0dG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XHJcblx0XHRcdFx0XHRcdFx0XHQ8ZGl2IGNsYXNzPVwiaXRlbS1jb250ZW50XCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJpdGVtLWhlYWRlclwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJpdGVtLXRpdGxlXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8aSBjbGFzcz1cInBpIHBpLWV4dGVybmFsLWxpbmsgdGV4dC1wcmltYXJ5IG1yLTJcIj48L2k+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cInRpdGxlLXRleHRcIj57eyBmYXZvcml0ZS5sYWJlbCB9fTwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2Rpdj5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8ZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGZhLWljb25cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W2ljb25dPVwic29saWRJY29ucy5mYVBlblRvU3F1YXJlXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT1cImxnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJjb2xvcjogdmFyKC0teWVsbG93LTUwMClcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImNvbC0yIGN1cnNvci1wb2ludGVyXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImVkaXRGYXZvcml0ZShmYXZvcml0ZSwgJGV2ZW50KVwiPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9mYS1pY29uPlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PGZhLWljb25cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0W2ljb25dPVwic29saWRJY29ucy5mYVRyYXNoXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2l6ZT1cImxnXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c3R5bGU9XCJjb2xvcjogdmFyKC0tcmVkLTUwMClcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cImNvbC0yIGN1cnNvci1wb2ludGVyXCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KGNsaWNrKT1cImRlbGV0ZUZhdm9yaXRlKGZhdm9yaXRlLCAkZXZlbnQpXCI+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L2ZhLWljb24+XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdFx0PC9kaXY+XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDwvcC1zY3JvbGxQYW5lbD5cclxuXHRcdFx0PC9kaXY+XHJcblx0XHR9IEBlbHNlIHtcclxuXHRcdFx0PGRpdiBjbGFzcz1cImVtcHR5LXN0YXRlXCI+XHJcblx0XHRcdFx0PGRpdiBjbGFzcz1cImVtcHR5LWNvbnRlbnRcIj5cclxuXHRcdFx0XHRcdDxpIGNsYXNzPVwicGkgcGktaGVhcnQgZW1wdHktaWNvblwiPjwvaT5cclxuXHRcdFx0XHRcdDxoMyBjbGFzcz1cImVtcHR5LXRpdGxlXCI+e3sgdCgnbm9GYXZvcml0ZXMnKSB9fTwvaDM+XHJcblx0XHRcdFx0XHQ8cCBjbGFzcz1cImVtcHR5LW1lc3NhZ2VcIj57eyB0KCdzdGFydEFkZGluZ0Zhdm9yaXRlcycpIH19PC9wPlxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdH1cclxuXHRcdDxkaXY+XHJcblx0XHRcdDxwLXBhZ2luYXRvclxyXG5cdFx0XHRcdFtmaXJzdF09XCIoY3VycmVudFBhZ2UoKSAtIDEpICogcGFnZVNpemUoKVwiXHJcblx0XHRcdFx0W3Jvd3NdPVwicGFnZVNpemUoKVwiXHJcblx0XHRcdFx0W3RvdGFsUmVjb3Jkc109XCJ0b3RhbEl0ZW1zKClcIlxyXG5cdFx0XHRcdFtzaG93Q3VycmVudFBhZ2VSZXBvcnRdPVwidHJ1ZVwiXHJcblx0XHRcdFx0W2N1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGVdPVwidCgncGFnaW5hdG9yVGVtcGxhdGUnKVwiXHJcblx0XHRcdFx0W3Nob3dGaXJzdExhc3RJY29uXT1cImZhbHNlXCJcclxuXHRcdFx0XHRbc2hvd1BhZ2VMaW5rc109XCJmYWxzZVwiXHJcblx0XHRcdFx0KG9uUGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiPlxyXG5cdFx0XHQ8L3AtcGFnaW5hdG9yPlxyXG5cdFx0PC9kaXY+XHJcblx0PC9kaXY+XHJcblxyXG5cdDxwLWNvbmZpcm1EaWFsb2c+PC9wLWNvbmZpcm1EaWFsb2c+XHJcbjwvcC1zaWRlYmFyPlxyXG4iXX0=
@@ -38,8 +38,8 @@ export class FavoritePagesService extends RestClient {
38
38
  deleteFavoritePage(id) {
39
39
  return new Observable();
40
40
  }
41
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: FavoritePagesService, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
42
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: FavoritePagesService, providedIn: 'root' }); }
41
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FavoritePagesService, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
42
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FavoritePagesService, providedIn: 'root' }); }
43
43
  }
44
44
  __decorate([
45
45
  ServiceCall(HTTPMethods.POST, ProxyTypes.ClientSide, favoritePageEndpoints.filter)
@@ -53,8 +53,8 @@ __decorate([
53
53
  __decorate([
54
54
  ServiceCall(HTTPMethods.DELETE, ProxyTypes.ClientSide, favoritePageEndpoints.favorite)
55
55
  ], FavoritePagesService.prototype, "deleteFavoritePage", null);
56
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: FavoritePagesService, decorators: [{
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: FavoritePagesService, decorators: [{
57
57
  type: Injectable,
58
58
  args: [{ providedIn: 'root' }]
59
59
  }], ctorParameters: () => [{ type: i1.Router }], propDecorators: { filterFavoritePages: [], saveFavoritePage: [], updateFavoritePage: [], deleteFavoritePage: [] } });
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmF2b3JpdGUtcGFnZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvdGhlbWUvbGF5b3V0L2FwcC9mYXZvcml0ZS1wYWdlcy9mYXZvcml0ZS1wYWdlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxDLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQXdDLE1BQU0sV0FBVyxDQUFDOzs7QUF3Q25ILGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRztJQUNwQyxNQUFNLEVBQUUsdUJBQXVCO0lBQy9CLFFBQVEsRUFBRSxnQkFBZ0I7Q0FDMUIsQ0FBQztBQUdGLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxVQUFVO0lBSW5ELFlBQW9CLE1BQWM7UUFDakMsS0FBSyxFQUFFLENBQUM7UUFEVyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBSHpCLFdBQU0sR0FBOEMsRUFBRSxDQUFDO1FBQ2hFLHFCQUFnQixHQUFHLE1BQU0sQ0FBNEIsRUFBRSxDQUFDLENBQUM7SUFJekQsQ0FBQztJQUVELG1CQUFtQjtRQUNsQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxRQUFpQztRQUN2RCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBVztRQUNyQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUN2QyxPQUFPLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUM1RCxDQUFDO0lBS0QsbUJBQW1CLENBQUMsSUFBa0M7UUFDckQsT0FBTyxJQUFJLFVBQVUsRUFBNkQsQ0FBQztJQUNwRixDQUFDO0lBR0QsZ0JBQWdCLENBQUMsSUFBZ0M7UUFDaEQsT0FBTyxJQUFJLFVBQVUsRUFBNEMsQ0FBQztJQUNuRSxDQUFDO0lBR0Qsa0JBQWtCLENBQUMsRUFBVSxFQUFFLElBQWtDO1FBQ2hFLE9BQU8sSUFBSSxVQUFVLEVBQTRDLENBQUM7SUFDbkUsQ0FBQztJQUdELGtCQUFrQixDQUFDLEVBQVU7UUFDNUIsT0FBTyxJQUFJLFVBQVUsRUFBNEIsQ0FBQztJQUNuRCxDQUFDOzhHQXpDVyxvQkFBb0I7a0hBQXBCLG9CQUFvQixjQURQLE1BQU07O0FBeUIvQjtJQURDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUUscUJBQXFCLENBQUMsTUFBTSxDQUFDOytEQUdsRjtBQUdEO0lBREMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRSxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7NERBR3BGO0FBR0Q7SUFEQyxXQUFXLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsVUFBVSxFQUFFLHFCQUFxQixDQUFDLFFBQVEsQ0FBQzs4REFHbkY7QUFHRDtJQURDLFdBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUUscUJBQXFCLENBQUMsUUFBUSxDQUFDOzhEQUd0RjsyRkF6Q1csb0JBQW9CO2tCQURoQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTsyRUF5QmpDLG1CQUFtQixNQUtuQixnQkFBZ0IsTUFLaEIsa0JBQWtCLE1BS2xCLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgSFRUUE1ldGhvZHMsIFByb3h5VHlwZXMsIFJlc3RDbGllbnQsIFNlcnZpY2VDYWxsLCBTZXJ2aWNlQ2FsbFN0YXRlTWFwLCBTZXJ2aWNlUmVzcG9uc2UgfSBmcm9tICdhcmlsL2h0dHAnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGYXZvcml0ZVBhZ2VSZXNwb25zZURUTyB7XHJcblx0aWQ6IG51bWJlcjtcclxuXHRjcmVhdG9yOiBzdHJpbmc7XHJcblx0Y3JlYXRlZDogbnVtYmVyO1xyXG5cdHVwZGF0ZXI6IHN0cmluZztcclxuXHR1cGRhdGVkOiBudW1iZXI7XHJcblx0dmVyc2lvbjogbnVtYmVyO1xyXG5cdHVzZXJuYW1lOiBzdHJpbmc7XHJcblx0dXJsOiBzdHJpbmc7XHJcblx0bGFiZWw6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGYXZvcml0ZVBhZ2VTYXZlUmVxdWVzdERUTyB7XHJcblx0dXJsOiBzdHJpbmc7XHJcblx0bGFiZWw6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGYXZvcml0ZVBhZ2VVcGRhdGVSZXF1ZXN0RFRPIHtcclxuXHRsYWJlbDogc3RyaW5nO1xyXG5cdHZlcnNpb246IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGYXZvcml0ZVBhZ2VGaWx0ZXJSZXF1ZXN0RFRPIHtcclxuXHRwYWdlU2l6ZT86IG51bWJlcjtcclxuXHRwYWdlTnVtYmVyPzogbnVtYmVyO1xyXG5cdHNvcnRGaWVsZE5hbWU/OiBzdHJpbmc7XHJcblx0c29ydERpcmVjdGlvbj86IG51bWJlcjsgLy8gMT1BU0MsIDI9REVTQ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlc3VsdERUTzxUPiB7XHJcblx0cmVzdWx0SW5mbzoge1xyXG5cdFx0dG90YWxQYWdlOiBudW1iZXI7XHJcblx0XHR0b3RhbEl0ZW06IG51bWJlcjtcclxuXHR9O1xyXG5cdHJlc3VsdDogVFtdO1xyXG5cdHNlYXJjaEFmdGVyVmFsdWVzOiBhbnlbXTtcclxufVxyXG5cclxuLy8gQVBJIEVuZHBvaW50c1xyXG5leHBvcnQgY29uc3QgZmF2b3JpdGVQYWdlRW5kcG9pbnRzID0ge1xyXG5cdGZpbHRlcjogJ2Zhdm9yaXRlLXBhZ2VzL2ZpbHRlcicsXHJcblx0ZmF2b3JpdGU6ICdmYXZvcml0ZS1wYWdlcydcclxufTtcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBGYXZvcml0ZVBhZ2VzU2VydmljZSBleHRlbmRzIFJlc3RDbGllbnQge1xyXG5cdG92ZXJyaWRlIHN0YXRlczogU2VydmljZUNhbGxTdGF0ZU1hcDxGYXZvcml0ZVBhZ2VzU2VydmljZT4gPSB7fTtcclxuXHRhbGxGYXZvcml0ZVBhZ2VzID0gc2lnbmFsPEZhdm9yaXRlUGFnZVJlc3BvbnNlRFRPW10+KFtdKTtcclxuXHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge1xyXG5cdFx0c3VwZXIoKTtcclxuXHR9XHJcblxyXG5cdGdldEN1cnJlbnRSb3V0ZVBhdGgoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnJvdXRlci51cmw7XHJcblx0fVxyXG5cclxuXHRuYXZpZ2F0ZVRvRmF2b3JpdGVQYWdlKGZhdm9yaXRlOiBGYXZvcml0ZVBhZ2VSZXNwb25zZURUTyk6IHZvaWQge1xyXG5cdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Zhdm9yaXRlLnVybF0pO1xyXG5cdH1cclxuXHJcblx0Z2V0RnVsbFVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XHJcblx0XHRjb25zdCBiYXNlVXJsID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcclxuXHRcdHJldHVybiBgJHtiYXNlVXJsfSR7d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfSR7XCIjXCJ9JHt1cmx9YDtcclxuXHR9XHJcblxyXG5cclxuXHJcblx0QFNlcnZpY2VDYWxsKEhUVFBNZXRob2RzLlBPU1QsIFByb3h5VHlwZXMuQ2xpZW50U2lkZSwgZmF2b3JpdGVQYWdlRW5kcG9pbnRzLmZpbHRlcilcclxuXHRmaWx0ZXJGYXZvcml0ZVBhZ2VzKHBvc3Q6IEZhdm9yaXRlUGFnZUZpbHRlclJlcXVlc3REVE8pIHtcclxuXHRcdHJldHVybiBuZXcgT2JzZXJ2YWJsZTxTZXJ2aWNlUmVzcG9uc2U8U2VhcmNoUmVzdWx0RFRPPEZhdm9yaXRlUGFnZVJlc3BvbnNlRFRPPj4+KCk7XHJcblx0fVxyXG5cclxuXHRAU2VydmljZUNhbGwoSFRUUE1ldGhvZHMuUE9TVCwgUHJveHlUeXBlcy5DbGllbnRTaWRlLCBmYXZvcml0ZVBhZ2VFbmRwb2ludHMuZmF2b3JpdGUpXHJcblx0c2F2ZUZhdm9yaXRlUGFnZShwb3N0OiBGYXZvcml0ZVBhZ2VTYXZlUmVxdWVzdERUTykge1xyXG5cdFx0cmV0dXJuIG5ldyBPYnNlcnZhYmxlPFNlcnZpY2VSZXNwb25zZTxGYXZvcml0ZVBhZ2VSZXNwb25zZURUTz4+KCk7XHJcblx0fVxyXG5cclxuXHRAU2VydmljZUNhbGwoSFRUUE1ldGhvZHMuUFVULCBQcm94eVR5cGVzLkNsaWVudFNpZGUsIGZhdm9yaXRlUGFnZUVuZHBvaW50cy5mYXZvcml0ZSlcclxuXHR1cGRhdGVGYXZvcml0ZVBhZ2UoaWQ6IG51bWJlciwgcG9zdDogRmF2b3JpdGVQYWdlVXBkYXRlUmVxdWVzdERUTykge1xyXG5cdFx0cmV0dXJuIG5ldyBPYnNlcnZhYmxlPFNlcnZpY2VSZXNwb25zZTxGYXZvcml0ZVBhZ2VSZXNwb25zZURUTz4+KCk7XHJcblx0fVxyXG5cclxuXHRAU2VydmljZUNhbGwoSFRUUE1ldGhvZHMuREVMRVRFLCBQcm94eVR5cGVzLkNsaWVudFNpZGUsIGZhdm9yaXRlUGFnZUVuZHBvaW50cy5mYXZvcml0ZSlcclxuXHRkZWxldGVGYXZvcml0ZVBhZ2UoaWQ6IG51bWJlcikge1xyXG5cdFx0cmV0dXJuIG5ldyBPYnNlcnZhYmxlPFNlcnZpY2VSZXNwb25zZTxib29sZWFuPj4oKTtcclxuXHR9XHJcbn1cclxuIl19
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmF2b3JpdGUtcGFnZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvdGhlbWUvbGF5b3V0L2FwcC9mYXZvcml0ZS1wYWdlcy9mYXZvcml0ZS1wYWdlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxDLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQXdDLE1BQU0sV0FBVyxDQUFDOzs7QUF3Q25ILGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRztJQUNwQyxNQUFNLEVBQUUsdUJBQXVCO0lBQy9CLFFBQVEsRUFBRSxnQkFBZ0I7Q0FDMUIsQ0FBQztBQUdGLE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxVQUFVO0lBSW5ELFlBQW9CLE1BQWM7UUFDakMsS0FBSyxFQUFFLENBQUM7UUFEVyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBSHpCLFdBQU0sR0FBOEMsRUFBRSxDQUFDO1FBQ2hFLHFCQUFnQixHQUFHLE1BQU0sQ0FBNEIsRUFBRSxDQUFDLENBQUM7SUFJekQsQ0FBQztJQUVELG1CQUFtQjtRQUNsQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxRQUFpQztRQUN2RCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBVztRQUNyQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUN2QyxPQUFPLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUM1RCxDQUFDO0lBS0QsbUJBQW1CLENBQUMsSUFBa0M7UUFDckQsT0FBTyxJQUFJLFVBQVUsRUFBNkQsQ0FBQztJQUNwRixDQUFDO0lBR0QsZ0JBQWdCLENBQUMsSUFBZ0M7UUFDaEQsT0FBTyxJQUFJLFVBQVUsRUFBNEMsQ0FBQztJQUNuRSxDQUFDO0lBR0Qsa0JBQWtCLENBQUMsRUFBVSxFQUFFLElBQWtDO1FBQ2hFLE9BQU8sSUFBSSxVQUFVLEVBQTRDLENBQUM7SUFDbkUsQ0FBQztJQUdELGtCQUFrQixDQUFDLEVBQVU7UUFDNUIsT0FBTyxJQUFJLFVBQVUsRUFBNEIsQ0FBQztJQUNuRCxDQUFDOytHQXpDVyxvQkFBb0I7bUhBQXBCLG9CQUFvQixjQURQLE1BQU07O0FBeUIvQjtJQURDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUUscUJBQXFCLENBQUMsTUFBTSxDQUFDOytEQUdsRjtBQUdEO0lBREMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLFVBQVUsRUFBRSxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7NERBR3BGO0FBR0Q7SUFEQyxXQUFXLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsVUFBVSxFQUFFLHFCQUFxQixDQUFDLFFBQVEsQ0FBQzs4REFHbkY7QUFHRDtJQURDLFdBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxVQUFVLEVBQUUscUJBQXFCLENBQUMsUUFBUSxDQUFDOzhEQUd0Rjs0RkF6Q1csb0JBQW9CO2tCQURoQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTsyRUF5QmpDLG1CQUFtQixNQUtuQixnQkFBZ0IsTUFLaEIsa0JBQWtCLE1BS2xCLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgSFRUUE1ldGhvZHMsIFByb3h5VHlwZXMsIFJlc3RDbGllbnQsIFNlcnZpY2VDYWxsLCBTZXJ2aWNlQ2FsbFN0YXRlTWFwLCBTZXJ2aWNlUmVzcG9uc2UgfSBmcm9tICdhcmlsL2h0dHAnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGYXZvcml0ZVBhZ2VSZXNwb25zZURUTyB7XHJcblx0aWQ6IG51bWJlcjtcclxuXHRjcmVhdG9yOiBzdHJpbmc7XHJcblx0Y3JlYXRlZDogbnVtYmVyO1xyXG5cdHVwZGF0ZXI6IHN0cmluZztcclxuXHR1cGRhdGVkOiBudW1iZXI7XHJcblx0dmVyc2lvbjogbnVtYmVyO1xyXG5cdHVzZXJuYW1lOiBzdHJpbmc7XHJcblx0dXJsOiBzdHJpbmc7XHJcblx0bGFiZWw6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGYXZvcml0ZVBhZ2VTYXZlUmVxdWVzdERUTyB7XHJcblx0dXJsOiBzdHJpbmc7XHJcblx0bGFiZWw6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGYXZvcml0ZVBhZ2VVcGRhdGVSZXF1ZXN0RFRPIHtcclxuXHRsYWJlbDogc3RyaW5nO1xyXG5cdHZlcnNpb246IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGYXZvcml0ZVBhZ2VGaWx0ZXJSZXF1ZXN0RFRPIHtcclxuXHRwYWdlU2l6ZT86IG51bWJlcjtcclxuXHRwYWdlTnVtYmVyPzogbnVtYmVyO1xyXG5cdHNvcnRGaWVsZE5hbWU/OiBzdHJpbmc7XHJcblx0c29ydERpcmVjdGlvbj86IG51bWJlcjsgLy8gMT1BU0MsIDI9REVTQ1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFJlc3VsdERUTzxUPiB7XHJcblx0cmVzdWx0SW5mbzoge1xyXG5cdFx0dG90YWxQYWdlOiBudW1iZXI7XHJcblx0XHR0b3RhbEl0ZW06IG51bWJlcjtcclxuXHR9O1xyXG5cdHJlc3VsdDogVFtdO1xyXG5cdHNlYXJjaEFmdGVyVmFsdWVzOiBhbnlbXTtcclxufVxyXG5cclxuLy8gQVBJIEVuZHBvaW50c1xyXG5leHBvcnQgY29uc3QgZmF2b3JpdGVQYWdlRW5kcG9pbnRzID0ge1xyXG5cdGZpbHRlcjogJ2Zhdm9yaXRlLXBhZ2VzL2ZpbHRlcicsXHJcblx0ZmF2b3JpdGU6ICdmYXZvcml0ZS1wYWdlcydcclxufTtcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBGYXZvcml0ZVBhZ2VzU2VydmljZSBleHRlbmRzIFJlc3RDbGllbnQge1xyXG5cdG92ZXJyaWRlIHN0YXRlczogU2VydmljZUNhbGxTdGF0ZU1hcDxGYXZvcml0ZVBhZ2VzU2VydmljZT4gPSB7fTtcclxuXHRhbGxGYXZvcml0ZVBhZ2VzID0gc2lnbmFsPEZhdm9yaXRlUGFnZVJlc3BvbnNlRFRPW10+KFtdKTtcclxuXHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikge1xyXG5cdFx0c3VwZXIoKTtcclxuXHR9XHJcblxyXG5cdGdldEN1cnJlbnRSb3V0ZVBhdGgoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLnJvdXRlci51cmw7XHJcblx0fVxyXG5cclxuXHRuYXZpZ2F0ZVRvRmF2b3JpdGVQYWdlKGZhdm9yaXRlOiBGYXZvcml0ZVBhZ2VSZXNwb25zZURUTyk6IHZvaWQge1xyXG5cdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Zhdm9yaXRlLnVybF0pO1xyXG5cdH1cclxuXHJcblx0Z2V0RnVsbFVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XHJcblx0XHRjb25zdCBiYXNlVXJsID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcclxuXHRcdHJldHVybiBgJHtiYXNlVXJsfSR7d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lfSR7XCIjXCJ9JHt1cmx9YDtcclxuXHR9XHJcblxyXG5cclxuXHJcblx0QFNlcnZpY2VDYWxsKEhUVFBNZXRob2RzLlBPU1QsIFByb3h5VHlwZXMuQ2xpZW50U2lkZSwgZmF2b3JpdGVQYWdlRW5kcG9pbnRzLmZpbHRlcilcclxuXHRmaWx0ZXJGYXZvcml0ZVBhZ2VzKHBvc3Q6IEZhdm9yaXRlUGFnZUZpbHRlclJlcXVlc3REVE8pIHtcclxuXHRcdHJldHVybiBuZXcgT2JzZXJ2YWJsZTxTZXJ2aWNlUmVzcG9uc2U8U2VhcmNoUmVzdWx0RFRPPEZhdm9yaXRlUGFnZVJlc3BvbnNlRFRPPj4+KCk7XHJcblx0fVxyXG5cclxuXHRAU2VydmljZUNhbGwoSFRUUE1ldGhvZHMuUE9TVCwgUHJveHlUeXBlcy5DbGllbnRTaWRlLCBmYXZvcml0ZVBhZ2VFbmRwb2ludHMuZmF2b3JpdGUpXHJcblx0c2F2ZUZhdm9yaXRlUGFnZShwb3N0OiBGYXZvcml0ZVBhZ2VTYXZlUmVxdWVzdERUTykge1xyXG5cdFx0cmV0dXJuIG5ldyBPYnNlcnZhYmxlPFNlcnZpY2VSZXNwb25zZTxGYXZvcml0ZVBhZ2VSZXNwb25zZURUTz4+KCk7XHJcblx0fVxyXG5cclxuXHRAU2VydmljZUNhbGwoSFRUUE1ldGhvZHMuUFVULCBQcm94eVR5cGVzLkNsaWVudFNpZGUsIGZhdm9yaXRlUGFnZUVuZHBvaW50cy5mYXZvcml0ZSlcclxuXHR1cGRhdGVGYXZvcml0ZVBhZ2UoaWQ6IG51bWJlciwgcG9zdDogRmF2b3JpdGVQYWdlVXBkYXRlUmVxdWVzdERUTykge1xyXG5cdFx0cmV0dXJuIG5ldyBPYnNlcnZhYmxlPFNlcnZpY2VSZXNwb25zZTxGYXZvcml0ZVBhZ2VSZXNwb25zZURUTz4+KCk7XHJcblx0fVxyXG5cclxuXHRAU2VydmljZUNhbGwoSFRUUE1ldGhvZHMuREVMRVRFLCBQcm94eVR5cGVzLkNsaWVudFNpZGUsIGZhdm9yaXRlUGFnZUVuZHBvaW50cy5mYXZvcml0ZSlcclxuXHRkZWxldGVGYXZvcml0ZVBhZ2UoaWQ6IG51bWJlcikge1xyXG5cdFx0cmV0dXJuIG5ldyBPYnNlcnZhYmxlPFNlcnZpY2VSZXNwb25zZTxib29sZWFuPj4oKTtcclxuXHR9XHJcbn1cclxuIl19