@ardium-ui/ui 4.4.2 → 5.0.0-alpha.0

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 (350) hide show
  1. package/fesm2022/ardium-ui-ui.mjs +2482 -2400
  2. package/fesm2022/ardium-ui-ui.mjs.map +1 -1
  3. package/lib/_internal/boolean-component.d.ts +1 -1
  4. package/lib/_internal/disablable-component.d.ts +1 -1
  5. package/lib/_internal/focusable-component.d.ts +1 -1
  6. package/lib/_internal/form-field-component.d.ts +1 -1
  7. package/lib/_internal/ngmodel-component.d.ts +1 -1
  8. package/lib/_internal/selectable-list-component.d.ts +1 -1
  9. package/lib/_internal/utils/date.utils.d.ts +3 -0
  10. package/lib/buttons/_button-base.d.ts +1 -1
  11. package/lib/calendar/calendar.component.d.ts +8 -2
  12. package/lib/file-inputs/file-input-base.d.ts +1 -1
  13. package/lib/form-field/form-field-base.d.ts +1 -1
  14. package/lib/inputs/_simple-input-base.d.ts +3 -3
  15. package/lib/inputs/autocomplete-input/autocomplete-input.component.d.ts +66 -0
  16. package/lib/inputs/autocomplete-input/autocomplete-input.defaults.d.ts +15 -0
  17. package/lib/inputs/autocomplete-input/autocomplete-input.directives.d.ts +33 -0
  18. package/lib/inputs/autocomplete-input/autocomplete-input.module.d.ts +13 -0
  19. package/lib/inputs/autocomplete-input/index.d.ts +3 -0
  20. package/lib/inputs/date-input/date-input.component.d.ts +5 -2
  21. package/lib/inputs/input/index.d.ts +2 -1
  22. package/lib/inputs/input/input.component.d.ts +3 -56
  23. package/lib/inputs/input/input.defaults.d.ts +1 -10
  24. package/lib/inputs/input/input.directives.d.ts +0 -13
  25. package/lib/inputs/input/input.module.d.ts +3 -5
  26. package/lib/inputs/input-utils.d.ts +8 -8
  27. package/lib/option/option.component.d.ts +1 -1
  28. package/lib/slider/abstract-slider.d.ts +1 -1
  29. package/package.json +1 -3
  30. package/prebuilt-themes/default/inputs/{simple-input.css → autocomplete-input.css} +40 -15
  31. package/prebuilt-themes/default/inputs/autocomplete-input.css.map +1 -0
  32. package/prebuilt-themes/default/inputs/input.css +0 -25
  33. package/prebuilt-themes/default/inputs/input.css.map +1 -1
  34. package/public-api.d.ts +1 -1
  35. package/themes/default/inputs/autocomplete-input.scss +46 -0
  36. package/themes/default/inputs/input.scss +0 -34
  37. package/esm2022/ardium-ui-ui.mjs +0 -5
  38. package/esm2022/lib/_internal/boolean-component.mjs +0 -95
  39. package/esm2022/lib/_internal/clear-button/clear-button.component.mjs +0 -15
  40. package/esm2022/lib/_internal/clear-button/clear-button.module.mjs +0 -18
  41. package/esm2022/lib/_internal/disablable-component.mjs +0 -51
  42. package/esm2022/lib/_internal/focusable-component.mjs +0 -85
  43. package/esm2022/lib/_internal/form-field-component.mjs +0 -33
  44. package/esm2022/lib/_internal/item-storages/dropdown-item-storage.mjs +0 -453
  45. package/esm2022/lib/_internal/item-storages/simple-item-storage.mjs +0 -370
  46. package/esm2022/lib/_internal/item-storages/simplest-item-storage.mjs +0 -157
  47. package/esm2022/lib/_internal/models/pagination.model.mjs +0 -90
  48. package/esm2022/lib/_internal/models/queue.mjs +0 -59
  49. package/esm2022/lib/_internal/ngmodel-component.mjs +0 -101
  50. package/esm2022/lib/_internal/public-api.mjs +0 -2
  51. package/esm2022/lib/_internal/selectable-list-component.mjs +0 -271
  52. package/esm2022/lib/badge/badge.defaults.mjs +0 -20
  53. package/esm2022/lib/badge/badge.directive.mjs +0 -97
  54. package/esm2022/lib/badge/badge.module.mjs +0 -18
  55. package/esm2022/lib/badge/badge.types.mjs +0 -16
  56. package/esm2022/lib/badge/index.mjs +0 -5
  57. package/esm2022/lib/buttons/_button-base.defaults.mjs +0 -17
  58. package/esm2022/lib/buttons/_button-base.mjs +0 -26
  59. package/esm2022/lib/buttons/button/button.component.mjs +0 -38
  60. package/esm2022/lib/buttons/button/button.defaults.mjs +0 -17
  61. package/esm2022/lib/buttons/button/button.module.mjs +0 -18
  62. package/esm2022/lib/buttons/button/index.mjs +0 -4
  63. package/esm2022/lib/buttons/fab/fab.component.mjs +0 -33
  64. package/esm2022/lib/buttons/fab/fab.defaults.mjs +0 -17
  65. package/esm2022/lib/buttons/fab/fab.module.mjs +0 -18
  66. package/esm2022/lib/buttons/fab/index.mjs +0 -4
  67. package/esm2022/lib/buttons/general-button.types.mjs +0 -55
  68. package/esm2022/lib/buttons/icon-button/icon-button.component.mjs +0 -39
  69. package/esm2022/lib/buttons/icon-button/icon-button.defaults.mjs +0 -9
  70. package/esm2022/lib/buttons/icon-button/icon-button.module.mjs +0 -18
  71. package/esm2022/lib/buttons/icon-button/index.mjs +0 -4
  72. package/esm2022/lib/calendar/calendar.component.mjs +0 -466
  73. package/esm2022/lib/calendar/calendar.defaults.mjs +0 -26
  74. package/esm2022/lib/calendar/calendar.directives.mjs +0 -107
  75. package/esm2022/lib/calendar/calendar.internal-directives.mjs +0 -22
  76. package/esm2022/lib/calendar/calendar.internal-types.mjs +0 -2
  77. package/esm2022/lib/calendar/calendar.module.mjs +0 -71
  78. package/esm2022/lib/calendar/calendar.types.mjs +0 -6
  79. package/esm2022/lib/calendar/index.mjs +0 -6
  80. package/esm2022/lib/calendar/views/days-view/days-view.component.mjs +0 -282
  81. package/esm2022/lib/calendar/views/days-view/days-view.helpers.mjs +0 -65
  82. package/esm2022/lib/calendar/views/months-view/months-view.component.mjs +0 -245
  83. package/esm2022/lib/calendar/views/months-view/months-view.helpers.mjs +0 -22
  84. package/esm2022/lib/calendar/views/years-view/years-view.component.mjs +0 -244
  85. package/esm2022/lib/calendar/views/years-view/years-view.helpers.mjs +0 -14
  86. package/esm2022/lib/card/card.children.mjs +0 -96
  87. package/esm2022/lib/card/card.component.mjs +0 -38
  88. package/esm2022/lib/card/card.defaults.mjs +0 -17
  89. package/esm2022/lib/card/card.module.mjs +0 -59
  90. package/esm2022/lib/card/card.types.mjs +0 -9
  91. package/esm2022/lib/card/index.mjs +0 -6
  92. package/esm2022/lib/checkbox/checkbox.component.mjs +0 -68
  93. package/esm2022/lib/checkbox/checkbox.defaults.mjs +0 -17
  94. package/esm2022/lib/checkbox/checkbox.directives.mjs +0 -14
  95. package/esm2022/lib/checkbox/checkbox.internal-directives.mjs +0 -15
  96. package/esm2022/lib/checkbox/checkbox.module.mjs +0 -20
  97. package/esm2022/lib/checkbox/checkbox.types.mjs +0 -6
  98. package/esm2022/lib/checkbox/index.mjs +0 -6
  99. package/esm2022/lib/checkbox-list/checkbox-list.component.mjs +0 -116
  100. package/esm2022/lib/checkbox-list/checkbox-list.defaults.mjs +0 -25
  101. package/esm2022/lib/checkbox-list/checkbox-list.directives.mjs +0 -14
  102. package/esm2022/lib/checkbox-list/checkbox-list.module.mjs +0 -21
  103. package/esm2022/lib/checkbox-list/checkbox-list.types.mjs +0 -7
  104. package/esm2022/lib/checkbox-list/index.mjs +0 -6
  105. package/esm2022/lib/chip/chip.component.mjs +0 -36
  106. package/esm2022/lib/chip/chip.defaults.mjs +0 -20
  107. package/esm2022/lib/chip/chip.module.mjs +0 -21
  108. package/esm2022/lib/chip/deletable-chip/deletable-chip.component.mjs +0 -53
  109. package/esm2022/lib/chip/deletable-chip/deletable-chip.defaults.mjs +0 -17
  110. package/esm2022/lib/chip/index.mjs +0 -8
  111. package/esm2022/lib/chip/selectable-chip/selectable-chip.component.mjs +0 -53
  112. package/esm2022/lib/chip/selectable-chip/selectable-chip.defaults.mjs +0 -18
  113. package/esm2022/lib/dialog/dialog.component.mjs +0 -109
  114. package/esm2022/lib/dialog/dialog.defaults.mjs +0 -26
  115. package/esm2022/lib/dialog/dialog.directives.mjs +0 -25
  116. package/esm2022/lib/dialog/dialog.module.mjs +0 -21
  117. package/esm2022/lib/dialog/dialog.types.mjs +0 -10
  118. package/esm2022/lib/dialog/index.mjs +0 -6
  119. package/esm2022/lib/divider/divider.component.mjs +0 -19
  120. package/esm2022/lib/divider/divider.defaults.mjs +0 -13
  121. package/esm2022/lib/divider/divider.module.mjs +0 -18
  122. package/esm2022/lib/divider/index.mjs +0 -4
  123. package/esm2022/lib/dropdown-panel/dropdown-panel.component.mjs +0 -112
  124. package/esm2022/lib/dropdown-panel/dropdown-panel.defaults.mjs +0 -17
  125. package/esm2022/lib/dropdown-panel/dropdown-panel.module.mjs +0 -18
  126. package/esm2022/lib/dropdown-panel/dropdown-panel.types.mjs +0 -10
  127. package/esm2022/lib/dropdown-panel/index.mjs +0 -5
  128. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.component.mjs +0 -70
  129. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.defaults.mjs +0 -18
  130. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.directives.mjs +0 -42
  131. package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.module.mjs +0 -52
  132. package/esm2022/lib/file-inputs/file-drop-area/index.mjs +0 -5
  133. package/esm2022/lib/file-inputs/file-input/file-input.component.mjs +0 -120
  134. package/esm2022/lib/file-inputs/file-input/file-input.defaults.mjs +0 -23
  135. package/esm2022/lib/file-inputs/file-input/file-input.directives.mjs +0 -86
  136. package/esm2022/lib/file-inputs/file-input/file-input.module.mjs +0 -55
  137. package/esm2022/lib/file-inputs/file-input/index.mjs +0 -5
  138. package/esm2022/lib/file-inputs/file-input-base.defaults.mjs +0 -8
  139. package/esm2022/lib/file-inputs/file-input-base.mjs +0 -356
  140. package/esm2022/lib/file-inputs/file-input-types.mjs +0 -8
  141. package/esm2022/lib/form-field/error/error.component.mjs +0 -17
  142. package/esm2022/lib/form-field/error/error.directive.mjs +0 -17
  143. package/esm2022/lib/form-field/form-field-base.mjs +0 -53
  144. package/esm2022/lib/form-field/form-field-child.token.mjs +0 -3
  145. package/esm2022/lib/form-field/form-field-native-inputs.mjs +0 -80
  146. package/esm2022/lib/form-field/form-field.component.mjs +0 -12
  147. package/esm2022/lib/form-field/form-field.defaults.mjs +0 -17
  148. package/esm2022/lib/form-field/form-field.module.mjs +0 -49
  149. package/esm2022/lib/form-field/hint/hint.component.mjs +0 -17
  150. package/esm2022/lib/form-field/hint/hint.directive.mjs +0 -30
  151. package/esm2022/lib/form-field/horizontal-form-field.component.mjs +0 -12
  152. package/esm2022/lib/form-field/index.mjs +0 -10
  153. package/esm2022/lib/form-field/label/label.component.mjs +0 -27
  154. package/esm2022/lib/form-field-frame/form-field-frame.component.mjs +0 -58
  155. package/esm2022/lib/form-field-frame/form-field-frame.defaults.mjs +0 -18
  156. package/esm2022/lib/form-field-frame/form-field-frame.directives.mjs +0 -25
  157. package/esm2022/lib/form-field-frame/form-field-frame.module.mjs +0 -19
  158. package/esm2022/lib/form-field-frame/index.mjs +0 -5
  159. package/esm2022/lib/icon/icon.component.mjs +0 -52
  160. package/esm2022/lib/icon/icon.defaults.mjs +0 -17
  161. package/esm2022/lib/icon/icon.module.mjs +0 -19
  162. package/esm2022/lib/icon/icon.pipe.mjs +0 -18
  163. package/esm2022/lib/icon/index.mjs +0 -5
  164. package/esm2022/lib/inputs/_simple-input-base.mjs +0 -153
  165. package/esm2022/lib/inputs/date-input/date-input.component.mjs +0 -375
  166. package/esm2022/lib/inputs/date-input/date-input.defaults.mjs +0 -38
  167. package/esm2022/lib/inputs/date-input/date-input.directive.mjs +0 -163
  168. package/esm2022/lib/inputs/date-input/date-input.module.mjs +0 -108
  169. package/esm2022/lib/inputs/date-input/date-input.serializers.mjs +0 -49
  170. package/esm2022/lib/inputs/date-input/date-input.types.mjs +0 -5
  171. package/esm2022/lib/inputs/date-input/index.mjs +0 -6
  172. package/esm2022/lib/inputs/digit-input/digit-input.component.mjs +0 -265
  173. package/esm2022/lib/inputs/digit-input/digit-input.defaults.mjs +0 -24
  174. package/esm2022/lib/inputs/digit-input/digit-input.model.mjs +0 -267
  175. package/esm2022/lib/inputs/digit-input/digit-input.module.mjs +0 -19
  176. package/esm2022/lib/inputs/digit-input/digit-input.types.mjs +0 -15
  177. package/esm2022/lib/inputs/digit-input/digit-input.utils.mjs +0 -8
  178. package/esm2022/lib/inputs/digit-input/index.mjs +0 -5
  179. package/esm2022/lib/inputs/hex-input/hex-input.component.mjs +0 -180
  180. package/esm2022/lib/inputs/hex-input/hex-input.defaults.mjs +0 -26
  181. package/esm2022/lib/inputs/hex-input/hex-input.directives.mjs +0 -36
  182. package/esm2022/lib/inputs/hex-input/hex-input.model.mjs +0 -97
  183. package/esm2022/lib/inputs/hex-input/hex-input.module.mjs +0 -37
  184. package/esm2022/lib/inputs/hex-input/index.mjs +0 -5
  185. package/esm2022/lib/inputs/input/index.mjs +0 -4
  186. package/esm2022/lib/inputs/input/input.component.mjs +0 -278
  187. package/esm2022/lib/inputs/input/input.defaults.mjs +0 -21
  188. package/esm2022/lib/inputs/input/input.directives.mjs +0 -58
  189. package/esm2022/lib/inputs/input/input.module.mjs +0 -61
  190. package/esm2022/lib/inputs/input-transformers.mjs +0 -66
  191. package/esm2022/lib/inputs/input-types.mjs +0 -6
  192. package/esm2022/lib/inputs/input-utils.mjs +0 -186
  193. package/esm2022/lib/inputs/number-input/index.mjs +0 -5
  194. package/esm2022/lib/inputs/number-input/number-input.component.mjs +0 -250
  195. package/esm2022/lib/inputs/number-input/number-input.defaults.mjs +0 -27
  196. package/esm2022/lib/inputs/number-input/number-input.directives.mjs +0 -14
  197. package/esm2022/lib/inputs/number-input/number-input.module.mjs +0 -21
  198. package/esm2022/lib/inputs/password-input/index.mjs +0 -6
  199. package/esm2022/lib/inputs/password-input/password-input.component.mjs +0 -167
  200. package/esm2022/lib/inputs/password-input/password-input.defaults.mjs +0 -24
  201. package/esm2022/lib/inputs/password-input/password-input.directives.mjs +0 -49
  202. package/esm2022/lib/inputs/password-input/password-input.module.mjs +0 -41
  203. package/esm2022/lib/inputs/password-input/password-input.types.mjs +0 -2
  204. package/esm2022/lib/inputs/simple-input/index.mjs +0 -5
  205. package/esm2022/lib/inputs/simple-input/simple-input.component.mjs +0 -50
  206. package/esm2022/lib/inputs/simple-input/simple-input.defaults.mjs +0 -25
  207. package/esm2022/lib/inputs/simple-input/simple-input.directives.mjs +0 -36
  208. package/esm2022/lib/inputs/simple-input/simple-input.module.mjs +0 -37
  209. package/esm2022/lib/kbd/index.mjs +0 -6
  210. package/esm2022/lib/kbd/kbd.component.mjs +0 -30
  211. package/esm2022/lib/kbd/kbd.defaults.mjs +0 -15
  212. package/esm2022/lib/kbd/kbd.directive.mjs +0 -33
  213. package/esm2022/lib/kbd/kbd.module.mjs +0 -20
  214. package/esm2022/lib/kbd/kbd.pipe.mjs +0 -21
  215. package/esm2022/lib/kbd-shortcut/index.mjs +0 -4
  216. package/esm2022/lib/kbd-shortcut/kbd-shortcut.component.mjs +0 -36
  217. package/esm2022/lib/kbd-shortcut/kbd-shortcut.defaults.mjs +0 -8
  218. package/esm2022/lib/kbd-shortcut/kbd-shortcut.module.mjs +0 -19
  219. package/esm2022/lib/modal/index.mjs +0 -5
  220. package/esm2022/lib/modal/modal.component.mjs +0 -95
  221. package/esm2022/lib/modal/modal.defaults.mjs +0 -20
  222. package/esm2022/lib/modal/modal.directives.mjs +0 -14
  223. package/esm2022/lib/modal/modal.module.mjs +0 -22
  224. package/esm2022/lib/option/index.mjs +0 -3
  225. package/esm2022/lib/option/option.component.mjs +0 -55
  226. package/esm2022/lib/option/option.module.mjs +0 -18
  227. package/esm2022/lib/progress-bar/index.mjs +0 -6
  228. package/esm2022/lib/progress-bar/progress-bar.component.mjs +0 -58
  229. package/esm2022/lib/progress-bar/progress-bar.defaults.mjs +0 -21
  230. package/esm2022/lib/progress-bar/progress-bar.directive.mjs +0 -14
  231. package/esm2022/lib/progress-bar/progress-bar.module.mjs +0 -19
  232. package/esm2022/lib/progress-bar/progress-bar.types.mjs +0 -19
  233. package/esm2022/lib/progress-circle/index.mjs +0 -6
  234. package/esm2022/lib/progress-circle/progress-circle.component.mjs +0 -45
  235. package/esm2022/lib/progress-circle/progress-circle.defaults.mjs +0 -21
  236. package/esm2022/lib/progress-circle/progress-circle.directive.mjs +0 -14
  237. package/esm2022/lib/progress-circle/progress-circle.module.mjs +0 -19
  238. package/esm2022/lib/progress-circle/progress-circle.types.mjs +0 -10
  239. package/esm2022/lib/radio/index.mjs +0 -5
  240. package/esm2022/lib/radio/radio/radio.component.mjs +0 -119
  241. package/esm2022/lib/radio/radio/radio.defaults.mjs +0 -16
  242. package/esm2022/lib/radio/radio-group.component.mjs +0 -203
  243. package/esm2022/lib/radio/radio.module.mjs +0 -19
  244. package/esm2022/lib/search-functions.mjs +0 -64
  245. package/esm2022/lib/segment/index.mjs +0 -6
  246. package/esm2022/lib/segment/segment.component.mjs +0 -125
  247. package/esm2022/lib/segment/segment.defaults.mjs +0 -26
  248. package/esm2022/lib/segment/segment.directives.mjs +0 -14
  249. package/esm2022/lib/segment/segment.module.mjs +0 -19
  250. package/esm2022/lib/segment/segment.types.mjs +0 -13
  251. package/esm2022/lib/select/index.mjs +0 -6
  252. package/esm2022/lib/select/select.component.mjs +0 -836
  253. package/esm2022/lib/select/select.defaults.mjs +0 -53
  254. package/esm2022/lib/select/select.directive.mjs +0 -171
  255. package/esm2022/lib/select/select.module.mjs +0 -112
  256. package/esm2022/lib/select/select.types.mjs +0 -2
  257. package/esm2022/lib/slide-toggle/index.mjs +0 -5
  258. package/esm2022/lib/slide-toggle/slide-toggle.component.mjs +0 -43
  259. package/esm2022/lib/slide-toggle/slide-toggle.defaults.mjs +0 -21
  260. package/esm2022/lib/slide-toggle/slide-toggle.module.mjs +0 -18
  261. package/esm2022/lib/slide-toggle/slide-toggle.types.mjs +0 -5
  262. package/esm2022/lib/slider/abstract-slider.mjs +0 -251
  263. package/esm2022/lib/slider/index.mjs +0 -8
  264. package/esm2022/lib/slider/range-slider/range-slider.component.mjs +0 -151
  265. package/esm2022/lib/slider/range-slider/range-slider.module.mjs +0 -18
  266. package/esm2022/lib/slider/slider.component.mjs +0 -100
  267. package/esm2022/lib/slider/slider.defaults.mjs +0 -14
  268. package/esm2022/lib/slider/slider.directive.mjs +0 -16
  269. package/esm2022/lib/slider/slider.module.mjs +0 -20
  270. package/esm2022/lib/slider/slider.types.mjs +0 -10
  271. package/esm2022/lib/snackbar/index.mjs +0 -5
  272. package/esm2022/lib/snackbar/snackbar-ref.mjs +0 -51
  273. package/esm2022/lib/snackbar/snackbar.component.mjs +0 -48
  274. package/esm2022/lib/snackbar/snackbar.service.mjs +0 -224
  275. package/esm2022/lib/snackbar/snackbar.token.mjs +0 -26
  276. package/esm2022/lib/snackbar/snackbar.types.mjs +0 -25
  277. package/esm2022/lib/spinner/index.mjs +0 -4
  278. package/esm2022/lib/spinner/spinner.component.mjs +0 -19
  279. package/esm2022/lib/spinner/spinner.defaults.mjs +0 -14
  280. package/esm2022/lib/spinner/spinner.module.mjs +0 -18
  281. package/esm2022/lib/star/index.mjs +0 -6
  282. package/esm2022/lib/star/rating-display/index.mjs +0 -6
  283. package/esm2022/lib/star/rating-display/rating-display.component.mjs +0 -71
  284. package/esm2022/lib/star/rating-display/rating-display.defaults.mjs +0 -16
  285. package/esm2022/lib/star/rating-display/rating-display.directives.mjs +0 -16
  286. package/esm2022/lib/star/rating-display/rating-display.module.mjs +0 -20
  287. package/esm2022/lib/star/rating-display/rating-display.types.mjs +0 -2
  288. package/esm2022/lib/star/rating-input/index.mjs +0 -6
  289. package/esm2022/lib/star/rating-input/rating-input.component.mjs +0 -191
  290. package/esm2022/lib/star/rating-input/rating-input.defaults.mjs +0 -17
  291. package/esm2022/lib/star/rating-input/rating-input.directives.mjs +0 -16
  292. package/esm2022/lib/star/rating-input/rating-input.module.mjs +0 -20
  293. package/esm2022/lib/star/rating-input/rating-input.types.mjs +0 -2
  294. package/esm2022/lib/star/star-button/index.mjs +0 -6
  295. package/esm2022/lib/star/star-button/star-button.component.mjs +0 -55
  296. package/esm2022/lib/star/star-button/star-button.defaults.mjs +0 -18
  297. package/esm2022/lib/star/star-button/star-button.directives.mjs +0 -16
  298. package/esm2022/lib/star/star-button/star-button.module.mjs +0 -20
  299. package/esm2022/lib/star/star-button/star-button.types.mjs +0 -2
  300. package/esm2022/lib/star/star.component.mjs +0 -36
  301. package/esm2022/lib/star/star.defaults.mjs +0 -15
  302. package/esm2022/lib/star/star.directives.mjs +0 -16
  303. package/esm2022/lib/star/star.module.mjs +0 -20
  304. package/esm2022/lib/star/star.types.mjs +0 -23
  305. package/esm2022/lib/statebox/index.mjs +0 -4
  306. package/esm2022/lib/statebox/statebox.component.mjs +0 -114
  307. package/esm2022/lib/statebox/statebox.defaults.mjs +0 -20
  308. package/esm2022/lib/statebox/statebox.module.mjs +0 -18
  309. package/esm2022/lib/statebox/statebox.types.mjs +0 -2
  310. package/esm2022/lib/tabber/index.mjs +0 -6
  311. package/esm2022/lib/tabber/tab/tab.component.mjs +0 -44
  312. package/esm2022/lib/tabber/tab/tab.defaults.mjs +0 -13
  313. package/esm2022/lib/tabber/tabber.component.mjs +0 -90
  314. package/esm2022/lib/tabber/tabber.defaults.mjs +0 -19
  315. package/esm2022/lib/tabber/tabber.module.mjs +0 -19
  316. package/esm2022/lib/table/index.mjs +0 -6
  317. package/esm2022/lib/table/table-item-storage.mjs +0 -564
  318. package/esm2022/lib/table/table.component.mjs +0 -367
  319. package/esm2022/lib/table/table.defaults.mjs +0 -53
  320. package/esm2022/lib/table/table.directives.mjs +0 -62
  321. package/esm2022/lib/table/table.module.mjs +0 -47
  322. package/esm2022/lib/table/table.types.mjs +0 -30
  323. package/esm2022/lib/table/utils.mjs +0 -18
  324. package/esm2022/lib/table-from-csv/index.mjs +0 -4
  325. package/esm2022/lib/table-from-csv/table-from-csv.component.mjs +0 -120
  326. package/esm2022/lib/table-from-csv/table-from-csv.defaults.mjs +0 -15
  327. package/esm2022/lib/table-from-csv/table-from-csv.module.mjs +0 -19
  328. package/esm2022/lib/table-pagination/index.mjs +0 -5
  329. package/esm2022/lib/table-pagination/table-pagination.component.mjs +0 -108
  330. package/esm2022/lib/table-pagination/table-pagination.defaults.mjs +0 -25
  331. package/esm2022/lib/table-pagination/table-pagination.module.mjs +0 -21
  332. package/esm2022/lib/table-pagination/table-pagination.types.mjs +0 -7
  333. package/esm2022/lib/text-list/index.mjs +0 -4
  334. package/esm2022/lib/text-list/text-list.component.mjs +0 -18
  335. package/esm2022/lib/text-list/text-list.module.mjs +0 -19
  336. package/esm2022/lib/text-list/text-list.pipe.mjs +0 -16
  337. package/esm2022/lib/types/alignment.types.mjs +0 -10
  338. package/esm2022/lib/types/button.types.mjs +0 -6
  339. package/esm2022/lib/types/colors.types.mjs +0 -43
  340. package/esm2022/lib/types/item-storage.types.mjs +0 -6
  341. package/esm2022/lib/types/theming.types.mjs +0 -48
  342. package/esm2022/lib/types/utility.types.mjs +0 -5
  343. package/esm2022/public-api.mjs +0 -74
  344. package/lib/inputs/simple-input/index.d.ts +0 -4
  345. package/lib/inputs/simple-input/simple-input.component.d.ts +0 -13
  346. package/lib/inputs/simple-input/simple-input.defaults.d.ts +0 -6
  347. package/lib/inputs/simple-input/simple-input.directives.d.ts +0 -20
  348. package/lib/inputs/simple-input/simple-input.module.d.ts +0 -11
  349. package/prebuilt-themes/default/inputs/simple-input.css.map +0 -1
  350. package/themes/default/inputs/simple-input.scss +0 -12
@@ -1,466 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, computed, contentChild, effect, forwardRef, HostListener, Inject, input, model, output, signal, ViewEncapsulation, } from '@angular/core';
2
- import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
- import { coerceBooleanProperty, coerceDateProperty, coerceNumberProperty } from '@ardium-ui/devkit';
4
- import { roundFromZero } from 'more-rounding';
5
- import { isDefined, isNull } from 'simple-bool';
6
- import { _FormFieldComponentBase } from '../_internal/form-field-component';
7
- import { ARD_FORM_FIELD_CONTROL } from '../form-field/form-field-child.token';
8
- import { ARD_CALENDAR_DEFAULTS } from './calendar.defaults';
9
- import { ArdCalendarDaysViewHeaderTemplateDirective, ArdCalendarDayTemplateDirective, ArdCalendarFloatingMonthTemplateDirective, ArdCalendarMonthsViewHeaderTemplateDirective, ArdCalendarMonthTemplateDirective, ArdCalendarWeekdayTemplateDirective, ArdCalendarYearsViewHeaderTemplateDirective, ArdCalendarYearTemplateDirective, } from './calendar.directives';
10
- import { _CalendarTemplateRepositoryDirective } from './calendar.internal-directives';
11
- import { ArdCalendarView } from './calendar.types';
12
- import { isDayOutOfRange } from './views/days-view/days-view.helpers';
13
- import { isMonthOutOfRange } from './views/months-view/months-view.helpers';
14
- import { isYearOutOfRange } from './views/years-view/years-view.helpers';
15
- import * as i0 from "@angular/core";
16
- import * as i1 from "@angular/common";
17
- import * as i2 from "./views/days-view/days-view.component";
18
- import * as i3 from "./views/months-view/months-view.component";
19
- import * as i4 from "./views/years-view/years-view.component";
20
- const TODAY = new Date();
21
- export class ArdiumCalendarComponent extends _FormFieldComponentBase {
22
- constructor(defaults) {
23
- super(defaults);
24
- //! appearance
25
- this.color = input(this._DEFAULTS.color);
26
- this.ngClasses = computed(() => [`ard-color-${this.color()}`].join(' '));
27
- //! active view
28
- this.activeView = model(this._DEFAULTS.activeView);
29
- this.activeYear = model(this._DEFAULTS.activeYear);
30
- this.activeMonth = model(this._DEFAULTS.activeMonth);
31
- this.firstWeekday = input(this._DEFAULTS.firstWeekday, {
32
- transform: v => {
33
- const value = coerceNumberProperty(v, this._DEFAULTS.firstWeekday);
34
- if (!Number.isInteger(value)) {
35
- console.error(new Error(`ARD-NF2001A: [firstWeekday] must be a positive integer, got "${value}". Using default value instead.`));
36
- return this._DEFAULTS.firstWeekday;
37
- }
38
- if (value < 0 || value > 6) {
39
- console.error(new Error(`ARD-NF2001B: [firstWeekday] must be between 0 and 6, got "${value}". Using modulo operator to adjust the value.`));
40
- }
41
- return value % 7;
42
- },
43
- });
44
- this.multipleYearPageChangeModifier = input(this._DEFAULTS.multipleYearPageChangeModifier, {
45
- transform: v => {
46
- const value = coerceNumberProperty(v, this._DEFAULTS.multipleYearPageChangeModifier);
47
- if (!Number.isInteger(value) || value < 1) {
48
- console.error(new Error(`ARD-NF2002: [multipleYearPageChangeModifier] must be a positive integer, got "${value}". Using default value instead.`));
49
- return this._DEFAULTS.multipleYearPageChangeModifier;
50
- }
51
- return value;
52
- },
53
- });
54
- this.autoFocus = input(this._DEFAULTS.autoFocus, { transform: v => coerceBooleanProperty(v) });
55
- //! value
56
- this.selectedDate = model(null, { alias: 'selected' });
57
- this.yearSelect = output();
58
- this.monthSelect = output();
59
- this.min = input(this._DEFAULTS.min, {
60
- transform: v => (v === null ? null : coerceDateProperty(v, this._DEFAULTS.min)),
61
- });
62
- this.max = input(this._DEFAULTS.max, {
63
- transform: v => (v === null ? null : coerceDateProperty(v, this._DEFAULTS.max)),
64
- });
65
- this.filter = input(this._DEFAULTS.filter);
66
- this.isDayFilteredOut = computed(() => {
67
- return (day, month = this.activeMonth(), year = this.activeYear()) => {
68
- const filter = this.filter();
69
- return filter?.(new Date(year, month, day)) ?? false;
70
- };
71
- });
72
- //! highlighting days
73
- this.__highlightedDay = signal(null);
74
- this.highlightedDay = this.__highlightedDay.asReadonly();
75
- //! highlighting months
76
- this.__highlightedMonth = signal(null);
77
- this.highlightedMonth = this.__highlightedMonth.asReadonly();
78
- //! highlighting years
79
- this.__highlightedYear = signal(null);
80
- this.highlightedYear = this.__highlightedYear.asReadonly();
81
- this.currentYearRangeStart = signal(TODAY.getFullYear() - (TODAY.getFullYear() % 4) - 8); // current year always in 3rd row
82
- //! internals
83
- this._isUsingKeyboard = signal(false);
84
- //! templates
85
- this.templateRepository = contentChild(_CalendarTemplateRepositoryDirective);
86
- this.yearsViewHeaderTemplate = contentChild(ArdCalendarYearsViewHeaderTemplateDirective);
87
- this.monthsViewHeaderTemplate = contentChild(ArdCalendarMonthsViewHeaderTemplateDirective);
88
- this.daysViewHeaderTemplate = contentChild(ArdCalendarDaysViewHeaderTemplateDirective);
89
- this.floatingMonthTemplate = contentChild(ArdCalendarFloatingMonthTemplateDirective);
90
- this.yearTemplate = contentChild(ArdCalendarYearTemplateDirective);
91
- this.monthTemplate = contentChild(ArdCalendarMonthTemplateDirective);
92
- this.dayTemplate = contentChild(ArdCalendarDayTemplateDirective);
93
- this.weekdayTemplate = contentChild(ArdCalendarWeekdayTemplateDirective);
94
- effect(() => {
95
- this.selectedDate(); // trigger effect
96
- this._emitChange();
97
- });
98
- }
99
- onTriggerOpenDaysView() {
100
- this.activeView.set(ArdCalendarView.Days);
101
- }
102
- onTriggerOpenMonthsView() {
103
- this.activeView.set(ArdCalendarView.Months);
104
- }
105
- onTriggerOpenYearsView() {
106
- this.activeView.set(ArdCalendarView.Years);
107
- }
108
- writeValue(v) {
109
- if (v instanceof Date) {
110
- this.selectedDate.set(v);
111
- }
112
- else if (!isDefined(v)) {
113
- this.selectedDate.set(null);
114
- }
115
- else {
116
- console.error(new Error(`ARD-NF2003: <ard-calendar> [writeValue] expected a Date or null, got "${v}".`));
117
- }
118
- }
119
- _emitChange() {
120
- this._onChangeRegistered?.(this.selectedDate());
121
- }
122
- //! selecting days
123
- isDaySelected(day) {
124
- if (day instanceof Date)
125
- day = day.getDate();
126
- return (this.selectedDate() !== null &&
127
- this.activeYear() === this.selectedDate()?.getFullYear() &&
128
- this.activeMonth() === this.selectedDate()?.getMonth() &&
129
- day === this.selectedDate()?.getDate());
130
- }
131
- isDayOutOfRange(day, month = this.activeMonth(), year = this.activeYear()) {
132
- return isDayOutOfRange(day, month, year, this.min(), this.max());
133
- }
134
- selectDay(day) {
135
- if (this.isDaySelected(day))
136
- return;
137
- if (isNull(day)) {
138
- if (!isDefined(this.selectedDate()))
139
- return;
140
- this.selectedDate.set(null);
141
- return;
142
- }
143
- if (day instanceof Date)
144
- day = day.getDate();
145
- if ((day && this.isDayOutOfRange(day)) || this.isDayFilteredOut()(day))
146
- return;
147
- this.selectedDate.set(new Date(this.activeYear(), this.activeMonth(), day, 0, 0, 0, 0));
148
- }
149
- selectCurrentlyHighlightedDay() {
150
- if (!isDefined(this.highlightedDay()))
151
- return;
152
- this.selectDay(this.highlightedDay());
153
- }
154
- setHighlightedDay(day, month = this.activeMonth(), year = this.activeYear()) {
155
- if (isNull(day)) {
156
- this.__highlightedDay.update(() => day);
157
- return;
158
- }
159
- const date = new Date(year, month, day);
160
- const outOfRange = this.isDayOutOfRange(day, month, year);
161
- if (outOfRange === -1) {
162
- this._highlightMinDay();
163
- return;
164
- }
165
- if (outOfRange === 1) {
166
- this._highlightMaxDay();
167
- return;
168
- }
169
- this.__highlightedDay.update(() => date.getDate());
170
- if (date.getFullYear() !== this.activeYear()) {
171
- this.activeYear.set(date.getFullYear());
172
- }
173
- if (date.getMonth() !== this.activeMonth()) {
174
- this.activeMonth.set(date.getMonth());
175
- }
176
- }
177
- _highlightMinDay() {
178
- const min = this.min();
179
- if (!isDefined(min))
180
- return;
181
- this.activeYear.set(min.getFullYear());
182
- this.activeMonth.set(min.getMonth());
183
- this.__highlightedDay.set(min.getDate());
184
- }
185
- _highlightMaxDay() {
186
- const max = this.max();
187
- if (!isDefined(max))
188
- return;
189
- this.activeYear.set(max.getFullYear());
190
- this.activeMonth.set(max.getMonth());
191
- this.__highlightedDay.set(max.getDate());
192
- }
193
- highlightNextDay(offset = 1) {
194
- const currentDay = this.highlightedDay();
195
- const newDay = isDefined(currentDay) ? currentDay + offset : 1;
196
- this.setHighlightedDay(newDay);
197
- }
198
- highlightPreviousDay(offset = 1) {
199
- this.highlightNextDay(offset * -1);
200
- }
201
- highlightFirstDay() {
202
- this.setHighlightedDay(1);
203
- }
204
- highlightLastDay() {
205
- const daysInMonth = new Date(this.activeYear(), this.activeMonth() + 1, 0).getDate();
206
- this.setHighlightedDay(daysInMonth);
207
- }
208
- highlightSameDayNextMonth() {
209
- const month = this.activeMonth();
210
- const year = this.activeYear();
211
- const newMonth = month + 1;
212
- const newYear = year + Math.floor(newMonth / 12);
213
- this.setHighlightedDay(this.highlightedDay(), newMonth % 12, newYear);
214
- }
215
- highlightSameDayPreviousMonth() {
216
- const month = this.activeMonth();
217
- const year = this.activeYear();
218
- const newMonth = month - 1;
219
- const newYear = year + Math.floor(newMonth / 12);
220
- this.setHighlightedDay(this.highlightedDay(), newMonth % 12, newYear);
221
- }
222
- highlightSameDayNextYear() {
223
- this.setHighlightedDay(this.highlightedDay(), this.activeMonth(), this.activeYear() + 1);
224
- }
225
- highlightSameDayPreviousYear() {
226
- this.setHighlightedDay(this.highlightedDay(), this.activeMonth(), this.activeYear() - 1);
227
- }
228
- //! selecting months
229
- isMonthSelected(month) {
230
- if (month instanceof Date)
231
- month = month.getMonth();
232
- return (this.selectedDate() !== null &&
233
- this.activeYear() === this.selectedDate()?.getFullYear() &&
234
- month === this.selectedDate()?.getMonth());
235
- }
236
- isMonthOutOfRange(month, year = this.activeYear()) {
237
- return isMonthOutOfRange(month, year, this.min(), this.max());
238
- }
239
- changeMonth(newMonth) {
240
- if (isNull(newMonth)) {
241
- this.activeMonth.set(TODAY.getMonth());
242
- return true;
243
- }
244
- if (this.isMonthOutOfRange(newMonth))
245
- return false;
246
- if (newMonth > 11) {
247
- this.activeMonth.set(0);
248
- this.activeYear.update(v => v + 1);
249
- }
250
- else if (newMonth < 0) {
251
- this.activeMonth.set(11);
252
- this.activeYear.update(v => v - 1);
253
- }
254
- else {
255
- this.activeMonth.set(newMonth);
256
- }
257
- return true;
258
- }
259
- selectMonth(newMonth) {
260
- if (isNull(newMonth) || this.isMonthOutOfRange(newMonth))
261
- return;
262
- const wasSuccessful = this.changeMonth(newMonth);
263
- if (!wasSuccessful)
264
- return;
265
- this.activeView.set(ArdCalendarView.Days);
266
- this.monthSelect.emit(newMonth);
267
- }
268
- selectCurrentlyHighlightedMonth() {
269
- if (!isDefined(this.highlightedMonth()))
270
- return;
271
- this.selectMonth(this.highlightedMonth());
272
- }
273
- setHighlightedMonth(month, year = this.activeYear()) {
274
- if (isNull(month)) {
275
- this.__highlightedMonth.update(() => month);
276
- return;
277
- }
278
- const date = new Date(year, month, 15);
279
- const outOfRange = this.isMonthOutOfRange(month, year);
280
- if (outOfRange === -1) {
281
- this._highlightMinMonth();
282
- return;
283
- }
284
- if (outOfRange === 1) {
285
- this._highlightMaxMonth();
286
- return;
287
- }
288
- this.__highlightedMonth.update(() => date.getMonth());
289
- if (date.getFullYear() !== this.activeYear()) {
290
- this.activeYear.set(date.getFullYear());
291
- }
292
- }
293
- _highlightMinMonth() {
294
- const min = this.min();
295
- if (!isDefined(min))
296
- return;
297
- this.activeYear.set(min.getFullYear());
298
- this.__highlightedMonth.set(min.getMonth());
299
- }
300
- _highlightMaxMonth() {
301
- const max = this.max();
302
- if (!isDefined(max))
303
- return;
304
- this.activeYear.set(max.getFullYear());
305
- this.__highlightedMonth.set(max.getMonth());
306
- }
307
- highlightNextMonth(offset = 1) {
308
- const currentMonth = this.highlightedMonth();
309
- const newMonth = isDefined(currentMonth) ? currentMonth + offset : 0;
310
- this.setHighlightedMonth(newMonth);
311
- }
312
- highlightPreviousMonth(offset = 1) {
313
- this.highlightNextMonth(offset * -1);
314
- }
315
- highlightFirstMonth() {
316
- this.setHighlightedMonth(0);
317
- }
318
- highlightLastMonth() {
319
- this.setHighlightedMonth(11);
320
- }
321
- highlightSameMonthNextYear(multiple) {
322
- this.setHighlightedMonth(this.highlightedMonth(), this.activeYear() + (multiple ? 10 : 1));
323
- }
324
- highlightSameMonthPreviousYear(multiple) {
325
- this.setHighlightedMonth(this.highlightedMonth(), this.activeYear() - (multiple ? 10 : 1));
326
- }
327
- //! selecting years
328
- isYearSelected(year) {
329
- if (year instanceof Date)
330
- year = year.getFullYear();
331
- return this.selectedDate() !== null && year === this.selectedDate()?.getFullYear();
332
- }
333
- isYearOutOfRange(year) {
334
- return isYearOutOfRange(year, this.min(), this.max());
335
- }
336
- changeYear(year) {
337
- if (isNull(year)) {
338
- this.activeYear.set(TODAY.getFullYear());
339
- return true;
340
- }
341
- if (this.isYearOutOfRange(year))
342
- return false;
343
- this.activeYear.set(year);
344
- return true;
345
- }
346
- selectYear(year) {
347
- if (isNull(year))
348
- return;
349
- if (year instanceof Date)
350
- year = year.getFullYear();
351
- const wasSuccessful = this.changeYear(year);
352
- if (!wasSuccessful)
353
- return;
354
- this.activeView.set(ArdCalendarView.Months);
355
- this.yearSelect.emit(year);
356
- }
357
- selectCurrentlyHighlightedYear() {
358
- if (!isDefined(this.highlightedYear()))
359
- return;
360
- this.selectYear(this.highlightedYear());
361
- }
362
- setHighlightedYear(year) {
363
- if (isNull(year)) {
364
- this.__highlightedYear.update(() => year);
365
- return;
366
- }
367
- const date = new Date(year, 0);
368
- const outOfRange = this.isYearOutOfRange(year);
369
- if (outOfRange === -1) {
370
- this._highlightMinYear();
371
- return;
372
- }
373
- if (outOfRange === 1) {
374
- this._highlightMaxYear();
375
- return;
376
- }
377
- const newYear = date.getFullYear();
378
- this.__highlightedYear.update(() => newYear);
379
- if (newYear < this.currentYearRangeStart() || newYear >= this.currentYearRangeStart() + 24) {
380
- // round the offset away from zero: 0.1 -> 1, -0.1 -> -1
381
- // this is to ensure the range start is always shifted by 24 years
382
- const offset = roundFromZero((newYear - this.currentYearRangeStart()) / 24);
383
- this.currentYearRangeStart.update(v => v + offset * 24);
384
- }
385
- }
386
- changeYearsViewPage(offset) {
387
- const newYearRangeStart = this.currentYearRangeStart() + offset * 24;
388
- this.currentYearRangeStart.set(newYearRangeStart);
389
- }
390
- _highlightMinYear() {
391
- const min = this.min();
392
- if (!isDefined(min))
393
- return;
394
- this.__highlightedYear.set(min.getFullYear());
395
- }
396
- _highlightMaxYear() {
397
- const max = this.max();
398
- if (!isDefined(max))
399
- return;
400
- this.__highlightedYear.set(max.getFullYear());
401
- }
402
- highlightNextYear(offset = 1) {
403
- const currentYear = this.highlightedYear();
404
- const newYear = isDefined(currentYear) ? currentYear + offset : null;
405
- this.setHighlightedYear(newYear);
406
- }
407
- highlightPreviousYear(offset = 1) {
408
- this.highlightNextYear(offset * -1);
409
- }
410
- highlightFirstYear() {
411
- this.setHighlightedYear(this.currentYearRangeStart());
412
- }
413
- highlightLastYear() {
414
- this.setHighlightedYear(this.currentYearRangeStart() + 23); // 24 years per page
415
- }
416
- highlightSameYearNextPage(multiple) {
417
- const year = this.highlightedYear() ?? this.currentYearRangeStart();
418
- this.setHighlightedYear(year + (multiple ? 60 : 24));
419
- }
420
- highlightSameYearPreviousPage(multiple) {
421
- const year = this.highlightedYear() ?? this.currentYearRangeStart();
422
- this.setHighlightedYear(year - (multiple ? 60 : 24));
423
- }
424
- onDocumentMousemove() {
425
- this._isUsingKeyboard.set(false);
426
- }
427
- onDocumentKeydown() {
428
- this._isUsingKeyboard.set(true);
429
- }
430
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumCalendarComponent, deps: [{ token: ARD_CALENDAR_DEFAULTS }], target: i0.ɵɵFactoryTarget.Component }); }
431
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ArdiumCalendarComponent, selector: "ard-calendar", inputs: { color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, activeView: { classPropertyName: "activeView", publicName: "activeView", isSignal: true, isRequired: false, transformFunction: null }, activeYear: { classPropertyName: "activeYear", publicName: "activeYear", isSignal: true, isRequired: false, transformFunction: null }, activeMonth: { classPropertyName: "activeMonth", publicName: "activeMonth", isSignal: true, isRequired: false, transformFunction: null }, firstWeekday: { classPropertyName: "firstWeekday", publicName: "firstWeekday", isSignal: true, isRequired: false, transformFunction: null }, multipleYearPageChangeModifier: { classPropertyName: "multipleYearPageChangeModifier", publicName: "multipleYearPageChangeModifier", isSignal: true, isRequired: false, transformFunction: null }, autoFocus: { classPropertyName: "autoFocus", publicName: "autoFocus", isSignal: true, isRequired: false, transformFunction: null }, selectedDate: { classPropertyName: "selectedDate", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: true, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: true, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { activeView: "activeViewChange", activeYear: "activeYearChange", activeMonth: "activeMonthChange", selectedDate: "selectedChange", yearSelect: "yearSelect", monthSelect: "monthSelect" }, host: { listeners: { "document:mousemove": "onDocumentMousemove()", "document:keydown": "onDocumentKeydown()" } }, providers: [
432
- {
433
- provide: NG_VALUE_ACCESSOR,
434
- useExisting: forwardRef(() => ArdiumCalendarComponent),
435
- multi: true,
436
- },
437
- {
438
- provide: ARD_FORM_FIELD_CONTROL,
439
- useExisting: ArdiumCalendarComponent,
440
- },
441
- ], queries: [{ propertyName: "templateRepository", first: true, predicate: _CalendarTemplateRepositoryDirective, descendants: true, isSignal: true }, { propertyName: "yearsViewHeaderTemplate", first: true, predicate: ArdCalendarYearsViewHeaderTemplateDirective, descendants: true, isSignal: true }, { propertyName: "monthsViewHeaderTemplate", first: true, predicate: ArdCalendarMonthsViewHeaderTemplateDirective, descendants: true, isSignal: true }, { propertyName: "daysViewHeaderTemplate", first: true, predicate: ArdCalendarDaysViewHeaderTemplateDirective, descendants: true, isSignal: true }, { propertyName: "floatingMonthTemplate", first: true, predicate: ArdCalendarFloatingMonthTemplateDirective, descendants: true, isSignal: true }, { propertyName: "yearTemplate", first: true, predicate: ArdCalendarYearTemplateDirective, descendants: true, isSignal: true }, { propertyName: "monthTemplate", first: true, predicate: ArdCalendarMonthTemplateDirective, descendants: true, isSignal: true }, { propertyName: "dayTemplate", first: true, predicate: ArdCalendarDayTemplateDirective, descendants: true, isSignal: true }, { propertyName: "weekdayTemplate", first: true, predicate: ArdCalendarWeekdayTemplateDirective, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div\r\n class=\"ard-calendar\"\r\n [ngClass]=\"ngClasses()\"\r\n>\r\n @switch (activeView()) {\r\n @case ('days') {\r\n <ard-days-view\r\n [tabIndex]=\"tabIndex()\"\r\n [readOnly]=\"readonly()\"\r\n [disabled]=\"disabled()\"\r\n [autoFocus]=\"autoFocus()\"\r\n [_isUsingKeyboard]=\"_isUsingKeyboard()\"\r\n [activeMonth]=\"activeMonth()\"\r\n [activeYear]=\"activeYear()\"\r\n [selectedDate]=\"selectedDate()\"\r\n [firstWeekday]=\"firstWeekday()\"\r\n [highlightedDay]=\"highlightedDay()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [isDayFilteredOut]=\"isDayFilteredOut()\"\r\n [daysViewHeaderTemplate]=\"daysViewHeaderTemplate()?.template ?? templateRepository()?.daysViewHeaderTmp()?.template\"\r\n [floatingMonthTemplate]=\"floatingMonthTemplate()?.template ?? templateRepository()?.floatingMonthTmp()?.template\"\r\n [weekdayTemplate]=\"weekdayTemplate()?.template ?? templateRepository()?.weekdayTmp()?.template\"\r\n [dayTemplate]=\"dayTemplate()?.template ?? templateRepository()?.dayTmp()?.template\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (triggerOpenMonthsView)=\"onTriggerOpenMonthsView()\"\r\n (triggerOpenYearsView)=\"onTriggerOpenYearsView()\"\r\n (triggerChangeMonth)=\"changeMonth($event)\"\r\n (triggerChangeYear)=\"changeYear($event)\"\r\n (triggerHighlightDay)=\"setHighlightedDay($event)\"\r\n (triggerHighlightFirstDay)=\"highlightFirstDay()\"\r\n (triggerHighlightLastDay)=\"highlightLastDay()\"\r\n (triggerHighlightNextDay)=\"highlightNextDay($event)\"\r\n (triggerHighlightPreviousDay)=\"highlightPreviousDay($event)\"\r\n (triggerHighlightSameDayNextPage)=\"$event ? highlightSameDayNextYear() : highlightSameDayNextMonth()\"\r\n (triggerHighlightSameDayPreviousPage)=\"$event ? highlightSameDayPreviousYear() : highlightSameDayPreviousMonth()\"\r\n (triggerSelectDay)=\"selectDay($event)\"\r\n />\r\n }\r\n @case ('months') {\r\n <ard-months-view\r\n [tabIndex]=\"tabIndex()\"\r\n [readOnly]=\"readonly()\"\r\n [disabled]=\"disabled()\"\r\n [autoFocus]=\"autoFocus()\"\r\n [_isUsingKeyboard]=\"_isUsingKeyboard()\"\r\n [color]=\"color()\"\r\n [activeMonth]=\"activeMonth()\"\r\n [activeYear]=\"activeYear()\"\r\n [selectedDate]=\"selectedDate()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [highlightedMonth]=\"highlightedMonth()\"\r\n [monthsViewHeaderTemplate]=\"monthsViewHeaderTemplate()?.template ?? templateRepository()?.monthsViewHeaderTmp()?.template\"\r\n [monthTemplate]=\"monthTemplate()?.template ?? templateRepository()?.monthTmp()?.template\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (triggerOpenDaysView)=\"onTriggerOpenDaysView()\"\r\n (triggerOpenYearsView)=\"onTriggerOpenYearsView()\"\r\n (triggeChangeYear)=\"changeYear($event)\"\r\n (triggerSelectMonth)=\"selectMonth($event)\"\r\n (triggerHighlightMonth)=\"setHighlightedMonth($event)\"\r\n (triggerHighlightFirstMonth)=\"highlightFirstMonth()\"\r\n (triggerHighlightLastMonth)=\"highlightLastMonth()\"\r\n (triggerHighlightNextMonth)=\"highlightNextMonth($event)\"\r\n (triggerHighlightPreviousMonth)=\"highlightPreviousMonth($event)\"\r\n (triggerHighlightSameMonthNextPage)=\"highlightSameMonthNextYear($event)\"\r\n (triggerHighlightSameMonthPreviousPage)=\"highlightSameMonthPreviousYear($event)\"\r\n />\r\n }\r\n @case ('years') {\r\n <ard-years-view\r\n [tabIndex]=\"tabIndex()\"\r\n [readOnly]=\"readonly()\"\r\n [disabled]=\"disabled()\"\r\n [autoFocus]=\"autoFocus()\"\r\n [_isUsingKeyboard]=\"_isUsingKeyboard()\"\r\n [highlightedYear]=\"highlightedYear()\"\r\n [currentYearRangeStart]=\"currentYearRangeStart()\"\r\n [activeYear]=\"activeYear()\"\r\n [selectedDate]=\"selectedDate()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [yearsViewHeaderTemplate]=\"yearsViewHeaderTemplate()?.template ?? templateRepository()?.yearsViewHeaderTmp()?.template\"\r\n [yearTemplate]=\"yearTemplate()?.template ?? templateRepository()?.yearTmp()?.template\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (triggerOpenDaysView)=\"onTriggerOpenDaysView()\"\r\n (triggerOpenMonthsView)=\"onTriggerOpenMonthsView()\"\r\n (triggerSelectYear)=\"selectYear($event)\"\r\n (triggerChangeYearsViewPage)=\"changeYearsViewPage($event)\"\r\n (triggerHighlightYear)=\"setHighlightedYear($event)\"\r\n (triggerHighlightFirstYear)=\"highlightFirstYear()\"\r\n (triggerHighlightLastYear)=\"highlightLastYear()\"\r\n (triggerHighlightNextYear)=\"highlightNextYear($event)\"\r\n (triggerHighlightPreviousYear)=\"highlightPreviousYear($event)\"\r\n (triggerHighlightSameYearNextPage)=\"highlightSameYearNextPage($event)\"\r\n (triggerHighlightSameYearPreviousPage)=\"highlightSameYearPreviousPage($event)\"\r\n />\r\n }\r\n }\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.DaysViewComponent, selector: "ard-days-view", inputs: ["tabIndex", "readOnly", "disabled", "autoFocus", "_isUsingKeyboard", "activeYear", "activeMonth", "selectedDate", "min", "max", "isDayFilteredOut", "highlightedDay", "firstWeekday", "daysViewHeaderTemplate", "floatingMonthTemplate", "weekdayTemplate", "dayTemplate"], outputs: ["triggerOpenYearsView", "triggerOpenMonthsView", "triggerSelectDay", "triggerChangeMonth", "triggerChangeYear", "triggerHighlightDay", "triggerHighlightNextDay", "triggerHighlightPreviousDay", "triggerHighlightFirstDay", "triggerHighlightLastDay", "triggerHighlightSameDayPreviousPage", "triggerHighlightSameDayNextPage", "focus", "blur"] }, { kind: "component", type: i3.MonthsViewComponent, selector: "ard-months-view", inputs: ["tabIndex", "readOnly", "disabled", "autoFocus", "_isUsingKeyboard", "color", "activeYear", "activeMonth", "selectedDate", "min", "max", "highlightedMonth", "monthsViewHeaderTemplate", "monthTemplate"], outputs: ["triggerOpenYearsView", "triggerOpenDaysView", "focus", "blur", "triggerSelectMonth", "triggeChangeYear", "triggerHighlightMonth", "triggerHighlightNextMonth", "triggerHighlightPreviousMonth", "triggerHighlightFirstMonth", "triggerHighlightLastMonth", "triggerHighlightSameMonthPreviousPage", "triggerHighlightSameMonthNextPage"] }, { kind: "component", type: i4.YearsViewComponent, selector: "ard-years-view", inputs: ["tabIndex", "readOnly", "disabled", "autoFocus", "_isUsingKeyboard", "activeYear", "selectedDate", "min", "max", "currentYearRangeStart", "highlightedYear", "yearsViewHeaderTemplate", "yearTemplate"], outputs: ["triggerOpenMonthsView", "triggerOpenDaysView", "focus", "blur", "triggerSelectYear", "triggerChangeYearsViewPage", "triggerHighlightYear", "triggerHighlightNextYear", "triggerHighlightPreviousYear", "triggerHighlightFirstYear", "triggerHighlightLastYear", "triggerHighlightSameYearPreviousPage", "triggerHighlightSameYearNextPage"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
442
- }
443
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ArdiumCalendarComponent, decorators: [{
444
- type: Component,
445
- args: [{ selector: 'ard-calendar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
446
- {
447
- provide: NG_VALUE_ACCESSOR,
448
- useExisting: forwardRef(() => ArdiumCalendarComponent),
449
- multi: true,
450
- },
451
- {
452
- provide: ARD_FORM_FIELD_CONTROL,
453
- useExisting: ArdiumCalendarComponent,
454
- },
455
- ], template: "<div\r\n class=\"ard-calendar\"\r\n [ngClass]=\"ngClasses()\"\r\n>\r\n @switch (activeView()) {\r\n @case ('days') {\r\n <ard-days-view\r\n [tabIndex]=\"tabIndex()\"\r\n [readOnly]=\"readonly()\"\r\n [disabled]=\"disabled()\"\r\n [autoFocus]=\"autoFocus()\"\r\n [_isUsingKeyboard]=\"_isUsingKeyboard()\"\r\n [activeMonth]=\"activeMonth()\"\r\n [activeYear]=\"activeYear()\"\r\n [selectedDate]=\"selectedDate()\"\r\n [firstWeekday]=\"firstWeekday()\"\r\n [highlightedDay]=\"highlightedDay()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [isDayFilteredOut]=\"isDayFilteredOut()\"\r\n [daysViewHeaderTemplate]=\"daysViewHeaderTemplate()?.template ?? templateRepository()?.daysViewHeaderTmp()?.template\"\r\n [floatingMonthTemplate]=\"floatingMonthTemplate()?.template ?? templateRepository()?.floatingMonthTmp()?.template\"\r\n [weekdayTemplate]=\"weekdayTemplate()?.template ?? templateRepository()?.weekdayTmp()?.template\"\r\n [dayTemplate]=\"dayTemplate()?.template ?? templateRepository()?.dayTmp()?.template\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (triggerOpenMonthsView)=\"onTriggerOpenMonthsView()\"\r\n (triggerOpenYearsView)=\"onTriggerOpenYearsView()\"\r\n (triggerChangeMonth)=\"changeMonth($event)\"\r\n (triggerChangeYear)=\"changeYear($event)\"\r\n (triggerHighlightDay)=\"setHighlightedDay($event)\"\r\n (triggerHighlightFirstDay)=\"highlightFirstDay()\"\r\n (triggerHighlightLastDay)=\"highlightLastDay()\"\r\n (triggerHighlightNextDay)=\"highlightNextDay($event)\"\r\n (triggerHighlightPreviousDay)=\"highlightPreviousDay($event)\"\r\n (triggerHighlightSameDayNextPage)=\"$event ? highlightSameDayNextYear() : highlightSameDayNextMonth()\"\r\n (triggerHighlightSameDayPreviousPage)=\"$event ? highlightSameDayPreviousYear() : highlightSameDayPreviousMonth()\"\r\n (triggerSelectDay)=\"selectDay($event)\"\r\n />\r\n }\r\n @case ('months') {\r\n <ard-months-view\r\n [tabIndex]=\"tabIndex()\"\r\n [readOnly]=\"readonly()\"\r\n [disabled]=\"disabled()\"\r\n [autoFocus]=\"autoFocus()\"\r\n [_isUsingKeyboard]=\"_isUsingKeyboard()\"\r\n [color]=\"color()\"\r\n [activeMonth]=\"activeMonth()\"\r\n [activeYear]=\"activeYear()\"\r\n [selectedDate]=\"selectedDate()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [highlightedMonth]=\"highlightedMonth()\"\r\n [monthsViewHeaderTemplate]=\"monthsViewHeaderTemplate()?.template ?? templateRepository()?.monthsViewHeaderTmp()?.template\"\r\n [monthTemplate]=\"monthTemplate()?.template ?? templateRepository()?.monthTmp()?.template\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (triggerOpenDaysView)=\"onTriggerOpenDaysView()\"\r\n (triggerOpenYearsView)=\"onTriggerOpenYearsView()\"\r\n (triggeChangeYear)=\"changeYear($event)\"\r\n (triggerSelectMonth)=\"selectMonth($event)\"\r\n (triggerHighlightMonth)=\"setHighlightedMonth($event)\"\r\n (triggerHighlightFirstMonth)=\"highlightFirstMonth()\"\r\n (triggerHighlightLastMonth)=\"highlightLastMonth()\"\r\n (triggerHighlightNextMonth)=\"highlightNextMonth($event)\"\r\n (triggerHighlightPreviousMonth)=\"highlightPreviousMonth($event)\"\r\n (triggerHighlightSameMonthNextPage)=\"highlightSameMonthNextYear($event)\"\r\n (triggerHighlightSameMonthPreviousPage)=\"highlightSameMonthPreviousYear($event)\"\r\n />\r\n }\r\n @case ('years') {\r\n <ard-years-view\r\n [tabIndex]=\"tabIndex()\"\r\n [readOnly]=\"readonly()\"\r\n [disabled]=\"disabled()\"\r\n [autoFocus]=\"autoFocus()\"\r\n [_isUsingKeyboard]=\"_isUsingKeyboard()\"\r\n [highlightedYear]=\"highlightedYear()\"\r\n [currentYearRangeStart]=\"currentYearRangeStart()\"\r\n [activeYear]=\"activeYear()\"\r\n [selectedDate]=\"selectedDate()\"\r\n [min]=\"min()\"\r\n [max]=\"max()\"\r\n [yearsViewHeaderTemplate]=\"yearsViewHeaderTemplate()?.template ?? templateRepository()?.yearsViewHeaderTmp()?.template\"\r\n [yearTemplate]=\"yearTemplate()?.template ?? templateRepository()?.yearTmp()?.template\"\r\n (focus)=\"onFocus($event)\"\r\n (blur)=\"onBlur($event)\"\r\n (triggerOpenDaysView)=\"onTriggerOpenDaysView()\"\r\n (triggerOpenMonthsView)=\"onTriggerOpenMonthsView()\"\r\n (triggerSelectYear)=\"selectYear($event)\"\r\n (triggerChangeYearsViewPage)=\"changeYearsViewPage($event)\"\r\n (triggerHighlightYear)=\"setHighlightedYear($event)\"\r\n (triggerHighlightFirstYear)=\"highlightFirstYear()\"\r\n (triggerHighlightLastYear)=\"highlightLastYear()\"\r\n (triggerHighlightNextYear)=\"highlightNextYear($event)\"\r\n (triggerHighlightPreviousYear)=\"highlightPreviousYear($event)\"\r\n (triggerHighlightSameYearNextPage)=\"highlightSameYearNextPage($event)\"\r\n (triggerHighlightSameYearPreviousPage)=\"highlightSameYearPreviousPage($event)\"\r\n />\r\n }\r\n }\r\n</div>\r\n" }]
456
- }], ctorParameters: () => [{ type: undefined, decorators: [{
457
- type: Inject,
458
- args: [ARD_CALENDAR_DEFAULTS]
459
- }] }], propDecorators: { onDocumentMousemove: [{
460
- type: HostListener,
461
- args: ['document:mousemove']
462
- }], onDocumentKeydown: [{
463
- type: HostListener,
464
- args: ['document:keydown']
465
- }] } });
466
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixZQUFZLEVBQ1osTUFBTSxFQUNOLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLGtCQUFrQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUU5RSxPQUFPLEVBQUUscUJBQXFCLEVBQXVCLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUNMLDBDQUEwQyxFQUMxQywrQkFBK0IsRUFDL0IseUNBQXlDLEVBQ3pDLDRDQUE0QyxFQUM1QyxpQ0FBaUMsRUFDakMsbUNBQW1DLEVBQ25DLDJDQUEyQyxFQUMzQyxnQ0FBZ0MsR0FDakMsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsb0NBQW9D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QUFFLENBQUM7WUFDMUIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLFVBQVUsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFdEQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDMUMsQ0FBQztJQUNILENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTztRQUU1QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDTyxrQkFBa0I7UUFDeEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO1lBQUUsT0FBTztRQUU1QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQztRQUMzQixNQUFNLFlBQVks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QUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDO2dCQUN0RCxLQUFLLEVBQUUsSUFBSTthQUNaO1lBQ0Q7Z0JBQ0UsT0FBTyxFQUFFLHNCQUFzQjtnQkFDL0IsV0FBVyxFQUFFLHVCQUF1QjthQUNyQztTQUNGLDBFQXdjMEMsb0NBQW9DLDBHQUUvQiwyQ0FBMkMsMkdBQzFDLDRDQUE0Qyx5R0FDOUMsMENBQTBDLHdHQUMzQyx5Q0FBeUMsK0ZBQ2xELGdDQUFnQyxnR0FDL0IsaUNBQWlDLDhGQUNuQywrQkFBK0Isa0dBQzNCLG1DQUFtQyx1RkMxZ0I3RSx1dEtBdUdBOzs0RkQ1Q2EsdUJBQXVCO2tCQWxCbkMsU0FBUzsrQkFDRSxjQUFjLGlCQUdULGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsd0JBQXdCLENBQUM7NEJBQ3RELEtBQUssRUFBRSxJQUFJO3lCQUNaO3dCQUNEOzRCQUNFLE9BQU8sRUFBRSxzQkFBc0I7NEJBQy9CLFdBQVcseUJBQXlCO3lCQUNyQztxQkFDRjs7MEJBSVksTUFBTTsyQkFBQyxxQkFBcUI7eUNBMmJ6QyxtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsb0JBQW9CO2dCQUtsQyxpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgY29tcHV0ZWQsXHJcbiAgY29udGVudENoaWxkLFxyXG4gIGVmZmVjdCxcclxuICBmb3J3YXJkUmVmLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbmplY3QsXHJcbiAgaW5wdXQsXHJcbiAgbW9kZWwsXHJcbiAgb3V0cHV0LFxyXG4gIHNpZ25hbCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlRGF0ZVByb3BlcnR5LCBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0BhcmRpdW0tdWkvZGV2a2l0JztcclxuaW1wb3J0IHsgcm91bmRGcm9tWmVybyB9IGZyb20gJ21vcmUtcm91bmRpbmcnO1xyXG5pbXBvcnQgeyBpc0RlZmluZWQsIGlzTnVsbCB9IGZyb20gJ3NpbXBsZS1ib29sJztcclxuaW1wb3J0IHsgX0Zvcm1GaWVsZENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi9faW50ZXJuYWwvZm9ybS1maWVsZC1jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBUkRfRk9STV9GSUVMRF9DT05UUk9MIH0gZnJvbSAnLi4vZm9ybS1maWVsZC9mb3JtLWZpZWxkLWNoaWxkLnRva2VuJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29sb3IgfSBmcm9tICcuLi90eXBlcy9jb2xvcnMudHlwZXMnO1xyXG5pbXBvcnQgeyBBUkRfQ0FMRU5EQVJfREVGQVVMVFMsIEFyZENhbGVuZGFyRGVmYXVsdHMgfSBmcm9tICcuL2NhbGVuZGFyLmRlZmF1bHRzJztcclxuaW1wb3J0IHtcclxuICBBcmRDYWxlbmRhckRheXNWaWV3SGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUsXHJcbiAgQXJkQ2FsZW5kYXJEYXlUZW1wbGF0ZURpcmVjdGl2ZSxcclxuICBBcmRDYWxlbmRhckZsb2F0aW5nTW9udGhUZW1wbGF0ZURpcmVjdGl2ZSxcclxuICBBcmRDYWxlbmRhck1vbnRoc1ZpZXdIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxcclxuICBBcmRDYWxlbmRhck1vbnRoVGVtcGxhdGVEaXJlY3RpdmUsXHJcbiAgQXJkQ2FsZW5kYXJXZWVrZGF5VGVtcGxhdGVEaXJlY3RpdmUsXHJcbiAgQXJkQ2FsZW5kYXJZZWFyc1ZpZXdIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxcclxuICBBcmRDYWxlbmRhclllYXJUZW1wbGF0ZURpcmVjdGl2ZSxcclxufSBmcm9tICcuL2NhbGVuZGFyLmRpcmVjdGl2ZXMnO1xyXG5pbXBvcnQgeyBfQ2FsZW5kYXJUZW1wbGF0ZVJlcG9zaXRvcnlEaXJlY3RpdmUgfSBmcm9tICcuL2NhbGVuZGFyLmludGVybmFsLWRpcmVjdGl2ZXMnO1xyXG5pbXBvcnQgeyBBcmRDYWxlbmRhckZpbHRlckZuLCBBcmRDYWxlbmRhclZpZXcgfSBmcm9tICcuL2NhbGVuZGFyLnR5cGVzJztcclxuaW1wb3J0IHsgaXNEYXlPdXRPZlJhbmdlIH0gZnJvbSAnLi92aWV3cy9kYXlzLXZpZXcvZGF5cy12aWV3LmhlbHBlcnMnO1xyXG5pbXBvcnQgeyBpc01vbnRoT3V0T2ZSYW5nZSB9IGZyb20gJy4vdmlld3MvbW9udGhzLXZpZXcvbW9udGhzLXZpZXcuaGVscGVycyc7XHJcbmltcG9ydCB7IGlzWWVhck91dE9mUmFuZ2UgfSBmcm9tICcuL3ZpZXdzL3llYXJzLXZpZXcveWVhcnMtdmlldy5oZWxwZXJzJztcclxuXHJcbmNvbnN0IFRPREFZID0gbmV3IERhdGUoKTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXJkLWNhbGVuZGFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEFyZGl1bUNhbGVuZGFyQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBBUkRfRk9STV9GSUVMRF9DT05UUk9MLFxyXG4gICAgICB1c2VFeGlzdGluZzogQXJkaXVtQ2FsZW5kYXJDb21wb25lbnQsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBcmRpdW1DYWxlbmRhckNvbXBvbmVudCBleHRlbmRzIF9Gb3JtRmllbGRDb21wb25lbnRCYXNlIHtcclxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVhZG9ubHkgX0RFRkFVTFRTITogQXJkQ2FsZW5kYXJEZWZhdWx0cztcclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KEFSRF9DQUxFTkRBUl9ERUZBVUxUUykgZGVmYXVsdHM6IEFyZENhbGVuZGFyRGVmYXVsdHMpIHtcclxuICAgIHN1cGVyKGRlZmF1bHRzKTtcclxuXHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZSgpOyAvLyB0cmlnZ2VyIGVmZmVjdFxyXG4gICAgICB0aGlzLl9lbWl0Q2hhbmdlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vISBhcHBlYXJhbmNlXHJcbiAgcmVhZG9ubHkgY29sb3IgPSBpbnB1dDxDb21wb25lbnRDb2xvcj4odGhpcy5fREVGQVVMVFMuY29sb3IpO1xyXG5cclxuICByZWFkb25seSBuZ0NsYXNzZXMgPSBjb21wdXRlZCgoKTogc3RyaW5nID0+IFtgYXJkLWNvbG9yLSR7dGhpcy5jb2xvcigpfWBdLmpvaW4oJyAnKSk7XHJcblxyXG4gIC8vISBhY3RpdmUgdmlld1xyXG4gIHJlYWRvbmx5IGFjdGl2ZVZpZXcgPSBtb2RlbDxBcmRDYWxlbmRhclZpZXc+KHRoaXMuX0RFRkFVTFRTLmFjdGl2ZVZpZXcpO1xyXG4gIHJlYWRvbmx5IGFjdGl2ZVllYXIgPSBtb2RlbDxudW1iZXI+KHRoaXMuX0RFRkFVTFRTLmFjdGl2ZVllYXIpO1xyXG4gIHJlYWRvbmx5IGFjdGl2ZU1vbnRoID0gbW9kZWw8bnVtYmVyPih0aGlzLl9ERUZBVUxUUy5hY3RpdmVNb250aCk7XHJcblxyXG4gIHJlYWRvbmx5IGZpcnN0V2Vla2RheSA9IGlucHV0PG51bWJlciwgYW55Pih0aGlzLl9ERUZBVUxUUy5maXJzdFdlZWtkYXksIHtcclxuICAgIHRyYW5zZm9ybTogdiA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodiwgdGhpcy5fREVGQVVMVFMuZmlyc3RXZWVrZGF5KTtcclxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSkge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICBuZXcgRXJyb3IoYEFSRC1ORjIwMDFBOiBbZmlyc3RXZWVrZGF5XSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciwgZ290IFwiJHt2YWx1ZX1cIi4gVXNpbmcgZGVmYXVsdCB2YWx1ZSBpbnN0ZWFkLmApXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fREVGQVVMVFMuZmlyc3RXZWVrZGF5O1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiA2KSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgIG5ldyBFcnJvcihcclxuICAgICAgICAgICAgYEFSRC1ORjIwMDFCOiBbZmlyc3RXZWVrZGF5XSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgNiwgZ290IFwiJHt2YWx1ZX1cIi4gVXNpbmcgbW9kdWxvIG9wZXJhdG9yIHRvIGFkanVzdCB0aGUgdmFsdWUuYFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHZhbHVlICUgNztcclxuICAgIH0sXHJcbiAgfSk7XHJcblxyXG4gIHJlYWRvbmx5IG11bHRpcGxlWWVhclBhZ2VDaGFuZ2VNb2RpZmllciA9IGlucHV0PG51bWJlciwgYW55Pih0aGlzLl9ERUZBVUxUUy5tdWx0aXBsZVllYXJQYWdlQ2hhbmdlTW9kaWZpZXIsIHtcclxuICAgIHRyYW5zZm9ybTogdiA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodiwgdGhpcy5fREVGQVVMVFMubXVsdGlwbGVZZWFyUGFnZUNoYW5nZU1vZGlmaWVyKTtcclxuICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA8IDEpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgbmV3IEVycm9yKFxyXG4gICAgICAgICAgICBgQVJELU5GMjAwMjogW211bHRpcGxlWWVhclBhZ2VDaGFuZ2VNb2RpZmllcl0gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIsIGdvdCBcIiR7dmFsdWV9XCIuIFVzaW5nIGRlZmF1bHQgdmFsdWUgaW5zdGVhZC5gXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fREVGQVVMVFMubXVsdGlwbGVZZWFyUGFnZUNoYW5nZU1vZGlmaWVyO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH0sXHJcbiAgfSk7XHJcblxyXG4gIHJlYWRvbmx5IGF1dG9Gb2N1cyA9IGlucHV0PGJvb2xlYW4sIGFueT4odGhpcy5fREVGQVVMVFMuYXV0b0ZvY3VzLCB7IHRyYW5zZm9ybTogdiA9PiBjb2VyY2VCb29sZWFuUHJvcGVydHkodikgfSk7XHJcblxyXG4gIG9uVHJpZ2dlck9wZW5EYXlzVmlldygpOiB2b2lkIHtcclxuICAgIHRoaXMuYWN0aXZlVmlldy5zZXQoQXJkQ2FsZW5kYXJWaWV3LkRheXMpO1xyXG4gIH1cclxuICBvblRyaWdnZXJPcGVuTW9udGhzVmlldygpOiB2b2lkIHtcclxuICAgIHRoaXMuYWN0aXZlVmlldy5zZXQoQXJkQ2FsZW5kYXJWaWV3Lk1vbnRocyk7XHJcbiAgfVxyXG4gIG9uVHJpZ2dlck9wZW5ZZWFyc1ZpZXcoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFjdGl2ZVZpZXcuc2V0KEFyZENhbGVuZGFyVmlldy5ZZWFycyk7XHJcbiAgfVxyXG5cclxuICAvLyEgdmFsdWVcclxuICByZWFkb25seSBzZWxlY3RlZERhdGUgPSBtb2RlbDxEYXRlIHwgbnVsbD4obnVsbCwgeyBhbGlhczogJ3NlbGVjdGVkJyB9KTtcclxuXHJcbiAgcmVhZG9ubHkgeWVhclNlbGVjdCA9IG91dHB1dDxudW1iZXI+KCk7XHJcbiAgcmVhZG9ubHkgbW9udGhTZWxlY3QgPSBvdXRwdXQ8bnVtYmVyPigpO1xyXG5cclxuICByZWFkb25seSBtaW4gPSBpbnB1dDxEYXRlIHwgbnVsbCwgYW55Pih0aGlzLl9ERUZBVUxUUy5taW4sIHtcclxuICAgIHRyYW5zZm9ybTogdiA9PiAodiA9PT0gbnVsbCA/IG51bGwgOiBjb2VyY2VEYXRlUHJvcGVydHkodiwgdGhpcy5fREVGQVVMVFMubWluKSksXHJcbiAgfSk7XHJcbiAgcmVhZG9ubHkgbWF4ID0gaW5wdXQ8RGF0ZSB8IG51bGwsIGFueT4odGhpcy5fREVGQVVMVFMubWF4LCB7XHJcbiAgICB0cmFuc2Zvcm06IHYgPT4gKHYgPT09IG51bGwgPyBudWxsIDogY29lcmNlRGF0ZVByb3BlcnR5KHYsIHRoaXMuX0RFRkFVTFRTLm1heCkpLFxyXG4gIH0pO1xyXG5cclxuICByZWFkb25seSBmaWx0ZXIgPSBpbnB1dDxBcmRDYWxlbmRhckZpbHRlckZuIHwgbnVsbD4odGhpcy5fREVGQVVMVFMuZmlsdGVyKTtcclxuXHJcbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZSh2OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh2IGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0ZS5zZXQodik7XHJcbiAgICB9IGVsc2UgaWYgKCFpc0RlZmluZWQodikpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZERhdGUuc2V0KG51bGwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcihuZXcgRXJyb3IoYEFSRC1ORjIwMDM6IDxhcmQtY2FsZW5kYXI+IFt3cml0ZVZhbHVlXSBleHBlY3RlZCBhIERhdGUgb3IgbnVsbCwgZ290IFwiJHt2fVwiLmApKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSBfZW1pdENoYW5nZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX29uQ2hhbmdlUmVnaXN0ZXJlZD8uKHRoaXMuc2VsZWN0ZWREYXRlKCkpO1xyXG4gIH1cclxuXHJcbiAgLy8hIHNlbGVjdGluZyBkYXlzXHJcbiAgaXNEYXlTZWxlY3RlZChkYXk6IG51bWJlciB8IERhdGUgfCBudWxsKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoZGF5IGluc3RhbmNlb2YgRGF0ZSkgZGF5ID0gZGF5LmdldERhdGUoKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlKCkgIT09IG51bGwgJiZcclxuICAgICAgdGhpcy5hY3RpdmVZZWFyKCkgPT09IHRoaXMuc2VsZWN0ZWREYXRlKCk/LmdldEZ1bGxZZWFyKCkgJiZcclxuICAgICAgdGhpcy5hY3RpdmVNb250aCgpID09PSB0aGlzLnNlbGVjdGVkRGF0ZSgpPy5nZXRNb250aCgpICYmXHJcbiAgICAgIGRheSA9PT0gdGhpcy5zZWxlY3RlZERhdGUoKT8uZ2V0RGF0ZSgpXHJcbiAgICApO1xyXG4gIH1cclxuICBpc0RheU91dE9mUmFuZ2UoZGF5OiBudW1iZXIsIG1vbnRoOiBudW1iZXIgPSB0aGlzLmFjdGl2ZU1vbnRoKCksIHllYXI6IG51bWJlciA9IHRoaXMuYWN0aXZlWWVhcigpKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBpc0RheU91dE9mUmFuZ2UoZGF5LCBtb250aCwgeWVhciwgdGhpcy5taW4oKSwgdGhpcy5tYXgoKSk7XHJcbiAgfVxyXG4gIHJlYWRvbmx5IGlzRGF5RmlsdGVyZWRPdXQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gKGRheTogbnVtYmVyLCBtb250aDogbnVtYmVyID0gdGhpcy5hY3RpdmVNb250aCgpLCB5ZWFyOiBudW1iZXIgPSB0aGlzLmFjdGl2ZVllYXIoKSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmZpbHRlcigpO1xyXG4gICAgICByZXR1cm4gZmlsdGVyPy4obmV3IERhdGUoeWVhciwgbW9udGgsIGRheSkpID8/IGZhbHNlO1xyXG4gICAgfTtcclxuICB9KTtcclxuICBzZWxlY3REYXkoZGF5OiBudW1iZXIgfCBEYXRlIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaXNEYXlTZWxlY3RlZChkYXkpKSByZXR1cm47XHJcbiAgICBpZiAoaXNOdWxsKGRheSkpIHtcclxuICAgICAgaWYgKCFpc0RlZmluZWQodGhpcy5zZWxlY3RlZERhdGUoKSkpIHJldHVybjtcclxuXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlLnNldChudWxsKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXkgaW5zdGFuY2VvZiBEYXRlKSBkYXkgPSBkYXkuZ2V0RGF0ZSgpO1xyXG4gICAgaWYgKChkYXkgJiYgdGhpcy5pc0RheU91dE9mUmFuZ2UoZGF5KSkgfHwgdGhpcy5pc0RheUZpbHRlcmVkT3V0KCkoZGF5KSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0ZWREYXRlLnNldChuZXcgRGF0ZSh0aGlzLmFjdGl2ZVllYXIoKSwgdGhpcy5hY3RpdmVNb250aCgpLCBkYXksIDAsIDAsIDAsIDApKTtcclxuICB9XHJcbiAgc2VsZWN0Q3VycmVudGx5SGlnaGxpZ2h0ZWREYXkoKTogdm9pZCB7XHJcbiAgICBpZiAoIWlzRGVmaW5lZCh0aGlzLmhpZ2hsaWdodGVkRGF5KCkpKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5zZWxlY3REYXkodGhpcy5oaWdobGlnaHRlZERheSgpKTtcclxuICB9XHJcblxyXG4gIC8vISBoaWdobGlnaHRpbmcgZGF5c1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX19oaWdobGlnaHRlZERheSA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcclxuICByZWFkb25seSBoaWdobGlnaHRlZERheSA9IHRoaXMuX19oaWdobGlnaHRlZERheS5hc1JlYWRvbmx5KCk7XHJcblxyXG4gIHNldEhpZ2hsaWdodGVkRGF5KGRheTogbnVtYmVyIHwgbnVsbCwgbW9udGg6IG51bWJlciA9IHRoaXMuYWN0aXZlTW9udGgoKSwgeWVhcjogbnVtYmVyID0gdGhpcy5hY3RpdmVZZWFyKCkpOiB2b2lkIHtcclxuICAgIGlmIChpc051bGwoZGF5KSkge1xyXG4gICAgICB0aGlzLl9faGlnaGxpZ2h0ZWREYXkudXBkYXRlKCgpID0+IGRheSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5KTtcclxuICAgIGNvbnN0IG91dE9mUmFuZ2UgPSB0aGlzLmlzRGF5T3V0T2ZSYW5nZShkYXksIG1vbnRoLCB5ZWFyKTtcclxuXHJcbiAgICBpZiAob3V0T2ZSYW5nZSA9PT0gLTEpIHtcclxuICAgICAgdGhpcy5faGlnaGxpZ2h0TWluRGF5KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChvdXRPZlJhbmdlID09PSAxKSB7XHJcbiAgICAgIHRoaXMuX2hpZ2hsaWdodE1heERheSgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fX2hpZ2hsaWdodGVkRGF5LnVwZGF0ZSgoKSA9PiBkYXRlLmdldERhdGUoKSk7XHJcblxyXG4gICAgaWYgKGRhdGUuZ2V0RnVsbFllYXIoKSAhPT0gdGhpcy5hY3RpdmVZZWFyKCkpIHtcclxuICAgICAgdGhpcy5hY3RpdmVZZWFyLnNldChkYXRlLmdldEZ1bGxZZWFyKCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKGRhdGUuZ2V0TW9udGgoKSAhPT0gdGhpcy5hY3RpdmVNb250aCgpKSB7XHJcbiAgICAgIHRoaXMuYWN0aXZlTW9udGguc2V0KGRhdGUuZ2V0TW9udGgoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oaWdobGlnaHRNaW5EYXkoKTogdm9pZCB7XHJcbiAgICBjb25zdCBtaW4gPSB0aGlzLm1pbigpO1xyXG4gICAgaWYgKCFpc0RlZmluZWQobWluKSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuYWN0aXZlWWVhci5zZXQobWluLmdldEZ1bGxZZWFyKCkpO1xyXG4gICAgdGhpcy5hY3RpdmVNb250aC5zZXQobWluLmdldE1vbnRoKCkpO1xyXG4gICAgdGhpcy5fX2hpZ2hsaWdodGVkRGF5LnNldChtaW4uZ2V0RGF0ZSgpKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaGlnaGxpZ2h0TWF4RGF5KCk6IHZvaWQge1xyXG4gICAgY29uc3QgbWF4ID0gdGhpcy5tYXgoKTtcclxuICAgIGlmICghaXNEZWZpbmVkKG1heCkpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLmFjdGl2ZVllYXIuc2V0KG1heC5nZXRGdWxsWWVhcigpKTtcclxuICAgIHRoaXMuYWN0aXZlTW9udGguc2V0KG1heC5nZXRNb250aCgpKTtcclxuICAgIHRoaXMuX19oaWdobGlnaHRlZERheS5zZXQobWF4LmdldERhdGUoKSk7XHJcbiAgfVxyXG5cclxuICBoaWdobGlnaHROZXh0RGF5KG9mZnNldCA9IDEpOiB2b2lkIHtcclxuICAgIGNvbnN0IGN1cnJlbnREYXkgPSB0aGlzLmhpZ2hsaWdodGVkRGF5KCk7XHJcbiAgICBjb25zdCBuZXdEYXkgPSBpc0RlZmluZWQoY3VycmVudERheSkgPyBjdXJyZW50RGF5ICsgb2Zmc2V0IDogMTtcclxuICAgIHRoaXMuc2V0SGlnaGxpZ2h0ZWREYXkobmV3RGF5KTtcclxuICB9XHJcbiAgaGlnaGxpZ2h0UHJldmlvdXNEYXkob2Zmc2V0ID0gMSk6IHZvaWQge1xyXG4gICAgdGhpcy5oaWdobGlnaHROZXh0RGF5KG9mZnNldCAqIC0xKTtcclxuICB9XHJcbiAgaGlnaGxpZ2h0Rmlyc3REYXkoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldEhpZ2hsaWdodGVkRGF5KDEpO1xyXG4gIH1cclxuICBoaWdobGlnaHRMYXN0RGF5KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZGF5c0luTW9udGggPSBuZXcgRGF0ZSh0aGlzLmFjdGl2ZVllYXIoKSwgdGhpcy5hY3RpdmVNb250aCgpICsgMSwgMCkuZ2V0RGF0ZSgpO1xyXG4gICAgdGhpcy5zZXRIaWdobGlnaHRlZERheShkYXlzSW5Nb250aCk7XHJcbiAgfVxyXG4gIGhpZ2hsaWdodFNhbWVEYXlOZXh0TW9udGgoKTogdm9pZCB7XHJcbiAgICBjb25zdCBtb250aCA9IHRoaXMuYWN0aXZlTW9udGgoKTtcclxuICAgIGNvbnN0IHllYXIgPSB0aGlzLmFjdGl2ZVllYXIoKTtcclxuICAgIGNvbnN0IG5ld01vbnRoID0gbW9udGggKyAxO1xyXG4gICAgY29uc3QgbmV3WWVhciA9IHllYXIgKyBNYXRoLmZsb29yKG5ld01vbnRoIC8gMTIpO1xyXG4gICAgdGhpcy5zZXRIaWdobGlnaHRlZERheSh0aGlzLmhpZ2hsaWdodGVkRGF5KCksIG5ld01vbnRoICUgMTIsIG5ld1llYXIpO1xyXG4gIH1cclxuICBoaWdobGlnaHRTYW1lRGF5UHJldmlvdXNNb250aCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IG1vbnRoID0gdGhpcy5hY3RpdmVNb250aCgpO1xyXG4gICAgY29uc3QgeWVhciA9IHRoaXMuYWN0aXZlWWVhcigpO1xyXG4gICAgY29uc3QgbmV3TW9udGggPSBtb250aCAtIDE7XHJcbiAgICBjb25zdCBuZXdZZWFyID0geWVhciArIE1hdGguZmxvb3IobmV3TW9udGggLyAxMik7XHJcbiAgICB0aGlzLnNldEhpZ2hsaWdodGVkRGF5KHRoaXMuaGlnaGxpZ2h0ZWREYXkoKSwgbmV3TW9udGggJSAxMiwgbmV3WWVhcik7XHJcbiAgfVxyXG4gIGhpZ2hsaWdodFNhbWVEYXlOZXh0WWVhcigpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0SGlnaGxpZ2h0ZWREYXkodGhpcy5oaWdobGlnaHRlZERheSgpLCB0aGlzLmFjdGl2ZU1vbnRoKCksIHRoaXMuYWN0aXZlWWVhcigpICsgMSk7XHJcbiAgfVxyXG4gIGhpZ2hsaWdodFNhbWVEYXlQcmV2aW91c1llYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldEhpZ2hsaWdodGVkRGF5KHRoaXMuaGlnaGxpZ2h0ZWREYXkoKSwgdGhpcy5hY3RpdmVNb250aCgpLCB0aGlzLmFjdGl2ZVllYXIoKSAtIDEpO1xyXG4gIH1cclxuXHJcbiAgLy8hIHNlbGVjdGluZyBtb250aHNcclxuICBpc01vbnRoU2VsZWN0ZWQobW9udGg6IG51bWJlciB8IERhdGUpOiBib29sZWFuIHtcclxuICAgIGlmIChtb250aCBpbnN0YW5jZW9mIERhdGUpIG1vbnRoID0gbW9udGguZ2V0TW9udGgoKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlKCkgIT09IG51bGwgJiZcclxuICAgICAgdGhpcy5hY3RpdmVZZWFyKCkgPT09IHRoaXMuc2VsZWN0ZWREYXRlKCk/LmdldEZ1bGxZZWFyKCkgJiZcclxuICAgICAgbW9udGggPT09IHRoaXMuc2VsZWN0ZWREYXRlKCk/LmdldE1vbnRoKClcclxuICAgICk7XHJcbiAgfVxyXG4gIGlzTW9udGhPdXRPZlJhbmdlKG1vbnRoOiBudW1iZXIsIHllYXI6IG51bWJlciA9IHRoaXMuYWN0aXZlWWVhcigpKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBpc01vbnRoT3V0T2ZSYW5nZShtb250aCwgeWVhciwgdGhpcy5taW4oKSwgdGhpcy5tYXgoKSk7XHJcbiAgfVxyXG4gIGNoYW5nZU1vbnRoKG5ld01vbnRoOiBudW1iZXIgfCBudWxsKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoaXNOdWxsKG5ld01vbnRoKSkge1xyXG4gICAgICB0aGlzLmFjdGl2ZU1vbnRoLnNldChUT0RBWS5nZXRNb250aCgpKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNNb250aE91dE9mUmFuZ2UobmV3TW9udGgpKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgaWYgKG5ld01vbnRoID4gMTEpIHtcclxuICAgICAgdGhpcy5hY3RpdmVNb250aC5zZXQoMCk7XHJcbiAgICAgIHRoaXMuYWN0aXZlWWVhci51cGRhdGUodiA9PiB2ICsgMSk7XHJcbiAgICB9IGVsc2UgaWYgKG5ld01vbnRoIDwgMCkge1xyXG4gICAgICB0aGlzLmFjdGl2ZU1vbnRoLnNldCgxMSk7XHJcbiAgICAgIHRoaXMuYWN0aXZlWWVhci51cGRhdGUodiA9PiB2IC0gMSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFjdGl2ZU1vbnRoLnNldChuZXdNb250aCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG4gIHNlbGVjdE1vbnRoKG5ld01vbnRoOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XHJcbiAgICBpZiAoaXNOdWxsKG5ld01vbnRoKSB8fCB0aGlzLmlzTW9udGhPdXRPZlJhbmdlKG5ld01vbnRoKSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHdhc1N1Y2Nlc3NmdWwgPSB0aGlzLmNoYW5nZU1vbnRoKG5ld01vbnRoKTtcclxuICAgIGlmICghd2FzU3VjY2Vzc2Z1bCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuYWN0aXZlVmlldy5zZXQoQXJkQ2FsZW5kYXJWaWV3LkRheXMpO1xyXG4gICAgdGhpcy5tb250aFNlbGVjdC5lbWl0KG5ld01vbnRoKTtcclxuICB9XHJcbiAgc2VsZWN0Q3VycmVudGx5SGlnaGxpZ2h0ZWRNb250aCgpOiB2b2lkIHtcclxuICAgIGlmICghaXNEZWZpbmVkKHRoaXMuaGlnaGxpZ2h0ZWRNb250aCgpKSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0TW9udGgodGhpcy5oaWdobGlnaHRlZE1vbnRoKCkhKTtcclxuICB9XHJcblxyXG4gIC8vISBoaWdobGlnaHRpbmcgbW9udGhzXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfX2hpZ2hsaWdodGVkTW9udGggPSBzaWduYWw8bnVtYmVyIHwgbnVsbD4obnVsbCk7XHJcbiAgcmVhZG9ubHkgaGlnaGxpZ2h0ZWRNb250aCA9IHRoaXMuX19oaWdobGlnaHRlZE1vbnRoLmFzUmVhZG9ubHkoKTtcclxuXHJcbiAgc2V0SGlnaGxpZ2h0ZWRNb250aChtb250aDogbnVtYmVyIHwgbnVsbCwgeWVhcjogbnVtYmVyID0gdGhpcy5hY3RpdmVZZWFyKCkpOiB2b2lkIHtcclxuICAgIGlmIChpc051bGwobW9udGgpKSB7XHJcbiAgICAgIHRoaXMuX19oaWdobGlnaHRlZE1vbnRoLnVwZGF0ZSgoKSA9PiBtb250aCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMTUpO1xyXG4gICAgY29uc3Qgb3V0T2ZSYW5nZSA9IHRoaXMuaXNNb250aE91dE9mUmFuZ2UobW9udGgsIHllYXIpO1xyXG5cclxuICAgIGlmIChvdXRPZlJhbmdlID09PSAtMSkge1xyXG4gICAgICB0aGlzLl9oaWdobGlnaHRNaW5Nb250aCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAob3V0T2ZSYW5nZSA9PT0gMSkge1xyXG4gICAgICB0aGlzLl9oaWdobGlnaHRNYXhNb250aCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fX2hpZ2hsaWdodGVkTW9udGgudXBkYXRlKCgpID0+IGRhdGUuZ2V0TW9udGgoKSk7XHJcblxyXG4gICAgaWYgKGRhdGUuZ2V0RnVsbFllYXIoKSAhPT0gdGhpcy5hY3RpdmVZZWFyKCkpIHtcclxuICAgICAgdGhpcy5hY3RpdmVZZWFyLnNldChkYXRlLmdldEZ1bGxZZWFyKCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaGlnaGxpZ2h0TWluTW9udGgoKTogdm9pZCB7XHJcbiAgICBjb25zdCBtaW4gPSB0aGlzLm1pbigpO1xyXG4gICAgaWYgKCFpc0RlZmluZWQobWluKSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuYWN0aXZlWWVhci5zZXQobWluLmdldEZ1bGxZZWFyKCkpO1xyXG4gICAgdGhpcy5fX2hpZ2hsaWdodGVkTW9udGguc2V0KG1pbi5nZXRNb250aCgpKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaGlnaGxpZ2h0TWF4TW9udGgoKTogdm9pZCB7XHJcbiAgICBjb25zdCBtYXggPSB0aGlzLm1heCgpO1xyXG4gICAgaWYgKCFpc0RlZmluZWQobWF4KSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuYWN0aXZlWWVhci5zZXQobWF4LmdldEZ1bGxZZWFyKCkpO1xyXG4gICAgdGhpcy5fX2hpZ2hsaWdodGVkTW9udGguc2V0KG1heC5nZXRNb250aCgpKTtcclxuICB9XHJcblxyXG4gIGhpZ2hsaWdodE5leHRNb250aChvZmZzZXQgPSAxKTogdm9pZCB7XHJcbiAgICBjb25zdCBjdXJyZW50TW9udGggPSB0aGlzLmhpZ2hsaWdodGVkTW9udGgoKTtcclxuICAgIGNvbnN0IG5ld01vbnRoID0gaXNEZWZpbmVkKGN1cnJlbnRNb250aCkgPyBjdXJyZW50TW9udGggKyBvZmZzZXQgOiAwO1xyXG4gICAgdGhpcy5zZXRIaWdobGlnaHRlZE1vbnRoKG5ld01vbnRoKTtcclxuICB9XHJcbiAgaGlnaGxpZ2h0UHJldmlvdXNNb250aChvZmZzZXQgPSAxKTogdm9pZCB7XHJcbiAgICB0aGlzLmhpZ2hsaWdodE5leHRNb250aChvZmZzZXQgKiAtMSk7XHJcbiAgfVxyXG4gIGhpZ2hsaWdodEZpcnN0TW9udGgoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldEhpZ2hsaWdodGVkTW9udGgoMCk7XHJcbiAgfVxyXG4gIGhpZ2hsaWdodExhc3RNb250aCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0SGlnaGxpZ2h0ZWRNb250aCgxMSk7XHJcbiAgfVxyXG4gIGhpZ2hsaWdodFNhbWVNb250aE5leHRZZWFyKG11bHRpcGxlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldEhpZ2hsaWdodGVkTW9udGgodGhpcy5oaWdobGlnaHRlZE1vbnRoKCksIHRoaXMuYWN0aXZlWWVhcigpICsgKG11bHRpcGxlID8gMTAgOiAxKSk7XHJcbiAgfVxyXG4gIGhpZ2hsaWdodFNhbWVNb250aFByZXZpb3VzWWVhcihtdWx0aXBsZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRIaWdobGlnaHRlZE1vbnRoKHRoaXMuaGlnaGxpZ2h0ZWRNb250aCgpLCB0aGlzLmFjdGl2ZVllYXIoKSAtIChtdWx0aXBsZSA/IDEwIDogMSkpO1xyXG4gIH1cclxuXHJcbiAgLy8hIHNlbGVjdGluZyB5ZWFyc1xyXG4gIGlzWWVhclNlbGVjdGVkKHllYXI6IG51bWJlciB8IERhdGUpOiBib29sZWFuIHtcclxuICAgIGlmICh5ZWFyIGluc3RhbmNlb2YgRGF0ZSkgeWVhciA9IHllYXIuZ2V0RnVsbFllYXIoKTtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRGF0ZSgpICE9PSBudWxsICYmIHllYXIgPT09IHRoaXMuc2VsZWN0ZWREYXRlKCk/LmdldEZ1bGxZZWFyKCk7XHJcbiAgfVxyXG4gIGlzWWVhck91dE9mUmFuZ2UoeWVhcjogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBpc1llYXJPdXRPZlJhbmdlKHllYXIsIHRoaXMubWluKCksIHRoaXMubWF4KCkpO1xyXG4gIH1cclxuICBjaGFuZ2VZZWFyKHllYXI6IG51bWJlciB8IG51bGwpOiBib29sZWFuIHtcclxuICAgIGlmIChpc051bGwoeWVhcikpIHtcclxuICAgICAgdGhpcy5hY3RpdmVZZWFyLnNldChUT0RBWS5nZXRGdWxsWWVhcigpKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaXNZZWFyT3V0T2ZSYW5nZSh5ZWFyKSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIHRoaXMuYWN0aXZlWWVhci5zZXQoeWVhcik7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG4gIHNlbGVjdFllYXIoeWVhcjogbnVtYmVyIHwgRGF0ZSB8IG51bGwpOiB2b2lkIHtcclxuICAgIGlmIChpc051bGwoeWVhcikpIHJldHVybjtcclxuICAgIGlmICh5ZWFyIGluc3RhbmNlb2YgRGF0ZSkgeWVhciA9IHllYXIuZ2V0RnVsbFllYXIoKTtcclxuXHJcbiAgICBjb25zdCB3YXNTdWNjZXNzZnVsID0gdGhpcy5jaGFuZ2VZZWFyKHllYXIpO1xyXG4gICAgaWYgKCF3YXNTdWNjZXNzZnVsKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5hY3RpdmVWaWV3LnNldChBcmRDYWxlbmRhclZpZXcuTW9udGhzKTtcclxuICAgIHRoaXMueWVhclNlbGVjdC5lbWl0KHllYXIpO1xyXG4gIH1cclxuICBzZWxlY3RDdXJyZW50bHlIaWdobGlnaHRlZFllYXIoKTogdm9pZCB7XHJcbiAgICBpZiAoIWlzRGVmaW5lZCh0aGlzLmhpZ2hsaWdodGVkWWVhcigpKSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuc2VsZWN0WWVhcih0aGlzLmhpZ2hsaWdodGVkWWVhcigpISk7XHJcbiAgfVxyXG5cclxuICAvLyEgaGlnaGxpZ2h0aW5nIHllYXJzXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfX2hpZ2hsaWdodGVkWWVhciA9IHNpZ25hbDxudW1iZXIgfCBudWxsPihudWxsKTtcclxuICByZWFkb25seSBoaWdobGlnaHRlZFllYXIgPSB0aGlzLl9faGlnaGxpZ2h0ZWRZZWFyLmFzUmVhZG9ubHkoKTtcclxuXHJcbiAgcmVhZG9ubHkgY3VycmVudFllYXJSYW5nZVN0YXJ0ID0gc2lnbmFsPG51bWJlcj4oVE9EQVkuZ2V0RnVsbFllYXIoKSAtIChUT0RBWS5nZXRGdWxsWWVhcigpICUgNCkgLSA4KTsgLy8gY3VycmVudCB5ZWFyIGFsd2F5cyBpbiAzcmQgcm93XHJcblxyXG4gIHNldEhpZ2hsaWdodGVkWWVhcih5ZWFyOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XHJcbiAgICBpZiAoaXNOdWxsKHllYXIpKSB7XHJcbiAgICAgIHRoaXMuX19oaWdobGlnaHRlZFllYXIudXBkYXRlKCgpID0+IHllYXIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgMCk7XHJcbiAgICBjb25zdCBvdXRPZlJhbmdlID0gdGhpcy5pc1llYXJPdXRPZlJhbmdlKHllYXIpO1xyXG5cclxuICAgIGlmIChvdXRPZlJhbmdlID09PSAtMSkge1xyXG4gICAgICB0aGlzLl9oaWdobGlnaHRNaW5ZZWFyKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChvdXRPZlJhbmdlID09PSAxKSB7XHJcbiAgICAgIHRoaXMuX2hpZ2hsaWdodE1heFllYXIoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5ld1llYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICB0aGlzLl9faGlnaGxpZ2h0ZWRZZWFyLnVwZGF0ZSgoKSA9PiBuZXdZZWFyKTtcclxuXHJcbiAgICBpZiAobmV3WWVhciA8IHRoaXMuY3VycmVudFllYXJSYW5nZVN0YXJ0KCkgfHwgbmV3WWVhciA+PSB0aGlzLmN1cnJlbnRZZWFyUmFuZ2VTdGFydCgpICsgMjQpIHtcclxuICAgICAgLy8gcm91bmQgdGhlIG9mZnNldCBhd2F5IGZyb20gemVybzogMC4xIC0+IDEsIC0wLjEgLT4gLTFcclxuICAgICAgLy8gdGhpcyBpcyB0byBlbnN1cmUgdGhlIHJhbmdlIHN0YXJ0IGlzIGFsd2F5cyBzaGlmdGVkIGJ5IDI0IHllYXJzXHJcbiAgICAgIGNvbnN0IG9mZnNldCA9IHJvdW5kRnJvbVplcm8oKG5ld1llYXIgLSB0aGlzLmN1cnJlbnRZZWFyUmFuZ2VTdGFydCgpKSAvIDI0KTtcclxuICAgICAgdGhpcy5jdXJyZW50WWVhclJhbmdlU3RhcnQudXBkYXRlKHYgPT4gdiArIG9mZnNldCAqIDI0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZVllYXJzVmlld1BhZ2Uob2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IG5ld1llYXJSYW5nZVN0YXJ0ID0gdGhpcy5jdXJyZW50WWVhclJhbmdlU3RhcnQoKSArIG9mZnNldCAqIDI0O1xyXG4gICAgdGhpcy5jdXJyZW50WWVhclJhbmdlU3RhcnQuc2V0KG5ld1llYXJSYW5nZVN0YXJ0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hpZ2hsaWdodE1pblllYXIoKTogdm9pZCB7XHJcbiAgICBjb25zdCBtaW4gPSB0aGlzLm1pbigpO1xyXG4gICAgaWYgKCFpc0RlZmluZWQobWluKSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuX19oaWdobGlnaHRlZFllYXIuc2V0KG1pbi5nZXRGdWxsWWVhcigpKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaGlnaGxpZ2h0TWF4WWVhcigpOiB2b2lkIHtcclxuICAgIGNvbnN0IG1heCA9IHRoaXMubWF4KCk7XHJcbiAgICBpZiAoIWlzRGVmaW5lZChtYXgpKSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5fX2hpZ2hsaWdodGVkWWVhci5zZXQobWF4LmdldEZ1bGxZZWFyKCkpO1xyXG4gIH1cclxuXHJcbiAgaGlnaGxpZ2h0TmV4dFllYXIob2Zmc2V0ID0gMSk6IHZvaWQge1xyXG4gICAgY29uc3QgY3VycmVudFllYXIgPSB0aGlzLmhpZ2hsaWdodGVkWWVhcigpO1xyXG4gICAgY29uc3QgbmV3WWVhciA9IGlzRGVmaW5lZChjdXJyZW50WWVhcikgPyBjdXJyZW50WWVhciArIG9mZnNldCA6IG51bGw7XHJcbiAgICB0aGlzLnNldEhpZ2hsaWdodGVkWWVhcihuZXdZZWFyKTtcclxuICB9XHJcbiAgaGlnaGxpZ2h0UHJldmlvdXNZZWFyKG9mZnNldCA9IDEpOiB2b2lkIHtcclxuICAgIHRoaXMuaGlnaGxpZ2h0TmV4dFllYXIob2Zmc2V0ICogLTEpO1xyXG4gIH1cclxuICBoaWdobGlnaHRGaXJzdFllYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldEhpZ2hsaWdodGVkWWVhcih0aGlzLmN1cnJlbnRZZWFyUmFuZ2VTdGFydCgpKTtcclxuICB9XHJcbiAgaGlnaGxpZ2h0TGFzdFllYXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldEhpZ2hsaWdodGVkWWVhcih0aGlzLmN1cnJlbnRZZWFyUmFuZ2VTdGFydCgpICsgMjMpOyAvLyAyNCB5ZWFycyBwZXIgcGFnZVxyXG4gIH1cclxuICBoaWdobGlnaHRTYW1lWWVhck5leHRQYWdlKG11bHRpcGxlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBjb25zdCB5ZWFyID0gdGhpcy5oaWdobGlnaHRlZFllYXIoKSA/PyB0aGlzLmN1cnJlbnRZZWFyUmFuZ2VTdGFydCgpO1xyXG4gICAgdGhpcy5zZXRIaWdobGlnaHRlZFllYXIoeWVhciArIChtdWx0aXBsZSA/IDYwIDogMjQpKTtcclxuICB9XHJcbiAgaGlnaGxpZ2h0U2FtZVllYXJQcmV2aW91c1BhZ2UobXVsdGlwbGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGNvbnN0IHllYXIgPSB0aGlzLmhpZ2hsaWdodGVkWWVhcigpID8/IHRoaXMuY3VycmVudFllYXJSYW5nZVN0YXJ0KCk7XHJcbiAgICB0aGlzLnNldEhpZ2hsaWdodGVkWWVhcih5ZWFyIC0gKG11bHRpcGxlID8gNjAgOiAyNCkpO1xyXG4gIH1cclxuXHJcbiAgLy8hIGludGVybmFsc1xyXG4gIHJlYWRvbmx5IF9pc1VzaW5nS2V5Ym9hcmQgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50Om1vdXNlbW92ZScpXHJcbiAgb25Eb2N1bWVudE1vdXNlbW92ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2lzVXNpbmdLZXlib2FyZC5zZXQoZmFsc2UpO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJylcclxuICBvbkRvY3VtZW50S2V5ZG93bigpOiB2b2lkIHtcclxuICAgIHRoaXMuX2lzVXNpbmdLZXlib2FyZC5zZXQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICAvLyEgdGVtcGxhdGVzXHJcbiAgcmVhZG9ubHkgdGVtcGxhdGVSZXBvc2l0b3J5ID0gY29udGVudENoaWxkKF9DYWxlbmRhclRlbXBsYXRlUmVwb3NpdG9yeURpcmVjdGl2ZSk7XHJcblxyXG4gIHJlYWRvbmx5IHllYXJzVmlld0hlYWRlclRlbXBsYXRlID0gY29udGVudENoaWxkKEFyZENhbGVuZGFyWWVhcnNWaWV3SGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpO1xyXG4gIHJlYWRvbmx5IG1vbnRoc1ZpZXdIZWFkZXJUZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZChBcmRDYWxlbmRhck1vbnRoc1ZpZXdIZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSk7XHJcbiAgcmVhZG9ubHkgZGF5c1ZpZXdIZWFkZXJUZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZChBcmRDYWxlbmRhckRheXNWaWV3SGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpO1xyXG4gIHJlYWRvbmx5IGZsb2F0aW5nTW9udGhUZW1wbGF0ZSA9IGNvbnRlbnRDaGlsZChBcmRDYWxlbmRhckZsb2F0aW5nTW9udGhUZW1wbGF0ZURpcmVjdGl2ZSk7XHJcbiAgcmVhZG9ubHkgeWVhclRlbXBsYXRlID0gY29udGVudENoaWxkKEFyZENhbGVuZGFyWWVhclRlbXBsYXRlRGlyZWN0aXZlKTtcclxuICByZWFkb25seSBtb250aFRlbXBsYXRlID0gY29udGVudENoaWxkKEFyZENhbGVuZGFyTW9udGhUZW1wbGF0ZURpcmVjdGl2ZSk7XHJcbiAgcmVhZG9ubHkgZGF5VGVtcGxhdGUgPSBjb250ZW50Q2hpbGQoQXJkQ2FsZW5kYXJEYXlUZW1wbGF0ZURpcmVjdGl2ZSk7XHJcbiAgcmVhZG9ubHkgd2Vla2RheVRlbXBsYXRlID0gY29udGVudENoaWxkKEFyZENhbGVuZGFyV2Vla2RheVRlbXBsYXRlRGlyZWN0aXZlKTtcclxufVxyXG4iLCI8ZGl2XHJcbiAgY2xhc3M9XCJhcmQtY2FsZW5kYXJcIlxyXG4gIFtuZ0NsYXNzXT1cIm5nQ2xhc3NlcygpXCJcclxuPlxyXG4gIEBzd2l0Y2ggKGFjdGl2ZVZpZXcoKSkge1xyXG4gICAgQGNhc2UgKCdkYXlzJykge1xyXG4gICAgICA8YXJkLWRheXMtdmlld1xyXG4gICAgICAgIFt0YWJJbmRleF09XCJ0YWJJbmRleCgpXCJcclxuICAgICAgICBbcmVhZE9ubHldPVwicmVhZG9ubHkoKVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkKClcIlxyXG4gICAgICAgIFthdXRvRm9jdXNdPVwiYXV0b0ZvY3VzKClcIlxyXG4gICAgICAgIFtfaXNVc2luZ0tleWJvYXJkXT1cIl9pc1VzaW5nS2V5Ym9hcmQoKVwiXHJcbiAgICAgICAgW2FjdGl2ZU1vbnRoXT1cImFjdGl2ZU1vbnRoKClcIlxyXG4gICAgICAgIFthY3RpdmVZZWFyXT1cImFjdGl2ZVllYXIoKVwiXHJcbiAgICAgICAgW3NlbGVjdGVkRGF0ZV09XCJzZWxlY3RlZERhdGUoKVwiXHJcbiAgICAgICAgW2ZpcnN0V2Vla2RheV09XCJmaXJzdFdlZWtkYXkoKVwiXHJcbiAgICAgICAgW2hpZ2hsaWdodGVkRGF5XT1cImhpZ2hsaWdodGVkRGF5KClcIlxyXG4gICAgICAgIFttaW5dPVwibWluKClcIlxyXG4gICAgICAgIFttYXhdPVwibWF4KClcIlxyXG4gICAgICAgIFtpc0RheUZpbHRlcmVkT3V0XT1cImlzRGF5RmlsdGVyZWRPdXQoKVwiXHJcbiAgICAgICAgW2RheXNWaWV3SGVhZGVyVGVtcGxhdGVdPVwiZGF5c1ZpZXdIZWFkZXJUZW1wbGF0ZSgpPy50ZW1wbGF0ZSA/PyB0ZW1wbGF0ZVJlcG9zaXRvcnkoKT8uZGF5c1ZpZXdIZWFkZXJUbXAoKT8udGVtcGxhdGVcIlxyXG4gICAgICAgIFtmbG9hdGluZ01vbnRoVGVtcGxhdGVdPVwiZmxvYXRpbmdNb250aFRlbXBsYXRlKCk/LnRlbXBsYXRlID8/IHRlbXBsYXRlUmVwb3NpdG9yeSgpPy5mbG9hdGluZ01vbnRoVG1wKCk/LnRlbXBsYXRlXCJcclxuICAgICAgICBbd2Vla2RheVRlbXBsYXRlXT1cIndlZWtkYXlUZW1wbGF0ZSgpPy50ZW1wbGF0ZSA/PyB0ZW1wbGF0ZVJlcG9zaXRvcnkoKT8ud2Vla2RheVRtcCgpPy50ZW1wbGF0ZVwiXHJcbiAgICAgICAgW2RheVRlbXBsYXRlXT1cImRheVRlbXBsYXRlKCk/LnRlbXBsYXRlID8/IHRlbXBsYXRlUmVwb3NpdG9yeSgpPy5kYXlUbXAoKT8udGVtcGxhdGVcIlxyXG4gICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKCRldmVudClcIlxyXG4gICAgICAgIChibHVyKT1cIm9uQmx1cigkZXZlbnQpXCJcclxuICAgICAgICAodHJpZ2dlck9wZW5Nb250aHNWaWV3KT1cIm9uVHJpZ2dlck9wZW5Nb250aHNWaWV3KClcIlxyXG4gICAgICAgICh0cmlnZ2VyT3BlblllYXJzVmlldyk9XCJvblRyaWdnZXJPcGVuWWVhcnNWaWV3KClcIlxyXG4gICAgICAgICh0cmlnZ2VyQ2hhbmdlTW9udGgpPVwiY2hhbmdlTW9udGgoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRyaWdnZXJDaGFuZ2VZZWFyKT1cImNoYW5nZVllYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRyaWdnZXJIaWdobGlnaHREYXkpPVwic2V0SGlnaGxpZ2h0ZWREYXkoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRyaWdnZXJIaWdobGlnaHRGaXJzdERheSk9XCJoaWdobGlnaHRGaXJzdERheSgpXCJcclxuICAgICAgICAodHJpZ2dlckhpZ2hsaWdodExhc3REYXkpPVwiaGlnaGxpZ2h0TGFzdERheSgpXCJcclxuICAgICAgICAodHJpZ2dlckhpZ2hsaWdodE5leHREYXkpPVwiaGlnaGxpZ2h0TmV4dERheSgkZXZlbnQpXCJcclxuICAgICAgICAodHJpZ2dlckhpZ2hsaWdodFByZXZpb3VzRGF5KT1cImhpZ2hsaWdodFByZXZpb3VzRGF5KCRldmVudClcIlxyXG4gICAgICAgICh0cmlnZ2VySGlnaGxpZ2h0U2FtZURheU5leHRQYWdlKT1cIiRldmVudCA/IGhpZ2hsaWdodFNhbWVEYXlOZXh0WWVhcigpIDogaGlnaGxpZ2h0U2FtZURheU5leHRNb250aCgpXCJcclxuICAgICAgICAodHJpZ2dlckhpZ2hsaWdodFNhbWVEYXlQcmV2aW91c1BhZ2UpPVwiJGV2ZW50ID8gaGlnaGxpZ2h0U2FtZURheVByZXZpb3VzWWVhcigpIDogaGlnaGxpZ2h0U2FtZURheVByZXZpb3VzTW9udGgoKVwiXHJcbiAgICAgICAgKHRyaWdnZXJTZWxlY3REYXkpPVwic2VsZWN0RGF5KCRldmVudClcIlxyXG4gICAgICAvPlxyXG4gICAgfVxyXG4gICAgQGNhc2UgKCdtb250aHMnKSB7XHJcbiAgICAgIDxhcmQtbW9udGhzLXZpZXdcclxuICAgICAgICBbdGFiSW5kZXhdPVwidGFiSW5kZXgoKVwiXHJcbiAgICAgICAgW3JlYWRPbmx5XT1cInJlYWRvbmx5KClcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpXCJcclxuICAgICAgICBbYXV0b0ZvY3VzXT1cImF1dG9Gb2N1cygpXCJcclxuICAgICAgICBbX2lzVXNpbmdLZXlib2FyZF09XCJfaXNVc2luZ0tleWJvYXJkKClcIlxyXG4gICAgICAgIFtjb2xvcl09XCJjb2xvcigpXCJcclxuICAgICAgICBbYWN0aXZlTW9udGhdPVwiYWN0aXZlTW9udGgoKVwiXHJcbiAgICAgICAgW2FjdGl2ZVllYXJdPVwiYWN0aXZlWWVhcigpXCJcclxuICAgICAgICBbc2VsZWN0ZWREYXRlXT1cInNlbGVjdGVkRGF0ZSgpXCJcclxuICAgICAgICBbbWluXT1cIm1pbigpXCJcclxuICAgICAgICBbbWF4XT1cIm1heCgpXCJcclxuICAgICAgICBbaGlnaGxpZ2h0ZWRNb250aF09XCJoaWdobGlnaHRlZE1vbnRoKClcIlxyXG4gICAgICAgIFttb250aHNWaWV3SGVhZGVyVGVtcGxhdGVdPVwibW9udGhzVmlld0hlYWRlclRlbXBsYXRlKCk/LnRlbXBsYXRlID8/IHRlbXBsYXRlUmVwb3NpdG9yeSgpPy5tb250aHNWaWV3SGVhZGVyVG1wKCk/LnRlbXBsYXRlXCJcclxuICAgICAgICBbbW9udGhUZW1wbGF0ZV09XCJtb250aFRlbXBsYXRlKCk/LnRlbXBsYXRlID8/IHRlbXBsYXRlUmVwb3NpdG9yeSgpPy5tb250aFRtcCgpPy50ZW1wbGF0ZVwiXHJcbiAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoJGV2ZW50KVwiXHJcbiAgICAgICAgKGJsdXIpPVwib25CbHVyKCRldmVudClcIlxyXG4gICAgICAgICh0cmlnZ2VyT3BlbkRheXNWaWV3KT1cIm9uVHJpZ2dlck9wZW5EYXlzVmlldygpXCJcclxuICAgICAgICAodHJpZ2dlck9wZW5ZZWFyc1ZpZXcpPVwib25UcmlnZ2VyT3BlblllYXJzVmlldygpXCJcclxuICAgICAgICAodHJpZ2dlQ2hhbmdlWWVhcik9XCJjaGFuZ2VZZWFyKCRldmVudClcIlxyXG4gICAgICAgICh0cmlnZ2VyU2VsZWN0TW9udGgpPVwic2VsZWN0TW9udGgoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRyaWdnZXJIaWdobGlnaHRNb250aCk9XCJzZXRIaWdobGlnaHRlZE1vbnRoKCRldmVudClcIlxyXG4gICAgICAgICh0cmlnZ2VySGlnaGxpZ2h0Rmlyc3RNb250aCk9XCJoaWdobGlnaHRGaXJzdE1vbnRoKClcIlxyXG4gICAgICAgICh0cmlnZ2VySGlnaGxpZ2h0TGFzdE1vbnRoKT1cImhpZ2hsaWdodExhc3RNb250aCgpXCJcclxuICAgICAgICAodHJpZ2dlckhpZ2hsaWdodE5leHRNb250aCk9XCJoaWdobGlnaHROZXh0TW9udGgoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRyaWdnZXJIaWdobGlnaHRQcmV2aW91c01vbnRoKT1cImhpZ2hsaWdodFByZXZpb3VzTW9udGgoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRyaWdnZXJIaWdobGlnaHRTYW1lTW9udGhOZXh0UGFnZSk9XCJoaWdobGlnaHRTYW1lTW9udGhOZXh0WWVhcigkZXZlbnQpXCJcclxuICAgICAgICAodHJpZ2dlckhpZ2hsaWdodFNhbWVNb250aFByZXZpb3VzUGFnZSk9XCJoaWdobGlnaHRTYW1lTW9udGhQcmV2aW91c1llYXIoJGV2ZW50KVwiXHJcbiAgICAgIC8+XHJcbiAgICB9XHJcbiAgICBAY2FzZSAoJ3llYXJzJykge1xyXG4gICAgICA8YXJkLXllYXJzLXZpZXdcclxuICAgICAgICBbdGFiSW5kZXhdPVwidGFiSW5kZXgoKVwiXHJcbiAgICAgICAgW3JlYWRPbmx5XT1cInJlYWRvbmx5KClcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpXCJcclxuICAgICAgICBbYXV0b0ZvY3VzXT1cImF1dG9Gb2N1cygpXCJcclxuICAgICAgICBbX2lzVXNpbmdLZXlib2FyZF09XCJfaXNVc2luZ0tleWJvYXJkKClcIlxyXG4gICAgICAgIFtoaWdobGlnaHRlZFllYXJdPVwiaGlnaGxpZ2h0ZWRZZWFyKClcIlxyXG4gICAgICAgIFtjdXJyZW50WWVhclJhbmdlU3RhcnRdPVwiY3VycmVudFllYXJSYW5nZVN0YXJ0KClcIlxyXG4gICAgICAgIFthY3RpdmVZZWFyXT1cImFjdGl2ZVllYXIoKVwiXHJcbiAgICAgICAgW3NlbGVjdGVkRGF0ZV09XCJzZWxlY3RlZERhdGUoKVwiXHJcbiAgICAgICAgW21pbl09XCJtaW4oKVwiXHJcbiAgICAgICAgW21heF09XCJtYXgoKVwiXHJcbiAgICAgICAgW3llYXJzVmlld0hlYWRlclRlbXBsYXRlXT1cInllYXJzVmlld0hlYWRlclRlbXBsYXRlKCk/LnRlbXBsYXRlID8/IHRlbXBsYXRlUmVwb3NpdG9yeSgpPy55ZWFyc1ZpZXdIZWFkZXJUbXAoKT8udGVtcGxhdGVcIlxyXG4gICAgICAgIFt5ZWFyVGVtcGxhdGVdPVwieWVhclRlbXBsYXRlKCk/LnRlbXBsYXRlID8/IHRlbXBsYXRlUmVwb3NpdG9yeSgpPy55ZWFyVG1wKCk/LnRlbXBsYXRlXCJcclxuICAgICAgICAoZm9jdXMpPVwib25Gb2N1cygkZXZlbnQpXCJcclxuICAgICAgICAoYmx1cik9XCJvbkJsdXIoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRyaWdnZXJPcGVuRGF5c1ZpZXcpPVwib25UcmlnZ2VyT3BlbkRheXNWaWV3KClcIlxyXG4gICAgICAgICh0cmlnZ2VyT3Blbk1vbnRoc1ZpZXcpPVwib25UcmlnZ2VyT3Blbk1vbnRoc1ZpZXcoKVwiXHJcbiAgICAgICAgKHRyaWdnZXJTZWxlY3RZZWFyKT1cInNlbGVjdFllYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRyaWdnZXJDaGFuZ2VZZWFyc1ZpZXdQYWdlKT1cImNoYW5nZVllYXJzVmlld1BhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgKHRyaWdnZXJIaWdobGlnaHRZZWFyKT1cInNldEhpZ2hsaWdodGVkWWVhcigkZXZlbnQpXCJcclxuICAgICAgICAodHJpZ2dlckhpZ2hsaWdodEZpcnN0WWVhcik9XCJoaWdobGlnaHRGaXJzdFllYXIoKVwiXHJcbiAgICAgICAgKHRyaWdnZXJIaWdobGlnaHRMYXN0WWVhcik9XCJoaWdobGlnaHRMYXN0WWVhcigpXCJcclxuICAgICAgICAodHJpZ2dlckhpZ2hsaWdodE5leHRZZWFyKT1cImhpZ2hsaWdodE5leHRZZWFyKCRldmVudClcIlxyXG4gICAgICAgICh0cmlnZ2VySGlnaGxpZ2h0UHJldmlvdXNZZWFyKT1cImhpZ2hsaWdodFByZXZpb3VzWWVhcigkZXZlbnQpXCJcclxuICAgICAgICAodHJpZ2dlckhpZ2hsaWdodFNhbWVZZWFyTmV4dFBhZ2UpPVwiaGlnaGxpZ2h0U2FtZVllYXJOZXh0UGFnZSgkZXZlbnQpXCJcclxuICAgICAgICAodHJpZ2dlckhpZ2hsaWdodFNhbWVZZWFyUHJldmlvdXNQYWdlKT1cImhpZ2hsaWdodFNhbWVZZWFyUHJldmlvdXNQYWdlKCRldmVudClcIlxyXG4gICAgICAvPlxyXG4gICAgfVxyXG4gIH1cclxuPC9kaXY+XHJcbiJdfQ==