aril 0.0.7 → 0.0.9

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 (339) hide show
  1. package/README.md +48 -48
  2. package/aril-0.0.9.tgz +0 -0
  3. package/esm2022/http/index.mjs +1 -1
  4. package/esm2022/http/lib/enums.mjs +6 -6
  5. package/esm2022/http/lib/interfaces.mjs +10 -31
  6. package/esm2022/http/src/httpClient.mjs +3 -3
  7. package/esm2022/http/src/serviceBase.mjs +25 -27
  8. package/esm2022/http/src/serviceStateMethods.mjs +4 -7
  9. package/esm2022/i18n/aril-i18n.mjs +5 -0
  10. package/esm2022/i18n/index.mjs +6 -0
  11. package/esm2022/i18n/src/file-url-token.mjs +3 -0
  12. package/esm2022/i18n/src/i18n.module.mjs +17 -0
  13. package/esm2022/i18n/src/loader.mjs +20 -0
  14. package/esm2022/i18n/src/provideI18n.mjs +16 -0
  15. package/esm2022/i18n/src/provideScope.mjs +18 -0
  16. package/esm2022/public-api.mjs +2 -2
  17. package/esm2022/theme/layout/app/breadcrumb/app.breadcrumb.component.mjs +3 -3
  18. package/esm2022/theme/layout/app/config/app.config.component.mjs +12 -14
  19. package/esm2022/theme/layout/app/layout/app.layout.component.mjs +15 -9
  20. package/esm2022/theme/layout/app/menu/app.menu.component.mjs +148 -166
  21. package/esm2022/theme/layout/app/profileSidebar/app.profilesidebar.component.mjs +3 -3
  22. package/esm2022/theme/layout/app/sidebar/app.sidebar.component.mjs +4 -4
  23. package/esm2022/theme/layout/app/topbar/app.topbar.component.mjs +4 -4
  24. package/esm2022/theme/layout/index.mjs +1 -1
  25. package/esm2022/theme/layout/service/app.layout.service.mjs +10 -15
  26. package/esm2022/theme/layout/service/app.menu.service.mjs +1 -1
  27. package/esm2022/theme/layout/service/menuchangeevent.mjs +1 -1
  28. package/esm2022/ui/badge/index.mjs +1 -1
  29. package/esm2022/ui/badge/src/badge.component.mjs +3 -3
  30. package/esm2022/ui/button/index.mjs +1 -1
  31. package/esm2022/ui/button/src/button.component.mjs +4 -4
  32. package/esm2022/ui/button/src/split-button.component.mjs +3 -3
  33. package/esm2022/ui/calendar/index.mjs +1 -1
  34. package/esm2022/ui/calendar/src/calendar.component.mjs +27 -14
  35. package/esm2022/ui/checkbox/index.mjs +1 -1
  36. package/esm2022/ui/checkbox/src/check-box.component.mjs +4 -4
  37. package/esm2022/ui/checkbox/src/tri-state-checkbox.component.mjs +4 -4
  38. package/esm2022/ui/dxField/index.mjs +1 -1
  39. package/esm2022/ui/dxField/src/dx-field.component.mjs +5 -5
  40. package/esm2022/ui/field/index.mjs +1 -1
  41. package/esm2022/ui/field/src/field.component.mjs +11 -9
  42. package/esm2022/ui/fileUpload/index.mjs +1 -1
  43. package/esm2022/ui/fileUpload/src/file-upload.component.mjs +12 -12
  44. package/esm2022/ui/form/index.mjs +7 -7
  45. package/esm2022/ui/form/src/form-submit-button.component.mjs +22 -27
  46. package/esm2022/ui/form/src/form.component.mjs +2 -2
  47. package/esm2022/ui/index.mjs +2 -2
  48. package/esm2022/ui/lib/index.mjs +1 -1
  49. package/esm2022/ui/lib/src/form/form-error-message.component.mjs +9 -9
  50. package/esm2022/ui/lib/src/form/form-error-message.directive.mjs +1 -1
  51. package/esm2022/ui/lib/src/form/form-field-builder.mjs +4 -4
  52. package/esm2022/ui/lib/src/form/form-validation.mjs +3 -3
  53. package/esm2022/ui/lib/src/grid/flex-grid.directive.mjs +2 -2
  54. package/esm2022/ui/lib/src/input/baseInput.mjs +4 -4
  55. package/esm2022/ui/lib/src/input/common-input-validators.service.mjs +6 -6
  56. package/esm2022/ui/lib/src/input/dx-input-error-message.pipe.mjs +3 -3
  57. package/esm2022/ui/lib/src/input/input-disabled.directive.mjs +1 -1
  58. package/esm2022/ui/lib/src/input/input-error-message.pipe.mjs +3 -2
  59. package/esm2022/ui/lib/src/input/input-transforms.mjs +1 -1
  60. package/esm2022/ui/lib/src/input/value-accessor.directive.mjs +12 -6
  61. package/esm2022/ui/mask/index.mjs +1 -1
  62. package/esm2022/ui/mask/src/mask.component.mjs +8 -8
  63. package/esm2022/ui/number/index.mjs +1 -1
  64. package/esm2022/ui/number/src/number.component.mjs +10 -10
  65. package/esm2022/ui/overlayPanel/index.mjs +1 -1
  66. package/esm2022/ui/overlayPanel/src/overlay-panel.component.mjs +4 -7
  67. package/esm2022/ui/panel/index.mjs +1 -1
  68. package/esm2022/ui/panel/src/panel.component.mjs +3 -3
  69. package/esm2022/ui/password/index.mjs +1 -1
  70. package/esm2022/ui/password/src/password.component.mjs +7 -7
  71. package/esm2022/ui/radioButton/index.mjs +1 -1
  72. package/esm2022/ui/radioButton/src/radio-button.component.mjs +8 -8
  73. package/esm2022/ui/selectBox/index.mjs +1 -1
  74. package/esm2022/ui/selectBox/src/select-box.component.mjs +8 -8
  75. package/esm2022/ui/switch/index.mjs +1 -1
  76. package/esm2022/ui/switch/src/switch.component.mjs +7 -7
  77. package/esm2022/ui/table/index.mjs +3 -5
  78. package/esm2022/ui/table/src/i18n.mjs +53 -90
  79. package/esm2022/ui/table/src/table-column.component.mjs +4 -8
  80. package/esm2022/ui/table/src/table.component.mjs +13 -10
  81. package/esm2022/ui/tagBox/index.mjs +1 -1
  82. package/esm2022/ui/tagBox/src/tag-box.component.mjs +13 -13
  83. package/esm2022/ui/text/index.mjs +1 -1
  84. package/esm2022/ui/text/src/text.component.mjs +5 -5
  85. package/esm2022/ui/textArea/index.mjs +1 -1
  86. package/esm2022/ui/textArea/src/text-area.component.mjs +4 -4
  87. package/esm2022/ui/tree/index.mjs +1 -1
  88. package/esm2022/ui/tree/src/tree.component.mjs +5 -5
  89. package/esm2022/ui/treeTable/index.mjs +1 -1
  90. package/esm2022/ui/treeTable/src/tree-table.component.mjs +3 -3
  91. package/esm2022/ui/value/index.mjs +1 -1
  92. package/esm2022/ui/value/src/value.component.mjs +13 -13
  93. package/esm2022/util/index.mjs +2 -2
  94. package/esm2022/util/init-event/index.mjs +1 -1
  95. package/esm2022/util/init-event/src/init-event.directive.mjs +1 -1
  96. package/esm2022/util/lib/index.mjs +2 -1
  97. package/esm2022/util/lib/src/interfaces.mjs +1 -1
  98. package/esm2022/util/lib/src/module-router.mjs +16 -0
  99. package/esm2022/util/lib/src/types.mjs +1 -1
  100. package/esm2022/util/primitive-extensions/index.mjs +5 -5
  101. package/esm2022/util/primitive-extensions/src/boolean.extensions.mjs +1 -1
  102. package/esm2022/util/primitive-extensions/src/date.extensions.mjs +68 -47
  103. package/esm2022/util/primitive-extensions/src/number.extensions.mjs +13 -7
  104. package/esm2022/util/primitive-extensions/src/string.extensions.mjs +4 -4
  105. package/esm2022/util/pub-sub/index.mjs +1 -1
  106. package/esm2022/util/pub-sub/src/pub-sub.service.mjs +7 -5
  107. package/fesm2022/aril-http.mjs +39 -63
  108. package/fesm2022/aril-http.mjs.map +1 -1
  109. package/fesm2022/aril-i18n.mjs +72 -0
  110. package/fesm2022/aril-i18n.mjs.map +1 -0
  111. package/fesm2022/aril-theme-layout.mjs +190 -209
  112. package/fesm2022/aril-theme-layout.mjs.map +1 -1
  113. package/fesm2022/aril-ui-badge.mjs +2 -2
  114. package/fesm2022/aril-ui-badge.mjs.map +1 -1
  115. package/fesm2022/aril-ui-button.mjs +5 -5
  116. package/fesm2022/aril-ui-button.mjs.map +1 -1
  117. package/fesm2022/aril-ui-calendar.mjs +25 -12
  118. package/fesm2022/aril-ui-calendar.mjs.map +1 -1
  119. package/fesm2022/aril-ui-checkbox.mjs +5 -5
  120. package/fesm2022/aril-ui-checkbox.mjs.map +1 -1
  121. package/fesm2022/aril-ui-dxField.mjs +4 -4
  122. package/fesm2022/aril-ui-dxField.mjs.map +1 -1
  123. package/fesm2022/aril-ui-field.mjs +9 -7
  124. package/fesm2022/aril-ui-field.mjs.map +1 -1
  125. package/fesm2022/aril-ui-fileUpload.mjs +11 -11
  126. package/fesm2022/aril-ui-fileUpload.mjs.map +1 -1
  127. package/fesm2022/aril-ui-form.mjs +28 -34
  128. package/fesm2022/aril-ui-form.mjs.map +1 -1
  129. package/fesm2022/aril-ui-lib.mjs +30 -23
  130. package/fesm2022/aril-ui-lib.mjs.map +1 -1
  131. package/fesm2022/aril-ui-mask.mjs +8 -8
  132. package/fesm2022/aril-ui-mask.mjs.map +1 -1
  133. package/fesm2022/aril-ui-number.mjs +10 -10
  134. package/fesm2022/aril-ui-number.mjs.map +1 -1
  135. package/fesm2022/aril-ui-overlayPanel.mjs +2 -5
  136. package/fesm2022/aril-ui-overlayPanel.mjs.map +1 -1
  137. package/fesm2022/aril-ui-panel.mjs +2 -2
  138. package/fesm2022/aril-ui-panel.mjs.map +1 -1
  139. package/fesm2022/aril-ui-password.mjs +7 -7
  140. package/fesm2022/aril-ui-password.mjs.map +1 -1
  141. package/fesm2022/aril-ui-radioButton.mjs +7 -7
  142. package/fesm2022/aril-ui-radioButton.mjs.map +1 -1
  143. package/fesm2022/aril-ui-selectBox.mjs +5 -5
  144. package/fesm2022/aril-ui-selectBox.mjs.map +1 -1
  145. package/fesm2022/aril-ui-switch.mjs +7 -7
  146. package/fesm2022/aril-ui-switch.mjs.map +1 -1
  147. package/fesm2022/aril-ui-table.mjs +66 -105
  148. package/fesm2022/aril-ui-table.mjs.map +1 -1
  149. package/fesm2022/aril-ui-tagBox.mjs +11 -11
  150. package/fesm2022/aril-ui-tagBox.mjs.map +1 -1
  151. package/fesm2022/aril-ui-text.mjs +4 -4
  152. package/fesm2022/aril-ui-text.mjs.map +1 -1
  153. package/fesm2022/aril-ui-textArea.mjs +3 -3
  154. package/fesm2022/aril-ui-textArea.mjs.map +1 -1
  155. package/fesm2022/aril-ui-tree.mjs +3 -3
  156. package/fesm2022/aril-ui-tree.mjs.map +1 -1
  157. package/fesm2022/aril-ui-treeTable.mjs +2 -2
  158. package/fesm2022/aril-ui-treeTable.mjs.map +1 -1
  159. package/fesm2022/aril-ui-value.mjs +11 -11
  160. package/fesm2022/aril-ui-value.mjs.map +1 -1
  161. package/fesm2022/aril-ui.mjs +1 -1
  162. package/fesm2022/aril-ui.mjs.map +1 -1
  163. package/fesm2022/aril-util-init-event.mjs.map +1 -1
  164. package/fesm2022/aril-util-lib.mjs +19 -0
  165. package/fesm2022/aril-util-lib.mjs.map +1 -1
  166. package/fesm2022/aril-util-primitive-extensions.mjs +82 -55
  167. package/fesm2022/aril-util-primitive-extensions.mjs.map +1 -1
  168. package/fesm2022/aril-util-pub-sub.mjs +6 -4
  169. package/fesm2022/aril-util-pub-sub.mjs.map +1 -1
  170. package/fesm2022/aril-util.mjs +1 -1
  171. package/fesm2022/aril-util.mjs.map +1 -1
  172. package/fesm2022/aril.mjs +1 -1
  173. package/fesm2022/aril.mjs.map +1 -1
  174. package/http/lib/enums.d.ts +5 -5
  175. package/http/lib/interfaces.d.ts +9 -31
  176. package/http/src/httpClient.d.ts +3 -3
  177. package/http/src/serviceBase.d.ts +2 -1
  178. package/http/src/serviceStateMethods.d.ts +2 -3
  179. package/i18n/index.d.ts +5 -0
  180. package/i18n/src/file-url-token.d.ts +2 -0
  181. package/i18n/src/i18n.module.d.ts +7 -0
  182. package/i18n/src/loader.d.ts +9 -0
  183. package/i18n/src/provideI18n.d.ts +2 -0
  184. package/i18n/src/provideScope.d.ts +9 -0
  185. package/package.json +13 -7
  186. package/styles/ui/ui.common.scss +8 -8
  187. package/theme/layout/app/breadcrumb/app.breadcrumb.component.ts +2 -4
  188. package/theme/layout/app/config/app.config.component.html +13 -62
  189. package/theme/layout/app/config/app.config.component.ts +12 -21
  190. package/theme/layout/app/layout/app.layout.component.ts +39 -52
  191. package/theme/layout/app/menu/app.menu.component.ts +147 -121
  192. package/theme/layout/app/profileSidebar/app.profilesidebar.component.html +5 -18
  193. package/theme/layout/app/profileSidebar/app.profilesidebar.component.ts +2 -3
  194. package/theme/layout/app/sidebar/app.sidebar.component.html +9 -31
  195. package/theme/layout/app/sidebar/app.sidebar.component.ts +6 -3
  196. package/theme/layout/app/topbar/app.topbar.component.html +1 -5
  197. package/theme/layout/app/topbar/app.topbar.component.ts +4 -5
  198. package/theme/layout/index.ts +1 -1
  199. package/theme/layout/ng-package.json +6 -6
  200. package/theme/layout/service/app.layout.service.ts +12 -31
  201. package/theme/layout/service/app.menu.service.ts +0 -1
  202. package/theme/layout/service/menuchangeevent.ts +1 -1
  203. package/theme/styles/layout/_animation.scss +53 -53
  204. package/theme/styles/layout/_breadcrumb.scss +21 -21
  205. package/theme/styles/layout/_config.scss +42 -42
  206. package/theme/styles/layout/_content.scss +3 -3
  207. package/theme/styles/layout/_fonts.scss +40 -36
  208. package/theme/styles/layout/_layout_dark.scss +5 -5
  209. package/theme/styles/layout/_layout_dim.scss +5 -5
  210. package/theme/styles/layout/_layout_light.scss +5 -5
  211. package/theme/styles/layout/_main.scss +28 -28
  212. package/theme/styles/layout/_profile.scss +10 -10
  213. package/theme/styles/layout/_responsive.scss +111 -113
  214. package/theme/styles/layout/_sidebar_drawer.scss +234 -236
  215. package/theme/styles/layout/_sidebar_horizontal.scss +163 -163
  216. package/theme/styles/layout/_sidebar_reveal.scss +201 -203
  217. package/theme/styles/layout/_sidebar_slim.scss +144 -145
  218. package/theme/styles/layout/_sidebar_slim_plus.scss +162 -163
  219. package/theme/styles/layout/_sidebar_vertical.scss +153 -153
  220. package/theme/styles/layout/_topbar.scss +78 -78
  221. package/theme/styles/layout/_typography.scss +68 -63
  222. package/theme/styles/layout/_utils.scss +24 -24
  223. package/theme/styles/layout/layout.scss +24 -24
  224. package/theme/styles/layout/menutheme/_colorscheme.scss +11 -11
  225. package/theme/styles/layout/menutheme/_menutheme.scss +3 -3
  226. package/theme/styles/layout/menutheme/_primarycolor.scss +16 -16
  227. package/theme/styles/layout/menutheme/_transparent.scss +26 -26
  228. package/theme/styles/layout/preloading.scss +84 -84
  229. package/theme/styles/theme/base/_colors.scss +14 -15
  230. package/theme/styles/theme/base/_common.scss +39 -38
  231. package/theme/styles/theme/base/_components.scss +97 -97
  232. package/theme/styles/theme/base/_mixins.scss +281 -281
  233. package/theme/styles/theme/base/components/button/_button.scss +535 -535
  234. package/theme/styles/theme/base/components/button/_speeddial.scss +60 -60
  235. package/theme/styles/theme/base/components/button/_splitbutton.scss +328 -334
  236. package/theme/styles/theme/base/components/data/_carousel.scss +31 -31
  237. package/theme/styles/theme/base/components/data/_datatable.scss +336 -336
  238. package/theme/styles/theme/base/components/data/_dataview.scss +38 -38
  239. package/theme/styles/theme/base/components/data/_filter.scss +124 -125
  240. package/theme/styles/theme/base/components/data/_organizationchart.scss +48 -48
  241. package/theme/styles/theme/base/components/data/_paginator.scss +78 -78
  242. package/theme/styles/theme/base/components/data/_timeline.scss +33 -36
  243. package/theme/styles/theme/base/components/data/_treetable.scss +253 -254
  244. package/theme/styles/theme/base/components/data/_virtualscroller.scss +24 -24
  245. package/theme/styles/theme/base/components/file/_fileupload.scss +51 -51
  246. package/theme/styles/theme/base/components/input/_autocomplete.scss +120 -120
  247. package/theme/styles/theme/base/components/input/_calendar.scss +250 -250
  248. package/theme/styles/theme/base/components/input/_cascadeselect.scss +117 -118
  249. package/theme/styles/theme/base/components/input/_checkbox.scss +71 -71
  250. package/theme/styles/theme/base/components/input/_chips.scss +49 -49
  251. package/theme/styles/theme/base/components/input/_colorpicker.scss +11 -11
  252. package/theme/styles/theme/base/components/input/_dropdown.scss +141 -141
  253. package/theme/styles/theme/base/components/input/_editor.scss +120 -120
  254. package/theme/styles/theme/base/components/input/_inputgroup.scss +42 -42
  255. package/theme/styles/theme/base/components/input/_inputmask.scss +10 -10
  256. package/theme/styles/theme/base/components/input/_inputnumber.scss +21 -21
  257. package/theme/styles/theme/base/components/input/_inputswitch.scss +54 -54
  258. package/theme/styles/theme/base/components/input/_inputtext.scss +62 -62
  259. package/theme/styles/theme/base/components/input/_listbox.scss +80 -80
  260. package/theme/styles/theme/base/components/input/_multiselect.scss +158 -160
  261. package/theme/styles/theme/base/components/input/_password.scss +42 -42
  262. package/theme/styles/theme/base/components/input/_radiobutton.scss +57 -57
  263. package/theme/styles/theme/base/components/input/_rating.scss +53 -53
  264. package/theme/styles/theme/base/components/input/_selectbutton.scss +46 -46
  265. package/theme/styles/theme/base/components/input/_slider.scss +59 -55
  266. package/theme/styles/theme/base/components/input/_togglebutton.scss +44 -44
  267. package/theme/styles/theme/base/components/input/_treeselect.scss +119 -119
  268. package/theme/styles/theme/base/components/menu/_breadcrumb.scss +33 -33
  269. package/theme/styles/theme/base/components/menu/_contextmenu.scss +31 -31
  270. package/theme/styles/theme/base/components/menu/_dock.scss +80 -80
  271. package/theme/styles/theme/base/components/menu/_megamenu.scss +54 -54
  272. package/theme/styles/theme/base/components/menu/_menu.scss +30 -30
  273. package/theme/styles/theme/base/components/menu/_menubar.scss +136 -137
  274. package/theme/styles/theme/base/components/menu/_panelmenu.scss +151 -151
  275. package/theme/styles/theme/base/components/menu/_slidemenu.scss +57 -57
  276. package/theme/styles/theme/base/components/menu/_steps.scss +46 -46
  277. package/theme/styles/theme/base/components/menu/_tabmenu.scss +60 -61
  278. package/theme/styles/theme/base/components/menu/_tieredmenu.scss +34 -34
  279. package/theme/styles/theme/base/components/messages/_inlinemessage.scss +55 -55
  280. package/theme/styles/theme/base/components/messages/_message.scss +105 -105
  281. package/theme/styles/theme/base/components/messages/_toast.scss +97 -98
  282. package/theme/styles/theme/base/components/misc/_avatar.scss +22 -22
  283. package/theme/styles/theme/base/components/misc/_badge.scss +40 -40
  284. package/theme/styles/theme/base/components/misc/_chip.scss +39 -39
  285. package/theme/styles/theme/base/components/misc/_inplace.scss +12 -13
  286. package/theme/styles/theme/base/components/misc/_progressbar.scss +13 -13
  287. package/theme/styles/theme/base/components/misc/_scrolltop.scss +20 -20
  288. package/theme/styles/theme/base/components/misc/_skeleton.scss +6 -6
  289. package/theme/styles/theme/base/components/misc/_tag.scss +31 -31
  290. package/theme/styles/theme/base/components/misc/_terminal.scss +1 -1
  291. package/theme/styles/theme/base/components/multimedia/_galleria.scss +150 -150
  292. package/theme/styles/theme/base/components/multimedia/_image.scss +35 -35
  293. package/theme/styles/theme/base/components/overlay/_confirmpopup.scss +57 -59
  294. package/theme/styles/theme/base/components/overlay/_dialog.scss +56 -56
  295. package/theme/styles/theme/base/components/overlay/_overlaypanel.scss +58 -60
  296. package/theme/styles/theme/base/components/overlay/_sidebar.scss +20 -20
  297. package/theme/styles/theme/base/components/overlay/_tooltip.scss +27 -27
  298. package/theme/styles/theme/base/components/panel/_accordion.scss +104 -104
  299. package/theme/styles/theme/base/components/panel/_card.scss +23 -23
  300. package/theme/styles/theme/base/components/panel/_divider.scss +24 -24
  301. package/theme/styles/theme/base/components/panel/_fieldset.scss +38 -38
  302. package/theme/styles/theme/base/components/panel/_panel.scss +61 -61
  303. package/theme/styles/theme/base/components/panel/_scrollpanel.scss +5 -5
  304. package/theme/styles/theme/base/components/panel/_splitter.scss +15 -15
  305. package/theme/styles/theme/base/components/panel/_tabview.scss +68 -68
  306. package/theme/styles/theme/base/components/panel/_toolbar.scss +8 -8
  307. package/theme/styles/theme/dark/_extensions.scss +134 -120
  308. package/theme/styles/theme/dark/_variables.scss +918 -896
  309. package/theme/styles/theme/dark/blue/theme.scss +14 -14
  310. package/theme/styles/theme/dark/indigo/theme.scss +14 -14
  311. package/theme/styles/theme/light/_extensions.scss +116 -102
  312. package/theme/styles/theme/light/_variables.scss +911 -898
  313. package/theme/styles/theme/light/blue/theme.scss +14 -14
  314. package/theme/styles/theme/light/indigo/theme.scss +14 -14
  315. package/ui/button/src/button.component.d.ts +1 -1
  316. package/ui/calendar/src/calendar.component.d.ts +1 -1
  317. package/ui/form/index.d.ts +4 -4
  318. package/ui/form/src/form-submit-button.component.d.ts +5 -5
  319. package/ui/lib/src/form/form-validation.d.ts +1 -1
  320. package/ui/lib/src/input/baseInput.d.ts +2 -2
  321. package/ui/lib/src/input/common-input-validators.service.d.ts +3 -3
  322. package/ui/lib/src/input/dx-input-error-message.pipe.d.ts +2 -2
  323. package/ui/lib/src/input/input-transforms.d.ts +1 -1
  324. package/ui/mask/src/mask.component.d.ts +3 -3
  325. package/ui/number/src/number.component.d.ts +4 -4
  326. package/ui/overlayPanel/src/overlay-panel.component.d.ts +1 -1
  327. package/ui/password/src/password.component.d.ts +3 -3
  328. package/ui/selectBox/src/select-box.component.d.ts +2 -2
  329. package/ui/switch/src/switch.component.d.ts +3 -3
  330. package/ui/table/index.d.ts +0 -1
  331. package/ui/table/src/table-column.component.d.ts +1 -1
  332. package/ui/table/src/table.component.d.ts +4 -3
  333. package/ui/tree/src/tree.component.d.ts +1 -1
  334. package/ui/value/src/value.component.d.ts +2 -2
  335. package/util/lib/index.d.ts +1 -0
  336. package/util/lib/src/module-router.d.ts +5 -0
  337. package/util/lib/src/types.d.ts +2 -2
  338. package/util/primitive-extensions/index.d.ts +4 -4
  339. package/aril-0.0.7.tgz +0 -0
@@ -20,11 +20,11 @@ export class AppMenuItemComponent {
20
20
  this.router = router;
21
21
  this.menuService = menuService;
22
22
  this.active = false;
23
- this.key = "";
24
- this.menuSourceSubscription = this.menuService.menuSource$.subscribe(value => {
23
+ this.key = '';
24
+ this.menuSourceSubscription = this.menuService.menuSource$.subscribe((value) => {
25
25
  Promise.resolve(null).then(() => {
26
26
  if (value.routeEvent) {
27
- this.active = (value.key === this.key || value.key.startsWith(this.key + '-')) ? true : false;
27
+ this.active = value.key === this.key || value.key.startsWith(this.key + '-') ? true : false;
28
28
  }
29
29
  else {
30
30
  if (value.key !== this.key && !value.key.startsWith(this.key + '-')) {
@@ -36,8 +36,7 @@ export class AppMenuItemComponent {
36
36
  this.menuResetSubscription = this.menuService.resetSource$.subscribe(() => {
37
37
  this.active = false;
38
38
  });
39
- this.router.events.pipe(filter(event => event instanceof NavigationEnd))
40
- .subscribe(params => {
39
+ this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe((params) => {
41
40
  if (this.isSlimPlus || this.isSlim || this.isHorizontal) {
42
41
  this.active = false;
43
42
  }
@@ -55,18 +54,28 @@ export class AppMenuItemComponent {
55
54
  }
56
55
  }
57
56
  ngAfterViewChecked() {
58
- if (this.root && this.active && this.layoutService.isDesktop() && (this.layoutService.isHorizontal() || this.layoutService.isSlim() || this.layoutService.isSlimPlus())) {
57
+ if (this.root &&
58
+ this.active &&
59
+ this.layoutService.isDesktop() &&
60
+ (this.layoutService.isHorizontal() || this.layoutService.isSlim() || this.layoutService.isSlimPlus())) {
59
61
  this.calculatePosition(this.submenu?.nativeElement, this.submenu?.nativeElement.parentElement);
60
62
  }
61
63
  }
62
64
  updateActiveStateFromRoute() {
63
- let activeRoute = this.router.isActive(this.item.routerLink[0], { paths: 'exact', queryParams: 'ignored', matrixParams: 'ignored', fragment: 'ignored' });
65
+ let activeRoute = this.router.isActive(this.item.routerLink[0], {
66
+ paths: 'exact',
67
+ queryParams: 'ignored',
68
+ matrixParams: 'ignored',
69
+ fragment: 'ignored'
70
+ });
64
71
  if (activeRoute) {
65
72
  this.menuService.onMenuStateChange({ key: this.key, routeEvent: true });
66
73
  }
67
74
  }
68
75
  onSubmenuAnimated(event) {
69
- if (event.toState === 'visible' && this.layoutService.isDesktop() && (this.layoutService.isHorizontal() || this.layoutService.isSlim() || this.layoutService.isSlimPlus())) {
76
+ if (event.toState === 'visible' &&
77
+ this.layoutService.isDesktop() &&
78
+ (this.layoutService.isHorizontal() || this.layoutService.isSlim() || this.layoutService.isSlimPlus())) {
70
79
  const el = event.element;
71
80
  const elParent = el.parentElement;
72
81
  this.calculatePosition(el, elParent);
@@ -98,7 +107,7 @@ export class AppMenuItemComponent {
98
107
  return;
99
108
  }
100
109
  // navigate with hover
101
- if (this.root && this.isSlim || this.isHorizontal || this.isSlimPlus) {
110
+ if ((this.root && this.isSlim) || this.isHorizontal || this.isSlimPlus) {
102
111
  this.layoutService.state.menuHoverActive = !this.layoutService.state.menuHoverActive;
103
112
  }
104
113
  // execute command
@@ -133,11 +142,14 @@ export class AppMenuItemComponent {
133
142
  }
134
143
  }
135
144
  get submenuAnimation() {
136
- if (this.layoutService.isDesktop() && (this.layoutService.isHorizontal() || this.layoutService.isSlim() || this.layoutService.isSlimPlus())) {
145
+ if (this.layoutService.isDesktop() &&
146
+ (this.layoutService.isHorizontal() || this.layoutService.isSlim() || this.layoutService.isSlimPlus())) {
137
147
  return this.active ? 'visible' : 'hidden';
138
148
  }
139
149
  else
140
- return this.root ? 'expanded' : (this.active ? 'expanded' : 'collapsed');
150
+ return (this.root ? 'expanded'
151
+ : this.active ? 'expanded'
152
+ : 'collapsed');
141
153
  }
142
154
  get isHorizontal() {
143
155
  return this.layoutService.isHorizontal();
@@ -161,88 +173,73 @@ export class AppMenuItemComponent {
161
173
  }
162
174
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: AppMenuItemComponent, deps: [{ token: i1.LayoutService }, { token: i0.ChangeDetectorRef }, { token: i2.Router }, { token: i3.MenuService }], target: i0.ɵɵFactoryTarget.Component }); }
163
175
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: AppMenuItemComponent, isStandalone: true, selector: "[app-menuitem]", inputs: { item: "item", index: "index", root: "root", parentKey: "parentKey" }, host: { properties: { "class.layout-root-menuitem": "this.root", "class.active-menuitem": "this.activeClass" } }, viewQueries: [{ propertyName: "submenu", first: true, predicate: ["submenu"], descendants: true }], ngImport: i0, template: `
164
- <ng-container>
165
- @if (root) {
166
- <div class="layout-menuitem-root-text">
167
- {{ item.label }}
168
- </div>
169
- }
170
- @if (item.items?.length) {
171
- <a
172
- [attr.href]="item.url"
173
- (click)="itemClick($event)"
174
- (mouseenter)="onMouseEnter()"
175
- [attr.target]="item.target"
176
- tabindex="0"
177
- pRipple
178
- [pTooltip]="item.label"
179
- [tooltipDisabled]="!(isSlim && root && !active)">
180
- <i [ngClass]="item.icon" class="layout-menuitem-icon"></i>
181
- <span class="layout-menuitem-text">{{ item.label }}</span>
182
- @if (item.items) {
183
- <i
184
- class="pi pi-fw pi-angle-down layout-submenu-toggler"
185
- ></i>
186
- }
187
- </a>
188
- }
189
- @else {
190
- <a
191
- (click)="itemClick($event)"
192
- (mouseenter)="onMouseEnter()"
193
- [routerLink]="item.routerLink"
194
- routerLinkActive="active-route"
195
- [routerLinkActiveOptions]="
196
- item.routerLinkActiveOptions || {
197
- paths: 'exact',
198
- queryParams: 'ignored',
199
- matrixParams: 'ignored',
200
- fragment: 'ignored'
201
- }
202
- "
203
- [fragment]="item.fragment"
204
- [queryParamsHandling]="item.queryParamsHandling"
205
- [preserveFragment]="item.preserveFragment"
206
- [skipLocationChange]="item.skipLocationChange"
207
- [replaceUrl]="item.replaceUrl"
208
- [state]="item.state"
209
- [queryParams]="item.queryParams"
210
- [attr.target]="item.target"
211
- tabindex="0"
212
- pRipple
213
- [pTooltip]="item.label"
214
- [tooltipDisabled]="!(isSlim && root)">
215
-
216
- <i [ngClass]="item.icon" class="layout-menuitem-icon"></i>
176
+ <ng-container>
177
+ @if (root) {
178
+ <div class="layout-menuitem-root-text">
179
+ {{ item.label }}
180
+ </div>
181
+ }
182
+ @if (item.items?.length) {
183
+ <a
184
+ [attr.href]="item.url"
185
+ (click)="itemClick($event)"
186
+ (mouseenter)="onMouseEnter()"
187
+ [attr.target]="item.target"
188
+ tabindex="0"
189
+ pRipple
190
+ [pTooltip]="item.label"
191
+ [tooltipDisabled]="!(isSlim && root && !active)">
192
+ <i [ngClass]="item.icon" class="layout-menuitem-icon"></i>
193
+ <span class="layout-menuitem-text">{{ item.label }}</span>
194
+ @if (item.items) {
195
+ <i class="pi pi-fw pi-angle-down layout-submenu-toggler"></i>
196
+ }
197
+ </a>
198
+ } @else {
199
+ <a
200
+ (click)="itemClick($event)"
201
+ (mouseenter)="onMouseEnter()"
202
+ [routerLink]="item.routerLink"
203
+ routerLinkActive="active-route"
204
+ [routerLinkActiveOptions]="
205
+ item.routerLinkActiveOptions || {
206
+ paths: 'exact',
207
+ queryParams: 'ignored',
208
+ matrixParams: 'ignored',
209
+ fragment: 'ignored'
210
+ }
211
+ "
212
+ [fragment]="item.fragment"
213
+ [queryParamsHandling]="item.queryParamsHandling"
214
+ [preserveFragment]="item.preserveFragment"
215
+ [skipLocationChange]="item.skipLocationChange"
216
+ [replaceUrl]="item.replaceUrl"
217
+ [state]="item.state"
218
+ [queryParams]="item.queryParams"
219
+ [attr.target]="item.target"
220
+ tabindex="0"
221
+ pRipple
222
+ [pTooltip]="item.label"
223
+ [tooltipDisabled]="!(isSlim && root)">
224
+ <i [ngClass]="item.icon" class="layout-menuitem-icon"></i>
217
225
 
218
- <span class="layout-menuitem-text">{{ item.label }}</span>
226
+ <span class="layout-menuitem-text">{{ item.label }}</span>
219
227
 
220
- @if (item.items) {
221
- <i
222
- class="pi pi-fw pi-angle-down layout-submenu-toggler"
223
- ></i>
224
- }
225
- </a>
228
+ @if (item.items) {
229
+ <i class="pi pi-fw pi-angle-down layout-submenu-toggler"></i>
230
+ }
231
+ </a>
226
232
  }
227
-
233
+
228
234
  @if (item.items) {
229
- <ul
230
- #submenu
231
- [@children]="submenuAnimation"
232
- (@children.done)="onSubmenuAnimated($event)">
233
-
234
- @for (child of item.items; track child; let i = $index) {
235
- <li
236
- app-menuitem
237
- [item]="child"
238
- [index]="i"
239
- [parentKey]="key">
240
- </li>
241
- }
242
- </ul>
235
+ <ul #submenu [@children]="submenuAnimation" (@children.done)="onSubmenuAnimated($event)">
236
+ @for (child of item.items; track child; let i = $index) {
237
+ <li app-menuitem [item]="child" [index]="i" [parentKey]="key"></li>
238
+ }
239
+ </ul>
243
240
  }
244
- </ng-container>
245
- `, isInline: true, dependencies: [{ kind: "component", type: AppMenuItemComponent, selector: "[app-menuitem]", inputs: ["item", "index", "root", "parentKey"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i4.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: RippleModule }, { kind: "directive", type: i5.Ripple, selector: "[pRipple]" }], animations: [
241
+ </ng-container>
242
+ `, isInline: true, dependencies: [{ kind: "component", type: AppMenuItemComponent, selector: "[app-menuitem]", inputs: ["item", "index", "root", "parentKey"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i4.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: RippleModule }, { kind: "directive", type: i5.Ripple, selector: "[pRipple]" }], animations: [
246
243
  trigger('children', [
247
244
  state('collapsed', style({
248
245
  height: '0'
@@ -266,88 +263,73 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
266
263
  standalone: true,
267
264
  selector: '[app-menuitem]',
268
265
  template: `
269
- <ng-container>
270
- @if (root) {
271
- <div class="layout-menuitem-root-text">
272
- {{ item.label }}
273
- </div>
274
- }
275
- @if (item.items?.length) {
276
- <a
277
- [attr.href]="item.url"
278
- (click)="itemClick($event)"
279
- (mouseenter)="onMouseEnter()"
280
- [attr.target]="item.target"
281
- tabindex="0"
282
- pRipple
283
- [pTooltip]="item.label"
284
- [tooltipDisabled]="!(isSlim && root && !active)">
285
- <i [ngClass]="item.icon" class="layout-menuitem-icon"></i>
286
- <span class="layout-menuitem-text">{{ item.label }}</span>
287
- @if (item.items) {
288
- <i
289
- class="pi pi-fw pi-angle-down layout-submenu-toggler"
290
- ></i>
291
- }
292
- </a>
293
- }
294
- @else {
295
- <a
296
- (click)="itemClick($event)"
297
- (mouseenter)="onMouseEnter()"
298
- [routerLink]="item.routerLink"
299
- routerLinkActive="active-route"
300
- [routerLinkActiveOptions]="
301
- item.routerLinkActiveOptions || {
302
- paths: 'exact',
303
- queryParams: 'ignored',
304
- matrixParams: 'ignored',
305
- fragment: 'ignored'
306
- }
307
- "
308
- [fragment]="item.fragment"
309
- [queryParamsHandling]="item.queryParamsHandling"
310
- [preserveFragment]="item.preserveFragment"
311
- [skipLocationChange]="item.skipLocationChange"
312
- [replaceUrl]="item.replaceUrl"
313
- [state]="item.state"
314
- [queryParams]="item.queryParams"
315
- [attr.target]="item.target"
316
- tabindex="0"
317
- pRipple
318
- [pTooltip]="item.label"
319
- [tooltipDisabled]="!(isSlim && root)">
320
-
321
- <i [ngClass]="item.icon" class="layout-menuitem-icon"></i>
266
+ <ng-container>
267
+ @if (root) {
268
+ <div class="layout-menuitem-root-text">
269
+ {{ item.label }}
270
+ </div>
271
+ }
272
+ @if (item.items?.length) {
273
+ <a
274
+ [attr.href]="item.url"
275
+ (click)="itemClick($event)"
276
+ (mouseenter)="onMouseEnter()"
277
+ [attr.target]="item.target"
278
+ tabindex="0"
279
+ pRipple
280
+ [pTooltip]="item.label"
281
+ [tooltipDisabled]="!(isSlim && root && !active)">
282
+ <i [ngClass]="item.icon" class="layout-menuitem-icon"></i>
283
+ <span class="layout-menuitem-text">{{ item.label }}</span>
284
+ @if (item.items) {
285
+ <i class="pi pi-fw pi-angle-down layout-submenu-toggler"></i>
286
+ }
287
+ </a>
288
+ } @else {
289
+ <a
290
+ (click)="itemClick($event)"
291
+ (mouseenter)="onMouseEnter()"
292
+ [routerLink]="item.routerLink"
293
+ routerLinkActive="active-route"
294
+ [routerLinkActiveOptions]="
295
+ item.routerLinkActiveOptions || {
296
+ paths: 'exact',
297
+ queryParams: 'ignored',
298
+ matrixParams: 'ignored',
299
+ fragment: 'ignored'
300
+ }
301
+ "
302
+ [fragment]="item.fragment"
303
+ [queryParamsHandling]="item.queryParamsHandling"
304
+ [preserveFragment]="item.preserveFragment"
305
+ [skipLocationChange]="item.skipLocationChange"
306
+ [replaceUrl]="item.replaceUrl"
307
+ [state]="item.state"
308
+ [queryParams]="item.queryParams"
309
+ [attr.target]="item.target"
310
+ tabindex="0"
311
+ pRipple
312
+ [pTooltip]="item.label"
313
+ [tooltipDisabled]="!(isSlim && root)">
314
+ <i [ngClass]="item.icon" class="layout-menuitem-icon"></i>
322
315
 
323
- <span class="layout-menuitem-text">{{ item.label }}</span>
316
+ <span class="layout-menuitem-text">{{ item.label }}</span>
324
317
 
325
- @if (item.items) {
326
- <i
327
- class="pi pi-fw pi-angle-down layout-submenu-toggler"
328
- ></i>
329
- }
330
- </a>
318
+ @if (item.items) {
319
+ <i class="pi pi-fw pi-angle-down layout-submenu-toggler"></i>
320
+ }
321
+ </a>
331
322
  }
332
-
323
+
333
324
  @if (item.items) {
334
- <ul
335
- #submenu
336
- [@children]="submenuAnimation"
337
- (@children.done)="onSubmenuAnimated($event)">
338
-
339
- @for (child of item.items; track child; let i = $index) {
340
- <li
341
- app-menuitem
342
- [item]="child"
343
- [index]="i"
344
- [parentKey]="key">
345
- </li>
346
- }
347
- </ul>
325
+ <ul #submenu [@children]="submenuAnimation" (@children.done)="onSubmenuAnimated($event)">
326
+ @for (child of item.items; track child; let i = $index) {
327
+ <li app-menuitem [item]="child" [index]="i" [parentKey]="key"></li>
328
+ }
329
+ </ul>
348
330
  }
349
- </ng-container>
350
- `,
331
+ </ng-container>
332
+ `,
351
333
  imports: [NgClass, RouterLink, RouterLinkActive, NgTemplateOutlet, TooltipModule, RippleModule],
352
334
  animations: [
353
335
  trigger('children', [
@@ -396,4 +378,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImpor
396
378
  type: Component,
397
379
  args: [{ standalone: true, selector: 'app-menu', imports: [AppMenuItemComponent], template: "<ul class=\"layout-menu\">\n\t@for (item of menuService.menuItems(); track $index) {\n\t\t@if (item.separator) {\n\t\t\t<li class=\"menu-separator\"></li>\n\t\t} @else {\n\t\t\t<li app-menuitem [item]=\"item\" [index]=\"$index\" [root]=\"true\"></li>\n\t\t}\n\t}\n</ul>\n" }]
398
380
  }] });
399
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLm1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC90aGVtZS9sYXlvdXQvYXBwL21lbnUvYXBwLm1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC90aGVtZS9sYXlvdXQvYXBwL21lbnUvYXBwLm1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVELE9BQU8sRUFBcUIsU0FBUyxFQUFjLFdBQVcsRUFBRSxLQUFLLEVBQXFCLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkksT0FBTyxFQUFFLGFBQWEsRUFBVSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RixPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBa0IsTUFBTSxxQkFBcUIsQ0FBQztBQUdqRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHaEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7OztBQTRHN0QsTUFBTSxPQUFPLG9CQUFvQjtJQW9CaEMsWUFBbUIsYUFBNEIsRUFBVSxFQUFxQixFQUFTLE1BQWMsRUFBVSxXQUF3QjtRQUFwSCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUFVLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQVMsV0FBTSxHQUFO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QUFFLEdBQUc7NkJBQ1gsQ0FBQyxDQUFDOzRCQUNILEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDO2dDQUNyQixPQUFPLEVBQUUsTUFBTTs2QkFDZixDQUFDLENBQUM7NEJBQ0gsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUM7Z0NBQ3RCLE9BQU8sRUFBRSxPQUFPOzZCQUNoQixDQUFDLENBQUM7NEJBQ0gsVUFBVSxDQUFDLHdCQUF3QixFQUFFLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO3lCQUNyRixDQUFDO3FCQUNGO2lCQUNEO2lLQUdTLElBQUk7c0JBQVosS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRThDLElBQUk7c0JBQXZELEtBQUs7O3NCQUFJLFdBQVc7dUJBQUMsNEJBQTRCO2dCQUV6QyxTQUFTO3NCQUFqQixLQUFLO2dCQUVnQixPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVM7Z0JBa0toQixXQUFXO3NCQURkLFdBQVc7dUJBQUMsdUJBQXVCOztBQXNCckMsTUFBTSxPQUFPLGdCQUFnQjtJQU43QjtRQU9DLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBQ2xDOzhHQUZZLGdCQUFnQjtrR0FBaEIsZ0JBQWdCLG9FQzFUN0IsaVJBU0EsNENEZ0hhLG9CQUFvQjs7MkZBaU1wQixnQkFBZ0I7a0JBTjVCLFNBQVM7aUNBQ0csSUFBSSxZQUNOLFVBQVUsV0FDWCxDQUFDLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyLCBSb3V0ZXJMaW5rLCBSb3V0ZXJMaW5rQWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciwgQW5pbWF0aW9uRXZlbnQgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcblxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBEb21IYW5kbGVyIH0gZnJvbSAncHJpbWVuZy9kb20nO1xuaW1wb3J0IHsgUmlwcGxlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9yaXBwbGUnO1xuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XG5cbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBNZW51U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvYXBwLm1lbnUuc2VydmljZSc7XG5pbXBvcnQgeyBMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hcHAubGF5b3V0LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0c2VsZWN0b3I6ICdbYXBwLW1lbnVpdGVtXScsXG5cdHRlbXBsYXRlOiBgXG5cdFx0XHQ8bmctY29udGFpbmVyPlxuXHRcdFx0ICBAaWYgKHJvb3QpIHtcblx0XHRcdCAgICA8ZGl2IGNsYXNzPVwibGF5b3V0LW1lbnVpdGVtLXJvb3QtdGV4dFwiPlxuXHRcdFx0ICAgICAge3sgaXRlbS5sYWJlbCB9fVxuXHRcdFx0ICAgIDwvZGl2PlxuXHRcdFx0ICB9XG5cdFx0XHQgIEBpZiAoaXRlbS5pdGVtcz8ubGVuZ3RoKSB7XG5cdFx0XHQgICAgPGFcblx0XHRcdCAgICAgIFthdHRyLmhyZWZdPVwiaXRlbS51cmxcIlxuXHRcdFx0ICAgICAgKGNsaWNrKT1cIml0ZW1DbGljaygkZXZlbnQpXCJcblx0XHRcdCAgICAgIChtb3VzZWVudGVyKT1cIm9uTW91c2VFbnRlcigpXCJcblx0XHRcdCAgICAgIFthdHRyLnRhcmdldF09XCJpdGVtLnRhcmdldFwiXG5cdFx0XHQgICAgICB0YWJpbmRleD1cIjBcIlxuXHRcdFx0ICAgICAgcFJpcHBsZVxuXHRcdFx0ICAgICAgW3BUb29sdGlwXT1cIml0ZW0ubGFiZWxcIlxuXHRcdFx0ICAgICAgW3Rvb2x0aXBEaXNhYmxlZF09XCIhKGlzU2xpbSAmJiByb290ICYmICFhY3RpdmUpXCI+XG5cdFx0XHQgICAgICA8aSBbbmdDbGFzc109XCJpdGVtLmljb25cIiBjbGFzcz1cImxheW91dC1tZW51aXRlbS1pY29uXCI+PC9pPlxuXHRcdFx0ICAgICAgPHNwYW4gY2xhc3M9XCJsYXlvdXQtbWVudWl0ZW0tdGV4dFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG5cdFx0XHQgICAgICBAaWYgKGl0ZW0uaXRlbXMpIHtcblx0XHRcdCAgICAgICAgPGlcblx0XHRcdCAgICAgICAgICBjbGFzcz1cInBpIHBpLWZ3IHBpLWFuZ2xlLWRvd24gbGF5b3V0LXN1Ym1lbnUtdG9nZ2xlclwiXG5cdFx0XHQgICAgICAgID48L2k+XG5cdFx0XHQgICAgICB9XG5cdFx0XHQgICAgPC9hPlxuXHRcdFx0ICB9XG5cdFx0XHQgIEBlbHNlIHtcblx0XHRcdCAgICA8YVxuXHRcdFx0ICAgICAgKGNsaWNrKT1cIml0ZW1DbGljaygkZXZlbnQpXCJcblx0XHRcdCAgICAgIChtb3VzZWVudGVyKT1cIm9uTW91c2VFbnRlcigpXCJcblx0XHRcdCAgICAgIFtyb3V0ZXJMaW5rXT1cIml0ZW0ucm91dGVyTGlua1wiXG5cdFx0XHQgICAgICByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlLXJvdXRlXCJcblx0XHRcdFx0XHRcdFtyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uc109XCJcblx0XHRcdFx0XHRcdFx0aXRlbS5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucyB8fCB7XG5cdFx0XHRcdFx0XHRcdFx0cGF0aHM6ICdleGFjdCcsXG5cdFx0XHRcdFx0XHRcdFx0cXVlcnlQYXJhbXM6ICdpZ25vcmVkJyxcblx0XHRcdFx0XHRcdFx0XHRtYXRyaXhQYXJhbXM6ICdpZ25vcmVkJyxcblx0XHRcdFx0XHRcdFx0XHRmcmFnbWVudDogJ2lnbm9yZWQnXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0XHRbZnJhZ21lbnRdPVwiaXRlbS5mcmFnbWVudFwiXG5cdFx0XHRcdFx0XHRbcXVlcnlQYXJhbXNIYW5kbGluZ109XCJpdGVtLnF1ZXJ5UGFyYW1zSGFuZGxpbmdcIlxuXHRcdFx0XHRcdFx0W3ByZXNlcnZlRnJhZ21lbnRdPVwiaXRlbS5wcmVzZXJ2ZUZyYWdtZW50XCJcblx0XHRcdFx0XHRcdFtza2lwTG9jYXRpb25DaGFuZ2VdPVwiaXRlbS5za2lwTG9jYXRpb25DaGFuZ2VcIlxuXHRcdFx0XHRcdFx0W3JlcGxhY2VVcmxdPVwiaXRlbS5yZXBsYWNlVXJsXCJcblx0XHRcdFx0XHRcdFtzdGF0ZV09XCJpdGVtLnN0YXRlXCJcblx0XHRcdFx0XHRcdFtxdWVyeVBhcmFtc109XCJpdGVtLnF1ZXJ5UGFyYW1zXCJcblx0XHRcdFx0XHRcdFthdHRyLnRhcmdldF09XCJpdGVtLnRhcmdldFwiXG5cdFx0XHRcdFx0XHR0YWJpbmRleD1cIjBcIlxuXHRcdFx0XHRcdFx0cFJpcHBsZVxuXHRcdFx0XHRcdFx0W3BUb29sdGlwXT1cIml0ZW0ubGFiZWxcIlxuXHRcdFx0XHRcdFx0W3Rvb2x0aXBEaXNhYmxlZF09XCIhKGlzU2xpbSAmJiByb290KVwiPlxuXG5cdFx0XHQgICAgPGkgW25nQ2xhc3NdPVwiaXRlbS5pY29uXCIgY2xhc3M9XCJsYXlvdXQtbWVudWl0ZW0taWNvblwiPjwvaT5cblxuXHRcdFx0ICAgIDxzcGFuIGNsYXNzPVwibGF5b3V0LW1lbnVpdGVtLXRleHRcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxuXG5cdFx0XHQgICAgQGlmIChpdGVtLml0ZW1zKSB7XG5cdFx0XHQgICAgICA8aVxuXHRcdFx0ICAgICAgICBjbGFzcz1cInBpIHBpLWZ3IHBpLWFuZ2xlLWRvd24gbGF5b3V0LXN1Ym1lbnUtdG9nZ2xlclwiXG5cdFx0XHQgICAgICA+PC9pPlxuXHRcdFx0ICAgIH1cblx0XHRcdCAgPC9hPlxuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHRAaWYgKGl0ZW0uaXRlbXMpIHtcblx0XHRcdCAgPHVsXG5cdFx0XHQgICAgI3N1Ym1lbnVcblx0XHRcdCAgICBbQGNoaWxkcmVuXT1cInN1Ym1lbnVBbmltYXRpb25cIlxuXHRcdFx0ICAgIChAY2hpbGRyZW4uZG9uZSk9XCJvblN1Ym1lbnVBbmltYXRlZCgkZXZlbnQpXCI+XG5cdFx0XHRcdFx0XG5cdFx0XHQgICAgQGZvciAoY2hpbGQgb2YgaXRlbS5pdGVtczsgdHJhY2sgY2hpbGQ7IGxldCBpID0gJGluZGV4KSB7XG5cdFx0XHQgICAgICA8bGlcblx0XHRcdCAgICAgICAgYXBwLW1lbnVpdGVtXG5cdFx0XHQgICAgICAgIFtpdGVtXT1cImNoaWxkXCJcblx0XHRcdCAgICAgICAgW2luZGV4XT1cImlcIlxuXHRcdFx0ICAgICAgICBbcGFyZW50S2V5XT1cImtleVwiPlxuXHRcdFx0XHRcdFx0PC9saT5cblx0XHRcdCAgICB9XG5cdFx0XHQgIDwvdWw+XG5cdFx0XHR9XG5cdFx0XHQ8L25nLWNvbnRhaW5lcj5cblx0XHRcdGAsXG5cdGltcG9ydHM6IFtOZ0NsYXNzLCBSb3V0ZXJMaW5rLCBSb3V0ZXJMaW5rQWN0aXZlLCBOZ1RlbXBsYXRlT3V0bGV0LCBUb29sdGlwTW9kdWxlLCBSaXBwbGVNb2R1bGVdLFxuXHRhbmltYXRpb25zOiBbXG5cdFx0dHJpZ2dlcignY2hpbGRyZW4nLCBbXG5cdFx0XHRzdGF0ZSgnY29sbGFwc2VkJywgc3R5bGUoe1xuXHRcdFx0XHRoZWlnaHQ6ICcwJ1xuXHRcdFx0fSkpLFxuXHRcdFx0c3RhdGUoJ2V4cGFuZGVkJywgc3R5bGUoe1xuXHRcdFx0XHRoZWlnaHQ6ICcqJ1xuXHRcdFx0fSkpLFxuXHRcdFx0c3RhdGUoJ2hpZGRlbicsIHN0eWxlKHtcblx0XHRcdFx0ZGlzcGxheTogJ25vbmUnXG5cdFx0XHR9KSksXG5cdFx0XHRzdGF0ZSgndmlzaWJsZScsIHN0eWxlKHtcblx0XHRcdFx0ZGlzcGxheTogJ2Jsb2NrJ1xuXHRcdFx0fSkpLFxuXHRcdFx0dHJhbnNpdGlvbignY29sbGFwc2VkIDw9PiBleHBhbmRlZCcsIGFuaW1hdGUoJzQwMG1zIGN1YmljLWJlemllcigwLjg2LCAwLCAwLjA3LCAxKScpKVxuXHRcdF0pXG5cdF1cbn0pXG5leHBvcnQgY2xhc3MgQXBwTWVudUl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cblx0QElucHV0KCkgaXRlbSE6IE1lbnVJdGVtO1xuXG5cdEBJbnB1dCgpIGluZGV4ITogbnVtYmVyO1xuXG5cdEBJbnB1dCgpIEBIb3N0QmluZGluZygnY2xhc3MubGF5b3V0LXJvb3QtbWVudWl0ZW0nKSByb290ITogYm9vbGVhbjtcblxuXHRASW5wdXQoKSBwYXJlbnRLZXkhOiBzdHJpbmc7XG5cblx0QFZpZXdDaGlsZCgnc3VibWVudScpIHN1Ym1lbnUhOiBFbGVtZW50UmVmO1xuXG5cdGFjdGl2ZSA9IGZhbHNlO1xuXG5cdG1lbnVTb3VyY2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuXHRtZW51UmVzZXRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuXHRrZXk6IHN0cmluZyA9IFwiXCI7XG5cblx0Y29uc3RydWN0b3IocHVibGljIGxheW91dFNlcnZpY2U6IExheW91dFNlcnZpY2UsIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLCBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgbWVudVNlcnZpY2U6IE1lbnVTZXJ2aWNlKSB7XG5cdFx0dGhpcy5tZW51U291cmNlU3Vic2NyaXB0aW9uID0gdGhpcy5tZW51U2VydmljZS5tZW51U291cmNlJC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuXHRcdFx0UHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRpZiAodmFsdWUucm91dGVFdmVudCkge1xuXHRcdFx0XHRcdHRoaXMuYWN0aXZlID0gKHZhbHVlLmtleSA9PT0gdGhpcy5rZXkgfHwgdmFsdWUua2V5LnN0YXJ0c1dpdGgodGhpcy5rZXkgKyAnLScpKSA/IHRydWUgOiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRpZiAodmFsdWUua2V5ICE9PSB0aGlzLmtleSAmJiAhdmFsdWUua2V5LnN0YXJ0c1dpdGgodGhpcy5rZXkgKyAnLScpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHR0aGlzLm1lbnVSZXNldFN1YnNjcmlwdGlvbiA9IHRoaXMubWVudVNlcnZpY2UucmVzZXRTb3VyY2UkLnN1YnNjcmliZSgoKSA9PiB7XG5cdFx0XHR0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoZmlsdGVyKGV2ZW50ID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpXG5cdFx0XHQuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmlzU2xpbVBsdXMgfHwgdGhpcy5pc1NsaW0gfHwgdGhpcy5pc0hvcml6b250YWwpIHtcblx0XHRcdFx0XHR0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdGlmICh0aGlzLml0ZW0ucm91dGVyTGluaykge1xuXHRcdFx0XHRcdFx0dGhpcy51cGRhdGVBY3RpdmVTdGF0ZUZyb21Sb3V0ZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdH1cblxuXHRuZ09uSW5pdCgpIHtcblx0XHR0aGlzLmtleSA9IHRoaXMucGFyZW50S2V5ID8gdGhpcy5wYXJlbnRLZXkgKyAnLScgKyB0aGlzLmluZGV4IDogU3RyaW5nKHRoaXMuaW5kZXgpO1xuXG5cdFx0aWYgKCEodGhpcy5pc1NsaW1QbHVzIHx8IHRoaXMuaXNTbGltIHx8IHRoaXMuaXNIb3Jpem9udGFsKSAmJiB0aGlzLml0ZW0ucm91dGVyTGluaykge1xuXHRcdFx0dGhpcy51cGRhdGVBY3RpdmVTdGF0ZUZyb21Sb3V0ZSgpO1xuXHRcdH1cblx0fVxuXG5cdG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcblx0XHRpZiAodGhpcy5yb290ICYmIHRoaXMuYWN0aXZlICYmIHRoaXMubGF5b3V0U2VydmljZS5pc0Rlc2t0b3AoKSAmJiAodGhpcy5sYXlvdXRTZXJ2aWNlLmlzSG9yaXpvbnRhbCgpIHx8IHRoaXMubGF5b3V0U2VydmljZS5pc1NsaW0oKSB8fCB0aGlzLmxheW91dFNlcnZpY2UuaXNTbGltUGx1cygpKSkge1xuXHRcdFx0dGhpcy5jYWxjdWxhdGVQb3NpdGlvbih0aGlzLnN1Ym1lbnU/Lm5hdGl2ZUVsZW1lbnQsIHRoaXMuc3VibWVudT8ubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50KTtcblx0XHR9XG5cdH1cblxuXHR1cGRhdGVBY3RpdmVTdGF0ZUZyb21Sb3V0ZSgpIHtcblx0XHRsZXQgYWN0aXZlUm91dGUgPSB0aGlzLnJvdXRlci5pc0FjdGl2ZSh0aGlzLml0ZW0ucm91dGVyTGlua1swXSwgeyBwYXRoczogJ2V4YWN0JywgcXVlcnlQYXJhbXM6ICdpZ25vcmVkJywgbWF0cml4UGFyYW1zOiAnaWdub3JlZCcsIGZyYWdtZW50OiAnaWdub3JlZCcgfSk7XG5cblx0XHRpZiAoYWN0aXZlUm91dGUpIHtcblx0XHRcdHRoaXMubWVudVNlcnZpY2Uub25NZW51U3RhdGVDaGFuZ2UoeyBrZXk6IHRoaXMua2V5LCByb3V0ZUV2ZW50OiB0cnVlIH0pO1xuXHRcdH1cblx0fVxuXG5cdG9uU3VibWVudUFuaW1hdGVkKGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xuXHRcdGlmIChldmVudC50b1N0YXRlID09PSAndmlzaWJsZScgJiYgdGhpcy5sYXlvdXRTZXJ2aWNlLmlzRGVza3RvcCgpICYmICh0aGlzLmxheW91dFNlcnZpY2UuaXNIb3Jpem9udGFsKCkgfHwgdGhpcy5sYXlvdXRTZXJ2aWNlLmlzU2xpbSgpIHx8IHRoaXMubGF5b3V0U2VydmljZS5pc1NsaW1QbHVzKCkpKSB7XG5cdFx0XHRjb25zdCBlbCA9IDxIVE1MVUxpc3RFbGVtZW50PmV2ZW50LmVsZW1lbnQ7XG5cdFx0XHRjb25zdCBlbFBhcmVudCA9IDxIVE1MVUxpc3RFbGVtZW50PmVsLnBhcmVudEVsZW1lbnQ7XG5cdFx0XHR0aGlzLmNhbGN1bGF0ZVBvc2l0aW9uKGVsLCBlbFBhcmVudCk7XG5cdFx0fVxuXHR9XG5cblx0Y2FsY3VsYXRlUG9zaXRpb24ob3ZlcmxheTogSFRNTEVsZW1lbnQsIHRhcmdldDogSFRNTEVsZW1lbnQpIHtcblx0XHRpZiAob3ZlcmxheSkge1xuXHRcdFx0Y29uc3QgeyBsZWZ0LCB0b3AgfSA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRcdGNvbnN0IFt2V2lkdGgsIHZIZWlnaHRdID0gW3dpbmRvdy5pbm5lcldpZHRoLCB3aW5kb3cuaW5uZXJIZWlnaHRdO1xuXHRcdFx0Y29uc3QgW29XaWR0aCwgb0hlaWdodF0gPSBbb3ZlcmxheS5vZmZzZXRXaWR0aCwgb3ZlcmxheS5vZmZzZXRIZWlnaHRdO1xuXHRcdFx0Y29uc3Qgc2Nyb2xsYmFyV2lkdGggPSBEb21IYW5kbGVyLmNhbGN1bGF0ZVNjcm9sbGJhcldpZHRoKCk7XG5cdFx0XHQvLyByZXNldFxuXHRcdFx0b3ZlcmxheS5zdHlsZS50b3AgPSAnJztcblx0XHRcdG92ZXJsYXkuc3R5bGUubGVmdCA9ICcnO1xuXG5cdFx0XHRpZiAodGhpcy5sYXlvdXRTZXJ2aWNlLmlzSG9yaXpvbnRhbCgpKSB7XG5cdFx0XHRcdGNvbnN0IHdpZHRoID0gbGVmdCArIG9XaWR0aCArIHNjcm9sbGJhcldpZHRoO1xuXHRcdFx0XHRvdmVybGF5LnN0eWxlLmxlZnQgPSB2V2lkdGggPCB3aWR0aCA/IGAke2xlZnQgLSAod2lkdGggLSB2V2lkdGgpfXB4YCA6IGAke2xlZnR9cHhgO1xuXHRcdFx0fSBlbHNlIGlmICh0aGlzLmxheW91dFNlcnZpY2UuaXNTbGltKCkgfHwgdGhpcy5sYXlvdXRTZXJ2aWNlLmlzU2xpbVBsdXMoKSkge1xuXHRcdFx0XHRjb25zdCBoZWlnaHQgPSB0b3AgKyBvSGVpZ2h0O1xuXHRcdFx0XHRvdmVybGF5LnN0eWxlLnRvcCA9IHZIZWlnaHQgPCBoZWlnaHQgPyBgJHt0b3AgLSAoaGVpZ2h0IC0gdkhlaWdodCl9cHhgIDogYCR7dG9wfXB4YDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpdGVtQ2xpY2soZXZlbnQ6IEV2ZW50KSB7XG5cdFx0Ly8gYXZvaWQgcHJvY2Vzc2luZyBkaXNhYmxlZCBpdGVtc1xuXHRcdGlmICh0aGlzLml0ZW0uZGlzYWJsZWQpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gbmF2aWdhdGUgd2l0aCBob3ZlclxuXHRcdGlmICh0aGlzLnJvb3QgJiYgdGhpcy5pc1NsaW0gfHwgdGhpcy5pc0hvcml6b250YWwgfHwgdGhpcy5pc1NsaW1QbHVzKSB7XG5cdFx0XHR0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUubWVudUhvdmVyQWN0aXZlID0gIXRoaXMubGF5b3V0U2VydmljZS5zdGF0ZS5tZW51SG92ZXJBY3RpdmU7XG5cdFx0fVxuXG5cdFx0Ly8gZXhlY3V0ZSBjb21tYW5kXG5cdFx0aWYgKHRoaXMuaXRlbS5jb21tYW5kKSB7XG5cdFx0XHR0aGlzLml0ZW0uY29tbWFuZCh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBpdGVtOiB0aGlzLml0ZW0gfSk7XG5cdFx0fVxuXG5cdFx0Ly8gdG9nZ2xlIGFjdGl2ZSBzdGF0ZVxuXHRcdGlmICh0aGlzLml0ZW0uaXRlbXMpIHtcblx0XHRcdHRoaXMuYWN0aXZlID0gIXRoaXMuYWN0aXZlO1xuXG5cdFx0XHRpZiAodGhpcy5yb290ICYmIHRoaXMuYWN0aXZlICYmICh0aGlzLmlzU2xpbSB8fCB0aGlzLmlzSG9yaXpvbnRhbCB8fCB0aGlzLmlzU2xpbVBsdXMpKSB7XG5cdFx0XHRcdHRoaXMubGF5b3V0U2VydmljZS5vbk92ZXJsYXlTdWJtZW51T3BlbigpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdGlmICh0aGlzLmxheW91dFNlcnZpY2UuaXNNb2JpbGUoKSkge1xuXHRcdFx0XHR0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUuc3RhdGljTWVudU1vYmlsZUFjdGl2ZSA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5pc1NsaW0gfHwgdGhpcy5pc0hvcml6b250YWwgfHwgdGhpcy5pc1NsaW1QbHVzKSB7XG5cdFx0XHRcdHRoaXMubWVudVNlcnZpY2UucmVzZXQoKTtcblx0XHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnN0YXRlLm1lbnVIb3ZlckFjdGl2ZSA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMubWVudVNlcnZpY2Uub25NZW51U3RhdGVDaGFuZ2UoeyBrZXk6IHRoaXMua2V5IH0pO1xuXHR9XG5cblx0b25Nb3VzZUVudGVyKCkge1xuXHRcdC8vIGFjdGl2YXRlIGl0ZW0gb24gaG92ZXJcblx0XHRpZiAodGhpcy5yb290ICYmICh0aGlzLmlzU2xpbSB8fCB0aGlzLmlzSG9yaXpvbnRhbCB8fCB0aGlzLmlzU2xpbVBsdXMpICYmIHRoaXMubGF5b3V0U2VydmljZS5pc0Rlc2t0b3AoKSkge1xuXHRcdFx0aWYgKHRoaXMubGF5b3V0U2VydmljZS5zdGF0ZS5tZW51SG92ZXJBY3RpdmUpIHtcblx0XHRcdFx0dGhpcy5hY3RpdmUgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLm1lbnVTZXJ2aWNlLm9uTWVudVN0YXRlQ2hhbmdlKHsga2V5OiB0aGlzLmtleSB9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRnZXQgc3VibWVudUFuaW1hdGlvbigpIHtcblx0XHRpZiAodGhpcy5sYXlvdXRTZXJ2aWNlLmlzRGVza3RvcCgpICYmICh0aGlzLmxheW91dFNlcnZpY2UuaXNIb3Jpem9udGFsKCkgfHwgdGhpcy5sYXlvdXRTZXJ2aWNlLmlzU2xpbSgpIHx8IHRoaXMubGF5b3V0U2VydmljZS5pc1NsaW1QbHVzKCkpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hY3RpdmUgPyAndmlzaWJsZScgOiAnaGlkZGVuJztcblx0XHR9XG5cblx0XHRlbHNlXG5cdFx0XHRyZXR1cm4gdGhpcy5yb290ID8gJ2V4cGFuZGVkJyA6ICh0aGlzLmFjdGl2ZSA/ICdleHBhbmRlZCcgOiAnY29sbGFwc2VkJyk7XG5cdH1cblxuXHRnZXQgaXNIb3Jpem9udGFsKCkge1xuXHRcdHJldHVybiB0aGlzLmxheW91dFNlcnZpY2UuaXNIb3Jpem9udGFsKCk7XG5cdH1cblxuXHRnZXQgaXNTbGltKCkge1xuXHRcdHJldHVybiB0aGlzLmxheW91dFNlcnZpY2UuaXNTbGltKCk7XG5cdH1cblxuXHRnZXQgaXNTbGltUGx1cygpIHtcblx0XHRyZXR1cm4gdGhpcy5sYXlvdXRTZXJ2aWNlLmlzU2xpbVBsdXMoKTtcblx0fVxuXG5cdEBIb3N0QmluZGluZygnY2xhc3MuYWN0aXZlLW1lbnVpdGVtJylcblx0Z2V0IGFjdGl2ZUNsYXNzKCkge1xuXHRcdHJldHVybiB0aGlzLmFjdGl2ZSAmJiAhdGhpcy5yb290O1xuXHR9XG5cblx0bmdPbkRlc3Ryb3koKSB7XG5cdFx0aWYgKHRoaXMubWVudVNvdXJjZVN1YnNjcmlwdGlvbikge1xuXHRcdFx0dGhpcy5tZW51U291cmNlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMubWVudVJlc2V0U3Vic2NyaXB0aW9uKSB7XG5cdFx0XHR0aGlzLm1lbnVSZXNldFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXHRcdH1cblx0fVxufVxuXG5AQ29tcG9uZW50KHtcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0c2VsZWN0b3I6ICdhcHAtbWVudScsXG5cdGltcG9ydHM6IFtBcHBNZW51SXRlbUNvbXBvbmVudF0sXG5cdHRlbXBsYXRlVXJsOiAnLi9hcHAubWVudS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQXBwTWVudUNvbXBvbmVudCB7XG5cdG1lbnVTZXJ2aWNlID0gaW5qZWN0KE1lbnVTZXJ2aWNlKTtcbn0iLCI8dWwgY2xhc3M9XCJsYXlvdXQtbWVudVwiPlxuXHRAZm9yIChpdGVtIG9mIG1lbnVTZXJ2aWNlLm1lbnVJdGVtcygpOyB0cmFjayAkaW5kZXgpIHtcblx0XHRAaWYgKGl0ZW0uc2VwYXJhdG9yKSB7XG5cdFx0XHQ8bGkgY2xhc3M9XCJtZW51LXNlcGFyYXRvclwiPjwvbGk+XG5cdFx0fSBAZWxzZSB7XG5cdFx0XHQ8bGkgYXBwLW1lbnVpdGVtIFtpdGVtXT1cIml0ZW1cIiBbaW5kZXhdPVwiJGluZGV4XCIgW3Jvb3RdPVwidHJ1ZVwiPjwvbGk+XG5cdFx0fVxuXHR9XG48L3VsPlxuIl19
381
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLm1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC90aGVtZS9sYXlvdXQvYXBwL21lbnUvYXBwLm1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC90aGVtZS9sYXlvdXQvYXBwL21lbnUvYXBwLm1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVELE9BQU8sRUFFTixTQUFTLEVBRVQsV0FBVyxFQUNYLEtBQUssRUFHTCxTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQVUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQWtCLE1BQU0scUJBQXFCLENBQUM7QUFHakcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7QUF5RzdELE1BQU0sT0FBTyxvQkFBb0I7SUFtQmhDLFlBQ1EsYUFBNEIsRUFDM0IsRUFBcUIsRUFDdEIsTUFBYyxFQUNiLFdBQXdCO1FBSHpCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzNCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ3RCLFdBQU0sR0FB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QUNYLENBQUMsQ0FDRjs0QkFDRCxLQUFLLENBQ0osUUFBUSxFQUNSLEtBQUssQ0FBQztnQ0FDTCxPQUFPLEVBQUUsTUFBTTs2QkFDZixDQUFDLENBQ0Y7NEJBQ0QsS0FBSyxDQUNKLFNBQVMsRUFDVCxLQUFLLENBQUM7Z0NBQ0wsT0FBTyxFQUFFLE9BQU87NkJBQ2hCLENBQUMsQ0FDRjs0QkFDRCxVQUFVLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7eUJBQ3JGLENBQUM7cUJBQ0Y7aUJBQ0Q7aUtBRVMsSUFBSTtzQkFBWixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFFOEMsSUFBSTtzQkFBdkQsS0FBSzs7c0JBQUksV0FBVzt1QkFBQyw0QkFBNEI7Z0JBRXpDLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRWdCLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkFzTGhCLFdBQVc7c0JBRGQsV0FBVzt1QkFBQyx1QkFBdUI7O0FBc0JyQyxNQUFNLE9BQU8sZ0JBQWdCO0lBTjdCO1FBT0MsZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDbEM7OEdBRlksZ0JBQWdCO2tHQUFoQixnQkFBZ0Isb0VDcFY3QixpUkFTQSw0Q0R1SGEsb0JBQW9COzsyRkFvTnBCLGdCQUFnQjtrQkFONUIsU0FBUztpQ0FDRyxJQUFJLFlBQ04sVUFBVSxXQUNYLENBQUMsb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzLCBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG5cdENoYW5nZURldGVjdG9yUmVmLFxuXHRDb21wb25lbnQsXG5cdEVsZW1lbnRSZWYsXG5cdEhvc3RCaW5kaW5nLFxuXHRJbnB1dCxcblx0T25EZXN0cm95LFxuXHRPbkluaXQsXG5cdFZpZXdDaGlsZCxcblx0aW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGVyLCBSb3V0ZXJMaW5rLCBSb3V0ZXJMaW5rQWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGFuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciwgQW5pbWF0aW9uRXZlbnQgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcblxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBEb21IYW5kbGVyIH0gZnJvbSAncHJpbWVuZy9kb20nO1xuaW1wb3J0IHsgUmlwcGxlTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9yaXBwbGUnO1xuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XG5cbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBNZW51U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2UvYXBwLm1lbnUuc2VydmljZSc7XG5pbXBvcnQgeyBMYXlvdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9hcHAubGF5b3V0LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0c2VsZWN0b3I6ICdbYXBwLW1lbnVpdGVtXScsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5nLWNvbnRhaW5lcj5cblx0XHRcdEBpZiAocm9vdCkge1xuXHRcdFx0XHQ8ZGl2IGNsYXNzPVwibGF5b3V0LW1lbnVpdGVtLXJvb3QtdGV4dFwiPlxuXHRcdFx0XHRcdHt7IGl0ZW0ubGFiZWwgfX1cblx0XHRcdFx0PC9kaXY+XG5cdFx0XHR9XG5cdFx0XHRAaWYgKGl0ZW0uaXRlbXM/Lmxlbmd0aCkge1xuXHRcdFx0XHQ8YVxuXHRcdFx0XHRcdFthdHRyLmhyZWZdPVwiaXRlbS51cmxcIlxuXHRcdFx0XHRcdChjbGljayk9XCJpdGVtQ2xpY2soJGV2ZW50KVwiXG5cdFx0XHRcdFx0KG1vdXNlZW50ZXIpPVwib25Nb3VzZUVudGVyKClcIlxuXHRcdFx0XHRcdFthdHRyLnRhcmdldF09XCJpdGVtLnRhcmdldFwiXG5cdFx0XHRcdFx0dGFiaW5kZXg9XCIwXCJcblx0XHRcdFx0XHRwUmlwcGxlXG5cdFx0XHRcdFx0W3BUb29sdGlwXT1cIml0ZW0ubGFiZWxcIlxuXHRcdFx0XHRcdFt0b29sdGlwRGlzYWJsZWRdPVwiIShpc1NsaW0gJiYgcm9vdCAmJiAhYWN0aXZlKVwiPlxuXHRcdFx0XHRcdDxpIFtuZ0NsYXNzXT1cIml0ZW0uaWNvblwiIGNsYXNzPVwibGF5b3V0LW1lbnVpdGVtLWljb25cIj48L2k+XG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJsYXlvdXQtbWVudWl0ZW0tdGV4dFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG5cdFx0XHRcdFx0QGlmIChpdGVtLml0ZW1zKSB7XG5cdFx0XHRcdFx0XHQ8aSBjbGFzcz1cInBpIHBpLWZ3IHBpLWFuZ2xlLWRvd24gbGF5b3V0LXN1Ym1lbnUtdG9nZ2xlclwiPjwvaT5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdDwvYT5cblx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHQ8YVxuXHRcdFx0XHRcdChjbGljayk9XCJpdGVtQ2xpY2soJGV2ZW50KVwiXG5cdFx0XHRcdFx0KG1vdXNlZW50ZXIpPVwib25Nb3VzZUVudGVyKClcIlxuXHRcdFx0XHRcdFtyb3V0ZXJMaW5rXT1cIml0ZW0ucm91dGVyTGlua1wiXG5cdFx0XHRcdFx0cm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZS1yb3V0ZVwiXG5cdFx0XHRcdFx0W3JvdXRlckxpbmtBY3RpdmVPcHRpb25zXT1cIlxuXHRcdFx0XHRcdFx0aXRlbS5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucyB8fCB7XG5cdFx0XHRcdFx0XHRcdHBhdGhzOiAnZXhhY3QnLFxuXHRcdFx0XHRcdFx0XHRxdWVyeVBhcmFtczogJ2lnbm9yZWQnLFxuXHRcdFx0XHRcdFx0XHRtYXRyaXhQYXJhbXM6ICdpZ25vcmVkJyxcblx0XHRcdFx0XHRcdFx0ZnJhZ21lbnQ6ICdpZ25vcmVkJ1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFwiXG5cdFx0XHRcdFx0W2ZyYWdtZW50XT1cIml0ZW0uZnJhZ21lbnRcIlxuXHRcdFx0XHRcdFtxdWVyeVBhcmFtc0hhbmRsaW5nXT1cIml0ZW0ucXVlcnlQYXJhbXNIYW5kbGluZ1wiXG5cdFx0XHRcdFx0W3ByZXNlcnZlRnJhZ21lbnRdPVwiaXRlbS5wcmVzZXJ2ZUZyYWdtZW50XCJcblx0XHRcdFx0XHRbc2tpcExvY2F0aW9uQ2hhbmdlXT1cIml0ZW0uc2tpcExvY2F0aW9uQ2hhbmdlXCJcblx0XHRcdFx0XHRbcmVwbGFjZVVybF09XCJpdGVtLnJlcGxhY2VVcmxcIlxuXHRcdFx0XHRcdFtzdGF0ZV09XCJpdGVtLnN0YXRlXCJcblx0XHRcdFx0XHRbcXVlcnlQYXJhbXNdPVwiaXRlbS5xdWVyeVBhcmFtc1wiXG5cdFx0XHRcdFx0W2F0dHIudGFyZ2V0XT1cIml0ZW0udGFyZ2V0XCJcblx0XHRcdFx0XHR0YWJpbmRleD1cIjBcIlxuXHRcdFx0XHRcdHBSaXBwbGVcblx0XHRcdFx0XHRbcFRvb2x0aXBdPVwiaXRlbS5sYWJlbFwiXG5cdFx0XHRcdFx0W3Rvb2x0aXBEaXNhYmxlZF09XCIhKGlzU2xpbSAmJiByb290KVwiPlxuXHRcdFx0XHRcdDxpIFtuZ0NsYXNzXT1cIml0ZW0uaWNvblwiIGNsYXNzPVwibGF5b3V0LW1lbnVpdGVtLWljb25cIj48L2k+XG5cblx0XHRcdFx0XHQ8c3BhbiBjbGFzcz1cImxheW91dC1tZW51aXRlbS10ZXh0XCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cblxuXHRcdFx0XHRcdEBpZiAoaXRlbS5pdGVtcykge1xuXHRcdFx0XHRcdFx0PGkgY2xhc3M9XCJwaSBwaS1mdyBwaS1hbmdsZS1kb3duIGxheW91dC1zdWJtZW51LXRvZ2dsZXJcIj48L2k+XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQ8L2E+XG5cdFx0XHR9XG5cblx0XHRcdEBpZiAoaXRlbS5pdGVtcykge1xuXHRcdFx0XHQ8dWwgI3N1Ym1lbnUgW0BjaGlsZHJlbl09XCJzdWJtZW51QW5pbWF0aW9uXCIgKEBjaGlsZHJlbi5kb25lKT1cIm9uU3VibWVudUFuaW1hdGVkKCRldmVudClcIj5cblx0XHRcdFx0XHRAZm9yIChjaGlsZCBvZiBpdGVtLml0ZW1zOyB0cmFjayBjaGlsZDsgbGV0IGkgPSAkaW5kZXgpIHtcblx0XHRcdFx0XHRcdDxsaSBhcHAtbWVudWl0ZW0gW2l0ZW1dPVwiY2hpbGRcIiBbaW5kZXhdPVwiaVwiIFtwYXJlbnRLZXldPVwia2V5XCI+PC9saT5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdDwvdWw+XG5cdFx0XHR9XG5cdFx0PC9uZy1jb250YWluZXI+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ0NsYXNzLCBSb3V0ZXJMaW5rLCBSb3V0ZXJMaW5rQWN0aXZlLCBOZ1RlbXBsYXRlT3V0bGV0LCBUb29sdGlwTW9kdWxlLCBSaXBwbGVNb2R1bGVdLFxuXHRhbmltYXRpb25zOiBbXG5cdFx0dHJpZ2dlcignY2hpbGRyZW4nLCBbXG5cdFx0XHRzdGF0ZShcblx0XHRcdFx0J2NvbGxhcHNlZCcsXG5cdFx0XHRcdHN0eWxlKHtcblx0XHRcdFx0XHRoZWlnaHQ6ICcwJ1xuXHRcdFx0XHR9KVxuXHRcdFx0KSxcblx0XHRcdHN0YXRlKFxuXHRcdFx0XHQnZXhwYW5kZWQnLFxuXHRcdFx0XHRzdHlsZSh7XG5cdFx0XHRcdFx0aGVpZ2h0OiAnKidcblx0XHRcdFx0fSlcblx0XHRcdCksXG5cdFx0XHRzdGF0ZShcblx0XHRcdFx0J2hpZGRlbicsXG5cdFx0XHRcdHN0eWxlKHtcblx0XHRcdFx0XHRkaXNwbGF5OiAnbm9uZSdcblx0XHRcdFx0fSlcblx0XHRcdCksXG5cdFx0XHRzdGF0ZShcblx0XHRcdFx0J3Zpc2libGUnLFxuXHRcdFx0XHRzdHlsZSh7XG5cdFx0XHRcdFx0ZGlzcGxheTogJ2Jsb2NrJ1xuXHRcdFx0XHR9KVxuXHRcdFx0KSxcblx0XHRcdHRyYW5zaXRpb24oJ2NvbGxhcHNlZCA8PT4gZXhwYW5kZWQnLCBhbmltYXRlKCc0MDBtcyBjdWJpYy1iZXppZXIoMC44NiwgMCwgMC4wNywgMSknKSlcblx0XHRdKVxuXHRdXG59KVxuZXhwb3J0IGNsYXNzIEFwcE1lbnVJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXHRASW5wdXQoKSBpdGVtITogTWVudUl0ZW07XG5cblx0QElucHV0KCkgaW5kZXghOiBudW1iZXI7XG5cblx0QElucHV0KCkgQEhvc3RCaW5kaW5nKCdjbGFzcy5sYXlvdXQtcm9vdC1tZW51aXRlbScpIHJvb3QhOiBib29sZWFuO1xuXG5cdEBJbnB1dCgpIHBhcmVudEtleSE6IHN0cmluZztcblxuXHRAVmlld0NoaWxkKCdzdWJtZW51Jykgc3VibWVudSE6IEVsZW1lbnRSZWY7XG5cblx0YWN0aXZlID0gZmFsc2U7XG5cblx0bWVudVNvdXJjZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG5cdG1lbnVSZXNldFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG5cdGtleTogc3RyaW5nID0gJyc7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHVibGljIGxheW91dFNlcnZpY2U6IExheW91dFNlcnZpY2UsXG5cdFx0cHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG5cdFx0cHVibGljIHJvdXRlcjogUm91dGVyLFxuXHRcdHByaXZhdGUgbWVudVNlcnZpY2U6IE1lbnVTZXJ2aWNlXG5cdCkge1xuXHRcdHRoaXMubWVudVNvdXJjZVN1YnNjcmlwdGlvbiA9IHRoaXMubWVudVNlcnZpY2UubWVudVNvdXJjZSQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuXHRcdFx0UHJvbWlzZS5yZXNvbHZlKG51bGwpLnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRpZiAodmFsdWUucm91dGVFdmVudCkge1xuXHRcdFx0XHRcdHRoaXMuYWN0aXZlID0gdmFsdWUua2V5ID09PSB0aGlzLmtleSB8fCB2YWx1ZS5rZXkuc3RhcnRzV2l0aCh0aGlzLmtleSArICctJykgPyB0cnVlIDogZmFsc2U7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKHZhbHVlLmtleSAhPT0gdGhpcy5rZXkgJiYgIXZhbHVlLmtleS5zdGFydHNXaXRoKHRoaXMua2V5ICsgJy0nKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5hY3RpdmUgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5tZW51UmVzZXRTdWJzY3JpcHRpb24gPSB0aGlzLm1lbnVTZXJ2aWNlLnJlc2V0U291cmNlJC5zdWJzY3JpYmUoKCkgPT4ge1xuXHRcdFx0dGhpcy5hY3RpdmUgPSBmYWxzZTtcblx0XHR9KTtcblxuXHRcdHRoaXMucm91dGVyLmV2ZW50cy5waXBlKGZpbHRlcigoZXZlbnQpID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkpLnN1YnNjcmliZSgocGFyYW1zKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5pc1NsaW1QbHVzIHx8IHRoaXMuaXNTbGltIHx8IHRoaXMuaXNIb3Jpem9udGFsKSB7XG5cdFx0XHRcdHRoaXMuYWN0aXZlID0gZmFsc2U7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZiAodGhpcy5pdGVtLnJvdXRlckxpbmspIHtcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZUFjdGl2ZVN0YXRlRnJvbVJvdXRlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdG5nT25Jbml0KCkge1xuXHRcdHRoaXMua2V5ID0gdGhpcy5wYXJlbnRLZXkgPyB0aGlzLnBhcmVudEtleSArICctJyArIHRoaXMuaW5kZXggOiBTdHJpbmcodGhpcy5pbmRleCk7XG5cblx0XHRpZiAoISh0aGlzLmlzU2xpbVBsdXMgfHwgdGhpcy5pc1NsaW0gfHwgdGhpcy5pc0hvcml6b250YWwpICYmIHRoaXMuaXRlbS5yb3V0ZXJMaW5rKSB7XG5cdFx0XHR0aGlzLnVwZGF0ZUFjdGl2ZVN0YXRlRnJvbVJvdXRlKCk7XG5cdFx0fVxuXHR9XG5cblx0bmdBZnRlclZpZXdDaGVja2VkKCkge1xuXHRcdGlmIChcblx0XHRcdHRoaXMucm9vdCAmJlxuXHRcdFx0dGhpcy5hY3RpdmUgJiZcblx0XHRcdHRoaXMubGF5b3V0U2VydmljZS5pc0Rlc2t0b3AoKSAmJlxuXHRcdFx0KHRoaXMubGF5b3V0U2VydmljZS5pc0hvcml6b250YWwoKSB8fCB0aGlzLmxheW91dFNlcnZpY2UuaXNTbGltKCkgfHwgdGhpcy5sYXlvdXRTZXJ2aWNlLmlzU2xpbVBsdXMoKSlcblx0XHQpIHtcblx0XHRcdHRoaXMuY2FsY3VsYXRlUG9zaXRpb24odGhpcy5zdWJtZW51Py5uYXRpdmVFbGVtZW50LCB0aGlzLnN1Ym1lbnU/Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudCk7XG5cdFx0fVxuXHR9XG5cblx0dXBkYXRlQWN0aXZlU3RhdGVGcm9tUm91dGUoKSB7XG5cdFx0bGV0IGFjdGl2ZVJvdXRlID0gdGhpcy5yb3V0ZXIuaXNBY3RpdmUodGhpcy5pdGVtLnJvdXRlckxpbmtbMF0sIHtcblx0XHRcdHBhdGhzOiAnZXhhY3QnLFxuXHRcdFx0cXVlcnlQYXJhbXM6ICdpZ25vcmVkJyxcblx0XHRcdG1hdHJpeFBhcmFtczogJ2lnbm9yZWQnLFxuXHRcdFx0ZnJhZ21lbnQ6ICdpZ25vcmVkJ1xuXHRcdH0pO1xuXG5cdFx0aWYgKGFjdGl2ZVJvdXRlKSB7XG5cdFx0XHR0aGlzLm1lbnVTZXJ2aWNlLm9uTWVudVN0YXRlQ2hhbmdlKHsga2V5OiB0aGlzLmtleSwgcm91dGVFdmVudDogdHJ1ZSB9KTtcblx0XHR9XG5cdH1cblxuXHRvblN1Ym1lbnVBbmltYXRlZChldmVudDogQW5pbWF0aW9uRXZlbnQpIHtcblx0XHRpZiAoXG5cdFx0XHRldmVudC50b1N0YXRlID09PSAndmlzaWJsZScgJiZcblx0XHRcdHRoaXMubGF5b3V0U2VydmljZS5pc0Rlc2t0b3AoKSAmJlxuXHRcdFx0KHRoaXMubGF5b3V0U2VydmljZS5pc0hvcml6b250YWwoKSB8fCB0aGlzLmxheW91dFNlcnZpY2UuaXNTbGltKCkgfHwgdGhpcy5sYXlvdXRTZXJ2aWNlLmlzU2xpbVBsdXMoKSlcblx0XHQpIHtcblx0XHRcdGNvbnN0IGVsID0gPEhUTUxVTGlzdEVsZW1lbnQ+ZXZlbnQuZWxlbWVudDtcblx0XHRcdGNvbnN0IGVsUGFyZW50ID0gPEhUTUxVTGlzdEVsZW1lbnQ+ZWwucGFyZW50RWxlbWVudDtcblx0XHRcdHRoaXMuY2FsY3VsYXRlUG9zaXRpb24oZWwsIGVsUGFyZW50KTtcblx0XHR9XG5cdH1cblxuXHRjYWxjdWxhdGVQb3NpdGlvbihvdmVybGF5OiBIVE1MRWxlbWVudCwgdGFyZ2V0OiBIVE1MRWxlbWVudCkge1xuXHRcdGlmIChvdmVybGF5KSB7XG5cdFx0XHRjb25zdCB7IGxlZnQsIHRvcCB9ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdFx0Y29uc3QgW3ZXaWR0aCwgdkhlaWdodF0gPSBbd2luZG93LmlubmVyV2lkdGgsIHdpbmRvdy5pbm5lckhlaWdodF07XG5cdFx0XHRjb25zdCBbb1dpZHRoLCBvSGVpZ2h0XSA9IFtvdmVybGF5Lm9mZnNldFdpZHRoLCBvdmVybGF5Lm9mZnNldEhlaWdodF07XG5cdFx0XHRjb25zdCBzY3JvbGxiYXJXaWR0aCA9IERvbUhhbmRsZXIuY2FsY3VsYXRlU2Nyb2xsYmFyV2lkdGgoKTtcblx0XHRcdC8vIHJlc2V0XG5cdFx0XHRvdmVybGF5LnN0eWxlLnRvcCA9ICcnO1xuXHRcdFx0b3ZlcmxheS5zdHlsZS5sZWZ0ID0gJyc7XG5cblx0XHRcdGlmICh0aGlzLmxheW91dFNlcnZpY2UuaXNIb3Jpem9udGFsKCkpIHtcblx0XHRcdFx0Y29uc3Qgd2lkdGggPSBsZWZ0ICsgb1dpZHRoICsgc2Nyb2xsYmFyV2lkdGg7XG5cdFx0XHRcdG92ZXJsYXkuc3R5bGUubGVmdCA9IHZXaWR0aCA8IHdpZHRoID8gYCR7bGVmdCAtICh3aWR0aCAtIHZXaWR0aCl9cHhgIDogYCR7bGVmdH1weGA7XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMubGF5b3V0U2VydmljZS5pc1NsaW0oKSB8fCB0aGlzLmxheW91dFNlcnZpY2UuaXNTbGltUGx1cygpKSB7XG5cdFx0XHRcdGNvbnN0IGhlaWdodCA9IHRvcCArIG9IZWlnaHQ7XG5cdFx0XHRcdG92ZXJsYXkuc3R5bGUudG9wID0gdkhlaWdodCA8IGhlaWdodCA/IGAke3RvcCAtIChoZWlnaHQgLSB2SGVpZ2h0KX1weGAgOiBgJHt0b3B9cHhgO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGl0ZW1DbGljayhldmVudDogRXZlbnQpIHtcblx0XHQvLyBhdm9pZCBwcm9jZXNzaW5nIGRpc2FibGVkIGl0ZW1zXG5cdFx0aWYgKHRoaXMuaXRlbS5kaXNhYmxlZCkge1xuXHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBuYXZpZ2F0ZSB3aXRoIGhvdmVyXG5cdFx0aWYgKCh0aGlzLnJvb3QgJiYgdGhpcy5pc1NsaW0pIHx8IHRoaXMuaXNIb3Jpem9udGFsIHx8IHRoaXMuaXNTbGltUGx1cykge1xuXHRcdFx0dGhpcy5sYXlvdXRTZXJ2aWNlLnN0YXRlLm1lbnVIb3ZlckFjdGl2ZSA9ICF0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUubWVudUhvdmVyQWN0aXZlO1xuXHRcdH1cblxuXHRcdC8vIGV4ZWN1dGUgY29tbWFuZFxuXHRcdGlmICh0aGlzLml0ZW0uY29tbWFuZCkge1xuXHRcdFx0dGhpcy5pdGVtLmNvbW1hbmQoeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgaXRlbTogdGhpcy5pdGVtIH0pO1xuXHRcdH1cblxuXHRcdC8vIHRvZ2dsZSBhY3RpdmUgc3RhdGVcblx0XHRpZiAodGhpcy5pdGVtLml0ZW1zKSB7XG5cdFx0XHR0aGlzLmFjdGl2ZSA9ICF0aGlzLmFjdGl2ZTtcblxuXHRcdFx0aWYgKHRoaXMucm9vdCAmJiB0aGlzLmFjdGl2ZSAmJiAodGhpcy5pc1NsaW0gfHwgdGhpcy5pc0hvcml6b250YWwgfHwgdGhpcy5pc1NsaW1QbHVzKSkge1xuXHRcdFx0XHR0aGlzLmxheW91dFNlcnZpY2Uub25PdmVybGF5U3VibWVudU9wZW4oKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRoaXMubGF5b3V0U2VydmljZS5pc01vYmlsZSgpKSB7XG5cdFx0XHRcdHRoaXMubGF5b3V0U2VydmljZS5zdGF0ZS5zdGF0aWNNZW51TW9iaWxlQWN0aXZlID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0aGlzLmlzU2xpbSB8fCB0aGlzLmlzSG9yaXpvbnRhbCB8fCB0aGlzLmlzU2xpbVBsdXMpIHtcblx0XHRcdFx0dGhpcy5tZW51U2VydmljZS5yZXNldCgpO1xuXHRcdFx0XHR0aGlzLmxheW91dFNlcnZpY2Uuc3RhdGUubWVudUhvdmVyQWN0aXZlID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5tZW51U2VydmljZS5vbk1lbnVTdGF0ZUNoYW5nZSh7IGtleTogdGhpcy5rZXkgfSk7XG5cdH1cblxuXHRvbk1vdXNlRW50ZXIoKSB7XG5cdFx0Ly8gYWN0aXZhdGUgaXRlbSBvbiBob3ZlclxuXHRcdGlmICh0aGlzLnJvb3QgJiYgKHRoaXMuaXNTbGltIHx8IHRoaXMuaXNIb3Jpem9udGFsIHx8IHRoaXMuaXNTbGltUGx1cykgJiYgdGhpcy5sYXlvdXRTZXJ2aWNlLmlzRGVza3RvcCgpKSB7XG5cdFx0XHRpZiAodGhpcy5sYXlvdXRTZXJ2aWNlLnN0YXRlLm1lbnVIb3ZlckFjdGl2ZSkge1xuXHRcdFx0XHR0aGlzLmFjdGl2ZSA9IHRydWU7XG5cdFx0XHRcdHRoaXMubWVudVNlcnZpY2Uub25NZW51U3RhdGVDaGFuZ2UoeyBrZXk6IHRoaXMua2V5IH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGdldCBzdWJtZW51QW5pbWF0aW9uKCkge1xuXHRcdGlmIChcblx0XHRcdHRoaXMubGF5b3V0U2VydmljZS5pc0Rlc2t0b3AoKSAmJlxuXHRcdFx0KHRoaXMubGF5b3V0U2VydmljZS5pc0hvcml6b250YWwoKSB8fCB0aGlzLmxheW91dFNlcnZpY2UuaXNTbGltKCkgfHwgdGhpcy5sYXlvdXRTZXJ2aWNlLmlzU2xpbVBsdXMoKSlcblx0XHQpIHtcblx0XHRcdHJldHVybiB0aGlzLmFjdGl2ZSA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nO1xuXHRcdH0gZWxzZVxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0dGhpcy5yb290ID8gJ2V4cGFuZGVkJ1xuXHRcdFx0XHQ6IHRoaXMuYWN0aXZlID8gJ2V4cGFuZGVkJ1xuXHRcdFx0XHQ6ICdjb2xsYXBzZWQnXG5cdFx0XHQpO1xuXHR9XG5cblx0Z2V0IGlzSG9yaXpvbnRhbCgpIHtcblx0XHRyZXR1cm4gdGhpcy5sYXlvdXRTZXJ2aWNlLmlzSG9yaXpvbnRhbCgpO1xuXHR9XG5cblx0Z2V0IGlzU2xpbSgpIHtcblx0XHRyZXR1cm4gdGhpcy5sYXlvdXRTZXJ2aWNlLmlzU2xpbSgpO1xuXHR9XG5cblx0Z2V0IGlzU2xpbVBsdXMoKSB7XG5cdFx0cmV0dXJuIHRoaXMubGF5b3V0U2VydmljZS5pc1NsaW1QbHVzKCk7XG5cdH1cblxuXHRASG9zdEJpbmRpbmcoJ2NsYXNzLmFjdGl2ZS1tZW51aXRlbScpXG5cdGdldCBhY3RpdmVDbGFzcygpIHtcblx0XHRyZXR1cm4gdGhpcy5hY3RpdmUgJiYgIXRoaXMucm9vdDtcblx0fVxuXG5cdG5nT25EZXN0cm95KCkge1xuXHRcdGlmICh0aGlzLm1lbnVTb3VyY2VTdWJzY3JpcHRpb24pIHtcblx0XHRcdHRoaXMubWVudVNvdXJjZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLm1lbnVSZXNldFN1YnNjcmlwdGlvbikge1xuXHRcdFx0dGhpcy5tZW51UmVzZXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblx0XHR9XG5cdH1cbn1cblxuQENvbXBvbmVudCh7XG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHNlbGVjdG9yOiAnYXBwLW1lbnUnLFxuXHRpbXBvcnRzOiBbQXBwTWVudUl0ZW1Db21wb25lbnRdLFxuXHR0ZW1wbGF0ZVVybDogJy4vYXBwLm1lbnUuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFwcE1lbnVDb21wb25lbnQge1xuXHRtZW51U2VydmljZSA9IGluamVjdChNZW51U2VydmljZSk7XG59XG4iLCI8dWwgY2xhc3M9XCJsYXlvdXQtbWVudVwiPlxuXHRAZm9yIChpdGVtIG9mIG1lbnVTZXJ2aWNlLm1lbnVJdGVtcygpOyB0cmFjayAkaW5kZXgpIHtcblx0XHRAaWYgKGl0ZW0uc2VwYXJhdG9yKSB7XG5cdFx0XHQ8bGkgY2xhc3M9XCJtZW51LXNlcGFyYXRvclwiPjwvbGk+XG5cdFx0fSBAZWxzZSB7XG5cdFx0XHQ8bGkgYXBwLW1lbnVpdGVtIFtpdGVtXT1cIml0ZW1cIiBbaW5kZXhdPVwiJGluZGV4XCIgW3Jvb3RdPVwidHJ1ZVwiPjwvbGk+XG5cdFx0fVxuXHR9XG48L3VsPlxuIl19