@ardium-ui/ui 1.0.2 → 2.0.1

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 (390) hide show
  1. package/esm2022/lib/_internal/boolean-component.mjs +28 -42
  2. package/esm2022/lib/_internal/clear-button/clear-button.component.mjs +5 -5
  3. package/esm2022/lib/_internal/clear-button/clear-button.module.mjs +4 -4
  4. package/esm2022/lib/_internal/disablable-component.mjs +24 -22
  5. package/esm2022/lib/_internal/focusable-component.mjs +12 -25
  6. package/esm2022/lib/_internal/item-storages/dropdown-item-storage.mjs +172 -169
  7. package/esm2022/lib/_internal/item-storages/simple-item-storage.mjs +115 -120
  8. package/esm2022/lib/_internal/item-storages/simplest-item-storage.mjs +56 -53
  9. package/esm2022/lib/_internal/models/pagination.model.mjs +72 -106
  10. package/esm2022/lib/_internal/ngmodel-component.mjs +5 -5
  11. package/esm2022/lib/_internal/queue.mjs +1 -1
  12. package/esm2022/lib/_internal/selectable-list-component.mjs +74 -98
  13. package/esm2022/lib/badge/badge.directive.mjs +70 -99
  14. package/esm2022/lib/badge/badge.module.mjs +4 -4
  15. package/esm2022/lib/badge/index.mjs +4 -0
  16. package/esm2022/lib/buttons/_button-base.mjs +13 -35
  17. package/esm2022/lib/buttons/button/button.component.mjs +22 -37
  18. package/esm2022/lib/buttons/button/button.module.mjs +4 -4
  19. package/esm2022/lib/buttons/button/index.mjs +3 -0
  20. package/esm2022/lib/buttons/fab/fab.component.mjs +16 -28
  21. package/esm2022/lib/buttons/fab/fab.module.mjs +4 -4
  22. package/esm2022/lib/buttons/fab/index.mjs +3 -0
  23. package/esm2022/lib/buttons/icon-button/icon-button.component.mjs +17 -25
  24. package/esm2022/lib/buttons/icon-button/icon-button.module.mjs +4 -4
  25. package/esm2022/lib/buttons/icon-button/index.mjs +3 -0
  26. package/esm2022/lib/card/card.children.mjs +32 -33
  27. package/esm2022/lib/card/card.component.mjs +14 -17
  28. package/esm2022/lib/card/card.module.mjs +4 -4
  29. package/esm2022/lib/card/index.mjs +5 -0
  30. package/esm2022/lib/checkbox/checkbox.component.mjs +33 -46
  31. package/esm2022/lib/checkbox/checkbox.module.mjs +4 -4
  32. package/esm2022/lib/checkbox/index.mjs +4 -0
  33. package/esm2022/lib/checkbox-list/checkbox-list.component.mjs +31 -57
  34. package/esm2022/lib/checkbox-list/checkbox-list.module.mjs +4 -4
  35. package/esm2022/lib/checkbox-list/index.mjs +4 -0
  36. package/esm2022/lib/chip/chip.component.mjs +22 -42
  37. package/esm2022/lib/chip/chip.module.mjs +4 -4
  38. package/esm2022/lib/chip/deletable-chip/deletable-chip.component.mjs +28 -53
  39. package/esm2022/lib/chip/index.mjs +5 -0
  40. package/esm2022/lib/chip/selectable-chip/selectable-chip.component.mjs +25 -49
  41. package/esm2022/lib/color/color-display/color-display.component.mjs +15 -32
  42. package/esm2022/lib/color/color-display/color-display.module.mjs +4 -4
  43. package/esm2022/lib/color/color-display/index.mjs +4 -0
  44. package/esm2022/lib/color/color-picker/color-picker.types.mjs +1 -1
  45. package/esm2022/lib/dialog/dialog.component.mjs +54 -130
  46. package/esm2022/lib/dialog/dialog.directives.mjs +3 -3
  47. package/esm2022/lib/dialog/dialog.module.mjs +4 -4
  48. package/esm2022/lib/dialog/dialog.types.mjs +1 -1
  49. package/esm2022/lib/dialog/index.mjs +5 -0
  50. package/esm2022/lib/divider/divider.component.mjs +9 -14
  51. package/esm2022/lib/divider/divider.module.mjs +4 -4
  52. package/esm2022/lib/divider/index.mjs +3 -0
  53. package/esm2022/lib/dropdown-panel/dropdown-panel.component.mjs +40 -59
  54. package/esm2022/lib/dropdown-panel/dropdown-panel.module.mjs +4 -4
  55. package/esm2022/lib/dropdown-panel/index.mjs +4 -0
  56. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.component.mjs +12 -17
  57. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.directives.mjs +9 -9
  58. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.module.mjs +6 -6
  59. package/esm2022/lib/file-inputs/file-drop-area/index.mjs +4 -0
  60. package/esm2022/lib/file-inputs/file-input/file-input.component.mjs +24 -50
  61. package/esm2022/lib/file-inputs/file-input/file-input.directives.mjs +18 -18
  62. package/esm2022/lib/file-inputs/file-input/file-input.module.mjs +4 -4
  63. package/esm2022/lib/file-inputs/file-input/index.mjs +4 -0
  64. package/esm2022/lib/file-inputs/file-input-base.mjs +38 -72
  65. package/esm2022/lib/form-field-frame/form-field-frame.component.mjs +20 -47
  66. package/esm2022/lib/form-field-frame/form-field-frame.directives.mjs +6 -6
  67. package/esm2022/lib/form-field-frame/form-field-frame.module.mjs +4 -4
  68. package/esm2022/lib/form-field-frame/index.mjs +4 -0
  69. package/esm2022/lib/icon/icon.component.mjs +32 -67
  70. package/esm2022/lib/icon/icon.module.mjs +4 -4
  71. package/esm2022/lib/icon/icon.pipe.mjs +3 -3
  72. package/esm2022/lib/icon/index.mjs +4 -0
  73. package/esm2022/lib/inputs/color-input/color-input.directives.mjs +24 -24
  74. package/esm2022/lib/inputs/color-input/color-input.types.mjs +1 -1
  75. package/esm2022/lib/inputs/digit-input/digit-input.component.mjs +65 -115
  76. package/esm2022/lib/inputs/digit-input/digit-input.model.mjs +83 -92
  77. package/esm2022/lib/inputs/digit-input/digit-input.module.mjs +4 -4
  78. package/esm2022/lib/inputs/digit-input/digit-input.types.mjs +1 -1
  79. package/esm2022/lib/inputs/digit-input/digit-input.utils.mjs +1 -1
  80. package/esm2022/lib/inputs/digit-input/index.mjs +4 -0
  81. package/esm2022/lib/inputs/hex-input/hex-input.component.mjs +59 -122
  82. package/esm2022/lib/inputs/hex-input/hex-input.directives.mjs +9 -9
  83. package/esm2022/lib/inputs/hex-input/hex-input.module.mjs +24 -8
  84. package/esm2022/lib/inputs/hex-input/index.mjs +4 -0
  85. package/esm2022/lib/inputs/hex-input.model.mjs +24 -33
  86. package/esm2022/lib/inputs/input/index.mjs +4 -0
  87. package/esm2022/lib/inputs/input/input.component.mjs +95 -154
  88. package/esm2022/lib/inputs/input/input.directives.mjs +16 -16
  89. package/esm2022/lib/inputs/input/input.module.mjs +21 -7
  90. package/esm2022/lib/inputs/input-transformers.mjs +6 -6
  91. package/esm2022/lib/inputs/input-utils.mjs +75 -94
  92. package/esm2022/lib/inputs/number-input/index.mjs +4 -0
  93. package/esm2022/lib/inputs/number-input/number-input.component.mjs +106 -170
  94. package/esm2022/lib/inputs/number-input/number-input.directives.mjs +3 -3
  95. package/esm2022/lib/inputs/number-input/number-input.module.mjs +4 -4
  96. package/esm2022/lib/inputs/password-input/index.mjs +5 -0
  97. package/esm2022/lib/inputs/password-input/password-input.component.mjs +74 -144
  98. package/esm2022/lib/inputs/password-input/password-input.directives.mjs +12 -12
  99. package/esm2022/lib/inputs/password-input/password-input.module.mjs +4 -4
  100. package/esm2022/lib/inputs/password-input/password-input.types.mjs +1 -1
  101. package/esm2022/lib/inputs/simple-input/index.mjs +4 -0
  102. package/esm2022/lib/inputs/simple-input/simple-input.component.mjs +57 -110
  103. package/esm2022/lib/inputs/simple-input/simple-input.directives.mjs +9 -9
  104. package/esm2022/lib/inputs/simple-input/simple-input.module.mjs +4 -4
  105. package/esm2022/lib/kbd/index.mjs +4 -0
  106. package/esm2022/lib/kbd/kbd.component.mjs +15 -29
  107. package/esm2022/lib/kbd/kbd.module.mjs +4 -4
  108. package/esm2022/lib/kbd/kbd.pipe.mjs +3 -3
  109. package/esm2022/lib/kbd-shortcut/index.mjs +3 -0
  110. package/esm2022/lib/kbd-shortcut/kbd-shortcut.component.mjs +23 -40
  111. package/esm2022/lib/kbd-shortcut/kbd-shortcut.module.mjs +4 -4
  112. package/esm2022/lib/modal/index.mjs +3 -0
  113. package/esm2022/lib/modal/modal.component.mjs +42 -83
  114. package/esm2022/lib/modal/modal.module.mjs +4 -4
  115. package/esm2022/lib/option/index.mjs +3 -0
  116. package/esm2022/lib/option/option.component.mjs +24 -46
  117. package/esm2022/lib/option/option.module.mjs +4 -4
  118. package/esm2022/lib/progress-bar/index.mjs +5 -0
  119. package/esm2022/lib/progress-bar/progress-bar.component.mjs +43 -81
  120. package/esm2022/lib/progress-bar/progress-bar.directive.mjs +3 -3
  121. package/esm2022/lib/progress-bar/progress-bar.module.mjs +4 -4
  122. package/esm2022/lib/progress-bar/progress-bar.types.mjs +1 -1
  123. package/esm2022/lib/progress-circle/index.mjs +5 -0
  124. package/esm2022/lib/progress-circle/progress-circle.component.mjs +33 -78
  125. package/esm2022/lib/progress-circle/progress-circle.directive.mjs +3 -3
  126. package/esm2022/lib/progress-circle/progress-circle.module.mjs +4 -4
  127. package/esm2022/lib/progress-circle/progress-circle.types.mjs +1 -1
  128. package/esm2022/lib/radio/index.mjs +4 -0
  129. package/esm2022/lib/radio/radio/radio.component.mjs +16 -25
  130. package/esm2022/lib/radio/radio-group.component.mjs +71 -85
  131. package/esm2022/lib/radio/radio.module.mjs +4 -4
  132. package/esm2022/lib/search-functions.mjs +7 -7
  133. package/esm2022/lib/segment/index.mjs +5 -0
  134. package/esm2022/lib/segment/segment.component.mjs +70 -137
  135. package/esm2022/lib/segment/segment.directives.mjs +4 -4
  136. package/esm2022/lib/segment/segment.module.mjs +4 -4
  137. package/esm2022/lib/select/index.mjs +5 -0
  138. package/esm2022/lib/select/select.component.mjs +348 -655
  139. package/esm2022/lib/select/select.directive.mjs +46 -46
  140. package/esm2022/lib/select/select.module.mjs +4 -4
  141. package/esm2022/lib/select/select.types.mjs +1 -1
  142. package/esm2022/lib/slide-toggle/index.mjs +4 -0
  143. package/esm2022/lib/slide-toggle/slide-toggle.component.mjs +19 -24
  144. package/esm2022/lib/slide-toggle/slide-toggle.module.mjs +4 -4
  145. package/esm2022/lib/slide-toggle/slide-toggle.types.mjs +5 -0
  146. package/esm2022/lib/slider/abstract-slider.mjs +111 -200
  147. package/esm2022/lib/slider/index.mjs +7 -0
  148. package/esm2022/lib/slider/range-slider/range-slider.component.mjs +26 -23
  149. package/esm2022/lib/slider/range-slider/range-slider.module.mjs +4 -4
  150. package/esm2022/lib/slider/slider.component.mjs +13 -10
  151. package/esm2022/lib/slider/slider.directive.mjs +3 -3
  152. package/esm2022/lib/slider/slider.module.mjs +7 -7
  153. package/esm2022/lib/slider/slider.types.mjs +1 -1
  154. package/esm2022/lib/snackbar/snackbar-ref.mjs +1 -1
  155. package/esm2022/lib/snackbar/snackbar.component.mjs +8 -8
  156. package/esm2022/lib/snackbar/snackbar.service.mjs +13 -12
  157. package/esm2022/lib/snackbar/snackbar.types.mjs +1 -1
  158. package/esm2022/lib/spinner/index.mjs +3 -0
  159. package/esm2022/lib/spinner/spinner.component.mjs +9 -13
  160. package/esm2022/lib/spinner/spinner.module.mjs +4 -4
  161. package/esm2022/lib/star/index.mjs +4 -0
  162. package/esm2022/lib/star/star-button/index.mjs +3 -0
  163. package/esm2022/lib/star/star-button/star-button.component.mjs +17 -26
  164. package/esm2022/lib/star/star-button/star-button.module.mjs +4 -4
  165. package/esm2022/lib/star/star-display/index.mjs +3 -0
  166. package/esm2022/lib/star/star-display/star-display.component.mjs +48 -55
  167. package/esm2022/lib/star/star-display/star-display.module.mjs +4 -4
  168. package/esm2022/lib/star/star-input/index.mjs +3 -0
  169. package/esm2022/lib/star/star-input/star-input.component.mjs +70 -106
  170. package/esm2022/lib/star/star-input/star-input.module.mjs +4 -4
  171. package/esm2022/lib/star/star.component.mjs +12 -20
  172. package/esm2022/lib/star/star.module.mjs +4 -4
  173. package/esm2022/lib/statebox/index.mjs +3 -0
  174. package/esm2022/lib/statebox/statebox.component.mjs +64 -102
  175. package/esm2022/lib/statebox/statebox.module.mjs +4 -4
  176. package/esm2022/lib/statebox/statebox.types.mjs +1 -1
  177. package/esm2022/lib/tabber/index.mjs +4 -0
  178. package/esm2022/lib/tabber/tab/tab.component.mjs +42 -0
  179. package/esm2022/lib/tabber/tabber.component.mjs +83 -0
  180. package/esm2022/lib/tabber/tabber.module.mjs +19 -0
  181. package/esm2022/lib/table/index.mjs +5 -0
  182. package/esm2022/lib/table/table-item-storage.mjs +204 -200
  183. package/esm2022/lib/table/table.component.mjs +184 -304
  184. package/esm2022/lib/table/table.directives.mjs +19 -21
  185. package/esm2022/lib/table/table.module.mjs +4 -4
  186. package/esm2022/lib/table/utils.mjs +1 -1
  187. package/esm2022/lib/table-from-csv/index.mjs +3 -0
  188. package/esm2022/lib/table-from-csv/table-from-csv.component.mjs +85 -29
  189. package/esm2022/lib/table-from-csv/table-from-csv.module.mjs +4 -4
  190. package/esm2022/lib/table-pagination/index.mjs +4 -0
  191. package/esm2022/lib/table-pagination/table-pagination.component.mjs +46 -114
  192. package/esm2022/lib/table-pagination/table-pagination.module.mjs +4 -4
  193. package/esm2022/lib/types/item-storage.types.mjs +1 -1
  194. package/esm2022/lib/types/utility.types.mjs +2 -2
  195. package/esm2022/public-api.mjs +58 -182
  196. package/fesm2022/ardium-ui-ui.mjs +7847 -11692
  197. package/fesm2022/ardium-ui-ui.mjs.map +1 -1
  198. package/lib/_internal/boolean-component.d.ts +8 -9
  199. package/lib/_internal/clear-button/clear-button.component.d.ts +1 -1
  200. package/lib/_internal/disablable-component.d.ts +12 -7
  201. package/lib/_internal/focusable-component.d.ts +5 -7
  202. package/lib/_internal/item-storages/dropdown-item-storage.d.ts +43 -41
  203. package/lib/_internal/item-storages/simple-item-storage.d.ts +28 -25
  204. package/lib/_internal/item-storages/simplest-item-storage.d.ts +14 -9
  205. package/lib/_internal/models/pagination.model.d.ts +38 -42
  206. package/lib/_internal/ngmodel-component.d.ts +1 -1
  207. package/lib/_internal/selectable-list-component.d.ts +30 -30
  208. package/lib/badge/badge.directive.d.ts +15 -20
  209. package/lib/badge/index.d.ts +3 -0
  210. package/lib/buttons/_button-base.d.ts +9 -12
  211. package/lib/buttons/button/button.component.d.ts +6 -8
  212. package/lib/buttons/button/index.d.ts +2 -0
  213. package/lib/buttons/fab/fab.component.d.ts +4 -6
  214. package/lib/buttons/fab/index.d.ts +2 -0
  215. package/lib/buttons/icon-button/icon-button.component.d.ts +6 -7
  216. package/lib/buttons/icon-button/index.d.ts +2 -0
  217. package/lib/card/card.children.d.ts +4 -3
  218. package/lib/card/card.component.d.ts +5 -4
  219. package/lib/card/index.d.ts +4 -0
  220. package/lib/checkbox/checkbox.component.d.ts +8 -12
  221. package/lib/checkbox/index.d.ts +3 -0
  222. package/lib/checkbox-list/checkbox-list.component.d.ts +22 -21
  223. package/lib/checkbox-list/index.d.ts +3 -0
  224. package/lib/chip/chip.component.d.ts +8 -10
  225. package/lib/chip/deletable-chip/deletable-chip.component.d.ts +11 -14
  226. package/lib/chip/index.d.ts +4 -0
  227. package/lib/chip/selectable-chip/selectable-chip.component.d.ts +10 -12
  228. package/lib/color/color-display/color-display.component.d.ts +6 -9
  229. package/lib/color/color-display/index.d.ts +3 -0
  230. package/lib/color/color-picker/color-picker.types.d.ts +4 -4
  231. package/lib/dialog/dialog.component.d.ts +25 -35
  232. package/lib/dialog/dialog.types.d.ts +2 -2
  233. package/lib/dialog/index.d.ts +4 -0
  234. package/lib/divider/divider.component.d.ts +3 -4
  235. package/lib/divider/index.d.ts +2 -0
  236. package/lib/dropdown-panel/dropdown-panel.component.d.ts +17 -20
  237. package/lib/dropdown-panel/index.d.ts +3 -0
  238. package/lib/file-inputs/file-drop-area/file-drop-area.component.d.ts +5 -4
  239. package/lib/file-inputs/file-drop-area/index.d.ts +3 -0
  240. package/lib/file-inputs/file-input/file-input.component.d.ts +13 -17
  241. package/lib/file-inputs/file-input/index.d.ts +3 -0
  242. package/lib/file-inputs/file-input-base.d.ts +13 -18
  243. package/lib/form-field-frame/form-field-frame.component.d.ts +12 -16
  244. package/lib/form-field-frame/index.d.ts +3 -0
  245. package/lib/icon/icon.component.d.ts +10 -19
  246. package/lib/icon/index.d.ts +3 -0
  247. package/lib/inputs/color-input/color-input.types.d.ts +2 -2
  248. package/lib/inputs/digit-input/digit-input.component.d.ts +22 -30
  249. package/lib/inputs/digit-input/digit-input.model.d.ts +8 -12
  250. package/lib/inputs/digit-input/digit-input.types.d.ts +4 -4
  251. package/lib/inputs/digit-input/digit-input.utils.d.ts +4 -5
  252. package/lib/inputs/digit-input/index.d.ts +3 -0
  253. package/lib/inputs/hex-input/hex-input.component.d.ts +32 -38
  254. package/lib/inputs/hex-input/index.d.ts +3 -0
  255. package/lib/inputs/hex-input.model.d.ts +10 -11
  256. package/lib/inputs/input/index.d.ts +3 -0
  257. package/lib/inputs/input/input.component.d.ts +34 -40
  258. package/lib/inputs/input/input.directives.d.ts +3 -3
  259. package/lib/inputs/input-utils.d.ts +24 -27
  260. package/lib/inputs/number-input/index.d.ts +3 -0
  261. package/lib/inputs/number-input/number-input.component.d.ts +38 -48
  262. package/lib/inputs/password-input/index.d.ts +4 -0
  263. package/lib/inputs/password-input/password-input.component.d.ts +28 -40
  264. package/lib/inputs/password-input/password-input.types.d.ts +2 -2
  265. package/lib/inputs/simple-input/index.d.ts +3 -0
  266. package/lib/inputs/simple-input/simple-input.component.d.ts +30 -35
  267. package/lib/kbd/index.d.ts +3 -0
  268. package/lib/kbd/kbd.component.d.ts +6 -8
  269. package/lib/kbd-shortcut/index.d.ts +2 -0
  270. package/lib/kbd-shortcut/kbd-shortcut.component.d.ts +7 -10
  271. package/lib/modal/index.d.ts +2 -0
  272. package/lib/modal/modal.component.d.ts +22 -30
  273. package/lib/option/index.d.ts +2 -0
  274. package/lib/option/option.component.d.ts +11 -16
  275. package/lib/progress-bar/index.d.ts +4 -0
  276. package/lib/progress-bar/progress-bar.component.d.ts +14 -20
  277. package/lib/progress-bar/progress-bar.types.d.ts +2 -2
  278. package/lib/progress-circle/index.d.ts +4 -0
  279. package/lib/progress-circle/progress-circle.component.d.ts +12 -20
  280. package/lib/progress-circle/progress-circle.types.d.ts +2 -2
  281. package/lib/radio/index.d.ts +3 -0
  282. package/lib/radio/radio/radio.component.d.ts +7 -8
  283. package/lib/radio/radio-group.component.d.ts +13 -16
  284. package/lib/segment/index.d.ts +4 -0
  285. package/lib/segment/segment.component.d.ts +22 -34
  286. package/lib/segment/segment.directives.d.ts +2 -3
  287. package/lib/select/index.d.ts +4 -0
  288. package/lib/select/select.component.d.ts +114 -160
  289. package/lib/select/select.directive.d.ts +3 -3
  290. package/lib/select/select.types.d.ts +2 -76
  291. package/lib/slide-toggle/index.d.ts +3 -0
  292. package/lib/slide-toggle/slide-toggle.component.d.ts +9 -7
  293. package/lib/slide-toggle/slide-toggle.types.d.ts +5 -0
  294. package/lib/slider/abstract-slider.d.ts +38 -55
  295. package/lib/slider/index.d.ts +6 -0
  296. package/lib/slider/range-slider/range-slider.component.d.ts +3 -1
  297. package/lib/slider/slider.component.d.ts +2 -0
  298. package/lib/slider/slider.types.d.ts +8 -8
  299. package/lib/snackbar/snackbar-ref.d.ts +1 -2
  300. package/lib/snackbar/snackbar.component.d.ts +3 -3
  301. package/lib/snackbar/snackbar.service.d.ts +2 -2
  302. package/lib/snackbar/snackbar.types.d.ts +4 -4
  303. package/lib/spinner/index.d.ts +2 -0
  304. package/lib/spinner/spinner.component.d.ts +3 -3
  305. package/lib/star/index.d.ts +3 -0
  306. package/lib/star/star-button/index.d.ts +2 -0
  307. package/lib/star/star-button/star-button.component.d.ts +7 -7
  308. package/lib/star/star-display/index.d.ts +2 -0
  309. package/lib/star/star-display/star-display.component.d.ts +8 -12
  310. package/lib/star/star-input/index.d.ts +2 -0
  311. package/lib/star/star-input/star-input.component.d.ts +17 -22
  312. package/lib/star/star.component.d.ts +5 -5
  313. package/lib/statebox/index.d.ts +3 -0
  314. package/lib/statebox/statebox.component.d.ts +15 -21
  315. package/lib/statebox/statebox.types.d.ts +12 -8
  316. package/lib/tabber/index.d.ts +3 -0
  317. package/lib/tabber/tab/tab.component.d.ts +18 -0
  318. package/lib/tabber/tabber.component.d.ts +25 -0
  319. package/lib/tabber/tabber.module.d.ts +9 -0
  320. package/lib/table/index.d.ts +4 -0
  321. package/lib/table/table-item-storage.d.ts +70 -58
  322. package/lib/table/table.component.d.ts +59 -78
  323. package/lib/table/table.directives.d.ts +4 -3
  324. package/lib/table-from-csv/index.d.ts +2 -0
  325. package/lib/table-from-csv/table-from-csv.component.d.ts +46 -9
  326. package/lib/table-pagination/index.d.ts +3 -0
  327. package/lib/table-pagination/table-pagination.component.d.ts +21 -30
  328. package/lib/types/item-storage.types.d.ts +19 -18
  329. package/lib/types/utility.types.d.ts +2 -1
  330. package/package.json +8 -9
  331. package/prebuilt-themes/default/badge.css +5 -5
  332. package/prebuilt-themes/default/buttons/fab.css +4 -3
  333. package/prebuilt-themes/default/buttons/fab.css.map +1 -1
  334. package/prebuilt-themes/default/card.css +7 -7
  335. package/prebuilt-themes/default/chips.css +3 -8
  336. package/prebuilt-themes/default/chips.css.map +1 -1
  337. package/prebuilt-themes/default/core.css +6 -3
  338. package/prebuilt-themes/default/core.css.map +1 -1
  339. package/prebuilt-themes/default/inputs/color-input.css +1 -1
  340. package/prebuilt-themes/default/inputs/digit-input.css +1 -1
  341. package/prebuilt-themes/default/inputs/file-input.css +139 -2
  342. package/prebuilt-themes/default/inputs/file-input.css.map +1 -1
  343. package/prebuilt-themes/default/inputs/hex-input.css +2 -2
  344. package/prebuilt-themes/default/inputs/input.css +1 -1
  345. package/prebuilt-themes/default/inputs/search-bar.css +1 -1
  346. package/prebuilt-themes/default/inputs/simple-input.css +1 -1
  347. package/prebuilt-themes/default/modal.css +1 -1
  348. package/prebuilt-themes/default/segment.css +2 -2
  349. package/prebuilt-themes/default/segment.css.map +1 -1
  350. package/prebuilt-themes/default/select.css +5 -3
  351. package/prebuilt-themes/default/select.css.map +1 -1
  352. package/prebuilt-themes/default/snackbar.css +0 -1
  353. package/prebuilt-themes/default/snackbar.css.map +1 -1
  354. package/prebuilt-themes/default/tabber.css +207 -0
  355. package/prebuilt-themes/default/tabber.css.map +1 -0
  356. package/public-api.d.ts +43 -136
  357. package/themes/default/_clear-button.scss +1 -1
  358. package/themes/default/badge.scss +5 -5
  359. package/themes/default/buttons/fab.scss +5 -3
  360. package/themes/default/card.scss +7 -7
  361. package/themes/default/chips.scss +2 -8
  362. package/themes/default/core.scss +6 -3
  363. package/themes/default/inputs/digit-input.scss +1 -1
  364. package/themes/default/inputs/file-input.scss +8 -1
  365. package/themes/default/inputs/hex-input.scss +1 -1
  366. package/themes/default/modal.scss +1 -1
  367. package/themes/default/segment.scss +2 -1
  368. package/themes/default/select.scss +4 -2
  369. package/themes/default/snackbar.scss +0 -2
  370. package/themes/default/tabber.scss +86 -0
  371. package/esm2022/lib/calendar/calendar.component.mjs +0 -979
  372. package/esm2022/lib/calendar/calendar.directives.mjs +0 -107
  373. package/esm2022/lib/calendar/calendar.helpers.mjs +0 -47
  374. package/esm2022/lib/calendar/calendar.module.mjs +0 -21
  375. package/esm2022/lib/calendar/calendar.types.mjs +0 -11
  376. package/esm2022/lib/color/color-picker/color-picker.component.mjs +0 -484
  377. package/esm2022/lib/color/color-picker/color-picker.directives.mjs +0 -55
  378. package/esm2022/lib/color/color-picker/color-picker.module.mjs +0 -43
  379. package/esm2022/lib/inputs/color-input/color-input.component.mjs +0 -421
  380. package/esm2022/lib/inputs/color-input/color-input.module.mjs +0 -85
  381. package/lib/calendar/calendar.component.d.ts +0 -155
  382. package/lib/calendar/calendar.directives.d.ts +0 -51
  383. package/lib/calendar/calendar.helpers.d.ts +0 -15
  384. package/lib/calendar/calendar.module.d.ts +0 -11
  385. package/lib/calendar/calendar.types.d.ts +0 -80
  386. package/lib/color/color-picker/color-picker.component.d.ts +0 -125
  387. package/lib/color/color-picker/color-picker.directives.d.ts +0 -27
  388. package/lib/color/color-picker/color-picker.module.d.ts +0 -13
  389. package/lib/inputs/color-input/color-input.component.d.ts +0 -147
  390. package/lib/inputs/color-input/color-input.module.d.ts +0 -16
@@ -1,4 +1,4 @@
1
- import { Directive, EventEmitter, HostBinding, HostListener, Input, Output } from '@angular/core';
1
+ import { Directive, HostBinding, HostListener, Input, computed, input, output, signal } from '@angular/core';
2
2
  import { coerceArrayProperty, coerceBooleanProperty, coerceNumberProperty } from '@ardium-ui/devkit';
3
3
  import { SimpleItemStorage } from './item-storages/simple-item-storage';
4
4
  import { _NgModelComponentBase } from './ngmodel-component';
@@ -15,127 +15,115 @@ export class _SelectableListComponentBase extends _NgModelComponentBase {
15
15
  labelFrom: 'label',
16
16
  disabledFrom: 'disabled',
17
17
  };
18
+ //! binding-related inputs
19
+ this.valueFrom = input(undefined);
20
+ this.labelFrom = input(undefined);
21
+ this.disabledFrom = input(undefined);
22
+ this.compareWith = input(undefined);
18
23
  //! multiselectable
19
- this._multiselectable = false;
24
+ this.multiselectable = input(false, { transform: v => coerceBooleanProperty(v) });
25
+ this.singleselectable = computed(() => !this.multiselectable());
20
26
  //! require value
21
- this._requireValue = undefined;
27
+ this.requireValue = input(false, { transform: v => coerceBooleanProperty(v) });
28
+ this.isValueRequired = computed(() => this.requireValue() || !this.multiselectable());
22
29
  //! coerced properties
23
- //should the value that the "disabledFrom" path lead to be inverted?
24
- //useful when the property is e.g. "active", which is the oposite of "disabled"
25
- this._invertDisabled = false;
26
- this._maxSelectedItems = undefined;
30
+ this.invertDisabled = input(false, { transform: v => coerceBooleanProperty(v) });
31
+ this.maxSelectedItems = input(undefined, { transform: v => coerceNumberProperty(v, undefined) });
27
32
  //! change & touch event emitters
28
- this._touched = false;
33
+ this.touched = signal(false);
29
34
  //! focus & blur handlers
30
- this.lastBlurTimestamp = null;
31
- this.valueChange = new EventEmitter();
35
+ this.lastBlurTimestamp = signal(undefined);
36
+ //! getters
37
+ this.highlightedItems = computed(() => this.itemStorage.highlightedItems());
38
+ this.firstHighlightedItem = computed(() => this.highlightedItems()?.first());
39
+ this.isItemLimitReached = computed(() => this.itemStorage.isItemLimitReached());
40
+ this.valueChange = output();
32
41
  //! output events
33
- this.changeEvent = new EventEmitter();
34
- this.addEvent = new EventEmitter();
35
- this.removeEvent = new EventEmitter();
42
+ this.changeEvent = output({ alias: 'change' });
43
+ this.addEvent = output({ alias: 'add' });
44
+ this.removeEvent = output({ alias: 'remove' });
36
45
  //! highligh-related
37
- this.isMouseBeingUsed = false;
46
+ this.isMouseBeingUsed = signal(false);
38
47
  }
39
48
  //! items setter/getter
40
49
  get items() {
41
- return this.itemStorage.items;
50
+ return this.itemStorage.items();
42
51
  }
43
52
  set items(value) {
44
53
  if (!Array.isArray(value))
45
54
  value = coerceArrayProperty(value);
46
- let shouldPrintErrors = this.itemStorage.setItems(value);
55
+ const shouldPrintErrors = this.itemStorage.setItems(value);
47
56
  if (shouldPrintErrors) {
48
57
  this._printPrimitiveWarnings();
49
58
  }
50
59
  }
51
60
  _printPrimitiveWarnings() {
52
- function makeWarning(str) {
53
- console.warn(`Skipped using [${str}] property bound to <ard-segment>, as some provided items are of primitive type`);
54
- }
55
- if (this.valueFrom) {
61
+ const makeWarning = (str) => {
62
+ console.warn(`ARD-WA${this._componentId} Skipped using [${str}] property bound to <ard-${this._componentName}>, as some provided items are of primitive type`);
63
+ };
64
+ if (this.valueFrom()) {
56
65
  makeWarning('valueFrom');
57
66
  }
58
- if (this.labelFrom) {
67
+ if (this.labelFrom()) {
59
68
  makeWarning('labelFrom');
60
69
  }
61
- if (this.disabledFrom) {
70
+ if (this.disabledFrom()) {
62
71
  makeWarning('disabledFrom');
63
72
  }
64
- if (this.invertDisabled) {
73
+ if (this.invertDisabled()) {
65
74
  makeWarning('invertDisabled');
66
75
  }
67
76
  }
68
- get singleselectable() {
69
- return !this._multiselectable;
70
- }
71
- get invertDisabled() {
72
- return this._invertDisabled;
73
- }
74
- set invertDisabled(v) {
75
- this._invertDisabled = coerceBooleanProperty(v);
76
- }
77
- get maxSelectedItems() {
78
- return this._maxSelectedItems;
77
+ get _multiselectableHostAttribute() {
78
+ return this.multiselectable();
79
79
  }
80
- set maxSelectedItems(v) {
81
- this._maxSelectedItems = coerceNumberProperty(v);
80
+ get _requireValueHostAttribute() {
81
+ return this.requireValue();
82
82
  }
83
83
  //! control value accessor
84
84
  //override the writeValue and setDisabledState defined in _NgModelComponent
85
85
  setDisabledState(state) {
86
- this._disabled = state;
86
+ this.disabled.set(state);
87
87
  this._cd.markForCheck();
88
88
  }
89
89
  writeValue(ngModel) {
90
90
  this.itemStorage.writeValue(ngModel);
91
91
  this._cd.markForCheck();
92
92
  }
93
- get touched() {
94
- return this._touched;
95
- }
96
- set touched(state) {
97
- this._touched = state;
93
+ get _touchedHostAttribute() {
94
+ return this.touched();
98
95
  }
99
96
  _emitChange() {
100
- let value = this.itemStorage.value;
97
+ const value = this.itemStorage.value();
101
98
  this._onChangeRegistered?.(value);
102
99
  this.changeEvent.emit(value);
103
100
  this.valueChange.emit(value);
104
101
  }
105
102
  _onTouched() {
106
- if (this.touched)
103
+ if (this.touched())
107
104
  return;
108
105
  this._onTouchedRegistered?.();
109
- this.touched = true;
106
+ this.touched.set(true);
110
107
  }
111
108
  onFocus(event) {
112
109
  super.onFocus(event);
113
- if (this.touched || !this.lastBlurTimestamp || this.lastBlurTimestamp + 1 < Date.now())
110
+ const lbt = this.lastBlurTimestamp();
111
+ if (this.touched() || !lbt || lbt + 1 < Date.now())
114
112
  return;
115
- this.lastBlurTimestamp = null;
113
+ this.lastBlurTimestamp.set(null);
116
114
  this._onTouched();
117
115
  }
118
116
  onBlur(event) {
119
117
  super.onBlur(event);
120
- if (!this.touched)
121
- this.lastBlurTimestamp = Date.now();
122
- }
123
- //! getters
124
- get firstHighlightedItem() {
125
- return this.itemStorage.highlightedItems?.first();
126
- }
127
- get highlightedItems() {
128
- return this.itemStorage.highlightedItems;
129
- }
130
- get isItemLimitReached() {
131
- return this.itemStorage.isItemLimitReached;
118
+ if (!this.touched())
119
+ this.lastBlurTimestamp.set(Date.now());
132
120
  }
133
121
  //! context providers
134
122
  getOptionContext(item) {
135
123
  return {
136
124
  $implicit: item,
137
125
  item,
138
- itemData: item.itemData,
126
+ itemData: item.itemData(),
139
127
  };
140
128
  }
141
129
  //! value input & output
@@ -146,14 +134,14 @@ export class _SelectableListComponentBase extends _NgModelComponentBase {
146
134
  }
147
135
  //! item selection handlers
148
136
  toggleItem(item) {
149
- if (item.selected) {
137
+ if (item.selected()) {
150
138
  this.unselectItem(item);
151
139
  return;
152
140
  }
153
141
  this.selectItem(item);
154
142
  }
155
143
  selectItem(...items) {
156
- let [selected, unselected] = this.itemStorage.selectItem(...items);
144
+ const [selected, unselected] = this.itemStorage.selectItem(...items);
157
145
  if (unselected.length > 0)
158
146
  this.removeEvent.emit(unselected);
159
147
  if (selected.length > 0) {
@@ -162,12 +150,12 @@ export class _SelectableListComponentBase extends _NgModelComponentBase {
162
150
  }
163
151
  }
164
152
  unselectItem(...items) {
165
- let unselected = this.itemStorage.unselectItem(...items);
153
+ const unselected = this.itemStorage.unselectItem(...items);
166
154
  this.removeEvent.emit(unselected);
167
155
  this._emitChange();
168
156
  }
169
157
  onMouseMove() {
170
- this.isMouseBeingUsed = true;
158
+ this.isMouseBeingUsed.set(true);
171
159
  }
172
160
  onItemMouseEnter(option, event) {
173
161
  if (!this.isMouseBeingUsed)
@@ -212,7 +200,7 @@ export class _SelectableListComponentBase extends _NgModelComponentBase {
212
200
  }
213
201
  case 'KeyA': {
214
202
  if (event.ctrlKey) {
215
- this._highlightAll(event);
203
+ this._highlightAll();
216
204
  return;
217
205
  }
218
206
  }
@@ -222,7 +210,7 @@ export class _SelectableListComponentBase extends _NgModelComponentBase {
222
210
  if (!this.isFocused)
223
211
  return;
224
212
  event.preventDefault();
225
- const highlightedItems = this.highlightedItems;
213
+ const highlightedItems = this.highlightedItems();
226
214
  if (highlightedItems.every(item => item.selected)) {
227
215
  this.unselectItem(...highlightedItems);
228
216
  }
@@ -234,66 +222,54 @@ export class _SelectableListComponentBase extends _NgModelComponentBase {
234
222
  if (!this.isFocused)
235
223
  return;
236
224
  event.preventDefault();
237
- this.isMouseBeingUsed = false;
225
+ this.isMouseBeingUsed.set(false);
238
226
  this.itemStorage.highlightNextItem(-1, event.shiftKey);
239
227
  }
240
228
  _highlightNext(event) {
241
229
  if (!this.isFocused)
242
230
  return;
243
231
  event.preventDefault();
244
- this.isMouseBeingUsed = false;
232
+ this.isMouseBeingUsed.set(false);
245
233
  this.itemStorage.highlightNextItem(+1, event.shiftKey);
246
234
  }
247
235
  _highlightFirst(event) {
248
236
  if (!this.isFocused)
249
237
  return;
250
238
  event.preventDefault();
251
- this.isMouseBeingUsed = false;
239
+ this.isMouseBeingUsed.set(false);
252
240
  this.itemStorage.highlightFirstItem();
253
241
  }
254
242
  _highlightLast(event) {
255
243
  if (!this.isFocused)
256
244
  return;
257
245
  event.preventDefault();
258
- this.isMouseBeingUsed = false;
246
+ this.isMouseBeingUsed.set(false);
259
247
  this.itemStorage.highlightLastItem();
260
248
  }
261
- _highlightAll(event) {
249
+ _highlightAll() {
262
250
  this.itemStorage.highlightAllItems();
263
251
  }
264
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: _SelectableListComponentBase, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
265
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.7", type: _SelectableListComponentBase, inputs: { valueFrom: "valueFrom", labelFrom: "labelFrom", disabledFrom: "disabledFrom", items: "items", invertDisabled: "invertDisabled", maxSelectedItems: "maxSelectedItems", value: "value" }, outputs: { valueChange: "valueChange", changeEvent: "change", addEvent: "add", removeEvent: "remove" }, host: { listeners: { "mousemove": "onMouseMove()", "keydown": "onKeyPress($event)" }, properties: { "class.ard-touched": "this.touched" } }, usesInheritance: true, ngImport: i0 }); }
252
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: _SelectableListComponentBase, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
253
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.2", type: _SelectableListComponentBase, inputs: { valueFrom: { classPropertyName: "valueFrom", publicName: "valueFrom", isSignal: true, isRequired: false, transformFunction: null }, labelFrom: { classPropertyName: "labelFrom", publicName: "labelFrom", isSignal: true, isRequired: false, transformFunction: null }, disabledFrom: { classPropertyName: "disabledFrom", publicName: "disabledFrom", isSignal: true, isRequired: false, transformFunction: null }, compareWith: { classPropertyName: "compareWith", publicName: "compareWith", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: false, isRequired: false, transformFunction: null }, multiselectable: { classPropertyName: "multiselectable", publicName: "multiselectable", isSignal: true, isRequired: false, transformFunction: null }, requireValue: { classPropertyName: "requireValue", publicName: "requireValue", isSignal: true, isRequired: false, transformFunction: null }, invertDisabled: { classPropertyName: "invertDisabled", publicName: "invertDisabled", isSignal: true, isRequired: false, transformFunction: null }, maxSelectedItems: { classPropertyName: "maxSelectedItems", publicName: "maxSelectedItems", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", changeEvent: "change", addEvent: "add", removeEvent: "remove" }, host: { listeners: { "mousemove": "onMouseMove()", "keydown": "onKeyPress($event)" }, properties: { "attr.multiple": "this._multiselectableHostAttribute", "class.ard-multiselect": "this._multiselectableHostAttribute", "class.ard-require-value": "this._requireValueHostAttribute", "class.ard-touched": "this._touchedHostAttribute" } }, usesInheritance: true, ngImport: i0 }); }
266
254
  }
267
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: _SelectableListComponentBase, decorators: [{
255
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImport: i0, type: _SelectableListComponentBase, decorators: [{
268
256
  type: Directive
269
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { valueFrom: [{
257
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { items: [{
270
258
  type: Input
271
- }], labelFrom: [{
272
- type: Input
273
- }], disabledFrom: [{
274
- type: Input
275
- }], items: [{
276
- type: Input
277
- }], invertDisabled: [{
278
- type: Input
279
- }], maxSelectedItems: [{
280
- type: Input
281
- }], touched: [{
259
+ }], _multiselectableHostAttribute: [{
260
+ type: HostBinding,
261
+ args: ['attr.multiple']
262
+ }, {
263
+ type: HostBinding,
264
+ args: ['class.ard-multiselect']
265
+ }], _requireValueHostAttribute: [{
266
+ type: HostBinding,
267
+ args: ['class.ard-require-value']
268
+ }], _touchedHostAttribute: [{
282
269
  type: HostBinding,
283
270
  args: ['class.ard-touched']
284
271
  }], value: [{
285
272
  type: Input
286
- }], valueChange: [{
287
- type: Output
288
- }], changeEvent: [{
289
- type: Output,
290
- args: ['change']
291
- }], addEvent: [{
292
- type: Output,
293
- args: ['add']
294
- }], removeEvent: [{
295
- type: Output,
296
- args: ['remove']
297
273
  }], onMouseMove: [{
298
274
  type: HostListener,
299
275
  args: ['mousemove']
@@ -301,4 +277,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImpor
301
277
  type: HostListener,
302
278
  args: ['keydown', ['$event']]
303
279
  }] } });
304
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0YWJsZS1saXN0LWNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvX2ludGVybmFsL3NlbGVjdGFibGUtbGlzdC1jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVySCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVyRyxPQUFPLEVBQUUsaUJBQWlCLEVBQXlCLE1BQU0scUNBQXFDLENBQUM7QUFDL0YsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBRzVELE1BQU0sT0FBZ0IsNEJBQTZCLFNBQVEscUJBQXFCO0lBVzlFLFlBQW9CLEdBQXNCO1FBQ3hDLEtBQUssRUFBRSxDQUFDO1FBRFUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFWMUMsb0JBQW9CO1FBQ1gsZ0JBQVcsR0FBRyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLFdBQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFN0IsYUFBUSxHQUFHO1lBQ2xCLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLFNBQVMsRUFBRSxPQUFPO1lBQ2xCLFlBQVksRUFBRSxVQUFVO1NBQ3pCLENBQUM7UUEyQ0YsbUJBQW1CO1FBQ1QscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBTTVDLGlCQUFpQjtRQUNQLGtCQUFhLEdBQXdCLFNBQVMsQ0FBQztRQUd6RCxzQkFBc0I7UUFDdEIsb0VBQW9FO1FBQ3BFLCtFQUErRTtRQUN2RSxvQkFBZSxHQUFZLEtBQUssQ0FBQztRQVNqQyxzQkFBaUIsR0FBdUIsU0FBUyxDQUFDO1FB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QixLQUFLO2dCQUlGLEtBQUs7c0JBRFIsS0FBSztnQkErQ0YsY0FBYztzQkFEakIsS0FBSztnQkFVRixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBc0JGLE9BQU87c0JBRFYsV0FBVzt1QkFBQyxtQkFBbUI7Z0JBMkQ1QixLQUFLO3NCQURSLEtBQUs7Z0JBS0ksV0FBVztzQkFBcEIsTUFBTTtnQkFHVyxXQUFXO3NCQUE1QixNQUFNO3VCQUFDLFFBQVE7Z0JBQ0QsUUFBUTtzQkFBdEIsTUFBTTt1QkFBQyxLQUFLO2dCQUNLLFdBQVc7c0JBQTVCLE1BQU07dUJBQUMsUUFBUTtnQkE4QmhCLFdBQVc7c0JBRFYsWUFBWTt1QkFBQyxXQUFXO2dCQXVCekIsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjb2VyY2VBcnJheVByb3BlcnR5LCBjb2VyY2VCb29sZWFuUHJvcGVydHksIGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFyZGl1bS11aS9kZXZraXQnO1xuaW1wb3J0IHsgQXJkT3B0aW9uU2ltcGxlLCBPcHRpb25Db250ZXh0IH0gZnJvbSAnLi4vdHlwZXMvaXRlbS1zdG9yYWdlLnR5cGVzJztcbmltcG9ydCB7IFNpbXBsZUl0ZW1TdG9yYWdlLCBTaW1wbGVJdGVtU3RvcmFnZUhvc3QgfSBmcm9tICcuL2l0ZW0tc3RvcmFnZXMvc2ltcGxlLWl0ZW0tc3RvcmFnZSc7XG5pbXBvcnQgeyBfTmdNb2RlbENvbXBvbmVudEJhc2UgfSBmcm9tICcuL25nbW9kZWwtY29tcG9uZW50JztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgX1NlbGVjdGFibGVMaXN0Q29tcG9uZW50QmFzZSBleHRlbmRzIF9OZ01vZGVsQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBTaW1wbGVJdGVtU3RvcmFnZUhvc3Qge1xuICAvLyEgcHVibGljIGNvbnN0YW50c1xuICByZWFkb25seSBpdGVtU3RvcmFnZSA9IG5ldyBTaW1wbGVJdGVtU3RvcmFnZSh0aGlzKTtcbiAgcmVhZG9ubHkgaHRtbElkID0gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgcmVhZG9ubHkgZWxlbWVudCE6IEhUTUxFbGVtZW50O1xuICByZWFkb25seSBERUZBVUxUUyA9IHtcbiAgICB2YWx1ZUZyb206ICd2YWx1ZScsXG4gICAgbGFiZWxGcm9tOiAnbGFiZWwnLFxuICAgIGRpc2FibGVkRnJvbTogJ2Rpc2FibGVkJyxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLy8hIGJpbmRpbmctcmVsYXRlZCBpbnB1dHNcbiAgQElucHV0KCkgdmFsdWVGcm9tPzogc3RyaW5nO1xuICBASW5wdXQoKSBsYWJlbEZyb20/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRpc2FibGVkRnJvbT86IHN0cmluZztcblxuICAvLyEgaXRlbXMgc2V0dGVyL2dldHRlclxuICBASW5wdXQoKVxuICBnZXQgaXRlbXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLml0ZW1TdG9yYWdlLml0ZW1zO1xuICB9XG4gIHNldCBpdGVtcyh2YWx1ZTogYW55KSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkgdmFsdWUgPSBjb2VyY2VBcnJheVByb3BlcnR5KHZhbHVlKTtcblxuICAgIGxldCBzaG91bGRQcmludEVycm9ycyA9IHRoaXMuaXRlbVN0b3JhZ2Uuc2V0SXRlbXModmFsdWUpO1xuXG4gICAgaWYgKHNob3VsZFByaW50RXJyb3JzKSB7XG4gICAgICB0aGlzLl9wcmludFByaW1pdGl2ZVdhcm5pbmdzKCk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX3ByaW50UHJpbWl0aXZlV2FybmluZ3MoKSB7XG4gICAgZnVuY3Rpb24gbWFrZVdhcm5pbmcoc3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgIGNvbnNvbGUud2FybihgU2tpcHBlZCB1c2luZyBbJHtzdHJ9XSBwcm9wZXJ0eSBib3VuZCB0byA8YXJkLXNlZ21lbnQ+LCBhcyBzb21lIHByb3ZpZGVkIGl0ZW1zIGFyZSBvZiBwcmltaXRpdmUgdHlwZWApO1xuICAgIH1cbiAgICBpZiAodGhpcy52YWx1ZUZyb20pIHtcbiAgICAgIG1ha2VXYXJuaW5nKCd2YWx1ZUZyb20nKTtcbiAgICB9XG4gICAgaWYgKHRoaXMubGFiZWxGcm9tKSB7XG4gICAgICBtYWtlV2FybmluZygnbGFiZWxGcm9tJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRpc2FibGVkRnJvbSkge1xuICAgICAgbWFrZVdhcm5pbmcoJ2Rpc2FibGVkRnJvbScpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pbnZlcnREaXNhYmxlZCkge1xuICAgICAgbWFrZVdhcm5pbmcoJ2ludmVydERpc2FibGVkJyk7XG4gICAgfVxuICB9XG5cbiAgLy8hIG11bHRpc2VsZWN0YWJsZVxuICBwcm90ZWN0ZWQgX211bHRpc2VsZWN0YWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBhYnN0cmFjdCBtdWx0aXNlbGVjdGFibGU6IGFueTtcbiAgZ2V0IHNpbmdsZXNlbGVjdGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLl9tdWx0aXNlbGVjdGFibGU7XG4gIH1cblxuICAvLyEgcmVxdWlyZSB2YWx1ZVxuICBwcm90ZWN0ZWQgX3JlcXVpcmVWYWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgYWJzdHJhY3QgcmVxdWlyZVZhbHVlOiBhbnk7XG5cbiAgLy8hIGNvZXJjZWQgcHJvcGVydGllc1xuICAvL3Nob3VsZCB0aGUgdmFsdWUgdGhhdCB0aGUgXCJkaXNhYmxlZEZyb21cIiBwYXRoIGxlYWQgdG8gYmUgaW52ZXJ0ZWQ/XG4gIC8vdXNlZnVsIHdoZW4gdGhlIHByb3BlcnR5IGlzIGUuZy4gXCJhY3RpdmVcIiwgd2hpY2ggaXMgdGhlIG9wb3NpdGUgb2YgXCJkaXNhYmxlZFwiXG4gIHByaXZhdGUgX2ludmVydERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGdldCBpbnZlcnREaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW52ZXJ0RGlzYWJsZWQ7XG4gIH1cbiAgc2V0IGludmVydERpc2FibGVkKHY6IGFueSkge1xuICAgIHRoaXMuX2ludmVydERpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWF4U2VsZWN0ZWRJdGVtczogbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICBASW5wdXQoKVxuICBnZXQgbWF4U2VsZWN0ZWRJdGVtcygpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9tYXhTZWxlY3RlZEl0ZW1zO1xuICB9XG4gIHNldCBtYXhTZWxlY3RlZEl0ZW1zKHY6IGFueSkge1xuICAgIHRoaXMuX21heFNlbGVjdGVkSXRlbXMgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2KTtcbiAgfVxuXG4gIC8vISBjb250cm9sIHZhbHVlIGFjY2Vzc29yXG4gIC8vb3ZlcnJpZGUgdGhlIHdyaXRlVmFsdWUgYW5kIHNldERpc2FibGVkU3RhdGUgZGVmaW5lZCBpbiBfTmdNb2RlbENvbXBvbmVudFxuICBvdmVycmlkZSBzZXREaXNhYmxlZFN0YXRlKHN0YXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBzdGF0ZTtcbiAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuICB3cml0ZVZhbHVlKG5nTW9kZWw6IGFueVtdKTogdm9pZCB7XG4gICAgdGhpcy5pdGVtU3RvcmFnZS53cml0ZVZhbHVlKG5nTW9kZWwpO1xuICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLy8hIGNoYW5nZSAmIHRvdWNoIGV2ZW50IGVtaXR0ZXJzXG4gIHByaXZhdGUgX3RvdWNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hcmQtdG91Y2hlZCcpXG4gIGdldCB0b3VjaGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl90b3VjaGVkO1xuICB9XG4gIHByb3RlY3RlZCBzZXQgdG91Y2hlZChzdGF0ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3RvdWNoZWQgPSBzdGF0ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfZW1pdENoYW5nZSgpOiB2b2lkIHtcbiAgICBsZXQgdmFsdWUgPSB0aGlzLml0ZW1TdG9yYWdlLnZhbHVlO1xuICAgIHRoaXMuX29uQ2hhbmdlUmVnaXN0ZXJlZD8uKHZhbHVlKTtcbiAgICB0aGlzLmNoYW5nZUV2ZW50LmVtaXQodmFsdWUpO1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gIH1cbiAgcHJvdGVjdGVkIF9vblRvdWNoZWQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudG91Y2hlZCkgcmV0dXJuO1xuXG4gICAgdGhpcy5fb25Ub3VjaGVkUmVnaXN0ZXJlZD8uKCk7XG4gICAgdGhpcy50b3VjaGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8vISBmb2N1cyAmIGJsdXIgaGFuZGxlcnNcbiAgbGFzdEJsdXJUaW1lc3RhbXA6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBvdmVycmlkZSBvbkZvY3VzKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgc3VwZXIub25Gb2N1cyhldmVudCk7XG5cbiAgICBpZiAodGhpcy50b3VjaGVkIHx8ICF0aGlzLmxhc3RCbHVyVGltZXN0YW1wIHx8IHRoaXMubGFzdEJsdXJUaW1lc3RhbXAgKyAxIDwgRGF0ZS5ub3coKSkgcmV0dXJuO1xuICAgIHRoaXMubGFzdEJsdXJUaW1lc3RhbXAgPSBudWxsO1xuXG4gICAgdGhpcy5fb25Ub3VjaGVkKCk7XG4gIH1cbiAgb3ZlcnJpZGUgb25CbHVyKGV2ZW50OiBGb2N1c0V2ZW50KTogdm9pZCB7XG4gICAgc3VwZXIub25CbHVyKGV2ZW50KTtcblxuICAgIGlmICghdGhpcy50b3VjaGVkKSB0aGlzLmxhc3RCbHVyVGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgfVxuXG4gIC8vISBnZXR0ZXJzXG4gIGdldCBmaXJzdEhpZ2hsaWdodGVkSXRlbSgpOiBBcmRPcHRpb25TaW1wbGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLml0ZW1TdG9yYWdlLmhpZ2hsaWdodGVkSXRlbXM/LmZpcnN0KCk7XG4gIH1cbiAgZ2V0IGhpZ2hsaWdodGVkSXRlbXMoKTogQXJkT3B0aW9uU2ltcGxlW10ge1xuICAgIHJldHVybiB0aGlzLml0ZW1TdG9yYWdlLmhpZ2hsaWdodGVkSXRlbXM7XG4gIH1cbiAgZ2V0IGlzSXRlbUxpbWl0UmVhY2hlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtU3RvcmFnZS5pc0l0ZW1MaW1pdFJlYWNoZWQ7XG4gIH1cblxuICAvLyEgY29udGV4dCBwcm92aWRlcnNcbiAgZ2V0T3B0aW9uQ29udGV4dChpdGVtOiBBcmRPcHRpb25TaW1wbGUpOiBPcHRpb25Db250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgJGltcGxpY2l0OiBpdGVtLFxuICAgICAgaXRlbSxcbiAgICAgIGl0ZW1EYXRhOiBpdGVtLml0ZW1EYXRhLFxuICAgIH07XG4gIH1cblxuICAvLyEgdmFsdWUgaW5wdXQgJiBvdXRwdXRcbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobmV3VmFsdWUpKSBuZXdWYWx1ZSA9IGNvZXJjZUFycmF5UHJvcGVydHkobmV3VmFsdWUpO1xuICAgIHRoaXMud3JpdGVWYWx1ZShuZXdWYWx1ZSk7XG4gIH1cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICAvLyEgb3V0cHV0IGV2ZW50c1xuICBAT3V0cHV0KCdjaGFuZ2UnKSBjaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG4gIEBPdXRwdXQoJ2FkZCcpIGFkZEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcbiAgQE91dHB1dCgncmVtb3ZlJykgcmVtb3ZlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIC8vISBpdGVtIHNlbGVjdGlvbiBoYW5kbGVyc1xuICB0b2dnbGVJdGVtKGl0ZW06IEFyZE9wdGlvblNpbXBsZSk6IHZvaWQge1xuICAgIGlmIChpdGVtLnNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnVuc2VsZWN0SXRlbShpdGVtKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RJdGVtKGl0ZW0pO1xuICB9XG4gIHNlbGVjdEl0ZW0oLi4uaXRlbXM6IEFyZE9wdGlvblNpbXBsZVtdKTogdm9pZCB7XG4gICAgbGV0IFtzZWxlY3RlZCwgdW5zZWxlY3RlZF0gPSB0aGlzLml0ZW1TdG9yYWdlLnNlbGVjdEl0ZW0oLi4uaXRlbXMpO1xuXG4gICAgaWYgKHVuc2VsZWN0ZWQubGVuZ3RoID4gMCkgdGhpcy5yZW1vdmVFdmVudC5lbWl0KHVuc2VsZWN0ZWQpO1xuXG4gICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuYWRkRXZlbnQuZW1pdChzZWxlY3RlZCk7XG4gICAgICB0aGlzLl9lbWl0Q2hhbmdlKCk7XG4gICAgfVxuICB9XG4gIHVuc2VsZWN0SXRlbSguLi5pdGVtczogQXJkT3B0aW9uU2ltcGxlW10pOiB2b2lkIHtcbiAgICBsZXQgdW5zZWxlY3RlZCA9IHRoaXMuaXRlbVN0b3JhZ2UudW5zZWxlY3RJdGVtKC4uLml0ZW1zKTtcblxuICAgIHRoaXMucmVtb3ZlRXZlbnQuZW1pdCh1bnNlbGVjdGVkKTtcbiAgICB0aGlzLl9lbWl0Q2hhbmdlKCk7XG4gIH1cblxuICAvLyEgaGlnaGxpZ2gtcmVsYXRlZFxuICBwdWJsaWMgaXNNb3VzZUJlaW5nVXNlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASG9zdExpc3RlbmVyKCdtb3VzZW1vdmUnKVxuICBvbk1vdXNlTW92ZSgpIHtcbiAgICB0aGlzLmlzTW91c2VCZWluZ1VzZWQgPSB0cnVlO1xuICB9XG4gIG9uSXRlbU1vdXNlRW50ZXIob3B0aW9uOiBBcmRPcHRpb25TaW1wbGUsIGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzTW91c2VCZWluZ1VzZWQpIHJldHVybjtcbiAgICB0aGlzLml0ZW1TdG9yYWdlLmhpZ2hsaWdodFNpbmdsZUl0ZW0ob3B0aW9uKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuICBvbkl0ZW1Nb3VzZUxlYXZlKG9wdGlvbjogQXJkT3B0aW9uU2ltcGxlLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc01vdXNlQmVpbmdVc2VkKSByZXR1cm47XG4gICAgdGhpcy5pdGVtU3RvcmFnZS51bmhpZ2hsaWdodEl0ZW0ob3B0aW9uKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfVxuXG4gIC8vISBjbGljayBoYW5kbGVyc1xuICBvbkl0ZW1DbGljayhvcHRpb246IEFyZE9wdGlvblNpbXBsZSwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnRvZ2dsZUl0ZW0ob3B0aW9uKTtcbiAgfVxuXG4gIC8vISBrZXkgcHJlc3MgaGFuZGxlcnNcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uS2V5UHJlc3MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcbiAgICAgIGNhc2UgJ1NwYWNlJzpcbiAgICAgIGNhc2UgJ0VudGVyJzoge1xuICAgICAgICB0aGlzLl90b2dnbGVIaWdobGlnaHRlZEl0ZW1zKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6IHtcbiAgICAgICAgdGhpcy5faGlnaGxpZ2h0TmV4dChldmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6IHtcbiAgICAgICAgdGhpcy5faGlnaGxpZ2h0UHJldmlvdXMoZXZlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlICdIb21lJzoge1xuICAgICAgICB0aGlzLl9oaWdobGlnaHRGaXJzdChldmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0VuZCc6IHtcbiAgICAgICAgdGhpcy5faGlnaGxpZ2h0TGFzdChldmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0tleUEnOiB7XG4gICAgICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICAgICAgdGhpcy5faGlnaGxpZ2h0QWxsKGV2ZW50KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfdG9nZ2xlSGlnaGxpZ2h0ZWRJdGVtcyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0ZvY3VzZWQpIHJldHVybjtcblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBjb25zdCBoaWdobGlnaHRlZEl0ZW1zID0gdGhpcy5oaWdobGlnaHRlZEl0ZW1zO1xuXG4gICAgaWYgKGhpZ2hsaWdodGVkSXRlbXMuZXZlcnkoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKSkge1xuICAgICAgdGhpcy51bnNlbGVjdEl0ZW0oLi4uaGlnaGxpZ2h0ZWRJdGVtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0SXRlbSguLi5oaWdobGlnaHRlZEl0ZW1zKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfaGlnaGxpZ2h0UHJldmlvdXMoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNGb2N1c2VkKSByZXR1cm47XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuaXNNb3VzZUJlaW5nVXNlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5pdGVtU3RvcmFnZS5oaWdobGlnaHROZXh0SXRlbSgtMSwgZXZlbnQuc2hpZnRLZXkpO1xuICB9XG4gIHByaXZhdGUgX2hpZ2hsaWdodE5leHQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNGb2N1c2VkKSByZXR1cm47XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuaXNNb3VzZUJlaW5nVXNlZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5pdGVtU3RvcmFnZS5oaWdobGlnaHROZXh0SXRlbSgrMSwgZXZlbnQuc2hpZnRLZXkpO1xuICB9XG4gIHByaXZhdGUgX2hpZ2hsaWdodEZpcnN0KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzRm9jdXNlZCkgcmV0dXJuO1xuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmlzTW91c2VCZWluZ1VzZWQgPSBmYWxzZTtcblxuICAgIHRoaXMuaXRlbVN0b3JhZ2UuaGlnaGxpZ2h0Rmlyc3RJdGVtKCk7XG4gIH1cbiAgcHJpdmF0ZSBfaGlnaGxpZ2h0TGFzdChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0ZvY3VzZWQpIHJldHVybjtcblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5pc01vdXNlQmVpbmdVc2VkID0gZmFsc2U7XG5cbiAgICB0aGlzLml0ZW1TdG9yYWdlLmhpZ2hsaWdodExhc3RJdGVtKCk7XG4gIH1cbiAgcHJpdmF0ZSBfaGlnaGxpZ2h0QWxsKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5pdGVtU3RvcmFnZS5oaWdobGlnaHRBbGxJdGVtcygpO1xuICB9XG59XG4iXX0=
280
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0YWJsZS1saXN0LWNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvX2ludGVybmFsL3NlbGVjdGFibGUtbGlzdC1jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxXQUFXLEVBQ1gsWUFBWSxFQUNaLEtBQUssRUFDTCxRQUFRLEVBQ1IsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHckcsT0FBTyxFQUFFLGlCQUFpQixFQUF5QixNQUFNLHFDQUFxQyxDQUFDO0FBQy9GLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDOztBQUc1RCxNQUFNLE9BQWdCLDRCQUNwQixTQUFRLHFCQUFxQjtJQWdCN0IsWUFBb0IsR0FBc0I7UUFDeEMsS0FBSyxFQUFFLENBQUM7UUFEVSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQWIxQyxvQkFBb0I7UUFDWCxnQkFBVyxHQUFHLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUU3QixhQUFRLEdBQUc7WUFDbEIsU0FBUyxFQUFFLE9BQU87WUFDbEIsU0FBUyxFQUFFLE9BQU87WUFDbEIsWUFBWSxFQUFFLFVBQVU7U0FDekIsQ0FBQztRQVNGLDBCQUEwQjtRQUNqQixjQUFTLEdBQUcsS0FBSyxDQUFtQixTQUFTLENBQUMsQ0FBQztRQUMvQyxjQUFTLEdBQUcsS0FBSyxDQUFtQixTQUFTLENBQUMsQ0FBQztRQUMvQyxpQkFBWSxHQUFHLEtBQUssQ0FBbUIsU0FBUyxDQUFDLENBQUM7UUFDbEQsZ0JBQVcsR0FBRyxL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U0FBUztzRkE4QkosS0FBSztzQkFEUixLQUFLO2dCQXNDRiw2QkFBNkI7c0JBRmhDLFdBQVc7dUJBQUMsZUFBZTs7c0JBQzNCLFdBQVc7dUJBQUMsdUJBQXVCO2dCQWFoQywwQkFBMEI7c0JBRDdCLFdBQVc7dUJBQUMseUJBQXlCO2dCQXdCbEMscUJBQXFCO3NCQUR4QixXQUFXO3VCQUFDLG1CQUFtQjtnQkFtRDVCLEtBQUs7c0JBRFIsS0FBSztnQkF5Q04sV0FBVztzQkFEVixZQUFZO3VCQUFDLFdBQVc7Z0JBdUJ6QixVQUFVO3NCQURULFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERpcmVjdGl2ZSxcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIGNvbXB1dGVkLFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGNvZXJjZUFycmF5UHJvcGVydHksIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYXJkaXVtLXVpL2RldmtpdCc7XG5pbXBvcnQgeyBBcmRPcHRpb25TaW1wbGUsIENvbXBhcmVXaXRoRm4sIE9wdGlvbkNvbnRleHQgfSBmcm9tICcuLi90eXBlcy9pdGVtLXN0b3JhZ2UudHlwZXMnO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICcuLi90eXBlcy91dGlsaXR5LnR5cGVzJztcbmltcG9ydCB7IFNpbXBsZUl0ZW1TdG9yYWdlLCBTaW1wbGVJdGVtU3RvcmFnZUhvc3QgfSBmcm9tICcuL2l0ZW0tc3RvcmFnZXMvc2ltcGxlLWl0ZW0tc3RvcmFnZSc7XG5pbXBvcnQgeyBfTmdNb2RlbENvbXBvbmVudEJhc2UgfSBmcm9tICcuL25nbW9kZWwtY29tcG9uZW50JztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgX1NlbGVjdGFibGVMaXN0Q29tcG9uZW50QmFzZVxuICBleHRlbmRzIF9OZ01vZGVsQ29tcG9uZW50QmFzZVxuICBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBTaW1wbGVJdGVtU3RvcmFnZUhvc3RcbntcbiAgLy8hIHB1YmxpYyBjb25zdGFudHNcbiAgcmVhZG9ubHkgaXRlbVN0b3JhZ2UgPSBuZXcgU2ltcGxlSXRlbVN0b3JhZ2UodGhpcyk7XG4gIHJlYWRvbmx5IGh0bWxJZCA9IGNyeXB0by5yYW5kb21VVUlEKCk7XG4gIHJlYWRvbmx5IGVsZW1lbnQhOiBIVE1MRWxlbWVudDtcbiAgcmVhZG9ubHkgREVGQVVMVFMgPSB7XG4gICAgdmFsdWVGcm9tOiAndmFsdWUnLFxuICAgIGxhYmVsRnJvbTogJ2xhYmVsJyxcbiAgICBkaXNhYmxlZEZyb206ICdkaXNhYmxlZCcsXG4gIH07XG5cbiAgYWJzdHJhY3QgcmVhZG9ubHkgX2NvbXBvbmVudElkOiBzdHJpbmc7XG4gIGFic3RyYWN0IHJlYWRvbmx5IF9jb21wb25lbnROYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIC8vISBiaW5kaW5nLXJlbGF0ZWQgaW5wdXRzXG4gIHJlYWRvbmx5IHZhbHVlRnJvbSA9IGlucHV0PE51bGxhYmxlPHN0cmluZz4+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGxhYmVsRnJvbSA9IGlucHV0PE51bGxhYmxlPHN0cmluZz4+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGRpc2FibGVkRnJvbSA9IGlucHV0PE51bGxhYmxlPHN0cmluZz4+KHVuZGVmaW5lZCk7XG4gIHJlYWRvbmx5IGNvbXBhcmVXaXRoID0gaW5wdXQ8TnVsbGFibGU8Q29tcGFyZVdpdGhGbj4+KHVuZGVmaW5lZCk7XG5cbiAgLy8hIGl0ZW1zIHNldHRlci9nZXR0ZXJcbiAgQElucHV0KClcbiAgZ2V0IGl0ZW1zKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtU3RvcmFnZS5pdGVtcygpO1xuICB9XG4gIHNldCBpdGVtcyh2YWx1ZTogYW55KSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkgdmFsdWUgPSBjb2VyY2VBcnJheVByb3BlcnR5KHZhbHVlKTtcblxuICAgIGNvbnN0IHNob3VsZFByaW50RXJyb3JzID0gdGhpcy5pdGVtU3RvcmFnZS5zZXRJdGVtcyh2YWx1ZSk7XG5cbiAgICBpZiAoc2hvdWxkUHJpbnRFcnJvcnMpIHtcbiAgICAgIHRoaXMuX3ByaW50UHJpbWl0aXZlV2FybmluZ3MoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfcHJpbnRQcmltaXRpdmVXYXJuaW5ncygpIHtcbiAgICBjb25zdCBtYWtlV2FybmluZyA9IChzdHI6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgQVJELVdBJHt0aGlzLl9jb21wb25lbnRJZH0gU2tpcHBlZCB1c2luZyBbJHtzdHJ9XSBwcm9wZXJ0eSBib3VuZCB0byA8YXJkLSR7dGhpcy5fY29tcG9uZW50TmFtZX0+LCBhcyBzb21lIHByb3ZpZGVkIGl0ZW1zIGFyZSBvZiBwcmltaXRpdmUgdHlwZWBcbiAgICAgICk7XG4gICAgfTtcbiAgICBpZiAodGhpcy52YWx1ZUZyb20oKSkge1xuICAgICAgbWFrZVdhcm5pbmcoJ3ZhbHVlRnJvbScpO1xuICAgIH1cbiAgICBpZiAodGhpcy5sYWJlbEZyb20oKSkge1xuICAgICAgbWFrZVdhcm5pbmcoJ2xhYmVsRnJvbScpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaXNhYmxlZEZyb20oKSkge1xuICAgICAgbWFrZVdhcm5pbmcoJ2Rpc2FibGVkRnJvbScpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pbnZlcnREaXNhYmxlZCgpKSB7XG4gICAgICBtYWtlV2FybmluZygnaW52ZXJ0RGlzYWJsZWQnKTtcbiAgICB9XG4gIH1cblxuICAvLyEgbXVsdGlzZWxlY3RhYmxlXG4gIHJlYWRvbmx5IG11bHRpc2VsZWN0YWJsZSA9IGlucHV0PGJvb2xlYW4sIGFueT4oZmFsc2UsIHsgdHJhbnNmb3JtOiB2ID0+IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KSB9KTtcblxuICBASG9zdEJpbmRpbmcoJ2F0dHIubXVsdGlwbGUnKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFyZC1tdWx0aXNlbGVjdCcpXG4gIGdldCBfbXVsdGlzZWxlY3RhYmxlSG9zdEF0dHJpYnV0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tdWx0aXNlbGVjdGFibGUoKTtcbiAgfVxuXG4gIHJlYWRvbmx5IHNpbmdsZXNlbGVjdGFibGUgPSBjb21wdXRlZCgoKSA9PiAhdGhpcy5tdWx0aXNlbGVjdGFibGUoKSk7XG5cbiAgLy8hIHJlcXVpcmUgdmFsdWVcbiAgcmVhZG9ubHkgcmVxdWlyZVZhbHVlID0gaW5wdXQ8Ym9vbGVhbiwgYW55PihmYWxzZSwgeyB0cmFuc2Zvcm06IHYgPT4gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpIH0pO1xuXG4gIHJlYWRvbmx5IGlzVmFsdWVSZXF1aXJlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVxdWlyZVZhbHVlKCkgfHwgIXRoaXMubXVsdGlzZWxlY3RhYmxlKCkpO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuYXJkLXJlcXVpcmUtdmFsdWUnKVxuICBnZXQgX3JlcXVpcmVWYWx1ZUhvc3RBdHRyaWJ1dGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWlyZVZhbHVlKCk7XG4gIH1cblxuICAvLyEgY29lcmNlZCBwcm9wZXJ0aWVzXG4gIHJlYWRvbmx5IGludmVydERpc2FibGVkID0gaW5wdXQ8Ym9vbGVhbiwgYW55PihmYWxzZSwgeyB0cmFuc2Zvcm06IHYgPT4gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpIH0pO1xuICByZWFkb25seSBtYXhTZWxlY3RlZEl0ZW1zID0gaW5wdXQ8TnVsbGFibGU8bnVtYmVyPiwgYW55Pih1bmRlZmluZWQsIHsgdHJhbnNmb3JtOiB2ID0+IGNvZXJjZU51bWJlclByb3BlcnR5KHYsIHVuZGVmaW5lZCkgfSk7XG5cbiAgLy8hIGNvbnRyb2wgdmFsdWUgYWNjZXNzb3JcbiAgLy9vdmVycmlkZSB0aGUgd3JpdGVWYWx1ZSBhbmQgc2V0RGlzYWJsZWRTdGF0ZSBkZWZpbmVkIGluIF9OZ01vZGVsQ29tcG9uZW50XG4gIG92ZXJyaWRlIHNldERpc2FibGVkU3RhdGUoc3RhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmRpc2FibGVkLnNldChzdGF0ZSk7XG4gICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cbiAgd3JpdGVWYWx1ZShuZ01vZGVsOiBhbnlbXSk6IHZvaWQge1xuICAgIHRoaXMuaXRlbVN0b3JhZ2Uud3JpdGVWYWx1ZShuZ01vZGVsKTtcbiAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8vISBjaGFuZ2UgJiB0b3VjaCBldmVudCBlbWl0dGVyc1xuICByZWFkb25seSB0b3VjaGVkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFyZC10b3VjaGVkJylcbiAgZ2V0IF90b3VjaGVkSG9zdEF0dHJpYnV0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50b3VjaGVkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX2VtaXRDaGFuZ2UoKTogdm9pZCB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLml0ZW1TdG9yYWdlLnZhbHVlKCk7XG4gICAgdGhpcy5fb25DaGFuZ2VSZWdpc3RlcmVkPy4odmFsdWUpO1xuICAgIHRoaXMuY2hhbmdlRXZlbnQuZW1pdCh2YWx1ZSk7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuICBwcm90ZWN0ZWQgX29uVG91Y2hlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50b3VjaGVkKCkpIHJldHVybjtcblxuICAgIHRoaXMuX29uVG91Y2hlZFJlZ2lzdGVyZWQ/LigpO1xuICAgIHRoaXMudG91Y2hlZC5zZXQodHJ1ZSk7XG4gIH1cblxuICAvLyEgZm9jdXMgJiBibHVyIGhhbmRsZXJzXG4gIHByaXZhdGUgcmVhZG9ubHkgbGFzdEJsdXJUaW1lc3RhbXAgPSBzaWduYWw8TnVsbGFibGU8bnVtYmVyPj4odW5kZWZpbmVkKTtcbiAgb3ZlcnJpZGUgb25Gb2N1cyhldmVudDogRm9jdXNFdmVudCk6IHZvaWQge1xuICAgIHN1cGVyLm9uRm9jdXMoZXZlbnQpO1xuXG4gICAgY29uc3QgbGJ0ID0gdGhpcy5sYXN0Qmx1clRpbWVzdGFtcCgpO1xuICAgIGlmICh0aGlzLnRvdWNoZWQoKSB8fCAhbGJ0IHx8IGxidCArIDEgPCBEYXRlLm5vdygpKSByZXR1cm47XG4gICAgdGhpcy5sYXN0Qmx1clRpbWVzdGFtcC5zZXQobnVsbCk7XG5cbiAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgfVxuICBvdmVycmlkZSBvbkJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICBzdXBlci5vbkJsdXIoZXZlbnQpO1xuXG4gICAgaWYgKCF0aGlzLnRvdWNoZWQoKSkgdGhpcy5sYXN0Qmx1clRpbWVzdGFtcC5zZXQoRGF0ZS5ub3coKSk7XG4gIH1cblxuICAvLyEgZ2V0dGVyc1xuICByZWFkb25seSBoaWdobGlnaHRlZEl0ZW1zID0gY29tcHV0ZWQ8QXJkT3B0aW9uU2ltcGxlW10+KCgpID0+IHRoaXMuaXRlbVN0b3JhZ2UuaGlnaGxpZ2h0ZWRJdGVtcygpKTtcbiAgcmVhZG9ubHkgZmlyc3RIaWdobGlnaHRlZEl0ZW0gPSBjb21wdXRlZDxOdWxsYWJsZTxBcmRPcHRpb25TaW1wbGU+PigoKSA9PiB0aGlzLmhpZ2hsaWdodGVkSXRlbXMoKT8uZmlyc3QoKSk7XG4gIHJlYWRvbmx5IGlzSXRlbUxpbWl0UmVhY2hlZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXRlbVN0b3JhZ2UuaXNJdGVtTGltaXRSZWFjaGVkKCkpO1xuXG4gIC8vISBjb250ZXh0IHByb3ZpZGVyc1xuICBnZXRPcHRpb25Db250ZXh0KGl0ZW06IEFyZE9wdGlvblNpbXBsZSk6IE9wdGlvbkNvbnRleHQ8QXJkT3B0aW9uU2ltcGxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogaXRlbSxcbiAgICAgIGl0ZW0sXG4gICAgICBpdGVtRGF0YTogaXRlbS5pdGVtRGF0YSgpLFxuICAgIH07XG4gIH1cblxuICAvLyEgdmFsdWUgaW5wdXQgJiBvdXRwdXRcbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKG5ld1ZhbHVlOiBhbnkpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobmV3VmFsdWUpKSBuZXdWYWx1ZSA9IGNvZXJjZUFycmF5UHJvcGVydHkobmV3VmFsdWUpO1xuICAgIHRoaXMud3JpdGVWYWx1ZShuZXdWYWx1ZSk7XG4gIH1cbiAgcmVhZG9ubHkgdmFsdWVDaGFuZ2UgPSBvdXRwdXQ8YW55W10+KCk7XG5cbiAgLy8hIG91dHB1dCBldmVudHNcbiAgcmVhZG9ubHkgY2hhbmdlRXZlbnQgPSBvdXRwdXQ8YW55W10+KHsgYWxpYXM6ICdjaGFuZ2UnIH0pO1xuICByZWFkb25seSBhZGRFdmVudCA9IG91dHB1dDxhbnlbXT4oeyBhbGlhczogJ2FkZCcgfSk7XG4gIHJlYWRvbmx5IHJlbW92ZUV2ZW50ID0gb3V0cHV0PGFueVtdPih7IGFsaWFzOiAncmVtb3ZlJyB9KTtcblxuICAvLyEgaXRlbSBzZWxlY3Rpb24gaGFuZGxlcnNcbiAgdG9nZ2xlSXRlbShpdGVtOiBBcmRPcHRpb25TaW1wbGUpOiB2b2lkIHtcbiAgICBpZiAoaXRlbS5zZWxlY3RlZCgpKSB7XG4gICAgICB0aGlzLnVuc2VsZWN0SXRlbShpdGVtKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RJdGVtKGl0ZW0pO1xuICB9XG4gIHNlbGVjdEl0ZW0oLi4uaXRlbXM6IEFyZE9wdGlvblNpbXBsZVtdKTogdm9pZCB7XG4gICAgY29uc3QgW3NlbGVjdGVkLCB1bnNlbGVjdGVkXSA9IHRoaXMuaXRlbVN0b3JhZ2Uuc2VsZWN0SXRlbSguLi5pdGVtcyk7XG5cbiAgICBpZiAodW5zZWxlY3RlZC5sZW5ndGggPiAwKSB0aGlzLnJlbW92ZUV2ZW50LmVtaXQodW5zZWxlY3RlZCk7XG5cbiAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5hZGRFdmVudC5lbWl0KHNlbGVjdGVkKTtcbiAgICAgIHRoaXMuX2VtaXRDaGFuZ2UoKTtcbiAgICB9XG4gIH1cbiAgdW5zZWxlY3RJdGVtKC4uLml0ZW1zOiBBcmRPcHRpb25TaW1wbGVbXSk6IHZvaWQge1xuICAgIGNvbnN0IHVuc2VsZWN0ZWQgPSB0aGlzLml0ZW1TdG9yYWdlLnVuc2VsZWN0SXRlbSguLi5pdGVtcyk7XG5cbiAgICB0aGlzLnJlbW92ZUV2ZW50LmVtaXQodW5zZWxlY3RlZCk7XG4gICAgdGhpcy5fZW1pdENoYW5nZSgpO1xuICB9XG5cbiAgLy8hIGhpZ2hsaWdoLXJlbGF0ZWRcblxuICByZWFkb25seSBpc01vdXNlQmVpbmdVc2VkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcbiAgQEhvc3RMaXN0ZW5lcignbW91c2Vtb3ZlJylcbiAgb25Nb3VzZU1vdmUoKSB7XG4gICAgdGhpcy5pc01vdXNlQmVpbmdVc2VkLnNldCh0cnVlKTtcbiAgfVxuICBvbkl0ZW1Nb3VzZUVudGVyKG9wdGlvbjogQXJkT3B0aW9uU2ltcGxlLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc01vdXNlQmVpbmdVc2VkKSByZXR1cm47XG4gICAgdGhpcy5pdGVtU3RvcmFnZS5oaWdobGlnaHRTaW5nbGVJdGVtKG9wdGlvbik7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cbiAgb25JdGVtTW91c2VMZWF2ZShvcHRpb246IEFyZE9wdGlvblNpbXBsZSwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNNb3VzZUJlaW5nVXNlZCkgcmV0dXJuO1xuICAgIHRoaXMuaXRlbVN0b3JhZ2UudW5oaWdobGlnaHRJdGVtKG9wdGlvbik7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICAvLyEgY2xpY2sgaGFuZGxlcnNcbiAgb25JdGVtQ2xpY2sob3B0aW9uOiBBcmRPcHRpb25TaW1wbGUsIGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy50b2dnbGVJdGVtKG9wdGlvbik7XG4gIH1cblxuICAvLyEga2V5IHByZXNzIGhhbmRsZXJzXG4gIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICBvbktleVByZXNzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgc3dpdGNoIChldmVudC5jb2RlKSB7XG4gICAgICBjYXNlICdTcGFjZSc6XG4gICAgICBjYXNlICdFbnRlcic6IHtcbiAgICAgICAgdGhpcy5fdG9nZ2xlSGlnaGxpZ2h0ZWRJdGVtcyhldmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOiB7XG4gICAgICAgIHRoaXMuX2hpZ2hsaWdodE5leHQoZXZlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlICdBcnJvd0xlZnQnOiB7XG4gICAgICAgIHRoaXMuX2hpZ2hsaWdodFByZXZpb3VzKGV2ZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAnSG9tZSc6IHtcbiAgICAgICAgdGhpcy5faGlnaGxpZ2h0Rmlyc3QoZXZlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlICdFbmQnOiB7XG4gICAgICAgIHRoaXMuX2hpZ2hsaWdodExhc3QoZXZlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlICdLZXlBJzoge1xuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgIHRoaXMuX2hpZ2hsaWdodEFsbCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF90b2dnbGVIaWdobGlnaHRlZEl0ZW1zKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzRm9jdXNlZCkgcmV0dXJuO1xuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIGNvbnN0IGhpZ2hsaWdodGVkSXRlbXMgPSB0aGlzLmhpZ2hsaWdodGVkSXRlbXMoKTtcblxuICAgIGlmIChoaWdobGlnaHRlZEl0ZW1zLmV2ZXJ5KGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCkpIHtcbiAgICAgIHRoaXMudW5zZWxlY3RJdGVtKC4uLmhpZ2hsaWdodGVkSXRlbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdEl0ZW0oLi4uaGlnaGxpZ2h0ZWRJdGVtcyk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX2hpZ2hsaWdodFByZXZpb3VzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzRm9jdXNlZCkgcmV0dXJuO1xuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmlzTW91c2VCZWluZ1VzZWQuc2V0KGZhbHNlKTtcblxuICAgIHRoaXMuaXRlbVN0b3JhZ2UuaGlnaGxpZ2h0TmV4dEl0ZW0oLTEsIGV2ZW50LnNoaWZ0S2V5KTtcbiAgfVxuICBwcml2YXRlIF9oaWdobGlnaHROZXh0KGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzRm9jdXNlZCkgcmV0dXJuO1xuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmlzTW91c2VCZWluZ1VzZWQuc2V0KGZhbHNlKTtcblxuICAgIHRoaXMuaXRlbVN0b3JhZ2UuaGlnaGxpZ2h0TmV4dEl0ZW0oKzEsIGV2ZW50LnNoaWZ0S2V5KTtcbiAgfVxuICBwcml2YXRlIF9oaWdobGlnaHRGaXJzdChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0ZvY3VzZWQpIHJldHVybjtcblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5pc01vdXNlQmVpbmdVc2VkLnNldChmYWxzZSk7XG5cbiAgICB0aGlzLml0ZW1TdG9yYWdlLmhpZ2hsaWdodEZpcnN0SXRlbSgpO1xuICB9XG4gIHByaXZhdGUgX2hpZ2hsaWdodExhc3QoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNGb2N1c2VkKSByZXR1cm47XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuaXNNb3VzZUJlaW5nVXNlZC5zZXQoZmFsc2UpO1xuXG4gICAgdGhpcy5pdGVtU3RvcmFnZS5oaWdobGlnaHRMYXN0SXRlbSgpO1xuICB9XG4gIHByaXZhdGUgX2hpZ2hsaWdodEFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLml0ZW1TdG9yYWdlLmhpZ2hsaWdodEFsbEl0ZW1zKCk7XG4gIH1cbn1cbiJdfQ==